PK�����oˆCD6I÷P��P�����commands.py# Here you can create play commands that are specific to the module, and extend existing commands

MODULE = 'play-file-auth'

# Commands that are specific to your module

COMMANDS = ['play-file-auth:hello']

def execute(**kargs):
    command = kargs.get("command")
    app = kargs.get("app")
    args = kargs.get("args")
    env = kargs.get("env")

    if command == "play-file-auth:hello":
        print "~ Hello"


# This will be executed before any command (new, run...)
def before(**kargs):
    command = kargs.get("command")
    app = kargs.get("app")
    args = kargs.get("args")
    env = kargs.get("env")


# This will be executed after any command (new, run...)
def after(**kargs):
    command = kargs.get("command")
    app = kargs.get("app")
    args = kargs.get("args")
    env = kargs.get("env")

    if command == "new":
        pass
PK�����oˆCŒÀÉZ•��•��	���README.mdplay-file-auth
==============

This Module supports authentication of Play! 1.x Applications agains Unix Auth Files (e.g. Apache htusers)

This Plugin works for all Auth Files with the following syntax:


    user1:passwordhash
    user1:passwordhash:...:...:

    group:user1 user2
    group:x:...:user1,user2


The Hash Algorithm has to be either MD5 Crypt or MD5 Apache Crypt.

    $1$...
    $apr1$...PK�����oˆCaCV��V��	���build.xml<?xml version="1.0" encoding="UTF-8"?>

<project name="play-file-auth" default="build" basedir=".">

    <target name="check" unless="play.path">
        <fail message="Please specify Play framework path using -Dplay.path=/path/to/framework/home" />
    </target>

    <path id="project.classpath">
        <pathelement path="${play.path}/framework/classes"/>
        <fileset dir="${play.path}/framework/lib">
            <include name="*.jar"/>
        </fileset>
        <fileset dir="${play.path}/framework">
            <include name="*.jar"/>
        </fileset>
        <fileset dir="lib">
            <include name="*.jar"/>
        </fileset>
    </path>

    <target name="build" depends="compile">
        <mkdir dir="lib" />
        <copy todir="tmp/classes">
            <fileset dir="src">
                <include name="**/*.properties"/>
                <include name="**/*.xml"/>
                <include name="**/play.plugins"/>
                <include name="**/play.static"/>
            </fileset>
        </copy>
        <jar destfile="lib/play-play-file-auth.jar" basedir="tmp/classes">
            <manifest>
                <section name="Play-module">
                    <attribute name="Specification-Title" value="play-file-auth"/>
                </section>
            </manifest>
        </jar>
        <delete dir="tmp" />
    </target>

    <target name="compile" depends="check">
        <mkdir dir="tmp/classes" />
        <javac srcdir="src" destdir="tmp/classes" target="1.5" debug="true">
            <classpath refid="project.classpath" />
        </javac>
    </target>

</project>
PK�����ÈMDxϑ[$���$������manifestversion=0.2
frameworkVersions=1.2.x
PK�����ÈMD׬þ@>��@>�����lib/play-play-file-auth.jarPK
����ĈMD������������	��META-INF/þÊ��PK
���ÈMD½ÿíŠ���¤������META-INF/MANIFEST.MFM±
Â0E÷@þ!£	U¡H·ÖÉ¡"T\噾ÐiR’tÈß›l®çœËÁ‘Á˜äC$ï:qR
g½û#ýzAQX‘תo!á,‡\ûV5Ÿs+¿ÍE¦Ý‰‘tð1Ç„kw§Õ‘3ΰb'ž²\ý¼[älÚP“!
©üÈ%[Š­†,JØÓR—?PK
����ĈMD���������������play/PK
����ĈMD������������
���play/modules/PK
����ĈMD���������������play/modules/fileauth/PK
����ĈMD���������������play/modules/fileauth/utils/PK
���ĈMD��������������play.plugins�PK
���ĈMD)ŽK	��L��$���play/modules/fileauth/FileAuth.classW	xTÕþ_fyo^^X&‹3 h2D° D „5	HH0b¥/3/ÉÓÉÌtæ
‹µ­T¬¶Zmµànµ´Ô†Ä(ŠK¨ûRW*mµ­­Ý÷½¦ÿ}³0IL¾/w9÷ÜsÿsÎϝ÷üǏî0K’U”a‡+q•Œ¯¨p`‡‚«U\ƒ¯ÊøšJùµ
®ý×Es}!dÜ ã…(Â7…äF7Éø–ЉbçNÑïÍÍ2nQq+nSp»Š	¸Cŝ¸KŒ¾­ânÜ£à;ìÆw|OޏOA‚ûÅðªØƒ½ÂÌC
f‘ñ}•èÍ>Ñô)è—ñ¨Œ5xLÅL<.šýâŒ'Dó¤�{@ÁS§e<£â<+¬
Ê8¨bžUð¡ôœ8êy/(xQÁK
^VðŠŒWUÔc‡põ5¯o(ã
	¾E-ë–o\º¢¡~cKsýÚæu‹ê–×o\Uß&ÁÛp¡¾I¯	ë‘Κf+nF:çI(ª‹F–±ZõpҐ ®hÞXß´hqCý	Òy&±¸líê–5ÃL¥ÆëV4Ö¯nY'Á=ߌ˜Ö	ŽŠÊV	κhˆ6Ç7˜£)ÙÝnÄ×éíaC@‰õp«7Å<-tZ]fB‚¿!Ö·ÖtGCɰ‘¨é0Æž´ºj–r°ˆ‚V:
«%aÄ©=±¢2åVÒ2Ã5zŒË®djmü¨•²áçneΞ3\uþèP–, AO³ÙÑ­dœ6N	eìVèϲx4#hwgz°tŒÆl…fÃÊ£°À¶¾|̸>Ñ”ŒF,ÝŒÞ)cñ®’rÙ1¿"-d˜=m"Ì#NÙ¤‡Ín1ìJLO$6Gã!Òшã[c–ZCãšê‘ôI®˜·ØoÈw
Ú‰ìøÔŠ­Yœìè0âFh­¡‡Œ8םaR˜jÆ	åY5Aɦ¨µ4šŒ„귍˜eF#Ô.Íj¬X+W™›ônqÏBFØì6,#>‹Ö…\¸a†©¯
übxDøÖ¤œpêñø4Êˆ°“V™9-×èlꛉúˆ`wȾŽL„2?NßOµ9šŒ¥ö¹E™«5Sœ¯a-š54a5oב\,×]äS6¢ÄÈxSÃ[x›v†±LC<tÂÈú¡áœ§AÍ[xgØ6&\ƒw5´Ù{GfJÂq#E‹“f8$xU>,ù~3áojihðwDã~9¿†Cø‘†÷px˜áÕíAKƏ5ü?e0§ixÈø™†Ÿ£CÃ/ð¡Œ_jø:H‘`4ù#QËŸa`ʺŒ4ü¿!ÁDµ	i—¡™1Ýê’ñ[
¿Ãïi`Äj6c<¹Vèüƒ…2þ¨áOø³Àüšô7“zë·Ùì7#t篮–K‘º¿iø;¶kø¶³x‹0°z
®_d9 T§°æg;«s®Í”PXþ§hþ¥áß8¬á?ø¯†ÿ‰ÑÇ"ÁætG4"—$L>æíФn’{qž[ÂØ!6ø5ɉé¿ä"•ýÝz,F÷Iý’l�S…ÒŽ/¾‘âÜÀú¹íHSJÄpÁÿ$7Þ•°2s'ìð©‹4ÓŸ'·~,&{c°¦hØ&rqⱟ5’ÒVêÁ.£¦N´+ñ°³ÔÖ…É÷y•
#9ÍrrÅhi^ÅÒ|мnÆÝˆ°‚ò`¨%J_FQê¬hæÊ–TŒV¤F¡ínC´³SäȹY3ùyŽÙZ«(Ž–(†ëM»Ò|ðˆZþ ‹„'j—Ì©ƒ•w“7;¶®É¾$nVÖNa˜•“Õuú±Ì´DÌ-i;r·n1q¢ZÛ;Ö°aã«Ùav&ãzŠáe9OÜšx4fÄ-ÓH0$%ùäŒYžo‘Ó£f‚ÖÎ۝oknáÝš°ŒnÞ”`27"Ö:ÞªF3?Õœ•N¨Xy,&8ÍHGô(bÝÆ3!Þ4·™H=G+†¿ƒB«øˆ,ý&©ç¸Á~™]‰XØ´òÿ,©Ìûä;9 _ŽXÒ«4ÉÆxu	qGÏ<v°G›Ì	A1ókÿ05/6BF"¡w
Œx<*nF‚båÇŠ²C…0…ßeüxr‡Uh€„FÎ
àâœï9Ç>¬É‘{0	çäÌçR"‰çŸí:JjØKì]Uû íµUZغmád´²ÕR
XsÙ{Ä»M-±Ùb/Ö¦=„‚](€£mœ{¼®b8úà~òªªƒû ¬ªÚC=‡m{­ÕlG�“p*NÄ,LÅiÙó&AÅœÏÙg†I.àl£ò³D¢"ÏH$êh$óÙžE$gs¾HIÝ0$í£´#˜E"é€>L‰SÖFâröT
Bžq.GO
««ú¡àI5la`F?Æ 'êdšséf6æn³å¥é2®N!¬éLÄ)L‚�X•:
Ì0ìQ—ë2²@€.àŽq0q!møe”¤Ö‚Ùµ‹¸æA8ã€Tšv`[>Æq`‚p |�i¯·¸%UüïE©ãq”õá8ºæ=¾¾(šèäÂV ŸšPtŠ3úp‚-ÊX˜œÇB6(0ž­Á t0(]ŠÉ \DgÂt£›A‰0QæîsW‚Ž$©½™ÙŠËpqN°¶Ù!‚=êN«ÛæšH;í4¤ƒ¥e×.°/R4Ã6iˆ·Af_üNô–÷¿J¦x§öòÛ&ãÏ4úÒ‡é½8Ù{ÊH×*Òm@eo^US`œ;¡²«Þ…Éi;bŸ70,.˜Ù6€š¶À>œº³j>g/f·ÕºQåsÍèÅiµnŸ{¿óª}nÇì^|ÚçvŠ®sX¿{è5¯«Ú;·§ïFujû™NÚnsøœÍ}¨Ý²”t~®4ãØYSÝ~bôâlïÂa~Uïaˆ6á�žÁvóÒ)lE©t¶£—ãL\Át]Éz¶ƒÁ¿ŠÚ×pv-®ÇuØ…q'nB?Gp;­ÝŒAÜ‚·9>„[ùÿ6þ޾CšH-‘ÚóiuÊcúÝ´R‹8IवÙ,

LÃKJl¢ì={´™#¤b‹M†‘(‚‹ðzš+ñ‰óù2¤ÖŽ” K2¤(xŸ§Œ#)6.,A
1\ì­ã°1?–M~¤ÒAvŠ~lôð9Óüpù\6?ÜƒØæsÛü}²Ív®»Qâ³ç¡ÙÕbMٍ"ŸìLO|ÊþÛ† ž§-­õø”ZÕ§îŸ[蘫•j¥…wa²O-Õf×ù<¾"›bË
°~»&íú à“Sìódˆ·Åë	d‰gãÊÏ•!ž-Ÿ+Í%^à(Äâ]*M—*H<Ñ/ÈïbÖtà^&ë>&º‡4¹Kð�Óý ɳ‡e/.Å#$^?©õ(îÁ�µc%œÄ{/“‚oà)ÆÓüäz†-O“8ƒÒd</MÇ+<ñ©
/Jó8^€—¤…xY:¯JI¼f“³‡„;@,_ 9Z(²+P?A+ñEÊT|ˆiø1â#Ö Ë8Òˆb‹Mg™ç¯Nï=Ì÷i‹¹‡Xo°)î"í¯¶)î&†Å]D¢¸‹d(.Ó/—ÎÅ—9*@ƒ4Ã~&h•¦ØdwfŸ‰ÔYñ¬”VZ™÷NŸ;é÷n%âï¤L-ĸÌ
8ˆqÞåé9zœ¢œKvJ¼v)~“½Ít¼C§ѽ˳¿JÊíÇâÁ^ÁuovcêwÉT¶WØX®ü?PK
���ĈMDæ'È­r��p��*���play/modules/fileauth/FileAuthPlugin.classQÛJ1œìÖ®nk«VÛz©U(R\|V
–"…Šâc¶]5’&e/ŠŸå‹‚‚àG‰g·õ*æa&™Ì™œ$/¯Ï�¶±b#‚…Y
1ÌY(Z(1¤w…áƒY_?aHèžÇo	åE}×ó¹+I™ié.—'Üñz$¦ÂK0¬µ’ß:}Ý‹¤8çBz<
/MöiÒ–Ñ…P;¢Õþ` E—‡B«NÈý¾Ò.Cõ—ŒN—«¦v©ØîèÈïzq(Cá{öÖ¿æYXg¨ü”EKµÿtLïØÚô…e«í뾨—ì¡Rž yxô¥úúð.R¸Ó¨|;ªÔ÷;™/*V1F¿,¾á­bF<¶ñ�v—lÛ„éDÌ#C˜ˆ'‰rÅMrĹ'g0[›÷H~¦ä`É_¢Úr’VVŒÒÆé¤<¦(ÏÀtR7ƒEb›”yT°€‰7PK
���ĈMDŒˆvÓ`��%��#���play/modules/fileauth/ScanJob.class}PËNA¬áé.‹ŠÆxpãÁÆ„51«Q80†!ËÙ	ŸåIâÁð£Œ=@ăq“©~Twue?¿Þ?�œ¡n"‰¢‰ÊöÒØO£Âºž/âf—!q¥†‚!çHO<D“¾ðŸxߥNÁQîv¹/u½n&‘Žœ©ËçöD
#Wö‹tÂ‘ÝpïNõ[É¡¢„Áì¨Èˆ©·­5:æ3ÎPyŒ¼PNDW’ÔÛž§BJåÑ…üêÂXõûz&ü¹Öœq7Ò&Î'Ò³B:‡¨Z¨¡ÊPû×Cv£¹¬ëÏk³mJŒ€VŸákG¦£}ÛQ(]ûžOÉ‘©ù[_EÓ�ÇHÐ×_L›#ܢʦÈ(&OÞÀ^—´A˜Z6ó0	­Õ�2”òìÏrk½l,ë-ïm¶',ÒՍ–	k¡ÍhÌa‡b†¸<½B€ÝoPK
���ĈMD:·*m	��ý��*���play/modules/fileauth/utils/MD5Crypt.class­W{PTçÿ}^–¬ ÄEL¨.»à
*>âP4‚´Ö\v/ËÕewݽ‹`Œ±
I“¦¯˜¾lZcŒíšÔ¶&iWª
¶éí_ý/íLg:Ó¦L2ÓtÚ4ôz¾»w‚kÃtÊÎ|óóß9ßy\~ùÁÍ)�Mø™«)¢b.ÄqÒÅ›„$Å ‹!åĨEˆH8eGöo›cÔÓbxXÂÁY'uâœñI'>åB"âü1±šð¸{LOò§%<)4<%á3‚ø´>+†Ï	òçÅêâÞ/Šá1œÏŠÕ—$|Yl¾"†¯
Ö¯9qÁ‰¯ŠúZ»ûÛw·îï#”wWF•@D‰†}zB‹†ï'”´Ç¢I]‰ê•HJ%84=¦´¬åÅf-ªé[	VoýA‚­=âã²n-ªö¦FÕD¿2QÅ­± 9¨$4±7‰6}XKVtÇ#Êx`$JEÔd`H‹¨JJ¤t-’ôìXמëŒÂ6¢hQB•÷ȝ
íJ"<J¨(p,”Åà*oWg}¡sbIêb¾¤vš±Q'—P“©ˆNðÜ!ЖÒ"!5ÁrEA†›Ôt¶Äî=Ò&€Æ÷dI–#mçฮ&›SLõ¶ÕóÍV-g6>r„UM$,óš°’j0•Ðôñ@šL*au‡V“Â|‹:FðÎaêõ¥‚í‘pŒ·Ã#;Ç‚j\×bQæ·…ߨ¿Þî*ä»
	R\I&OÅ!á
E8À™P¢¡°͇‡x›À~&ÆFXpC
óÔY¬Ä•à°Úž…Ú5¯‹æyµ%a›F”°$¸†´¨éӝ×ÔÙÌ¥áos5ñ+ñ-¥£jBß—÷ËÊùY|˜S‡ƒ[‹êê˜.¤	òH(ÐýLb\}±T"¨vh"!JrÁ¾J\%cZœxNÆ7ðMVy@ ÛT›ã©=Ò˜õÝÑÚÜ{ÕŠ×r⢌çqIƸ,ã(>.ã@vàмç.‘Lؾ*°º©yÍÚu-ë7llmkß±³c×îή=Ý=½{÷=°¿¯ÿÀÁCVƒ!u(<¬?‰Æâ'I=5zjlü´/ʸ‚oÉø6Ò2®â%ö4£uâeßÁ5ŽÄùÅ.añÊý©¨®¨ùCá•ïÜsÃPÆ÷ð}×ñ
aëÝAÞݰ¼í«e¼Š×„?`êšê„ë>Á©Z§Äb÷CdË
“ø‘Œ°_ÆMÜ’ñctÊx=»š’±[lo£…cˆ¥zÐ+c;Zeü?%Ôͧèåì4<±wð¸ü0©o<©«#ŒRMðVf#P‹öñËêü¾ª"Ò³¢�™s:.vöve¡!ê©:¦é¢fuŠ{.{$8¬$ZM–vÞ+ñ¸åôXâm¿3%gj¦¤ÇrW,ôÌÝêÿ’š\4¸hv
)ÈYÓt÷úv×Ü^4[¦8;%Z’aµ#¢FÃú°ÑÒ¸TE9O;"1E7(LI¦“&ü*ogávÒ8¯¢;ã[“Г‡4¡¹àƒôÂÊœFáÞ;”}-±ƒÚDÏ”zÑ‚©xȨ}ސéD'7«NãeíÜçT¦8Ô“)%’œ£?v¬Ÿ?€üýXàáu3kŒÝbÞ¯µ/†Ìk.^<®gJ€gâÙî»zÅ`ÙÀ£Ã 6a#r–›p?ÏEØŒ-¦p6ãlÀ7e{E¾)Ç”½
K¹5›m’/r\B%S|¶fŸ½y>Hc¥oÊnÒ­Í|4	§A/ËR&!ñÖÊò3€|pñ¸žÁl಍XÄ0jÈjle[¶q>·¢;ð vÎ=À§Ûxöˆä6AŸfãl<7ÜBÑÀ
¸z',ÓKžCucyqÍBȏ>™Aie‡jÜŽG¶¥§ßlÌÀ}=£
â³±ºQÆucz±’ËŒÐY«¸mh7>,ÏN–“P‡ìâS¨;&Ž>Þ[x®°n®öM]F‰¯ÚÚ?A”žþÛŒÙåÔ|ÅAˆRWÎn4`Xøçf ;
C+°‡	C¹”™
V3‡8s,^€é³×æ¼í±Ynr`/öñìõÒ”îbxâÌ]¾`å×÷ÜÂÂŽ‘ÊÛf48Xgö¾RÃìST81”¿×ɱÒǏ"Pq3ï½Ä²Â¦í¦û»o¡Šç{zü,rK—±¼!OùâªŸ8þôVùâ¥Kme°$ƒ¥‡ÒÓ¿õ1Ÿ›fæIjX0Ê>:Åy˜µÁ
þ¨^‹³¬ñœÇÇ:W0ÒCì/v;û±™g‰oà§áÊþ:Œ#FqK6Ñn6IòùËk&±ìú/>›
qWöN±0RÎÃþÿl·c®Ý—YÛ‹Œ>ÍÚ®²/±Ý/³ÆkÿƒÝGÚ][ÀîÛa77åìMÖ7Øî"ÖülßòÅ\Á½Ý~w]÷YžG™ßš]³µÝlfµ[º‚b¿Õ-	Â$ê6Ù<6_Ë`…Ç֐[ø³qn÷Øsçvn‘§d°²—7Õ-R¥t5[£µRr»¯€‡4앬Æ;!ý%=ý‡ÆIÔç8/ ¾R²½€R!`cž´XŠ[ži‘ÒÓ¿öØ„«Y`}ë2F„F_V¶,#
Ùco´ºÝ†¨#~AìM¬ŒÆ™%ørSØHÏ:ËÚ3!q¡xÆŒ¥M’Gjqâ‘ü٩ܘ­k&Ñàv5ºÆJ;×è–ÅòÜãë©ÊáœD£Áj˳:gXK
²Úó¬ÒkiAVGžµh†µ¬ «3ÏêʳJ9ÝÅ‚lRí9*?GúP­þ“¤orXþð6ªñ×ê?sÀ¿Ëçåîñ×å¿sñ{ŸCøþÿäòõ/ÄðoþüœåHŠy¾B®’Œ×¨7©?'7~ÅûßÐBüŽjð6-û´ïÓ½d¡:*¦•TN^ª&?ÝG
üÐZMÛ¨™vÓ:ê¥ê§Mt”6Sˆ¶Ð	ÚJIÚNç©•.R;½N;èÔAoÑ.z:-ÔeYFÝ–-Ôc餽–>Úg9F}– 0¬ŒsgŸàtŒ]âÏm¿Ñ$ü	sÅ)˜KT^eU¬â•…m}
·+¶X0ˆ Ž£™Ëzv:7¸¸·ÃÁxe£—IœäC›å"b–/WI#ËKü>¿ÑÕW]ã2‹ä$ëL32ú)…PD**hK(Œ¤Í*/^›åÅÍ@M8nÈŸøPK
���ĈMDãûÕX ��[=��+���play/modules/fileauth/utils/UnixCrypt.classz	|TÇ‘~wÏ›™7£‘Ôói!`t 
 À›Ë €,Ä�2BÂ:08²,cçNì$v|Ç8	Ž×	6Ž1‰ì‘l²Î&›Ý\Nœl¼N²Ùun{³›Ý5ÿúª†Ãÿý…ßOßtWWWÕ믫»_?¾öÆžSJÍ7GM¥‰š¤ŒÊéJû/¼ J7.§uZ(B”Tà7Ô=P~úôé©�DëéÀijEõFô}{ …þE͸¹)l&¢j*ù"¸Ù5“ø½Å5‡ð{+4£ôt}'ºÞxàݐ½'lÞU5f•÷¹æý¨| j>h>„~·Cñ˜ù0à#®ù(~ï›éB%°¥©D`”2\R.Z]´ºhuÑ
—”Ê�rè–äÐ-È¡Z]´ºhuÑ
JdXÈ
J”T²d(ePR.üºð†R%,J”ÈTƒ© S@¦2�øE,.bA)ƒ™‚d(eP2£2ä(ƒ@e2(”rÐê ÕA+J”�ʁJ
z P™”�ʁJ
z  V”,üz�çÀ¹°pî,"ð�ax�‹0<€EÀ"`°ÈXä,¢ò�¡y�‹Ð<€Eh€,)€hI@%È4dÔ`�4@�
 ƒ¾}
ú¢™†ŒÐ× ¯A_” Ӑ¹ðæÂ›o.¼E ‹@,™¿˜QP1€�T �€={öPBÈ"E ‹@æ"±¸ˆÅE,È"E ‹@¦,ÆÅj€rQXTã�‹jÜ
8ˆÙ2E‹@QÝH†€ÌP	 â(”E+@ÁìQÈdÞ8÷�x�ƒ0<€A,À  `•00åÁ(ì9°çÀž{ì9°çÀž{ì9°çÀž{ì9°çÀž{¶¸ª8(9?§eÍ᪃ՁŒTxã˜èqN‘99‘2Tr€Tr€Tr€Tr¬ŒñSšÀ2(ë Š02hÍ2hÍ2PÉ2Pɱ23‡8s)2„ • • • •ÀÉ.rƒ€Jg—‰2¨„�mÐÃüs" TCY£A	2´¨AT-2àuÈá’0pøüF~£�ƒŒŠˆb‰ŒbGEEE†(W#ÙHL*É,–�JXþ5d*ƒÖ,ØÏ¢V=
™†LCFK"ëYè`�2
™†LC¦\,74Àt"óXiP¥´àÜ�P‚LC¦2薁^¥,úB¦!ӐiÈHÊè‘E)+iÈ4d2Çád§åÂÁêãðžâ8dU´°¥m(gP­FµÕj(£5ƒV€Ê 5ƒV�6k"–ô˜¨Â2€‹ªY´(hTÑ
ÀfMʰP.,»°PY´fÑ
PY´fÑŠÒ!’ÉIzÊI”—d¼6BU±
�ST¡¤X­ÖÁFåpIñƒª“XÆûŒV](uºŠJ¦OT *Ë ë‚lËP¥lƳ9X@¥d°ªTyF•“dæ}@£ÚШ.#o]j@©ÖeoA‰e(aQè²hµ”¢ÌÍL’LMRIMòd…Éž!™âÖŒ´@7é…Í]aó1­"#½£Ý»{‡GhjníÖÊíÜ!ꫵ
ìîß9:ÒŒê
udÏv­ܴiÃèpï õŒô
íßÖÜGf´
µ÷öv’R¶ö
Zd»‡v´*_Ó?XX7¶w{a¸§wû�I¼5C}½Wô÷£^:£»ûÉÞÜ5ûz6íÚ16PiÚÙ?PèÝÝ46Ú?0Òtù`ÿîáƒûFÛ´*Û~p´Ð3tùàHÿ®Á²]^K±iŠR/×*¸¿w`Œk’•í^Nú#=C«éCÙ­ËWCÛl%ÕÐÐΝ#—õŽö]tF™4»Šô4¡þ+Ä^xÃʍk·­ß@Ïž]Mÿ¶r³î¥¿AúÛKÃ…‘±Qê®É¦{ñÙ!t€×’…‘mäqÛžÂA	¦êѥŸÆÅîHß„}ôG¨¯#¯+¶­\×½qó†­¢B@ï5ô·‘þ6Ñc­ÌæSm?ýÑèlÚ£Ù­ˆÞB+GnèÝ—;S ]g °“"÷ïÚM¿¡1Ôú0àZ-ή¹®woÓ@ï஦M£Ãýƒ»ÚþTRû§"2ÑßÍÄ‘Ùå]HÇ"¯ýƒ½Ïö±;¤ŸüÅåcý;
ÃÐÇœÛR¢Ç£ÉFuý ÆŠžrÎb½`då4‹wí]U,÷Ž
Ÿ
ó­i#7’Zlplï¦séÞÛ;JÜ`ºþyƒBé/ò@vlè¹ah˜è,/Ž†Ï—¸ƒ…ºe¼Ýö¾b>E7ÑŒì+\ԏ¹Pv6	á(ff›91Ó`æÅL³i‰™%¦5fºÌ²˜™a213ÓTÇÌ,À¥fMØÜ3÷˜{µšöÿÙ˜¹ÏÜOƒHÝ0jUš9ÿœ}<f2Gbæaó‰˜I›é1³ÜtÇL¹<fòfQÌÔ˜éôB÷ÖQŒ™*“¢Õ2f>iî
›OÅÌQó¼}:f¶š«cæQó1ó˜ù-¦½ÛûvvîÚÝÝž½ƒCû®ÛÁƒ7.[Þ½båE«.^}É¥kÖ®[¿á²›z.¿âÊ«6oÉÍonY°0¿hñ’Ʀ˜ù¬9¦Õì?k)9+Åúí×úÞ,’á¡Y9PÜ5º›W7dOï¾}…A¢lÞŸ5×Λ¸£CgLNÉ^pR&.dKæø²Q¬t«k»±‚xFBÌ®î†Nx°p`”—¸²s6ÖörܽÛG¤/…ŸÊvÿ_AFFƶ£œJ‹Ìã®ëyKÀ2„<çKF‡8¾ááÞƒð\»µ[Í4ISI›hHUbFP©³ˆgàÝ—~iÎòï¬âo
·—Ò6Ns]i3—j-
ç<¥‚uO+ýŒ¡c›Šâ-E•Ð>3µTЉ’©3õhEž
\LšÐµ•íU÷©’ª¸V×UNÕco±UNhÙÖTÑ7¦	:ªÌäÌ|²Eâ­Þ†óý.©«:¬uËIe:Rg‹Ö=0y~Õ¾¹Zê9÷SUp
…‘PIªeÕ4µHUp(qB¡,PŠK%ÕÄA
Š’±Ô»p,¡ßÖúÔa£+ãêôÄí=R¶îø›ªöÍÕŠbõ‰·D•¢M«*5]Õ©j	,ÏEÕjSŠKˆOsia1*ZžŠQ}ˆ´CèU™¯:”žÈ+ÁԁCmU‰à¡ö¤¨\Ÿtœªõç|W²þ,Q5t´šMã2‡ds)‚,ûï{¦­è?Cþç³ÿŒigÿ(uP)À¥NšWY›f–’,HÑѺYŒn7Άô[AcRµã@å¡ÔDgeúPµñCm•çx*ckõ4éhtæq$uÒ÷l$ì_s©ƒ#)Q¥ì5@^i¯æ+®NÙ̳Ñ5u“*ÐQ&ì>muÒ©°ç$“*HÃÓØIÃÓØ‘²ox¡“*Ü‘.:Ó)Çsߪ•¶®9+ì€ð‚ŠiN33íE'&Ó^	•Ç'S^l"<>Ù™òJ':ù` J„¬=¢§We‰PËݪ"OÙJšÁéàx…Σ*‘rHX¡CB*ˆ…4AçqUhNÙ¥Tr¨M¤lxܶOL6N’0HÂÒq[NÒ²q›+JC$2î01nC“);uÜ.Fc>LÍáætѦK¥0Ù¤'?gÓ†HZ>®B=i˜ay·><Ô	—†!öìĤ™XŸÓ@$\/>A~á0µØÔ8•‹ÊaÒ9ÒGßøEýãg§Æ4I•ÂÔj&Â[T\- )²%O-‹hš,&éÕ®ZÕEªM]J¥
ªCm¥©|­Zª
tö¢÷‚Qµ\TÝdo¥º—4P«Ô#´‚=¡V«/¨KÔ—Õõ
µV}O­W/‘…—Õe:¯zôMêJ}»ºJ? 6ëGÕý”Z¥ŸQ×ð½ZEHçf³‚&a˜4óttÕCºÒ¬¤RÓÐ\ÄLPŸ4«(YhI×ÇÍÅ<ãú1³š'ðT}´˜Jèæ’b*ÑqC&µÞ$“Zªª¢1<„¹CÙN„ÎUÂÚ‡ª%ƒ©ÆC,8×’ÈM¸a{›:@äTWžÓL5fÙ¡èž!ÔsQµg«Ä/Õ+ÎÖÍä¬X¢|®g¸™)>Û3„z±ç›ò½Êj;aåþZ…
´í$w=»Õ3jàÌ�ã¡ÍÚâpʬ+®§ÌúâjtÊl(®F§ÌeTr¸´‚3HöŸ2™ˆ2uÌlMäãp‘¦(N\ÅU£œtÓëÎ@Þ‘äLQTÁØfލštÂI„«Ru'•ß™pÒ‰pðZ©åÃaçèé¤óÁ„Ó™R&ñé/%œ|“v¹“:㉠ʝi3AÌDÞÁŠD¦±†„°†„y'ÂÂ’px¹9#î„”Ì8é 7åBÊÖ³PÆb÷e8
'Áôúd˜TÏeÛ´-(µöz¾Ú¹Giã£LÛOy7J9vrëFÊ©·«Ô~‰šPëÔÍê*z+îS·}‡Ô^u«V‡ÕMêTz'm·©Þ­Þ­TïQª÷ªÇÕûÔSêýêKê”yT/ÐVö]u;eÞ”yV?§¯ªªß©;y"ì£Ü÷h‹ZÉv~¼œ³›Öëœ_ŠKW§ÉëæJž&FýÞ\ÅÓ$¨~c6ó4Y§Ž­«[9ûBä·Ìl¡RX%q¤.NŽÇ.x•ÎםP‰àUùŒšºùi5ª^’à„ª¼ôèéW öªžV©µu*ÝYç杆@ú„šÞ@cM?ÇÕŒtc>H?	§1| ²î³nk8€M†Ÿ;¢Ê“á„è9ìÒúõ9qM­'ïGTU}Â…ÙôçÀí¢ûb’6¹L«›tÁQ>³5b#d:šŒ“QÚ«“‡Ja”¢–|ó%|,®&ó¥‰[zDm
äËùòD™
Q]‰rç@¾<MÄZ¥w«	&©µÔ§¥÷¨’Ã1ͽ%ÇÕ¬Dyãô„‡Ë(šç—>Ö@#snvÁU¡º‡÷ªZuŸjR÷Ó*þ�­ØÒÊüqšM©ÒÚ¢¦ájý^¯ŽÒ<z„æÊ§Õ]T¾_=F-ŸQÇÔgiSÏÓ\ú*­âßPÇÕ·Ô“êÛêsêEjù‰:¡^QO£'Õ¯ÔçÕk´ÊŸVÏè :¥KÔsڪ絯¾¨+Ô_êÙ꤮WOéùê+<Û¾¨|ušÂ³Í%ÏQs
•"4ÿk‹²WÔ*žwed¯æå˜æmf& •®¥’VµºÔôší4ÿštØô™4óZ™•zÞWy¦é©_晢gÿ!ïazÊ;xF»ô”·ñ¬ŒÐsÝÂÂ(=뎥„ž¸×ì¤RŒžûj^äJyöî*Ãî*úŸQ54kg¯9®æ<×QœÂÞ\š¾$ ¹•=©jSûœPuo­‰ëæÑRwÞ¶ì±É¿£à^ w_§”üæy§¶n~|E­mf·é§(Uys§b‡
ñ0(È=f d§Rʯ„N¨†µ
õ䎜žPóÞzLü6ÍwÈàwÏs蛽2òTä‘ÓÛÜÒ™!vèš}g^~fTý›þª×xB5=©æÐD~6º9X¿Ù¡¿ ý…è/L.ýYT,j–«@PˆJe€r€ÄÀL$�SÓ�€$ PHҀ退`& 0P˜
˜˜Èju€z@` Ðää‚óCÍa‚—`E}¡… o!Yd#„‹m”p‰-!l…¸ÛY±ƒ;Yq)+v±â2#\nK	»má
[N¸ÒZ‹lœp•õ/¶>áj;…ð› ¼ÔN%\c§®µ„ël’p½­$Ü`«/³)6M¸ÉN'ì±3/·Â+ìLÂ+m5áUv!
á;›p+ë\Í:×°ÎÛXgë\Ë:½váv;—°Ïf	wØZ‚­#Üië	wÙÂÝva¿m$¼Î6î±9Â;Ÿp¯m&´-„Cvá>»ðz›'¶‹GìbÂQ»„p̶î·m„7Øv¶ƒð í$¼Ñ.%|;hܘ�ÜXÿ¤šaí³MãšÆ=›ƒNÏæý…éÏ¥?‹ŠE
ë?Mc”¢€@P
(”zžTeÖ=¥r›¶ëLz€¾ GOòèÁÂ=—ëá±B+ìá±Ü¸«'qdG=<d‰‡‡ŒyxÈRYæá!Ë=<¤eJâ<pž‡ö=<ðœðº5Þ2¤·ywÑ!wÑ£ÒëFòx+=ÞJ¤wòÇ[…ò.Fy«‘BÞ%È!ïR$‘·Yä­EyëGÞz$’·™ä]†Tò6"—¼MH&¯Ùä]Žtò®@>yW"¡¼«QÞf¤”·9åmERyW#«¼kUÞېUÞ6d•w-²ÊëEVyÛ‘U^ÒÊہ´ò
H+o'ÒÊÛ…´òv¯ßD#–¯Ÿ8ˆgH¸$ì	LÂ^&a$ =#Þˆg¦`Sp=S0ÌŒ0£  ¸7â5ŠIØÏ$ÜÀ$`2	72	Ì&½·ƒƒxÃ$Œ3	71	LÂÍLÂ$“p“pˆI¸•I8Ì$¼ƒIx'“p“ð.&áÝLÂ{˜„÷2	ïcÞÏ$|€Iø “ð!&áv&á&áÃLÂG˜„2	w2	w1	cîfîaîeîcîg`d>N$Ï‘à G@ÁààLÁ'™‚O¬²‘çÀQ&à&àÓLÀ£LÀ_01†	ˆÍYð&à³LÀ1&àq&à	&à8`gáÄ{’	øðp‚	xš	8É|ž	øðð,pŠ	xŽ	xž	ø"ð%&à/™€¿bþš	ø&àËLÀW˜€¿e¾Ê|	ø;&à&àëLÀß3ß`¾Éüð-&à™€b¾Í|‡	ø.ð=" t^|Y 9^$
°¹Þ@A\»ÌÁÁAÜòZä½Ä‰WÌÏÀCœ÷®RïÇ "w™‰ÞO8^fþ…yx…yø)óð3æáçÌÿ‚ïœÿÆ,ü;³ð*³ðKfáW̯™…ß0¿e~Ç,üžYxYxYøfáÌÂ2ÿÅ,ü‘YøofᘅÿeÞ`Nƒbs¾Æšïk̏f_c~´øºÀט–}‰™÷5Ö‰E>Ùb_c#_âkìä­¾ÆVÞækìåí¾ÆfÞákìæ¾Æv¾Ô×–h	ŸGË-HÚB¾¦M>+Èbªc»ûû½‹=ÄF|=…³{G‰¯±ûÇ|í¿ÔרÿË|@¹¯“LÌ÷AŒ¯qð|“€ïk¦øg„¯q˜êkœ¦ùÛD…¯±×'}Í¾Òרí«|í>åkì÷i_cßîkìø3|-?#sg¦¯±õWû{ÿ,_có¯‰[Œæl_ã0Ç×8Ìõ5ŽY_ãPëkìNu¾Æ³ÖûG_ã,0Ïר5}½PhËsö¼$¬-ÖkK„µVa­MXkÖ:„µNam©°Ö%¬-Ö–kÝÂÚ
am%±æžÇ-A¤±D;g˜÷×׫8Wˆ»˜‰û­·š‰{]ˆ»Dˆ»Tˆ[#Ä­â°³òXÅyÙñø¬H¬a¯w´°†=wj܉k—	k…µMÂZ°v¹°v…°v¥°v•°¶™³«_HÛ"¤mÒ®æήÎÞ&œmήÎz…³íÂYŸp¶C8+g;…³]’j»…´~!í:!m6 ¤íÒ…´!!mŸv½6,¤i£BÚ˜¶_H»H³ç-¼úq°!ڜن|}PÒíFa
»³ËÇîH\ˁìam\X»IX›ÖnÖ&9ÝöHºÝ"évHˆ»UÒí°÷I·w
q·	qïâÞ-ĽGˆ{¯÷>!îýBÜ„¸rºñ83PÂ܇„¹Û™¹cÂÜÂ܇…9lîÙ¸ÁSÕÆV˜û¨0w§0w—0÷1aînaîaî^aî>aî~aîaîAaîãÂÜCÂÜaîaaîÂÜ'…¹O	sG…¹G„¹Os‚¹óWÉŸœ9>øšN�á ó†S@ˆO
D¶—OyÈ6¢¾>&Äá ‹gŒ÷„w\ˆÃ! xœöõ焸§„8œ¦ðñö´ðvRxñ "žÉo_ÞžÞp@HÅ3ÕÂÛ)áí9áíyæÍ-.“_Þ¾$¼áÐPw÷WBÜ_qÃÄe•¤Ü—…¸¯q8H4ijFˆûª÷5!GŠœþ‰¸„¸¯q8\,ˆ»ÕBÜ7„¸o
q8f,Žg3BÜ·„¸âøÀÏVqßâ¾#Ä}wý¦'Uù›^ƒ|ý=0HË`Ð×ßg
qþðõ˜ÄJò½$,b¿*
#Ü,þHXü±¤ß?‹8¹È‚t¶¼Ð‡?_ÿE’ïE!ñGB⏅ė%ùÐ!)¹T)ˆÄW˜D¦Åçtžw¿ f«ÅÐ,	£F¢žÍÑÌWsE#+jÅj¸ª—gngž'Ñ4аIΉŸùÒ¡Y„-Ôˆ…â(/1,Bt‹9‚%ÒÞ*Úm\»xéx:%ž¥ˆàì{“¯Z¼Üá$"‚~†õ’(W^ŽBü:–;—w8äEqB*áv¢ë_…®_HÒá(Xfº°DÄù%Å“~¾X!¶p0Lð»\ýˆ•
VNJs¥˜¬â³RŠuÓlrºÄ7ƒŸÀf¤ëLÑ.¾C‰…ј-sؐ\
±µZ±SÇFë%‰p+4Š™&Ž*'æ‹B3ŸÙâ‚°ÐóS¡ç˜¤†a±Ø\ÂZÅ[ØÎ&;Â’Y?rŽ{Ÿò5™_¿ŠCH³óKΨ_áðø°$Ô/…ž_KBáÁ1ùô[ɧß	A¿‚^‚~'…sŠ\ʱUP„ºw`è5É'ôÊf§qPH§×…¤ßIÿ!é—)‰F®ê8ÌÒžã3ÙxµÄ0‹­Öˆ§Ùı3WNîî¤k˜®ï
¢>}4J”Mb6'çK´Í¬Ñ"ØãB‰</>‰ÝÅ"\Tz]Ré5I¥—T‚ÙN~‚¥óì»—¯ÿÀdÑ‹I0È\ýWñª”ß—¨þGaê¿…©ÿ‘DÂÞå÷ª’¸c„©Ç„)¼è”ñɾœ¬¯ÿW˜Â‹'÷~PˆzCˆú#‡Ó¤½B¬Ê]ª8¯ç)Ž«¬NçxéEìûBd3¥o5ËfI\5âj¶tžïs½âªçrÉ*¾ëÅŸ\´ŠÉFñÝ$
9~®ùâºYž¸…½-Ù pôŸÂÑ„#]"q´²ï6ñÝ.ñv°ÕN‰w)ž}Ã؉w©³¯È¾>Œ2|¬ç†P|™ëùÁeeáW⨚KâËÅץܙRÊ ±å–[â|àöâ]èëËË÷q’'gV=X­`I1ZÉqÙ*é›’XÒ2-|li†8ÌÈÏLéW-fI‡	~6[ž#næJ�YŽ­V­or+.‘ÍãöFñØ$Vsâc¾›‹ïΧ™-ƒ…K^\$Þ‹%¢Ò*îÛD¥#뗝ôRÄyö%·©Îåüñ÷aÔŠ7©!¾<
ó¦+·ª¾Œò-e	¿LÇøžµ–(.åt”ånq6áñ§|ŽÓ	~3˜Ê7œÓ¸µ‚-'ÙB%[®—)VM³Ëélz»ÌHóLÖ­fÑ,n®a«³ùuC¾Qpc–kÅû¬çXsûod7Mì2Ç’ù,ifÍ~šü¬9Ò<{”“‚X^­­¬ÙÆ‘´³f‡„Ûɦ—’ûs/Uü¾ïÄÕ$Î	†W7â¼Á5FÜJÞX¼Éç ߀шoðލ+ì£%¾ÁíIÌ‘¤)‘¤¨\¬¨ÇåvÁ³>û(~$bßt°ƒsZàØa…op
“ŒÛ[8qØpœ¤D”…é>ÒÆen¸m¦P-*³$Ž	`¶t˜#æŠJVb¬•îuB1qX}ž׈�š$ÞgtlQ‹t\ ŠÃ¼<ê"q¸Xžd	µÊX´‰B»¸è…Ny„¥P9÷2å›RìF¦Œ+/~¸óñFHäà+Q(÷N†ïøÍ(Â× QßL¾p•EË\B›*Œáú©\:c¸…Š‹Š'†}ö‚•ÎÎС¸Ò±á
ö’ä—èJ1[ÅñÒùn«Ó9z;ƒ#ËpËLi©›³ÄCÄ9›­J:‰Ÿ¬­uV½Ù Æç±ñF‘5‰FNÌÎgÍò -âq^(óbx‘¨,¶òÅv[eDÚœ]Ÿ¶J…-<ÁR´Ó”'lá#™ƒodA|é	áYÈ\þ>âïcaþ>æò÷±‹ò÷±þ>³¸Õ*µ¸Ô*³¸Ó*·¸Ò²Ÿ}âŸ}<‹k+ßâºjŠÅr‘°XX¦Z¤ÿ4Ë‹œÅíTÒârªÒâ*ªÊâ
*e±È¤-“évó‚Å'cqí4ÓâÖ©ÚâÒi–ŝSÅ•Ól‹»¦9WGs-n޲Gµ÷Fu×Fõ·F
vӁ;£F‹½§ÉâÆ(gÁÂ|‹û¢f‹ë¢‹Û¢—E-îŠòWE‹ì0³€‹¢%÷D­×Dm·Díßj:,¾ÕtZ\-µ7®RÍÂÕçý7Е«^2ßT?
ÌT?·Y½*}~€4®ç/îÃÿPK
����ĈMD������������	���������íA����META-INF/þÊ��PK
���ÈMD½ÿíŠ���¤��������������¤+���META-INF/MANIFEST.MFPK
����ĈMD����������������������íAç���play/PK
����ĈMD������������
����������íA
��play/modules/PK
����ĈMD����������������������íA5��play/modules/fileauth/PK
����ĈMD����������������������íAi��play/modules/fileauth/utils/PK
���ĈMD����������������������¤£��play.pluginsPK
���ĈMD)ŽK	��L��$�����������¤Ï��play/modules/fileauth/FileAuth.classPK
���ĈMDæ'È­r��p��*�����������¤
��play/modules/fileauth/FileAuthPlugin.classPK
���ĈMDŒˆvÓ`��%��#�����������¤Ô��play/modules/fileauth/ScanJob.classPK
���ĈMD:·*m	��ý��*�����������¤u��play/modules/fileauth/utils/MD5Crypt.classPK
���ĈMDãûÕX ��[=��+�����������¤*��play/modules/fileauth/utils/UnixCrypt.classPK������_��Ë:����PK�����oˆCÔQ.^Þ���Þ������conf/routes# This file defines all module routes (Higher priority routes first)
#
# import these routes in the main app as :
# *     /                       module:play-file-auth
#
# ~~~~

GET     /?                      Module.indexPK�����oˆC1Sù*T���T������conf/application.confapplication.name=play-file-auth
application.mode=dev
application.secret=test
db=mem
PK�����oˆCæ´(ÕJ���J������conf/dependencies.ymlself: play -> play-file-auth 0.2

require:
    - play
    - play -> securePK�����oˆCÌ;¨U¬���¬���
���conf/messages# Default play-file-auth messages
# You can specialize this file for each language.
# For exemple, for french create a messages.fr file

#play-file-auth.name=play-file-authPK�����oˆC���������������src/play.pluginsPK�����oˆCˆŽ6©™��™��&���src/play/modules/fileauth/ScanJob.java/**
 * ScanJob
 * 31.07.2012
 * @author Philipp Haussleiter
 *
 */
package play.modules.fileauth;

import play.jobs.Every;
import play.jobs.Job;

/**
 * Periodically Scan of user/group files. Scan runs every 5 mins.
 * @author Philipp Haußleiter
 */
@Every("5min")
public class ScanJob extends Job {
    @Override
    public void doJob(){
        FileAuth.scanUsers();
        FileAuth.scanGroups();
    }
}
PK�����ÀˆMD”DÐt��t��'���src/play/modules/fileauth/FileAuth.java/**
 * FileAuth 31.07.2012
 *
 * @author Philipp Haussleiter
 *
 */
package play.modules.fileauth;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import play.Logger;
import play.Play;
import play.cache.Cache;
import play.modules.fileauth.utils.MD5Crypt;
import play.modules.fileauth.utils.UnixCrypt;

/**
 * Basic Wrapper for all FileAuth Functions.
 *
 * @author Philipp Haußleiter
 */
public class FileAuth {

    /* Cache Key for User/PasswordHash Map */
    public final static String AUTH_FILE_USERS_CACHE_KEY = "AUTH_FILE_USERS";
    /* Cache Key for Group/Users Map */
    public final static boolean IS_ENABLED = isEnabled();
    public final static String AUTH_FILE_GROUPS_CACHE_KEY = "AUTH_FILE_GROUPS";
    private final static String CACHE_TIMEOUT = "5mn";

    /**
     * Returns a Map of all Users (user/password hash).
     *
     * @return the Map.
     */
    public static Map<String, String> getUsers() {
        if (!IS_ENABLED) {
            return new HashMap<String, String>();
        }
        Map<String, String> users = Cache.get(AUTH_FILE_USERS_CACHE_KEY, HashMap.class);
        if (users == null) {
            users = scanUsers();
        }
        return users;
    }

    /**
     * Returns a Map of all Groups (groups/usernames).
     *
     * @return the Map.
     */
    public static Map<String, Set<String>> getGroups() {
        if (!IS_ENABLED) {
            return new HashMap<String, Set<String>>();
        }
        Map<String, Set<String>> groups = Cache.get(AUTH_FILE_GROUPS_CACHE_KEY, HashMap.class);
        if (groups == null) {
            groups = scanGroups();
        }
        return groups;
    }

    /**
     * Checks if a group contains a given username.
     *
     * @param group the Group to check.
     * @param user the user to check.
     * @return true if user is in group, otherwise false.
     */
    public static boolean contains(String group, String user) {
        if (!IS_ENABLED) {
            return true;
        }
        if (group == null || user == null) {
            return false;
        }
        Map<String, Set<String>> groups = getGroups();
        Set<String> groupUsers = groups.get(group);
        if (groupUsers == null) {
            return false;
        }
        return groupUsers.contains(user);
    }

    /**
     * Validates an user with a given password agains the user/password hash
     * mapping.
     *
     * @param user the given user.
     * @param password the given password (clear text).
     * @return true if validation okay, otherwise false.
     */
    public static boolean validate(String user, String password) {
        if (!IS_ENABLED) {
            return true;
        }
        if (user == null || password == null) {
            return false;
        }
        Map<String, String> users = getUsers();
        String encryptedPass = users.get(user);
        if (encryptedPass == null) {
            Logger.warn("encryptedPass is NULL for user " + user);
            return false;
        }
        if (encryptedPass.startsWith("$") 
                && MD5Crypt.verifyPassword(password, encryptedPass)) {
            return true;
        }
        if(encryptedPass.length() == 13 
                && UnixCrypt.matches(encryptedPass, password)){
            return true;
        }
        Logger.warn("could not validate user " + user);
        return false;
    }

    /**
     * Rescans the users file.
     *
     * @return the updated Map of users.
     */
    public static Map<String, String> scanUsers() {
        String fileName = Play.configuration.getProperty("authfile.users.path");
        String delimeter1 = Play.configuration.getProperty("authfile.users.delimeter", ":");
        Logger.info("@" + System.currentTimeMillis() + " Scanning Users in " + fileName);
        Map<String, String> users = new HashMap<String, String>();
        File file = new File(fileName);
        if (file == null || !file.exists() || !file.isFile()) {
            Logger.warn(fileName + " is not a valid Auth-File!");
        }
        try {
            BufferedReader br = new BufferedReader(new FileReader(file));
            String line;
            String parts[];
            while ((line = br.readLine()) != null) {
                parts = line.split(delimeter1);
                /*
                 * Matches
                 * user:hash
                 * user:hash:uid: ...
                 */
                if (parts.length > 1) {
                    users.put(parts[0].trim(), parts[1].trim());
                }
            }
            Cache.set(AUTH_FILE_USERS_CACHE_KEY, users, CACHE_TIMEOUT);
        } catch (FileNotFoundException ex) {
            Logger.error(ex.getLocalizedMessage(), ex);
        } catch (IOException ex) {
            Logger.error(ex.getLocalizedMessage(), ex);
        }
        Logger.info("found " + users.size() + " mappings");
        return users;
    }

    /**
     * Rescans the groups file.
     *
     * @return the updated Map of groups.
     */
    public static Map<String, Set<String>> scanGroups() {
        String fileName = Play.configuration.getProperty("authfile.groups.path");
        String delimeter1 = Play.configuration.getProperty("authfile.users.delimeter", ":");
        String delimeter2 = Play.configuration.getProperty("authfile.groups.delimeter", " ");
        Logger.info("@" + System.currentTimeMillis() + " Scanning Groups in " + fileName);
        Map<String, Set<String>> groups = new HashMap<String, Set<String>>();
        File file = new File(fileName);
        if (!file.exists() || !file.isFile()) {
            Logger.warn(fileName + " is not a valid Auth-File!");
        }
        try {
            BufferedReader br = new BufferedReader(new FileReader(file));
            String line;
            String parts[];
            String userParts[];
            Set<String> users;
            while ((line = br.readLine()) != null) {
                parts = line.split(delimeter1);
                if (parts.length > 1) {
                    if (parts.length > 2) {
                        userParts = parts[parts.length - 1].split(delimeter2);
                    } else {
                        userParts = parts[1].split(delimeter2);
                    }
                    if (userParts.length > 0) {
                        users = new HashSet<String>();
                        for (String user : userParts) {
                            users.add(user.trim());
                        }
                        groups.put(parts[0].trim(), users);
                    }
                }
            }
            Cache.set(AUTH_FILE_GROUPS_CACHE_KEY, groups, CACHE_TIMEOUT);
        } catch (FileNotFoundException ex) {
            Logger.error(ex.getLocalizedMessage(), ex);
        } catch (IOException ex) {
            Logger.error(ex.getLocalizedMessage(), ex);
        }
        Logger.info("found " + groups.size() + " mappings");
        return groups;
    }

    private static boolean isEnabled() {
        if (Play.configuration.getProperty("authfile.users.path") == null
                || Play.configuration.getProperty("authfile.groups.path") == null) {
            Logger.info("FileAuth not enabled. authfile.users.path or authfile.groups.path not set!");
            return false;
        }
        return true;

    }
}
PK�����oˆC4ÿÑ^º��º��-���src/play/modules/fileauth/FileAuthPlugin.java/**
 * FileAuthPlugin
 * 31.07.2012
 * @author Philipp Haussleiter
 *
 */
package play.modules.fileauth;

import play.PlayPlugin;

/**
 * Entry Class for first file scan.
 * @author Philipp Haußleiter
 */
public class FileAuthPlugin extends PlayPlugin {

    /**
     * Trigger to scan the files for the first Time.
     */
    @Override
    public void onApplicationStart() {
        ScanJob job = new ScanJob();
        job.now();
    }
}
PK�����ÀˆMDk*ø0��ø0��-���src/play/modules/fileauth/utils/MD5Crypt.java/*

MD5Crypt.java

Created: 3 November 1999

Java Port By: Jonathan Abbey, jonabbey@arlut.utexas.edu

Original C Version:
----------------------------------------------------------------------------
"THE BEER-WARE LICENSE" (Revision 42):
<phk@login.dknet.dk> wrote this file.  As long as you retain this notice you
can do whatever you want with this stuff. If we meet some day, and you think
this stuff is worth it, you can buy me a beer in return.   Poul-Henning Kamp
----------------------------------------------------------------------------

This Java Port is  

Copyright (c) 1999-2010 The University of Texas at Austin.

All rights reserved.

Redistribution and use in source and binary form are permitted
provided that distributions retain this entire copyright notice
and comment. Neither the name of the University nor the names of
its contributors may be used to endorse or promote products
derived from this software without specific prior written
permission. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE.

 */
package play.modules.fileauth.utils;

import java.security.MessageDigest;

/*------------------------------------------------------------------------------
class
MD5Crypt

------------------------------------------------------------------------------*/
/**
 * This class defines a method,
 * {@link MD5Crypt#crypt(java.lang.String, java.lang.String) crypt()}, which
 * takes a password and a salt string and generates an OpenBSD/FreeBSD/Linux-compatible
 * md5-encoded password entry.
 */
public final class MD5Crypt {

    /**
     * Command line test rig.
     */
    static public void main(String argv[]) {
        if ((argv.length < 1) || (argv.length > 3)) {
            System.err.println("Usage: MD5Crypt [-apache] password salt");
            System.exit(1);
        }

        if (argv.length == 3) {
            System.err.println(MD5Crypt.apacheCrypt(argv[1], argv[2]));
        } else if (argv.length == 2) {
            System.err.println(MD5Crypt.crypt(argv[0], argv[1]));
        } else {
            System.err.println(MD5Crypt.crypt(argv[0]));
        }

        System.exit(0);
    }
    public static final String SALTCHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
    public static final String itoa64 = "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";

    public static final String to64(long v, int size) {
        StringBuilder result = new StringBuilder();

        while (--size >= 0) {
            result.append(itoa64.charAt((int) (v & 0x3f)));
            v >>>= 6;
        }

        return result.toString();
    }

    public static final void clearbits(byte bits[]) {
        for (int i = 0; i < bits.length; i++) {
            bits[i] = 0;
        }
    }

    /**
     * convert an encoded unsigned byte value into a int
     * with the unsigned value.
     */
    public static final int bytes2u(byte inp) {
        return (int) inp & 0xff;
    }

    static private MessageDigest getMD5() {
        try {
            return MessageDigest.getInstance("MD5");
        } catch (java.security.NoSuchAlgorithmException ex) {
            throw new RuntimeException(ex);
        }
    }

    /**
     * <p>This method actually generates a OpenBSD/FreeBSD/Linux PAM compatible
     * md5-encoded password hash from a plaintext password and a
     * salt.</p>
     *
     * <p>The resulting string will be in the form '$1$&lt;salt&gt;$&lt;hashed mess&gt;</p>
     *
     * @param password Plaintext password
     *
     * @return An OpenBSD/FreeBSD/Linux-compatible md5-hashed password field.
     */
    public static final String crypt(String password) {
        StringBuilder salt = new StringBuilder();
        java.util.Random randgen = new java.util.Random();

        /* -- */

        while (salt.length() < 8) {
            int index = (int) (randgen.nextFloat() * SALTCHARS.length());
            salt.append(SALTCHARS.substring(index, index + 1));
        }

        return MD5Crypt.crypt(password, salt.toString());
    }

    /**
     * <p>This method actually generates a OpenBSD/FreeBSD/Linux PAM compatible
     * md5-encoded password hash from a plaintext password and a
     * salt.</p>
     *
     * <p>The resulting string will be in the form '$1$&lt;salt&gt;$&lt;hashed mess&gt;</p>
     *
     * @param password Plaintext password
     * @param salt A short string to use to randomize md5.  May start with $1$, which
     *             will be ignored.  It is explicitly permitted to pass a pre-existing
     *             MD5Crypt'ed password entry as the salt.  crypt() will strip the salt
     *             chars out properly.
     *
     * @return An OpenBSD/FreeBSD/Linux-compatible md5-hashed password field.
     */
    public static final String crypt(String password, String salt) {
        return MD5Crypt.crypt(password, salt, "$1$");
    }

    /**
     * <p>This method generates an Apache MD5 compatible
     * md5-encoded password hash from a plaintext password and a
     * salt.</p>
     *
     * <p>The resulting string will be in the form '$apr1$&lt;salt&gt;$&lt;hashed mess&gt;</p>
     *
     * @param password Plaintext password
     *
     * @return An Apache-compatible md5-hashed password string.
     */
    public static final String apacheCrypt(String password) {
        StringBuilder salt = new StringBuilder();
        java.util.Random randgen = new java.util.Random();

        /* -- */

        while (salt.length() < 8) {
            int index = (int) (randgen.nextFloat() * SALTCHARS.length());
            salt.append(SALTCHARS.substring(index, index + 1));
        }

        return MD5Crypt.apacheCrypt(password, salt.toString());
    }

    /**
     * <p>This method actually generates an Apache MD5 compatible
     * md5-encoded password hash from a plaintext password and a
     * salt.</p>
     *
     * <p>The resulting string will be in the form '$apr1$&lt;salt&gt;$&lt;hashed mess&gt;</p>
     *
     * @param password Plaintext password
     * @param salt A short string to use to randomize md5.  May start with $apr1$, which
     *             will be ignored.  It is explicitly permitted to pass a pre-existing
     *             MD5Crypt'ed password entry as the salt.  crypt() will strip the salt
     *             chars out properly.
     *
     * @return An Apache-compatible md5-hashed password string.
     */
    public static final String apacheCrypt(String password, String salt) {
        return MD5Crypt.crypt(password, salt, "$apr1$");
    }

    /**
     * <p>This method actually generates md5-encoded password hash from
     * a plaintext password, a salt, and a magic string.</p>
     *
     * <p>There are two magic strings that make sense to use here.. '$1$' is the
     * magic string used by the FreeBSD/Linux/OpenBSD MD5Crypt algorithm, and
     * '$apr1$' is the magic string used by the Apache MD5Crypt algorithm.</p>
     *
     * <p>The resulting string will be in the form '&lt;magic&gt;&lt;salt&gt;$&lt;hashed mess&gt;</p>
     *
     * @param password Plaintext password
     * @param salt A short string to use to randomize md5.  May start
     * with the magic string, which will be ignored.  It is explicitly
     * permitted to pass a pre-existing MD5Crypt'ed password entry as
     * the salt.  crypt() will strip the salt chars out properly.
     * @param magic Either "$apr1$" or "$1$", which controls whether we
     * are doing Apache-style or FreeBSD-style md5Crypt.
     *
     * @return An md5-hashed password string.
     */
    public static final String crypt(String password, String salt, String magic) {
        /* This string is magic for this algorithm.  Having it this way,
         * we can get get better later on */

        byte finalState[];
        MessageDigest ctx, ctx1;
        long l;

        /* -- */

        /* Refine the Salt first */

        /* If it starts with the magic string, then skip that */

        if (salt.startsWith(magic)) {
            salt = salt.substring(magic.length());
        }

        /* It stops at the first '$', max 8 chars */

        if (salt.indexOf('$') != -1) {
            salt = salt.substring(0, salt.indexOf('$'));
        }

        if (salt.length() > 8) {
            salt = salt.substring(0, 8);
        }

        ctx = getMD5();

        ctx.update(password.getBytes());    // The password first, since that is what is most unknown
        ctx.update(magic.getBytes());    // Then our magic string
        ctx.update(salt.getBytes());    // Then the raw salt

        /* Then just as many characters of the MD5(pw,salt,pw) */

        ctx1 = getMD5();
        ctx1.update(password.getBytes());
        ctx1.update(salt.getBytes());
        ctx1.update(password.getBytes());
        finalState = ctx1.digest();

        for (int pl = password.length(); pl > 0; pl -= 16) {
            ctx.update(finalState, 0, pl > 16 ? 16 : pl);
        }

        /* the original code claimed that finalState was being cleared
        to keep dangerous bits out of memory, but doing this is also
        required in order to get the right output. */

        clearbits(finalState);

        /* Then something really weird... */

        for (int i = password.length(); i != 0; i >>>= 1) {
            if ((i & 1) != 0) {
                ctx.update(finalState, 0, 1);
            } else {
                ctx.update(password.getBytes(), 0, 1);
            }
        }

        finalState = ctx.digest();

        /*
         * and now, just to make sure things don't run too fast
         * On a 60 Mhz Pentium this takes 34 msec, so you would
         * need 30 seconds to build a 1000 entry dictionary...
         *
         * (The above timings from the C version)
         */

        for (int i = 0; i < 1000; i++) {
            ctx1.reset();

            if ((i & 1) != 0) {
                ctx1.update(password.getBytes());
            } else {
                ctx1.update(finalState, 0, 16);
            }

            if ((i % 3) != 0) {
                ctx1.update(salt.getBytes());
            }

            if ((i % 7) != 0) {
                ctx1.update(password.getBytes());
            }

            if ((i & 1) != 0) {
                ctx1.update(finalState, 0, 16);
            } else {
                ctx1.update(password.getBytes());
            }

            finalState = ctx1.digest();
        }

        /* Now make the output string */

        StringBuilder result = new StringBuilder();

        result.append(magic);
        result.append(salt);
        result.append("$");

        l = (bytes2u(finalState[0]) << 16) | (bytes2u(finalState[6]) << 8) | bytes2u(finalState[12]);
        result.append(to64(l, 4));

        l = (bytes2u(finalState[1]) << 16) | (bytes2u(finalState[7]) << 8) | bytes2u(finalState[13]);
        result.append(to64(l, 4));

        l = (bytes2u(finalState[2]) << 16) | (bytes2u(finalState[8]) << 8) | bytes2u(finalState[14]);
        result.append(to64(l, 4));

        l = (bytes2u(finalState[3]) << 16) | (bytes2u(finalState[9]) << 8) | bytes2u(finalState[15]);
        result.append(to64(l, 4));

        l = (bytes2u(finalState[4]) << 16) | (bytes2u(finalState[10]) << 8) | bytes2u(finalState[5]);
        result.append(to64(l, 4));

        l = bytes2u(finalState[11]);
        result.append(to64(l, 2));

        /* Don't leave anything around in vm they could use. */
        clearbits(finalState);

        return result.toString();
    }

    /**
     * This method tests a plaintext password against a md5Crypt'ed hash and returns
     * true if the password matches the hash.
     *
     * This method will work properly whether the hashtext was crypted
     * using the default FreeBSD md5Crypt algorithm or the Apache
     * md5Crypt variant.
     *
     * @param plaintextPass The plaintext password text to test.
     * @param md5CryptText The Apache or FreeBSD-md5Crypted hash used to authenticate the plaintextPass.
     */
    public static final boolean verifyPassword(String plaintextPass, String md5CryptText) {
        if (md5CryptText.startsWith("$1$")) {
            return md5CryptText.equals(MD5Crypt.crypt(plaintextPass, md5CryptText));
        } else if (md5CryptText.startsWith("$apr1$")) {
            return md5CryptText.equals(MD5Crypt.apacheCrypt(plaintextPass, md5CryptText));
        } else {
            return false;
        }
    }
}
PK�����ÀˆMD+<|ćO��‡O��.���src/play/modules/fileauth/utils/UnixCrypt.javapackage play.modules.fileauth.utils;

/**
 * Copyright c 2005-2012. Licensed under GNU LESSER General Public License,
 * Version 3. http://www.gnu.org/licenses
 */
import java.util.Random;

public class UnixCrypt {

    private UnixCrypt() {
    }

    private static int byteToUnsigned(byte b) {
        int value = b;
        return value < 0 ? value + 256 : value;
    }

    private static int fourBytesToInt(byte b[], int offset) {
        int value = byteToUnsigned(b[offset++]);
        value |= byteToUnsigned(b[offset++]) << 8;
        value |= byteToUnsigned(b[offset++]) << 16;
        value |= byteToUnsigned(b[offset++]) << 24;
        return value;
    }

    private static void intToFourBytes(int iValue, byte b[], int offset) {
        b[offset++] = (byte) (iValue & 0xff);
        b[offset++] = (byte) (iValue >>> 8 & 0xff);
        b[offset++] = (byte) (iValue >>> 16 & 0xff);
        b[offset++] = (byte) (iValue >>> 24 & 0xff);
    }

    private static void PERM_OP(int a, int b, int n, int m, int results[]) {
        int t = (a >>> n ^ b) & m;
        a ^= t << n;
        b ^= t;
        results[0] = a;
        results[1] = b;
    }

    private static int HPERM_OP(int a, int n, int m) {
        int t = (a << 16 - n ^ a) & m;
        a = a ^ t ^ t >>> 16 - n;
        return a;
    }

    private static int[] des_set_key(byte key[]) {
        int schedule[] = new int[32];
        int c = fourBytesToInt(key, 0);
        int d = fourBytesToInt(key, 4);
        int results[] = new int[2];
        PERM_OP(d, c, 4, 0xf0f0f0f, results);
        d = results[0];
        c = results[1];
        c = HPERM_OP(c, -2, 0xcccc0000);
        d = HPERM_OP(d, -2, 0xcccc0000);
        PERM_OP(d, c, 1, 0x55555555, results);
        d = results[0];
        c = results[1];
        PERM_OP(c, d, 8, 0xff00ff, results);
        c = results[0];
        d = results[1];
        PERM_OP(d, c, 1, 0x55555555, results);
        d = results[0];
        c = results[1];
        d = (d & 0xff) << 16 | d & 0xff00 | (d & 0xff0000) >>> 16
                | (c & 0xf0000000) >>> 4;
        c &= 0xfffffff;
        int j = 0;
        for (int i = 0; i < 16; i++) {
            if (shifts2[i]) {
                c = c >>> 2 | c << 26;
                d = d >>> 2 | d << 26;
            } else {
                c = c >>> 1 | c << 27;
                d = d >>> 1 | d << 27;
            }
            c &= 0xfffffff;
            d &= 0xfffffff;
            int s = skb[0][c & 0x3f] | skb[1][c >>> 6 & 3 | c >>> 7 & 0x3c]
                    | skb[2][c >>> 13 & 0xf | c >>> 14 & 0x30]
                    | skb[3][c >>> 20 & 1 | c >>> 21 & 6 | c >>> 22 & 0x38];
            int t = skb[4][d & 0x3f] | skb[5][d >>> 7 & 3 | d >>> 8 & 0x3c]
                    | skb[6][d >>> 15 & 0x3f]
                    | skb[7][d >>> 21 & 0xf | d >>> 22 & 0x30];
            schedule[j++] = (t << 16 | s & 0xffff) & -1;
            s = s >>> 16 | t & 0xffff0000;
            s = s << 4 | s >>> 28;
            schedule[j++] = s & -1;
        }

        return schedule;
    }

    private static int D_ENCRYPT(int L, int R, int S, int E0, int E1,
            int s[]) {
        int v = R ^ R >>> 16;
        int u = v & E0;
        v &= E1;
        u = u ^ u << 16 ^ R ^ s[S];
        int t = v ^ v << 16 ^ R ^ s[S + 1];
        t = t >>> 4 | t << 28;
        L ^= SPtrans[1][t & 0x3f] | SPtrans[3][t >>> 8 & 0x3f]
                | SPtrans[5][t >>> 16 & 0x3f] | SPtrans[7][t >>> 24 & 0x3f]
                | SPtrans[0][u & 0x3f] | SPtrans[2][u >>> 8 & 0x3f]
                | SPtrans[4][u >>> 16 & 0x3f] | SPtrans[6][u >>> 24 & 0x3f];
        return L;
    }

    private static int[] body(int schedule[], int Eswap0, int Eswap1) {
        int left = 0;
        int right = 0;
        int t;
        for (int j = 0; j < 25; j++) {
            for (int i = 0; i < 32; i += 4) {
                left = D_ENCRYPT(left, right, i, Eswap0, Eswap1, schedule);
                right = D_ENCRYPT(right, left, i + 2, Eswap0, Eswap1, schedule);
            }

            t = left;
            left = right;
            right = t;
        }

        t = right;
        right = left >>> 1 | left << 31;
        left = t >>> 1 | t << 31;
        left &= -1;
        right &= -1;
        int results[] = new int[2];
        PERM_OP(right, left, 1, 0x55555555, results);
        right = results[0];
        left = results[1];
        PERM_OP(left, right, 8, 0xff00ff, results);
        left = results[0];
        right = results[1];
        PERM_OP(right, left, 2, 0x33333333, results);
        right = results[0];
        left = results[1];
        PERM_OP(left, right, 16, 65535, results);
        left = results[0];
        right = results[1];
        PERM_OP(right, left, 4, 0xf0f0f0f, results);
        right = results[0];
        left = results[1];
        int out[] = new int[2];
        out[0] = left;
        out[1] = right;
        return out;
    }

    public static final String crypt(String salt, String original) {
        for (; salt.length() < 2; salt = salt + "A");
        StringBuilder buffer = new StringBuilder("             ");
        char charZero = salt.charAt(0);
        char charOne = salt.charAt(1);
        buffer.setCharAt(0, charZero);
        buffer.setCharAt(1, charOne);
        int Eswap0 = con_salt[charZero];
        int Eswap1 = con_salt[charOne] << 4;
        byte key[] = new byte[8];
        for (int i = 0; i < key.length; i++) {
            key[i] = 0;
        }

        for (int i = 0; i < key.length && i < original.length(); i++) {
            int iChar = original.charAt(i);
            key[i] = (byte) (iChar << 1);
        }

        int schedule[] = des_set_key(key);
        int out[] = body(schedule, Eswap0, Eswap1);
        byte b[] = new byte[9];
        intToFourBytes(out[0], b, 0);
        intToFourBytes(out[1], b, 4);
        b[8] = 0;
        int i = 2;
        int y = 0;
        int u = 128;
        for (; i < 13; i++) {
            int j = 0;
            int c = 0;
            for (; j < 6; j++) {
                c <<= 1;
                if ((b[y] & u) != 0) {
                    c |= 1;
                }
                u >>>= 1;
                if (u == 0) {
                    y++;
                    u = 128;
                }
                buffer.setCharAt(i, (char) cov_2char[c]);
            }

        }

        return buffer.toString();
    }

    public static final String crypt(String original) {
        Random randomGenerator = new Random();
        int numSaltChars = saltChars.length;
        String salt = ""
                + saltChars[Math.abs(randomGenerator.nextInt()) % numSaltChars]
                + saltChars[Math.abs(randomGenerator.nextInt()) % numSaltChars];
        return crypt(salt, original);
    }

    public static final boolean matches(String encryptedPassword,
            String enteredPassword) {
        String salt = encryptedPassword.substring(0, 3);
        String newCrypt = crypt(salt, enteredPassword);
        return newCrypt.equals(encryptedPassword);
    }

    private static final char saltChars[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789./"
            .toCharArray();
    // private static final int ITERATIONS = 16;
    private static final int con_salt[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
        0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
        10, 11, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
        21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
        32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
        49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 0, 0,
        0, 0, 0};
    private static final boolean shifts2[] = {false, false, true, true, true,
        true, true, true, false, true, true, true, true, true, true, false};
    private static final int skb[][] = {
        {0, 16, 0x20000000, 0x20000010, 0x10000, 0x10010, 0x20010000,
            0x20010010, 2048, 2064, 0x20000800, 0x20000810, 0x10800,
            0x10810, 0x20010800, 0x20010810, 32, 48, 0x20000020,
            0x20000030, 0x10020, 0x10030, 0x20010020, 0x20010030, 2080,
            2096, 0x20000820, 0x20000830, 0x10820, 0x10830, 0x20010820,
            0x20010830, 0x80000, 0x80010, 0x20080000, 0x20080010,
            0x90000, 0x90010, 0x20090000, 0x20090010, 0x80800, 0x80810,
            0x20080800, 0x20080810, 0x90800, 0x90810, 0x20090800,
            0x20090810, 0x80020, 0x80030, 0x20080020, 0x20080030,
            0x90020, 0x90030, 0x20090020, 0x20090030, 0x80820, 0x80830,
            0x20080820, 0x20080830, 0x90820, 0x90830, 0x20090820,
            0x20090830},
        {0, 0x2000000, 8192, 0x2002000, 0x200000, 0x2200000, 0x202000,
            0x2202000, 4, 0x2000004, 8196, 0x2002004, 0x200004,
            0x2200004, 0x202004, 0x2202004, 1024, 0x2000400, 9216,
            0x2002400, 0x200400, 0x2200400, 0x202400, 0x2202400, 1028,
            0x2000404, 9220, 0x2002404, 0x200404, 0x2200404, 0x202404,
            0x2202404, 0x10000000, 0x12000000, 0x10002000, 0x12002000,
            0x10200000, 0x12200000, 0x10202000, 0x12202000, 0x10000004,
            0x12000004, 0x10002004, 0x12002004, 0x10200004, 0x12200004,
            0x10202004, 0x12202004, 0x10000400, 0x12000400, 0x10002400,
            0x12002400, 0x10200400, 0x12200400, 0x10202400, 0x12202400,
            0x10000404, 0x12000404, 0x10002404, 0x12002404, 0x10200404,
            0x12200404, 0x10202404, 0x12202404},
        {0, 1, 0x40000, 0x40001, 0x1000000, 0x1000001, 0x1040000,
            0x1040001, 2, 3, 0x40002, 0x40003, 0x1000002, 0x1000003,
            0x1040002, 0x1040003, 512, 513, 0x40200, 0x40201,
            0x1000200, 0x1000201, 0x1040200, 0x1040201, 514, 515,
            0x40202, 0x40203, 0x1000202, 0x1000203, 0x1040202,
            0x1040203, 0x8000000, 0x8000001, 0x8040000, 0x8040001,
            0x9000000, 0x9000001, 0x9040000, 0x9040001, 0x8000002,
            0x8000003, 0x8040002, 0x8040003, 0x9000002, 0x9000003,
            0x9040002, 0x9040003, 0x8000200, 0x8000201, 0x8040200,
            0x8040201, 0x9000200, 0x9000201, 0x9040200, 0x9040201,
            0x8000202, 0x8000203, 0x8040202, 0x8040203, 0x9000202,
            0x9000203, 0x9040202, 0x9040203},
        {0, 0x100000, 256, 0x100100, 8, 0x100008, 264, 0x100108, 4096,
            0x101000, 4352, 0x101100, 4104, 0x101008, 4360, 0x101108,
            0x4000000, 0x4100000, 0x4000100, 0x4100100, 0x4000008,
            0x4100008, 0x4000108, 0x4100108, 0x4001000, 0x4101000,
            0x4001100, 0x4101100, 0x4001008, 0x4101008, 0x4001108,
            0x4101108, 0x20000, 0x120000, 0x20100, 0x120100, 0x20008,
            0x120008, 0x20108, 0x120108, 0x21000, 0x121000, 0x21100,
            0x121100, 0x21008, 0x121008, 0x21108, 0x121108, 0x4020000,
            0x4120000, 0x4020100, 0x4120100, 0x4020008, 0x4120008,
            0x4020108, 0x4120108, 0x4021000, 0x4121000, 0x4021100,
            0x4121100, 0x4021008, 0x4121008, 0x4021108, 0x4121108},
        {0, 0x10000000, 0x10000, 0x10010000, 4, 0x10000004, 0x10004,
            0x10010004, 0x20000000, 0x30000000, 0x20010000, 0x30010000,
            0x20000004, 0x30000004, 0x20010004, 0x30010004, 0x100000,
            0x10100000, 0x110000, 0x10110000, 0x100004, 0x10100004,
            0x110004, 0x10110004, 0x20100000, 0x30100000, 0x20110000,
            0x30110000, 0x20100004, 0x30100004, 0x20110004, 0x30110004,
            4096, 0x10001000, 0x11000, 0x10011000, 4100, 0x10001004,
            0x11004, 0x10011004, 0x20001000, 0x30001000, 0x20011000,
            0x30011000, 0x20001004, 0x30001004, 0x20011004, 0x30011004,
            0x101000, 0x10101000, 0x111000, 0x10111000, 0x101004,
            0x10101004, 0x111004, 0x10111004, 0x20101000, 0x30101000,
            0x20111000, 0x30111000, 0x20101004, 0x30101004, 0x20111004,
            0x30111004},
        {0, 0x8000000, 8, 0x8000008, 1024, 0x8000400, 1032, 0x8000408,
            0x20000, 0x8020000, 0x20008, 0x8020008, 0x20400, 0x8020400,
            0x20408, 0x8020408, 1, 0x8000001, 9, 0x8000009, 1025,
            0x8000401, 1033, 0x8000409, 0x20001, 0x8020001, 0x20009,
            0x8020009, 0x20401, 0x8020401, 0x20409, 0x8020409,
            0x2000000, 0xa000000, 0x2000008, 0xa000008, 0x2000400,
            0xa000400, 0x2000408, 0xa000408, 0x2020000, 0xa020000,
            0x2020008, 0xa020008, 0x2020400, 0xa020400, 0x2020408,
            0xa020408, 0x2000001, 0xa000001, 0x2000009, 0xa000009,
            0x2000401, 0xa000401, 0x2000409, 0xa000409, 0x2020001,
            0xa020001, 0x2020009, 0xa020009, 0x2020401, 0xa020401,
            0x2020409, 0xa020409},
        {0, 256, 0x80000, 0x80100, 0x1000000, 0x1000100, 0x1080000,
            0x1080100, 16, 272, 0x80010, 0x80110, 0x1000010, 0x1000110,
            0x1080010, 0x1080110, 0x200000, 0x200100, 0x280000,
            0x280100, 0x1200000, 0x1200100, 0x1280000, 0x1280100,
            0x200010, 0x200110, 0x280010, 0x280110, 0x1200010,
            0x1200110, 0x1280010, 0x1280110, 512, 768, 0x80200,
            0x80300, 0x1000200, 0x1000300, 0x1080200, 0x1080300, 528,
            784, 0x80210, 0x80310, 0x1000210, 0x1000310, 0x1080210,
            0x1080310, 0x200200, 0x200300, 0x280200, 0x280300,
            0x1200200, 0x1200300, 0x1280200, 0x1280300, 0x200210,
            0x200310, 0x280210, 0x280310, 0x1200210, 0x1200310,
            0x1280210, 0x1280310},
        {0, 0x4000000, 0x40000, 0x4040000, 2, 0x4000002, 0x40002,
            0x4040002, 8192, 0x4002000, 0x42000, 0x4042000, 8194,
            0x4002002, 0x42002, 0x4042002, 32, 0x4000020, 0x40020,
            0x4040020, 34, 0x4000022, 0x40022, 0x4040022, 8224,
            0x4002020, 0x42020, 0x4042020, 8226, 0x4002022, 0x42022,
            0x4042022, 2048, 0x4000800, 0x40800, 0x4040800, 2050,
            0x4000802, 0x40802, 0x4040802, 10240, 0x4002800, 0x42800,
            0x4042800, 10242, 0x4002802, 0x42802, 0x4042802, 2080,
            0x4000820, 0x40820, 0x4040820, 2082, 0x4000822, 0x40822,
            0x4040822, 10272, 0x4002820, 0x42820, 0x4042820, 10274,
            0x4002822, 0x42822, 0x4042822}};
    private static final int SPtrans[][] = {
        {0x820200, 0x20000, 0x80800000, 0x80820200, 0x800000, 0x80020200,
            0x80020000, 0x80800000, 0x80020200, 0x820200, 0x820000,
            0x80000200, 0x80800200, 0x800000, 0, 0x80020000, 0x20000,
            0x80000000, 0x800200, 0x20200, 0x80820200, 0x820000,
            0x80000200, 0x800200, 0x80000000, 512, 0x20200, 0x80820000,
            512, 0x80800200, 0x80820000, 0, 0, 0x80820200, 0x800200,
            0x80020000, 0x820200, 0x20000, 0x80000200, 0x800200,
            0x80820000, 512, 0x20200, 0x80800000, 0x80020200,
            0x80000000, 0x80800000, 0x820000, 0x80820200, 0x20200,
            0x820000, 0x80800200, 0x800000, 0x80000200, 0x80020000, 0,
            0x20000, 0x800000, 0x80800200, 0x820200, 0x80000000,
            0x80820000, 512, 0x80020200},
        {0x10042004, 0, 0x42000, 0x10040000, 0x10000004, 8196, 0x10002000,
            0x42000, 8192, 0x10040004, 4, 0x10002000, 0x40004,
            0x10042000, 0x10040000, 4, 0x40000, 0x10002004, 0x10040004,
            8192, 0x42004, 0x10000000, 0, 0x40004, 0x10002004, 0x42004,
            0x10042000, 0x10000004, 0x10000000, 0x40000, 8196,
            0x10042004, 0x40004, 0x10042000, 0x10002000, 0x42004,
            0x10042004, 0x40004, 0x10000004, 0, 0x10000000, 8196,
            0x40000, 0x10040004, 8192, 0x10000000, 0x42004, 0x10002004,
            0x10042000, 8192, 0, 0x10000004, 4, 0x10042004, 0x42000,
            0x10040000, 0x10040004, 0x40000, 8196, 0x10002000,
            0x10002004, 4, 0x10040000, 0x42000},
        {0x41000000, 0x1010040, 64, 0x41000040, 0x40010000, 0x1000000,
            0x41000040, 0x10040, 0x1000040, 0x10000, 0x1010000,
            0x40000000, 0x41010040, 0x40000040, 0x40000000, 0x41010000,
            0, 0x40010000, 0x1010040, 64, 0x40000040, 0x41010040,
            0x10000, 0x41000000, 0x41010000, 0x1000040, 0x40010040,
            0x1010000, 0x10040, 0, 0x1000000, 0x40010040, 0x1010040,
            64, 0x40000000, 0x10000, 0x40000040, 0x40010000, 0x1010000,
            0x41000040, 0, 0x1010040, 0x10040, 0x41010000, 0x40010000,
            0x1000000, 0x41010040, 0x40000000, 0x40010040, 0x41000000,
            0x1000000, 0x41010040, 0x10000, 0x1000040, 0x41000040,
            0x10040, 0x1000040, 0, 0x41010000, 0x40000040, 0x41000000,
            0x40010040, 64, 0x1010000},
        {0x100402, 0x4000400, 2, 0x4100402, 0, 0x4100000, 0x4000402,
            0x100002, 0x4100400, 0x4000002, 0x4000000, 1026, 0x4000002,
            0x100402, 0x100000, 0x4000000, 0x4100002, 0x100400, 1024,
            2, 0x100400, 0x4000402, 0x4100000, 1024, 1026, 0, 0x100002,
            0x4100400, 0x4000400, 0x4100002, 0x4100402, 0x100000,
            0x4100002, 1026, 0x100000, 0x4000002, 0x100400, 0x4000400,
            2, 0x4100000, 0x4000402, 0, 1024, 0x100002, 0, 0x4100002,
            0x4100400, 1024, 0x4000000, 0x4100402, 0x100402, 0x100000,
            0x4100402, 2, 0x4000400, 0x100402, 0x100002, 0x100400,
            0x4100000, 0x4000402, 1026, 0x4000000, 0x4000002, 0x4100400},
        {0x2000000, 16384, 256, 0x2004108, 0x2004008, 0x2000100, 16648,
            0x2004000, 16384, 8, 0x2000008, 16640, 0x2000108,
            0x2004008, 0x2004100, 0, 16640, 0x2000000, 16392, 264,
            0x2000100, 16648, 0, 0x2000008, 8, 0x2000108, 0x2004108,
            16392, 0x2004000, 256, 264, 0x2004100, 0x2004100,
            0x2000108, 16392, 0x2004000, 16384, 8, 0x2000008,
            0x2000100, 0x2000000, 16640, 0x2004108, 0, 16648,
            0x2000000, 256, 16392, 0x2000108, 256, 0, 0x2004108,
            0x2004008, 0x2004100, 264, 16384, 16640, 0x2004008,
            0x2000100, 264, 8, 16648, 0x2004000, 0x2000008},
        {0x20000010, 0x80010, 0, 0x20080800, 0x80010, 2048, 0x20000810,
            0x80000, 2064, 0x20080810, 0x80800, 0x20000000, 0x20000800,
            0x20000010, 0x20080000, 0x80810, 0x80000, 0x20000810,
            0x20080010, 0, 2048, 16, 0x20080800, 0x20080010,
            0x20080810, 0x20080000, 0x20000000, 2064, 16, 0x80800,
            0x80810, 0x20000800, 2064, 0x20000000, 0x20000800, 0x80810,
            0x20080800, 0x80010, 0, 0x20000800, 0x20000000, 2048,
            0x20080010, 0x80000, 0x80010, 0x20080810, 0x80800, 16,
            0x20080810, 0x80800, 0x80000, 0x20000810, 0x20000010,
            0x20080000, 0x80810, 0, 2048, 0x20000010, 0x20000810,
            0x20080800, 0x20080000, 2064, 16, 0x20080010},
        {4096, 128, 0x400080, 0x400001, 0x401081, 4097, 4224, 0, 0x400000,
            0x400081, 129, 0x401000, 1, 0x401080, 0x401000, 129,
            0x400081, 4096, 4097, 0x401081, 0, 0x400080, 0x400001,
            4224, 0x401001, 4225, 0x401080, 1, 4225, 0x401001, 128,
            0x400000, 4225, 0x401000, 0x401001, 129, 4096, 128,
            0x400000, 0x401001, 0x400081, 4225, 4224, 0, 128, 0x400001,
            1, 0x400080, 0, 0x400081, 0x400080, 4224, 129, 4096,
            0x401081, 0x400000, 0x401080, 1, 4097, 0x401081, 0x400001,
            0x401080, 0x401000, 4097},
        {0x8200020, 0x8208000, 32800, 0, 0x8008000, 0x200020, 0x8200000,
            0x8208020, 32, 0x8000000, 0x208000, 32800, 0x208020,
            0x8008020, 0x8000020, 0x8200000, 32768, 0x208020, 0x200020,
            0x8008000, 0x8208020, 0x8000020, 0, 0x208000, 0x8000000,
            0x200000, 0x8008020, 0x8200020, 0x200000, 32768, 0x8208000,
            32, 0x200000, 32768, 0x8000020, 0x8208020, 32800,
            0x8000000, 0, 0x208000, 0x8200020, 0x8008020, 0x8008000,
            0x200020, 0x8208000, 32, 0x200020, 0x8008000, 0x8208020,
            0x200000, 0x8200000, 0x8000020, 0x208000, 32800, 0x8008020,
            0x8200000, 32, 0x8208000, 0x208020, 0, 0x8000000,
            0x8200020, 32768, 0x208020}};
    private static final int cov_2char[] = {46, 47, 48, 49, 50, 51, 52, 53,
        54, 55, 56, 57, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
        78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 97, 98, 99,
        100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
        113, 114, 115, 116, 117, 118, 119, 120, 121, 122};

}
PK�����Ä…9D* Fô>���>������javadoc/package-listcontrollers
play.modules.fileauth
play.modules.fileauth.utils
PK�����Ä…9D*”ïxÏ��Ï�����javadoc/overview-tree.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_26) on Sat Jan 25 16:46:08 CET 2014 -->
<TITLE>
Class Hierarchy
</TITLE>

<META NAME="date" CONTENT="2014-01-25">

<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">

<SCRIPT type="text/javascript">
function windowTitle()
{
    if (location.href.indexOf('is-external=true') == -1) {
        parent.document.title="Class Hierarchy";
    }
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>

</HEAD>

<BODY BGCOLOR="white" onload="windowTitle();">
<HR>


<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html?overview-tree.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="overview-tree.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->

<HR>
<CENTER>
<H2>
Hierarchy For All Packages</H2>
</CENTER>
<DL>
<DT><B>Package Hierarchies:</B><DD><A HREF="controllers/package-tree.html">controllers</A>, <A HREF="play/modules/fileauth/package-tree.html">play.modules.fileauth</A>, <A HREF="play/modules/fileauth/utils/package-tree.html">play.modules.fileauth.utils</A></DL>
<HR>
<H2>
Class Hierarchy
</H2>
<UL>
<LI TYPE="circle">java.lang.Object<UL>
<LI TYPE="circle">play.mvc.Controller (implements play.classloading.enhancers.ControllersEnhancer.ControllerSupport, play.classloading.enhancers.LocalvariablesNamesEnhancer.LocalVariablesSupport)
<UL>
<LI TYPE="circle">controllers.<A HREF="controllers/Secure.html" title="class in controllers"><B>Secure</B></A><LI TYPE="circle">controllers.<A HREF="controllers/Secure.Security.html" title="class in controllers"><B>Secure.Security</B></A><UL>
<LI TYPE="circle">controllers.<A HREF="controllers/AuthFileSecurity.html" title="class in controllers"><B>AuthFileSecurity</B></A></UL>
</UL>
<LI TYPE="circle">play.modules.fileauth.<A HREF="play/modules/fileauth/FileAuth.html" title="class in play.modules.fileauth"><B>FileAuth</B></A><LI TYPE="circle">play.Invoker.Invocation (implements java.lang.Runnable)
<UL>
<LI TYPE="circle">play.jobs.Job&lt;V&gt; (implements java.util.concurrent.Callable&lt;V&gt;)
<UL>
<LI TYPE="circle">play.modules.fileauth.<A HREF="play/modules/fileauth/ScanJob.html" title="class in play.modules.fileauth"><B>ScanJob</B></A></UL>
</UL>
<LI TYPE="circle">play.modules.fileauth.utils.<A HREF="play/modules/fileauth/utils/MD5Crypt.html" title="class in play.modules.fileauth.utils"><B>MD5Crypt</B></A><LI TYPE="circle">play.PlayPlugin (implements java.lang.Comparable&lt;T&gt;)
<UL>
<LI TYPE="circle">play.modules.fileauth.<A HREF="play/modules/fileauth/FileAuthPlugin.html" title="class in play.modules.fileauth"><B>FileAuthPlugin</B></A></UL>
</UL>
</UL>
<H2>
Annotation Type Hierarchy
</H2>
<UL>
<LI TYPE="circle">controllers.<A HREF="controllers/Check.html" title="annotation in controllers"><B>Check</B></A> (implements java.lang.annotation.Annotation)
</UL>
<HR>


<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html?overview-tree.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="overview-tree.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->

<HR>

</BODY>
</HTML>
PK�����Ä…9DýÔÏln��n�����javadoc/allclasses-noframe.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_26) on Sat Jan 25 16:46:08 CET 2014 -->
<TITLE>
All Classes
</TITLE>

<META NAME="date" CONTENT="2014-01-25">

<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">


</HEAD>

<BODY BGCOLOR="white">
<FONT size="+1" CLASS="FrameHeadingFont">
<B>All Classes</B></FONT>
<BR>

<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="controllers/AuthFileSecurity.html" title="class in controllers">AuthFileSecurity</A>
<BR>
<A HREF="controllers/Check.html" title="annotation in controllers">Check</A>
<BR>
<A HREF="play/modules/fileauth/FileAuth.html" title="class in play.modules.fileauth">FileAuth</A>
<BR>
<A HREF="play/modules/fileauth/FileAuthPlugin.html" title="class in play.modules.fileauth">FileAuthPlugin</A>
<BR>
<A HREF="play/modules/fileauth/utils/MD5Crypt.html" title="class in play.modules.fileauth.utils">MD5Crypt</A>
<BR>
<A HREF="play/modules/fileauth/ScanJob.html" title="class in play.modules.fileauth">ScanJob</A>
<BR>
<A HREF="controllers/Secure.html" title="class in controllers">Secure</A>
<BR>
<A HREF="controllers/Secure.Security.html" title="class in controllers">Secure.Security</A>
<BR>
</FONT></TD>
</TR>
</TABLE>

</BODY>
</HTML>
PK�����Ä…9D?ò÷Mo��o�����javadoc/stylesheet.css/* Javadoc style sheet */

/* Define colors, fonts and other style attributes here to override the defaults */

/* Page background color */
body { background-color: #FFFFFF; color:#000000 }

/* Headings */
h1 { font-size: 145% }

/* Table colors */
.TableHeadingColor     { background: #CCCCFF; color:#000000 } /* Dark mauve */
.TableSubHeadingColor  { background: #EEEEFF; color:#000000 } /* Light mauve */
.TableRowColor         { background: #FFFFFF; color:#000000 } /* White */

/* Font used in left-hand frame lists */
.FrameTitleFont   { font-size: 100%; font-family: Helvetica, Arial, sans-serif; color:#000000 }
.FrameHeadingFont { font-size:  90%; font-family: Helvetica, Arial, sans-serif; color:#000000 }
.FrameItemFont    { font-size:  90%; font-family: Helvetica, Arial, sans-serif; color:#000000 }

/* Navigation bar fonts and colors */
.NavBarCell1    { background-color:#EEEEFF; color:#000000} /* Light mauve */
.NavBarCell1Rev { background-color:#00008B; color:#FFFFFF} /* Dark Blue */
.NavBarFont1    { font-family: Arial, Helvetica, sans-serif; color:#000000;color:#000000;}
.NavBarFont1Rev { font-family: Arial, Helvetica, sans-serif; color:#FFFFFF;color:#FFFFFF;}

.NavBarCell2    { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF; color:#000000}
.NavBarCell3    { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF; color:#000000}

PK�����Ä…9D‹Yú‡#��#�����javadoc/help-doc.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_26) on Sat Jan 25 16:46:08 CET 2014 -->
<TITLE>
API Help
</TITLE>

<META NAME="date" CONTENT="2014-01-25">

<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">

<SCRIPT type="text/javascript">
function windowTitle()
{
    if (location.href.indexOf('is-external=true') == -1) {
        parent.document.title="API Help";
    }
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>

</HEAD>

<BODY BGCOLOR="white" onload="windowTitle();">
<HR>


<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Help</B></FONT>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html?help-doc.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="help-doc.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->

<HR>
<CENTER>
<H1>
How This API Document Is Organized</H1>
</CENTER>
This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.<H3>
Overview</H3>
<BLOCKQUOTE>

<P>
The <A HREF="overview-summary.html">Overview</A> page is the front page of this API document and provides a list of all packages with a summary for each.  This page can also contain an overall description of the set of packages.</BLOCKQUOTE>
<H3>
Package</H3>
<BLOCKQUOTE>

<P>
Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain four categories:<UL>
<LI>Interfaces (italic)<LI>Classes<LI>Enums<LI>Exceptions<LI>Errors<LI>Annotation Types</UL>
</BLOCKQUOTE>
<H3>
Class/Interface</H3>
<BLOCKQUOTE>

<P>
Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:<UL>
<LI>Class inheritance diagram<LI>Direct Subclasses<LI>All Known Subinterfaces<LI>All Known Implementing Classes<LI>Class/interface declaration<LI>Class/interface description
<P>
<LI>Nested Class Summary<LI>Field Summary<LI>Constructor Summary<LI>Method Summary
<P>
<LI>Field Detail<LI>Constructor Detail<LI>Method Detail</UL>
Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.</BLOCKQUOTE>
</BLOCKQUOTE>
<H3>
Annotation Type</H3>
<BLOCKQUOTE>

<P>
Each annotation type has its own separate page with the following sections:<UL>
<LI>Annotation Type declaration<LI>Annotation Type description<LI>Required Element Summary<LI>Optional Element Summary<LI>Element Detail</UL>
</BLOCKQUOTE>
</BLOCKQUOTE>
<H3>
Enum</H3>
<BLOCKQUOTE>

<P>
Each enum has its own separate page with the following sections:<UL>
<LI>Enum declaration<LI>Enum description<LI>Enum Constant Summary<LI>Enum Constant Detail</UL>
</BLOCKQUOTE>
<H3>
Tree (Class Hierarchy)</H3>
<BLOCKQUOTE>
There is a <A HREF="overview-tree.html">Class Hierarchy</A> page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with <code>java.lang.Object</code>. The interfaces do not inherit from <code>java.lang.Object</code>.<UL>
<LI>When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.<LI>When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.</UL>
</BLOCKQUOTE>
<H3>
Deprecated API</H3>
<BLOCKQUOTE>
The <A HREF="deprecated-list.html">Deprecated API</A> page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.</BLOCKQUOTE>
<H3>
Index</H3>
<BLOCKQUOTE>
The <A HREF="index-all.html">Index</A> contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.</BLOCKQUOTE>
<H3>
Prev/Next</H3>
These links take you to the next or previous class, interface, package, or related page.<H3>
Frames/No Frames</H3>
These links show and hide the HTML frames.  All pages are available with or without frames.
<P>
<H3>
Serialized Form</H3>
Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description.
<P>
<H3>
Constant Field Values</H3>
The <a href="constant-values.html">Constant Field Values</a> page lists the static final fields and their values.
<P>
<FONT SIZE="-1">
<EM>
This help file applies to API documentation generated using the standard doclet.</EM>
</FONT>
<BR>
<HR>


<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Help</B></FONT>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html?help-doc.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="help-doc.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->

<HR>

</BODY>
</HTML>
PK�����ą9D-vD�������javadoc/allclasses-frame.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_26) on Sat Jan 25 16:46:08 CET 2014 -->
<TITLE>
All Classes
</TITLE>

<META NAME="date" CONTENT="2014-01-25">

<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">


</HEAD>

<BODY BGCOLOR="white">
<FONT size="+1" CLASS="FrameHeadingFont">
<B>All Classes</B></FONT>
<BR>

<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="controllers/AuthFileSecurity.html" title="class in controllers" target="classFrame">AuthFileSecurity</A>
<BR>
<A HREF="controllers/Check.html" title="annotation in controllers" target="classFrame">Check</A>
<BR>
<A HREF="play/modules/fileauth/FileAuth.html" title="class in play.modules.fileauth" target="classFrame">FileAuth</A>
<BR>
<A HREF="play/modules/fileauth/FileAuthPlugin.html" title="class in play.modules.fileauth" target="classFrame">FileAuthPlugin</A>
<BR>
<A HREF="play/modules/fileauth/utils/MD5Crypt.html" title="class in play.modules.fileauth.utils" target="classFrame">MD5Crypt</A>
<BR>
<A HREF="play/modules/fileauth/ScanJob.html" title="class in play.modules.fileauth" target="classFrame">ScanJob</A>
<BR>
<A HREF="controllers/Secure.html" title="class in controllers" target="classFrame">Secure</A>
<BR>
<A HREF="controllers/Secure.Security.html" title="class in controllers" target="classFrame">Secure.Security</A>
<BR>
</FONT></TD>
</TR>
</TABLE>

</BODY>
</HTML>
PK�����Ä…9DUÉ>Å��Å�����javadoc/constant-values.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_26) on Sat Jan 25 16:46:08 CET 2014 -->
<TITLE>
Constant Field Values
</TITLE>

<META NAME="date" CONTENT="2014-01-25">

<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">

<SCRIPT type="text/javascript">
function windowTitle()
{
    if (location.href.indexOf('is-external=true') == -1) {
        parent.document.title="Constant Field Values";
    }
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>

</HEAD>

<BODY BGCOLOR="white" onload="windowTitle();">
<HR>


<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html?constant-values.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="constant-values.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->

<HR>
<CENTER>
<H1>
Constant Field Values</H1>
</CENTER>
<HR SIZE="4" NOSHADE>
<B>Contents</B><UL>
<LI><A HREF="#play.modules">play.modules.*</A>
</UL>

<A NAME="play.modules"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left"><FONT SIZE="+2">
play.modules.*</FONT></TH>
</TR>
</TABLE>

<P>

<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left" COLSPAN="3">play.modules.fileauth.<A HREF="play/modules/fileauth/FileAuth.html" title="class in play.modules.fileauth">FileAuth</A></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<A NAME="play.modules.fileauth.FileAuth.AUTH_FILE_GROUPS_CACHE_KEY"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
<TD ALIGN="left"><CODE><A HREF="play/modules/fileauth/FileAuth.html#AUTH_FILE_GROUPS_CACHE_KEY">AUTH_FILE_GROUPS_CACHE_KEY</A></CODE></TD>
<TD ALIGN="right"><CODE>"AUTH_FILE_GROUPS"</CODE></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<A NAME="play.modules.fileauth.FileAuth.AUTH_FILE_USERS_CACHE_KEY"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
<TD ALIGN="left"><CODE><A HREF="play/modules/fileauth/FileAuth.html#AUTH_FILE_USERS_CACHE_KEY">AUTH_FILE_USERS_CACHE_KEY</A></CODE></TD>
<TD ALIGN="right"><CODE>"AUTH_FILE_USERS"</CODE></TD>
</TR>
</FONT></TD>
</TR>
</TABLE>

<P>

<P>

<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left" COLSPAN="3">play.modules.fileauth.utils.<A HREF="play/modules/fileauth/utils/MD5Crypt.html" title="class in play.modules.fileauth.utils">MD5Crypt</A></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<A NAME="play.modules.fileauth.utils.MD5Crypt.itoa64"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
<TD ALIGN="left"><CODE><A HREF="play/modules/fileauth/utils/MD5Crypt.html#itoa64">itoa64</A></CODE></TD>
<TD ALIGN="right"><CODE>"./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"</CODE></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<A NAME="play.modules.fileauth.utils.MD5Crypt.SALTCHARS"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
<TD ALIGN="left"><CODE><A HREF="play/modules/fileauth/utils/MD5Crypt.html#SALTCHARS">SALTCHARS</A></CODE></TD>
<TD ALIGN="right"><CODE>"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"</CODE></TD>
</TR>
</FONT></TD>
</TR>
</TABLE>

<P>

<P>
<HR>


<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html?constant-values.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="constant-values.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->

<HR>

</BODY>
</HTML>
PK�����Ä…9Dªð*TÑ��Ñ�����javadoc/overview-frame.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_26) on Sat Jan 25 16:46:08 CET 2014 -->
<TITLE>
Overview List
</TITLE>

<META NAME="date" CONTENT="2014-01-25">

<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">


</HEAD>

<BODY BGCOLOR="white">

<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
<TR>
<TH ALIGN="left" NOWRAP><FONT size="+1" CLASS="FrameTitleFont">
<B></B></FONT></TH>
</TR>
</TABLE>

<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="allclasses-frame.html" target="packageFrame">All Classes</A></FONT>
<P>
<FONT size="+1" CLASS="FrameHeadingFont">
Packages</FONT>
<BR>
<FONT CLASS="FrameItemFont"><A HREF="controllers/package-frame.html" target="packageFrame">controllers</A></FONT>
<BR>
<FONT CLASS="FrameItemFont"><A HREF="play/modules/fileauth/package-frame.html" target="packageFrame">play.modules.fileauth</A></FONT>
<BR>
<FONT CLASS="FrameItemFont"><A HREF="play/modules/fileauth/utils/package-frame.html" target="packageFrame">play.modules.fileauth.utils</A></FONT>
<BR>
</TD>
</TR>
</TABLE>

<P>
&nbsp;
</BODY>
</HTML>
PK�����Ä…9D“qXvJ��vJ�����javadoc/index-all.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_26) on Sat Jan 25 16:46:08 CET 2014 -->
<TITLE>
Index
</TITLE>

<META NAME="date" CONTENT="2014-01-25">

<LINK REL ="stylesheet" TYPE="text/css" HREF="./stylesheet.css" TITLE="Style">

<SCRIPT type="text/javascript">
function windowTitle()
{
    if (location.href.indexOf('is-external=true') == -1) {
        parent.document.title="Index";
    }
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>

</HEAD>

<BODY BGCOLOR="white" onload="windowTitle();">
<HR>


<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="./overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="./overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="./deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="./help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="./index.html?index-all.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="index-all.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="./allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="./allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->

<A HREF="#_A_">A</A> <A HREF="#_B_">B</A> <A HREF="#_C_">C</A> <A HREF="#_D_">D</A> <A HREF="#_F_">F</A> <A HREF="#_G_">G</A> <A HREF="#_I_">I</A> <A HREF="#_L_">L</A> <A HREF="#_M_">M</A> <A HREF="#_O_">O</A> <A HREF="#_P_">P</A> <A HREF="#_S_">S</A> <A HREF="#_T_">T</A> <A HREF="#_V_">V</A> <HR>
<A NAME="_A_"><!-- --></A><H2>
<B>A</B></H2>
<DL>
<DT><A HREF="./play/modules/fileauth/utils/MD5Crypt.html#apacheCrypt(java.lang.String)"><B>apacheCrypt(String)</B></A> - 
Static method in class play.modules.fileauth.utils.<A HREF="./play/modules/fileauth/utils/MD5Crypt.html" title="class in play.modules.fileauth.utils">MD5Crypt</A>
<DD>This method generates an Apache MD5 compatible
 md5-encoded password hash from a plaintext password and a
 salt.
<DT><A HREF="./play/modules/fileauth/utils/MD5Crypt.html#apacheCrypt(java.lang.String, java.lang.String)"><B>apacheCrypt(String, String)</B></A> - 
Static method in class play.modules.fileauth.utils.<A HREF="./play/modules/fileauth/utils/MD5Crypt.html" title="class in play.modules.fileauth.utils">MD5Crypt</A>
<DD>This method actually generates an Apache MD5 compatible
 md5-encoded password hash from a plaintext password and a
 salt.
<DT><A HREF="./play/modules/fileauth/FileAuth.html#AUTH_FILE_GROUPS_CACHE_KEY"><B>AUTH_FILE_GROUPS_CACHE_KEY</B></A> - 
Static variable in class play.modules.fileauth.<A HREF="./play/modules/fileauth/FileAuth.html" title="class in play.modules.fileauth">FileAuth</A>
<DD>&nbsp;
<DT><A HREF="./play/modules/fileauth/FileAuth.html#AUTH_FILE_USERS_CACHE_KEY"><B>AUTH_FILE_USERS_CACHE_KEY</B></A> - 
Static variable in class play.modules.fileauth.<A HREF="./play/modules/fileauth/FileAuth.html" title="class in play.modules.fileauth">FileAuth</A>
<DD>&nbsp;
<DT><A HREF="./controllers/Secure.html#authenticate(java.lang.String, java.lang.String, boolean)"><B>authenticate(String, String, boolean)</B></A> - 
Static method in class controllers.<A HREF="./controllers/Secure.html" title="class in controllers">Secure</A>
<DD>&nbsp;
<DT><A HREF="./controllers/AuthFileSecurity.html#authentify(java.lang.String, java.lang.String)"><B>authentify(String, String)</B></A> - 
Static method in class controllers.<A HREF="./controllers/AuthFileSecurity.html" title="class in controllers">AuthFileSecurity</A>
<DD>Authentify an user against the given AuthFile.
<DT><A HREF="./controllers/AuthFileSecurity.html" title="class in controllers"><B>AuthFileSecurity</B></A> - Class in <A HREF="./controllers/package-summary.html">controllers</A><DD>This Class provides basice Security Functions for the Play! Security Plugin.<DT><A HREF="./controllers/AuthFileSecurity.html#AuthFileSecurity()"><B>AuthFileSecurity()</B></A> - 
Constructor for class controllers.<A HREF="./controllers/AuthFileSecurity.html" title="class in controllers">AuthFileSecurity</A>
<DD>&nbsp;
</DL>
<HR>
<A NAME="_B_"><!-- --></A><H2>
<B>B</B></H2>
<DL>
<DT><A HREF="./play/modules/fileauth/utils/MD5Crypt.html#bytes2u(byte)"><B>bytes2u(byte)</B></A> - 
Static method in class play.modules.fileauth.utils.<A HREF="./play/modules/fileauth/utils/MD5Crypt.html" title="class in play.modules.fileauth.utils">MD5Crypt</A>
<DD>convert an encoded unsigned byte value into a int
 with the unsigned value.
</DL>
<HR>
<A NAME="_C_"><!-- --></A><H2>
<B>C</B></H2>
<DL>
<DT><A HREF="./controllers/AuthFileSecurity.html#check(java.lang.String)"><B>check(String)</B></A> - 
Static method in class controllers.<A HREF="./controllers/AuthFileSecurity.html" title="class in controllers">AuthFileSecurity</A>
<DD>Checks if the current user (that is loged in) has the profile (e.g.
<DT><A HREF="./controllers/Check.html" title="annotation in controllers"><B>Check</B></A> - Annotation Type in <A HREF="./controllers/package-summary.html">controllers</A><DD>&nbsp;<DT><A HREF="./play/modules/fileauth/utils/MD5Crypt.html#clearbits(byte[])"><B>clearbits(byte[])</B></A> - 
Static method in class play.modules.fileauth.utils.<A HREF="./play/modules/fileauth/utils/MD5Crypt.html" title="class in play.modules.fileauth.utils">MD5Crypt</A>
<DD>&nbsp;
<DT><A HREF="./play/modules/fileauth/FileAuth.html#contains(java.lang.String, java.lang.String)"><B>contains(String, String)</B></A> - 
Static method in class play.modules.fileauth.<A HREF="./play/modules/fileauth/FileAuth.html" title="class in play.modules.fileauth">FileAuth</A>
<DD>Checks if a group contains a given username.
<DT><A HREF="./controllers/package-summary.html"><B>controllers</B></A> - package controllers<DD>&nbsp;<DT><A HREF="./play/modules/fileauth/utils/MD5Crypt.html#crypt(java.lang.String)"><B>crypt(String)</B></A> - 
Static method in class play.modules.fileauth.utils.<A HREF="./play/modules/fileauth/utils/MD5Crypt.html" title="class in play.modules.fileauth.utils">MD5Crypt</A>
<DD>This method actually generates a OpenBSD/FreeBSD/Linux PAM compatible
 md5-encoded password hash from a plaintext password and a
 salt.
<DT><A HREF="./play/modules/fileauth/utils/MD5Crypt.html#crypt(java.lang.String, java.lang.String)"><B>crypt(String, String)</B></A> - 
Static method in class play.modules.fileauth.utils.<A HREF="./play/modules/fileauth/utils/MD5Crypt.html" title="class in play.modules.fileauth.utils">MD5Crypt</A>
<DD>This method actually generates a OpenBSD/FreeBSD/Linux PAM compatible
 md5-encoded password hash from a plaintext password and a
 salt.
<DT><A HREF="./play/modules/fileauth/utils/MD5Crypt.html#crypt(java.lang.String, java.lang.String, java.lang.String)"><B>crypt(String, String, String)</B></A> - 
Static method in class play.modules.fileauth.utils.<A HREF="./play/modules/fileauth/utils/MD5Crypt.html" title="class in play.modules.fileauth.utils">MD5Crypt</A>
<DD>This method actually generates md5-encoded password hash from
 a plaintext password, a salt, and a magic string.
</DL>
<HR>
<A NAME="_D_"><!-- --></A><H2>
<B>D</B></H2>
<DL>
<DT><A HREF="./play/modules/fileauth/ScanJob.html#doJob()"><B>doJob()</B></A> - 
Method in class play.modules.fileauth.<A HREF="./play/modules/fileauth/ScanJob.html" title="class in play.modules.fileauth">ScanJob</A>
<DD>&nbsp;
</DL>
<HR>
<A NAME="_F_"><!-- --></A><H2>
<B>F</B></H2>
<DL>
<DT><A HREF="./play/modules/fileauth/FileAuth.html" title="class in play.modules.fileauth"><B>FileAuth</B></A> - Class in <A HREF="./play/modules/fileauth/package-summary.html">play.modules.fileauth</A><DD>Basic Wrapper for all FileAuth Functions.<DT><A HREF="./play/modules/fileauth/FileAuth.html#FileAuth()"><B>FileAuth()</B></A> - 
Constructor for class play.modules.fileauth.<A HREF="./play/modules/fileauth/FileAuth.html" title="class in play.modules.fileauth">FileAuth</A>
<DD>&nbsp;
<DT><A HREF="./play/modules/fileauth/FileAuthPlugin.html" title="class in play.modules.fileauth"><B>FileAuthPlugin</B></A> - Class in <A HREF="./play/modules/fileauth/package-summary.html">play.modules.fileauth</A><DD>Entry Class for first file scan.<DT><A HREF="./play/modules/fileauth/FileAuthPlugin.html#FileAuthPlugin()"><B>FileAuthPlugin()</B></A> - 
Constructor for class play.modules.fileauth.<A HREF="./play/modules/fileauth/FileAuthPlugin.html" title="class in play.modules.fileauth">FileAuthPlugin</A>
<DD>&nbsp;
</DL>
<HR>
<A NAME="_G_"><!-- --></A><H2>
<B>G</B></H2>
<DL>
<DT><A HREF="./play/modules/fileauth/FileAuth.html#getGroups()"><B>getGroups()</B></A> - 
Static method in class play.modules.fileauth.<A HREF="./play/modules/fileauth/FileAuth.html" title="class in play.modules.fileauth">FileAuth</A>
<DD>Returns a Map of all Groups (groups/usernames).
<DT><A HREF="./play/modules/fileauth/FileAuth.html#getUsers()"><B>getUsers()</B></A> - 
Static method in class play.modules.fileauth.<A HREF="./play/modules/fileauth/FileAuth.html" title="class in play.modules.fileauth">FileAuth</A>
<DD>Returns a Map of all Users (user/password hash).
</DL>
<HR>
<A NAME="_I_"><!-- --></A><H2>
<B>I</B></H2>
<DL>
<DT><A HREF="./play/modules/fileauth/FileAuth.html#IS_ENABLED"><B>IS_ENABLED</B></A> - 
Static variable in class play.modules.fileauth.<A HREF="./play/modules/fileauth/FileAuth.html" title="class in play.modules.fileauth">FileAuth</A>
<DD>&nbsp;
<DT><A HREF="./play/modules/fileauth/utils/MD5Crypt.html#itoa64"><B>itoa64</B></A> - 
Static variable in class play.modules.fileauth.utils.<A HREF="./play/modules/fileauth/utils/MD5Crypt.html" title="class in play.modules.fileauth.utils">MD5Crypt</A>
<DD>&nbsp;
</DL>
<HR>
<A NAME="_L_"><!-- --></A><H2>
<B>L</B></H2>
<DL>
<DT><A HREF="./controllers/Secure.html#login()"><B>login()</B></A> - 
Static method in class controllers.<A HREF="./controllers/Secure.html" title="class in controllers">Secure</A>
<DD>&nbsp;
<DT><A HREF="./controllers/Secure.html#logout()"><B>logout()</B></A> - 
Static method in class controllers.<A HREF="./controllers/Secure.html" title="class in controllers">Secure</A>
<DD>&nbsp;
</DL>
<HR>
<A NAME="_M_"><!-- --></A><H2>
<B>M</B></H2>
<DL>
<DT><A HREF="./play/modules/fileauth/utils/MD5Crypt.html#main(java.lang.String[])"><B>main(String[])</B></A> - 
Static method in class play.modules.fileauth.utils.<A HREF="./play/modules/fileauth/utils/MD5Crypt.html" title="class in play.modules.fileauth.utils">MD5Crypt</A>
<DD>Command line test rig.
<DT><A HREF="./play/modules/fileauth/utils/MD5Crypt.html" title="class in play.modules.fileauth.utils"><B>MD5Crypt</B></A> - Class in <A HREF="./play/modules/fileauth/utils/package-summary.html">play.modules.fileauth.utils</A><DD>This class defines a method,
 <A HREF="./play/modules/fileauth/utils/MD5Crypt.html#crypt(java.lang.String, java.lang.String)"><CODE>crypt()</CODE></A>, which
 takes a password and a salt string and generates an OpenBSD/FreeBSD/Linux-compatible
 md5-encoded password entry.<DT><A HREF="./play/modules/fileauth/utils/MD5Crypt.html#MD5Crypt()"><B>MD5Crypt()</B></A> - 
Constructor for class play.modules.fileauth.utils.<A HREF="./play/modules/fileauth/utils/MD5Crypt.html" title="class in play.modules.fileauth.utils">MD5Crypt</A>
<DD>&nbsp;
</DL>
<HR>
<A NAME="_O_"><!-- --></A><H2>
<B>O</B></H2>
<DL>
<DT><A HREF="./play/modules/fileauth/FileAuthPlugin.html#onApplicationStart()"><B>onApplicationStart()</B></A> - 
Method in class play.modules.fileauth.<A HREF="./play/modules/fileauth/FileAuthPlugin.html" title="class in play.modules.fileauth">FileAuthPlugin</A>
<DD>Trigger to scan the files for the first Time.
</DL>
<HR>
<A NAME="_P_"><!-- --></A><H2>
<B>P</B></H2>
<DL>
<DT><A HREF="./play/modules/fileauth/package-summary.html"><B>play.modules.fileauth</B></A> - package play.modules.fileauth<DD>&nbsp;<DT><A HREF="./play/modules/fileauth/utils/package-summary.html"><B>play.modules.fileauth.utils</B></A> - package play.modules.fileauth.utils<DD>&nbsp;</DL>
<HR>
<A NAME="_S_"><!-- --></A><H2>
<B>S</B></H2>
<DL>
<DT><A HREF="./play/modules/fileauth/utils/MD5Crypt.html#SALTCHARS"><B>SALTCHARS</B></A> - 
Static variable in class play.modules.fileauth.utils.<A HREF="./play/modules/fileauth/utils/MD5Crypt.html" title="class in play.modules.fileauth.utils">MD5Crypt</A>
<DD>&nbsp;
<DT><A HREF="./play/modules/fileauth/FileAuth.html#scanGroups()"><B>scanGroups()</B></A> - 
Static method in class play.modules.fileauth.<A HREF="./play/modules/fileauth/FileAuth.html" title="class in play.modules.fileauth">FileAuth</A>
<DD>Rescans the groups file.
<DT><A HREF="./play/modules/fileauth/ScanJob.html" title="class in play.modules.fileauth"><B>ScanJob</B></A> - Class in <A HREF="./play/modules/fileauth/package-summary.html">play.modules.fileauth</A><DD>Periodically Scan of user/group files.<DT><A HREF="./play/modules/fileauth/ScanJob.html#ScanJob()"><B>ScanJob()</B></A> - 
Constructor for class play.modules.fileauth.<A HREF="./play/modules/fileauth/ScanJob.html" title="class in play.modules.fileauth">ScanJob</A>
<DD>&nbsp;
<DT><A HREF="./play/modules/fileauth/FileAuth.html#scanUsers()"><B>scanUsers()</B></A> - 
Static method in class play.modules.fileauth.<A HREF="./play/modules/fileauth/FileAuth.html" title="class in play.modules.fileauth">FileAuth</A>
<DD>Rescans the users file.
<DT><A HREF="./controllers/Secure.html" title="class in controllers"><B>Secure</B></A> - Class in <A HREF="./controllers/package-summary.html">controllers</A><DD>&nbsp;<DT><A HREF="./controllers/Secure.html#Secure()"><B>Secure()</B></A> - 
Constructor for class controllers.<A HREF="./controllers/Secure.html" title="class in controllers">Secure</A>
<DD>&nbsp;
<DT><A HREF="./controllers/Secure.Security.html" title="class in controllers"><B>Secure.Security</B></A> - Class in <A HREF="./controllers/package-summary.html">controllers</A><DD>&nbsp;<DT><A HREF="./controllers/Secure.Security.html#Secure.Security()"><B>Secure.Security()</B></A> - 
Constructor for class controllers.<A HREF="./controllers/Secure.Security.html" title="class in controllers">Secure.Security</A>
<DD>&nbsp;
</DL>
<HR>
<A NAME="_T_"><!-- --></A><H2>
<B>T</B></H2>
<DL>
<DT><A HREF="./play/modules/fileauth/utils/MD5Crypt.html#to64(long, int)"><B>to64(long, int)</B></A> - 
Static method in class play.modules.fileauth.utils.<A HREF="./play/modules/fileauth/utils/MD5Crypt.html" title="class in play.modules.fileauth.utils">MD5Crypt</A>
<DD>&nbsp;
</DL>
<HR>
<A NAME="_V_"><!-- --></A><H2>
<B>V</B></H2>
<DL>
<DT><A HREF="./play/modules/fileauth/FileAuth.html#validate(java.lang.String, java.lang.String)"><B>validate(String, String)</B></A> - 
Static method in class play.modules.fileauth.<A HREF="./play/modules/fileauth/FileAuth.html" title="class in play.modules.fileauth">FileAuth</A>
<DD>Validates an user with a given password agains the user/password hash
 mapping.
<DT><A HREF="./play/modules/fileauth/utils/MD5Crypt.html#verifyPassword(java.lang.String, java.lang.String)"><B>verifyPassword(String, String)</B></A> - 
Static method in class play.modules.fileauth.utils.<A HREF="./play/modules/fileauth/utils/MD5Crypt.html" title="class in play.modules.fileauth.utils">MD5Crypt</A>
<DD>This method tests a plaintext password against a md5Crypt'ed hash and returns
 true if the password matches the hash.
</DL>
<HR>
<A HREF="#_A_">A</A> <A HREF="#_B_">B</A> <A HREF="#_C_">C</A> <A HREF="#_D_">D</A> <A HREF="#_F_">F</A> <A HREF="#_G_">G</A> <A HREF="#_I_">I</A> <A HREF="#_L_">L</A> <A HREF="#_M_">M</A> <A HREF="#_O_">O</A> <A HREF="#_P_">P</A> <A HREF="#_S_">S</A> <A HREF="#_T_">T</A> <A HREF="#_V_">V</A> 

<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="./overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="./overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="./deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="./help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="./index.html?index-all.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="index-all.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="./allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="./allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->

<HR>

</BODY>
</HTML>
PK�����Ä…9DÌÖ¦p‡��‡�����javadoc/index.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc on Sat Jan 25 16:46:08 CET 2014-->
<TITLE>
Generated Documentation (Untitled)
</TITLE>
<SCRIPT type="text/javascript">
    targetPage = "" + window.location.search;
    if (targetPage != "" && targetPage != "undefined")
        targetPage = targetPage.substring(1);
    if (targetPage.indexOf(":") != -1)
        targetPage = "undefined";
    function loadFrames() {
        if (targetPage != "" && targetPage != "undefined")
             top.classFrame.location = top.targetPage;
    }
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>
</HEAD>
<FRAMESET cols="20%,80%" title="" onLoad="top.loadFrames()">
<FRAMESET rows="30%,70%" title="" onLoad="top.loadFrames()">
<FRAME src="overview-frame.html" name="packageListFrame" title="All Packages">
<FRAME src="allclasses-frame.html" name="packageFrame" title="All classes and interfaces (except non-static nested types)">
</FRAMESET>
<FRAME src="overview-summary.html" name="classFrame" title="Package, class and interface descriptions" scrolling="yes">
<NOFRAMES>
<H2>
Frame Alert</H2>

<P>
This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
<BR>
Link to<A HREF="overview-summary.html">Non-frame version.</A>
</NOFRAMES>
</FRAMESET>
</HTML>
PK�����Ä…9De‘³�������javadoc/overview-summary.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_26) on Sat Jan 25 16:46:08 CET 2014 -->
<TITLE>
Overview
</TITLE>

<META NAME="date" CONTENT="2014-01-25">

<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">

<SCRIPT type="text/javascript">
function windowTitle()
{
    if (location.href.indexOf('is-external=true') == -1) {
        parent.document.title="Overview";
    }
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>

</HEAD>

<BODY BGCOLOR="white" onload="windowTitle();">
<HR>


<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Overview</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html?overview-summary.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="overview-summary.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->

<HR>

<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Packages</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="20%"><B><A HREF="controllers/package-summary.html">controllers</A></B></TD>
<TD>&nbsp;</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="20%"><B><A HREF="play/modules/fileauth/package-summary.html">play.modules.fileauth</A></B></TD>
<TD>&nbsp;</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="20%"><B><A HREF="play/modules/fileauth/utils/package-summary.html">play.modules.fileauth.utils</A></B></TD>
<TD>&nbsp;</TD>
</TR>
</TABLE>

<P>
&nbsp;<HR>


<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Overview</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html?overview-summary.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="overview-summary.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->

<HR>

</BODY>
</HTML>
PK�����Ä…9D7‚ãÓ�������javadoc/deprecated-list.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_26) on Sat Jan 25 16:46:08 CET 2014 -->
<TITLE>
Deprecated List
</TITLE>

<META NAME="date" CONTENT="2014-01-25">

<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">

<SCRIPT type="text/javascript">
function windowTitle()
{
    if (location.href.indexOf('is-external=true') == -1) {
        parent.document.title="Deprecated List";
    }
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>

</HEAD>

<BODY BGCOLOR="white" onload="windowTitle();">
<HR>


<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Deprecated</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html?deprecated-list.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="deprecated-list.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->

<HR>
<CENTER>
<H2>
<B>Deprecated API</B></H2>
</CENTER>
<HR SIZE="4" NOSHADE>
<B>Contents</B><UL>
</UL>

<HR>


<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Deprecated</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html?deprecated-list.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="deprecated-list.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->

<HR>

</BODY>
</HTML>
PK�����Ä…9DMüƒ9���9������javadoc/resources/inherit.gifGIF89a��€��ÿÿÿ���,�������„	¡½®DršjñԐ;߀Q@–¦…N�;PK�����Ã…9DÚ°Nš?��?��+���javadoc/play/modules/fileauth/FileAuth.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_26) on Sat Jan 25 16:46:07 CET 2014 -->
<TITLE>
FileAuth
</TITLE>

<META NAME="date" CONTENT="2014-01-25">

<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">

<SCRIPT type="text/javascript">
function windowTitle()
{
    if (location.href.indexOf('is-external=true') == -1) {
        parent.document.title="FileAuth";
    }
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>

</HEAD>

<BODY BGCOLOR="white" onload="windowTitle();">
<HR>


<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV CLASS&nbsp;
&nbsp;<A HREF="../../../play/modules/fileauth/FileAuthPlugin.html" title="class in play.modules.fileauth"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../../../index.html?play/modules/fileauth/FileAuth.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="FileAuth.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->

<HR>
<!-- ======== START OF CLASS DATA ======== -->
<H2>
<FONT SIZE="-1">
play.modules.fileauth</FONT>
<BR>
Class FileAuth</H2>
<PRE>
java.lang.Object
  <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>play.modules.fileauth.FileAuth</B>
</PRE>
<HR>
<DL>
<DT><PRE>public class <B>FileAuth</B><DT>extends java.lang.Object</DL>
</PRE>

<P>
Basic Wrapper for all FileAuth Functions.
<P>

<P>
<HR>

<P>
<!-- =========== FIELD SUMMARY =========== -->

<A NAME="field_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Field Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../play/modules/fileauth/FileAuth.html#AUTH_FILE_GROUPS_CACHE_KEY">AUTH_FILE_GROUPS_CACHE_KEY</A></B></CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../play/modules/fileauth/FileAuth.html#AUTH_FILE_USERS_CACHE_KEY">AUTH_FILE_USERS_CACHE_KEY</A></B></CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../play/modules/fileauth/FileAuth.html#IS_ENABLED">IS_ENABLED</A></B></CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../play/modules/fileauth/FileAuth.html#FileAuth()">FileAuth</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../play/modules/fileauth/FileAuth.html#contains(java.lang.String, java.lang.String)">contains</A></B>(java.lang.String&nbsp;group,
         java.lang.String&nbsp;user)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Checks if a group contains a given username.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;java.util.Map&lt;java.lang.String,java.util.Set&lt;java.lang.String&gt;&gt;</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../play/modules/fileauth/FileAuth.html#getGroups()">getGroups</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a Map of all Groups (groups/usernames).</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;java.util.Map&lt;java.lang.String,java.lang.String&gt;</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../play/modules/fileauth/FileAuth.html#getUsers()">getUsers</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a Map of all Users (user/password hash).</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;java.util.Map&lt;java.lang.String,java.util.Set&lt;java.lang.String&gt;&gt;</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../play/modules/fileauth/FileAuth.html#scanGroups()">scanGroups</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Rescans the groups file.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;java.util.Map&lt;java.lang.String,java.lang.String&gt;</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../play/modules/fileauth/FileAuth.html#scanUsers()">scanUsers</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Rescans the users file.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../play/modules/fileauth/FileAuth.html#validate(java.lang.String, java.lang.String)">validate</A></B>(java.lang.String&nbsp;user,
         java.lang.String&nbsp;password)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Validates an user with a given password agains the user/password hash
 mapping.</TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>

<!-- ============ FIELD DETAIL =========== -->

<A NAME="field_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Field Detail</B></FONT></TH>
</TR>
</TABLE>

<A NAME="AUTH_FILE_USERS_CACHE_KEY"><!-- --></A><H3>
AUTH_FILE_USERS_CACHE_KEY</H3>
<PRE>
public static final java.lang.String <B>AUTH_FILE_USERS_CACHE_KEY</B></PRE>
<DL>
<DL>
<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#play.modules.fileauth.FileAuth.AUTH_FILE_USERS_CACHE_KEY">Constant Field Values</A></DL>
</DL>
<HR>

<A NAME="IS_ENABLED"><!-- --></A><H3>
IS_ENABLED</H3>
<PRE>
public static final boolean <B>IS_ENABLED</B></PRE>
<DL>
<DL>
</DL>
</DL>
<HR>

<A NAME="AUTH_FILE_GROUPS_CACHE_KEY"><!-- --></A><H3>
AUTH_FILE_GROUPS_CACHE_KEY</H3>
<PRE>
public static final java.lang.String <B>AUTH_FILE_GROUPS_CACHE_KEY</B></PRE>
<DL>
<DL>
<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#play.modules.fileauth.FileAuth.AUTH_FILE_GROUPS_CACHE_KEY">Constant Field Values</A></DL>
</DL>

<!-- ========= CONSTRUCTOR DETAIL ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>

<A NAME="FileAuth()"><!-- --></A><H3>
FileAuth</H3>
<PRE>
public <B>FileAuth</B>()</PRE>
<DL>
</DL>

<!-- ============ METHOD DETAIL ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>

<A NAME="getUsers()"><!-- --></A><H3>
getUsers</H3>
<PRE>
public static java.util.Map&lt;java.lang.String,java.lang.String&gt; <B>getUsers</B>()</PRE>
<DL>
<DD>Returns a Map of all Users (user/password hash).
<P>
<DD><DL>

<DT><B>Returns:</B><DD>the Map.</DL>
</DD>
</DL>
<HR>

<A NAME="getGroups()"><!-- --></A><H3>
getGroups</H3>
<PRE>
public static java.util.Map&lt;java.lang.String,java.util.Set&lt;java.lang.String&gt;&gt; <B>getGroups</B>()</PRE>
<DL>
<DD>Returns a Map of all Groups (groups/usernames).
<P>
<DD><DL>

<DT><B>Returns:</B><DD>the Map.</DL>
</DD>
</DL>
<HR>

<A NAME="contains(java.lang.String, java.lang.String)"><!-- --></A><H3>
contains</H3>
<PRE>
public static boolean <B>contains</B>(java.lang.String&nbsp;group,
                               java.lang.String&nbsp;user)</PRE>
<DL>
<DD>Checks if a group contains a given username.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>group</CODE> - the Group to check.<DD><CODE>user</CODE> - the user to check.
<DT><B>Returns:</B><DD>true if user is in group, otherwise false.</DL>
</DD>
</DL>
<HR>

<A NAME="validate(java.lang.String, java.lang.String)"><!-- --></A><H3>
validate</H3>
<PRE>
public static boolean <B>validate</B>(java.lang.String&nbsp;user,
                               java.lang.String&nbsp;password)</PRE>
<DL>
<DD>Validates an user with a given password agains the user/password hash
 mapping.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>user</CODE> - the given user.<DD><CODE>password</CODE> - the given password (clear text).
<DT><B>Returns:</B><DD>true if validation okay, otherwise false.</DL>
</DD>
</DL>
<HR>

<A NAME="scanUsers()"><!-- --></A><H3>
scanUsers</H3>
<PRE>
public static java.util.Map&lt;java.lang.String,java.lang.String&gt; <B>scanUsers</B>()</PRE>
<DL>
<DD>Rescans the users file.
<P>
<DD><DL>

<DT><B>Returns:</B><DD>the updated Map of users.</DL>
</DD>
</DL>
<HR>

<A NAME="scanGroups()"><!-- --></A><H3>
scanGroups</H3>
<PRE>
public static java.util.Map&lt;java.lang.String,java.util.Set&lt;java.lang.String&gt;&gt; <B>scanGroups</B>()</PRE>
<DL>
<DD>Rescans the groups file.
<P>
<DD><DL>

<DT><B>Returns:</B><DD>the updated Map of groups.</DL>
</DD>
</DL>
<!-- ========= END OF CLASS DATA ========= -->
<HR>


<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV CLASS&nbsp;
&nbsp;<A HREF="../../../play/modules/fileauth/FileAuthPlugin.html" title="class in play.modules.fileauth"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../../../index.html?play/modules/fileauth/FileAuth.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="FileAuth.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->

<HR>

</BODY>
</HTML>
PK�����Ä…9D<8ºÙ��Ù��/���javadoc/play/modules/fileauth/package-tree.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_26) on Sat Jan 25 16:46:08 CET 2014 -->
<TITLE>
play.modules.fileauth Class Hierarchy
</TITLE>

<META NAME="date" CONTENT="2014-01-25">

<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">

<SCRIPT type="text/javascript">
function windowTitle()
{
    if (location.href.indexOf('is-external=true') == -1) {
        parent.document.title="play.modules.fileauth Class Hierarchy";
    }
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>

</HEAD>

<BODY BGCOLOR="white" onload="windowTitle();">
<HR>


<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../controllers/package-tree.html"><B>PREV</B></A>&nbsp;
&nbsp;<A HREF="../../../play/modules/fileauth/utils/package-tree.html"><B>NEXT</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../../../index.html?play/modules/fileauth/package-tree.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->

<HR>
<CENTER>
<H2>
Hierarchy For Package play.modules.fileauth
</H2>
</CENTER>
<DL>
<DT><B>Package Hierarchies:</B><DD><A HREF="../../../overview-tree.html">All Packages</A></DL>
<HR>
<H2>
Class Hierarchy
</H2>
<UL>
<LI TYPE="circle">java.lang.Object<UL>
<LI TYPE="circle">play.modules.fileauth.<A HREF="../../../play/modules/fileauth/FileAuth.html" title="class in play.modules.fileauth"><B>FileAuth</B></A><LI TYPE="circle">play.Invoker.Invocation (implements java.lang.Runnable)
<UL>
<LI TYPE="circle">play.jobs.Job&lt;V&gt; (implements java.util.concurrent.Callable&lt;V&gt;)
<UL>
<LI TYPE="circle">play.modules.fileauth.<A HREF="../../../play/modules/fileauth/ScanJob.html" title="class in play.modules.fileauth"><B>ScanJob</B></A></UL>
</UL>
<LI TYPE="circle">play.PlayPlugin (implements java.lang.Comparable&lt;T&gt;)
<UL>
<LI TYPE="circle">play.modules.fileauth.<A HREF="../../../play/modules/fileauth/FileAuthPlugin.html" title="class in play.modules.fileauth"><B>FileAuthPlugin</B></A></UL>
</UL>
</UL>
<HR>


<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../controllers/package-tree.html"><B>PREV</B></A>&nbsp;
&nbsp;<A HREF="../../../play/modules/fileauth/utils/package-tree.html"><B>NEXT</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../../../index.html?play/modules/fileauth/package-tree.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->

<HR>

</BODY>
</HTML>
PK�����Ä…9D«€[Õ��Õ��2���javadoc/play/modules/fileauth/package-summary.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_26) on Sat Jan 25 16:46:08 CET 2014 -->
<TITLE>
play.modules.fileauth
</TITLE>

<META NAME="date" CONTENT="2014-01-25">

<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">

<SCRIPT type="text/javascript">
function windowTitle()
{
    if (location.href.indexOf('is-external=true') == -1) {
        parent.document.title="play.modules.fileauth";
    }
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>

</HEAD>

<BODY BGCOLOR="white" onload="windowTitle();">
<HR>


<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../controllers/package-summary.html"><B>PREV PACKAGE</B></A>&nbsp;
&nbsp;<A HREF="../../../play/modules/fileauth/utils/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../../../index.html?play/modules/fileauth/package-summary.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->

<HR>
<H2>
Package play.modules.fileauth
</H2>

<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Class Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="15%"><B><A HREF="../../../play/modules/fileauth/FileAuth.html" title="class in play.modules.fileauth">FileAuth</A></B></TD>
<TD>Basic Wrapper for all FileAuth Functions.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="15%"><B><A HREF="../../../play/modules/fileauth/FileAuthPlugin.html" title="class in play.modules.fileauth">FileAuthPlugin</A></B></TD>
<TD>Entry Class for first file scan.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="15%"><B><A HREF="../../../play/modules/fileauth/ScanJob.html" title="class in play.modules.fileauth">ScanJob</A></B></TD>
<TD>Periodically Scan of user/group files.</TD>
</TR>
</TABLE>
&nbsp;

<P>
<DL>
</DL>
<HR>


<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../controllers/package-summary.html"><B>PREV PACKAGE</B></A>&nbsp;
&nbsp;<A HREF="../../../play/modules/fileauth/utils/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../../../index.html?play/modules/fileauth/package-summary.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->

<HR>

</BODY>
</HTML>
PK�����Ä…9D¬¨{4��4��0���javadoc/play/modules/fileauth/package-frame.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_26) on Sat Jan 25 16:46:08 CET 2014 -->
<TITLE>
play.modules.fileauth
</TITLE>

<META NAME="date" CONTENT="2014-01-25">

<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">


</HEAD>

<BODY BGCOLOR="white">
<FONT size="+1" CLASS="FrameTitleFont">
<A HREF="../../../play/modules/fileauth/package-summary.html" target="classFrame">play.modules.fileauth</A></FONT>
<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
<TR>
<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
Classes</FONT>&nbsp;
<FONT CLASS="FrameItemFont">
<BR>
<A HREF="FileAuth.html" title="class in play.modules.fileauth" target="classFrame">FileAuth</A>
<BR>
<A HREF="FileAuthPlugin.html" title="class in play.modules.fileauth" target="classFrame">FileAuthPlugin</A>
<BR>
<A HREF="ScanJob.html" title="class in play.modules.fileauth" target="classFrame">ScanJob</A></FONT></TD>
</TR>
</TABLE>


</BODY>
</HTML>
PK�����Ã…9D±#û˾+��¾+��*���javadoc/play/modules/fileauth/ScanJob.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_26) on Sat Jan 25 16:46:07 CET 2014 -->
<TITLE>
ScanJob
</TITLE>

<META NAME="date" CONTENT="2014-01-25">

<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">

<SCRIPT type="text/javascript">
function windowTitle()
{
    if (location.href.indexOf('is-external=true') == -1) {
        parent.document.title="ScanJob";
    }
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>

</HEAD>

<BODY BGCOLOR="white" onload="windowTitle();">
<HR>


<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../play/modules/fileauth/FileAuthPlugin.html" title="class in play.modules.fileauth"><B>PREV CLASS</B></A>&nbsp;
&nbsp;NEXT CLASS</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../../../index.html?play/modules/fileauth/ScanJob.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="ScanJob.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_play.jobs.Job">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->

<HR>
<!-- ======== START OF CLASS DATA ======== -->
<H2>
<FONT SIZE="-1">
play.modules.fileauth</FONT>
<BR>
Class ScanJob</H2>
<PRE>
java.lang.Object
  <IMG SRC="../../../resources/inherit.gif" ALT="extended by ">play.Invoker.Invocation
      <IMG SRC="../../../resources/inherit.gif" ALT="extended by ">play.jobs.Job
          <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>play.modules.fileauth.ScanJob</B>
</PRE>
<DL>
<DT><B>All Implemented Interfaces:</B> <DD>java.lang.Runnable, java.util.concurrent.Callable</DD>
</DL>
<HR>
<DL>
<DT><PRE>public class <B>ScanJob</B><DT>extends play.jobs.Job</DL>
</PRE>

<P>
Periodically Scan of user/group files. Scan runs every 5 mins.
<P>

<P>
<HR>

<P>
<!-- =========== FIELD SUMMARY =========== -->

<A NAME="field_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Field Summary</B></FONT></TH>
</TR>
</TABLE>
&nbsp;<A NAME="fields_inherited_from_class_play.jobs.Job"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Fields inherited from class play.jobs.Job</B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>executor, invocationType, lastException, lastRun, wasError</CODE></TD>
</TR>
</TABLE>
&nbsp;
<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../play/modules/fileauth/ScanJob.html#ScanJob()">ScanJob</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../play/modules/fileauth/ScanJob.html#doJob()">doJob</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_play.jobs.Job"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Methods inherited from class play.jobs.Job</B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>_finally, call, doJobWithResult, every, every, execute, getInvocationContext, in, in, now, onException, run, toString</CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_play.Invoker.Invocation"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Methods inherited from class play.Invoker.Invocation</B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>after, before, init, onSuccess, preInit, suspend</CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait</CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>

<!-- ========= CONSTRUCTOR DETAIL ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>

<A NAME="ScanJob()"><!-- --></A><H3>
ScanJob</H3>
<PRE>
public <B>ScanJob</B>()</PRE>
<DL>
</DL>

<!-- ============ METHOD DETAIL ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>

<A NAME="doJob()"><!-- --></A><H3>
doJob</H3>
<PRE>
public void <B>doJob</B>()</PRE>
<DL>
<DD><DL>
<DT><B>Overrides:</B><DD><CODE>doJob</CODE> in class <CODE>play.jobs.Job</CODE></DL>
</DD>
<DD><DL>
</DL>
</DD>
</DL>
<!-- ========= END OF CLASS DATA ========= -->
<HR>


<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../play/modules/fileauth/FileAuthPlugin.html" title="class in play.modules.fileauth"><B>PREV CLASS</B></A>&nbsp;
&nbsp;NEXT CLASS</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../../../index.html?play/modules/fileauth/ScanJob.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="ScanJob.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_play.jobs.Job">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->

<HR>

</BODY>
</HTML>
PK�����Ã…9DfÒŠç¨-��¨-��1���javadoc/play/modules/fileauth/FileAuthPlugin.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_26) on Sat Jan 25 16:46:07 CET 2014 -->
<TITLE>
FileAuthPlugin
</TITLE>

<META NAME="date" CONTENT="2014-01-25">

<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">

<SCRIPT type="text/javascript">
function windowTitle()
{
    if (location.href.indexOf('is-external=true') == -1) {
        parent.document.title="FileAuthPlugin";
    }
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>

</HEAD>

<BODY BGCOLOR="white" onload="windowTitle();">
<HR>


<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../play/modules/fileauth/FileAuth.html" title="class in play.modules.fileauth"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../play/modules/fileauth/ScanJob.html" title="class in play.modules.fileauth"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../../../index.html?play/modules/fileauth/FileAuthPlugin.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="FileAuthPlugin.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_play.PlayPlugin">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->

<HR>
<!-- ======== START OF CLASS DATA ======== -->
<H2>
<FONT SIZE="-1">
play.modules.fileauth</FONT>
<BR>
Class FileAuthPlugin</H2>
<PRE>
java.lang.Object
  <IMG SRC="../../../resources/inherit.gif" ALT="extended by ">play.PlayPlugin
      <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>play.modules.fileauth.FileAuthPlugin</B>
</PRE>
<DL>
<DT><B>All Implemented Interfaces:</B> <DD>java.lang.Comparable&lt;play.PlayPlugin&gt;</DD>
</DL>
<HR>
<DL>
<DT><PRE>public class <B>FileAuthPlugin</B><DT>extends play.PlayPlugin</DL>
</PRE>

<P>
Entry Class for first file scan.
<P>

<P>
<HR>

<P>
<!-- =========== FIELD SUMMARY =========== -->

<A NAME="field_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Field Summary</B></FONT></TH>
</TR>
</TABLE>
&nbsp;<A NAME="fields_inherited_from_class_play.PlayPlugin"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Fields inherited from class play.PlayPlugin</B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>index</CODE></TD>
</TR>
</TABLE>
&nbsp;
<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../play/modules/fileauth/FileAuthPlugin.html#FileAuthPlugin()">FileAuthPlugin</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../play/modules/fileauth/FileAuthPlugin.html#onApplicationStart()">onApplicationStart</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Trigger to scan the files for the first Time.</TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_play.PlayPlugin"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Methods inherited from class play.PlayPlugin</B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>addMimeTypes, addTemplateExtensions, afterActionInvocation, afterApplicationStart, afterFixtureLoad, afterInvocation, beforeActionInvocation, beforeDetectingChanges, beforeInvocation, bind, bind, bind, bindBean, compareTo, compileAll, compileSources, detectChange, detectClassesChange, enhance, getJsonStatus, getMessage, getStatus, invocationFinally, loadTemplate, modelFactory, onActionInvocationResult, onApplicationReady, onApplicationStop, onClassesChange, onConfigurationRead, onEvent, onInvocationException, onInvocationSuccess, onLoad, onRequestRouting, onRoutesLoaded, onTemplateCompilation, overrideTemplateSource, postEvent, rawInvocation, routeRequest, runTest, serveStatic, unBind, willBeValidated</CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>

<!-- ========= CONSTRUCTOR DETAIL ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>

<A NAME="FileAuthPlugin()"><!-- --></A><H3>
FileAuthPlugin</H3>
<PRE>
public <B>FileAuthPlugin</B>()</PRE>
<DL>
</DL>

<!-- ============ METHOD DETAIL ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>

<A NAME="onApplicationStart()"><!-- --></A><H3>
onApplicationStart</H3>
<PRE>
public void <B>onApplicationStart</B>()</PRE>
<DL>
<DD>Trigger to scan the files for the first Time.
<P>
<DD><DL>
<DT><B>Overrides:</B><DD><CODE>onApplicationStart</CODE> in class <CODE>play.PlayPlugin</CODE></DL>
</DD>
<DD><DL>
</DL>
</DD>
</DL>
<!-- ========= END OF CLASS DATA ========= -->
<HR>


<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../play/modules/fileauth/FileAuth.html" title="class in play.modules.fileauth"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../play/modules/fileauth/ScanJob.html" title="class in play.modules.fileauth"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../../../index.html?play/modules/fileauth/FileAuthPlugin.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="FileAuthPlugin.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_play.PlayPlugin">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->

<HR>

</BODY>
</HTML>
PK�����Ä…9Drù‡nm��m��5���javadoc/play/modules/fileauth/utils/package-tree.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_26) on Sat Jan 25 16:46:08 CET 2014 -->
<TITLE>
play.modules.fileauth.utils Class Hierarchy
</TITLE>

<META NAME="date" CONTENT="2014-01-25">

<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">

<SCRIPT type="text/javascript">
function windowTitle()
{
    if (location.href.indexOf('is-external=true') == -1) {
        parent.document.title="play.modules.fileauth.utils Class Hierarchy";
    }
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>

</HEAD>

<BODY BGCOLOR="white" onload="windowTitle();">
<HR>


<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../../play/modules/fileauth/package-tree.html"><B>PREV</B></A>&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../../../../index.html?play/modules/fileauth/utils/package-tree.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->

<HR>
<CENTER>
<H2>
Hierarchy For Package play.modules.fileauth.utils
</H2>
</CENTER>
<DL>
<DT><B>Package Hierarchies:</B><DD><A HREF="../../../../overview-tree.html">All Packages</A></DL>
<HR>
<H2>
Class Hierarchy
</H2>
<UL>
<LI TYPE="circle">java.lang.Object<UL>
<LI TYPE="circle">play.modules.fileauth.utils.<A HREF="../../../../play/modules/fileauth/utils/MD5Crypt.html" title="class in play.modules.fileauth.utils"><B>MD5Crypt</B></A></UL>
</UL>
<HR>


<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../../play/modules/fileauth/package-tree.html"><B>PREV</B></A>&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../../../../index.html?play/modules/fileauth/utils/package-tree.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->

<HR>

</BODY>
</HTML>
PK�����Ã…9D÷o˜1ÎT��ÎT��1���javadoc/play/modules/fileauth/utils/MD5Crypt.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_26) on Sat Jan 25 16:46:07 CET 2014 -->
<TITLE>
MD5Crypt
</TITLE>

<META NAME="date" CONTENT="2014-01-25">

<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">

<SCRIPT type="text/javascript">
function windowTitle()
{
    if (location.href.indexOf('is-external=true') == -1) {
        parent.document.title="MD5Crypt";
    }
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>

</HEAD>

<BODY BGCOLOR="white" onload="windowTitle();">
<HR>


<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV CLASS&nbsp;
&nbsp;NEXT CLASS</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../../../../index.html?play/modules/fileauth/utils/MD5Crypt.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="MD5Crypt.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->

<HR>
<!-- ======== START OF CLASS DATA ======== -->
<H2>
<FONT SIZE="-1">
play.modules.fileauth.utils</FONT>
<BR>
Class MD5Crypt</H2>
<PRE>
java.lang.Object
  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>play.modules.fileauth.utils.MD5Crypt</B>
</PRE>
<HR>
<DL>
<DT><PRE>public final class <B>MD5Crypt</B><DT>extends java.lang.Object</DL>
</PRE>

<P>
This class defines a method,
 <A HREF="../../../../play/modules/fileauth/utils/MD5Crypt.html#crypt(java.lang.String, java.lang.String)"><CODE>crypt()</CODE></A>, which
 takes a password and a salt string and generates an OpenBSD/FreeBSD/Linux-compatible
 md5-encoded password entry.
<P>

<P>
<HR>

<P>
<!-- =========== FIELD SUMMARY =========== -->

<A NAME="field_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Field Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../play/modules/fileauth/utils/MD5Crypt.html#itoa64">itoa64</A></B></CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../play/modules/fileauth/utils/MD5Crypt.html#SALTCHARS">SALTCHARS</A></B></CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../play/modules/fileauth/utils/MD5Crypt.html#MD5Crypt()">MD5Crypt</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../play/modules/fileauth/utils/MD5Crypt.html#apacheCrypt(java.lang.String)">apacheCrypt</A></B>(java.lang.String&nbsp;password)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This method generates an Apache MD5 compatible
 md5-encoded password hash from a plaintext password and a
 salt.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../play/modules/fileauth/utils/MD5Crypt.html#apacheCrypt(java.lang.String, java.lang.String)">apacheCrypt</A></B>(java.lang.String&nbsp;password,
            java.lang.String&nbsp;salt)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This method actually generates an Apache MD5 compatible
 md5-encoded password hash from a plaintext password and a
 salt.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;int</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../play/modules/fileauth/utils/MD5Crypt.html#bytes2u(byte)">bytes2u</A></B>(byte&nbsp;inp)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;convert an encoded unsigned byte value into a int
 with the unsigned value.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../play/modules/fileauth/utils/MD5Crypt.html#clearbits(byte[])">clearbits</A></B>(byte[]&nbsp;bits)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../play/modules/fileauth/utils/MD5Crypt.html#crypt(java.lang.String)">crypt</A></B>(java.lang.String&nbsp;password)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This method actually generates a OpenBSD/FreeBSD/Linux PAM compatible
 md5-encoded password hash from a plaintext password and a
 salt.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../play/modules/fileauth/utils/MD5Crypt.html#crypt(java.lang.String, java.lang.String)">crypt</A></B>(java.lang.String&nbsp;password,
      java.lang.String&nbsp;salt)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This method actually generates a OpenBSD/FreeBSD/Linux PAM compatible
 md5-encoded password hash from a plaintext password and a
 salt.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../play/modules/fileauth/utils/MD5Crypt.html#crypt(java.lang.String, java.lang.String, java.lang.String)">crypt</A></B>(java.lang.String&nbsp;password,
      java.lang.String&nbsp;salt,
      java.lang.String&nbsp;magic)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This method actually generates md5-encoded password hash from
 a plaintext password, a salt, and a magic string.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../play/modules/fileauth/utils/MD5Crypt.html#main(java.lang.String[])">main</A></B>(java.lang.String[]&nbsp;argv)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Command line test rig.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../play/modules/fileauth/utils/MD5Crypt.html#to64(long, int)">to64</A></B>(long&nbsp;v,
     int&nbsp;size)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../play/modules/fileauth/utils/MD5Crypt.html#verifyPassword(java.lang.String, java.lang.String)">verifyPassword</A></B>(java.lang.String&nbsp;plaintextPass,
               java.lang.String&nbsp;md5CryptText)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This method tests a plaintext password against a md5Crypt'ed hash and returns
 true if the password matches the hash.</TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>

<!-- ============ FIELD DETAIL =========== -->

<A NAME="field_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Field Detail</B></FONT></TH>
</TR>
</TABLE>

<A NAME="SALTCHARS"><!-- --></A><H3>
SALTCHARS</H3>
<PRE>
public static final java.lang.String <B>SALTCHARS</B></PRE>
<DL>
<DL>
<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#play.modules.fileauth.utils.MD5Crypt.SALTCHARS">Constant Field Values</A></DL>
</DL>
<HR>

<A NAME="itoa64"><!-- --></A><H3>
itoa64</H3>
<PRE>
public static final java.lang.String <B>itoa64</B></PRE>
<DL>
<DL>
<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#play.modules.fileauth.utils.MD5Crypt.itoa64">Constant Field Values</A></DL>
</DL>

<!-- ========= CONSTRUCTOR DETAIL ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>

<A NAME="MD5Crypt()"><!-- --></A><H3>
MD5Crypt</H3>
<PRE>
public <B>MD5Crypt</B>()</PRE>
<DL>
</DL>

<!-- ============ METHOD DETAIL ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>

<A NAME="main(java.lang.String[])"><!-- --></A><H3>
main</H3>
<PRE>
public static void <B>main</B>(java.lang.String[]&nbsp;argv)</PRE>
<DL>
<DD>Command line test rig.
<P>
<DD><DL>
</DL>
</DD>
</DL>
<HR>

<A NAME="to64(long, int)"><!-- --></A><H3>
to64</H3>
<PRE>
public static final java.lang.String <B>to64</B>(long&nbsp;v,
                                          int&nbsp;size)</PRE>
<DL>
<DD><DL>
</DL>
</DD>
</DL>
<HR>

<A NAME="clearbits(byte[])"><!-- --></A><H3>
clearbits</H3>
<PRE>
public static final void <B>clearbits</B>(byte[]&nbsp;bits)</PRE>
<DL>
<DD><DL>
</DL>
</DD>
</DL>
<HR>

<A NAME="bytes2u(byte)"><!-- --></A><H3>
bytes2u</H3>
<PRE>
public static final int <B>bytes2u</B>(byte&nbsp;inp)</PRE>
<DL>
<DD>convert an encoded unsigned byte value into a int
 with the unsigned value.
<P>
<DD><DL>
</DL>
</DD>
</DL>
<HR>

<A NAME="crypt(java.lang.String)"><!-- --></A><H3>
crypt</H3>
<PRE>
public static final java.lang.String <B>crypt</B>(java.lang.String&nbsp;password)</PRE>
<DL>
<DD><p>This method actually generates a OpenBSD/FreeBSD/Linux PAM compatible
 md5-encoded password hash from a plaintext password and a
 salt.</p>

 <p>The resulting string will be in the form '$1$&lt;salt&gt;$&lt;hashed mess&gt;</p>
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>password</CODE> - Plaintext password
<DT><B>Returns:</B><DD>An OpenBSD/FreeBSD/Linux-compatible md5-hashed password field.</DL>
</DD>
</DL>
<HR>

<A NAME="crypt(java.lang.String, java.lang.String)"><!-- --></A><H3>
crypt</H3>
<PRE>
public static final java.lang.String <B>crypt</B>(java.lang.String&nbsp;password,
                                           java.lang.String&nbsp;salt)</PRE>
<DL>
<DD><p>This method actually generates a OpenBSD/FreeBSD/Linux PAM compatible
 md5-encoded password hash from a plaintext password and a
 salt.</p>

 <p>The resulting string will be in the form '$1$&lt;salt&gt;$&lt;hashed mess&gt;</p>
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>password</CODE> - Plaintext password<DD><CODE>salt</CODE> - A short string to use to randomize md5.  May start with $1$, which
             will be ignored.  It is explicitly permitted to pass a pre-existing
             MD5Crypt'ed password entry as the salt.  crypt() will strip the salt
             chars out properly.
<DT><B>Returns:</B><DD>An OpenBSD/FreeBSD/Linux-compatible md5-hashed password field.</DL>
</DD>
</DL>
<HR>

<A NAME="apacheCrypt(java.lang.String)"><!-- --></A><H3>
apacheCrypt</H3>
<PRE>
public static final java.lang.String <B>apacheCrypt</B>(java.lang.String&nbsp;password)</PRE>
<DL>
<DD><p>This method generates an Apache MD5 compatible
 md5-encoded password hash from a plaintext password and a
 salt.</p>

 <p>The resulting string will be in the form '$apr1$&lt;salt&gt;$&lt;hashed mess&gt;</p>
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>password</CODE> - Plaintext password
<DT><B>Returns:</B><DD>An Apache-compatible md5-hashed password string.</DL>
</DD>
</DL>
<HR>

<A NAME="apacheCrypt(java.lang.String, java.lang.String)"><!-- --></A><H3>
apacheCrypt</H3>
<PRE>
public static final java.lang.String <B>apacheCrypt</B>(java.lang.String&nbsp;password,
                                                 java.lang.String&nbsp;salt)</PRE>
<DL>
<DD><p>This method actually generates an Apache MD5 compatible
 md5-encoded password hash from a plaintext password and a
 salt.</p>

 <p>The resulting string will be in the form '$apr1$&lt;salt&gt;$&lt;hashed mess&gt;</p>
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>password</CODE> - Plaintext password<DD><CODE>salt</CODE> - A short string to use to randomize md5.  May start with $apr1$, which
             will be ignored.  It is explicitly permitted to pass a pre-existing
             MD5Crypt'ed password entry as the salt.  crypt() will strip the salt
             chars out properly.
<DT><B>Returns:</B><DD>An Apache-compatible md5-hashed password string.</DL>
</DD>
</DL>
<HR>

<A NAME="crypt(java.lang.String, java.lang.String, java.lang.String)"><!-- --></A><H3>
crypt</H3>
<PRE>
public static final java.lang.String <B>crypt</B>(java.lang.String&nbsp;password,
                                           java.lang.String&nbsp;salt,
                                           java.lang.String&nbsp;magic)</PRE>
<DL>
<DD><p>This method actually generates md5-encoded password hash from
 a plaintext password, a salt, and a magic string.</p>

 <p>There are two magic strings that make sense to use here.. '$1$' is the
 magic string used by the FreeBSD/Linux/OpenBSD MD5Crypt algorithm, and
 '$apr1$' is the magic string used by the Apache MD5Crypt algorithm.</p>

 <p>The resulting string will be in the form '&lt;magic&gt;&lt;salt&gt;$&lt;hashed mess&gt;</p>
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>password</CODE> - Plaintext password<DD><CODE>salt</CODE> - A short string to use to randomize md5.  May start
 with the magic string, which will be ignored.  It is explicitly
 permitted to pass a pre-existing MD5Crypt'ed password entry as
 the salt.  crypt() will strip the salt chars out properly.<DD><CODE>magic</CODE> - Either "$apr1$" or "$1$", which controls whether we
 are doing Apache-style or FreeBSD-style md5Crypt.
<DT><B>Returns:</B><DD>An md5-hashed password string.</DL>
</DD>
</DL>
<HR>

<A NAME="verifyPassword(java.lang.String, java.lang.String)"><!-- --></A><H3>
verifyPassword</H3>
<PRE>
public static final boolean <B>verifyPassword</B>(java.lang.String&nbsp;plaintextPass,
                                           java.lang.String&nbsp;md5CryptText)</PRE>
<DL>
<DD>This method tests a plaintext password against a md5Crypt'ed hash and returns
 true if the password matches the hash.

 This method will work properly whether the hashtext was crypted
 using the default FreeBSD md5Crypt algorithm or the Apache
 md5Crypt variant.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>plaintextPass</CODE> - The plaintext password text to test.<DD><CODE>md5CryptText</CODE> - The Apache or FreeBSD-md5Crypted hash used to authenticate the plaintextPass.</DL>
</DD>
</DL>
<!-- ========= END OF CLASS DATA ========= -->
<HR>


<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV CLASS&nbsp;
&nbsp;NEXT CLASS</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../../../../index.html?play/modules/fileauth/utils/MD5Crypt.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="MD5Crypt.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->

<HR>

</BODY>
</HTML>
PK�����Ä…9D«ˆO—È��È��8���javadoc/play/modules/fileauth/utils/package-summary.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_26) on Sat Jan 25 16:46:08 CET 2014 -->
<TITLE>
play.modules.fileauth.utils
</TITLE>

<META NAME="date" CONTENT="2014-01-25">

<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">

<SCRIPT type="text/javascript">
function windowTitle()
{
    if (location.href.indexOf('is-external=true') == -1) {
        parent.document.title="play.modules.fileauth.utils";
    }
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>

</HEAD>

<BODY BGCOLOR="white" onload="windowTitle();">
<HR>


<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../../play/modules/fileauth/package-summary.html"><B>PREV PACKAGE</B></A>&nbsp;
&nbsp;NEXT PACKAGE</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../../../../index.html?play/modules/fileauth/utils/package-summary.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->

<HR>
<H2>
Package play.modules.fileauth.utils
</H2>

<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Class Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="15%"><B><A HREF="../../../../play/modules/fileauth/utils/MD5Crypt.html" title="class in play.modules.fileauth.utils">MD5Crypt</A></B></TD>
<TD>This class defines a method,
 <A HREF="../../../../play/modules/fileauth/utils/MD5Crypt.html#crypt(java.lang.String, java.lang.String)"><CODE>crypt()</CODE></A>, which
 takes a password and a salt string and generates an OpenBSD/FreeBSD/Linux-compatible
 md5-encoded password entry.</TD>
</TR>
</TABLE>
&nbsp;

<P>
<DL>
</DL>
<HR>


<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../../play/modules/fileauth/package-summary.html"><B>PREV PACKAGE</B></A>&nbsp;
&nbsp;NEXT PACKAGE</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../../../../index.html?play/modules/fileauth/utils/package-summary.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->

<HR>

</BODY>
</HTML>
PK�����Ä…9D`¬/~��~��6���javadoc/play/modules/fileauth/utils/package-frame.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_26) on Sat Jan 25 16:46:08 CET 2014 -->
<TITLE>
play.modules.fileauth.utils
</TITLE>

<META NAME="date" CONTENT="2014-01-25">

<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">


</HEAD>

<BODY BGCOLOR="white">
<FONT size="+1" CLASS="FrameTitleFont">
<A HREF="../../../../play/modules/fileauth/utils/package-summary.html" target="classFrame">play.modules.fileauth.utils</A></FONT>
<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
<TR>
<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
Classes</FONT>&nbsp;
<FONT CLASS="FrameItemFont">
<BR>
<A HREF="MD5Crypt.html" title="class in play.modules.fileauth.utils" target="classFrame">MD5Crypt</A></FONT></TD>
</TR>
</TABLE>


</BODY>
</HTML>
PK�����Ã…9Dî0•?�������javadoc/controllers/Check.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_26) on Sat Jan 25 16:46:07 CET 2014 -->
<TITLE>
Check
</TITLE>

<META NAME="date" CONTENT="2014-01-25">

<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style">

<SCRIPT type="text/javascript">
function windowTitle()
{
    if (location.href.indexOf('is-external=true') == -1) {
        parent.document.title="Check";
    }
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>

</HEAD>

<BODY BGCOLOR="white" onload="windowTitle();">
<HR>


<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../controllers/AuthFileSecurity.html" title="class in controllers"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../controllers/Secure.html" title="class in controllers"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../index.html?controllers/Check.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="Check.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#annotation_type_required_element_summary">REQUIRED</A>&nbsp;|&nbsp;OPTIONAL</FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#annotation_type_element_detail">ELEMENT</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->

<HR>
<!-- ======== START OF CLASS DATA ======== -->
<H2>
<FONT SIZE="-1">
controllers</FONT>
<BR>
Annotation Type Check</H2>
<HR>
<DL>
<DT><PRE><FONT SIZE="-1">@Retention(value=RUNTIME)
@Target(value={METHOD,TYPE})
</FONT>public @interface <B>Check</B></DL>
</PRE>

<P>
<HR>

<P>
<!-- =========== ANNOTATION TYPE REQUIRED MEMBER SUMMARY =========== -->

<A NAME="annotation_type_required_element_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Required Element Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;java.lang.String[]</CODE></FONT></TD>
<TD><CODE><B><A HREF="../controllers/Check.html#value()">value</A></B></CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
<P>

<!-- ============ ANNOTATION TYPE MEMBER DETAIL =========== -->

<A NAME="annotation_type_element_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Element Detail</B></FONT></TH>
</TR>
</TABLE>

<A NAME="value()"><!-- --></A><H3>
value</H3>
<PRE>
public abstract java.lang.String[] <B>value</B></PRE>
<DL>
<DD><DL>
</DL>
</DD>
<DD><DL>
</DL>
</DL>
<!-- ========= END OF CLASS DATA ========= -->
<HR>


<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../controllers/AuthFileSecurity.html" title="class in controllers"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../controllers/Secure.html" title="class in controllers"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../index.html?controllers/Check.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="Check.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#annotation_type_required_element_summary">REQUIRED</A>&nbsp;|&nbsp;OPTIONAL</FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#annotation_type_element_detail">ELEMENT</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->

<HR>

</BODY>
</HTML>
PK�����Ä…9D)šº|ò��ò��%���javadoc/controllers/package-tree.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_26) on Sat Jan 25 16:46:08 CET 2014 -->
<TITLE>
controllers Class Hierarchy
</TITLE>

<META NAME="date" CONTENT="2014-01-25">

<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style">

<SCRIPT type="text/javascript">
function windowTitle()
{
    if (location.href.indexOf('is-external=true') == -1) {
        parent.document.title="controllers Class Hierarchy";
    }
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>

</HEAD>

<BODY BGCOLOR="white" onload="windowTitle();">
<HR>


<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV&nbsp;
&nbsp;<A HREF="../play/modules/fileauth/package-tree.html"><B>NEXT</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../index.html?controllers/package-tree.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->

<HR>
<CENTER>
<H2>
Hierarchy For Package controllers
</H2>
</CENTER>
<DL>
<DT><B>Package Hierarchies:</B><DD><A HREF="../overview-tree.html">All Packages</A></DL>
<HR>
<H2>
Class Hierarchy
</H2>
<UL>
<LI TYPE="circle">java.lang.Object<UL>
<LI TYPE="circle">play.mvc.Controller (implements play.classloading.enhancers.ControllersEnhancer.ControllerSupport, play.classloading.enhancers.LocalvariablesNamesEnhancer.LocalVariablesSupport)
<UL>
<LI TYPE="circle">controllers.<A HREF="../controllers/Secure.html" title="class in controllers"><B>Secure</B></A><LI TYPE="circle">controllers.<A HREF="../controllers/Secure.Security.html" title="class in controllers"><B>Secure.Security</B></A><UL>
<LI TYPE="circle">controllers.<A HREF="../controllers/AuthFileSecurity.html" title="class in controllers"><B>AuthFileSecurity</B></A></UL>
</UL>
</UL>
</UL>
<H2>
Annotation Type Hierarchy
</H2>
<UL>
<LI TYPE="circle">controllers.<A HREF="../controllers/Check.html" title="annotation in controllers"><B>Check</B></A> (implements java.lang.annotation.Annotation)
</UL>
<HR>


<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV&nbsp;
&nbsp;<A HREF="../play/modules/fileauth/package-tree.html"><B>NEXT</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../index.html?controllers/package-tree.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->

<HR>

</BODY>
</HTML>
PK�����Ã…9Dñ…”0O*��O*��(���javadoc/controllers/Secure.Security.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_26) on Sat Jan 25 16:46:07 CET 2014 -->
<TITLE>
Secure.Security
</TITLE>

<META NAME="date" CONTENT="2014-01-25">

<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style">

<SCRIPT type="text/javascript">
function windowTitle()
{
    if (location.href.indexOf('is-external=true') == -1) {
        parent.document.title="Secure.Security";
    }
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>

</HEAD>

<BODY BGCOLOR="white" onload="windowTitle();">
<HR>


<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../controllers/Secure.html" title="class in controllers"><B>PREV CLASS</B></A>&nbsp;
&nbsp;NEXT CLASS</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../index.html?controllers/Secure.Security.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="Secure.Security.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_play.mvc.Controller">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_play.mvc.Controller">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;METHOD</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->

<HR>
<!-- ======== START OF CLASS DATA ======== -->
<H2>
<FONT SIZE="-1">
controllers</FONT>
<BR>
Class Secure.Security</H2>
<PRE>
java.lang.Object
  <IMG SRC="../resources/inherit.gif" ALT="extended by ">play.mvc.Controller
      <IMG SRC="../resources/inherit.gif" ALT="extended by "><B>controllers.Secure.Security</B>
</PRE>
<DL>
<DT><B>All Implemented Interfaces:</B> <DD>play.classloading.enhancers.ControllersEnhancer.ControllerSupport, play.classloading.enhancers.LocalvariablesNamesEnhancer.LocalVariablesSupport</DD>
</DL>
<DL>
<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../controllers/AuthFileSecurity.html" title="class in controllers">AuthFileSecurity</A></DD>
</DL>
<DL>
<DT><B>Enclosing class:</B><DD><A HREF="../controllers/Secure.html" title="class in controllers">Secure</A></DD>
</DL>
<HR>
<DL>
<DT><PRE>public static class <B>Secure.Security</B><DT>extends play.mvc.Controller</DL>
</PRE>

<P>
<HR>

<P>
<!-- =========== FIELD SUMMARY =========== -->

<A NAME="field_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Field Summary</B></FONT></TH>
</TR>
</TABLE>
&nbsp;<A NAME="fields_inherited_from_class_play.mvc.Controller"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Fields inherited from class play.mvc.Controller</B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>_currentReverse, flash, params, renderArgs, request, response, routeArgs, session, validation</CODE></TD>
</TR>
</TABLE>
&nbsp;
<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../controllers/Secure.Security.html#Secure.Security()">Secure.Security</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Method Summary</B></FONT></TH>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_play.mvc.Controller"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Methods inherited from class play.mvc.Controller</B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>await, await, await, await, await, await, badRequest, checkAuthenticity, error, error, error, error, flash, forbidden, forbidden, getActionAnnotation, getControllerAnnotation, getControllerClass, getControllerInheritedAnnotation, notFound, notFound, notFoundIfNull, notFoundIfNull, notModified, ok, parent, parent, parent, redirect, redirect, redirect, redirect, redirectToStatic, render, renderBinary, renderBinary, renderBinary, renderBinary, renderBinary, renderBinary, renderBinary, renderBinary, renderBinary, renderBinary, renderHtml, renderJSON, renderJSON, renderJSON, renderJSON, renderTemplate, renderTemplate, renderTemplate, renderText, renderText, renderXml, renderXml, renderXml, renderXml, reverse, suspend, suspend, template, template, templateExists, todo, unauthorized, unauthorized, waitFor</CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>

<!-- ========= CONSTRUCTOR DETAIL ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>

<A NAME="Secure.Security()"><!-- --></A><H3>
Secure.Security</H3>
<PRE>
public <B>Secure.Security</B>()</PRE>
<DL>
</DL>
<!-- ========= END OF CLASS DATA ========= -->
<HR>


<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../controllers/Secure.html" title="class in controllers"><B>PREV CLASS</B></A>&nbsp;
&nbsp;NEXT CLASS</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../index.html?controllers/Secure.Security.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="Secure.Security.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_play.mvc.Controller">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_play.mvc.Controller">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;METHOD</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->

<HR>

</BODY>
</HTML>
PK�����Ã…9D‹ˆZå2��å2��)���javadoc/controllers/AuthFileSecurity.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_26) on Sat Jan 25 16:46:07 CET 2014 -->
<TITLE>
AuthFileSecurity
</TITLE>

<META NAME="date" CONTENT="2014-01-25">

<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style">

<SCRIPT type="text/javascript">
function windowTitle()
{
    if (location.href.indexOf('is-external=true') == -1) {
        parent.document.title="AuthFileSecurity";
    }
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>

</HEAD>

<BODY BGCOLOR="white" onload="windowTitle();">
<HR>


<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV CLASS&nbsp;
&nbsp;<A HREF="../controllers/Check.html" title="annotation in controllers"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../index.html?controllers/AuthFileSecurity.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="AuthFileSecurity.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_play.mvc.Controller">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->

<HR>
<!-- ======== START OF CLASS DATA ======== -->
<H2>
<FONT SIZE="-1">
controllers</FONT>
<BR>
Class AuthFileSecurity</H2>
<PRE>
java.lang.Object
  <IMG SRC="../resources/inherit.gif" ALT="extended by ">play.mvc.Controller
      <IMG SRC="../resources/inherit.gif" ALT="extended by "><A HREF="../controllers/Secure.Security.html" title="class in controllers">controllers.Secure.Security</A>
          <IMG SRC="../resources/inherit.gif" ALT="extended by "><B>controllers.AuthFileSecurity</B>
</PRE>
<DL>
<DT><B>All Implemented Interfaces:</B> <DD>play.classloading.enhancers.ControllersEnhancer.ControllerSupport, play.classloading.enhancers.LocalvariablesNamesEnhancer.LocalVariablesSupport</DD>
</DL>
<HR>
<DL>
<DT><PRE>public class <B>AuthFileSecurity</B><DT>extends <A HREF="../controllers/Secure.Security.html" title="class in controllers">Secure.Security</A></DL>
</PRE>

<P>
This Class provides basice Security Functions for the Play! Security Plugin.
<P>

<P>
<HR>

<P>
<!-- =========== FIELD SUMMARY =========== -->

<A NAME="field_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Field Summary</B></FONT></TH>
</TR>
</TABLE>
&nbsp;<A NAME="fields_inherited_from_class_play.mvc.Controller"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Fields inherited from class play.mvc.Controller</B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>_currentReverse, flash, params, renderArgs, request, response, routeArgs, session, validation</CODE></TD>
</TR>
</TABLE>
&nbsp;
<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../controllers/AuthFileSecurity.html#AuthFileSecurity()">AuthFileSecurity</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../controllers/AuthFileSecurity.html#authentify(java.lang.String, java.lang.String)">authentify</A></B>(java.lang.String&nbsp;username,
           java.lang.String&nbsp;password)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Authentify an user against the given AuthFile.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../controllers/AuthFileSecurity.html#check(java.lang.String)">check</A></B>(java.lang.String&nbsp;profile)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Checks if the current user (that is loged in) has the profile (e.g.</TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_play.mvc.Controller"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Methods inherited from class play.mvc.Controller</B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>await, await, await, await, await, await, badRequest, checkAuthenticity, error, error, error, error, flash, forbidden, forbidden, getActionAnnotation, getControllerAnnotation, getControllerClass, getControllerInheritedAnnotation, notFound, notFound, notFoundIfNull, notFoundIfNull, notModified, ok, parent, parent, parent, redirect, redirect, redirect, redirect, redirectToStatic, render, renderBinary, renderBinary, renderBinary, renderBinary, renderBinary, renderBinary, renderBinary, renderBinary, renderBinary, renderBinary, renderHtml, renderJSON, renderJSON, renderJSON, renderJSON, renderTemplate, renderTemplate, renderTemplate, renderText, renderText, renderXml, renderXml, renderXml, renderXml, reverse, suspend, suspend, template, template, templateExists, todo, unauthorized, unauthorized, waitFor</CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>

<!-- ========= CONSTRUCTOR DETAIL ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>

<A NAME="AuthFileSecurity()"><!-- --></A><H3>
AuthFileSecurity</H3>
<PRE>
public <B>AuthFileSecurity</B>()</PRE>
<DL>
</DL>

<!-- ============ METHOD DETAIL ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>

<A NAME="authentify(java.lang.String, java.lang.String)"><!-- --></A><H3>
authentify</H3>
<PRE>
public static boolean <B>authentify</B>(java.lang.String&nbsp;username,
                                 java.lang.String&nbsp;password)</PRE>
<DL>
<DD>Authentify an user against the given AuthFile.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>username</CODE> - the given username.<DD><CODE>password</CODE> - the given password.
<DT><B>Returns:</B><DD>true if username and password matches, otherwise false.</DL>
</DD>
</DL>
<HR>

<A NAME="check(java.lang.String)"><!-- --></A><H3>
check</H3>
<PRE>
public static boolean <B>check</B>(java.lang.String&nbsp;profile)</PRE>
<DL>
<DD>Checks if the current user (that is loged in) has the profile (e.g. is in the group).
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>profile</CODE> - 
<DT><B>Returns:</B><DD>true if the current user has the profile, otherwise false.</DL>
</DD>
</DL>
<!-- ========= END OF CLASS DATA ========= -->
<HR>


<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV CLASS&nbsp;
&nbsp;<A HREF="../controllers/Check.html" title="annotation in controllers"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../index.html?controllers/AuthFileSecurity.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="AuthFileSecurity.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_play.mvc.Controller">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->

<HR>

</BODY>
</HTML>
PK�����Ã…9D6ÇéG5��G5�����javadoc/controllers/Secure.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_26) on Sat Jan 25 16:46:07 CET 2014 -->
<TITLE>
Secure
</TITLE>

<META NAME="date" CONTENT="2014-01-25">

<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style">

<SCRIPT type="text/javascript">
function windowTitle()
{
    if (location.href.indexOf('is-external=true') == -1) {
        parent.document.title="Secure";
    }
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>

</HEAD>

<BODY BGCOLOR="white" onload="windowTitle();">
<HR>


<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../controllers/Check.html" title="annotation in controllers"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../controllers/Secure.Security.html" title="class in controllers"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../index.html?controllers/Secure.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="Secure.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_play.mvc.Controller">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->

<HR>
<!-- ======== START OF CLASS DATA ======== -->
<H2>
<FONT SIZE="-1">
controllers</FONT>
<BR>
Class Secure</H2>
<PRE>
java.lang.Object
  <IMG SRC="../resources/inherit.gif" ALT="extended by ">play.mvc.Controller
      <IMG SRC="../resources/inherit.gif" ALT="extended by "><B>controllers.Secure</B>
</PRE>
<DL>
<DT><B>All Implemented Interfaces:</B> <DD>play.classloading.enhancers.ControllersEnhancer.ControllerSupport, play.classloading.enhancers.LocalvariablesNamesEnhancer.LocalVariablesSupport</DD>
</DL>
<HR>
<DL>
<DT><PRE>public class <B>Secure</B><DT>extends play.mvc.Controller</DL>
</PRE>

<P>
<HR>

<P>
<!-- ======== NESTED CLASS SUMMARY ======== -->

<A NAME="nested_class_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Nested Class Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;class</CODE></FONT></TD>
<TD><CODE><B><A HREF="../controllers/Secure.Security.html" title="class in controllers">Secure.Security</A></B></CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
</TABLE>
&nbsp;<!-- =========== FIELD SUMMARY =========== -->

<A NAME="field_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Field Summary</B></FONT></TH>
</TR>
</TABLE>
&nbsp;<A NAME="fields_inherited_from_class_play.mvc.Controller"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Fields inherited from class play.mvc.Controller</B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>_currentReverse, flash, params, renderArgs, request, response, routeArgs, session, validation</CODE></TD>
</TR>
</TABLE>
&nbsp;
<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../controllers/Secure.html#Secure()">Secure</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../controllers/Secure.html#authenticate(java.lang.String, java.lang.String, boolean)">authenticate</A></B>(java.lang.String&nbsp;username,
             java.lang.String&nbsp;password,
             boolean&nbsp;remember)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../controllers/Secure.html#login()">login</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../controllers/Secure.html#logout()">logout</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_play.mvc.Controller"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Methods inherited from class play.mvc.Controller</B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>await, await, await, await, await, await, badRequest, checkAuthenticity, error, error, error, error, flash, forbidden, forbidden, getActionAnnotation, getControllerAnnotation, getControllerClass, getControllerInheritedAnnotation, notFound, notFound, notFoundIfNull, notFoundIfNull, notModified, ok, parent, parent, parent, redirect, redirect, redirect, redirect, redirectToStatic, render, renderBinary, renderBinary, renderBinary, renderBinary, renderBinary, renderBinary, renderBinary, renderBinary, renderBinary, renderBinary, renderHtml, renderJSON, renderJSON, renderJSON, renderJSON, renderTemplate, renderTemplate, renderTemplate, renderText, renderText, renderXml, renderXml, renderXml, renderXml, reverse, suspend, suspend, template, template, templateExists, todo, unauthorized, unauthorized, waitFor</CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>

<!-- ========= CONSTRUCTOR DETAIL ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>

<A NAME="Secure()"><!-- --></A><H3>
Secure</H3>
<PRE>
public <B>Secure</B>()</PRE>
<DL>
</DL>

<!-- ============ METHOD DETAIL ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>

<A NAME="login()"><!-- --></A><H3>
login</H3>
<PRE>
public static void <B>login</B>()
                  throws java.lang.Throwable</PRE>
<DL>
<DD><DL>

<DT><B>Throws:</B>
<DD><CODE>java.lang.Throwable</CODE></DL>
</DD>
</DL>
<HR>

<A NAME="authenticate(java.lang.String, java.lang.String, boolean)"><!-- --></A><H3>
authenticate</H3>
<PRE>
public static void <B>authenticate</B>(java.lang.String&nbsp;username,
                                java.lang.String&nbsp;password,
                                boolean&nbsp;remember)
                         throws java.lang.Throwable</PRE>
<DL>
<DD><DL>

<DT><B>Throws:</B>
<DD><CODE>java.lang.Throwable</CODE></DL>
</DD>
</DL>
<HR>

<A NAME="logout()"><!-- --></A><H3>
logout</H3>
<PRE>
public static void <B>logout</B>()
                   throws java.lang.Throwable</PRE>
<DL>
<DD><DL>

<DT><B>Throws:</B>
<DD><CODE>java.lang.Throwable</CODE></DL>
</DD>
</DL>
<!-- ========= END OF CLASS DATA ========= -->
<HR>


<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../controllers/Check.html" title="annotation in controllers"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../controllers/Secure.Security.html" title="class in controllers"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../index.html?controllers/Secure.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="Secure.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_play.mvc.Controller">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->

<HR>

</BODY>
</HTML>
PK�����Ä…9D&˜ÅGý��ý��(���javadoc/controllers/package-summary.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_26) on Sat Jan 25 16:46:08 CET 2014 -->
<TITLE>
controllers
</TITLE>

<META NAME="date" CONTENT="2014-01-25">

<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style">

<SCRIPT type="text/javascript">
function windowTitle()
{
    if (location.href.indexOf('is-external=true') == -1) {
        parent.document.title="controllers";
    }
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>

</HEAD>

<BODY BGCOLOR="white" onload="windowTitle();">
<HR>


<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV PACKAGE&nbsp;
&nbsp;<A HREF="../play/modules/fileauth/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../index.html?controllers/package-summary.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->

<HR>
<H2>
Package controllers
</H2>

<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Class Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="15%"><B><A HREF="../controllers/AuthFileSecurity.html" title="class in controllers">AuthFileSecurity</A></B></TD>
<TD>This Class provides basice Security Functions for the Play! Security Plugin.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="15%"><B><A HREF="../controllers/Secure.html" title="class in controllers">Secure</A></B></TD>
<TD>&nbsp;</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="15%"><B><A HREF="../controllers/Secure.Security.html" title="class in controllers">Secure.Security</A></B></TD>
<TD>&nbsp;</TD>
</TR>
</TABLE>
&nbsp;

<P>

<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Annotation Types Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="15%"><B><A HREF="../controllers/Check.html" title="annotation in controllers">Check</A></B></TD>
<TD>&nbsp;</TD>
</TR>
</TABLE>
&nbsp;

<P>
<DL>
</DL>
<HR>


<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV PACKAGE&nbsp;
&nbsp;<A HREF="../play/modules/fileauth/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../index.html?controllers/package-summary.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->

<HR>

</BODY>
</HTML>
PK�����Ä…9Dú.Ð^����&���javadoc/controllers/package-frame.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_26) on Sat Jan 25 16:46:08 CET 2014 -->
<TITLE>
controllers
</TITLE>

<META NAME="date" CONTENT="2014-01-25">

<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style">


</HEAD>

<BODY BGCOLOR="white">
<FONT size="+1" CLASS="FrameTitleFont">
<A HREF="../controllers/package-summary.html" target="classFrame">controllers</A></FONT>
<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
<TR>
<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
Classes</FONT>&nbsp;
<FONT CLASS="FrameItemFont">
<BR>
<A HREF="AuthFileSecurity.html" title="class in controllers" target="classFrame">AuthFileSecurity</A>
<BR>
<A HREF="Secure.html" title="class in controllers" target="classFrame">Secure</A>
<BR>
<A HREF="Secure.Security.html" title="class in controllers" target="classFrame">Secure.Security</A></FONT></TD>
</TR>
</TABLE>


<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
<TR>
<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
Annotation Types</FONT>&nbsp;
<FONT CLASS="FrameItemFont">
<BR>
<A HREF="Check.html" title="annotation in controllers" target="classFrame">Check</A></FONT></TD>
</TR>
</TABLE>


</BODY>
</HTML>
PK�����oˆC—5Kùõ��õ��%���app/controllers/AuthFileSecurity.java/**
 * AuthFileSecurity
 * 31.07.2012
 * @author Philipp Haussleiter
 *
 */
package controllers;

import java.util.Map;
import play.modules.fileauth.FileAuth;

/**
 * This Class provides basice Security Functions for the Play! Security Plugin.
 * @author Philipp Haußleiter
 * <p>
 * Usage:
 * @With(Secure.class)
 * public class Application extends Controller {
 * ...
 * }
 *
 * </p>
 */
public class AuthFileSecurity extends Secure.Security {

    /**
     * Authentify an user against the given AuthFile.
     * @param username the given username.
     * @param password the given password.
     * @return true if username and password matches, otherwise false.
     */
    public static boolean authentify(String username, String password) {
        Map<String,String> users = FileAuth.getUsers();
        String userPassword = users.get(username.toLowerCase());
        return userPassword.equals(password);
    }

    /**
     * Checks if the current user (that is loged in) has the profile (e.g. is in the group).
     * @param profile
     * @return true if the current user has the profile, otherwise false.
     */
    public static boolean check(String profile) {
        String user = connected();
        return FileAuth.contains(profile, user);
    }
}
PK�����oˆC&ÿ‰è¤��¤��!���documentation/manual/home.textileh1. {module name}

p(note). Write your module documentation in this file, possibly linking to other Textile files, and delete these notes when you are finished.

p(note). Start with a clear statement of what the module is and what it is for. Link to any third-party libraries that the module is based on.

p(note). Briefly describe why you might want to use this module in a Play application.

h2. Sample application

p(note). Your module should contain a sample app in the @sample@ directory that demonstrates the module. Describe how to run the demo here.

h2. Getting started

p(note). Describe any installation that is required, beyond adding and resolving the module dependency.

h2. Configuration

p(note). List any configuration options that the module uses, with an @h3.@ heading for each one.

h2. Usage

p(note). Explain how to use the module, and describe any routes, controllers, models or views that the module provides.

h2. Tags

p(note). List any tags the module provides, with an @h3.@ heading for each one. Include the tags’ arguments.

h2. Commands

p(note). List any commands the module provides, with an @h3.@ heading for each one. Include the commands’ options.
PK�����oˆC´šü¯��¯��:���samples-and-tests/auth-file-demo/public/images/favicon.png‰PNG

���
IHDR���������óÿa���tEXtSoftware�Adobe ImageReadyqÉe<��QIDATxÚ”SËNA=U]5]Ý=ï1agŒhf£+0ˆ‰Á †n\¹gãÒ¿p#ì4¢?`t¯	WFƒH$H$dŒ™Gw•·›o÷M×+çœ{O53Æàú�Œ^sÑIšéJáü½Bnà18­ÃC_­fÛG©8ˆk#7€h—BÈ,KÀMª±SçrÕMwav©^›i4v<‹	ü+"�ÎmJÛQea+¤Žed×§–¼zYßü2(¬cŒÐFp¡ìÓ`
Aƒ›ÈBåý¡5ÿÍܧ·™±¨"«€¤úeV(§æÐ<±!D‰.7³é®Ì.®×fÚ~Ë#šÃ�¶HUÊÍ84ÞÍ@<x™XWcê}}þÅ÷­oUÉåáHÛ)	åqMìûεVˆ©4…øðòÎÛ¹•úÒ-?ð#�±«@€ÕÇe<êGhíÁ—8ÙšêéÛO¶?Ó^æ]`4Ùh».<b$ߏè¶6­vùD/&‡oΧ¼´¿§€qeK?îE—å/fzš~Žt1^šX½\{äż´µ¶Ð·”wÒ„è}~_ûHû`~`ûzÿ•gÅô‰û´üúO‚ÀN¯T‰È1”²OöàjåRm¨xvšŽ=¥Ü9XZÀ¥ªXvœic£Au†r'Ê£«ãå’ë<¤#Ÿ;]å@:‰J`)úQ8ªÝ}[“ý£Ï‹™®Cr;ð˜“ëNå1Y©
Êå¡çk_7.üj5ïÒ¸Îÿ'0�Û¤û»ý
����IEND®B`‚PK�����oˆCä |;f�f�G���samples-and-tests/auth-file-demo/public/javascripts/jquery-1.6.4.min.js/*! jQuery v1.6.4 http://jquery.com/ | http://jquery.org/license */
(function(a,b){function cu(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cr(a){if(!cg[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ch||(ch=c.createElement("iframe"),ch.frameBorder=ch.width=ch.height=0),b.appendChild(ch);if(!ci||!ch.createElement)ci=(ch.contentWindow||ch.contentDocument).document,ci.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),ci.close();d=ci.createElement(a),ci.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ch)}cg[a]=e}return cg[a]}function cq(a,b){var c={};f.each(cm.concat.apply([],cm.slice(0,b)),function(){c[this]=a});return c}function cp(){cn=b}function co(){setTimeout(cp,0);return cn=f.now()}function cf(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ce(){try{return new a.XMLHttpRequest}catch(b){}}function b$(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function bZ(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function bY(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bA.test(a)?d(a,e):bY(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)bY(a+"["+e+"]",b[e],c,d);else d(a,b)}function bX(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function bW(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bP,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=bW(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=bW(a,c,d,e,"*",g));return l}function bV(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bL),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function by(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bt:bu;if(d>0){c!=="border"&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0});return d+"px"}d=bv(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+this))||0)});return d+"px"}function bl(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bd,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bk(a){f.nodeName(a,"input")?bj(a):"getElementsByTagName"in a&&f.grep(a.getElementsByTagName("input"),bj)}function bj(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bi(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function bh(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bg(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;e=e[c]=f.extend({},d);if(g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;i<j;i++)f.event.add(b,h+(g[h][i].namespace?".":"")+g[h][i].namespace,g[h][i],g[h][i].data)}}}}function bf(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function V(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(Q.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function U(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function M(a,b){return(a&&a!=="*"?a+".":"")+b.replace(y,"`").replace(z,"&")}function L(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;i<s.length;i++)g=s[i],g.origType.replace(w,"")===a.type?q.push(g.selector):s.splice(i--,1);e=f(a.target).closest(q,a.currentTarget);for(j=0,k=e.length;j<k;j++){m=e[j];for(i=0;i<s.length;i++){g=s[i];if(m.selector===g.selector&&(!n||n.test(g.namespace))&&!m.elem.disabled){h=m.elem,d=null;if(g.preType==="mouseenter"||g.preType==="mouseleave")a.type=g.preType,d=f(a.relatedTarget).closest(g.selector)[0],d&&f.contains(h,d)&&(d=h);(!d||d!==h)&&p.push({elem:h,handleObj:g,level:m.level})}}}for(j=0,k=p.length;j<k;j++){e=p[j];if(c&&e.level>c)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function J(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function D(){return!0}function C(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function K(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(K,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=/-([a-z]|[0-9])/ig,x=/^-ms-/,y=function(a,b){return(b+"").toUpperCase()},z=d.userAgent,A,B,C,D=Object.prototype.toString,E=Object.prototype.hasOwnProperty,F=Array.prototype.push,G=Array.prototype.slice,H=String.prototype.trim,I=Array.prototype.indexOf,J={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6.4",length:0,size:function(){return this.length},toArray:function(){return G.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?F.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),B.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(G.apply(this,arguments),"slice",G.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:F,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;B.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!B){B=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",C,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",C),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&K()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):J[D.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!E.call(a,"constructor")&&!E.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||E.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(x,"ms-").replace(w,y)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:H?function(a){return a==null?"":H.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?F.call(c,a):e.merge(c,a)}return c},inArray:function(a,b){if(!b)return-1;if(I)return I.call(b,a);for(var c=0,d=b.length;c<d;c++)if(b[c]===a)return c;return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=G.call(arguments,2),g=function(){return a.apply(c,f.concat(G.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=s.exec(a)||t.exec(a)||u.exec(a)||a.indexOf("compatible")<0&&v.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){J["[object "+b+"]"]=b.toLowerCase()}),A=e.uaMatch(z),A.browser&&(e.browser[A.browser]=!0,e.browser.version=A.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?C=function(){c.removeEventListener("DOMContentLoaded",C,!1),e.ready()}:c.attachEvent&&(C=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",C),e.ready())});return e}(),g="done fail isResolved isRejected promise then always pipe".split(" "),h=[].slice;f.extend({_Deferred:function(){var a=[],b,c,d,e={done:function(){if(!d){var c=arguments,g,h,i,j,k;b&&(k=b,b=0);for(g=0,h=c.length;g<h;g++)i=c[g],j=f.type(i),j==="array"?e.done.apply(e,i):j==="function"&&a.push(i);k&&e.resolveWith(k[0],k[1])}return this},resolveWith:function(e,f){if(!d&&!b&&!c){f=f||[],c=1;try{while(a[0])a.shift().apply(e,f)}finally{b=[e,f],c=0}}return this},resolve:function(){e.resolveWith(this,arguments);return this},isResolved:function(){return!!c||!!b},cancel:function(){d=1,a=[];return this}};return e},Deferred:function(a){var b=f._Deferred(),c=f._Deferred(),d;f.extend(b,{then:function(a,c){b.done(a).fail(c);return this},always:function(){return b.done.apply(b,arguments).fail.apply(this,arguments)},fail:c.done,rejectWith:c.resolveWith,reject:c.resolve,isRejected:c.isResolved,pipe:function(a,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[c,"reject"]},function(a,c){var e=c[0],g=c[1],h;f.isFunction(e)?b[a](function(){h=e.apply(this,arguments),h&&f.isFunction(h.promise)?h.promise().then(d.resolve,d.reject):d[g+"With"](this===b?d:this,[h])}):b[a](d[g])})}).promise()},promise:function(a){if(a==null){if(d)return d;d=a={}}var c=g.length;while(c--)a[g[c]]=b[g[c]];return a}}),b.done(c.cancel).fail(b.cancel),delete b.cancel,a&&a.call(b,b);return b},when:function(a){function i(a){return function(c){b[a]=arguments.length>1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c<d;c++)b[c]&&f.isFunction(b[c].promise)?b[c].promise().then(i(c),g.reject):--e;e||g.resolveWith(g,b)}else g!==a&&g.resolveWith(g,d?[a]:[]);return g.promise()}}),f.support=function(){var a=c.createElement("div"),b=c.documentElement,d,e,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;a.setAttribute("className","t"),a.innerHTML="   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55$/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue=i.value==="t",i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.firstChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},m&&f.extend(p,{position:"absolute",left:"-1000px",top:"-1000px"});for(t in p)o.style[t]=p[t];o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,k.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="<div style='width:4px;'></div>",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",q=a.getElementsByTagName("td"),u=q[0].offsetHeight===0,q[0].style.display="",q[1].style.display="none",k.reliableHiddenOffsets=u&&q[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",a.appendChild(j),k.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0),o.innerHTML="",n.removeChild(o);if(a.attachEvent)for(t in{submit:1,change:1,focusin:1})s="on"+t,u=s in a,u||(a.setAttribute(s,"return;"),u=typeof a[s]=="function"),k[t+"Bubbles"]=u;o=l=g=h=m=j=a=i=null;return k}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i=f.expando,j=typeof c=="string",k=a.nodeType,l=k?f.cache:a,m=k?a[f.expando]:a[f.expando]&&f.expando;if((!m||e&&m&&l[m]&&!l[m][i])&&j&&d===b)return;m||(k?a[f.expando]=m=++f.uuid:m=f.expando),l[m]||(l[m]={},k||(l[m].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?l[m][i]=f.extend(l[m][i],c):l[m]=f.extend(l[m],c);g=l[m],e&&(g[i]||(g[i]={}),g=g[i]),d!==b&&(g[f.camelCase(c)]=d);if(c==="events"&&!g[c])return g[i]&&g[i].events;j?(h=g[c],h==null&&(h=g[f.camelCase(c)])):h=g;return h}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e=f.expando,g=a.nodeType,h=g?f.cache:a,i=g?a[f.expando]:f.expando;if(!h[i])return;if(b){d=c?h[i][e]:h[i];if(d){d[b]||(b=f.camelCase(b)),delete d[b];if(!l(d))return}}if(c){delete h[i][e];if(!l(h[i]))return}var j=h[i][e];f.support.deleteExpando||!h.setInterval?delete h[i]:h[i]=null,j?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=j):g&&(f.support.deleteExpando?delete a[f.expando]:a.removeAttribute?a.removeAttribute(f.expando):a[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h<i;h++)g=e[h].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),k(this[0],g,d[g]))}}return d}if(typeof a=="object")return this.each(function(){f.data(this,a)});var j=a.split(".");j[1]=j[1]?"."+j[1]:"";if(c===b){d=this.triggerHandler("getData"+j[1]+"!",[j[0]]),d===b&&this.length&&(d=f.data(this[0],a),d=k(this[0],a,d));return d===b&&j[1]?this.data(j[0]):d}return this.each(function(){var b=f(this),d=[j[0],c];b.triggerHandler("setData"+j[1]+"!",d),f.data(this,a,c),b.triggerHandler("changeData"+j[1]+"!",d)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,c){a&&(c=(c||"fx")+"mark",f.data(a,c,(f.data(a,c,b,!0)||0)+1,!0))},_unmark:function(a,c,d){a!==!0&&(d=c,c=a,a=!1);if(c){d=d||"fx";var e=d+"mark",g=a?0:(f.data(c,e,b,!0)||1)-1;g?f.data(c,e,g,!0):(f.removeData(c,e,!0),m(c,d,"mark"))}},queue:function(a,c,d){if(a){c=(c||"fx")+"queue";var e=f.data(a,c,b,!0);d&&(!e||f.isArray(d)?e=f.data(a,c,f.makeArray(d),!0):e.push(d));return e||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e;d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),d.call(a,function(){f.dequeue(a,b)})),c.length||(f.removeData(a,b+"queue",!0),m(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(){var c=this;setTimeout(function(){f.dequeue(c,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f._Deferred(),!0))h++,l.done(m);m();return d.promise()}});var n=/[\n\t\r]/g,o=/\s+/,p=/\r/g,q=/^(?:button|input)$/i,r=/^(?:button|input|object|select|textarea)$/i,s=/^a(?:rea)?$/i,t=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,u,v;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(o);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(o);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(n," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(o);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ";for(var c=0,d=this.length;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(n," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;d=e.value;return typeof d=="string"?d.replace(p,""):d==null?"":d}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c=a.selectedIndex,d=[],e=a.options,g=a.type==="select-one";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h<i;h++){var j=e[h];if(j.selected&&(f.support.optDisabled?!j.disabled:j.getAttribute("disabled")===null)&&(!j.parentNode.disabled||!f.nodeName(j.parentNode,"optgroup"))){b=f(j).val();if(g)return b;d.push(b)}}if(g&&!d.length&&e.length)return f(e[c]).val();return d},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);j&&(c=f.attrFix[c]||c,i=f.attrHooks[c],i||(t.test(c)?i=v:u&&(i=u)));if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j&&(h=i.get(a,c))!==null)return h;h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.attr(a,b,""),a.removeAttribute(b),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(u&&f.nodeName(a,"button"))return u.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(u&&f.nodeName(a,"button"))return u.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);i&&(c=f.propFix[c]||c,h=f.propHooks[c]);return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==null?g:a[c]},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabIndex=f.propHooks.tabIndex,v={get:function(a,c){var d;return f.prop(a,c)===!0||(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},f.support.getSetAttribute||(u=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==""?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var w=/\.(.*)$/,x=/^(?:textarea|input|select)$/i,y=/\./g,z=/ /g,A=/[^\w\s.|`]/g,B=function(a){return a.replace(A,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=C;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=C);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),B).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j<p.length;j++){q=p[j];if(l||n.test(q.namespace))f.event.remove(a,r,q.handler,j),p.splice(j--,1)}continue}o=f.event.special[h]||{};for(j=e||0;j<p.length;j++){q=p[j];if(d.guid===q.guid){if(l||n.test(q.namespace))e==null&&p.splice(j--,1),o.remove&&o.remove.call(a,q);if(e!=null)break}}if(p.length===0||e!=null&&p.length===1)(!o.teardown||o.teardown.call(a,m)===!1)&&f.removeEvent(a,h,s.handle),g=null,delete 
t[h]}if(f.isEmptyObject(t)){var u=s.handle;u&&(u.elem=null),delete s.events,delete s.handle,f.isEmptyObject(s)&&f.removeData(a,b,!0)}}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){var h=c.type||c,i=[],j;h.indexOf("!")>=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d!=null?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h<i;h++){var j=d[h];if(e||c.namespace_re.test(j.namespace)){c.handler=j.handler,c.data=j.data,c.handleObj=j;var k=j.handler.apply(this,g);k!==b&&(c.result=k,k===!1&&(c.preventDefault(),c.stopPropagation()));if(c.isImmediatePropagationStopped())break}}return c.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(a){if(a[f.expando])return a;var d=a;a=f.Event(d);for(var e=this.props.length,g;e;)g=this.props[--e],a[g]=d[g];a.target||(a.target=a.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),!a.relatedTarget&&a.fromElement&&(a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement);if(a.pageX==null&&a.clientX!=null){var h=a.target.ownerDocument||c,i=h.documentElement,j=h.body;a.pageX=a.clientX+(i&&i.scrollLeft||j&&j.scrollLeft||0)-(i&&i.clientLeft||j&&j.clientLeft||0),a.pageY=a.clientY+(i&&i.scrollTop||j&&j.scrollTop||0)-(i&&i.clientTop||j&&j.clientTop||0)}a.which==null&&(a.charCode!=null||a.keyCode!=null)&&(a.which=a.charCode!=null?a.charCode:a.keyCode),!a.metaKey&&a.ctrlKey&&(a.metaKey=a.ctrlKey),!a.which&&a.button!==b&&(a.which=a.button&1?1:a.button&2?3:a.button&4?2:0);return a},guid:1e8,proxy:f.proxy,special:{ready:{setup:f.bindReady,teardown:f.noop},live:{add:function(a){f.event.add(this,M(a.origType,a.selector),f.extend({},a,{handler:L,guid:a.handler.guid}))},remove:function(a){f.event.remove(this,M(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}}},f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!this.preventDefault)return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?D:C):this.type=a,b&&f.extend(this,b),this.timeStamp=f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=D;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=D;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=D,this.stopPropagation()},isDefaultPrevented:C,isPropagationStopped:C,isImmediatePropagationStopped:C};var E=function(a){var b=a.relatedTarget,c=!1,d=a.type;a.type=a.data,b!==this&&(b&&(c=f.contains(this,b)),c||(f.event.handle.apply(this,arguments),a.type=d))},F=function(a){a.type=a.data,f.event.handle.apply(this,arguments)};f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={setup:function(c){f.event.add(this,b,c&&c.selector?F:E,a)},teardown:function(a){f.event.remove(this,b,a&&a.selector?F:E)}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(a,b){if(!f.nodeName(this,"form"))f.event.add(this,"click.specialSubmit",function(a){var b=a.target,c=f.nodeName(b,"input")||f.nodeName(b,"button")?b.type:"";(c==="submit"||c==="image")&&f(b).closest("form").length&&J("submit",this,arguments)}),f.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,c=f.nodeName(b,"input")||f.nodeName(b,"button")?b.type:"";(c==="text"||c==="password")&&f(b).closest("form").length&&a.keyCode===13&&J("submit",this,arguments)});else return!1},teardown:function(a){f.event.remove(this,".specialSubmit")}});if(!f.support.changeBubbles){var G,H=function(a){var b=f.nodeName(a,"input")?a.type:"",c=a.value;b==="radio"||b==="checkbox"?c=a.checked:b==="select-multiple"?c=a.selectedIndex>-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},I=function(c){var d=c.target,e,g;if(!!x.test(d.nodeName)&&!d.readOnly){e=f._data(d,"_change_data"),g=H(d),(c.type!=="focusout"||d.type!=="radio")&&f._data(d,"_change_data",g);if(e===b||g===e)return;if(e!=null||g)c.type="change",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:I,beforedeactivate:I,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&I.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&I.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",H(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in G)f.event.add(this,c+".specialChange",G[c]);return x.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return x.test(this.nodeName)}},G=f.event.special.change.filters,G.focus=G.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i<j;i++)f.event.add(this[i],a,g,d);return this}}),f.fn.extend({unbind:function(a,b){if(typeof a=="object"&&!a.preventDefault)for(var c in a)this.unbind(c,a[c]);else for(var d=0,e=this.length;d<e;d++)f.event.remove(this[d],a,b);return this},delegate:function(a,b,c,d){return this.live(b,c,d,a)},undelegate:function(a,b,c){return arguments.length===0?this.unbind("live"):this.die(b,null,c,a)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f.data(this,"lastToggle"+a.guid)||0)%d;f.data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var K={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};f.each(["live","die"],function(a,c){f.fn[c]=function(a,d,e,g){var h,i=0,j,k,l,m=g||this.selector,n=g?this:f(this.context);if(typeof a=="object"&&!a.preventDefault){for(var o in a)n[c](o,d,a[o],m);return this}if(c==="die"&&!a&&g&&g.charAt(0)==="."){n.unbind(g);return this}if(d===!1||f.isFunction(d))e=d||C,d=b;a=(a||"").split(" ");while((h=a[i++])!=null){j=w.exec(h),k="",j&&(k=j[0],h=h.replace(w,""));if(h==="hover"){a.push("mouseenter"+k,"mouseleave"+k);continue}l=h,K[h]?(a.push(K[h]+k),h=h+k):h=(K[h]||h)+k;if(c==="live")for(var p=0,q=n.length;p<q;p++)f.event.add(n[p],"live."+M(h,m),{data:d,selector:m,handler:e,origType:h,origHandler:e,preType:l});else n.unbind("live."+M(h,m),e)}return this}}),f.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".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}if(i.nodeType===1){f||(i.sizcache=c,i.sizset=g);if(typeof b!="string"){if(i===b){j=!0;break}}else if(k.filter(b,[i]).length>0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}i.nodeType===1&&!f&&(i.sizcache=c,i.sizset=g);if(i.nodeName.toLowerCase()===b){j=i;break}i=i[a]}d[g]=j}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},k.matches=function(a,b){return k(a,null,null,b)},k.matchesSelector=function(a,b){return k(b,null,null,[a]).length>0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e<f;e++){var g,h=l.order[e];if(g=l.leftMatch[h].exec(a)){var j=g[1];g.splice(1,1);if(j.substr(j.length-1)!=="\\"){g[1]=(g[1]||"").replace(i,""),d=l.find[h](g,b,c);if(d!=null){a=a.replace(l.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},k.filter=function(a,c,d,e){var f,g,h=a,i=[],j=c,m=c&&c[0]&&k.isXML(c[0]);while(a&&c.length){for(var n in l.filter)if((f=l.leftMatch[n].exec(a))!=null&&f[2]){var o,p,q=l.filter[n],r=f[1];g=!1,f.splice(1,1);if(r.substr(r.length-1)==="\\")continue;j===i&&(i=[]);if(l.preFilter[n]){f=l.preFilter[n](f,j,d,i,e,m);if(!f)g=o=!0;else if(f===!0)continue}if(f)for(var s=0;(p=j[s])!=null;s++)if(p){o=q(p,f,s,j);var t=e^!!o;d&&o!=null?t?g=!0:j[s]=!1:t&&(i.push(p),g=!0)}if(o!==b){d||(j=i),a=a.replace(l.match[n],"");if(!g)return[];break}}if(a===h)if(g==null)k.error(a);else break;h=a}return j},k.error=function(a){throw"Syntax error, unrecognized expression: "+a};var l=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!j.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&k.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&k.filter(b,a,!0)}},"":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("parentNode",b,f,a,e,c)},"~":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("previousSibling",b,f,a,e,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(i,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}k.error(e)},CHILD:function(a,b){var c=b[1],d=a;switch(c){case"only":case"first":while(d=d.previousSibling)if(d.nodeType===1)return!1;if(c==="first")return!0;d=a;case"last":while(d=d.nextSibling)if(d.nodeType===1)return!1;return!0;case"nth":var e=b[2],f=b[3];if(e===1&&f===0)return!0;var g=b[0],h=a.parentNode;if(h&&(h.sizcache!==g||!a.nodeIndex)){var i=0;for(d=h.firstChild;d;d=d.nextSibling)d.nodeType===1&&(d.nodeIndex=++i);h.sizcache=g}var j=a.nodeIndex-f;return e===0?j===0:j%e===0&&j/e>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c<f;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var r,s;c.documentElement.compareDocumentPosition?r=function(a,b){if(a===b){g=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(r=function(a,b){if(a===b){g=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],h=a.parentNode,i=b.parentNode,j=h;if(h===i)return s(a,b);if(!h)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return s(e[k],f[k]);return k===c?s(a,f[k],-1):s(e[k],b,1)},s=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),k.getText=function(a){var b="",c;for(var d=0;a[d];d++)c=a[d],c.nodeType===3||c.nodeType===4?b+=c.nodeValue:c.nodeType!==8&&(b+=k.getText(c.childNodes));return b},function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g<h;g++)k(a,f[g],d);return k.filter(e,d)};f.find=k,f.expr=k.selectors,f.expr[":"]=f.expr.filters,f.unique=k.uniqueSort,f.text=k.getText,f.isXMLDoc=k.isXML,f.contains=k.contains}();var N=/Until$/,O=/^(?:parents|prevUntil|prevAll)/,P=/,/,Q=/^.[^:#\[\.,]*$/,R=Array.prototype.slice,S=f.expr.match.POS,T={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(V(this,a,!1),"not",a)},filter:function(a){return this.pushStack(V(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d<e;d++)i=a[d],j[i]||(j[i]=S.test(i)?f(i,b||this.context):i);while(g&&g.ownerDocument&&g!==b){for(i in j)h=j[i],(h.jquery?h.index(g)>-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=S.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(l?l.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(U(c[0])||U(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=R.call(arguments);N.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!T[a]?f.unique(e):e,(this.length>1||P.test(d))&&O.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|object|embed|option|style)/i,bb=/checked\s*(?:[^=]|=\s*.checked.)/i,bc=/\/(java|ecma)script/i,bd=/^\s*<!(?:\[CDATA\[|\-\-)/,be={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};be.optgroup=be.option,be.tbody=be.tfoot=be.colgroup=be.caption=be.thead,be.th=be.td,f.support.htmlSerialize||(be._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!be[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bb.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bf(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bl)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i;b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof a[0]=="string"&&a[0].length<512&&i===c&&a[0].charAt(0)==="<"&&!ba.test(a[0])&&(f.support.checkClone||!bb.test(a[0]))&&(g=!0,h=f.fragments[a[0]],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean
(a,i,e,d)),g&&(f.fragments[a[0]]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bh(a,d),e=bi(a),g=bi(d);for(h=0;e[h];++h)g[h]&&bh(e[h],g[h])}if(b){bg(a,d);if(c){e=bi(a),g=bi(d);for(h=0;e[h];++h)bg(e[h],g[h])}}e=g=null;return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=be[l]||be._default,n=m[0],o=b.createElement("div");o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bk(k[i]);else bk(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||bc.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.expando,g=f.event.special,h=f.support.deleteExpando;for(var i=0,j;(j=a[i])!=null;i++){if(j.nodeName&&f.noData[j.nodeName.toLowerCase()])continue;c=j[f.expando];if(c){b=d[c]&&d[c][e];if(b&&b.events){for(var k in b.events)g[k]?f.event.remove(j,k):f.removeEvent(j,k,b.handle);b.handle&&(b.handle.elem=null)}h?delete j[f.expando]:j.removeAttribute&&j.removeAttribute(f.expando),delete d[c]}}}});var bm=/alpha\([^)]*\)/i,bn=/opacity=([^)]*)/,bo=/([A-Z]|^ms)/g,bp=/^-?\d+(?:px)?$/i,bq=/^-?\d/,br=/^([\-+])=([\-+.\de]+)/,bs={position:"absolute",visibility:"hidden",display:"block"},bt=["Left","Right"],bu=["Top","Bottom"],bv,bw,bx;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bv(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=br.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bv)return bv(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return by(a,b,d);f.swap(a,bs,function(){e=by(a,b,d)});return e}},set:function(a,b){if(!bp.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bn.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bm,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bm.test(g)?g.replace(bm,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bv(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bw=function(a,c){var d,e,g;c=c.replace(bo,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bx=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bp.test(d)&&bq.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bv=bw||bx,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bz=/%20/g,bA=/\[\]$/,bB=/\r?\n/g,bC=/#.*$/,bD=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bE=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bF=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bG=/^(?:GET|HEAD)$/,bH=/^\/\//,bI=/\?/,bJ=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bK=/^(?:select|textarea)/i,bL=/\s+/,bM=/([?&])_=[^&]*/,bN=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bO=f.fn.load,bP={},bQ={},bR,bS,bT=["*/"]+["*"];try{bR=e.href}catch(bU){bR=c.createElement("a"),bR.href="",bR=bR.href}bS=bN.exec(bR.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bO)return bO.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bJ,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bK.test(this.nodeName)||bE.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bB,"\r\n")}}):{name:b.name,value:c.replace(bB,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?bX(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),bX(a,b);return a},ajaxSettings:{url:bR,isLocal:bF.test(bS[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bT},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bV(bP),ajaxTransport:bV(bQ),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?bZ(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=b$(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bD.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bC,"").replace(bH,bS[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bL),d.crossDomain==null&&(r=bN.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bS[1]&&r[2]==bS[2]&&(r[3]||(r[1]==="http:"?80:443))==(bS[3]||(bS[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bW(bP,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bG.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bI.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bM,"$1_="+x);d.url=y+(y===d.url?(bI.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bT+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bW(bQ,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){s<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)bY(g,a[g],c,e);return d.join("&").replace(bz,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var b_=f.now(),ca=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+b_++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ca.test(b.url)||e&&ca.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ca,l),b.url===j&&(e&&(k=k.replace(ca,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cb=a.ActiveXObject?function(){for(var a in cd)cd[a](0,1)}:!1,cc=0,cd;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ce()||cf()}:ce,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cb&&delete cd[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cc,cb&&(cd||(cd={},f(a).unload(cb)),cd[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cg={},ch,ci,cj=/^(?:toggle|show|hide)$/,ck=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cl,cm=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cn;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cq("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cr(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cq("hide",3),a,b,c);for(var d=0,e=this.length;d<e;d++)if(this[d].style){var g=f.css(this[d],"display");g!=="none"&&!f._data(this[d],"olddisplay")&&f._data(this[d],"olddisplay",g)}for(d=0;d<e;d++)this[d].style&&(this[d].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cq("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return this[e.queue===!1?"each":"queue"](function(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(f.support.inlineBlockNeedsLayout?(j=cr(this.nodeName),j==="inline"?this.style.display="inline-block":(this.style.display="inline",this.style.zoom=1)):this.style.display="inline-block"))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)k=new f.fx(this,b,i),h=a[i],cj.test(h)?k[h==="toggle"?d?"show":"hide":h]():(l=ck.exec(h),m=k.cur(),l?(n=parseFloat(l[2]),o=l[3]||(f.cssNumber[i]?"":"px"),o!=="px"&&(f.style(this,i,(n||1)+o),m=(n||1)/k.cur()*m,f.style(this,i,m+o)),l[1]&&(n=(l[1]==="-="?-1:1)*n+m),k.custom(m,n,o)):k.custom(m,h,""));return!0})},stop:function(a,b){a&&this.queue([]),this.each(function(){var a=f.timers,c=a.length;b||f._unmark(!0,this);while(c--)a[c].elem===this&&(b&&a[c](!0),a.splice(c,1))}),b||this.dequeue();return this}}),f.each({slideDown:cq("show",1),slideUp:cq("hide",1),slideToggle:cq("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default,d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue!==!1?f.dequeue(this):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,b,c){function g(a){return d.step(a)}var d=this,e=f.fx;this.startTime=cn||co(),this.start=a,this.end=b,this.unit=c||this.unit||(f.cssNumber[this.prop]?"":"px"),this.now=this.start,this.pos=this.state=0,g.elem=this.elem,g()&&f.timers.push(g)&&!cl&&(cl=setInterval(e.tick,e.interval))},show:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.show=!0,this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b=cn||co(),c=!0,d=this.elem,e=this.options,g,h;if(a||b>=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){for(var a=f.timers,b=0;b<a.length;++b)a[b]()||a.splice(b--,1);a.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cl),cl=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit:a.elem[a.prop]=a.now}}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cs=/^t(?:able|d|h)$/i,ct=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cu(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);f.offset.initialize();var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.offset.supportsFixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.offset.doesNotAddBorder&&(!f.offset.doesAddBorderForTableAndCells||!cs.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.offset.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.offset.supportsFixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={initialize:function(){var a=c.body,b=c.createElement("div"),d,e,g,h,i=parseFloat(f.css(a,"marginTop"))||0,j="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=ct.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!ct.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cu(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cu(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a&&a.style?parseFloat(f.css(a,d,"padding")):null},f.fn["outer"+c]=function(a){var b=this[0];return b&&b.style?parseFloat(f.css(b,d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNaN(j)?i:j}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window);PK�����oˆC������������<���samples-and-tests/auth-file-demo/public/stylesheets/main.cssPK�����oˆC_5¢<���<���.���samples-and-tests/auth-file-demo/test/htgroupsroot: root apacheRoot
users: root apacheRoot user apacheUserPK�����oˆC(ÉÆ9����9���samples-and-tests/auth-file-demo/test/EncryptionTest.java
import org.junit.Test;
import play.Logger;
import play.modules.fileauth.utils.MD5Crypt;
import play.test.UnitTest;

/**
 * EncryptionTest
 * 31.07.2012
 * @author Philipp Haussleiter
 *
 */
public class EncryptionTest extends UnitTest {

    @Test
    public void testApacheCrypt() {
        Logger.info("testing APACHE_CRYPT");
        String clear = "pw_" + System.currentTimeMillis();
        String pass;
        String salt = "abcd1234";
        pass = MD5Crypt.apacheCrypt(clear);
        Logger.info(clear + " got me " + pass);
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
        pass = MD5Crypt.apacheCrypt(clear, salt);
        Logger.info(clear + " & salt " + salt + " got me " + pass);
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
    }

    @Test
    public void testCrypt() {
        Logger.info("testing CRYPT");
        String clear = "pw_" + System.currentTimeMillis();
        String pass;
        String salt = "abcd1234";
        pass = MD5Crypt.crypt(clear);
        Logger.info(clear + " got me " + pass);
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
        pass = MD5Crypt.crypt(clear, salt);
        Logger.info(clear + " & salt " + salt + " got me " + pass);
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
    }
}
PK�����S•C*˜,-I��I��:���samples-and-tests/auth-file-demo/test/ApacheUsersTest.java
import java.util.HashMap;
import java.util.Map;
import org.junit.BeforeClass;
import org.junit.Test;
import play.Play;
import play.cache.Cache;
import play.modules.fileauth.FileAuth;
import play.modules.fileauth.utils.MD5Crypt;
import play.test.UnitTest;

/**
 * ApacheUsersTest
 * 03.08.2012
 * @author Philipp Haussleiter
 *
 */
public class ApacheUsersTest extends UnitTest {

    @BeforeClass
    public static void setup() {
        Play.configuration.setProperty("authfile.users.path", Play.applicationPath + "/test/htusers");
        Play.configuration.setProperty("authfile.users.delimeter", ":");
        Cache.safeDelete(FileAuth.AUTH_FILE_USERS_CACHE_KEY);
        FileAuth.scanUsers();
    }

    @Test
    public void testUsersRead() {
        Map<String, String> users = Cache.get(FileAuth.AUTH_FILE_USERS_CACHE_KEY, HashMap.class);
        assertNotNull(users);
    }

    @Test
    public void testUsersValidate() {
        String clear = "user";
        String pass = MD5Crypt.crypt("user");
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
    }

    @Test
    public void testValidatePassword() {
        String pass = "user";
        String user = "user";
        assertTrue(FileAuth.validate(user, pass));
        user = "apacheUser";
        assertTrue(FileAuth.validate(user, pass));
        user = "user";
        pass = "user123";
        assertFalse(FileAuth.validate(user, pass));
    }

    @Test
    public void testValidateNotExistingUser() {
        String pass = "user123";
        String user = "user123";
        assertFalse(FileAuth.validate(user, pass));
    }
}
PK�����oˆCÄžŒÒù��ù��:���samples-and-tests/auth-file-demo/test/GroupGroupsTest.java
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.junit.BeforeClass;
import org.junit.Test;
import play.Play;
import play.cache.Cache;
import play.modules.fileauth.FileAuth;
import play.test.UnitTest;

/**
 * GroupGroupsTest
 * 04.08.2012
 * @author Philipp Haussleiter
 *
 */
public class GroupGroupsTest extends UnitTest {

    @BeforeClass
    public static void setup() {
        Play.configuration.setProperty("authfile.groups.path", Play.applicationPath + "/test/group");
        Play.configuration.setProperty("authfile.users.delimeter", ":");
        Play.configuration.setProperty("authfile.groups.delimeter", ",");
        Cache.safeDelete(FileAuth.AUTH_FILE_GROUPS_CACHE_KEY);
    }

    @Test
    public void testUsersRead() {
        FileAuth.scanGroups();
        Map<String, Set<String>> groups = Cache.get(FileAuth.AUTH_FILE_GROUPS_CACHE_KEY, HashMap.class);
        assertNotNull(groups);
    }

    @Test
    public void testGroupContainsUser() {
        String user = "user";
        String group = "users";
        assertTrue(FileAuth.contains(group, user));
        user = "root";
        assertTrue(FileAuth.contains(group, user));
    }

    @Test
    public void testGroupNotContainsUser() {
        String user = "user";
        String group = "root";
        assertFalse(FileAuth.contains(group, user));
    }

    public void testGroupNotExists() {
        String user = "user";
        String group = "user";
        assertFalse(FileAuth.contains(group, user));
    }
}PK�����S•C?5'³g��g��:���samples-and-tests/auth-file-demo/test/ShadowUsersTest.java
import java.util.HashMap;
import java.util.Map;
import org.junit.BeforeClass;
import org.junit.Test;
import play.Logger;
import play.Play;
import play.cache.Cache;
import play.modules.fileauth.FileAuth;
import play.modules.fileauth.utils.MD5Crypt;
import play.test.UnitTest;


/**
 * ShadowUsersTest
 * 04.08.2012
 * @author Philipp Haussleiter
 *
 */
public class ShadowUsersTest extends UnitTest {

    @BeforeClass
    public static void setup() {
        Play.configuration.setProperty("authfile.users.path", Play.applicationPath + "/test/shadow");
        Logger.info("file path: "+Play.configuration.getProperty("authfile.users.path"));
        Play.configuration.setProperty("authfile.users.delimeter", ":");
        Cache.safeDelete(FileAuth.AUTH_FILE_USERS_CACHE_KEY);
    }

    @Test
    public void testUsersRead() {
        FileAuth.scanUsers();
        Map<String, String> users = Cache.get(FileAuth.AUTH_FILE_USERS_CACHE_KEY, HashMap.class);
        assertNotNull(users);
    }

    @Test
    public void testUsersValidate() {
        String clear = "user";
        String pass = MD5Crypt.crypt("user");
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
    }

    @Test
    public void testValidatePassword() {
        String pass = "user";
        String user = "user";
        assertTrue(FileAuth.validate(user, pass));
        user = "user";
        pass = "user123";
        assertFalse(FileAuth.validate(user, pass));
    }

    @Test
    public void testValidateNotExistingUser() {
        String pass = "user123";
        String user = "user123";
        assertFalse(FileAuth.validate(user, pass));
    }
}
PK�����oˆCTâÒ%���%���+���samples-and-tests/auth-file-demo/test/grouproot:x:321:root
users:x:123:root,userPK�����oˆCcé¸���¸���.���samples-and-tests/auth-file-demo/test/data.yml# you describe your data using the YAML notation here
# and then load them using Fixtures.load("data.yml")

# User(bob):
#   email: bob@gmail.com
#   password: secret
#   fullname: BobPK�����oˆC<_'²���²���-���samples-and-tests/auth-file-demo/test/htusersapacheUser:$apr1$kuwPretH$BPbVoWoDTEFUw.4g1zDKs1
apacheRoot:$apr1$nVmU2aOS$rDZ4.BG3TPT02YBsCVcSG/
root:$1$imw51D2V$aJbVmk2xlEg8q.Y8nh91E.
user:$1$4aMItwK9$PnpH2GeuHDeR2t.jKhQ771
PK�����oˆCÇÀ���À���4���samples-and-tests/auth-file-demo/test/BasicTest.javaimport org.junit.*;
import play.test.*;

public class BasicTest extends UnitTest {

    @Test
    public void aVeryImportantThingToTest() {
        assertEquals(2, 1 + 1);
    }

}
PK�����oˆC‰=u���u���,���samples-and-tests/auth-file-demo/test/shadowroot:$1$imw51D2V$aJbVmk2xlEg8q.Y8nh91E.:43534:0:435:7:::
user:$1$4aMItwK9$PnpH2GeuHDeR2t.jKhQ771:345345:0:46456:7:::
PK�����S•C,mˆ÷��÷��;���samples-and-tests/auth-file-demo/test/ApacheGroupsTest.java
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.junit.BeforeClass;
import org.junit.Test;
import play.Logger;
import play.Play;
import play.cache.Cache;
import play.modules.fileauth.FileAuth;
import play.test.UnitTest;

/**
 * ApacheGroupsTest 03.08.2012
 *
 * @author Philipp Haussleiter
 *
 */
public class ApacheGroupsTest extends UnitTest {

    @BeforeClass
    public static void setup() {
        Play.configuration.setProperty("authfile.groups.path", Play.applicationPath + "/test/htgroups");
        Play.configuration.setProperty("authfile.users.path", Play.applicationPath + "/test/htusers");
        Play.configuration.setProperty("authfile.users.delimeter", ":");
        Play.configuration.setProperty("authfile.groups.delimeter", " ");
        Cache.safeDelete(FileAuth.AUTH_FILE_GROUPS_CACHE_KEY);
        Cache.safeDelete(FileAuth.AUTH_FILE_USERS_CACHE_KEY);
        FileAuth.scanGroups();
        FileAuth.scanUsers();
    }

    @Test
    public void testGroupsRead() {
        Logger.info("testGroupsRead");
        FileAuth.scanGroups();
        Map<String, Set<String>> groups = Cache.get(FileAuth.AUTH_FILE_GROUPS_CACHE_KEY, HashMap.class);
        assertNotNull(groups);
        int groupSize = groups.size();
        assertTrue(String.format("but was %d ", groupSize), groupSize > 0);
    }

    @Test
    public void testGroupContainsUser() {
        FileAuth.scanGroups();
        FileAuth.scanUsers();
        String user = "user";
        String group = "users";
        assertTrue(String.format("u: %s, g: %s", user, group), FileAuth.contains(group, user));
        user = "root";
        assertTrue(String.format("u: %s, g: %s", user, group), FileAuth.contains(group, user));
    }

    @Test
    public void testGroupNotContainsUser() {
        FileAuth.scanGroups();
        FileAuth.scanUsers();
        String user = "user";
        String group = "root";
        assertFalse(String.format("u: %s, g: %s", user, group), FileAuth.contains(group, user));
    }

    public void testGroupNotExists() {
        FileAuth.scanGroups();
        FileAuth.scanUsers();
        String user = "user";
        String group = "user";
        assertFalse(String.format("u: %s, g: %s", user, group), FileAuth.contains(group, user));
    }
}
PK�����oˆC/%ÈBÔ��Ô��,���samples-and-tests/auth-file-demo/conf/routes# Routes
# This file defines all application routes (Higher priority routes first)
# ~~~~

# Home page
GET     /                                       Application.index

# Ignore favicon requests
GET     /favicon.ico                            404

# Map static resources from the /app/public folder to the /public path
GET     /public/                                staticDir:public

# Catch all
*       /{controller}/{action}                  {controller}.{action}
PK�����oˆC¥#Æ/Ç��Ç��6���samples-and-tests/auth-file-demo/conf/application.conf# This is the main configuration file for the application.
# ~~~~~
application.name=auth-file-demo

# Application mode
# ~~~~~
# Set to dev to enable instant reloading and other development help.
# Otherwise set to prod.
application.mode=dev
%prod.application.mode=prod

# Secret key
# ~~~~~
# The secret key is used to secure cryptographics functions
# If you deploy your application to several instances be sure to use the same key !
application.secret=uQks53MboMLlGVsJSrPRCipiFOZ4BXn8oDBfOxGxsaXDVtkJOJaIiBNX9SNQoUN8

# i18n
# ~~~~~
# Define locales used by your application.
# You can then place localized messages in conf/messages.{locale} files
# application.langs=fr,en,ja

# Date format
# ~~~~~
date.format=yyyy-MM-dd
# date.format.fr=dd/MM/yyyy

# Server configuration
# ~~~~~
# If you need to change the HTTP port, uncomment this (default is set to 9000)
# http.port=9000
#
# By default the server listen for HTTP on the wilcard address.
# You can restrict this.
# http.address=127.0.0.1
#
# Use this if you don't host your Play application at the root of the domain
# you're serving it from. This parameter has no effect when deployed as a
# war, because the path will be handled by the application server.
# http.path=/

# Session configuration
# ~~~~~~~~~~~~~~~~~~~~~~
# By default, session will be written to the transient PLAY_SESSION cookie.
# The cookies are not secured by default, only set it to true
# if you're serving your pages through https.
# application.session.cookie=PLAY
# application.session.maxAge=1h
# application.session.secure=false

# Session/Cookie sharing between subdomain
# ~~~~~~~~~~~~~~~~~~~~~~
# By default a cookie is only valid for a specific domain. By setting
# application.defaultCookieDomain to '.example.com', the cookies
# will be valid for all domains ending with '.example.com', ie:
# foo.example.com and bar.example.com
# application.defaultCookieDomain=.example.com

# JVM configuration
# ~~~~~
# Define which port is used by JPDA when application is in debug mode (default is set to 8000)
# jpda.port=8000
#
# Java source level => 1.5, 1.6 or 1.7 (experimental)
# java.source=1.5

# Log level
# ~~~~~
# Specify log level for your application.
# If you want a very customized log, create a log4j.properties file in the conf directory
# application.log=INFO
#
# More logging configuration
# application.log.path=/log4j.properties
# application.log.system.out=off

# Database configuration
# ~~~~~ 
# Enable a database engine if needed.
#
# To quickly set up a development database, use either:
#   - mem : for a transient in memory database (H2 in memory)
#   - fs  : for a simple file written database (H2 file stored)
# db=mem
#
# To connect to a local MySQL5 database, use:
# db=mysql://user:pwd@host/database
#
# To connect to a local PostgreSQL9 database, use:
# db=postgres://user:pwd@host/database
#
# If you need a full JDBC configuration use the following :
# db.url=jdbc:postgresql:database_name
# db.driver=org.postgresql.Driver
# db.user=root
# db.pass=secret
#
# Connections pool configuration :
# db.pool.timeout=1000
# db.pool.maxSize=30
# db.pool.minSize=10
#
# If you want to reuse an existing Datasource from your application server, use:
# db=java:/comp/env/jdbc/myDatasource
#
# When using an existing Datasource, it's sometimes needed to destroy it when
# the application is stopped. Depending on the datasource, you can define a
# generic "destroy" method :
# db.destroyMethod=close

# JPA Configuration (Hibernate)
# ~~~~~
#
# Specify the custom JPA dialect to use here (default to guess):
# jpa.dialect=org.hibernate.dialect.PostgreSQLDialect
#
# Specify the ddl generation pattern to use. Set to none to disable it 
# (default to update in DEV mode, and none in PROD mode):
# jpa.ddl=update
#
# Debug SQL statements (logged using DEBUG level):
# jpa.debugSQL=true
#
# You can even specify additional hibernate properties here:
# hibernate.use_sql_comments=true
# ...
#
# Store path for Blob content
attachments.path=data/attachments

# Memcached configuration
# ~~~~~ 
# Enable memcached if needed. Otherwise a local cache is used.
# memcached=enabled
#
# Specify memcached host (default to 127.0.0.1:11211)
# memcached.host=127.0.0.1:11211
#
# Or you can specify multiple host to build a distributed cache
# memcached.1.host=127.0.0.1:11211
# memcached.2.host=127.0.0.1:11212
#
# Use plain SASL to authenticate for memcached
# memcached.user=
# memcached.password=

# HTTP Response headers control for static files
# ~~~~~
# Set the default max-age, telling the user's browser how long it should cache the page.
# Default is 3600 (one hour). Set it to 0 to send no-cache.
# This is only read in prod mode, in dev mode the cache is disabled.
# http.cacheControl=3600

# If enabled, Play will generate entity tags automatically and send a 304 when needed.
# Default is true, set it to false to deactivate use of entity tags.
# http.useETag=true

# Custom mime types
# mimetype.xpi=application/x-xpinstall

# WS configuration
# ~~~~~
# Default engine is Async Http Client, uncomment to use
# the JDK's internal implementation
# webservice = urlfetch
# If you need to set proxy params for WS requests
# http.proxyHost = localhost
# http.proxyPort = 3128
# http.proxyUser = jojo
# http.proxyPassword = jojo

# Mail configuration
# ~~~~~ 
# Default is to use a mock Mailer
mail.smtp=mock

# Or, specify mail host configuration
# mail.smtp.host=127.0.0.1
# mail.smtp.user=admin
# mail.smtp.pass=
# mail.smtp.channel=ssl

# Url-resolving in Jobs
# ~~~~~~
# When rendering templates with reverse-url-resoling (@@{..}) in Jobs (which do not have an inbound Http.Request),
# ie if sending a HtmlMail, Play need to know which url your users use when accessing your app.
# %test.application.baseUrl=http://localhost:9000/
# %prod.application.baseUrl=http://www.yourdomain.com/

# Jobs executor
# ~~~~~~
# Size of the Jobs pool
# play.jobs.pool=10

# Execution pool
# ~~~~~
# Default to 1 thread in DEV mode or (nb processors + 1) threads in PROD mode.
# Try to keep a low as possible. 1 thread will serialize all requests (very useful for debugging purpose)
# play.pool=3

# Open file from errors pages
# ~~~~~
# If your text editor supports opening files by URL, Play! will
# dynamically link error pages to files 
#
# Example, for textmate:
# play.editor=txmt://open?url=file://%s&line=%s

# Testing. Set up a custom configuration for test mode
# ~~~~~
#%test.module.cobertura=${play.path}/modules/cobertura
%test.application.mode=dev
%test.db.url=jdbc:h2:mem:play;MODE=MYSQL;LOCK_MODE=0
%test.jpa.ddl=create
%test.mail.smtp=mock

PK�����C‹úWÀ �� ��6���samples-and-tests/auth-file-demo/conf/dependencies.yml# Application dependencies

require:
    - play
    - play -> secure
    - local -> play-file-auth 0.2
    
repositories:
    - playCustomModules:
        type:       local
        artifact:   ${application.path}/../../dist/[module]-[revision].zip
        contains:
          - local -> *PK�����oˆCqé¶h���h���.���samples-and-tests/auth-file-demo/conf/messages# You can specialize this file for each language.
# For example, for French create a messages.fr file
#
PK�����oˆC«_^)/��/��4���samples-and-tests/auth-file-demo/app/views/main.html<!DOCTYPE html>

<html>
    <head>
        <title>#{get 'title' /}</title>
        <meta charset="${_response_encoding}">
        <link rel="stylesheet" media="screen" href="@{'/public/stylesheets/main.css'}">
        #{get 'moreStyles' /}
        <link rel="shortcut icon" type="image/png" href="@{'/public/images/favicon.png'}">
        <script src="@{'/public/javascripts/jquery-1.6.4.min.js'}" type="text/javascript" charset="${_response_encoding}"></script>
        #{get 'moreScripts' /}
    </head>
    <body>
        #{doLayout /}
    </body>
</html>
PK�����oˆC*º$•<���<���A���samples-and-tests/auth-file-demo/app/views/Application/index.html#{extends 'main.html' /}
#{set title:'Home' /}

#{welcome /}PK�����oˆCÙ¦��¦��:���samples-and-tests/auth-file-demo/app/views/errors/404.html<!DOCTYPE html>

<html>
    <head>
        <title>Not found</title>
        <meta http-equiv="Content-Type" content="text/html; charset=${_response_encoding}"/>    
    </head>
    <body>
        #{if play.mode.name() == 'DEV'}
            #{404 result /}
        #{/if}
        #{else}
            <h1>Not found</h1>
            <p>
                ${result.message}
            </p>
        #{/else}
    </body>
</html>
PK�����oˆCËip®V��V��:���samples-and-tests/auth-file-demo/app/views/errors/500.html<!DOCTYPE html>

<html>
    <head>
        <title>Application error</title>
        <meta http-equiv="Content-Type" content="text/html; charset=${_response_encoding}"/>	
    </head>
    <body>
        #{if play.mode.name() == 'DEV'}
            #{500 exception /}
        #{/if}
        #{else}
            <h1>Oops, an error occured</h1>
            #{if exception instanceof play.exceptions.PlayException}
                <p>
                    This exception has been logged with id <strong>${exception.id}</strong>.
                </p>
            #{/if}
        #{/else}
    </body>
</html>
PK�����oˆC¤8r“���“���A���samples-and-tests/auth-file-demo/app/controllers/Application.javapackage controllers;
import play.mvc.*;

public class Application extends Controller {

    public static void index() {
        render();
    }

}PK�����*†9Dp­b’$���$���/���samples-and-tests/auth-file-demo/modules/secure/opt/play/play-1.2.5/modules/secure
PK�����*†9DD6I÷P��P��G���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.py# Here you can create play commands that are specific to the module, and extend existing commands

MODULE = 'play-file-auth'

# Commands that are specific to your module

COMMANDS = ['play-file-auth:hello']

def execute(**kargs):
    command = kargs.get("command")
    app = kargs.get("app")
    args = kargs.get("args")
    env = kargs.get("env")

    if command == "play-file-auth:hello":
        print "~ Hello"


# This will be executed before any command (new, run...)
def before(**kargs):
    command = kargs.get("command")
    app = kargs.get("app")
    args = kargs.get("args")
    env = kargs.get("env")


# This will be executed after any command (new, run...)
def after(**kargs):
    command = kargs.get("command")
    app = kargs.get("app")
    args = kargs.get("args")
    env = kargs.get("env")

    if command == "new":
        pass
PK�����*†9DŒÀÉZ•��•��E���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/README.mdplay-file-auth
==============

This Module supports authentication of Play! 1.x Applications agains Unix Auth Files (e.g. Apache htusers)

This Plugin works for all Auth Files with the following syntax:


    user1:passwordhash
    user1:passwordhash:...:...:

    group:user1 user2
    group:x:...:user1,user2


The Hash Algorithm has to be either MD5 Crypt or MD5 Apache Crypt.

    $1$...
    $apr1$...PK�����*†9DaCV��V��E���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/build.xml<?xml version="1.0" encoding="UTF-8"?>

<project name="play-file-auth" default="build" basedir=".">

    <target name="check" unless="play.path">
        <fail message="Please specify Play framework path using -Dplay.path=/path/to/framework/home" />
    </target>

    <path id="project.classpath">
        <pathelement path="${play.path}/framework/classes"/>
        <fileset dir="${play.path}/framework/lib">
            <include name="*.jar"/>
        </fileset>
        <fileset dir="${play.path}/framework">
            <include name="*.jar"/>
        </fileset>
        <fileset dir="lib">
            <include name="*.jar"/>
        </fileset>
    </path>

    <target name="build" depends="compile">
        <mkdir dir="lib" />
        <copy todir="tmp/classes">
            <fileset dir="src">
                <include name="**/*.properties"/>
                <include name="**/*.xml"/>
                <include name="**/play.plugins"/>
                <include name="**/play.static"/>
            </fileset>
        </copy>
        <jar destfile="lib/play-play-file-auth.jar" basedir="tmp/classes">
            <manifest>
                <section name="Play-module">
                    <attribute name="Specification-Title" value="play-file-auth"/>
                </section>
            </manifest>
        </jar>
        <delete dir="tmp" />
    </target>

    <target name="compile" depends="check">
        <mkdir dir="tmp/classes" />
        <javac srcdir="src" destdir="tmp/classes" target="1.5" debug="true">
            <classpath refid="project.classpath" />
        </javac>
    </target>

</project>
PK�����*†9DO‘©ËÖ��Ö��H���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pycÑò
�ÝãRc�����������@���s.���d��Z��d�g�Z�d�„��Z�d�„��Z�d�„��Z�d�S(���s���play-file-auths���play-file-auth:helloc����������K���sV���|��i��d�ƒ�}�|��i��d�ƒ�}�|��i��d�ƒ�}�|��i��d�ƒ�}�|�d�j�o	�d�GHn�d��S(���Nt���commandt���appt���argst���envs���play-file-auth:hellos���~ Hello(���t���get(���t���kargsR����R���R���R���(����(����s���/home/javastream.de/jenkins/jobs/de.consolving.play-file-auth/workspace/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pyt���execute	���s����
c����������K���s@���|��i��d�ƒ�}�|��i��d�ƒ�}�|��i��d�ƒ�}�|��i��d�ƒ�}�d��S(���NR����R���R���R���(���R���(���R���R����R���R���R���(����(����s���/home/javastream.de/jenkins/jobs/de.consolving.play-file-auth/workspace/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pyt���before���s����c����������K���sQ���|��i��d�ƒ�}�|��i��d�ƒ�}�|��i��d�ƒ�}�|��i��d�ƒ�}�|�d�j�o�n�d��S(���NR����R���R���R���t���new(���R���(���R���R����R���R���R���(����(����s���/home/javastream.de/jenkins/jobs/de.consolving.play-file-auth/workspace/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pyt���after���s����
N(���t���MODULEt���COMMANDSR���R���R	���(����(����(����s���/home/javastream.de/jenkins/jobs/de.consolving.play-file-auth/workspace/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pyt���<module>���s���			PK�����*†9DxÏ‘[$���$���D���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/manifestversion=0.2
frameworkVersions=1.2.x
PK�����*†9DG»-»��»��W���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/lib/play-play-file-auth.jarPK
����Ã…9D������������	��META-INF/þÊ��PK
���Â…9D½ÿíŠ���¤������META-INF/MANIFEST.MFM±
Â0E÷@þ!£	U¡H·ÖÉ¡"T\噾ÐiR’tÈß›l®çœËÁ‘Á˜äC$ï:qR
g½û#ýzAQX‘תo!á,‡\ûV5Ÿs+¿ÍE¦Ý‰‘tð1Ç„kw§Õ‘3ΰb'ž²\ý¼[älÚP“!
©üÈ%[Š­†,JØÓR—?PK
����…9D���������������play/PK
����…9D������������
���play/modules/PK
����Å9D���������������play/modules/fileauth/PK
����Å9D���������������play/modules/fileauth/utils/PK
���Å9D��������������play.plugins�PK
���Â…9D(�å_j
����$���play/modules/fileauth/FileAuth.classW{|Õþ&û˜ÙÉ$À†D—Š,ˆ˜„,QZPEBL „”hD‡ì$Ýìngg‘૾j[m}k¥­O4ÕR´!1ÁG¨Vkµ[«}ØÖÖÚÚ÷ý•~wöÁf³bȏû8÷Üs¿sÎwϝ}ùOpþ£"ˆk|8×ʸN…×(¸^ÅpƒŒ/ª”IÁ—E£hn*†Œ¯Èøj1Jp³Ü"ãV·ávîÀ
îRq7¾¦à»Äðë2¾¡âDaö›¢¿WÅ}¸_ŒPð è’±[ÅÃxDưŠø–hÍc
¾-VöÈøŽŒÇUTá	•Ø+š}*fb¿hž žRð]{DÆK1*6ŽÉxZÅ2Œ*Jßç=£à ‚gRpXÁs2žWq®.½ àEáÕ„Œ#õ›×õ45·4ötv4nêèi¨oXר³¡±[‚¿åb}»^Ñ£ýµ¶eFûWH(iˆE¶µ»ôHҐ 6wô4¶Õ¯ii<W‚t„9Ç,®Ý´±³}’É’ÔxsskãÆÎͼ+ͨi¯’બê’ànˆ…isF‹5Ú’ƒÛk³¾-b(±^=Ò¥[¦˜§…n{ÀLH¶Ä#úPí`,œŒ‰Ú>3bèI{ ¶‰ƒzZé7ì΄aQ{VeUÊ­¤mFj[õ8—=ÉÔÚŒ)+“ÏŠgÎ^6YuåÔPM•¬¢A_‡ÙÕí¤EgæC™¾ú³ÖŠ%ãííOš¦iÌQè0ì
«ë릍ëcM)½±¨­›QÂ;­r:ÞU‘AÇ#æW¤…s¦SSăyÄ)Ó€B ÛõˆÖm†]‰ë‰Ä¥1+L:Ñ^k(návÊ×D¯MŸä‰ë–;lK¡kP´ÈNL­˜±Ú5ɾ>Ã2›=lX\wGHaª;$Ì˪	J¶Åì¦X2nÜÑkÄm3¥vyV£yc®\dnÓÅ=sа
ëZr	¥“S_ø3Äð‰ðµ§œpë–µP 2¢ì¤f"3æ]J}3Ñì;ב‰PVöFÒ÷Síˆ%­^£É9·$sµ–ˆó5´ UÃ:Ðê¬c¹X§'Ȧ,¯ÄÈø¾†—ð2íLb™,	3óë‡†íØ¬a‹h^Â&mcÂ5ôà
ÎÞüLÉxUÃq‘Œ×4ü¯3¢6ˆð-q.ý’¸nÈxCÏñf4o5­NèüTÂ	ù‡¬Iš‘°£²ZÃÏ𦌟køÞ“_òÄ`³¥bСVÐŒ5¼w&áݸíb£×–ñ+
¿Æo$h¹©!þ­†wq¥†ßáJÙ ™FcvP:ÄŠl„„ê|
¿û+
S“¥4×pJ(ÌÿA4ïiø#ÞÑð'¼¯áÏbôþB6,Œjø+>”0÷¸TÖð7±éï@YJ³Zõ‰
ôÿø§ˆÏ¿È»à 3<äéìlüSUÍI_©|qn^‚Üv,Ä)ö‹Oa£C–ã	ë3vbh¤X¿$X€Á˜,„ÉÙ˜0l†û
‘“ÿ1ÕŽB¯Þ;`Ô6ˆ–ae¯ÀqëbC„•iEUK>SxÛUN•T,/¤Èû½°0h°Dmë¹ËDmd™ÙnXfßP{¶lúœ}ílxYáûÌþ¤¥§\‘SŽÛ­XܰlÓHÄìBr	ÅBz>”çRæI(TÏšÞkRh«—l3¢t#4­ÃÒ·{Åäê2”°A2¬7iYFÔÞL6¶š‘ˆøaí\/á¤Êõdz¥Ø±”ˆ©,³Ø	rK¬¿_°ÜmFûb*@ÞR ¹]yIÏxG¹×Øa&Ä›à5©rî¾T·¢âËhòs"”ËŽÉÒO›*Ç-ÎçIÄ#¦]øu¯*ørº9`ä\ñ¤—Æ4øi’Ú•·çìãó`ªÉœH”‘zÎ÷¹Ó·‰„Þ/<2,+&"ž ØÉf³Èfóñ²éÒÃaÌçGu¿8Ü M°–³"x8çãÈq�ësä>ÌÁ†œùé”Hâ-eÛFI-{‰½§ú�¤}ŽÊF¶^GxÚÙj)|›ØûÄ#H-±Ùf/ÖîGÑ.ÃÕ}�î½~O\£ð‚¼¡úäQ(ª÷RÏåØžCëÀb¶5(ÅÎkq2-்Ìys ¢]œ7Ir>gÝʈdËÇ"ñå#Q§"YÁv%‘¬âü"YM$k&!¹p
’±5‹ä³DÒƒ‹Ò}’·¬ƒÄãÞS=yñx\{FQÜZS=­‡PÒr„¡Åc(-ž,¨E4æÇKs
aÌdàýzÏœJ0§1`uê(èÌ0œÑ6'×d�]Ä¥èE˜¶ü
JRk[³k×|èË:0œv Tȁǘ™v`qh³òá‡	ß ü~ ü‹yì%<0Bøƒ„ˁr@Ãõ§áŸàd_@Ô¸¿)
_Ë®ïPÛÌä_:J~ÊìËöÃï/Áì
bPî¯Á	-ã8‘løçŒà£8isý'sXÍÿ#˜çzÁQÌOS¦uºyNiM`VhïÊîÔ]˜›¶#öùån>m•Ýã¨ê�÷.®sÜ#¨é®óL :àY<‚P7à=èÞ}ôýš€×µtK^·èÆPK߆¾î÷ÔøOÅèImÿ¤›¶»]wÇ(>5ŒŠ”ty®4ãØ™S3†³$ŒàlÝ$¿jö2DÛq/ðz‰þ-þŽO¥ªålw0C˜8—¡—³~\A†\Ií«q®Ãm¸»p#ÀMÃÍ´q­Ý‚	ÜŠ79~‹oãv~»Ý)ÍÂ]Nj/¤Õ]˜ÇÄ_B*Ü€:¦~é¾™(¢L¨‡»g‘qÊÞvFŸãÈ'©°2ÌÆQ$2Ôã4ÖóËÜF2‡©5A†cEa{†Eïñ”R’ârÁ…y¤ÕþOsØZ€«>Šm~ˆtL Lä„)ýô8p§Iâ	x’x'pmÀëDÈIØyvcvÀ™‡—Öˆ5e%ٝž”ƒ÷=<ŽsxÚê:_@©SêÁåÅ®åZ¹V^ü æÔrmi]IÀ(qxV_„ó®Ó¤á£ï†rŠ‚¾ûvø}¡,û\öy2ìs¤Ës¥¹ì}ûB‚}×KÕRˆy}C–};Yjû˜±û™íÈ•ù¶=Ä·i7³ý0yóy÷(îÆã\ya/öñoûɃ§ø3i„¿ð÷Ê(þ‹1ɇQiÆ¥xVªÆ<ñT‹ÃÒjŽðœÔˆç¥.¼(í$óC÷uÄr)ORh¡Ä)C%xU¼—°È€…¼;QŒYˆ.ãH#Чež¿1½÷]>,y>b½Ýṇ~ÝèðÜK)ž{ˆ ÅsyžÈð\Hó|ž´•w¯‰ñj‘Nwª·]Ò"‡ñîlõNeð¬”ÖVjež!UüJHWñµ”ˆ§d
âJ3×àJýkÒ	ríq‹Ú-9)ñ;õøeô
Óñ*~î]•ýX˜ç¼±ïhß¹}ٍ©Ï…ùl?ï`¹úÿPK
���Â…9Dæ'È­r��p��*���play/modules/fileauth/FileAuthPlugin.classQÛJ1œìÖ®nk«VÛz©U(R\|V
–"…Šâc¶]5’&e/ŠŸå‹‚‚àG‰g·õ*æa&™Ì™œ$/¯Ï�¶±b#‚…Y
1ÌY(Z(1¤w…áƒY_?aHèžÇo	åE}×ó¹+I™ié.—'Üñz$¦ÂK0¬µ’ß:}Ý‹¤8çBz<
/MöiÒ–Ñ…P;¢Õþ` E—‡B«NÈý¾Ò.Cõ—ŒN—«¦v©ØîèÈïzq(Cá{öÖ¿æYXg¨ü”EKµÿtLïØÚô…e«í뾨—ì¡Rž yxô¥úúð.R¸Ó¨|;ªÔ÷;™/*V1F¿,¾á­bF<¶ñ�v—lÛ„éDÌ#C˜ˆ'‰rÅMrĹ'g0[›÷H~¦ä`É_¢Úr’VVŒÒÆé¤<¦(ÏÀtR7ƒEb›”yT°€‰7PK
���Â…9DŒˆvÓ`��%��#���play/modules/fileauth/ScanJob.class}PËNA¬áé.‹ŠÆxpãÁÆ„51«Q80†!ËÙ	ŸåIâÁð£Œ=@ăq“©~Twue?¿Þ?�œ¡n"‰¢‰ÊöÒØO£Âºž/âf—!q¥†‚!çHO<D“¾ðŸxߥNÁQîv¹/u½n&‘Žœ©ËçöD
#Wö‹tÂ‘ÝpïNõ[É¡¢„Áì¨Èˆ©·­5:æ3ÎPyŒ¼PNDW’ÔÛž§BJåÑ…üêÂXõûz&ü¹Öœq7Ò&Î'Ò³B:‡¨Z¨¡ÊPû×Cv£¹¬ëÏk³mJŒ€VŸákG¦£}ÛQ(]ûžOÉ‘©ù[_EÓ�ÇHÐ×_L›#ܢʦÈ(&OÞÀ^—´A˜Z6ó0	­Õ�2”òìÏrk½l,ë-ïm¶',ÒՍ–	k¡ÍhÌa‡b†¸<½B€ÝoPK
���Ã…9DÎǘ	��%��*���play/modules/fileauth/utils/MD5Crypt.class­W{PTçÿ}û¼,X!®(`BuÙe]@E4¾�EA@りԚËîe¹º/wï"5¦Å4iúŠé˦5ÆØ®Imj’v¥Ú`ß3í_ý/íLg:Ó¦L2ÓtÚ4ôz¾»wĵa:…™ïq¾s¾ó;ç;»¿üàæ4€&ü܆fD‹C\ÀqHÚh£Úè,Ň1>œ°b܆"DL˜‘ýÛjÃI<©§øpZÀÅY+³âã6,Æ'¬˜´¡Q~~ޝðI.vŽOpò“>Å5<%àÓœø>|–ŸãäÏóÕÓüÞó|x†_à_ä«/	ø2ß|…8ëW<ËUÍŠ¯[q‘¡ÈßÖÓß±«mŸŸÁÑsT“|a)òùÕ„
=ÈPÒ‹&U)ªî—Â)™Á¢¨1©e--6)QEÝÂ`tÕïg0uÄ‚t\Ö£Då¾TdXNôKÃa™ßHáýRBá{hRG•$ÃÊžxXšðEbÁTXNúF”°,¥ÔQ_JUÂI_ïöu‰‰¸J(LI‰2Tº†îƨi—¡1†òÇ\YŒ®tuwÕ:g$ɺ‰/©œ$l¬‹ŒKÈÉTXepÞ%ОRÂA9ArE‚›VT²Äìjç@˜B÷dI†¡vëð„*'›SDuµ×ÓÍF%'6:²„d•Ld¨qé°’r •PÔ	_¯œLJ!y»’“Ü|ƒ<ÎàšÇÔó§£máPŒ¶£‘ã9®*±(ñ›Üoä_WwrY‰¹!.%“'b‰ ÷†Ä`MHÑ`HŽæÃƒ¿ocl- a:‹¥¸•;²P»tѯ6ÄÃdSD
)Ûˆ•Â~URéq•Ì\þ!þ6W½ÝR:&'”‘‰½y¿¬Z˜Å‡(u(¸•¨*«\šAŒ³ÝO$Â句¹Sá	Q’öÕü*ëÑjÅs".áyR9ÀÑm¬ÍñÔy³¾;\›{¯ZþZV\ñ®ˆø¾)â>&â@v8Èpß="™aÛj_cSóšµëZÖ·nhkïØ¾£sç®®îÝ=½}{ö>´Ïß?°ÿÀÁÁCÒp („F•£Ç‘h,~<‘TSc'Æ'NZ‘q/Šx	ßq
ß&OZ+^ñ\§H\Xì2,E¹/U•ˆœ?ä^y…Á>?E¼Š×D|ßcØro÷6,o{£ˆnp+¦È€º¦:)Uë¤x‚マ›œå–ˆàu~ô‹˜Æm?Än?Ê®~,¢›o‚VŠ!’Úƒ½"ÚÑ!â§øÐ.kçÆ7ì
CÝBŠaÎ~ÍC{†Ê;Iþ‰¤*G½œ —­ÈF¦óí¥WéÝe‰§my2åzœïÂô
…
¯³ò¸¢òZÖÅwöù<ä©À¨”hÓY:h/Åãr”Òf™«ãîT­¥‚Ë]±ØU0§«þKÊR1¡bÚ¥5ª�eSÓ½ëÞ=s~É\™þÑDìoUšÕ–°
©£Z«£^¥7ëÇ$U£t%™Nêð+]]…ÛŒwAÅxÖ%6²&¡&(\sÁ9Äé…•Yµ‚¾g$ûZ µó^Ä)õ¼5YRñ V-A݉Vjb]ÚËš©ÿÉD±ÈÇSR89O6ìH?}V4Ñ÷`€k°ë´ÝRÚ·ÌÙC¤557ÅG3£Ùì¾öŠÆ²‘F‹Flƒ4ŠYlÂfš‹°[uá4LÚÙ {Úô<ŠÜÓ–+({‡1“iŠ.¶\BQܦf·¹y
:Hc•{ڬӍÍt4«F/ËR¦ ÐÖHò³€Ü°Ñ¸žÀ´ÒWÓ,!8Õ¨‘à´ ]hC?¶ã vÌ=ˆmDù€’^}’Œ3ÑÜpEƒ7`ë›4Ì,{U^Gqõbˆ>‘Aieªí–Ó[Ó3oz3°_Ïã¨ÿ¬ì†€”¡5èÃ*<¤é¬…‘ßK(vhž
èÄN’PGøºèÔÉ둎ÃO{ÍåÆMUîéË(qWû'KÏümÖl‡u€®ØO&
Ðþ ¦ª’Î
°ˆš¡å¥O3”Jœ® ‘8ø™eé"Ìœ¹6ïmÌq“…ØG³×Q]º›àñ3»cÑ×wßÂâAŠ‘ŠÛz4XHgö¾RÍì QdX1’¿×J±2@¸9*ê{ú½—H–Û´MwÏ-TÒ|_¯'ƒ%vá2V4dàt,Í êñ£Omñ8–._nz8ƒe,?žù­›øì0³ORMš€1òÑ	òÈ#¤íVâ4ý
˜³7é\IHÉ_í6¢sL+†èi¨„’¿>ŠÃZQ«ÖÑnÒIp{ÕS¨¹>Ï‹Ïä_ƒß•½“¯†´”s’—ÿÏv[æÛ}™´½@èÓ¤í*Ùø"i~‰ì¾ö?Ø}¤ Ýµì¾ý!vS³ÎÞd|ƒì."aÅCö­¸�‘ÏUÜßã±×eð€á9”yŒÙ5YÛCfVÙ…+(öí'L¡n£Éirgð‘V:M
¹…'»àçf§9wnöäyJ«úhSÕ"TQí4y‚Ý~4¤a® 5®Iá/é™?x§PŸã¼€ú
ÁtæJ¹€‰xÒ|ÉoÕvtxªEHÏüÚiâ
Œ\f‘ñ­Ëˆpî¬lYF¢Óì5Ú효%~ïu¬„Æš%¸s]XHÏ9ËÚ3)P¡xZ¥‚Shàqâ<ÙÉ¡Í^ãš)4Øíã^»E[	ãg½v‘/Ïž[oq
•뼫)Ïje-)Èjγ
³¬¥Y-yÖ¢YÖ²‚¬Ö<«-Ï*ä´s²N5ç¨ôtNáŽZý'-”ߤ°ü#ámTáªÕ¦€—Âÿ¯Ô=Þ£
ýw*™ïSšþƒ’àŸT¾þ…þq|€3éO2ƝÓW¡€«LÄk¬7Y)}=Úñ+Úÿ†-ÆïX5Þf5x—­Àûì~f`u¬˜­bæbUÌÃ`
ôïckX#ÛÊšÙ.¶Žõ±jÖÏ6²Ãl²ÍìÛÂ’l;ÏÚØEÖÁ^gÛÙ/X'{‹ídï±.C9ë6Ô°ÃfÖkèb{~¶×p„ù
6 ¥bœ:û$u ‰]ÀËðh­AÀï‘ÐW”‚¹D¥U6Qùj˜V²õ¨…±ÙÐ@Å\¦ÂqØ ’?d˜Ùy¼u5áµ^&P’BÑË…ª—‹Fª’Z–—xÜ­«¯¾FdÉÂI¼—8|7Ðxûξʂ(b2ÊÙ–±V2eN™iÄQ½Ì4☆ž!¬ÉGþPK
����Ã…9D������������	���������íA����META-INF/þÊ��PK
���Â…9D½ÿíŠ���¤��������������¤+���META-INF/MANIFEST.MFPK
����Â…9D����������������������íAç���play/PK
����…9D������������
����������íA
��play/modules/PK
����Ã…9D����������������������íA5��play/modules/fileauth/PK
����Ã…9D����������������������íAi��play/modules/fileauth/utils/PK
���Ã…9D����������������������¤£��play.pluginsPK
���Â…9D(�å_j
����$�����������¤Ï��play/modules/fileauth/FileAuth.classPK
���Â…9Dæ'È­r��p��*�����������¤{��play/modules/fileauth/FileAuthPlugin.classPK
���Â…9DŒˆvÓ`��%��#�����������¤5��play/modules/fileauth/ScanJob.classPK
���Ã…9DÎǘ	��%��*�����������¤Ö��play/modules/fileauth/utils/MD5Crypt.classPK��������Ÿ����PK�����*†9DÔQ.^Þ���Þ���G���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/routes# This file defines all module routes (Higher priority routes first)
#
# import these routes in the main app as :
# *     /                       module:play-file-auth
#
# ~~~~

GET     /?                      Module.indexPK�����*†9D1Sù*T���T���Q���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/application.confapplication.name=play-file-auth
application.mode=dev
application.secret=test
db=mem
PK�����*†9Dæ´(ÕJ���J���Q���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/dependencies.ymlself: play -> play-file-auth 0.2

require:
    - play
    - play -> securePK�����*†9DÌ;¨U¬���¬���I���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/messages# Default play-file-auth messages
# You can specialize this file for each language.
# For exemple, for french create a messages.fr file

#play-file-auth.name=play-file-authPK�����*†9D������������L���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play.pluginsPK�����*†9DˆŽ6©™��™��b���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/ScanJob.java/**
 * ScanJob
 * 31.07.2012
 * @author Philipp Haussleiter
 *
 */
package play.modules.fileauth;

import play.jobs.Every;
import play.jobs.Job;

/**
 * Periodically Scan of user/group files. Scan runs every 5 mins.
 * @author Philipp Haußleiter
 */
@Every("5min")
public class ScanJob extends Job {
    @Override
    public void doJob(){
        FileAuth.scanUsers();
        FileAuth.scanGroups();
    }
}
PK�����*†9DlP¨å��å��c���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/FileAuth.java/**
 * FileAuth 31.07.2012
 *
 * @author Philipp Haussleiter
 *
 */
package play.modules.fileauth;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import play.Logger;
import play.Play;
import play.cache.Cache;
import play.modules.fileauth.utils.MD5Crypt;

/**
 * Basic Wrapper for all FileAuth Functions.
 *
 * @author Philipp Haußleiter
 */
public class FileAuth {

    /* Cache Key for User/PasswordHash Map */
    public final static String AUTH_FILE_USERS_CACHE_KEY = "AUTH_FILE_USERS";
    /* Cache Key for Group/Users Map */
    public final static boolean IS_ENABLED = isEnabled();
    public final static String AUTH_FILE_GROUPS_CACHE_KEY = "AUTH_FILE_GROUPS";
    private final static String CACHE_TIMEOUT = "5mn";

    /**
     * Returns a Map of all Users (user/password hash).
     *
     * @return the Map.
     */
    public static Map<String, String> getUsers() {
        if (!IS_ENABLED) {
            return new HashMap<String, String>();
        }
        Map<String, String> users = Cache.get(AUTH_FILE_USERS_CACHE_KEY, HashMap.class);
        if (users == null) {
            users = scanUsers();
        }
        return users;
    }

    /**
     * Returns a Map of all Groups (groups/usernames).
     *
     * @return the Map.
     */
    public static Map<String, Set<String>> getGroups() {
        if (!IS_ENABLED) {
            return new HashMap<String, Set<String>>();
        }
        Map<String, Set<String>> groups = Cache.get(AUTH_FILE_GROUPS_CACHE_KEY, HashMap.class);
        if (groups == null) {
            groups = scanGroups();
        }
        return groups;
    }

    /**
     * Checks if a group contains a given username.
     *
     * @param group the Group to check.
     * @param user the user to check.
     * @return true if user is in group, otherwise false.
     */
    public static boolean contains(String group, String user) {
        if (!IS_ENABLED) {
            return true;
        }
        if (group == null || user == null) {
            return false;
        }
        Map<String, Set<String>> groups = getGroups();
        Set<String> groupUsers = groups.get(group);
        if (groupUsers == null) {
            return false;
        }
        return groupUsers.contains(user);
    }

    /**
     * Validates an user with a given password agains the user/password hash
     * mapping.
     *
     * @param user the given user.
     * @param password the given password (clear text).
     * @return true if validation okay, otherwise false.
     */
    public static boolean validate(String user, String password) {
        if (!IS_ENABLED) {
            return true;
        }
        if (user == null || password == null) {
            return false;
        }
        Map<String, String> users = getUsers();
        String encryptedPass = users.get(user);
        if (encryptedPass == null) {
            return false;
        }
        return MD5Crypt.verifyPassword(password, encryptedPass);
    }

    /**
     * Rescans the users file.
     *
     * @return the updated Map of users.
     */
    public static Map<String, String> scanUsers() {
        String fileName = Play.configuration.getProperty("authfile.users.path");
        String delimeter1 = Play.configuration.getProperty("authfile.users.delimeter", ":");
        Logger.info("@" + System.currentTimeMillis() + " Scanning Users in " + fileName);
        Map<String, String> users = new HashMap<String, String>();
        File file = new File(fileName);
        if (file == null || !file.exists() || !file.isFile()) {
            Logger.warn(fileName + " is not a valid Auth-File!");
        }
        try {
            BufferedReader br = new BufferedReader(new FileReader(file));
            String line;
            String parts[];
            while ((line = br.readLine()) != null) {
                parts = line.split(delimeter1);
                /*
                 * Matches
                 * user:hash
                 * user:hash:uid: ...
                 */
                if (parts.length > 1) {
                    users.put(parts[0].trim(), parts[1].trim());
                }
            }
            Cache.set(AUTH_FILE_USERS_CACHE_KEY, users, CACHE_TIMEOUT);
        } catch (FileNotFoundException ex) {
            Logger.error(ex.getLocalizedMessage(), ex);
        } catch (IOException ex) {
            Logger.error(ex.getLocalizedMessage(), ex);
        }
        Logger.info("found " + users.size() + " mappings");
        return users;
    }

    /**
     * Rescans the groups file.
     *
     * @return the updated Map of groups.
     */
    public static Map<String, Set<String>> scanGroups() {
        String fileName = Play.configuration.getProperty("authfile.groups.path");
        String delimeter1 = Play.configuration.getProperty("authfile.users.delimeter", ":");
        String delimeter2 = Play.configuration.getProperty("authfile.groups.delimeter", " ");
        Logger.info("@" + System.currentTimeMillis() + " Scanning Groups in " + fileName);
        Map<String, Set<String>> groups = new HashMap<String, Set<String>>();
        File file = new File(fileName);
        if (file == null || !file.exists() || !file.isFile()) {
            Logger.warn(fileName + " is not a valid Auth-File!");
        }
        try {
            BufferedReader br = new BufferedReader(new FileReader(file));
            String line;
            String parts[];
            String userParts[];
            Set<String> users;
            while ((line = br.readLine()) != null) {
                parts = line.split(delimeter1);
                if (parts.length > 1) {
                    if (parts.length > 2) {
                        userParts = parts[parts.length - 1].split(delimeter2);
                    } else {
                        userParts = parts[1].split(delimeter2);
                    }
                    if (userParts.length > 0) {
                        users = new HashSet<String>();
                        for (String user : userParts) {
                            users.add(user.trim());
                        }
                        groups.put(parts[0].trim(), users);
                    }
                }
            }
            Cache.set(AUTH_FILE_GROUPS_CACHE_KEY, groups, CACHE_TIMEOUT);
        } catch (FileNotFoundException ex) {
            Logger.error(ex.getLocalizedMessage(), ex);
        } catch (IOException ex) {
            Logger.error(ex.getLocalizedMessage(), ex);
        }
        Logger.info("found " + groups.size() + " mappings");
        return groups;
    }

    private static boolean isEnabled() {
        if (Play.configuration.getProperty("authfile.users.path") == null
                || Play.configuration.getProperty("authfile.groups.path") == null) {
            Logger.info("FileAuth not enabled. authfile.users.path or authfile.groups.path not set!");
            return false;
        }
        return true;

    }
}
PK�����*†9D4ÿÑ^º��º��i���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/FileAuthPlugin.java/**
 * FileAuthPlugin
 * 31.07.2012
 * @author Philipp Haussleiter
 *
 */
package play.modules.fileauth;

import play.PlayPlugin;

/**
 * Entry Class for first file scan.
 * @author Philipp Haußleiter
 */
public class FileAuthPlugin extends PlayPlugin {

    /**
     * Trigger to scan the files for the first Time.
     */
    @Override
    public void onApplicationStart() {
        ScanJob job = new ScanJob();
        job.now();
    }
}
PK�����*†9DYí΁1��1��i���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/utils/MD5Crypt.java/*

MD5Crypt.java

Created: 3 November 1999

Java Port By: Jonathan Abbey, jonabbey@arlut.utexas.edu

Original C Version:
----------------------------------------------------------------------------
"THE BEER-WARE LICENSE" (Revision 42):
<phk@login.dknet.dk> wrote this file.  As long as you retain this notice you
can do whatever you want with this stuff. If we meet some day, and you think
this stuff is worth it, you can buy me a beer in return.   Poul-Henning Kamp
----------------------------------------------------------------------------

This Java Port is  

Copyright (c) 1999-2010 The University of Texas at Austin.

All rights reserved.

Redistribution and use in source and binary form are permitted
provided that distributions retain this entire copyright notice
and comment. Neither the name of the University nor the names of
its contributors may be used to endorse or promote products
derived from this software without specific prior written
permission. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE.

 */
package play.modules.fileauth.utils;

import java.security.MessageDigest;

/*------------------------------------------------------------------------------
class
MD5Crypt

------------------------------------------------------------------------------*/
/**
 * This class defines a method,
 * {@link MD5Crypt#crypt(java.lang.String, java.lang.String) crypt()}, which
 * takes a password and a salt string and generates an OpenBSD/FreeBSD/Linux-compatible
 * md5-encoded password entry.
 */
public final class MD5Crypt {

    /**
     * Command line test rig.
     */
    static public void main(String argv[]) {
        if ((argv.length < 1) || (argv.length > 3)) {
            System.err.println("Usage: MD5Crypt [-apache] password salt");
            System.exit(1);
        }

        if (argv.length == 3) {
            System.err.println(MD5Crypt.apacheCrypt(argv[1], argv[2]));
        } else if (argv.length == 2) {
            System.err.println(MD5Crypt.crypt(argv[0], argv[1]));
        } else {
            System.err.println(MD5Crypt.crypt(argv[0]));
        }

        System.exit(0);
    }
    public static final String SALTCHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
    public static final String itoa64 = "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";

    public static final String to64(long v, int size) {
        StringBuilder result = new StringBuilder();

        while (--size >= 0) {
            result.append(itoa64.charAt((int) (v & 0x3f)));
            v >>>= 6;
        }

        return result.toString();
    }

    public static final void clearbits(byte bits[]) {
        for (int i = 0; i < bits.length; i++) {
            bits[i] = 0;
        }
    }

    /**
     * convert an encoded unsigned byte value into a int
     * with the unsigned value.
     */
    public static final int bytes2u(byte inp) {
        return (int) inp & 0xff;
    }

    static private MessageDigest getMD5() {
        try {
            return MessageDigest.getInstance("MD5");
        } catch (java.security.NoSuchAlgorithmException ex) {
            throw new RuntimeException(ex);
        }
    }

    /**
     * <p>This method actually generates a OpenBSD/FreeBSD/Linux PAM compatible
     * md5-encoded password hash from a plaintext password and a
     * salt.</p>
     *
     * <p>The resulting string will be in the form '$1$&lt;salt&gt;$&lt;hashed mess&gt;</p>
     *
     * @param password Plaintext password
     *
     * @return An OpenBSD/FreeBSD/Linux-compatible md5-hashed password field.
     */
    public static final String crypt(String password) {
        StringBuilder salt = new StringBuilder();
        java.util.Random randgen = new java.util.Random();

        /* -- */

        while (salt.length() < 8) {
            int index = (int) (randgen.nextFloat() * SALTCHARS.length());
            salt.append(SALTCHARS.substring(index, index + 1));
        }

        return MD5Crypt.crypt(password, salt.toString());
    }

    /**
     * <p>This method actually generates a OpenBSD/FreeBSD/Linux PAM compatible
     * md5-encoded password hash from a plaintext password and a
     * salt.</p>
     *
     * <p>The resulting string will be in the form '$1$&lt;salt&gt;$&lt;hashed mess&gt;</p>
     *
     * @param password Plaintext password
     * @param salt A short string to use to randomize md5.  May start with $1$, which
     *             will be ignored.  It is explicitly permitted to pass a pre-existing
     *             MD5Crypt'ed password entry as the salt.  crypt() will strip the salt
     *             chars out properly.
     *
     * @return An OpenBSD/FreeBSD/Linux-compatible md5-hashed password field.
     */
    public static final String crypt(String password, String salt) {
        return MD5Crypt.crypt(password, salt, "$1$");
    }

    /**
     * <p>This method generates an Apache MD5 compatible
     * md5-encoded password hash from a plaintext password and a
     * salt.</p>
     *
     * <p>The resulting string will be in the form '$apr1$&lt;salt&gt;$&lt;hashed mess&gt;</p>
     *
     * @param password Plaintext password
     *
     * @return An Apache-compatible md5-hashed password string.
     */
    public static final String apacheCrypt(String password) {
        StringBuilder salt = new StringBuilder();
        java.util.Random randgen = new java.util.Random();

        /* -- */

        while (salt.length() < 8) {
            int index = (int) (randgen.nextFloat() * SALTCHARS.length());
            salt.append(SALTCHARS.substring(index, index + 1));
        }

        return MD5Crypt.apacheCrypt(password, salt.toString());
    }

    /**
     * <p>This method actually generates an Apache MD5 compatible
     * md5-encoded password hash from a plaintext password and a
     * salt.</p>
     *
     * <p>The resulting string will be in the form '$apr1$&lt;salt&gt;$&lt;hashed mess&gt;</p>
     *
     * @param password Plaintext password
     * @param salt A short string to use to randomize md5.  May start with $apr1$, which
     *             will be ignored.  It is explicitly permitted to pass a pre-existing
     *             MD5Crypt'ed password entry as the salt.  crypt() will strip the salt
     *             chars out properly.
     *
     * @return An Apache-compatible md5-hashed password string.
     */
    public static final String apacheCrypt(String password, String salt) {
        return MD5Crypt.crypt(password, salt, "$apr1$");
    }

    /**
     * <p>This method actually generates md5-encoded password hash from
     * a plaintext password, a salt, and a magic string.</p>
     *
     * <p>There are two magic strings that make sense to use here.. '$1$' is the
     * magic string used by the FreeBSD/Linux/OpenBSD MD5Crypt algorithm, and
     * '$apr1$' is the magic string used by the Apache MD5Crypt algorithm.</p>
     *
     * <p>The resulting string will be in the form '&lt;magic&gt;&lt;salt&gt;$&lt;hashed mess&gt;</p>
     *
     * @param password Plaintext password
     * @param salt A short string to use to randomize md5.  May start
     * with the magic string, which will be ignored.  It is explicitly
     * permitted to pass a pre-existing MD5Crypt'ed password entry as
     * the salt.  crypt() will strip the salt chars out properly.
     * @param magic Either "$apr1$" or "$1$", which controls whether we
     * are doing Apache-style or FreeBSD-style md5Crypt.
     *
     * @return An md5-hashed password string.
     */
    public static final String crypt(String password, String salt, String magic) {
        /* This string is magic for this algorithm.  Having it this way,
         * we can get get better later on */

        byte finalState[];
        MessageDigest ctx, ctx1;
        long l;

        /* -- */

        /* Refine the Salt first */

        /* If it starts with the magic string, then skip that */

        if (salt.startsWith(magic)) {
            salt = salt.substring(magic.length());
        }

        /* It stops at the first '$', max 8 chars */

        if (salt.indexOf('$') != -1) {
            salt = salt.substring(0, salt.indexOf('$'));
        }

        if (salt.length() > 8) {
            salt = salt.substring(0, 8);
        }

        ctx = getMD5();

        ctx.update(password.getBytes());    // The password first, since that is what is most unknown
        ctx.update(magic.getBytes());    // Then our magic string
        ctx.update(salt.getBytes());    // Then the raw salt

        /* Then just as many characters of the MD5(pw,salt,pw) */

        ctx1 = getMD5();
        ctx1.update(password.getBytes());
        ctx1.update(salt.getBytes());
        ctx1.update(password.getBytes());
        finalState = ctx1.digest();

        for (int pl = password.length(); pl > 0; pl -= 16) {
            ctx.update(finalState, 0, pl > 16 ? 16 : pl);
        }

        /* the original code claimed that finalState was being cleared
        to keep dangerous bits out of memory, but doing this is also
        required in order to get the right output. */

        clearbits(finalState);

        /* Then something really weird... */

        for (int i = password.length(); i != 0; i >>>= 1) {
            if ((i & 1) != 0) {
                ctx.update(finalState, 0, 1);
            } else {
                ctx.update(password.getBytes(), 0, 1);
            }
        }

        finalState = ctx.digest();

        /*
         * and now, just to make sure things don't run too fast
         * On a 60 Mhz Pentium this takes 34 msec, so you would
         * need 30 seconds to build a 1000 entry dictionary...
         *
         * (The above timings from the C version)
         */

        for (int i = 0; i < 1000; i++) {
            ctx1.reset();

            if ((i & 1) != 0) {
                ctx1.update(password.getBytes());
            } else {
                ctx1.update(finalState, 0, 16);
            }

            if ((i % 3) != 0) {
                ctx1.update(salt.getBytes());
            }

            if ((i % 7) != 0) {
                ctx1.update(password.getBytes());
            }

            if ((i & 1) != 0) {
                ctx1.update(finalState, 0, 16);
            } else {
                ctx1.update(password.getBytes());
            }

            finalState = ctx1.digest();
        }

        /* Now make the output string */

        StringBuilder result = new StringBuilder();

        result.append(magic);
        result.append(salt);
        result.append("$");

        l = (bytes2u(finalState[0]) << 16) | (bytes2u(finalState[6]) << 8) | bytes2u(finalState[12]);
        result.append(to64(l, 4));

        l = (bytes2u(finalState[1]) << 16) | (bytes2u(finalState[7]) << 8) | bytes2u(finalState[13]);
        result.append(to64(l, 4));

        l = (bytes2u(finalState[2]) << 16) | (bytes2u(finalState[8]) << 8) | bytes2u(finalState[14]);
        result.append(to64(l, 4));

        l = (bytes2u(finalState[3]) << 16) | (bytes2u(finalState[9]) << 8) | bytes2u(finalState[15]);
        result.append(to64(l, 4));

        l = (bytes2u(finalState[4]) << 16) | (bytes2u(finalState[10]) << 8) | bytes2u(finalState[5]);
        result.append(to64(l, 4));

        l = bytes2u(finalState[11]);
        result.append(to64(l, 2));

        /* Don't leave anything around in vm they could use. */
        clearbits(finalState);

        return result.toString();
    }

    /**
     * This method tests a plaintext password against a md5Crypt'ed hash and returns
     * true if the password matches the hash.
     *
     * This method will work properly whether the hashtext was crypted
     * using the default FreeBSD md5Crypt algorithm or the Apache
     * md5Crypt variant.
     *
     * @param plaintextPass The plaintext password text to test.
     * @param md5CryptText The Apache or FreeBSD-md5Crypted hash used to authenticate the plaintextPass.
     */
    public static final boolean verifyPassword(String plaintextPass, String md5CryptText) {
        if (md5CryptText.startsWith("$1$")) {
            return md5CryptText.equals(MD5Crypt.crypt(plaintextPass, md5CryptText));
        } else if (md5CryptText.startsWith("$apr1$")) {
            return md5CryptText.equals(MD5Crypt.apacheCrypt(plaintextPass, md5CryptText));
        } else {
            throw new RuntimeException("Bad md5CryptText");
        }
    }
}
PK�����*†9D* Fô>���>���P���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/package-listcontrollers
play.modules.fileauth
play.modules.fileauth.utils
PK�����*†9Dóæ Ð��Ð��V���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/overview-tree.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_26) on Tue Aug 06 19:00:49 CEST 2013 -->
<TITLE>
Class Hierarchy
</TITLE>

<META NAME="date" CONTENT="2013-08-06">

<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">

<SCRIPT type="text/javascript">
function windowTitle()
{
    if (location.href.indexOf('is-external=true') == -1) {
        parent.document.title="Class Hierarchy";
    }
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>

</HEAD>

<BODY BGCOLOR="white" onload="windowTitle();">
<HR>


<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html?overview-tree.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="overview-tree.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->

<HR>
<CENTER>
<H2>
Hierarchy For All Packages</H2>
</CENTER>
<DL>
<DT><B>Package Hierarchies:</B><DD><A HREF="controllers/package-tree.html">controllers</A>, <A HREF="play/modules/fileauth/package-tree.html">play.modules.fileauth</A>, <A HREF="play/modules/fileauth/utils/package-tree.html">play.modules.fileauth.utils</A></DL>
<HR>
<H2>
Class Hierarchy
</H2>
<UL>
<LI TYPE="circle">java.lang.Object<UL>
<LI TYPE="circle">play.mvc.Controller (implements play.classloading.enhancers.ControllersEnhancer.ControllerSupport, play.classloading.enhancers.LocalvariablesNamesEnhancer.LocalVariablesSupport)
<UL>
<LI TYPE="circle">controllers.<A HREF="controllers/Secure.html" title="class in controllers"><B>Secure</B></A><LI TYPE="circle">controllers.<A HREF="controllers/Secure.Security.html" title="class in controllers"><B>Secure.Security</B></A><UL>
<LI TYPE="circle">controllers.<A HREF="controllers/AuthFileSecurity.html" title="class in controllers"><B>AuthFileSecurity</B></A></UL>
</UL>
<LI TYPE="circle">play.modules.fileauth.<A HREF="play/modules/fileauth/FileAuth.html" title="class in play.modules.fileauth"><B>FileAuth</B></A><LI TYPE="circle">play.Invoker.Invocation (implements java.lang.Runnable)
<UL>
<LI TYPE="circle">play.jobs.Job&lt;V&gt; (implements java.util.concurrent.Callable&lt;V&gt;)
<UL>
<LI TYPE="circle">play.modules.fileauth.<A HREF="play/modules/fileauth/ScanJob.html" title="class in play.modules.fileauth"><B>ScanJob</B></A></UL>
</UL>
<LI TYPE="circle">play.modules.fileauth.utils.<A HREF="play/modules/fileauth/utils/MD5Crypt.html" title="class in play.modules.fileauth.utils"><B>MD5Crypt</B></A><LI TYPE="circle">play.PlayPlugin (implements java.lang.Comparable&lt;T&gt;)
<UL>
<LI TYPE="circle">play.modules.fileauth.<A HREF="play/modules/fileauth/FileAuthPlugin.html" title="class in play.modules.fileauth"><B>FileAuthPlugin</B></A></UL>
</UL>
</UL>
<H2>
Annotation Type Hierarchy
</H2>
<UL>
<LI TYPE="circle">controllers.<A HREF="controllers/Check.html" title="annotation in controllers"><B>Check</B></A> (implements java.lang.annotation.Annotation)
</UL>
<HR>


<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html?overview-tree.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="overview-tree.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->

<HR>

</BODY>
</HTML>
PK�����*†9D¯:Vto��o��[���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/allclasses-noframe.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_26) on Tue Aug 06 19:00:49 CEST 2013 -->
<TITLE>
All Classes
</TITLE>

<META NAME="date" CONTENT="2013-08-06">

<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">


</HEAD>

<BODY BGCOLOR="white">
<FONT size="+1" CLASS="FrameHeadingFont">
<B>All Classes</B></FONT>
<BR>

<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="controllers/AuthFileSecurity.html" title="class in controllers">AuthFileSecurity</A>
<BR>
<A HREF="controllers/Check.html" title="annotation in controllers">Check</A>
<BR>
<A HREF="play/modules/fileauth/FileAuth.html" title="class in play.modules.fileauth">FileAuth</A>
<BR>
<A HREF="play/modules/fileauth/FileAuthPlugin.html" title="class in play.modules.fileauth">FileAuthPlugin</A>
<BR>
<A HREF="play/modules/fileauth/utils/MD5Crypt.html" title="class in play.modules.fileauth.utils">MD5Crypt</A>
<BR>
<A HREF="play/modules/fileauth/ScanJob.html" title="class in play.modules.fileauth">ScanJob</A>
<BR>
<A HREF="controllers/Secure.html" title="class in controllers">Secure</A>
<BR>
<A HREF="controllers/Secure.Security.html" title="class in controllers">Secure.Security</A>
<BR>
</FONT></TD>
</TR>
</TABLE>

</BODY>
</HTML>
PK�����*†9D?ò÷Mo��o��R���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/stylesheet.css/* Javadoc style sheet */

/* Define colors, fonts and other style attributes here to override the defaults */

/* Page background color */
body { background-color: #FFFFFF; color:#000000 }

/* Headings */
h1 { font-size: 145% }

/* Table colors */
.TableHeadingColor     { background: #CCCCFF; color:#000000 } /* Dark mauve */
.TableSubHeadingColor  { background: #EEEEFF; color:#000000 } /* Light mauve */
.TableRowColor         { background: #FFFFFF; color:#000000 } /* White */

/* Font used in left-hand frame lists */
.FrameTitleFont   { font-size: 100%; font-family: Helvetica, Arial, sans-serif; color:#000000 }
.FrameHeadingFont { font-size:  90%; font-family: Helvetica, Arial, sans-serif; color:#000000 }
.FrameItemFont    { font-size:  90%; font-family: Helvetica, Arial, sans-serif; color:#000000 }

/* Navigation bar fonts and colors */
.NavBarCell1    { background-color:#EEEEFF; color:#000000} /* Light mauve */
.NavBarCell1Rev { background-color:#00008B; color:#FFFFFF} /* Dark Blue */
.NavBarFont1    { font-family: Arial, Helvetica, sans-serif; color:#000000;color:#000000;}
.NavBarFont1Rev { font-family: Arial, Helvetica, sans-serif; color:#FFFFFF;color:#FFFFFF;}

.NavBarCell2    { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF; color:#000000}
.NavBarCell3    { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF; color:#000000}

PK�����*†9D¤ï‡#��#��Q���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/help-doc.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_26) on Tue Aug 06 19:00:49 CEST 2013 -->
<TITLE>
API Help
</TITLE>

<META NAME="date" CONTENT="2013-08-06">

<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">

<SCRIPT type="text/javascript">
function windowTitle()
{
    if (location.href.indexOf('is-external=true') == -1) {
        parent.document.title="API Help";
    }
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>

</HEAD>

<BODY BGCOLOR="white" onload="windowTitle();">
<HR>


<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Help</B></FONT>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html?help-doc.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="help-doc.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->

<HR>
<CENTER>
<H1>
How This API Document Is Organized</H1>
</CENTER>
This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.<H3>
Overview</H3>
<BLOCKQUOTE>

<P>
The <A HREF="overview-summary.html">Overview</A> page is the front page of this API document and provides a list of all packages with a summary for each.  This page can also contain an overall description of the set of packages.</BLOCKQUOTE>
<H3>
Package</H3>
<BLOCKQUOTE>

<P>
Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain four categories:<UL>
<LI>Interfaces (italic)<LI>Classes<LI>Enums<LI>Exceptions<LI>Errors<LI>Annotation Types</UL>
</BLOCKQUOTE>
<H3>
Class/Interface</H3>
<BLOCKQUOTE>

<P>
Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:<UL>
<LI>Class inheritance diagram<LI>Direct Subclasses<LI>All Known Subinterfaces<LI>All Known Implementing Classes<LI>Class/interface declaration<LI>Class/interface description
<P>
<LI>Nested Class Summary<LI>Field Summary<LI>Constructor Summary<LI>Method Summary
<P>
<LI>Field Detail<LI>Constructor Detail<LI>Method Detail</UL>
Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.</BLOCKQUOTE>
</BLOCKQUOTE>
<H3>
Annotation Type</H3>
<BLOCKQUOTE>

<P>
Each annotation type has its own separate page with the following sections:<UL>
<LI>Annotation Type declaration<LI>Annotation Type description<LI>Required Element Summary<LI>Optional Element Summary<LI>Element Detail</UL>
</BLOCKQUOTE>
</BLOCKQUOTE>
<H3>
Enum</H3>
<BLOCKQUOTE>

<P>
Each enum has its own separate page with the following sections:<UL>
<LI>Enum declaration<LI>Enum description<LI>Enum Constant Summary<LI>Enum Constant Detail</UL>
</BLOCKQUOTE>
<H3>
Tree (Class Hierarchy)</H3>
<BLOCKQUOTE>
There is a <A HREF="overview-tree.html">Class Hierarchy</A> page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with <code>java.lang.Object</code>. The interfaces do not inherit from <code>java.lang.Object</code>.<UL>
<LI>When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.<LI>When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.</UL>
</BLOCKQUOTE>
<H3>
Deprecated API</H3>
<BLOCKQUOTE>
The <A HREF="deprecated-list.html">Deprecated API</A> page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.</BLOCKQUOTE>
<H3>
Index</H3>
<BLOCKQUOTE>
The <A HREF="index-all.html">Index</A> contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.</BLOCKQUOTE>
<H3>
Prev/Next</H3>
These links take you to the next or previous class, interface, package, or related page.<H3>
Frames/No Frames</H3>
These links show and hide the HTML frames.  All pages are available with or without frames.
<P>
<H3>
Serialized Form</H3>
Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description.
<P>
<H3>
Constant Field Values</H3>
The <a href="constant-values.html">Constant Field Values</a> page lists the static final fields and their values.
<P>
<FONT SIZE="-1">
<EM>
This help file applies to API documentation generated using the standard doclet.</EM>
</FONT>
<BR>
<HR>


<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Help</B></FONT>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html?help-doc.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="help-doc.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->

<HR>

</BODY>
</HTML>
PK�����*†9DoA����Y���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/allclasses-frame.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_26) on Tue Aug 06 19:00:49 CEST 2013 -->
<TITLE>
All Classes
</TITLE>

<META NAME="date" CONTENT="2013-08-06">

<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">


</HEAD>

<BODY BGCOLOR="white">
<FONT size="+1" CLASS="FrameHeadingFont">
<B>All Classes</B></FONT>
<BR>

<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="controllers/AuthFileSecurity.html" title="class in controllers" target="classFrame">AuthFileSecurity</A>
<BR>
<A HREF="controllers/Check.html" title="annotation in controllers" target="classFrame">Check</A>
<BR>
<A HREF="play/modules/fileauth/FileAuth.html" title="class in play.modules.fileauth" target="classFrame">FileAuth</A>
<BR>
<A HREF="play/modules/fileauth/FileAuthPlugin.html" title="class in play.modules.fileauth" target="classFrame">FileAuthPlugin</A>
<BR>
<A HREF="play/modules/fileauth/utils/MD5Crypt.html" title="class in play.modules.fileauth.utils" target="classFrame">MD5Crypt</A>
<BR>
<A HREF="play/modules/fileauth/ScanJob.html" title="class in play.modules.fileauth" target="classFrame">ScanJob</A>
<BR>
<A HREF="controllers/Secure.html" title="class in controllers" target="classFrame">Secure</A>
<BR>
<A HREF="controllers/Secure.Security.html" title="class in controllers" target="classFrame">Secure.Security</A>
<BR>
</FONT></TD>
</TR>
</TABLE>

</BODY>
</HTML>
PK�����*†9DäðVÆ��Æ��X���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/constant-values.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_26) on Tue Aug 06 19:00:49 CEST 2013 -->
<TITLE>
Constant Field Values
</TITLE>

<META NAME="date" CONTENT="2013-08-06">

<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">

<SCRIPT type="text/javascript">
function windowTitle()
{
    if (location.href.indexOf('is-external=true') == -1) {
        parent.document.title="Constant Field Values";
    }
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>

</HEAD>

<BODY BGCOLOR="white" onload="windowTitle();">
<HR>


<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html?constant-values.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="constant-values.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->

<HR>
<CENTER>
<H1>
Constant Field Values</H1>
</CENTER>
<HR SIZE="4" NOSHADE>
<B>Contents</B><UL>
<LI><A HREF="#play.modules">play.modules.*</A>
</UL>

<A NAME="play.modules"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left"><FONT SIZE="+2">
play.modules.*</FONT></TH>
</TR>
</TABLE>

<P>

<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left" COLSPAN="3">play.modules.fileauth.<A HREF="play/modules/fileauth/FileAuth.html" title="class in play.modules.fileauth">FileAuth</A></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<A NAME="play.modules.fileauth.FileAuth.AUTH_FILE_GROUPS_CACHE_KEY"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
<TD ALIGN="left"><CODE><A HREF="play/modules/fileauth/FileAuth.html#AUTH_FILE_GROUPS_CACHE_KEY">AUTH_FILE_GROUPS_CACHE_KEY</A></CODE></TD>
<TD ALIGN="right"><CODE>"AUTH_FILE_GROUPS"</CODE></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<A NAME="play.modules.fileauth.FileAuth.AUTH_FILE_USERS_CACHE_KEY"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
<TD ALIGN="left"><CODE><A HREF="play/modules/fileauth/FileAuth.html#AUTH_FILE_USERS_CACHE_KEY">AUTH_FILE_USERS_CACHE_KEY</A></CODE></TD>
<TD ALIGN="right"><CODE>"AUTH_FILE_USERS"</CODE></TD>
</TR>
</FONT></TD>
</TR>
</TABLE>

<P>

<P>

<TABLE BORDER="1" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left" COLSPAN="3">play.modules.fileauth.utils.<A HREF="play/modules/fileauth/utils/MD5Crypt.html" title="class in play.modules.fileauth.utils">MD5Crypt</A></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<A NAME="play.modules.fileauth.utils.MD5Crypt.itoa64"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
<TD ALIGN="left"><CODE><A HREF="play/modules/fileauth/utils/MD5Crypt.html#itoa64">itoa64</A></CODE></TD>
<TD ALIGN="right"><CODE>"./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"</CODE></TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<A NAME="play.modules.fileauth.utils.MD5Crypt.SALTCHARS"><!-- --></A><TD ALIGN="right"><FONT SIZE="-1">
<CODE>public&nbsp;static&nbsp;final&nbsp;java.lang.String</CODE></FONT></TD>
<TD ALIGN="left"><CODE><A HREF="play/modules/fileauth/utils/MD5Crypt.html#SALTCHARS">SALTCHARS</A></CODE></TD>
<TD ALIGN="right"><CODE>"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890"</CODE></TD>
</TR>
</FONT></TD>
</TR>
</TABLE>

<P>

<P>
<HR>


<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html?constant-values.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="constant-values.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->

<HR>

</BODY>
</HTML>
PK�����*†9DA
£ÉÒ��Ò��W���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/overview-frame.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_26) on Tue Aug 06 19:00:49 CEST 2013 -->
<TITLE>
Overview List
</TITLE>

<META NAME="date" CONTENT="2013-08-06">

<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">


</HEAD>

<BODY BGCOLOR="white">

<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
<TR>
<TH ALIGN="left" NOWRAP><FONT size="+1" CLASS="FrameTitleFont">
<B></B></FONT></TH>
</TR>
</TABLE>

<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
<TR>
<TD NOWRAP><FONT CLASS="FrameItemFont"><A HREF="allclasses-frame.html" target="packageFrame">All Classes</A></FONT>
<P>
<FONT size="+1" CLASS="FrameHeadingFont">
Packages</FONT>
<BR>
<FONT CLASS="FrameItemFont"><A HREF="controllers/package-frame.html" target="packageFrame">controllers</A></FONT>
<BR>
<FONT CLASS="FrameItemFont"><A HREF="play/modules/fileauth/package-frame.html" target="packageFrame">play.modules.fileauth</A></FONT>
<BR>
<FONT CLASS="FrameItemFont"><A HREF="play/modules/fileauth/utils/package-frame.html" target="packageFrame">play.modules.fileauth.utils</A></FONT>
<BR>
</TD>
</TR>
</TABLE>

<P>
&nbsp;
</BODY>
</HTML>
PK�����*†9DàóŸ8wJ��wJ��R���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/index-all.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_26) on Tue Aug 06 19:00:49 CEST 2013 -->
<TITLE>
Index
</TITLE>

<META NAME="date" CONTENT="2013-08-06">

<LINK REL ="stylesheet" TYPE="text/css" HREF="./stylesheet.css" TITLE="Style">

<SCRIPT type="text/javascript">
function windowTitle()
{
    if (location.href.indexOf('is-external=true') == -1) {
        parent.document.title="Index";
    }
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>

</HEAD>

<BODY BGCOLOR="white" onload="windowTitle();">
<HR>


<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="./overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="./overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="./deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="./help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="./index.html?index-all.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="index-all.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="./allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="./allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->

<A HREF="#_A_">A</A> <A HREF="#_B_">B</A> <A HREF="#_C_">C</A> <A HREF="#_D_">D</A> <A HREF="#_F_">F</A> <A HREF="#_G_">G</A> <A HREF="#_I_">I</A> <A HREF="#_L_">L</A> <A HREF="#_M_">M</A> <A HREF="#_O_">O</A> <A HREF="#_P_">P</A> <A HREF="#_S_">S</A> <A HREF="#_T_">T</A> <A HREF="#_V_">V</A> <HR>
<A NAME="_A_"><!-- --></A><H2>
<B>A</B></H2>
<DL>
<DT><A HREF="./play/modules/fileauth/utils/MD5Crypt.html#apacheCrypt(java.lang.String)"><B>apacheCrypt(String)</B></A> - 
Static method in class play.modules.fileauth.utils.<A HREF="./play/modules/fileauth/utils/MD5Crypt.html" title="class in play.modules.fileauth.utils">MD5Crypt</A>
<DD>This method generates an Apache MD5 compatible
 md5-encoded password hash from a plaintext password and a
 salt.
<DT><A HREF="./play/modules/fileauth/utils/MD5Crypt.html#apacheCrypt(java.lang.String, java.lang.String)"><B>apacheCrypt(String, String)</B></A> - 
Static method in class play.modules.fileauth.utils.<A HREF="./play/modules/fileauth/utils/MD5Crypt.html" title="class in play.modules.fileauth.utils">MD5Crypt</A>
<DD>This method actually generates an Apache MD5 compatible
 md5-encoded password hash from a plaintext password and a
 salt.
<DT><A HREF="./play/modules/fileauth/FileAuth.html#AUTH_FILE_GROUPS_CACHE_KEY"><B>AUTH_FILE_GROUPS_CACHE_KEY</B></A> - 
Static variable in class play.modules.fileauth.<A HREF="./play/modules/fileauth/FileAuth.html" title="class in play.modules.fileauth">FileAuth</A>
<DD>&nbsp;
<DT><A HREF="./play/modules/fileauth/FileAuth.html#AUTH_FILE_USERS_CACHE_KEY"><B>AUTH_FILE_USERS_CACHE_KEY</B></A> - 
Static variable in class play.modules.fileauth.<A HREF="./play/modules/fileauth/FileAuth.html" title="class in play.modules.fileauth">FileAuth</A>
<DD>&nbsp;
<DT><A HREF="./controllers/Secure.html#authenticate(java.lang.String, java.lang.String, boolean)"><B>authenticate(String, String, boolean)</B></A> - 
Static method in class controllers.<A HREF="./controllers/Secure.html" title="class in controllers">Secure</A>
<DD>&nbsp;
<DT><A HREF="./controllers/AuthFileSecurity.html#authentify(java.lang.String, java.lang.String)"><B>authentify(String, String)</B></A> - 
Static method in class controllers.<A HREF="./controllers/AuthFileSecurity.html" title="class in controllers">AuthFileSecurity</A>
<DD>Authentify an user against the given AuthFile.
<DT><A HREF="./controllers/AuthFileSecurity.html" title="class in controllers"><B>AuthFileSecurity</B></A> - Class in <A HREF="./controllers/package-summary.html">controllers</A><DD>This Class provides basice Security Functions for the Play! Security Plugin.<DT><A HREF="./controllers/AuthFileSecurity.html#AuthFileSecurity()"><B>AuthFileSecurity()</B></A> - 
Constructor for class controllers.<A HREF="./controllers/AuthFileSecurity.html" title="class in controllers">AuthFileSecurity</A>
<DD>&nbsp;
</DL>
<HR>
<A NAME="_B_"><!-- --></A><H2>
<B>B</B></H2>
<DL>
<DT><A HREF="./play/modules/fileauth/utils/MD5Crypt.html#bytes2u(byte)"><B>bytes2u(byte)</B></A> - 
Static method in class play.modules.fileauth.utils.<A HREF="./play/modules/fileauth/utils/MD5Crypt.html" title="class in play.modules.fileauth.utils">MD5Crypt</A>
<DD>convert an encoded unsigned byte value into a int
 with the unsigned value.
</DL>
<HR>
<A NAME="_C_"><!-- --></A><H2>
<B>C</B></H2>
<DL>
<DT><A HREF="./controllers/AuthFileSecurity.html#check(java.lang.String)"><B>check(String)</B></A> - 
Static method in class controllers.<A HREF="./controllers/AuthFileSecurity.html" title="class in controllers">AuthFileSecurity</A>
<DD>Checks if the current user (that is loged in) has the profile (e.g.
<DT><A HREF="./controllers/Check.html" title="annotation in controllers"><B>Check</B></A> - Annotation Type in <A HREF="./controllers/package-summary.html">controllers</A><DD>&nbsp;<DT><A HREF="./play/modules/fileauth/utils/MD5Crypt.html#clearbits(byte[])"><B>clearbits(byte[])</B></A> - 
Static method in class play.modules.fileauth.utils.<A HREF="./play/modules/fileauth/utils/MD5Crypt.html" title="class in play.modules.fileauth.utils">MD5Crypt</A>
<DD>&nbsp;
<DT><A HREF="./play/modules/fileauth/FileAuth.html#contains(java.lang.String, java.lang.String)"><B>contains(String, String)</B></A> - 
Static method in class play.modules.fileauth.<A HREF="./play/modules/fileauth/FileAuth.html" title="class in play.modules.fileauth">FileAuth</A>
<DD>Checks if a group contains a given username.
<DT><A HREF="./controllers/package-summary.html"><B>controllers</B></A> - package controllers<DD>&nbsp;<DT><A HREF="./play/modules/fileauth/utils/MD5Crypt.html#crypt(java.lang.String)"><B>crypt(String)</B></A> - 
Static method in class play.modules.fileauth.utils.<A HREF="./play/modules/fileauth/utils/MD5Crypt.html" title="class in play.modules.fileauth.utils">MD5Crypt</A>
<DD>This method actually generates a OpenBSD/FreeBSD/Linux PAM compatible
 md5-encoded password hash from a plaintext password and a
 salt.
<DT><A HREF="./play/modules/fileauth/utils/MD5Crypt.html#crypt(java.lang.String, java.lang.String)"><B>crypt(String, String)</B></A> - 
Static method in class play.modules.fileauth.utils.<A HREF="./play/modules/fileauth/utils/MD5Crypt.html" title="class in play.modules.fileauth.utils">MD5Crypt</A>
<DD>This method actually generates a OpenBSD/FreeBSD/Linux PAM compatible
 md5-encoded password hash from a plaintext password and a
 salt.
<DT><A HREF="./play/modules/fileauth/utils/MD5Crypt.html#crypt(java.lang.String, java.lang.String, java.lang.String)"><B>crypt(String, String, String)</B></A> - 
Static method in class play.modules.fileauth.utils.<A HREF="./play/modules/fileauth/utils/MD5Crypt.html" title="class in play.modules.fileauth.utils">MD5Crypt</A>
<DD>This method actually generates md5-encoded password hash from
 a plaintext password, a salt, and a magic string.
</DL>
<HR>
<A NAME="_D_"><!-- --></A><H2>
<B>D</B></H2>
<DL>
<DT><A HREF="./play/modules/fileauth/ScanJob.html#doJob()"><B>doJob()</B></A> - 
Method in class play.modules.fileauth.<A HREF="./play/modules/fileauth/ScanJob.html" title="class in play.modules.fileauth">ScanJob</A>
<DD>&nbsp;
</DL>
<HR>
<A NAME="_F_"><!-- --></A><H2>
<B>F</B></H2>
<DL>
<DT><A HREF="./play/modules/fileauth/FileAuth.html" title="class in play.modules.fileauth"><B>FileAuth</B></A> - Class in <A HREF="./play/modules/fileauth/package-summary.html">play.modules.fileauth</A><DD>Basic Wrapper for all FileAuth Functions.<DT><A HREF="./play/modules/fileauth/FileAuth.html#FileAuth()"><B>FileAuth()</B></A> - 
Constructor for class play.modules.fileauth.<A HREF="./play/modules/fileauth/FileAuth.html" title="class in play.modules.fileauth">FileAuth</A>
<DD>&nbsp;
<DT><A HREF="./play/modules/fileauth/FileAuthPlugin.html" title="class in play.modules.fileauth"><B>FileAuthPlugin</B></A> - Class in <A HREF="./play/modules/fileauth/package-summary.html">play.modules.fileauth</A><DD>Entry Class for first file scan.<DT><A HREF="./play/modules/fileauth/FileAuthPlugin.html#FileAuthPlugin()"><B>FileAuthPlugin()</B></A> - 
Constructor for class play.modules.fileauth.<A HREF="./play/modules/fileauth/FileAuthPlugin.html" title="class in play.modules.fileauth">FileAuthPlugin</A>
<DD>&nbsp;
</DL>
<HR>
<A NAME="_G_"><!-- --></A><H2>
<B>G</B></H2>
<DL>
<DT><A HREF="./play/modules/fileauth/FileAuth.html#getGroups()"><B>getGroups()</B></A> - 
Static method in class play.modules.fileauth.<A HREF="./play/modules/fileauth/FileAuth.html" title="class in play.modules.fileauth">FileAuth</A>
<DD>Returns a Map of all Groups (groups/usernames).
<DT><A HREF="./play/modules/fileauth/FileAuth.html#getUsers()"><B>getUsers()</B></A> - 
Static method in class play.modules.fileauth.<A HREF="./play/modules/fileauth/FileAuth.html" title="class in play.modules.fileauth">FileAuth</A>
<DD>Returns a Map of all Users (user/password hash).
</DL>
<HR>
<A NAME="_I_"><!-- --></A><H2>
<B>I</B></H2>
<DL>
<DT><A HREF="./play/modules/fileauth/FileAuth.html#IS_ENABLED"><B>IS_ENABLED</B></A> - 
Static variable in class play.modules.fileauth.<A HREF="./play/modules/fileauth/FileAuth.html" title="class in play.modules.fileauth">FileAuth</A>
<DD>&nbsp;
<DT><A HREF="./play/modules/fileauth/utils/MD5Crypt.html#itoa64"><B>itoa64</B></A> - 
Static variable in class play.modules.fileauth.utils.<A HREF="./play/modules/fileauth/utils/MD5Crypt.html" title="class in play.modules.fileauth.utils">MD5Crypt</A>
<DD>&nbsp;
</DL>
<HR>
<A NAME="_L_"><!-- --></A><H2>
<B>L</B></H2>
<DL>
<DT><A HREF="./controllers/Secure.html#login()"><B>login()</B></A> - 
Static method in class controllers.<A HREF="./controllers/Secure.html" title="class in controllers">Secure</A>
<DD>&nbsp;
<DT><A HREF="./controllers/Secure.html#logout()"><B>logout()</B></A> - 
Static method in class controllers.<A HREF="./controllers/Secure.html" title="class in controllers">Secure</A>
<DD>&nbsp;
</DL>
<HR>
<A NAME="_M_"><!-- --></A><H2>
<B>M</B></H2>
<DL>
<DT><A HREF="./play/modules/fileauth/utils/MD5Crypt.html#main(java.lang.String[])"><B>main(String[])</B></A> - 
Static method in class play.modules.fileauth.utils.<A HREF="./play/modules/fileauth/utils/MD5Crypt.html" title="class in play.modules.fileauth.utils">MD5Crypt</A>
<DD>Command line test rig.
<DT><A HREF="./play/modules/fileauth/utils/MD5Crypt.html" title="class in play.modules.fileauth.utils"><B>MD5Crypt</B></A> - Class in <A HREF="./play/modules/fileauth/utils/package-summary.html">play.modules.fileauth.utils</A><DD>This class defines a method,
 <A HREF="./play/modules/fileauth/utils/MD5Crypt.html#crypt(java.lang.String, java.lang.String)"><CODE>crypt()</CODE></A>, which
 takes a password and a salt string and generates an OpenBSD/FreeBSD/Linux-compatible
 md5-encoded password entry.<DT><A HREF="./play/modules/fileauth/utils/MD5Crypt.html#MD5Crypt()"><B>MD5Crypt()</B></A> - 
Constructor for class play.modules.fileauth.utils.<A HREF="./play/modules/fileauth/utils/MD5Crypt.html" title="class in play.modules.fileauth.utils">MD5Crypt</A>
<DD>&nbsp;
</DL>
<HR>
<A NAME="_O_"><!-- --></A><H2>
<B>O</B></H2>
<DL>
<DT><A HREF="./play/modules/fileauth/FileAuthPlugin.html#onApplicationStart()"><B>onApplicationStart()</B></A> - 
Method in class play.modules.fileauth.<A HREF="./play/modules/fileauth/FileAuthPlugin.html" title="class in play.modules.fileauth">FileAuthPlugin</A>
<DD>Trigger to scan the files for the first Time.
</DL>
<HR>
<A NAME="_P_"><!-- --></A><H2>
<B>P</B></H2>
<DL>
<DT><A HREF="./play/modules/fileauth/package-summary.html"><B>play.modules.fileauth</B></A> - package play.modules.fileauth<DD>&nbsp;<DT><A HREF="./play/modules/fileauth/utils/package-summary.html"><B>play.modules.fileauth.utils</B></A> - package play.modules.fileauth.utils<DD>&nbsp;</DL>
<HR>
<A NAME="_S_"><!-- --></A><H2>
<B>S</B></H2>
<DL>
<DT><A HREF="./play/modules/fileauth/utils/MD5Crypt.html#SALTCHARS"><B>SALTCHARS</B></A> - 
Static variable in class play.modules.fileauth.utils.<A HREF="./play/modules/fileauth/utils/MD5Crypt.html" title="class in play.modules.fileauth.utils">MD5Crypt</A>
<DD>&nbsp;
<DT><A HREF="./play/modules/fileauth/FileAuth.html#scanGroups()"><B>scanGroups()</B></A> - 
Static method in class play.modules.fileauth.<A HREF="./play/modules/fileauth/FileAuth.html" title="class in play.modules.fileauth">FileAuth</A>
<DD>Rescans the groups file.
<DT><A HREF="./play/modules/fileauth/ScanJob.html" title="class in play.modules.fileauth"><B>ScanJob</B></A> - Class in <A HREF="./play/modules/fileauth/package-summary.html">play.modules.fileauth</A><DD>Periodically Scan of user/group files.<DT><A HREF="./play/modules/fileauth/ScanJob.html#ScanJob()"><B>ScanJob()</B></A> - 
Constructor for class play.modules.fileauth.<A HREF="./play/modules/fileauth/ScanJob.html" title="class in play.modules.fileauth">ScanJob</A>
<DD>&nbsp;
<DT><A HREF="./play/modules/fileauth/FileAuth.html#scanUsers()"><B>scanUsers()</B></A> - 
Static method in class play.modules.fileauth.<A HREF="./play/modules/fileauth/FileAuth.html" title="class in play.modules.fileauth">FileAuth</A>
<DD>Rescans the users file.
<DT><A HREF="./controllers/Secure.html" title="class in controllers"><B>Secure</B></A> - Class in <A HREF="./controllers/package-summary.html">controllers</A><DD>&nbsp;<DT><A HREF="./controllers/Secure.html#Secure()"><B>Secure()</B></A> - 
Constructor for class controllers.<A HREF="./controllers/Secure.html" title="class in controllers">Secure</A>
<DD>&nbsp;
<DT><A HREF="./controllers/Secure.Security.html" title="class in controllers"><B>Secure.Security</B></A> - Class in <A HREF="./controllers/package-summary.html">controllers</A><DD>&nbsp;<DT><A HREF="./controllers/Secure.Security.html#Secure.Security()"><B>Secure.Security()</B></A> - 
Constructor for class controllers.<A HREF="./controllers/Secure.Security.html" title="class in controllers">Secure.Security</A>
<DD>&nbsp;
</DL>
<HR>
<A NAME="_T_"><!-- --></A><H2>
<B>T</B></H2>
<DL>
<DT><A HREF="./play/modules/fileauth/utils/MD5Crypt.html#to64(long, int)"><B>to64(long, int)</B></A> - 
Static method in class play.modules.fileauth.utils.<A HREF="./play/modules/fileauth/utils/MD5Crypt.html" title="class in play.modules.fileauth.utils">MD5Crypt</A>
<DD>&nbsp;
</DL>
<HR>
<A NAME="_V_"><!-- --></A><H2>
<B>V</B></H2>
<DL>
<DT><A HREF="./play/modules/fileauth/FileAuth.html#validate(java.lang.String, java.lang.String)"><B>validate(String, String)</B></A> - 
Static method in class play.modules.fileauth.<A HREF="./play/modules/fileauth/FileAuth.html" title="class in play.modules.fileauth">FileAuth</A>
<DD>Validates an user with a given password agains the user/password hash
 mapping.
<DT><A HREF="./play/modules/fileauth/utils/MD5Crypt.html#verifyPassword(java.lang.String, java.lang.String)"><B>verifyPassword(String, String)</B></A> - 
Static method in class play.modules.fileauth.utils.<A HREF="./play/modules/fileauth/utils/MD5Crypt.html" title="class in play.modules.fileauth.utils">MD5Crypt</A>
<DD>This method tests a plaintext password against a md5Crypt'ed hash and returns
 true if the password matches the hash.
</DL>
<HR>
<A HREF="#_A_">A</A> <A HREF="#_B_">B</A> <A HREF="#_C_">C</A> <A HREF="#_D_">D</A> <A HREF="#_F_">F</A> <A HREF="#_G_">G</A> <A HREF="#_I_">I</A> <A HREF="#_L_">L</A> <A HREF="#_M_">M</A> <A HREF="#_O_">O</A> <A HREF="#_P_">P</A> <A HREF="#_S_">S</A> <A HREF="#_T_">T</A> <A HREF="#_V_">V</A> 

<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="./overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="./overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="./deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Index</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="./help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="./index.html?index-all.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="index-all.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="./allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="./allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->

<HR>

</BODY>
</HTML>
PK�����*†9DÀ	È��ˆ��N���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/index.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc on Tue Aug 06 19:00:49 CEST 2013-->
<TITLE>
Generated Documentation (Untitled)
</TITLE>
<SCRIPT type="text/javascript">
    targetPage = "" + window.location.search;
    if (targetPage != "" && targetPage != "undefined")
        targetPage = targetPage.substring(1);
    if (targetPage.indexOf(":") != -1)
        targetPage = "undefined";
    function loadFrames() {
        if (targetPage != "" && targetPage != "undefined")
             top.classFrame.location = top.targetPage;
    }
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>
</HEAD>
<FRAMESET cols="20%,80%" title="" onLoad="top.loadFrames()">
<FRAMESET rows="30%,70%" title="" onLoad="top.loadFrames()">
<FRAME src="overview-frame.html" name="packageListFrame" title="All Packages">
<FRAME src="allclasses-frame.html" name="packageFrame" title="All classes and interfaces (except non-static nested types)">
</FRAMESET>
<FRAME src="overview-summary.html" name="classFrame" title="Package, class and interface descriptions" scrolling="yes">
<NOFRAMES>
<H2>
Frame Alert</H2>

<P>
This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
<BR>
Link to<A HREF="overview-summary.html">Non-frame version.</A>
</NOFRAMES>
</FRAMESET>
</HTML>
PK�����*†9D^Ï}É€��€��Y���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/overview-summary.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_26) on Tue Aug 06 19:00:49 CEST 2013 -->
<TITLE>
Overview
</TITLE>

<META NAME="date" CONTENT="2013-08-06">

<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">

<SCRIPT type="text/javascript">
function windowTitle()
{
    if (location.href.indexOf('is-external=true') == -1) {
        parent.document.title="Overview";
    }
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>

</HEAD>

<BODY BGCOLOR="white" onload="windowTitle();">
<HR>


<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Overview</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html?overview-summary.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="overview-summary.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->

<HR>

<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Packages</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="20%"><B><A HREF="controllers/package-summary.html">controllers</A></B></TD>
<TD>&nbsp;</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="20%"><B><A HREF="play/modules/fileauth/package-summary.html">play.modules.fileauth</A></B></TD>
<TD>&nbsp;</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="20%"><B><A HREF="play/modules/fileauth/utils/package-summary.html">play.modules.fileauth.utils</A></B></TD>
<TD>&nbsp;</TD>
</TR>
</TABLE>

<P>
&nbsp;<HR>


<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Overview</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html?overview-summary.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="overview-summary.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->

<HR>

</BODY>
</HTML>
PK�����*†9DaYWY����X���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/deprecated-list.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_26) on Tue Aug 06 19:00:49 CEST 2013 -->
<TITLE>
Deprecated List
</TITLE>

<META NAME="date" CONTENT="2013-08-06">

<LINK REL ="stylesheet" TYPE="text/css" HREF="stylesheet.css" TITLE="Style">

<SCRIPT type="text/javascript">
function windowTitle()
{
    if (location.href.indexOf('is-external=true') == -1) {
        parent.document.title="Deprecated List";
    }
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>

</HEAD>

<BODY BGCOLOR="white" onload="windowTitle();">
<HR>


<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Deprecated</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html?deprecated-list.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="deprecated-list.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->

<HR>
<CENTER>
<H2>
<B>Deprecated API</B></H2>
</CENTER>
<HR SIZE="4" NOSHADE>
<B>Contents</B><UL>
</UL>

<HR>


<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Package</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="overview-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Deprecated</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="index.html?deprecated-list.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="deprecated-list.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->

<HR>

</BODY>
</HTML>
PK�����*†9DMüƒ9���9���Y���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/resources/inherit.gifGIF89a��€��ÿÿÿ���,�������„	¡½®DršjñԐ;߀Q@–¦…N�;PK�����*†9DæÎæT?��?��g���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/play/modules/fileauth/FileAuth.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_26) on Tue Aug 06 19:00:48 CEST 2013 -->
<TITLE>
FileAuth
</TITLE>

<META NAME="date" CONTENT="2013-08-06">

<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">

<SCRIPT type="text/javascript">
function windowTitle()
{
    if (location.href.indexOf('is-external=true') == -1) {
        parent.document.title="FileAuth";
    }
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>

</HEAD>

<BODY BGCOLOR="white" onload="windowTitle();">
<HR>


<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV CLASS&nbsp;
&nbsp;<A HREF="../../../play/modules/fileauth/FileAuthPlugin.html" title="class in play.modules.fileauth"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../../../index.html?play/modules/fileauth/FileAuth.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="FileAuth.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->

<HR>
<!-- ======== START OF CLASS DATA ======== -->
<H2>
<FONT SIZE="-1">
play.modules.fileauth</FONT>
<BR>
Class FileAuth</H2>
<PRE>
java.lang.Object
  <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>play.modules.fileauth.FileAuth</B>
</PRE>
<HR>
<DL>
<DT><PRE>public class <B>FileAuth</B><DT>extends java.lang.Object</DL>
</PRE>

<P>
Basic Wrapper for all FileAuth Functions.
<P>

<P>
<HR>

<P>
<!-- =========== FIELD SUMMARY =========== -->

<A NAME="field_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Field Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../play/modules/fileauth/FileAuth.html#AUTH_FILE_GROUPS_CACHE_KEY">AUTH_FILE_GROUPS_CACHE_KEY</A></B></CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../play/modules/fileauth/FileAuth.html#AUTH_FILE_USERS_CACHE_KEY">AUTH_FILE_USERS_CACHE_KEY</A></B></CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../play/modules/fileauth/FileAuth.html#IS_ENABLED">IS_ENABLED</A></B></CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../play/modules/fileauth/FileAuth.html#FileAuth()">FileAuth</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../play/modules/fileauth/FileAuth.html#contains(java.lang.String, java.lang.String)">contains</A></B>(java.lang.String&nbsp;group,
         java.lang.String&nbsp;user)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Checks if a group contains a given username.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;java.util.Map&lt;java.lang.String,java.util.Set&lt;java.lang.String&gt;&gt;</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../play/modules/fileauth/FileAuth.html#getGroups()">getGroups</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a Map of all Groups (groups/usernames).</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;java.util.Map&lt;java.lang.String,java.lang.String&gt;</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../play/modules/fileauth/FileAuth.html#getUsers()">getUsers</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Returns a Map of all Users (user/password hash).</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;java.util.Map&lt;java.lang.String,java.util.Set&lt;java.lang.String&gt;&gt;</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../play/modules/fileauth/FileAuth.html#scanGroups()">scanGroups</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Rescans the groups file.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;java.util.Map&lt;java.lang.String,java.lang.String&gt;</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../play/modules/fileauth/FileAuth.html#scanUsers()">scanUsers</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Rescans the users file.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../play/modules/fileauth/FileAuth.html#validate(java.lang.String, java.lang.String)">validate</A></B>(java.lang.String&nbsp;user,
         java.lang.String&nbsp;password)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Validates an user with a given password agains the user/password hash
 mapping.</TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>

<!-- ============ FIELD DETAIL =========== -->

<A NAME="field_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Field Detail</B></FONT></TH>
</TR>
</TABLE>

<A NAME="AUTH_FILE_USERS_CACHE_KEY"><!-- --></A><H3>
AUTH_FILE_USERS_CACHE_KEY</H3>
<PRE>
public static final java.lang.String <B>AUTH_FILE_USERS_CACHE_KEY</B></PRE>
<DL>
<DL>
<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#play.modules.fileauth.FileAuth.AUTH_FILE_USERS_CACHE_KEY">Constant Field Values</A></DL>
</DL>
<HR>

<A NAME="IS_ENABLED"><!-- --></A><H3>
IS_ENABLED</H3>
<PRE>
public static final boolean <B>IS_ENABLED</B></PRE>
<DL>
<DL>
</DL>
</DL>
<HR>

<A NAME="AUTH_FILE_GROUPS_CACHE_KEY"><!-- --></A><H3>
AUTH_FILE_GROUPS_CACHE_KEY</H3>
<PRE>
public static final java.lang.String <B>AUTH_FILE_GROUPS_CACHE_KEY</B></PRE>
<DL>
<DL>
<DT><B>See Also:</B><DD><A HREF="../../../constant-values.html#play.modules.fileauth.FileAuth.AUTH_FILE_GROUPS_CACHE_KEY">Constant Field Values</A></DL>
</DL>

<!-- ========= CONSTRUCTOR DETAIL ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>

<A NAME="FileAuth()"><!-- --></A><H3>
FileAuth</H3>
<PRE>
public <B>FileAuth</B>()</PRE>
<DL>
</DL>

<!-- ============ METHOD DETAIL ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>

<A NAME="getUsers()"><!-- --></A><H3>
getUsers</H3>
<PRE>
public static java.util.Map&lt;java.lang.String,java.lang.String&gt; <B>getUsers</B>()</PRE>
<DL>
<DD>Returns a Map of all Users (user/password hash).
<P>
<DD><DL>

<DT><B>Returns:</B><DD>the Map.</DL>
</DD>
</DL>
<HR>

<A NAME="getGroups()"><!-- --></A><H3>
getGroups</H3>
<PRE>
public static java.util.Map&lt;java.lang.String,java.util.Set&lt;java.lang.String&gt;&gt; <B>getGroups</B>()</PRE>
<DL>
<DD>Returns a Map of all Groups (groups/usernames).
<P>
<DD><DL>

<DT><B>Returns:</B><DD>the Map.</DL>
</DD>
</DL>
<HR>

<A NAME="contains(java.lang.String, java.lang.String)"><!-- --></A><H3>
contains</H3>
<PRE>
public static boolean <B>contains</B>(java.lang.String&nbsp;group,
                               java.lang.String&nbsp;user)</PRE>
<DL>
<DD>Checks if a group contains a given username.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>group</CODE> - the Group to check.<DD><CODE>user</CODE> - the user to check.
<DT><B>Returns:</B><DD>true if user is in group, otherwise false.</DL>
</DD>
</DL>
<HR>

<A NAME="validate(java.lang.String, java.lang.String)"><!-- --></A><H3>
validate</H3>
<PRE>
public static boolean <B>validate</B>(java.lang.String&nbsp;user,
                               java.lang.String&nbsp;password)</PRE>
<DL>
<DD>Validates an user with a given password agains the user/password hash
 mapping.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>user</CODE> - the given user.<DD><CODE>password</CODE> - the given password (clear text).
<DT><B>Returns:</B><DD>true if validation okay, otherwise false.</DL>
</DD>
</DL>
<HR>

<A NAME="scanUsers()"><!-- --></A><H3>
scanUsers</H3>
<PRE>
public static java.util.Map&lt;java.lang.String,java.lang.String&gt; <B>scanUsers</B>()</PRE>
<DL>
<DD>Rescans the users file.
<P>
<DD><DL>

<DT><B>Returns:</B><DD>the updated Map of users.</DL>
</DD>
</DL>
<HR>

<A NAME="scanGroups()"><!-- --></A><H3>
scanGroups</H3>
<PRE>
public static java.util.Map&lt;java.lang.String,java.util.Set&lt;java.lang.String&gt;&gt; <B>scanGroups</B>()</PRE>
<DL>
<DD>Rescans the groups file.
<P>
<DD><DL>

<DT><B>Returns:</B><DD>the updated Map of groups.</DL>
</DD>
</DL>
<!-- ========= END OF CLASS DATA ========= -->
<HR>


<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV CLASS&nbsp;
&nbsp;<A HREF="../../../play/modules/fileauth/FileAuthPlugin.html" title="class in play.modules.fileauth"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../../../index.html?play/modules/fileauth/FileAuth.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="FileAuth.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->

<HR>

</BODY>
</HTML>
PK�����*†9D°PÉÚ��Ú��k���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/play/modules/fileauth/package-tree.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_26) on Tue Aug 06 19:00:49 CEST 2013 -->
<TITLE>
play.modules.fileauth Class Hierarchy
</TITLE>

<META NAME="date" CONTENT="2013-08-06">

<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">

<SCRIPT type="text/javascript">
function windowTitle()
{
    if (location.href.indexOf('is-external=true') == -1) {
        parent.document.title="play.modules.fileauth Class Hierarchy";
    }
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>

</HEAD>

<BODY BGCOLOR="white" onload="windowTitle();">
<HR>


<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../controllers/package-tree.html"><B>PREV</B></A>&nbsp;
&nbsp;<A HREF="../../../play/modules/fileauth/utils/package-tree.html"><B>NEXT</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../../../index.html?play/modules/fileauth/package-tree.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->

<HR>
<CENTER>
<H2>
Hierarchy For Package play.modules.fileauth
</H2>
</CENTER>
<DL>
<DT><B>Package Hierarchies:</B><DD><A HREF="../../../overview-tree.html">All Packages</A></DL>
<HR>
<H2>
Class Hierarchy
</H2>
<UL>
<LI TYPE="circle">java.lang.Object<UL>
<LI TYPE="circle">play.modules.fileauth.<A HREF="../../../play/modules/fileauth/FileAuth.html" title="class in play.modules.fileauth"><B>FileAuth</B></A><LI TYPE="circle">play.Invoker.Invocation (implements java.lang.Runnable)
<UL>
<LI TYPE="circle">play.jobs.Job&lt;V&gt; (implements java.util.concurrent.Callable&lt;V&gt;)
<UL>
<LI TYPE="circle">play.modules.fileauth.<A HREF="../../../play/modules/fileauth/ScanJob.html" title="class in play.modules.fileauth"><B>ScanJob</B></A></UL>
</UL>
<LI TYPE="circle">play.PlayPlugin (implements java.lang.Comparable&lt;T&gt;)
<UL>
<LI TYPE="circle">play.modules.fileauth.<A HREF="../../../play/modules/fileauth/FileAuthPlugin.html" title="class in play.modules.fileauth"><B>FileAuthPlugin</B></A></UL>
</UL>
</UL>
<HR>


<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../controllers/package-tree.html"><B>PREV</B></A>&nbsp;
&nbsp;<A HREF="../../../play/modules/fileauth/utils/package-tree.html"><B>NEXT</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../../../index.html?play/modules/fileauth/package-tree.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->

<HR>

</BODY>
</HTML>
PK�����*†9D»ªQÚÖ��Ö��n���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/play/modules/fileauth/package-summary.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_26) on Tue Aug 06 19:00:49 CEST 2013 -->
<TITLE>
play.modules.fileauth
</TITLE>

<META NAME="date" CONTENT="2013-08-06">

<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">

<SCRIPT type="text/javascript">
function windowTitle()
{
    if (location.href.indexOf('is-external=true') == -1) {
        parent.document.title="play.modules.fileauth";
    }
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>

</HEAD>

<BODY BGCOLOR="white" onload="windowTitle();">
<HR>


<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../controllers/package-summary.html"><B>PREV PACKAGE</B></A>&nbsp;
&nbsp;<A HREF="../../../play/modules/fileauth/utils/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../../../index.html?play/modules/fileauth/package-summary.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->

<HR>
<H2>
Package play.modules.fileauth
</H2>

<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Class Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="15%"><B><A HREF="../../../play/modules/fileauth/FileAuth.html" title="class in play.modules.fileauth">FileAuth</A></B></TD>
<TD>Basic Wrapper for all FileAuth Functions.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="15%"><B><A HREF="../../../play/modules/fileauth/FileAuthPlugin.html" title="class in play.modules.fileauth">FileAuthPlugin</A></B></TD>
<TD>Entry Class for first file scan.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="15%"><B><A HREF="../../../play/modules/fileauth/ScanJob.html" title="class in play.modules.fileauth">ScanJob</A></B></TD>
<TD>Periodically Scan of user/group files.</TD>
</TR>
</TABLE>
&nbsp;

<P>
<DL>
</DL>
<HR>


<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../controllers/package-summary.html"><B>PREV PACKAGE</B></A>&nbsp;
&nbsp;<A HREF="../../../play/modules/fileauth/utils/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../../../index.html?play/modules/fileauth/package-summary.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->

<HR>

</BODY>
</HTML>
PK�����*†9Dp&·5��5��l���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/play/modules/fileauth/package-frame.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_26) on Tue Aug 06 19:00:49 CEST 2013 -->
<TITLE>
play.modules.fileauth
</TITLE>

<META NAME="date" CONTENT="2013-08-06">

<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">


</HEAD>

<BODY BGCOLOR="white">
<FONT size="+1" CLASS="FrameTitleFont">
<A HREF="../../../play/modules/fileauth/package-summary.html" target="classFrame">play.modules.fileauth</A></FONT>
<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
<TR>
<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
Classes</FONT>&nbsp;
<FONT CLASS="FrameItemFont">
<BR>
<A HREF="FileAuth.html" title="class in play.modules.fileauth" target="classFrame">FileAuth</A>
<BR>
<A HREF="FileAuthPlugin.html" title="class in play.modules.fileauth" target="classFrame">FileAuthPlugin</A>
<BR>
<A HREF="ScanJob.html" title="class in play.modules.fileauth" target="classFrame">ScanJob</A></FONT></TD>
</TR>
</TABLE>


</BODY>
</HTML>
PK�����*†9DeQ磿+��¿+��f���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/play/modules/fileauth/ScanJob.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_26) on Tue Aug 06 19:00:48 CEST 2013 -->
<TITLE>
ScanJob
</TITLE>

<META NAME="date" CONTENT="2013-08-06">

<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">

<SCRIPT type="text/javascript">
function windowTitle()
{
    if (location.href.indexOf('is-external=true') == -1) {
        parent.document.title="ScanJob";
    }
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>

</HEAD>

<BODY BGCOLOR="white" onload="windowTitle();">
<HR>


<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../play/modules/fileauth/FileAuthPlugin.html" title="class in play.modules.fileauth"><B>PREV CLASS</B></A>&nbsp;
&nbsp;NEXT CLASS</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../../../index.html?play/modules/fileauth/ScanJob.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="ScanJob.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_play.jobs.Job">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->

<HR>
<!-- ======== START OF CLASS DATA ======== -->
<H2>
<FONT SIZE="-1">
play.modules.fileauth</FONT>
<BR>
Class ScanJob</H2>
<PRE>
java.lang.Object
  <IMG SRC="../../../resources/inherit.gif" ALT="extended by ">play.Invoker.Invocation
      <IMG SRC="../../../resources/inherit.gif" ALT="extended by ">play.jobs.Job
          <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>play.modules.fileauth.ScanJob</B>
</PRE>
<DL>
<DT><B>All Implemented Interfaces:</B> <DD>java.lang.Runnable, java.util.concurrent.Callable</DD>
</DL>
<HR>
<DL>
<DT><PRE>public class <B>ScanJob</B><DT>extends play.jobs.Job</DL>
</PRE>

<P>
Periodically Scan of user/group files. Scan runs every 5 mins.
<P>

<P>
<HR>

<P>
<!-- =========== FIELD SUMMARY =========== -->

<A NAME="field_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Field Summary</B></FONT></TH>
</TR>
</TABLE>
&nbsp;<A NAME="fields_inherited_from_class_play.jobs.Job"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Fields inherited from class play.jobs.Job</B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>executor, invocationType, lastException, lastRun, wasError</CODE></TD>
</TR>
</TABLE>
&nbsp;
<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../play/modules/fileauth/ScanJob.html#ScanJob()">ScanJob</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../play/modules/fileauth/ScanJob.html#doJob()">doJob</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_play.jobs.Job"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Methods inherited from class play.jobs.Job</B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>_finally, call, doJobWithResult, every, every, execute, getInvocationContext, in, in, now, onException, run, toString</CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_play.Invoker.Invocation"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Methods inherited from class play.Invoker.Invocation</B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>after, before, init, onSuccess, preInit, suspend</CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait</CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>

<!-- ========= CONSTRUCTOR DETAIL ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>

<A NAME="ScanJob()"><!-- --></A><H3>
ScanJob</H3>
<PRE>
public <B>ScanJob</B>()</PRE>
<DL>
</DL>

<!-- ============ METHOD DETAIL ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>

<A NAME="doJob()"><!-- --></A><H3>
doJob</H3>
<PRE>
public void <B>doJob</B>()</PRE>
<DL>
<DD><DL>
<DT><B>Overrides:</B><DD><CODE>doJob</CODE> in class <CODE>play.jobs.Job</CODE></DL>
</DD>
<DD><DL>
</DL>
</DD>
</DL>
<!-- ========= END OF CLASS DATA ========= -->
<HR>


<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../play/modules/fileauth/FileAuthPlugin.html" title="class in play.modules.fileauth"><B>PREV CLASS</B></A>&nbsp;
&nbsp;NEXT CLASS</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../../../index.html?play/modules/fileauth/ScanJob.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="ScanJob.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_play.jobs.Job">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->

<HR>

</BODY>
</HTML>
PK�����*†9Duê
f©-��©-��m���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/play/modules/fileauth/FileAuthPlugin.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_26) on Tue Aug 06 19:00:48 CEST 2013 -->
<TITLE>
FileAuthPlugin
</TITLE>

<META NAME="date" CONTENT="2013-08-06">

<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../stylesheet.css" TITLE="Style">

<SCRIPT type="text/javascript">
function windowTitle()
{
    if (location.href.indexOf('is-external=true') == -1) {
        parent.document.title="FileAuthPlugin";
    }
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>

</HEAD>

<BODY BGCOLOR="white" onload="windowTitle();">
<HR>


<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../play/modules/fileauth/FileAuth.html" title="class in play.modules.fileauth"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../play/modules/fileauth/ScanJob.html" title="class in play.modules.fileauth"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../../../index.html?play/modules/fileauth/FileAuthPlugin.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="FileAuthPlugin.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_play.PlayPlugin">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->

<HR>
<!-- ======== START OF CLASS DATA ======== -->
<H2>
<FONT SIZE="-1">
play.modules.fileauth</FONT>
<BR>
Class FileAuthPlugin</H2>
<PRE>
java.lang.Object
  <IMG SRC="../../../resources/inherit.gif" ALT="extended by ">play.PlayPlugin
      <IMG SRC="../../../resources/inherit.gif" ALT="extended by "><B>play.modules.fileauth.FileAuthPlugin</B>
</PRE>
<DL>
<DT><B>All Implemented Interfaces:</B> <DD>java.lang.Comparable&lt;play.PlayPlugin&gt;</DD>
</DL>
<HR>
<DL>
<DT><PRE>public class <B>FileAuthPlugin</B><DT>extends play.PlayPlugin</DL>
</PRE>

<P>
Entry Class for first file scan.
<P>

<P>
<HR>

<P>
<!-- =========== FIELD SUMMARY =========== -->

<A NAME="field_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Field Summary</B></FONT></TH>
</TR>
</TABLE>
&nbsp;<A NAME="fields_inherited_from_class_play.PlayPlugin"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Fields inherited from class play.PlayPlugin</B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>index</CODE></TD>
</TR>
</TABLE>
&nbsp;
<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../play/modules/fileauth/FileAuthPlugin.html#FileAuthPlugin()">FileAuthPlugin</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../play/modules/fileauth/FileAuthPlugin.html#onApplicationStart()">onApplicationStart</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Trigger to scan the files for the first Time.</TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_play.PlayPlugin"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Methods inherited from class play.PlayPlugin</B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>addMimeTypes, addTemplateExtensions, afterActionInvocation, afterApplicationStart, afterFixtureLoad, afterInvocation, beforeActionInvocation, beforeDetectingChanges, beforeInvocation, bind, bind, bind, bindBean, compareTo, compileAll, compileSources, detectChange, detectClassesChange, enhance, getJsonStatus, getMessage, getStatus, invocationFinally, loadTemplate, modelFactory, onActionInvocationResult, onApplicationReady, onApplicationStop, onClassesChange, onConfigurationRead, onEvent, onInvocationException, onInvocationSuccess, onLoad, onRequestRouting, onRoutesLoaded, onTemplateCompilation, overrideTemplateSource, postEvent, rawInvocation, routeRequest, runTest, serveStatic, unBind, willBeValidated</CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>

<!-- ========= CONSTRUCTOR DETAIL ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>

<A NAME="FileAuthPlugin()"><!-- --></A><H3>
FileAuthPlugin</H3>
<PRE>
public <B>FileAuthPlugin</B>()</PRE>
<DL>
</DL>

<!-- ============ METHOD DETAIL ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>

<A NAME="onApplicationStart()"><!-- --></A><H3>
onApplicationStart</H3>
<PRE>
public void <B>onApplicationStart</B>()</PRE>
<DL>
<DD>Trigger to scan the files for the first Time.
<P>
<DD><DL>
<DT><B>Overrides:</B><DD><CODE>onApplicationStart</CODE> in class <CODE>play.PlayPlugin</CODE></DL>
</DD>
<DD><DL>
</DL>
</DD>
</DL>
<!-- ========= END OF CLASS DATA ========= -->
<HR>


<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../play/modules/fileauth/FileAuth.html" title="class in play.modules.fileauth"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../../../play/modules/fileauth/ScanJob.html" title="class in play.modules.fileauth"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../../../index.html?play/modules/fileauth/FileAuthPlugin.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="FileAuthPlugin.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_play.PlayPlugin">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->

<HR>

</BODY>
</HTML>
PK�����*†9Dzzáªn��n��q���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/play/modules/fileauth/utils/package-tree.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_26) on Tue Aug 06 19:00:49 CEST 2013 -->
<TITLE>
play.modules.fileauth.utils Class Hierarchy
</TITLE>

<META NAME="date" CONTENT="2013-08-06">

<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">

<SCRIPT type="text/javascript">
function windowTitle()
{
    if (location.href.indexOf('is-external=true') == -1) {
        parent.document.title="play.modules.fileauth.utils Class Hierarchy";
    }
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>

</HEAD>

<BODY BGCOLOR="white" onload="windowTitle();">
<HR>


<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../../play/modules/fileauth/package-tree.html"><B>PREV</B></A>&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../../../../index.html?play/modules/fileauth/utils/package-tree.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->

<HR>
<CENTER>
<H2>
Hierarchy For Package play.modules.fileauth.utils
</H2>
</CENTER>
<DL>
<DT><B>Package Hierarchies:</B><DD><A HREF="../../../../overview-tree.html">All Packages</A></DL>
<HR>
<H2>
Class Hierarchy
</H2>
<UL>
<LI TYPE="circle">java.lang.Object<UL>
<LI TYPE="circle">play.modules.fileauth.utils.<A HREF="../../../../play/modules/fileauth/utils/MD5Crypt.html" title="class in play.modules.fileauth.utils"><B>MD5Crypt</B></A></UL>
</UL>
<HR>


<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../../play/modules/fileauth/package-tree.html"><B>PREV</B></A>&nbsp;
&nbsp;NEXT</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../../../../index.html?play/modules/fileauth/utils/package-tree.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->

<HR>

</BODY>
</HTML>
PK�����*†9DódÑÏT��ÏT��m���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/play/modules/fileauth/utils/MD5Crypt.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_26) on Tue Aug 06 19:00:48 CEST 2013 -->
<TITLE>
MD5Crypt
</TITLE>

<META NAME="date" CONTENT="2013-08-06">

<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">

<SCRIPT type="text/javascript">
function windowTitle()
{
    if (location.href.indexOf('is-external=true') == -1) {
        parent.document.title="MD5Crypt";
    }
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>

</HEAD>

<BODY BGCOLOR="white" onload="windowTitle();">
<HR>


<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV CLASS&nbsp;
&nbsp;NEXT CLASS</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../../../../index.html?play/modules/fileauth/utils/MD5Crypt.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="MD5Crypt.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->

<HR>
<!-- ======== START OF CLASS DATA ======== -->
<H2>
<FONT SIZE="-1">
play.modules.fileauth.utils</FONT>
<BR>
Class MD5Crypt</H2>
<PRE>
java.lang.Object
  <IMG SRC="../../../../resources/inherit.gif" ALT="extended by "><B>play.modules.fileauth.utils.MD5Crypt</B>
</PRE>
<HR>
<DL>
<DT><PRE>public final class <B>MD5Crypt</B><DT>extends java.lang.Object</DL>
</PRE>

<P>
This class defines a method,
 <A HREF="../../../../play/modules/fileauth/utils/MD5Crypt.html#crypt(java.lang.String, java.lang.String)"><CODE>crypt()</CODE></A>, which
 takes a password and a salt string and generates an OpenBSD/FreeBSD/Linux-compatible
 md5-encoded password entry.
<P>

<P>
<HR>

<P>
<!-- =========== FIELD SUMMARY =========== -->

<A NAME="field_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Field Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../play/modules/fileauth/utils/MD5Crypt.html#itoa64">itoa64</A></B></CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../play/modules/fileauth/utils/MD5Crypt.html#SALTCHARS">SALTCHARS</A></B></CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../../../../play/modules/fileauth/utils/MD5Crypt.html#MD5Crypt()">MD5Crypt</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../play/modules/fileauth/utils/MD5Crypt.html#apacheCrypt(java.lang.String)">apacheCrypt</A></B>(java.lang.String&nbsp;password)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This method generates an Apache MD5 compatible
 md5-encoded password hash from a plaintext password and a
 salt.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../play/modules/fileauth/utils/MD5Crypt.html#apacheCrypt(java.lang.String, java.lang.String)">apacheCrypt</A></B>(java.lang.String&nbsp;password,
            java.lang.String&nbsp;salt)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This method actually generates an Apache MD5 compatible
 md5-encoded password hash from a plaintext password and a
 salt.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;int</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../play/modules/fileauth/utils/MD5Crypt.html#bytes2u(byte)">bytes2u</A></B>(byte&nbsp;inp)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;convert an encoded unsigned byte value into a int
 with the unsigned value.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../play/modules/fileauth/utils/MD5Crypt.html#clearbits(byte[])">clearbits</A></B>(byte[]&nbsp;bits)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../play/modules/fileauth/utils/MD5Crypt.html#crypt(java.lang.String)">crypt</A></B>(java.lang.String&nbsp;password)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This method actually generates a OpenBSD/FreeBSD/Linux PAM compatible
 md5-encoded password hash from a plaintext password and a
 salt.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../play/modules/fileauth/utils/MD5Crypt.html#crypt(java.lang.String, java.lang.String)">crypt</A></B>(java.lang.String&nbsp;password,
      java.lang.String&nbsp;salt)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This method actually generates a OpenBSD/FreeBSD/Linux PAM compatible
 md5-encoded password hash from a plaintext password and a
 salt.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../play/modules/fileauth/utils/MD5Crypt.html#crypt(java.lang.String, java.lang.String, java.lang.String)">crypt</A></B>(java.lang.String&nbsp;password,
      java.lang.String&nbsp;salt,
      java.lang.String&nbsp;magic)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This method actually generates md5-encoded password hash from
 a plaintext password, a salt, and a magic string.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../play/modules/fileauth/utils/MD5Crypt.html#main(java.lang.String[])">main</A></B>(java.lang.String[]&nbsp;argv)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Command line test rig.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;java.lang.String</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../play/modules/fileauth/utils/MD5Crypt.html#to64(long, int)">to64</A></B>(long&nbsp;v,
     int&nbsp;size)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../../../../play/modules/fileauth/utils/MD5Crypt.html#verifyPassword(java.lang.String, java.lang.String)">verifyPassword</A></B>(java.lang.String&nbsp;plaintextPass,
               java.lang.String&nbsp;md5CryptText)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This method tests a plaintext password against a md5Crypt'ed hash and returns
 true if the password matches the hash.</TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>

<!-- ============ FIELD DETAIL =========== -->

<A NAME="field_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Field Detail</B></FONT></TH>
</TR>
</TABLE>

<A NAME="SALTCHARS"><!-- --></A><H3>
SALTCHARS</H3>
<PRE>
public static final java.lang.String <B>SALTCHARS</B></PRE>
<DL>
<DL>
<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#play.modules.fileauth.utils.MD5Crypt.SALTCHARS">Constant Field Values</A></DL>
</DL>
<HR>

<A NAME="itoa64"><!-- --></A><H3>
itoa64</H3>
<PRE>
public static final java.lang.String <B>itoa64</B></PRE>
<DL>
<DL>
<DT><B>See Also:</B><DD><A HREF="../../../../constant-values.html#play.modules.fileauth.utils.MD5Crypt.itoa64">Constant Field Values</A></DL>
</DL>

<!-- ========= CONSTRUCTOR DETAIL ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>

<A NAME="MD5Crypt()"><!-- --></A><H3>
MD5Crypt</H3>
<PRE>
public <B>MD5Crypt</B>()</PRE>
<DL>
</DL>

<!-- ============ METHOD DETAIL ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>

<A NAME="main(java.lang.String[])"><!-- --></A><H3>
main</H3>
<PRE>
public static void <B>main</B>(java.lang.String[]&nbsp;argv)</PRE>
<DL>
<DD>Command line test rig.
<P>
<DD><DL>
</DL>
</DD>
</DL>
<HR>

<A NAME="to64(long, int)"><!-- --></A><H3>
to64</H3>
<PRE>
public static final java.lang.String <B>to64</B>(long&nbsp;v,
                                          int&nbsp;size)</PRE>
<DL>
<DD><DL>
</DL>
</DD>
</DL>
<HR>

<A NAME="clearbits(byte[])"><!-- --></A><H3>
clearbits</H3>
<PRE>
public static final void <B>clearbits</B>(byte[]&nbsp;bits)</PRE>
<DL>
<DD><DL>
</DL>
</DD>
</DL>
<HR>

<A NAME="bytes2u(byte)"><!-- --></A><H3>
bytes2u</H3>
<PRE>
public static final int <B>bytes2u</B>(byte&nbsp;inp)</PRE>
<DL>
<DD>convert an encoded unsigned byte value into a int
 with the unsigned value.
<P>
<DD><DL>
</DL>
</DD>
</DL>
<HR>

<A NAME="crypt(java.lang.String)"><!-- --></A><H3>
crypt</H3>
<PRE>
public static final java.lang.String <B>crypt</B>(java.lang.String&nbsp;password)</PRE>
<DL>
<DD><p>This method actually generates a OpenBSD/FreeBSD/Linux PAM compatible
 md5-encoded password hash from a plaintext password and a
 salt.</p>

 <p>The resulting string will be in the form '$1$&lt;salt&gt;$&lt;hashed mess&gt;</p>
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>password</CODE> - Plaintext password
<DT><B>Returns:</B><DD>An OpenBSD/FreeBSD/Linux-compatible md5-hashed password field.</DL>
</DD>
</DL>
<HR>

<A NAME="crypt(java.lang.String, java.lang.String)"><!-- --></A><H3>
crypt</H3>
<PRE>
public static final java.lang.String <B>crypt</B>(java.lang.String&nbsp;password,
                                           java.lang.String&nbsp;salt)</PRE>
<DL>
<DD><p>This method actually generates a OpenBSD/FreeBSD/Linux PAM compatible
 md5-encoded password hash from a plaintext password and a
 salt.</p>

 <p>The resulting string will be in the form '$1$&lt;salt&gt;$&lt;hashed mess&gt;</p>
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>password</CODE> - Plaintext password<DD><CODE>salt</CODE> - A short string to use to randomize md5.  May start with $1$, which
             will be ignored.  It is explicitly permitted to pass a pre-existing
             MD5Crypt'ed password entry as the salt.  crypt() will strip the salt
             chars out properly.
<DT><B>Returns:</B><DD>An OpenBSD/FreeBSD/Linux-compatible md5-hashed password field.</DL>
</DD>
</DL>
<HR>

<A NAME="apacheCrypt(java.lang.String)"><!-- --></A><H3>
apacheCrypt</H3>
<PRE>
public static final java.lang.String <B>apacheCrypt</B>(java.lang.String&nbsp;password)</PRE>
<DL>
<DD><p>This method generates an Apache MD5 compatible
 md5-encoded password hash from a plaintext password and a
 salt.</p>

 <p>The resulting string will be in the form '$apr1$&lt;salt&gt;$&lt;hashed mess&gt;</p>
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>password</CODE> - Plaintext password
<DT><B>Returns:</B><DD>An Apache-compatible md5-hashed password string.</DL>
</DD>
</DL>
<HR>

<A NAME="apacheCrypt(java.lang.String, java.lang.String)"><!-- --></A><H3>
apacheCrypt</H3>
<PRE>
public static final java.lang.String <B>apacheCrypt</B>(java.lang.String&nbsp;password,
                                                 java.lang.String&nbsp;salt)</PRE>
<DL>
<DD><p>This method actually generates an Apache MD5 compatible
 md5-encoded password hash from a plaintext password and a
 salt.</p>

 <p>The resulting string will be in the form '$apr1$&lt;salt&gt;$&lt;hashed mess&gt;</p>
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>password</CODE> - Plaintext password<DD><CODE>salt</CODE> - A short string to use to randomize md5.  May start with $apr1$, which
             will be ignored.  It is explicitly permitted to pass a pre-existing
             MD5Crypt'ed password entry as the salt.  crypt() will strip the salt
             chars out properly.
<DT><B>Returns:</B><DD>An Apache-compatible md5-hashed password string.</DL>
</DD>
</DL>
<HR>

<A NAME="crypt(java.lang.String, java.lang.String, java.lang.String)"><!-- --></A><H3>
crypt</H3>
<PRE>
public static final java.lang.String <B>crypt</B>(java.lang.String&nbsp;password,
                                           java.lang.String&nbsp;salt,
                                           java.lang.String&nbsp;magic)</PRE>
<DL>
<DD><p>This method actually generates md5-encoded password hash from
 a plaintext password, a salt, and a magic string.</p>

 <p>There are two magic strings that make sense to use here.. '$1$' is the
 magic string used by the FreeBSD/Linux/OpenBSD MD5Crypt algorithm, and
 '$apr1$' is the magic string used by the Apache MD5Crypt algorithm.</p>

 <p>The resulting string will be in the form '&lt;magic&gt;&lt;salt&gt;$&lt;hashed mess&gt;</p>
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>password</CODE> - Plaintext password<DD><CODE>salt</CODE> - A short string to use to randomize md5.  May start
 with the magic string, which will be ignored.  It is explicitly
 permitted to pass a pre-existing MD5Crypt'ed password entry as
 the salt.  crypt() will strip the salt chars out properly.<DD><CODE>magic</CODE> - Either "$apr1$" or "$1$", which controls whether we
 are doing Apache-style or FreeBSD-style md5Crypt.
<DT><B>Returns:</B><DD>An md5-hashed password string.</DL>
</DD>
</DL>
<HR>

<A NAME="verifyPassword(java.lang.String, java.lang.String)"><!-- --></A><H3>
verifyPassword</H3>
<PRE>
public static final boolean <B>verifyPassword</B>(java.lang.String&nbsp;plaintextPass,
                                           java.lang.String&nbsp;md5CryptText)</PRE>
<DL>
<DD>This method tests a plaintext password against a md5Crypt'ed hash and returns
 true if the password matches the hash.

 This method will work properly whether the hashtext was crypted
 using the default FreeBSD md5Crypt algorithm or the Apache
 md5Crypt variant.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>plaintextPass</CODE> - The plaintext password text to test.<DD><CODE>md5CryptText</CODE> - The Apache or FreeBSD-md5Crypted hash used to authenticate the plaintextPass.</DL>
</DD>
</DL>
<!-- ========= END OF CLASS DATA ========= -->
<HR>


<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV CLASS&nbsp;
&nbsp;NEXT CLASS</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../../../../index.html?play/modules/fileauth/utils/MD5Crypt.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="MD5Crypt.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#field_summary">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#field_detail">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->

<HR>

</BODY>
</HTML>
PK�����*†9Dߤ{ÙÉ��É��t���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/play/modules/fileauth/utils/package-summary.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_26) on Tue Aug 06 19:00:49 CEST 2013 -->
<TITLE>
play.modules.fileauth.utils
</TITLE>

<META NAME="date" CONTENT="2013-08-06">

<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">

<SCRIPT type="text/javascript">
function windowTitle()
{
    if (location.href.indexOf('is-external=true') == -1) {
        parent.document.title="play.modules.fileauth.utils";
    }
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>

</HEAD>

<BODY BGCOLOR="white" onload="windowTitle();">
<HR>


<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../../play/modules/fileauth/package-summary.html"><B>PREV PACKAGE</B></A>&nbsp;
&nbsp;NEXT PACKAGE</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../../../../index.html?play/modules/fileauth/utils/package-summary.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->

<HR>
<H2>
Package play.modules.fileauth.utils
</H2>

<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Class Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="15%"><B><A HREF="../../../../play/modules/fileauth/utils/MD5Crypt.html" title="class in play.modules.fileauth.utils">MD5Crypt</A></B></TD>
<TD>This class defines a method,
 <A HREF="../../../../play/modules/fileauth/utils/MD5Crypt.html#crypt(java.lang.String, java.lang.String)"><CODE>crypt()</CODE></A>, which
 takes a password and a salt string and generates an OpenBSD/FreeBSD/Linux-compatible
 md5-encoded password entry.</TD>
</TR>
</TABLE>
&nbsp;

<P>
<DL>
</DL>
<HR>


<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../../../../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../../../../play/modules/fileauth/package-summary.html"><B>PREV PACKAGE</B></A>&nbsp;
&nbsp;NEXT PACKAGE</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../../../../index.html?play/modules/fileauth/utils/package-summary.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../../../../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->

<HR>

</BODY>
</HTML>
PK�����*†9DF”¦����r���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/play/modules/fileauth/utils/package-frame.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_26) on Tue Aug 06 19:00:49 CEST 2013 -->
<TITLE>
play.modules.fileauth.utils
</TITLE>

<META NAME="date" CONTENT="2013-08-06">

<LINK REL ="stylesheet" TYPE="text/css" HREF="../../../../stylesheet.css" TITLE="Style">


</HEAD>

<BODY BGCOLOR="white">
<FONT size="+1" CLASS="FrameTitleFont">
<A HREF="../../../../play/modules/fileauth/utils/package-summary.html" target="classFrame">play.modules.fileauth.utils</A></FONT>
<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
<TR>
<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
Classes</FONT>&nbsp;
<FONT CLASS="FrameItemFont">
<BR>
<A HREF="MD5Crypt.html" title="class in play.modules.fileauth.utils" target="classFrame">MD5Crypt</A></FONT></TD>
</TR>
</TABLE>


</BODY>
</HTML>
PK�����*†9D]" ����Z���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/controllers/Check.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_26) on Tue Aug 06 19:00:48 CEST 2013 -->
<TITLE>
Check
</TITLE>

<META NAME="date" CONTENT="2013-08-06">

<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style">

<SCRIPT type="text/javascript">
function windowTitle()
{
    if (location.href.indexOf('is-external=true') == -1) {
        parent.document.title="Check";
    }
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>

</HEAD>

<BODY BGCOLOR="white" onload="windowTitle();">
<HR>


<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../controllers/AuthFileSecurity.html" title="class in controllers"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../controllers/Secure.html" title="class in controllers"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../index.html?controllers/Check.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="Check.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#annotation_type_required_element_summary">REQUIRED</A>&nbsp;|&nbsp;OPTIONAL</FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#annotation_type_element_detail">ELEMENT</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->

<HR>
<!-- ======== START OF CLASS DATA ======== -->
<H2>
<FONT SIZE="-1">
controllers</FONT>
<BR>
Annotation Type Check</H2>
<HR>
<DL>
<DT><PRE><FONT SIZE="-1">@Retention(value=RUNTIME)
@Target(value={METHOD,TYPE})
</FONT>public @interface <B>Check</B></DL>
</PRE>

<P>
<HR>

<P>
<!-- =========== ANNOTATION TYPE REQUIRED MEMBER SUMMARY =========== -->

<A NAME="annotation_type_required_element_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Required Element Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>&nbsp;java.lang.String[]</CODE></FONT></TD>
<TD><CODE><B><A HREF="../controllers/Check.html#value()">value</A></B></CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
<P>

<!-- ============ ANNOTATION TYPE MEMBER DETAIL =========== -->

<A NAME="annotation_type_element_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Element Detail</B></FONT></TH>
</TR>
</TABLE>

<A NAME="value()"><!-- --></A><H3>
value</H3>
<PRE>
public abstract java.lang.String[] <B>value</B></PRE>
<DL>
<DD><DL>
</DL>
</DD>
<DD><DL>
</DL>
</DL>
<!-- ========= END OF CLASS DATA ========= -->
<HR>


<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../controllers/AuthFileSecurity.html" title="class in controllers"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../controllers/Secure.html" title="class in controllers"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../index.html?controllers/Check.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="Check.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#annotation_type_required_element_summary">REQUIRED</A>&nbsp;|&nbsp;OPTIONAL</FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;<A HREF="#annotation_type_element_detail">ELEMENT</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->

<HR>

</BODY>
</HTML>
PK�����*†9Dšªõßó��ó��a���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/controllers/package-tree.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_26) on Tue Aug 06 19:00:49 CEST 2013 -->
<TITLE>
controllers Class Hierarchy
</TITLE>

<META NAME="date" CONTENT="2013-08-06">

<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style">

<SCRIPT type="text/javascript">
function windowTitle()
{
    if (location.href.indexOf('is-external=true') == -1) {
        parent.document.title="controllers Class Hierarchy";
    }
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>

</HEAD>

<BODY BGCOLOR="white" onload="windowTitle();">
<HR>


<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV&nbsp;
&nbsp;<A HREF="../play/modules/fileauth/package-tree.html"><B>NEXT</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../index.html?controllers/package-tree.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->

<HR>
<CENTER>
<H2>
Hierarchy For Package controllers
</H2>
</CENTER>
<DL>
<DT><B>Package Hierarchies:</B><DD><A HREF="../overview-tree.html">All Packages</A></DL>
<HR>
<H2>
Class Hierarchy
</H2>
<UL>
<LI TYPE="circle">java.lang.Object<UL>
<LI TYPE="circle">play.mvc.Controller (implements play.classloading.enhancers.ControllersEnhancer.ControllerSupport, play.classloading.enhancers.LocalvariablesNamesEnhancer.LocalVariablesSupport)
<UL>
<LI TYPE="circle">controllers.<A HREF="../controllers/Secure.html" title="class in controllers"><B>Secure</B></A><LI TYPE="circle">controllers.<A HREF="../controllers/Secure.Security.html" title="class in controllers"><B>Secure.Security</B></A><UL>
<LI TYPE="circle">controllers.<A HREF="../controllers/AuthFileSecurity.html" title="class in controllers"><B>AuthFileSecurity</B></A></UL>
</UL>
</UL>
</UL>
<H2>
Annotation Type Hierarchy
</H2>
<UL>
<LI TYPE="circle">controllers.<A HREF="../controllers/Check.html" title="annotation in controllers"><B>Check</B></A> (implements java.lang.annotation.Annotation)
</UL>
<HR>


<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Tree</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV&nbsp;
&nbsp;<A HREF="../play/modules/fileauth/package-tree.html"><B>NEXT</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../index.html?controllers/package-tree.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="package-tree.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->

<HR>

</BODY>
</HTML>
PK�����*†9Dý¼kÄP*��P*��d���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/controllers/Secure.Security.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_26) on Tue Aug 06 19:00:48 CEST 2013 -->
<TITLE>
Secure.Security
</TITLE>

<META NAME="date" CONTENT="2013-08-06">

<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style">

<SCRIPT type="text/javascript">
function windowTitle()
{
    if (location.href.indexOf('is-external=true') == -1) {
        parent.document.title="Secure.Security";
    }
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>

</HEAD>

<BODY BGCOLOR="white" onload="windowTitle();">
<HR>


<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../controllers/Secure.html" title="class in controllers"><B>PREV CLASS</B></A>&nbsp;
&nbsp;NEXT CLASS</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../index.html?controllers/Secure.Security.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="Secure.Security.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_play.mvc.Controller">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_play.mvc.Controller">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;METHOD</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->

<HR>
<!-- ======== START OF CLASS DATA ======== -->
<H2>
<FONT SIZE="-1">
controllers</FONT>
<BR>
Class Secure.Security</H2>
<PRE>
java.lang.Object
  <IMG SRC="../resources/inherit.gif" ALT="extended by ">play.mvc.Controller
      <IMG SRC="../resources/inherit.gif" ALT="extended by "><B>controllers.Secure.Security</B>
</PRE>
<DL>
<DT><B>All Implemented Interfaces:</B> <DD>play.classloading.enhancers.ControllersEnhancer.ControllerSupport, play.classloading.enhancers.LocalvariablesNamesEnhancer.LocalVariablesSupport</DD>
</DL>
<DL>
<DT><B>Direct Known Subclasses:</B> <DD><A HREF="../controllers/AuthFileSecurity.html" title="class in controllers">AuthFileSecurity</A></DD>
</DL>
<DL>
<DT><B>Enclosing class:</B><DD><A HREF="../controllers/Secure.html" title="class in controllers">Secure</A></DD>
</DL>
<HR>
<DL>
<DT><PRE>public static class <B>Secure.Security</B><DT>extends play.mvc.Controller</DL>
</PRE>

<P>
<HR>

<P>
<!-- =========== FIELD SUMMARY =========== -->

<A NAME="field_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Field Summary</B></FONT></TH>
</TR>
</TABLE>
&nbsp;<A NAME="fields_inherited_from_class_play.mvc.Controller"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Fields inherited from class play.mvc.Controller</B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>_currentReverse, flash, params, renderArgs, request, response, routeArgs, session, validation</CODE></TD>
</TR>
</TABLE>
&nbsp;
<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../controllers/Secure.Security.html#Secure.Security()">Secure.Security</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Method Summary</B></FONT></TH>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_play.mvc.Controller"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Methods inherited from class play.mvc.Controller</B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>await, await, await, await, await, await, badRequest, checkAuthenticity, error, error, error, error, flash, forbidden, forbidden, getActionAnnotation, getControllerAnnotation, getControllerClass, getControllerInheritedAnnotation, notFound, notFound, notFoundIfNull, notFoundIfNull, notModified, ok, parent, parent, parent, redirect, redirect, redirect, redirect, redirectToStatic, render, renderBinary, renderBinary, renderBinary, renderBinary, renderBinary, renderBinary, renderBinary, renderBinary, renderBinary, renderBinary, renderHtml, renderJSON, renderJSON, renderJSON, renderJSON, renderTemplate, renderTemplate, renderTemplate, renderText, renderText, renderXml, renderXml, renderXml, renderXml, reverse, suspend, suspend, template, template, templateExists, todo, unauthorized, unauthorized, waitFor</CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>

<!-- ========= CONSTRUCTOR DETAIL ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>

<A NAME="Secure.Security()"><!-- --></A><H3>
Secure.Security</H3>
<PRE>
public <B>Secure.Security</B>()</PRE>
<DL>
</DL>
<!-- ========= END OF CLASS DATA ========= -->
<HR>


<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../controllers/Secure.html" title="class in controllers"><B>PREV CLASS</B></A>&nbsp;
&nbsp;NEXT CLASS</FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../index.html?controllers/Secure.Security.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="Secure.Security.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_play.mvc.Controller">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#methods_inherited_from_class_play.mvc.Controller">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;METHOD</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->

<HR>

</BODY>
</HTML>
PK�����*†9D’£Úæ2��æ2��e���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/controllers/AuthFileSecurity.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_26) on Tue Aug 06 19:00:48 CEST 2013 -->
<TITLE>
AuthFileSecurity
</TITLE>

<META NAME="date" CONTENT="2013-08-06">

<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style">

<SCRIPT type="text/javascript">
function windowTitle()
{
    if (location.href.indexOf('is-external=true') == -1) {
        parent.document.title="AuthFileSecurity";
    }
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>

</HEAD>

<BODY BGCOLOR="white" onload="windowTitle();">
<HR>


<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV CLASS&nbsp;
&nbsp;<A HREF="../controllers/Check.html" title="annotation in controllers"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../index.html?controllers/AuthFileSecurity.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="AuthFileSecurity.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_play.mvc.Controller">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->

<HR>
<!-- ======== START OF CLASS DATA ======== -->
<H2>
<FONT SIZE="-1">
controllers</FONT>
<BR>
Class AuthFileSecurity</H2>
<PRE>
java.lang.Object
  <IMG SRC="../resources/inherit.gif" ALT="extended by ">play.mvc.Controller
      <IMG SRC="../resources/inherit.gif" ALT="extended by "><A HREF="../controllers/Secure.Security.html" title="class in controllers">controllers.Secure.Security</A>
          <IMG SRC="../resources/inherit.gif" ALT="extended by "><B>controllers.AuthFileSecurity</B>
</PRE>
<DL>
<DT><B>All Implemented Interfaces:</B> <DD>play.classloading.enhancers.ControllersEnhancer.ControllerSupport, play.classloading.enhancers.LocalvariablesNamesEnhancer.LocalVariablesSupport</DD>
</DL>
<HR>
<DL>
<DT><PRE>public class <B>AuthFileSecurity</B><DT>extends <A HREF="../controllers/Secure.Security.html" title="class in controllers">Secure.Security</A></DL>
</PRE>

<P>
This Class provides basice Security Functions for the Play! Security Plugin.
<P>

<P>
<HR>

<P>
<!-- =========== FIELD SUMMARY =========== -->

<A NAME="field_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Field Summary</B></FONT></TH>
</TR>
</TABLE>
&nbsp;<A NAME="fields_inherited_from_class_play.mvc.Controller"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Fields inherited from class play.mvc.Controller</B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>_currentReverse, flash, params, renderArgs, request, response, routeArgs, session, validation</CODE></TD>
</TR>
</TABLE>
&nbsp;
<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../controllers/AuthFileSecurity.html#AuthFileSecurity()">AuthFileSecurity</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../controllers/AuthFileSecurity.html#authentify(java.lang.String, java.lang.String)">authentify</A></B>(java.lang.String&nbsp;username,
           java.lang.String&nbsp;password)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Authentify an user against the given AuthFile.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;boolean</CODE></FONT></TD>
<TD><CODE><B><A HREF="../controllers/AuthFileSecurity.html#check(java.lang.String)">check</A></B>(java.lang.String&nbsp;profile)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Checks if the current user (that is loged in) has the profile (e.g.</TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_play.mvc.Controller"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Methods inherited from class play.mvc.Controller</B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>await, await, await, await, await, await, badRequest, checkAuthenticity, error, error, error, error, flash, forbidden, forbidden, getActionAnnotation, getControllerAnnotation, getControllerClass, getControllerInheritedAnnotation, notFound, notFound, notFoundIfNull, notFoundIfNull, notModified, ok, parent, parent, parent, redirect, redirect, redirect, redirect, redirectToStatic, render, renderBinary, renderBinary, renderBinary, renderBinary, renderBinary, renderBinary, renderBinary, renderBinary, renderBinary, renderBinary, renderHtml, renderJSON, renderJSON, renderJSON, renderJSON, renderTemplate, renderTemplate, renderTemplate, renderText, renderText, renderXml, renderXml, renderXml, renderXml, reverse, suspend, suspend, template, template, templateExists, todo, unauthorized, unauthorized, waitFor</CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>

<!-- ========= CONSTRUCTOR DETAIL ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>

<A NAME="AuthFileSecurity()"><!-- --></A><H3>
AuthFileSecurity</H3>
<PRE>
public <B>AuthFileSecurity</B>()</PRE>
<DL>
</DL>

<!-- ============ METHOD DETAIL ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>

<A NAME="authentify(java.lang.String, java.lang.String)"><!-- --></A><H3>
authentify</H3>
<PRE>
public static boolean <B>authentify</B>(java.lang.String&nbsp;username,
                                 java.lang.String&nbsp;password)</PRE>
<DL>
<DD>Authentify an user against the given AuthFile.
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>username</CODE> - the given username.<DD><CODE>password</CODE> - the given password.
<DT><B>Returns:</B><DD>true if username and password matches, otherwise false.</DL>
</DD>
</DL>
<HR>

<A NAME="check(java.lang.String)"><!-- --></A><H3>
check</H3>
<PRE>
public static boolean <B>check</B>(java.lang.String&nbsp;profile)</PRE>
<DL>
<DD>Checks if the current user (that is loged in) has the profile (e.g. is in the group).
<P>
<DD><DL>
<DT><B>Parameters:</B><DD><CODE>profile</CODE> - 
<DT><B>Returns:</B><DD>true if the current user has the profile, otherwise false.</DL>
</DD>
</DL>
<!-- ========= END OF CLASS DATA ========= -->
<HR>


<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV CLASS&nbsp;
&nbsp;<A HREF="../controllers/Check.html" title="annotation in controllers"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../index.html?controllers/AuthFileSecurity.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="AuthFileSecurity.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;NESTED&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_play.mvc.Controller">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->

<HR>

</BODY>
</HTML>
PK�����*†9Dï�æH5��H5��[���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/controllers/Secure.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_26) on Tue Aug 06 19:00:48 CEST 2013 -->
<TITLE>
Secure
</TITLE>

<META NAME="date" CONTENT="2013-08-06">

<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style">

<SCRIPT type="text/javascript">
function windowTitle()
{
    if (location.href.indexOf('is-external=true') == -1) {
        parent.document.title="Secure";
    }
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>

</HEAD>

<BODY BGCOLOR="white" onload="windowTitle();">
<HR>


<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../controllers/Check.html" title="annotation in controllers"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../controllers/Secure.Security.html" title="class in controllers"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../index.html?controllers/Secure.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="Secure.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_play.mvc.Controller">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->

<HR>
<!-- ======== START OF CLASS DATA ======== -->
<H2>
<FONT SIZE="-1">
controllers</FONT>
<BR>
Class Secure</H2>
<PRE>
java.lang.Object
  <IMG SRC="../resources/inherit.gif" ALT="extended by ">play.mvc.Controller
      <IMG SRC="../resources/inherit.gif" ALT="extended by "><B>controllers.Secure</B>
</PRE>
<DL>
<DT><B>All Implemented Interfaces:</B> <DD>play.classloading.enhancers.ControllersEnhancer.ControllerSupport, play.classloading.enhancers.LocalvariablesNamesEnhancer.LocalVariablesSupport</DD>
</DL>
<HR>
<DL>
<DT><PRE>public class <B>Secure</B><DT>extends play.mvc.Controller</DL>
</PRE>

<P>
<HR>

<P>
<!-- ======== NESTED CLASS SUMMARY ======== -->

<A NAME="nested_class_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Nested Class Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;class</CODE></FONT></TD>
<TD><CODE><B><A HREF="../controllers/Secure.Security.html" title="class in controllers">Secure.Security</A></B></CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
</TABLE>
&nbsp;<!-- =========== FIELD SUMMARY =========== -->

<A NAME="field_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Field Summary</B></FONT></TH>
</TR>
</TABLE>
&nbsp;<A NAME="fields_inherited_from_class_play.mvc.Controller"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Fields inherited from class play.mvc.Controller</B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>_currentReverse, flash, params, renderArgs, request, response, routeArgs, session, validation</CODE></TD>
</TR>
</TABLE>
&nbsp;
<!-- ======== CONSTRUCTOR SUMMARY ======== -->

<A NAME="constructor_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Constructor Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE><B><A HREF="../controllers/Secure.html#Secure()">Secure</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
</TABLE>
&nbsp;
<!-- ========== METHOD SUMMARY =========== -->

<A NAME="method_summary"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Method Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../controllers/Secure.html#authenticate(java.lang.String, java.lang.String, boolean)">authenticate</A></B>(java.lang.String&nbsp;username,
             java.lang.String&nbsp;password,
             boolean&nbsp;remember)</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../controllers/Secure.html#login()">login</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD ALIGN="right" VALIGN="top" WIDTH="1%"><FONT SIZE="-1">
<CODE>static&nbsp;void</CODE></FONT></TD>
<TD><CODE><B><A HREF="../controllers/Secure.html#logout()">logout</A></B>()</CODE>

<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_play.mvc.Controller"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Methods inherited from class play.mvc.Controller</B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>await, await, await, await, await, await, badRequest, checkAuthenticity, error, error, error, error, flash, forbidden, forbidden, getActionAnnotation, getControllerAnnotation, getControllerClass, getControllerInheritedAnnotation, notFound, notFound, notFoundIfNull, notFoundIfNull, notModified, ok, parent, parent, parent, redirect, redirect, redirect, redirect, redirectToStatic, render, renderBinary, renderBinary, renderBinary, renderBinary, renderBinary, renderBinary, renderBinary, renderBinary, renderBinary, renderBinary, renderHtml, renderJSON, renderJSON, renderJSON, renderJSON, renderTemplate, renderTemplate, renderTemplate, renderText, renderText, renderXml, renderXml, renderXml, renderXml, reverse, suspend, suspend, template, template, templateExists, todo, unauthorized, unauthorized, waitFor</CODE></TD>
</TR>
</TABLE>
&nbsp;<A NAME="methods_inherited_from_class_java.lang.Object"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#EEEEFF" CLASS="TableSubHeadingColor">
<TH ALIGN="left"><B>Methods inherited from class java.lang.Object</B></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD><CODE>clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait</CODE></TD>
</TR>
</TABLE>
&nbsp;
<P>

<!-- ========= CONSTRUCTOR DETAIL ======== -->

<A NAME="constructor_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Constructor Detail</B></FONT></TH>
</TR>
</TABLE>

<A NAME="Secure()"><!-- --></A><H3>
Secure</H3>
<PRE>
public <B>Secure</B>()</PRE>
<DL>
</DL>

<!-- ============ METHOD DETAIL ========== -->

<A NAME="method_detail"><!-- --></A>
<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="1"><FONT SIZE="+2">
<B>Method Detail</B></FONT></TH>
</TR>
</TABLE>

<A NAME="login()"><!-- --></A><H3>
login</H3>
<PRE>
public static void <B>login</B>()
                  throws java.lang.Throwable</PRE>
<DL>
<DD><DL>

<DT><B>Throws:</B>
<DD><CODE>java.lang.Throwable</CODE></DL>
</DD>
</DL>
<HR>

<A NAME="authenticate(java.lang.String, java.lang.String, boolean)"><!-- --></A><H3>
authenticate</H3>
<PRE>
public static void <B>authenticate</B>(java.lang.String&nbsp;username,
                                java.lang.String&nbsp;password,
                                boolean&nbsp;remember)
                         throws java.lang.Throwable</PRE>
<DL>
<DD><DL>

<DT><B>Throws:</B>
<DD><CODE>java.lang.Throwable</CODE></DL>
</DD>
</DL>
<HR>

<A NAME="logout()"><!-- --></A><H3>
logout</H3>
<PRE>
public static void <B>logout</B>()
                   throws java.lang.Throwable</PRE>
<DL>
<DD><DL>

<DT><B>Throws:</B>
<DD><CODE>java.lang.Throwable</CODE></DL>
</DD>
</DL>
<!-- ========= END OF CLASS DATA ========= -->
<HR>


<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-summary.html"><FONT CLASS="NavBarFont1"><B>Package</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Class</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;<A HREF="../controllers/Check.html" title="annotation in controllers"><B>PREV CLASS</B></A>&nbsp;
&nbsp;<A HREF="../controllers/Secure.Security.html" title="class in controllers"><B>NEXT CLASS</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../index.html?controllers/Secure.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="Secure.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
<TR>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
  SUMMARY:&nbsp;<A HREF="#nested_class_summary">NESTED</A>&nbsp;|&nbsp;<A HREF="#fields_inherited_from_class_play.mvc.Controller">FIELD</A>&nbsp;|&nbsp;<A HREF="#constructor_summary">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_summary">METHOD</A></FONT></TD>
<TD VALIGN="top" CLASS="NavBarCell3"><FONT SIZE="-2">
DETAIL:&nbsp;FIELD&nbsp;|&nbsp;<A HREF="#constructor_detail">CONSTR</A>&nbsp;|&nbsp;<A HREF="#method_detail">METHOD</A></FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->

<HR>

</BODY>
</HTML>
PK�����*†9D
�âÙþ��þ��d���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/controllers/package-summary.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_26) on Tue Aug 06 19:00:49 CEST 2013 -->
<TITLE>
controllers
</TITLE>

<META NAME="date" CONTENT="2013-08-06">

<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style">

<SCRIPT type="text/javascript">
function windowTitle()
{
    if (location.href.indexOf('is-external=true') == -1) {
        parent.document.title="controllers";
    }
}
</SCRIPT>
<NOSCRIPT>
</NOSCRIPT>

</HEAD>

<BODY BGCOLOR="white" onload="windowTitle();">
<HR>


<!-- ========= START OF TOP NAVBAR ======= -->
<A NAME="navbar_top"><!-- --></A>
<A HREF="#skip-navbar_top" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_top_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV PACKAGE&nbsp;
&nbsp;<A HREF="../play/modules/fileauth/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../index.html?controllers/package-summary.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_top"></A>
<!-- ========= END OF TOP NAVBAR ========= -->

<HR>
<H2>
Package controllers
</H2>

<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Class Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="15%"><B><A HREF="../controllers/AuthFileSecurity.html" title="class in controllers">AuthFileSecurity</A></B></TD>
<TD>This Class provides basice Security Functions for the Play! Security Plugin.</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="15%"><B><A HREF="../controllers/Secure.html" title="class in controllers">Secure</A></B></TD>
<TD>&nbsp;</TD>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="15%"><B><A HREF="../controllers/Secure.Security.html" title="class in controllers">Secure.Security</A></B></TD>
<TD>&nbsp;</TD>
</TR>
</TABLE>
&nbsp;

<P>

<TABLE BORDER="1" WIDTH="100%" CELLPADDING="3" CELLSPACING="0" SUMMARY="">
<TR BGCOLOR="#CCCCFF" CLASS="TableHeadingColor">
<TH ALIGN="left" COLSPAN="2"><FONT SIZE="+2">
<B>Annotation Types Summary</B></FONT></TH>
</TR>
<TR BGCOLOR="white" CLASS="TableRowColor">
<TD WIDTH="15%"><B><A HREF="../controllers/Check.html" title="annotation in controllers">Check</A></B></TD>
<TD>&nbsp;</TD>
</TR>
</TABLE>
&nbsp;

<P>
<DL>
</DL>
<HR>


<!-- ======= START OF BOTTOM NAVBAR ====== -->
<A NAME="navbar_bottom"><!-- --></A>
<A HREF="#skip-navbar_bottom" title="Skip navigation links"></A>
<TABLE BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0" SUMMARY="">
<TR>
<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
<A NAME="navbar_bottom_firstrow"><!-- --></A>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="3" SUMMARY="">
  <TR ALIGN="center" VALIGN="top">
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../overview-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1Rev"> &nbsp;<FONT CLASS="NavBarFont1Rev"><B>Package</B></FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <FONT CLASS="NavBarFont1">Class</FONT>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="package-tree.html"><FONT CLASS="NavBarFont1"><B>Tree</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../deprecated-list.html"><FONT CLASS="NavBarFont1"><B>Deprecated</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../index-all.html"><FONT CLASS="NavBarFont1"><B>Index</B></FONT></A>&nbsp;</TD>
  <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1">    <A HREF="../help-doc.html"><FONT CLASS="NavBarFont1"><B>Help</B></FONT></A>&nbsp;</TD>
  </TR>
</TABLE>
</TD>
<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM>
</EM>
</TD>
</TR>

<TR>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
&nbsp;PREV PACKAGE&nbsp;
&nbsp;<A HREF="../play/modules/fileauth/package-summary.html"><B>NEXT PACKAGE</B></A></FONT></TD>
<TD BGCOLOR="white" CLASS="NavBarCell2"><FONT SIZE="-2">
  <A HREF="../index.html?controllers/package-summary.html" target="_top"><B>FRAMES</B></A>  &nbsp;
&nbsp;<A HREF="package-summary.html" target="_top"><B>NO FRAMES</B></A>  &nbsp;
&nbsp;<SCRIPT type="text/javascript">
  <!--
  if(window==top) {
    document.writeln('<A HREF="../allclasses-noframe.html"><B>All Classes</B></A>');
  }
  //-->
</SCRIPT>
<NOSCRIPT>
  <A HREF="../allclasses-noframe.html"><B>All Classes</B></A>
</NOSCRIPT>


</FONT></TD>
</TR>
</TABLE>
<A NAME="skip-navbar_bottom"></A>
<!-- ======== END OF BOTTOM NAVBAR ======= -->

<HR>

</BODY>
</HTML>
PK�����*†9DVÏô¤����b���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/controllers/package-frame.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<!--NewPage-->
<HTML>
<HEAD>
<!-- Generated by javadoc (build 1.6.0_26) on Tue Aug 06 19:00:49 CEST 2013 -->
<TITLE>
controllers
</TITLE>

<META NAME="date" CONTENT="2013-08-06">

<LINK REL ="stylesheet" TYPE="text/css" HREF="../stylesheet.css" TITLE="Style">


</HEAD>

<BODY BGCOLOR="white">
<FONT size="+1" CLASS="FrameTitleFont">
<A HREF="../controllers/package-summary.html" target="classFrame">controllers</A></FONT>
<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
<TR>
<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
Classes</FONT>&nbsp;
<FONT CLASS="FrameItemFont">
<BR>
<A HREF="AuthFileSecurity.html" title="class in controllers" target="classFrame">AuthFileSecurity</A>
<BR>
<A HREF="Secure.html" title="class in controllers" target="classFrame">Secure</A>
<BR>
<A HREF="Secure.Security.html" title="class in controllers" target="classFrame">Secure.Security</A></FONT></TD>
</TR>
</TABLE>


<TABLE BORDER="0" WIDTH="100%" SUMMARY="">
<TR>
<TD NOWRAP><FONT size="+1" CLASS="FrameHeadingFont">
Annotation Types</FONT>&nbsp;
<FONT CLASS="FrameItemFont">
<BR>
<A HREF="Check.html" title="annotation in controllers" target="classFrame">Check</A></FONT></TD>
</TR>
</TABLE>


</BODY>
</HTML>
PK�����*†9D—5Kùõ��õ��a���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/app/controllers/AuthFileSecurity.java/**
 * AuthFileSecurity
 * 31.07.2012
 * @author Philipp Haussleiter
 *
 */
package controllers;

import java.util.Map;
import play.modules.fileauth.FileAuth;

/**
 * This Class provides basice Security Functions for the Play! Security Plugin.
 * @author Philipp Haußleiter
 * <p>
 * Usage:
 * @With(Secure.class)
 * public class Application extends Controller {
 * ...
 * }
 *
 * </p>
 */
public class AuthFileSecurity extends Secure.Security {

    /**
     * Authentify an user against the given AuthFile.
     * @param username the given username.
     * @param password the given password.
     * @return true if username and password matches, otherwise false.
     */
    public static boolean authentify(String username, String password) {
        Map<String,String> users = FileAuth.getUsers();
        String userPassword = users.get(username.toLowerCase());
        return userPassword.equals(password);
    }

    /**
     * Checks if the current user (that is loged in) has the profile (e.g. is in the group).
     * @param profile
     * @return true if the current user has the profile, otherwise false.
     */
    public static boolean check(String profile) {
        String user = connected();
        return FileAuth.contains(profile, user);
    }
}
PK�����*†9D&ÿ‰è¤��¤��]���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/documentation/manual/home.textileh1. {module name}

p(note). Write your module documentation in this file, possibly linking to other Textile files, and delete these notes when you are finished.

p(note). Start with a clear statement of what the module is and what it is for. Link to any third-party libraries that the module is based on.

p(note). Briefly describe why you might want to use this module in a Play application.

h2. Sample application

p(note). Your module should contain a sample app in the @sample@ directory that demonstrates the module. Describe how to run the demo here.

h2. Getting started

p(note). Describe any installation that is required, beyond adding and resolving the module dependency.

h2. Configuration

p(note). List any configuration options that the module uses, with an @h3.@ heading for each one.

h2. Usage

p(note). Explain how to use the module, and describe any routes, controllers, models or views that the module provides.

h2. Tags

p(note). List any tags the module provides, with an @h3.@ heading for each one. Include the tags’ arguments.

h2. Commands

p(note). List any commands the module provides, with an @h3.@ heading for each one. Include the commands’ options.
PK�����*†9D´šü¯��¯��v���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/public/images/favicon.png‰PNG

���
IHDR���������óÿa���tEXtSoftware�Adobe ImageReadyqÉe<��QIDATxÚ”SËNA=U]5]Ý=ï1agŒhf£+0ˆ‰Á †n\¹gãÒ¿p#ì4¢?`t¯	WFƒH$H$dŒ™Gw•·›o÷M×+çœ{O53Æàú�Œ^sÑIšéJáü½Bnà18­ÃC_­fÛG©8ˆk#7€h—BÈ,KÀMª±SçrÕMwav©^›i4v<‹	ü+"�ÎmJÛQea+¤Žed×§–¼zYßü2(¬cŒÐFp¡ìÓ`
Aƒ›ÈBåý¡5ÿÍܧ·™±¨"«€¤úeV(§æÐ<±!D‰.7³é®Ì.®×fÚ~Ë#šÃ�¶HUÊÍ84ÞÍ@<x™XWcê}}þÅ÷­oUÉåáHÛ)	åqMìûεVˆ©4…øðòÎÛ¹•úÒ-?ð#�±«@€ÕÇe<êGhíÁ—8ÙšêéÛO¶?Ó^æ]`4Ùh».<b$ߏè¶6­vùD/&‡oΧ¼´¿§€qeK?îE—å/fzš~Žt1^šX½\{äż´µ¶Ð·”wÒ„è}~_ûHû`~`ûzÿ•gÅô‰û´üúO‚ÀN¯T‰È1”²OöàjåRm¨xvšŽ=¥Ü9XZÀ¥ªXvœic£Au†r'Ê£«ãå’ë<¤#Ÿ;]å@:‰J`)úQ8ªÝ}[“ý£Ï‹™®Cr;ð˜“ëNå1Y©
Êå¡çk_7.üj5ïÒ¸Îÿ'0�Û¤û»ý
����IEND®B`‚PK�����*†9Dä |;f�f�ƒ���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/public/javascripts/jquery-1.6.4.min.js/*! jQuery v1.6.4 http://jquery.com/ | http://jquery.org/license */
(function(a,b){function cu(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cr(a){if(!cg[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ch||(ch=c.createElement("iframe"),ch.frameBorder=ch.width=ch.height=0),b.appendChild(ch);if(!ci||!ch.createElement)ci=(ch.contentWindow||ch.contentDocument).document,ci.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),ci.close();d=ci.createElement(a),ci.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ch)}cg[a]=e}return cg[a]}function cq(a,b){var c={};f.each(cm.concat.apply([],cm.slice(0,b)),function(){c[this]=a});return c}function cp(){cn=b}function co(){setTimeout(cp,0);return cn=f.now()}function cf(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ce(){try{return new a.XMLHttpRequest}catch(b){}}function b$(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function bZ(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function bY(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bA.test(a)?d(a,e):bY(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)bY(a+"["+e+"]",b[e],c,d);else d(a,b)}function bX(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function bW(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bP,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=bW(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=bW(a,c,d,e,"*",g));return l}function bV(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bL),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function by(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bt:bu;if(d>0){c!=="border"&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0});return d+"px"}d=bv(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+this))||0)});return d+"px"}function bl(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bd,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bk(a){f.nodeName(a,"input")?bj(a):"getElementsByTagName"in a&&f.grep(a.getElementsByTagName("input"),bj)}function bj(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bi(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function bh(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bg(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;e=e[c]=f.extend({},d);if(g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;i<j;i++)f.event.add(b,h+(g[h][i].namespace?".":"")+g[h][i].namespace,g[h][i],g[h][i].data)}}}}function bf(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function V(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(Q.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function U(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function M(a,b){return(a&&a!=="*"?a+".":"")+b.replace(y,"`").replace(z,"&")}function L(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;i<s.length;i++)g=s[i],g.origType.replace(w,"")===a.type?q.push(g.selector):s.splice(i--,1);e=f(a.target).closest(q,a.currentTarget);for(j=0,k=e.length;j<k;j++){m=e[j];for(i=0;i<s.length;i++){g=s[i];if(m.selector===g.selector&&(!n||n.test(g.namespace))&&!m.elem.disabled){h=m.elem,d=null;if(g.preType==="mouseenter"||g.preType==="mouseleave")a.type=g.preType,d=f(a.relatedTarget).closest(g.selector)[0],d&&f.contains(h,d)&&(d=h);(!d||d!==h)&&p.push({elem:h,handleObj:g,level:m.level})}}}for(j=0,k=p.length;j<k;j++){e=p[j];if(c&&e.level>c)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function J(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function D(){return!0}function C(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function K(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(K,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=/-([a-z]|[0-9])/ig,x=/^-ms-/,y=function(a,b){return(b+"").toUpperCase()},z=d.userAgent,A,B,C,D=Object.prototype.toString,E=Object.prototype.hasOwnProperty,F=Array.prototype.push,G=Array.prototype.slice,H=String.prototype.trim,I=Array.prototype.indexOf,J={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6.4",length:0,size:function(){return this.length},toArray:function(){return G.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?F.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),B.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(G.apply(this,arguments),"slice",G.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:F,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;B.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!B){B=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",C,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",C),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&K()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):J[D.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!E.call(a,"constructor")&&!E.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||E.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(x,"ms-").replace(w,y)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:H?function(a){return a==null?"":H.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?F.call(c,a):e.merge(c,a)}return c},inArray:function(a,b){if(!b)return-1;if(I)return I.call(b,a);for(var c=0,d=b.length;c<d;c++)if(b[c]===a)return c;return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=G.call(arguments,2),g=function(){return a.apply(c,f.concat(G.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=s.exec(a)||t.exec(a)||u.exec(a)||a.indexOf("compatible")<0&&v.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){J["[object "+b+"]"]=b.toLowerCase()}),A=e.uaMatch(z),A.browser&&(e.browser[A.browser]=!0,e.browser.version=A.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?C=function(){c.removeEventListener("DOMContentLoaded",C,!1),e.ready()}:c.attachEvent&&(C=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",C),e.ready())});return e}(),g="done fail isResolved isRejected promise then always pipe".split(" "),h=[].slice;f.extend({_Deferred:function(){var a=[],b,c,d,e={done:function(){if(!d){var c=arguments,g,h,i,j,k;b&&(k=b,b=0);for(g=0,h=c.length;g<h;g++)i=c[g],j=f.type(i),j==="array"?e.done.apply(e,i):j==="function"&&a.push(i);k&&e.resolveWith(k[0],k[1])}return this},resolveWith:function(e,f){if(!d&&!b&&!c){f=f||[],c=1;try{while(a[0])a.shift().apply(e,f)}finally{b=[e,f],c=0}}return this},resolve:function(){e.resolveWith(this,arguments);return this},isResolved:function(){return!!c||!!b},cancel:function(){d=1,a=[];return this}};return e},Deferred:function(a){var b=f._Deferred(),c=f._Deferred(),d;f.extend(b,{then:function(a,c){b.done(a).fail(c);return this},always:function(){return b.done.apply(b,arguments).fail.apply(this,arguments)},fail:c.done,rejectWith:c.resolveWith,reject:c.resolve,isRejected:c.isResolved,pipe:function(a,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[c,"reject"]},function(a,c){var e=c[0],g=c[1],h;f.isFunction(e)?b[a](function(){h=e.apply(this,arguments),h&&f.isFunction(h.promise)?h.promise().then(d.resolve,d.reject):d[g+"With"](this===b?d:this,[h])}):b[a](d[g])})}).promise()},promise:function(a){if(a==null){if(d)return d;d=a={}}var c=g.length;while(c--)a[g[c]]=b[g[c]];return a}}),b.done(c.cancel).fail(b.cancel),delete b.cancel,a&&a.call(b,b);return b},when:function(a){function i(a){return function(c){b[a]=arguments.length>1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c<d;c++)b[c]&&f.isFunction(b[c].promise)?b[c].promise().then(i(c),g.reject):--e;e||g.resolveWith(g,b)}else g!==a&&g.resolveWith(g,d?[a]:[]);return g.promise()}}),f.support=function(){var a=c.createElement("div"),b=c.documentElement,d,e,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;a.setAttribute("className","t"),a.innerHTML="   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55$/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue=i.value==="t",i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.firstChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},m&&f.extend(p,{position:"absolute",left:"-1000px",top:"-1000px"});for(t in p)o.style[t]=p[t];o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,k.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="<div style='width:4px;'></div>",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",q=a.getElementsByTagName("td"),u=q[0].offsetHeight===0,q[0].style.display="",q[1].style.display="none",k.reliableHiddenOffsets=u&&q[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",a.appendChild(j),k.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0),o.innerHTML="",n.removeChild(o);if(a.attachEvent)for(t in{submit:1,change:1,focusin:1})s="on"+t,u=s in a,u||(a.setAttribute(s,"return;"),u=typeof a[s]=="function"),k[t+"Bubbles"]=u;o=l=g=h=m=j=a=i=null;return k}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i=f.expando,j=typeof c=="string",k=a.nodeType,l=k?f.cache:a,m=k?a[f.expando]:a[f.expando]&&f.expando;if((!m||e&&m&&l[m]&&!l[m][i])&&j&&d===b)return;m||(k?a[f.expando]=m=++f.uuid:m=f.expando),l[m]||(l[m]={},k||(l[m].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?l[m][i]=f.extend(l[m][i],c):l[m]=f.extend(l[m],c);g=l[m],e&&(g[i]||(g[i]={}),g=g[i]),d!==b&&(g[f.camelCase(c)]=d);if(c==="events"&&!g[c])return g[i]&&g[i].events;j?(h=g[c],h==null&&(h=g[f.camelCase(c)])):h=g;return h}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e=f.expando,g=a.nodeType,h=g?f.cache:a,i=g?a[f.expando]:f.expando;if(!h[i])return;if(b){d=c?h[i][e]:h[i];if(d){d[b]||(b=f.camelCase(b)),delete d[b];if(!l(d))return}}if(c){delete h[i][e];if(!l(h[i]))return}var j=h[i][e];f.support.deleteExpando||!h.setInterval?delete h[i]:h[i]=null,j?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=j):g&&(f.support.deleteExpando?delete a[f.expando]:a.removeAttribute?a.removeAttribute(f.expando):a[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h<i;h++)g=e[h].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),k(this[0],g,d[g]))}}return d}if(typeof a=="object")return this.each(function(){f.data(this,a)});var j=a.split(".");j[1]=j[1]?"."+j[1]:"";if(c===b){d=this.triggerHandler("getData"+j[1]+"!",[j[0]]),d===b&&this.length&&(d=f.data(this[0],a),d=k(this[0],a,d));return d===b&&j[1]?this.data(j[0]):d}return this.each(function(){var b=f(this),d=[j[0],c];b.triggerHandler("setData"+j[1]+"!",d),f.data(this,a,c),b.triggerHandler("changeData"+j[1]+"!",d)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,c){a&&(c=(c||"fx")+"mark",f.data(a,c,(f.data(a,c,b,!0)||0)+1,!0))},_unmark:function(a,c,d){a!==!0&&(d=c,c=a,a=!1);if(c){d=d||"fx";var e=d+"mark",g=a?0:(f.data(c,e,b,!0)||1)-1;g?f.data(c,e,g,!0):(f.removeData(c,e,!0),m(c,d,"mark"))}},queue:function(a,c,d){if(a){c=(c||"fx")+"queue";var e=f.data(a,c,b,!0);d&&(!e||f.isArray(d)?e=f.data(a,c,f.makeArray(d),!0):e.push(d));return e||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e;d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),d.call(a,function(){f.dequeue(a,b)})),c.length||(f.removeData(a,b+"queue",!0),m(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(){var c=this;setTimeout(function(){f.dequeue(c,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f._Deferred(),!0))h++,l.done(m);m();return d.promise()}});var n=/[\n\t\r]/g,o=/\s+/,p=/\r/g,q=/^(?:button|input)$/i,r=/^(?:button|input|object|select|textarea)$/i,s=/^a(?:rea)?$/i,t=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,u,v;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(o);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(o);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(n," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(o);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ";for(var c=0,d=this.length;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(n," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;d=e.value;return typeof d=="string"?d.replace(p,""):d==null?"":d}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c=a.selectedIndex,d=[],e=a.options,g=a.type==="select-one";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h<i;h++){var j=e[h];if(j.selected&&(f.support.optDisabled?!j.disabled:j.getAttribute("disabled")===null)&&(!j.parentNode.disabled||!f.nodeName(j.parentNode,"optgroup"))){b=f(j).val();if(g)return b;d.push(b)}}if(g&&!d.length&&e.length)return f(e[c]).val();return d},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);j&&(c=f.attrFix[c]||c,i=f.attrHooks[c],i||(t.test(c)?i=v:u&&(i=u)));if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j&&(h=i.get(a,c))!==null)return h;h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.attr(a,b,""),a.removeAttribute(b),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(u&&f.nodeName(a,"button"))return u.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(u&&f.nodeName(a,"button"))return u.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);i&&(c=f.propFix[c]||c,h=f.propHooks[c]);return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==null?g:a[c]},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabIndex=f.propHooks.tabIndex,v={get:function(a,c){var d;return f.prop(a,c)===!0||(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},f.support.getSetAttribute||(u=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==""?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var w=/\.(.*)$/,x=/^(?:textarea|input|select)$/i,y=/\./g,z=/ /g,A=/[^\w\s.|`]/g,B=function(a){return a.replace(A,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=C;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=C);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),B).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j<p.length;j++){q=p[j];if(l||n.test(q.namespace))f.event.remove(a,r,q.handler,j),p.splice(j--,1)}continue}o=f.event.special[h]||{};for(j=e||0;j<p.length;j++){q=p[j];if(d.guid===q.guid){if(l||n.test(q.namespace))e==null&&p.splice(j--,1),o.remove&&o.remove.call(a,q);if(e!=null)break}}if(p.length===0||e!=null&&p.length===1)(!o.teardown||o.teardown.call(a,m)===!1)&&f.removeEvent(a,h,s.handle),g=null,delete 
t[h]}if(f.isEmptyObject(t)){var u=s.handle;u&&(u.elem=null),delete s.events,delete s.handle,f.isEmptyObject(s)&&f.removeData(a,b,!0)}}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){var h=c.type||c,i=[],j;h.indexOf("!")>=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d!=null?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h<i;h++){var j=d[h];if(e||c.namespace_re.test(j.namespace)){c.handler=j.handler,c.data=j.data,c.handleObj=j;var k=j.handler.apply(this,g);k!==b&&(c.result=k,k===!1&&(c.preventDefault(),c.stopPropagation()));if(c.isImmediatePropagationStopped())break}}return c.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(a){if(a[f.expando])return a;var d=a;a=f.Event(d);for(var e=this.props.length,g;e;)g=this.props[--e],a[g]=d[g];a.target||(a.target=a.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),!a.relatedTarget&&a.fromElement&&(a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement);if(a.pageX==null&&a.clientX!=null){var h=a.target.ownerDocument||c,i=h.documentElement,j=h.body;a.pageX=a.clientX+(i&&i.scrollLeft||j&&j.scrollLeft||0)-(i&&i.clientLeft||j&&j.clientLeft||0),a.pageY=a.clientY+(i&&i.scrollTop||j&&j.scrollTop||0)-(i&&i.clientTop||j&&j.clientTop||0)}a.which==null&&(a.charCode!=null||a.keyCode!=null)&&(a.which=a.charCode!=null?a.charCode:a.keyCode),!a.metaKey&&a.ctrlKey&&(a.metaKey=a.ctrlKey),!a.which&&a.button!==b&&(a.which=a.button&1?1:a.button&2?3:a.button&4?2:0);return a},guid:1e8,proxy:f.proxy,special:{ready:{setup:f.bindReady,teardown:f.noop},live:{add:function(a){f.event.add(this,M(a.origType,a.selector),f.extend({},a,{handler:L,guid:a.handler.guid}))},remove:function(a){f.event.remove(this,M(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}}},f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!this.preventDefault)return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?D:C):this.type=a,b&&f.extend(this,b),this.timeStamp=f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=D;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=D;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=D,this.stopPropagation()},isDefaultPrevented:C,isPropagationStopped:C,isImmediatePropagationStopped:C};var E=function(a){var b=a.relatedTarget,c=!1,d=a.type;a.type=a.data,b!==this&&(b&&(c=f.contains(this,b)),c||(f.event.handle.apply(this,arguments),a.type=d))},F=function(a){a.type=a.data,f.event.handle.apply(this,arguments)};f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={setup:function(c){f.event.add(this,b,c&&c.selector?F:E,a)},teardown:function(a){f.event.remove(this,b,a&&a.selector?F:E)}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(a,b){if(!f.nodeName(this,"form"))f.event.add(this,"click.specialSubmit",function(a){var b=a.target,c=f.nodeName(b,"input")||f.nodeName(b,"button")?b.type:"";(c==="submit"||c==="image")&&f(b).closest("form").length&&J("submit",this,arguments)}),f.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,c=f.nodeName(b,"input")||f.nodeName(b,"button")?b.type:"";(c==="text"||c==="password")&&f(b).closest("form").length&&a.keyCode===13&&J("submit",this,arguments)});else return!1},teardown:function(a){f.event.remove(this,".specialSubmit")}});if(!f.support.changeBubbles){var G,H=function(a){var b=f.nodeName(a,"input")?a.type:"",c=a.value;b==="radio"||b==="checkbox"?c=a.checked:b==="select-multiple"?c=a.selectedIndex>-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},I=function(c){var d=c.target,e,g;if(!!x.test(d.nodeName)&&!d.readOnly){e=f._data(d,"_change_data"),g=H(d),(c.type!=="focusout"||d.type!=="radio")&&f._data(d,"_change_data",g);if(e===b||g===e)return;if(e!=null||g)c.type="change",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:I,beforedeactivate:I,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&I.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&I.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",H(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in G)f.event.add(this,c+".specialChange",G[c]);return x.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return x.test(this.nodeName)}},G=f.event.special.change.filters,G.focus=G.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i<j;i++)f.event.add(this[i],a,g,d);return this}}),f.fn.extend({unbind:function(a,b){if(typeof a=="object"&&!a.preventDefault)for(var c in a)this.unbind(c,a[c]);else for(var d=0,e=this.length;d<e;d++)f.event.remove(this[d],a,b);return this},delegate:function(a,b,c,d){return this.live(b,c,d,a)},undelegate:function(a,b,c){return arguments.length===0?this.unbind("live"):this.die(b,null,c,a)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f.data(this,"lastToggle"+a.guid)||0)%d;f.data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var K={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};f.each(["live","die"],function(a,c){f.fn[c]=function(a,d,e,g){var h,i=0,j,k,l,m=g||this.selector,n=g?this:f(this.context);if(typeof a=="object"&&!a.preventDefault){for(var o in a)n[c](o,d,a[o],m);return this}if(c==="die"&&!a&&g&&g.charAt(0)==="."){n.unbind(g);return this}if(d===!1||f.isFunction(d))e=d||C,d=b;a=(a||"").split(" ");while((h=a[i++])!=null){j=w.exec(h),k="",j&&(k=j[0],h=h.replace(w,""));if(h==="hover"){a.push("mouseenter"+k,"mouseleave"+k);continue}l=h,K[h]?(a.push(K[h]+k),h=h+k):h=(K[h]||h)+k;if(c==="live")for(var p=0,q=n.length;p<q;p++)f.event.add(n[p],"live."+M(h,m),{data:d,selector:m,handler:e,origType:h,origHandler:e,preType:l});else n.unbind("live."+M(h,m),e)}return this}}),f.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".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}if(i.nodeType===1){f||(i.sizcache=c,i.sizset=g);if(typeof b!="string"){if(i===b){j=!0;break}}else if(k.filter(b,[i]).length>0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}i.nodeType===1&&!f&&(i.sizcache=c,i.sizset=g);if(i.nodeName.toLowerCase()===b){j=i;break}i=i[a]}d[g]=j}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},k.matches=function(a,b){return k(a,null,null,b)},k.matchesSelector=function(a,b){return k(b,null,null,[a]).length>0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e<f;e++){var g,h=l.order[e];if(g=l.leftMatch[h].exec(a)){var j=g[1];g.splice(1,1);if(j.substr(j.length-1)!=="\\"){g[1]=(g[1]||"").replace(i,""),d=l.find[h](g,b,c);if(d!=null){a=a.replace(l.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},k.filter=function(a,c,d,e){var f,g,h=a,i=[],j=c,m=c&&c[0]&&k.isXML(c[0]);while(a&&c.length){for(var n in l.filter)if((f=l.leftMatch[n].exec(a))!=null&&f[2]){var o,p,q=l.filter[n],r=f[1];g=!1,f.splice(1,1);if(r.substr(r.length-1)==="\\")continue;j===i&&(i=[]);if(l.preFilter[n]){f=l.preFilter[n](f,j,d,i,e,m);if(!f)g=o=!0;else if(f===!0)continue}if(f)for(var s=0;(p=j[s])!=null;s++)if(p){o=q(p,f,s,j);var t=e^!!o;d&&o!=null?t?g=!0:j[s]=!1:t&&(i.push(p),g=!0)}if(o!==b){d||(j=i),a=a.replace(l.match[n],"");if(!g)return[];break}}if(a===h)if(g==null)k.error(a);else break;h=a}return j},k.error=function(a){throw"Syntax error, unrecognized expression: "+a};var l=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!j.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&k.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&k.filter(b,a,!0)}},"":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("parentNode",b,f,a,e,c)},"~":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("previousSibling",b,f,a,e,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(i,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}k.error(e)},CHILD:function(a,b){var c=b[1],d=a;switch(c){case"only":case"first":while(d=d.previousSibling)if(d.nodeType===1)return!1;if(c==="first")return!0;d=a;case"last":while(d=d.nextSibling)if(d.nodeType===1)return!1;return!0;case"nth":var e=b[2],f=b[3];if(e===1&&f===0)return!0;var g=b[0],h=a.parentNode;if(h&&(h.sizcache!==g||!a.nodeIndex)){var i=0;for(d=h.firstChild;d;d=d.nextSibling)d.nodeType===1&&(d.nodeIndex=++i);h.sizcache=g}var j=a.nodeIndex-f;return e===0?j===0:j%e===0&&j/e>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c<f;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var r,s;c.documentElement.compareDocumentPosition?r=function(a,b){if(a===b){g=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(r=function(a,b){if(a===b){g=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],h=a.parentNode,i=b.parentNode,j=h;if(h===i)return s(a,b);if(!h)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return s(e[k],f[k]);return k===c?s(a,f[k],-1):s(e[k],b,1)},s=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),k.getText=function(a){var b="",c;for(var d=0;a[d];d++)c=a[d],c.nodeType===3||c.nodeType===4?b+=c.nodeValue:c.nodeType!==8&&(b+=k.getText(c.childNodes));return b},function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g<h;g++)k(a,f[g],d);return k.filter(e,d)};f.find=k,f.expr=k.selectors,f.expr[":"]=f.expr.filters,f.unique=k.uniqueSort,f.text=k.getText,f.isXMLDoc=k.isXML,f.contains=k.contains}();var N=/Until$/,O=/^(?:parents|prevUntil|prevAll)/,P=/,/,Q=/^.[^:#\[\.,]*$/,R=Array.prototype.slice,S=f.expr.match.POS,T={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(V(this,a,!1),"not",a)},filter:function(a){return this.pushStack(V(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d<e;d++)i=a[d],j[i]||(j[i]=S.test(i)?f(i,b||this.context):i);while(g&&g.ownerDocument&&g!==b){for(i in j)h=j[i],(h.jquery?h.index(g)>-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=S.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(l?l.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(U(c[0])||U(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=R.call(arguments);N.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!T[a]?f.unique(e):e,(this.length>1||P.test(d))&&O.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|object|embed|option|style)/i,bb=/checked\s*(?:[^=]|=\s*.checked.)/i,bc=/\/(java|ecma)script/i,bd=/^\s*<!(?:\[CDATA\[|\-\-)/,be={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};be.optgroup=be.option,be.tbody=be.tfoot=be.colgroup=be.caption=be.thead,be.th=be.td,f.support.htmlSerialize||(be._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!be[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bb.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bf(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bl)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i;b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof a[0]=="string"&&a[0].length<512&&i===c&&a[0].charAt(0)==="<"&&!ba.test(a[0])&&(f.support.checkClone||!bb.test(a[0]))&&(g=!0,h=f.fragments[a[0]],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean
(a,i,e,d)),g&&(f.fragments[a[0]]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bh(a,d),e=bi(a),g=bi(d);for(h=0;e[h];++h)g[h]&&bh(e[h],g[h])}if(b){bg(a,d);if(c){e=bi(a),g=bi(d);for(h=0;e[h];++h)bg(e[h],g[h])}}e=g=null;return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=be[l]||be._default,n=m[0],o=b.createElement("div");o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bk(k[i]);else bk(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||bc.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.expando,g=f.event.special,h=f.support.deleteExpando;for(var i=0,j;(j=a[i])!=null;i++){if(j.nodeName&&f.noData[j.nodeName.toLowerCase()])continue;c=j[f.expando];if(c){b=d[c]&&d[c][e];if(b&&b.events){for(var k in b.events)g[k]?f.event.remove(j,k):f.removeEvent(j,k,b.handle);b.handle&&(b.handle.elem=null)}h?delete j[f.expando]:j.removeAttribute&&j.removeAttribute(f.expando),delete d[c]}}}});var bm=/alpha\([^)]*\)/i,bn=/opacity=([^)]*)/,bo=/([A-Z]|^ms)/g,bp=/^-?\d+(?:px)?$/i,bq=/^-?\d/,br=/^([\-+])=([\-+.\de]+)/,bs={position:"absolute",visibility:"hidden",display:"block"},bt=["Left","Right"],bu=["Top","Bottom"],bv,bw,bx;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bv(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=br.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bv)return bv(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return by(a,b,d);f.swap(a,bs,function(){e=by(a,b,d)});return e}},set:function(a,b){if(!bp.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bn.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bm,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bm.test(g)?g.replace(bm,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bv(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bw=function(a,c){var d,e,g;c=c.replace(bo,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bx=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bp.test(d)&&bq.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bv=bw||bx,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bz=/%20/g,bA=/\[\]$/,bB=/\r?\n/g,bC=/#.*$/,bD=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bE=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bF=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bG=/^(?:GET|HEAD)$/,bH=/^\/\//,bI=/\?/,bJ=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bK=/^(?:select|textarea)/i,bL=/\s+/,bM=/([?&])_=[^&]*/,bN=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bO=f.fn.load,bP={},bQ={},bR,bS,bT=["*/"]+["*"];try{bR=e.href}catch(bU){bR=c.createElement("a"),bR.href="",bR=bR.href}bS=bN.exec(bR.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bO)return bO.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bJ,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bK.test(this.nodeName)||bE.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bB,"\r\n")}}):{name:b.name,value:c.replace(bB,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?bX(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),bX(a,b);return a},ajaxSettings:{url:bR,isLocal:bF.test(bS[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bT},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bV(bP),ajaxTransport:bV(bQ),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?bZ(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=b$(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bD.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bC,"").replace(bH,bS[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bL),d.crossDomain==null&&(r=bN.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bS[1]&&r[2]==bS[2]&&(r[3]||(r[1]==="http:"?80:443))==(bS[3]||(bS[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bW(bP,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bG.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bI.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bM,"$1_="+x);d.url=y+(y===d.url?(bI.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bT+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bW(bQ,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){s<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)bY(g,a[g],c,e);return d.join("&").replace(bz,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var b_=f.now(),ca=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+b_++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ca.test(b.url)||e&&ca.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ca,l),b.url===j&&(e&&(k=k.replace(ca,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cb=a.ActiveXObject?function(){for(var a in cd)cd[a](0,1)}:!1,cc=0,cd;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ce()||cf()}:ce,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cb&&delete cd[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cc,cb&&(cd||(cd={},f(a).unload(cb)),cd[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cg={},ch,ci,cj=/^(?:toggle|show|hide)$/,ck=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cl,cm=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cn;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cq("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cr(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cq("hide",3),a,b,c);for(var d=0,e=this.length;d<e;d++)if(this[d].style){var g=f.css(this[d],"display");g!=="none"&&!f._data(this[d],"olddisplay")&&f._data(this[d],"olddisplay",g)}for(d=0;d<e;d++)this[d].style&&(this[d].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cq("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return this[e.queue===!1?"each":"queue"](function(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(f.support.inlineBlockNeedsLayout?(j=cr(this.nodeName),j==="inline"?this.style.display="inline-block":(this.style.display="inline",this.style.zoom=1)):this.style.display="inline-block"))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)k=new f.fx(this,b,i),h=a[i],cj.test(h)?k[h==="toggle"?d?"show":"hide":h]():(l=ck.exec(h),m=k.cur(),l?(n=parseFloat(l[2]),o=l[3]||(f.cssNumber[i]?"":"px"),o!=="px"&&(f.style(this,i,(n||1)+o),m=(n||1)/k.cur()*m,f.style(this,i,m+o)),l[1]&&(n=(l[1]==="-="?-1:1)*n+m),k.custom(m,n,o)):k.custom(m,h,""));return!0})},stop:function(a,b){a&&this.queue([]),this.each(function(){var a=f.timers,c=a.length;b||f._unmark(!0,this);while(c--)a[c].elem===this&&(b&&a[c](!0),a.splice(c,1))}),b||this.dequeue();return this}}),f.each({slideDown:cq("show",1),slideUp:cq("hide",1),slideToggle:cq("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default,d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue!==!1?f.dequeue(this):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,b,c){function g(a){return d.step(a)}var d=this,e=f.fx;this.startTime=cn||co(),this.start=a,this.end=b,this.unit=c||this.unit||(f.cssNumber[this.prop]?"":"px"),this.now=this.start,this.pos=this.state=0,g.elem=this.elem,g()&&f.timers.push(g)&&!cl&&(cl=setInterval(e.tick,e.interval))},show:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.show=!0,this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b=cn||co(),c=!0,d=this.elem,e=this.options,g,h;if(a||b>=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){for(var a=f.timers,b=0;b<a.length;++b)a[b]()||a.splice(b--,1);a.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cl),cl=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit:a.elem[a.prop]=a.now}}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cs=/^t(?:able|d|h)$/i,ct=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cu(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);f.offset.initialize();var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.offset.supportsFixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.offset.doesNotAddBorder&&(!f.offset.doesAddBorderForTableAndCells||!cs.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.offset.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.offset.supportsFixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={initialize:function(){var a=c.body,b=c.createElement("div"),d,e,g,h,i=parseFloat(f.css(a,"marginTop"))||0,j="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=ct.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!ct.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cu(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cu(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a&&a.style?parseFloat(f.css(a,d,"padding")):null},f.fn["outer"+c]=function(a){var b=this[0];return b&&b.style?parseFloat(f.css(b,d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNaN(j)?i:j}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window);PK�����*†9D������������x���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/public/stylesheets/main.cssPK�����*†9D_5¢<���<���j���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/htgroupsroot: root apacheRoot
users: root apacheRoot user apacheUserPK�����*†9D(ÉÆ9����u���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/EncryptionTest.java
import org.junit.Test;
import play.Logger;
import play.modules.fileauth.utils.MD5Crypt;
import play.test.UnitTest;

/**
 * EncryptionTest
 * 31.07.2012
 * @author Philipp Haussleiter
 *
 */
public class EncryptionTest extends UnitTest {

    @Test
    public void testApacheCrypt() {
        Logger.info("testing APACHE_CRYPT");
        String clear = "pw_" + System.currentTimeMillis();
        String pass;
        String salt = "abcd1234";
        pass = MD5Crypt.apacheCrypt(clear);
        Logger.info(clear + " got me " + pass);
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
        pass = MD5Crypt.apacheCrypt(clear, salt);
        Logger.info(clear + " & salt " + salt + " got me " + pass);
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
    }

    @Test
    public void testCrypt() {
        Logger.info("testing CRYPT");
        String clear = "pw_" + System.currentTimeMillis();
        String pass;
        String salt = "abcd1234";
        pass = MD5Crypt.crypt(clear);
        Logger.info(clear + " got me " + pass);
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
        pass = MD5Crypt.crypt(clear, salt);
        Logger.info(clear + " & salt " + salt + " got me " + pass);
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
    }
}
PK�����*†9D*˜,-I��I��v���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/ApacheUsersTest.java
import java.util.HashMap;
import java.util.Map;
import org.junit.BeforeClass;
import org.junit.Test;
import play.Play;
import play.cache.Cache;
import play.modules.fileauth.FileAuth;
import play.modules.fileauth.utils.MD5Crypt;
import play.test.UnitTest;

/**
 * ApacheUsersTest
 * 03.08.2012
 * @author Philipp Haussleiter
 *
 */
public class ApacheUsersTest extends UnitTest {

    @BeforeClass
    public static void setup() {
        Play.configuration.setProperty("authfile.users.path", Play.applicationPath + "/test/htusers");
        Play.configuration.setProperty("authfile.users.delimeter", ":");
        Cache.safeDelete(FileAuth.AUTH_FILE_USERS_CACHE_KEY);
        FileAuth.scanUsers();
    }

    @Test
    public void testUsersRead() {
        Map<String, String> users = Cache.get(FileAuth.AUTH_FILE_USERS_CACHE_KEY, HashMap.class);
        assertNotNull(users);
    }

    @Test
    public void testUsersValidate() {
        String clear = "user";
        String pass = MD5Crypt.crypt("user");
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
    }

    @Test
    public void testValidatePassword() {
        String pass = "user";
        String user = "user";
        assertTrue(FileAuth.validate(user, pass));
        user = "apacheUser";
        assertTrue(FileAuth.validate(user, pass));
        user = "user";
        pass = "user123";
        assertFalse(FileAuth.validate(user, pass));
    }

    @Test
    public void testValidateNotExistingUser() {
        String pass = "user123";
        String user = "user123";
        assertFalse(FileAuth.validate(user, pass));
    }
}
PK�����*†9DÄžŒÒù��ù��v���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/GroupGroupsTest.java
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.junit.BeforeClass;
import org.junit.Test;
import play.Play;
import play.cache.Cache;
import play.modules.fileauth.FileAuth;
import play.test.UnitTest;

/**
 * GroupGroupsTest
 * 04.08.2012
 * @author Philipp Haussleiter
 *
 */
public class GroupGroupsTest extends UnitTest {

    @BeforeClass
    public static void setup() {
        Play.configuration.setProperty("authfile.groups.path", Play.applicationPath + "/test/group");
        Play.configuration.setProperty("authfile.users.delimeter", ":");
        Play.configuration.setProperty("authfile.groups.delimeter", ",");
        Cache.safeDelete(FileAuth.AUTH_FILE_GROUPS_CACHE_KEY);
    }

    @Test
    public void testUsersRead() {
        FileAuth.scanGroups();
        Map<String, Set<String>> groups = Cache.get(FileAuth.AUTH_FILE_GROUPS_CACHE_KEY, HashMap.class);
        assertNotNull(groups);
    }

    @Test
    public void testGroupContainsUser() {
        String user = "user";
        String group = "users";
        assertTrue(FileAuth.contains(group, user));
        user = "root";
        assertTrue(FileAuth.contains(group, user));
    }

    @Test
    public void testGroupNotContainsUser() {
        String user = "user";
        String group = "root";
        assertFalse(FileAuth.contains(group, user));
    }

    public void testGroupNotExists() {
        String user = "user";
        String group = "user";
        assertFalse(FileAuth.contains(group, user));
    }
}PK�����*†9D?5'³g��g��v���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/ShadowUsersTest.java
import java.util.HashMap;
import java.util.Map;
import org.junit.BeforeClass;
import org.junit.Test;
import play.Logger;
import play.Play;
import play.cache.Cache;
import play.modules.fileauth.FileAuth;
import play.modules.fileauth.utils.MD5Crypt;
import play.test.UnitTest;


/**
 * ShadowUsersTest
 * 04.08.2012
 * @author Philipp Haussleiter
 *
 */
public class ShadowUsersTest extends UnitTest {

    @BeforeClass
    public static void setup() {
        Play.configuration.setProperty("authfile.users.path", Play.applicationPath + "/test/shadow");
        Logger.info("file path: "+Play.configuration.getProperty("authfile.users.path"));
        Play.configuration.setProperty("authfile.users.delimeter", ":");
        Cache.safeDelete(FileAuth.AUTH_FILE_USERS_CACHE_KEY);
    }

    @Test
    public void testUsersRead() {
        FileAuth.scanUsers();
        Map<String, String> users = Cache.get(FileAuth.AUTH_FILE_USERS_CACHE_KEY, HashMap.class);
        assertNotNull(users);
    }

    @Test
    public void testUsersValidate() {
        String clear = "user";
        String pass = MD5Crypt.crypt("user");
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
    }

    @Test
    public void testValidatePassword() {
        String pass = "user";
        String user = "user";
        assertTrue(FileAuth.validate(user, pass));
        user = "user";
        pass = "user123";
        assertFalse(FileAuth.validate(user, pass));
    }

    @Test
    public void testValidateNotExistingUser() {
        String pass = "user123";
        String user = "user123";
        assertFalse(FileAuth.validate(user, pass));
    }
}
PK�����*†9DTâÒ%���%���g���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/grouproot:x:321:root
users:x:123:root,userPK�����*†9Dcé¸���¸���j���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/data.yml# you describe your data using the YAML notation here
# and then load them using Fixtures.load("data.yml")

# User(bob):
#   email: bob@gmail.com
#   password: secret
#   fullname: BobPK�����*†9D<_'²���²���i���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/htusersapacheUser:$apr1$kuwPretH$BPbVoWoDTEFUw.4g1zDKs1
apacheRoot:$apr1$nVmU2aOS$rDZ4.BG3TPT02YBsCVcSG/
root:$1$imw51D2V$aJbVmk2xlEg8q.Y8nh91E.
user:$1$4aMItwK9$PnpH2GeuHDeR2t.jKhQ771
PK�����*†9DÇÀ���À���p���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/BasicTest.javaimport org.junit.*;
import play.test.*;

public class BasicTest extends UnitTest {

    @Test
    public void aVeryImportantThingToTest() {
        assertEquals(2, 1 + 1);
    }

}
PK�����*†9D‰=u���u���h���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/shadowroot:$1$imw51D2V$aJbVmk2xlEg8q.Y8nh91E.:43534:0:435:7:::
user:$1$4aMItwK9$PnpH2GeuHDeR2t.jKhQ771:345345:0:46456:7:::
PK�����*†9D,mˆ÷��÷��w���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/ApacheGroupsTest.java
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.junit.BeforeClass;
import org.junit.Test;
import play.Logger;
import play.Play;
import play.cache.Cache;
import play.modules.fileauth.FileAuth;
import play.test.UnitTest;

/**
 * ApacheGroupsTest 03.08.2012
 *
 * @author Philipp Haussleiter
 *
 */
public class ApacheGroupsTest extends UnitTest {

    @BeforeClass
    public static void setup() {
        Play.configuration.setProperty("authfile.groups.path", Play.applicationPath + "/test/htgroups");
        Play.configuration.setProperty("authfile.users.path", Play.applicationPath + "/test/htusers");
        Play.configuration.setProperty("authfile.users.delimeter", ":");
        Play.configuration.setProperty("authfile.groups.delimeter", " ");
        Cache.safeDelete(FileAuth.AUTH_FILE_GROUPS_CACHE_KEY);
        Cache.safeDelete(FileAuth.AUTH_FILE_USERS_CACHE_KEY);
        FileAuth.scanGroups();
        FileAuth.scanUsers();
    }

    @Test
    public void testGroupsRead() {
        Logger.info("testGroupsRead");
        FileAuth.scanGroups();
        Map<String, Set<String>> groups = Cache.get(FileAuth.AUTH_FILE_GROUPS_CACHE_KEY, HashMap.class);
        assertNotNull(groups);
        int groupSize = groups.size();
        assertTrue(String.format("but was %d ", groupSize), groupSize > 0);
    }

    @Test
    public void testGroupContainsUser() {
        FileAuth.scanGroups();
        FileAuth.scanUsers();
        String user = "user";
        String group = "users";
        assertTrue(String.format("u: %s, g: %s", user, group), FileAuth.contains(group, user));
        user = "root";
        assertTrue(String.format("u: %s, g: %s", user, group), FileAuth.contains(group, user));
    }

    @Test
    public void testGroupNotContainsUser() {
        FileAuth.scanGroups();
        FileAuth.scanUsers();
        String user = "user";
        String group = "root";
        assertFalse(String.format("u: %s, g: %s", user, group), FileAuth.contains(group, user));
    }

    public void testGroupNotExists() {
        FileAuth.scanGroups();
        FileAuth.scanUsers();
        String user = "user";
        String group = "user";
        assertFalse(String.format("u: %s, g: %s", user, group), FileAuth.contains(group, user));
    }
}
PK�����*†9D/%ÈBÔ��Ô��h���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/routes# Routes
# This file defines all application routes (Higher priority routes first)
# ~~~~

# Home page
GET     /                                       Application.index

# Ignore favicon requests
GET     /favicon.ico                            404

# Map static resources from the /app/public folder to the /public path
GET     /public/                                staticDir:public

# Catch all
*       /{controller}/{action}                  {controller}.{action}
PK�����*†9D¥#Æ/Ç��Ç��r���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/application.conf# This is the main configuration file for the application.
# ~~~~~
application.name=auth-file-demo

# Application mode
# ~~~~~
# Set to dev to enable instant reloading and other development help.
# Otherwise set to prod.
application.mode=dev
%prod.application.mode=prod

# Secret key
# ~~~~~
# The secret key is used to secure cryptographics functions
# If you deploy your application to several instances be sure to use the same key !
application.secret=uQks53MboMLlGVsJSrPRCipiFOZ4BXn8oDBfOxGxsaXDVtkJOJaIiBNX9SNQoUN8

# i18n
# ~~~~~
# Define locales used by your application.
# You can then place localized messages in conf/messages.{locale} files
# application.langs=fr,en,ja

# Date format
# ~~~~~
date.format=yyyy-MM-dd
# date.format.fr=dd/MM/yyyy

# Server configuration
# ~~~~~
# If you need to change the HTTP port, uncomment this (default is set to 9000)
# http.port=9000
#
# By default the server listen for HTTP on the wilcard address.
# You can restrict this.
# http.address=127.0.0.1
#
# Use this if you don't host your Play application at the root of the domain
# you're serving it from. This parameter has no effect when deployed as a
# war, because the path will be handled by the application server.
# http.path=/

# Session configuration
# ~~~~~~~~~~~~~~~~~~~~~~
# By default, session will be written to the transient PLAY_SESSION cookie.
# The cookies are not secured by default, only set it to true
# if you're serving your pages through https.
# application.session.cookie=PLAY
# application.session.maxAge=1h
# application.session.secure=false

# Session/Cookie sharing between subdomain
# ~~~~~~~~~~~~~~~~~~~~~~
# By default a cookie is only valid for a specific domain. By setting
# application.defaultCookieDomain to '.example.com', the cookies
# will be valid for all domains ending with '.example.com', ie:
# foo.example.com and bar.example.com
# application.defaultCookieDomain=.example.com

# JVM configuration
# ~~~~~
# Define which port is used by JPDA when application is in debug mode (default is set to 8000)
# jpda.port=8000
#
# Java source level => 1.5, 1.6 or 1.7 (experimental)
# java.source=1.5

# Log level
# ~~~~~
# Specify log level for your application.
# If you want a very customized log, create a log4j.properties file in the conf directory
# application.log=INFO
#
# More logging configuration
# application.log.path=/log4j.properties
# application.log.system.out=off

# Database configuration
# ~~~~~ 
# Enable a database engine if needed.
#
# To quickly set up a development database, use either:
#   - mem : for a transient in memory database (H2 in memory)
#   - fs  : for a simple file written database (H2 file stored)
# db=mem
#
# To connect to a local MySQL5 database, use:
# db=mysql://user:pwd@host/database
#
# To connect to a local PostgreSQL9 database, use:
# db=postgres://user:pwd@host/database
#
# If you need a full JDBC configuration use the following :
# db.url=jdbc:postgresql:database_name
# db.driver=org.postgresql.Driver
# db.user=root
# db.pass=secret
#
# Connections pool configuration :
# db.pool.timeout=1000
# db.pool.maxSize=30
# db.pool.minSize=10
#
# If you want to reuse an existing Datasource from your application server, use:
# db=java:/comp/env/jdbc/myDatasource
#
# When using an existing Datasource, it's sometimes needed to destroy it when
# the application is stopped. Depending on the datasource, you can define a
# generic "destroy" method :
# db.destroyMethod=close

# JPA Configuration (Hibernate)
# ~~~~~
#
# Specify the custom JPA dialect to use here (default to guess):
# jpa.dialect=org.hibernate.dialect.PostgreSQLDialect
#
# Specify the ddl generation pattern to use. Set to none to disable it 
# (default to update in DEV mode, and none in PROD mode):
# jpa.ddl=update
#
# Debug SQL statements (logged using DEBUG level):
# jpa.debugSQL=true
#
# You can even specify additional hibernate properties here:
# hibernate.use_sql_comments=true
# ...
#
# Store path for Blob content
attachments.path=data/attachments

# Memcached configuration
# ~~~~~ 
# Enable memcached if needed. Otherwise a local cache is used.
# memcached=enabled
#
# Specify memcached host (default to 127.0.0.1:11211)
# memcached.host=127.0.0.1:11211
#
# Or you can specify multiple host to build a distributed cache
# memcached.1.host=127.0.0.1:11211
# memcached.2.host=127.0.0.1:11212
#
# Use plain SASL to authenticate for memcached
# memcached.user=
# memcached.password=

# HTTP Response headers control for static files
# ~~~~~
# Set the default max-age, telling the user's browser how long it should cache the page.
# Default is 3600 (one hour). Set it to 0 to send no-cache.
# This is only read in prod mode, in dev mode the cache is disabled.
# http.cacheControl=3600

# If enabled, Play will generate entity tags automatically and send a 304 when needed.
# Default is true, set it to false to deactivate use of entity tags.
# http.useETag=true

# Custom mime types
# mimetype.xpi=application/x-xpinstall

# WS configuration
# ~~~~~
# Default engine is Async Http Client, uncomment to use
# the JDK's internal implementation
# webservice = urlfetch
# If you need to set proxy params for WS requests
# http.proxyHost = localhost
# http.proxyPort = 3128
# http.proxyUser = jojo
# http.proxyPassword = jojo

# Mail configuration
# ~~~~~ 
# Default is to use a mock Mailer
mail.smtp=mock

# Or, specify mail host configuration
# mail.smtp.host=127.0.0.1
# mail.smtp.user=admin
# mail.smtp.pass=
# mail.smtp.channel=ssl

# Url-resolving in Jobs
# ~~~~~~
# When rendering templates with reverse-url-resoling (@@{..}) in Jobs (which do not have an inbound Http.Request),
# ie if sending a HtmlMail, Play need to know which url your users use when accessing your app.
# %test.application.baseUrl=http://localhost:9000/
# %prod.application.baseUrl=http://www.yourdomain.com/

# Jobs executor
# ~~~~~~
# Size of the Jobs pool
# play.jobs.pool=10

# Execution pool
# ~~~~~
# Default to 1 thread in DEV mode or (nb processors + 1) threads in PROD mode.
# Try to keep a low as possible. 1 thread will serialize all requests (very useful for debugging purpose)
# play.pool=3

# Open file from errors pages
# ~~~~~
# If your text editor supports opening files by URL, Play! will
# dynamically link error pages to files 
#
# Example, for textmate:
# play.editor=txmt://open?url=file://%s&line=%s

# Testing. Set up a custom configuration for test mode
# ~~~~~
#%test.module.cobertura=${play.path}/modules/cobertura
%test.application.mode=dev
%test.db.url=jdbc:h2:mem:play;MODE=MYSQL;LOCK_MODE=0
%test.jpa.ddl=create
%test.mail.smtp=mock

PK�����*†9D‹úWÀ �� ��r���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/dependencies.yml# Application dependencies

require:
    - play
    - play -> secure
    - local -> play-file-auth 0.2
    
repositories:
    - playCustomModules:
        type:       local
        artifact:   ${application.path}/../../dist/[module]-[revision].zip
        contains:
          - local -> *PK�����*†9Dqé¶h���h���j���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/messages# You can specialize this file for each language.
# For example, for French create a messages.fr file
#
PK�����*†9D«_^)/��/��p���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/main.html<!DOCTYPE html>

<html>
    <head>
        <title>#{get 'title' /}</title>
        <meta charset="${_response_encoding}">
        <link rel="stylesheet" media="screen" href="@{'/public/stylesheets/main.css'}">
        #{get 'moreStyles' /}
        <link rel="shortcut icon" type="image/png" href="@{'/public/images/favicon.png'}">
        <script src="@{'/public/javascripts/jquery-1.6.4.min.js'}" type="text/javascript" charset="${_response_encoding}"></script>
        #{get 'moreScripts' /}
    </head>
    <body>
        #{doLayout /}
    </body>
</html>
PK�����*†9D*º$•<���<���}���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/Application/index.html#{extends 'main.html' /}
#{set title:'Home' /}

#{welcome /}PK�����*†9DÙ¦��¦��v���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/errors/404.html<!DOCTYPE html>

<html>
    <head>
        <title>Not found</title>
        <meta http-equiv="Content-Type" content="text/html; charset=${_response_encoding}"/>    
    </head>
    <body>
        #{if play.mode.name() == 'DEV'}
            #{404 result /}
        #{/if}
        #{else}
            <h1>Not found</h1>
            <p>
                ${result.message}
            </p>
        #{/else}
    </body>
</html>
PK�����*†9DËip®V��V��v���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/errors/500.html<!DOCTYPE html>

<html>
    <head>
        <title>Application error</title>
        <meta http-equiv="Content-Type" content="text/html; charset=${_response_encoding}"/>	
    </head>
    <body>
        #{if play.mode.name() == 'DEV'}
            #{500 exception /}
        #{/if}
        #{else}
            <h1>Oops, an error occured</h1>
            #{if exception instanceof play.exceptions.PlayException}
                <p>
                    This exception has been logged with id <strong>${exception.id}</strong>.
                </p>
            #{/if}
        #{/else}
    </body>
</html>
PK�����*†9D¤8r“���“���}���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/controllers/Application.javapackage controllers;
import play.mvc.*;

public class Application extends Controller {

    public static void index() {
        render();
    }

}PK�����*†9Dp­b’$���$���k���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/secure/opt/play/play-1.2.5/modules/secure
PK�����*†9DD6I÷P��P��ƒ���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.py# Here you can create play commands that are specific to the module, and extend existing commands

MODULE = 'play-file-auth'

# Commands that are specific to your module

COMMANDS = ['play-file-auth:hello']

def execute(**kargs):
    command = kargs.get("command")
    app = kargs.get("app")
    args = kargs.get("args")
    env = kargs.get("env")

    if command == "play-file-auth:hello":
        print "~ Hello"


# This will be executed before any command (new, run...)
def before(**kargs):
    command = kargs.get("command")
    app = kargs.get("app")
    args = kargs.get("args")
    env = kargs.get("env")


# This will be executed after any command (new, run...)
def after(**kargs):
    command = kargs.get("command")
    app = kargs.get("app")
    args = kargs.get("args")
    env = kargs.get("env")

    if command == "new":
        pass
PK�����*†9DŒÀÉZ•��•�����samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/README.mdplay-file-auth
==============

This Module supports authentication of Play! 1.x Applications agains Unix Auth Files (e.g. Apache htusers)

This Plugin works for all Auth Files with the following syntax:


    user1:passwordhash
    user1:passwordhash:...:...:

    group:user1 user2
    group:x:...:user1,user2


The Hash Algorithm has to be either MD5 Crypt or MD5 Apache Crypt.

    $1$...
    $apr1$...PK�����*†9DaCV��V�����samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/build.xml<?xml version="1.0" encoding="UTF-8"?>

<project name="play-file-auth" default="build" basedir=".">

    <target name="check" unless="play.path">
        <fail message="Please specify Play framework path using -Dplay.path=/path/to/framework/home" />
    </target>

    <path id="project.classpath">
        <pathelement path="${play.path}/framework/classes"/>
        <fileset dir="${play.path}/framework/lib">
            <include name="*.jar"/>
        </fileset>
        <fileset dir="${play.path}/framework">
            <include name="*.jar"/>
        </fileset>
        <fileset dir="lib">
            <include name="*.jar"/>
        </fileset>
    </path>

    <target name="build" depends="compile">
        <mkdir dir="lib" />
        <copy todir="tmp/classes">
            <fileset dir="src">
                <include name="**/*.properties"/>
                <include name="**/*.xml"/>
                <include name="**/play.plugins"/>
                <include name="**/play.static"/>
            </fileset>
        </copy>
        <jar destfile="lib/play-play-file-auth.jar" basedir="tmp/classes">
            <manifest>
                <section name="Play-module">
                    <attribute name="Specification-Title" value="play-file-auth"/>
                </section>
            </manifest>
        </jar>
        <delete dir="tmp" />
    </target>

    <target name="compile" depends="check">
        <mkdir dir="tmp/classes" />
        <javac srcdir="src" destdir="tmp/classes" target="1.5" debug="true">
            <classpath refid="project.classpath" />
        </javac>
    </target>

</project>
PK�����*†9DKïÖ��Ö��„���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pycÑò
È+Rc�����������@���s.���d��Z��d�g�Z�d�„��Z�d�„��Z�d�„��Z�d�S(���s���play-file-auths���play-file-auth:helloc����������K���sV���|��i��d�ƒ�}�|��i��d�ƒ�}�|��i��d�ƒ�}�|��i��d�ƒ�}�|�d�j�o	�d�GHn�d��S(���Nt���commandt���appt���argst���envs���play-file-auth:hellos���~ Hello(���t���get(���t���kargsR����R���R���R���(����(����s���/home/javastream.de/jenkins/jobs/de.consolving.play-file-auth/workspace/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pyt���execute	���s����
c����������K���s@���|��i��d�ƒ�}�|��i��d�ƒ�}�|��i��d�ƒ�}�|��i��d�ƒ�}�d��S(���NR����R���R���R���(���R���(���R���R����R���R���R���(����(����s���/home/javastream.de/jenkins/jobs/de.consolving.play-file-auth/workspace/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pyt���before���s����c����������K���sQ���|��i��d�ƒ�}�|��i��d�ƒ�}�|��i��d�ƒ�}�|��i��d�ƒ�}�|�d�j�o�n�d��S(���NR����R���R���R���t���new(���R���(���R���R����R���R���R���(����(����s���/home/javastream.de/jenkins/jobs/de.consolving.play-file-auth/workspace/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pyt���after���s����
N(���t���MODULEt���COMMANDSR���R���R	���(����(����(����s���/home/javastream.de/jenkins/jobs/de.consolving.play-file-auth/workspace/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pyt���<module>���s���			PK�����*†9DxÏ‘[$���$���€���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/manifestversion=0.2
frameworkVersions=1.2.x
PK�����*†9D¯À}b»��»��“���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/lib/play-play-file-auth.jarPK
����˜C������������	��META-INF/þÊ��PK
���˜C½ÿíŠ���¤������META-INF/MANIFEST.MFM±
Â0E÷@þ!£	U¡H·ÖÉ¡"T\噾ÐiR’tÈß›l®çœËÁ‘Á˜äC$ï:qR
g½û#ýzAQX‘תo!á,‡\ûV5Ÿs+¿ÍE¦Ý‰‘tð1Ç„kw§Õ‘3ΰb'ž²\ý¼[älÚP“!
©üÈ%[Š­†,JØÓR—?PK
����˜C���������������play/PK
����˜C������������
���play/modules/PK
����˜C���������������play/modules/fileauth/PK
����˜C���������������play/modules/fileauth/utils/PK
���˜C��������������play.plugins�PK
���˜C(�å_j
����$���play/modules/fileauth/FileAuth.classW{|Õþ&û˜ÙÉ$À†D—Š,ˆ˜„,QZPEBL „”hD‡ì$Ýìngg‘૾j[m}k¥­O4ÕR´!1ÁG¨Vkµ[«}ØÖÖÚÚ÷ý•~wöÁf³bȏû8÷Üs¿sÎwϝ}ùOpþ£"ˆk|8×ʸN…×(¸^ÅpƒŒ/ª”IÁ—E£hn*†Œ¯Èøj1Jp³Ü"ãV·ávîÀ
îRq7¾¦à»Äðë2¾¡âDaö›¢¿WÅ}¸_ŒPð è’±[ÅÃxDưŠø–hÍc
¾-VöÈøŽŒÇUTá	•Ø+š}*fb¿hž žRð]{DÆK1*6ŽÉxZÅ2Œ*Jßç=£à ‚gRpXÁs2žWq®.½ àEáÕ„Œ#õ›×õ45·4ötv4nêèi¨oXר³¡±[‚¿åb}»^Ñ£ýµ¶eFûWH(iˆE¶µ»ôHҐ 6wô4¶Õ¯ii<W‚t„9Ç,®Ý´±³}’É’ÔxsskãÆÎͼ+ͨi¯’બê’ànˆ…isF‹5Ú’ƒÛk³¾-b(±^=Ò¥[¦˜§…n{ÀLH¶Ä#úPí`,œŒ‰Ú>3bèI{ ¶‰ƒzZé7ì΄aQ{VeUÊ­¤mFj[õ8—=ÉÔÚŒ)+“ÏŠgÎ^6YuåÔPM•¬¢A_‡ÙÕí¤EgæC™¾ú³ÖŠ%ãííOš¦iÌQè0ì
«ë릍ëcM)½±¨­›QÂ;­r:ÞU‘AÇ#æW¤…s¦SSăyÄ)Ó€B ÛõˆÖm†]‰ë‰Ä¥1+L:Ñ^k(návÊ×D¯MŸä‰ë–;lK¡kP´ÈNL­˜±Ú5ɾ>Ã2›=lX\wGHaª;$Ì˪	J¶Åì¦X2nÜÑkÄm3¥vyV£yc®\dnÓÅ=sа
ëZr	¥“S_ø3Äð‰ðµ§œpë–µP 2¢ì¤f"3æ]J}3Ñì;ב‰PVöFÒ÷Síˆ%­^£É9·$sµ–ˆó5´ UÃ:Ðê¬c¹X§'Ȧ,¯ÄÈø¾†—ð2íLb™,	3óë‡†íØ¬a‹h^Â&mcÂ5ôà
ÎÞüLÉxUÃq‘Œ×4ü¯3¢6ˆð-q.ý’¸nÈxCÏñf4o5­NèüTÂ	ù‡¬Iš‘°£²ZÃÏ𦌟køÞ“_òÄ`³¥bСVÐŒ5¼w&áݸíb£×–ñ+
¿Æo$h¹©!þ­†wq¥†ßáJÙ ™FcvP:ÄŠl„„ê|
¿û+
S“¥4×pJ(ÌÿA4ïiø#ÞÑð'¼¯áÏbôþB6,Œjø+>”0÷¸TÖð7±éï@YJ³Zõ‰
ôÿø§ˆÏ¿È»à 3<äéìlüSUÍI_©|qn^‚Üv,Ä)ö‹Oa£C–ã	ë3vbh¤X¿$X€Á˜,„ÉÙ˜0l†û
‘“ÿ1ÕŽB¯Þ;`Ô6ˆ–ae¯ÀqëbC„•iEUK>SxÛUN•T,/¤Èû½°0h°Dmë¹ËDmd™ÙnXfßP{¶lúœ}ílxYáûÌþ¤¥§\‘SŽÛ­XܰlÓHÄìBr	ÅBz>”çRæI(TÏšÞkRh«—l3¢t#4­ÃÒ·{Åäê2”°A2¬7iYFÔÞL6¶š‘ˆøaí\/á¤Êõdz¥Ø±”ˆ©,³Ø	rK¬¿_°ÜmFûb*@ÞR ¹]yIÏxG¹×Øa&Ä›à5©rî¾T·¢âËhòs"”ËŽÉÒO›*Ç-ÎçIÄ#¦]øu¯*ørº9`ä\ñ¤—Æ4øi’Ú•·çìãó`ªÉœH”‘zÎ÷¹Ó·‰„Þ/<2,+&"ž ØÉf³Èfóñ²éÒÃaÌçGu¿8Ü M°–³"x8çãÈq�ësä>ÌÁ†œùé”Hâ-eÛFI-{‰½§ú�¤}ŽÊF¶^GxÚÙj)|›ØûÄ#H-±Ùf/ÖîGÑ.ÃÕ}�î½~O\£ð‚¼¡úäQ(ª÷RÏåØžCëÀb¶5(ÅÎkq2-்Ìys ¢]œ7Ir>gÝʈdËÇ"ñå#Q§"YÁv%‘¬âü"YM$k&!¹p
’±5‹ä³DÒƒ‹Ò}’·¬ƒÄãÞS=yñx\{FQÜZS=­‡PÒr„¡Åc(-ž,¨E4æÇKs
aÌdàýzÏœJ0§1`uê(èÌ0œÑ6'×d�]Ä¥èE˜¶ü
JRk[³k×|èË:0œv Tȁǘ™v`qh³òá‡	ß ü~ ü‹yì%<0Bøƒ„ˁr@Ãõ§áŸàd_@Ô¸¿)
_Ë®ïPÛÌä_:J~ÊìËöÃï/Áì
bPî¯Á	-ã8‘løçŒà£8isý'sXÍÿ#˜çzÁQÌOS¦uºyNiM`VhïÊîÔ]˜›¶#öùån>m•Ýã¨ê�÷.®sÜ#¨é®óL :àY<‚P7à=èÞ}ôýš€×µtK^·èÆPK߆¾î÷ÔøOÅèImÿ¤›¶»]wÇ(>5ŒŠ”ty®4ãØ™S3†³$ŒàlÝ$¿jö2DÛq/ðz‰þ-þŽO¥ªålw0C˜8—¡—³~\A†\Ií«q®Ãm¸»p#ÀMÃÍ´q­Ý‚	ÜŠ79~‹oãv~»Ý)ÍÂ]Nj/¤Õ]˜ÇÄ_B*Ü€:¦~é¾™(¢L¨‡»g‘qÊÞvFŸãÈ'©°2ÌÆQ$2Ôã4ÖóËÜF2‡©5A†cEa{†Eïñ”R’ârÁ…y¤ÕþOsØZ€«>Šm~ˆtL Lä„)ýô8p§Iâ	x’x'pmÀëDÈIØyvcvÀ™‡—Öˆ5e%ٝž”ƒ÷=<ŽsxÚê:_@©SêÁåÅ®åZ¹V^ü æÔrmi]IÀ(qxV_„ó®Ó¤á£ï†rŠ‚¾ûvø}¡,û\öy2ìs¤Ës¥¹ì}ûB‚}×KÕRˆy}C–};Yjû˜±û™íÈ•ù¶=Ä·i7³ý0yóy÷(îÆã\ya/öñoûɃ§ø3i„¿ð÷Ê(þ‹1ɇQiÆ¥xVªÆ<ñT‹ÃÒjŽðœÔˆç¥.¼(í$óC÷uÄr)ORh¡Ä)C%xU¼—°È€…¼;QŒYˆ.ãH#Чež¿1½÷]>,y>b½Ýṇ~ÝèðÜK)ž{ˆ ÅsyžÈð\Hó|ž´•w¯‰ñj‘Nwª·]Ò"‡ñîlõNeð¬”ÖVjež!UüJHWñµ”ˆ§d
âJ3×àJýkÒ	ríq‹Ú-9)ñ;õøeô
Óñ*~î]•ýX˜ç¼±ïhß¹}ٍ©Ï…ùl?ï`¹úÿPK
���˜Cæ'È­r��p��*���play/modules/fileauth/FileAuthPlugin.classQÛJ1œìÖ®nk«VÛz©U(R\|V
–"…Šâc¶]5’&e/ŠŸå‹‚‚àG‰g·õ*æa&™Ì™œ$/¯Ï�¶±b#‚…Y
1ÌY(Z(1¤w…áƒY_?aHèžÇo	åE}×ó¹+I™ié.—'Üñz$¦ÂK0¬µ’ß:}Ý‹¤8çBz<
/MöiÒ–Ñ…P;¢Õþ` E—‡B«NÈý¾Ò.Cõ—ŒN—«¦v©ØîèÈïzq(Cá{öÖ¿æYXg¨ü”EKµÿtLïØÚô…e«í뾨—ì¡Rž yxô¥úúð.R¸Ó¨|;ªÔ÷;™/*V1F¿,¾á­bF<¶ñ�v—lÛ„éDÌ#C˜ˆ'‰rÅMrĹ'g0[›÷H~¦ä`É_¢Úr’VVŒÒÆé¤<¦(ÏÀtR7ƒEb›”yT°€‰7PK
���˜CŒˆvÓ`��%��#���play/modules/fileauth/ScanJob.class}PËNA¬áé.‹ŠÆxpãÁÆ„51«Q80†!ËÙ	ŸåIâÁð£Œ=@ăq“©~Twue?¿Þ?�œ¡n"‰¢‰ÊöÒØO£Âºž/âf—!q¥†‚!çHO<D“¾ðŸxߥNÁQîv¹/u½n&‘Žœ©ËçöD
#Wö‹tÂ‘ÝpïNõ[É¡¢„Áì¨Èˆ©·­5:æ3ÎPyŒ¼PNDW’ÔÛž§BJåÑ…üêÂXõûz&ü¹Öœq7Ò&Î'Ò³B:‡¨Z¨¡ÊPû×Cv£¹¬ëÏk³mJŒ€VŸákG¦£}ÛQ(]ûžOÉ‘©ù[_EÓ�ÇHÐ×_L›#ܢʦÈ(&OÞÀ^—´A˜Z6ó0	­Õ�2”òìÏrk½l,ë-ïm¶',ÒՍ–	k¡ÍhÌa‡b†¸<½B€ÝoPK
���˜CÎǘ	��%��*���play/modules/fileauth/utils/MD5Crypt.class­W{PTçÿ}û¼,X!®(`BuÙe]@E4¾�EA@りԚËîe¹º/wï"5¦Å4iúŠé˦5ÆØ®Imj’v¥Ú`ß3í_ý/íLg:Ó¦L2ÓtÚ4ôz¾»wĵa:…™ïq¾s¾ó;ç;»¿üàæ4€&ü܆fD‹C\ÀqHÚh£Úè,Ň1>œ°b܆"DL˜‘ýÛjÃI<©§øpZÀÅY+³âã6,Æ'¬˜´¡Q~~ޝðI.vŽOpò“>Å5<%àÓœø>|–ŸãäÏóÕÓüÞó|x†_à_ä«/	ø2ß|…8ëW<ËUÍŠ¯[q‘¡ÈßÖÓß±«mŸŸÁÑsT“|a)òùÕ„
=ÈPÒ‹&U)ªî—Â)™Á¢¨1©e--6)QEÝÂ`tÕïg0uÄ‚t\Ö£Då¾TdXNôKÃa™ßHáýRBá{hRG•$ÃÊžxXšðEbÁTXNúF”°,¥ÔQ_JUÂI_ïöu‰‰¸J(LI‰2Tº†îƨi—¡1†òÇ\YŒ®tuwÕ:g$ɺ‰/©œ$l¬‹ŒKÈÉTXepÞ%ОRÂA9ArE‚›VT²Äìjç@˜B÷dI†¡vëð„*'›SDuµ×ÓÍF%'6:²„d•Ld¨qé°’r •PÔ	_¯œLJ!y»’“Ü|ƒ<ÎàšÇÔó§£máPŒ¶£‘ã9®*±(ñ›Üoä_WwrY‰¹!.%“'b‰ ÷†Ä`MHÑ`HŽæÃƒ¿ocl- a:‹¥¸•;²P»tѯ6ÄÃdSD
)Ûˆ•Â~URéq•Ì\þ!þ6W½ÝR:&'”‘‰½y¿¬Z˜Å‡(u(¸•¨*«\šAŒ³ÝO$Â句¹Sá	Q’öÕü*ëÑjÅs".áyR9ÀÑm¬ÍñÔy³¾;\›{¯ZþZV\ñ®ˆø¾)â>&â@v8Èpß="™aÛj_cSóšµëZÖ·nhkïØ¾£sç®®îÝ=½}{ö>´Ïß?°ÿÀÁÁCÒp („F•£Ç‘h,~<‘TSc'Æ'NZ‘q/Šx	ßq
ß&OZ+^ñ\§H\Xì2,E¹/U•ˆœ?ä^y…Á>?E¼Š×D|ßcØro÷6,o{£ˆnp+¦È€º¦:)Uë¤x‚マ›œå–ˆàu~ô‹˜Æm?Än?Ê®~,¢›o‚VŠ!’Úƒ½"ÚÑ!â§øÐ.kçÆ7ì
CÝBŠaÎ~ÍC{†Ê;Iþ‰¤*G½œ —­ÈF¦óí¥WéÝe‰§my2åzœïÂô
…
¯³ò¸¢òZÖÅwöù<ä©À¨”hÓY:h/Åãr”Òf™«ãîT­¥‚Ë]±ØU0§«þKÊR1¡bÚ¥5ª�eSÓ½ëÞ=s~É\™þÑDìoUšÕ–°
©£Z«£^¥7ëÇ$U£t%™Nêð+]]…ÛŒwAÅxÖ%6²&¡&(\sÁ9Äé…•Yµ‚¾g$ûZ µó^Ä)õ¼5YRñ V-A݉Vjb]ÚËš©ÿÉD±ÈÇSR89O6ìH?}V4Ñ÷`€k°ë´ÝRÚ·ÌÙC¤557ÅG3£Ùì¾öŠÆ²‘F‹Flƒ4ŠYlÂfš‹°[uá4LÚÙ {Úô<ŠÜÓ–+({‡1“iŠ.¶\BQܦf·¹y
:Hc•{ڬӍÍt4«F/ËR¦ ÐÖHò³€Ü°Ñ¸žÀ´ÒWÓ,!8Õ¨‘à´ ]hC?¶ã vÌ=ˆmDù€’^}’Œ3ÑÜpEƒ7`ë›4Ì,{U^Gqõbˆ>‘Aieªí–Ó[Ó3oz3°_Ïã¨ÿ¬ì†€”¡5èÃ*<¤é¬…‘ßK(vhž
èÄN’PGøºèÔÉ둎ÃO{ÍåÆMUîéË(qWû'KÏümÖl‡u€®ØO&
Ðþ ¦ª’Î
°ˆš¡å¥O3”Jœ® ‘8ø™eé"Ìœ¹6ïmÌq“…ØG³×Q]º›àñ3»cÑ×wßÂâAŠ‘ŠÛz4XHgö¾RÍì QdX1’¿×J±2@¸9*ê{ú½—H–Û´MwÏ-TÒ|_¯'ƒ%vá2V4dàt,Í êñ£Omñ8–._nz8ƒe,?žù­›øì0³ORMš€1òÑ	òÈ#¤íVâ4ý
˜³7é\IHÉ_í6¢sL+†èi¨„’¿>ŠÃZQ«ÖÑnÒIp{ÕS¨¹>Ï‹Ïä_ƒß•½“¯†´”s’—ÿÏv[æÛ}™´½@èÓ¤í*Ùø"i~‰ì¾ö?Ø}¤ Ýµì¾ý!vS³ÎÞd|ƒì."aÅCö­¸�‘ÏUÜßã±×eð€á9”yŒÙ5YÛCfVÙ…+(öí'L¡n£Éirgð‘V:M
¹…'»àçf§9wnöäyJ«úhSÕ"TQí4y‚Ý~4¤a® 5®Iá/é™?x§PŸã¼€ú
ÁtæJ¹€‰xÒ|ÉoÕvtxªEHÏüÚiâ
Œ\f‘ñ­Ëˆpî¬lYF¢Óì5Ú효%~ïu¬„Æš%¸s]XHÏ9ËÚ3)P¡xZ¥‚Shàqâ<ÙÉ¡Í^ãš)4Øíã^»E[	ãg½v‘/Ïž[oq
•뼫)Ïje-)Èjγ
³¬¥Y-yÖ¢YÖ²‚¬Ö<«-Ï*ä´s²N5ç¨ôtNáŽZý'-”ߤ°ü#ámTáªÕ¦€—Âÿ¯Ô=Þ£
ýw*™ïSšþƒ’àŸT¾þ…þq|€3éO2ƝÓW¡€«LÄk¬7Y)}=Úñ+Úÿ†-ÆïX5Þf5x—­Àûì~f`u¬˜­bæbUÌÃ`
ôïckX#ÛÊšÙ.¶Žõ±jÖÏ6²Ãl²ÍìÛÂ’l;ÏÚØEÖÁ^gÛÙ/X'{‹ídï±.C9ë6Ô°ÃfÖkèb{~¶×p„ù
6 ¥bœ:û$u ‰]ÀËðh­AÀï‘ÐW”‚¹D¥U6Qùj˜V²õ¨…±ÙÐ@Å\¦ÂqØ ’?d˜Ùy¼u5áµ^&P’BÑË…ª—‹Fª’Z–—xÜ­«¯¾FdÉÂI¼—8|7Ðxûξʂ(b2ÊÙ–±V2eN™iÄQ½Ì4☆ž!¬ÉGþPK
����˜C������������	���������íA����META-INF/þÊ��PK
���˜C½ÿíŠ���¤��������������¤+���META-INF/MANIFEST.MFPK
����˜C����������������������íAç���play/PK
����˜C������������
����������íA
��play/modules/PK
����˜C����������������������íA5��play/modules/fileauth/PK
����˜C����������������������íAi��play/modules/fileauth/utils/PK
���˜C����������������������¤£��play.pluginsPK
���˜C(�å_j
����$�����������¤Ï��play/modules/fileauth/FileAuth.classPK
���˜Cæ'È­r��p��*�����������¤{��play/modules/fileauth/FileAuthPlugin.classPK
���˜CŒˆvÓ`��%��#�����������¤5��play/modules/fileauth/ScanJob.classPK
���˜CÎǘ	��%��*�����������¤Ö��play/modules/fileauth/utils/MD5Crypt.classPK��������Ÿ����PK�����*†9DÔQ.^Þ���Þ���ƒ���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/routes# This file defines all module routes (Higher priority routes first)
#
# import these routes in the main app as :
# *     /                       module:play-file-auth
#
# ~~~~

GET     /?                      Module.indexPK�����*†9D1Sù*T���T������samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/application.confapplication.name=play-file-auth
application.mode=dev
application.secret=test
db=mem
PK�����*†9Dæ´(ÕJ���J������samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/dependencies.ymlself: play -> play-file-auth 0.2

require:
    - play
    - play -> securePK�����*†9DÌ;¨U¬���¬���…���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/messages# Default play-file-auth messages
# You can specialize this file for each language.
# For exemple, for french create a messages.fr file

#play-file-auth.name=play-file-authPK�����*†9D������������ˆ���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play.pluginsPK�����*†9DˆŽ6©™��™��ž���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/ScanJob.java/**
 * ScanJob
 * 31.07.2012
 * @author Philipp Haussleiter
 *
 */
package play.modules.fileauth;

import play.jobs.Every;
import play.jobs.Job;

/**
 * Periodically Scan of user/group files. Scan runs every 5 mins.
 * @author Philipp Haußleiter
 */
@Every("5min")
public class ScanJob extends Job {
    @Override
    public void doJob(){
        FileAuth.scanUsers();
        FileAuth.scanGroups();
    }
}
PK�����*†9DlP¨å��å��Ÿ���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/FileAuth.java/**
 * FileAuth 31.07.2012
 *
 * @author Philipp Haussleiter
 *
 */
package play.modules.fileauth;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import play.Logger;
import play.Play;
import play.cache.Cache;
import play.modules.fileauth.utils.MD5Crypt;

/**
 * Basic Wrapper for all FileAuth Functions.
 *
 * @author Philipp Haußleiter
 */
public class FileAuth {

    /* Cache Key for User/PasswordHash Map */
    public final static String AUTH_FILE_USERS_CACHE_KEY = "AUTH_FILE_USERS";
    /* Cache Key for Group/Users Map */
    public final static boolean IS_ENABLED = isEnabled();
    public final static String AUTH_FILE_GROUPS_CACHE_KEY = "AUTH_FILE_GROUPS";
    private final static String CACHE_TIMEOUT = "5mn";

    /**
     * Returns a Map of all Users (user/password hash).
     *
     * @return the Map.
     */
    public static Map<String, String> getUsers() {
        if (!IS_ENABLED) {
            return new HashMap<String, String>();
        }
        Map<String, String> users = Cache.get(AUTH_FILE_USERS_CACHE_KEY, HashMap.class);
        if (users == null) {
            users = scanUsers();
        }
        return users;
    }

    /**
     * Returns a Map of all Groups (groups/usernames).
     *
     * @return the Map.
     */
    public static Map<String, Set<String>> getGroups() {
        if (!IS_ENABLED) {
            return new HashMap<String, Set<String>>();
        }
        Map<String, Set<String>> groups = Cache.get(AUTH_FILE_GROUPS_CACHE_KEY, HashMap.class);
        if (groups == null) {
            groups = scanGroups();
        }
        return groups;
    }

    /**
     * Checks if a group contains a given username.
     *
     * @param group the Group to check.
     * @param user the user to check.
     * @return true if user is in group, otherwise false.
     */
    public static boolean contains(String group, String user) {
        if (!IS_ENABLED) {
            return true;
        }
        if (group == null || user == null) {
            return false;
        }
        Map<String, Set<String>> groups = getGroups();
        Set<String> groupUsers = groups.get(group);
        if (groupUsers == null) {
            return false;
        }
        return groupUsers.contains(user);
    }

    /**
     * Validates an user with a given password agains the user/password hash
     * mapping.
     *
     * @param user the given user.
     * @param password the given password (clear text).
     * @return true if validation okay, otherwise false.
     */
    public static boolean validate(String user, String password) {
        if (!IS_ENABLED) {
            return true;
        }
        if (user == null || password == null) {
            return false;
        }
        Map<String, String> users = getUsers();
        String encryptedPass = users.get(user);
        if (encryptedPass == null) {
            return false;
        }
        return MD5Crypt.verifyPassword(password, encryptedPass);
    }

    /**
     * Rescans the users file.
     *
     * @return the updated Map of users.
     */
    public static Map<String, String> scanUsers() {
        String fileName = Play.configuration.getProperty("authfile.users.path");
        String delimeter1 = Play.configuration.getProperty("authfile.users.delimeter", ":");
        Logger.info("@" + System.currentTimeMillis() + " Scanning Users in " + fileName);
        Map<String, String> users = new HashMap<String, String>();
        File file = new File(fileName);
        if (file == null || !file.exists() || !file.isFile()) {
            Logger.warn(fileName + " is not a valid Auth-File!");
        }
        try {
            BufferedReader br = new BufferedReader(new FileReader(file));
            String line;
            String parts[];
            while ((line = br.readLine()) != null) {
                parts = line.split(delimeter1);
                /*
                 * Matches
                 * user:hash
                 * user:hash:uid: ...
                 */
                if (parts.length > 1) {
                    users.put(parts[0].trim(), parts[1].trim());
                }
            }
            Cache.set(AUTH_FILE_USERS_CACHE_KEY, users, CACHE_TIMEOUT);
        } catch (FileNotFoundException ex) {
            Logger.error(ex.getLocalizedMessage(), ex);
        } catch (IOException ex) {
            Logger.error(ex.getLocalizedMessage(), ex);
        }
        Logger.info("found " + users.size() + " mappings");
        return users;
    }

    /**
     * Rescans the groups file.
     *
     * @return the updated Map of groups.
     */
    public static Map<String, Set<String>> scanGroups() {
        String fileName = Play.configuration.getProperty("authfile.groups.path");
        String delimeter1 = Play.configuration.getProperty("authfile.users.delimeter", ":");
        String delimeter2 = Play.configuration.getProperty("authfile.groups.delimeter", " ");
        Logger.info("@" + System.currentTimeMillis() + " Scanning Groups in " + fileName);
        Map<String, Set<String>> groups = new HashMap<String, Set<String>>();
        File file = new File(fileName);
        if (file == null || !file.exists() || !file.isFile()) {
            Logger.warn(fileName + " is not a valid Auth-File!");
        }
        try {
            BufferedReader br = new BufferedReader(new FileReader(file));
            String line;
            String parts[];
            String userParts[];
            Set<String> users;
            while ((line = br.readLine()) != null) {
                parts = line.split(delimeter1);
                if (parts.length > 1) {
                    if (parts.length > 2) {
                        userParts = parts[parts.length - 1].split(delimeter2);
                    } else {
                        userParts = parts[1].split(delimeter2);
                    }
                    if (userParts.length > 0) {
                        users = new HashSet<String>();
                        for (String user : userParts) {
                            users.add(user.trim());
                        }
                        groups.put(parts[0].trim(), users);
                    }
                }
            }
            Cache.set(AUTH_FILE_GROUPS_CACHE_KEY, groups, CACHE_TIMEOUT);
        } catch (FileNotFoundException ex) {
            Logger.error(ex.getLocalizedMessage(), ex);
        } catch (IOException ex) {
            Logger.error(ex.getLocalizedMessage(), ex);
        }
        Logger.info("found " + groups.size() + " mappings");
        return groups;
    }

    private static boolean isEnabled() {
        if (Play.configuration.getProperty("authfile.users.path") == null
                || Play.configuration.getProperty("authfile.groups.path") == null) {
            Logger.info("FileAuth not enabled. authfile.users.path or authfile.groups.path not set!");
            return false;
        }
        return true;

    }
}
PK�����*†9D4ÿÑ^º��º��¥���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/FileAuthPlugin.java/**
 * FileAuthPlugin
 * 31.07.2012
 * @author Philipp Haussleiter
 *
 */
package play.modules.fileauth;

import play.PlayPlugin;

/**
 * Entry Class for first file scan.
 * @author Philipp Haußleiter
 */
public class FileAuthPlugin extends PlayPlugin {

    /**
     * Trigger to scan the files for the first Time.
     */
    @Override
    public void onApplicationStart() {
        ScanJob job = new ScanJob();
        job.now();
    }
}
PK�����*†9DYí΁1��1��¥���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/utils/MD5Crypt.java/*

MD5Crypt.java

Created: 3 November 1999

Java Port By: Jonathan Abbey, jonabbey@arlut.utexas.edu

Original C Version:
----------------------------------------------------------------------------
"THE BEER-WARE LICENSE" (Revision 42):
<phk@login.dknet.dk> wrote this file.  As long as you retain this notice you
can do whatever you want with this stuff. If we meet some day, and you think
this stuff is worth it, you can buy me a beer in return.   Poul-Henning Kamp
----------------------------------------------------------------------------

This Java Port is  

Copyright (c) 1999-2010 The University of Texas at Austin.

All rights reserved.

Redistribution and use in source and binary form are permitted
provided that distributions retain this entire copyright notice
and comment. Neither the name of the University nor the names of
its contributors may be used to endorse or promote products
derived from this software without specific prior written
permission. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE.

 */
package play.modules.fileauth.utils;

import java.security.MessageDigest;

/*------------------------------------------------------------------------------
class
MD5Crypt

------------------------------------------------------------------------------*/
/**
 * This class defines a method,
 * {@link MD5Crypt#crypt(java.lang.String, java.lang.String) crypt()}, which
 * takes a password and a salt string and generates an OpenBSD/FreeBSD/Linux-compatible
 * md5-encoded password entry.
 */
public final class MD5Crypt {

    /**
     * Command line test rig.
     */
    static public void main(String argv[]) {
        if ((argv.length < 1) || (argv.length > 3)) {
            System.err.println("Usage: MD5Crypt [-apache] password salt");
            System.exit(1);
        }

        if (argv.length == 3) {
            System.err.println(MD5Crypt.apacheCrypt(argv[1], argv[2]));
        } else if (argv.length == 2) {
            System.err.println(MD5Crypt.crypt(argv[0], argv[1]));
        } else {
            System.err.println(MD5Crypt.crypt(argv[0]));
        }

        System.exit(0);
    }
    public static final String SALTCHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
    public static final String itoa64 = "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";

    public static final String to64(long v, int size) {
        StringBuilder result = new StringBuilder();

        while (--size >= 0) {
            result.append(itoa64.charAt((int) (v & 0x3f)));
            v >>>= 6;
        }

        return result.toString();
    }

    public static final void clearbits(byte bits[]) {
        for (int i = 0; i < bits.length; i++) {
            bits[i] = 0;
        }
    }

    /**
     * convert an encoded unsigned byte value into a int
     * with the unsigned value.
     */
    public static final int bytes2u(byte inp) {
        return (int) inp & 0xff;
    }

    static private MessageDigest getMD5() {
        try {
            return MessageDigest.getInstance("MD5");
        } catch (java.security.NoSuchAlgorithmException ex) {
            throw new RuntimeException(ex);
        }
    }

    /**
     * <p>This method actually generates a OpenBSD/FreeBSD/Linux PAM compatible
     * md5-encoded password hash from a plaintext password and a
     * salt.</p>
     *
     * <p>The resulting string will be in the form '$1$&lt;salt&gt;$&lt;hashed mess&gt;</p>
     *
     * @param password Plaintext password
     *
     * @return An OpenBSD/FreeBSD/Linux-compatible md5-hashed password field.
     */
    public static final String crypt(String password) {
        StringBuilder salt = new StringBuilder();
        java.util.Random randgen = new java.util.Random();

        /* -- */

        while (salt.length() < 8) {
            int index = (int) (randgen.nextFloat() * SALTCHARS.length());
            salt.append(SALTCHARS.substring(index, index + 1));
        }

        return MD5Crypt.crypt(password, salt.toString());
    }

    /**
     * <p>This method actually generates a OpenBSD/FreeBSD/Linux PAM compatible
     * md5-encoded password hash from a plaintext password and a
     * salt.</p>
     *
     * <p>The resulting string will be in the form '$1$&lt;salt&gt;$&lt;hashed mess&gt;</p>
     *
     * @param password Plaintext password
     * @param salt A short string to use to randomize md5.  May start with $1$, which
     *             will be ignored.  It is explicitly permitted to pass a pre-existing
     *             MD5Crypt'ed password entry as the salt.  crypt() will strip the salt
     *             chars out properly.
     *
     * @return An OpenBSD/FreeBSD/Linux-compatible md5-hashed password field.
     */
    public static final String crypt(String password, String salt) {
        return MD5Crypt.crypt(password, salt, "$1$");
    }

    /**
     * <p>This method generates an Apache MD5 compatible
     * md5-encoded password hash from a plaintext password and a
     * salt.</p>
     *
     * <p>The resulting string will be in the form '$apr1$&lt;salt&gt;$&lt;hashed mess&gt;</p>
     *
     * @param password Plaintext password
     *
     * @return An Apache-compatible md5-hashed password string.
     */
    public static final String apacheCrypt(String password) {
        StringBuilder salt = new StringBuilder();
        java.util.Random randgen = new java.util.Random();

        /* -- */

        while (salt.length() < 8) {
            int index = (int) (randgen.nextFloat() * SALTCHARS.length());
            salt.append(SALTCHARS.substring(index, index + 1));
        }

        return MD5Crypt.apacheCrypt(password, salt.toString());
    }

    /**
     * <p>This method actually generates an Apache MD5 compatible
     * md5-encoded password hash from a plaintext password and a
     * salt.</p>
     *
     * <p>The resulting string will be in the form '$apr1$&lt;salt&gt;$&lt;hashed mess&gt;</p>
     *
     * @param password Plaintext password
     * @param salt A short string to use to randomize md5.  May start with $apr1$, which
     *             will be ignored.  It is explicitly permitted to pass a pre-existing
     *             MD5Crypt'ed password entry as the salt.  crypt() will strip the salt
     *             chars out properly.
     *
     * @return An Apache-compatible md5-hashed password string.
     */
    public static final String apacheCrypt(String password, String salt) {
        return MD5Crypt.crypt(password, salt, "$apr1$");
    }

    /**
     * <p>This method actually generates md5-encoded password hash from
     * a plaintext password, a salt, and a magic string.</p>
     *
     * <p>There are two magic strings that make sense to use here.. '$1$' is the
     * magic string used by the FreeBSD/Linux/OpenBSD MD5Crypt algorithm, and
     * '$apr1$' is the magic string used by the Apache MD5Crypt algorithm.</p>
     *
     * <p>The resulting string will be in the form '&lt;magic&gt;&lt;salt&gt;$&lt;hashed mess&gt;</p>
     *
     * @param password Plaintext password
     * @param salt A short string to use to randomize md5.  May start
     * with the magic string, which will be ignored.  It is explicitly
     * permitted to pass a pre-existing MD5Crypt'ed password entry as
     * the salt.  crypt() will strip the salt chars out properly.
     * @param magic Either "$apr1$" or "$1$", which controls whether we
     * are doing Apache-style or FreeBSD-style md5Crypt.
     *
     * @return An md5-hashed password string.
     */
    public static final String crypt(String password, String salt, String magic) {
        /* This string is magic for this algorithm.  Having it this way,
         * we can get get better later on */

        byte finalState[];
        MessageDigest ctx, ctx1;
        long l;

        /* -- */

        /* Refine the Salt first */

        /* If it starts with the magic string, then skip that */

        if (salt.startsWith(magic)) {
            salt = salt.substring(magic.length());
        }

        /* It stops at the first '$', max 8 chars */

        if (salt.indexOf('$') != -1) {
            salt = salt.substring(0, salt.indexOf('$'));
        }

        if (salt.length() > 8) {
            salt = salt.substring(0, 8);
        }

        ctx = getMD5();

        ctx.update(password.getBytes());    // The password first, since that is what is most unknown
        ctx.update(magic.getBytes());    // Then our magic string
        ctx.update(salt.getBytes());    // Then the raw salt

        /* Then just as many characters of the MD5(pw,salt,pw) */

        ctx1 = getMD5();
        ctx1.update(password.getBytes());
        ctx1.update(salt.getBytes());
        ctx1.update(password.getBytes());
        finalState = ctx1.digest();

        for (int pl = password.length(); pl > 0; pl -= 16) {
            ctx.update(finalState, 0, pl > 16 ? 16 : pl);
        }

        /* the original code claimed that finalState was being cleared
        to keep dangerous bits out of memory, but doing this is also
        required in order to get the right output. */

        clearbits(finalState);

        /* Then something really weird... */

        for (int i = password.length(); i != 0; i >>>= 1) {
            if ((i & 1) != 0) {
                ctx.update(finalState, 0, 1);
            } else {
                ctx.update(password.getBytes(), 0, 1);
            }
        }

        finalState = ctx.digest();

        /*
         * and now, just to make sure things don't run too fast
         * On a 60 Mhz Pentium this takes 34 msec, so you would
         * need 30 seconds to build a 1000 entry dictionary...
         *
         * (The above timings from the C version)
         */

        for (int i = 0; i < 1000; i++) {
            ctx1.reset();

            if ((i & 1) != 0) {
                ctx1.update(password.getBytes());
            } else {
                ctx1.update(finalState, 0, 16);
            }

            if ((i % 3) != 0) {
                ctx1.update(salt.getBytes());
            }

            if ((i % 7) != 0) {
                ctx1.update(password.getBytes());
            }

            if ((i & 1) != 0) {
                ctx1.update(finalState, 0, 16);
            } else {
                ctx1.update(password.getBytes());
            }

            finalState = ctx1.digest();
        }

        /* Now make the output string */

        StringBuilder result = new StringBuilder();

        result.append(magic);
        result.append(salt);
        result.append("$");

        l = (bytes2u(finalState[0]) << 16) | (bytes2u(finalState[6]) << 8) | bytes2u(finalState[12]);
        result.append(to64(l, 4));

        l = (bytes2u(finalState[1]) << 16) | (bytes2u(finalState[7]) << 8) | bytes2u(finalState[13]);
        result.append(to64(l, 4));

        l = (bytes2u(finalState[2]) << 16) | (bytes2u(finalState[8]) << 8) | bytes2u(finalState[14]);
        result.append(to64(l, 4));

        l = (bytes2u(finalState[3]) << 16) | (bytes2u(finalState[9]) << 8) | bytes2u(finalState[15]);
        result.append(to64(l, 4));

        l = (bytes2u(finalState[4]) << 16) | (bytes2u(finalState[10]) << 8) | bytes2u(finalState[5]);
        result.append(to64(l, 4));

        l = bytes2u(finalState[11]);
        result.append(to64(l, 2));

        /* Don't leave anything around in vm they could use. */
        clearbits(finalState);

        return result.toString();
    }

    /**
     * This method tests a plaintext password against a md5Crypt'ed hash and returns
     * true if the password matches the hash.
     *
     * This method will work properly whether the hashtext was crypted
     * using the default FreeBSD md5Crypt algorithm or the Apache
     * md5Crypt variant.
     *
     * @param plaintextPass The plaintext password text to test.
     * @param md5CryptText The Apache or FreeBSD-md5Crypted hash used to authenticate the plaintextPass.
     */
    public static final boolean verifyPassword(String plaintextPass, String md5CryptText) {
        if (md5CryptText.startsWith("$1$")) {
            return md5CryptText.equals(MD5Crypt.crypt(plaintextPass, md5CryptText));
        } else if (md5CryptText.startsWith("$apr1$")) {
            return md5CryptText.equals(MD5Crypt.apacheCrypt(plaintextPass, md5CryptText));
        } else {
            throw new RuntimeException("Bad md5CryptText");
        }
    }
}
PK�����*†9D—5Kùõ��õ�����samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/app/controllers/AuthFileSecurity.java/**
 * AuthFileSecurity
 * 31.07.2012
 * @author Philipp Haussleiter
 *
 */
package controllers;

import java.util.Map;
import play.modules.fileauth.FileAuth;

/**
 * This Class provides basice Security Functions for the Play! Security Plugin.
 * @author Philipp Haußleiter
 * <p>
 * Usage:
 * @With(Secure.class)
 * public class Application extends Controller {
 * ...
 * }
 *
 * </p>
 */
public class AuthFileSecurity extends Secure.Security {

    /**
     * Authentify an user against the given AuthFile.
     * @param username the given username.
     * @param password the given password.
     * @return true if username and password matches, otherwise false.
     */
    public static boolean authentify(String username, String password) {
        Map<String,String> users = FileAuth.getUsers();
        String userPassword = users.get(username.toLowerCase());
        return userPassword.equals(password);
    }

    /**
     * Checks if the current user (that is loged in) has the profile (e.g. is in the group).
     * @param profile
     * @return true if the current user has the profile, otherwise false.
     */
    public static boolean check(String profile) {
        String user = connected();
        return FileAuth.contains(profile, user);
    }
}
PK�����*†9D&ÿ‰è¤��¤��™���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/documentation/manual/home.textileh1. {module name}

p(note). Write your module documentation in this file, possibly linking to other Textile files, and delete these notes when you are finished.

p(note). Start with a clear statement of what the module is and what it is for. Link to any third-party libraries that the module is based on.

p(note). Briefly describe why you might want to use this module in a Play application.

h2. Sample application

p(note). Your module should contain a sample app in the @sample@ directory that demonstrates the module. Describe how to run the demo here.

h2. Getting started

p(note). Describe any installation that is required, beyond adding and resolving the module dependency.

h2. Configuration

p(note). List any configuration options that the module uses, with an @h3.@ heading for each one.

h2. Usage

p(note). Explain how to use the module, and describe any routes, controllers, models or views that the module provides.

h2. Tags

p(note). List any tags the module provides, with an @h3.@ heading for each one. Include the tags’ arguments.

h2. Commands

p(note). List any commands the module provides, with an @h3.@ heading for each one. Include the commands’ options.
PK�����*†9D´šü¯��¯��²���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/public/images/favicon.png‰PNG

���
IHDR���������óÿa���tEXtSoftware�Adobe ImageReadyqÉe<��QIDATxÚ”SËNA=U]5]Ý=ï1agŒhf£+0ˆ‰Á †n\¹gãÒ¿p#ì4¢?`t¯	WFƒH$H$dŒ™Gw•·›o÷M×+çœ{O53Æàú�Œ^sÑIšéJáü½Bnà18­ÃC_­fÛG©8ˆk#7€h—BÈ,KÀMª±SçrÕMwav©^›i4v<‹	ü+"�ÎmJÛQea+¤Žed×§–¼zYßü2(¬cŒÐFp¡ìÓ`
Aƒ›ÈBåý¡5ÿÍܧ·™±¨"«€¤úeV(§æÐ<±!D‰.7³é®Ì.®×fÚ~Ë#šÃ�¶HUÊÍ84ÞÍ@<x™XWcê}}þÅ÷­oUÉåáHÛ)	åqMìûεVˆ©4…øðòÎÛ¹•úÒ-?ð#�±«@€ÕÇe<êGhíÁ—8ÙšêéÛO¶?Ó^æ]`4Ùh».<b$ߏè¶6­vùD/&‡oΧ¼´¿§€qeK?îE—å/fzš~Žt1^šX½\{äż´µ¶Ð·”wÒ„è}~_ûHû`~`ûzÿ•gÅô‰û´üúO‚ÀN¯T‰È1”²OöàjåRm¨xvšŽ=¥Ü9XZÀ¥ªXvœic£Au†r'Ê£«ãå’ë<¤#Ÿ;]å@:‰J`)úQ8ªÝ}[“ý£Ï‹™®Cr;ð˜“ëNå1Y©
Êå¡çk_7.üj5ïÒ¸Îÿ'0�Û¤û»ý
����IEND®B`‚PK�����*†9Dä |;f�f�¿���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/public/javascripts/jquery-1.6.4.min.js/*! jQuery v1.6.4 http://jquery.com/ | http://jquery.org/license */
(function(a,b){function cu(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cr(a){if(!cg[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ch||(ch=c.createElement("iframe"),ch.frameBorder=ch.width=ch.height=0),b.appendChild(ch);if(!ci||!ch.createElement)ci=(ch.contentWindow||ch.contentDocument).document,ci.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),ci.close();d=ci.createElement(a),ci.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ch)}cg[a]=e}return cg[a]}function cq(a,b){var c={};f.each(cm.concat.apply([],cm.slice(0,b)),function(){c[this]=a});return c}function cp(){cn=b}function co(){setTimeout(cp,0);return cn=f.now()}function cf(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ce(){try{return new a.XMLHttpRequest}catch(b){}}function b$(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function bZ(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function bY(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bA.test(a)?d(a,e):bY(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)bY(a+"["+e+"]",b[e],c,d);else d(a,b)}function bX(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function bW(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bP,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=bW(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=bW(a,c,d,e,"*",g));return l}function bV(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bL),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function by(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bt:bu;if(d>0){c!=="border"&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0});return d+"px"}d=bv(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+this))||0)});return d+"px"}function bl(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bd,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bk(a){f.nodeName(a,"input")?bj(a):"getElementsByTagName"in a&&f.grep(a.getElementsByTagName("input"),bj)}function bj(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bi(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function bh(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bg(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;e=e[c]=f.extend({},d);if(g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;i<j;i++)f.event.add(b,h+(g[h][i].namespace?".":"")+g[h][i].namespace,g[h][i],g[h][i].data)}}}}function bf(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function V(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(Q.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function U(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function M(a,b){return(a&&a!=="*"?a+".":"")+b.replace(y,"`").replace(z,"&")}function L(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;i<s.length;i++)g=s[i],g.origType.replace(w,"")===a.type?q.push(g.selector):s.splice(i--,1);e=f(a.target).closest(q,a.currentTarget);for(j=0,k=e.length;j<k;j++){m=e[j];for(i=0;i<s.length;i++){g=s[i];if(m.selector===g.selector&&(!n||n.test(g.namespace))&&!m.elem.disabled){h=m.elem,d=null;if(g.preType==="mouseenter"||g.preType==="mouseleave")a.type=g.preType,d=f(a.relatedTarget).closest(g.selector)[0],d&&f.contains(h,d)&&(d=h);(!d||d!==h)&&p.push({elem:h,handleObj:g,level:m.level})}}}for(j=0,k=p.length;j<k;j++){e=p[j];if(c&&e.level>c)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function J(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function D(){return!0}function C(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function K(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(K,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=/-([a-z]|[0-9])/ig,x=/^-ms-/,y=function(a,b){return(b+"").toUpperCase()},z=d.userAgent,A,B,C,D=Object.prototype.toString,E=Object.prototype.hasOwnProperty,F=Array.prototype.push,G=Array.prototype.slice,H=String.prototype.trim,I=Array.prototype.indexOf,J={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6.4",length:0,size:function(){return this.length},toArray:function(){return G.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?F.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),B.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(G.apply(this,arguments),"slice",G.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:F,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;B.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!B){B=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",C,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",C),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&K()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):J[D.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!E.call(a,"constructor")&&!E.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||E.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(x,"ms-").replace(w,y)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:H?function(a){return a==null?"":H.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?F.call(c,a):e.merge(c,a)}return c},inArray:function(a,b){if(!b)return-1;if(I)return I.call(b,a);for(var c=0,d=b.length;c<d;c++)if(b[c]===a)return c;return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=G.call(arguments,2),g=function(){return a.apply(c,f.concat(G.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=s.exec(a)||t.exec(a)||u.exec(a)||a.indexOf("compatible")<0&&v.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){J["[object "+b+"]"]=b.toLowerCase()}),A=e.uaMatch(z),A.browser&&(e.browser[A.browser]=!0,e.browser.version=A.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?C=function(){c.removeEventListener("DOMContentLoaded",C,!1),e.ready()}:c.attachEvent&&(C=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",C),e.ready())});return e}(),g="done fail isResolved isRejected promise then always pipe".split(" "),h=[].slice;f.extend({_Deferred:function(){var a=[],b,c,d,e={done:function(){if(!d){var c=arguments,g,h,i,j,k;b&&(k=b,b=0);for(g=0,h=c.length;g<h;g++)i=c[g],j=f.type(i),j==="array"?e.done.apply(e,i):j==="function"&&a.push(i);k&&e.resolveWith(k[0],k[1])}return this},resolveWith:function(e,f){if(!d&&!b&&!c){f=f||[],c=1;try{while(a[0])a.shift().apply(e,f)}finally{b=[e,f],c=0}}return this},resolve:function(){e.resolveWith(this,arguments);return this},isResolved:function(){return!!c||!!b},cancel:function(){d=1,a=[];return this}};return e},Deferred:function(a){var b=f._Deferred(),c=f._Deferred(),d;f.extend(b,{then:function(a,c){b.done(a).fail(c);return this},always:function(){return b.done.apply(b,arguments).fail.apply(this,arguments)},fail:c.done,rejectWith:c.resolveWith,reject:c.resolve,isRejected:c.isResolved,pipe:function(a,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[c,"reject"]},function(a,c){var e=c[0],g=c[1],h;f.isFunction(e)?b[a](function(){h=e.apply(this,arguments),h&&f.isFunction(h.promise)?h.promise().then(d.resolve,d.reject):d[g+"With"](this===b?d:this,[h])}):b[a](d[g])})}).promise()},promise:function(a){if(a==null){if(d)return d;d=a={}}var c=g.length;while(c--)a[g[c]]=b[g[c]];return a}}),b.done(c.cancel).fail(b.cancel),delete b.cancel,a&&a.call(b,b);return b},when:function(a){function i(a){return function(c){b[a]=arguments.length>1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c<d;c++)b[c]&&f.isFunction(b[c].promise)?b[c].promise().then(i(c),g.reject):--e;e||g.resolveWith(g,b)}else g!==a&&g.resolveWith(g,d?[a]:[]);return g.promise()}}),f.support=function(){var a=c.createElement("div"),b=c.documentElement,d,e,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;a.setAttribute("className","t"),a.innerHTML="   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55$/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue=i.value==="t",i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.firstChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},m&&f.extend(p,{position:"absolute",left:"-1000px",top:"-1000px"});for(t in p)o.style[t]=p[t];o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,k.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="<div style='width:4px;'></div>",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",q=a.getElementsByTagName("td"),u=q[0].offsetHeight===0,q[0].style.display="",q[1].style.display="none",k.reliableHiddenOffsets=u&&q[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",a.appendChild(j),k.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0),o.innerHTML="",n.removeChild(o);if(a.attachEvent)for(t in{submit:1,change:1,focusin:1})s="on"+t,u=s in a,u||(a.setAttribute(s,"return;"),u=typeof a[s]=="function"),k[t+"Bubbles"]=u;o=l=g=h=m=j=a=i=null;return k}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i=f.expando,j=typeof c=="string",k=a.nodeType,l=k?f.cache:a,m=k?a[f.expando]:a[f.expando]&&f.expando;if((!m||e&&m&&l[m]&&!l[m][i])&&j&&d===b)return;m||(k?a[f.expando]=m=++f.uuid:m=f.expando),l[m]||(l[m]={},k||(l[m].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?l[m][i]=f.extend(l[m][i],c):l[m]=f.extend(l[m],c);g=l[m],e&&(g[i]||(g[i]={}),g=g[i]),d!==b&&(g[f.camelCase(c)]=d);if(c==="events"&&!g[c])return g[i]&&g[i].events;j?(h=g[c],h==null&&(h=g[f.camelCase(c)])):h=g;return h}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e=f.expando,g=a.nodeType,h=g?f.cache:a,i=g?a[f.expando]:f.expando;if(!h[i])return;if(b){d=c?h[i][e]:h[i];if(d){d[b]||(b=f.camelCase(b)),delete d[b];if(!l(d))return}}if(c){delete h[i][e];if(!l(h[i]))return}var j=h[i][e];f.support.deleteExpando||!h.setInterval?delete h[i]:h[i]=null,j?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=j):g&&(f.support.deleteExpando?delete a[f.expando]:a.removeAttribute?a.removeAttribute(f.expando):a[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h<i;h++)g=e[h].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),k(this[0],g,d[g]))}}return d}if(typeof a=="object")return this.each(function(){f.data(this,a)});var j=a.split(".");j[1]=j[1]?"."+j[1]:"";if(c===b){d=this.triggerHandler("getData"+j[1]+"!",[j[0]]),d===b&&this.length&&(d=f.data(this[0],a),d=k(this[0],a,d));return d===b&&j[1]?this.data(j[0]):d}return this.each(function(){var b=f(this),d=[j[0],c];b.triggerHandler("setData"+j[1]+"!",d),f.data(this,a,c),b.triggerHandler("changeData"+j[1]+"!",d)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,c){a&&(c=(c||"fx")+"mark",f.data(a,c,(f.data(a,c,b,!0)||0)+1,!0))},_unmark:function(a,c,d){a!==!0&&(d=c,c=a,a=!1);if(c){d=d||"fx";var e=d+"mark",g=a?0:(f.data(c,e,b,!0)||1)-1;g?f.data(c,e,g,!0):(f.removeData(c,e,!0),m(c,d,"mark"))}},queue:function(a,c,d){if(a){c=(c||"fx")+"queue";var e=f.data(a,c,b,!0);d&&(!e||f.isArray(d)?e=f.data(a,c,f.makeArray(d),!0):e.push(d));return e||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e;d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),d.call(a,function(){f.dequeue(a,b)})),c.length||(f.removeData(a,b+"queue",!0),m(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(){var c=this;setTimeout(function(){f.dequeue(c,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f._Deferred(),!0))h++,l.done(m);m();return d.promise()}});var n=/[\n\t\r]/g,o=/\s+/,p=/\r/g,q=/^(?:button|input)$/i,r=/^(?:button|input|object|select|textarea)$/i,s=/^a(?:rea)?$/i,t=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,u,v;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(o);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(o);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(n," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(o);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ";for(var c=0,d=this.length;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(n," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;d=e.value;return typeof d=="string"?d.replace(p,""):d==null?"":d}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c=a.selectedIndex,d=[],e=a.options,g=a.type==="select-one";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h<i;h++){var j=e[h];if(j.selected&&(f.support.optDisabled?!j.disabled:j.getAttribute("disabled")===null)&&(!j.parentNode.disabled||!f.nodeName(j.parentNode,"optgroup"))){b=f(j).val();if(g)return b;d.push(b)}}if(g&&!d.length&&e.length)return f(e[c]).val();return d},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);j&&(c=f.attrFix[c]||c,i=f.attrHooks[c],i||(t.test(c)?i=v:u&&(i=u)));if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j&&(h=i.get(a,c))!==null)return h;h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.attr(a,b,""),a.removeAttribute(b),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(u&&f.nodeName(a,"button"))return u.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(u&&f.nodeName(a,"button"))return u.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);i&&(c=f.propFix[c]||c,h=f.propHooks[c]);return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==null?g:a[c]},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabIndex=f.propHooks.tabIndex,v={get:function(a,c){var d;return f.prop(a,c)===!0||(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},f.support.getSetAttribute||(u=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==""?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var w=/\.(.*)$/,x=/^(?:textarea|input|select)$/i,y=/\./g,z=/ /g,A=/[^\w\s.|`]/g,B=function(a){return a.replace(A,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=C;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=C);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),B).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j<p.length;j++){q=p[j];if(l||n.test(q.namespace))f.event.remove(a,r,q.handler,j),p.splice(j--,1)}continue}o=f.event.special[h]||{};for(j=e||0;j<p.length;j++){q=p[j];if(d.guid===q.guid){if(l||n.test(q.namespace))e==null&&p.splice(j--,1),o.remove&&o.remove.call(a,q);if(e!=null)break}}if(p.length===0||e!=null&&p.length===1)(!o.teardown||o.teardown.call(a,m)===!1)&&f.removeEvent(a,h,s.handle),g=null,delete 
t[h]}if(f.isEmptyObject(t)){var u=s.handle;u&&(u.elem=null),delete s.events,delete s.handle,f.isEmptyObject(s)&&f.removeData(a,b,!0)}}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){var h=c.type||c,i=[],j;h.indexOf("!")>=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d!=null?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h<i;h++){var j=d[h];if(e||c.namespace_re.test(j.namespace)){c.handler=j.handler,c.data=j.data,c.handleObj=j;var k=j.handler.apply(this,g);k!==b&&(c.result=k,k===!1&&(c.preventDefault(),c.stopPropagation()));if(c.isImmediatePropagationStopped())break}}return c.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(a){if(a[f.expando])return a;var d=a;a=f.Event(d);for(var e=this.props.length,g;e;)g=this.props[--e],a[g]=d[g];a.target||(a.target=a.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),!a.relatedTarget&&a.fromElement&&(a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement);if(a.pageX==null&&a.clientX!=null){var h=a.target.ownerDocument||c,i=h.documentElement,j=h.body;a.pageX=a.clientX+(i&&i.scrollLeft||j&&j.scrollLeft||0)-(i&&i.clientLeft||j&&j.clientLeft||0),a.pageY=a.clientY+(i&&i.scrollTop||j&&j.scrollTop||0)-(i&&i.clientTop||j&&j.clientTop||0)}a.which==null&&(a.charCode!=null||a.keyCode!=null)&&(a.which=a.charCode!=null?a.charCode:a.keyCode),!a.metaKey&&a.ctrlKey&&(a.metaKey=a.ctrlKey),!a.which&&a.button!==b&&(a.which=a.button&1?1:a.button&2?3:a.button&4?2:0);return a},guid:1e8,proxy:f.proxy,special:{ready:{setup:f.bindReady,teardown:f.noop},live:{add:function(a){f.event.add(this,M(a.origType,a.selector),f.extend({},a,{handler:L,guid:a.handler.guid}))},remove:function(a){f.event.remove(this,M(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}}},f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!this.preventDefault)return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?D:C):this.type=a,b&&f.extend(this,b),this.timeStamp=f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=D;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=D;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=D,this.stopPropagation()},isDefaultPrevented:C,isPropagationStopped:C,isImmediatePropagationStopped:C};var E=function(a){var b=a.relatedTarget,c=!1,d=a.type;a.type=a.data,b!==this&&(b&&(c=f.contains(this,b)),c||(f.event.handle.apply(this,arguments),a.type=d))},F=function(a){a.type=a.data,f.event.handle.apply(this,arguments)};f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={setup:function(c){f.event.add(this,b,c&&c.selector?F:E,a)},teardown:function(a){f.event.remove(this,b,a&&a.selector?F:E)}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(a,b){if(!f.nodeName(this,"form"))f.event.add(this,"click.specialSubmit",function(a){var b=a.target,c=f.nodeName(b,"input")||f.nodeName(b,"button")?b.type:"";(c==="submit"||c==="image")&&f(b).closest("form").length&&J("submit",this,arguments)}),f.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,c=f.nodeName(b,"input")||f.nodeName(b,"button")?b.type:"";(c==="text"||c==="password")&&f(b).closest("form").length&&a.keyCode===13&&J("submit",this,arguments)});else return!1},teardown:function(a){f.event.remove(this,".specialSubmit")}});if(!f.support.changeBubbles){var G,H=function(a){var b=f.nodeName(a,"input")?a.type:"",c=a.value;b==="radio"||b==="checkbox"?c=a.checked:b==="select-multiple"?c=a.selectedIndex>-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},I=function(c){var d=c.target,e,g;if(!!x.test(d.nodeName)&&!d.readOnly){e=f._data(d,"_change_data"),g=H(d),(c.type!=="focusout"||d.type!=="radio")&&f._data(d,"_change_data",g);if(e===b||g===e)return;if(e!=null||g)c.type="change",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:I,beforedeactivate:I,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&I.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&I.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",H(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in G)f.event.add(this,c+".specialChange",G[c]);return x.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return x.test(this.nodeName)}},G=f.event.special.change.filters,G.focus=G.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i<j;i++)f.event.add(this[i],a,g,d);return this}}),f.fn.extend({unbind:function(a,b){if(typeof a=="object"&&!a.preventDefault)for(var c in a)this.unbind(c,a[c]);else for(var d=0,e=this.length;d<e;d++)f.event.remove(this[d],a,b);return this},delegate:function(a,b,c,d){return this.live(b,c,d,a)},undelegate:function(a,b,c){return arguments.length===0?this.unbind("live"):this.die(b,null,c,a)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f.data(this,"lastToggle"+a.guid)||0)%d;f.data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var K={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};f.each(["live","die"],function(a,c){f.fn[c]=function(a,d,e,g){var h,i=0,j,k,l,m=g||this.selector,n=g?this:f(this.context);if(typeof a=="object"&&!a.preventDefault){for(var o in a)n[c](o,d,a[o],m);return this}if(c==="die"&&!a&&g&&g.charAt(0)==="."){n.unbind(g);return this}if(d===!1||f.isFunction(d))e=d||C,d=b;a=(a||"").split(" ");while((h=a[i++])!=null){j=w.exec(h),k="",j&&(k=j[0],h=h.replace(w,""));if(h==="hover"){a.push("mouseenter"+k,"mouseleave"+k);continue}l=h,K[h]?(a.push(K[h]+k),h=h+k):h=(K[h]||h)+k;if(c==="live")for(var p=0,q=n.length;p<q;p++)f.event.add(n[p],"live."+M(h,m),{data:d,selector:m,handler:e,origType:h,origHandler:e,preType:l});else n.unbind("live."+M(h,m),e)}return this}}),f.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".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}if(i.nodeType===1){f||(i.sizcache=c,i.sizset=g);if(typeof b!="string"){if(i===b){j=!0;break}}else if(k.filter(b,[i]).length>0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}i.nodeType===1&&!f&&(i.sizcache=c,i.sizset=g);if(i.nodeName.toLowerCase()===b){j=i;break}i=i[a]}d[g]=j}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},k.matches=function(a,b){return k(a,null,null,b)},k.matchesSelector=function(a,b){return k(b,null,null,[a]).length>0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e<f;e++){var g,h=l.order[e];if(g=l.leftMatch[h].exec(a)){var j=g[1];g.splice(1,1);if(j.substr(j.length-1)!=="\\"){g[1]=(g[1]||"").replace(i,""),d=l.find[h](g,b,c);if(d!=null){a=a.replace(l.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},k.filter=function(a,c,d,e){var f,g,h=a,i=[],j=c,m=c&&c[0]&&k.isXML(c[0]);while(a&&c.length){for(var n in l.filter)if((f=l.leftMatch[n].exec(a))!=null&&f[2]){var o,p,q=l.filter[n],r=f[1];g=!1,f.splice(1,1);if(r.substr(r.length-1)==="\\")continue;j===i&&(i=[]);if(l.preFilter[n]){f=l.preFilter[n](f,j,d,i,e,m);if(!f)g=o=!0;else if(f===!0)continue}if(f)for(var s=0;(p=j[s])!=null;s++)if(p){o=q(p,f,s,j);var t=e^!!o;d&&o!=null?t?g=!0:j[s]=!1:t&&(i.push(p),g=!0)}if(o!==b){d||(j=i),a=a.replace(l.match[n],"");if(!g)return[];break}}if(a===h)if(g==null)k.error(a);else break;h=a}return j},k.error=function(a){throw"Syntax error, unrecognized expression: "+a};var l=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!j.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&k.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&k.filter(b,a,!0)}},"":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("parentNode",b,f,a,e,c)},"~":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("previousSibling",b,f,a,e,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(i,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}k.error(e)},CHILD:function(a,b){var c=b[1],d=a;switch(c){case"only":case"first":while(d=d.previousSibling)if(d.nodeType===1)return!1;if(c==="first")return!0;d=a;case"last":while(d=d.nextSibling)if(d.nodeType===1)return!1;return!0;case"nth":var e=b[2],f=b[3];if(e===1&&f===0)return!0;var g=b[0],h=a.parentNode;if(h&&(h.sizcache!==g||!a.nodeIndex)){var i=0;for(d=h.firstChild;d;d=d.nextSibling)d.nodeType===1&&(d.nodeIndex=++i);h.sizcache=g}var j=a.nodeIndex-f;return e===0?j===0:j%e===0&&j/e>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c<f;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var r,s;c.documentElement.compareDocumentPosition?r=function(a,b){if(a===b){g=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(r=function(a,b){if(a===b){g=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],h=a.parentNode,i=b.parentNode,j=h;if(h===i)return s(a,b);if(!h)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return s(e[k],f[k]);return k===c?s(a,f[k],-1):s(e[k],b,1)},s=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),k.getText=function(a){var b="",c;for(var d=0;a[d];d++)c=a[d],c.nodeType===3||c.nodeType===4?b+=c.nodeValue:c.nodeType!==8&&(b+=k.getText(c.childNodes));return b},function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g<h;g++)k(a,f[g],d);return k.filter(e,d)};f.find=k,f.expr=k.selectors,f.expr[":"]=f.expr.filters,f.unique=k.uniqueSort,f.text=k.getText,f.isXMLDoc=k.isXML,f.contains=k.contains}();var N=/Until$/,O=/^(?:parents|prevUntil|prevAll)/,P=/,/,Q=/^.[^:#\[\.,]*$/,R=Array.prototype.slice,S=f.expr.match.POS,T={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(V(this,a,!1),"not",a)},filter:function(a){return this.pushStack(V(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d<e;d++)i=a[d],j[i]||(j[i]=S.test(i)?f(i,b||this.context):i);while(g&&g.ownerDocument&&g!==b){for(i in j)h=j[i],(h.jquery?h.index(g)>-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=S.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(l?l.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(U(c[0])||U(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=R.call(arguments);N.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!T[a]?f.unique(e):e,(this.length>1||P.test(d))&&O.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|object|embed|option|style)/i,bb=/checked\s*(?:[^=]|=\s*.checked.)/i,bc=/\/(java|ecma)script/i,bd=/^\s*<!(?:\[CDATA\[|\-\-)/,be={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};be.optgroup=be.option,be.tbody=be.tfoot=be.colgroup=be.caption=be.thead,be.th=be.td,f.support.htmlSerialize||(be._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!be[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bb.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bf(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bl)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i;b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof a[0]=="string"&&a[0].length<512&&i===c&&a[0].charAt(0)==="<"&&!ba.test(a[0])&&(f.support.checkClone||!bb.test(a[0]))&&(g=!0,h=f.fragments[a[0]],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean
(a,i,e,d)),g&&(f.fragments[a[0]]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bh(a,d),e=bi(a),g=bi(d);for(h=0;e[h];++h)g[h]&&bh(e[h],g[h])}if(b){bg(a,d);if(c){e=bi(a),g=bi(d);for(h=0;e[h];++h)bg(e[h],g[h])}}e=g=null;return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=be[l]||be._default,n=m[0],o=b.createElement("div");o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bk(k[i]);else bk(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||bc.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.expando,g=f.event.special,h=f.support.deleteExpando;for(var i=0,j;(j=a[i])!=null;i++){if(j.nodeName&&f.noData[j.nodeName.toLowerCase()])continue;c=j[f.expando];if(c){b=d[c]&&d[c][e];if(b&&b.events){for(var k in b.events)g[k]?f.event.remove(j,k):f.removeEvent(j,k,b.handle);b.handle&&(b.handle.elem=null)}h?delete j[f.expando]:j.removeAttribute&&j.removeAttribute(f.expando),delete d[c]}}}});var bm=/alpha\([^)]*\)/i,bn=/opacity=([^)]*)/,bo=/([A-Z]|^ms)/g,bp=/^-?\d+(?:px)?$/i,bq=/^-?\d/,br=/^([\-+])=([\-+.\de]+)/,bs={position:"absolute",visibility:"hidden",display:"block"},bt=["Left","Right"],bu=["Top","Bottom"],bv,bw,bx;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bv(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=br.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bv)return bv(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return by(a,b,d);f.swap(a,bs,function(){e=by(a,b,d)});return e}},set:function(a,b){if(!bp.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bn.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bm,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bm.test(g)?g.replace(bm,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bv(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bw=function(a,c){var d,e,g;c=c.replace(bo,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bx=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bp.test(d)&&bq.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bv=bw||bx,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bz=/%20/g,bA=/\[\]$/,bB=/\r?\n/g,bC=/#.*$/,bD=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bE=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bF=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bG=/^(?:GET|HEAD)$/,bH=/^\/\//,bI=/\?/,bJ=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bK=/^(?:select|textarea)/i,bL=/\s+/,bM=/([?&])_=[^&]*/,bN=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bO=f.fn.load,bP={},bQ={},bR,bS,bT=["*/"]+["*"];try{bR=e.href}catch(bU){bR=c.createElement("a"),bR.href="",bR=bR.href}bS=bN.exec(bR.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bO)return bO.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bJ,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bK.test(this.nodeName)||bE.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bB,"\r\n")}}):{name:b.name,value:c.replace(bB,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?bX(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),bX(a,b);return a},ajaxSettings:{url:bR,isLocal:bF.test(bS[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bT},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bV(bP),ajaxTransport:bV(bQ),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?bZ(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=b$(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bD.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bC,"").replace(bH,bS[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bL),d.crossDomain==null&&(r=bN.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bS[1]&&r[2]==bS[2]&&(r[3]||(r[1]==="http:"?80:443))==(bS[3]||(bS[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bW(bP,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bG.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bI.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bM,"$1_="+x);d.url=y+(y===d.url?(bI.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bT+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bW(bQ,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){s<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)bY(g,a[g],c,e);return d.join("&").replace(bz,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var b_=f.now(),ca=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+b_++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ca.test(b.url)||e&&ca.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ca,l),b.url===j&&(e&&(k=k.replace(ca,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cb=a.ActiveXObject?function(){for(var a in cd)cd[a](0,1)}:!1,cc=0,cd;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ce()||cf()}:ce,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cb&&delete cd[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cc,cb&&(cd||(cd={},f(a).unload(cb)),cd[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cg={},ch,ci,cj=/^(?:toggle|show|hide)$/,ck=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cl,cm=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cn;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cq("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cr(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cq("hide",3),a,b,c);for(var d=0,e=this.length;d<e;d++)if(this[d].style){var g=f.css(this[d],"display");g!=="none"&&!f._data(this[d],"olddisplay")&&f._data(this[d],"olddisplay",g)}for(d=0;d<e;d++)this[d].style&&(this[d].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cq("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return this[e.queue===!1?"each":"queue"](function(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(f.support.inlineBlockNeedsLayout?(j=cr(this.nodeName),j==="inline"?this.style.display="inline-block":(this.style.display="inline",this.style.zoom=1)):this.style.display="inline-block"))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)k=new f.fx(this,b,i),h=a[i],cj.test(h)?k[h==="toggle"?d?"show":"hide":h]():(l=ck.exec(h),m=k.cur(),l?(n=parseFloat(l[2]),o=l[3]||(f.cssNumber[i]?"":"px"),o!=="px"&&(f.style(this,i,(n||1)+o),m=(n||1)/k.cur()*m,f.style(this,i,m+o)),l[1]&&(n=(l[1]==="-="?-1:1)*n+m),k.custom(m,n,o)):k.custom(m,h,""));return!0})},stop:function(a,b){a&&this.queue([]),this.each(function(){var a=f.timers,c=a.length;b||f._unmark(!0,this);while(c--)a[c].elem===this&&(b&&a[c](!0),a.splice(c,1))}),b||this.dequeue();return this}}),f.each({slideDown:cq("show",1),slideUp:cq("hide",1),slideToggle:cq("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default,d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue!==!1?f.dequeue(this):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,b,c){function g(a){return d.step(a)}var d=this,e=f.fx;this.startTime=cn||co(),this.start=a,this.end=b,this.unit=c||this.unit||(f.cssNumber[this.prop]?"":"px"),this.now=this.start,this.pos=this.state=0,g.elem=this.elem,g()&&f.timers.push(g)&&!cl&&(cl=setInterval(e.tick,e.interval))},show:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.show=!0,this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b=cn||co(),c=!0,d=this.elem,e=this.options,g,h;if(a||b>=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){for(var a=f.timers,b=0;b<a.length;++b)a[b]()||a.splice(b--,1);a.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cl),cl=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit:a.elem[a.prop]=a.now}}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cs=/^t(?:able|d|h)$/i,ct=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cu(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);f.offset.initialize();var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.offset.supportsFixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.offset.doesNotAddBorder&&(!f.offset.doesAddBorderForTableAndCells||!cs.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.offset.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.offset.supportsFixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={initialize:function(){var a=c.body,b=c.createElement("div"),d,e,g,h,i=parseFloat(f.css(a,"marginTop"))||0,j="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=ct.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!ct.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cu(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cu(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a&&a.style?parseFloat(f.css(a,d,"padding")):null},f.fn["outer"+c]=function(a){var b=this[0];return b&&b.style?parseFloat(f.css(b,d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNaN(j)?i:j}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window);PK�����*†9D������������´���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/public/stylesheets/main.cssPK�����*†9D_5¢<���<���¦���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/htgroupsroot: root apacheRoot
users: root apacheRoot user apacheUserPK�����*†9D(ÉÆ9����±���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/EncryptionTest.java
import org.junit.Test;
import play.Logger;
import play.modules.fileauth.utils.MD5Crypt;
import play.test.UnitTest;

/**
 * EncryptionTest
 * 31.07.2012
 * @author Philipp Haussleiter
 *
 */
public class EncryptionTest extends UnitTest {

    @Test
    public void testApacheCrypt() {
        Logger.info("testing APACHE_CRYPT");
        String clear = "pw_" + System.currentTimeMillis();
        String pass;
        String salt = "abcd1234";
        pass = MD5Crypt.apacheCrypt(clear);
        Logger.info(clear + " got me " + pass);
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
        pass = MD5Crypt.apacheCrypt(clear, salt);
        Logger.info(clear + " & salt " + salt + " got me " + pass);
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
    }

    @Test
    public void testCrypt() {
        Logger.info("testing CRYPT");
        String clear = "pw_" + System.currentTimeMillis();
        String pass;
        String salt = "abcd1234";
        pass = MD5Crypt.crypt(clear);
        Logger.info(clear + " got me " + pass);
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
        pass = MD5Crypt.crypt(clear, salt);
        Logger.info(clear + " & salt " + salt + " got me " + pass);
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
    }
}
PK�����*†9D*˜,-I��I��²���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/ApacheUsersTest.java
import java.util.HashMap;
import java.util.Map;
import org.junit.BeforeClass;
import org.junit.Test;
import play.Play;
import play.cache.Cache;
import play.modules.fileauth.FileAuth;
import play.modules.fileauth.utils.MD5Crypt;
import play.test.UnitTest;

/**
 * ApacheUsersTest
 * 03.08.2012
 * @author Philipp Haussleiter
 *
 */
public class ApacheUsersTest extends UnitTest {

    @BeforeClass
    public static void setup() {
        Play.configuration.setProperty("authfile.users.path", Play.applicationPath + "/test/htusers");
        Play.configuration.setProperty("authfile.users.delimeter", ":");
        Cache.safeDelete(FileAuth.AUTH_FILE_USERS_CACHE_KEY);
        FileAuth.scanUsers();
    }

    @Test
    public void testUsersRead() {
        Map<String, String> users = Cache.get(FileAuth.AUTH_FILE_USERS_CACHE_KEY, HashMap.class);
        assertNotNull(users);
    }

    @Test
    public void testUsersValidate() {
        String clear = "user";
        String pass = MD5Crypt.crypt("user");
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
    }

    @Test
    public void testValidatePassword() {
        String pass = "user";
        String user = "user";
        assertTrue(FileAuth.validate(user, pass));
        user = "apacheUser";
        assertTrue(FileAuth.validate(user, pass));
        user = "user";
        pass = "user123";
        assertFalse(FileAuth.validate(user, pass));
    }

    @Test
    public void testValidateNotExistingUser() {
        String pass = "user123";
        String user = "user123";
        assertFalse(FileAuth.validate(user, pass));
    }
}
PK�����*†9DÄžŒÒù��ù��²���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/GroupGroupsTest.java
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.junit.BeforeClass;
import org.junit.Test;
import play.Play;
import play.cache.Cache;
import play.modules.fileauth.FileAuth;
import play.test.UnitTest;

/**
 * GroupGroupsTest
 * 04.08.2012
 * @author Philipp Haussleiter
 *
 */
public class GroupGroupsTest extends UnitTest {

    @BeforeClass
    public static void setup() {
        Play.configuration.setProperty("authfile.groups.path", Play.applicationPath + "/test/group");
        Play.configuration.setProperty("authfile.users.delimeter", ":");
        Play.configuration.setProperty("authfile.groups.delimeter", ",");
        Cache.safeDelete(FileAuth.AUTH_FILE_GROUPS_CACHE_KEY);
    }

    @Test
    public void testUsersRead() {
        FileAuth.scanGroups();
        Map<String, Set<String>> groups = Cache.get(FileAuth.AUTH_FILE_GROUPS_CACHE_KEY, HashMap.class);
        assertNotNull(groups);
    }

    @Test
    public void testGroupContainsUser() {
        String user = "user";
        String group = "users";
        assertTrue(FileAuth.contains(group, user));
        user = "root";
        assertTrue(FileAuth.contains(group, user));
    }

    @Test
    public void testGroupNotContainsUser() {
        String user = "user";
        String group = "root";
        assertFalse(FileAuth.contains(group, user));
    }

    public void testGroupNotExists() {
        String user = "user";
        String group = "user";
        assertFalse(FileAuth.contains(group, user));
    }
}PK�����*†9D?5'³g��g��²���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/ShadowUsersTest.java
import java.util.HashMap;
import java.util.Map;
import org.junit.BeforeClass;
import org.junit.Test;
import play.Logger;
import play.Play;
import play.cache.Cache;
import play.modules.fileauth.FileAuth;
import play.modules.fileauth.utils.MD5Crypt;
import play.test.UnitTest;


/**
 * ShadowUsersTest
 * 04.08.2012
 * @author Philipp Haussleiter
 *
 */
public class ShadowUsersTest extends UnitTest {

    @BeforeClass
    public static void setup() {
        Play.configuration.setProperty("authfile.users.path", Play.applicationPath + "/test/shadow");
        Logger.info("file path: "+Play.configuration.getProperty("authfile.users.path"));
        Play.configuration.setProperty("authfile.users.delimeter", ":");
        Cache.safeDelete(FileAuth.AUTH_FILE_USERS_CACHE_KEY);
    }

    @Test
    public void testUsersRead() {
        FileAuth.scanUsers();
        Map<String, String> users = Cache.get(FileAuth.AUTH_FILE_USERS_CACHE_KEY, HashMap.class);
        assertNotNull(users);
    }

    @Test
    public void testUsersValidate() {
        String clear = "user";
        String pass = MD5Crypt.crypt("user");
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
    }

    @Test
    public void testValidatePassword() {
        String pass = "user";
        String user = "user";
        assertTrue(FileAuth.validate(user, pass));
        user = "user";
        pass = "user123";
        assertFalse(FileAuth.validate(user, pass));
    }

    @Test
    public void testValidateNotExistingUser() {
        String pass = "user123";
        String user = "user123";
        assertFalse(FileAuth.validate(user, pass));
    }
}
PK�����*†9DTâÒ%���%���£���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/grouproot:x:321:root
users:x:123:root,userPK�����*†9Dcé¸���¸���¦���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/data.yml# you describe your data using the YAML notation here
# and then load them using Fixtures.load("data.yml")

# User(bob):
#   email: bob@gmail.com
#   password: secret
#   fullname: BobPK�����*†9D<_'²���²���¥���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/htusersapacheUser:$apr1$kuwPretH$BPbVoWoDTEFUw.4g1zDKs1
apacheRoot:$apr1$nVmU2aOS$rDZ4.BG3TPT02YBsCVcSG/
root:$1$imw51D2V$aJbVmk2xlEg8q.Y8nh91E.
user:$1$4aMItwK9$PnpH2GeuHDeR2t.jKhQ771
PK�����*†9DÇÀ���À���¬���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/BasicTest.javaimport org.junit.*;
import play.test.*;

public class BasicTest extends UnitTest {

    @Test
    public void aVeryImportantThingToTest() {
        assertEquals(2, 1 + 1);
    }

}
PK�����*†9D‰=u���u���¤���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/shadowroot:$1$imw51D2V$aJbVmk2xlEg8q.Y8nh91E.:43534:0:435:7:::
user:$1$4aMItwK9$PnpH2GeuHDeR2t.jKhQ771:345345:0:46456:7:::
PK�����*†9D,mˆ÷��÷��³���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/ApacheGroupsTest.java
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.junit.BeforeClass;
import org.junit.Test;
import play.Logger;
import play.Play;
import play.cache.Cache;
import play.modules.fileauth.FileAuth;
import play.test.UnitTest;

/**
 * ApacheGroupsTest 03.08.2012
 *
 * @author Philipp Haussleiter
 *
 */
public class ApacheGroupsTest extends UnitTest {

    @BeforeClass
    public static void setup() {
        Play.configuration.setProperty("authfile.groups.path", Play.applicationPath + "/test/htgroups");
        Play.configuration.setProperty("authfile.users.path", Play.applicationPath + "/test/htusers");
        Play.configuration.setProperty("authfile.users.delimeter", ":");
        Play.configuration.setProperty("authfile.groups.delimeter", " ");
        Cache.safeDelete(FileAuth.AUTH_FILE_GROUPS_CACHE_KEY);
        Cache.safeDelete(FileAuth.AUTH_FILE_USERS_CACHE_KEY);
        FileAuth.scanGroups();
        FileAuth.scanUsers();
    }

    @Test
    public void testGroupsRead() {
        Logger.info("testGroupsRead");
        FileAuth.scanGroups();
        Map<String, Set<String>> groups = Cache.get(FileAuth.AUTH_FILE_GROUPS_CACHE_KEY, HashMap.class);
        assertNotNull(groups);
        int groupSize = groups.size();
        assertTrue(String.format("but was %d ", groupSize), groupSize > 0);
    }

    @Test
    public void testGroupContainsUser() {
        FileAuth.scanGroups();
        FileAuth.scanUsers();
        String user = "user";
        String group = "users";
        assertTrue(String.format("u: %s, g: %s", user, group), FileAuth.contains(group, user));
        user = "root";
        assertTrue(String.format("u: %s, g: %s", user, group), FileAuth.contains(group, user));
    }

    @Test
    public void testGroupNotContainsUser() {
        FileAuth.scanGroups();
        FileAuth.scanUsers();
        String user = "user";
        String group = "root";
        assertFalse(String.format("u: %s, g: %s", user, group), FileAuth.contains(group, user));
    }

    public void testGroupNotExists() {
        FileAuth.scanGroups();
        FileAuth.scanUsers();
        String user = "user";
        String group = "user";
        assertFalse(String.format("u: %s, g: %s", user, group), FileAuth.contains(group, user));
    }
}
PK�����*†9D/%ÈBÔ��Ô��¤���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/routes# Routes
# This file defines all application routes (Higher priority routes first)
# ~~~~

# Home page
GET     /                                       Application.index

# Ignore favicon requests
GET     /favicon.ico                            404

# Map static resources from the /app/public folder to the /public path
GET     /public/                                staticDir:public

# Catch all
*       /{controller}/{action}                  {controller}.{action}
PK�����*†9D¥#Æ/Ç��Ç��®���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/application.conf# This is the main configuration file for the application.
# ~~~~~
application.name=auth-file-demo

# Application mode
# ~~~~~
# Set to dev to enable instant reloading and other development help.
# Otherwise set to prod.
application.mode=dev
%prod.application.mode=prod

# Secret key
# ~~~~~
# The secret key is used to secure cryptographics functions
# If you deploy your application to several instances be sure to use the same key !
application.secret=uQks53MboMLlGVsJSrPRCipiFOZ4BXn8oDBfOxGxsaXDVtkJOJaIiBNX9SNQoUN8

# i18n
# ~~~~~
# Define locales used by your application.
# You can then place localized messages in conf/messages.{locale} files
# application.langs=fr,en,ja

# Date format
# ~~~~~
date.format=yyyy-MM-dd
# date.format.fr=dd/MM/yyyy

# Server configuration
# ~~~~~
# If you need to change the HTTP port, uncomment this (default is set to 9000)
# http.port=9000
#
# By default the server listen for HTTP on the wilcard address.
# You can restrict this.
# http.address=127.0.0.1
#
# Use this if you don't host your Play application at the root of the domain
# you're serving it from. This parameter has no effect when deployed as a
# war, because the path will be handled by the application server.
# http.path=/

# Session configuration
# ~~~~~~~~~~~~~~~~~~~~~~
# By default, session will be written to the transient PLAY_SESSION cookie.
# The cookies are not secured by default, only set it to true
# if you're serving your pages through https.
# application.session.cookie=PLAY
# application.session.maxAge=1h
# application.session.secure=false

# Session/Cookie sharing between subdomain
# ~~~~~~~~~~~~~~~~~~~~~~
# By default a cookie is only valid for a specific domain. By setting
# application.defaultCookieDomain to '.example.com', the cookies
# will be valid for all domains ending with '.example.com', ie:
# foo.example.com and bar.example.com
# application.defaultCookieDomain=.example.com

# JVM configuration
# ~~~~~
# Define which port is used by JPDA when application is in debug mode (default is set to 8000)
# jpda.port=8000
#
# Java source level => 1.5, 1.6 or 1.7 (experimental)
# java.source=1.5

# Log level
# ~~~~~
# Specify log level for your application.
# If you want a very customized log, create a log4j.properties file in the conf directory
# application.log=INFO
#
# More logging configuration
# application.log.path=/log4j.properties
# application.log.system.out=off

# Database configuration
# ~~~~~ 
# Enable a database engine if needed.
#
# To quickly set up a development database, use either:
#   - mem : for a transient in memory database (H2 in memory)
#   - fs  : for a simple file written database (H2 file stored)
# db=mem
#
# To connect to a local MySQL5 database, use:
# db=mysql://user:pwd@host/database
#
# To connect to a local PostgreSQL9 database, use:
# db=postgres://user:pwd@host/database
#
# If you need a full JDBC configuration use the following :
# db.url=jdbc:postgresql:database_name
# db.driver=org.postgresql.Driver
# db.user=root
# db.pass=secret
#
# Connections pool configuration :
# db.pool.timeout=1000
# db.pool.maxSize=30
# db.pool.minSize=10
#
# If you want to reuse an existing Datasource from your application server, use:
# db=java:/comp/env/jdbc/myDatasource
#
# When using an existing Datasource, it's sometimes needed to destroy it when
# the application is stopped. Depending on the datasource, you can define a
# generic "destroy" method :
# db.destroyMethod=close

# JPA Configuration (Hibernate)
# ~~~~~
#
# Specify the custom JPA dialect to use here (default to guess):
# jpa.dialect=org.hibernate.dialect.PostgreSQLDialect
#
# Specify the ddl generation pattern to use. Set to none to disable it 
# (default to update in DEV mode, and none in PROD mode):
# jpa.ddl=update
#
# Debug SQL statements (logged using DEBUG level):
# jpa.debugSQL=true
#
# You can even specify additional hibernate properties here:
# hibernate.use_sql_comments=true
# ...
#
# Store path for Blob content
attachments.path=data/attachments

# Memcached configuration
# ~~~~~ 
# Enable memcached if needed. Otherwise a local cache is used.
# memcached=enabled
#
# Specify memcached host (default to 127.0.0.1:11211)
# memcached.host=127.0.0.1:11211
#
# Or you can specify multiple host to build a distributed cache
# memcached.1.host=127.0.0.1:11211
# memcached.2.host=127.0.0.1:11212
#
# Use plain SASL to authenticate for memcached
# memcached.user=
# memcached.password=

# HTTP Response headers control for static files
# ~~~~~
# Set the default max-age, telling the user's browser how long it should cache the page.
# Default is 3600 (one hour). Set it to 0 to send no-cache.
# This is only read in prod mode, in dev mode the cache is disabled.
# http.cacheControl=3600

# If enabled, Play will generate entity tags automatically and send a 304 when needed.
# Default is true, set it to false to deactivate use of entity tags.
# http.useETag=true

# Custom mime types
# mimetype.xpi=application/x-xpinstall

# WS configuration
# ~~~~~
# Default engine is Async Http Client, uncomment to use
# the JDK's internal implementation
# webservice = urlfetch
# If you need to set proxy params for WS requests
# http.proxyHost = localhost
# http.proxyPort = 3128
# http.proxyUser = jojo
# http.proxyPassword = jojo

# Mail configuration
# ~~~~~ 
# Default is to use a mock Mailer
mail.smtp=mock

# Or, specify mail host configuration
# mail.smtp.host=127.0.0.1
# mail.smtp.user=admin
# mail.smtp.pass=
# mail.smtp.channel=ssl

# Url-resolving in Jobs
# ~~~~~~
# When rendering templates with reverse-url-resoling (@@{..}) in Jobs (which do not have an inbound Http.Request),
# ie if sending a HtmlMail, Play need to know which url your users use when accessing your app.
# %test.application.baseUrl=http://localhost:9000/
# %prod.application.baseUrl=http://www.yourdomain.com/

# Jobs executor
# ~~~~~~
# Size of the Jobs pool
# play.jobs.pool=10

# Execution pool
# ~~~~~
# Default to 1 thread in DEV mode or (nb processors + 1) threads in PROD mode.
# Try to keep a low as possible. 1 thread will serialize all requests (very useful for debugging purpose)
# play.pool=3

# Open file from errors pages
# ~~~~~
# If your text editor supports opening files by URL, Play! will
# dynamically link error pages to files 
#
# Example, for textmate:
# play.editor=txmt://open?url=file://%s&line=%s

# Testing. Set up a custom configuration for test mode
# ~~~~~
#%test.module.cobertura=${play.path}/modules/cobertura
%test.application.mode=dev
%test.db.url=jdbc:h2:mem:play;MODE=MYSQL;LOCK_MODE=0
%test.jpa.ddl=create
%test.mail.smtp=mock

PK�����*†9D‹úWÀ �� ��®���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/dependencies.yml# Application dependencies

require:
    - play
    - play -> secure
    - local -> play-file-auth 0.2
    
repositories:
    - playCustomModules:
        type:       local
        artifact:   ${application.path}/../../dist/[module]-[revision].zip
        contains:
          - local -> *PK�����*†9Dqé¶h���h���¦���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/messages# You can specialize this file for each language.
# For example, for French create a messages.fr file
#
PK�����*†9D«_^)/��/��¬���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/main.html<!DOCTYPE html>

<html>
    <head>
        <title>#{get 'title' /}</title>
        <meta charset="${_response_encoding}">
        <link rel="stylesheet" media="screen" href="@{'/public/stylesheets/main.css'}">
        #{get 'moreStyles' /}
        <link rel="shortcut icon" type="image/png" href="@{'/public/images/favicon.png'}">
        <script src="@{'/public/javascripts/jquery-1.6.4.min.js'}" type="text/javascript" charset="${_response_encoding}"></script>
        #{get 'moreScripts' /}
    </head>
    <body>
        #{doLayout /}
    </body>
</html>
PK�����*†9D*º$•<���<���¹���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/Application/index.html#{extends 'main.html' /}
#{set title:'Home' /}

#{welcome /}PK�����*†9DÙ¦��¦��²���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/errors/404.html<!DOCTYPE html>

<html>
    <head>
        <title>Not found</title>
        <meta http-equiv="Content-Type" content="text/html; charset=${_response_encoding}"/>    
    </head>
    <body>
        #{if play.mode.name() == 'DEV'}
            #{404 result /}
        #{/if}
        #{else}
            <h1>Not found</h1>
            <p>
                ${result.message}
            </p>
        #{/else}
    </body>
</html>
PK�����*†9DËip®V��V��²���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/errors/500.html<!DOCTYPE html>

<html>
    <head>
        <title>Application error</title>
        <meta http-equiv="Content-Type" content="text/html; charset=${_response_encoding}"/>	
    </head>
    <body>
        #{if play.mode.name() == 'DEV'}
            #{500 exception /}
        #{/if}
        #{else}
            <h1>Oops, an error occured</h1>
            #{if exception instanceof play.exceptions.PlayException}
                <p>
                    This exception has been logged with id <strong>${exception.id}</strong>.
                </p>
            #{/if}
        #{/else}
    </body>
</html>
PK�����*†9D¤8r“���“���¹���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/controllers/Application.javapackage controllers;
import play.mvc.*;

public class Application extends Controller {

    public static void index() {
        render();
    }

}PK�����*†9Dp­b’$���$���§���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/secure/opt/play/play-1.2.5/modules/secure
PK�����*†9DD6I÷P��P��¿���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.py# Here you can create play commands that are specific to the module, and extend existing commands

MODULE = 'play-file-auth'

# Commands that are specific to your module

COMMANDS = ['play-file-auth:hello']

def execute(**kargs):
    command = kargs.get("command")
    app = kargs.get("app")
    args = kargs.get("args")
    env = kargs.get("env")

    if command == "play-file-auth:hello":
        print "~ Hello"


# This will be executed before any command (new, run...)
def before(**kargs):
    command = kargs.get("command")
    app = kargs.get("app")
    args = kargs.get("args")
    env = kargs.get("env")


# This will be executed after any command (new, run...)
def after(**kargs):
    command = kargs.get("command")
    app = kargs.get("app")
    args = kargs.get("args")
    env = kargs.get("env")

    if command == "new":
        pass
PK�����*†9DŒÀÉZ•��•��½���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/README.mdplay-file-auth
==============

This Module supports authentication of Play! 1.x Applications agains Unix Auth Files (e.g. Apache htusers)

This Plugin works for all Auth Files with the following syntax:


    user1:passwordhash
    user1:passwordhash:...:...:

    group:user1 user2
    group:x:...:user1,user2


The Hash Algorithm has to be either MD5 Crypt or MD5 Apache Crypt.

    $1$...
    $apr1$...PK�����*†9DaCV��V��½���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/build.xml<?xml version="1.0" encoding="UTF-8"?>

<project name="play-file-auth" default="build" basedir=".">

    <target name="check" unless="play.path">
        <fail message="Please specify Play framework path using -Dplay.path=/path/to/framework/home" />
    </target>

    <path id="project.classpath">
        <pathelement path="${play.path}/framework/classes"/>
        <fileset dir="${play.path}/framework/lib">
            <include name="*.jar"/>
        </fileset>
        <fileset dir="${play.path}/framework">
            <include name="*.jar"/>
        </fileset>
        <fileset dir="lib">
            <include name="*.jar"/>
        </fileset>
    </path>

    <target name="build" depends="compile">
        <mkdir dir="lib" />
        <copy todir="tmp/classes">
            <fileset dir="src">
                <include name="**/*.properties"/>
                <include name="**/*.xml"/>
                <include name="**/play.plugins"/>
                <include name="**/play.static"/>
            </fileset>
        </copy>
        <jar destfile="lib/play-play-file-auth.jar" basedir="tmp/classes">
            <manifest>
                <section name="Play-module">
                    <attribute name="Specification-Title" value="play-file-auth"/>
                </section>
            </manifest>
        </jar>
        <delete dir="tmp" />
    </target>

    <target name="compile" depends="check">
        <mkdir dir="tmp/classes" />
        <javac srcdir="src" destdir="tmp/classes" target="1.5" debug="true">
            <classpath refid="project.classpath" />
        </javac>
    </target>

</project>
PK�����*†9Dö<D>Ö��Ö��À���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pycÑò
++Rc�����������@���s.���d��Z��d�g�Z�d�„��Z�d�„��Z�d�„��Z�d�S(���s���play-file-auths���play-file-auth:helloc����������K���sV���|��i��d�ƒ�}�|��i��d�ƒ�}�|��i��d�ƒ�}�|��i��d�ƒ�}�|�d�j�o	�d�GHn�d��S(���Nt���commandt���appt���argst���envs���play-file-auth:hellos���~ Hello(���t���get(���t���kargsR����R���R���R���(����(����s���/home/javastream.de/jenkins/jobs/de.consolving.play-file-auth/workspace/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pyt���execute	���s����
c����������K���s@���|��i��d�ƒ�}�|��i��d�ƒ�}�|��i��d�ƒ�}�|��i��d�ƒ�}�d��S(���NR����R���R���R���(���R���(���R���R����R���R���R���(����(����s���/home/javastream.de/jenkins/jobs/de.consolving.play-file-auth/workspace/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pyt���before���s����c����������K���sQ���|��i��d�ƒ�}�|��i��d�ƒ�}�|��i��d�ƒ�}�|��i��d�ƒ�}�|�d�j�o�n�d��S(���NR����R���R���R���t���new(���R���(���R���R����R���R���R���(����(����s���/home/javastream.de/jenkins/jobs/de.consolving.play-file-auth/workspace/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pyt���after���s����
N(���t���MODULEt���COMMANDSR���R���R	���(����(����(����s���/home/javastream.de/jenkins/jobs/de.consolving.play-file-auth/workspace/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pyt���<module>���s���			PK�����*†9DxÏ‘[$���$���¼���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/manifestversion=0.2
frameworkVersions=1.2.x
PK�����*†9D"¬û»��»��Ï���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/lib/play-play-file-auth.jarPK
����F—C������������	��META-INF/þÊ��PK
���E—C½ÿíŠ���¤������META-INF/MANIFEST.MFM±
Â0E÷@þ!£	U¡H·ÖÉ¡"T\噾ÐiR’tÈß›l®çœËÁ‘Á˜äC$ï:qR
g½û#ýzAQX‘תo!á,‡\ûV5Ÿs+¿ÍE¦Ý‰‘tð1Ç„kw§Õ‘3ΰb'ž²\ý¼[älÚP“!
©üÈ%[Š­†,JØÓR—?PK
����F—C���������������play/PK
����F—C������������
���play/modules/PK
����F—C���������������play/modules/fileauth/PK
����F—C���������������play/modules/fileauth/utils/PK
���F—C��������������play.plugins�PK
���F—C(�å_j
����$���play/modules/fileauth/FileAuth.classW{|Õþ&û˜ÙÉ$À†D—Š,ˆ˜„,QZPEBL „”hD‡ì$Ýìngg‘૾j[m}k¥­O4ÕR´!1ÁG¨Vkµ[«}ØÖÖÚÚ÷ý•~wöÁf³bȏû8÷Üs¿sÎwϝ}ùOpþ£"ˆk|8×ʸN…×(¸^ÅpƒŒ/ª”IÁ—E£hn*†Œ¯Èøj1Jp³Ü"ãV·ávîÀ
îRq7¾¦à»Äðë2¾¡âDaö›¢¿WÅ}¸_ŒPð è’±[ÅÃxDưŠø–hÍc
¾-VöÈøŽŒÇUTá	•Ø+š}*fb¿hž žRð]{DÆK1*6ŽÉxZÅ2Œ*Jßç=£à ‚gRpXÁs2žWq®.½ àEáÕ„Œ#õ›×õ45·4ötv4nêèi¨oXר³¡±[‚¿åb}»^Ñ£ýµ¶eFûWH(iˆE¶µ»ôHҐ 6wô4¶Õ¯ii<W‚t„9Ç,®Ý´±³}’É’ÔxsskãÆÎͼ+ͨi¯’બê’ànˆ…isF‹5Ú’ƒÛk³¾-b(±^=Ò¥[¦˜§…n{ÀLH¶Ä#úPí`,œŒ‰Ú>3bèI{ ¶‰ƒzZé7ì΄aQ{VeUÊ­¤mFj[õ8—=ÉÔÚŒ)+“ÏŠgÎ^6YuåÔPM•¬¢A_‡ÙÕí¤EgæC™¾ú³ÖŠ%ãííOš¦iÌQè0ì
«ë릍ëcM)½±¨­›QÂ;­r:ÞU‘AÇ#æW¤…s¦SSăyÄ)Ó€B ÛõˆÖm†]‰ë‰Ä¥1+L:Ñ^k(návÊ×D¯MŸä‰ë–;lK¡kP´ÈNL­˜±Ú5ɾ>Ã2›=lX\wGHaª;$Ì˪	J¶Åì¦X2nÜÑkÄm3¥vyV£yc®\dnÓÅ=sа
ëZr	¥“S_ø3Äð‰ðµ§œpë–µP 2¢ì¤f"3æ]J}3Ñì;ב‰PVöFÒ÷Síˆ%­^£É9·$sµ–ˆó5´ UÃ:Ðê¬c¹X§'Ȧ,¯ÄÈø¾†—ð2íLb™,	3óë‡†íØ¬a‹h^Â&mcÂ5ôà
ÎÞüLÉxUÃq‘Œ×4ü¯3¢6ˆð-q.ý’¸nÈxCÏñf4o5­NèüTÂ	ù‡¬Iš‘°£²ZÃÏ𦌟køÞ“_òÄ`³¥bСVÐŒ5¼w&áݸíb£×–ñ+
¿Æo$h¹©!þ­†wq¥†ßáJÙ ™FcvP:ÄŠl„„ê|
¿û+
S“¥4×pJ(ÌÿA4ïiø#ÞÑð'¼¯áÏbôþB6,Œjø+>”0÷¸TÖð7±éï@YJ³Zõ‰
ôÿø§ˆÏ¿È»à 3<äéìlüSUÍI_©|qn^‚Üv,Ä)ö‹Oa£C–ã	ë3vbh¤X¿$X€Á˜,„ÉÙ˜0l†û
‘“ÿ1ÕŽB¯Þ;`Ô6ˆ–ae¯ÀqëbC„•iEUK>SxÛUN•T,/¤Èû½°0h°Dmë¹ËDmd™ÙnXfßP{¶lúœ}ílxYáûÌþ¤¥§\‘SŽÛ­XܰlÓHÄìBr	ÅBz>”çRæI(TÏšÞkRh«—l3¢t#4­ÃÒ·{Åäê2”°A2¬7iYFÔÞL6¶š‘ˆøaí\/á¤Êõdz¥Ø±”ˆ©,³Ø	rK¬¿_°ÜmFûb*@ÞR ¹]yIÏxG¹×Øa&Ä›à5©rî¾T·¢âËhòs"”ËŽÉÒO›*Ç-ÎçIÄ#¦]øu¯*ørº9`ä\ñ¤—Æ4øi’Ú•·çìãó`ªÉœH”‘zÎ÷¹Ó·‰„Þ/<2,+&"ž ØÉf³Èfóñ²éÒÃaÌçGu¿8Ü M°–³"x8çãÈq�ësä>ÌÁ†œùé”Hâ-eÛFI-{‰½§ú�¤}ŽÊF¶^GxÚÙj)|›ØûÄ#H-±Ùf/ÖîGÑ.ÃÕ}�î½~O\£ð‚¼¡úäQ(ª÷RÏåØžCëÀb¶5(ÅÎkq2-்Ìys ¢]œ7Ir>gÝʈdËÇ"ñå#Q§"YÁv%‘¬âü"YM$k&!¹p
’±5‹ä³DÒƒ‹Ò}’·¬ƒÄãÞS=yñx\{FQÜZS=­‡PÒr„¡Åc(-ž,¨E4æÇKs
aÌdàýzÏœJ0§1`uê(èÌ0œÑ6'×d�]Ä¥èE˜¶ü
JRk[³k×|èË:0œv Tȁǘ™v`qh³òá‡	ß ü~ ü‹yì%<0Bøƒ„ˁr@Ãõ§áŸàd_@Ô¸¿)
_Ë®ïPÛÌä_:J~ÊìËöÃï/Áì
bPî¯Á	-ã8‘løçŒà£8isý'sXÍÿ#˜çzÁQÌOS¦uºyNiM`VhïÊîÔ]˜›¶#öùån>m•Ýã¨ê�÷.®sÜ#¨é®óL :àY<‚P7à=èÞ}ôýš€×µtK^·èÆPK߆¾î÷ÔøOÅèImÿ¤›¶»]wÇ(>5ŒŠ”ty®4ãØ™S3†³$ŒàlÝ$¿jö2DÛq/ðz‰þ-þŽO¥ªålw0C˜8—¡—³~\A†\Ií«q®Ãm¸»p#ÀMÃÍ´q­Ý‚	ÜŠ79~‹oãv~»Ý)ÍÂ]Nj/¤Õ]˜ÇÄ_B*Ü€:¦~é¾™(¢L¨‡»g‘qÊÞvFŸãÈ'©°2ÌÆQ$2Ôã4ÖóËÜF2‡©5A†cEa{†Eïñ”R’ârÁ…y¤ÕþOsØZ€«>Šm~ˆtL Lä„)ýô8p§Iâ	x’x'pmÀëDÈIØyvcvÀ™‡—Öˆ5e%ٝž”ƒ÷=<ŽsxÚê:_@©SêÁåÅ®åZ¹V^ü æÔrmi]IÀ(qxV_„ó®Ó¤á£ï†rŠ‚¾ûvø}¡,û\öy2ìs¤Ës¥¹ì}ûB‚}×KÕRˆy}C–};Yjû˜±û™íÈ•ù¶=Ä·i7³ý0yóy÷(îÆã\ya/öñoûɃ§ø3i„¿ð÷Ê(þ‹1ɇQiÆ¥xVªÆ<ñT‹ÃÒjŽðœÔˆç¥.¼(í$óC÷uÄr)ORh¡Ä)C%xU¼—°È€…¼;QŒYˆ.ãH#Чež¿1½÷]>,y>b½Ýṇ~ÝèðÜK)ž{ˆ ÅsyžÈð\Hó|ž´•w¯‰ñj‘Nwª·]Ò"‡ñîlõNeð¬”ÖVjež!UüJHWñµ”ˆ§d
âJ3×àJýkÒ	ríq‹Ú-9)ñ;õøeô
Óñ*~î]•ýX˜ç¼±ïhß¹}ٍ©Ï…ùl?ï`¹úÿPK
���F—Cæ'È­r��p��*���play/modules/fileauth/FileAuthPlugin.classQÛJ1œìÖ®nk«VÛz©U(R\|V
–"…Šâc¶]5’&e/ŠŸå‹‚‚àG‰g·õ*æa&™Ì™œ$/¯Ï�¶±b#‚…Y
1ÌY(Z(1¤w…áƒY_?aHèžÇo	åE}×ó¹+I™ié.—'Üñz$¦ÂK0¬µ’ß:}Ý‹¤8çBz<
/MöiÒ–Ñ…P;¢Õþ` E—‡B«NÈý¾Ò.Cõ—ŒN—«¦v©ØîèÈïzq(Cá{öÖ¿æYXg¨ü”EKµÿtLïØÚô…e«í뾨—ì¡Rž yxô¥úúð.R¸Ó¨|;ªÔ÷;™/*V1F¿,¾á­bF<¶ñ�v—lÛ„éDÌ#C˜ˆ'‰rÅMrĹ'g0[›÷H~¦ä`É_¢Úr’VVŒÒÆé¤<¦(ÏÀtR7ƒEb›”yT°€‰7PK
���F—CŒˆvÓ`��%��#���play/modules/fileauth/ScanJob.class}PËNA¬áé.‹ŠÆxpãÁÆ„51«Q80†!ËÙ	ŸåIâÁð£Œ=@ăq“©~Twue?¿Þ?�œ¡n"‰¢‰ÊöÒØO£Âºž/âf—!q¥†‚!çHO<D“¾ðŸxߥNÁQîv¹/u½n&‘Žœ©ËçöD
#Wö‹tÂ‘ÝpïNõ[É¡¢„Áì¨Èˆ©·­5:æ3ÎPyŒ¼PNDW’ÔÛž§BJåÑ…üêÂXõûz&ü¹Öœq7Ò&Î'Ò³B:‡¨Z¨¡ÊPû×Cv£¹¬ëÏk³mJŒ€VŸákG¦£}ÛQ(]ûžOÉ‘©ù[_EÓ�ÇHÐ×_L›#ܢʦÈ(&OÞÀ^—´A˜Z6ó0	­Õ�2”òìÏrk½l,ë-ïm¶',ÒՍ–	k¡ÍhÌa‡b†¸<½B€ÝoPK
���F—CÎǘ	��%��*���play/modules/fileauth/utils/MD5Crypt.class­W{PTçÿ}û¼,X!®(`BuÙe]@E4¾�EA@りԚËîe¹º/wï"5¦Å4iúŠé˦5ÆØ®Imj’v¥Ú`ß3í_ý/íLg:Ó¦L2ÓtÚ4ôz¾»wĵa:…™ïq¾s¾ó;ç;»¿üàæ4€&ü܆fD‹C\ÀqHÚh£Úè,Ň1>œ°b܆"DL˜‘ýÛjÃI<©§øpZÀÅY+³âã6,Æ'¬˜´¡Q~~ޝðI.vŽOpò“>Å5<%àÓœø>|–ŸãäÏóÕÓüÞó|x†_à_ä«/	ø2ß|…8ëW<ËUÍŠ¯[q‘¡ÈßÖÓß±«mŸŸÁÑsT“|a)òùÕ„
=ÈPÒ‹&U)ªî—Â)™Á¢¨1©e--6)QEÝÂ`tÕïg0uÄ‚t\Ö£Då¾TdXNôKÃa™ßHáýRBá{hRG•$ÃÊžxXšðEbÁTXNúF”°,¥ÔQ_JUÂI_ïöu‰‰¸J(LI‰2Tº†îƨi—¡1†òÇ\YŒ®tuwÕ:g$ɺ‰/©œ$l¬‹ŒKÈÉTXepÞ%ОRÂA9ArE‚›VT²Äìjç@˜B÷dI†¡vëð„*'›SDuµ×ÓÍF%'6:²„d•Ld¨qé°’r •PÔ	_¯œLJ!y»’“Ü|ƒ<ÎàšÇÔó§£máPŒ¶£‘ã9®*±(ñ›Üoä_WwrY‰¹!.%“'b‰ ÷†Ä`MHÑ`HŽæÃƒ¿ocl- a:‹¥¸•;²P»tѯ6ÄÃdSD
)Ûˆ•Â~URéq•Ì\þ!þ6W½ÝR:&'”‘‰½y¿¬Z˜Å‡(u(¸•¨*«\šAŒ³ÝO$Â句¹Sá	Q’öÕü*ëÑjÅs".áyR9ÀÑm¬ÍñÔy³¾;\›{¯ZþZV\ñ®ˆø¾)â>&â@v8Èpß="™aÛj_cSóšµëZÖ·nhkïØ¾£sç®®îÝ=½}{ö>´Ïß?°ÿÀÁÁCÒp („F•£Ç‘h,~<‘TSc'Æ'NZ‘q/Šx	ßq
ß&OZ+^ñ\§H\Xì2,E¹/U•ˆœ?ä^y…Á>?E¼Š×D|ßcØro÷6,o{£ˆnp+¦È€º¦:)Uë¤x‚マ›œå–ˆàu~ô‹˜Æm?Än?Ê®~,¢›o‚VŠ!’Úƒ½"ÚÑ!â§øÐ.kçÆ7ì
CÝBŠaÎ~ÍC{†Ê;Iþ‰¤*G½œ —­ÈF¦óí¥WéÝe‰§my2åzœïÂô
…
¯³ò¸¢òZÖÅwöù<ä©À¨”hÓY:h/Åãr”Òf™«ãîT­¥‚Ë]±ØU0§«þKÊR1¡bÚ¥5ª�eSÓ½ëÞ=s~É\™þÑDìoUšÕ–°
©£Z«£^¥7ëÇ$U£t%™Nêð+]]…ÛŒwAÅxÖ%6²&¡&(\sÁ9Äé…•Yµ‚¾g$ûZ µó^Ä)õ¼5YRñ V-A݉Vjb]ÚËš©ÿÉD±ÈÇSR89O6ìH?}V4Ñ÷`€k°ë´ÝRÚ·ÌÙC¤557ÅG3£Ùì¾öŠÆ²‘F‹Flƒ4ŠYlÂfš‹°[uá4LÚÙ {Úô<ŠÜÓ–+({‡1“iŠ.¶\BQܦf·¹y
:Hc•{ڬӍÍt4«F/ËR¦ ÐÖHò³€Ü°Ñ¸žÀ´ÒWÓ,!8Õ¨‘à´ ]hC?¶ã vÌ=ˆmDù€’^}’Œ3ÑÜpEƒ7`ë›4Ì,{U^Gqõbˆ>‘Aieªí–Ó[Ó3oz3°_Ïã¨ÿ¬ì†€”¡5èÃ*<¤é¬…‘ßK(vhž
èÄN’PGøºèÔÉ둎ÃO{ÍåÆMUîéË(qWû'KÏümÖl‡u€®ØO&
Ðþ ¦ª’Î
°ˆš¡å¥O3”Jœ® ‘8ø™eé"Ìœ¹6ïmÌq“…ØG³×Q]º›àñ3»cÑ×wßÂâAŠ‘ŠÛz4XHgö¾RÍì QdX1’¿×J±2@¸9*ê{ú½—H–Û´MwÏ-TÒ|_¯'ƒ%vá2V4dàt,Í êñ£Omñ8–._nz8ƒe,?žù­›øì0³ORMš€1òÑ	òÈ#¤íVâ4ý
˜³7é\IHÉ_í6¢sL+†èi¨„’¿>ŠÃZQ«ÖÑnÒIp{ÕS¨¹>Ï‹Ïä_ƒß•½“¯†´”s’—ÿÏv[æÛ}™´½@èÓ¤í*Ùø"i~‰ì¾ö?Ø}¤ Ýµì¾ý!vS³ÎÞd|ƒì."aÅCö­¸�‘ÏUÜßã±×eð€á9”yŒÙ5YÛCfVÙ…+(öí'L¡n£Éirgð‘V:M
¹…'»àçf§9wnöäyJ«úhSÕ"TQí4y‚Ý~4¤a® 5®Iá/é™?x§PŸã¼€ú
ÁtæJ¹€‰xÒ|ÉoÕvtxªEHÏüÚiâ
Œ\f‘ñ­Ëˆpî¬lYF¢Óì5Ú효%~ïu¬„Æš%¸s]XHÏ9ËÚ3)P¡xZ¥‚Shàqâ<ÙÉ¡Í^ãš)4Øíã^»E[	ãg½v‘/Ïž[oq
•뼫)Ïje-)Èjγ
³¬¥Y-yÖ¢YÖ²‚¬Ö<«-Ï*ä´s²N5ç¨ôtNáŽZý'-”ߤ°ü#ámTáªÕ¦€—Âÿ¯Ô=Þ£
ýw*™ïSšþƒ’àŸT¾þ…þq|€3éO2ƝÓW¡€«LÄk¬7Y)}=Úñ+Úÿ†-ÆïX5Þf5x—­Àûì~f`u¬˜­bæbUÌÃ`
ôïckX#ÛÊšÙ.¶Žõ±jÖÏ6²Ãl²ÍìÛÂ’l;ÏÚØEÖÁ^gÛÙ/X'{‹ídï±.C9ë6Ô°ÃfÖkèb{~¶×p„ù
6 ¥bœ:û$u ‰]ÀËðh­AÀï‘ÐW”‚¹D¥U6Qùj˜V²õ¨…±ÙÐ@Å\¦ÂqØ ’?d˜Ùy¼u5áµ^&P’BÑË…ª—‹Fª’Z–—xÜ­«¯¾FdÉÂI¼—8|7Ðxûξʂ(b2ÊÙ–±V2eN™iÄQ½Ì4☆ž!¬ÉGþPK
����F—C������������	���������íA����META-INF/þÊ��PK
���E—C½ÿíŠ���¤��������������¤+���META-INF/MANIFEST.MFPK
����F—C����������������������íAç���play/PK
����F—C������������
����������íA
��play/modules/PK
����F—C����������������������íA5��play/modules/fileauth/PK
����F—C����������������������íAi��play/modules/fileauth/utils/PK
���F—C����������������������¤£��play.pluginsPK
���F—C(�å_j
����$�����������¤Ï��play/modules/fileauth/FileAuth.classPK
���F—Cæ'È­r��p��*�����������¤{��play/modules/fileauth/FileAuthPlugin.classPK
���F—CŒˆvÓ`��%��#�����������¤5��play/modules/fileauth/ScanJob.classPK
���F—CÎǘ	��%��*�����������¤Ö��play/modules/fileauth/utils/MD5Crypt.classPK��������Ÿ����PK�����*†9DÔQ.^Þ���Þ���¿���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/routes# This file defines all module routes (Higher priority routes first)
#
# import these routes in the main app as :
# *     /                       module:play-file-auth
#
# ~~~~

GET     /?                      Module.indexPK�����*†9D1Sù*T���T���É���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/application.confapplication.name=play-file-auth
application.mode=dev
application.secret=test
db=mem
PK�����*†9Dæ´(ÕJ���J���É���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/dependencies.ymlself: play -> play-file-auth 0.2

require:
    - play
    - play -> securePK�����*†9DÌ;¨U¬���¬���Á���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/messages# Default play-file-auth messages
# You can specialize this file for each language.
# For exemple, for french create a messages.fr file

#play-file-auth.name=play-file-authPK�����*†9D������������Ä���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play.pluginsPK�����*†9DˆŽ6©™��™��Ú���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/ScanJob.java/**
 * ScanJob
 * 31.07.2012
 * @author Philipp Haussleiter
 *
 */
package play.modules.fileauth;

import play.jobs.Every;
import play.jobs.Job;

/**
 * Periodically Scan of user/group files. Scan runs every 5 mins.
 * @author Philipp Haußleiter
 */
@Every("5min")
public class ScanJob extends Job {
    @Override
    public void doJob(){
        FileAuth.scanUsers();
        FileAuth.scanGroups();
    }
}
PK�����*†9DlP¨å��å��Û���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/FileAuth.java/**
 * FileAuth 31.07.2012
 *
 * @author Philipp Haussleiter
 *
 */
package play.modules.fileauth;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import play.Logger;
import play.Play;
import play.cache.Cache;
import play.modules.fileauth.utils.MD5Crypt;

/**
 * Basic Wrapper for all FileAuth Functions.
 *
 * @author Philipp Haußleiter
 */
public class FileAuth {

    /* Cache Key for User/PasswordHash Map */
    public final static String AUTH_FILE_USERS_CACHE_KEY = "AUTH_FILE_USERS";
    /* Cache Key for Group/Users Map */
    public final static boolean IS_ENABLED = isEnabled();
    public final static String AUTH_FILE_GROUPS_CACHE_KEY = "AUTH_FILE_GROUPS";
    private final static String CACHE_TIMEOUT = "5mn";

    /**
     * Returns a Map of all Users (user/password hash).
     *
     * @return the Map.
     */
    public static Map<String, String> getUsers() {
        if (!IS_ENABLED) {
            return new HashMap<String, String>();
        }
        Map<String, String> users = Cache.get(AUTH_FILE_USERS_CACHE_KEY, HashMap.class);
        if (users == null) {
            users = scanUsers();
        }
        return users;
    }

    /**
     * Returns a Map of all Groups (groups/usernames).
     *
     * @return the Map.
     */
    public static Map<String, Set<String>> getGroups() {
        if (!IS_ENABLED) {
            return new HashMap<String, Set<String>>();
        }
        Map<String, Set<String>> groups = Cache.get(AUTH_FILE_GROUPS_CACHE_KEY, HashMap.class);
        if (groups == null) {
            groups = scanGroups();
        }
        return groups;
    }

    /**
     * Checks if a group contains a given username.
     *
     * @param group the Group to check.
     * @param user the user to check.
     * @return true if user is in group, otherwise false.
     */
    public static boolean contains(String group, String user) {
        if (!IS_ENABLED) {
            return true;
        }
        if (group == null || user == null) {
            return false;
        }
        Map<String, Set<String>> groups = getGroups();
        Set<String> groupUsers = groups.get(group);
        if (groupUsers == null) {
            return false;
        }
        return groupUsers.contains(user);
    }

    /**
     * Validates an user with a given password agains the user/password hash
     * mapping.
     *
     * @param user the given user.
     * @param password the given password (clear text).
     * @return true if validation okay, otherwise false.
     */
    public static boolean validate(String user, String password) {
        if (!IS_ENABLED) {
            return true;
        }
        if (user == null || password == null) {
            return false;
        }
        Map<String, String> users = getUsers();
        String encryptedPass = users.get(user);
        if (encryptedPass == null) {
            return false;
        }
        return MD5Crypt.verifyPassword(password, encryptedPass);
    }

    /**
     * Rescans the users file.
     *
     * @return the updated Map of users.
     */
    public static Map<String, String> scanUsers() {
        String fileName = Play.configuration.getProperty("authfile.users.path");
        String delimeter1 = Play.configuration.getProperty("authfile.users.delimeter", ":");
        Logger.info("@" + System.currentTimeMillis() + " Scanning Users in " + fileName);
        Map<String, String> users = new HashMap<String, String>();
        File file = new File(fileName);
        if (file == null || !file.exists() || !file.isFile()) {
            Logger.warn(fileName + " is not a valid Auth-File!");
        }
        try {
            BufferedReader br = new BufferedReader(new FileReader(file));
            String line;
            String parts[];
            while ((line = br.readLine()) != null) {
                parts = line.split(delimeter1);
                /*
                 * Matches
                 * user:hash
                 * user:hash:uid: ...
                 */
                if (parts.length > 1) {
                    users.put(parts[0].trim(), parts[1].trim());
                }
            }
            Cache.set(AUTH_FILE_USERS_CACHE_KEY, users, CACHE_TIMEOUT);
        } catch (FileNotFoundException ex) {
            Logger.error(ex.getLocalizedMessage(), ex);
        } catch (IOException ex) {
            Logger.error(ex.getLocalizedMessage(), ex);
        }
        Logger.info("found " + users.size() + " mappings");
        return users;
    }

    /**
     * Rescans the groups file.
     *
     * @return the updated Map of groups.
     */
    public static Map<String, Set<String>> scanGroups() {
        String fileName = Play.configuration.getProperty("authfile.groups.path");
        String delimeter1 = Play.configuration.getProperty("authfile.users.delimeter", ":");
        String delimeter2 = Play.configuration.getProperty("authfile.groups.delimeter", " ");
        Logger.info("@" + System.currentTimeMillis() + " Scanning Groups in " + fileName);
        Map<String, Set<String>> groups = new HashMap<String, Set<String>>();
        File file = new File(fileName);
        if (file == null || !file.exists() || !file.isFile()) {
            Logger.warn(fileName + " is not a valid Auth-File!");
        }
        try {
            BufferedReader br = new BufferedReader(new FileReader(file));
            String line;
            String parts[];
            String userParts[];
            Set<String> users;
            while ((line = br.readLine()) != null) {
                parts = line.split(delimeter1);
                if (parts.length > 1) {
                    if (parts.length > 2) {
                        userParts = parts[parts.length - 1].split(delimeter2);
                    } else {
                        userParts = parts[1].split(delimeter2);
                    }
                    if (userParts.length > 0) {
                        users = new HashSet<String>();
                        for (String user : userParts) {
                            users.add(user.trim());
                        }
                        groups.put(parts[0].trim(), users);
                    }
                }
            }
            Cache.set(AUTH_FILE_GROUPS_CACHE_KEY, groups, CACHE_TIMEOUT);
        } catch (FileNotFoundException ex) {
            Logger.error(ex.getLocalizedMessage(), ex);
        } catch (IOException ex) {
            Logger.error(ex.getLocalizedMessage(), ex);
        }
        Logger.info("found " + groups.size() + " mappings");
        return groups;
    }

    private static boolean isEnabled() {
        if (Play.configuration.getProperty("authfile.users.path") == null
                || Play.configuration.getProperty("authfile.groups.path") == null) {
            Logger.info("FileAuth not enabled. authfile.users.path or authfile.groups.path not set!");
            return false;
        }
        return true;

    }
}
PK�����*†9D4ÿÑ^º��º��á���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/FileAuthPlugin.java/**
 * FileAuthPlugin
 * 31.07.2012
 * @author Philipp Haussleiter
 *
 */
package play.modules.fileauth;

import play.PlayPlugin;

/**
 * Entry Class for first file scan.
 * @author Philipp Haußleiter
 */
public class FileAuthPlugin extends PlayPlugin {

    /**
     * Trigger to scan the files for the first Time.
     */
    @Override
    public void onApplicationStart() {
        ScanJob job = new ScanJob();
        job.now();
    }
}
PK�����*†9DYí΁1��1��á���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/utils/MD5Crypt.java/*

MD5Crypt.java

Created: 3 November 1999

Java Port By: Jonathan Abbey, jonabbey@arlut.utexas.edu

Original C Version:
----------------------------------------------------------------------------
"THE BEER-WARE LICENSE" (Revision 42):
<phk@login.dknet.dk> wrote this file.  As long as you retain this notice you
can do whatever you want with this stuff. If we meet some day, and you think
this stuff is worth it, you can buy me a beer in return.   Poul-Henning Kamp
----------------------------------------------------------------------------

This Java Port is  

Copyright (c) 1999-2010 The University of Texas at Austin.

All rights reserved.

Redistribution and use in source and binary form are permitted
provided that distributions retain this entire copyright notice
and comment. Neither the name of the University nor the names of
its contributors may be used to endorse or promote products
derived from this software without specific prior written
permission. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE.

 */
package play.modules.fileauth.utils;

import java.security.MessageDigest;

/*------------------------------------------------------------------------------
class
MD5Crypt

------------------------------------------------------------------------------*/
/**
 * This class defines a method,
 * {@link MD5Crypt#crypt(java.lang.String, java.lang.String) crypt()}, which
 * takes a password and a salt string and generates an OpenBSD/FreeBSD/Linux-compatible
 * md5-encoded password entry.
 */
public final class MD5Crypt {

    /**
     * Command line test rig.
     */
    static public void main(String argv[]) {
        if ((argv.length < 1) || (argv.length > 3)) {
            System.err.println("Usage: MD5Crypt [-apache] password salt");
            System.exit(1);
        }

        if (argv.length == 3) {
            System.err.println(MD5Crypt.apacheCrypt(argv[1], argv[2]));
        } else if (argv.length == 2) {
            System.err.println(MD5Crypt.crypt(argv[0], argv[1]));
        } else {
            System.err.println(MD5Crypt.crypt(argv[0]));
        }

        System.exit(0);
    }
    public static final String SALTCHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
    public static final String itoa64 = "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";

    public static final String to64(long v, int size) {
        StringBuilder result = new StringBuilder();

        while (--size >= 0) {
            result.append(itoa64.charAt((int) (v & 0x3f)));
            v >>>= 6;
        }

        return result.toString();
    }

    public static final void clearbits(byte bits[]) {
        for (int i = 0; i < bits.length; i++) {
            bits[i] = 0;
        }
    }

    /**
     * convert an encoded unsigned byte value into a int
     * with the unsigned value.
     */
    public static final int bytes2u(byte inp) {
        return (int) inp & 0xff;
    }

    static private MessageDigest getMD5() {
        try {
            return MessageDigest.getInstance("MD5");
        } catch (java.security.NoSuchAlgorithmException ex) {
            throw new RuntimeException(ex);
        }
    }

    /**
     * <p>This method actually generates a OpenBSD/FreeBSD/Linux PAM compatible
     * md5-encoded password hash from a plaintext password and a
     * salt.</p>
     *
     * <p>The resulting string will be in the form '$1$&lt;salt&gt;$&lt;hashed mess&gt;</p>
     *
     * @param password Plaintext password
     *
     * @return An OpenBSD/FreeBSD/Linux-compatible md5-hashed password field.
     */
    public static final String crypt(String password) {
        StringBuilder salt = new StringBuilder();
        java.util.Random randgen = new java.util.Random();

        /* -- */

        while (salt.length() < 8) {
            int index = (int) (randgen.nextFloat() * SALTCHARS.length());
            salt.append(SALTCHARS.substring(index, index + 1));
        }

        return MD5Crypt.crypt(password, salt.toString());
    }

    /**
     * <p>This method actually generates a OpenBSD/FreeBSD/Linux PAM compatible
     * md5-encoded password hash from a plaintext password and a
     * salt.</p>
     *
     * <p>The resulting string will be in the form '$1$&lt;salt&gt;$&lt;hashed mess&gt;</p>
     *
     * @param password Plaintext password
     * @param salt A short string to use to randomize md5.  May start with $1$, which
     *             will be ignored.  It is explicitly permitted to pass a pre-existing
     *             MD5Crypt'ed password entry as the salt.  crypt() will strip the salt
     *             chars out properly.
     *
     * @return An OpenBSD/FreeBSD/Linux-compatible md5-hashed password field.
     */
    public static final String crypt(String password, String salt) {
        return MD5Crypt.crypt(password, salt, "$1$");
    }

    /**
     * <p>This method generates an Apache MD5 compatible
     * md5-encoded password hash from a plaintext password and a
     * salt.</p>
     *
     * <p>The resulting string will be in the form '$apr1$&lt;salt&gt;$&lt;hashed mess&gt;</p>
     *
     * @param password Plaintext password
     *
     * @return An Apache-compatible md5-hashed password string.
     */
    public static final String apacheCrypt(String password) {
        StringBuilder salt = new StringBuilder();
        java.util.Random randgen = new java.util.Random();

        /* -- */

        while (salt.length() < 8) {
            int index = (int) (randgen.nextFloat() * SALTCHARS.length());
            salt.append(SALTCHARS.substring(index, index + 1));
        }

        return MD5Crypt.apacheCrypt(password, salt.toString());
    }

    /**
     * <p>This method actually generates an Apache MD5 compatible
     * md5-encoded password hash from a plaintext password and a
     * salt.</p>
     *
     * <p>The resulting string will be in the form '$apr1$&lt;salt&gt;$&lt;hashed mess&gt;</p>
     *
     * @param password Plaintext password
     * @param salt A short string to use to randomize md5.  May start with $apr1$, which
     *             will be ignored.  It is explicitly permitted to pass a pre-existing
     *             MD5Crypt'ed password entry as the salt.  crypt() will strip the salt
     *             chars out properly.
     *
     * @return An Apache-compatible md5-hashed password string.
     */
    public static final String apacheCrypt(String password, String salt) {
        return MD5Crypt.crypt(password, salt, "$apr1$");
    }

    /**
     * <p>This method actually generates md5-encoded password hash from
     * a plaintext password, a salt, and a magic string.</p>
     *
     * <p>There are two magic strings that make sense to use here.. '$1$' is the
     * magic string used by the FreeBSD/Linux/OpenBSD MD5Crypt algorithm, and
     * '$apr1$' is the magic string used by the Apache MD5Crypt algorithm.</p>
     *
     * <p>The resulting string will be in the form '&lt;magic&gt;&lt;salt&gt;$&lt;hashed mess&gt;</p>
     *
     * @param password Plaintext password
     * @param salt A short string to use to randomize md5.  May start
     * with the magic string, which will be ignored.  It is explicitly
     * permitted to pass a pre-existing MD5Crypt'ed password entry as
     * the salt.  crypt() will strip the salt chars out properly.
     * @param magic Either "$apr1$" or "$1$", which controls whether we
     * are doing Apache-style or FreeBSD-style md5Crypt.
     *
     * @return An md5-hashed password string.
     */
    public static final String crypt(String password, String salt, String magic) {
        /* This string is magic for this algorithm.  Having it this way,
         * we can get get better later on */

        byte finalState[];
        MessageDigest ctx, ctx1;
        long l;

        /* -- */

        /* Refine the Salt first */

        /* If it starts with the magic string, then skip that */

        if (salt.startsWith(magic)) {
            salt = salt.substring(magic.length());
        }

        /* It stops at the first '$', max 8 chars */

        if (salt.indexOf('$') != -1) {
            salt = salt.substring(0, salt.indexOf('$'));
        }

        if (salt.length() > 8) {
            salt = salt.substring(0, 8);
        }

        ctx = getMD5();

        ctx.update(password.getBytes());    // The password first, since that is what is most unknown
        ctx.update(magic.getBytes());    // Then our magic string
        ctx.update(salt.getBytes());    // Then the raw salt

        /* Then just as many characters of the MD5(pw,salt,pw) */

        ctx1 = getMD5();
        ctx1.update(password.getBytes());
        ctx1.update(salt.getBytes());
        ctx1.update(password.getBytes());
        finalState = ctx1.digest();

        for (int pl = password.length(); pl > 0; pl -= 16) {
            ctx.update(finalState, 0, pl > 16 ? 16 : pl);
        }

        /* the original code claimed that finalState was being cleared
        to keep dangerous bits out of memory, but doing this is also
        required in order to get the right output. */

        clearbits(finalState);

        /* Then something really weird... */

        for (int i = password.length(); i != 0; i >>>= 1) {
            if ((i & 1) != 0) {
                ctx.update(finalState, 0, 1);
            } else {
                ctx.update(password.getBytes(), 0, 1);
            }
        }

        finalState = ctx.digest();

        /*
         * and now, just to make sure things don't run too fast
         * On a 60 Mhz Pentium this takes 34 msec, so you would
         * need 30 seconds to build a 1000 entry dictionary...
         *
         * (The above timings from the C version)
         */

        for (int i = 0; i < 1000; i++) {
            ctx1.reset();

            if ((i & 1) != 0) {
                ctx1.update(password.getBytes());
            } else {
                ctx1.update(finalState, 0, 16);
            }

            if ((i % 3) != 0) {
                ctx1.update(salt.getBytes());
            }

            if ((i % 7) != 0) {
                ctx1.update(password.getBytes());
            }

            if ((i & 1) != 0) {
                ctx1.update(finalState, 0, 16);
            } else {
                ctx1.update(password.getBytes());
            }

            finalState = ctx1.digest();
        }

        /* Now make the output string */

        StringBuilder result = new StringBuilder();

        result.append(magic);
        result.append(salt);
        result.append("$");

        l = (bytes2u(finalState[0]) << 16) | (bytes2u(finalState[6]) << 8) | bytes2u(finalState[12]);
        result.append(to64(l, 4));

        l = (bytes2u(finalState[1]) << 16) | (bytes2u(finalState[7]) << 8) | bytes2u(finalState[13]);
        result.append(to64(l, 4));

        l = (bytes2u(finalState[2]) << 16) | (bytes2u(finalState[8]) << 8) | bytes2u(finalState[14]);
        result.append(to64(l, 4));

        l = (bytes2u(finalState[3]) << 16) | (bytes2u(finalState[9]) << 8) | bytes2u(finalState[15]);
        result.append(to64(l, 4));

        l = (bytes2u(finalState[4]) << 16) | (bytes2u(finalState[10]) << 8) | bytes2u(finalState[5]);
        result.append(to64(l, 4));

        l = bytes2u(finalState[11]);
        result.append(to64(l, 2));

        /* Don't leave anything around in vm they could use. */
        clearbits(finalState);

        return result.toString();
    }

    /**
     * This method tests a plaintext password against a md5Crypt'ed hash and returns
     * true if the password matches the hash.
     *
     * This method will work properly whether the hashtext was crypted
     * using the default FreeBSD md5Crypt algorithm or the Apache
     * md5Crypt variant.
     *
     * @param plaintextPass The plaintext password text to test.
     * @param md5CryptText The Apache or FreeBSD-md5Crypted hash used to authenticate the plaintextPass.
     */
    public static final boolean verifyPassword(String plaintextPass, String md5CryptText) {
        if (md5CryptText.startsWith("$1$")) {
            return md5CryptText.equals(MD5Crypt.crypt(plaintextPass, md5CryptText));
        } else if (md5CryptText.startsWith("$apr1$")) {
            return md5CryptText.equals(MD5Crypt.apacheCrypt(plaintextPass, md5CryptText));
        } else {
            throw new RuntimeException("Bad md5CryptText");
        }
    }
}
PK�����*†9D—5Kùõ��õ��Ù���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/app/controllers/AuthFileSecurity.java/**
 * AuthFileSecurity
 * 31.07.2012
 * @author Philipp Haussleiter
 *
 */
package controllers;

import java.util.Map;
import play.modules.fileauth.FileAuth;

/**
 * This Class provides basice Security Functions for the Play! Security Plugin.
 * @author Philipp Haußleiter
 * <p>
 * Usage:
 * @With(Secure.class)
 * public class Application extends Controller {
 * ...
 * }
 *
 * </p>
 */
public class AuthFileSecurity extends Secure.Security {

    /**
     * Authentify an user against the given AuthFile.
     * @param username the given username.
     * @param password the given password.
     * @return true if username and password matches, otherwise false.
     */
    public static boolean authentify(String username, String password) {
        Map<String,String> users = FileAuth.getUsers();
        String userPassword = users.get(username.toLowerCase());
        return userPassword.equals(password);
    }

    /**
     * Checks if the current user (that is loged in) has the profile (e.g. is in the group).
     * @param profile
     * @return true if the current user has the profile, otherwise false.
     */
    public static boolean check(String profile) {
        String user = connected();
        return FileAuth.contains(profile, user);
    }
}
PK�����*†9D&ÿ‰è¤��¤��Õ���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/documentation/manual/home.textileh1. {module name}

p(note). Write your module documentation in this file, possibly linking to other Textile files, and delete these notes when you are finished.

p(note). Start with a clear statement of what the module is and what it is for. Link to any third-party libraries that the module is based on.

p(note). Briefly describe why you might want to use this module in a Play application.

h2. Sample application

p(note). Your module should contain a sample app in the @sample@ directory that demonstrates the module. Describe how to run the demo here.

h2. Getting started

p(note). Describe any installation that is required, beyond adding and resolving the module dependency.

h2. Configuration

p(note). List any configuration options that the module uses, with an @h3.@ heading for each one.

h2. Usage

p(note). Explain how to use the module, and describe any routes, controllers, models or views that the module provides.

h2. Tags

p(note). List any tags the module provides, with an @h3.@ heading for each one. Include the tags’ arguments.

h2. Commands

p(note). List any commands the module provides, with an @h3.@ heading for each one. Include the commands’ options.
PK�����*†9D´šü¯��¯��î���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/public/images/favicon.png‰PNG

���
IHDR���������óÿa���tEXtSoftware�Adobe ImageReadyqÉe<��QIDATxÚ”SËNA=U]5]Ý=ï1agŒhf£+0ˆ‰Á †n\¹gãÒ¿p#ì4¢?`t¯	WFƒH$H$dŒ™Gw•·›o÷M×+çœ{O53Æàú�Œ^sÑIšéJáü½Bnà18­ÃC_­fÛG©8ˆk#7€h—BÈ,KÀMª±SçrÕMwav©^›i4v<‹	ü+"�ÎmJÛQea+¤Žed×§–¼zYßü2(¬cŒÐFp¡ìÓ`
Aƒ›ÈBåý¡5ÿÍܧ·™±¨"«€¤úeV(§æÐ<±!D‰.7³é®Ì.®×fÚ~Ë#šÃ�¶HUÊÍ84ÞÍ@<x™XWcê}}þÅ÷­oUÉåáHÛ)	åqMìûεVˆ©4…øðòÎÛ¹•úÒ-?ð#�±«@€ÕÇe<êGhíÁ—8ÙšêéÛO¶?Ó^æ]`4Ùh».<b$ߏè¶6­vùD/&‡oΧ¼´¿§€qeK?îE—å/fzš~Žt1^šX½\{äż´µ¶Ð·”wÒ„è}~_ûHû`~`ûzÿ•gÅô‰û´üúO‚ÀN¯T‰È1”²OöàjåRm¨xvšŽ=¥Ü9XZÀ¥ªXvœic£Au†r'Ê£«ãå’ë<¤#Ÿ;]å@:‰J`)úQ8ªÝ}[“ý£Ï‹™®Cr;ð˜“ëNå1Y©
Êå¡çk_7.üj5ïÒ¸Îÿ'0�Û¤û»ý
����IEND®B`‚PK�����*†9Dä |;f�f�û���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/public/javascripts/jquery-1.6.4.min.js/*! jQuery v1.6.4 http://jquery.com/ | http://jquery.org/license */
(function(a,b){function cu(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cr(a){if(!cg[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ch||(ch=c.createElement("iframe"),ch.frameBorder=ch.width=ch.height=0),b.appendChild(ch);if(!ci||!ch.createElement)ci=(ch.contentWindow||ch.contentDocument).document,ci.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),ci.close();d=ci.createElement(a),ci.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ch)}cg[a]=e}return cg[a]}function cq(a,b){var c={};f.each(cm.concat.apply([],cm.slice(0,b)),function(){c[this]=a});return c}function cp(){cn=b}function co(){setTimeout(cp,0);return cn=f.now()}function cf(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ce(){try{return new a.XMLHttpRequest}catch(b){}}function b$(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function bZ(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function bY(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bA.test(a)?d(a,e):bY(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)bY(a+"["+e+"]",b[e],c,d);else d(a,b)}function bX(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function bW(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bP,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=bW(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=bW(a,c,d,e,"*",g));return l}function bV(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bL),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function by(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bt:bu;if(d>0){c!=="border"&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0});return d+"px"}d=bv(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+this))||0)});return d+"px"}function bl(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bd,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bk(a){f.nodeName(a,"input")?bj(a):"getElementsByTagName"in a&&f.grep(a.getElementsByTagName("input"),bj)}function bj(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bi(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function bh(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bg(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;e=e[c]=f.extend({},d);if(g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;i<j;i++)f.event.add(b,h+(g[h][i].namespace?".":"")+g[h][i].namespace,g[h][i],g[h][i].data)}}}}function bf(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function V(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(Q.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function U(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function M(a,b){return(a&&a!=="*"?a+".":"")+b.replace(y,"`").replace(z,"&")}function L(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;i<s.length;i++)g=s[i],g.origType.replace(w,"")===a.type?q.push(g.selector):s.splice(i--,1);e=f(a.target).closest(q,a.currentTarget);for(j=0,k=e.length;j<k;j++){m=e[j];for(i=0;i<s.length;i++){g=s[i];if(m.selector===g.selector&&(!n||n.test(g.namespace))&&!m.elem.disabled){h=m.elem,d=null;if(g.preType==="mouseenter"||g.preType==="mouseleave")a.type=g.preType,d=f(a.relatedTarget).closest(g.selector)[0],d&&f.contains(h,d)&&(d=h);(!d||d!==h)&&p.push({elem:h,handleObj:g,level:m.level})}}}for(j=0,k=p.length;j<k;j++){e=p[j];if(c&&e.level>c)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function J(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function D(){return!0}function C(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function K(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(K,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=/-([a-z]|[0-9])/ig,x=/^-ms-/,y=function(a,b){return(b+"").toUpperCase()},z=d.userAgent,A,B,C,D=Object.prototype.toString,E=Object.prototype.hasOwnProperty,F=Array.prototype.push,G=Array.prototype.slice,H=String.prototype.trim,I=Array.prototype.indexOf,J={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6.4",length:0,size:function(){return this.length},toArray:function(){return G.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?F.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),B.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(G.apply(this,arguments),"slice",G.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:F,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;B.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!B){B=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",C,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",C),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&K()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):J[D.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!E.call(a,"constructor")&&!E.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||E.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(x,"ms-").replace(w,y)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:H?function(a){return a==null?"":H.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?F.call(c,a):e.merge(c,a)}return c},inArray:function(a,b){if(!b)return-1;if(I)return I.call(b,a);for(var c=0,d=b.length;c<d;c++)if(b[c]===a)return c;return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=G.call(arguments,2),g=function(){return a.apply(c,f.concat(G.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=s.exec(a)||t.exec(a)||u.exec(a)||a.indexOf("compatible")<0&&v.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){J["[object "+b+"]"]=b.toLowerCase()}),A=e.uaMatch(z),A.browser&&(e.browser[A.browser]=!0,e.browser.version=A.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?C=function(){c.removeEventListener("DOMContentLoaded",C,!1),e.ready()}:c.attachEvent&&(C=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",C),e.ready())});return e}(),g="done fail isResolved isRejected promise then always pipe".split(" "),h=[].slice;f.extend({_Deferred:function(){var a=[],b,c,d,e={done:function(){if(!d){var c=arguments,g,h,i,j,k;b&&(k=b,b=0);for(g=0,h=c.length;g<h;g++)i=c[g],j=f.type(i),j==="array"?e.done.apply(e,i):j==="function"&&a.push(i);k&&e.resolveWith(k[0],k[1])}return this},resolveWith:function(e,f){if(!d&&!b&&!c){f=f||[],c=1;try{while(a[0])a.shift().apply(e,f)}finally{b=[e,f],c=0}}return this},resolve:function(){e.resolveWith(this,arguments);return this},isResolved:function(){return!!c||!!b},cancel:function(){d=1,a=[];return this}};return e},Deferred:function(a){var b=f._Deferred(),c=f._Deferred(),d;f.extend(b,{then:function(a,c){b.done(a).fail(c);return this},always:function(){return b.done.apply(b,arguments).fail.apply(this,arguments)},fail:c.done,rejectWith:c.resolveWith,reject:c.resolve,isRejected:c.isResolved,pipe:function(a,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[c,"reject"]},function(a,c){var e=c[0],g=c[1],h;f.isFunction(e)?b[a](function(){h=e.apply(this,arguments),h&&f.isFunction(h.promise)?h.promise().then(d.resolve,d.reject):d[g+"With"](this===b?d:this,[h])}):b[a](d[g])})}).promise()},promise:function(a){if(a==null){if(d)return d;d=a={}}var c=g.length;while(c--)a[g[c]]=b[g[c]];return a}}),b.done(c.cancel).fail(b.cancel),delete b.cancel,a&&a.call(b,b);return b},when:function(a){function i(a){return function(c){b[a]=arguments.length>1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c<d;c++)b[c]&&f.isFunction(b[c].promise)?b[c].promise().then(i(c),g.reject):--e;e||g.resolveWith(g,b)}else g!==a&&g.resolveWith(g,d?[a]:[]);return g.promise()}}),f.support=function(){var a=c.createElement("div"),b=c.documentElement,d,e,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;a.setAttribute("className","t"),a.innerHTML="   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55$/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue=i.value==="t",i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.firstChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},m&&f.extend(p,{position:"absolute",left:"-1000px",top:"-1000px"});for(t in p)o.style[t]=p[t];o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,k.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="<div style='width:4px;'></div>",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",q=a.getElementsByTagName("td"),u=q[0].offsetHeight===0,q[0].style.display="",q[1].style.display="none",k.reliableHiddenOffsets=u&&q[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",a.appendChild(j),k.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0),o.innerHTML="",n.removeChild(o);if(a.attachEvent)for(t in{submit:1,change:1,focusin:1})s="on"+t,u=s in a,u||(a.setAttribute(s,"return;"),u=typeof a[s]=="function"),k[t+"Bubbles"]=u;o=l=g=h=m=j=a=i=null;return k}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i=f.expando,j=typeof c=="string",k=a.nodeType,l=k?f.cache:a,m=k?a[f.expando]:a[f.expando]&&f.expando;if((!m||e&&m&&l[m]&&!l[m][i])&&j&&d===b)return;m||(k?a[f.expando]=m=++f.uuid:m=f.expando),l[m]||(l[m]={},k||(l[m].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?l[m][i]=f.extend(l[m][i],c):l[m]=f.extend(l[m],c);g=l[m],e&&(g[i]||(g[i]={}),g=g[i]),d!==b&&(g[f.camelCase(c)]=d);if(c==="events"&&!g[c])return g[i]&&g[i].events;j?(h=g[c],h==null&&(h=g[f.camelCase(c)])):h=g;return h}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e=f.expando,g=a.nodeType,h=g?f.cache:a,i=g?a[f.expando]:f.expando;if(!h[i])return;if(b){d=c?h[i][e]:h[i];if(d){d[b]||(b=f.camelCase(b)),delete d[b];if(!l(d))return}}if(c){delete h[i][e];if(!l(h[i]))return}var j=h[i][e];f.support.deleteExpando||!h.setInterval?delete h[i]:h[i]=null,j?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=j):g&&(f.support.deleteExpando?delete a[f.expando]:a.removeAttribute?a.removeAttribute(f.expando):a[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h<i;h++)g=e[h].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),k(this[0],g,d[g]))}}return d}if(typeof a=="object")return this.each(function(){f.data(this,a)});var j=a.split(".");j[1]=j[1]?"."+j[1]:"";if(c===b){d=this.triggerHandler("getData"+j[1]+"!",[j[0]]),d===b&&this.length&&(d=f.data(this[0],a),d=k(this[0],a,d));return d===b&&j[1]?this.data(j[0]):d}return this.each(function(){var b=f(this),d=[j[0],c];b.triggerHandler("setData"+j[1]+"!",d),f.data(this,a,c),b.triggerHandler("changeData"+j[1]+"!",d)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,c){a&&(c=(c||"fx")+"mark",f.data(a,c,(f.data(a,c,b,!0)||0)+1,!0))},_unmark:function(a,c,d){a!==!0&&(d=c,c=a,a=!1);if(c){d=d||"fx";var e=d+"mark",g=a?0:(f.data(c,e,b,!0)||1)-1;g?f.data(c,e,g,!0):(f.removeData(c,e,!0),m(c,d,"mark"))}},queue:function(a,c,d){if(a){c=(c||"fx")+"queue";var e=f.data(a,c,b,!0);d&&(!e||f.isArray(d)?e=f.data(a,c,f.makeArray(d),!0):e.push(d));return e||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e;d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),d.call(a,function(){f.dequeue(a,b)})),c.length||(f.removeData(a,b+"queue",!0),m(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(){var c=this;setTimeout(function(){f.dequeue(c,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f._Deferred(),!0))h++,l.done(m);m();return d.promise()}});var n=/[\n\t\r]/g,o=/\s+/,p=/\r/g,q=/^(?:button|input)$/i,r=/^(?:button|input|object|select|textarea)$/i,s=/^a(?:rea)?$/i,t=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,u,v;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(o);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(o);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(n," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(o);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ";for(var c=0,d=this.length;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(n," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;d=e.value;return typeof d=="string"?d.replace(p,""):d==null?"":d}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c=a.selectedIndex,d=[],e=a.options,g=a.type==="select-one";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h<i;h++){var j=e[h];if(j.selected&&(f.support.optDisabled?!j.disabled:j.getAttribute("disabled")===null)&&(!j.parentNode.disabled||!f.nodeName(j.parentNode,"optgroup"))){b=f(j).val();if(g)return b;d.push(b)}}if(g&&!d.length&&e.length)return f(e[c]).val();return d},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);j&&(c=f.attrFix[c]||c,i=f.attrHooks[c],i||(t.test(c)?i=v:u&&(i=u)));if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j&&(h=i.get(a,c))!==null)return h;h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.attr(a,b,""),a.removeAttribute(b),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(u&&f.nodeName(a,"button"))return u.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(u&&f.nodeName(a,"button"))return u.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);i&&(c=f.propFix[c]||c,h=f.propHooks[c]);return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==null?g:a[c]},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabIndex=f.propHooks.tabIndex,v={get:function(a,c){var d;return f.prop(a,c)===!0||(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},f.support.getSetAttribute||(u=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==""?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var w=/\.(.*)$/,x=/^(?:textarea|input|select)$/i,y=/\./g,z=/ /g,A=/[^\w\s.|`]/g,B=function(a){return a.replace(A,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=C;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=C);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),B).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j<p.length;j++){q=p[j];if(l||n.test(q.namespace))f.event.remove(a,r,q.handler,j),p.splice(j--,1)}continue}o=f.event.special[h]||{};for(j=e||0;j<p.length;j++){q=p[j];if(d.guid===q.guid){if(l||n.test(q.namespace))e==null&&p.splice(j--,1),o.remove&&o.remove.call(a,q);if(e!=null)break}}if(p.length===0||e!=null&&p.length===1)(!o.teardown||o.teardown.call(a,m)===!1)&&f.removeEvent(a,h,s.handle),g=null,delete 
t[h]}if(f.isEmptyObject(t)){var u=s.handle;u&&(u.elem=null),delete s.events,delete s.handle,f.isEmptyObject(s)&&f.removeData(a,b,!0)}}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){var h=c.type||c,i=[],j;h.indexOf("!")>=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d!=null?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h<i;h++){var j=d[h];if(e||c.namespace_re.test(j.namespace)){c.handler=j.handler,c.data=j.data,c.handleObj=j;var k=j.handler.apply(this,g);k!==b&&(c.result=k,k===!1&&(c.preventDefault(),c.stopPropagation()));if(c.isImmediatePropagationStopped())break}}return c.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(a){if(a[f.expando])return a;var d=a;a=f.Event(d);for(var e=this.props.length,g;e;)g=this.props[--e],a[g]=d[g];a.target||(a.target=a.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),!a.relatedTarget&&a.fromElement&&(a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement);if(a.pageX==null&&a.clientX!=null){var h=a.target.ownerDocument||c,i=h.documentElement,j=h.body;a.pageX=a.clientX+(i&&i.scrollLeft||j&&j.scrollLeft||0)-(i&&i.clientLeft||j&&j.clientLeft||0),a.pageY=a.clientY+(i&&i.scrollTop||j&&j.scrollTop||0)-(i&&i.clientTop||j&&j.clientTop||0)}a.which==null&&(a.charCode!=null||a.keyCode!=null)&&(a.which=a.charCode!=null?a.charCode:a.keyCode),!a.metaKey&&a.ctrlKey&&(a.metaKey=a.ctrlKey),!a.which&&a.button!==b&&(a.which=a.button&1?1:a.button&2?3:a.button&4?2:0);return a},guid:1e8,proxy:f.proxy,special:{ready:{setup:f.bindReady,teardown:f.noop},live:{add:function(a){f.event.add(this,M(a.origType,a.selector),f.extend({},a,{handler:L,guid:a.handler.guid}))},remove:function(a){f.event.remove(this,M(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}}},f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!this.preventDefault)return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?D:C):this.type=a,b&&f.extend(this,b),this.timeStamp=f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=D;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=D;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=D,this.stopPropagation()},isDefaultPrevented:C,isPropagationStopped:C,isImmediatePropagationStopped:C};var E=function(a){var b=a.relatedTarget,c=!1,d=a.type;a.type=a.data,b!==this&&(b&&(c=f.contains(this,b)),c||(f.event.handle.apply(this,arguments),a.type=d))},F=function(a){a.type=a.data,f.event.handle.apply(this,arguments)};f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={setup:function(c){f.event.add(this,b,c&&c.selector?F:E,a)},teardown:function(a){f.event.remove(this,b,a&&a.selector?F:E)}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(a,b){if(!f.nodeName(this,"form"))f.event.add(this,"click.specialSubmit",function(a){var b=a.target,c=f.nodeName(b,"input")||f.nodeName(b,"button")?b.type:"";(c==="submit"||c==="image")&&f(b).closest("form").length&&J("submit",this,arguments)}),f.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,c=f.nodeName(b,"input")||f.nodeName(b,"button")?b.type:"";(c==="text"||c==="password")&&f(b).closest("form").length&&a.keyCode===13&&J("submit",this,arguments)});else return!1},teardown:function(a){f.event.remove(this,".specialSubmit")}});if(!f.support.changeBubbles){var G,H=function(a){var b=f.nodeName(a,"input")?a.type:"",c=a.value;b==="radio"||b==="checkbox"?c=a.checked:b==="select-multiple"?c=a.selectedIndex>-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},I=function(c){var d=c.target,e,g;if(!!x.test(d.nodeName)&&!d.readOnly){e=f._data(d,"_change_data"),g=H(d),(c.type!=="focusout"||d.type!=="radio")&&f._data(d,"_change_data",g);if(e===b||g===e)return;if(e!=null||g)c.type="change",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:I,beforedeactivate:I,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&I.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&I.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",H(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in G)f.event.add(this,c+".specialChange",G[c]);return x.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return x.test(this.nodeName)}},G=f.event.special.change.filters,G.focus=G.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i<j;i++)f.event.add(this[i],a,g,d);return this}}),f.fn.extend({unbind:function(a,b){if(typeof a=="object"&&!a.preventDefault)for(var c in a)this.unbind(c,a[c]);else for(var d=0,e=this.length;d<e;d++)f.event.remove(this[d],a,b);return this},delegate:function(a,b,c,d){return this.live(b,c,d,a)},undelegate:function(a,b,c){return arguments.length===0?this.unbind("live"):this.die(b,null,c,a)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f.data(this,"lastToggle"+a.guid)||0)%d;f.data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var K={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};f.each(["live","die"],function(a,c){f.fn[c]=function(a,d,e,g){var h,i=0,j,k,l,m=g||this.selector,n=g?this:f(this.context);if(typeof a=="object"&&!a.preventDefault){for(var o in a)n[c](o,d,a[o],m);return this}if(c==="die"&&!a&&g&&g.charAt(0)==="."){n.unbind(g);return this}if(d===!1||f.isFunction(d))e=d||C,d=b;a=(a||"").split(" ");while((h=a[i++])!=null){j=w.exec(h),k="",j&&(k=j[0],h=h.replace(w,""));if(h==="hover"){a.push("mouseenter"+k,"mouseleave"+k);continue}l=h,K[h]?(a.push(K[h]+k),h=h+k):h=(K[h]||h)+k;if(c==="live")for(var p=0,q=n.length;p<q;p++)f.event.add(n[p],"live."+M(h,m),{data:d,selector:m,handler:e,origType:h,origHandler:e,preType:l});else n.unbind("live."+M(h,m),e)}return this}}),f.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".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}if(i.nodeType===1){f||(i.sizcache=c,i.sizset=g);if(typeof b!="string"){if(i===b){j=!0;break}}else if(k.filter(b,[i]).length>0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}i.nodeType===1&&!f&&(i.sizcache=c,i.sizset=g);if(i.nodeName.toLowerCase()===b){j=i;break}i=i[a]}d[g]=j}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},k.matches=function(a,b){return k(a,null,null,b)},k.matchesSelector=function(a,b){return k(b,null,null,[a]).length>0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e<f;e++){var g,h=l.order[e];if(g=l.leftMatch[h].exec(a)){var j=g[1];g.splice(1,1);if(j.substr(j.length-1)!=="\\"){g[1]=(g[1]||"").replace(i,""),d=l.find[h](g,b,c);if(d!=null){a=a.replace(l.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},k.filter=function(a,c,d,e){var f,g,h=a,i=[],j=c,m=c&&c[0]&&k.isXML(c[0]);while(a&&c.length){for(var n in l.filter)if((f=l.leftMatch[n].exec(a))!=null&&f[2]){var o,p,q=l.filter[n],r=f[1];g=!1,f.splice(1,1);if(r.substr(r.length-1)==="\\")continue;j===i&&(i=[]);if(l.preFilter[n]){f=l.preFilter[n](f,j,d,i,e,m);if(!f)g=o=!0;else if(f===!0)continue}if(f)for(var s=0;(p=j[s])!=null;s++)if(p){o=q(p,f,s,j);var t=e^!!o;d&&o!=null?t?g=!0:j[s]=!1:t&&(i.push(p),g=!0)}if(o!==b){d||(j=i),a=a.replace(l.match[n],"");if(!g)return[];break}}if(a===h)if(g==null)k.error(a);else break;h=a}return j},k.error=function(a){throw"Syntax error, unrecognized expression: "+a};var l=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!j.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&k.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&k.filter(b,a,!0)}},"":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("parentNode",b,f,a,e,c)},"~":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("previousSibling",b,f,a,e,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(i,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}k.error(e)},CHILD:function(a,b){var c=b[1],d=a;switch(c){case"only":case"first":while(d=d.previousSibling)if(d.nodeType===1)return!1;if(c==="first")return!0;d=a;case"last":while(d=d.nextSibling)if(d.nodeType===1)return!1;return!0;case"nth":var e=b[2],f=b[3];if(e===1&&f===0)return!0;var g=b[0],h=a.parentNode;if(h&&(h.sizcache!==g||!a.nodeIndex)){var i=0;for(d=h.firstChild;d;d=d.nextSibling)d.nodeType===1&&(d.nodeIndex=++i);h.sizcache=g}var j=a.nodeIndex-f;return e===0?j===0:j%e===0&&j/e>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c<f;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var r,s;c.documentElement.compareDocumentPosition?r=function(a,b){if(a===b){g=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(r=function(a,b){if(a===b){g=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],h=a.parentNode,i=b.parentNode,j=h;if(h===i)return s(a,b);if(!h)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return s(e[k],f[k]);return k===c?s(a,f[k],-1):s(e[k],b,1)},s=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),k.getText=function(a){var b="",c;for(var d=0;a[d];d++)c=a[d],c.nodeType===3||c.nodeType===4?b+=c.nodeValue:c.nodeType!==8&&(b+=k.getText(c.childNodes));return b},function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g<h;g++)k(a,f[g],d);return k.filter(e,d)};f.find=k,f.expr=k.selectors,f.expr[":"]=f.expr.filters,f.unique=k.uniqueSort,f.text=k.getText,f.isXMLDoc=k.isXML,f.contains=k.contains}();var N=/Until$/,O=/^(?:parents|prevUntil|prevAll)/,P=/,/,Q=/^.[^:#\[\.,]*$/,R=Array.prototype.slice,S=f.expr.match.POS,T={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(V(this,a,!1),"not",a)},filter:function(a){return this.pushStack(V(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d<e;d++)i=a[d],j[i]||(j[i]=S.test(i)?f(i,b||this.context):i);while(g&&g.ownerDocument&&g!==b){for(i in j)h=j[i],(h.jquery?h.index(g)>-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=S.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(l?l.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(U(c[0])||U(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=R.call(arguments);N.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!T[a]?f.unique(e):e,(this.length>1||P.test(d))&&O.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|object|embed|option|style)/i,bb=/checked\s*(?:[^=]|=\s*.checked.)/i,bc=/\/(java|ecma)script/i,bd=/^\s*<!(?:\[CDATA\[|\-\-)/,be={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};be.optgroup=be.option,be.tbody=be.tfoot=be.colgroup=be.caption=be.thead,be.th=be.td,f.support.htmlSerialize||(be._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!be[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bb.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bf(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bl)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i;b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof a[0]=="string"&&a[0].length<512&&i===c&&a[0].charAt(0)==="<"&&!ba.test(a[0])&&(f.support.checkClone||!bb.test(a[0]))&&(g=!0,h=f.fragments[a[0]],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean
(a,i,e,d)),g&&(f.fragments[a[0]]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bh(a,d),e=bi(a),g=bi(d);for(h=0;e[h];++h)g[h]&&bh(e[h],g[h])}if(b){bg(a,d);if(c){e=bi(a),g=bi(d);for(h=0;e[h];++h)bg(e[h],g[h])}}e=g=null;return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=be[l]||be._default,n=m[0],o=b.createElement("div");o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bk(k[i]);else bk(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||bc.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.expando,g=f.event.special,h=f.support.deleteExpando;for(var i=0,j;(j=a[i])!=null;i++){if(j.nodeName&&f.noData[j.nodeName.toLowerCase()])continue;c=j[f.expando];if(c){b=d[c]&&d[c][e];if(b&&b.events){for(var k in b.events)g[k]?f.event.remove(j,k):f.removeEvent(j,k,b.handle);b.handle&&(b.handle.elem=null)}h?delete j[f.expando]:j.removeAttribute&&j.removeAttribute(f.expando),delete d[c]}}}});var bm=/alpha\([^)]*\)/i,bn=/opacity=([^)]*)/,bo=/([A-Z]|^ms)/g,bp=/^-?\d+(?:px)?$/i,bq=/^-?\d/,br=/^([\-+])=([\-+.\de]+)/,bs={position:"absolute",visibility:"hidden",display:"block"},bt=["Left","Right"],bu=["Top","Bottom"],bv,bw,bx;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bv(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=br.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bv)return bv(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return by(a,b,d);f.swap(a,bs,function(){e=by(a,b,d)});return e}},set:function(a,b){if(!bp.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bn.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bm,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bm.test(g)?g.replace(bm,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bv(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bw=function(a,c){var d,e,g;c=c.replace(bo,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bx=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bp.test(d)&&bq.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bv=bw||bx,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bz=/%20/g,bA=/\[\]$/,bB=/\r?\n/g,bC=/#.*$/,bD=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bE=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bF=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bG=/^(?:GET|HEAD)$/,bH=/^\/\//,bI=/\?/,bJ=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bK=/^(?:select|textarea)/i,bL=/\s+/,bM=/([?&])_=[^&]*/,bN=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bO=f.fn.load,bP={},bQ={},bR,bS,bT=["*/"]+["*"];try{bR=e.href}catch(bU){bR=c.createElement("a"),bR.href="",bR=bR.href}bS=bN.exec(bR.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bO)return bO.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bJ,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bK.test(this.nodeName)||bE.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bB,"\r\n")}}):{name:b.name,value:c.replace(bB,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?bX(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),bX(a,b);return a},ajaxSettings:{url:bR,isLocal:bF.test(bS[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bT},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bV(bP),ajaxTransport:bV(bQ),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?bZ(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=b$(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bD.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bC,"").replace(bH,bS[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bL),d.crossDomain==null&&(r=bN.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bS[1]&&r[2]==bS[2]&&(r[3]||(r[1]==="http:"?80:443))==(bS[3]||(bS[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bW(bP,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bG.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bI.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bM,"$1_="+x);d.url=y+(y===d.url?(bI.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bT+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bW(bQ,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){s<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)bY(g,a[g],c,e);return d.join("&").replace(bz,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var b_=f.now(),ca=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+b_++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ca.test(b.url)||e&&ca.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ca,l),b.url===j&&(e&&(k=k.replace(ca,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cb=a.ActiveXObject?function(){for(var a in cd)cd[a](0,1)}:!1,cc=0,cd;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ce()||cf()}:ce,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cb&&delete cd[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cc,cb&&(cd||(cd={},f(a).unload(cb)),cd[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cg={},ch,ci,cj=/^(?:toggle|show|hide)$/,ck=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cl,cm=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cn;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cq("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cr(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cq("hide",3),a,b,c);for(var d=0,e=this.length;d<e;d++)if(this[d].style){var g=f.css(this[d],"display");g!=="none"&&!f._data(this[d],"olddisplay")&&f._data(this[d],"olddisplay",g)}for(d=0;d<e;d++)this[d].style&&(this[d].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cq("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return this[e.queue===!1?"each":"queue"](function(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(f.support.inlineBlockNeedsLayout?(j=cr(this.nodeName),j==="inline"?this.style.display="inline-block":(this.style.display="inline",this.style.zoom=1)):this.style.display="inline-block"))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)k=new f.fx(this,b,i),h=a[i],cj.test(h)?k[h==="toggle"?d?"show":"hide":h]():(l=ck.exec(h),m=k.cur(),l?(n=parseFloat(l[2]),o=l[3]||(f.cssNumber[i]?"":"px"),o!=="px"&&(f.style(this,i,(n||1)+o),m=(n||1)/k.cur()*m,f.style(this,i,m+o)),l[1]&&(n=(l[1]==="-="?-1:1)*n+m),k.custom(m,n,o)):k.custom(m,h,""));return!0})},stop:function(a,b){a&&this.queue([]),this.each(function(){var a=f.timers,c=a.length;b||f._unmark(!0,this);while(c--)a[c].elem===this&&(b&&a[c](!0),a.splice(c,1))}),b||this.dequeue();return this}}),f.each({slideDown:cq("show",1),slideUp:cq("hide",1),slideToggle:cq("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default,d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue!==!1?f.dequeue(this):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,b,c){function g(a){return d.step(a)}var d=this,e=f.fx;this.startTime=cn||co(),this.start=a,this.end=b,this.unit=c||this.unit||(f.cssNumber[this.prop]?"":"px"),this.now=this.start,this.pos=this.state=0,g.elem=this.elem,g()&&f.timers.push(g)&&!cl&&(cl=setInterval(e.tick,e.interval))},show:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.show=!0,this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b=cn||co(),c=!0,d=this.elem,e=this.options,g,h;if(a||b>=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){for(var a=f.timers,b=0;b<a.length;++b)a[b]()||a.splice(b--,1);a.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cl),cl=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit:a.elem[a.prop]=a.now}}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cs=/^t(?:able|d|h)$/i,ct=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cu(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);f.offset.initialize();var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.offset.supportsFixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.offset.doesNotAddBorder&&(!f.offset.doesAddBorderForTableAndCells||!cs.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.offset.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.offset.supportsFixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={initialize:function(){var a=c.body,b=c.createElement("div"),d,e,g,h,i=parseFloat(f.css(a,"marginTop"))||0,j="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=ct.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!ct.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cu(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cu(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a&&a.style?parseFloat(f.css(a,d,"padding")):null},f.fn["outer"+c]=function(a){var b=this[0];return b&&b.style?parseFloat(f.css(b,d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNaN(j)?i:j}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window);PK�����*†9D������������ð���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/public/stylesheets/main.cssPK�����*†9D_5¢<���<���â���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/htgroupsroot: root apacheRoot
users: root apacheRoot user apacheUserPK�����*†9D(ÉÆ9����í���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/EncryptionTest.java
import org.junit.Test;
import play.Logger;
import play.modules.fileauth.utils.MD5Crypt;
import play.test.UnitTest;

/**
 * EncryptionTest
 * 31.07.2012
 * @author Philipp Haussleiter
 *
 */
public class EncryptionTest extends UnitTest {

    @Test
    public void testApacheCrypt() {
        Logger.info("testing APACHE_CRYPT");
        String clear = "pw_" + System.currentTimeMillis();
        String pass;
        String salt = "abcd1234";
        pass = MD5Crypt.apacheCrypt(clear);
        Logger.info(clear + " got me " + pass);
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
        pass = MD5Crypt.apacheCrypt(clear, salt);
        Logger.info(clear + " & salt " + salt + " got me " + pass);
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
    }

    @Test
    public void testCrypt() {
        Logger.info("testing CRYPT");
        String clear = "pw_" + System.currentTimeMillis();
        String pass;
        String salt = "abcd1234";
        pass = MD5Crypt.crypt(clear);
        Logger.info(clear + " got me " + pass);
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
        pass = MD5Crypt.crypt(clear, salt);
        Logger.info(clear + " & salt " + salt + " got me " + pass);
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
    }
}
PK�����*†9D*˜,-I��I��î���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/ApacheUsersTest.java
import java.util.HashMap;
import java.util.Map;
import org.junit.BeforeClass;
import org.junit.Test;
import play.Play;
import play.cache.Cache;
import play.modules.fileauth.FileAuth;
import play.modules.fileauth.utils.MD5Crypt;
import play.test.UnitTest;

/**
 * ApacheUsersTest
 * 03.08.2012
 * @author Philipp Haussleiter
 *
 */
public class ApacheUsersTest extends UnitTest {

    @BeforeClass
    public static void setup() {
        Play.configuration.setProperty("authfile.users.path", Play.applicationPath + "/test/htusers");
        Play.configuration.setProperty("authfile.users.delimeter", ":");
        Cache.safeDelete(FileAuth.AUTH_FILE_USERS_CACHE_KEY);
        FileAuth.scanUsers();
    }

    @Test
    public void testUsersRead() {
        Map<String, String> users = Cache.get(FileAuth.AUTH_FILE_USERS_CACHE_KEY, HashMap.class);
        assertNotNull(users);
    }

    @Test
    public void testUsersValidate() {
        String clear = "user";
        String pass = MD5Crypt.crypt("user");
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
    }

    @Test
    public void testValidatePassword() {
        String pass = "user";
        String user = "user";
        assertTrue(FileAuth.validate(user, pass));
        user = "apacheUser";
        assertTrue(FileAuth.validate(user, pass));
        user = "user";
        pass = "user123";
        assertFalse(FileAuth.validate(user, pass));
    }

    @Test
    public void testValidateNotExistingUser() {
        String pass = "user123";
        String user = "user123";
        assertFalse(FileAuth.validate(user, pass));
    }
}
PK�����*†9DÄžŒÒù��ù��î���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/GroupGroupsTest.java
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.junit.BeforeClass;
import org.junit.Test;
import play.Play;
import play.cache.Cache;
import play.modules.fileauth.FileAuth;
import play.test.UnitTest;

/**
 * GroupGroupsTest
 * 04.08.2012
 * @author Philipp Haussleiter
 *
 */
public class GroupGroupsTest extends UnitTest {

    @BeforeClass
    public static void setup() {
        Play.configuration.setProperty("authfile.groups.path", Play.applicationPath + "/test/group");
        Play.configuration.setProperty("authfile.users.delimeter", ":");
        Play.configuration.setProperty("authfile.groups.delimeter", ",");
        Cache.safeDelete(FileAuth.AUTH_FILE_GROUPS_CACHE_KEY);
    }

    @Test
    public void testUsersRead() {
        FileAuth.scanGroups();
        Map<String, Set<String>> groups = Cache.get(FileAuth.AUTH_FILE_GROUPS_CACHE_KEY, HashMap.class);
        assertNotNull(groups);
    }

    @Test
    public void testGroupContainsUser() {
        String user = "user";
        String group = "users";
        assertTrue(FileAuth.contains(group, user));
        user = "root";
        assertTrue(FileAuth.contains(group, user));
    }

    @Test
    public void testGroupNotContainsUser() {
        String user = "user";
        String group = "root";
        assertFalse(FileAuth.contains(group, user));
    }

    public void testGroupNotExists() {
        String user = "user";
        String group = "user";
        assertFalse(FileAuth.contains(group, user));
    }
}PK�����*†9D?5'³g��g��î���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/ShadowUsersTest.java
import java.util.HashMap;
import java.util.Map;
import org.junit.BeforeClass;
import org.junit.Test;
import play.Logger;
import play.Play;
import play.cache.Cache;
import play.modules.fileauth.FileAuth;
import play.modules.fileauth.utils.MD5Crypt;
import play.test.UnitTest;


/**
 * ShadowUsersTest
 * 04.08.2012
 * @author Philipp Haussleiter
 *
 */
public class ShadowUsersTest extends UnitTest {

    @BeforeClass
    public static void setup() {
        Play.configuration.setProperty("authfile.users.path", Play.applicationPath + "/test/shadow");
        Logger.info("file path: "+Play.configuration.getProperty("authfile.users.path"));
        Play.configuration.setProperty("authfile.users.delimeter", ":");
        Cache.safeDelete(FileAuth.AUTH_FILE_USERS_CACHE_KEY);
    }

    @Test
    public void testUsersRead() {
        FileAuth.scanUsers();
        Map<String, String> users = Cache.get(FileAuth.AUTH_FILE_USERS_CACHE_KEY, HashMap.class);
        assertNotNull(users);
    }

    @Test
    public void testUsersValidate() {
        String clear = "user";
        String pass = MD5Crypt.crypt("user");
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
    }

    @Test
    public void testValidatePassword() {
        String pass = "user";
        String user = "user";
        assertTrue(FileAuth.validate(user, pass));
        user = "user";
        pass = "user123";
        assertFalse(FileAuth.validate(user, pass));
    }

    @Test
    public void testValidateNotExistingUser() {
        String pass = "user123";
        String user = "user123";
        assertFalse(FileAuth.validate(user, pass));
    }
}
PK�����*†9DTâÒ%���%���ß���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/grouproot:x:321:root
users:x:123:root,userPK�����*†9Dcé¸���¸���â���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/data.yml# you describe your data using the YAML notation here
# and then load them using Fixtures.load("data.yml")

# User(bob):
#   email: bob@gmail.com
#   password: secret
#   fullname: BobPK�����*†9D<_'²���²���á���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/htusersapacheUser:$apr1$kuwPretH$BPbVoWoDTEFUw.4g1zDKs1
apacheRoot:$apr1$nVmU2aOS$rDZ4.BG3TPT02YBsCVcSG/
root:$1$imw51D2V$aJbVmk2xlEg8q.Y8nh91E.
user:$1$4aMItwK9$PnpH2GeuHDeR2t.jKhQ771
PK�����*†9DÇÀ���À���è���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/BasicTest.javaimport org.junit.*;
import play.test.*;

public class BasicTest extends UnitTest {

    @Test
    public void aVeryImportantThingToTest() {
        assertEquals(2, 1 + 1);
    }

}
PK�����*†9D‰=u���u���à���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/shadowroot:$1$imw51D2V$aJbVmk2xlEg8q.Y8nh91E.:43534:0:435:7:::
user:$1$4aMItwK9$PnpH2GeuHDeR2t.jKhQ771:345345:0:46456:7:::
PK�����*†9D,mˆ÷��÷��ï���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/ApacheGroupsTest.java
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.junit.BeforeClass;
import org.junit.Test;
import play.Logger;
import play.Play;
import play.cache.Cache;
import play.modules.fileauth.FileAuth;
import play.test.UnitTest;

/**
 * ApacheGroupsTest 03.08.2012
 *
 * @author Philipp Haussleiter
 *
 */
public class ApacheGroupsTest extends UnitTest {

    @BeforeClass
    public static void setup() {
        Play.configuration.setProperty("authfile.groups.path", Play.applicationPath + "/test/htgroups");
        Play.configuration.setProperty("authfile.users.path", Play.applicationPath + "/test/htusers");
        Play.configuration.setProperty("authfile.users.delimeter", ":");
        Play.configuration.setProperty("authfile.groups.delimeter", " ");
        Cache.safeDelete(FileAuth.AUTH_FILE_GROUPS_CACHE_KEY);
        Cache.safeDelete(FileAuth.AUTH_FILE_USERS_CACHE_KEY);
        FileAuth.scanGroups();
        FileAuth.scanUsers();
    }

    @Test
    public void testGroupsRead() {
        Logger.info("testGroupsRead");
        FileAuth.scanGroups();
        Map<String, Set<String>> groups = Cache.get(FileAuth.AUTH_FILE_GROUPS_CACHE_KEY, HashMap.class);
        assertNotNull(groups);
        int groupSize = groups.size();
        assertTrue(String.format("but was %d ", groupSize), groupSize > 0);
    }

    @Test
    public void testGroupContainsUser() {
        FileAuth.scanGroups();
        FileAuth.scanUsers();
        String user = "user";
        String group = "users";
        assertTrue(String.format("u: %s, g: %s", user, group), FileAuth.contains(group, user));
        user = "root";
        assertTrue(String.format("u: %s, g: %s", user, group), FileAuth.contains(group, user));
    }

    @Test
    public void testGroupNotContainsUser() {
        FileAuth.scanGroups();
        FileAuth.scanUsers();
        String user = "user";
        String group = "root";
        assertFalse(String.format("u: %s, g: %s", user, group), FileAuth.contains(group, user));
    }

    public void testGroupNotExists() {
        FileAuth.scanGroups();
        FileAuth.scanUsers();
        String user = "user";
        String group = "user";
        assertFalse(String.format("u: %s, g: %s", user, group), FileAuth.contains(group, user));
    }
}
PK�����*†9D/%ÈBÔ��Ô��à���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/routes# Routes
# This file defines all application routes (Higher priority routes first)
# ~~~~

# Home page
GET     /                                       Application.index

# Ignore favicon requests
GET     /favicon.ico                            404

# Map static resources from the /app/public folder to the /public path
GET     /public/                                staticDir:public

# Catch all
*       /{controller}/{action}                  {controller}.{action}
PK�����*†9D¥#Æ/Ç��Ç��ê���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/application.conf# This is the main configuration file for the application.
# ~~~~~
application.name=auth-file-demo

# Application mode
# ~~~~~
# Set to dev to enable instant reloading and other development help.
# Otherwise set to prod.
application.mode=dev
%prod.application.mode=prod

# Secret key
# ~~~~~
# The secret key is used to secure cryptographics functions
# If you deploy your application to several instances be sure to use the same key !
application.secret=uQks53MboMLlGVsJSrPRCipiFOZ4BXn8oDBfOxGxsaXDVtkJOJaIiBNX9SNQoUN8

# i18n
# ~~~~~
# Define locales used by your application.
# You can then place localized messages in conf/messages.{locale} files
# application.langs=fr,en,ja

# Date format
# ~~~~~
date.format=yyyy-MM-dd
# date.format.fr=dd/MM/yyyy

# Server configuration
# ~~~~~
# If you need to change the HTTP port, uncomment this (default is set to 9000)
# http.port=9000
#
# By default the server listen for HTTP on the wilcard address.
# You can restrict this.
# http.address=127.0.0.1
#
# Use this if you don't host your Play application at the root of the domain
# you're serving it from. This parameter has no effect when deployed as a
# war, because the path will be handled by the application server.
# http.path=/

# Session configuration
# ~~~~~~~~~~~~~~~~~~~~~~
# By default, session will be written to the transient PLAY_SESSION cookie.
# The cookies are not secured by default, only set it to true
# if you're serving your pages through https.
# application.session.cookie=PLAY
# application.session.maxAge=1h
# application.session.secure=false

# Session/Cookie sharing between subdomain
# ~~~~~~~~~~~~~~~~~~~~~~
# By default a cookie is only valid for a specific domain. By setting
# application.defaultCookieDomain to '.example.com', the cookies
# will be valid for all domains ending with '.example.com', ie:
# foo.example.com and bar.example.com
# application.defaultCookieDomain=.example.com

# JVM configuration
# ~~~~~
# Define which port is used by JPDA when application is in debug mode (default is set to 8000)
# jpda.port=8000
#
# Java source level => 1.5, 1.6 or 1.7 (experimental)
# java.source=1.5

# Log level
# ~~~~~
# Specify log level for your application.
# If you want a very customized log, create a log4j.properties file in the conf directory
# application.log=INFO
#
# More logging configuration
# application.log.path=/log4j.properties
# application.log.system.out=off

# Database configuration
# ~~~~~ 
# Enable a database engine if needed.
#
# To quickly set up a development database, use either:
#   - mem : for a transient in memory database (H2 in memory)
#   - fs  : for a simple file written database (H2 file stored)
# db=mem
#
# To connect to a local MySQL5 database, use:
# db=mysql://user:pwd@host/database
#
# To connect to a local PostgreSQL9 database, use:
# db=postgres://user:pwd@host/database
#
# If you need a full JDBC configuration use the following :
# db.url=jdbc:postgresql:database_name
# db.driver=org.postgresql.Driver
# db.user=root
# db.pass=secret
#
# Connections pool configuration :
# db.pool.timeout=1000
# db.pool.maxSize=30
# db.pool.minSize=10
#
# If you want to reuse an existing Datasource from your application server, use:
# db=java:/comp/env/jdbc/myDatasource
#
# When using an existing Datasource, it's sometimes needed to destroy it when
# the application is stopped. Depending on the datasource, you can define a
# generic "destroy" method :
# db.destroyMethod=close

# JPA Configuration (Hibernate)
# ~~~~~
#
# Specify the custom JPA dialect to use here (default to guess):
# jpa.dialect=org.hibernate.dialect.PostgreSQLDialect
#
# Specify the ddl generation pattern to use. Set to none to disable it 
# (default to update in DEV mode, and none in PROD mode):
# jpa.ddl=update
#
# Debug SQL statements (logged using DEBUG level):
# jpa.debugSQL=true
#
# You can even specify additional hibernate properties here:
# hibernate.use_sql_comments=true
# ...
#
# Store path for Blob content
attachments.path=data/attachments

# Memcached configuration
# ~~~~~ 
# Enable memcached if needed. Otherwise a local cache is used.
# memcached=enabled
#
# Specify memcached host (default to 127.0.0.1:11211)
# memcached.host=127.0.0.1:11211
#
# Or you can specify multiple host to build a distributed cache
# memcached.1.host=127.0.0.1:11211
# memcached.2.host=127.0.0.1:11212
#
# Use plain SASL to authenticate for memcached
# memcached.user=
# memcached.password=

# HTTP Response headers control for static files
# ~~~~~
# Set the default max-age, telling the user's browser how long it should cache the page.
# Default is 3600 (one hour). Set it to 0 to send no-cache.
# This is only read in prod mode, in dev mode the cache is disabled.
# http.cacheControl=3600

# If enabled, Play will generate entity tags automatically and send a 304 when needed.
# Default is true, set it to false to deactivate use of entity tags.
# http.useETag=true

# Custom mime types
# mimetype.xpi=application/x-xpinstall

# WS configuration
# ~~~~~
# Default engine is Async Http Client, uncomment to use
# the JDK's internal implementation
# webservice = urlfetch
# If you need to set proxy params for WS requests
# http.proxyHost = localhost
# http.proxyPort = 3128
# http.proxyUser = jojo
# http.proxyPassword = jojo

# Mail configuration
# ~~~~~ 
# Default is to use a mock Mailer
mail.smtp=mock

# Or, specify mail host configuration
# mail.smtp.host=127.0.0.1
# mail.smtp.user=admin
# mail.smtp.pass=
# mail.smtp.channel=ssl

# Url-resolving in Jobs
# ~~~~~~
# When rendering templates with reverse-url-resoling (@@{..}) in Jobs (which do not have an inbound Http.Request),
# ie if sending a HtmlMail, Play need to know which url your users use when accessing your app.
# %test.application.baseUrl=http://localhost:9000/
# %prod.application.baseUrl=http://www.yourdomain.com/

# Jobs executor
# ~~~~~~
# Size of the Jobs pool
# play.jobs.pool=10

# Execution pool
# ~~~~~
# Default to 1 thread in DEV mode or (nb processors + 1) threads in PROD mode.
# Try to keep a low as possible. 1 thread will serialize all requests (very useful for debugging purpose)
# play.pool=3

# Open file from errors pages
# ~~~~~
# If your text editor supports opening files by URL, Play! will
# dynamically link error pages to files 
#
# Example, for textmate:
# play.editor=txmt://open?url=file://%s&line=%s

# Testing. Set up a custom configuration for test mode
# ~~~~~
#%test.module.cobertura=${play.path}/modules/cobertura
%test.application.mode=dev
%test.db.url=jdbc:h2:mem:play;MODE=MYSQL;LOCK_MODE=0
%test.jpa.ddl=create
%test.mail.smtp=mock

PK�����*†9D‹úWÀ �� ��ê���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/dependencies.yml# Application dependencies

require:
    - play
    - play -> secure
    - local -> play-file-auth 0.2
    
repositories:
    - playCustomModules:
        type:       local
        artifact:   ${application.path}/../../dist/[module]-[revision].zip
        contains:
          - local -> *PK�����*†9Dqé¶h���h���â���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/messages# You can specialize this file for each language.
# For example, for French create a messages.fr file
#
PK�����*†9D«_^)/��/��è���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/main.html<!DOCTYPE html>

<html>
    <head>
        <title>#{get 'title' /}</title>
        <meta charset="${_response_encoding}">
        <link rel="stylesheet" media="screen" href="@{'/public/stylesheets/main.css'}">
        #{get 'moreStyles' /}
        <link rel="shortcut icon" type="image/png" href="@{'/public/images/favicon.png'}">
        <script src="@{'/public/javascripts/jquery-1.6.4.min.js'}" type="text/javascript" charset="${_response_encoding}"></script>
        #{get 'moreScripts' /}
    </head>
    <body>
        #{doLayout /}
    </body>
</html>
PK�����*†9D*º$•<���<���õ���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/Application/index.html#{extends 'main.html' /}
#{set title:'Home' /}

#{welcome /}PK�����*†9DÙ¦��¦��î���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/errors/404.html<!DOCTYPE html>

<html>
    <head>
        <title>Not found</title>
        <meta http-equiv="Content-Type" content="text/html; charset=${_response_encoding}"/>    
    </head>
    <body>
        #{if play.mode.name() == 'DEV'}
            #{404 result /}
        #{/if}
        #{else}
            <h1>Not found</h1>
            <p>
                ${result.message}
            </p>
        #{/else}
    </body>
</html>
PK�����*†9DËip®V��V��î���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/errors/500.html<!DOCTYPE html>

<html>
    <head>
        <title>Application error</title>
        <meta http-equiv="Content-Type" content="text/html; charset=${_response_encoding}"/>	
    </head>
    <body>
        #{if play.mode.name() == 'DEV'}
            #{500 exception /}
        #{/if}
        #{else}
            <h1>Oops, an error occured</h1>
            #{if exception instanceof play.exceptions.PlayException}
                <p>
                    This exception has been logged with id <strong>${exception.id}</strong>.
                </p>
            #{/if}
        #{/else}
    </body>
</html>
PK�����*†9D¤8r“���“���õ���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/controllers/Application.javapackage controllers;
import play.mvc.*;

public class Application extends Controller {

    public static void index() {
        render();
    }

}PK�����*†9Dp­b’$���$���ã���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/secure/opt/play/play-1.2.5/modules/secure
PK�����*†9DD6I÷P��P��û���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.py# Here you can create play commands that are specific to the module, and extend existing commands

MODULE = 'play-file-auth'

# Commands that are specific to your module

COMMANDS = ['play-file-auth:hello']

def execute(**kargs):
    command = kargs.get("command")
    app = kargs.get("app")
    args = kargs.get("args")
    env = kargs.get("env")

    if command == "play-file-auth:hello":
        print "~ Hello"


# This will be executed before any command (new, run...)
def before(**kargs):
    command = kargs.get("command")
    app = kargs.get("app")
    args = kargs.get("args")
    env = kargs.get("env")


# This will be executed after any command (new, run...)
def after(**kargs):
    command = kargs.get("command")
    app = kargs.get("app")
    args = kargs.get("args")
    env = kargs.get("env")

    if command == "new":
        pass
PK�����*†9DŒÀÉZ•��•��ù���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/README.mdplay-file-auth
==============

This Module supports authentication of Play! 1.x Applications agains Unix Auth Files (e.g. Apache htusers)

This Plugin works for all Auth Files with the following syntax:


    user1:passwordhash
    user1:passwordhash:...:...:

    group:user1 user2
    group:x:...:user1,user2


The Hash Algorithm has to be either MD5 Crypt or MD5 Apache Crypt.

    $1$...
    $apr1$...PK�����*†9DaCV��V��ù���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/build.xml<?xml version="1.0" encoding="UTF-8"?>

<project name="play-file-auth" default="build" basedir=".">

    <target name="check" unless="play.path">
        <fail message="Please specify Play framework path using -Dplay.path=/path/to/framework/home" />
    </target>

    <path id="project.classpath">
        <pathelement path="${play.path}/framework/classes"/>
        <fileset dir="${play.path}/framework/lib">
            <include name="*.jar"/>
        </fileset>
        <fileset dir="${play.path}/framework">
            <include name="*.jar"/>
        </fileset>
        <fileset dir="lib">
            <include name="*.jar"/>
        </fileset>
    </path>

    <target name="build" depends="compile">
        <mkdir dir="lib" />
        <copy todir="tmp/classes">
            <fileset dir="src">
                <include name="**/*.properties"/>
                <include name="**/*.xml"/>
                <include name="**/play.plugins"/>
                <include name="**/play.static"/>
            </fileset>
        </copy>
        <jar destfile="lib/play-play-file-auth.jar" basedir="tmp/classes">
            <manifest>
                <section name="Play-module">
                    <attribute name="Specification-Title" value="play-file-auth"/>
                </section>
            </manifest>
        </jar>
        <delete dir="tmp" />
    </target>

    <target name="compile" depends="check">
        <mkdir dir="tmp/classes" />
        <javac srcdir="src" destdir="tmp/classes" target="1.5" debug="true">
            <classpath refid="project.classpath" />
        </javac>
    </target>

</project>
PK�����*†9D%oÖ��Ö��ü���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pycÑò
Ÿ*Rc�����������@���s.���d��Z��d�g�Z�d�„��Z�d�„��Z�d�„��Z�d�S(���s���play-file-auths���play-file-auth:helloc����������K���sV���|��i��d�ƒ�}�|��i��d�ƒ�}�|��i��d�ƒ�}�|��i��d�ƒ�}�|�d�j�o	�d�GHn�d��S(���Nt���commandt���appt���argst���envs���play-file-auth:hellos���~ Hello(���t���get(���t���kargsR����R���R���R���(����(����s���/home/javastream.de/jenkins/jobs/de.consolving.play-file-auth/workspace/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pyt���execute	���s����
c����������K���s@���|��i��d�ƒ�}�|��i��d�ƒ�}�|��i��d�ƒ�}�|��i��d�ƒ�}�d��S(���NR����R���R���R���(���R���(���R���R����R���R���R���(����(����s���/home/javastream.de/jenkins/jobs/de.consolving.play-file-auth/workspace/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pyt���before���s����c����������K���sQ���|��i��d�ƒ�}�|��i��d�ƒ�}�|��i��d�ƒ�}�|��i��d�ƒ�}�|�d�j�o�n�d��S(���NR����R���R���R���t���new(���R���(���R���R����R���R���R���(����(����s���/home/javastream.de/jenkins/jobs/de.consolving.play-file-auth/workspace/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pyt���after���s����
N(���t���MODULEt���COMMANDSR���R���R	���(����(����(����s���/home/javastream.de/jenkins/jobs/de.consolving.play-file-auth/workspace/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pyt���<module>���s���			PK�����*†9DxÏ‘[$���$���ø���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/manifestversion=0.2
frameworkVersions=1.2.x
PK�����*†9D#ð—»��»����samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/lib/play-play-file-auth.jarPK
����ú–C������������	��META-INF/þÊ��PK
���ù–C½ÿíŠ���¤������META-INF/MANIFEST.MFM±
Â0E÷@þ!£	U¡H·ÖÉ¡"T\噾ÐiR’tÈß›l®çœËÁ‘Á˜äC$ï:qR
g½û#ýzAQX‘תo!á,‡\ûV5Ÿs+¿ÍE¦Ý‰‘tð1Ç„kw§Õ‘3ΰb'ž²\ý¼[älÚP“!
©üÈ%[Š­†,JØÓR—?PK
����ú–C���������������play/PK
����ú–C������������
���play/modules/PK
����ú–C���������������play/modules/fileauth/PK
����ú–C���������������play/modules/fileauth/utils/PK
���ú–C��������������play.plugins�PK
���ú–C(�å_j
����$���play/modules/fileauth/FileAuth.classW{|Õþ&û˜ÙÉ$À†D—Š,ˆ˜„,QZPEBL „”hD‡ì$Ýìngg‘૾j[m}k¥­O4ÕR´!1ÁG¨Vkµ[«}ØÖÖÚÚ÷ý•~wöÁf³bȏû8÷Üs¿sÎwϝ}ùOpþ£"ˆk|8×ʸN…×(¸^ÅpƒŒ/ª”IÁ—E£hn*†Œ¯Èøj1Jp³Ü"ãV·ávîÀ
îRq7¾¦à»Äðë2¾¡âDaö›¢¿WÅ}¸_ŒPð è’±[ÅÃxDưŠø–hÍc
¾-VöÈøŽŒÇUTá	•Ø+š}*fb¿hž žRð]{DÆK1*6ŽÉxZÅ2Œ*Jßç=£à ‚gRpXÁs2žWq®.½ àEáÕ„Œ#õ›×õ45·4ötv4nêèi¨oXר³¡±[‚¿åb}»^Ñ£ýµ¶eFûWH(iˆE¶µ»ôHҐ 6wô4¶Õ¯ii<W‚t„9Ç,®Ý´±³}’É’ÔxsskãÆÎͼ+ͨi¯’બê’ànˆ…isF‹5Ú’ƒÛk³¾-b(±^=Ò¥[¦˜§…n{ÀLH¶Ä#úPí`,œŒ‰Ú>3bèI{ ¶‰ƒzZé7ì΄aQ{VeUÊ­¤mFj[õ8—=ÉÔÚŒ)+“ÏŠgÎ^6YuåÔPM•¬¢A_‡ÙÕí¤EgæC™¾ú³ÖŠ%ãííOš¦iÌQè0ì
«ë릍ëcM)½±¨­›QÂ;­r:ÞU‘AÇ#æW¤…s¦SSăyÄ)Ó€B ÛõˆÖm†]‰ë‰Ä¥1+L:Ñ^k(návÊ×D¯MŸä‰ë–;lK¡kP´ÈNL­˜±Ú5ɾ>Ã2›=lX\wGHaª;$Ì˪	J¶Åì¦X2nÜÑkÄm3¥vyV£yc®\dnÓÅ=sа
ëZr	¥“S_ø3Äð‰ðµ§œpë–µP 2¢ì¤f"3æ]J}3Ñì;ב‰PVöFÒ÷Síˆ%­^£É9·$sµ–ˆó5´ UÃ:Ðê¬c¹X§'Ȧ,¯ÄÈø¾†—ð2íLb™,	3óë‡†íØ¬a‹h^Â&mcÂ5ôà
ÎÞüLÉxUÃq‘Œ×4ü¯3¢6ˆð-q.ý’¸nÈxCÏñf4o5­NèüTÂ	ù‡¬Iš‘°£²ZÃÏ𦌟køÞ“_òÄ`³¥bСVÐŒ5¼w&áݸíb£×–ñ+
¿Æo$h¹©!þ­†wq¥†ßáJÙ ™FcvP:ÄŠl„„ê|
¿û+
S“¥4×pJ(ÌÿA4ïiø#ÞÑð'¼¯áÏbôþB6,Œjø+>”0÷¸TÖð7±éï@YJ³Zõ‰
ôÿø§ˆÏ¿È»à 3<äéìlüSUÍI_©|qn^‚Üv,Ä)ö‹Oa£C–ã	ë3vbh¤X¿$X€Á˜,„ÉÙ˜0l†û
‘“ÿ1ÕŽB¯Þ;`Ô6ˆ–ae¯ÀqëbC„•iEUK>SxÛUN•T,/¤Èû½°0h°Dmë¹ËDmd™ÙnXfßP{¶lúœ}ílxYáûÌþ¤¥§\‘SŽÛ­XܰlÓHÄìBr	ÅBz>”çRæI(TÏšÞkRh«—l3¢t#4­ÃÒ·{Åäê2”°A2¬7iYFÔÞL6¶š‘ˆøaí\/á¤Êõdz¥Ø±”ˆ©,³Ø	rK¬¿_°ÜmFûb*@ÞR ¹]yIÏxG¹×Øa&Ä›à5©rî¾T·¢âËhòs"”ËŽÉÒO›*Ç-ÎçIÄ#¦]øu¯*ørº9`ä\ñ¤—Æ4øi’Ú•·çìãó`ªÉœH”‘zÎ÷¹Ó·‰„Þ/<2,+&"ž ØÉf³Èfóñ²éÒÃaÌçGu¿8Ü M°–³"x8çãÈq�ësä>ÌÁ†œùé”Hâ-eÛFI-{‰½§ú�¤}ŽÊF¶^GxÚÙj)|›ØûÄ#H-±Ùf/ÖîGÑ.ÃÕ}�î½~O\£ð‚¼¡úäQ(ª÷RÏåØžCëÀb¶5(ÅÎkq2-்Ìys ¢]œ7Ir>gÝʈdËÇ"ñå#Q§"YÁv%‘¬âü"YM$k&!¹p
’±5‹ä³DÒƒ‹Ò}’·¬ƒÄãÞS=yñx\{FQÜZS=­‡PÒr„¡Åc(-ž,¨E4æÇKs
aÌdàýzÏœJ0§1`uê(èÌ0œÑ6'×d�]Ä¥èE˜¶ü
JRk[³k×|èË:0œv Tȁǘ™v`qh³òá‡	ß ü~ ü‹yì%<0Bøƒ„ˁr@Ãõ§áŸàd_@Ô¸¿)
_Ë®ïPÛÌä_:J~ÊìËöÃï/Áì
bPî¯Á	-ã8‘løçŒà£8isý'sXÍÿ#˜çzÁQÌOS¦uºyNiM`VhïÊîÔ]˜›¶#öùån>m•Ýã¨ê�÷.®sÜ#¨é®óL :àY<‚P7à=èÞ}ôýš€×µtK^·èÆPK߆¾î÷ÔøOÅèImÿ¤›¶»]wÇ(>5ŒŠ”ty®4ãØ™S3†³$ŒàlÝ$¿jö2DÛq/ðz‰þ-þŽO¥ªålw0C˜8—¡—³~\A†\Ií«q®Ãm¸»p#ÀMÃÍ´q­Ý‚	ÜŠ79~‹oãv~»Ý)ÍÂ]Nj/¤Õ]˜ÇÄ_B*Ü€:¦~é¾™(¢L¨‡»g‘qÊÞvFŸãÈ'©°2ÌÆQ$2Ôã4ÖóËÜF2‡©5A†cEa{†Eïñ”R’ârÁ…y¤ÕþOsØZ€«>Šm~ˆtL Lä„)ýô8p§Iâ	x’x'pmÀëDÈIØyvcvÀ™‡—Öˆ5e%ٝž”ƒ÷=<ŽsxÚê:_@©SêÁåÅ®åZ¹V^ü æÔrmi]IÀ(qxV_„ó®Ó¤á£ï†rŠ‚¾ûvø}¡,û\öy2ìs¤Ës¥¹ì}ûB‚}×KÕRˆy}C–};Yjû˜±û™íÈ•ù¶=Ä·i7³ý0yóy÷(îÆã\ya/öñoûɃ§ø3i„¿ð÷Ê(þ‹1ɇQiÆ¥xVªÆ<ñT‹ÃÒjŽðœÔˆç¥.¼(í$óC÷uÄr)ORh¡Ä)C%xU¼—°È€…¼;QŒYˆ.ãH#Чež¿1½÷]>,y>b½Ýṇ~ÝèðÜK)ž{ˆ ÅsyžÈð\Hó|ž´•w¯‰ñj‘Nwª·]Ò"‡ñîlõNeð¬”ÖVjež!UüJHWñµ”ˆ§d
âJ3×àJýkÒ	ríq‹Ú-9)ñ;õøeô
Óñ*~î]•ýX˜ç¼±ïhß¹}ٍ©Ï…ùl?ï`¹úÿPK
���ú–Cæ'È­r��p��*���play/modules/fileauth/FileAuthPlugin.classQÛJ1œìÖ®nk«VÛz©U(R\|V
–"…Šâc¶]5’&e/ŠŸå‹‚‚àG‰g·õ*æa&™Ì™œ$/¯Ï�¶±b#‚…Y
1ÌY(Z(1¤w…áƒY_?aHèžÇo	åE}×ó¹+I™ié.—'Üñz$¦ÂK0¬µ’ß:}Ý‹¤8çBz<
/MöiÒ–Ñ…P;¢Õþ` E—‡B«NÈý¾Ò.Cõ—ŒN—«¦v©ØîèÈïzq(Cá{öÖ¿æYXg¨ü”EKµÿtLïØÚô…e«í뾨—ì¡Rž yxô¥úúð.R¸Ó¨|;ªÔ÷;™/*V1F¿,¾á­bF<¶ñ�v—lÛ„éDÌ#C˜ˆ'‰rÅMrĹ'g0[›÷H~¦ä`É_¢Úr’VVŒÒÆé¤<¦(ÏÀtR7ƒEb›”yT°€‰7PK
���ú–CŒˆvÓ`��%��#���play/modules/fileauth/ScanJob.class}PËNA¬áé.‹ŠÆxpãÁÆ„51«Q80†!ËÙ	ŸåIâÁð£Œ=@ăq“©~Twue?¿Þ?�œ¡n"‰¢‰ÊöÒØO£Âºž/âf—!q¥†‚!çHO<D“¾ðŸxߥNÁQîv¹/u½n&‘Žœ©ËçöD
#Wö‹tÂ‘ÝpïNõ[É¡¢„Áì¨Èˆ©·­5:æ3ÎPyŒ¼PNDW’ÔÛž§BJåÑ…üêÂXõûz&ü¹Öœq7Ò&Î'Ò³B:‡¨Z¨¡ÊPû×Cv£¹¬ëÏk³mJŒ€VŸákG¦£}ÛQ(]ûžOÉ‘©ù[_EÓ�ÇHÐ×_L›#ܢʦÈ(&OÞÀ^—´A˜Z6ó0	­Õ�2”òìÏrk½l,ë-ïm¶',ÒՍ–	k¡ÍhÌa‡b†¸<½B€ÝoPK
���ú–CÎǘ	��%��*���play/modules/fileauth/utils/MD5Crypt.class­W{PTçÿ}û¼,X!®(`BuÙe]@E4¾�EA@りԚËîe¹º/wï"5¦Å4iúŠé˦5ÆØ®Imj’v¥Ú`ß3í_ý/íLg:Ó¦L2ÓtÚ4ôz¾»wĵa:…™ïq¾s¾ó;ç;»¿üàæ4€&ü܆fD‹C\ÀqHÚh£Úè,Ň1>œ°b܆"DL˜‘ýÛjÃI<©§øpZÀÅY+³âã6,Æ'¬˜´¡Q~~ޝðI.vŽOpò“>Å5<%àÓœø>|–ŸãäÏóÕÓüÞó|x†_à_ä«/	ø2ß|…8ëW<ËUÍŠ¯[q‘¡ÈßÖÓß±«mŸŸÁÑsT“|a)òùÕ„
=ÈPÒ‹&U)ªî—Â)™Á¢¨1©e--6)QEÝÂ`tÕïg0uÄ‚t\Ö£Då¾TdXNôKÃa™ßHáýRBá{hRG•$ÃÊžxXšðEbÁTXNúF”°,¥ÔQ_JUÂI_ïöu‰‰¸J(LI‰2Tº†îƨi—¡1†òÇ\YŒ®tuwÕ:g$ɺ‰/©œ$l¬‹ŒKÈÉTXepÞ%ОRÂA9ArE‚›VT²Äìjç@˜B÷dI†¡vëð„*'›SDuµ×ÓÍF%'6:²„d•Ld¨qé°’r •PÔ	_¯œLJ!y»’“Ü|ƒ<ÎàšÇÔó§£máPŒ¶£‘ã9®*±(ñ›Üoä_WwrY‰¹!.%“'b‰ ÷†Ä`MHÑ`HŽæÃƒ¿ocl- a:‹¥¸•;²P»tѯ6ÄÃdSD
)Ûˆ•Â~URéq•Ì\þ!þ6W½ÝR:&'”‘‰½y¿¬Z˜Å‡(u(¸•¨*«\šAŒ³ÝO$Â句¹Sá	Q’öÕü*ëÑjÅs".áyR9ÀÑm¬ÍñÔy³¾;\›{¯ZþZV\ñ®ˆø¾)â>&â@v8Èpß="™aÛj_cSóšµëZÖ·nhkïØ¾£sç®®îÝ=½}{ö>´Ïß?°ÿÀÁÁCÒp („F•£Ç‘h,~<‘TSc'Æ'NZ‘q/Šx	ßq
ß&OZ+^ñ\§H\Xì2,E¹/U•ˆœ?ä^y…Á>?E¼Š×D|ßcØro÷6,o{£ˆnp+¦È€º¦:)Uë¤x‚マ›œå–ˆàu~ô‹˜Æm?Än?Ê®~,¢›o‚VŠ!’Úƒ½"ÚÑ!â§øÐ.kçÆ7ì
CÝBŠaÎ~ÍC{†Ê;Iþ‰¤*G½œ —­ÈF¦óí¥WéÝe‰§my2åzœïÂô
…
¯³ò¸¢òZÖÅwöù<ä©À¨”hÓY:h/Åãr”Òf™«ãîT­¥‚Ë]±ØU0§«þKÊR1¡bÚ¥5ª�eSÓ½ëÞ=s~É\™þÑDìoUšÕ–°
©£Z«£^¥7ëÇ$U£t%™Nêð+]]…ÛŒwAÅxÖ%6²&¡&(\sÁ9Äé…•Yµ‚¾g$ûZ µó^Ä)õ¼5YRñ V-A݉Vjb]ÚËš©ÿÉD±ÈÇSR89O6ìH?}V4Ñ÷`€k°ë´ÝRÚ·ÌÙC¤557ÅG3£Ùì¾öŠÆ²‘F‹Flƒ4ŠYlÂfš‹°[uá4LÚÙ {Úô<ŠÜÓ–+({‡1“iŠ.¶\BQܦf·¹y
:Hc•{ڬӍÍt4«F/ËR¦ ÐÖHò³€Ü°Ñ¸žÀ´ÒWÓ,!8Õ¨‘à´ ]hC?¶ã vÌ=ˆmDù€’^}’Œ3ÑÜpEƒ7`ë›4Ì,{U^Gqõbˆ>‘Aieªí–Ó[Ó3oz3°_Ïã¨ÿ¬ì†€”¡5èÃ*<¤é¬…‘ßK(vhž
èÄN’PGøºèÔÉ둎ÃO{ÍåÆMUîéË(qWû'KÏümÖl‡u€®ØO&
Ðþ ¦ª’Î
°ˆš¡å¥O3”Jœ® ‘8ø™eé"Ìœ¹6ïmÌq“…ØG³×Q]º›àñ3»cÑ×wßÂâAŠ‘ŠÛz4XHgö¾RÍì QdX1’¿×J±2@¸9*ê{ú½—H–Û´MwÏ-TÒ|_¯'ƒ%vá2V4dàt,Í êñ£Omñ8–._nz8ƒe,?žù­›øì0³ORMš€1òÑ	òÈ#¤íVâ4ý
˜³7é\IHÉ_í6¢sL+†èi¨„’¿>ŠÃZQ«ÖÑnÒIp{ÕS¨¹>Ï‹Ïä_ƒß•½“¯†´”s’—ÿÏv[æÛ}™´½@èÓ¤í*Ùø"i~‰ì¾ö?Ø}¤ Ýµì¾ý!vS³ÎÞd|ƒì."aÅCö­¸�‘ÏUÜßã±×eð€á9”yŒÙ5YÛCfVÙ…+(öí'L¡n£Éirgð‘V:M
¹…'»àçf§9wnöäyJ«úhSÕ"TQí4y‚Ý~4¤a® 5®Iá/é™?x§PŸã¼€ú
ÁtæJ¹€‰xÒ|ÉoÕvtxªEHÏüÚiâ
Œ\f‘ñ­Ëˆpî¬lYF¢Óì5Ú효%~ïu¬„Æš%¸s]XHÏ9ËÚ3)P¡xZ¥‚Shàqâ<ÙÉ¡Í^ãš)4Øíã^»E[	ãg½v‘/Ïž[oq
•뼫)Ïje-)Èjγ
³¬¥Y-yÖ¢YÖ²‚¬Ö<«-Ï*ä´s²N5ç¨ôtNáŽZý'-”ߤ°ü#ámTáªÕ¦€—Âÿ¯Ô=Þ£
ýw*™ïSšþƒ’àŸT¾þ…þq|€3éO2ƝÓW¡€«LÄk¬7Y)}=Úñ+Úÿ†-ÆïX5Þf5x—­Àûì~f`u¬˜­bæbUÌÃ`
ôïckX#ÛÊšÙ.¶Žõ±jÖÏ6²Ãl²ÍìÛÂ’l;ÏÚØEÖÁ^gÛÙ/X'{‹ídï±.C9ë6Ô°ÃfÖkèb{~¶×p„ù
6 ¥bœ:û$u ‰]ÀËðh­AÀï‘ÐW”‚¹D¥U6Qùj˜V²õ¨…±ÙÐ@Å\¦ÂqØ ’?d˜Ùy¼u5áµ^&P’BÑË…ª—‹Fª’Z–—xÜ­«¯¾FdÉÂI¼—8|7Ðxûξʂ(b2ÊÙ–±V2eN™iÄQ½Ì4☆ž!¬ÉGþPK
����ú–C������������	���������íA����META-INF/þÊ��PK
���ù–C½ÿíŠ���¤��������������¤+���META-INF/MANIFEST.MFPK
����ú–C����������������������íAç���play/PK
����ú–C������������
����������íA
��play/modules/PK
����ú–C����������������������íA5��play/modules/fileauth/PK
����ú–C����������������������íAi��play/modules/fileauth/utils/PK
���ú–C����������������������¤£��play.pluginsPK
���ú–C(�å_j
����$�����������¤Ï��play/modules/fileauth/FileAuth.classPK
���ú–Cæ'È­r��p��*�����������¤{��play/modules/fileauth/FileAuthPlugin.classPK
���ú–CŒˆvÓ`��%��#�����������¤5��play/modules/fileauth/ScanJob.classPK
���ú–CÎǘ	��%��*�����������¤Ö��play/modules/fileauth/utils/MD5Crypt.classPK��������Ÿ����PK�����*†9DÔQ.^Þ���Þ���û���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/routes# This file defines all module routes (Higher priority routes first)
#
# import these routes in the main app as :
# *     /                       module:play-file-auth
#
# ~~~~

GET     /?                      Module.indexPK�����*†9D1Sù*T���T�����samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/application.confapplication.name=play-file-auth
application.mode=dev
application.secret=test
db=mem
PK�����*†9Dæ´(ÕJ���J�����samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/dependencies.ymlself: play -> play-file-auth 0.2

require:
    - play
    - play -> securePK�����*†9DÌ;¨U¬���¬���ý���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/messages# Default play-file-auth messages
# You can specialize this file for each language.
# For exemple, for french create a messages.fr file

#play-file-auth.name=play-file-authPK�����*†9D���������������samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play.pluginsPK�����*†9DˆŽ6©™��™����samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/ScanJob.java/**
 * ScanJob
 * 31.07.2012
 * @author Philipp Haussleiter
 *
 */
package play.modules.fileauth;

import play.jobs.Every;
import play.jobs.Job;

/**
 * Periodically Scan of user/group files. Scan runs every 5 mins.
 * @author Philipp Haußleiter
 */
@Every("5min")
public class ScanJob extends Job {
    @Override
    public void doJob(){
        FileAuth.scanUsers();
        FileAuth.scanGroups();
    }
}
PK�����*†9DlP¨å��å����samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/FileAuth.java/**
 * FileAuth 31.07.2012
 *
 * @author Philipp Haussleiter
 *
 */
package play.modules.fileauth;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import play.Logger;
import play.Play;
import play.cache.Cache;
import play.modules.fileauth.utils.MD5Crypt;

/**
 * Basic Wrapper for all FileAuth Functions.
 *
 * @author Philipp Haußleiter
 */
public class FileAuth {

    /* Cache Key for User/PasswordHash Map */
    public final static String AUTH_FILE_USERS_CACHE_KEY = "AUTH_FILE_USERS";
    /* Cache Key for Group/Users Map */
    public final static boolean IS_ENABLED = isEnabled();
    public final static String AUTH_FILE_GROUPS_CACHE_KEY = "AUTH_FILE_GROUPS";
    private final static String CACHE_TIMEOUT = "5mn";

    /**
     * Returns a Map of all Users (user/password hash).
     *
     * @return the Map.
     */
    public static Map<String, String> getUsers() {
        if (!IS_ENABLED) {
            return new HashMap<String, String>();
        }
        Map<String, String> users = Cache.get(AUTH_FILE_USERS_CACHE_KEY, HashMap.class);
        if (users == null) {
            users = scanUsers();
        }
        return users;
    }

    /**
     * Returns a Map of all Groups (groups/usernames).
     *
     * @return the Map.
     */
    public static Map<String, Set<String>> getGroups() {
        if (!IS_ENABLED) {
            return new HashMap<String, Set<String>>();
        }
        Map<String, Set<String>> groups = Cache.get(AUTH_FILE_GROUPS_CACHE_KEY, HashMap.class);
        if (groups == null) {
            groups = scanGroups();
        }
        return groups;
    }

    /**
     * Checks if a group contains a given username.
     *
     * @param group the Group to check.
     * @param user the user to check.
     * @return true if user is in group, otherwise false.
     */
    public static boolean contains(String group, String user) {
        if (!IS_ENABLED) {
            return true;
        }
        if (group == null || user == null) {
            return false;
        }
        Map<String, Set<String>> groups = getGroups();
        Set<String> groupUsers = groups.get(group);
        if (groupUsers == null) {
            return false;
        }
        return groupUsers.contains(user);
    }

    /**
     * Validates an user with a given password agains the user/password hash
     * mapping.
     *
     * @param user the given user.
     * @param password the given password (clear text).
     * @return true if validation okay, otherwise false.
     */
    public static boolean validate(String user, String password) {
        if (!IS_ENABLED) {
            return true;
        }
        if (user == null || password == null) {
            return false;
        }
        Map<String, String> users = getUsers();
        String encryptedPass = users.get(user);
        if (encryptedPass == null) {
            return false;
        }
        return MD5Crypt.verifyPassword(password, encryptedPass);
    }

    /**
     * Rescans the users file.
     *
     * @return the updated Map of users.
     */
    public static Map<String, String> scanUsers() {
        String fileName = Play.configuration.getProperty("authfile.users.path");
        String delimeter1 = Play.configuration.getProperty("authfile.users.delimeter", ":");
        Logger.info("@" + System.currentTimeMillis() + " Scanning Users in " + fileName);
        Map<String, String> users = new HashMap<String, String>();
        File file = new File(fileName);
        if (file == null || !file.exists() || !file.isFile()) {
            Logger.warn(fileName + " is not a valid Auth-File!");
        }
        try {
            BufferedReader br = new BufferedReader(new FileReader(file));
            String line;
            String parts[];
            while ((line = br.readLine()) != null) {
                parts = line.split(delimeter1);
                /*
                 * Matches
                 * user:hash
                 * user:hash:uid: ...
                 */
                if (parts.length > 1) {
                    users.put(parts[0].trim(), parts[1].trim());
                }
            }
            Cache.set(AUTH_FILE_USERS_CACHE_KEY, users, CACHE_TIMEOUT);
        } catch (FileNotFoundException ex) {
            Logger.error(ex.getLocalizedMessage(), ex);
        } catch (IOException ex) {
            Logger.error(ex.getLocalizedMessage(), ex);
        }
        Logger.info("found " + users.size() + " mappings");
        return users;
    }

    /**
     * Rescans the groups file.
     *
     * @return the updated Map of groups.
     */
    public static Map<String, Set<String>> scanGroups() {
        String fileName = Play.configuration.getProperty("authfile.groups.path");
        String delimeter1 = Play.configuration.getProperty("authfile.users.delimeter", ":");
        String delimeter2 = Play.configuration.getProperty("authfile.groups.delimeter", " ");
        Logger.info("@" + System.currentTimeMillis() + " Scanning Groups in " + fileName);
        Map<String, Set<String>> groups = new HashMap<String, Set<String>>();
        File file = new File(fileName);
        if (file == null || !file.exists() || !file.isFile()) {
            Logger.warn(fileName + " is not a valid Auth-File!");
        }
        try {
            BufferedReader br = new BufferedReader(new FileReader(file));
            String line;
            String parts[];
            String userParts[];
            Set<String> users;
            while ((line = br.readLine()) != null) {
                parts = line.split(delimeter1);
                if (parts.length > 1) {
                    if (parts.length > 2) {
                        userParts = parts[parts.length - 1].split(delimeter2);
                    } else {
                        userParts = parts[1].split(delimeter2);
                    }
                    if (userParts.length > 0) {
                        users = new HashSet<String>();
                        for (String user : userParts) {
                            users.add(user.trim());
                        }
                        groups.put(parts[0].trim(), users);
                    }
                }
            }
            Cache.set(AUTH_FILE_GROUPS_CACHE_KEY, groups, CACHE_TIMEOUT);
        } catch (FileNotFoundException ex) {
            Logger.error(ex.getLocalizedMessage(), ex);
        } catch (IOException ex) {
            Logger.error(ex.getLocalizedMessage(), ex);
        }
        Logger.info("found " + groups.size() + " mappings");
        return groups;
    }

    private static boolean isEnabled() {
        if (Play.configuration.getProperty("authfile.users.path") == null
                || Play.configuration.getProperty("authfile.groups.path") == null) {
            Logger.info("FileAuth not enabled. authfile.users.path or authfile.groups.path not set!");
            return false;
        }
        return true;

    }
}
PK�����*†9D4ÿÑ^º��º����samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/FileAuthPlugin.java/**
 * FileAuthPlugin
 * 31.07.2012
 * @author Philipp Haussleiter
 *
 */
package play.modules.fileauth;

import play.PlayPlugin;

/**
 * Entry Class for first file scan.
 * @author Philipp Haußleiter
 */
public class FileAuthPlugin extends PlayPlugin {

    /**
     * Trigger to scan the files for the first Time.
     */
    @Override
    public void onApplicationStart() {
        ScanJob job = new ScanJob();
        job.now();
    }
}
PK�����*†9DYí΁1��1����samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/utils/MD5Crypt.java/*

MD5Crypt.java

Created: 3 November 1999

Java Port By: Jonathan Abbey, jonabbey@arlut.utexas.edu

Original C Version:
----------------------------------------------------------------------------
"THE BEER-WARE LICENSE" (Revision 42):
<phk@login.dknet.dk> wrote this file.  As long as you retain this notice you
can do whatever you want with this stuff. If we meet some day, and you think
this stuff is worth it, you can buy me a beer in return.   Poul-Henning Kamp
----------------------------------------------------------------------------

This Java Port is  

Copyright (c) 1999-2010 The University of Texas at Austin.

All rights reserved.

Redistribution and use in source and binary form are permitted
provided that distributions retain this entire copyright notice
and comment. Neither the name of the University nor the names of
its contributors may be used to endorse or promote products
derived from this software without specific prior written
permission. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE.

 */
package play.modules.fileauth.utils;

import java.security.MessageDigest;

/*------------------------------------------------------------------------------
class
MD5Crypt

------------------------------------------------------------------------------*/
/**
 * This class defines a method,
 * {@link MD5Crypt#crypt(java.lang.String, java.lang.String) crypt()}, which
 * takes a password and a salt string and generates an OpenBSD/FreeBSD/Linux-compatible
 * md5-encoded password entry.
 */
public final class MD5Crypt {

    /**
     * Command line test rig.
     */
    static public void main(String argv[]) {
        if ((argv.length < 1) || (argv.length > 3)) {
            System.err.println("Usage: MD5Crypt [-apache] password salt");
            System.exit(1);
        }

        if (argv.length == 3) {
            System.err.println(MD5Crypt.apacheCrypt(argv[1], argv[2]));
        } else if (argv.length == 2) {
            System.err.println(MD5Crypt.crypt(argv[0], argv[1]));
        } else {
            System.err.println(MD5Crypt.crypt(argv[0]));
        }

        System.exit(0);
    }
    public static final String SALTCHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
    public static final String itoa64 = "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";

    public static final String to64(long v, int size) {
        StringBuilder result = new StringBuilder();

        while (--size >= 0) {
            result.append(itoa64.charAt((int) (v & 0x3f)));
            v >>>= 6;
        }

        return result.toString();
    }

    public static final void clearbits(byte bits[]) {
        for (int i = 0; i < bits.length; i++) {
            bits[i] = 0;
        }
    }

    /**
     * convert an encoded unsigned byte value into a int
     * with the unsigned value.
     */
    public static final int bytes2u(byte inp) {
        return (int) inp & 0xff;
    }

    static private MessageDigest getMD5() {
        try {
            return MessageDigest.getInstance("MD5");
        } catch (java.security.NoSuchAlgorithmException ex) {
            throw new RuntimeException(ex);
        }
    }

    /**
     * <p>This method actually generates a OpenBSD/FreeBSD/Linux PAM compatible
     * md5-encoded password hash from a plaintext password and a
     * salt.</p>
     *
     * <p>The resulting string will be in the form '$1$&lt;salt&gt;$&lt;hashed mess&gt;</p>
     *
     * @param password Plaintext password
     *
     * @return An OpenBSD/FreeBSD/Linux-compatible md5-hashed password field.
     */
    public static final String crypt(String password) {
        StringBuilder salt = new StringBuilder();
        java.util.Random randgen = new java.util.Random();

        /* -- */

        while (salt.length() < 8) {
            int index = (int) (randgen.nextFloat() * SALTCHARS.length());
            salt.append(SALTCHARS.substring(index, index + 1));
        }

        return MD5Crypt.crypt(password, salt.toString());
    }

    /**
     * <p>This method actually generates a OpenBSD/FreeBSD/Linux PAM compatible
     * md5-encoded password hash from a plaintext password and a
     * salt.</p>
     *
     * <p>The resulting string will be in the form '$1$&lt;salt&gt;$&lt;hashed mess&gt;</p>
     *
     * @param password Plaintext password
     * @param salt A short string to use to randomize md5.  May start with $1$, which
     *             will be ignored.  It is explicitly permitted to pass a pre-existing
     *             MD5Crypt'ed password entry as the salt.  crypt() will strip the salt
     *             chars out properly.
     *
     * @return An OpenBSD/FreeBSD/Linux-compatible md5-hashed password field.
     */
    public static final String crypt(String password, String salt) {
        return MD5Crypt.crypt(password, salt, "$1$");
    }

    /**
     * <p>This method generates an Apache MD5 compatible
     * md5-encoded password hash from a plaintext password and a
     * salt.</p>
     *
     * <p>The resulting string will be in the form '$apr1$&lt;salt&gt;$&lt;hashed mess&gt;</p>
     *
     * @param password Plaintext password
     *
     * @return An Apache-compatible md5-hashed password string.
     */
    public static final String apacheCrypt(String password) {
        StringBuilder salt = new StringBuilder();
        java.util.Random randgen = new java.util.Random();

        /* -- */

        while (salt.length() < 8) {
            int index = (int) (randgen.nextFloat() * SALTCHARS.length());
            salt.append(SALTCHARS.substring(index, index + 1));
        }

        return MD5Crypt.apacheCrypt(password, salt.toString());
    }

    /**
     * <p>This method actually generates an Apache MD5 compatible
     * md5-encoded password hash from a plaintext password and a
     * salt.</p>
     *
     * <p>The resulting string will be in the form '$apr1$&lt;salt&gt;$&lt;hashed mess&gt;</p>
     *
     * @param password Plaintext password
     * @param salt A short string to use to randomize md5.  May start with $apr1$, which
     *             will be ignored.  It is explicitly permitted to pass a pre-existing
     *             MD5Crypt'ed password entry as the salt.  crypt() will strip the salt
     *             chars out properly.
     *
     * @return An Apache-compatible md5-hashed password string.
     */
    public static final String apacheCrypt(String password, String salt) {
        return MD5Crypt.crypt(password, salt, "$apr1$");
    }

    /**
     * <p>This method actually generates md5-encoded password hash from
     * a plaintext password, a salt, and a magic string.</p>
     *
     * <p>There are two magic strings that make sense to use here.. '$1$' is the
     * magic string used by the FreeBSD/Linux/OpenBSD MD5Crypt algorithm, and
     * '$apr1$' is the magic string used by the Apache MD5Crypt algorithm.</p>
     *
     * <p>The resulting string will be in the form '&lt;magic&gt;&lt;salt&gt;$&lt;hashed mess&gt;</p>
     *
     * @param password Plaintext password
     * @param salt A short string to use to randomize md5.  May start
     * with the magic string, which will be ignored.  It is explicitly
     * permitted to pass a pre-existing MD5Crypt'ed password entry as
     * the salt.  crypt() will strip the salt chars out properly.
     * @param magic Either "$apr1$" or "$1$", which controls whether we
     * are doing Apache-style or FreeBSD-style md5Crypt.
     *
     * @return An md5-hashed password string.
     */
    public static final String crypt(String password, String salt, String magic) {
        /* This string is magic for this algorithm.  Having it this way,
         * we can get get better later on */

        byte finalState[];
        MessageDigest ctx, ctx1;
        long l;

        /* -- */

        /* Refine the Salt first */

        /* If it starts with the magic string, then skip that */

        if (salt.startsWith(magic)) {
            salt = salt.substring(magic.length());
        }

        /* It stops at the first '$', max 8 chars */

        if (salt.indexOf('$') != -1) {
            salt = salt.substring(0, salt.indexOf('$'));
        }

        if (salt.length() > 8) {
            salt = salt.substring(0, 8);
        }

        ctx = getMD5();

        ctx.update(password.getBytes());    // The password first, since that is what is most unknown
        ctx.update(magic.getBytes());    // Then our magic string
        ctx.update(salt.getBytes());    // Then the raw salt

        /* Then just as many characters of the MD5(pw,salt,pw) */

        ctx1 = getMD5();
        ctx1.update(password.getBytes());
        ctx1.update(salt.getBytes());
        ctx1.update(password.getBytes());
        finalState = ctx1.digest();

        for (int pl = password.length(); pl > 0; pl -= 16) {
            ctx.update(finalState, 0, pl > 16 ? 16 : pl);
        }

        /* the original code claimed that finalState was being cleared
        to keep dangerous bits out of memory, but doing this is also
        required in order to get the right output. */

        clearbits(finalState);

        /* Then something really weird... */

        for (int i = password.length(); i != 0; i >>>= 1) {
            if ((i & 1) != 0) {
                ctx.update(finalState, 0, 1);
            } else {
                ctx.update(password.getBytes(), 0, 1);
            }
        }

        finalState = ctx.digest();

        /*
         * and now, just to make sure things don't run too fast
         * On a 60 Mhz Pentium this takes 34 msec, so you would
         * need 30 seconds to build a 1000 entry dictionary...
         *
         * (The above timings from the C version)
         */

        for (int i = 0; i < 1000; i++) {
            ctx1.reset();

            if ((i & 1) != 0) {
                ctx1.update(password.getBytes());
            } else {
                ctx1.update(finalState, 0, 16);
            }

            if ((i % 3) != 0) {
                ctx1.update(salt.getBytes());
            }

            if ((i % 7) != 0) {
                ctx1.update(password.getBytes());
            }

            if ((i & 1) != 0) {
                ctx1.update(finalState, 0, 16);
            } else {
                ctx1.update(password.getBytes());
            }

            finalState = ctx1.digest();
        }

        /* Now make the output string */

        StringBuilder result = new StringBuilder();

        result.append(magic);
        result.append(salt);
        result.append("$");

        l = (bytes2u(finalState[0]) << 16) | (bytes2u(finalState[6]) << 8) | bytes2u(finalState[12]);
        result.append(to64(l, 4));

        l = (bytes2u(finalState[1]) << 16) | (bytes2u(finalState[7]) << 8) | bytes2u(finalState[13]);
        result.append(to64(l, 4));

        l = (bytes2u(finalState[2]) << 16) | (bytes2u(finalState[8]) << 8) | bytes2u(finalState[14]);
        result.append(to64(l, 4));

        l = (bytes2u(finalState[3]) << 16) | (bytes2u(finalState[9]) << 8) | bytes2u(finalState[15]);
        result.append(to64(l, 4));

        l = (bytes2u(finalState[4]) << 16) | (bytes2u(finalState[10]) << 8) | bytes2u(finalState[5]);
        result.append(to64(l, 4));

        l = bytes2u(finalState[11]);
        result.append(to64(l, 2));

        /* Don't leave anything around in vm they could use. */
        clearbits(finalState);

        return result.toString();
    }

    /**
     * This method tests a plaintext password against a md5Crypt'ed hash and returns
     * true if the password matches the hash.
     *
     * This method will work properly whether the hashtext was crypted
     * using the default FreeBSD md5Crypt algorithm or the Apache
     * md5Crypt variant.
     *
     * @param plaintextPass The plaintext password text to test.
     * @param md5CryptText The Apache or FreeBSD-md5Crypted hash used to authenticate the plaintextPass.
     */
    public static final boolean verifyPassword(String plaintextPass, String md5CryptText) {
        if (md5CryptText.startsWith("$1$")) {
            return md5CryptText.equals(MD5Crypt.crypt(plaintextPass, md5CryptText));
        } else if (md5CryptText.startsWith("$apr1$")) {
            return md5CryptText.equals(MD5Crypt.apacheCrypt(plaintextPass, md5CryptText));
        } else {
            throw new RuntimeException("Bad md5CryptText");
        }
    }
}
PK�����*†9D—5Kùõ��õ����samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/app/controllers/AuthFileSecurity.java/**
 * AuthFileSecurity
 * 31.07.2012
 * @author Philipp Haussleiter
 *
 */
package controllers;

import java.util.Map;
import play.modules.fileauth.FileAuth;

/**
 * This Class provides basice Security Functions for the Play! Security Plugin.
 * @author Philipp Haußleiter
 * <p>
 * Usage:
 * @With(Secure.class)
 * public class Application extends Controller {
 * ...
 * }
 *
 * </p>
 */
public class AuthFileSecurity extends Secure.Security {

    /**
     * Authentify an user against the given AuthFile.
     * @param username the given username.
     * @param password the given password.
     * @return true if username and password matches, otherwise false.
     */
    public static boolean authentify(String username, String password) {
        Map<String,String> users = FileAuth.getUsers();
        String userPassword = users.get(username.toLowerCase());
        return userPassword.equals(password);
    }

    /**
     * Checks if the current user (that is loged in) has the profile (e.g. is in the group).
     * @param profile
     * @return true if the current user has the profile, otherwise false.
     */
    public static boolean check(String profile) {
        String user = connected();
        return FileAuth.contains(profile, user);
    }
}
PK�����*†9D&ÿ‰è¤��¤����samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/documentation/manual/home.textileh1. {module name}

p(note). Write your module documentation in this file, possibly linking to other Textile files, and delete these notes when you are finished.

p(note). Start with a clear statement of what the module is and what it is for. Link to any third-party libraries that the module is based on.

p(note). Briefly describe why you might want to use this module in a Play application.

h2. Sample application

p(note). Your module should contain a sample app in the @sample@ directory that demonstrates the module. Describe how to run the demo here.

h2. Getting started

p(note). Describe any installation that is required, beyond adding and resolving the module dependency.

h2. Configuration

p(note). List any configuration options that the module uses, with an @h3.@ heading for each one.

h2. Usage

p(note). Explain how to use the module, and describe any routes, controllers, models or views that the module provides.

h2. Tags

p(note). List any tags the module provides, with an @h3.@ heading for each one. Include the tags’ arguments.

h2. Commands

p(note). List any commands the module provides, with an @h3.@ heading for each one. Include the commands’ options.
PK�����*†9D´šü¯��¯��*��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/public/images/favicon.png‰PNG

���
IHDR���������óÿa���tEXtSoftware�Adobe ImageReadyqÉe<��QIDATxÚ”SËNA=U]5]Ý=ï1agŒhf£+0ˆ‰Á †n\¹gãÒ¿p#ì4¢?`t¯	WFƒH$H$dŒ™Gw•·›o÷M×+çœ{O53Æàú�Œ^sÑIšéJáü½Bnà18­ÃC_­fÛG©8ˆk#7€h—BÈ,KÀMª±SçrÕMwav©^›i4v<‹	ü+"�ÎmJÛQea+¤Žed×§–¼zYßü2(¬cŒÐFp¡ìÓ`
Aƒ›ÈBåý¡5ÿÍܧ·™±¨"«€¤úeV(§æÐ<±!D‰.7³é®Ì.®×fÚ~Ë#šÃ�¶HUÊÍ84ÞÍ@<x™XWcê}}þÅ÷­oUÉåáHÛ)	åqMìûεVˆ©4…øðòÎÛ¹•úÒ-?ð#�±«@€ÕÇe<êGhíÁ—8ÙšêéÛO¶?Ó^æ]`4Ùh».<b$ߏè¶6­vùD/&‡oΧ¼´¿§€qeK?îE—å/fzš~Žt1^šX½\{äż´µ¶Ð·”wÒ„è}~_ûHû`~`ûzÿ•gÅô‰û´üúO‚ÀN¯T‰È1”²OöàjåRm¨xvšŽ=¥Ü9XZÀ¥ªXvœic£Au†r'Ê£«ãå’ë<¤#Ÿ;]å@:‰J`)úQ8ªÝ}[“ý£Ï‹™®Cr;ð˜“ëNå1Y©
Êå¡çk_7.üj5ïÒ¸Îÿ'0�Û¤û»ý
����IEND®B`‚PK�����*†9Dä |;f�f�7��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/public/javascripts/jquery-1.6.4.min.js/*! jQuery v1.6.4 http://jquery.com/ | http://jquery.org/license */
(function(a,b){function cu(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cr(a){if(!cg[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ch||(ch=c.createElement("iframe"),ch.frameBorder=ch.width=ch.height=0),b.appendChild(ch);if(!ci||!ch.createElement)ci=(ch.contentWindow||ch.contentDocument).document,ci.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),ci.close();d=ci.createElement(a),ci.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ch)}cg[a]=e}return cg[a]}function cq(a,b){var c={};f.each(cm.concat.apply([],cm.slice(0,b)),function(){c[this]=a});return c}function cp(){cn=b}function co(){setTimeout(cp,0);return cn=f.now()}function cf(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ce(){try{return new a.XMLHttpRequest}catch(b){}}function b$(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function bZ(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function bY(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bA.test(a)?d(a,e):bY(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)bY(a+"["+e+"]",b[e],c,d);else d(a,b)}function bX(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function bW(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bP,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=bW(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=bW(a,c,d,e,"*",g));return l}function bV(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bL),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function by(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bt:bu;if(d>0){c!=="border"&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0});return d+"px"}d=bv(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+this))||0)});return d+"px"}function bl(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bd,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bk(a){f.nodeName(a,"input")?bj(a):"getElementsByTagName"in a&&f.grep(a.getElementsByTagName("input"),bj)}function bj(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bi(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function bh(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bg(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;e=e[c]=f.extend({},d);if(g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;i<j;i++)f.event.add(b,h+(g[h][i].namespace?".":"")+g[h][i].namespace,g[h][i],g[h][i].data)}}}}function bf(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function V(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(Q.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function U(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function M(a,b){return(a&&a!=="*"?a+".":"")+b.replace(y,"`").replace(z,"&")}function L(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;i<s.length;i++)g=s[i],g.origType.replace(w,"")===a.type?q.push(g.selector):s.splice(i--,1);e=f(a.target).closest(q,a.currentTarget);for(j=0,k=e.length;j<k;j++){m=e[j];for(i=0;i<s.length;i++){g=s[i];if(m.selector===g.selector&&(!n||n.test(g.namespace))&&!m.elem.disabled){h=m.elem,d=null;if(g.preType==="mouseenter"||g.preType==="mouseleave")a.type=g.preType,d=f(a.relatedTarget).closest(g.selector)[0],d&&f.contains(h,d)&&(d=h);(!d||d!==h)&&p.push({elem:h,handleObj:g,level:m.level})}}}for(j=0,k=p.length;j<k;j++){e=p[j];if(c&&e.level>c)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function J(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function D(){return!0}function C(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function K(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(K,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=/-([a-z]|[0-9])/ig,x=/^-ms-/,y=function(a,b){return(b+"").toUpperCase()},z=d.userAgent,A,B,C,D=Object.prototype.toString,E=Object.prototype.hasOwnProperty,F=Array.prototype.push,G=Array.prototype.slice,H=String.prototype.trim,I=Array.prototype.indexOf,J={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6.4",length:0,size:function(){return this.length},toArray:function(){return G.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?F.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),B.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(G.apply(this,arguments),"slice",G.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:F,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;B.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!B){B=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",C,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",C),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&K()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):J[D.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!E.call(a,"constructor")&&!E.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||E.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(x,"ms-").replace(w,y)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:H?function(a){return a==null?"":H.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?F.call(c,a):e.merge(c,a)}return c},inArray:function(a,b){if(!b)return-1;if(I)return I.call(b,a);for(var c=0,d=b.length;c<d;c++)if(b[c]===a)return c;return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=G.call(arguments,2),g=function(){return a.apply(c,f.concat(G.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=s.exec(a)||t.exec(a)||u.exec(a)||a.indexOf("compatible")<0&&v.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){J["[object "+b+"]"]=b.toLowerCase()}),A=e.uaMatch(z),A.browser&&(e.browser[A.browser]=!0,e.browser.version=A.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?C=function(){c.removeEventListener("DOMContentLoaded",C,!1),e.ready()}:c.attachEvent&&(C=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",C),e.ready())});return e}(),g="done fail isResolved isRejected promise then always pipe".split(" "),h=[].slice;f.extend({_Deferred:function(){var a=[],b,c,d,e={done:function(){if(!d){var c=arguments,g,h,i,j,k;b&&(k=b,b=0);for(g=0,h=c.length;g<h;g++)i=c[g],j=f.type(i),j==="array"?e.done.apply(e,i):j==="function"&&a.push(i);k&&e.resolveWith(k[0],k[1])}return this},resolveWith:function(e,f){if(!d&&!b&&!c){f=f||[],c=1;try{while(a[0])a.shift().apply(e,f)}finally{b=[e,f],c=0}}return this},resolve:function(){e.resolveWith(this,arguments);return this},isResolved:function(){return!!c||!!b},cancel:function(){d=1,a=[];return this}};return e},Deferred:function(a){var b=f._Deferred(),c=f._Deferred(),d;f.extend(b,{then:function(a,c){b.done(a).fail(c);return this},always:function(){return b.done.apply(b,arguments).fail.apply(this,arguments)},fail:c.done,rejectWith:c.resolveWith,reject:c.resolve,isRejected:c.isResolved,pipe:function(a,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[c,"reject"]},function(a,c){var e=c[0],g=c[1],h;f.isFunction(e)?b[a](function(){h=e.apply(this,arguments),h&&f.isFunction(h.promise)?h.promise().then(d.resolve,d.reject):d[g+"With"](this===b?d:this,[h])}):b[a](d[g])})}).promise()},promise:function(a){if(a==null){if(d)return d;d=a={}}var c=g.length;while(c--)a[g[c]]=b[g[c]];return a}}),b.done(c.cancel).fail(b.cancel),delete b.cancel,a&&a.call(b,b);return b},when:function(a){function i(a){return function(c){b[a]=arguments.length>1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c<d;c++)b[c]&&f.isFunction(b[c].promise)?b[c].promise().then(i(c),g.reject):--e;e||g.resolveWith(g,b)}else g!==a&&g.resolveWith(g,d?[a]:[]);return g.promise()}}),f.support=function(){var a=c.createElement("div"),b=c.documentElement,d,e,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;a.setAttribute("className","t"),a.innerHTML="   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55$/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue=i.value==="t",i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.firstChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},m&&f.extend(p,{position:"absolute",left:"-1000px",top:"-1000px"});for(t in p)o.style[t]=p[t];o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,k.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="<div style='width:4px;'></div>",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",q=a.getElementsByTagName("td"),u=q[0].offsetHeight===0,q[0].style.display="",q[1].style.display="none",k.reliableHiddenOffsets=u&&q[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",a.appendChild(j),k.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0),o.innerHTML="",n.removeChild(o);if(a.attachEvent)for(t in{submit:1,change:1,focusin:1})s="on"+t,u=s in a,u||(a.setAttribute(s,"return;"),u=typeof a[s]=="function"),k[t+"Bubbles"]=u;o=l=g=h=m=j=a=i=null;return k}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i=f.expando,j=typeof c=="string",k=a.nodeType,l=k?f.cache:a,m=k?a[f.expando]:a[f.expando]&&f.expando;if((!m||e&&m&&l[m]&&!l[m][i])&&j&&d===b)return;m||(k?a[f.expando]=m=++f.uuid:m=f.expando),l[m]||(l[m]={},k||(l[m].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?l[m][i]=f.extend(l[m][i],c):l[m]=f.extend(l[m],c);g=l[m],e&&(g[i]||(g[i]={}),g=g[i]),d!==b&&(g[f.camelCase(c)]=d);if(c==="events"&&!g[c])return g[i]&&g[i].events;j?(h=g[c],h==null&&(h=g[f.camelCase(c)])):h=g;return h}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e=f.expando,g=a.nodeType,h=g?f.cache:a,i=g?a[f.expando]:f.expando;if(!h[i])return;if(b){d=c?h[i][e]:h[i];if(d){d[b]||(b=f.camelCase(b)),delete d[b];if(!l(d))return}}if(c){delete h[i][e];if(!l(h[i]))return}var j=h[i][e];f.support.deleteExpando||!h.setInterval?delete h[i]:h[i]=null,j?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=j):g&&(f.support.deleteExpando?delete a[f.expando]:a.removeAttribute?a.removeAttribute(f.expando):a[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h<i;h++)g=e[h].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),k(this[0],g,d[g]))}}return d}if(typeof a=="object")return this.each(function(){f.data(this,a)});var j=a.split(".");j[1]=j[1]?"."+j[1]:"";if(c===b){d=this.triggerHandler("getData"+j[1]+"!",[j[0]]),d===b&&this.length&&(d=f.data(this[0],a),d=k(this[0],a,d));return d===b&&j[1]?this.data(j[0]):d}return this.each(function(){var b=f(this),d=[j[0],c];b.triggerHandler("setData"+j[1]+"!",d),f.data(this,a,c),b.triggerHandler("changeData"+j[1]+"!",d)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,c){a&&(c=(c||"fx")+"mark",f.data(a,c,(f.data(a,c,b,!0)||0)+1,!0))},_unmark:function(a,c,d){a!==!0&&(d=c,c=a,a=!1);if(c){d=d||"fx";var e=d+"mark",g=a?0:(f.data(c,e,b,!0)||1)-1;g?f.data(c,e,g,!0):(f.removeData(c,e,!0),m(c,d,"mark"))}},queue:function(a,c,d){if(a){c=(c||"fx")+"queue";var e=f.data(a,c,b,!0);d&&(!e||f.isArray(d)?e=f.data(a,c,f.makeArray(d),!0):e.push(d));return e||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e;d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),d.call(a,function(){f.dequeue(a,b)})),c.length||(f.removeData(a,b+"queue",!0),m(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(){var c=this;setTimeout(function(){f.dequeue(c,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f._Deferred(),!0))h++,l.done(m);m();return d.promise()}});var n=/[\n\t\r]/g,o=/\s+/,p=/\r/g,q=/^(?:button|input)$/i,r=/^(?:button|input|object|select|textarea)$/i,s=/^a(?:rea)?$/i,t=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,u,v;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(o);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(o);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(n," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(o);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ";for(var c=0,d=this.length;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(n," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;d=e.value;return typeof d=="string"?d.replace(p,""):d==null?"":d}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c=a.selectedIndex,d=[],e=a.options,g=a.type==="select-one";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h<i;h++){var j=e[h];if(j.selected&&(f.support.optDisabled?!j.disabled:j.getAttribute("disabled")===null)&&(!j.parentNode.disabled||!f.nodeName(j.parentNode,"optgroup"))){b=f(j).val();if(g)return b;d.push(b)}}if(g&&!d.length&&e.length)return f(e[c]).val();return d},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);j&&(c=f.attrFix[c]||c,i=f.attrHooks[c],i||(t.test(c)?i=v:u&&(i=u)));if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j&&(h=i.get(a,c))!==null)return h;h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.attr(a,b,""),a.removeAttribute(b),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(u&&f.nodeName(a,"button"))return u.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(u&&f.nodeName(a,"button"))return u.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);i&&(c=f.propFix[c]||c,h=f.propHooks[c]);return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==null?g:a[c]},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabIndex=f.propHooks.tabIndex,v={get:function(a,c){var d;return f.prop(a,c)===!0||(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},f.support.getSetAttribute||(u=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==""?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var w=/\.(.*)$/,x=/^(?:textarea|input|select)$/i,y=/\./g,z=/ /g,A=/[^\w\s.|`]/g,B=function(a){return a.replace(A,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=C;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=C);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),B).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j<p.length;j++){q=p[j];if(l||n.test(q.namespace))f.event.remove(a,r,q.handler,j),p.splice(j--,1)}continue}o=f.event.special[h]||{};for(j=e||0;j<p.length;j++){q=p[j];if(d.guid===q.guid){if(l||n.test(q.namespace))e==null&&p.splice(j--,1),o.remove&&o.remove.call(a,q);if(e!=null)break}}if(p.length===0||e!=null&&p.length===1)(!o.teardown||o.teardown.call(a,m)===!1)&&f.removeEvent(a,h,s.handle),g=null,delete 
t[h]}if(f.isEmptyObject(t)){var u=s.handle;u&&(u.elem=null),delete s.events,delete s.handle,f.isEmptyObject(s)&&f.removeData(a,b,!0)}}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){var h=c.type||c,i=[],j;h.indexOf("!")>=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d!=null?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h<i;h++){var j=d[h];if(e||c.namespace_re.test(j.namespace)){c.handler=j.handler,c.data=j.data,c.handleObj=j;var k=j.handler.apply(this,g);k!==b&&(c.result=k,k===!1&&(c.preventDefault(),c.stopPropagation()));if(c.isImmediatePropagationStopped())break}}return c.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(a){if(a[f.expando])return a;var d=a;a=f.Event(d);for(var e=this.props.length,g;e;)g=this.props[--e],a[g]=d[g];a.target||(a.target=a.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),!a.relatedTarget&&a.fromElement&&(a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement);if(a.pageX==null&&a.clientX!=null){var h=a.target.ownerDocument||c,i=h.documentElement,j=h.body;a.pageX=a.clientX+(i&&i.scrollLeft||j&&j.scrollLeft||0)-(i&&i.clientLeft||j&&j.clientLeft||0),a.pageY=a.clientY+(i&&i.scrollTop||j&&j.scrollTop||0)-(i&&i.clientTop||j&&j.clientTop||0)}a.which==null&&(a.charCode!=null||a.keyCode!=null)&&(a.which=a.charCode!=null?a.charCode:a.keyCode),!a.metaKey&&a.ctrlKey&&(a.metaKey=a.ctrlKey),!a.which&&a.button!==b&&(a.which=a.button&1?1:a.button&2?3:a.button&4?2:0);return a},guid:1e8,proxy:f.proxy,special:{ready:{setup:f.bindReady,teardown:f.noop},live:{add:function(a){f.event.add(this,M(a.origType,a.selector),f.extend({},a,{handler:L,guid:a.handler.guid}))},remove:function(a){f.event.remove(this,M(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}}},f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!this.preventDefault)return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?D:C):this.type=a,b&&f.extend(this,b),this.timeStamp=f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=D;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=D;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=D,this.stopPropagation()},isDefaultPrevented:C,isPropagationStopped:C,isImmediatePropagationStopped:C};var E=function(a){var b=a.relatedTarget,c=!1,d=a.type;a.type=a.data,b!==this&&(b&&(c=f.contains(this,b)),c||(f.event.handle.apply(this,arguments),a.type=d))},F=function(a){a.type=a.data,f.event.handle.apply(this,arguments)};f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={setup:function(c){f.event.add(this,b,c&&c.selector?F:E,a)},teardown:function(a){f.event.remove(this,b,a&&a.selector?F:E)}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(a,b){if(!f.nodeName(this,"form"))f.event.add(this,"click.specialSubmit",function(a){var b=a.target,c=f.nodeName(b,"input")||f.nodeName(b,"button")?b.type:"";(c==="submit"||c==="image")&&f(b).closest("form").length&&J("submit",this,arguments)}),f.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,c=f.nodeName(b,"input")||f.nodeName(b,"button")?b.type:"";(c==="text"||c==="password")&&f(b).closest("form").length&&a.keyCode===13&&J("submit",this,arguments)});else return!1},teardown:function(a){f.event.remove(this,".specialSubmit")}});if(!f.support.changeBubbles){var G,H=function(a){var b=f.nodeName(a,"input")?a.type:"",c=a.value;b==="radio"||b==="checkbox"?c=a.checked:b==="select-multiple"?c=a.selectedIndex>-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},I=function(c){var d=c.target,e,g;if(!!x.test(d.nodeName)&&!d.readOnly){e=f._data(d,"_change_data"),g=H(d),(c.type!=="focusout"||d.type!=="radio")&&f._data(d,"_change_data",g);if(e===b||g===e)return;if(e!=null||g)c.type="change",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:I,beforedeactivate:I,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&I.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&I.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",H(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in G)f.event.add(this,c+".specialChange",G[c]);return x.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return x.test(this.nodeName)}},G=f.event.special.change.filters,G.focus=G.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i<j;i++)f.event.add(this[i],a,g,d);return this}}),f.fn.extend({unbind:function(a,b){if(typeof a=="object"&&!a.preventDefault)for(var c in a)this.unbind(c,a[c]);else for(var d=0,e=this.length;d<e;d++)f.event.remove(this[d],a,b);return this},delegate:function(a,b,c,d){return this.live(b,c,d,a)},undelegate:function(a,b,c){return arguments.length===0?this.unbind("live"):this.die(b,null,c,a)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f.data(this,"lastToggle"+a.guid)||0)%d;f.data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var K={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};f.each(["live","die"],function(a,c){f.fn[c]=function(a,d,e,g){var h,i=0,j,k,l,m=g||this.selector,n=g?this:f(this.context);if(typeof a=="object"&&!a.preventDefault){for(var o in a)n[c](o,d,a[o],m);return this}if(c==="die"&&!a&&g&&g.charAt(0)==="."){n.unbind(g);return this}if(d===!1||f.isFunction(d))e=d||C,d=b;a=(a||"").split(" ");while((h=a[i++])!=null){j=w.exec(h),k="",j&&(k=j[0],h=h.replace(w,""));if(h==="hover"){a.push("mouseenter"+k,"mouseleave"+k);continue}l=h,K[h]?(a.push(K[h]+k),h=h+k):h=(K[h]||h)+k;if(c==="live")for(var p=0,q=n.length;p<q;p++)f.event.add(n[p],"live."+M(h,m),{data:d,selector:m,handler:e,origType:h,origHandler:e,preType:l});else n.unbind("live."+M(h,m),e)}return this}}),f.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".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}if(i.nodeType===1){f||(i.sizcache=c,i.sizset=g);if(typeof b!="string"){if(i===b){j=!0;break}}else if(k.filter(b,[i]).length>0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}i.nodeType===1&&!f&&(i.sizcache=c,i.sizset=g);if(i.nodeName.toLowerCase()===b){j=i;break}i=i[a]}d[g]=j}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},k.matches=function(a,b){return k(a,null,null,b)},k.matchesSelector=function(a,b){return k(b,null,null,[a]).length>0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e<f;e++){var g,h=l.order[e];if(g=l.leftMatch[h].exec(a)){var j=g[1];g.splice(1,1);if(j.substr(j.length-1)!=="\\"){g[1]=(g[1]||"").replace(i,""),d=l.find[h](g,b,c);if(d!=null){a=a.replace(l.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},k.filter=function(a,c,d,e){var f,g,h=a,i=[],j=c,m=c&&c[0]&&k.isXML(c[0]);while(a&&c.length){for(var n in l.filter)if((f=l.leftMatch[n].exec(a))!=null&&f[2]){var o,p,q=l.filter[n],r=f[1];g=!1,f.splice(1,1);if(r.substr(r.length-1)==="\\")continue;j===i&&(i=[]);if(l.preFilter[n]){f=l.preFilter[n](f,j,d,i,e,m);if(!f)g=o=!0;else if(f===!0)continue}if(f)for(var s=0;(p=j[s])!=null;s++)if(p){o=q(p,f,s,j);var t=e^!!o;d&&o!=null?t?g=!0:j[s]=!1:t&&(i.push(p),g=!0)}if(o!==b){d||(j=i),a=a.replace(l.match[n],"");if(!g)return[];break}}if(a===h)if(g==null)k.error(a);else break;h=a}return j},k.error=function(a){throw"Syntax error, unrecognized expression: "+a};var l=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!j.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&k.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&k.filter(b,a,!0)}},"":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("parentNode",b,f,a,e,c)},"~":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("previousSibling",b,f,a,e,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(i,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}k.error(e)},CHILD:function(a,b){var c=b[1],d=a;switch(c){case"only":case"first":while(d=d.previousSibling)if(d.nodeType===1)return!1;if(c==="first")return!0;d=a;case"last":while(d=d.nextSibling)if(d.nodeType===1)return!1;return!0;case"nth":var e=b[2],f=b[3];if(e===1&&f===0)return!0;var g=b[0],h=a.parentNode;if(h&&(h.sizcache!==g||!a.nodeIndex)){var i=0;for(d=h.firstChild;d;d=d.nextSibling)d.nodeType===1&&(d.nodeIndex=++i);h.sizcache=g}var j=a.nodeIndex-f;return e===0?j===0:j%e===0&&j/e>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c<f;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var r,s;c.documentElement.compareDocumentPosition?r=function(a,b){if(a===b){g=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(r=function(a,b){if(a===b){g=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],h=a.parentNode,i=b.parentNode,j=h;if(h===i)return s(a,b);if(!h)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return s(e[k],f[k]);return k===c?s(a,f[k],-1):s(e[k],b,1)},s=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),k.getText=function(a){var b="",c;for(var d=0;a[d];d++)c=a[d],c.nodeType===3||c.nodeType===4?b+=c.nodeValue:c.nodeType!==8&&(b+=k.getText(c.childNodes));return b},function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g<h;g++)k(a,f[g],d);return k.filter(e,d)};f.find=k,f.expr=k.selectors,f.expr[":"]=f.expr.filters,f.unique=k.uniqueSort,f.text=k.getText,f.isXMLDoc=k.isXML,f.contains=k.contains}();var N=/Until$/,O=/^(?:parents|prevUntil|prevAll)/,P=/,/,Q=/^.[^:#\[\.,]*$/,R=Array.prototype.slice,S=f.expr.match.POS,T={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(V(this,a,!1),"not",a)},filter:function(a){return this.pushStack(V(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d<e;d++)i=a[d],j[i]||(j[i]=S.test(i)?f(i,b||this.context):i);while(g&&g.ownerDocument&&g!==b){for(i in j)h=j[i],(h.jquery?h.index(g)>-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=S.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(l?l.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(U(c[0])||U(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=R.call(arguments);N.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!T[a]?f.unique(e):e,(this.length>1||P.test(d))&&O.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|object|embed|option|style)/i,bb=/checked\s*(?:[^=]|=\s*.checked.)/i,bc=/\/(java|ecma)script/i,bd=/^\s*<!(?:\[CDATA\[|\-\-)/,be={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};be.optgroup=be.option,be.tbody=be.tfoot=be.colgroup=be.caption=be.thead,be.th=be.td,f.support.htmlSerialize||(be._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!be[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bb.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bf(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bl)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i;b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof a[0]=="string"&&a[0].length<512&&i===c&&a[0].charAt(0)==="<"&&!ba.test(a[0])&&(f.support.checkClone||!bb.test(a[0]))&&(g=!0,h=f.fragments[a[0]],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean
(a,i,e,d)),g&&(f.fragments[a[0]]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bh(a,d),e=bi(a),g=bi(d);for(h=0;e[h];++h)g[h]&&bh(e[h],g[h])}if(b){bg(a,d);if(c){e=bi(a),g=bi(d);for(h=0;e[h];++h)bg(e[h],g[h])}}e=g=null;return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=be[l]||be._default,n=m[0],o=b.createElement("div");o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bk(k[i]);else bk(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||bc.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.expando,g=f.event.special,h=f.support.deleteExpando;for(var i=0,j;(j=a[i])!=null;i++){if(j.nodeName&&f.noData[j.nodeName.toLowerCase()])continue;c=j[f.expando];if(c){b=d[c]&&d[c][e];if(b&&b.events){for(var k in b.events)g[k]?f.event.remove(j,k):f.removeEvent(j,k,b.handle);b.handle&&(b.handle.elem=null)}h?delete j[f.expando]:j.removeAttribute&&j.removeAttribute(f.expando),delete d[c]}}}});var bm=/alpha\([^)]*\)/i,bn=/opacity=([^)]*)/,bo=/([A-Z]|^ms)/g,bp=/^-?\d+(?:px)?$/i,bq=/^-?\d/,br=/^([\-+])=([\-+.\de]+)/,bs={position:"absolute",visibility:"hidden",display:"block"},bt=["Left","Right"],bu=["Top","Bottom"],bv,bw,bx;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bv(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=br.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bv)return bv(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return by(a,b,d);f.swap(a,bs,function(){e=by(a,b,d)});return e}},set:function(a,b){if(!bp.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bn.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bm,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bm.test(g)?g.replace(bm,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bv(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bw=function(a,c){var d,e,g;c=c.replace(bo,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bx=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bp.test(d)&&bq.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bv=bw||bx,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bz=/%20/g,bA=/\[\]$/,bB=/\r?\n/g,bC=/#.*$/,bD=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bE=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bF=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bG=/^(?:GET|HEAD)$/,bH=/^\/\//,bI=/\?/,bJ=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bK=/^(?:select|textarea)/i,bL=/\s+/,bM=/([?&])_=[^&]*/,bN=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bO=f.fn.load,bP={},bQ={},bR,bS,bT=["*/"]+["*"];try{bR=e.href}catch(bU){bR=c.createElement("a"),bR.href="",bR=bR.href}bS=bN.exec(bR.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bO)return bO.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bJ,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bK.test(this.nodeName)||bE.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bB,"\r\n")}}):{name:b.name,value:c.replace(bB,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?bX(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),bX(a,b);return a},ajaxSettings:{url:bR,isLocal:bF.test(bS[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bT},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bV(bP),ajaxTransport:bV(bQ),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?bZ(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=b$(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bD.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bC,"").replace(bH,bS[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bL),d.crossDomain==null&&(r=bN.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bS[1]&&r[2]==bS[2]&&(r[3]||(r[1]==="http:"?80:443))==(bS[3]||(bS[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bW(bP,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bG.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bI.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bM,"$1_="+x);d.url=y+(y===d.url?(bI.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bT+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bW(bQ,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){s<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)bY(g,a[g],c,e);return d.join("&").replace(bz,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var b_=f.now(),ca=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+b_++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ca.test(b.url)||e&&ca.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ca,l),b.url===j&&(e&&(k=k.replace(ca,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cb=a.ActiveXObject?function(){for(var a in cd)cd[a](0,1)}:!1,cc=0,cd;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ce()||cf()}:ce,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cb&&delete cd[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cc,cb&&(cd||(cd={},f(a).unload(cb)),cd[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cg={},ch,ci,cj=/^(?:toggle|show|hide)$/,ck=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cl,cm=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cn;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cq("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cr(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cq("hide",3),a,b,c);for(var d=0,e=this.length;d<e;d++)if(this[d].style){var g=f.css(this[d],"display");g!=="none"&&!f._data(this[d],"olddisplay")&&f._data(this[d],"olddisplay",g)}for(d=0;d<e;d++)this[d].style&&(this[d].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cq("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return this[e.queue===!1?"each":"queue"](function(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(f.support.inlineBlockNeedsLayout?(j=cr(this.nodeName),j==="inline"?this.style.display="inline-block":(this.style.display="inline",this.style.zoom=1)):this.style.display="inline-block"))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)k=new f.fx(this,b,i),h=a[i],cj.test(h)?k[h==="toggle"?d?"show":"hide":h]():(l=ck.exec(h),m=k.cur(),l?(n=parseFloat(l[2]),o=l[3]||(f.cssNumber[i]?"":"px"),o!=="px"&&(f.style(this,i,(n||1)+o),m=(n||1)/k.cur()*m,f.style(this,i,m+o)),l[1]&&(n=(l[1]==="-="?-1:1)*n+m),k.custom(m,n,o)):k.custom(m,h,""));return!0})},stop:function(a,b){a&&this.queue([]),this.each(function(){var a=f.timers,c=a.length;b||f._unmark(!0,this);while(c--)a[c].elem===this&&(b&&a[c](!0),a.splice(c,1))}),b||this.dequeue();return this}}),f.each({slideDown:cq("show",1),slideUp:cq("hide",1),slideToggle:cq("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default,d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue!==!1?f.dequeue(this):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,b,c){function g(a){return d.step(a)}var d=this,e=f.fx;this.startTime=cn||co(),this.start=a,this.end=b,this.unit=c||this.unit||(f.cssNumber[this.prop]?"":"px"),this.now=this.start,this.pos=this.state=0,g.elem=this.elem,g()&&f.timers.push(g)&&!cl&&(cl=setInterval(e.tick,e.interval))},show:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.show=!0,this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b=cn||co(),c=!0,d=this.elem,e=this.options,g,h;if(a||b>=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){for(var a=f.timers,b=0;b<a.length;++b)a[b]()||a.splice(b--,1);a.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cl),cl=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit:a.elem[a.prop]=a.now}}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cs=/^t(?:able|d|h)$/i,ct=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cu(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);f.offset.initialize();var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.offset.supportsFixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.offset.doesNotAddBorder&&(!f.offset.doesAddBorderForTableAndCells||!cs.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.offset.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.offset.supportsFixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={initialize:function(){var a=c.body,b=c.createElement("div"),d,e,g,h,i=parseFloat(f.css(a,"marginTop"))||0,j="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=ct.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!ct.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cu(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cu(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a&&a.style?parseFloat(f.css(a,d,"padding")):null},f.fn["outer"+c]=function(a){var b=this[0];return b&&b.style?parseFloat(f.css(b,d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNaN(j)?i:j}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window);PK�����*†9D������������,��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/public/stylesheets/main.cssPK�����*†9D_5¢<���<�����samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/htgroupsroot: root apacheRoot
users: root apacheRoot user apacheUserPK�����*†9D(ÉÆ9����)��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/EncryptionTest.java
import org.junit.Test;
import play.Logger;
import play.modules.fileauth.utils.MD5Crypt;
import play.test.UnitTest;

/**
 * EncryptionTest
 * 31.07.2012
 * @author Philipp Haussleiter
 *
 */
public class EncryptionTest extends UnitTest {

    @Test
    public void testApacheCrypt() {
        Logger.info("testing APACHE_CRYPT");
        String clear = "pw_" + System.currentTimeMillis();
        String pass;
        String salt = "abcd1234";
        pass = MD5Crypt.apacheCrypt(clear);
        Logger.info(clear + " got me " + pass);
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
        pass = MD5Crypt.apacheCrypt(clear, salt);
        Logger.info(clear + " & salt " + salt + " got me " + pass);
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
    }

    @Test
    public void testCrypt() {
        Logger.info("testing CRYPT");
        String clear = "pw_" + System.currentTimeMillis();
        String pass;
        String salt = "abcd1234";
        pass = MD5Crypt.crypt(clear);
        Logger.info(clear + " got me " + pass);
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
        pass = MD5Crypt.crypt(clear, salt);
        Logger.info(clear + " & salt " + salt + " got me " + pass);
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
    }
}
PK�����*†9D*˜,-I��I��*��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/ApacheUsersTest.java
import java.util.HashMap;
import java.util.Map;
import org.junit.BeforeClass;
import org.junit.Test;
import play.Play;
import play.cache.Cache;
import play.modules.fileauth.FileAuth;
import play.modules.fileauth.utils.MD5Crypt;
import play.test.UnitTest;

/**
 * ApacheUsersTest
 * 03.08.2012
 * @author Philipp Haussleiter
 *
 */
public class ApacheUsersTest extends UnitTest {

    @BeforeClass
    public static void setup() {
        Play.configuration.setProperty("authfile.users.path", Play.applicationPath + "/test/htusers");
        Play.configuration.setProperty("authfile.users.delimeter", ":");
        Cache.safeDelete(FileAuth.AUTH_FILE_USERS_CACHE_KEY);
        FileAuth.scanUsers();
    }

    @Test
    public void testUsersRead() {
        Map<String, String> users = Cache.get(FileAuth.AUTH_FILE_USERS_CACHE_KEY, HashMap.class);
        assertNotNull(users);
    }

    @Test
    public void testUsersValidate() {
        String clear = "user";
        String pass = MD5Crypt.crypt("user");
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
    }

    @Test
    public void testValidatePassword() {
        String pass = "user";
        String user = "user";
        assertTrue(FileAuth.validate(user, pass));
        user = "apacheUser";
        assertTrue(FileAuth.validate(user, pass));
        user = "user";
        pass = "user123";
        assertFalse(FileAuth.validate(user, pass));
    }

    @Test
    public void testValidateNotExistingUser() {
        String pass = "user123";
        String user = "user123";
        assertFalse(FileAuth.validate(user, pass));
    }
}
PK�����*†9DÄžŒÒù��ù��*��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/GroupGroupsTest.java
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.junit.BeforeClass;
import org.junit.Test;
import play.Play;
import play.cache.Cache;
import play.modules.fileauth.FileAuth;
import play.test.UnitTest;

/**
 * GroupGroupsTest
 * 04.08.2012
 * @author Philipp Haussleiter
 *
 */
public class GroupGroupsTest extends UnitTest {

    @BeforeClass
    public static void setup() {
        Play.configuration.setProperty("authfile.groups.path", Play.applicationPath + "/test/group");
        Play.configuration.setProperty("authfile.users.delimeter", ":");
        Play.configuration.setProperty("authfile.groups.delimeter", ",");
        Cache.safeDelete(FileAuth.AUTH_FILE_GROUPS_CACHE_KEY);
    }

    @Test
    public void testUsersRead() {
        FileAuth.scanGroups();
        Map<String, Set<String>> groups = Cache.get(FileAuth.AUTH_FILE_GROUPS_CACHE_KEY, HashMap.class);
        assertNotNull(groups);
    }

    @Test
    public void testGroupContainsUser() {
        String user = "user";
        String group = "users";
        assertTrue(FileAuth.contains(group, user));
        user = "root";
        assertTrue(FileAuth.contains(group, user));
    }

    @Test
    public void testGroupNotContainsUser() {
        String user = "user";
        String group = "root";
        assertFalse(FileAuth.contains(group, user));
    }

    public void testGroupNotExists() {
        String user = "user";
        String group = "user";
        assertFalse(FileAuth.contains(group, user));
    }
}PK�����*†9D?5'³g��g��*��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/ShadowUsersTest.java
import java.util.HashMap;
import java.util.Map;
import org.junit.BeforeClass;
import org.junit.Test;
import play.Logger;
import play.Play;
import play.cache.Cache;
import play.modules.fileauth.FileAuth;
import play.modules.fileauth.utils.MD5Crypt;
import play.test.UnitTest;


/**
 * ShadowUsersTest
 * 04.08.2012
 * @author Philipp Haussleiter
 *
 */
public class ShadowUsersTest extends UnitTest {

    @BeforeClass
    public static void setup() {
        Play.configuration.setProperty("authfile.users.path", Play.applicationPath + "/test/shadow");
        Logger.info("file path: "+Play.configuration.getProperty("authfile.users.path"));
        Play.configuration.setProperty("authfile.users.delimeter", ":");
        Cache.safeDelete(FileAuth.AUTH_FILE_USERS_CACHE_KEY);
    }

    @Test
    public void testUsersRead() {
        FileAuth.scanUsers();
        Map<String, String> users = Cache.get(FileAuth.AUTH_FILE_USERS_CACHE_KEY, HashMap.class);
        assertNotNull(users);
    }

    @Test
    public void testUsersValidate() {
        String clear = "user";
        String pass = MD5Crypt.crypt("user");
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
    }

    @Test
    public void testValidatePassword() {
        String pass = "user";
        String user = "user";
        assertTrue(FileAuth.validate(user, pass));
        user = "user";
        pass = "user123";
        assertFalse(FileAuth.validate(user, pass));
    }

    @Test
    public void testValidateNotExistingUser() {
        String pass = "user123";
        String user = "user123";
        assertFalse(FileAuth.validate(user, pass));
    }
}
PK�����*†9DTâÒ%���%�����samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/grouproot:x:321:root
users:x:123:root,userPK�����*†9Dcé¸���¸�����samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/data.yml# you describe your data using the YAML notation here
# and then load them using Fixtures.load("data.yml")

# User(bob):
#   email: bob@gmail.com
#   password: secret
#   fullname: BobPK�����*†9D<_'²���²�����samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/htusersapacheUser:$apr1$kuwPretH$BPbVoWoDTEFUw.4g1zDKs1
apacheRoot:$apr1$nVmU2aOS$rDZ4.BG3TPT02YBsCVcSG/
root:$1$imw51D2V$aJbVmk2xlEg8q.Y8nh91E.
user:$1$4aMItwK9$PnpH2GeuHDeR2t.jKhQ771
PK�����*†9DÇÀ���À���$��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/BasicTest.javaimport org.junit.*;
import play.test.*;

public class BasicTest extends UnitTest {

    @Test
    public void aVeryImportantThingToTest() {
        assertEquals(2, 1 + 1);
    }

}
PK�����*†9D‰=u���u�����samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/shadowroot:$1$imw51D2V$aJbVmk2xlEg8q.Y8nh91E.:43534:0:435:7:::
user:$1$4aMItwK9$PnpH2GeuHDeR2t.jKhQ771:345345:0:46456:7:::
PK�����*†9D,mˆ÷��÷��+��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/ApacheGroupsTest.java
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.junit.BeforeClass;
import org.junit.Test;
import play.Logger;
import play.Play;
import play.cache.Cache;
import play.modules.fileauth.FileAuth;
import play.test.UnitTest;

/**
 * ApacheGroupsTest 03.08.2012
 *
 * @author Philipp Haussleiter
 *
 */
public class ApacheGroupsTest extends UnitTest {

    @BeforeClass
    public static void setup() {
        Play.configuration.setProperty("authfile.groups.path", Play.applicationPath + "/test/htgroups");
        Play.configuration.setProperty("authfile.users.path", Play.applicationPath + "/test/htusers");
        Play.configuration.setProperty("authfile.users.delimeter", ":");
        Play.configuration.setProperty("authfile.groups.delimeter", " ");
        Cache.safeDelete(FileAuth.AUTH_FILE_GROUPS_CACHE_KEY);
        Cache.safeDelete(FileAuth.AUTH_FILE_USERS_CACHE_KEY);
        FileAuth.scanGroups();
        FileAuth.scanUsers();
    }

    @Test
    public void testGroupsRead() {
        Logger.info("testGroupsRead");
        FileAuth.scanGroups();
        Map<String, Set<String>> groups = Cache.get(FileAuth.AUTH_FILE_GROUPS_CACHE_KEY, HashMap.class);
        assertNotNull(groups);
        int groupSize = groups.size();
        assertTrue(String.format("but was %d ", groupSize), groupSize > 0);
    }

    @Test
    public void testGroupContainsUser() {
        FileAuth.scanGroups();
        FileAuth.scanUsers();
        String user = "user";
        String group = "users";
        assertTrue(String.format("u: %s, g: %s", user, group), FileAuth.contains(group, user));
        user = "root";
        assertTrue(String.format("u: %s, g: %s", user, group), FileAuth.contains(group, user));
    }

    @Test
    public void testGroupNotContainsUser() {
        FileAuth.scanGroups();
        FileAuth.scanUsers();
        String user = "user";
        String group = "root";
        assertFalse(String.format("u: %s, g: %s", user, group), FileAuth.contains(group, user));
    }

    public void testGroupNotExists() {
        FileAuth.scanGroups();
        FileAuth.scanUsers();
        String user = "user";
        String group = "user";
        assertFalse(String.format("u: %s, g: %s", user, group), FileAuth.contains(group, user));
    }
}
PK�����*†9D/%ÈBÔ��Ô����samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/routes# Routes
# This file defines all application routes (Higher priority routes first)
# ~~~~

# Home page
GET     /                                       Application.index

# Ignore favicon requests
GET     /favicon.ico                            404

# Map static resources from the /app/public folder to the /public path
GET     /public/                                staticDir:public

# Catch all
*       /{controller}/{action}                  {controller}.{action}
PK�����*†9D¥#Æ/Ç��Ç��&��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/application.conf# This is the main configuration file for the application.
# ~~~~~
application.name=auth-file-demo

# Application mode
# ~~~~~
# Set to dev to enable instant reloading and other development help.
# Otherwise set to prod.
application.mode=dev
%prod.application.mode=prod

# Secret key
# ~~~~~
# The secret key is used to secure cryptographics functions
# If you deploy your application to several instances be sure to use the same key !
application.secret=uQks53MboMLlGVsJSrPRCipiFOZ4BXn8oDBfOxGxsaXDVtkJOJaIiBNX9SNQoUN8

# i18n
# ~~~~~
# Define locales used by your application.
# You can then place localized messages in conf/messages.{locale} files
# application.langs=fr,en,ja

# Date format
# ~~~~~
date.format=yyyy-MM-dd
# date.format.fr=dd/MM/yyyy

# Server configuration
# ~~~~~
# If you need to change the HTTP port, uncomment this (default is set to 9000)
# http.port=9000
#
# By default the server listen for HTTP on the wilcard address.
# You can restrict this.
# http.address=127.0.0.1
#
# Use this if you don't host your Play application at the root of the domain
# you're serving it from. This parameter has no effect when deployed as a
# war, because the path will be handled by the application server.
# http.path=/

# Session configuration
# ~~~~~~~~~~~~~~~~~~~~~~
# By default, session will be written to the transient PLAY_SESSION cookie.
# The cookies are not secured by default, only set it to true
# if you're serving your pages through https.
# application.session.cookie=PLAY
# application.session.maxAge=1h
# application.session.secure=false

# Session/Cookie sharing between subdomain
# ~~~~~~~~~~~~~~~~~~~~~~
# By default a cookie is only valid for a specific domain. By setting
# application.defaultCookieDomain to '.example.com', the cookies
# will be valid for all domains ending with '.example.com', ie:
# foo.example.com and bar.example.com
# application.defaultCookieDomain=.example.com

# JVM configuration
# ~~~~~
# Define which port is used by JPDA when application is in debug mode (default is set to 8000)
# jpda.port=8000
#
# Java source level => 1.5, 1.6 or 1.7 (experimental)
# java.source=1.5

# Log level
# ~~~~~
# Specify log level for your application.
# If you want a very customized log, create a log4j.properties file in the conf directory
# application.log=INFO
#
# More logging configuration
# application.log.path=/log4j.properties
# application.log.system.out=off

# Database configuration
# ~~~~~ 
# Enable a database engine if needed.
#
# To quickly set up a development database, use either:
#   - mem : for a transient in memory database (H2 in memory)
#   - fs  : for a simple file written database (H2 file stored)
# db=mem
#
# To connect to a local MySQL5 database, use:
# db=mysql://user:pwd@host/database
#
# To connect to a local PostgreSQL9 database, use:
# db=postgres://user:pwd@host/database
#
# If you need a full JDBC configuration use the following :
# db.url=jdbc:postgresql:database_name
# db.driver=org.postgresql.Driver
# db.user=root
# db.pass=secret
#
# Connections pool configuration :
# db.pool.timeout=1000
# db.pool.maxSize=30
# db.pool.minSize=10
#
# If you want to reuse an existing Datasource from your application server, use:
# db=java:/comp/env/jdbc/myDatasource
#
# When using an existing Datasource, it's sometimes needed to destroy it when
# the application is stopped. Depending on the datasource, you can define a
# generic "destroy" method :
# db.destroyMethod=close

# JPA Configuration (Hibernate)
# ~~~~~
#
# Specify the custom JPA dialect to use here (default to guess):
# jpa.dialect=org.hibernate.dialect.PostgreSQLDialect
#
# Specify the ddl generation pattern to use. Set to none to disable it 
# (default to update in DEV mode, and none in PROD mode):
# jpa.ddl=update
#
# Debug SQL statements (logged using DEBUG level):
# jpa.debugSQL=true
#
# You can even specify additional hibernate properties here:
# hibernate.use_sql_comments=true
# ...
#
# Store path for Blob content
attachments.path=data/attachments

# Memcached configuration
# ~~~~~ 
# Enable memcached if needed. Otherwise a local cache is used.
# memcached=enabled
#
# Specify memcached host (default to 127.0.0.1:11211)
# memcached.host=127.0.0.1:11211
#
# Or you can specify multiple host to build a distributed cache
# memcached.1.host=127.0.0.1:11211
# memcached.2.host=127.0.0.1:11212
#
# Use plain SASL to authenticate for memcached
# memcached.user=
# memcached.password=

# HTTP Response headers control for static files
# ~~~~~
# Set the default max-age, telling the user's browser how long it should cache the page.
# Default is 3600 (one hour). Set it to 0 to send no-cache.
# This is only read in prod mode, in dev mode the cache is disabled.
# http.cacheControl=3600

# If enabled, Play will generate entity tags automatically and send a 304 when needed.
# Default is true, set it to false to deactivate use of entity tags.
# http.useETag=true

# Custom mime types
# mimetype.xpi=application/x-xpinstall

# WS configuration
# ~~~~~
# Default engine is Async Http Client, uncomment to use
# the JDK's internal implementation
# webservice = urlfetch
# If you need to set proxy params for WS requests
# http.proxyHost = localhost
# http.proxyPort = 3128
# http.proxyUser = jojo
# http.proxyPassword = jojo

# Mail configuration
# ~~~~~ 
# Default is to use a mock Mailer
mail.smtp=mock

# Or, specify mail host configuration
# mail.smtp.host=127.0.0.1
# mail.smtp.user=admin
# mail.smtp.pass=
# mail.smtp.channel=ssl

# Url-resolving in Jobs
# ~~~~~~
# When rendering templates with reverse-url-resoling (@@{..}) in Jobs (which do not have an inbound Http.Request),
# ie if sending a HtmlMail, Play need to know which url your users use when accessing your app.
# %test.application.baseUrl=http://localhost:9000/
# %prod.application.baseUrl=http://www.yourdomain.com/

# Jobs executor
# ~~~~~~
# Size of the Jobs pool
# play.jobs.pool=10

# Execution pool
# ~~~~~
# Default to 1 thread in DEV mode or (nb processors + 1) threads in PROD mode.
# Try to keep a low as possible. 1 thread will serialize all requests (very useful for debugging purpose)
# play.pool=3

# Open file from errors pages
# ~~~~~
# If your text editor supports opening files by URL, Play! will
# dynamically link error pages to files 
#
# Example, for textmate:
# play.editor=txmt://open?url=file://%s&line=%s

# Testing. Set up a custom configuration for test mode
# ~~~~~
#%test.module.cobertura=${play.path}/modules/cobertura
%test.application.mode=dev
%test.db.url=jdbc:h2:mem:play;MODE=MYSQL;LOCK_MODE=0
%test.jpa.ddl=create
%test.mail.smtp=mock

PK�����*†9D‹úWÀ �� ��&��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/dependencies.yml# Application dependencies

require:
    - play
    - play -> secure
    - local -> play-file-auth 0.2
    
repositories:
    - playCustomModules:
        type:       local
        artifact:   ${application.path}/../../dist/[module]-[revision].zip
        contains:
          - local -> *PK�����*†9Dqé¶h���h�����samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/messages# You can specialize this file for each language.
# For example, for French create a messages.fr file
#
PK�����*†9D«_^)/��/��$��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/main.html<!DOCTYPE html>

<html>
    <head>
        <title>#{get 'title' /}</title>
        <meta charset="${_response_encoding}">
        <link rel="stylesheet" media="screen" href="@{'/public/stylesheets/main.css'}">
        #{get 'moreStyles' /}
        <link rel="shortcut icon" type="image/png" href="@{'/public/images/favicon.png'}">
        <script src="@{'/public/javascripts/jquery-1.6.4.min.js'}" type="text/javascript" charset="${_response_encoding}"></script>
        #{get 'moreScripts' /}
    </head>
    <body>
        #{doLayout /}
    </body>
</html>
PK�����*†9D*º$•<���<���1��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/Application/index.html#{extends 'main.html' /}
#{set title:'Home' /}

#{welcome /}PK�����*†9DÙ¦��¦��*��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/errors/404.html<!DOCTYPE html>

<html>
    <head>
        <title>Not found</title>
        <meta http-equiv="Content-Type" content="text/html; charset=${_response_encoding}"/>    
    </head>
    <body>
        #{if play.mode.name() == 'DEV'}
            #{404 result /}
        #{/if}
        #{else}
            <h1>Not found</h1>
            <p>
                ${result.message}
            </p>
        #{/else}
    </body>
</html>
PK�����*†9DËip®V��V��*��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/errors/500.html<!DOCTYPE html>

<html>
    <head>
        <title>Application error</title>
        <meta http-equiv="Content-Type" content="text/html; charset=${_response_encoding}"/>	
    </head>
    <body>
        #{if play.mode.name() == 'DEV'}
            #{500 exception /}
        #{/if}
        #{else}
            <h1>Oops, an error occured</h1>
            #{if exception instanceof play.exceptions.PlayException}
                <p>
                    This exception has been logged with id <strong>${exception.id}</strong>.
                </p>
            #{/if}
        #{/else}
    </body>
</html>
PK�����*†9D¤8r“���“���1��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/controllers/Application.javapackage controllers;
import play.mvc.*;

public class Application extends Controller {

    public static void index() {
        render();
    }

}PK�����*†9Dp­b’$���$�����samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/secure/opt/play/play-1.2.5/modules/secure
PK�����*†9DD6I÷P��P��7��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.py# Here you can create play commands that are specific to the module, and extend existing commands

MODULE = 'play-file-auth'

# Commands that are specific to your module

COMMANDS = ['play-file-auth:hello']

def execute(**kargs):
    command = kargs.get("command")
    app = kargs.get("app")
    args = kargs.get("args")
    env = kargs.get("env")

    if command == "play-file-auth:hello":
        print "~ Hello"


# This will be executed before any command (new, run...)
def before(**kargs):
    command = kargs.get("command")
    app = kargs.get("app")
    args = kargs.get("args")
    env = kargs.get("env")


# This will be executed after any command (new, run...)
def after(**kargs):
    command = kargs.get("command")
    app = kargs.get("app")
    args = kargs.get("args")
    env = kargs.get("env")

    if command == "new":
        pass
PK�����*†9DŒÀÉZ•��•��5��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/README.mdplay-file-auth
==============

This Module supports authentication of Play! 1.x Applications agains Unix Auth Files (e.g. Apache htusers)

This Plugin works for all Auth Files with the following syntax:


    user1:passwordhash
    user1:passwordhash:...:...:

    group:user1 user2
    group:x:...:user1,user2


The Hash Algorithm has to be either MD5 Crypt or MD5 Apache Crypt.

    $1$...
    $apr1$...PK�����*†9DaCV��V��5��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/build.xml<?xml version="1.0" encoding="UTF-8"?>

<project name="play-file-auth" default="build" basedir=".">

    <target name="check" unless="play.path">
        <fail message="Please specify Play framework path using -Dplay.path=/path/to/framework/home" />
    </target>

    <path id="project.classpath">
        <pathelement path="${play.path}/framework/classes"/>
        <fileset dir="${play.path}/framework/lib">
            <include name="*.jar"/>
        </fileset>
        <fileset dir="${play.path}/framework">
            <include name="*.jar"/>
        </fileset>
        <fileset dir="lib">
            <include name="*.jar"/>
        </fileset>
    </path>

    <target name="build" depends="compile">
        <mkdir dir="lib" />
        <copy todir="tmp/classes">
            <fileset dir="src">
                <include name="**/*.properties"/>
                <include name="**/*.xml"/>
                <include name="**/play.plugins"/>
                <include name="**/play.static"/>
            </fileset>
        </copy>
        <jar destfile="lib/play-play-file-auth.jar" basedir="tmp/classes">
            <manifest>
                <section name="Play-module">
                    <attribute name="Specification-Title" value="play-file-auth"/>
                </section>
            </manifest>
        </jar>
        <delete dir="tmp" />
    </target>

    <target name="compile" depends="check">
        <mkdir dir="tmp/classes" />
        <javac srcdir="src" destdir="tmp/classes" target="1.5" debug="true">
            <classpath refid="project.classpath" />
        </javac>
    </target>

</project>
PK�����*†9DÞÀaæÖ��Ö��8��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pycÑò
X*Rc�����������@���s.���d��Z��d�g�Z�d�„��Z�d�„��Z�d�„��Z�d�S(���s���play-file-auths���play-file-auth:helloc����������K���sV���|��i��d�ƒ�}�|��i��d�ƒ�}�|��i��d�ƒ�}�|��i��d�ƒ�}�|�d�j�o	�d�GHn�d��S(���Nt���commandt���appt���argst���envs���play-file-auth:hellos���~ Hello(���t���get(���t���kargsR����R���R���R���(����(����s���/home/javastream.de/jenkins/jobs/de.consolving.play-file-auth/workspace/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pyt���execute	���s����
c����������K���s@���|��i��d�ƒ�}�|��i��d�ƒ�}�|��i��d�ƒ�}�|��i��d�ƒ�}�d��S(���NR����R���R���R���(���R���(���R���R����R���R���R���(����(����s���/home/javastream.de/jenkins/jobs/de.consolving.play-file-auth/workspace/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pyt���before���s����c����������K���sQ���|��i��d�ƒ�}�|��i��d�ƒ�}�|��i��d�ƒ�}�|��i��d�ƒ�}�|�d�j�o�n�d��S(���NR����R���R���R���t���new(���R���(���R���R����R���R���R���(����(����s���/home/javastream.de/jenkins/jobs/de.consolving.play-file-auth/workspace/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pyt���after���s����
N(���t���MODULEt���COMMANDSR���R���R	���(����(����(����s���/home/javastream.de/jenkins/jobs/de.consolving.play-file-auth/workspace/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pyt���<module>���s���			PK�����*†9DxÏ‘[$���$���4��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/manifestversion=0.2
frameworkVersions=1.2.x
PK�����*†9D@ó»��»��G��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/lib/play-play-file-auth.jarPK
����Õ–C������������	��META-INF/þÊ��PK
���Ô–C½ÿíŠ���¤������META-INF/MANIFEST.MFM±
Â0E÷@þ!£	U¡H·ÖÉ¡"T\噾ÐiR’tÈß›l®çœËÁ‘Á˜äC$ï:qR
g½û#ýzAQX‘תo!á,‡\ûV5Ÿs+¿ÍE¦Ý‰‘tð1Ç„kw§Õ‘3ΰb'ž²\ý¼[älÚP“!
©üÈ%[Š­†,JØÓR—?PK
����ՖC���������������play/PK
����ՖC������������
���play/modules/PK
����ՖC���������������play/modules/fileauth/PK
����ՖC���������������play/modules/fileauth/utils/PK
���ՖC��������������play.plugins�PK
���Õ–C(�å_j
����$���play/modules/fileauth/FileAuth.classW{|Õþ&û˜ÙÉ$À†D—Š,ˆ˜„,QZPEBL „”hD‡ì$Ýìngg‘૾j[m}k¥­O4ÕR´!1ÁG¨Vkµ[«}ØÖÖÚÚ÷ý•~wöÁf³bȏû8÷Üs¿sÎwϝ}ùOpþ£"ˆk|8×ʸN…×(¸^ÅpƒŒ/ª”IÁ—E£hn*†Œ¯Èøj1Jp³Ü"ãV·ávîÀ
îRq7¾¦à»Äðë2¾¡âDaö›¢¿WÅ}¸_ŒPð è’±[ÅÃxDưŠø–hÍc
¾-VöÈøŽŒÇUTá	•Ø+š}*fb¿hž žRð]{DÆK1*6ŽÉxZÅ2Œ*Jßç=£à ‚gRpXÁs2žWq®.½ àEáÕ„Œ#õ›×õ45·4ötv4nêèi¨oXר³¡±[‚¿åb}»^Ñ£ýµ¶eFûWH(iˆE¶µ»ôHҐ 6wô4¶Õ¯ii<W‚t„9Ç,®Ý´±³}’É’ÔxsskãÆÎͼ+ͨi¯’બê’ànˆ…isF‹5Ú’ƒÛk³¾-b(±^=Ò¥[¦˜§…n{ÀLH¶Ä#úPí`,œŒ‰Ú>3bèI{ ¶‰ƒzZé7ì΄aQ{VeUÊ­¤mFj[õ8—=ÉÔÚŒ)+“ÏŠgÎ^6YuåÔPM•¬¢A_‡ÙÕí¤EgæC™¾ú³ÖŠ%ãííOš¦iÌQè0ì
«ë릍ëcM)½±¨­›QÂ;­r:ÞU‘AÇ#æW¤…s¦SSăyÄ)Ó€B ÛõˆÖm†]‰ë‰Ä¥1+L:Ñ^k(návÊ×D¯MŸä‰ë–;lK¡kP´ÈNL­˜±Ú5ɾ>Ã2›=lX\wGHaª;$Ì˪	J¶Åì¦X2nÜÑkÄm3¥vyV£yc®\dnÓÅ=sа
ëZr	¥“S_ø3Äð‰ðµ§œpë–µP 2¢ì¤f"3æ]J}3Ñì;ב‰PVöFÒ÷Síˆ%­^£É9·$sµ–ˆó5´ UÃ:Ðê¬c¹X§'Ȧ,¯ÄÈø¾†—ð2íLb™,	3óë‡†íØ¬a‹h^Â&mcÂ5ôà
ÎÞüLÉxUÃq‘Œ×4ü¯3¢6ˆð-q.ý’¸nÈxCÏñf4o5­NèüTÂ	ù‡¬Iš‘°£²ZÃÏ𦌟køÞ“_òÄ`³¥bСVÐŒ5¼w&áݸíb£×–ñ+
¿Æo$h¹©!þ­†wq¥†ßáJÙ ™FcvP:ÄŠl„„ê|
¿û+
S“¥4×pJ(ÌÿA4ïiø#ÞÑð'¼¯áÏbôþB6,Œjø+>”0÷¸TÖð7±éï@YJ³Zõ‰
ôÿø§ˆÏ¿È»à 3<äéìlüSUÍI_©|qn^‚Üv,Ä)ö‹Oa£C–ã	ë3vbh¤X¿$X€Á˜,„ÉÙ˜0l†û
‘“ÿ1ÕŽB¯Þ;`Ô6ˆ–ae¯ÀqëbC„•iEUK>SxÛUN•T,/¤Èû½°0h°Dmë¹ËDmd™ÙnXfßP{¶lúœ}ílxYáûÌþ¤¥§\‘SŽÛ­XܰlÓHÄìBr	ÅBz>”çRæI(TÏšÞkRh«—l3¢t#4­ÃÒ·{Åäê2”°A2¬7iYFÔÞL6¶š‘ˆøaí\/á¤Êõdz¥Ø±”ˆ©,³Ø	rK¬¿_°ÜmFûb*@ÞR ¹]yIÏxG¹×Øa&Ä›à5©rî¾T·¢âËhòs"”ËŽÉÒO›*Ç-ÎçIÄ#¦]øu¯*ørº9`ä\ñ¤—Æ4øi’Ú•·çìãó`ªÉœH”‘zÎ÷¹Ó·‰„Þ/<2,+&"ž ØÉf³Èfóñ²éÒÃaÌçGu¿8Ü M°–³"x8çãÈq�ësä>ÌÁ†œùé”Hâ-eÛFI-{‰½§ú�¤}ŽÊF¶^GxÚÙj)|›ØûÄ#H-±Ùf/ÖîGÑ.ÃÕ}�î½~O\£ð‚¼¡úäQ(ª÷RÏåØžCëÀb¶5(ÅÎkq2-்Ìys ¢]œ7Ir>gÝʈdËÇ"ñå#Q§"YÁv%‘¬âü"YM$k&!¹p
’±5‹ä³DÒƒ‹Ò}’·¬ƒÄãÞS=yñx\{FQÜZS=­‡PÒr„¡Åc(-ž,¨E4æÇKs
aÌdàýzÏœJ0§1`uê(èÌ0œÑ6'×d�]Ä¥èE˜¶ü
JRk[³k×|èË:0œv Tȁǘ™v`qh³òá‡	ß ü~ ü‹yì%<0Bøƒ„ˁr@Ãõ§áŸàd_@Ô¸¿)
_Ë®ïPÛÌä_:J~ÊìËöÃï/Áì
bPî¯Á	-ã8‘løçŒà£8isý'sXÍÿ#˜çzÁQÌOS¦uºyNiM`VhïÊîÔ]˜›¶#öùån>m•Ýã¨ê�÷.®sÜ#¨é®óL :àY<‚P7à=èÞ}ôýš€×µtK^·èÆPK߆¾î÷ÔøOÅèImÿ¤›¶»]wÇ(>5ŒŠ”ty®4ãØ™S3†³$ŒàlÝ$¿jö2DÛq/ðz‰þ-þŽO¥ªålw0C˜8—¡—³~\A†\Ií«q®Ãm¸»p#ÀMÃÍ´q­Ý‚	ÜŠ79~‹oãv~»Ý)ÍÂ]Nj/¤Õ]˜ÇÄ_B*Ü€:¦~é¾™(¢L¨‡»g‘qÊÞvFŸãÈ'©°2ÌÆQ$2Ôã4ÖóËÜF2‡©5A†cEa{†Eïñ”R’ârÁ…y¤ÕþOsØZ€«>Šm~ˆtL Lä„)ýô8p§Iâ	x’x'pmÀëDÈIØyvcvÀ™‡—Öˆ5e%ٝž”ƒ÷=<ŽsxÚê:_@©SêÁåÅ®åZ¹V^ü æÔrmi]IÀ(qxV_„ó®Ó¤á£ï†rŠ‚¾ûvø}¡,û\öy2ìs¤Ës¥¹ì}ûB‚}×KÕRˆy}C–};Yjû˜±û™íÈ•ù¶=Ä·i7³ý0yóy÷(îÆã\ya/öñoûɃ§ø3i„¿ð÷Ê(þ‹1ɇQiÆ¥xVªÆ<ñT‹ÃÒjŽðœÔˆç¥.¼(í$óC÷uÄr)ORh¡Ä)C%xU¼—°È€…¼;QŒYˆ.ãH#Чež¿1½÷]>,y>b½Ýṇ~ÝèðÜK)ž{ˆ ÅsyžÈð\Hó|ž´•w¯‰ñj‘Nwª·]Ò"‡ñîlõNeð¬”ÖVjež!UüJHWñµ”ˆ§d
âJ3×àJýkÒ	ríq‹Ú-9)ñ;õøeô
Óñ*~î]•ýX˜ç¼±ïhß¹}ٍ©Ï…ùl?ï`¹úÿPK
���Õ–Cæ'È­r��p��*���play/modules/fileauth/FileAuthPlugin.classQÛJ1œìÖ®nk«VÛz©U(R\|V
–"…Šâc¶]5’&e/ŠŸå‹‚‚àG‰g·õ*æa&™Ì™œ$/¯Ï�¶±b#‚…Y
1ÌY(Z(1¤w…áƒY_?aHèžÇo	åE}×ó¹+I™ié.—'Üñz$¦ÂK0¬µ’ß:}Ý‹¤8çBz<
/MöiÒ–Ñ…P;¢Õþ` E—‡B«NÈý¾Ò.Cõ—ŒN—«¦v©ØîèÈïzq(Cá{öÖ¿æYXg¨ü”EKµÿtLïØÚô…e«í뾨—ì¡Rž yxô¥úúð.R¸Ó¨|;ªÔ÷;™/*V1F¿,¾á­bF<¶ñ�v—lÛ„éDÌ#C˜ˆ'‰rÅMrĹ'g0[›÷H~¦ä`É_¢Úr’VVŒÒÆé¤<¦(ÏÀtR7ƒEb›”yT°€‰7PK
���Õ–CŒˆvÓ`��%��#���play/modules/fileauth/ScanJob.class}PËNA¬áé.‹ŠÆxpãÁÆ„51«Q80†!ËÙ	ŸåIâÁð£Œ=@ăq“©~Twue?¿Þ?�œ¡n"‰¢‰ÊöÒØO£Âºž/âf—!q¥†‚!çHO<D“¾ðŸxߥNÁQîv¹/u½n&‘Žœ©ËçöD
#Wö‹tÂ‘ÝpïNõ[É¡¢„Áì¨Èˆ©·­5:æ3ÎPyŒ¼PNDW’ÔÛž§BJåÑ…üêÂXõûz&ü¹Öœq7Ò&Î'Ò³B:‡¨Z¨¡ÊPû×Cv£¹¬ëÏk³mJŒ€VŸákG¦£}ÛQ(]ûžOÉ‘©ù[_EÓ�ÇHÐ×_L›#ܢʦÈ(&OÞÀ^—´A˜Z6ó0	­Õ�2”òìÏrk½l,ë-ïm¶',ÒՍ–	k¡ÍhÌa‡b†¸<½B€ÝoPK
���Õ–CÎǘ	��%��*���play/modules/fileauth/utils/MD5Crypt.class­W{PTçÿ}û¼,X!®(`BuÙe]@E4¾�EA@りԚËîe¹º/wï"5¦Å4iúŠé˦5ÆØ®Imj’v¥Ú`ß3í_ý/íLg:Ó¦L2ÓtÚ4ôz¾»wĵa:…™ïq¾s¾ó;ç;»¿üàæ4€&ü܆fD‹C\ÀqHÚh£Úè,Ň1>œ°b܆"DL˜‘ýÛjÃI<©§øpZÀÅY+³âã6,Æ'¬˜´¡Q~~ޝðI.vŽOpò“>Å5<%àÓœø>|–ŸãäÏóÕÓüÞó|x†_à_ä«/	ø2ß|…8ëW<ËUÍŠ¯[q‘¡ÈßÖÓß±«mŸŸÁÑsT“|a)òùÕ„
=ÈPÒ‹&U)ªî—Â)™Á¢¨1©e--6)QEÝÂ`tÕïg0uÄ‚t\Ö£Då¾TdXNôKÃa™ßHáýRBá{hRG•$ÃÊžxXšðEbÁTXNúF”°,¥ÔQ_JUÂI_ïöu‰‰¸J(LI‰2Tº†îƨi—¡1†òÇ\YŒ®tuwÕ:g$ɺ‰/©œ$l¬‹ŒKÈÉTXepÞ%ОRÂA9ArE‚›VT²Äìjç@˜B÷dI†¡vëð„*'›SDuµ×ÓÍF%'6:²„d•Ld¨qé°’r •PÔ	_¯œLJ!y»’“Ü|ƒ<ÎàšÇÔó§£máPŒ¶£‘ã9®*±(ñ›Üoä_WwrY‰¹!.%“'b‰ ÷†Ä`MHÑ`HŽæÃƒ¿ocl- a:‹¥¸•;²P»tѯ6ÄÃdSD
)Ûˆ•Â~URéq•Ì\þ!þ6W½ÝR:&'”‘‰½y¿¬Z˜Å‡(u(¸•¨*«\šAŒ³ÝO$Â句¹Sá	Q’öÕü*ëÑjÅs".áyR9ÀÑm¬ÍñÔy³¾;\›{¯ZþZV\ñ®ˆø¾)â>&â@v8Èpß="™aÛj_cSóšµëZÖ·nhkïØ¾£sç®®îÝ=½}{ö>´Ïß?°ÿÀÁÁCÒp („F•£Ç‘h,~<‘TSc'Æ'NZ‘q/Šx	ßq
ß&OZ+^ñ\§H\Xì2,E¹/U•ˆœ?ä^y…Á>?E¼Š×D|ßcØro÷6,o{£ˆnp+¦È€º¦:)Uë¤x‚マ›œå–ˆàu~ô‹˜Æm?Än?Ê®~,¢›o‚VŠ!’Úƒ½"ÚÑ!â§øÐ.kçÆ7ì
CÝBŠaÎ~ÍC{†Ê;Iþ‰¤*G½œ —­ÈF¦óí¥WéÝe‰§my2åzœïÂô
…
¯³ò¸¢òZÖÅwöù<ä©À¨”hÓY:h/Åãr”Òf™«ãîT­¥‚Ë]±ØU0§«þKÊR1¡bÚ¥5ª�eSÓ½ëÞ=s~É\™þÑDìoUšÕ–°
©£Z«£^¥7ëÇ$U£t%™Nêð+]]…ÛŒwAÅxÖ%6²&¡&(\sÁ9Äé…•Yµ‚¾g$ûZ µó^Ä)õ¼5YRñ V-A݉Vjb]ÚËš©ÿÉD±ÈÇSR89O6ìH?}V4Ñ÷`€k°ë´ÝRÚ·ÌÙC¤557ÅG3£Ùì¾öŠÆ²‘F‹Flƒ4ŠYlÂfš‹°[uá4LÚÙ {Úô<ŠÜÓ–+({‡1“iŠ.¶\BQܦf·¹y
:Hc•{ڬӍÍt4«F/ËR¦ ÐÖHò³€Ü°Ñ¸žÀ´ÒWÓ,!8Õ¨‘à´ ]hC?¶ã vÌ=ˆmDù€’^}’Œ3ÑÜpEƒ7`ë›4Ì,{U^Gqõbˆ>‘Aieªí–Ó[Ó3oz3°_Ïã¨ÿ¬ì†€”¡5èÃ*<¤é¬…‘ßK(vhž
èÄN’PGøºèÔÉ둎ÃO{ÍåÆMUîéË(qWû'KÏümÖl‡u€®ØO&
Ðþ ¦ª’Î
°ˆš¡å¥O3”Jœ® ‘8ø™eé"Ìœ¹6ïmÌq“…ØG³×Q]º›àñ3»cÑ×wßÂâAŠ‘ŠÛz4XHgö¾RÍì QdX1’¿×J±2@¸9*ê{ú½—H–Û´MwÏ-TÒ|_¯'ƒ%vá2V4dàt,Í êñ£Omñ8–._nz8ƒe,?žù­›øì0³ORMš€1òÑ	òÈ#¤íVâ4ý
˜³7é\IHÉ_í6¢sL+†èi¨„’¿>ŠÃZQ«ÖÑnÒIp{ÕS¨¹>Ï‹Ïä_ƒß•½“¯†´”s’—ÿÏv[æÛ}™´½@èÓ¤í*Ùø"i~‰ì¾ö?Ø}¤ Ýµì¾ý!vS³ÎÞd|ƒì."aÅCö­¸�‘ÏUÜßã±×eð€á9”yŒÙ5YÛCfVÙ…+(öí'L¡n£Éirgð‘V:M
¹…'»àçf§9wnöäyJ«úhSÕ"TQí4y‚Ý~4¤a® 5®Iá/é™?x§PŸã¼€ú
ÁtæJ¹€‰xÒ|ÉoÕvtxªEHÏüÚiâ
Œ\f‘ñ­Ëˆpî¬lYF¢Óì5Ú효%~ïu¬„Æš%¸s]XHÏ9ËÚ3)P¡xZ¥‚Shàqâ<ÙÉ¡Í^ãš)4Øíã^»E[	ãg½v‘/Ïž[oq
•뼫)Ïje-)Èjγ
³¬¥Y-yÖ¢YÖ²‚¬Ö<«-Ï*ä´s²N5ç¨ôtNáŽZý'-”ߤ°ü#ámTáªÕ¦€—Âÿ¯Ô=Þ£
ýw*™ïSšþƒ’àŸT¾þ…þq|€3éO2ƝÓW¡€«LÄk¬7Y)}=Úñ+Úÿ†-ÆïX5Þf5x—­Àûì~f`u¬˜­bæbUÌÃ`
ôïckX#ÛÊšÙ.¶Žõ±jÖÏ6²Ãl²ÍìÛÂ’l;ÏÚØEÖÁ^gÛÙ/X'{‹ídï±.C9ë6Ô°ÃfÖkèb{~¶×p„ù
6 ¥bœ:û$u ‰]ÀËðh­AÀï‘ÐW”‚¹D¥U6Qùj˜V²õ¨…±ÙÐ@Å\¦ÂqØ ’?d˜Ùy¼u5áµ^&P’BÑË…ª—‹Fª’Z–—xÜ­«¯¾FdÉÂI¼—8|7Ðxûξʂ(b2ÊÙ–±V2eN™iÄQ½Ì4☆ž!¬ÉGþPK
����Õ–C������������	���������íA����META-INF/þÊ��PK
���Ô–C½ÿíŠ���¤��������������¤+���META-INF/MANIFEST.MFPK
����Õ–C����������������������íAç���play/PK
����ՖC������������
����������íA
��play/modules/PK
����Õ–C����������������������íA5��play/modules/fileauth/PK
����Õ–C����������������������íAi��play/modules/fileauth/utils/PK
���Õ–C����������������������¤£��play.pluginsPK
���Õ–C(�å_j
����$�����������¤Ï��play/modules/fileauth/FileAuth.classPK
���Õ–Cæ'È­r��p��*�����������¤{��play/modules/fileauth/FileAuthPlugin.classPK
���Õ–CŒˆvÓ`��%��#�����������¤5��play/modules/fileauth/ScanJob.classPK
���Õ–CÎǘ	��%��*�����������¤Ö��play/modules/fileauth/utils/MD5Crypt.classPK��������Ÿ����PK�����*†9DÔQ.^Þ���Þ���7��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/routes# This file defines all module routes (Higher priority routes first)
#
# import these routes in the main app as :
# *     /                       module:play-file-auth
#
# ~~~~

GET     /?                      Module.indexPK�����*†9D1Sù*T���T���A��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/application.confapplication.name=play-file-auth
application.mode=dev
application.secret=test
db=mem
PK�����*†9Dæ´(ÕJ���J���A��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/dependencies.ymlself: play -> play-file-auth 0.2

require:
    - play
    - play -> securePK�����*†9DÌ;¨U¬���¬���9��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/messages# Default play-file-auth messages
# You can specialize this file for each language.
# For exemple, for french create a messages.fr file

#play-file-auth.name=play-file-authPK�����*†9D������������<��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play.pluginsPK�����*†9DˆŽ6©™��™��R��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/ScanJob.java/**
 * ScanJob
 * 31.07.2012
 * @author Philipp Haussleiter
 *
 */
package play.modules.fileauth;

import play.jobs.Every;
import play.jobs.Job;

/**
 * Periodically Scan of user/group files. Scan runs every 5 mins.
 * @author Philipp Haußleiter
 */
@Every("5min")
public class ScanJob extends Job {
    @Override
    public void doJob(){
        FileAuth.scanUsers();
        FileAuth.scanGroups();
    }
}
PK�����*†9DlP¨å��å��S��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/FileAuth.java/**
 * FileAuth 31.07.2012
 *
 * @author Philipp Haussleiter
 *
 */
package play.modules.fileauth;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import play.Logger;
import play.Play;
import play.cache.Cache;
import play.modules.fileauth.utils.MD5Crypt;

/**
 * Basic Wrapper for all FileAuth Functions.
 *
 * @author Philipp Haußleiter
 */
public class FileAuth {

    /* Cache Key for User/PasswordHash Map */
    public final static String AUTH_FILE_USERS_CACHE_KEY = "AUTH_FILE_USERS";
    /* Cache Key for Group/Users Map */
    public final static boolean IS_ENABLED = isEnabled();
    public final static String AUTH_FILE_GROUPS_CACHE_KEY = "AUTH_FILE_GROUPS";
    private final static String CACHE_TIMEOUT = "5mn";

    /**
     * Returns a Map of all Users (user/password hash).
     *
     * @return the Map.
     */
    public static Map<String, String> getUsers() {
        if (!IS_ENABLED) {
            return new HashMap<String, String>();
        }
        Map<String, String> users = Cache.get(AUTH_FILE_USERS_CACHE_KEY, HashMap.class);
        if (users == null) {
            users = scanUsers();
        }
        return users;
    }

    /**
     * Returns a Map of all Groups (groups/usernames).
     *
     * @return the Map.
     */
    public static Map<String, Set<String>> getGroups() {
        if (!IS_ENABLED) {
            return new HashMap<String, Set<String>>();
        }
        Map<String, Set<String>> groups = Cache.get(AUTH_FILE_GROUPS_CACHE_KEY, HashMap.class);
        if (groups == null) {
            groups = scanGroups();
        }
        return groups;
    }

    /**
     * Checks if a group contains a given username.
     *
     * @param group the Group to check.
     * @param user the user to check.
     * @return true if user is in group, otherwise false.
     */
    public static boolean contains(String group, String user) {
        if (!IS_ENABLED) {
            return true;
        }
        if (group == null || user == null) {
            return false;
        }
        Map<String, Set<String>> groups = getGroups();
        Set<String> groupUsers = groups.get(group);
        if (groupUsers == null) {
            return false;
        }
        return groupUsers.contains(user);
    }

    /**
     * Validates an user with a given password agains the user/password hash
     * mapping.
     *
     * @param user the given user.
     * @param password the given password (clear text).
     * @return true if validation okay, otherwise false.
     */
    public static boolean validate(String user, String password) {
        if (!IS_ENABLED) {
            return true;
        }
        if (user == null || password == null) {
            return false;
        }
        Map<String, String> users = getUsers();
        String encryptedPass = users.get(user);
        if (encryptedPass == null) {
            return false;
        }
        return MD5Crypt.verifyPassword(password, encryptedPass);
    }

    /**
     * Rescans the users file.
     *
     * @return the updated Map of users.
     */
    public static Map<String, String> scanUsers() {
        String fileName = Play.configuration.getProperty("authfile.users.path");
        String delimeter1 = Play.configuration.getProperty("authfile.users.delimeter", ":");
        Logger.info("@" + System.currentTimeMillis() + " Scanning Users in " + fileName);
        Map<String, String> users = new HashMap<String, String>();
        File file = new File(fileName);
        if (file == null || !file.exists() || !file.isFile()) {
            Logger.warn(fileName + " is not a valid Auth-File!");
        }
        try {
            BufferedReader br = new BufferedReader(new FileReader(file));
            String line;
            String parts[];
            while ((line = br.readLine()) != null) {
                parts = line.split(delimeter1);
                /*
                 * Matches
                 * user:hash
                 * user:hash:uid: ...
                 */
                if (parts.length > 1) {
                    users.put(parts[0].trim(), parts[1].trim());
                }
            }
            Cache.set(AUTH_FILE_USERS_CACHE_KEY, users, CACHE_TIMEOUT);
        } catch (FileNotFoundException ex) {
            Logger.error(ex.getLocalizedMessage(), ex);
        } catch (IOException ex) {
            Logger.error(ex.getLocalizedMessage(), ex);
        }
        Logger.info("found " + users.size() + " mappings");
        return users;
    }

    /**
     * Rescans the groups file.
     *
     * @return the updated Map of groups.
     */
    public static Map<String, Set<String>> scanGroups() {
        String fileName = Play.configuration.getProperty("authfile.groups.path");
        String delimeter1 = Play.configuration.getProperty("authfile.users.delimeter", ":");
        String delimeter2 = Play.configuration.getProperty("authfile.groups.delimeter", " ");
        Logger.info("@" + System.currentTimeMillis() + " Scanning Groups in " + fileName);
        Map<String, Set<String>> groups = new HashMap<String, Set<String>>();
        File file = new File(fileName);
        if (file == null || !file.exists() || !file.isFile()) {
            Logger.warn(fileName + " is not a valid Auth-File!");
        }
        try {
            BufferedReader br = new BufferedReader(new FileReader(file));
            String line;
            String parts[];
            String userParts[];
            Set<String> users;
            while ((line = br.readLine()) != null) {
                parts = line.split(delimeter1);
                if (parts.length > 1) {
                    if (parts.length > 2) {
                        userParts = parts[parts.length - 1].split(delimeter2);
                    } else {
                        userParts = parts[1].split(delimeter2);
                    }
                    if (userParts.length > 0) {
                        users = new HashSet<String>();
                        for (String user : userParts) {
                            users.add(user.trim());
                        }
                        groups.put(parts[0].trim(), users);
                    }
                }
            }
            Cache.set(AUTH_FILE_GROUPS_CACHE_KEY, groups, CACHE_TIMEOUT);
        } catch (FileNotFoundException ex) {
            Logger.error(ex.getLocalizedMessage(), ex);
        } catch (IOException ex) {
            Logger.error(ex.getLocalizedMessage(), ex);
        }
        Logger.info("found " + groups.size() + " mappings");
        return groups;
    }

    private static boolean isEnabled() {
        if (Play.configuration.getProperty("authfile.users.path") == null
                || Play.configuration.getProperty("authfile.groups.path") == null) {
            Logger.info("FileAuth not enabled. authfile.users.path or authfile.groups.path not set!");
            return false;
        }
        return true;

    }
}
PK�����*†9D4ÿÑ^º��º��Y��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/FileAuthPlugin.java/**
 * FileAuthPlugin
 * 31.07.2012
 * @author Philipp Haussleiter
 *
 */
package play.modules.fileauth;

import play.PlayPlugin;

/**
 * Entry Class for first file scan.
 * @author Philipp Haußleiter
 */
public class FileAuthPlugin extends PlayPlugin {

    /**
     * Trigger to scan the files for the first Time.
     */
    @Override
    public void onApplicationStart() {
        ScanJob job = new ScanJob();
        job.now();
    }
}
PK�����*†9DYí΁1��1��Y��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/utils/MD5Crypt.java/*

MD5Crypt.java

Created: 3 November 1999

Java Port By: Jonathan Abbey, jonabbey@arlut.utexas.edu

Original C Version:
----------------------------------------------------------------------------
"THE BEER-WARE LICENSE" (Revision 42):
<phk@login.dknet.dk> wrote this file.  As long as you retain this notice you
can do whatever you want with this stuff. If we meet some day, and you think
this stuff is worth it, you can buy me a beer in return.   Poul-Henning Kamp
----------------------------------------------------------------------------

This Java Port is  

Copyright (c) 1999-2010 The University of Texas at Austin.

All rights reserved.

Redistribution and use in source and binary form are permitted
provided that distributions retain this entire copyright notice
and comment. Neither the name of the University nor the names of
its contributors may be used to endorse or promote products
derived from this software without specific prior written
permission. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE.

 */
package play.modules.fileauth.utils;

import java.security.MessageDigest;

/*------------------------------------------------------------------------------
class
MD5Crypt

------------------------------------------------------------------------------*/
/**
 * This class defines a method,
 * {@link MD5Crypt#crypt(java.lang.String, java.lang.String) crypt()}, which
 * takes a password and a salt string and generates an OpenBSD/FreeBSD/Linux-compatible
 * md5-encoded password entry.
 */
public final class MD5Crypt {

    /**
     * Command line test rig.
     */
    static public void main(String argv[]) {
        if ((argv.length < 1) || (argv.length > 3)) {
            System.err.println("Usage: MD5Crypt [-apache] password salt");
            System.exit(1);
        }

        if (argv.length == 3) {
            System.err.println(MD5Crypt.apacheCrypt(argv[1], argv[2]));
        } else if (argv.length == 2) {
            System.err.println(MD5Crypt.crypt(argv[0], argv[1]));
        } else {
            System.err.println(MD5Crypt.crypt(argv[0]));
        }

        System.exit(0);
    }
    public static final String SALTCHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
    public static final String itoa64 = "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";

    public static final String to64(long v, int size) {
        StringBuilder result = new StringBuilder();

        while (--size >= 0) {
            result.append(itoa64.charAt((int) (v & 0x3f)));
            v >>>= 6;
        }

        return result.toString();
    }

    public static final void clearbits(byte bits[]) {
        for (int i = 0; i < bits.length; i++) {
            bits[i] = 0;
        }
    }

    /**
     * convert an encoded unsigned byte value into a int
     * with the unsigned value.
     */
    public static final int bytes2u(byte inp) {
        return (int) inp & 0xff;
    }

    static private MessageDigest getMD5() {
        try {
            return MessageDigest.getInstance("MD5");
        } catch (java.security.NoSuchAlgorithmException ex) {
            throw new RuntimeException(ex);
        }
    }

    /**
     * <p>This method actually generates a OpenBSD/FreeBSD/Linux PAM compatible
     * md5-encoded password hash from a plaintext password and a
     * salt.</p>
     *
     * <p>The resulting string will be in the form '$1$&lt;salt&gt;$&lt;hashed mess&gt;</p>
     *
     * @param password Plaintext password
     *
     * @return An OpenBSD/FreeBSD/Linux-compatible md5-hashed password field.
     */
    public static final String crypt(String password) {
        StringBuilder salt = new StringBuilder();
        java.util.Random randgen = new java.util.Random();

        /* -- */

        while (salt.length() < 8) {
            int index = (int) (randgen.nextFloat() * SALTCHARS.length());
            salt.append(SALTCHARS.substring(index, index + 1));
        }

        return MD5Crypt.crypt(password, salt.toString());
    }

    /**
     * <p>This method actually generates a OpenBSD/FreeBSD/Linux PAM compatible
     * md5-encoded password hash from a plaintext password and a
     * salt.</p>
     *
     * <p>The resulting string will be in the form '$1$&lt;salt&gt;$&lt;hashed mess&gt;</p>
     *
     * @param password Plaintext password
     * @param salt A short string to use to randomize md5.  May start with $1$, which
     *             will be ignored.  It is explicitly permitted to pass a pre-existing
     *             MD5Crypt'ed password entry as the salt.  crypt() will strip the salt
     *             chars out properly.
     *
     * @return An OpenBSD/FreeBSD/Linux-compatible md5-hashed password field.
     */
    public static final String crypt(String password, String salt) {
        return MD5Crypt.crypt(password, salt, "$1$");
    }

    /**
     * <p>This method generates an Apache MD5 compatible
     * md5-encoded password hash from a plaintext password and a
     * salt.</p>
     *
     * <p>The resulting string will be in the form '$apr1$&lt;salt&gt;$&lt;hashed mess&gt;</p>
     *
     * @param password Plaintext password
     *
     * @return An Apache-compatible md5-hashed password string.
     */
    public static final String apacheCrypt(String password) {
        StringBuilder salt = new StringBuilder();
        java.util.Random randgen = new java.util.Random();

        /* -- */

        while (salt.length() < 8) {
            int index = (int) (randgen.nextFloat() * SALTCHARS.length());
            salt.append(SALTCHARS.substring(index, index + 1));
        }

        return MD5Crypt.apacheCrypt(password, salt.toString());
    }

    /**
     * <p>This method actually generates an Apache MD5 compatible
     * md5-encoded password hash from a plaintext password and a
     * salt.</p>
     *
     * <p>The resulting string will be in the form '$apr1$&lt;salt&gt;$&lt;hashed mess&gt;</p>
     *
     * @param password Plaintext password
     * @param salt A short string to use to randomize md5.  May start with $apr1$, which
     *             will be ignored.  It is explicitly permitted to pass a pre-existing
     *             MD5Crypt'ed password entry as the salt.  crypt() will strip the salt
     *             chars out properly.
     *
     * @return An Apache-compatible md5-hashed password string.
     */
    public static final String apacheCrypt(String password, String salt) {
        return MD5Crypt.crypt(password, salt, "$apr1$");
    }

    /**
     * <p>This method actually generates md5-encoded password hash from
     * a plaintext password, a salt, and a magic string.</p>
     *
     * <p>There are two magic strings that make sense to use here.. '$1$' is the
     * magic string used by the FreeBSD/Linux/OpenBSD MD5Crypt algorithm, and
     * '$apr1$' is the magic string used by the Apache MD5Crypt algorithm.</p>
     *
     * <p>The resulting string will be in the form '&lt;magic&gt;&lt;salt&gt;$&lt;hashed mess&gt;</p>
     *
     * @param password Plaintext password
     * @param salt A short string to use to randomize md5.  May start
     * with the magic string, which will be ignored.  It is explicitly
     * permitted to pass a pre-existing MD5Crypt'ed password entry as
     * the salt.  crypt() will strip the salt chars out properly.
     * @param magic Either "$apr1$" or "$1$", which controls whether we
     * are doing Apache-style or FreeBSD-style md5Crypt.
     *
     * @return An md5-hashed password string.
     */
    public static final String crypt(String password, String salt, String magic) {
        /* This string is magic for this algorithm.  Having it this way,
         * we can get get better later on */

        byte finalState[];
        MessageDigest ctx, ctx1;
        long l;

        /* -- */

        /* Refine the Salt first */

        /* If it starts with the magic string, then skip that */

        if (salt.startsWith(magic)) {
            salt = salt.substring(magic.length());
        }

        /* It stops at the first '$', max 8 chars */

        if (salt.indexOf('$') != -1) {
            salt = salt.substring(0, salt.indexOf('$'));
        }

        if (salt.length() > 8) {
            salt = salt.substring(0, 8);
        }

        ctx = getMD5();

        ctx.update(password.getBytes());    // The password first, since that is what is most unknown
        ctx.update(magic.getBytes());    // Then our magic string
        ctx.update(salt.getBytes());    // Then the raw salt

        /* Then just as many characters of the MD5(pw,salt,pw) */

        ctx1 = getMD5();
        ctx1.update(password.getBytes());
        ctx1.update(salt.getBytes());
        ctx1.update(password.getBytes());
        finalState = ctx1.digest();

        for (int pl = password.length(); pl > 0; pl -= 16) {
            ctx.update(finalState, 0, pl > 16 ? 16 : pl);
        }

        /* the original code claimed that finalState was being cleared
        to keep dangerous bits out of memory, but doing this is also
        required in order to get the right output. */

        clearbits(finalState);

        /* Then something really weird... */

        for (int i = password.length(); i != 0; i >>>= 1) {
            if ((i & 1) != 0) {
                ctx.update(finalState, 0, 1);
            } else {
                ctx.update(password.getBytes(), 0, 1);
            }
        }

        finalState = ctx.digest();

        /*
         * and now, just to make sure things don't run too fast
         * On a 60 Mhz Pentium this takes 34 msec, so you would
         * need 30 seconds to build a 1000 entry dictionary...
         *
         * (The above timings from the C version)
         */

        for (int i = 0; i < 1000; i++) {
            ctx1.reset();

            if ((i & 1) != 0) {
                ctx1.update(password.getBytes());
            } else {
                ctx1.update(finalState, 0, 16);
            }

            if ((i % 3) != 0) {
                ctx1.update(salt.getBytes());
            }

            if ((i % 7) != 0) {
                ctx1.update(password.getBytes());
            }

            if ((i & 1) != 0) {
                ctx1.update(finalState, 0, 16);
            } else {
                ctx1.update(password.getBytes());
            }

            finalState = ctx1.digest();
        }

        /* Now make the output string */

        StringBuilder result = new StringBuilder();

        result.append(magic);
        result.append(salt);
        result.append("$");

        l = (bytes2u(finalState[0]) << 16) | (bytes2u(finalState[6]) << 8) | bytes2u(finalState[12]);
        result.append(to64(l, 4));

        l = (bytes2u(finalState[1]) << 16) | (bytes2u(finalState[7]) << 8) | bytes2u(finalState[13]);
        result.append(to64(l, 4));

        l = (bytes2u(finalState[2]) << 16) | (bytes2u(finalState[8]) << 8) | bytes2u(finalState[14]);
        result.append(to64(l, 4));

        l = (bytes2u(finalState[3]) << 16) | (bytes2u(finalState[9]) << 8) | bytes2u(finalState[15]);
        result.append(to64(l, 4));

        l = (bytes2u(finalState[4]) << 16) | (bytes2u(finalState[10]) << 8) | bytes2u(finalState[5]);
        result.append(to64(l, 4));

        l = bytes2u(finalState[11]);
        result.append(to64(l, 2));

        /* Don't leave anything around in vm they could use. */
        clearbits(finalState);

        return result.toString();
    }

    /**
     * This method tests a plaintext password against a md5Crypt'ed hash and returns
     * true if the password matches the hash.
     *
     * This method will work properly whether the hashtext was crypted
     * using the default FreeBSD md5Crypt algorithm or the Apache
     * md5Crypt variant.
     *
     * @param plaintextPass The plaintext password text to test.
     * @param md5CryptText The Apache or FreeBSD-md5Crypted hash used to authenticate the plaintextPass.
     */
    public static final boolean verifyPassword(String plaintextPass, String md5CryptText) {
        if (md5CryptText.startsWith("$1$")) {
            return md5CryptText.equals(MD5Crypt.crypt(plaintextPass, md5CryptText));
        } else if (md5CryptText.startsWith("$apr1$")) {
            return md5CryptText.equals(MD5Crypt.apacheCrypt(plaintextPass, md5CryptText));
        } else {
            throw new RuntimeException("Bad md5CryptText");
        }
    }
}
PK�����*†9D—5Kùõ��õ��Q��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/app/controllers/AuthFileSecurity.java/**
 * AuthFileSecurity
 * 31.07.2012
 * @author Philipp Haussleiter
 *
 */
package controllers;

import java.util.Map;
import play.modules.fileauth.FileAuth;

/**
 * This Class provides basice Security Functions for the Play! Security Plugin.
 * @author Philipp Haußleiter
 * <p>
 * Usage:
 * @With(Secure.class)
 * public class Application extends Controller {
 * ...
 * }
 *
 * </p>
 */
public class AuthFileSecurity extends Secure.Security {

    /**
     * Authentify an user against the given AuthFile.
     * @param username the given username.
     * @param password the given password.
     * @return true if username and password matches, otherwise false.
     */
    public static boolean authentify(String username, String password) {
        Map<String,String> users = FileAuth.getUsers();
        String userPassword = users.get(username.toLowerCase());
        return userPassword.equals(password);
    }

    /**
     * Checks if the current user (that is loged in) has the profile (e.g. is in the group).
     * @param profile
     * @return true if the current user has the profile, otherwise false.
     */
    public static boolean check(String profile) {
        String user = connected();
        return FileAuth.contains(profile, user);
    }
}
PK�����*†9D&ÿ‰è¤��¤��M��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/documentation/manual/home.textileh1. {module name}

p(note). Write your module documentation in this file, possibly linking to other Textile files, and delete these notes when you are finished.

p(note). Start with a clear statement of what the module is and what it is for. Link to any third-party libraries that the module is based on.

p(note). Briefly describe why you might want to use this module in a Play application.

h2. Sample application

p(note). Your module should contain a sample app in the @sample@ directory that demonstrates the module. Describe how to run the demo here.

h2. Getting started

p(note). Describe any installation that is required, beyond adding and resolving the module dependency.

h2. Configuration

p(note). List any configuration options that the module uses, with an @h3.@ heading for each one.

h2. Usage

p(note). Explain how to use the module, and describe any routes, controllers, models or views that the module provides.

h2. Tags

p(note). List any tags the module provides, with an @h3.@ heading for each one. Include the tags’ arguments.

h2. Commands

p(note). List any commands the module provides, with an @h3.@ heading for each one. Include the commands’ options.
PK�����*†9D´šü¯��¯��f��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/public/images/favicon.png‰PNG

���
IHDR���������óÿa���tEXtSoftware�Adobe ImageReadyqÉe<��QIDATxÚ”SËNA=U]5]Ý=ï1agŒhf£+0ˆ‰Á †n\¹gãÒ¿p#ì4¢?`t¯	WFƒH$H$dŒ™Gw•·›o÷M×+çœ{O53Æàú�Œ^sÑIšéJáü½Bnà18­ÃC_­fÛG©8ˆk#7€h—BÈ,KÀMª±SçrÕMwav©^›i4v<‹	ü+"�ÎmJÛQea+¤Žed×§–¼zYßü2(¬cŒÐFp¡ìÓ`
Aƒ›ÈBåý¡5ÿÍܧ·™±¨"«€¤úeV(§æÐ<±!D‰.7³é®Ì.®×fÚ~Ë#šÃ�¶HUÊÍ84ÞÍ@<x™XWcê}}þÅ÷­oUÉåáHÛ)	åqMìûεVˆ©4…øðòÎÛ¹•úÒ-?ð#�±«@€ÕÇe<êGhíÁ—8ÙšêéÛO¶?Ó^æ]`4Ùh».<b$ߏè¶6­vùD/&‡oΧ¼´¿§€qeK?îE—å/fzš~Žt1^šX½\{äż´µ¶Ð·”wÒ„è}~_ûHû`~`ûzÿ•gÅô‰û´üúO‚ÀN¯T‰È1”²OöàjåRm¨xvšŽ=¥Ü9XZÀ¥ªXvœic£Au†r'Ê£«ãå’ë<¤#Ÿ;]å@:‰J`)úQ8ªÝ}[“ý£Ï‹™®Cr;ð˜“ëNå1Y©
Êå¡çk_7.üj5ïÒ¸Îÿ'0�Û¤û»ý
����IEND®B`‚PK�����*†9Dä |;f�f�s��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/public/javascripts/jquery-1.6.4.min.js/*! jQuery v1.6.4 http://jquery.com/ | http://jquery.org/license */
(function(a,b){function cu(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cr(a){if(!cg[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ch||(ch=c.createElement("iframe"),ch.frameBorder=ch.width=ch.height=0),b.appendChild(ch);if(!ci||!ch.createElement)ci=(ch.contentWindow||ch.contentDocument).document,ci.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),ci.close();d=ci.createElement(a),ci.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ch)}cg[a]=e}return cg[a]}function cq(a,b){var c={};f.each(cm.concat.apply([],cm.slice(0,b)),function(){c[this]=a});return c}function cp(){cn=b}function co(){setTimeout(cp,0);return cn=f.now()}function cf(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ce(){try{return new a.XMLHttpRequest}catch(b){}}function b$(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function bZ(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function bY(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bA.test(a)?d(a,e):bY(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)bY(a+"["+e+"]",b[e],c,d);else d(a,b)}function bX(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function bW(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bP,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=bW(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=bW(a,c,d,e,"*",g));return l}function bV(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bL),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function by(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bt:bu;if(d>0){c!=="border"&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0});return d+"px"}d=bv(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+this))||0)});return d+"px"}function bl(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bd,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bk(a){f.nodeName(a,"input")?bj(a):"getElementsByTagName"in a&&f.grep(a.getElementsByTagName("input"),bj)}function bj(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bi(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function bh(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bg(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;e=e[c]=f.extend({},d);if(g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;i<j;i++)f.event.add(b,h+(g[h][i].namespace?".":"")+g[h][i].namespace,g[h][i],g[h][i].data)}}}}function bf(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function V(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(Q.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function U(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function M(a,b){return(a&&a!=="*"?a+".":"")+b.replace(y,"`").replace(z,"&")}function L(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;i<s.length;i++)g=s[i],g.origType.replace(w,"")===a.type?q.push(g.selector):s.splice(i--,1);e=f(a.target).closest(q,a.currentTarget);for(j=0,k=e.length;j<k;j++){m=e[j];for(i=0;i<s.length;i++){g=s[i];if(m.selector===g.selector&&(!n||n.test(g.namespace))&&!m.elem.disabled){h=m.elem,d=null;if(g.preType==="mouseenter"||g.preType==="mouseleave")a.type=g.preType,d=f(a.relatedTarget).closest(g.selector)[0],d&&f.contains(h,d)&&(d=h);(!d||d!==h)&&p.push({elem:h,handleObj:g,level:m.level})}}}for(j=0,k=p.length;j<k;j++){e=p[j];if(c&&e.level>c)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function J(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function D(){return!0}function C(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function K(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(K,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=/-([a-z]|[0-9])/ig,x=/^-ms-/,y=function(a,b){return(b+"").toUpperCase()},z=d.userAgent,A,B,C,D=Object.prototype.toString,E=Object.prototype.hasOwnProperty,F=Array.prototype.push,G=Array.prototype.slice,H=String.prototype.trim,I=Array.prototype.indexOf,J={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6.4",length:0,size:function(){return this.length},toArray:function(){return G.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?F.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),B.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(G.apply(this,arguments),"slice",G.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:F,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;B.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!B){B=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",C,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",C),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&K()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):J[D.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!E.call(a,"constructor")&&!E.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||E.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(x,"ms-").replace(w,y)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:H?function(a){return a==null?"":H.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?F.call(c,a):e.merge(c,a)}return c},inArray:function(a,b){if(!b)return-1;if(I)return I.call(b,a);for(var c=0,d=b.length;c<d;c++)if(b[c]===a)return c;return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=G.call(arguments,2),g=function(){return a.apply(c,f.concat(G.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=s.exec(a)||t.exec(a)||u.exec(a)||a.indexOf("compatible")<0&&v.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){J["[object "+b+"]"]=b.toLowerCase()}),A=e.uaMatch(z),A.browser&&(e.browser[A.browser]=!0,e.browser.version=A.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?C=function(){c.removeEventListener("DOMContentLoaded",C,!1),e.ready()}:c.attachEvent&&(C=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",C),e.ready())});return e}(),g="done fail isResolved isRejected promise then always pipe".split(" "),h=[].slice;f.extend({_Deferred:function(){var a=[],b,c,d,e={done:function(){if(!d){var c=arguments,g,h,i,j,k;b&&(k=b,b=0);for(g=0,h=c.length;g<h;g++)i=c[g],j=f.type(i),j==="array"?e.done.apply(e,i):j==="function"&&a.push(i);k&&e.resolveWith(k[0],k[1])}return this},resolveWith:function(e,f){if(!d&&!b&&!c){f=f||[],c=1;try{while(a[0])a.shift().apply(e,f)}finally{b=[e,f],c=0}}return this},resolve:function(){e.resolveWith(this,arguments);return this},isResolved:function(){return!!c||!!b},cancel:function(){d=1,a=[];return this}};return e},Deferred:function(a){var b=f._Deferred(),c=f._Deferred(),d;f.extend(b,{then:function(a,c){b.done(a).fail(c);return this},always:function(){return b.done.apply(b,arguments).fail.apply(this,arguments)},fail:c.done,rejectWith:c.resolveWith,reject:c.resolve,isRejected:c.isResolved,pipe:function(a,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[c,"reject"]},function(a,c){var e=c[0],g=c[1],h;f.isFunction(e)?b[a](function(){h=e.apply(this,arguments),h&&f.isFunction(h.promise)?h.promise().then(d.resolve,d.reject):d[g+"With"](this===b?d:this,[h])}):b[a](d[g])})}).promise()},promise:function(a){if(a==null){if(d)return d;d=a={}}var c=g.length;while(c--)a[g[c]]=b[g[c]];return a}}),b.done(c.cancel).fail(b.cancel),delete b.cancel,a&&a.call(b,b);return b},when:function(a){function i(a){return function(c){b[a]=arguments.length>1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c<d;c++)b[c]&&f.isFunction(b[c].promise)?b[c].promise().then(i(c),g.reject):--e;e||g.resolveWith(g,b)}else g!==a&&g.resolveWith(g,d?[a]:[]);return g.promise()}}),f.support=function(){var a=c.createElement("div"),b=c.documentElement,d,e,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;a.setAttribute("className","t"),a.innerHTML="   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55$/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue=i.value==="t",i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.firstChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},m&&f.extend(p,{position:"absolute",left:"-1000px",top:"-1000px"});for(t in p)o.style[t]=p[t];o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,k.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="<div style='width:4px;'></div>",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",q=a.getElementsByTagName("td"),u=q[0].offsetHeight===0,q[0].style.display="",q[1].style.display="none",k.reliableHiddenOffsets=u&&q[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",a.appendChild(j),k.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0),o.innerHTML="",n.removeChild(o);if(a.attachEvent)for(t in{submit:1,change:1,focusin:1})s="on"+t,u=s in a,u||(a.setAttribute(s,"return;"),u=typeof a[s]=="function"),k[t+"Bubbles"]=u;o=l=g=h=m=j=a=i=null;return k}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i=f.expando,j=typeof c=="string",k=a.nodeType,l=k?f.cache:a,m=k?a[f.expando]:a[f.expando]&&f.expando;if((!m||e&&m&&l[m]&&!l[m][i])&&j&&d===b)return;m||(k?a[f.expando]=m=++f.uuid:m=f.expando),l[m]||(l[m]={},k||(l[m].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?l[m][i]=f.extend(l[m][i],c):l[m]=f.extend(l[m],c);g=l[m],e&&(g[i]||(g[i]={}),g=g[i]),d!==b&&(g[f.camelCase(c)]=d);if(c==="events"&&!g[c])return g[i]&&g[i].events;j?(h=g[c],h==null&&(h=g[f.camelCase(c)])):h=g;return h}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e=f.expando,g=a.nodeType,h=g?f.cache:a,i=g?a[f.expando]:f.expando;if(!h[i])return;if(b){d=c?h[i][e]:h[i];if(d){d[b]||(b=f.camelCase(b)),delete d[b];if(!l(d))return}}if(c){delete h[i][e];if(!l(h[i]))return}var j=h[i][e];f.support.deleteExpando||!h.setInterval?delete h[i]:h[i]=null,j?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=j):g&&(f.support.deleteExpando?delete a[f.expando]:a.removeAttribute?a.removeAttribute(f.expando):a[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h<i;h++)g=e[h].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),k(this[0],g,d[g]))}}return d}if(typeof a=="object")return this.each(function(){f.data(this,a)});var j=a.split(".");j[1]=j[1]?"."+j[1]:"";if(c===b){d=this.triggerHandler("getData"+j[1]+"!",[j[0]]),d===b&&this.length&&(d=f.data(this[0],a),d=k(this[0],a,d));return d===b&&j[1]?this.data(j[0]):d}return this.each(function(){var b=f(this),d=[j[0],c];b.triggerHandler("setData"+j[1]+"!",d),f.data(this,a,c),b.triggerHandler("changeData"+j[1]+"!",d)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,c){a&&(c=(c||"fx")+"mark",f.data(a,c,(f.data(a,c,b,!0)||0)+1,!0))},_unmark:function(a,c,d){a!==!0&&(d=c,c=a,a=!1);if(c){d=d||"fx";var e=d+"mark",g=a?0:(f.data(c,e,b,!0)||1)-1;g?f.data(c,e,g,!0):(f.removeData(c,e,!0),m(c,d,"mark"))}},queue:function(a,c,d){if(a){c=(c||"fx")+"queue";var e=f.data(a,c,b,!0);d&&(!e||f.isArray(d)?e=f.data(a,c,f.makeArray(d),!0):e.push(d));return e||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e;d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),d.call(a,function(){f.dequeue(a,b)})),c.length||(f.removeData(a,b+"queue",!0),m(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(){var c=this;setTimeout(function(){f.dequeue(c,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f._Deferred(),!0))h++,l.done(m);m();return d.promise()}});var n=/[\n\t\r]/g,o=/\s+/,p=/\r/g,q=/^(?:button|input)$/i,r=/^(?:button|input|object|select|textarea)$/i,s=/^a(?:rea)?$/i,t=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,u,v;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(o);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(o);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(n," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(o);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ";for(var c=0,d=this.length;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(n," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;d=e.value;return typeof d=="string"?d.replace(p,""):d==null?"":d}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c=a.selectedIndex,d=[],e=a.options,g=a.type==="select-one";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h<i;h++){var j=e[h];if(j.selected&&(f.support.optDisabled?!j.disabled:j.getAttribute("disabled")===null)&&(!j.parentNode.disabled||!f.nodeName(j.parentNode,"optgroup"))){b=f(j).val();if(g)return b;d.push(b)}}if(g&&!d.length&&e.length)return f(e[c]).val();return d},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);j&&(c=f.attrFix[c]||c,i=f.attrHooks[c],i||(t.test(c)?i=v:u&&(i=u)));if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j&&(h=i.get(a,c))!==null)return h;h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.attr(a,b,""),a.removeAttribute(b),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(u&&f.nodeName(a,"button"))return u.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(u&&f.nodeName(a,"button"))return u.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);i&&(c=f.propFix[c]||c,h=f.propHooks[c]);return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==null?g:a[c]},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabIndex=f.propHooks.tabIndex,v={get:function(a,c){var d;return f.prop(a,c)===!0||(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},f.support.getSetAttribute||(u=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==""?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var w=/\.(.*)$/,x=/^(?:textarea|input|select)$/i,y=/\./g,z=/ /g,A=/[^\w\s.|`]/g,B=function(a){return a.replace(A,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=C;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=C);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),B).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j<p.length;j++){q=p[j];if(l||n.test(q.namespace))f.event.remove(a,r,q.handler,j),p.splice(j--,1)}continue}o=f.event.special[h]||{};for(j=e||0;j<p.length;j++){q=p[j];if(d.guid===q.guid){if(l||n.test(q.namespace))e==null&&p.splice(j--,1),o.remove&&o.remove.call(a,q);if(e!=null)break}}if(p.length===0||e!=null&&p.length===1)(!o.teardown||o.teardown.call(a,m)===!1)&&f.removeEvent(a,h,s.handle),g=null,delete 
t[h]}if(f.isEmptyObject(t)){var u=s.handle;u&&(u.elem=null),delete s.events,delete s.handle,f.isEmptyObject(s)&&f.removeData(a,b,!0)}}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){var h=c.type||c,i=[],j;h.indexOf("!")>=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d!=null?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h<i;h++){var j=d[h];if(e||c.namespace_re.test(j.namespace)){c.handler=j.handler,c.data=j.data,c.handleObj=j;var k=j.handler.apply(this,g);k!==b&&(c.result=k,k===!1&&(c.preventDefault(),c.stopPropagation()));if(c.isImmediatePropagationStopped())break}}return c.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(a){if(a[f.expando])return a;var d=a;a=f.Event(d);for(var e=this.props.length,g;e;)g=this.props[--e],a[g]=d[g];a.target||(a.target=a.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),!a.relatedTarget&&a.fromElement&&(a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement);if(a.pageX==null&&a.clientX!=null){var h=a.target.ownerDocument||c,i=h.documentElement,j=h.body;a.pageX=a.clientX+(i&&i.scrollLeft||j&&j.scrollLeft||0)-(i&&i.clientLeft||j&&j.clientLeft||0),a.pageY=a.clientY+(i&&i.scrollTop||j&&j.scrollTop||0)-(i&&i.clientTop||j&&j.clientTop||0)}a.which==null&&(a.charCode!=null||a.keyCode!=null)&&(a.which=a.charCode!=null?a.charCode:a.keyCode),!a.metaKey&&a.ctrlKey&&(a.metaKey=a.ctrlKey),!a.which&&a.button!==b&&(a.which=a.button&1?1:a.button&2?3:a.button&4?2:0);return a},guid:1e8,proxy:f.proxy,special:{ready:{setup:f.bindReady,teardown:f.noop},live:{add:function(a){f.event.add(this,M(a.origType,a.selector),f.extend({},a,{handler:L,guid:a.handler.guid}))},remove:function(a){f.event.remove(this,M(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}}},f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!this.preventDefault)return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?D:C):this.type=a,b&&f.extend(this,b),this.timeStamp=f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=D;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=D;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=D,this.stopPropagation()},isDefaultPrevented:C,isPropagationStopped:C,isImmediatePropagationStopped:C};var E=function(a){var b=a.relatedTarget,c=!1,d=a.type;a.type=a.data,b!==this&&(b&&(c=f.contains(this,b)),c||(f.event.handle.apply(this,arguments),a.type=d))},F=function(a){a.type=a.data,f.event.handle.apply(this,arguments)};f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={setup:function(c){f.event.add(this,b,c&&c.selector?F:E,a)},teardown:function(a){f.event.remove(this,b,a&&a.selector?F:E)}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(a,b){if(!f.nodeName(this,"form"))f.event.add(this,"click.specialSubmit",function(a){var b=a.target,c=f.nodeName(b,"input")||f.nodeName(b,"button")?b.type:"";(c==="submit"||c==="image")&&f(b).closest("form").length&&J("submit",this,arguments)}),f.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,c=f.nodeName(b,"input")||f.nodeName(b,"button")?b.type:"";(c==="text"||c==="password")&&f(b).closest("form").length&&a.keyCode===13&&J("submit",this,arguments)});else return!1},teardown:function(a){f.event.remove(this,".specialSubmit")}});if(!f.support.changeBubbles){var G,H=function(a){var b=f.nodeName(a,"input")?a.type:"",c=a.value;b==="radio"||b==="checkbox"?c=a.checked:b==="select-multiple"?c=a.selectedIndex>-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},I=function(c){var d=c.target,e,g;if(!!x.test(d.nodeName)&&!d.readOnly){e=f._data(d,"_change_data"),g=H(d),(c.type!=="focusout"||d.type!=="radio")&&f._data(d,"_change_data",g);if(e===b||g===e)return;if(e!=null||g)c.type="change",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:I,beforedeactivate:I,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&I.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&I.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",H(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in G)f.event.add(this,c+".specialChange",G[c]);return x.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return x.test(this.nodeName)}},G=f.event.special.change.filters,G.focus=G.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i<j;i++)f.event.add(this[i],a,g,d);return this}}),f.fn.extend({unbind:function(a,b){if(typeof a=="object"&&!a.preventDefault)for(var c in a)this.unbind(c,a[c]);else for(var d=0,e=this.length;d<e;d++)f.event.remove(this[d],a,b);return this},delegate:function(a,b,c,d){return this.live(b,c,d,a)},undelegate:function(a,b,c){return arguments.length===0?this.unbind("live"):this.die(b,null,c,a)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f.data(this,"lastToggle"+a.guid)||0)%d;f.data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var K={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};f.each(["live","die"],function(a,c){f.fn[c]=function(a,d,e,g){var h,i=0,j,k,l,m=g||this.selector,n=g?this:f(this.context);if(typeof a=="object"&&!a.preventDefault){for(var o in a)n[c](o,d,a[o],m);return this}if(c==="die"&&!a&&g&&g.charAt(0)==="."){n.unbind(g);return this}if(d===!1||f.isFunction(d))e=d||C,d=b;a=(a||"").split(" ");while((h=a[i++])!=null){j=w.exec(h),k="",j&&(k=j[0],h=h.replace(w,""));if(h==="hover"){a.push("mouseenter"+k,"mouseleave"+k);continue}l=h,K[h]?(a.push(K[h]+k),h=h+k):h=(K[h]||h)+k;if(c==="live")for(var p=0,q=n.length;p<q;p++)f.event.add(n[p],"live."+M(h,m),{data:d,selector:m,handler:e,origType:h,origHandler:e,preType:l});else n.unbind("live."+M(h,m),e)}return this}}),f.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".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}if(i.nodeType===1){f||(i.sizcache=c,i.sizset=g);if(typeof b!="string"){if(i===b){j=!0;break}}else if(k.filter(b,[i]).length>0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}i.nodeType===1&&!f&&(i.sizcache=c,i.sizset=g);if(i.nodeName.toLowerCase()===b){j=i;break}i=i[a]}d[g]=j}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},k.matches=function(a,b){return k(a,null,null,b)},k.matchesSelector=function(a,b){return k(b,null,null,[a]).length>0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e<f;e++){var g,h=l.order[e];if(g=l.leftMatch[h].exec(a)){var j=g[1];g.splice(1,1);if(j.substr(j.length-1)!=="\\"){g[1]=(g[1]||"").replace(i,""),d=l.find[h](g,b,c);if(d!=null){a=a.replace(l.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},k.filter=function(a,c,d,e){var f,g,h=a,i=[],j=c,m=c&&c[0]&&k.isXML(c[0]);while(a&&c.length){for(var n in l.filter)if((f=l.leftMatch[n].exec(a))!=null&&f[2]){var o,p,q=l.filter[n],r=f[1];g=!1,f.splice(1,1);if(r.substr(r.length-1)==="\\")continue;j===i&&(i=[]);if(l.preFilter[n]){f=l.preFilter[n](f,j,d,i,e,m);if(!f)g=o=!0;else if(f===!0)continue}if(f)for(var s=0;(p=j[s])!=null;s++)if(p){o=q(p,f,s,j);var t=e^!!o;d&&o!=null?t?g=!0:j[s]=!1:t&&(i.push(p),g=!0)}if(o!==b){d||(j=i),a=a.replace(l.match[n],"");if(!g)return[];break}}if(a===h)if(g==null)k.error(a);else break;h=a}return j},k.error=function(a){throw"Syntax error, unrecognized expression: "+a};var l=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!j.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&k.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&k.filter(b,a,!0)}},"":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("parentNode",b,f,a,e,c)},"~":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("previousSibling",b,f,a,e,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(i,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}k.error(e)},CHILD:function(a,b){var c=b[1],d=a;switch(c){case"only":case"first":while(d=d.previousSibling)if(d.nodeType===1)return!1;if(c==="first")return!0;d=a;case"last":while(d=d.nextSibling)if(d.nodeType===1)return!1;return!0;case"nth":var e=b[2],f=b[3];if(e===1&&f===0)return!0;var g=b[0],h=a.parentNode;if(h&&(h.sizcache!==g||!a.nodeIndex)){var i=0;for(d=h.firstChild;d;d=d.nextSibling)d.nodeType===1&&(d.nodeIndex=++i);h.sizcache=g}var j=a.nodeIndex-f;return e===0?j===0:j%e===0&&j/e>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c<f;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var r,s;c.documentElement.compareDocumentPosition?r=function(a,b){if(a===b){g=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(r=function(a,b){if(a===b){g=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],h=a.parentNode,i=b.parentNode,j=h;if(h===i)return s(a,b);if(!h)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return s(e[k],f[k]);return k===c?s(a,f[k],-1):s(e[k],b,1)},s=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),k.getText=function(a){var b="",c;for(var d=0;a[d];d++)c=a[d],c.nodeType===3||c.nodeType===4?b+=c.nodeValue:c.nodeType!==8&&(b+=k.getText(c.childNodes));return b},function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g<h;g++)k(a,f[g],d);return k.filter(e,d)};f.find=k,f.expr=k.selectors,f.expr[":"]=f.expr.filters,f.unique=k.uniqueSort,f.text=k.getText,f.isXMLDoc=k.isXML,f.contains=k.contains}();var N=/Until$/,O=/^(?:parents|prevUntil|prevAll)/,P=/,/,Q=/^.[^:#\[\.,]*$/,R=Array.prototype.slice,S=f.expr.match.POS,T={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(V(this,a,!1),"not",a)},filter:function(a){return this.pushStack(V(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d<e;d++)i=a[d],j[i]||(j[i]=S.test(i)?f(i,b||this.context):i);while(g&&g.ownerDocument&&g!==b){for(i in j)h=j[i],(h.jquery?h.index(g)>-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=S.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(l?l.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(U(c[0])||U(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=R.call(arguments);N.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!T[a]?f.unique(e):e,(this.length>1||P.test(d))&&O.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|object|embed|option|style)/i,bb=/checked\s*(?:[^=]|=\s*.checked.)/i,bc=/\/(java|ecma)script/i,bd=/^\s*<!(?:\[CDATA\[|\-\-)/,be={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};be.optgroup=be.option,be.tbody=be.tfoot=be.colgroup=be.caption=be.thead,be.th=be.td,f.support.htmlSerialize||(be._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!be[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bb.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bf(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bl)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i;b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof a[0]=="string"&&a[0].length<512&&i===c&&a[0].charAt(0)==="<"&&!ba.test(a[0])&&(f.support.checkClone||!bb.test(a[0]))&&(g=!0,h=f.fragments[a[0]],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean
(a,i,e,d)),g&&(f.fragments[a[0]]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bh(a,d),e=bi(a),g=bi(d);for(h=0;e[h];++h)g[h]&&bh(e[h],g[h])}if(b){bg(a,d);if(c){e=bi(a),g=bi(d);for(h=0;e[h];++h)bg(e[h],g[h])}}e=g=null;return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=be[l]||be._default,n=m[0],o=b.createElement("div");o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bk(k[i]);else bk(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||bc.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.expando,g=f.event.special,h=f.support.deleteExpando;for(var i=0,j;(j=a[i])!=null;i++){if(j.nodeName&&f.noData[j.nodeName.toLowerCase()])continue;c=j[f.expando];if(c){b=d[c]&&d[c][e];if(b&&b.events){for(var k in b.events)g[k]?f.event.remove(j,k):f.removeEvent(j,k,b.handle);b.handle&&(b.handle.elem=null)}h?delete j[f.expando]:j.removeAttribute&&j.removeAttribute(f.expando),delete d[c]}}}});var bm=/alpha\([^)]*\)/i,bn=/opacity=([^)]*)/,bo=/([A-Z]|^ms)/g,bp=/^-?\d+(?:px)?$/i,bq=/^-?\d/,br=/^([\-+])=([\-+.\de]+)/,bs={position:"absolute",visibility:"hidden",display:"block"},bt=["Left","Right"],bu=["Top","Bottom"],bv,bw,bx;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bv(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=br.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bv)return bv(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return by(a,b,d);f.swap(a,bs,function(){e=by(a,b,d)});return e}},set:function(a,b){if(!bp.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bn.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bm,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bm.test(g)?g.replace(bm,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bv(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bw=function(a,c){var d,e,g;c=c.replace(bo,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bx=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bp.test(d)&&bq.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bv=bw||bx,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bz=/%20/g,bA=/\[\]$/,bB=/\r?\n/g,bC=/#.*$/,bD=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bE=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bF=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bG=/^(?:GET|HEAD)$/,bH=/^\/\//,bI=/\?/,bJ=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bK=/^(?:select|textarea)/i,bL=/\s+/,bM=/([?&])_=[^&]*/,bN=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bO=f.fn.load,bP={},bQ={},bR,bS,bT=["*/"]+["*"];try{bR=e.href}catch(bU){bR=c.createElement("a"),bR.href="",bR=bR.href}bS=bN.exec(bR.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bO)return bO.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bJ,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bK.test(this.nodeName)||bE.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bB,"\r\n")}}):{name:b.name,value:c.replace(bB,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?bX(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),bX(a,b);return a},ajaxSettings:{url:bR,isLocal:bF.test(bS[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bT},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bV(bP),ajaxTransport:bV(bQ),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?bZ(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=b$(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bD.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bC,"").replace(bH,bS[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bL),d.crossDomain==null&&(r=bN.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bS[1]&&r[2]==bS[2]&&(r[3]||(r[1]==="http:"?80:443))==(bS[3]||(bS[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bW(bP,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bG.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bI.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bM,"$1_="+x);d.url=y+(y===d.url?(bI.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bT+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bW(bQ,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){s<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)bY(g,a[g],c,e);return d.join("&").replace(bz,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var b_=f.now(),ca=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+b_++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ca.test(b.url)||e&&ca.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ca,l),b.url===j&&(e&&(k=k.replace(ca,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cb=a.ActiveXObject?function(){for(var a in cd)cd[a](0,1)}:!1,cc=0,cd;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ce()||cf()}:ce,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cb&&delete cd[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cc,cb&&(cd||(cd={},f(a).unload(cb)),cd[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cg={},ch,ci,cj=/^(?:toggle|show|hide)$/,ck=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cl,cm=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cn;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cq("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cr(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cq("hide",3),a,b,c);for(var d=0,e=this.length;d<e;d++)if(this[d].style){var g=f.css(this[d],"display");g!=="none"&&!f._data(this[d],"olddisplay")&&f._data(this[d],"olddisplay",g)}for(d=0;d<e;d++)this[d].style&&(this[d].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cq("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return this[e.queue===!1?"each":"queue"](function(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(f.support.inlineBlockNeedsLayout?(j=cr(this.nodeName),j==="inline"?this.style.display="inline-block":(this.style.display="inline",this.style.zoom=1)):this.style.display="inline-block"))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)k=new f.fx(this,b,i),h=a[i],cj.test(h)?k[h==="toggle"?d?"show":"hide":h]():(l=ck.exec(h),m=k.cur(),l?(n=parseFloat(l[2]),o=l[3]||(f.cssNumber[i]?"":"px"),o!=="px"&&(f.style(this,i,(n||1)+o),m=(n||1)/k.cur()*m,f.style(this,i,m+o)),l[1]&&(n=(l[1]==="-="?-1:1)*n+m),k.custom(m,n,o)):k.custom(m,h,""));return!0})},stop:function(a,b){a&&this.queue([]),this.each(function(){var a=f.timers,c=a.length;b||f._unmark(!0,this);while(c--)a[c].elem===this&&(b&&a[c](!0),a.splice(c,1))}),b||this.dequeue();return this}}),f.each({slideDown:cq("show",1),slideUp:cq("hide",1),slideToggle:cq("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default,d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue!==!1?f.dequeue(this):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,b,c){function g(a){return d.step(a)}var d=this,e=f.fx;this.startTime=cn||co(),this.start=a,this.end=b,this.unit=c||this.unit||(f.cssNumber[this.prop]?"":"px"),this.now=this.start,this.pos=this.state=0,g.elem=this.elem,g()&&f.timers.push(g)&&!cl&&(cl=setInterval(e.tick,e.interval))},show:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.show=!0,this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b=cn||co(),c=!0,d=this.elem,e=this.options,g,h;if(a||b>=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){for(var a=f.timers,b=0;b<a.length;++b)a[b]()||a.splice(b--,1);a.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cl),cl=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit:a.elem[a.prop]=a.now}}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cs=/^t(?:able|d|h)$/i,ct=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cu(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);f.offset.initialize();var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.offset.supportsFixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.offset.doesNotAddBorder&&(!f.offset.doesAddBorderForTableAndCells||!cs.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.offset.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.offset.supportsFixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={initialize:function(){var a=c.body,b=c.createElement("div"),d,e,g,h,i=parseFloat(f.css(a,"marginTop"))||0,j="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=ct.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!ct.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cu(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cu(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a&&a.style?parseFloat(f.css(a,d,"padding")):null},f.fn["outer"+c]=function(a){var b=this[0];return b&&b.style?parseFloat(f.css(b,d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNaN(j)?i:j}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window);PK�����*†9D������������h��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/public/stylesheets/main.cssPK�����*†9D_5¢<���<���Z��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/htgroupsroot: root apacheRoot
users: root apacheRoot user apacheUserPK�����*†9D(ÉÆ9����e��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/EncryptionTest.java
import org.junit.Test;
import play.Logger;
import play.modules.fileauth.utils.MD5Crypt;
import play.test.UnitTest;

/**
 * EncryptionTest
 * 31.07.2012
 * @author Philipp Haussleiter
 *
 */
public class EncryptionTest extends UnitTest {

    @Test
    public void testApacheCrypt() {
        Logger.info("testing APACHE_CRYPT");
        String clear = "pw_" + System.currentTimeMillis();
        String pass;
        String salt = "abcd1234";
        pass = MD5Crypt.apacheCrypt(clear);
        Logger.info(clear + " got me " + pass);
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
        pass = MD5Crypt.apacheCrypt(clear, salt);
        Logger.info(clear + " & salt " + salt + " got me " + pass);
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
    }

    @Test
    public void testCrypt() {
        Logger.info("testing CRYPT");
        String clear = "pw_" + System.currentTimeMillis();
        String pass;
        String salt = "abcd1234";
        pass = MD5Crypt.crypt(clear);
        Logger.info(clear + " got me " + pass);
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
        pass = MD5Crypt.crypt(clear, salt);
        Logger.info(clear + " & salt " + salt + " got me " + pass);
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
    }
}
PK�����*†9D*˜,-I��I��f��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/ApacheUsersTest.java
import java.util.HashMap;
import java.util.Map;
import org.junit.BeforeClass;
import org.junit.Test;
import play.Play;
import play.cache.Cache;
import play.modules.fileauth.FileAuth;
import play.modules.fileauth.utils.MD5Crypt;
import play.test.UnitTest;

/**
 * ApacheUsersTest
 * 03.08.2012
 * @author Philipp Haussleiter
 *
 */
public class ApacheUsersTest extends UnitTest {

    @BeforeClass
    public static void setup() {
        Play.configuration.setProperty("authfile.users.path", Play.applicationPath + "/test/htusers");
        Play.configuration.setProperty("authfile.users.delimeter", ":");
        Cache.safeDelete(FileAuth.AUTH_FILE_USERS_CACHE_KEY);
        FileAuth.scanUsers();
    }

    @Test
    public void testUsersRead() {
        Map<String, String> users = Cache.get(FileAuth.AUTH_FILE_USERS_CACHE_KEY, HashMap.class);
        assertNotNull(users);
    }

    @Test
    public void testUsersValidate() {
        String clear = "user";
        String pass = MD5Crypt.crypt("user");
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
    }

    @Test
    public void testValidatePassword() {
        String pass = "user";
        String user = "user";
        assertTrue(FileAuth.validate(user, pass));
        user = "apacheUser";
        assertTrue(FileAuth.validate(user, pass));
        user = "user";
        pass = "user123";
        assertFalse(FileAuth.validate(user, pass));
    }

    @Test
    public void testValidateNotExistingUser() {
        String pass = "user123";
        String user = "user123";
        assertFalse(FileAuth.validate(user, pass));
    }
}
PK�����*†9DÄžŒÒù��ù��f��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/GroupGroupsTest.java
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.junit.BeforeClass;
import org.junit.Test;
import play.Play;
import play.cache.Cache;
import play.modules.fileauth.FileAuth;
import play.test.UnitTest;

/**
 * GroupGroupsTest
 * 04.08.2012
 * @author Philipp Haussleiter
 *
 */
public class GroupGroupsTest extends UnitTest {

    @BeforeClass
    public static void setup() {
        Play.configuration.setProperty("authfile.groups.path", Play.applicationPath + "/test/group");
        Play.configuration.setProperty("authfile.users.delimeter", ":");
        Play.configuration.setProperty("authfile.groups.delimeter", ",");
        Cache.safeDelete(FileAuth.AUTH_FILE_GROUPS_CACHE_KEY);
    }

    @Test
    public void testUsersRead() {
        FileAuth.scanGroups();
        Map<String, Set<String>> groups = Cache.get(FileAuth.AUTH_FILE_GROUPS_CACHE_KEY, HashMap.class);
        assertNotNull(groups);
    }

    @Test
    public void testGroupContainsUser() {
        String user = "user";
        String group = "users";
        assertTrue(FileAuth.contains(group, user));
        user = "root";
        assertTrue(FileAuth.contains(group, user));
    }

    @Test
    public void testGroupNotContainsUser() {
        String user = "user";
        String group = "root";
        assertFalse(FileAuth.contains(group, user));
    }

    public void testGroupNotExists() {
        String user = "user";
        String group = "user";
        assertFalse(FileAuth.contains(group, user));
    }
}PK�����*†9D?5'³g��g��f��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/ShadowUsersTest.java
import java.util.HashMap;
import java.util.Map;
import org.junit.BeforeClass;
import org.junit.Test;
import play.Logger;
import play.Play;
import play.cache.Cache;
import play.modules.fileauth.FileAuth;
import play.modules.fileauth.utils.MD5Crypt;
import play.test.UnitTest;


/**
 * ShadowUsersTest
 * 04.08.2012
 * @author Philipp Haussleiter
 *
 */
public class ShadowUsersTest extends UnitTest {

    @BeforeClass
    public static void setup() {
        Play.configuration.setProperty("authfile.users.path", Play.applicationPath + "/test/shadow");
        Logger.info("file path: "+Play.configuration.getProperty("authfile.users.path"));
        Play.configuration.setProperty("authfile.users.delimeter", ":");
        Cache.safeDelete(FileAuth.AUTH_FILE_USERS_CACHE_KEY);
    }

    @Test
    public void testUsersRead() {
        FileAuth.scanUsers();
        Map<String, String> users = Cache.get(FileAuth.AUTH_FILE_USERS_CACHE_KEY, HashMap.class);
        assertNotNull(users);
    }

    @Test
    public void testUsersValidate() {
        String clear = "user";
        String pass = MD5Crypt.crypt("user");
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
    }

    @Test
    public void testValidatePassword() {
        String pass = "user";
        String user = "user";
        assertTrue(FileAuth.validate(user, pass));
        user = "user";
        pass = "user123";
        assertFalse(FileAuth.validate(user, pass));
    }

    @Test
    public void testValidateNotExistingUser() {
        String pass = "user123";
        String user = "user123";
        assertFalse(FileAuth.validate(user, pass));
    }
}
PK�����*†9DTâÒ%���%���W��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/grouproot:x:321:root
users:x:123:root,userPK�����*†9Dcé¸���¸���Z��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/data.yml# you describe your data using the YAML notation here
# and then load them using Fixtures.load("data.yml")

# User(bob):
#   email: bob@gmail.com
#   password: secret
#   fullname: BobPK�����*†9D<_'²���²���Y��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/htusersapacheUser:$apr1$kuwPretH$BPbVoWoDTEFUw.4g1zDKs1
apacheRoot:$apr1$nVmU2aOS$rDZ4.BG3TPT02YBsCVcSG/
root:$1$imw51D2V$aJbVmk2xlEg8q.Y8nh91E.
user:$1$4aMItwK9$PnpH2GeuHDeR2t.jKhQ771
PK�����*†9DÇÀ���À���`��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/BasicTest.javaimport org.junit.*;
import play.test.*;

public class BasicTest extends UnitTest {

    @Test
    public void aVeryImportantThingToTest() {
        assertEquals(2, 1 + 1);
    }

}
PK�����*†9D‰=u���u���X��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/shadowroot:$1$imw51D2V$aJbVmk2xlEg8q.Y8nh91E.:43534:0:435:7:::
user:$1$4aMItwK9$PnpH2GeuHDeR2t.jKhQ771:345345:0:46456:7:::
PK�����*†9D,mˆ÷��÷��g��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/ApacheGroupsTest.java
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.junit.BeforeClass;
import org.junit.Test;
import play.Logger;
import play.Play;
import play.cache.Cache;
import play.modules.fileauth.FileAuth;
import play.test.UnitTest;

/**
 * ApacheGroupsTest 03.08.2012
 *
 * @author Philipp Haussleiter
 *
 */
public class ApacheGroupsTest extends UnitTest {

    @BeforeClass
    public static void setup() {
        Play.configuration.setProperty("authfile.groups.path", Play.applicationPath + "/test/htgroups");
        Play.configuration.setProperty("authfile.users.path", Play.applicationPath + "/test/htusers");
        Play.configuration.setProperty("authfile.users.delimeter", ":");
        Play.configuration.setProperty("authfile.groups.delimeter", " ");
        Cache.safeDelete(FileAuth.AUTH_FILE_GROUPS_CACHE_KEY);
        Cache.safeDelete(FileAuth.AUTH_FILE_USERS_CACHE_KEY);
        FileAuth.scanGroups();
        FileAuth.scanUsers();
    }

    @Test
    public void testGroupsRead() {
        Logger.info("testGroupsRead");
        FileAuth.scanGroups();
        Map<String, Set<String>> groups = Cache.get(FileAuth.AUTH_FILE_GROUPS_CACHE_KEY, HashMap.class);
        assertNotNull(groups);
        int groupSize = groups.size();
        assertTrue(String.format("but was %d ", groupSize), groupSize > 0);
    }

    @Test
    public void testGroupContainsUser() {
        FileAuth.scanGroups();
        FileAuth.scanUsers();
        String user = "user";
        String group = "users";
        assertTrue(String.format("u: %s, g: %s", user, group), FileAuth.contains(group, user));
        user = "root";
        assertTrue(String.format("u: %s, g: %s", user, group), FileAuth.contains(group, user));
    }

    @Test
    public void testGroupNotContainsUser() {
        FileAuth.scanGroups();
        FileAuth.scanUsers();
        String user = "user";
        String group = "root";
        assertFalse(String.format("u: %s, g: %s", user, group), FileAuth.contains(group, user));
    }

    public void testGroupNotExists() {
        FileAuth.scanGroups();
        FileAuth.scanUsers();
        String user = "user";
        String group = "user";
        assertFalse(String.format("u: %s, g: %s", user, group), FileAuth.contains(group, user));
    }
}
PK�����*†9D/%ÈBÔ��Ô��X��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/routes# Routes
# This file defines all application routes (Higher priority routes first)
# ~~~~

# Home page
GET     /                                       Application.index

# Ignore favicon requests
GET     /favicon.ico                            404

# Map static resources from the /app/public folder to the /public path
GET     /public/                                staticDir:public

# Catch all
*       /{controller}/{action}                  {controller}.{action}
PK�����*†9D¥#Æ/Ç��Ç��b��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/application.conf# This is the main configuration file for the application.
# ~~~~~
application.name=auth-file-demo

# Application mode
# ~~~~~
# Set to dev to enable instant reloading and other development help.
# Otherwise set to prod.
application.mode=dev
%prod.application.mode=prod

# Secret key
# ~~~~~
# The secret key is used to secure cryptographics functions
# If you deploy your application to several instances be sure to use the same key !
application.secret=uQks53MboMLlGVsJSrPRCipiFOZ4BXn8oDBfOxGxsaXDVtkJOJaIiBNX9SNQoUN8

# i18n
# ~~~~~
# Define locales used by your application.
# You can then place localized messages in conf/messages.{locale} files
# application.langs=fr,en,ja

# Date format
# ~~~~~
date.format=yyyy-MM-dd
# date.format.fr=dd/MM/yyyy

# Server configuration
# ~~~~~
# If you need to change the HTTP port, uncomment this (default is set to 9000)
# http.port=9000
#
# By default the server listen for HTTP on the wilcard address.
# You can restrict this.
# http.address=127.0.0.1
#
# Use this if you don't host your Play application at the root of the domain
# you're serving it from. This parameter has no effect when deployed as a
# war, because the path will be handled by the application server.
# http.path=/

# Session configuration
# ~~~~~~~~~~~~~~~~~~~~~~
# By default, session will be written to the transient PLAY_SESSION cookie.
# The cookies are not secured by default, only set it to true
# if you're serving your pages through https.
# application.session.cookie=PLAY
# application.session.maxAge=1h
# application.session.secure=false

# Session/Cookie sharing between subdomain
# ~~~~~~~~~~~~~~~~~~~~~~
# By default a cookie is only valid for a specific domain. By setting
# application.defaultCookieDomain to '.example.com', the cookies
# will be valid for all domains ending with '.example.com', ie:
# foo.example.com and bar.example.com
# application.defaultCookieDomain=.example.com

# JVM configuration
# ~~~~~
# Define which port is used by JPDA when application is in debug mode (default is set to 8000)
# jpda.port=8000
#
# Java source level => 1.5, 1.6 or 1.7 (experimental)
# java.source=1.5

# Log level
# ~~~~~
# Specify log level for your application.
# If you want a very customized log, create a log4j.properties file in the conf directory
# application.log=INFO
#
# More logging configuration
# application.log.path=/log4j.properties
# application.log.system.out=off

# Database configuration
# ~~~~~ 
# Enable a database engine if needed.
#
# To quickly set up a development database, use either:
#   - mem : for a transient in memory database (H2 in memory)
#   - fs  : for a simple file written database (H2 file stored)
# db=mem
#
# To connect to a local MySQL5 database, use:
# db=mysql://user:pwd@host/database
#
# To connect to a local PostgreSQL9 database, use:
# db=postgres://user:pwd@host/database
#
# If you need a full JDBC configuration use the following :
# db.url=jdbc:postgresql:database_name
# db.driver=org.postgresql.Driver
# db.user=root
# db.pass=secret
#
# Connections pool configuration :
# db.pool.timeout=1000
# db.pool.maxSize=30
# db.pool.minSize=10
#
# If you want to reuse an existing Datasource from your application server, use:
# db=java:/comp/env/jdbc/myDatasource
#
# When using an existing Datasource, it's sometimes needed to destroy it when
# the application is stopped. Depending on the datasource, you can define a
# generic "destroy" method :
# db.destroyMethod=close

# JPA Configuration (Hibernate)
# ~~~~~
#
# Specify the custom JPA dialect to use here (default to guess):
# jpa.dialect=org.hibernate.dialect.PostgreSQLDialect
#
# Specify the ddl generation pattern to use. Set to none to disable it 
# (default to update in DEV mode, and none in PROD mode):
# jpa.ddl=update
#
# Debug SQL statements (logged using DEBUG level):
# jpa.debugSQL=true
#
# You can even specify additional hibernate properties here:
# hibernate.use_sql_comments=true
# ...
#
# Store path for Blob content
attachments.path=data/attachments

# Memcached configuration
# ~~~~~ 
# Enable memcached if needed. Otherwise a local cache is used.
# memcached=enabled
#
# Specify memcached host (default to 127.0.0.1:11211)
# memcached.host=127.0.0.1:11211
#
# Or you can specify multiple host to build a distributed cache
# memcached.1.host=127.0.0.1:11211
# memcached.2.host=127.0.0.1:11212
#
# Use plain SASL to authenticate for memcached
# memcached.user=
# memcached.password=

# HTTP Response headers control for static files
# ~~~~~
# Set the default max-age, telling the user's browser how long it should cache the page.
# Default is 3600 (one hour). Set it to 0 to send no-cache.
# This is only read in prod mode, in dev mode the cache is disabled.
# http.cacheControl=3600

# If enabled, Play will generate entity tags automatically and send a 304 when needed.
# Default is true, set it to false to deactivate use of entity tags.
# http.useETag=true

# Custom mime types
# mimetype.xpi=application/x-xpinstall

# WS configuration
# ~~~~~
# Default engine is Async Http Client, uncomment to use
# the JDK's internal implementation
# webservice = urlfetch
# If you need to set proxy params for WS requests
# http.proxyHost = localhost
# http.proxyPort = 3128
# http.proxyUser = jojo
# http.proxyPassword = jojo

# Mail configuration
# ~~~~~ 
# Default is to use a mock Mailer
mail.smtp=mock

# Or, specify mail host configuration
# mail.smtp.host=127.0.0.1
# mail.smtp.user=admin
# mail.smtp.pass=
# mail.smtp.channel=ssl

# Url-resolving in Jobs
# ~~~~~~
# When rendering templates with reverse-url-resoling (@@{..}) in Jobs (which do not have an inbound Http.Request),
# ie if sending a HtmlMail, Play need to know which url your users use when accessing your app.
# %test.application.baseUrl=http://localhost:9000/
# %prod.application.baseUrl=http://www.yourdomain.com/

# Jobs executor
# ~~~~~~
# Size of the Jobs pool
# play.jobs.pool=10

# Execution pool
# ~~~~~
# Default to 1 thread in DEV mode or (nb processors + 1) threads in PROD mode.
# Try to keep a low as possible. 1 thread will serialize all requests (very useful for debugging purpose)
# play.pool=3

# Open file from errors pages
# ~~~~~
# If your text editor supports opening files by URL, Play! will
# dynamically link error pages to files 
#
# Example, for textmate:
# play.editor=txmt://open?url=file://%s&line=%s

# Testing. Set up a custom configuration for test mode
# ~~~~~
#%test.module.cobertura=${play.path}/modules/cobertura
%test.application.mode=dev
%test.db.url=jdbc:h2:mem:play;MODE=MYSQL;LOCK_MODE=0
%test.jpa.ddl=create
%test.mail.smtp=mock

PK�����*†9D‹úWÀ �� ��b��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/dependencies.yml# Application dependencies

require:
    - play
    - play -> secure
    - local -> play-file-auth 0.2
    
repositories:
    - playCustomModules:
        type:       local
        artifact:   ${application.path}/../../dist/[module]-[revision].zip
        contains:
          - local -> *PK�����*†9Dqé¶h���h���Z��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/messages# You can specialize this file for each language.
# For example, for French create a messages.fr file
#
PK�����*†9D«_^)/��/��`��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/main.html<!DOCTYPE html>

<html>
    <head>
        <title>#{get 'title' /}</title>
        <meta charset="${_response_encoding}">
        <link rel="stylesheet" media="screen" href="@{'/public/stylesheets/main.css'}">
        #{get 'moreStyles' /}
        <link rel="shortcut icon" type="image/png" href="@{'/public/images/favicon.png'}">
        <script src="@{'/public/javascripts/jquery-1.6.4.min.js'}" type="text/javascript" charset="${_response_encoding}"></script>
        #{get 'moreScripts' /}
    </head>
    <body>
        #{doLayout /}
    </body>
</html>
PK�����*†9D*º$•<���<���m��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/Application/index.html#{extends 'main.html' /}
#{set title:'Home' /}

#{welcome /}PK�����*†9DÙ¦��¦��f��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/errors/404.html<!DOCTYPE html>

<html>
    <head>
        <title>Not found</title>
        <meta http-equiv="Content-Type" content="text/html; charset=${_response_encoding}"/>    
    </head>
    <body>
        #{if play.mode.name() == 'DEV'}
            #{404 result /}
        #{/if}
        #{else}
            <h1>Not found</h1>
            <p>
                ${result.message}
            </p>
        #{/else}
    </body>
</html>
PK�����*†9DËip®V��V��f��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/errors/500.html<!DOCTYPE html>

<html>
    <head>
        <title>Application error</title>
        <meta http-equiv="Content-Type" content="text/html; charset=${_response_encoding}"/>	
    </head>
    <body>
        #{if play.mode.name() == 'DEV'}
            #{500 exception /}
        #{/if}
        #{else}
            <h1>Oops, an error occured</h1>
            #{if exception instanceof play.exceptions.PlayException}
                <p>
                    This exception has been logged with id <strong>${exception.id}</strong>.
                </p>
            #{/if}
        #{/else}
    </body>
</html>
PK�����*†9D¤8r“���“���m��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/controllers/Application.javapackage controllers;
import play.mvc.*;

public class Application extends Controller {

    public static void index() {
        render();
    }

}PK�����*†9Dp­b’$���$���[��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/secure/opt/play/play-1.2.5/modules/secure
PK�����*†9DD6I÷P��P��s��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.py# Here you can create play commands that are specific to the module, and extend existing commands

MODULE = 'play-file-auth'

# Commands that are specific to your module

COMMANDS = ['play-file-auth:hello']

def execute(**kargs):
    command = kargs.get("command")
    app = kargs.get("app")
    args = kargs.get("args")
    env = kargs.get("env")

    if command == "play-file-auth:hello":
        print "~ Hello"


# This will be executed before any command (new, run...)
def before(**kargs):
    command = kargs.get("command")
    app = kargs.get("app")
    args = kargs.get("args")
    env = kargs.get("env")


# This will be executed after any command (new, run...)
def after(**kargs):
    command = kargs.get("command")
    app = kargs.get("app")
    args = kargs.get("args")
    env = kargs.get("env")

    if command == "new":
        pass
PK�����*†9DŒÀÉZ•��•��q��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/README.mdplay-file-auth
==============

This Module supports authentication of Play! 1.x Applications agains Unix Auth Files (e.g. Apache htusers)

This Plugin works for all Auth Files with the following syntax:


    user1:passwordhash
    user1:passwordhash:...:...:

    group:user1 user2
    group:x:...:user1,user2


The Hash Algorithm has to be either MD5 Crypt or MD5 Apache Crypt.

    $1$...
    $apr1$...PK�����*†9DaCV��V��q��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/build.xml<?xml version="1.0" encoding="UTF-8"?>

<project name="play-file-auth" default="build" basedir=".">

    <target name="check" unless="play.path">
        <fail message="Please specify Play framework path using -Dplay.path=/path/to/framework/home" />
    </target>

    <path id="project.classpath">
        <pathelement path="${play.path}/framework/classes"/>
        <fileset dir="${play.path}/framework/lib">
            <include name="*.jar"/>
        </fileset>
        <fileset dir="${play.path}/framework">
            <include name="*.jar"/>
        </fileset>
        <fileset dir="lib">
            <include name="*.jar"/>
        </fileset>
    </path>

    <target name="build" depends="compile">
        <mkdir dir="lib" />
        <copy todir="tmp/classes">
            <fileset dir="src">
                <include name="**/*.properties"/>
                <include name="**/*.xml"/>
                <include name="**/play.plugins"/>
                <include name="**/play.static"/>
            </fileset>
        </copy>
        <jar destfile="lib/play-play-file-auth.jar" basedir="tmp/classes">
            <manifest>
                <section name="Play-module">
                    <attribute name="Specification-Title" value="play-file-auth"/>
                </section>
            </manifest>
        </jar>
        <delete dir="tmp" />
    </target>

    <target name="compile" depends="check">
        <mkdir dir="tmp/classes" />
        <javac srcdir="src" destdir="tmp/classes" target="1.5" debug="true">
            <classpath refid="project.classpath" />
        </javac>
    </target>

</project>
PK�����*†9Dnê§xÖ��Ö��t��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pycÑò
è)Rc�����������@���s.���d��Z��d�g�Z�d�„��Z�d�„��Z�d�„��Z�d�S(���s���play-file-auths���play-file-auth:helloc����������K���sV���|��i��d�ƒ�}�|��i��d�ƒ�}�|��i��d�ƒ�}�|��i��d�ƒ�}�|�d�j�o	�d�GHn�d��S(���Nt���commandt���appt���argst���envs���play-file-auth:hellos���~ Hello(���t���get(���t���kargsR����R���R���R���(����(����s���/home/javastream.de/jenkins/jobs/de.consolving.play-file-auth/workspace/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pyt���execute	���s����
c����������K���s@���|��i��d�ƒ�}�|��i��d�ƒ�}�|��i��d�ƒ�}�|��i��d�ƒ�}�d��S(���NR����R���R���R���(���R���(���R���R����R���R���R���(����(����s���/home/javastream.de/jenkins/jobs/de.consolving.play-file-auth/workspace/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pyt���before���s����c����������K���sQ���|��i��d�ƒ�}�|��i��d�ƒ�}�|��i��d�ƒ�}�|��i��d�ƒ�}�|�d�j�o�n�d��S(���NR����R���R���R���t���new(���R���(���R���R����R���R���R���(����(����s���/home/javastream.de/jenkins/jobs/de.consolving.play-file-auth/workspace/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pyt���after���s����
N(���t���MODULEt���COMMANDSR���R���R	���(����(����(����s���/home/javastream.de/jenkins/jobs/de.consolving.play-file-auth/workspace/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pyt���<module>���s���			PK�����*†9DxÏ‘[$���$���p��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/manifestversion=0.2
frameworkVersions=1.2.x
PK�����*†9DÆü»��»��ƒ��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/lib/play-play-file-auth.jarPK
����P–C������������	��META-INF/þÊ��PK
���O–C½ÿíŠ���¤������META-INF/MANIFEST.MFM±
Â0E÷@þ!£	U¡H·ÖÉ¡"T\噾ÐiR’tÈß›l®çœËÁ‘Á˜äC$ï:qR
g½û#ýzAQX‘תo!á,‡\ûV5Ÿs+¿ÍE¦Ý‰‘tð1Ç„kw§Õ‘3ΰb'ž²\ý¼[älÚP“!
©üÈ%[Š­†,JØÓR—?PK
����P–C���������������play/PK
����P–C������������
���play/modules/PK
����P–C���������������play/modules/fileauth/PK
����P–C���������������play/modules/fileauth/utils/PK
���P–C��������������play.plugins�PK
���P–C(�å_j
����$���play/modules/fileauth/FileAuth.classW{|Õþ&û˜ÙÉ$À†D—Š,ˆ˜„,QZPEBL „”hD‡ì$Ýìngg‘૾j[m}k¥­O4ÕR´!1ÁG¨Vkµ[«}ØÖÖÚÚ÷ý•~wöÁf³bȏû8÷Üs¿sÎwϝ}ùOpþ£"ˆk|8×ʸN…×(¸^ÅpƒŒ/ª”IÁ—E£hn*†Œ¯Èøj1Jp³Ü"ãV·ávîÀ
îRq7¾¦à»Äðë2¾¡âDaö›¢¿WÅ}¸_ŒPð è’±[ÅÃxDưŠø–hÍc
¾-VöÈøŽŒÇUTá	•Ø+š}*fb¿hž žRð]{DÆK1*6ŽÉxZÅ2Œ*Jßç=£à ‚gRpXÁs2žWq®.½ àEáÕ„Œ#õ›×õ45·4ötv4nêèi¨oXר³¡±[‚¿åb}»^Ñ£ýµ¶eFûWH(iˆE¶µ»ôHҐ 6wô4¶Õ¯ii<W‚t„9Ç,®Ý´±³}’É’ÔxsskãÆÎͼ+ͨi¯’બê’ànˆ…isF‹5Ú’ƒÛk³¾-b(±^=Ò¥[¦˜§…n{ÀLH¶Ä#úPí`,œŒ‰Ú>3bèI{ ¶‰ƒzZé7ì΄aQ{VeUÊ­¤mFj[õ8—=ÉÔÚŒ)+“ÏŠgÎ^6YuåÔPM•¬¢A_‡ÙÕí¤EgæC™¾ú³ÖŠ%ãííOš¦iÌQè0ì
«ë릍ëcM)½±¨­›QÂ;­r:ÞU‘AÇ#æW¤…s¦SSăyÄ)Ó€B ÛõˆÖm†]‰ë‰Ä¥1+L:Ñ^k(návÊ×D¯MŸä‰ë–;lK¡kP´ÈNL­˜±Ú5ɾ>Ã2›=lX\wGHaª;$Ì˪	J¶Åì¦X2nÜÑkÄm3¥vyV£yc®\dnÓÅ=sа
ëZr	¥“S_ø3Äð‰ðµ§œpë–µP 2¢ì¤f"3æ]J}3Ñì;ב‰PVöFÒ÷Síˆ%­^£É9·$sµ–ˆó5´ UÃ:Ðê¬c¹X§'Ȧ,¯ÄÈø¾†—ð2íLb™,	3óë‡†íØ¬a‹h^Â&mcÂ5ôà
ÎÞüLÉxUÃq‘Œ×4ü¯3¢6ˆð-q.ý’¸nÈxCÏñf4o5­NèüTÂ	ù‡¬Iš‘°£²ZÃÏ𦌟køÞ“_òÄ`³¥bСVÐŒ5¼w&áݸíb£×–ñ+
¿Æo$h¹©!þ­†wq¥†ßáJÙ ™FcvP:ÄŠl„„ê|
¿û+
S“¥4×pJ(ÌÿA4ïiø#ÞÑð'¼¯áÏbôþB6,Œjø+>”0÷¸TÖð7±éï@YJ³Zõ‰
ôÿø§ˆÏ¿È»à 3<äéìlüSUÍI_©|qn^‚Üv,Ä)ö‹Oa£C–ã	ë3vbh¤X¿$X€Á˜,„ÉÙ˜0l†û
‘“ÿ1ÕŽB¯Þ;`Ô6ˆ–ae¯ÀqëbC„•iEUK>SxÛUN•T,/¤Èû½°0h°Dmë¹ËDmd™ÙnXfßP{¶lúœ}ílxYáûÌþ¤¥§\‘SŽÛ­XܰlÓHÄìBr	ÅBz>”çRæI(TÏšÞkRh«—l3¢t#4­ÃÒ·{Åäê2”°A2¬7iYFÔÞL6¶š‘ˆøaí\/á¤Êõdz¥Ø±”ˆ©,³Ø	rK¬¿_°ÜmFûb*@ÞR ¹]yIÏxG¹×Øa&Ä›à5©rî¾T·¢âËhòs"”ËŽÉÒO›*Ç-ÎçIÄ#¦]øu¯*ørº9`ä\ñ¤—Æ4øi’Ú•·çìãó`ªÉœH”‘zÎ÷¹Ó·‰„Þ/<2,+&"ž ØÉf³Èfóñ²éÒÃaÌçGu¿8Ü M°–³"x8çãÈq�ësä>ÌÁ†œùé”Hâ-eÛFI-{‰½§ú�¤}ŽÊF¶^GxÚÙj)|›ØûÄ#H-±Ùf/ÖîGÑ.ÃÕ}�î½~O\£ð‚¼¡úäQ(ª÷RÏåØžCëÀb¶5(ÅÎkq2-்Ìys ¢]œ7Ir>gÝʈdËÇ"ñå#Q§"YÁv%‘¬âü"YM$k&!¹p
’±5‹ä³DÒƒ‹Ò}’·¬ƒÄãÞS=yñx\{FQÜZS=­‡PÒr„¡Åc(-ž,¨E4æÇKs
aÌdàýzÏœJ0§1`uê(èÌ0œÑ6'×d�]Ä¥èE˜¶ü
JRk[³k×|èË:0œv Tȁǘ™v`qh³òá‡	ß ü~ ü‹yì%<0Bøƒ„ˁr@Ãõ§áŸàd_@Ô¸¿)
_Ë®ïPÛÌä_:J~ÊìËöÃï/Áì
bPî¯Á	-ã8‘løçŒà£8isý'sXÍÿ#˜çzÁQÌOS¦uºyNiM`VhïÊîÔ]˜›¶#öùån>m•Ýã¨ê�÷.®sÜ#¨é®óL :àY<‚P7à=èÞ}ôýš€×µtK^·èÆPK߆¾î÷ÔøOÅèImÿ¤›¶»]wÇ(>5ŒŠ”ty®4ãØ™S3†³$ŒàlÝ$¿jö2DÛq/ðz‰þ-þŽO¥ªålw0C˜8—¡—³~\A†\Ií«q®Ãm¸»p#ÀMÃÍ´q­Ý‚	ÜŠ79~‹oãv~»Ý)ÍÂ]Nj/¤Õ]˜ÇÄ_B*Ü€:¦~é¾™(¢L¨‡»g‘qÊÞvFŸãÈ'©°2ÌÆQ$2Ôã4ÖóËÜF2‡©5A†cEa{†Eïñ”R’ârÁ…y¤ÕþOsØZ€«>Šm~ˆtL Lä„)ýô8p§Iâ	x’x'pmÀëDÈIØyvcvÀ™‡—Öˆ5e%ٝž”ƒ÷=<ŽsxÚê:_@©SêÁåÅ®åZ¹V^ü æÔrmi]IÀ(qxV_„ó®Ó¤á£ï†rŠ‚¾ûvø}¡,û\öy2ìs¤Ës¥¹ì}ûB‚}×KÕRˆy}C–};Yjû˜±û™íÈ•ù¶=Ä·i7³ý0yóy÷(îÆã\ya/öñoûɃ§ø3i„¿ð÷Ê(þ‹1ɇQiÆ¥xVªÆ<ñT‹ÃÒjŽðœÔˆç¥.¼(í$óC÷uÄr)ORh¡Ä)C%xU¼—°È€…¼;QŒYˆ.ãH#Чež¿1½÷]>,y>b½Ýṇ~ÝèðÜK)ž{ˆ ÅsyžÈð\Hó|ž´•w¯‰ñj‘Nwª·]Ò"‡ñîlõNeð¬”ÖVjež!UüJHWñµ”ˆ§d
âJ3×àJýkÒ	ríq‹Ú-9)ñ;õøeô
Óñ*~î]•ýX˜ç¼±ïhß¹}ٍ©Ï…ùl?ï`¹úÿPK
���P–Cæ'È­r��p��*���play/modules/fileauth/FileAuthPlugin.classQÛJ1œìÖ®nk«VÛz©U(R\|V
–"…Šâc¶]5’&e/ŠŸå‹‚‚àG‰g·õ*æa&™Ì™œ$/¯Ï�¶±b#‚…Y
1ÌY(Z(1¤w…áƒY_?aHèžÇo	åE}×ó¹+I™ié.—'Üñz$¦ÂK0¬µ’ß:}Ý‹¤8çBz<
/MöiÒ–Ñ…P;¢Õþ` E—‡B«NÈý¾Ò.Cõ—ŒN—«¦v©ØîèÈïzq(Cá{öÖ¿æYXg¨ü”EKµÿtLïØÚô…e«í뾨—ì¡Rž yxô¥úúð.R¸Ó¨|;ªÔ÷;™/*V1F¿,¾á­bF<¶ñ�v—lÛ„éDÌ#C˜ˆ'‰rÅMrĹ'g0[›÷H~¦ä`É_¢Úr’VVŒÒÆé¤<¦(ÏÀtR7ƒEb›”yT°€‰7PK
���P–CŒˆvÓ`��%��#���play/modules/fileauth/ScanJob.class}PËNA¬áé.‹ŠÆxpãÁÆ„51«Q80†!ËÙ	ŸåIâÁð£Œ=@ăq“©~Twue?¿Þ?�œ¡n"‰¢‰ÊöÒØO£Âºž/âf—!q¥†‚!çHO<D“¾ðŸxߥNÁQîv¹/u½n&‘Žœ©ËçöD
#Wö‹tÂ‘ÝpïNõ[É¡¢„Áì¨Èˆ©·­5:æ3ÎPyŒ¼PNDW’ÔÛž§BJåÑ…üêÂXõûz&ü¹Öœq7Ò&Î'Ò³B:‡¨Z¨¡ÊPû×Cv£¹¬ëÏk³mJŒ€VŸákG¦£}ÛQ(]ûžOÉ‘©ù[_EÓ�ÇHÐ×_L›#ܢʦÈ(&OÞÀ^—´A˜Z6ó0	­Õ�2”òìÏrk½l,ë-ïm¶',ÒՍ–	k¡ÍhÌa‡b†¸<½B€ÝoPK
���P–CÎǘ	��%��*���play/modules/fileauth/utils/MD5Crypt.class­W{PTçÿ}û¼,X!®(`BuÙe]@E4¾�EA@りԚËîe¹º/wï"5¦Å4iúŠé˦5ÆØ®Imj’v¥Ú`ß3í_ý/íLg:Ó¦L2ÓtÚ4ôz¾»wĵa:…™ïq¾s¾ó;ç;»¿üàæ4€&ü܆fD‹C\ÀqHÚh£Úè,Ň1>œ°b܆"DL˜‘ýÛjÃI<©§øpZÀÅY+³âã6,Æ'¬˜´¡Q~~ޝðI.vŽOpò“>Å5<%àÓœø>|–ŸãäÏóÕÓüÞó|x†_à_ä«/	ø2ß|…8ëW<ËUÍŠ¯[q‘¡ÈßÖÓß±«mŸŸÁÑsT“|a)òùÕ„
=ÈPÒ‹&U)ªî—Â)™Á¢¨1©e--6)QEÝÂ`tÕïg0uÄ‚t\Ö£Då¾TdXNôKÃa™ßHáýRBá{hRG•$ÃÊžxXšðEbÁTXNúF”°,¥ÔQ_JUÂI_ïöu‰‰¸J(LI‰2Tº†îƨi—¡1†òÇ\YŒ®tuwÕ:g$ɺ‰/©œ$l¬‹ŒKÈÉTXepÞ%ОRÂA9ArE‚›VT²Äìjç@˜B÷dI†¡vëð„*'›SDuµ×ÓÍF%'6:²„d•Ld¨qé°’r •PÔ	_¯œLJ!y»’“Ü|ƒ<ÎàšÇÔó§£máPŒ¶£‘ã9®*±(ñ›Üoä_WwrY‰¹!.%“'b‰ ÷†Ä`MHÑ`HŽæÃƒ¿ocl- a:‹¥¸•;²P»tѯ6ÄÃdSD
)Ûˆ•Â~URéq•Ì\þ!þ6W½ÝR:&'”‘‰½y¿¬Z˜Å‡(u(¸•¨*«\šAŒ³ÝO$Â句¹Sá	Q’öÕü*ëÑjÅs".áyR9ÀÑm¬ÍñÔy³¾;\›{¯ZþZV\ñ®ˆø¾)â>&â@v8Èpß="™aÛj_cSóšµëZÖ·nhkïØ¾£sç®®îÝ=½}{ö>´Ïß?°ÿÀÁÁCÒp („F•£Ç‘h,~<‘TSc'Æ'NZ‘q/Šx	ßq
ß&OZ+^ñ\§H\Xì2,E¹/U•ˆœ?ä^y…Á>?E¼Š×D|ßcØro÷6,o{£ˆnp+¦È€º¦:)Uë¤x‚マ›œå–ˆàu~ô‹˜Æm?Än?Ê®~,¢›o‚VŠ!’Úƒ½"ÚÑ!â§øÐ.kçÆ7ì
CÝBŠaÎ~ÍC{†Ê;Iþ‰¤*G½œ —­ÈF¦óí¥WéÝe‰§my2åzœïÂô
…
¯³ò¸¢òZÖÅwöù<ä©À¨”hÓY:h/Åãr”Òf™«ãîT­¥‚Ë]±ØU0§«þKÊR1¡bÚ¥5ª�eSÓ½ëÞ=s~É\™þÑDìoUšÕ–°
©£Z«£^¥7ëÇ$U£t%™Nêð+]]…ÛŒwAÅxÖ%6²&¡&(\sÁ9Äé…•Yµ‚¾g$ûZ µó^Ä)õ¼5YRñ V-A݉Vjb]ÚËš©ÿÉD±ÈÇSR89O6ìH?}V4Ñ÷`€k°ë´ÝRÚ·ÌÙC¤557ÅG3£Ùì¾öŠÆ²‘F‹Flƒ4ŠYlÂfš‹°[uá4LÚÙ {Úô<ŠÜÓ–+({‡1“iŠ.¶\BQܦf·¹y
:Hc•{ڬӍÍt4«F/ËR¦ ÐÖHò³€Ü°Ñ¸žÀ´ÒWÓ,!8Õ¨‘à´ ]hC?¶ã vÌ=ˆmDù€’^}’Œ3ÑÜpEƒ7`ë›4Ì,{U^Gqõbˆ>‘Aieªí–Ó[Ó3oz3°_Ïã¨ÿ¬ì†€”¡5èÃ*<¤é¬…‘ßK(vhž
èÄN’PGøºèÔÉ둎ÃO{ÍåÆMUîéË(qWû'KÏümÖl‡u€®ØO&
Ðþ ¦ª’Î
°ˆš¡å¥O3”Jœ® ‘8ø™eé"Ìœ¹6ïmÌq“…ØG³×Q]º›àñ3»cÑ×wßÂâAŠ‘ŠÛz4XHgö¾RÍì QdX1’¿×J±2@¸9*ê{ú½—H–Û´MwÏ-TÒ|_¯'ƒ%vá2V4dàt,Í êñ£Omñ8–._nz8ƒe,?žù­›øì0³ORMš€1òÑ	òÈ#¤íVâ4ý
˜³7é\IHÉ_í6¢sL+†èi¨„’¿>ŠÃZQ«ÖÑnÒIp{ÕS¨¹>Ï‹Ïä_ƒß•½“¯†´”s’—ÿÏv[æÛ}™´½@èÓ¤í*Ùø"i~‰ì¾ö?Ø}¤ Ýµì¾ý!vS³ÎÞd|ƒì."aÅCö­¸�‘ÏUÜßã±×eð€á9”yŒÙ5YÛCfVÙ…+(öí'L¡n£Éirgð‘V:M
¹…'»àçf§9wnöäyJ«úhSÕ"TQí4y‚Ý~4¤a® 5®Iá/é™?x§PŸã¼€ú
ÁtæJ¹€‰xÒ|ÉoÕvtxªEHÏüÚiâ
Œ\f‘ñ­Ëˆpî¬lYF¢Óì5Ú효%~ïu¬„Æš%¸s]XHÏ9ËÚ3)P¡xZ¥‚Shàqâ<ÙÉ¡Í^ãš)4Øíã^»E[	ãg½v‘/Ïž[oq
•뼫)Ïje-)Èjγ
³¬¥Y-yÖ¢YÖ²‚¬Ö<«-Ï*ä´s²N5ç¨ôtNáŽZý'-”ߤ°ü#ámTáªÕ¦€—Âÿ¯Ô=Þ£
ýw*™ïSšþƒ’àŸT¾þ…þq|€3éO2ƝÓW¡€«LÄk¬7Y)}=Úñ+Úÿ†-ÆïX5Þf5x—­Àûì~f`u¬˜­bæbUÌÃ`
ôïckX#ÛÊšÙ.¶Žõ±jÖÏ6²Ãl²ÍìÛÂ’l;ÏÚØEÖÁ^gÛÙ/X'{‹ídï±.C9ë6Ô°ÃfÖkèb{~¶×p„ù
6 ¥bœ:û$u ‰]ÀËðh­AÀï‘ÐW”‚¹D¥U6Qùj˜V²õ¨…±ÙÐ@Å\¦ÂqØ ’?d˜Ùy¼u5áµ^&P’BÑË…ª—‹Fª’Z–—xÜ­«¯¾FdÉÂI¼—8|7Ðxûξʂ(b2ÊÙ–±V2eN™iÄQ½Ì4☆ž!¬ÉGþPK
����P–C������������	���������íA����META-INF/þÊ��PK
���O–C½ÿíŠ���¤��������������¤+���META-INF/MANIFEST.MFPK
����P–C����������������������íAç���play/PK
����P–C������������
����������íA
��play/modules/PK
����P–C����������������������íA5��play/modules/fileauth/PK
����P–C����������������������íAi��play/modules/fileauth/utils/PK
���P–C����������������������¤£��play.pluginsPK
���P–C(�å_j
����$�����������¤Ï��play/modules/fileauth/FileAuth.classPK
���P–Cæ'È­r��p��*�����������¤{��play/modules/fileauth/FileAuthPlugin.classPK
���P–CŒˆvÓ`��%��#�����������¤5��play/modules/fileauth/ScanJob.classPK
���P–CÎǘ	��%��*�����������¤Ö��play/modules/fileauth/utils/MD5Crypt.classPK��������Ÿ����PK�����*†9DÔQ.^Þ���Þ���s��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/routes# This file defines all module routes (Higher priority routes first)
#
# import these routes in the main app as :
# *     /                       module:play-file-auth
#
# ~~~~

GET     /?                      Module.indexPK�����*†9D1Sù*T���T���}��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/application.confapplication.name=play-file-auth
application.mode=dev
application.secret=test
db=mem
PK�����*†9Dæ´(ÕJ���J���}��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/dependencies.ymlself: play -> play-file-auth 0.2

require:
    - play
    - play -> securePK�����*†9DÌ;¨U¬���¬���u��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/messages# Default play-file-auth messages
# You can specialize this file for each language.
# For exemple, for french create a messages.fr file

#play-file-auth.name=play-file-authPK�����*†9D������������x��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play.pluginsPK�����*†9DˆŽ6©™��™��Ž��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/ScanJob.java/**
 * ScanJob
 * 31.07.2012
 * @author Philipp Haussleiter
 *
 */
package play.modules.fileauth;

import play.jobs.Every;
import play.jobs.Job;

/**
 * Periodically Scan of user/group files. Scan runs every 5 mins.
 * @author Philipp Haußleiter
 */
@Every("5min")
public class ScanJob extends Job {
    @Override
    public void doJob(){
        FileAuth.scanUsers();
        FileAuth.scanGroups();
    }
}
PK�����*†9DlP¨å��å����samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/FileAuth.java/**
 * FileAuth 31.07.2012
 *
 * @author Philipp Haussleiter
 *
 */
package play.modules.fileauth;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import play.Logger;
import play.Play;
import play.cache.Cache;
import play.modules.fileauth.utils.MD5Crypt;

/**
 * Basic Wrapper for all FileAuth Functions.
 *
 * @author Philipp Haußleiter
 */
public class FileAuth {

    /* Cache Key for User/PasswordHash Map */
    public final static String AUTH_FILE_USERS_CACHE_KEY = "AUTH_FILE_USERS";
    /* Cache Key for Group/Users Map */
    public final static boolean IS_ENABLED = isEnabled();
    public final static String AUTH_FILE_GROUPS_CACHE_KEY = "AUTH_FILE_GROUPS";
    private final static String CACHE_TIMEOUT = "5mn";

    /**
     * Returns a Map of all Users (user/password hash).
     *
     * @return the Map.
     */
    public static Map<String, String> getUsers() {
        if (!IS_ENABLED) {
            return new HashMap<String, String>();
        }
        Map<String, String> users = Cache.get(AUTH_FILE_USERS_CACHE_KEY, HashMap.class);
        if (users == null) {
            users = scanUsers();
        }
        return users;
    }

    /**
     * Returns a Map of all Groups (groups/usernames).
     *
     * @return the Map.
     */
    public static Map<String, Set<String>> getGroups() {
        if (!IS_ENABLED) {
            return new HashMap<String, Set<String>>();
        }
        Map<String, Set<String>> groups = Cache.get(AUTH_FILE_GROUPS_CACHE_KEY, HashMap.class);
        if (groups == null) {
            groups = scanGroups();
        }
        return groups;
    }

    /**
     * Checks if a group contains a given username.
     *
     * @param group the Group to check.
     * @param user the user to check.
     * @return true if user is in group, otherwise false.
     */
    public static boolean contains(String group, String user) {
        if (!IS_ENABLED) {
            return true;
        }
        if (group == null || user == null) {
            return false;
        }
        Map<String, Set<String>> groups = getGroups();
        Set<String> groupUsers = groups.get(group);
        if (groupUsers == null) {
            return false;
        }
        return groupUsers.contains(user);
    }

    /**
     * Validates an user with a given password agains the user/password hash
     * mapping.
     *
     * @param user the given user.
     * @param password the given password (clear text).
     * @return true if validation okay, otherwise false.
     */
    public static boolean validate(String user, String password) {
        if (!IS_ENABLED) {
            return true;
        }
        if (user == null || password == null) {
            return false;
        }
        Map<String, String> users = getUsers();
        String encryptedPass = users.get(user);
        if (encryptedPass == null) {
            return false;
        }
        return MD5Crypt.verifyPassword(password, encryptedPass);
    }

    /**
     * Rescans the users file.
     *
     * @return the updated Map of users.
     */
    public static Map<String, String> scanUsers() {
        String fileName = Play.configuration.getProperty("authfile.users.path");
        String delimeter1 = Play.configuration.getProperty("authfile.users.delimeter", ":");
        Logger.info("@" + System.currentTimeMillis() + " Scanning Users in " + fileName);
        Map<String, String> users = new HashMap<String, String>();
        File file = new File(fileName);
        if (file == null || !file.exists() || !file.isFile()) {
            Logger.warn(fileName + " is not a valid Auth-File!");
        }
        try {
            BufferedReader br = new BufferedReader(new FileReader(file));
            String line;
            String parts[];
            while ((line = br.readLine()) != null) {
                parts = line.split(delimeter1);
                /*
                 * Matches
                 * user:hash
                 * user:hash:uid: ...
                 */
                if (parts.length > 1) {
                    users.put(parts[0].trim(), parts[1].trim());
                }
            }
            Cache.set(AUTH_FILE_USERS_CACHE_KEY, users, CACHE_TIMEOUT);
        } catch (FileNotFoundException ex) {
            Logger.error(ex.getLocalizedMessage(), ex);
        } catch (IOException ex) {
            Logger.error(ex.getLocalizedMessage(), ex);
        }
        Logger.info("found " + users.size() + " mappings");
        return users;
    }

    /**
     * Rescans the groups file.
     *
     * @return the updated Map of groups.
     */
    public static Map<String, Set<String>> scanGroups() {
        String fileName = Play.configuration.getProperty("authfile.groups.path");
        String delimeter1 = Play.configuration.getProperty("authfile.users.delimeter", ":");
        String delimeter2 = Play.configuration.getProperty("authfile.groups.delimeter", " ");
        Logger.info("@" + System.currentTimeMillis() + " Scanning Groups in " + fileName);
        Map<String, Set<String>> groups = new HashMap<String, Set<String>>();
        File file = new File(fileName);
        if (file == null || !file.exists() || !file.isFile()) {
            Logger.warn(fileName + " is not a valid Auth-File!");
        }
        try {
            BufferedReader br = new BufferedReader(new FileReader(file));
            String line;
            String parts[];
            String userParts[];
            Set<String> users;
            while ((line = br.readLine()) != null) {
                parts = line.split(delimeter1);
                if (parts.length > 1) {
                    if (parts.length > 2) {
                        userParts = parts[parts.length - 1].split(delimeter2);
                    } else {
                        userParts = parts[1].split(delimeter2);
                    }
                    if (userParts.length > 0) {
                        users = new HashSet<String>();
                        for (String user : userParts) {
                            users.add(user.trim());
                        }
                        groups.put(parts[0].trim(), users);
                    }
                }
            }
            Cache.set(AUTH_FILE_GROUPS_CACHE_KEY, groups, CACHE_TIMEOUT);
        } catch (FileNotFoundException ex) {
            Logger.error(ex.getLocalizedMessage(), ex);
        } catch (IOException ex) {
            Logger.error(ex.getLocalizedMessage(), ex);
        }
        Logger.info("found " + groups.size() + " mappings");
        return groups;
    }

    private static boolean isEnabled() {
        if (Play.configuration.getProperty("authfile.users.path") == null
                || Play.configuration.getProperty("authfile.groups.path") == null) {
            Logger.info("FileAuth not enabled. authfile.users.path or authfile.groups.path not set!");
            return false;
        }
        return true;

    }
}
PK�����*†9D4ÿÑ^º��º��•��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/FileAuthPlugin.java/**
 * FileAuthPlugin
 * 31.07.2012
 * @author Philipp Haussleiter
 *
 */
package play.modules.fileauth;

import play.PlayPlugin;

/**
 * Entry Class for first file scan.
 * @author Philipp Haußleiter
 */
public class FileAuthPlugin extends PlayPlugin {

    /**
     * Trigger to scan the files for the first Time.
     */
    @Override
    public void onApplicationStart() {
        ScanJob job = new ScanJob();
        job.now();
    }
}
PK�����*†9DYí΁1��1��•��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/utils/MD5Crypt.java/*

MD5Crypt.java

Created: 3 November 1999

Java Port By: Jonathan Abbey, jonabbey@arlut.utexas.edu

Original C Version:
----------------------------------------------------------------------------
"THE BEER-WARE LICENSE" (Revision 42):
<phk@login.dknet.dk> wrote this file.  As long as you retain this notice you
can do whatever you want with this stuff. If we meet some day, and you think
this stuff is worth it, you can buy me a beer in return.   Poul-Henning Kamp
----------------------------------------------------------------------------

This Java Port is  

Copyright (c) 1999-2010 The University of Texas at Austin.

All rights reserved.

Redistribution and use in source and binary form are permitted
provided that distributions retain this entire copyright notice
and comment. Neither the name of the University nor the names of
its contributors may be used to endorse or promote products
derived from this software without specific prior written
permission. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE.

 */
package play.modules.fileauth.utils;

import java.security.MessageDigest;

/*------------------------------------------------------------------------------
class
MD5Crypt

------------------------------------------------------------------------------*/
/**
 * This class defines a method,
 * {@link MD5Crypt#crypt(java.lang.String, java.lang.String) crypt()}, which
 * takes a password and a salt string and generates an OpenBSD/FreeBSD/Linux-compatible
 * md5-encoded password entry.
 */
public final class MD5Crypt {

    /**
     * Command line test rig.
     */
    static public void main(String argv[]) {
        if ((argv.length < 1) || (argv.length > 3)) {
            System.err.println("Usage: MD5Crypt [-apache] password salt");
            System.exit(1);
        }

        if (argv.length == 3) {
            System.err.println(MD5Crypt.apacheCrypt(argv[1], argv[2]));
        } else if (argv.length == 2) {
            System.err.println(MD5Crypt.crypt(argv[0], argv[1]));
        } else {
            System.err.println(MD5Crypt.crypt(argv[0]));
        }

        System.exit(0);
    }
    public static final String SALTCHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
    public static final String itoa64 = "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";

    public static final String to64(long v, int size) {
        StringBuilder result = new StringBuilder();

        while (--size >= 0) {
            result.append(itoa64.charAt((int) (v & 0x3f)));
            v >>>= 6;
        }

        return result.toString();
    }

    public static final void clearbits(byte bits[]) {
        for (int i = 0; i < bits.length; i++) {
            bits[i] = 0;
        }
    }

    /**
     * convert an encoded unsigned byte value into a int
     * with the unsigned value.
     */
    public static final int bytes2u(byte inp) {
        return (int) inp & 0xff;
    }

    static private MessageDigest getMD5() {
        try {
            return MessageDigest.getInstance("MD5");
        } catch (java.security.NoSuchAlgorithmException ex) {
            throw new RuntimeException(ex);
        }
    }

    /**
     * <p>This method actually generates a OpenBSD/FreeBSD/Linux PAM compatible
     * md5-encoded password hash from a plaintext password and a
     * salt.</p>
     *
     * <p>The resulting string will be in the form '$1$&lt;salt&gt;$&lt;hashed mess&gt;</p>
     *
     * @param password Plaintext password
     *
     * @return An OpenBSD/FreeBSD/Linux-compatible md5-hashed password field.
     */
    public static final String crypt(String password) {
        StringBuilder salt = new StringBuilder();
        java.util.Random randgen = new java.util.Random();

        /* -- */

        while (salt.length() < 8) {
            int index = (int) (randgen.nextFloat() * SALTCHARS.length());
            salt.append(SALTCHARS.substring(index, index + 1));
        }

        return MD5Crypt.crypt(password, salt.toString());
    }

    /**
     * <p>This method actually generates a OpenBSD/FreeBSD/Linux PAM compatible
     * md5-encoded password hash from a plaintext password and a
     * salt.</p>
     *
     * <p>The resulting string will be in the form '$1$&lt;salt&gt;$&lt;hashed mess&gt;</p>
     *
     * @param password Plaintext password
     * @param salt A short string to use to randomize md5.  May start with $1$, which
     *             will be ignored.  It is explicitly permitted to pass a pre-existing
     *             MD5Crypt'ed password entry as the salt.  crypt() will strip the salt
     *             chars out properly.
     *
     * @return An OpenBSD/FreeBSD/Linux-compatible md5-hashed password field.
     */
    public static final String crypt(String password, String salt) {
        return MD5Crypt.crypt(password, salt, "$1$");
    }

    /**
     * <p>This method generates an Apache MD5 compatible
     * md5-encoded password hash from a plaintext password and a
     * salt.</p>
     *
     * <p>The resulting string will be in the form '$apr1$&lt;salt&gt;$&lt;hashed mess&gt;</p>
     *
     * @param password Plaintext password
     *
     * @return An Apache-compatible md5-hashed password string.
     */
    public static final String apacheCrypt(String password) {
        StringBuilder salt = new StringBuilder();
        java.util.Random randgen = new java.util.Random();

        /* -- */

        while (salt.length() < 8) {
            int index = (int) (randgen.nextFloat() * SALTCHARS.length());
            salt.append(SALTCHARS.substring(index, index + 1));
        }

        return MD5Crypt.apacheCrypt(password, salt.toString());
    }

    /**
     * <p>This method actually generates an Apache MD5 compatible
     * md5-encoded password hash from a plaintext password and a
     * salt.</p>
     *
     * <p>The resulting string will be in the form '$apr1$&lt;salt&gt;$&lt;hashed mess&gt;</p>
     *
     * @param password Plaintext password
     * @param salt A short string to use to randomize md5.  May start with $apr1$, which
     *             will be ignored.  It is explicitly permitted to pass a pre-existing
     *             MD5Crypt'ed password entry as the salt.  crypt() will strip the salt
     *             chars out properly.
     *
     * @return An Apache-compatible md5-hashed password string.
     */
    public static final String apacheCrypt(String password, String salt) {
        return MD5Crypt.crypt(password, salt, "$apr1$");
    }

    /**
     * <p>This method actually generates md5-encoded password hash from
     * a plaintext password, a salt, and a magic string.</p>
     *
     * <p>There are two magic strings that make sense to use here.. '$1$' is the
     * magic string used by the FreeBSD/Linux/OpenBSD MD5Crypt algorithm, and
     * '$apr1$' is the magic string used by the Apache MD5Crypt algorithm.</p>
     *
     * <p>The resulting string will be in the form '&lt;magic&gt;&lt;salt&gt;$&lt;hashed mess&gt;</p>
     *
     * @param password Plaintext password
     * @param salt A short string to use to randomize md5.  May start
     * with the magic string, which will be ignored.  It is explicitly
     * permitted to pass a pre-existing MD5Crypt'ed password entry as
     * the salt.  crypt() will strip the salt chars out properly.
     * @param magic Either "$apr1$" or "$1$", which controls whether we
     * are doing Apache-style or FreeBSD-style md5Crypt.
     *
     * @return An md5-hashed password string.
     */
    public static final String crypt(String password, String salt, String magic) {
        /* This string is magic for this algorithm.  Having it this way,
         * we can get get better later on */

        byte finalState[];
        MessageDigest ctx, ctx1;
        long l;

        /* -- */

        /* Refine the Salt first */

        /* If it starts with the magic string, then skip that */

        if (salt.startsWith(magic)) {
            salt = salt.substring(magic.length());
        }

        /* It stops at the first '$', max 8 chars */

        if (salt.indexOf('$') != -1) {
            salt = salt.substring(0, salt.indexOf('$'));
        }

        if (salt.length() > 8) {
            salt = salt.substring(0, 8);
        }

        ctx = getMD5();

        ctx.update(password.getBytes());    // The password first, since that is what is most unknown
        ctx.update(magic.getBytes());    // Then our magic string
        ctx.update(salt.getBytes());    // Then the raw salt

        /* Then just as many characters of the MD5(pw,salt,pw) */

        ctx1 = getMD5();
        ctx1.update(password.getBytes());
        ctx1.update(salt.getBytes());
        ctx1.update(password.getBytes());
        finalState = ctx1.digest();

        for (int pl = password.length(); pl > 0; pl -= 16) {
            ctx.update(finalState, 0, pl > 16 ? 16 : pl);
        }

        /* the original code claimed that finalState was being cleared
        to keep dangerous bits out of memory, but doing this is also
        required in order to get the right output. */

        clearbits(finalState);

        /* Then something really weird... */

        for (int i = password.length(); i != 0; i >>>= 1) {
            if ((i & 1) != 0) {
                ctx.update(finalState, 0, 1);
            } else {
                ctx.update(password.getBytes(), 0, 1);
            }
        }

        finalState = ctx.digest();

        /*
         * and now, just to make sure things don't run too fast
         * On a 60 Mhz Pentium this takes 34 msec, so you would
         * need 30 seconds to build a 1000 entry dictionary...
         *
         * (The above timings from the C version)
         */

        for (int i = 0; i < 1000; i++) {
            ctx1.reset();

            if ((i & 1) != 0) {
                ctx1.update(password.getBytes());
            } else {
                ctx1.update(finalState, 0, 16);
            }

            if ((i % 3) != 0) {
                ctx1.update(salt.getBytes());
            }

            if ((i % 7) != 0) {
                ctx1.update(password.getBytes());
            }

            if ((i & 1) != 0) {
                ctx1.update(finalState, 0, 16);
            } else {
                ctx1.update(password.getBytes());
            }

            finalState = ctx1.digest();
        }

        /* Now make the output string */

        StringBuilder result = new StringBuilder();

        result.append(magic);
        result.append(salt);
        result.append("$");

        l = (bytes2u(finalState[0]) << 16) | (bytes2u(finalState[6]) << 8) | bytes2u(finalState[12]);
        result.append(to64(l, 4));

        l = (bytes2u(finalState[1]) << 16) | (bytes2u(finalState[7]) << 8) | bytes2u(finalState[13]);
        result.append(to64(l, 4));

        l = (bytes2u(finalState[2]) << 16) | (bytes2u(finalState[8]) << 8) | bytes2u(finalState[14]);
        result.append(to64(l, 4));

        l = (bytes2u(finalState[3]) << 16) | (bytes2u(finalState[9]) << 8) | bytes2u(finalState[15]);
        result.append(to64(l, 4));

        l = (bytes2u(finalState[4]) << 16) | (bytes2u(finalState[10]) << 8) | bytes2u(finalState[5]);
        result.append(to64(l, 4));

        l = bytes2u(finalState[11]);
        result.append(to64(l, 2));

        /* Don't leave anything around in vm they could use. */
        clearbits(finalState);

        return result.toString();
    }

    /**
     * This method tests a plaintext password against a md5Crypt'ed hash and returns
     * true if the password matches the hash.
     *
     * This method will work properly whether the hashtext was crypted
     * using the default FreeBSD md5Crypt algorithm or the Apache
     * md5Crypt variant.
     *
     * @param plaintextPass The plaintext password text to test.
     * @param md5CryptText The Apache or FreeBSD-md5Crypted hash used to authenticate the plaintextPass.
     */
    public static final boolean verifyPassword(String plaintextPass, String md5CryptText) {
        if (md5CryptText.startsWith("$1$")) {
            return md5CryptText.equals(MD5Crypt.crypt(plaintextPass, md5CryptText));
        } else if (md5CryptText.startsWith("$apr1$")) {
            return md5CryptText.equals(MD5Crypt.apacheCrypt(plaintextPass, md5CryptText));
        } else {
            throw new RuntimeException("Bad md5CryptText");
        }
    }
}
PK�����*†9D—5Kùõ��õ����samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/app/controllers/AuthFileSecurity.java/**
 * AuthFileSecurity
 * 31.07.2012
 * @author Philipp Haussleiter
 *
 */
package controllers;

import java.util.Map;
import play.modules.fileauth.FileAuth;

/**
 * This Class provides basice Security Functions for the Play! Security Plugin.
 * @author Philipp Haußleiter
 * <p>
 * Usage:
 * @With(Secure.class)
 * public class Application extends Controller {
 * ...
 * }
 *
 * </p>
 */
public class AuthFileSecurity extends Secure.Security {

    /**
     * Authentify an user against the given AuthFile.
     * @param username the given username.
     * @param password the given password.
     * @return true if username and password matches, otherwise false.
     */
    public static boolean authentify(String username, String password) {
        Map<String,String> users = FileAuth.getUsers();
        String userPassword = users.get(username.toLowerCase());
        return userPassword.equals(password);
    }

    /**
     * Checks if the current user (that is loged in) has the profile (e.g. is in the group).
     * @param profile
     * @return true if the current user has the profile, otherwise false.
     */
    public static boolean check(String profile) {
        String user = connected();
        return FileAuth.contains(profile, user);
    }
}
PK�����*†9D&ÿ‰è¤��¤��‰��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/documentation/manual/home.textileh1. {module name}

p(note). Write your module documentation in this file, possibly linking to other Textile files, and delete these notes when you are finished.

p(note). Start with a clear statement of what the module is and what it is for. Link to any third-party libraries that the module is based on.

p(note). Briefly describe why you might want to use this module in a Play application.

h2. Sample application

p(note). Your module should contain a sample app in the @sample@ directory that demonstrates the module. Describe how to run the demo here.

h2. Getting started

p(note). Describe any installation that is required, beyond adding and resolving the module dependency.

h2. Configuration

p(note). List any configuration options that the module uses, with an @h3.@ heading for each one.

h2. Usage

p(note). Explain how to use the module, and describe any routes, controllers, models or views that the module provides.

h2. Tags

p(note). List any tags the module provides, with an @h3.@ heading for each one. Include the tags’ arguments.

h2. Commands

p(note). List any commands the module provides, with an @h3.@ heading for each one. Include the commands’ options.
PK�����*†9D´šü¯��¯��¢��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/public/images/favicon.png‰PNG

���
IHDR���������óÿa���tEXtSoftware�Adobe ImageReadyqÉe<��QIDATxÚ”SËNA=U]5]Ý=ï1agŒhf£+0ˆ‰Á †n\¹gãÒ¿p#ì4¢?`t¯	WFƒH$H$dŒ™Gw•·›o÷M×+çœ{O53Æàú�Œ^sÑIšéJáü½Bnà18­ÃC_­fÛG©8ˆk#7€h—BÈ,KÀMª±SçrÕMwav©^›i4v<‹	ü+"�ÎmJÛQea+¤Žed×§–¼zYßü2(¬cŒÐFp¡ìÓ`
Aƒ›ÈBåý¡5ÿÍܧ·™±¨"«€¤úeV(§æÐ<±!D‰.7³é®Ì.®×fÚ~Ë#šÃ�¶HUÊÍ84ÞÍ@<x™XWcê}}þÅ÷­oUÉåáHÛ)	åqMìûεVˆ©4…øðòÎÛ¹•úÒ-?ð#�±«@€ÕÇe<êGhíÁ—8ÙšêéÛO¶?Ó^æ]`4Ùh».<b$ߏè¶6­vùD/&‡oΧ¼´¿§€qeK?îE—å/fzš~Žt1^šX½\{äż´µ¶Ð·”wÒ„è}~_ûHû`~`ûzÿ•gÅô‰û´üúO‚ÀN¯T‰È1”²OöàjåRm¨xvšŽ=¥Ü9XZÀ¥ªXvœic£Au†r'Ê£«ãå’ë<¤#Ÿ;]å@:‰J`)úQ8ªÝ}[“ý£Ï‹™®Cr;ð˜“ëNå1Y©
Êå¡çk_7.üj5ïÒ¸Îÿ'0�Û¤û»ý
����IEND®B`‚PK�����*†9Dä |;f�f�¯��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/public/javascripts/jquery-1.6.4.min.js/*! jQuery v1.6.4 http://jquery.com/ | http://jquery.org/license */
(function(a,b){function cu(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cr(a){if(!cg[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ch||(ch=c.createElement("iframe"),ch.frameBorder=ch.width=ch.height=0),b.appendChild(ch);if(!ci||!ch.createElement)ci=(ch.contentWindow||ch.contentDocument).document,ci.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),ci.close();d=ci.createElement(a),ci.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ch)}cg[a]=e}return cg[a]}function cq(a,b){var c={};f.each(cm.concat.apply([],cm.slice(0,b)),function(){c[this]=a});return c}function cp(){cn=b}function co(){setTimeout(cp,0);return cn=f.now()}function cf(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ce(){try{return new a.XMLHttpRequest}catch(b){}}function b$(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function bZ(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function bY(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bA.test(a)?d(a,e):bY(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)bY(a+"["+e+"]",b[e],c,d);else d(a,b)}function bX(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function bW(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bP,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=bW(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=bW(a,c,d,e,"*",g));return l}function bV(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bL),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function by(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bt:bu;if(d>0){c!=="border"&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0});return d+"px"}d=bv(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+this))||0)});return d+"px"}function bl(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bd,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bk(a){f.nodeName(a,"input")?bj(a):"getElementsByTagName"in a&&f.grep(a.getElementsByTagName("input"),bj)}function bj(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bi(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function bh(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bg(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;e=e[c]=f.extend({},d);if(g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;i<j;i++)f.event.add(b,h+(g[h][i].namespace?".":"")+g[h][i].namespace,g[h][i],g[h][i].data)}}}}function bf(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function V(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(Q.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function U(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function M(a,b){return(a&&a!=="*"?a+".":"")+b.replace(y,"`").replace(z,"&")}function L(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;i<s.length;i++)g=s[i],g.origType.replace(w,"")===a.type?q.push(g.selector):s.splice(i--,1);e=f(a.target).closest(q,a.currentTarget);for(j=0,k=e.length;j<k;j++){m=e[j];for(i=0;i<s.length;i++){g=s[i];if(m.selector===g.selector&&(!n||n.test(g.namespace))&&!m.elem.disabled){h=m.elem,d=null;if(g.preType==="mouseenter"||g.preType==="mouseleave")a.type=g.preType,d=f(a.relatedTarget).closest(g.selector)[0],d&&f.contains(h,d)&&(d=h);(!d||d!==h)&&p.push({elem:h,handleObj:g,level:m.level})}}}for(j=0,k=p.length;j<k;j++){e=p[j];if(c&&e.level>c)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function J(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function D(){return!0}function C(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function K(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(K,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=/-([a-z]|[0-9])/ig,x=/^-ms-/,y=function(a,b){return(b+"").toUpperCase()},z=d.userAgent,A,B,C,D=Object.prototype.toString,E=Object.prototype.hasOwnProperty,F=Array.prototype.push,G=Array.prototype.slice,H=String.prototype.trim,I=Array.prototype.indexOf,J={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6.4",length:0,size:function(){return this.length},toArray:function(){return G.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?F.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),B.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(G.apply(this,arguments),"slice",G.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:F,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;B.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!B){B=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",C,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",C),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&K()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):J[D.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!E.call(a,"constructor")&&!E.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||E.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(x,"ms-").replace(w,y)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:H?function(a){return a==null?"":H.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?F.call(c,a):e.merge(c,a)}return c},inArray:function(a,b){if(!b)return-1;if(I)return I.call(b,a);for(var c=0,d=b.length;c<d;c++)if(b[c]===a)return c;return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=G.call(arguments,2),g=function(){return a.apply(c,f.concat(G.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=s.exec(a)||t.exec(a)||u.exec(a)||a.indexOf("compatible")<0&&v.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){J["[object "+b+"]"]=b.toLowerCase()}),A=e.uaMatch(z),A.browser&&(e.browser[A.browser]=!0,e.browser.version=A.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?C=function(){c.removeEventListener("DOMContentLoaded",C,!1),e.ready()}:c.attachEvent&&(C=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",C),e.ready())});return e}(),g="done fail isResolved isRejected promise then always pipe".split(" "),h=[].slice;f.extend({_Deferred:function(){var a=[],b,c,d,e={done:function(){if(!d){var c=arguments,g,h,i,j,k;b&&(k=b,b=0);for(g=0,h=c.length;g<h;g++)i=c[g],j=f.type(i),j==="array"?e.done.apply(e,i):j==="function"&&a.push(i);k&&e.resolveWith(k[0],k[1])}return this},resolveWith:function(e,f){if(!d&&!b&&!c){f=f||[],c=1;try{while(a[0])a.shift().apply(e,f)}finally{b=[e,f],c=0}}return this},resolve:function(){e.resolveWith(this,arguments);return this},isResolved:function(){return!!c||!!b},cancel:function(){d=1,a=[];return this}};return e},Deferred:function(a){var b=f._Deferred(),c=f._Deferred(),d;f.extend(b,{then:function(a,c){b.done(a).fail(c);return this},always:function(){return b.done.apply(b,arguments).fail.apply(this,arguments)},fail:c.done,rejectWith:c.resolveWith,reject:c.resolve,isRejected:c.isResolved,pipe:function(a,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[c,"reject"]},function(a,c){var e=c[0],g=c[1],h;f.isFunction(e)?b[a](function(){h=e.apply(this,arguments),h&&f.isFunction(h.promise)?h.promise().then(d.resolve,d.reject):d[g+"With"](this===b?d:this,[h])}):b[a](d[g])})}).promise()},promise:function(a){if(a==null){if(d)return d;d=a={}}var c=g.length;while(c--)a[g[c]]=b[g[c]];return a}}),b.done(c.cancel).fail(b.cancel),delete b.cancel,a&&a.call(b,b);return b},when:function(a){function i(a){return function(c){b[a]=arguments.length>1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c<d;c++)b[c]&&f.isFunction(b[c].promise)?b[c].promise().then(i(c),g.reject):--e;e||g.resolveWith(g,b)}else g!==a&&g.resolveWith(g,d?[a]:[]);return g.promise()}}),f.support=function(){var a=c.createElement("div"),b=c.documentElement,d,e,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;a.setAttribute("className","t"),a.innerHTML="   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55$/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue=i.value==="t",i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.firstChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},m&&f.extend(p,{position:"absolute",left:"-1000px",top:"-1000px"});for(t in p)o.style[t]=p[t];o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,k.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="<div style='width:4px;'></div>",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",q=a.getElementsByTagName("td"),u=q[0].offsetHeight===0,q[0].style.display="",q[1].style.display="none",k.reliableHiddenOffsets=u&&q[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",a.appendChild(j),k.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0),o.innerHTML="",n.removeChild(o);if(a.attachEvent)for(t in{submit:1,change:1,focusin:1})s="on"+t,u=s in a,u||(a.setAttribute(s,"return;"),u=typeof a[s]=="function"),k[t+"Bubbles"]=u;o=l=g=h=m=j=a=i=null;return k}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i=f.expando,j=typeof c=="string",k=a.nodeType,l=k?f.cache:a,m=k?a[f.expando]:a[f.expando]&&f.expando;if((!m||e&&m&&l[m]&&!l[m][i])&&j&&d===b)return;m||(k?a[f.expando]=m=++f.uuid:m=f.expando),l[m]||(l[m]={},k||(l[m].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?l[m][i]=f.extend(l[m][i],c):l[m]=f.extend(l[m],c);g=l[m],e&&(g[i]||(g[i]={}),g=g[i]),d!==b&&(g[f.camelCase(c)]=d);if(c==="events"&&!g[c])return g[i]&&g[i].events;j?(h=g[c],h==null&&(h=g[f.camelCase(c)])):h=g;return h}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e=f.expando,g=a.nodeType,h=g?f.cache:a,i=g?a[f.expando]:f.expando;if(!h[i])return;if(b){d=c?h[i][e]:h[i];if(d){d[b]||(b=f.camelCase(b)),delete d[b];if(!l(d))return}}if(c){delete h[i][e];if(!l(h[i]))return}var j=h[i][e];f.support.deleteExpando||!h.setInterval?delete h[i]:h[i]=null,j?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=j):g&&(f.support.deleteExpando?delete a[f.expando]:a.removeAttribute?a.removeAttribute(f.expando):a[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h<i;h++)g=e[h].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),k(this[0],g,d[g]))}}return d}if(typeof a=="object")return this.each(function(){f.data(this,a)});var j=a.split(".");j[1]=j[1]?"."+j[1]:"";if(c===b){d=this.triggerHandler("getData"+j[1]+"!",[j[0]]),d===b&&this.length&&(d=f.data(this[0],a),d=k(this[0],a,d));return d===b&&j[1]?this.data(j[0]):d}return this.each(function(){var b=f(this),d=[j[0],c];b.triggerHandler("setData"+j[1]+"!",d),f.data(this,a,c),b.triggerHandler("changeData"+j[1]+"!",d)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,c){a&&(c=(c||"fx")+"mark",f.data(a,c,(f.data(a,c,b,!0)||0)+1,!0))},_unmark:function(a,c,d){a!==!0&&(d=c,c=a,a=!1);if(c){d=d||"fx";var e=d+"mark",g=a?0:(f.data(c,e,b,!0)||1)-1;g?f.data(c,e,g,!0):(f.removeData(c,e,!0),m(c,d,"mark"))}},queue:function(a,c,d){if(a){c=(c||"fx")+"queue";var e=f.data(a,c,b,!0);d&&(!e||f.isArray(d)?e=f.data(a,c,f.makeArray(d),!0):e.push(d));return e||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e;d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),d.call(a,function(){f.dequeue(a,b)})),c.length||(f.removeData(a,b+"queue",!0),m(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(){var c=this;setTimeout(function(){f.dequeue(c,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f._Deferred(),!0))h++,l.done(m);m();return d.promise()}});var n=/[\n\t\r]/g,o=/\s+/,p=/\r/g,q=/^(?:button|input)$/i,r=/^(?:button|input|object|select|textarea)$/i,s=/^a(?:rea)?$/i,t=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,u,v;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(o);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(o);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(n," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(o);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ";for(var c=0,d=this.length;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(n," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;d=e.value;return typeof d=="string"?d.replace(p,""):d==null?"":d}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c=a.selectedIndex,d=[],e=a.options,g=a.type==="select-one";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h<i;h++){var j=e[h];if(j.selected&&(f.support.optDisabled?!j.disabled:j.getAttribute("disabled")===null)&&(!j.parentNode.disabled||!f.nodeName(j.parentNode,"optgroup"))){b=f(j).val();if(g)return b;d.push(b)}}if(g&&!d.length&&e.length)return f(e[c]).val();return d},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);j&&(c=f.attrFix[c]||c,i=f.attrHooks[c],i||(t.test(c)?i=v:u&&(i=u)));if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j&&(h=i.get(a,c))!==null)return h;h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.attr(a,b,""),a.removeAttribute(b),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(u&&f.nodeName(a,"button"))return u.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(u&&f.nodeName(a,"button"))return u.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);i&&(c=f.propFix[c]||c,h=f.propHooks[c]);return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==null?g:a[c]},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabIndex=f.propHooks.tabIndex,v={get:function(a,c){var d;return f.prop(a,c)===!0||(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},f.support.getSetAttribute||(u=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==""?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var w=/\.(.*)$/,x=/^(?:textarea|input|select)$/i,y=/\./g,z=/ /g,A=/[^\w\s.|`]/g,B=function(a){return a.replace(A,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=C;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=C);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),B).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j<p.length;j++){q=p[j];if(l||n.test(q.namespace))f.event.remove(a,r,q.handler,j),p.splice(j--,1)}continue}o=f.event.special[h]||{};for(j=e||0;j<p.length;j++){q=p[j];if(d.guid===q.guid){if(l||n.test(q.namespace))e==null&&p.splice(j--,1),o.remove&&o.remove.call(a,q);if(e!=null)break}}if(p.length===0||e!=null&&p.length===1)(!o.teardown||o.teardown.call(a,m)===!1)&&f.removeEvent(a,h,s.handle),g=null,delete 
t[h]}if(f.isEmptyObject(t)){var u=s.handle;u&&(u.elem=null),delete s.events,delete s.handle,f.isEmptyObject(s)&&f.removeData(a,b,!0)}}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){var h=c.type||c,i=[],j;h.indexOf("!")>=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d!=null?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h<i;h++){var j=d[h];if(e||c.namespace_re.test(j.namespace)){c.handler=j.handler,c.data=j.data,c.handleObj=j;var k=j.handler.apply(this,g);k!==b&&(c.result=k,k===!1&&(c.preventDefault(),c.stopPropagation()));if(c.isImmediatePropagationStopped())break}}return c.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(a){if(a[f.expando])return a;var d=a;a=f.Event(d);for(var e=this.props.length,g;e;)g=this.props[--e],a[g]=d[g];a.target||(a.target=a.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),!a.relatedTarget&&a.fromElement&&(a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement);if(a.pageX==null&&a.clientX!=null){var h=a.target.ownerDocument||c,i=h.documentElement,j=h.body;a.pageX=a.clientX+(i&&i.scrollLeft||j&&j.scrollLeft||0)-(i&&i.clientLeft||j&&j.clientLeft||0),a.pageY=a.clientY+(i&&i.scrollTop||j&&j.scrollTop||0)-(i&&i.clientTop||j&&j.clientTop||0)}a.which==null&&(a.charCode!=null||a.keyCode!=null)&&(a.which=a.charCode!=null?a.charCode:a.keyCode),!a.metaKey&&a.ctrlKey&&(a.metaKey=a.ctrlKey),!a.which&&a.button!==b&&(a.which=a.button&1?1:a.button&2?3:a.button&4?2:0);return a},guid:1e8,proxy:f.proxy,special:{ready:{setup:f.bindReady,teardown:f.noop},live:{add:function(a){f.event.add(this,M(a.origType,a.selector),f.extend({},a,{handler:L,guid:a.handler.guid}))},remove:function(a){f.event.remove(this,M(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}}},f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!this.preventDefault)return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?D:C):this.type=a,b&&f.extend(this,b),this.timeStamp=f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=D;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=D;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=D,this.stopPropagation()},isDefaultPrevented:C,isPropagationStopped:C,isImmediatePropagationStopped:C};var E=function(a){var b=a.relatedTarget,c=!1,d=a.type;a.type=a.data,b!==this&&(b&&(c=f.contains(this,b)),c||(f.event.handle.apply(this,arguments),a.type=d))},F=function(a){a.type=a.data,f.event.handle.apply(this,arguments)};f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={setup:function(c){f.event.add(this,b,c&&c.selector?F:E,a)},teardown:function(a){f.event.remove(this,b,a&&a.selector?F:E)}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(a,b){if(!f.nodeName(this,"form"))f.event.add(this,"click.specialSubmit",function(a){var b=a.target,c=f.nodeName(b,"input")||f.nodeName(b,"button")?b.type:"";(c==="submit"||c==="image")&&f(b).closest("form").length&&J("submit",this,arguments)}),f.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,c=f.nodeName(b,"input")||f.nodeName(b,"button")?b.type:"";(c==="text"||c==="password")&&f(b).closest("form").length&&a.keyCode===13&&J("submit",this,arguments)});else return!1},teardown:function(a){f.event.remove(this,".specialSubmit")}});if(!f.support.changeBubbles){var G,H=function(a){var b=f.nodeName(a,"input")?a.type:"",c=a.value;b==="radio"||b==="checkbox"?c=a.checked:b==="select-multiple"?c=a.selectedIndex>-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},I=function(c){var d=c.target,e,g;if(!!x.test(d.nodeName)&&!d.readOnly){e=f._data(d,"_change_data"),g=H(d),(c.type!=="focusout"||d.type!=="radio")&&f._data(d,"_change_data",g);if(e===b||g===e)return;if(e!=null||g)c.type="change",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:I,beforedeactivate:I,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&I.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&I.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",H(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in G)f.event.add(this,c+".specialChange",G[c]);return x.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return x.test(this.nodeName)}},G=f.event.special.change.filters,G.focus=G.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i<j;i++)f.event.add(this[i],a,g,d);return this}}),f.fn.extend({unbind:function(a,b){if(typeof a=="object"&&!a.preventDefault)for(var c in a)this.unbind(c,a[c]);else for(var d=0,e=this.length;d<e;d++)f.event.remove(this[d],a,b);return this},delegate:function(a,b,c,d){return this.live(b,c,d,a)},undelegate:function(a,b,c){return arguments.length===0?this.unbind("live"):this.die(b,null,c,a)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f.data(this,"lastToggle"+a.guid)||0)%d;f.data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var K={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};f.each(["live","die"],function(a,c){f.fn[c]=function(a,d,e,g){var h,i=0,j,k,l,m=g||this.selector,n=g?this:f(this.context);if(typeof a=="object"&&!a.preventDefault){for(var o in a)n[c](o,d,a[o],m);return this}if(c==="die"&&!a&&g&&g.charAt(0)==="."){n.unbind(g);return this}if(d===!1||f.isFunction(d))e=d||C,d=b;a=(a||"").split(" ");while((h=a[i++])!=null){j=w.exec(h),k="",j&&(k=j[0],h=h.replace(w,""));if(h==="hover"){a.push("mouseenter"+k,"mouseleave"+k);continue}l=h,K[h]?(a.push(K[h]+k),h=h+k):h=(K[h]||h)+k;if(c==="live")for(var p=0,q=n.length;p<q;p++)f.event.add(n[p],"live."+M(h,m),{data:d,selector:m,handler:e,origType:h,origHandler:e,preType:l});else n.unbind("live."+M(h,m),e)}return this}}),f.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".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}if(i.nodeType===1){f||(i.sizcache=c,i.sizset=g);if(typeof b!="string"){if(i===b){j=!0;break}}else if(k.filter(b,[i]).length>0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}i.nodeType===1&&!f&&(i.sizcache=c,i.sizset=g);if(i.nodeName.toLowerCase()===b){j=i;break}i=i[a]}d[g]=j}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},k.matches=function(a,b){return k(a,null,null,b)},k.matchesSelector=function(a,b){return k(b,null,null,[a]).length>0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e<f;e++){var g,h=l.order[e];if(g=l.leftMatch[h].exec(a)){var j=g[1];g.splice(1,1);if(j.substr(j.length-1)!=="\\"){g[1]=(g[1]||"").replace(i,""),d=l.find[h](g,b,c);if(d!=null){a=a.replace(l.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},k.filter=function(a,c,d,e){var f,g,h=a,i=[],j=c,m=c&&c[0]&&k.isXML(c[0]);while(a&&c.length){for(var n in l.filter)if((f=l.leftMatch[n].exec(a))!=null&&f[2]){var o,p,q=l.filter[n],r=f[1];g=!1,f.splice(1,1);if(r.substr(r.length-1)==="\\")continue;j===i&&(i=[]);if(l.preFilter[n]){f=l.preFilter[n](f,j,d,i,e,m);if(!f)g=o=!0;else if(f===!0)continue}if(f)for(var s=0;(p=j[s])!=null;s++)if(p){o=q(p,f,s,j);var t=e^!!o;d&&o!=null?t?g=!0:j[s]=!1:t&&(i.push(p),g=!0)}if(o!==b){d||(j=i),a=a.replace(l.match[n],"");if(!g)return[];break}}if(a===h)if(g==null)k.error(a);else break;h=a}return j},k.error=function(a){throw"Syntax error, unrecognized expression: "+a};var l=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!j.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&k.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&k.filter(b,a,!0)}},"":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("parentNode",b,f,a,e,c)},"~":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("previousSibling",b,f,a,e,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(i,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}k.error(e)},CHILD:function(a,b){var c=b[1],d=a;switch(c){case"only":case"first":while(d=d.previousSibling)if(d.nodeType===1)return!1;if(c==="first")return!0;d=a;case"last":while(d=d.nextSibling)if(d.nodeType===1)return!1;return!0;case"nth":var e=b[2],f=b[3];if(e===1&&f===0)return!0;var g=b[0],h=a.parentNode;if(h&&(h.sizcache!==g||!a.nodeIndex)){var i=0;for(d=h.firstChild;d;d=d.nextSibling)d.nodeType===1&&(d.nodeIndex=++i);h.sizcache=g}var j=a.nodeIndex-f;return e===0?j===0:j%e===0&&j/e>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c<f;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var r,s;c.documentElement.compareDocumentPosition?r=function(a,b){if(a===b){g=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(r=function(a,b){if(a===b){g=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],h=a.parentNode,i=b.parentNode,j=h;if(h===i)return s(a,b);if(!h)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return s(e[k],f[k]);return k===c?s(a,f[k],-1):s(e[k],b,1)},s=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),k.getText=function(a){var b="",c;for(var d=0;a[d];d++)c=a[d],c.nodeType===3||c.nodeType===4?b+=c.nodeValue:c.nodeType!==8&&(b+=k.getText(c.childNodes));return b},function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g<h;g++)k(a,f[g],d);return k.filter(e,d)};f.find=k,f.expr=k.selectors,f.expr[":"]=f.expr.filters,f.unique=k.uniqueSort,f.text=k.getText,f.isXMLDoc=k.isXML,f.contains=k.contains}();var N=/Until$/,O=/^(?:parents|prevUntil|prevAll)/,P=/,/,Q=/^.[^:#\[\.,]*$/,R=Array.prototype.slice,S=f.expr.match.POS,T={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(V(this,a,!1),"not",a)},filter:function(a){return this.pushStack(V(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d<e;d++)i=a[d],j[i]||(j[i]=S.test(i)?f(i,b||this.context):i);while(g&&g.ownerDocument&&g!==b){for(i in j)h=j[i],(h.jquery?h.index(g)>-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=S.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(l?l.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(U(c[0])||U(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=R.call(arguments);N.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!T[a]?f.unique(e):e,(this.length>1||P.test(d))&&O.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|object|embed|option|style)/i,bb=/checked\s*(?:[^=]|=\s*.checked.)/i,bc=/\/(java|ecma)script/i,bd=/^\s*<!(?:\[CDATA\[|\-\-)/,be={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};be.optgroup=be.option,be.tbody=be.tfoot=be.colgroup=be.caption=be.thead,be.th=be.td,f.support.htmlSerialize||(be._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!be[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bb.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bf(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bl)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i;b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof a[0]=="string"&&a[0].length<512&&i===c&&a[0].charAt(0)==="<"&&!ba.test(a[0])&&(f.support.checkClone||!bb.test(a[0]))&&(g=!0,h=f.fragments[a[0]],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean
(a,i,e,d)),g&&(f.fragments[a[0]]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bh(a,d),e=bi(a),g=bi(d);for(h=0;e[h];++h)g[h]&&bh(e[h],g[h])}if(b){bg(a,d);if(c){e=bi(a),g=bi(d);for(h=0;e[h];++h)bg(e[h],g[h])}}e=g=null;return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=be[l]||be._default,n=m[0],o=b.createElement("div");o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bk(k[i]);else bk(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||bc.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.expando,g=f.event.special,h=f.support.deleteExpando;for(var i=0,j;(j=a[i])!=null;i++){if(j.nodeName&&f.noData[j.nodeName.toLowerCase()])continue;c=j[f.expando];if(c){b=d[c]&&d[c][e];if(b&&b.events){for(var k in b.events)g[k]?f.event.remove(j,k):f.removeEvent(j,k,b.handle);b.handle&&(b.handle.elem=null)}h?delete j[f.expando]:j.removeAttribute&&j.removeAttribute(f.expando),delete d[c]}}}});var bm=/alpha\([^)]*\)/i,bn=/opacity=([^)]*)/,bo=/([A-Z]|^ms)/g,bp=/^-?\d+(?:px)?$/i,bq=/^-?\d/,br=/^([\-+])=([\-+.\de]+)/,bs={position:"absolute",visibility:"hidden",display:"block"},bt=["Left","Right"],bu=["Top","Bottom"],bv,bw,bx;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bv(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=br.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bv)return bv(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return by(a,b,d);f.swap(a,bs,function(){e=by(a,b,d)});return e}},set:function(a,b){if(!bp.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bn.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bm,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bm.test(g)?g.replace(bm,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bv(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bw=function(a,c){var d,e,g;c=c.replace(bo,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bx=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bp.test(d)&&bq.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bv=bw||bx,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bz=/%20/g,bA=/\[\]$/,bB=/\r?\n/g,bC=/#.*$/,bD=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bE=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bF=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bG=/^(?:GET|HEAD)$/,bH=/^\/\//,bI=/\?/,bJ=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bK=/^(?:select|textarea)/i,bL=/\s+/,bM=/([?&])_=[^&]*/,bN=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bO=f.fn.load,bP={},bQ={},bR,bS,bT=["*/"]+["*"];try{bR=e.href}catch(bU){bR=c.createElement("a"),bR.href="",bR=bR.href}bS=bN.exec(bR.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bO)return bO.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bJ,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bK.test(this.nodeName)||bE.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bB,"\r\n")}}):{name:b.name,value:c.replace(bB,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?bX(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),bX(a,b);return a},ajaxSettings:{url:bR,isLocal:bF.test(bS[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bT},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bV(bP),ajaxTransport:bV(bQ),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?bZ(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=b$(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bD.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bC,"").replace(bH,bS[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bL),d.crossDomain==null&&(r=bN.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bS[1]&&r[2]==bS[2]&&(r[3]||(r[1]==="http:"?80:443))==(bS[3]||(bS[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bW(bP,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bG.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bI.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bM,"$1_="+x);d.url=y+(y===d.url?(bI.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bT+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bW(bQ,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){s<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)bY(g,a[g],c,e);return d.join("&").replace(bz,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var b_=f.now(),ca=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+b_++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ca.test(b.url)||e&&ca.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ca,l),b.url===j&&(e&&(k=k.replace(ca,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cb=a.ActiveXObject?function(){for(var a in cd)cd[a](0,1)}:!1,cc=0,cd;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ce()||cf()}:ce,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cb&&delete cd[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cc,cb&&(cd||(cd={},f(a).unload(cb)),cd[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cg={},ch,ci,cj=/^(?:toggle|show|hide)$/,ck=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cl,cm=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cn;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cq("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cr(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cq("hide",3),a,b,c);for(var d=0,e=this.length;d<e;d++)if(this[d].style){var g=f.css(this[d],"display");g!=="none"&&!f._data(this[d],"olddisplay")&&f._data(this[d],"olddisplay",g)}for(d=0;d<e;d++)this[d].style&&(this[d].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cq("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return this[e.queue===!1?"each":"queue"](function(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(f.support.inlineBlockNeedsLayout?(j=cr(this.nodeName),j==="inline"?this.style.display="inline-block":(this.style.display="inline",this.style.zoom=1)):this.style.display="inline-block"))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)k=new f.fx(this,b,i),h=a[i],cj.test(h)?k[h==="toggle"?d?"show":"hide":h]():(l=ck.exec(h),m=k.cur(),l?(n=parseFloat(l[2]),o=l[3]||(f.cssNumber[i]?"":"px"),o!=="px"&&(f.style(this,i,(n||1)+o),m=(n||1)/k.cur()*m,f.style(this,i,m+o)),l[1]&&(n=(l[1]==="-="?-1:1)*n+m),k.custom(m,n,o)):k.custom(m,h,""));return!0})},stop:function(a,b){a&&this.queue([]),this.each(function(){var a=f.timers,c=a.length;b||f._unmark(!0,this);while(c--)a[c].elem===this&&(b&&a[c](!0),a.splice(c,1))}),b||this.dequeue();return this}}),f.each({slideDown:cq("show",1),slideUp:cq("hide",1),slideToggle:cq("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default,d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue!==!1?f.dequeue(this):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,b,c){function g(a){return d.step(a)}var d=this,e=f.fx;this.startTime=cn||co(),this.start=a,this.end=b,this.unit=c||this.unit||(f.cssNumber[this.prop]?"":"px"),this.now=this.start,this.pos=this.state=0,g.elem=this.elem,g()&&f.timers.push(g)&&!cl&&(cl=setInterval(e.tick,e.interval))},show:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.show=!0,this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b=cn||co(),c=!0,d=this.elem,e=this.options,g,h;if(a||b>=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){for(var a=f.timers,b=0;b<a.length;++b)a[b]()||a.splice(b--,1);a.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cl),cl=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit:a.elem[a.prop]=a.now}}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cs=/^t(?:able|d|h)$/i,ct=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cu(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);f.offset.initialize();var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.offset.supportsFixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.offset.doesNotAddBorder&&(!f.offset.doesAddBorderForTableAndCells||!cs.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.offset.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.offset.supportsFixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={initialize:function(){var a=c.body,b=c.createElement("div"),d,e,g,h,i=parseFloat(f.css(a,"marginTop"))||0,j="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=ct.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!ct.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cu(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cu(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a&&a.style?parseFloat(f.css(a,d,"padding")):null},f.fn["outer"+c]=function(a){var b=this[0];return b&&b.style?parseFloat(f.css(b,d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNaN(j)?i:j}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window);PK�����*†9D������������¤��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/public/stylesheets/main.cssPK�����*†9D_5¢<���<���–��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/htgroupsroot: root apacheRoot
users: root apacheRoot user apacheUserPK�����*†9D(ÉÆ9����¡��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/EncryptionTest.java
import org.junit.Test;
import play.Logger;
import play.modules.fileauth.utils.MD5Crypt;
import play.test.UnitTest;

/**
 * EncryptionTest
 * 31.07.2012
 * @author Philipp Haussleiter
 *
 */
public class EncryptionTest extends UnitTest {

    @Test
    public void testApacheCrypt() {
        Logger.info("testing APACHE_CRYPT");
        String clear = "pw_" + System.currentTimeMillis();
        String pass;
        String salt = "abcd1234";
        pass = MD5Crypt.apacheCrypt(clear);
        Logger.info(clear + " got me " + pass);
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
        pass = MD5Crypt.apacheCrypt(clear, salt);
        Logger.info(clear + " & salt " + salt + " got me " + pass);
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
    }

    @Test
    public void testCrypt() {
        Logger.info("testing CRYPT");
        String clear = "pw_" + System.currentTimeMillis();
        String pass;
        String salt = "abcd1234";
        pass = MD5Crypt.crypt(clear);
        Logger.info(clear + " got me " + pass);
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
        pass = MD5Crypt.crypt(clear, salt);
        Logger.info(clear + " & salt " + salt + " got me " + pass);
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
    }
}
PK�����*†9D*˜,-I��I��¢��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/ApacheUsersTest.java
import java.util.HashMap;
import java.util.Map;
import org.junit.BeforeClass;
import org.junit.Test;
import play.Play;
import play.cache.Cache;
import play.modules.fileauth.FileAuth;
import play.modules.fileauth.utils.MD5Crypt;
import play.test.UnitTest;

/**
 * ApacheUsersTest
 * 03.08.2012
 * @author Philipp Haussleiter
 *
 */
public class ApacheUsersTest extends UnitTest {

    @BeforeClass
    public static void setup() {
        Play.configuration.setProperty("authfile.users.path", Play.applicationPath + "/test/htusers");
        Play.configuration.setProperty("authfile.users.delimeter", ":");
        Cache.safeDelete(FileAuth.AUTH_FILE_USERS_CACHE_KEY);
        FileAuth.scanUsers();
    }

    @Test
    public void testUsersRead() {
        Map<String, String> users = Cache.get(FileAuth.AUTH_FILE_USERS_CACHE_KEY, HashMap.class);
        assertNotNull(users);
    }

    @Test
    public void testUsersValidate() {
        String clear = "user";
        String pass = MD5Crypt.crypt("user");
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
    }

    @Test
    public void testValidatePassword() {
        String pass = "user";
        String user = "user";
        assertTrue(FileAuth.validate(user, pass));
        user = "apacheUser";
        assertTrue(FileAuth.validate(user, pass));
        user = "user";
        pass = "user123";
        assertFalse(FileAuth.validate(user, pass));
    }

    @Test
    public void testValidateNotExistingUser() {
        String pass = "user123";
        String user = "user123";
        assertFalse(FileAuth.validate(user, pass));
    }
}
PK�����*†9DÄžŒÒù��ù��¢��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/GroupGroupsTest.java
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.junit.BeforeClass;
import org.junit.Test;
import play.Play;
import play.cache.Cache;
import play.modules.fileauth.FileAuth;
import play.test.UnitTest;

/**
 * GroupGroupsTest
 * 04.08.2012
 * @author Philipp Haussleiter
 *
 */
public class GroupGroupsTest extends UnitTest {

    @BeforeClass
    public static void setup() {
        Play.configuration.setProperty("authfile.groups.path", Play.applicationPath + "/test/group");
        Play.configuration.setProperty("authfile.users.delimeter", ":");
        Play.configuration.setProperty("authfile.groups.delimeter", ",");
        Cache.safeDelete(FileAuth.AUTH_FILE_GROUPS_CACHE_KEY);
    }

    @Test
    public void testUsersRead() {
        FileAuth.scanGroups();
        Map<String, Set<String>> groups = Cache.get(FileAuth.AUTH_FILE_GROUPS_CACHE_KEY, HashMap.class);
        assertNotNull(groups);
    }

    @Test
    public void testGroupContainsUser() {
        String user = "user";
        String group = "users";
        assertTrue(FileAuth.contains(group, user));
        user = "root";
        assertTrue(FileAuth.contains(group, user));
    }

    @Test
    public void testGroupNotContainsUser() {
        String user = "user";
        String group = "root";
        assertFalse(FileAuth.contains(group, user));
    }

    public void testGroupNotExists() {
        String user = "user";
        String group = "user";
        assertFalse(FileAuth.contains(group, user));
    }
}PK�����*†9D?5'³g��g��¢��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/ShadowUsersTest.java
import java.util.HashMap;
import java.util.Map;
import org.junit.BeforeClass;
import org.junit.Test;
import play.Logger;
import play.Play;
import play.cache.Cache;
import play.modules.fileauth.FileAuth;
import play.modules.fileauth.utils.MD5Crypt;
import play.test.UnitTest;


/**
 * ShadowUsersTest
 * 04.08.2012
 * @author Philipp Haussleiter
 *
 */
public class ShadowUsersTest extends UnitTest {

    @BeforeClass
    public static void setup() {
        Play.configuration.setProperty("authfile.users.path", Play.applicationPath + "/test/shadow");
        Logger.info("file path: "+Play.configuration.getProperty("authfile.users.path"));
        Play.configuration.setProperty("authfile.users.delimeter", ":");
        Cache.safeDelete(FileAuth.AUTH_FILE_USERS_CACHE_KEY);
    }

    @Test
    public void testUsersRead() {
        FileAuth.scanUsers();
        Map<String, String> users = Cache.get(FileAuth.AUTH_FILE_USERS_CACHE_KEY, HashMap.class);
        assertNotNull(users);
    }

    @Test
    public void testUsersValidate() {
        String clear = "user";
        String pass = MD5Crypt.crypt("user");
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
    }

    @Test
    public void testValidatePassword() {
        String pass = "user";
        String user = "user";
        assertTrue(FileAuth.validate(user, pass));
        user = "user";
        pass = "user123";
        assertFalse(FileAuth.validate(user, pass));
    }

    @Test
    public void testValidateNotExistingUser() {
        String pass = "user123";
        String user = "user123";
        assertFalse(FileAuth.validate(user, pass));
    }
}
PK�����*†9DTâÒ%���%���“��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/grouproot:x:321:root
users:x:123:root,userPK�����*†9Dcé¸���¸���–��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/data.yml# you describe your data using the YAML notation here
# and then load them using Fixtures.load("data.yml")

# User(bob):
#   email: bob@gmail.com
#   password: secret
#   fullname: BobPK�����*†9D<_'²���²���•��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/htusersapacheUser:$apr1$kuwPretH$BPbVoWoDTEFUw.4g1zDKs1
apacheRoot:$apr1$nVmU2aOS$rDZ4.BG3TPT02YBsCVcSG/
root:$1$imw51D2V$aJbVmk2xlEg8q.Y8nh91E.
user:$1$4aMItwK9$PnpH2GeuHDeR2t.jKhQ771
PK�����*†9DÇÀ���À���œ��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/BasicTest.javaimport org.junit.*;
import play.test.*;

public class BasicTest extends UnitTest {

    @Test
    public void aVeryImportantThingToTest() {
        assertEquals(2, 1 + 1);
    }

}
PK�����*†9D‰=u���u���”��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/shadowroot:$1$imw51D2V$aJbVmk2xlEg8q.Y8nh91E.:43534:0:435:7:::
user:$1$4aMItwK9$PnpH2GeuHDeR2t.jKhQ771:345345:0:46456:7:::
PK�����*†9D,mˆ÷��÷��£��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/ApacheGroupsTest.java
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.junit.BeforeClass;
import org.junit.Test;
import play.Logger;
import play.Play;
import play.cache.Cache;
import play.modules.fileauth.FileAuth;
import play.test.UnitTest;

/**
 * ApacheGroupsTest 03.08.2012
 *
 * @author Philipp Haussleiter
 *
 */
public class ApacheGroupsTest extends UnitTest {

    @BeforeClass
    public static void setup() {
        Play.configuration.setProperty("authfile.groups.path", Play.applicationPath + "/test/htgroups");
        Play.configuration.setProperty("authfile.users.path", Play.applicationPath + "/test/htusers");
        Play.configuration.setProperty("authfile.users.delimeter", ":");
        Play.configuration.setProperty("authfile.groups.delimeter", " ");
        Cache.safeDelete(FileAuth.AUTH_FILE_GROUPS_CACHE_KEY);
        Cache.safeDelete(FileAuth.AUTH_FILE_USERS_CACHE_KEY);
        FileAuth.scanGroups();
        FileAuth.scanUsers();
    }

    @Test
    public void testGroupsRead() {
        Logger.info("testGroupsRead");
        FileAuth.scanGroups();
        Map<String, Set<String>> groups = Cache.get(FileAuth.AUTH_FILE_GROUPS_CACHE_KEY, HashMap.class);
        assertNotNull(groups);
        int groupSize = groups.size();
        assertTrue(String.format("but was %d ", groupSize), groupSize > 0);
    }

    @Test
    public void testGroupContainsUser() {
        FileAuth.scanGroups();
        FileAuth.scanUsers();
        String user = "user";
        String group = "users";
        assertTrue(String.format("u: %s, g: %s", user, group), FileAuth.contains(group, user));
        user = "root";
        assertTrue(String.format("u: %s, g: %s", user, group), FileAuth.contains(group, user));
    }

    @Test
    public void testGroupNotContainsUser() {
        FileAuth.scanGroups();
        FileAuth.scanUsers();
        String user = "user";
        String group = "root";
        assertFalse(String.format("u: %s, g: %s", user, group), FileAuth.contains(group, user));
    }

    public void testGroupNotExists() {
        FileAuth.scanGroups();
        FileAuth.scanUsers();
        String user = "user";
        String group = "user";
        assertFalse(String.format("u: %s, g: %s", user, group), FileAuth.contains(group, user));
    }
}
PK�����*†9D/%ÈBÔ��Ô��”��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/routes# Routes
# This file defines all application routes (Higher priority routes first)
# ~~~~

# Home page
GET     /                                       Application.index

# Ignore favicon requests
GET     /favicon.ico                            404

# Map static resources from the /app/public folder to the /public path
GET     /public/                                staticDir:public

# Catch all
*       /{controller}/{action}                  {controller}.{action}
PK�����*†9D¥#Æ/Ç��Ç��ž��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/application.conf# This is the main configuration file for the application.
# ~~~~~
application.name=auth-file-demo

# Application mode
# ~~~~~
# Set to dev to enable instant reloading and other development help.
# Otherwise set to prod.
application.mode=dev
%prod.application.mode=prod

# Secret key
# ~~~~~
# The secret key is used to secure cryptographics functions
# If you deploy your application to several instances be sure to use the same key !
application.secret=uQks53MboMLlGVsJSrPRCipiFOZ4BXn8oDBfOxGxsaXDVtkJOJaIiBNX9SNQoUN8

# i18n
# ~~~~~
# Define locales used by your application.
# You can then place localized messages in conf/messages.{locale} files
# application.langs=fr,en,ja

# Date format
# ~~~~~
date.format=yyyy-MM-dd
# date.format.fr=dd/MM/yyyy

# Server configuration
# ~~~~~
# If you need to change the HTTP port, uncomment this (default is set to 9000)
# http.port=9000
#
# By default the server listen for HTTP on the wilcard address.
# You can restrict this.
# http.address=127.0.0.1
#
# Use this if you don't host your Play application at the root of the domain
# you're serving it from. This parameter has no effect when deployed as a
# war, because the path will be handled by the application server.
# http.path=/

# Session configuration
# ~~~~~~~~~~~~~~~~~~~~~~
# By default, session will be written to the transient PLAY_SESSION cookie.
# The cookies are not secured by default, only set it to true
# if you're serving your pages through https.
# application.session.cookie=PLAY
# application.session.maxAge=1h
# application.session.secure=false

# Session/Cookie sharing between subdomain
# ~~~~~~~~~~~~~~~~~~~~~~
# By default a cookie is only valid for a specific domain. By setting
# application.defaultCookieDomain to '.example.com', the cookies
# will be valid for all domains ending with '.example.com', ie:
# foo.example.com and bar.example.com
# application.defaultCookieDomain=.example.com

# JVM configuration
# ~~~~~
# Define which port is used by JPDA when application is in debug mode (default is set to 8000)
# jpda.port=8000
#
# Java source level => 1.5, 1.6 or 1.7 (experimental)
# java.source=1.5

# Log level
# ~~~~~
# Specify log level for your application.
# If you want a very customized log, create a log4j.properties file in the conf directory
# application.log=INFO
#
# More logging configuration
# application.log.path=/log4j.properties
# application.log.system.out=off

# Database configuration
# ~~~~~ 
# Enable a database engine if needed.
#
# To quickly set up a development database, use either:
#   - mem : for a transient in memory database (H2 in memory)
#   - fs  : for a simple file written database (H2 file stored)
# db=mem
#
# To connect to a local MySQL5 database, use:
# db=mysql://user:pwd@host/database
#
# To connect to a local PostgreSQL9 database, use:
# db=postgres://user:pwd@host/database
#
# If you need a full JDBC configuration use the following :
# db.url=jdbc:postgresql:database_name
# db.driver=org.postgresql.Driver
# db.user=root
# db.pass=secret
#
# Connections pool configuration :
# db.pool.timeout=1000
# db.pool.maxSize=30
# db.pool.minSize=10
#
# If you want to reuse an existing Datasource from your application server, use:
# db=java:/comp/env/jdbc/myDatasource
#
# When using an existing Datasource, it's sometimes needed to destroy it when
# the application is stopped. Depending on the datasource, you can define a
# generic "destroy" method :
# db.destroyMethod=close

# JPA Configuration (Hibernate)
# ~~~~~
#
# Specify the custom JPA dialect to use here (default to guess):
# jpa.dialect=org.hibernate.dialect.PostgreSQLDialect
#
# Specify the ddl generation pattern to use. Set to none to disable it 
# (default to update in DEV mode, and none in PROD mode):
# jpa.ddl=update
#
# Debug SQL statements (logged using DEBUG level):
# jpa.debugSQL=true
#
# You can even specify additional hibernate properties here:
# hibernate.use_sql_comments=true
# ...
#
# Store path for Blob content
attachments.path=data/attachments

# Memcached configuration
# ~~~~~ 
# Enable memcached if needed. Otherwise a local cache is used.
# memcached=enabled
#
# Specify memcached host (default to 127.0.0.1:11211)
# memcached.host=127.0.0.1:11211
#
# Or you can specify multiple host to build a distributed cache
# memcached.1.host=127.0.0.1:11211
# memcached.2.host=127.0.0.1:11212
#
# Use plain SASL to authenticate for memcached
# memcached.user=
# memcached.password=

# HTTP Response headers control for static files
# ~~~~~
# Set the default max-age, telling the user's browser how long it should cache the page.
# Default is 3600 (one hour). Set it to 0 to send no-cache.
# This is only read in prod mode, in dev mode the cache is disabled.
# http.cacheControl=3600

# If enabled, Play will generate entity tags automatically and send a 304 when needed.
# Default is true, set it to false to deactivate use of entity tags.
# http.useETag=true

# Custom mime types
# mimetype.xpi=application/x-xpinstall

# WS configuration
# ~~~~~
# Default engine is Async Http Client, uncomment to use
# the JDK's internal implementation
# webservice = urlfetch
# If you need to set proxy params for WS requests
# http.proxyHost = localhost
# http.proxyPort = 3128
# http.proxyUser = jojo
# http.proxyPassword = jojo

# Mail configuration
# ~~~~~ 
# Default is to use a mock Mailer
mail.smtp=mock

# Or, specify mail host configuration
# mail.smtp.host=127.0.0.1
# mail.smtp.user=admin
# mail.smtp.pass=
# mail.smtp.channel=ssl

# Url-resolving in Jobs
# ~~~~~~
# When rendering templates with reverse-url-resoling (@@{..}) in Jobs (which do not have an inbound Http.Request),
# ie if sending a HtmlMail, Play need to know which url your users use when accessing your app.
# %test.application.baseUrl=http://localhost:9000/
# %prod.application.baseUrl=http://www.yourdomain.com/

# Jobs executor
# ~~~~~~
# Size of the Jobs pool
# play.jobs.pool=10

# Execution pool
# ~~~~~
# Default to 1 thread in DEV mode or (nb processors + 1) threads in PROD mode.
# Try to keep a low as possible. 1 thread will serialize all requests (very useful for debugging purpose)
# play.pool=3

# Open file from errors pages
# ~~~~~
# If your text editor supports opening files by URL, Play! will
# dynamically link error pages to files 
#
# Example, for textmate:
# play.editor=txmt://open?url=file://%s&line=%s

# Testing. Set up a custom configuration for test mode
# ~~~~~
#%test.module.cobertura=${play.path}/modules/cobertura
%test.application.mode=dev
%test.db.url=jdbc:h2:mem:play;MODE=MYSQL;LOCK_MODE=0
%test.jpa.ddl=create
%test.mail.smtp=mock

PK�����*†9D‹úWÀ �� ��ž��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/dependencies.yml# Application dependencies

require:
    - play
    - play -> secure
    - local -> play-file-auth 0.2
    
repositories:
    - playCustomModules:
        type:       local
        artifact:   ${application.path}/../../dist/[module]-[revision].zip
        contains:
          - local -> *PK�����*†9Dqé¶h���h���–��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/messages# You can specialize this file for each language.
# For example, for French create a messages.fr file
#
PK�����*†9D«_^)/��/��œ��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/main.html<!DOCTYPE html>

<html>
    <head>
        <title>#{get 'title' /}</title>
        <meta charset="${_response_encoding}">
        <link rel="stylesheet" media="screen" href="@{'/public/stylesheets/main.css'}">
        #{get 'moreStyles' /}
        <link rel="shortcut icon" type="image/png" href="@{'/public/images/favicon.png'}">
        <script src="@{'/public/javascripts/jquery-1.6.4.min.js'}" type="text/javascript" charset="${_response_encoding}"></script>
        #{get 'moreScripts' /}
    </head>
    <body>
        #{doLayout /}
    </body>
</html>
PK�����*†9D*º$•<���<���©��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/Application/index.html#{extends 'main.html' /}
#{set title:'Home' /}

#{welcome /}PK�����*†9DÙ¦��¦��¢��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/errors/404.html<!DOCTYPE html>

<html>
    <head>
        <title>Not found</title>
        <meta http-equiv="Content-Type" content="text/html; charset=${_response_encoding}"/>    
    </head>
    <body>
        #{if play.mode.name() == 'DEV'}
            #{404 result /}
        #{/if}
        #{else}
            <h1>Not found</h1>
            <p>
                ${result.message}
            </p>
        #{/else}
    </body>
</html>
PK�����*†9DËip®V��V��¢��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/errors/500.html<!DOCTYPE html>

<html>
    <head>
        <title>Application error</title>
        <meta http-equiv="Content-Type" content="text/html; charset=${_response_encoding}"/>	
    </head>
    <body>
        #{if play.mode.name() == 'DEV'}
            #{500 exception /}
        #{/if}
        #{else}
            <h1>Oops, an error occured</h1>
            #{if exception instanceof play.exceptions.PlayException}
                <p>
                    This exception has been logged with id <strong>${exception.id}</strong>.
                </p>
            #{/if}
        #{/else}
    </body>
</html>
PK�����*†9D¤8r“���“���©��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/controllers/Application.javapackage controllers;
import play.mvc.*;

public class Application extends Controller {

    public static void index() {
        render();
    }

}PK�����*†9Dp­b’$���$���—��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/secure/opt/play/play-1.2.5/modules/secure
PK�����*†9DD6I÷P��P��¯��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.py# Here you can create play commands that are specific to the module, and extend existing commands

MODULE = 'play-file-auth'

# Commands that are specific to your module

COMMANDS = ['play-file-auth:hello']

def execute(**kargs):
    command = kargs.get("command")
    app = kargs.get("app")
    args = kargs.get("args")
    env = kargs.get("env")

    if command == "play-file-auth:hello":
        print "~ Hello"


# This will be executed before any command (new, run...)
def before(**kargs):
    command = kargs.get("command")
    app = kargs.get("app")
    args = kargs.get("args")
    env = kargs.get("env")


# This will be executed after any command (new, run...)
def after(**kargs):
    command = kargs.get("command")
    app = kargs.get("app")
    args = kargs.get("args")
    env = kargs.get("env")

    if command == "new":
        pass
PK�����*†9DŒÀÉZ•��•��­��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/README.mdplay-file-auth
==============

This Module supports authentication of Play! 1.x Applications agains Unix Auth Files (e.g. Apache htusers)

This Plugin works for all Auth Files with the following syntax:


    user1:passwordhash
    user1:passwordhash:...:...:

    group:user1 user2
    group:x:...:user1,user2


The Hash Algorithm has to be either MD5 Crypt or MD5 Apache Crypt.

    $1$...
    $apr1$...PK�����*†9DaCV��V��­��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/build.xml<?xml version="1.0" encoding="UTF-8"?>

<project name="play-file-auth" default="build" basedir=".">

    <target name="check" unless="play.path">
        <fail message="Please specify Play framework path using -Dplay.path=/path/to/framework/home" />
    </target>

    <path id="project.classpath">
        <pathelement path="${play.path}/framework/classes"/>
        <fileset dir="${play.path}/framework/lib">
            <include name="*.jar"/>
        </fileset>
        <fileset dir="${play.path}/framework">
            <include name="*.jar"/>
        </fileset>
        <fileset dir="lib">
            <include name="*.jar"/>
        </fileset>
    </path>

    <target name="build" depends="compile">
        <mkdir dir="lib" />
        <copy todir="tmp/classes">
            <fileset dir="src">
                <include name="**/*.properties"/>
                <include name="**/*.xml"/>
                <include name="**/play.plugins"/>
                <include name="**/play.static"/>
            </fileset>
        </copy>
        <jar destfile="lib/play-play-file-auth.jar" basedir="tmp/classes">
            <manifest>
                <section name="Play-module">
                    <attribute name="Specification-Title" value="play-file-auth"/>
                </section>
            </manifest>
        </jar>
        <delete dir="tmp" />
    </target>

    <target name="compile" depends="check">
        <mkdir dir="tmp/classes" />
        <javac srcdir="src" destdir="tmp/classes" target="1.5" debug="true">
            <classpath refid="project.classpath" />
        </javac>
    </target>

</project>
PK�����*†9DÖþ›Nò��ò��°��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pycÑò
k(Rc�����������@���s.���d��Z��d�g�Z�d�„��Z�d�„��Z�d�„��Z�d�S(���s���play-file-auths���play-file-auth:helloc����������K���sV���|��i��d�ƒ�}�|��i��d�ƒ�}�|��i��d�ƒ�}�|��i��d�ƒ�}�|�d�j�o	�d�GHn�d��S(���Nt���commandt���appt���argst���envs���play-file-auth:hellos���~ Hello(���t���get(���t���kargsR����R���R���R���(����(����s–���/home/javastream.de/jenkins/jobs/de.consolving.play-file-auth-module/workspace/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pyt���execute	���s����
c����������K���s@���|��i��d�ƒ�}�|��i��d�ƒ�}�|��i��d�ƒ�}�|��i��d�ƒ�}�d��S(���NR����R���R���R���(���R���(���R���R����R���R���R���(����(����s–���/home/javastream.de/jenkins/jobs/de.consolving.play-file-auth-module/workspace/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pyt���before���s����c����������K���sQ���|��i��d�ƒ�}�|��i��d�ƒ�}�|��i��d�ƒ�}�|��i��d�ƒ�}�|�d�j�o�n�d��S(���NR����R���R���R���t���new(���R���(���R���R����R���R���R���(����(����s–���/home/javastream.de/jenkins/jobs/de.consolving.play-file-auth-module/workspace/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pyt���after���s����
N(���t���MODULEt���COMMANDSR���R���R	���(����(����(����s–���/home/javastream.de/jenkins/jobs/de.consolving.play-file-auth-module/workspace/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pyt���<module>���s���			PK�����*†9DxÏ‘[$���$���¬��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/manifestversion=0.2
frameworkVersions=1.2.x
PK�����*†9D0ã•»��»��¿��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/lib/play-play-file-auth.jarPK
����V•C������������	��META-INF/þÊ��PK
���U•C½ÿíŠ���¤������META-INF/MANIFEST.MFM±
Â0E÷@þ!£	U¡H·ÖÉ¡"T\噾ÐiR’tÈß›l®çœËÁ‘Á˜äC$ï:qR
g½û#ýzAQX‘תo!á,‡\ûV5Ÿs+¿ÍE¦Ý‰‘tð1Ç„kw§Õ‘3ΰb'ž²\ý¼[älÚP“!
©üÈ%[Š­†,JØÓR—?PK
����U•C���������������play/PK
����U•C������������
���play/modules/PK
����U•C���������������play/modules/fileauth/PK
����U•C���������������play/modules/fileauth/utils/PK
���U•C��������������play.plugins�PK
���U•C(�å_j
����$���play/modules/fileauth/FileAuth.classW{|Õþ&û˜ÙÉ$À†D—Š,ˆ˜„,QZPEBL „”hD‡ì$Ýìngg‘૾j[m}k¥­O4ÕR´!1ÁG¨Vkµ[«}ØÖÖÚÚ÷ý•~wöÁf³bȏû8÷Üs¿sÎwϝ}ùOpþ£"ˆk|8×ʸN…×(¸^ÅpƒŒ/ª”IÁ—E£hn*†Œ¯Èøj1Jp³Ü"ãV·ávîÀ
îRq7¾¦à»Äðë2¾¡âDaö›¢¿WÅ}¸_ŒPð è’±[ÅÃxDưŠø–hÍc
¾-VöÈøŽŒÇUTá	•Ø+š}*fb¿hž žRð]{DÆK1*6ŽÉxZÅ2Œ*Jßç=£à ‚gRpXÁs2žWq®.½ àEáÕ„Œ#õ›×õ45·4ötv4nêèi¨oXר³¡±[‚¿åb}»^Ñ£ýµ¶eFûWH(iˆE¶µ»ôHҐ 6wô4¶Õ¯ii<W‚t„9Ç,®Ý´±³}’É’ÔxsskãÆÎͼ+ͨi¯’બê’ànˆ…isF‹5Ú’ƒÛk³¾-b(±^=Ò¥[¦˜§…n{ÀLH¶Ä#úPí`,œŒ‰Ú>3bèI{ ¶‰ƒzZé7ì΄aQ{VeUÊ­¤mFj[õ8—=ÉÔÚŒ)+“ÏŠgÎ^6YuåÔPM•¬¢A_‡ÙÕí¤EgæC™¾ú³ÖŠ%ãííOš¦iÌQè0ì
«ë릍ëcM)½±¨­›QÂ;­r:ÞU‘AÇ#æW¤…s¦SSăyÄ)Ó€B ÛõˆÖm†]‰ë‰Ä¥1+L:Ñ^k(návÊ×D¯MŸä‰ë–;lK¡kP´ÈNL­˜±Ú5ɾ>Ã2›=lX\wGHaª;$Ì˪	J¶Åì¦X2nÜÑkÄm3¥vyV£yc®\dnÓÅ=sа
ëZr	¥“S_ø3Äð‰ðµ§œpë–µP 2¢ì¤f"3æ]J}3Ñì;ב‰PVöFÒ÷Síˆ%­^£É9·$sµ–ˆó5´ UÃ:Ðê¬c¹X§'Ȧ,¯ÄÈø¾†—ð2íLb™,	3óë‡†íØ¬a‹h^Â&mcÂ5ôà
ÎÞüLÉxUÃq‘Œ×4ü¯3¢6ˆð-q.ý’¸nÈxCÏñf4o5­NèüTÂ	ù‡¬Iš‘°£²ZÃÏ𦌟køÞ“_òÄ`³¥bСVÐŒ5¼w&áݸíb£×–ñ+
¿Æo$h¹©!þ­†wq¥†ßáJÙ ™FcvP:ÄŠl„„ê|
¿û+
S“¥4×pJ(ÌÿA4ïiø#ÞÑð'¼¯áÏbôþB6,Œjø+>”0÷¸TÖð7±éï@YJ³Zõ‰
ôÿø§ˆÏ¿È»à 3<äéìlüSUÍI_©|qn^‚Üv,Ä)ö‹Oa£C–ã	ë3vbh¤X¿$X€Á˜,„ÉÙ˜0l†û
‘“ÿ1ÕŽB¯Þ;`Ô6ˆ–ae¯ÀqëbC„•iEUK>SxÛUN•T,/¤Èû½°0h°Dmë¹ËDmd™ÙnXfßP{¶lúœ}ílxYáûÌþ¤¥§\‘SŽÛ­XܰlÓHÄìBr	ÅBz>”çRæI(TÏšÞkRh«—l3¢t#4­ÃÒ·{Åäê2”°A2¬7iYFÔÞL6¶š‘ˆøaí\/á¤Êõdz¥Ø±”ˆ©,³Ø	rK¬¿_°ÜmFûb*@ÞR ¹]yIÏxG¹×Øa&Ä›à5©rî¾T·¢âËhòs"”ËŽÉÒO›*Ç-ÎçIÄ#¦]øu¯*ørº9`ä\ñ¤—Æ4øi’Ú•·çìãó`ªÉœH”‘zÎ÷¹Ó·‰„Þ/<2,+&"ž ØÉf³Èfóñ²éÒÃaÌçGu¿8Ü M°–³"x8çãÈq�ësä>ÌÁ†œùé”Hâ-eÛFI-{‰½§ú�¤}ŽÊF¶^GxÚÙj)|›ØûÄ#H-±Ùf/ÖîGÑ.ÃÕ}�î½~O\£ð‚¼¡úäQ(ª÷RÏåØžCëÀb¶5(ÅÎkq2-்Ìys ¢]œ7Ir>gÝʈdËÇ"ñå#Q§"YÁv%‘¬âü"YM$k&!¹p
’±5‹ä³DÒƒ‹Ò}’·¬ƒÄãÞS=yñx\{FQÜZS=­‡PÒr„¡Åc(-ž,¨E4æÇKs
aÌdàýzÏœJ0§1`uê(èÌ0œÑ6'×d�]Ä¥èE˜¶ü
JRk[³k×|èË:0œv Tȁǘ™v`qh³òá‡	ß ü~ ü‹yì%<0Bøƒ„ˁr@Ãõ§áŸàd_@Ô¸¿)
_Ë®ïPÛÌä_:J~ÊìËöÃï/Áì
bPî¯Á	-ã8‘løçŒà£8isý'sXÍÿ#˜çzÁQÌOS¦uºyNiM`VhïÊîÔ]˜›¶#öùån>m•Ýã¨ê�÷.®sÜ#¨é®óL :àY<‚P7à=èÞ}ôýš€×µtK^·èÆPK߆¾î÷ÔøOÅèImÿ¤›¶»]wÇ(>5ŒŠ”ty®4ãØ™S3†³$ŒàlÝ$¿jö2DÛq/ðz‰þ-þŽO¥ªålw0C˜8—¡—³~\A†\Ií«q®Ãm¸»p#ÀMÃÍ´q­Ý‚	ÜŠ79~‹oãv~»Ý)ÍÂ]Nj/¤Õ]˜ÇÄ_B*Ü€:¦~é¾™(¢L¨‡»g‘qÊÞvFŸãÈ'©°2ÌÆQ$2Ôã4ÖóËÜF2‡©5A†cEa{†Eïñ”R’ârÁ…y¤ÕþOsØZ€«>Šm~ˆtL Lä„)ýô8p§Iâ	x’x'pmÀëDÈIØyvcvÀ™‡—Öˆ5e%ٝž”ƒ÷=<ŽsxÚê:_@©SêÁåÅ®åZ¹V^ü æÔrmi]IÀ(qxV_„ó®Ó¤á£ï†rŠ‚¾ûvø}¡,û\öy2ìs¤Ës¥¹ì}ûB‚}×KÕRˆy}C–};Yjû˜±û™íÈ•ù¶=Ä·i7³ý0yóy÷(îÆã\ya/öñoûɃ§ø3i„¿ð÷Ê(þ‹1ɇQiÆ¥xVªÆ<ñT‹ÃÒjŽðœÔˆç¥.¼(í$óC÷uÄr)ORh¡Ä)C%xU¼—°È€…¼;QŒYˆ.ãH#Чež¿1½÷]>,y>b½Ýṇ~ÝèðÜK)ž{ˆ ÅsyžÈð\Hó|ž´•w¯‰ñj‘Nwª·]Ò"‡ñîlõNeð¬”ÖVjež!UüJHWñµ”ˆ§d
âJ3×àJýkÒ	ríq‹Ú-9)ñ;õøeô
Óñ*~î]•ýX˜ç¼±ïhß¹}ٍ©Ï…ùl?ï`¹úÿPK
���U•Cæ'È­r��p��*���play/modules/fileauth/FileAuthPlugin.classQÛJ1œìÖ®nk«VÛz©U(R\|V
–"…Šâc¶]5’&e/ŠŸå‹‚‚àG‰g·õ*æa&™Ì™œ$/¯Ï�¶±b#‚…Y
1ÌY(Z(1¤w…áƒY_?aHèžÇo	åE}×ó¹+I™ié.—'Üñz$¦ÂK0¬µ’ß:}Ý‹¤8çBz<
/MöiÒ–Ñ…P;¢Õþ` E—‡B«NÈý¾Ò.Cõ—ŒN—«¦v©ØîèÈïzq(Cá{öÖ¿æYXg¨ü”EKµÿtLïØÚô…e«í뾨—ì¡Rž yxô¥úúð.R¸Ó¨|;ªÔ÷;™/*V1F¿,¾á­bF<¶ñ�v—lÛ„éDÌ#C˜ˆ'‰rÅMrĹ'g0[›÷H~¦ä`É_¢Úr’VVŒÒÆé¤<¦(ÏÀtR7ƒEb›”yT°€‰7PK
���U•CŒˆvÓ`��%��#���play/modules/fileauth/ScanJob.class}PËNA¬áé.‹ŠÆxpãÁÆ„51«Q80†!ËÙ	ŸåIâÁð£Œ=@ăq“©~Twue?¿Þ?�œ¡n"‰¢‰ÊöÒØO£Âºž/âf—!q¥†‚!çHO<D“¾ðŸxߥNÁQîv¹/u½n&‘Žœ©ËçöD
#Wö‹tÂ‘ÝpïNõ[É¡¢„Áì¨Èˆ©·­5:æ3ÎPyŒ¼PNDW’ÔÛž§BJåÑ…üêÂXõûz&ü¹Öœq7Ò&Î'Ò³B:‡¨Z¨¡ÊPû×Cv£¹¬ëÏk³mJŒ€VŸákG¦£}ÛQ(]ûžOÉ‘©ù[_EÓ�ÇHÐ×_L›#ܢʦÈ(&OÞÀ^—´A˜Z6ó0	­Õ�2”òìÏrk½l,ë-ïm¶',ÒՍ–	k¡ÍhÌa‡b†¸<½B€ÝoPK
���U•CÎǘ	��%��*���play/modules/fileauth/utils/MD5Crypt.class­W{PTçÿ}û¼,X!®(`BuÙe]@E4¾�EA@りԚËîe¹º/wï"5¦Å4iúŠé˦5ÆØ®Imj’v¥Ú`ß3í_ý/íLg:Ó¦L2ÓtÚ4ôz¾»wĵa:…™ïq¾s¾ó;ç;»¿üàæ4€&ü܆fD‹C\ÀqHÚh£Úè,Ň1>œ°b܆"DL˜‘ýÛjÃI<©§øpZÀÅY+³âã6,Æ'¬˜´¡Q~~ޝðI.vŽOpò“>Å5<%àÓœø>|–ŸãäÏóÕÓüÞó|x†_à_ä«/	ø2ß|…8ëW<ËUÍŠ¯[q‘¡ÈßÖÓß±«mŸŸÁÑsT“|a)òùÕ„
=ÈPÒ‹&U)ªî—Â)™Á¢¨1©e--6)QEÝÂ`tÕïg0uÄ‚t\Ö£Då¾TdXNôKÃa™ßHáýRBá{hRG•$ÃÊžxXšðEbÁTXNúF”°,¥ÔQ_JUÂI_ïöu‰‰¸J(LI‰2Tº†îƨi—¡1†òÇ\YŒ®tuwÕ:g$ɺ‰/©œ$l¬‹ŒKÈÉTXepÞ%ОRÂA9ArE‚›VT²Äìjç@˜B÷dI†¡vëð„*'›SDuµ×ÓÍF%'6:²„d•Ld¨qé°’r •PÔ	_¯œLJ!y»’“Ü|ƒ<ÎàšÇÔó§£máPŒ¶£‘ã9®*±(ñ›Üoä_WwrY‰¹!.%“'b‰ ÷†Ä`MHÑ`HŽæÃƒ¿ocl- a:‹¥¸•;²P»tѯ6ÄÃdSD
)Ûˆ•Â~URéq•Ì\þ!þ6W½ÝR:&'”‘‰½y¿¬Z˜Å‡(u(¸•¨*«\šAŒ³ÝO$Â句¹Sá	Q’öÕü*ëÑjÅs".áyR9ÀÑm¬ÍñÔy³¾;\›{¯ZþZV\ñ®ˆø¾)â>&â@v8Èpß="™aÛj_cSóšµëZÖ·nhkïØ¾£sç®®îÝ=½}{ö>´Ïß?°ÿÀÁÁCÒp („F•£Ç‘h,~<‘TSc'Æ'NZ‘q/Šx	ßq
ß&OZ+^ñ\§H\Xì2,E¹/U•ˆœ?ä^y…Á>?E¼Š×D|ßcØro÷6,o{£ˆnp+¦È€º¦:)Uë¤x‚マ›œå–ˆàu~ô‹˜Æm?Än?Ê®~,¢›o‚VŠ!’Úƒ½"ÚÑ!â§øÐ.kçÆ7ì
CÝBŠaÎ~ÍC{†Ê;Iþ‰¤*G½œ —­ÈF¦óí¥WéÝe‰§my2åzœïÂô
…
¯³ò¸¢òZÖÅwöù<ä©À¨”hÓY:h/Åãr”Òf™«ãîT­¥‚Ë]±ØU0§«þKÊR1¡bÚ¥5ª�eSÓ½ëÞ=s~É\™þÑDìoUšÕ–°
©£Z«£^¥7ëÇ$U£t%™Nêð+]]…ÛŒwAÅxÖ%6²&¡&(\sÁ9Äé…•Yµ‚¾g$ûZ µó^Ä)õ¼5YRñ V-A݉Vjb]ÚËš©ÿÉD±ÈÇSR89O6ìH?}V4Ñ÷`€k°ë´ÝRÚ·ÌÙC¤557ÅG3£Ùì¾öŠÆ²‘F‹Flƒ4ŠYlÂfš‹°[uá4LÚÙ {Úô<ŠÜÓ–+({‡1“iŠ.¶\BQܦf·¹y
:Hc•{ڬӍÍt4«F/ËR¦ ÐÖHò³€Ü°Ñ¸žÀ´ÒWÓ,!8Õ¨‘à´ ]hC?¶ã vÌ=ˆmDù€’^}’Œ3ÑÜpEƒ7`ë›4Ì,{U^Gqõbˆ>‘Aieªí–Ó[Ó3oz3°_Ïã¨ÿ¬ì†€”¡5èÃ*<¤é¬…‘ßK(vhž
èÄN’PGøºèÔÉ둎ÃO{ÍåÆMUîéË(qWû'KÏümÖl‡u€®ØO&
Ðþ ¦ª’Î
°ˆš¡å¥O3”Jœ® ‘8ø™eé"Ìœ¹6ïmÌq“…ØG³×Q]º›àñ3»cÑ×wßÂâAŠ‘ŠÛz4XHgö¾RÍì QdX1’¿×J±2@¸9*ê{ú½—H–Û´MwÏ-TÒ|_¯'ƒ%vá2V4dàt,Í êñ£Omñ8–._nz8ƒe,?žù­›øì0³ORMš€1òÑ	òÈ#¤íVâ4ý
˜³7é\IHÉ_í6¢sL+†èi¨„’¿>ŠÃZQ«ÖÑnÒIp{ÕS¨¹>Ï‹Ïä_ƒß•½“¯†´”s’—ÿÏv[æÛ}™´½@èÓ¤í*Ùø"i~‰ì¾ö?Ø}¤ Ýµì¾ý!vS³ÎÞd|ƒì."aÅCö­¸�‘ÏUÜßã±×eð€á9”yŒÙ5YÛCfVÙ…+(öí'L¡n£Éirgð‘V:M
¹…'»àçf§9wnöäyJ«úhSÕ"TQí4y‚Ý~4¤a® 5®Iá/é™?x§PŸã¼€ú
ÁtæJ¹€‰xÒ|ÉoÕvtxªEHÏüÚiâ
Œ\f‘ñ­Ëˆpî¬lYF¢Óì5Ú효%~ïu¬„Æš%¸s]XHÏ9ËÚ3)P¡xZ¥‚Shàqâ<ÙÉ¡Í^ãš)4Øíã^»E[	ãg½v‘/Ïž[oq
•뼫)Ïje-)Èjγ
³¬¥Y-yÖ¢YÖ²‚¬Ö<«-Ï*ä´s²N5ç¨ôtNáŽZý'-”ߤ°ü#ámTáªÕ¦€—Âÿ¯Ô=Þ£
ýw*™ïSšþƒ’àŸT¾þ…þq|€3éO2ƝÓW¡€«LÄk¬7Y)}=Úñ+Úÿ†-ÆïX5Þf5x—­Àûì~f`u¬˜­bæbUÌÃ`
ôïckX#ÛÊšÙ.¶Žõ±jÖÏ6²Ãl²ÍìÛÂ’l;ÏÚØEÖÁ^gÛÙ/X'{‹ídï±.C9ë6Ô°ÃfÖkèb{~¶×p„ù
6 ¥bœ:û$u ‰]ÀËðh­AÀï‘ÐW”‚¹D¥U6Qùj˜V²õ¨…±ÙÐ@Å\¦ÂqØ ’?d˜Ùy¼u5áµ^&P’BÑË…ª—‹Fª’Z–—xÜ­«¯¾FdÉÂI¼—8|7Ðxûξʂ(b2ÊÙ–±V2eN™iÄQ½Ì4☆ž!¬ÉGþPK
����V•C������������	���������íA����META-INF/þÊ��PK
���U•C½ÿíŠ���¤��������������¤+���META-INF/MANIFEST.MFPK
����U•C����������������������íAç���play/PK
����U•C������������
����������íA
��play/modules/PK
����U•C����������������������íA5��play/modules/fileauth/PK
����U•C����������������������íAi��play/modules/fileauth/utils/PK
���U•C����������������������¤£��play.pluginsPK
���U•C(�å_j
����$�����������¤Ï��play/modules/fileauth/FileAuth.classPK
���U•Cæ'È­r��p��*�����������¤{��play/modules/fileauth/FileAuthPlugin.classPK
���U•CŒˆvÓ`��%��#�����������¤5��play/modules/fileauth/ScanJob.classPK
���U•CÎǘ	��%��*�����������¤Ö��play/modules/fileauth/utils/MD5Crypt.classPK��������Ÿ����PK�����*†9DÔQ.^Þ���Þ���¯��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/routes# This file defines all module routes (Higher priority routes first)
#
# import these routes in the main app as :
# *     /                       module:play-file-auth
#
# ~~~~

GET     /?                      Module.indexPK�����*†9D1Sù*T���T���¹��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/application.confapplication.name=play-file-auth
application.mode=dev
application.secret=test
db=mem
PK�����*†9Dæ´(ÕJ���J���¹��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/dependencies.ymlself: play -> play-file-auth 0.2

require:
    - play
    - play -> securePK�����*†9DÌ;¨U¬���¬���±��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/messages# Default play-file-auth messages
# You can specialize this file for each language.
# For exemple, for french create a messages.fr file

#play-file-auth.name=play-file-authPK�����*†9D������������´��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play.pluginsPK�����*†9DˆŽ6©™��™��Ê��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/ScanJob.java/**
 * ScanJob
 * 31.07.2012
 * @author Philipp Haussleiter
 *
 */
package play.modules.fileauth;

import play.jobs.Every;
import play.jobs.Job;

/**
 * Periodically Scan of user/group files. Scan runs every 5 mins.
 * @author Philipp Haußleiter
 */
@Every("5min")
public class ScanJob extends Job {
    @Override
    public void doJob(){
        FileAuth.scanUsers();
        FileAuth.scanGroups();
    }
}
PK�����*†9DlP¨å��å��Ë��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/FileAuth.java/**
 * FileAuth 31.07.2012
 *
 * @author Philipp Haussleiter
 *
 */
package play.modules.fileauth;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import play.Logger;
import play.Play;
import play.cache.Cache;
import play.modules.fileauth.utils.MD5Crypt;

/**
 * Basic Wrapper for all FileAuth Functions.
 *
 * @author Philipp Haußleiter
 */
public class FileAuth {

    /* Cache Key for User/PasswordHash Map */
    public final static String AUTH_FILE_USERS_CACHE_KEY = "AUTH_FILE_USERS";
    /* Cache Key for Group/Users Map */
    public final static boolean IS_ENABLED = isEnabled();
    public final static String AUTH_FILE_GROUPS_CACHE_KEY = "AUTH_FILE_GROUPS";
    private final static String CACHE_TIMEOUT = "5mn";

    /**
     * Returns a Map of all Users (user/password hash).
     *
     * @return the Map.
     */
    public static Map<String, String> getUsers() {
        if (!IS_ENABLED) {
            return new HashMap<String, String>();
        }
        Map<String, String> users = Cache.get(AUTH_FILE_USERS_CACHE_KEY, HashMap.class);
        if (users == null) {
            users = scanUsers();
        }
        return users;
    }

    /**
     * Returns a Map of all Groups (groups/usernames).
     *
     * @return the Map.
     */
    public static Map<String, Set<String>> getGroups() {
        if (!IS_ENABLED) {
            return new HashMap<String, Set<String>>();
        }
        Map<String, Set<String>> groups = Cache.get(AUTH_FILE_GROUPS_CACHE_KEY, HashMap.class);
        if (groups == null) {
            groups = scanGroups();
        }
        return groups;
    }

    /**
     * Checks if a group contains a given username.
     *
     * @param group the Group to check.
     * @param user the user to check.
     * @return true if user is in group, otherwise false.
     */
    public static boolean contains(String group, String user) {
        if (!IS_ENABLED) {
            return true;
        }
        if (group == null || user == null) {
            return false;
        }
        Map<String, Set<String>> groups = getGroups();
        Set<String> groupUsers = groups.get(group);
        if (groupUsers == null) {
            return false;
        }
        return groupUsers.contains(user);
    }

    /**
     * Validates an user with a given password agains the user/password hash
     * mapping.
     *
     * @param user the given user.
     * @param password the given password (clear text).
     * @return true if validation okay, otherwise false.
     */
    public static boolean validate(String user, String password) {
        if (!IS_ENABLED) {
            return true;
        }
        if (user == null || password == null) {
            return false;
        }
        Map<String, String> users = getUsers();
        String encryptedPass = users.get(user);
        if (encryptedPass == null) {
            return false;
        }
        return MD5Crypt.verifyPassword(password, encryptedPass);
    }

    /**
     * Rescans the users file.
     *
     * @return the updated Map of users.
     */
    public static Map<String, String> scanUsers() {
        String fileName = Play.configuration.getProperty("authfile.users.path");
        String delimeter1 = Play.configuration.getProperty("authfile.users.delimeter", ":");
        Logger.info("@" + System.currentTimeMillis() + " Scanning Users in " + fileName);
        Map<String, String> users = new HashMap<String, String>();
        File file = new File(fileName);
        if (file == null || !file.exists() || !file.isFile()) {
            Logger.warn(fileName + " is not a valid Auth-File!");
        }
        try {
            BufferedReader br = new BufferedReader(new FileReader(file));
            String line;
            String parts[];
            while ((line = br.readLine()) != null) {
                parts = line.split(delimeter1);
                /*
                 * Matches
                 * user:hash
                 * user:hash:uid: ...
                 */
                if (parts.length > 1) {
                    users.put(parts[0].trim(), parts[1].trim());
                }
            }
            Cache.set(AUTH_FILE_USERS_CACHE_KEY, users, CACHE_TIMEOUT);
        } catch (FileNotFoundException ex) {
            Logger.error(ex.getLocalizedMessage(), ex);
        } catch (IOException ex) {
            Logger.error(ex.getLocalizedMessage(), ex);
        }
        Logger.info("found " + users.size() + " mappings");
        return users;
    }

    /**
     * Rescans the groups file.
     *
     * @return the updated Map of groups.
     */
    public static Map<String, Set<String>> scanGroups() {
        String fileName = Play.configuration.getProperty("authfile.groups.path");
        String delimeter1 = Play.configuration.getProperty("authfile.users.delimeter", ":");
        String delimeter2 = Play.configuration.getProperty("authfile.groups.delimeter", " ");
        Logger.info("@" + System.currentTimeMillis() + " Scanning Groups in " + fileName);
        Map<String, Set<String>> groups = new HashMap<String, Set<String>>();
        File file = new File(fileName);
        if (file == null || !file.exists() || !file.isFile()) {
            Logger.warn(fileName + " is not a valid Auth-File!");
        }
        try {
            BufferedReader br = new BufferedReader(new FileReader(file));
            String line;
            String parts[];
            String userParts[];
            Set<String> users;
            while ((line = br.readLine()) != null) {
                parts = line.split(delimeter1);
                if (parts.length > 1) {
                    if (parts.length > 2) {
                        userParts = parts[parts.length - 1].split(delimeter2);
                    } else {
                        userParts = parts[1].split(delimeter2);
                    }
                    if (userParts.length > 0) {
                        users = new HashSet<String>();
                        for (String user : userParts) {
                            users.add(user.trim());
                        }
                        groups.put(parts[0].trim(), users);
                    }
                }
            }
            Cache.set(AUTH_FILE_GROUPS_CACHE_KEY, groups, CACHE_TIMEOUT);
        } catch (FileNotFoundException ex) {
            Logger.error(ex.getLocalizedMessage(), ex);
        } catch (IOException ex) {
            Logger.error(ex.getLocalizedMessage(), ex);
        }
        Logger.info("found " + groups.size() + " mappings");
        return groups;
    }

    private static boolean isEnabled() {
        if (Play.configuration.getProperty("authfile.users.path") == null
                || Play.configuration.getProperty("authfile.groups.path") == null) {
            Logger.info("FileAuth not enabled. authfile.users.path or authfile.groups.path not set!");
            return false;
        }
        return true;

    }
}
PK�����*†9D4ÿÑ^º��º��Ñ��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/FileAuthPlugin.java/**
 * FileAuthPlugin
 * 31.07.2012
 * @author Philipp Haussleiter
 *
 */
package play.modules.fileauth;

import play.PlayPlugin;

/**
 * Entry Class for first file scan.
 * @author Philipp Haußleiter
 */
public class FileAuthPlugin extends PlayPlugin {

    /**
     * Trigger to scan the files for the first Time.
     */
    @Override
    public void onApplicationStart() {
        ScanJob job = new ScanJob();
        job.now();
    }
}
PK�����*†9DYí΁1��1��Ñ��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/utils/MD5Crypt.java/*

MD5Crypt.java

Created: 3 November 1999

Java Port By: Jonathan Abbey, jonabbey@arlut.utexas.edu

Original C Version:
----------------------------------------------------------------------------
"THE BEER-WARE LICENSE" (Revision 42):
<phk@login.dknet.dk> wrote this file.  As long as you retain this notice you
can do whatever you want with this stuff. If we meet some day, and you think
this stuff is worth it, you can buy me a beer in return.   Poul-Henning Kamp
----------------------------------------------------------------------------

This Java Port is  

Copyright (c) 1999-2010 The University of Texas at Austin.

All rights reserved.

Redistribution and use in source and binary form are permitted
provided that distributions retain this entire copyright notice
and comment. Neither the name of the University nor the names of
its contributors may be used to endorse or promote products
derived from this software without specific prior written
permission. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE.

 */
package play.modules.fileauth.utils;

import java.security.MessageDigest;

/*------------------------------------------------------------------------------
class
MD5Crypt

------------------------------------------------------------------------------*/
/**
 * This class defines a method,
 * {@link MD5Crypt#crypt(java.lang.String, java.lang.String) crypt()}, which
 * takes a password and a salt string and generates an OpenBSD/FreeBSD/Linux-compatible
 * md5-encoded password entry.
 */
public final class MD5Crypt {

    /**
     * Command line test rig.
     */
    static public void main(String argv[]) {
        if ((argv.length < 1) || (argv.length > 3)) {
            System.err.println("Usage: MD5Crypt [-apache] password salt");
            System.exit(1);
        }

        if (argv.length == 3) {
            System.err.println(MD5Crypt.apacheCrypt(argv[1], argv[2]));
        } else if (argv.length == 2) {
            System.err.println(MD5Crypt.crypt(argv[0], argv[1]));
        } else {
            System.err.println(MD5Crypt.crypt(argv[0]));
        }

        System.exit(0);
    }
    public static final String SALTCHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
    public static final String itoa64 = "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";

    public static final String to64(long v, int size) {
        StringBuilder result = new StringBuilder();

        while (--size >= 0) {
            result.append(itoa64.charAt((int) (v & 0x3f)));
            v >>>= 6;
        }

        return result.toString();
    }

    public static final void clearbits(byte bits[]) {
        for (int i = 0; i < bits.length; i++) {
            bits[i] = 0;
        }
    }

    /**
     * convert an encoded unsigned byte value into a int
     * with the unsigned value.
     */
    public static final int bytes2u(byte inp) {
        return (int) inp & 0xff;
    }

    static private MessageDigest getMD5() {
        try {
            return MessageDigest.getInstance("MD5");
        } catch (java.security.NoSuchAlgorithmException ex) {
            throw new RuntimeException(ex);
        }
    }

    /**
     * <p>This method actually generates a OpenBSD/FreeBSD/Linux PAM compatible
     * md5-encoded password hash from a plaintext password and a
     * salt.</p>
     *
     * <p>The resulting string will be in the form '$1$&lt;salt&gt;$&lt;hashed mess&gt;</p>
     *
     * @param password Plaintext password
     *
     * @return An OpenBSD/FreeBSD/Linux-compatible md5-hashed password field.
     */
    public static final String crypt(String password) {
        StringBuilder salt = new StringBuilder();
        java.util.Random randgen = new java.util.Random();

        /* -- */

        while (salt.length() < 8) {
            int index = (int) (randgen.nextFloat() * SALTCHARS.length());
            salt.append(SALTCHARS.substring(index, index + 1));
        }

        return MD5Crypt.crypt(password, salt.toString());
    }

    /**
     * <p>This method actually generates a OpenBSD/FreeBSD/Linux PAM compatible
     * md5-encoded password hash from a plaintext password and a
     * salt.</p>
     *
     * <p>The resulting string will be in the form '$1$&lt;salt&gt;$&lt;hashed mess&gt;</p>
     *
     * @param password Plaintext password
     * @param salt A short string to use to randomize md5.  May start with $1$, which
     *             will be ignored.  It is explicitly permitted to pass a pre-existing
     *             MD5Crypt'ed password entry as the salt.  crypt() will strip the salt
     *             chars out properly.
     *
     * @return An OpenBSD/FreeBSD/Linux-compatible md5-hashed password field.
     */
    public static final String crypt(String password, String salt) {
        return MD5Crypt.crypt(password, salt, "$1$");
    }

    /**
     * <p>This method generates an Apache MD5 compatible
     * md5-encoded password hash from a plaintext password and a
     * salt.</p>
     *
     * <p>The resulting string will be in the form '$apr1$&lt;salt&gt;$&lt;hashed mess&gt;</p>
     *
     * @param password Plaintext password
     *
     * @return An Apache-compatible md5-hashed password string.
     */
    public static final String apacheCrypt(String password) {
        StringBuilder salt = new StringBuilder();
        java.util.Random randgen = new java.util.Random();

        /* -- */

        while (salt.length() < 8) {
            int index = (int) (randgen.nextFloat() * SALTCHARS.length());
            salt.append(SALTCHARS.substring(index, index + 1));
        }

        return MD5Crypt.apacheCrypt(password, salt.toString());
    }

    /**
     * <p>This method actually generates an Apache MD5 compatible
     * md5-encoded password hash from a plaintext password and a
     * salt.</p>
     *
     * <p>The resulting string will be in the form '$apr1$&lt;salt&gt;$&lt;hashed mess&gt;</p>
     *
     * @param password Plaintext password
     * @param salt A short string to use to randomize md5.  May start with $apr1$, which
     *             will be ignored.  It is explicitly permitted to pass a pre-existing
     *             MD5Crypt'ed password entry as the salt.  crypt() will strip the salt
     *             chars out properly.
     *
     * @return An Apache-compatible md5-hashed password string.
     */
    public static final String apacheCrypt(String password, String salt) {
        return MD5Crypt.crypt(password, salt, "$apr1$");
    }

    /**
     * <p>This method actually generates md5-encoded password hash from
     * a plaintext password, a salt, and a magic string.</p>
     *
     * <p>There are two magic strings that make sense to use here.. '$1$' is the
     * magic string used by the FreeBSD/Linux/OpenBSD MD5Crypt algorithm, and
     * '$apr1$' is the magic string used by the Apache MD5Crypt algorithm.</p>
     *
     * <p>The resulting string will be in the form '&lt;magic&gt;&lt;salt&gt;$&lt;hashed mess&gt;</p>
     *
     * @param password Plaintext password
     * @param salt A short string to use to randomize md5.  May start
     * with the magic string, which will be ignored.  It is explicitly
     * permitted to pass a pre-existing MD5Crypt'ed password entry as
     * the salt.  crypt() will strip the salt chars out properly.
     * @param magic Either "$apr1$" or "$1$", which controls whether we
     * are doing Apache-style or FreeBSD-style md5Crypt.
     *
     * @return An md5-hashed password string.
     */
    public static final String crypt(String password, String salt, String magic) {
        /* This string is magic for this algorithm.  Having it this way,
         * we can get get better later on */

        byte finalState[];
        MessageDigest ctx, ctx1;
        long l;

        /* -- */

        /* Refine the Salt first */

        /* If it starts with the magic string, then skip that */

        if (salt.startsWith(magic)) {
            salt = salt.substring(magic.length());
        }

        /* It stops at the first '$', max 8 chars */

        if (salt.indexOf('$') != -1) {
            salt = salt.substring(0, salt.indexOf('$'));
        }

        if (salt.length() > 8) {
            salt = salt.substring(0, 8);
        }

        ctx = getMD5();

        ctx.update(password.getBytes());    // The password first, since that is what is most unknown
        ctx.update(magic.getBytes());    // Then our magic string
        ctx.update(salt.getBytes());    // Then the raw salt

        /* Then just as many characters of the MD5(pw,salt,pw) */

        ctx1 = getMD5();
        ctx1.update(password.getBytes());
        ctx1.update(salt.getBytes());
        ctx1.update(password.getBytes());
        finalState = ctx1.digest();

        for (int pl = password.length(); pl > 0; pl -= 16) {
            ctx.update(finalState, 0, pl > 16 ? 16 : pl);
        }

        /* the original code claimed that finalState was being cleared
        to keep dangerous bits out of memory, but doing this is also
        required in order to get the right output. */

        clearbits(finalState);

        /* Then something really weird... */

        for (int i = password.length(); i != 0; i >>>= 1) {
            if ((i & 1) != 0) {
                ctx.update(finalState, 0, 1);
            } else {
                ctx.update(password.getBytes(), 0, 1);
            }
        }

        finalState = ctx.digest();

        /*
         * and now, just to make sure things don't run too fast
         * On a 60 Mhz Pentium this takes 34 msec, so you would
         * need 30 seconds to build a 1000 entry dictionary...
         *
         * (The above timings from the C version)
         */

        for (int i = 0; i < 1000; i++) {
            ctx1.reset();

            if ((i & 1) != 0) {
                ctx1.update(password.getBytes());
            } else {
                ctx1.update(finalState, 0, 16);
            }

            if ((i % 3) != 0) {
                ctx1.update(salt.getBytes());
            }

            if ((i % 7) != 0) {
                ctx1.update(password.getBytes());
            }

            if ((i & 1) != 0) {
                ctx1.update(finalState, 0, 16);
            } else {
                ctx1.update(password.getBytes());
            }

            finalState = ctx1.digest();
        }

        /* Now make the output string */

        StringBuilder result = new StringBuilder();

        result.append(magic);
        result.append(salt);
        result.append("$");

        l = (bytes2u(finalState[0]) << 16) | (bytes2u(finalState[6]) << 8) | bytes2u(finalState[12]);
        result.append(to64(l, 4));

        l = (bytes2u(finalState[1]) << 16) | (bytes2u(finalState[7]) << 8) | bytes2u(finalState[13]);
        result.append(to64(l, 4));

        l = (bytes2u(finalState[2]) << 16) | (bytes2u(finalState[8]) << 8) | bytes2u(finalState[14]);
        result.append(to64(l, 4));

        l = (bytes2u(finalState[3]) << 16) | (bytes2u(finalState[9]) << 8) | bytes2u(finalState[15]);
        result.append(to64(l, 4));

        l = (bytes2u(finalState[4]) << 16) | (bytes2u(finalState[10]) << 8) | bytes2u(finalState[5]);
        result.append(to64(l, 4));

        l = bytes2u(finalState[11]);
        result.append(to64(l, 2));

        /* Don't leave anything around in vm they could use. */
        clearbits(finalState);

        return result.toString();
    }

    /**
     * This method tests a plaintext password against a md5Crypt'ed hash and returns
     * true if the password matches the hash.
     *
     * This method will work properly whether the hashtext was crypted
     * using the default FreeBSD md5Crypt algorithm or the Apache
     * md5Crypt variant.
     *
     * @param plaintextPass The plaintext password text to test.
     * @param md5CryptText The Apache or FreeBSD-md5Crypted hash used to authenticate the plaintextPass.
     */
    public static final boolean verifyPassword(String plaintextPass, String md5CryptText) {
        if (md5CryptText.startsWith("$1$")) {
            return md5CryptText.equals(MD5Crypt.crypt(plaintextPass, md5CryptText));
        } else if (md5CryptText.startsWith("$apr1$")) {
            return md5CryptText.equals(MD5Crypt.apacheCrypt(plaintextPass, md5CryptText));
        } else {
            throw new RuntimeException("Bad md5CryptText");
        }
    }
}
PK�����*†9D—5Kùõ��õ��É��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/app/controllers/AuthFileSecurity.java/**
 * AuthFileSecurity
 * 31.07.2012
 * @author Philipp Haussleiter
 *
 */
package controllers;

import java.util.Map;
import play.modules.fileauth.FileAuth;

/**
 * This Class provides basice Security Functions for the Play! Security Plugin.
 * @author Philipp Haußleiter
 * <p>
 * Usage:
 * @With(Secure.class)
 * public class Application extends Controller {
 * ...
 * }
 *
 * </p>
 */
public class AuthFileSecurity extends Secure.Security {

    /**
     * Authentify an user against the given AuthFile.
     * @param username the given username.
     * @param password the given password.
     * @return true if username and password matches, otherwise false.
     */
    public static boolean authentify(String username, String password) {
        Map<String,String> users = FileAuth.getUsers();
        String userPassword = users.get(username.toLowerCase());
        return userPassword.equals(password);
    }

    /**
     * Checks if the current user (that is loged in) has the profile (e.g. is in the group).
     * @param profile
     * @return true if the current user has the profile, otherwise false.
     */
    public static boolean check(String profile) {
        String user = connected();
        return FileAuth.contains(profile, user);
    }
}
PK�����*†9D&ÿ‰è¤��¤��Å��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/documentation/manual/home.textileh1. {module name}

p(note). Write your module documentation in this file, possibly linking to other Textile files, and delete these notes when you are finished.

p(note). Start with a clear statement of what the module is and what it is for. Link to any third-party libraries that the module is based on.

p(note). Briefly describe why you might want to use this module in a Play application.

h2. Sample application

p(note). Your module should contain a sample app in the @sample@ directory that demonstrates the module. Describe how to run the demo here.

h2. Getting started

p(note). Describe any installation that is required, beyond adding and resolving the module dependency.

h2. Configuration

p(note). List any configuration options that the module uses, with an @h3.@ heading for each one.

h2. Usage

p(note). Explain how to use the module, and describe any routes, controllers, models or views that the module provides.

h2. Tags

p(note). List any tags the module provides, with an @h3.@ heading for each one. Include the tags’ arguments.

h2. Commands

p(note). List any commands the module provides, with an @h3.@ heading for each one. Include the commands’ options.
PK�����*†9D´šü¯��¯��Þ��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/public/images/favicon.png‰PNG

���
IHDR���������óÿa���tEXtSoftware�Adobe ImageReadyqÉe<��QIDATxÚ”SËNA=U]5]Ý=ï1agŒhf£+0ˆ‰Á †n\¹gãÒ¿p#ì4¢?`t¯	WFƒH$H$dŒ™Gw•·›o÷M×+çœ{O53Æàú�Œ^sÑIšéJáü½Bnà18­ÃC_­fÛG©8ˆk#7€h—BÈ,KÀMª±SçrÕMwav©^›i4v<‹	ü+"�ÎmJÛQea+¤Žed×§–¼zYßü2(¬cŒÐFp¡ìÓ`
Aƒ›ÈBåý¡5ÿÍܧ·™±¨"«€¤úeV(§æÐ<±!D‰.7³é®Ì.®×fÚ~Ë#šÃ�¶HUÊÍ84ÞÍ@<x™XWcê}}þÅ÷­oUÉåáHÛ)	åqMìûεVˆ©4…øðòÎÛ¹•úÒ-?ð#�±«@€ÕÇe<êGhíÁ—8ÙšêéÛO¶?Ó^æ]`4Ùh».<b$ߏè¶6­vùD/&‡oΧ¼´¿§€qeK?îE—å/fzš~Žt1^šX½\{äż´µ¶Ð·”wÒ„è}~_ûHû`~`ûzÿ•gÅô‰û´üúO‚ÀN¯T‰È1”²OöàjåRm¨xvšŽ=¥Ü9XZÀ¥ªXvœic£Au†r'Ê£«ãå’ë<¤#Ÿ;]å@:‰J`)úQ8ªÝ}[“ý£Ï‹™®Cr;ð˜“ëNå1Y©
Êå¡çk_7.üj5ïÒ¸Îÿ'0�Û¤û»ý
����IEND®B`‚PK�����*†9Dä |;f�f�ë��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/public/javascripts/jquery-1.6.4.min.js/*! jQuery v1.6.4 http://jquery.com/ | http://jquery.org/license */
(function(a,b){function cu(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cr(a){if(!cg[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ch||(ch=c.createElement("iframe"),ch.frameBorder=ch.width=ch.height=0),b.appendChild(ch);if(!ci||!ch.createElement)ci=(ch.contentWindow||ch.contentDocument).document,ci.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),ci.close();d=ci.createElement(a),ci.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ch)}cg[a]=e}return cg[a]}function cq(a,b){var c={};f.each(cm.concat.apply([],cm.slice(0,b)),function(){c[this]=a});return c}function cp(){cn=b}function co(){setTimeout(cp,0);return cn=f.now()}function cf(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ce(){try{return new a.XMLHttpRequest}catch(b){}}function b$(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function bZ(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function bY(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bA.test(a)?d(a,e):bY(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)bY(a+"["+e+"]",b[e],c,d);else d(a,b)}function bX(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function bW(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bP,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=bW(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=bW(a,c,d,e,"*",g));return l}function bV(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bL),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function by(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bt:bu;if(d>0){c!=="border"&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0});return d+"px"}d=bv(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+this))||0)});return d+"px"}function bl(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bd,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bk(a){f.nodeName(a,"input")?bj(a):"getElementsByTagName"in a&&f.grep(a.getElementsByTagName("input"),bj)}function bj(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bi(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function bh(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bg(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;e=e[c]=f.extend({},d);if(g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;i<j;i++)f.event.add(b,h+(g[h][i].namespace?".":"")+g[h][i].namespace,g[h][i],g[h][i].data)}}}}function bf(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function V(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(Q.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function U(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function M(a,b){return(a&&a!=="*"?a+".":"")+b.replace(y,"`").replace(z,"&")}function L(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;i<s.length;i++)g=s[i],g.origType.replace(w,"")===a.type?q.push(g.selector):s.splice(i--,1);e=f(a.target).closest(q,a.currentTarget);for(j=0,k=e.length;j<k;j++){m=e[j];for(i=0;i<s.length;i++){g=s[i];if(m.selector===g.selector&&(!n||n.test(g.namespace))&&!m.elem.disabled){h=m.elem,d=null;if(g.preType==="mouseenter"||g.preType==="mouseleave")a.type=g.preType,d=f(a.relatedTarget).closest(g.selector)[0],d&&f.contains(h,d)&&(d=h);(!d||d!==h)&&p.push({elem:h,handleObj:g,level:m.level})}}}for(j=0,k=p.length;j<k;j++){e=p[j];if(c&&e.level>c)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function J(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function D(){return!0}function C(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function K(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(K,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=/-([a-z]|[0-9])/ig,x=/^-ms-/,y=function(a,b){return(b+"").toUpperCase()},z=d.userAgent,A,B,C,D=Object.prototype.toString,E=Object.prototype.hasOwnProperty,F=Array.prototype.push,G=Array.prototype.slice,H=String.prototype.trim,I=Array.prototype.indexOf,J={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6.4",length:0,size:function(){return this.length},toArray:function(){return G.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?F.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),B.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(G.apply(this,arguments),"slice",G.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:F,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;B.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!B){B=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",C,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",C),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&K()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):J[D.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!E.call(a,"constructor")&&!E.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||E.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(x,"ms-").replace(w,y)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:H?function(a){return a==null?"":H.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?F.call(c,a):e.merge(c,a)}return c},inArray:function(a,b){if(!b)return-1;if(I)return I.call(b,a);for(var c=0,d=b.length;c<d;c++)if(b[c]===a)return c;return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=G.call(arguments,2),g=function(){return a.apply(c,f.concat(G.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=s.exec(a)||t.exec(a)||u.exec(a)||a.indexOf("compatible")<0&&v.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){J["[object "+b+"]"]=b.toLowerCase()}),A=e.uaMatch(z),A.browser&&(e.browser[A.browser]=!0,e.browser.version=A.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?C=function(){c.removeEventListener("DOMContentLoaded",C,!1),e.ready()}:c.attachEvent&&(C=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",C),e.ready())});return e}(),g="done fail isResolved isRejected promise then always pipe".split(" "),h=[].slice;f.extend({_Deferred:function(){var a=[],b,c,d,e={done:function(){if(!d){var c=arguments,g,h,i,j,k;b&&(k=b,b=0);for(g=0,h=c.length;g<h;g++)i=c[g],j=f.type(i),j==="array"?e.done.apply(e,i):j==="function"&&a.push(i);k&&e.resolveWith(k[0],k[1])}return this},resolveWith:function(e,f){if(!d&&!b&&!c){f=f||[],c=1;try{while(a[0])a.shift().apply(e,f)}finally{b=[e,f],c=0}}return this},resolve:function(){e.resolveWith(this,arguments);return this},isResolved:function(){return!!c||!!b},cancel:function(){d=1,a=[];return this}};return e},Deferred:function(a){var b=f._Deferred(),c=f._Deferred(),d;f.extend(b,{then:function(a,c){b.done(a).fail(c);return this},always:function(){return b.done.apply(b,arguments).fail.apply(this,arguments)},fail:c.done,rejectWith:c.resolveWith,reject:c.resolve,isRejected:c.isResolved,pipe:function(a,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[c,"reject"]},function(a,c){var e=c[0],g=c[1],h;f.isFunction(e)?b[a](function(){h=e.apply(this,arguments),h&&f.isFunction(h.promise)?h.promise().then(d.resolve,d.reject):d[g+"With"](this===b?d:this,[h])}):b[a](d[g])})}).promise()},promise:function(a){if(a==null){if(d)return d;d=a={}}var c=g.length;while(c--)a[g[c]]=b[g[c]];return a}}),b.done(c.cancel).fail(b.cancel),delete b.cancel,a&&a.call(b,b);return b},when:function(a){function i(a){return function(c){b[a]=arguments.length>1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c<d;c++)b[c]&&f.isFunction(b[c].promise)?b[c].promise().then(i(c),g.reject):--e;e||g.resolveWith(g,b)}else g!==a&&g.resolveWith(g,d?[a]:[]);return g.promise()}}),f.support=function(){var a=c.createElement("div"),b=c.documentElement,d,e,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;a.setAttribute("className","t"),a.innerHTML="   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55$/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue=i.value==="t",i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.firstChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},m&&f.extend(p,{position:"absolute",left:"-1000px",top:"-1000px"});for(t in p)o.style[t]=p[t];o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,k.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="<div style='width:4px;'></div>",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",q=a.getElementsByTagName("td"),u=q[0].offsetHeight===0,q[0].style.display="",q[1].style.display="none",k.reliableHiddenOffsets=u&&q[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",a.appendChild(j),k.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0),o.innerHTML="",n.removeChild(o);if(a.attachEvent)for(t in{submit:1,change:1,focusin:1})s="on"+t,u=s in a,u||(a.setAttribute(s,"return;"),u=typeof a[s]=="function"),k[t+"Bubbles"]=u;o=l=g=h=m=j=a=i=null;return k}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i=f.expando,j=typeof c=="string",k=a.nodeType,l=k?f.cache:a,m=k?a[f.expando]:a[f.expando]&&f.expando;if((!m||e&&m&&l[m]&&!l[m][i])&&j&&d===b)return;m||(k?a[f.expando]=m=++f.uuid:m=f.expando),l[m]||(l[m]={},k||(l[m].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?l[m][i]=f.extend(l[m][i],c):l[m]=f.extend(l[m],c);g=l[m],e&&(g[i]||(g[i]={}),g=g[i]),d!==b&&(g[f.camelCase(c)]=d);if(c==="events"&&!g[c])return g[i]&&g[i].events;j?(h=g[c],h==null&&(h=g[f.camelCase(c)])):h=g;return h}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e=f.expando,g=a.nodeType,h=g?f.cache:a,i=g?a[f.expando]:f.expando;if(!h[i])return;if(b){d=c?h[i][e]:h[i];if(d){d[b]||(b=f.camelCase(b)),delete d[b];if(!l(d))return}}if(c){delete h[i][e];if(!l(h[i]))return}var j=h[i][e];f.support.deleteExpando||!h.setInterval?delete h[i]:h[i]=null,j?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=j):g&&(f.support.deleteExpando?delete a[f.expando]:a.removeAttribute?a.removeAttribute(f.expando):a[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h<i;h++)g=e[h].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),k(this[0],g,d[g]))}}return d}if(typeof a=="object")return this.each(function(){f.data(this,a)});var j=a.split(".");j[1]=j[1]?"."+j[1]:"";if(c===b){d=this.triggerHandler("getData"+j[1]+"!",[j[0]]),d===b&&this.length&&(d=f.data(this[0],a),d=k(this[0],a,d));return d===b&&j[1]?this.data(j[0]):d}return this.each(function(){var b=f(this),d=[j[0],c];b.triggerHandler("setData"+j[1]+"!",d),f.data(this,a,c),b.triggerHandler("changeData"+j[1]+"!",d)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,c){a&&(c=(c||"fx")+"mark",f.data(a,c,(f.data(a,c,b,!0)||0)+1,!0))},_unmark:function(a,c,d){a!==!0&&(d=c,c=a,a=!1);if(c){d=d||"fx";var e=d+"mark",g=a?0:(f.data(c,e,b,!0)||1)-1;g?f.data(c,e,g,!0):(f.removeData(c,e,!0),m(c,d,"mark"))}},queue:function(a,c,d){if(a){c=(c||"fx")+"queue";var e=f.data(a,c,b,!0);d&&(!e||f.isArray(d)?e=f.data(a,c,f.makeArray(d),!0):e.push(d));return e||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e;d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),d.call(a,function(){f.dequeue(a,b)})),c.length||(f.removeData(a,b+"queue",!0),m(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(){var c=this;setTimeout(function(){f.dequeue(c,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f._Deferred(),!0))h++,l.done(m);m();return d.promise()}});var n=/[\n\t\r]/g,o=/\s+/,p=/\r/g,q=/^(?:button|input)$/i,r=/^(?:button|input|object|select|textarea)$/i,s=/^a(?:rea)?$/i,t=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,u,v;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(o);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(o);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(n," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(o);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ";for(var c=0,d=this.length;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(n," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;d=e.value;return typeof d=="string"?d.replace(p,""):d==null?"":d}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c=a.selectedIndex,d=[],e=a.options,g=a.type==="select-one";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h<i;h++){var j=e[h];if(j.selected&&(f.support.optDisabled?!j.disabled:j.getAttribute("disabled")===null)&&(!j.parentNode.disabled||!f.nodeName(j.parentNode,"optgroup"))){b=f(j).val();if(g)return b;d.push(b)}}if(g&&!d.length&&e.length)return f(e[c]).val();return d},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);j&&(c=f.attrFix[c]||c,i=f.attrHooks[c],i||(t.test(c)?i=v:u&&(i=u)));if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j&&(h=i.get(a,c))!==null)return h;h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.attr(a,b,""),a.removeAttribute(b),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(u&&f.nodeName(a,"button"))return u.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(u&&f.nodeName(a,"button"))return u.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);i&&(c=f.propFix[c]||c,h=f.propHooks[c]);return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==null?g:a[c]},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabIndex=f.propHooks.tabIndex,v={get:function(a,c){var d;return f.prop(a,c)===!0||(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},f.support.getSetAttribute||(u=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==""?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var w=/\.(.*)$/,x=/^(?:textarea|input|select)$/i,y=/\./g,z=/ /g,A=/[^\w\s.|`]/g,B=function(a){return a.replace(A,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=C;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=C);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),B).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j<p.length;j++){q=p[j];if(l||n.test(q.namespace))f.event.remove(a,r,q.handler,j),p.splice(j--,1)}continue}o=f.event.special[h]||{};for(j=e||0;j<p.length;j++){q=p[j];if(d.guid===q.guid){if(l||n.test(q.namespace))e==null&&p.splice(j--,1),o.remove&&o.remove.call(a,q);if(e!=null)break}}if(p.length===0||e!=null&&p.length===1)(!o.teardown||o.teardown.call(a,m)===!1)&&f.removeEvent(a,h,s.handle),g=null,delete 
t[h]}if(f.isEmptyObject(t)){var u=s.handle;u&&(u.elem=null),delete s.events,delete s.handle,f.isEmptyObject(s)&&f.removeData(a,b,!0)}}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){var h=c.type||c,i=[],j;h.indexOf("!")>=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d!=null?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h<i;h++){var j=d[h];if(e||c.namespace_re.test(j.namespace)){c.handler=j.handler,c.data=j.data,c.handleObj=j;var k=j.handler.apply(this,g);k!==b&&(c.result=k,k===!1&&(c.preventDefault(),c.stopPropagation()));if(c.isImmediatePropagationStopped())break}}return c.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(a){if(a[f.expando])return a;var d=a;a=f.Event(d);for(var e=this.props.length,g;e;)g=this.props[--e],a[g]=d[g];a.target||(a.target=a.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),!a.relatedTarget&&a.fromElement&&(a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement);if(a.pageX==null&&a.clientX!=null){var h=a.target.ownerDocument||c,i=h.documentElement,j=h.body;a.pageX=a.clientX+(i&&i.scrollLeft||j&&j.scrollLeft||0)-(i&&i.clientLeft||j&&j.clientLeft||0),a.pageY=a.clientY+(i&&i.scrollTop||j&&j.scrollTop||0)-(i&&i.clientTop||j&&j.clientTop||0)}a.which==null&&(a.charCode!=null||a.keyCode!=null)&&(a.which=a.charCode!=null?a.charCode:a.keyCode),!a.metaKey&&a.ctrlKey&&(a.metaKey=a.ctrlKey),!a.which&&a.button!==b&&(a.which=a.button&1?1:a.button&2?3:a.button&4?2:0);return a},guid:1e8,proxy:f.proxy,special:{ready:{setup:f.bindReady,teardown:f.noop},live:{add:function(a){f.event.add(this,M(a.origType,a.selector),f.extend({},a,{handler:L,guid:a.handler.guid}))},remove:function(a){f.event.remove(this,M(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}}},f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!this.preventDefault)return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?D:C):this.type=a,b&&f.extend(this,b),this.timeStamp=f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=D;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=D;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=D,this.stopPropagation()},isDefaultPrevented:C,isPropagationStopped:C,isImmediatePropagationStopped:C};var E=function(a){var b=a.relatedTarget,c=!1,d=a.type;a.type=a.data,b!==this&&(b&&(c=f.contains(this,b)),c||(f.event.handle.apply(this,arguments),a.type=d))},F=function(a){a.type=a.data,f.event.handle.apply(this,arguments)};f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={setup:function(c){f.event.add(this,b,c&&c.selector?F:E,a)},teardown:function(a){f.event.remove(this,b,a&&a.selector?F:E)}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(a,b){if(!f.nodeName(this,"form"))f.event.add(this,"click.specialSubmit",function(a){var b=a.target,c=f.nodeName(b,"input")||f.nodeName(b,"button")?b.type:"";(c==="submit"||c==="image")&&f(b).closest("form").length&&J("submit",this,arguments)}),f.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,c=f.nodeName(b,"input")||f.nodeName(b,"button")?b.type:"";(c==="text"||c==="password")&&f(b).closest("form").length&&a.keyCode===13&&J("submit",this,arguments)});else return!1},teardown:function(a){f.event.remove(this,".specialSubmit")}});if(!f.support.changeBubbles){var G,H=function(a){var b=f.nodeName(a,"input")?a.type:"",c=a.value;b==="radio"||b==="checkbox"?c=a.checked:b==="select-multiple"?c=a.selectedIndex>-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},I=function(c){var d=c.target,e,g;if(!!x.test(d.nodeName)&&!d.readOnly){e=f._data(d,"_change_data"),g=H(d),(c.type!=="focusout"||d.type!=="radio")&&f._data(d,"_change_data",g);if(e===b||g===e)return;if(e!=null||g)c.type="change",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:I,beforedeactivate:I,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&I.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&I.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",H(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in G)f.event.add(this,c+".specialChange",G[c]);return x.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return x.test(this.nodeName)}},G=f.event.special.change.filters,G.focus=G.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i<j;i++)f.event.add(this[i],a,g,d);return this}}),f.fn.extend({unbind:function(a,b){if(typeof a=="object"&&!a.preventDefault)for(var c in a)this.unbind(c,a[c]);else for(var d=0,e=this.length;d<e;d++)f.event.remove(this[d],a,b);return this},delegate:function(a,b,c,d){return this.live(b,c,d,a)},undelegate:function(a,b,c){return arguments.length===0?this.unbind("live"):this.die(b,null,c,a)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f.data(this,"lastToggle"+a.guid)||0)%d;f.data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var K={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};f.each(["live","die"],function(a,c){f.fn[c]=function(a,d,e,g){var h,i=0,j,k,l,m=g||this.selector,n=g?this:f(this.context);if(typeof a=="object"&&!a.preventDefault){for(var o in a)n[c](o,d,a[o],m);return this}if(c==="die"&&!a&&g&&g.charAt(0)==="."){n.unbind(g);return this}if(d===!1||f.isFunction(d))e=d||C,d=b;a=(a||"").split(" ");while((h=a[i++])!=null){j=w.exec(h),k="",j&&(k=j[0],h=h.replace(w,""));if(h==="hover"){a.push("mouseenter"+k,"mouseleave"+k);continue}l=h,K[h]?(a.push(K[h]+k),h=h+k):h=(K[h]||h)+k;if(c==="live")for(var p=0,q=n.length;p<q;p++)f.event.add(n[p],"live."+M(h,m),{data:d,selector:m,handler:e,origType:h,origHandler:e,preType:l});else n.unbind("live."+M(h,m),e)}return this}}),f.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".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}if(i.nodeType===1){f||(i.sizcache=c,i.sizset=g);if(typeof b!="string"){if(i===b){j=!0;break}}else if(k.filter(b,[i]).length>0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}i.nodeType===1&&!f&&(i.sizcache=c,i.sizset=g);if(i.nodeName.toLowerCase()===b){j=i;break}i=i[a]}d[g]=j}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},k.matches=function(a,b){return k(a,null,null,b)},k.matchesSelector=function(a,b){return k(b,null,null,[a]).length>0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e<f;e++){var g,h=l.order[e];if(g=l.leftMatch[h].exec(a)){var j=g[1];g.splice(1,1);if(j.substr(j.length-1)!=="\\"){g[1]=(g[1]||"").replace(i,""),d=l.find[h](g,b,c);if(d!=null){a=a.replace(l.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},k.filter=function(a,c,d,e){var f,g,h=a,i=[],j=c,m=c&&c[0]&&k.isXML(c[0]);while(a&&c.length){for(var n in l.filter)if((f=l.leftMatch[n].exec(a))!=null&&f[2]){var o,p,q=l.filter[n],r=f[1];g=!1,f.splice(1,1);if(r.substr(r.length-1)==="\\")continue;j===i&&(i=[]);if(l.preFilter[n]){f=l.preFilter[n](f,j,d,i,e,m);if(!f)g=o=!0;else if(f===!0)continue}if(f)for(var s=0;(p=j[s])!=null;s++)if(p){o=q(p,f,s,j);var t=e^!!o;d&&o!=null?t?g=!0:j[s]=!1:t&&(i.push(p),g=!0)}if(o!==b){d||(j=i),a=a.replace(l.match[n],"");if(!g)return[];break}}if(a===h)if(g==null)k.error(a);else break;h=a}return j},k.error=function(a){throw"Syntax error, unrecognized expression: "+a};var l=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!j.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&k.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&k.filter(b,a,!0)}},"":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("parentNode",b,f,a,e,c)},"~":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("previousSibling",b,f,a,e,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(i,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}k.error(e)},CHILD:function(a,b){var c=b[1],d=a;switch(c){case"only":case"first":while(d=d.previousSibling)if(d.nodeType===1)return!1;if(c==="first")return!0;d=a;case"last":while(d=d.nextSibling)if(d.nodeType===1)return!1;return!0;case"nth":var e=b[2],f=b[3];if(e===1&&f===0)return!0;var g=b[0],h=a.parentNode;if(h&&(h.sizcache!==g||!a.nodeIndex)){var i=0;for(d=h.firstChild;d;d=d.nextSibling)d.nodeType===1&&(d.nodeIndex=++i);h.sizcache=g}var j=a.nodeIndex-f;return e===0?j===0:j%e===0&&j/e>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c<f;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var r,s;c.documentElement.compareDocumentPosition?r=function(a,b){if(a===b){g=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(r=function(a,b){if(a===b){g=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],h=a.parentNode,i=b.parentNode,j=h;if(h===i)return s(a,b);if(!h)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return s(e[k],f[k]);return k===c?s(a,f[k],-1):s(e[k],b,1)},s=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),k.getText=function(a){var b="",c;for(var d=0;a[d];d++)c=a[d],c.nodeType===3||c.nodeType===4?b+=c.nodeValue:c.nodeType!==8&&(b+=k.getText(c.childNodes));return b},function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g<h;g++)k(a,f[g],d);return k.filter(e,d)};f.find=k,f.expr=k.selectors,f.expr[":"]=f.expr.filters,f.unique=k.uniqueSort,f.text=k.getText,f.isXMLDoc=k.isXML,f.contains=k.contains}();var N=/Until$/,O=/^(?:parents|prevUntil|prevAll)/,P=/,/,Q=/^.[^:#\[\.,]*$/,R=Array.prototype.slice,S=f.expr.match.POS,T={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(V(this,a,!1),"not",a)},filter:function(a){return this.pushStack(V(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d<e;d++)i=a[d],j[i]||(j[i]=S.test(i)?f(i,b||this.context):i);while(g&&g.ownerDocument&&g!==b){for(i in j)h=j[i],(h.jquery?h.index(g)>-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=S.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(l?l.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(U(c[0])||U(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=R.call(arguments);N.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!T[a]?f.unique(e):e,(this.length>1||P.test(d))&&O.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|object|embed|option|style)/i,bb=/checked\s*(?:[^=]|=\s*.checked.)/i,bc=/\/(java|ecma)script/i,bd=/^\s*<!(?:\[CDATA\[|\-\-)/,be={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};be.optgroup=be.option,be.tbody=be.tfoot=be.colgroup=be.caption=be.thead,be.th=be.td,f.support.htmlSerialize||(be._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!be[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bb.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bf(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bl)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i;b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof a[0]=="string"&&a[0].length<512&&i===c&&a[0].charAt(0)==="<"&&!ba.test(a[0])&&(f.support.checkClone||!bb.test(a[0]))&&(g=!0,h=f.fragments[a[0]],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean
(a,i,e,d)),g&&(f.fragments[a[0]]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bh(a,d),e=bi(a),g=bi(d);for(h=0;e[h];++h)g[h]&&bh(e[h],g[h])}if(b){bg(a,d);if(c){e=bi(a),g=bi(d);for(h=0;e[h];++h)bg(e[h],g[h])}}e=g=null;return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=be[l]||be._default,n=m[0],o=b.createElement("div");o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bk(k[i]);else bk(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||bc.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.expando,g=f.event.special,h=f.support.deleteExpando;for(var i=0,j;(j=a[i])!=null;i++){if(j.nodeName&&f.noData[j.nodeName.toLowerCase()])continue;c=j[f.expando];if(c){b=d[c]&&d[c][e];if(b&&b.events){for(var k in b.events)g[k]?f.event.remove(j,k):f.removeEvent(j,k,b.handle);b.handle&&(b.handle.elem=null)}h?delete j[f.expando]:j.removeAttribute&&j.removeAttribute(f.expando),delete d[c]}}}});var bm=/alpha\([^)]*\)/i,bn=/opacity=([^)]*)/,bo=/([A-Z]|^ms)/g,bp=/^-?\d+(?:px)?$/i,bq=/^-?\d/,br=/^([\-+])=([\-+.\de]+)/,bs={position:"absolute",visibility:"hidden",display:"block"},bt=["Left","Right"],bu=["Top","Bottom"],bv,bw,bx;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bv(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=br.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bv)return bv(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return by(a,b,d);f.swap(a,bs,function(){e=by(a,b,d)});return e}},set:function(a,b){if(!bp.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bn.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bm,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bm.test(g)?g.replace(bm,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bv(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bw=function(a,c){var d,e,g;c=c.replace(bo,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bx=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bp.test(d)&&bq.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bv=bw||bx,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bz=/%20/g,bA=/\[\]$/,bB=/\r?\n/g,bC=/#.*$/,bD=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bE=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bF=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bG=/^(?:GET|HEAD)$/,bH=/^\/\//,bI=/\?/,bJ=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bK=/^(?:select|textarea)/i,bL=/\s+/,bM=/([?&])_=[^&]*/,bN=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bO=f.fn.load,bP={},bQ={},bR,bS,bT=["*/"]+["*"];try{bR=e.href}catch(bU){bR=c.createElement("a"),bR.href="",bR=bR.href}bS=bN.exec(bR.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bO)return bO.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bJ,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bK.test(this.nodeName)||bE.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bB,"\r\n")}}):{name:b.name,value:c.replace(bB,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?bX(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),bX(a,b);return a},ajaxSettings:{url:bR,isLocal:bF.test(bS[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bT},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bV(bP),ajaxTransport:bV(bQ),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?bZ(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=b$(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bD.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bC,"").replace(bH,bS[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bL),d.crossDomain==null&&(r=bN.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bS[1]&&r[2]==bS[2]&&(r[3]||(r[1]==="http:"?80:443))==(bS[3]||(bS[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bW(bP,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bG.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bI.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bM,"$1_="+x);d.url=y+(y===d.url?(bI.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bT+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bW(bQ,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){s<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)bY(g,a[g],c,e);return d.join("&").replace(bz,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var b_=f.now(),ca=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+b_++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ca.test(b.url)||e&&ca.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ca,l),b.url===j&&(e&&(k=k.replace(ca,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cb=a.ActiveXObject?function(){for(var a in cd)cd[a](0,1)}:!1,cc=0,cd;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ce()||cf()}:ce,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cb&&delete cd[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cc,cb&&(cd||(cd={},f(a).unload(cb)),cd[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cg={},ch,ci,cj=/^(?:toggle|show|hide)$/,ck=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cl,cm=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cn;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cq("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cr(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cq("hide",3),a,b,c);for(var d=0,e=this.length;d<e;d++)if(this[d].style){var g=f.css(this[d],"display");g!=="none"&&!f._data(this[d],"olddisplay")&&f._data(this[d],"olddisplay",g)}for(d=0;d<e;d++)this[d].style&&(this[d].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cq("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return this[e.queue===!1?"each":"queue"](function(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(f.support.inlineBlockNeedsLayout?(j=cr(this.nodeName),j==="inline"?this.style.display="inline-block":(this.style.display="inline",this.style.zoom=1)):this.style.display="inline-block"))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)k=new f.fx(this,b,i),h=a[i],cj.test(h)?k[h==="toggle"?d?"show":"hide":h]():(l=ck.exec(h),m=k.cur(),l?(n=parseFloat(l[2]),o=l[3]||(f.cssNumber[i]?"":"px"),o!=="px"&&(f.style(this,i,(n||1)+o),m=(n||1)/k.cur()*m,f.style(this,i,m+o)),l[1]&&(n=(l[1]==="-="?-1:1)*n+m),k.custom(m,n,o)):k.custom(m,h,""));return!0})},stop:function(a,b){a&&this.queue([]),this.each(function(){var a=f.timers,c=a.length;b||f._unmark(!0,this);while(c--)a[c].elem===this&&(b&&a[c](!0),a.splice(c,1))}),b||this.dequeue();return this}}),f.each({slideDown:cq("show",1),slideUp:cq("hide",1),slideToggle:cq("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default,d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue!==!1?f.dequeue(this):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,b,c){function g(a){return d.step(a)}var d=this,e=f.fx;this.startTime=cn||co(),this.start=a,this.end=b,this.unit=c||this.unit||(f.cssNumber[this.prop]?"":"px"),this.now=this.start,this.pos=this.state=0,g.elem=this.elem,g()&&f.timers.push(g)&&!cl&&(cl=setInterval(e.tick,e.interval))},show:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.show=!0,this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b=cn||co(),c=!0,d=this.elem,e=this.options,g,h;if(a||b>=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){for(var a=f.timers,b=0;b<a.length;++b)a[b]()||a.splice(b--,1);a.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cl),cl=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit:a.elem[a.prop]=a.now}}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cs=/^t(?:able|d|h)$/i,ct=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cu(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);f.offset.initialize();var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.offset.supportsFixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.offset.doesNotAddBorder&&(!f.offset.doesAddBorderForTableAndCells||!cs.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.offset.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.offset.supportsFixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={initialize:function(){var a=c.body,b=c.createElement("div"),d,e,g,h,i=parseFloat(f.css(a,"marginTop"))||0,j="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=ct.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!ct.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cu(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cu(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a&&a.style?parseFloat(f.css(a,d,"padding")):null},f.fn["outer"+c]=function(a){var b=this[0];return b&&b.style?parseFloat(f.css(b,d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNaN(j)?i:j}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window);PK�����*†9D������������à��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/public/stylesheets/main.cssPK�����*†9D_5¢<���<���Ò��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/htgroupsroot: root apacheRoot
users: root apacheRoot user apacheUserPK�����*†9D(ÉÆ9����Ý��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/EncryptionTest.java
import org.junit.Test;
import play.Logger;
import play.modules.fileauth.utils.MD5Crypt;
import play.test.UnitTest;

/**
 * EncryptionTest
 * 31.07.2012
 * @author Philipp Haussleiter
 *
 */
public class EncryptionTest extends UnitTest {

    @Test
    public void testApacheCrypt() {
        Logger.info("testing APACHE_CRYPT");
        String clear = "pw_" + System.currentTimeMillis();
        String pass;
        String salt = "abcd1234";
        pass = MD5Crypt.apacheCrypt(clear);
        Logger.info(clear + " got me " + pass);
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
        pass = MD5Crypt.apacheCrypt(clear, salt);
        Logger.info(clear + " & salt " + salt + " got me " + pass);
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
    }

    @Test
    public void testCrypt() {
        Logger.info("testing CRYPT");
        String clear = "pw_" + System.currentTimeMillis();
        String pass;
        String salt = "abcd1234";
        pass = MD5Crypt.crypt(clear);
        Logger.info(clear + " got me " + pass);
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
        pass = MD5Crypt.crypt(clear, salt);
        Logger.info(clear + " & salt " + salt + " got me " + pass);
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
    }
}
PK�����*†9D*˜,-I��I��Þ��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/ApacheUsersTest.java
import java.util.HashMap;
import java.util.Map;
import org.junit.BeforeClass;
import org.junit.Test;
import play.Play;
import play.cache.Cache;
import play.modules.fileauth.FileAuth;
import play.modules.fileauth.utils.MD5Crypt;
import play.test.UnitTest;

/**
 * ApacheUsersTest
 * 03.08.2012
 * @author Philipp Haussleiter
 *
 */
public class ApacheUsersTest extends UnitTest {

    @BeforeClass
    public static void setup() {
        Play.configuration.setProperty("authfile.users.path", Play.applicationPath + "/test/htusers");
        Play.configuration.setProperty("authfile.users.delimeter", ":");
        Cache.safeDelete(FileAuth.AUTH_FILE_USERS_CACHE_KEY);
        FileAuth.scanUsers();
    }

    @Test
    public void testUsersRead() {
        Map<String, String> users = Cache.get(FileAuth.AUTH_FILE_USERS_CACHE_KEY, HashMap.class);
        assertNotNull(users);
    }

    @Test
    public void testUsersValidate() {
        String clear = "user";
        String pass = MD5Crypt.crypt("user");
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
    }

    @Test
    public void testValidatePassword() {
        String pass = "user";
        String user = "user";
        assertTrue(FileAuth.validate(user, pass));
        user = "apacheUser";
        assertTrue(FileAuth.validate(user, pass));
        user = "user";
        pass = "user123";
        assertFalse(FileAuth.validate(user, pass));
    }

    @Test
    public void testValidateNotExistingUser() {
        String pass = "user123";
        String user = "user123";
        assertFalse(FileAuth.validate(user, pass));
    }
}
PK�����*†9DÄžŒÒù��ù��Þ��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/GroupGroupsTest.java
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.junit.BeforeClass;
import org.junit.Test;
import play.Play;
import play.cache.Cache;
import play.modules.fileauth.FileAuth;
import play.test.UnitTest;

/**
 * GroupGroupsTest
 * 04.08.2012
 * @author Philipp Haussleiter
 *
 */
public class GroupGroupsTest extends UnitTest {

    @BeforeClass
    public static void setup() {
        Play.configuration.setProperty("authfile.groups.path", Play.applicationPath + "/test/group");
        Play.configuration.setProperty("authfile.users.delimeter", ":");
        Play.configuration.setProperty("authfile.groups.delimeter", ",");
        Cache.safeDelete(FileAuth.AUTH_FILE_GROUPS_CACHE_KEY);
    }

    @Test
    public void testUsersRead() {
        FileAuth.scanGroups();
        Map<String, Set<String>> groups = Cache.get(FileAuth.AUTH_FILE_GROUPS_CACHE_KEY, HashMap.class);
        assertNotNull(groups);
    }

    @Test
    public void testGroupContainsUser() {
        String user = "user";
        String group = "users";
        assertTrue(FileAuth.contains(group, user));
        user = "root";
        assertTrue(FileAuth.contains(group, user));
    }

    @Test
    public void testGroupNotContainsUser() {
        String user = "user";
        String group = "root";
        assertFalse(FileAuth.contains(group, user));
    }

    public void testGroupNotExists() {
        String user = "user";
        String group = "user";
        assertFalse(FileAuth.contains(group, user));
    }
}PK�����*†9D?5'³g��g��Þ��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/ShadowUsersTest.java
import java.util.HashMap;
import java.util.Map;
import org.junit.BeforeClass;
import org.junit.Test;
import play.Logger;
import play.Play;
import play.cache.Cache;
import play.modules.fileauth.FileAuth;
import play.modules.fileauth.utils.MD5Crypt;
import play.test.UnitTest;


/**
 * ShadowUsersTest
 * 04.08.2012
 * @author Philipp Haussleiter
 *
 */
public class ShadowUsersTest extends UnitTest {

    @BeforeClass
    public static void setup() {
        Play.configuration.setProperty("authfile.users.path", Play.applicationPath + "/test/shadow");
        Logger.info("file path: "+Play.configuration.getProperty("authfile.users.path"));
        Play.configuration.setProperty("authfile.users.delimeter", ":");
        Cache.safeDelete(FileAuth.AUTH_FILE_USERS_CACHE_KEY);
    }

    @Test
    public void testUsersRead() {
        FileAuth.scanUsers();
        Map<String, String> users = Cache.get(FileAuth.AUTH_FILE_USERS_CACHE_KEY, HashMap.class);
        assertNotNull(users);
    }

    @Test
    public void testUsersValidate() {
        String clear = "user";
        String pass = MD5Crypt.crypt("user");
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
    }

    @Test
    public void testValidatePassword() {
        String pass = "user";
        String user = "user";
        assertTrue(FileAuth.validate(user, pass));
        user = "user";
        pass = "user123";
        assertFalse(FileAuth.validate(user, pass));
    }

    @Test
    public void testValidateNotExistingUser() {
        String pass = "user123";
        String user = "user123";
        assertFalse(FileAuth.validate(user, pass));
    }
}
PK�����*†9DTâÒ%���%���Ï��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/grouproot:x:321:root
users:x:123:root,userPK�����*†9Dcé¸���¸���Ò��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/data.yml# you describe your data using the YAML notation here
# and then load them using Fixtures.load("data.yml")

# User(bob):
#   email: bob@gmail.com
#   password: secret
#   fullname: BobPK�����*†9D<_'²���²���Ñ��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/htusersapacheUser:$apr1$kuwPretH$BPbVoWoDTEFUw.4g1zDKs1
apacheRoot:$apr1$nVmU2aOS$rDZ4.BG3TPT02YBsCVcSG/
root:$1$imw51D2V$aJbVmk2xlEg8q.Y8nh91E.
user:$1$4aMItwK9$PnpH2GeuHDeR2t.jKhQ771
PK�����*†9DÇÀ���À���Ø��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/BasicTest.javaimport org.junit.*;
import play.test.*;

public class BasicTest extends UnitTest {

    @Test
    public void aVeryImportantThingToTest() {
        assertEquals(2, 1 + 1);
    }

}
PK�����*†9D‰=u���u���Ð��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/shadowroot:$1$imw51D2V$aJbVmk2xlEg8q.Y8nh91E.:43534:0:435:7:::
user:$1$4aMItwK9$PnpH2GeuHDeR2t.jKhQ771:345345:0:46456:7:::
PK�����*†9D,mˆ÷��÷��ß��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/ApacheGroupsTest.java
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.junit.BeforeClass;
import org.junit.Test;
import play.Logger;
import play.Play;
import play.cache.Cache;
import play.modules.fileauth.FileAuth;
import play.test.UnitTest;

/**
 * ApacheGroupsTest 03.08.2012
 *
 * @author Philipp Haussleiter
 *
 */
public class ApacheGroupsTest extends UnitTest {

    @BeforeClass
    public static void setup() {
        Play.configuration.setProperty("authfile.groups.path", Play.applicationPath + "/test/htgroups");
        Play.configuration.setProperty("authfile.users.path", Play.applicationPath + "/test/htusers");
        Play.configuration.setProperty("authfile.users.delimeter", ":");
        Play.configuration.setProperty("authfile.groups.delimeter", " ");
        Cache.safeDelete(FileAuth.AUTH_FILE_GROUPS_CACHE_KEY);
        Cache.safeDelete(FileAuth.AUTH_FILE_USERS_CACHE_KEY);
        FileAuth.scanGroups();
        FileAuth.scanUsers();
    }

    @Test
    public void testGroupsRead() {
        Logger.info("testGroupsRead");
        FileAuth.scanGroups();
        Map<String, Set<String>> groups = Cache.get(FileAuth.AUTH_FILE_GROUPS_CACHE_KEY, HashMap.class);
        assertNotNull(groups);
        int groupSize = groups.size();
        assertTrue(String.format("but was %d ", groupSize), groupSize > 0);
    }

    @Test
    public void testGroupContainsUser() {
        FileAuth.scanGroups();
        FileAuth.scanUsers();
        String user = "user";
        String group = "users";
        assertTrue(String.format("u: %s, g: %s", user, group), FileAuth.contains(group, user));
        user = "root";
        assertTrue(String.format("u: %s, g: %s", user, group), FileAuth.contains(group, user));
    }

    @Test
    public void testGroupNotContainsUser() {
        FileAuth.scanGroups();
        FileAuth.scanUsers();
        String user = "user";
        String group = "root";
        assertFalse(String.format("u: %s, g: %s", user, group), FileAuth.contains(group, user));
    }

    public void testGroupNotExists() {
        FileAuth.scanGroups();
        FileAuth.scanUsers();
        String user = "user";
        String group = "user";
        assertFalse(String.format("u: %s, g: %s", user, group), FileAuth.contains(group, user));
    }
}
PK�����*†9D/%ÈBÔ��Ô��Ð��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/routes# Routes
# This file defines all application routes (Higher priority routes first)
# ~~~~

# Home page
GET     /                                       Application.index

# Ignore favicon requests
GET     /favicon.ico                            404

# Map static resources from the /app/public folder to the /public path
GET     /public/                                staticDir:public

# Catch all
*       /{controller}/{action}                  {controller}.{action}
PK�����*†9D¥#Æ/Ç��Ç��Ú��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/application.conf# This is the main configuration file for the application.
# ~~~~~
application.name=auth-file-demo

# Application mode
# ~~~~~
# Set to dev to enable instant reloading and other development help.
# Otherwise set to prod.
application.mode=dev
%prod.application.mode=prod

# Secret key
# ~~~~~
# The secret key is used to secure cryptographics functions
# If you deploy your application to several instances be sure to use the same key !
application.secret=uQks53MboMLlGVsJSrPRCipiFOZ4BXn8oDBfOxGxsaXDVtkJOJaIiBNX9SNQoUN8

# i18n
# ~~~~~
# Define locales used by your application.
# You can then place localized messages in conf/messages.{locale} files
# application.langs=fr,en,ja

# Date format
# ~~~~~
date.format=yyyy-MM-dd
# date.format.fr=dd/MM/yyyy

# Server configuration
# ~~~~~
# If you need to change the HTTP port, uncomment this (default is set to 9000)
# http.port=9000
#
# By default the server listen for HTTP on the wilcard address.
# You can restrict this.
# http.address=127.0.0.1
#
# Use this if you don't host your Play application at the root of the domain
# you're serving it from. This parameter has no effect when deployed as a
# war, because the path will be handled by the application server.
# http.path=/

# Session configuration
# ~~~~~~~~~~~~~~~~~~~~~~
# By default, session will be written to the transient PLAY_SESSION cookie.
# The cookies are not secured by default, only set it to true
# if you're serving your pages through https.
# application.session.cookie=PLAY
# application.session.maxAge=1h
# application.session.secure=false

# Session/Cookie sharing between subdomain
# ~~~~~~~~~~~~~~~~~~~~~~
# By default a cookie is only valid for a specific domain. By setting
# application.defaultCookieDomain to '.example.com', the cookies
# will be valid for all domains ending with '.example.com', ie:
# foo.example.com and bar.example.com
# application.defaultCookieDomain=.example.com

# JVM configuration
# ~~~~~
# Define which port is used by JPDA when application is in debug mode (default is set to 8000)
# jpda.port=8000
#
# Java source level => 1.5, 1.6 or 1.7 (experimental)
# java.source=1.5

# Log level
# ~~~~~
# Specify log level for your application.
# If you want a very customized log, create a log4j.properties file in the conf directory
# application.log=INFO
#
# More logging configuration
# application.log.path=/log4j.properties
# application.log.system.out=off

# Database configuration
# ~~~~~ 
# Enable a database engine if needed.
#
# To quickly set up a development database, use either:
#   - mem : for a transient in memory database (H2 in memory)
#   - fs  : for a simple file written database (H2 file stored)
# db=mem
#
# To connect to a local MySQL5 database, use:
# db=mysql://user:pwd@host/database
#
# To connect to a local PostgreSQL9 database, use:
# db=postgres://user:pwd@host/database
#
# If you need a full JDBC configuration use the following :
# db.url=jdbc:postgresql:database_name
# db.driver=org.postgresql.Driver
# db.user=root
# db.pass=secret
#
# Connections pool configuration :
# db.pool.timeout=1000
# db.pool.maxSize=30
# db.pool.minSize=10
#
# If you want to reuse an existing Datasource from your application server, use:
# db=java:/comp/env/jdbc/myDatasource
#
# When using an existing Datasource, it's sometimes needed to destroy it when
# the application is stopped. Depending on the datasource, you can define a
# generic "destroy" method :
# db.destroyMethod=close

# JPA Configuration (Hibernate)
# ~~~~~
#
# Specify the custom JPA dialect to use here (default to guess):
# jpa.dialect=org.hibernate.dialect.PostgreSQLDialect
#
# Specify the ddl generation pattern to use. Set to none to disable it 
# (default to update in DEV mode, and none in PROD mode):
# jpa.ddl=update
#
# Debug SQL statements (logged using DEBUG level):
# jpa.debugSQL=true
#
# You can even specify additional hibernate properties here:
# hibernate.use_sql_comments=true
# ...
#
# Store path for Blob content
attachments.path=data/attachments

# Memcached configuration
# ~~~~~ 
# Enable memcached if needed. Otherwise a local cache is used.
# memcached=enabled
#
# Specify memcached host (default to 127.0.0.1:11211)
# memcached.host=127.0.0.1:11211
#
# Or you can specify multiple host to build a distributed cache
# memcached.1.host=127.0.0.1:11211
# memcached.2.host=127.0.0.1:11212
#
# Use plain SASL to authenticate for memcached
# memcached.user=
# memcached.password=

# HTTP Response headers control for static files
# ~~~~~
# Set the default max-age, telling the user's browser how long it should cache the page.
# Default is 3600 (one hour). Set it to 0 to send no-cache.
# This is only read in prod mode, in dev mode the cache is disabled.
# http.cacheControl=3600

# If enabled, Play will generate entity tags automatically and send a 304 when needed.
# Default is true, set it to false to deactivate use of entity tags.
# http.useETag=true

# Custom mime types
# mimetype.xpi=application/x-xpinstall

# WS configuration
# ~~~~~
# Default engine is Async Http Client, uncomment to use
# the JDK's internal implementation
# webservice = urlfetch
# If you need to set proxy params for WS requests
# http.proxyHost = localhost
# http.proxyPort = 3128
# http.proxyUser = jojo
# http.proxyPassword = jojo

# Mail configuration
# ~~~~~ 
# Default is to use a mock Mailer
mail.smtp=mock

# Or, specify mail host configuration
# mail.smtp.host=127.0.0.1
# mail.smtp.user=admin
# mail.smtp.pass=
# mail.smtp.channel=ssl

# Url-resolving in Jobs
# ~~~~~~
# When rendering templates with reverse-url-resoling (@@{..}) in Jobs (which do not have an inbound Http.Request),
# ie if sending a HtmlMail, Play need to know which url your users use when accessing your app.
# %test.application.baseUrl=http://localhost:9000/
# %prod.application.baseUrl=http://www.yourdomain.com/

# Jobs executor
# ~~~~~~
# Size of the Jobs pool
# play.jobs.pool=10

# Execution pool
# ~~~~~
# Default to 1 thread in DEV mode or (nb processors + 1) threads in PROD mode.
# Try to keep a low as possible. 1 thread will serialize all requests (very useful for debugging purpose)
# play.pool=3

# Open file from errors pages
# ~~~~~
# If your text editor supports opening files by URL, Play! will
# dynamically link error pages to files 
#
# Example, for textmate:
# play.editor=txmt://open?url=file://%s&line=%s

# Testing. Set up a custom configuration for test mode
# ~~~~~
#%test.module.cobertura=${play.path}/modules/cobertura
%test.application.mode=dev
%test.db.url=jdbc:h2:mem:play;MODE=MYSQL;LOCK_MODE=0
%test.jpa.ddl=create
%test.mail.smtp=mock

PK�����*†9D‹úWÀ �� ��Ú��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/dependencies.yml# Application dependencies

require:
    - play
    - play -> secure
    - local -> play-file-auth 0.2
    
repositories:
    - playCustomModules:
        type:       local
        artifact:   ${application.path}/../../dist/[module]-[revision].zip
        contains:
          - local -> *PK�����*†9Dqé¶h���h���Ò��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/messages# You can specialize this file for each language.
# For example, for French create a messages.fr file
#
PK�����*†9D«_^)/��/��Ø��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/main.html<!DOCTYPE html>

<html>
    <head>
        <title>#{get 'title' /}</title>
        <meta charset="${_response_encoding}">
        <link rel="stylesheet" media="screen" href="@{'/public/stylesheets/main.css'}">
        #{get 'moreStyles' /}
        <link rel="shortcut icon" type="image/png" href="@{'/public/images/favicon.png'}">
        <script src="@{'/public/javascripts/jquery-1.6.4.min.js'}" type="text/javascript" charset="${_response_encoding}"></script>
        #{get 'moreScripts' /}
    </head>
    <body>
        #{doLayout /}
    </body>
</html>
PK�����*†9D*º$•<���<���å��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/Application/index.html#{extends 'main.html' /}
#{set title:'Home' /}

#{welcome /}PK�����*†9DÙ¦��¦��Þ��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/errors/404.html<!DOCTYPE html>

<html>
    <head>
        <title>Not found</title>
        <meta http-equiv="Content-Type" content="text/html; charset=${_response_encoding}"/>    
    </head>
    <body>
        #{if play.mode.name() == 'DEV'}
            #{404 result /}
        #{/if}
        #{else}
            <h1>Not found</h1>
            <p>
                ${result.message}
            </p>
        #{/else}
    </body>
</html>
PK�����*†9DËip®V��V��Þ��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/errors/500.html<!DOCTYPE html>

<html>
    <head>
        <title>Application error</title>
        <meta http-equiv="Content-Type" content="text/html; charset=${_response_encoding}"/>	
    </head>
    <body>
        #{if play.mode.name() == 'DEV'}
            #{500 exception /}
        #{/if}
        #{else}
            <h1>Oops, an error occured</h1>
            #{if exception instanceof play.exceptions.PlayException}
                <p>
                    This exception has been logged with id <strong>${exception.id}</strong>.
                </p>
            #{/if}
        #{/else}
    </body>
</html>
PK�����*†9D¤8r“���“���å��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/controllers/Application.javapackage controllers;
import play.mvc.*;

public class Application extends Controller {

    public static void index() {
        render();
    }

}PK�����*†9Dp­b’$���$���Ó��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/secure/opt/play/play-1.2.5/modules/secure
PK�����*†9DD6I÷P��P��ë��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.py# Here you can create play commands that are specific to the module, and extend existing commands

MODULE = 'play-file-auth'

# Commands that are specific to your module

COMMANDS = ['play-file-auth:hello']

def execute(**kargs):
    command = kargs.get("command")
    app = kargs.get("app")
    args = kargs.get("args")
    env = kargs.get("env")

    if command == "play-file-auth:hello":
        print "~ Hello"


# This will be executed before any command (new, run...)
def before(**kargs):
    command = kargs.get("command")
    app = kargs.get("app")
    args = kargs.get("args")
    env = kargs.get("env")


# This will be executed after any command (new, run...)
def after(**kargs):
    command = kargs.get("command")
    app = kargs.get("app")
    args = kargs.get("args")
    env = kargs.get("env")

    if command == "new":
        pass
PK�����*†9DŒÀÉZ•��•��é��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/README.mdplay-file-auth
==============

This Module supports authentication of Play! 1.x Applications agains Unix Auth Files (e.g. Apache htusers)

This Plugin works for all Auth Files with the following syntax:


    user1:passwordhash
    user1:passwordhash:...:...:

    group:user1 user2
    group:x:...:user1,user2


The Hash Algorithm has to be either MD5 Crypt or MD5 Apache Crypt.

    $1$...
    $apr1$...PK�����*†9DaCV��V��é��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/build.xml<?xml version="1.0" encoding="UTF-8"?>

<project name="play-file-auth" default="build" basedir=".">

    <target name="check" unless="play.path">
        <fail message="Please specify Play framework path using -Dplay.path=/path/to/framework/home" />
    </target>

    <path id="project.classpath">
        <pathelement path="${play.path}/framework/classes"/>
        <fileset dir="${play.path}/framework/lib">
            <include name="*.jar"/>
        </fileset>
        <fileset dir="${play.path}/framework">
            <include name="*.jar"/>
        </fileset>
        <fileset dir="lib">
            <include name="*.jar"/>
        </fileset>
    </path>

    <target name="build" depends="compile">
        <mkdir dir="lib" />
        <copy todir="tmp/classes">
            <fileset dir="src">
                <include name="**/*.properties"/>
                <include name="**/*.xml"/>
                <include name="**/play.plugins"/>
                <include name="**/play.static"/>
            </fileset>
        </copy>
        <jar destfile="lib/play-play-file-auth.jar" basedir="tmp/classes">
            <manifest>
                <section name="Play-module">
                    <attribute name="Specification-Title" value="play-file-auth"/>
                </section>
            </manifest>
        </jar>
        <delete dir="tmp" />
    </target>

    <target name="compile" depends="check">
        <mkdir dir="tmp/classes" />
        <javac srcdir="src" destdir="tmp/classes" target="1.5" debug="true">
            <classpath refid="project.classpath" />
        </javac>
    </target>

</project>
PK�����*†9DÞE:ò��ò��ì��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pycÑò
²Rc�����������@���s.���d��Z��d�g�Z�d�„��Z�d�„��Z�d�„��Z�d�S(���s���play-file-auths���play-file-auth:helloc����������K���sV���|��i��d�ƒ�}�|��i��d�ƒ�}�|��i��d�ƒ�}�|��i��d�ƒ�}�|�d�j�o	�d�GHn�d��S(���Nt���commandt���appt���argst���envs���play-file-auth:hellos���~ Hello(���t���get(���t���kargsR����R���R���R���(����(����s–���/home/javastream.de/jenkins/jobs/de.consolving.play-file-auth-module/workspace/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pyt���execute	���s����
c����������K���s@���|��i��d�ƒ�}�|��i��d�ƒ�}�|��i��d�ƒ�}�|��i��d�ƒ�}�d��S(���NR����R���R���R���(���R���(���R���R����R���R���R���(����(����s–���/home/javastream.de/jenkins/jobs/de.consolving.play-file-auth-module/workspace/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pyt���before���s����c����������K���sQ���|��i��d�ƒ�}�|��i��d�ƒ�}�|��i��d�ƒ�}�|��i��d�ƒ�}�|�d�j�o�n�d��S(���NR����R���R���R���t���new(���R���(���R���R����R���R���R���(����(����s–���/home/javastream.de/jenkins/jobs/de.consolving.play-file-auth-module/workspace/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pyt���after���s����
N(���t���MODULEt���COMMANDSR���R���R	���(����(����(����s–���/home/javastream.de/jenkins/jobs/de.consolving.play-file-auth-module/workspace/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pyt���<module>���s���			PK�����*†9DxÏ‘[$���$���è��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/manifestversion=0.2
frameworkVersions=1.2.x
PK�����*†9D"YO»��»��û��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/lib/play-play-file-auth.jarPK
����lC������������	��META-INF/þÊ��PK
���kC½ÿíŠ���¤������META-INF/MANIFEST.MFM±
Â0E÷@þ!£	U¡H·ÖÉ¡"T\噾ÐiR’tÈß›l®çœËÁ‘Á˜äC$ï:qR
g½û#ýzAQX‘תo!á,‡\ûV5Ÿs+¿ÍE¦Ý‰‘tð1Ç„kw§Õ‘3ΰb'ž²\ý¼[älÚP“!
©üÈ%[Š­†,JØÓR—?PK
����kC���������������play/PK
����kC������������
���play/modules/PK
����kC���������������play/modules/fileauth/PK
����kC���������������play/modules/fileauth/utils/PK
���kC��������������play.plugins�PK
���kC(�å_j
����$���play/modules/fileauth/FileAuth.classW{|Õþ&û˜ÙÉ$À†D—Š,ˆ˜„,QZPEBL „”hD‡ì$Ýìngg‘૾j[m}k¥­O4ÕR´!1ÁG¨Vkµ[«}ØÖÖÚÚ÷ý•~wöÁf³bȏû8÷Üs¿sÎwϝ}ùOpþ£"ˆk|8×ʸN…×(¸^ÅpƒŒ/ª”IÁ—E£hn*†Œ¯Èøj1Jp³Ü"ãV·ávîÀ
îRq7¾¦à»Äðë2¾¡âDaö›¢¿WÅ}¸_ŒPð è’±[ÅÃxDưŠø–hÍc
¾-VöÈøŽŒÇUTá	•Ø+š}*fb¿hž žRð]{DÆK1*6ŽÉxZÅ2Œ*Jßç=£à ‚gRpXÁs2žWq®.½ àEáÕ„Œ#õ›×õ45·4ötv4nêèi¨oXר³¡±[‚¿åb}»^Ñ£ýµ¶eFûWH(iˆE¶µ»ôHҐ 6wô4¶Õ¯ii<W‚t„9Ç,®Ý´±³}’É’ÔxsskãÆÎͼ+ͨi¯’બê’ànˆ…isF‹5Ú’ƒÛk³¾-b(±^=Ò¥[¦˜§…n{ÀLH¶Ä#úPí`,œŒ‰Ú>3bèI{ ¶‰ƒzZé7ì΄aQ{VeUÊ­¤mFj[õ8—=ÉÔÚŒ)+“ÏŠgÎ^6YuåÔPM•¬¢A_‡ÙÕí¤EgæC™¾ú³ÖŠ%ãííOš¦iÌQè0ì
«ë릍ëcM)½±¨­›QÂ;­r:ÞU‘AÇ#æW¤…s¦SSăyÄ)Ó€B ÛõˆÖm†]‰ë‰Ä¥1+L:Ñ^k(návÊ×D¯MŸä‰ë–;lK¡kP´ÈNL­˜±Ú5ɾ>Ã2›=lX\wGHaª;$Ì˪	J¶Åì¦X2nÜÑkÄm3¥vyV£yc®\dnÓÅ=sа
ëZr	¥“S_ø3Äð‰ðµ§œpë–µP 2¢ì¤f"3æ]J}3Ñì;ב‰PVöFÒ÷Síˆ%­^£É9·$sµ–ˆó5´ UÃ:Ðê¬c¹X§'Ȧ,¯ÄÈø¾†—ð2íLb™,	3óë‡†íØ¬a‹h^Â&mcÂ5ôà
ÎÞüLÉxUÃq‘Œ×4ü¯3¢6ˆð-q.ý’¸nÈxCÏñf4o5­NèüTÂ	ù‡¬Iš‘°£²ZÃÏ𦌟køÞ“_òÄ`³¥bСVÐŒ5¼w&áݸíb£×–ñ+
¿Æo$h¹©!þ­†wq¥†ßáJÙ ™FcvP:ÄŠl„„ê|
¿û+
S“¥4×pJ(ÌÿA4ïiø#ÞÑð'¼¯áÏbôþB6,Œjø+>”0÷¸TÖð7±éï@YJ³Zõ‰
ôÿø§ˆÏ¿È»à 3<äéìlüSUÍI_©|qn^‚Üv,Ä)ö‹Oa£C–ã	ë3vbh¤X¿$X€Á˜,„ÉÙ˜0l†û
‘“ÿ1ÕŽB¯Þ;`Ô6ˆ–ae¯ÀqëbC„•iEUK>SxÛUN•T,/¤Èû½°0h°Dmë¹ËDmd™ÙnXfßP{¶lúœ}ílxYáûÌþ¤¥§\‘SŽÛ­XܰlÓHÄìBr	ÅBz>”çRæI(TÏšÞkRh«—l3¢t#4­ÃÒ·{Åäê2”°A2¬7iYFÔÞL6¶š‘ˆøaí\/á¤Êõdz¥Ø±”ˆ©,³Ø	rK¬¿_°ÜmFûb*@ÞR ¹]yIÏxG¹×Øa&Ä›à5©rî¾T·¢âËhòs"”ËŽÉÒO›*Ç-ÎçIÄ#¦]øu¯*ørº9`ä\ñ¤—Æ4øi’Ú•·çìãó`ªÉœH”‘zÎ÷¹Ó·‰„Þ/<2,+&"ž ØÉf³Èfóñ²éÒÃaÌçGu¿8Ü M°–³"x8çãÈq�ësä>ÌÁ†œùé”Hâ-eÛFI-{‰½§ú�¤}ŽÊF¶^GxÚÙj)|›ØûÄ#H-±Ùf/ÖîGÑ.ÃÕ}�î½~O\£ð‚¼¡úäQ(ª÷RÏåØžCëÀb¶5(ÅÎkq2-்Ìys ¢]œ7Ir>gÝʈdËÇ"ñå#Q§"YÁv%‘¬âü"YM$k&!¹p
’±5‹ä³DÒƒ‹Ò}’·¬ƒÄãÞS=yñx\{FQÜZS=­‡PÒr„¡Åc(-ž,¨E4æÇKs
aÌdàýzÏœJ0§1`uê(èÌ0œÑ6'×d�]Ä¥èE˜¶ü
JRk[³k×|èË:0œv Tȁǘ™v`qh³òá‡	ß ü~ ü‹yì%<0Bøƒ„ˁr@Ãõ§áŸàd_@Ô¸¿)
_Ë®ïPÛÌä_:J~ÊìËöÃï/Áì
bPî¯Á	-ã8‘løçŒà£8isý'sXÍÿ#˜çzÁQÌOS¦uºyNiM`VhïÊîÔ]˜›¶#öùån>m•Ýã¨ê�÷.®sÜ#¨é®óL :àY<‚P7à=èÞ}ôýš€×µtK^·èÆPK߆¾î÷ÔøOÅèImÿ¤›¶»]wÇ(>5ŒŠ”ty®4ãØ™S3†³$ŒàlÝ$¿jö2DÛq/ðz‰þ-þŽO¥ªålw0C˜8—¡—³~\A†\Ií«q®Ãm¸»p#ÀMÃÍ´q­Ý‚	ÜŠ79~‹oãv~»Ý)ÍÂ]Nj/¤Õ]˜ÇÄ_B*Ü€:¦~é¾™(¢L¨‡»g‘qÊÞvFŸãÈ'©°2ÌÆQ$2Ôã4ÖóËÜF2‡©5A†cEa{†Eïñ”R’ârÁ…y¤ÕþOsØZ€«>Šm~ˆtL Lä„)ýô8p§Iâ	x’x'pmÀëDÈIØyvcvÀ™‡—Öˆ5e%ٝž”ƒ÷=<ŽsxÚê:_@©SêÁåÅ®åZ¹V^ü æÔrmi]IÀ(qxV_„ó®Ó¤á£ï†rŠ‚¾ûvø}¡,û\öy2ìs¤Ës¥¹ì}ûB‚}×KÕRˆy}C–};Yjû˜±û™íÈ•ù¶=Ä·i7³ý0yóy÷(îÆã\ya/öñoûɃ§ø3i„¿ð÷Ê(þ‹1ɇQiÆ¥xVªÆ<ñT‹ÃÒjŽðœÔˆç¥.¼(í$óC÷uÄr)ORh¡Ä)C%xU¼—°È€…¼;QŒYˆ.ãH#Чež¿1½÷]>,y>b½Ýṇ~ÝèðÜK)ž{ˆ ÅsyžÈð\Hó|ž´•w¯‰ñj‘Nwª·]Ò"‡ñîlõNeð¬”ÖVjež!UüJHWñµ”ˆ§d
âJ3×àJýkÒ	ríq‹Ú-9)ñ;õøeô
Óñ*~î]•ýX˜ç¼±ïhß¹}ٍ©Ï…ùl?ï`¹úÿPK
���kCæ'È­r��p��*���play/modules/fileauth/FileAuthPlugin.classQÛJ1œìÖ®nk«VÛz©U(R\|V
–"…Šâc¶]5’&e/ŠŸå‹‚‚àG‰g·õ*æa&™Ì™œ$/¯Ï�¶±b#‚…Y
1ÌY(Z(1¤w…áƒY_?aHèžÇo	åE}×ó¹+I™ié.—'Üñz$¦ÂK0¬µ’ß:}Ý‹¤8çBz<
/MöiÒ–Ñ…P;¢Õþ` E—‡B«NÈý¾Ò.Cõ—ŒN—«¦v©ØîèÈïzq(Cá{öÖ¿æYXg¨ü”EKµÿtLïØÚô…e«í뾨—ì¡Rž yxô¥úúð.R¸Ó¨|;ªÔ÷;™/*V1F¿,¾á­bF<¶ñ�v—lÛ„éDÌ#C˜ˆ'‰rÅMrĹ'g0[›÷H~¦ä`É_¢Úr’VVŒÒÆé¤<¦(ÏÀtR7ƒEb›”yT°€‰7PK
���kCŒˆvÓ`��%��#���play/modules/fileauth/ScanJob.class}PËNA¬áé.‹ŠÆxpãÁÆ„51«Q80†!ËÙ	ŸåIâÁð£Œ=@ăq“©~Twue?¿Þ?�œ¡n"‰¢‰ÊöÒØO£Âºž/âf—!q¥†‚!çHO<D“¾ðŸxߥNÁQîv¹/u½n&‘Žœ©ËçöD
#Wö‹tÂ‘ÝpïNõ[É¡¢„Áì¨Èˆ©·­5:æ3ÎPyŒ¼PNDW’ÔÛž§BJåÑ…üêÂXõûz&ü¹Öœq7Ò&Î'Ò³B:‡¨Z¨¡ÊPû×Cv£¹¬ëÏk³mJŒ€VŸákG¦£}ÛQ(]ûžOÉ‘©ù[_EÓ�ÇHÐ×_L›#ܢʦÈ(&OÞÀ^—´A˜Z6ó0	­Õ�2”òìÏrk½l,ë-ïm¶',ÒՍ–	k¡ÍhÌa‡b†¸<½B€ÝoPK
���kCÎǘ	��%��*���play/modules/fileauth/utils/MD5Crypt.class­W{PTçÿ}û¼,X!®(`BuÙe]@E4¾�EA@りԚËîe¹º/wï"5¦Å4iúŠé˦5ÆØ®Imj’v¥Ú`ß3í_ý/íLg:Ó¦L2ÓtÚ4ôz¾»wĵa:…™ïq¾s¾ó;ç;»¿üàæ4€&ü܆fD‹C\ÀqHÚh£Úè,Ň1>œ°b܆"DL˜‘ýÛjÃI<©§øpZÀÅY+³âã6,Æ'¬˜´¡Q~~ޝðI.vŽOpò“>Å5<%àÓœø>|–ŸãäÏóÕÓüÞó|x†_à_ä«/	ø2ß|…8ëW<ËUÍŠ¯[q‘¡ÈßÖÓß±«mŸŸÁÑsT“|a)òùÕ„
=ÈPÒ‹&U)ªî—Â)™Á¢¨1©e--6)QEÝÂ`tÕïg0uÄ‚t\Ö£Då¾TdXNôKÃa™ßHáýRBá{hRG•$ÃÊžxXšðEbÁTXNúF”°,¥ÔQ_JUÂI_ïöu‰‰¸J(LI‰2Tº†îƨi—¡1†òÇ\YŒ®tuwÕ:g$ɺ‰/©œ$l¬‹ŒKÈÉTXepÞ%ОRÂA9ArE‚›VT²Äìjç@˜B÷dI†¡vëð„*'›SDuµ×ÓÍF%'6:²„d•Ld¨qé°’r •PÔ	_¯œLJ!y»’“Ü|ƒ<ÎàšÇÔó§£máPŒ¶£‘ã9®*±(ñ›Üoä_WwrY‰¹!.%“'b‰ ÷†Ä`MHÑ`HŽæÃƒ¿ocl- a:‹¥¸•;²P»tѯ6ÄÃdSD
)Ûˆ•Â~URéq•Ì\þ!þ6W½ÝR:&'”‘‰½y¿¬Z˜Å‡(u(¸•¨*«\šAŒ³ÝO$Â句¹Sá	Q’öÕü*ëÑjÅs".áyR9ÀÑm¬ÍñÔy³¾;\›{¯ZþZV\ñ®ˆø¾)â>&â@v8Èpß="™aÛj_cSóšµëZÖ·nhkïØ¾£sç®®îÝ=½}{ö>´Ïß?°ÿÀÁÁCÒp („F•£Ç‘h,~<‘TSc'Æ'NZ‘q/Šx	ßq
ß&OZ+^ñ\§H\Xì2,E¹/U•ˆœ?ä^y…Á>?E¼Š×D|ßcØro÷6,o{£ˆnp+¦È€º¦:)Uë¤x‚マ›œå–ˆàu~ô‹˜Æm?Än?Ê®~,¢›o‚VŠ!’Úƒ½"ÚÑ!â§øÐ.kçÆ7ì
CÝBŠaÎ~ÍC{†Ê;Iþ‰¤*G½œ —­ÈF¦óí¥WéÝe‰§my2åzœïÂô
…
¯³ò¸¢òZÖÅwöù<ä©À¨”hÓY:h/Åãr”Òf™«ãîT­¥‚Ë]±ØU0§«þKÊR1¡bÚ¥5ª�eSÓ½ëÞ=s~É\™þÑDìoUšÕ–°
©£Z«£^¥7ëÇ$U£t%™Nêð+]]…ÛŒwAÅxÖ%6²&¡&(\sÁ9Äé…•Yµ‚¾g$ûZ µó^Ä)õ¼5YRñ V-A݉Vjb]ÚËš©ÿÉD±ÈÇSR89O6ìH?}V4Ñ÷`€k°ë´ÝRÚ·ÌÙC¤557ÅG3£Ùì¾öŠÆ²‘F‹Flƒ4ŠYlÂfš‹°[uá4LÚÙ {Úô<ŠÜÓ–+({‡1“iŠ.¶\BQܦf·¹y
:Hc•{ڬӍÍt4«F/ËR¦ ÐÖHò³€Ü°Ñ¸žÀ´ÒWÓ,!8Õ¨‘à´ ]hC?¶ã vÌ=ˆmDù€’^}’Œ3ÑÜpEƒ7`ë›4Ì,{U^Gqõbˆ>‘Aieªí–Ó[Ó3oz3°_Ïã¨ÿ¬ì†€”¡5èÃ*<¤é¬…‘ßK(vhž
èÄN’PGøºèÔÉ둎ÃO{ÍåÆMUîéË(qWû'KÏümÖl‡u€®ØO&
Ðþ ¦ª’Î
°ˆš¡å¥O3”Jœ® ‘8ø™eé"Ìœ¹6ïmÌq“…ØG³×Q]º›àñ3»cÑ×wßÂâAŠ‘ŠÛz4XHgö¾RÍì QdX1’¿×J±2@¸9*ê{ú½—H–Û´MwÏ-TÒ|_¯'ƒ%vá2V4dàt,Í êñ£Omñ8–._nz8ƒe,?žù­›øì0³ORMš€1òÑ	òÈ#¤íVâ4ý
˜³7é\IHÉ_í6¢sL+†èi¨„’¿>ŠÃZQ«ÖÑnÒIp{ÕS¨¹>Ï‹Ïä_ƒß•½“¯†´”s’—ÿÏv[æÛ}™´½@èÓ¤í*Ùø"i~‰ì¾ö?Ø}¤ Ýµì¾ý!vS³ÎÞd|ƒì."aÅCö­¸�‘ÏUÜßã±×eð€á9”yŒÙ5YÛCfVÙ…+(öí'L¡n£Éirgð‘V:M
¹…'»àçf§9wnöäyJ«úhSÕ"TQí4y‚Ý~4¤a® 5®Iá/é™?x§PŸã¼€ú
ÁtæJ¹€‰xÒ|ÉoÕvtxªEHÏüÚiâ
Œ\f‘ñ­Ëˆpî¬lYF¢Óì5Ú효%~ïu¬„Æš%¸s]XHÏ9ËÚ3)P¡xZ¥‚Shàqâ<ÙÉ¡Í^ãš)4Øíã^»E[	ãg½v‘/Ïž[oq
•뼫)Ïje-)Èjγ
³¬¥Y-yÖ¢YÖ²‚¬Ö<«-Ï*ä´s²N5ç¨ôtNáŽZý'-”ߤ°ü#ámTáªÕ¦€—Âÿ¯Ô=Þ£
ýw*™ïSšþƒ’àŸT¾þ…þq|€3éO2ƝÓW¡€«LÄk¬7Y)}=Úñ+Úÿ†-ÆïX5Þf5x—­Àûì~f`u¬˜­bæbUÌÃ`
ôïckX#ÛÊšÙ.¶Žõ±jÖÏ6²Ãl²ÍìÛÂ’l;ÏÚØEÖÁ^gÛÙ/X'{‹ídï±.C9ë6Ô°ÃfÖkèb{~¶×p„ù
6 ¥bœ:û$u ‰]ÀËðh­AÀï‘ÐW”‚¹D¥U6Qùj˜V²õ¨…±ÙÐ@Å\¦ÂqØ ’?d˜Ùy¼u5áµ^&P’BÑË…ª—‹Fª’Z–—xÜ­«¯¾FdÉÂI¼—8|7Ðxûξʂ(b2ÊÙ–±V2eN™iÄQ½Ì4☆ž!¬ÉGþPK
����lC������������	���������íA����META-INF/þÊ��PK
���kC½ÿíŠ���¤��������������¤+���META-INF/MANIFEST.MFPK
����kC����������������������íAç���play/PK
����kC������������
����������íA
��play/modules/PK
����kC����������������������íA5��play/modules/fileauth/PK
����kC����������������������íAi��play/modules/fileauth/utils/PK
���kC����������������������¤£��play.pluginsPK
���kC(�å_j
����$�����������¤Ï��play/modules/fileauth/FileAuth.classPK
���kCæ'È­r��p��*�����������¤{��play/modules/fileauth/FileAuthPlugin.classPK
���kCŒˆvÓ`��%��#�����������¤5��play/modules/fileauth/ScanJob.classPK
���kCÎǘ	��%��*�����������¤Ö��play/modules/fileauth/utils/MD5Crypt.classPK��������Ÿ����PK�����*†9DÔQ.^Þ���Þ���ë��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/routes# This file defines all module routes (Higher priority routes first)
#
# import these routes in the main app as :
# *     /                       module:play-file-auth
#
# ~~~~

GET     /?                      Module.indexPK�����*†9D1Sù*T���T���õ��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/application.confapplication.name=play-file-auth
application.mode=dev
application.secret=test
db=mem
PK�����*†9Dæ´(ÕJ���J���õ��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/dependencies.ymlself: play -> play-file-auth 0.2

require:
    - play
    - play -> securePK�����*†9DÌ;¨U¬���¬���í��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/messages# Default play-file-auth messages
# You can specialize this file for each language.
# For exemple, for french create a messages.fr file

#play-file-auth.name=play-file-authPK�����*†9D������������ð��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play.pluginsPK�����*†9DˆŽ6©™��™����samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/ScanJob.java/**
 * ScanJob
 * 31.07.2012
 * @author Philipp Haussleiter
 *
 */
package play.modules.fileauth;

import play.jobs.Every;
import play.jobs.Job;

/**
 * Periodically Scan of user/group files. Scan runs every 5 mins.
 * @author Philipp Haußleiter
 */
@Every("5min")
public class ScanJob extends Job {
    @Override
    public void doJob(){
        FileAuth.scanUsers();
        FileAuth.scanGroups();
    }
}
PK�����*†9DlP¨å��å����samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/FileAuth.java/**
 * FileAuth 31.07.2012
 *
 * @author Philipp Haussleiter
 *
 */
package play.modules.fileauth;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import play.Logger;
import play.Play;
import play.cache.Cache;
import play.modules.fileauth.utils.MD5Crypt;

/**
 * Basic Wrapper for all FileAuth Functions.
 *
 * @author Philipp Haußleiter
 */
public class FileAuth {

    /* Cache Key for User/PasswordHash Map */
    public final static String AUTH_FILE_USERS_CACHE_KEY = "AUTH_FILE_USERS";
    /* Cache Key for Group/Users Map */
    public final static boolean IS_ENABLED = isEnabled();
    public final static String AUTH_FILE_GROUPS_CACHE_KEY = "AUTH_FILE_GROUPS";
    private final static String CACHE_TIMEOUT = "5mn";

    /**
     * Returns a Map of all Users (user/password hash).
     *
     * @return the Map.
     */
    public static Map<String, String> getUsers() {
        if (!IS_ENABLED) {
            return new HashMap<String, String>();
        }
        Map<String, String> users = Cache.get(AUTH_FILE_USERS_CACHE_KEY, HashMap.class);
        if (users == null) {
            users = scanUsers();
        }
        return users;
    }

    /**
     * Returns a Map of all Groups (groups/usernames).
     *
     * @return the Map.
     */
    public static Map<String, Set<String>> getGroups() {
        if (!IS_ENABLED) {
            return new HashMap<String, Set<String>>();
        }
        Map<String, Set<String>> groups = Cache.get(AUTH_FILE_GROUPS_CACHE_KEY, HashMap.class);
        if (groups == null) {
            groups = scanGroups();
        }
        return groups;
    }

    /**
     * Checks if a group contains a given username.
     *
     * @param group the Group to check.
     * @param user the user to check.
     * @return true if user is in group, otherwise false.
     */
    public static boolean contains(String group, String user) {
        if (!IS_ENABLED) {
            return true;
        }
        if (group == null || user == null) {
            return false;
        }
        Map<String, Set<String>> groups = getGroups();
        Set<String> groupUsers = groups.get(group);
        if (groupUsers == null) {
            return false;
        }
        return groupUsers.contains(user);
    }

    /**
     * Validates an user with a given password agains the user/password hash
     * mapping.
     *
     * @param user the given user.
     * @param password the given password (clear text).
     * @return true if validation okay, otherwise false.
     */
    public static boolean validate(String user, String password) {
        if (!IS_ENABLED) {
            return true;
        }
        if (user == null || password == null) {
            return false;
        }
        Map<String, String> users = getUsers();
        String encryptedPass = users.get(user);
        if (encryptedPass == null) {
            return false;
        }
        return MD5Crypt.verifyPassword(password, encryptedPass);
    }

    /**
     * Rescans the users file.
     *
     * @return the updated Map of users.
     */
    public static Map<String, String> scanUsers() {
        String fileName = Play.configuration.getProperty("authfile.users.path");
        String delimeter1 = Play.configuration.getProperty("authfile.users.delimeter", ":");
        Logger.info("@" + System.currentTimeMillis() + " Scanning Users in " + fileName);
        Map<String, String> users = new HashMap<String, String>();
        File file = new File(fileName);
        if (file == null || !file.exists() || !file.isFile()) {
            Logger.warn(fileName + " is not a valid Auth-File!");
        }
        try {
            BufferedReader br = new BufferedReader(new FileReader(file));
            String line;
            String parts[];
            while ((line = br.readLine()) != null) {
                parts = line.split(delimeter1);
                /*
                 * Matches
                 * user:hash
                 * user:hash:uid: ...
                 */
                if (parts.length > 1) {
                    users.put(parts[0].trim(), parts[1].trim());
                }
            }
            Cache.set(AUTH_FILE_USERS_CACHE_KEY, users, CACHE_TIMEOUT);
        } catch (FileNotFoundException ex) {
            Logger.error(ex.getLocalizedMessage(), ex);
        } catch (IOException ex) {
            Logger.error(ex.getLocalizedMessage(), ex);
        }
        Logger.info("found " + users.size() + " mappings");
        return users;
    }

    /**
     * Rescans the groups file.
     *
     * @return the updated Map of groups.
     */
    public static Map<String, Set<String>> scanGroups() {
        String fileName = Play.configuration.getProperty("authfile.groups.path");
        String delimeter1 = Play.configuration.getProperty("authfile.users.delimeter", ":");
        String delimeter2 = Play.configuration.getProperty("authfile.groups.delimeter", " ");
        Logger.info("@" + System.currentTimeMillis() + " Scanning Groups in " + fileName);
        Map<String, Set<String>> groups = new HashMap<String, Set<String>>();
        File file = new File(fileName);
        if (file == null || !file.exists() || !file.isFile()) {
            Logger.warn(fileName + " is not a valid Auth-File!");
        }
        try {
            BufferedReader br = new BufferedReader(new FileReader(file));
            String line;
            String parts[];
            String userParts[];
            Set<String> users;
            while ((line = br.readLine()) != null) {
                parts = line.split(delimeter1);
                if (parts.length > 1) {
                    if (parts.length > 2) {
                        userParts = parts[parts.length - 1].split(delimeter2);
                    } else {
                        userParts = parts[1].split(delimeter2);
                    }
                    if (userParts.length > 0) {
                        users = new HashSet<String>();
                        for (String user : userParts) {
                            users.add(user.trim());
                        }
                        groups.put(parts[0].trim(), users);
                    }
                }
            }
            Cache.set(AUTH_FILE_GROUPS_CACHE_KEY, groups, CACHE_TIMEOUT);
        } catch (FileNotFoundException ex) {
            Logger.error(ex.getLocalizedMessage(), ex);
        } catch (IOException ex) {
            Logger.error(ex.getLocalizedMessage(), ex);
        }
        Logger.info("found " + groups.size() + " mappings");
        return groups;
    }

    private static boolean isEnabled() {
        if (Play.configuration.getProperty("authfile.users.path") == null
                || Play.configuration.getProperty("authfile.groups.path") == null) {
            Logger.info("FileAuth not enabled. authfile.users.path or authfile.groups.path not set!");
            return false;
        }
        return true;

    }
}
PK�����*†9D4ÿÑ^º��º��
��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/FileAuthPlugin.java/**
 * FileAuthPlugin
 * 31.07.2012
 * @author Philipp Haussleiter
 *
 */
package play.modules.fileauth;

import play.PlayPlugin;

/**
 * Entry Class for first file scan.
 * @author Philipp Haußleiter
 */
public class FileAuthPlugin extends PlayPlugin {

    /**
     * Trigger to scan the files for the first Time.
     */
    @Override
    public void onApplicationStart() {
        ScanJob job = new ScanJob();
        job.now();
    }
}
PK�����*†9DYí΁1��1��
��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/utils/MD5Crypt.java/*

MD5Crypt.java

Created: 3 November 1999

Java Port By: Jonathan Abbey, jonabbey@arlut.utexas.edu

Original C Version:
----------------------------------------------------------------------------
"THE BEER-WARE LICENSE" (Revision 42):
<phk@login.dknet.dk> wrote this file.  As long as you retain this notice you
can do whatever you want with this stuff. If we meet some day, and you think
this stuff is worth it, you can buy me a beer in return.   Poul-Henning Kamp
----------------------------------------------------------------------------

This Java Port is  

Copyright (c) 1999-2010 The University of Texas at Austin.

All rights reserved.

Redistribution and use in source and binary form are permitted
provided that distributions retain this entire copyright notice
and comment. Neither the name of the University nor the names of
its contributors may be used to endorse or promote products
derived from this software without specific prior written
permission. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE.

 */
package play.modules.fileauth.utils;

import java.security.MessageDigest;

/*------------------------------------------------------------------------------
class
MD5Crypt

------------------------------------------------------------------------------*/
/**
 * This class defines a method,
 * {@link MD5Crypt#crypt(java.lang.String, java.lang.String) crypt()}, which
 * takes a password and a salt string and generates an OpenBSD/FreeBSD/Linux-compatible
 * md5-encoded password entry.
 */
public final class MD5Crypt {

    /**
     * Command line test rig.
     */
    static public void main(String argv[]) {
        if ((argv.length < 1) || (argv.length > 3)) {
            System.err.println("Usage: MD5Crypt [-apache] password salt");
            System.exit(1);
        }

        if (argv.length == 3) {
            System.err.println(MD5Crypt.apacheCrypt(argv[1], argv[2]));
        } else if (argv.length == 2) {
            System.err.println(MD5Crypt.crypt(argv[0], argv[1]));
        } else {
            System.err.println(MD5Crypt.crypt(argv[0]));
        }

        System.exit(0);
    }
    public static final String SALTCHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
    public static final String itoa64 = "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";

    public static final String to64(long v, int size) {
        StringBuilder result = new StringBuilder();

        while (--size >= 0) {
            result.append(itoa64.charAt((int) (v & 0x3f)));
            v >>>= 6;
        }

        return result.toString();
    }

    public static final void clearbits(byte bits[]) {
        for (int i = 0; i < bits.length; i++) {
            bits[i] = 0;
        }
    }

    /**
     * convert an encoded unsigned byte value into a int
     * with the unsigned value.
     */
    public static final int bytes2u(byte inp) {
        return (int) inp & 0xff;
    }

    static private MessageDigest getMD5() {
        try {
            return MessageDigest.getInstance("MD5");
        } catch (java.security.NoSuchAlgorithmException ex) {
            throw new RuntimeException(ex);
        }
    }

    /**
     * <p>This method actually generates a OpenBSD/FreeBSD/Linux PAM compatible
     * md5-encoded password hash from a plaintext password and a
     * salt.</p>
     *
     * <p>The resulting string will be in the form '$1$&lt;salt&gt;$&lt;hashed mess&gt;</p>
     *
     * @param password Plaintext password
     *
     * @return An OpenBSD/FreeBSD/Linux-compatible md5-hashed password field.
     */
    public static final String crypt(String password) {
        StringBuilder salt = new StringBuilder();
        java.util.Random randgen = new java.util.Random();

        /* -- */

        while (salt.length() < 8) {
            int index = (int) (randgen.nextFloat() * SALTCHARS.length());
            salt.append(SALTCHARS.substring(index, index + 1));
        }

        return MD5Crypt.crypt(password, salt.toString());
    }

    /**
     * <p>This method actually generates a OpenBSD/FreeBSD/Linux PAM compatible
     * md5-encoded password hash from a plaintext password and a
     * salt.</p>
     *
     * <p>The resulting string will be in the form '$1$&lt;salt&gt;$&lt;hashed mess&gt;</p>
     *
     * @param password Plaintext password
     * @param salt A short string to use to randomize md5.  May start with $1$, which
     *             will be ignored.  It is explicitly permitted to pass a pre-existing
     *             MD5Crypt'ed password entry as the salt.  crypt() will strip the salt
     *             chars out properly.
     *
     * @return An OpenBSD/FreeBSD/Linux-compatible md5-hashed password field.
     */
    public static final String crypt(String password, String salt) {
        return MD5Crypt.crypt(password, salt, "$1$");
    }

    /**
     * <p>This method generates an Apache MD5 compatible
     * md5-encoded password hash from a plaintext password and a
     * salt.</p>
     *
     * <p>The resulting string will be in the form '$apr1$&lt;salt&gt;$&lt;hashed mess&gt;</p>
     *
     * @param password Plaintext password
     *
     * @return An Apache-compatible md5-hashed password string.
     */
    public static final String apacheCrypt(String password) {
        StringBuilder salt = new StringBuilder();
        java.util.Random randgen = new java.util.Random();

        /* -- */

        while (salt.length() < 8) {
            int index = (int) (randgen.nextFloat() * SALTCHARS.length());
            salt.append(SALTCHARS.substring(index, index + 1));
        }

        return MD5Crypt.apacheCrypt(password, salt.toString());
    }

    /**
     * <p>This method actually generates an Apache MD5 compatible
     * md5-encoded password hash from a plaintext password and a
     * salt.</p>
     *
     * <p>The resulting string will be in the form '$apr1$&lt;salt&gt;$&lt;hashed mess&gt;</p>
     *
     * @param password Plaintext password
     * @param salt A short string to use to randomize md5.  May start with $apr1$, which
     *             will be ignored.  It is explicitly permitted to pass a pre-existing
     *             MD5Crypt'ed password entry as the salt.  crypt() will strip the salt
     *             chars out properly.
     *
     * @return An Apache-compatible md5-hashed password string.
     */
    public static final String apacheCrypt(String password, String salt) {
        return MD5Crypt.crypt(password, salt, "$apr1$");
    }

    /**
     * <p>This method actually generates md5-encoded password hash from
     * a plaintext password, a salt, and a magic string.</p>
     *
     * <p>There are two magic strings that make sense to use here.. '$1$' is the
     * magic string used by the FreeBSD/Linux/OpenBSD MD5Crypt algorithm, and
     * '$apr1$' is the magic string used by the Apache MD5Crypt algorithm.</p>
     *
     * <p>The resulting string will be in the form '&lt;magic&gt;&lt;salt&gt;$&lt;hashed mess&gt;</p>
     *
     * @param password Plaintext password
     * @param salt A short string to use to randomize md5.  May start
     * with the magic string, which will be ignored.  It is explicitly
     * permitted to pass a pre-existing MD5Crypt'ed password entry as
     * the salt.  crypt() will strip the salt chars out properly.
     * @param magic Either "$apr1$" or "$1$", which controls whether we
     * are doing Apache-style or FreeBSD-style md5Crypt.
     *
     * @return An md5-hashed password string.
     */
    public static final String crypt(String password, String salt, String magic) {
        /* This string is magic for this algorithm.  Having it this way,
         * we can get get better later on */

        byte finalState[];
        MessageDigest ctx, ctx1;
        long l;

        /* -- */

        /* Refine the Salt first */

        /* If it starts with the magic string, then skip that */

        if (salt.startsWith(magic)) {
            salt = salt.substring(magic.length());
        }

        /* It stops at the first '$', max 8 chars */

        if (salt.indexOf('$') != -1) {
            salt = salt.substring(0, salt.indexOf('$'));
        }

        if (salt.length() > 8) {
            salt = salt.substring(0, 8);
        }

        ctx = getMD5();

        ctx.update(password.getBytes());    // The password first, since that is what is most unknown
        ctx.update(magic.getBytes());    // Then our magic string
        ctx.update(salt.getBytes());    // Then the raw salt

        /* Then just as many characters of the MD5(pw,salt,pw) */

        ctx1 = getMD5();
        ctx1.update(password.getBytes());
        ctx1.update(salt.getBytes());
        ctx1.update(password.getBytes());
        finalState = ctx1.digest();

        for (int pl = password.length(); pl > 0; pl -= 16) {
            ctx.update(finalState, 0, pl > 16 ? 16 : pl);
        }

        /* the original code claimed that finalState was being cleared
        to keep dangerous bits out of memory, but doing this is also
        required in order to get the right output. */

        clearbits(finalState);

        /* Then something really weird... */

        for (int i = password.length(); i != 0; i >>>= 1) {
            if ((i & 1) != 0) {
                ctx.update(finalState, 0, 1);
            } else {
                ctx.update(password.getBytes(), 0, 1);
            }
        }

        finalState = ctx.digest();

        /*
         * and now, just to make sure things don't run too fast
         * On a 60 Mhz Pentium this takes 34 msec, so you would
         * need 30 seconds to build a 1000 entry dictionary...
         *
         * (The above timings from the C version)
         */

        for (int i = 0; i < 1000; i++) {
            ctx1.reset();

            if ((i & 1) != 0) {
                ctx1.update(password.getBytes());
            } else {
                ctx1.update(finalState, 0, 16);
            }

            if ((i % 3) != 0) {
                ctx1.update(salt.getBytes());
            }

            if ((i % 7) != 0) {
                ctx1.update(password.getBytes());
            }

            if ((i & 1) != 0) {
                ctx1.update(finalState, 0, 16);
            } else {
                ctx1.update(password.getBytes());
            }

            finalState = ctx1.digest();
        }

        /* Now make the output string */

        StringBuilder result = new StringBuilder();

        result.append(magic);
        result.append(salt);
        result.append("$");

        l = (bytes2u(finalState[0]) << 16) | (bytes2u(finalState[6]) << 8) | bytes2u(finalState[12]);
        result.append(to64(l, 4));

        l = (bytes2u(finalState[1]) << 16) | (bytes2u(finalState[7]) << 8) | bytes2u(finalState[13]);
        result.append(to64(l, 4));

        l = (bytes2u(finalState[2]) << 16) | (bytes2u(finalState[8]) << 8) | bytes2u(finalState[14]);
        result.append(to64(l, 4));

        l = (bytes2u(finalState[3]) << 16) | (bytes2u(finalState[9]) << 8) | bytes2u(finalState[15]);
        result.append(to64(l, 4));

        l = (bytes2u(finalState[4]) << 16) | (bytes2u(finalState[10]) << 8) | bytes2u(finalState[5]);
        result.append(to64(l, 4));

        l = bytes2u(finalState[11]);
        result.append(to64(l, 2));

        /* Don't leave anything around in vm they could use. */
        clearbits(finalState);

        return result.toString();
    }

    /**
     * This method tests a plaintext password against a md5Crypt'ed hash and returns
     * true if the password matches the hash.
     *
     * This method will work properly whether the hashtext was crypted
     * using the default FreeBSD md5Crypt algorithm or the Apache
     * md5Crypt variant.
     *
     * @param plaintextPass The plaintext password text to test.
     * @param md5CryptText The Apache or FreeBSD-md5Crypted hash used to authenticate the plaintextPass.
     */
    public static final boolean verifyPassword(String plaintextPass, String md5CryptText) {
        if (md5CryptText.startsWith("$1$")) {
            return md5CryptText.equals(MD5Crypt.crypt(plaintextPass, md5CryptText));
        } else if (md5CryptText.startsWith("$apr1$")) {
            return md5CryptText.equals(MD5Crypt.apacheCrypt(plaintextPass, md5CryptText));
        } else {
            throw new RuntimeException("Bad md5CryptText");
        }
    }
}
PK�����*†9D—5Kùõ��õ����samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/app/controllers/AuthFileSecurity.java/**
 * AuthFileSecurity
 * 31.07.2012
 * @author Philipp Haussleiter
 *
 */
package controllers;

import java.util.Map;
import play.modules.fileauth.FileAuth;

/**
 * This Class provides basice Security Functions for the Play! Security Plugin.
 * @author Philipp Haußleiter
 * <p>
 * Usage:
 * @With(Secure.class)
 * public class Application extends Controller {
 * ...
 * }
 *
 * </p>
 */
public class AuthFileSecurity extends Secure.Security {

    /**
     * Authentify an user against the given AuthFile.
     * @param username the given username.
     * @param password the given password.
     * @return true if username and password matches, otherwise false.
     */
    public static boolean authentify(String username, String password) {
        Map<String,String> users = FileAuth.getUsers();
        String userPassword = users.get(username.toLowerCase());
        return userPassword.equals(password);
    }

    /**
     * Checks if the current user (that is loged in) has the profile (e.g. is in the group).
     * @param profile
     * @return true if the current user has the profile, otherwise false.
     */
    public static boolean check(String profile) {
        String user = connected();
        return FileAuth.contains(profile, user);
    }
}
PK�����*†9D&ÿ‰è¤��¤����samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/documentation/manual/home.textileh1. {module name}

p(note). Write your module documentation in this file, possibly linking to other Textile files, and delete these notes when you are finished.

p(note). Start with a clear statement of what the module is and what it is for. Link to any third-party libraries that the module is based on.

p(note). Briefly describe why you might want to use this module in a Play application.

h2. Sample application

p(note). Your module should contain a sample app in the @sample@ directory that demonstrates the module. Describe how to run the demo here.

h2. Getting started

p(note). Describe any installation that is required, beyond adding and resolving the module dependency.

h2. Configuration

p(note). List any configuration options that the module uses, with an @h3.@ heading for each one.

h2. Usage

p(note). Explain how to use the module, and describe any routes, controllers, models or views that the module provides.

h2. Tags

p(note). List any tags the module provides, with an @h3.@ heading for each one. Include the tags’ arguments.

h2. Commands

p(note). List any commands the module provides, with an @h3.@ heading for each one. Include the commands’ options.
PK�����*†9D´šü¯��¯����samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/public/images/favicon.png‰PNG

���
IHDR���������óÿa���tEXtSoftware�Adobe ImageReadyqÉe<��QIDATxÚ”SËNA=U]5]Ý=ï1agŒhf£+0ˆ‰Á †n\¹gãÒ¿p#ì4¢?`t¯	WFƒH$H$dŒ™Gw•·›o÷M×+çœ{O53Æàú�Œ^sÑIšéJáü½Bnà18­ÃC_­fÛG©8ˆk#7€h—BÈ,KÀMª±SçrÕMwav©^›i4v<‹	ü+"�ÎmJÛQea+¤Žed×§–¼zYßü2(¬cŒÐFp¡ìÓ`
Aƒ›ÈBåý¡5ÿÍܧ·™±¨"«€¤úeV(§æÐ<±!D‰.7³é®Ì.®×fÚ~Ë#šÃ�¶HUÊÍ84ÞÍ@<x™XWcê}}þÅ÷­oUÉåáHÛ)	åqMìûεVˆ©4…øðòÎÛ¹•úÒ-?ð#�±«@€ÕÇe<êGhíÁ—8ÙšêéÛO¶?Ó^æ]`4Ùh».<b$ߏè¶6­vùD/&‡oΧ¼´¿§€qeK?îE—å/fzš~Žt1^šX½\{äż´µ¶Ð·”wÒ„è}~_ûHû`~`ûzÿ•gÅô‰û´üúO‚ÀN¯T‰È1”²OöàjåRm¨xvšŽ=¥Ü9XZÀ¥ªXvœic£Au†r'Ê£«ãå’ë<¤#Ÿ;]å@:‰J`)úQ8ªÝ}[“ý£Ï‹™®Cr;ð˜“ëNå1Y©
Êå¡çk_7.üj5ïÒ¸Îÿ'0�Û¤û»ý
����IEND®B`‚PK�����*†9Dä |;f�f�'��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/public/javascripts/jquery-1.6.4.min.js/*! jQuery v1.6.4 http://jquery.com/ | http://jquery.org/license */
(function(a,b){function cu(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cr(a){if(!cg[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ch||(ch=c.createElement("iframe"),ch.frameBorder=ch.width=ch.height=0),b.appendChild(ch);if(!ci||!ch.createElement)ci=(ch.contentWindow||ch.contentDocument).document,ci.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),ci.close();d=ci.createElement(a),ci.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ch)}cg[a]=e}return cg[a]}function cq(a,b){var c={};f.each(cm.concat.apply([],cm.slice(0,b)),function(){c[this]=a});return c}function cp(){cn=b}function co(){setTimeout(cp,0);return cn=f.now()}function cf(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ce(){try{return new a.XMLHttpRequest}catch(b){}}function b$(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function bZ(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function bY(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bA.test(a)?d(a,e):bY(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)bY(a+"["+e+"]",b[e],c,d);else d(a,b)}function bX(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function bW(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bP,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=bW(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=bW(a,c,d,e,"*",g));return l}function bV(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bL),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function by(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bt:bu;if(d>0){c!=="border"&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0});return d+"px"}d=bv(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+this))||0)});return d+"px"}function bl(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bd,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bk(a){f.nodeName(a,"input")?bj(a):"getElementsByTagName"in a&&f.grep(a.getElementsByTagName("input"),bj)}function bj(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bi(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function bh(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bg(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;e=e[c]=f.extend({},d);if(g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;i<j;i++)f.event.add(b,h+(g[h][i].namespace?".":"")+g[h][i].namespace,g[h][i],g[h][i].data)}}}}function bf(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function V(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(Q.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function U(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function M(a,b){return(a&&a!=="*"?a+".":"")+b.replace(y,"`").replace(z,"&")}function L(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;i<s.length;i++)g=s[i],g.origType.replace(w,"")===a.type?q.push(g.selector):s.splice(i--,1);e=f(a.target).closest(q,a.currentTarget);for(j=0,k=e.length;j<k;j++){m=e[j];for(i=0;i<s.length;i++){g=s[i];if(m.selector===g.selector&&(!n||n.test(g.namespace))&&!m.elem.disabled){h=m.elem,d=null;if(g.preType==="mouseenter"||g.preType==="mouseleave")a.type=g.preType,d=f(a.relatedTarget).closest(g.selector)[0],d&&f.contains(h,d)&&(d=h);(!d||d!==h)&&p.push({elem:h,handleObj:g,level:m.level})}}}for(j=0,k=p.length;j<k;j++){e=p[j];if(c&&e.level>c)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function J(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function D(){return!0}function C(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function K(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(K,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=/-([a-z]|[0-9])/ig,x=/^-ms-/,y=function(a,b){return(b+"").toUpperCase()},z=d.userAgent,A,B,C,D=Object.prototype.toString,E=Object.prototype.hasOwnProperty,F=Array.prototype.push,G=Array.prototype.slice,H=String.prototype.trim,I=Array.prototype.indexOf,J={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6.4",length:0,size:function(){return this.length},toArray:function(){return G.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?F.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),B.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(G.apply(this,arguments),"slice",G.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:F,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;B.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!B){B=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",C,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",C),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&K()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):J[D.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!E.call(a,"constructor")&&!E.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||E.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(x,"ms-").replace(w,y)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:H?function(a){return a==null?"":H.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?F.call(c,a):e.merge(c,a)}return c},inArray:function(a,b){if(!b)return-1;if(I)return I.call(b,a);for(var c=0,d=b.length;c<d;c++)if(b[c]===a)return c;return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=G.call(arguments,2),g=function(){return a.apply(c,f.concat(G.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=s.exec(a)||t.exec(a)||u.exec(a)||a.indexOf("compatible")<0&&v.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){J["[object "+b+"]"]=b.toLowerCase()}),A=e.uaMatch(z),A.browser&&(e.browser[A.browser]=!0,e.browser.version=A.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?C=function(){c.removeEventListener("DOMContentLoaded",C,!1),e.ready()}:c.attachEvent&&(C=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",C),e.ready())});return e}(),g="done fail isResolved isRejected promise then always pipe".split(" "),h=[].slice;f.extend({_Deferred:function(){var a=[],b,c,d,e={done:function(){if(!d){var c=arguments,g,h,i,j,k;b&&(k=b,b=0);for(g=0,h=c.length;g<h;g++)i=c[g],j=f.type(i),j==="array"?e.done.apply(e,i):j==="function"&&a.push(i);k&&e.resolveWith(k[0],k[1])}return this},resolveWith:function(e,f){if(!d&&!b&&!c){f=f||[],c=1;try{while(a[0])a.shift().apply(e,f)}finally{b=[e,f],c=0}}return this},resolve:function(){e.resolveWith(this,arguments);return this},isResolved:function(){return!!c||!!b},cancel:function(){d=1,a=[];return this}};return e},Deferred:function(a){var b=f._Deferred(),c=f._Deferred(),d;f.extend(b,{then:function(a,c){b.done(a).fail(c);return this},always:function(){return b.done.apply(b,arguments).fail.apply(this,arguments)},fail:c.done,rejectWith:c.resolveWith,reject:c.resolve,isRejected:c.isResolved,pipe:function(a,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[c,"reject"]},function(a,c){var e=c[0],g=c[1],h;f.isFunction(e)?b[a](function(){h=e.apply(this,arguments),h&&f.isFunction(h.promise)?h.promise().then(d.resolve,d.reject):d[g+"With"](this===b?d:this,[h])}):b[a](d[g])})}).promise()},promise:function(a){if(a==null){if(d)return d;d=a={}}var c=g.length;while(c--)a[g[c]]=b[g[c]];return a}}),b.done(c.cancel).fail(b.cancel),delete b.cancel,a&&a.call(b,b);return b},when:function(a){function i(a){return function(c){b[a]=arguments.length>1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c<d;c++)b[c]&&f.isFunction(b[c].promise)?b[c].promise().then(i(c),g.reject):--e;e||g.resolveWith(g,b)}else g!==a&&g.resolveWith(g,d?[a]:[]);return g.promise()}}),f.support=function(){var a=c.createElement("div"),b=c.documentElement,d,e,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;a.setAttribute("className","t"),a.innerHTML="   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55$/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue=i.value==="t",i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.firstChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},m&&f.extend(p,{position:"absolute",left:"-1000px",top:"-1000px"});for(t in p)o.style[t]=p[t];o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,k.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="<div style='width:4px;'></div>",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",q=a.getElementsByTagName("td"),u=q[0].offsetHeight===0,q[0].style.display="",q[1].style.display="none",k.reliableHiddenOffsets=u&&q[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",a.appendChild(j),k.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0),o.innerHTML="",n.removeChild(o);if(a.attachEvent)for(t in{submit:1,change:1,focusin:1})s="on"+t,u=s in a,u||(a.setAttribute(s,"return;"),u=typeof a[s]=="function"),k[t+"Bubbles"]=u;o=l=g=h=m=j=a=i=null;return k}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i=f.expando,j=typeof c=="string",k=a.nodeType,l=k?f.cache:a,m=k?a[f.expando]:a[f.expando]&&f.expando;if((!m||e&&m&&l[m]&&!l[m][i])&&j&&d===b)return;m||(k?a[f.expando]=m=++f.uuid:m=f.expando),l[m]||(l[m]={},k||(l[m].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?l[m][i]=f.extend(l[m][i],c):l[m]=f.extend(l[m],c);g=l[m],e&&(g[i]||(g[i]={}),g=g[i]),d!==b&&(g[f.camelCase(c)]=d);if(c==="events"&&!g[c])return g[i]&&g[i].events;j?(h=g[c],h==null&&(h=g[f.camelCase(c)])):h=g;return h}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e=f.expando,g=a.nodeType,h=g?f.cache:a,i=g?a[f.expando]:f.expando;if(!h[i])return;if(b){d=c?h[i][e]:h[i];if(d){d[b]||(b=f.camelCase(b)),delete d[b];if(!l(d))return}}if(c){delete h[i][e];if(!l(h[i]))return}var j=h[i][e];f.support.deleteExpando||!h.setInterval?delete h[i]:h[i]=null,j?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=j):g&&(f.support.deleteExpando?delete a[f.expando]:a.removeAttribute?a.removeAttribute(f.expando):a[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h<i;h++)g=e[h].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),k(this[0],g,d[g]))}}return d}if(typeof a=="object")return this.each(function(){f.data(this,a)});var j=a.split(".");j[1]=j[1]?"."+j[1]:"";if(c===b){d=this.triggerHandler("getData"+j[1]+"!",[j[0]]),d===b&&this.length&&(d=f.data(this[0],a),d=k(this[0],a,d));return d===b&&j[1]?this.data(j[0]):d}return this.each(function(){var b=f(this),d=[j[0],c];b.triggerHandler("setData"+j[1]+"!",d),f.data(this,a,c),b.triggerHandler("changeData"+j[1]+"!",d)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,c){a&&(c=(c||"fx")+"mark",f.data(a,c,(f.data(a,c,b,!0)||0)+1,!0))},_unmark:function(a,c,d){a!==!0&&(d=c,c=a,a=!1);if(c){d=d||"fx";var e=d+"mark",g=a?0:(f.data(c,e,b,!0)||1)-1;g?f.data(c,e,g,!0):(f.removeData(c,e,!0),m(c,d,"mark"))}},queue:function(a,c,d){if(a){c=(c||"fx")+"queue";var e=f.data(a,c,b,!0);d&&(!e||f.isArray(d)?e=f.data(a,c,f.makeArray(d),!0):e.push(d));return e||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e;d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),d.call(a,function(){f.dequeue(a,b)})),c.length||(f.removeData(a,b+"queue",!0),m(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(){var c=this;setTimeout(function(){f.dequeue(c,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f._Deferred(),!0))h++,l.done(m);m();return d.promise()}});var n=/[\n\t\r]/g,o=/\s+/,p=/\r/g,q=/^(?:button|input)$/i,r=/^(?:button|input|object|select|textarea)$/i,s=/^a(?:rea)?$/i,t=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,u,v;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(o);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(o);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(n," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(o);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ";for(var c=0,d=this.length;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(n," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;d=e.value;return typeof d=="string"?d.replace(p,""):d==null?"":d}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c=a.selectedIndex,d=[],e=a.options,g=a.type==="select-one";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h<i;h++){var j=e[h];if(j.selected&&(f.support.optDisabled?!j.disabled:j.getAttribute("disabled")===null)&&(!j.parentNode.disabled||!f.nodeName(j.parentNode,"optgroup"))){b=f(j).val();if(g)return b;d.push(b)}}if(g&&!d.length&&e.length)return f(e[c]).val();return d},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);j&&(c=f.attrFix[c]||c,i=f.attrHooks[c],i||(t.test(c)?i=v:u&&(i=u)));if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j&&(h=i.get(a,c))!==null)return h;h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.attr(a,b,""),a.removeAttribute(b),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(u&&f.nodeName(a,"button"))return u.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(u&&f.nodeName(a,"button"))return u.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);i&&(c=f.propFix[c]||c,h=f.propHooks[c]);return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==null?g:a[c]},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabIndex=f.propHooks.tabIndex,v={get:function(a,c){var d;return f.prop(a,c)===!0||(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},f.support.getSetAttribute||(u=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==""?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var w=/\.(.*)$/,x=/^(?:textarea|input|select)$/i,y=/\./g,z=/ /g,A=/[^\w\s.|`]/g,B=function(a){return a.replace(A,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=C;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=C);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),B).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j<p.length;j++){q=p[j];if(l||n.test(q.namespace))f.event.remove(a,r,q.handler,j),p.splice(j--,1)}continue}o=f.event.special[h]||{};for(j=e||0;j<p.length;j++){q=p[j];if(d.guid===q.guid){if(l||n.test(q.namespace))e==null&&p.splice(j--,1),o.remove&&o.remove.call(a,q);if(e!=null)break}}if(p.length===0||e!=null&&p.length===1)(!o.teardown||o.teardown.call(a,m)===!1)&&f.removeEvent(a,h,s.handle),g=null,delete 
t[h]}if(f.isEmptyObject(t)){var u=s.handle;u&&(u.elem=null),delete s.events,delete s.handle,f.isEmptyObject(s)&&f.removeData(a,b,!0)}}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){var h=c.type||c,i=[],j;h.indexOf("!")>=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d!=null?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h<i;h++){var j=d[h];if(e||c.namespace_re.test(j.namespace)){c.handler=j.handler,c.data=j.data,c.handleObj=j;var k=j.handler.apply(this,g);k!==b&&(c.result=k,k===!1&&(c.preventDefault(),c.stopPropagation()));if(c.isImmediatePropagationStopped())break}}return c.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(a){if(a[f.expando])return a;var d=a;a=f.Event(d);for(var e=this.props.length,g;e;)g=this.props[--e],a[g]=d[g];a.target||(a.target=a.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),!a.relatedTarget&&a.fromElement&&(a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement);if(a.pageX==null&&a.clientX!=null){var h=a.target.ownerDocument||c,i=h.documentElement,j=h.body;a.pageX=a.clientX+(i&&i.scrollLeft||j&&j.scrollLeft||0)-(i&&i.clientLeft||j&&j.clientLeft||0),a.pageY=a.clientY+(i&&i.scrollTop||j&&j.scrollTop||0)-(i&&i.clientTop||j&&j.clientTop||0)}a.which==null&&(a.charCode!=null||a.keyCode!=null)&&(a.which=a.charCode!=null?a.charCode:a.keyCode),!a.metaKey&&a.ctrlKey&&(a.metaKey=a.ctrlKey),!a.which&&a.button!==b&&(a.which=a.button&1?1:a.button&2?3:a.button&4?2:0);return a},guid:1e8,proxy:f.proxy,special:{ready:{setup:f.bindReady,teardown:f.noop},live:{add:function(a){f.event.add(this,M(a.origType,a.selector),f.extend({},a,{handler:L,guid:a.handler.guid}))},remove:function(a){f.event.remove(this,M(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}}},f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!this.preventDefault)return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?D:C):this.type=a,b&&f.extend(this,b),this.timeStamp=f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=D;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=D;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=D,this.stopPropagation()},isDefaultPrevented:C,isPropagationStopped:C,isImmediatePropagationStopped:C};var E=function(a){var b=a.relatedTarget,c=!1,d=a.type;a.type=a.data,b!==this&&(b&&(c=f.contains(this,b)),c||(f.event.handle.apply(this,arguments),a.type=d))},F=function(a){a.type=a.data,f.event.handle.apply(this,arguments)};f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={setup:function(c){f.event.add(this,b,c&&c.selector?F:E,a)},teardown:function(a){f.event.remove(this,b,a&&a.selector?F:E)}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(a,b){if(!f.nodeName(this,"form"))f.event.add(this,"click.specialSubmit",function(a){var b=a.target,c=f.nodeName(b,"input")||f.nodeName(b,"button")?b.type:"";(c==="submit"||c==="image")&&f(b).closest("form").length&&J("submit",this,arguments)}),f.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,c=f.nodeName(b,"input")||f.nodeName(b,"button")?b.type:"";(c==="text"||c==="password")&&f(b).closest("form").length&&a.keyCode===13&&J("submit",this,arguments)});else return!1},teardown:function(a){f.event.remove(this,".specialSubmit")}});if(!f.support.changeBubbles){var G,H=function(a){var b=f.nodeName(a,"input")?a.type:"",c=a.value;b==="radio"||b==="checkbox"?c=a.checked:b==="select-multiple"?c=a.selectedIndex>-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},I=function(c){var d=c.target,e,g;if(!!x.test(d.nodeName)&&!d.readOnly){e=f._data(d,"_change_data"),g=H(d),(c.type!=="focusout"||d.type!=="radio")&&f._data(d,"_change_data",g);if(e===b||g===e)return;if(e!=null||g)c.type="change",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:I,beforedeactivate:I,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&I.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&I.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",H(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in G)f.event.add(this,c+".specialChange",G[c]);return x.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return x.test(this.nodeName)}},G=f.event.special.change.filters,G.focus=G.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i<j;i++)f.event.add(this[i],a,g,d);return this}}),f.fn.extend({unbind:function(a,b){if(typeof a=="object"&&!a.preventDefault)for(var c in a)this.unbind(c,a[c]);else for(var d=0,e=this.length;d<e;d++)f.event.remove(this[d],a,b);return this},delegate:function(a,b,c,d){return this.live(b,c,d,a)},undelegate:function(a,b,c){return arguments.length===0?this.unbind("live"):this.die(b,null,c,a)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f.data(this,"lastToggle"+a.guid)||0)%d;f.data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var K={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};f.each(["live","die"],function(a,c){f.fn[c]=function(a,d,e,g){var h,i=0,j,k,l,m=g||this.selector,n=g?this:f(this.context);if(typeof a=="object"&&!a.preventDefault){for(var o in a)n[c](o,d,a[o],m);return this}if(c==="die"&&!a&&g&&g.charAt(0)==="."){n.unbind(g);return this}if(d===!1||f.isFunction(d))e=d||C,d=b;a=(a||"").split(" ");while((h=a[i++])!=null){j=w.exec(h),k="",j&&(k=j[0],h=h.replace(w,""));if(h==="hover"){a.push("mouseenter"+k,"mouseleave"+k);continue}l=h,K[h]?(a.push(K[h]+k),h=h+k):h=(K[h]||h)+k;if(c==="live")for(var p=0,q=n.length;p<q;p++)f.event.add(n[p],"live."+M(h,m),{data:d,selector:m,handler:e,origType:h,origHandler:e,preType:l});else n.unbind("live."+M(h,m),e)}return this}}),f.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".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}if(i.nodeType===1){f||(i.sizcache=c,i.sizset=g);if(typeof b!="string"){if(i===b){j=!0;break}}else if(k.filter(b,[i]).length>0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}i.nodeType===1&&!f&&(i.sizcache=c,i.sizset=g);if(i.nodeName.toLowerCase()===b){j=i;break}i=i[a]}d[g]=j}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},k.matches=function(a,b){return k(a,null,null,b)},k.matchesSelector=function(a,b){return k(b,null,null,[a]).length>0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e<f;e++){var g,h=l.order[e];if(g=l.leftMatch[h].exec(a)){var j=g[1];g.splice(1,1);if(j.substr(j.length-1)!=="\\"){g[1]=(g[1]||"").replace(i,""),d=l.find[h](g,b,c);if(d!=null){a=a.replace(l.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},k.filter=function(a,c,d,e){var f,g,h=a,i=[],j=c,m=c&&c[0]&&k.isXML(c[0]);while(a&&c.length){for(var n in l.filter)if((f=l.leftMatch[n].exec(a))!=null&&f[2]){var o,p,q=l.filter[n],r=f[1];g=!1,f.splice(1,1);if(r.substr(r.length-1)==="\\")continue;j===i&&(i=[]);if(l.preFilter[n]){f=l.preFilter[n](f,j,d,i,e,m);if(!f)g=o=!0;else if(f===!0)continue}if(f)for(var s=0;(p=j[s])!=null;s++)if(p){o=q(p,f,s,j);var t=e^!!o;d&&o!=null?t?g=!0:j[s]=!1:t&&(i.push(p),g=!0)}if(o!==b){d||(j=i),a=a.replace(l.match[n],"");if(!g)return[];break}}if(a===h)if(g==null)k.error(a);else break;h=a}return j},k.error=function(a){throw"Syntax error, unrecognized expression: "+a};var l=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!j.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&k.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&k.filter(b,a,!0)}},"":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("parentNode",b,f,a,e,c)},"~":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("previousSibling",b,f,a,e,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(i,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}k.error(e)},CHILD:function(a,b){var c=b[1],d=a;switch(c){case"only":case"first":while(d=d.previousSibling)if(d.nodeType===1)return!1;if(c==="first")return!0;d=a;case"last":while(d=d.nextSibling)if(d.nodeType===1)return!1;return!0;case"nth":var e=b[2],f=b[3];if(e===1&&f===0)return!0;var g=b[0],h=a.parentNode;if(h&&(h.sizcache!==g||!a.nodeIndex)){var i=0;for(d=h.firstChild;d;d=d.nextSibling)d.nodeType===1&&(d.nodeIndex=++i);h.sizcache=g}var j=a.nodeIndex-f;return e===0?j===0:j%e===0&&j/e>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c<f;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var r,s;c.documentElement.compareDocumentPosition?r=function(a,b){if(a===b){g=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(r=function(a,b){if(a===b){g=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],h=a.parentNode,i=b.parentNode,j=h;if(h===i)return s(a,b);if(!h)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return s(e[k],f[k]);return k===c?s(a,f[k],-1):s(e[k],b,1)},s=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),k.getText=function(a){var b="",c;for(var d=0;a[d];d++)c=a[d],c.nodeType===3||c.nodeType===4?b+=c.nodeValue:c.nodeType!==8&&(b+=k.getText(c.childNodes));return b},function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g<h;g++)k(a,f[g],d);return k.filter(e,d)};f.find=k,f.expr=k.selectors,f.expr[":"]=f.expr.filters,f.unique=k.uniqueSort,f.text=k.getText,f.isXMLDoc=k.isXML,f.contains=k.contains}();var N=/Until$/,O=/^(?:parents|prevUntil|prevAll)/,P=/,/,Q=/^.[^:#\[\.,]*$/,R=Array.prototype.slice,S=f.expr.match.POS,T={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(V(this,a,!1),"not",a)},filter:function(a){return this.pushStack(V(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d<e;d++)i=a[d],j[i]||(j[i]=S.test(i)?f(i,b||this.context):i);while(g&&g.ownerDocument&&g!==b){for(i in j)h=j[i],(h.jquery?h.index(g)>-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=S.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(l?l.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(U(c[0])||U(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=R.call(arguments);N.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!T[a]?f.unique(e):e,(this.length>1||P.test(d))&&O.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|object|embed|option|style)/i,bb=/checked\s*(?:[^=]|=\s*.checked.)/i,bc=/\/(java|ecma)script/i,bd=/^\s*<!(?:\[CDATA\[|\-\-)/,be={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};be.optgroup=be.option,be.tbody=be.tfoot=be.colgroup=be.caption=be.thead,be.th=be.td,f.support.htmlSerialize||(be._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!be[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bb.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bf(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bl)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i;b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof a[0]=="string"&&a[0].length<512&&i===c&&a[0].charAt(0)==="<"&&!ba.test(a[0])&&(f.support.checkClone||!bb.test(a[0]))&&(g=!0,h=f.fragments[a[0]],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean
(a,i,e,d)),g&&(f.fragments[a[0]]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bh(a,d),e=bi(a),g=bi(d);for(h=0;e[h];++h)g[h]&&bh(e[h],g[h])}if(b){bg(a,d);if(c){e=bi(a),g=bi(d);for(h=0;e[h];++h)bg(e[h],g[h])}}e=g=null;return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=be[l]||be._default,n=m[0],o=b.createElement("div");o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bk(k[i]);else bk(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||bc.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.expando,g=f.event.special,h=f.support.deleteExpando;for(var i=0,j;(j=a[i])!=null;i++){if(j.nodeName&&f.noData[j.nodeName.toLowerCase()])continue;c=j[f.expando];if(c){b=d[c]&&d[c][e];if(b&&b.events){for(var k in b.events)g[k]?f.event.remove(j,k):f.removeEvent(j,k,b.handle);b.handle&&(b.handle.elem=null)}h?delete j[f.expando]:j.removeAttribute&&j.removeAttribute(f.expando),delete d[c]}}}});var bm=/alpha\([^)]*\)/i,bn=/opacity=([^)]*)/,bo=/([A-Z]|^ms)/g,bp=/^-?\d+(?:px)?$/i,bq=/^-?\d/,br=/^([\-+])=([\-+.\de]+)/,bs={position:"absolute",visibility:"hidden",display:"block"},bt=["Left","Right"],bu=["Top","Bottom"],bv,bw,bx;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bv(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=br.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bv)return bv(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return by(a,b,d);f.swap(a,bs,function(){e=by(a,b,d)});return e}},set:function(a,b){if(!bp.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bn.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bm,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bm.test(g)?g.replace(bm,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bv(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bw=function(a,c){var d,e,g;c=c.replace(bo,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bx=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bp.test(d)&&bq.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bv=bw||bx,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bz=/%20/g,bA=/\[\]$/,bB=/\r?\n/g,bC=/#.*$/,bD=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bE=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bF=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bG=/^(?:GET|HEAD)$/,bH=/^\/\//,bI=/\?/,bJ=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bK=/^(?:select|textarea)/i,bL=/\s+/,bM=/([?&])_=[^&]*/,bN=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bO=f.fn.load,bP={},bQ={},bR,bS,bT=["*/"]+["*"];try{bR=e.href}catch(bU){bR=c.createElement("a"),bR.href="",bR=bR.href}bS=bN.exec(bR.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bO)return bO.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bJ,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bK.test(this.nodeName)||bE.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bB,"\r\n")}}):{name:b.name,value:c.replace(bB,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?bX(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),bX(a,b);return a},ajaxSettings:{url:bR,isLocal:bF.test(bS[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bT},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bV(bP),ajaxTransport:bV(bQ),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?bZ(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=b$(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bD.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bC,"").replace(bH,bS[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bL),d.crossDomain==null&&(r=bN.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bS[1]&&r[2]==bS[2]&&(r[3]||(r[1]==="http:"?80:443))==(bS[3]||(bS[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bW(bP,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bG.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bI.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bM,"$1_="+x);d.url=y+(y===d.url?(bI.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bT+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bW(bQ,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){s<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)bY(g,a[g],c,e);return d.join("&").replace(bz,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var b_=f.now(),ca=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+b_++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ca.test(b.url)||e&&ca.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ca,l),b.url===j&&(e&&(k=k.replace(ca,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cb=a.ActiveXObject?function(){for(var a in cd)cd[a](0,1)}:!1,cc=0,cd;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ce()||cf()}:ce,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cb&&delete cd[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cc,cb&&(cd||(cd={},f(a).unload(cb)),cd[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cg={},ch,ci,cj=/^(?:toggle|show|hide)$/,ck=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cl,cm=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cn;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cq("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cr(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cq("hide",3),a,b,c);for(var d=0,e=this.length;d<e;d++)if(this[d].style){var g=f.css(this[d],"display");g!=="none"&&!f._data(this[d],"olddisplay")&&f._data(this[d],"olddisplay",g)}for(d=0;d<e;d++)this[d].style&&(this[d].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cq("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return this[e.queue===!1?"each":"queue"](function(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(f.support.inlineBlockNeedsLayout?(j=cr(this.nodeName),j==="inline"?this.style.display="inline-block":(this.style.display="inline",this.style.zoom=1)):this.style.display="inline-block"))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)k=new f.fx(this,b,i),h=a[i],cj.test(h)?k[h==="toggle"?d?"show":"hide":h]():(l=ck.exec(h),m=k.cur(),l?(n=parseFloat(l[2]),o=l[3]||(f.cssNumber[i]?"":"px"),o!=="px"&&(f.style(this,i,(n||1)+o),m=(n||1)/k.cur()*m,f.style(this,i,m+o)),l[1]&&(n=(l[1]==="-="?-1:1)*n+m),k.custom(m,n,o)):k.custom(m,h,""));return!0})},stop:function(a,b){a&&this.queue([]),this.each(function(){var a=f.timers,c=a.length;b||f._unmark(!0,this);while(c--)a[c].elem===this&&(b&&a[c](!0),a.splice(c,1))}),b||this.dequeue();return this}}),f.each({slideDown:cq("show",1),slideUp:cq("hide",1),slideToggle:cq("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default,d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue!==!1?f.dequeue(this):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,b,c){function g(a){return d.step(a)}var d=this,e=f.fx;this.startTime=cn||co(),this.start=a,this.end=b,this.unit=c||this.unit||(f.cssNumber[this.prop]?"":"px"),this.now=this.start,this.pos=this.state=0,g.elem=this.elem,g()&&f.timers.push(g)&&!cl&&(cl=setInterval(e.tick,e.interval))},show:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.show=!0,this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b=cn||co(),c=!0,d=this.elem,e=this.options,g,h;if(a||b>=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){for(var a=f.timers,b=0;b<a.length;++b)a[b]()||a.splice(b--,1);a.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cl),cl=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit:a.elem[a.prop]=a.now}}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cs=/^t(?:able|d|h)$/i,ct=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cu(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);f.offset.initialize();var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.offset.supportsFixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.offset.doesNotAddBorder&&(!f.offset.doesAddBorderForTableAndCells||!cs.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.offset.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.offset.supportsFixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={initialize:function(){var a=c.body,b=c.createElement("div"),d,e,g,h,i=parseFloat(f.css(a,"marginTop"))||0,j="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=ct.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!ct.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cu(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cu(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a&&a.style?parseFloat(f.css(a,d,"padding")):null},f.fn["outer"+c]=function(a){var b=this[0];return b&&b.style?parseFloat(f.css(b,d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNaN(j)?i:j}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window);PK�����*†9D��������������samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/public/stylesheets/main.cssPK�����*†9D_5¢<���<�����samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/htgroupsroot: root apacheRoot
users: root apacheRoot user apacheUserPK�����*†9D(ÉÆ9������samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/EncryptionTest.java
import org.junit.Test;
import play.Logger;
import play.modules.fileauth.utils.MD5Crypt;
import play.test.UnitTest;

/**
 * EncryptionTest
 * 31.07.2012
 * @author Philipp Haussleiter
 *
 */
public class EncryptionTest extends UnitTest {

    @Test
    public void testApacheCrypt() {
        Logger.info("testing APACHE_CRYPT");
        String clear = "pw_" + System.currentTimeMillis();
        String pass;
        String salt = "abcd1234";
        pass = MD5Crypt.apacheCrypt(clear);
        Logger.info(clear + " got me " + pass);
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
        pass = MD5Crypt.apacheCrypt(clear, salt);
        Logger.info(clear + " & salt " + salt + " got me " + pass);
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
    }

    @Test
    public void testCrypt() {
        Logger.info("testing CRYPT");
        String clear = "pw_" + System.currentTimeMillis();
        String pass;
        String salt = "abcd1234";
        pass = MD5Crypt.crypt(clear);
        Logger.info(clear + " got me " + pass);
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
        pass = MD5Crypt.crypt(clear, salt);
        Logger.info(clear + " & salt " + salt + " got me " + pass);
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
    }
}
PK�����*†9DÛ7²?I��I����samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/ApacheUsersTest.java
import java.util.HashMap;
import java.util.Map;
import org.junit.BeforeClass;
import org.junit.Test;
import play.Play;
import play.cache.Cache;
import play.modules.fileauth.FileAuth;
import play.modules.fileauth.utils.MD5Crypt;
import play.test.UnitTest;

/**
 * ApacheUsersTest
 * 03.08.2012
 * @author Philipp Haussleiter
 *
 */
public class ApacheUsersTest extends UnitTest {

    @BeforeClass
    public static void setup() {
        Play.configuration.setProperty("authfile.users.path", Play.applicationPath + "/test/htusers");
        Play.configuration.setProperty("authfile.users.delimeter", ":");
        Cache.safeDelete(FileAuth.AUTH_FILE_USERS_CACHE_KEY);
    }

    @Test
    public void testUsersRead() {
        FileAuth.scanUsers();
        Map<String, String> users = Cache.get(FileAuth.AUTH_FILE_USERS_CACHE_KEY, HashMap.class);
        assertNotNull(users);
    }

    @Test
    public void testUsersValidate() {
        String clear = "user";
        String pass = MD5Crypt.crypt("user");
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
    }

    @Test
    public void testValidatePassword() {
        String pass = "user";
        String user = "user";
        assertTrue(FileAuth.validate(user, pass));
        user = "apacheUser";
        assertTrue(FileAuth.validate(user, pass));
        user = "user";
        pass = "user123";
        assertFalse(FileAuth.validate(user, pass));
    }

    @Test
    public void testValidateNotExistingUser() {
        String pass = "user123";
        String user = "user123";
        assertFalse(FileAuth.validate(user, pass));
    }
}
PK�����*†9DÄžŒÒù��ù����samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/GroupGroupsTest.java
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.junit.BeforeClass;
import org.junit.Test;
import play.Play;
import play.cache.Cache;
import play.modules.fileauth.FileAuth;
import play.test.UnitTest;

/**
 * GroupGroupsTest
 * 04.08.2012
 * @author Philipp Haussleiter
 *
 */
public class GroupGroupsTest extends UnitTest {

    @BeforeClass
    public static void setup() {
        Play.configuration.setProperty("authfile.groups.path", Play.applicationPath + "/test/group");
        Play.configuration.setProperty("authfile.users.delimeter", ":");
        Play.configuration.setProperty("authfile.groups.delimeter", ",");
        Cache.safeDelete(FileAuth.AUTH_FILE_GROUPS_CACHE_KEY);
    }

    @Test
    public void testUsersRead() {
        FileAuth.scanGroups();
        Map<String, Set<String>> groups = Cache.get(FileAuth.AUTH_FILE_GROUPS_CACHE_KEY, HashMap.class);
        assertNotNull(groups);
    }

    @Test
    public void testGroupContainsUser() {
        String user = "user";
        String group = "users";
        assertTrue(FileAuth.contains(group, user));
        user = "root";
        assertTrue(FileAuth.contains(group, user));
    }

    @Test
    public void testGroupNotContainsUser() {
        String user = "user";
        String group = "root";
        assertFalse(FileAuth.contains(group, user));
    }

    public void testGroupNotExists() {
        String user = "user";
        String group = "user";
        assertFalse(FileAuth.contains(group, user));
    }
}PK�����*†9Dd s*ù��ù����samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/ShadowUsersTest.java
import java.util.HashMap;
import java.util.Map;
import org.junit.BeforeClass;
import org.junit.Test;
import play.Play;
import play.cache.Cache;
import play.modules.fileauth.FileAuth;
import play.modules.fileauth.utils.MD5Crypt;
import play.test.UnitTest;


/**
 * ShadowUsersTest
 * 04.08.2012
 * @author Philipp Haussleiter
 *
 */
public class ShadowUsersTest extends UnitTest {

    @BeforeClass
    public static void setup() {
        Play.configuration.setProperty("authfile.users.path", Play.applicationPath + "/test/shadow");
        Play.configuration.setProperty("authfile.users.delimeter", ":");
        Cache.safeDelete(FileAuth.AUTH_FILE_USERS_CACHE_KEY);
    }

    @Test
    public void testUsersRead() {
        FileAuth.scanUsers();
        Map<String, String> users = Cache.get(FileAuth.AUTH_FILE_USERS_CACHE_KEY, HashMap.class);
        assertNotNull(users);
    }

    @Test
    public void testUsersValidate() {
        String clear = "user";
        String pass = MD5Crypt.crypt("user");
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
    }

    @Test
    public void testValidatePassword() {
        String pass = "user";
        String user = "user";
        assertTrue(FileAuth.validate(user, pass));
        user = "user";
        pass = "user123";
        assertFalse(FileAuth.validate(user, pass));
    }

    @Test
    public void testValidateNotExistingUser() {
        String pass = "user123";
        String user = "user123";
        assertFalse(FileAuth.validate(user, pass));
    }
}
PK�����*†9DTâÒ%���%�����samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/grouproot:x:321:root
users:x:123:root,userPK�����*†9Dcé¸���¸�����samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/data.yml# you describe your data using the YAML notation here
# and then load them using Fixtures.load("data.yml")

# User(bob):
#   email: bob@gmail.com
#   password: secret
#   fullname: BobPK�����*†9D<_'²���²���
��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/htusersapacheUser:$apr1$kuwPretH$BPbVoWoDTEFUw.4g1zDKs1
apacheRoot:$apr1$nVmU2aOS$rDZ4.BG3TPT02YBsCVcSG/
root:$1$imw51D2V$aJbVmk2xlEg8q.Y8nh91E.
user:$1$4aMItwK9$PnpH2GeuHDeR2t.jKhQ771
PK�����*†9DÇÀ���À�����samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/BasicTest.javaimport org.junit.*;
import play.test.*;

public class BasicTest extends UnitTest {

    @Test
    public void aVeryImportantThingToTest() {
        assertEquals(2, 1 + 1);
    }

}
PK�����*†9D‰=u���u�����samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/shadowroot:$1$imw51D2V$aJbVmk2xlEg8q.Y8nh91E.:43534:0:435:7:::
user:$1$4aMItwK9$PnpH2GeuHDeR2t.jKhQ771:345345:0:46456:7:::
PK�����*†9D÷á,·ÿ��ÿ����samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/ApacheGroupsTest.java
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.junit.BeforeClass;
import org.junit.Test;
import play.Play;
import play.cache.Cache;
import play.modules.fileauth.FileAuth;
import play.test.UnitTest;

/**
 * ApacheGroupsTest
 * 03.08.2012
 * @author Philipp Haussleiter
 *
 */
public class ApacheGroupsTest extends UnitTest {

    @BeforeClass
    public static void setup() {
        Play.configuration.setProperty("authfile.groups.path", Play.applicationPath + "/test/htgroups");
        Play.configuration.setProperty("authfile.users.delimeter", ":");
        Play.configuration.setProperty("authfile.groups.delimeter", " ");
        Cache.safeDelete(FileAuth.AUTH_FILE_GROUPS_CACHE_KEY);
    }

    @Test
    public void testUsersRead() {
        FileAuth.scanGroups();
        Map<String, Set<String>> groups = Cache.get(FileAuth.AUTH_FILE_GROUPS_CACHE_KEY, HashMap.class);
        assertNotNull(groups);
    }

    @Test
    public void testGroupContainsUser() {
        String user = "user";
        String group = "users";
        assertTrue(FileAuth.contains(group, user));
        user = "root";
        assertTrue(FileAuth.contains(group, user));
    }

    @Test
    public void testGroupNotContainsUser() {
        String user = "user";
        String group = "root";
        assertFalse(FileAuth.contains(group, user));
    }

    public void testGroupNotExists() {
        String user = "user";
        String group = "user";
        assertFalse(FileAuth.contains(group, user));
    }
}
PK�����*†9D/%ÈBÔ��Ô����samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/routes# Routes
# This file defines all application routes (Higher priority routes first)
# ~~~~

# Home page
GET     /                                       Application.index

# Ignore favicon requests
GET     /favicon.ico                            404

# Map static resources from the /app/public folder to the /public path
GET     /public/                                staticDir:public

# Catch all
*       /{controller}/{action}                  {controller}.{action}
PK�����*†9D¥#Æ/Ç��Ç����samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/application.conf# This is the main configuration file for the application.
# ~~~~~
application.name=auth-file-demo

# Application mode
# ~~~~~
# Set to dev to enable instant reloading and other development help.
# Otherwise set to prod.
application.mode=dev
%prod.application.mode=prod

# Secret key
# ~~~~~
# The secret key is used to secure cryptographics functions
# If you deploy your application to several instances be sure to use the same key !
application.secret=uQks53MboMLlGVsJSrPRCipiFOZ4BXn8oDBfOxGxsaXDVtkJOJaIiBNX9SNQoUN8

# i18n
# ~~~~~
# Define locales used by your application.
# You can then place localized messages in conf/messages.{locale} files
# application.langs=fr,en,ja

# Date format
# ~~~~~
date.format=yyyy-MM-dd
# date.format.fr=dd/MM/yyyy

# Server configuration
# ~~~~~
# If you need to change the HTTP port, uncomment this (default is set to 9000)
# http.port=9000
#
# By default the server listen for HTTP on the wilcard address.
# You can restrict this.
# http.address=127.0.0.1
#
# Use this if you don't host your Play application at the root of the domain
# you're serving it from. This parameter has no effect when deployed as a
# war, because the path will be handled by the application server.
# http.path=/

# Session configuration
# ~~~~~~~~~~~~~~~~~~~~~~
# By default, session will be written to the transient PLAY_SESSION cookie.
# The cookies are not secured by default, only set it to true
# if you're serving your pages through https.
# application.session.cookie=PLAY
# application.session.maxAge=1h
# application.session.secure=false

# Session/Cookie sharing between subdomain
# ~~~~~~~~~~~~~~~~~~~~~~
# By default a cookie is only valid for a specific domain. By setting
# application.defaultCookieDomain to '.example.com', the cookies
# will be valid for all domains ending with '.example.com', ie:
# foo.example.com and bar.example.com
# application.defaultCookieDomain=.example.com

# JVM configuration
# ~~~~~
# Define which port is used by JPDA when application is in debug mode (default is set to 8000)
# jpda.port=8000
#
# Java source level => 1.5, 1.6 or 1.7 (experimental)
# java.source=1.5

# Log level
# ~~~~~
# Specify log level for your application.
# If you want a very customized log, create a log4j.properties file in the conf directory
# application.log=INFO
#
# More logging configuration
# application.log.path=/log4j.properties
# application.log.system.out=off

# Database configuration
# ~~~~~ 
# Enable a database engine if needed.
#
# To quickly set up a development database, use either:
#   - mem : for a transient in memory database (H2 in memory)
#   - fs  : for a simple file written database (H2 file stored)
# db=mem
#
# To connect to a local MySQL5 database, use:
# db=mysql://user:pwd@host/database
#
# To connect to a local PostgreSQL9 database, use:
# db=postgres://user:pwd@host/database
#
# If you need a full JDBC configuration use the following :
# db.url=jdbc:postgresql:database_name
# db.driver=org.postgresql.Driver
# db.user=root
# db.pass=secret
#
# Connections pool configuration :
# db.pool.timeout=1000
# db.pool.maxSize=30
# db.pool.minSize=10
#
# If you want to reuse an existing Datasource from your application server, use:
# db=java:/comp/env/jdbc/myDatasource
#
# When using an existing Datasource, it's sometimes needed to destroy it when
# the application is stopped. Depending on the datasource, you can define a
# generic "destroy" method :
# db.destroyMethod=close

# JPA Configuration (Hibernate)
# ~~~~~
#
# Specify the custom JPA dialect to use here (default to guess):
# jpa.dialect=org.hibernate.dialect.PostgreSQLDialect
#
# Specify the ddl generation pattern to use. Set to none to disable it 
# (default to update in DEV mode, and none in PROD mode):
# jpa.ddl=update
#
# Debug SQL statements (logged using DEBUG level):
# jpa.debugSQL=true
#
# You can even specify additional hibernate properties here:
# hibernate.use_sql_comments=true
# ...
#
# Store path for Blob content
attachments.path=data/attachments

# Memcached configuration
# ~~~~~ 
# Enable memcached if needed. Otherwise a local cache is used.
# memcached=enabled
#
# Specify memcached host (default to 127.0.0.1:11211)
# memcached.host=127.0.0.1:11211
#
# Or you can specify multiple host to build a distributed cache
# memcached.1.host=127.0.0.1:11211
# memcached.2.host=127.0.0.1:11212
#
# Use plain SASL to authenticate for memcached
# memcached.user=
# memcached.password=

# HTTP Response headers control for static files
# ~~~~~
# Set the default max-age, telling the user's browser how long it should cache the page.
# Default is 3600 (one hour). Set it to 0 to send no-cache.
# This is only read in prod mode, in dev mode the cache is disabled.
# http.cacheControl=3600

# If enabled, Play will generate entity tags automatically and send a 304 when needed.
# Default is true, set it to false to deactivate use of entity tags.
# http.useETag=true

# Custom mime types
# mimetype.xpi=application/x-xpinstall

# WS configuration
# ~~~~~
# Default engine is Async Http Client, uncomment to use
# the JDK's internal implementation
# webservice = urlfetch
# If you need to set proxy params for WS requests
# http.proxyHost = localhost
# http.proxyPort = 3128
# http.proxyUser = jojo
# http.proxyPassword = jojo

# Mail configuration
# ~~~~~ 
# Default is to use a mock Mailer
mail.smtp=mock

# Or, specify mail host configuration
# mail.smtp.host=127.0.0.1
# mail.smtp.user=admin
# mail.smtp.pass=
# mail.smtp.channel=ssl

# Url-resolving in Jobs
# ~~~~~~
# When rendering templates with reverse-url-resoling (@@{..}) in Jobs (which do not have an inbound Http.Request),
# ie if sending a HtmlMail, Play need to know which url your users use when accessing your app.
# %test.application.baseUrl=http://localhost:9000/
# %prod.application.baseUrl=http://www.yourdomain.com/

# Jobs executor
# ~~~~~~
# Size of the Jobs pool
# play.jobs.pool=10

# Execution pool
# ~~~~~
# Default to 1 thread in DEV mode or (nb processors + 1) threads in PROD mode.
# Try to keep a low as possible. 1 thread will serialize all requests (very useful for debugging purpose)
# play.pool=3

# Open file from errors pages
# ~~~~~
# If your text editor supports opening files by URL, Play! will
# dynamically link error pages to files 
#
# Example, for textmate:
# play.editor=txmt://open?url=file://%s&line=%s

# Testing. Set up a custom configuration for test mode
# ~~~~~
#%test.module.cobertura=${play.path}/modules/cobertura
%test.application.mode=dev
%test.db.url=jdbc:h2:mem:play;MODE=MYSQL;LOCK_MODE=0
%test.jpa.ddl=create
%test.mail.smtp=mock

PK�����*†9D‹úWÀ �� ����samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/dependencies.yml# Application dependencies

require:
    - play
    - play -> secure
    - local -> play-file-auth 0.2
    
repositories:
    - playCustomModules:
        type:       local
        artifact:   ${application.path}/../../dist/[module]-[revision].zip
        contains:
          - local -> *PK�����*†9Dqé¶h���h�����samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/messages# You can specialize this file for each language.
# For example, for French create a messages.fr file
#
PK�����*†9D«_^)/��/����samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/main.html<!DOCTYPE html>

<html>
    <head>
        <title>#{get 'title' /}</title>
        <meta charset="${_response_encoding}">
        <link rel="stylesheet" media="screen" href="@{'/public/stylesheets/main.css'}">
        #{get 'moreStyles' /}
        <link rel="shortcut icon" type="image/png" href="@{'/public/images/favicon.png'}">
        <script src="@{'/public/javascripts/jquery-1.6.4.min.js'}" type="text/javascript" charset="${_response_encoding}"></script>
        #{get 'moreScripts' /}
    </head>
    <body>
        #{doLayout /}
    </body>
</html>
PK�����*†9D*º$•<���<���!��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/Application/index.html#{extends 'main.html' /}
#{set title:'Home' /}

#{welcome /}PK�����*†9DÙ¦��¦����samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/errors/404.html<!DOCTYPE html>

<html>
    <head>
        <title>Not found</title>
        <meta http-equiv="Content-Type" content="text/html; charset=${_response_encoding}"/>    
    </head>
    <body>
        #{if play.mode.name() == 'DEV'}
            #{404 result /}
        #{/if}
        #{else}
            <h1>Not found</h1>
            <p>
                ${result.message}
            </p>
        #{/else}
    </body>
</html>
PK�����*†9DËip®V��V����samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/errors/500.html<!DOCTYPE html>

<html>
    <head>
        <title>Application error</title>
        <meta http-equiv="Content-Type" content="text/html; charset=${_response_encoding}"/>	
    </head>
    <body>
        #{if play.mode.name() == 'DEV'}
            #{500 exception /}
        #{/if}
        #{else}
            <h1>Oops, an error occured</h1>
            #{if exception instanceof play.exceptions.PlayException}
                <p>
                    This exception has been logged with id <strong>${exception.id}</strong>.
                </p>
            #{/if}
        #{/else}
    </body>
</html>
PK�����*†9D¤8r“���“���!��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/controllers/Application.javapackage controllers;
import play.mvc.*;

public class Application extends Controller {

    public static void index() {
        render();
    }

}PK�����*†9Dp­b’$���$�����samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/secure/opt/play/play-1.2.5/modules/secure
PK�����*†9DD6I÷P��P��'��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.py# Here you can create play commands that are specific to the module, and extend existing commands

MODULE = 'play-file-auth'

# Commands that are specific to your module

COMMANDS = ['play-file-auth:hello']

def execute(**kargs):
    command = kargs.get("command")
    app = kargs.get("app")
    args = kargs.get("args")
    env = kargs.get("env")

    if command == "play-file-auth:hello":
        print "~ Hello"


# This will be executed before any command (new, run...)
def before(**kargs):
    command = kargs.get("command")
    app = kargs.get("app")
    args = kargs.get("args")
    env = kargs.get("env")


# This will be executed after any command (new, run...)
def after(**kargs):
    command = kargs.get("command")
    app = kargs.get("app")
    args = kargs.get("args")
    env = kargs.get("env")

    if command == "new":
        pass
PK�����*†9DŒÀÉZ•��•��%��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/README.mdplay-file-auth
==============

This Module supports authentication of Play! 1.x Applications agains Unix Auth Files (e.g. Apache htusers)

This Plugin works for all Auth Files with the following syntax:


    user1:passwordhash
    user1:passwordhash:...:...:

    group:user1 user2
    group:x:...:user1,user2


The Hash Algorithm has to be either MD5 Crypt or MD5 Apache Crypt.

    $1$...
    $apr1$...PK�����*†9DaCV��V��%��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/build.xml<?xml version="1.0" encoding="UTF-8"?>

<project name="play-file-auth" default="build" basedir=".">

    <target name="check" unless="play.path">
        <fail message="Please specify Play framework path using -Dplay.path=/path/to/framework/home" />
    </target>

    <path id="project.classpath">
        <pathelement path="${play.path}/framework/classes"/>
        <fileset dir="${play.path}/framework/lib">
            <include name="*.jar"/>
        </fileset>
        <fileset dir="${play.path}/framework">
            <include name="*.jar"/>
        </fileset>
        <fileset dir="lib">
            <include name="*.jar"/>
        </fileset>
    </path>

    <target name="build" depends="compile">
        <mkdir dir="lib" />
        <copy todir="tmp/classes">
            <fileset dir="src">
                <include name="**/*.properties"/>
                <include name="**/*.xml"/>
                <include name="**/play.plugins"/>
                <include name="**/play.static"/>
            </fileset>
        </copy>
        <jar destfile="lib/play-play-file-auth.jar" basedir="tmp/classes">
            <manifest>
                <section name="Play-module">
                    <attribute name="Specification-Title" value="play-file-auth"/>
                </section>
            </manifest>
        </jar>
        <delete dir="tmp" />
    </target>

    <target name="compile" depends="check">
        <mkdir dir="tmp/classes" />
        <javac srcdir="src" destdir="tmp/classes" target="1.5" debug="true">
            <classpath refid="project.classpath" />
        </javac>
    </target>

</project>
PK�����*†9Dem eò��ò��(��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pycÑò
ARc�����������@���s.���d��Z��d�g�Z�d�„��Z�d�„��Z�d�„��Z�d�S(���s���play-file-auths���play-file-auth:helloc����������K���sV���|��i��d�ƒ�}�|��i��d�ƒ�}�|��i��d�ƒ�}�|��i��d�ƒ�}�|�d�j�o	�d�GHn�d��S(���Nt���commandt���appt���argst���envs���play-file-auth:hellos���~ Hello(���t���get(���t���kargsR����R���R���R���(����(����s–���/home/javastream.de/jenkins/jobs/de.consolving.play-file-auth-module/workspace/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pyt���execute	���s����
c����������K���s@���|��i��d�ƒ�}�|��i��d�ƒ�}�|��i��d�ƒ�}�|��i��d�ƒ�}�d��S(���NR����R���R���R���(���R���(���R���R����R���R���R���(����(����s–���/home/javastream.de/jenkins/jobs/de.consolving.play-file-auth-module/workspace/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pyt���before���s����c����������K���sQ���|��i��d�ƒ�}�|��i��d�ƒ�}�|��i��d�ƒ�}�|��i��d�ƒ�}�|�d�j�o�n�d��S(���NR����R���R���R���t���new(���R���(���R���R����R���R���R���(����(����s–���/home/javastream.de/jenkins/jobs/de.consolving.play-file-auth-module/workspace/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pyt���after���s����
N(���t���MODULEt���COMMANDSR���R���R	���(����(����(����s–���/home/javastream.de/jenkins/jobs/de.consolving.play-file-auth-module/workspace/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pyt���<module>���s���			PK�����*†9DxÏ‘[$���$���$��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/manifestversion=0.2
frameworkVersions=1.2.x
PK�����*†9Du€v-»��»��7��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/lib/play-play-file-auth.jarPK
����1C������������	��META-INF/þÊ��PK
���0C½ÿíŠ���¤������META-INF/MANIFEST.MFM±
Â0E÷@þ!£	U¡H·ÖÉ¡"T\噾ÐiR’tÈß›l®çœËÁ‘Á˜äC$ï:qR
g½û#ýzAQX‘תo!á,‡\ûV5Ÿs+¿ÍE¦Ý‰‘tð1Ç„kw§Õ‘3ΰb'ž²\ý¼[älÚP“!
©üÈ%[Š­†,JØÓR—?PK
����0C���������������play/PK
����0C������������
���play/modules/PK
����0C���������������play/modules/fileauth/PK
����0C���������������play/modules/fileauth/utils/PK
���0C��������������play.plugins�PK
���0C(�å_j
����$���play/modules/fileauth/FileAuth.classW{|Õþ&û˜ÙÉ$À†D—Š,ˆ˜„,QZPEBL „”hD‡ì$Ýìngg‘૾j[m}k¥­O4ÕR´!1ÁG¨Vkµ[«}ØÖÖÚÚ÷ý•~wöÁf³bȏû8÷Üs¿sÎwϝ}ùOpþ£"ˆk|8×ʸN…×(¸^ÅpƒŒ/ª”IÁ—E£hn*†Œ¯Èøj1Jp³Ü"ãV·ávîÀ
îRq7¾¦à»Äðë2¾¡âDaö›¢¿WÅ}¸_ŒPð è’±[ÅÃxDưŠø–hÍc
¾-VöÈøŽŒÇUTá	•Ø+š}*fb¿hž žRð]{DÆK1*6ŽÉxZÅ2Œ*Jßç=£à ‚gRpXÁs2žWq®.½ àEáÕ„Œ#õ›×õ45·4ötv4nêèi¨oXר³¡±[‚¿åb}»^Ñ£ýµ¶eFûWH(iˆE¶µ»ôHҐ 6wô4¶Õ¯ii<W‚t„9Ç,®Ý´±³}’É’ÔxsskãÆÎͼ+ͨi¯’બê’ànˆ…isF‹5Ú’ƒÛk³¾-b(±^=Ò¥[¦˜§…n{ÀLH¶Ä#úPí`,œŒ‰Ú>3bèI{ ¶‰ƒzZé7ì΄aQ{VeUÊ­¤mFj[õ8—=ÉÔÚŒ)+“ÏŠgÎ^6YuåÔPM•¬¢A_‡ÙÕí¤EgæC™¾ú³ÖŠ%ãííOš¦iÌQè0ì
«ë릍ëcM)½±¨­›QÂ;­r:ÞU‘AÇ#æW¤…s¦SSăyÄ)Ó€B ÛõˆÖm†]‰ë‰Ä¥1+L:Ñ^k(návÊ×D¯MŸä‰ë–;lK¡kP´ÈNL­˜±Ú5ɾ>Ã2›=lX\wGHaª;$Ì˪	J¶Åì¦X2nÜÑkÄm3¥vyV£yc®\dnÓÅ=sа
ëZr	¥“S_ø3Äð‰ðµ§œpë–µP 2¢ì¤f"3æ]J}3Ñì;ב‰PVöFÒ÷Síˆ%­^£É9·$sµ–ˆó5´ UÃ:Ðê¬c¹X§'Ȧ,¯ÄÈø¾†—ð2íLb™,	3óë‡†íØ¬a‹h^Â&mcÂ5ôà
ÎÞüLÉxUÃq‘Œ×4ü¯3¢6ˆð-q.ý’¸nÈxCÏñf4o5­NèüTÂ	ù‡¬Iš‘°£²ZÃÏ𦌟køÞ“_òÄ`³¥bСVÐŒ5¼w&áݸíb£×–ñ+
¿Æo$h¹©!þ­†wq¥†ßáJÙ ™FcvP:ÄŠl„„ê|
¿û+
S“¥4×pJ(ÌÿA4ïiø#ÞÑð'¼¯áÏbôþB6,Œjø+>”0÷¸TÖð7±éï@YJ³Zõ‰
ôÿø§ˆÏ¿È»à 3<äéìlüSUÍI_©|qn^‚Üv,Ä)ö‹Oa£C–ã	ë3vbh¤X¿$X€Á˜,„ÉÙ˜0l†û
‘“ÿ1ÕŽB¯Þ;`Ô6ˆ–ae¯ÀqëbC„•iEUK>SxÛUN•T,/¤Èû½°0h°Dmë¹ËDmd™ÙnXfßP{¶lúœ}ílxYáûÌþ¤¥§\‘SŽÛ­XܰlÓHÄìBr	ÅBz>”çRæI(TÏšÞkRh«—l3¢t#4­ÃÒ·{Åäê2”°A2¬7iYFÔÞL6¶š‘ˆøaí\/á¤Êõdz¥Ø±”ˆ©,³Ø	rK¬¿_°ÜmFûb*@ÞR ¹]yIÏxG¹×Øa&Ä›à5©rî¾T·¢âËhòs"”ËŽÉÒO›*Ç-ÎçIÄ#¦]øu¯*ørº9`ä\ñ¤—Æ4øi’Ú•·çìãó`ªÉœH”‘zÎ÷¹Ó·‰„Þ/<2,+&"ž ØÉf³Èfóñ²éÒÃaÌçGu¿8Ü M°–³"x8çãÈq�ësä>ÌÁ†œùé”Hâ-eÛFI-{‰½§ú�¤}ŽÊF¶^GxÚÙj)|›ØûÄ#H-±Ùf/ÖîGÑ.ÃÕ}�î½~O\£ð‚¼¡úäQ(ª÷RÏåØžCëÀb¶5(ÅÎkq2-்Ìys ¢]œ7Ir>gÝʈdËÇ"ñå#Q§"YÁv%‘¬âü"YM$k&!¹p
’±5‹ä³DÒƒ‹Ò}’·¬ƒÄãÞS=yñx\{FQÜZS=­‡PÒr„¡Åc(-ž,¨E4æÇKs
aÌdàýzÏœJ0§1`uê(èÌ0œÑ6'×d�]Ä¥èE˜¶ü
JRk[³k×|èË:0œv Tȁǘ™v`qh³òá‡	ß ü~ ü‹yì%<0Bøƒ„ˁr@Ãõ§áŸàd_@Ô¸¿)
_Ë®ïPÛÌä_:J~ÊìËöÃï/Áì
bPî¯Á	-ã8‘løçŒà£8isý'sXÍÿ#˜çzÁQÌOS¦uºyNiM`VhïÊîÔ]˜›¶#öùån>m•Ýã¨ê�÷.®sÜ#¨é®óL :àY<‚P7à=èÞ}ôýš€×µtK^·èÆPK߆¾î÷ÔøOÅèImÿ¤›¶»]wÇ(>5ŒŠ”ty®4ãØ™S3†³$ŒàlÝ$¿jö2DÛq/ðz‰þ-þŽO¥ªålw0C˜8—¡—³~\A†\Ií«q®Ãm¸»p#ÀMÃÍ´q­Ý‚	ÜŠ79~‹oãv~»Ý)ÍÂ]Nj/¤Õ]˜ÇÄ_B*Ü€:¦~é¾™(¢L¨‡»g‘qÊÞvFŸãÈ'©°2ÌÆQ$2Ôã4ÖóËÜF2‡©5A†cEa{†Eïñ”R’ârÁ…y¤ÕþOsØZ€«>Šm~ˆtL Lä„)ýô8p§Iâ	x’x'pmÀëDÈIØyvcvÀ™‡—Öˆ5e%ٝž”ƒ÷=<ŽsxÚê:_@©SêÁåÅ®åZ¹V^ü æÔrmi]IÀ(qxV_„ó®Ó¤á£ï†rŠ‚¾ûvø}¡,û\öy2ìs¤Ës¥¹ì}ûB‚}×KÕRˆy}C–};Yjû˜±û™íÈ•ù¶=Ä·i7³ý0yóy÷(îÆã\ya/öñoûɃ§ø3i„¿ð÷Ê(þ‹1ɇQiÆ¥xVªÆ<ñT‹ÃÒjŽðœÔˆç¥.¼(í$óC÷uÄr)ORh¡Ä)C%xU¼—°È€…¼;QŒYˆ.ãH#Чež¿1½÷]>,y>b½Ýṇ~ÝèðÜK)ž{ˆ ÅsyžÈð\Hó|ž´•w¯‰ñj‘Nwª·]Ò"‡ñîlõNeð¬”ÖVjež!UüJHWñµ”ˆ§d
âJ3×àJýkÒ	ríq‹Ú-9)ñ;õøeô
Óñ*~î]•ýX˜ç¼±ïhß¹}ٍ©Ï…ùl?ï`¹úÿPK
���0Cæ'È­r��p��*���play/modules/fileauth/FileAuthPlugin.classQÛJ1œìÖ®nk«VÛz©U(R\|V
–"…Šâc¶]5’&e/ŠŸå‹‚‚àG‰g·õ*æa&™Ì™œ$/¯Ï�¶±b#‚…Y
1ÌY(Z(1¤w…áƒY_?aHèžÇo	åE}×ó¹+I™ié.—'Üñz$¦ÂK0¬µ’ß:}Ý‹¤8çBz<
/MöiÒ–Ñ…P;¢Õþ` E—‡B«NÈý¾Ò.Cõ—ŒN—«¦v©ØîèÈïzq(Cá{öÖ¿æYXg¨ü”EKµÿtLïØÚô…e«í뾨—ì¡Rž yxô¥úúð.R¸Ó¨|;ªÔ÷;™/*V1F¿,¾á­bF<¶ñ�v—lÛ„éDÌ#C˜ˆ'‰rÅMrĹ'g0[›÷H~¦ä`É_¢Úr’VVŒÒÆé¤<¦(ÏÀtR7ƒEb›”yT°€‰7PK
���0CŒˆvÓ`��%��#���play/modules/fileauth/ScanJob.class}PËNA¬áé.‹ŠÆxpãÁÆ„51«Q80†!ËÙ	ŸåIâÁð£Œ=@ăq“©~Twue?¿Þ?�œ¡n"‰¢‰ÊöÒØO£Âºž/âf—!q¥†‚!çHO<D“¾ðŸxߥNÁQîv¹/u½n&‘Žœ©ËçöD
#Wö‹tÂ‘ÝpïNõ[É¡¢„Áì¨Èˆ©·­5:æ3ÎPyŒ¼PNDW’ÔÛž§BJåÑ…üêÂXõûz&ü¹Öœq7Ò&Î'Ò³B:‡¨Z¨¡ÊPû×Cv£¹¬ëÏk³mJŒ€VŸákG¦£}ÛQ(]ûžOÉ‘©ù[_EÓ�ÇHÐ×_L›#ܢʦÈ(&OÞÀ^—´A˜Z6ó0	­Õ�2”òìÏrk½l,ë-ïm¶',ÒՍ–	k¡ÍhÌa‡b†¸<½B€ÝoPK
���0CÎǘ	��%��*���play/modules/fileauth/utils/MD5Crypt.class­W{PTçÿ}û¼,X!®(`BuÙe]@E4¾�EA@りԚËîe¹º/wï"5¦Å4iúŠé˦5ÆØ®Imj’v¥Ú`ß3í_ý/íLg:Ó¦L2ÓtÚ4ôz¾»wĵa:…™ïq¾s¾ó;ç;»¿üàæ4€&ü܆fD‹C\ÀqHÚh£Úè,Ň1>œ°b܆"DL˜‘ýÛjÃI<©§øpZÀÅY+³âã6,Æ'¬˜´¡Q~~ޝðI.vŽOpò“>Å5<%àÓœø>|–ŸãäÏóÕÓüÞó|x†_à_ä«/	ø2ß|…8ëW<ËUÍŠ¯[q‘¡ÈßÖÓß±«mŸŸÁÑsT“|a)òùÕ„
=ÈPÒ‹&U)ªî—Â)™Á¢¨1©e--6)QEÝÂ`tÕïg0uÄ‚t\Ö£Då¾TdXNôKÃa™ßHáýRBá{hRG•$ÃÊžxXšðEbÁTXNúF”°,¥ÔQ_JUÂI_ïöu‰‰¸J(LI‰2Tº†îƨi—¡1†òÇ\YŒ®tuwÕ:g$ɺ‰/©œ$l¬‹ŒKÈÉTXepÞ%ОRÂA9ArE‚›VT²Äìjç@˜B÷dI†¡vëð„*'›SDuµ×ÓÍF%'6:²„d•Ld¨qé°’r •PÔ	_¯œLJ!y»’“Ü|ƒ<ÎàšÇÔó§£máPŒ¶£‘ã9®*±(ñ›Üoä_WwrY‰¹!.%“'b‰ ÷†Ä`MHÑ`HŽæÃƒ¿ocl- a:‹¥¸•;²P»tѯ6ÄÃdSD
)Ûˆ•Â~URéq•Ì\þ!þ6W½ÝR:&'”‘‰½y¿¬Z˜Å‡(u(¸•¨*«\šAŒ³ÝO$Â句¹Sá	Q’öÕü*ëÑjÅs".áyR9ÀÑm¬ÍñÔy³¾;\›{¯ZþZV\ñ®ˆø¾)â>&â@v8Èpß="™aÛj_cSóšµëZÖ·nhkïØ¾£sç®®îÝ=½}{ö>´Ïß?°ÿÀÁÁCÒp („F•£Ç‘h,~<‘TSc'Æ'NZ‘q/Šx	ßq
ß&OZ+^ñ\§H\Xì2,E¹/U•ˆœ?ä^y…Á>?E¼Š×D|ßcØro÷6,o{£ˆnp+¦È€º¦:)Uë¤x‚マ›œå–ˆàu~ô‹˜Æm?Än?Ê®~,¢›o‚VŠ!’Úƒ½"ÚÑ!â§øÐ.kçÆ7ì
CÝBŠaÎ~ÍC{†Ê;Iþ‰¤*G½œ —­ÈF¦óí¥WéÝe‰§my2åzœïÂô
…
¯³ò¸¢òZÖÅwöù<ä©À¨”hÓY:h/Åãr”Òf™«ãîT­¥‚Ë]±ØU0§«þKÊR1¡bÚ¥5ª�eSÓ½ëÞ=s~É\™þÑDìoUšÕ–°
©£Z«£^¥7ëÇ$U£t%™Nêð+]]…ÛŒwAÅxÖ%6²&¡&(\sÁ9Äé…•Yµ‚¾g$ûZ µó^Ä)õ¼5YRñ V-A݉Vjb]ÚËš©ÿÉD±ÈÇSR89O6ìH?}V4Ñ÷`€k°ë´ÝRÚ·ÌÙC¤557ÅG3£Ùì¾öŠÆ²‘F‹Flƒ4ŠYlÂfš‹°[uá4LÚÙ {Úô<ŠÜÓ–+({‡1“iŠ.¶\BQܦf·¹y
:Hc•{ڬӍÍt4«F/ËR¦ ÐÖHò³€Ü°Ñ¸žÀ´ÒWÓ,!8Õ¨‘à´ ]hC?¶ã vÌ=ˆmDù€’^}’Œ3ÑÜpEƒ7`ë›4Ì,{U^Gqõbˆ>‘Aieªí–Ó[Ó3oz3°_Ïã¨ÿ¬ì†€”¡5èÃ*<¤é¬…‘ßK(vhž
èÄN’PGøºèÔÉ둎ÃO{ÍåÆMUîéË(qWû'KÏümÖl‡u€®ØO&
Ðþ ¦ª’Î
°ˆš¡å¥O3”Jœ® ‘8ø™eé"Ìœ¹6ïmÌq“…ØG³×Q]º›àñ3»cÑ×wßÂâAŠ‘ŠÛz4XHgö¾RÍì QdX1’¿×J±2@¸9*ê{ú½—H–Û´MwÏ-TÒ|_¯'ƒ%vá2V4dàt,Í êñ£Omñ8–._nz8ƒe,?žù­›øì0³ORMš€1òÑ	òÈ#¤íVâ4ý
˜³7é\IHÉ_í6¢sL+†èi¨„’¿>ŠÃZQ«ÖÑnÒIp{ÕS¨¹>Ï‹Ïä_ƒß•½“¯†´”s’—ÿÏv[æÛ}™´½@èÓ¤í*Ùø"i~‰ì¾ö?Ø}¤ Ýµì¾ý!vS³ÎÞd|ƒì."aÅCö­¸�‘ÏUÜßã±×eð€á9”yŒÙ5YÛCfVÙ…+(öí'L¡n£Éirgð‘V:M
¹…'»àçf§9wnöäyJ«úhSÕ"TQí4y‚Ý~4¤a® 5®Iá/é™?x§PŸã¼€ú
ÁtæJ¹€‰xÒ|ÉoÕvtxªEHÏüÚiâ
Œ\f‘ñ­Ëˆpî¬lYF¢Óì5Ú효%~ïu¬„Æš%¸s]XHÏ9ËÚ3)P¡xZ¥‚Shàqâ<ÙÉ¡Í^ãš)4Øíã^»E[	ãg½v‘/Ïž[oq
•뼫)Ïje-)Èjγ
³¬¥Y-yÖ¢YÖ²‚¬Ö<«-Ï*ä´s²N5ç¨ôtNáŽZý'-”ߤ°ü#ámTáªÕ¦€—Âÿ¯Ô=Þ£
ýw*™ïSšþƒ’àŸT¾þ…þq|€3éO2ƝÓW¡€«LÄk¬7Y)}=Úñ+Úÿ†-ÆïX5Þf5x—­Àûì~f`u¬˜­bæbUÌÃ`
ôïckX#ÛÊšÙ.¶Žõ±jÖÏ6²Ãl²ÍìÛÂ’l;ÏÚØEÖÁ^gÛÙ/X'{‹ídï±.C9ë6Ô°ÃfÖkèb{~¶×p„ù
6 ¥bœ:û$u ‰]ÀËðh­AÀï‘ÐW”‚¹D¥U6Qùj˜V²õ¨…±ÙÐ@Å\¦ÂqØ ’?d˜Ùy¼u5áµ^&P’BÑË…ª—‹Fª’Z–—xÜ­«¯¾FdÉÂI¼—8|7Ðxûξʂ(b2ÊÙ–±V2eN™iÄQ½Ì4☆ž!¬ÉGþPK
����1C������������	���������íA����META-INF/þÊ��PK
���0C½ÿíŠ���¤��������������¤+���META-INF/MANIFEST.MFPK
����0C����������������������íAç���play/PK
����0C������������
����������íA
��play/modules/PK
����0C����������������������íA5��play/modules/fileauth/PK
����0C����������������������íAi��play/modules/fileauth/utils/PK
���0C����������������������¤£��play.pluginsPK
���0C(�å_j
����$�����������¤Ï��play/modules/fileauth/FileAuth.classPK
���0Cæ'È­r��p��*�����������¤{��play/modules/fileauth/FileAuthPlugin.classPK
���0CŒˆvÓ`��%��#�����������¤5��play/modules/fileauth/ScanJob.classPK
���0CÎǘ	��%��*�����������¤Ö��play/modules/fileauth/utils/MD5Crypt.classPK��������Ÿ����PK�����*†9DÔQ.^Þ���Þ���'��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/routes# This file defines all module routes (Higher priority routes first)
#
# import these routes in the main app as :
# *     /                       module:play-file-auth
#
# ~~~~

GET     /?                      Module.indexPK�����*†9D1Sù*T���T���1��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/application.confapplication.name=play-file-auth
application.mode=dev
application.secret=test
db=mem
PK�����*†9Dæ´(ÕJ���J���1��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/dependencies.ymlself: play -> play-file-auth 0.2

require:
    - play
    - play -> securePK�����*†9DÌ;¨U¬���¬���)��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/messages# Default play-file-auth messages
# You can specialize this file for each language.
# For exemple, for french create a messages.fr file

#play-file-auth.name=play-file-authPK�����*†9D������������,��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play.pluginsPK�����*†9DˆŽ6©™��™��B��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/ScanJob.java/**
 * ScanJob
 * 31.07.2012
 * @author Philipp Haussleiter
 *
 */
package play.modules.fileauth;

import play.jobs.Every;
import play.jobs.Job;

/**
 * Periodically Scan of user/group files. Scan runs every 5 mins.
 * @author Philipp Haußleiter
 */
@Every("5min")
public class ScanJob extends Job {
    @Override
    public void doJob(){
        FileAuth.scanUsers();
        FileAuth.scanGroups();
    }
}
PK�����*†9DlP¨å��å��C��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/FileAuth.java/**
 * FileAuth 31.07.2012
 *
 * @author Philipp Haussleiter
 *
 */
package play.modules.fileauth;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import play.Logger;
import play.Play;
import play.cache.Cache;
import play.modules.fileauth.utils.MD5Crypt;

/**
 * Basic Wrapper for all FileAuth Functions.
 *
 * @author Philipp Haußleiter
 */
public class FileAuth {

    /* Cache Key for User/PasswordHash Map */
    public final static String AUTH_FILE_USERS_CACHE_KEY = "AUTH_FILE_USERS";
    /* Cache Key for Group/Users Map */
    public final static boolean IS_ENABLED = isEnabled();
    public final static String AUTH_FILE_GROUPS_CACHE_KEY = "AUTH_FILE_GROUPS";
    private final static String CACHE_TIMEOUT = "5mn";

    /**
     * Returns a Map of all Users (user/password hash).
     *
     * @return the Map.
     */
    public static Map<String, String> getUsers() {
        if (!IS_ENABLED) {
            return new HashMap<String, String>();
        }
        Map<String, String> users = Cache.get(AUTH_FILE_USERS_CACHE_KEY, HashMap.class);
        if (users == null) {
            users = scanUsers();
        }
        return users;
    }

    /**
     * Returns a Map of all Groups (groups/usernames).
     *
     * @return the Map.
     */
    public static Map<String, Set<String>> getGroups() {
        if (!IS_ENABLED) {
            return new HashMap<String, Set<String>>();
        }
        Map<String, Set<String>> groups = Cache.get(AUTH_FILE_GROUPS_CACHE_KEY, HashMap.class);
        if (groups == null) {
            groups = scanGroups();
        }
        return groups;
    }

    /**
     * Checks if a group contains a given username.
     *
     * @param group the Group to check.
     * @param user the user to check.
     * @return true if user is in group, otherwise false.
     */
    public static boolean contains(String group, String user) {
        if (!IS_ENABLED) {
            return true;
        }
        if (group == null || user == null) {
            return false;
        }
        Map<String, Set<String>> groups = getGroups();
        Set<String> groupUsers = groups.get(group);
        if (groupUsers == null) {
            return false;
        }
        return groupUsers.contains(user);
    }

    /**
     * Validates an user with a given password agains the user/password hash
     * mapping.
     *
     * @param user the given user.
     * @param password the given password (clear text).
     * @return true if validation okay, otherwise false.
     */
    public static boolean validate(String user, String password) {
        if (!IS_ENABLED) {
            return true;
        }
        if (user == null || password == null) {
            return false;
        }
        Map<String, String> users = getUsers();
        String encryptedPass = users.get(user);
        if (encryptedPass == null) {
            return false;
        }
        return MD5Crypt.verifyPassword(password, encryptedPass);
    }

    /**
     * Rescans the users file.
     *
     * @return the updated Map of users.
     */
    public static Map<String, String> scanUsers() {
        String fileName = Play.configuration.getProperty("authfile.users.path");
        String delimeter1 = Play.configuration.getProperty("authfile.users.delimeter", ":");
        Logger.info("@" + System.currentTimeMillis() + " Scanning Users in " + fileName);
        Map<String, String> users = new HashMap<String, String>();
        File file = new File(fileName);
        if (file == null || !file.exists() || !file.isFile()) {
            Logger.warn(fileName + " is not a valid Auth-File!");
        }
        try {
            BufferedReader br = new BufferedReader(new FileReader(file));
            String line;
            String parts[];
            while ((line = br.readLine()) != null) {
                parts = line.split(delimeter1);
                /*
                 * Matches
                 * user:hash
                 * user:hash:uid: ...
                 */
                if (parts.length > 1) {
                    users.put(parts[0].trim(), parts[1].trim());
                }
            }
            Cache.set(AUTH_FILE_USERS_CACHE_KEY, users, CACHE_TIMEOUT);
        } catch (FileNotFoundException ex) {
            Logger.error(ex.getLocalizedMessage(), ex);
        } catch (IOException ex) {
            Logger.error(ex.getLocalizedMessage(), ex);
        }
        Logger.info("found " + users.size() + " mappings");
        return users;
    }

    /**
     * Rescans the groups file.
     *
     * @return the updated Map of groups.
     */
    public static Map<String, Set<String>> scanGroups() {
        String fileName = Play.configuration.getProperty("authfile.groups.path");
        String delimeter1 = Play.configuration.getProperty("authfile.users.delimeter", ":");
        String delimeter2 = Play.configuration.getProperty("authfile.groups.delimeter", " ");
        Logger.info("@" + System.currentTimeMillis() + " Scanning Groups in " + fileName);
        Map<String, Set<String>> groups = new HashMap<String, Set<String>>();
        File file = new File(fileName);
        if (file == null || !file.exists() || !file.isFile()) {
            Logger.warn(fileName + " is not a valid Auth-File!");
        }
        try {
            BufferedReader br = new BufferedReader(new FileReader(file));
            String line;
            String parts[];
            String userParts[];
            Set<String> users;
            while ((line = br.readLine()) != null) {
                parts = line.split(delimeter1);
                if (parts.length > 1) {
                    if (parts.length > 2) {
                        userParts = parts[parts.length - 1].split(delimeter2);
                    } else {
                        userParts = parts[1].split(delimeter2);
                    }
                    if (userParts.length > 0) {
                        users = new HashSet<String>();
                        for (String user : userParts) {
                            users.add(user.trim());
                        }
                        groups.put(parts[0].trim(), users);
                    }
                }
            }
            Cache.set(AUTH_FILE_GROUPS_CACHE_KEY, groups, CACHE_TIMEOUT);
        } catch (FileNotFoundException ex) {
            Logger.error(ex.getLocalizedMessage(), ex);
        } catch (IOException ex) {
            Logger.error(ex.getLocalizedMessage(), ex);
        }
        Logger.info("found " + groups.size() + " mappings");
        return groups;
    }

    private static boolean isEnabled() {
        if (Play.configuration.getProperty("authfile.users.path") == null
                || Play.configuration.getProperty("authfile.groups.path") == null) {
            Logger.info("FileAuth not enabled. authfile.users.path or authfile.groups.path not set!");
            return false;
        }
        return true;

    }
}
PK�����*†9D4ÿÑ^º��º��I��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/FileAuthPlugin.java/**
 * FileAuthPlugin
 * 31.07.2012
 * @author Philipp Haussleiter
 *
 */
package play.modules.fileauth;

import play.PlayPlugin;

/**
 * Entry Class for first file scan.
 * @author Philipp Haußleiter
 */
public class FileAuthPlugin extends PlayPlugin {

    /**
     * Trigger to scan the files for the first Time.
     */
    @Override
    public void onApplicationStart() {
        ScanJob job = new ScanJob();
        job.now();
    }
}
PK�����*†9DYí΁1��1��I��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/utils/MD5Crypt.java/*

MD5Crypt.java

Created: 3 November 1999

Java Port By: Jonathan Abbey, jonabbey@arlut.utexas.edu

Original C Version:
----------------------------------------------------------------------------
"THE BEER-WARE LICENSE" (Revision 42):
<phk@login.dknet.dk> wrote this file.  As long as you retain this notice you
can do whatever you want with this stuff. If we meet some day, and you think
this stuff is worth it, you can buy me a beer in return.   Poul-Henning Kamp
----------------------------------------------------------------------------

This Java Port is  

Copyright (c) 1999-2010 The University of Texas at Austin.

All rights reserved.

Redistribution and use in source and binary form are permitted
provided that distributions retain this entire copyright notice
and comment. Neither the name of the University nor the names of
its contributors may be used to endorse or promote products
derived from this software without specific prior written
permission. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
PARTICULAR PURPOSE.

 */
package play.modules.fileauth.utils;

import java.security.MessageDigest;

/*------------------------------------------------------------------------------
class
MD5Crypt

------------------------------------------------------------------------------*/
/**
 * This class defines a method,
 * {@link MD5Crypt#crypt(java.lang.String, java.lang.String) crypt()}, which
 * takes a password and a salt string and generates an OpenBSD/FreeBSD/Linux-compatible
 * md5-encoded password entry.
 */
public final class MD5Crypt {

    /**
     * Command line test rig.
     */
    static public void main(String argv[]) {
        if ((argv.length < 1) || (argv.length > 3)) {
            System.err.println("Usage: MD5Crypt [-apache] password salt");
            System.exit(1);
        }

        if (argv.length == 3) {
            System.err.println(MD5Crypt.apacheCrypt(argv[1], argv[2]));
        } else if (argv.length == 2) {
            System.err.println(MD5Crypt.crypt(argv[0], argv[1]));
        } else {
            System.err.println(MD5Crypt.crypt(argv[0]));
        }

        System.exit(0);
    }
    public static final String SALTCHARS = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
    public static final String itoa64 = "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";

    public static final String to64(long v, int size) {
        StringBuilder result = new StringBuilder();

        while (--size >= 0) {
            result.append(itoa64.charAt((int) (v & 0x3f)));
            v >>>= 6;
        }

        return result.toString();
    }

    public static final void clearbits(byte bits[]) {
        for (int i = 0; i < bits.length; i++) {
            bits[i] = 0;
        }
    }

    /**
     * convert an encoded unsigned byte value into a int
     * with the unsigned value.
     */
    public static final int bytes2u(byte inp) {
        return (int) inp & 0xff;
    }

    static private MessageDigest getMD5() {
        try {
            return MessageDigest.getInstance("MD5");
        } catch (java.security.NoSuchAlgorithmException ex) {
            throw new RuntimeException(ex);
        }
    }

    /**
     * <p>This method actually generates a OpenBSD/FreeBSD/Linux PAM compatible
     * md5-encoded password hash from a plaintext password and a
     * salt.</p>
     *
     * <p>The resulting string will be in the form '$1$&lt;salt&gt;$&lt;hashed mess&gt;</p>
     *
     * @param password Plaintext password
     *
     * @return An OpenBSD/FreeBSD/Linux-compatible md5-hashed password field.
     */
    public static final String crypt(String password) {
        StringBuilder salt = new StringBuilder();
        java.util.Random randgen = new java.util.Random();

        /* -- */

        while (salt.length() < 8) {
            int index = (int) (randgen.nextFloat() * SALTCHARS.length());
            salt.append(SALTCHARS.substring(index, index + 1));
        }

        return MD5Crypt.crypt(password, salt.toString());
    }

    /**
     * <p>This method actually generates a OpenBSD/FreeBSD/Linux PAM compatible
     * md5-encoded password hash from a plaintext password and a
     * salt.</p>
     *
     * <p>The resulting string will be in the form '$1$&lt;salt&gt;$&lt;hashed mess&gt;</p>
     *
     * @param password Plaintext password
     * @param salt A short string to use to randomize md5.  May start with $1$, which
     *             will be ignored.  It is explicitly permitted to pass a pre-existing
     *             MD5Crypt'ed password entry as the salt.  crypt() will strip the salt
     *             chars out properly.
     *
     * @return An OpenBSD/FreeBSD/Linux-compatible md5-hashed password field.
     */
    public static final String crypt(String password, String salt) {
        return MD5Crypt.crypt(password, salt, "$1$");
    }

    /**
     * <p>This method generates an Apache MD5 compatible
     * md5-encoded password hash from a plaintext password and a
     * salt.</p>
     *
     * <p>The resulting string will be in the form '$apr1$&lt;salt&gt;$&lt;hashed mess&gt;</p>
     *
     * @param password Plaintext password
     *
     * @return An Apache-compatible md5-hashed password string.
     */
    public static final String apacheCrypt(String password) {
        StringBuilder salt = new StringBuilder();
        java.util.Random randgen = new java.util.Random();

        /* -- */

        while (salt.length() < 8) {
            int index = (int) (randgen.nextFloat() * SALTCHARS.length());
            salt.append(SALTCHARS.substring(index, index + 1));
        }

        return MD5Crypt.apacheCrypt(password, salt.toString());
    }

    /**
     * <p>This method actually generates an Apache MD5 compatible
     * md5-encoded password hash from a plaintext password and a
     * salt.</p>
     *
     * <p>The resulting string will be in the form '$apr1$&lt;salt&gt;$&lt;hashed mess&gt;</p>
     *
     * @param password Plaintext password
     * @param salt A short string to use to randomize md5.  May start with $apr1$, which
     *             will be ignored.  It is explicitly permitted to pass a pre-existing
     *             MD5Crypt'ed password entry as the salt.  crypt() will strip the salt
     *             chars out properly.
     *
     * @return An Apache-compatible md5-hashed password string.
     */
    public static final String apacheCrypt(String password, String salt) {
        return MD5Crypt.crypt(password, salt, "$apr1$");
    }

    /**
     * <p>This method actually generates md5-encoded password hash from
     * a plaintext password, a salt, and a magic string.</p>
     *
     * <p>There are two magic strings that make sense to use here.. '$1$' is the
     * magic string used by the FreeBSD/Linux/OpenBSD MD5Crypt algorithm, and
     * '$apr1$' is the magic string used by the Apache MD5Crypt algorithm.</p>
     *
     * <p>The resulting string will be in the form '&lt;magic&gt;&lt;salt&gt;$&lt;hashed mess&gt;</p>
     *
     * @param password Plaintext password
     * @param salt A short string to use to randomize md5.  May start
     * with the magic string, which will be ignored.  It is explicitly
     * permitted to pass a pre-existing MD5Crypt'ed password entry as
     * the salt.  crypt() will strip the salt chars out properly.
     * @param magic Either "$apr1$" or "$1$", which controls whether we
     * are doing Apache-style or FreeBSD-style md5Crypt.
     *
     * @return An md5-hashed password string.
     */
    public static final String crypt(String password, String salt, String magic) {
        /* This string is magic for this algorithm.  Having it this way,
         * we can get get better later on */

        byte finalState[];
        MessageDigest ctx, ctx1;
        long l;

        /* -- */

        /* Refine the Salt first */

        /* If it starts with the magic string, then skip that */

        if (salt.startsWith(magic)) {
            salt = salt.substring(magic.length());
        }

        /* It stops at the first '$', max 8 chars */

        if (salt.indexOf('$') != -1) {
            salt = salt.substring(0, salt.indexOf('$'));
        }

        if (salt.length() > 8) {
            salt = salt.substring(0, 8);
        }

        ctx = getMD5();

        ctx.update(password.getBytes());    // The password first, since that is what is most unknown
        ctx.update(magic.getBytes());    // Then our magic string
        ctx.update(salt.getBytes());    // Then the raw salt

        /* Then just as many characters of the MD5(pw,salt,pw) */

        ctx1 = getMD5();
        ctx1.update(password.getBytes());
        ctx1.update(salt.getBytes());
        ctx1.update(password.getBytes());
        finalState = ctx1.digest();

        for (int pl = password.length(); pl > 0; pl -= 16) {
            ctx.update(finalState, 0, pl > 16 ? 16 : pl);
        }

        /* the original code claimed that finalState was being cleared
        to keep dangerous bits out of memory, but doing this is also
        required in order to get the right output. */

        clearbits(finalState);

        /* Then something really weird... */

        for (int i = password.length(); i != 0; i >>>= 1) {
            if ((i & 1) != 0) {
                ctx.update(finalState, 0, 1);
            } else {
                ctx.update(password.getBytes(), 0, 1);
            }
        }

        finalState = ctx.digest();

        /*
         * and now, just to make sure things don't run too fast
         * On a 60 Mhz Pentium this takes 34 msec, so you would
         * need 30 seconds to build a 1000 entry dictionary...
         *
         * (The above timings from the C version)
         */

        for (int i = 0; i < 1000; i++) {
            ctx1.reset();

            if ((i & 1) != 0) {
                ctx1.update(password.getBytes());
            } else {
                ctx1.update(finalState, 0, 16);
            }

            if ((i % 3) != 0) {
                ctx1.update(salt.getBytes());
            }

            if ((i % 7) != 0) {
                ctx1.update(password.getBytes());
            }

            if ((i & 1) != 0) {
                ctx1.update(finalState, 0, 16);
            } else {
                ctx1.update(password.getBytes());
            }

            finalState = ctx1.digest();
        }

        /* Now make the output string */

        StringBuilder result = new StringBuilder();

        result.append(magic);
        result.append(salt);
        result.append("$");

        l = (bytes2u(finalState[0]) << 16) | (bytes2u(finalState[6]) << 8) | bytes2u(finalState[12]);
        result.append(to64(l, 4));

        l = (bytes2u(finalState[1]) << 16) | (bytes2u(finalState[7]) << 8) | bytes2u(finalState[13]);
        result.append(to64(l, 4));

        l = (bytes2u(finalState[2]) << 16) | (bytes2u(finalState[8]) << 8) | bytes2u(finalState[14]);
        result.append(to64(l, 4));

        l = (bytes2u(finalState[3]) << 16) | (bytes2u(finalState[9]) << 8) | bytes2u(finalState[15]);
        result.append(to64(l, 4));

        l = (bytes2u(finalState[4]) << 16) | (bytes2u(finalState[10]) << 8) | bytes2u(finalState[5]);
        result.append(to64(l, 4));

        l = bytes2u(finalState[11]);
        result.append(to64(l, 2));

        /* Don't leave anything around in vm they could use. */
        clearbits(finalState);

        return result.toString();
    }

    /**
     * This method tests a plaintext password against a md5Crypt'ed hash and returns
     * true if the password matches the hash.
     *
     * This method will work properly whether the hashtext was crypted
     * using the default FreeBSD md5Crypt algorithm or the Apache
     * md5Crypt variant.
     *
     * @param plaintextPass The plaintext password text to test.
     * @param md5CryptText The Apache or FreeBSD-md5Crypted hash used to authenticate the plaintextPass.
     */
    public static final boolean verifyPassword(String plaintextPass, String md5CryptText) {
        if (md5CryptText.startsWith("$1$")) {
            return md5CryptText.equals(MD5Crypt.crypt(plaintextPass, md5CryptText));
        } else if (md5CryptText.startsWith("$apr1$")) {
            return md5CryptText.equals(MD5Crypt.apacheCrypt(plaintextPass, md5CryptText));
        } else {
            throw new RuntimeException("Bad md5CryptText");
        }
    }
}
PK�����*†9D—5Kùõ��õ��A��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/app/controllers/AuthFileSecurity.java/**
 * AuthFileSecurity
 * 31.07.2012
 * @author Philipp Haussleiter
 *
 */
package controllers;

import java.util.Map;
import play.modules.fileauth.FileAuth;

/**
 * This Class provides basice Security Functions for the Play! Security Plugin.
 * @author Philipp Haußleiter
 * <p>
 * Usage:
 * @With(Secure.class)
 * public class Application extends Controller {
 * ...
 * }
 *
 * </p>
 */
public class AuthFileSecurity extends Secure.Security {

    /**
     * Authentify an user against the given AuthFile.
     * @param username the given username.
     * @param password the given password.
     * @return true if username and password matches, otherwise false.
     */
    public static boolean authentify(String username, String password) {
        Map<String,String> users = FileAuth.getUsers();
        String userPassword = users.get(username.toLowerCase());
        return userPassword.equals(password);
    }

    /**
     * Checks if the current user (that is loged in) has the profile (e.g. is in the group).
     * @param profile
     * @return true if the current user has the profile, otherwise false.
     */
    public static boolean check(String profile) {
        String user = connected();
        return FileAuth.contains(profile, user);
    }
}
PK�����*†9D&ÿ‰è¤��¤��=��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/documentation/manual/home.textileh1. {module name}

p(note). Write your module documentation in this file, possibly linking to other Textile files, and delete these notes when you are finished.

p(note). Start with a clear statement of what the module is and what it is for. Link to any third-party libraries that the module is based on.

p(note). Briefly describe why you might want to use this module in a Play application.

h2. Sample application

p(note). Your module should contain a sample app in the @sample@ directory that demonstrates the module. Describe how to run the demo here.

h2. Getting started

p(note). Describe any installation that is required, beyond adding and resolving the module dependency.

h2. Configuration

p(note). List any configuration options that the module uses, with an @h3.@ heading for each one.

h2. Usage

p(note). Explain how to use the module, and describe any routes, controllers, models or views that the module provides.

h2. Tags

p(note). List any tags the module provides, with an @h3.@ heading for each one. Include the tags’ arguments.

h2. Commands

p(note). List any commands the module provides, with an @h3.@ heading for each one. Include the commands’ options.
PK�����*†9D´šü¯��¯��V��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/public/images/favicon.png‰PNG

���
IHDR���������óÿa���tEXtSoftware�Adobe ImageReadyqÉe<��QIDATxÚ”SËNA=U]5]Ý=ï1agŒhf£+0ˆ‰Á †n\¹gãÒ¿p#ì4¢?`t¯	WFƒH$H$dŒ™Gw•·›o÷M×+çœ{O53Æàú�Œ^sÑIšéJáü½Bnà18­ÃC_­fÛG©8ˆk#7€h—BÈ,KÀMª±SçrÕMwav©^›i4v<‹	ü+"�ÎmJÛQea+¤Žed×§–¼zYßü2(¬cŒÐFp¡ìÓ`
Aƒ›ÈBåý¡5ÿÍܧ·™±¨"«€¤úeV(§æÐ<±!D‰.7³é®Ì.®×fÚ~Ë#šÃ�¶HUÊÍ84ÞÍ@<x™XWcê}}þÅ÷­oUÉåáHÛ)	åqMìûεVˆ©4…øðòÎÛ¹•úÒ-?ð#�±«@€ÕÇe<êGhíÁ—8ÙšêéÛO¶?Ó^æ]`4Ùh».<b$ߏè¶6­vùD/&‡oΧ¼´¿§€qeK?îE—å/fzš~Žt1^šX½\{äż´µ¶Ð·”wÒ„è}~_ûHû`~`ûzÿ•gÅô‰û´üúO‚ÀN¯T‰È1”²OöàjåRm¨xvšŽ=¥Ü9XZÀ¥ªXvœic£Au†r'Ê£«ãå’ë<¤#Ÿ;]å@:‰J`)úQ8ªÝ}[“ý£Ï‹™®Cr;ð˜“ëNå1Y©
Êå¡çk_7.üj5ïÒ¸Îÿ'0�Û¤û»ý
����IEND®B`‚PK�����*†9Dä |;f�f�c��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/public/javascripts/jquery-1.6.4.min.js/*! jQuery v1.6.4 http://jquery.com/ | http://jquery.org/license */
(function(a,b){function cu(a){return f.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}function cr(a){if(!cg[a]){var b=c.body,d=f("<"+a+">").appendTo(b),e=d.css("display");d.remove();if(e==="none"||e===""){ch||(ch=c.createElement("iframe"),ch.frameBorder=ch.width=ch.height=0),b.appendChild(ch);if(!ci||!ch.createElement)ci=(ch.contentWindow||ch.contentDocument).document,ci.write((c.compatMode==="CSS1Compat"?"<!doctype html>":"")+"<html><body>"),ci.close();d=ci.createElement(a),ci.body.appendChild(d),e=f.css(d,"display"),b.removeChild(ch)}cg[a]=e}return cg[a]}function cq(a,b){var c={};f.each(cm.concat.apply([],cm.slice(0,b)),function(){c[this]=a});return c}function cp(){cn=b}function co(){setTimeout(cp,0);return cn=f.now()}function cf(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function ce(){try{return new a.XMLHttpRequest}catch(b){}}function b$(a,c){a.dataFilter&&(c=a.dataFilter(c,a.dataType));var d=a.dataTypes,e={},g,h,i=d.length,j,k=d[0],l,m,n,o,p;for(g=1;g<i;g++){if(g===1)for(h in a.converters)typeof h=="string"&&(e[h.toLowerCase()]=a.converters[h]);l=k,k=d[g];if(k==="*")k=l;else if(l!=="*"&&l!==k){m=l+" "+k,n=e[m]||e["* "+k];if(!n){p=b;for(o in e){j=o.split(" ");if(j[0]===l||j[0]==="*"){p=e[j[1]+" "+k];if(p){o=e[o],o===!0?n=p:p===!0&&(n=o);break}}}}!n&&!p&&f.error("No conversion from "+m.replace(" "," to ")),n!==!0&&(c=n?n(c):p(o(c)))}}return c}function bZ(a,c,d){var e=a.contents,f=a.dataTypes,g=a.responseFields,h,i,j,k;for(i in g)i in d&&(c[g[i]]=d[i]);while(f[0]==="*")f.shift(),h===b&&(h=a.mimeType||c.getResponseHeader("content-type"));if(h)for(i in e)if(e[i]&&e[i].test(h)){f.unshift(i);break}if(f[0]in d)j=f[0];else{for(i in d){if(!f[0]||a.converters[i+" "+f[0]]){j=i;break}k||(k=i)}j=j||k}if(j){j!==f[0]&&f.unshift(j);return d[j]}}function bY(a,b,c,d){if(f.isArray(b))f.each(b,function(b,e){c||bA.test(a)?d(a,e):bY(a+"["+(typeof e=="object"||f.isArray(e)?b:"")+"]",e,c,d)});else if(!c&&b!=null&&typeof b=="object")for(var e in b)bY(a+"["+e+"]",b[e],c,d);else d(a,b)}function bX(a,c){var d,e,g=f.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((g[d]?a:e||(e={}))[d]=c[d]);e&&f.extend(!0,a,e)}function bW(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h=a[f],i=0,j=h?h.length:0,k=a===bP,l;for(;i<j&&(k||!l);i++)l=h[i](c,d,e),typeof l=="string"&&(!k||g[l]?l=b:(c.dataTypes.unshift(l),l=bW(a,c,d,e,l,g)));(k||!l)&&!g["*"]&&(l=bW(a,c,d,e,"*",g));return l}function bV(a){return function(b,c){typeof b!="string"&&(c=b,b="*");if(f.isFunction(c)){var d=b.toLowerCase().split(bL),e=0,g=d.length,h,i,j;for(;e<g;e++)h=d[e],j=/^\+/.test(h),j&&(h=h.substr(1)||"*"),i=a[h]=a[h]||[],i[j?"unshift":"push"](c)}}}function by(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=b==="width"?bt:bu;if(d>0){c!=="border"&&f.each(e,function(){c||(d-=parseFloat(f.css(a,"padding"+this))||0),c==="margin"?d+=parseFloat(f.css(a,c+this))||0:d-=parseFloat(f.css(a,"border"+this+"Width"))||0});return d+"px"}d=bv(a,b,b);if(d<0||d==null)d=a.style[b]||0;d=parseFloat(d)||0,c&&f.each(e,function(){d+=parseFloat(f.css(a,"padding"+this))||0,c!=="padding"&&(d+=parseFloat(f.css(a,"border"+this+"Width"))||0),c==="margin"&&(d+=parseFloat(f.css(a,c+this))||0)});return d+"px"}function bl(a,b){b.src?f.ajax({url:b.src,async:!1,dataType:"script"}):f.globalEval((b.text||b.textContent||b.innerHTML||"").replace(bd,"/*$0*/")),b.parentNode&&b.parentNode.removeChild(b)}function bk(a){f.nodeName(a,"input")?bj(a):"getElementsByTagName"in a&&f.grep(a.getElementsByTagName("input"),bj)}function bj(a){if(a.type==="checkbox"||a.type==="radio")a.defaultChecked=a.checked}function bi(a){return"getElementsByTagName"in a?a.getElementsByTagName("*"):"querySelectorAll"in a?a.querySelectorAll("*"):[]}function bh(a,b){var c;if(b.nodeType===1){b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase();if(c==="object")b.outerHTML=a.outerHTML;else if(c!=="input"||a.type!=="checkbox"&&a.type!=="radio"){if(c==="option")b.selected=a.defaultSelected;else if(c==="input"||c==="textarea")b.defaultValue=a.defaultValue}else a.checked&&(b.defaultChecked=b.checked=a.checked),b.value!==a.value&&(b.value=a.value);b.removeAttribute(f.expando)}}function bg(a,b){if(b.nodeType===1&&!!f.hasData(a)){var c=f.expando,d=f.data(a),e=f.data(b,d);if(d=d[c]){var g=d.events;e=e[c]=f.extend({},d);if(g){delete e.handle,e.events={};for(var h in g)for(var i=0,j=g[h].length;i<j;i++)f.event.add(b,h+(g[h][i].namespace?".":"")+g[h][i].namespace,g[h][i],g[h][i].data)}}}}function bf(a,b){return f.nodeName(a,"table")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function V(a,b,c){b=b||0;if(f.isFunction(b))return f.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return f.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=f.grep(a,function(a){return a.nodeType===1});if(Q.test(b))return f.filter(b,d,!c);b=f.filter(b,d)}return f.grep(a,function(a,d){return f.inArray(a,b)>=0===c})}function U(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function M(a,b){return(a&&a!=="*"?a+".":"")+b.replace(y,"`").replace(z,"&")}function L(a){var b,c,d,e,g,h,i,j,k,l,m,n,o,p=[],q=[],r=f._data(this,"events");if(!(a.liveFired===this||!r||!r.live||a.target.disabled||a.button&&a.type==="click")){a.namespace&&(n=new RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)")),a.liveFired=this;var s=r.live.slice(0);for(i=0;i<s.length;i++)g=s[i],g.origType.replace(w,"")===a.type?q.push(g.selector):s.splice(i--,1);e=f(a.target).closest(q,a.currentTarget);for(j=0,k=e.length;j<k;j++){m=e[j];for(i=0;i<s.length;i++){g=s[i];if(m.selector===g.selector&&(!n||n.test(g.namespace))&&!m.elem.disabled){h=m.elem,d=null;if(g.preType==="mouseenter"||g.preType==="mouseleave")a.type=g.preType,d=f(a.relatedTarget).closest(g.selector)[0],d&&f.contains(h,d)&&(d=h);(!d||d!==h)&&p.push({elem:h,handleObj:g,level:m.level})}}}for(j=0,k=p.length;j<k;j++){e=p[j];if(c&&e.level>c)break;a.currentTarget=e.elem,a.data=e.handleObj.data,a.handleObj=e.handleObj,o=e.handleObj.origHandler.apply(e.elem,arguments);if(o===!1||a.isPropagationStopped()){c=e.level,o===!1&&(b=!1);if(a.isImmediatePropagationStopped())break}}return b}}function J(a,c,d){var e=f.extend({},d[0]);e.type=a,e.originalEvent={},e.liveFired=b,f.event.handle.call(c,e),e.isDefaultPrevented()&&d[0].preventDefault()}function D(){return!0}function C(){return!1}function m(a,c,d){var e=c+"defer",g=c+"queue",h=c+"mark",i=f.data(a,e,b,!0);i&&(d==="queue"||!f.data(a,g,b,!0))&&(d==="mark"||!f.data(a,h,b,!0))&&setTimeout(function(){!f.data(a,g,b,!0)&&!f.data(a,h,b,!0)&&(f.removeData(a,e,!0),i.resolve())},0)}function l(a){for(var b in a)if(b!=="toJSON")return!1;return!0}function k(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(j,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:f.isNaN(d)?i.test(d)?f.parseJSON(d):d:parseFloat(d)}catch(g){}f.data(a,c,d)}else d=b}return d}var c=a.document,d=a.navigator,e=a.location,f=function(){function K(){if(!e.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(K,1);return}e.ready()}}var e=function(a,b){return new e.fn.init(a,b,h)},f=a.jQuery,g=a.$,h,i=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,j=/\S/,k=/^\s+/,l=/\s+$/,m=/\d/,n=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,o=/^[\],:{}\s]*$/,p=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,q=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,r=/(?:^|:|,)(?:\s*\[)+/g,s=/(webkit)[ \/]([\w.]+)/,t=/(opera)(?:.*version)?[ \/]([\w.]+)/,u=/(msie) ([\w.]+)/,v=/(mozilla)(?:.*? rv:([\w.]+))?/,w=/-([a-z]|[0-9])/ig,x=/^-ms-/,y=function(a,b){return(b+"").toUpperCase()},z=d.userAgent,A,B,C,D=Object.prototype.toString,E=Object.prototype.hasOwnProperty,F=Array.prototype.push,G=Array.prototype.slice,H=String.prototype.trim,I=Array.prototype.indexOf,J={};e.fn=e.prototype={constructor:e,init:function(a,d,f){var g,h,j,k;if(!a)return this;if(a.nodeType){this.context=this[0]=a,this.length=1;return this}if(a==="body"&&!d&&c.body){this.context=c,this[0]=c.body,this.selector=a,this.length=1;return this}if(typeof a=="string"){a.charAt(0)!=="<"||a.charAt(a.length-1)!==">"||a.length<3?g=i.exec(a):g=[null,a,null];if(g&&(g[1]||!d)){if(g[1]){d=d instanceof e?d[0]:d,k=d?d.ownerDocument||d:c,j=n.exec(a),j?e.isPlainObject(d)?(a=[c.createElement(j[1])],e.fn.attr.call(a,d,!0)):a=[k.createElement(j[1])]:(j=e.buildFragment([g[1]],[k]),a=(j.cacheable?e.clone(j.fragment):j.fragment).childNodes);return e.merge(this,a)}h=c.getElementById(g[2]);if(h&&h.parentNode){if(h.id!==g[2])return f.find(a);this.length=1,this[0]=h}this.context=c,this.selector=a;return this}return!d||d.jquery?(d||f).find(a):this.constructor(d).find(a)}if(e.isFunction(a))return f.ready(a);a.selector!==b&&(this.selector=a.selector,this.context=a.context);return e.makeArray(a,this)},selector:"",jquery:"1.6.4",length:0,size:function(){return this.length},toArray:function(){return G.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=this.constructor();e.isArray(a)?F.apply(d,a):e.merge(d,a),d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")");return d},each:function(a,b){return e.each(this,a,b)},ready:function(a){e.bindReady(),B.done(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(G.apply(this,arguments),"slice",G.call(arguments).join(","))},map:function(a){return this.pushStack(e.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:F,sort:[].sort,splice:[].splice},e.fn.init.prototype=e.fn,e.extend=e.fn.extend=function(){var a,c,d,f,g,h,i=arguments[0]||{},j=1,k=arguments.length,l=!1;typeof i=="boolean"&&(l=i,i=arguments[1]||{},j=2),typeof i!="object"&&!e.isFunction(i)&&(i={}),k===j&&(i=this,--j);for(;j<k;j++)if((a=arguments[j])!=null)for(c in a){d=i[c],f=a[c];if(i===f)continue;l&&f&&(e.isPlainObject(f)||(g=e.isArray(f)))?(g?(g=!1,h=d&&e.isArray(d)?d:[]):h=d&&e.isPlainObject(d)?d:{},i[c]=e.extend(l,h,f)):f!==b&&(i[c]=f)}return i},e.extend({noConflict:function(b){a.$===e&&(a.$=g),b&&a.jQuery===e&&(a.jQuery=f);return e},isReady:!1,readyWait:1,holdReady:function(a){a?e.readyWait++:e.ready(!0)},ready:function(a){if(a===!0&&!--e.readyWait||a!==!0&&!e.isReady){if(!c.body)return setTimeout(e.ready,1);e.isReady=!0;if(a!==!0&&--e.readyWait>0)return;B.resolveWith(c,[e]),e.fn.trigger&&e(c).trigger("ready").unbind("ready")}},bindReady:function(){if(!B){B=e._Deferred();if(c.readyState==="complete")return setTimeout(e.ready,1);if(c.addEventListener)c.addEventListener("DOMContentLoaded",C,!1),a.addEventListener("load",e.ready,!1);else if(c.attachEvent){c.attachEvent("onreadystatechange",C),a.attachEvent("onload",e.ready);var b=!1;try{b=a.frameElement==null}catch(d){}c.documentElement.doScroll&&b&&K()}}},isFunction:function(a){return e.type(a)==="function"},isArray:Array.isArray||function(a){return e.type(a)==="array"},isWindow:function(a){return a&&typeof a=="object"&&"setInterval"in a},isNaN:function(a){return a==null||!m.test(a)||isNaN(a)},type:function(a){return a==null?String(a):J[D.call(a)]||"object"},isPlainObject:function(a){if(!a||e.type(a)!=="object"||a.nodeType||e.isWindow(a))return!1;try{if(a.constructor&&!E.call(a,"constructor")&&!E.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||E.call(a,d)},isEmptyObject:function(a){for(var b in a)return!1;return!0},error:function(a){throw a},parseJSON:function(b){if(typeof b!="string"||!b)return null;b=e.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(o.test(b.replace(p,"@").replace(q,"]").replace(r,"")))return(new Function("return "+b))();e.error("Invalid JSON: "+b)},parseXML:function(c){var d,f;try{a.DOMParser?(f=new DOMParser,d=f.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(g){d=b}(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&e.error("Invalid XML: "+c);return d},noop:function(){},globalEval:function(b){b&&j.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(x,"ms-").replace(w,y)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,c,d){var f,g=0,h=a.length,i=h===b||e.isFunction(a);if(d){if(i){for(f in a)if(c.apply(a[f],d)===!1)break}else for(;g<h;)if(c.apply(a[g++],d)===!1)break}else if(i){for(f in a)if(c.call(a[f],f,a[f])===!1)break}else for(;g<h;)if(c.call(a[g],g,a[g++])===!1)break;return a},trim:H?function(a){return a==null?"":H.call(a)}:function(a){return a==null?"":(a+"").replace(k,"").replace(l,"")},makeArray:function(a,b){var c=b||[];if(a!=null){var d=e.type(a);a.length==null||d==="string"||d==="function"||d==="regexp"||e.isWindow(a)?F.call(c,a):e.merge(c,a)}return c},inArray:function(a,b){if(!b)return-1;if(I)return I.call(b,a);for(var c=0,d=b.length;c<d;c++)if(b[c]===a)return c;return-1},merge:function(a,c){var d=a.length,e=0;if(typeof c.length=="number")for(var f=c.length;e<f;e++)a[d++]=c[e];else while(c[e]!==b)a[d++]=c[e++];a.length=d;return a},grep:function(a,b,c){var d=[],e;c=!!c;for(var f=0,g=a.length;f<g;f++)e=!!b(a[f],f),c!==e&&d.push(a[f]);return d},map:function(a,c,d){var f,g,h=[],i=0,j=a.length,k=a instanceof e||j!==b&&typeof j=="number"&&(j>0&&a[0]&&a[j-1]||j===0||e.isArray(a));if(k)for(;i<j;i++)f=c(a[i],i,d),f!=null&&(h[h.length]=f);else for(g in a)f=c(a[g],g,d),f!=null&&(h[h.length]=f);return h.concat.apply([],h)},guid:1,proxy:function(a,c){if(typeof c=="string"){var d=a[c];c=a,a=d}if(!e.isFunction(a))return b;var f=G.call(arguments,2),g=function(){return a.apply(c,f.concat(G.call(arguments)))};g.guid=a.guid=a.guid||g.guid||e.guid++;return g},access:function(a,c,d,f,g,h){var i=a.length;if(typeof c=="object"){for(var j in c)e.access(a,j,c[j],f,g,d);return a}if(d!==b){f=!h&&f&&e.isFunction(d);for(var k=0;k<i;k++)g(a[k],c,f?d.call(a[k],k,g(a[k],c)):d,h);return a}return i?g(a[0],c):b},now:function(){return(new Date).getTime()},uaMatch:function(a){a=a.toLowerCase();var b=s.exec(a)||t.exec(a)||u.exec(a)||a.indexOf("compatible")<0&&v.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},sub:function(){function a(b,c){return new a.fn.init(b,c)}e.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function(d,f){f&&f instanceof e&&!(f instanceof a)&&(f=a(f));return e.fn.init.call(this,d,f,b)},a.fn.init.prototype=a.fn;var b=a(c);return a},browser:{}}),e.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){J["[object "+b+"]"]=b.toLowerCase()}),A=e.uaMatch(z),A.browser&&(e.browser[A.browser]=!0,e.browser.version=A.version),e.browser.webkit&&(e.browser.safari=!0),j.test(" ")&&(k=/^[\s\xA0]+/,l=/[\s\xA0]+$/),h=e(c),c.addEventListener?C=function(){c.removeEventListener("DOMContentLoaded",C,!1),e.ready()}:c.attachEvent&&(C=function(){c.readyState==="complete"&&(c.detachEvent("onreadystatechange",C),e.ready())});return e}(),g="done fail isResolved isRejected promise then always pipe".split(" "),h=[].slice;f.extend({_Deferred:function(){var a=[],b,c,d,e={done:function(){if(!d){var c=arguments,g,h,i,j,k;b&&(k=b,b=0);for(g=0,h=c.length;g<h;g++)i=c[g],j=f.type(i),j==="array"?e.done.apply(e,i):j==="function"&&a.push(i);k&&e.resolveWith(k[0],k[1])}return this},resolveWith:function(e,f){if(!d&&!b&&!c){f=f||[],c=1;try{while(a[0])a.shift().apply(e,f)}finally{b=[e,f],c=0}}return this},resolve:function(){e.resolveWith(this,arguments);return this},isResolved:function(){return!!c||!!b},cancel:function(){d=1,a=[];return this}};return e},Deferred:function(a){var b=f._Deferred(),c=f._Deferred(),d;f.extend(b,{then:function(a,c){b.done(a).fail(c);return this},always:function(){return b.done.apply(b,arguments).fail.apply(this,arguments)},fail:c.done,rejectWith:c.resolveWith,reject:c.resolve,isRejected:c.isResolved,pipe:function(a,c){return f.Deferred(function(d){f.each({done:[a,"resolve"],fail:[c,"reject"]},function(a,c){var e=c[0],g=c[1],h;f.isFunction(e)?b[a](function(){h=e.apply(this,arguments),h&&f.isFunction(h.promise)?h.promise().then(d.resolve,d.reject):d[g+"With"](this===b?d:this,[h])}):b[a](d[g])})}).promise()},promise:function(a){if(a==null){if(d)return d;d=a={}}var c=g.length;while(c--)a[g[c]]=b[g[c]];return a}}),b.done(c.cancel).fail(b.cancel),delete b.cancel,a&&a.call(b,b);return b},when:function(a){function i(a){return function(c){b[a]=arguments.length>1?h.call(arguments,0):c,--e||g.resolveWith(g,h.call(b,0))}}var b=arguments,c=0,d=b.length,e=d,g=d<=1&&a&&f.isFunction(a.promise)?a:f.Deferred();if(d>1){for(;c<d;c++)b[c]&&f.isFunction(b[c].promise)?b[c].promise().then(i(c),g.reject):--e;e||g.resolveWith(g,b)}else g!==a&&g.resolveWith(g,d?[a]:[]);return g.promise()}}),f.support=function(){var a=c.createElement("div"),b=c.documentElement,d,e,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u;a.setAttribute("className","t"),a.innerHTML="   <link/><table></table><a href='/a' style='top:1px;float:left;opacity:.55;'>a</a><input type='checkbox'/>",d=a.getElementsByTagName("*"),e=a.getElementsByTagName("a")[0];if(!d||!d.length||!e)return{};g=c.createElement("select"),h=g.appendChild(c.createElement("option")),i=a.getElementsByTagName("input")[0],k={leadingWhitespace:a.firstChild.nodeType===3,tbody:!a.getElementsByTagName("tbody").length,htmlSerialize:!!a.getElementsByTagName("link").length,style:/top/.test(e.getAttribute("style")),hrefNormalized:e.getAttribute("href")==="/a",opacity:/^0.55$/.test(e.style.opacity),cssFloat:!!e.style.cssFloat,checkOn:i.value==="on",optSelected:h.selected,getSetAttribute:a.className!=="t",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0},i.checked=!0,k.noCloneChecked=i.cloneNode(!0).checked,g.disabled=!0,k.optDisabled=!h.disabled;try{delete a.test}catch(v){k.deleteExpando=!1}!a.addEventListener&&a.attachEvent&&a.fireEvent&&(a.attachEvent("onclick",function(){k.noCloneEvent=!1}),a.cloneNode(!0).fireEvent("onclick")),i=c.createElement("input"),i.value="t",i.setAttribute("type","radio"),k.radioValue=i.value==="t",i.setAttribute("checked","checked"),a.appendChild(i),l=c.createDocumentFragment(),l.appendChild(a.firstChild),k.checkClone=l.cloneNode(!0).cloneNode(!0).lastChild.checked,a.innerHTML="",a.style.width=a.style.paddingLeft="1px",m=c.getElementsByTagName("body")[0],o=c.createElement(m?"div":"body"),p={visibility:"hidden",width:0,height:0,border:0,margin:0,background:"none"},m&&f.extend(p,{position:"absolute",left:"-1000px",top:"-1000px"});for(t in p)o.style[t]=p[t];o.appendChild(a),n=m||b,n.insertBefore(o,n.firstChild),k.appendChecked=i.checked,k.boxModel=a.offsetWidth===2,"zoom"in a.style&&(a.style.display="inline",a.style.zoom=1,k.inlineBlockNeedsLayout=a.offsetWidth===2,a.style.display="",a.innerHTML="<div style='width:4px;'></div>",k.shrinkWrapBlocks=a.offsetWidth!==2),a.innerHTML="<table><tr><td style='padding:0;border:0;display:none'></td><td>t</td></tr></table>",q=a.getElementsByTagName("td"),u=q[0].offsetHeight===0,q[0].style.display="",q[1].style.display="none",k.reliableHiddenOffsets=u&&q[0].offsetHeight===0,a.innerHTML="",c.defaultView&&c.defaultView.getComputedStyle&&(j=c.createElement("div"),j.style.width="0",j.style.marginRight="0",a.appendChild(j),k.reliableMarginRight=(parseInt((c.defaultView.getComputedStyle(j,null)||{marginRight:0}).marginRight,10)||0)===0),o.innerHTML="",n.removeChild(o);if(a.attachEvent)for(t in{submit:1,change:1,focusin:1})s="on"+t,u=s in a,u||(a.setAttribute(s,"return;"),u=typeof a[s]=="function"),k[t+"Bubbles"]=u;o=l=g=h=m=j=a=i=null;return k}(),f.boxModel=f.support.boxModel;var i=/^(?:\{.*\}|\[.*\])$/,j=/([A-Z])/g;f.extend({cache:{},uuid:0,expando:"jQuery"+(f.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){a=a.nodeType?f.cache[a[f.expando]]:a[f.expando];return!!a&&!l(a)},data:function(a,c,d,e){if(!!f.acceptData(a)){var g,h,i=f.expando,j=typeof c=="string",k=a.nodeType,l=k?f.cache:a,m=k?a[f.expando]:a[f.expando]&&f.expando;if((!m||e&&m&&l[m]&&!l[m][i])&&j&&d===b)return;m||(k?a[f.expando]=m=++f.uuid:m=f.expando),l[m]||(l[m]={},k||(l[m].toJSON=f.noop));if(typeof c=="object"||typeof c=="function")e?l[m][i]=f.extend(l[m][i],c):l[m]=f.extend(l[m],c);g=l[m],e&&(g[i]||(g[i]={}),g=g[i]),d!==b&&(g[f.camelCase(c)]=d);if(c==="events"&&!g[c])return g[i]&&g[i].events;j?(h=g[c],h==null&&(h=g[f.camelCase(c)])):h=g;return h}},removeData:function(a,b,c){if(!!f.acceptData(a)){var d,e=f.expando,g=a.nodeType,h=g?f.cache:a,i=g?a[f.expando]:f.expando;if(!h[i])return;if(b){d=c?h[i][e]:h[i];if(d){d[b]||(b=f.camelCase(b)),delete d[b];if(!l(d))return}}if(c){delete h[i][e];if(!l(h[i]))return}var j=h[i][e];f.support.deleteExpando||!h.setInterval?delete h[i]:h[i]=null,j?(h[i]={},g||(h[i].toJSON=f.noop),h[i][e]=j):g&&(f.support.deleteExpando?delete a[f.expando]:a.removeAttribute?a.removeAttribute(f.expando):a[f.expando]=null)}},_data:function(a,b,c){return f.data(a,b,c,!0)},acceptData:function(a){if(a.nodeName){var b=f.noData[a.nodeName.toLowerCase()];if(b)return b!==!0&&a.getAttribute("classid")===b}return!0}}),f.fn.extend({data:function(a,c){var d=null;if(typeof a=="undefined"){if(this.length){d=f.data(this[0]);if(this[0].nodeType===1){var e=this[0].attributes,g;for(var h=0,i=e.length;h<i;h++)g=e[h].name,g.indexOf("data-")===0&&(g=f.camelCase(g.substring(5)),k(this[0],g,d[g]))}}return d}if(typeof a=="object")return this.each(function(){f.data(this,a)});var j=a.split(".");j[1]=j[1]?"."+j[1]:"";if(c===b){d=this.triggerHandler("getData"+j[1]+"!",[j[0]]),d===b&&this.length&&(d=f.data(this[0],a),d=k(this[0],a,d));return d===b&&j[1]?this.data(j[0]):d}return this.each(function(){var b=f(this),d=[j[0],c];b.triggerHandler("setData"+j[1]+"!",d),f.data(this,a,c),b.triggerHandler("changeData"+j[1]+"!",d)})},removeData:function(a){return this.each(function(){f.removeData(this,a)})}}),f.extend({_mark:function(a,c){a&&(c=(c||"fx")+"mark",f.data(a,c,(f.data(a,c,b,!0)||0)+1,!0))},_unmark:function(a,c,d){a!==!0&&(d=c,c=a,a=!1);if(c){d=d||"fx";var e=d+"mark",g=a?0:(f.data(c,e,b,!0)||1)-1;g?f.data(c,e,g,!0):(f.removeData(c,e,!0),m(c,d,"mark"))}},queue:function(a,c,d){if(a){c=(c||"fx")+"queue";var e=f.data(a,c,b,!0);d&&(!e||f.isArray(d)?e=f.data(a,c,f.makeArray(d),!0):e.push(d));return e||[]}},dequeue:function(a,b){b=b||"fx";var c=f.queue(a,b),d=c.shift(),e;d==="inprogress"&&(d=c.shift()),d&&(b==="fx"&&c.unshift("inprogress"),d.call(a,function(){f.dequeue(a,b)})),c.length||(f.removeData(a,b+"queue",!0),m(a,b,"queue"))}}),f.fn.extend({queue:function(a,c){typeof a!="string"&&(c=a,a="fx");if(c===b)return f.queue(this[0],a);return this.each(function(){var b=f.queue(this,a,c);a==="fx"&&b[0]!=="inprogress"&&f.dequeue(this,a)})},dequeue:function(a){return this.each(function(){f.dequeue(this,a)})},delay:function(a,b){a=f.fx?f.fx.speeds[a]||a:a,b=b||"fx";return this.queue(b,function(){var c=this;setTimeout(function(){f.dequeue(c,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){function m(){--h||d.resolveWith(e,[e])}typeof a!="string"&&(c=a,a=b),a=a||"fx";var d=f.Deferred(),e=this,g=e.length,h=1,i=a+"defer",j=a+"queue",k=a+"mark",l;while(g--)if(l=f.data(e[g],i,b,!0)||(f.data(e[g],j,b,!0)||f.data(e[g],k,b,!0))&&f.data(e[g],i,f._Deferred(),!0))h++,l.done(m);m();return d.promise()}});var n=/[\n\t\r]/g,o=/\s+/,p=/\r/g,q=/^(?:button|input)$/i,r=/^(?:button|input|object|select|textarea)$/i,s=/^a(?:rea)?$/i,t=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,u,v;f.fn.extend({attr:function(a,b){return f.access(this,a,b,!0,f.attr)},removeAttr:function(a){return this.each(function(){f.removeAttr(this,a)})},prop:function(a,b){return f.access(this,a,b,!0,f.prop)},removeProp:function(a){a=f.propFix[a]||a;return this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,g,h,i;if(f.isFunction(a))return this.each(function(b){f(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(o);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{g=" "+e.className+" ";for(h=0,i=b.length;h<i;h++)~g.indexOf(" "+b[h]+" ")||(g+=b[h]+" ");e.className=f.trim(g)}}}return this},removeClass:function(a){var c,d,e,g,h,i,j;if(f.isFunction(a))return this.each(function(b){f(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(o);for(d=0,e=this.length;d<e;d++){g=this[d];if(g.nodeType===1&&g.className)if(a){h=(" "+g.className+" ").replace(n," ");for(i=0,j=c.length;i<j;i++)h=h.replace(" "+c[i]+" "," ");g.className=f.trim(h)}else g.className=""}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";if(f.isFunction(a))return this.each(function(c){f(this).toggleClass(a.call(this,c,this.className,b),b)});return this.each(function(){if(c==="string"){var e,g=0,h=f(this),i=b,j=a.split(o);while(e=j[g++])i=d?i:!h.hasClass(e),h[i?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&f._data(this,"__className__",this.className),this.className=this.className||a===!1?"":f._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ";for(var c=0,d=this.length;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(n," ").indexOf(b)>-1)return!0;return!1},val:function(a){var c,d,e=this[0];if(!arguments.length){if(e){c=f.valHooks[e.nodeName.toLowerCase()]||f.valHooks[e.type];if(c&&"get"in c&&(d=c.get(e,"value"))!==b)return d;d=e.value;return typeof d=="string"?d.replace(p,""):d==null?"":d}return b}var g=f.isFunction(a);return this.each(function(d){var e=f(this),h;if(this.nodeType===1){g?h=a.call(this,d,e.val()):h=a,h==null?h="":typeof h=="number"?h+="":f.isArray(h)&&(h=f.map(h,function(a){return a==null?"":a+""})),c=f.valHooks[this.nodeName.toLowerCase()]||f.valHooks[this.type];if(!c||!("set"in c)||c.set(this,h,"value")===b)this.value=h}})}}),f.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c=a.selectedIndex,d=[],e=a.options,g=a.type==="select-one";if(c<0)return null;for(var h=g?c:0,i=g?c+1:e.length;h<i;h++){var j=e[h];if(j.selected&&(f.support.optDisabled?!j.disabled:j.getAttribute("disabled")===null)&&(!j.parentNode.disabled||!f.nodeName(j.parentNode,"optgroup"))){b=f(j).val();if(g)return b;d.push(b)}}if(g&&!d.length&&e.length)return f(e[c]).val();return d},set:function(a,b){var c=f.makeArray(b);f(a).find("option").each(function(){this.selected=f.inArray(f(this).val(),c)>=0}),c.length||(a.selectedIndex=-1);return c}}},attrFn:{val:!0,css:!0,html:!0,text:!0,data:!0,width:!0,height:!0,offset:!0},attrFix:{tabindex:"tabIndex"},attr:function(a,c,d,e){var g=a.nodeType;if(!a||g===3||g===8||g===2)return b;if(e&&c in f.attrFn)return f(a)[c](d);if(!("getAttribute"in a))return f.prop(a,c,d);var h,i,j=g!==1||!f.isXMLDoc(a);j&&(c=f.attrFix[c]||c,i=f.attrHooks[c],i||(t.test(c)?i=v:u&&(i=u)));if(d!==b){if(d===null){f.removeAttr(a,c);return b}if(i&&"set"in i&&j&&(h=i.set(a,d,c))!==b)return h;a.setAttribute(c,""+d);return d}if(i&&"get"in i&&j&&(h=i.get(a,c))!==null)return h;h=a.getAttribute(c);return h===null?b:h},removeAttr:function(a,b){var c;a.nodeType===1&&(b=f.attrFix[b]||b,f.attr(a,b,""),a.removeAttribute(b),t.test(b)&&(c=f.propFix[b]||b)in a&&(a[c]=!1))},attrHooks:{type:{set:function(a,b){if(q.test(a.nodeName)&&a.parentNode)f.error("type property can't be changed");else if(!f.support.radioValue&&b==="radio"&&f.nodeName(a,"input")){var c=a.value;a.setAttribute("type",b),c&&(a.value=c);return b}}},value:{get:function(a,b){if(u&&f.nodeName(a,"button"))return u.get(a,b);return b in a?a.value:null},set:function(a,b,c){if(u&&f.nodeName(a,"button"))return u.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e=a.nodeType;if(!a||e===3||e===8||e===2)return b;var g,h,i=e!==1||!f.isXMLDoc(a);i&&(c=f.propFix[c]||c,h=f.propHooks[c]);return d!==b?h&&"set"in h&&(g=h.set(a,d,c))!==b?g:a[c]=d:h&&"get"in h&&(g=h.get(a,c))!==null?g:a[c]},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):r.test(a.nodeName)||s.test(a.nodeName)&&a.href?0:b}}}}),f.attrHooks.tabIndex=f.propHooks.tabIndex,v={get:function(a,c){var d;return f.prop(a,c)===!0||(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;b===!1?f.removeAttr(a,c):(d=f.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase()));return c}},f.support.getSetAttribute||(u=f.valHooks.button={get:function(a,c){var d;d=a.getAttributeNode(c);return d&&d.nodeValue!==""?d.nodeValue:b},set:function(a,b,d){var e=a.getAttributeNode(d);e||(e=c.createAttribute(d),a.setAttributeNode(e));return e.nodeValue=b+""}},f.each(["width","height"],function(a,b){f.attrHooks[b]=f.extend(f.attrHooks[b],{set:function(a,c){if(c===""){a.setAttribute(b,"auto");return c}}})})),f.support.hrefNormalized||f.each(["href","src","width","height"],function(a,c){f.attrHooks[c]=f.extend(f.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),f.support.style||(f.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=""+b}}),f.support.optSelected||(f.propHooks.selected=f.extend(f.propHooks.selected,{get:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex);return null}})),f.support.checkOn||f.each(["radio","checkbox"],function(){f.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),f.each(["radio","checkbox"],function(){f.valHooks[this]=f.extend(f.valHooks[this],{set:function(a,b){if(f.isArray(b))return a.checked=f.inArray(f(a).val(),b)>=0}})});var w=/\.(.*)$/,x=/^(?:textarea|input|select)$/i,y=/\./g,z=/ /g,A=/[^\w\s.|`]/g,B=function(a){return a.replace(A,"\\$&")};f.event={add:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){if(d===!1)d=C;else if(!d)return;var g,h;d.handler&&(g=d,d=g.handler),d.guid||(d.guid=f.guid++);var i=f._data(a);if(!i)return;var j=i.events,k=i.handle;j||(i.events=j={}),k||(i.handle=k=function(a){return typeof f!="undefined"&&(!a||f.event.triggered!==a.type)?f.event.handle.apply(k.elem,arguments):b}),k.elem=a,c=c.split(" ");var l,m=0,n;while(l=c[m++]){h=g?f.extend({},g):{handler:d,data:e},l.indexOf(".")>-1?(n=l.split("."),l=n.shift(),h.namespace=n.slice(0).sort().join(".")):(n=[],h.namespace=""),h.type=l,h.guid||(h.guid=d.guid);var o=j[l],p=f.event.special[l]||{};if(!o){o=j[l]=[];if(!p.setup||p.setup.call(a,e,n,k)===!1)a.addEventListener?a.addEventListener(l,k,!1):a.attachEvent&&a.attachEvent("on"+l,k)}p.add&&(p.add.call(a,h),h.handler.guid||(h.handler.guid=d.guid)),o.push(h),f.event.global[l]=!0}a=null}},global:{},remove:function(a,c,d,e){if(a.nodeType!==3&&a.nodeType!==8){d===!1&&(d=C);var g,h,i,j,k=0,l,m,n,o,p,q,r,s=f.hasData(a)&&f._data(a),t=s&&s.events;if(!s||!t)return;c&&c.type&&(d=c.handler,c=c.type);if(!c||typeof c=="string"&&c.charAt(0)==="."){c=c||"";for(h in t)f.event.remove(a,h+c);return}c=c.split(" ");while(h=c[k++]){r=h,q=null,l=h.indexOf(".")<0,m=[],l||(m=h.split("."),h=m.shift(),n=new RegExp("(^|\\.)"+f.map(m.slice(0).sort(),B).join("\\.(?:.*\\.)?")+"(\\.|$)")),p=t[h];if(!p)continue;if(!d){for(j=0;j<p.length;j++){q=p[j];if(l||n.test(q.namespace))f.event.remove(a,r,q.handler,j),p.splice(j--,1)}continue}o=f.event.special[h]||{};for(j=e||0;j<p.length;j++){q=p[j];if(d.guid===q.guid){if(l||n.test(q.namespace))e==null&&p.splice(j--,1),o.remove&&o.remove.call(a,q);if(e!=null)break}}if(p.length===0||e!=null&&p.length===1)(!o.teardown||o.teardown.call(a,m)===!1)&&f.removeEvent(a,h,s.handle),g=null,delete 
t[h]}if(f.isEmptyObject(t)){var u=s.handle;u&&(u.elem=null),delete s.events,delete s.handle,f.isEmptyObject(s)&&f.removeData(a,b,!0)}}},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,e,g){var h=c.type||c,i=[],j;h.indexOf("!")>=0&&(h=h.slice(0,-1),j=!0),h.indexOf(".")>=0&&(i=h.split("."),h=i.shift(),i.sort());if(!!e&&!f.event.customEvent[h]||!!f.event.global[h]){c=typeof c=="object"?c[f.expando]?c:new f.Event(h,c):new f.Event(h),c.type=h,c.exclusive=j,c.namespace=i.join("."),c.namespace_re=new RegExp("(^|\\.)"+i.join("\\.(?:.*\\.)?")+"(\\.|$)");if(g||!e)c.preventDefault(),c.stopPropagation();if(!e){f.each(f.cache,function(){var a=f.expando,b=this[a];b&&b.events&&b.events[h]&&f.event.trigger(c,d,b.handle.elem)});return}if(e.nodeType===3||e.nodeType===8)return;c.result=b,c.target=e,d=d!=null?f.makeArray(d):[],d.unshift(c);var k=e,l=h.indexOf(":")<0?"on"+h:"";do{var m=f._data(k,"handle");c.currentTarget=k,m&&m.apply(k,d),l&&f.acceptData(k)&&k[l]&&k[l].apply(k,d)===!1&&(c.result=!1,c.preventDefault()),k=k.parentNode||k.ownerDocument||k===c.target.ownerDocument&&a}while(k&&!c.isPropagationStopped());if(!c.isDefaultPrevented()){var n,o=f.event.special[h]||{};if((!o._default||o._default.call(e.ownerDocument,c)===!1)&&(h!=="click"||!f.nodeName(e,"a"))&&f.acceptData(e)){try{l&&e[h]&&(n=e[l],n&&(e[l]=null),f.event.triggered=h,e[h]())}catch(p){}n&&(e[l]=n),f.event.triggered=b}}return c.result}},handle:function(c){c=f.event.fix(c||a.event);var d=((f._data(this,"events")||{})[c.type]||[]).slice(0),e=!c.exclusive&&!c.namespace,g=Array.prototype.slice.call(arguments,0);g[0]=c,c.currentTarget=this;for(var h=0,i=d.length;h<i;h++){var j=d[h];if(e||c.namespace_re.test(j.namespace)){c.handler=j.handler,c.data=j.data,c.handleObj=j;var k=j.handler.apply(this,g);k!==b&&(c.result=k,k===!1&&(c.preventDefault(),c.stopPropagation()));if(c.isImmediatePropagationStopped())break}}return c.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(a){if(a[f.expando])return a;var d=a;a=f.Event(d);for(var e=this.props.length,g;e;)g=this.props[--e],a[g]=d[g];a.target||(a.target=a.srcElement||c),a.target.nodeType===3&&(a.target=a.target.parentNode),!a.relatedTarget&&a.fromElement&&(a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement);if(a.pageX==null&&a.clientX!=null){var h=a.target.ownerDocument||c,i=h.documentElement,j=h.body;a.pageX=a.clientX+(i&&i.scrollLeft||j&&j.scrollLeft||0)-(i&&i.clientLeft||j&&j.clientLeft||0),a.pageY=a.clientY+(i&&i.scrollTop||j&&j.scrollTop||0)-(i&&i.clientTop||j&&j.clientTop||0)}a.which==null&&(a.charCode!=null||a.keyCode!=null)&&(a.which=a.charCode!=null?a.charCode:a.keyCode),!a.metaKey&&a.ctrlKey&&(a.metaKey=a.ctrlKey),!a.which&&a.button!==b&&(a.which=a.button&1?1:a.button&2?3:a.button&4?2:0);return a},guid:1e8,proxy:f.proxy,special:{ready:{setup:f.bindReady,teardown:f.noop},live:{add:function(a){f.event.add(this,M(a.origType,a.selector),f.extend({},a,{handler:L,guid:a.handler.guid}))},remove:function(a){f.event.remove(this,M(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,c){f.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}}},f.removeEvent=c.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){a.detachEvent&&a.detachEvent("on"+b,c)},f.Event=function(a,b){if(!this.preventDefault)return new f.Event(a,b);a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?D:C):this.type=a,b&&f.extend(this,b),this.timeStamp=f.now(),this[f.expando]=!0},f.Event.prototype={preventDefault:function(){this.isDefaultPrevented=D;var a=this.originalEvent;!a||(a.preventDefault?a.preventDefault():a.returnValue=!1)},stopPropagation:function(){this.isPropagationStopped=D;var a=this.originalEvent;!a||(a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0)},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=D,this.stopPropagation()},isDefaultPrevented:C,isPropagationStopped:C,isImmediatePropagationStopped:C};var E=function(a){var b=a.relatedTarget,c=!1,d=a.type;a.type=a.data,b!==this&&(b&&(c=f.contains(this,b)),c||(f.event.handle.apply(this,arguments),a.type=d))},F=function(a){a.type=a.data,f.event.handle.apply(this,arguments)};f.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){f.event.special[a]={setup:function(c){f.event.add(this,b,c&&c.selector?F:E,a)},teardown:function(a){f.event.remove(this,b,a&&a.selector?F:E)}}}),f.support.submitBubbles||(f.event.special.submit={setup:function(a,b){if(!f.nodeName(this,"form"))f.event.add(this,"click.specialSubmit",function(a){var b=a.target,c=f.nodeName(b,"input")||f.nodeName(b,"button")?b.type:"";(c==="submit"||c==="image")&&f(b).closest("form").length&&J("submit",this,arguments)}),f.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,c=f.nodeName(b,"input")||f.nodeName(b,"button")?b.type:"";(c==="text"||c==="password")&&f(b).closest("form").length&&a.keyCode===13&&J("submit",this,arguments)});else return!1},teardown:function(a){f.event.remove(this,".specialSubmit")}});if(!f.support.changeBubbles){var G,H=function(a){var b=f.nodeName(a,"input")?a.type:"",c=a.value;b==="radio"||b==="checkbox"?c=a.checked:b==="select-multiple"?c=a.selectedIndex>-1?f.map(a.options,function(a){return a.selected}).join("-"):"":f.nodeName(a,"select")&&(c=a.selectedIndex);return c},I=function(c){var d=c.target,e,g;if(!!x.test(d.nodeName)&&!d.readOnly){e=f._data(d,"_change_data"),g=H(d),(c.type!=="focusout"||d.type!=="radio")&&f._data(d,"_change_data",g);if(e===b||g===e)return;if(e!=null||g)c.type="change",c.liveFired=b,f.event.trigger(c,arguments[1],d)}};f.event.special.change={filters:{focusout:I,beforedeactivate:I,click:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(c==="radio"||c==="checkbox"||f.nodeName(b,"select"))&&I.call(this,a)},keydown:function(a){var b=a.target,c=f.nodeName(b,"input")?b.type:"";(a.keyCode===13&&!f.nodeName(b,"textarea")||a.keyCode===32&&(c==="checkbox"||c==="radio")||c==="select-multiple")&&I.call(this,a)},beforeactivate:function(a){var b=a.target;f._data(b,"_change_data",H(b))}},setup:function(a,b){if(this.type==="file")return!1;for(var c in G)f.event.add(this,c+".specialChange",G[c]);return x.test(this.nodeName)},teardown:function(a){f.event.remove(this,".specialChange");return x.test(this.nodeName)}},G=f.event.special.change.filters,G.focus=G.beforeactivate}f.support.focusinBubbles||f.each({focus:"focusin",blur:"focusout"},function(a,b){function e(a){var c=f.event.fix(a);c.type=b,c.originalEvent={},f.event.trigger(c,null,c.target),c.isDefaultPrevented()&&a.preventDefault()}var d=0;f.event.special[b]={setup:function(){d++===0&&c.addEventListener(a,e,!0)},teardown:function(){--d===0&&c.removeEventListener(a,e,!0)}}}),f.each(["bind","one"],function(a,c){f.fn[c]=function(a,d,e){var g;if(typeof a=="object"){for(var h in a)this[c](h,d,a[h],e);return this}if(arguments.length===2||d===!1)e=d,d=b;c==="one"?(g=function(a){f(this).unbind(a,g);return e.apply(this,arguments)},g.guid=e.guid||f.guid++):g=e;if(a==="unload"&&c!=="one")this.one(a,d,e);else for(var i=0,j=this.length;i<j;i++)f.event.add(this[i],a,g,d);return this}}),f.fn.extend({unbind:function(a,b){if(typeof a=="object"&&!a.preventDefault)for(var c in a)this.unbind(c,a[c]);else for(var d=0,e=this.length;d<e;d++)f.event.remove(this[d],a,b);return this},delegate:function(a,b,c,d){return this.live(b,c,d,a)},undelegate:function(a,b,c){return arguments.length===0?this.unbind("live"):this.die(b,null,c,a)},trigger:function(a,b){return this.each(function(){f.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return f.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||f.guid++,d=0,e=function(c){var e=(f.data(this,"lastToggle"+a.guid)||0)%d;f.data(this,"lastToggle"+a.guid,e+1),c.preventDefault();return b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var K={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};f.each(["live","die"],function(a,c){f.fn[c]=function(a,d,e,g){var h,i=0,j,k,l,m=g||this.selector,n=g?this:f(this.context);if(typeof a=="object"&&!a.preventDefault){for(var o in a)n[c](o,d,a[o],m);return this}if(c==="die"&&!a&&g&&g.charAt(0)==="."){n.unbind(g);return this}if(d===!1||f.isFunction(d))e=d||C,d=b;a=(a||"").split(" ");while((h=a[i++])!=null){j=w.exec(h),k="",j&&(k=j[0],h=h.replace(w,""));if(h==="hover"){a.push("mouseenter"+k,"mouseleave"+k);continue}l=h,K[h]?(a.push(K[h]+k),h=h+k):h=(K[h]||h)+k;if(c==="live")for(var p=0,q=n.length;p<q;p++)f.event.add(n[p],"live."+M(h,m),{data:d,selector:m,handler:e,origType:h,origHandler:e,preType:l});else n.unbind("live."+M(h,m),e)}return this}}),f.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".split(" "),function(a,b){f.fn[b]=function(a,c){c==null&&(c=a,a=null);return arguments.length>0?this.bind(b,a,c):this.trigger(b)},f.attrFn&&(f.attrFn[b]=!0)}),function(){function u(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}if(i.nodeType===1){f||(i.sizcache=c,i.sizset=g);if(typeof b!="string"){if(i===b){j=!0;break}}else if(k.filter(b,[i]).length>0){j=i;break}}i=i[a]}d[g]=j}}}function t(a,b,c,d,e,f){for(var g=0,h=d.length;g<h;g++){var i=d[g];if(i){var j=!1;i=i[a];while(i){if(i.sizcache===c){j=d[i.sizset];break}i.nodeType===1&&!f&&(i.sizcache=c,i.sizset=g);if(i.nodeName.toLowerCase()===b){j=i;break}i=i[a]}d[g]=j}}}var a=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,d=0,e=Object.prototype.toString,g=!1,h=!0,i=/\\/g,j=/\W/;[0,0].sort(function(){h=!1;return 0});var k=function(b,d,f,g){f=f||[],d=d||c;var h=d;if(d.nodeType!==1&&d.nodeType!==9)return[];if(!b||typeof b!="string")return f;var i,j,n,o,q,r,s,t,u=!0,w=k.isXML(d),x=[],y=b;do{a.exec(""),i=a.exec(y);if(i){y=i[3],x.push(i[1]);if(i[2]){o=i[3];break}}}while(i);if(x.length>1&&m.exec(b))if(x.length===2&&l.relative[x[0]])j=v(x[0]+x[1],d);else{j=l.relative[x[0]]?[d]:k(x.shift(),d);while(x.length)b=x.shift(),l.relative[b]&&(b+=x.shift()),j=v(b,j)}else{!g&&x.length>1&&d.nodeType===9&&!w&&l.match.ID.test(x[0])&&!l.match.ID.test(x[x.length-1])&&(q=k.find(x.shift(),d,w),d=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]);if(d){q=g?{expr:x.pop(),set:p(g)}:k.find(x.pop(),x.length===1&&(x[0]==="~"||x[0]==="+")&&d.parentNode?d.parentNode:d,w),j=q.expr?k.filter(q.expr,q.set):q.set,x.length>0?n=p(j):u=!1;while(x.length)r=x.pop(),s=r,l.relative[r]?s=x.pop():r="",s==null&&(s=d),l.relative[r](n,s,w)}else n=x=[]}n||(n=j),n||k.error(r||b);if(e.call(n)==="[object Array]")if(!u)f.push.apply(f,n);else if(d&&d.nodeType===1)for(t=0;n[t]!=null;t++)n[t]&&(n[t]===!0||n[t].nodeType===1&&k.contains(d,n[t]))&&f.push(j[t]);else for(t=0;n[t]!=null;t++)n[t]&&n[t].nodeType===1&&f.push(j[t]);else p(n,f);o&&(k(o,h,f,g),k.uniqueSort(f));return f};k.uniqueSort=function(a){if(r){g=h,a.sort(r);if(g)for(var b=1;b<a.length;b++)a[b]===a[b-1]&&a.splice(b--,1)}return a},k.matches=function(a,b){return k(a,null,null,b)},k.matchesSelector=function(a,b){return k(b,null,null,[a]).length>0},k.find=function(a,b,c){var d;if(!a)return[];for(var e=0,f=l.order.length;e<f;e++){var g,h=l.order[e];if(g=l.leftMatch[h].exec(a)){var j=g[1];g.splice(1,1);if(j.substr(j.length-1)!=="\\"){g[1]=(g[1]||"").replace(i,""),d=l.find[h](g,b,c);if(d!=null){a=a.replace(l.match[h],"");break}}}}d||(d=typeof b.getElementsByTagName!="undefined"?b.getElementsByTagName("*"):[]);return{set:d,expr:a}},k.filter=function(a,c,d,e){var f,g,h=a,i=[],j=c,m=c&&c[0]&&k.isXML(c[0]);while(a&&c.length){for(var n in l.filter)if((f=l.leftMatch[n].exec(a))!=null&&f[2]){var o,p,q=l.filter[n],r=f[1];g=!1,f.splice(1,1);if(r.substr(r.length-1)==="\\")continue;j===i&&(i=[]);if(l.preFilter[n]){f=l.preFilter[n](f,j,d,i,e,m);if(!f)g=o=!0;else if(f===!0)continue}if(f)for(var s=0;(p=j[s])!=null;s++)if(p){o=q(p,f,s,j);var t=e^!!o;d&&o!=null?t?g=!0:j[s]=!1:t&&(i.push(p),g=!0)}if(o!==b){d||(j=i),a=a.replace(l.match[n],"");if(!g)return[];break}}if(a===h)if(g==null)k.error(a);else break;h=a}return j},k.error=function(a){throw"Syntax error, unrecognized expression: "+a};var l=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(?:(['"])(.*?)\3|(#?(?:[\w\u00c0-\uFFFF\-]|\\.)*)|)|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\(\s*(even|odd|(?:[+\-]?\d+|(?:[+\-]?\d*)?n\s*(?:[+\-]\s*\d+)?))\s*\))?/,POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(a){return a.getAttribute("href")},type:function(a){return a.getAttribute("type")}},relative:{"+":function(a,b){var c=typeof b=="string",d=c&&!j.test(b),e=c&&!d;d&&(b=b.toLowerCase());for(var f=0,g=a.length,h;f<g;f++)if(h=a[f]){while((h=h.previousSibling)&&h.nodeType!==1);a[f]=e||h&&h.nodeName.toLowerCase()===b?h||!1:h===b}e&&k.filter(b,a,!0)},">":function(a,b){var c,d=typeof b=="string",e=0,f=a.length;if(d&&!j.test(b)){b=b.toLowerCase();for(;e<f;e++){c=a[e];if(c){var g=c.parentNode;a[e]=g.nodeName.toLowerCase()===b?g:!1}}}else{for(;e<f;e++)c=a[e],c&&(a[e]=d?c.parentNode:c.parentNode===b);d&&k.filter(b,a,!0)}},"":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("parentNode",b,f,a,e,c)},"~":function(a,b,c){var e,f=d++,g=u;typeof b=="string"&&!j.test(b)&&(b=b.toLowerCase(),e=b,g=t),g("previousSibling",b,f,a,e,c)}},find:{ID:function(a,b,c){if(typeof b.getElementById!="undefined"&&!c){var d=b.getElementById(a[1]);return d&&d.parentNode?[d]:[]}},NAME:function(a,b){if(typeof b.getElementsByName!="undefined"){var c=[],d=b.getElementsByName(a[1]);for(var e=0,f=d.length;e<f;e++)d[e].getAttribute("name")===a[1]&&c.push(d[e]);return c.length===0?null:c}},TAG:function(a,b){if(typeof b.getElementsByTagName!="undefined")return b.getElementsByTagName(a[1])}},preFilter:{CLASS:function(a,b,c,d,e,f){a=" "+a[1].replace(i,"")+" ";if(f)return a;for(var g=0,h;(h=b[g])!=null;g++)h&&(e^(h.className&&(" "+h.className+" ").replace(/[\t\n\r]/g," ").indexOf(a)>=0)?c||d.push(h):c&&(b[g]=!1));return!1},ID:function(a){return a[1].replace(i,"")},TAG:function(a,b){return a[1].replace(i,"").toLowerCase()},CHILD:function(a){if(a[1]==="nth"){a[2]||k.error(a[0]),a[2]=a[2].replace(/^\+|\s*/g,"");var b=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(a[2]==="even"&&"2n"||a[2]==="odd"&&"2n+1"||!/\D/.test(a[2])&&"0n+"+a[2]||a[2]);a[2]=b[1]+(b[2]||1)-0,a[3]=b[3]-0}else a[2]&&k.error(a[0]);a[0]=d++;return a},ATTR:function(a,b,c,d,e,f){var g=a[1]=a[1].replace(i,"");!f&&l.attrMap[g]&&(a[1]=l.attrMap[g]),a[4]=(a[4]||a[5]||"").replace(i,""),a[2]==="~="&&(a[4]=" "+a[4]+" ");return a},PSEUDO:function(b,c,d,e,f){if(b[1]==="not")if((a.exec(b[3])||"").length>1||/^\w/.test(b[3]))b[3]=k(b[3],null,null,c);else{var g=k.filter(b[3],c,d,!0^f);d||e.push.apply(e,g);return!1}else if(l.match.POS.test(b[0])||l.match.CHILD.test(b[0]))return!0;return b},POS:function(a){a.unshift(!0);return a}},filters:{enabled:function(a){return a.disabled===!1&&a.type!=="hidden"},disabled:function(a){return a.disabled===!0},checked:function(a){return a.checked===!0},selected:function(a){a.parentNode&&a.parentNode.selectedIndex;return a.selected===!0},parent:function(a){return!!a.firstChild},empty:function(a){return!a.firstChild},has:function(a,b,c){return!!k(c[3],a).length},header:function(a){return/h\d/i.test(a.nodeName)},text:function(a){var b=a.getAttribute("type"),c=a.type;return a.nodeName.toLowerCase()==="input"&&"text"===c&&(b===c||b===null)},radio:function(a){return a.nodeName.toLowerCase()==="input"&&"radio"===a.type},checkbox:function(a){return a.nodeName.toLowerCase()==="input"&&"checkbox"===a.type},file:function(a){return a.nodeName.toLowerCase()==="input"&&"file"===a.type},password:function(a){return a.nodeName.toLowerCase()==="input"&&"password"===a.type},submit:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"submit"===a.type},image:function(a){return a.nodeName.toLowerCase()==="input"&&"image"===a.type},reset:function(a){var b=a.nodeName.toLowerCase();return(b==="input"||b==="button")&&"reset"===a.type},button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&"button"===a.type||b==="button"},input:function(a){return/input|select|textarea|button/i.test(a.nodeName)},focus:function(a){return a===a.ownerDocument.activeElement}},setFilters:{first:function(a,b){return b===0},last:function(a,b,c,d){return b===d.length-1},even:function(a,b){return b%2===0},odd:function(a,b){return b%2===1},lt:function(a,b,c){return b<c[3]-0},gt:function(a,b,c){return b>c[3]-0},nth:function(a,b,c){return c[3]-0===b},eq:function(a,b,c){return c[3]-0===b}},filter:{PSEUDO:function(a,b,c,d){var e=b[1],f=l.filters[e];if(f)return f(a,c,b,d);if(e==="contains")return(a.textContent||a.innerText||k.getText([a])||"").indexOf(b[3])>=0;if(e==="not"){var g=b[3];for(var h=0,i=g.length;h<i;h++)if(g[h]===a)return!1;return!0}k.error(e)},CHILD:function(a,b){var c=b[1],d=a;switch(c){case"only":case"first":while(d=d.previousSibling)if(d.nodeType===1)return!1;if(c==="first")return!0;d=a;case"last":while(d=d.nextSibling)if(d.nodeType===1)return!1;return!0;case"nth":var e=b[2],f=b[3];if(e===1&&f===0)return!0;var g=b[0],h=a.parentNode;if(h&&(h.sizcache!==g||!a.nodeIndex)){var i=0;for(d=h.firstChild;d;d=d.nextSibling)d.nodeType===1&&(d.nodeIndex=++i);h.sizcache=g}var j=a.nodeIndex-f;return e===0?j===0:j%e===0&&j/e>=0}},ID:function(a,b){return a.nodeType===1&&a.getAttribute("id")===b},TAG:function(a,b){return b==="*"&&a.nodeType===1||a.nodeName.toLowerCase()===b},CLASS:function(a,b){return(" "+(a.className||a.getAttribute("class"))+" ").indexOf(b)>-1},ATTR:function(a,b){var c=b[1],d=l.attrHandle[c]?l.attrHandle[c](a):a[c]!=null?a[c]:a.getAttribute(c),e=d+"",f=b[2],g=b[4];return d==null?f==="!=":f==="="?e===g:f==="*="?e.indexOf(g)>=0:f==="~="?(" "+e+" ").indexOf(g)>=0:g?f==="!="?e!==g:f==="^="?e.indexOf(g)===0:f==="$="?e.substr(e.length-g.length)===g:f==="|="?e===g||e.substr(0,g.length+1)===g+"-":!1:e&&d!==!1},POS:function(a,b,c,d){var e=b[2],f=l.setFilters[e];if(f)return f(a,c,b,d)}}},m=l.match.POS,n=function(a,b){return"\\"+(b-0+1)};for(var o in l.match)l.match[o]=new RegExp(l.match[o].source+/(?![^\[]*\])(?![^\(]*\))/.source),l.leftMatch[o]=new RegExp(/(^(?:.|\r|\n)*?)/.source+l.match[o].source.replace(/\\(\d+)/g,n));var p=function(a,b){a=Array.prototype.slice.call(a,0);if(b){b.push.apply(b,a);return b}return a};try{Array.prototype.slice.call(c.documentElement.childNodes,0)[0].nodeType}catch(q){p=function(a,b){var c=0,d=b||[];if(e.call(a)==="[object Array]")Array.prototype.push.apply(d,a);else if(typeof a.length=="number")for(var f=a.length;c<f;c++)d.push(a[c]);else for(;a[c];c++)d.push(a[c]);return d}}var r,s;c.documentElement.compareDocumentPosition?r=function(a,b){if(a===b){g=!0;return 0}if(!a.compareDocumentPosition||!b.compareDocumentPosition)return a.compareDocumentPosition?-1:1;return a.compareDocumentPosition(b)&4?-1:1}:(r=function(a,b){if(a===b){g=!0;return 0}if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],h=a.parentNode,i=b.parentNode,j=h;if(h===i)return s(a,b);if(!h)return-1;if(!i)return 1;while(j)e.unshift(j),j=j.parentNode;j=i;while(j)f.unshift(j),j=j.parentNode;c=e.length,d=f.length;for(var k=0;k<c&&k<d;k++)if(e[k]!==f[k])return s(e[k],f[k]);return k===c?s(a,f[k],-1):s(e[k],b,1)},s=function(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}),k.getText=function(a){var b="",c;for(var d=0;a[d];d++)c=a[d],c.nodeType===3||c.nodeType===4?b+=c.nodeValue:c.nodeType!==8&&(b+=k.getText(c.childNodes));return b},function(){var a=c.createElement("div"),d="script"+(new Date).getTime(),e=c.documentElement;a.innerHTML="<a name='"+d+"'/>",e.insertBefore(a,e.firstChild),c.getElementById(d)&&(l.find.ID=function(a,c,d){if(typeof c.getElementById!="undefined"&&!d){var e=c.getElementById(a[1]);return e?e.id===a[1]||typeof e.getAttributeNode!="undefined"&&e.getAttributeNode("id").nodeValue===a[1]?[e]:b:[]}},l.filter.ID=function(a,b){var c=typeof a.getAttributeNode!="undefined"&&a.getAttributeNode("id");return a.nodeType===1&&c&&c.nodeValue===b}),e.removeChild(a),e=a=null}(),function(){var a=c.createElement("div");a.appendChild(c.createComment("")),a.getElementsByTagName("*").length>0&&(l.find.TAG=function(a,b){var c=b.getElementsByTagName(a[1]);if(a[1]==="*"){var d=[];for(var e=0;c[e];e++)c[e].nodeType===1&&d.push(c[e]);c=d}return c}),a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!="undefined"&&a.firstChild.getAttribute("href")!=="#"&&(l.attrHandle.href=function(a){return a.getAttribute("href",2)}),a=null}(),c.querySelectorAll&&function(){var a=k,b=c.createElement("div"),d="__sizzle__";b.innerHTML="<p class='TEST'></p>";if(!b.querySelectorAll||b.querySelectorAll(".TEST").length!==0){k=function(b,e,f,g){e=e||c;if(!g&&!k.isXML(e)){var h=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b);if(h&&(e.nodeType===1||e.nodeType===9)){if(h[1])return p(e.getElementsByTagName(b),f);if(h[2]&&l.find.CLASS&&e.getElementsByClassName)return p(e.getElementsByClassName(h[2]),f)}if(e.nodeType===9){if(b==="body"&&e.body)return p([e.body],f);if(h&&h[3]){var i=e.getElementById(h[3]);if(!i||!i.parentNode)return p([],f);if(i.id===h[3])return p([i],f)}try{return p(e.querySelectorAll(b),f)}catch(j){}}else if(e.nodeType===1&&e.nodeName.toLowerCase()!=="object"){var m=e,n=e.getAttribute("id"),o=n||d,q=e.parentNode,r=/^\s*[+~]/.test(b);n?o=o.replace(/'/g,"\\$&"):e.setAttribute("id",o),r&&q&&(e=e.parentNode);try{if(!r||q)return p(e.querySelectorAll("[id='"+o+"'] "+b),f)}catch(s){}finally{n||m.removeAttribute("id")}}}return a(b,e,f,g)};for(var e in a)k[e]=a[e];b=null}}(),function(){var a=c.documentElement,b=a.matchesSelector||a.mozMatchesSelector||a.webkitMatchesSelector||a.msMatchesSelector;if(b){var d=!b.call(c.createElement("div"),"div"),e=!1;try{b.call(c.documentElement,"[test!='']:sizzle")}catch(f){e=!0}k.matchesSelector=function(a,c){c=c.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(a))try{if(e||!l.match.PSEUDO.test(c)&&!/!=/.test(c)){var f=b.call(a,c);if(f||!d||a.document&&a.document.nodeType!==11)return f}}catch(g){}return k(c,null,null,[a]).length>0}}}(),function(){var a=c.createElement("div");a.innerHTML="<div class='test e'></div><div class='test'></div>";if(!!a.getElementsByClassName&&a.getElementsByClassName("e").length!==0){a.lastChild.className="e";if(a.getElementsByClassName("e").length===1)return;l.order.splice(1,0,"CLASS"),l.find.CLASS=function(a,b,c){if(typeof b.getElementsByClassName!="undefined"&&!c)return b.getElementsByClassName(a[1])},a=null}}(),c.documentElement.contains?k.contains=function(a,b){return a!==b&&(a.contains?a.contains(b):!0)}:c.documentElement.compareDocumentPosition?k.contains=function(a,b){return!!(a.compareDocumentPosition(b)&16)}:k.contains=function(){return!1},k.isXML=function(a){var b=(a?a.ownerDocument||a:0).documentElement;return b?b.nodeName!=="HTML":!1};var v=function(a,b){var c,d=[],e="",f=b.nodeType?[b]:b;while(c=l.match.PSEUDO.exec(a))e+=c[0],a=a.replace(l.match.PSEUDO,"");a=l.relative[a]?a+"*":a;for(var g=0,h=f.length;g<h;g++)k(a,f[g],d);return k.filter(e,d)};f.find=k,f.expr=k.selectors,f.expr[":"]=f.expr.filters,f.unique=k.uniqueSort,f.text=k.getText,f.isXMLDoc=k.isXML,f.contains=k.contains}();var N=/Until$/,O=/^(?:parents|prevUntil|prevAll)/,P=/,/,Q=/^.[^:#\[\.,]*$/,R=Array.prototype.slice,S=f.expr.match.POS,T={children:!0,contents:!0,next:!0,prev:!0};f.fn.extend({find:function(a){var b=this,c,d;if(typeof a!="string")return f(a).filter(function(){for(c=0,d=b.length;c<d;c++)if(f.contains(b[c],this))return!0});var e=this.pushStack("","find",a),g,h,i;for(c=0,d=this.length;c<d;c++){g=e.length,f.find(a,this[c],e);if(c>0)for(h=g;h<e.length;h++)for(i=0;i<g;i++)if(e[i]===e[h]){e.splice(h--,1);break}}return e},has:function(a){var b=f(a);return this.filter(function(){for(var a=0,c=b.length;a<c;a++)if(f.contains(this,b[a]))return!0})},not:function(a){return this.pushStack(V(this,a,!1),"not",a)},filter:function(a){return this.pushStack(V(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?f.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c=[],d,e,g=this[0];if(f.isArray(a)){var h,i,j={},k=1;if(g&&a.length){for(d=0,e=a.length;d<e;d++)i=a[d],j[i]||(j[i]=S.test(i)?f(i,b||this.context):i);while(g&&g.ownerDocument&&g!==b){for(i in j)h=j[i],(h.jquery?h.index(g)>-1:f(g).is(h))&&c.push({selector:i,elem:g,level:k});g=g.parentNode,k++}}return c}var l=S.test(a)||typeof a!="string"?f(a,b||this.context):0;for(d=0,e=this.length;d<e;d++){g=this[d];while(g){if(l?l.index(g)>-1:f.find.matchesSelector(g,a)){c.push(g);break}g=g.parentNode;if(!g||!g.ownerDocument||g===b||g.nodeType===11)break}}c=c.length>1?f.unique(c):c;return this.pushStack(c,"closest",a)},index:function(a){if(!a)return this[0]&&this[0].parentNode?this.prevAll().length:-1;if(typeof a=="string")return f.inArray(this[0],f(a));return f.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var c=typeof a=="string"?f(a,b):f.makeArray(a&&a.nodeType?[a]:a),d=f.merge(this.get(),c);return this.pushStack(U(c[0])||U(d[0])?d:f.unique(d))},andSelf:function(){return this.add(this.prevObject)}}),f.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return f.dir(a,"parentNode")},parentsUntil:function(a,b,c){return f.dir(a,"parentNode",c)},next:function(a){return f.nth(a,2,"nextSibling")},prev:function(a){return f.nth(a,2,"previousSibling")},nextAll:function(a){return f.dir(a,"nextSibling")},prevAll:function(a){return f.dir(a,"previousSibling")},nextUntil:function(a,b,c){return f.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return f.dir(a,"previousSibling",c)},siblings:function(a){return f.sibling(a.parentNode.firstChild,a)},children:function(a){return f.sibling(a.firstChild)},contents:function(a){return f.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:f.makeArray(a.childNodes)}},function(a,b){f.fn[a]=function(c,d){var e=f.map(this,b,c),g=R.call(arguments);N.test(a)||(d=c),d&&typeof d=="string"&&(e=f.filter(d,e)),e=this.length>1&&!T[a]?f.unique(e):e,(this.length>1||P.test(d))&&O.test(a)&&(e=e.reverse());return this.pushStack(e,a,g.join(","))}}),f.extend({filter:function(a,b,c){c&&(a=":not("+a+")");return b.length===1?f.find.matchesSelector(b[0],a)?[b[0]]:[]:f.find.matches(a,b)},dir:function(a,c,d){var e=[],g=a[c];while(g&&g.nodeType!==9&&(d===b||g.nodeType!==1||!f(g).is(d)))g.nodeType===1&&e.push(g),g=g[c];return e},nth:function(a,b,c,d){b=b||1;var e=0;for(;a;a=a[c])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var W=/ jQuery\d+="(?:\d+|null)"/g,X=/^\s+/,Y=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Z=/<([\w:]+)/,$=/<tbody/i,_=/<|&#?\w+;/,ba=/<(?:script|object|embed|option|style)/i,bb=/checked\s*(?:[^=]|=\s*.checked.)/i,bc=/\/(java|ecma)script/i,bd=/^\s*<!(?:\[CDATA\[|\-\-)/,be={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};be.optgroup=be.option,be.tbody=be.tfoot=be.colgroup=be.caption=be.thead,be.th=be.td,f.support.htmlSerialize||(be._default=[1,"div<div>","</div>"]),f.fn.extend({text:function(a){if(f.isFunction(a))return this.each(function(b){var c=f(this);c.text(a.call(this,b,c.text()))});if(typeof a!="object"&&a!==b)return this.empty().append((this[0]&&this[0].ownerDocument||c).createTextNode(a));return f.text(this)},wrapAll:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapAll(a.call(this,b))});if(this[0]){var b=f(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){if(f.isFunction(a))return this.each(function(b){f(this).wrapInner(a.call(this,b))});return this.each(function(){var b=f(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){f(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){f.nodeName(this,"body")||f(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=f(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,f(arguments[0]).toArray());return a}},remove:function(a,b){for(var c=0,d;(d=this[c])!=null;c++)if(!a||f.filter(a,[d]).length)!b&&d.nodeType===1&&(f.cleanData(d.getElementsByTagName("*")),f.cleanData([d])),d.parentNode&&d.parentNode.removeChild(d);return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++){b.nodeType===1&&f.cleanData(b.getElementsByTagName("*"));while(b.firstChild)b.removeChild(b.firstChild)}return this},clone:function(a,b){a=a==null?!1:a,b=b==null?a:b;return this.map(function(){return f.clone(this,a,b)})},html:function(a){if(a===b)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(W,""):null;if(typeof a=="string"&&!ba.test(a)&&(f.support.leadingWhitespace||!X.test(a))&&!be[(Z.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Y,"<$1></$2>");try{for(var c=0,d=this.length;c<d;c++)this[c].nodeType===1&&(f.cleanData(this[c].getElementsByTagName("*")),this[c].innerHTML=a)}catch(e){this.empty().append(a)}}else f.isFunction(a)?this.each(function(b){var c=f(this);c.html(a.call(this,b,c.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(f.isFunction(a))return this.each(function(b){var c=f(this),d=c.html();c.replaceWith(a.call(this,b,d))});typeof a!="string"&&(a=f(a).detach());return this.each(function(){var b=this.nextSibling,c=this.parentNode;f(this).remove(),b?f(b).before(a):f(c).append(a)})}return this.length?this.pushStack(f(f.isFunction(a)?a():a),"replaceWith",a):this},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){var e,g,h,i,j=a[0],k=[];if(!f.support.checkClone&&arguments.length===3&&typeof j=="string"&&bb.test(j))return this.each(function(){f(this).domManip(a,c,d,!0)});if(f.isFunction(j))return this.each(function(e){var g=f(this);a[0]=j.call(this,e,c?g.html():b),g.domManip(a,c,d)});if(this[0]){i=j&&j.parentNode,f.support.parentNode&&i&&i.nodeType===11&&i.childNodes.length===this.length?e={fragment:i}:e=f.buildFragment(a,this,k),h=e.fragment,h.childNodes.length===1?g=h=h.firstChild:g=h.firstChild;if(g){c=c&&f.nodeName(g,"tr");for(var l=0,m=this.length,n=m-1;l<m;l++)d.call(c?bf(this[l],g):this[l],e.cacheable||m>1&&l<n?f.clone(h,!0,!0):h)}k.length&&f.each(k,bl)}return this}}),f.buildFragment=function(a,b,d){var e,g,h,i;b&&b[0]&&(i=b[0].ownerDocument||b[0]),i.createDocumentFragment||(i=c),a.length===1&&typeof a[0]=="string"&&a[0].length<512&&i===c&&a[0].charAt(0)==="<"&&!ba.test(a[0])&&(f.support.checkClone||!bb.test(a[0]))&&(g=!0,h=f.fragments[a[0]],h&&h!==1&&(e=h)),e||(e=i.createDocumentFragment(),f.clean
(a,i,e,d)),g&&(f.fragments[a[0]]=h?e:1);return{fragment:e,cacheable:g}},f.fragments={},f.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){f.fn[a]=function(c){var d=[],e=f(c),g=this.length===1&&this[0].parentNode;if(g&&g.nodeType===11&&g.childNodes.length===1&&e.length===1){e[b](this[0]);return this}for(var h=0,i=e.length;h<i;h++){var j=(h>0?this.clone(!0):this).get();f(e[h])[b](j),d=d.concat(j)}return this.pushStack(d,a,e.selector)}}),f.extend({clone:function(a,b,c){var d=a.cloneNode(!0),e,g,h;if((!f.support.noCloneEvent||!f.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!f.isXMLDoc(a)){bh(a,d),e=bi(a),g=bi(d);for(h=0;e[h];++h)g[h]&&bh(e[h],g[h])}if(b){bg(a,d);if(c){e=bi(a),g=bi(d);for(h=0;e[h];++h)bg(e[h],g[h])}}e=g=null;return d},clean:function(a,b,d,e){var g;b=b||c,typeof b.createElement=="undefined"&&(b=b.ownerDocument||b[0]&&b[0].ownerDocument||c);var h=[],i;for(var j=0,k;(k=a[j])!=null;j++){typeof k=="number"&&(k+="");if(!k)continue;if(typeof k=="string")if(!_.test(k))k=b.createTextNode(k);else{k=k.replace(Y,"<$1></$2>");var l=(Z.exec(k)||["",""])[1].toLowerCase(),m=be[l]||be._default,n=m[0],o=b.createElement("div");o.innerHTML=m[1]+k+m[2];while(n--)o=o.lastChild;if(!f.support.tbody){var p=$.test(k),q=l==="table"&&!p?o.firstChild&&o.firstChild.childNodes:m[1]==="<table>"&&!p?o.childNodes:[];for(i=q.length-1;i>=0;--i)f.nodeName(q[i],"tbody")&&!q[i].childNodes.length&&q[i].parentNode.removeChild(q[i])}!f.support.leadingWhitespace&&X.test(k)&&o.insertBefore(b.createTextNode(X.exec(k)[0]),o.firstChild),k=o.childNodes}var r;if(!f.support.appendChecked)if(k[0]&&typeof (r=k.length)=="number")for(i=0;i<r;i++)bk(k[i]);else bk(k);k.nodeType?h.push(k):h=f.merge(h,k)}if(d){g=function(a){return!a.type||bc.test(a.type)};for(j=0;h[j];j++)if(e&&f.nodeName(h[j],"script")&&(!h[j].type||h[j].type.toLowerCase()==="text/javascript"))e.push(h[j].parentNode?h[j].parentNode.removeChild(h[j]):h[j]);else{if(h[j].nodeType===1){var s=f.grep(h[j].getElementsByTagName("script"),g);h.splice.apply(h,[j+1,0].concat(s))}d.appendChild(h[j])}}return h},cleanData:function(a){var b,c,d=f.cache,e=f.expando,g=f.event.special,h=f.support.deleteExpando;for(var i=0,j;(j=a[i])!=null;i++){if(j.nodeName&&f.noData[j.nodeName.toLowerCase()])continue;c=j[f.expando];if(c){b=d[c]&&d[c][e];if(b&&b.events){for(var k in b.events)g[k]?f.event.remove(j,k):f.removeEvent(j,k,b.handle);b.handle&&(b.handle.elem=null)}h?delete j[f.expando]:j.removeAttribute&&j.removeAttribute(f.expando),delete d[c]}}}});var bm=/alpha\([^)]*\)/i,bn=/opacity=([^)]*)/,bo=/([A-Z]|^ms)/g,bp=/^-?\d+(?:px)?$/i,bq=/^-?\d/,br=/^([\-+])=([\-+.\de]+)/,bs={position:"absolute",visibility:"hidden",display:"block"},bt=["Left","Right"],bu=["Top","Bottom"],bv,bw,bx;f.fn.css=function(a,c){if(arguments.length===2&&c===b)return this;return f.access(this,a,c,!0,function(a,c,d){return d!==b?f.style(a,c,d):f.css(a,c)})},f.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bv(a,"opacity","opacity");return c===""?"1":c}return a.style.opacity}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":f.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!!a&&a.nodeType!==3&&a.nodeType!==8&&!!a.style){var g,h,i=f.camelCase(c),j=a.style,k=f.cssHooks[i];c=f.cssProps[i]||i;if(d===b){if(k&&"get"in k&&(g=k.get(a,!1,e))!==b)return g;return j[c]}h=typeof d,h==="string"&&(g=br.exec(d))&&(d=+(g[1]+1)*+g[2]+parseFloat(f.css(a,c)),h="number");if(d==null||h==="number"&&isNaN(d))return;h==="number"&&!f.cssNumber[i]&&(d+="px");if(!k||!("set"in k)||(d=k.set(a,d))!==b)try{j[c]=d}catch(l){}}},css:function(a,c,d){var e,g;c=f.camelCase(c),g=f.cssHooks[c],c=f.cssProps[c]||c,c==="cssFloat"&&(c="float");if(g&&"get"in g&&(e=g.get(a,!0,d))!==b)return e;if(bv)return bv(a,c)},swap:function(a,b,c){var d={};for(var e in b)d[e]=a.style[e],a.style[e]=b[e];c.call(a);for(e in b)a.style[e]=d[e]}}),f.curCSS=f.css,f.each(["height","width"],function(a,b){f.cssHooks[b]={get:function(a,c,d){var e;if(c){if(a.offsetWidth!==0)return by(a,b,d);f.swap(a,bs,function(){e=by(a,b,d)});return e}},set:function(a,b){if(!bp.test(b))return b;b=parseFloat(b);if(b>=0)return b+"px"}}}),f.support.opacity||(f.cssHooks.opacity={get:function(a,b){return bn.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=f.isNaN(b)?"":"alpha(opacity="+b*100+")",g=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&f.trim(g.replace(bm,""))===""){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bm.test(g)?g.replace(bm,e):g+" "+e}}),f(function(){f.support.reliableMarginRight||(f.cssHooks.marginRight={get:function(a,b){var c;f.swap(a,{display:"inline-block"},function(){b?c=bv(a,"margin-right","marginRight"):c=a.style.marginRight});return c}})}),c.defaultView&&c.defaultView.getComputedStyle&&(bw=function(a,c){var d,e,g;c=c.replace(bo,"-$1").toLowerCase();if(!(e=a.ownerDocument.defaultView))return b;if(g=e.getComputedStyle(a,null))d=g.getPropertyValue(c),d===""&&!f.contains(a.ownerDocument.documentElement,a)&&(d=f.style(a,c));return d}),c.documentElement.currentStyle&&(bx=function(a,b){var c,d=a.currentStyle&&a.currentStyle[b],e=a.runtimeStyle&&a.runtimeStyle[b],f=a.style;!bp.test(d)&&bq.test(d)&&(c=f.left,e&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":d||0,d=f.pixelLeft+"px",f.left=c,e&&(a.runtimeStyle.left=e));return d===""?"auto":d}),bv=bw||bx,f.expr&&f.expr.filters&&(f.expr.filters.hidden=function(a){var b=a.offsetWidth,c=a.offsetHeight;return b===0&&c===0||!f.support.reliableHiddenOffsets&&(a.style.display||f.css(a,"display"))==="none"},f.expr.filters.visible=function(a){return!f.expr.filters.hidden(a)});var bz=/%20/g,bA=/\[\]$/,bB=/\r?\n/g,bC=/#.*$/,bD=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,bE=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,bF=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,bG=/^(?:GET|HEAD)$/,bH=/^\/\//,bI=/\?/,bJ=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,bK=/^(?:select|textarea)/i,bL=/\s+/,bM=/([?&])_=[^&]*/,bN=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,bO=f.fn.load,bP={},bQ={},bR,bS,bT=["*/"]+["*"];try{bR=e.href}catch(bU){bR=c.createElement("a"),bR.href="",bR=bR.href}bS=bN.exec(bR.toLowerCase())||[],f.fn.extend({load:function(a,c,d){if(typeof a!="string"&&bO)return bO.apply(this,arguments);if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var g=a.slice(e,a.length);a=a.slice(0,e)}var h="GET";c&&(f.isFunction(c)?(d=c,c=b):typeof c=="object"&&(c=f.param(c,f.ajaxSettings.traditional),h="POST"));var i=this;f.ajax({url:a,type:h,dataType:"html",data:c,complete:function(a,b,c){c=a.responseText,a.isResolved()&&(a.done(function(a){c=a}),i.html(g?f("<div>").append(c.replace(bJ,"")).find(g):c)),d&&i.each(d,[c,b,a])}});return this},serialize:function(){return f.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?f.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||bK.test(this.nodeName)||bE.test(this.type))}).map(function(a,b){var c=f(this).val();return c==null?null:f.isArray(c)?f.map(c,function(a,c){return{name:b.name,value:a.replace(bB,"\r\n")}}):{name:b.name,value:c.replace(bB,"\r\n")}}).get()}}),f.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){f.fn[b]=function(a){return this.bind(b,a)}}),f.each(["get","post"],function(a,c){f[c]=function(a,d,e,g){f.isFunction(d)&&(g=g||e,e=d,d=b);return f.ajax({type:c,url:a,data:d,success:e,dataType:g})}}),f.extend({getScript:function(a,c){return f.get(a,b,c,"script")},getJSON:function(a,b,c){return f.get(a,b,c,"json")},ajaxSetup:function(a,b){b?bX(a,f.ajaxSettings):(b=a,a=f.ajaxSettings),bX(a,b);return a},ajaxSettings:{url:bR,isLocal:bF.test(bS[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":bT},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":f.parseJSON,"text xml":f.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:bV(bP),ajaxTransport:bV(bQ),ajax:function(a,c){function w(a,c,l,m){if(s!==2){s=2,q&&clearTimeout(q),p=b,n=m||"",v.readyState=a>0?4:0;var o,r,u,w=c,x=l?bZ(d,v,l):b,y,z;if(a>=200&&a<300||a===304){if(d.ifModified){if(y=v.getResponseHeader("Last-Modified"))f.lastModified[k]=y;if(z=v.getResponseHeader("Etag"))f.etag[k]=z}if(a===304)w="notmodified",o=!0;else try{r=b$(d,x),w="success",o=!0}catch(A){w="parsererror",u=A}}else{u=w;if(!w||a)w="error",a<0&&(a=0)}v.status=a,v.statusText=""+(c||w),o?h.resolveWith(e,[r,w,v]):h.rejectWith(e,[v,w,u]),v.statusCode(j),j=b,t&&g.trigger("ajax"+(o?"Success":"Error"),[v,d,o?r:u]),i.resolveWith(e,[v,w]),t&&(g.trigger("ajaxComplete",[v,d]),--f.active||f.event.trigger("ajaxStop"))}}typeof a=="object"&&(c=a,a=b),c=c||{};var d=f.ajaxSetup({},c),e=d.context||d,g=e!==d&&(e.nodeType||e instanceof f)?f(e):f.event,h=f.Deferred(),i=f._Deferred(),j=d.statusCode||{},k,l={},m={},n,o,p,q,r,s=0,t,u,v={readyState:0,setRequestHeader:function(a,b){if(!s){var c=a.toLowerCase();a=m[c]=m[c]||a,l[a]=b}return this},getAllResponseHeaders:function(){return s===2?n:null},getResponseHeader:function(a){var c;if(s===2){if(!o){o={};while(c=bD.exec(n))o[c[1].toLowerCase()]=c[2]}c=o[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){s||(d.mimeType=a);return this},abort:function(a){a=a||"abort",p&&p.abort(a),w(0,a);return this}};h.promise(v),v.success=v.done,v.error=v.fail,v.complete=i.done,v.statusCode=function(a){if(a){var b;if(s<2)for(b in a)j[b]=[j[b],a[b]];else b=a[v.status],v.then(b,b)}return this},d.url=((a||d.url)+"").replace(bC,"").replace(bH,bS[1]+"//"),d.dataTypes=f.trim(d.dataType||"*").toLowerCase().split(bL),d.crossDomain==null&&(r=bN.exec(d.url.toLowerCase()),d.crossDomain=!(!r||r[1]==bS[1]&&r[2]==bS[2]&&(r[3]||(r[1]==="http:"?80:443))==(bS[3]||(bS[1]==="http:"?80:443)))),d.data&&d.processData&&typeof d.data!="string"&&(d.data=f.param(d.data,d.traditional)),bW(bP,d,c,v);if(s===2)return!1;t=d.global,d.type=d.type.toUpperCase(),d.hasContent=!bG.test(d.type),t&&f.active++===0&&f.event.trigger("ajaxStart");if(!d.hasContent){d.data&&(d.url+=(bI.test(d.url)?"&":"?")+d.data,delete d.data),k=d.url;if(d.cache===!1){var x=f.now(),y=d.url.replace(bM,"$1_="+x);d.url=y+(y===d.url?(bI.test(d.url)?"&":"?")+"_="+x:"")}}(d.data&&d.hasContent&&d.contentType!==!1||c.contentType)&&v.setRequestHeader("Content-Type",d.contentType),d.ifModified&&(k=k||d.url,f.lastModified[k]&&v.setRequestHeader("If-Modified-Since",f.lastModified[k]),f.etag[k]&&v.setRequestHeader("If-None-Match",f.etag[k])),v.setRequestHeader("Accept",d.dataTypes[0]&&d.accepts[d.dataTypes[0]]?d.accepts[d.dataTypes[0]]+(d.dataTypes[0]!=="*"?", "+bT+"; q=0.01":""):d.accepts["*"]);for(u in d.headers)v.setRequestHeader(u,d.headers[u]);if(d.beforeSend&&(d.beforeSend.call(e,v,d)===!1||s===2)){v.abort();return!1}for(u in{success:1,error:1,complete:1})v[u](d[u]);p=bW(bQ,d,c,v);if(!p)w(-1,"No Transport");else{v.readyState=1,t&&g.trigger("ajaxSend",[v,d]),d.async&&d.timeout>0&&(q=setTimeout(function(){v.abort("timeout")},d.timeout));try{s=1,p.send(l,w)}catch(z){s<2?w(-1,z):f.error(z)}}return v},param:function(a,c){var d=[],e=function(a,b){b=f.isFunction(b)?b():b,d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=f.ajaxSettings.traditional);if(f.isArray(a)||a.jquery&&!f.isPlainObject(a))f.each(a,function(){e(this.name,this.value)});else for(var g in a)bY(g,a[g],c,e);return d.join("&").replace(bz,"+")}}),f.extend({active:0,lastModified:{},etag:{}});var b_=f.now(),ca=/(\=)\?(&|$)|\?\?/i;f.ajaxSetup({jsonp:"callback",jsonpCallback:function(){return f.expando+"_"+b_++}}),f.ajaxPrefilter("json jsonp",function(b,c,d){var e=b.contentType==="application/x-www-form-urlencoded"&&typeof b.data=="string";if(b.dataTypes[0]==="jsonp"||b.jsonp!==!1&&(ca.test(b.url)||e&&ca.test(b.data))){var g,h=b.jsonpCallback=f.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,i=a[h],j=b.url,k=b.data,l="$1"+h+"$2";b.jsonp!==!1&&(j=j.replace(ca,l),b.url===j&&(e&&(k=k.replace(ca,l)),b.data===k&&(j+=(/\?/.test(j)?"&":"?")+b.jsonp+"="+h))),b.url=j,b.data=k,a[h]=function(a){g=[a]},d.always(function(){a[h]=i,g&&f.isFunction(i)&&a[h](g[0])}),b.converters["script json"]=function(){g||f.error(h+" was not called");return g[0]},b.dataTypes[0]="json";return"script"}}),f.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){f.globalEval(a);return a}}}),f.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),f.ajaxTransport("script",function(a){if(a.crossDomain){var d,e=c.head||c.getElementsByTagName("head")[0]||c.documentElement;return{send:function(f,g){d=c.createElement("script"),d.async="async",a.scriptCharset&&(d.charset=a.scriptCharset),d.src=a.url,d.onload=d.onreadystatechange=function(a,c){if(c||!d.readyState||/loaded|complete/.test(d.readyState))d.onload=d.onreadystatechange=null,e&&d.parentNode&&e.removeChild(d),d=b,c||g(200,"success")},e.insertBefore(d,e.firstChild)},abort:function(){d&&d.onload(0,1)}}}});var cb=a.ActiveXObject?function(){for(var a in cd)cd[a](0,1)}:!1,cc=0,cd;f.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&ce()||cf()}:ce,function(a){f.extend(f.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(f.ajaxSettings.xhr()),f.support.ajax&&f.ajaxTransport(function(c){if(!c.crossDomain||f.support.cors){var d;return{send:function(e,g){var h=c.xhr(),i,j;c.username?h.open(c.type,c.url,c.async,c.username,c.password):h.open(c.type,c.url,c.async);if(c.xhrFields)for(j in c.xhrFields)h[j]=c.xhrFields[j];c.mimeType&&h.overrideMimeType&&h.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(j in e)h.setRequestHeader(j,e[j])}catch(k){}h.send(c.hasContent&&c.data||null),d=function(a,e){var j,k,l,m,n;try{if(d&&(e||h.readyState===4)){d=b,i&&(h.onreadystatechange=f.noop,cb&&delete cd[i]);if(e)h.readyState!==4&&h.abort();else{j=h.status,l=h.getAllResponseHeaders(),m={},n=h.responseXML,n&&n.documentElement&&(m.xml=n),m.text=h.responseText;try{k=h.statusText}catch(o){k=""}!j&&c.isLocal&&!c.crossDomain?j=m.text?200:404:j===1223&&(j=204)}}}catch(p){e||g(-1,p)}m&&g(j,k,m,l)},!c.async||h.readyState===4?d():(i=++cc,cb&&(cd||(cd={},f(a).unload(cb)),cd[i]=d),h.onreadystatechange=d)},abort:function(){d&&d(0,1)}}}});var cg={},ch,ci,cj=/^(?:toggle|show|hide)$/,ck=/^([+\-]=)?([\d+.\-]+)([a-z%]*)$/i,cl,cm=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]],cn;f.fn.extend({show:function(a,b,c){var d,e;if(a||a===0)return this.animate(cq("show",3),a,b,c);for(var g=0,h=this.length;g<h;g++)d=this[g],d.style&&(e=d.style.display,!f._data(d,"olddisplay")&&e==="none"&&(e=d.style.display=""),e===""&&f.css(d,"display")==="none"&&f._data(d,"olddisplay",cr(d.nodeName)));for(g=0;g<h;g++){d=this[g];if(d.style){e=d.style.display;if(e===""||e==="none")d.style.display=f._data(d,"olddisplay")||""}}return this},hide:function(a,b,c){if(a||a===0)return this.animate(cq("hide",3),a,b,c);for(var d=0,e=this.length;d<e;d++)if(this[d].style){var g=f.css(this[d],"display");g!=="none"&&!f._data(this[d],"olddisplay")&&f._data(this[d],"olddisplay",g)}for(d=0;d<e;d++)this[d].style&&(this[d].style.display="none");return this},_toggle:f.fn.toggle,toggle:function(a,b,c){var d=typeof a=="boolean";f.isFunction(a)&&f.isFunction(b)?this._toggle.apply(this,arguments):a==null||d?this.each(function(){var b=d?a:f(this).is(":hidden");f(this)[b?"show":"hide"]()}):this.animate(cq("toggle",3),a,b,c);return this},fadeTo:function(a,b,c,d){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=f.speed(b,c,d);if(f.isEmptyObject(a))return this.each(e.complete,[!1]);a=f.extend({},a);return this[e.queue===!1?"each":"queue"](function(){e.queue===!1&&f._mark(this);var b=f.extend({},e),c=this.nodeType===1,d=c&&f(this).is(":hidden"),g,h,i,j,k,l,m,n,o;b.animatedProperties={};for(i in a){g=f.camelCase(i),i!==g&&(a[g]=a[i],delete a[i]),h=a[g],f.isArray(h)?(b.animatedProperties[g]=h[1],h=a[g]=h[0]):b.animatedProperties[g]=b.specialEasing&&b.specialEasing[g]||b.easing||"swing";if(h==="hide"&&d||h==="show"&&!d)return b.complete.call(this);c&&(g==="height"||g==="width")&&(b.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY],f.css(this,"display")==="inline"&&f.css(this,"float")==="none"&&(f.support.inlineBlockNeedsLayout?(j=cr(this.nodeName),j==="inline"?this.style.display="inline-block":(this.style.display="inline",this.style.zoom=1)):this.style.display="inline-block"))}b.overflow!=null&&(this.style.overflow="hidden");for(i in a)k=new f.fx(this,b,i),h=a[i],cj.test(h)?k[h==="toggle"?d?"show":"hide":h]():(l=ck.exec(h),m=k.cur(),l?(n=parseFloat(l[2]),o=l[3]||(f.cssNumber[i]?"":"px"),o!=="px"&&(f.style(this,i,(n||1)+o),m=(n||1)/k.cur()*m,f.style(this,i,m+o)),l[1]&&(n=(l[1]==="-="?-1:1)*n+m),k.custom(m,n,o)):k.custom(m,h,""));return!0})},stop:function(a,b){a&&this.queue([]),this.each(function(){var a=f.timers,c=a.length;b||f._unmark(!0,this);while(c--)a[c].elem===this&&(b&&a[c](!0),a.splice(c,1))}),b||this.dequeue();return this}}),f.each({slideDown:cq("show",1),slideUp:cq("hide",1),slideToggle:cq("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){f.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),f.extend({speed:function(a,b,c){var d=a&&typeof a=="object"?f.extend({},a):{complete:c||!c&&b||f.isFunction(a)&&a,duration:a,easing:c&&b||b&&!f.isFunction(b)&&b};d.duration=f.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in f.fx.speeds?f.fx.speeds[d.duration]:f.fx.speeds._default,d.old=d.complete,d.complete=function(a){f.isFunction(d.old)&&d.old.call(this),d.queue!==!1?f.dequeue(this):a!==!1&&f._unmark(this)};return d},easing:{linear:function(a,b,c,d){return c+d*a},swing:function(a,b,c,d){return(-Math.cos(a*Math.PI)/2+.5)*d+c}},timers:[],fx:function(a,b,c){this.options=b,this.elem=a,this.prop=c,b.orig=b.orig||{}}}),f.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this),(f.fx.step[this.prop]||f.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a,b=f.css(this.elem,this.prop);return isNaN(a=parseFloat(b))?!b||b==="auto"?0:b:a},custom:function(a,b,c){function g(a){return d.step(a)}var d=this,e=f.fx;this.startTime=cn||co(),this.start=a,this.end=b,this.unit=c||this.unit||(f.cssNumber[this.prop]?"":"px"),this.now=this.start,this.pos=this.state=0,g.elem=this.elem,g()&&f.timers.push(g)&&!cl&&(cl=setInterval(e.tick,e.interval))},show:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.show=!0,this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur()),f(this.elem).show()},hide:function(){this.options.orig[this.prop]=f.style(this.elem,this.prop),this.options.hide=!0,this.custom(this.cur(),0)},step:function(a){var b=cn||co(),c=!0,d=this.elem,e=this.options,g,h;if(a||b>=e.duration+this.startTime){this.now=this.end,this.pos=this.state=1,this.update(),e.animatedProperties[this.prop]=!0;for(g in e.animatedProperties)e.animatedProperties[g]!==!0&&(c=!1);if(c){e.overflow!=null&&!f.support.shrinkWrapBlocks&&f.each(["","X","Y"],function(a,b){d.style["overflow"+b]=e.overflow[a]}),e.hide&&f(d).hide();if(e.hide||e.show)for(var i in e.animatedProperties)f.style(d,i,e.orig[i]);e.complete.call(d)}return!1}e.duration==Infinity?this.now=b:(h=b-this.startTime,this.state=h/e.duration,this.pos=f.easing[e.animatedProperties[this.prop]](this.state,h,0,1,e.duration),this.now=this.start+(this.end-this.start)*this.pos),this.update();return!0}},f.extend(f.fx,{tick:function(){for(var a=f.timers,b=0;b<a.length;++b)a[b]()||a.splice(b--,1);a.length||f.fx.stop()},interval:13,stop:function(){clearInterval(cl),cl=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){f.style(a.elem,"opacity",a.now)},_default:function(a){a.elem.style&&a.elem.style[a.prop]!=null?a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit:a.elem[a.prop]=a.now}}}),f.expr&&f.expr.filters&&(f.expr.filters.animated=function(a){return f.grep(f.timers,function(b){return a===b.elem}).length});var cs=/^t(?:able|d|h)$/i,ct=/^(?:body|html)$/i;"getBoundingClientRect"in c.documentElement?f.fn.offset=function(a){var b=this[0],c;if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);try{c=b.getBoundingClientRect()}catch(d){}var e=b.ownerDocument,g=e.documentElement;if(!c||!f.contains(g,b))return c?{top:c.top,left:c.left}:{top:0,left:0};var h=e.body,i=cu(e),j=g.clientTop||h.clientTop||0,k=g.clientLeft||h.clientLeft||0,l=i.pageYOffset||f.support.boxModel&&g.scrollTop||h.scrollTop,m=i.pageXOffset||f.support.boxModel&&g.scrollLeft||h.scrollLeft,n=c.top+l-j,o=c.left+m-k;return{top:n,left:o}}:f.fn.offset=function(a){var b=this[0];if(a)return this.each(function(b){f.offset.setOffset(this,a,b)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return f.offset.bodyOffset(b);f.offset.initialize();var c,d=b.offsetParent,e=b,g=b.ownerDocument,h=g.documentElement,i=g.body,j=g.defaultView,k=j?j.getComputedStyle(b,null):b.currentStyle,l=b.offsetTop,m=b.offsetLeft;while((b=b.parentNode)&&b!==i&&b!==h){if(f.offset.supportsFixedPosition&&k.position==="fixed")break;c=j?j.getComputedStyle(b,null):b.currentStyle,l-=b.scrollTop,m-=b.scrollLeft,b===d&&(l+=b.offsetTop,m+=b.offsetLeft,f.offset.doesNotAddBorder&&(!f.offset.doesAddBorderForTableAndCells||!cs.test(b.nodeName))&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),e=d,d=b.offsetParent),f.offset.subtractsBorderForOverflowNotVisible&&c.overflow!=="visible"&&(l+=parseFloat(c.borderTopWidth)||0,m+=parseFloat(c.borderLeftWidth)||0),k=c}if(k.position==="relative"||k.position==="static")l+=i.offsetTop,m+=i.offsetLeft;f.offset.supportsFixedPosition&&k.position==="fixed"&&(l+=Math.max(h.scrollTop,i.scrollTop),m+=Math.max(h.scrollLeft,i.scrollLeft));return{top:l,left:m}},f.offset={initialize:function(){var a=c.body,b=c.createElement("div"),d,e,g,h,i=parseFloat(f.css(a,"marginTop"))||0,j="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";f.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"}),b.innerHTML=j,a.insertBefore(b,a.firstChild),d=b.firstChild,e=d.firstChild,h=d.nextSibling.firstChild.firstChild,this.doesNotAddBorder=e.offsetTop!==5,this.doesAddBorderForTableAndCells=h.offsetTop===5,e.style.position="fixed",e.style.top="20px",this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15,e.style.position=e.style.top="",d.style.overflow="hidden",d.style.position="relative",this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5,this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==i,a.removeChild(b),f.offset.initialize=f.noop},bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;f.offset.initialize(),f.offset.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(f.css(a,"marginTop"))||0,c+=parseFloat(f.css(a,"marginLeft"))||0);return{top:b,left:c}},setOffset:function(a,b,c){var d=f.css(a,"position");d==="static"&&(a.style.position="relative");var e=f(a),g=e.offset(),h=f.css(a,"top"),i=f.css(a,"left"),j=(d==="absolute"||d==="fixed")&&f.inArray("auto",[h,i])>-1,k={},l={},m,n;j?(l=e.position(),m=l.top,n=l.left):(m=parseFloat(h)||0,n=parseFloat(i)||0),f.isFunction(b)&&(b=b.call(a,c,g)),b.top!=null&&(k.top=b.top-g.top+m),b.left!=null&&(k.left=b.left-g.left+n),"using"in b?b.using.call(a,k):e.css(k)}},f.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),c=this.offset(),d=ct.test(b[0].nodeName)?{top:0,left:0}:b.offset();c.top-=parseFloat(f.css(a,"marginTop"))||0,c.left-=parseFloat(f.css(a,"marginLeft"))||0,d.top+=parseFloat(f.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(f.css(b[0],"borderLeftWidth"))||0;return{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||c.body;while(a&&!ct.test(a.nodeName)&&f.css(a,"position")==="static")a=a.offsetParent;return a})}}),f.each(["Left","Top"],function(a,c){var d="scroll"+c;f.fn[d]=function(c){var e,g;if(c===b){e=this[0];if(!e)return null;g=cu(e);return g?"pageXOffset"in g?g[a?"pageYOffset":"pageXOffset"]:f.support.boxModel&&g.document.documentElement[d]||g.document.body[d]:e[d]}return this.each(function(){g=cu(this),g?g.scrollTo(a?f(g).scrollLeft():c,a?c:f(g).scrollTop()):this[d]=c})}}),f.each(["Height","Width"],function(a,c){var d=c.toLowerCase();f.fn["inner"+c]=function(){var a=this[0];return a&&a.style?parseFloat(f.css(a,d,"padding")):null},f.fn["outer"+c]=function(a){var b=this[0];return b&&b.style?parseFloat(f.css(b,d,a?"margin":"border")):null},f.fn[d]=function(a){var e=this[0];if(!e)return a==null?null:this;if(f.isFunction(a))return this.each(function(b){var c=f(this);c[d](a.call(this,b,c[d]()))});if(f.isWindow(e)){var g=e.document.documentElement["client"+c],h=e.document.body;return e.document.compatMode==="CSS1Compat"&&g||h&&h["client"+c]||g}if(e.nodeType===9)return Math.max(e.documentElement["client"+c],e.body["scroll"+c],e.documentElement["scroll"+c],e.body["offset"+c],e.documentElement["offset"+c]);if(a===b){var i=f.css(e,d),j=parseFloat(i);return f.isNaN(j)?i:j}return this.css(d,typeof a=="string"?a:a+"px")}}),a.jQuery=a.$=f})(window);PK�����*†9D������������X��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/public/stylesheets/main.cssPK�����*†9D_5¢<���<���J��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/htgroupsroot: root apacheRoot
users: root apacheRoot user apacheUserPK�����*†9D(ÉÆ9����U��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/EncryptionTest.java
import org.junit.Test;
import play.Logger;
import play.modules.fileauth.utils.MD5Crypt;
import play.test.UnitTest;

/**
 * EncryptionTest
 * 31.07.2012
 * @author Philipp Haussleiter
 *
 */
public class EncryptionTest extends UnitTest {

    @Test
    public void testApacheCrypt() {
        Logger.info("testing APACHE_CRYPT");
        String clear = "pw_" + System.currentTimeMillis();
        String pass;
        String salt = "abcd1234";
        pass = MD5Crypt.apacheCrypt(clear);
        Logger.info(clear + " got me " + pass);
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
        pass = MD5Crypt.apacheCrypt(clear, salt);
        Logger.info(clear + " & salt " + salt + " got me " + pass);
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
    }

    @Test
    public void testCrypt() {
        Logger.info("testing CRYPT");
        String clear = "pw_" + System.currentTimeMillis();
        String pass;
        String salt = "abcd1234";
        pass = MD5Crypt.crypt(clear);
        Logger.info(clear + " got me " + pass);
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
        pass = MD5Crypt.crypt(clear, salt);
        Logger.info(clear + " & salt " + salt + " got me " + pass);
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
    }
}
PK�����*†9DÛ7²?I��I��V��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/ApacheUsersTest.java
import java.util.HashMap;
import java.util.Map;
import org.junit.BeforeClass;
import org.junit.Test;
import play.Play;
import play.cache.Cache;
import play.modules.fileauth.FileAuth;
import play.modules.fileauth.utils.MD5Crypt;
import play.test.UnitTest;

/**
 * ApacheUsersTest
 * 03.08.2012
 * @author Philipp Haussleiter
 *
 */
public class ApacheUsersTest extends UnitTest {

    @BeforeClass
    public static void setup() {
        Play.configuration.setProperty("authfile.users.path", Play.applicationPath + "/test/htusers");
        Play.configuration.setProperty("authfile.users.delimeter", ":");
        Cache.safeDelete(FileAuth.AUTH_FILE_USERS_CACHE_KEY);
    }

    @Test
    public void testUsersRead() {
        FileAuth.scanUsers();
        Map<String, String> users = Cache.get(FileAuth.AUTH_FILE_USERS_CACHE_KEY, HashMap.class);
        assertNotNull(users);
    }

    @Test
    public void testUsersValidate() {
        String clear = "user";
        String pass = MD5Crypt.crypt("user");
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
    }

    @Test
    public void testValidatePassword() {
        String pass = "user";
        String user = "user";
        assertTrue(FileAuth.validate(user, pass));
        user = "apacheUser";
        assertTrue(FileAuth.validate(user, pass));
        user = "user";
        pass = "user123";
        assertFalse(FileAuth.validate(user, pass));
    }

    @Test
    public void testValidateNotExistingUser() {
        String pass = "user123";
        String user = "user123";
        assertFalse(FileAuth.validate(user, pass));
    }
}
PK�����*†9DÄžŒÒù��ù��V��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/GroupGroupsTest.java
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.junit.BeforeClass;
import org.junit.Test;
import play.Play;
import play.cache.Cache;
import play.modules.fileauth.FileAuth;
import play.test.UnitTest;

/**
 * GroupGroupsTest
 * 04.08.2012
 * @author Philipp Haussleiter
 *
 */
public class GroupGroupsTest extends UnitTest {

    @BeforeClass
    public static void setup() {
        Play.configuration.setProperty("authfile.groups.path", Play.applicationPath + "/test/group");
        Play.configuration.setProperty("authfile.users.delimeter", ":");
        Play.configuration.setProperty("authfile.groups.delimeter", ",");
        Cache.safeDelete(FileAuth.AUTH_FILE_GROUPS_CACHE_KEY);
    }

    @Test
    public void testUsersRead() {
        FileAuth.scanGroups();
        Map<String, Set<String>> groups = Cache.get(FileAuth.AUTH_FILE_GROUPS_CACHE_KEY, HashMap.class);
        assertNotNull(groups);
    }

    @Test
    public void testGroupContainsUser() {
        String user = "user";
        String group = "users";
        assertTrue(FileAuth.contains(group, user));
        user = "root";
        assertTrue(FileAuth.contains(group, user));
    }

    @Test
    public void testGroupNotContainsUser() {
        String user = "user";
        String group = "root";
        assertFalse(FileAuth.contains(group, user));
    }

    public void testGroupNotExists() {
        String user = "user";
        String group = "user";
        assertFalse(FileAuth.contains(group, user));
    }
}PK�����*†9Dd s*ù��ù��V��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/ShadowUsersTest.java
import java.util.HashMap;
import java.util.Map;
import org.junit.BeforeClass;
import org.junit.Test;
import play.Play;
import play.cache.Cache;
import play.modules.fileauth.FileAuth;
import play.modules.fileauth.utils.MD5Crypt;
import play.test.UnitTest;


/**
 * ShadowUsersTest
 * 04.08.2012
 * @author Philipp Haussleiter
 *
 */
public class ShadowUsersTest extends UnitTest {

    @BeforeClass
    public static void setup() {
        Play.configuration.setProperty("authfile.users.path", Play.applicationPath + "/test/shadow");
        Play.configuration.setProperty("authfile.users.delimeter", ":");
        Cache.safeDelete(FileAuth.AUTH_FILE_USERS_CACHE_KEY);
    }

    @Test
    public void testUsersRead() {
        FileAuth.scanUsers();
        Map<String, String> users = Cache.get(FileAuth.AUTH_FILE_USERS_CACHE_KEY, HashMap.class);
        assertNotNull(users);
    }

    @Test
    public void testUsersValidate() {
        String clear = "user";
        String pass = MD5Crypt.crypt("user");
        assertTrue(MD5Crypt.verifyPassword(clear, pass));
    }

    @Test
    public void testValidatePassword() {
        String pass = "user";
        String user = "user";
        assertTrue(FileAuth.validate(user, pass));
        user = "user";
        pass = "user123";
        assertFalse(FileAuth.validate(user, pass));
    }

    @Test
    public void testValidateNotExistingUser() {
        String pass = "user123";
        String user = "user123";
        assertFalse(FileAuth.validate(user, pass));
    }
}
PK�����*†9DTâÒ%���%���G��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/grouproot:x:321:root
users:x:123:root,userPK�����*†9Dcé¸���¸���J��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/data.yml# you describe your data using the YAML notation here
# and then load them using Fixtures.load("data.yml")

# User(bob):
#   email: bob@gmail.com
#   password: secret
#   fullname: BobPK�����*†9D<_'²���²���I��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/htusersapacheUser:$apr1$kuwPretH$BPbVoWoDTEFUw.4g1zDKs1
apacheRoot:$apr1$nVmU2aOS$rDZ4.BG3TPT02YBsCVcSG/
root:$1$imw51D2V$aJbVmk2xlEg8q.Y8nh91E.
user:$1$4aMItwK9$PnpH2GeuHDeR2t.jKhQ771
PK�����*†9DÇÀ���À���P��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/BasicTest.javaimport org.junit.*;
import play.test.*;

public class BasicTest extends UnitTest {

    @Test
    public void aVeryImportantThingToTest() {
        assertEquals(2, 1 + 1);
    }

}
PK�����*†9D‰=u���u���H��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/shadowroot:$1$imw51D2V$aJbVmk2xlEg8q.Y8nh91E.:43534:0:435:7:::
user:$1$4aMItwK9$PnpH2GeuHDeR2t.jKhQ771:345345:0:46456:7:::
PK�����*†9D÷á,·ÿ��ÿ��W��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/ApacheGroupsTest.java
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import org.junit.BeforeClass;
import org.junit.Test;
import play.Play;
import play.cache.Cache;
import play.modules.fileauth.FileAuth;
import play.test.UnitTest;

/**
 * ApacheGroupsTest
 * 03.08.2012
 * @author Philipp Haussleiter
 *
 */
public class ApacheGroupsTest extends UnitTest {

    @BeforeClass
    public static void setup() {
        Play.configuration.setProperty("authfile.groups.path", Play.applicationPath + "/test/htgroups");
        Play.configuration.setProperty("authfile.users.delimeter", ":");
        Play.configuration.setProperty("authfile.groups.delimeter", " ");
        Cache.safeDelete(FileAuth.AUTH_FILE_GROUPS_CACHE_KEY);
    }

    @Test
    public void testUsersRead() {
        FileAuth.scanGroups();
        Map<String, Set<String>> groups = Cache.get(FileAuth.AUTH_FILE_GROUPS_CACHE_KEY, HashMap.class);
        assertNotNull(groups);
    }

    @Test
    public void testGroupContainsUser() {
        String user = "user";
        String group = "users";
        assertTrue(FileAuth.contains(group, user));
        user = "root";
        assertTrue(FileAuth.contains(group, user));
    }

    @Test
    public void testGroupNotContainsUser() {
        String user = "user";
        String group = "root";
        assertFalse(FileAuth.contains(group, user));
    }

    public void testGroupNotExists() {
        String user = "user";
        String group = "user";
        assertFalse(FileAuth.contains(group, user));
    }
}
PK�����*†9D/%ÈBÔ��Ô��H��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/routes# Routes
# This file defines all application routes (Higher priority routes first)
# ~~~~

# Home page
GET     /                                       Application.index

# Ignore favicon requests
GET     /favicon.ico                            404

# Map static resources from the /app/public folder to the /public path
GET     /public/                                staticDir:public

# Catch all
*       /{controller}/{action}                  {controller}.{action}
PK�����*†9D¥#Æ/Ç��Ç��R��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/application.conf# This is the main configuration file for the application.
# ~~~~~
application.name=auth-file-demo

# Application mode
# ~~~~~
# Set to dev to enable instant reloading and other development help.
# Otherwise set to prod.
application.mode=dev
%prod.application.mode=prod

# Secret key
# ~~~~~
# The secret key is used to secure cryptographics functions
# If you deploy your application to several instances be sure to use the same key !
application.secret=uQks53MboMLlGVsJSrPRCipiFOZ4BXn8oDBfOxGxsaXDVtkJOJaIiBNX9SNQoUN8

# i18n
# ~~~~~
# Define locales used by your application.
# You can then place localized messages in conf/messages.{locale} files
# application.langs=fr,en,ja

# Date format
# ~~~~~
date.format=yyyy-MM-dd
# date.format.fr=dd/MM/yyyy

# Server configuration
# ~~~~~
# If you need to change the HTTP port, uncomment this (default is set to 9000)
# http.port=9000
#
# By default the server listen for HTTP on the wilcard address.
# You can restrict this.
# http.address=127.0.0.1
#
# Use this if you don't host your Play application at the root of the domain
# you're serving it from. This parameter has no effect when deployed as a
# war, because the path will be handled by the application server.
# http.path=/

# Session configuration
# ~~~~~~~~~~~~~~~~~~~~~~
# By default, session will be written to the transient PLAY_SESSION cookie.
# The cookies are not secured by default, only set it to true
# if you're serving your pages through https.
# application.session.cookie=PLAY
# application.session.maxAge=1h
# application.session.secure=false

# Session/Cookie sharing between subdomain
# ~~~~~~~~~~~~~~~~~~~~~~
# By default a cookie is only valid for a specific domain. By setting
# application.defaultCookieDomain to '.example.com', the cookies
# will be valid for all domains ending with '.example.com', ie:
# foo.example.com and bar.example.com
# application.defaultCookieDomain=.example.com

# JVM configuration
# ~~~~~
# Define which port is used by JPDA when application is in debug mode (default is set to 8000)
# jpda.port=8000
#
# Java source level => 1.5, 1.6 or 1.7 (experimental)
# java.source=1.5

# Log level
# ~~~~~
# Specify log level for your application.
# If you want a very customized log, create a log4j.properties file in the conf directory
# application.log=INFO
#
# More logging configuration
# application.log.path=/log4j.properties
# application.log.system.out=off

# Database configuration
# ~~~~~ 
# Enable a database engine if needed.
#
# To quickly set up a development database, use either:
#   - mem : for a transient in memory database (H2 in memory)
#   - fs  : for a simple file written database (H2 file stored)
# db=mem
#
# To connect to a local MySQL5 database, use:
# db=mysql://user:pwd@host/database
#
# To connect to a local PostgreSQL9 database, use:
# db=postgres://user:pwd@host/database
#
# If you need a full JDBC configuration use the following :
# db.url=jdbc:postgresql:database_name
# db.driver=org.postgresql.Driver
# db.user=root
# db.pass=secret
#
# Connections pool configuration :
# db.pool.timeout=1000
# db.pool.maxSize=30
# db.pool.minSize=10
#
# If you want to reuse an existing Datasource from your application server, use:
# db=java:/comp/env/jdbc/myDatasource
#
# When using an existing Datasource, it's sometimes needed to destroy it when
# the application is stopped. Depending on the datasource, you can define a
# generic "destroy" method :
# db.destroyMethod=close

# JPA Configuration (Hibernate)
# ~~~~~
#
# Specify the custom JPA dialect to use here (default to guess):
# jpa.dialect=org.hibernate.dialect.PostgreSQLDialect
#
# Specify the ddl generation pattern to use. Set to none to disable it 
# (default to update in DEV mode, and none in PROD mode):
# jpa.ddl=update
#
# Debug SQL statements (logged using DEBUG level):
# jpa.debugSQL=true
#
# You can even specify additional hibernate properties here:
# hibernate.use_sql_comments=true
# ...
#
# Store path for Blob content
attachments.path=data/attachments

# Memcached configuration
# ~~~~~ 
# Enable memcached if needed. Otherwise a local cache is used.
# memcached=enabled
#
# Specify memcached host (default to 127.0.0.1:11211)
# memcached.host=127.0.0.1:11211
#
# Or you can specify multiple host to build a distributed cache
# memcached.1.host=127.0.0.1:11211
# memcached.2.host=127.0.0.1:11212
#
# Use plain SASL to authenticate for memcached
# memcached.user=
# memcached.password=

# HTTP Response headers control for static files
# ~~~~~
# Set the default max-age, telling the user's browser how long it should cache the page.
# Default is 3600 (one hour). Set it to 0 to send no-cache.
# This is only read in prod mode, in dev mode the cache is disabled.
# http.cacheControl=3600

# If enabled, Play will generate entity tags automatically and send a 304 when needed.
# Default is true, set it to false to deactivate use of entity tags.
# http.useETag=true

# Custom mime types
# mimetype.xpi=application/x-xpinstall

# WS configuration
# ~~~~~
# Default engine is Async Http Client, uncomment to use
# the JDK's internal implementation
# webservice = urlfetch
# If you need to set proxy params for WS requests
# http.proxyHost = localhost
# http.proxyPort = 3128
# http.proxyUser = jojo
# http.proxyPassword = jojo

# Mail configuration
# ~~~~~ 
# Default is to use a mock Mailer
mail.smtp=mock

# Or, specify mail host configuration
# mail.smtp.host=127.0.0.1
# mail.smtp.user=admin
# mail.smtp.pass=
# mail.smtp.channel=ssl

# Url-resolving in Jobs
# ~~~~~~
# When rendering templates with reverse-url-resoling (@@{..}) in Jobs (which do not have an inbound Http.Request),
# ie if sending a HtmlMail, Play need to know which url your users use when accessing your app.
# %test.application.baseUrl=http://localhost:9000/
# %prod.application.baseUrl=http://www.yourdomain.com/

# Jobs executor
# ~~~~~~
# Size of the Jobs pool
# play.jobs.pool=10

# Execution pool
# ~~~~~
# Default to 1 thread in DEV mode or (nb processors + 1) threads in PROD mode.
# Try to keep a low as possible. 1 thread will serialize all requests (very useful for debugging purpose)
# play.pool=3

# Open file from errors pages
# ~~~~~
# If your text editor supports opening files by URL, Play! will
# dynamically link error pages to files 
#
# Example, for textmate:
# play.editor=txmt://open?url=file://%s&line=%s

# Testing. Set up a custom configuration for test mode
# ~~~~~
#%test.module.cobertura=${play.path}/modules/cobertura
%test.application.mode=dev
%test.db.url=jdbc:h2:mem:play;MODE=MYSQL;LOCK_MODE=0
%test.jpa.ddl=create
%test.mail.smtp=mock

PK�����*†9D‹úWÀ �� ��R��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/dependencies.yml# Application dependencies

require:
    - play
    - play -> secure
    - local -> play-file-auth 0.2
    
repositories:
    - playCustomModules:
        type:       local
        artifact:   ${application.path}/../../dist/[module]-[revision].zip
        contains:
          - local -> *PK�����*†9Dqé¶h���h���J��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/messages# You can specialize this file for each language.
# For example, for French create a messages.fr file
#
PK�����*†9D«_^)/��/��P��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/main.html<!DOCTYPE html>

<html>
    <head>
        <title>#{get 'title' /}</title>
        <meta charset="${_response_encoding}">
        <link rel="stylesheet" media="screen" href="@{'/public/stylesheets/main.css'}">
        #{get 'moreStyles' /}
        <link rel="shortcut icon" type="image/png" href="@{'/public/images/favicon.png'}">
        <script src="@{'/public/javascripts/jquery-1.6.4.min.js'}" type="text/javascript" charset="${_response_encoding}"></script>
        #{get 'moreScripts' /}
    </head>
    <body>
        #{doLayout /}
    </body>
</html>
PK�����*†9D*º$•<���<���]��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/Application/index.html#{extends 'main.html' /}
#{set title:'Home' /}

#{welcome /}PK�����*†9DÙ¦��¦��V��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/errors/404.html<!DOCTYPE html>

<html>
    <head>
        <title>Not found</title>
        <meta http-equiv="Content-Type" content="text/html; charset=${_response_encoding}"/>    
    </head>
    <body>
        #{if play.mode.name() == 'DEV'}
            #{404 result /}
        #{/if}
        #{else}
            <h1>Not found</h1>
            <p>
                ${result.message}
            </p>
        #{/else}
    </body>
</html>
PK�����*†9DËip®V��V��V��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/errors/500.html<!DOCTYPE html>

<html>
    <head>
        <title>Application error</title>
        <meta http-equiv="Content-Type" content="text/html; charset=${_response_encoding}"/>	
    </head>
    <body>
        #{if play.mode.name() == 'DEV'}
            #{500 exception /}
        #{/if}
        #{else}
            <h1>Oops, an error occured</h1>
            #{if exception instanceof play.exceptions.PlayException}
                <p>
                    This exception has been logged with id <strong>${exception.id}</strong>.
                </p>
            #{/if}
        #{/else}
    </body>
</html>
PK�����*†9D¤8r“���“���]��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/controllers/Application.javapackage controllers;
import play.mvc.*;

public class Application extends Controller {

    public static void index() {
        render();
    }

}PK�����*†9Dp­b’$���$���K��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/secure/opt/play/play-1.2.5/modules/secure
PK�����*†9Dp­b’$���$���*��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/modules/secure/opt/play/play-1.2.5/modules/secure
PK�����*†9Dp­b’$���$���î��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/modules/secure/opt/play/play-1.2.5/modules/secure
PK�����*†9Dp­b’$���$���²��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/modules/secure/opt/play/play-1.2.5/modules/secure
PK�����*†9Dp­b’$���$���v��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/modules/secure/opt/play/play-1.2.5/modules/secure
PK�����*†9Dp­b’$���$���:��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/modules/secure/opt/play/play-1.2.5/modules/secure
PK�����*†9Dp­b’$���$���þ���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/modules/secure/opt/play/play-1.2.5/modules/secure
PK�����*†9Dp­b’$���$���Â���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/modules/secure/opt/play/play-1.2.5/modules/secure
PK�����*†9Dp­b’$���$���†���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/modules/secure/opt/play/play-1.2.5/modules/secure
PK�����*†9Dp­b’$���$���J���samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/modules/secure/opt/play/play-1.2.5/modules/secure
PK�����ˆMDp­b’$���$������modules/secure/opt/play/play-1.2.5/modules/secure
PK�����oˆCD6I÷P��P�������������¤����commands.pyPK�����oˆCŒÀÉZ•��•��	�����������¤y��README.mdPK�����oˆCaCV��V��	�����������¤5��build.xmlPK�����ÈMDxÏ‘[$���$��������������¤²��manifestPK�����ÈMD׬þ@>��@>�������������¤ü��lib/play-play-file-auth.jarPK�����oˆCÔQ.^Þ���Þ��������������¤uJ��conf/routesPK�����oˆC1Sù*T���T��������������¤|K��conf/application.confPK�����oˆCæ´(ÕJ���J��������������¤L��conf/dependencies.ymlPK�����oˆCÌ;¨U¬���¬���
�����������¤€L��conf/messagesPK�����oˆC�����������������������¤WM��src/play.pluginsPK�����oˆCˆŽ6©™��™��&�����������¤…M��src/play/modules/fileauth/ScanJob.javaPK�����ÀˆMD”DÐt��t��'�����������¤bO��src/play/modules/fileauth/FileAuth.javaPK�����oˆC4ÿÑ^º��º��-�����������¤m��src/play/modules/fileauth/FileAuthPlugin.javaPK�����ÀˆMDk*ø0��ø0��-�����������¤ o��src/play/modules/fileauth/utils/MD5Crypt.javaPK�����ÀˆMD+<|ćO��‡O��.�����������¤c ��src/play/modules/fileauth/utils/UnixCrypt.javaPK�����Ä…9D* Fô>���>��������������¤6ð��javadoc/package-listPK�����Ä…9D*”ïxÏ��Ï�������������¤¦ð��javadoc/overview-tree.htmlPK�����Ä…9DýÔÏln��n�������������¤­�javadoc/allclasses-noframe.htmlPK�����Ä…9D?ò÷Mo��o�������������¤X�javadoc/stylesheet.cssPK�����Ä…9D‹Yú‡#��#�������������¤û�javadoc/help-doc.htmlPK�����Ä…9D-vD���������������¤C:�javadoc/allclasses-frame.htmlPK�����Ä…9DUÉ>Å��Å�������������¤Œ@�javadoc/constant-values.htmlPK�����Ä…9Dªð*TÑ��Ñ�������������¤‹^�javadoc/overview-frame.htmlPK�����Ä…9D“qXvJ��vJ�������������¤•c�javadoc/index-all.htmlPK�����Ä…9DÌÖ¦p‡��‡�������������¤?®�javadoc/index.htmlPK�����Ä…9De‘³���������������¤ö³�javadoc/overview-summary.htmlPK�����Ä…9D7‚ãÓ���������������¤°É�javadoc/deprecated-list.htmlPK�����Ä…9DMüƒ9���9��������������¤üÜ�javadoc/resources/inherit.gifPK�����Ã…9DÚ°Nš?��?��+�����������¤pÝ�javadoc/play/modules/fileauth/FileAuth.htmlPK�����Ä…9D<8ºÙ��Ù��/�����������¤½�javadoc/play/modules/fileauth/package-tree.htmlPK�����Ä…9D«€[Õ��Õ��2�����������¤ã5�javadoc/play/modules/fileauth/package-summary.htmlPK�����Ä…9D¬¨{4��4��0�����������¤O�javadoc/play/modules/fileauth/package-frame.htmlPK�����Ã…9D±#û˾+��¾+��*�����������¤ŠS�javadoc/play/modules/fileauth/ScanJob.htmlPK�����Ã…9DfÒŠç¨-��¨-��1�����������¤�javadoc/play/modules/fileauth/FileAuthPlugin.htmlPK�����Ä…9Drù‡nm��m��5�����������¤‡­�javadoc/play/modules/fileauth/utils/package-tree.htmlPK�����Ã…9D÷o˜1ÎT��ÎT��1�����������¤GÄ�javadoc/play/modules/fileauth/utils/MD5Crypt.htmlPK�����Ä…9D«ˆO—È��È��8�����������¤d�javadoc/play/modules/fileauth/utils/package-summary.htmlPK�����Ä…9D`¬/~��~��6�����������¤‚1�javadoc/play/modules/fileauth/utils/package-frame.htmlPK�����Ã…9Dî0•?���������������¤T5�javadoc/controllers/Check.htmlPK�����Ä…9D)šº|ò��ò��%�����������¤ R�javadoc/controllers/package-tree.htmlPK�����Ã…9Dñ…”0O*��O*��(�����������¤Õj�javadoc/controllers/Secure.Security.htmlPK�����Ã…9D‹ˆZå2��å2��)�����������¤j•�javadoc/controllers/AuthFileSecurity.htmlPK�����Ã…9D6ÇéG5��G5�������������¤–È�javadoc/controllers/Secure.htmlPK�����Ä…9D&˜ÅGý��ý��(�����������¤þ�javadoc/controllers/package-summary.htmlPK�����Ä…9Dú.Ð^����&�����������¤]�javadoc/controllers/package-frame.htmlPK�����oˆC—5Kùõ��õ��%�����������¤´�app/controllers/AuthFileSecurity.javaPK�����oˆC&ÿ‰è¤��¤��!�����������¤ì!�documentation/manual/home.textilePK�����oˆC´šü¯��¯��:�����������¤Ï&�samples-and-tests/auth-file-demo/public/images/favicon.pngPK�����oˆCä |;f�f�G�����������¤Ö)�samples-and-tests/auth-file-demo/public/javascripts/jquery-1.6.4.min.jsPK�����oˆC������������<�����������¤P�samples-and-tests/auth-file-demo/public/stylesheets/main.cssPK�����oˆC_5¢<���<���.�����������¤ª�samples-and-tests/auth-file-demo/test/htgroupsPK�����oˆC(ÉÆ9����9�����������¤2‘�samples-and-tests/auth-file-demo/test/EncryptionTest.javaPK�����S•C*˜,-I��I��:�����������¤”–�samples-and-tests/auth-file-demo/test/ApacheUsersTest.javaPK�����oˆCÄžŒÒù��ù��:�����������¤5�samples-and-tests/auth-file-demo/test/GroupGroupsTest.javaPK�����S•C?5'³g��g��:�����������¤†£�samples-and-tests/auth-file-demo/test/ShadowUsersTest.javaPK�����oˆCTâÒ%���%���+�����������¤Eª�samples-and-tests/auth-file-demo/test/groupPK�����oˆCcé¸���¸���.�����������¤³ª�samples-and-tests/auth-file-demo/test/data.ymlPK�����oˆC<_'²���²���-�����������¤·«�samples-and-tests/auth-file-demo/test/htusersPK�����oˆCÇÀ���À���4�����������¤´¬�samples-and-tests/auth-file-demo/test/BasicTest.javaPK�����oˆC‰=u���u���,�����������¤Æ­�samples-and-tests/auth-file-demo/test/shadowPK�����S•C,mˆ÷��÷��;�����������¤…®�samples-and-tests/auth-file-demo/test/ApacheGroupsTest.javaPK�����oˆC/%ÈBÔ��Ô��,�����������¤Õ·�samples-and-tests/auth-file-demo/conf/routesPK�����oˆC¥#Æ/Ç��Ç��6�����������¤ó¹�samples-and-tests/auth-file-demo/conf/application.confPK�����C‹úWÀ �� ��6�����������¤Ô�samples-and-tests/auth-file-demo/conf/dependencies.ymlPK�����oˆCqé¶h���h���.�����������¤‚Õ�samples-and-tests/auth-file-demo/conf/messagesPK�����oˆC«_^)/��/��4�����������¤6Ö�samples-and-tests/auth-file-demo/app/views/main.htmlPK�����oˆC*º$•<���<���A�����������¤·Ø�samples-and-tests/auth-file-demo/app/views/Application/index.htmlPK�����oˆCÙ¦��¦��:�����������¤RÙ�samples-and-tests/auth-file-demo/app/views/errors/404.htmlPK�����oˆCËip®V��V��:�����������¤PÛ�samples-and-tests/auth-file-demo/app/views/errors/500.htmlPK�����oˆC¤8r“���“���A�����������¤þÝ�samples-and-tests/auth-file-demo/app/controllers/Application.javaPK�����*†9Dp­b’$���$���/�����������¤ðÞ�samples-and-tests/auth-file-demo/modules/securePK�����*†9DD6I÷P��P��G�����������¤aß�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pyPK�����*†9DŒÀÉZ•��•��E�����������¤ã�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/README.mdPK�����*†9DaCV��V��E�����������¤å�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/build.xmlPK�����*†9DO‘©ËÖ��Ö��H�����������¤Çë�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pycPK�����*†9DxÏ‘[$���$���D�����������¤ò�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/manifestPK�����*†9DG»-»��»��W�����������¤‰ò�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/lib/play-play-file-auth.jarPK�����*†9DÔQ.^Þ���Þ���G�����������¤¹�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/routesPK�����*†9D1Sù*T���T���Q�����������¤ü�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/application.confPK�����*†9Dæ´(ÕJ���J���Q�����������¤¿�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/dependencies.ymlPK�����*†9DÌ;¨U¬���¬���I�����������¤x�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/messagesPK�����*†9D������������L�����������¤‹�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play.pluginsPK�����*†9DˆŽ6©™��™��b�����������¤õ�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/ScanJob.javaPK�����*†9DlP¨å��å��c�����������¤�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/FileAuth.javaPK�����*†9D4ÿÑ^º��º��i�����������¤t2�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/FileAuthPlugin.javaPK�����*†9DYí΁1��1��i�����������¤µ4�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/utils/MD5Crypt.javaPK�����*†9D* Fô>���>���P�����������¤Vf�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/package-listPK�����*†9Dóæ Ð��Ð��V�����������¤g�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/overview-tree.htmlPK�����*†9D¯:Vto��o��[�����������¤F‚�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/allclasses-noframe.htmlPK�����*†9D?ò÷Mo��o��R�����������¤.ˆ�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/stylesheet.cssPK�����*†9D¤ï‡#��#��Q�����������¤
Ž�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/help-doc.htmlPK�����*†9DoA����Y�����������¤’±�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/allclasses-frame.htmlPK�����*†9DäðVÆ��Æ��X�����������¤¸�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/constant-values.htmlPK�����*†9DA
£ÉÒ��Ò��W�����������¤TÖ�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/overview-frame.htmlPK�����*†9DàóŸ8wJ��wJ��R�����������¤›Û�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/index-all.htmlPK�����*†9DÀ	È��ˆ��N�����������¤‚&�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/index.htmlPK�����*†9D^Ï}É€��€��Y�����������¤v,�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/overview-summary.htmlPK�����*†9DaYWY����X�����������¤mB�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/deprecated-list.htmlPK�����*†9DMüƒ9���9���Y�����������¤öU�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/resources/inherit.gifPK�����*†9DæÎæT?��?��g�����������¤¦V�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/play/modules/fileauth/FileAuth.htmlPK�����*†9D°PÉÚ��Ú��k�����������¤0–�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/play/modules/fileauth/package-tree.htmlPK�����*†9D»ªQÚÖ��Ö��n�����������¤“¯�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/play/modules/fileauth/package-summary.htmlPK�����*†9Dp&·5��5��l�����������¤õÈ�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/play/modules/fileauth/package-frame.htmlPK�����*†9DeQ磿+��¿+��f�����������¤´Í�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/play/modules/fileauth/ScanJob.htmlPK�����*†9Duê
f©-��©-��m�����������¤÷ù�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/play/modules/fileauth/FileAuthPlugin.htmlPK�����*†9Dzzáªn��n��q�����������¤+(�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/play/modules/fileauth/utils/package-tree.htmlPK�����*†9DódÑÏT��ÏT��m�����������¤(?�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/play/modules/fileauth/utils/MD5Crypt.htmlPK�����*†9Dߤ{ÙÉ��É��t�����������¤‚”�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/play/modules/fileauth/utils/package-summary.htmlPK�����*†9DF”¦����r�����������¤Ý¬�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/play/modules/fileauth/utils/package-frame.htmlPK�����*†9D]" ����Z�����������¤ì°�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/controllers/Check.htmlPK�����*†9Dšªõßó��ó��a�����������¤uÎ�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/controllers/package-tree.htmlPK�����*†9Dý¼kÄP*��P*��d�����������¤çæ�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/controllers/Secure.Security.htmlPK�����*†9D’£Úæ2��æ2��e�����������¤¹	�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/controllers/AuthFileSecurity.htmlPK�����*†9Dï�æH5��H5��[�����������¤"E	�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/controllers/Secure.htmlPK�����*†9D
�âÙþ��þ��d�����������¤ãz	�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/controllers/package-summary.htmlPK�����*†9DVÏô¤����b�����������¤c”	�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/javadoc/controllers/package-frame.htmlPK�����*†9D—5Kùõ��õ��a�����������¤÷™	�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/app/controllers/AuthFileSecurity.javaPK�����*†9D&ÿ‰è¤��¤��]�����������¤kŸ	�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/documentation/manual/home.textilePK�����*†9D´šü¯��¯��v�����������¤Š¤	�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/public/images/favicon.pngPK�����*†9Dä |;f�f�ƒ�����������¤Í§	�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/public/javascripts/jquery-1.6.4.min.jsPK�����*†9D������������x�����������¤ƒ�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/public/stylesheets/main.cssPK�����*†9D_5¢<���<���j�����������¤�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/htgroupsPK�����*†9D(ÉÆ9����u�����������¤Ý�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/EncryptionTest.javaPK�����*†9D*˜,-I��I��v�����������¤{�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/ApacheUsersTest.javaPK�����*†9DÄžŒÒù��ù��v�����������¤X�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/GroupGroupsTest.javaPK�����*†9D?5'³g��g��v�����������¤å"�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/ShadowUsersTest.javaPK�����*†9DTâÒ%���%���g�����������¤à)�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/groupPK�����*†9Dcé¸���¸���j�����������¤Š*�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/data.ymlPK�����*†9D<_'²���²���i�����������¤Ê+�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/htusersPK�����*†9DÇÀ���À���p�����������¤-�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/BasicTest.javaPK�����*†9D‰=u���u���h�����������¤Q.�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/shadowPK�����*†9D,mˆ÷��÷��w�����������¤L/�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/ApacheGroupsTest.javaPK�����*†9D/%ÈBÔ��Ô��h�����������¤Ø8�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/routesPK�����*†9D¥#Æ/Ç��Ç��r�����������¤2;�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/application.confPK�����*†9D‹úWÀ �� ��r�����������¤‰U�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/dependencies.ymlPK�����*†9Dqé¶h���h���j�����������¤9W�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/messagesPK�����*†9D«_^)/��/��p�����������¤)X�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/main.htmlPK�����*†9D*º$•<���<���}�����������¤æZ�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/Application/index.htmlPK�����*†9DÙ¦��¦��v�����������¤½[�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/errors/404.htmlPK�����*†9DËip®V��V��v�����������¤÷]�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/errors/500.htmlPK�����*†9D¤8r“���“���}�����������¤á`�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/controllers/Application.javaPK�����*†9Dp­b’$���$���k�����������¤b�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/securePK�����*†9DD6I÷P��P��ƒ�����������¤¼b�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pyPK�����*†9DŒÀÉZ•��•�������������¤­f�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/README.mdPK�����*†9DaCV��V�������������¤áh�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/build.xmlPK�����*†9DKïÖ��Ö��„�����������¤Öo�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pycPK�����*†9DxÏ‘[$���$���€�����������¤Nv�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/manifestPK�����*†9D¯À}b»��»��“�����������¤w�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/lib/play-play-file-auth.jarPK�����*†9DÔQ.^Þ���Þ���ƒ�����������¤|”�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/routesPK�����*†9D1Sù*T���T��������������¤û•�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/application.confPK�����*†9Dæ´(ÕJ���J��������������¤ú–�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/dependencies.ymlPK�����*†9DÌ;¨U¬���¬���…�����������¤ï—�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/messagesPK�����*†9D������������ˆ�����������¤>™�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play.pluginsPK�����*†9DˆŽ6©™��™��ž�����������¤ä™�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/ScanJob.javaPK�����*†9DlP¨å��å��Ÿ�����������¤9œ�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/FileAuth.javaPK�����*†9D4ÿÑ^º��º��¥�����������¤Û¸�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/FileAuthPlugin.javaPK�����*†9DYí΁1��1��¥�����������¤X»�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/utils/MD5Crypt.javaPK�����*†9D—5Kùõ��õ�������������¤5í�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/app/controllers/AuthFileSecurity.javaPK�����*†9D&ÿ‰è¤��¤��™�����������¤åò�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/documentation/manual/home.textilePK�����*†9D´šü¯��¯��²�����������¤@ø�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/public/images/favicon.pngPK�����*†9Dä |;f�f�¿�����������¤¿û�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/public/javascripts/jquery-1.6.4.min.jsPK�����*†9D������������´�����������¤±b
�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/public/stylesheets/main.cssPK�����*†9D_5¢<���<���¦�����������¤ƒc
�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/htgroupsPK�����*†9D(ÉÆ9����±�����������¤ƒd
�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/EncryptionTest.javaPK�����*†9D*˜,-I��I��²�����������¤]j
�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/ApacheUsersTest.javaPK�����*†9DÄžŒÒù��ù��²�����������¤vq
�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/GroupGroupsTest.javaPK�����*†9D?5'³g��g��²�����������¤?x
�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/ShadowUsersTest.javaPK�����*†9DTâÒ%���%���£�����������¤v
�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/groupPK�����*†9Dcé¸���¸���¦�����������¤\€
�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/data.ymlPK�����*†9D<_'²���²���¥�����������¤Ø
�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/htusersPK�����*†9DÇÀ���À���¬�����������¤Mƒ
�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/BasicTest.javaPK�����*†9D‰=u���u���¤�����������¤×„
�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/shadowPK�����*†9D,mˆ÷��÷��³�����������¤†
�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/ApacheGroupsTest.javaPK�����*†9D/%ÈBÔ��Ô��¤�����������¤Ö
�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/routesPK�����*†9D¥#Æ/Ç��Ç��®�����������¤l’
�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/application.confPK�����*†9D‹úWÀ �� ��®�����������¤ÿ¬
�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/dependencies.ymlPK�����*†9Dqé¶h���h���¦�����������¤ë®
�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/messagesPK�����*†9D«_^)/��/��¬�����������¤°
�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/main.htmlPK�����*†9D*º$•<���<���¹�����������¤³
�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/Application/index.htmlPK�����*†9DÙ¦��¦��²�����������¤#´
�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/errors/404.htmlPK�����*†9DËip®V��V��²�����������¤™¶
�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/errors/500.htmlPK�����*†9D¤8r“���“���¹�����������¤¿¹
�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/controllers/Application.javaPK�����*†9Dp­b’$���$���§�����������¤)»
�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/securePK�����*†9DD6I÷P��P��¿�����������¤¼
�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pyPK�����*†9DŒÀÉZ•��•��½�����������¤?À
�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/README.mdPK�����*†9DaCV��V��½�����������¤¯Â
�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/build.xmlPK�����*†9Dö<D>Ö��Ö��À�����������¤àÉ
�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pycPK�����*†9DxÏ‘[$���$���¼�����������¤”Ð
�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/manifestPK�����*†9D"¬û»��»��Ï�����������¤’Ñ
�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/lib/play-play-file-auth.jarPK�����*†9DÔQ.^Þ���Þ���¿�����������¤:ï
�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/routesPK�����*†9D1Sù*T���T���É�����������¤õð
�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/application.confPK�����*†9Dæ´(ÕJ���J���É�����������¤0ò
�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/dependencies.ymlPK�����*†9DÌ;¨U¬���¬���Á�����������¤aó
�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/messagesPK�����*†9D������������Ä�����������¤ìô
�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play.pluginsPK�����*†9DˆŽ6©™��™��Ú�����������¤Îõ
�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/ScanJob.javaPK�����*†9DlP¨å��å��Û�����������¤_ø
�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/FileAuth.javaPK�����*†9D4ÿÑ^º��º��á�����������¤=�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/FileAuthPlugin.javaPK�����*†9DYí΁1��1��á�����������¤ö�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/utils/MD5Crypt.javaPK�����*†9D—5Kùõ��õ��Ù�����������¤J�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/app/controllers/AuthFileSecurity.javaPK�����*†9D&ÿ‰è¤��¤��Õ�����������¤ûO�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/documentation/manual/home.textilePK�����*†9D´šü¯��¯��î�����������¤’U�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/public/images/favicon.pngPK�����*†9Dä |;f�f�û�����������¤MY�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/public/javascripts/jquery-1.6.4.min.jsPK�����*†9D������������ð�����������¤{À�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/public/stylesheets/main.cssPK�����*†9D_5¢<���<���â�����������¤‰Á�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/htgroupsPK�����*†9D(ÉÆ9����í�����������¤ÅÂ�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/EncryptionTest.javaPK�����*†9D*˜,-I��I��î�����������¤ÛÈ�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/ApacheUsersTest.javaPK�����*†9DÄžŒÒù��ù��î�����������¤0Ð�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/GroupGroupsTest.javaPK�����*†9D?5'³g��g��î�����������¤5×�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/ShadowUsersTest.javaPK�����*†9DTâÒ%���%���ß�����������¤¨Þ�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/groupPK�����*†9Dcé¸���¸���â�����������¤Êß�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/data.ymlPK�����*†9D<_'²���²���á�����������¤‚á�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/htusersPK�����*†9DÇÀ���À���è�����������¤3ã�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/BasicTest.javaPK�����*†9D‰=u���u���à�����������¤ùä�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/shadowPK�����*†9D,mˆ÷��÷��ï�����������¤læ�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/ApacheGroupsTest.javaPK�����*†9D/%ÈBÔ��Ô��à�����������¤pð�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/routesPK�����*†9D¥#Æ/Ç��Ç��ê�����������¤Bó�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/application.confPK�����*†9D‹úWÀ �� ��ê�����������¤�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/dependencies.ymlPK�����*†9Dqé¶h���h���â�����������¤9�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/messagesPK�����*†9D«_^)/��/��è�����������¤¡�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/main.htmlPK�����*†9D*º$•<���<���õ�����������¤Ö�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/Application/index.htmlPK�����*†9DÙ¦��¦��î�����������¤%�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/errors/404.htmlPK�����*†9DËip®V��V��î�����������¤×�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/errors/500.htmlPK�����*†9D¤8r“���“���õ�����������¤9�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/controllers/Application.javaPK�����*†9Dp­b’$���$���ã�����������¤ß�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/securePK�����*†9DD6I÷P��P��û�����������¤�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pyPK�����*†9DŒÀÉZ•��•��ù�����������¤m#�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/README.mdPK�����*†9DaCV��V��ù�����������¤&�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/build.xmlPK�����*†9D%oÖ��Ö��ü�����������¤†-�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pycPK�����*†9DxÏ‘[$���$���ø�����������¤v4�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/manifestPK�����*†9D#ð—»��»������������¤°5�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/lib/play-play-file-auth.jarPK�����*†9DÔQ.^Þ���Þ���û�����������¤”S�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/routesPK�����*†9D1Sù*T���T�������������¤‹U�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/application.confPK�����*†9Dæ´(ÕJ���J�������������¤W�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/dependencies.ymlPK�����*†9DÌ;¨U¬���¬���ý�����������¤oX�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/messagesPK�����*†9D�����������������������¤6Z�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play.pluginsPK�����*†9DˆŽ6©™��™������������¤T[�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/ScanJob.javaPK�����*†9DlP¨å��å������������¤!^�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/FileAuth.javaPK�����*†9D4ÿÑ^º��º������������¤;{�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/FileAuthPlugin.javaPK�����*†9DYí΁1��1������������¤0~�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/utils/MD5Crypt.javaPK�����*†9D—5Kùõ��õ������������¤…°�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/app/controllers/AuthFileSecurity.javaPK�����*†9D&ÿ‰è¤��¤������������¤­¶�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/documentation/manual/home.textilePK�����*†9D´šü¯��¯��*����������¤€¼�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/public/images/favicon.pngPK�����*†9Dä |;f�f�7����������¤wÀ�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/public/javascripts/jquery-1.6.4.min.jsPK�����*†9D������������,����������¤á'�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/public/stylesheets/main.cssPK�����*†9D_5¢<���<�������������¤+)�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/htgroupsPK�����*†9D(ÉÆ9����)����������¤£*�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/EncryptionTest.javaPK�����*†9D*˜,-I��I��*����������¤õ0�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/ApacheUsersTest.javaPK�����*†9DÄžŒÒù��ù��*����������¤†8�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/GroupGroupsTest.javaPK�����*†9D?5'³g��g��*����������¤Ç?�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/ShadowUsersTest.javaPK�����*†9DTâÒ%���%�������������¤vG�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/groupPK�����*†9Dcé¸���¸�������������¤ÔH�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/data.ymlPK�����*†9D<_'²���²�������������¤ÈJ�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/htusersPK�����*†9DÇÀ���À���$����������¤µL�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/BasicTest.javaPK�����*†9D‰=u���u�������������¤·N�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/shadowPK�����*†9D,mˆ÷��÷��+����������¤fP�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/ApacheGroupsTest.javaPK�����*†9D/%ÈBÔ��Ô������������¤¦Z�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/routesPK�����*†9D¥#Æ/Ç��Ç��&����������¤´]�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/application.confPK�����*†9D‹úWÀ �� ��&����������¤¿x�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/dependencies.ymlPK�����*†9Dqé¶h���h�������������¤#{�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/messagesPK�����*†9D«_^)/��/��$����������¤Ç|�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/main.htmlPK�����*†9D*º$•<���<���1����������¤8€�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/Application/index.htmlPK�����*†9DÙ¦��¦��*����������¤Ã�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/errors/404.htmlPK�����*†9DËip®V��V��*����������¤±„�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/errors/500.htmlPK�����*†9D¤8r“���“���1����������¤Oˆ�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/controllers/Application.javaPK�����*†9Dp­b’$���$�������������¤1Š�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/securePK�����*†9DD6I÷P��P��7����������¤’‹�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pyPK�����*†9DŒÀÉZ•��•��5����������¤7�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/README.mdPK�����*†9DaCV��V��5����������¤“�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/build.xmlPK�����*†9DÞÀaæÖ��Ö��8����������¤Èš�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pycPK�����*†9DxÏ‘[$���$���4����������¤ô¡�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/manifestPK�����*†9D@ó»��»��G����������¤j£�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/lib/play-play-file-auth.jarPK�����*†9DÔQ.^Þ���Þ���7����������¤ŠÁ�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/routesPK�����*†9D1Sù*T���T���A����������¤½Ã�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/application.confPK�����*†9Dæ´(ÕJ���J���A����������¤pÅ�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/dependencies.ymlPK�����*†9DÌ;¨U¬���¬���9����������¤Ç�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/messagesPK�����*†9D������������<����������¤É�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play.pluginsPK�����*†9DˆŽ6©™��™��R����������¤vÊ�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/ScanJob.javaPK�����*†9DlP¨å��å��S����������¤Í�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/FileAuth.javaPK�����*†9D4ÿÑ^º��º��Y����������¤Õê�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/FileAuthPlugin.javaPK�����*†9DYí΁1��1��Y����������¤î�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/utils/MD5Crypt.javaPK�����*†9D—5Kùõ��õ��Q����������¤— �samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/app/controllers/AuthFileSecurity.javaPK�����*†9D&ÿ‰è¤��¤��M����������¤û&�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/documentation/manual/home.textilePK�����*†9D´šü¯��¯��f����������¤
-�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/public/images/favicon.pngPK�����*†9Dä |;f�f�s����������¤=1�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/public/javascripts/jquery-1.6.4.min.jsPK�����*†9D������������h����������¤ã˜�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/public/stylesheets/main.cssPK�����*†9D_5¢<���<���Z����������¤iš�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/htgroupsPK�����*†9D(ÉÆ9����e����������¤œ�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/EncryptionTest.javaPK�����*†9D*˜,-I��I��f����������¤«¢�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/ApacheUsersTest.javaPK�����*†9DÄžŒÒù��ù��f����������¤xª�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/GroupGroupsTest.javaPK�����*†9D?5'³g��g��f����������¤õ±�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/ShadowUsersTest.javaPK�����*†9DTâÒ%���%���W����������¤à¹�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/groupPK�����*†9Dcé¸���¸���Z����������¤z»�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/data.ymlPK�����*†9D<_'²���²���Y����������¤ª½�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/htusersPK�����*†9DÇÀ���À���`����������¤Ó¿�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/BasicTest.javaPK�����*†9D‰=u���u���X����������¤Â�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/shadowPK�����*†9D,mˆ÷��÷��g����������¤üÃ�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/ApacheGroupsTest.javaPK�����*†9D/%ÈBÔ��Ô��X����������¤xÎ�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/routesPK�����*†9D¥#Æ/Ç��Ç��b����������¤ÂÑ�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/application.confPK�����*†9D‹úWÀ �� ��b����������¤	í�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/dependencies.ymlPK�����*†9Dqé¶h���h���Z����������¤©ï�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/messagesPK�����*†9D«_^)/��/��`����������¤‰ñ�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/main.htmlPK�����*†9D*º$•<���<���m����������¤6õ�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/Application/index.htmlPK�����*†9DÙ¦��¦��f����������¤ýö�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/errors/404.htmlPK�����*†9DËip®V��V��f����������¤'ú�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/errors/500.htmlPK�����*†9D¤8r“���“���m����������¤þ�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/controllers/Application.javaPK�����*†9Dp­b’$���$���[����������¤��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/securePK�����*†9DD6I÷P��P��s����������¤¼�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pyPK�����*†9DŒÀÉZ•��•��q����������¤�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/README.mdPK�����*†9DaCV��V��q����������¤Á	�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/build.xmlPK�����*†9Dnê§xÖ��Ö��t����������¤¦�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pycPK�����*†9DxÏ‘[$���$���p����������¤�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/manifestPK�����*†9DÆü»��»��ƒ����������¤À�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/lib/play-play-file-auth.jarPK�����*†9DÔQ.^Þ���Þ���s����������¤9�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/routesPK�����*†9D1Sù*T���T���}����������¤‹;�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/application.confPK�����*†9Dæ´(ÕJ���J���}����������¤z=�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/dependencies.ymlPK�����*†9DÌ;¨U¬���¬���u����������¤_?�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/messagesPK�����*†9D������������x����������¤žA�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play.pluginsPK�����*†9DˆŽ6©™��™��Ž����������¤4C�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/ScanJob.javaPK�����*†9DlP¨å��å������������¤yF�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/FileAuth.javaPK�����*†9D4ÿÑ^º��º��•����������¤d�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/FileAuthPlugin.javaPK�����*†9DYí΁1��1��•����������¤xg�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/utils/MD5Crypt.javaPK�����*†9D—5Kùõ��õ������������¤Eš�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/app/controllers/AuthFileSecurity.javaPK�����*†9D&ÿ‰è¤��¤��‰����������¤å �samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/documentation/manual/home.textilePK�����*†9D´šü¯��¯��¢����������¤0§�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/public/images/favicon.pngPK�����*†9Dä |;f�f�¯����������¤Ÿ«�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/public/javascripts/jquery-1.6.4.min.jsPK�����*†9D������������¤����������¤�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/public/stylesheets/main.cssPK�����*†9D_5¢<���<���–����������¤C�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/htgroupsPK�����*†9D(ÉÆ9����¡����������¤3�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/EncryptionTest.javaPK�����*†9D*˜,-I��I��¢����������¤ý�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/ApacheUsersTest.javaPK�����*†9DÄžŒÒù��ù��¢����������¤&�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/GroupGroupsTest.javaPK�����*†9D?5'³g��g��¢����������¤¿-�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/ShadowUsersTest.javaPK�����*†9DTâÒ%���%���“����������¤æ5�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/groupPK�����*†9Dcé¸���¸���–����������¤¼7�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/data.ymlPK�����*†9D<_'²���²���•����������¤(:�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/htusersPK�����*†9DÇÀ���À���œ����������¤<�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/BasicTest.javaPK�����*†9D‰=u���u���”����������¤?�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/shadowPK�����*†9D,mˆ÷��÷��£����������¤.A�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/ApacheGroupsTest.javaPK�����*†9D/%ÈBÔ��Ô��”����������¤æK�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/routesPK�����*†9D¥#Æ/Ç��Ç��ž����������¤lO�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/application.confPK�����*†9D‹úWÀ �� ��ž����������¤ïj�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/dependencies.ymlPK�����*†9Dqé¶h���h���–����������¤Ëm�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/messagesPK�����*†9D«_^)/��/��œ����������¤ço�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/main.htmlPK�����*†9D*º$•<���<���©����������¤Ðs�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/Application/index.htmlPK�����*†9DÙ¦��¦��¢����������¤Óu�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/errors/404.htmlPK�����*†9DËip®V��V��¢����������¤9y�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/errors/500.htmlPK�����*†9D¤8r“���“���©����������¤O}�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/controllers/Application.javaPK�����*†9Dp­b’$���$���—����������¤©�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/securePK�����*†9DD6I÷P��P��¯����������¤‚�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pyPK�����*†9DŒÀÉZ•��•��­����������¤Ÿ†�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/README.mdPK�����*†9DaCV��V��­����������¤ÿ‰�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/build.xmlPK�����*†9DÖþ›Nò��ò��°����������¤ ’�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pycPK�����*†9DxÏ‘[$���$���¬����������¤à™�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/manifestPK�����*†9D0ã•»��»��¿����������¤Î›�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/lib/play-play-file-auth.jarPK�����*†9DÔQ.^Þ���Þ���¯����������¤fº�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/routesPK�����*†9D1Sù*T���T���¹����������¤½�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/application.confPK�����*†9Dæ´(ÕJ���J���¹����������¤<¿�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/dependencies.ymlPK�����*†9DÌ;¨U¬���¬���±����������¤]Á�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/messagesPK�����*†9D������������´����������¤ØÃ�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play.pluginsPK�����*†9DˆŽ6©™��™��Ê����������¤ªÅ�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/ScanJob.javaPK�����*†9DlP¨å��å��Ë����������¤+É�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/FileAuth.javaPK�����*†9D4ÿÑ^º��º��Ñ����������¤ùæ�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/FileAuthPlugin.javaPK�����*†9DYí΁1��1��Ñ����������¤¢ê�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/utils/MD5Crypt.javaPK�����*†9D—5Kùõ��õ��É����������¤«�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/app/controllers/AuthFileSecurity.javaPK�����*†9D&ÿ‰è¤��¤��Å����������¤‡$�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/documentation/manual/home.textilePK�����*†9D´šü¯��¯��Þ����������¤+�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/public/images/favicon.pngPK�����*†9Dä |;f�f�ë����������¤¹/�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/public/javascripts/jquery-1.6.4.min.jsPK�����*†9D������������à����������¤×—�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/public/stylesheets/main.cssPK�����*†9D_5¢<���<���Ò����������¤Õ™�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/htgroupsPK�����*†9D(ÉÆ9����Ý����������¤œ�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/EncryptionTest.javaPK�����*†9D*˜,-I��I��Þ����������¤£�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/ApacheUsersTest.javaPK�����*†9DÄžŒÒù��ù��Þ����������¤L«�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/GroupGroupsTest.javaPK�����*†9D?5'³g��g��Þ����������¤A³�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/ShadowUsersTest.javaPK�����*†9DTâÒ%���%���Ï����������¤¤»�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/groupPK�����*†9Dcé¸���¸���Ò����������¤¶½�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/data.ymlPK�����*†9D<_'²���²���Ñ����������¤^À�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/htusersPK�����*†9DÇÀ���À���Ø����������¤ÿÂ�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/BasicTest.javaPK�����*†9D‰=u���u���Ð����������¤µÅ�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/shadowPK�����*†9D,mˆ÷��÷��ß����������¤È�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/ApacheGroupsTest.javaPK�����*†9D/%ÈBÔ��Ô��Ð����������¤Ó�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/routesPK�����*†9D¥#Æ/Ç��Ç��Ú����������¤ÎÖ�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/application.confPK�����*†9D‹úWÀ �� ��Ú����������¤ò�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/dependencies.ymlPK�����*†9Dqé¶h���h���Ò����������¤¥õ�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/messagesPK�����*†9D«_^)/��/��Ø����������¤ý÷�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/main.htmlPK�����*†9D*º$•<���<���å����������¤"ü�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/Application/index.htmlPK�����*†9DÙ¦��¦��Þ����������¤aþ�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/errors/404.htmlPK�����*†9DËip®V��V��Þ����������¤�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/errors/500.htmlPK�����*†9D¤8r“���“���å����������¤U�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/controllers/Application.javaPK�����*†9Dp­b’$���$���Ó����������¤ë�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/securePK�����*†9DD6I÷P��P��ë����������¤��samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pyPK�����*†9DŒÀÉZ•��•��é����������¤Y�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/README.mdPK�����*†9DaCV��V��é����������¤õ�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/build.xmlPK�����*†9DÞE:ò��ò��ì����������¤R�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pycPK�����*†9DxÏ‘[$���$���è����������¤N$�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/manifestPK�����*†9D"YO»��»��û����������¤x&�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/lib/play-play-file-auth.jarPK�����*†9DÔQ.^Þ���Þ���ë����������¤LE�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/routesPK�����*†9D1Sù*T���T���õ����������¤3H�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/application.confPK�����*†9Dæ´(ÕJ���J���õ����������¤šJ�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/dependencies.ymlPK�����*†9DÌ;¨U¬���¬���í����������¤÷L�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/messagesPK�����*†9D������������ð����������¤®O�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play.pluginsPK�����*†9DˆŽ6©™��™������������¤¼Q�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/ScanJob.javaPK�����*†9DlP¨å��å������������¤yU�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/FileAuth.javaPK�����*†9D4ÿÑ^º��º��
����������¤ƒs�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/FileAuthPlugin.javaPK�����*†9DYí΁1��1��
����������¤hw�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/utils/MD5Crypt.javaPK�����*†9D—5Kùõ��õ������������¤­ª�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/app/controllers/AuthFileSecurity.javaPK�����*†9D&ÿ‰è¤��¤������������¤Å±�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/documentation/manual/home.textilePK�����*†9D´šü¯��¯������������¤ˆ¸�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/public/images/favicon.pngPK�����*†9Dä |;f�f�'����������¤o½�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/public/javascripts/jquery-1.6.4.min.jsPK�����*†9D����������������������¤É%�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/public/stylesheets/main.cssPK�����*†9D_5¢<���<�������������¤(�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/htgroupsPK�����*†9D(ÉÆ9��������������¤k*�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/EncryptionTest.javaPK�����*†9DÛ7²?I��I������������¤­1�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/ApacheUsersTest.javaPK�����*†9DÄžŒÒù��ù������������¤.:�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/GroupGroupsTest.javaPK�����*†9Dd s*ù��ù������������¤_B�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/ShadowUsersTest.javaPK�����*†9DTâÒ%���%�������������¤J�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/groupPK�����*†9Dcé¸���¸�������������¤ÞL�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/data.ymlPK�����*†9D<_'²���²���
����������¤ÂO�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/htusersPK�����*†9DÇÀ���À�������������¤ŸR�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/BasicTest.javaPK�����*†9D‰=u���u�������������¤‘U�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/shadowPK�����*†9D÷á,·ÿ��ÿ������������¤0X�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/ApacheGroupsTest.javaPK�����*†9D/%ÈBÔ��Ô������������¤h`�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/routesPK�����*†9D¥#Æ/Ç��Ç������������¤fd�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/application.confPK�����*†9D‹úWÀ �� ������������¤a€�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/dependencies.ymlPK�����*†9Dqé¶h���h�������������¤µƒ�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/messagesPK�����*†9D«_^)/��/������������¤I†�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/main.htmlPK�����*†9D*º$•<���<���!����������¤ªŠ�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/Application/index.htmlPK�����*†9DÙ¦��¦������������¤%�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/errors/404.htmlPK�����*†9DËip®V��V������������¤‘�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/errors/500.htmlPK�����*†9D¤8r“���“���!����������¤‘•�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/controllers/Application.javaPK�����*†9Dp­b’$���$�������������¤c˜�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/securePK�����*†9DD6I÷P��P��'����������¤´š�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pyPK�����*†9DŒÀÉZ•��•��%����������¤I �samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/README.mdPK�����*†9DaCV��V��%����������¤!¤�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/build.xmlPK�����*†9Dem eò��ò��(����������¤º¬�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/commands.pycPK�����*†9DxÏ‘[$���$���$����������¤ò´�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/manifestPK�����*†9Du€v-»��»��7����������¤X·�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/lib/play-play-file-auth.jarPK�����*†9DÔQ.^Þ���Þ���'����������¤hÖ�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/routesPK�����*†9D1Sù*T���T���1����������¤‹Ù�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/application.confPK�����*†9Dæ´(ÕJ���J���1����������¤.Ü�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/dependencies.ymlPK�����*†9DÌ;¨U¬���¬���)����������¤ÇÞ�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/conf/messagesPK�����*†9D������������,����������¤ºá�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play.pluginsPK�����*†9DˆŽ6©™��™��B����������¤ä�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/ScanJob.javaPK�����*†9DlP¨å��å��C����������¤ýç�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/FileAuth.javaPK�����*†9D4ÿÑ^º��º��I����������¤C�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/FileAuthPlugin.javaPK�����*†9DYí΁1��1��I����������¤d
�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/src/play/modules/fileauth/utils/MD5Crypt.javaPK�����*†9D—5Kùõ��õ��A����������¤å=�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/app/controllers/AuthFileSecurity.javaPK�����*†9D&ÿ‰è¤��¤��=����������¤9E�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/documentation/manual/home.textilePK�����*†9D´šü¯��¯��V����������¤8L�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/public/images/favicon.pngPK�����*†9Dä |;f�f�c����������¤[Q�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/public/javascripts/jquery-1.6.4.min.jsPK�����*†9D������������X����������¤ñ¹�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/public/stylesheets/main.cssPK�����*†9D_5¢<���<���J����������¤g¼�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/htgroupsPK�����*†9D(ÉÆ9����U����������¤¿�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/EncryptionTest.javaPK�����*†9DÛ7²?I��I��V����������¤‰Æ�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/ApacheUsersTest.javaPK�����*†9DÄžŒÒù��ù��V����������¤FÏ�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/GroupGroupsTest.javaPK�����*†9Dd s*ù��ù��V����������¤³×�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/ShadowUsersTest.javaPK�����*†9DTâÒ%���%���G����������¤ à�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/groupPK�����*†9Dcé¸���¸���J����������¤ªâ�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/data.ymlPK�����*†9D<_'²���²���I����������¤Êå�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/htusersPK�����*†9DÇÀ���À���P����������¤ãè�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/BasicTest.javaPK�����*†9D‰=u���u���H����������¤ì�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/shadowPK�����*†9D÷á,·ÿ��ÿ��W����������¤ìî�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/test/ApacheGroupsTest.javaPK�����*†9D/%ÈBÔ��Ô��H����������¤`÷�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/routesPK�����*†9D¥#Æ/Ç��Ç��R����������¤šû�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/application.confPK�����*†9D‹úWÀ �� ��R����������¤Ñ�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/dependencies.ymlPK�����*†9Dqé¶h���h���J����������¤a�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/conf/messagesPK�����*†9D«_^)/��/��P����������¤1�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/main.htmlPK�����*†9D*º$•<���<���]����������¤Î"�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/Application/index.htmlPK�����*†9DÙ¦��¦��V����������¤…%�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/errors/404.htmlPK�����*†9DËip®V��V��V����������¤Ÿ)�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/views/errors/500.htmlPK�����*†9D¤8r“���“���]����������¤i.�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/app/controllers/Application.javaPK�����*†9Dp­b’$���$���K����������¤w1�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/securePK�����*†9Dp­b’$���$���*����������¤4�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/modules/securePK�����*†9Dp­b’$���$���î����������¤p6�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/modules/securePK�����*†9Dp­b’$���$���²����������¤ 8�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/modules/securePK�����*†9Dp­b’$���$���v����������¤”:�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/modules/securePK�����*†9Dp­b’$���$���:����������¤L<�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/modules/securePK�����*†9Dp­b’$���$���þ�����������¤È=�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/modules/securePK�����*†9Dp­b’$���$���Â�����������¤?�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/modules/securePK�����*†9Dp­b’$���$���†�����������¤@�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/modules/securePK�����*†9Dp­b’$���$���J�����������¤Ô@�samples-and-tests/auth-file-demo/modules/play-file-auth-0.2/modules/securePK�����ˆMDp­b’$���$��������������¤`A�modules/securePK����àà|c�°A���