From 0aaa1acc8256556ee065764eca5494b5d10ec74e Mon Sep 17 00:00:00 2001 From: MrIkso Date: Mon, 23 May 2022 21:15:46 +0300 Subject: [PATCH 1/4] updated temlates and updated ProjectWriter --- app/src/main/assets/templates/0.zip | Bin 89264 -> 48160 bytes app/src/main/assets/templates/1.zip | Bin 90281 -> 50190 bytes app/src/main/assets/templates/2.zip | Bin 89255 -> 61185 bytes app/src/main/assets/templates/3.zip | Bin 88934 -> 50313 bytes .../androidide/utils/ProjectWriter.java | 371 ++++++++++-------- 5 files changed, 205 insertions(+), 166 deletions(-) diff --git a/app/src/main/assets/templates/0.zip b/app/src/main/assets/templates/0.zip index e2ad5a2332ebc6668100988893a713c8c2fd7977..75a9b922629b8bfddf93c25c508ee8bf9d015815 100644 GIT binary patch delta 42259 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 z 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 literal 89255 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

@3}up)M>k zJ@Atc8&W`+1WExrzI4SP;0X~14mXGc+>jwUXdwu?HQ9D#R@Qz%KHHCTfhbSDU4Zs; z6Fb7bn@^3}R=Dsf6I{?)JbMzE#7g0mCzQ!#%y~^32y!NoMG(6=e#$wLiKmw@8=!SG zSeS8`U>h1I!kq=%pqY=&Nir$Vi5}MKXJAJ_nmx8b&RAI~;kF%lYomg#I2~^?Mh0K*LqsYytESqc+!(1t-%oS3;r zy}$bBG9WY(K3P|c+3jL@Q9<`SJu`9^C&U@xQVErjT6QMfYBM(Bve86)iU*%sIr2Pb z?YS{C!m$sk^4Vb6aNfn-`{HbP^|5(Vsql*0-O>~El3!`0p+)XlBU>%Mxw8@`q zdBok2DB#AB=NL|>U=l4kkr<~Q0zFd+PaP!*G^61(^#afbyT12EgPCylzm&l# z8Qt>6Se~wmzXHD;20enUMAi!~m*m-KzioL74C{@Glqfq3GfZFaPR5QFk`=x7EmRQb zefdqKbBEyvCQg`>B*8u>S4b9-QzIidx_YPObsX(6k3z+(@i*wULjqpaHfUj#*M~W* z*97IjElhhh(@{O7T=GPxs)lUkT4Wk$;HLxupu}3pA~W#YzT8yf_#gf=l`fV~{+LXp z0a{Pmi`D1ylwElxvTYBG-W|#FWMrMWjFDSpcwslQVUzQL4NAHnMHd;J?D}LDdOF10 z*1yJ_t3T#+dMMe z3dpFEf73ViqOgEDTC@&hqV>YbH7Q`SyweNCIAJ|X<9Iy`8B@q5oSrcGVcN5sB4u*G znZV?jn2k(?3|E9pls?T!c@+XGx<0GA+#9Mt5w5C)FGYV9eN?zn&VT&GvLj(n|L|-; z@cdwq?(Drh>M+|9Bt6GRyGF;_|A~z-^&}t;G zmR9xHSid1+;V2ZzO4Noq5rL#Dn#^A%i_M_E9_K=!%aNIt#?NiIwD8*5e7vpkJvS25 z)Sge?w^^8^ZBq4}C>uORjRP@$COdg1`zJ=?OFeAeWB!yne`G4^>bG<Zs|XY@9ttgk|N797rcAtkJ+CHTwjx;R?wVBgteBrA?w`d|jGUP+i!w z^M$Iij`Hj%->1g@${8tY* zn4tYtlN7Q1nEO=@FgX=*Ga3~#gGQ~A#Onm_Z*R$^=O_aLBgV!P4V*5-tv|od2eO^K zqoAS==UOP{C$Vh(d`iA>kVblu8NSLOOUkX=us>=J8i~@FE6cmONjPi6=ciF!Oc|-8 z`04BV#BKlRSMJWA4t>z07>nOGYH*?PjY`<`nBB%oNcC6YH{`?zU~blhg*#DDSXfa| z>7*1?i?xJczIjGvw#~U)OR$Yk-~`th?F2N=(0|u2{r@(?WBacoJlI3J4vJs%H!@%A zKaKGG$@)*N);~vhWT5Kr|4oyX;p^2YUXxZ7AfwkML-EE2tczHaDKLOv;#R zaVM0{bIi+}HZ&rE0ve|1#x=L_pd`LnH6mkg({IJNdeYj1>@nM>7q~IaKCw}i&;Ytnp^ZFOsF zEdr8`rQDViXF49_sv~~=K z^%!D&?UA4-)w)>Qzz;sR$kvT3UXp$(4tEtkJK-&szm`rR^wYq9$6 zPE)t*yN$%!9G(R1afV3t&@;w@PC;o{H#+fHM`pq?^O=ib5fI%>s&O%K+MN;ZYTWx3 z=P3O1o-Z?;-glP?JGu6~I{W?VL7j8Hg=?2gH?#Lk-@8>_9{?LBdS5PxdRWac22|l# zP#P1>q*LZ|m)s&DzIG$r(E{|-k?6C~X-U5k{LS01@+tXl>#I%nDLHXp3)t~~%$@KK zb8?Zw=-&+e$u*b@@OIzI>m2!xC7B!!gKIK?I{Q73I!;r2=CWKraxWzQSyMh z(HEUbKw~O9!hRM@W6)iQHmF-8>&B<0TkvwBlO~ldVyPpZ14U{BZUV zTz$#W8ZR6=!hP>Kc@r7a2!j%^nFMo4W2PUzr1&0wQ@Cx!yIn=1JUU2=5E!rV!1+?3 ziB`bL>x9Pe2;866Z6k-Pk4(F=9rf`eZD=otx!j(ui68NgJWj4@%&coU9{Psp?#$1& zu@btNiGS_&k`;DduX5u?FA5)Av&Q$W8uhtZ?w5-_GFR8Rko-6NF5DyVVaFE!D}c>+ z{o5B~UM-X@z9_4Qg^`O8a0FAljYycs?%h!?C@gt56aFH=8Mz7ulsko}?`h4Bxd%iD zM9;Vn`UoaMEv*>%o23S;=hfF|M(EHNH>H^LuBSscNQ=!PGQK*Q-PQM>^JzIyPP z+s6aaHNcb-|7P1-G2*0RSkilQ{FY( z)@{FZ)1?nkw_dAfyLNvBu+=ztZ9bO{G;QpBl-@Y0=TH&Sf3L>IeYE3Ma(eM*XKbcJ zmX74k?gAIn3b8PDYFHA7PIo^qu_DuaOwCJeB4+LzZW5#NS32G5$5OQCRJZL9l*gNfxj8EcVGKg+3G+I zrk%b`fVL=0VEO!xY9_$r2}cV%iQ`;T!z?JnoTZ8zCu-I3a-Zj?)D!+1&~i}uj#JpL zE2|b9&8SuKykD+?aa^@WLSi#rKy^Durc&T zJC1y4S*nf@rIY?0WSCivXOucJzYC(Ip4iMIznoUWmk~&g+@RNy6exPI@6vb^T-7;*Jm(>-4%toVeA z2Dz$`@nct?RgcW@@AjHNW*O@c%XP9os|p9G6KPl0WT4jm~mozQylv&8{?^mQcrBkQqkVNZRz(B|T4-C(JyjZKRr zu}Jj!R%-B2YavP{n~C{vg?NM-tVT|hcNDWB9;GES%#ERbqsM1WBO~}NNYj-+ohhx( zSna8{4T@!riB*LM>3haUeeG{nHwr8w_G40kyO~{XNwH6?2 zKfBe_c725`F+xI?ONg};VxfSbMkhQcq7tHdLO{h8?w}^U*p#V-4VO?Dw%hiG`1TkIp=@0EX`hGg&5DnRE-Eh^7-n@-{&lvjuetrh2*1H>jMA;eR#PWBIzf{iLV7eb3Cd4jt{U#(JoQ+TUuy z=FCjh4|}{&S(@J56-5l$LFYVd+7?D<_WWRzlpPg(6>U z4Rc%v-5`^v@|E`2349lLSv*(Q0^DV5<$=j8aEQ?Ml3KSK?(&)=7hDpJn`)}Ee%!aV zs<@E>&IQ!6Jk%Ryy7}|GA^=?}O=glS)iInc%~pleXNebUb!t5kNZw5)H~q1z?*TK} zlZbwn@|T;(x#7@xqa$1gG4`kQ^0w?XSKD=}PWj1$om4&3-Ai+UHu@1%rEneW4;N9j z?IIWM&9`J9Ylk0R3S9+tQY?;Y+jSzRI8k#{lt1dF(r7Bfn#ZQeH4c|ev^vX>D(kGi zr<0Udu&r|G|1`ZXRlXlPO;URf`E9ohTpsh;w@*uzeI4CZ>J#;=8M%Y(RYqs0EEVHq z!gy{*6=v8)E+Sko$b;A-0v7p@i;`^8Rjs49Dma`+^?P==K?h&7qh}fV&dN?&j-9EgTW=T?lITD%WD5NiO=>6 z=}qwKfB!sR>px8a{53WGrzrp)*#4XULxKtm{I>*kPzzE+SsiUjtw{N_!L2K;N|~R# zDPK)nP^HPB4@*rDq_$D*{phd@l~4ePkTBeas71}1TenEdT2%!^lo0|10z;=@kym)bla(HrxBtd8_r2(V!>j0}v+CKU1FTq-o`sxqiRx zP`o!dPZdArNEQOhIGC%utb-ieK&RmS&2O#2Q;H{C*Uf0sFVV)Jcm`uH>I(1atpWF| zKg}2HdDu2PdJ#;t-j!oLWrypsZ08;&+I$EFGaEIt4#UkGh;#@&G$K9H#ZA(5X`i+(GA8x+&crI z;2e9wKpfWav;amw<|0}mleI%Q{wJGh^?dx7<@yP7*>c-$rL`7krx8k{CL*)7(+ z`?`tDdkbLO+U{BKmzNwvXqvLmM>inDolEGz1RlPjyBKqJo9_zqSYj4Z<~~u!J!2Cu zvi}cd?-V3T6l@E&ZQHhO+uf&a+qP}nIBnauZFirx-93HZeKGOo-a9cdA3LHxDzhr~ zj;z`{bFGyKrZa#wa3-N1z#{3ZF7rijwJs|~uua3u1@w<^f?uY$TxA;rVDq&@rdB)} z3&#>!5)WKr<}zkn^k0Le3TC|T(N%h*xBry--hxRoqpD}QZgkUlB4pPj9yCW*c3;F4GhNw<|EVkllGQu_@~nq3zEtpX;feGWk}HtrkM{o5dYo3LGT zXhb6Vx4L;&zcFR=T0H5#w9i@-tAf4ep$xq++1U{-o_CftjI>h+SL&Tt;P&o$-l(G% z5JR!&{ayv&M22ASDVgQZl$Oklgi_b5q2YN>J-6Ep73KH3AQp#e0tUF^!SnAH>koNH z7ck7w$bz(2uM9*s{fygBWQ0fr_HDU#AZ&DbdG`(YqDUT9gY6)kjrBKN@&tVM^bc{ zUY!uN(kHhdGtl3-G^b8B!Uy#!wA1QchcV3dwxXXC{UoD(= z&*c6~l^%0bO=}!F)gNdhHc^Fn)77*-fuoF8GuL3FU8HpkDxJ_EWA&SfziJ30eggkKfxj(fc2Q zal9Wbc)^oLLvN>@lPx8g2y?49Tmlx;e9cq@U zx~|AM$w})E9x%C`VOM0h&Vm=b-FCEpvt?ZKV~4+Vn+E^bhVC<%1=_ob3LW>r?|=P@ z3a1IZ15fRH{Uq(n)XQ*%|mEjUACINfJ zVg&i430xiyd^+)p*2=7uu7aW?RL5u5h^qh4=Q7$*@?ET*2pc?1#fFX5+u@8*j!a?y z!%K9#g$!Hcl^S4m?P$L#ZTtguJ1Y-Br~&)(X>LzX;Al@OLl+(3PaM1`sO!ASyo zBYd}~g8|PMhTK;sA@i>%drktf=bs3|-y{Kd8K?myO2FDcw@Kzcd17F{#3l$HflB|n ze=O-bNx%VIs35p{%UIq-sNPVAu)^ZqEM1#1-K>TDaof)Y7_){92A&&B4>ObF4de^! z;u{=CbRc0qQ4}^j_v82ILkb%lXf!3sf_EH9;5*{T6gFgdU%wE3VkvAvNubvhQsoVf zl;IY|P>5b8#8R9;0m`af!y4o*GJg^J%P((@ht{s%5XcMDAWxlra4Ul`8~TH2+6Q;w zZVw;Og2V-BZsAAP{KaRyP!a%^46$#=JOnE+KF2Se`iW0LH%K7ntAS4c2BW1}GOnG{ zaR}CZ1ziuhit(&(R%|H~BLxZT%t+iE-a$d;H<#gJo(zcq0R<=%LS8s9q>|B~^N>}I zDhg3H4}tw&iD!TSLAbQ-Ne%?&M}jEiY)F~nli_H2_^k=~f*3k&G0oQSi$@8M`m%{1 zi&4oN4|+z;#jhOB6Ws)6)A9fA_TeK06et?1*+i-Pl1O^x>x-qE`-@=-N|K;=G_c|E zMoVPQ##y42+abhia&u$T-+44I*UlG7J%>5n##=N-Vh}X*1|ecBc=4_c4~OaHL0Sh= znl>OLuTF6z0Cg2h9LihXQ*vys+Jhd68B^(n=OtQlU1i@`WU!3hVoWw4_|uX z7-=W!8P-a(hOAL6fWvX6pX=t?^dLLtxqIuhSky9%OAysZa7SYBeB8jK3@91*+;3N@ ztARkxTCHk!964`G&roPc%uv7@d{vRa?42++B?7z_2_$y5sAMB~>wXY@Pnb{ut^Y!M z&+qxh{|VKv?w6=YyZq)`>*q5Hbw3C&A?3+AS~+rZ+`CA5G+|qJ_wQ?hI+N6sMQT%v zFS99$Zi1lPQ$mEN%jB@0uwA#y(_>OYBWuCtS_8CsuAJeIUasTv$Q+9j5$oX^=9^=@ z=q6d!k#++qPipGdED2!I`x8Q*%)?L=g!QT)V^+?PUV1$|fAr+6Z`Q6p;TdJk z5|D}gLq)pN$yqUz-rlL2dj`GnXi+niES6F+x%-Nqf;AA`0E>4wb(dE8OM9P0RoN!c zhr2n(EJg-~8bWN;nm#IjJ9Pk5%Z%#Dn-;TG0!Luj>!mgKcfKtEtT<_?i{H|Fjeo+FjQIXkkdN=kjZ>S`ubu>><)has&0Ro44D%!@wi@<2}PN zhz6c3`9?dmc5mM_)tE=DtWU~zwHL#VO~Ehtk)*~+gTI4MjnEnslcXG!Hp2Q;|3kVy&v-U5prhvd4#PV@;;&B=caI`#LgSR z0ld#4!KFMWIfsiL_7`IJa*jNEH&U(u`b?lnqdkK>=IQ=;4d`M{lHfm^#>YN_$agqe zEh`eWB<3bRPw?mh!Ji?og5vJl+09{Rt|l=Cr(x1PYZ77s%-_Zp~XSbei-mV-(EKxO?UpRpAT$c8S2v+bo&rPsjSExm(+LnF)m|JaJe~`o9>D^LTnv*`eHZOa+M163+xUM7R6kPt$jD;_EllCnK{2A=r zBk5sD+AYMbJ6zew+An34+t2W2vS?7c)Z7uQ?B0RLGT^WyrlS?2MrRCvg_@&16D8hC z>Uw__9g+Jv7Dd1Ncz^WSyC;q7&Vgss{8`v1sVbInp5OVQIJGZw2D+m_sh^&#`s#y;Yd#jO_rNw%ggsU@+u zirAx*gNnOsHYy!%4S0$$Bs|JQ8fbv^>Hn9-u=dE^2{Gdk`usD65@gH9s)WMj;?Yp?>jFG4S=cll!eS$VAY6=gNz3PO( z(=D527a50|th?+e?nX-+IXkxISP z_V^BtOt*n=jIfyXEXSeceF-70faZ}9+`zv-;x$gdyRR4$GpoHz$fv1ydV9)Qk<%xpM>W(%k(x7zC*r4 zrU5nXe_lV)iJaY$OZ*N$jA_%1T)_Gb-of7qBH$t4$JO)7u1Bx^S(ngc__`sUJq~M_ zh!TJUxkWUy0Od>vVsB^l$OTE>%=HDou(+JL1Kow5SQU?gkCAtSSk4wo4g3 zC5wqy+$qIh&TCFf$uS=((8IKlFZ`Uu3llb3^9{^njsbhfi}y{P6O@;WDMNXRY=mj4 zuXPMO^`~+%;GCoql)2}Glbfie2L5FsnVu;;UvMc45n7XG!?wOT)Qgr}fA;1UKgKAA zE+6zgaP=&yIp0V%;H?4fh<?EM_HdceT^e=9cfI?+n z7ETCENf}8v0GrUrx6>+bM2<6 z(+Sx&FO)Z-37SfaoF#(|ziFk@Ad~#S`vypt>5=X908PaFP@=j1_I=|8{poT;S&;i( zj7aB%;ggHL=lpM(TubCViC5v5a-Hvp+HQ{?9Hp@X3#=zGSB6Q;5{4<9;Cg?Qj($Lf z6UN--tHWY zcoBQTr*4Nf1psX=$e4<_KB|xf%`5&9g*9Jp{{Xi)Le+?lmNh@1L7dy{U0w`99rKmi zgwR*J$?6ZJI$;szY7i`WpfXx_^scVzW`)AtJl6vKG5{^Ax0f1 zm+m0ER_BAg)Lv0=XW$Ulz$j6oAc4PNP2sQ&jhq-W+lgUWPpN2EX?0%hBvD}LpJQu< zX+?T;Bj6MC=IS=RTPL3C;)Be;sW(WYMdNeR_bgc<3Dvia%^P+QX>^Sz`uZ})S5nu45?fiMxGKdRDH=+xJK=F zdhZ$pKE?)?Q>MElN7j!d#|y}I>`Qo+PgDgFf-6iN&Pz!r%q9R?0~$RBB=06??ey}45g&YMfra<@w^#C9p ze0l&Too6a+e~_v=1bPGTDL;TR<_GYlA`uCB2Ui0g79Pj*45j7uo=_;bx~jAdogc`o zxRXRB`@e)rl;}zfwidpfX`23N3HDq_vU47WTu~(AqXDeopZQk)7gvg25PdS>b(Ljs zG|l}i!k*K;tZYtHFDn6$K%agMPfD?95QszceASI@epu_BM8L@I)pY!KZFYtg1D&zH zLjz5WI;WU<>wJD-ZpbYvTDWl)0e}ywm4NlYo4>gzTvyv^f#w2zcI3hP7F8n4FWr$K zSpDJ_g4cS;bRw{Z!Do@)F*KS~kzhSrFRVZ({fUsGB2aSpI-@MzV#JCH?GDFzH@mu0uZPRJs{p&{G%AL+c#?Am`-T%#b&^Awd zAswZZ7-sGr>%d^!64PrpY zXS>-qg+BomX2Q{6*`6c5Taxu|3)4d=KJXvsE_tB6y(5-1b@a9?qM9rH;{!jA)fmK( z_@}MoCKN}!M<39UD*#oIQ@}S-t6->|C=%5DNc< zCYIar$SQ@roQEIPAM|9~yD1(_eCHkU0_lQQkpWbO_YRD_wHFL1!sGL=2QbdZ&S}bH z4;h=>O(bqO-Zxc_=89);Ga^%KoMgeb7KDu(7k71aJo?01!ujtjs{xy%x7_GZ-Qr}z z^1WDtEW({5e`@7El4tL_4evM?5F?k6wwir+%ic6W);pGYykdf&zrCuEe7utEJjumq z^+qijAsoo$(W_8Yv87$A(#iP3Z!%7tF(-d)mC^pOqw^0FL~=0@j{ts-PMsaxEmI*8 zKpsS&{JXT*zL#G3>E;?+SUv$x!((wJytlf*06M<*vbB~HvN%&ZSV1!zXvkeQ#i^L8oYIRD+)^Hgm2Z5gSm+(BAFk0uW zPC+n9@pgm~5xV+7gSJtll4a8QgkbK~a)F^d)xDx~3mGIW!)5vq@`nSNd{SKJ;uM>S z!#$wg{jk>1@!l+&BJ&8X-KrSuV0+4-darfDA7HC%O$P^}r!p;{SM9x8)S)Ghz2tQy zGxVsfj%Cc9dJ`Hq-C`6jHEORFKkuKn1o38XZ$Q;%T3yq4LY2xsc@n&F=D z2-d&bW(}wnDeI)!nR?z2R0|GWUBrn}6%b$#?F`V`lK@BKCZ z`>z~@ssQNw|L(EzpZJM7jhGtNUqwHL-@*LsbsV!ujy-IZ$hg$dUZDM0LtYP{HCLX>=6mwYk?N zkr+m-&O!o-8$~X@BIxJT*{X}z^emi|y_}Fr zcIhVgd3|Zy;V<-+tsUA(!|NASw8x8j`amk^z*GURn5d2e+KTWDcNpfBG#_`LJ)Qkh zz{HQ=XUJkEkh8EB_Eby2gOeTt-H|o*fb9D^^mEQ|l4#jvJv=@5oQCKaS}OYEz}S?A z{YFndTnS@1rVwW{Fs%umTfoQxVgYbat2_#K4Ynn*>u9&O=JbKN#wDfsXT6Zl-$ z((oypDR>}!Yj=A{ZM&RM-jjA+Zg`*9xd;D;qhEJg!uVo=M&AL&7Nek7JLlPb9sn#! z85h{0yneFh^2bJwpZx@*Y3P?ya05$SF%6-1stS7*(C2x6Snj2e<^#W~2?<1T@9!;YiZ2Prpt8BueMG8GC9>=c%qvM_ytX0Y=Gkv7wzW5wBj6_$NVt zYbSaxd~-4`TvBb;)IC|wZoQY5QyRKf;tbta0)G+9tlJ{5-&8O|mWLE3=vFWj&$Ob8 zN~}Cw7IH;&qfe^bM4RewF)vQBI+mCNsE(#CPNzlZUVmPM>1eHxue^wRh*zqg8oF&I zAH4rr23kwQ39T(!5gwKMB2}R}T&h=uA8W{v8J8 zTHP`jgPd&tJPDjQtFFJM?FSTc2fL_Qw4H9g*;YQXcI{)IVyZafjGQ7Ri(w)6;>*5ES>OD2B7A?F#Zu;|G~RKY6x5;2SEm z_W~W|+F$Br5dY2tFQvyHxU0t>PxbIR!6#oIyCWcVkA}b~#RElZ<}&!@@eV-2ppqrxphA_I1px z^~^Y&*U55+42ziHd=^6T)kDWWkn}qPI4dH)EzsrNg6oUtGw#9==t3I67Uk^g1QK~b z=O=7y;yJVp)ARMVl-ZHJtcMzqBP-^b;Qg>Rxb{M(gJ!S&4$GZ(oU^0{G=DYxWlG_E zrMg6hdB}smBLU7Q0@sJg!`=rle*m+k*9!- zq@mq}RMJNZtO?! zg_H0S(tWH?x>=?{t^>YJpaCqxpntcC>GXw4@qt$zwwL`mE)}yR2H;{VI^2%xm|ncN zQ*%v5))zRd;v3-vbW;T2qocqFWO#({aI5J@*27gd6UMapTLCae3dKM-eCUhsRRq`o zV$QP%{y-n&1e8ai4B&io-R=9n1L^OQdYrkU>95kS%-Wx9VCNxZ2*I>gR)$|P=B4E4Ao#qfwC4T50kX>l`J%_CsLq$;E|%y~+yTYFCVP8& zdY!~#0y!t*bJ`k|Lh3Kr0&m@kUo*E&^L>byp6d`M2#%(Rf!7%FL7z*J^T|DnA8@Uq zh2d(6IULwV@cK1u^mc9WW(7gX3IDD!fh;h+tPb6tN+s}9?X;9)5@_EJ$D9-y9zov; zC=8#;41`0%(S%VbT}!FsUze!D_%nsaKkoD)g%>QB;ChR9SUDpc-@p$Bd*Ns&Z9RUC<9oa zfnEu6hn^mMF|mz6wMb|ThbM8cuT9(O#-pYpr+Ht)#0ocr+hYT8at`t%^Ha~S&edCec$pT zL)|cQajrmDlPN&vLsk7bb4=nutt6bJ>mQQzPC<%e^-G9-8zi5FN#|GjOB)dW2Hbit z4?aUNWg!e?Gci#588|@i^>iu#(`&5xPQ$YQB=$J6F|Ivh>^~rn)d`HE3OAq*2S{Pvedc=A+73wgq;3<3q>|dA#4idEDQc?iy^wIHvoCd>n zcy0jo!m3dR9|Hko=p6~Jbvc4i75nuO+Yx1myZRoH1dG{aYGWzz!P0#Cm|UUPhJFQm z=6e{3LkU)Dp{5Q#F^7m(`U8t)_cB}3R(wpASV_S9s*VKGQw9XcM*y3QFaTi=w1iS~GpVC*^Ez?buPD{$w4YZ*$T-aB52>fWJ=sBry{8mh=p}Ai$YJ<< z6D4USiqR2*{Fr`Irdzk7@mfd zFuWGBjF-tSDO+%*=oB+_VG-!s2A*x`6{AoXcr6W3V%l{9i0B%@wSkC;m3<5gkZ40- z^8!%;IT%=qm4b&%QRZGFC!-vJs#J&sJIzpUD3BC^+^pi+U-%y5HC3DCg6W~Q1p{p# z4SJR%mK;!AanbcZ6%&n)mI#nV5NjM3NAP@8zX(l7-6MG3o@B(mXkz;Nuskim5%g_+ zE=*eQG4beF=g<%bY>xza&~Q?qVw*}7fk5vmOu{C`VCz~(7JguOIzB;;s{u#qpWzOP zt0gyIZh3h}ie&~&anUvbF(5)6nmz-tM!71`?ILRTUoRX{Kpb~OdNh5ccDhG#UB=Kw zMcV3sC`t0`Q{2UBp8HH*2ud6o1si&V( zf2CMib>jPZ6V~)&-JuL!O>>Mv_JsK|b82Tj`htHWW=y=%2uD{Hz~jiMwwBJH=lR8j+w0gMGfCeC)zB<0gI%ts`Qg(xh{YGj= z-8f0L-%6}LYe+w*7uYG}zzRcK9hec|kn5Ybln<~f|v!L|VnQGd{HQyTzR%-z8wV|5`TwrAdI|& zae@?r>B@n#$X1A1Mh<&52FG#7iJRfff|jpoF$;CGn;xyztVcDpt1yrG0EUMpO{kAL z{dB((bkiKPzDwp@m>JK3Y$siq8Lz?YUtxIqSO2RL1a(&nWN+l_NrD0Ro@4uQ{GKT7 zKM~~s>X?nFI0r%oJI4Z^+a8P;lqaLM{%;O2_M+B;Jch(H(i>p97U22@2W09JJcS{@ z&1V(wP1TbdK+#HU1BSz!^wqQRU{1~n^)q^4fo#8kCYf9VMMv1`+B#rq5La7*j$Hz= zH$~N2T@AUf{kTl?`5eb5KP9@(@Cff)H|LO7xE<)?k74h&(SuJQ!q_u&)`Q(IpYEq( zkAkhFJb#9qW*nzui@Wns_T|I^;?+&-Wbo%44!y9u7srj^N3I?g{d3cv1Cv zpz9tf1JZf;Yb3+d-y@p4qLJF3i1MKl2nqo}-p`*{6>~++-H_XO&duk~njh7b8O)wE zw`=q$if{M4n!j8J!PCMGV8^96l<~xZJhnf@)*k#?`-7Mx4{Ez7#35fFNuczlp}%qL z$3{2=iArW2C(-X;osl2`hQBdNxYi2sJ^LQCg^MLR`CglK;I?0^wHjq%y?jfhN#LFa z!cBKH;pZcs##7SLl}}%rXAR)%Ye#bv>M*{UyE0JaV*GB1yf2?r{3m_8#zuAHfN114 z3hPdta${`^p=r9MKqT%ElH%s%9MCLFI{Nm2qnt8bm2t(;^%?Tc%&AyueeCGHy-SpMX=#gHFu%So7@0@f$0%dEjpcI|5>bTPD*_nF z0pOj7j4KXp5&_*3;!n@0A6U}KLH^G7Zv+~n*Y%)5g;rz((B8y)iW z;ef^)xsr6_ZX5rp>*!|`F1VO4BS;?7$>~Cgkc5f083=p{pZFCp`P(i3fzST;sZ8j%c zfg-@1!pJ)~Q$_J(Tu_7RIOJIJSVqofvt1@__Nee-_d}+DjZQG;t)GlepfvIjcpK{& zgW*+CLq@j3(A~%0YUH?%Y&u+Zn6rr~Ua0lZgwSp(zOX3>n7X|NYP7&Z@kTsgQ!u+x zk(Gd*TIA`G>r9+-y{%Q=WEt|I`3}of_sX#2Z=H-!(Ll{to($f4AR&PC*NZ!Sm65C; zb$2UPk_C~#758RqrY*QxKcPjnWneM5xf;Qi7aKZ7DjcKmV{ z8!qF0j~|dNL2Er%33DySd?8Hun-aeFy*~6XZ4Mw)&)g))aG|SZ+iA9u;acIjy^)-j50Y6w<>hSRh)euhmganqOAX#RmDft*!Zx|sT-5X+ zO%NL13((4kivCZ(pNO_Z6Hzi<$@^yIbltf6@jiSsRPXz0HZYBUO)+aLz2lc-sDdRv zUdtysoBK%xJ=TkzNxARWH*)&K4lMTkN+yN+8aIn$2e``^xt(PLFY3 zn=!4}j)oScYMD{5?BHssKLkWTDoZK=wsHasVq)WP4W(qS1KCGUOb>6%#9Mb2x~OWa zZsGQ%(CEryiRnT7h1kI83o9%$B8`A)$=agzUpKh_cms0VT~!-1^htz21>C`8r{V`|+0&=B(VjF@tX}ZlkHv&s?!raUr$ZDVwv`PL z3oJ4>CIURa${e2|n&}?e;-$-lc{SLt1_WB%`+@uIde6%4W1%CNv#z^)%Chj0DztvFPIbqndQ-?3#{`@la{= zJ~W93Ut0PWS*imctm^ThFWHZmp3n+91r^v|#ZXLjA7ro*BhUp2B$L>s?>iw@Cj$p| zIC;&$IH1aMUHtW>=vBQa4(98XpSP^u>6+()8?#z$OIiW!$!@K%99eB-l;U?Ag13+{BVY(2<~pyOb^mr>&jt)U6)1L7|Gj=oo<)(9#D>{nQ0XKt%8`sI z!oABJ?cfpK_aiP^MY+h;!Q*zs7X`DegQm!pg@$u|!$(^_D-@K1+w3XZ@6=EXpWmIM z-6$Fcx4p^0=QHUCeAjRS;VBQap`HDxJ}Vh>vWnRNhIkN)03+@+|Ji%>s0#jwv8yO; zGvPP#^aU00b7(gGv+0YHYA^|BVDk>}tZnIT%T>?x+|BBBMfSs@tc*>F)yVc@WC^CC zx_JmYedblArd|sFzbbW_E|$xxqN*jlR)&10wac%&ay3ZG!?()Hai+Y z*C6uGpUh(1X)E*{-QRlXf77!6@1zO*-@E=_i4Xr1Yl8CSh)VgFYH|EK=>ETr{|jv* z#N9gg@{8WqY(F!bf-a2myd-oE&zXlA`M0f-=cE6j*4dvHLTAoo%9_czPLYz8eDW3va4P zFD=W_;d6QZ0)f+?q$=b`q=j1D>MZH(#I&m?sZ(%#7ow;>uRlVpL_pNb*C%SO{Z3fV zA(*q*GpfBdq5I34-b!X z(wmzKF>)GRMInu#U7%Q@yaM(cOuuj%`oqLX1iH2%@tH= z-f|0rK^;-_D6muI##*KBFi-GFlu0}mNvTR>N#AffHo*i&VLsq9VBUT=VC+x?52ixz z#ncgnjdb`F8un%Gf~Y&^0>R-#NaTNwC&?%tucF8y$aA-i;{Lpa6p*e(UG`{!Uk4c+ zi&!KxNo}q*A4K?^JE;F8Q8Ue^z*=LE?(ZR*CW;9`V=ss9uWZmj#owCjCcZC=up;*A zb2_ZoE1L>nR4Y*hRq)s+yjIX=43o!&fd3h;8V>R*GV~Glnqbqd^^E*N2K!7yUi=C& z$w-xKi$&W)6H=!(rw+?u1~LVykt1ip`g9kq*6vOF@n`jAo&%}Z699N1v=Tk5F_b@{I*AZPPa~lBai0w}C!$e9t};wAM&c}TOsNXl|N&%_wuQ%K0gTs$z zwmoqswylYciEZ1qZQGmg+ud_^&)GlwqfdAL=&Fl8b?e@$=PBmX$}YXqE)_GY_NX@# zK_vL-#^k8embe&5aAd?wLjPe3zcYZGGEHwrST-7JN6#0-8%U(02P$Q!W`R&eRewcd zkqDOE$}dG7XDK_5FPv`YdM5O7PismcXa(#A2i6Vx5k zH_4-Bdu9@-aR-*pjOBcl6HY6vmob>K|4SOxyNRG$4KRiAS>S1h0)eFR790z`{wU-9M48zhMeVSP-TNGQUjI49{U)3^uBjxIpxwIFZ!~htGTIwL!A1VkkNXN zFy#6rB|~`Zbr(S}P1uxCQbBuYlqd=jHk=&6*2tP(ch*TJ|JvgCGhS2gCV^YpnhnZH zL_MfSl>c_26TVEPCmTA>?|gCi5GF;o7N%5$_MT&HF^upgxLElB$?gKr9oJZwBImQs zfwIW@F8(q9Q41+xmdAeqdUfz{>3*$nsTfjF`llH<3hek%I;qzJf+k(dGLQx(r%OV= zc>5_eV73PGj5>-zRY;Rgn8i!w$gWJpMY8~kxI=2S3L!Il-m63GTt@b(DIW=Az?scO zs45?vVJ_HfUscuqb*dBG@o+N1k7F*QTKL!p%*xi@RC|m7o`+ip#v5;*DPtG^SS-5B zwdU-lAlMIsBuo) z6Z$&C6i$>jtt%4^C?MeDwv7RVfx8X2b7d|{#ws5dW@QlGyYiw=GQvR z4jY%>ku71x*0vr6ovMWNt@#`s(%}E@qU|Q`Hr`kCX1($!gO<6dH&3U~Ji5BG_n@yT zoQ$LmBSGm}}nc(_=J*r#4a4an9qS&{$*ivulqbhF1Q@IAT zY0{OoU0X#c?Ox$sByhZ;=_2zrnpegO&1WtyZlWL+2QKQ^g!NE4RBn)j({}yvJIi0# z!i{r|jzhMC*VS(rWV4f^tN8VcrWIGF`1CVJIc% zaauZ5FE}DT^uT;pgw}Ty>%Y0L5)ybl#nWl=ArFPX3R}jUP+aYd3b-~vkR@=igZYzp zPnCIIYo6uE#djJXRNeGg|H(Mjg(#Mjo2weYPxjI?mie@7o!xXGHq{mSPPcE+CSOm= z1Va@=?fo>mmoa!}RVY@X9Ab@W;J_h7?3G{pm))1+&Pb2h><)(B;#?K}(lQUv432orS5!ahlKAq?dt%pDvW(SS(d=PP$@^bVRtQgWvB zb!tLU-eU7o#$kpqukI#|Ser1L*}S4-O&3k_u*pr3v{qs!FIm4*mihOVQboN9hn1r9 z+jXxvBI>ps+)2KUJr0JSY4gg<_D5X(XBkSl1P@keY7!wlIFEkgV#RZMX^Vu#aql9ZZm9dL z{0_3P)!SOGlThO&PkIytgOX43Qs}_rsK0^6Kp?JD86SO*!mA3g*&`T86Lu&dHoRjz z!}mVc=A8JmRzE0xhFO7%#HJqMDm9X4Gb)0%hhl-NhtFE&PWxOjjv)%-UJ{}^bCRuq2Lm!UN-Cgt5y=McX+Cs#R7 zWl9okFT(jNvdg^ER(>P3*US6IOkrd$l4YQV%wZ7Y)pubP8S6T(K<>X){oIcxoQCUd zEl*0Gt{ubbrYXyl#Wts>sVwaU!xW3k`nxy1T2`pe4L|$T0y(N5oN#rV!>{@Lyl7d? zl=ZYpdpXD;#8?Yc;WK;FrRmLXqp<@$-t)U^ks;J^F-w-ImnO^#Z^%Q^&65LgOrcHxC^G;ak2RpiM1kpv*<4_T zTV~G|Bg@_5$8rok19ptyaNfRe%&mhSDvK_m?j`5nxzi3CcM8lMHSc+f%ZL83(yvH% zagLn~KKbFvjv%AyoZ7s9Wm%KSV7MpIE253eE^Ph)+lIZ{9qPpK&}K1Y2QPOsv+A$fX??Hlsu$C0ubBswi8=%0MftA4K$kbiM^a0G_ zE+kWw`ZCB8{TW4J6`JU&B;rRg;(wDjbH7^O8_}{9oW~JbZsG*6N0Bo$Lcf!}Z|_FX zuzi=|cu-K)S?efBR%=x`T8D#u5XhF%!8TiZNzvz(@n)StU4Adb7kIAzbrG?pkZ zT{S71GG5H4MgL%yg=H-x-9e!d!@)Me0Ky4HMg4Tk&ZmE?@g=Gh z`#||s&YF!>2X5{zs!?$X?LH1rm8Hl4JEYpW7-Hne{2sa{;+fAl3IgAkGO zGXrLYpdF*zAj*;QOEC-qLaTXy+%*VFr{L9bw&PLNpbNK${$j2wcuJL~cs{LVy6Nw! zdoGNJxa<~iE8hP`v5abb1-+;^A6?VC)4=8O9&xBqt*X4V^oR7QEA zmoY*t1n zR|%Vd_$8(ePqfmmA5srA`&6g1Q^ZH{wnL89*@@TOq?psoA>y{^xfouO1s;S>82|Br z!CizCu>Q^JCr9hu>Ti6TAKX&|<*e3e>?!>ua07IvV?4giFey^07z?C|ARl|K9!Gwx zvV@2JI*B?gbn>W(04As$n$ZgxGo2or_h#42{e0WsT1H9`Y!HuIvB%`W*2_lm+dB}t zbV7RkVE*&d_un?!co|qt{RM^g&G@AmSnu0&P2$de(0NrUpVtt)4?;js7RtDA600BB*Gf*ssT2NIs{~dHWu4tRoyG0uo#fT7;bY17HlX;G91GMWHmVRCc+ZE zo^scK(%@9$0H)Iivbz>z;{l(K{YE=1_x8n+3n`<_ch5xnwR^R4*U#OfU!j+enVGN) zT2AHjy`gu@?Z+Sh^TJds68%Mppw8sYjX)XCRSK#$zNJ9X)0YC=kvKslNs1-n{#OZK z_5}AzRL9@AzbJ_0#i7X(SvZ1u?c;&wcLJI8;EOP&)Z&AslkgqB=GC!_$+pUk#gGT5 z?G$_s?^5KH$sV}!nkdsEVUd9`_mDN?)=~C3_bmB>ulpQ0a&)?v#vCTw!=;rRSFD}G z3VbbpLHqwjYJ#GrOT?Z2YgV2<7R=%lluih%EQ07S+M#mSAJivJk?rf$U14DTM3NQ$ z^;*yPqzn^!i$$ZR%UZ$&>XR^n)|(q82gLhH6&$d&+ka7$qaP{T`6!D_osf3Aw_2~~ z18NElc!d0X=D10{w?*FcW<1tZc(SO4%4ZY?HXPNLAL_%xVg z-|S)U4XwNM#FPlA^ae~xkqOKBsY3LjS9Izz!@Y5nvfGL4q`_oXIQKM^Q&zsrOo`+7cfRY62HXMm905VsOuH*<_Rs@zQ0wcB4Mp8j5*$x^ov!a<~1dI9U(K{F2RdCd8b3 z9GOiQq9>XwxGc%8Yo{+9SUqR%#rD>e!yg&gxfo|3@%6?sEn5#{m5SL&18KV>cj+)U z0chi|^(%?Ls!C7|KkSDnv_)@mqv}N45*-yQ7G5jUbErE#$2XCReSPz^#GB#4~ zd_)qHR%`J2nP3>+2B;J79A(&CTq3GEd!Wzj?{LcwktfD6|LFMsQ*X|#Z~qGuZYEr! z|0};cJk8f%+xpzw64IdV^PcijlnhisQFzB^Aw!NLs3sGqdQeaD0ELfY-GW3iI8v;Z z`DjN$3kh@%#_Ha&*k${h>5L=wJii6n+ka7rAvS{n>(M)FPb{|O7nXpDaR|NH4>LP3 zJz#1Y58b;l0#BC&RA}aA4N#pCv~ksl`8tuZ#qX?qgqZR@?`E>o#mXUKet-T1icY9b zS`^pV3%iI*y@QG}hlcClENS~XOo^$2yaTs3KfnGM&sKP*(?5Z6Z5Vx;_I8h5Cnsoz zyy+2);a5mD1Q%mU5ZuJx$*_I_1ETDP%2$s;4^I9t)TD3T)0s+SLE{*lbz?0JtTSGW z4J*J~-YVu`c_J)taDW%${>Z8MQ_~KcGXO7hbxLonVj8* zQLEh8Aae@?o|H&|=So6=$c^-#k~Nu6FT*3djWS75T}e!y(&K>xdY5nl#%!3n6jF+Q zP)!s^m(_3OJIg`ad!i5gnd*BC%#GX0pF+r8pbfA%Pl0QhWJ)eS70hePKZLLYHE^Uq z^N{&q7i6O-2Qi=2eQ?P76}yF!j!P0n~4{2jr8;e$}(ny9}%=Wg$jA_{Qf@(-Ug z^2AMqj>s8-PztjH)C@vI`+j(KiA2_e2rS|t6}52ff>Gvu&XbQxW{0k+JFAHwJk{^D zCvG(JcFDfH?(tj~1S#lj)SaRpRog}*NeH00yQlYda;}***r^BGz!0KFcX-9LR9;2{yH4%xqbUy4B6g{ViD@TuH zbAH{R6*Zval65U^;-!3whD}+xSUGb~K4-Q>$32U@KZlz{dJd8emDzF>x$lCJ@~Th% zV_lSZ886gIX|k-*e{xMJ%Qe6%U`ZlVWAHAN>KDVZ!fu|wFMjy*|R)T zodp%1YBm4Tu3Z%~&H+frjLP#74d)aLIJ}TPcG%VRFNiJnjk-mqM{RhYA3av-#92D; z-4{<9#i#b-CpE0Rdpl7+^3I+V1VcGm%&B{Z=M17pi{5HjG-CgJ;{3-=8u-IT6;@l9 z)yXOB%dJZ);?oQR4$2Z~5RJNp{!I(IPuynjx*moc$Q&LWU>zRS!zVZRt@w8l>y=p0 z?=l=GA9{5DOHIBTDwA*gv*o3U`p72g_$wlT2!k z3``8HF4Mav{Cty!JC&|2FsrE7)*7vA>dKq9{o<0dT@LGa7ff7RTZBm-WyIClWfDD9 z@^@ZK{_2}P8WkR?7FyLQ9!}n2Hu|rcr34h$Vl}i^lKCRi*eCWqR+2%f@PpD`o)zci zlcD2ZbbADu+Qkrm_Z*9851E!C!F5smmqhWQn+QBo@Y#Ow@!N&Gzrxf1 z2gKNbK5ORx0WpsKmKXb9i1E>{-RAG`H|76=7-vE%D~n+a%}_q-8reY)1}loDEu(Vx z>l%s@<>}{Y9_JDI`_ui3BEv@gBUbQaNP&)&h$+SQCuR5Ja5BA#*6WFmHsUhtjz6OI zE%kOy%k(l`ML~ft5%ECyMgBjx{8>K0zY{1cj1`Pi7yfrhn zzTkS;Og@=oZnDYBY9Vu3<<}yR8(W8AVQ%u9>+9-1?BPq5{p7vaL>Ekx4P5HB+F`p{ zy|-Im!xr}54D`WS^R-dvEzn2IK#Sz<|FT1Kpfkn72}#>{cw%d7BMLj_MGj5ekz>2D z6{sA_-&+~`+{m^`t|1y??c*P!-QdSCNxS?iB@NRJxgxq6u-a}QHwD|jT`C@ZYrAS` zjAf5&G{6~Hi}a#|O1)KxUOdzXS_L=+E2OOf^11PW!4{Vmzbq~Z760Mz9bs;`jFIyn zVHUL>U~js-u@WwzT7U5Z>aJ`c^VjyBn>N5kGj&0$f|mNN_O`ma2EJq#A>zz&B($RD zc%;oENllXws4Em-cwy2!;mqNcHt^tQ*Q>C8qxMlP;88H8Qw{+r5~ZC4|AqoygZ%X= z<)3xiA#}$AK}%xcI7)sGPpy>Oz#Pkfq>EUNs zKb|C8?tTZnJW({rf38wg+MNYN&hbKE{6rWH0dt6Uv)0czEfv$}4C=lP;Mu)wJ>Okd zDg+T9pNJCIOSyPGHs1^hxc}QP{n2m4YvQRqDvX=)iB-lOE4WUFzU3)ouT6j-gzUNq zokc4O1{LI$=S4y|qfS+|)#gAOj!klqPgy4H&E9@tD+O^`xJ-DskF!68Mc8Sly*T{z zMHUTh=a;xxq8~esZ(a*O#}nW0zvo$b8UYeIwf*dyj+0>Q(DXPk^eat5t1O}sYj$0G zfL1mRYasfHzl0!;`>i2f$`ng8&0~y z!S$nNco>|*loPeB#T;eW>n{A`#fR~g_%uLjQ=)jAn0qM)-r0kC75JN)Piy=`+UYqd z2V3ddP<08NWE8>?bRtpui(sh?)8qJ}U8BzxS_DnA^DD;f$x|G-ELwMj+atJGOmPj4 zM)IEcMkt;B2R<0B&CXPcjs`O#b`?U2tGY4##N*x11i^70pLGT+#5JnNxJ zik)pa@=e+QH10p>%YjoZ5%lPn_?NSgcz9`n_*4CLEZe6N?xusaS0a=)- zYF0bU)I&0L)05BbmuoPunRg+|REzX%R54ND&JiIm;#`Y5rTkb&J8OE-RGV%<*Lqw_vdS>^^b;f7hU%Tr zXA&^eK>S1-pjA2jvu6kMZ~8y*L&+U&48Ng;0KKD9)_`|T(0)1&)3dJ&xYn9RJ`ORM zZz^y+g8(ghBT?`@>o|F6`GKdXN$|f3-fC+8i{NJxFbxq?bL&s>j*y1*+2I(zR6xa? z&KeN54&!38Q%LVmRVM#aPlp&SHwB!0Nnf-QJM|pbIdCT@8M|9P{ycOqQ5D#H6JwU#Q#<% z6M$L&sjc7M3Bx+IcHYNH_f(&SnDIc*eS+lnI|4Q%37`_)c>`>)^%u5{`EcAvl6NFW zsF*^Qh}cO2P`Pa_vxh9Yr?WWOl(es7+IihGRI%>B?jG(|Y+#u!o8C^wMG>BZ_v=*3LJ>?=>&LEAL-+%uqt_qnw5Gy;s zo-;|V0h0can@N*^I5=ICc1ynl3h5PgFFW}NF7>$R|Ebnl=G(D}@32E<25I3l@$udN ziB%A@W{gcj%0aD5yX)pMx%Tvc8O=aICQeehsUD}E{gpEjYA#Q$O~P#;DV1B z6HstPCFvbA)zepg6q}w7tI@J@eN^Z6zjf5si!FAx@bf?rRec6$tmCdyoZ~zyBtJr( zuTf+uwOO_4FA~s`b1Y4oSOh(fTPd%$+RSQX*ER^uUD^62Fwpl5WzceMyKeFaYdkfo zX~Nb&e_maap8dFheT04s_DXC5->sM)#Fosa z>Ft`0;KBZ~Z%fLA>?$U75bk&VK%u8y@F8H3U2XRxiSYVNhzog4*GY@F61D<|i$m5W zbXlQQq4{(wM23vdlRGDqD6t;}SDn8+9}r@eEy=Q;Vp4!oB3Mae-k zujZy{z_8$@vE5pmzX` zq?sY}1>OgVE^h=wd$O%YDv-d!-qV5jmH$l=VD#Mum^yLELrf{X1w;+oo)(PD!PK|Y zOP2CNI#1f=Gc>@%}HI zuTA^gv>pp95sG!Gxu1K=h#b$fvWbmGYd2}(^`p^_(i`g46BX=x_t>y5M(uCdS^EaW zT;p26l(!r2-DJ{bLF8{%R2dx(g{zSJzeC?XVBU_HD z`Kf}Fw0l7{?==ES*pAAwf8eYj(2*@&eq$5kd37eo_o8%Z3sLOz73d|GPZT9^%XdUl zqq%a=>&Zi0Q7dsCMA$y!EvJ^?^Pz`H+wsM{kw)2E&q%otAvD_c^gd=ae@aCuz^P7S ze4pYBU?$`ha9>F|U1r^)Bw9(~`H6e;+Wx~M=>wr?V?&7Obtf7zQ+|Aw@p4;FDa%7f zUr1o)pN8pWUTjW;6R8C^$e0#^bzQG5ni0Fp95@6dCn*YqrNq_Xa_3TL&cRmX#PuI4 z(zp1h=!cyn=)7g(OK0kHFKkf?W-$m@lCoMT#+1;pwa+g3=9^2sSD$5k>oQ_B?CX`~ z=@ONyh9%icnJe=oQw0S_niQ`Ox0yeACptcYJ$3ECGzU8zp66$2R*4_bvIc4?OZe6# zjVigoUGyK0A$s?K1YX#QIPiGsQc0XITi0%X$_22{qO zm)-CihW`sj`z+AbT6t6x)5C3rVc37)0qM2XVP1P7H3QvVFb>$u0eNQ5_@?M&4+FDt z_8VpX4%kHu!b(1Y5uB}qFSAEzER@F)I>5h0kG0|?Iank;2ge`eXrQicnszB?1ntdV z$_%p>?S+|sS!@s3$=F+uL2&h&UR7>_j|w0yMKvrsrI|oo#QyfgjTL;2pDhb-0mFyc z9kK7^9kc#Q@?mzDz7PC=&|nFfkB+^@QQB+U+@e{Eq^*)c|jZ0{ zb>HcgCUrP}W1$Ft9DQPfE-<%VdRl89s=}!{Mp9qXnyiC#2XVNU6VrrOS1p^J{}Ijf zi((#Ij%7KJB{ava={9^@jf|SjGk?un{Y6E8Gk0l24yc%7E6@4IyWWBD{!OFE=0$aV z-OKmJ&nGsNBQ)zqobgtQl`imBuwc?F!aMj2y0o1|X6|39lZE!ybJ1H=I0TeynVxai z%kK70kQc^QO%;@HEbxM5(Sn-pj6L6)BPDUv@eOZ*Oa0N#!gKC|0D+Ld1vK!AY3lt) zmQT;OE~f4p#(zk@@4t&pY=N0~?1-9?=L>P5C8R$Gfyy6RM?0C3b}js+l)j8f12V%5 zc=);;=<)NMNf-iNeaXC5+%jd5yi(#IzRFz>OlOv!YkO=Utn3?C2|U2wr3|;MavtPdsL%`qIp$oH9}E|g}f*WErGx9eBv zcDFCh8kfEA$^$RowYRn}l-v@?XoEJcfUT0cuo^u{S^| zp2%mu#N0sx%St?ZTIyk1)1ml7o_n6>Chs|SKYs-I9vQiy4lxwtM0K>!5 z;It+UhCSse*IO_smMAd-J*eMW<_`TkJ8Zn>Z0+yz4u99{o~pKoke)oR%`>+5Q`=!T zVeHLfHu(cIsM5QUB0BfMj&xxhIWg~Y z)~KQ6sueb)S0Uiz|j66&UacRl}Ao>s_?+({2CW0-(OG zrt92#nwIo~9ck%cSfA350>t)wIj!40Qz2@8pbH!s_Z;F-2wo*R^SL?6Y4x4>pnwgT zEg$h;1_^h?76#EOxC09CjPG(vJJYbiOME0OctAr-!W6>Kwr-b4F|%usvrIf6USJLT>^%O#Z#Dgr5*x=F{8o#<&HGGhmFQnmr0 zwttc>IEVJ@1&%-7v}upb$CoLwa#Rn~8b%!Z6eP0JN856&C-Rk&S}8m8f>dn=4tN=f zMkCDOrAgD=*#PeZnF$>^=bKgaIpfsMkeDB)enXpV#@2~$X1|iy**)B7tU%`&U59Sz zEqI@9si8@e2%&yJ?1){7_O++NGcuqzAbUq62Kv@3Z9g4b|4po?@2r81WS@BWHou_e zxZow7iv)M%GkLF(zQ1Yy4S_-@5)K#9Ow9@M&#RK|F+!@xR)=X4mzyUxlz0opBbKy8 z)(VhoMkNAr=vB9j&{eC--j2PMu57*abekTw1$Xoe3l09N(VKPz5XF^=6LzHj(>rEP z#ppsN?{^dI5)or;KcSwp;Wf(V;j7QI;z0X*%$V;pp$If|_s$IV;%dy!K#%nUoNT$! z-QmFAZ0RXxI<_pxnfZXF)2vbPaOFw~@Q)`0>mi)_QvC6SoTNNL?I#^BzexqWyRtNC zv_b#n=Sg57OLcHR&?KSLoyH!aqgK9T4MijlRZOU}R*I8hB&jr)V8*({_x6FZ@)HSw z#me?8zFq_dH-W9Mdj7$K<80m#NKP^IgK0`E`WIMk+f z*&K*!yHjJKa;T}dTzdps1)Ej^UL!m9-V*T{$*z5a@&LU7$jtma3bNiQc*Zd6#Py2&d$yp zAf&9Z^e{ONCpbiR6FyF7f?OTJY6P3JW)_=D;sniS`W3OyU(m?9dkaHNvt3U{-a81~ zmm52dJzGgd<4s=yGY+j}VMsgLd#<5a1nRzG>kav|;+O&v zASXqymJh>@V?905x+d_`Ia=Sy)C~S{I8EVwaF(g6kt+T9RnIihz#t>5{KsB@B%f60 z9vsskw8e9If+A;kn7sojHU>jpx4}#B;?xVqkar%6UW`MLyu~9bNp0_pyuXI;rH3dL z;_KkLBX0)Y>%UTQ&g9-ie{|)>j!U?RBoP+%1E|yYZIJ9gFqgI8!4Jv6yW5SKbl_-( z()BkBd9XyeLIJhn>mtBYEifMC85dlUfo6t!0j~sH!9RWXHmTBVix-M|vj9yr$Og<= zSeBY1?9GHZJ`*(M!gr;wxLJs+VzdUYSaO(NmYn9e4ZeKs(He>lqWZ}L=m83unt(Ksq9YxB za-iDNIPo-((ZI=huh1-46Q!J>^ic&TxK@BfD5(07tsjsmIuBk^HsUU9sC4$9r@Q8RBU04Wec8$@%v@kS0?D-6|R8=h%F?EorNc#5gU{zAX`tf12Rl16yFg+lwXM3vfj(4aW*#&` zkZ2iP#8^f*#!aTsTF9~e2}Y_-3Vs36p1ue{5kTIh6w5MK*@E;3G{=+BZg%@FbGbm7 zS`~CF(+02Tm|l>6yy#%1x{E>PAdQpi|&H%fsa^lrH$OaYLc9=8xka~Gg*K@g-4 zIyj{_4RBb3kq1i3+xMI_SS%&9xl;QAHX=7-%$ylFqPSBC<)%t#v6 zP^KEEZ$m*z!SG?^S%JsIK*~4(DG?7^j!4LQCp5ye(bM?XsjF3fgyW`ig#~Z!B~3O? z*;+AK7W~}ibNxnD{+#F7hm@<>=5;Vo@KOJMNvKFv-^m;qj@u9xR<0`KDrVL12H8qh z%m(Icd6x%Ij1IVmn(>;g4FW2+;%`#TAkBLO{UJve@L8OKLYL3X8BlxRq$+)Mt`DFN zJ!$8S1ARw3g@+{p(HE~qg@beP^}~>lW@IFl3lPexA>p;)Qvx#TTa8+<7(zmO_Nrpt$dO#I6 z_at$d5x=n=5`oXTT)C->`qkZ1xz-};sIjirX&+yiOd| zz)z55j73M7oBUVK{%j@lEc8H|ZM4p~(QrWD7~A2`>o9%*dtAD{fiYomiHveY9;e2T z^`S^DtuE%3JaSpUZ|QYtt*R_Qae+=XhXc++e1RSZnH`3O#cfpv{clYd3rGqO_|eZ% zyXu!gs%r^OxJETsg%zDQI=LmzmEv>sk;|)%Y+T#RAkLwVT2}JZ)LreLr}HI#)8}RO z?jhll6rWRF^t%P(ns7&kH@=4`ms5pjhTJFO*@JTwrohn$HgSYR#2jojRb8hC=i$Sn-B z{Lgr}D9ZH*-5D?)lluh<%kM&mc!Fk~h})mMWSbd|!ReBz52;fBA;P)lsha8c|1SOS zHxNwG*LQ_d?2Bl(G{Ns*ka?{;ON9+%pO9`BA^iW9g-@xa$A~#13 zj3`uC1e|sIxMQi~(cJ=%fG(ZmKq8LgN)Z6GF9m_X5mW{Rx;PpmMw2)t$nm>j&$WI| zWrBL!N(ldar>>0jYWZv# z{yQUx(=gwLA8rrV00`ow0GE@uEn#1<2)VXC;7n?&t7F+2X*qPG4E*0LYCbs2p*KSOK?bliY(I zS}Xne|LAFBj&wu;EupjzT_e6eCg*fG(V6j+}U6rtaB zD4-8bJW;er0}5))Ov5QY#^J`kr2QW)LF4vvUd00 z!L{w)C4EGepArVb>;P*~z!1ShQ@2k74toqa(CLs!smA2i-kC9oq3AkE1#Ljpo!KtYODp}`^Y(m(-Q2LaUEjo&MO zbc7)=zv%&?DJ{B=;oaAp58s?}=o1?pU*i@1tqegizf}fWsfNGLF!KlA{^k zj!;!(L#p6pz*wJ|)@l!2j=7J=asq8qpt<`kkQDIUjo#l7vDr|B$UMf;uX$%&me85! zT~B>2Mvm&)6Ba5zICcceoiCDrPPT+ z?Q*$XU(FyEpG+%fo62JM$yYwry9i;@s;ZBo%SgCr(za7|?=(b0s&&;KWjrAB6l83* zAtSN?QyEwv3CJ-QqO@?^A^{I;6(I9qGDix!{LgJ2jgTNvQ%f=W zu^%xZ``}1=F#ZXenpo7}l=C5geaR-0z~tOhq$n|8LpR?*H56ijW-3i6LaOcWnQ!gH zE7COpkkvMa7>}Jojyr0}%rq2KmWc*L-+MD~f=w2-Ft0mVDduZ@(3_*TRc0T{VALya z@b6GJ@Bnu=ur&SS8!4*2v4Fjr_;h~PXb|RqrIP}o5I|VfaS5ruorNLBILP7btjQUS zr&fCUulcuXaHskYZ<0ym^fGcooFWxv>f^YhQDx<{viT}M__G6+9PC)z4G zXVjxGDkf6f@K)^QEBIct3U(C%$s^<`nLWFomDWRVkS3q2c6ClZ*Pd?vd{Vcsz$Ts^ z!gc)n$z|V7jUva09!7JjaoD?nFrut!26Ltvlw;Q{s?;S#SqzR7Q~{V#!g=%}k&2+~ zJ&=)xi=HI z^#xjjOQS`{$NgkN_LG&Do0lw5`1OhK5fgFYI9 zl-D2yo9?oR!xXj9O5TSvfOqy>-x{F51qy5*-%M3|MxGs2@a^RCM^gKPHME)}{q6+7??a z$?qng3#vLC!Dzoe=(Lhi^=fJz-VzvJX(!%Hi@!injTU>Gkr0VpQ!!7WWoNp2^M(a5 z<-7-ly9a_o{FFp<+VzDUdMO`CfGU_B1krIR1u8y%(#&Ysa<@qV=uz zNK*%Kh4J=`z~N+&ePW01@}a6b{eRIwmKS@cr%d}og*DS)xGX#MK^3(utsf@P$iLp` zP8%wp=-e-LJ3O4DF4u~Kj$?bi-Q-eRrx^uZz|EP+E9vk+Dx{VB^et477zQx>CXd4Z zJNi&UiYrZvxXH#u+9PV{_IgN%;yuez1DNL-`W4Hx*jrOMlNjv|%MQ8lgU&pel|{(} z&wPYyKFX=uwaGWkXP5Na>_!4cK?4wY>eGiu8~+p8m#1V6MN?uJSRV{Drcfdy(!@s= z0N;_I#KvFGnwHX)En{iph~X0&Y(#9}SyykOjjdF}b_)+E5rwx!KI5KMc(B_TDxc%A zNt(M_l?)5N8$%(~j?w(>$^dWAw1})JQG!DbAs?9eUuz0ZIU`CuCj8Vm{5JnIF>=!E zHVlEQq`B4?i_xE5HR850(^ynRbSdhfWHdHzDIbu#D6HYLijAY{D&y|Q1$L-VF3@S|0(M|pcD6{lBN~4w z!v(J-fBQmz{xi$C2!uVM;y9R&5CQSBo4T`HgJ`J5Uev%Z<`%AL-M=8u z^HH88*@3V$nl?#3_IHD)rH0L{;2B8MhbUBJxwIeDFkVxsZ3CSsOoC;;mk z@INR!r{GM0C<`ZTV$EbRI5NN)fM;Yd_z>2 zmyLgG11*UxLlBC1v#mp`6?gew@T6Zv(l=~c<%kx%Ct&bzVAajeq)62lbX>H_i-1TN z{_~y++q?fgyB-0>*2W%^*}KUs{oHizsi&H3@NB5R=o_i=6;Vc}gcA0)k3MOIc@r)# zkCQ|79kBG>9+RKmw2mD?h*V3nk%vy|q1}AikJkn*=LR}h4WC1lXsFDA%OeN>cPgR8 z2xzWGZZ~trt=3&y%2Z>Ro?omFDyheOSC#7x`3%zyWy=cJlA{q=OuXvf1$z{fv=zgy z;aaG5qTQKrpRQ3EfVM*)+0RelL(nFEA|`LASM+iIKDPO!=k5Xs1X)K55)5}(CS22S zvH%niaS(Us^>KYp;zrDjtDHcwsyzvl3$GLJ*AbVcaZ<3|7@C2LCSxO&OQ%@3qGnN+ zwG9!acgRWsqe9)Zn?w8-^lFaw*^u&5ngH)z*cctiEBjEnF0Vu|Vu_wK)L&Lm3Xq#f z5b!l5C?I9X?)F@vL+rWYRf&NPF}7Vik9=m}jo*%5l{XyU(hmkaC5-l-^9*JA_cV>1 zGVAEeuZq<%MJr{%4}j}AV>LTI#-k5x1%=-5O$Z(h_nTmft$ zK2zxI7frKSotCpB1^x>c;{QVS4Aw=YIKy02dIzneTg96(mlpwD&ShRN)k;Y3*p1$m zLZonVw|z#I>#4y<$lyuLdeJi58voRp$ROlAP&`jkg5TnQaB*(%0dhkdM+q;d@R33Q zkyV1bIV-?btIleyoVk_3mB70pegnIUIG%(a20P6<`qEp15l;R}879-Riw42c zDl;!(t|Y_iN~U<@FkCmO&mp&^)oeDO&OEop8!nl8t~zPZU>J}HwQ>!Di%U)W>%(8= zS-F;%m%*#f-nm*n#txl^I%LpE3aHwLwf-YvJE%C{s6n!9^G_}#X8xGN zoHieF*d1}$>~JD8VV28)ODQRt#~vZ$I#LC6WCa?2&Y*L1VE0F zgN0Pg;nQ}zQG)7V7%|*?Yfr3WNdGBL|Ir!Z+|TqueGA~ROt*#T*Cx#67m`IGt5qdu zOSa}RrZZ1yD?2wkOY&Y4k2uTv9;=}XExNj^Vs+()OfyHlWJN`n$^hho`Bw9F9PWt_ z>a$C3!?gQk*Id3IwG5W;#(A+t5SO~n7Suznoxgwep|H zYw(%uqK^vrUBZwi++E4T(R16Uf=yPEj!PypOfz~cF?nO_xr~pSMxRLtbOKOWVTt3 z&bz|Ju-`8ulm_s!W0$jIG`W-n@E#eiXpiPyHXDxZEvLggUp7sMQ9;UvHL6glEE)Y) z#d~gDR$-S~lnM?kVY0eht-6L$*Hcd38$&CqRTmx5Dh4y8-`|lJJHTAB{|fRwcsM8t zkhh?R&W}#iYcvr`e9!L1T`6dVBj4mSNJN(%PpyP9%(GKtAfutPy9*|glQ#QiRvR?pkW z&5bPs!8LEwpggF_T z+@Z|9PI*0O)i_ZvQX{%x=% zh#05t_=I9E&P8duPS4Tyf-n&o*(0&u;M+=aYj9uZFw|8vY+S?n;3=rO3-847w^eQpOr0KMWg z-;||+P1~Tsucv8F>0E4Mul@Ti&D=fU+1{Ua>iE3mxh65_VVM64!g2&YJ@`7-qm83e?*tfwFdDIGEG(tSq+cM9(wjdI4uaDH_MxMghZ zBGrfPdw%a?d4T5?rZF#lV;Yr@jBMS-1$YHPEL^#_9rOcs zc6l%lT2Eg)sfTkO-E+Ii&{MhWo@X#}2>wOJJfSk?MtYn8N<1SAMjR`?U2N#5BlOju z|3v0wiodCCL$LYrV3}nO@&u-K>8hmb1Ra=Dr8XJ2K^=w2i8E21GR<9No-J0nl1DT2 zu*lJH6T(J?Gs*KP4nL2}b{9o4Rl}ysM5-5^D{k=I-(f~aUm_`wr5i%(u=|uVYGRI( zum_e!*wq|nyRsHe8%`Kz1FIajc)n|Ed0w_0-8|SJ?4%{!q9m$+-v;|$S4S*AwJ4>Z zk_WF6Y@S6>B=aOzSR{*LO)hf%VZxm&<&+XZecX+_t0d`oGNiNJg3 zqtLfdo4cGtftMo!S6%`->ouCC-Q}wUs+8-}2IAs61 zQ-L=o`^OnPq|L_AK7wMkigBVw1MAQUORvtXY8g<2q>w+TTRVXs0@k00ZJd=zm+nr8 zK$vR`omIiv!(w4K`V` z+b+v_s{4ECTS47ypOk@FJ?;g#8DxrhA{r4z{2pjs6_3Mgdr>i27Y4JXv9%L*(t>jC z-lPuB95uv!d-gjdm}x+Kdhv6LFw|tnl>t{nkMhi> zoQEW84}D-q7)@cdc-TtaZTk(>%#6JrRQT{=;9yJjmH>nY0XP#vnX0R9D!ndGdaJaab@43J%I;?AboL7I9JDbL`= zq!yzq)r(-sF3^dSHq{7V?0SyG+NhLlVXkNlgglgWY~(slmr(qbD74&tiPBJG7irvK zLL1#7iPTt%nH-Z8RsQ;uO3cA61+LO<@Wvwh$HfXMPxH^jVH5U$zn^`L1wR^9-+CIqew}ly~4$ zy+qt`wwY{lf~(eKJ;c!cp6QKQ@XU6$ID z(7C@%WSa#Qx2l^OhDELeXD$sF!_XQDUoWc_i^xijWEFAS17yDftMNTB4@OQyzXQ_nsnNy7x^$MA&m-JUQ4wBb=V{;HZ{d(}#oyJ$k(u zqZ#S@{L2TRmM6^mH!=R~Z%B64$ITPeXLlD4A+bHnGhm5JlBKunyKOI?z!|-g*;WA(7UAq7Xq51*|vLs*+lBHP2OjCy&F|6;; z;8=ckB|tzP$3_kmC4zu=pY-RPXx$x6>)Snaf5*9|>|BZmymavO?mufvZ#`ujSC1{= zu2Lch>N&S<6%8XH=;B0bve;!dtw66v)j-HEbmEc+!2SvsJ#*L9-hr=eh0;2ebjt8t z%R&5c6u|e9^`fjaQpzk8q5|8}FO>al4Z`(YJGo|AI^!aed|FAEWOdArJC8$?KHJ!m zvsctJ)@rGvz0-YMjZBz|!qt7BnemE48C^Ves1myxI)^KE!k0+r9<$}k`g(vgm=_p+ z;CLxA#~g(Jua(Hq*vSqX919sOSeQ<>T3+Wue$zgX5pEaqNq9Cc4COJ%bf47!&V;dW z(HSj8JAK!+)--}ArqM^?fcln@g`U;@C$f8nQeSIPcBhPk*~J-uu)+~(^&|P8zEp_i zJC*yqiSx|HFZ#E-*RsRo!=+SCHELU8@{YEV?OY{brFBcUJt`4*p(DqBK14QbtGkEs z@P$ov3hCqT!*i@nVxV=MV#PCj_H%fa47D?ILWtaLo|ojrXdz-lh5(4@sd2g8S4-;1 zuM_uKh0DSc=p^(qDO~`ICw}-(fZ4PyK{Y_0(3XXGRyi_X`sEsYWbwGb$*gY>gG@`)MQTCEIqREWm2kgI6 zB96Y>(3qf))@;uZ^+wZc-4dQ>_uhl(&>uonOgSCSF!!^K9og0|Dp?mR-3)ddqU2WA z-ToKRbsb)rEh^)%@dZr!)b{sT2k*oA(hefc7=Ee_TW-n9INTj8E4v?hy2uW}6?=xj zRTQ1Ww~EcO?TaA-XHbI21RLto3!~{dtrDIj%+VKSxn`ZW{sJucY6bL0L_?~njaI%` zZ?LF$P!x1es{6y*&z7oZf<{4aCuZf!5T#9n!=)1csh|JC(%{SM)f0SvwfKi@FMH*S zMgHSj=Li@48Rp0_i4caw)KIlYVJVRs1qNCCW1l)pq@YQ}O6^r**RbN}=`o*iz- zFm%D&nrJs3mq7#zQu%-IngEERs|(VzN5cj=?+>4@+vfNuN{DJ5I4p`bVmOT4={CbP zZRHH3(&Z}o7ZNEe7n`-gMEd_M5aQB5e`)O$8eK*HW>5?M3$P=H#*Il^{)nW9{dQ^h z>ymPM@DTvokP7tAFnHzvrqNkqzchXuyf(KIj`oJ4kj+8&@erz*>CPYRWz}hy-?z~H z^DztS#%k;Jmcf6k8eIZC9h?fr+){VrP~%fw`Buy@?r+|QxmJwRr$(3%!R|P3mZNC) zJ7aVy7-wHrm!;*S%Okgd~@vanpf5~+K1D|f!>eQ6CeBb*OlV$DcSBGd0M~C zI@>|SI()4Ul+ho>`aMSAf=MlGyoL-i##d3@;Z@kw`Jc260`n>5H z8SI9svq9?Y-#KevyeD>t0F?v_53(T~V>r;S+l3sEQG@sN!#3QXTt_(=Pdy7u`j9{M zWsNJNk}bi8e(SbgC$1m5ynT0*zo@AGIS4fK*VAQ)kxy!ekwJv~ZsM3utbw536)|3A z;st1kkYTArLtfNn69kh<+4>JXsT}=`cJf_|XMQBP6KBY-D}hiyoK!{uuUh^h^asp+ zBwlMs?>D!_g_oBz(npfq@7(x+APARz<%g=leB(QpH+y9nE`>t(wm>Q6e(~&b(G~`# z8NfBp@bto=??;fna8QVxiB>gwbB#K(bz|rzC=m)l+Y{|eYue*q#hnjBrQ(&GvtGwp z7fBUKb9Ef)MRR}@J386e_?!p4O#*HB3_E7GdN*X3$CEysBpu~y_5r7VNZUs|frpfB zVb?=Cel*N}`&(9}Fb|k!-;}-fV(mn=!7a37eQc5Kmbv2y_*_mr={RJ6d6Rn>%sUSQ z=8lX*&W_kETm0*E;$x3-WE(#w%iL)?q+6JUa$yflM-(_e4<8P13&U+!&mq`F66p<6 z@UjE6rlN!Q#Ocz|0aF}C)U@KKEorO^gi@=;Qz_qmOI47$V?eefP$wAwe!G0UNR0+A z94d7!Y|xXG5-pqON#m(k7-A{%9p$KLecnMgS?^uI-dd)<)Moqq+2K%D07^8kf+2Bv z%q}xU+owaT$gh&)(?{WJYTVmqe@y|)w={>5MNtk2^RVgf5EPV!uE%+&t$5cjDxtM) z9vbdMVvu+Z5~*J3d+ybf6X<%Yhh6XQD99fizeVKDorK7g#~eNr&qP&rPhZ(h*2Ej% zA`Z_D9)CcHR%sgzmA1R;yY7y7-D^4GmdeLgp!lfXGUO1pS?;((gXG~aLoZ>IMPZ?_ zk-;60jC6cq`99xj-#Zn05m!5ygV)}Y_>#UkHA9lv1X5&ZP}ls{$T#+3jSZ&$OPOCi^a%3}SU&T;ch2Nhs8; zPP|wXNLVuDBRS=FN`h}4Tg5KYnQW83hL@feiGrFEvflLu-lfZ!31tL!*Y(+NmrG-67AOD?cO^Detr86EK@lXe;MB?n!YQ6Z0olM2IDd8>Z+}=Z8Cm1`yu>! z$01;dI#|dd0D2+O66Ij-A7}Uag`DvRJY{J}`9&^*1=eAsQ1BruPMuOC1Z&jiILZ;r z+9u8o^N#x2Nf2sS14XXP1ScX@uYU}&Ev!O^Eq-L!!vNKUIJzqXPEZ$Nt$ijrZ-WG-b>49|AXTEZ(0M-8Y{er~*_jR{5)$VfQU!Vi*u6gfej z#GfF|aU-;&yO|j~L)kp}@B_csz0b1$uk`uvMokW44b*xt+lo$I%ei8B{Kzbw5gtu= z(z|my{F=ylPFu6a`JknFes<|L^pqVcZRxf)Ea3buDa@c*9g8y#ZI7HoY5o!UIRT+H z9nK^m{K-}&`yXYb6{w{)V)H(DxgY~cLxSzvX5fKh>N6xu@&qW8;2Sm7{+Hbcr3I(8 z4Uod_aZ+nl^H{+U_KyQGxR*PB$Cp}}dCb8U2T;YxqU>z1@NxCx? zp%pU{rCXId{jCXt-eRbJ362R)Y@NV|x>bo~}@EPqV)*u=0p>$^Y!>5eCoB&yLW70WA`=ys;V-cCKC{E)RE}hFY zHjLUbl0ZkI8HWJyBHiCq3!EVVE%^9{01k#L>8-k?WIHSN>_7(3n>@BSn3Dy~JGJg; zr$M!^J#f%=UfrUXD5tcIEQpfW%YSBKAP^QWY3Cw^p{osd0 zt=?jT)kXeWUrrU)$qvp5EZ55soUcw4xuuHy$r9u6=q0&5%?VssR+yrcnH+_yTrTXm z;Q`|fnWl^pZRsa_87h>LPf3>(lb9r&K7~)N6P$!4rfdqEaJpbT0*3P8{KTU>d`7+$ zYxY}`^aaZNLfO(uKfGeFJ*NlfZ8zo)JC^8fFL4j+Ok?j!)p+%}Yw^!_0f4 zjN-FYc*&U~s5J@_;N`(a79#lPeICvHpujcO3rYyGW&u`jN-wB-ud5L93NVq*IjxWa z#C;-3sW}$CWKLbZf~)?F(K)Q_Ij^NFGFtyU5y25)T4cuVvm7A@w}K43ySp!(fUd_P zPF`OVSPdaFy@Ze{uQw12yQl2t9fZ@XOZAci%U~0HLK{ceniCfxf|T?Di>9m?izW~X zl?&*gu&8{IY0r3#gd7)H>1D7u89=;ga7S^ZjInRls*%#wJ+s4}6^uvrm|B`4Q}gqQ zeOaJ`=FWYyYjryYr@~rLme}fA{qsR}!j^*Zo=oQJT`r)Ssd^4lFcG z+J~_C8^6g6eRm9riYAGz*yw(dt2tze;PaMPj$?mg8h1e8ZjgW{cFsx*jd&=n+%Sq}M(<*;Du*KDZBJ>1=37g7Jtx?6p#llLjP zi;L%?(KL3z(Lu`g>28iFvE3JkNo$sFVzfE~#oocaFsE{4 z0#D_`+AN?4Ls)e*dr)xBuad&u`cB;qn}XG@*w_7YOV~ixcbltfVfQu&lwk9ZAk3Eo z->e!YtD2V-^<R#!Gh`V6eYsW7y^{#H=cj>1jWMA5r{1Q&6$;6&|r zf9^Lnj5#KlC_GiTgI~iTaKT+}c)h+ZLHpUf<>+b{4BKOg-YQ)rbVMF_<|M%uMGW#T z{k>tN#vJ63#;?6gFjs@2Lm(2GqM>z3(4XUF9oPPMzN*AjP#z>kzDwvt z|H5Tt&PN17Craft!nI_u;gG)x6MR9-LG%2#@KkxyLem7`kZDP?G4-YW*x0wGKvVTs zV6l<@5=6|U5c(h+dl{aRbAf3q`s9euz3AFMRza$rfjzdyHD15#G2rpID=dL$!TV{| z4kVp`8*~*6sp%yuz&uqYI1%JDhX8blfzR4c8DVz(3wexxBgsF}xsw(Nbf}zaQ>YTz zL>lcWb0KbZ6~GmtaZvj^mBGFRpmxL~MI-d3%joIwC`lqdW7hY5ld&R4X8|Y5YpU;+ zG&FYUx*AD2MCcWBhV~*@lz&CReEo;94qctos1>t7ljc3cxxKYdm^Pxpl7BYgo2>us z)QFZN`W77-n9{~N(=YJ-+DB};a38~PAJ93?(egY!ebhUax-NS2!UtCjDp1n;yTJ7E z2QZ3|2WlAfZ);DIf$?ByVu6|>yeuj0Bl|8k9|%e>kh1(6pl8Cgf6M`C=Aw2} z*cc<)7d*kyUpx@yIqo#vFb`ZV-R7XlocpOaC!$&$#!h=gf*Bb^7Z(ziP;g?gqqiJ8 zxp86b{{9nVGwy$>iOWFDKLF(DUgE#@i9~f3GD4uu(ihgUcjr z5T`$muacj-X<(=#Pg6|FF-pbUQqC9;21c37jk-Q2h2mrSG9A&p}My&kO@? z6+gn;s|veyJC;&a$XwSY8-P!jA!RP%`Z$(HxK9bBqCxURm@`SvG-r zWDWFw8pT|xHD+$bX`O`2g%M8txr5Xagv_I<5_8Fl$`!7MDm3!^qH_2%mKQ}Ni;;KY zCi$_r7j?a-^CWCitx>}sd06uA?m`(1Z7F4rhpwOUCDfseN|D+Fz z;60pNf4D$#u~b@ZG6}jRwB~j1Iie8CP})X6T~J2*>0_RFKfm%aGL0fA;F`yA+o1vu z+=3%sb`=d?d!_1Xy_^cPzCUxUPp*t3s^C>RC2gkEmFkc%dP= z+9-|j{TaOWFqL=U1+RpWPaFmmuB>Phc6@}WQO0~smf0_axJ>GPEHW8XmFQPCyF-W_G1pc(ZyW2#E0eRC}%;}&BI>(==o8mfZX zef4Iq4Ly!P0M;$r&Bt4?ubWXtHMBCGvDQ5DF%}bYb}zWF6cBJ4Ei&_C_Sd7rFv_Pk z(RV0ZimUR4{1LJ!9;K3KA$K?ySSgY(=%Hj_(0P*G_%ORMe=hSsN(H&2Zyv4(2z8IG zNE^{QQ!gpVl%1WT_Z(1nv@nK(&b}`QsIufQD1&;uAlbCTJ7F0-f+vDg`&INIat$+( z`$R%8qOCZSy`^!FxB7!tp6}{6C<5>hk ziMJ<&SU!Q`=#8I#Sxh2stpNhwc-5Cke>qlu7;KK0Rt&4Ptgc0C5)HTH2lqey3Gw=3 zcMq(uG|F?)lxjodMB;|xJfJWQf%>GCsw0794lr0!RU8#@`5rQ1u|&S1_k+?zqUIiU zU6!6|*uK0;IiiMZ$r2HlfAeW7w{1FAy9&rovOA0 zySnL|85TI_3qFb_Ys$m%gJ*)o4a>E4@qJM0z-IKx3xJIq0T?5z9(mfB7%o6tJhl)c zjzyoxfT|La1#R;Ri*3mmMzwIlG;kEOO$JjukXr}9MZxauMFyMAKn$MrQ>z- zQYCXDOi)odpx$65^IzcaAty&JDm7exM!Q&dt-Kfs(S=OK?(dq79OvxA8EGFz(u4T%TNe8zyfS-5DZ;S8hTGc=cCZ{< z#CgO6;N1HM5;9{W{6oYgg}!SIinz3Zpqg7OG<*XyZ$~?UFd56<)7s?*W%uFlSX1e+ z!8YR@Quj8!u%Y4Np+mmI z)DME^MsvsFm57T|%iTlNIH<*3QD_$4OON)NOs}kfwhJbq8X}jCk{zF_1_uHh^UZ&) zjo-S70$bAEuz0lOM~N#IT?yH&U!EAD(B;!$N|;rIO)Z4Du1^hxRmT)`hL4xT2Xz zFe@PhNt>j@d8HUK+cB!fO+v6%6dm_8#rH<$8U1z<P8SLub|{mhx#dm;$1H zew4f$^_GWREjiw=Sp5PWr%qe7lzAMr z*7L*oI?Nwmu}>u`SpSzU&#^EROV$70IX2|lu?C-d!Wao7Xm!G_f-qR?59g;#4 ziqaRm)N1Y(PYqlMoajOW6*)L!rWqq-U2&oaT&n{v(sQI)+mV!R@#J{T?P9%@1gV$^ zEL>qX*$~VEr+@ri>~%zy8@Wsf2=-RV4#N^2oz!yjY+|Uijb`rgjy=RJN^6r2zIjzg zHWP`$Hwt663vw`Kbn-=$)jnv)NOe9{^uvn--Hb;b9l}B6ZOt7Y_VRG*Mc1?Va!ms$ zQU)dX@>tMo1ID1@tHe=g%X|SuIhk(Kou*|L9A~Nhl6Po4p83k))Izw6$T&gb$1eY> z>95e)sfFAOT)CPZT9)9rA|wM}bSe{Ym;~6AmZud56IpRMgI+yJCazJxYl6sD&hiP= zn(@v!_JdK1VP`i$cj}EJ7iQ?mJ2z#r9e2cdP)c#>^hdGi>n33kzHswHV) zgu+jfRdf1^@6ESSLCTb*n2KWp^(w<|@$<;b(&=7YI>xNp@Y&_A2LkvD(d?r`e=KF0 zYGg#@T5c!O(DD-M z@4?c>3>0IO=36AM_F{UkQRj>%@~@~`qN~P2t3gDX&C=b)S9|AYkbEMb$?QG(D1ZEo zBTA27;MdD>HaRd;_IUg`{8k8A`bgNHy31>LArIT~fv)K8W=R$3J60RUCcy%7fbz7C_8;Vf< zop9kUo+`WBDtfjeZjQ^;3ibUU#&F#aR!Vxf&d+b~nu)-5Mnj!$ITOIF0t?h}%Jq{1 zZEjs0k0!a3<7I6`_;$6`agJ`wx*`tzzMzLaeVTXqZY0jZ=XnD!wKF-8P0mc)X9pZC z3*vFHiG+w^f1a>Bld1Nv5E;7N$2PD zQ&|Q!o&?p@jwn*%8WsN7Wz4^%;uC~oM(%&1a02}-C@%Ish@xOT@%=aGu25Z`iY`A8 zP{+T)^8d3R{ug!ECc{M;OK0hZ%zy8Ow!c|?{@~^YRwS}h$UZ`9{y^T`Ap+Hn0+|BY z&LOoRI4||(%2I4Us1HJk?A((U`8CEnks4$m2=CD2#~0`mc~|V;E9cD*31*lIMfb!Q(5H%&4#*J0Qc3E#F0?6kxnJjkn7p2^-^t zef6`;r4fOs-U#P3)$hW^6!TcicmD<3SxOm3E{}?lB&#M(X%+KTolj=6q{e0(puHMO zDFlBgR)=U6k|-MUz@j!KY{hR}#WD2*LYJF(yyOuuF?%{^RIT9A-!U`HEJG~p$jR(u zbCOQWOvvn84FHtDV^XD%_M1ACkk)@%o-VqgzOie~;63D;^z70>-9l%V<%ksty|AM| zN0BWEFY_^iik8S#r6-SyB>FNuCaHfa7U!lJIa{JS&2lrG*q=tmbN!u#ObH#kVzg#kw=CVwvz^il zm{(YhX$5T}N{ys5u-Sy6&~Ai81XYkDp?&1Ey~SaU4VML{#C-73z&=5IBhlL`o2WpJ zI!6?KwV4E)>qU#_Zj9`8JRwJWBeM32pK*9>2rPYmM8`p=7@@~AM#?UoZC{cGc^YFe@2 z$?nwH7dtyD&x|sbrNger4Sh4jjKfT7TMaJrG$

DWuq;p3UNLR40^eH1(;eY2=R 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 Oufc{qGYf80h<^bwVnUAq diff --git a/app/src/main/assets/templates/3.zip b/app/src/main/assets/templates/3.zip index 2eacae4ee27f69886c091bc0d716e97353a52bce..1e2f3492bd9c4a7f37965c86186587aac3fd155e 100644 GIT binary patch literal 50313 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 K;__7A{`P;wqfqMr literal 88934 zcmdSAV{~p&vNjsqwr$(CZQC|?Y-7hewr$(?PIhcNx#{k6`u6GWug`aX-i$Fv=DXgi zxz?(B>X}t@)TK(vrHu)lxs#!ZjcJwA znAHFSLf0F0G$RS8$SP!!!7*hUiWFs|J97eTMTfcX+!cpW#;q(WFibCHrz_i1U-ry*0k>}B0S1N^dDjpRNDcMgKOyWQs=5L>@aC@$6y*^bUV%pZA6 z)E(>kjK}C6dMVi%DHC|G-9M?GLimKsjMQkTpHAFkZ1*d6Bm5Ph-xFv9*)in$6}3r3 z_ujKh(Y72IC=kdnzh&Vx>TXJ7MO2aveY{_=lStV^@RpFHubyE0!>&}m>!acs_TjKO zzYHh!8N5}yIgL2pP@3rMaJIZqmDP*RJP)$A!@ z?HLdU(gYUL~UO#4J9|8hPW`>G3fr>R!cg1=Z985Zel=H zqyA>2sAJqND&dCgsj`Ml{QNt#AOOa4JXDk?Fv!ckBO2&CqS5{fI1Wzs=B|cLCbUkj zHm1&W-yeMw<*jiTVTP^(eZU3nOwZa%O7xVlgeYz1=YNeXPjcL7#L`^VC;L5(Z}Z#G zcf};!d&|o^gXeaIP2NY!<(aq`Lcw)2`cxg2#Ps-JA?O>1~ow9kQzo3Knn>1 zX7(Q90Kckb_Uo)k<$)+$+%^4RX*nELsB5dk_mV6rLKP0G3q78iTpp=j&cqKlBo(`+ zU>mHT3zP%Y5V`$e@YpmgjJC14mFdG4KVw+gz0pzrBoL{CF}H0P#j>}@Iz9sdFZUVC zLvwvV9>E8Es)eub-FE|KrF0!4@jZwzD(o`C7BH3X!;Kxn+6UaOh`}<2CRtY^SVI*o zb>~^n-r|DObg>o8sXXI;nD+j7eGW~3vmSC4p(7u?zf8;@>!iwa31|bD6tQ{axXirT z83}j7{iSy|K<@j=S^ehJBtbEyXht*2eZFiY0a3=L_)t9h;3B@qcHvlgw|S{L*v^ii zc3?D}S_KhS7fIH-B!kd-eSLgnnG`=U_RPtBeaCS2OJ9qr66zo4p*&15f{ay5L zXyN6{N|X3T%lKpq+`6y`_n)p`E3fsj~~6hpmmPlC1my0}StizM`nkN-wPJ zg_xj(j1jktLypX;?c6+x)Mnj>_k0Z?^#i4spP!#w*0g+4WZZEl3zzZJ7;cmzw6a9k zgofzG81T=Tf<_S9mSajdmy41-XmgW1)X_^8RF;^FZ$V&H)XSuv!AR z+JWdTx0;wxq&1p$%XvzTib4P=JFL7|IRhxEjG7V!wYBJkig;KGrA1|))cI6{HWX~o z6u9lp`0`z3)m<+q!{y!OW;HMob1Ge$;UDa>UK$6~)-l9AWUOYX{nNFM4r-&$);rb& z=LO`&1QK|p+4Q7M1JR_?@myC%USpU143O2}53Hbq1({?2JRV*0MzZB75K{WqVZ4e24>fBRhOduyTp zw|D!W+OprU5j1wObhC8vq_cMMRo4C9c~E?xYFd*8aVbu{4Q*uAmIa!H5-*xIS0kMx zXdzG5Eipc>I&RhLS!Cer`KEcfxVYTXFY0Em$6SNegHz;?%CjC|ES&5q{gsb(%&5a~ z#82niG`YPe)3NsULG{-1ikrryecKe7Q>+Z5CLSiSmP40l{C1w5-UK}JHLGYt9k1|* zsKke1GqPmz!BqLpa_oMVdfAOPQQ0Ckjy1*2t6fk?>U2?323HOu5GcVm zUIXC6NRVHX16tZ1@vx3!Nu7)$2nXYNxhnaHZfjU!Uvyan+1mDIW~}rlfZ4e4u?NnX zcn#Ix17!ECvn9XG&MU%j5OM_v5|Y%TKeKoC=JLx6D_*{qy7R z0Qy(>A^tOfoJ^hngE-#56E|@(bT>4zF{O25V)?u7->?cjXC>zG%}oPf0012StFEQ7 zzKx-)ow0?flfId~lc~9ry{nzcUwErZRo4Ee0794gslUb?wccZtZmkSmbva&^c9GvE z!ZrvB41}8Gnf?wY8V(kBY=}*IK_P6e;M@#8^~+M>_X|9vDcB zLko+xBB>zf_X#h(YfgYLc${-E6E61CJV*g$UCCL-F$X7r!Wn0CuOyN2uhOJLZmGI< z*`77)7mS3z@$INLJNmb$>28>P(LyJtlZ_9OwL-n;fR^P^E!{%dIe13;V7W_C`880gjh*?c)PP}C;oc8Ab3B#Zc(3*K25is(!Bxhj zQa}vXm?zP(EQb!=Gbiv0ee1Q5+Kn&u*UQ8A1@fiT%Gwo$fY1PTu(X1bAa?Xe3OXw^ zV=f{y!E3@YERk}+Xf(=&IkPpKK+<8QL;}JGyBOTCq)?_Jn-=h-W;Fp4r0P5hh+#GT z#cOL)cE3zeankP)o&|&^%&|@N2OGOG@*T;8AE4-2gszV>yk8zfgV@!_x|jAY+X-X$ z$B~~#D8x=ORjoWk2sWaV|GY_s(F_e3o0MQ9xd57p8}yq;1?rN01I{NndsRZ*5m-{@ zL?UR&RzIH}!shPlW8bv>wL0KNnm4=M0@e_o-uXL%^%W1a-DtM(w8mkVoedURMa$u4Zs!a1 z^z*52n!D*WsG9;@T|7Xf3)D3B(!Ji?cg!J%-=+#mn&Xqa3%XJ z?5|JVG!AXo7TPBjhBR6lFY-%ADe)`IcBqcWraOLZCH3XJ&ia^Lvu)ANxQ0?e`ekvLIs-CzUn z&<=EZO7QSwaX~OL1m%q2A!Kny5DUUGFPH^oUIE;aq%Z+)UPHndw=e?654SKjzBK<_=Zdw{_KDQp98G!{1JpS43eYFLve#KwR zn5!B-tO=)KL!jR5KEFyF#taKTQ)^%ErN-M9Us4~FQp?0a%xOWS&xqz-MTQu)MDNAU z_*=)fOsFgof%U#RW!YqyF1?WkLUkf;M zEWMpe;J_Ax4O(B%vg-qZgoDS>EnW+)9XE~kAl*&1aOa+#BXa7PFZi;F=2Z9gk`K^- zTjXE2AB=xz5gS8Kdsml#iXq6-AW_Wko#g9#C!zcgT896X>FEC@TmFkJi&SOf7QT-` zzPApF?gH1{AcdtkT{J?tD3025)=UyRqpJP7^Aq&F5oXDSM7ITsT27Ji=P8rzpXT1p zn<-}XihLH0&Nq79$jGM3lZ{hHMzR$@-+~uiTwCh?+!Cj1mrlz>(hikHobN=0lv8m&NJWn{EF;$|m#0$cuJ9`VCM z$lfZ(!YT8)@$~+&YPtYT(=n7oAufXp)mag!Nc6myS{l6w%OKxHPl3GN&LFdZw8{9# zJJ|YmQ6YQgqmiQU=}L4*3a63XVgx{%vR-fkjRKI~Hs=%M`mK9CSHKXo0DPJCDsfE} zIQj}sd+%U9^`~cEm*Sl9!$UUj2y6O9U>|QP9IZL{3+8)6C5pg=2^ORr6HLmU#&g2K z!IiRI36Tpxgxn&6rdOdRP(s}9=uy~bk%)_+723zX!$!BqteP(FE4A4=yjTq zkIXz}dRpzKu<4&R3CybXV&}`}0TEOfA${(_yRiih7PvBTV-5uS#`PSB>{O3GTX%z{ zfW$n^XC9+4;3hb3SL&uPa(-Y3J1#J7yk!$Ze8813^|NgJ=@gpC`6>FD1`W!myAQlQ zL4Q(ywu%o}uOj(WS6CkiA65s+!AZtbCinO*O}5Dg$yeL~wvKE}4xl0NiMe2LH^8M# z`tXZ>ISSH>`Tspm{}q+Q{|;ZamJYUt4zz}Lo+b{K->DAUKLHdBOZoEWw<5}Spfmm7 zE$|O){}-gD#0f$LGa!gQg=`Z}>XmGvMy&rFO&5VZ6-l)4eg`X;Nc*Vx4S&^__TZf} zXy#KJE8Tj;ju4u%kotzSylM(xT5%?tSWLP;WunH32DztzV0~3dXBh5Ci4cr6DMPsP zrqhOLi8=Q(z#DvwRLMlz>by%^GwMUtLZ04=T)F>_W3Jq+ASG#)og4@VUjC@_Wx<(9 zKW;GBaS8mtBlvHe_K&anZ?n38wbehos{Y@zy8j=%@V|ls_dod7;u{+O1Pex`M+Z1K z007AELG!<<{)3h19PG>iA>kfxA{6ArVWF_T4<7+wB_%|ZzW+=7Wk7rrA%N;dgZTIL zSxFH=6_51`9ZLljbu3vX$)!rwmxRnollO%3va#Gk6&=M#vlB2Z1kfj1l0?S{XrOvl zmxilSNgaj=F2{&SD8)Vu&17GF5rI7HS(Ru>nLQ+t+~tfbZ;8P}USvTKO1-5ryKPV3 zs}Hy*zn!+4w4)qsUa`12<9iI=oEu<|Z7%hJhC!+v&r^EIC8h@5j}j=VJtbF?M`@;@)@yc?c0u#ct@i}WZ+1s!w~8$ zUBFQC0W274+}cP6odf2%UBxPzZn;YGPm3h-4E<5TcTN@Z>Ek%u;Ta?m3$r!;vAz_) zNh`-3VFGfre5pw?#HjN?nQr^6keZvn6RsILRnOz>6N58j>x}Qz$>D7go#-R|V|NoH z?nJ-(;TZRBAL71K*4JY*9JQ2FN1=tp=#?^87RTBj#H+7etYb-(UkDUQSpZ2!zUoUQ zx(Oes%R&>c-F6Ua(MLZI+1lNy@&jqKT&KZz5IVWdO}z)SzGAj$+VTydJk>*RDHFi> z8lWv%$}!s0R=c*5S2a~%fYggI#fdYAvs*0osJRWEGiPMjIC&38dq0Hp72Y7{q@!a8 zh*Mpx*vs`iK>W?Dui*k1V;~Bw_I2Joeh*`Ui?44ys>Afo?@UFC>E-P2-F`1#DsCa zfi_k_hh_49j7i6gls$}X+}yqA8P)U|TZ!v)=hcbPuAH`^y^Hwn%?%TNxlf(9(a(&Z zL)W<>atCVwCmVhE>F_rRef2BS+ovYDviEjSkz|qQhVd z>EZ0GpT1Q?)>bAyx*Oj&#LFdQMgV)jTq z%0c$IXr~_|cw>*P?Sc?hLXywIa6_$BI|&4B9K)w3)L#7Ca7}5CyFN!n;&i`0gElHZ ziiFRFtNs7#R^_v#A0e-_zz>3mWj2eOFqHi;17aA#oZaTcLykh-s}BRn=))MB;74R- zjMv`*rxo(fx-TlHlzX9#|u-wFl^OW&!yL^on{v^S_*|u$d z&2H~*^m~jVdTT#qO_NLK%IiJyQF#THBX`-LAD#NQZX;y2d;6=-o$m_kWNSQ&59qpl zk$SmN9YI5En9;c&{c6$M-iY=JzIGnI#j=L!i(!9ViiQIl9{ZJxlv?xF1t$YHI@>#l zQuFY>_`8?=* z4pY7psp9jzT(aj}MBh&W9H{=?t@_~MR@>|G_bb-OO~cQaVnXzzl}NWXEI4x(4VBF3 zHgrA=o?p-2Y3a7om8}stbU?lfo~UT%K)YH9fExu2=}XpOY~WK&Hdt(X_q}xr&@25C z6t}GDTCISGM@_=yv*WS4&j-_0e7j1M@q4egy1v%|X#oP8#Jjp(As~@Kwt$eySKtdo z#tAtE0*5hNb?@~vzm@phcDRWq;XC0)GvSAEH9{T1(+uAU?W5(rYp}zTv|vRE^Zn*d zP9Y%QI=tqQcaotD2P4$;9+E&gP^n1f6Bfv1ai9Y*=}6{-O8m{pUzFfm=;5hrDw(1S zQoxcVTeBFVmmWrkZx~N69Yi95vCk5b#!fDrHnA`LkF7n09GkHpWdy5!s1%gbf6iSU zxPFD$>V+3_bXIOk6&Q+3wu|HB2o{q9rmNwJd?{QcT?@v2HOF~7LnW648~S?SE{X#) zG7AI${KZ$Be=w+E@+>6SPZ9gp$4d>Rm9c?elD;y^DF&C z!45XKec-2+2(4z82A)Q|G|aw+83)i6Nq)6lL)T&6avYmZF16#^0B7d_8b=_#WaJ2J zZ9h5*6tgfvb;^YD@=Piz7Q;Ei(o$?4G0>992fBFB+)TMvQ_c+Z5$XE#6SMqPTX!|n zK<@70^#8^cmp<}c_B?O}Cib95~$>{P_xFiedFb$c666PFB zlms#k75|qR(@&5BDpFFoBOF)2DTs9?iHHHtk**++g0%(pECZPe7(^WF0)~Ux$owwL ztF=x^m}!z<_LS=3p5zKjIC7)oII!oGSKmsInz|T(Z~Y9CjvRy?>cf5AJUT+(`ZeHd7{EaMF;FN;SwS;pi(emLQFWPN`$T7OZmv z1cGlE4dRw%jV=vp2KmhG%w)(r(9QO>G3bEMQ@c9; zpn!YBp*x^6opY!P540vFMypn>bEt?7ermJT&}hMAw%TX>MF)8K5V6IP3-S~yV(7Ra z{$~p8n)9UZm7r}PL_-4|WPntg`V~j|Rwnh2Yo!wgVC^{RpE($ca3o*29m2+G@;glg zpr1lQ31Wj;w;*#z6jB3u6vWBa`K1Kzx`KxdO5~CIdOra=G9gx%#QM8q9q6Qf)bmMQ zTgU`zzOMg%LFAF!947)&rR2;VfYZ#tCp&Z2u{@-h=r{F|V=!AH6Ot@?@2j8htz<(n zbItdWR&%fmA4tA`dZUjwUEB3jAE@HQw9=w-;u}dwO-*b@_?|TJfQ{cmVCD(~B`B*Y zQl=q*n>~;y7~{w=t37>nV5yQIX-VOvHwehyq&wM6379F24wu}7a8=vkG&(jp6%O#23w zDm@^EH47fXZUM>4X(z1P2abl)qnRr>w;K2n`Z(}|$q+g2c1gD(tJ0{}$t@qXstyUN zVp8rqvs`oJ&eO&xaF`vP)Jc+aowO(&(i~}!+dcW6IQA^Qf%o%YOoysO>@|u&(5Tp# zY9ohm;^IGY?f@gHU;m;17{9iAMKLscD+WKJI|f-u6fhju^f$EX?#ZKrL&u47?O*H% zFtkz(FwnxGxGgRc46@XW7dX&yD33((*dOzz-sYQEks$U*2l&B!mG zmoc!H&T3)!GSsdW=@^Z1w*NUBa3m;?c6`A2NT!ym+1)h0PQk&NL~bejj_Uk?-(O)n zB7Ed!+?_MtN%);$7Vbd#*`Ma$ErtPK}oTahfnIDwNnzaskbQ&F+V>FijQ~q^u)R@=`*rgueO{{m@US z*f}lhk3HuPPQ4btkGT75EW>wfthBrv?zGG7+MT!Bu^e~!jPpA==B*Z=j=wuT$-*p(yi5#6gImw^~|;E1Iwf@@rw&D@~J<}Sa;tyi~I06(Tfc+-di1( z!M-aAe1Go0tC97&n7Mz3@ArqWN80upzB&BR(DQXYukink0scvhj!fQtfBU?m|G9x( z({;Pz-}Cxpj)?<2($5Gxd=<#UFT~&#jrVKh_(lfj3%nPQBmadC68yWw1CSJz6R8$5 z2>PEj_^pae-tKoJ(8l-pPsa^^ElK~OuKcg+`!Chy1`5g9|3!6)Qt-Fx@*oRRM`h`$ zcdo$CQVTIf+e%6+G4lM4s0<;fU@tTisJa!po|u6KDI#*s$h7!VMp6beS@h9Ykx+R} zP+&nx`aOb#Ip>Sheft>T&Ou}IwP)tYXM57y{gV6XZJP6G^X(EFG^C^r@E##bUw*AW z`^&$<(D;Jj7IXon2i=nXYDVk*P#+wIHV|usMrhbf6Yr+pvMjgWQFOQC^&sds$$dub zT-)^Gi;hiV2c7TayV3PeGE_k`G1Nfp7%I>=oAQAMnsUC1!K)QmY7lpr3D7Twz8SHD zz?B=1B2ib3R9V?)zF(09>aVm*gu3S9RX1h!#RBe+`Ph?X>yNRzQ*h!Pr}VM=pP9O@ zAn}u>kpZYp-UfMGyR^vZXLvF=`GA zr8)pI;~)WOMEx^DNN<@nKa{BlL|rCpWgL1!b{T`~0p^m+tAyT8YcxE$)%!y;uv9_F>8joU$y97oS;RI4f`}~%pxAJVRqQ}djH^PXl{v@U zEqfDWnrL9TRsdv&tZiJE&-df_K1eHxgZFf(wY^pD>t`fvRpKRpl9MyFBnC|`_79uDMy3q3ZO8Cj8FqBpPOM`F z@=paj3OF!qe516VqyZY*4ibg>=NqMHU9Y|;Z0->8hL*kg%Wcy=13|5Snppr`oHyg* zE5=|Ym`Z}WQW+KPcvs(70FdI=F0tR6AsgkZGe}x0UK|CXPskkZIQpjnv@|==%~XBo zl=4RaMhkf$4psairG4A!9>6_jlD^|>f*biMe@VOI>TgHE3luj@*g z8$HzzlC92fI4)Wg37MG|(Z^g35r#r&;npBN_2z)E7KvHid9#I&9FZACeKNp)y92h) zKi9M;LDf!hik+d0DyRhyiA(;#B%63e%C;3^<%+fTETc&|jrpZc zV>@f)R_0pUqI{*uyLx&!uWN-l{Wkg1y(J3smxoU55ACU#+M}7q=^+A1Y{uo&?3->z zvPC}x`&)`Syp20;91FA9!(dZ=2|od5MzHJ-W$3k*2?HTfix!~zQix#Zn5Ig9;_$dn@y8gQ*w2ILspLxcV~boCGg%Z^pQZu-({N$ae-ci8MlGeSLR;%~SZm zs}zb=uM3j%wj4M`_PgBBKTS0Fl%r&kmGn_T_=fQ+fldCAJ@k;A5~ynhsrCKIkGu zh&3#E(5gEhz=?L*!Lt>N3~f%(lQl0`R9AYz(Ho?dpVdHKyJjzVD=a)E4{2ue1y4+) z4=g`5yMXZ~FWi6$UgZwH>^|{>7sHnq@#4iH0XxFG_NxxLSz_jzcqFta$hle|CyCTG zn;ekOYN;S6@-*Al zmbgP2%H4x#@+(t}Qm(PLD#%YP5LhA?HnX*Vt*;YTsx$L!@aQ%jJN;`C= z@X~&rDUlOM)6b{flYN-BoH-}BKB%RuK6@73N*wUP1GA=~z`{59ZnUa6#OO?x@+d57 zqHhFkF@w&NLy8ljv<_4cyNwT(k~3FB1eKYyeKF3CsZbgI0Vw;Zb)b0Nt(pcR`qI~J zf&cXEPhHSDeywnnnB&45gC1>uZU{}-W+UDJcr{oFLe#J%240M?!`nwY^E0LNm0yKn z$Hv}$ zk$F-IHn1ntME^-l8Mu<>EyoOw8!b3e$R2*%fKLi4z7-w2-c8B>7t$9TxFr_x&<+(C zVJ_Q-N8UADpcCg#KJ;k0HwKAY zpnA@(mpH!$*D$FEqs??-&9=BX&o3vSABSY@1mh<7tUje}58OW9bZD`vCQNB(Rxpv( zQ-NCtHws@p{2R3HN87sTi9^F021@IE1Xy#(d1GxsR3Y8IDOx~C!lxfMoPuNrf=Lzq zA-9Ku{5ta9hjqU9feqL>ADm7b98@mSidqGsEvaEgn-4+*2XX_qaWEgz_p zpg_MaB*-otPPCsN zYdlh>1}ohX+z}SQK83$NB$|ng_p69>3)G9G1}^;Bjd(xf#eck|5l}pX8fc*K2l`Zy z*&Hbc?8DHF=ID2NEPz1W1<(5Xv;bi3t)3ei;r$fNc7S zNxLqt#b+Oc(cEDQc*D@QTAiF`66Jmv}vG7|1jzf={JS z;WAna!mJqI!SV+~Q@jEjD^H=7CZ|j~CgEJB8 zMF%t_dfd=}q~L<|w!}1}8&F=DMgm-#S)`82xF(|eevWbiU^Nq2Nr!NcO#G+ynE+$V zmh$qXta6n>j9;z@6M*7m#{Nz~KPlj6xf*eX#puim9`BG8xI0y76erR(aNNO@_OT5% z=MESySD_U6<@P2M1s>8*%Ge?`K~6!8gp?kbz_DQz^#%SS1Ao z9m7*z!$Q&Dzv7?j;8RhB6N7%aIWVr`+<;V#9x(lm<|aa$z<_6n+3tlF=XE2ECKrh4 z?sQ<0cMM=630Uu+lXDlHa0~{0Q3|Nv#30DlaYvMG+Iu>yIqQ*!u0ZkJp-_5g@P>4k z(vqZmD>Q$@XI*6I+#N~A_nwW2SkE6~I6w!vzk|}_FkyvJh=!)e0pjQD!zIgIAA}aC zw#3CCvH!7_kq;pO6^(+E4Wm9Q&HxS7Oi1tq?(m&J2(quphQ}M+=g9jPH&=);fnD%< zT|RW@KA0@b3wWJM2uHl#@@TSh;sbEqoC)wcQCf)50dM@;&hy5=#%#(;Le298IY3YT zHJ#@O-O{{1C{3=7b z+a|b8taqSnBf3n)4VrW%ybR}WU}gE&AY~(rNqGpsjb~YdpSxju@XZmQ3>PR;N&qtQ zXubW(GlrV4Zs`d~5X?%!>8nMc!Ma`$lam5{Bo27}j+D=6X69l2l{m?pGXM`^Yo3NQ z;6!!w5a2WVPeC6iRR;cG2Q(KgkQY(Sfd}%~Otn)Vsx-9vsqUtl_^A5S+`ullV`reZ z(-c@aPry~mX9lN^_Or20cKd4cfG%&!r!1bO5;2Pv_O^(!(3}lQlj=`L3 zxq))!($Fnl2+?KQGq(XD=0pPgBfwiwTQoBt-FErp7Dl?jX&I9xY}Pb$@%9I2vmwP_ zeOmxit*j#&NK1X7D#;1!zq6P5>Te12)Ep=deVmX0vsXu!hc z!5$v|2$ajLkl{dazHi_ZXoH}DC*5htFq$c~Kb%`w1Y{wn|HA5&;Eoja-LA*8E_Gk8 z2-H*rPur!feu0CjbH{v|5N4?IrmomgXu{lYm6gbhtTKx>_49u{{HmI6|cE7s+S!`C6w7+ejgt%Cy zj!2PFD29k3IhhZm2^3BbnH3*YCfFXpE?k^$oFy61KNMinJ2&-20FA`;`A9ltzT@XS zUrM=1R&A@hlT73Kx@R|A`+(1VjOr12Y>V&pl>e(jXH2%tF)>{j^VZ{h_+>Xz&$mx)cFHLYQk;E8*FxhM*f}v+G&l`|eyF*#!lZ1z<*u5P7!Q_J)jQj$ zrMu^&ToxUUL1NC2Rzy6DVf8OI7&e>_G57ui8(w{E-gGLw;tsdWB)!x(TD#6+G!u7|Y!+CDlS^&# zmpUGCHzW$UapZZ1vuT)QOHL%l>Bk_?biy-7NdnDSI8C`g^9H>@^r7z1zF065&Vko* zI3=Sy-Z;y%HSss#*Q4Mku+``W!Ijbi8}0XPZ-EiLF_BVbXJLk!o4u*{u_ChKxBkUS z0=@6JiFWQZ{KUiwcakJH;N%L)A#!SB1V>lzvb;&4J>gNPd^7fkZa*U6Rc(hBMtOUj z$9hXr4%)`FXEPnsL&_&lcB*d7Rjxy(aRz=)5&%lBgDf@!zw6IWH%^QSn5}ZLd=9{5 zA`R4f)?TW)kf-b}D3xu0T=MQrT_7Xt%4dw;Cc_KAoeQ5@2x?T){VcxB>SEU?v(VEa z-m(78X8PO4t>)oc5GkJAY)=3U@TQNDnsNHBoB!*)*{n;5es;_e_`!JEzrsV?R&49o zbUQGsTK-+%*o(pf=6K0EoQc*8C*P!y$?{$=4C9pbID_NuC}dnApKxZb21W1S2UHsS{9o@eIvnzK$jysCxf5caCz~qtL0=zBQ!r6 z)6||%-nT`VqDgD4j~PK^UGaW*$~Huon+@@oTuy}}-S0i{9}3wnZCdxZq`f~rZv z0ew~uHWdkl1tW{-c%B8JNYk%rb^hpd)HVN1GFkQ6#1zA>oy(8u1_M@~4QMGYDqqeP zVukXW*mLv8?wXjH<6NA5MuZjRtUO33DXg)eVm13Du#rm1G$YAW52Y=l6?|QqbWmN` z^NYoT)Rnk(Q+)PK)5MvIfwv4tH0H{*dMAHUR8pzWoTx7(uRyT&E`B4l2Rd5*f`GN7 zt(Is$7o4j?;u4TlP19HXj4W)Afp&stvowLYI2Bh;3r3zjJv zb1m+qvIUL>nX|?wBv3%ZG~I-jRvwh(SF0vu>>c{;I9E?vdysu*+sr~YrnzS}s!|$3 zJ*X%iHPJ`Vy>yE9UMwtPr=yiComOsl#eo8hkAdu$sjj1Q_wGCHqntb6ol9Ky%cUdI zPm#UeXU&6h{4NQEFhyi_!3W`f>7+5m8${T9OI7*!%zE;%XiR&g_ZU!ns3#yH{9nHu zKjV(Y%;nW@WpM^0a2fAhRDIf>%$+w{E^e7kcW#*vG#~(OxnqH?AO~L)C}od@GaiBWV@MtT>0Lw@%jMRFwy&RK{UW>hBKfF z$Ai+CXr`PoU%2EK3-NUr;f@uepN+tueQe$*AS3ijFrJC=IX>4{3 zOT3R>!8MlaM*gSi#h(TV>w{x#X)m*XO90%1=q=+pc%k-I0Ca}|6jnwIXd=^}twxnT z;%@fGW)sku%8s(1$I}?}6rm027P+;%bAQDgtn9QbB*=IP#u}~qmcZm{l;dao#VdX| z`v|VSJ#Z#^0IM|5}Q zXWLv2Tgt}2@p{b(zi3dob)y%B|53Zn=U;>R(jxcU#U7cf`$9qGzU)tFZcWt%U?>Tz-OG6WpK6mK&c=Ba0Ij0*}&-pz!+7;sjuk^$vjAtp4V#WDYo z2!ZGY_fa3gM5wh51AnW`VC@1M)f3P}{E;QjL+@7j^Eij&M-#f?=MvCJ=4uRYAc3zQ zeD=->gv^voUPH9QBRNQY!+30ULo<`7Ry^;N@ExRc68_Mvk_--z>|_s}xs9|1toQrJ zrZ9Fw7%(u#E*K7x?7l@O!4o{spQE>JuK*_J{lFoyysJKTiHZ*ld_6u}@pH$#D}D=V zQMEh2`-h#D6Z_2`Xn)`7JNSUqzAl?Fl%&(fZL!`tj7pBQ3Gh2z!21XPU{uu*2s-6G zvmM=zD>q&GKy~Z&2DTgbCjeWG!?%_T=^)dlt|#fu(*_O|A^ndUY}_Y1UL~hjZ+6BO zI%Mf+?%Zy0F|7~_W2eStap+9n*Jq6wh0QI+lZIHr?T|A& zrdsEnabv`$yS2rLziUh7mHUjJP2`0#Cj907mzHqNLS ztqZ#G-qZaVVH>!624k~h&62MSygRZcfrNVmBDhfOX(+!R$NG{$0K{ zSc_?=Zxg63$`Vwuu&bI4@N~-2%1+`q-`qF{$}n%K;>L+uJ+jj8`6cy?zYeq#T(RpE z{`=ah6-P5>jlAHuYfu7L9b9#8P1sr4LwuUpz?BWqrWAYs$2nO}X9*b=A!=E=CLU}Y zz0s~CA6ky8BShI$KqnbyPSZK1j?ACJ7^!DA^XTuOmGET*k|Q_hb0h_d9qPaGpm~=c z?E5m|A(B#opj9NQWkC!yPegE`!~C7eB9c;pSgBZFS%EMa9+o9PvSS66Un&y#nPdww|D6zzP@~o8sq(I3F2s|xWR|%x)F1T3oEc;UzeQ=fisy5s zwOOlu)%GE=oN=-0h+uus#F+2UdotpXQL+M$GBDp zkaLjR=4rdJN|qccA5CIIcwk7|zQ~I<7lk?}i-oqocj>g)E zfHE#nUX&?l4UU=@f5u)(Zz-a(ItfuRcL0kmW61|fpY0ZmlqmD=_sXCjH+zXtv9jZK z+QRORfdA#E=^uXg5IUo{@#J_gRV;E>sx`lZLK^onFWpz+F#S_*CJfr^5lM$#^R=%s%)I} zudgX?W`T17wXO{J#h7mWyr>LBSIUr?;!1anV9T&o;q+PN#af%*NCuL3Q_0VK>h6EU zO!Xw9pQHTk=5b*-e9`0x*GY{1CB3pEd&AX!lde;7`e-NBz;yrGQmBo73{@pu4;$qo zsSOH?<)zSFSTDumsJ2rta)uK#PemEkAeBK=72YyFL#}bOVxrYmj#O1| z6`Dy>QOUN(rT^3Pp-lN<{47Q7CFGCY3UEc-SN{PmRqjn}cbQMj?-t}vvNsu>-STvd z(@Ep`Syh-37rDp?!C((!i%3}HBQ8p^DOa`5zUm(lJR*rcrJuw>e27dy=Le zASn5o+SU{0bOmKJWSdEoYi@Ogu$61>SktRJb~B)Lp`SK#v#5R=FMYByIebH7TY0lc zftDt0k^s@(x>C?Hc?KE+gvG1~COTVq7=O9t1>ipKAHBxF=Jk6@t^2v`D{wG*GmDT8 z#kFy+T(fD*p|vxZ#vVWibpYEYd7xK@!b*=_f>!odEGD+!mCE28`#*piZ<*?D1tmITXGl1Fn7n_54XD4KKVo>=Bk%n*Guh^tO+qP}ncCupIwr$(Sif!ArovheSZoXaT;hcT;ty}kDR`o-V(Ot7^ zbk81R{D1RZ7Qu7|um;W~)B{)~ebr^Y2(H#;r3kiZc)5W7@lEi{^p>k^V*qTvcF5F< zM`PhwB1__dOUzuxjEnwjuvEc}_dU8wZ}j$`Qr}xJNoG{_EZ2>08c&4mn#6sxv%3snz8zb=jvSd9vbntT$VLd4E&9=e z#ZqyVfrqKh5!AY~r;=fhE1hvm0D8|Npqq=_^q;C_p zYYvS_ME_Pd&+0d(Y+j2e-Iw-RYhqQf*F2P=7bZJ9qQ&#hvWAg%>flPf^9tPFJne;t=Ic!6RW_$J)|~`@qCf46 z6E68yq8LjC%`D}z1h#of2Y!zQr||7ila5@|&R<&x51y4A&idpsQTEDPFazK`dW)A8 zlz`0PfvFt3!HL)2f&6J#1pB~pQCK(5UwvUw8$@4~K5M2VfxyXfxB^gNIj@M(O-kS7 z#!T7s6R(FI+*ex~Qi6@b{xX_C%SaAHjs%(J7>{~dB!>|Y5@n&?Q1 z4%4d>qE`Ck7Gwtc8<*zP$wv5~K81E#z3VWB*`7Sjf%?}JB}T4vSV)R#HV}+v!VK%q zAO=L5q<;;l&y7}q|D?H_plf&fUBCn1(3nHpIQrzvKTaa-r+ZRuv(WI}zC8ns z9Mih9*3o@w`ca_B`RaA8TAJ1STnvb=u{{cw1 zS7&RFwcEA{{9AdtFZZzR8`SOd19w)lDv11c^l!Pf$Ih?g13w}64#0lOH3_TquQEZa;NtOn`zCt- zLokl_qXjP*0Z+;2Tg=cL;uRo_)|eMxm#u8AWK~-Sy06W-RMH3SwEdTyQLkwp_u}f! zPT(08}E3H zG#11>g~7}^>?2Qw6DDkhf;r?#|CX3-e4N^|hdc@tlWG4sH#)us04saUo=zr&;IX4U zZ-#{9z_TD32gV0$zqNS1mR3YSU|>2a2EbJ>=M@N;f8*TR=LIqJ-pKYQ!4gRlfKp$D z3`k8`;)W)UHR(*5|HYpNH6qh2HAC$c81MzNt?QZ$e(R3%kvBs?xZqYV#Oq2 zuUL#Ae>8#1!+}pHUeQ{amC{vEbcE{o%oHh#pl)a70SGljl?6f8rjNo3;$c4^)AzyEzfa81^_uBI$bZOj=M+cUIlpr`s zKyQTa_H;1d`NEL<$|Pj|^<>XUK=%9-LHL^_;4T9-fJ6yc8|XI4+$T>A?3dUC!6Q)V zU-yqCT_*`RfD07_S8o~1n+Vk#>JU~~yql$KGp3uhkUwtwxd3Cx>zfr@%EU-P!a6e&H-~pnkonDJxR@tHB0xX^%7l;?4h*SeH0V5J zRilbRl+8n6zenO3AV3fdH!lS-y z;>TiC^2URnQFHMthx0@?f!TEYzpH)t2mu9(hH5rZ>b@kBUitcB>E`}oSb~xy=p7Ag zc)ZaPnX_@0DCKqtv6|f6*z|WE&C9j(MN-dUPPg$Ejgc4x&AdT~7zCr@L+iSL(~EQ0$3F`=@jYF^x0@$?nJIyKP6 zWhzaZPsx%ydRs5`ePITrB(NJ*KOW}or{JU9C)Rk< zsq}3jpgLzxY*ym{yOb%YE@FdjiQ)TYiB1*l+P@^y`prNAT6G&TG_gJGOir3$@7@Hr zY|dEBC-P&1t0xb;E;QOTgUb-)pYRN|Elt%DqgmpfOl7mh5o5CI^h_TE_r_4(O6}oG zPaGrdL_Nb=Y1WW6iUn{uuJm)=JewY5$2@m$ofeB)hH(j^`Uvhw44#i0n3Mq}Do*CK($&K8wyByZghqVEY43ZV60 zXz%$w-}pbF`qljs6=|2>d~5xDMxpKp0Vbq8IY%o;PL6vQDUT*>>+b%2O;Bf&da_7u zYVl<@CDBa~lzU2u@N}6R))Thtc6oYCYG`CF*j#IXHqVta{L#yGTppQYQ6geJT*G{G zj2GP`t2)wdAmvF-{hB2KEP8)J$dlQ~pY*z(F*4WkeI$QVFu4Wxo6NDj}|pU$zmxLle@3zDOdy14X}83Q+H{VzqI#B zRF!Q4eYl%r%wl9$OO;k@KK;r|Db#+kT~4cYRvlzw;p|Zr~cc z^F-_{iCP~ju25(gHPwQ6p90YQb`RDsyZ+FSdoI8BswH7o#vUTABsWn1x_P_JI}ALc zKi)GegJ|Hnl5ey_Yxnj|Q;m7V%KD^iS9>w+*cAMNA4zJQH26Cxs59Wnb8b*`D9^-s z&Kfy*I}@K|Sk|^*Pxx4&o11=+RuYt!mPY!F7-C4@M}l64xjMe{Dxcfdb2{mknTtX_ z_ruH3Lo*i=tM1|usY!QQLGzFUGZl#wA=auI-o=RFCwqLzHr8aSPBIUcNnZV)kjF9R zI;s7c5R_i%&{kFpRUK=ohd8WhG^yvsE4QFI$$lu;#z>dXpk!@XfoGqwPd}8dNeo$dOy$dWLdYN^Dat=I(rm0SD#0s5* zzHh2QEDZ16^MX#AhunXoxse$2m&TiU$^vz0VC~r!MkJg2V__rvi}jLJ zh263PY9CIRR9W0yir zyRt8|MM;nm_kcI}oKVNnv-@^_>7oDYOgSHuc3(x%~`ZCW{88OU)g@%I+O_ECUWZVmewOYIMf%SExDK zGg0ELq^|c@(Gj_yV^Q?GkM~EPy?fHQ?i_eF&7XyRlB!}E=lPu&8}_V~}`$Bf8#J4F$=FRv$87ZR{gXS=@R7kYsD> zl3EgbtB5^1IjFeHW~0*K)_|u7L&Bp>q=5!lpZf`>Jqt&rcHU~Y#1DF80gKb;8UOLMK^=@a+`fy8&KQXbaDEDl+9zm}qNeaL z*{eCGk+WlKp2e&?9;BF3*{VZYNgv!5n$h&I*uIH)&qU>Ok;_}6hhR$Q_{6`9aJEn`G{_|GbECvSD5m4_-H{!pDDeQ+g~o*cR&i_rA+QqG z7;}`v>W${DiQDmK#F;{3OQqtc{Ev?E?TN{gCs>u%5>%c_!) zXS-@cGYERui(bwhB1HF0mCgYRxc~}7D2z(1b=3O{(JaY1|%f9x-FhO~_m@<^7 z$VQl!`dY`pQ-3NK1I|e*L796_IJt>hYT#cMlIfYk^97f(5TP|`Hf-ygL%nFp^=EHx z@nei)=<-3|16R+In)8iR1Kt|oj_9Yi^nLXm=#00VHTZA;+e&a5hpGV$fbI!TK7^n4 zvbf4^i}s?AE6>LUcH4eFs^`+6hbMuDDOsoz*26$XE$o;wz3xib52S?gjhB~&7XI;J z$z`2Ph;$G1R3QrGOj%b`!Oxuy%Yl4&#Z~>qkR$)0yd8bb6l+^@Gnc_knBJlCBYZAk z@zXY^m(zv{^4|}yY{GTWXM0ZZ=M=l;y#7K=2m?4|aG{J$({8!xh@Avf-o|S1mj1Tkj%fbnPDJdff2VfH#`BwUUin*v|r`XRw{LUIJbH>yy=6%Hkh4eT6F&QFt24;HT z_0ip&%-;L3wP}VWUF6c`Lh~;G2plxyMQmw+=}Nr36SVOKiWlm4qQJS?`y&Z53hR)x zn!ys)kJl3C!!@97Tt$j-#h`p2h(3zi6S8URlDO$HsjFxC36OCRM-wT4Ki|2{%uC+n zBjLONMb73a4+MF0TPQ_oa*;T4uu#~Cg!ofAVHGfrfn2kSFv0E+1=Xw5@s&?NLT;9W zfU{Rc?y|IJFx8f20mc;5i&GCi`L9-xVsA4)XW-@b3Wpg&!1 zC<}7GixKIZFnn^+_niMNlWU2*C-Ex$O0M%AQQPg&gQGNdV1e}{=E^W>S;8=d6I}0) z($NpdaKf0oe0BJ32MWHj!8_g>-9G2Gju=h)U||79@rn-)&0bAmVUyeT#5DfKO<(%r zr{#*j9xq}~_|)ytrU0O=1sPKj*GCnypn1hVqOj)6?H}OwMyMLm(X!?TG>CJXy~~Rs zsAIlTn-KbHH(C9GR3|K=Tn&OH4^&3$j^5SPp3onxFE;G!nP&LsE}%KR%yck748V+Y z1}d8u9vZW=^;&&24>znu3ZA4M#%mt-y)xu$!Dghco~r0|@e^|due;b*^9Od1Bcs&l zS&N*o-GDZH+_)5$o?p7Cx>9njGB~pipMRH4nwLO>JsZdg?V`LG2QXa|=0936Z4iQWggcXP@jYeHCR4FhCv;q7x+cA928cfr+y=)`;PA6lRa%`_J4qB+ z`sdhMVOo(M-3a&uy}7zg@79T@x;U+RFa8l^cj+ybjsTO6e&ckirIN_pXNq*ly8@)~ zCmPDy)B#M|CW&2rmcB0v`@DVFa0sI-oVmmY$%{=r0sO_Pb?t~CG2#|^b58u$a>WED zeZ8|sLFrt%(+-v5QfG*39|`6)__Kj0SUUh z>D5MDz>)WM&vD&xOFb8l0mn#))-@}=>#NXm;MtOmD+#n2{bFYAbK@XE_8tKBQY87 zcwJ=~98GgSi?HW(FDsi9)yqo2BhaT`!;?}h8U*4HJzsTWn;+JCClN5Rdo>;ZU7MX@ z#Xx7Q@6bRKqs}R2-a4Njm>Y77iWY8MMF8MKY9(Mj@aAtW3fI+kTA;Z=pB;JdzD1SD z@=JFl2v)zih2XUwGMxylVena`cMOdtRU}x?)(b1pNq-`ws0frCzRoC1_gD$wGA{*g zluRfIQ(Y?@y4WVWbV)zE6im987_9p&nhl|FRpO8(6-Yh70if?pD80ONlW5w{oX5k+CyCS@(Z) z9<0)>z zK&pabVqi40&19qxD((s*(GmipN)JWO%JTg|Gmw;N+YYd!iLfVOcZ6D+t~77J-YCf# zU?3sV#D3wcpY1|g23%R%_HLBsTiaMdJWw=Q84m~$t=ZO0dm0%#0{2a+GUTLQjM~b1 zYzwsCH3Spqf8^)tJ(tkL>SGnnC{`=;k-$Ah$qZQgcNyW2mFEh2 zueh>8#o2E5P2o>Kg_&?PShnYg@0Mh}+rsn^iVyt9xl0~sZ|{gDO&z`Mim2vF|MJdbB)(~-FZ&sZ&(8*k(YVh(QT9Npk36WiMg`NeHhOzrT^Bfc{_^;Df-9n|zszZ& zwvx7@7G0o1&bI$a<(kM6eB3w*+f0XXSkdc;VpV4oPv=g=ey2Xua=v%tjO?K4Eb!j!N4@+g}+{a2Xg(Y&4WT@}oJhDn5FX!P$^#?uK_HK#?6W@79yg<63Rb&8_;k^SRZ|wyGitzaS>j8}O zv2&X8*h9u9cN2*lj`vNKqq*YQ+lHJ-9gjY-mT>-i%WA;p=q)!o zRJS;puzWApAd7J4$e&udkL20AZo@my1;ofDq^)M(-Lf}LkoAsb9kTD?(AMhFKodGsn2RcvXOs&q2G@SBViXUxeTTV=F=?CAW%1d&_}#3O*8qf=)G zcgs{r1ds>OC;u+(weO`De!98F7M4$d)9_ea3Gb~gFo2G)y=<+ege=aK4pz|2Nuo@* zAC{4#9Ffrna{X#-gay47y>RY2%xxXY+0V z+$mqfb2Uz(pN<=-0RvW)H#3(azD7xdAk!UN9x(4^(y@!qJ{)KVc(Oa9UK=b)qWP3% zw*r}}g{G)?j&R+gK3E}Gs{6O7tVhZvSHFB^LzFYtW&O-E>YI$F#P)#u6r4Z;!WB&t zOKpPa2YbG}vPvbV@PzGNBX-Wc=^8+_USeLO!w?6_0Q;JgS9Z zq_13e)MSGw%&+4q7zuFU9J=?#*bxI^Yo&!y_iV!g@*=TAidvnLu{B&q$w8ne{Utn) zCXCj3t5Xn6QoJ3ZM1-zB(4cM9sAQRRJ|UQUwOn8*Pj#>8+(HIP%W#=Kg#6(^CZ817 zxj4mU;&2aWcR#E(bi6lJ7IkRJ zV=s9f$qYSet792+r{09dO}7|@OO4uV#n1caEkV55+Z#}|TcM(%H6#PWtJ%wK5O07@8cg8Z8fF0Amu~->#1|ii1zDs&z4>@ zXYvn;j;l@OG{^uYayOl1GV|qTs6`e#?9Gc_7waTfK7QBRLk>$(?TzYm6R&0VC&HP! zyk@v(Jc9M_wpjyeManuU`AN1v=@N|0hOTc{>)UEJwEHZP+dnVBsOc^bkl8E#2zdC$%z|~bo(Zpg#V&AQ2F^mZ3!@K7|ttlc$^4Aj8DI-Azi-V-mQJ~l6 zUYA5-7_mAF2_$X|;k%74v5X=bCOw=^b~ ztQ`&d(vTn6(&eUh_nvL;VttsQTXmUc^!$trzu%DpM?q#GbsOAgeAS{&>S*wSMh`e| zwcTg_6|TAjcem05igYjEt`8G#PeBQpPSb33ELJg)1ntQKF;GKMEOgUxtQK^|F?AFffJfe@DxHFBP zCK}Z;SM2KacHLibyzjx;C4O}55>4FW8)Z^Qi!<1j&W#G}ULovaTM<K7&kq8pDo`mCLq+A<&6eFS7{D>jhUsgm1{2PQEtee!GE9r}%pHpY6E?(2Ka8mYi zLMqv%o8ag5rEQ15&{wv0Xd?};UsTZ^FY4(7sh|T>1-xRSIu2+n!ZX}qm{Zbx+O=#K+q zQyTUgJ^64YjNzCZg&NR)fA_`-k@n zQe}5z+(`C;k-ggRZTR5Emr28@>I}VYu0J@yC4e>~ZP+HDDOM-%fvRCzfwSFIY8`;e z>U2xfu-W$ubx2YI{0ab^z2NV)aT7Y0Q?vN`aeWF+tq|1 zCb%kJ3^N~?dQ4-}>5L6Wl74;qbpjw!I?v76Q)4<$b#*%O63YlMN|uWa?R<%N^@_wl z2?AU@(R1OOlX2maYO|*9$#Qn9iBD;lO=1pWU`mMx)_w4eAOa+Mk7kefX3iFIV;>Rt{}SLtTJ1F3xQt%{d> zX$g=WEeDM0RD&XPX0L*FOWyd&n7v!m&w~RVK?`sa<*0IRKaJN7uIR07pwxr267gM| zYIOIu09m(r!L{th0T5g8p5a0>goyMPz!UY~yeLm#0wNU&5Kq{WJE|K2wsnmpM&t6@ zNcnlU{e2X#quilypd|FG>@T<^&lInx<%L-2NeewXZNE*sh0S(P6k82LP1&`-!Eyib z4Sad4r@<>K-?CIXEjMf3kEz2k{Qiu2d9zvfMr+Zr#2i3%G<9)0Ejsu5^CC<~YlVbu z-?GcW+_zm!03mbF9!_>@17MM!iw}cmGHT8zs+RF@&4V8)x61?WW%m;>b@)eF9dG(K zDUG*tI@%DOq3pebe(X2@8?LXp_`i>Tq-Byy*c}=3rv(m%j_Y;VoDQL`9p;I6rTVF% z+g9?y`=4c?wKSa2+M*Q!QpDaWIi-I3;meF{yrM0E2>(aS%KlUmb(5SFv*3D4wgm}? zv1@D2oM57sZj0VW$0mz~Z*K$Heu!vi!E0^U?b&o5%kW1Hr~vbm&?|cN;J|>+#6#fU zVNkBsErT)0$@b5az=^Z!`fJ*LKvC%^7eoN^-aRk$ebx- zyend5f6(Hz8LBlYa?Vz6af7QIBjAx9A&f=4Pg7Oo0h>c{COt~>V9cTz8Qdi;UAdi()p$Mogr?vnl_M7O*LjErV(y8NMuy?BCKjWksM z0tXZrW_0L#p4~#Y3!;KJzcYZdBI4TuUEVFYzIZ<4E)0P#qycPE&c03{ zkq2~s!nP)!L)$PtUvEp99ofrzr~x^$Vy+3^4{L*KFJwAs_S)~T+-b)-OL{=_SHoYX z6wX(wOJtabJoq~j;Cv!*eTY2leW3K!5Pp^1ktG2dK8Sj_?zCNGx*s_Z0#kE;&M$J| z)_;L8j#Jfy(y00}4Wp~SU**V`fu%G6j46GRh?XCn|CrcR4K8^;1ggVD0O;**0c3)w zd6O^V9$)^f!PuQ<6q}80*6RHM%$APpOBj{BXI ze-J3~d!N7D)Oub^!wnP_-GxR+{v(Gt_ay8#SLhCZOWE6S1U}}jyGAgUh5~4WScRR( zrms~$z2?eyjE;VTxPkTsL598sj})8Lg9JZduFFxk3@G?gWm z1GB6pKla!g*&p5YDQ_baZ}E*5?vX0_<*Epb0ubOb$R#(qTg8GrbQ}_|Jg9z}WwYGr zmhTl#!b?c^u|DZ$nFhHI_%?wCun2?x-6p2f7b?XEUUk@B_UE`%%#s*@i>>HzJE~)P z@#0R+H5pl7;H-*ogcHzB5rB`50w0j!5x&E%rXN`kSKUk))8=mlz!)hM1KseUFTPh1 zU;~Ib&mQ;#eT)-O9)&W1^UZa)@B0pnyf$HukHG z29Q47$wU-TNDQryD?VEpe#w}ZlAnX%^Pm{f*RavswZ)qi1SKc@yT$~v!1S^@bbBh5z)!W)Qi@5SeLEa;Qe=1p zeJ7wWd?qsx4hcsSMxk^qrH+4Hq6*{Npd3ALwNoX*n{VmB;e;+va0TXt0R5sgC0Tjv z;42~%=-KJZ6FPFkDy0e1$P^jAA=CA-{|-I%&=IjM-_)ND01Nnr;UjqNMx1CO?fsP` zBHhtY<2Cno%ndQgUEkr;VKcKozpNgVWZQjUeh1uM4Z zRnm%O6@yFh7k}Rf$Plce1q0`4d%3_3+cZ^^RDh9mA4hd4d|lynQ&x?*GP666-h7}8 zV1WjDCCD9mdho@>HUiZmp)ri#mSp_3@v*`&MYwjXmm8J;ba=E%NoDGQlbLg0jlAD> zloHu99{V_PqY|DQkfn=2_mPYs%hZAd-sB{)%86p=*!Qc5fKN2%OHlz~VM4(;NHpc< zBDS^CjdOe~2;aU=Klo(>#OZzkrb_lRFx%ozMUVp-e*;NFRzPu5{er1SWI2xQ)9trH z9d&#ha&<_|B|{^?WyP7@B33zYuT-9yb@IN-Aa6gXsq4C*c^QRW^HELU(L`Vdodetr z)#77o7`nR=#V%P#VLNF{=*H^s*;ZfIJ!fQGOUg^3nbP?=Unyz?O}Q^}X;BBh2c(m| ztIJtc0KPEH=Hy%miEh>7+k5bqR;QZ;VwXWpr;V$_SualcY}zz-QpKA!5^=H`<+}R5 z7|3Q~p!73vfZprrQ~;*eSo58RW&cU+ab#m$d&by*Kpv|T7)2FsKpn=7 z=RGSUbqQHDQV)=@Lp0>2^mm`e9Usg`m9cCK?DocokQ?%Nzk&0(zct-ArrqDgCl5;| zdHLyK>8c*|SC-wrE;mx;NeVybndqbRqBRxa_A!}IqXLYtMmy!tB`_h)ft>Fk`S0?5!i5?t$Y1feSS>m#-!$`E(;Jt7Gfv&+=RQs9H7`SdZlLaz<| z0(<6r7>Gj&R%)T94n8r5h*$api)HsRThdm1OqEzk!27C>1kzIm1jt7Kn~X33VGgv1 zj+BSE1LZ=q)In^GQe88tqi^#%aoVpa)#tRIS47A-%;yiOr@uYfL5IDk6kO;fZd%A; z_)o%7UCG5 zhLkY87P5?&$u22daHZ%JGjw4Q=-LLJZRi!FP#AbE4Nzj*bpeRz8o{-Jh=`Sa3=5EG zLtyg)Q2{v^Sc;W`hfGoCULz-?9D%A-hy**$P;V%Z6oK5V;@MyL9^*Ato8^M(p|%AB zZ66JKmLrxNP+W1*^*+O!0>c@f*e-^j?_QH z9THbdZob^|@{SbC44C4gZ31FIggP{R24IbHRiN8N)b77tIHG_!?uhhg`bh0`kK($F zp^J*N)d5kG*j^%W^Apb8Wpu0| z1L+8KDyePI{5%~4*#_#!5W*1AR`}*QoYBFy0S!@q&;W%ZfGg(i;E^#tMjDB~!#EH| z-oZFQ3c+;cz*%G~#4IC+y&8k#xZ}jlaArZv*R+_0y4g*S)@s(H8roHu$9w?8!;&V{ zN1cAU-w3*C4qD$Ob1uw`=RmfTF3gPAVD>KwIGinF^%*Fn63r5zQF;Rx&%*Q z$at2%;=QSQaswz@iEY4ec$2<*HXh8$IiY?=4=j-F7tkb=YoO=|TU}cREDhpnOVF`P zAoixHTC1xe_q89FX+EFh_~fTV*BKt+ee32N@(Q;DUHmcZ-8Opg2}BrsX3l!B`{mR9 zRP0f(m6YetkkgFgbZl{V9?HI)SU{Y1BQfWGY|kZB6cXDcE4Qllw7Z$QrwKR)N&6pW z?wNeasaVs@D2TYLR*Mneqxj%ji>mYbqxB=|A6o)dNSdho|r`XzqUu%C5bL2s7_k=j)>mv!2zBKeV zj{VpOhageOtm7p5{i`z)B*5@DMhVwiA--qdgSK$7L?_>Cvku($i?vpxEUcGrsWb`P z(?GcCjwbwk#M5|6TDtP-YxArDe0}X`ZbBW#H*;48s$7iU1(EmVlZyYOZ`atUZX6Je z+(u#DsZ(yOZ6P#Gw-kuP9YRvvoSXxiWl2Zh9&nUXrmHfp7`oo;>o<>BKe^?1=?d2> zufLayhRzLqdUA6vlE4W@2qGP-zeub1m>GyVwCVh>Yw>8(otc9p{g9(5P>DnYf)M0B z(O`}F{bIbl^=O@#Y?nC|E3JU0+ zLr&!hhg#63R*_pY*Cn2;;Tvo(?a+bK8)x>U2bz@Y)pZoAx z&gPw_UqMBl9A~JNMr1uzK!hMjbt5Y|bCCVbY|ZXX0)hb|7om*~BLFH0mB_bRiM7q< zWGhevm{S;e2WP4%evAuhP#uRHOCHO}*=)AUq|F``KJ0$T6tK|=#=P~D(Fv4B9s+M; z9b+)ODr(5cRv5bb*jtSp*O5(!s}6HEF~tkD9-0u^O~n^B1p!mH*FcRHcqrb82W$#v zH!89cuv3dXJ#w9iQ?9qQ%9|`hJ~ZE9x$0gScKofA@hKXp`O1^QTMr}zkp6mcr>`=S z^`q`?#Y(au61d{tY|XROG)P+khv8{C&YzXy^NsxBARFx!qKu=Pxi5gm!#cIW2wwNcjIfj? z;t@C;paRmG>yki-tplEh2$Y6tBKo5&6LS~H=>T{M)WNGGv=nO^08LdNi;}*)6ya9b zj$8S7#nM+u;LGR9gUfNuCV(oOR{f>a2&i}y5nb11j&wH z&SJx5yzlV?vL$G(=PF^Y<(Myo34hZ<`;AytV;uyl7=R+@@XNMx<)#VW0f07AkJq( z`v<4)88iHpQ}-xF5%MH^|FTjOdEDzm57XuVGWE<&f(#eBTDF~L8yW7ktXXYEe&1@g zm?|4a&vB8*@f}LfD$YSpad`K1*zlV#OL%OHsx+`I=9h_j1nRc;nu{W6YYG)S!oom3 zSBRhxk36sUWuPYvzt*3Nb13XYxBpV(p9!HOHpI&#>Q5<6W~^-IAx6IzawlD}9~k!TA!X!k7!&8uyK`0RN541^j*7!Mn{Me|-xc&lMO-5cCpOUU?ZdCcrQRJA1eAk{k|gF5=}(ObS3YbmD6?O>c{)=(NMkbtJ%Ob{x!v{t@Msxj-d*c z_;@X!=xpvM74%pyb|&S%U*E{-6Facj^Or{mEj{;Fo5#kJh$3Duf#9d-H0c_sB{jaa zMVpKA;B8zu(6Udf26y8f#`j=P$u)mBA=g;?NN%pkmFNf)>nVXa4{A1_t?Vn`zc@X{ zd2PnDVmlgIl&WP$y|RO=q5cpM0jVsh0NBb2EQpDX!!?wWy$)m_JuyAJEfa6uRp_Fs zt-6KVlR~2_izTKD`TP`C%~ru&Y2g1jwa8Ylv9X=yu?z_mbIK{SH3oj}_KJqJXnqBn zT9YbX>O3Z&#d)AvSLHhe1I0=H6aH9BAfO(|$qWawj<<4UNum&0JB+Du|3gE_*E3?` zwbktK$EJGx8O=s(Z#(*nU+t?+zH+A8zQN|3E|BIplLR$|jkcrtrav|`0GGv6?hK#D z>!xeWe^;_70BM#7E#v!@sheCd5@R7ZGn^Q(HB{P(wO5J=sMy*)%bSF6zFvrWUQq(1 z7*mFYyN%XlMY8`!?^Skl)z{q3$hGh*yV@%&)Y9=av-pHcN6XD}M--L(tcRnRAGgYs zg+u>2m9UqtT{P|0*4@5$eazaFv?y={>5@5W3fgV(^0RuucRv;ra=8l^MV}5)fY??x zL@cn#+?WXP{3>&NhG?dHXp5IF7v|MqzZwu|aqkE2A7=t9yN`vAWX`(o?vW44PxV;F zhCEYp*2~#K7OJ8CVyP^vCmnm!IsW_Aoq<^@x&i#KD*N4-zJcOrx4GQDE1?d=fiGs3 zKUB&w<$|0Gn&rqEbOeA9QX6Dh$t!fPBs`LZS|--UheI*Jd5|v?{Ux@sYuBiu54IAx zY|H42&5m$$E0mF~X7|O|v(7XuN3z!b=Uff>Q|cT`1u_y?>&2pr^N(uMrL$`~KE^|( z&HK^gbF_m;c;An>XcgrmR|k*V5nmL{who#iR~8!1^$j0w`K(Y-3U0HfY`;@OF?@b^ zj&`GH7~J+I1E0^NAMjnn352IS(1v#Qqx!65%*iTd0~q2#C<2VQ)BI=e)uSr-BgU?x zw9SOy$kP{8z|W!C^v|X*N~*ymoPo_dz_YfcyDe8e({neg*A>|hi?T8{Ayy;Xi;*Rm zit6Se?DUyek%zvx1pbQglL@4#H)VkDrJH&w{C`#IG+iv0RYg@xc&!ZiOly~4cjb8S z1vBTfu;Mw8Ocry%wl|zbykdY<0XOXLacP50FdMY$PG1GwaY6S*ET%G}$!IEm%WZZv zg04a2pFf$!xYJhXJG#I1(Ep2N|9^`n@PE(xe-%FbPpS#Zmm@0WU#Z3M@1XntHvVt2 zi4b=em1M;xdN>#cf9E(DSYh}WhJiU@w^kM@VnR;;CKe`&ZCIjh(wxHZ;Dvk$35ikc z8=sf&yB(byA1j}aDxVdu&Xt|s?%9at6%}6z0eSzBkSB%T9eSfQl77Bk+b}wcnsy>X zKr7S~Q-k-XD6mzJxQH{i8-v26{zcmQ=dffw(sCjsJ zoRi+%REUw&=qd_n1nmOF3hf2UU`c!jQE~b_Ee$~f2UOeuMY96*$T2MLO+A`Ot?W6K zRtv+xA_xM8_Zum$3ptaS(R08wXoLmzMJ?ByPq4UVUkHI;@7qpR-GA8YF19jt9a|VA zt!~(a-U33hJ>>D@%c(Ei#otmdOB*#+;!_zP4l<2@9y^PGBH9ZZCSU2m=bOr52c}=X zm`sCMrqWV5xR1{CUv~L$2TpmV5^tIpuZGbUAGuy;0-rzso*mA6;iQifOK( zLi3he7!2x&qDO(9DmT_Db%%L^PohlXu}Df)8cX_y)3FIAFbeYlp8@msy8&Z|B6u(r zdM~DqC~Ty|r_iu3a~DM2ITr{HCqg3sYdlFt@pu(Q4ndx~Z4~$CEu?^SE$XsI3;a6B z;8?^WnMrDMt@$9r=iEX4CyAPAHU-uidvt#f(KJy^2pW4ibbn=o1}gs6WH<4BS%ej_ zSD({iy- zkV!_WWLqrS7MhScwK;WI4l|G`NR1ph3)ZK*Xtj24+LtGaHRs@!Nx{&5vxfZeT}oBV z08ei!P+mI)r}++_v)DvS(0e8heCN1Q+&Q0m$-jpY;=hjQLYdnDP)BTkauGrFCx6@- znz_e}jZ8Tooce|*o4c+#Cpmp@xImZ2KCls{uSq!c{K{7OmsIT}ACSck;hISd2Q+bY$$0v2jV>dyuc^oq~@u zQFCP7u|y~ax(Xe_u;}U3DV)X!fC0aC-}B1IVg}GW1L%9HnIrUck(I-{R^JB_Kf~V8 z*pYCUz&=I6+nRMW2&|SG);O8n!`jHvN^n2pwo}R=msl8s%TDr@fimy+{ZIx$1BhO# z=CF2=9`KETTIg^~>oOb?4-`Xf8eDTblb+*&h z*0Qr%_M|_pvF7?{u~%u?Tiv??B9Sib)8f(46#OBty1o^n{!sZdHhV9h%IfozP>?Kb zwki9mleJr$-3Fla|@AttL&TYIg z$|m2wUB@3`u&)nOCZQI^_-|n8Xd(QsZAAP#}M^|0+say9}Jx{UL??h;{Zf-R&pH_D1m3FC^S+z&K znFu1mM>i%%owmfqK!PJ9UK08bQ}~?${fm$>Nrc;aeU!)JJ&Ozk9%5E3PCe4Z2$e!+Vl4^`b>J}QsNPKk)oOq#jL!m3I}`{cl`ltP=K%a+ zuuku^que)tr{j1w0yE?+M}sOGWRV)E9QN49*rWHoE6XXD26@q!9bL^$1svkk&xDND zdxRm^FDV(qW3Rgif@#90jFJl4L!(4dh_K=02)0Jn^t!W7GWpjQ$Di??Dz)@hwkJ3rK77#S)T9$z{C^=mc z`o-H%sR6S!kZ06U45~t!biyoNDo1u@A}*Q*P{bWlt5pb@+4Eijy82S!ij?9yZ+`#nPS`PDg=h*KYHa6$U}{D z+MdwY8K!Wev}s+LXg~o0AHN+bK9nE{|9M;W2@cawhB~06yz|$3j?rV(Y@G4WA~3(! zVRqQK{Elo1E4H@vDCkrrq;JjV=#U2gcNc9pakuflqBrZ6KN+;lMZI}Ch33)KoxKNr zRpDeLZ6H|>*A^DVDZE~46PakwFTKje_RR#>|LalR0)}H@Q5VI&y~UP#OCMEnBc94N zpiPsmtnJz=LTUF3?;?TY4NVuBuhG0RR%kwRad8s`sW@;^$0n?Y%AsNL z!WM3vb95ZC9lWlFYlls44waAEn`A&kDAaAOu3X4toMWrPa7xS(;*{%(p5I%O?*i%F zjdNAjHgM69QnnpdTJMAOwMq2(g{|5rd-9kuUObe=cS-85pcRp1nxy8w338C|_j}fl zTJ+BqKmmcfh791PD-_hn0kAlmll_bO{k>#Nq-Ao*1#v=7N1ktQHxE^1%s0X;uQ7l3 zU;C#_ePk65HJ*5Ejr*$AsG}49huZZ_p3E*x*MwKG%dZWV!7qr?-;mXnWa2iw}7y1XkEG=7i#EXH>wo0fH=ngB{GD zynCw5^IG#PM=rk8_@L^h$NEpksV+pZoZMX10DiKUp0UiQW$Wyw1F@;D(096hgEskk zQYILx7;5jQ(Y=hpJF7ym66FwUOaliFA!4um+Q00+9Ct=~%q}O{GgW(Kjy*gb0i4C+X5LF?&?#^Y8pTKv+jkbXA zT;FdyoGr9fytYOtD{bdl$d@7*M@E>SQx^6~q6=XtCt>d3(1->^3O`@DYomA2B$ARd zrLR*Hit-klmog4Bgn4y0X~f!u+05n@9c#L1l7~%hf~2()GkMASm9osgx0EXCO*pI+ zo!_o|#Su}r?ch%Gb?k94{7joyULMEx5XPxY<6snCQ5XysG%xx)*u0rbmMtjb*ck;( zU%0GT8iKxt*p<6XRDpO|kb10c5V|6E0}~$?3ICK&lJsUjft5bzX8c#r$s2sl0;BN8 zM&*1Qb+vMGA+UMs_ME}S366eqjB@vhv``bgV}Ne6n-Ac>)KzuGTCE-4><>=hZxVGs zuM8yHoQ4HCDL52Q53gI=qOad+$|ZQPN>h^v;lX+I8y72{(@R?x=4x2H1rVFP7|fFJlyO>U@=qSpNX-~QWv6UeQltWs*eLe>AH-jQ z$A@0cm(S%6bqqrlqM^h-x_+@SqQk`ll&R*wN%+S=TePC^v%UD97Ab#D0CrxwUj{osVF;~aj?=jTPs zYNo8GP1?&r1|h~;mXv|gk zv`2$@f$UlQSI1cL1)MerVR`CO)nV`bp{&H};cV;*~51`o_T&Nn1MNDW~XBIm$E+{tLu*B&Di zN23Aqy>Yk&W~EiPQ}vjsgu18vzD)m(-FOcY6oj>;;GSbl!r1@?&J3&sHbtyqWve`re3^rQke{&~g(efIW(wp%MC>?0tJT zf`;w849A0lswVG1w(hfkK|+VS5K=ilk~H+fsNLG;p_}D2eWd=}O#yM-9mXkpKBlom zf$6GA(UkFGHZA%Gvn(uY8R-rRjTjEL2?h{O=qt)gmYs}6$PUg>7LD>c5zk9FiXW`% ztA0(|6tW0+REL!G`}K()ZK7}Tm#(hFX70c;t8a-bt-!7cHpdXT&??G zfU4X(gpSGt3<0U0UJ>u_0EJSw<~7bTW;zc1K(kWy-sfL6QY)Z;%SJ@glIRl!rLG{y62Ez?bZ zPu+82Jj7+UfLrnYH;QFc<0~JyPBI&l)jQJIoFMc|p0!Qh{>{VS?DFyBiDpZs@4l(I z_p17O{bC3&zS6zW?~*;Z|~&=73RbXq>ms z&jUW_4|cE#hAoHQLN_`9(nG#vCmdhdI1PSv z{lOWwC2T=r5Np@i6$~cU7hXnu`w}!`pY_oTTwFoVaKm4YrbI398;uTnZN>tXT_ zbvg{mGu|@CrHlg?Ope}M>=CZ9T@_uZP?@1UT(v2&ah}U+>p-bg4uCFn9@-%BY-6)B zLb*!V1jH{fb$FtccKwigpxLK7ot+{+inkqdtjpMFcQG<Eq8X8AUDgz9^;5 z_Xe$OzUC#D38l*(;XS944%o(Q5Ttw^$)XQx`T!9ZnGk5(snoN63mCt(8JoSwp$#{C z{qC_oQV@|Ae&BouOTWqwqehDirJMjCud~aIrF|o(2fe`I>=ZG1P*pviT30 zX>$F9faQ_aI7IBrgt4mdL^p%xfPHG`|zbqz7MwDWw)4ES-e!@HMZFT}-xBZY+j8 zIBlokYj~F;r%d+1mDfa>772?CjJb!b8MltI&$(yG7ku64z>%ZVy)@=9*&Z&f^>nD<| z@UPc;#wTT%&|54THC@&cCQzS*5wzaiC^;bBPpaU6t=;~MnjHN|+0I8_sw+>*nleCxjHbab@IU{Y>zIsj7g_1M> zh-!9H?Z|y|H;W3^7o7pt#!4S&BFWp5e;+6@M7joYye}A$M!Nckk8o=-`EnA4M#ZPW zB>QF$dv9pnr6;CDK&3ZeN{UQa&QBGh551yOj~VWbo0Q#7Tqg}Cv%8kb_!ZZ)_;)mXhF@O1Bl83UvlNb@WmT zfnTGJGHV?(pcbP>Qzq`HNPy_f?W$LUo72*x)43lT)|~Yc3nGt;lS!Sb1$~HrX2prz|O@u`-rbMmTB2~Agff&MjA-l9l1+~ zxd}iUf306h{8d$gYWQJ4M4>HuiyKuZ+Lq|3Sh4V0nVv)4={dfM#2rF}u*Z7f+>x=7 za_1wGn6z4h&(8$I@HRl5c;_g?=He1j)!74mUVn#Mc8EMNj`>H&_n&%mZhiY-m~b=U z68&HK-Qj7z{@T{(-jRt9-%Mv5spt7E(BA%wLJYAP3|NoeS$kr!Ex)h?OpHV5&3>5K zf$0HL(|G9KjS+adB%newH*0|EjG&FHM$FfVlr4T|^eC? zGvrN=U<|)PvLUz_Q-a_o_D+WN3m6b(H&niQ40>?#hoL5Y^PbLBA`2SF;H(>KX<(i4 zVr*Ce-tty42g?&-31lm!o=GQ(6X^RX-|@B!G6E_#p4fJ?w&yxpSJ>}}u)4PmFK?_n z|bit0*Y@{}GA9MHRj6EJ4O)TNM8 z^n+@mIJ&HUE8kfT+TIg=;LlXwV_E^{Co58c9L`#oaxSISA}Z-#dfMhV#)As~MTFUx?1{rC?8hS@E3jhhH** zv~w<8Mb-pA&V$6FH#VNzO`Jt3UKUV z@*nG>#LIZ0R!Wm)jsBBsN?FdSiwy6ehB^%|q?&kdU@h$-xtd?spBWVpqSSqrPmVqa zh$0bJ`cs6YM&Ys;uNLfwUzZDM58}L32M>=_Kk$J{l15(FiS`Fnzr5}#24(N3S>Ik| zqw%KslNq=sDBnQRzvlgwiOxPqqM-{05AVUNBNJgc9dZi844&0|j*IyEoa)4Ugjg9S z(Y>Y}XL3~H>`0d&^)xTPFh5jjo}a1-4itEYJ)eJ)-kXY=8Z*F=u@C)xA10k&Ap2qG zAJI3{qd%dUZjj7*Dm8k#5U%ePWA?J{emC^l#8$TXhj>B9OlIKor;MFip}B{a7oIBu zXH`&DM>Y8`bO^Cz2PmBCw^o;)W7oG)&HU)~eD=9D4GlaEAs%O^6e4I}`8~j&>pQ35 zVP7>$bx2z261dXddP~6_orr|rztA>|{$b0i&6?RbP*EH7LqW0o$sV7`K5&6*gvp-e znd&U4@Kme$mv-%{m~jq3I%ZU!k7zijV8G#p^s&RPu75#nv2WBZGCgX;`~2v!N+-_J zdGEe>(kMQ)7eA?C<=xwf@{xD;q#zi|(PB>BGdyPyJzDfu!=e%U=M(2YZqmRXHmb1N zx~xu4VP9@tQW2kK7;sRQNP}q9E%a|%(0$@Id)M_aI-G+9?l`&*KM|iUrZXV_dq!m|g{!Ly&P=^4`6=pv1ftKh zO(?5k5-B6#OYnwIHhx{87VUn1gx@QeI^Zuzr(fPW>vjwE;ocoj! z;n6-LzgZXimbR^=0sv?Nt zY<36*-Q5WRS)53~w!2v$g21LSk#1A{FtEq+;C5-R?~;XA_Ia2X@# zKf)|(J;2^{d1ED9K(+qj1=L;HK<2OQJ2!2Bjb`eCRs}8fTkUOicMW{WEJDPY<49;l z&GAT^N0OQ*Ay8K+zVO1NdBT~)D{bJx&#qTt{YLGhTEL@VN~atGP$Wt_3H}WQyaxH} zQ_4T~<*1B_If-dMYg@aHeoN;u zUzcBj$Oxix-aUYpC(3DNH?3oLyrA&v;WOAuBupaW*abDWAF`Pqj(iZbjfv?QhSS5( zuzoyAw%q*=czL2|kpEnzsI)r^h@9hv!1#$U8Up4J?Pjf?aat;-&l%Kx9l*1D*?PXa zu2cvjK0Xm8u9tH0dThQK5^(>wU;3lph}XnZc~lrT;}fflJ63R=4t>j0$X=TOKM2`% z5ju-j6bvfJE65D8H+RiU=u|z+19N)YaevT);-+#}u@-zY@bZYzAHytOz*rDlhVCYwxgjQKZBi8J? z_5iJH9M(b#gnZ{XJSxP@b8`ziTd>~xBWMHH&ke44R(9?6Qz)$e=wLF5DE!>va1o_* z_B_1ar~76Hcfyl{*b5pyO^nx|0;14K-!2{peQwdChGVZy@o!2v-^KTzQUc?{)6Bj`k;^cTTW8K%eaMY~3yE3^ojX6ILo+moj_a9OnO2)9RYv6$i- z9F62ZH|$W{xO~tfqCFuGi)_zqpRQvdL9g8W6w<`d)r5#Te#Q4VlLSOg303)F$F`=) zzGnPc>roFr+x~MDI?Aa!HeXbGoW5i8M2ovu`1cK8I_Bt5v%K8@MT6W-!nMS42%@qCewI0&nY9oF6KIiKWH~4mRT_wTSZT{3+b`E(Udabs%Lvv}@8g+_;{Q_=%xY74Pk-h^*RE&&lwg@@63KuW zti}dnyfW`Xl&Kc!*{EWoz?~yPUc|W;bxQfMj&|1cps6<9fUfnpmSmM->ggv&whh%g zq0b~>rh)j0HbAR#`e)A$=HK*x;D?es+8BOA3jumZrK|z(oS^-59HwVq7jUgLjeHzp zFyB<*cm@Gl^hToKd)9IC(DDOMQIp_*6TH>b{1?H`Bw!jMrsme4;vFFk>9fNze5rtn zIh{2iY#qkMW~Y$epQ=p$r=AWmT5bwB`I5e9C3fmLu5;i{M%G5d8D1(oH%M9s<#|41 z3!*%i3LpjDUL=n5SJ)0FJ?vHvm(jSTx4H}o zM_K-;glR<5lop9W$AUaYxth#0ju<19jcp`_X)npBo$YF;pb&yz;k4G$&|S>A5nSqV(f?Dev&^?+6W?Kn$_&!NXX4|# z{}ZbqX3ZFzgvhI}1=o2E5+aBrLySiGQ0x-VcyZ`tkq?hY7hDwk1saDstdSSGaKQy1 zF(#nkib~QuW~!&J{3td(9af`d<@%`3?SJd2truJDY~kmDAgcNd&REA?r8viVR7ie= zI$xv6P-?Sk(_bW@C+Aq2G_eSJ9=B3nZMB)z$gXV=n7gv|OJJby8OosL+IHRK57u~U zRMUj5fBw9>CO!Lc0s9F37VMSS1io7_J&a@3^IiX_c49b{vnKGSjPC%?ywckV zAiLV`M-t)nnGhH9n68r+ZzXI64i|^4 zOX#vftIC^>R!f0?=`T?eY8r{|7oIbCyk|&)?7qmhHEKKogfINSlodM*f@+54;_z|C z8cXCO)vMj##~;NlER!v!@$L_`%XdO5EX^lr{fbX8kWjEwF}!jp8o6~0mD7LfsbK{` zmDGes+k8Y8j~GzK46>;`!~6k(gcjf$dSs5e30j%S1~HK_UQT=GaL;q{g&lY;?TeCw zW?8%(5*FHByb3k8t^sp9=# zIA5Fgw`n~VRw5MZQgc7|lo2_eX=M`|jn;0`!s|z)9i=zat0yYh_wKP_U5wh_u(S3J zh`GkKfGKY`-oH0tOgx`sWa~)-&R?!Mz&>5GOdT)-L^?Xb)iyT+xUUF$gi%uS?Hv$7 zbw0P6w)g|b?5<`-$G5TveYf`Nw(pM7Y!XPl(o*;;WYW|dpQh-yP z#`r$P8Nf`)E8xD8a=OgAMM<=h!t)dN=C%EYN74sE(Z+@l(d$k$Vy67~EaT<2o>G>F zjJ}Y-%s&m&%e>f}2q#htZjdo80_(b7TQnnfmpO0l8#Fx(0=U&*N6wG1}uq0)*P>d;|V{4yX^36Awdapjq_||2_YS`B+ z%hM$)RSiqBmoiu8Nu~-4jx;G=A8s>$@=kPo1bgb*foTqQI6TkK(yS6cpk)ozQkL+o zNg7phfxGBG97FW(0SUaY6LH}2(xs9(U&`5TeNz}fl+(_AAkrWnm3d6Afz5~*0tHZqZLTU!OyU39)sZOHNC3b1RoVZT8e5|bV@UUx`_Sli5n~U8b4bW-U5aX zvpZtn$vbBKmE^Jwz);K6iHhr>8qr5lxTKAtr3`gBc4$& zA-u6m2#eizh>2|T4FA2ibSI>Ic9ASn#yu(^%j)&PZ-qU9@XNIC!}5YqO#LD!g(+Cs z3^@%P>wJ86Uc5w%Ii&98^p{2aEV$O^JUfCw{7y`NM1IrUIpW{s2jIuV9MN|)-~^vH zXhcan@lyf?&PCaztKPuqy|1}x+q(G8DnT-gJzfV)T0P!ddi!ACLcJ=EQOy+^5fS!j z+v~p5D^2Qf{>DNP{y6%?1YKZmz4Wx!JXD2Kb&RCGrZrgy=?>y>FDIr6udZ4)JO3k^ z=@-R3wj9fHAWLYDThnd$wi+2Vn`i!-xB82U{$}pdh8$2a#a5p4k9WNT;r*LNk>b*sBj1<*D^ih zu9w~Ioggoat(qz*-&o)U%c2D}-5GnnHAhO~sN);n0+;%uorUMz1pxvfe+y{f71PxF zk1U^_Z(U5?HH`m|eBXZ;o7e&~@7NJFBhMG&Kubt}4g!@ww2pQ%BkfxFODTOBlLlml z8SwCRInd+hIg>C1y!w)Pt+-{%AbF+4L41|F9+=K7J=gZwKv>x~t`c~Fy-OKxS><5G zzV_0jcwMz1=I3}_a!|3h%@^q|=n!crp!3dqiCG^?yqjYl|+ABF#%`FRZg3Io)r9Aj^Q zQaq8*e2KY(29}k0_O#T)w5CJxhdlQ@&rRNQ?tcCV@;x$gLB|~p1w^DqF;ZExEmK_j zO3BTF>A(&_42f?79-``}F0FahvuhP*Em;xeo8VF3hH(hrHwdN-!QrjN4@Hk#%*gLo zxg+K}HFDlUz%#}|tFHZPGn=OTCM9U5Icz2FS&}YGgZzoOt~p?&ZQX}4awykm!vKbd zrNL=U8Vq~NQ?9pQP%Kem1bR@vwagv*cXrr#&Dq-DUY-l2iV432;^^3FoyccCse8a)~1+GTjfAtg}>G$V-A zF|IAy96in@W9G=hLiz~LK7WnC64LTvXfEB|Z%CzjdD{@V$rlx?DbmO*0C>H=P=4vy z(}N+7QhT$sKU0o#?YJy#+vh zT}{`y^)xN%2RqWz!LUB19|ef*`Epvfd!|Cv{6H5tGVVFVp%A=Ebmnt&lGExt@j(F_ zGFv|4zYG%YiY*MHRd5Fs;2GcLly;_JgO~V7Snz;`mV_yUpKaYPk78!mAZMA3;1{32 za6@^MR!X0B^I&?f1K%0&{Fex5I)A--Jwl?0L-sr~%1x7hS5LZLsJ@a7Jzu=&qrv=f z0HN8l=sPrbgOoI+8oVe`#@gGzlo;heww0-%QYZ|`layOC!*-TA_P2w<4hye_9;kYrH{7dSWo0DCACs^<^`$R3>@$> z5{*Wf!%LHT|}aogpzlO#Oy7*^I3d-OPR^v9o))(O7}bF}e=j z(p&I8-BLr7CJ{pYfY=ec676eGg=b_yZ$S2rMhx_=SK59$w*H$~Pv2Ps8_7QL@NIrU z&2hm?Iu{A<$Y=6iBYl6<{2Ky=P9z*IqM4c#*+QX*K$hy@exON0r#p>3LPxE9$r_4C9IBX5XRQ<`!$?wTF2Rg-iSO+LW#uOl z0E?CFSA4w)3~mBjU-kTh2gljWkyZ(8uvF2y=PfJb`Nw{?)j{uWYl*$r(#dlfHRSX; z9x)~f7!{`=AoUe&#)FjS0HsU@iV$gjr;;WeIz?y1sdaSkV?^K$gBS_rRSA@g`WFrg zBhqHc#<)`LVM0w|DJPdFXU1n0_T-c#<)D%yOlyKnGs7TC{a z>#{iz)pn=GLgi3XZ@Kmev5V2IT>I1CW{dc@$*5v8X;KNHFow z(jesx38f=R05{hn%%UsIq1saX4SW-L5SdLrGY<99-vZH*%fum&Af%#jmMHj}@SUBV zIY3BRW9eaX98PeE?k0Sk&IGwSg4GB%XU!}&mBa~}&-5!|pTD4yb@vvAnr6G6jJ$Uc zxGy($9DBBsipHD10%jcW=XFlRmYICp@45}HuTNba+{2J|wD(*?u?WHT@&rZB?l5}?Qfv%{yl#V+;KivIj3Mtl6ulUSB6*8PRFc}>8F_yV-%Afs zD#X{pbw}O|yw`uF;+)C7iT>!yjUAV85lJE}>IYD#@7o~Re_$?azk?r=fp@nXGwHz5 z3Z?6B7V=<;a)knF#n(lEr&?e<$}=vwA_L6~^#WcAxPpKB?rl<~*%mJp^=1K@Xpjw< zv#=~RMcA7Ozh+T2!Lt(7wb4yuccmjL!vB%(OELEscKRS36KDe*qpKi5Z_7W2)_L&u z=ilTUWql@S%7yPrUvaY#SH)-zUa{mby(~G+aT|R3+M_iT9Ypn$2hal)GBp8dB1K0! z`s6^hr*YzG9;1Pi^IoA@t|m%3LFuCkPH?RNiBM4WAzMEnQFI=>qHM%n*i>UlZ|bu? z7BIXX19Z5Nkq3?tW~Q(=Ih3Cu?!5w+ZH!2%06yn#T^$1(l8y8<$93c+T%JaG*0%j~ zA<2oE)DP068}$ANr03cm@bO(rB@Qw+@%vH3&!QT(!IRh*tUCa^8x-x75)(htl~O*C;pK2~b+1Y^6V4i99HXZHE4u z3@K3Gv!pr`Mgx!k01B6bstZO)({nBF8;#;Sc?-~xgpA=3D0cVt%(=p{>bcGt5FAS& zAUxR-#7YE<<=_$VGPHN0IdSaw2h{rl>eE2QeGhhaW_E$ZOln(oivxYA%FH}y zgdou}xQMZgZj75up|y}>`xA^*n-u&4qCI^Pf+B#tODUFRuCfK`4`_}jq228EUFLFu zGPNq`R;CS(H+3Ra@!32NCo@bXG)P2E+ z6F8Qx#}%#)1Hu*cI;^-gGnX``p{uTxj6{0PTQr zte6eV+43$Ao){f)4>jX8TN?yaZpGiEnn9ZP2>L^gF5t5`1%)o3nKPjFz)4m5=v*H_ z9eUEv8wdK1b_x$m0-`TojS2_n;_HVYAI-=}Diaf>!;#R&(q$I9W!85!jiauC+m z%{mGSAy)3&6IYVNNE*IGjfp}>Z-$B8hZgbMFV}&dk!KUnn&GP8Or&pDhm#D6to48@ zZ0P0i%_AW3>DCdi9SJNWRfMtFBBI z#Ga|#&-vZ!TCNLN-JUl6oxczI-X3(R**EAGn;N=s5Y2#1gdBfISk3;z22>Uf zA?rhtT3TJqD|zIyfZx*V&{|blfZ_t3Y7PgSh4=zJ4l+9o3ya&T4Eo=iE*6j!An>D~ zqjuFVgH+cNoN$e5t_mwUZ*+1?oGZoW=p&a`8`-$FmqDCE9ks0Fsj0i#KTqdN{HD*# z?A=4cB`dh_(whjUG9h&AImk1ApnNVYlZ28nLpK&L4n1EJTe_oX-WZ{agN!*6Pu*f> zi<}A5PLvih9w*|}2%H&M#+sETn+e1vhoEX^U>R(prR8EIW7P7zl*=I}o5^#Sc|n9! z8ra74L9^ zM;vi4SjZl=CYN8*_%Lo{Ld@B4sUzYFD|T8-D0yfgVh=eJPq4sRj2pSR5jF4xgOOVp zX8E7-a8Z=&54tm8IwtoE6qetG4)FxdIuW-&dC4|29D~y(Qy)^L{zHUw%~Lhg@Bdx; z-)|t8qOb1?=@>aJbi$YrRY0P=_zX(LuK33t)8wYRlaAOQG?x-M-RPl^;=h5Tiun0Ko_HoBj$D_Li9sylC$ALr~$CV-gXkQ8ffg`943UqNaMvNwLN|57s!=7vX zoXG8cP;mecu`j({(8x%EOkt03LCSGzfQ|eeJ8y)eR-45|)k#?SdPWMgfG1*~UwYQphe&_N*}PQQsDWl7ct+_pO~dd6g@ww z<2A&6YM>*L*0v7lwYGiUvN{$~urCON45A2B@SQvYlK%Lfi}IZzMnr@hSSheRB`89_ z>rgsc(VA()6r6VDLC#bVxvt;e= zy@PApy-WItEI%a-gxLYsqJSZSho*ixfaSC(c%u>K{%2vdMDkhrAgHWkYD!D*d zBOt|tnU!JW1I_RSn3Yk8Ihxr7fhbUjyyoE`_ps6}=M*3zAz}<+6)(?`5&fJ-j!UT% zh1%tExxSh~EIyf5&Nh|B?vt;4s&^5>q*YZPMVFCq(WGss>fULHgjDOQJ<51M<|)Y7 zYC}e30j4srJ`#{)E=c(!8cmcgi3 z+~D7#Zr}m#ZeVHp$2U?`dt(86HSy{EuF)XO|4JtXLLq>#s^bz;eLD+7jB${|*;$h_ z7*DPA^k4ID)!D_SGE!b$2Kb33q#;c+vzHa~cDmks8-{YB1ztnjvx@!T>7rvP<{?_IfM(-LFT&^ zfyoX+({PZ5Q(2HLbQ@!+dwM~Rx8kQpU7WOd->ST0qhUYUJI={lx8;S0`}6egJ*M5~SD#sc1r4hPJHBb-Md*9+8ktga)9?e@+(Q1)!VnKvTBVEt!WfA@p+D` zvPO9Gy@`6Fni;jAAhU92+xzNS^lnxhu znf_BJpHRBkvkxZweXLEXmm1#>ZI!xIh?|=fsKii7aT`#Yl1l$gPqxA@r^YTX)72U` z$L6^Ss8eD$X+v@&zpC$A$}=k#6vjO7gD?UV8>!G)5L$Np^*uB z5|E}2;tJ#K8G*yeAp67)-Q`17cl!ULfh;ffPEVQkg$iq?!Ejl2>Vqn3Sz13#ppk#Q z(VaF_KGC^f>UMZIM_sNJ2OY=ue7nh|woWq&x`3NAkyp~;fmBE<_vu@xATbPJ_)Q*# z|9AAEgcMhr7IBk}iL^)5(Czh*4#j(xqXsa~GxRH#X|cDaawaj_9hMz(;Rl_0GAoOc z37+`~*L;*ywQG}an9nZhwb_jXjDiLr@YJUdk2d}%vM*1`8j7aGFt9!tXiT9*Mx=?4 zEC9YEL5YpOo;59{D_h3W#u39OG}wsPz_YI2L>pVFhV2#}P$CL%i+sjCtMFjAF;qUs zW0N#@wJI4Fem90fs2!vE+m!*{o@o(TQ=$Zi96~-Y^S{;sEjZE*>l?1T*anArGAtIB!D6eP9`<|J5d=blHSoY~y!bvZ!)V zsi;(l3Y&UHJu76OF(~4!&b1OPIA5pRW(u*vF4vhON(<~zp#0pTzgL&EzBd0N>=l15jE$=qiixqG4I4J z!~WGZK&=m3NfDj~zp-FqIO}p6+GOV^+u8eGhiZ5zssgQ)@c~#hZ=Y;U&=Kq{VSC9U%hZWjA$axdzcti@m6UU(79B)4G2_ zp68=HNwNcb>mU2SIn)XJgxrl^u4~L>FaesM$wUrKs=9!g^K#-b|yutzM$ixORM_7A@7eVTD7H5Ckj&mqX6fgqYfnAZWP@iz{YBqMjjxC@G9{F-w|(?UE6kg4 zd3l^1s_%fM@AjDd^rm&}2tuSMCo zM1p{?AwdBtLw2|43LRq46|YJRbcnI-;(6pV18@9x^s2n!_?CV!;3;9W_nc=a%fF{- zeacL{JtH%QIG&i zEZVh>+6|B=@9YHb zl}6?M;fn9P+Wq3-Gqs-T2Z*sry-ZFg`qfZ)pr)?l^lrtY@i>N#wx7Vpl0`VpVjuu= zj2tYaVh*3S+l>-b2g8Wr-dlTO9Ygw0ar%$W5a)iT59(V0k7c?oM87s+F29g03R$fx zIa{(dmoc4rLR;Cn*;$hJl6b^f*7sNqU1-tOT@|YLn{Gx>N=r7tFVsuj6n} zgixPdavP@IC%fkI{itQId^gUEErPhzb+(`$YVG_b{5}ScmVnYSdN4|Mwn6@h=BSnb zL|%i>WEXu@!0!@<9D33L7}FrH!7XTB`cF`aVYs!ft6m%5jGS4y{0v#s&83oOy`?s( z&HSl_$NZI$rg%-P1ygITOChHfvf|-*B=HLC^&Z|y=^j%rfouwC=jfS@@m`mQOy`Q#mh<}VmucB~cKw`ukFkTEmAl_R7P*?QNoVad=OVMs za&+DmE{6Sn8KE?QmmRyD9iz#mB!KtGa7BAG@3Pr&Y;QRo=J~Q|LW~MhHmp&FN@dCD zw<_Lq>#_>F)S^^yUA^rZ2yx0NelKoeZ@4>@C zNr1csJ#>C_qF$qkP~v-bFYZd2+vR?A(`IxLA>ZN8J^&q`^Ne<-5f&*B$f%i#C%;9wAk&RAX?5S%(x=u()H) zFkFk)A>6lgpbDy|m9sqr0(C0Ka_-}Rv!QoAqB&mz*c?g|i-a8tO39|>b|vn2>9l&@ zMutYvvvmWP!fL=@gh~;Cy`|{z54LYuy}|Z;*{kmB^=8dRD>fs)N`jBg=HxkL-LxLV zMAhuyrOj&@k~*k-cls;_HN_av=34aVL(2hQH5gttNDT59jaDlLeuZEknafaZWF*YV z*yIjn?sdxRL951zdXXB@1w%hQq+YQV=;Q}=ODA2fqCVU9-?LENH zZu)k5_WJtz)KQOHqSq|XOA>(Vh2$>e9rK8Iiuj*n-pXQ!VMLEX&CXEJ+v;;W5CZ5G zr}?HV4Q$#54SqdMb4ur88++~FZ)xW40nhgSv{T3DCC@d9K@ZEU_xP7s~@YuP}{y=^OL#Mqo_AcOt(|sOY3n{jF&0ZD3^UE-t_;2x8&Nz3reM zu(Qj9dC+?L+DSc}^XQ)2O@^MzW%oRTkwfq=GUf@DF*nlV1W@7`Suo;Q@$F(mKOLd3 z{`@C0CsX`QZ5x8kj|a;vbC4%6wM$neT_@Xd2jBJ*sq%9T8t zp@&6|hMN#JDx684M{)RhT(-L?im4hlT_#e!=v;Aw=l%{eI{Fexc`V%!Qit8AoKX{V zl!QI7EW)nlFx!>2aN2OfFdJCqxW)5bTg&sZ<>=H;T9!P{rfi9_qsY_`Kd)I z{gga-m0kkv|Tq&oN20!xP*|-33Pcm}fVw<5x)X#Z%ThccX!n^>=+{>$Lsnp}63~nmh0jTIce$ z!EgF_4=REB@r7W6^%tk}fRHFiFfb;7`1^?x`1a^+iK)vdi<4ZQb=nxgRlT`U%`3aY z(TOEqfy^J9Vzn>z23;t-y7-l9RjA2w-`O*}AsUPz|1zr(o!;8mgfAXC#MRv;=~ky{ zv>JuJh1%TZ916S~5xDXa&{?n1EbT5|B~YbYM}EyFr3$kZ#EW*T=q3gK?5_Nn02~gb zH#mg>#@Tq!WAL9+pYG>tH5yolPFQ+%W>w388YG4MLEYL3^boNAJZ$5vM7nf$ zLIlEGW9Y03P6thqSm^#-v<|oQ18maD0wD6jlZ|v3{D2dZLti)r#_I4*lw7}aKX0(f zn%#C;&QsmrOWz9WX8WWJ%<6G3z|A02#1qkoDB|}(>#BGhX4{L3$+|F@Esd?6sFN0y zbN427aOS8X?%T89F*1q@GS-|69?F;J==G{+$C-;y4TcU_pk{WDW;RN#PlNro z!r^Yg&R?W@^eV(rdO@2-_M1ahaIZN)nISE9q~rO%@yz33Y%N1;W2gD8xpr>=&Wb!Oo+F7wjKeP(p31?&`IB5BV|F@vl*>X}$~XHPeg+AINMlMkl(FMZ<&zAZyZ zAOIN-!EvQ-wSQT@LZqQGlWy)1p_Y!3$O)6cCo&hE-?d!+V0@gU3z3{~?l(9j ztpHRA(K{Pt;I3FGI6DyR_Sv&H$Fn6KGCR4&HT^B8b|+w!e4&mBcf|Bg+T|d&_;`B+ zgo=l;F`pPi*zD4Ys@pYN$yiTOUWe*XodxhOc+4bc9p#z3iC}>2Y7=)h%?{GklSp|6 zFDA7ZU8!CKOLl=yoV2M%0Ats4B-TcyWD9deV<6Ik!OCAS|*3WM3oN~-5b{Ln)fcXeSMk4 z0ybE()&f4tPtLNe8!n>m6a~UL|38+U0+}4mzx%KXyzLAqrOJE%DMzmYAS2;J6_i)! z&5%c`17(;_G!okYkAvaUSKlX->dL4e(KW$q5_4LQ2Uk|PQ@RSHa*Ir!GDL!B9{Z73 zJR#lS8kk$Y>-V4H$m4wQ4h|AuKIJJu11aB>VDOy~>Fck;L{n8=!|t=z4MuX=y$TzC z7jb3tt+PLgUvih=CDGE$g!KWJC9#F5xIgp5K%>ucMESCnFv)j?yP9Ws<;rQ#n4r7^ zpXw#zjawMyW+a4hM6^OX+6G0 zyK5`!fH^Yq&$~WmBUv=77MMc^lMpO4ZkLCFYQ}0y&!;wfR-TgYq`L)GpP`Fp^@fsh z^-BE^*3^q5DA4ATeHNvPY!RFr&8#$rO1J5>CVJ}^mP_KfVT$bo#h*-A6mn$Cgo`T; zn3~&t6cx(K-uzHAa!p;aCt}qlprBd`zR?Px*}7_c)a-^6&H2)WN*YD7Ec2sgK(=2Y zN3Tk-T4luJV1GMPQ_vDMO`h`bQ@QsP@zT9-0wThm3**Vb4jSR~lm|z()a}JmJLhsrIKnT?rNRTA~dyp)}GG>}O+=yX) ze+I|$vnv4t@;EkfpePXpy!)g-=S1u7Xjt}#!X&F>cHDU!n)KPm zmYlt!p0QR-9qpa&<7#BWR1~i6`^=129Lnh8sY8|6)zCRyu@k;TI`^0@U)I+Hq`|zv z@B_z7kvZld{C}-PhQ>~I*x*>mXu-mCveoiB7xJ6-fsAmwkWa$1abYNrL8kkp{&yyf zg^SK;Dcb3~uC=BSJTZ+v3J27;ge>%|?mv;;GnD#Ti?Taq9Lz4x_=6RWNUI;o|MaCo zEZ?cz=S`evHh$5+)xDM-9v?2Ha;j0=5|ekdjcn&C0V}Ory6sVkxCZ4v{m>l7=V;j^E^vt+29krP7XZu7h(Cq@eq8!`kyL{E*&?Y>%4 zM}D2S&njFNmOv+=mr3FBzY4v%(cgJMl44?g{z?qYJxTxueH&_(uR7AkqK~KG1Po#G zWCHu38Mr+RMrm`X!|QKqs#0*ABjcr7p+IeH;jIJu1HtA(SXtTq(9=bB2(H*O z1g@g!9KKa-mTg}Q5jcYqJSNysmtGi6&uNwLBw>!eFv~UTy!97g!B;DwHzFERO>MOD z#d?E9y@R5lds5vW)_%5BJrgtvdOI;ISB5BU8XPW__)q=(7nTNJUay|u^Q*-_WP8~w zUo7$;*E(PD=~oKgr;TZb5Bmlc!P#o+pb z(MfD>{3zGGWSrL4eQ~FH3p!I1{E2b`P4G4N@(GA}=+Fw$Ro*Ndv)5NV650iyFU@B> z;!%MPR9dn5YtAr7j!A?tB&LR{Jqk;S)F?2>;vW;85RBK|pZmtw$&lePoN&M%j%d`Av=PH$dLobhH-!MKFqaZoIW+ega~%Wd9xfv zv)>t`OTjq%vbroSA7yrLg@yH3eCL~EkJr4iw$VPEHV*WDq@MWLx4*6we^1GF_sG-w zZPwWiBG%z+eV~j!3A&E!yNna2qFdCtGQ78aY|4znlz286Dww@AN~Ks8I^1aHuPJ!^*V9=(B=T0HY3$(=Yuc3laC`r)K93V7A>7ok63 z?j!M9LwditEiSygoRL0~?=Q14dxr)xxCpc%Wx?ay0-;NDff$Kmy5PA zFwFq2afYWC4t+m@^o4^$`x(VJ`3k*ym;H$jO|2-==#Us}^1|0?c$7%CO7VG7;B69U!)MqryVbiPyF8xs;UwuOSF;Z|{X^P5;t4#Y zYzw;{(($8V_S@gGDusE#H2bFPwHIqAstsj4X<*o}56}TRrT0e@8+7;P@>fZ|)>Srab2GnRq6uvU~cp7V7u~8y_!JUa1dr@uiqD zLdZA+(;`-1*^{}pm}~~oGh2a8{B$mDz*-gXn9FV_3w@^b{508j*<=u_^WqB6r%OVi zW_9Alnn1#mAs@*pzf%%?>)0xGkGsXI#>x zURX?>lTW&;+?8mz25DVOLjejct?h!`Tnv z&pQqQL)5`S4gt^$iIyk_bN@KI*DvIZKj0}#L&`655iGC{8-;=oS#j!=8X;JtKF3jx zSk^XiZkTt}&rX6+!x|`ZWhOWgse1imh;3mNI&ASH!yX2xCdAQQ8E}HS2y5*#$$2}x z{FYAsYh`p-lv9h{Sb7ltdm?iwn__sjbJh}GX*g;?rSfy*Ep1FNl0Zhnp%#9S^rOfL z@+AHQX^tDA9o@~$*cr;^$%h~Kz3zRM{ePv;e>ZA!5Nn{;gV|Pe>RQef!{bM0>5TAb z!js;e)8W@d&U4zDHO>bu&GWNMx1p!(P-#oIwP6A0cS&Ie&FWa3acFzw97^+#$j=D~ zt?6(k0pU-!D%t-iBdtI!wGo^5!OI01NE#As*ERzW6jPreS&}C}nFQacsrJ9@J}50X zt!;o5c8`-2)>0Am2Dgq1AFzq{)oMACs9TKl{eK|GXp~&h%KFyAK_T(h!Dxe>f zX=BY@O0jwfeDz>9A`n&gEzf$8HdcU0dfSGTj84MAAjy*w_s2NoGT;h#lmP3nAWPDn zsR*r@ktp4&-05#k5cC#9^-FNXAX{U=p=Ka*I(flY%q)yS^Rj|!97JC)Vo7Pgu;Shl zs}-CA350jECs*ISse{jGKd}bMcn_sB(;q%%^yLJ|q8pRWDcUc+BpZv!ghg>0w{YoP zuCZa%mXQQH63sXSfEVfhrdr?(324E`KLl_vTuE=$B_-Qgv1bP|c;4i(#lf5`Xx^!H zM@s>KCpHYkUd4w`mUPxdDl<5aQ zBx>~*8>}w!-}-W@uugVxPGGrSj^KQCqR1^(GAPWs^$gY7vzIB&Z#ci6E+cYBF@SZ5l0PpZbN&s~duz6(H1`r%w> z%4QUwrNT?j96_y7kN__aHnI@GKkxHs<_86?v0hL@kTnaidQ*Bq)q7oqkXL|-bk1po z6d>*sNlMMJ=p}RN>J?n|XN=BaWzTsnU6IlH=ZOf80MjBfcAw=4Ik**M;N9JQ;RJL& z7IE_Wn!suZndv2jOnJS5SlB&fH}4>vUR|n}99RaM;1k+7!q%L)2oa>D4_Gv1#aJ|f zP^er$2ZcrDi%fgQYb4~j$VxAR#mNBTO@lj%BV~+zvsR6iuI`x~_N-t$vd7fY44Imr zPwdMA9W;0Dn_a8hF*p_0g0jR`*Xo}SsuQ*pjQ3enySJs4v7gM&jk{Sw$y=`o z7}Gw4#ozc%X6U(VLD;-fHnf93ye+F-oK60 zrPt#M+;Ro$G$+daIXm@vs|TOA#Bv<_8zYx{;y*Z0QrzVWm|Ex$DLt2$sp2qy6+{yh zOiNd-oYIIPG3bwTn-&1@yxCJuw^&Y6x0psb=q!f?Tfb&QMegD52D^y*ch=qNTb;a5 z$z5DL7mcQ|1C9<-wlCj0&66Q?kOOcLYw7&Ju1$AyM2YRbI80izbQ7c187TG+?u9v( zBNKQkAJ%38Js85OquGOkbAFW+?$&qeZrBv8cE!H#pIgEPvcB6~RSUbfL7)Vie*|H^ z9QbC{Fj>{Sq^Kv`l-6KrY1Wt))V8{^Inrlf9ZrRz{q?tks&*7^vL=e&{Uf-Dn*}Fo zzx#8)v0=MKObqU(f<}F88!(iAROY~OhBB3Mlz%wTawkTqd zcj@m9BQ@qAhctfeU4pq93>^ZI&?LpX;tWQQc2SQBgMt1WFYCDWzw=ckrh@VyG4fqP zC;AsIBXd3?5IRvRuMw^#gAIrLO_<;dS`M1$zlEpDlNOpL0EbLVnvJP1?Z?KxH3gcg zzXFSm^p_xFE``ts+1ShQl$;ApThS*+eC|cp{;>*D?F{U(HLmgcU5^2e$6a9wJPY1W zt9Bsi1l*vjU`S0bQ32+uD#3{$r#S?mLkxV@e#!{5<6p>Q{2NLBiO!w0NT5UIRGUJT z$R^TgPnipGtE&L62#tf<->D4tEdaG69w{23FI`4Yhet^g@fowe@0*MjIXVkCQC?Gh zucV=|OV`y%${|9pm@~8&!J_;t3g+uSjCJVhoJOsf1)4PP8P4skeZsU64VL_~3EyP> zZ>L7I9MQMv$iS2~)|q~R@7F$J%Z2+GhWmidX^xiX>FJ~1vD9_Zn-@N~Vo-sS*53uD zk3WD>ggj8gpnqF?k_?OoLlX2lvH3tydV!SX-vB)mru}0MNHZ6;n<|IF zImN~p(Z1jbj{f3-D9>@H;f8tOa_Ke)P3GKBy*Uxp;xKmFBNEKWAiB7au!MpWiygh? z*vX9xYxnn`7@KkbOHEt`V*UXjNB0u{wNE6ftB?@_^_~M^nu<1EozQjHQF6(mwD0!l z(Mgdf+hY>J`-=3Nm~nO_S#^LO+YAJsLK7Zc4zVBw*_)R^n)OV?3;!3RH=BI9mNvZR zVS_mRaeS5h)J+3J6?vLsQjSq7=9Y49;mBW@J@*)`bWY%80fFMT4=Q~RMR^Wl@_uF* zXsh@U-d?Z(mVU#_AS-c&hnnfQrOm1vUcHW!%q&I`f%;RuA z5)Qwi4$(tff!YoF;L8QbGK+-l?i1&~SN%ED$&B`*K}#O|nsxfIEU9XelOI}HRgw;aZOB5Fw-J5}kb{zGFNx-O1fOFJc=XDmcgnH} z%p+@{_tPlmO06+-D^BYqTrP}o;?EtVmLOyvO_i8SR#dKVJyfBQ=NFa3pRv3sB3X>Q z6F13^#l5KOJ)I|ElWK)dLRMlZsf8{MBSbe*i;PV6V}{%zdsYI-AWDh-`{l+y6E+L8 znk|cYNVoRlX1JFnZz^W#e*w%C2I1>@U+={ zf4sRJ4d4u-U*3o|l13idVGM>#7ZNH+L(&8eUlw%G#cvFbW2nUs`BS_RH|u7R(4PU!B>_=<9U-2VYA}=XM?&#Fr_`-hYqRZunLT{3%rGEKb!wZ43|VM&-pW- z9nrOWv`Cz&4yYi=7F^+!stENo2#gM1!4YDzZ;Bne)MoGrO|GX_YUIx!CE8mYmexlX zn$N6;V}4x^o1j@u3u zaNrgk@v^IE@Y*X?SL@|ep!NNkV|{XE98m?Y(kW?sZT_08@P2*<^&<0oa(hI@>ck5T z$<;<_jPK9jwTG#^121?bjC|rSpm1eHld$6>M2#}$W3tSCA;e|schea+X^fd3A~f5# zd9AHGR6M@$f~eLDypHC@rIAG5z66^2nh zwTZq%;Zj_cFXWGqMe!(=L<_mYvA{}^d_fN-1B1?!?8b-Ljrnt#|4}N)9ewj~JwT{? zY(?6L)|q-qL8k2N6uswwx}$|L6m<4|K|qxye?b}4;|0m49o`Ac;1N6#oZ7FV50Pt_ zf!rq&f)Q=Snd~L?rpmCYah3vqbK^rY7UL)hHKF7-P-}Z2Rbb~itq>8U(W>a3h8WKx z5K6o~A;j_t6i09T^vhxracd0_@W!jYMEc9I^216c?A}10z6z2hjX$aIOtyCQeBy)hllB(jUh|Bko35zB24ZRQz566m=olA=3}%(p6u_h*Szg4=9&5HXcs;DZ)t8T zATPd4YA0(VoSvOE4a}~ciyKK~Rw6&e&fUM%+7)DCwVVU>unIz!tWWgJ8*|+TyW= z7;!B6JO)&ih%9KES6FOI#xSad6Q+Tqplvdk;(_c+QOM=G)#i{E?s#QTfBW#RXe}MD zlb0%)6DhaaiR$m(fnQUz>~Bf;%}wKi*Vwp`Ja<7s3**>vP3bMLeWFvl=wQW}RU0eL zV*uYa?yqJ$IXTv182_DtMep5smAWAEcbuYOgf5)0i zhYhwF=a9O$>4gmq7Y`ls)#r1DW`>u?3r%U7hDCRFVQReX+fE$#)oVW1#sGbUi7cJz z8{eZv>@w=S$j<|0O|{%WH32I=LAyMuxi;LlFc^pw5oDgB;3o<%;E%PG1KXv-Jlp}9 zZKZw?JU5y<7OzBHoLcT4qQ*fj=88hI@Lqbf*JOHS1+-l-3Dpp}Y?SQyR5dsd;Fxdz zYi<12O%&LY?uNyqB|l1BvFJ+3X8rQS2!$@622;YUB5aD;&9tJs>kOAWo58(W1y`_( zUqm$+f8CtUY{`zd-e#|*a&Dk|3Cfc*WHt8-MAoZBgz9n-r)H3kKtHsnQL`>=CB+rZ zM1olfAxPRJ9nLGoklBt=HEt4uwW8>_rzyTSGSBF@iy%LffJX?jcT?WU*K*Nx9dnxh zjQTD^_z)n#c8KZ4fRXNJu& zWk%RkWCJhWKd+NPSXqP@0k1a4-D3?mPwEsB{=?CACGPoGH_wi{${RYfF0qtPqrnsq z^(&X6JSBf?6_1RJMc6OS$G;4bh_@_i0zOczIJ8P@^tl^$bq7Uy88)-C(5QD-hX#`h zUAJ-uj?K@zabme^K4o0&zNS*<^s;;dgev5ouJEJe-Ke)b&lzQSWU2tR#PoW z10xiElB}B3SA1{2jS5nxB*j!56R1}ic8i}!UY1Vx;?gl@)rQY5cRdimUx;QO9r|M_ z%TyyHBG+;|k%pF+P#>Qyp@PbdDuEH@S4wO$m)Bk_eARiE02>88Eb((Aad-mBqsC(7 z{CE$RHfEq0qcqDb7FrD=(rlLQF2343KZE2G0ZnG_$w&F) zZyZs2`~tsTj@&*8U1$kIo`{?uJot4=gon3>K8xMx^hc+`uVj+q7LW4YSSnp4q*T_@(t$JnQ!OPXFXKwC%0I(*~4)Q?#cJJ{`E{o-X{UkQn|f$RQQ1 zLdP0EpK;+u`#gumciYW)x44{p2iGtW(|DWCGwsuzy{N@WH{j8aQg2Fo8bPS&__CxT zqV~W37vb^uJO7RVg=xCswa}hFXLckxu&-B!`F6>)Q1rdFu$2Qh~0ey~!~!*zasgV#(1t}`0ybjz6lW))bVj#I9m z6linn;&?R4og6P~Bf__F#B zfq**x4VM3({qVo2yEYjv%2+x}H)Q^MH?;lD;`0YLH?Sg+okI2zQu7D$<_;04ZWPEA z$aW5?1;Kf#FCRBw08^554Xc?9AJbXhS-^T?*Q$Kts4$VxFCZW#1p(1Zlg*D^@Zaah zT2{-D7(m1W$R@-tpDA+E@h}jN;TY)E-wDB_6UnfmsX>ML^sUrj6~xX0KE(EX=Y^qI zk6-8L-$G$T6xM%*WE;bf!cxgc9g#dAj1C@Osbofl{n!B+c5L}BBBcQ1y=lB%7D?C` zC+w@AT`r9XMD<2Er>TAyE~c2rTE6=)*v?YQFmicRj3ik#X-cb@uj+gYX`NtbN)$?;y==t?mqUqO?Fz6Kg zMFA=p&P&&{2PV;%;W0`5Q?WQV&B)mj)oGTS;l%zlGM?-2EM!XP*cGES+qz}xZl3Lw zUckJ#mH%W> z-7m)#zy1$bzTxgdS_7vbgV;ualb@wpg1Gs?fo*3IhYPJsW0psSL2kF4_~>67UscnJ z1y6RT#=h9uQF&&Ru`C^SJ#OfmA!ZzAQrl{9nWsSk(N4!+f({?gycMFdvhAbbDe0R< z4YH-PzCS^RYgp%rDyHX&*`|Q?MgA#N7|exN zw~OrToefQiGAcIxvJ7qG`G-?25CfHtumWdTZsYl}14Xz(K1Dg06mM3N*q^EchnV76 z(0B&dnS}fbKVY1X5WqdTd~*40zScYzlT8UA`dzX&t$g>m|6MF0D6W93|CRKaGx2o< z>k@1|EWF6Aip%y^^C@afEF;4ZNH7$={l^qQ)y4 z{Eu>Ri=V6nlE(nd!CqB^o#(ZuE1CH2BV7ZfVzft*eV{s=Gi^bwUI^c|7xA;6N1Ira zHxWi7Z()$|u~Euq6`+U|R}75bQVy$!2BIxXjP8+E*0)aBQyCuNY=zn4G!#e31n-1v znj!wrdzuLsPl;S4$>QZFseIB?g07|hg`YhB=QdyBmM)KfhV0zz)9LySf(dUWIz+ER z;wSZF^2$u!0yT^HW~3!ib{vhP;dTWPc@u+lp5{vMFzY%WqC)?Lp$F=wA% zMN`x>>2@c7vIEn^`={-)^^1vSq4t@UpvmqLlGuJ;e<|yad`%5a!Ea46iCOrISMoFJ;!2{+EWs@ClfaGwMk@E5CBeB@?$8T~MvIU#N9 zIl0k|7f59k^h zKd%!f{ps7BkUk*jjHWpXr>%D}mB9P;5nxEIpq>yitgJ(M$GJ8T$K{p4^(0LIo`3Xv zwjS%W$C829V9e#T(+z>_k*u?<^^S+tR;;#ceo{LiQ10G)rlrCT30x6j>S0&5sOCBb zrR^3Ev<9-+LUX59T8?-{M4fjUOp9BStQL#gHX!!bZM##o=R};wPC0`F7mzsYM*GW{UqEP&)x|_$^ItBmxP|o+M1{B8ND7qH zmCGS3((^oA3)@r(R!|(1opTz+3vq7&mO1`!-Q}q&r zS9&%WyU~|{SIxZf4723NH~{65jNWrqR?9?Np9;v>--}6>u$DTs-0W@c0-PNr|7TGN zC`V}~(BSQTuGBkyY;izFhe#g;=?KvLMH7XaM7xXA=JQPTh|j^nA;p-t2S@~|0MMl{ zg6>0v?8Twp8?|g>ArEO=+7soO&Bk|deYzYRQyyd*T}J){%O@2S47%vn3e-p9n@EGV zBt9ofHZ{peY|i7|g1;~lIWUA{vG+eS0vO#Uu8*nlKOmsOVhctx@5vS#(?{;$zU^4W zu)4;wdIa=XEgB@N)DXIsU+9%d)V3|D!#CT3p^B0$^*m+D@Z_N^X+4mlY7VwFr3)Iw zK5Po`a6mc=qdd}F7njITuTE?4=+UB>vj6A<{Z7>d0~VYFVqcm;ZA0;&P&9Jl+z+){ zv39G|16QkW2B^dypu!IgE7@-o2>n3vde&1uk#GUG&m(N}d=h@qHtYQIRN49yOM1t} z5v82ZT@*hub(((8P-Pua&KimtqF&t37sagfR9jZ$lOLJKUuJ2{>IKZEIK6*uYqx(39j_a#=k(JQ1`E|)sJ{b`3WcFg%f0c>e(P>o1 z-QMlTUMYm6eEXI{)@??73&{9F1#xeJilGH}JaXtTrxZ%u<{hRYAly-F5{LpvNu;P;X%$+)+T%1IQv|2kh2qr_pBJk=bn%0uKX` z0+0f&;J%cw7Z+c>j8;Qu{O})CoL@##js&C~Hv}b&c=7*y(&mYVNx4%Q)9GT^3Tf8Q ze<&E--Nz&wb-m9080M+-Bf$wDt}p|w#7*cKZ4Bf=;DH~hD~pv5Ne$#LZX^}pZgp0BRV)VtM& z`+tmB6t;&ea_MSK`7+o;x%?zMe&h;5IzxwbWxS>Cg!=%LJ!IE$XQ@2?m`Jr;!6~Mb zj5Q;E?SGKJ2FRDt?kyen%rEGCzKLECcr8Q~?L*Rr2D;Ombp?q#QBp=F(wu^v)}u7P zF7h|UBmDB+tQNw{(P*!4KesOksteTXpVI<@^QzH~U}jRB zIOpiRWo-n_1#J4Q=aq;2=O>wF15+rRI*2BcD^=@gxP^MW!oyNg@j!Qn=*vK!K_n)q z`UafnAN+IGs_fV{N)L88HTK**ON0e;;&u-=E=_zJXtNwm-~XZr{+SuyGpT&A*mN5w zhuPaqky0UjtcRT>2^nN2*LU1HeSN*_sJn8cIfia_R3s;L*Q30D6oLp(%WlxwmBA4E zQu(mQIlv{rHKh_%Q|nN=71@UeqV`EoV zHyKZ2U7Pp*4q=nePnbiPovS{NU!?|QhQ7UI2oIwrhh~h=SgX}#Bbei#T9f@;jy16P z?Tu=uk_nXC9OfLV&O=ZD;D&DoaU=wTpk4|-ypmw?B}kt%qH9rMUfF%o+eVPHI2(o- zu@ObhQDrASPL;)3iZ1KK}9gqQmJg^U;Xa>YL1PcJC z@#I>%p!koEaeK83|5gfercAxH8}Bjb8HBxd`*w4QVOP75PnSKujh!`&HyKy@m}`GD zYxJkR`t^?&KTy$Inqd_dTh8K=)#z$@)R5-$XiOEZ-$M9l=OEOWzehYz+ze`aMGb4yesJa5)DWf^O?<>_)nVxcvThufE zY8g3A_?5W%{8t2xsf)b0BJ=z%JYRAB==3B@jxUX10wxJ*xm_$)*^cRgRWHGXd{j6e zBZ>}lbVoi~HIv_>4e7Xv5Mw&^E)vK_$-vm_CS*^@wex#OqPeTwC2nfnhl309DcQ$2 z{NI5Q9kxu^bR;t}=og-jZ2WaS&T`)LS|xpKr9u3RZ}kv+XFkPXkW;oGRZ}*cPH*3$4XnPqFvklEa_#4-76(?Ylo{G`XRTJYMO)Zly74&@{tnU?&8qlgir5j zw`s+iG)QF#5WCeRyL8%OrNwFcQl-!?BxCoY%CBt)3=!4zR#7Rqni#X_(Ulf=X!A}3 z5(OTMEPj@+fpOE`)y+%{GvS@E;YWPneLg?5fu1^vwcSjs4`JK2gD?x($v5&aBCt}k zY1*N*`8(*)oJ#ZDQkgUf-daK&1{d%CyYqg@(c{@=*;3d2DTa{eDx%s{bZM1x87|$E z`Y75b0D;E)ks727$mDD3ORY6N1-9<5=UpbT?rH?L1%*X$TO5KvX|+SR3_tf9W3E@Q zBE>HB&A?cTeltYNMp^Jzh3Pz+EaFmGtm7p65!6RnFnbCsnD&4N{vJ}Hk#vvV$KXWg z+4Wz6aEhBb8?7Y3Zpwf1aX?rE4zXjY7j&I7Pvtw|Tg|JmeJ}oK#RbPqAGiGnU*8xb zO4MvSwr$(CZQD3w+qP%U*tTuk#u?kT=S{xk-Ise`ay#jyf9y)9YFBozPF1Zn%>6{e zJLf4h82~GH+m*r)$VxViXEKJNtG-H8b;Ozu7r}8kZ!9UpPp`1mn;3v2Wb9KJ69@6I zhpD&co54hWSasHn-SlAUm@|L;IOk!}p=R>;FA@xspZ0g84DQ#KA2d?{bT$tpf-GYI zU>r30%_`M(bNEvJq2__5{2w#W)=y%;Q07D?8Yl^3N(xBr{sF&>+9J7LC7yBCoo5JE zbl*{1{W>>XA zRc=XAI|!bUbLQZvBRw2V*@?Mw{L1k#<+#s1j- z!2b5$`z#XK;dW{$)y-#C^(-Zx5q5TYEd&Jnwi%pCt9*{J3pP*Jhu*vKcy8fX50aOz zRIIdUIz)5m)Kw@*Z8{!Y)1C$vOdNEEY zOas99Y}~ygeq)}!vkYohe>?CDg{$M0;4MXZF0sYp4ZA&1++}vHy8)7<{93wWC{@l` zWp2?0_K|xR1R8iZaV`io)ie6sl;_Kdfkl%*uj%h7iXC$mGL0}YSfp059gz}e|CgLZ z?$g4!Z+TYB_{`shC5=LjQ|Pp8OmjsZ zgJV$k?v74$oDNe&e;S>nR_>OIJXF*`y!yS_$V)DA69w-)LHLMrICt;KOyA%;C&9mo zF>uEnYsa@S2~dQ=y%(qYyu46zk?!a6<7p)yh3rRGCUrC543g_)_u1Lir-j8!;j?8i zupz}*b;dff?_RGJyW7gi7;^_VviUHqwZiRSAPPMg7OoTmGc*_y_k4P4GcpRWan~>h z^3llH0Av)hinCJ?c>LN5wcVIqAj5Xwa2FBZ z61Zlf$@W``3ARPK9d`$cq#&;J;v-D2_EEw#pApu0gLy;UFyd%vvk(O$cBdX3?v7dh6|E$9Zc8B*5Q2wr z9>|v!MTK)F0U#S&mE3ld&}lJJCdD0yi}G9Upf`h+Ac8PSxjI|CIC6FS$iu;l{($=q zov^08&UtN!oGzi6tK6jF3q)9Zp4*2TI@pwf38X}@7Q78;!0Sj{CRrP&PQU4h=!7kK@!`~IA_kq~P^{{&xssx{wg zGITfn7R{9t>A$$c8S7PPp~ORYZ7Ch5__Zs_R68miTxx}rEl>DWrFgX0s}|P%L_+m{ zl&RVCplGmU+%41J+y&|N8e9kt#cJ0_Qhhyk`KH-rxE$W68Ik$Tj}^2$kD9{BE+9Uh zPG)5VY;nhxG+Kf$tW*g)1D&q7cDm2YT?)VyAD}z7Fp9PjyIdY;MthT}){fs~Zmpj1 zcOkCCCKJ6s?UlWELac?dncWFds*$8*jhLL|*&Kb71$q#$%nFAV0`RJy| zB;re|{?&+`SB`yVjYc89oH`cAA$bT$TuV*2GES)Bs`6j}eahasKU>}!SLxh>s^EAU znm>KxpzvLERAUe=MqWF)euUF$g2&|`q&H{KYo13XpDNF%eFQoc@F5l*RS3l1LMlB< z3dSByXJ`12L`l@Yn+1Zt{G#9OReG=Nat(dGQ1Isg!cog!C}?Or&ZP;SpIZ(YR2 zi-r4$A*@z(7*81fL=v67Dlg+HV^HB?akQ#Rv-$wWHRQ0_sYKl0_Au^@xkzhT0V~>N zkP_YBpCj77?DF=wj=IsZ`KRJSyB)!6q|0bHT)K#D5v+I(sS7E@Wdgp~(~somb;2hG z7j9*bhudRp4BR!golx7}>?a25RIVQ^-I)@-o=LQ=U0|!guXjA0oTOS;%bm>&gYluu z_p#%4JzD-v!BUBA-BvGQ%?}CO%EGj>P4hzh4if=g3a0|7ivd_2_U0Em6$IXT;eiO zgF}bV0TU8XzTGVMR~9W%Cw(})c ze~qkWunwasGMmA_iET=41lNE*t;8?T_xIi@37qQnsYI-6e(YG=OR-C1lq0|}c~Zs< z(Xg59d%Yz4sKjPM;fC}=(id*tbQR=K8_mcQagbSB!17FoDhtJQjt4D4?@i0Y$Ud(q zo8SwX_Jh9hn1Q{2kR%;xg_p#0c;eA4qEWndy;GAfEn_O{Sq(ychj?#Z*3l^0rC z&%(mR)RCWebl&q&@elglR6u6P-vX2w&F${Mf3HNF)7ob0%pH5{Hji;yomWJc%p+2U z{Mybni5Ob(x6C(2r&1(d`<#s&jT79NJ&PR~EjJ^#p9LIrwoRr{pb0=xse? z-ch$lY~r)L=b?;*I1I4MAtPY&`RBe)*^<28A9kiYz8)?j3_bN zv^0a=`IrAE{H#pz<~33&3a*h=?qyiwW*oOYQf8lvRlg)V(mb z=(Z_9APzfTVs)hY!u~U;Z6vz$Rj|M^ra8kCIV{n!{pbyTF@I4UDuj#RL!>%fZ+t0R z!$)jmd=T?C@i~`X&u|wNyz|%CM-956YzR2uQ7`g~Ni?8HjB7R-o)zb=bvj6yM6mJDNmzD{W<^yz-N}8uMSOprT{% zJL%6n#Xy$^9Lx1lKyjo6G2}{OHXe*ep$(DM5JjLQ*&V!|rurltPn~OwoYG0~k{^kr zvD(D`b)I$M@8H%0LGc4D&8ScI7OU*{g!12r>XdDQ zJgW>8=|eqlvzJV%(#KGAD~(CNBnJY^@yje8*7-JEst9UZ29gj?&FA zs=U9ggrgP3SSqBAtx<0>NY!31Qfun4S9wl@DAtmRU9suwc}J@PKplG$gJ7?!Y!t;cSp zZoY53iqfe$tU)|M9@HbFD46(KdKA3Rp>ulgh>;gHhi`Od64>u?PDwJdIzR(%j;5b; z-Ds0$@%@iknP13-HPeKU(0Pd zgMmVHB7!L8+vJ1G;gJ)4iaq}HZ_z9NYO;A*IBwg7*{kE=n+4;tzEig5)o*O(%T(S@ z{yM9SkB@(dFu}2MV`s)Pv`gxokYHCE3w59?SEEGA+h?ULT9xopFp-B|Hp9M&BIz#~R15`%45;W^P zw|5<+Y2IyVi|*_eo*K^LRH%Hq-7e~%%%6q{%4g6f3w`WupT_}Y34%1APLY+|4c zkV!EI!JkJ9h)$2Y=XTaegy)RbaWzz8)5K4*!}#D6%=s7ZL{7#O^dvRyCf-1+94HYX zFK2%TrMZ(j@P1hniSE#i5Vo-)@Ny|Z*wfi>dW?J#y*Sixf};Q-_i0$3jXme#M>scp zO2Ely@x7g6w_IjHH<+&6YCcrg)nVxARR|JPk_tlkz~Z%o9&<&-90?_kJn4}5Ks+1{ zki8QlEdLg=x>Zhc)B><6sSC;Np+ezr_K3?N4|pzrJ_lfTMA1jIs)XmfUG=YZCiCZR za96`s!B_m|d3>n|arki@@YFYsVqU61*&8CN69%du6e}=W&uX}KpAm~-)gCO}TngXh zcc3Wvbw~k{LJr)i+zT!p@OUYDkwQ)HLO7x^@Am3t#?5!lpDngCZ=U#ZvK2^`~GB+#(DssRs>NAl>S% z{y6^Jo9#NjU%ub^mv^^$Si9eOPt4r8ur%o>P{<7&ItkGt(zzB`rWd@ znEwVtR*bAobXgj{#MsT^!0(vIIOa}2Tz+&RKOmvblS3U5LViZ{X1d`Laylwag;KXG zL>`A4a@K8!re9HFq)fB0fUQn6?yt-DvHLHDa{d8Dt>wUIl%bQ_x-CeB99ivkk&bMC zOyBm57b1GLieio5>-qey!E*wQkJX^Xdn4h_-qt6O45Ez)VH<2I!(^vJqAW}IH;hhN zsx!i@v-z`xp7L3mrc8amd6jCLmHEy0ea0Z`9xZf;9laJM5iTIT)(5}HJPMiP^NCxv zi==qWP0OFNrgC;pGc+oj6=-qCZ~aPrZ{@1qurY`034gWybttQ88=G;nO>$p+&C8Z< zC*Sn*&l?%_=LR2q1=q-Kj*1p03>Rb;@IH_PXgZd=R6a zm`^h}5>VuLQo_^q{mZHA0L&NIiC)S(A{ejrLG_k?pek?NGfmPv_@!eWa|Ov%P|YfB znhQ(%HAs}3XoDO@n-0Y72L@=J3QfD(a=n3udQh;j(cMtw(f9lN{LHj^EMwtvsO1Jt zV@~yj=N=|~nhJYZ`yDW7W4bwpt$W|usNlYc$mS#^kWkYN`7 z0_luURG=5bhQjN7Ca-||Qml14WE@TfNCneU!%2r6xi9K4BY5~p}0N$Xk}7(3#5@Rt<2 zuHSM0{Dmd3X}NBKODR#q)+Ghw_NQo+gx11HeBo_K!aAttln5Y6&(3@T)K=Bj!n-|~ zCY6i?&=?!p3gf%U0TyRF5?Jt~q&KZ1Xo5~ZHA_B;W%K#9Pldx>sTP@kHt1Qp)J)Hyx{SI}hrPpPAf7R8e(cUL;g?s^|tf{w%olBa#u5WM2Gm zRbt)8EgkW`DE-iKoMRmVildBuC_NCr;g4i0W4?)_dzcM@y~aBC@czw*RH&ehnyyThrbBZ?G~<@XMOb|_W? zUw3P3=&9N9Lzh?dA^QRzH*T1LNHB#4_8Vhb*V7s`64A6PjG++=XGsOyMJX8togcWk zn@5N$%1Ar^!%1(J9)ModRftG_x%F@U9e(KskQx{P(3#T*u$m5#g7K}7gzxk5xlM7c zh>u4(x(4l~sXe&BlSo;}&#Kox#QEE-SkEDxDj?XEZ_xiry0rd_GqoNJ`Y`monBX4t z)EoY?07~C|MxlG|ukwu_M2yfuO2;=)PEK#|JN-NP2p7oBTird{EK+7`OASz$e220m zfLT4)^XAS?{ewc3Jp->CBngjBo9r_5GF|s)+OSoD#!)@-rL%6LhnZOzk1*vQ*`eYK zLcRG|iNv5tpvZAIYWa#}z&?v(g|wlcX58Ue6N9WI^m(^P>oH)2b|AZ`&&Gv(^|4~ev$`|cr-Rae?d#ZraSKB4UV40(1oB_j zA%ePa82?07z4BRW$NUbXMT=2Ca$y<TCcJAny2BrTXZR%)+m7UuwYaM~#v_YWe;MA9MKkU$Kj) zI4)LwB)&4lq!x7(*eGhgg=C?e``z(SIfv${dfHdPgQM#}H0h^- zzY#|2Xk=))8z!}}C`I$IpK7Y6r`OY8}^I=al=xK$Lo=JcxW@R2RertT+fj8FpFpncYw z87(ZK(w(k9xG9h_v{Luke7)9fr_x5Al)4{qh`cJi~Fhs%d^b-u?{0cTRmd>yG(&;M zL}T6kZ_QII-Ez*zBs|{BVw)nQ&o94wYeCrv0=mlnz@D(-rYcwHupTmH@mnV7s3rm~ zG0Nd>WO!rLW?Y{?md?;`4|3-Dxh4UyXhBcoD=6wgcj>*Q%M6BZsx$W#+Fo#@Fg+~q z{ABHPv)8RPIcMfzKd2R0QSNJu(Pz{c2gWpwa8RJ2w~8|}^%cioUwrh-4MRMB$D zp#74uD7T-yeV?|5C^=p6_QvQdfJR)87_(uhONAa%KBX}Yje$Q^Wv)(EgIFCCmnIPKSF{~+U zs-s6|3`M}idp-?+lIF~>C&1>9WP$^iLy(opX^O48nQXa>Q@f?Dh{*6ht12&DtwbKWA}s6REzRO%@5#oBr)@Yb(n!S&Q)BM z2GHL}>>2LKSDXz$)V@ej=K264a>SYtGvyhsaD#qQ0pJDrK4(3`EfPIAQ}2%gdf0UD z1zz54do4e@e(W{aJ{w8mK&NJq0y z+*HG2oj3vRq(r2cx*%NmrjP$lr|ijjHJdAGNR@+A9cJ*wo=1GDvY6I|$V_{8+)>|Q;l$ZwdL8Avs+g9rss_&Xi zx)-$cEUyBo4~%lXS~g0p90Gv1bRONf>Oc!5wmXtCPZo;2CV}b>BvHZ5yj}M;aH|So zD_S$4br75%2gs|xePDHe4~3b3a#Uw%R(fbm=cc7`O?*wcO-29tb%ZT94^)|-l0vm5a z$4^G)R|*{}s;5FutbG@LQ_+^0RKjX0H+92O`Nz4jO*}QgRO7f>5UcI+N=vP?`s;2Q z5UXzmjwt5Ij!Kh3uDF}-1llr3rmtS63&~@_Ga%FM&9)4R#Z_!^OGq} zaB4@=^%`-#yWOL!guVkc6M+HfJpX_u?))j>Y6%dgmLNyLp7CX#GbLekW?F~Y%0AAR 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 diff --git a/app/src/main/java/com/itsaky/androidide/utils/ProjectWriter.java b/app/src/main/java/com/itsaky/androidide/utils/ProjectWriter.java index d089ad8d9..a3a3737ee 100755 --- a/app/src/main/java/com/itsaky/androidide/utils/ProjectWriter.java +++ b/app/src/main/java/com/itsaky/androidide/utils/ProjectWriter.java @@ -33,190 +33,229 @@ import com.itsaky.androidide.interfaces.ProjectWriterCallback; import com.itsaky.androidide.models.NewProjectDetails; import com.itsaky.androidide.models.ProjectTemplate; +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; import java.util.regex.Matcher; import java.util.regex.Pattern; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; public class ProjectWriter { - private static ProjectWriterCallback callback; + private static ProjectWriterCallback callback; - private static final String XML_TEMPLATE_PATH = "templates/xml"; + private static final String XML_TEMPLATE_PATH = "templates/xml"; + private static final String SOURCE_PATH_REGEX = "/.*/src/.*/java|kt"; + private static final String FILE_EXT_REGEX = ".*/java|kt|gradle|xml"; + private static final String APP_NAME = "$app_name", + PACKAGE_NAME = "$package_name", + MIN_SDK = "$min_sdk", + TARGET_SDK = "$target_sdk"; - private static final String[] FILE_TO_CHANGE = { - "build.gradle", - "settings.gradle", - "app/src/main/AndroidManifest.xml", - "app/src/main/res/values/strings.xml", - "app/src/main/java/$package_name/MainActivity.java", - "app/src/main/java/$package_name/MainActivity.kt", - "app/build.gradle", - "app/src/main/java/$package_name/AndroidLauncher.java", - "app/res/values/strings.xml", - "core/build.gradle", - "core/src/main/java/$package_name/GameSuperClass.java", - "app/AndroidManifest.xml" - }; - - private static final String JAVA_PATH_REGEX = "/.*/src/.*/java|kt"; - private static final String APP_NAME = "$app_name", - PACKAGE_NAME = "$package_name", - MIN_SDK = "$min_sdk", - TARGET_SDK = "$target_sdk"; - - @NonNull - public static String createMenu() { - return ResourceUtils.readAssets2String(XML_TEMPLATE_PATH + "/menu.xml"); - } - - @NonNull - public static String createDrawable() { - return ResourceUtils.readAssets2String(XML_TEMPLATE_PATH + "/drawable.xml"); - } - - @NonNull - public static String createLayout() { - return ResourceUtils.readAssets2String(XML_TEMPLATE_PATH + "/layout.xml"); - } - - public static String getPackageName(File parentPath) { - Matcher pkgMatcher = Pattern.compile(JAVA_PATH_REGEX).matcher(parentPath.getAbsolutePath()); - if (pkgMatcher.find()) { - int end = pkgMatcher.end(); - if (end <= 0) return ""; - String name = parentPath.getAbsolutePath().substring(pkgMatcher.end()); - if (name.startsWith(File.separator)) name = name.substring(1); - return name.replace(File.separator, "."); + @NonNull + public static String createMenu() { + return ResourceUtils.readAssets2String(XML_TEMPLATE_PATH + "/menu.xml"); } - return null; - } - public static String createJavaClass(String packageName, String className) { - return ClassBuilder.createClass(packageName, className); - } - - public static String createJavaInterface(String packageName, String className) { - return ClassBuilder.createInterface(packageName, className); - } - - public static String createJavaEnum(String packageName, String className) { - return ClassBuilder.createEnum(packageName, className); - } - - public static String createActivity(String packageName, String className) { - return ClassBuilder.createActivity(packageName, className); - } - - public static void write( - ProjectTemplate template, NewProjectDetails details, ProjectWriterCallback listener) - throws Exception { - write(template.getId(), details, listener); - } - - public static void write(int id, NewProjectDetails details, ProjectWriterCallback listener) - throws Exception { - callback = listener; - notifyBegin(); - final StudioApp instance = StudioApp.getInstance(); - final File temp = instance.getTempProjectDir(); - final File projectDir = new File(instance.getProjectsDir(), details.name); - if (projectDir.exists()) { - notifyFailed(instance.getString(R.string.project_exists)); - return; + @NonNull + public static String createDrawable() { + return ResourceUtils.readAssets2String(XML_TEMPLATE_PATH + "/drawable.xml"); } - if (temp == null) notifyFailed(instance.getString(R.string.cannot_create_temp)); - if (!FileUtils.delete(temp) || !Environment.mkdirIfNotExits(temp).exists()) - notifyFailed(instance.getString(R.string.cannot_create_temp)); - notifyTask(instance.getString(R.string.copying_assets)); - projectDir.mkdirs(); - File destZip = new File(Environment.TMP_DIR, "templates/" + id + ".zip"); - Environment.mkdirIfNotExits(destZip.getParentFile()); - if (ResourceUtils.copyFileFromAssets( - "templates/" + destZip.getName(), destZip.getAbsolutePath())) { - ZipUtils.unzipFile(destZip, temp); - notifyTask(instance.getString(R.string.writing_files)); - for (String s : FILE_TO_CHANGE) { - File file = new File(temp, s); - if (file.exists() && s.contains(PACKAGE_NAME)) { - s = s.replace(PACKAGE_NAME, details.packageName.replace(".", "/")); - File f = new File(temp, s); - FileUtils.move(file, f); - try { - File f2 = file.getParentFile(); - while (f2 != null && !f2.getName().contains(PACKAGE_NAME)) { - f2 = f2.getParentFile(); + @NonNull + public static String createLayout() { + return ResourceUtils.readAssets2String(XML_TEMPLATE_PATH + "/layout.xml"); + } + + public static String getPackageName(File parentPath) { + Matcher pkgMatcher = + Pattern.compile(SOURCE_PATH_REGEX).matcher(parentPath.getAbsolutePath()); + if (pkgMatcher.find()) { + int end = pkgMatcher.end(); + if (end <= 0) return ""; + String name = parentPath.getAbsolutePath().substring(pkgMatcher.end()); + if (name.startsWith(File.separator)) name = name.substring(1); + return name.replace(File.separator, "."); + } + return null; + } + + public static String createJavaClass(String packageName, String className) { + return ClassBuilder.createClass(packageName, className); + } + + public static String createJavaInterface(String packageName, String className) { + return ClassBuilder.createInterface(packageName, className); + } + + public static String createJavaEnum(String packageName, String className) { + return ClassBuilder.createEnum(packageName, className); + } + + public static String createActivity(String packageName, String className) { + return ClassBuilder.createActivity(packageName, className); + } + + public static void write( + ProjectTemplate template, NewProjectDetails details, ProjectWriterCallback listener) + throws Exception { + write(template.getId(), details, listener); + } + + public static void write(int id, NewProjectDetails details, ProjectWriterCallback listener) + throws Exception { + callback = listener; + notifyBegin(); + final StudioApp instance = StudioApp.getInstance(); + final File tempDir = instance.getTempProjectDir(); + final File projectDir = new File(instance.getProjectsDir(), details.name); + if (projectDir.exists()) { + notifyFailed(instance.getString(R.string.project_exists)); + return; + } + if (tempDir == null) { + notifyFailed(instance.getString(R.string.cannot_create_temp)); + } + if (!FileUtils.delete(tempDir) || !Environment.mkdirIfNotExits(tempDir).exists()) { + notifyFailed(instance.getString(R.string.cannot_create_temp)); + } + notifyTask(instance.getString(R.string.copying_assets)); + projectDir.mkdirs(); + File destZip = new File(Environment.TMP_DIR, "templates/" + id + ".zip"); + Environment.mkdirIfNotExits(destZip.getParentFile()); + if (ResourceUtils.copyFileFromAssets( + "templates/" + destZip.getName(), destZip.getAbsolutePath())) { + unzipTemplate(destZip, tempDir, details); + notifyTask(instance.getString(R.string.writing_files)); + notifyTask(instance.getString(R.string.copying_files)); + if (FileUtils.createOrExistsDir(projectDir)) { + boolean success = true; + final var files = tempDir == null ? null : tempDir.listFiles(); + if (files == null) { + success = false; + } else { + for (File f : files) { + if (!(success &= FileUtils.copy(f, new File(projectDir, f.getName())))) { + notifyFailed( + instance.getString(R.string.failed_write_file, f.getName())); + break; + } + } + } + + if (success) { + notifySuccess(projectDir); + } + } else { + notifyFailed(instance.getString(R.string.failed_create_project_dir)); } - - FileUtils.delete(f2); - } catch (Throwable t) { - // ignored - } - file = f; - } - if (file.exists()) { - String read = FileIOUtils.readFile2String(file); - read = - read.replace(APP_NAME, details.name) - .replace(PACKAGE_NAME, details.packageName) - .replace(MIN_SDK, String.valueOf(details.minSdk)) - .replace(TARGET_SDK, String.valueOf(details.targetSdk)); - if (!FileIOUtils.writeFileFromString(file, read, false)) { - notifyFailed(instance.getString(R.string.failed_write_file, file.getName())); - } - } - } - notifyTask(instance.getString(R.string.copying_files)); - if (FileUtils.createOrExistsDir(projectDir)) { - boolean success = true; - final var files = temp == null ? null : temp.listFiles(); - if (files == null) { - success = false; } else { - for (File f : files) { - if (!(success &= FileUtils.copy(f, new File(projectDir, f.getName())))) { - notifyFailed(instance.getString(R.string.failed_write_file, f.getName())); - break; - } - } + notifyFailed(instance.getString(R.string.asset_copy_failed)); } - - if (success) { - notifySuccess(projectDir); - } - } else { - notifyFailed(instance.getString(R.string.failed_create_project_dir)); - } - } else { - notifyFailed(instance.getString(R.string.asset_copy_failed)); } - } - private static void notifyBegin() { - ThreadUtils.runOnUiThread( - () -> { - if (callback != null) callback.beforeBegin(); - }); - } + private static void unzipTemplate(File zipFile, File location, NewProjectDetails details) + throws IOException { + final StudioApp instance = StudioApp.getInstance(); + int size; + final int BUFFER_SIZE = 2048; + byte[] buffer = new byte[BUFFER_SIZE]; - private static void notifyTask(String name) { - ThreadUtils.runOnUiThread( - () -> { - if (callback != null) callback.onProcessTask(name); - }); - } + File f = location; + if (!f.isDirectory()) { + f.mkdirs(); + } + ZipInputStream zin = + new ZipInputStream( + new BufferedInputStream(new FileInputStream(zipFile), BUFFER_SIZE)); + try { + ZipEntry ze = null; + while ((ze = zin.getNextEntry()) != null) { + String name = ze.getName(); + if (name.contains(PACKAGE_NAME)) { + name = name.replace(PACKAGE_NAME, details.packageName.replace(".", "/")); + } + String path = location.getAbsolutePath() + "/" + name; + File unzipFile = new File(path); - private static void notifySuccess(File root) { - ThreadUtils.runOnUiThread( - () -> { - if (callback != null) callback.onSuccess(root); - }); - } + if (ze.isDirectory()) { + if (!unzipFile.isDirectory()) { + unzipFile.mkdirs(); + } + } else { + // check for and create parent directories if they don't exist + File parentDir = unzipFile.getParentFile(); + if (null != parentDir) { + if (!parentDir.isDirectory()) { + parentDir.mkdirs(); + } + } - private static void notifyFailed(String reason) { - ThreadUtils.runOnUiThread( - () -> { - if (callback != null) callback.onFailed(reason); - }); - } + // unzip the file + FileOutputStream out = new FileOutputStream(unzipFile, false); + BufferedOutputStream fout = new BufferedOutputStream(out, BUFFER_SIZE); + try { + while ((size = zin.read(buffer, 0, BUFFER_SIZE)) != -1) { + fout.write(buffer, 0, size); + } + zin.closeEntry(); + } finally { + fout.flush(); + fout.close(); + } + + // replace temp variables to real + Matcher extMatcher = Pattern.compile(FILE_EXT_REGEX).matcher(name); + if (extMatcher.find()) { + String fileContent = FileIOUtils.readFile2String(unzipFile); + fileContent = + fileContent + .replace(APP_NAME, details.name) + .replace(PACKAGE_NAME, details.packageName) + .replace(MIN_SDK, String.valueOf(details.minSdk)) + .replace(TARGET_SDK, String.valueOf(details.targetSdk)); + if (!FileIOUtils.writeFileFromString(unzipFile, fileContent, false)) { + notifyFailed( + instance.getString( + R.string.failed_write_file, unzipFile.getName())); + } + } + } + } + } finally { + zin.close(); + } + } + + private static void notifyBegin() { + ThreadUtils.runOnUiThread( + () -> { + if (callback != null) callback.beforeBegin(); + }); + } + + private static void notifyTask(String name) { + ThreadUtils.runOnUiThread( + () -> { + if (callback != null) callback.onProcessTask(name); + }); + } + + private static void notifySuccess(File root) { + ThreadUtils.runOnUiThread( + () -> { + if (callback != null) callback.onSuccess(root); + }); + } + + private static void notifyFailed(String reason) { + ThreadUtils.runOnUiThread( + () -> { + if (callback != null) callback.onFailed(reason); + }); + } } From 6c3b7bc38732093adbe060de009f1a4cbc6b3f88 Mon Sep 17 00:00:00 2001 From: MrIkso Date: Sun, 29 May 2022 12:54:39 +0300 Subject: [PATCH 2/4] Added Kotlin highlighting --- .../language/kotlin/KotlinAnalyzer.java | 272 + .../language/kotlin/KotlinLanguage.java | 168 + .../views/editor/CodeEditorView.java | 6 +- .../androidide/lexers/kotlin/KotlinLexer.g4 | 525 + .../lexers/kotlin/KotlinLexer.interp | 674 + .../androidide/lexers/kotlin/KotlinLexer.java | 1426 ++ .../lexers/kotlin/KotlinLexer.tokens | 290 + .../androidide/lexers/kotlin/KotlinParser.g4 | 923 + .../lexers/kotlin/KotlinParser.interp | 526 + .../lexers/kotlin/KotlinParser.java | 19558 ++++++++++++++++ .../lexers/kotlin/KotlinParser.tokens | 290 + .../kotlin/KotlinParserBaseListener.java | 2115 ++ .../lexers/kotlin/KotlinParserListener.java | 1740 ++ .../lexers/kotlin/UnicodeClasses.g4 | 1649 ++ .../lexers/kotlin/UnicodeClasses.interp | 38 + .../lexers/kotlin/UnicodeClasses.java | 384 + .../lexers/kotlin/UnicodeClasses.tokens | 7 + 17 files changed, 30590 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/com/itsaky/androidide/language/kotlin/KotlinAnalyzer.java create mode 100644 app/src/main/java/com/itsaky/androidide/language/kotlin/KotlinLanguage.java create mode 100644 lexers/src/main/java/com/itsaky/androidide/lexers/kotlin/KotlinLexer.g4 create mode 100644 lexers/src/main/java/com/itsaky/androidide/lexers/kotlin/KotlinLexer.interp create mode 100644 lexers/src/main/java/com/itsaky/androidide/lexers/kotlin/KotlinLexer.java create mode 100644 lexers/src/main/java/com/itsaky/androidide/lexers/kotlin/KotlinLexer.tokens create mode 100644 lexers/src/main/java/com/itsaky/androidide/lexers/kotlin/KotlinParser.g4 create mode 100644 lexers/src/main/java/com/itsaky/androidide/lexers/kotlin/KotlinParser.interp create mode 100644 lexers/src/main/java/com/itsaky/androidide/lexers/kotlin/KotlinParser.java create mode 100644 lexers/src/main/java/com/itsaky/androidide/lexers/kotlin/KotlinParser.tokens create mode 100644 lexers/src/main/java/com/itsaky/androidide/lexers/kotlin/KotlinParserBaseListener.java create mode 100644 lexers/src/main/java/com/itsaky/androidide/lexers/kotlin/KotlinParserListener.java create mode 100644 lexers/src/main/java/com/itsaky/androidide/lexers/kotlin/UnicodeClasses.g4 create mode 100644 lexers/src/main/java/com/itsaky/androidide/lexers/kotlin/UnicodeClasses.interp create mode 100644 lexers/src/main/java/com/itsaky/androidide/lexers/kotlin/UnicodeClasses.java create mode 100644 lexers/src/main/java/com/itsaky/androidide/lexers/kotlin/UnicodeClasses.tokens diff --git a/app/src/main/java/com/itsaky/androidide/language/kotlin/KotlinAnalyzer.java b/app/src/main/java/com/itsaky/androidide/language/kotlin/KotlinAnalyzer.java new file mode 100644 index 000000000..9e0ccb613 --- /dev/null +++ b/app/src/main/java/com/itsaky/androidide/language/kotlin/KotlinAnalyzer.java @@ -0,0 +1,272 @@ +package com.itsaky.androidide.language.kotlin; + +import static com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.ANNOTATION; +import static com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.LITERAL; +import static com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.OPERATOR; +import static com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.TEXT_NORMAL; +import static com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.forKeyword; +import static com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.forString; +import static com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.get; + +import com.itsaky.androidide.lexers.kotlin.KotlinLexer; +import com.itsaky.androidide.lexers.kotlin.KotlinParser; +import com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE; +import com.itsaky.androidide.utils.CharSequenceReader; +import com.itsaky.androidide.utils.ILogger; + +import io.github.rosemoe.sora.lang.analysis.SimpleAnalyzeManager; +import io.github.rosemoe.sora.lang.styling.CodeBlock; +import io.github.rosemoe.sora.lang.styling.MappedSpans; +import io.github.rosemoe.sora.lang.styling.Styles; + +import org.antlr.v4.runtime.CharStreams; +import org.antlr.v4.runtime.CodePointCharStream; +import org.antlr.v4.runtime.CommonTokenStream; +import org.antlr.v4.runtime.Token; + +import java.io.IOException; +import java.util.Stack; + +public class KotlinAnalyzer extends SimpleAnalyzeManager { + + private static final ILogger LOG = ILogger.newInstance("KotlinAnalyzer"); + + @Override + protected Styles analyze(StringBuilder text, Delegate delegate) { + final var styles = new Styles(); + final var colors = new MappedSpans.Builder(); + final CodePointCharStream stream; + try { + stream = CharStreams.fromReader(new CharSequenceReader(text)); + } catch (IOException e) { + LOG.error("Unable to read text to analyze", e); + return styles; + } + + final var lexer = new KotlinLexer(stream); + // final var parser = new KotlinParser(new CommonTokenStream(lexer)); + final var stack = new Stack(); + Token token; + int line, column, lastLine = 1, currSwitch = 0, maxSwitch = 0, type, previous = 0; + boolean isFirst = true; + + while (!delegate.isCancelled()) { + token = lexer.nextToken(); + if (token == null) { + break; + } + + line = token.getLine() - 1; + column = token.getCharPositionInLine(); + type = token.getType(); + + if (type == KotlinLexer.EOF) { + lastLine = line; + break; + } + + switch (type) { + case KotlinLexer.WS: + if (isFirst) { + colors.addNormalIfNull(); + } + break; + // annotatoons + case KotlinLexer.AT_NO_WS: + case KotlinLexer.AT_POST_WS: + case KotlinLexer.AT_PRE_WS: + case KotlinLexer.AT_BOTH_WS: + colors.addIfNeeded(line, column, get(ANNOTATION)); + break; + // lexicalModifiers + case KotlinLexer.ANNOTATION: + case KotlinLexer.ABSTRACT: + case KotlinLexer.BY: + case KotlinLexer.CATCH: + case KotlinLexer.COMPANION: + case KotlinLexer.CONSTRUCTOR: + case KotlinLexer.CROSSINLINE: + case KotlinLexer.DATA: + case KotlinLexer.DYNAMIC: + case KotlinLexer.ENUM: + case KotlinLexer.EXTERNAL: + case KotlinLexer.FINAL: + case KotlinLexer.FINALLY: + case KotlinLexer.IMPORT: + case KotlinLexer.INFIX: + case KotlinLexer.INIT: + case KotlinLexer.INLINE: + case KotlinLexer.INNER: + case KotlinLexer.INTERNAL: + case KotlinLexer.LATEINIT: + case KotlinLexer.NOINLINE: + case KotlinLexer.OPEN: + case KotlinLexer.OPERATOR: + case KotlinLexer.OUT: + case KotlinLexer.OVERRIDE: + case KotlinLexer.PRIVATE: + case KotlinLexer.PROTECTED: + case KotlinLexer.PUBLIC: + case KotlinLexer.REIFIED: + case KotlinLexer.SEALED: + case KotlinLexer.TAILREC: + case KotlinLexer.VARARG: + case KotlinLexer.WHERE: + case KotlinLexer.GET: + case KotlinLexer.SET: + case KotlinLexer.FIELD: + case KotlinLexer.PROPERTY: + case KotlinLexer.RECEIVER: + case KotlinLexer.PARAM: + case KotlinLexer.SETPARAM: + case KotlinLexer.DELEGATE: + case KotlinLexer.FILE: + case KotlinLexer.EXPECT: + case KotlinLexer.ACTUAL: + case KotlinLexer.VALUE: + case KotlinLexer.CONST: + case KotlinLexer.SUSPEND: + colors.addIfNeeded(line, column, forKeyword()); + break; + // SECTION: literals + case KotlinLexer.RealLiteral: + case KotlinLexer.FloatLiteral: + case KotlinLexer.DoubleLiteral: + case KotlinLexer.IntegerLiteral: + case KotlinLexer.HexLiteral: + case KotlinLexer.BinLiteral: + case KotlinLexer.UnsignedLiteral: + case KotlinLexer.LongLiteral: + case KotlinLexer.BooleanLiteral: + case KotlinLexer.NullLiteral: + case KotlinLexer.CharacterLiteral: + colors.addIfNeeded(line, column, get(LITERAL)); + break; + // strings + case KotlinLexer.QUOTE_OPEN: + case KotlinLexer.TRIPLE_QUOTE_OPEN: + case KotlinLexer.QUOTE_CLOSE: + case KotlinLexer.LineStrRef: + case KotlinLexer.LineStrText: + case KotlinLexer.LineStrEscapedChar: + case KotlinLexer.LineStrExprStart: + case KotlinLexer.TRIPLE_QUOTE_CLOSE: + case KotlinLexer.MultiLineStringQuote: + case KotlinLexer.MultiLineStrRef: + case KotlinLexer.MultiLineStrText: + case KotlinLexer.MultiLineStrExprStart: + colors.addIfNeeded(line, column, forString()); + break; + // SECTION: separatorsAndOperations + case KotlinLexer.RESERVED: + case KotlinLexer.DOT: + case KotlinLexer.COMMA: + case KotlinLexer.LPAREN: + case KotlinLexer.RPAREN: + case KotlinLexer.LSQUARE: + case KotlinLexer.RSQUARE: + case KotlinLexer.LCURL: + case KotlinLexer.RCURL: + case KotlinLexer.MULT: + case KotlinLexer.MOD: + case KotlinLexer.DIV: + case KotlinLexer.ADD: + case KotlinLexer.SUB: + case KotlinLexer.INCR: + case KotlinLexer.DECR: + case KotlinLexer.CONJ: + case KotlinLexer.DISJ: + case KotlinLexer.EXCL_WS: + case KotlinLexer.EXCL_NO_WS: + case KotlinLexer.COLON: + case KotlinLexer.SEMICOLON: + case KotlinLexer.ASSIGNMENT: + case KotlinLexer.ADD_ASSIGNMENT: + case KotlinLexer.SUB_ASSIGNMENT: + case KotlinLexer.MULT_ASSIGNMENT: + case KotlinLexer.DIV_ASSIGNMENT: + case KotlinLexer.MOD_ASSIGNMENT: + case KotlinLexer.ARROW: + case KotlinLexer.DOUBLE_ARROW: + case KotlinLexer.RANGE: + case KotlinLexer.COLONCOLON: + case KotlinLexer.DOUBLE_SEMICOLON: + case KotlinLexer.QUEST_WS: + case KotlinLexer.QUEST_NO_WS: + case KotlinLexer.LANGLE: + case KotlinLexer.RANGLE: + case KotlinLexer.LE: + case KotlinLexer.GE: + case KotlinLexer.EXCL_EQ: + case KotlinLexer.EXCL_EQEQ: + case KotlinLexer.AS_SAFE: + case KotlinLexer.EQEQ: + case KotlinLexer.EQEQEQ: + case KotlinLexer.SINGLE_QUOTE: + colors.addIfNeeded(line, column, get(OPERATOR)); + break; + // SECTION: keywords + case KotlinLexer.RETURN_AT: + case KotlinLexer.CONTINUE_AT: + case KotlinLexer.BREAK_AT: + case KotlinLexer.THIS_AT: + case KotlinLexer.SUPER_AT: + case KotlinLexer.PACKAGE: + case KotlinLexer.CLASS: + case KotlinLexer.INTERFACE: + case KotlinLexer.FUN: + case KotlinLexer.OBJECT: + case KotlinLexer.VAL: + case KotlinLexer.VAR: + case KotlinLexer.TYPE_ALIAS: + case KotlinLexer.THIS: + case KotlinLexer.SUPER: + case KotlinLexer.TYPEOF: + case KotlinLexer.IF: + case KotlinLexer.ELSE: + case KotlinLexer.WHEN: + case KotlinLexer.TRY: + case KotlinLexer.FOR: + case KotlinLexer.DO: + case KotlinLexer.WHILE: + case KotlinLexer.THROW: + case KotlinLexer.RETURN: + case KotlinLexer.CONTINUE: + case KotlinLexer.BREAK: + case KotlinLexer.AS: + case KotlinLexer.IS: + case KotlinLexer.IN: + case KotlinLexer.NOT_IS: + case KotlinLexer.NOT_IN: + colors.addIfNeeded(line, column, forKeyword()); + break; + // comments + case KotlinLexer.ShebangLine: + case KotlinLexer.LineComment: + case KotlinLexer.DelimitedComment: + case KotlinLexer.Inside_Comment: + colors.addIfNeeded(line, column, SchemeAndroidIDE.COMMENT); + break; + + default: + colors.addIfNeeded(line, column, get(TEXT_NORMAL)); + break; + } + + isFirst = false; + if (type != KotlinLexer.WS) { + previous = type; + } + } + + if (stack.isEmpty() && currSwitch > maxSwitch) { + maxSwitch = currSwitch; + } + + colors.determine(lastLine); + styles.setSuppressSwitch(maxSwitch + 10); + styles.spans = colors.build(); + + return styles; + } +} diff --git a/app/src/main/java/com/itsaky/androidide/language/kotlin/KotlinLanguage.java b/app/src/main/java/com/itsaky/androidide/language/kotlin/KotlinLanguage.java new file mode 100644 index 000000000..59267e9a8 --- /dev/null +++ b/app/src/main/java/com/itsaky/androidide/language/kotlin/KotlinLanguage.java @@ -0,0 +1,168 @@ +/************************************************************************************ + * This file is part of AndroidIDE. + * + * AndroidIDE is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * AndroidIDE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with AndroidIDE. If not, see . + * + **************************************************************************************/ +package com.itsaky.androidide.language.kotlin; + +import android.os.Bundle; + +import androidx.annotation.NonNull; + +import com.itsaky.androidide.language.IDELanguage; + +import com.itsaky.androidide.language.java.JavaLanguage; +import com.itsaky.androidide.utils.CharSequenceReader; +import com.itsaky.androidide.utils.ILogger; + +import org.antlr.v4.runtime.CharStreams; +import org.antlr.v4.runtime.Token; + +import java.io.StringReader; +import com.itsaky.androidide.lexers.kotlin.KotlinLexer; +import com.itsaky.androidide.lexers.kotlin.KotlinParser; + +import io.github.rosemoe.sora.lang.analysis.AnalyzeManager; +import io.github.rosemoe.sora.lang.completion.CompletionCancelledException; +import io.github.rosemoe.sora.lang.completion.CompletionPublisher; +import io.github.rosemoe.sora.lang.smartEnter.NewlineHandleResult; +import io.github.rosemoe.sora.lang.smartEnter.NewlineHandler; +import io.github.rosemoe.sora.text.CharPosition; +import io.github.rosemoe.sora.text.ContentReference; +import io.github.rosemoe.sora.text.TextUtils; +import io.github.rosemoe.sora.widget.SymbolPairMatch; + +public class KotlinLanguage extends IDELanguage { + + private static final ILogger LOG = ILogger.newInstance("KotlinLanguage"); + private KotlinAnalyzer analyzer; + private final NewlineHandler[] newlineHandlers = new NewlineHandler[] {new BraceHandler()}; + + public KotlinLanguage() { + analyzer = new KotlinAnalyzer(); + } + + @Override + public int getIndentAdvance(@NonNull String line) { + try { + KotlinLexer lexer = new KotlinLexer(CharStreams.fromReader(new StringReader(line))); + Token token; + int advance = 0; + while (((token = lexer.nextToken()) != null && token.getType() != token.EOF)) { + switch (token.getType()) { + case KotlinParser.LCURL: + advance++; + break; + case KotlinParser.RCURL: + advance--; + break; + } + } + advance = Math.max(0, advance); + return advance * getTabSize(); + } catch (Throwable e) { + LOG.error("Error calculating indent advance", e); + } + return 0; + } + + @Override + public SymbolPairMatch getSymbolPairs() { + return new KotlinSymbolPairs(); + } + + @NonNull + @Override + public AnalyzeManager getAnalyzeManager() { + return analyzer; + } + + @Override + public int getInterruptionLevel() { + return INTERRUPTION_LEVEL_STRONG; + } + + @Override + public void requireAutoComplete( + @NonNull ContentReference content, + @NonNull CharPosition position, + @NonNull CompletionPublisher publisher, + @NonNull Bundle extraArguments) + throws CompletionCancelledException { + + // completer.complete(content, position, publisher, extraArguments); + } + + @Override + public int getIndentAdvance(@NonNull ContentReference content, int line, int column) { + return getIndentAdvance(content.getLine(line).substring(0, column)); + } + + @Override + public CharSequence format(CharSequence content) { + return content; + } + + @Override + public NewlineHandler[] getNewlineHandlers() { + return newlineHandlers; + } + + @Override + public void destroy() { + analyzer = null; + } + + private static class KotlinSymbolPairs extends SymbolPairMatch { + public KotlinSymbolPairs() { + super.putPair('{', new Replacement("{}", 1)); + super.putPair('(', new Replacement("()", 1)); + super.putPair('[', new Replacement("[]", 1)); + super.putPair('"', new Replacement("\"\"", 1)); + super.putPair('\'', new Replacement("''", 1)); + super.putPair('<', new Replacement("<>", 1)); + } + } + + class BraceHandler implements NewlineHandler { + + @Override + public boolean matchesRequirement(String beforeText, String afterText) { + beforeText = beforeText.trim(); + afterText = afterText.trim(); + return beforeText.endsWith("{") && afterText.startsWith("}"); + } + + @Override + public NewlineHandleResult handleNewline(String beforeText, String afterText, int tabSize) { + int count = TextUtils.countLeadingSpaceCount(beforeText, tabSize); + int advanceBefore = getIndentAdvance(beforeText); + int advanceAfter = getIndentAdvance(afterText); + String text; + StringBuilder sb = + new StringBuilder("\n") + .append( + TextUtils.createIndent( + count + advanceBefore, tabSize, useTab())) + .append('\n') + .append( + text = + TextUtils.createIndent( + count + advanceAfter, tabSize, useTab())); + int shiftLeft = text.length() + 1; + return new NewlineHandleResult(sb, shiftLeft); + } + } +} diff --git a/app/src/main/java/com/itsaky/androidide/views/editor/CodeEditorView.java b/app/src/main/java/com/itsaky/androidide/views/editor/CodeEditorView.java index 89fb13f7f..b5be7c305 100644 --- a/app/src/main/java/com/itsaky/androidide/views/editor/CodeEditorView.java +++ b/app/src/main/java/com/itsaky/androidide/views/editor/CodeEditorView.java @@ -51,6 +51,7 @@ import com.itsaky.androidide.databinding.LayoutCodeEditorBinding; import com.itsaky.androidide.language.groovy.GroovyLanguage; import com.itsaky.androidide.language.java.JavaLanguage; import com.itsaky.androidide.language.xml.XMLLanguage; +import com.itsaky.androidide.language.kotlin.KotlinLanguage; import com.itsaky.androidide.lexers.xml.XMLLexer; import com.itsaky.androidide.managers.PreferenceManager; import com.itsaky.androidide.models.ConstantsBridge; @@ -284,7 +285,10 @@ public class CodeEditorView extends FrameLayout { binding.editor.setLanguageServer(StudioApp.getInstance().getXMLLanguageServer()); } else if (file.isFile() && file.getName().endsWith(".gradle")) { binding.editor.setEditorLanguage(new GroovyLanguage()); - } else { + } else if (file.isFile() && file.getName().endsWith(".kt")) { + binding.editor.setEditorLanguage(new KotlinLanguage()); + } + else { binding.editor.setEditorLanguage(new EmptyLanguage()); } diff --git a/lexers/src/main/java/com/itsaky/androidide/lexers/kotlin/KotlinLexer.g4 b/lexers/src/main/java/com/itsaky/androidide/lexers/kotlin/KotlinLexer.g4 new file mode 100644 index 000000000..418a5e5b0 --- /dev/null +++ b/lexers/src/main/java/com/itsaky/androidide/lexers/kotlin/KotlinLexer.g4 @@ -0,0 +1,525 @@ +/** + * Kotlin lexical grammar in ANTLR4 notation + */ + +lexer grammar KotlinLexer; + +import UnicodeClasses; + +// SECTION: lexicalGeneral + +ShebangLine + : '#!' ~[\r\n]* + ; + +DelimitedComment + : '/*' ( DelimitedComment | . )*? '*/' + -> channel(HIDDEN) + ; + +LineComment + : '//' ~[\r\n]* + -> channel(HIDDEN) + ; + +WS + : [\u0020\u0009\u000C] + -> channel(HIDDEN) + ; + +NL: '\n' | '\r' '\n'?; + +fragment Hidden: DelimitedComment | LineComment | WS; + +// SECTION: separatorsAndOperations + +RESERVED: '...'; +DOT: '.'; +COMMA: ','; +LPAREN: '(' -> pushMode(Inside); +RPAREN: ')'; +LSQUARE: '[' -> pushMode(Inside); +RSQUARE: ']'; +LCURL: '{' -> pushMode(DEFAULT_MODE); +/* + * When using another programming language (not Java) to generate a parser, + * please replace this code with the corresponding code of a programming language you are using. + */ +RCURL: '}' { if (!_modeStack.isEmpty()) { popMode(); } }; +MULT: '*'; +MOD: '%'; +DIV: '/'; +ADD: '+'; +SUB: '-'; +INCR: '++'; +DECR: '--'; +CONJ: '&&'; +DISJ: '||'; +EXCL_WS: '!' Hidden; +EXCL_NO_WS: '!'; +COLON: ':'; +SEMICOLON: ';'; +ASSIGNMENT: '='; +ADD_ASSIGNMENT: '+='; +SUB_ASSIGNMENT: '-='; +MULT_ASSIGNMENT: '*='; +DIV_ASSIGNMENT: '/='; +MOD_ASSIGNMENT: '%='; +ARROW: '->'; +DOUBLE_ARROW: '=>'; +RANGE: '..'; +COLONCOLON: '::'; +DOUBLE_SEMICOLON: ';;'; +HASH: '#'; +AT_NO_WS: '@'; +AT_POST_WS: '@' (Hidden | NL); +AT_PRE_WS: (Hidden | NL) '@' ; +AT_BOTH_WS: (Hidden | NL) '@' (Hidden | NL); +QUEST_WS: '?' Hidden; +QUEST_NO_WS: '?'; +LANGLE: '<'; +RANGLE: '>'; +LE: '<='; +GE: '>='; +EXCL_EQ: '!='; +EXCL_EQEQ: '!=='; +AS_SAFE: 'as?'; +EQEQ: '=='; +EQEQEQ: '==='; +SINGLE_QUOTE: '\''; + +// SECTION: keywords + +RETURN_AT: 'return@' Identifier; +CONTINUE_AT: 'continue@' Identifier; +BREAK_AT: 'break@' Identifier; + +THIS_AT: 'this@' Identifier; +SUPER_AT: 'super@' Identifier; + +FILE: 'file'; +FIELD: 'field'; +PROPERTY: 'property'; +GET: 'get'; +SET: 'set'; +RECEIVER: 'receiver'; +PARAM: 'param'; +SETPARAM: 'setparam'; +DELEGATE: 'delegate'; + +PACKAGE: 'package'; +IMPORT: 'import'; +CLASS: 'class'; +INTERFACE: 'interface'; +FUN: 'fun'; +OBJECT: 'object'; +VAL: 'val'; +VAR: 'var'; +TYPE_ALIAS: 'typealias'; +CONSTRUCTOR: 'constructor'; +BY: 'by'; +COMPANION: 'companion'; +INIT: 'init'; +THIS: 'this'; +SUPER: 'super'; +TYPEOF: 'typeof'; +WHERE: 'where'; +IF: 'if'; +ELSE: 'else'; +WHEN: 'when'; +TRY: 'try'; +CATCH: 'catch'; +FINALLY: 'finally'; +FOR: 'for'; +DO: 'do'; +WHILE: 'while'; +THROW: 'throw'; +RETURN: 'return'; +CONTINUE: 'continue'; +BREAK: 'break'; +AS: 'as'; +IS: 'is'; +IN: 'in'; +NOT_IS: '!is' (Hidden | NL); +NOT_IN: '!in' (Hidden | NL); +OUT: 'out'; +DYNAMIC: 'dynamic'; + +// SECTION: lexicalModifiers + +PUBLIC: 'public'; +PRIVATE: 'private'; +PROTECTED: 'protected'; +INTERNAL: 'internal'; +ENUM: 'enum'; +SEALED: 'sealed'; +ANNOTATION: 'annotation'; +DATA: 'data'; +INNER: 'inner'; +VALUE: 'value'; +TAILREC: 'tailrec'; +OPERATOR: 'operator'; +INLINE: 'inline'; +INFIX: 'infix'; +EXTERNAL: 'external'; +SUSPEND: 'suspend'; +OVERRIDE: 'override'; +ABSTRACT: 'abstract'; +FINAL: 'final'; +OPEN: 'open'; +CONST: 'const'; +LATEINIT: 'lateinit'; +VARARG: 'vararg'; +NOINLINE: 'noinline'; +CROSSINLINE: 'crossinline'; +REIFIED: 'reified'; +EXPECT: 'expect'; +ACTUAL: 'actual'; + +// SECTION: literals + +fragment DecDigit: '0'..'9'; +fragment DecDigitNoZero: '1'..'9'; +fragment DecDigitOrSeparator: DecDigit | '_'; + +fragment DecDigits + : DecDigit DecDigitOrSeparator* DecDigit + | DecDigit + ; + +fragment DoubleExponent: [eE] [+-]? DecDigits; + +RealLiteral + : FloatLiteral + | DoubleLiteral + ; + +FloatLiteral + : DoubleLiteral [fF] + | DecDigits [fF] + ; + +DoubleLiteral + : DecDigits? '.' DecDigits DoubleExponent? + | DecDigits DoubleExponent + ; + +IntegerLiteral + : DecDigitNoZero DecDigitOrSeparator* DecDigit + | DecDigit + ; + +fragment HexDigit: [0-9a-fA-F]; +fragment HexDigitOrSeparator: HexDigit | '_'; + +HexLiteral + : '0' [xX] HexDigit HexDigitOrSeparator* HexDigit + | '0' [xX] HexDigit + ; + +fragment BinDigit: [01]; +fragment BinDigitOrSeparator: BinDigit | '_'; + +BinLiteral + : '0' [bB] BinDigit BinDigitOrSeparator* BinDigit + | '0' [bB] BinDigit + ; + +UnsignedLiteral + : (IntegerLiteral | HexLiteral | BinLiteral) [uU] [lL]? + ; + +LongLiteral + : (IntegerLiteral | HexLiteral | BinLiteral) [lL] + ; + +BooleanLiteral: 'true'| 'false'; + +NullLiteral: 'null'; + +CharacterLiteral + : '\'' (EscapeSeq | ~[\n\r'\\]) '\'' + ; + +// SECTION: lexicalIdentifiers + +fragment UnicodeDigit: UNICODE_CLASS_ND; + +Identifier + : (Letter | '_') (Letter | '_' | UnicodeDigit)* + | '`' ~([\r\n] | '`')+ '`' + ; + +IdentifierOrSoftKey + : Identifier + /* Soft keywords */ + | ABSTRACT + | ANNOTATION + | BY + | CATCH + | COMPANION + | CONSTRUCTOR + | CROSSINLINE + | DATA + | DYNAMIC + | ENUM + | EXTERNAL + | FINAL + | FINALLY + | IMPORT + | INFIX + | INIT + | INLINE + | INNER + | INTERNAL + | LATEINIT + | NOINLINE + | OPEN + | OPERATOR + | OUT + | OVERRIDE + | PRIVATE + | PROTECTED + | PUBLIC + | REIFIED + | SEALED + | TAILREC + | VARARG + | WHERE + | GET + | SET + | FIELD + | PROPERTY + | RECEIVER + | PARAM + | SETPARAM + | DELEGATE + | FILE + | EXPECT + | ACTUAL + | VALUE + /* Strong keywords */ + | CONST + | SUSPEND + ; + +FieldIdentifier + : '$' IdentifierOrSoftKey + ; + +fragment UniCharacterLiteral + : '\\' 'u' HexDigit HexDigit HexDigit HexDigit + ; + +fragment EscapedIdentifier + : '\\' ('t' | 'b' | 'r' | 'n' | '\'' | '"' | '\\' | '$') + ; + +fragment EscapeSeq + : UniCharacterLiteral + | EscapedIdentifier + ; + +// SECTION: characters + +fragment Letter + : UNICODE_CLASS_LU + | UNICODE_CLASS_LL + | UNICODE_CLASS_LT + | UNICODE_CLASS_LM + | UNICODE_CLASS_LO + ; + +// SECTION: strings + +QUOTE_OPEN: '"' -> pushMode(LineString); + +TRIPLE_QUOTE_OPEN: '"""' -> pushMode(MultiLineString); + +mode LineString; + +QUOTE_CLOSE + : '"' -> popMode + ; + +LineStrRef + : FieldIdentifier + ; + +LineStrText + : ~('\\' | '"' | '$')+ | '$' + ; + +LineStrEscapedChar + : EscapedIdentifier + | UniCharacterLiteral + ; + +LineStrExprStart + : '${' -> pushMode(DEFAULT_MODE) + ; + +mode MultiLineString; + +TRIPLE_QUOTE_CLOSE + : MultiLineStringQuote? '"""' -> popMode + ; + +MultiLineStringQuote + : '"'+ + ; + +MultiLineStrRef + : FieldIdentifier + ; + +MultiLineStrText + : ~('"' | '$')+ | '$' + ; + +MultiLineStrExprStart + : '${' -> pushMode(DEFAULT_MODE) + ; + +// SECTION: inside + +mode Inside; + +Inside_RPAREN: RPAREN -> popMode, type(RPAREN); +Inside_RSQUARE: RSQUARE -> popMode, type(RSQUARE); +Inside_LPAREN: LPAREN -> pushMode(Inside), type(LPAREN); +Inside_LSQUARE: LSQUARE -> pushMode(Inside), type(LSQUARE); +Inside_LCURL: LCURL -> pushMode(DEFAULT_MODE), type(LCURL); +Inside_RCURL: RCURL -> popMode, type(RCURL); + +Inside_DOT: DOT -> type(DOT); +Inside_COMMA: COMMA -> type(COMMA); +Inside_MULT: MULT -> type(MULT); +Inside_MOD: MOD -> type(MOD); +Inside_DIV: DIV -> type(DIV); +Inside_ADD: ADD -> type(ADD); +Inside_SUB: SUB -> type(SUB); +Inside_INCR: INCR -> type(INCR); +Inside_DECR: DECR -> type(DECR); +Inside_CONJ: CONJ -> type(CONJ); +Inside_DISJ: DISJ -> type(DISJ); +Inside_EXCL_WS: '!' (Hidden|NL) -> type(EXCL_WS); +Inside_EXCL_NO_WS: EXCL_NO_WS -> type(EXCL_NO_WS); +Inside_COLON: COLON -> type(COLON); +Inside_SEMICOLON: SEMICOLON -> type(SEMICOLON); +Inside_ASSIGNMENT: ASSIGNMENT -> type(ASSIGNMENT); +Inside_ADD_ASSIGNMENT: ADD_ASSIGNMENT -> type(ADD_ASSIGNMENT); +Inside_SUB_ASSIGNMENT: SUB_ASSIGNMENT -> type(SUB_ASSIGNMENT); +Inside_MULT_ASSIGNMENT: MULT_ASSIGNMENT -> type(MULT_ASSIGNMENT); +Inside_DIV_ASSIGNMENT: DIV_ASSIGNMENT -> type(DIV_ASSIGNMENT); +Inside_MOD_ASSIGNMENT: MOD_ASSIGNMENT -> type(MOD_ASSIGNMENT); +Inside_ARROW: ARROW -> type(ARROW); +Inside_DOUBLE_ARROW: DOUBLE_ARROW -> type(DOUBLE_ARROW); +Inside_RANGE: RANGE -> type(RANGE); +Inside_RESERVED: RESERVED -> type(RESERVED); +Inside_COLONCOLON: COLONCOLON -> type(COLONCOLON); +Inside_DOUBLE_SEMICOLON: DOUBLE_SEMICOLON -> type(DOUBLE_SEMICOLON); +Inside_HASH: HASH -> type(HASH); +Inside_AT_NO_WS: AT_NO_WS -> type(AT_NO_WS); +Inside_AT_POST_WS: AT_POST_WS -> type(AT_POST_WS); +Inside_AT_PRE_WS: AT_PRE_WS -> type(AT_PRE_WS); +Inside_AT_BOTH_WS: AT_BOTH_WS -> type(AT_BOTH_WS); +Inside_QUEST_WS: '?' (Hidden | NL) -> type(QUEST_WS); +Inside_QUEST_NO_WS: QUEST_NO_WS -> type(QUEST_NO_WS); +Inside_LANGLE: LANGLE -> type(LANGLE); +Inside_RANGLE: RANGLE -> type(RANGLE); +Inside_LE: LE -> type(LE); +Inside_GE: GE -> type(GE); +Inside_EXCL_EQ: EXCL_EQ -> type(EXCL_EQ); +Inside_EXCL_EQEQ: EXCL_EQEQ -> type(EXCL_EQEQ); +Inside_IS: IS -> type(IS); +Inside_NOT_IS: NOT_IS -> type(NOT_IS); +Inside_NOT_IN: NOT_IN -> type(NOT_IN); +Inside_AS: AS -> type(AS); +Inside_AS_SAFE: AS_SAFE -> type(AS_SAFE); +Inside_EQEQ: EQEQ -> type(EQEQ); +Inside_EQEQEQ: EQEQEQ -> type(EQEQEQ); +Inside_SINGLE_QUOTE: SINGLE_QUOTE -> type(SINGLE_QUOTE); +Inside_QUOTE_OPEN: QUOTE_OPEN -> pushMode(LineString), type(QUOTE_OPEN); +Inside_TRIPLE_QUOTE_OPEN: TRIPLE_QUOTE_OPEN -> pushMode(MultiLineString), type(TRIPLE_QUOTE_OPEN); + +Inside_VAL: VAL -> type(VAL); +Inside_VAR: VAR -> type(VAR); +Inside_FUN: FUN -> type(FUN); +Inside_OBJECT: OBJECT -> type(OBJECT); +Inside_SUPER: SUPER -> type(SUPER); +Inside_IN: IN -> type(IN); +Inside_OUT: OUT -> type(OUT); +Inside_FIELD: FIELD -> type(FIELD); +Inside_FILE: FILE -> type(FILE); +Inside_PROPERTY: PROPERTY -> type(PROPERTY); +Inside_GET: GET -> type(GET); +Inside_SET: SET -> type(SET); +Inside_RECEIVER: RECEIVER -> type(RECEIVER); +Inside_PARAM: PARAM -> type(PARAM); +Inside_SETPARAM: SETPARAM -> type(SETPARAM); +Inside_DELEGATE: DELEGATE -> type(DELEGATE); +Inside_THROW: THROW -> type(THROW); +Inside_RETURN: RETURN -> type(RETURN); +Inside_CONTINUE: CONTINUE -> type(CONTINUE); +Inside_BREAK: BREAK -> type(BREAK); +Inside_RETURN_AT: RETURN_AT -> type(RETURN_AT); +Inside_CONTINUE_AT: CONTINUE_AT -> type(CONTINUE_AT); +Inside_BREAK_AT: BREAK_AT -> type(BREAK_AT); +Inside_IF: IF -> type(IF); +Inside_ELSE: ELSE -> type(ELSE); +Inside_WHEN: WHEN -> type(WHEN); +Inside_TRY: TRY -> type(TRY); +Inside_CATCH: CATCH -> type(CATCH); +Inside_FINALLY: FINALLY -> type(FINALLY); +Inside_FOR: FOR -> type(FOR); +Inside_DO: DO -> type(DO); +Inside_WHILE: WHILE -> type(WHILE); + +Inside_PUBLIC: PUBLIC -> type(PUBLIC); +Inside_PRIVATE: PRIVATE -> type(PRIVATE); +Inside_PROTECTED: PROTECTED -> type(PROTECTED); +Inside_INTERNAL: INTERNAL -> type(INTERNAL); +Inside_ENUM: ENUM -> type(ENUM); +Inside_SEALED: SEALED -> type(SEALED); +Inside_ANNOTATION: ANNOTATION -> type(ANNOTATION); +Inside_DATA: DATA -> type(DATA); +Inside_INNER: INNER -> type(INNER); +Inside_VALUE: VALUE -> type(VALUE); +Inside_TAILREC: TAILREC -> type(TAILREC); +Inside_OPERATOR: OPERATOR -> type(OPERATOR); +Inside_INLINE: INLINE -> type(INLINE); +Inside_INFIX: INFIX -> type(INFIX); +Inside_EXTERNAL: EXTERNAL -> type(EXTERNAL); +Inside_SUSPEND: SUSPEND -> type(SUSPEND); +Inside_OVERRIDE: OVERRIDE -> type(OVERRIDE); +Inside_ABSTRACT: ABSTRACT -> type(ABSTRACT); +Inside_FINAL: FINAL -> type(FINAL); +Inside_OPEN: OPEN -> type(OPEN); +Inside_CONST: CONST -> type(CONST); +Inside_LATEINIT: LATEINIT -> type(LATEINIT); +Inside_VARARG: VARARG -> type(VARARG); +Inside_NOINLINE: NOINLINE -> type(NOINLINE); +Inside_CROSSINLINE: CROSSINLINE -> type(CROSSINLINE); +Inside_REIFIED: REIFIED -> type(REIFIED); +Inside_EXPECT: EXPECT -> type(EXPECT); +Inside_ACTUAL: ACTUAL -> type(ACTUAL); + +Inside_BooleanLiteral: BooleanLiteral -> type(BooleanLiteral); +Inside_IntegerLiteral: IntegerLiteral -> type(IntegerLiteral); +Inside_HexLiteral: HexLiteral -> type(HexLiteral); +Inside_BinLiteral: BinLiteral -> type(BinLiteral); +Inside_CharacterLiteral: CharacterLiteral -> type(CharacterLiteral); +Inside_RealLiteral: RealLiteral -> type(RealLiteral); +Inside_NullLiteral: NullLiteral -> type(NullLiteral); +Inside_LongLiteral: LongLiteral -> type(LongLiteral); +Inside_UnsignedLiteral: UnsignedLiteral -> type(UnsignedLiteral); + +Inside_Identifier: Identifier -> type(Identifier); +Inside_Comment: (LineComment | DelimitedComment) -> channel(HIDDEN); +Inside_WS: WS -> channel(HIDDEN); +Inside_NL: NL -> channel(HIDDEN); + +mode DEFAULT_MODE; + +ErrorCharacter: .; diff --git a/lexers/src/main/java/com/itsaky/androidide/lexers/kotlin/KotlinLexer.interp b/lexers/src/main/java/com/itsaky/androidide/lexers/kotlin/KotlinLexer.interp new file mode 100644 index 000000000..761a10017 --- /dev/null +++ b/lexers/src/main/java/com/itsaky/androidide/lexers/kotlin/KotlinLexer.interp @@ -0,0 +1,674 @@ +token literal names: +null +null +null +null +null +null +'...' +'.' +',' +'(' +')' +'[' +']' +'{' +'}' +'*' +'%' +'/' +'+' +'-' +'++' +'--' +'&&' +'||' +null +'!' +':' +';' +'=' +'+=' +'-=' +'*=' +'/=' +'%=' +'->' +'=>' +'..' +'::' +';;' +'#' +'@' +null +null +null +null +'?' +'<' +'>' +'<=' +'>=' +'!=' +'!==' +'as?' +'==' +'===' +'\'' +null +null +null +null +null +'file' +'field' +'property' +'get' +'set' +'receiver' +'param' +'setparam' +'delegate' +'package' +'import' +'class' +'interface' +'fun' +'object' +'val' +'var' +'typealias' +'constructor' +'by' +'companion' +'init' +'this' +'super' +'typeof' +'where' +'if' +'else' +'when' +'try' +'catch' +'finally' +'for' +'do' +'while' +'throw' +'return' +'continue' +'break' +'as' +'is' +'in' +null +null +'out' +'dynamic' +'public' +'private' +'protected' +'internal' +'enum' +'sealed' +'annotation' +'data' +'inner' +'value' +'tailrec' +'operator' +'inline' +'infix' +'external' +'suspend' +'override' +'abstract' +'final' +'open' +'const' +'lateinit' +'vararg' +'noinline' +'crossinline' +'reified' +'expect' +'actual' +null +null +null +null +null +null +null +null +null +'null' +null +null +null +null +null +'"""' +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null + +token symbolic names: +null +ShebangLine +DelimitedComment +LineComment +WS +NL +RESERVED +DOT +COMMA +LPAREN +RPAREN +LSQUARE +RSQUARE +LCURL +RCURL +MULT +MOD +DIV +ADD +SUB +INCR +DECR +CONJ +DISJ +EXCL_WS +EXCL_NO_WS +COLON +SEMICOLON +ASSIGNMENT +ADD_ASSIGNMENT +SUB_ASSIGNMENT +MULT_ASSIGNMENT +DIV_ASSIGNMENT +MOD_ASSIGNMENT +ARROW +DOUBLE_ARROW +RANGE +COLONCOLON +DOUBLE_SEMICOLON +HASH +AT_NO_WS +AT_POST_WS +AT_PRE_WS +AT_BOTH_WS +QUEST_WS +QUEST_NO_WS +LANGLE +RANGLE +LE +GE +EXCL_EQ +EXCL_EQEQ +AS_SAFE +EQEQ +EQEQEQ +SINGLE_QUOTE +RETURN_AT +CONTINUE_AT +BREAK_AT +THIS_AT +SUPER_AT +FILE +FIELD +PROPERTY +GET +SET +RECEIVER +PARAM +SETPARAM +DELEGATE +PACKAGE +IMPORT +CLASS +INTERFACE +FUN +OBJECT +VAL +VAR +TYPE_ALIAS +CONSTRUCTOR +BY +COMPANION +INIT +THIS +SUPER +TYPEOF +WHERE +IF +ELSE +WHEN +TRY +CATCH +FINALLY +FOR +DO +WHILE +THROW +RETURN +CONTINUE +BREAK +AS +IS +IN +NOT_IS +NOT_IN +OUT +DYNAMIC +PUBLIC +PRIVATE +PROTECTED +INTERNAL +ENUM +SEALED +ANNOTATION +DATA +INNER +VALUE +TAILREC +OPERATOR +INLINE +INFIX +EXTERNAL +SUSPEND +OVERRIDE +ABSTRACT +FINAL +OPEN +CONST +LATEINIT +VARARG +NOINLINE +CROSSINLINE +REIFIED +EXPECT +ACTUAL +RealLiteral +FloatLiteral +DoubleLiteral +IntegerLiteral +HexLiteral +BinLiteral +UnsignedLiteral +LongLiteral +BooleanLiteral +NullLiteral +CharacterLiteral +Identifier +IdentifierOrSoftKey +FieldIdentifier +QUOTE_OPEN +TRIPLE_QUOTE_OPEN +UNICODE_CLASS_LL +UNICODE_CLASS_LM +UNICODE_CLASS_LO +UNICODE_CLASS_LT +UNICODE_CLASS_LU +UNICODE_CLASS_ND +UNICODE_CLASS_NL +QUOTE_CLOSE +LineStrRef +LineStrText +LineStrEscapedChar +LineStrExprStart +TRIPLE_QUOTE_CLOSE +MultiLineStringQuote +MultiLineStrRef +MultiLineStrText +MultiLineStrExprStart +Inside_Comment +Inside_WS +Inside_NL +ErrorCharacter + +rule names: +ShebangLine +DelimitedComment +LineComment +WS +NL +Hidden +RESERVED +DOT +COMMA +LPAREN +RPAREN +LSQUARE +RSQUARE +LCURL +RCURL +MULT +MOD +DIV +ADD +SUB +INCR +DECR +CONJ +DISJ +EXCL_WS +EXCL_NO_WS +COLON +SEMICOLON +ASSIGNMENT +ADD_ASSIGNMENT +SUB_ASSIGNMENT +MULT_ASSIGNMENT +DIV_ASSIGNMENT +MOD_ASSIGNMENT +ARROW +DOUBLE_ARROW +RANGE +COLONCOLON +DOUBLE_SEMICOLON +HASH +AT_NO_WS +AT_POST_WS +AT_PRE_WS +AT_BOTH_WS +QUEST_WS +QUEST_NO_WS +LANGLE +RANGLE +LE +GE +EXCL_EQ +EXCL_EQEQ +AS_SAFE +EQEQ +EQEQEQ +SINGLE_QUOTE +RETURN_AT +CONTINUE_AT +BREAK_AT +THIS_AT +SUPER_AT +FILE +FIELD +PROPERTY +GET +SET +RECEIVER +PARAM +SETPARAM +DELEGATE +PACKAGE +IMPORT +CLASS +INTERFACE +FUN +OBJECT +VAL +VAR +TYPE_ALIAS +CONSTRUCTOR +BY +COMPANION +INIT +THIS +SUPER +TYPEOF +WHERE +IF +ELSE +WHEN +TRY +CATCH +FINALLY +FOR +DO +WHILE +THROW +RETURN +CONTINUE +BREAK +AS +IS +IN +NOT_IS +NOT_IN +OUT +DYNAMIC +PUBLIC +PRIVATE +PROTECTED +INTERNAL +ENUM +SEALED +ANNOTATION +DATA +INNER +VALUE +TAILREC +OPERATOR +INLINE +INFIX +EXTERNAL +SUSPEND +OVERRIDE +ABSTRACT +FINAL +OPEN +CONST +LATEINIT +VARARG +NOINLINE +CROSSINLINE +REIFIED +EXPECT +ACTUAL +DecDigit +DecDigitNoZero +DecDigitOrSeparator +DecDigits +DoubleExponent +RealLiteral +FloatLiteral +DoubleLiteral +IntegerLiteral +HexDigit +HexDigitOrSeparator +HexLiteral +BinDigit +BinDigitOrSeparator +BinLiteral +UnsignedLiteral +LongLiteral +BooleanLiteral +NullLiteral +CharacterLiteral +UnicodeDigit +Identifier +IdentifierOrSoftKey +FieldIdentifier +UniCharacterLiteral +EscapedIdentifier +EscapeSeq +Letter +QUOTE_OPEN +TRIPLE_QUOTE_OPEN +UNICODE_CLASS_LL +UNICODE_CLASS_LM +UNICODE_CLASS_LO +UNICODE_CLASS_LT +UNICODE_CLASS_LU +UNICODE_CLASS_ND +UNICODE_CLASS_NL +QUOTE_CLOSE +LineStrRef +LineStrText +LineStrEscapedChar +LineStrExprStart +TRIPLE_QUOTE_CLOSE +MultiLineStringQuote +MultiLineStrRef +MultiLineStrText +MultiLineStrExprStart +Inside_RPAREN +Inside_RSQUARE +Inside_LPAREN +Inside_LSQUARE +Inside_LCURL +Inside_RCURL +Inside_DOT +Inside_COMMA +Inside_MULT +Inside_MOD +Inside_DIV +Inside_ADD +Inside_SUB +Inside_INCR +Inside_DECR +Inside_CONJ +Inside_DISJ +Inside_EXCL_WS +Inside_EXCL_NO_WS +Inside_COLON +Inside_SEMICOLON +Inside_ASSIGNMENT +Inside_ADD_ASSIGNMENT +Inside_SUB_ASSIGNMENT +Inside_MULT_ASSIGNMENT +Inside_DIV_ASSIGNMENT +Inside_MOD_ASSIGNMENT +Inside_ARROW +Inside_DOUBLE_ARROW +Inside_RANGE +Inside_RESERVED +Inside_COLONCOLON +Inside_DOUBLE_SEMICOLON +Inside_HASH +Inside_AT_NO_WS +Inside_AT_POST_WS +Inside_AT_PRE_WS +Inside_AT_BOTH_WS +Inside_QUEST_WS +Inside_QUEST_NO_WS +Inside_LANGLE +Inside_RANGLE +Inside_LE +Inside_GE +Inside_EXCL_EQ +Inside_EXCL_EQEQ +Inside_IS +Inside_NOT_IS +Inside_NOT_IN +Inside_AS +Inside_AS_SAFE +Inside_EQEQ +Inside_EQEQEQ +Inside_SINGLE_QUOTE +Inside_QUOTE_OPEN +Inside_TRIPLE_QUOTE_OPEN +Inside_VAL +Inside_VAR +Inside_FUN +Inside_OBJECT +Inside_SUPER +Inside_IN +Inside_OUT +Inside_FIELD +Inside_FILE +Inside_PROPERTY +Inside_GET +Inside_SET +Inside_RECEIVER +Inside_PARAM +Inside_SETPARAM +Inside_DELEGATE +Inside_THROW +Inside_RETURN +Inside_CONTINUE +Inside_BREAK +Inside_RETURN_AT +Inside_CONTINUE_AT +Inside_BREAK_AT +Inside_IF +Inside_ELSE +Inside_WHEN +Inside_TRY +Inside_CATCH +Inside_FINALLY +Inside_FOR +Inside_DO +Inside_WHILE +Inside_PUBLIC +Inside_PRIVATE +Inside_PROTECTED +Inside_INTERNAL +Inside_ENUM +Inside_SEALED +Inside_ANNOTATION +Inside_DATA +Inside_INNER +Inside_VALUE +Inside_TAILREC +Inside_OPERATOR +Inside_INLINE +Inside_INFIX +Inside_EXTERNAL +Inside_SUSPEND +Inside_OVERRIDE +Inside_ABSTRACT +Inside_FINAL +Inside_OPEN +Inside_CONST +Inside_LATEINIT +Inside_VARARG +Inside_NOINLINE +Inside_CROSSINLINE +Inside_REIFIED +Inside_EXPECT +Inside_ACTUAL +Inside_BooleanLiteral +Inside_IntegerLiteral +Inside_HexLiteral +Inside_BinLiteral +Inside_CharacterLiteral +Inside_RealLiteral +Inside_NullLiteral +Inside_LongLiteral +Inside_UnsignedLiteral +Inside_Identifier +Inside_Comment +Inside_WS +Inside_NL +ErrorCharacter + +channel names: +DEFAULT_TOKEN_CHANNEL +HIDDEN + +mode names: +DEFAULT_MODE +LineString +MultiLineString +Inside + +atn: +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 173, 2230, 8, 1, 8, 1, 8, 1, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 4, 88, 9, 88, 4, 89, 9, 89, 4, 90, 9, 90, 4, 91, 9, 91, 4, 92, 9, 92, 4, 93, 9, 93, 4, 94, 9, 94, 4, 95, 9, 95, 4, 96, 9, 96, 4, 97, 9, 97, 4, 98, 9, 98, 4, 99, 9, 99, 4, 100, 9, 100, 4, 101, 9, 101, 4, 102, 9, 102, 4, 103, 9, 103, 4, 104, 9, 104, 4, 105, 9, 105, 4, 106, 9, 106, 4, 107, 9, 107, 4, 108, 9, 108, 4, 109, 9, 109, 4, 110, 9, 110, 4, 111, 9, 111, 4, 112, 9, 112, 4, 113, 9, 113, 4, 114, 9, 114, 4, 115, 9, 115, 4, 116, 9, 116, 4, 117, 9, 117, 4, 118, 9, 118, 4, 119, 9, 119, 4, 120, 9, 120, 4, 121, 9, 121, 4, 122, 9, 122, 4, 123, 9, 123, 4, 124, 9, 124, 4, 125, 9, 125, 4, 126, 9, 126, 4, 127, 9, 127, 4, 128, 9, 128, 4, 129, 9, 129, 4, 130, 9, 130, 4, 131, 9, 131, 4, 132, 9, 132, 4, 133, 9, 133, 4, 134, 9, 134, 4, 135, 9, 135, 4, 136, 9, 136, 4, 137, 9, 137, 4, 138, 9, 138, 4, 139, 9, 139, 4, 140, 9, 140, 4, 141, 9, 141, 4, 142, 9, 142, 4, 143, 9, 143, 4, 144, 9, 144, 4, 145, 9, 145, 4, 146, 9, 146, 4, 147, 9, 147, 4, 148, 9, 148, 4, 149, 9, 149, 4, 150, 9, 150, 4, 151, 9, 151, 4, 152, 9, 152, 4, 153, 9, 153, 4, 154, 9, 154, 4, 155, 9, 155, 4, 156, 9, 156, 4, 157, 9, 157, 4, 158, 9, 158, 4, 159, 9, 159, 4, 160, 9, 160, 4, 161, 9, 161, 4, 162, 9, 162, 4, 163, 9, 163, 4, 164, 9, 164, 4, 165, 9, 165, 4, 166, 9, 166, 4, 167, 9, 167, 4, 168, 9, 168, 4, 169, 9, 169, 4, 170, 9, 170, 4, 171, 9, 171, 4, 172, 9, 172, 4, 173, 9, 173, 4, 174, 9, 174, 4, 175, 9, 175, 4, 176, 9, 176, 4, 177, 9, 177, 4, 178, 9, 178, 4, 179, 9, 179, 4, 180, 9, 180, 4, 181, 9, 181, 4, 182, 9, 182, 4, 183, 9, 183, 4, 184, 9, 184, 4, 185, 9, 185, 4, 186, 9, 186, 4, 187, 9, 187, 4, 188, 9, 188, 4, 189, 9, 189, 4, 190, 9, 190, 4, 191, 9, 191, 4, 192, 9, 192, 4, 193, 9, 193, 4, 194, 9, 194, 4, 195, 9, 195, 4, 196, 9, 196, 4, 197, 9, 197, 4, 198, 9, 198, 4, 199, 9, 199, 4, 200, 9, 200, 4, 201, 9, 201, 4, 202, 9, 202, 4, 203, 9, 203, 4, 204, 9, 204, 4, 205, 9, 205, 4, 206, 9, 206, 4, 207, 9, 207, 4, 208, 9, 208, 4, 209, 9, 209, 4, 210, 9, 210, 4, 211, 9, 211, 4, 212, 9, 212, 4, 213, 9, 213, 4, 214, 9, 214, 4, 215, 9, 215, 4, 216, 9, 216, 4, 217, 9, 217, 4, 218, 9, 218, 4, 219, 9, 219, 4, 220, 9, 220, 4, 221, 9, 221, 4, 222, 9, 222, 4, 223, 9, 223, 4, 224, 9, 224, 4, 225, 9, 225, 4, 226, 9, 226, 4, 227, 9, 227, 4, 228, 9, 228, 4, 229, 9, 229, 4, 230, 9, 230, 4, 231, 9, 231, 4, 232, 9, 232, 4, 233, 9, 233, 4, 234, 9, 234, 4, 235, 9, 235, 4, 236, 9, 236, 4, 237, 9, 237, 4, 238, 9, 238, 4, 239, 9, 239, 4, 240, 9, 240, 4, 241, 9, 241, 4, 242, 9, 242, 4, 243, 9, 243, 4, 244, 9, 244, 4, 245, 9, 245, 4, 246, 9, 246, 4, 247, 9, 247, 4, 248, 9, 248, 4, 249, 9, 249, 4, 250, 9, 250, 4, 251, 9, 251, 4, 252, 9, 252, 4, 253, 9, 253, 4, 254, 9, 254, 4, 255, 9, 255, 4, 256, 9, 256, 4, 257, 9, 257, 4, 258, 9, 258, 4, 259, 9, 259, 4, 260, 9, 260, 4, 261, 9, 261, 4, 262, 9, 262, 4, 263, 9, 263, 4, 264, 9, 264, 4, 265, 9, 265, 4, 266, 9, 266, 4, 267, 9, 267, 4, 268, 9, 268, 4, 269, 9, 269, 4, 270, 9, 270, 4, 271, 9, 271, 4, 272, 9, 272, 4, 273, 9, 273, 4, 274, 9, 274, 4, 275, 9, 275, 4, 276, 9, 276, 4, 277, 9, 277, 4, 278, 9, 278, 4, 279, 9, 279, 4, 280, 9, 280, 4, 281, 9, 281, 4, 282, 9, 282, 4, 283, 9, 283, 4, 284, 9, 284, 4, 285, 9, 285, 4, 286, 9, 286, 4, 287, 9, 287, 4, 288, 9, 288, 4, 289, 9, 289, 4, 290, 9, 290, 4, 291, 9, 291, 4, 292, 9, 292, 4, 293, 9, 293, 4, 294, 9, 294, 4, 295, 9, 295, 4, 296, 9, 296, 4, 297, 9, 297, 4, 298, 9, 298, 4, 299, 9, 299, 4, 300, 9, 300, 4, 301, 9, 301, 4, 302, 9, 302, 4, 303, 9, 303, 4, 304, 9, 304, 4, 305, 9, 305, 4, 306, 9, 306, 4, 307, 9, 307, 4, 308, 9, 308, 4, 309, 9, 309, 4, 310, 9, 310, 4, 311, 9, 311, 4, 312, 9, 312, 4, 313, 9, 313, 3, 2, 3, 2, 3, 2, 3, 2, 7, 2, 635, 10, 2, 12, 2, 14, 2, 638, 11, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 3, 645, 10, 3, 12, 3, 14, 3, 648, 11, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 3, 4, 3, 4, 3, 4, 7, 4, 659, 10, 4, 12, 4, 14, 4, 662, 11, 4, 3, 4, 3, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 6, 3, 6, 3, 6, 5, 6, 673, 10, 6, 5, 6, 675, 10, 6, 3, 7, 3, 7, 3, 7, 5, 7, 680, 10, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 9, 3, 9, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 3, 20, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 28, 3, 28, 3, 29, 3, 29, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 5, 43, 779, 10, 43, 3, 44, 3, 44, 5, 44, 783, 10, 44, 3, 44, 3, 44, 3, 45, 3, 45, 5, 45, 789, 10, 45, 3, 45, 3, 45, 3, 45, 5, 45, 794, 10, 45, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 48, 3, 48, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 76, 3, 76, 3, 76, 3, 76, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 78, 3, 78, 3, 78, 3, 78, 3, 79, 3, 79, 3, 79, 3, 79, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 82, 3, 82, 3, 82, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 86, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 87, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 88, 3, 89, 3, 89, 3, 89, 3, 90, 3, 90, 3, 90, 3, 90, 3, 90, 3, 91, 3, 91, 3, 91, 3, 91, 3, 91, 3, 92, 3, 92, 3, 92, 3, 92, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 93, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 3, 95, 3, 95, 3, 95, 3, 95, 3, 96, 3, 96, 3, 96, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 97, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 98, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 99, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 101, 3, 102, 3, 102, 3, 102, 3, 103, 3, 103, 3, 103, 3, 104, 3, 104, 3, 104, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 3, 105, 5, 105, 1141, 10, 105, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 3, 106, 5, 106, 1149, 10, 106, 3, 107, 3, 107, 3, 107, 3, 107, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 108, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 109, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 111, 3, 111, 3, 111, 3, 111, 3, 111, 3, 111, 3, 111, 3, 111, 3, 111, 3, 111, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 112, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 114, 3, 115, 3, 115, 3, 115, 3, 115, 3, 115, 3, 115, 3, 115, 3, 115, 3, 115, 3, 115, 3, 115, 3, 116, 3, 116, 3, 116, 3, 116, 3, 116, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 117, 3, 118, 3, 118, 3, 118, 3, 118, 3, 118, 3, 118, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 3, 120, 3, 120, 3, 120, 3, 120, 3, 120, 3, 120, 3, 120, 3, 120, 3, 120, 3, 121, 3, 121, 3, 121, 3, 121, 3, 121, 3, 121, 3, 121, 3, 122, 3, 122, 3, 122, 3, 122, 3, 122, 3, 122, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 123, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 3, 124, 3, 125, 3, 125, 3, 125, 3, 125, 3, 125, 3, 125, 3, 125, 3, 125, 3, 125, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 127, 3, 127, 3, 127, 3, 127, 3, 127, 3, 127, 3, 128, 3, 128, 3, 128, 3, 128, 3, 128, 3, 129, 3, 129, 3, 129, 3, 129, 3, 129, 3, 129, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 130, 3, 131, 3, 131, 3, 131, 3, 131, 3, 131, 3, 131, 3, 131, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 132, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 134, 3, 134, 3, 134, 3, 134, 3, 134, 3, 134, 3, 134, 3, 134, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 135, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 136, 3, 137, 3, 137, 3, 138, 3, 138, 3, 139, 3, 139, 5, 139, 1384, 10, 139, 3, 140, 3, 140, 7, 140, 1388, 10, 140, 12, 140, 14, 140, 1391, 11, 140, 3, 140, 3, 140, 3, 140, 5, 140, 1396, 10, 140, 3, 141, 3, 141, 5, 141, 1400, 10, 141, 3, 141, 3, 141, 3, 142, 3, 142, 5, 142, 1406, 10, 142, 3, 143, 3, 143, 3, 143, 3, 143, 3, 143, 3, 143, 5, 143, 1414, 10, 143, 3, 144, 5, 144, 1417, 10, 144, 3, 144, 3, 144, 3, 144, 5, 144, 1422, 10, 144, 3, 144, 3, 144, 3, 144, 5, 144, 1427, 10, 144, 3, 145, 3, 145, 7, 145, 1431, 10, 145, 12, 145, 14, 145, 1434, 11, 145, 3, 145, 3, 145, 3, 145, 5, 145, 1439, 10, 145, 3, 146, 3, 146, 3, 147, 3, 147, 5, 147, 1445, 10, 147, 3, 148, 3, 148, 3, 148, 3, 148, 7, 148, 1451, 10, 148, 12, 148, 14, 148, 1454, 11, 148, 3, 148, 3, 148, 3, 148, 3, 148, 3, 148, 5, 148, 1461, 10, 148, 3, 149, 3, 149, 3, 150, 3, 150, 5, 150, 1467, 10, 150, 3, 151, 3, 151, 3, 151, 3, 151, 7, 151, 1473, 10, 151, 12, 151, 14, 151, 1476, 11, 151, 3, 151, 3, 151, 3, 151, 3, 151, 3, 151, 5, 151, 1483, 10, 151, 3, 152, 3, 152, 3, 152, 5, 152, 1488, 10, 152, 3, 152, 3, 152, 5, 152, 1492, 10, 152, 3, 153, 3, 153, 3, 153, 5, 153, 1497, 10, 153, 3, 153, 3, 153, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 5, 154, 1510, 10, 154, 3, 155, 3, 155, 3, 155, 3, 155, 3, 155, 3, 156, 3, 156, 3, 156, 5, 156, 1520, 10, 156, 3, 156, 3, 156, 3, 157, 3, 157, 3, 158, 3, 158, 5, 158, 1528, 10, 158, 3, 158, 3, 158, 3, 158, 7, 158, 1533, 10, 158, 12, 158, 14, 158, 1536, 11, 158, 3, 158, 3, 158, 6, 158, 1540, 10, 158, 13, 158, 14, 158, 1541, 3, 158, 5, 158, 1545, 10, 158, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 3, 159, 5, 159, 1595, 10, 159, 3, 160, 3, 160, 3, 160, 3, 161, 3, 161, 3, 161, 3, 161, 3, 161, 3, 161, 3, 161, 3, 162, 3, 162, 3, 162, 3, 163, 3, 163, 5, 163, 1612, 10, 163, 3, 164, 3, 164, 3, 164, 3, 164, 3, 164, 5, 164, 1619, 10, 164, 3, 165, 3, 165, 3, 165, 3, 165, 3, 166, 3, 166, 3, 166, 3, 166, 3, 166, 3, 166, 3, 167, 3, 167, 3, 168, 3, 168, 3, 169, 3, 169, 3, 170, 3, 170, 3, 171, 3, 171, 3, 172, 3, 172, 3, 173, 3, 173, 3, 174, 3, 174, 3, 174, 3, 174, 3, 175, 3, 175, 3, 176, 6, 176, 1652, 10, 176, 13, 176, 14, 176, 1653, 3, 176, 5, 176, 1657, 10, 176, 3, 177, 3, 177, 5, 177, 1661, 10, 177, 3, 178, 3, 178, 3, 178, 3, 178, 3, 178, 3, 179, 5, 179, 1669, 10, 179, 3, 179, 3, 179, 3, 179, 3, 179, 3, 179, 3, 179, 3, 180, 6, 180, 1678, 10, 180, 13, 180, 14, 180, 1679, 3, 181, 3, 181, 3, 182, 6, 182, 1685, 10, 182, 13, 182, 14, 182, 1686, 3, 182, 5, 182, 1690, 10, 182, 3, 183, 3, 183, 3, 183, 3, 183, 3, 183, 3, 184, 3, 184, 3, 184, 3, 184, 3, 184, 3, 185, 3, 185, 3, 185, 3, 185, 3, 185, 3, 186, 3, 186, 3, 186, 3, 186, 3, 186, 3, 187, 3, 187, 3, 187, 3, 187, 3, 187, 3, 188, 3, 188, 3, 188, 3, 188, 3, 188, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 190, 3, 190, 3, 190, 3, 190, 3, 191, 3, 191, 3, 191, 3, 191, 3, 192, 3, 192, 3, 192, 3, 192, 3, 193, 3, 193, 3, 193, 3, 193, 3, 194, 3, 194, 3, 194, 3, 194, 3, 195, 3, 195, 3, 195, 3, 195, 3, 196, 3, 196, 3, 196, 3, 196, 3, 197, 3, 197, 3, 197, 3, 197, 3, 198, 3, 198, 3, 198, 3, 198, 3, 199, 3, 199, 3, 199, 3, 199, 3, 200, 3, 200, 3, 200, 3, 200, 3, 201, 3, 201, 3, 201, 5, 201, 1774, 10, 201, 3, 201, 3, 201, 3, 202, 3, 202, 3, 202, 3, 202, 3, 203, 3, 203, 3, 203, 3, 203, 3, 204, 3, 204, 3, 204, 3, 204, 3, 205, 3, 205, 3, 205, 3, 205, 3, 206, 3, 206, 3, 206, 3, 206, 3, 207, 3, 207, 3, 207, 3, 207, 3, 208, 3, 208, 3, 208, 3, 208, 3, 209, 3, 209, 3, 209, 3, 209, 3, 210, 3, 210, 3, 210, 3, 210, 3, 211, 3, 211, 3, 211, 3, 211, 3, 212, 3, 212, 3, 212, 3, 212, 3, 213, 3, 213, 3, 213, 3, 213, 3, 214, 3, 214, 3, 214, 3, 214, 3, 215, 3, 215, 3, 215, 3, 215, 3, 216, 3, 216, 3, 216, 3, 216, 3, 217, 3, 217, 3, 217, 3, 217, 3, 218, 3, 218, 3, 218, 3, 218, 3, 219, 3, 219, 3, 219, 3, 219, 3, 220, 3, 220, 3, 220, 3, 220, 3, 221, 3, 221, 3, 221, 3, 221, 3, 222, 3, 222, 3, 222, 5, 222, 1861, 10, 222, 3, 222, 3, 222, 3, 223, 3, 223, 3, 223, 3, 223, 3, 224, 3, 224, 3, 224, 3, 224, 3, 225, 3, 225, 3, 225, 3, 225, 3, 226, 3, 226, 3, 226, 3, 226, 3, 227, 3, 227, 3, 227, 3, 227, 3, 228, 3, 228, 3, 228, 3, 228, 3, 229, 3, 229, 3, 229, 3, 229, 3, 230, 3, 230, 3, 230, 3, 230, 3, 231, 3, 231, 3, 231, 3, 231, 3, 232, 3, 232, 3, 232, 3, 232, 3, 233, 3, 233, 3, 233, 3, 233, 3, 234, 3, 234, 3, 234, 3, 234, 3, 235, 3, 235, 3, 235, 3, 235, 3, 236, 3, 236, 3, 236, 3, 236, 3, 237, 3, 237, 3, 237, 3, 237, 3, 238, 3, 238, 3, 238, 3, 238, 3, 238, 3, 239, 3, 239, 3, 239, 3, 239, 3, 239, 3, 240, 3, 240, 3, 240, 3, 240, 3, 241, 3, 241, 3, 241, 3, 241, 3, 242, 3, 242, 3, 242, 3, 242, 3, 243, 3, 243, 3, 243, 3, 243, 3, 244, 3, 244, 3, 244, 3, 244, 3, 245, 3, 245, 3, 245, 3, 245, 3, 246, 3, 246, 3, 246, 3, 246, 3, 247, 3, 247, 3, 247, 3, 247, 3, 248, 3, 248, 3, 248, 3, 248, 3, 249, 3, 249, 3, 249, 3, 249, 3, 250, 3, 250, 3, 250, 3, 250, 3, 251, 3, 251, 3, 251, 3, 251, 3, 252, 3, 252, 3, 252, 3, 252, 3, 253, 3, 253, 3, 253, 3, 253, 3, 254, 3, 254, 3, 254, 3, 254, 3, 255, 3, 255, 3, 255, 3, 255, 3, 256, 3, 256, 3, 256, 3, 256, 3, 257, 3, 257, 3, 257, 3, 257, 3, 258, 3, 258, 3, 258, 3, 258, 3, 259, 3, 259, 3, 259, 3, 259, 3, 260, 3, 260, 3, 260, 3, 260, 3, 261, 3, 261, 3, 261, 3, 261, 3, 262, 3, 262, 3, 262, 3, 262, 3, 263, 3, 263, 3, 263, 3, 263, 3, 264, 3, 264, 3, 264, 3, 264, 3, 265, 3, 265, 3, 265, 3, 265, 3, 266, 3, 266, 3, 266, 3, 266, 3, 267, 3, 267, 3, 267, 3, 267, 3, 268, 3, 268, 3, 268, 3, 268, 3, 269, 3, 269, 3, 269, 3, 269, 3, 270, 3, 270, 3, 270, 3, 270, 3, 271, 3, 271, 3, 271, 3, 271, 3, 272, 3, 272, 3, 272, 3, 272, 3, 273, 3, 273, 3, 273, 3, 273, 3, 274, 3, 274, 3, 274, 3, 274, 3, 275, 3, 275, 3, 275, 3, 275, 3, 276, 3, 276, 3, 276, 3, 276, 3, 277, 3, 277, 3, 277, 3, 277, 3, 278, 3, 278, 3, 278, 3, 278, 3, 279, 3, 279, 3, 279, 3, 279, 3, 280, 3, 280, 3, 280, 3, 280, 3, 281, 3, 281, 3, 281, 3, 281, 3, 282, 3, 282, 3, 282, 3, 282, 3, 283, 3, 283, 3, 283, 3, 283, 3, 284, 3, 284, 3, 284, 3, 284, 3, 285, 3, 285, 3, 285, 3, 285, 3, 286, 3, 286, 3, 286, 3, 286, 3, 287, 3, 287, 3, 287, 3, 287, 3, 288, 3, 288, 3, 288, 3, 288, 3, 289, 3, 289, 3, 289, 3, 289, 3, 290, 3, 290, 3, 290, 3, 290, 3, 291, 3, 291, 3, 291, 3, 291, 3, 292, 3, 292, 3, 292, 3, 292, 3, 293, 3, 293, 3, 293, 3, 293, 3, 294, 3, 294, 3, 294, 3, 294, 3, 295, 3, 295, 3, 295, 3, 295, 3, 296, 3, 296, 3, 296, 3, 296, 3, 297, 3, 297, 3, 297, 3, 297, 3, 298, 3, 298, 3, 298, 3, 298, 3, 299, 3, 299, 3, 299, 3, 299, 3, 300, 3, 300, 3, 300, 3, 300, 3, 301, 3, 301, 3, 301, 3, 301, 3, 302, 3, 302, 3, 302, 3, 302, 3, 303, 3, 303, 3, 303, 3, 303, 3, 304, 3, 304, 3, 304, 3, 304, 3, 305, 3, 305, 3, 305, 3, 305, 3, 306, 3, 306, 3, 306, 3, 306, 3, 307, 3, 307, 3, 307, 3, 307, 3, 308, 3, 308, 3, 308, 3, 308, 3, 309, 3, 309, 3, 309, 3, 309, 3, 310, 3, 310, 5, 310, 2217, 10, 310, 3, 310, 3, 310, 3, 311, 3, 311, 3, 311, 3, 311, 3, 312, 3, 312, 3, 312, 3, 312, 3, 313, 3, 313, 3, 646, 2, 314, 6, 3, 8, 4, 10, 5, 12, 6, 14, 7, 16, 2, 18, 8, 20, 9, 22, 10, 24, 11, 26, 12, 28, 13, 30, 14, 32, 15, 34, 16, 36, 17, 38, 18, 40, 19, 42, 20, 44, 21, 46, 22, 48, 23, 50, 24, 52, 25, 54, 26, 56, 27, 58, 28, 60, 29, 62, 30, 64, 31, 66, 32, 68, 33, 70, 34, 72, 35, 74, 36, 76, 37, 78, 38, 80, 39, 82, 40, 84, 41, 86, 42, 88, 43, 90, 44, 92, 45, 94, 46, 96, 47, 98, 48, 100, 49, 102, 50, 104, 51, 106, 52, 108, 53, 110, 54, 112, 55, 114, 56, 116, 57, 118, 58, 120, 59, 122, 60, 124, 61, 126, 62, 128, 63, 130, 64, 132, 65, 134, 66, 136, 67, 138, 68, 140, 69, 142, 70, 144, 71, 146, 72, 148, 73, 150, 74, 152, 75, 154, 76, 156, 77, 158, 78, 160, 79, 162, 80, 164, 81, 166, 82, 168, 83, 170, 84, 172, 85, 174, 86, 176, 87, 178, 88, 180, 89, 182, 90, 184, 91, 186, 92, 188, 93, 190, 94, 192, 95, 194, 96, 196, 97, 198, 98, 200, 99, 202, 100, 204, 101, 206, 102, 208, 103, 210, 104, 212, 105, 214, 106, 216, 107, 218, 108, 220, 109, 222, 110, 224, 111, 226, 112, 228, 113, 230, 114, 232, 115, 234, 116, 236, 117, 238, 118, 240, 119, 242, 120, 244, 121, 246, 122, 248, 123, 250, 124, 252, 125, 254, 126, 256, 127, 258, 128, 260, 129, 262, 130, 264, 131, 266, 132, 268, 133, 270, 134, 272, 135, 274, 136, 276, 2, 278, 2, 280, 2, 282, 2, 284, 2, 286, 137, 288, 138, 290, 139, 292, 140, 294, 2, 296, 2, 298, 141, 300, 2, 302, 2, 304, 142, 306, 143, 308, 144, 310, 145, 312, 146, 314, 147, 316, 2, 318, 148, 320, 149, 322, 150, 324, 2, 326, 2, 328, 2, 330, 2, 332, 151, 334, 152, 336, 153, 338, 154, 340, 155, 342, 156, 344, 157, 346, 158, 348, 159, 350, 160, 352, 161, 354, 162, 356, 163, 358, 164, 360, 165, 362, 166, 364, 167, 366, 168, 368, 169, 370, 2, 372, 2, 374, 2, 376, 2, 378, 2, 380, 2, 382, 2, 384, 2, 386, 2, 388, 2, 390, 2, 392, 2, 394, 2, 396, 2, 398, 2, 400, 2, 402, 2, 404, 2, 406, 2, 408, 2, 410, 2, 412, 2, 414, 2, 416, 2, 418, 2, 420, 2, 422, 2, 424, 2, 426, 2, 428, 2, 430, 2, 432, 2, 434, 2, 436, 2, 438, 2, 440, 2, 442, 2, 444, 2, 446, 2, 448, 2, 450, 2, 452, 2, 454, 2, 456, 2, 458, 2, 460, 2, 462, 2, 464, 2, 466, 2, 468, 2, 470, 2, 472, 2, 474, 2, 476, 2, 478, 2, 480, 2, 482, 2, 484, 2, 486, 2, 488, 2, 490, 2, 492, 2, 494, 2, 496, 2, 498, 2, 500, 2, 502, 2, 504, 2, 506, 2, 508, 2, 510, 2, 512, 2, 514, 2, 516, 2, 518, 2, 520, 2, 522, 2, 524, 2, 526, 2, 528, 2, 530, 2, 532, 2, 534, 2, 536, 2, 538, 2, 540, 2, 542, 2, 544, 2, 546, 2, 548, 2, 550, 2, 552, 2, 554, 2, 556, 2, 558, 2, 560, 2, 562, 2, 564, 2, 566, 2, 568, 2, 570, 2, 572, 2, 574, 2, 576, 2, 578, 2, 580, 2, 582, 2, 584, 2, 586, 2, 588, 2, 590, 2, 592, 2, 594, 2, 596, 2, 598, 2, 600, 2, 602, 2, 604, 2, 606, 2, 608, 2, 610, 2, 612, 2, 614, 2, 616, 2, 618, 2, 620, 2, 622, 170, 624, 171, 626, 172, 628, 173, 6, 2, 3, 4, 5, 25, 4, 2, 12, 12, 15, 15, 5, 2, 11, 11, 14, 14, 34, 34, 4, 2, 71, 71, 103, 103, 4, 2, 45, 45, 47, 47, 4, 2, 72, 72, 104, 104, 5, 2, 50, 59, 67, 72, 99, 104, 4, 2, 90, 90, 122, 122, 3, 2, 50, 51, 4, 2, 68, 68, 100, 100, 4, 2, 87, 87, 119, 119, 4, 2, 78, 78, 110, 110, 6, 2, 12, 12, 15, 15, 41, 41, 94, 94, 5, 2, 12, 12, 15, 15, 98, 98, 10, 2, 36, 36, 38, 38, 41, 41, 94, 94, 100, 100, 112, 112, 116, 116, 118, 118, 584, 2, 99, 124, 183, 183, 225, 248, 250, 257, 259, 259, 261, 261, 263, 263, 265, 265, 267, 267, 269, 269, 271, 271, 273, 273, 275, 275, 277, 277, 279, 279, 281, 281, 283, 283, 285, 285, 287, 287, 289, 289, 291, 291, 293, 293, 295, 295, 297, 297, 299, 299, 301, 301, 303, 303, 305, 305, 307, 307, 309, 309, 311, 311, 313, 314, 316, 316, 318, 318, 320, 320, 322, 322, 324, 324, 326, 326, 328, 328, 330, 331, 333, 333, 335, 335, 337, 337, 339, 339, 341, 341, 343, 343, 345, 345, 347, 347, 349, 349, 351, 351, 353, 353, 355, 355, 357, 357, 359, 359, 361, 361, 363, 363, 365, 365, 367, 367, 369, 369, 371, 371, 373, 373, 375, 375, 377, 377, 380, 380, 382, 382, 384, 386, 389, 389, 391, 391, 394, 394, 398, 399, 404, 404, 407, 407, 411, 413, 416, 416, 419, 419, 421, 421, 423, 423, 426, 426, 428, 429, 431, 431, 434, 434, 438, 438, 440, 440, 443, 444, 447, 449, 456, 456, 459, 459, 462, 462, 464, 464, 466, 466, 468, 468, 470, 470, 472, 472, 474, 474, 476, 476, 478, 479, 481, 481, 483, 483, 485, 485, 487, 487, 489, 489, 491, 491, 493, 493, 495, 495, 497, 498, 501, 501, 503, 503, 507, 507, 509, 509, 511, 511, 513, 513, 515, 515, 517, 517, 519, 519, 521, 521, 523, 523, 525, 525, 527, 527, 529, 529, 531, 531, 533, 533, 535, 535, 537, 537, 539, 539, 541, 541, 543, 543, 545, 545, 547, 547, 549, 549, 551, 551, 553, 553, 555, 555, 557, 557, 559, 559, 561, 561, 563, 563, 565, 571, 574, 574, 577, 578, 580, 580, 585, 585, 587, 587, 589, 589, 591, 591, 593, 661, 663, 689, 883, 883, 885, 885, 889, 889, 893, 895, 914, 914, 942, 976, 978, 979, 983, 985, 987, 987, 989, 989, 991, 991, 993, 993, 995, 995, 997, 997, 999, 999, 1001, 1001, 1003, 1003, 1005, 1005, 1007, 1007, 1009, 1013, 1015, 1015, 1018, 1018, 1021, 1022, 1074, 1121, 1123, 1123, 1125, 1125, 1127, 1127, 1129, 1129, 1131, 1131, 1133, 1133, 1135, 1135, 1137, 1137, 1139, 1139, 1141, 1141, 1143, 1143, 1145, 1145, 1147, 1147, 1149, 1149, 1151, 1151, 1153, 1153, 1155, 1155, 1165, 1165, 1167, 1167, 1169, 1169, 1171, 1171, 1173, 1173, 1175, 1175, 1177, 1177, 1179, 1179, 1181, 1181, 1183, 1183, 1185, 1185, 1187, 1187, 1189, 1189, 1191, 1191, 1193, 1193, 1195, 1195, 1197, 1197, 1199, 1199, 1201, 1201, 1203, 1203, 1205, 1205, 1207, 1207, 1209, 1209, 1211, 1211, 1213, 1213, 1215, 1215, 1217, 1217, 1220, 1220, 1222, 1222, 1224, 1224, 1226, 1226, 1228, 1228, 1230, 1230, 1232, 1233, 1235, 1235, 1237, 1237, 1239, 1239, 1241, 1241, 1243, 1243, 1245, 1245, 1247, 1247, 1249, 1249, 1251, 1251, 1253, 1253, 1255, 1255, 1257, 1257, 1259, 1259, 1261, 1261, 1263, 1263, 1265, 1265, 1267, 1267, 1269, 1269, 1271, 1271, 1273, 1273, 1275, 1275, 1277, 1277, 1279, 1279, 1281, 1281, 1283, 1283, 1285, 1285, 1287, 1287, 1289, 1289, 1291, 1291, 1293, 1293, 1295, 1295, 1297, 1297, 1299, 1299, 1301, 1301, 1303, 1303, 1305, 1305, 1307, 1307, 1309, 1309, 1311, 1311, 1313, 1313, 1315, 1315, 1317, 1317, 1319, 1319, 1321, 1321, 1379, 1417, 7426, 7469, 7533, 7545, 7547, 7580, 7683, 7683, 7685, 7685, 7687, 7687, 7689, 7689, 7691, 7691, 7693, 7693, 7695, 7695, 7697, 7697, 7699, 7699, 7701, 7701, 7703, 7703, 7705, 7705, 7707, 7707, 7709, 7709, 7711, 7711, 7713, 7713, 7715, 7715, 7717, 7717, 7719, 7719, 7721, 7721, 7723, 7723, 7725, 7725, 7727, 7727, 7729, 7729, 7731, 7731, 7733, 7733, 7735, 7735, 7737, 7737, 7739, 7739, 7741, 7741, 7743, 7743, 7745, 7745, 7747, 7747, 7749, 7749, 7751, 7751, 7753, 7753, 7755, 7755, 7757, 7757, 7759, 7759, 7761, 7761, 7763, 7763, 7765, 7765, 7767, 7767, 7769, 7769, 7771, 7771, 7773, 7773, 7775, 7775, 7777, 7777, 7779, 7779, 7781, 7781, 7783, 7783, 7785, 7785, 7787, 7787, 7789, 7789, 7791, 7791, 7793, 7793, 7795, 7795, 7797, 7797, 7799, 7799, 7801, 7801, 7803, 7803, 7805, 7805, 7807, 7807, 7809, 7809, 7811, 7811, 7813, 7813, 7815, 7815, 7817, 7817, 7819, 7819, 7821, 7821, 7823, 7823, 7825, 7825, 7827, 7827, 7829, 7829, 7831, 7839, 7841, 7841, 7843, 7843, 7845, 7845, 7847, 7847, 7849, 7849, 7851, 7851, 7853, 7853, 7855, 7855, 7857, 7857, 7859, 7859, 7861, 7861, 7863, 7863, 7865, 7865, 7867, 7867, 7869, 7869, 7871, 7871, 7873, 7873, 7875, 7875, 7877, 7877, 7879, 7879, 7881, 7881, 7883, 7883, 7885, 7885, 7887, 7887, 7889, 7889, 7891, 7891, 7893, 7893, 7895, 7895, 7897, 7897, 7899, 7899, 7901, 7901, 7903, 7903, 7905, 7905, 7907, 7907, 7909, 7909, 7911, 7911, 7913, 7913, 7915, 7915, 7917, 7917, 7919, 7919, 7921, 7921, 7923, 7923, 7925, 7925, 7927, 7927, 7929, 7929, 7931, 7931, 7933, 7933, 7935, 7935, 7937, 7945, 7954, 7959, 7970, 7977, 7986, 7993, 8002, 8007, 8018, 8025, 8034, 8041, 8050, 8063, 8066, 8073, 8082, 8089, 8098, 8105, 8114, 8118, 8120, 8121, 8128, 8128, 8132, 8134, 8136, 8137, 8146, 8149, 8152, 8153, 8162, 8169, 8180, 8182, 8184, 8185, 8460, 8460, 8464, 8465, 8469, 8469, 8497, 8497, 8502, 8502, 8507, 8507, 8510, 8511, 8520, 8523, 8528, 8528, 8582, 8582, 11314, 11360, 11363, 11363, 11367, 11368, 11370, 11370, 11372, 11372, 11374, 11374, 11379, 11379, 11381, 11382, 11384, 11389, 11395, 11395, 11397, 11397, 11399, 11399, 11401, 11401, 11403, 11403, 11405, 11405, 11407, 11407, 11409, 11409, 11411, 11411, 11413, 11413, 11415, 11415, 11417, 11417, 11419, 11419, 11421, 11421, 11423, 11423, 11425, 11425, 11427, 11427, 11429, 11429, 11431, 11431, 11433, 11433, 11435, 11435, 11437, 11437, 11439, 11439, 11441, 11441, 11443, 11443, 11445, 11445, 11447, 11447, 11449, 11449, 11451, 11451, 11453, 11453, 11455, 11455, 11457, 11457, 11459, 11459, 11461, 11461, 11463, 11463, 11465, 11465, 11467, 11467, 11469, 11469, 11471, 11471, 11473, 11473, 11475, 11475, 11477, 11477, 11479, 11479, 11481, 11481, 11483, 11483, 11485, 11485, 11487, 11487, 11489, 11489, 11491, 11491, 11493, 11494, 11502, 11502, 11504, 11504, 11509, 11509, 11522, 11559, 11561, 11561, 11567, 11567, 42563, 42563, 42565, 42565, 42567, 42567, 42569, 42569, 42571, 42571, 42573, 42573, 42575, 42575, 42577, 42577, 42579, 42579, 42581, 42581, 42583, 42583, 42585, 42585, 42587, 42587, 42589, 42589, 42591, 42591, 42593, 42593, 42595, 42595, 42597, 42597, 42599, 42599, 42601, 42601, 42603, 42603, 42605, 42605, 42607, 42607, 42627, 42627, 42629, 42629, 42631, 42631, 42633, 42633, 42635, 42635, 42637, 42637, 42639, 42639, 42641, 42641, 42643, 42643, 42645, 42645, 42647, 42647, 42649, 42649, 42789, 42789, 42791, 42791, 42793, 42793, 42795, 42795, 42797, 42797, 42799, 42799, 42801, 42803, 42805, 42805, 42807, 42807, 42809, 42809, 42811, 42811, 42813, 42813, 42815, 42815, 42817, 42817, 42819, 42819, 42821, 42821, 42823, 42823, 42825, 42825, 42827, 42827, 42829, 42829, 42831, 42831, 42833, 42833, 42835, 42835, 42837, 42837, 42839, 42839, 42841, 42841, 42843, 42843, 42845, 42845, 42847, 42847, 42849, 42849, 42851, 42851, 42853, 42853, 42855, 42855, 42857, 42857, 42859, 42859, 42861, 42861, 42863, 42863, 42865, 42865, 42867, 42874, 42876, 42876, 42878, 42878, 42881, 42881, 42883, 42883, 42885, 42885, 42887, 42887, 42889, 42889, 42894, 42894, 42896, 42896, 42899, 42899, 42901, 42901, 42915, 42915, 42917, 42917, 42919, 42919, 42921, 42921, 42923, 42923, 43004, 43004, 64258, 64264, 64277, 64281, 65347, 65372, 53, 2, 690, 707, 712, 723, 738, 742, 750, 750, 752, 752, 886, 886, 892, 892, 1371, 1371, 1602, 1602, 1767, 1768, 2038, 2039, 2044, 2044, 2076, 2076, 2086, 2086, 2090, 2090, 2419, 2419, 3656, 3656, 3784, 3784, 4350, 4350, 6105, 6105, 6213, 6213, 6825, 6825, 7290, 7295, 7470, 7532, 7546, 7546, 7581, 7617, 8307, 8307, 8321, 8321, 8338, 8350, 11390, 11391, 11633, 11633, 11825, 11825, 12295, 12295, 12339, 12343, 12349, 12349, 12447, 12448, 12542, 12544, 40983, 40983, 42234, 42239, 42510, 42510, 42625, 42625, 42777, 42785, 42866, 42866, 42890, 42890, 43002, 43003, 43473, 43473, 43634, 43634, 43743, 43743, 43765, 43766, 65394, 65394, 65440, 65441, 291, 2, 172, 172, 188, 188, 445, 445, 450, 453, 662, 662, 1490, 1516, 1522, 1524, 1570, 1601, 1603, 1612, 1648, 1649, 1651, 1749, 1751, 1751, 1776, 1777, 1788, 1790, 1793, 1793, 1810, 1810, 1812, 1841, 1871, 1959, 1971, 1971, 1996, 2028, 2050, 2071, 2114, 2138, 2210, 2210, 2212, 2222, 2310, 2363, 2367, 2367, 2386, 2386, 2394, 2403, 2420, 2425, 2427, 2433, 2439, 2446, 2449, 2450, 2453, 2474, 2476, 2482, 2484, 2484, 2488, 2491, 2495, 2495, 2512, 2512, 2526, 2527, 2529, 2531, 2546, 2547, 2567, 2572, 2577, 2578, 2581, 2602, 2604, 2610, 2612, 2613, 2615, 2616, 2618, 2619, 2651, 2654, 2656, 2656, 2676, 2678, 2695, 2703, 2705, 2707, 2709, 2730, 2732, 2738, 2740, 2741, 2743, 2747, 2751, 2751, 2770, 2770, 2786, 2787, 2823, 2830, 2833, 2834, 2837, 2858, 2860, 2866, 2868, 2869, 2871, 2875, 2879, 2879, 2910, 2911, 2913, 2915, 2931, 2931, 2949, 2949, 2951, 2956, 2960, 2962, 2964, 2967, 2971, 2972, 2974, 2974, 2976, 2977, 2981, 2982, 2986, 2988, 2992, 3003, 3026, 3026, 3079, 3086, 3088, 3090, 3092, 3114, 3116, 3125, 3127, 3131, 3135, 3135, 3162, 3163, 3170, 3171, 3207, 3214, 3216, 3218, 3220, 3242, 3244, 3253, 3255, 3259, 3263, 3263, 3296, 3296, 3298, 3299, 3315, 3316, 3335, 3342, 3344, 3346, 3348, 3388, 3391, 3391, 3408, 3408, 3426, 3427, 3452, 3457, 3463, 3480, 3484, 3507, 3509, 3517, 3519, 3519, 3522, 3528, 3587, 3634, 3636, 3637, 3650, 3655, 3715, 3716, 3718, 3718, 3721, 3722, 3724, 3724, 3727, 3727, 3734, 3737, 3739, 3745, 3747, 3749, 3751, 3751, 3753, 3753, 3756, 3757, 3759, 3762, 3764, 3765, 3775, 3775, 3778, 3782, 3806, 3809, 3842, 3842, 3906, 3913, 3915, 3950, 3978, 3982, 4098, 4140, 4161, 4161, 4178, 4183, 4188, 4191, 4195, 4195, 4199, 4200, 4208, 4210, 4215, 4227, 4240, 4240, 4306, 4348, 4351, 4682, 4684, 4687, 4690, 4696, 4698, 4698, 4700, 4703, 4706, 4746, 4748, 4751, 4754, 4786, 4788, 4791, 4794, 4800, 4802, 4802, 4804, 4807, 4810, 4824, 4826, 4882, 4884, 4887, 4890, 4956, 4994, 5009, 5026, 5110, 5123, 5742, 5745, 5761, 5763, 5788, 5794, 5868, 5890, 5902, 5904, 5907, 5922, 5939, 5954, 5971, 5986, 5998, 6000, 6002, 6018, 6069, 6110, 6110, 6178, 6212, 6214, 6265, 6274, 6314, 6316, 6316, 6322, 6391, 6402, 6430, 6482, 6511, 6514, 6518, 6530, 6573, 6595, 6601, 6658, 6680, 6690, 6742, 6919, 6965, 6983, 6989, 7045, 7074, 7088, 7089, 7100, 7143, 7170, 7205, 7247, 7249, 7260, 7289, 7403, 7406, 7408, 7411, 7415, 7416, 8503, 8506, 11570, 11625, 11650, 11672, 11682, 11688, 11690, 11696, 11698, 11704, 11706, 11712, 11714, 11720, 11722, 11728, 11730, 11736, 11738, 11744, 12296, 12296, 12350, 12350, 12355, 12440, 12449, 12449, 12451, 12540, 12545, 12545, 12551, 12591, 12595, 12688, 12706, 12732, 12786, 12801, 13314, 13314, 19895, 19895, 19970, 19970, 40910, 40910, 40962, 40982, 40984, 42126, 42194, 42233, 42242, 42509, 42514, 42529, 42540, 42541, 42608, 42608, 42658, 42727, 43005, 43011, 43013, 43015, 43017, 43020, 43022, 43044, 43074, 43125, 43140, 43189, 43252, 43257, 43261, 43261, 43276, 43303, 43314, 43336, 43362, 43390, 43398, 43444, 43522, 43562, 43586, 43588, 43590, 43597, 43618, 43633, 43635, 43640, 43644, 43644, 43650, 43697, 43699, 43699, 43703, 43704, 43707, 43711, 43714, 43714, 43716, 43716, 43741, 43742, 43746, 43756, 43764, 43764, 43779, 43784, 43787, 43792, 43795, 43800, 43810, 43816, 43818, 43824, 43970, 44004, 44034, 44034, 55205, 55205, 55218, 55240, 55245, 55293, 63746, 64111, 64114, 64219, 64287, 64287, 64289, 64298, 64300, 64312, 64314, 64318, 64320, 64320, 64322, 64323, 64325, 64326, 64328, 64435, 64469, 64831, 64850, 64913, 64916, 64969, 65010, 65021, 65138, 65142, 65144, 65278, 65384, 65393, 65395, 65439, 65442, 65472, 65476, 65481, 65484, 65489, 65492, 65497, 65500, 65502, 12, 2, 455, 455, 458, 458, 461, 461, 500, 500, 8074, 8081, 8090, 8097, 8106, 8113, 8126, 8126, 8142, 8142, 8190, 8190, 578, 2, 67, 92, 194, 216, 218, 224, 258, 258, 260, 260, 262, 262, 264, 264, 266, 266, 268, 268, 270, 270, 272, 272, 274, 274, 276, 276, 278, 278, 280, 280, 282, 282, 284, 284, 286, 286, 288, 288, 290, 290, 292, 292, 294, 294, 296, 296, 298, 298, 300, 300, 302, 302, 304, 304, 306, 306, 308, 308, 310, 310, 312, 312, 315, 315, 317, 317, 319, 319, 321, 321, 323, 323, 325, 325, 327, 327, 329, 329, 332, 332, 334, 334, 336, 336, 338, 338, 340, 340, 342, 342, 344, 344, 346, 346, 348, 348, 350, 350, 352, 352, 354, 354, 356, 356, 358, 358, 360, 360, 362, 362, 364, 364, 366, 366, 368, 368, 370, 370, 372, 372, 374, 374, 376, 376, 378, 379, 381, 381, 383, 383, 387, 388, 390, 390, 392, 393, 395, 397, 400, 403, 405, 406, 408, 410, 414, 415, 417, 418, 420, 420, 422, 422, 424, 425, 427, 427, 430, 430, 432, 433, 435, 437, 439, 439, 441, 442, 446, 446, 454, 454, 457, 457, 460, 460, 463, 463, 465, 465, 467, 467, 469, 469, 471, 471, 473, 473, 475, 475, 477, 477, 480, 480, 482, 482, 484, 484, 486, 486, 488, 488, 490, 490, 492, 492, 494, 494, 496, 496, 499, 499, 502, 502, 504, 506, 508, 508, 510, 510, 512, 512, 514, 514, 516, 516, 518, 518, 520, 520, 522, 522, 524, 524, 526, 526, 528, 528, 530, 530, 532, 532, 534, 534, 536, 536, 538, 538, 540, 540, 542, 542, 544, 544, 546, 546, 548, 548, 550, 550, 552, 552, 554, 554, 556, 556, 558, 558, 560, 560, 562, 562, 564, 564, 572, 573, 575, 576, 579, 579, 581, 584, 586, 586, 588, 588, 590, 590, 592, 592, 882, 882, 884, 884, 888, 888, 904, 904, 906, 908, 910, 910, 912, 913, 915, 931, 933, 941, 977, 977, 980, 982, 986, 986, 988, 988, 990, 990, 992, 992, 994, 994, 996, 996, 998, 998, 1000, 1000, 1002, 1002, 1004, 1004, 1006, 1006, 1008, 1008, 1014, 1014, 1017, 1017, 1019, 1020, 1023, 1073, 1122, 1122, 1124, 1124, 1126, 1126, 1128, 1128, 1130, 1130, 1132, 1132, 1134, 1134, 1136, 1136, 1138, 1138, 1140, 1140, 1142, 1142, 1144, 1144, 1146, 1146, 1148, 1148, 1150, 1150, 1152, 1152, 1154, 1154, 1164, 1164, 1166, 1166, 1168, 1168, 1170, 1170, 1172, 1172, 1174, 1174, 1176, 1176, 1178, 1178, 1180, 1180, 1182, 1182, 1184, 1184, 1186, 1186, 1188, 1188, 1190, 1190, 1192, 1192, 1194, 1194, 1196, 1196, 1198, 1198, 1200, 1200, 1202, 1202, 1204, 1204, 1206, 1206, 1208, 1208, 1210, 1210, 1212, 1212, 1214, 1214, 1216, 1216, 1218, 1219, 1221, 1221, 1223, 1223, 1225, 1225, 1227, 1227, 1229, 1229, 1231, 1231, 1234, 1234, 1236, 1236, 1238, 1238, 1240, 1240, 1242, 1242, 1244, 1244, 1246, 1246, 1248, 1248, 1250, 1250, 1252, 1252, 1254, 1254, 1256, 1256, 1258, 1258, 1260, 1260, 1262, 1262, 1264, 1264, 1266, 1266, 1268, 1268, 1270, 1270, 1272, 1272, 1274, 1274, 1276, 1276, 1278, 1278, 1280, 1280, 1282, 1282, 1284, 1284, 1286, 1286, 1288, 1288, 1290, 1290, 1292, 1292, 1294, 1294, 1296, 1296, 1298, 1298, 1300, 1300, 1302, 1302, 1304, 1304, 1306, 1306, 1308, 1308, 1310, 1310, 1312, 1312, 1314, 1314, 1316, 1316, 1318, 1318, 1320, 1320, 1331, 1368, 4258, 4295, 4297, 4297, 4303, 4303, 7682, 7682, 7684, 7684, 7686, 7686, 7688, 7688, 7690, 7690, 7692, 7692, 7694, 7694, 7696, 7696, 7698, 7698, 7700, 7700, 7702, 7702, 7704, 7704, 7706, 7706, 7708, 7708, 7710, 7710, 7712, 7712, 7714, 7714, 7716, 7716, 7718, 7718, 7720, 7720, 7722, 7722, 7724, 7724, 7726, 7726, 7728, 7728, 7730, 7730, 7732, 7732, 7734, 7734, 7736, 7736, 7738, 7738, 7740, 7740, 7742, 7742, 7744, 7744, 7746, 7746, 7748, 7748, 7750, 7750, 7752, 7752, 7754, 7754, 7756, 7756, 7758, 7758, 7760, 7760, 7762, 7762, 7764, 7764, 7766, 7766, 7768, 7768, 7770, 7770, 7772, 7772, 7774, 7774, 7776, 7776, 7778, 7778, 7780, 7780, 7782, 7782, 7784, 7784, 7786, 7786, 7788, 7788, 7790, 7790, 7792, 7792, 7794, 7794, 7796, 7796, 7798, 7798, 7800, 7800, 7802, 7802, 7804, 7804, 7806, 7806, 7808, 7808, 7810, 7810, 7812, 7812, 7814, 7814, 7816, 7816, 7818, 7818, 7820, 7820, 7822, 7822, 7824, 7824, 7826, 7826, 7828, 7828, 7830, 7830, 7840, 7840, 7842, 7842, 7844, 7844, 7846, 7846, 7848, 7848, 7850, 7850, 7852, 7852, 7854, 7854, 7856, 7856, 7858, 7858, 7860, 7860, 7862, 7862, 7864, 7864, 7866, 7866, 7868, 7868, 7870, 7870, 7872, 7872, 7874, 7874, 7876, 7876, 7878, 7878, 7880, 7880, 7882, 7882, 7884, 7884, 7886, 7886, 7888, 7888, 7890, 7890, 7892, 7892, 7894, 7894, 7896, 7896, 7898, 7898, 7900, 7900, 7902, 7902, 7904, 7904, 7906, 7906, 7908, 7908, 7910, 7910, 7912, 7912, 7914, 7914, 7916, 7916, 7918, 7918, 7920, 7920, 7922, 7922, 7924, 7924, 7926, 7926, 7928, 7928, 7930, 7930, 7932, 7932, 7934, 7934, 7936, 7936, 7946, 7953, 7962, 7967, 7978, 7985, 7994, 8001, 8010, 8015, 8027, 8027, 8029, 8029, 8031, 8031, 8033, 8033, 8042, 8049, 8122, 8125, 8138, 8141, 8154, 8157, 8170, 8174, 8186, 8189, 8452, 8452, 8457, 8457, 8461, 8463, 8466, 8468, 8471, 8471, 8475, 8479, 8486, 8486, 8488, 8488, 8490, 8490, 8492, 8495, 8498, 8501, 8512, 8513, 8519, 8519, 8581, 8581, 11266, 11312, 11362, 11362, 11364, 11366, 11369, 11369, 11371, 11371, 11373, 11373, 11375, 11378, 11380, 11380, 11383, 11383, 11392, 11394, 11396, 11396, 11398, 11398, 11400, 11400, 11402, 11402, 11404, 11404, 11406, 11406, 11408, 11408, 11410, 11410, 11412, 11412, 11414, 11414, 11416, 11416, 11418, 11418, 11420, 11420, 11422, 11422, 11424, 11424, 11426, 11426, 11428, 11428, 11430, 11430, 11432, 11432, 11434, 11434, 11436, 11436, 11438, 11438, 11440, 11440, 11442, 11442, 11444, 11444, 11446, 11446, 11448, 11448, 11450, 11450, 11452, 11452, 11454, 11454, 11456, 11456, 11458, 11458, 11460, 11460, 11462, 11462, 11464, 11464, 11466, 11466, 11468, 11468, 11470, 11470, 11472, 11472, 11474, 11474, 11476, 11476, 11478, 11478, 11480, 11480, 11482, 11482, 11484, 11484, 11486, 11486, 11488, 11488, 11490, 11490, 11492, 11492, 11501, 11501, 11503, 11503, 11508, 11508, 42562, 42562, 42564, 42564, 42566, 42566, 42568, 42568, 42570, 42570, 42572, 42572, 42574, 42574, 42576, 42576, 42578, 42578, 42580, 42580, 42582, 42582, 42584, 42584, 42586, 42586, 42588, 42588, 42590, 42590, 42592, 42592, 42594, 42594, 42596, 42596, 42598, 42598, 42600, 42600, 42602, 42602, 42604, 42604, 42606, 42606, 42626, 42626, 42628, 42628, 42630, 42630, 42632, 42632, 42634, 42634, 42636, 42636, 42638, 42638, 42640, 42640, 42642, 42642, 42644, 42644, 42646, 42646, 42648, 42648, 42788, 42788, 42790, 42790, 42792, 42792, 42794, 42794, 42796, 42796, 42798, 42798, 42800, 42800, 42804, 42804, 42806, 42806, 42808, 42808, 42810, 42810, 42812, 42812, 42814, 42814, 42816, 42816, 42818, 42818, 42820, 42820, 42822, 42822, 42824, 42824, 42826, 42826, 42828, 42828, 42830, 42830, 42832, 42832, 42834, 42834, 42836, 42836, 42838, 42838, 42840, 42840, 42842, 42842, 42844, 42844, 42846, 42846, 42848, 42848, 42850, 42850, 42852, 42852, 42854, 42854, 42856, 42856, 42858, 42858, 42860, 42860, 42862, 42862, 42864, 42864, 42875, 42875, 42877, 42877, 42879, 42880, 42882, 42882, 42884, 42884, 42886, 42886, 42888, 42888, 42893, 42893, 42895, 42895, 42898, 42898, 42900, 42900, 42914, 42914, 42916, 42916, 42918, 42918, 42920, 42920, 42922, 42922, 42924, 42924, 65315, 65340, 37, 2, 50, 59, 1634, 1643, 1778, 1787, 1986, 1995, 2408, 2417, 2536, 2545, 2664, 2673, 2792, 2801, 2920, 2929, 3048, 3057, 3176, 3185, 3304, 3313, 3432, 3441, 3666, 3675, 3794, 3803, 3874, 3883, 4162, 4171, 4242, 4251, 6114, 6123, 6162, 6171, 6472, 6481, 6610, 6619, 6786, 6795, 6802, 6811, 6994, 7003, 7090, 7099, 7234, 7243, 7250, 7259, 42530, 42539, 43218, 43227, 43266, 43275, 43474, 43483, 43602, 43611, 44018, 44027, 65298, 65307, 9, 2, 5872, 5874, 8546, 8580, 8583, 8586, 12297, 12297, 12323, 12331, 12346, 12348, 42728, 42737, 5, 2, 36, 36, 38, 38, 94, 94, 4, 2, 36, 36, 38, 38, 2, 2317, 2, 6, 3, 2, 2, 2, 2, 8, 3, 2, 2, 2, 2, 10, 3, 2, 2, 2, 2, 12, 3, 2, 2, 2, 2, 14, 3, 2, 2, 2, 2, 18, 3, 2, 2, 2, 2, 20, 3, 2, 2, 2, 2, 22, 3, 2, 2, 2, 2, 24, 3, 2, 2, 2, 2, 26, 3, 2, 2, 2, 2, 28, 3, 2, 2, 2, 2, 30, 3, 2, 2, 2, 2, 32, 3, 2, 2, 2, 2, 34, 3, 2, 2, 2, 2, 36, 3, 2, 2, 2, 2, 38, 3, 2, 2, 2, 2, 40, 3, 2, 2, 2, 2, 42, 3, 2, 2, 2, 2, 44, 3, 2, 2, 2, 2, 46, 3, 2, 2, 2, 2, 48, 3, 2, 2, 2, 2, 50, 3, 2, 2, 2, 2, 52, 3, 2, 2, 2, 2, 54, 3, 2, 2, 2, 2, 56, 3, 2, 2, 2, 2, 58, 3, 2, 2, 2, 2, 60, 3, 2, 2, 2, 2, 62, 3, 2, 2, 2, 2, 64, 3, 2, 2, 2, 2, 66, 3, 2, 2, 2, 2, 68, 3, 2, 2, 2, 2, 70, 3, 2, 2, 2, 2, 72, 3, 2, 2, 2, 2, 74, 3, 2, 2, 2, 2, 76, 3, 2, 2, 2, 2, 78, 3, 2, 2, 2, 2, 80, 3, 2, 2, 2, 2, 82, 3, 2, 2, 2, 2, 84, 3, 2, 2, 2, 2, 86, 3, 2, 2, 2, 2, 88, 3, 2, 2, 2, 2, 90, 3, 2, 2, 2, 2, 92, 3, 2, 2, 2, 2, 94, 3, 2, 2, 2, 2, 96, 3, 2, 2, 2, 2, 98, 3, 2, 2, 2, 2, 100, 3, 2, 2, 2, 2, 102, 3, 2, 2, 2, 2, 104, 3, 2, 2, 2, 2, 106, 3, 2, 2, 2, 2, 108, 3, 2, 2, 2, 2, 110, 3, 2, 2, 2, 2, 112, 3, 2, 2, 2, 2, 114, 3, 2, 2, 2, 2, 116, 3, 2, 2, 2, 2, 118, 3, 2, 2, 2, 2, 120, 3, 2, 2, 2, 2, 122, 3, 2, 2, 2, 2, 124, 3, 2, 2, 2, 2, 126, 3, 2, 2, 2, 2, 128, 3, 2, 2, 2, 2, 130, 3, 2, 2, 2, 2, 132, 3, 2, 2, 2, 2, 134, 3, 2, 2, 2, 2, 136, 3, 2, 2, 2, 2, 138, 3, 2, 2, 2, 2, 140, 3, 2, 2, 2, 2, 142, 3, 2, 2, 2, 2, 144, 3, 2, 2, 2, 2, 146, 3, 2, 2, 2, 2, 148, 3, 2, 2, 2, 2, 150, 3, 2, 2, 2, 2, 152, 3, 2, 2, 2, 2, 154, 3, 2, 2, 2, 2, 156, 3, 2, 2, 2, 2, 158, 3, 2, 2, 2, 2, 160, 3, 2, 2, 2, 2, 162, 3, 2, 2, 2, 2, 164, 3, 2, 2, 2, 2, 166, 3, 2, 2, 2, 2, 168, 3, 2, 2, 2, 2, 170, 3, 2, 2, 2, 2, 172, 3, 2, 2, 2, 2, 174, 3, 2, 2, 2, 2, 176, 3, 2, 2, 2, 2, 178, 3, 2, 2, 2, 2, 180, 3, 2, 2, 2, 2, 182, 3, 2, 2, 2, 2, 184, 3, 2, 2, 2, 2, 186, 3, 2, 2, 2, 2, 188, 3, 2, 2, 2, 2, 190, 3, 2, 2, 2, 2, 192, 3, 2, 2, 2, 2, 194, 3, 2, 2, 2, 2, 196, 3, 2, 2, 2, 2, 198, 3, 2, 2, 2, 2, 200, 3, 2, 2, 2, 2, 202, 3, 2, 2, 2, 2, 204, 3, 2, 2, 2, 2, 206, 3, 2, 2, 2, 2, 208, 3, 2, 2, 2, 2, 210, 3, 2, 2, 2, 2, 212, 3, 2, 2, 2, 2, 214, 3, 2, 2, 2, 2, 216, 3, 2, 2, 2, 2, 218, 3, 2, 2, 2, 2, 220, 3, 2, 2, 2, 2, 222, 3, 2, 2, 2, 2, 224, 3, 2, 2, 2, 2, 226, 3, 2, 2, 2, 2, 228, 3, 2, 2, 2, 2, 230, 3, 2, 2, 2, 2, 232, 3, 2, 2, 2, 2, 234, 3, 2, 2, 2, 2, 236, 3, 2, 2, 2, 2, 238, 3, 2, 2, 2, 2, 240, 3, 2, 2, 2, 2, 242, 3, 2, 2, 2, 2, 244, 3, 2, 2, 2, 2, 246, 3, 2, 2, 2, 2, 248, 3, 2, 2, 2, 2, 250, 3, 2, 2, 2, 2, 252, 3, 2, 2, 2, 2, 254, 3, 2, 2, 2, 2, 256, 3, 2, 2, 2, 2, 258, 3, 2, 2, 2, 2, 260, 3, 2, 2, 2, 2, 262, 3, 2, 2, 2, 2, 264, 3, 2, 2, 2, 2, 266, 3, 2, 2, 2, 2, 268, 3, 2, 2, 2, 2, 270, 3, 2, 2, 2, 2, 272, 3, 2, 2, 2, 2, 274, 3, 2, 2, 2, 2, 286, 3, 2, 2, 2, 2, 288, 3, 2, 2, 2, 2, 290, 3, 2, 2, 2, 2, 292, 3, 2, 2, 2, 2, 298, 3, 2, 2, 2, 2, 304, 3, 2, 2, 2, 2, 306, 3, 2, 2, 2, 2, 308, 3, 2, 2, 2, 2, 310, 3, 2, 2, 2, 2, 312, 3, 2, 2, 2, 2, 314, 3, 2, 2, 2, 2, 318, 3, 2, 2, 2, 2, 320, 3, 2, 2, 2, 2, 322, 3, 2, 2, 2, 2, 332, 3, 2, 2, 2, 2, 334, 3, 2, 2, 2, 2, 336, 3, 2, 2, 2, 2, 338, 3, 2, 2, 2, 2, 340, 3, 2, 2, 2, 2, 342, 3, 2, 2, 2, 2, 344, 3, 2, 2, 2, 2, 346, 3, 2, 2, 2, 2, 348, 3, 2, 2, 2, 2, 628, 3, 2, 2, 2, 3, 350, 3, 2, 2, 2, 3, 352, 3, 2, 2, 2, 3, 354, 3, 2, 2, 2, 3, 356, 3, 2, 2, 2, 3, 358, 3, 2, 2, 2, 4, 360, 3, 2, 2, 2, 4, 362, 3, 2, 2, 2, 4, 364, 3, 2, 2, 2, 4, 366, 3, 2, 2, 2, 4, 368, 3, 2, 2, 2, 5, 370, 3, 2, 2, 2, 5, 372, 3, 2, 2, 2, 5, 374, 3, 2, 2, 2, 5, 376, 3, 2, 2, 2, 5, 378, 3, 2, 2, 2, 5, 380, 3, 2, 2, 2, 5, 382, 3, 2, 2, 2, 5, 384, 3, 2, 2, 2, 5, 386, 3, 2, 2, 2, 5, 388, 3, 2, 2, 2, 5, 390, 3, 2, 2, 2, 5, 392, 3, 2, 2, 2, 5, 394, 3, 2, 2, 2, 5, 396, 3, 2, 2, 2, 5, 398, 3, 2, 2, 2, 5, 400, 3, 2, 2, 2, 5, 402, 3, 2, 2, 2, 5, 404, 3, 2, 2, 2, 5, 406, 3, 2, 2, 2, 5, 408, 3, 2, 2, 2, 5, 410, 3, 2, 2, 2, 5, 412, 3, 2, 2, 2, 5, 414, 3, 2, 2, 2, 5, 416, 3, 2, 2, 2, 5, 418, 3, 2, 2, 2, 5, 420, 3, 2, 2, 2, 5, 422, 3, 2, 2, 2, 5, 424, 3, 2, 2, 2, 5, 426, 3, 2, 2, 2, 5, 428, 3, 2, 2, 2, 5, 430, 3, 2, 2, 2, 5, 432, 3, 2, 2, 2, 5, 434, 3, 2, 2, 2, 5, 436, 3, 2, 2, 2, 5, 438, 3, 2, 2, 2, 5, 440, 3, 2, 2, 2, 5, 442, 3, 2, 2, 2, 5, 444, 3, 2, 2, 2, 5, 446, 3, 2, 2, 2, 5, 448, 3, 2, 2, 2, 5, 450, 3, 2, 2, 2, 5, 452, 3, 2, 2, 2, 5, 454, 3, 2, 2, 2, 5, 456, 3, 2, 2, 2, 5, 458, 3, 2, 2, 2, 5, 460, 3, 2, 2, 2, 5, 462, 3, 2, 2, 2, 5, 464, 3, 2, 2, 2, 5, 466, 3, 2, 2, 2, 5, 468, 3, 2, 2, 2, 5, 470, 3, 2, 2, 2, 5, 472, 3, 2, 2, 2, 5, 474, 3, 2, 2, 2, 5, 476, 3, 2, 2, 2, 5, 478, 3, 2, 2, 2, 5, 480, 3, 2, 2, 2, 5, 482, 3, 2, 2, 2, 5, 484, 3, 2, 2, 2, 5, 486, 3, 2, 2, 2, 5, 488, 3, 2, 2, 2, 5, 490, 3, 2, 2, 2, 5, 492, 3, 2, 2, 2, 5, 494, 3, 2, 2, 2, 5, 496, 3, 2, 2, 2, 5, 498, 3, 2, 2, 2, 5, 500, 3, 2, 2, 2, 5, 502, 3, 2, 2, 2, 5, 504, 3, 2, 2, 2, 5, 506, 3, 2, 2, 2, 5, 508, 3, 2, 2, 2, 5, 510, 3, 2, 2, 2, 5, 512, 3, 2, 2, 2, 5, 514, 3, 2, 2, 2, 5, 516, 3, 2, 2, 2, 5, 518, 3, 2, 2, 2, 5, 520, 3, 2, 2, 2, 5, 522, 3, 2, 2, 2, 5, 524, 3, 2, 2, 2, 5, 526, 3, 2, 2, 2, 5, 528, 3, 2, 2, 2, 5, 530, 3, 2, 2, 2, 5, 532, 3, 2, 2, 2, 5, 534, 3, 2, 2, 2, 5, 536, 3, 2, 2, 2, 5, 538, 3, 2, 2, 2, 5, 540, 3, 2, 2, 2, 5, 542, 3, 2, 2, 2, 5, 544, 3, 2, 2, 2, 5, 546, 3, 2, 2, 2, 5, 548, 3, 2, 2, 2, 5, 550, 3, 2, 2, 2, 5, 552, 3, 2, 2, 2, 5, 554, 3, 2, 2, 2, 5, 556, 3, 2, 2, 2, 5, 558, 3, 2, 2, 2, 5, 560, 3, 2, 2, 2, 5, 562, 3, 2, 2, 2, 5, 564, 3, 2, 2, 2, 5, 566, 3, 2, 2, 2, 5, 568, 3, 2, 2, 2, 5, 570, 3, 2, 2, 2, 5, 572, 3, 2, 2, 2, 5, 574, 3, 2, 2, 2, 5, 576, 3, 2, 2, 2, 5, 578, 3, 2, 2, 2, 5, 580, 3, 2, 2, 2, 5, 582, 3, 2, 2, 2, 5, 584, 3, 2, 2, 2, 5, 586, 3, 2, 2, 2, 5, 588, 3, 2, 2, 2, 5, 590, 3, 2, 2, 2, 5, 592, 3, 2, 2, 2, 5, 594, 3, 2, 2, 2, 5, 596, 3, 2, 2, 2, 5, 598, 3, 2, 2, 2, 5, 600, 3, 2, 2, 2, 5, 602, 3, 2, 2, 2, 5, 604, 3, 2, 2, 2, 5, 606, 3, 2, 2, 2, 5, 608, 3, 2, 2, 2, 5, 610, 3, 2, 2, 2, 5, 612, 3, 2, 2, 2, 5, 614, 3, 2, 2, 2, 5, 616, 3, 2, 2, 2, 5, 618, 3, 2, 2, 2, 5, 620, 3, 2, 2, 2, 5, 622, 3, 2, 2, 2, 5, 624, 3, 2, 2, 2, 5, 626, 3, 2, 2, 2, 6, 630, 3, 2, 2, 2, 8, 639, 3, 2, 2, 2, 10, 654, 3, 2, 2, 2, 12, 665, 3, 2, 2, 2, 14, 674, 3, 2, 2, 2, 16, 679, 3, 2, 2, 2, 18, 681, 3, 2, 2, 2, 20, 685, 3, 2, 2, 2, 22, 687, 3, 2, 2, 2, 24, 689, 3, 2, 2, 2, 26, 693, 3, 2, 2, 2, 28, 695, 3, 2, 2, 2, 30, 699, 3, 2, 2, 2, 32, 701, 3, 2, 2, 2, 34, 705, 3, 2, 2, 2, 36, 708, 3, 2, 2, 2, 38, 710, 3, 2, 2, 2, 40, 712, 3, 2, 2, 2, 42, 714, 3, 2, 2, 2, 44, 716, 3, 2, 2, 2, 46, 718, 3, 2, 2, 2, 48, 721, 3, 2, 2, 2, 50, 724, 3, 2, 2, 2, 52, 727, 3, 2, 2, 2, 54, 730, 3, 2, 2, 2, 56, 733, 3, 2, 2, 2, 58, 735, 3, 2, 2, 2, 60, 737, 3, 2, 2, 2, 62, 739, 3, 2, 2, 2, 64, 741, 3, 2, 2, 2, 66, 744, 3, 2, 2, 2, 68, 747, 3, 2, 2, 2, 70, 750, 3, 2, 2, 2, 72, 753, 3, 2, 2, 2, 74, 756, 3, 2, 2, 2, 76, 759, 3, 2, 2, 2, 78, 762, 3, 2, 2, 2, 80, 765, 3, 2, 2, 2, 82, 768, 3, 2, 2, 2, 84, 771, 3, 2, 2, 2, 86, 773, 3, 2, 2, 2, 88, 775, 3, 2, 2, 2, 90, 782, 3, 2, 2, 2, 92, 788, 3, 2, 2, 2, 94, 795, 3, 2, 2, 2, 96, 798, 3, 2, 2, 2, 98, 800, 3, 2, 2, 2, 100, 802, 3, 2, 2, 2, 102, 804, 3, 2, 2, 2, 104, 807, 3, 2, 2, 2, 106, 810, 3, 2, 2, 2, 108, 813, 3, 2, 2, 2, 110, 817, 3, 2, 2, 2, 112, 821, 3, 2, 2, 2, 114, 824, 3, 2, 2, 2, 116, 828, 3, 2, 2, 2, 118, 830, 3, 2, 2, 2, 120, 840, 3, 2, 2, 2, 122, 852, 3, 2, 2, 2, 124, 861, 3, 2, 2, 2, 126, 869, 3, 2, 2, 2, 128, 878, 3, 2, 2, 2, 130, 883, 3, 2, 2, 2, 132, 889, 3, 2, 2, 2, 134, 898, 3, 2, 2, 2, 136, 902, 3, 2, 2, 2, 138, 906, 3, 2, 2, 2, 140, 915, 3, 2, 2, 2, 142, 921, 3, 2, 2, 2, 144, 930, 3, 2, 2, 2, 146, 939, 3, 2, 2, 2, 148, 947, 3, 2, 2, 2, 150, 954, 3, 2, 2, 2, 152, 960, 3, 2, 2, 2, 154, 970, 3, 2, 2, 2, 156, 974, 3, 2, 2, 2, 158, 981, 3, 2, 2, 2, 160, 985, 3, 2, 2, 2, 162, 989, 3, 2, 2, 2, 164, 999, 3, 2, 2, 2, 166, 1011, 3, 2, 2, 2, 168, 1014, 3, 2, 2, 2, 170, 1024, 3, 2, 2, 2, 172, 1029, 3, 2, 2, 2, 174, 1034, 3, 2, 2, 2, 176, 1040, 3, 2, 2, 2, 178, 1047, 3, 2, 2, 2, 180, 1053, 3, 2, 2, 2, 182, 1056, 3, 2, 2, 2, 184, 1061, 3, 2, 2, 2, 186, 1066, 3, 2, 2, 2, 188, 1070, 3, 2, 2, 2, 190, 1076, 3, 2, 2, 2, 192, 1084, 3, 2, 2, 2, 194, 1088, 3, 2, 2, 2, 196, 1091, 3, 2, 2, 2, 198, 1097, 3, 2, 2, 2, 200, 1103, 3, 2, 2, 2, 202, 1110, 3, 2, 2, 2, 204, 1119, 3, 2, 2, 2, 206, 1125, 3, 2, 2, 2, 208, 1128, 3, 2, 2, 2, 210, 1131, 3, 2, 2, 2, 212, 1134, 3, 2, 2, 2, 214, 1142, 3, 2, 2, 2, 216, 1150, 3, 2, 2, 2, 218, 1154, 3, 2, 2, 2, 220, 1162, 3, 2, 2, 2, 222, 1169, 3, 2, 2, 2, 224, 1177, 3, 2, 2, 2, 226, 1187, 3, 2, 2, 2, 228, 1196, 3, 2, 2, 2, 230, 1201, 3, 2, 2, 2, 232, 1208, 3, 2, 2, 2, 234, 1219, 3, 2, 2, 2, 236, 1224, 3, 2, 2, 2, 238, 1230, 3, 2, 2, 2, 240, 1236, 3, 2, 2, 2, 242, 1244, 3, 2, 2, 2, 244, 1253, 3, 2, 2, 2, 246, 1260, 3, 2, 2, 2, 248, 1266, 3, 2, 2, 2, 250, 1275, 3, 2, 2, 2, 252, 1283, 3, 2, 2, 2, 254, 1292, 3, 2, 2, 2, 256, 1301, 3, 2, 2, 2, 258, 1307, 3, 2, 2, 2, 260, 1312, 3, 2, 2, 2, 262, 1318, 3, 2, 2, 2, 264, 1327, 3, 2, 2, 2, 266, 1334, 3, 2, 2, 2, 268, 1343, 3, 2, 2, 2, 270, 1355, 3, 2, 2, 2, 272, 1363, 3, 2, 2, 2, 274, 1370, 3, 2, 2, 2, 276, 1377, 3, 2, 2, 2, 278, 1379, 3, 2, 2, 2, 280, 1383, 3, 2, 2, 2, 282, 1395, 3, 2, 2, 2, 284, 1397, 3, 2, 2, 2, 286, 1405, 3, 2, 2, 2, 288, 1413, 3, 2, 2, 2, 290, 1426, 3, 2, 2, 2, 292, 1438, 3, 2, 2, 2, 294, 1440, 3, 2, 2, 2, 296, 1444, 3, 2, 2, 2, 298, 1460, 3, 2, 2, 2, 300, 1462, 3, 2, 2, 2, 302, 1466, 3, 2, 2, 2, 304, 1482, 3, 2, 2, 2, 306, 1487, 3, 2, 2, 2, 308, 1496, 3, 2, 2, 2, 310, 1509, 3, 2, 2, 2, 312, 1511, 3, 2, 2, 2, 314, 1516, 3, 2, 2, 2, 316, 1523, 3, 2, 2, 2, 318, 1544, 3, 2, 2, 2, 320, 1594, 3, 2, 2, 2, 322, 1596, 3, 2, 2, 2, 324, 1599, 3, 2, 2, 2, 326, 1606, 3, 2, 2, 2, 328, 1611, 3, 2, 2, 2, 330, 1618, 3, 2, 2, 2, 332, 1620, 3, 2, 2, 2, 334, 1624, 3, 2, 2, 2, 336, 1630, 3, 2, 2, 2, 338, 1632, 3, 2, 2, 2, 340, 1634, 3, 2, 2, 2, 342, 1636, 3, 2, 2, 2, 344, 1638, 3, 2, 2, 2, 346, 1640, 3, 2, 2, 2, 348, 1642, 3, 2, 2, 2, 350, 1644, 3, 2, 2, 2, 352, 1648, 3, 2, 2, 2, 354, 1656, 3, 2, 2, 2, 356, 1660, 3, 2, 2, 2, 358, 1662, 3, 2, 2, 2, 360, 1668, 3, 2, 2, 2, 362, 1677, 3, 2, 2, 2, 364, 1681, 3, 2, 2, 2, 366, 1689, 3, 2, 2, 2, 368, 1691, 3, 2, 2, 2, 370, 1696, 3, 2, 2, 2, 372, 1701, 3, 2, 2, 2, 374, 1706, 3, 2, 2, 2, 376, 1711, 3, 2, 2, 2, 378, 1716, 3, 2, 2, 2, 380, 1721, 3, 2, 2, 2, 382, 1726, 3, 2, 2, 2, 384, 1730, 3, 2, 2, 2, 386, 1734, 3, 2, 2, 2, 388, 1738, 3, 2, 2, 2, 390, 1742, 3, 2, 2, 2, 392, 1746, 3, 2, 2, 2, 394, 1750, 3, 2, 2, 2, 396, 1754, 3, 2, 2, 2, 398, 1758, 3, 2, 2, 2, 400, 1762, 3, 2, 2, 2, 402, 1766, 3, 2, 2, 2, 404, 1770, 3, 2, 2, 2, 406, 1777, 3, 2, 2, 2, 408, 1781, 3, 2, 2, 2, 410, 1785, 3, 2, 2, 2, 412, 1789, 3, 2, 2, 2, 414, 1793, 3, 2, 2, 2, 416, 1797, 3, 2, 2, 2, 418, 1801, 3, 2, 2, 2, 420, 1805, 3, 2, 2, 2, 422, 1809, 3, 2, 2, 2, 424, 1813, 3, 2, 2, 2, 426, 1817, 3, 2, 2, 2, 428, 1821, 3, 2, 2, 2, 430, 1825, 3, 2, 2, 2, 432, 1829, 3, 2, 2, 2, 434, 1833, 3, 2, 2, 2, 436, 1837, 3, 2, 2, 2, 438, 1841, 3, 2, 2, 2, 440, 1845, 3, 2, 2, 2, 442, 1849, 3, 2, 2, 2, 444, 1853, 3, 2, 2, 2, 446, 1857, 3, 2, 2, 2, 448, 1864, 3, 2, 2, 2, 450, 1868, 3, 2, 2, 2, 452, 1872, 3, 2, 2, 2, 454, 1876, 3, 2, 2, 2, 456, 1880, 3, 2, 2, 2, 458, 1884, 3, 2, 2, 2, 460, 1888, 3, 2, 2, 2, 462, 1892, 3, 2, 2, 2, 464, 1896, 3, 2, 2, 2, 466, 1900, 3, 2, 2, 2, 468, 1904, 3, 2, 2, 2, 470, 1908, 3, 2, 2, 2, 472, 1912, 3, 2, 2, 2, 474, 1916, 3, 2, 2, 2, 476, 1920, 3, 2, 2, 2, 478, 1924, 3, 2, 2, 2, 480, 1929, 3, 2, 2, 2, 482, 1934, 3, 2, 2, 2, 484, 1938, 3, 2, 2, 2, 486, 1942, 3, 2, 2, 2, 488, 1946, 3, 2, 2, 2, 490, 1950, 3, 2, 2, 2, 492, 1954, 3, 2, 2, 2, 494, 1958, 3, 2, 2, 2, 496, 1962, 3, 2, 2, 2, 498, 1966, 3, 2, 2, 2, 500, 1970, 3, 2, 2, 2, 502, 1974, 3, 2, 2, 2, 504, 1978, 3, 2, 2, 2, 506, 1982, 3, 2, 2, 2, 508, 1986, 3, 2, 2, 2, 510, 1990, 3, 2, 2, 2, 512, 1994, 3, 2, 2, 2, 514, 1998, 3, 2, 2, 2, 516, 2002, 3, 2, 2, 2, 518, 2006, 3, 2, 2, 2, 520, 2010, 3, 2, 2, 2, 522, 2014, 3, 2, 2, 2, 524, 2018, 3, 2, 2, 2, 526, 2022, 3, 2, 2, 2, 528, 2026, 3, 2, 2, 2, 530, 2030, 3, 2, 2, 2, 532, 2034, 3, 2, 2, 2, 534, 2038, 3, 2, 2, 2, 536, 2042, 3, 2, 2, 2, 538, 2046, 3, 2, 2, 2, 540, 2050, 3, 2, 2, 2, 542, 2054, 3, 2, 2, 2, 544, 2058, 3, 2, 2, 2, 546, 2062, 3, 2, 2, 2, 548, 2066, 3, 2, 2, 2, 550, 2070, 3, 2, 2, 2, 552, 2074, 3, 2, 2, 2, 554, 2078, 3, 2, 2, 2, 556, 2082, 3, 2, 2, 2, 558, 2086, 3, 2, 2, 2, 560, 2090, 3, 2, 2, 2, 562, 2094, 3, 2, 2, 2, 564, 2098, 3, 2, 2, 2, 566, 2102, 3, 2, 2, 2, 568, 2106, 3, 2, 2, 2, 570, 2110, 3, 2, 2, 2, 572, 2114, 3, 2, 2, 2, 574, 2118, 3, 2, 2, 2, 576, 2122, 3, 2, 2, 2, 578, 2126, 3, 2, 2, 2, 580, 2130, 3, 2, 2, 2, 582, 2134, 3, 2, 2, 2, 584, 2138, 3, 2, 2, 2, 586, 2142, 3, 2, 2, 2, 588, 2146, 3, 2, 2, 2, 590, 2150, 3, 2, 2, 2, 592, 2154, 3, 2, 2, 2, 594, 2158, 3, 2, 2, 2, 596, 2162, 3, 2, 2, 2, 598, 2166, 3, 2, 2, 2, 600, 2170, 3, 2, 2, 2, 602, 2174, 3, 2, 2, 2, 604, 2178, 3, 2, 2, 2, 606, 2182, 3, 2, 2, 2, 608, 2186, 3, 2, 2, 2, 610, 2190, 3, 2, 2, 2, 612, 2194, 3, 2, 2, 2, 614, 2198, 3, 2, 2, 2, 616, 2202, 3, 2, 2, 2, 618, 2206, 3, 2, 2, 2, 620, 2210, 3, 2, 2, 2, 622, 2216, 3, 2, 2, 2, 624, 2220, 3, 2, 2, 2, 626, 2224, 3, 2, 2, 2, 628, 2228, 3, 2, 2, 2, 630, 631, 7, 37, 2, 2, 631, 632, 7, 35, 2, 2, 632, 636, 3, 2, 2, 2, 633, 635, 10, 2, 2, 2, 634, 633, 3, 2, 2, 2, 635, 638, 3, 2, 2, 2, 636, 634, 3, 2, 2, 2, 636, 637, 3, 2, 2, 2, 637, 7, 3, 2, 2, 2, 638, 636, 3, 2, 2, 2, 639, 640, 7, 49, 2, 2, 640, 641, 7, 44, 2, 2, 641, 646, 3, 2, 2, 2, 642, 645, 5, 8, 3, 2, 643, 645, 11, 2, 2, 2, 644, 642, 3, 2, 2, 2, 644, 643, 3, 2, 2, 2, 645, 648, 3, 2, 2, 2, 646, 647, 3, 2, 2, 2, 646, 644, 3, 2, 2, 2, 647, 649, 3, 2, 2, 2, 648, 646, 3, 2, 2, 2, 649, 650, 7, 44, 2, 2, 650, 651, 7, 49, 2, 2, 651, 652, 3, 2, 2, 2, 652, 653, 8, 3, 2, 2, 653, 9, 3, 2, 2, 2, 654, 655, 7, 49, 2, 2, 655, 656, 7, 49, 2, 2, 656, 660, 3, 2, 2, 2, 657, 659, 10, 2, 2, 2, 658, 657, 3, 2, 2, 2, 659, 662, 3, 2, 2, 2, 660, 658, 3, 2, 2, 2, 660, 661, 3, 2, 2, 2, 661, 663, 3, 2, 2, 2, 662, 660, 3, 2, 2, 2, 663, 664, 8, 4, 2, 2, 664, 11, 3, 2, 2, 2, 665, 666, 9, 3, 2, 2, 666, 667, 3, 2, 2, 2, 667, 668, 8, 5, 2, 2, 668, 13, 3, 2, 2, 2, 669, 675, 7, 12, 2, 2, 670, 672, 7, 15, 2, 2, 671, 673, 7, 12, 2, 2, 672, 671, 3, 2, 2, 2, 672, 673, 3, 2, 2, 2, 673, 675, 3, 2, 2, 2, 674, 669, 3, 2, 2, 2, 674, 670, 3, 2, 2, 2, 675, 15, 3, 2, 2, 2, 676, 680, 5, 8, 3, 2, 677, 680, 5, 10, 4, 2, 678, 680, 5, 12, 5, 2, 679, 676, 3, 2, 2, 2, 679, 677, 3, 2, 2, 2, 679, 678, 3, 2, 2, 2, 680, 17, 3, 2, 2, 2, 681, 682, 7, 48, 2, 2, 682, 683, 7, 48, 2, 2, 683, 684, 7, 48, 2, 2, 684, 19, 3, 2, 2, 2, 685, 686, 7, 48, 2, 2, 686, 21, 3, 2, 2, 2, 687, 688, 7, 46, 2, 2, 688, 23, 3, 2, 2, 2, 689, 690, 7, 42, 2, 2, 690, 691, 3, 2, 2, 2, 691, 692, 8, 11, 3, 2, 692, 25, 3, 2, 2, 2, 693, 694, 7, 43, 2, 2, 694, 27, 3, 2, 2, 2, 695, 696, 7, 93, 2, 2, 696, 697, 3, 2, 2, 2, 697, 698, 8, 13, 3, 2, 698, 29, 3, 2, 2, 2, 699, 700, 7, 95, 2, 2, 700, 31, 3, 2, 2, 2, 701, 702, 7, 125, 2, 2, 702, 703, 3, 2, 2, 2, 703, 704, 8, 15, 4, 2, 704, 33, 3, 2, 2, 2, 705, 706, 7, 127, 2, 2, 706, 707, 8, 16, 5, 2, 707, 35, 3, 2, 2, 2, 708, 709, 7, 44, 2, 2, 709, 37, 3, 2, 2, 2, 710, 711, 7, 39, 2, 2, 711, 39, 3, 2, 2, 2, 712, 713, 7, 49, 2, 2, 713, 41, 3, 2, 2, 2, 714, 715, 7, 45, 2, 2, 715, 43, 3, 2, 2, 2, 716, 717, 7, 47, 2, 2, 717, 45, 3, 2, 2, 2, 718, 719, 7, 45, 2, 2, 719, 720, 7, 45, 2, 2, 720, 47, 3, 2, 2, 2, 721, 722, 7, 47, 2, 2, 722, 723, 7, 47, 2, 2, 723, 49, 3, 2, 2, 2, 724, 725, 7, 40, 2, 2, 725, 726, 7, 40, 2, 2, 726, 51, 3, 2, 2, 2, 727, 728, 7, 126, 2, 2, 728, 729, 7, 126, 2, 2, 729, 53, 3, 2, 2, 2, 730, 731, 7, 35, 2, 2, 731, 732, 5, 16, 7, 2, 732, 55, 3, 2, 2, 2, 733, 734, 7, 35, 2, 2, 734, 57, 3, 2, 2, 2, 735, 736, 7, 60, 2, 2, 736, 59, 3, 2, 2, 2, 737, 738, 7, 61, 2, 2, 738, 61, 3, 2, 2, 2, 739, 740, 7, 63, 2, 2, 740, 63, 3, 2, 2, 2, 741, 742, 7, 45, 2, 2, 742, 743, 7, 63, 2, 2, 743, 65, 3, 2, 2, 2, 744, 745, 7, 47, 2, 2, 745, 746, 7, 63, 2, 2, 746, 67, 3, 2, 2, 2, 747, 748, 7, 44, 2, 2, 748, 749, 7, 63, 2, 2, 749, 69, 3, 2, 2, 2, 750, 751, 7, 49, 2, 2, 751, 752, 7, 63, 2, 2, 752, 71, 3, 2, 2, 2, 753, 754, 7, 39, 2, 2, 754, 755, 7, 63, 2, 2, 755, 73, 3, 2, 2, 2, 756, 757, 7, 47, 2, 2, 757, 758, 7, 64, 2, 2, 758, 75, 3, 2, 2, 2, 759, 760, 7, 63, 2, 2, 760, 761, 7, 64, 2, 2, 761, 77, 3, 2, 2, 2, 762, 763, 7, 48, 2, 2, 763, 764, 7, 48, 2, 2, 764, 79, 3, 2, 2, 2, 765, 766, 7, 60, 2, 2, 766, 767, 7, 60, 2, 2, 767, 81, 3, 2, 2, 2, 768, 769, 7, 61, 2, 2, 769, 770, 7, 61, 2, 2, 770, 83, 3, 2, 2, 2, 771, 772, 7, 37, 2, 2, 772, 85, 3, 2, 2, 2, 773, 774, 7, 66, 2, 2, 774, 87, 3, 2, 2, 2, 775, 778, 7, 66, 2, 2, 776, 779, 5, 16, 7, 2, 777, 779, 5, 14, 6, 2, 778, 776, 3, 2, 2, 2, 778, 777, 3, 2, 2, 2, 779, 89, 3, 2, 2, 2, 780, 783, 5, 16, 7, 2, 781, 783, 5, 14, 6, 2, 782, 780, 3, 2, 2, 2, 782, 781, 3, 2, 2, 2, 783, 784, 3, 2, 2, 2, 784, 785, 7, 66, 2, 2, 785, 91, 3, 2, 2, 2, 786, 789, 5, 16, 7, 2, 787, 789, 5, 14, 6, 2, 788, 786, 3, 2, 2, 2, 788, 787, 3, 2, 2, 2, 789, 790, 3, 2, 2, 2, 790, 793, 7, 66, 2, 2, 791, 794, 5, 16, 7, 2, 792, 794, 5, 14, 6, 2, 793, 791, 3, 2, 2, 2, 793, 792, 3, 2, 2, 2, 794, 93, 3, 2, 2, 2, 795, 796, 7, 65, 2, 2, 796, 797, 5, 16, 7, 2, 797, 95, 3, 2, 2, 2, 798, 799, 7, 65, 2, 2, 799, 97, 3, 2, 2, 2, 800, 801, 7, 62, 2, 2, 801, 99, 3, 2, 2, 2, 802, 803, 7, 64, 2, 2, 803, 101, 3, 2, 2, 2, 804, 805, 7, 62, 2, 2, 805, 806, 7, 63, 2, 2, 806, 103, 3, 2, 2, 2, 807, 808, 7, 64, 2, 2, 808, 809, 7, 63, 2, 2, 809, 105, 3, 2, 2, 2, 810, 811, 7, 35, 2, 2, 811, 812, 7, 63, 2, 2, 812, 107, 3, 2, 2, 2, 813, 814, 7, 35, 2, 2, 814, 815, 7, 63, 2, 2, 815, 816, 7, 63, 2, 2, 816, 109, 3, 2, 2, 2, 817, 818, 7, 99, 2, 2, 818, 819, 7, 117, 2, 2, 819, 820, 7, 65, 2, 2, 820, 111, 3, 2, 2, 2, 821, 822, 7, 63, 2, 2, 822, 823, 7, 63, 2, 2, 823, 113, 3, 2, 2, 2, 824, 825, 7, 63, 2, 2, 825, 826, 7, 63, 2, 2, 826, 827, 7, 63, 2, 2, 827, 115, 3, 2, 2, 2, 828, 829, 7, 41, 2, 2, 829, 117, 3, 2, 2, 2, 830, 831, 7, 116, 2, 2, 831, 832, 7, 103, 2, 2, 832, 833, 7, 118, 2, 2, 833, 834, 7, 119, 2, 2, 834, 835, 7, 116, 2, 2, 835, 836, 7, 112, 2, 2, 836, 837, 7, 66, 2, 2, 837, 838, 3, 2, 2, 2, 838, 839, 5, 318, 158, 2, 839, 119, 3, 2, 2, 2, 840, 841, 7, 101, 2, 2, 841, 842, 7, 113, 2, 2, 842, 843, 7, 112, 2, 2, 843, 844, 7, 118, 2, 2, 844, 845, 7, 107, 2, 2, 845, 846, 7, 112, 2, 2, 846, 847, 7, 119, 2, 2, 847, 848, 7, 103, 2, 2, 848, 849, 7, 66, 2, 2, 849, 850, 3, 2, 2, 2, 850, 851, 5, 318, 158, 2, 851, 121, 3, 2, 2, 2, 852, 853, 7, 100, 2, 2, 853, 854, 7, 116, 2, 2, 854, 855, 7, 103, 2, 2, 855, 856, 7, 99, 2, 2, 856, 857, 7, 109, 2, 2, 857, 858, 7, 66, 2, 2, 858, 859, 3, 2, 2, 2, 859, 860, 5, 318, 158, 2, 860, 123, 3, 2, 2, 2, 861, 862, 7, 118, 2, 2, 862, 863, 7, 106, 2, 2, 863, 864, 7, 107, 2, 2, 864, 865, 7, 117, 2, 2, 865, 866, 7, 66, 2, 2, 866, 867, 3, 2, 2, 2, 867, 868, 5, 318, 158, 2, 868, 125, 3, 2, 2, 2, 869, 870, 7, 117, 2, 2, 870, 871, 7, 119, 2, 2, 871, 872, 7, 114, 2, 2, 872, 873, 7, 103, 2, 2, 873, 874, 7, 116, 2, 2, 874, 875, 7, 66, 2, 2, 875, 876, 3, 2, 2, 2, 876, 877, 5, 318, 158, 2, 877, 127, 3, 2, 2, 2, 878, 879, 7, 104, 2, 2, 879, 880, 7, 107, 2, 2, 880, 881, 7, 110, 2, 2, 881, 882, 7, 103, 2, 2, 882, 129, 3, 2, 2, 2, 883, 884, 7, 104, 2, 2, 884, 885, 7, 107, 2, 2, 885, 886, 7, 103, 2, 2, 886, 887, 7, 110, 2, 2, 887, 888, 7, 102, 2, 2, 888, 131, 3, 2, 2, 2, 889, 890, 7, 114, 2, 2, 890, 891, 7, 116, 2, 2, 891, 892, 7, 113, 2, 2, 892, 893, 7, 114, 2, 2, 893, 894, 7, 103, 2, 2, 894, 895, 7, 116, 2, 2, 895, 896, 7, 118, 2, 2, 896, 897, 7, 123, 2, 2, 897, 133, 3, 2, 2, 2, 898, 899, 7, 105, 2, 2, 899, 900, 7, 103, 2, 2, 900, 901, 7, 118, 2, 2, 901, 135, 3, 2, 2, 2, 902, 903, 7, 117, 2, 2, 903, 904, 7, 103, 2, 2, 904, 905, 7, 118, 2, 2, 905, 137, 3, 2, 2, 2, 906, 907, 7, 116, 2, 2, 907, 908, 7, 103, 2, 2, 908, 909, 7, 101, 2, 2, 909, 910, 7, 103, 2, 2, 910, 911, 7, 107, 2, 2, 911, 912, 7, 120, 2, 2, 912, 913, 7, 103, 2, 2, 913, 914, 7, 116, 2, 2, 914, 139, 3, 2, 2, 2, 915, 916, 7, 114, 2, 2, 916, 917, 7, 99, 2, 2, 917, 918, 7, 116, 2, 2, 918, 919, 7, 99, 2, 2, 919, 920, 7, 111, 2, 2, 920, 141, 3, 2, 2, 2, 921, 922, 7, 117, 2, 2, 922, 923, 7, 103, 2, 2, 923, 924, 7, 118, 2, 2, 924, 925, 7, 114, 2, 2, 925, 926, 7, 99, 2, 2, 926, 927, 7, 116, 2, 2, 927, 928, 7, 99, 2, 2, 928, 929, 7, 111, 2, 2, 929, 143, 3, 2, 2, 2, 930, 931, 7, 102, 2, 2, 931, 932, 7, 103, 2, 2, 932, 933, 7, 110, 2, 2, 933, 934, 7, 103, 2, 2, 934, 935, 7, 105, 2, 2, 935, 936, 7, 99, 2, 2, 936, 937, 7, 118, 2, 2, 937, 938, 7, 103, 2, 2, 938, 145, 3, 2, 2, 2, 939, 940, 7, 114, 2, 2, 940, 941, 7, 99, 2, 2, 941, 942, 7, 101, 2, 2, 942, 943, 7, 109, 2, 2, 943, 944, 7, 99, 2, 2, 944, 945, 7, 105, 2, 2, 945, 946, 7, 103, 2, 2, 946, 147, 3, 2, 2, 2, 947, 948, 7, 107, 2, 2, 948, 949, 7, 111, 2, 2, 949, 950, 7, 114, 2, 2, 950, 951, 7, 113, 2, 2, 951, 952, 7, 116, 2, 2, 952, 953, 7, 118, 2, 2, 953, 149, 3, 2, 2, 2, 954, 955, 7, 101, 2, 2, 955, 956, 7, 110, 2, 2, 956, 957, 7, 99, 2, 2, 957, 958, 7, 117, 2, 2, 958, 959, 7, 117, 2, 2, 959, 151, 3, 2, 2, 2, 960, 961, 7, 107, 2, 2, 961, 962, 7, 112, 2, 2, 962, 963, 7, 118, 2, 2, 963, 964, 7, 103, 2, 2, 964, 965, 7, 116, 2, 2, 965, 966, 7, 104, 2, 2, 966, 967, 7, 99, 2, 2, 967, 968, 7, 101, 2, 2, 968, 969, 7, 103, 2, 2, 969, 153, 3, 2, 2, 2, 970, 971, 7, 104, 2, 2, 971, 972, 7, 119, 2, 2, 972, 973, 7, 112, 2, 2, 973, 155, 3, 2, 2, 2, 974, 975, 7, 113, 2, 2, 975, 976, 7, 100, 2, 2, 976, 977, 7, 108, 2, 2, 977, 978, 7, 103, 2, 2, 978, 979, 7, 101, 2, 2, 979, 980, 7, 118, 2, 2, 980, 157, 3, 2, 2, 2, 981, 982, 7, 120, 2, 2, 982, 983, 7, 99, 2, 2, 983, 984, 7, 110, 2, 2, 984, 159, 3, 2, 2, 2, 985, 986, 7, 120, 2, 2, 986, 987, 7, 99, 2, 2, 987, 988, 7, 116, 2, 2, 988, 161, 3, 2, 2, 2, 989, 990, 7, 118, 2, 2, 990, 991, 7, 123, 2, 2, 991, 992, 7, 114, 2, 2, 992, 993, 7, 103, 2, 2, 993, 994, 7, 99, 2, 2, 994, 995, 7, 110, 2, 2, 995, 996, 7, 107, 2, 2, 996, 997, 7, 99, 2, 2, 997, 998, 7, 117, 2, 2, 998, 163, 3, 2, 2, 2, 999, 1000, 7, 101, 2, 2, 1000, 1001, 7, 113, 2, 2, 1001, 1002, 7, 112, 2, 2, 1002, 1003, 7, 117, 2, 2, 1003, 1004, 7, 118, 2, 2, 1004, 1005, 7, 116, 2, 2, 1005, 1006, 7, 119, 2, 2, 1006, 1007, 7, 101, 2, 2, 1007, 1008, 7, 118, 2, 2, 1008, 1009, 7, 113, 2, 2, 1009, 1010, 7, 116, 2, 2, 1010, 165, 3, 2, 2, 2, 1011, 1012, 7, 100, 2, 2, 1012, 1013, 7, 123, 2, 2, 1013, 167, 3, 2, 2, 2, 1014, 1015, 7, 101, 2, 2, 1015, 1016, 7, 113, 2, 2, 1016, 1017, 7, 111, 2, 2, 1017, 1018, 7, 114, 2, 2, 1018, 1019, 7, 99, 2, 2, 1019, 1020, 7, 112, 2, 2, 1020, 1021, 7, 107, 2, 2, 1021, 1022, 7, 113, 2, 2, 1022, 1023, 7, 112, 2, 2, 1023, 169, 3, 2, 2, 2, 1024, 1025, 7, 107, 2, 2, 1025, 1026, 7, 112, 2, 2, 1026, 1027, 7, 107, 2, 2, 1027, 1028, 7, 118, 2, 2, 1028, 171, 3, 2, 2, 2, 1029, 1030, 7, 118, 2, 2, 1030, 1031, 7, 106, 2, 2, 1031, 1032, 7, 107, 2, 2, 1032, 1033, 7, 117, 2, 2, 1033, 173, 3, 2, 2, 2, 1034, 1035, 7, 117, 2, 2, 1035, 1036, 7, 119, 2, 2, 1036, 1037, 7, 114, 2, 2, 1037, 1038, 7, 103, 2, 2, 1038, 1039, 7, 116, 2, 2, 1039, 175, 3, 2, 2, 2, 1040, 1041, 7, 118, 2, 2, 1041, 1042, 7, 123, 2, 2, 1042, 1043, 7, 114, 2, 2, 1043, 1044, 7, 103, 2, 2, 1044, 1045, 7, 113, 2, 2, 1045, 1046, 7, 104, 2, 2, 1046, 177, 3, 2, 2, 2, 1047, 1048, 7, 121, 2, 2, 1048, 1049, 7, 106, 2, 2, 1049, 1050, 7, 103, 2, 2, 1050, 1051, 7, 116, 2, 2, 1051, 1052, 7, 103, 2, 2, 1052, 179, 3, 2, 2, 2, 1053, 1054, 7, 107, 2, 2, 1054, 1055, 7, 104, 2, 2, 1055, 181, 3, 2, 2, 2, 1056, 1057, 7, 103, 2, 2, 1057, 1058, 7, 110, 2, 2, 1058, 1059, 7, 117, 2, 2, 1059, 1060, 7, 103, 2, 2, 1060, 183, 3, 2, 2, 2, 1061, 1062, 7, 121, 2, 2, 1062, 1063, 7, 106, 2, 2, 1063, 1064, 7, 103, 2, 2, 1064, 1065, 7, 112, 2, 2, 1065, 185, 3, 2, 2, 2, 1066, 1067, 7, 118, 2, 2, 1067, 1068, 7, 116, 2, 2, 1068, 1069, 7, 123, 2, 2, 1069, 187, 3, 2, 2, 2, 1070, 1071, 7, 101, 2, 2, 1071, 1072, 7, 99, 2, 2, 1072, 1073, 7, 118, 2, 2, 1073, 1074, 7, 101, 2, 2, 1074, 1075, 7, 106, 2, 2, 1075, 189, 3, 2, 2, 2, 1076, 1077, 7, 104, 2, 2, 1077, 1078, 7, 107, 2, 2, 1078, 1079, 7, 112, 2, 2, 1079, 1080, 7, 99, 2, 2, 1080, 1081, 7, 110, 2, 2, 1081, 1082, 7, 110, 2, 2, 1082, 1083, 7, 123, 2, 2, 1083, 191, 3, 2, 2, 2, 1084, 1085, 7, 104, 2, 2, 1085, 1086, 7, 113, 2, 2, 1086, 1087, 7, 116, 2, 2, 1087, 193, 3, 2, 2, 2, 1088, 1089, 7, 102, 2, 2, 1089, 1090, 7, 113, 2, 2, 1090, 195, 3, 2, 2, 2, 1091, 1092, 7, 121, 2, 2, 1092, 1093, 7, 106, 2, 2, 1093, 1094, 7, 107, 2, 2, 1094, 1095, 7, 110, 2, 2, 1095, 1096, 7, 103, 2, 2, 1096, 197, 3, 2, 2, 2, 1097, 1098, 7, 118, 2, 2, 1098, 1099, 7, 106, 2, 2, 1099, 1100, 7, 116, 2, 2, 1100, 1101, 7, 113, 2, 2, 1101, 1102, 7, 121, 2, 2, 1102, 199, 3, 2, 2, 2, 1103, 1104, 7, 116, 2, 2, 1104, 1105, 7, 103, 2, 2, 1105, 1106, 7, 118, 2, 2, 1106, 1107, 7, 119, 2, 2, 1107, 1108, 7, 116, 2, 2, 1108, 1109, 7, 112, 2, 2, 1109, 201, 3, 2, 2, 2, 1110, 1111, 7, 101, 2, 2, 1111, 1112, 7, 113, 2, 2, 1112, 1113, 7, 112, 2, 2, 1113, 1114, 7, 118, 2, 2, 1114, 1115, 7, 107, 2, 2, 1115, 1116, 7, 112, 2, 2, 1116, 1117, 7, 119, 2, 2, 1117, 1118, 7, 103, 2, 2, 1118, 203, 3, 2, 2, 2, 1119, 1120, 7, 100, 2, 2, 1120, 1121, 7, 116, 2, 2, 1121, 1122, 7, 103, 2, 2, 1122, 1123, 7, 99, 2, 2, 1123, 1124, 7, 109, 2, 2, 1124, 205, 3, 2, 2, 2, 1125, 1126, 7, 99, 2, 2, 1126, 1127, 7, 117, 2, 2, 1127, 207, 3, 2, 2, 2, 1128, 1129, 7, 107, 2, 2, 1129, 1130, 7, 117, 2, 2, 1130, 209, 3, 2, 2, 2, 1131, 1132, 7, 107, 2, 2, 1132, 1133, 7, 112, 2, 2, 1133, 211, 3, 2, 2, 2, 1134, 1135, 7, 35, 2, 2, 1135, 1136, 7, 107, 2, 2, 1136, 1137, 7, 117, 2, 2, 1137, 1140, 3, 2, 2, 2, 1138, 1141, 5, 16, 7, 2, 1139, 1141, 5, 14, 6, 2, 1140, 1138, 3, 2, 2, 2, 1140, 1139, 3, 2, 2, 2, 1141, 213, 3, 2, 2, 2, 1142, 1143, 7, 35, 2, 2, 1143, 1144, 7, 107, 2, 2, 1144, 1145, 7, 112, 2, 2, 1145, 1148, 3, 2, 2, 2, 1146, 1149, 5, 16, 7, 2, 1147, 1149, 5, 14, 6, 2, 1148, 1146, 3, 2, 2, 2, 1148, 1147, 3, 2, 2, 2, 1149, 215, 3, 2, 2, 2, 1150, 1151, 7, 113, 2, 2, 1151, 1152, 7, 119, 2, 2, 1152, 1153, 7, 118, 2, 2, 1153, 217, 3, 2, 2, 2, 1154, 1155, 7, 102, 2, 2, 1155, 1156, 7, 123, 2, 2, 1156, 1157, 7, 112, 2, 2, 1157, 1158, 7, 99, 2, 2, 1158, 1159, 7, 111, 2, 2, 1159, 1160, 7, 107, 2, 2, 1160, 1161, 7, 101, 2, 2, 1161, 219, 3, 2, 2, 2, 1162, 1163, 7, 114, 2, 2, 1163, 1164, 7, 119, 2, 2, 1164, 1165, 7, 100, 2, 2, 1165, 1166, 7, 110, 2, 2, 1166, 1167, 7, 107, 2, 2, 1167, 1168, 7, 101, 2, 2, 1168, 221, 3, 2, 2, 2, 1169, 1170, 7, 114, 2, 2, 1170, 1171, 7, 116, 2, 2, 1171, 1172, 7, 107, 2, 2, 1172, 1173, 7, 120, 2, 2, 1173, 1174, 7, 99, 2, 2, 1174, 1175, 7, 118, 2, 2, 1175, 1176, 7, 103, 2, 2, 1176, 223, 3, 2, 2, 2, 1177, 1178, 7, 114, 2, 2, 1178, 1179, 7, 116, 2, 2, 1179, 1180, 7, 113, 2, 2, 1180, 1181, 7, 118, 2, 2, 1181, 1182, 7, 103, 2, 2, 1182, 1183, 7, 101, 2, 2, 1183, 1184, 7, 118, 2, 2, 1184, 1185, 7, 103, 2, 2, 1185, 1186, 7, 102, 2, 2, 1186, 225, 3, 2, 2, 2, 1187, 1188, 7, 107, 2, 2, 1188, 1189, 7, 112, 2, 2, 1189, 1190, 7, 118, 2, 2, 1190, 1191, 7, 103, 2, 2, 1191, 1192, 7, 116, 2, 2, 1192, 1193, 7, 112, 2, 2, 1193, 1194, 7, 99, 2, 2, 1194, 1195, 7, 110, 2, 2, 1195, 227, 3, 2, 2, 2, 1196, 1197, 7, 103, 2, 2, 1197, 1198, 7, 112, 2, 2, 1198, 1199, 7, 119, 2, 2, 1199, 1200, 7, 111, 2, 2, 1200, 229, 3, 2, 2, 2, 1201, 1202, 7, 117, 2, 2, 1202, 1203, 7, 103, 2, 2, 1203, 1204, 7, 99, 2, 2, 1204, 1205, 7, 110, 2, 2, 1205, 1206, 7, 103, 2, 2, 1206, 1207, 7, 102, 2, 2, 1207, 231, 3, 2, 2, 2, 1208, 1209, 7, 99, 2, 2, 1209, 1210, 7, 112, 2, 2, 1210, 1211, 7, 112, 2, 2, 1211, 1212, 7, 113, 2, 2, 1212, 1213, 7, 118, 2, 2, 1213, 1214, 7, 99, 2, 2, 1214, 1215, 7, 118, 2, 2, 1215, 1216, 7, 107, 2, 2, 1216, 1217, 7, 113, 2, 2, 1217, 1218, 7, 112, 2, 2, 1218, 233, 3, 2, 2, 2, 1219, 1220, 7, 102, 2, 2, 1220, 1221, 7, 99, 2, 2, 1221, 1222, 7, 118, 2, 2, 1222, 1223, 7, 99, 2, 2, 1223, 235, 3, 2, 2, 2, 1224, 1225, 7, 107, 2, 2, 1225, 1226, 7, 112, 2, 2, 1226, 1227, 7, 112, 2, 2, 1227, 1228, 7, 103, 2, 2, 1228, 1229, 7, 116, 2, 2, 1229, 237, 3, 2, 2, 2, 1230, 1231, 7, 120, 2, 2, 1231, 1232, 7, 99, 2, 2, 1232, 1233, 7, 110, 2, 2, 1233, 1234, 7, 119, 2, 2, 1234, 1235, 7, 103, 2, 2, 1235, 239, 3, 2, 2, 2, 1236, 1237, 7, 118, 2, 2, 1237, 1238, 7, 99, 2, 2, 1238, 1239, 7, 107, 2, 2, 1239, 1240, 7, 110, 2, 2, 1240, 1241, 7, 116, 2, 2, 1241, 1242, 7, 103, 2, 2, 1242, 1243, 7, 101, 2, 2, 1243, 241, 3, 2, 2, 2, 1244, 1245, 7, 113, 2, 2, 1245, 1246, 7, 114, 2, 2, 1246, 1247, 7, 103, 2, 2, 1247, 1248, 7, 116, 2, 2, 1248, 1249, 7, 99, 2, 2, 1249, 1250, 7, 118, 2, 2, 1250, 1251, 7, 113, 2, 2, 1251, 1252, 7, 116, 2, 2, 1252, 243, 3, 2, 2, 2, 1253, 1254, 7, 107, 2, 2, 1254, 1255, 7, 112, 2, 2, 1255, 1256, 7, 110, 2, 2, 1256, 1257, 7, 107, 2, 2, 1257, 1258, 7, 112, 2, 2, 1258, 1259, 7, 103, 2, 2, 1259, 245, 3, 2, 2, 2, 1260, 1261, 7, 107, 2, 2, 1261, 1262, 7, 112, 2, 2, 1262, 1263, 7, 104, 2, 2, 1263, 1264, 7, 107, 2, 2, 1264, 1265, 7, 122, 2, 2, 1265, 247, 3, 2, 2, 2, 1266, 1267, 7, 103, 2, 2, 1267, 1268, 7, 122, 2, 2, 1268, 1269, 7, 118, 2, 2, 1269, 1270, 7, 103, 2, 2, 1270, 1271, 7, 116, 2, 2, 1271, 1272, 7, 112, 2, 2, 1272, 1273, 7, 99, 2, 2, 1273, 1274, 7, 110, 2, 2, 1274, 249, 3, 2, 2, 2, 1275, 1276, 7, 117, 2, 2, 1276, 1277, 7, 119, 2, 2, 1277, 1278, 7, 117, 2, 2, 1278, 1279, 7, 114, 2, 2, 1279, 1280, 7, 103, 2, 2, 1280, 1281, 7, 112, 2, 2, 1281, 1282, 7, 102, 2, 2, 1282, 251, 3, 2, 2, 2, 1283, 1284, 7, 113, 2, 2, 1284, 1285, 7, 120, 2, 2, 1285, 1286, 7, 103, 2, 2, 1286, 1287, 7, 116, 2, 2, 1287, 1288, 7, 116, 2, 2, 1288, 1289, 7, 107, 2, 2, 1289, 1290, 7, 102, 2, 2, 1290, 1291, 7, 103, 2, 2, 1291, 253, 3, 2, 2, 2, 1292, 1293, 7, 99, 2, 2, 1293, 1294, 7, 100, 2, 2, 1294, 1295, 7, 117, 2, 2, 1295, 1296, 7, 118, 2, 2, 1296, 1297, 7, 116, 2, 2, 1297, 1298, 7, 99, 2, 2, 1298, 1299, 7, 101, 2, 2, 1299, 1300, 7, 118, 2, 2, 1300, 255, 3, 2, 2, 2, 1301, 1302, 7, 104, 2, 2, 1302, 1303, 7, 107, 2, 2, 1303, 1304, 7, 112, 2, 2, 1304, 1305, 7, 99, 2, 2, 1305, 1306, 7, 110, 2, 2, 1306, 257, 3, 2, 2, 2, 1307, 1308, 7, 113, 2, 2, 1308, 1309, 7, 114, 2, 2, 1309, 1310, 7, 103, 2, 2, 1310, 1311, 7, 112, 2, 2, 1311, 259, 3, 2, 2, 2, 1312, 1313, 7, 101, 2, 2, 1313, 1314, 7, 113, 2, 2, 1314, 1315, 7, 112, 2, 2, 1315, 1316, 7, 117, 2, 2, 1316, 1317, 7, 118, 2, 2, 1317, 261, 3, 2, 2, 2, 1318, 1319, 7, 110, 2, 2, 1319, 1320, 7, 99, 2, 2, 1320, 1321, 7, 118, 2, 2, 1321, 1322, 7, 103, 2, 2, 1322, 1323, 7, 107, 2, 2, 1323, 1324, 7, 112, 2, 2, 1324, 1325, 7, 107, 2, 2, 1325, 1326, 7, 118, 2, 2, 1326, 263, 3, 2, 2, 2, 1327, 1328, 7, 120, 2, 2, 1328, 1329, 7, 99, 2, 2, 1329, 1330, 7, 116, 2, 2, 1330, 1331, 7, 99, 2, 2, 1331, 1332, 7, 116, 2, 2, 1332, 1333, 7, 105, 2, 2, 1333, 265, 3, 2, 2, 2, 1334, 1335, 7, 112, 2, 2, 1335, 1336, 7, 113, 2, 2, 1336, 1337, 7, 107, 2, 2, 1337, 1338, 7, 112, 2, 2, 1338, 1339, 7, 110, 2, 2, 1339, 1340, 7, 107, 2, 2, 1340, 1341, 7, 112, 2, 2, 1341, 1342, 7, 103, 2, 2, 1342, 267, 3, 2, 2, 2, 1343, 1344, 7, 101, 2, 2, 1344, 1345, 7, 116, 2, 2, 1345, 1346, 7, 113, 2, 2, 1346, 1347, 7, 117, 2, 2, 1347, 1348, 7, 117, 2, 2, 1348, 1349, 7, 107, 2, 2, 1349, 1350, 7, 112, 2, 2, 1350, 1351, 7, 110, 2, 2, 1351, 1352, 7, 107, 2, 2, 1352, 1353, 7, 112, 2, 2, 1353, 1354, 7, 103, 2, 2, 1354, 269, 3, 2, 2, 2, 1355, 1356, 7, 116, 2, 2, 1356, 1357, 7, 103, 2, 2, 1357, 1358, 7, 107, 2, 2, 1358, 1359, 7, 104, 2, 2, 1359, 1360, 7, 107, 2, 2, 1360, 1361, 7, 103, 2, 2, 1361, 1362, 7, 102, 2, 2, 1362, 271, 3, 2, 2, 2, 1363, 1364, 7, 103, 2, 2, 1364, 1365, 7, 122, 2, 2, 1365, 1366, 7, 114, 2, 2, 1366, 1367, 7, 103, 2, 2, 1367, 1368, 7, 101, 2, 2, 1368, 1369, 7, 118, 2, 2, 1369, 273, 3, 2, 2, 2, 1370, 1371, 7, 99, 2, 2, 1371, 1372, 7, 101, 2, 2, 1372, 1373, 7, 118, 2, 2, 1373, 1374, 7, 119, 2, 2, 1374, 1375, 7, 99, 2, 2, 1375, 1376, 7, 110, 2, 2, 1376, 275, 3, 2, 2, 2, 1377, 1378, 4, 50, 59, 2, 1378, 277, 3, 2, 2, 2, 1379, 1380, 4, 51, 59, 2, 1380, 279, 3, 2, 2, 2, 1381, 1384, 5, 276, 137, 2, 1382, 1384, 7, 97, 2, 2, 1383, 1381, 3, 2, 2, 2, 1383, 1382, 3, 2, 2, 2, 1384, 281, 3, 2, 2, 2, 1385, 1389, 5, 276, 137, 2, 1386, 1388, 5, 280, 139, 2, 1387, 1386, 3, 2, 2, 2, 1388, 1391, 3, 2, 2, 2, 1389, 1387, 3, 2, 2, 2, 1389, 1390, 3, 2, 2, 2, 1390, 1392, 3, 2, 2, 2, 1391, 1389, 3, 2, 2, 2, 1392, 1393, 5, 276, 137, 2, 1393, 1396, 3, 2, 2, 2, 1394, 1396, 5, 276, 137, 2, 1395, 1385, 3, 2, 2, 2, 1395, 1394, 3, 2, 2, 2, 1396, 283, 3, 2, 2, 2, 1397, 1399, 9, 4, 2, 2, 1398, 1400, 9, 5, 2, 2, 1399, 1398, 3, 2, 2, 2, 1399, 1400, 3, 2, 2, 2, 1400, 1401, 3, 2, 2, 2, 1401, 1402, 5, 282, 140, 2, 1402, 285, 3, 2, 2, 2, 1403, 1406, 5, 288, 143, 2, 1404, 1406, 5, 290, 144, 2, 1405, 1403, 3, 2, 2, 2, 1405, 1404, 3, 2, 2, 2, 1406, 287, 3, 2, 2, 2, 1407, 1408, 5, 290, 144, 2, 1408, 1409, 9, 6, 2, 2, 1409, 1414, 3, 2, 2, 2, 1410, 1411, 5, 282, 140, 2, 1411, 1412, 9, 6, 2, 2, 1412, 1414, 3, 2, 2, 2, 1413, 1407, 3, 2, 2, 2, 1413, 1410, 3, 2, 2, 2, 1414, 289, 3, 2, 2, 2, 1415, 1417, 5, 282, 140, 2, 1416, 1415, 3, 2, 2, 2, 1416, 1417, 3, 2, 2, 2, 1417, 1418, 3, 2, 2, 2, 1418, 1419, 7, 48, 2, 2, 1419, 1421, 5, 282, 140, 2, 1420, 1422, 5, 284, 141, 2, 1421, 1420, 3, 2, 2, 2, 1421, 1422, 3, 2, 2, 2, 1422, 1427, 3, 2, 2, 2, 1423, 1424, 5, 282, 140, 2, 1424, 1425, 5, 284, 141, 2, 1425, 1427, 3, 2, 2, 2, 1426, 1416, 3, 2, 2, 2, 1426, 1423, 3, 2, 2, 2, 1427, 291, 3, 2, 2, 2, 1428, 1432, 5, 278, 138, 2, 1429, 1431, 5, 280, 139, 2, 1430, 1429, 3, 2, 2, 2, 1431, 1434, 3, 2, 2, 2, 1432, 1430, 3, 2, 2, 2, 1432, 1433, 3, 2, 2, 2, 1433, 1435, 3, 2, 2, 2, 1434, 1432, 3, 2, 2, 2, 1435, 1436, 5, 276, 137, 2, 1436, 1439, 3, 2, 2, 2, 1437, 1439, 5, 276, 137, 2, 1438, 1428, 3, 2, 2, 2, 1438, 1437, 3, 2, 2, 2, 1439, 293, 3, 2, 2, 2, 1440, 1441, 9, 7, 2, 2, 1441, 295, 3, 2, 2, 2, 1442, 1445, 5, 294, 146, 2, 1443, 1445, 7, 97, 2, 2, 1444, 1442, 3, 2, 2, 2, 1444, 1443, 3, 2, 2, 2, 1445, 297, 3, 2, 2, 2, 1446, 1447, 7, 50, 2, 2, 1447, 1448, 9, 8, 2, 2, 1448, 1452, 5, 294, 146, 2, 1449, 1451, 5, 296, 147, 2, 1450, 1449, 3, 2, 2, 2, 1451, 1454, 3, 2, 2, 2, 1452, 1450, 3, 2, 2, 2, 1452, 1453, 3, 2, 2, 2, 1453, 1455, 3, 2, 2, 2, 1454, 1452, 3, 2, 2, 2, 1455, 1456, 5, 294, 146, 2, 1456, 1461, 3, 2, 2, 2, 1457, 1458, 7, 50, 2, 2, 1458, 1459, 9, 8, 2, 2, 1459, 1461, 5, 294, 146, 2, 1460, 1446, 3, 2, 2, 2, 1460, 1457, 3, 2, 2, 2, 1461, 299, 3, 2, 2, 2, 1462, 1463, 9, 9, 2, 2, 1463, 301, 3, 2, 2, 2, 1464, 1467, 5, 300, 149, 2, 1465, 1467, 7, 97, 2, 2, 1466, 1464, 3, 2, 2, 2, 1466, 1465, 3, 2, 2, 2, 1467, 303, 3, 2, 2, 2, 1468, 1469, 7, 50, 2, 2, 1469, 1470, 9, 10, 2, 2, 1470, 1474, 5, 300, 149, 2, 1471, 1473, 5, 302, 150, 2, 1472, 1471, 3, 2, 2, 2, 1473, 1476, 3, 2, 2, 2, 1474, 1472, 3, 2, 2, 2, 1474, 1475, 3, 2, 2, 2, 1475, 1477, 3, 2, 2, 2, 1476, 1474, 3, 2, 2, 2, 1477, 1478, 5, 300, 149, 2, 1478, 1483, 3, 2, 2, 2, 1479, 1480, 7, 50, 2, 2, 1480, 1481, 9, 10, 2, 2, 1481, 1483, 5, 300, 149, 2, 1482, 1468, 3, 2, 2, 2, 1482, 1479, 3, 2, 2, 2, 1483, 305, 3, 2, 2, 2, 1484, 1488, 5, 292, 145, 2, 1485, 1488, 5, 298, 148, 2, 1486, 1488, 5, 304, 151, 2, 1487, 1484, 3, 2, 2, 2, 1487, 1485, 3, 2, 2, 2, 1487, 1486, 3, 2, 2, 2, 1488, 1489, 3, 2, 2, 2, 1489, 1491, 9, 11, 2, 2, 1490, 1492, 9, 12, 2, 2, 1491, 1490, 3, 2, 2, 2, 1491, 1492, 3, 2, 2, 2, 1492, 307, 3, 2, 2, 2, 1493, 1497, 5, 292, 145, 2, 1494, 1497, 5, 298, 148, 2, 1495, 1497, 5, 304, 151, 2, 1496, 1493, 3, 2, 2, 2, 1496, 1494, 3, 2, 2, 2, 1496, 1495, 3, 2, 2, 2, 1497, 1498, 3, 2, 2, 2, 1498, 1499, 9, 12, 2, 2, 1499, 309, 3, 2, 2, 2, 1500, 1501, 7, 118, 2, 2, 1501, 1502, 7, 116, 2, 2, 1502, 1503, 7, 119, 2, 2, 1503, 1510, 7, 103, 2, 2, 1504, 1505, 7, 104, 2, 2, 1505, 1506, 7, 99, 2, 2, 1506, 1507, 7, 110, 2, 2, 1507, 1508, 7, 117, 2, 2, 1508, 1510, 7, 103, 2, 2, 1509, 1500, 3, 2, 2, 2, 1509, 1504, 3, 2, 2, 2, 1510, 311, 3, 2, 2, 2, 1511, 1512, 7, 112, 2, 2, 1512, 1513, 7, 119, 2, 2, 1513, 1514, 7, 110, 2, 2, 1514, 1515, 7, 110, 2, 2, 1515, 313, 3, 2, 2, 2, 1516, 1519, 7, 41, 2, 2, 1517, 1520, 5, 328, 163, 2, 1518, 1520, 10, 13, 2, 2, 1519, 1517, 3, 2, 2, 2, 1519, 1518, 3, 2, 2, 2, 1520, 1521, 3, 2, 2, 2, 1521, 1522, 7, 41, 2, 2, 1522, 315, 3, 2, 2, 2, 1523, 1524, 5, 346, 172, 2, 1524, 317, 3, 2, 2, 2, 1525, 1528, 5, 330, 164, 2, 1526, 1528, 7, 97, 2, 2, 1527, 1525, 3, 2, 2, 2, 1527, 1526, 3, 2, 2, 2, 1528, 1534, 3, 2, 2, 2, 1529, 1533, 5, 330, 164, 2, 1530, 1533, 7, 97, 2, 2, 1531, 1533, 5, 316, 157, 2, 1532, 1529, 3, 2, 2, 2, 1532, 1530, 3, 2, 2, 2, 1532, 1531, 3, 2, 2, 2, 1533, 1536, 3, 2, 2, 2, 1534, 1532, 3, 2, 2, 2, 1534, 1535, 3, 2, 2, 2, 1535, 1545, 3, 2, 2, 2, 1536, 1534, 3, 2, 2, 2, 1537, 1539, 7, 98, 2, 2, 1538, 1540, 10, 14, 2, 2, 1539, 1538, 3, 2, 2, 2, 1540, 1541, 3, 2, 2, 2, 1541, 1539, 3, 2, 2, 2, 1541, 1542, 3, 2, 2, 2, 1542, 1543, 3, 2, 2, 2, 1543, 1545, 7, 98, 2, 2, 1544, 1527, 3, 2, 2, 2, 1544, 1537, 3, 2, 2, 2, 1545, 319, 3, 2, 2, 2, 1546, 1595, 5, 318, 158, 2, 1547, 1595, 5, 254, 126, 2, 1548, 1595, 5, 232, 115, 2, 1549, 1595, 5, 166, 82, 2, 1550, 1595, 5, 188, 93, 2, 1551, 1595, 5, 168, 83, 2, 1552, 1595, 5, 164, 81, 2, 1553, 1595, 5, 268, 133, 2, 1554, 1595, 5, 234, 116, 2, 1555, 1595, 5, 218, 108, 2, 1556, 1595, 5, 228, 113, 2, 1557, 1595, 5, 248, 123, 2, 1558, 1595, 5, 256, 127, 2, 1559, 1595, 5, 190, 94, 2, 1560, 1595, 5, 148, 73, 2, 1561, 1595, 5, 246, 122, 2, 1562, 1595, 5, 170, 84, 2, 1563, 1595, 5, 244, 121, 2, 1564, 1595, 5, 236, 117, 2, 1565, 1595, 5, 226, 112, 2, 1566, 1595, 5, 262, 130, 2, 1567, 1595, 5, 266, 132, 2, 1568, 1595, 5, 258, 128, 2, 1569, 1595, 5, 242, 120, 2, 1570, 1595, 5, 216, 107, 2, 1571, 1595, 5, 252, 125, 2, 1572, 1595, 5, 222, 110, 2, 1573, 1595, 5, 224, 111, 2, 1574, 1595, 5, 220, 109, 2, 1575, 1595, 5, 270, 134, 2, 1576, 1595, 5, 230, 114, 2, 1577, 1595, 5, 240, 119, 2, 1578, 1595, 5, 264, 131, 2, 1579, 1595, 5, 178, 88, 2, 1580, 1595, 5, 134, 66, 2, 1581, 1595, 5, 136, 67, 2, 1582, 1595, 5, 130, 64, 2, 1583, 1595, 5, 132, 65, 2, 1584, 1595, 5, 138, 68, 2, 1585, 1595, 5, 140, 69, 2, 1586, 1595, 5, 142, 70, 2, 1587, 1595, 5, 144, 71, 2, 1588, 1595, 5, 128, 63, 2, 1589, 1595, 5, 272, 135, 2, 1590, 1595, 5, 274, 136, 2, 1591, 1595, 5, 238, 118, 2, 1592, 1595, 5, 260, 129, 2, 1593, 1595, 5, 250, 124, 2, 1594, 1546, 3, 2, 2, 2, 1594, 1547, 3, 2, 2, 2, 1594, 1548, 3, 2, 2, 2, 1594, 1549, 3, 2, 2, 2, 1594, 1550, 3, 2, 2, 2, 1594, 1551, 3, 2, 2, 2, 1594, 1552, 3, 2, 2, 2, 1594, 1553, 3, 2, 2, 2, 1594, 1554, 3, 2, 2, 2, 1594, 1555, 3, 2, 2, 2, 1594, 1556, 3, 2, 2, 2, 1594, 1557, 3, 2, 2, 2, 1594, 1558, 3, 2, 2, 2, 1594, 1559, 3, 2, 2, 2, 1594, 1560, 3, 2, 2, 2, 1594, 1561, 3, 2, 2, 2, 1594, 1562, 3, 2, 2, 2, 1594, 1563, 3, 2, 2, 2, 1594, 1564, 3, 2, 2, 2, 1594, 1565, 3, 2, 2, 2, 1594, 1566, 3, 2, 2, 2, 1594, 1567, 3, 2, 2, 2, 1594, 1568, 3, 2, 2, 2, 1594, 1569, 3, 2, 2, 2, 1594, 1570, 3, 2, 2, 2, 1594, 1571, 3, 2, 2, 2, 1594, 1572, 3, 2, 2, 2, 1594, 1573, 3, 2, 2, 2, 1594, 1574, 3, 2, 2, 2, 1594, 1575, 3, 2, 2, 2, 1594, 1576, 3, 2, 2, 2, 1594, 1577, 3, 2, 2, 2, 1594, 1578, 3, 2, 2, 2, 1594, 1579, 3, 2, 2, 2, 1594, 1580, 3, 2, 2, 2, 1594, 1581, 3, 2, 2, 2, 1594, 1582, 3, 2, 2, 2, 1594, 1583, 3, 2, 2, 2, 1594, 1584, 3, 2, 2, 2, 1594, 1585, 3, 2, 2, 2, 1594, 1586, 3, 2, 2, 2, 1594, 1587, 3, 2, 2, 2, 1594, 1588, 3, 2, 2, 2, 1594, 1589, 3, 2, 2, 2, 1594, 1590, 3, 2, 2, 2, 1594, 1591, 3, 2, 2, 2, 1594, 1592, 3, 2, 2, 2, 1594, 1593, 3, 2, 2, 2, 1595, 321, 3, 2, 2, 2, 1596, 1597, 7, 38, 2, 2, 1597, 1598, 5, 320, 159, 2, 1598, 323, 3, 2, 2, 2, 1599, 1600, 7, 94, 2, 2, 1600, 1601, 7, 119, 2, 2, 1601, 1602, 5, 294, 146, 2, 1602, 1603, 5, 294, 146, 2, 1603, 1604, 5, 294, 146, 2, 1604, 1605, 5, 294, 146, 2, 1605, 325, 3, 2, 2, 2, 1606, 1607, 7, 94, 2, 2, 1607, 1608, 9, 15, 2, 2, 1608, 327, 3, 2, 2, 2, 1609, 1612, 5, 324, 161, 2, 1610, 1612, 5, 326, 162, 2, 1611, 1609, 3, 2, 2, 2, 1611, 1610, 3, 2, 2, 2, 1612, 329, 3, 2, 2, 2, 1613, 1619, 5, 344, 171, 2, 1614, 1619, 5, 336, 167, 2, 1615, 1619, 5, 342, 170, 2, 1616, 1619, 5, 338, 168, 2, 1617, 1619, 5, 340, 169, 2, 1618, 1613, 3, 2, 2, 2, 1618, 1614, 3, 2, 2, 2, 1618, 1615, 3, 2, 2, 2, 1618, 1616, 3, 2, 2, 2, 1618, 1617, 3, 2, 2, 2, 1619, 331, 3, 2, 2, 2, 1620, 1621, 7, 36, 2, 2, 1621, 1622, 3, 2, 2, 2, 1622, 1623, 8, 165, 6, 2, 1623, 333, 3, 2, 2, 2, 1624, 1625, 7, 36, 2, 2, 1625, 1626, 7, 36, 2, 2, 1626, 1627, 7, 36, 2, 2, 1627, 1628, 3, 2, 2, 2, 1628, 1629, 8, 166, 7, 2, 1629, 335, 3, 2, 2, 2, 1630, 1631, 9, 16, 2, 2, 1631, 337, 3, 2, 2, 2, 1632, 1633, 9, 17, 2, 2, 1633, 339, 3, 2, 2, 2, 1634, 1635, 9, 18, 2, 2, 1635, 341, 3, 2, 2, 2, 1636, 1637, 9, 19, 2, 2, 1637, 343, 3, 2, 2, 2, 1638, 1639, 9, 20, 2, 2, 1639, 345, 3, 2, 2, 2, 1640, 1641, 9, 21, 2, 2, 1641, 347, 3, 2, 2, 2, 1642, 1643, 9, 22, 2, 2, 1643, 349, 3, 2, 2, 2, 1644, 1645, 7, 36, 2, 2, 1645, 1646, 3, 2, 2, 2, 1646, 1647, 8, 174, 8, 2, 1647, 351, 3, 2, 2, 2, 1648, 1649, 5, 322, 160, 2, 1649, 353, 3, 2, 2, 2, 1650, 1652, 10, 23, 2, 2, 1651, 1650, 3, 2, 2, 2, 1652, 1653, 3, 2, 2, 2, 1653, 1651, 3, 2, 2, 2, 1653, 1654, 3, 2, 2, 2, 1654, 1657, 3, 2, 2, 2, 1655, 1657, 7, 38, 2, 2, 1656, 1651, 3, 2, 2, 2, 1656, 1655, 3, 2, 2, 2, 1657, 355, 3, 2, 2, 2, 1658, 1661, 5, 326, 162, 2, 1659, 1661, 5, 324, 161, 2, 1660, 1658, 3, 2, 2, 2, 1660, 1659, 3, 2, 2, 2, 1661, 357, 3, 2, 2, 2, 1662, 1663, 7, 38, 2, 2, 1663, 1664, 7, 125, 2, 2, 1664, 1665, 3, 2, 2, 2, 1665, 1666, 8, 178, 4, 2, 1666, 359, 3, 2, 2, 2, 1667, 1669, 5, 362, 180, 2, 1668, 1667, 3, 2, 2, 2, 1668, 1669, 3, 2, 2, 2, 1669, 1670, 3, 2, 2, 2, 1670, 1671, 7, 36, 2, 2, 1671, 1672, 7, 36, 2, 2, 1672, 1673, 7, 36, 2, 2, 1673, 1674, 3, 2, 2, 2, 1674, 1675, 8, 179, 8, 2, 1675, 361, 3, 2, 2, 2, 1676, 1678, 7, 36, 2, 2, 1677, 1676, 3, 2, 2, 2, 1678, 1679, 3, 2, 2, 2, 1679, 1677, 3, 2, 2, 2, 1679, 1680, 3, 2, 2, 2, 1680, 363, 3, 2, 2, 2, 1681, 1682, 5, 322, 160, 2, 1682, 365, 3, 2, 2, 2, 1683, 1685, 10, 24, 2, 2, 1684, 1683, 3, 2, 2, 2, 1685, 1686, 3, 2, 2, 2, 1686, 1684, 3, 2, 2, 2, 1686, 1687, 3, 2, 2, 2, 1687, 1690, 3, 2, 2, 2, 1688, 1690, 7, 38, 2, 2, 1689, 1684, 3, 2, 2, 2, 1689, 1688, 3, 2, 2, 2, 1690, 367, 3, 2, 2, 2, 1691, 1692, 7, 38, 2, 2, 1692, 1693, 7, 125, 2, 2, 1693, 1694, 3, 2, 2, 2, 1694, 1695, 8, 183, 4, 2, 1695, 369, 3, 2, 2, 2, 1696, 1697, 5, 26, 12, 2, 1697, 1698, 3, 2, 2, 2, 1698, 1699, 8, 184, 8, 2, 1699, 1700, 8, 184, 9, 2, 1700, 371, 3, 2, 2, 2, 1701, 1702, 5, 30, 14, 2, 1702, 1703, 3, 2, 2, 2, 1703, 1704, 8, 185, 8, 2, 1704, 1705, 8, 185, 10, 2, 1705, 373, 3, 2, 2, 2, 1706, 1707, 5, 24, 11, 2, 1707, 1708, 3, 2, 2, 2, 1708, 1709, 8, 186, 3, 2, 1709, 1710, 8, 186, 11, 2, 1710, 375, 3, 2, 2, 2, 1711, 1712, 5, 28, 13, 2, 1712, 1713, 3, 2, 2, 2, 1713, 1714, 8, 187, 3, 2, 1714, 1715, 8, 187, 12, 2, 1715, 377, 3, 2, 2, 2, 1716, 1717, 5, 32, 15, 2, 1717, 1718, 3, 2, 2, 2, 1718, 1719, 8, 188, 4, 2, 1719, 1720, 8, 188, 13, 2, 1720, 379, 3, 2, 2, 2, 1721, 1722, 5, 34, 16, 2, 1722, 1723, 3, 2, 2, 2, 1723, 1724, 8, 189, 8, 2, 1724, 1725, 8, 189, 14, 2, 1725, 381, 3, 2, 2, 2, 1726, 1727, 5, 20, 9, 2, 1727, 1728, 3, 2, 2, 2, 1728, 1729, 8, 190, 15, 2, 1729, 383, 3, 2, 2, 2, 1730, 1731, 5, 22, 10, 2, 1731, 1732, 3, 2, 2, 2, 1732, 1733, 8, 191, 16, 2, 1733, 385, 3, 2, 2, 2, 1734, 1735, 5, 36, 17, 2, 1735, 1736, 3, 2, 2, 2, 1736, 1737, 8, 192, 17, 2, 1737, 387, 3, 2, 2, 2, 1738, 1739, 5, 38, 18, 2, 1739, 1740, 3, 2, 2, 2, 1740, 1741, 8, 193, 18, 2, 1741, 389, 3, 2, 2, 2, 1742, 1743, 5, 40, 19, 2, 1743, 1744, 3, 2, 2, 2, 1744, 1745, 8, 194, 19, 2, 1745, 391, 3, 2, 2, 2, 1746, 1747, 5, 42, 20, 2, 1747, 1748, 3, 2, 2, 2, 1748, 1749, 8, 195, 20, 2, 1749, 393, 3, 2, 2, 2, 1750, 1751, 5, 44, 21, 2, 1751, 1752, 3, 2, 2, 2, 1752, 1753, 8, 196, 21, 2, 1753, 395, 3, 2, 2, 2, 1754, 1755, 5, 46, 22, 2, 1755, 1756, 3, 2, 2, 2, 1756, 1757, 8, 197, 22, 2, 1757, 397, 3, 2, 2, 2, 1758, 1759, 5, 48, 23, 2, 1759, 1760, 3, 2, 2, 2, 1760, 1761, 8, 198, 23, 2, 1761, 399, 3, 2, 2, 2, 1762, 1763, 5, 50, 24, 2, 1763, 1764, 3, 2, 2, 2, 1764, 1765, 8, 199, 24, 2, 1765, 401, 3, 2, 2, 2, 1766, 1767, 5, 52, 25, 2, 1767, 1768, 3, 2, 2, 2, 1768, 1769, 8, 200, 25, 2, 1769, 403, 3, 2, 2, 2, 1770, 1773, 7, 35, 2, 2, 1771, 1774, 5, 16, 7, 2, 1772, 1774, 5, 14, 6, 2, 1773, 1771, 3, 2, 2, 2, 1773, 1772, 3, 2, 2, 2, 1774, 1775, 3, 2, 2, 2, 1775, 1776, 8, 201, 26, 2, 1776, 405, 3, 2, 2, 2, 1777, 1778, 5, 56, 27, 2, 1778, 1779, 3, 2, 2, 2, 1779, 1780, 8, 202, 27, 2, 1780, 407, 3, 2, 2, 2, 1781, 1782, 5, 58, 28, 2, 1782, 1783, 3, 2, 2, 2, 1783, 1784, 8, 203, 28, 2, 1784, 409, 3, 2, 2, 2, 1785, 1786, 5, 60, 29, 2, 1786, 1787, 3, 2, 2, 2, 1787, 1788, 8, 204, 29, 2, 1788, 411, 3, 2, 2, 2, 1789, 1790, 5, 62, 30, 2, 1790, 1791, 3, 2, 2, 2, 1791, 1792, 8, 205, 30, 2, 1792, 413, 3, 2, 2, 2, 1793, 1794, 5, 64, 31, 2, 1794, 1795, 3, 2, 2, 2, 1795, 1796, 8, 206, 31, 2, 1796, 415, 3, 2, 2, 2, 1797, 1798, 5, 66, 32, 2, 1798, 1799, 3, 2, 2, 2, 1799, 1800, 8, 207, 32, 2, 1800, 417, 3, 2, 2, 2, 1801, 1802, 5, 68, 33, 2, 1802, 1803, 3, 2, 2, 2, 1803, 1804, 8, 208, 33, 2, 1804, 419, 3, 2, 2, 2, 1805, 1806, 5, 70, 34, 2, 1806, 1807, 3, 2, 2, 2, 1807, 1808, 8, 209, 34, 2, 1808, 421, 3, 2, 2, 2, 1809, 1810, 5, 72, 35, 2, 1810, 1811, 3, 2, 2, 2, 1811, 1812, 8, 210, 35, 2, 1812, 423, 3, 2, 2, 2, 1813, 1814, 5, 74, 36, 2, 1814, 1815, 3, 2, 2, 2, 1815, 1816, 8, 211, 36, 2, 1816, 425, 3, 2, 2, 2, 1817, 1818, 5, 76, 37, 2, 1818, 1819, 3, 2, 2, 2, 1819, 1820, 8, 212, 37, 2, 1820, 427, 3, 2, 2, 2, 1821, 1822, 5, 78, 38, 2, 1822, 1823, 3, 2, 2, 2, 1823, 1824, 8, 213, 38, 2, 1824, 429, 3, 2, 2, 2, 1825, 1826, 5, 18, 8, 2, 1826, 1827, 3, 2, 2, 2, 1827, 1828, 8, 214, 39, 2, 1828, 431, 3, 2, 2, 2, 1829, 1830, 5, 80, 39, 2, 1830, 1831, 3, 2, 2, 2, 1831, 1832, 8, 215, 40, 2, 1832, 433, 3, 2, 2, 2, 1833, 1834, 5, 82, 40, 2, 1834, 1835, 3, 2, 2, 2, 1835, 1836, 8, 216, 41, 2, 1836, 435, 3, 2, 2, 2, 1837, 1838, 5, 84, 41, 2, 1838, 1839, 3, 2, 2, 2, 1839, 1840, 8, 217, 42, 2, 1840, 437, 3, 2, 2, 2, 1841, 1842, 5, 86, 42, 2, 1842, 1843, 3, 2, 2, 2, 1843, 1844, 8, 218, 43, 2, 1844, 439, 3, 2, 2, 2, 1845, 1846, 5, 88, 43, 2, 1846, 1847, 3, 2, 2, 2, 1847, 1848, 8, 219, 44, 2, 1848, 441, 3, 2, 2, 2, 1849, 1850, 5, 90, 44, 2, 1850, 1851, 3, 2, 2, 2, 1851, 1852, 8, 220, 45, 2, 1852, 443, 3, 2, 2, 2, 1853, 1854, 5, 92, 45, 2, 1854, 1855, 3, 2, 2, 2, 1855, 1856, 8, 221, 46, 2, 1856, 445, 3, 2, 2, 2, 1857, 1860, 7, 65, 2, 2, 1858, 1861, 5, 16, 7, 2, 1859, 1861, 5, 14, 6, 2, 1860, 1858, 3, 2, 2, 2, 1860, 1859, 3, 2, 2, 2, 1861, 1862, 3, 2, 2, 2, 1862, 1863, 8, 222, 47, 2, 1863, 447, 3, 2, 2, 2, 1864, 1865, 5, 96, 47, 2, 1865, 1866, 3, 2, 2, 2, 1866, 1867, 8, 223, 48, 2, 1867, 449, 3, 2, 2, 2, 1868, 1869, 5, 98, 48, 2, 1869, 1870, 3, 2, 2, 2, 1870, 1871, 8, 224, 49, 2, 1871, 451, 3, 2, 2, 2, 1872, 1873, 5, 100, 49, 2, 1873, 1874, 3, 2, 2, 2, 1874, 1875, 8, 225, 50, 2, 1875, 453, 3, 2, 2, 2, 1876, 1877, 5, 102, 50, 2, 1877, 1878, 3, 2, 2, 2, 1878, 1879, 8, 226, 51, 2, 1879, 455, 3, 2, 2, 2, 1880, 1881, 5, 104, 51, 2, 1881, 1882, 3, 2, 2, 2, 1882, 1883, 8, 227, 52, 2, 1883, 457, 3, 2, 2, 2, 1884, 1885, 5, 106, 52, 2, 1885, 1886, 3, 2, 2, 2, 1886, 1887, 8, 228, 53, 2, 1887, 459, 3, 2, 2, 2, 1888, 1889, 5, 108, 53, 2, 1889, 1890, 3, 2, 2, 2, 1890, 1891, 8, 229, 54, 2, 1891, 461, 3, 2, 2, 2, 1892, 1893, 5, 208, 103, 2, 1893, 1894, 3, 2, 2, 2, 1894, 1895, 8, 230, 55, 2, 1895, 463, 3, 2, 2, 2, 1896, 1897, 5, 212, 105, 2, 1897, 1898, 3, 2, 2, 2, 1898, 1899, 8, 231, 56, 2, 1899, 465, 3, 2, 2, 2, 1900, 1901, 5, 214, 106, 2, 1901, 1902, 3, 2, 2, 2, 1902, 1903, 8, 232, 57, 2, 1903, 467, 3, 2, 2, 2, 1904, 1905, 5, 206, 102, 2, 1905, 1906, 3, 2, 2, 2, 1906, 1907, 8, 233, 58, 2, 1907, 469, 3, 2, 2, 2, 1908, 1909, 5, 110, 54, 2, 1909, 1910, 3, 2, 2, 2, 1910, 1911, 8, 234, 59, 2, 1911, 471, 3, 2, 2, 2, 1912, 1913, 5, 112, 55, 2, 1913, 1914, 3, 2, 2, 2, 1914, 1915, 8, 235, 60, 2, 1915, 473, 3, 2, 2, 2, 1916, 1917, 5, 114, 56, 2, 1917, 1918, 3, 2, 2, 2, 1918, 1919, 8, 236, 61, 2, 1919, 475, 3, 2, 2, 2, 1920, 1921, 5, 116, 57, 2, 1921, 1922, 3, 2, 2, 2, 1922, 1923, 8, 237, 62, 2, 1923, 477, 3, 2, 2, 2, 1924, 1925, 5, 332, 165, 2, 1925, 1926, 3, 2, 2, 2, 1926, 1927, 8, 238, 6, 2, 1927, 1928, 8, 238, 63, 2, 1928, 479, 3, 2, 2, 2, 1929, 1930, 5, 334, 166, 2, 1930, 1931, 3, 2, 2, 2, 1931, 1932, 8, 239, 7, 2, 1932, 1933, 8, 239, 64, 2, 1933, 481, 3, 2, 2, 2, 1934, 1935, 5, 158, 78, 2, 1935, 1936, 3, 2, 2, 2, 1936, 1937, 8, 240, 65, 2, 1937, 483, 3, 2, 2, 2, 1938, 1939, 5, 160, 79, 2, 1939, 1940, 3, 2, 2, 2, 1940, 1941, 8, 241, 66, 2, 1941, 485, 3, 2, 2, 2, 1942, 1943, 5, 154, 76, 2, 1943, 1944, 3, 2, 2, 2, 1944, 1945, 8, 242, 67, 2, 1945, 487, 3, 2, 2, 2, 1946, 1947, 5, 156, 77, 2, 1947, 1948, 3, 2, 2, 2, 1948, 1949, 8, 243, 68, 2, 1949, 489, 3, 2, 2, 2, 1950, 1951, 5, 174, 86, 2, 1951, 1952, 3, 2, 2, 2, 1952, 1953, 8, 244, 69, 2, 1953, 491, 3, 2, 2, 2, 1954, 1955, 5, 210, 104, 2, 1955, 1956, 3, 2, 2, 2, 1956, 1957, 8, 245, 70, 2, 1957, 493, 3, 2, 2, 2, 1958, 1959, 5, 216, 107, 2, 1959, 1960, 3, 2, 2, 2, 1960, 1961, 8, 246, 71, 2, 1961, 495, 3, 2, 2, 2, 1962, 1963, 5, 130, 64, 2, 1963, 1964, 3, 2, 2, 2, 1964, 1965, 8, 247, 72, 2, 1965, 497, 3, 2, 2, 2, 1966, 1967, 5, 128, 63, 2, 1967, 1968, 3, 2, 2, 2, 1968, 1969, 8, 248, 73, 2, 1969, 499, 3, 2, 2, 2, 1970, 1971, 5, 132, 65, 2, 1971, 1972, 3, 2, 2, 2, 1972, 1973, 8, 249, 74, 2, 1973, 501, 3, 2, 2, 2, 1974, 1975, 5, 134, 66, 2, 1975, 1976, 3, 2, 2, 2, 1976, 1977, 8, 250, 75, 2, 1977, 503, 3, 2, 2, 2, 1978, 1979, 5, 136, 67, 2, 1979, 1980, 3, 2, 2, 2, 1980, 1981, 8, 251, 76, 2, 1981, 505, 3, 2, 2, 2, 1982, 1983, 5, 138, 68, 2, 1983, 1984, 3, 2, 2, 2, 1984, 1985, 8, 252, 77, 2, 1985, 507, 3, 2, 2, 2, 1986, 1987, 5, 140, 69, 2, 1987, 1988, 3, 2, 2, 2, 1988, 1989, 8, 253, 78, 2, 1989, 509, 3, 2, 2, 2, 1990, 1991, 5, 142, 70, 2, 1991, 1992, 3, 2, 2, 2, 1992, 1993, 8, 254, 79, 2, 1993, 511, 3, 2, 2, 2, 1994, 1995, 5, 144, 71, 2, 1995, 1996, 3, 2, 2, 2, 1996, 1997, 8, 255, 80, 2, 1997, 513, 3, 2, 2, 2, 1998, 1999, 5, 198, 98, 2, 1999, 2000, 3, 2, 2, 2, 2000, 2001, 8, 256, 81, 2, 2001, 515, 3, 2, 2, 2, 2002, 2003, 5, 200, 99, 2, 2003, 2004, 3, 2, 2, 2, 2004, 2005, 8, 257, 82, 2, 2005, 517, 3, 2, 2, 2, 2006, 2007, 5, 202, 100, 2, 2007, 2008, 3, 2, 2, 2, 2008, 2009, 8, 258, 83, 2, 2009, 519, 3, 2, 2, 2, 2010, 2011, 5, 204, 101, 2, 2011, 2012, 3, 2, 2, 2, 2012, 2013, 8, 259, 84, 2, 2013, 521, 3, 2, 2, 2, 2014, 2015, 5, 118, 58, 2, 2015, 2016, 3, 2, 2, 2, 2016, 2017, 8, 260, 85, 2, 2017, 523, 3, 2, 2, 2, 2018, 2019, 5, 120, 59, 2, 2019, 2020, 3, 2, 2, 2, 2020, 2021, 8, 261, 86, 2, 2021, 525, 3, 2, 2, 2, 2022, 2023, 5, 122, 60, 2, 2023, 2024, 3, 2, 2, 2, 2024, 2025, 8, 262, 87, 2, 2025, 527, 3, 2, 2, 2, 2026, 2027, 5, 180, 89, 2, 2027, 2028, 3, 2, 2, 2, 2028, 2029, 8, 263, 88, 2, 2029, 529, 3, 2, 2, 2, 2030, 2031, 5, 182, 90, 2, 2031, 2032, 3, 2, 2, 2, 2032, 2033, 8, 264, 89, 2, 2033, 531, 3, 2, 2, 2, 2034, 2035, 5, 184, 91, 2, 2035, 2036, 3, 2, 2, 2, 2036, 2037, 8, 265, 90, 2, 2037, 533, 3, 2, 2, 2, 2038, 2039, 5, 186, 92, 2, 2039, 2040, 3, 2, 2, 2, 2040, 2041, 8, 266, 91, 2, 2041, 535, 3, 2, 2, 2, 2042, 2043, 5, 188, 93, 2, 2043, 2044, 3, 2, 2, 2, 2044, 2045, 8, 267, 92, 2, 2045, 537, 3, 2, 2, 2, 2046, 2047, 5, 190, 94, 2, 2047, 2048, 3, 2, 2, 2, 2048, 2049, 8, 268, 93, 2, 2049, 539, 3, 2, 2, 2, 2050, 2051, 5, 192, 95, 2, 2051, 2052, 3, 2, 2, 2, 2052, 2053, 8, 269, 94, 2, 2053, 541, 3, 2, 2, 2, 2054, 2055, 5, 194, 96, 2, 2055, 2056, 3, 2, 2, 2, 2056, 2057, 8, 270, 95, 2, 2057, 543, 3, 2, 2, 2, 2058, 2059, 5, 196, 97, 2, 2059, 2060, 3, 2, 2, 2, 2060, 2061, 8, 271, 96, 2, 2061, 545, 3, 2, 2, 2, 2062, 2063, 5, 220, 109, 2, 2063, 2064, 3, 2, 2, 2, 2064, 2065, 8, 272, 97, 2, 2065, 547, 3, 2, 2, 2, 2066, 2067, 5, 222, 110, 2, 2067, 2068, 3, 2, 2, 2, 2068, 2069, 8, 273, 98, 2, 2069, 549, 3, 2, 2, 2, 2070, 2071, 5, 224, 111, 2, 2071, 2072, 3, 2, 2, 2, 2072, 2073, 8, 274, 99, 2, 2073, 551, 3, 2, 2, 2, 2074, 2075, 5, 226, 112, 2, 2075, 2076, 3, 2, 2, 2, 2076, 2077, 8, 275, 100, 2, 2077, 553, 3, 2, 2, 2, 2078, 2079, 5, 228, 113, 2, 2079, 2080, 3, 2, 2, 2, 2080, 2081, 8, 276, 101, 2, 2081, 555, 3, 2, 2, 2, 2082, 2083, 5, 230, 114, 2, 2083, 2084, 3, 2, 2, 2, 2084, 2085, 8, 277, 102, 2, 2085, 557, 3, 2, 2, 2, 2086, 2087, 5, 232, 115, 2, 2087, 2088, 3, 2, 2, 2, 2088, 2089, 8, 278, 103, 2, 2089, 559, 3, 2, 2, 2, 2090, 2091, 5, 234, 116, 2, 2091, 2092, 3, 2, 2, 2, 2092, 2093, 8, 279, 104, 2, 2093, 561, 3, 2, 2, 2, 2094, 2095, 5, 236, 117, 2, 2095, 2096, 3, 2, 2, 2, 2096, 2097, 8, 280, 105, 2, 2097, 563, 3, 2, 2, 2, 2098, 2099, 5, 238, 118, 2, 2099, 2100, 3, 2, 2, 2, 2100, 2101, 8, 281, 106, 2, 2101, 565, 3, 2, 2, 2, 2102, 2103, 5, 240, 119, 2, 2103, 2104, 3, 2, 2, 2, 2104, 2105, 8, 282, 107, 2, 2105, 567, 3, 2, 2, 2, 2106, 2107, 5, 242, 120, 2, 2107, 2108, 3, 2, 2, 2, 2108, 2109, 8, 283, 108, 2, 2109, 569, 3, 2, 2, 2, 2110, 2111, 5, 244, 121, 2, 2111, 2112, 3, 2, 2, 2, 2112, 2113, 8, 284, 109, 2, 2113, 571, 3, 2, 2, 2, 2114, 2115, 5, 246, 122, 2, 2115, 2116, 3, 2, 2, 2, 2116, 2117, 8, 285, 110, 2, 2117, 573, 3, 2, 2, 2, 2118, 2119, 5, 248, 123, 2, 2119, 2120, 3, 2, 2, 2, 2120, 2121, 8, 286, 111, 2, 2121, 575, 3, 2, 2, 2, 2122, 2123, 5, 250, 124, 2, 2123, 2124, 3, 2, 2, 2, 2124, 2125, 8, 287, 112, 2, 2125, 577, 3, 2, 2, 2, 2126, 2127, 5, 252, 125, 2, 2127, 2128, 3, 2, 2, 2, 2128, 2129, 8, 288, 113, 2, 2129, 579, 3, 2, 2, 2, 2130, 2131, 5, 254, 126, 2, 2131, 2132, 3, 2, 2, 2, 2132, 2133, 8, 289, 114, 2, 2133, 581, 3, 2, 2, 2, 2134, 2135, 5, 256, 127, 2, 2135, 2136, 3, 2, 2, 2, 2136, 2137, 8, 290, 115, 2, 2137, 583, 3, 2, 2, 2, 2138, 2139, 5, 258, 128, 2, 2139, 2140, 3, 2, 2, 2, 2140, 2141, 8, 291, 116, 2, 2141, 585, 3, 2, 2, 2, 2142, 2143, 5, 260, 129, 2, 2143, 2144, 3, 2, 2, 2, 2144, 2145, 8, 292, 117, 2, 2145, 587, 3, 2, 2, 2, 2146, 2147, 5, 262, 130, 2, 2147, 2148, 3, 2, 2, 2, 2148, 2149, 8, 293, 118, 2, 2149, 589, 3, 2, 2, 2, 2150, 2151, 5, 264, 131, 2, 2151, 2152, 3, 2, 2, 2, 2152, 2153, 8, 294, 119, 2, 2153, 591, 3, 2, 2, 2, 2154, 2155, 5, 266, 132, 2, 2155, 2156, 3, 2, 2, 2, 2156, 2157, 8, 295, 120, 2, 2157, 593, 3, 2, 2, 2, 2158, 2159, 5, 268, 133, 2, 2159, 2160, 3, 2, 2, 2, 2160, 2161, 8, 296, 121, 2, 2161, 595, 3, 2, 2, 2, 2162, 2163, 5, 270, 134, 2, 2163, 2164, 3, 2, 2, 2, 2164, 2165, 8, 297, 122, 2, 2165, 597, 3, 2, 2, 2, 2166, 2167, 5, 272, 135, 2, 2167, 2168, 3, 2, 2, 2, 2168, 2169, 8, 298, 123, 2, 2169, 599, 3, 2, 2, 2, 2170, 2171, 5, 274, 136, 2, 2171, 2172, 3, 2, 2, 2, 2172, 2173, 8, 299, 124, 2, 2173, 601, 3, 2, 2, 2, 2174, 2175, 5, 310, 154, 2, 2175, 2176, 3, 2, 2, 2, 2176, 2177, 8, 300, 125, 2, 2177, 603, 3, 2, 2, 2, 2178, 2179, 5, 292, 145, 2, 2179, 2180, 3, 2, 2, 2, 2180, 2181, 8, 301, 126, 2, 2181, 605, 3, 2, 2, 2, 2182, 2183, 5, 298, 148, 2, 2183, 2184, 3, 2, 2, 2, 2184, 2185, 8, 302, 127, 2, 2185, 607, 3, 2, 2, 2, 2186, 2187, 5, 304, 151, 2, 2187, 2188, 3, 2, 2, 2, 2188, 2189, 8, 303, 128, 2, 2189, 609, 3, 2, 2, 2, 2190, 2191, 5, 314, 156, 2, 2191, 2192, 3, 2, 2, 2, 2192, 2193, 8, 304, 129, 2, 2193, 611, 3, 2, 2, 2, 2194, 2195, 5, 286, 142, 2, 2195, 2196, 3, 2, 2, 2, 2196, 2197, 8, 305, 130, 2, 2197, 613, 3, 2, 2, 2, 2198, 2199, 5, 312, 155, 2, 2199, 2200, 3, 2, 2, 2, 2200, 2201, 8, 306, 131, 2, 2201, 615, 3, 2, 2, 2, 2202, 2203, 5, 308, 153, 2, 2203, 2204, 3, 2, 2, 2, 2204, 2205, 8, 307, 132, 2, 2205, 617, 3, 2, 2, 2, 2206, 2207, 5, 306, 152, 2, 2207, 2208, 3, 2, 2, 2, 2208, 2209, 8, 308, 133, 2, 2209, 619, 3, 2, 2, 2, 2210, 2211, 5, 318, 158, 2, 2211, 2212, 3, 2, 2, 2, 2212, 2213, 8, 309, 134, 2, 2213, 621, 3, 2, 2, 2, 2214, 2217, 5, 10, 4, 2, 2215, 2217, 5, 8, 3, 2, 2216, 2214, 3, 2, 2, 2, 2216, 2215, 3, 2, 2, 2, 2217, 2218, 3, 2, 2, 2, 2218, 2219, 8, 310, 2, 2, 2219, 623, 3, 2, 2, 2, 2220, 2221, 5, 12, 5, 2, 2221, 2222, 3, 2, 2, 2, 2222, 2223, 8, 311, 2, 2, 2223, 625, 3, 2, 2, 2, 2224, 2225, 5, 14, 6, 2, 2225, 2226, 3, 2, 2, 2, 2226, 2227, 8, 312, 2, 2, 2227, 627, 3, 2, 2, 2, 2228, 2229, 11, 2, 2, 2, 2229, 629, 3, 2, 2, 2, 59, 2, 3, 4, 5, 636, 644, 646, 660, 672, 674, 679, 778, 782, 788, 793, 1140, 1148, 1383, 1389, 1395, 1399, 1405, 1413, 1416, 1421, 1426, 1432, 1438, 1444, 1452, 1460, 1466, 1474, 1482, 1487, 1491, 1496, 1509, 1519, 1527, 1532, 1534, 1541, 1544, 1594, 1611, 1618, 1653, 1656, 1660, 1668, 1679, 1686, 1689, 1773, 1860, 2216, 135, 2, 3, 2, 7, 5, 2, 7, 2, 2, 3, 16, 2, 7, 3, 2, 7, 4, 2, 6, 2, 2, 9, 12, 2, 9, 14, 2, 9, 11, 2, 9, 13, 2, 9, 15, 2, 9, 16, 2, 9, 9, 2, 9, 10, 2, 9, 17, 2, 9, 18, 2, 9, 19, 2, 9, 20, 2, 9, 21, 2, 9, 22, 2, 9, 23, 2, 9, 24, 2, 9, 25, 2, 9, 26, 2, 9, 27, 2, 9, 28, 2, 9, 29, 2, 9, 30, 2, 9, 31, 2, 9, 32, 2, 9, 33, 2, 9, 34, 2, 9, 35, 2, 9, 36, 2, 9, 37, 2, 9, 38, 2, 9, 8, 2, 9, 39, 2, 9, 40, 2, 9, 41, 2, 9, 42, 2, 9, 43, 2, 9, 44, 2, 9, 45, 2, 9, 46, 2, 9, 47, 2, 9, 48, 2, 9, 49, 2, 9, 50, 2, 9, 51, 2, 9, 52, 2, 9, 53, 2, 9, 103, 2, 9, 105, 2, 9, 106, 2, 9, 102, 2, 9, 54, 2, 9, 55, 2, 9, 56, 2, 9, 57, 2, 9, 151, 2, 9, 152, 2, 9, 78, 2, 9, 79, 2, 9, 76, 2, 9, 77, 2, 9, 86, 2, 9, 104, 2, 9, 107, 2, 9, 64, 2, 9, 63, 2, 9, 65, 2, 9, 66, 2, 9, 67, 2, 9, 68, 2, 9, 69, 2, 9, 70, 2, 9, 71, 2, 9, 98, 2, 9, 99, 2, 9, 100, 2, 9, 101, 2, 9, 58, 2, 9, 59, 2, 9, 60, 2, 9, 89, 2, 9, 90, 2, 9, 91, 2, 9, 92, 2, 9, 93, 2, 9, 94, 2, 9, 95, 2, 9, 96, 2, 9, 97, 2, 9, 109, 2, 9, 110, 2, 9, 111, 2, 9, 112, 2, 9, 113, 2, 9, 114, 2, 9, 115, 2, 9, 116, 2, 9, 117, 2, 9, 118, 2, 9, 119, 2, 9, 120, 2, 9, 121, 2, 9, 122, 2, 9, 123, 2, 9, 124, 2, 9, 125, 2, 9, 126, 2, 9, 127, 2, 9, 128, 2, 9, 129, 2, 9, 130, 2, 9, 131, 2, 9, 132, 2, 9, 133, 2, 9, 134, 2, 9, 135, 2, 9, 136, 2, 9, 145, 2, 9, 140, 2, 9, 141, 2, 9, 142, 2, 9, 147, 2, 9, 137, 2, 9, 146, 2, 9, 144, 2, 9, 143, 2, 9, 148, 2] \ No newline at end of file diff --git a/lexers/src/main/java/com/itsaky/androidide/lexers/kotlin/KotlinLexer.java b/lexers/src/main/java/com/itsaky/androidide/lexers/kotlin/KotlinLexer.java new file mode 100644 index 000000000..e77c40683 --- /dev/null +++ b/lexers/src/main/java/com/itsaky/androidide/lexers/kotlin/KotlinLexer.java @@ -0,0 +1,1426 @@ +// Generated from KotlinLexer.g4 by ANTLR 4.9.2 +package com.itsaky.androidide.lexers.kotlin; +import org.antlr.v4.runtime.Lexer; +import org.antlr.v4.runtime.CharStream; +import org.antlr.v4.runtime.Token; +import org.antlr.v4.runtime.TokenStream; +import org.antlr.v4.runtime.*; +import org.antlr.v4.runtime.atn.*; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.misc.*; + +@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"}) +public class KotlinLexer extends Lexer { + static { RuntimeMetaData.checkVersion("4.9.2", RuntimeMetaData.VERSION); } + + protected static final DFA[] _decisionToDFA; + protected static final PredictionContextCache _sharedContextCache = + new PredictionContextCache(); + public static final int + ShebangLine=1, DelimitedComment=2, LineComment=3, WS=4, NL=5, RESERVED=6, + DOT=7, COMMA=8, LPAREN=9, RPAREN=10, LSQUARE=11, RSQUARE=12, LCURL=13, + RCURL=14, MULT=15, MOD=16, DIV=17, ADD=18, SUB=19, INCR=20, DECR=21, CONJ=22, + DISJ=23, EXCL_WS=24, EXCL_NO_WS=25, COLON=26, SEMICOLON=27, ASSIGNMENT=28, + ADD_ASSIGNMENT=29, SUB_ASSIGNMENT=30, MULT_ASSIGNMENT=31, DIV_ASSIGNMENT=32, + MOD_ASSIGNMENT=33, ARROW=34, DOUBLE_ARROW=35, RANGE=36, COLONCOLON=37, + DOUBLE_SEMICOLON=38, HASH=39, AT_NO_WS=40, AT_POST_WS=41, AT_PRE_WS=42, + AT_BOTH_WS=43, QUEST_WS=44, QUEST_NO_WS=45, LANGLE=46, RANGLE=47, LE=48, + GE=49, EXCL_EQ=50, EXCL_EQEQ=51, AS_SAFE=52, EQEQ=53, EQEQEQ=54, SINGLE_QUOTE=55, + RETURN_AT=56, CONTINUE_AT=57, BREAK_AT=58, THIS_AT=59, SUPER_AT=60, FILE=61, + FIELD=62, PROPERTY=63, GET=64, SET=65, RECEIVER=66, PARAM=67, SETPARAM=68, + DELEGATE=69, PACKAGE=70, IMPORT=71, CLASS=72, INTERFACE=73, FUN=74, OBJECT=75, + VAL=76, VAR=77, TYPE_ALIAS=78, CONSTRUCTOR=79, BY=80, COMPANION=81, INIT=82, + THIS=83, SUPER=84, TYPEOF=85, WHERE=86, IF=87, ELSE=88, WHEN=89, TRY=90, + CATCH=91, FINALLY=92, FOR=93, DO=94, WHILE=95, THROW=96, RETURN=97, CONTINUE=98, + BREAK=99, AS=100, IS=101, IN=102, NOT_IS=103, NOT_IN=104, OUT=105, DYNAMIC=106, + PUBLIC=107, PRIVATE=108, PROTECTED=109, INTERNAL=110, ENUM=111, SEALED=112, + ANNOTATION=113, DATA=114, INNER=115, VALUE=116, TAILREC=117, OPERATOR=118, + INLINE=119, INFIX=120, EXTERNAL=121, SUSPEND=122, OVERRIDE=123, ABSTRACT=124, + FINAL=125, OPEN=126, CONST=127, LATEINIT=128, VARARG=129, NOINLINE=130, + CROSSINLINE=131, REIFIED=132, EXPECT=133, ACTUAL=134, RealLiteral=135, + FloatLiteral=136, DoubleLiteral=137, IntegerLiteral=138, HexLiteral=139, + BinLiteral=140, UnsignedLiteral=141, LongLiteral=142, BooleanLiteral=143, + NullLiteral=144, CharacterLiteral=145, Identifier=146, IdentifierOrSoftKey=147, + FieldIdentifier=148, QUOTE_OPEN=149, TRIPLE_QUOTE_OPEN=150, UNICODE_CLASS_LL=151, + UNICODE_CLASS_LM=152, UNICODE_CLASS_LO=153, UNICODE_CLASS_LT=154, UNICODE_CLASS_LU=155, + UNICODE_CLASS_ND=156, UNICODE_CLASS_NL=157, QUOTE_CLOSE=158, LineStrRef=159, + LineStrText=160, LineStrEscapedChar=161, LineStrExprStart=162, TRIPLE_QUOTE_CLOSE=163, + MultiLineStringQuote=164, MultiLineStrRef=165, MultiLineStrText=166, MultiLineStrExprStart=167, + Inside_Comment=168, Inside_WS=169, Inside_NL=170, ErrorCharacter=171; + public static final int + LineString=1, MultiLineString=2, Inside=3; + public static String[] channelNames = { + "DEFAULT_TOKEN_CHANNEL", "HIDDEN" + }; + + public static String[] modeNames = { + "DEFAULT_MODE", "LineString", "MultiLineString", "Inside" + }; + + private static String[] makeRuleNames() { + return new String[] { + "ShebangLine", "DelimitedComment", "LineComment", "WS", "NL", "Hidden", + "RESERVED", "DOT", "COMMA", "LPAREN", "RPAREN", "LSQUARE", "RSQUARE", + "LCURL", "RCURL", "MULT", "MOD", "DIV", "ADD", "SUB", "INCR", "DECR", + "CONJ", "DISJ", "EXCL_WS", "EXCL_NO_WS", "COLON", "SEMICOLON", "ASSIGNMENT", + "ADD_ASSIGNMENT", "SUB_ASSIGNMENT", "MULT_ASSIGNMENT", "DIV_ASSIGNMENT", + "MOD_ASSIGNMENT", "ARROW", "DOUBLE_ARROW", "RANGE", "COLONCOLON", "DOUBLE_SEMICOLON", + "HASH", "AT_NO_WS", "AT_POST_WS", "AT_PRE_WS", "AT_BOTH_WS", "QUEST_WS", + "QUEST_NO_WS", "LANGLE", "RANGLE", "LE", "GE", "EXCL_EQ", "EXCL_EQEQ", + "AS_SAFE", "EQEQ", "EQEQEQ", "SINGLE_QUOTE", "RETURN_AT", "CONTINUE_AT", + "BREAK_AT", "THIS_AT", "SUPER_AT", "FILE", "FIELD", "PROPERTY", "GET", + "SET", "RECEIVER", "PARAM", "SETPARAM", "DELEGATE", "PACKAGE", "IMPORT", + "CLASS", "INTERFACE", "FUN", "OBJECT", "VAL", "VAR", "TYPE_ALIAS", "CONSTRUCTOR", + "BY", "COMPANION", "INIT", "THIS", "SUPER", "TYPEOF", "WHERE", "IF", + "ELSE", "WHEN", "TRY", "CATCH", "FINALLY", "FOR", "DO", "WHILE", "THROW", + "RETURN", "CONTINUE", "BREAK", "AS", "IS", "IN", "NOT_IS", "NOT_IN", + "OUT", "DYNAMIC", "PUBLIC", "PRIVATE", "PROTECTED", "INTERNAL", "ENUM", + "SEALED", "ANNOTATION", "DATA", "INNER", "VALUE", "TAILREC", "OPERATOR", + "INLINE", "INFIX", "EXTERNAL", "SUSPEND", "OVERRIDE", "ABSTRACT", "FINAL", + "OPEN", "CONST", "LATEINIT", "VARARG", "NOINLINE", "CROSSINLINE", "REIFIED", + "EXPECT", "ACTUAL", "DecDigit", "DecDigitNoZero", "DecDigitOrSeparator", + "DecDigits", "DoubleExponent", "RealLiteral", "FloatLiteral", "DoubleLiteral", + "IntegerLiteral", "HexDigit", "HexDigitOrSeparator", "HexLiteral", "BinDigit", + "BinDigitOrSeparator", "BinLiteral", "UnsignedLiteral", "LongLiteral", + "BooleanLiteral", "NullLiteral", "CharacterLiteral", "UnicodeDigit", + "Identifier", "IdentifierOrSoftKey", "FieldIdentifier", "UniCharacterLiteral", + "EscapedIdentifier", "EscapeSeq", "Letter", "QUOTE_OPEN", "TRIPLE_QUOTE_OPEN", + "UNICODE_CLASS_LL", "UNICODE_CLASS_LM", "UNICODE_CLASS_LO", "UNICODE_CLASS_LT", + "UNICODE_CLASS_LU", "UNICODE_CLASS_ND", "UNICODE_CLASS_NL", "QUOTE_CLOSE", + "LineStrRef", "LineStrText", "LineStrEscapedChar", "LineStrExprStart", + "TRIPLE_QUOTE_CLOSE", "MultiLineStringQuote", "MultiLineStrRef", "MultiLineStrText", + "MultiLineStrExprStart", "Inside_RPAREN", "Inside_RSQUARE", "Inside_LPAREN", + "Inside_LSQUARE", "Inside_LCURL", "Inside_RCURL", "Inside_DOT", "Inside_COMMA", + "Inside_MULT", "Inside_MOD", "Inside_DIV", "Inside_ADD", "Inside_SUB", + "Inside_INCR", "Inside_DECR", "Inside_CONJ", "Inside_DISJ", "Inside_EXCL_WS", + "Inside_EXCL_NO_WS", "Inside_COLON", "Inside_SEMICOLON", "Inside_ASSIGNMENT", + "Inside_ADD_ASSIGNMENT", "Inside_SUB_ASSIGNMENT", "Inside_MULT_ASSIGNMENT", + "Inside_DIV_ASSIGNMENT", "Inside_MOD_ASSIGNMENT", "Inside_ARROW", "Inside_DOUBLE_ARROW", + "Inside_RANGE", "Inside_RESERVED", "Inside_COLONCOLON", "Inside_DOUBLE_SEMICOLON", + "Inside_HASH", "Inside_AT_NO_WS", "Inside_AT_POST_WS", "Inside_AT_PRE_WS", + "Inside_AT_BOTH_WS", "Inside_QUEST_WS", "Inside_QUEST_NO_WS", "Inside_LANGLE", + "Inside_RANGLE", "Inside_LE", "Inside_GE", "Inside_EXCL_EQ", "Inside_EXCL_EQEQ", + "Inside_IS", "Inside_NOT_IS", "Inside_NOT_IN", "Inside_AS", "Inside_AS_SAFE", + "Inside_EQEQ", "Inside_EQEQEQ", "Inside_SINGLE_QUOTE", "Inside_QUOTE_OPEN", + "Inside_TRIPLE_QUOTE_OPEN", "Inside_VAL", "Inside_VAR", "Inside_FUN", + "Inside_OBJECT", "Inside_SUPER", "Inside_IN", "Inside_OUT", "Inside_FIELD", + "Inside_FILE", "Inside_PROPERTY", "Inside_GET", "Inside_SET", "Inside_RECEIVER", + "Inside_PARAM", "Inside_SETPARAM", "Inside_DELEGATE", "Inside_THROW", + "Inside_RETURN", "Inside_CONTINUE", "Inside_BREAK", "Inside_RETURN_AT", + "Inside_CONTINUE_AT", "Inside_BREAK_AT", "Inside_IF", "Inside_ELSE", + "Inside_WHEN", "Inside_TRY", "Inside_CATCH", "Inside_FINALLY", "Inside_FOR", + "Inside_DO", "Inside_WHILE", "Inside_PUBLIC", "Inside_PRIVATE", "Inside_PROTECTED", + "Inside_INTERNAL", "Inside_ENUM", "Inside_SEALED", "Inside_ANNOTATION", + "Inside_DATA", "Inside_INNER", "Inside_VALUE", "Inside_TAILREC", "Inside_OPERATOR", + "Inside_INLINE", "Inside_INFIX", "Inside_EXTERNAL", "Inside_SUSPEND", + "Inside_OVERRIDE", "Inside_ABSTRACT", "Inside_FINAL", "Inside_OPEN", + "Inside_CONST", "Inside_LATEINIT", "Inside_VARARG", "Inside_NOINLINE", + "Inside_CROSSINLINE", "Inside_REIFIED", "Inside_EXPECT", "Inside_ACTUAL", + "Inside_BooleanLiteral", "Inside_IntegerLiteral", "Inside_HexLiteral", + "Inside_BinLiteral", "Inside_CharacterLiteral", "Inside_RealLiteral", + "Inside_NullLiteral", "Inside_LongLiteral", "Inside_UnsignedLiteral", + "Inside_Identifier", "Inside_Comment", "Inside_WS", "Inside_NL", "ErrorCharacter" + }; + } + public static final String[] ruleNames = makeRuleNames(); + + private static String[] makeLiteralNames() { + return new String[] { + null, null, null, null, null, null, "'...'", "'.'", "','", "'('", "')'", + "'['", "']'", "'{'", "'}'", "'*'", "'%'", "'/'", "'+'", "'-'", "'++'", + "'--'", "'&&'", "'||'", null, "'!'", "':'", "';'", "'='", "'+='", "'-='", + "'*='", "'/='", "'%='", "'->'", "'=>'", "'..'", "'::'", "';;'", "'#'", + "'@'", null, null, null, null, "'?'", "'<'", "'>'", "'<='", "'>='", "'!='", + "'!=='", "'as?'", "'=='", "'==='", "'''", null, null, null, null, null, + "'file'", "'field'", "'property'", "'get'", "'set'", "'receiver'", "'param'", + "'setparam'", "'delegate'", "'package'", "'import'", "'class'", "'interface'", + "'fun'", "'object'", "'val'", "'var'", "'typealias'", "'constructor'", + "'by'", "'companion'", "'init'", "'this'", "'super'", "'typeof'", "'where'", + "'if'", "'else'", "'when'", "'try'", "'catch'", "'finally'", "'for'", + "'do'", "'while'", "'throw'", "'return'", "'continue'", "'break'", "'as'", + "'is'", "'in'", null, null, "'out'", "'dynamic'", "'public'", "'private'", + "'protected'", "'internal'", "'enum'", "'sealed'", "'annotation'", "'data'", + "'inner'", "'value'", "'tailrec'", "'operator'", "'inline'", "'infix'", + "'external'", "'suspend'", "'override'", "'abstract'", "'final'", "'open'", + "'const'", "'lateinit'", "'vararg'", "'noinline'", "'crossinline'", "'reified'", + "'expect'", "'actual'", null, null, null, null, null, null, null, null, + null, "'null'", null, null, null, null, null, "'\"\"\"'" + }; + } + private static final String[] _LITERAL_NAMES = makeLiteralNames(); + private static String[] makeSymbolicNames() { + return new String[] { + null, "ShebangLine", "DelimitedComment", "LineComment", "WS", "NL", "RESERVED", + "DOT", "COMMA", "LPAREN", "RPAREN", "LSQUARE", "RSQUARE", "LCURL", "RCURL", + "MULT", "MOD", "DIV", "ADD", "SUB", "INCR", "DECR", "CONJ", "DISJ", "EXCL_WS", + "EXCL_NO_WS", "COLON", "SEMICOLON", "ASSIGNMENT", "ADD_ASSIGNMENT", "SUB_ASSIGNMENT", + "MULT_ASSIGNMENT", "DIV_ASSIGNMENT", "MOD_ASSIGNMENT", "ARROW", "DOUBLE_ARROW", + "RANGE", "COLONCOLON", "DOUBLE_SEMICOLON", "HASH", "AT_NO_WS", "AT_POST_WS", + "AT_PRE_WS", "AT_BOTH_WS", "QUEST_WS", "QUEST_NO_WS", "LANGLE", "RANGLE", + "LE", "GE", "EXCL_EQ", "EXCL_EQEQ", "AS_SAFE", "EQEQ", "EQEQEQ", "SINGLE_QUOTE", + "RETURN_AT", "CONTINUE_AT", "BREAK_AT", "THIS_AT", "SUPER_AT", "FILE", + "FIELD", "PROPERTY", "GET", "SET", "RECEIVER", "PARAM", "SETPARAM", "DELEGATE", + "PACKAGE", "IMPORT", "CLASS", "INTERFACE", "FUN", "OBJECT", "VAL", "VAR", + "TYPE_ALIAS", "CONSTRUCTOR", "BY", "COMPANION", "INIT", "THIS", "SUPER", + "TYPEOF", "WHERE", "IF", "ELSE", "WHEN", "TRY", "CATCH", "FINALLY", "FOR", + "DO", "WHILE", "THROW", "RETURN", "CONTINUE", "BREAK", "AS", "IS", "IN", + "NOT_IS", "NOT_IN", "OUT", "DYNAMIC", "PUBLIC", "PRIVATE", "PROTECTED", + "INTERNAL", "ENUM", "SEALED", "ANNOTATION", "DATA", "INNER", "VALUE", + "TAILREC", "OPERATOR", "INLINE", "INFIX", "EXTERNAL", "SUSPEND", "OVERRIDE", + "ABSTRACT", "FINAL", "OPEN", "CONST", "LATEINIT", "VARARG", "NOINLINE", + "CROSSINLINE", "REIFIED", "EXPECT", "ACTUAL", "RealLiteral", "FloatLiteral", + "DoubleLiteral", "IntegerLiteral", "HexLiteral", "BinLiteral", "UnsignedLiteral", + "LongLiteral", "BooleanLiteral", "NullLiteral", "CharacterLiteral", "Identifier", + "IdentifierOrSoftKey", "FieldIdentifier", "QUOTE_OPEN", "TRIPLE_QUOTE_OPEN", + "UNICODE_CLASS_LL", "UNICODE_CLASS_LM", "UNICODE_CLASS_LO", "UNICODE_CLASS_LT", + "UNICODE_CLASS_LU", "UNICODE_CLASS_ND", "UNICODE_CLASS_NL", "QUOTE_CLOSE", + "LineStrRef", "LineStrText", "LineStrEscapedChar", "LineStrExprStart", + "TRIPLE_QUOTE_CLOSE", "MultiLineStringQuote", "MultiLineStrRef", "MultiLineStrText", + "MultiLineStrExprStart", "Inside_Comment", "Inside_WS", "Inside_NL", + "ErrorCharacter" + }; + } + private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); + public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); + + /** + * @deprecated Use {@link #VOCABULARY} instead. + */ + @Deprecated + public static final String[] tokenNames; + static { + tokenNames = new String[_SYMBOLIC_NAMES.length]; + for (int i = 0; i < tokenNames.length; i++) { + tokenNames[i] = VOCABULARY.getLiteralName(i); + if (tokenNames[i] == null) { + tokenNames[i] = VOCABULARY.getSymbolicName(i); + } + + if (tokenNames[i] == null) { + tokenNames[i] = ""; + } + } + } + + @Override + @Deprecated + public String[] getTokenNames() { + return tokenNames; + } + + @Override + + public Vocabulary getVocabulary() { + return VOCABULARY; + } + + + public KotlinLexer(CharStream input) { + super(input); + _interp = new LexerATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache); + } + + @Override + public String getGrammarFileName() { return "KotlinLexer.g4"; } + + @Override + public String[] getRuleNames() { return ruleNames; } + + @Override + public String getSerializedATN() { return _serializedATN; } + + @Override + public String[] getChannelNames() { return channelNames; } + + @Override + public String[] getModeNames() { return modeNames; } + + @Override + public ATN getATN() { return _ATN; } + + @Override + public void action(RuleContext _localctx, int ruleIndex, int actionIndex) { + switch (ruleIndex) { + case 14: + RCURL_action((RuleContext)_localctx, actionIndex); + break; + } + } + private void RCURL_action(RuleContext _localctx, int actionIndex) { + switch (actionIndex) { + case 0: + if (!_modeStack.isEmpty()) { popMode(); } + break; + } + } + + private static final int _serializedATNSegments = 2; + private static final String _serializedATNSegment0 = + "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\u00ad\u08b6\b\1\b"+ + "\1\b\1\b\1\4\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t"+ + "\t\t\4\n\t\n\4\13\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4"+ + "\21\t\21\4\22\t\22\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4"+ + "\30\t\30\4\31\t\31\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36\4"+ + "\37\t\37\4 \t \4!\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t&\4\'\t\'\4(\t(\4)"+ + "\t)\4*\t*\4+\t+\4,\t,\4-\t-\4.\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62"+ + "\4\63\t\63\4\64\t\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:\4"+ + ";\t;\4<\t<\4=\t=\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\tC\4D\tD\4E\tE\4F\t"+ + "F\4G\tG\4H\tH\4I\tI\4J\tJ\4K\tK\4L\tL\4M\tM\4N\tN\4O\tO\4P\tP\4Q\tQ\4"+ + "R\tR\4S\tS\4T\tT\4U\tU\4V\tV\4W\tW\4X\tX\4Y\tY\4Z\tZ\4[\t[\4\\\t\\\4]"+ + "\t]\4^\t^\4_\t_\4`\t`\4a\ta\4b\tb\4c\tc\4d\td\4e\te\4f\tf\4g\tg\4h\th"+ + "\4i\ti\4j\tj\4k\tk\4l\tl\4m\tm\4n\tn\4o\to\4p\tp\4q\tq\4r\tr\4s\ts\4t"+ + "\tt\4u\tu\4v\tv\4w\tw\4x\tx\4y\ty\4z\tz\4{\t{\4|\t|\4}\t}\4~\t~\4\177"+ + "\t\177\4\u0080\t\u0080\4\u0081\t\u0081\4\u0082\t\u0082\4\u0083\t\u0083"+ + "\4\u0084\t\u0084\4\u0085\t\u0085\4\u0086\t\u0086\4\u0087\t\u0087\4\u0088"+ + "\t\u0088\4\u0089\t\u0089\4\u008a\t\u008a\4\u008b\t\u008b\4\u008c\t\u008c"+ + "\4\u008d\t\u008d\4\u008e\t\u008e\4\u008f\t\u008f\4\u0090\t\u0090\4\u0091"+ + "\t\u0091\4\u0092\t\u0092\4\u0093\t\u0093\4\u0094\t\u0094\4\u0095\t\u0095"+ + "\4\u0096\t\u0096\4\u0097\t\u0097\4\u0098\t\u0098\4\u0099\t\u0099\4\u009a"+ + "\t\u009a\4\u009b\t\u009b\4\u009c\t\u009c\4\u009d\t\u009d\4\u009e\t\u009e"+ + "\4\u009f\t\u009f\4\u00a0\t\u00a0\4\u00a1\t\u00a1\4\u00a2\t\u00a2\4\u00a3"+ + "\t\u00a3\4\u00a4\t\u00a4\4\u00a5\t\u00a5\4\u00a6\t\u00a6\4\u00a7\t\u00a7"+ + "\4\u00a8\t\u00a8\4\u00a9\t\u00a9\4\u00aa\t\u00aa\4\u00ab\t\u00ab\4\u00ac"+ + "\t\u00ac\4\u00ad\t\u00ad\4\u00ae\t\u00ae\4\u00af\t\u00af\4\u00b0\t\u00b0"+ + "\4\u00b1\t\u00b1\4\u00b2\t\u00b2\4\u00b3\t\u00b3\4\u00b4\t\u00b4\4\u00b5"+ + "\t\u00b5\4\u00b6\t\u00b6\4\u00b7\t\u00b7\4\u00b8\t\u00b8\4\u00b9\t\u00b9"+ + "\4\u00ba\t\u00ba\4\u00bb\t\u00bb\4\u00bc\t\u00bc\4\u00bd\t\u00bd\4\u00be"+ + "\t\u00be\4\u00bf\t\u00bf\4\u00c0\t\u00c0\4\u00c1\t\u00c1\4\u00c2\t\u00c2"+ + "\4\u00c3\t\u00c3\4\u00c4\t\u00c4\4\u00c5\t\u00c5\4\u00c6\t\u00c6\4\u00c7"+ + "\t\u00c7\4\u00c8\t\u00c8\4\u00c9\t\u00c9\4\u00ca\t\u00ca\4\u00cb\t\u00cb"+ + "\4\u00cc\t\u00cc\4\u00cd\t\u00cd\4\u00ce\t\u00ce\4\u00cf\t\u00cf\4\u00d0"+ + "\t\u00d0\4\u00d1\t\u00d1\4\u00d2\t\u00d2\4\u00d3\t\u00d3\4\u00d4\t\u00d4"+ + "\4\u00d5\t\u00d5\4\u00d6\t\u00d6\4\u00d7\t\u00d7\4\u00d8\t\u00d8\4\u00d9"+ + "\t\u00d9\4\u00da\t\u00da\4\u00db\t\u00db\4\u00dc\t\u00dc\4\u00dd\t\u00dd"+ + "\4\u00de\t\u00de\4\u00df\t\u00df\4\u00e0\t\u00e0\4\u00e1\t\u00e1\4\u00e2"+ + "\t\u00e2\4\u00e3\t\u00e3\4\u00e4\t\u00e4\4\u00e5\t\u00e5\4\u00e6\t\u00e6"+ + "\4\u00e7\t\u00e7\4\u00e8\t\u00e8\4\u00e9\t\u00e9\4\u00ea\t\u00ea\4\u00eb"+ + "\t\u00eb\4\u00ec\t\u00ec\4\u00ed\t\u00ed\4\u00ee\t\u00ee\4\u00ef\t\u00ef"+ + "\4\u00f0\t\u00f0\4\u00f1\t\u00f1\4\u00f2\t\u00f2\4\u00f3\t\u00f3\4\u00f4"+ + "\t\u00f4\4\u00f5\t\u00f5\4\u00f6\t\u00f6\4\u00f7\t\u00f7\4\u00f8\t\u00f8"+ + "\4\u00f9\t\u00f9\4\u00fa\t\u00fa\4\u00fb\t\u00fb\4\u00fc\t\u00fc\4\u00fd"+ + "\t\u00fd\4\u00fe\t\u00fe\4\u00ff\t\u00ff\4\u0100\t\u0100\4\u0101\t\u0101"+ + "\4\u0102\t\u0102\4\u0103\t\u0103\4\u0104\t\u0104\4\u0105\t\u0105\4\u0106"+ + "\t\u0106\4\u0107\t\u0107\4\u0108\t\u0108\4\u0109\t\u0109\4\u010a\t\u010a"+ + "\4\u010b\t\u010b\4\u010c\t\u010c\4\u010d\t\u010d\4\u010e\t\u010e\4\u010f"+ + "\t\u010f\4\u0110\t\u0110\4\u0111\t\u0111\4\u0112\t\u0112\4\u0113\t\u0113"+ + "\4\u0114\t\u0114\4\u0115\t\u0115\4\u0116\t\u0116\4\u0117\t\u0117\4\u0118"+ + "\t\u0118\4\u0119\t\u0119\4\u011a\t\u011a\4\u011b\t\u011b\4\u011c\t\u011c"+ + "\4\u011d\t\u011d\4\u011e\t\u011e\4\u011f\t\u011f\4\u0120\t\u0120\4\u0121"+ + "\t\u0121\4\u0122\t\u0122\4\u0123\t\u0123\4\u0124\t\u0124\4\u0125\t\u0125"+ + "\4\u0126\t\u0126\4\u0127\t\u0127\4\u0128\t\u0128\4\u0129\t\u0129\4\u012a"+ + "\t\u012a\4\u012b\t\u012b\4\u012c\t\u012c\4\u012d\t\u012d\4\u012e\t\u012e"+ + "\4\u012f\t\u012f\4\u0130\t\u0130\4\u0131\t\u0131\4\u0132\t\u0132\4\u0133"+ + "\t\u0133\4\u0134\t\u0134\4\u0135\t\u0135\4\u0136\t\u0136\4\u0137\t\u0137"+ + "\4\u0138\t\u0138\4\u0139\t\u0139\3\2\3\2\3\2\3\2\7\2\u027b\n\2\f\2\16"+ + "\2\u027e\13\2\3\3\3\3\3\3\3\3\3\3\7\3\u0285\n\3\f\3\16\3\u0288\13\3\3"+ + "\3\3\3\3\3\3\3\3\3\3\4\3\4\3\4\3\4\7\4\u0293\n\4\f\4\16\4\u0296\13\4\3"+ + "\4\3\4\3\5\3\5\3\5\3\5\3\6\3\6\3\6\5\6\u02a1\n\6\5\6\u02a3\n\6\3\7\3\7"+ + "\3\7\5\7\u02a8\n\7\3\b\3\b\3\b\3\b\3\t\3\t\3\n\3\n\3\13\3\13\3\13\3\13"+ + "\3\f\3\f\3\r\3\r\3\r\3\r\3\16\3\16\3\17\3\17\3\17\3\17\3\20\3\20\3\20"+ + "\3\21\3\21\3\22\3\22\3\23\3\23\3\24\3\24\3\25\3\25\3\26\3\26\3\26\3\27"+ + "\3\27\3\27\3\30\3\30\3\30\3\31\3\31\3\31\3\32\3\32\3\32\3\33\3\33\3\34"+ + "\3\34\3\35\3\35\3\36\3\36\3\37\3\37\3\37\3 \3 \3 \3!\3!\3!\3\"\3\"\3\""+ + "\3#\3#\3#\3$\3$\3$\3%\3%\3%\3&\3&\3&\3\'\3\'\3\'\3(\3(\3(\3)\3)\3*\3*"+ + "\3+\3+\3+\5+\u030b\n+\3,\3,\5,\u030f\n,\3,\3,\3-\3-\5-\u0315\n-\3-\3-"+ + "\3-\5-\u031a\n-\3.\3.\3.\3/\3/\3\60\3\60\3\61\3\61\3\62\3\62\3\62\3\63"+ + "\3\63\3\63\3\64\3\64\3\64\3\65\3\65\3\65\3\65\3\66\3\66\3\66\3\66\3\67"+ + "\3\67\3\67\38\38\38\38\39\39\3:\3:\3:\3:\3:\3:\3:\3:\3:\3:\3;\3;\3;\3"+ + ";\3;\3;\3;\3;\3;\3;\3;\3;\3<\3<\3<\3<\3<\3<\3<\3<\3<\3=\3=\3=\3=\3=\3"+ + "=\3=\3=\3>\3>\3>\3>\3>\3>\3>\3>\3>\3?\3?\3?\3?\3?\3@\3@\3@\3@\3@\3@\3"+ + "A\3A\3A\3A\3A\3A\3A\3A\3A\3B\3B\3B\3B\3C\3C\3C\3C\3D\3D\3D\3D\3D\3D\3"+ + "D\3D\3D\3E\3E\3E\3E\3E\3E\3F\3F\3F\3F\3F\3F\3F\3F\3F\3G\3G\3G\3G\3G\3"+ + "G\3G\3G\3G\3H\3H\3H\3H\3H\3H\3H\3H\3I\3I\3I\3I\3I\3I\3I\3J\3J\3J\3J\3"+ + "J\3J\3K\3K\3K\3K\3K\3K\3K\3K\3K\3K\3L\3L\3L\3L\3M\3M\3M\3M\3M\3M\3M\3"+ + "N\3N\3N\3N\3O\3O\3O\3O\3P\3P\3P\3P\3P\3P\3P\3P\3P\3P\3Q\3Q\3Q\3Q\3Q\3"+ + "Q\3Q\3Q\3Q\3Q\3Q\3Q\3R\3R\3R\3S\3S\3S\3S\3S\3S\3S\3S\3S\3S\3T\3T\3T\3"+ + "T\3T\3U\3U\3U\3U\3U\3V\3V\3V\3V\3V\3V\3W\3W\3W\3W\3W\3W\3W\3X\3X\3X\3"+ + "X\3X\3X\3Y\3Y\3Y\3Z\3Z\3Z\3Z\3Z\3[\3[\3[\3[\3[\3\\\3\\\3\\\3\\\3]\3]\3"+ + "]\3]\3]\3]\3^\3^\3^\3^\3^\3^\3^\3^\3_\3_\3_\3_\3`\3`\3`\3a\3a\3a\3a\3"+ + "a\3a\3b\3b\3b\3b\3b\3b\3c\3c\3c\3c\3c\3c\3c\3d\3d\3d\3d\3d\3d\3d\3d\3"+ + "d\3e\3e\3e\3e\3e\3e\3f\3f\3f\3g\3g\3g\3h\3h\3h\3i\3i\3i\3i\3i\3i\5i\u0475"+ + "\ni\3j\3j\3j\3j\3j\3j\5j\u047d\nj\3k\3k\3k\3k\3l\3l\3l\3l\3l\3l\3l\3l"+ + "\3m\3m\3m\3m\3m\3m\3m\3n\3n\3n\3n\3n\3n\3n\3n\3o\3o\3o\3o\3o\3o\3o\3o"+ + "\3o\3o\3p\3p\3p\3p\3p\3p\3p\3p\3p\3q\3q\3q\3q\3q\3r\3r\3r\3r\3r\3r\3r"+ + "\3s\3s\3s\3s\3s\3s\3s\3s\3s\3s\3s\3t\3t\3t\3t\3t\3u\3u\3u\3u\3u\3u\3v"+ + "\3v\3v\3v\3v\3v\3w\3w\3w\3w\3w\3w\3w\3w\3x\3x\3x\3x\3x\3x\3x\3x\3x\3y"+ + "\3y\3y\3y\3y\3y\3y\3z\3z\3z\3z\3z\3z\3{\3{\3{\3{\3{\3{\3{\3{\3{\3|\3|"+ + "\3|\3|\3|\3|\3|\3|\3}\3}\3}\3}\3}\3}\3}\3}\3}\3~\3~\3~\3~\3~\3~\3~\3~"+ + "\3~\3\177\3\177\3\177\3\177\3\177\3\177\3\u0080\3\u0080\3\u0080\3\u0080"+ + "\3\u0080\3\u0081\3\u0081\3\u0081\3\u0081\3\u0081\3\u0081\3\u0082\3\u0082"+ + "\3\u0082\3\u0082\3\u0082\3\u0082\3\u0082\3\u0082\3\u0082\3\u0083\3\u0083"+ + "\3\u0083\3\u0083\3\u0083\3\u0083\3\u0083\3\u0084\3\u0084\3\u0084\3\u0084"+ + "\3\u0084\3\u0084\3\u0084\3\u0084\3\u0084\3\u0085\3\u0085\3\u0085\3\u0085"+ + "\3\u0085\3\u0085\3\u0085\3\u0085\3\u0085\3\u0085\3\u0085\3\u0085\3\u0086"+ + "\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086\3\u0087\3\u0087"+ + "\3\u0087\3\u0087\3\u0087\3\u0087\3\u0087\3\u0088\3\u0088\3\u0088\3\u0088"+ + "\3\u0088\3\u0088\3\u0088\3\u0089\3\u0089\3\u008a\3\u008a\3\u008b\3\u008b"+ + "\5\u008b\u0568\n\u008b\3\u008c\3\u008c\7\u008c\u056c\n\u008c\f\u008c\16"+ + "\u008c\u056f\13\u008c\3\u008c\3\u008c\3\u008c\5\u008c\u0574\n\u008c\3"+ + "\u008d\3\u008d\5\u008d\u0578\n\u008d\3\u008d\3\u008d\3\u008e\3\u008e\5"+ + "\u008e\u057e\n\u008e\3\u008f\3\u008f\3\u008f\3\u008f\3\u008f\3\u008f\5"+ + "\u008f\u0586\n\u008f\3\u0090\5\u0090\u0589\n\u0090\3\u0090\3\u0090\3\u0090"+ + "\5\u0090\u058e\n\u0090\3\u0090\3\u0090\3\u0090\5\u0090\u0593\n\u0090\3"+ + "\u0091\3\u0091\7\u0091\u0597\n\u0091\f\u0091\16\u0091\u059a\13\u0091\3"+ + "\u0091\3\u0091\3\u0091\5\u0091\u059f\n\u0091\3\u0092\3\u0092\3\u0093\3"+ + "\u0093\5\u0093\u05a5\n\u0093\3\u0094\3\u0094\3\u0094\3\u0094\7\u0094\u05ab"+ + "\n\u0094\f\u0094\16\u0094\u05ae\13\u0094\3\u0094\3\u0094\3\u0094\3\u0094"+ + "\3\u0094\5\u0094\u05b5\n\u0094\3\u0095\3\u0095\3\u0096\3\u0096\5\u0096"+ + "\u05bb\n\u0096\3\u0097\3\u0097\3\u0097\3\u0097\7\u0097\u05c1\n\u0097\f"+ + "\u0097\16\u0097\u05c4\13\u0097\3\u0097\3\u0097\3\u0097\3\u0097\3\u0097"+ + "\5\u0097\u05cb\n\u0097\3\u0098\3\u0098\3\u0098\5\u0098\u05d0\n\u0098\3"+ + "\u0098\3\u0098\5\u0098\u05d4\n\u0098\3\u0099\3\u0099\3\u0099\5\u0099\u05d9"+ + "\n\u0099\3\u0099\3\u0099\3\u009a\3\u009a\3\u009a\3\u009a\3\u009a\3\u009a"+ + "\3\u009a\3\u009a\3\u009a\5\u009a\u05e6\n\u009a\3\u009b\3\u009b\3\u009b"+ + "\3\u009b\3\u009b\3\u009c\3\u009c\3\u009c\5\u009c\u05f0\n\u009c\3\u009c"+ + "\3\u009c\3\u009d\3\u009d\3\u009e\3\u009e\5\u009e\u05f8\n\u009e\3\u009e"+ + "\3\u009e\3\u009e\7\u009e\u05fd\n\u009e\f\u009e\16\u009e\u0600\13\u009e"+ + "\3\u009e\3\u009e\6\u009e\u0604\n\u009e\r\u009e\16\u009e\u0605\3\u009e"+ + "\5\u009e\u0609\n\u009e\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f"+ + "\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f"+ + "\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f"+ + "\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f"+ + "\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f"+ + "\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f\3\u009f\5\u009f\u063b\n\u009f"+ + "\3\u00a0\3\u00a0\3\u00a0\3\u00a1\3\u00a1\3\u00a1\3\u00a1\3\u00a1\3\u00a1"+ + "\3\u00a1\3\u00a2\3\u00a2\3\u00a2\3\u00a3\3\u00a3\5\u00a3\u064c\n\u00a3"+ + "\3\u00a4\3\u00a4\3\u00a4\3\u00a4\3\u00a4\5\u00a4\u0653\n\u00a4\3\u00a5"+ + "\3\u00a5\3\u00a5\3\u00a5\3\u00a6\3\u00a6\3\u00a6\3\u00a6\3\u00a6\3\u00a6"+ + "\3\u00a7\3\u00a7\3\u00a8\3\u00a8\3\u00a9\3\u00a9\3\u00aa\3\u00aa\3\u00ab"+ + "\3\u00ab\3\u00ac\3\u00ac\3\u00ad\3\u00ad\3\u00ae\3\u00ae\3\u00ae\3\u00ae"+ + "\3\u00af\3\u00af\3\u00b0\6\u00b0\u0674\n\u00b0\r\u00b0\16\u00b0\u0675"+ + "\3\u00b0\5\u00b0\u0679\n\u00b0\3\u00b1\3\u00b1\5\u00b1\u067d\n\u00b1\3"+ + "\u00b2\3\u00b2\3\u00b2\3\u00b2\3\u00b2\3\u00b3\5\u00b3\u0685\n\u00b3\3"+ + "\u00b3\3\u00b3\3\u00b3\3\u00b3\3\u00b3\3\u00b3\3\u00b4\6\u00b4\u068e\n"+ + "\u00b4\r\u00b4\16\u00b4\u068f\3\u00b5\3\u00b5\3\u00b6\6\u00b6\u0695\n"+ + "\u00b6\r\u00b6\16\u00b6\u0696\3\u00b6\5\u00b6\u069a\n\u00b6\3\u00b7\3"+ + "\u00b7\3\u00b7\3\u00b7\3\u00b7\3\u00b8\3\u00b8\3\u00b8\3\u00b8\3\u00b8"+ + "\3\u00b9\3\u00b9\3\u00b9\3\u00b9\3\u00b9\3\u00ba\3\u00ba\3\u00ba\3\u00ba"+ + "\3\u00ba\3\u00bb\3\u00bb\3\u00bb\3\u00bb\3\u00bb\3\u00bc\3\u00bc\3\u00bc"+ + "\3\u00bc\3\u00bc\3\u00bd\3\u00bd\3\u00bd\3\u00bd\3\u00bd\3\u00be\3\u00be"+ + "\3\u00be\3\u00be\3\u00bf\3\u00bf\3\u00bf\3\u00bf\3\u00c0\3\u00c0\3\u00c0"+ + "\3\u00c0\3\u00c1\3\u00c1\3\u00c1\3\u00c1\3\u00c2\3\u00c2\3\u00c2\3\u00c2"+ + "\3\u00c3\3\u00c3\3\u00c3\3\u00c3\3\u00c4\3\u00c4\3\u00c4\3\u00c4\3\u00c5"+ + "\3\u00c5\3\u00c5\3\u00c5\3\u00c6\3\u00c6\3\u00c6\3\u00c6\3\u00c7\3\u00c7"+ + "\3\u00c7\3\u00c7\3\u00c8\3\u00c8\3\u00c8\3\u00c8\3\u00c9\3\u00c9\3\u00c9"+ + "\5\u00c9\u06ee\n\u00c9\3\u00c9\3\u00c9\3\u00ca\3\u00ca\3\u00ca\3\u00ca"+ + "\3\u00cb\3\u00cb\3\u00cb\3\u00cb\3\u00cc\3\u00cc\3\u00cc\3\u00cc\3\u00cd"+ + "\3\u00cd\3\u00cd\3\u00cd\3\u00ce\3\u00ce\3\u00ce\3\u00ce\3\u00cf\3\u00cf"+ + "\3\u00cf\3\u00cf\3\u00d0\3\u00d0\3\u00d0\3\u00d0\3\u00d1\3\u00d1\3\u00d1"+ + "\3\u00d1\3\u00d2\3\u00d2\3\u00d2\3\u00d2\3\u00d3\3\u00d3\3\u00d3\3\u00d3"+ + "\3\u00d4\3\u00d4\3\u00d4\3\u00d4\3\u00d5\3\u00d5\3\u00d5\3\u00d5\3\u00d6"+ + "\3\u00d6\3\u00d6\3\u00d6\3\u00d7\3\u00d7\3\u00d7\3\u00d7\3\u00d8\3\u00d8"+ + "\3\u00d8\3\u00d8\3\u00d9\3\u00d9\3\u00d9\3\u00d9\3\u00da\3\u00da\3\u00da"+ + "\3\u00da\3\u00db\3\u00db\3\u00db\3\u00db\3\u00dc\3\u00dc\3\u00dc\3\u00dc"+ + "\3\u00dd\3\u00dd\3\u00dd\3\u00dd\3\u00de\3\u00de\3\u00de\5\u00de\u0745"+ + "\n\u00de\3\u00de\3\u00de\3\u00df\3\u00df\3\u00df\3\u00df\3\u00e0\3\u00e0"+ + "\3\u00e0\3\u00e0\3\u00e1\3\u00e1\3\u00e1\3\u00e1\3\u00e2\3\u00e2\3\u00e2"+ + "\3\u00e2\3\u00e3\3\u00e3\3\u00e3\3\u00e3\3\u00e4\3\u00e4\3\u00e4\3\u00e4"+ + "\3\u00e5\3\u00e5\3\u00e5\3\u00e5\3\u00e6\3\u00e6\3\u00e6\3\u00e6\3\u00e7"+ + "\3\u00e7\3\u00e7\3\u00e7\3\u00e8\3\u00e8\3\u00e8\3\u00e8\3\u00e9\3\u00e9"+ + "\3\u00e9\3\u00e9\3\u00ea\3\u00ea\3\u00ea\3\u00ea\3\u00eb\3\u00eb\3\u00eb"+ + "\3\u00eb\3\u00ec\3\u00ec\3\u00ec\3\u00ec\3\u00ed\3\u00ed\3\u00ed\3\u00ed"+ + "\3\u00ee\3\u00ee\3\u00ee\3\u00ee\3\u00ee\3\u00ef\3\u00ef\3\u00ef\3\u00ef"+ + "\3\u00ef\3\u00f0\3\u00f0\3\u00f0\3\u00f0\3\u00f1\3\u00f1\3\u00f1\3\u00f1"+ + "\3\u00f2\3\u00f2\3\u00f2\3\u00f2\3\u00f3\3\u00f3\3\u00f3\3\u00f3\3\u00f4"+ + "\3\u00f4\3\u00f4\3\u00f4\3\u00f5\3\u00f5\3\u00f5\3\u00f5\3\u00f6\3\u00f6"+ + "\3\u00f6\3\u00f6\3\u00f7\3\u00f7\3\u00f7\3\u00f7\3\u00f8\3\u00f8\3\u00f8"+ + "\3\u00f8\3\u00f9\3\u00f9\3\u00f9\3\u00f9\3\u00fa\3\u00fa\3\u00fa\3\u00fa"+ + "\3\u00fb\3\u00fb\3\u00fb\3\u00fb\3\u00fc\3\u00fc\3\u00fc\3\u00fc\3\u00fd"+ + "\3\u00fd\3\u00fd\3\u00fd\3\u00fe\3\u00fe\3\u00fe\3\u00fe\3\u00ff\3\u00ff"+ + "\3\u00ff\3\u00ff\3\u0100\3\u0100\3\u0100\3\u0100\3\u0101\3\u0101\3\u0101"+ + "\3\u0101\3\u0102\3\u0102\3\u0102\3\u0102\3\u0103\3\u0103\3\u0103\3\u0103"+ + "\3\u0104\3\u0104\3\u0104\3\u0104\3\u0105\3\u0105\3\u0105\3\u0105\3\u0106"+ + "\3\u0106\3\u0106\3\u0106\3\u0107\3\u0107\3\u0107\3\u0107\3\u0108\3\u0108"+ + "\3\u0108\3\u0108\3\u0109\3\u0109\3\u0109\3\u0109\3\u010a\3\u010a\3\u010a"+ + "\3\u010a\3\u010b\3\u010b\3\u010b\3\u010b\3\u010c\3\u010c\3\u010c\3\u010c"+ + "\3\u010d\3\u010d\3\u010d\3\u010d\3\u010e\3\u010e\3\u010e\3\u010e\3\u010f"+ + "\3\u010f\3\u010f\3\u010f\3\u0110\3\u0110\3\u0110\3\u0110\3\u0111\3\u0111"+ + "\3\u0111\3\u0111\3\u0112\3\u0112\3\u0112\3\u0112\3\u0113\3\u0113\3\u0113"+ + "\3\u0113\3\u0114\3\u0114\3\u0114\3\u0114\3\u0115\3\u0115\3\u0115\3\u0115"+ + "\3\u0116\3\u0116\3\u0116\3\u0116\3\u0117\3\u0117\3\u0117\3\u0117\3\u0118"+ + "\3\u0118\3\u0118\3\u0118\3\u0119\3\u0119\3\u0119\3\u0119\3\u011a\3\u011a"+ + "\3\u011a\3\u011a\3\u011b\3\u011b\3\u011b\3\u011b\3\u011c\3\u011c\3\u011c"+ + "\3\u011c\3\u011d\3\u011d\3\u011d\3\u011d\3\u011e\3\u011e\3\u011e\3\u011e"+ + "\3\u011f\3\u011f\3\u011f\3\u011f\3\u0120\3\u0120\3\u0120\3\u0120\3\u0121"+ + "\3\u0121\3\u0121\3\u0121\3\u0122\3\u0122\3\u0122\3\u0122\3\u0123\3\u0123"+ + "\3\u0123\3\u0123\3\u0124\3\u0124\3\u0124\3\u0124\3\u0125\3\u0125\3\u0125"+ + "\3\u0125\3\u0126\3\u0126\3\u0126\3\u0126\3\u0127\3\u0127\3\u0127\3\u0127"+ + "\3\u0128\3\u0128\3\u0128\3\u0128\3\u0129\3\u0129\3\u0129\3\u0129\3\u012a"+ + "\3\u012a\3\u012a\3\u012a\3\u012b\3\u012b\3\u012b\3\u012b\3\u012c\3\u012c"+ + "\3\u012c\3\u012c\3\u012d\3\u012d\3\u012d\3\u012d\3\u012e\3\u012e\3\u012e"+ + "\3\u012e\3\u012f\3\u012f\3\u012f\3\u012f\3\u0130\3\u0130\3\u0130\3\u0130"+ + "\3\u0131\3\u0131\3\u0131\3\u0131\3\u0132\3\u0132\3\u0132\3\u0132\3\u0133"+ + "\3\u0133\3\u0133\3\u0133\3\u0134\3\u0134\3\u0134\3\u0134\3\u0135\3\u0135"+ + "\3\u0135\3\u0135\3\u0136\3\u0136\5\u0136\u08a9\n\u0136\3\u0136\3\u0136"+ + "\3\u0137\3\u0137\3\u0137\3\u0137\3\u0138\3\u0138\3\u0138\3\u0138\3\u0139"+ + "\3\u0139\3\u0286\2\u013a\6\3\b\4\n\5\f\6\16\7\20\2\22\b\24\t\26\n\30\13"+ + "\32\f\34\r\36\16 \17\"\20$\21&\22(\23*\24,\25.\26\60\27\62\30\64\31\66"+ + "\328\33:\34<\35>\36@\37B D!F\"H#J$L%N&P\'R(T)V*X+Z,\\-^.`/b\60d\61f\62"+ + "h\63j\64l\65n\66p\67r8t9v:x;z<|=~>\u0080?\u0082@\u0084A\u0086B\u0088C"+ + "\u008aD\u008cE\u008eF\u0090G\u0092H\u0094I\u0096J\u0098K\u009aL\u009c"+ + "M\u009eN\u00a0O\u00a2P\u00a4Q\u00a6R\u00a8S\u00aaT\u00acU\u00aeV\u00b0"+ + "W\u00b2X\u00b4Y\u00b6Z\u00b8[\u00ba\\\u00bc]\u00be^\u00c0_\u00c2`\u00c4"+ + "a\u00c6b\u00c8c\u00cad\u00cce\u00cef\u00d0g\u00d2h\u00d4i\u00d6j\u00d8"+ + "k\u00dal\u00dcm\u00den\u00e0o\u00e2p\u00e4q\u00e6r\u00e8s\u00eat\u00ec"+ + "u\u00eev\u00f0w\u00f2x\u00f4y\u00f6z\u00f8{\u00fa|\u00fc}\u00fe~\u0100"+ + "\177\u0102\u0080\u0104\u0081\u0106\u0082\u0108\u0083\u010a\u0084\u010c"+ + "\u0085\u010e\u0086\u0110\u0087\u0112\u0088\u0114\2\u0116\2\u0118\2\u011a"+ + "\2\u011c\2\u011e\u0089\u0120\u008a\u0122\u008b\u0124\u008c\u0126\2\u0128"+ + "\2\u012a\u008d\u012c\2\u012e\2\u0130\u008e\u0132\u008f\u0134\u0090\u0136"+ + "\u0091\u0138\u0092\u013a\u0093\u013c\2\u013e\u0094\u0140\u0095\u0142\u0096"+ + "\u0144\2\u0146\2\u0148\2\u014a\2\u014c\u0097\u014e\u0098\u0150\u0099\u0152"+ + "\u009a\u0154\u009b\u0156\u009c\u0158\u009d\u015a\u009e\u015c\u009f\u015e"+ + "\u00a0\u0160\u00a1\u0162\u00a2\u0164\u00a3\u0166\u00a4\u0168\u00a5\u016a"+ + "\u00a6\u016c\u00a7\u016e\u00a8\u0170\u00a9\u0172\2\u0174\2\u0176\2\u0178"+ + "\2\u017a\2\u017c\2\u017e\2\u0180\2\u0182\2\u0184\2\u0186\2\u0188\2\u018a"+ + "\2\u018c\2\u018e\2\u0190\2\u0192\2\u0194\2\u0196\2\u0198\2\u019a\2\u019c"+ + "\2\u019e\2\u01a0\2\u01a2\2\u01a4\2\u01a6\2\u01a8\2\u01aa\2\u01ac\2\u01ae"+ + "\2\u01b0\2\u01b2\2\u01b4\2\u01b6\2\u01b8\2\u01ba\2\u01bc\2\u01be\2\u01c0"+ + "\2\u01c2\2\u01c4\2\u01c6\2\u01c8\2\u01ca\2\u01cc\2\u01ce\2\u01d0\2\u01d2"+ + "\2\u01d4\2\u01d6\2\u01d8\2\u01da\2\u01dc\2\u01de\2\u01e0\2\u01e2\2\u01e4"+ + "\2\u01e6\2\u01e8\2\u01ea\2\u01ec\2\u01ee\2\u01f0\2\u01f2\2\u01f4\2\u01f6"+ + "\2\u01f8\2\u01fa\2\u01fc\2\u01fe\2\u0200\2\u0202\2\u0204\2\u0206\2\u0208"+ + "\2\u020a\2\u020c\2\u020e\2\u0210\2\u0212\2\u0214\2\u0216\2\u0218\2\u021a"+ + "\2\u021c\2\u021e\2\u0220\2\u0222\2\u0224\2\u0226\2\u0228\2\u022a\2\u022c"+ + "\2\u022e\2\u0230\2\u0232\2\u0234\2\u0236\2\u0238\2\u023a\2\u023c\2\u023e"+ + "\2\u0240\2\u0242\2\u0244\2\u0246\2\u0248\2\u024a\2\u024c\2\u024e\2\u0250"+ + "\2\u0252\2\u0254\2\u0256\2\u0258\2\u025a\2\u025c\2\u025e\2\u0260\2\u0262"+ + "\2\u0264\2\u0266\2\u0268\2\u026a\2\u026c\2\u026e\u00aa\u0270\u00ab\u0272"+ + "\u00ac\u0274\u00ad\6\2\3\4\5\31\4\2\f\f\17\17\5\2\13\13\16\16\"\"\4\2"+ + "GGgg\4\2--//\4\2HHhh\5\2\62;CHch\4\2ZZzz\3\2\62\63\4\2DDdd\4\2WWww\4\2"+ + "NNnn\6\2\f\f\17\17))^^\5\2\f\f\17\17bb\n\2$$&&))^^ddppttvv\u0248\2c|\u00b7"+ + "\u00b7\u00e1\u00f8\u00fa\u0101\u0103\u0103\u0105\u0105\u0107\u0107\u0109"+ + "\u0109\u010b\u010b\u010d\u010d\u010f\u010f\u0111\u0111\u0113\u0113\u0115"+ + "\u0115\u0117\u0117\u0119\u0119\u011b\u011b\u011d\u011d\u011f\u011f\u0121"+ + "\u0121\u0123\u0123\u0125\u0125\u0127\u0127\u0129\u0129\u012b\u012b\u012d"+ + "\u012d\u012f\u012f\u0131\u0131\u0133\u0133\u0135\u0135\u0137\u0137\u0139"+ + "\u013a\u013c\u013c\u013e\u013e\u0140\u0140\u0142\u0142\u0144\u0144\u0146"+ + "\u0146\u0148\u0148\u014a\u014b\u014d\u014d\u014f\u014f\u0151\u0151\u0153"+ + "\u0153\u0155\u0155\u0157\u0157\u0159\u0159\u015b\u015b\u015d\u015d\u015f"+ + "\u015f\u0161\u0161\u0163\u0163\u0165\u0165\u0167\u0167\u0169\u0169\u016b"+ + "\u016b\u016d\u016d\u016f\u016f\u0171\u0171\u0173\u0173\u0175\u0175\u0177"+ + "\u0177\u0179\u0179\u017c\u017c\u017e\u017e\u0180\u0182\u0185\u0185\u0187"+ + "\u0187\u018a\u018a\u018e\u018f\u0194\u0194\u0197\u0197\u019b\u019d\u01a0"+ + "\u01a0\u01a3\u01a3\u01a5\u01a5\u01a7\u01a7\u01aa\u01aa\u01ac\u01ad\u01af"+ + "\u01af\u01b2\u01b2\u01b6\u01b6\u01b8\u01b8\u01bb\u01bc\u01bf\u01c1\u01c8"+ + "\u01c8\u01cb\u01cb\u01ce\u01ce\u01d0\u01d0\u01d2\u01d2\u01d4\u01d4\u01d6"+ + "\u01d6\u01d8\u01d8\u01da\u01da\u01dc\u01dc\u01de\u01df\u01e1\u01e1\u01e3"+ + "\u01e3\u01e5\u01e5\u01e7\u01e7\u01e9\u01e9\u01eb\u01eb\u01ed\u01ed\u01ef"+ + "\u01ef\u01f1\u01f2\u01f5\u01f5\u01f7\u01f7\u01fb\u01fb\u01fd\u01fd\u01ff"+ + "\u01ff\u0201\u0201\u0203\u0203\u0205\u0205\u0207\u0207\u0209\u0209\u020b"+ + "\u020b\u020d\u020d\u020f\u020f\u0211\u0211\u0213\u0213\u0215\u0215\u0217"+ + "\u0217\u0219\u0219\u021b\u021b\u021d\u021d\u021f\u021f\u0221\u0221\u0223"+ + "\u0223\u0225\u0225\u0227\u0227\u0229\u0229\u022b\u022b\u022d\u022d\u022f"+ + "\u022f\u0231\u0231\u0233\u0233\u0235\u023b\u023e\u023e\u0241\u0242\u0244"+ + "\u0244\u0249\u0249\u024b\u024b\u024d\u024d\u024f\u024f\u0251\u0295\u0297"+ + "\u02b1\u0373\u0373\u0375\u0375\u0379\u0379\u037d\u037f\u0392\u0392\u03ae"+ + "\u03d0\u03d2\u03d3\u03d7\u03d9\u03db\u03db\u03dd\u03dd\u03df\u03df\u03e1"+ + "\u03e1\u03e3\u03e3\u03e5\u03e5\u03e7\u03e7\u03e9\u03e9\u03eb\u03eb\u03ed"+ + "\u03ed\u03ef\u03ef\u03f1\u03f5\u03f7\u03f7\u03fa\u03fa\u03fd\u03fe\u0432"+ + "\u0461\u0463\u0463\u0465\u0465\u0467\u0467\u0469\u0469\u046b\u046b\u046d"+ + "\u046d\u046f\u046f\u0471\u0471\u0473\u0473\u0475\u0475\u0477\u0477\u0479"+ + "\u0479\u047b\u047b\u047d\u047d\u047f\u047f\u0481\u0481\u0483\u0483\u048d"+ + "\u048d\u048f\u048f\u0491\u0491\u0493\u0493\u0495\u0495\u0497\u0497\u0499"+ + "\u0499\u049b\u049b\u049d\u049d\u049f\u049f\u04a1\u04a1\u04a3\u04a3\u04a5"+ + "\u04a5\u04a7\u04a7\u04a9\u04a9\u04ab\u04ab\u04ad\u04ad\u04af\u04af\u04b1"+ + "\u04b1\u04b3\u04b3\u04b5\u04b5\u04b7\u04b7\u04b9\u04b9\u04bb\u04bb\u04bd"+ + "\u04bd\u04bf\u04bf\u04c1\u04c1\u04c4\u04c4\u04c6\u04c6\u04c8\u04c8\u04ca"+ + "\u04ca\u04cc\u04cc\u04ce\u04ce\u04d0\u04d1\u04d3\u04d3\u04d5\u04d5\u04d7"+ + "\u04d7\u04d9\u04d9\u04db\u04db\u04dd\u04dd\u04df\u04df\u04e1\u04e1\u04e3"+ + "\u04e3\u04e5\u04e5\u04e7\u04e7\u04e9\u04e9\u04eb\u04eb\u04ed\u04ed\u04ef"+ + "\u04ef\u04f1\u04f1\u04f3\u04f3\u04f5\u04f5\u04f7\u04f7\u04f9\u04f9\u04fb"+ + "\u04fb\u04fd\u04fd\u04ff\u04ff\u0501\u0501\u0503\u0503\u0505\u0505\u0507"+ + "\u0507\u0509\u0509\u050b\u050b\u050d\u050d\u050f\u050f\u0511\u0511\u0513"+ + "\u0513\u0515\u0515\u0517\u0517\u0519\u0519\u051b\u051b\u051d\u051d\u051f"+ + "\u051f\u0521\u0521\u0523\u0523\u0525\u0525\u0527\u0527\u0529\u0529\u0563"+ + "\u0589\u1d02\u1d2d\u1d6d\u1d79\u1d7b\u1d9c\u1e03\u1e03\u1e05\u1e05\u1e07"+ + "\u1e07\u1e09\u1e09\u1e0b\u1e0b\u1e0d\u1e0d\u1e0f\u1e0f\u1e11\u1e11\u1e13"+ + "\u1e13\u1e15\u1e15\u1e17\u1e17\u1e19\u1e19\u1e1b\u1e1b\u1e1d\u1e1d\u1e1f"+ + "\u1e1f\u1e21\u1e21\u1e23\u1e23\u1e25\u1e25\u1e27\u1e27\u1e29\u1e29\u1e2b"+ + "\u1e2b\u1e2d\u1e2d\u1e2f\u1e2f\u1e31\u1e31\u1e33\u1e33\u1e35\u1e35\u1e37"+ + "\u1e37\u1e39\u1e39\u1e3b\u1e3b\u1e3d\u1e3d\u1e3f\u1e3f\u1e41\u1e41\u1e43"+ + "\u1e43\u1e45\u1e45\u1e47\u1e47\u1e49\u1e49\u1e4b\u1e4b\u1e4d\u1e4d\u1e4f"+ + "\u1e4f\u1e51\u1e51\u1e53\u1e53\u1e55\u1e55\u1e57\u1e57\u1e59\u1e59\u1e5b"+ + "\u1e5b\u1e5d\u1e5d\u1e5f\u1e5f\u1e61\u1e61\u1e63\u1e63\u1e65\u1e65\u1e67"+ + "\u1e67\u1e69\u1e69\u1e6b\u1e6b\u1e6d\u1e6d\u1e6f\u1e6f\u1e71\u1e71\u1e73"+ + "\u1e73\u1e75\u1e75\u1e77\u1e77\u1e79\u1e79\u1e7b\u1e7b\u1e7d\u1e7d\u1e7f"+ + "\u1e7f\u1e81\u1e81\u1e83\u1e83\u1e85\u1e85\u1e87\u1e87\u1e89\u1e89\u1e8b"+ + "\u1e8b\u1e8d\u1e8d\u1e8f\u1e8f\u1e91\u1e91\u1e93\u1e93\u1e95\u1e95\u1e97"+ + "\u1e9f\u1ea1\u1ea1\u1ea3\u1ea3\u1ea5\u1ea5\u1ea7\u1ea7\u1ea9\u1ea9\u1eab"+ + "\u1eab\u1ead\u1ead\u1eaf\u1eaf\u1eb1\u1eb1\u1eb3\u1eb3\u1eb5\u1eb5\u1eb7"+ + "\u1eb7\u1eb9\u1eb9\u1ebb\u1ebb\u1ebd\u1ebd\u1ebf\u1ebf\u1ec1\u1ec1\u1ec3"+ + "\u1ec3\u1ec5\u1ec5\u1ec7\u1ec7\u1ec9\u1ec9\u1ecb\u1ecb\u1ecd\u1ecd\u1ecf"+ + "\u1ecf\u1ed1\u1ed1\u1ed3\u1ed3\u1ed5\u1ed5\u1ed7\u1ed7\u1ed9\u1ed9\u1edb"+ + "\u1edb\u1edd\u1edd\u1edf\u1edf\u1ee1\u1ee1\u1ee3\u1ee3\u1ee5\u1ee5\u1ee7"+ + "\u1ee7\u1ee9\u1ee9\u1eeb\u1eeb\u1eed\u1eed\u1eef\u1eef\u1ef1\u1ef1\u1ef3"+ + "\u1ef3\u1ef5\u1ef5\u1ef7\u1ef7\u1ef9\u1ef9\u1efb\u1efb\u1efd\u1efd\u1eff"+ + "\u1eff\u1f01\u1f09\u1f12\u1f17\u1f22\u1f29\u1f32\u1f39\u1f42\u1f47\u1f52"+ + "\u1f59\u1f62\u1f69\u1f72\u1f7f\u1f82\u1f89\u1f92\u1f99\u1fa2\u1fa9\u1fb2"+ + "\u1fb6\u1fb8\u1fb9\u1fc0\u1fc0\u1fc4\u1fc6\u1fc8\u1fc9\u1fd2\u1fd5\u1fd8"+ + "\u1fd9\u1fe2\u1fe9\u1ff4\u1ff6\u1ff8\u1ff9\u210c\u210c\u2110\u2111\u2115"+ + "\u2115\u2131\u2131\u2136\u2136\u213b\u213b\u213e\u213f\u2148\u214b\u2150"+ + "\u2150\u2186\u2186\u2c32\u2c60\u2c63\u2c63\u2c67\u2c68\u2c6a\u2c6a\u2c6c"+ + "\u2c6c\u2c6e\u2c6e\u2c73\u2c73\u2c75\u2c76\u2c78\u2c7d\u2c83\u2c83\u2c85"+ + "\u2c85\u2c87\u2c87\u2c89\u2c89\u2c8b\u2c8b\u2c8d\u2c8d\u2c8f\u2c8f\u2c91"+ + "\u2c91\u2c93\u2c93\u2c95\u2c95\u2c97\u2c97\u2c99\u2c99\u2c9b\u2c9b\u2c9d"+ + "\u2c9d\u2c9f\u2c9f\u2ca1\u2ca1\u2ca3\u2ca3\u2ca5\u2ca5\u2ca7\u2ca7\u2ca9"+ + "\u2ca9\u2cab\u2cab\u2cad\u2cad\u2caf\u2caf\u2cb1\u2cb1\u2cb3\u2cb3\u2cb5"+ + "\u2cb5\u2cb7\u2cb7\u2cb9\u2cb9\u2cbb\u2cbb\u2cbd\u2cbd\u2cbf\u2cbf\u2cc1"+ + "\u2cc1\u2cc3\u2cc3\u2cc5\u2cc5\u2cc7\u2cc7\u2cc9\u2cc9\u2ccb\u2ccb\u2ccd"+ + "\u2ccd\u2ccf\u2ccf\u2cd1\u2cd1\u2cd3\u2cd3\u2cd5\u2cd5\u2cd7\u2cd7\u2cd9"+ + "\u2cd9\u2cdb\u2cdb\u2cdd\u2cdd\u2cdf\u2cdf\u2ce1\u2ce1\u2ce3\u2ce3\u2ce5"+ + "\u2ce6\u2cee\u2cee\u2cf0\u2cf0\u2cf5\u2cf5\u2d02\u2d27\u2d29\u2d29\u2d2f"+ + "\u2d2f\ua643\ua643\ua645\ua645\ua647\ua647\ua649\ua649\ua64b\ua64b\ua64d"+ + "\ua64d\ua64f\ua64f\ua651\ua651\ua653\ua653\ua655\ua655\ua657\ua657\ua659"+ + "\ua659\ua65b\ua65b\ua65d\ua65d\ua65f\ua65f\ua661\ua661\ua663\ua663\ua665"+ + "\ua665\ua667\ua667\ua669\ua669\ua66b\ua66b\ua66d\ua66d\ua66f\ua66f\ua683"+ + "\ua683\ua685\ua685\ua687\ua687\ua689\ua689\ua68b\ua68b\ua68d\ua68d\ua68f"+ + "\ua68f\ua691\ua691\ua693\ua693\ua695\ua695\ua697\ua697\ua699\ua699\ua725"+ + "\ua725\ua727\ua727\ua729\ua729\ua72b\ua72b\ua72d\ua72d\ua72f\ua72f\ua731"+ + "\ua733\ua735\ua735\ua737\ua737\ua739\ua739\ua73b\ua73b\ua73d\ua73d\ua73f"+ + "\ua73f\ua741\ua741\ua743\ua743\ua745\ua745\ua747\ua747\ua749\ua749\ua74b"+ + "\ua74b\ua74d\ua74d\ua74f\ua74f\ua751\ua751\ua753\ua753\ua755\ua755\ua757"+ + "\ua757\ua759\ua759\ua75b\ua75b\ua75d\ua75d\ua75f\ua75f\ua761\ua761\ua763"+ + "\ua763\ua765\ua765\ua767\ua767\ua769\ua769\ua76b\ua76b\ua76d\ua76d\ua76f"+ + "\ua76f\ua771\ua771\ua773\ua77a\ua77c\ua77c\ua77e\ua77e\ua781\ua781\ua783"+ + "\ua783\ua785\ua785\ua787\ua787\ua789\ua789\ua78e\ua78e\ua790\ua790\ua793"+ + "\ua793\ua795\ua795\ua7a3\ua7a3\ua7a5\ua7a5\ua7a7\ua7a7\ua7a9\ua7a9\ua7ab"+ + "\ua7ab\ua7fc\ua7fc\ufb02\ufb08\ufb15\ufb19\uff43\uff5c\65\2\u02b2\u02c3"+ + "\u02c8\u02d3\u02e2\u02e6\u02ee\u02ee\u02f0\u02f0\u0376\u0376\u037c\u037c"+ + "\u055b\u055b\u0642\u0642\u06e7\u06e8\u07f6\u07f7\u07fc\u07fc\u081c\u081c"+ + "\u0826\u0826\u082a\u082a\u0973\u0973\u0e48\u0e48\u0ec8\u0ec8\u10fe\u10fe"+ + "\u17d9\u17d9\u1845\u1845\u1aa9\u1aa9\u1c7a\u1c7f\u1d2e\u1d6c\u1d7a\u1d7a"+ + "\u1d9d\u1dc1\u2073\u2073\u2081\u2081\u2092\u209e\u2c7e\u2c7f\u2d71\u2d71"+ + "\u2e31\u2e31\u3007\u3007\u3033\u3037\u303d\u303d\u309f\u30a0\u30fe\u3100"+ + "\ua017\ua017\ua4fa\ua4ff\ua60e\ua60e\ua681\ua681\ua719\ua721\ua772\ua772"+ + "\ua78a\ua78a\ua7fa\ua7fb\ua9d1\ua9d1\uaa72\uaa72\uaadf\uaadf\uaaf5\uaaf6"+ + "\uff72\uff72\uffa0\uffa1\u0123\2\u00ac\u00ac\u00bc\u00bc\u01bd\u01bd\u01c2"+ + "\u01c5\u0296\u0296\u05d2\u05ec\u05f2\u05f4\u0622\u0641\u0643\u064c\u0670"+ + "\u0671\u0673\u06d5\u06d7\u06d7\u06f0\u06f1\u06fc\u06fe\u0701\u0701\u0712"+ + "\u0712\u0714\u0731\u074f\u07a7\u07b3\u07b3\u07cc\u07ec\u0802\u0817\u0842"+ + "\u085a\u08a2\u08a2\u08a4\u08ae\u0906\u093b\u093f\u093f\u0952\u0952\u095a"+ + "\u0963\u0974\u0979\u097b\u0981\u0987\u098e\u0991\u0992\u0995\u09aa\u09ac"+ + "\u09b2\u09b4\u09b4\u09b8\u09bb\u09bf\u09bf\u09d0\u09d0\u09de\u09df\u09e1"+ + "\u09e3\u09f2\u09f3\u0a07\u0a0c\u0a11\u0a12\u0a15\u0a2a\u0a2c\u0a32\u0a34"+ + "\u0a35\u0a37\u0a38\u0a3a\u0a3b\u0a5b\u0a5e\u0a60\u0a60\u0a74\u0a76\u0a87"+ + "\u0a8f\u0a91\u0a93\u0a95\u0aaa\u0aac\u0ab2\u0ab4\u0ab5\u0ab7\u0abb\u0abf"+ + "\u0abf\u0ad2\u0ad2\u0ae2\u0ae3\u0b07\u0b0e\u0b11\u0b12\u0b15\u0b2a\u0b2c"+ + "\u0b32\u0b34\u0b35\u0b37\u0b3b\u0b3f\u0b3f\u0b5e\u0b5f\u0b61\u0b63\u0b73"+ + "\u0b73\u0b85\u0b85\u0b87\u0b8c\u0b90\u0b92\u0b94\u0b97\u0b9b\u0b9c\u0b9e"+ + "\u0b9e\u0ba0\u0ba1\u0ba5\u0ba6\u0baa\u0bac\u0bb0\u0bbb\u0bd2\u0bd2\u0c07"+ + "\u0c0e\u0c10\u0c12\u0c14\u0c2a\u0c2c\u0c35\u0c37\u0c3b\u0c3f\u0c3f\u0c5a"+ + "\u0c5b\u0c62\u0c63\u0c87\u0c8e\u0c90\u0c92\u0c94\u0caa\u0cac\u0cb5\u0cb7"+ + "\u0cbb\u0cbf\u0cbf\u0ce0\u0ce0\u0ce2\u0ce3\u0cf3\u0cf4\u0d07\u0d0e\u0d10"+ + "\u0d12\u0d14\u0d3c\u0d3f\u0d3f\u0d50\u0d50\u0d62\u0d63\u0d7c\u0d81\u0d87"+ + "\u0d98\u0d9c\u0db3\u0db5\u0dbd\u0dbf\u0dbf\u0dc2\u0dc8\u0e03\u0e32\u0e34"+ + "\u0e35\u0e42\u0e47\u0e83\u0e84\u0e86\u0e86\u0e89\u0e8a\u0e8c\u0e8c\u0e8f"+ + "\u0e8f\u0e96\u0e99\u0e9b\u0ea1\u0ea3\u0ea5\u0ea7\u0ea7\u0ea9\u0ea9\u0eac"+ + "\u0ead\u0eaf\u0eb2\u0eb4\u0eb5\u0ebf\u0ebf\u0ec2\u0ec6\u0ede\u0ee1\u0f02"+ + "\u0f02\u0f42\u0f49\u0f4b\u0f6e\u0f8a\u0f8e\u1002\u102c\u1041\u1041\u1052"+ + "\u1057\u105c\u105f\u1063\u1063\u1067\u1068\u1070\u1072\u1077\u1083\u1090"+ + "\u1090\u10d2\u10fc\u10ff\u124a\u124c\u124f\u1252\u1258\u125a\u125a\u125c"+ + "\u125f\u1262\u128a\u128c\u128f\u1292\u12b2\u12b4\u12b7\u12ba\u12c0\u12c2"+ + "\u12c2\u12c4\u12c7\u12ca\u12d8\u12da\u1312\u1314\u1317\u131a\u135c\u1382"+ + "\u1391\u13a2\u13f6\u1403\u166e\u1671\u1681\u1683\u169c\u16a2\u16ec\u1702"+ + "\u170e\u1710\u1713\u1722\u1733\u1742\u1753\u1762\u176e\u1770\u1772\u1782"+ + "\u17b5\u17de\u17de\u1822\u1844\u1846\u1879\u1882\u18aa\u18ac\u18ac\u18b2"+ + "\u18f7\u1902\u191e\u1952\u196f\u1972\u1976\u1982\u19ad\u19c3\u19c9\u1a02"+ + "\u1a18\u1a22\u1a56\u1b07\u1b35\u1b47\u1b4d\u1b85\u1ba2\u1bb0\u1bb1\u1bbc"+ + "\u1be7\u1c02\u1c25\u1c4f\u1c51\u1c5c\u1c79\u1ceb\u1cee\u1cf0\u1cf3\u1cf7"+ + "\u1cf8\u2137\u213a\u2d32\u2d69\u2d82\u2d98\u2da2\u2da8\u2daa\u2db0\u2db2"+ + "\u2db8\u2dba\u2dc0\u2dc2\u2dc8\u2dca\u2dd0\u2dd2\u2dd8\u2dda\u2de0\u3008"+ + "\u3008\u303e\u303e\u3043\u3098\u30a1\u30a1\u30a3\u30fc\u3101\u3101\u3107"+ + "\u312f\u3133\u3190\u31a2\u31bc\u31f2\u3201\u3402\u3402\u4db7\u4db7\u4e02"+ + "\u4e02\u9fce\u9fce\ua002\ua016\ua018\ua48e\ua4d2\ua4f9\ua502\ua60d\ua612"+ + "\ua621\ua62c\ua62d\ua670\ua670\ua6a2\ua6e7\ua7fd\ua803\ua805\ua807\ua809"+ + "\ua80c\ua80e\ua824\ua842\ua875\ua884\ua8b5\ua8f4\ua8f9\ua8fd\ua8fd\ua90c"+ + "\ua927\ua932\ua948\ua962\ua97e\ua986\ua9b4\uaa02\uaa2a\uaa42\uaa44\uaa46"+ + "\uaa4d\uaa62\uaa71\uaa73\uaa78\uaa7c\uaa7c\uaa82\uaab1\uaab3\uaab3\uaab7"+ + "\uaab8\uaabb\uaabf\uaac2\uaac2\uaac4\uaac4\uaadd\uaade\uaae2\uaaec\uaaf4"+ + "\uaaf4\uab03\uab08\uab0b\uab10\uab13\uab18\uab22\uab28\uab2a\uab30\uabc2"+ + "\uabe4\uac02\uac02\ud7a5\ud7a5\ud7b2\ud7c8\ud7cd\ud7fd\uf902\ufa6f\ufa72"+ + "\ufadb\ufb1f\ufb1f\ufb21\ufb2a\ufb2c\ufb38\ufb3a\ufb3e\ufb40\ufb40\ufb42"+ + "\ufb43\ufb45\ufb46\ufb48\ufbb3\ufbd5\ufd3f\ufd52\ufd91\ufd94\ufdc9\ufdf2"+ + "\ufdfd\ufe72\ufe76\ufe78\ufefe\uff68\uff71\uff73\uff9f\uffa2\uffc0\uffc4"+ + "\uffc9\uffcc\uffd1\uffd4\uffd9\uffdc\uffde\f\2\u01c7\u01c7\u01ca\u01ca"+ + "\u01cd\u01cd\u01f4\u01f4\u1f8a\u1f91\u1f9a\u1fa1\u1faa\u1fb1\u1fbe\u1fbe"+ + "\u1fce\u1fce\u1ffe\u1ffe\u0242\2C\\\u00c2\u00d8\u00da\u00e0\u0102\u0102"+ + "\u0104\u0104\u0106\u0106\u0108\u0108\u010a\u010a\u010c\u010c\u010e\u010e"+ + "\u0110\u0110\u0112\u0112\u0114\u0114\u0116\u0116\u0118\u0118\u011a\u011a"+ + "\u011c\u011c\u011e\u011e\u0120\u0120\u0122\u0122\u0124\u0124\u0126\u0126"+ + "\u0128\u0128\u012a\u012a\u012c\u012c\u012e\u012e\u0130\u0130\u0132\u0132"+ + "\u0134\u0134\u0136\u0136\u0138\u0138\u013b\u013b\u013d\u013d\u013f\u013f"+ + "\u0141\u0141\u0143\u0143\u0145\u0145\u0147\u0147\u0149\u0149\u014c\u014c"+ + "\u014e\u014e\u0150\u0150\u0152\u0152\u0154\u0154\u0156\u0156\u0158\u0158"+ + "\u015a\u015a\u015c\u015c\u015e\u015e\u0160\u0160\u0162\u0162\u0164\u0164"+ + "\u0166\u0166\u0168\u0168\u016a\u016a\u016c\u016c\u016e\u016e\u0170\u0170"+ + "\u0172\u0172\u0174\u0174\u0176\u0176\u0178\u0178\u017a\u017b\u017d\u017d"+ + "\u017f\u017f\u0183\u0184\u0186\u0186\u0188\u0189\u018b\u018d\u0190\u0193"+ + "\u0195\u0196\u0198\u019a\u019e\u019f\u01a1\u01a2\u01a4\u01a4\u01a6\u01a6"+ + "\u01a8\u01a9\u01ab\u01ab\u01ae\u01ae\u01b0\u01b1\u01b3\u01b5\u01b7\u01b7"+ + "\u01b9\u01ba\u01be\u01be\u01c6\u01c6\u01c9\u01c9\u01cc\u01cc\u01cf\u01cf"+ + "\u01d1\u01d1\u01d3\u01d3\u01d5\u01d5\u01d7\u01d7\u01d9\u01d9\u01db\u01db"+ + "\u01dd\u01dd\u01e0\u01e0\u01e2\u01e2\u01e4\u01e4\u01e6\u01e6\u01e8\u01e8"+ + "\u01ea\u01ea\u01ec\u01ec\u01ee\u01ee\u01f0\u01f0\u01f3\u01f3\u01f6\u01f6"+ + "\u01f8\u01fa\u01fc\u01fc\u01fe\u01fe\u0200\u0200\u0202\u0202\u0204\u0204"+ + "\u0206\u0206\u0208\u0208\u020a\u020a\u020c\u020c\u020e\u020e\u0210\u0210"+ + "\u0212\u0212\u0214\u0214\u0216\u0216\u0218\u0218\u021a\u021a\u021c\u021c"+ + "\u021e\u021e\u0220\u0220\u0222\u0222\u0224\u0224\u0226\u0226\u0228\u0228"+ + "\u022a\u022a\u022c\u022c\u022e\u022e\u0230\u0230\u0232\u0232\u0234\u0234"+ + "\u023c\u023d\u023f\u0240\u0243\u0243\u0245\u0248\u024a\u024a\u024c\u024c"+ + "\u024e\u024e\u0250\u0250\u0372\u0372\u0374\u0374\u0378\u0378\u0388\u0388"+ + "\u038a\u038c\u038e\u038e\u0390\u0391\u0393\u03a3\u03a5\u03ad\u03d1\u03d1"+ + "\u03d4\u03d6\u03da\u03da\u03dc\u03dc\u03de\u03de\u03e0\u03e0\u03e2\u03e2"+ + "\u03e4\u03e4\u03e6\u03e6\u03e8\u03e8\u03ea\u03ea\u03ec\u03ec\u03ee\u03ee"+ + "\u03f0\u03f0\u03f6\u03f6\u03f9\u03f9\u03fb\u03fc\u03ff\u0431\u0462\u0462"+ + "\u0464\u0464\u0466\u0466\u0468\u0468\u046a\u046a\u046c\u046c\u046e\u046e"+ + "\u0470\u0470\u0472\u0472\u0474\u0474\u0476\u0476\u0478\u0478\u047a\u047a"+ + "\u047c\u047c\u047e\u047e\u0480\u0480\u0482\u0482\u048c\u048c\u048e\u048e"+ + "\u0490\u0490\u0492\u0492\u0494\u0494\u0496\u0496\u0498\u0498\u049a\u049a"+ + "\u049c\u049c\u049e\u049e\u04a0\u04a0\u04a2\u04a2\u04a4\u04a4\u04a6\u04a6"+ + "\u04a8\u04a8\u04aa\u04aa\u04ac\u04ac\u04ae\u04ae\u04b0\u04b0\u04b2\u04b2"+ + "\u04b4\u04b4\u04b6\u04b6\u04b8\u04b8\u04ba\u04ba\u04bc\u04bc\u04be\u04be"+ + "\u04c0\u04c0\u04c2\u04c3\u04c5\u04c5\u04c7\u04c7\u04c9\u04c9\u04cb\u04cb"+ + "\u04cd\u04cd\u04cf\u04cf\u04d2\u04d2\u04d4\u04d4\u04d6\u04d6\u04d8\u04d8"+ + "\u04da\u04da\u04dc\u04dc\u04de\u04de\u04e0\u04e0\u04e2\u04e2\u04e4\u04e4"+ + "\u04e6\u04e6\u04e8\u04e8\u04ea\u04ea\u04ec\u04ec\u04ee\u04ee\u04f0\u04f0"+ + "\u04f2\u04f2\u04f4\u04f4\u04f6\u04f6\u04f8\u04f8\u04fa\u04fa\u04fc\u04fc"+ + "\u04fe\u04fe\u0500\u0500\u0502\u0502\u0504\u0504\u0506\u0506\u0508\u0508"+ + "\u050a\u050a\u050c\u050c\u050e\u050e\u0510\u0510\u0512\u0512\u0514\u0514"+ + "\u0516\u0516\u0518\u0518\u051a\u051a\u051c\u051c\u051e\u051e\u0520\u0520"+ + "\u0522\u0522\u0524\u0524\u0526\u0526\u0528\u0528\u0533\u0558\u10a2\u10c7"+ + "\u10c9\u10c9\u10cf\u10cf\u1e02\u1e02\u1e04\u1e04\u1e06\u1e06\u1e08\u1e08"+ + "\u1e0a\u1e0a\u1e0c\u1e0c\u1e0e\u1e0e\u1e10\u1e10\u1e12\u1e12\u1e14\u1e14"+ + "\u1e16\u1e16\u1e18\u1e18\u1e1a\u1e1a\u1e1c\u1e1c\u1e1e\u1e1e\u1e20\u1e20"+ + "\u1e22\u1e22\u1e24\u1e24\u1e26\u1e26\u1e28\u1e28\u1e2a\u1e2a\u1e2c\u1e2c"+ + "\u1e2e\u1e2e\u1e30\u1e30\u1e32\u1e32\u1e34\u1e34\u1e36\u1e36\u1e38\u1e38"+ + "\u1e3a\u1e3a\u1e3c\u1e3c\u1e3e\u1e3e\u1e40\u1e40\u1e42\u1e42\u1e44\u1e44"+ + "\u1e46\u1e46\u1e48\u1e48\u1e4a\u1e4a\u1e4c\u1e4c\u1e4e\u1e4e\u1e50\u1e50"+ + "\u1e52\u1e52\u1e54\u1e54\u1e56\u1e56\u1e58\u1e58\u1e5a\u1e5a\u1e5c\u1e5c"+ + "\u1e5e\u1e5e\u1e60\u1e60\u1e62\u1e62\u1e64\u1e64\u1e66\u1e66\u1e68\u1e68"+ + "\u1e6a\u1e6a\u1e6c\u1e6c\u1e6e\u1e6e\u1e70\u1e70\u1e72\u1e72\u1e74\u1e74"+ + "\u1e76\u1e76\u1e78\u1e78\u1e7a\u1e7a\u1e7c\u1e7c\u1e7e\u1e7e\u1e80\u1e80"+ + "\u1e82\u1e82\u1e84\u1e84\u1e86\u1e86\u1e88\u1e88\u1e8a\u1e8a\u1e8c\u1e8c"+ + "\u1e8e\u1e8e\u1e90\u1e90\u1e92\u1e92\u1e94\u1e94\u1e96\u1e96\u1ea0\u1ea0"+ + "\u1ea2\u1ea2\u1ea4\u1ea4\u1ea6\u1ea6\u1ea8\u1ea8\u1eaa\u1eaa\u1eac\u1eac"+ + "\u1eae\u1eae\u1eb0\u1eb0\u1eb2\u1eb2\u1eb4\u1eb4\u1eb6\u1eb6\u1eb8\u1eb8"+ + "\u1eba\u1eba\u1ebc\u1ebc\u1ebe\u1ebe\u1ec0\u1ec0\u1ec2\u1ec2\u1ec4\u1ec4"+ + "\u1ec6\u1ec6\u1ec8\u1ec8\u1eca\u1eca\u1ecc\u1ecc\u1ece\u1ece\u1ed0\u1ed0"+ + "\u1ed2\u1ed2\u1ed4\u1ed4\u1ed6\u1ed6\u1ed8\u1ed8\u1eda\u1eda\u1edc\u1edc"+ + "\u1ede\u1ede\u1ee0\u1ee0\u1ee2\u1ee2\u1ee4\u1ee4\u1ee6\u1ee6\u1ee8\u1ee8"+ + "\u1eea\u1eea\u1eec\u1eec\u1eee\u1eee\u1ef0\u1ef0\u1ef2\u1ef2\u1ef4\u1ef4"+ + "\u1ef6\u1ef6\u1ef8\u1ef8\u1efa\u1efa\u1efc\u1efc\u1efe\u1efe\u1f00\u1f00"+ + "\u1f0a\u1f11\u1f1a\u1f1f\u1f2a\u1f31\u1f3a\u1f41\u1f4a\u1f4f\u1f5b\u1f5b"+ + "\u1f5d\u1f5d\u1f5f\u1f5f\u1f61\u1f61\u1f6a\u1f71\u1fba\u1fbd\u1fca\u1fcd"+ + "\u1fda\u1fdd\u1fea\u1fee\u1ffa\u1ffd\u2104\u2104\u2109\u2109\u210d\u210f"+ + "\u2112\u2114\u2117\u2117\u211b\u211f\u2126\u2126\u2128\u2128\u212a\u212a"+ + "\u212c\u212f\u2132\u2135\u2140\u2141\u2147\u2147\u2185\u2185\u2c02\u2c30"+ + "\u2c62\u2c62\u2c64\u2c66\u2c69\u2c69\u2c6b\u2c6b\u2c6d\u2c6d\u2c6f\u2c72"+ + "\u2c74\u2c74\u2c77\u2c77\u2c80\u2c82\u2c84\u2c84\u2c86\u2c86\u2c88\u2c88"+ + "\u2c8a\u2c8a\u2c8c\u2c8c\u2c8e\u2c8e\u2c90\u2c90\u2c92\u2c92\u2c94\u2c94"+ + "\u2c96\u2c96\u2c98\u2c98\u2c9a\u2c9a\u2c9c\u2c9c\u2c9e\u2c9e\u2ca0\u2ca0"+ + "\u2ca2\u2ca2\u2ca4\u2ca4\u2ca6\u2ca6\u2ca8\u2ca8\u2caa\u2caa\u2cac\u2cac"+ + "\u2cae\u2cae\u2cb0\u2cb0\u2cb2\u2cb2\u2cb4\u2cb4\u2cb6\u2cb6\u2cb8\u2cb8"+ + "\u2cba\u2cba\u2cbc\u2cbc\u2cbe\u2cbe\u2cc0\u2cc0\u2cc2\u2cc2\u2cc4\u2cc4"+ + "\u2cc6\u2cc6\u2cc8\u2cc8\u2cca\u2cca\u2ccc\u2ccc\u2cce\u2cce\u2cd0\u2cd0"+ + "\u2cd2\u2cd2\u2cd4\u2cd4\u2cd6\u2cd6\u2cd8\u2cd8\u2cda\u2cda\u2cdc\u2cdc"+ + "\u2cde\u2cde\u2ce0\u2ce0\u2ce2\u2ce2\u2ce4\u2ce4\u2ced\u2ced\u2cef\u2cef"+ + "\u2cf4\u2cf4\ua642\ua642\ua644\ua644\ua646\ua646\ua648\ua648\ua64a\ua64a"+ + "\ua64c\ua64c\ua64e\ua64e\ua650\ua650\ua652\ua652\ua654\ua654\ua656\ua656"+ + "\ua658\ua658\ua65a\ua65a\ua65c\ua65c\ua65e\ua65e\ua660\ua660\ua662\ua662"+ + "\ua664\ua664\ua666\ua666\ua668\ua668\ua66a\ua66a\ua66c\ua66c\ua66e\ua66e"+ + "\ua682\ua682\ua684\ua684\ua686\ua686\ua688\ua688\ua68a\ua68a\ua68c\ua68c"+ + "\ua68e\ua68e\ua690\ua690\ua692\ua692\ua694\ua694\ua696\ua696\ua698\ua698"+ + "\ua724\ua724\ua726\ua726\ua728\ua728\ua72a\ua72a\ua72c\ua72c\ua72e\ua72e"+ + "\ua730\ua730\ua734\ua734\ua736\ua736\ua738\ua738\ua73a\ua73a\ua73c\ua73c"+ + "\ua73e\ua73e\ua740\ua740\ua742\ua742\ua744\ua744\ua746\ua746\ua748\ua748"+ + "\ua74a\ua74a\ua74c\ua74c\ua74e\ua74e\ua750\ua750\ua752\ua752\ua754\ua754"+ + "\ua756\ua756\ua758\ua758\ua75a\ua75a\ua75c\ua75c\ua75e\ua75e\ua760\ua760"+ + "\ua762\ua762\ua764\ua764\ua766\ua766\ua768\ua768\ua76a\ua76a\ua76c\ua76c"+ + "\ua76e\ua76e\ua770\ua770\ua77b\ua77b\ua77d\ua77d\ua77f\ua780\ua782\ua782"+ + "\ua784\ua784\ua786\ua786\ua788\ua788\ua78d\ua78d\ua78f\ua78f\ua792\ua792"+ + "\ua794\ua794\ua7a2\ua7a2\ua7a4\ua7a4\ua7a6\ua7a6\ua7a8\ua7a8\ua7aa\ua7aa"+ + "\ua7ac\ua7ac\uff23\uff3c%\2\62;\u0662\u066b\u06f2\u06fb\u07c2\u07cb\u0968"+ + "\u0971\u09e8\u09f1\u0a68\u0a71\u0ae8\u0af1\u0b68\u0b71\u0be8\u0bf1\u0c68"+ + "\u0c71\u0ce8\u0cf1\u0d68\u0d71\u0e52\u0e5b\u0ed2\u0edb\u0f22\u0f2b\u1042"+ + "\u104b\u1092\u109b\u17e2\u17eb\u1812\u181b\u1948\u1951\u19d2\u19db\u1a82"+ + "\u1a8b\u1a92\u1a9b\u1b52\u1b5b\u1bb2\u1bbb\u1c42\u1c4b\u1c52\u1c5b\ua622"+ + "\ua62b\ua8d2\ua8db\ua902\ua90b\ua9d2\ua9db\uaa52\uaa5b\uabf2\uabfb\uff12"+ + "\uff1b\t\2\u16f0\u16f2\u2162\u2184\u2187\u218a\u3009\u3009\u3023\u302b"+ + "\u303a\u303c\ua6e8\ua6f1\5\2$$&&^^\4\2$$&&\2\u090d\2\6\3\2\2\2\2\b\3\2"+ + "\2\2\2\n\3\2\2\2\2\f\3\2\2\2\2\16\3\2\2\2\2\22\3\2\2\2\2\24\3\2\2\2\2"+ + "\26\3\2\2\2\2\30\3\2\2\2\2\32\3\2\2\2\2\34\3\2\2\2\2\36\3\2\2\2\2 \3\2"+ + "\2\2\2\"\3\2\2\2\2$\3\2\2\2\2&\3\2\2\2\2(\3\2\2\2\2*\3\2\2\2\2,\3\2\2"+ + "\2\2.\3\2\2\2\2\60\3\2\2\2\2\62\3\2\2\2\2\64\3\2\2\2\2\66\3\2\2\2\28\3"+ + "\2\2\2\2:\3\2\2\2\2<\3\2\2\2\2>\3\2\2\2\2@\3\2\2\2\2B\3\2\2\2\2D\3\2\2"+ + "\2\2F\3\2\2\2\2H\3\2\2\2\2J\3\2\2\2\2L\3\2\2\2\2N\3\2\2\2\2P\3\2\2\2\2"+ + "R\3\2\2\2\2T\3\2\2\2\2V\3\2\2\2\2X\3\2\2\2\2Z\3\2\2\2\2\\\3\2\2\2\2^\3"+ + "\2\2\2\2`\3\2\2\2\2b\3\2\2\2\2d\3\2\2\2\2f\3\2\2\2\2h\3\2\2\2\2j\3\2\2"+ + "\2\2l\3\2\2\2\2n\3\2\2\2\2p\3\2\2\2\2r\3\2\2\2\2t\3\2\2\2\2v\3\2\2\2\2"+ + "x\3\2\2\2\2z\3\2\2\2\2|\3\2\2\2\2~\3\2\2\2\2\u0080\3\2\2\2\2\u0082\3\2"+ + "\2\2\2\u0084\3\2\2\2\2\u0086\3\2\2\2\2\u0088\3\2\2\2\2\u008a\3\2\2\2\2"+ + "\u008c\3\2\2\2\2\u008e\3\2\2\2\2\u0090\3\2\2\2\2\u0092\3\2\2\2\2\u0094"+ + "\3\2\2\2\2\u0096\3\2\2\2\2\u0098\3\2\2\2\2\u009a\3\2\2\2\2\u009c\3\2\2"+ + "\2\2\u009e\3\2\2\2\2\u00a0\3\2\2\2\2\u00a2\3\2\2\2\2\u00a4\3\2\2\2\2\u00a6"+ + "\3\2\2\2\2\u00a8\3\2\2\2\2\u00aa\3\2\2\2\2\u00ac\3\2\2\2\2\u00ae\3\2\2"+ + "\2\2\u00b0\3\2\2\2\2\u00b2\3\2\2\2\2\u00b4\3\2\2\2\2\u00b6\3\2\2\2\2\u00b8"+ + "\3\2\2\2\2\u00ba\3\2\2\2\2\u00bc\3\2\2\2\2\u00be\3\2\2\2\2\u00c0\3\2\2"+ + "\2\2\u00c2\3\2\2\2\2\u00c4\3\2\2\2\2\u00c6\3\2\2\2\2\u00c8\3\2\2\2\2\u00ca"+ + "\3\2\2\2\2\u00cc\3\2\2\2\2\u00ce\3\2\2\2\2\u00d0\3\2\2\2\2\u00d2\3\2\2"+ + "\2\2\u00d4\3\2\2\2\2\u00d6\3\2\2\2\2\u00d8\3\2\2\2\2\u00da\3\2\2\2\2\u00dc"+ + "\3\2\2\2\2\u00de\3\2\2\2\2\u00e0\3\2\2\2\2\u00e2\3\2\2\2\2\u00e4\3\2\2"+ + "\2\2\u00e6\3\2\2\2\2\u00e8\3\2\2\2\2\u00ea\3\2\2\2\2\u00ec\3\2\2\2\2\u00ee"+ + "\3\2\2\2\2\u00f0\3\2\2\2\2\u00f2\3\2\2\2\2\u00f4\3\2\2\2\2\u00f6\3\2\2"+ + "\2\2\u00f8\3\2\2\2\2\u00fa\3\2\2\2\2\u00fc\3\2\2\2\2\u00fe\3\2\2\2\2\u0100"+ + "\3\2\2\2\2\u0102\3\2\2\2\2\u0104\3\2\2\2\2\u0106\3\2\2\2\2\u0108\3\2\2"+ + "\2\2\u010a\3\2\2\2\2\u010c\3\2\2\2\2\u010e\3\2\2\2\2\u0110\3\2\2\2\2\u0112"+ + "\3\2\2\2\2\u011e\3\2\2\2\2\u0120\3\2\2\2\2\u0122\3\2\2\2\2\u0124\3\2\2"+ + "\2\2\u012a\3\2\2\2\2\u0130\3\2\2\2\2\u0132\3\2\2\2\2\u0134\3\2\2\2\2\u0136"+ + "\3\2\2\2\2\u0138\3\2\2\2\2\u013a\3\2\2\2\2\u013e\3\2\2\2\2\u0140\3\2\2"+ + "\2\2\u0142\3\2\2\2\2\u014c\3\2\2\2\2\u014e\3\2\2\2\2\u0150\3\2\2\2\2\u0152"+ + "\3\2\2\2\2\u0154\3\2\2\2\2\u0156\3\2\2\2\2\u0158\3\2\2\2\2\u015a\3\2\2"+ + "\2\2\u015c\3\2\2\2\2\u0274\3\2\2\2\3\u015e\3\2\2\2\3\u0160\3\2\2\2\3\u0162"+ + "\3\2\2\2\3\u0164\3\2\2\2\3\u0166\3\2\2\2\4\u0168\3\2\2\2\4\u016a\3\2\2"+ + "\2\4\u016c\3\2\2\2\4\u016e\3\2\2\2\4\u0170\3\2\2\2\5\u0172\3\2\2\2\5\u0174"+ + "\3\2\2\2\5\u0176\3\2\2\2\5\u0178\3\2\2\2\5\u017a\3\2\2\2\5\u017c\3\2\2"+ + "\2\5\u017e\3\2\2\2\5\u0180\3\2\2\2\5\u0182\3\2\2\2\5\u0184\3\2\2\2\5\u0186"+ + "\3\2\2\2\5\u0188\3\2\2\2\5\u018a\3\2\2\2\5\u018c\3\2\2\2\5\u018e\3\2\2"+ + "\2\5\u0190\3\2\2\2\5\u0192\3\2\2\2\5\u0194\3\2\2\2\5\u0196\3\2\2\2\5\u0198"+ + "\3\2\2\2\5\u019a\3\2\2\2\5\u019c\3\2\2\2\5\u019e\3\2\2\2\5\u01a0\3\2\2"+ + "\2\5\u01a2\3\2\2\2\5\u01a4\3\2\2\2\5\u01a6\3\2\2\2\5\u01a8\3\2\2\2\5\u01aa"+ + "\3\2\2\2\5\u01ac\3\2\2\2\5\u01ae\3\2\2\2\5\u01b0\3\2\2\2\5\u01b2\3\2\2"+ + "\2\5\u01b4\3\2\2\2\5\u01b6\3\2\2\2\5\u01b8\3\2\2\2\5\u01ba\3\2\2\2\5\u01bc"+ + "\3\2\2\2\5\u01be\3\2\2\2\5\u01c0\3\2\2\2\5\u01c2\3\2\2\2\5\u01c4\3\2\2"+ + "\2\5\u01c6\3\2\2\2\5\u01c8\3\2\2\2\5\u01ca\3\2\2\2\5\u01cc\3\2\2\2\5\u01ce"+ + "\3\2\2\2\5\u01d0\3\2\2\2\5\u01d2\3\2\2\2\5\u01d4\3\2\2\2\5\u01d6\3\2\2"+ + "\2\5\u01d8\3\2\2\2\5\u01da\3\2\2\2\5\u01dc\3\2\2\2\5\u01de\3\2\2\2\5\u01e0"+ + "\3\2\2\2\5\u01e2\3\2\2\2\5\u01e4\3\2\2\2\5\u01e6\3\2\2\2\5\u01e8\3\2\2"+ + "\2\5\u01ea\3\2\2\2\5\u01ec\3\2\2\2\5\u01ee\3\2\2\2\5\u01f0\3\2\2\2\5\u01f2"+ + "\3\2\2\2\5\u01f4\3\2\2\2\5\u01f6\3\2\2\2\5\u01f8\3\2\2\2\5\u01fa\3\2\2"+ + "\2\5\u01fc\3\2\2\2\5\u01fe\3\2\2\2\5\u0200\3\2\2\2\5\u0202\3\2\2\2\5\u0204"+ + "\3\2\2\2\5\u0206\3\2\2\2\5\u0208\3\2\2\2\5\u020a\3\2\2\2\5\u020c\3\2\2"+ + "\2\5\u020e\3\2\2\2\5\u0210\3\2\2\2\5\u0212\3\2\2\2\5\u0214\3\2\2\2\5\u0216"+ + "\3\2\2\2\5\u0218\3\2\2\2\5\u021a\3\2\2\2\5\u021c\3\2\2\2\5\u021e\3\2\2"+ + "\2\5\u0220\3\2\2\2\5\u0222\3\2\2\2\5\u0224\3\2\2\2\5\u0226\3\2\2\2\5\u0228"+ + "\3\2\2\2\5\u022a\3\2\2\2\5\u022c\3\2\2\2\5\u022e\3\2\2\2\5\u0230\3\2\2"+ + "\2\5\u0232\3\2\2\2\5\u0234\3\2\2\2\5\u0236\3\2\2\2\5\u0238\3\2\2\2\5\u023a"+ + "\3\2\2\2\5\u023c\3\2\2\2\5\u023e\3\2\2\2\5\u0240\3\2\2\2\5\u0242\3\2\2"+ + "\2\5\u0244\3\2\2\2\5\u0246\3\2\2\2\5\u0248\3\2\2\2\5\u024a\3\2\2\2\5\u024c"+ + "\3\2\2\2\5\u024e\3\2\2\2\5\u0250\3\2\2\2\5\u0252\3\2\2\2\5\u0254\3\2\2"+ + "\2\5\u0256\3\2\2\2\5\u0258\3\2\2\2\5\u025a\3\2\2\2\5\u025c\3\2\2\2\5\u025e"+ + "\3\2\2\2\5\u0260\3\2\2\2\5\u0262\3\2\2\2\5\u0264\3\2\2\2\5\u0266\3\2\2"+ + "\2\5\u0268\3\2\2\2\5\u026a\3\2\2\2\5\u026c\3\2\2\2\5\u026e\3\2\2\2\5\u0270"+ + "\3\2\2\2\5\u0272\3\2\2\2\6\u0276\3\2\2\2\b\u027f\3\2\2\2\n\u028e\3\2\2"+ + "\2\f\u0299\3\2\2\2\16\u02a2\3\2\2\2\20\u02a7\3\2\2\2\22\u02a9\3\2\2\2"+ + "\24\u02ad\3\2\2\2\26\u02af\3\2\2\2\30\u02b1\3\2\2\2\32\u02b5\3\2\2\2\34"+ + "\u02b7\3\2\2\2\36\u02bb\3\2\2\2 \u02bd\3\2\2\2\"\u02c1\3\2\2\2$\u02c4"+ + "\3\2\2\2&\u02c6\3\2\2\2(\u02c8\3\2\2\2*\u02ca\3\2\2\2,\u02cc\3\2\2\2."+ + "\u02ce\3\2\2\2\60\u02d1\3\2\2\2\62\u02d4\3\2\2\2\64\u02d7\3\2\2\2\66\u02da"+ + "\3\2\2\28\u02dd\3\2\2\2:\u02df\3\2\2\2<\u02e1\3\2\2\2>\u02e3\3\2\2\2@"+ + "\u02e5\3\2\2\2B\u02e8\3\2\2\2D\u02eb\3\2\2\2F\u02ee\3\2\2\2H\u02f1\3\2"+ + "\2\2J\u02f4\3\2\2\2L\u02f7\3\2\2\2N\u02fa\3\2\2\2P\u02fd\3\2\2\2R\u0300"+ + "\3\2\2\2T\u0303\3\2\2\2V\u0305\3\2\2\2X\u0307\3\2\2\2Z\u030e\3\2\2\2\\"+ + "\u0314\3\2\2\2^\u031b\3\2\2\2`\u031e\3\2\2\2b\u0320\3\2\2\2d\u0322\3\2"+ + "\2\2f\u0324\3\2\2\2h\u0327\3\2\2\2j\u032a\3\2\2\2l\u032d\3\2\2\2n\u0331"+ + "\3\2\2\2p\u0335\3\2\2\2r\u0338\3\2\2\2t\u033c\3\2\2\2v\u033e\3\2\2\2x"+ + "\u0348\3\2\2\2z\u0354\3\2\2\2|\u035d\3\2\2\2~\u0365\3\2\2\2\u0080\u036e"+ + "\3\2\2\2\u0082\u0373\3\2\2\2\u0084\u0379\3\2\2\2\u0086\u0382\3\2\2\2\u0088"+ + "\u0386\3\2\2\2\u008a\u038a\3\2\2\2\u008c\u0393\3\2\2\2\u008e\u0399\3\2"+ + "\2\2\u0090\u03a2\3\2\2\2\u0092\u03ab\3\2\2\2\u0094\u03b3\3\2\2\2\u0096"+ + "\u03ba\3\2\2\2\u0098\u03c0\3\2\2\2\u009a\u03ca\3\2\2\2\u009c\u03ce\3\2"+ + "\2\2\u009e\u03d5\3\2\2\2\u00a0\u03d9\3\2\2\2\u00a2\u03dd\3\2\2\2\u00a4"+ + "\u03e7\3\2\2\2\u00a6\u03f3\3\2\2\2\u00a8\u03f6\3\2\2\2\u00aa\u0400\3\2"+ + "\2\2\u00ac\u0405\3\2\2\2\u00ae\u040a\3\2\2\2\u00b0\u0410\3\2\2\2\u00b2"+ + "\u0417\3\2\2\2\u00b4\u041d\3\2\2\2\u00b6\u0420\3\2\2\2\u00b8\u0425\3\2"+ + "\2\2\u00ba\u042a\3\2\2\2\u00bc\u042e\3\2\2\2\u00be\u0434\3\2\2\2\u00c0"+ + "\u043c\3\2\2\2\u00c2\u0440\3\2\2\2\u00c4\u0443\3\2\2\2\u00c6\u0449\3\2"+ + "\2\2\u00c8\u044f\3\2\2\2\u00ca\u0456\3\2\2\2\u00cc\u045f\3\2\2\2\u00ce"+ + "\u0465\3\2\2\2\u00d0\u0468\3\2\2\2\u00d2\u046b\3\2\2\2\u00d4\u046e\3\2"+ + "\2\2\u00d6\u0476\3\2\2\2\u00d8\u047e\3\2\2\2\u00da\u0482\3\2\2\2\u00dc"+ + "\u048a\3\2\2\2\u00de\u0491\3\2\2\2\u00e0\u0499\3\2\2\2\u00e2\u04a3\3\2"+ + "\2\2\u00e4\u04ac\3\2\2\2\u00e6\u04b1\3\2\2\2\u00e8\u04b8\3\2\2\2\u00ea"+ + "\u04c3\3\2\2\2\u00ec\u04c8\3\2\2\2\u00ee\u04ce\3\2\2\2\u00f0\u04d4\3\2"+ + "\2\2\u00f2\u04dc\3\2\2\2\u00f4\u04e5\3\2\2\2\u00f6\u04ec\3\2\2\2\u00f8"+ + "\u04f2\3\2\2\2\u00fa\u04fb\3\2\2\2\u00fc\u0503\3\2\2\2\u00fe\u050c\3\2"+ + "\2\2\u0100\u0515\3\2\2\2\u0102\u051b\3\2\2\2\u0104\u0520\3\2\2\2\u0106"+ + "\u0526\3\2\2\2\u0108\u052f\3\2\2\2\u010a\u0536\3\2\2\2\u010c\u053f\3\2"+ + "\2\2\u010e\u054b\3\2\2\2\u0110\u0553\3\2\2\2\u0112\u055a\3\2\2\2\u0114"+ + "\u0561\3\2\2\2\u0116\u0563\3\2\2\2\u0118\u0567\3\2\2\2\u011a\u0573\3\2"+ + "\2\2\u011c\u0575\3\2\2\2\u011e\u057d\3\2\2\2\u0120\u0585\3\2\2\2\u0122"+ + "\u0592\3\2\2\2\u0124\u059e\3\2\2\2\u0126\u05a0\3\2\2\2\u0128\u05a4\3\2"+ + "\2\2\u012a\u05b4\3\2\2\2\u012c\u05b6\3\2\2\2\u012e\u05ba\3\2\2\2\u0130"+ + "\u05ca\3\2\2\2\u0132\u05cf\3\2\2\2\u0134\u05d8\3\2\2\2\u0136\u05e5\3\2"+ + "\2\2\u0138\u05e7\3\2\2\2\u013a\u05ec\3\2\2\2\u013c\u05f3\3\2\2\2\u013e"+ + "\u0608\3\2\2\2\u0140\u063a\3\2\2\2\u0142\u063c\3\2\2\2\u0144\u063f\3\2"+ + "\2\2\u0146\u0646\3\2\2\2\u0148\u064b\3\2\2\2\u014a\u0652\3\2\2\2\u014c"+ + "\u0654\3\2\2\2\u014e\u0658\3\2\2\2\u0150\u065e\3\2\2\2\u0152\u0660\3\2"+ + "\2\2\u0154\u0662\3\2\2\2\u0156\u0664\3\2\2\2\u0158\u0666\3\2\2\2\u015a"+ + "\u0668\3\2\2\2\u015c\u066a\3\2\2\2\u015e\u066c\3\2\2\2\u0160\u0670\3\2"+ + "\2\2\u0162\u0678\3\2\2\2\u0164\u067c\3\2\2\2\u0166\u067e\3\2\2\2\u0168"+ + "\u0684\3\2\2\2\u016a\u068d\3\2\2\2\u016c\u0691\3\2\2\2\u016e\u0699\3\2"+ + "\2\2\u0170\u069b\3\2\2\2\u0172\u06a0\3\2\2\2\u0174\u06a5\3\2\2\2\u0176"+ + "\u06aa\3\2\2\2\u0178\u06af\3\2\2\2\u017a\u06b4\3\2\2\2\u017c\u06b9\3\2"+ + "\2\2\u017e\u06be\3\2\2\2\u0180\u06c2\3\2\2\2\u0182\u06c6\3\2\2\2\u0184"+ + "\u06ca\3\2\2\2\u0186\u06ce\3\2\2\2\u0188\u06d2\3\2\2\2\u018a\u06d6\3\2"+ + "\2\2\u018c\u06da\3\2\2\2\u018e\u06de\3\2\2\2\u0190\u06e2\3\2\2\2\u0192"+ + "\u06e6\3\2\2\2\u0194\u06ea\3\2\2\2\u0196\u06f1\3\2\2\2\u0198\u06f5\3\2"+ + "\2\2\u019a\u06f9\3\2\2\2\u019c\u06fd\3\2\2\2\u019e\u0701\3\2\2\2\u01a0"+ + "\u0705\3\2\2\2\u01a2\u0709\3\2\2\2\u01a4\u070d\3\2\2\2\u01a6\u0711\3\2"+ + "\2\2\u01a8\u0715\3\2\2\2\u01aa\u0719\3\2\2\2\u01ac\u071d\3\2\2\2\u01ae"+ + "\u0721\3\2\2\2\u01b0\u0725\3\2\2\2\u01b2\u0729\3\2\2\2\u01b4\u072d\3\2"+ + "\2\2\u01b6\u0731\3\2\2\2\u01b8\u0735\3\2\2\2\u01ba\u0739\3\2\2\2\u01bc"+ + "\u073d\3\2\2\2\u01be\u0741\3\2\2\2\u01c0\u0748\3\2\2\2\u01c2\u074c\3\2"+ + "\2\2\u01c4\u0750\3\2\2\2\u01c6\u0754\3\2\2\2\u01c8\u0758\3\2\2\2\u01ca"+ + "\u075c\3\2\2\2\u01cc\u0760\3\2\2\2\u01ce\u0764\3\2\2\2\u01d0\u0768\3\2"+ + "\2\2\u01d2\u076c\3\2\2\2\u01d4\u0770\3\2\2\2\u01d6\u0774\3\2\2\2\u01d8"+ + "\u0778\3\2\2\2\u01da\u077c\3\2\2\2\u01dc\u0780\3\2\2\2\u01de\u0784\3\2"+ + "\2\2\u01e0\u0789\3\2\2\2\u01e2\u078e\3\2\2\2\u01e4\u0792\3\2\2\2\u01e6"+ + "\u0796\3\2\2\2\u01e8\u079a\3\2\2\2\u01ea\u079e\3\2\2\2\u01ec\u07a2\3\2"+ + "\2\2\u01ee\u07a6\3\2\2\2\u01f0\u07aa\3\2\2\2\u01f2\u07ae\3\2\2\2\u01f4"+ + "\u07b2\3\2\2\2\u01f6\u07b6\3\2\2\2\u01f8\u07ba\3\2\2\2\u01fa\u07be\3\2"+ + "\2\2\u01fc\u07c2\3\2\2\2\u01fe\u07c6\3\2\2\2\u0200\u07ca\3\2\2\2\u0202"+ + "\u07ce\3\2\2\2\u0204\u07d2\3\2\2\2\u0206\u07d6\3\2\2\2\u0208\u07da\3\2"+ + "\2\2\u020a\u07de\3\2\2\2\u020c\u07e2\3\2\2\2\u020e\u07e6\3\2\2\2\u0210"+ + "\u07ea\3\2\2\2\u0212\u07ee\3\2\2\2\u0214\u07f2\3\2\2\2\u0216\u07f6\3\2"+ + "\2\2\u0218\u07fa\3\2\2\2\u021a\u07fe\3\2\2\2\u021c\u0802\3\2\2\2\u021e"+ + "\u0806\3\2\2\2\u0220\u080a\3\2\2\2\u0222\u080e\3\2\2\2\u0224\u0812\3\2"+ + "\2\2\u0226\u0816\3\2\2\2\u0228\u081a\3\2\2\2\u022a\u081e\3\2\2\2\u022c"+ + "\u0822\3\2\2\2\u022e\u0826\3\2\2\2\u0230\u082a\3\2\2\2\u0232\u082e\3\2"+ + "\2\2\u0234\u0832\3\2\2\2\u0236\u0836\3\2\2\2\u0238\u083a\3\2\2\2\u023a"+ + "\u083e\3\2\2\2\u023c\u0842\3\2\2\2\u023e\u0846\3\2\2\2\u0240\u084a\3\2"+ + "\2\2\u0242\u084e\3\2\2\2\u0244\u0852\3\2\2\2\u0246\u0856\3\2\2\2\u0248"+ + "\u085a\3\2\2\2\u024a\u085e\3\2\2\2\u024c\u0862\3\2\2\2\u024e\u0866\3\2"+ + "\2\2\u0250\u086a\3\2\2\2\u0252\u086e\3\2\2\2\u0254\u0872\3\2\2\2\u0256"+ + "\u0876\3\2\2\2\u0258\u087a\3\2\2\2\u025a\u087e\3\2\2\2\u025c\u0882\3\2"+ + "\2\2\u025e\u0886\3\2\2\2\u0260\u088a\3\2\2\2\u0262\u088e\3\2\2\2\u0264"+ + "\u0892\3\2\2\2\u0266\u0896\3\2\2\2\u0268\u089a\3\2\2\2\u026a\u089e\3\2"+ + "\2\2\u026c\u08a2\3\2\2\2\u026e\u08a8\3\2\2\2\u0270\u08ac\3\2\2\2\u0272"+ + "\u08b0\3\2\2\2\u0274\u08b4\3\2\2\2\u0276\u0277\7%\2\2\u0277\u0278\7#\2"+ + "\2\u0278\u027c\3\2\2\2\u0279\u027b\n\2\2\2\u027a\u0279\3\2\2\2\u027b\u027e"+ + "\3\2\2\2\u027c\u027a\3\2\2\2\u027c\u027d\3\2\2\2\u027d\7\3\2\2\2\u027e"+ + "\u027c\3\2\2\2\u027f\u0280\7\61\2\2\u0280\u0281\7,\2\2\u0281\u0286\3\2"+ + "\2\2\u0282\u0285\5\b\3\2\u0283\u0285\13\2\2\2\u0284\u0282\3\2\2\2\u0284"+ + "\u0283\3\2\2\2\u0285\u0288\3\2\2\2\u0286\u0287\3\2\2\2\u0286\u0284\3\2"+ + "\2\2\u0287\u0289\3\2\2\2\u0288\u0286\3\2\2\2\u0289\u028a\7,\2\2\u028a"+ + "\u028b\7\61\2\2\u028b\u028c\3\2\2\2\u028c\u028d\b\3\2\2\u028d\t\3\2\2"+ + "\2\u028e\u028f\7\61\2\2\u028f\u0290\7\61\2\2\u0290\u0294\3\2\2\2\u0291"+ + "\u0293\n\2\2\2\u0292\u0291\3\2\2\2\u0293\u0296\3\2\2\2\u0294\u0292\3\2"+ + "\2\2\u0294\u0295\3\2\2\2\u0295\u0297\3\2\2\2\u0296\u0294\3\2\2\2\u0297"+ + "\u0298\b\4\2\2\u0298\13\3\2\2\2\u0299\u029a\t\3\2\2\u029a\u029b\3\2\2"+ + "\2\u029b\u029c\b\5\2\2\u029c\r\3\2\2\2\u029d\u02a3\7\f\2\2\u029e\u02a0"+ + "\7\17\2\2\u029f\u02a1\7\f\2\2\u02a0\u029f\3\2\2\2\u02a0\u02a1\3\2\2\2"+ + "\u02a1\u02a3\3\2\2\2\u02a2\u029d\3\2\2\2\u02a2\u029e\3\2\2\2\u02a3\17"+ + "\3\2\2\2\u02a4\u02a8\5\b\3\2\u02a5\u02a8\5\n\4\2\u02a6\u02a8\5\f\5\2\u02a7"+ + "\u02a4\3\2\2\2\u02a7\u02a5\3\2\2\2\u02a7\u02a6\3\2\2\2\u02a8\21\3\2\2"+ + "\2\u02a9\u02aa\7\60\2\2\u02aa\u02ab\7\60\2\2\u02ab\u02ac\7\60\2\2\u02ac"+ + "\23\3\2\2\2\u02ad\u02ae\7\60\2\2\u02ae\25\3\2\2\2\u02af\u02b0\7.\2\2\u02b0"+ + "\27\3\2\2\2\u02b1\u02b2\7*\2\2\u02b2\u02b3\3\2\2\2\u02b3\u02b4\b\13\3"+ + "\2\u02b4\31\3\2\2\2\u02b5\u02b6\7+\2\2\u02b6\33\3\2\2\2\u02b7\u02b8\7"+ + "]\2\2\u02b8\u02b9\3\2\2\2\u02b9\u02ba\b\r\3\2\u02ba\35\3\2\2\2\u02bb\u02bc"+ + "\7_\2\2\u02bc\37\3\2\2\2\u02bd\u02be\7}\2\2\u02be\u02bf\3\2\2\2\u02bf"+ + "\u02c0\b\17\4\2\u02c0!\3\2\2\2\u02c1\u02c2\7\177\2\2\u02c2\u02c3\b\20"+ + "\5\2\u02c3#\3\2\2\2\u02c4\u02c5\7,\2\2\u02c5%\3\2\2\2\u02c6\u02c7\7\'"+ + "\2\2\u02c7\'\3\2\2\2\u02c8\u02c9\7\61\2\2\u02c9)\3\2\2\2\u02ca\u02cb\7"+ + "-\2\2\u02cb+\3\2\2\2\u02cc\u02cd\7/\2\2\u02cd-\3\2\2\2\u02ce\u02cf\7-"+ + "\2\2\u02cf\u02d0\7-\2\2\u02d0/\3\2\2\2\u02d1\u02d2\7/\2\2\u02d2\u02d3"+ + "\7/\2\2\u02d3\61\3\2\2\2\u02d4\u02d5\7(\2\2\u02d5\u02d6\7(\2\2\u02d6\63"+ + "\3\2\2\2\u02d7\u02d8\7~\2\2\u02d8\u02d9\7~\2\2\u02d9\65\3\2\2\2\u02da"+ + "\u02db\7#\2\2\u02db\u02dc\5\20\7\2\u02dc\67\3\2\2\2\u02dd\u02de\7#\2\2"+ + "\u02de9\3\2\2\2\u02df\u02e0\7<\2\2\u02e0;\3\2\2\2\u02e1\u02e2\7=\2\2\u02e2"+ + "=\3\2\2\2\u02e3\u02e4\7?\2\2\u02e4?\3\2\2\2\u02e5\u02e6\7-\2\2\u02e6\u02e7"+ + "\7?\2\2\u02e7A\3\2\2\2\u02e8\u02e9\7/\2\2\u02e9\u02ea\7?\2\2\u02eaC\3"+ + "\2\2\2\u02eb\u02ec\7,\2\2\u02ec\u02ed\7?\2\2\u02edE\3\2\2\2\u02ee\u02ef"+ + "\7\61\2\2\u02ef\u02f0\7?\2\2\u02f0G\3\2\2\2\u02f1\u02f2\7\'\2\2\u02f2"+ + "\u02f3\7?\2\2\u02f3I\3\2\2\2\u02f4\u02f5\7/\2\2\u02f5\u02f6\7@\2\2\u02f6"+ + "K\3\2\2\2\u02f7\u02f8\7?\2\2\u02f8\u02f9\7@\2\2\u02f9M\3\2\2\2\u02fa\u02fb"+ + "\7\60\2\2\u02fb\u02fc\7\60\2\2\u02fcO\3\2\2\2\u02fd\u02fe\7<\2\2\u02fe"+ + "\u02ff\7<\2\2\u02ffQ\3\2\2\2\u0300\u0301\7=\2\2\u0301\u0302\7=\2\2\u0302"+ + "S\3\2\2\2\u0303\u0304\7%\2\2\u0304U\3\2\2\2\u0305\u0306\7B\2\2\u0306W"+ + "\3\2\2\2\u0307\u030a\7B\2\2\u0308\u030b\5\20\7\2\u0309\u030b\5\16\6\2"+ + "\u030a\u0308\3\2\2\2\u030a\u0309\3\2\2\2\u030bY\3\2\2\2\u030c\u030f\5"+ + "\20\7\2\u030d\u030f\5\16\6\2\u030e\u030c\3\2\2\2\u030e\u030d\3\2\2\2\u030f"+ + "\u0310\3\2\2\2\u0310\u0311\7B\2\2\u0311[\3\2\2\2\u0312\u0315\5\20\7\2"+ + "\u0313\u0315\5\16\6\2\u0314\u0312\3\2\2\2\u0314\u0313\3\2\2\2\u0315\u0316"+ + "\3\2\2\2\u0316\u0319\7B\2\2\u0317\u031a\5\20\7\2\u0318\u031a\5\16\6\2"+ + "\u0319\u0317\3\2\2\2\u0319\u0318\3\2\2\2\u031a]\3\2\2\2\u031b\u031c\7"+ + "A\2\2\u031c\u031d\5\20\7\2\u031d_\3\2\2\2\u031e\u031f\7A\2\2\u031fa\3"+ + "\2\2\2\u0320\u0321\7>\2\2\u0321c\3\2\2\2\u0322\u0323\7@\2\2\u0323e\3\2"+ + "\2\2\u0324\u0325\7>\2\2\u0325\u0326\7?\2\2\u0326g\3\2\2\2\u0327\u0328"+ + "\7@\2\2\u0328\u0329\7?\2\2\u0329i\3\2\2\2\u032a\u032b\7#\2\2\u032b\u032c"+ + "\7?\2\2\u032ck\3\2\2\2\u032d\u032e\7#\2\2\u032e\u032f\7?\2\2\u032f\u0330"+ + "\7?\2\2\u0330m\3\2\2\2\u0331\u0332\7c\2\2\u0332\u0333\7u\2\2\u0333\u0334"+ + "\7A\2\2\u0334o\3\2\2\2\u0335\u0336\7?\2\2\u0336\u0337\7?\2\2\u0337q\3"+ + "\2\2\2\u0338\u0339\7?\2\2\u0339\u033a\7?\2\2\u033a\u033b\7?\2\2\u033b"+ + "s\3\2\2\2\u033c\u033d\7)\2\2\u033du\3\2\2\2\u033e\u033f\7t\2\2\u033f\u0340"+ + "\7g\2\2\u0340\u0341\7v\2\2\u0341\u0342\7w\2\2\u0342\u0343\7t\2\2\u0343"+ + "\u0344\7p\2\2\u0344\u0345\7B\2\2\u0345\u0346\3\2\2\2\u0346\u0347\5\u013e"+ + "\u009e\2\u0347w\3\2\2\2\u0348\u0349\7e\2\2\u0349\u034a\7q\2\2\u034a\u034b"+ + "\7p\2\2\u034b\u034c\7v\2\2\u034c\u034d\7k\2\2\u034d\u034e\7p\2\2\u034e"+ + "\u034f\7w\2\2\u034f\u0350\7g\2\2\u0350\u0351\7B\2\2\u0351\u0352\3\2\2"+ + "\2\u0352\u0353\5\u013e\u009e\2\u0353y\3\2\2\2\u0354\u0355\7d\2\2\u0355"+ + "\u0356\7t\2\2\u0356\u0357\7g\2\2\u0357\u0358\7c\2\2\u0358\u0359\7m\2\2"+ + "\u0359\u035a\7B\2\2\u035a\u035b\3\2\2\2\u035b\u035c\5\u013e\u009e\2\u035c"+ + "{\3\2\2\2\u035d\u035e\7v\2\2\u035e\u035f\7j\2\2\u035f\u0360\7k\2\2\u0360"+ + "\u0361\7u\2\2\u0361\u0362\7B\2\2\u0362\u0363\3\2\2\2\u0363\u0364\5\u013e"+ + "\u009e\2\u0364}\3\2\2\2\u0365\u0366\7u\2\2\u0366\u0367\7w\2\2\u0367\u0368"+ + "\7r\2\2\u0368\u0369\7g\2\2\u0369\u036a\7t\2\2\u036a\u036b\7B\2\2\u036b"+ + "\u036c\3\2\2\2\u036c\u036d\5\u013e\u009e\2\u036d\177\3\2\2\2\u036e\u036f"+ + "\7h\2\2\u036f\u0370\7k\2\2\u0370\u0371\7n\2\2\u0371\u0372\7g\2\2\u0372"+ + "\u0081\3\2\2\2\u0373\u0374\7h\2\2\u0374\u0375\7k\2\2\u0375\u0376\7g\2"+ + "\2\u0376\u0377\7n\2\2\u0377\u0378\7f\2\2\u0378\u0083\3\2\2\2\u0379\u037a"+ + "\7r\2\2\u037a\u037b\7t\2\2\u037b\u037c\7q\2\2\u037c\u037d\7r\2\2\u037d"+ + "\u037e\7g\2\2\u037e\u037f\7t\2\2\u037f\u0380\7v\2\2\u0380\u0381\7{\2\2"+ + "\u0381\u0085\3\2\2\2\u0382\u0383\7i\2\2\u0383\u0384\7g\2\2\u0384\u0385"+ + "\7v\2\2\u0385\u0087\3\2\2\2\u0386\u0387\7u\2\2\u0387\u0388\7g\2\2\u0388"+ + "\u0389\7v\2\2\u0389\u0089\3\2\2\2\u038a\u038b\7t\2\2\u038b\u038c\7g\2"+ + "\2\u038c\u038d\7e\2\2\u038d\u038e\7g\2\2\u038e\u038f\7k\2\2\u038f\u0390"+ + "\7x\2\2\u0390\u0391\7g\2\2\u0391\u0392\7t\2\2\u0392\u008b\3\2\2\2\u0393"+ + "\u0394\7r\2\2\u0394\u0395\7c\2\2\u0395\u0396\7t\2\2\u0396\u0397\7c\2\2"+ + "\u0397\u0398\7o\2\2\u0398\u008d\3\2\2\2\u0399\u039a\7u\2\2\u039a\u039b"+ + "\7g\2\2\u039b\u039c\7v\2\2\u039c\u039d\7r\2\2\u039d\u039e\7c\2\2\u039e"+ + "\u039f\7t\2\2\u039f\u03a0\7c\2\2\u03a0\u03a1\7o\2\2\u03a1\u008f\3\2\2"+ + "\2\u03a2\u03a3\7f\2\2\u03a3\u03a4\7g\2\2\u03a4\u03a5\7n\2\2\u03a5\u03a6"+ + "\7g\2\2\u03a6\u03a7\7i\2\2\u03a7\u03a8\7c\2\2\u03a8\u03a9\7v\2\2\u03a9"+ + "\u03aa\7g\2\2\u03aa\u0091\3\2\2\2\u03ab\u03ac\7r\2\2\u03ac\u03ad\7c\2"+ + "\2\u03ad\u03ae\7e\2\2\u03ae\u03af\7m\2\2\u03af\u03b0\7c\2\2\u03b0\u03b1"+ + "\7i\2\2\u03b1\u03b2\7g\2\2\u03b2\u0093\3\2\2\2\u03b3\u03b4\7k\2\2\u03b4"+ + "\u03b5\7o\2\2\u03b5\u03b6\7r\2\2\u03b6\u03b7\7q\2\2\u03b7\u03b8\7t\2\2"+ + "\u03b8\u03b9\7v\2\2\u03b9\u0095\3\2\2\2\u03ba\u03bb\7e\2\2\u03bb\u03bc"+ + "\7n\2\2\u03bc\u03bd\7c\2\2\u03bd\u03be\7u\2\2\u03be\u03bf\7u\2\2\u03bf"+ + "\u0097\3\2\2\2\u03c0\u03c1\7k\2\2\u03c1\u03c2\7p\2\2\u03c2\u03c3\7v\2"+ + "\2\u03c3\u03c4\7g\2\2\u03c4\u03c5\7t\2\2\u03c5\u03c6\7h\2\2\u03c6\u03c7"+ + "\7c\2\2\u03c7\u03c8\7e\2\2\u03c8\u03c9\7g\2\2\u03c9\u0099\3\2\2\2\u03ca"+ + "\u03cb\7h\2\2\u03cb\u03cc\7w\2\2\u03cc\u03cd\7p\2\2\u03cd\u009b\3\2\2"+ + "\2\u03ce\u03cf\7q\2\2\u03cf\u03d0\7d\2\2\u03d0\u03d1\7l\2\2\u03d1\u03d2"+ + "\7g\2\2\u03d2\u03d3\7e\2\2\u03d3\u03d4\7v\2\2\u03d4\u009d\3\2\2\2\u03d5"+ + "\u03d6\7x\2\2\u03d6\u03d7\7c\2\2\u03d7\u03d8\7n\2\2\u03d8\u009f\3\2\2"+ + "\2\u03d9\u03da\7x\2\2\u03da\u03db\7c\2\2\u03db\u03dc\7t\2\2\u03dc\u00a1"+ + "\3\2\2\2\u03dd\u03de\7v\2\2\u03de\u03df\7{\2\2\u03df\u03e0\7r\2\2\u03e0"+ + "\u03e1\7g\2\2\u03e1\u03e2\7c\2\2\u03e2\u03e3\7n\2\2\u03e3\u03e4\7k\2\2"+ + "\u03e4\u03e5\7c\2\2\u03e5\u03e6\7u\2\2\u03e6\u00a3\3\2\2\2\u03e7\u03e8"+ + "\7e\2\2\u03e8\u03e9\7q\2\2\u03e9\u03ea\7p\2\2\u03ea\u03eb\7u\2\2\u03eb"+ + "\u03ec\7v\2\2\u03ec\u03ed\7t\2\2\u03ed\u03ee\7w\2\2\u03ee\u03ef\7e\2\2"+ + "\u03ef\u03f0\7v\2\2\u03f0\u03f1\7q\2\2\u03f1\u03f2\7t\2\2\u03f2\u00a5"+ + "\3\2\2\2\u03f3\u03f4\7d\2\2\u03f4\u03f5\7{\2\2\u03f5\u00a7\3\2\2\2\u03f6"+ + "\u03f7\7e\2\2\u03f7\u03f8\7q\2\2\u03f8\u03f9\7o\2\2\u03f9\u03fa\7r\2\2"+ + "\u03fa\u03fb\7c\2\2\u03fb\u03fc\7p\2\2\u03fc\u03fd\7k\2\2\u03fd\u03fe"+ + "\7q\2\2\u03fe\u03ff\7p\2\2\u03ff\u00a9\3\2\2\2\u0400\u0401\7k\2\2\u0401"+ + "\u0402\7p\2\2\u0402\u0403\7k\2\2\u0403\u0404\7v\2\2\u0404\u00ab\3\2\2"+ + "\2\u0405\u0406\7v\2\2\u0406\u0407\7j\2\2\u0407\u0408\7k\2\2\u0408\u0409"+ + "\7u\2\2\u0409\u00ad\3\2\2\2\u040a\u040b\7u\2\2\u040b\u040c\7w\2\2\u040c"+ + "\u040d\7r\2\2\u040d\u040e\7g\2\2\u040e\u040f\7t\2\2\u040f\u00af\3\2\2"+ + "\2\u0410\u0411\7v\2\2\u0411\u0412\7{\2\2\u0412\u0413\7r\2\2\u0413\u0414"+ + "\7g\2\2\u0414\u0415\7q\2\2\u0415\u0416\7h\2\2\u0416\u00b1\3\2\2\2\u0417"+ + "\u0418\7y\2\2\u0418\u0419\7j\2\2\u0419\u041a\7g\2\2\u041a\u041b\7t\2\2"+ + "\u041b\u041c\7g\2\2\u041c\u00b3\3\2\2\2\u041d\u041e\7k\2\2\u041e\u041f"+ + "\7h\2\2\u041f\u00b5\3\2\2\2\u0420\u0421\7g\2\2\u0421\u0422\7n\2\2\u0422"+ + "\u0423\7u\2\2\u0423\u0424\7g\2\2\u0424\u00b7\3\2\2\2\u0425\u0426\7y\2"+ + "\2\u0426\u0427\7j\2\2\u0427\u0428\7g\2\2\u0428\u0429\7p\2\2\u0429\u00b9"+ + "\3\2\2\2\u042a\u042b\7v\2\2\u042b\u042c\7t\2\2\u042c\u042d\7{\2\2\u042d"+ + "\u00bb\3\2\2\2\u042e\u042f\7e\2\2\u042f\u0430\7c\2\2\u0430\u0431\7v\2"+ + "\2\u0431\u0432\7e\2\2\u0432\u0433\7j\2\2\u0433\u00bd\3\2\2\2\u0434\u0435"+ + "\7h\2\2\u0435\u0436\7k\2\2\u0436\u0437\7p\2\2\u0437\u0438\7c\2\2\u0438"+ + "\u0439\7n\2\2\u0439\u043a\7n\2\2\u043a\u043b\7{\2\2\u043b\u00bf\3\2\2"+ + "\2\u043c\u043d\7h\2\2\u043d\u043e\7q\2\2\u043e\u043f\7t\2\2\u043f\u00c1"+ + "\3\2\2\2\u0440\u0441\7f\2\2\u0441\u0442\7q\2\2\u0442\u00c3\3\2\2\2\u0443"+ + "\u0444\7y\2\2\u0444\u0445\7j\2\2\u0445\u0446\7k\2\2\u0446\u0447\7n\2\2"+ + "\u0447\u0448\7g\2\2\u0448\u00c5\3\2\2\2\u0449\u044a\7v\2\2\u044a\u044b"+ + "\7j\2\2\u044b\u044c\7t\2\2\u044c\u044d\7q\2\2\u044d\u044e\7y\2\2\u044e"+ + "\u00c7\3\2\2\2\u044f\u0450\7t\2\2\u0450\u0451\7g\2\2\u0451\u0452\7v\2"+ + "\2\u0452\u0453\7w\2\2\u0453\u0454\7t\2\2\u0454\u0455\7p\2\2\u0455\u00c9"+ + "\3\2\2\2\u0456\u0457\7e\2\2\u0457\u0458\7q\2\2\u0458\u0459\7p\2\2\u0459"+ + "\u045a\7v\2\2\u045a\u045b\7k\2\2\u045b\u045c\7p\2\2\u045c\u045d\7w\2\2"+ + "\u045d\u045e\7g\2\2\u045e\u00cb\3\2\2\2\u045f\u0460\7d\2\2\u0460\u0461"+ + "\7t\2\2\u0461\u0462\7g\2\2\u0462\u0463\7c\2\2\u0463\u0464\7m\2\2\u0464"+ + "\u00cd\3\2\2\2\u0465\u0466\7c\2\2\u0466\u0467\7u\2\2\u0467\u00cf\3\2\2"+ + "\2\u0468\u0469\7k\2\2\u0469\u046a\7u\2\2\u046a\u00d1\3\2\2\2\u046b\u046c"+ + "\7k\2\2\u046c\u046d\7p\2\2\u046d\u00d3\3\2\2\2\u046e\u046f\7#\2\2\u046f"+ + "\u0470\7k\2\2\u0470\u0471\7u\2\2\u0471\u0474\3\2\2\2\u0472\u0475\5\20"+ + "\7\2\u0473\u0475\5\16\6\2\u0474\u0472\3\2\2\2\u0474\u0473\3\2\2\2\u0475"+ + "\u00d5\3\2\2\2\u0476\u0477\7#\2\2\u0477\u0478\7k\2\2\u0478\u0479\7p\2"+ + "\2\u0479\u047c\3\2\2\2\u047a\u047d\5\20\7\2\u047b\u047d\5\16\6\2\u047c"+ + "\u047a\3\2\2\2\u047c\u047b\3\2\2\2\u047d\u00d7\3\2\2\2\u047e\u047f\7q"+ + "\2\2\u047f\u0480\7w\2\2\u0480\u0481\7v\2\2\u0481\u00d9\3\2\2\2\u0482\u0483"+ + "\7f\2\2\u0483\u0484\7{\2\2\u0484\u0485\7p\2\2\u0485\u0486\7c\2\2\u0486"+ + "\u0487\7o\2\2\u0487\u0488\7k\2\2\u0488\u0489\7e\2\2\u0489\u00db\3\2\2"+ + "\2\u048a\u048b\7r\2\2\u048b\u048c\7w\2\2\u048c\u048d\7d\2\2\u048d\u048e"+ + "\7n\2\2\u048e\u048f\7k\2\2\u048f\u0490\7e\2\2\u0490\u00dd\3\2\2\2\u0491"+ + "\u0492\7r\2\2\u0492\u0493\7t\2\2\u0493\u0494\7k\2\2\u0494\u0495\7x\2\2"+ + "\u0495\u0496\7c\2\2\u0496\u0497\7v\2\2\u0497\u0498\7g\2\2\u0498\u00df"+ + "\3\2\2\2\u0499\u049a\7r\2\2\u049a\u049b\7t\2\2\u049b\u049c\7q\2\2\u049c"+ + "\u049d\7v\2\2\u049d\u049e\7g\2\2\u049e\u049f\7e\2\2\u049f\u04a0\7v\2\2"+ + "\u04a0\u04a1\7g\2\2\u04a1\u04a2\7f\2\2\u04a2\u00e1\3\2\2\2\u04a3\u04a4"+ + "\7k\2\2\u04a4\u04a5\7p\2\2\u04a5\u04a6\7v\2\2\u04a6\u04a7\7g\2\2\u04a7"+ + "\u04a8\7t\2\2\u04a8\u04a9\7p\2\2\u04a9\u04aa\7c\2\2\u04aa\u04ab\7n\2\2"+ + "\u04ab\u00e3\3\2\2\2\u04ac\u04ad\7g\2\2\u04ad\u04ae\7p\2\2\u04ae\u04af"+ + "\7w\2\2\u04af\u04b0\7o\2\2\u04b0\u00e5\3\2\2\2\u04b1\u04b2\7u\2\2\u04b2"+ + "\u04b3\7g\2\2\u04b3\u04b4\7c\2\2\u04b4\u04b5\7n\2\2\u04b5\u04b6\7g\2\2"+ + "\u04b6\u04b7\7f\2\2\u04b7\u00e7\3\2\2\2\u04b8\u04b9\7c\2\2\u04b9\u04ba"+ + "\7p\2\2\u04ba\u04bb\7p\2\2\u04bb\u04bc\7q\2\2\u04bc\u04bd\7v\2\2\u04bd"+ + "\u04be\7c\2\2\u04be\u04bf\7v\2\2\u04bf\u04c0\7k\2\2\u04c0\u04c1\7q\2\2"+ + "\u04c1\u04c2\7p\2\2\u04c2\u00e9\3\2\2\2\u04c3\u04c4\7f\2\2\u04c4\u04c5"+ + "\7c\2\2\u04c5\u04c6\7v\2\2\u04c6\u04c7\7c\2\2\u04c7\u00eb\3\2\2\2\u04c8"+ + "\u04c9\7k\2\2\u04c9\u04ca\7p\2\2\u04ca\u04cb\7p\2\2\u04cb\u04cc\7g\2\2"+ + "\u04cc\u04cd\7t\2\2\u04cd\u00ed\3\2\2\2\u04ce\u04cf\7x\2\2\u04cf\u04d0"+ + "\7c\2\2\u04d0\u04d1\7n\2\2\u04d1\u04d2\7w\2\2\u04d2\u04d3\7g\2\2\u04d3"+ + "\u00ef\3\2\2\2\u04d4\u04d5\7v\2\2\u04d5\u04d6\7c\2\2\u04d6\u04d7\7k\2"+ + "\2\u04d7\u04d8\7n\2\2\u04d8\u04d9\7t\2\2\u04d9\u04da\7g\2\2\u04da\u04db"+ + "\7e\2\2\u04db\u00f1\3\2\2\2\u04dc\u04dd\7q\2\2\u04dd\u04de\7r\2\2\u04de"+ + "\u04df\7g\2\2\u04df\u04e0\7t\2\2\u04e0\u04e1\7c\2\2\u04e1\u04e2\7v\2\2"+ + "\u04e2\u04e3\7q\2\2\u04e3\u04e4\7t\2\2\u04e4\u00f3\3\2\2\2\u04e5\u04e6"+ + "\7k\2\2\u04e6\u04e7\7p\2\2\u04e7\u04e8\7n\2\2\u04e8\u04e9\7k\2\2\u04e9"+ + "\u04ea\7p\2\2\u04ea\u04eb\7g\2\2\u04eb\u00f5\3\2\2\2\u04ec\u04ed\7k\2"+ + "\2\u04ed\u04ee\7p\2\2\u04ee\u04ef\7h\2\2\u04ef\u04f0\7k\2\2\u04f0\u04f1"+ + "\7z\2\2\u04f1\u00f7\3\2\2\2\u04f2\u04f3\7g\2\2\u04f3\u04f4\7z\2\2\u04f4"+ + "\u04f5\7v\2\2\u04f5\u04f6\7g\2\2\u04f6\u04f7\7t\2\2\u04f7\u04f8\7p\2\2"+ + "\u04f8\u04f9\7c\2\2\u04f9\u04fa\7n\2\2\u04fa\u00f9\3\2\2\2\u04fb\u04fc"+ + "\7u\2\2\u04fc\u04fd\7w\2\2\u04fd\u04fe\7u\2\2\u04fe\u04ff\7r\2\2\u04ff"+ + "\u0500\7g\2\2\u0500\u0501\7p\2\2\u0501\u0502\7f\2\2\u0502\u00fb\3\2\2"+ + "\2\u0503\u0504\7q\2\2\u0504\u0505\7x\2\2\u0505\u0506\7g\2\2\u0506\u0507"+ + "\7t\2\2\u0507\u0508\7t\2\2\u0508\u0509\7k\2\2\u0509\u050a\7f\2\2\u050a"+ + "\u050b\7g\2\2\u050b\u00fd\3\2\2\2\u050c\u050d\7c\2\2\u050d\u050e\7d\2"+ + "\2\u050e\u050f\7u\2\2\u050f\u0510\7v\2\2\u0510\u0511\7t\2\2\u0511\u0512"+ + "\7c\2\2\u0512\u0513\7e\2\2\u0513\u0514\7v\2\2\u0514\u00ff\3\2\2\2\u0515"+ + "\u0516\7h\2\2\u0516\u0517\7k\2\2\u0517\u0518\7p\2\2\u0518\u0519\7c\2\2"+ + "\u0519\u051a\7n\2\2\u051a\u0101\3\2\2\2\u051b\u051c\7q\2\2\u051c\u051d"+ + "\7r\2\2\u051d\u051e\7g\2\2\u051e\u051f\7p\2\2\u051f\u0103\3\2\2\2\u0520"+ + "\u0521\7e\2\2\u0521\u0522\7q\2\2\u0522\u0523\7p\2\2\u0523\u0524\7u\2\2"+ + "\u0524\u0525\7v\2\2\u0525\u0105\3\2\2\2\u0526\u0527\7n\2\2\u0527\u0528"+ + "\7c\2\2\u0528\u0529\7v\2\2\u0529\u052a\7g\2\2\u052a\u052b\7k\2\2\u052b"+ + "\u052c\7p\2\2\u052c\u052d\7k\2\2\u052d\u052e\7v\2\2\u052e\u0107\3\2\2"+ + "\2\u052f\u0530\7x\2\2\u0530\u0531\7c\2\2\u0531\u0532\7t\2\2\u0532\u0533"+ + "\7c\2\2\u0533\u0534\7t\2\2\u0534\u0535\7i\2\2\u0535\u0109\3\2\2\2\u0536"+ + "\u0537\7p\2\2\u0537\u0538\7q\2\2\u0538\u0539\7k\2\2\u0539\u053a\7p\2\2"+ + "\u053a\u053b\7n\2\2\u053b\u053c\7k\2\2\u053c\u053d\7p\2\2\u053d\u053e"+ + "\7g\2\2\u053e\u010b\3\2\2\2\u053f\u0540\7e\2\2\u0540\u0541\7t\2\2\u0541"+ + "\u0542\7q\2\2\u0542\u0543\7u\2\2\u0543\u0544\7u\2\2\u0544\u0545\7k\2\2"+ + "\u0545\u0546\7p\2\2\u0546\u0547\7n\2\2\u0547\u0548\7k\2\2\u0548\u0549"+ + "\7p\2\2\u0549\u054a\7g\2\2\u054a\u010d\3\2\2\2\u054b\u054c\7t\2\2\u054c"+ + "\u054d\7g\2\2\u054d\u054e\7k\2\2\u054e\u054f\7h\2\2\u054f\u0550\7k\2\2"+ + "\u0550\u0551\7g\2\2\u0551\u0552\7f\2\2\u0552\u010f\3\2\2\2\u0553\u0554"+ + "\7g\2\2\u0554\u0555\7z\2\2\u0555\u0556\7r\2\2\u0556\u0557\7g\2\2\u0557"+ + "\u0558\7e\2\2\u0558\u0559\7v\2\2\u0559\u0111\3\2\2\2\u055a\u055b\7c\2"+ + "\2\u055b\u055c\7e\2\2\u055c\u055d\7v\2\2\u055d\u055e\7w\2\2\u055e\u055f"+ + "\7c\2\2\u055f\u0560\7n\2\2\u0560\u0113\3\2\2\2\u0561\u0562\4\62;\2\u0562"+ + "\u0115\3\2\2\2\u0563\u0564\4\63;\2\u0564\u0117\3\2\2\2\u0565\u0568\5\u0114"+ + "\u0089\2\u0566\u0568\7a\2\2\u0567\u0565\3\2\2\2\u0567\u0566\3\2\2\2\u0568"+ + "\u0119\3\2\2\2\u0569\u056d\5\u0114\u0089\2\u056a\u056c\5\u0118\u008b\2"+ + "\u056b\u056a\3\2\2\2\u056c\u056f\3\2\2\2\u056d\u056b\3\2\2\2\u056d\u056e"+ + "\3\2\2\2\u056e\u0570\3\2\2\2\u056f\u056d\3\2\2\2\u0570\u0571\5\u0114\u0089"+ + "\2\u0571\u0574\3\2\2\2\u0572\u0574\5\u0114\u0089\2\u0573\u0569\3\2\2\2"+ + "\u0573\u0572\3\2\2\2\u0574\u011b\3\2\2\2\u0575\u0577\t\4\2\2\u0576\u0578"+ + "\t\5\2\2\u0577\u0576\3\2\2\2\u0577\u0578\3\2\2\2\u0578\u0579\3\2\2\2\u0579"+ + "\u057a\5\u011a\u008c\2\u057a\u011d\3\2\2\2\u057b\u057e\5\u0120\u008f\2"+ + "\u057c\u057e\5\u0122\u0090\2\u057d\u057b\3\2\2\2\u057d\u057c\3\2\2\2\u057e"+ + "\u011f\3\2\2\2\u057f\u0580\5\u0122\u0090\2\u0580\u0581\t\6\2\2\u0581\u0586"+ + "\3\2\2\2\u0582\u0583\5\u011a\u008c\2\u0583\u0584\t\6\2\2\u0584\u0586\3"+ + "\2\2\2\u0585\u057f\3\2\2\2\u0585\u0582\3\2\2\2\u0586\u0121\3\2\2\2\u0587"+ + "\u0589\5\u011a\u008c\2\u0588\u0587\3\2\2\2\u0588\u0589\3\2\2\2\u0589\u058a"+ + "\3\2\2\2\u058a\u058b\7\60\2\2\u058b\u058d\5\u011a\u008c\2\u058c\u058e"+ + "\5\u011c\u008d\2\u058d\u058c\3\2\2\2\u058d\u058e\3\2\2\2\u058e\u0593\3"+ + "\2\2\2\u058f\u0590\5\u011a\u008c\2\u0590\u0591\5\u011c\u008d\2\u0591\u0593"+ + "\3\2\2\2\u0592\u0588\3\2\2\2\u0592\u058f\3\2\2\2\u0593\u0123\3\2\2\2\u0594"+ + "\u0598\5\u0116\u008a\2\u0595\u0597\5\u0118\u008b\2\u0596\u0595\3\2\2\2"+ + "\u0597\u059a\3\2\2\2\u0598\u0596\3\2\2\2\u0598\u0599\3\2\2\2\u0599\u059b"+ + "\3\2\2\2\u059a\u0598\3\2\2\2\u059b\u059c\5\u0114\u0089\2\u059c\u059f\3"+ + "\2\2\2\u059d\u059f\5\u0114\u0089\2\u059e\u0594\3\2\2\2\u059e\u059d\3\2"+ + "\2\2\u059f\u0125\3\2\2\2\u05a0\u05a1\t\7\2\2\u05a1\u0127\3\2\2\2\u05a2"+ + "\u05a5\5\u0126\u0092\2\u05a3\u05a5\7a\2\2\u05a4\u05a2\3\2\2\2\u05a4\u05a3"+ + "\3\2\2\2\u05a5\u0129\3\2\2\2\u05a6\u05a7\7\62\2\2\u05a7\u05a8\t\b\2\2"+ + "\u05a8\u05ac\5\u0126\u0092\2\u05a9\u05ab\5\u0128\u0093\2\u05aa\u05a9\3"+ + "\2\2\2\u05ab\u05ae\3\2\2\2\u05ac\u05aa\3\2\2\2\u05ac\u05ad\3\2\2\2\u05ad"+ + "\u05af\3\2\2\2\u05ae\u05ac\3\2\2\2\u05af\u05b0\5\u0126\u0092\2\u05b0\u05b5"+ + "\3\2\2\2\u05b1\u05b2\7\62\2\2\u05b2\u05b3\t\b\2\2\u05b3\u05b5\5\u0126"+ + "\u0092\2\u05b4\u05a6\3\2\2\2\u05b4\u05b1\3\2\2\2\u05b5\u012b\3\2\2\2\u05b6"+ + "\u05b7\t\t\2\2\u05b7\u012d\3\2\2\2\u05b8\u05bb\5\u012c\u0095\2\u05b9\u05bb"+ + "\7a\2\2\u05ba\u05b8\3\2\2\2\u05ba\u05b9\3\2\2\2\u05bb\u012f\3\2\2\2\u05bc"+ + "\u05bd\7\62\2\2\u05bd\u05be\t\n\2\2\u05be\u05c2\5\u012c\u0095\2\u05bf"+ + "\u05c1\5\u012e\u0096\2\u05c0\u05bf\3\2\2\2\u05c1\u05c4\3\2\2\2\u05c2\u05c0"+ + "\3\2\2\2\u05c2\u05c3\3\2\2\2\u05c3\u05c5\3\2\2\2\u05c4\u05c2\3\2\2\2\u05c5"+ + "\u05c6\5\u012c\u0095\2\u05c6\u05cb\3\2\2\2\u05c7\u05c8\7\62\2\2\u05c8"+ + "\u05c9\t\n\2\2\u05c9\u05cb\5\u012c\u0095\2\u05ca\u05bc\3\2\2\2\u05ca\u05c7"+ + "\3\2\2\2\u05cb\u0131\3\2\2\2\u05cc\u05d0\5\u0124\u0091\2\u05cd\u05d0\5"+ + "\u012a\u0094\2\u05ce\u05d0\5\u0130\u0097\2\u05cf\u05cc\3\2\2\2\u05cf\u05cd"+ + "\3\2\2\2\u05cf\u05ce\3\2\2\2\u05d0\u05d1\3\2\2\2\u05d1\u05d3\t\13\2\2"+ + "\u05d2\u05d4\t\f\2\2\u05d3\u05d2\3\2\2\2\u05d3\u05d4\3\2\2\2\u05d4\u0133"+ + "\3\2\2\2\u05d5\u05d9\5\u0124\u0091\2\u05d6\u05d9\5\u012a\u0094\2\u05d7"+ + "\u05d9\5\u0130\u0097\2\u05d8\u05d5\3\2\2\2\u05d8\u05d6\3\2\2\2\u05d8\u05d7"+ + "\3\2\2\2\u05d9\u05da\3\2\2\2\u05da\u05db\t\f\2\2\u05db\u0135\3\2\2\2\u05dc"+ + "\u05dd\7v\2\2\u05dd\u05de\7t\2\2\u05de\u05df\7w\2\2\u05df\u05e6\7g\2\2"+ + "\u05e0\u05e1\7h\2\2\u05e1\u05e2\7c\2\2\u05e2\u05e3\7n\2\2\u05e3\u05e4"+ + "\7u\2\2\u05e4\u05e6\7g\2\2\u05e5\u05dc\3\2\2\2\u05e5\u05e0\3\2\2\2\u05e6"+ + "\u0137\3\2\2\2\u05e7\u05e8\7p\2\2\u05e8\u05e9\7w\2\2\u05e9\u05ea\7n\2"+ + "\2\u05ea\u05eb\7n\2\2\u05eb\u0139\3\2\2\2\u05ec\u05ef\7)\2\2\u05ed\u05f0"+ + "\5\u0148\u00a3\2\u05ee\u05f0\n\r\2\2\u05ef\u05ed\3\2\2\2\u05ef\u05ee\3"+ + "\2\2\2\u05f0\u05f1\3\2\2\2\u05f1\u05f2\7)\2\2\u05f2\u013b\3\2\2\2\u05f3"+ + "\u05f4\5\u015a\u00ac\2\u05f4\u013d\3\2\2\2\u05f5\u05f8\5\u014a\u00a4\2"+ + "\u05f6\u05f8\7a\2\2\u05f7\u05f5\3\2\2\2\u05f7\u05f6\3\2\2\2\u05f8\u05fe"+ + "\3\2\2\2\u05f9\u05fd\5\u014a\u00a4\2\u05fa\u05fd\7a\2\2\u05fb\u05fd\5"+ + "\u013c\u009d\2\u05fc\u05f9\3\2\2\2\u05fc\u05fa\3\2\2\2\u05fc\u05fb\3\2"+ + "\2\2\u05fd\u0600\3\2\2\2\u05fe\u05fc\3\2\2\2\u05fe\u05ff\3\2\2\2\u05ff"+ + "\u0609\3\2\2\2\u0600\u05fe\3\2\2\2\u0601\u0603\7b\2\2\u0602\u0604\n\16"+ + "\2\2\u0603\u0602\3\2\2\2\u0604\u0605\3\2\2\2\u0605\u0603\3\2\2\2\u0605"+ + "\u0606\3\2\2\2\u0606\u0607\3\2\2\2\u0607\u0609\7b\2\2\u0608\u05f7\3\2"+ + "\2\2\u0608\u0601\3\2\2\2\u0609\u013f\3\2\2\2\u060a\u063b\5\u013e\u009e"+ + "\2\u060b\u063b\5\u00fe~\2\u060c\u063b\5\u00e8s\2\u060d\u063b\5\u00a6R"+ + "\2\u060e\u063b\5\u00bc]\2\u060f\u063b\5\u00a8S\2\u0610\u063b\5\u00a4Q"+ + "\2\u0611\u063b\5\u010c\u0085\2\u0612\u063b\5\u00eat\2\u0613\u063b\5\u00da"+ + "l\2\u0614\u063b\5\u00e4q\2\u0615\u063b\5\u00f8{\2\u0616\u063b\5\u0100"+ + "\177\2\u0617\u063b\5\u00be^\2\u0618\u063b\5\u0094I\2\u0619\u063b\5\u00f6"+ + "z\2\u061a\u063b\5\u00aaT\2\u061b\u063b\5\u00f4y\2\u061c\u063b\5\u00ec"+ + "u\2\u061d\u063b\5\u00e2p\2\u061e\u063b\5\u0106\u0082\2\u061f\u063b\5\u010a"+ + "\u0084\2\u0620\u063b\5\u0102\u0080\2\u0621\u063b\5\u00f2x\2\u0622\u063b"+ + "\5\u00d8k\2\u0623\u063b\5\u00fc}\2\u0624\u063b\5\u00den\2\u0625\u063b"+ + "\5\u00e0o\2\u0626\u063b\5\u00dcm\2\u0627\u063b\5\u010e\u0086\2\u0628\u063b"+ + "\5\u00e6r\2\u0629\u063b\5\u00f0w\2\u062a\u063b\5\u0108\u0083\2\u062b\u063b"+ + "\5\u00b2X\2\u062c\u063b\5\u0086B\2\u062d\u063b\5\u0088C\2\u062e\u063b"+ + "\5\u0082@\2\u062f\u063b\5\u0084A\2\u0630\u063b\5\u008aD\2\u0631\u063b"+ + "\5\u008cE\2\u0632\u063b\5\u008eF\2\u0633\u063b\5\u0090G\2\u0634\u063b"+ + "\5\u0080?\2\u0635\u063b\5\u0110\u0087\2\u0636\u063b\5\u0112\u0088\2\u0637"+ + "\u063b\5\u00eev\2\u0638\u063b\5\u0104\u0081\2\u0639\u063b\5\u00fa|\2\u063a"+ + "\u060a\3\2\2\2\u063a\u060b\3\2\2\2\u063a\u060c\3\2\2\2\u063a\u060d\3\2"+ + "\2\2\u063a\u060e\3\2\2\2\u063a\u060f\3\2\2\2\u063a\u0610\3\2\2\2\u063a"+ + "\u0611\3\2\2\2\u063a\u0612\3\2\2\2\u063a\u0613\3\2\2\2\u063a\u0614\3\2"+ + "\2\2\u063a\u0615\3\2\2\2\u063a\u0616\3\2\2\2\u063a\u0617\3\2\2\2\u063a"+ + "\u0618\3\2\2\2\u063a\u0619\3\2\2\2\u063a\u061a\3\2\2\2\u063a\u061b\3\2"+ + "\2\2\u063a\u061c\3\2\2\2\u063a\u061d\3\2\2\2\u063a\u061e\3\2\2\2\u063a"+ + "\u061f\3\2\2\2\u063a\u0620\3\2\2\2\u063a\u0621\3\2\2\2\u063a\u0622\3\2"+ + "\2\2\u063a\u0623\3\2\2\2\u063a\u0624\3\2\2\2\u063a\u0625\3\2\2\2\u063a"+ + "\u0626\3\2\2\2\u063a\u0627\3\2\2\2\u063a\u0628\3\2\2\2\u063a\u0629\3\2"+ + "\2\2\u063a\u062a\3\2\2\2\u063a\u062b\3\2\2\2\u063a\u062c\3\2\2\2\u063a"+ + "\u062d\3\2\2\2\u063a\u062e\3\2\2\2\u063a\u062f\3\2\2\2\u063a\u0630\3\2"+ + "\2\2\u063a\u0631\3\2\2\2\u063a\u0632\3\2\2\2\u063a\u0633\3\2\2\2\u063a"+ + "\u0634\3\2\2\2\u063a\u0635\3\2\2\2\u063a\u0636\3\2\2\2\u063a\u0637\3\2"+ + "\2\2\u063a\u0638\3\2\2\2\u063a\u0639\3\2\2\2\u063b\u0141\3\2\2\2\u063c"+ + "\u063d\7&\2\2\u063d\u063e\5\u0140\u009f\2\u063e\u0143\3\2\2\2\u063f\u0640"+ + "\7^\2\2\u0640\u0641\7w\2\2\u0641\u0642\5\u0126\u0092\2\u0642\u0643\5\u0126"+ + "\u0092\2\u0643\u0644\5\u0126\u0092\2\u0644\u0645\5\u0126\u0092\2\u0645"+ + "\u0145\3\2\2\2\u0646\u0647\7^\2\2\u0647\u0648\t\17\2\2\u0648\u0147\3\2"+ + "\2\2\u0649\u064c\5\u0144\u00a1\2\u064a\u064c\5\u0146\u00a2\2\u064b\u0649"+ + "\3\2\2\2\u064b\u064a\3\2\2\2\u064c\u0149\3\2\2\2\u064d\u0653\5\u0158\u00ab"+ + "\2\u064e\u0653\5\u0150\u00a7\2\u064f\u0653\5\u0156\u00aa\2\u0650\u0653"+ + "\5\u0152\u00a8\2\u0651\u0653\5\u0154\u00a9\2\u0652\u064d\3\2\2\2\u0652"+ + "\u064e\3\2\2\2\u0652\u064f\3\2\2\2\u0652\u0650\3\2\2\2\u0652\u0651\3\2"+ + "\2\2\u0653\u014b\3\2\2\2\u0654\u0655\7$\2\2\u0655\u0656\3\2\2\2\u0656"+ + "\u0657\b\u00a5\6\2\u0657\u014d\3\2\2\2\u0658\u0659\7$\2\2\u0659\u065a"+ + "\7$\2\2\u065a\u065b\7$\2\2\u065b\u065c\3\2\2\2\u065c\u065d\b\u00a6\7\2"+ + "\u065d\u014f\3\2\2\2\u065e\u065f\t\20\2\2\u065f\u0151\3\2\2\2\u0660\u0661"+ + "\t\21\2\2\u0661\u0153\3\2\2\2\u0662\u0663\t\22\2\2\u0663\u0155\3\2\2\2"+ + "\u0664\u0665\t\23\2\2\u0665\u0157\3\2\2\2\u0666\u0667\t\24\2\2\u0667\u0159"+ + "\3\2\2\2\u0668\u0669\t\25\2\2\u0669\u015b\3\2\2\2\u066a\u066b\t\26\2\2"+ + "\u066b\u015d\3\2\2\2\u066c\u066d\7$\2\2\u066d\u066e\3\2\2\2\u066e\u066f"+ + "\b\u00ae\b\2\u066f\u015f\3\2\2\2\u0670\u0671\5\u0142\u00a0\2\u0671\u0161"+ + "\3\2\2\2\u0672\u0674\n\27\2\2\u0673\u0672\3\2\2\2\u0674\u0675\3\2\2\2"+ + "\u0675\u0673\3\2\2\2\u0675\u0676\3\2\2\2\u0676\u0679\3\2\2\2\u0677\u0679"+ + "\7&\2\2\u0678\u0673\3\2\2\2\u0678\u0677\3\2\2\2\u0679\u0163\3\2\2\2\u067a"+ + "\u067d\5\u0146\u00a2\2\u067b\u067d\5\u0144\u00a1\2\u067c\u067a\3\2\2\2"+ + "\u067c\u067b\3\2\2\2\u067d\u0165\3\2\2\2\u067e\u067f\7&\2\2\u067f\u0680"+ + "\7}\2\2\u0680\u0681\3\2\2\2\u0681\u0682\b\u00b2\4\2\u0682\u0167\3\2\2"+ + "\2\u0683\u0685\5\u016a\u00b4\2\u0684\u0683\3\2\2\2\u0684\u0685\3\2\2\2"+ + "\u0685\u0686\3\2\2\2\u0686\u0687\7$\2\2\u0687\u0688\7$\2\2\u0688\u0689"+ + "\7$\2\2\u0689\u068a\3\2\2\2\u068a\u068b\b\u00b3\b\2\u068b\u0169\3\2\2"+ + "\2\u068c\u068e\7$\2\2\u068d\u068c\3\2\2\2\u068e\u068f\3\2\2\2\u068f\u068d"+ + "\3\2\2\2\u068f\u0690\3\2\2\2\u0690\u016b\3\2\2\2\u0691\u0692\5\u0142\u00a0"+ + "\2\u0692\u016d\3\2\2\2\u0693\u0695\n\30\2\2\u0694\u0693\3\2\2\2\u0695"+ + "\u0696\3\2\2\2\u0696\u0694\3\2\2\2\u0696\u0697\3\2\2\2\u0697\u069a\3\2"+ + "\2\2\u0698\u069a\7&\2\2\u0699\u0694\3\2\2\2\u0699\u0698\3\2\2\2\u069a"+ + "\u016f\3\2\2\2\u069b\u069c\7&\2\2\u069c\u069d\7}\2\2\u069d\u069e\3\2\2"+ + "\2\u069e\u069f\b\u00b7\4\2\u069f\u0171\3\2\2\2\u06a0\u06a1\5\32\f\2\u06a1"+ + "\u06a2\3\2\2\2\u06a2\u06a3\b\u00b8\b\2\u06a3\u06a4\b\u00b8\t\2\u06a4\u0173"+ + "\3\2\2\2\u06a5\u06a6\5\36\16\2\u06a6\u06a7\3\2\2\2\u06a7\u06a8\b\u00b9"+ + "\b\2\u06a8\u06a9\b\u00b9\n\2\u06a9\u0175\3\2\2\2\u06aa\u06ab\5\30\13\2"+ + "\u06ab\u06ac\3\2\2\2\u06ac\u06ad\b\u00ba\3\2\u06ad\u06ae\b\u00ba\13\2"+ + "\u06ae\u0177\3\2\2\2\u06af\u06b0\5\34\r\2\u06b0\u06b1\3\2\2\2\u06b1\u06b2"+ + "\b\u00bb\3\2\u06b2\u06b3\b\u00bb\f\2\u06b3\u0179\3\2\2\2\u06b4\u06b5\5"+ + " \17\2\u06b5\u06b6\3\2\2\2\u06b6\u06b7\b\u00bc\4\2\u06b7\u06b8\b\u00bc"+ + "\r\2\u06b8\u017b\3\2\2\2\u06b9\u06ba\5\"\20\2\u06ba\u06bb\3\2\2\2\u06bb"+ + "\u06bc\b\u00bd\b\2\u06bc\u06bd\b\u00bd\16\2\u06bd\u017d\3\2\2\2\u06be"+ + "\u06bf\5\24\t\2\u06bf\u06c0\3\2\2\2\u06c0\u06c1\b\u00be\17\2\u06c1\u017f"+ + "\3\2\2\2\u06c2\u06c3\5\26\n\2\u06c3\u06c4\3\2\2\2\u06c4\u06c5\b\u00bf"+ + "\20\2\u06c5\u0181\3\2\2\2\u06c6\u06c7\5$\21\2\u06c7\u06c8\3\2\2\2\u06c8"+ + "\u06c9\b\u00c0\21\2\u06c9\u0183\3\2\2\2\u06ca\u06cb\5&\22\2\u06cb\u06cc"+ + "\3\2\2\2\u06cc\u06cd\b\u00c1\22\2\u06cd\u0185\3\2\2\2\u06ce\u06cf\5(\23"+ + "\2\u06cf\u06d0\3\2\2\2\u06d0\u06d1\b\u00c2\23\2\u06d1\u0187\3\2\2\2\u06d2"+ + "\u06d3\5*\24\2\u06d3\u06d4\3\2\2\2\u06d4\u06d5\b\u00c3\24\2\u06d5\u0189"+ + "\3\2\2\2\u06d6\u06d7\5,\25\2\u06d7\u06d8\3\2\2\2\u06d8\u06d9\b\u00c4\25"+ + "\2\u06d9\u018b\3\2\2\2\u06da\u06db\5.\26\2\u06db\u06dc\3\2\2\2\u06dc\u06dd"+ + "\b\u00c5\26\2\u06dd\u018d\3\2\2\2\u06de\u06df\5\60\27\2\u06df\u06e0\3"+ + "\2\2\2\u06e0\u06e1\b\u00c6\27\2\u06e1\u018f\3\2\2\2\u06e2\u06e3\5\62\30"+ + "\2\u06e3\u06e4\3\2\2\2\u06e4\u06e5\b\u00c7\30\2\u06e5\u0191\3\2\2\2\u06e6"+ + "\u06e7\5\64\31\2\u06e7\u06e8\3\2\2\2\u06e8\u06e9\b\u00c8\31\2\u06e9\u0193"+ + "\3\2\2\2\u06ea\u06ed\7#\2\2\u06eb\u06ee\5\20\7\2\u06ec\u06ee\5\16\6\2"+ + "\u06ed\u06eb\3\2\2\2\u06ed\u06ec\3\2\2\2\u06ee\u06ef\3\2\2\2\u06ef\u06f0"+ + "\b\u00c9\32\2\u06f0\u0195\3\2\2\2\u06f1\u06f2\58\33\2\u06f2\u06f3\3\2"+ + "\2\2\u06f3\u06f4\b\u00ca\33\2\u06f4\u0197\3\2\2\2\u06f5\u06f6\5:\34\2"+ + "\u06f6\u06f7\3\2\2\2\u06f7\u06f8\b\u00cb\34\2\u06f8\u0199\3\2\2\2\u06f9"+ + "\u06fa\5<\35\2\u06fa\u06fb\3\2\2\2\u06fb\u06fc\b\u00cc\35\2\u06fc\u019b"+ + "\3\2\2\2\u06fd\u06fe\5>\36\2\u06fe\u06ff\3\2\2\2\u06ff\u0700\b\u00cd\36"+ + "\2\u0700\u019d\3\2\2\2\u0701\u0702\5@\37\2\u0702\u0703\3\2\2\2\u0703\u0704"+ + "\b\u00ce\37\2\u0704\u019f\3\2\2\2\u0705\u0706\5B \2\u0706\u0707\3\2\2"+ + "\2\u0707\u0708\b\u00cf \2\u0708\u01a1\3\2\2\2\u0709\u070a\5D!\2\u070a"+ + "\u070b\3\2\2\2\u070b\u070c\b\u00d0!\2\u070c\u01a3\3\2\2\2\u070d\u070e"+ + "\5F\"\2\u070e\u070f\3\2\2\2\u070f\u0710\b\u00d1\"\2\u0710\u01a5\3\2\2"+ + "\2\u0711\u0712\5H#\2\u0712\u0713\3\2\2\2\u0713\u0714\b\u00d2#\2\u0714"+ + "\u01a7\3\2\2\2\u0715\u0716\5J$\2\u0716\u0717\3\2\2\2\u0717\u0718\b\u00d3"+ + "$\2\u0718\u01a9\3\2\2\2\u0719\u071a\5L%\2\u071a\u071b\3\2\2\2\u071b\u071c"+ + "\b\u00d4%\2\u071c\u01ab\3\2\2\2\u071d\u071e\5N&\2\u071e\u071f\3\2\2\2"+ + "\u071f\u0720\b\u00d5&\2\u0720\u01ad\3\2\2\2\u0721\u0722\5\22\b\2\u0722"+ + "\u0723\3\2\2\2\u0723\u0724\b\u00d6\'\2\u0724\u01af\3\2\2\2\u0725\u0726"+ + "\5P\'\2\u0726\u0727\3\2\2\2\u0727\u0728\b\u00d7(\2\u0728\u01b1\3\2\2\2"+ + "\u0729\u072a\5R(\2\u072a\u072b\3\2\2\2\u072b\u072c\b\u00d8)\2\u072c\u01b3"+ + "\3\2\2\2\u072d\u072e\5T)\2\u072e\u072f\3\2\2\2\u072f\u0730\b\u00d9*\2"+ + "\u0730\u01b5\3\2\2\2\u0731\u0732\5V*\2\u0732\u0733\3\2\2\2\u0733\u0734"+ + "\b\u00da+\2\u0734\u01b7\3\2\2\2\u0735\u0736\5X+\2\u0736\u0737\3\2\2\2"+ + "\u0737\u0738\b\u00db,\2\u0738\u01b9\3\2\2\2\u0739\u073a\5Z,\2\u073a\u073b"+ + "\3\2\2\2\u073b\u073c\b\u00dc-\2\u073c\u01bb\3\2\2\2\u073d\u073e\5\\-\2"+ + "\u073e\u073f\3\2\2\2\u073f\u0740\b\u00dd.\2\u0740\u01bd\3\2\2\2\u0741"+ + "\u0744\7A\2\2\u0742\u0745\5\20\7\2\u0743\u0745\5\16\6\2\u0744\u0742\3"+ + "\2\2\2\u0744\u0743\3\2\2\2\u0745\u0746\3\2\2\2\u0746\u0747\b\u00de/\2"+ + "\u0747\u01bf\3\2\2\2\u0748\u0749\5`/\2\u0749\u074a\3\2\2\2\u074a\u074b"+ + "\b\u00df\60\2\u074b\u01c1\3\2\2\2\u074c\u074d\5b\60\2\u074d\u074e\3\2"+ + "\2\2\u074e\u074f\b\u00e0\61\2\u074f\u01c3\3\2\2\2\u0750\u0751\5d\61\2"+ + "\u0751\u0752\3\2\2\2\u0752\u0753\b\u00e1\62\2\u0753\u01c5\3\2\2\2\u0754"+ + "\u0755\5f\62\2\u0755\u0756\3\2\2\2\u0756\u0757\b\u00e2\63\2\u0757\u01c7"+ + "\3\2\2\2\u0758\u0759\5h\63\2\u0759\u075a\3\2\2\2\u075a\u075b\b\u00e3\64"+ + "\2\u075b\u01c9\3\2\2\2\u075c\u075d\5j\64\2\u075d\u075e\3\2\2\2\u075e\u075f"+ + "\b\u00e4\65\2\u075f\u01cb\3\2\2\2\u0760\u0761\5l\65\2\u0761\u0762\3\2"+ + "\2\2\u0762\u0763\b\u00e5\66\2\u0763\u01cd\3\2\2\2\u0764\u0765\5\u00d0"+ + "g\2\u0765\u0766\3\2\2\2\u0766\u0767\b\u00e6\67\2\u0767\u01cf\3\2\2\2\u0768"+ + "\u0769\5\u00d4i\2\u0769\u076a\3\2\2\2\u076a\u076b\b\u00e78\2\u076b\u01d1"+ + "\3\2\2\2\u076c\u076d\5\u00d6j\2\u076d\u076e\3\2\2\2\u076e\u076f\b\u00e8"+ + "9\2\u076f\u01d3\3\2\2\2\u0770\u0771\5\u00cef\2\u0771\u0772\3\2\2\2\u0772"+ + "\u0773\b\u00e9:\2\u0773\u01d5\3\2\2\2\u0774\u0775\5n\66\2\u0775\u0776"+ + "\3\2\2\2\u0776\u0777\b\u00ea;\2\u0777\u01d7\3\2\2\2\u0778\u0779\5p\67"+ + "\2\u0779\u077a\3\2\2\2\u077a\u077b\b\u00eb<\2\u077b\u01d9\3\2\2\2\u077c"+ + "\u077d\5r8\2\u077d\u077e\3\2\2\2\u077e\u077f\b\u00ec=\2\u077f\u01db\3"+ + "\2\2\2\u0780\u0781\5t9\2\u0781\u0782\3\2\2\2\u0782\u0783\b\u00ed>\2\u0783"+ + "\u01dd\3\2\2\2\u0784\u0785\5\u014c\u00a5\2\u0785\u0786\3\2\2\2\u0786\u0787"+ + "\b\u00ee\6\2\u0787\u0788\b\u00ee?\2\u0788\u01df\3\2\2\2\u0789\u078a\5"+ + "\u014e\u00a6\2\u078a\u078b\3\2\2\2\u078b\u078c\b\u00ef\7\2\u078c\u078d"+ + "\b\u00ef@\2\u078d\u01e1\3\2\2\2\u078e\u078f\5\u009eN\2\u078f\u0790\3\2"+ + "\2\2\u0790\u0791\b\u00f0A\2\u0791\u01e3\3\2\2\2\u0792\u0793\5\u00a0O\2"+ + "\u0793\u0794\3\2\2\2\u0794\u0795\b\u00f1B\2\u0795\u01e5\3\2\2\2\u0796"+ + "\u0797\5\u009aL\2\u0797\u0798\3\2\2\2\u0798\u0799\b\u00f2C\2\u0799\u01e7"+ + "\3\2\2\2\u079a\u079b\5\u009cM\2\u079b\u079c\3\2\2\2\u079c\u079d\b\u00f3"+ + "D\2\u079d\u01e9\3\2\2\2\u079e\u079f\5\u00aeV\2\u079f\u07a0\3\2\2\2\u07a0"+ + "\u07a1\b\u00f4E\2\u07a1\u01eb\3\2\2\2\u07a2\u07a3\5\u00d2h\2\u07a3\u07a4"+ + "\3\2\2\2\u07a4\u07a5\b\u00f5F\2\u07a5\u01ed\3\2\2\2\u07a6\u07a7\5\u00d8"+ + "k\2\u07a7\u07a8\3\2\2\2\u07a8\u07a9\b\u00f6G\2\u07a9\u01ef\3\2\2\2\u07aa"+ + "\u07ab\5\u0082@\2\u07ab\u07ac\3\2\2\2\u07ac\u07ad\b\u00f7H\2\u07ad\u01f1"+ + "\3\2\2\2\u07ae\u07af\5\u0080?\2\u07af\u07b0\3\2\2\2\u07b0\u07b1\b\u00f8"+ + "I\2\u07b1\u01f3\3\2\2\2\u07b2\u07b3\5\u0084A\2\u07b3\u07b4\3\2\2\2\u07b4"+ + "\u07b5\b\u00f9J\2\u07b5\u01f5\3\2\2\2\u07b6\u07b7\5\u0086B\2\u07b7\u07b8"+ + "\3\2\2\2\u07b8\u07b9\b\u00faK\2\u07b9\u01f7\3\2\2\2\u07ba\u07bb\5\u0088"+ + "C\2\u07bb\u07bc\3\2\2\2\u07bc\u07bd\b\u00fbL\2\u07bd\u01f9\3\2\2\2\u07be"+ + "\u07bf\5\u008aD\2\u07bf\u07c0\3\2\2\2\u07c0\u07c1\b\u00fcM\2\u07c1\u01fb"+ + "\3\2\2\2\u07c2\u07c3\5\u008cE\2\u07c3\u07c4\3\2\2\2\u07c4\u07c5\b\u00fd"+ + "N\2\u07c5\u01fd\3\2\2\2\u07c6\u07c7\5\u008eF\2\u07c7\u07c8\3\2\2\2\u07c8"+ + "\u07c9\b\u00feO\2\u07c9\u01ff\3\2\2\2\u07ca\u07cb\5\u0090G\2\u07cb\u07cc"+ + "\3\2\2\2\u07cc\u07cd\b\u00ffP\2\u07cd\u0201\3\2\2\2\u07ce\u07cf\5\u00c6"+ + "b\2\u07cf\u07d0\3\2\2\2\u07d0\u07d1\b\u0100Q\2\u07d1\u0203\3\2\2\2\u07d2"+ + "\u07d3\5\u00c8c\2\u07d3\u07d4\3\2\2\2\u07d4\u07d5\b\u0101R\2\u07d5\u0205"+ + "\3\2\2\2\u07d6\u07d7\5\u00cad\2\u07d7\u07d8\3\2\2\2\u07d8\u07d9\b\u0102"+ + "S\2\u07d9\u0207\3\2\2\2\u07da\u07db\5\u00cce\2\u07db\u07dc\3\2\2\2\u07dc"+ + "\u07dd\b\u0103T\2\u07dd\u0209\3\2\2\2\u07de\u07df\5v:\2\u07df\u07e0\3"+ + "\2\2\2\u07e0\u07e1\b\u0104U\2\u07e1\u020b\3\2\2\2\u07e2\u07e3\5x;\2\u07e3"+ + "\u07e4\3\2\2\2\u07e4\u07e5\b\u0105V\2\u07e5\u020d\3\2\2\2\u07e6\u07e7"+ + "\5z<\2\u07e7\u07e8\3\2\2\2\u07e8\u07e9\b\u0106W\2\u07e9\u020f\3\2\2\2"+ + "\u07ea\u07eb\5\u00b4Y\2\u07eb\u07ec\3\2\2\2\u07ec\u07ed\b\u0107X\2\u07ed"+ + "\u0211\3\2\2\2\u07ee\u07ef\5\u00b6Z\2\u07ef\u07f0\3\2\2\2\u07f0\u07f1"+ + "\b\u0108Y\2\u07f1\u0213\3\2\2\2\u07f2\u07f3\5\u00b8[\2\u07f3\u07f4\3\2"+ + "\2\2\u07f4\u07f5\b\u0109Z\2\u07f5\u0215\3\2\2\2\u07f6\u07f7\5\u00ba\\"+ + "\2\u07f7\u07f8\3\2\2\2\u07f8\u07f9\b\u010a[\2\u07f9\u0217\3\2\2\2\u07fa"+ + "\u07fb\5\u00bc]\2\u07fb\u07fc\3\2\2\2\u07fc\u07fd\b\u010b\\\2\u07fd\u0219"+ + "\3\2\2\2\u07fe\u07ff\5\u00be^\2\u07ff\u0800\3\2\2\2\u0800\u0801\b\u010c"+ + "]\2\u0801\u021b\3\2\2\2\u0802\u0803\5\u00c0_\2\u0803\u0804\3\2\2\2\u0804"+ + "\u0805\b\u010d^\2\u0805\u021d\3\2\2\2\u0806\u0807\5\u00c2`\2\u0807\u0808"+ + "\3\2\2\2\u0808\u0809\b\u010e_\2\u0809\u021f\3\2\2\2\u080a\u080b\5\u00c4"+ + "a\2\u080b\u080c\3\2\2\2\u080c\u080d\b\u010f`\2\u080d\u0221\3\2\2\2\u080e"+ + "\u080f\5\u00dcm\2\u080f\u0810\3\2\2\2\u0810\u0811\b\u0110a\2\u0811\u0223"+ + "\3\2\2\2\u0812\u0813\5\u00den\2\u0813\u0814\3\2\2\2\u0814\u0815\b\u0111"+ + "b\2\u0815\u0225\3\2\2\2\u0816\u0817\5\u00e0o\2\u0817\u0818\3\2\2\2\u0818"+ + "\u0819\b\u0112c\2\u0819\u0227\3\2\2\2\u081a\u081b\5\u00e2p\2\u081b\u081c"+ + "\3\2\2\2\u081c\u081d\b\u0113d\2\u081d\u0229\3\2\2\2\u081e\u081f\5\u00e4"+ + "q\2\u081f\u0820\3\2\2\2\u0820\u0821\b\u0114e\2\u0821\u022b\3\2\2\2\u0822"+ + "\u0823\5\u00e6r\2\u0823\u0824\3\2\2\2\u0824\u0825\b\u0115f\2\u0825\u022d"+ + "\3\2\2\2\u0826\u0827\5\u00e8s\2\u0827\u0828\3\2\2\2\u0828\u0829\b\u0116"+ + "g\2\u0829\u022f\3\2\2\2\u082a\u082b\5\u00eat\2\u082b\u082c\3\2\2\2\u082c"+ + "\u082d\b\u0117h\2\u082d\u0231\3\2\2\2\u082e\u082f\5\u00ecu\2\u082f\u0830"+ + "\3\2\2\2\u0830\u0831\b\u0118i\2\u0831\u0233\3\2\2\2\u0832\u0833\5\u00ee"+ + "v\2\u0833\u0834\3\2\2\2\u0834\u0835\b\u0119j\2\u0835\u0235\3\2\2\2\u0836"+ + "\u0837\5\u00f0w\2\u0837\u0838\3\2\2\2\u0838\u0839\b\u011ak\2\u0839\u0237"+ + "\3\2\2\2\u083a\u083b\5\u00f2x\2\u083b\u083c\3\2\2\2\u083c\u083d\b\u011b"+ + "l\2\u083d\u0239\3\2\2\2\u083e\u083f\5\u00f4y\2\u083f\u0840\3\2\2\2\u0840"+ + "\u0841\b\u011cm\2\u0841\u023b\3\2\2\2\u0842\u0843\5\u00f6z\2\u0843\u0844"+ + "\3\2\2\2\u0844\u0845\b\u011dn\2\u0845\u023d\3\2\2\2\u0846\u0847\5\u00f8"+ + "{\2\u0847\u0848\3\2\2\2\u0848\u0849\b\u011eo\2\u0849\u023f\3\2\2\2\u084a"+ + "\u084b\5\u00fa|\2\u084b\u084c\3\2\2\2\u084c\u084d\b\u011fp\2\u084d\u0241"+ + "\3\2\2\2\u084e\u084f\5\u00fc}\2\u084f\u0850\3\2\2\2\u0850\u0851\b\u0120"+ + "q\2\u0851\u0243\3\2\2\2\u0852\u0853\5\u00fe~\2\u0853\u0854\3\2\2\2\u0854"+ + "\u0855\b\u0121r\2\u0855\u0245\3\2\2\2\u0856\u0857\5\u0100\177\2\u0857"+ + "\u0858\3\2\2\2\u0858\u0859\b\u0122s\2\u0859\u0247\3\2\2\2\u085a\u085b"+ + "\5\u0102\u0080\2\u085b\u085c\3\2\2\2\u085c\u085d\b\u0123t\2\u085d\u0249"+ + "\3\2\2\2\u085e\u085f\5\u0104\u0081\2\u085f\u0860\3\2\2\2\u0860\u0861\b"+ + "\u0124u\2\u0861\u024b\3\2\2\2\u0862\u0863\5\u0106\u0082\2\u0863\u0864"+ + "\3\2\2\2\u0864\u0865\b\u0125v\2\u0865\u024d\3\2\2\2\u0866\u0867\5\u0108"+ + "\u0083\2\u0867\u0868\3\2\2\2\u0868\u0869\b\u0126w\2\u0869\u024f\3\2\2"+ + "\2\u086a\u086b\5\u010a\u0084\2\u086b\u086c\3\2\2\2\u086c\u086d\b\u0127"+ + "x\2"; + private static final String _serializedATNSegment1 = + "\u086d\u0251\3\2\2\2\u086e\u086f\5\u010c\u0085\2\u086f\u0870\3\2\2\2\u0870"+ + "\u0871\b\u0128y\2\u0871\u0253\3\2\2\2\u0872\u0873\5\u010e\u0086\2\u0873"+ + "\u0874\3\2\2\2\u0874\u0875\b\u0129z\2\u0875\u0255\3\2\2\2\u0876\u0877"+ + "\5\u0110\u0087\2\u0877\u0878\3\2\2\2\u0878\u0879\b\u012a{\2\u0879\u0257"+ + "\3\2\2\2\u087a\u087b\5\u0112\u0088\2\u087b\u087c\3\2\2\2\u087c\u087d\b"+ + "\u012b|\2\u087d\u0259\3\2\2\2\u087e\u087f\5\u0136\u009a\2\u087f\u0880"+ + "\3\2\2\2\u0880\u0881\b\u012c}\2\u0881\u025b\3\2\2\2\u0882\u0883\5\u0124"+ + "\u0091\2\u0883\u0884\3\2\2\2\u0884\u0885\b\u012d~\2\u0885\u025d\3\2\2"+ + "\2\u0886\u0887\5\u012a\u0094\2\u0887\u0888\3\2\2\2\u0888\u0889\b\u012e"+ + "\177\2\u0889\u025f\3\2\2\2\u088a\u088b\5\u0130\u0097\2\u088b\u088c\3\2"+ + "\2\2\u088c\u088d\b\u012f\u0080\2\u088d\u0261\3\2\2\2\u088e\u088f\5\u013a"+ + "\u009c\2\u088f\u0890\3\2\2\2\u0890\u0891\b\u0130\u0081\2\u0891\u0263\3"+ + "\2\2\2\u0892\u0893\5\u011e\u008e\2\u0893\u0894\3\2\2\2\u0894\u0895\b\u0131"+ + "\u0082\2\u0895\u0265\3\2\2\2\u0896\u0897\5\u0138\u009b\2\u0897\u0898\3"+ + "\2\2\2\u0898\u0899\b\u0132\u0083\2\u0899\u0267\3\2\2\2\u089a\u089b\5\u0134"+ + "\u0099\2\u089b\u089c\3\2\2\2\u089c\u089d\b\u0133\u0084\2\u089d\u0269\3"+ + "\2\2\2\u089e\u089f\5\u0132\u0098\2\u089f\u08a0\3\2\2\2\u08a0\u08a1\b\u0134"+ + "\u0085\2\u08a1\u026b\3\2\2\2\u08a2\u08a3\5\u013e\u009e\2\u08a3\u08a4\3"+ + "\2\2\2\u08a4\u08a5\b\u0135\u0086\2\u08a5\u026d\3\2\2\2\u08a6\u08a9\5\n"+ + "\4\2\u08a7\u08a9\5\b\3\2\u08a8\u08a6\3\2\2\2\u08a8\u08a7\3\2\2\2\u08a9"+ + "\u08aa\3\2\2\2\u08aa\u08ab\b\u0136\2\2\u08ab\u026f\3\2\2\2\u08ac\u08ad"+ + "\5\f\5\2\u08ad\u08ae\3\2\2\2\u08ae\u08af\b\u0137\2\2\u08af\u0271\3\2\2"+ + "\2\u08b0\u08b1\5\16\6\2\u08b1\u08b2\3\2\2\2\u08b2\u08b3\b\u0138\2\2\u08b3"+ + "\u0273\3\2\2\2\u08b4\u08b5\13\2\2\2\u08b5\u0275\3\2\2\2;\2\3\4\5\u027c"+ + "\u0284\u0286\u0294\u02a0\u02a2\u02a7\u030a\u030e\u0314\u0319\u0474\u047c"+ + "\u0567\u056d\u0573\u0577\u057d\u0585\u0588\u058d\u0592\u0598\u059e\u05a4"+ + "\u05ac\u05b4\u05ba\u05c2\u05ca\u05cf\u05d3\u05d8\u05e5\u05ef\u05f7\u05fc"+ + "\u05fe\u0605\u0608\u063a\u064b\u0652\u0675\u0678\u067c\u0684\u068f\u0696"+ + "\u0699\u06ed\u0744\u08a8\u0087\2\3\2\7\5\2\7\2\2\3\20\2\7\3\2\7\4\2\6"+ + "\2\2\t\f\2\t\16\2\t\13\2\t\r\2\t\17\2\t\20\2\t\t\2\t\n\2\t\21\2\t\22\2"+ + "\t\23\2\t\24\2\t\25\2\t\26\2\t\27\2\t\30\2\t\31\2\t\32\2\t\33\2\t\34\2"+ + "\t\35\2\t\36\2\t\37\2\t \2\t!\2\t\"\2\t#\2\t$\2\t%\2\t&\2\t\b\2\t\'\2"+ + "\t(\2\t)\2\t*\2\t+\2\t,\2\t-\2\t.\2\t/\2\t\60\2\t\61\2\t\62\2\t\63\2\t"+ + "\64\2\t\65\2\tg\2\ti\2\tj\2\tf\2\t\66\2\t\67\2\t8\2\t9\2\t\u0097\2\t\u0098"+ + "\2\tN\2\tO\2\tL\2\tM\2\tV\2\th\2\tk\2\t@\2\t?\2\tA\2\tB\2\tC\2\tD\2\t"+ + "E\2\tF\2\tG\2\tb\2\tc\2\td\2\te\2\t:\2\t;\2\t<\2\tY\2\tZ\2\t[\2\t\\\2"+ + "\t]\2\t^\2\t_\2\t`\2\ta\2\tm\2\tn\2\to\2\tp\2\tq\2\tr\2\ts\2\tt\2\tu\2"+ + "\tv\2\tw\2\tx\2\ty\2\tz\2\t{\2\t|\2\t}\2\t~\2\t\177\2\t\u0080\2\t\u0081"+ + "\2\t\u0082\2\t\u0083\2\t\u0084\2\t\u0085\2\t\u0086\2\t\u0087\2\t\u0088"+ + "\2\t\u0091\2\t\u008c\2\t\u008d\2\t\u008e\2\t\u0093\2\t\u0089\2\t\u0092"+ + "\2\t\u0090\2\t\u008f\2\t\u0094\2"; + public static final String _serializedATN = Utils.join( + new String[] { + _serializedATNSegment0, + _serializedATNSegment1 + }, + "" + ); + public static final ATN _ATN = + new ATNDeserializer().deserialize(_serializedATN.toCharArray()); + static { + _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()]; + for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) { + _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i); + } + } +} \ No newline at end of file diff --git a/lexers/src/main/java/com/itsaky/androidide/lexers/kotlin/KotlinLexer.tokens b/lexers/src/main/java/com/itsaky/androidide/lexers/kotlin/KotlinLexer.tokens new file mode 100644 index 000000000..a207d69c1 --- /dev/null +++ b/lexers/src/main/java/com/itsaky/androidide/lexers/kotlin/KotlinLexer.tokens @@ -0,0 +1,290 @@ +ShebangLine=1 +DelimitedComment=2 +LineComment=3 +WS=4 +NL=5 +RESERVED=6 +DOT=7 +COMMA=8 +LPAREN=9 +RPAREN=10 +LSQUARE=11 +RSQUARE=12 +LCURL=13 +RCURL=14 +MULT=15 +MOD=16 +DIV=17 +ADD=18 +SUB=19 +INCR=20 +DECR=21 +CONJ=22 +DISJ=23 +EXCL_WS=24 +EXCL_NO_WS=25 +COLON=26 +SEMICOLON=27 +ASSIGNMENT=28 +ADD_ASSIGNMENT=29 +SUB_ASSIGNMENT=30 +MULT_ASSIGNMENT=31 +DIV_ASSIGNMENT=32 +MOD_ASSIGNMENT=33 +ARROW=34 +DOUBLE_ARROW=35 +RANGE=36 +COLONCOLON=37 +DOUBLE_SEMICOLON=38 +HASH=39 +AT_NO_WS=40 +AT_POST_WS=41 +AT_PRE_WS=42 +AT_BOTH_WS=43 +QUEST_WS=44 +QUEST_NO_WS=45 +LANGLE=46 +RANGLE=47 +LE=48 +GE=49 +EXCL_EQ=50 +EXCL_EQEQ=51 +AS_SAFE=52 +EQEQ=53 +EQEQEQ=54 +SINGLE_QUOTE=55 +RETURN_AT=56 +CONTINUE_AT=57 +BREAK_AT=58 +THIS_AT=59 +SUPER_AT=60 +FILE=61 +FIELD=62 +PROPERTY=63 +GET=64 +SET=65 +RECEIVER=66 +PARAM=67 +SETPARAM=68 +DELEGATE=69 +PACKAGE=70 +IMPORT=71 +CLASS=72 +INTERFACE=73 +FUN=74 +OBJECT=75 +VAL=76 +VAR=77 +TYPE_ALIAS=78 +CONSTRUCTOR=79 +BY=80 +COMPANION=81 +INIT=82 +THIS=83 +SUPER=84 +TYPEOF=85 +WHERE=86 +IF=87 +ELSE=88 +WHEN=89 +TRY=90 +CATCH=91 +FINALLY=92 +FOR=93 +DO=94 +WHILE=95 +THROW=96 +RETURN=97 +CONTINUE=98 +BREAK=99 +AS=100 +IS=101 +IN=102 +NOT_IS=103 +NOT_IN=104 +OUT=105 +DYNAMIC=106 +PUBLIC=107 +PRIVATE=108 +PROTECTED=109 +INTERNAL=110 +ENUM=111 +SEALED=112 +ANNOTATION=113 +DATA=114 +INNER=115 +VALUE=116 +TAILREC=117 +OPERATOR=118 +INLINE=119 +INFIX=120 +EXTERNAL=121 +SUSPEND=122 +OVERRIDE=123 +ABSTRACT=124 +FINAL=125 +OPEN=126 +CONST=127 +LATEINIT=128 +VARARG=129 +NOINLINE=130 +CROSSINLINE=131 +REIFIED=132 +EXPECT=133 +ACTUAL=134 +RealLiteral=135 +FloatLiteral=136 +DoubleLiteral=137 +IntegerLiteral=138 +HexLiteral=139 +BinLiteral=140 +UnsignedLiteral=141 +LongLiteral=142 +BooleanLiteral=143 +NullLiteral=144 +CharacterLiteral=145 +Identifier=146 +IdentifierOrSoftKey=147 +FieldIdentifier=148 +QUOTE_OPEN=149 +TRIPLE_QUOTE_OPEN=150 +UNICODE_CLASS_LL=151 +UNICODE_CLASS_LM=152 +UNICODE_CLASS_LO=153 +UNICODE_CLASS_LT=154 +UNICODE_CLASS_LU=155 +UNICODE_CLASS_ND=156 +UNICODE_CLASS_NL=157 +QUOTE_CLOSE=158 +LineStrRef=159 +LineStrText=160 +LineStrEscapedChar=161 +LineStrExprStart=162 +TRIPLE_QUOTE_CLOSE=163 +MultiLineStringQuote=164 +MultiLineStrRef=165 +MultiLineStrText=166 +MultiLineStrExprStart=167 +Inside_Comment=168 +Inside_WS=169 +Inside_NL=170 +ErrorCharacter=171 +'...'=6 +'.'=7 +','=8 +'('=9 +')'=10 +'['=11 +']'=12 +'{'=13 +'}'=14 +'*'=15 +'%'=16 +'/'=17 +'+'=18 +'-'=19 +'++'=20 +'--'=21 +'&&'=22 +'||'=23 +'!'=25 +':'=26 +';'=27 +'='=28 +'+='=29 +'-='=30 +'*='=31 +'/='=32 +'%='=33 +'->'=34 +'=>'=35 +'..'=36 +'::'=37 +';;'=38 +'#'=39 +'@'=40 +'?'=45 +'<'=46 +'>'=47 +'<='=48 +'>='=49 +'!='=50 +'!=='=51 +'as?'=52 +'=='=53 +'==='=54 +'\''=55 +'file'=61 +'field'=62 +'property'=63 +'get'=64 +'set'=65 +'receiver'=66 +'param'=67 +'setparam'=68 +'delegate'=69 +'package'=70 +'import'=71 +'class'=72 +'interface'=73 +'fun'=74 +'object'=75 +'val'=76 +'var'=77 +'typealias'=78 +'constructor'=79 +'by'=80 +'companion'=81 +'init'=82 +'this'=83 +'super'=84 +'typeof'=85 +'where'=86 +'if'=87 +'else'=88 +'when'=89 +'try'=90 +'catch'=91 +'finally'=92 +'for'=93 +'do'=94 +'while'=95 +'throw'=96 +'return'=97 +'continue'=98 +'break'=99 +'as'=100 +'is'=101 +'in'=102 +'out'=105 +'dynamic'=106 +'public'=107 +'private'=108 +'protected'=109 +'internal'=110 +'enum'=111 +'sealed'=112 +'annotation'=113 +'data'=114 +'inner'=115 +'value'=116 +'tailrec'=117 +'operator'=118 +'inline'=119 +'infix'=120 +'external'=121 +'suspend'=122 +'override'=123 +'abstract'=124 +'final'=125 +'open'=126 +'const'=127 +'lateinit'=128 +'vararg'=129 +'noinline'=130 +'crossinline'=131 +'reified'=132 +'expect'=133 +'actual'=134 +'null'=144 +'"""'=150 diff --git a/lexers/src/main/java/com/itsaky/androidide/lexers/kotlin/KotlinParser.g4 b/lexers/src/main/java/com/itsaky/androidide/lexers/kotlin/KotlinParser.g4 new file mode 100644 index 000000000..628dbed38 --- /dev/null +++ b/lexers/src/main/java/com/itsaky/androidide/lexers/kotlin/KotlinParser.g4 @@ -0,0 +1,923 @@ +/** + * Kotlin syntax grammar in ANTLR4 notation + */ + +parser grammar KotlinParser; + +options { tokenVocab = KotlinLexer; } + +// SECTION: general + +kotlinFile + : shebangLine? NL* fileAnnotation* packageHeader importList topLevelObject* EOF + ; + +script + : shebangLine? NL* fileAnnotation* packageHeader importList (statement semi)* EOF + ; + +shebangLine + : ShebangLine NL+ + ; + +fileAnnotation + : (AT_NO_WS | AT_PRE_WS) FILE NL* COLON NL* (LSQUARE unescapedAnnotation+ RSQUARE | unescapedAnnotation) NL* + ; + +packageHeader + : (PACKAGE identifier semi?)? + ; + +importList + : importHeader* + ; + +importHeader + : IMPORT identifier (DOT MULT | importAlias)? semi? + ; + +importAlias + : AS simpleIdentifier + ; + +topLevelObject + : declaration semis? + ; + +typeAlias + : modifiers? TYPE_ALIAS NL* simpleIdentifier (NL* typeParameters)? NL* ASSIGNMENT NL* type + ; + +declaration + : classDeclaration + | objectDeclaration + | functionDeclaration + | propertyDeclaration + | typeAlias + ; + +// SECTION: classes + +classDeclaration + : modifiers? (CLASS | (FUN NL*)? INTERFACE) NL* simpleIdentifier + (NL* typeParameters)? (NL* primaryConstructor)? + (NL* COLON NL* delegationSpecifiers)? + (NL* typeConstraints)? + (NL* classBody | NL* enumClassBody)? + ; + +primaryConstructor + : (modifiers? CONSTRUCTOR NL*)? classParameters + ; + +classBody + : LCURL NL* classMemberDeclarations NL* RCURL + ; + +classParameters + : LPAREN NL* (classParameter (NL* COMMA NL* classParameter)* (NL* COMMA)?)? NL* RPAREN + ; + +classParameter + : modifiers? (VAL | VAR)? NL* simpleIdentifier COLON NL* type (NL* ASSIGNMENT NL* expression)? + ; + +delegationSpecifiers + : annotatedDelegationSpecifier (NL* COMMA NL* annotatedDelegationSpecifier)* + ; + +delegationSpecifier + : constructorInvocation + | explicitDelegation + | userType + | functionType + ; + +constructorInvocation + : userType valueArguments + ; + +annotatedDelegationSpecifier + : annotation* NL* delegationSpecifier + ; + +explicitDelegation + : (userType | functionType) NL* BY NL* expression + ; + +typeParameters + : LANGLE NL* typeParameter (NL* COMMA NL* typeParameter)* (NL* COMMA)? NL* RANGLE + ; + +typeParameter + : typeParameterModifiers? NL* simpleIdentifier (NL* COLON NL* type)? + ; + +typeConstraints + : WHERE NL* typeConstraint (NL* COMMA NL* typeConstraint)* + ; + +typeConstraint + : annotation* simpleIdentifier NL* COLON NL* type + ; + +// SECTION: classMembers + +classMemberDeclarations + : (classMemberDeclaration semis?)* + ; + +classMemberDeclaration + : declaration + | companionObject + | anonymousInitializer + | secondaryConstructor + ; + +anonymousInitializer + : INIT NL* block + ; + +companionObject + : modifiers? COMPANION NL* OBJECT + (NL* simpleIdentifier)? + (NL* COLON NL* delegationSpecifiers)? + (NL* classBody)? + ; + +functionValueParameters + : LPAREN NL* (functionValueParameter (NL* COMMA NL* functionValueParameter)* (NL* COMMA)?)? NL* RPAREN + ; + +functionValueParameter + : parameterModifiers? parameter (NL* ASSIGNMENT NL* expression)? + ; + +functionDeclaration + : modifiers? + FUN (NL* typeParameters)? (NL* receiverType NL* DOT)? NL* simpleIdentifier + NL* functionValueParameters + (NL* COLON NL* type)? + (NL* typeConstraints)? + (NL* functionBody)? + ; + +functionBody + : block + | ASSIGNMENT NL* expression + ; + +variableDeclaration + : annotation* NL* simpleIdentifier (NL* COLON NL* type)? + ; + +multiVariableDeclaration + : LPAREN NL* variableDeclaration (NL* COMMA NL* variableDeclaration)* (NL* COMMA)? NL* RPAREN + ; + +propertyDeclaration + : modifiers? (VAL | VAR) + (NL* typeParameters)? + (NL* receiverType NL* DOT)? + (NL* (multiVariableDeclaration | variableDeclaration)) + (NL* typeConstraints)? + (NL* (ASSIGNMENT NL* expression | propertyDelegate))? + (NL+ SEMICOLON)? NL* (getter? (NL* semi? setter)? | setter? (NL* semi? getter)?) + ; + +propertyDelegate + : BY NL* expression + ; + +getter + : modifiers? GET + (NL* LPAREN NL* RPAREN (NL* COLON NL* type)? NL* functionBody)? + ; + +setter + : modifiers? SET + (NL* LPAREN NL* functionValueParameterWithOptionalType (NL* COMMA)? NL* RPAREN (NL* COLON NL* type)? NL* functionBody)? + ; + +parametersWithOptionalType + : LPAREN NL* (functionValueParameterWithOptionalType (NL* COMMA NL* functionValueParameterWithOptionalType)* (NL* COMMA)?)? NL* RPAREN + ; + +functionValueParameterWithOptionalType + : parameterModifiers? parameterWithOptionalType (NL* ASSIGNMENT NL* expression)? + ; + +parameterWithOptionalType + : simpleIdentifier NL* (COLON NL* type)? + ; + +parameter + : simpleIdentifier NL* COLON NL* type + ; + +objectDeclaration + : modifiers? OBJECT + NL* simpleIdentifier + (NL* COLON NL* delegationSpecifiers)? + (NL* classBody)? + ; + +secondaryConstructor + : modifiers? CONSTRUCTOR NL* functionValueParameters (NL* COLON NL* constructorDelegationCall)? NL* block? + ; + +constructorDelegationCall + : (THIS | SUPER) NL* valueArguments + ; + +// SECTION: enumClasses + +enumClassBody + : LCURL NL* enumEntries? (NL* SEMICOLON NL* classMemberDeclarations)? NL* RCURL + ; + +enumEntries + : enumEntry (NL* COMMA NL* enumEntry)* NL* COMMA? + ; + +enumEntry + : (modifiers NL*)? simpleIdentifier (NL* valueArguments)? (NL* classBody)? + ; + +// SECTION: types + +type + : typeModifiers? (parenthesizedType | nullableType | typeReference | functionType) + ; + +typeReference + : userType + | DYNAMIC + ; + +nullableType + : (typeReference | parenthesizedType) NL* quest+ + ; + +quest + : QUEST_NO_WS + | QUEST_WS + ; + +userType + : simpleUserType (NL* DOT NL* simpleUserType)* + ; + +simpleUserType + : simpleIdentifier (NL* typeArguments)? + ; + +typeProjection + : typeProjectionModifiers? type + | MULT + ; + +typeProjectionModifiers + : typeProjectionModifier+ + ; + +typeProjectionModifier + : varianceModifier NL* + | annotation + ; + +functionType + : (receiverType NL* DOT NL*)? functionTypeParameters NL* ARROW NL* type + ; + +functionTypeParameters + : LPAREN NL* (parameter | type)? (NL* COMMA NL* (parameter | type))* (NL* COMMA)? NL* RPAREN + ; + +parenthesizedType + : LPAREN NL* type NL* RPAREN + ; + +receiverType + : typeModifiers? (parenthesizedType | nullableType | typeReference) + ; + +parenthesizedUserType + : LPAREN NL* (userType | parenthesizedUserType) NL* RPAREN + ; + +// SECTION: statements + +statements + : (statement (semis statement)*)? semis? + ; + +statement + : (label | annotation)* ( declaration | assignment | loopStatement | expression) + ; + +label + : simpleIdentifier (AT_NO_WS | AT_POST_WS) NL* + ; + +controlStructureBody + : block + | statement + ; + +block + : LCURL NL* statements NL* RCURL + ; + +loopStatement + : forStatement + | whileStatement + | doWhileStatement + ; + +forStatement + : FOR NL* LPAREN annotation* (variableDeclaration | multiVariableDeclaration) + IN expression RPAREN NL* controlStructureBody? + ; + +whileStatement + : WHILE NL* LPAREN expression RPAREN NL* (controlStructureBody | SEMICOLON) + ; + +doWhileStatement + : DO NL* controlStructureBody? NL* WHILE NL* LPAREN expression RPAREN + ; + +assignment + : (directlyAssignableExpression ASSIGNMENT | assignableExpression assignmentAndOperator) NL* expression + ; + +semi + : (SEMICOLON | NL) NL* + | EOF + ; + +semis + : (SEMICOLON | NL)+ + | EOF + ; + +// SECTION: expressions + +expression + : disjunction + ; + +disjunction + : conjunction (NL* DISJ NL* conjunction)* + ; + +conjunction + : equality (NL* CONJ NL* equality)* + ; + +equality + : comparison (equalityOperator NL* comparison)* + ; + +comparison + : genericCallLikeComparison (comparisonOperator NL* genericCallLikeComparison)* + ; + +genericCallLikeComparison + : infixOperation callSuffix* + ; + +infixOperation + : elvisExpression (inOperator NL* elvisExpression | isOperator NL* type)* + ; + +elvisExpression + : infixFunctionCall (NL* elvis NL* infixFunctionCall)* + ; + +elvis + : QUEST_NO_WS COLON + ; + +infixFunctionCall + : rangeExpression (simpleIdentifier NL* rangeExpression)* + ; + +rangeExpression + : additiveExpression (RANGE NL* additiveExpression)* + ; + +additiveExpression + : multiplicativeExpression (additiveOperator NL* multiplicativeExpression)* + ; + +multiplicativeExpression + : asExpression (multiplicativeOperator NL* asExpression)* + ; + +asExpression + : prefixUnaryExpression (NL* asOperator NL* type)* + ; + +prefixUnaryExpression + : unaryPrefix* postfixUnaryExpression + ; + +unaryPrefix + : annotation + | label + | prefixUnaryOperator NL* + ; + +postfixUnaryExpression + : primaryExpression postfixUnarySuffix* + ; + +postfixUnarySuffix + : postfixUnaryOperator + | typeArguments + | callSuffix + | indexingSuffix + | navigationSuffix + ; + +directlyAssignableExpression + : postfixUnaryExpression assignableSuffix + | simpleIdentifier + | parenthesizedDirectlyAssignableExpression + ; + +parenthesizedDirectlyAssignableExpression + : LPAREN NL* directlyAssignableExpression NL* RPAREN + ; + +assignableExpression + : prefixUnaryExpression + | parenthesizedAssignableExpression + ; + +parenthesizedAssignableExpression + : LPAREN NL* assignableExpression NL* RPAREN + ; + +assignableSuffix + : typeArguments + | indexingSuffix + | navigationSuffix + ; + +indexingSuffix + : LSQUARE NL* expression (NL* COMMA NL* expression)* (NL* COMMA)? NL* RSQUARE + ; + +navigationSuffix + : memberAccessOperator NL* (simpleIdentifier | parenthesizedExpression | CLASS) + ; + +callSuffix + : typeArguments? (valueArguments? annotatedLambda | valueArguments) + ; + +annotatedLambda + : annotation* label? NL* lambdaLiteral + ; + +typeArguments + : LANGLE NL* typeProjection (NL* COMMA NL* typeProjection)* (NL* COMMA)? NL* RANGLE + ; + +valueArguments + : LPAREN NL* (valueArgument (NL* COMMA NL* valueArgument)* (NL* COMMA)? NL*)? RPAREN + ; + +valueArgument + : annotation? NL* (simpleIdentifier NL* ASSIGNMENT NL*)? MULT? NL* expression + ; + +primaryExpression + : parenthesizedExpression + | simpleIdentifier + | literalConstant + | stringLiteral + | callableReference + | functionLiteral + | objectLiteral + | collectionLiteral + | thisExpression + | superExpression + | ifExpression + | whenExpression + | tryExpression + | jumpExpression + ; + +parenthesizedExpression + : LPAREN NL* expression NL* RPAREN + ; + +collectionLiteral + : LSQUARE NL* (expression (NL* COMMA NL* expression)* (NL* COMMA)? NL*)? RSQUARE + ; + +literalConstant + : BooleanLiteral + | IntegerLiteral + | HexLiteral + | BinLiteral + | CharacterLiteral + | RealLiteral + | NullLiteral + | LongLiteral + | UnsignedLiteral + ; + +stringLiteral + : lineStringLiteral + | multiLineStringLiteral + ; + +lineStringLiteral + : QUOTE_OPEN (lineStringContent | lineStringExpression)* QUOTE_CLOSE + ; + +multiLineStringLiteral + : TRIPLE_QUOTE_OPEN (multiLineStringContent | multiLineStringExpression | MultiLineStringQuote)* TRIPLE_QUOTE_CLOSE + ; + +lineStringContent + : LineStrText + | LineStrEscapedChar + | LineStrRef + ; + +lineStringExpression + : LineStrExprStart NL* expression NL* RCURL + ; + +multiLineStringContent + : MultiLineStrText + | MultiLineStringQuote + | MultiLineStrRef + ; + +multiLineStringExpression + : MultiLineStrExprStart NL* expression NL* RCURL + ; + +lambdaLiteral + : LCURL NL* (lambdaParameters? NL* ARROW NL*)? statements NL* RCURL + ; + +lambdaParameters + : lambdaParameter (NL* COMMA NL* lambdaParameter)* (NL* COMMA)? + ; + +lambdaParameter + : variableDeclaration + | multiVariableDeclaration (NL* COLON NL* type)? + ; + +anonymousFunction + : FUN + (NL* type NL* DOT)? + NL* parametersWithOptionalType + (NL* COLON NL* type)? + (NL* typeConstraints)? + (NL* functionBody)? + ; + +functionLiteral + : lambdaLiteral + | anonymousFunction + ; + +objectLiteral + : OBJECT (NL* COLON NL* delegationSpecifiers NL*)? (NL* classBody)? + ; + +thisExpression + : THIS + | THIS_AT + ; + +superExpression + : SUPER (LANGLE NL* type NL* RANGLE)? (AT_NO_WS simpleIdentifier)? + | SUPER_AT + ; + +ifExpression + : IF NL* LPAREN NL* expression NL* RPAREN NL* + ( controlStructureBody + | controlStructureBody? NL* SEMICOLON? NL* ELSE NL* (controlStructureBody | SEMICOLON) + | SEMICOLON) + ; + +whenSubject + : LPAREN (annotation* NL* VAL NL* variableDeclaration NL* ASSIGNMENT NL*)? expression RPAREN + ; + +whenExpression + : WHEN NL* whenSubject? NL* LCURL NL* (whenEntry NL*)* NL* RCURL + ; + +whenEntry + : whenCondition (NL* COMMA NL* whenCondition)* (NL* COMMA)? NL* ARROW NL* controlStructureBody semi? + | ELSE NL* ARROW NL* controlStructureBody semi? + ; + +whenCondition + : expression + | rangeTest + | typeTest + ; + +rangeTest + : inOperator NL* expression + ; + +typeTest + : isOperator NL* type + ; + +tryExpression + : TRY NL* block ((NL* catchBlock)+ (NL* finallyBlock)? | NL* finallyBlock) + ; + +catchBlock + : CATCH NL* LPAREN annotation* simpleIdentifier COLON type (NL* COMMA)? RPAREN NL* block + ; + +finallyBlock + : FINALLY NL* block + ; + +jumpExpression + : THROW NL* expression + | (RETURN | RETURN_AT) expression? + | CONTINUE + | CONTINUE_AT + | BREAK + | BREAK_AT + ; + +callableReference + : receiverType? COLONCOLON NL* (simpleIdentifier | CLASS) + ; + +assignmentAndOperator + : ADD_ASSIGNMENT + | SUB_ASSIGNMENT + | MULT_ASSIGNMENT + | DIV_ASSIGNMENT + | MOD_ASSIGNMENT + ; + +equalityOperator + : EXCL_EQ + | EXCL_EQEQ + | EQEQ + | EQEQEQ + ; + +comparisonOperator + : LANGLE + | RANGLE + | LE + | GE + ; + +inOperator + : IN + | NOT_IN + ; + +isOperator + : IS + | NOT_IS + ; + +additiveOperator + : ADD + | SUB + ; + +multiplicativeOperator + : MULT + | DIV + | MOD + ; + +asOperator + : AS + | AS_SAFE + ; + +prefixUnaryOperator + : INCR + | DECR + | SUB + | ADD + | excl + ; + +postfixUnaryOperator + : INCR + | DECR + | EXCL_NO_WS excl + ; + +excl + : EXCL_NO_WS + | EXCL_WS + ; + +memberAccessOperator + : NL* DOT + | NL* safeNav + | COLONCOLON + ; + +safeNav + : QUEST_NO_WS DOT + ; + +// SECTION: modifiers + +modifiers + : (annotation | modifier)+ + ; + +parameterModifiers + : (annotation | parameterModifier)+ + ; + +modifier + : (classModifier + | memberModifier + | visibilityModifier + | functionModifier + | propertyModifier + | inheritanceModifier + | parameterModifier + | platformModifier) NL* + ; + +typeModifiers + : typeModifier+ + ; + +typeModifier + : annotation + | SUSPEND NL* + ; + +classModifier + : ENUM + | SEALED + | ANNOTATION + | DATA + | INNER + | VALUE + ; + +memberModifier + : OVERRIDE + | LATEINIT + ; + +visibilityModifier + : PUBLIC + | PRIVATE + | INTERNAL + | PROTECTED + ; + +varianceModifier + : IN + | OUT + ; + +typeParameterModifiers + : typeParameterModifier+ + ; + +typeParameterModifier + : reificationModifier NL* + | varianceModifier NL* + | annotation + ; + +functionModifier + : TAILREC + | OPERATOR + | INFIX + | INLINE + | EXTERNAL + | SUSPEND + ; + +propertyModifier + : CONST + ; + +inheritanceModifier + : ABSTRACT + | FINAL + | OPEN + ; + +parameterModifier + : VARARG + | NOINLINE + | CROSSINLINE + ; + +reificationModifier + : REIFIED + ; + +platformModifier + : EXPECT + | ACTUAL + ; + +// SECTION: annotations + +annotation + : (singleAnnotation | multiAnnotation) NL* + ; + +singleAnnotation + : (annotationUseSiteTarget NL* | AT_NO_WS | AT_PRE_WS) unescapedAnnotation + ; + +multiAnnotation + : (annotationUseSiteTarget NL* | AT_NO_WS | AT_PRE_WS) LSQUARE unescapedAnnotation+ RSQUARE + ; + +annotationUseSiteTarget + : (AT_NO_WS | AT_PRE_WS) (FIELD | PROPERTY | GET | SET | RECEIVER | PARAM | SETPARAM | DELEGATE) NL* COLON + ; + +unescapedAnnotation + : constructorInvocation + | userType + ; + +// SECTION: identifiers + +simpleIdentifier + : Identifier + | ABSTRACT + | ANNOTATION + | BY + | CATCH + | COMPANION + | CONSTRUCTOR + | CROSSINLINE + | DATA + | DYNAMIC + | ENUM + | EXTERNAL + | FINAL + | FINALLY + | GET + | IMPORT + | INFIX + | INIT + | INLINE + | INNER + | INTERNAL + | LATEINIT + | NOINLINE + | OPEN + | OPERATOR + | OUT + | OVERRIDE + | PRIVATE + | PROTECTED + | PUBLIC + | REIFIED + | SEALED + | TAILREC + | SET + | VARARG + | WHERE + | FIELD + | PROPERTY + | RECEIVER + | PARAM + | SETPARAM + | DELEGATE + | FILE + | EXPECT + | ACTUAL + | CONST + | SUSPEND + | VALUE + ; + +identifier + : simpleIdentifier (NL* DOT simpleIdentifier)* + ; diff --git a/lexers/src/main/java/com/itsaky/androidide/lexers/kotlin/KotlinParser.interp b/lexers/src/main/java/com/itsaky/androidide/lexers/kotlin/KotlinParser.interp new file mode 100644 index 000000000..96cf728c7 --- /dev/null +++ b/lexers/src/main/java/com/itsaky/androidide/lexers/kotlin/KotlinParser.interp @@ -0,0 +1,526 @@ +token literal names: +null +null +null +null +null +null +'...' +'.' +',' +'(' +')' +'[' +']' +'{' +'}' +'*' +'%' +'/' +'+' +'-' +'++' +'--' +'&&' +'||' +null +'!' +':' +';' +'=' +'+=' +'-=' +'*=' +'/=' +'%=' +'->' +'=>' +'..' +'::' +';;' +'#' +'@' +null +null +null +null +'?' +'<' +'>' +'<=' +'>=' +'!=' +'!==' +'as?' +'==' +'===' +'\'' +null +null +null +null +null +'file' +'field' +'property' +'get' +'set' +'receiver' +'param' +'setparam' +'delegate' +'package' +'import' +'class' +'interface' +'fun' +'object' +'val' +'var' +'typealias' +'constructor' +'by' +'companion' +'init' +'this' +'super' +'typeof' +'where' +'if' +'else' +'when' +'try' +'catch' +'finally' +'for' +'do' +'while' +'throw' +'return' +'continue' +'break' +'as' +'is' +'in' +null +null +'out' +'dynamic' +'public' +'private' +'protected' +'internal' +'enum' +'sealed' +'annotation' +'data' +'inner' +'value' +'tailrec' +'operator' +'inline' +'infix' +'external' +'suspend' +'override' +'abstract' +'final' +'open' +'const' +'lateinit' +'vararg' +'noinline' +'crossinline' +'reified' +'expect' +'actual' +null +null +null +null +null +null +null +null +null +'null' +null +null +null +null +null +'"""' +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null +null + +token symbolic names: +null +ShebangLine +DelimitedComment +LineComment +WS +NL +RESERVED +DOT +COMMA +LPAREN +RPAREN +LSQUARE +RSQUARE +LCURL +RCURL +MULT +MOD +DIV +ADD +SUB +INCR +DECR +CONJ +DISJ +EXCL_WS +EXCL_NO_WS +COLON +SEMICOLON +ASSIGNMENT +ADD_ASSIGNMENT +SUB_ASSIGNMENT +MULT_ASSIGNMENT +DIV_ASSIGNMENT +MOD_ASSIGNMENT +ARROW +DOUBLE_ARROW +RANGE +COLONCOLON +DOUBLE_SEMICOLON +HASH +AT_NO_WS +AT_POST_WS +AT_PRE_WS +AT_BOTH_WS +QUEST_WS +QUEST_NO_WS +LANGLE +RANGLE +LE +GE +EXCL_EQ +EXCL_EQEQ +AS_SAFE +EQEQ +EQEQEQ +SINGLE_QUOTE +RETURN_AT +CONTINUE_AT +BREAK_AT +THIS_AT +SUPER_AT +FILE +FIELD +PROPERTY +GET +SET +RECEIVER +PARAM +SETPARAM +DELEGATE +PACKAGE +IMPORT +CLASS +INTERFACE +FUN +OBJECT +VAL +VAR +TYPE_ALIAS +CONSTRUCTOR +BY +COMPANION +INIT +THIS +SUPER +TYPEOF +WHERE +IF +ELSE +WHEN +TRY +CATCH +FINALLY +FOR +DO +WHILE +THROW +RETURN +CONTINUE +BREAK +AS +IS +IN +NOT_IS +NOT_IN +OUT +DYNAMIC +PUBLIC +PRIVATE +PROTECTED +INTERNAL +ENUM +SEALED +ANNOTATION +DATA +INNER +VALUE +TAILREC +OPERATOR +INLINE +INFIX +EXTERNAL +SUSPEND +OVERRIDE +ABSTRACT +FINAL +OPEN +CONST +LATEINIT +VARARG +NOINLINE +CROSSINLINE +REIFIED +EXPECT +ACTUAL +RealLiteral +FloatLiteral +DoubleLiteral +IntegerLiteral +HexLiteral +BinLiteral +UnsignedLiteral +LongLiteral +BooleanLiteral +NullLiteral +CharacterLiteral +Identifier +IdentifierOrSoftKey +FieldIdentifier +QUOTE_OPEN +TRIPLE_QUOTE_OPEN +UNICODE_CLASS_LL +UNICODE_CLASS_LM +UNICODE_CLASS_LO +UNICODE_CLASS_LT +UNICODE_CLASS_LU +UNICODE_CLASS_ND +UNICODE_CLASS_NL +QUOTE_CLOSE +LineStrRef +LineStrText +LineStrEscapedChar +LineStrExprStart +TRIPLE_QUOTE_CLOSE +MultiLineStringQuote +MultiLineStrRef +MultiLineStrText +MultiLineStrExprStart +Inside_Comment +Inside_WS +Inside_NL +ErrorCharacter + +rule names: +kotlinFile +script +shebangLine +fileAnnotation +packageHeader +importList +importHeader +importAlias +topLevelObject +typeAlias +declaration +classDeclaration +primaryConstructor +classBody +classParameters +classParameter +delegationSpecifiers +delegationSpecifier +constructorInvocation +annotatedDelegationSpecifier +explicitDelegation +typeParameters +typeParameter +typeConstraints +typeConstraint +classMemberDeclarations +classMemberDeclaration +anonymousInitializer +companionObject +functionValueParameters +functionValueParameter +functionDeclaration +functionBody +variableDeclaration +multiVariableDeclaration +propertyDeclaration +propertyDelegate +getter +setter +parametersWithOptionalType +functionValueParameterWithOptionalType +parameterWithOptionalType +parameter +objectDeclaration +secondaryConstructor +constructorDelegationCall +enumClassBody +enumEntries +enumEntry +type +typeReference +nullableType +quest +userType +simpleUserType +typeProjection +typeProjectionModifiers +typeProjectionModifier +functionType +functionTypeParameters +parenthesizedType +receiverType +parenthesizedUserType +statements +statement +label +controlStructureBody +block +loopStatement +forStatement +whileStatement +doWhileStatement +assignment +semi +semis +expression +disjunction +conjunction +equality +comparison +genericCallLikeComparison +infixOperation +elvisExpression +elvis +infixFunctionCall +rangeExpression +additiveExpression +multiplicativeExpression +asExpression +prefixUnaryExpression +unaryPrefix +postfixUnaryExpression +postfixUnarySuffix +directlyAssignableExpression +parenthesizedDirectlyAssignableExpression +assignableExpression +parenthesizedAssignableExpression +assignableSuffix +indexingSuffix +navigationSuffix +callSuffix +annotatedLambda +typeArguments +valueArguments +valueArgument +primaryExpression +parenthesizedExpression +collectionLiteral +literalConstant +stringLiteral +lineStringLiteral +multiLineStringLiteral +lineStringContent +lineStringExpression +multiLineStringContent +multiLineStringExpression +lambdaLiteral +lambdaParameters +lambdaParameter +anonymousFunction +functionLiteral +objectLiteral +thisExpression +superExpression +ifExpression +whenSubject +whenExpression +whenEntry +whenCondition +rangeTest +typeTest +tryExpression +catchBlock +finallyBlock +jumpExpression +callableReference +assignmentAndOperator +equalityOperator +comparisonOperator +inOperator +isOperator +additiveOperator +multiplicativeOperator +asOperator +prefixUnaryOperator +postfixUnaryOperator +excl +memberAccessOperator +safeNav +modifiers +parameterModifiers +modifier +typeModifiers +typeModifier +classModifier +memberModifier +visibilityModifier +varianceModifier +typeParameterModifiers +typeParameterModifier +functionModifier +propertyModifier +inheritanceModifier +parameterModifier +reificationModifier +platformModifier +annotation +singleAnnotation +multiAnnotation +annotationUseSiteTarget +unescapedAnnotation +simpleIdentifier +identifier + + +atn: +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 173, 3456, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 4, 88, 9, 88, 4, 89, 9, 89, 4, 90, 9, 90, 4, 91, 9, 91, 4, 92, 9, 92, 4, 93, 9, 93, 4, 94, 9, 94, 4, 95, 9, 95, 4, 96, 9, 96, 4, 97, 9, 97, 4, 98, 9, 98, 4, 99, 9, 99, 4, 100, 9, 100, 4, 101, 9, 101, 4, 102, 9, 102, 4, 103, 9, 103, 4, 104, 9, 104, 4, 105, 9, 105, 4, 106, 9, 106, 4, 107, 9, 107, 4, 108, 9, 108, 4, 109, 9, 109, 4, 110, 9, 110, 4, 111, 9, 111, 4, 112, 9, 112, 4, 113, 9, 113, 4, 114, 9, 114, 4, 115, 9, 115, 4, 116, 9, 116, 4, 117, 9, 117, 4, 118, 9, 118, 4, 119, 9, 119, 4, 120, 9, 120, 4, 121, 9, 121, 4, 122, 9, 122, 4, 123, 9, 123, 4, 124, 9, 124, 4, 125, 9, 125, 4, 126, 9, 126, 4, 127, 9, 127, 4, 128, 9, 128, 4, 129, 9, 129, 4, 130, 9, 130, 4, 131, 9, 131, 4, 132, 9, 132, 4, 133, 9, 133, 4, 134, 9, 134, 4, 135, 9, 135, 4, 136, 9, 136, 4, 137, 9, 137, 4, 138, 9, 138, 4, 139, 9, 139, 4, 140, 9, 140, 4, 141, 9, 141, 4, 142, 9, 142, 4, 143, 9, 143, 4, 144, 9, 144, 4, 145, 9, 145, 4, 146, 9, 146, 4, 147, 9, 147, 4, 148, 9, 148, 4, 149, 9, 149, 4, 150, 9, 150, 4, 151, 9, 151, 4, 152, 9, 152, 4, 153, 9, 153, 4, 154, 9, 154, 4, 155, 9, 155, 4, 156, 9, 156, 4, 157, 9, 157, 4, 158, 9, 158, 4, 159, 9, 159, 4, 160, 9, 160, 4, 161, 9, 161, 4, 162, 9, 162, 4, 163, 9, 163, 4, 164, 9, 164, 4, 165, 9, 165, 4, 166, 9, 166, 4, 167, 9, 167, 4, 168, 9, 168, 4, 169, 9, 169, 4, 170, 9, 170, 4, 171, 9, 171, 4, 172, 9, 172, 4, 173, 9, 173, 4, 174, 9, 174, 3, 2, 5, 2, 350, 10, 2, 3, 2, 7, 2, 353, 10, 2, 12, 2, 14, 2, 356, 11, 2, 3, 2, 7, 2, 359, 10, 2, 12, 2, 14, 2, 362, 11, 2, 3, 2, 3, 2, 3, 2, 7, 2, 367, 10, 2, 12, 2, 14, 2, 370, 11, 2, 3, 2, 3, 2, 3, 3, 5, 3, 375, 10, 3, 3, 3, 7, 3, 378, 10, 3, 12, 3, 14, 3, 381, 11, 3, 3, 3, 7, 3, 384, 10, 3, 12, 3, 14, 3, 387, 11, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 3, 394, 10, 3, 12, 3, 14, 3, 397, 11, 3, 3, 3, 3, 3, 3, 4, 3, 4, 6, 4, 403, 10, 4, 13, 4, 14, 4, 404, 3, 5, 3, 5, 3, 5, 7, 5, 410, 10, 5, 12, 5, 14, 5, 413, 11, 5, 3, 5, 3, 5, 7, 5, 417, 10, 5, 12, 5, 14, 5, 420, 11, 5, 3, 5, 3, 5, 6, 5, 424, 10, 5, 13, 5, 14, 5, 425, 3, 5, 3, 5, 3, 5, 5, 5, 431, 10, 5, 3, 5, 7, 5, 434, 10, 5, 12, 5, 14, 5, 437, 11, 5, 3, 6, 3, 6, 3, 6, 5, 6, 442, 10, 6, 5, 6, 444, 10, 6, 3, 7, 7, 7, 447, 10, 7, 12, 7, 14, 7, 450, 11, 7, 3, 8, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 457, 10, 8, 3, 8, 5, 8, 460, 10, 8, 3, 9, 3, 9, 3, 9, 3, 10, 3, 10, 5, 10, 467, 10, 10, 3, 11, 5, 11, 470, 10, 11, 3, 11, 3, 11, 7, 11, 474, 10, 11, 12, 11, 14, 11, 477, 11, 11, 3, 11, 3, 11, 7, 11, 481, 10, 11, 12, 11, 14, 11, 484, 11, 11, 3, 11, 5, 11, 487, 10, 11, 3, 11, 7, 11, 490, 10, 11, 12, 11, 14, 11, 493, 11, 11, 3, 11, 3, 11, 7, 11, 497, 10, 11, 12, 11, 14, 11, 500, 11, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 5, 12, 509, 10, 12, 3, 13, 5, 13, 512, 10, 13, 3, 13, 3, 13, 3, 13, 7, 13, 517, 10, 13, 12, 13, 14, 13, 520, 11, 13, 5, 13, 522, 10, 13, 3, 13, 5, 13, 525, 10, 13, 3, 13, 7, 13, 528, 10, 13, 12, 13, 14, 13, 531, 11, 13, 3, 13, 3, 13, 7, 13, 535, 10, 13, 12, 13, 14, 13, 538, 11, 13, 3, 13, 5, 13, 541, 10, 13, 3, 13, 7, 13, 544, 10, 13, 12, 13, 14, 13, 547, 11, 13, 3, 13, 5, 13, 550, 10, 13, 3, 13, 7, 13, 553, 10, 13, 12, 13, 14, 13, 556, 11, 13, 3, 13, 3, 13, 7, 13, 560, 10, 13, 12, 13, 14, 13, 563, 11, 13, 3, 13, 5, 13, 566, 10, 13, 3, 13, 7, 13, 569, 10, 13, 12, 13, 14, 13, 572, 11, 13, 3, 13, 5, 13, 575, 10, 13, 3, 13, 7, 13, 578, 10, 13, 12, 13, 14, 13, 581, 11, 13, 3, 13, 3, 13, 7, 13, 585, 10, 13, 12, 13, 14, 13, 588, 11, 13, 3, 13, 5, 13, 591, 10, 13, 3, 14, 5, 14, 594, 10, 14, 3, 14, 3, 14, 7, 14, 598, 10, 14, 12, 14, 14, 14, 601, 11, 14, 5, 14, 603, 10, 14, 3, 14, 3, 14, 3, 15, 3, 15, 7, 15, 609, 10, 15, 12, 15, 14, 15, 612, 11, 15, 3, 15, 3, 15, 7, 15, 616, 10, 15, 12, 15, 14, 15, 619, 11, 15, 3, 15, 3, 15, 3, 16, 3, 16, 7, 16, 625, 10, 16, 12, 16, 14, 16, 628, 11, 16, 3, 16, 3, 16, 7, 16, 632, 10, 16, 12, 16, 14, 16, 635, 11, 16, 3, 16, 3, 16, 7, 16, 639, 10, 16, 12, 16, 14, 16, 642, 11, 16, 3, 16, 7, 16, 645, 10, 16, 12, 16, 14, 16, 648, 11, 16, 3, 16, 7, 16, 651, 10, 16, 12, 16, 14, 16, 654, 11, 16, 3, 16, 5, 16, 657, 10, 16, 5, 16, 659, 10, 16, 3, 16, 7, 16, 662, 10, 16, 12, 16, 14, 16, 665, 11, 16, 3, 16, 3, 16, 3, 17, 5, 17, 670, 10, 17, 3, 17, 5, 17, 673, 10, 17, 3, 17, 7, 17, 676, 10, 17, 12, 17, 14, 17, 679, 11, 17, 3, 17, 3, 17, 3, 17, 7, 17, 684, 10, 17, 12, 17, 14, 17, 687, 11, 17, 3, 17, 3, 17, 7, 17, 691, 10, 17, 12, 17, 14, 17, 694, 11, 17, 3, 17, 3, 17, 7, 17, 698, 10, 17, 12, 17, 14, 17, 701, 11, 17, 3, 17, 5, 17, 704, 10, 17, 3, 18, 3, 18, 7, 18, 708, 10, 18, 12, 18, 14, 18, 711, 11, 18, 3, 18, 3, 18, 7, 18, 715, 10, 18, 12, 18, 14, 18, 718, 11, 18, 3, 18, 7, 18, 721, 10, 18, 12, 18, 14, 18, 724, 11, 18, 3, 19, 3, 19, 3, 19, 3, 19, 5, 19, 730, 10, 19, 3, 20, 3, 20, 3, 20, 3, 21, 7, 21, 736, 10, 21, 12, 21, 14, 21, 739, 11, 21, 3, 21, 7, 21, 742, 10, 21, 12, 21, 14, 21, 745, 11, 21, 3, 21, 3, 21, 3, 22, 3, 22, 5, 22, 751, 10, 22, 3, 22, 7, 22, 754, 10, 22, 12, 22, 14, 22, 757, 11, 22, 3, 22, 3, 22, 7, 22, 761, 10, 22, 12, 22, 14, 22, 764, 11, 22, 3, 22, 3, 22, 3, 23, 3, 23, 7, 23, 770, 10, 23, 12, 23, 14, 23, 773, 11, 23, 3, 23, 3, 23, 7, 23, 777, 10, 23, 12, 23, 14, 23, 780, 11, 23, 3, 23, 3, 23, 7, 23, 784, 10, 23, 12, 23, 14, 23, 787, 11, 23, 3, 23, 7, 23, 790, 10, 23, 12, 23, 14, 23, 793, 11, 23, 3, 23, 7, 23, 796, 10, 23, 12, 23, 14, 23, 799, 11, 23, 3, 23, 5, 23, 802, 10, 23, 3, 23, 7, 23, 805, 10, 23, 12, 23, 14, 23, 808, 11, 23, 3, 23, 3, 23, 3, 24, 5, 24, 813, 10, 24, 3, 24, 7, 24, 816, 10, 24, 12, 24, 14, 24, 819, 11, 24, 3, 24, 3, 24, 7, 24, 823, 10, 24, 12, 24, 14, 24, 826, 11, 24, 3, 24, 3, 24, 7, 24, 830, 10, 24, 12, 24, 14, 24, 833, 11, 24, 3, 24, 5, 24, 836, 10, 24, 3, 25, 3, 25, 7, 25, 840, 10, 25, 12, 25, 14, 25, 843, 11, 25, 3, 25, 3, 25, 7, 25, 847, 10, 25, 12, 25, 14, 25, 850, 11, 25, 3, 25, 3, 25, 7, 25, 854, 10, 25, 12, 25, 14, 25, 857, 11, 25, 3, 25, 7, 25, 860, 10, 25, 12, 25, 14, 25, 863, 11, 25, 3, 26, 7, 26, 866, 10, 26, 12, 26, 14, 26, 869, 11, 26, 3, 26, 3, 26, 7, 26, 873, 10, 26, 12, 26, 14, 26, 876, 11, 26, 3, 26, 3, 26, 7, 26, 880, 10, 26, 12, 26, 14, 26, 883, 11, 26, 3, 26, 3, 26, 3, 27, 3, 27, 5, 27, 889, 10, 27, 7, 27, 891, 10, 27, 12, 27, 14, 27, 894, 11, 27, 3, 28, 3, 28, 3, 28, 3, 28, 5, 28, 900, 10, 28, 3, 29, 3, 29, 7, 29, 904, 10, 29, 12, 29, 14, 29, 907, 11, 29, 3, 29, 3, 29, 3, 30, 5, 30, 912, 10, 30, 3, 30, 3, 30, 7, 30, 916, 10, 30, 12, 30, 14, 30, 919, 11, 30, 3, 30, 3, 30, 7, 30, 923, 10, 30, 12, 30, 14, 30, 926, 11, 30, 3, 30, 5, 30, 929, 10, 30, 3, 30, 7, 30, 932, 10, 30, 12, 30, 14, 30, 935, 11, 30, 3, 30, 3, 30, 7, 30, 939, 10, 30, 12, 30, 14, 30, 942, 11, 30, 3, 30, 5, 30, 945, 10, 30, 3, 30, 7, 30, 948, 10, 30, 12, 30, 14, 30, 951, 11, 30, 3, 30, 5, 30, 954, 10, 30, 3, 31, 3, 31, 7, 31, 958, 10, 31, 12, 31, 14, 31, 961, 11, 31, 3, 31, 3, 31, 7, 31, 965, 10, 31, 12, 31, 14, 31, 968, 11, 31, 3, 31, 3, 31, 7, 31, 972, 10, 31, 12, 31, 14, 31, 975, 11, 31, 3, 31, 7, 31, 978, 10, 31, 12, 31, 14, 31, 981, 11, 31, 3, 31, 7, 31, 984, 10, 31, 12, 31, 14, 31, 987, 11, 31, 3, 31, 5, 31, 990, 10, 31, 5, 31, 992, 10, 31, 3, 31, 7, 31, 995, 10, 31, 12, 31, 14, 31, 998, 11, 31, 3, 31, 3, 31, 3, 32, 5, 32, 1003, 10, 32, 3, 32, 3, 32, 7, 32, 1007, 10, 32, 12, 32, 14, 32, 1010, 11, 32, 3, 32, 3, 32, 7, 32, 1014, 10, 32, 12, 32, 14, 32, 1017, 11, 32, 3, 32, 5, 32, 1020, 10, 32, 3, 33, 5, 33, 1023, 10, 33, 3, 33, 3, 33, 7, 33, 1027, 10, 33, 12, 33, 14, 33, 1030, 11, 33, 3, 33, 5, 33, 1033, 10, 33, 3, 33, 7, 33, 1036, 10, 33, 12, 33, 14, 33, 1039, 11, 33, 3, 33, 3, 33, 7, 33, 1043, 10, 33, 12, 33, 14, 33, 1046, 11, 33, 3, 33, 3, 33, 5, 33, 1050, 10, 33, 3, 33, 7, 33, 1053, 10, 33, 12, 33, 14, 33, 1056, 11, 33, 3, 33, 3, 33, 7, 33, 1060, 10, 33, 12, 33, 14, 33, 1063, 11, 33, 3, 33, 3, 33, 7, 33, 1067, 10, 33, 12, 33, 14, 33, 1070, 11, 33, 3, 33, 3, 33, 7, 33, 1074, 10, 33, 12, 33, 14, 33, 1077, 11, 33, 3, 33, 5, 33, 1080, 10, 33, 3, 33, 7, 33, 1083, 10, 33, 12, 33, 14, 33, 1086, 11, 33, 3, 33, 5, 33, 1089, 10, 33, 3, 33, 7, 33, 1092, 10, 33, 12, 33, 14, 33, 1095, 11, 33, 3, 33, 5, 33, 1098, 10, 33, 3, 34, 3, 34, 3, 34, 7, 34, 1103, 10, 34, 12, 34, 14, 34, 1106, 11, 34, 3, 34, 5, 34, 1109, 10, 34, 3, 35, 7, 35, 1112, 10, 35, 12, 35, 14, 35, 1115, 11, 35, 3, 35, 7, 35, 1118, 10, 35, 12, 35, 14, 35, 1121, 11, 35, 3, 35, 3, 35, 7, 35, 1125, 10, 35, 12, 35, 14, 35, 1128, 11, 35, 3, 35, 3, 35, 7, 35, 1132, 10, 35, 12, 35, 14, 35, 1135, 11, 35, 3, 35, 5, 35, 1138, 10, 35, 3, 36, 3, 36, 7, 36, 1142, 10, 36, 12, 36, 14, 36, 1145, 11, 36, 3, 36, 3, 36, 7, 36, 1149, 10, 36, 12, 36, 14, 36, 1152, 11, 36, 3, 36, 3, 36, 7, 36, 1156, 10, 36, 12, 36, 14, 36, 1159, 11, 36, 3, 36, 7, 36, 1162, 10, 36, 12, 36, 14, 36, 1165, 11, 36, 3, 36, 7, 36, 1168, 10, 36, 12, 36, 14, 36, 1171, 11, 36, 3, 36, 5, 36, 1174, 10, 36, 3, 36, 7, 36, 1177, 10, 36, 12, 36, 14, 36, 1180, 11, 36, 3, 36, 3, 36, 3, 37, 5, 37, 1185, 10, 37, 3, 37, 3, 37, 7, 37, 1189, 10, 37, 12, 37, 14, 37, 1192, 11, 37, 3, 37, 5, 37, 1195, 10, 37, 3, 37, 7, 37, 1198, 10, 37, 12, 37, 14, 37, 1201, 11, 37, 3, 37, 3, 37, 7, 37, 1205, 10, 37, 12, 37, 14, 37, 1208, 11, 37, 3, 37, 3, 37, 5, 37, 1212, 10, 37, 3, 37, 7, 37, 1215, 10, 37, 12, 37, 14, 37, 1218, 11, 37, 3, 37, 3, 37, 5, 37, 1222, 10, 37, 3, 37, 7, 37, 1225, 10, 37, 12, 37, 14, 37, 1228, 11, 37, 3, 37, 5, 37, 1231, 10, 37, 3, 37, 7, 37, 1234, 10, 37, 12, 37, 14, 37, 1237, 11, 37, 3, 37, 3, 37, 7, 37, 1241, 10, 37, 12, 37, 14, 37, 1244, 11, 37, 3, 37, 3, 37, 5, 37, 1248, 10, 37, 5, 37, 1250, 10, 37, 3, 37, 6, 37, 1253, 10, 37, 13, 37, 14, 37, 1254, 3, 37, 5, 37, 1258, 10, 37, 3, 37, 7, 37, 1261, 10, 37, 12, 37, 14, 37, 1264, 11, 37, 3, 37, 5, 37, 1267, 10, 37, 3, 37, 7, 37, 1270, 10, 37, 12, 37, 14, 37, 1273, 11, 37, 3, 37, 5, 37, 1276, 10, 37, 3, 37, 5, 37, 1279, 10, 37, 3, 37, 5, 37, 1282, 10, 37, 3, 37, 7, 37, 1285, 10, 37, 12, 37, 14, 37, 1288, 11, 37, 3, 37, 5, 37, 1291, 10, 37, 3, 37, 5, 37, 1294, 10, 37, 5, 37, 1296, 10, 37, 3, 38, 3, 38, 7, 38, 1300, 10, 38, 12, 38, 14, 38, 1303, 11, 38, 3, 38, 3, 38, 3, 39, 5, 39, 1308, 10, 39, 3, 39, 3, 39, 7, 39, 1312, 10, 39, 12, 39, 14, 39, 1315, 11, 39, 3, 39, 3, 39, 7, 39, 1319, 10, 39, 12, 39, 14, 39, 1322, 11, 39, 3, 39, 3, 39, 7, 39, 1326, 10, 39, 12, 39, 14, 39, 1329, 11, 39, 3, 39, 3, 39, 7, 39, 1333, 10, 39, 12, 39, 14, 39, 1336, 11, 39, 3, 39, 5, 39, 1339, 10, 39, 3, 39, 7, 39, 1342, 10, 39, 12, 39, 14, 39, 1345, 11, 39, 3, 39, 5, 39, 1348, 10, 39, 3, 40, 5, 40, 1351, 10, 40, 3, 40, 3, 40, 7, 40, 1355, 10, 40, 12, 40, 14, 40, 1358, 11, 40, 3, 40, 3, 40, 7, 40, 1362, 10, 40, 12, 40, 14, 40, 1365, 11, 40, 3, 40, 3, 40, 7, 40, 1369, 10, 40, 12, 40, 14, 40, 1372, 11, 40, 3, 40, 5, 40, 1375, 10, 40, 3, 40, 7, 40, 1378, 10, 40, 12, 40, 14, 40, 1381, 11, 40, 3, 40, 3, 40, 7, 40, 1385, 10, 40, 12, 40, 14, 40, 1388, 11, 40, 3, 40, 3, 40, 7, 40, 1392, 10, 40, 12, 40, 14, 40, 1395, 11, 40, 3, 40, 5, 40, 1398, 10, 40, 3, 40, 7, 40, 1401, 10, 40, 12, 40, 14, 40, 1404, 11, 40, 3, 40, 3, 40, 5, 40, 1408, 10, 40, 3, 41, 3, 41, 7, 41, 1412, 10, 41, 12, 41, 14, 41, 1415, 11, 41, 3, 41, 3, 41, 7, 41, 1419, 10, 41, 12, 41, 14, 41, 1422, 11, 41, 3, 41, 3, 41, 7, 41, 1426, 10, 41, 12, 41, 14, 41, 1429, 11, 41, 3, 41, 7, 41, 1432, 10, 41, 12, 41, 14, 41, 1435, 11, 41, 3, 41, 7, 41, 1438, 10, 41, 12, 41, 14, 41, 1441, 11, 41, 3, 41, 5, 41, 1444, 10, 41, 5, 41, 1446, 10, 41, 3, 41, 7, 41, 1449, 10, 41, 12, 41, 14, 41, 1452, 11, 41, 3, 41, 3, 41, 3, 42, 5, 42, 1457, 10, 42, 3, 42, 3, 42, 7, 42, 1461, 10, 42, 12, 42, 14, 42, 1464, 11, 42, 3, 42, 3, 42, 7, 42, 1468, 10, 42, 12, 42, 14, 42, 1471, 11, 42, 3, 42, 5, 42, 1474, 10, 42, 3, 43, 3, 43, 7, 43, 1478, 10, 43, 12, 43, 14, 43, 1481, 11, 43, 3, 43, 3, 43, 7, 43, 1485, 10, 43, 12, 43, 14, 43, 1488, 11, 43, 3, 43, 5, 43, 1491, 10, 43, 3, 44, 3, 44, 7, 44, 1495, 10, 44, 12, 44, 14, 44, 1498, 11, 44, 3, 44, 3, 44, 7, 44, 1502, 10, 44, 12, 44, 14, 44, 1505, 11, 44, 3, 44, 3, 44, 3, 45, 5, 45, 1510, 10, 45, 3, 45, 3, 45, 7, 45, 1514, 10, 45, 12, 45, 14, 45, 1517, 11, 45, 3, 45, 3, 45, 7, 45, 1521, 10, 45, 12, 45, 14, 45, 1524, 11, 45, 3, 45, 3, 45, 7, 45, 1528, 10, 45, 12, 45, 14, 45, 1531, 11, 45, 3, 45, 5, 45, 1534, 10, 45, 3, 45, 7, 45, 1537, 10, 45, 12, 45, 14, 45, 1540, 11, 45, 3, 45, 5, 45, 1543, 10, 45, 3, 46, 5, 46, 1546, 10, 46, 3, 46, 3, 46, 7, 46, 1550, 10, 46, 12, 46, 14, 46, 1553, 11, 46, 3, 46, 3, 46, 7, 46, 1557, 10, 46, 12, 46, 14, 46, 1560, 11, 46, 3, 46, 3, 46, 7, 46, 1564, 10, 46, 12, 46, 14, 46, 1567, 11, 46, 3, 46, 5, 46, 1570, 10, 46, 3, 46, 7, 46, 1573, 10, 46, 12, 46, 14, 46, 1576, 11, 46, 3, 46, 5, 46, 1579, 10, 46, 3, 47, 3, 47, 7, 47, 1583, 10, 47, 12, 47, 14, 47, 1586, 11, 47, 3, 47, 3, 47, 3, 48, 3, 48, 7, 48, 1592, 10, 48, 12, 48, 14, 48, 1595, 11, 48, 3, 48, 5, 48, 1598, 10, 48, 3, 48, 7, 48, 1601, 10, 48, 12, 48, 14, 48, 1604, 11, 48, 3, 48, 3, 48, 7, 48, 1608, 10, 48, 12, 48, 14, 48, 1611, 11, 48, 3, 48, 5, 48, 1614, 10, 48, 3, 48, 7, 48, 1617, 10, 48, 12, 48, 14, 48, 1620, 11, 48, 3, 48, 3, 48, 3, 49, 3, 49, 7, 49, 1626, 10, 49, 12, 49, 14, 49, 1629, 11, 49, 3, 49, 3, 49, 7, 49, 1633, 10, 49, 12, 49, 14, 49, 1636, 11, 49, 3, 49, 7, 49, 1639, 10, 49, 12, 49, 14, 49, 1642, 11, 49, 3, 49, 7, 49, 1645, 10, 49, 12, 49, 14, 49, 1648, 11, 49, 3, 49, 5, 49, 1651, 10, 49, 3, 50, 3, 50, 7, 50, 1655, 10, 50, 12, 50, 14, 50, 1658, 11, 50, 5, 50, 1660, 10, 50, 3, 50, 3, 50, 7, 50, 1664, 10, 50, 12, 50, 14, 50, 1667, 11, 50, 3, 50, 5, 50, 1670, 10, 50, 3, 50, 7, 50, 1673, 10, 50, 12, 50, 14, 50, 1676, 11, 50, 3, 50, 5, 50, 1679, 10, 50, 3, 51, 5, 51, 1682, 10, 51, 3, 51, 3, 51, 3, 51, 3, 51, 5, 51, 1688, 10, 51, 3, 52, 3, 52, 5, 52, 1692, 10, 52, 3, 53, 3, 53, 5, 53, 1696, 10, 53, 3, 53, 7, 53, 1699, 10, 53, 12, 53, 14, 53, 1702, 11, 53, 3, 53, 6, 53, 1705, 10, 53, 13, 53, 14, 53, 1706, 3, 54, 3, 54, 3, 55, 3, 55, 7, 55, 1713, 10, 55, 12, 55, 14, 55, 1716, 11, 55, 3, 55, 3, 55, 7, 55, 1720, 10, 55, 12, 55, 14, 55, 1723, 11, 55, 3, 55, 7, 55, 1726, 10, 55, 12, 55, 14, 55, 1729, 11, 55, 3, 56, 3, 56, 7, 56, 1733, 10, 56, 12, 56, 14, 56, 1736, 11, 56, 3, 56, 5, 56, 1739, 10, 56, 3, 57, 5, 57, 1742, 10, 57, 3, 57, 3, 57, 5, 57, 1746, 10, 57, 3, 58, 6, 58, 1749, 10, 58, 13, 58, 14, 58, 1750, 3, 59, 3, 59, 7, 59, 1755, 10, 59, 12, 59, 14, 59, 1758, 11, 59, 3, 59, 5, 59, 1761, 10, 59, 3, 60, 3, 60, 7, 60, 1765, 10, 60, 12, 60, 14, 60, 1768, 11, 60, 3, 60, 3, 60, 7, 60, 1772, 10, 60, 12, 60, 14, 60, 1775, 11, 60, 5, 60, 1777, 10, 60, 3, 60, 3, 60, 7, 60, 1781, 10, 60, 12, 60, 14, 60, 1784, 11, 60, 3, 60, 3, 60, 7, 60, 1788, 10, 60, 12, 60, 14, 60, 1791, 11, 60, 3, 60, 3, 60, 3, 61, 3, 61, 7, 61, 1797, 10, 61, 12, 61, 14, 61, 1800, 11, 61, 3, 61, 3, 61, 5, 61, 1804, 10, 61, 3, 61, 7, 61, 1807, 10, 61, 12, 61, 14, 61, 1810, 11, 61, 3, 61, 3, 61, 7, 61, 1814, 10, 61, 12, 61, 14, 61, 1817, 11, 61, 3, 61, 3, 61, 5, 61, 1821, 10, 61, 7, 61, 1823, 10, 61, 12, 61, 14, 61, 1826, 11, 61, 3, 61, 7, 61, 1829, 10, 61, 12, 61, 14, 61, 1832, 11, 61, 3, 61, 5, 61, 1835, 10, 61, 3, 61, 7, 61, 1838, 10, 61, 12, 61, 14, 61, 1841, 11, 61, 3, 61, 3, 61, 3, 62, 3, 62, 7, 62, 1847, 10, 62, 12, 62, 14, 62, 1850, 11, 62, 3, 62, 3, 62, 7, 62, 1854, 10, 62, 12, 62, 14, 62, 1857, 11, 62, 3, 62, 3, 62, 3, 63, 5, 63, 1862, 10, 63, 3, 63, 3, 63, 3, 63, 5, 63, 1867, 10, 63, 3, 64, 3, 64, 7, 64, 1871, 10, 64, 12, 64, 14, 64, 1874, 11, 64, 3, 64, 3, 64, 5, 64, 1878, 10, 64, 3, 64, 7, 64, 1881, 10, 64, 12, 64, 14, 64, 1884, 11, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 65, 7, 65, 1892, 10, 65, 12, 65, 14, 65, 1895, 11, 65, 5, 65, 1897, 10, 65, 3, 65, 5, 65, 1900, 10, 65, 3, 66, 3, 66, 7, 66, 1904, 10, 66, 12, 66, 14, 66, 1907, 11, 66, 3, 66, 3, 66, 3, 66, 3, 66, 5, 66, 1913, 10, 66, 3, 67, 3, 67, 3, 67, 7, 67, 1918, 10, 67, 12, 67, 14, 67, 1921, 11, 67, 3, 68, 3, 68, 5, 68, 1925, 10, 68, 3, 69, 3, 69, 7, 69, 1929, 10, 69, 12, 69, 14, 69, 1932, 11, 69, 3, 69, 3, 69, 7, 69, 1936, 10, 69, 12, 69, 14, 69, 1939, 11, 69, 3, 69, 3, 69, 3, 70, 3, 70, 3, 70, 5, 70, 1946, 10, 70, 3, 71, 3, 71, 7, 71, 1950, 10, 71, 12, 71, 14, 71, 1953, 11, 71, 3, 71, 3, 71, 7, 71, 1957, 10, 71, 12, 71, 14, 71, 1960, 11, 71, 3, 71, 3, 71, 5, 71, 1964, 10, 71, 3, 71, 3, 71, 3, 71, 3, 71, 7, 71, 1970, 10, 71, 12, 71, 14, 71, 1973, 11, 71, 3, 71, 5, 71, 1976, 10, 71, 3, 72, 3, 72, 7, 72, 1980, 10, 72, 12, 72, 14, 72, 1983, 11, 72, 3, 72, 3, 72, 3, 72, 3, 72, 7, 72, 1989, 10, 72, 12, 72, 14, 72, 1992, 11, 72, 3, 72, 3, 72, 5, 72, 1996, 10, 72, 3, 73, 3, 73, 7, 73, 2000, 10, 73, 12, 73, 14, 73, 2003, 11, 73, 3, 73, 5, 73, 2006, 10, 73, 3, 73, 7, 73, 2009, 10, 73, 12, 73, 14, 73, 2012, 11, 73, 3, 73, 3, 73, 7, 73, 2016, 10, 73, 12, 73, 14, 73, 2019, 11, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 3, 74, 5, 74, 2031, 10, 74, 3, 74, 7, 74, 2034, 10, 74, 12, 74, 14, 74, 2037, 11, 74, 3, 74, 3, 74, 3, 75, 3, 75, 7, 75, 2043, 10, 75, 12, 75, 14, 75, 2046, 11, 75, 3, 75, 5, 75, 2049, 10, 75, 3, 76, 6, 76, 2052, 10, 76, 13, 76, 14, 76, 2053, 3, 76, 5, 76, 2057, 10, 76, 3, 77, 3, 77, 3, 78, 3, 78, 7, 78, 2063, 10, 78, 12, 78, 14, 78, 2066, 11, 78, 3, 78, 3, 78, 7, 78, 2070, 10, 78, 12, 78, 14, 78, 2073, 11, 78, 3, 78, 7, 78, 2076, 10, 78, 12, 78, 14, 78, 2079, 11, 78, 3, 79, 3, 79, 7, 79, 2083, 10, 79, 12, 79, 14, 79, 2086, 11, 79, 3, 79, 3, 79, 7, 79, 2090, 10, 79, 12, 79, 14, 79, 2093, 11, 79, 3, 79, 7, 79, 2096, 10, 79, 12, 79, 14, 79, 2099, 11, 79, 3, 80, 3, 80, 3, 80, 7, 80, 2104, 10, 80, 12, 80, 14, 80, 2107, 11, 80, 3, 80, 3, 80, 7, 80, 2111, 10, 80, 12, 80, 14, 80, 2114, 11, 80, 3, 81, 3, 81, 3, 81, 7, 81, 2119, 10, 81, 12, 81, 14, 81, 2122, 11, 81, 3, 81, 3, 81, 7, 81, 2126, 10, 81, 12, 81, 14, 81, 2129, 11, 81, 3, 82, 3, 82, 7, 82, 2133, 10, 82, 12, 82, 14, 82, 2136, 11, 82, 3, 83, 3, 83, 3, 83, 7, 83, 2141, 10, 83, 12, 83, 14, 83, 2144, 11, 83, 3, 83, 3, 83, 3, 83, 3, 83, 7, 83, 2150, 10, 83, 12, 83, 14, 83, 2153, 11, 83, 3, 83, 3, 83, 7, 83, 2157, 10, 83, 12, 83, 14, 83, 2160, 11, 83, 3, 84, 3, 84, 7, 84, 2164, 10, 84, 12, 84, 14, 84, 2167, 11, 84, 3, 84, 3, 84, 7, 84, 2171, 10, 84, 12, 84, 14, 84, 2174, 11, 84, 3, 84, 3, 84, 7, 84, 2178, 10, 84, 12, 84, 14, 84, 2181, 11, 84, 3, 85, 3, 85, 3, 85, 3, 86, 3, 86, 3, 86, 7, 86, 2189, 10, 86, 12, 86, 14, 86, 2192, 11, 86, 3, 86, 3, 86, 7, 86, 2196, 10, 86, 12, 86, 14, 86, 2199, 11, 86, 3, 87, 3, 87, 3, 87, 7, 87, 2204, 10, 87, 12, 87, 14, 87, 2207, 11, 87, 3, 87, 7, 87, 2210, 10, 87, 12, 87, 14, 87, 2213, 11, 87, 3, 88, 3, 88, 3, 88, 7, 88, 2218, 10, 88, 12, 88, 14, 88, 2221, 11, 88, 3, 88, 3, 88, 7, 88, 2225, 10, 88, 12, 88, 14, 88, 2228, 11, 88, 3, 89, 3, 89, 3, 89, 7, 89, 2233, 10, 89, 12, 89, 14, 89, 2236, 11, 89, 3, 89, 3, 89, 7, 89, 2240, 10, 89, 12, 89, 14, 89, 2243, 11, 89, 3, 90, 3, 90, 7, 90, 2247, 10, 90, 12, 90, 14, 90, 2250, 11, 90, 3, 90, 3, 90, 7, 90, 2254, 10, 90, 12, 90, 14, 90, 2257, 11, 90, 3, 90, 3, 90, 7, 90, 2261, 10, 90, 12, 90, 14, 90, 2264, 11, 90, 3, 91, 7, 91, 2267, 10, 91, 12, 91, 14, 91, 2270, 11, 91, 3, 91, 3, 91, 3, 92, 3, 92, 3, 92, 3, 92, 7, 92, 2278, 10, 92, 12, 92, 14, 92, 2281, 11, 92, 5, 92, 2283, 10, 92, 3, 93, 3, 93, 7, 93, 2287, 10, 93, 12, 93, 14, 93, 2290, 11, 93, 3, 94, 3, 94, 3, 94, 3, 94, 3, 94, 5, 94, 2297, 10, 94, 3, 95, 3, 95, 3, 95, 3, 95, 3, 95, 5, 95, 2304, 10, 95, 3, 96, 3, 96, 7, 96, 2308, 10, 96, 12, 96, 14, 96, 2311, 11, 96, 3, 96, 3, 96, 7, 96, 2315, 10, 96, 12, 96, 14, 96, 2318, 11, 96, 3, 96, 3, 96, 3, 97, 3, 97, 5, 97, 2324, 10, 97, 3, 98, 3, 98, 7, 98, 2328, 10, 98, 12, 98, 14, 98, 2331, 11, 98, 3, 98, 3, 98, 7, 98, 2335, 10, 98, 12, 98, 14, 98, 2338, 11, 98, 3, 98, 3, 98, 3, 99, 3, 99, 3, 99, 5, 99, 2345, 10, 99, 3, 100, 3, 100, 7, 100, 2349, 10, 100, 12, 100, 14, 100, 2352, 11, 100, 3, 100, 3, 100, 7, 100, 2356, 10, 100, 12, 100, 14, 100, 2359, 11, 100, 3, 100, 3, 100, 7, 100, 2363, 10, 100, 12, 100, 14, 100, 2366, 11, 100, 3, 100, 7, 100, 2369, 10, 100, 12, 100, 14, 100, 2372, 11, 100, 3, 100, 7, 100, 2375, 10, 100, 12, 100, 14, 100, 2378, 11, 100, 3, 100, 5, 100, 2381, 10, 100, 3, 100, 7, 100, 2384, 10, 100, 12, 100, 14, 100, 2387, 11, 100, 3, 100, 3, 100, 3, 101, 3, 101, 7, 101, 2393, 10, 101, 12, 101, 14, 101, 2396, 11, 101, 3, 101, 3, 101, 3, 101, 5, 101, 2401, 10, 101, 3, 102, 5, 102, 2404, 10, 102, 3, 102, 5, 102, 2407, 10, 102, 3, 102, 3, 102, 5, 102, 2411, 10, 102, 3, 103, 7, 103, 2414, 10, 103, 12, 103, 14, 103, 2417, 11, 103, 3, 103, 5, 103, 2420, 10, 103, 3, 103, 7, 103, 2423, 10, 103, 12, 103, 14, 103, 2426, 11, 103, 3, 103, 3, 103, 3, 104, 3, 104, 7, 104, 2432, 10, 104, 12, 104, 14, 104, 2435, 11, 104, 3, 104, 3, 104, 7, 104, 2439, 10, 104, 12, 104, 14, 104, 2442, 11, 104, 3, 104, 3, 104, 7, 104, 2446, 10, 104, 12, 104, 14, 104, 2449, 11, 104, 3, 104, 7, 104, 2452, 10, 104, 12, 104, 14, 104, 2455, 11, 104, 3, 104, 7, 104, 2458, 10, 104, 12, 104, 14, 104, 2461, 11, 104, 3, 104, 5, 104, 2464, 10, 104, 3, 104, 7, 104, 2467, 10, 104, 12, 104, 14, 104, 2470, 11, 104, 3, 104, 3, 104, 3, 105, 3, 105, 7, 105, 2476, 10, 105, 12, 105, 14, 105, 2479, 11, 105, 3, 105, 3, 105, 7, 105, 2483, 10, 105, 12, 105, 14, 105, 2486, 11, 105, 3, 105, 3, 105, 7, 105, 2490, 10, 105, 12, 105, 14, 105, 2493, 11, 105, 3, 105, 7, 105, 2496, 10, 105, 12, 105, 14, 105, 2499, 11, 105, 3, 105, 7, 105, 2502, 10, 105, 12, 105, 14, 105, 2505, 11, 105, 3, 105, 5, 105, 2508, 10, 105, 3, 105, 7, 105, 2511, 10, 105, 12, 105, 14, 105, 2514, 11, 105, 5, 105, 2516, 10, 105, 3, 105, 3, 105, 3, 106, 5, 106, 2521, 10, 106, 3, 106, 7, 106, 2524, 10, 106, 12, 106, 14, 106, 2527, 11, 106, 3, 106, 3, 106, 7, 106, 2531, 10, 106, 12, 106, 14, 106, 2534, 11, 106, 3, 106, 3, 106, 7, 106, 2538, 10, 106, 12, 106, 14, 106, 2541, 11, 106, 5, 106, 2543, 10, 106, 3, 106, 5, 106, 2546, 10, 106, 3, 106, 7, 106, 2549, 10, 106, 12, 106, 14, 106, 2552, 11, 106, 3, 106, 3, 106, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 3, 107, 5, 107, 2570, 10, 107, 3, 108, 3, 108, 7, 108, 2574, 10, 108, 12, 108, 14, 108, 2577, 11, 108, 3, 108, 3, 108, 7, 108, 2581, 10, 108, 12, 108, 14, 108, 2584, 11, 108, 3, 108, 3, 108, 3, 109, 3, 109, 7, 109, 2590, 10, 109, 12, 109, 14, 109, 2593, 11, 109, 3, 109, 3, 109, 7, 109, 2597, 10, 109, 12, 109, 14, 109, 2600, 11, 109, 3, 109, 3, 109, 7, 109, 2604, 10, 109, 12, 109, 14, 109, 2607, 11, 109, 3, 109, 7, 109, 2610, 10, 109, 12, 109, 14, 109, 2613, 11, 109, 3, 109, 7, 109, 2616, 10, 109, 12, 109, 14, 109, 2619, 11, 109, 3, 109, 5, 109, 2622, 10, 109, 3, 109, 7, 109, 2625, 10, 109, 12, 109, 14, 109, 2628, 11, 109, 5, 109, 2630, 10, 109, 3, 109, 3, 109, 3, 110, 3, 110, 3, 111, 3, 111, 5, 111, 2638, 10, 111, 3, 112, 3, 112, 3, 112, 7, 112, 2643, 10, 112, 12, 112, 14, 112, 2646, 11, 112, 3, 112, 3, 112, 3, 113, 3, 113, 3, 113, 3, 113, 7, 113, 2654, 10, 113, 12, 113, 14, 113, 2657, 11, 113, 3, 113, 3, 113, 3, 114, 3, 114, 3, 115, 3, 115, 7, 115, 2665, 10, 115, 12, 115, 14, 115, 2668, 11, 115, 3, 115, 3, 115, 7, 115, 2672, 10, 115, 12, 115, 14, 115, 2675, 11, 115, 3, 115, 3, 115, 3, 116, 3, 116, 3, 117, 3, 117, 7, 117, 2683, 10, 117, 12, 117, 14, 117, 2686, 11, 117, 3, 117, 3, 117, 7, 117, 2690, 10, 117, 12, 117, 14, 117, 2693, 11, 117, 3, 117, 3, 117, 3, 118, 3, 118, 7, 118, 2699, 10, 118, 12, 118, 14, 118, 2702, 11, 118, 3, 118, 5, 118, 2705, 10, 118, 3, 118, 7, 118, 2708, 10, 118, 12, 118, 14, 118, 2711, 11, 118, 3, 118, 3, 118, 7, 118, 2715, 10, 118, 12, 118, 14, 118, 2718, 11, 118, 5, 118, 2720, 10, 118, 3, 118, 3, 118, 7, 118, 2724, 10, 118, 12, 118, 14, 118, 2727, 11, 118, 3, 118, 3, 118, 3, 119, 3, 119, 7, 119, 2733, 10, 119, 12, 119, 14, 119, 2736, 11, 119, 3, 119, 3, 119, 7, 119, 2740, 10, 119, 12, 119, 14, 119, 2743, 11, 119, 3, 119, 7, 119, 2746, 10, 119, 12, 119, 14, 119, 2749, 11, 119, 3, 119, 7, 119, 2752, 10, 119, 12, 119, 14, 119, 2755, 11, 119, 3, 119, 5, 119, 2758, 10, 119, 3, 120, 3, 120, 3, 120, 7, 120, 2763, 10, 120, 12, 120, 14, 120, 2766, 11, 120, 3, 120, 3, 120, 7, 120, 2770, 10, 120, 12, 120, 14, 120, 2773, 11, 120, 3, 120, 5, 120, 2776, 10, 120, 5, 120, 2778, 10, 120, 3, 121, 3, 121, 7, 121, 2782, 10, 121, 12, 121, 14, 121, 2785, 11, 121, 3, 121, 3, 121, 7, 121, 2789, 10, 121, 12, 121, 14, 121, 2792, 11, 121, 3, 121, 3, 121, 5, 121, 2796, 10, 121, 3, 121, 7, 121, 2799, 10, 121, 12, 121, 14, 121, 2802, 11, 121, 3, 121, 3, 121, 7, 121, 2806, 10, 121, 12, 121, 14, 121, 2809, 11, 121, 3, 121, 3, 121, 7, 121, 2813, 10, 121, 12, 121, 14, 121, 2816, 11, 121, 3, 121, 5, 121, 2819, 10, 121, 3, 121, 7, 121, 2822, 10, 121, 12, 121, 14, 121, 2825, 11, 121, 3, 121, 5, 121, 2828, 10, 121, 3, 121, 7, 121, 2831, 10, 121, 12, 121, 14, 121, 2834, 11, 121, 3, 121, 5, 121, 2837, 10, 121, 3, 122, 3, 122, 5, 122, 2841, 10, 122, 3, 123, 3, 123, 7, 123, 2845, 10, 123, 12, 123, 14, 123, 2848, 11, 123, 3, 123, 3, 123, 7, 123, 2852, 10, 123, 12, 123, 14, 123, 2855, 11, 123, 3, 123, 3, 123, 7, 123, 2859, 10, 123, 12, 123, 14, 123, 2862, 11, 123, 5, 123, 2864, 10, 123, 3, 123, 7, 123, 2867, 10, 123, 12, 123, 14, 123, 2870, 11, 123, 3, 123, 5, 123, 2873, 10, 123, 3, 124, 3, 124, 3, 125, 3, 125, 3, 125, 7, 125, 2880, 10, 125, 12, 125, 14, 125, 2883, 11, 125, 3, 125, 3, 125, 7, 125, 2887, 10, 125, 12, 125, 14, 125, 2890, 11, 125, 3, 125, 3, 125, 5, 125, 2894, 10, 125, 3, 125, 3, 125, 5, 125, 2898, 10, 125, 3, 125, 5, 125, 2901, 10, 125, 3, 126, 3, 126, 7, 126, 2905, 10, 126, 12, 126, 14, 126, 2908, 11, 126, 3, 126, 3, 126, 7, 126, 2912, 10, 126, 12, 126, 14, 126, 2915, 11, 126, 3, 126, 3, 126, 7, 126, 2919, 10, 126, 12, 126, 14, 126, 2922, 11, 126, 3, 126, 3, 126, 7, 126, 2926, 10, 126, 12, 126, 14, 126, 2929, 11, 126, 3, 126, 3, 126, 5, 126, 2933, 10, 126, 3, 126, 7, 126, 2936, 10, 126, 12, 126, 14, 126, 2939, 11, 126, 3, 126, 5, 126, 2942, 10, 126, 3, 126, 7, 126, 2945, 10, 126, 12, 126, 14, 126, 2948, 11, 126, 3, 126, 3, 126, 7, 126, 2952, 10, 126, 12, 126, 14, 126, 2955, 11, 126, 3, 126, 3, 126, 5, 126, 2959, 10, 126, 3, 126, 5, 126, 2962, 10, 126, 3, 127, 3, 127, 7, 127, 2966, 10, 127, 12, 127, 14, 127, 2969, 11, 127, 3, 127, 7, 127, 2972, 10, 127, 12, 127, 14, 127, 2975, 11, 127, 3, 127, 3, 127, 7, 127, 2979, 10, 127, 12, 127, 14, 127, 2982, 11, 127, 3, 127, 3, 127, 7, 127, 2986, 10, 127, 12, 127, 14, 127, 2989, 11, 127, 3, 127, 3, 127, 7, 127, 2993, 10, 127, 12, 127, 14, 127, 2996, 11, 127, 5, 127, 2998, 10, 127, 3, 127, 3, 127, 3, 127, 3, 128, 3, 128, 7, 128, 3005, 10, 128, 12, 128, 14, 128, 3008, 11, 128, 3, 128, 5, 128, 3011, 10, 128, 3, 128, 7, 128, 3014, 10, 128, 12, 128, 14, 128, 3017, 11, 128, 3, 128, 3, 128, 7, 128, 3021, 10, 128, 12, 128, 14, 128, 3024, 11, 128, 3, 128, 3, 128, 7, 128, 3028, 10, 128, 12, 128, 14, 128, 3031, 11, 128, 7, 128, 3033, 10, 128, 12, 128, 14, 128, 3036, 11, 128, 3, 128, 7, 128, 3039, 10, 128, 12, 128, 14, 128, 3042, 11, 128, 3, 128, 3, 128, 3, 129, 3, 129, 7, 129, 3048, 10, 129, 12, 129, 14, 129, 3051, 11, 129, 3, 129, 3, 129, 7, 129, 3055, 10, 129, 12, 129, 14, 129, 3058, 11, 129, 3, 129, 7, 129, 3061, 10, 129, 12, 129, 14, 129, 3064, 11, 129, 3, 129, 7, 129, 3067, 10, 129, 12, 129, 14, 129, 3070, 11, 129, 3, 129, 5, 129, 3073, 10, 129, 3, 129, 7, 129, 3076, 10, 129, 12, 129, 14, 129, 3079, 11, 129, 3, 129, 3, 129, 7, 129, 3083, 10, 129, 12, 129, 14, 129, 3086, 11, 129, 3, 129, 3, 129, 5, 129, 3090, 10, 129, 3, 129, 3, 129, 7, 129, 3094, 10, 129, 12, 129, 14, 129, 3097, 11, 129, 3, 129, 3, 129, 7, 129, 3101, 10, 129, 12, 129, 14, 129, 3104, 11, 129, 3, 129, 3, 129, 5, 129, 3108, 10, 129, 5, 129, 3110, 10, 129, 3, 130, 3, 130, 3, 130, 5, 130, 3115, 10, 130, 3, 131, 3, 131, 7, 131, 3119, 10, 131, 12, 131, 14, 131, 3122, 11, 131, 3, 131, 3, 131, 3, 132, 3, 132, 7, 132, 3128, 10, 132, 12, 132, 14, 132, 3131, 11, 132, 3, 132, 3, 132, 3, 133, 3, 133, 7, 133, 3137, 10, 133, 12, 133, 14, 133, 3140, 11, 133, 3, 133, 3, 133, 7, 133, 3144, 10, 133, 12, 133, 14, 133, 3147, 11, 133, 3, 133, 6, 133, 3150, 10, 133, 13, 133, 14, 133, 3151, 3, 133, 7, 133, 3155, 10, 133, 12, 133, 14, 133, 3158, 11, 133, 3, 133, 5, 133, 3161, 10, 133, 3, 133, 7, 133, 3164, 10, 133, 12, 133, 14, 133, 3167, 11, 133, 3, 133, 5, 133, 3170, 10, 133, 3, 134, 3, 134, 7, 134, 3174, 10, 134, 12, 134, 14, 134, 3177, 11, 134, 3, 134, 3, 134, 7, 134, 3181, 10, 134, 12, 134, 14, 134, 3184, 11, 134, 3, 134, 3, 134, 3, 134, 3, 134, 7, 134, 3190, 10, 134, 12, 134, 14, 134, 3193, 11, 134, 3, 134, 5, 134, 3196, 10, 134, 3, 134, 3, 134, 7, 134, 3200, 10, 134, 12, 134, 14, 134, 3203, 11, 134, 3, 134, 3, 134, 3, 135, 3, 135, 7, 135, 3209, 10, 135, 12, 135, 14, 135, 3212, 11, 135, 3, 135, 3, 135, 3, 136, 3, 136, 7, 136, 3218, 10, 136, 12, 136, 14, 136, 3221, 11, 136, 3, 136, 3, 136, 3, 136, 5, 136, 3226, 10, 136, 3, 136, 3, 136, 3, 136, 3, 136, 5, 136, 3232, 10, 136, 3, 137, 5, 137, 3235, 10, 137, 3, 137, 3, 137, 7, 137, 3239, 10, 137, 12, 137, 14, 137, 3242, 11, 137, 3, 137, 3, 137, 5, 137, 3246, 10, 137, 3, 138, 3, 138, 3, 139, 3, 139, 3, 140, 3, 140, 3, 141, 3, 141, 3, 142, 3, 142, 3, 143, 3, 143, 3, 144, 3, 144, 3, 145, 3, 145, 3, 146, 3, 146, 3, 146, 3, 146, 3, 146, 5, 146, 3269, 10, 146, 3, 147, 3, 147, 3, 147, 3, 147, 5, 147, 3275, 10, 147, 3, 148, 3, 148, 3, 149, 7, 149, 3280, 10, 149, 12, 149, 14, 149, 3283, 11, 149, 3, 149, 3, 149, 7, 149, 3287, 10, 149, 12, 149, 14, 149, 3290, 11, 149, 3, 149, 3, 149, 5, 149, 3294, 10, 149, 3, 150, 3, 150, 3, 150, 3, 151, 3, 151, 6, 151, 3301, 10, 151, 13, 151, 14, 151, 3302, 3, 152, 3, 152, 6, 152, 3307, 10, 152, 13, 152, 14, 152, 3308, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 5, 153, 3319, 10, 153, 3, 153, 7, 153, 3322, 10, 153, 12, 153, 14, 153, 3325, 11, 153, 3, 154, 6, 154, 3328, 10, 154, 13, 154, 14, 154, 3329, 3, 155, 3, 155, 3, 155, 7, 155, 3335, 10, 155, 12, 155, 14, 155, 3338, 11, 155, 5, 155, 3340, 10, 155, 3, 156, 3, 156, 3, 157, 3, 157, 3, 158, 3, 158, 3, 159, 3, 159, 3, 160, 6, 160, 3351, 10, 160, 13, 160, 14, 160, 3352, 3, 161, 3, 161, 7, 161, 3357, 10, 161, 12, 161, 14, 161, 3360, 11, 161, 3, 161, 3, 161, 7, 161, 3364, 10, 161, 12, 161, 14, 161, 3367, 11, 161, 3, 161, 5, 161, 3370, 10, 161, 3, 162, 3, 162, 3, 163, 3, 163, 3, 164, 3, 164, 3, 165, 3, 165, 3, 166, 3, 166, 3, 167, 3, 167, 3, 168, 3, 168, 5, 168, 3386, 10, 168, 3, 168, 7, 168, 3389, 10, 168, 12, 168, 14, 168, 3392, 11, 168, 3, 169, 3, 169, 7, 169, 3396, 10, 169, 12, 169, 14, 169, 3399, 11, 169, 3, 169, 3, 169, 5, 169, 3403, 10, 169, 3, 169, 3, 169, 3, 170, 3, 170, 7, 170, 3409, 10, 170, 12, 170, 14, 170, 3412, 11, 170, 3, 170, 3, 170, 5, 170, 3416, 10, 170, 3, 170, 3, 170, 6, 170, 3420, 10, 170, 13, 170, 14, 170, 3421, 3, 170, 3, 170, 3, 171, 3, 171, 3, 171, 7, 171, 3429, 10, 171, 12, 171, 14, 171, 3432, 11, 171, 3, 171, 3, 171, 3, 172, 3, 172, 5, 172, 3438, 10, 172, 3, 173, 3, 173, 3, 174, 3, 174, 7, 174, 3444, 10, 174, 12, 174, 14, 174, 3447, 11, 174, 3, 174, 3, 174, 7, 174, 3451, 10, 174, 12, 174, 14, 174, 3454, 11, 174, 3, 174, 2, 2, 175, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 256, 258, 260, 262, 264, 266, 268, 270, 272, 274, 276, 278, 280, 282, 284, 286, 288, 290, 292, 294, 296, 298, 300, 302, 304, 306, 308, 310, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 2, 32, 4, 2, 42, 42, 44, 44, 3, 2, 78, 79, 3, 2, 85, 86, 3, 2, 46, 47, 3, 2, 42, 43, 4, 2, 7, 7, 29, 29, 4, 2, 137, 137, 140, 147, 3, 2, 161, 163, 3, 2, 166, 168, 4, 2, 61, 61, 85, 85, 4, 2, 58, 58, 99, 99, 3, 2, 31, 35, 4, 2, 52, 53, 55, 56, 3, 2, 48, 51, 4, 2, 104, 104, 106, 106, 4, 2, 103, 103, 105, 105, 3, 2, 20, 21, 3, 2, 17, 19, 4, 2, 54, 54, 102, 102, 3, 2, 26, 27, 3, 2, 113, 118, 4, 2, 125, 125, 130, 130, 3, 2, 109, 112, 4, 2, 104, 104, 107, 107, 3, 2, 119, 124, 3, 2, 126, 128, 3, 2, 131, 133, 3, 2, 135, 136, 3, 2, 64, 71, 9, 2, 63, 71, 73, 73, 81, 84, 88, 88, 93, 94, 107, 136, 148, 148, 2, 3868, 2, 349, 3, 2, 2, 2, 4, 374, 3, 2, 2, 2, 6, 400, 3, 2, 2, 2, 8, 406, 3, 2, 2, 2, 10, 443, 3, 2, 2, 2, 12, 448, 3, 2, 2, 2, 14, 451, 3, 2, 2, 2, 16, 461, 3, 2, 2, 2, 18, 464, 3, 2, 2, 2, 20, 469, 3, 2, 2, 2, 22, 508, 3, 2, 2, 2, 24, 511, 3, 2, 2, 2, 26, 602, 3, 2, 2, 2, 28, 606, 3, 2, 2, 2, 30, 622, 3, 2, 2, 2, 32, 669, 3, 2, 2, 2, 34, 705, 3, 2, 2, 2, 36, 729, 3, 2, 2, 2, 38, 731, 3, 2, 2, 2, 40, 737, 3, 2, 2, 2, 42, 750, 3, 2, 2, 2, 44, 767, 3, 2, 2, 2, 46, 812, 3, 2, 2, 2, 48, 837, 3, 2, 2, 2, 50, 867, 3, 2, 2, 2, 52, 892, 3, 2, 2, 2, 54, 899, 3, 2, 2, 2, 56, 901, 3, 2, 2, 2, 58, 911, 3, 2, 2, 2, 60, 955, 3, 2, 2, 2, 62, 1002, 3, 2, 2, 2, 64, 1022, 3, 2, 2, 2, 66, 1108, 3, 2, 2, 2, 68, 1113, 3, 2, 2, 2, 70, 1139, 3, 2, 2, 2, 72, 1184, 3, 2, 2, 2, 74, 1297, 3, 2, 2, 2, 76, 1307, 3, 2, 2, 2, 78, 1350, 3, 2, 2, 2, 80, 1409, 3, 2, 2, 2, 82, 1456, 3, 2, 2, 2, 84, 1475, 3, 2, 2, 2, 86, 1492, 3, 2, 2, 2, 88, 1509, 3, 2, 2, 2, 90, 1545, 3, 2, 2, 2, 92, 1580, 3, 2, 2, 2, 94, 1589, 3, 2, 2, 2, 96, 1623, 3, 2, 2, 2, 98, 1659, 3, 2, 2, 2, 100, 1681, 3, 2, 2, 2, 102, 1691, 3, 2, 2, 2, 104, 1695, 3, 2, 2, 2, 106, 1708, 3, 2, 2, 2, 108, 1710, 3, 2, 2, 2, 110, 1730, 3, 2, 2, 2, 112, 1745, 3, 2, 2, 2, 114, 1748, 3, 2, 2, 2, 116, 1760, 3, 2, 2, 2, 118, 1776, 3, 2, 2, 2, 120, 1794, 3, 2, 2, 2, 122, 1844, 3, 2, 2, 2, 124, 1861, 3, 2, 2, 2, 126, 1868, 3, 2, 2, 2, 128, 1896, 3, 2, 2, 2, 130, 1905, 3, 2, 2, 2, 132, 1914, 3, 2, 2, 2, 134, 1924, 3, 2, 2, 2, 136, 1926, 3, 2, 2, 2, 138, 1945, 3, 2, 2, 2, 140, 1947, 3, 2, 2, 2, 142, 1977, 3, 2, 2, 2, 144, 1997, 3, 2, 2, 2, 146, 2030, 3, 2, 2, 2, 148, 2048, 3, 2, 2, 2, 150, 2056, 3, 2, 2, 2, 152, 2058, 3, 2, 2, 2, 154, 2060, 3, 2, 2, 2, 156, 2080, 3, 2, 2, 2, 158, 2100, 3, 2, 2, 2, 160, 2115, 3, 2, 2, 2, 162, 2130, 3, 2, 2, 2, 164, 2137, 3, 2, 2, 2, 166, 2161, 3, 2, 2, 2, 168, 2182, 3, 2, 2, 2, 170, 2185, 3, 2, 2, 2, 172, 2200, 3, 2, 2, 2, 174, 2214, 3, 2, 2, 2, 176, 2229, 3, 2, 2, 2, 178, 2244, 3, 2, 2, 2, 180, 2268, 3, 2, 2, 2, 182, 2282, 3, 2, 2, 2, 184, 2284, 3, 2, 2, 2, 186, 2296, 3, 2, 2, 2, 188, 2303, 3, 2, 2, 2, 190, 2305, 3, 2, 2, 2, 192, 2323, 3, 2, 2, 2, 194, 2325, 3, 2, 2, 2, 196, 2344, 3, 2, 2, 2, 198, 2346, 3, 2, 2, 2, 200, 2390, 3, 2, 2, 2, 202, 2403, 3, 2, 2, 2, 204, 2415, 3, 2, 2, 2, 206, 2429, 3, 2, 2, 2, 208, 2473, 3, 2, 2, 2, 210, 2520, 3, 2, 2, 2, 212, 2569, 3, 2, 2, 2, 214, 2571, 3, 2, 2, 2, 216, 2587, 3, 2, 2, 2, 218, 2633, 3, 2, 2, 2, 220, 2637, 3, 2, 2, 2, 222, 2639, 3, 2, 2, 2, 224, 2649, 3, 2, 2, 2, 226, 2660, 3, 2, 2, 2, 228, 2662, 3, 2, 2, 2, 230, 2678, 3, 2, 2, 2, 232, 2680, 3, 2, 2, 2, 234, 2696, 3, 2, 2, 2, 236, 2730, 3, 2, 2, 2, 238, 2777, 3, 2, 2, 2, 240, 2779, 3, 2, 2, 2, 242, 2840, 3, 2, 2, 2, 244, 2842, 3, 2, 2, 2, 246, 2874, 3, 2, 2, 2, 248, 2900, 3, 2, 2, 2, 250, 2902, 3, 2, 2, 2, 252, 2963, 3, 2, 2, 2, 254, 3002, 3, 2, 2, 2, 256, 3109, 3, 2, 2, 2, 258, 3114, 3, 2, 2, 2, 260, 3116, 3, 2, 2, 2, 262, 3125, 3, 2, 2, 2, 264, 3134, 3, 2, 2, 2, 266, 3171, 3, 2, 2, 2, 268, 3206, 3, 2, 2, 2, 270, 3231, 3, 2, 2, 2, 272, 3234, 3, 2, 2, 2, 274, 3247, 3, 2, 2, 2, 276, 3249, 3, 2, 2, 2, 278, 3251, 3, 2, 2, 2, 280, 3253, 3, 2, 2, 2, 282, 3255, 3, 2, 2, 2, 284, 3257, 3, 2, 2, 2, 286, 3259, 3, 2, 2, 2, 288, 3261, 3, 2, 2, 2, 290, 3268, 3, 2, 2, 2, 292, 3274, 3, 2, 2, 2, 294, 3276, 3, 2, 2, 2, 296, 3293, 3, 2, 2, 2, 298, 3295, 3, 2, 2, 2, 300, 3300, 3, 2, 2, 2, 302, 3306, 3, 2, 2, 2, 304, 3318, 3, 2, 2, 2, 306, 3327, 3, 2, 2, 2, 308, 3339, 3, 2, 2, 2, 310, 3341, 3, 2, 2, 2, 312, 3343, 3, 2, 2, 2, 314, 3345, 3, 2, 2, 2, 316, 3347, 3, 2, 2, 2, 318, 3350, 3, 2, 2, 2, 320, 3369, 3, 2, 2, 2, 322, 3371, 3, 2, 2, 2, 324, 3373, 3, 2, 2, 2, 326, 3375, 3, 2, 2, 2, 328, 3377, 3, 2, 2, 2, 330, 3379, 3, 2, 2, 2, 332, 3381, 3, 2, 2, 2, 334, 3385, 3, 2, 2, 2, 336, 3402, 3, 2, 2, 2, 338, 3415, 3, 2, 2, 2, 340, 3425, 3, 2, 2, 2, 342, 3437, 3, 2, 2, 2, 344, 3439, 3, 2, 2, 2, 346, 3441, 3, 2, 2, 2, 348, 350, 5, 6, 4, 2, 349, 348, 3, 2, 2, 2, 349, 350, 3, 2, 2, 2, 350, 354, 3, 2, 2, 2, 351, 353, 7, 7, 2, 2, 352, 351, 3, 2, 2, 2, 353, 356, 3, 2, 2, 2, 354, 352, 3, 2, 2, 2, 354, 355, 3, 2, 2, 2, 355, 360, 3, 2, 2, 2, 356, 354, 3, 2, 2, 2, 357, 359, 5, 8, 5, 2, 358, 357, 3, 2, 2, 2, 359, 362, 3, 2, 2, 2, 360, 358, 3, 2, 2, 2, 360, 361, 3, 2, 2, 2, 361, 363, 3, 2, 2, 2, 362, 360, 3, 2, 2, 2, 363, 364, 5, 10, 6, 2, 364, 368, 5, 12, 7, 2, 365, 367, 5, 18, 10, 2, 366, 365, 3, 2, 2, 2, 367, 370, 3, 2, 2, 2, 368, 366, 3, 2, 2, 2, 368, 369, 3, 2, 2, 2, 369, 371, 3, 2, 2, 2, 370, 368, 3, 2, 2, 2, 371, 372, 7, 2, 2, 3, 372, 3, 3, 2, 2, 2, 373, 375, 5, 6, 4, 2, 374, 373, 3, 2, 2, 2, 374, 375, 3, 2, 2, 2, 375, 379, 3, 2, 2, 2, 376, 378, 7, 7, 2, 2, 377, 376, 3, 2, 2, 2, 378, 381, 3, 2, 2, 2, 379, 377, 3, 2, 2, 2, 379, 380, 3, 2, 2, 2, 380, 385, 3, 2, 2, 2, 381, 379, 3, 2, 2, 2, 382, 384, 5, 8, 5, 2, 383, 382, 3, 2, 2, 2, 384, 387, 3, 2, 2, 2, 385, 383, 3, 2, 2, 2, 385, 386, 3, 2, 2, 2, 386, 388, 3, 2, 2, 2, 387, 385, 3, 2, 2, 2, 388, 389, 5, 10, 6, 2, 389, 395, 5, 12, 7, 2, 390, 391, 5, 130, 66, 2, 391, 392, 5, 148, 75, 2, 392, 394, 3, 2, 2, 2, 393, 390, 3, 2, 2, 2, 394, 397, 3, 2, 2, 2, 395, 393, 3, 2, 2, 2, 395, 396, 3, 2, 2, 2, 396, 398, 3, 2, 2, 2, 397, 395, 3, 2, 2, 2, 398, 399, 7, 2, 2, 3, 399, 5, 3, 2, 2, 2, 400, 402, 7, 3, 2, 2, 401, 403, 7, 7, 2, 2, 402, 401, 3, 2, 2, 2, 403, 404, 3, 2, 2, 2, 404, 402, 3, 2, 2, 2, 404, 405, 3, 2, 2, 2, 405, 7, 3, 2, 2, 2, 406, 407, 9, 2, 2, 2, 407, 411, 7, 63, 2, 2, 408, 410, 7, 7, 2, 2, 409, 408, 3, 2, 2, 2, 410, 413, 3, 2, 2, 2, 411, 409, 3, 2, 2, 2, 411, 412, 3, 2, 2, 2, 412, 414, 3, 2, 2, 2, 413, 411, 3, 2, 2, 2, 414, 418, 7, 28, 2, 2, 415, 417, 7, 7, 2, 2, 416, 415, 3, 2, 2, 2, 417, 420, 3, 2, 2, 2, 418, 416, 3, 2, 2, 2, 418, 419, 3, 2, 2, 2, 419, 430, 3, 2, 2, 2, 420, 418, 3, 2, 2, 2, 421, 423, 7, 13, 2, 2, 422, 424, 5, 342, 172, 2, 423, 422, 3, 2, 2, 2, 424, 425, 3, 2, 2, 2, 425, 423, 3, 2, 2, 2, 425, 426, 3, 2, 2, 2, 426, 427, 3, 2, 2, 2, 427, 428, 7, 14, 2, 2, 428, 431, 3, 2, 2, 2, 429, 431, 5, 342, 172, 2, 430, 421, 3, 2, 2, 2, 430, 429, 3, 2, 2, 2, 431, 435, 3, 2, 2, 2, 432, 434, 7, 7, 2, 2, 433, 432, 3, 2, 2, 2, 434, 437, 3, 2, 2, 2, 435, 433, 3, 2, 2, 2, 435, 436, 3, 2, 2, 2, 436, 9, 3, 2, 2, 2, 437, 435, 3, 2, 2, 2, 438, 439, 7, 72, 2, 2, 439, 441, 5, 346, 174, 2, 440, 442, 5, 148, 75, 2, 441, 440, 3, 2, 2, 2, 441, 442, 3, 2, 2, 2, 442, 444, 3, 2, 2, 2, 443, 438, 3, 2, 2, 2, 443, 444, 3, 2, 2, 2, 444, 11, 3, 2, 2, 2, 445, 447, 5, 14, 8, 2, 446, 445, 3, 2, 2, 2, 447, 450, 3, 2, 2, 2, 448, 446, 3, 2, 2, 2, 448, 449, 3, 2, 2, 2, 449, 13, 3, 2, 2, 2, 450, 448, 3, 2, 2, 2, 451, 452, 7, 73, 2, 2, 452, 456, 5, 346, 174, 2, 453, 454, 7, 9, 2, 2, 454, 457, 7, 17, 2, 2, 455, 457, 5, 16, 9, 2, 456, 453, 3, 2, 2, 2, 456, 455, 3, 2, 2, 2, 456, 457, 3, 2, 2, 2, 457, 459, 3, 2, 2, 2, 458, 460, 5, 148, 75, 2, 459, 458, 3, 2, 2, 2, 459, 460, 3, 2, 2, 2, 460, 15, 3, 2, 2, 2, 461, 462, 7, 102, 2, 2, 462, 463, 5, 344, 173, 2, 463, 17, 3, 2, 2, 2, 464, 466, 5, 22, 12, 2, 465, 467, 5, 150, 76, 2, 466, 465, 3, 2, 2, 2, 466, 467, 3, 2, 2, 2, 467, 19, 3, 2, 2, 2, 468, 470, 5, 300, 151, 2, 469, 468, 3, 2, 2, 2, 469, 470, 3, 2, 2, 2, 470, 471, 3, 2, 2, 2, 471, 475, 7, 80, 2, 2, 472, 474, 7, 7, 2, 2, 473, 472, 3, 2, 2, 2, 474, 477, 3, 2, 2, 2, 475, 473, 3, 2, 2, 2, 475, 476, 3, 2, 2, 2, 476, 478, 3, 2, 2, 2, 477, 475, 3, 2, 2, 2, 478, 486, 5, 344, 173, 2, 479, 481, 7, 7, 2, 2, 480, 479, 3, 2, 2, 2, 481, 484, 3, 2, 2, 2, 482, 480, 3, 2, 2, 2, 482, 483, 3, 2, 2, 2, 483, 485, 3, 2, 2, 2, 484, 482, 3, 2, 2, 2, 485, 487, 5, 44, 23, 2, 486, 482, 3, 2, 2, 2, 486, 487, 3, 2, 2, 2, 487, 491, 3, 2, 2, 2, 488, 490, 7, 7, 2, 2, 489, 488, 3, 2, 2, 2, 490, 493, 3, 2, 2, 2, 491, 489, 3, 2, 2, 2, 491, 492, 3, 2, 2, 2, 492, 494, 3, 2, 2, 2, 493, 491, 3, 2, 2, 2, 494, 498, 7, 30, 2, 2, 495, 497, 7, 7, 2, 2, 496, 495, 3, 2, 2, 2, 497, 500, 3, 2, 2, 2, 498, 496, 3, 2, 2, 2, 498, 499, 3, 2, 2, 2, 499, 501, 3, 2, 2, 2, 500, 498, 3, 2, 2, 2, 501, 502, 5, 100, 51, 2, 502, 21, 3, 2, 2, 2, 503, 509, 5, 24, 13, 2, 504, 509, 5, 88, 45, 2, 505, 509, 5, 64, 33, 2, 506, 509, 5, 72, 37, 2, 507, 509, 5, 20, 11, 2, 508, 503, 3, 2, 2, 2, 508, 504, 3, 2, 2, 2, 508, 505, 3, 2, 2, 2, 508, 506, 3, 2, 2, 2, 508, 507, 3, 2, 2, 2, 509, 23, 3, 2, 2, 2, 510, 512, 5, 300, 151, 2, 511, 510, 3, 2, 2, 2, 511, 512, 3, 2, 2, 2, 512, 524, 3, 2, 2, 2, 513, 525, 7, 74, 2, 2, 514, 518, 7, 76, 2, 2, 515, 517, 7, 7, 2, 2, 516, 515, 3, 2, 2, 2, 517, 520, 3, 2, 2, 2, 518, 516, 3, 2, 2, 2, 518, 519, 3, 2, 2, 2, 519, 522, 3, 2, 2, 2, 520, 518, 3, 2, 2, 2, 521, 514, 3, 2, 2, 2, 521, 522, 3, 2, 2, 2, 522, 523, 3, 2, 2, 2, 523, 525, 7, 75, 2, 2, 524, 513, 3, 2, 2, 2, 524, 521, 3, 2, 2, 2, 525, 529, 3, 2, 2, 2, 526, 528, 7, 7, 2, 2, 527, 526, 3, 2, 2, 2, 528, 531, 3, 2, 2, 2, 529, 527, 3, 2, 2, 2, 529, 530, 3, 2, 2, 2, 530, 532, 3, 2, 2, 2, 531, 529, 3, 2, 2, 2, 532, 540, 5, 344, 173, 2, 533, 535, 7, 7, 2, 2, 534, 533, 3, 2, 2, 2, 535, 538, 3, 2, 2, 2, 536, 534, 3, 2, 2, 2, 536, 537, 3, 2, 2, 2, 537, 539, 3, 2, 2, 2, 538, 536, 3, 2, 2, 2, 539, 541, 5, 44, 23, 2, 540, 536, 3, 2, 2, 2, 540, 541, 3, 2, 2, 2, 541, 549, 3, 2, 2, 2, 542, 544, 7, 7, 2, 2, 543, 542, 3, 2, 2, 2, 544, 547, 3, 2, 2, 2, 545, 543, 3, 2, 2, 2, 545, 546, 3, 2, 2, 2, 546, 548, 3, 2, 2, 2, 547, 545, 3, 2, 2, 2, 548, 550, 5, 26, 14, 2, 549, 545, 3, 2, 2, 2, 549, 550, 3, 2, 2, 2, 550, 565, 3, 2, 2, 2, 551, 553, 7, 7, 2, 2, 552, 551, 3, 2, 2, 2, 553, 556, 3, 2, 2, 2, 554, 552, 3, 2, 2, 2, 554, 555, 3, 2, 2, 2, 555, 557, 3, 2, 2, 2, 556, 554, 3, 2, 2, 2, 557, 561, 7, 28, 2, 2, 558, 560, 7, 7, 2, 2, 559, 558, 3, 2, 2, 2, 560, 563, 3, 2, 2, 2, 561, 559, 3, 2, 2, 2, 561, 562, 3, 2, 2, 2, 562, 564, 3, 2, 2, 2, 563, 561, 3, 2, 2, 2, 564, 566, 5, 34, 18, 2, 565, 554, 3, 2, 2, 2, 565, 566, 3, 2, 2, 2, 566, 574, 3, 2, 2, 2, 567, 569, 7, 7, 2, 2, 568, 567, 3, 2, 2, 2, 569, 572, 3, 2, 2, 2, 570, 568, 3, 2, 2, 2, 570, 571, 3, 2, 2, 2, 571, 573, 3, 2, 2, 2, 572, 570, 3, 2, 2, 2, 573, 575, 5, 48, 25, 2, 574, 570, 3, 2, 2, 2, 574, 575, 3, 2, 2, 2, 575, 590, 3, 2, 2, 2, 576, 578, 7, 7, 2, 2, 577, 576, 3, 2, 2, 2, 578, 581, 3, 2, 2, 2, 579, 577, 3, 2, 2, 2, 579, 580, 3, 2, 2, 2, 580, 582, 3, 2, 2, 2, 581, 579, 3, 2, 2, 2, 582, 591, 5, 28, 15, 2, 583, 585, 7, 7, 2, 2, 584, 583, 3, 2, 2, 2, 585, 588, 3, 2, 2, 2, 586, 584, 3, 2, 2, 2, 586, 587, 3, 2, 2, 2, 587, 589, 3, 2, 2, 2, 588, 586, 3, 2, 2, 2, 589, 591, 5, 94, 48, 2, 590, 579, 3, 2, 2, 2, 590, 586, 3, 2, 2, 2, 590, 591, 3, 2, 2, 2, 591, 25, 3, 2, 2, 2, 592, 594, 5, 300, 151, 2, 593, 592, 3, 2, 2, 2, 593, 594, 3, 2, 2, 2, 594, 595, 3, 2, 2, 2, 595, 599, 7, 81, 2, 2, 596, 598, 7, 7, 2, 2, 597, 596, 3, 2, 2, 2, 598, 601, 3, 2, 2, 2, 599, 597, 3, 2, 2, 2, 599, 600, 3, 2, 2, 2, 600, 603, 3, 2, 2, 2, 601, 599, 3, 2, 2, 2, 602, 593, 3, 2, 2, 2, 602, 603, 3, 2, 2, 2, 603, 604, 3, 2, 2, 2, 604, 605, 5, 30, 16, 2, 605, 27, 3, 2, 2, 2, 606, 610, 7, 15, 2, 2, 607, 609, 7, 7, 2, 2, 608, 607, 3, 2, 2, 2, 609, 612, 3, 2, 2, 2, 610, 608, 3, 2, 2, 2, 610, 611, 3, 2, 2, 2, 611, 613, 3, 2, 2, 2, 612, 610, 3, 2, 2, 2, 613, 617, 5, 52, 27, 2, 614, 616, 7, 7, 2, 2, 615, 614, 3, 2, 2, 2, 616, 619, 3, 2, 2, 2, 617, 615, 3, 2, 2, 2, 617, 618, 3, 2, 2, 2, 618, 620, 3, 2, 2, 2, 619, 617, 3, 2, 2, 2, 620, 621, 7, 16, 2, 2, 621, 29, 3, 2, 2, 2, 622, 626, 7, 11, 2, 2, 623, 625, 7, 7, 2, 2, 624, 623, 3, 2, 2, 2, 625, 628, 3, 2, 2, 2, 626, 624, 3, 2, 2, 2, 626, 627, 3, 2, 2, 2, 627, 658, 3, 2, 2, 2, 628, 626, 3, 2, 2, 2, 629, 646, 5, 32, 17, 2, 630, 632, 7, 7, 2, 2, 631, 630, 3, 2, 2, 2, 632, 635, 3, 2, 2, 2, 633, 631, 3, 2, 2, 2, 633, 634, 3, 2, 2, 2, 634, 636, 3, 2, 2, 2, 635, 633, 3, 2, 2, 2, 636, 640, 7, 10, 2, 2, 637, 639, 7, 7, 2, 2, 638, 637, 3, 2, 2, 2, 639, 642, 3, 2, 2, 2, 640, 638, 3, 2, 2, 2, 640, 641, 3, 2, 2, 2, 641, 643, 3, 2, 2, 2, 642, 640, 3, 2, 2, 2, 643, 645, 5, 32, 17, 2, 644, 633, 3, 2, 2, 2, 645, 648, 3, 2, 2, 2, 646, 644, 3, 2, 2, 2, 646, 647, 3, 2, 2, 2, 647, 656, 3, 2, 2, 2, 648, 646, 3, 2, 2, 2, 649, 651, 7, 7, 2, 2, 650, 649, 3, 2, 2, 2, 651, 654, 3, 2, 2, 2, 652, 650, 3, 2, 2, 2, 652, 653, 3, 2, 2, 2, 653, 655, 3, 2, 2, 2, 654, 652, 3, 2, 2, 2, 655, 657, 7, 10, 2, 2, 656, 652, 3, 2, 2, 2, 656, 657, 3, 2, 2, 2, 657, 659, 3, 2, 2, 2, 658, 629, 3, 2, 2, 2, 658, 659, 3, 2, 2, 2, 659, 663, 3, 2, 2, 2, 660, 662, 7, 7, 2, 2, 661, 660, 3, 2, 2, 2, 662, 665, 3, 2, 2, 2, 663, 661, 3, 2, 2, 2, 663, 664, 3, 2, 2, 2, 664, 666, 3, 2, 2, 2, 665, 663, 3, 2, 2, 2, 666, 667, 7, 12, 2, 2, 667, 31, 3, 2, 2, 2, 668, 670, 5, 300, 151, 2, 669, 668, 3, 2, 2, 2, 669, 670, 3, 2, 2, 2, 670, 672, 3, 2, 2, 2, 671, 673, 9, 3, 2, 2, 672, 671, 3, 2, 2, 2, 672, 673, 3, 2, 2, 2, 673, 677, 3, 2, 2, 2, 674, 676, 7, 7, 2, 2, 675, 674, 3, 2, 2, 2, 676, 679, 3, 2, 2, 2, 677, 675, 3, 2, 2, 2, 677, 678, 3, 2, 2, 2, 678, 680, 3, 2, 2, 2, 679, 677, 3, 2, 2, 2, 680, 681, 5, 344, 173, 2, 681, 685, 7, 28, 2, 2, 682, 684, 7, 7, 2, 2, 683, 682, 3, 2, 2, 2, 684, 687, 3, 2, 2, 2, 685, 683, 3, 2, 2, 2, 685, 686, 3, 2, 2, 2, 686, 688, 3, 2, 2, 2, 687, 685, 3, 2, 2, 2, 688, 703, 5, 100, 51, 2, 689, 691, 7, 7, 2, 2, 690, 689, 3, 2, 2, 2, 691, 694, 3, 2, 2, 2, 692, 690, 3, 2, 2, 2, 692, 693, 3, 2, 2, 2, 693, 695, 3, 2, 2, 2, 694, 692, 3, 2, 2, 2, 695, 699, 7, 30, 2, 2, 696, 698, 7, 7, 2, 2, 697, 696, 3, 2, 2, 2, 698, 701, 3, 2, 2, 2, 699, 697, 3, 2, 2, 2, 699, 700, 3, 2, 2, 2, 700, 702, 3, 2, 2, 2, 701, 699, 3, 2, 2, 2, 702, 704, 5, 152, 77, 2, 703, 692, 3, 2, 2, 2, 703, 704, 3, 2, 2, 2, 704, 33, 3, 2, 2, 2, 705, 722, 5, 40, 21, 2, 706, 708, 7, 7, 2, 2, 707, 706, 3, 2, 2, 2, 708, 711, 3, 2, 2, 2, 709, 707, 3, 2, 2, 2, 709, 710, 3, 2, 2, 2, 710, 712, 3, 2, 2, 2, 711, 709, 3, 2, 2, 2, 712, 716, 7, 10, 2, 2, 713, 715, 7, 7, 2, 2, 714, 713, 3, 2, 2, 2, 715, 718, 3, 2, 2, 2, 716, 714, 3, 2, 2, 2, 716, 717, 3, 2, 2, 2, 717, 719, 3, 2, 2, 2, 718, 716, 3, 2, 2, 2, 719, 721, 5, 40, 21, 2, 720, 709, 3, 2, 2, 2, 721, 724, 3, 2, 2, 2, 722, 720, 3, 2, 2, 2, 722, 723, 3, 2, 2, 2, 723, 35, 3, 2, 2, 2, 724, 722, 3, 2, 2, 2, 725, 730, 5, 38, 20, 2, 726, 730, 5, 42, 22, 2, 727, 730, 5, 108, 55, 2, 728, 730, 5, 118, 60, 2, 729, 725, 3, 2, 2, 2, 729, 726, 3, 2, 2, 2, 729, 727, 3, 2, 2, 2, 729, 728, 3, 2, 2, 2, 730, 37, 3, 2, 2, 2, 731, 732, 5, 108, 55, 2, 732, 733, 5, 208, 105, 2, 733, 39, 3, 2, 2, 2, 734, 736, 5, 334, 168, 2, 735, 734, 3, 2, 2, 2, 736, 739, 3, 2, 2, 2, 737, 735, 3, 2, 2, 2, 737, 738, 3, 2, 2, 2, 738, 743, 3, 2, 2, 2, 739, 737, 3, 2, 2, 2, 740, 742, 7, 7, 2, 2, 741, 740, 3, 2, 2, 2, 742, 745, 3, 2, 2, 2, 743, 741, 3, 2, 2, 2, 743, 744, 3, 2, 2, 2, 744, 746, 3, 2, 2, 2, 745, 743, 3, 2, 2, 2, 746, 747, 5, 36, 19, 2, 747, 41, 3, 2, 2, 2, 748, 751, 5, 108, 55, 2, 749, 751, 5, 118, 60, 2, 750, 748, 3, 2, 2, 2, 750, 749, 3, 2, 2, 2, 751, 755, 3, 2, 2, 2, 752, 754, 7, 7, 2, 2, 753, 752, 3, 2, 2, 2, 754, 757, 3, 2, 2, 2, 755, 753, 3, 2, 2, 2, 755, 756, 3, 2, 2, 2, 756, 758, 3, 2, 2, 2, 757, 755, 3, 2, 2, 2, 758, 762, 7, 82, 2, 2, 759, 761, 7, 7, 2, 2, 760, 759, 3, 2, 2, 2, 761, 764, 3, 2, 2, 2, 762, 760, 3, 2, 2, 2, 762, 763, 3, 2, 2, 2, 763, 765, 3, 2, 2, 2, 764, 762, 3, 2, 2, 2, 765, 766, 5, 152, 77, 2, 766, 43, 3, 2, 2, 2, 767, 771, 7, 48, 2, 2, 768, 770, 7, 7, 2, 2, 769, 768, 3, 2, 2, 2, 770, 773, 3, 2, 2, 2, 771, 769, 3, 2, 2, 2, 771, 772, 3, 2, 2, 2, 772, 774, 3, 2, 2, 2, 773, 771, 3, 2, 2, 2, 774, 791, 5, 46, 24, 2, 775, 777, 7, 7, 2, 2, 776, 775, 3, 2, 2, 2, 777, 780, 3, 2, 2, 2, 778, 776, 3, 2, 2, 2, 778, 779, 3, 2, 2, 2, 779, 781, 3, 2, 2, 2, 780, 778, 3, 2, 2, 2, 781, 785, 7, 10, 2, 2, 782, 784, 7, 7, 2, 2, 783, 782, 3, 2, 2, 2, 784, 787, 3, 2, 2, 2, 785, 783, 3, 2, 2, 2, 785, 786, 3, 2, 2, 2, 786, 788, 3, 2, 2, 2, 787, 785, 3, 2, 2, 2, 788, 790, 5, 46, 24, 2, 789, 778, 3, 2, 2, 2, 790, 793, 3, 2, 2, 2, 791, 789, 3, 2, 2, 2, 791, 792, 3, 2, 2, 2, 792, 801, 3, 2, 2, 2, 793, 791, 3, 2, 2, 2, 794, 796, 7, 7, 2, 2, 795, 794, 3, 2, 2, 2, 796, 799, 3, 2, 2, 2, 797, 795, 3, 2, 2, 2, 797, 798, 3, 2, 2, 2, 798, 800, 3, 2, 2, 2, 799, 797, 3, 2, 2, 2, 800, 802, 7, 10, 2, 2, 801, 797, 3, 2, 2, 2, 801, 802, 3, 2, 2, 2, 802, 806, 3, 2, 2, 2, 803, 805, 7, 7, 2, 2, 804, 803, 3, 2, 2, 2, 805, 808, 3, 2, 2, 2, 806, 804, 3, 2, 2, 2, 806, 807, 3, 2, 2, 2, 807, 809, 3, 2, 2, 2, 808, 806, 3, 2, 2, 2, 809, 810, 7, 49, 2, 2, 810, 45, 3, 2, 2, 2, 811, 813, 5, 318, 160, 2, 812, 811, 3, 2, 2, 2, 812, 813, 3, 2, 2, 2, 813, 817, 3, 2, 2, 2, 814, 816, 7, 7, 2, 2, 815, 814, 3, 2, 2, 2, 816, 819, 3, 2, 2, 2, 817, 815, 3, 2, 2, 2, 817, 818, 3, 2, 2, 2, 818, 820, 3, 2, 2, 2, 819, 817, 3, 2, 2, 2, 820, 835, 5, 344, 173, 2, 821, 823, 7, 7, 2, 2, 822, 821, 3, 2, 2, 2, 823, 826, 3, 2, 2, 2, 824, 822, 3, 2, 2, 2, 824, 825, 3, 2, 2, 2, 825, 827, 3, 2, 2, 2, 826, 824, 3, 2, 2, 2, 827, 831, 7, 28, 2, 2, 828, 830, 7, 7, 2, 2, 829, 828, 3, 2, 2, 2, 830, 833, 3, 2, 2, 2, 831, 829, 3, 2, 2, 2, 831, 832, 3, 2, 2, 2, 832, 834, 3, 2, 2, 2, 833, 831, 3, 2, 2, 2, 834, 836, 5, 100, 51, 2, 835, 824, 3, 2, 2, 2, 835, 836, 3, 2, 2, 2, 836, 47, 3, 2, 2, 2, 837, 841, 7, 88, 2, 2, 838, 840, 7, 7, 2, 2, 839, 838, 3, 2, 2, 2, 840, 843, 3, 2, 2, 2, 841, 839, 3, 2, 2, 2, 841, 842, 3, 2, 2, 2, 842, 844, 3, 2, 2, 2, 843, 841, 3, 2, 2, 2, 844, 861, 5, 50, 26, 2, 845, 847, 7, 7, 2, 2, 846, 845, 3, 2, 2, 2, 847, 850, 3, 2, 2, 2, 848, 846, 3, 2, 2, 2, 848, 849, 3, 2, 2, 2, 849, 851, 3, 2, 2, 2, 850, 848, 3, 2, 2, 2, 851, 855, 7, 10, 2, 2, 852, 854, 7, 7, 2, 2, 853, 852, 3, 2, 2, 2, 854, 857, 3, 2, 2, 2, 855, 853, 3, 2, 2, 2, 855, 856, 3, 2, 2, 2, 856, 858, 3, 2, 2, 2, 857, 855, 3, 2, 2, 2, 858, 860, 5, 50, 26, 2, 859, 848, 3, 2, 2, 2, 860, 863, 3, 2, 2, 2, 861, 859, 3, 2, 2, 2, 861, 862, 3, 2, 2, 2, 862, 49, 3, 2, 2, 2, 863, 861, 3, 2, 2, 2, 864, 866, 5, 334, 168, 2, 865, 864, 3, 2, 2, 2, 866, 869, 3, 2, 2, 2, 867, 865, 3, 2, 2, 2, 867, 868, 3, 2, 2, 2, 868, 870, 3, 2, 2, 2, 869, 867, 3, 2, 2, 2, 870, 874, 5, 344, 173, 2, 871, 873, 7, 7, 2, 2, 872, 871, 3, 2, 2, 2, 873, 876, 3, 2, 2, 2, 874, 872, 3, 2, 2, 2, 874, 875, 3, 2, 2, 2, 875, 877, 3, 2, 2, 2, 876, 874, 3, 2, 2, 2, 877, 881, 7, 28, 2, 2, 878, 880, 7, 7, 2, 2, 879, 878, 3, 2, 2, 2, 880, 883, 3, 2, 2, 2, 881, 879, 3, 2, 2, 2, 881, 882, 3, 2, 2, 2, 882, 884, 3, 2, 2, 2, 883, 881, 3, 2, 2, 2, 884, 885, 5, 100, 51, 2, 885, 51, 3, 2, 2, 2, 886, 888, 5, 54, 28, 2, 887, 889, 5, 150, 76, 2, 888, 887, 3, 2, 2, 2, 888, 889, 3, 2, 2, 2, 889, 891, 3, 2, 2, 2, 890, 886, 3, 2, 2, 2, 891, 894, 3, 2, 2, 2, 892, 890, 3, 2, 2, 2, 892, 893, 3, 2, 2, 2, 893, 53, 3, 2, 2, 2, 894, 892, 3, 2, 2, 2, 895, 900, 5, 22, 12, 2, 896, 900, 5, 58, 30, 2, 897, 900, 5, 56, 29, 2, 898, 900, 5, 90, 46, 2, 899, 895, 3, 2, 2, 2, 899, 896, 3, 2, 2, 2, 899, 897, 3, 2, 2, 2, 899, 898, 3, 2, 2, 2, 900, 55, 3, 2, 2, 2, 901, 905, 7, 84, 2, 2, 902, 904, 7, 7, 2, 2, 903, 902, 3, 2, 2, 2, 904, 907, 3, 2, 2, 2, 905, 903, 3, 2, 2, 2, 905, 906, 3, 2, 2, 2, 906, 908, 3, 2, 2, 2, 907, 905, 3, 2, 2, 2, 908, 909, 5, 136, 69, 2, 909, 57, 3, 2, 2, 2, 910, 912, 5, 300, 151, 2, 911, 910, 3, 2, 2, 2, 911, 912, 3, 2, 2, 2, 912, 913, 3, 2, 2, 2, 913, 917, 7, 83, 2, 2, 914, 916, 7, 7, 2, 2, 915, 914, 3, 2, 2, 2, 916, 919, 3, 2, 2, 2, 917, 915, 3, 2, 2, 2, 917, 918, 3, 2, 2, 2, 918, 920, 3, 2, 2, 2, 919, 917, 3, 2, 2, 2, 920, 928, 7, 77, 2, 2, 921, 923, 7, 7, 2, 2, 922, 921, 3, 2, 2, 2, 923, 926, 3, 2, 2, 2, 924, 922, 3, 2, 2, 2, 924, 925, 3, 2, 2, 2, 925, 927, 3, 2, 2, 2, 926, 924, 3, 2, 2, 2, 927, 929, 5, 344, 173, 2, 928, 924, 3, 2, 2, 2, 928, 929, 3, 2, 2, 2, 929, 944, 3, 2, 2, 2, 930, 932, 7, 7, 2, 2, 931, 930, 3, 2, 2, 2, 932, 935, 3, 2, 2, 2, 933, 931, 3, 2, 2, 2, 933, 934, 3, 2, 2, 2, 934, 936, 3, 2, 2, 2, 935, 933, 3, 2, 2, 2, 936, 940, 7, 28, 2, 2, 937, 939, 7, 7, 2, 2, 938, 937, 3, 2, 2, 2, 939, 942, 3, 2, 2, 2, 940, 938, 3, 2, 2, 2, 940, 941, 3, 2, 2, 2, 941, 943, 3, 2, 2, 2, 942, 940, 3, 2, 2, 2, 943, 945, 5, 34, 18, 2, 944, 933, 3, 2, 2, 2, 944, 945, 3, 2, 2, 2, 945, 953, 3, 2, 2, 2, 946, 948, 7, 7, 2, 2, 947, 946, 3, 2, 2, 2, 948, 951, 3, 2, 2, 2, 949, 947, 3, 2, 2, 2, 949, 950, 3, 2, 2, 2, 950, 952, 3, 2, 2, 2, 951, 949, 3, 2, 2, 2, 952, 954, 5, 28, 15, 2, 953, 949, 3, 2, 2, 2, 953, 954, 3, 2, 2, 2, 954, 59, 3, 2, 2, 2, 955, 959, 7, 11, 2, 2, 956, 958, 7, 7, 2, 2, 957, 956, 3, 2, 2, 2, 958, 961, 3, 2, 2, 2, 959, 957, 3, 2, 2, 2, 959, 960, 3, 2, 2, 2, 960, 991, 3, 2, 2, 2, 961, 959, 3, 2, 2, 2, 962, 979, 5, 62, 32, 2, 963, 965, 7, 7, 2, 2, 964, 963, 3, 2, 2, 2, 965, 968, 3, 2, 2, 2, 966, 964, 3, 2, 2, 2, 966, 967, 3, 2, 2, 2, 967, 969, 3, 2, 2, 2, 968, 966, 3, 2, 2, 2, 969, 973, 7, 10, 2, 2, 970, 972, 7, 7, 2, 2, 971, 970, 3, 2, 2, 2, 972, 975, 3, 2, 2, 2, 973, 971, 3, 2, 2, 2, 973, 974, 3, 2, 2, 2, 974, 976, 3, 2, 2, 2, 975, 973, 3, 2, 2, 2, 976, 978, 5, 62, 32, 2, 977, 966, 3, 2, 2, 2, 978, 981, 3, 2, 2, 2, 979, 977, 3, 2, 2, 2, 979, 980, 3, 2, 2, 2, 980, 989, 3, 2, 2, 2, 981, 979, 3, 2, 2, 2, 982, 984, 7, 7, 2, 2, 983, 982, 3, 2, 2, 2, 984, 987, 3, 2, 2, 2, 985, 983, 3, 2, 2, 2, 985, 986, 3, 2, 2, 2, 986, 988, 3, 2, 2, 2, 987, 985, 3, 2, 2, 2, 988, 990, 7, 10, 2, 2, 989, 985, 3, 2, 2, 2, 989, 990, 3, 2, 2, 2, 990, 992, 3, 2, 2, 2, 991, 962, 3, 2, 2, 2, 991, 992, 3, 2, 2, 2, 992, 996, 3, 2, 2, 2, 993, 995, 7, 7, 2, 2, 994, 993, 3, 2, 2, 2, 995, 998, 3, 2, 2, 2, 996, 994, 3, 2, 2, 2, 996, 997, 3, 2, 2, 2, 997, 999, 3, 2, 2, 2, 998, 996, 3, 2, 2, 2, 999, 1000, 7, 12, 2, 2, 1000, 61, 3, 2, 2, 2, 1001, 1003, 5, 302, 152, 2, 1002, 1001, 3, 2, 2, 2, 1002, 1003, 3, 2, 2, 2, 1003, 1004, 3, 2, 2, 2, 1004, 1019, 5, 86, 44, 2, 1005, 1007, 7, 7, 2, 2, 1006, 1005, 3, 2, 2, 2, 1007, 1010, 3, 2, 2, 2, 1008, 1006, 3, 2, 2, 2, 1008, 1009, 3, 2, 2, 2, 1009, 1011, 3, 2, 2, 2, 1010, 1008, 3, 2, 2, 2, 1011, 1015, 7, 30, 2, 2, 1012, 1014, 7, 7, 2, 2, 1013, 1012, 3, 2, 2, 2, 1014, 1017, 3, 2, 2, 2, 1015, 1013, 3, 2, 2, 2, 1015, 1016, 3, 2, 2, 2, 1016, 1018, 3, 2, 2, 2, 1017, 1015, 3, 2, 2, 2, 1018, 1020, 5, 152, 77, 2, 1019, 1008, 3, 2, 2, 2, 1019, 1020, 3, 2, 2, 2, 1020, 63, 3, 2, 2, 2, 1021, 1023, 5, 300, 151, 2, 1022, 1021, 3, 2, 2, 2, 1022, 1023, 3, 2, 2, 2, 1023, 1024, 3, 2, 2, 2, 1024, 1032, 7, 76, 2, 2, 1025, 1027, 7, 7, 2, 2, 1026, 1025, 3, 2, 2, 2, 1027, 1030, 3, 2, 2, 2, 1028, 1026, 3, 2, 2, 2, 1028, 1029, 3, 2, 2, 2, 1029, 1031, 3, 2, 2, 2, 1030, 1028, 3, 2, 2, 2, 1031, 1033, 5, 44, 23, 2, 1032, 1028, 3, 2, 2, 2, 1032, 1033, 3, 2, 2, 2, 1033, 1049, 3, 2, 2, 2, 1034, 1036, 7, 7, 2, 2, 1035, 1034, 3, 2, 2, 2, 1036, 1039, 3, 2, 2, 2, 1037, 1035, 3, 2, 2, 2, 1037, 1038, 3, 2, 2, 2, 1038, 1040, 3, 2, 2, 2, 1039, 1037, 3, 2, 2, 2, 1040, 1044, 5, 124, 63, 2, 1041, 1043, 7, 7, 2, 2, 1042, 1041, 3, 2, 2, 2, 1043, 1046, 3, 2, 2, 2, 1044, 1042, 3, 2, 2, 2, 1044, 1045, 3, 2, 2, 2, 1045, 1047, 3, 2, 2, 2, 1046, 1044, 3, 2, 2, 2, 1047, 1048, 7, 9, 2, 2, 1048, 1050, 3, 2, 2, 2, 1049, 1037, 3, 2, 2, 2, 1049, 1050, 3, 2, 2, 2, 1050, 1054, 3, 2, 2, 2, 1051, 1053, 7, 7, 2, 2, 1052, 1051, 3, 2, 2, 2, 1053, 1056, 3, 2, 2, 2, 1054, 1052, 3, 2, 2, 2, 1054, 1055, 3, 2, 2, 2, 1055, 1057, 3, 2, 2, 2, 1056, 1054, 3, 2, 2, 2, 1057, 1061, 5, 344, 173, 2, 1058, 1060, 7, 7, 2, 2, 1059, 1058, 3, 2, 2, 2, 1060, 1063, 3, 2, 2, 2, 1061, 1059, 3, 2, 2, 2, 1061, 1062, 3, 2, 2, 2, 1062, 1064, 3, 2, 2, 2, 1063, 1061, 3, 2, 2, 2, 1064, 1079, 5, 60, 31, 2, 1065, 1067, 7, 7, 2, 2, 1066, 1065, 3, 2, 2, 2, 1067, 1070, 3, 2, 2, 2, 1068, 1066, 3, 2, 2, 2, 1068, 1069, 3, 2, 2, 2, 1069, 1071, 3, 2, 2, 2, 1070, 1068, 3, 2, 2, 2, 1071, 1075, 7, 28, 2, 2, 1072, 1074, 7, 7, 2, 2, 1073, 1072, 3, 2, 2, 2, 1074, 1077, 3, 2, 2, 2, 1075, 1073, 3, 2, 2, 2, 1075, 1076, 3, 2, 2, 2, 1076, 1078, 3, 2, 2, 2, 1077, 1075, 3, 2, 2, 2, 1078, 1080, 5, 100, 51, 2, 1079, 1068, 3, 2, 2, 2, 1079, 1080, 3, 2, 2, 2, 1080, 1088, 3, 2, 2, 2, 1081, 1083, 7, 7, 2, 2, 1082, 1081, 3, 2, 2, 2, 1083, 1086, 3, 2, 2, 2, 1084, 1082, 3, 2, 2, 2, 1084, 1085, 3, 2, 2, 2, 1085, 1087, 3, 2, 2, 2, 1086, 1084, 3, 2, 2, 2, 1087, 1089, 5, 48, 25, 2, 1088, 1084, 3, 2, 2, 2, 1088, 1089, 3, 2, 2, 2, 1089, 1097, 3, 2, 2, 2, 1090, 1092, 7, 7, 2, 2, 1091, 1090, 3, 2, 2, 2, 1092, 1095, 3, 2, 2, 2, 1093, 1091, 3, 2, 2, 2, 1093, 1094, 3, 2, 2, 2, 1094, 1096, 3, 2, 2, 2, 1095, 1093, 3, 2, 2, 2, 1096, 1098, 5, 66, 34, 2, 1097, 1093, 3, 2, 2, 2, 1097, 1098, 3, 2, 2, 2, 1098, 65, 3, 2, 2, 2, 1099, 1109, 5, 136, 69, 2, 1100, 1104, 7, 30, 2, 2, 1101, 1103, 7, 7, 2, 2, 1102, 1101, 3, 2, 2, 2, 1103, 1106, 3, 2, 2, 2, 1104, 1102, 3, 2, 2, 2, 1104, 1105, 3, 2, 2, 2, 1105, 1107, 3, 2, 2, 2, 1106, 1104, 3, 2, 2, 2, 1107, 1109, 5, 152, 77, 2, 1108, 1099, 3, 2, 2, 2, 1108, 1100, 3, 2, 2, 2, 1109, 67, 3, 2, 2, 2, 1110, 1112, 5, 334, 168, 2, 1111, 1110, 3, 2, 2, 2, 1112, 1115, 3, 2, 2, 2, 1113, 1111, 3, 2, 2, 2, 1113, 1114, 3, 2, 2, 2, 1114, 1119, 3, 2, 2, 2, 1115, 1113, 3, 2, 2, 2, 1116, 1118, 7, 7, 2, 2, 1117, 1116, 3, 2, 2, 2, 1118, 1121, 3, 2, 2, 2, 1119, 1117, 3, 2, 2, 2, 1119, 1120, 3, 2, 2, 2, 1120, 1122, 3, 2, 2, 2, 1121, 1119, 3, 2, 2, 2, 1122, 1137, 5, 344, 173, 2, 1123, 1125, 7, 7, 2, 2, 1124, 1123, 3, 2, 2, 2, 1125, 1128, 3, 2, 2, 2, 1126, 1124, 3, 2, 2, 2, 1126, 1127, 3, 2, 2, 2, 1127, 1129, 3, 2, 2, 2, 1128, 1126, 3, 2, 2, 2, 1129, 1133, 7, 28, 2, 2, 1130, 1132, 7, 7, 2, 2, 1131, 1130, 3, 2, 2, 2, 1132, 1135, 3, 2, 2, 2, 1133, 1131, 3, 2, 2, 2, 1133, 1134, 3, 2, 2, 2, 1134, 1136, 3, 2, 2, 2, 1135, 1133, 3, 2, 2, 2, 1136, 1138, 5, 100, 51, 2, 1137, 1126, 3, 2, 2, 2, 1137, 1138, 3, 2, 2, 2, 1138, 69, 3, 2, 2, 2, 1139, 1143, 7, 11, 2, 2, 1140, 1142, 7, 7, 2, 2, 1141, 1140, 3, 2, 2, 2, 1142, 1145, 3, 2, 2, 2, 1143, 1141, 3, 2, 2, 2, 1143, 1144, 3, 2, 2, 2, 1144, 1146, 3, 2, 2, 2, 1145, 1143, 3, 2, 2, 2, 1146, 1163, 5, 68, 35, 2, 1147, 1149, 7, 7, 2, 2, 1148, 1147, 3, 2, 2, 2, 1149, 1152, 3, 2, 2, 2, 1150, 1148, 3, 2, 2, 2, 1150, 1151, 3, 2, 2, 2, 1151, 1153, 3, 2, 2, 2, 1152, 1150, 3, 2, 2, 2, 1153, 1157, 7, 10, 2, 2, 1154, 1156, 7, 7, 2, 2, 1155, 1154, 3, 2, 2, 2, 1156, 1159, 3, 2, 2, 2, 1157, 1155, 3, 2, 2, 2, 1157, 1158, 3, 2, 2, 2, 1158, 1160, 3, 2, 2, 2, 1159, 1157, 3, 2, 2, 2, 1160, 1162, 5, 68, 35, 2, 1161, 1150, 3, 2, 2, 2, 1162, 1165, 3, 2, 2, 2, 1163, 1161, 3, 2, 2, 2, 1163, 1164, 3, 2, 2, 2, 1164, 1173, 3, 2, 2, 2, 1165, 1163, 3, 2, 2, 2, 1166, 1168, 7, 7, 2, 2, 1167, 1166, 3, 2, 2, 2, 1168, 1171, 3, 2, 2, 2, 1169, 1167, 3, 2, 2, 2, 1169, 1170, 3, 2, 2, 2, 1170, 1172, 3, 2, 2, 2, 1171, 1169, 3, 2, 2, 2, 1172, 1174, 7, 10, 2, 2, 1173, 1169, 3, 2, 2, 2, 1173, 1174, 3, 2, 2, 2, 1174, 1178, 3, 2, 2, 2, 1175, 1177, 7, 7, 2, 2, 1176, 1175, 3, 2, 2, 2, 1177, 1180, 3, 2, 2, 2, 1178, 1176, 3, 2, 2, 2, 1178, 1179, 3, 2, 2, 2, 1179, 1181, 3, 2, 2, 2, 1180, 1178, 3, 2, 2, 2, 1181, 1182, 7, 12, 2, 2, 1182, 71, 3, 2, 2, 2, 1183, 1185, 5, 300, 151, 2, 1184, 1183, 3, 2, 2, 2, 1184, 1185, 3, 2, 2, 2, 1185, 1186, 3, 2, 2, 2, 1186, 1194, 9, 3, 2, 2, 1187, 1189, 7, 7, 2, 2, 1188, 1187, 3, 2, 2, 2, 1189, 1192, 3, 2, 2, 2, 1190, 1188, 3, 2, 2, 2, 1190, 1191, 3, 2, 2, 2, 1191, 1193, 3, 2, 2, 2, 1192, 1190, 3, 2, 2, 2, 1193, 1195, 5, 44, 23, 2, 1194, 1190, 3, 2, 2, 2, 1194, 1195, 3, 2, 2, 2, 1195, 1211, 3, 2, 2, 2, 1196, 1198, 7, 7, 2, 2, 1197, 1196, 3, 2, 2, 2, 1198, 1201, 3, 2, 2, 2, 1199, 1197, 3, 2, 2, 2, 1199, 1200, 3, 2, 2, 2, 1200, 1202, 3, 2, 2, 2, 1201, 1199, 3, 2, 2, 2, 1202, 1206, 5, 124, 63, 2, 1203, 1205, 7, 7, 2, 2, 1204, 1203, 3, 2, 2, 2, 1205, 1208, 3, 2, 2, 2, 1206, 1204, 3, 2, 2, 2, 1206, 1207, 3, 2, 2, 2, 1207, 1209, 3, 2, 2, 2, 1208, 1206, 3, 2, 2, 2, 1209, 1210, 7, 9, 2, 2, 1210, 1212, 3, 2, 2, 2, 1211, 1199, 3, 2, 2, 2, 1211, 1212, 3, 2, 2, 2, 1212, 1216, 3, 2, 2, 2, 1213, 1215, 7, 7, 2, 2, 1214, 1213, 3, 2, 2, 2, 1215, 1218, 3, 2, 2, 2, 1216, 1214, 3, 2, 2, 2, 1216, 1217, 3, 2, 2, 2, 1217, 1221, 3, 2, 2, 2, 1218, 1216, 3, 2, 2, 2, 1219, 1222, 5, 70, 36, 2, 1220, 1222, 5, 68, 35, 2, 1221, 1219, 3, 2, 2, 2, 1221, 1220, 3, 2, 2, 2, 1222, 1230, 3, 2, 2, 2, 1223, 1225, 7, 7, 2, 2, 1224, 1223, 3, 2, 2, 2, 1225, 1228, 3, 2, 2, 2, 1226, 1224, 3, 2, 2, 2, 1226, 1227, 3, 2, 2, 2, 1227, 1229, 3, 2, 2, 2, 1228, 1226, 3, 2, 2, 2, 1229, 1231, 5, 48, 25, 2, 1230, 1226, 3, 2, 2, 2, 1230, 1231, 3, 2, 2, 2, 1231, 1249, 3, 2, 2, 2, 1232, 1234, 7, 7, 2, 2, 1233, 1232, 3, 2, 2, 2, 1234, 1237, 3, 2, 2, 2, 1235, 1233, 3, 2, 2, 2, 1235, 1236, 3, 2, 2, 2, 1236, 1247, 3, 2, 2, 2, 1237, 1235, 3, 2, 2, 2, 1238, 1242, 7, 30, 2, 2, 1239, 1241, 7, 7, 2, 2, 1240, 1239, 3, 2, 2, 2, 1241, 1244, 3, 2, 2, 2, 1242, 1240, 3, 2, 2, 2, 1242, 1243, 3, 2, 2, 2, 1243, 1245, 3, 2, 2, 2, 1244, 1242, 3, 2, 2, 2, 1245, 1248, 5, 152, 77, 2, 1246, 1248, 5, 74, 38, 2, 1247, 1238, 3, 2, 2, 2, 1247, 1246, 3, 2, 2, 2, 1248, 1250, 3, 2, 2, 2, 1249, 1235, 3, 2, 2, 2, 1249, 1250, 3, 2, 2, 2, 1250, 1257, 3, 2, 2, 2, 1251, 1253, 7, 7, 2, 2, 1252, 1251, 3, 2, 2, 2, 1253, 1254, 3, 2, 2, 2, 1254, 1252, 3, 2, 2, 2, 1254, 1255, 3, 2, 2, 2, 1255, 1256, 3, 2, 2, 2, 1256, 1258, 7, 29, 2, 2, 1257, 1252, 3, 2, 2, 2, 1257, 1258, 3, 2, 2, 2, 1258, 1262, 3, 2, 2, 2, 1259, 1261, 7, 7, 2, 2, 1260, 1259, 3, 2, 2, 2, 1261, 1264, 3, 2, 2, 2, 1262, 1260, 3, 2, 2, 2, 1262, 1263, 3, 2, 2, 2, 1263, 1295, 3, 2, 2, 2, 1264, 1262, 3, 2, 2, 2, 1265, 1267, 5, 76, 39, 2, 1266, 1265, 3, 2, 2, 2, 1266, 1267, 3, 2, 2, 2, 1267, 1278, 3, 2, 2, 2, 1268, 1270, 7, 7, 2, 2, 1269, 1268, 3, 2, 2, 2, 1270, 1273, 3, 2, 2, 2, 1271, 1269, 3, 2, 2, 2, 1271, 1272, 3, 2, 2, 2, 1272, 1275, 3, 2, 2, 2, 1273, 1271, 3, 2, 2, 2, 1274, 1276, 5, 148, 75, 2, 1275, 1274, 3, 2, 2, 2, 1275, 1276, 3, 2, 2, 2, 1276, 1277, 3, 2, 2, 2, 1277, 1279, 5, 78, 40, 2, 1278, 1271, 3, 2, 2, 2, 1278, 1279, 3, 2, 2, 2, 1279, 1296, 3, 2, 2, 2, 1280, 1282, 5, 78, 40, 2, 1281, 1280, 3, 2, 2, 2, 1281, 1282, 3, 2, 2, 2, 1282, 1293, 3, 2, 2, 2, 1283, 1285, 7, 7, 2, 2, 1284, 1283, 3, 2, 2, 2, 1285, 1288, 3, 2, 2, 2, 1286, 1284, 3, 2, 2, 2, 1286, 1287, 3, 2, 2, 2, 1287, 1290, 3, 2, 2, 2, 1288, 1286, 3, 2, 2, 2, 1289, 1291, 5, 148, 75, 2, 1290, 1289, 3, 2, 2, 2, 1290, 1291, 3, 2, 2, 2, 1291, 1292, 3, 2, 2, 2, 1292, 1294, 5, 76, 39, 2, 1293, 1286, 3, 2, 2, 2, 1293, 1294, 3, 2, 2, 2, 1294, 1296, 3, 2, 2, 2, 1295, 1266, 3, 2, 2, 2, 1295, 1281, 3, 2, 2, 2, 1296, 73, 3, 2, 2, 2, 1297, 1301, 7, 82, 2, 2, 1298, 1300, 7, 7, 2, 2, 1299, 1298, 3, 2, 2, 2, 1300, 1303, 3, 2, 2, 2, 1301, 1299, 3, 2, 2, 2, 1301, 1302, 3, 2, 2, 2, 1302, 1304, 3, 2, 2, 2, 1303, 1301, 3, 2, 2, 2, 1304, 1305, 5, 152, 77, 2, 1305, 75, 3, 2, 2, 2, 1306, 1308, 5, 300, 151, 2, 1307, 1306, 3, 2, 2, 2, 1307, 1308, 3, 2, 2, 2, 1308, 1309, 3, 2, 2, 2, 1309, 1347, 7, 66, 2, 2, 1310, 1312, 7, 7, 2, 2, 1311, 1310, 3, 2, 2, 2, 1312, 1315, 3, 2, 2, 2, 1313, 1311, 3, 2, 2, 2, 1313, 1314, 3, 2, 2, 2, 1314, 1316, 3, 2, 2, 2, 1315, 1313, 3, 2, 2, 2, 1316, 1320, 7, 11, 2, 2, 1317, 1319, 7, 7, 2, 2, 1318, 1317, 3, 2, 2, 2, 1319, 1322, 3, 2, 2, 2, 1320, 1318, 3, 2, 2, 2, 1320, 1321, 3, 2, 2, 2, 1321, 1323, 3, 2, 2, 2, 1322, 1320, 3, 2, 2, 2, 1323, 1338, 7, 12, 2, 2, 1324, 1326, 7, 7, 2, 2, 1325, 1324, 3, 2, 2, 2, 1326, 1329, 3, 2, 2, 2, 1327, 1325, 3, 2, 2, 2, 1327, 1328, 3, 2, 2, 2, 1328, 1330, 3, 2, 2, 2, 1329, 1327, 3, 2, 2, 2, 1330, 1334, 7, 28, 2, 2, 1331, 1333, 7, 7, 2, 2, 1332, 1331, 3, 2, 2, 2, 1333, 1336, 3, 2, 2, 2, 1334, 1332, 3, 2, 2, 2, 1334, 1335, 3, 2, 2, 2, 1335, 1337, 3, 2, 2, 2, 1336, 1334, 3, 2, 2, 2, 1337, 1339, 5, 100, 51, 2, 1338, 1327, 3, 2, 2, 2, 1338, 1339, 3, 2, 2, 2, 1339, 1343, 3, 2, 2, 2, 1340, 1342, 7, 7, 2, 2, 1341, 1340, 3, 2, 2, 2, 1342, 1345, 3, 2, 2, 2, 1343, 1341, 3, 2, 2, 2, 1343, 1344, 3, 2, 2, 2, 1344, 1346, 3, 2, 2, 2, 1345, 1343, 3, 2, 2, 2, 1346, 1348, 5, 66, 34, 2, 1347, 1313, 3, 2, 2, 2, 1347, 1348, 3, 2, 2, 2, 1348, 77, 3, 2, 2, 2, 1349, 1351, 5, 300, 151, 2, 1350, 1349, 3, 2, 2, 2, 1350, 1351, 3, 2, 2, 2, 1351, 1352, 3, 2, 2, 2, 1352, 1407, 7, 67, 2, 2, 1353, 1355, 7, 7, 2, 2, 1354, 1353, 3, 2, 2, 2, 1355, 1358, 3, 2, 2, 2, 1356, 1354, 3, 2, 2, 2, 1356, 1357, 3, 2, 2, 2, 1357, 1359, 3, 2, 2, 2, 1358, 1356, 3, 2, 2, 2, 1359, 1363, 7, 11, 2, 2, 1360, 1362, 7, 7, 2, 2, 1361, 1360, 3, 2, 2, 2, 1362, 1365, 3, 2, 2, 2, 1363, 1361, 3, 2, 2, 2, 1363, 1364, 3, 2, 2, 2, 1364, 1366, 3, 2, 2, 2, 1365, 1363, 3, 2, 2, 2, 1366, 1374, 5, 82, 42, 2, 1367, 1369, 7, 7, 2, 2, 1368, 1367, 3, 2, 2, 2, 1369, 1372, 3, 2, 2, 2, 1370, 1368, 3, 2, 2, 2, 1370, 1371, 3, 2, 2, 2, 1371, 1373, 3, 2, 2, 2, 1372, 1370, 3, 2, 2, 2, 1373, 1375, 7, 10, 2, 2, 1374, 1370, 3, 2, 2, 2, 1374, 1375, 3, 2, 2, 2, 1375, 1379, 3, 2, 2, 2, 1376, 1378, 7, 7, 2, 2, 1377, 1376, 3, 2, 2, 2, 1378, 1381, 3, 2, 2, 2, 1379, 1377, 3, 2, 2, 2, 1379, 1380, 3, 2, 2, 2, 1380, 1382, 3, 2, 2, 2, 1381, 1379, 3, 2, 2, 2, 1382, 1397, 7, 12, 2, 2, 1383, 1385, 7, 7, 2, 2, 1384, 1383, 3, 2, 2, 2, 1385, 1388, 3, 2, 2, 2, 1386, 1384, 3, 2, 2, 2, 1386, 1387, 3, 2, 2, 2, 1387, 1389, 3, 2, 2, 2, 1388, 1386, 3, 2, 2, 2, 1389, 1393, 7, 28, 2, 2, 1390, 1392, 7, 7, 2, 2, 1391, 1390, 3, 2, 2, 2, 1392, 1395, 3, 2, 2, 2, 1393, 1391, 3, 2, 2, 2, 1393, 1394, 3, 2, 2, 2, 1394, 1396, 3, 2, 2, 2, 1395, 1393, 3, 2, 2, 2, 1396, 1398, 5, 100, 51, 2, 1397, 1386, 3, 2, 2, 2, 1397, 1398, 3, 2, 2, 2, 1398, 1402, 3, 2, 2, 2, 1399, 1401, 7, 7, 2, 2, 1400, 1399, 3, 2, 2, 2, 1401, 1404, 3, 2, 2, 2, 1402, 1400, 3, 2, 2, 2, 1402, 1403, 3, 2, 2, 2, 1403, 1405, 3, 2, 2, 2, 1404, 1402, 3, 2, 2, 2, 1405, 1406, 5, 66, 34, 2, 1406, 1408, 3, 2, 2, 2, 1407, 1356, 3, 2, 2, 2, 1407, 1408, 3, 2, 2, 2, 1408, 79, 3, 2, 2, 2, 1409, 1413, 7, 11, 2, 2, 1410, 1412, 7, 7, 2, 2, 1411, 1410, 3, 2, 2, 2, 1412, 1415, 3, 2, 2, 2, 1413, 1411, 3, 2, 2, 2, 1413, 1414, 3, 2, 2, 2, 1414, 1445, 3, 2, 2, 2, 1415, 1413, 3, 2, 2, 2, 1416, 1433, 5, 82, 42, 2, 1417, 1419, 7, 7, 2, 2, 1418, 1417, 3, 2, 2, 2, 1419, 1422, 3, 2, 2, 2, 1420, 1418, 3, 2, 2, 2, 1420, 1421, 3, 2, 2, 2, 1421, 1423, 3, 2, 2, 2, 1422, 1420, 3, 2, 2, 2, 1423, 1427, 7, 10, 2, 2, 1424, 1426, 7, 7, 2, 2, 1425, 1424, 3, 2, 2, 2, 1426, 1429, 3, 2, 2, 2, 1427, 1425, 3, 2, 2, 2, 1427, 1428, 3, 2, 2, 2, 1428, 1430, 3, 2, 2, 2, 1429, 1427, 3, 2, 2, 2, 1430, 1432, 5, 82, 42, 2, 1431, 1420, 3, 2, 2, 2, 1432, 1435, 3, 2, 2, 2, 1433, 1431, 3, 2, 2, 2, 1433, 1434, 3, 2, 2, 2, 1434, 1443, 3, 2, 2, 2, 1435, 1433, 3, 2, 2, 2, 1436, 1438, 7, 7, 2, 2, 1437, 1436, 3, 2, 2, 2, 1438, 1441, 3, 2, 2, 2, 1439, 1437, 3, 2, 2, 2, 1439, 1440, 3, 2, 2, 2, 1440, 1442, 3, 2, 2, 2, 1441, 1439, 3, 2, 2, 2, 1442, 1444, 7, 10, 2, 2, 1443, 1439, 3, 2, 2, 2, 1443, 1444, 3, 2, 2, 2, 1444, 1446, 3, 2, 2, 2, 1445, 1416, 3, 2, 2, 2, 1445, 1446, 3, 2, 2, 2, 1446, 1450, 3, 2, 2, 2, 1447, 1449, 7, 7, 2, 2, 1448, 1447, 3, 2, 2, 2, 1449, 1452, 3, 2, 2, 2, 1450, 1448, 3, 2, 2, 2, 1450, 1451, 3, 2, 2, 2, 1451, 1453, 3, 2, 2, 2, 1452, 1450, 3, 2, 2, 2, 1453, 1454, 7, 12, 2, 2, 1454, 81, 3, 2, 2, 2, 1455, 1457, 5, 302, 152, 2, 1456, 1455, 3, 2, 2, 2, 1456, 1457, 3, 2, 2, 2, 1457, 1458, 3, 2, 2, 2, 1458, 1473, 5, 84, 43, 2, 1459, 1461, 7, 7, 2, 2, 1460, 1459, 3, 2, 2, 2, 1461, 1464, 3, 2, 2, 2, 1462, 1460, 3, 2, 2, 2, 1462, 1463, 3, 2, 2, 2, 1463, 1465, 3, 2, 2, 2, 1464, 1462, 3, 2, 2, 2, 1465, 1469, 7, 30, 2, 2, 1466, 1468, 7, 7, 2, 2, 1467, 1466, 3, 2, 2, 2, 1468, 1471, 3, 2, 2, 2, 1469, 1467, 3, 2, 2, 2, 1469, 1470, 3, 2, 2, 2, 1470, 1472, 3, 2, 2, 2, 1471, 1469, 3, 2, 2, 2, 1472, 1474, 5, 152, 77, 2, 1473, 1462, 3, 2, 2, 2, 1473, 1474, 3, 2, 2, 2, 1474, 83, 3, 2, 2, 2, 1475, 1479, 5, 344, 173, 2, 1476, 1478, 7, 7, 2, 2, 1477, 1476, 3, 2, 2, 2, 1478, 1481, 3, 2, 2, 2, 1479, 1477, 3, 2, 2, 2, 1479, 1480, 3, 2, 2, 2, 1480, 1490, 3, 2, 2, 2, 1481, 1479, 3, 2, 2, 2, 1482, 1486, 7, 28, 2, 2, 1483, 1485, 7, 7, 2, 2, 1484, 1483, 3, 2, 2, 2, 1485, 1488, 3, 2, 2, 2, 1486, 1484, 3, 2, 2, 2, 1486, 1487, 3, 2, 2, 2, 1487, 1489, 3, 2, 2, 2, 1488, 1486, 3, 2, 2, 2, 1489, 1491, 5, 100, 51, 2, 1490, 1482, 3, 2, 2, 2, 1490, 1491, 3, 2, 2, 2, 1491, 85, 3, 2, 2, 2, 1492, 1496, 5, 344, 173, 2, 1493, 1495, 7, 7, 2, 2, 1494, 1493, 3, 2, 2, 2, 1495, 1498, 3, 2, 2, 2, 1496, 1494, 3, 2, 2, 2, 1496, 1497, 3, 2, 2, 2, 1497, 1499, 3, 2, 2, 2, 1498, 1496, 3, 2, 2, 2, 1499, 1503, 7, 28, 2, 2, 1500, 1502, 7, 7, 2, 2, 1501, 1500, 3, 2, 2, 2, 1502, 1505, 3, 2, 2, 2, 1503, 1501, 3, 2, 2, 2, 1503, 1504, 3, 2, 2, 2, 1504, 1506, 3, 2, 2, 2, 1505, 1503, 3, 2, 2, 2, 1506, 1507, 5, 100, 51, 2, 1507, 87, 3, 2, 2, 2, 1508, 1510, 5, 300, 151, 2, 1509, 1508, 3, 2, 2, 2, 1509, 1510, 3, 2, 2, 2, 1510, 1511, 3, 2, 2, 2, 1511, 1515, 7, 77, 2, 2, 1512, 1514, 7, 7, 2, 2, 1513, 1512, 3, 2, 2, 2, 1514, 1517, 3, 2, 2, 2, 1515, 1513, 3, 2, 2, 2, 1515, 1516, 3, 2, 2, 2, 1516, 1518, 3, 2, 2, 2, 1517, 1515, 3, 2, 2, 2, 1518, 1533, 5, 344, 173, 2, 1519, 1521, 7, 7, 2, 2, 1520, 1519, 3, 2, 2, 2, 1521, 1524, 3, 2, 2, 2, 1522, 1520, 3, 2, 2, 2, 1522, 1523, 3, 2, 2, 2, 1523, 1525, 3, 2, 2, 2, 1524, 1522, 3, 2, 2, 2, 1525, 1529, 7, 28, 2, 2, 1526, 1528, 7, 7, 2, 2, 1527, 1526, 3, 2, 2, 2, 1528, 1531, 3, 2, 2, 2, 1529, 1527, 3, 2, 2, 2, 1529, 1530, 3, 2, 2, 2, 1530, 1532, 3, 2, 2, 2, 1531, 1529, 3, 2, 2, 2, 1532, 1534, 5, 34, 18, 2, 1533, 1522, 3, 2, 2, 2, 1533, 1534, 3, 2, 2, 2, 1534, 1542, 3, 2, 2, 2, 1535, 1537, 7, 7, 2, 2, 1536, 1535, 3, 2, 2, 2, 1537, 1540, 3, 2, 2, 2, 1538, 1536, 3, 2, 2, 2, 1538, 1539, 3, 2, 2, 2, 1539, 1541, 3, 2, 2, 2, 1540, 1538, 3, 2, 2, 2, 1541, 1543, 5, 28, 15, 2, 1542, 1538, 3, 2, 2, 2, 1542, 1543, 3, 2, 2, 2, 1543, 89, 3, 2, 2, 2, 1544, 1546, 5, 300, 151, 2, 1545, 1544, 3, 2, 2, 2, 1545, 1546, 3, 2, 2, 2, 1546, 1547, 3, 2, 2, 2, 1547, 1551, 7, 81, 2, 2, 1548, 1550, 7, 7, 2, 2, 1549, 1548, 3, 2, 2, 2, 1550, 1553, 3, 2, 2, 2, 1551, 1549, 3, 2, 2, 2, 1551, 1552, 3, 2, 2, 2, 1552, 1554, 3, 2, 2, 2, 1553, 1551, 3, 2, 2, 2, 1554, 1569, 5, 60, 31, 2, 1555, 1557, 7, 7, 2, 2, 1556, 1555, 3, 2, 2, 2, 1557, 1560, 3, 2, 2, 2, 1558, 1556, 3, 2, 2, 2, 1558, 1559, 3, 2, 2, 2, 1559, 1561, 3, 2, 2, 2, 1560, 1558, 3, 2, 2, 2, 1561, 1565, 7, 28, 2, 2, 1562, 1564, 7, 7, 2, 2, 1563, 1562, 3, 2, 2, 2, 1564, 1567, 3, 2, 2, 2, 1565, 1563, 3, 2, 2, 2, 1565, 1566, 3, 2, 2, 2, 1566, 1568, 3, 2, 2, 2, 1567, 1565, 3, 2, 2, 2, 1568, 1570, 5, 92, 47, 2, 1569, 1558, 3, 2, 2, 2, 1569, 1570, 3, 2, 2, 2, 1570, 1574, 3, 2, 2, 2, 1571, 1573, 7, 7, 2, 2, 1572, 1571, 3, 2, 2, 2, 1573, 1576, 3, 2, 2, 2, 1574, 1572, 3, 2, 2, 2, 1574, 1575, 3, 2, 2, 2, 1575, 1578, 3, 2, 2, 2, 1576, 1574, 3, 2, 2, 2, 1577, 1579, 5, 136, 69, 2, 1578, 1577, 3, 2, 2, 2, 1578, 1579, 3, 2, 2, 2, 1579, 91, 3, 2, 2, 2, 1580, 1584, 9, 4, 2, 2, 1581, 1583, 7, 7, 2, 2, 1582, 1581, 3, 2, 2, 2, 1583, 1586, 3, 2, 2, 2, 1584, 1582, 3, 2, 2, 2, 1584, 1585, 3, 2, 2, 2, 1585, 1587, 3, 2, 2, 2, 1586, 1584, 3, 2, 2, 2, 1587, 1588, 5, 208, 105, 2, 1588, 93, 3, 2, 2, 2, 1589, 1593, 7, 15, 2, 2, 1590, 1592, 7, 7, 2, 2, 1591, 1590, 3, 2, 2, 2, 1592, 1595, 3, 2, 2, 2, 1593, 1591, 3, 2, 2, 2, 1593, 1594, 3, 2, 2, 2, 1594, 1597, 3, 2, 2, 2, 1595, 1593, 3, 2, 2, 2, 1596, 1598, 5, 96, 49, 2, 1597, 1596, 3, 2, 2, 2, 1597, 1598, 3, 2, 2, 2, 1598, 1613, 3, 2, 2, 2, 1599, 1601, 7, 7, 2, 2, 1600, 1599, 3, 2, 2, 2, 1601, 1604, 3, 2, 2, 2, 1602, 1600, 3, 2, 2, 2, 1602, 1603, 3, 2, 2, 2, 1603, 1605, 3, 2, 2, 2, 1604, 1602, 3, 2, 2, 2, 1605, 1609, 7, 29, 2, 2, 1606, 1608, 7, 7, 2, 2, 1607, 1606, 3, 2, 2, 2, 1608, 1611, 3, 2, 2, 2, 1609, 1607, 3, 2, 2, 2, 1609, 1610, 3, 2, 2, 2, 1610, 1612, 3, 2, 2, 2, 1611, 1609, 3, 2, 2, 2, 1612, 1614, 5, 52, 27, 2, 1613, 1602, 3, 2, 2, 2, 1613, 1614, 3, 2, 2, 2, 1614, 1618, 3, 2, 2, 2, 1615, 1617, 7, 7, 2, 2, 1616, 1615, 3, 2, 2, 2, 1617, 1620, 3, 2, 2, 2, 1618, 1616, 3, 2, 2, 2, 1618, 1619, 3, 2, 2, 2, 1619, 1621, 3, 2, 2, 2, 1620, 1618, 3, 2, 2, 2, 1621, 1622, 7, 16, 2, 2, 1622, 95, 3, 2, 2, 2, 1623, 1640, 5, 98, 50, 2, 1624, 1626, 7, 7, 2, 2, 1625, 1624, 3, 2, 2, 2, 1626, 1629, 3, 2, 2, 2, 1627, 1625, 3, 2, 2, 2, 1627, 1628, 3, 2, 2, 2, 1628, 1630, 3, 2, 2, 2, 1629, 1627, 3, 2, 2, 2, 1630, 1634, 7, 10, 2, 2, 1631, 1633, 7, 7, 2, 2, 1632, 1631, 3, 2, 2, 2, 1633, 1636, 3, 2, 2, 2, 1634, 1632, 3, 2, 2, 2, 1634, 1635, 3, 2, 2, 2, 1635, 1637, 3, 2, 2, 2, 1636, 1634, 3, 2, 2, 2, 1637, 1639, 5, 98, 50, 2, 1638, 1627, 3, 2, 2, 2, 1639, 1642, 3, 2, 2, 2, 1640, 1638, 3, 2, 2, 2, 1640, 1641, 3, 2, 2, 2, 1641, 1646, 3, 2, 2, 2, 1642, 1640, 3, 2, 2, 2, 1643, 1645, 7, 7, 2, 2, 1644, 1643, 3, 2, 2, 2, 1645, 1648, 3, 2, 2, 2, 1646, 1644, 3, 2, 2, 2, 1646, 1647, 3, 2, 2, 2, 1647, 1650, 3, 2, 2, 2, 1648, 1646, 3, 2, 2, 2, 1649, 1651, 7, 10, 2, 2, 1650, 1649, 3, 2, 2, 2, 1650, 1651, 3, 2, 2, 2, 1651, 97, 3, 2, 2, 2, 1652, 1656, 5, 300, 151, 2, 1653, 1655, 7, 7, 2, 2, 1654, 1653, 3, 2, 2, 2, 1655, 1658, 3, 2, 2, 2, 1656, 1654, 3, 2, 2, 2, 1656, 1657, 3, 2, 2, 2, 1657, 1660, 3, 2, 2, 2, 1658, 1656, 3, 2, 2, 2, 1659, 1652, 3, 2, 2, 2, 1659, 1660, 3, 2, 2, 2, 1660, 1661, 3, 2, 2, 2, 1661, 1669, 5, 344, 173, 2, 1662, 1664, 7, 7, 2, 2, 1663, 1662, 3, 2, 2, 2, 1664, 1667, 3, 2, 2, 2, 1665, 1663, 3, 2, 2, 2, 1665, 1666, 3, 2, 2, 2, 1666, 1668, 3, 2, 2, 2, 1667, 1665, 3, 2, 2, 2, 1668, 1670, 5, 208, 105, 2, 1669, 1665, 3, 2, 2, 2, 1669, 1670, 3, 2, 2, 2, 1670, 1678, 3, 2, 2, 2, 1671, 1673, 7, 7, 2, 2, 1672, 1671, 3, 2, 2, 2, 1673, 1676, 3, 2, 2, 2, 1674, 1672, 3, 2, 2, 2, 1674, 1675, 3, 2, 2, 2, 1675, 1677, 3, 2, 2, 2, 1676, 1674, 3, 2, 2, 2, 1677, 1679, 5, 28, 15, 2, 1678, 1674, 3, 2, 2, 2, 1678, 1679, 3, 2, 2, 2, 1679, 99, 3, 2, 2, 2, 1680, 1682, 5, 306, 154, 2, 1681, 1680, 3, 2, 2, 2, 1681, 1682, 3, 2, 2, 2, 1682, 1687, 3, 2, 2, 2, 1683, 1688, 5, 122, 62, 2, 1684, 1688, 5, 104, 53, 2, 1685, 1688, 5, 102, 52, 2, 1686, 1688, 5, 118, 60, 2, 1687, 1683, 3, 2, 2, 2, 1687, 1684, 3, 2, 2, 2, 1687, 1685, 3, 2, 2, 2, 1687, 1686, 3, 2, 2, 2, 1688, 101, 3, 2, 2, 2, 1689, 1692, 5, 108, 55, 2, 1690, 1692, 7, 108, 2, 2, 1691, 1689, 3, 2, 2, 2, 1691, 1690, 3, 2, 2, 2, 1692, 103, 3, 2, 2, 2, 1693, 1696, 5, 102, 52, 2, 1694, 1696, 5, 122, 62, 2, 1695, 1693, 3, 2, 2, 2, 1695, 1694, 3, 2, 2, 2, 1696, 1700, 3, 2, 2, 2, 1697, 1699, 7, 7, 2, 2, 1698, 1697, 3, 2, 2, 2, 1699, 1702, 3, 2, 2, 2, 1700, 1698, 3, 2, 2, 2, 1700, 1701, 3, 2, 2, 2, 1701, 1704, 3, 2, 2, 2, 1702, 1700, 3, 2, 2, 2, 1703, 1705, 5, 106, 54, 2, 1704, 1703, 3, 2, 2, 2, 1705, 1706, 3, 2, 2, 2, 1706, 1704, 3, 2, 2, 2, 1706, 1707, 3, 2, 2, 2, 1707, 105, 3, 2, 2, 2, 1708, 1709, 9, 5, 2, 2, 1709, 107, 3, 2, 2, 2, 1710, 1727, 5, 110, 56, 2, 1711, 1713, 7, 7, 2, 2, 1712, 1711, 3, 2, 2, 2, 1713, 1716, 3, 2, 2, 2, 1714, 1712, 3, 2, 2, 2, 1714, 1715, 3, 2, 2, 2, 1715, 1717, 3, 2, 2, 2, 1716, 1714, 3, 2, 2, 2, 1717, 1721, 7, 9, 2, 2, 1718, 1720, 7, 7, 2, 2, 1719, 1718, 3, 2, 2, 2, 1720, 1723, 3, 2, 2, 2, 1721, 1719, 3, 2, 2, 2, 1721, 1722, 3, 2, 2, 2, 1722, 1724, 3, 2, 2, 2, 1723, 1721, 3, 2, 2, 2, 1724, 1726, 5, 110, 56, 2, 1725, 1714, 3, 2, 2, 2, 1726, 1729, 3, 2, 2, 2, 1727, 1725, 3, 2, 2, 2, 1727, 1728, 3, 2, 2, 2, 1728, 109, 3, 2, 2, 2, 1729, 1727, 3, 2, 2, 2, 1730, 1738, 5, 344, 173, 2, 1731, 1733, 7, 7, 2, 2, 1732, 1731, 3, 2, 2, 2, 1733, 1736, 3, 2, 2, 2, 1734, 1732, 3, 2, 2, 2, 1734, 1735, 3, 2, 2, 2, 1735, 1737, 3, 2, 2, 2, 1736, 1734, 3, 2, 2, 2, 1737, 1739, 5, 206, 104, 2, 1738, 1734, 3, 2, 2, 2, 1738, 1739, 3, 2, 2, 2, 1739, 111, 3, 2, 2, 2, 1740, 1742, 5, 114, 58, 2, 1741, 1740, 3, 2, 2, 2, 1741, 1742, 3, 2, 2, 2, 1742, 1743, 3, 2, 2, 2, 1743, 1746, 5, 100, 51, 2, 1744, 1746, 7, 17, 2, 2, 1745, 1741, 3, 2, 2, 2, 1745, 1744, 3, 2, 2, 2, 1746, 113, 3, 2, 2, 2, 1747, 1749, 5, 116, 59, 2, 1748, 1747, 3, 2, 2, 2, 1749, 1750, 3, 2, 2, 2, 1750, 1748, 3, 2, 2, 2, 1750, 1751, 3, 2, 2, 2, 1751, 115, 3, 2, 2, 2, 1752, 1756, 5, 316, 159, 2, 1753, 1755, 7, 7, 2, 2, 1754, 1753, 3, 2, 2, 2, 1755, 1758, 3, 2, 2, 2, 1756, 1754, 3, 2, 2, 2, 1756, 1757, 3, 2, 2, 2, 1757, 1761, 3, 2, 2, 2, 1758, 1756, 3, 2, 2, 2, 1759, 1761, 5, 334, 168, 2, 1760, 1752, 3, 2, 2, 2, 1760, 1759, 3, 2, 2, 2, 1761, 117, 3, 2, 2, 2, 1762, 1766, 5, 124, 63, 2, 1763, 1765, 7, 7, 2, 2, 1764, 1763, 3, 2, 2, 2, 1765, 1768, 3, 2, 2, 2, 1766, 1764, 3, 2, 2, 2, 1766, 1767, 3, 2, 2, 2, 1767, 1769, 3, 2, 2, 2, 1768, 1766, 3, 2, 2, 2, 1769, 1773, 7, 9, 2, 2, 1770, 1772, 7, 7, 2, 2, 1771, 1770, 3, 2, 2, 2, 1772, 1775, 3, 2, 2, 2, 1773, 1771, 3, 2, 2, 2, 1773, 1774, 3, 2, 2, 2, 1774, 1777, 3, 2, 2, 2, 1775, 1773, 3, 2, 2, 2, 1776, 1762, 3, 2, 2, 2, 1776, 1777, 3, 2, 2, 2, 1777, 1778, 3, 2, 2, 2, 1778, 1782, 5, 120, 61, 2, 1779, 1781, 7, 7, 2, 2, 1780, 1779, 3, 2, 2, 2, 1781, 1784, 3, 2, 2, 2, 1782, 1780, 3, 2, 2, 2, 1782, 1783, 3, 2, 2, 2, 1783, 1785, 3, 2, 2, 2, 1784, 1782, 3, 2, 2, 2, 1785, 1789, 7, 36, 2, 2, 1786, 1788, 7, 7, 2, 2, 1787, 1786, 3, 2, 2, 2, 1788, 1791, 3, 2, 2, 2, 1789, 1787, 3, 2, 2, 2, 1789, 1790, 3, 2, 2, 2, 1790, 1792, 3, 2, 2, 2, 1791, 1789, 3, 2, 2, 2, 1792, 1793, 5, 100, 51, 2, 1793, 119, 3, 2, 2, 2, 1794, 1798, 7, 11, 2, 2, 1795, 1797, 7, 7, 2, 2, 1796, 1795, 3, 2, 2, 2, 1797, 1800, 3, 2, 2, 2, 1798, 1796, 3, 2, 2, 2, 1798, 1799, 3, 2, 2, 2, 1799, 1803, 3, 2, 2, 2, 1800, 1798, 3, 2, 2, 2, 1801, 1804, 5, 86, 44, 2, 1802, 1804, 5, 100, 51, 2, 1803, 1801, 3, 2, 2, 2, 1803, 1802, 3, 2, 2, 2, 1803, 1804, 3, 2, 2, 2, 1804, 1824, 3, 2, 2, 2, 1805, 1807, 7, 7, 2, 2, 1806, 1805, 3, 2, 2, 2, 1807, 1810, 3, 2, 2, 2, 1808, 1806, 3, 2, 2, 2, 1808, 1809, 3, 2, 2, 2, 1809, 1811, 3, 2, 2, 2, 1810, 1808, 3, 2, 2, 2, 1811, 1815, 7, 10, 2, 2, 1812, 1814, 7, 7, 2, 2, 1813, 1812, 3, 2, 2, 2, 1814, 1817, 3, 2, 2, 2, 1815, 1813, 3, 2, 2, 2, 1815, 1816, 3, 2, 2, 2, 1816, 1820, 3, 2, 2, 2, 1817, 1815, 3, 2, 2, 2, 1818, 1821, 5, 86, 44, 2, 1819, 1821, 5, 100, 51, 2, 1820, 1818, 3, 2, 2, 2, 1820, 1819, 3, 2, 2, 2, 1821, 1823, 3, 2, 2, 2, 1822, 1808, 3, 2, 2, 2, 1823, 1826, 3, 2, 2, 2, 1824, 1822, 3, 2, 2, 2, 1824, 1825, 3, 2, 2, 2, 1825, 1834, 3, 2, 2, 2, 1826, 1824, 3, 2, 2, 2, 1827, 1829, 7, 7, 2, 2, 1828, 1827, 3, 2, 2, 2, 1829, 1832, 3, 2, 2, 2, 1830, 1828, 3, 2, 2, 2, 1830, 1831, 3, 2, 2, 2, 1831, 1833, 3, 2, 2, 2, 1832, 1830, 3, 2, 2, 2, 1833, 1835, 7, 10, 2, 2, 1834, 1830, 3, 2, 2, 2, 1834, 1835, 3, 2, 2, 2, 1835, 1839, 3, 2, 2, 2, 1836, 1838, 7, 7, 2, 2, 1837, 1836, 3, 2, 2, 2, 1838, 1841, 3, 2, 2, 2, 1839, 1837, 3, 2, 2, 2, 1839, 1840, 3, 2, 2, 2, 1840, 1842, 3, 2, 2, 2, 1841, 1839, 3, 2, 2, 2, 1842, 1843, 7, 12, 2, 2, 1843, 121, 3, 2, 2, 2, 1844, 1848, 7, 11, 2, 2, 1845, 1847, 7, 7, 2, 2, 1846, 1845, 3, 2, 2, 2, 1847, 1850, 3, 2, 2, 2, 1848, 1846, 3, 2, 2, 2, 1848, 1849, 3, 2, 2, 2, 1849, 1851, 3, 2, 2, 2, 1850, 1848, 3, 2, 2, 2, 1851, 1855, 5, 100, 51, 2, 1852, 1854, 7, 7, 2, 2, 1853, 1852, 3, 2, 2, 2, 1854, 1857, 3, 2, 2, 2, 1855, 1853, 3, 2, 2, 2, 1855, 1856, 3, 2, 2, 2, 1856, 1858, 3, 2, 2, 2, 1857, 1855, 3, 2, 2, 2, 1858, 1859, 7, 12, 2, 2, 1859, 123, 3, 2, 2, 2, 1860, 1862, 5, 306, 154, 2, 1861, 1860, 3, 2, 2, 2, 1861, 1862, 3, 2, 2, 2, 1862, 1866, 3, 2, 2, 2, 1863, 1867, 5, 122, 62, 2, 1864, 1867, 5, 104, 53, 2, 1865, 1867, 5, 102, 52, 2, 1866, 1863, 3, 2, 2, 2, 1866, 1864, 3, 2, 2, 2, 1866, 1865, 3, 2, 2, 2, 1867, 125, 3, 2, 2, 2, 1868, 1872, 7, 11, 2, 2, 1869, 1871, 7, 7, 2, 2, 1870, 1869, 3, 2, 2, 2, 1871, 1874, 3, 2, 2, 2, 1872, 1870, 3, 2, 2, 2, 1872, 1873, 3, 2, 2, 2, 1873, 1877, 3, 2, 2, 2, 1874, 1872, 3, 2, 2, 2, 1875, 1878, 5, 108, 55, 2, 1876, 1878, 5, 126, 64, 2, 1877, 1875, 3, 2, 2, 2, 1877, 1876, 3, 2, 2, 2, 1878, 1882, 3, 2, 2, 2, 1879, 1881, 7, 7, 2, 2, 1880, 1879, 3, 2, 2, 2, 1881, 1884, 3, 2, 2, 2, 1882, 1880, 3, 2, 2, 2, 1882, 1883, 3, 2, 2, 2, 1883, 1885, 3, 2, 2, 2, 1884, 1882, 3, 2, 2, 2, 1885, 1886, 7, 12, 2, 2, 1886, 127, 3, 2, 2, 2, 1887, 1893, 5, 130, 66, 2, 1888, 1889, 5, 150, 76, 2, 1889, 1890, 5, 130, 66, 2, 1890, 1892, 3, 2, 2, 2, 1891, 1888, 3, 2, 2, 2, 1892, 1895, 3, 2, 2, 2, 1893, 1891, 3, 2, 2, 2, 1893, 1894, 3, 2, 2, 2, 1894, 1897, 3, 2, 2, 2, 1895, 1893, 3, 2, 2, 2, 1896, 1887, 3, 2, 2, 2, 1896, 1897, 3, 2, 2, 2, 1897, 1899, 3, 2, 2, 2, 1898, 1900, 5, 150, 76, 2, 1899, 1898, 3, 2, 2, 2, 1899, 1900, 3, 2, 2, 2, 1900, 129, 3, 2, 2, 2, 1901, 1904, 5, 132, 67, 2, 1902, 1904, 5, 334, 168, 2, 1903, 1901, 3, 2, 2, 2, 1903, 1902, 3, 2, 2, 2, 1904, 1907, 3, 2, 2, 2, 1905, 1903, 3, 2, 2, 2, 1905, 1906, 3, 2, 2, 2, 1906, 1912, 3, 2, 2, 2, 1907, 1905, 3, 2, 2, 2, 1908, 1913, 5, 22, 12, 2, 1909, 1913, 5, 146, 74, 2, 1910, 1913, 5, 138, 70, 2, 1911, 1913, 5, 152, 77, 2, 1912, 1908, 3, 2, 2, 2, 1912, 1909, 3, 2, 2, 2, 1912, 1910, 3, 2, 2, 2, 1912, 1911, 3, 2, 2, 2, 1913, 131, 3, 2, 2, 2, 1914, 1915, 5, 344, 173, 2, 1915, 1919, 9, 6, 2, 2, 1916, 1918, 7, 7, 2, 2, 1917, 1916, 3, 2, 2, 2, 1918, 1921, 3, 2, 2, 2, 1919, 1917, 3, 2, 2, 2, 1919, 1920, 3, 2, 2, 2, 1920, 133, 3, 2, 2, 2, 1921, 1919, 3, 2, 2, 2, 1922, 1925, 5, 136, 69, 2, 1923, 1925, 5, 130, 66, 2, 1924, 1922, 3, 2, 2, 2, 1924, 1923, 3, 2, 2, 2, 1925, 135, 3, 2, 2, 2, 1926, 1930, 7, 15, 2, 2, 1927, 1929, 7, 7, 2, 2, 1928, 1927, 3, 2, 2, 2, 1929, 1932, 3, 2, 2, 2, 1930, 1928, 3, 2, 2, 2, 1930, 1931, 3, 2, 2, 2, 1931, 1933, 3, 2, 2, 2, 1932, 1930, 3, 2, 2, 2, 1933, 1937, 5, 128, 65, 2, 1934, 1936, 7, 7, 2, 2, 1935, 1934, 3, 2, 2, 2, 1936, 1939, 3, 2, 2, 2, 1937, 1935, 3, 2, 2, 2, 1937, 1938, 3, 2, 2, 2, 1938, 1940, 3, 2, 2, 2, 1939, 1937, 3, 2, 2, 2, 1940, 1941, 7, 16, 2, 2, 1941, 137, 3, 2, 2, 2, 1942, 1946, 5, 140, 71, 2, 1943, 1946, 5, 142, 72, 2, 1944, 1946, 5, 144, 73, 2, 1945, 1942, 3, 2, 2, 2, 1945, 1943, 3, 2, 2, 2, 1945, 1944, 3, 2, 2, 2, 1946, 139, 3, 2, 2, 2, 1947, 1951, 7, 95, 2, 2, 1948, 1950, 7, 7, 2, 2, 1949, 1948, 3, 2, 2, 2, 1950, 1953, 3, 2, 2, 2, 1951, 1949, 3, 2, 2, 2, 1951, 1952, 3, 2, 2, 2, 1952, 1954, 3, 2, 2, 2, 1953, 1951, 3, 2, 2, 2, 1954, 1958, 7, 11, 2, 2, 1955, 1957, 5, 334, 168, 2, 1956, 1955, 3, 2, 2, 2, 1957, 1960, 3, 2, 2, 2, 1958, 1956, 3, 2, 2, 2, 1958, 1959, 3, 2, 2, 2, 1959, 1963, 3, 2, 2, 2, 1960, 1958, 3, 2, 2, 2, 1961, 1964, 5, 68, 35, 2, 1962, 1964, 5, 70, 36, 2, 1963, 1961, 3, 2, 2, 2, 1963, 1962, 3, 2, 2, 2, 1964, 1965, 3, 2, 2, 2, 1965, 1966, 7, 104, 2, 2, 1966, 1967, 5, 152, 77, 2, 1967, 1971, 7, 12, 2, 2, 1968, 1970, 7, 7, 2, 2, 1969, 1968, 3, 2, 2, 2, 1970, 1973, 3, 2, 2, 2, 1971, 1969, 3, 2, 2, 2, 1971, 1972, 3, 2, 2, 2, 1972, 1975, 3, 2, 2, 2, 1973, 1971, 3, 2, 2, 2, 1974, 1976, 5, 134, 68, 2, 1975, 1974, 3, 2, 2, 2, 1975, 1976, 3, 2, 2, 2, 1976, 141, 3, 2, 2, 2, 1977, 1981, 7, 97, 2, 2, 1978, 1980, 7, 7, 2, 2, 1979, 1978, 3, 2, 2, 2, 1980, 1983, 3, 2, 2, 2, 1981, 1979, 3, 2, 2, 2, 1981, 1982, 3, 2, 2, 2, 1982, 1984, 3, 2, 2, 2, 1983, 1981, 3, 2, 2, 2, 1984, 1985, 7, 11, 2, 2, 1985, 1986, 5, 152, 77, 2, 1986, 1990, 7, 12, 2, 2, 1987, 1989, 7, 7, 2, 2, 1988, 1987, 3, 2, 2, 2, 1989, 1992, 3, 2, 2, 2, 1990, 1988, 3, 2, 2, 2, 1990, 1991, 3, 2, 2, 2, 1991, 1995, 3, 2, 2, 2, 1992, 1990, 3, 2, 2, 2, 1993, 1996, 5, 134, 68, 2, 1994, 1996, 7, 29, 2, 2, 1995, 1993, 3, 2, 2, 2, 1995, 1994, 3, 2, 2, 2, 1996, 143, 3, 2, 2, 2, 1997, 2001, 7, 96, 2, 2, 1998, 2000, 7, 7, 2, 2, 1999, 1998, 3, 2, 2, 2, 2000, 2003, 3, 2, 2, 2, 2001, 1999, 3, 2, 2, 2, 2001, 2002, 3, 2, 2, 2, 2002, 2005, 3, 2, 2, 2, 2003, 2001, 3, 2, 2, 2, 2004, 2006, 5, 134, 68, 2, 2005, 2004, 3, 2, 2, 2, 2005, 2006, 3, 2, 2, 2, 2006, 2010, 3, 2, 2, 2, 2007, 2009, 7, 7, 2, 2, 2008, 2007, 3, 2, 2, 2, 2009, 2012, 3, 2, 2, 2, 2010, 2008, 3, 2, 2, 2, 2010, 2011, 3, 2, 2, 2, 2011, 2013, 3, 2, 2, 2, 2012, 2010, 3, 2, 2, 2, 2013, 2017, 7, 97, 2, 2, 2014, 2016, 7, 7, 2, 2, 2015, 2014, 3, 2, 2, 2, 2016, 2019, 3, 2, 2, 2, 2017, 2015, 3, 2, 2, 2, 2017, 2018, 3, 2, 2, 2, 2018, 2020, 3, 2, 2, 2, 2019, 2017, 3, 2, 2, 2, 2020, 2021, 7, 11, 2, 2, 2021, 2022, 5, 152, 77, 2, 2022, 2023, 7, 12, 2, 2, 2023, 145, 3, 2, 2, 2, 2024, 2025, 5, 188, 95, 2, 2025, 2026, 7, 30, 2, 2, 2026, 2031, 3, 2, 2, 2, 2027, 2028, 5, 192, 97, 2, 2028, 2029, 5, 274, 138, 2, 2029, 2031, 3, 2, 2, 2, 2030, 2024, 3, 2, 2, 2, 2030, 2027, 3, 2, 2, 2, 2031, 2035, 3, 2, 2, 2, 2032, 2034, 7, 7, 2, 2, 2033, 2032, 3, 2, 2, 2, 2034, 2037, 3, 2, 2, 2, 2035, 2033, 3, 2, 2, 2, 2035, 2036, 3, 2, 2, 2, 2036, 2038, 3, 2, 2, 2, 2037, 2035, 3, 2, 2, 2, 2038, 2039, 5, 152, 77, 2, 2039, 147, 3, 2, 2, 2, 2040, 2044, 9, 7, 2, 2, 2041, 2043, 7, 7, 2, 2, 2042, 2041, 3, 2, 2, 2, 2043, 2046, 3, 2, 2, 2, 2044, 2042, 3, 2, 2, 2, 2044, 2045, 3, 2, 2, 2, 2045, 2049, 3, 2, 2, 2, 2046, 2044, 3, 2, 2, 2, 2047, 2049, 7, 2, 2, 3, 2048, 2040, 3, 2, 2, 2, 2048, 2047, 3, 2, 2, 2, 2049, 149, 3, 2, 2, 2, 2050, 2052, 9, 7, 2, 2, 2051, 2050, 3, 2, 2, 2, 2052, 2053, 3, 2, 2, 2, 2053, 2051, 3, 2, 2, 2, 2053, 2054, 3, 2, 2, 2, 2054, 2057, 3, 2, 2, 2, 2055, 2057, 7, 2, 2, 3, 2056, 2051, 3, 2, 2, 2, 2056, 2055, 3, 2, 2, 2, 2057, 151, 3, 2, 2, 2, 2058, 2059, 5, 154, 78, 2, 2059, 153, 3, 2, 2, 2, 2060, 2077, 5, 156, 79, 2, 2061, 2063, 7, 7, 2, 2, 2062, 2061, 3, 2, 2, 2, 2063, 2066, 3, 2, 2, 2, 2064, 2062, 3, 2, 2, 2, 2064, 2065, 3, 2, 2, 2, 2065, 2067, 3, 2, 2, 2, 2066, 2064, 3, 2, 2, 2, 2067, 2071, 7, 25, 2, 2, 2068, 2070, 7, 7, 2, 2, 2069, 2068, 3, 2, 2, 2, 2070, 2073, 3, 2, 2, 2, 2071, 2069, 3, 2, 2, 2, 2071, 2072, 3, 2, 2, 2, 2072, 2074, 3, 2, 2, 2, 2073, 2071, 3, 2, 2, 2, 2074, 2076, 5, 156, 79, 2, 2075, 2064, 3, 2, 2, 2, 2076, 2079, 3, 2, 2, 2, 2077, 2075, 3, 2, 2, 2, 2077, 2078, 3, 2, 2, 2, 2078, 155, 3, 2, 2, 2, 2079, 2077, 3, 2, 2, 2, 2080, 2097, 5, 158, 80, 2, 2081, 2083, 7, 7, 2, 2, 2082, 2081, 3, 2, 2, 2, 2083, 2086, 3, 2, 2, 2, 2084, 2082, 3, 2, 2, 2, 2084, 2085, 3, 2, 2, 2, 2085, 2087, 3, 2, 2, 2, 2086, 2084, 3, 2, 2, 2, 2087, 2091, 7, 24, 2, 2, 2088, 2090, 7, 7, 2, 2, 2089, 2088, 3, 2, 2, 2, 2090, 2093, 3, 2, 2, 2, 2091, 2089, 3, 2, 2, 2, 2091, 2092, 3, 2, 2, 2, 2092, 2094, 3, 2, 2, 2, 2093, 2091, 3, 2, 2, 2, 2094, 2096, 5, 158, 80, 2, 2095, 2084, 3, 2, 2, 2, 2096, 2099, 3, 2, 2, 2, 2097, 2095, 3, 2, 2, 2, 2097, 2098, 3, 2, 2, 2, 2098, 157, 3, 2, 2, 2, 2099, 2097, 3, 2, 2, 2, 2100, 2112, 5, 160, 81, 2, 2101, 2105, 5, 276, 139, 2, 2102, 2104, 7, 7, 2, 2, 2103, 2102, 3, 2, 2, 2, 2104, 2107, 3, 2, 2, 2, 2105, 2103, 3, 2, 2, 2, 2105, 2106, 3, 2, 2, 2, 2106, 2108, 3, 2, 2, 2, 2107, 2105, 3, 2, 2, 2, 2108, 2109, 5, 160, 81, 2, 2109, 2111, 3, 2, 2, 2, 2110, 2101, 3, 2, 2, 2, 2111, 2114, 3, 2, 2, 2, 2112, 2110, 3, 2, 2, 2, 2112, 2113, 3, 2, 2, 2, 2113, 159, 3, 2, 2, 2, 2114, 2112, 3, 2, 2, 2, 2115, 2127, 5, 162, 82, 2, 2116, 2120, 5, 278, 140, 2, 2117, 2119, 7, 7, 2, 2, 2118, 2117, 3, 2, 2, 2, 2119, 2122, 3, 2, 2, 2, 2120, 2118, 3, 2, 2, 2, 2120, 2121, 3, 2, 2, 2, 2121, 2123, 3, 2, 2, 2, 2122, 2120, 3, 2, 2, 2, 2123, 2124, 5, 162, 82, 2, 2124, 2126, 3, 2, 2, 2, 2125, 2116, 3, 2, 2, 2, 2126, 2129, 3, 2, 2, 2, 2127, 2125, 3, 2, 2, 2, 2127, 2128, 3, 2, 2, 2, 2128, 161, 3, 2, 2, 2, 2129, 2127, 3, 2, 2, 2, 2130, 2134, 5, 164, 83, 2, 2131, 2133, 5, 202, 102, 2, 2132, 2131, 3, 2, 2, 2, 2133, 2136, 3, 2, 2, 2, 2134, 2132, 3, 2, 2, 2, 2134, 2135, 3, 2, 2, 2, 2135, 163, 3, 2, 2, 2, 2136, 2134, 3, 2, 2, 2, 2137, 2158, 5, 166, 84, 2, 2138, 2142, 5, 280, 141, 2, 2139, 2141, 7, 7, 2, 2, 2140, 2139, 3, 2, 2, 2, 2141, 2144, 3, 2, 2, 2, 2142, 2140, 3, 2, 2, 2, 2142, 2143, 3, 2, 2, 2, 2143, 2145, 3, 2, 2, 2, 2144, 2142, 3, 2, 2, 2, 2145, 2146, 5, 166, 84, 2, 2146, 2157, 3, 2, 2, 2, 2147, 2151, 5, 282, 142, 2, 2148, 2150, 7, 7, 2, 2, 2149, 2148, 3, 2, 2, 2, 2150, 2153, 3, 2, 2, 2, 2151, 2149, 3, 2, 2, 2, 2151, 2152, 3, 2, 2, 2, 2152, 2154, 3, 2, 2, 2, 2153, 2151, 3, 2, 2, 2, 2154, 2155, 5, 100, 51, 2, 2155, 2157, 3, 2, 2, 2, 2156, 2138, 3, 2, 2, 2, 2156, 2147, 3, 2, 2, 2, 2157, 2160, 3, 2, 2, 2, 2158, 2156, 3, 2, 2, 2, 2158, 2159, 3, 2, 2, 2, 2159, 165, 3, 2, 2, 2, 2160, 2158, 3, 2, 2, 2, 2161, 2179, 5, 170, 86, 2, 2162, 2164, 7, 7, 2, 2, 2163, 2162, 3, 2, 2, 2, 2164, 2167, 3, 2, 2, 2, 2165, 2163, 3, 2, 2, 2, 2165, 2166, 3, 2, 2, 2, 2166, 2168, 3, 2, 2, 2, 2167, 2165, 3, 2, 2, 2, 2168, 2172, 5, 168, 85, 2, 2169, 2171, 7, 7, 2, 2, 2170, 2169, 3, 2, 2, 2, 2171, 2174, 3, 2, 2, 2, 2172, 2170, 3, 2, 2, 2, 2172, 2173, 3, 2, 2, 2, 2173, 2175, 3, 2, 2, 2, 2174, 2172, 3, 2, 2, 2, 2175, 2176, 5, 170, 86, 2, 2176, 2178, 3, 2, 2, 2, 2177, 2165, 3, 2, 2, 2, 2178, 2181, 3, 2, 2, 2, 2179, 2177, 3, 2, 2, 2, 2179, 2180, 3, 2, 2, 2, 2180, 167, 3, 2, 2, 2, 2181, 2179, 3, 2, 2, 2, 2182, 2183, 7, 47, 2, 2, 2183, 2184, 7, 28, 2, 2, 2184, 169, 3, 2, 2, 2, 2185, 2197, 5, 172, 87, 2, 2186, 2190, 5, 344, 173, 2, 2187, 2189, 7, 7, 2, 2, 2188, 2187, 3, 2, 2, 2, 2189, 2192, 3, 2, 2, 2, 2190, 2188, 3, 2, 2, 2, 2190, 2191, 3, 2, 2, 2, 2191, 2193, 3, 2, 2, 2, 2192, 2190, 3, 2, 2, 2, 2193, 2194, 5, 172, 87, 2, 2194, 2196, 3, 2, 2, 2, 2195, 2186, 3, 2, 2, 2, 2196, 2199, 3, 2, 2, 2, 2197, 2195, 3, 2, 2, 2, 2197, 2198, 3, 2, 2, 2, 2198, 171, 3, 2, 2, 2, 2199, 2197, 3, 2, 2, 2, 2200, 2211, 5, 174, 88, 2, 2201, 2205, 7, 38, 2, 2, 2202, 2204, 7, 7, 2, 2, 2203, 2202, 3, 2, 2, 2, 2204, 2207, 3, 2, 2, 2, 2205, 2203, 3, 2, 2, 2, 2205, 2206, 3, 2, 2, 2, 2206, 2208, 3, 2, 2, 2, 2207, 2205, 3, 2, 2, 2, 2208, 2210, 5, 174, 88, 2, 2209, 2201, 3, 2, 2, 2, 2210, 2213, 3, 2, 2, 2, 2211, 2209, 3, 2, 2, 2, 2211, 2212, 3, 2, 2, 2, 2212, 173, 3, 2, 2, 2, 2213, 2211, 3, 2, 2, 2, 2214, 2226, 5, 176, 89, 2, 2215, 2219, 5, 284, 143, 2, 2216, 2218, 7, 7, 2, 2, 2217, 2216, 3, 2, 2, 2, 2218, 2221, 3, 2, 2, 2, 2219, 2217, 3, 2, 2, 2, 2219, 2220, 3, 2, 2, 2, 2220, 2222, 3, 2, 2, 2, 2221, 2219, 3, 2, 2, 2, 2222, 2223, 5, 176, 89, 2, 2223, 2225, 3, 2, 2, 2, 2224, 2215, 3, 2, 2, 2, 2225, 2228, 3, 2, 2, 2, 2226, 2224, 3, 2, 2, 2, 2226, 2227, 3, 2, 2, 2, 2227, 175, 3, 2, 2, 2, 2228, 2226, 3, 2, 2, 2, 2229, 2241, 5, 178, 90, 2, 2230, 2234, 5, 286, 144, 2, 2231, 2233, 7, 7, 2, 2, 2232, 2231, 3, 2, 2, 2, 2233, 2236, 3, 2, 2, 2, 2234, 2232, 3, 2, 2, 2, 2234, 2235, 3, 2, 2, 2, 2235, 2237, 3, 2, 2, 2, 2236, 2234, 3, 2, 2, 2, 2237, 2238, 5, 178, 90, 2, 2238, 2240, 3, 2, 2, 2, 2239, 2230, 3, 2, 2, 2, 2240, 2243, 3, 2, 2, 2, 2241, 2239, 3, 2, 2, 2, 2241, 2242, 3, 2, 2, 2, 2242, 177, 3, 2, 2, 2, 2243, 2241, 3, 2, 2, 2, 2244, 2262, 5, 180, 91, 2, 2245, 2247, 7, 7, 2, 2, 2246, 2245, 3, 2, 2, 2, 2247, 2250, 3, 2, 2, 2, 2248, 2246, 3, 2, 2, 2, 2248, 2249, 3, 2, 2, 2, 2249, 2251, 3, 2, 2, 2, 2250, 2248, 3, 2, 2, 2, 2251, 2255, 5, 288, 145, 2, 2252, 2254, 7, 7, 2, 2, 2253, 2252, 3, 2, 2, 2, 2254, 2257, 3, 2, 2, 2, 2255, 2253, 3, 2, 2, 2, 2255, 2256, 3, 2, 2, 2, 2256, 2258, 3, 2, 2, 2, 2257, 2255, 3, 2, 2, 2, 2258, 2259, 5, 100, 51, 2, 2259, 2261, 3, 2, 2, 2, 2260, 2248, 3, 2, 2, 2, 2261, 2264, 3, 2, 2, 2, 2262, 2260, 3, 2, 2, 2, 2262, 2263, 3, 2, 2, 2, 2263, 179, 3, 2, 2, 2, 2264, 2262, 3, 2, 2, 2, 2265, 2267, 5, 182, 92, 2, 2266, 2265, 3, 2, 2, 2, 2267, 2270, 3, 2, 2, 2, 2268, 2266, 3, 2, 2, 2, 2268, 2269, 3, 2, 2, 2, 2269, 2271, 3, 2, 2, 2, 2270, 2268, 3, 2, 2, 2, 2271, 2272, 5, 184, 93, 2, 2272, 181, 3, 2, 2, 2, 2273, 2283, 5, 334, 168, 2, 2274, 2283, 5, 132, 67, 2, 2275, 2279, 5, 290, 146, 2, 2276, 2278, 7, 7, 2, 2, 2277, 2276, 3, 2, 2, 2, 2278, 2281, 3, 2, 2, 2, 2279, 2277, 3, 2, 2, 2, 2279, 2280, 3, 2, 2, 2, 2280, 2283, 3, 2, 2, 2, 2281, 2279, 3, 2, 2, 2, 2282, 2273, 3, 2, 2, 2, 2282, 2274, 3, 2, 2, 2, 2282, 2275, 3, 2, 2, 2, 2283, 183, 3, 2, 2, 2, 2284, 2288, 5, 212, 107, 2, 2285, 2287, 5, 186, 94, 2, 2286, 2285, 3, 2, 2, 2, 2287, 2290, 3, 2, 2, 2, 2288, 2286, 3, 2, 2, 2, 2288, 2289, 3, 2, 2, 2, 2289, 185, 3, 2, 2, 2, 2290, 2288, 3, 2, 2, 2, 2291, 2297, 5, 292, 147, 2, 2292, 2297, 5, 206, 104, 2, 2293, 2297, 5, 202, 102, 2, 2294, 2297, 5, 198, 100, 2, 2295, 2297, 5, 200, 101, 2, 2296, 2291, 3, 2, 2, 2, 2296, 2292, 3, 2, 2, 2, 2296, 2293, 3, 2, 2, 2, 2296, 2294, 3, 2, 2, 2, 2296, 2295, 3, 2, 2, 2, 2297, 187, 3, 2, 2, 2, 2298, 2299, 5, 184, 93, 2, 2299, 2300, 5, 196, 99, 2, 2300, 2304, 3, 2, 2, 2, 2301, 2304, 5, 344, 173, 2, 2302, 2304, 5, 190, 96, 2, 2303, 2298, 3, 2, 2, 2, 2303, 2301, 3, 2, 2, 2, 2303, 2302, 3, 2, 2, 2, 2304, 189, 3, 2, 2, 2, 2305, 2309, 7, 11, 2, 2, 2306, 2308, 7, 7, 2, 2, 2307, 2306, 3, 2, 2, 2, 2308, 2311, 3, 2, 2, 2, 2309, 2307, 3, 2, 2, 2, 2309, 2310, 3, 2, 2, 2, 2310, 2312, 3, 2, 2, 2, 2311, 2309, 3, 2, 2, 2, 2312, 2316, 5, 188, 95, 2, 2313, 2315, 7, 7, 2, 2, 2314, 2313, 3, 2, 2, 2, 2315, 2318, 3, 2, 2, 2, 2316, 2314, 3, 2, 2, 2, 2316, 2317, 3, 2, 2, 2, 2317, 2319, 3, 2, 2, 2, 2318, 2316, 3, 2, 2, 2, 2319, 2320, 7, 12, 2, 2, 2320, 191, 3, 2, 2, 2, 2321, 2324, 5, 180, 91, 2, 2322, 2324, 5, 194, 98, 2, 2323, 2321, 3, 2, 2, 2, 2323, 2322, 3, 2, 2, 2, 2324, 193, 3, 2, 2, 2, 2325, 2329, 7, 11, 2, 2, 2326, 2328, 7, 7, 2, 2, 2327, 2326, 3, 2, 2, 2, 2328, 2331, 3, 2, 2, 2, 2329, 2327, 3, 2, 2, 2, 2329, 2330, 3, 2, 2, 2, 2330, 2332, 3, 2, 2, 2, 2331, 2329, 3, 2, 2, 2, 2332, 2336, 5, 192, 97, 2, 2333, 2335, 7, 7, 2, 2, 2334, 2333, 3, 2, 2, 2, 2335, 2338, 3, 2, 2, 2, 2336, 2334, 3, 2, 2, 2, 2336, 2337, 3, 2, 2, 2, 2337, 2339, 3, 2, 2, 2, 2338, 2336, 3, 2, 2, 2, 2339, 2340, 7, 12, 2, 2, 2340, 195, 3, 2, 2, 2, 2341, 2345, 5, 206, 104, 2, 2342, 2345, 5, 198, 100, 2, 2343, 2345, 5, 200, 101, 2, 2344, 2341, 3, 2, 2, 2, 2344, 2342, 3, 2, 2, 2, 2344, 2343, 3, 2, 2, 2, 2345, 197, 3, 2, 2, 2, 2346, 2350, 7, 13, 2, 2, 2347, 2349, 7, 7, 2, 2, 2348, 2347, 3, 2, 2, 2, 2349, 2352, 3, 2, 2, 2, 2350, 2348, 3, 2, 2, 2, 2350, 2351, 3, 2, 2, 2, 2351, 2353, 3, 2, 2, 2, 2352, 2350, 3, 2, 2, 2, 2353, 2370, 5, 152, 77, 2, 2354, 2356, 7, 7, 2, 2, 2355, 2354, 3, 2, 2, 2, 2356, 2359, 3, 2, 2, 2, 2357, 2355, 3, 2, 2, 2, 2357, 2358, 3, 2, 2, 2, 2358, 2360, 3, 2, 2, 2, 2359, 2357, 3, 2, 2, 2, 2360, 2364, 7, 10, 2, 2, 2361, 2363, 7, 7, 2, 2, 2362, 2361, 3, 2, 2, 2, 2363, 2366, 3, 2, 2, 2, 2364, 2362, 3, 2, 2, 2, 2364, 2365, 3, 2, 2, 2, 2365, 2367, 3, 2, 2, 2, 2366, 2364, 3, 2, 2, 2, 2367, 2369, 5, 152, 77, 2, 2368, 2357, 3, 2, 2, 2, 2369, 2372, 3, 2, 2, 2, 2370, 2368, 3, 2, 2, 2, 2370, 2371, 3, 2, 2, 2, 2371, 2380, 3, 2, 2, 2, 2372, 2370, 3, 2, 2, 2, 2373, 2375, 7, 7, 2, 2, 2374, 2373, 3, 2, 2, 2, 2375, 2378, 3, 2, 2, 2, 2376, 2374, 3, 2, 2, 2, 2376, 2377, 3, 2, 2, 2, 2377, 2379, 3, 2, 2, 2, 2378, 2376, 3, 2, 2, 2, 2379, 2381, 7, 10, 2, 2, 2380, 2376, 3, 2, 2, 2, 2380, 2381, 3, 2, 2, 2, 2381, 2385, 3, 2, 2, 2, 2382, 2384, 7, 7, 2, 2, 2383, 2382, 3, 2, 2, 2, 2384, 2387, 3, 2, 2, 2, 2385, 2383, 3, 2, 2, 2, 2385, 2386, 3, 2, 2, 2, 2386, 2388, 3, 2, 2, 2, 2387, 2385, 3, 2, 2, 2, 2388, 2389, 7, 14, 2, 2, 2389, 199, 3, 2, 2, 2, 2390, 2394, 5, 296, 149, 2, 2391, 2393, 7, 7, 2, 2, 2392, 2391, 3, 2, 2, 2, 2393, 2396, 3, 2, 2, 2, 2394, 2392, 3, 2, 2, 2, 2394, 2395, 3, 2, 2, 2, 2395, 2400, 3, 2, 2, 2, 2396, 2394, 3, 2, 2, 2, 2397, 2401, 5, 344, 173, 2, 2398, 2401, 5, 214, 108, 2, 2399, 2401, 7, 74, 2, 2, 2400, 2397, 3, 2, 2, 2, 2400, 2398, 3, 2, 2, 2, 2400, 2399, 3, 2, 2, 2, 2401, 201, 3, 2, 2, 2, 2402, 2404, 5, 206, 104, 2, 2403, 2402, 3, 2, 2, 2, 2403, 2404, 3, 2, 2, 2, 2404, 2410, 3, 2, 2, 2, 2405, 2407, 5, 208, 105, 2, 2406, 2405, 3, 2, 2, 2, 2406, 2407, 3, 2, 2, 2, 2407, 2408, 3, 2, 2, 2, 2408, 2411, 5, 204, 103, 2, 2409, 2411, 5, 208, 105, 2, 2410, 2406, 3, 2, 2, 2, 2410, 2409, 3, 2, 2, 2, 2411, 203, 3, 2, 2, 2, 2412, 2414, 5, 334, 168, 2, 2413, 2412, 3, 2, 2, 2, 2414, 2417, 3, 2, 2, 2, 2415, 2413, 3, 2, 2, 2, 2415, 2416, 3, 2, 2, 2, 2416, 2419, 3, 2, 2, 2, 2417, 2415, 3, 2, 2, 2, 2418, 2420, 5, 132, 67, 2, 2419, 2418, 3, 2, 2, 2, 2419, 2420, 3, 2, 2, 2, 2420, 2424, 3, 2, 2, 2, 2421, 2423, 7, 7, 2, 2, 2422, 2421, 3, 2, 2, 2, 2423, 2426, 3, 2, 2, 2, 2424, 2422, 3, 2, 2, 2, 2424, 2425, 3, 2, 2, 2, 2425, 2427, 3, 2, 2, 2, 2426, 2424, 3, 2, 2, 2, 2427, 2428, 5, 234, 118, 2, 2428, 205, 3, 2, 2, 2, 2429, 2433, 7, 48, 2, 2, 2430, 2432, 7, 7, 2, 2, 2431, 2430, 3, 2, 2, 2, 2432, 2435, 3, 2, 2, 2, 2433, 2431, 3, 2, 2, 2, 2433, 2434, 3, 2, 2, 2, 2434, 2436, 3, 2, 2, 2, 2435, 2433, 3, 2, 2, 2, 2436, 2453, 5, 112, 57, 2, 2437, 2439, 7, 7, 2, 2, 2438, 2437, 3, 2, 2, 2, 2439, 2442, 3, 2, 2, 2, 2440, 2438, 3, 2, 2, 2, 2440, 2441, 3, 2, 2, 2, 2441, 2443, 3, 2, 2, 2, 2442, 2440, 3, 2, 2, 2, 2443, 2447, 7, 10, 2, 2, 2444, 2446, 7, 7, 2, 2, 2445, 2444, 3, 2, 2, 2, 2446, 2449, 3, 2, 2, 2, 2447, 2445, 3, 2, 2, 2, 2447, 2448, 3, 2, 2, 2, 2448, 2450, 3, 2, 2, 2, 2449, 2447, 3, 2, 2, 2, 2450, 2452, 5, 112, 57, 2, 2451, 2440, 3, 2, 2, 2, 2452, 2455, 3, 2, 2, 2, 2453, 2451, 3, 2, 2, 2, 2453, 2454, 3, 2, 2, 2, 2454, 2463, 3, 2, 2, 2, 2455, 2453, 3, 2, 2, 2, 2456, 2458, 7, 7, 2, 2, 2457, 2456, 3, 2, 2, 2, 2458, 2461, 3, 2, 2, 2, 2459, 2457, 3, 2, 2, 2, 2459, 2460, 3, 2, 2, 2, 2460, 2462, 3, 2, 2, 2, 2461, 2459, 3, 2, 2, 2, 2462, 2464, 7, 10, 2, 2, 2463, 2459, 3, 2, 2, 2, 2463, 2464, 3, 2, 2, 2, 2464, 2468, 3, 2, 2, 2, 2465, 2467, 7, 7, 2, 2, 2466, 2465, 3, 2, 2, 2, 2467, 2470, 3, 2, 2, 2, 2468, 2466, 3, 2, 2, 2, 2468, 2469, 3, 2, 2, 2, 2469, 2471, 3, 2, 2, 2, 2470, 2468, 3, 2, 2, 2, 2471, 2472, 7, 49, 2, 2, 2472, 207, 3, 2, 2, 2, 2473, 2477, 7, 11, 2, 2, 2474, 2476, 7, 7, 2, 2, 2475, 2474, 3, 2, 2, 2, 2476, 2479, 3, 2, 2, 2, 2477, 2475, 3, 2, 2, 2, 2477, 2478, 3, 2, 2, 2, 2478, 2515, 3, 2, 2, 2, 2479, 2477, 3, 2, 2, 2, 2480, 2497, 5, 210, 106, 2, 2481, 2483, 7, 7, 2, 2, 2482, 2481, 3, 2, 2, 2, 2483, 2486, 3, 2, 2, 2, 2484, 2482, 3, 2, 2, 2, 2484, 2485, 3, 2, 2, 2, 2485, 2487, 3, 2, 2, 2, 2486, 2484, 3, 2, 2, 2, 2487, 2491, 7, 10, 2, 2, 2488, 2490, 7, 7, 2, 2, 2489, 2488, 3, 2, 2, 2, 2490, 2493, 3, 2, 2, 2, 2491, 2489, 3, 2, 2, 2, 2491, 2492, 3, 2, 2, 2, 2492, 2494, 3, 2, 2, 2, 2493, 2491, 3, 2, 2, 2, 2494, 2496, 5, 210, 106, 2, 2495, 2484, 3, 2, 2, 2, 2496, 2499, 3, 2, 2, 2, 2497, 2495, 3, 2, 2, 2, 2497, 2498, 3, 2, 2, 2, 2498, 2507, 3, 2, 2, 2, 2499, 2497, 3, 2, 2, 2, 2500, 2502, 7, 7, 2, 2, 2501, 2500, 3, 2, 2, 2, 2502, 2505, 3, 2, 2, 2, 2503, 2501, 3, 2, 2, 2, 2503, 2504, 3, 2, 2, 2, 2504, 2506, 3, 2, 2, 2, 2505, 2503, 3, 2, 2, 2, 2506, 2508, 7, 10, 2, 2, 2507, 2503, 3, 2, 2, 2, 2507, 2508, 3, 2, 2, 2, 2508, 2512, 3, 2, 2, 2, 2509, 2511, 7, 7, 2, 2, 2510, 2509, 3, 2, 2, 2, 2511, 2514, 3, 2, 2, 2, 2512, 2510, 3, 2, 2, 2, 2512, 2513, 3, 2, 2, 2, 2513, 2516, 3, 2, 2, 2, 2514, 2512, 3, 2, 2, 2, 2515, 2480, 3, 2, 2, 2, 2515, 2516, 3, 2, 2, 2, 2516, 2517, 3, 2, 2, 2, 2517, 2518, 7, 12, 2, 2, 2518, 209, 3, 2, 2, 2, 2519, 2521, 5, 334, 168, 2, 2520, 2519, 3, 2, 2, 2, 2520, 2521, 3, 2, 2, 2, 2521, 2525, 3, 2, 2, 2, 2522, 2524, 7, 7, 2, 2, 2523, 2522, 3, 2, 2, 2, 2524, 2527, 3, 2, 2, 2, 2525, 2523, 3, 2, 2, 2, 2525, 2526, 3, 2, 2, 2, 2526, 2542, 3, 2, 2, 2, 2527, 2525, 3, 2, 2, 2, 2528, 2532, 5, 344, 173, 2, 2529, 2531, 7, 7, 2, 2, 2530, 2529, 3, 2, 2, 2, 2531, 2534, 3, 2, 2, 2, 2532, 2530, 3, 2, 2, 2, 2532, 2533, 3, 2, 2, 2, 2533, 2535, 3, 2, 2, 2, 2534, 2532, 3, 2, 2, 2, 2535, 2539, 7, 30, 2, 2, 2536, 2538, 7, 7, 2, 2, 2537, 2536, 3, 2, 2, 2, 2538, 2541, 3, 2, 2, 2, 2539, 2537, 3, 2, 2, 2, 2539, 2540, 3, 2, 2, 2, 2540, 2543, 3, 2, 2, 2, 2541, 2539, 3, 2, 2, 2, 2542, 2528, 3, 2, 2, 2, 2542, 2543, 3, 2, 2, 2, 2543, 2545, 3, 2, 2, 2, 2544, 2546, 7, 17, 2, 2, 2545, 2544, 3, 2, 2, 2, 2545, 2546, 3, 2, 2, 2, 2546, 2550, 3, 2, 2, 2, 2547, 2549, 7, 7, 2, 2, 2548, 2547, 3, 2, 2, 2, 2549, 2552, 3, 2, 2, 2, 2550, 2548, 3, 2, 2, 2, 2550, 2551, 3, 2, 2, 2, 2551, 2553, 3, 2, 2, 2, 2552, 2550, 3, 2, 2, 2, 2553, 2554, 5, 152, 77, 2, 2554, 211, 3, 2, 2, 2, 2555, 2570, 5, 214, 108, 2, 2556, 2570, 5, 344, 173, 2, 2557, 2570, 5, 218, 110, 2, 2558, 2570, 5, 220, 111, 2, 2559, 2570, 5, 272, 137, 2, 2560, 2570, 5, 242, 122, 2, 2561, 2570, 5, 244, 123, 2, 2562, 2570, 5, 216, 109, 2, 2563, 2570, 5, 246, 124, 2, 2564, 2570, 5, 248, 125, 2, 2565, 2570, 5, 250, 126, 2, 2566, 2570, 5, 254, 128, 2, 2567, 2570, 5, 264, 133, 2, 2568, 2570, 5, 270, 136, 2, 2569, 2555, 3, 2, 2, 2, 2569, 2556, 3, 2, 2, 2, 2569, 2557, 3, 2, 2, 2, 2569, 2558, 3, 2, 2, 2, 2569, 2559, 3, 2, 2, 2, 2569, 2560, 3, 2, 2, 2, 2569, 2561, 3, 2, 2, 2, 2569, 2562, 3, 2, 2, 2, 2569, 2563, 3, 2, 2, 2, 2569, 2564, 3, 2, 2, 2, 2569, 2565, 3, 2, 2, 2, 2569, 2566, 3, 2, 2, 2, 2569, 2567, 3, 2, 2, 2, 2569, 2568, 3, 2, 2, 2, 2570, 213, 3, 2, 2, 2, 2571, 2575, 7, 11, 2, 2, 2572, 2574, 7, 7, 2, 2, 2573, 2572, 3, 2, 2, 2, 2574, 2577, 3, 2, 2, 2, 2575, 2573, 3, 2, 2, 2, 2575, 2576, 3, 2, 2, 2, 2576, 2578, 3, 2, 2, 2, 2577, 2575, 3, 2, 2, 2, 2578, 2582, 5, 152, 77, 2, 2579, 2581, 7, 7, 2, 2, 2580, 2579, 3, 2, 2, 2, 2581, 2584, 3, 2, 2, 2, 2582, 2580, 3, 2, 2, 2, 2582, 2583, 3, 2, 2, 2, 2583, 2585, 3, 2, 2, 2, 2584, 2582, 3, 2, 2, 2, 2585, 2586, 7, 12, 2, 2, 2586, 215, 3, 2, 2, 2, 2587, 2591, 7, 13, 2, 2, 2588, 2590, 7, 7, 2, 2, 2589, 2588, 3, 2, 2, 2, 2590, 2593, 3, 2, 2, 2, 2591, 2589, 3, 2, 2, 2, 2591, 2592, 3, 2, 2, 2, 2592, 2629, 3, 2, 2, 2, 2593, 2591, 3, 2, 2, 2, 2594, 2611, 5, 152, 77, 2, 2595, 2597, 7, 7, 2, 2, 2596, 2595, 3, 2, 2, 2, 2597, 2600, 3, 2, 2, 2, 2598, 2596, 3, 2, 2, 2, 2598, 2599, 3, 2, 2, 2, 2599, 2601, 3, 2, 2, 2, 2600, 2598, 3, 2, 2, 2, 2601, 2605, 7, 10, 2, 2, 2602, 2604, 7, 7, 2, 2, 2603, 2602, 3, 2, 2, 2, 2604, 2607, 3, 2, 2, 2, 2605, 2603, 3, 2, 2, 2, 2605, 2606, 3, 2, 2, 2, 2606, 2608, 3, 2, 2, 2, 2607, 2605, 3, 2, 2, 2, 2608, 2610, 5, 152, 77, 2, 2609, 2598, 3, 2, 2, 2, 2610, 2613, 3, 2, 2, 2, 2611, 2609, 3, 2, 2, 2, 2611, 2612, 3, 2, 2, 2, 2612, 2621, 3, 2, 2, 2, 2613, 2611, 3, 2, 2, 2, 2614, 2616, 7, 7, 2, 2, 2615, 2614, 3, 2, 2, 2, 2616, 2619, 3, 2, 2, 2, 2617, 2615, 3, 2, 2, 2, 2617, 2618, 3, 2, 2, 2, 2618, 2620, 3, 2, 2, 2, 2619, 2617, 3, 2, 2, 2, 2620, 2622, 7, 10, 2, 2, 2621, 2617, 3, 2, 2, 2, 2621, 2622, 3, 2, 2, 2, 2622, 2626, 3, 2, 2, 2, 2623, 2625, 7, 7, 2, 2, 2624, 2623, 3, 2, 2, 2, 2625, 2628, 3, 2, 2, 2, 2626, 2624, 3, 2, 2, 2, 2626, 2627, 3, 2, 2, 2, 2627, 2630, 3, 2, 2, 2, 2628, 2626, 3, 2, 2, 2, 2629, 2594, 3, 2, 2, 2, 2629, 2630, 3, 2, 2, 2, 2630, 2631, 3, 2, 2, 2, 2631, 2632, 7, 14, 2, 2, 2632, 217, 3, 2, 2, 2, 2633, 2634, 9, 8, 2, 2, 2634, 219, 3, 2, 2, 2, 2635, 2638, 5, 222, 112, 2, 2636, 2638, 5, 224, 113, 2, 2637, 2635, 3, 2, 2, 2, 2637, 2636, 3, 2, 2, 2, 2638, 221, 3, 2, 2, 2, 2639, 2644, 7, 151, 2, 2, 2640, 2643, 5, 226, 114, 2, 2641, 2643, 5, 228, 115, 2, 2642, 2640, 3, 2, 2, 2, 2642, 2641, 3, 2, 2, 2, 2643, 2646, 3, 2, 2, 2, 2644, 2642, 3, 2, 2, 2, 2644, 2645, 3, 2, 2, 2, 2645, 2647, 3, 2, 2, 2, 2646, 2644, 3, 2, 2, 2, 2647, 2648, 7, 160, 2, 2, 2648, 223, 3, 2, 2, 2, 2649, 2655, 7, 152, 2, 2, 2650, 2654, 5, 230, 116, 2, 2651, 2654, 5, 232, 117, 2, 2652, 2654, 7, 166, 2, 2, 2653, 2650, 3, 2, 2, 2, 2653, 2651, 3, 2, 2, 2, 2653, 2652, 3, 2, 2, 2, 2654, 2657, 3, 2, 2, 2, 2655, 2653, 3, 2, 2, 2, 2655, 2656, 3, 2, 2, 2, 2656, 2658, 3, 2, 2, 2, 2657, 2655, 3, 2, 2, 2, 2658, 2659, 7, 165, 2, 2, 2659, 225, 3, 2, 2, 2, 2660, 2661, 9, 9, 2, 2, 2661, 227, 3, 2, 2, 2, 2662, 2666, 7, 164, 2, 2, 2663, 2665, 7, 7, 2, 2, 2664, 2663, 3, 2, 2, 2, 2665, 2668, 3, 2, 2, 2, 2666, 2664, 3, 2, 2, 2, 2666, 2667, 3, 2, 2, 2, 2667, 2669, 3, 2, 2, 2, 2668, 2666, 3, 2, 2, 2, 2669, 2673, 5, 152, 77, 2, 2670, 2672, 7, 7, 2, 2, 2671, 2670, 3, 2, 2, 2, 2672, 2675, 3, 2, 2, 2, 2673, 2671, 3, 2, 2, 2, 2673, 2674, 3, 2, 2, 2, 2674, 2676, 3, 2, 2, 2, 2675, 2673, 3, 2, 2, 2, 2676, 2677, 7, 16, 2, 2, 2677, 229, 3, 2, 2, 2, 2678, 2679, 9, 10, 2, 2, 2679, 231, 3, 2, 2, 2, 2680, 2684, 7, 169, 2, 2, 2681, 2683, 7, 7, 2, 2, 2682, 2681, 3, 2, 2, 2, 2683, 2686, 3, 2, 2, 2, 2684, 2682, 3, 2, 2, 2, 2684, 2685, 3, 2, 2, 2, 2685, 2687, 3, 2, 2, 2, 2686, 2684, 3, 2, 2, 2, 2687, 2691, 5, 152, 77, 2, 2688, 2690, 7, 7, 2, 2, 2689, 2688, 3, 2, 2, 2, 2690, 2693, 3, 2, 2, 2, 2691, 2689, 3, 2, 2, 2, 2691, 2692, 3, 2, 2, 2, 2692, 2694, 3, 2, 2, 2, 2693, 2691, 3, 2, 2, 2, 2694, 2695, 7, 16, 2, 2, 2695, 233, 3, 2, 2, 2, 2696, 2700, 7, 15, 2, 2, 2697, 2699, 7, 7, 2, 2, 2698, 2697, 3, 2, 2, 2, 2699, 2702, 3, 2, 2, 2, 2700, 2698, 3, 2, 2, 2, 2700, 2701, 3, 2, 2, 2, 2701, 2719, 3, 2, 2, 2, 2702, 2700, 3, 2, 2, 2, 2703, 2705, 5, 236, 119, 2, 2704, 2703, 3, 2, 2, 2, 2704, 2705, 3, 2, 2, 2, 2705, 2709, 3, 2, 2, 2, 2706, 2708, 7, 7, 2, 2, 2707, 2706, 3, 2, 2, 2, 2708, 2711, 3, 2, 2, 2, 2709, 2707, 3, 2, 2, 2, 2709, 2710, 3, 2, 2, 2, 2710, 2712, 3, 2, 2, 2, 2711, 2709, 3, 2, 2, 2, 2712, 2716, 7, 36, 2, 2, 2713, 2715, 7, 7, 2, 2, 2714, 2713, 3, 2, 2, 2, 2715, 2718, 3, 2, 2, 2, 2716, 2714, 3, 2, 2, 2, 2716, 2717, 3, 2, 2, 2, 2717, 2720, 3, 2, 2, 2, 2718, 2716, 3, 2, 2, 2, 2719, 2704, 3, 2, 2, 2, 2719, 2720, 3, 2, 2, 2, 2720, 2721, 3, 2, 2, 2, 2721, 2725, 5, 128, 65, 2, 2722, 2724, 7, 7, 2, 2, 2723, 2722, 3, 2, 2, 2, 2724, 2727, 3, 2, 2, 2, 2725, 2723, 3, 2, 2, 2, 2725, 2726, 3, 2, 2, 2, 2726, 2728, 3, 2, 2, 2, 2727, 2725, 3, 2, 2, 2, 2728, 2729, 7, 16, 2, 2, 2729, 235, 3, 2, 2, 2, 2730, 2747, 5, 238, 120, 2, 2731, 2733, 7, 7, 2, 2, 2732, 2731, 3, 2, 2, 2, 2733, 2736, 3, 2, 2, 2, 2734, 2732, 3, 2, 2, 2, 2734, 2735, 3, 2, 2, 2, 2735, 2737, 3, 2, 2, 2, 2736, 2734, 3, 2, 2, 2, 2737, 2741, 7, 10, 2, 2, 2738, 2740, 7, 7, 2, 2, 2739, 2738, 3, 2, 2, 2, 2740, 2743, 3, 2, 2, 2, 2741, 2739, 3, 2, 2, 2, 2741, 2742, 3, 2, 2, 2, 2742, 2744, 3, 2, 2, 2, 2743, 2741, 3, 2, 2, 2, 2744, 2746, 5, 238, 120, 2, 2745, 2734, 3, 2, 2, 2, 2746, 2749, 3, 2, 2, 2, 2747, 2745, 3, 2, 2, 2, 2747, 2748, 3, 2, 2, 2, 2748, 2757, 3, 2, 2, 2, 2749, 2747, 3, 2, 2, 2, 2750, 2752, 7, 7, 2, 2, 2751, 2750, 3, 2, 2, 2, 2752, 2755, 3, 2, 2, 2, 2753, 2751, 3, 2, 2, 2, 2753, 2754, 3, 2, 2, 2, 2754, 2756, 3, 2, 2, 2, 2755, 2753, 3, 2, 2, 2, 2756, 2758, 7, 10, 2, 2, 2757, 2753, 3, 2, 2, 2, 2757, 2758, 3, 2, 2, 2, 2758, 237, 3, 2, 2, 2, 2759, 2778, 5, 68, 35, 2, 2760, 2775, 5, 70, 36, 2, 2761, 2763, 7, 7, 2, 2, 2762, 2761, 3, 2, 2, 2, 2763, 2766, 3, 2, 2, 2, 2764, 2762, 3, 2, 2, 2, 2764, 2765, 3, 2, 2, 2, 2765, 2767, 3, 2, 2, 2, 2766, 2764, 3, 2, 2, 2, 2767, 2771, 7, 28, 2, 2, 2768, 2770, 7, 7, 2, 2, 2769, 2768, 3, 2, 2, 2, 2770, 2773, 3, 2, 2, 2, 2771, 2769, 3, 2, 2, 2, 2771, 2772, 3, 2, 2, 2, 2772, 2774, 3, 2, 2, 2, 2773, 2771, 3, 2, 2, 2, 2774, 2776, 5, 100, 51, 2, 2775, 2764, 3, 2, 2, 2, 2775, 2776, 3, 2, 2, 2, 2776, 2778, 3, 2, 2, 2, 2777, 2759, 3, 2, 2, 2, 2777, 2760, 3, 2, 2, 2, 2778, 239, 3, 2, 2, 2, 2779, 2795, 7, 76, 2, 2, 2780, 2782, 7, 7, 2, 2, 2781, 2780, 3, 2, 2, 2, 2782, 2785, 3, 2, 2, 2, 2783, 2781, 3, 2, 2, 2, 2783, 2784, 3, 2, 2, 2, 2784, 2786, 3, 2, 2, 2, 2785, 2783, 3, 2, 2, 2, 2786, 2790, 5, 100, 51, 2, 2787, 2789, 7, 7, 2, 2, 2788, 2787, 3, 2, 2, 2, 2789, 2792, 3, 2, 2, 2, 2790, 2788, 3, 2, 2, 2, 2790, 2791, 3, 2, 2, 2, 2791, 2793, 3, 2, 2, 2, 2792, 2790, 3, 2, 2, 2, 2793, 2794, 7, 9, 2, 2, 2794, 2796, 3, 2, 2, 2, 2795, 2783, 3, 2, 2, 2, 2795, 2796, 3, 2, 2, 2, 2796, 2800, 3, 2, 2, 2, 2797, 2799, 7, 7, 2, 2, 2798, 2797, 3, 2, 2, 2, 2799, 2802, 3, 2, 2, 2, 2800, 2798, 3, 2, 2, 2, 2800, 2801, 3, 2, 2, 2, 2801, 2803, 3, 2, 2, 2, 2802, 2800, 3, 2, 2, 2, 2803, 2818, 5, 80, 41, 2, 2804, 2806, 7, 7, 2, 2, 2805, 2804, 3, 2, 2, 2, 2806, 2809, 3, 2, 2, 2, 2807, 2805, 3, 2, 2, 2, 2807, 2808, 3, 2, 2, 2, 2808, 2810, 3, 2, 2, 2, 2809, 2807, 3, 2, 2, 2, 2810, 2814, 7, 28, 2, 2, 2811, 2813, 7, 7, 2, 2, 2812, 2811, 3, 2, 2, 2, 2813, 2816, 3, 2, 2, 2, 2814, 2812, 3, 2, 2, 2, 2814, 2815, 3, 2, 2, 2, 2815, 2817, 3, 2, 2, 2, 2816, 2814, 3, 2, 2, 2, 2817, 2819, 5, 100, 51, 2, 2818, 2807, 3, 2, 2, 2, 2818, 2819, 3, 2, 2, 2, 2819, 2827, 3, 2, 2, 2, 2820, 2822, 7, 7, 2, 2, 2821, 2820, 3, 2, 2, 2, 2822, 2825, 3, 2, 2, 2, 2823, 2821, 3, 2, 2, 2, 2823, 2824, 3, 2, 2, 2, 2824, 2826, 3, 2, 2, 2, 2825, 2823, 3, 2, 2, 2, 2826, 2828, 5, 48, 25, 2, 2827, 2823, 3, 2, 2, 2, 2827, 2828, 3, 2, 2, 2, 2828, 2836, 3, 2, 2, 2, 2829, 2831, 7, 7, 2, 2, 2830, 2829, 3, 2, 2, 2, 2831, 2834, 3, 2, 2, 2, 2832, 2830, 3, 2, 2, 2, 2832, 2833, 3, 2, 2, 2, 2833, 2835, 3, 2, 2, 2, 2834, 2832, 3, 2, 2, 2, 2835, 2837, 5, 66, 34, 2, 2836, 2832, 3, 2, 2, 2, 2836, 2837, 3, 2, 2, 2, 2837, 241, 3, 2, 2, 2, 2838, 2841, 5, 234, 118, 2, 2839, 2841, 5, 240, 121, 2, 2840, 2838, 3, 2, 2, 2, 2840, 2839, 3, 2, 2, 2, 2841, 243, 3, 2, 2, 2, 2842, 2863, 7, 77, 2, 2, 2843, 2845, 7, 7, 2, 2, 2844, 2843, 3, 2, 2, 2, 2845, 2848, 3, 2, 2, 2, 2846, 2844, 3, 2, 2, 2, 2846, 2847, 3, 2, 2, 2, 2847, 2849, 3, 2, 2, 2, 2848, 2846, 3, 2, 2, 2, 2849, 2853, 7, 28, 2, 2, 2850, 2852, 7, 7, 2, 2, 2851, 2850, 3, 2, 2, 2, 2852, 2855, 3, 2, 2, 2, 2853, 2851, 3, 2, 2, 2, 2853, 2854, 3, 2, 2, 2, 2854, 2856, 3, 2, 2, 2, 2855, 2853, 3, 2, 2, 2, 2856, 2860, 5, 34, 18, 2, 2857, 2859, 7, 7, 2, 2, 2858, 2857, 3, 2, 2, 2, 2859, 2862, 3, 2, 2, 2, 2860, 2858, 3, 2, 2, 2, 2860, 2861, 3, 2, 2, 2, 2861, 2864, 3, 2, 2, 2, 2862, 2860, 3, 2, 2, 2, 2863, 2846, 3, 2, 2, 2, 2863, 2864, 3, 2, 2, 2, 2864, 2872, 3, 2, 2, 2, 2865, 2867, 7, 7, 2, 2, 2866, 2865, 3, 2, 2, 2, 2867, 2870, 3, 2, 2, 2, 2868, 2866, 3, 2, 2, 2, 2868, 2869, 3, 2, 2, 2, 2869, 2871, 3, 2, 2, 2, 2870, 2868, 3, 2, 2, 2, 2871, 2873, 5, 28, 15, 2, 2872, 2868, 3, 2, 2, 2, 2872, 2873, 3, 2, 2, 2, 2873, 245, 3, 2, 2, 2, 2874, 2875, 9, 11, 2, 2, 2875, 247, 3, 2, 2, 2, 2876, 2893, 7, 86, 2, 2, 2877, 2881, 7, 48, 2, 2, 2878, 2880, 7, 7, 2, 2, 2879, 2878, 3, 2, 2, 2, 2880, 2883, 3, 2, 2, 2, 2881, 2879, 3, 2, 2, 2, 2881, 2882, 3, 2, 2, 2, 2882, 2884, 3, 2, 2, 2, 2883, 2881, 3, 2, 2, 2, 2884, 2888, 5, 100, 51, 2, 2885, 2887, 7, 7, 2, 2, 2886, 2885, 3, 2, 2, 2, 2887, 2890, 3, 2, 2, 2, 2888, 2886, 3, 2, 2, 2, 2888, 2889, 3, 2, 2, 2, 2889, 2891, 3, 2, 2, 2, 2890, 2888, 3, 2, 2, 2, 2891, 2892, 7, 49, 2, 2, 2892, 2894, 3, 2, 2, 2, 2893, 2877, 3, 2, 2, 2, 2893, 2894, 3, 2, 2, 2, 2894, 2897, 3, 2, 2, 2, 2895, 2896, 7, 42, 2, 2, 2896, 2898, 5, 344, 173, 2, 2897, 2895, 3, 2, 2, 2, 2897, 2898, 3, 2, 2, 2, 2898, 2901, 3, 2, 2, 2, 2899, 2901, 7, 62, 2, 2, 2900, 2876, 3, 2, 2, 2, 2900, 2899, 3, 2, 2, 2, 2901, 249, 3, 2, 2, 2, 2902, 2906, 7, 89, 2, 2, 2903, 2905, 7, 7, 2, 2, 2904, 2903, 3, 2, 2, 2, 2905, 2908, 3, 2, 2, 2, 2906, 2904, 3, 2, 2, 2, 2906, 2907, 3, 2, 2, 2, 2907, 2909, 3, 2, 2, 2, 2908, 2906, 3, 2, 2, 2, 2909, 2913, 7, 11, 2, 2, 2910, 2912, 7, 7, 2, 2, 2911, 2910, 3, 2, 2, 2, 2912, 2915, 3, 2, 2, 2, 2913, 2911, 3, 2, 2, 2, 2913, 2914, 3, 2, 2, 2, 2914, 2916, 3, 2, 2, 2, 2915, 2913, 3, 2, 2, 2, 2916, 2920, 5, 152, 77, 2, 2917, 2919, 7, 7, 2, 2, 2918, 2917, 3, 2, 2, 2, 2919, 2922, 3, 2, 2, 2, 2920, 2918, 3, 2, 2, 2, 2920, 2921, 3, 2, 2, 2, 2921, 2923, 3, 2, 2, 2, 2922, 2920, 3, 2, 2, 2, 2923, 2927, 7, 12, 2, 2, 2924, 2926, 7, 7, 2, 2, 2925, 2924, 3, 2, 2, 2, 2926, 2929, 3, 2, 2, 2, 2927, 2925, 3, 2, 2, 2, 2927, 2928, 3, 2, 2, 2, 2928, 2961, 3, 2, 2, 2, 2929, 2927, 3, 2, 2, 2, 2930, 2962, 5, 134, 68, 2, 2931, 2933, 5, 134, 68, 2, 2932, 2931, 3, 2, 2, 2, 2932, 2933, 3, 2, 2, 2, 2933, 2937, 3, 2, 2, 2, 2934, 2936, 7, 7, 2, 2, 2935, 2934, 3, 2, 2, 2, 2936, 2939, 3, 2, 2, 2, 2937, 2935, 3, 2, 2, 2, 2937, 2938, 3, 2, 2, 2, 2938, 2941, 3, 2, 2, 2, 2939, 2937, 3, 2, 2, 2, 2940, 2942, 7, 29, 2, 2, 2941, 2940, 3, 2, 2, 2, 2941, 2942, 3, 2, 2, 2, 2942, 2946, 3, 2, 2, 2, 2943, 2945, 7, 7, 2, 2, 2944, 2943, 3, 2, 2, 2, 2945, 2948, 3, 2, 2, 2, 2946, 2944, 3, 2, 2, 2, 2946, 2947, 3, 2, 2, 2, 2947, 2949, 3, 2, 2, 2, 2948, 2946, 3, 2, 2, 2, 2949, 2953, 7, 90, 2, 2, 2950, 2952, 7, 7, 2, 2, 2951, 2950, 3, 2, 2, 2, 2952, 2955, 3, 2, 2, 2, 2953, 2951, 3, 2, 2, 2, 2953, 2954, 3, 2, 2, 2, 2954, 2958, 3, 2, 2, 2, 2955, 2953, 3, 2, 2, 2, 2956, 2959, 5, 134, 68, 2, 2957, 2959, 7, 29, 2, 2, 2958, 2956, 3, 2, 2, 2, 2958, 2957, 3, 2, 2, 2, 2959, 2962, 3, 2, 2, 2, 2960, 2962, 7, 29, 2, 2, 2961, 2930, 3, 2, 2, 2, 2961, 2932, 3, 2, 2, 2, 2961, 2960, 3, 2, 2, 2, 2962, 251, 3, 2, 2, 2, 2963, 2997, 7, 11, 2, 2, 2964, 2966, 5, 334, 168, 2, 2965, 2964, 3, 2, 2, 2, 2966, 2969, 3, 2, 2, 2, 2967, 2965, 3, 2, 2, 2, 2967, 2968, 3, 2, 2, 2, 2968, 2973, 3, 2, 2, 2, 2969, 2967, 3, 2, 2, 2, 2970, 2972, 7, 7, 2, 2, 2971, 2970, 3, 2, 2, 2, 2972, 2975, 3, 2, 2, 2, 2973, 2971, 3, 2, 2, 2, 2973, 2974, 3, 2, 2, 2, 2974, 2976, 3, 2, 2, 2, 2975, 2973, 3, 2, 2, 2, 2976, 2980, 7, 78, 2, 2, 2977, 2979, 7, 7, 2, 2, 2978, 2977, 3, 2, 2, 2, 2979, 2982, 3, 2, 2, 2, 2980, 2978, 3, 2, 2, 2, 2980, 2981, 3, 2, 2, 2, 2981, 2983, 3, 2, 2, 2, 2982, 2980, 3, 2, 2, 2, 2983, 2987, 5, 68, 35, 2, 2984, 2986, 7, 7, 2, 2, 2985, 2984, 3, 2, 2, 2, 2986, 2989, 3, 2, 2, 2, 2987, 2985, 3, 2, 2, 2, 2987, 2988, 3, 2, 2, 2, 2988, 2990, 3, 2, 2, 2, 2989, 2987, 3, 2, 2, 2, 2990, 2994, 7, 30, 2, 2, 2991, 2993, 7, 7, 2, 2, 2992, 2991, 3, 2, 2, 2, 2993, 2996, 3, 2, 2, 2, 2994, 2992, 3, 2, 2, 2, 2994, 2995, 3, 2, 2, 2, 2995, 2998, 3, 2, 2, 2, 2996, 2994, 3, 2, 2, 2, 2997, 2967, 3, 2, 2, 2, 2997, 2998, 3, 2, 2, 2, 2998, 2999, 3, 2, 2, 2, 2999, 3000, 5, 152, 77, 2, 3000, 3001, 7, 12, 2, 2, 3001, 253, 3, 2, 2, 2, 3002, 3006, 7, 91, 2, 2, 3003, 3005, 7, 7, 2, 2, 3004, 3003, 3, 2, 2, 2, 3005, 3008, 3, 2, 2, 2, 3006, 3004, 3, 2, 2, 2, 3006, 3007, 3, 2, 2, 2, 3007, 3010, 3, 2, 2, 2, 3008, 3006, 3, 2, 2, 2, 3009, 3011, 5, 252, 127, 2, 3010, 3009, 3, 2, 2, 2, 3010, 3011, 3, 2, 2, 2, 3011, 3015, 3, 2, 2, 2, 3012, 3014, 7, 7, 2, 2, 3013, 3012, 3, 2, 2, 2, 3014, 3017, 3, 2, 2, 2, 3015, 3013, 3, 2, 2, 2, 3015, 3016, 3, 2, 2, 2, 3016, 3018, 3, 2, 2, 2, 3017, 3015, 3, 2, 2, 2, 3018, 3022, 7, 15, 2, 2, 3019, 3021, 7, 7, 2, 2, 3020, 3019, 3, 2, 2, 2, 3021, 3024, 3, 2, 2, 2, 3022, 3020, 3, 2, 2, 2, 3022, 3023, 3, 2, 2, 2, 3023, 3034, 3, 2, 2, 2, 3024, 3022, 3, 2, 2, 2, 3025, 3029, 5, 256, 129, 2, 3026, 3028, 7, 7, 2, 2, 3027, 3026, 3, 2, 2, 2, 3028, 3031, 3, 2, 2, 2, 3029, 3027, 3, 2, 2, 2, 3029, 3030, 3, 2, 2, 2, 3030, 3033, 3, 2, 2, 2, 3031, 3029, 3, 2, 2, 2, 3032, 3025, 3, 2, 2, 2, 3033, 3036, 3, 2, 2, 2, 3034, 3032, 3, 2, 2, 2, 3034, 3035, 3, 2, 2, 2, 3035, 3040, 3, 2, 2, 2, 3036, 3034, 3, 2, 2, 2, 3037, 3039, 7, 7, 2, 2, 3038, 3037, 3, 2, 2, 2, 3039, 3042, 3, 2, 2, 2, 3040, 3038, 3, 2, 2, 2, 3040, 3041, 3, 2, 2, 2, 3041, 3043, 3, 2, 2, 2, 3042, 3040, 3, 2, 2, 2, 3043, 3044, 7, 16, 2, 2, 3044, 255, 3, 2, 2, 2, 3045, 3062, 5, 258, 130, 2, 3046, 3048, 7, 7, 2, 2, 3047, 3046, 3, 2, 2, 2, 3048, 3051, 3, 2, 2, 2, 3049, 3047, 3, 2, 2, 2, 3049, 3050, 3, 2, 2, 2, 3050, 3052, 3, 2, 2, 2, 3051, 3049, 3, 2, 2, 2, 3052, 3056, 7, 10, 2, 2, 3053, 3055, 7, 7, 2, 2, 3054, 3053, 3, 2, 2, 2, 3055, 3058, 3, 2, 2, 2, 3056, 3054, 3, 2, 2, 2, 3056, 3057, 3, 2, 2, 2, 3057, 3059, 3, 2, 2, 2, 3058, 3056, 3, 2, 2, 2, 3059, 3061, 5, 258, 130, 2, 3060, 3049, 3, 2, 2, 2, 3061, 3064, 3, 2, 2, 2, 3062, 3060, 3, 2, 2, 2, 3062, 3063, 3, 2, 2, 2, 3063, 3072, 3, 2, 2, 2, 3064, 3062, 3, 2, 2, 2, 3065, 3067, 7, 7, 2, 2, 3066, 3065, 3, 2, 2, 2, 3067, 3070, 3, 2, 2, 2, 3068, 3066, 3, 2, 2, 2, 3068, 3069, 3, 2, 2, 2, 3069, 3071, 3, 2, 2, 2, 3070, 3068, 3, 2, 2, 2, 3071, 3073, 7, 10, 2, 2, 3072, 3068, 3, 2, 2, 2, 3072, 3073, 3, 2, 2, 2, 3073, 3077, 3, 2, 2, 2, 3074, 3076, 7, 7, 2, 2, 3075, 3074, 3, 2, 2, 2, 3076, 3079, 3, 2, 2, 2, 3077, 3075, 3, 2, 2, 2, 3077, 3078, 3, 2, 2, 2, 3078, 3080, 3, 2, 2, 2, 3079, 3077, 3, 2, 2, 2, 3080, 3084, 7, 36, 2, 2, 3081, 3083, 7, 7, 2, 2, 3082, 3081, 3, 2, 2, 2, 3083, 3086, 3, 2, 2, 2, 3084, 3082, 3, 2, 2, 2, 3084, 3085, 3, 2, 2, 2, 3085, 3087, 3, 2, 2, 2, 3086, 3084, 3, 2, 2, 2, 3087, 3089, 5, 134, 68, 2, 3088, 3090, 5, 148, 75, 2, 3089, 3088, 3, 2, 2, 2, 3089, 3090, 3, 2, 2, 2, 3090, 3110, 3, 2, 2, 2, 3091, 3095, 7, 90, 2, 2, 3092, 3094, 7, 7, 2, 2, 3093, 3092, 3, 2, 2, 2, 3094, 3097, 3, 2, 2, 2, 3095, 3093, 3, 2, 2, 2, 3095, 3096, 3, 2, 2, 2, 3096, 3098, 3, 2, 2, 2, 3097, 3095, 3, 2, 2, 2, 3098, 3102, 7, 36, 2, 2, 3099, 3101, 7, 7, 2, 2, 3100, 3099, 3, 2, 2, 2, 3101, 3104, 3, 2, 2, 2, 3102, 3100, 3, 2, 2, 2, 3102, 3103, 3, 2, 2, 2, 3103, 3105, 3, 2, 2, 2, 3104, 3102, 3, 2, 2, 2, 3105, 3107, 5, 134, 68, 2, 3106, 3108, 5, 148, 75, 2, 3107, 3106, 3, 2, 2, 2, 3107, 3108, 3, 2, 2, 2, 3108, 3110, 3, 2, 2, 2, 3109, 3045, 3, 2, 2, 2, 3109, 3091, 3, 2, 2, 2, 3110, 257, 3, 2, 2, 2, 3111, 3115, 5, 152, 77, 2, 3112, 3115, 5, 260, 131, 2, 3113, 3115, 5, 262, 132, 2, 3114, 3111, 3, 2, 2, 2, 3114, 3112, 3, 2, 2, 2, 3114, 3113, 3, 2, 2, 2, 3115, 259, 3, 2, 2, 2, 3116, 3120, 5, 280, 141, 2, 3117, 3119, 7, 7, 2, 2, 3118, 3117, 3, 2, 2, 2, 3119, 3122, 3, 2, 2, 2, 3120, 3118, 3, 2, 2, 2, 3120, 3121, 3, 2, 2, 2, 3121, 3123, 3, 2, 2, 2, 3122, 3120, 3, 2, 2, 2, 3123, 3124, 5, 152, 77, 2, 3124, 261, 3, 2, 2, 2, 3125, 3129, 5, 282, 142, 2, 3126, 3128, 7, 7, 2, 2, 3127, 3126, 3, 2, 2, 2, 3128, 3131, 3, 2, 2, 2, 3129, 3127, 3, 2, 2, 2, 3129, 3130, 3, 2, 2, 2, 3130, 3132, 3, 2, 2, 2, 3131, 3129, 3, 2, 2, 2, 3132, 3133, 5, 100, 51, 2, 3133, 263, 3, 2, 2, 2, 3134, 3138, 7, 92, 2, 2, 3135, 3137, 7, 7, 2, 2, 3136, 3135, 3, 2, 2, 2, 3137, 3140, 3, 2, 2, 2, 3138, 3136, 3, 2, 2, 2, 3138, 3139, 3, 2, 2, 2, 3139, 3141, 3, 2, 2, 2, 3140, 3138, 3, 2, 2, 2, 3141, 3169, 5, 136, 69, 2, 3142, 3144, 7, 7, 2, 2, 3143, 3142, 3, 2, 2, 2, 3144, 3147, 3, 2, 2, 2, 3145, 3143, 3, 2, 2, 2, 3145, 3146, 3, 2, 2, 2, 3146, 3148, 3, 2, 2, 2, 3147, 3145, 3, 2, 2, 2, 3148, 3150, 5, 266, 134, 2, 3149, 3145, 3, 2, 2, 2, 3150, 3151, 3, 2, 2, 2, 3151, 3149, 3, 2, 2, 2, 3151, 3152, 3, 2, 2, 2, 3152, 3160, 3, 2, 2, 2, 3153, 3155, 7, 7, 2, 2, 3154, 3153, 3, 2, 2, 2, 3155, 3158, 3, 2, 2, 2, 3156, 3154, 3, 2, 2, 2, 3156, 3157, 3, 2, 2, 2, 3157, 3159, 3, 2, 2, 2, 3158, 3156, 3, 2, 2, 2, 3159, 3161, 5, 268, 135, 2, 3160, 3156, 3, 2, 2, 2, 3160, 3161, 3, 2, 2, 2, 3161, 3170, 3, 2, 2, 2, 3162, 3164, 7, 7, 2, 2, 3163, 3162, 3, 2, 2, 2, 3164, 3167, 3, 2, 2, 2, 3165, 3163, 3, 2, 2, 2, 3165, 3166, 3, 2, 2, 2, 3166, 3168, 3, 2, 2, 2, 3167, 3165, 3, 2, 2, 2, 3168, 3170, 5, 268, 135, 2, 3169, 3149, 3, 2, 2, 2, 3169, 3165, 3, 2, 2, 2, 3170, 265, 3, 2, 2, 2, 3171, 3175, 7, 93, 2, 2, 3172, 3174, 7, 7, 2, 2, 3173, 3172, 3, 2, 2, 2, 3174, 3177, 3, 2, 2, 2, 3175, 3173, 3, 2, 2, 2, 3175, 3176, 3, 2, 2, 2, 3176, 3178, 3, 2, 2, 2, 3177, 3175, 3, 2, 2, 2, 3178, 3182, 7, 11, 2, 2, 3179, 3181, 5, 334, 168, 2, 3180, 3179, 3, 2, 2, 2, 3181, 3184, 3, 2, 2, 2, 3182, 3180, 3, 2, 2, 2, 3182, 3183, 3, 2, 2, 2, 3183, 3185, 3, 2, 2, 2, 3184, 3182, 3, 2, 2, 2, 3185, 3186, 5, 344, 173, 2, 3186, 3187, 7, 28, 2, 2, 3187, 3195, 5, 100, 51, 2, 3188, 3190, 7, 7, 2, 2, 3189, 3188, 3, 2, 2, 2, 3190, 3193, 3, 2, 2, 2, 3191, 3189, 3, 2, 2, 2, 3191, 3192, 3, 2, 2, 2, 3192, 3194, 3, 2, 2, 2, 3193, 3191, 3, 2, 2, 2, 3194, 3196, 7, 10, 2, 2, 3195, 3191, 3, 2, 2, 2, 3195, 3196, 3, 2, 2, 2, 3196, 3197, 3, 2, 2, 2, 3197, 3201, 7, 12, 2, 2, 3198, 3200, 7, 7, 2, 2, 3199, 3198, 3, 2, 2, 2, 3200, 3203, 3, 2, 2, 2, 3201, 3199, 3, 2, 2, 2, 3201, 3202, 3, 2, 2, 2, 3202, 3204, 3, 2, 2, 2, 3203, 3201, 3, 2, 2, 2, 3204, 3205, 5, 136, 69, 2, 3205, 267, 3, 2, 2, 2, 3206, 3210, 7, 94, 2, 2, 3207, 3209, 7, 7, 2, 2, 3208, 3207, 3, 2, 2, 2, 3209, 3212, 3, 2, 2, 2, 3210, 3208, 3, 2, 2, 2, 3210, 3211, 3, 2, 2, 2, 3211, 3213, 3, 2, 2, 2, 3212, 3210, 3, 2, 2, 2, 3213, 3214, 5, 136, 69, 2, 3214, 269, 3, 2, 2, 2, 3215, 3219, 7, 98, 2, 2, 3216, 3218, 7, 7, 2, 2, 3217, 3216, 3, 2, 2, 2, 3218, 3221, 3, 2, 2, 2, 3219, 3217, 3, 2, 2, 2, 3219, 3220, 3, 2, 2, 2, 3220, 3222, 3, 2, 2, 2, 3221, 3219, 3, 2, 2, 2, 3222, 3232, 5, 152, 77, 2, 3223, 3225, 9, 12, 2, 2, 3224, 3226, 5, 152, 77, 2, 3225, 3224, 3, 2, 2, 2, 3225, 3226, 3, 2, 2, 2, 3226, 3232, 3, 2, 2, 2, 3227, 3232, 7, 100, 2, 2, 3228, 3232, 7, 59, 2, 2, 3229, 3232, 7, 101, 2, 2, 3230, 3232, 7, 60, 2, 2, 3231, 3215, 3, 2, 2, 2, 3231, 3223, 3, 2, 2, 2, 3231, 3227, 3, 2, 2, 2, 3231, 3228, 3, 2, 2, 2, 3231, 3229, 3, 2, 2, 2, 3231, 3230, 3, 2, 2, 2, 3232, 271, 3, 2, 2, 2, 3233, 3235, 5, 124, 63, 2, 3234, 3233, 3, 2, 2, 2, 3234, 3235, 3, 2, 2, 2, 3235, 3236, 3, 2, 2, 2, 3236, 3240, 7, 39, 2, 2, 3237, 3239, 7, 7, 2, 2, 3238, 3237, 3, 2, 2, 2, 3239, 3242, 3, 2, 2, 2, 3240, 3238, 3, 2, 2, 2, 3240, 3241, 3, 2, 2, 2, 3241, 3245, 3, 2, 2, 2, 3242, 3240, 3, 2, 2, 2, 3243, 3246, 5, 344, 173, 2, 3244, 3246, 7, 74, 2, 2, 3245, 3243, 3, 2, 2, 2, 3245, 3244, 3, 2, 2, 2, 3246, 273, 3, 2, 2, 2, 3247, 3248, 9, 13, 2, 2, 3248, 275, 3, 2, 2, 2, 3249, 3250, 9, 14, 2, 2, 3250, 277, 3, 2, 2, 2, 3251, 3252, 9, 15, 2, 2, 3252, 279, 3, 2, 2, 2, 3253, 3254, 9, 16, 2, 2, 3254, 281, 3, 2, 2, 2, 3255, 3256, 9, 17, 2, 2, 3256, 283, 3, 2, 2, 2, 3257, 3258, 9, 18, 2, 2, 3258, 285, 3, 2, 2, 2, 3259, 3260, 9, 19, 2, 2, 3260, 287, 3, 2, 2, 2, 3261, 3262, 9, 20, 2, 2, 3262, 289, 3, 2, 2, 2, 3263, 3269, 7, 22, 2, 2, 3264, 3269, 7, 23, 2, 2, 3265, 3269, 7, 21, 2, 2, 3266, 3269, 7, 20, 2, 2, 3267, 3269, 5, 294, 148, 2, 3268, 3263, 3, 2, 2, 2, 3268, 3264, 3, 2, 2, 2, 3268, 3265, 3, 2, 2, 2, 3268, 3266, 3, 2, 2, 2, 3268, 3267, 3, 2, 2, 2, 3269, 291, 3, 2, 2, 2, 3270, 3275, 7, 22, 2, 2, 3271, 3275, 7, 23, 2, 2, 3272, 3273, 7, 27, 2, 2, 3273, 3275, 5, 294, 148, 2, 3274, 3270, 3, 2, 2, 2, 3274, 3271, 3, 2, 2, 2, 3274, 3272, 3, 2, 2, 2, 3275, 293, 3, 2, 2, 2, 3276, 3277, 9, 21, 2, 2, 3277, 295, 3, 2, 2, 2, 3278, 3280, 7, 7, 2, 2, 3279, 3278, 3, 2, 2, 2, 3280, 3283, 3, 2, 2, 2, 3281, 3279, 3, 2, 2, 2, 3281, 3282, 3, 2, 2, 2, 3282, 3284, 3, 2, 2, 2, 3283, 3281, 3, 2, 2, 2, 3284, 3294, 7, 9, 2, 2, 3285, 3287, 7, 7, 2, 2, 3286, 3285, 3, 2, 2, 2, 3287, 3290, 3, 2, 2, 2, 3288, 3286, 3, 2, 2, 2, 3288, 3289, 3, 2, 2, 2, 3289, 3291, 3, 2, 2, 2, 3290, 3288, 3, 2, 2, 2, 3291, 3294, 5, 298, 150, 2, 3292, 3294, 7, 39, 2, 2, 3293, 3281, 3, 2, 2, 2, 3293, 3288, 3, 2, 2, 2, 3293, 3292, 3, 2, 2, 2, 3294, 297, 3, 2, 2, 2, 3295, 3296, 7, 47, 2, 2, 3296, 3297, 7, 9, 2, 2, 3297, 299, 3, 2, 2, 2, 3298, 3301, 5, 334, 168, 2, 3299, 3301, 5, 304, 153, 2, 3300, 3298, 3, 2, 2, 2, 3300, 3299, 3, 2, 2, 2, 3301, 3302, 3, 2, 2, 2, 3302, 3300, 3, 2, 2, 2, 3302, 3303, 3, 2, 2, 2, 3303, 301, 3, 2, 2, 2, 3304, 3307, 5, 334, 168, 2, 3305, 3307, 5, 328, 165, 2, 3306, 3304, 3, 2, 2, 2, 3306, 3305, 3, 2, 2, 2, 3307, 3308, 3, 2, 2, 2, 3308, 3306, 3, 2, 2, 2, 3308, 3309, 3, 2, 2, 2, 3309, 303, 3, 2, 2, 2, 3310, 3319, 5, 310, 156, 2, 3311, 3319, 5, 312, 157, 2, 3312, 3319, 5, 314, 158, 2, 3313, 3319, 5, 322, 162, 2, 3314, 3319, 5, 324, 163, 2, 3315, 3319, 5, 326, 164, 2, 3316, 3319, 5, 328, 165, 2, 3317, 3319, 5, 332, 167, 2, 3318, 3310, 3, 2, 2, 2, 3318, 3311, 3, 2, 2, 2, 3318, 3312, 3, 2, 2, 2, 3318, 3313, 3, 2, 2, 2, 3318, 3314, 3, 2, 2, 2, 3318, 3315, 3, 2, 2, 2, 3318, 3316, 3, 2, 2, 2, 3318, 3317, 3, 2, 2, 2, 3319, 3323, 3, 2, 2, 2, 3320, 3322, 7, 7, 2, 2, 3321, 3320, 3, 2, 2, 2, 3322, 3325, 3, 2, 2, 2, 3323, 3321, 3, 2, 2, 2, 3323, 3324, 3, 2, 2, 2, 3324, 305, 3, 2, 2, 2, 3325, 3323, 3, 2, 2, 2, 3326, 3328, 5, 308, 155, 2, 3327, 3326, 3, 2, 2, 2, 3328, 3329, 3, 2, 2, 2, 3329, 3327, 3, 2, 2, 2, 3329, 3330, 3, 2, 2, 2, 3330, 307, 3, 2, 2, 2, 3331, 3340, 5, 334, 168, 2, 3332, 3336, 7, 124, 2, 2, 3333, 3335, 7, 7, 2, 2, 3334, 3333, 3, 2, 2, 2, 3335, 3338, 3, 2, 2, 2, 3336, 3334, 3, 2, 2, 2, 3336, 3337, 3, 2, 2, 2, 3337, 3340, 3, 2, 2, 2, 3338, 3336, 3, 2, 2, 2, 3339, 3331, 3, 2, 2, 2, 3339, 3332, 3, 2, 2, 2, 3340, 309, 3, 2, 2, 2, 3341, 3342, 9, 22, 2, 2, 3342, 311, 3, 2, 2, 2, 3343, 3344, 9, 23, 2, 2, 3344, 313, 3, 2, 2, 2, 3345, 3346, 9, 24, 2, 2, 3346, 315, 3, 2, 2, 2, 3347, 3348, 9, 25, 2, 2, 3348, 317, 3, 2, 2, 2, 3349, 3351, 5, 320, 161, 2, 3350, 3349, 3, 2, 2, 2, 3351, 3352, 3, 2, 2, 2, 3352, 3350, 3, 2, 2, 2, 3352, 3353, 3, 2, 2, 2, 3353, 319, 3, 2, 2, 2, 3354, 3358, 5, 330, 166, 2, 3355, 3357, 7, 7, 2, 2, 3356, 3355, 3, 2, 2, 2, 3357, 3360, 3, 2, 2, 2, 3358, 3356, 3, 2, 2, 2, 3358, 3359, 3, 2, 2, 2, 3359, 3370, 3, 2, 2, 2, 3360, 3358, 3, 2, 2, 2, 3361, 3365, 5, 316, 159, 2, 3362, 3364, 7, 7, 2, 2, 3363, 3362, 3, 2, 2, 2, 3364, 3367, 3, 2, 2, 2, 3365, 3363, 3, 2, 2, 2, 3365, 3366, 3, 2, 2, 2, 3366, 3370, 3, 2, 2, 2, 3367, 3365, 3, 2, 2, 2, 3368, 3370, 5, 334, 168, 2, 3369, 3354, 3, 2, 2, 2, 3369, 3361, 3, 2, 2, 2, 3369, 3368, 3, 2, 2, 2, 3370, 321, 3, 2, 2, 2, 3371, 3372, 9, 26, 2, 2, 3372, 323, 3, 2, 2, 2, 3373, 3374, 7, 129, 2, 2, 3374, 325, 3, 2, 2, 2, 3375, 3376, 9, 27, 2, 2, 3376, 327, 3, 2, 2, 2, 3377, 3378, 9, 28, 2, 2, 3378, 329, 3, 2, 2, 2, 3379, 3380, 7, 134, 2, 2, 3380, 331, 3, 2, 2, 2, 3381, 3382, 9, 29, 2, 2, 3382, 333, 3, 2, 2, 2, 3383, 3386, 5, 336, 169, 2, 3384, 3386, 5, 338, 170, 2, 3385, 3383, 3, 2, 2, 2, 3385, 3384, 3, 2, 2, 2, 3386, 3390, 3, 2, 2, 2, 3387, 3389, 7, 7, 2, 2, 3388, 3387, 3, 2, 2, 2, 3389, 3392, 3, 2, 2, 2, 3390, 3388, 3, 2, 2, 2, 3390, 3391, 3, 2, 2, 2, 3391, 335, 3, 2, 2, 2, 3392, 3390, 3, 2, 2, 2, 3393, 3397, 5, 340, 171, 2, 3394, 3396, 7, 7, 2, 2, 3395, 3394, 3, 2, 2, 2, 3396, 3399, 3, 2, 2, 2, 3397, 3395, 3, 2, 2, 2, 3397, 3398, 3, 2, 2, 2, 3398, 3403, 3, 2, 2, 2, 3399, 3397, 3, 2, 2, 2, 3400, 3403, 7, 42, 2, 2, 3401, 3403, 7, 44, 2, 2, 3402, 3393, 3, 2, 2, 2, 3402, 3400, 3, 2, 2, 2, 3402, 3401, 3, 2, 2, 2, 3403, 3404, 3, 2, 2, 2, 3404, 3405, 5, 342, 172, 2, 3405, 337, 3, 2, 2, 2, 3406, 3410, 5, 340, 171, 2, 3407, 3409, 7, 7, 2, 2, 3408, 3407, 3, 2, 2, 2, 3409, 3412, 3, 2, 2, 2, 3410, 3408, 3, 2, 2, 2, 3410, 3411, 3, 2, 2, 2, 3411, 3416, 3, 2, 2, 2, 3412, 3410, 3, 2, 2, 2, 3413, 3416, 7, 42, 2, 2, 3414, 3416, 7, 44, 2, 2, 3415, 3406, 3, 2, 2, 2, 3415, 3413, 3, 2, 2, 2, 3415, 3414, 3, 2, 2, 2, 3416, 3417, 3, 2, 2, 2, 3417, 3419, 7, 13, 2, 2, 3418, 3420, 5, 342, 172, 2, 3419, 3418, 3, 2, 2, 2, 3420, 3421, 3, 2, 2, 2, 3421, 3419, 3, 2, 2, 2, 3421, 3422, 3, 2, 2, 2, 3422, 3423, 3, 2, 2, 2, 3423, 3424, 7, 14, 2, 2, 3424, 339, 3, 2, 2, 2, 3425, 3426, 9, 2, 2, 2, 3426, 3430, 9, 30, 2, 2, 3427, 3429, 7, 7, 2, 2, 3428, 3427, 3, 2, 2, 2, 3429, 3432, 3, 2, 2, 2, 3430, 3428, 3, 2, 2, 2, 3430, 3431, 3, 2, 2, 2, 3431, 3433, 3, 2, 2, 2, 3432, 3430, 3, 2, 2, 2, 3433, 3434, 7, 28, 2, 2, 3434, 341, 3, 2, 2, 2, 3435, 3438, 5, 38, 20, 2, 3436, 3438, 5, 108, 55, 2, 3437, 3435, 3, 2, 2, 2, 3437, 3436, 3, 2, 2, 2, 3438, 343, 3, 2, 2, 2, 3439, 3440, 9, 31, 2, 2, 3440, 345, 3, 2, 2, 2, 3441, 3452, 5, 344, 173, 2, 3442, 3444, 7, 7, 2, 2, 3443, 3442, 3, 2, 2, 2, 3444, 3447, 3, 2, 2, 2, 3445, 3443, 3, 2, 2, 2, 3445, 3446, 3, 2, 2, 2, 3446, 3448, 3, 2, 2, 2, 3447, 3445, 3, 2, 2, 2, 3448, 3449, 7, 9, 2, 2, 3449, 3451, 5, 344, 173, 2, 3450, 3445, 3, 2, 2, 2, 3451, 3454, 3, 2, 2, 2, 3452, 3450, 3, 2, 2, 2, 3452, 3453, 3, 2, 2, 2, 3453, 347, 3, 2, 2, 2, 3454, 3452, 3, 2, 2, 2, 532, 349, 354, 360, 368, 374, 379, 385, 395, 404, 411, 418, 425, 430, 435, 441, 443, 448, 456, 459, 466, 469, 475, 482, 486, 491, 498, 508, 511, 518, 521, 524, 529, 536, 540, 545, 549, 554, 561, 565, 570, 574, 579, 586, 590, 593, 599, 602, 610, 617, 626, 633, 640, 646, 652, 656, 658, 663, 669, 672, 677, 685, 692, 699, 703, 709, 716, 722, 729, 737, 743, 750, 755, 762, 771, 778, 785, 791, 797, 801, 806, 812, 817, 824, 831, 835, 841, 848, 855, 861, 867, 874, 881, 888, 892, 899, 905, 911, 917, 924, 928, 933, 940, 944, 949, 953, 959, 966, 973, 979, 985, 989, 991, 996, 1002, 1008, 1015, 1019, 1022, 1028, 1032, 1037, 1044, 1049, 1054, 1061, 1068, 1075, 1079, 1084, 1088, 1093, 1097, 1104, 1108, 1113, 1119, 1126, 1133, 1137, 1143, 1150, 1157, 1163, 1169, 1173, 1178, 1184, 1190, 1194, 1199, 1206, 1211, 1216, 1221, 1226, 1230, 1235, 1242, 1247, 1249, 1254, 1257, 1262, 1266, 1271, 1275, 1278, 1281, 1286, 1290, 1293, 1295, 1301, 1307, 1313, 1320, 1327, 1334, 1338, 1343, 1347, 1350, 1356, 1363, 1370, 1374, 1379, 1386, 1393, 1397, 1402, 1407, 1413, 1420, 1427, 1433, 1439, 1443, 1445, 1450, 1456, 1462, 1469, 1473, 1479, 1486, 1490, 1496, 1503, 1509, 1515, 1522, 1529, 1533, 1538, 1542, 1545, 1551, 1558, 1565, 1569, 1574, 1578, 1584, 1593, 1597, 1602, 1609, 1613, 1618, 1627, 1634, 1640, 1646, 1650, 1656, 1659, 1665, 1669, 1674, 1678, 1681, 1687, 1691, 1695, 1700, 1706, 1714, 1721, 1727, 1734, 1738, 1741, 1745, 1750, 1756, 1760, 1766, 1773, 1776, 1782, 1789, 1798, 1803, 1808, 1815, 1820, 1824, 1830, 1834, 1839, 1848, 1855, 1861, 1866, 1872, 1877, 1882, 1893, 1896, 1899, 1903, 1905, 1912, 1919, 1924, 1930, 1937, 1945, 1951, 1958, 1963, 1971, 1975, 1981, 1990, 1995, 2001, 2005, 2010, 2017, 2030, 2035, 2044, 2048, 2053, 2056, 2064, 2071, 2077, 2084, 2091, 2097, 2105, 2112, 2120, 2127, 2134, 2142, 2151, 2156, 2158, 2165, 2172, 2179, 2190, 2197, 2205, 2211, 2219, 2226, 2234, 2241, 2248, 2255, 2262, 2268, 2279, 2282, 2288, 2296, 2303, 2309, 2316, 2323, 2329, 2336, 2344, 2350, 2357, 2364, 2370, 2376, 2380, 2385, 2394, 2400, 2403, 2406, 2410, 2415, 2419, 2424, 2433, 2440, 2447, 2453, 2459, 2463, 2468, 2477, 2484, 2491, 2497, 2503, 2507, 2512, 2515, 2520, 2525, 2532, 2539, 2542, 2545, 2550, 2569, 2575, 2582, 2591, 2598, 2605, 2611, 2617, 2621, 2626, 2629, 2637, 2642, 2644, 2653, 2655, 2666, 2673, 2684, 2691, 2700, 2704, 2709, 2716, 2719, 2725, 2734, 2741, 2747, 2753, 2757, 2764, 2771, 2775, 2777, 2783, 2790, 2795, 2800, 2807, 2814, 2818, 2823, 2827, 2832, 2836, 2840, 2846, 2853, 2860, 2863, 2868, 2872, 2881, 2888, 2893, 2897, 2900, 2906, 2913, 2920, 2927, 2932, 2937, 2941, 2946, 2953, 2958, 2961, 2967, 2973, 2980, 2987, 2994, 2997, 3006, 3010, 3015, 3022, 3029, 3034, 3040, 3049, 3056, 3062, 3068, 3072, 3077, 3084, 3089, 3095, 3102, 3107, 3109, 3114, 3120, 3129, 3138, 3145, 3151, 3156, 3160, 3165, 3169, 3175, 3182, 3191, 3195, 3201, 3210, 3219, 3225, 3231, 3234, 3240, 3245, 3268, 3274, 3281, 3288, 3293, 3300, 3302, 3306, 3308, 3318, 3323, 3329, 3336, 3339, 3352, 3358, 3365, 3369, 3385, 3390, 3397, 3402, 3410, 3415, 3421, 3430, 3437, 3445, 3452] \ No newline at end of file diff --git a/lexers/src/main/java/com/itsaky/androidide/lexers/kotlin/KotlinParser.java b/lexers/src/main/java/com/itsaky/androidide/lexers/kotlin/KotlinParser.java new file mode 100644 index 000000000..1c63aa378 --- /dev/null +++ b/lexers/src/main/java/com/itsaky/androidide/lexers/kotlin/KotlinParser.java @@ -0,0 +1,19558 @@ +// Generated from KotlinParser.g4 by ANTLR 4.9.2 +package com.itsaky.androidide.lexers.kotlin; +import org.antlr.v4.runtime.atn.*; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.*; +import org.antlr.v4.runtime.misc.*; +import org.antlr.v4.runtime.tree.*; +import java.util.List; +import java.util.Iterator; +import java.util.ArrayList; + +@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"}) +public class KotlinParser extends Parser { + static { RuntimeMetaData.checkVersion("4.9.2", RuntimeMetaData.VERSION); } + + protected static final DFA[] _decisionToDFA; + protected static final PredictionContextCache _sharedContextCache = + new PredictionContextCache(); + public static final int + ShebangLine=1, DelimitedComment=2, LineComment=3, WS=4, NL=5, RESERVED=6, + DOT=7, COMMA=8, LPAREN=9, RPAREN=10, LSQUARE=11, RSQUARE=12, LCURL=13, + RCURL=14, MULT=15, MOD=16, DIV=17, ADD=18, SUB=19, INCR=20, DECR=21, CONJ=22, + DISJ=23, EXCL_WS=24, EXCL_NO_WS=25, COLON=26, SEMICOLON=27, ASSIGNMENT=28, + ADD_ASSIGNMENT=29, SUB_ASSIGNMENT=30, MULT_ASSIGNMENT=31, DIV_ASSIGNMENT=32, + MOD_ASSIGNMENT=33, ARROW=34, DOUBLE_ARROW=35, RANGE=36, COLONCOLON=37, + DOUBLE_SEMICOLON=38, HASH=39, AT_NO_WS=40, AT_POST_WS=41, AT_PRE_WS=42, + AT_BOTH_WS=43, QUEST_WS=44, QUEST_NO_WS=45, LANGLE=46, RANGLE=47, LE=48, + GE=49, EXCL_EQ=50, EXCL_EQEQ=51, AS_SAFE=52, EQEQ=53, EQEQEQ=54, SINGLE_QUOTE=55, + RETURN_AT=56, CONTINUE_AT=57, BREAK_AT=58, THIS_AT=59, SUPER_AT=60, FILE=61, + FIELD=62, PROPERTY=63, GET=64, SET=65, RECEIVER=66, PARAM=67, SETPARAM=68, + DELEGATE=69, PACKAGE=70, IMPORT=71, CLASS=72, INTERFACE=73, FUN=74, OBJECT=75, + VAL=76, VAR=77, TYPE_ALIAS=78, CONSTRUCTOR=79, BY=80, COMPANION=81, INIT=82, + THIS=83, SUPER=84, TYPEOF=85, WHERE=86, IF=87, ELSE=88, WHEN=89, TRY=90, + CATCH=91, FINALLY=92, FOR=93, DO=94, WHILE=95, THROW=96, RETURN=97, CONTINUE=98, + BREAK=99, AS=100, IS=101, IN=102, NOT_IS=103, NOT_IN=104, OUT=105, DYNAMIC=106, + PUBLIC=107, PRIVATE=108, PROTECTED=109, INTERNAL=110, ENUM=111, SEALED=112, + ANNOTATION=113, DATA=114, INNER=115, VALUE=116, TAILREC=117, OPERATOR=118, + INLINE=119, INFIX=120, EXTERNAL=121, SUSPEND=122, OVERRIDE=123, ABSTRACT=124, + FINAL=125, OPEN=126, CONST=127, LATEINIT=128, VARARG=129, NOINLINE=130, + CROSSINLINE=131, REIFIED=132, EXPECT=133, ACTUAL=134, RealLiteral=135, + FloatLiteral=136, DoubleLiteral=137, IntegerLiteral=138, HexLiteral=139, + BinLiteral=140, UnsignedLiteral=141, LongLiteral=142, BooleanLiteral=143, + NullLiteral=144, CharacterLiteral=145, Identifier=146, IdentifierOrSoftKey=147, + FieldIdentifier=148, QUOTE_OPEN=149, TRIPLE_QUOTE_OPEN=150, UNICODE_CLASS_LL=151, + UNICODE_CLASS_LM=152, UNICODE_CLASS_LO=153, UNICODE_CLASS_LT=154, UNICODE_CLASS_LU=155, + UNICODE_CLASS_ND=156, UNICODE_CLASS_NL=157, QUOTE_CLOSE=158, LineStrRef=159, + LineStrText=160, LineStrEscapedChar=161, LineStrExprStart=162, TRIPLE_QUOTE_CLOSE=163, + MultiLineStringQuote=164, MultiLineStrRef=165, MultiLineStrText=166, MultiLineStrExprStart=167, + Inside_Comment=168, Inside_WS=169, Inside_NL=170, ErrorCharacter=171; + public static final int + RULE_kotlinFile = 0, RULE_script = 1, RULE_shebangLine = 2, RULE_fileAnnotation = 3, + RULE_packageHeader = 4, RULE_importList = 5, RULE_importHeader = 6, RULE_importAlias = 7, + RULE_topLevelObject = 8, RULE_typeAlias = 9, RULE_declaration = 10, RULE_classDeclaration = 11, + RULE_primaryConstructor = 12, RULE_classBody = 13, RULE_classParameters = 14, + RULE_classParameter = 15, RULE_delegationSpecifiers = 16, RULE_delegationSpecifier = 17, + RULE_constructorInvocation = 18, RULE_annotatedDelegationSpecifier = 19, + RULE_explicitDelegation = 20, RULE_typeParameters = 21, RULE_typeParameter = 22, + RULE_typeConstraints = 23, RULE_typeConstraint = 24, RULE_classMemberDeclarations = 25, + RULE_classMemberDeclaration = 26, RULE_anonymousInitializer = 27, RULE_companionObject = 28, + RULE_functionValueParameters = 29, RULE_functionValueParameter = 30, RULE_functionDeclaration = 31, + RULE_functionBody = 32, RULE_variableDeclaration = 33, RULE_multiVariableDeclaration = 34, + RULE_propertyDeclaration = 35, RULE_propertyDelegate = 36, RULE_getter = 37, + RULE_setter = 38, RULE_parametersWithOptionalType = 39, RULE_functionValueParameterWithOptionalType = 40, + RULE_parameterWithOptionalType = 41, RULE_parameter = 42, RULE_objectDeclaration = 43, + RULE_secondaryConstructor = 44, RULE_constructorDelegationCall = 45, RULE_enumClassBody = 46, + RULE_enumEntries = 47, RULE_enumEntry = 48, RULE_type = 49, RULE_typeReference = 50, + RULE_nullableType = 51, RULE_quest = 52, RULE_userType = 53, RULE_simpleUserType = 54, + RULE_typeProjection = 55, RULE_typeProjectionModifiers = 56, RULE_typeProjectionModifier = 57, + RULE_functionType = 58, RULE_functionTypeParameters = 59, RULE_parenthesizedType = 60, + RULE_receiverType = 61, RULE_parenthesizedUserType = 62, RULE_statements = 63, + RULE_statement = 64, RULE_label = 65, RULE_controlStructureBody = 66, + RULE_block = 67, RULE_loopStatement = 68, RULE_forStatement = 69, RULE_whileStatement = 70, + RULE_doWhileStatement = 71, RULE_assignment = 72, RULE_semi = 73, RULE_semis = 74, + RULE_expression = 75, RULE_disjunction = 76, RULE_conjunction = 77, RULE_equality = 78, + RULE_comparison = 79, RULE_genericCallLikeComparison = 80, RULE_infixOperation = 81, + RULE_elvisExpression = 82, RULE_elvis = 83, RULE_infixFunctionCall = 84, + RULE_rangeExpression = 85, RULE_additiveExpression = 86, RULE_multiplicativeExpression = 87, + RULE_asExpression = 88, RULE_prefixUnaryExpression = 89, RULE_unaryPrefix = 90, + RULE_postfixUnaryExpression = 91, RULE_postfixUnarySuffix = 92, RULE_directlyAssignableExpression = 93, + RULE_parenthesizedDirectlyAssignableExpression = 94, RULE_assignableExpression = 95, + RULE_parenthesizedAssignableExpression = 96, RULE_assignableSuffix = 97, + RULE_indexingSuffix = 98, RULE_navigationSuffix = 99, RULE_callSuffix = 100, + RULE_annotatedLambda = 101, RULE_typeArguments = 102, RULE_valueArguments = 103, + RULE_valueArgument = 104, RULE_primaryExpression = 105, RULE_parenthesizedExpression = 106, + RULE_collectionLiteral = 107, RULE_literalConstant = 108, RULE_stringLiteral = 109, + RULE_lineStringLiteral = 110, RULE_multiLineStringLiteral = 111, RULE_lineStringContent = 112, + RULE_lineStringExpression = 113, RULE_multiLineStringContent = 114, RULE_multiLineStringExpression = 115, + RULE_lambdaLiteral = 116, RULE_lambdaParameters = 117, RULE_lambdaParameter = 118, + RULE_anonymousFunction = 119, RULE_functionLiteral = 120, RULE_objectLiteral = 121, + RULE_thisExpression = 122, RULE_superExpression = 123, RULE_ifExpression = 124, + RULE_whenSubject = 125, RULE_whenExpression = 126, RULE_whenEntry = 127, + RULE_whenCondition = 128, RULE_rangeTest = 129, RULE_typeTest = 130, RULE_tryExpression = 131, + RULE_catchBlock = 132, RULE_finallyBlock = 133, RULE_jumpExpression = 134, + RULE_callableReference = 135, RULE_assignmentAndOperator = 136, RULE_equalityOperator = 137, + RULE_comparisonOperator = 138, RULE_inOperator = 139, RULE_isOperator = 140, + RULE_additiveOperator = 141, RULE_multiplicativeOperator = 142, RULE_asOperator = 143, + RULE_prefixUnaryOperator = 144, RULE_postfixUnaryOperator = 145, RULE_excl = 146, + RULE_memberAccessOperator = 147, RULE_safeNav = 148, RULE_modifiers = 149, + RULE_parameterModifiers = 150, RULE_modifier = 151, RULE_typeModifiers = 152, + RULE_typeModifier = 153, RULE_classModifier = 154, RULE_memberModifier = 155, + RULE_visibilityModifier = 156, RULE_varianceModifier = 157, RULE_typeParameterModifiers = 158, + RULE_typeParameterModifier = 159, RULE_functionModifier = 160, RULE_propertyModifier = 161, + RULE_inheritanceModifier = 162, RULE_parameterModifier = 163, RULE_reificationModifier = 164, + RULE_platformModifier = 165, RULE_annotation = 166, RULE_singleAnnotation = 167, + RULE_multiAnnotation = 168, RULE_annotationUseSiteTarget = 169, RULE_unescapedAnnotation = 170, + RULE_simpleIdentifier = 171, RULE_identifier = 172; + private static String[] makeRuleNames() { + return new String[] { + "kotlinFile", "script", "shebangLine", "fileAnnotation", "packageHeader", + "importList", "importHeader", "importAlias", "topLevelObject", "typeAlias", + "declaration", "classDeclaration", "primaryConstructor", "classBody", + "classParameters", "classParameter", "delegationSpecifiers", "delegationSpecifier", + "constructorInvocation", "annotatedDelegationSpecifier", "explicitDelegation", + "typeParameters", "typeParameter", "typeConstraints", "typeConstraint", + "classMemberDeclarations", "classMemberDeclaration", "anonymousInitializer", + "companionObject", "functionValueParameters", "functionValueParameter", + "functionDeclaration", "functionBody", "variableDeclaration", "multiVariableDeclaration", + "propertyDeclaration", "propertyDelegate", "getter", "setter", "parametersWithOptionalType", + "functionValueParameterWithOptionalType", "parameterWithOptionalType", + "parameter", "objectDeclaration", "secondaryConstructor", "constructorDelegationCall", + "enumClassBody", "enumEntries", "enumEntry", "type", "typeReference", + "nullableType", "quest", "userType", "simpleUserType", "typeProjection", + "typeProjectionModifiers", "typeProjectionModifier", "functionType", + "functionTypeParameters", "parenthesizedType", "receiverType", "parenthesizedUserType", + "statements", "statement", "label", "controlStructureBody", "block", + "loopStatement", "forStatement", "whileStatement", "doWhileStatement", + "assignment", "semi", "semis", "expression", "disjunction", "conjunction", + "equality", "comparison", "genericCallLikeComparison", "infixOperation", + "elvisExpression", "elvis", "infixFunctionCall", "rangeExpression", "additiveExpression", + "multiplicativeExpression", "asExpression", "prefixUnaryExpression", + "unaryPrefix", "postfixUnaryExpression", "postfixUnarySuffix", "directlyAssignableExpression", + "parenthesizedDirectlyAssignableExpression", "assignableExpression", + "parenthesizedAssignableExpression", "assignableSuffix", "indexingSuffix", + "navigationSuffix", "callSuffix", "annotatedLambda", "typeArguments", + "valueArguments", "valueArgument", "primaryExpression", "parenthesizedExpression", + "collectionLiteral", "literalConstant", "stringLiteral", "lineStringLiteral", + "multiLineStringLiteral", "lineStringContent", "lineStringExpression", + "multiLineStringContent", "multiLineStringExpression", "lambdaLiteral", + "lambdaParameters", "lambdaParameter", "anonymousFunction", "functionLiteral", + "objectLiteral", "thisExpression", "superExpression", "ifExpression", + "whenSubject", "whenExpression", "whenEntry", "whenCondition", "rangeTest", + "typeTest", "tryExpression", "catchBlock", "finallyBlock", "jumpExpression", + "callableReference", "assignmentAndOperator", "equalityOperator", "comparisonOperator", + "inOperator", "isOperator", "additiveOperator", "multiplicativeOperator", + "asOperator", "prefixUnaryOperator", "postfixUnaryOperator", "excl", + "memberAccessOperator", "safeNav", "modifiers", "parameterModifiers", + "modifier", "typeModifiers", "typeModifier", "classModifier", "memberModifier", + "visibilityModifier", "varianceModifier", "typeParameterModifiers", "typeParameterModifier", + "functionModifier", "propertyModifier", "inheritanceModifier", "parameterModifier", + "reificationModifier", "platformModifier", "annotation", "singleAnnotation", + "multiAnnotation", "annotationUseSiteTarget", "unescapedAnnotation", + "simpleIdentifier", "identifier" + }; + } + public static final String[] ruleNames = makeRuleNames(); + + private static String[] makeLiteralNames() { + return new String[] { + null, null, null, null, null, null, "'...'", "'.'", "','", "'('", "')'", + "'['", "']'", "'{'", "'}'", "'*'", "'%'", "'/'", "'+'", "'-'", "'++'", + "'--'", "'&&'", "'||'", null, "'!'", "':'", "';'", "'='", "'+='", "'-='", + "'*='", "'/='", "'%='", "'->'", "'=>'", "'..'", "'::'", "';;'", "'#'", + "'@'", null, null, null, null, "'?'", "'<'", "'>'", "'<='", "'>='", "'!='", + "'!=='", "'as?'", "'=='", "'==='", "'''", null, null, null, null, null, + "'file'", "'field'", "'property'", "'get'", "'set'", "'receiver'", "'param'", + "'setparam'", "'delegate'", "'package'", "'import'", "'class'", "'interface'", + "'fun'", "'object'", "'val'", "'var'", "'typealias'", "'constructor'", + "'by'", "'companion'", "'init'", "'this'", "'super'", "'typeof'", "'where'", + "'if'", "'else'", "'when'", "'try'", "'catch'", "'finally'", "'for'", + "'do'", "'while'", "'throw'", "'return'", "'continue'", "'break'", "'as'", + "'is'", "'in'", null, null, "'out'", "'dynamic'", "'public'", "'private'", + "'protected'", "'internal'", "'enum'", "'sealed'", "'annotation'", "'data'", + "'inner'", "'value'", "'tailrec'", "'operator'", "'inline'", "'infix'", + "'external'", "'suspend'", "'override'", "'abstract'", "'final'", "'open'", + "'const'", "'lateinit'", "'vararg'", "'noinline'", "'crossinline'", "'reified'", + "'expect'", "'actual'", null, null, null, null, null, null, null, null, + null, "'null'", null, null, null, null, null, "'\"\"\"'" + }; + } + private static final String[] _LITERAL_NAMES = makeLiteralNames(); + private static String[] makeSymbolicNames() { + return new String[] { + null, "ShebangLine", "DelimitedComment", "LineComment", "WS", "NL", "RESERVED", + "DOT", "COMMA", "LPAREN", "RPAREN", "LSQUARE", "RSQUARE", "LCURL", "RCURL", + "MULT", "MOD", "DIV", "ADD", "SUB", "INCR", "DECR", "CONJ", "DISJ", "EXCL_WS", + "EXCL_NO_WS", "COLON", "SEMICOLON", "ASSIGNMENT", "ADD_ASSIGNMENT", "SUB_ASSIGNMENT", + "MULT_ASSIGNMENT", "DIV_ASSIGNMENT", "MOD_ASSIGNMENT", "ARROW", "DOUBLE_ARROW", + "RANGE", "COLONCOLON", "DOUBLE_SEMICOLON", "HASH", "AT_NO_WS", "AT_POST_WS", + "AT_PRE_WS", "AT_BOTH_WS", "QUEST_WS", "QUEST_NO_WS", "LANGLE", "RANGLE", + "LE", "GE", "EXCL_EQ", "EXCL_EQEQ", "AS_SAFE", "EQEQ", "EQEQEQ", "SINGLE_QUOTE", + "RETURN_AT", "CONTINUE_AT", "BREAK_AT", "THIS_AT", "SUPER_AT", "FILE", + "FIELD", "PROPERTY", "GET", "SET", "RECEIVER", "PARAM", "SETPARAM", "DELEGATE", + "PACKAGE", "IMPORT", "CLASS", "INTERFACE", "FUN", "OBJECT", "VAL", "VAR", + "TYPE_ALIAS", "CONSTRUCTOR", "BY", "COMPANION", "INIT", "THIS", "SUPER", + "TYPEOF", "WHERE", "IF", "ELSE", "WHEN", "TRY", "CATCH", "FINALLY", "FOR", + "DO", "WHILE", "THROW", "RETURN", "CONTINUE", "BREAK", "AS", "IS", "IN", + "NOT_IS", "NOT_IN", "OUT", "DYNAMIC", "PUBLIC", "PRIVATE", "PROTECTED", + "INTERNAL", "ENUM", "SEALED", "ANNOTATION", "DATA", "INNER", "VALUE", + "TAILREC", "OPERATOR", "INLINE", "INFIX", "EXTERNAL", "SUSPEND", "OVERRIDE", + "ABSTRACT", "FINAL", "OPEN", "CONST", "LATEINIT", "VARARG", "NOINLINE", + "CROSSINLINE", "REIFIED", "EXPECT", "ACTUAL", "RealLiteral", "FloatLiteral", + "DoubleLiteral", "IntegerLiteral", "HexLiteral", "BinLiteral", "UnsignedLiteral", + "LongLiteral", "BooleanLiteral", "NullLiteral", "CharacterLiteral", "Identifier", + "IdentifierOrSoftKey", "FieldIdentifier", "QUOTE_OPEN", "TRIPLE_QUOTE_OPEN", + "UNICODE_CLASS_LL", "UNICODE_CLASS_LM", "UNICODE_CLASS_LO", "UNICODE_CLASS_LT", + "UNICODE_CLASS_LU", "UNICODE_CLASS_ND", "UNICODE_CLASS_NL", "QUOTE_CLOSE", + "LineStrRef", "LineStrText", "LineStrEscapedChar", "LineStrExprStart", + "TRIPLE_QUOTE_CLOSE", "MultiLineStringQuote", "MultiLineStrRef", "MultiLineStrText", + "MultiLineStrExprStart", "Inside_Comment", "Inside_WS", "Inside_NL", + "ErrorCharacter" + }; + } + private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); + public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); + + /** + * @deprecated Use {@link #VOCABULARY} instead. + */ + @Deprecated + public static final String[] tokenNames; + static { + tokenNames = new String[_SYMBOLIC_NAMES.length]; + for (int i = 0; i < tokenNames.length; i++) { + tokenNames[i] = VOCABULARY.getLiteralName(i); + if (tokenNames[i] == null) { + tokenNames[i] = VOCABULARY.getSymbolicName(i); + } + + if (tokenNames[i] == null) { + tokenNames[i] = ""; + } + } + } + + @Override + @Deprecated + public String[] getTokenNames() { + return tokenNames; + } + + @Override + + public Vocabulary getVocabulary() { + return VOCABULARY; + } + + @Override + public String getGrammarFileName() { return "KotlinParser.g4"; } + + @Override + public String[] getRuleNames() { return ruleNames; } + + @Override + public String getSerializedATN() { return _serializedATN; } + + @Override + public ATN getATN() { return _ATN; } + + public KotlinParser(TokenStream input) { + super(input); + _interp = new ParserATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache); + } + + public static class KotlinFileContext extends ParserRuleContext { + public PackageHeaderContext packageHeader() { + return getRuleContext(PackageHeaderContext.class,0); + } + public ImportListContext importList() { + return getRuleContext(ImportListContext.class,0); + } + public TerminalNode EOF() { return getToken(KotlinParser.EOF, 0); } + public ShebangLineContext shebangLine() { + return getRuleContext(ShebangLineContext.class,0); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public List fileAnnotation() { + return getRuleContexts(FileAnnotationContext.class); + } + public FileAnnotationContext fileAnnotation(int i) { + return getRuleContext(FileAnnotationContext.class,i); + } + public List topLevelObject() { + return getRuleContexts(TopLevelObjectContext.class); + } + public TopLevelObjectContext topLevelObject(int i) { + return getRuleContext(TopLevelObjectContext.class,i); + } + public KotlinFileContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_kotlinFile; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterKotlinFile(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitKotlinFile(this); + } + } + + public final KotlinFileContext kotlinFile() throws RecognitionException { + KotlinFileContext _localctx = new KotlinFileContext(_ctx, getState()); + enterRule(_localctx, 0, RULE_kotlinFile); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(347); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ShebangLine) { + { + setState(346); + shebangLine(); + } + } + + setState(352); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(349); + match(NL); + } + } + setState(354); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(358); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,2,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(355); + fileAnnotation(); + } + } + } + setState(360); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,2,_ctx); + } + setState(361); + packageHeader(); + setState(362); + importList(); + setState(366); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==AT_NO_WS || _la==AT_PRE_WS || ((((_la - 72)) & ~0x3f) == 0 && ((1L << (_la - 72)) & ((1L << (CLASS - 72)) | (1L << (INTERFACE - 72)) | (1L << (FUN - 72)) | (1L << (OBJECT - 72)) | (1L << (VAL - 72)) | (1L << (VAR - 72)) | (1L << (TYPE_ALIAS - 72)) | (1L << (PUBLIC - 72)) | (1L << (PRIVATE - 72)) | (1L << (PROTECTED - 72)) | (1L << (INTERNAL - 72)) | (1L << (ENUM - 72)) | (1L << (SEALED - 72)) | (1L << (ANNOTATION - 72)) | (1L << (DATA - 72)) | (1L << (INNER - 72)) | (1L << (VALUE - 72)) | (1L << (TAILREC - 72)) | (1L << (OPERATOR - 72)) | (1L << (INLINE - 72)) | (1L << (INFIX - 72)) | (1L << (EXTERNAL - 72)) | (1L << (SUSPEND - 72)) | (1L << (OVERRIDE - 72)) | (1L << (ABSTRACT - 72)) | (1L << (FINAL - 72)) | (1L << (OPEN - 72)) | (1L << (CONST - 72)) | (1L << (LATEINIT - 72)) | (1L << (VARARG - 72)) | (1L << (NOINLINE - 72)) | (1L << (CROSSINLINE - 72)) | (1L << (EXPECT - 72)) | (1L << (ACTUAL - 72)))) != 0)) { + { + { + setState(363); + topLevelObject(); + } + } + setState(368); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(369); + match(EOF); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ScriptContext extends ParserRuleContext { + public PackageHeaderContext packageHeader() { + return getRuleContext(PackageHeaderContext.class,0); + } + public ImportListContext importList() { + return getRuleContext(ImportListContext.class,0); + } + public TerminalNode EOF() { return getToken(KotlinParser.EOF, 0); } + public ShebangLineContext shebangLine() { + return getRuleContext(ShebangLineContext.class,0); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public List fileAnnotation() { + return getRuleContexts(FileAnnotationContext.class); + } + public FileAnnotationContext fileAnnotation(int i) { + return getRuleContext(FileAnnotationContext.class,i); + } + public List statement() { + return getRuleContexts(StatementContext.class); + } + public StatementContext statement(int i) { + return getRuleContext(StatementContext.class,i); + } + public List semi() { + return getRuleContexts(SemiContext.class); + } + public SemiContext semi(int i) { + return getRuleContext(SemiContext.class,i); + } + public ScriptContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_script; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterScript(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitScript(this); + } + } + + public final ScriptContext script() throws RecognitionException { + ScriptContext _localctx = new ScriptContext(_ctx, getState()); + enterRule(_localctx, 2, RULE_script); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(372); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==ShebangLine) { + { + setState(371); + shebangLine(); + } + } + + setState(377); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(374); + match(NL); + } + } + setState(379); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(383); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,6,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(380); + fileAnnotation(); + } + } + } + setState(385); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,6,_ctx); + } + setState(386); + packageHeader(); + setState(387); + importList(); + setState(393); + _errHandler.sync(this); + _la = _input.LA(1); + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << LPAREN) | (1L << LSQUARE) | (1L << LCURL) | (1L << ADD) | (1L << SUB) | (1L << INCR) | (1L << DECR) | (1L << EXCL_WS) | (1L << EXCL_NO_WS) | (1L << COLONCOLON) | (1L << AT_NO_WS) | (1L << AT_PRE_WS) | (1L << RETURN_AT) | (1L << CONTINUE_AT) | (1L << BREAK_AT) | (1L << THIS_AT) | (1L << SUPER_AT) | (1L << FILE) | (1L << FIELD) | (1L << PROPERTY))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (GET - 64)) | (1L << (SET - 64)) | (1L << (RECEIVER - 64)) | (1L << (PARAM - 64)) | (1L << (SETPARAM - 64)) | (1L << (DELEGATE - 64)) | (1L << (IMPORT - 64)) | (1L << (CLASS - 64)) | (1L << (INTERFACE - 64)) | (1L << (FUN - 64)) | (1L << (OBJECT - 64)) | (1L << (VAL - 64)) | (1L << (VAR - 64)) | (1L << (TYPE_ALIAS - 64)) | (1L << (CONSTRUCTOR - 64)) | (1L << (BY - 64)) | (1L << (COMPANION - 64)) | (1L << (INIT - 64)) | (1L << (THIS - 64)) | (1L << (SUPER - 64)) | (1L << (WHERE - 64)) | (1L << (IF - 64)) | (1L << (WHEN - 64)) | (1L << (TRY - 64)) | (1L << (CATCH - 64)) | (1L << (FINALLY - 64)) | (1L << (FOR - 64)) | (1L << (DO - 64)) | (1L << (WHILE - 64)) | (1L << (THROW - 64)) | (1L << (RETURN - 64)) | (1L << (CONTINUE - 64)) | (1L << (BREAK - 64)) | (1L << (OUT - 64)) | (1L << (DYNAMIC - 64)) | (1L << (PUBLIC - 64)) | (1L << (PRIVATE - 64)) | (1L << (PROTECTED - 64)) | (1L << (INTERNAL - 64)) | (1L << (ENUM - 64)) | (1L << (SEALED - 64)) | (1L << (ANNOTATION - 64)) | (1L << (DATA - 64)) | (1L << (INNER - 64)) | (1L << (VALUE - 64)) | (1L << (TAILREC - 64)) | (1L << (OPERATOR - 64)) | (1L << (INLINE - 64)) | (1L << (INFIX - 64)) | (1L << (EXTERNAL - 64)) | (1L << (SUSPEND - 64)) | (1L << (OVERRIDE - 64)) | (1L << (ABSTRACT - 64)) | (1L << (FINAL - 64)) | (1L << (OPEN - 64)) | (1L << (CONST - 64)))) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & ((1L << (LATEINIT - 128)) | (1L << (VARARG - 128)) | (1L << (NOINLINE - 128)) | (1L << (CROSSINLINE - 128)) | (1L << (REIFIED - 128)) | (1L << (EXPECT - 128)) | (1L << (ACTUAL - 128)) | (1L << (RealLiteral - 128)) | (1L << (IntegerLiteral - 128)) | (1L << (HexLiteral - 128)) | (1L << (BinLiteral - 128)) | (1L << (UnsignedLiteral - 128)) | (1L << (LongLiteral - 128)) | (1L << (BooleanLiteral - 128)) | (1L << (NullLiteral - 128)) | (1L << (CharacterLiteral - 128)) | (1L << (Identifier - 128)) | (1L << (QUOTE_OPEN - 128)) | (1L << (TRIPLE_QUOTE_OPEN - 128)))) != 0)) { + { + { + setState(388); + statement(); + setState(389); + semi(); + } + } + setState(395); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(396); + match(EOF); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ShebangLineContext extends ParserRuleContext { + public TerminalNode ShebangLine() { return getToken(KotlinParser.ShebangLine, 0); } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public ShebangLineContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_shebangLine; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterShebangLine(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitShebangLine(this); + } + } + + public final ShebangLineContext shebangLine() throws RecognitionException { + ShebangLineContext _localctx = new ShebangLineContext(_ctx, getState()); + enterRule(_localctx, 4, RULE_shebangLine); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(398); + match(ShebangLine); + setState(400); + _errHandler.sync(this); + _alt = 1; + do { + switch (_alt) { + case 1: + { + { + setState(399); + match(NL); + } + } + break; + default: + throw new NoViableAltException(this); + } + setState(402); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,8,_ctx); + } while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class FileAnnotationContext extends ParserRuleContext { + public TerminalNode FILE() { return getToken(KotlinParser.FILE, 0); } + public TerminalNode COLON() { return getToken(KotlinParser.COLON, 0); } + public TerminalNode AT_NO_WS() { return getToken(KotlinParser.AT_NO_WS, 0); } + public TerminalNode AT_PRE_WS() { return getToken(KotlinParser.AT_PRE_WS, 0); } + public TerminalNode LSQUARE() { return getToken(KotlinParser.LSQUARE, 0); } + public TerminalNode RSQUARE() { return getToken(KotlinParser.RSQUARE, 0); } + public List unescapedAnnotation() { + return getRuleContexts(UnescapedAnnotationContext.class); + } + public UnescapedAnnotationContext unescapedAnnotation(int i) { + return getRuleContext(UnescapedAnnotationContext.class,i); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public FileAnnotationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_fileAnnotation; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterFileAnnotation(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitFileAnnotation(this); + } + } + + public final FileAnnotationContext fileAnnotation() throws RecognitionException { + FileAnnotationContext _localctx = new FileAnnotationContext(_ctx, getState()); + enterRule(_localctx, 6, RULE_fileAnnotation); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(404); + _la = _input.LA(1); + if ( !(_la==AT_NO_WS || _la==AT_PRE_WS) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(405); + match(FILE); + setState(409); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(406); + match(NL); + } + } + setState(411); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(412); + match(COLON); + setState(416); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(413); + match(NL); + } + } + setState(418); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(428); + _errHandler.sync(this); + switch (_input.LA(1)) { + case LSQUARE: + { + setState(419); + match(LSQUARE); + setState(421); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + { + setState(420); + unescapedAnnotation(); + } + } + setState(423); + _errHandler.sync(this); + _la = _input.LA(1); + } while ( ((((_la - 61)) & ~0x3f) == 0 && ((1L << (_la - 61)) & ((1L << (FILE - 61)) | (1L << (FIELD - 61)) | (1L << (PROPERTY - 61)) | (1L << (GET - 61)) | (1L << (SET - 61)) | (1L << (RECEIVER - 61)) | (1L << (PARAM - 61)) | (1L << (SETPARAM - 61)) | (1L << (DELEGATE - 61)) | (1L << (IMPORT - 61)) | (1L << (CONSTRUCTOR - 61)) | (1L << (BY - 61)) | (1L << (COMPANION - 61)) | (1L << (INIT - 61)) | (1L << (WHERE - 61)) | (1L << (CATCH - 61)) | (1L << (FINALLY - 61)) | (1L << (OUT - 61)) | (1L << (DYNAMIC - 61)) | (1L << (PUBLIC - 61)) | (1L << (PRIVATE - 61)) | (1L << (PROTECTED - 61)) | (1L << (INTERNAL - 61)) | (1L << (ENUM - 61)) | (1L << (SEALED - 61)) | (1L << (ANNOTATION - 61)) | (1L << (DATA - 61)) | (1L << (INNER - 61)) | (1L << (VALUE - 61)) | (1L << (TAILREC - 61)) | (1L << (OPERATOR - 61)) | (1L << (INLINE - 61)) | (1L << (INFIX - 61)) | (1L << (EXTERNAL - 61)) | (1L << (SUSPEND - 61)) | (1L << (OVERRIDE - 61)) | (1L << (ABSTRACT - 61)))) != 0) || ((((_la - 125)) & ~0x3f) == 0 && ((1L << (_la - 125)) & ((1L << (FINAL - 125)) | (1L << (OPEN - 125)) | (1L << (CONST - 125)) | (1L << (LATEINIT - 125)) | (1L << (VARARG - 125)) | (1L << (NOINLINE - 125)) | (1L << (CROSSINLINE - 125)) | (1L << (REIFIED - 125)) | (1L << (EXPECT - 125)) | (1L << (ACTUAL - 125)) | (1L << (Identifier - 125)))) != 0) ); + setState(425); + match(RSQUARE); + } + break; + case FILE: + case FIELD: + case PROPERTY: + case GET: + case SET: + case RECEIVER: + case PARAM: + case SETPARAM: + case DELEGATE: + case IMPORT: + case CONSTRUCTOR: + case BY: + case COMPANION: + case INIT: + case WHERE: + case CATCH: + case FINALLY: + case OUT: + case DYNAMIC: + case PUBLIC: + case PRIVATE: + case PROTECTED: + case INTERNAL: + case ENUM: + case SEALED: + case ANNOTATION: + case DATA: + case INNER: + case VALUE: + case TAILREC: + case OPERATOR: + case INLINE: + case INFIX: + case EXTERNAL: + case SUSPEND: + case OVERRIDE: + case ABSTRACT: + case FINAL: + case OPEN: + case CONST: + case LATEINIT: + case VARARG: + case NOINLINE: + case CROSSINLINE: + case REIFIED: + case EXPECT: + case ACTUAL: + case Identifier: + { + setState(427); + unescapedAnnotation(); + } + break; + default: + throw new NoViableAltException(this); + } + setState(433); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(430); + match(NL); + } + } + setState(435); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class PackageHeaderContext extends ParserRuleContext { + public TerminalNode PACKAGE() { return getToken(KotlinParser.PACKAGE, 0); } + public IdentifierContext identifier() { + return getRuleContext(IdentifierContext.class,0); + } + public SemiContext semi() { + return getRuleContext(SemiContext.class,0); + } + public PackageHeaderContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_packageHeader; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterPackageHeader(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitPackageHeader(this); + } + } + + public final PackageHeaderContext packageHeader() throws RecognitionException { + PackageHeaderContext _localctx = new PackageHeaderContext(_ctx, getState()); + enterRule(_localctx, 8, RULE_packageHeader); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(441); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==PACKAGE) { + { + setState(436); + match(PACKAGE); + setState(437); + identifier(); + setState(439); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,14,_ctx) ) { + case 1: + { + setState(438); + semi(); + } + break; + } + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ImportListContext extends ParserRuleContext { + public List importHeader() { + return getRuleContexts(ImportHeaderContext.class); + } + public ImportHeaderContext importHeader(int i) { + return getRuleContext(ImportHeaderContext.class,i); + } + public ImportListContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_importList; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterImportList(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitImportList(this); + } + } + + public final ImportListContext importList() throws RecognitionException { + ImportListContext _localctx = new ImportListContext(_ctx, getState()); + enterRule(_localctx, 10, RULE_importList); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(446); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,16,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(443); + importHeader(); + } + } + } + setState(448); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,16,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ImportHeaderContext extends ParserRuleContext { + public TerminalNode IMPORT() { return getToken(KotlinParser.IMPORT, 0); } + public IdentifierContext identifier() { + return getRuleContext(IdentifierContext.class,0); + } + public TerminalNode DOT() { return getToken(KotlinParser.DOT, 0); } + public TerminalNode MULT() { return getToken(KotlinParser.MULT, 0); } + public ImportAliasContext importAlias() { + return getRuleContext(ImportAliasContext.class,0); + } + public SemiContext semi() { + return getRuleContext(SemiContext.class,0); + } + public ImportHeaderContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_importHeader; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterImportHeader(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitImportHeader(this); + } + } + + public final ImportHeaderContext importHeader() throws RecognitionException { + ImportHeaderContext _localctx = new ImportHeaderContext(_ctx, getState()); + enterRule(_localctx, 12, RULE_importHeader); + try { + enterOuterAlt(_localctx, 1); + { + setState(449); + match(IMPORT); + setState(450); + identifier(); + setState(454); + _errHandler.sync(this); + switch (_input.LA(1)) { + case DOT: + { + setState(451); + match(DOT); + setState(452); + match(MULT); + } + break; + case AS: + { + setState(453); + importAlias(); + } + break; + case EOF: + case NL: + case LPAREN: + case LSQUARE: + case LCURL: + case ADD: + case SUB: + case INCR: + case DECR: + case EXCL_WS: + case EXCL_NO_WS: + case SEMICOLON: + case COLONCOLON: + case AT_NO_WS: + case AT_PRE_WS: + case RETURN_AT: + case CONTINUE_AT: + case BREAK_AT: + case THIS_AT: + case SUPER_AT: + case FILE: + case FIELD: + case PROPERTY: + case GET: + case SET: + case RECEIVER: + case PARAM: + case SETPARAM: + case DELEGATE: + case IMPORT: + case CLASS: + case INTERFACE: + case FUN: + case OBJECT: + case VAL: + case VAR: + case TYPE_ALIAS: + case CONSTRUCTOR: + case BY: + case COMPANION: + case INIT: + case THIS: + case SUPER: + case WHERE: + case IF: + case WHEN: + case TRY: + case CATCH: + case FINALLY: + case FOR: + case DO: + case WHILE: + case THROW: + case RETURN: + case CONTINUE: + case BREAK: + case OUT: + case DYNAMIC: + case PUBLIC: + case PRIVATE: + case PROTECTED: + case INTERNAL: + case ENUM: + case SEALED: + case ANNOTATION: + case DATA: + case INNER: + case VALUE: + case TAILREC: + case OPERATOR: + case INLINE: + case INFIX: + case EXTERNAL: + case SUSPEND: + case OVERRIDE: + case ABSTRACT: + case FINAL: + case OPEN: + case CONST: + case LATEINIT: + case VARARG: + case NOINLINE: + case CROSSINLINE: + case REIFIED: + case EXPECT: + case ACTUAL: + case RealLiteral: + case IntegerLiteral: + case HexLiteral: + case BinLiteral: + case UnsignedLiteral: + case LongLiteral: + case BooleanLiteral: + case NullLiteral: + case CharacterLiteral: + case Identifier: + case QUOTE_OPEN: + case TRIPLE_QUOTE_OPEN: + break; + default: + break; + } + setState(457); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,18,_ctx) ) { + case 1: + { + setState(456); + semi(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ImportAliasContext extends ParserRuleContext { + public TerminalNode AS() { return getToken(KotlinParser.AS, 0); } + public SimpleIdentifierContext simpleIdentifier() { + return getRuleContext(SimpleIdentifierContext.class,0); + } + public ImportAliasContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_importAlias; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterImportAlias(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitImportAlias(this); + } + } + + public final ImportAliasContext importAlias() throws RecognitionException { + ImportAliasContext _localctx = new ImportAliasContext(_ctx, getState()); + enterRule(_localctx, 14, RULE_importAlias); + try { + enterOuterAlt(_localctx, 1); + { + setState(459); + match(AS); + setState(460); + simpleIdentifier(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TopLevelObjectContext extends ParserRuleContext { + public DeclarationContext declaration() { + return getRuleContext(DeclarationContext.class,0); + } + public SemisContext semis() { + return getRuleContext(SemisContext.class,0); + } + public TopLevelObjectContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_topLevelObject; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterTopLevelObject(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitTopLevelObject(this); + } + } + + public final TopLevelObjectContext topLevelObject() throws RecognitionException { + TopLevelObjectContext _localctx = new TopLevelObjectContext(_ctx, getState()); + enterRule(_localctx, 16, RULE_topLevelObject); + try { + enterOuterAlt(_localctx, 1); + { + setState(462); + declaration(); + setState(464); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,19,_ctx) ) { + case 1: + { + setState(463); + semis(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TypeAliasContext extends ParserRuleContext { + public TerminalNode TYPE_ALIAS() { return getToken(KotlinParser.TYPE_ALIAS, 0); } + public SimpleIdentifierContext simpleIdentifier() { + return getRuleContext(SimpleIdentifierContext.class,0); + } + public TerminalNode ASSIGNMENT() { return getToken(KotlinParser.ASSIGNMENT, 0); } + public TypeContext type() { + return getRuleContext(TypeContext.class,0); + } + public ModifiersContext modifiers() { + return getRuleContext(ModifiersContext.class,0); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public TypeParametersContext typeParameters() { + return getRuleContext(TypeParametersContext.class,0); + } + public TypeAliasContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_typeAlias; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterTypeAlias(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitTypeAlias(this); + } + } + + public final TypeAliasContext typeAlias() throws RecognitionException { + TypeAliasContext _localctx = new TypeAliasContext(_ctx, getState()); + enterRule(_localctx, 18, RULE_typeAlias); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(467); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==AT_NO_WS || _la==AT_PRE_WS || ((((_la - 107)) & ~0x3f) == 0 && ((1L << (_la - 107)) & ((1L << (PUBLIC - 107)) | (1L << (PRIVATE - 107)) | (1L << (PROTECTED - 107)) | (1L << (INTERNAL - 107)) | (1L << (ENUM - 107)) | (1L << (SEALED - 107)) | (1L << (ANNOTATION - 107)) | (1L << (DATA - 107)) | (1L << (INNER - 107)) | (1L << (VALUE - 107)) | (1L << (TAILREC - 107)) | (1L << (OPERATOR - 107)) | (1L << (INLINE - 107)) | (1L << (INFIX - 107)) | (1L << (EXTERNAL - 107)) | (1L << (SUSPEND - 107)) | (1L << (OVERRIDE - 107)) | (1L << (ABSTRACT - 107)) | (1L << (FINAL - 107)) | (1L << (OPEN - 107)) | (1L << (CONST - 107)) | (1L << (LATEINIT - 107)) | (1L << (VARARG - 107)) | (1L << (NOINLINE - 107)) | (1L << (CROSSINLINE - 107)) | (1L << (EXPECT - 107)) | (1L << (ACTUAL - 107)))) != 0)) { + { + setState(466); + modifiers(); + } + } + + setState(469); + match(TYPE_ALIAS); + setState(473); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(470); + match(NL); + } + } + setState(475); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(476); + simpleIdentifier(); + setState(484); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,23,_ctx) ) { + case 1: + { + setState(480); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(477); + match(NL); + } + } + setState(482); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(483); + typeParameters(); + } + break; + } + setState(489); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(486); + match(NL); + } + } + setState(491); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(492); + match(ASSIGNMENT); + setState(496); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(493); + match(NL); + } + } + setState(498); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(499); + type(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class DeclarationContext extends ParserRuleContext { + public ClassDeclarationContext classDeclaration() { + return getRuleContext(ClassDeclarationContext.class,0); + } + public ObjectDeclarationContext objectDeclaration() { + return getRuleContext(ObjectDeclarationContext.class,0); + } + public FunctionDeclarationContext functionDeclaration() { + return getRuleContext(FunctionDeclarationContext.class,0); + } + public PropertyDeclarationContext propertyDeclaration() { + return getRuleContext(PropertyDeclarationContext.class,0); + } + public TypeAliasContext typeAlias() { + return getRuleContext(TypeAliasContext.class,0); + } + public DeclarationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_declaration; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterDeclaration(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitDeclaration(this); + } + } + + public final DeclarationContext declaration() throws RecognitionException { + DeclarationContext _localctx = new DeclarationContext(_ctx, getState()); + enterRule(_localctx, 20, RULE_declaration); + try { + setState(506); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,26,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(501); + classDeclaration(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(502); + objectDeclaration(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(503); + functionDeclaration(); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(504); + propertyDeclaration(); + } + break; + case 5: + enterOuterAlt(_localctx, 5); + { + setState(505); + typeAlias(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ClassDeclarationContext extends ParserRuleContext { + public SimpleIdentifierContext simpleIdentifier() { + return getRuleContext(SimpleIdentifierContext.class,0); + } + public TerminalNode CLASS() { return getToken(KotlinParser.CLASS, 0); } + public TerminalNode INTERFACE() { return getToken(KotlinParser.INTERFACE, 0); } + public ModifiersContext modifiers() { + return getRuleContext(ModifiersContext.class,0); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public TypeParametersContext typeParameters() { + return getRuleContext(TypeParametersContext.class,0); + } + public PrimaryConstructorContext primaryConstructor() { + return getRuleContext(PrimaryConstructorContext.class,0); + } + public TerminalNode COLON() { return getToken(KotlinParser.COLON, 0); } + public DelegationSpecifiersContext delegationSpecifiers() { + return getRuleContext(DelegationSpecifiersContext.class,0); + } + public TypeConstraintsContext typeConstraints() { + return getRuleContext(TypeConstraintsContext.class,0); + } + public ClassBodyContext classBody() { + return getRuleContext(ClassBodyContext.class,0); + } + public EnumClassBodyContext enumClassBody() { + return getRuleContext(EnumClassBodyContext.class,0); + } + public TerminalNode FUN() { return getToken(KotlinParser.FUN, 0); } + public ClassDeclarationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_classDeclaration; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterClassDeclaration(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitClassDeclaration(this); + } + } + + public final ClassDeclarationContext classDeclaration() throws RecognitionException { + ClassDeclarationContext _localctx = new ClassDeclarationContext(_ctx, getState()); + enterRule(_localctx, 22, RULE_classDeclaration); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(509); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==AT_NO_WS || _la==AT_PRE_WS || ((((_la - 107)) & ~0x3f) == 0 && ((1L << (_la - 107)) & ((1L << (PUBLIC - 107)) | (1L << (PRIVATE - 107)) | (1L << (PROTECTED - 107)) | (1L << (INTERNAL - 107)) | (1L << (ENUM - 107)) | (1L << (SEALED - 107)) | (1L << (ANNOTATION - 107)) | (1L << (DATA - 107)) | (1L << (INNER - 107)) | (1L << (VALUE - 107)) | (1L << (TAILREC - 107)) | (1L << (OPERATOR - 107)) | (1L << (INLINE - 107)) | (1L << (INFIX - 107)) | (1L << (EXTERNAL - 107)) | (1L << (SUSPEND - 107)) | (1L << (OVERRIDE - 107)) | (1L << (ABSTRACT - 107)) | (1L << (FINAL - 107)) | (1L << (OPEN - 107)) | (1L << (CONST - 107)) | (1L << (LATEINIT - 107)) | (1L << (VARARG - 107)) | (1L << (NOINLINE - 107)) | (1L << (CROSSINLINE - 107)) | (1L << (EXPECT - 107)) | (1L << (ACTUAL - 107)))) != 0)) { + { + setState(508); + modifiers(); + } + } + + setState(522); + _errHandler.sync(this); + switch (_input.LA(1)) { + case CLASS: + { + setState(511); + match(CLASS); + } + break; + case INTERFACE: + case FUN: + { + setState(519); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==FUN) { + { + setState(512); + match(FUN); + setState(516); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(513); + match(NL); + } + } + setState(518); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + + setState(521); + match(INTERFACE); + } + break; + default: + throw new NoViableAltException(this); + } + setState(527); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(524); + match(NL); + } + } + setState(529); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(530); + simpleIdentifier(); + setState(538); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,33,_ctx) ) { + case 1: + { + setState(534); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(531); + match(NL); + } + } + setState(536); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(537); + typeParameters(); + } + break; + } + setState(547); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,35,_ctx) ) { + case 1: + { + setState(543); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(540); + match(NL); + } + } + setState(545); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(546); + primaryConstructor(); + } + break; + } + setState(563); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,38,_ctx) ) { + case 1: + { + setState(552); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(549); + match(NL); + } + } + setState(554); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(555); + match(COLON); + setState(559); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,37,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(556); + match(NL); + } + } + } + setState(561); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,37,_ctx); + } + setState(562); + delegationSpecifiers(); + } + break; + } + setState(572); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,40,_ctx) ) { + case 1: + { + setState(568); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(565); + match(NL); + } + } + setState(570); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(571); + typeConstraints(); + } + break; + } + setState(588); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,43,_ctx) ) { + case 1: + { + setState(577); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(574); + match(NL); + } + } + setState(579); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(580); + classBody(); + } + break; + case 2: + { + setState(584); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(581); + match(NL); + } + } + setState(586); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(587); + enumClassBody(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class PrimaryConstructorContext extends ParserRuleContext { + public ClassParametersContext classParameters() { + return getRuleContext(ClassParametersContext.class,0); + } + public TerminalNode CONSTRUCTOR() { return getToken(KotlinParser.CONSTRUCTOR, 0); } + public ModifiersContext modifiers() { + return getRuleContext(ModifiersContext.class,0); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public PrimaryConstructorContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_primaryConstructor; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterPrimaryConstructor(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitPrimaryConstructor(this); + } + } + + public final PrimaryConstructorContext primaryConstructor() throws RecognitionException { + PrimaryConstructorContext _localctx = new PrimaryConstructorContext(_ctx, getState()); + enterRule(_localctx, 24, RULE_primaryConstructor); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(600); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==AT_NO_WS || _la==AT_PRE_WS || ((((_la - 79)) & ~0x3f) == 0 && ((1L << (_la - 79)) & ((1L << (CONSTRUCTOR - 79)) | (1L << (PUBLIC - 79)) | (1L << (PRIVATE - 79)) | (1L << (PROTECTED - 79)) | (1L << (INTERNAL - 79)) | (1L << (ENUM - 79)) | (1L << (SEALED - 79)) | (1L << (ANNOTATION - 79)) | (1L << (DATA - 79)) | (1L << (INNER - 79)) | (1L << (VALUE - 79)) | (1L << (TAILREC - 79)) | (1L << (OPERATOR - 79)) | (1L << (INLINE - 79)) | (1L << (INFIX - 79)) | (1L << (EXTERNAL - 79)) | (1L << (SUSPEND - 79)) | (1L << (OVERRIDE - 79)) | (1L << (ABSTRACT - 79)) | (1L << (FINAL - 79)) | (1L << (OPEN - 79)) | (1L << (CONST - 79)) | (1L << (LATEINIT - 79)) | (1L << (VARARG - 79)) | (1L << (NOINLINE - 79)) | (1L << (CROSSINLINE - 79)) | (1L << (EXPECT - 79)) | (1L << (ACTUAL - 79)))) != 0)) { + { + setState(591); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==AT_NO_WS || _la==AT_PRE_WS || ((((_la - 107)) & ~0x3f) == 0 && ((1L << (_la - 107)) & ((1L << (PUBLIC - 107)) | (1L << (PRIVATE - 107)) | (1L << (PROTECTED - 107)) | (1L << (INTERNAL - 107)) | (1L << (ENUM - 107)) | (1L << (SEALED - 107)) | (1L << (ANNOTATION - 107)) | (1L << (DATA - 107)) | (1L << (INNER - 107)) | (1L << (VALUE - 107)) | (1L << (TAILREC - 107)) | (1L << (OPERATOR - 107)) | (1L << (INLINE - 107)) | (1L << (INFIX - 107)) | (1L << (EXTERNAL - 107)) | (1L << (SUSPEND - 107)) | (1L << (OVERRIDE - 107)) | (1L << (ABSTRACT - 107)) | (1L << (FINAL - 107)) | (1L << (OPEN - 107)) | (1L << (CONST - 107)) | (1L << (LATEINIT - 107)) | (1L << (VARARG - 107)) | (1L << (NOINLINE - 107)) | (1L << (CROSSINLINE - 107)) | (1L << (EXPECT - 107)) | (1L << (ACTUAL - 107)))) != 0)) { + { + setState(590); + modifiers(); + } + } + + setState(593); + match(CONSTRUCTOR); + setState(597); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(594); + match(NL); + } + } + setState(599); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + + setState(602); + classParameters(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ClassBodyContext extends ParserRuleContext { + public TerminalNode LCURL() { return getToken(KotlinParser.LCURL, 0); } + public ClassMemberDeclarationsContext classMemberDeclarations() { + return getRuleContext(ClassMemberDeclarationsContext.class,0); + } + public TerminalNode RCURL() { return getToken(KotlinParser.RCURL, 0); } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public ClassBodyContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_classBody; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterClassBody(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitClassBody(this); + } + } + + public final ClassBodyContext classBody() throws RecognitionException { + ClassBodyContext _localctx = new ClassBodyContext(_ctx, getState()); + enterRule(_localctx, 26, RULE_classBody); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(604); + match(LCURL); + setState(608); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,47,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(605); + match(NL); + } + } + } + setState(610); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,47,_ctx); + } + setState(611); + classMemberDeclarations(); + setState(615); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(612); + match(NL); + } + } + setState(617); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(618); + match(RCURL); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ClassParametersContext extends ParserRuleContext { + public TerminalNode LPAREN() { return getToken(KotlinParser.LPAREN, 0); } + public TerminalNode RPAREN() { return getToken(KotlinParser.RPAREN, 0); } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public List classParameter() { + return getRuleContexts(ClassParameterContext.class); + } + public ClassParameterContext classParameter(int i) { + return getRuleContext(ClassParameterContext.class,i); + } + public List COMMA() { return getTokens(KotlinParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(KotlinParser.COMMA, i); + } + public ClassParametersContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_classParameters; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterClassParameters(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitClassParameters(this); + } + } + + public final ClassParametersContext classParameters() throws RecognitionException { + ClassParametersContext _localctx = new ClassParametersContext(_ctx, getState()); + enterRule(_localctx, 28, RULE_classParameters); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(620); + match(LPAREN); + setState(624); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,49,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(621); + match(NL); + } + } + } + setState(626); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,49,_ctx); + } + setState(656); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,55,_ctx) ) { + case 1: + { + setState(627); + classParameter(); + setState(644); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,52,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(631); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(628); + match(NL); + } + } + setState(633); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(634); + match(COMMA); + setState(638); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,51,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(635); + match(NL); + } + } + } + setState(640); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,51,_ctx); + } + setState(641); + classParameter(); + } + } + } + setState(646); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,52,_ctx); + } + setState(654); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,54,_ctx) ) { + case 1: + { + setState(650); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(647); + match(NL); + } + } + setState(652); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(653); + match(COMMA); + } + break; + } + } + break; + } + setState(661); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(658); + match(NL); + } + } + setState(663); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(664); + match(RPAREN); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ClassParameterContext extends ParserRuleContext { + public SimpleIdentifierContext simpleIdentifier() { + return getRuleContext(SimpleIdentifierContext.class,0); + } + public TerminalNode COLON() { return getToken(KotlinParser.COLON, 0); } + public TypeContext type() { + return getRuleContext(TypeContext.class,0); + } + public ModifiersContext modifiers() { + return getRuleContext(ModifiersContext.class,0); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public TerminalNode ASSIGNMENT() { return getToken(KotlinParser.ASSIGNMENT, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode VAL() { return getToken(KotlinParser.VAL, 0); } + public TerminalNode VAR() { return getToken(KotlinParser.VAR, 0); } + public ClassParameterContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_classParameter; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterClassParameter(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitClassParameter(this); + } + } + + public final ClassParameterContext classParameter() throws RecognitionException { + ClassParameterContext _localctx = new ClassParameterContext(_ctx, getState()); + enterRule(_localctx, 30, RULE_classParameter); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(667); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,57,_ctx) ) { + case 1: + { + setState(666); + modifiers(); + } + break; + } + setState(670); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==VAL || _la==VAR) { + { + setState(669); + _la = _input.LA(1); + if ( !(_la==VAL || _la==VAR) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + setState(675); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(672); + match(NL); + } + } + setState(677); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(678); + simpleIdentifier(); + setState(679); + match(COLON); + setState(683); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(680); + match(NL); + } + } + setState(685); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(686); + type(); + setState(701); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,63,_ctx) ) { + case 1: + { + setState(690); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(687); + match(NL); + } + } + setState(692); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(693); + match(ASSIGNMENT); + setState(697); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(694); + match(NL); + } + } + setState(699); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(700); + expression(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class DelegationSpecifiersContext extends ParserRuleContext { + public List annotatedDelegationSpecifier() { + return getRuleContexts(AnnotatedDelegationSpecifierContext.class); + } + public AnnotatedDelegationSpecifierContext annotatedDelegationSpecifier(int i) { + return getRuleContext(AnnotatedDelegationSpecifierContext.class,i); + } + public List COMMA() { return getTokens(KotlinParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(KotlinParser.COMMA, i); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public DelegationSpecifiersContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_delegationSpecifiers; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterDelegationSpecifiers(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitDelegationSpecifiers(this); + } + } + + public final DelegationSpecifiersContext delegationSpecifiers() throws RecognitionException { + DelegationSpecifiersContext _localctx = new DelegationSpecifiersContext(_ctx, getState()); + enterRule(_localctx, 32, RULE_delegationSpecifiers); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(703); + annotatedDelegationSpecifier(); + setState(720); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,66,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(707); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(704); + match(NL); + } + } + setState(709); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(710); + match(COMMA); + setState(714); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,65,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(711); + match(NL); + } + } + } + setState(716); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,65,_ctx); + } + setState(717); + annotatedDelegationSpecifier(); + } + } + } + setState(722); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,66,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class DelegationSpecifierContext extends ParserRuleContext { + public ConstructorInvocationContext constructorInvocation() { + return getRuleContext(ConstructorInvocationContext.class,0); + } + public ExplicitDelegationContext explicitDelegation() { + return getRuleContext(ExplicitDelegationContext.class,0); + } + public UserTypeContext userType() { + return getRuleContext(UserTypeContext.class,0); + } + public FunctionTypeContext functionType() { + return getRuleContext(FunctionTypeContext.class,0); + } + public DelegationSpecifierContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_delegationSpecifier; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterDelegationSpecifier(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitDelegationSpecifier(this); + } + } + + public final DelegationSpecifierContext delegationSpecifier() throws RecognitionException { + DelegationSpecifierContext _localctx = new DelegationSpecifierContext(_ctx, getState()); + enterRule(_localctx, 34, RULE_delegationSpecifier); + try { + setState(727); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,67,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(723); + constructorInvocation(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(724); + explicitDelegation(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(725); + userType(); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(726); + functionType(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ConstructorInvocationContext extends ParserRuleContext { + public UserTypeContext userType() { + return getRuleContext(UserTypeContext.class,0); + } + public ValueArgumentsContext valueArguments() { + return getRuleContext(ValueArgumentsContext.class,0); + } + public ConstructorInvocationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_constructorInvocation; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterConstructorInvocation(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitConstructorInvocation(this); + } + } + + public final ConstructorInvocationContext constructorInvocation() throws RecognitionException { + ConstructorInvocationContext _localctx = new ConstructorInvocationContext(_ctx, getState()); + enterRule(_localctx, 36, RULE_constructorInvocation); + try { + enterOuterAlt(_localctx, 1); + { + setState(729); + userType(); + setState(730); + valueArguments(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class AnnotatedDelegationSpecifierContext extends ParserRuleContext { + public DelegationSpecifierContext delegationSpecifier() { + return getRuleContext(DelegationSpecifierContext.class,0); + } + public List annotation() { + return getRuleContexts(AnnotationContext.class); + } + public AnnotationContext annotation(int i) { + return getRuleContext(AnnotationContext.class,i); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public AnnotatedDelegationSpecifierContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_annotatedDelegationSpecifier; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterAnnotatedDelegationSpecifier(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitAnnotatedDelegationSpecifier(this); + } + } + + public final AnnotatedDelegationSpecifierContext annotatedDelegationSpecifier() throws RecognitionException { + AnnotatedDelegationSpecifierContext _localctx = new AnnotatedDelegationSpecifierContext(_ctx, getState()); + enterRule(_localctx, 38, RULE_annotatedDelegationSpecifier); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(735); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,68,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(732); + annotation(); + } + } + } + setState(737); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,68,_ctx); + } + setState(741); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(738); + match(NL); + } + } + setState(743); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(744); + delegationSpecifier(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ExplicitDelegationContext extends ParserRuleContext { + public TerminalNode BY() { return getToken(KotlinParser.BY, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public UserTypeContext userType() { + return getRuleContext(UserTypeContext.class,0); + } + public FunctionTypeContext functionType() { + return getRuleContext(FunctionTypeContext.class,0); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public ExplicitDelegationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_explicitDelegation; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterExplicitDelegation(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitExplicitDelegation(this); + } + } + + public final ExplicitDelegationContext explicitDelegation() throws RecognitionException { + ExplicitDelegationContext _localctx = new ExplicitDelegationContext(_ctx, getState()); + enterRule(_localctx, 40, RULE_explicitDelegation); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(748); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,70,_ctx) ) { + case 1: + { + setState(746); + userType(); + } + break; + case 2: + { + setState(747); + functionType(); + } + break; + } + setState(753); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(750); + match(NL); + } + } + setState(755); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(756); + match(BY); + setState(760); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(757); + match(NL); + } + } + setState(762); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(763); + expression(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TypeParametersContext extends ParserRuleContext { + public TerminalNode LANGLE() { return getToken(KotlinParser.LANGLE, 0); } + public List typeParameter() { + return getRuleContexts(TypeParameterContext.class); + } + public TypeParameterContext typeParameter(int i) { + return getRuleContext(TypeParameterContext.class,i); + } + public TerminalNode RANGLE() { return getToken(KotlinParser.RANGLE, 0); } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public List COMMA() { return getTokens(KotlinParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(KotlinParser.COMMA, i); + } + public TypeParametersContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_typeParameters; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterTypeParameters(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitTypeParameters(this); + } + } + + public final TypeParametersContext typeParameters() throws RecognitionException { + TypeParametersContext _localctx = new TypeParametersContext(_ctx, getState()); + enterRule(_localctx, 42, RULE_typeParameters); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(765); + match(LANGLE); + setState(769); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,73,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(766); + match(NL); + } + } + } + setState(771); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,73,_ctx); + } + setState(772); + typeParameter(); + setState(789); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,76,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(776); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(773); + match(NL); + } + } + setState(778); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(779); + match(COMMA); + setState(783); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,75,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(780); + match(NL); + } + } + } + setState(785); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,75,_ctx); + } + setState(786); + typeParameter(); + } + } + } + setState(791); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,76,_ctx); + } + setState(799); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,78,_ctx) ) { + case 1: + { + setState(795); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(792); + match(NL); + } + } + setState(797); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(798); + match(COMMA); + } + break; + } + setState(804); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(801); + match(NL); + } + } + setState(806); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(807); + match(RANGLE); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TypeParameterContext extends ParserRuleContext { + public SimpleIdentifierContext simpleIdentifier() { + return getRuleContext(SimpleIdentifierContext.class,0); + } + public TypeParameterModifiersContext typeParameterModifiers() { + return getRuleContext(TypeParameterModifiersContext.class,0); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public TerminalNode COLON() { return getToken(KotlinParser.COLON, 0); } + public TypeContext type() { + return getRuleContext(TypeContext.class,0); + } + public TypeParameterContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_typeParameter; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterTypeParameter(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitTypeParameter(this); + } + } + + public final TypeParameterContext typeParameter() throws RecognitionException { + TypeParameterContext _localctx = new TypeParameterContext(_ctx, getState()); + enterRule(_localctx, 44, RULE_typeParameter); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(810); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,80,_ctx) ) { + case 1: + { + setState(809); + typeParameterModifiers(); + } + break; + } + setState(815); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(812); + match(NL); + } + } + setState(817); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(818); + simpleIdentifier(); + setState(833); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,84,_ctx) ) { + case 1: + { + setState(822); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(819); + match(NL); + } + } + setState(824); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(825); + match(COLON); + setState(829); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(826); + match(NL); + } + } + setState(831); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(832); + type(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TypeConstraintsContext extends ParserRuleContext { + public TerminalNode WHERE() { return getToken(KotlinParser.WHERE, 0); } + public List typeConstraint() { + return getRuleContexts(TypeConstraintContext.class); + } + public TypeConstraintContext typeConstraint(int i) { + return getRuleContext(TypeConstraintContext.class,i); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public List COMMA() { return getTokens(KotlinParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(KotlinParser.COMMA, i); + } + public TypeConstraintsContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_typeConstraints; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterTypeConstraints(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitTypeConstraints(this); + } + } + + public final TypeConstraintsContext typeConstraints() throws RecognitionException { + TypeConstraintsContext _localctx = new TypeConstraintsContext(_ctx, getState()); + enterRule(_localctx, 46, RULE_typeConstraints); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(835); + match(WHERE); + setState(839); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(836); + match(NL); + } + } + setState(841); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(842); + typeConstraint(); + setState(859); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,88,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(846); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(843); + match(NL); + } + } + setState(848); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(849); + match(COMMA); + setState(853); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(850); + match(NL); + } + } + setState(855); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(856); + typeConstraint(); + } + } + } + setState(861); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,88,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TypeConstraintContext extends ParserRuleContext { + public SimpleIdentifierContext simpleIdentifier() { + return getRuleContext(SimpleIdentifierContext.class,0); + } + public TerminalNode COLON() { return getToken(KotlinParser.COLON, 0); } + public TypeContext type() { + return getRuleContext(TypeContext.class,0); + } + public List annotation() { + return getRuleContexts(AnnotationContext.class); + } + public AnnotationContext annotation(int i) { + return getRuleContext(AnnotationContext.class,i); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public TypeConstraintContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_typeConstraint; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterTypeConstraint(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitTypeConstraint(this); + } + } + + public final TypeConstraintContext typeConstraint() throws RecognitionException { + TypeConstraintContext _localctx = new TypeConstraintContext(_ctx, getState()); + enterRule(_localctx, 48, RULE_typeConstraint); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(865); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==AT_NO_WS || _la==AT_PRE_WS) { + { + { + setState(862); + annotation(); + } + } + setState(867); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(868); + simpleIdentifier(); + setState(872); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(869); + match(NL); + } + } + setState(874); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(875); + match(COLON); + setState(879); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(876); + match(NL); + } + } + setState(881); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(882); + type(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ClassMemberDeclarationsContext extends ParserRuleContext { + public List classMemberDeclaration() { + return getRuleContexts(ClassMemberDeclarationContext.class); + } + public ClassMemberDeclarationContext classMemberDeclaration(int i) { + return getRuleContext(ClassMemberDeclarationContext.class,i); + } + public List semis() { + return getRuleContexts(SemisContext.class); + } + public SemisContext semis(int i) { + return getRuleContext(SemisContext.class,i); + } + public ClassMemberDeclarationsContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_classMemberDeclarations; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterClassMemberDeclarations(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitClassMemberDeclarations(this); + } + } + + public final ClassMemberDeclarationsContext classMemberDeclarations() throws RecognitionException { + ClassMemberDeclarationsContext _localctx = new ClassMemberDeclarationsContext(_ctx, getState()); + enterRule(_localctx, 50, RULE_classMemberDeclarations); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(890); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==AT_NO_WS || _la==AT_PRE_WS || ((((_la - 72)) & ~0x3f) == 0 && ((1L << (_la - 72)) & ((1L << (CLASS - 72)) | (1L << (INTERFACE - 72)) | (1L << (FUN - 72)) | (1L << (OBJECT - 72)) | (1L << (VAL - 72)) | (1L << (VAR - 72)) | (1L << (TYPE_ALIAS - 72)) | (1L << (CONSTRUCTOR - 72)) | (1L << (COMPANION - 72)) | (1L << (INIT - 72)) | (1L << (PUBLIC - 72)) | (1L << (PRIVATE - 72)) | (1L << (PROTECTED - 72)) | (1L << (INTERNAL - 72)) | (1L << (ENUM - 72)) | (1L << (SEALED - 72)) | (1L << (ANNOTATION - 72)) | (1L << (DATA - 72)) | (1L << (INNER - 72)) | (1L << (VALUE - 72)) | (1L << (TAILREC - 72)) | (1L << (OPERATOR - 72)) | (1L << (INLINE - 72)) | (1L << (INFIX - 72)) | (1L << (EXTERNAL - 72)) | (1L << (SUSPEND - 72)) | (1L << (OVERRIDE - 72)) | (1L << (ABSTRACT - 72)) | (1L << (FINAL - 72)) | (1L << (OPEN - 72)) | (1L << (CONST - 72)) | (1L << (LATEINIT - 72)) | (1L << (VARARG - 72)) | (1L << (NOINLINE - 72)) | (1L << (CROSSINLINE - 72)) | (1L << (EXPECT - 72)) | (1L << (ACTUAL - 72)))) != 0)) { + { + { + setState(884); + classMemberDeclaration(); + setState(886); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,92,_ctx) ) { + case 1: + { + setState(885); + semis(); + } + break; + } + } + } + setState(892); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ClassMemberDeclarationContext extends ParserRuleContext { + public DeclarationContext declaration() { + return getRuleContext(DeclarationContext.class,0); + } + public CompanionObjectContext companionObject() { + return getRuleContext(CompanionObjectContext.class,0); + } + public AnonymousInitializerContext anonymousInitializer() { + return getRuleContext(AnonymousInitializerContext.class,0); + } + public SecondaryConstructorContext secondaryConstructor() { + return getRuleContext(SecondaryConstructorContext.class,0); + } + public ClassMemberDeclarationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_classMemberDeclaration; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterClassMemberDeclaration(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitClassMemberDeclaration(this); + } + } + + public final ClassMemberDeclarationContext classMemberDeclaration() throws RecognitionException { + ClassMemberDeclarationContext _localctx = new ClassMemberDeclarationContext(_ctx, getState()); + enterRule(_localctx, 52, RULE_classMemberDeclaration); + try { + setState(897); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,94,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(893); + declaration(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(894); + companionObject(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(895); + anonymousInitializer(); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(896); + secondaryConstructor(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class AnonymousInitializerContext extends ParserRuleContext { + public TerminalNode INIT() { return getToken(KotlinParser.INIT, 0); } + public BlockContext block() { + return getRuleContext(BlockContext.class,0); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public AnonymousInitializerContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_anonymousInitializer; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterAnonymousInitializer(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitAnonymousInitializer(this); + } + } + + public final AnonymousInitializerContext anonymousInitializer() throws RecognitionException { + AnonymousInitializerContext _localctx = new AnonymousInitializerContext(_ctx, getState()); + enterRule(_localctx, 54, RULE_anonymousInitializer); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(899); + match(INIT); + setState(903); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(900); + match(NL); + } + } + setState(905); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(906); + block(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class CompanionObjectContext extends ParserRuleContext { + public TerminalNode COMPANION() { return getToken(KotlinParser.COMPANION, 0); } + public TerminalNode OBJECT() { return getToken(KotlinParser.OBJECT, 0); } + public ModifiersContext modifiers() { + return getRuleContext(ModifiersContext.class,0); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public SimpleIdentifierContext simpleIdentifier() { + return getRuleContext(SimpleIdentifierContext.class,0); + } + public TerminalNode COLON() { return getToken(KotlinParser.COLON, 0); } + public DelegationSpecifiersContext delegationSpecifiers() { + return getRuleContext(DelegationSpecifiersContext.class,0); + } + public ClassBodyContext classBody() { + return getRuleContext(ClassBodyContext.class,0); + } + public CompanionObjectContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_companionObject; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterCompanionObject(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitCompanionObject(this); + } + } + + public final CompanionObjectContext companionObject() throws RecognitionException { + CompanionObjectContext _localctx = new CompanionObjectContext(_ctx, getState()); + enterRule(_localctx, 56, RULE_companionObject); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(909); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==AT_NO_WS || _la==AT_PRE_WS || ((((_la - 107)) & ~0x3f) == 0 && ((1L << (_la - 107)) & ((1L << (PUBLIC - 107)) | (1L << (PRIVATE - 107)) | (1L << (PROTECTED - 107)) | (1L << (INTERNAL - 107)) | (1L << (ENUM - 107)) | (1L << (SEALED - 107)) | (1L << (ANNOTATION - 107)) | (1L << (DATA - 107)) | (1L << (INNER - 107)) | (1L << (VALUE - 107)) | (1L << (TAILREC - 107)) | (1L << (OPERATOR - 107)) | (1L << (INLINE - 107)) | (1L << (INFIX - 107)) | (1L << (EXTERNAL - 107)) | (1L << (SUSPEND - 107)) | (1L << (OVERRIDE - 107)) | (1L << (ABSTRACT - 107)) | (1L << (FINAL - 107)) | (1L << (OPEN - 107)) | (1L << (CONST - 107)) | (1L << (LATEINIT - 107)) | (1L << (VARARG - 107)) | (1L << (NOINLINE - 107)) | (1L << (CROSSINLINE - 107)) | (1L << (EXPECT - 107)) | (1L << (ACTUAL - 107)))) != 0)) { + { + setState(908); + modifiers(); + } + } + + setState(911); + match(COMPANION); + setState(915); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(912); + match(NL); + } + } + setState(917); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(918); + match(OBJECT); + setState(926); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,99,_ctx) ) { + case 1: + { + setState(922); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(919); + match(NL); + } + } + setState(924); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(925); + simpleIdentifier(); + } + break; + } + setState(942); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,102,_ctx) ) { + case 1: + { + setState(931); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(928); + match(NL); + } + } + setState(933); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(934); + match(COLON); + setState(938); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,101,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(935); + match(NL); + } + } + } + setState(940); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,101,_ctx); + } + setState(941); + delegationSpecifiers(); + } + break; + } + setState(951); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,104,_ctx) ) { + case 1: + { + setState(947); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(944); + match(NL); + } + } + setState(949); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(950); + classBody(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class FunctionValueParametersContext extends ParserRuleContext { + public TerminalNode LPAREN() { return getToken(KotlinParser.LPAREN, 0); } + public TerminalNode RPAREN() { return getToken(KotlinParser.RPAREN, 0); } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public List functionValueParameter() { + return getRuleContexts(FunctionValueParameterContext.class); + } + public FunctionValueParameterContext functionValueParameter(int i) { + return getRuleContext(FunctionValueParameterContext.class,i); + } + public List COMMA() { return getTokens(KotlinParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(KotlinParser.COMMA, i); + } + public FunctionValueParametersContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_functionValueParameters; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterFunctionValueParameters(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitFunctionValueParameters(this); + } + } + + public final FunctionValueParametersContext functionValueParameters() throws RecognitionException { + FunctionValueParametersContext _localctx = new FunctionValueParametersContext(_ctx, getState()); + enterRule(_localctx, 58, RULE_functionValueParameters); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(953); + match(LPAREN); + setState(957); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,105,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(954); + match(NL); + } + } + } + setState(959); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,105,_ctx); + } + setState(989); + _errHandler.sync(this); + _la = _input.LA(1); + if (((((_la - 40)) & ~0x3f) == 0 && ((1L << (_la - 40)) & ((1L << (AT_NO_WS - 40)) | (1L << (AT_PRE_WS - 40)) | (1L << (FILE - 40)) | (1L << (FIELD - 40)) | (1L << (PROPERTY - 40)) | (1L << (GET - 40)) | (1L << (SET - 40)) | (1L << (RECEIVER - 40)) | (1L << (PARAM - 40)) | (1L << (SETPARAM - 40)) | (1L << (DELEGATE - 40)) | (1L << (IMPORT - 40)) | (1L << (CONSTRUCTOR - 40)) | (1L << (BY - 40)) | (1L << (COMPANION - 40)) | (1L << (INIT - 40)) | (1L << (WHERE - 40)) | (1L << (CATCH - 40)) | (1L << (FINALLY - 40)))) != 0) || ((((_la - 105)) & ~0x3f) == 0 && ((1L << (_la - 105)) & ((1L << (OUT - 105)) | (1L << (DYNAMIC - 105)) | (1L << (PUBLIC - 105)) | (1L << (PRIVATE - 105)) | (1L << (PROTECTED - 105)) | (1L << (INTERNAL - 105)) | (1L << (ENUM - 105)) | (1L << (SEALED - 105)) | (1L << (ANNOTATION - 105)) | (1L << (DATA - 105)) | (1L << (INNER - 105)) | (1L << (VALUE - 105)) | (1L << (TAILREC - 105)) | (1L << (OPERATOR - 105)) | (1L << (INLINE - 105)) | (1L << (INFIX - 105)) | (1L << (EXTERNAL - 105)) | (1L << (SUSPEND - 105)) | (1L << (OVERRIDE - 105)) | (1L << (ABSTRACT - 105)) | (1L << (FINAL - 105)) | (1L << (OPEN - 105)) | (1L << (CONST - 105)) | (1L << (LATEINIT - 105)) | (1L << (VARARG - 105)) | (1L << (NOINLINE - 105)) | (1L << (CROSSINLINE - 105)) | (1L << (REIFIED - 105)) | (1L << (EXPECT - 105)) | (1L << (ACTUAL - 105)) | (1L << (Identifier - 105)))) != 0)) { + { + setState(960); + functionValueParameter(); + setState(977); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,108,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(964); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(961); + match(NL); + } + } + setState(966); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(967); + match(COMMA); + setState(971); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(968); + match(NL); + } + } + setState(973); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(974); + functionValueParameter(); + } + } + } + setState(979); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,108,_ctx); + } + setState(987); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,110,_ctx) ) { + case 1: + { + setState(983); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(980); + match(NL); + } + } + setState(985); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(986); + match(COMMA); + } + break; + } + } + } + + setState(994); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(991); + match(NL); + } + } + setState(996); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(997); + match(RPAREN); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class FunctionValueParameterContext extends ParserRuleContext { + public ParameterContext parameter() { + return getRuleContext(ParameterContext.class,0); + } + public ParameterModifiersContext parameterModifiers() { + return getRuleContext(ParameterModifiersContext.class,0); + } + public TerminalNode ASSIGNMENT() { return getToken(KotlinParser.ASSIGNMENT, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public FunctionValueParameterContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_functionValueParameter; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterFunctionValueParameter(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitFunctionValueParameter(this); + } + } + + public final FunctionValueParameterContext functionValueParameter() throws RecognitionException { + FunctionValueParameterContext _localctx = new FunctionValueParameterContext(_ctx, getState()); + enterRule(_localctx, 60, RULE_functionValueParameter); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1000); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,113,_ctx) ) { + case 1: + { + setState(999); + parameterModifiers(); + } + break; + } + setState(1002); + parameter(); + setState(1017); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,116,_ctx) ) { + case 1: + { + setState(1006); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1003); + match(NL); + } + } + setState(1008); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1009); + match(ASSIGNMENT); + setState(1013); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1010); + match(NL); + } + } + setState(1015); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1016); + expression(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class FunctionDeclarationContext extends ParserRuleContext { + public TerminalNode FUN() { return getToken(KotlinParser.FUN, 0); } + public SimpleIdentifierContext simpleIdentifier() { + return getRuleContext(SimpleIdentifierContext.class,0); + } + public FunctionValueParametersContext functionValueParameters() { + return getRuleContext(FunctionValueParametersContext.class,0); + } + public ModifiersContext modifiers() { + return getRuleContext(ModifiersContext.class,0); + } + public TypeParametersContext typeParameters() { + return getRuleContext(TypeParametersContext.class,0); + } + public ReceiverTypeContext receiverType() { + return getRuleContext(ReceiverTypeContext.class,0); + } + public TerminalNode DOT() { return getToken(KotlinParser.DOT, 0); } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public TerminalNode COLON() { return getToken(KotlinParser.COLON, 0); } + public TypeContext type() { + return getRuleContext(TypeContext.class,0); + } + public TypeConstraintsContext typeConstraints() { + return getRuleContext(TypeConstraintsContext.class,0); + } + public FunctionBodyContext functionBody() { + return getRuleContext(FunctionBodyContext.class,0); + } + public FunctionDeclarationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_functionDeclaration; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterFunctionDeclaration(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitFunctionDeclaration(this); + } + } + + public final FunctionDeclarationContext functionDeclaration() throws RecognitionException { + FunctionDeclarationContext _localctx = new FunctionDeclarationContext(_ctx, getState()); + enterRule(_localctx, 62, RULE_functionDeclaration); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1020); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==AT_NO_WS || _la==AT_PRE_WS || ((((_la - 107)) & ~0x3f) == 0 && ((1L << (_la - 107)) & ((1L << (PUBLIC - 107)) | (1L << (PRIVATE - 107)) | (1L << (PROTECTED - 107)) | (1L << (INTERNAL - 107)) | (1L << (ENUM - 107)) | (1L << (SEALED - 107)) | (1L << (ANNOTATION - 107)) | (1L << (DATA - 107)) | (1L << (INNER - 107)) | (1L << (VALUE - 107)) | (1L << (TAILREC - 107)) | (1L << (OPERATOR - 107)) | (1L << (INLINE - 107)) | (1L << (INFIX - 107)) | (1L << (EXTERNAL - 107)) | (1L << (SUSPEND - 107)) | (1L << (OVERRIDE - 107)) | (1L << (ABSTRACT - 107)) | (1L << (FINAL - 107)) | (1L << (OPEN - 107)) | (1L << (CONST - 107)) | (1L << (LATEINIT - 107)) | (1L << (VARARG - 107)) | (1L << (NOINLINE - 107)) | (1L << (CROSSINLINE - 107)) | (1L << (EXPECT - 107)) | (1L << (ACTUAL - 107)))) != 0)) { + { + setState(1019); + modifiers(); + } + } + + setState(1022); + match(FUN); + setState(1030); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,119,_ctx) ) { + case 1: + { + setState(1026); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1023); + match(NL); + } + } + setState(1028); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1029); + typeParameters(); + } + break; + } + setState(1047); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,122,_ctx) ) { + case 1: + { + setState(1035); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1032); + match(NL); + } + } + setState(1037); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1038); + receiverType(); + setState(1042); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1039); + match(NL); + } + } + setState(1044); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1045); + match(DOT); + } + break; + } + setState(1052); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1049); + match(NL); + } + } + setState(1054); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1055); + simpleIdentifier(); + setState(1059); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1056); + match(NL); + } + } + setState(1061); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1062); + functionValueParameters(); + setState(1077); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,127,_ctx) ) { + case 1: + { + setState(1066); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1063); + match(NL); + } + } + setState(1068); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1069); + match(COLON); + setState(1073); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1070); + match(NL); + } + } + setState(1075); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1076); + type(); + } + break; + } + setState(1086); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,129,_ctx) ) { + case 1: + { + setState(1082); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1079); + match(NL); + } + } + setState(1084); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1085); + typeConstraints(); + } + break; + } + setState(1095); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,131,_ctx) ) { + case 1: + { + setState(1091); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1088); + match(NL); + } + } + setState(1093); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1094); + functionBody(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class FunctionBodyContext extends ParserRuleContext { + public BlockContext block() { + return getRuleContext(BlockContext.class,0); + } + public TerminalNode ASSIGNMENT() { return getToken(KotlinParser.ASSIGNMENT, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public FunctionBodyContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_functionBody; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterFunctionBody(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitFunctionBody(this); + } + } + + public final FunctionBodyContext functionBody() throws RecognitionException { + FunctionBodyContext _localctx = new FunctionBodyContext(_ctx, getState()); + enterRule(_localctx, 64, RULE_functionBody); + int _la; + try { + setState(1106); + _errHandler.sync(this); + switch (_input.LA(1)) { + case LCURL: + enterOuterAlt(_localctx, 1); + { + setState(1097); + block(); + } + break; + case ASSIGNMENT: + enterOuterAlt(_localctx, 2); + { + setState(1098); + match(ASSIGNMENT); + setState(1102); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1099); + match(NL); + } + } + setState(1104); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1105); + expression(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class VariableDeclarationContext extends ParserRuleContext { + public SimpleIdentifierContext simpleIdentifier() { + return getRuleContext(SimpleIdentifierContext.class,0); + } + public List annotation() { + return getRuleContexts(AnnotationContext.class); + } + public AnnotationContext annotation(int i) { + return getRuleContext(AnnotationContext.class,i); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public TerminalNode COLON() { return getToken(KotlinParser.COLON, 0); } + public TypeContext type() { + return getRuleContext(TypeContext.class,0); + } + public VariableDeclarationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_variableDeclaration; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterVariableDeclaration(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitVariableDeclaration(this); + } + } + + public final VariableDeclarationContext variableDeclaration() throws RecognitionException { + VariableDeclarationContext _localctx = new VariableDeclarationContext(_ctx, getState()); + enterRule(_localctx, 66, RULE_variableDeclaration); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1111); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==AT_NO_WS || _la==AT_PRE_WS) { + { + { + setState(1108); + annotation(); + } + } + setState(1113); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1117); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1114); + match(NL); + } + } + setState(1119); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1120); + simpleIdentifier(); + setState(1135); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,138,_ctx) ) { + case 1: + { + setState(1124); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1121); + match(NL); + } + } + setState(1126); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1127); + match(COLON); + setState(1131); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1128); + match(NL); + } + } + setState(1133); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1134); + type(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class MultiVariableDeclarationContext extends ParserRuleContext { + public TerminalNode LPAREN() { return getToken(KotlinParser.LPAREN, 0); } + public List variableDeclaration() { + return getRuleContexts(VariableDeclarationContext.class); + } + public VariableDeclarationContext variableDeclaration(int i) { + return getRuleContext(VariableDeclarationContext.class,i); + } + public TerminalNode RPAREN() { return getToken(KotlinParser.RPAREN, 0); } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public List COMMA() { return getTokens(KotlinParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(KotlinParser.COMMA, i); + } + public MultiVariableDeclarationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_multiVariableDeclaration; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterMultiVariableDeclaration(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitMultiVariableDeclaration(this); + } + } + + public final MultiVariableDeclarationContext multiVariableDeclaration() throws RecognitionException { + MultiVariableDeclarationContext _localctx = new MultiVariableDeclarationContext(_ctx, getState()); + enterRule(_localctx, 68, RULE_multiVariableDeclaration); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(1137); + match(LPAREN); + setState(1141); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,139,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(1138); + match(NL); + } + } + } + setState(1143); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,139,_ctx); + } + setState(1144); + variableDeclaration(); + setState(1161); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,142,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(1148); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1145); + match(NL); + } + } + setState(1150); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1151); + match(COMMA); + setState(1155); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,141,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(1152); + match(NL); + } + } + } + setState(1157); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,141,_ctx); + } + setState(1158); + variableDeclaration(); + } + } + } + setState(1163); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,142,_ctx); + } + setState(1171); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,144,_ctx) ) { + case 1: + { + setState(1167); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1164); + match(NL); + } + } + setState(1169); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1170); + match(COMMA); + } + break; + } + setState(1176); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1173); + match(NL); + } + } + setState(1178); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1179); + match(RPAREN); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class PropertyDeclarationContext extends ParserRuleContext { + public TerminalNode VAL() { return getToken(KotlinParser.VAL, 0); } + public TerminalNode VAR() { return getToken(KotlinParser.VAR, 0); } + public ModifiersContext modifiers() { + return getRuleContext(ModifiersContext.class,0); + } + public TypeParametersContext typeParameters() { + return getRuleContext(TypeParametersContext.class,0); + } + public ReceiverTypeContext receiverType() { + return getRuleContext(ReceiverTypeContext.class,0); + } + public TerminalNode DOT() { return getToken(KotlinParser.DOT, 0); } + public TypeConstraintsContext typeConstraints() { + return getRuleContext(TypeConstraintsContext.class,0); + } + public TerminalNode SEMICOLON() { return getToken(KotlinParser.SEMICOLON, 0); } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public MultiVariableDeclarationContext multiVariableDeclaration() { + return getRuleContext(MultiVariableDeclarationContext.class,0); + } + public VariableDeclarationContext variableDeclaration() { + return getRuleContext(VariableDeclarationContext.class,0); + } + public TerminalNode ASSIGNMENT() { return getToken(KotlinParser.ASSIGNMENT, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public PropertyDelegateContext propertyDelegate() { + return getRuleContext(PropertyDelegateContext.class,0); + } + public GetterContext getter() { + return getRuleContext(GetterContext.class,0); + } + public SetterContext setter() { + return getRuleContext(SetterContext.class,0); + } + public SemiContext semi() { + return getRuleContext(SemiContext.class,0); + } + public PropertyDeclarationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_propertyDeclaration; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterPropertyDeclaration(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitPropertyDeclaration(this); + } + } + + public final PropertyDeclarationContext propertyDeclaration() throws RecognitionException { + PropertyDeclarationContext _localctx = new PropertyDeclarationContext(_ctx, getState()); + enterRule(_localctx, 70, RULE_propertyDeclaration); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(1182); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==AT_NO_WS || _la==AT_PRE_WS || ((((_la - 107)) & ~0x3f) == 0 && ((1L << (_la - 107)) & ((1L << (PUBLIC - 107)) | (1L << (PRIVATE - 107)) | (1L << (PROTECTED - 107)) | (1L << (INTERNAL - 107)) | (1L << (ENUM - 107)) | (1L << (SEALED - 107)) | (1L << (ANNOTATION - 107)) | (1L << (DATA - 107)) | (1L << (INNER - 107)) | (1L << (VALUE - 107)) | (1L << (TAILREC - 107)) | (1L << (OPERATOR - 107)) | (1L << (INLINE - 107)) | (1L << (INFIX - 107)) | (1L << (EXTERNAL - 107)) | (1L << (SUSPEND - 107)) | (1L << (OVERRIDE - 107)) | (1L << (ABSTRACT - 107)) | (1L << (FINAL - 107)) | (1L << (OPEN - 107)) | (1L << (CONST - 107)) | (1L << (LATEINIT - 107)) | (1L << (VARARG - 107)) | (1L << (NOINLINE - 107)) | (1L << (CROSSINLINE - 107)) | (1L << (EXPECT - 107)) | (1L << (ACTUAL - 107)))) != 0)) { + { + setState(1181); + modifiers(); + } + } + + setState(1184); + _la = _input.LA(1); + if ( !(_la==VAL || _la==VAR) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(1192); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,148,_ctx) ) { + case 1: + { + setState(1188); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1185); + match(NL); + } + } + setState(1190); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1191); + typeParameters(); + } + break; + } + setState(1209); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,151,_ctx) ) { + case 1: + { + setState(1197); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1194); + match(NL); + } + } + setState(1199); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1200); + receiverType(); + setState(1204); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1201); + match(NL); + } + } + setState(1206); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1207); + match(DOT); + } + break; + } + { + setState(1214); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,152,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(1211); + match(NL); + } + } + } + setState(1216); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,152,_ctx); + } + setState(1219); + _errHandler.sync(this); + switch (_input.LA(1)) { + case LPAREN: + { + setState(1217); + multiVariableDeclaration(); + } + break; + case NL: + case AT_NO_WS: + case AT_PRE_WS: + case FILE: + case FIELD: + case PROPERTY: + case GET: + case SET: + case RECEIVER: + case PARAM: + case SETPARAM: + case DELEGATE: + case IMPORT: + case CONSTRUCTOR: + case BY: + case COMPANION: + case INIT: + case WHERE: + case CATCH: + case FINALLY: + case OUT: + case DYNAMIC: + case PUBLIC: + case PRIVATE: + case PROTECTED: + case INTERNAL: + case ENUM: + case SEALED: + case ANNOTATION: + case DATA: + case INNER: + case VALUE: + case TAILREC: + case OPERATOR: + case INLINE: + case INFIX: + case EXTERNAL: + case SUSPEND: + case OVERRIDE: + case ABSTRACT: + case FINAL: + case OPEN: + case CONST: + case LATEINIT: + case VARARG: + case NOINLINE: + case CROSSINLINE: + case REIFIED: + case EXPECT: + case ACTUAL: + case Identifier: + { + setState(1218); + variableDeclaration(); + } + break; + default: + throw new NoViableAltException(this); + } + } + setState(1228); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,155,_ctx) ) { + case 1: + { + setState(1224); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1221); + match(NL); + } + } + setState(1226); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1227); + typeConstraints(); + } + break; + } + setState(1247); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,159,_ctx) ) { + case 1: + { + setState(1233); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1230); + match(NL); + } + } + setState(1235); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1245); + _errHandler.sync(this); + switch (_input.LA(1)) { + case ASSIGNMENT: + { + setState(1236); + match(ASSIGNMENT); + setState(1240); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1237); + match(NL); + } + } + setState(1242); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1243); + expression(); + } + break; + case BY: + { + setState(1244); + propertyDelegate(); + } + break; + default: + throw new NoViableAltException(this); + } + } + break; + } + setState(1255); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,161,_ctx) ) { + case 1: + { + setState(1250); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + { + setState(1249); + match(NL); + } + } + setState(1252); + _errHandler.sync(this); + _la = _input.LA(1); + } while ( _la==NL ); + setState(1254); + match(SEMICOLON); + } + break; + } + setState(1260); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,162,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(1257); + match(NL); + } + } + } + setState(1262); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,162,_ctx); + } + setState(1293); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,171,_ctx) ) { + case 1: + { + setState(1264); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,163,_ctx) ) { + case 1: + { + setState(1263); + getter(); + } + break; + } + setState(1276); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,166,_ctx) ) { + case 1: + { + setState(1269); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,164,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(1266); + match(NL); + } + } + } + setState(1271); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,164,_ctx); + } + setState(1273); + _errHandler.sync(this); + _la = _input.LA(1); + if (((((_la - -1)) & ~0x3f) == 0 && ((1L << (_la - -1)) & ((1L << (EOF - -1)) | (1L << (NL - -1)) | (1L << (SEMICOLON - -1)))) != 0)) { + { + setState(1272); + semi(); + } + } + + setState(1275); + setter(); + } + break; + } + } + break; + case 2: + { + setState(1279); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,167,_ctx) ) { + case 1: + { + setState(1278); + setter(); + } + break; + } + setState(1291); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,170,_ctx) ) { + case 1: + { + setState(1284); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,168,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(1281); + match(NL); + } + } + } + setState(1286); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,168,_ctx); + } + setState(1288); + _errHandler.sync(this); + _la = _input.LA(1); + if (((((_la - -1)) & ~0x3f) == 0 && ((1L << (_la - -1)) & ((1L << (EOF - -1)) | (1L << (NL - -1)) | (1L << (SEMICOLON - -1)))) != 0)) { + { + setState(1287); + semi(); + } + } + + setState(1290); + getter(); + } + break; + } + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class PropertyDelegateContext extends ParserRuleContext { + public TerminalNode BY() { return getToken(KotlinParser.BY, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public PropertyDelegateContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_propertyDelegate; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterPropertyDelegate(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitPropertyDelegate(this); + } + } + + public final PropertyDelegateContext propertyDelegate() throws RecognitionException { + PropertyDelegateContext _localctx = new PropertyDelegateContext(_ctx, getState()); + enterRule(_localctx, 72, RULE_propertyDelegate); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1295); + match(BY); + setState(1299); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1296); + match(NL); + } + } + setState(1301); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1302); + expression(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class GetterContext extends ParserRuleContext { + public TerminalNode GET() { return getToken(KotlinParser.GET, 0); } + public ModifiersContext modifiers() { + return getRuleContext(ModifiersContext.class,0); + } + public TerminalNode LPAREN() { return getToken(KotlinParser.LPAREN, 0); } + public TerminalNode RPAREN() { return getToken(KotlinParser.RPAREN, 0); } + public FunctionBodyContext functionBody() { + return getRuleContext(FunctionBodyContext.class,0); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public TerminalNode COLON() { return getToken(KotlinParser.COLON, 0); } + public TypeContext type() { + return getRuleContext(TypeContext.class,0); + } + public GetterContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_getter; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterGetter(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitGetter(this); + } + } + + public final GetterContext getter() throws RecognitionException { + GetterContext _localctx = new GetterContext(_ctx, getState()); + enterRule(_localctx, 74, RULE_getter); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1305); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==AT_NO_WS || _la==AT_PRE_WS || ((((_la - 107)) & ~0x3f) == 0 && ((1L << (_la - 107)) & ((1L << (PUBLIC - 107)) | (1L << (PRIVATE - 107)) | (1L << (PROTECTED - 107)) | (1L << (INTERNAL - 107)) | (1L << (ENUM - 107)) | (1L << (SEALED - 107)) | (1L << (ANNOTATION - 107)) | (1L << (DATA - 107)) | (1L << (INNER - 107)) | (1L << (VALUE - 107)) | (1L << (TAILREC - 107)) | (1L << (OPERATOR - 107)) | (1L << (INLINE - 107)) | (1L << (INFIX - 107)) | (1L << (EXTERNAL - 107)) | (1L << (SUSPEND - 107)) | (1L << (OVERRIDE - 107)) | (1L << (ABSTRACT - 107)) | (1L << (FINAL - 107)) | (1L << (OPEN - 107)) | (1L << (CONST - 107)) | (1L << (LATEINIT - 107)) | (1L << (VARARG - 107)) | (1L << (NOINLINE - 107)) | (1L << (CROSSINLINE - 107)) | (1L << (EXPECT - 107)) | (1L << (ACTUAL - 107)))) != 0)) { + { + setState(1304); + modifiers(); + } + } + + setState(1307); + match(GET); + setState(1345); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,180,_ctx) ) { + case 1: + { + setState(1311); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1308); + match(NL); + } + } + setState(1313); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1314); + match(LPAREN); + setState(1318); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1315); + match(NL); + } + } + setState(1320); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1321); + match(RPAREN); + setState(1336); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,178,_ctx) ) { + case 1: + { + setState(1325); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1322); + match(NL); + } + } + setState(1327); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1328); + match(COLON); + setState(1332); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1329); + match(NL); + } + } + setState(1334); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1335); + type(); + } + break; + } + setState(1341); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1338); + match(NL); + } + } + setState(1343); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1344); + functionBody(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class SetterContext extends ParserRuleContext { + public TerminalNode SET() { return getToken(KotlinParser.SET, 0); } + public ModifiersContext modifiers() { + return getRuleContext(ModifiersContext.class,0); + } + public TerminalNode LPAREN() { return getToken(KotlinParser.LPAREN, 0); } + public FunctionValueParameterWithOptionalTypeContext functionValueParameterWithOptionalType() { + return getRuleContext(FunctionValueParameterWithOptionalTypeContext.class,0); + } + public TerminalNode RPAREN() { return getToken(KotlinParser.RPAREN, 0); } + public FunctionBodyContext functionBody() { + return getRuleContext(FunctionBodyContext.class,0); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public TerminalNode COMMA() { return getToken(KotlinParser.COMMA, 0); } + public TerminalNode COLON() { return getToken(KotlinParser.COLON, 0); } + public TypeContext type() { + return getRuleContext(TypeContext.class,0); + } + public SetterContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_setter; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterSetter(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitSetter(this); + } + } + + public final SetterContext setter() throws RecognitionException { + SetterContext _localctx = new SetterContext(_ctx, getState()); + enterRule(_localctx, 76, RULE_setter); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1348); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==AT_NO_WS || _la==AT_PRE_WS || ((((_la - 107)) & ~0x3f) == 0 && ((1L << (_la - 107)) & ((1L << (PUBLIC - 107)) | (1L << (PRIVATE - 107)) | (1L << (PROTECTED - 107)) | (1L << (INTERNAL - 107)) | (1L << (ENUM - 107)) | (1L << (SEALED - 107)) | (1L << (ANNOTATION - 107)) | (1L << (DATA - 107)) | (1L << (INNER - 107)) | (1L << (VALUE - 107)) | (1L << (TAILREC - 107)) | (1L << (OPERATOR - 107)) | (1L << (INLINE - 107)) | (1L << (INFIX - 107)) | (1L << (EXTERNAL - 107)) | (1L << (SUSPEND - 107)) | (1L << (OVERRIDE - 107)) | (1L << (ABSTRACT - 107)) | (1L << (FINAL - 107)) | (1L << (OPEN - 107)) | (1L << (CONST - 107)) | (1L << (LATEINIT - 107)) | (1L << (VARARG - 107)) | (1L << (NOINLINE - 107)) | (1L << (CROSSINLINE - 107)) | (1L << (EXPECT - 107)) | (1L << (ACTUAL - 107)))) != 0)) { + { + setState(1347); + modifiers(); + } + } + + setState(1350); + match(SET); + setState(1405); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,191,_ctx) ) { + case 1: + { + setState(1354); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1351); + match(NL); + } + } + setState(1356); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1357); + match(LPAREN); + setState(1361); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1358); + match(NL); + } + } + setState(1363); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1364); + functionValueParameterWithOptionalType(); + setState(1372); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,185,_ctx) ) { + case 1: + { + setState(1368); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1365); + match(NL); + } + } + setState(1370); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1371); + match(COMMA); + } + break; + } + setState(1377); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1374); + match(NL); + } + } + setState(1379); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1380); + match(RPAREN); + setState(1395); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,189,_ctx) ) { + case 1: + { + setState(1384); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1381); + match(NL); + } + } + setState(1386); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1387); + match(COLON); + setState(1391); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1388); + match(NL); + } + } + setState(1393); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1394); + type(); + } + break; + } + setState(1400); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1397); + match(NL); + } + } + setState(1402); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1403); + functionBody(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ParametersWithOptionalTypeContext extends ParserRuleContext { + public TerminalNode LPAREN() { return getToken(KotlinParser.LPAREN, 0); } + public TerminalNode RPAREN() { return getToken(KotlinParser.RPAREN, 0); } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public List functionValueParameterWithOptionalType() { + return getRuleContexts(FunctionValueParameterWithOptionalTypeContext.class); + } + public FunctionValueParameterWithOptionalTypeContext functionValueParameterWithOptionalType(int i) { + return getRuleContext(FunctionValueParameterWithOptionalTypeContext.class,i); + } + public List COMMA() { return getTokens(KotlinParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(KotlinParser.COMMA, i); + } + public ParametersWithOptionalTypeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_parametersWithOptionalType; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterParametersWithOptionalType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitParametersWithOptionalType(this); + } + } + + public final ParametersWithOptionalTypeContext parametersWithOptionalType() throws RecognitionException { + ParametersWithOptionalTypeContext _localctx = new ParametersWithOptionalTypeContext(_ctx, getState()); + enterRule(_localctx, 78, RULE_parametersWithOptionalType); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(1407); + match(LPAREN); + setState(1411); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,192,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(1408); + match(NL); + } + } + } + setState(1413); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,192,_ctx); + } + setState(1443); + _errHandler.sync(this); + _la = _input.LA(1); + if (((((_la - 40)) & ~0x3f) == 0 && ((1L << (_la - 40)) & ((1L << (AT_NO_WS - 40)) | (1L << (AT_PRE_WS - 40)) | (1L << (FILE - 40)) | (1L << (FIELD - 40)) | (1L << (PROPERTY - 40)) | (1L << (GET - 40)) | (1L << (SET - 40)) | (1L << (RECEIVER - 40)) | (1L << (PARAM - 40)) | (1L << (SETPARAM - 40)) | (1L << (DELEGATE - 40)) | (1L << (IMPORT - 40)) | (1L << (CONSTRUCTOR - 40)) | (1L << (BY - 40)) | (1L << (COMPANION - 40)) | (1L << (INIT - 40)) | (1L << (WHERE - 40)) | (1L << (CATCH - 40)) | (1L << (FINALLY - 40)))) != 0) || ((((_la - 105)) & ~0x3f) == 0 && ((1L << (_la - 105)) & ((1L << (OUT - 105)) | (1L << (DYNAMIC - 105)) | (1L << (PUBLIC - 105)) | (1L << (PRIVATE - 105)) | (1L << (PROTECTED - 105)) | (1L << (INTERNAL - 105)) | (1L << (ENUM - 105)) | (1L << (SEALED - 105)) | (1L << (ANNOTATION - 105)) | (1L << (DATA - 105)) | (1L << (INNER - 105)) | (1L << (VALUE - 105)) | (1L << (TAILREC - 105)) | (1L << (OPERATOR - 105)) | (1L << (INLINE - 105)) | (1L << (INFIX - 105)) | (1L << (EXTERNAL - 105)) | (1L << (SUSPEND - 105)) | (1L << (OVERRIDE - 105)) | (1L << (ABSTRACT - 105)) | (1L << (FINAL - 105)) | (1L << (OPEN - 105)) | (1L << (CONST - 105)) | (1L << (LATEINIT - 105)) | (1L << (VARARG - 105)) | (1L << (NOINLINE - 105)) | (1L << (CROSSINLINE - 105)) | (1L << (REIFIED - 105)) | (1L << (EXPECT - 105)) | (1L << (ACTUAL - 105)) | (1L << (Identifier - 105)))) != 0)) { + { + setState(1414); + functionValueParameterWithOptionalType(); + setState(1431); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,195,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(1418); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1415); + match(NL); + } + } + setState(1420); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1421); + match(COMMA); + setState(1425); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1422); + match(NL); + } + } + setState(1427); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1428); + functionValueParameterWithOptionalType(); + } + } + } + setState(1433); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,195,_ctx); + } + setState(1441); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,197,_ctx) ) { + case 1: + { + setState(1437); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1434); + match(NL); + } + } + setState(1439); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1440); + match(COMMA); + } + break; + } + } + } + + setState(1448); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1445); + match(NL); + } + } + setState(1450); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1451); + match(RPAREN); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class FunctionValueParameterWithOptionalTypeContext extends ParserRuleContext { + public ParameterWithOptionalTypeContext parameterWithOptionalType() { + return getRuleContext(ParameterWithOptionalTypeContext.class,0); + } + public ParameterModifiersContext parameterModifiers() { + return getRuleContext(ParameterModifiersContext.class,0); + } + public TerminalNode ASSIGNMENT() { return getToken(KotlinParser.ASSIGNMENT, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public FunctionValueParameterWithOptionalTypeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_functionValueParameterWithOptionalType; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterFunctionValueParameterWithOptionalType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitFunctionValueParameterWithOptionalType(this); + } + } + + public final FunctionValueParameterWithOptionalTypeContext functionValueParameterWithOptionalType() throws RecognitionException { + FunctionValueParameterWithOptionalTypeContext _localctx = new FunctionValueParameterWithOptionalTypeContext(_ctx, getState()); + enterRule(_localctx, 80, RULE_functionValueParameterWithOptionalType); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1454); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,200,_ctx) ) { + case 1: + { + setState(1453); + parameterModifiers(); + } + break; + } + setState(1456); + parameterWithOptionalType(); + setState(1471); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,203,_ctx) ) { + case 1: + { + setState(1460); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1457); + match(NL); + } + } + setState(1462); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1463); + match(ASSIGNMENT); + setState(1467); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1464); + match(NL); + } + } + setState(1469); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1470); + expression(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ParameterWithOptionalTypeContext extends ParserRuleContext { + public SimpleIdentifierContext simpleIdentifier() { + return getRuleContext(SimpleIdentifierContext.class,0); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public TerminalNode COLON() { return getToken(KotlinParser.COLON, 0); } + public TypeContext type() { + return getRuleContext(TypeContext.class,0); + } + public ParameterWithOptionalTypeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_parameterWithOptionalType; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterParameterWithOptionalType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitParameterWithOptionalType(this); + } + } + + public final ParameterWithOptionalTypeContext parameterWithOptionalType() throws RecognitionException { + ParameterWithOptionalTypeContext _localctx = new ParameterWithOptionalTypeContext(_ctx, getState()); + enterRule(_localctx, 82, RULE_parameterWithOptionalType); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(1473); + simpleIdentifier(); + setState(1477); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,204,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(1474); + match(NL); + } + } + } + setState(1479); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,204,_ctx); + } + setState(1488); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==COLON) { + { + setState(1480); + match(COLON); + setState(1484); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1481); + match(NL); + } + } + setState(1486); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1487); + type(); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ParameterContext extends ParserRuleContext { + public SimpleIdentifierContext simpleIdentifier() { + return getRuleContext(SimpleIdentifierContext.class,0); + } + public TerminalNode COLON() { return getToken(KotlinParser.COLON, 0); } + public TypeContext type() { + return getRuleContext(TypeContext.class,0); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public ParameterContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_parameter; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterParameter(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitParameter(this); + } + } + + public final ParameterContext parameter() throws RecognitionException { + ParameterContext _localctx = new ParameterContext(_ctx, getState()); + enterRule(_localctx, 84, RULE_parameter); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1490); + simpleIdentifier(); + setState(1494); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1491); + match(NL); + } + } + setState(1496); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1497); + match(COLON); + setState(1501); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1498); + match(NL); + } + } + setState(1503); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1504); + type(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ObjectDeclarationContext extends ParserRuleContext { + public TerminalNode OBJECT() { return getToken(KotlinParser.OBJECT, 0); } + public SimpleIdentifierContext simpleIdentifier() { + return getRuleContext(SimpleIdentifierContext.class,0); + } + public ModifiersContext modifiers() { + return getRuleContext(ModifiersContext.class,0); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public TerminalNode COLON() { return getToken(KotlinParser.COLON, 0); } + public DelegationSpecifiersContext delegationSpecifiers() { + return getRuleContext(DelegationSpecifiersContext.class,0); + } + public ClassBodyContext classBody() { + return getRuleContext(ClassBodyContext.class,0); + } + public ObjectDeclarationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_objectDeclaration; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterObjectDeclaration(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitObjectDeclaration(this); + } + } + + public final ObjectDeclarationContext objectDeclaration() throws RecognitionException { + ObjectDeclarationContext _localctx = new ObjectDeclarationContext(_ctx, getState()); + enterRule(_localctx, 86, RULE_objectDeclaration); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(1507); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==AT_NO_WS || _la==AT_PRE_WS || ((((_la - 107)) & ~0x3f) == 0 && ((1L << (_la - 107)) & ((1L << (PUBLIC - 107)) | (1L << (PRIVATE - 107)) | (1L << (PROTECTED - 107)) | (1L << (INTERNAL - 107)) | (1L << (ENUM - 107)) | (1L << (SEALED - 107)) | (1L << (ANNOTATION - 107)) | (1L << (DATA - 107)) | (1L << (INNER - 107)) | (1L << (VALUE - 107)) | (1L << (TAILREC - 107)) | (1L << (OPERATOR - 107)) | (1L << (INLINE - 107)) | (1L << (INFIX - 107)) | (1L << (EXTERNAL - 107)) | (1L << (SUSPEND - 107)) | (1L << (OVERRIDE - 107)) | (1L << (ABSTRACT - 107)) | (1L << (FINAL - 107)) | (1L << (OPEN - 107)) | (1L << (CONST - 107)) | (1L << (LATEINIT - 107)) | (1L << (VARARG - 107)) | (1L << (NOINLINE - 107)) | (1L << (CROSSINLINE - 107)) | (1L << (EXPECT - 107)) | (1L << (ACTUAL - 107)))) != 0)) { + { + setState(1506); + modifiers(); + } + } + + setState(1509); + match(OBJECT); + setState(1513); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1510); + match(NL); + } + } + setState(1515); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1516); + simpleIdentifier(); + setState(1531); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,213,_ctx) ) { + case 1: + { + setState(1520); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1517); + match(NL); + } + } + setState(1522); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1523); + match(COLON); + setState(1527); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,212,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(1524); + match(NL); + } + } + } + setState(1529); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,212,_ctx); + } + setState(1530); + delegationSpecifiers(); + } + break; + } + setState(1540); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,215,_ctx) ) { + case 1: + { + setState(1536); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1533); + match(NL); + } + } + setState(1538); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1539); + classBody(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class SecondaryConstructorContext extends ParserRuleContext { + public TerminalNode CONSTRUCTOR() { return getToken(KotlinParser.CONSTRUCTOR, 0); } + public FunctionValueParametersContext functionValueParameters() { + return getRuleContext(FunctionValueParametersContext.class,0); + } + public ModifiersContext modifiers() { + return getRuleContext(ModifiersContext.class,0); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public TerminalNode COLON() { return getToken(KotlinParser.COLON, 0); } + public ConstructorDelegationCallContext constructorDelegationCall() { + return getRuleContext(ConstructorDelegationCallContext.class,0); + } + public BlockContext block() { + return getRuleContext(BlockContext.class,0); + } + public SecondaryConstructorContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_secondaryConstructor; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterSecondaryConstructor(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitSecondaryConstructor(this); + } + } + + public final SecondaryConstructorContext secondaryConstructor() throws RecognitionException { + SecondaryConstructorContext _localctx = new SecondaryConstructorContext(_ctx, getState()); + enterRule(_localctx, 88, RULE_secondaryConstructor); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(1543); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==AT_NO_WS || _la==AT_PRE_WS || ((((_la - 107)) & ~0x3f) == 0 && ((1L << (_la - 107)) & ((1L << (PUBLIC - 107)) | (1L << (PRIVATE - 107)) | (1L << (PROTECTED - 107)) | (1L << (INTERNAL - 107)) | (1L << (ENUM - 107)) | (1L << (SEALED - 107)) | (1L << (ANNOTATION - 107)) | (1L << (DATA - 107)) | (1L << (INNER - 107)) | (1L << (VALUE - 107)) | (1L << (TAILREC - 107)) | (1L << (OPERATOR - 107)) | (1L << (INLINE - 107)) | (1L << (INFIX - 107)) | (1L << (EXTERNAL - 107)) | (1L << (SUSPEND - 107)) | (1L << (OVERRIDE - 107)) | (1L << (ABSTRACT - 107)) | (1L << (FINAL - 107)) | (1L << (OPEN - 107)) | (1L << (CONST - 107)) | (1L << (LATEINIT - 107)) | (1L << (VARARG - 107)) | (1L << (NOINLINE - 107)) | (1L << (CROSSINLINE - 107)) | (1L << (EXPECT - 107)) | (1L << (ACTUAL - 107)))) != 0)) { + { + setState(1542); + modifiers(); + } + } + + setState(1545); + match(CONSTRUCTOR); + setState(1549); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1546); + match(NL); + } + } + setState(1551); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1552); + functionValueParameters(); + setState(1567); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,220,_ctx) ) { + case 1: + { + setState(1556); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1553); + match(NL); + } + } + setState(1558); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1559); + match(COLON); + setState(1563); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1560); + match(NL); + } + } + setState(1565); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1566); + constructorDelegationCall(); + } + break; + } + setState(1572); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,221,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(1569); + match(NL); + } + } + } + setState(1574); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,221,_ctx); + } + setState(1576); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==LCURL) { + { + setState(1575); + block(); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ConstructorDelegationCallContext extends ParserRuleContext { + public ValueArgumentsContext valueArguments() { + return getRuleContext(ValueArgumentsContext.class,0); + } + public TerminalNode THIS() { return getToken(KotlinParser.THIS, 0); } + public TerminalNode SUPER() { return getToken(KotlinParser.SUPER, 0); } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public ConstructorDelegationCallContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_constructorDelegationCall; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterConstructorDelegationCall(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitConstructorDelegationCall(this); + } + } + + public final ConstructorDelegationCallContext constructorDelegationCall() throws RecognitionException { + ConstructorDelegationCallContext _localctx = new ConstructorDelegationCallContext(_ctx, getState()); + enterRule(_localctx, 90, RULE_constructorDelegationCall); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1578); + _la = _input.LA(1); + if ( !(_la==THIS || _la==SUPER) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(1582); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1579); + match(NL); + } + } + setState(1584); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1585); + valueArguments(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class EnumClassBodyContext extends ParserRuleContext { + public TerminalNode LCURL() { return getToken(KotlinParser.LCURL, 0); } + public TerminalNode RCURL() { return getToken(KotlinParser.RCURL, 0); } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public EnumEntriesContext enumEntries() { + return getRuleContext(EnumEntriesContext.class,0); + } + public TerminalNode SEMICOLON() { return getToken(KotlinParser.SEMICOLON, 0); } + public ClassMemberDeclarationsContext classMemberDeclarations() { + return getRuleContext(ClassMemberDeclarationsContext.class,0); + } + public EnumClassBodyContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_enumClassBody; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterEnumClassBody(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitEnumClassBody(this); + } + } + + public final EnumClassBodyContext enumClassBody() throws RecognitionException { + EnumClassBodyContext _localctx = new EnumClassBodyContext(_ctx, getState()); + enterRule(_localctx, 92, RULE_enumClassBody); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(1587); + match(LCURL); + setState(1591); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,224,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(1588); + match(NL); + } + } + } + setState(1593); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,224,_ctx); + } + setState(1595); + _errHandler.sync(this); + _la = _input.LA(1); + if (((((_la - 40)) & ~0x3f) == 0 && ((1L << (_la - 40)) & ((1L << (AT_NO_WS - 40)) | (1L << (AT_PRE_WS - 40)) | (1L << (FILE - 40)) | (1L << (FIELD - 40)) | (1L << (PROPERTY - 40)) | (1L << (GET - 40)) | (1L << (SET - 40)) | (1L << (RECEIVER - 40)) | (1L << (PARAM - 40)) | (1L << (SETPARAM - 40)) | (1L << (DELEGATE - 40)) | (1L << (IMPORT - 40)) | (1L << (CONSTRUCTOR - 40)) | (1L << (BY - 40)) | (1L << (COMPANION - 40)) | (1L << (INIT - 40)) | (1L << (WHERE - 40)) | (1L << (CATCH - 40)) | (1L << (FINALLY - 40)))) != 0) || ((((_la - 105)) & ~0x3f) == 0 && ((1L << (_la - 105)) & ((1L << (OUT - 105)) | (1L << (DYNAMIC - 105)) | (1L << (PUBLIC - 105)) | (1L << (PRIVATE - 105)) | (1L << (PROTECTED - 105)) | (1L << (INTERNAL - 105)) | (1L << (ENUM - 105)) | (1L << (SEALED - 105)) | (1L << (ANNOTATION - 105)) | (1L << (DATA - 105)) | (1L << (INNER - 105)) | (1L << (VALUE - 105)) | (1L << (TAILREC - 105)) | (1L << (OPERATOR - 105)) | (1L << (INLINE - 105)) | (1L << (INFIX - 105)) | (1L << (EXTERNAL - 105)) | (1L << (SUSPEND - 105)) | (1L << (OVERRIDE - 105)) | (1L << (ABSTRACT - 105)) | (1L << (FINAL - 105)) | (1L << (OPEN - 105)) | (1L << (CONST - 105)) | (1L << (LATEINIT - 105)) | (1L << (VARARG - 105)) | (1L << (NOINLINE - 105)) | (1L << (CROSSINLINE - 105)) | (1L << (REIFIED - 105)) | (1L << (EXPECT - 105)) | (1L << (ACTUAL - 105)) | (1L << (Identifier - 105)))) != 0)) { + { + setState(1594); + enumEntries(); + } + } + + setState(1611); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,228,_ctx) ) { + case 1: + { + setState(1600); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1597); + match(NL); + } + } + setState(1602); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1603); + match(SEMICOLON); + setState(1607); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,227,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(1604); + match(NL); + } + } + } + setState(1609); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,227,_ctx); + } + setState(1610); + classMemberDeclarations(); + } + break; + } + setState(1616); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1613); + match(NL); + } + } + setState(1618); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1619); + match(RCURL); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class EnumEntriesContext extends ParserRuleContext { + public List enumEntry() { + return getRuleContexts(EnumEntryContext.class); + } + public EnumEntryContext enumEntry(int i) { + return getRuleContext(EnumEntryContext.class,i); + } + public List COMMA() { return getTokens(KotlinParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(KotlinParser.COMMA, i); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public EnumEntriesContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_enumEntries; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterEnumEntries(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitEnumEntries(this); + } + } + + public final EnumEntriesContext enumEntries() throws RecognitionException { + EnumEntriesContext _localctx = new EnumEntriesContext(_ctx, getState()); + enterRule(_localctx, 94, RULE_enumEntries); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(1621); + enumEntry(); + setState(1638); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,232,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(1625); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1622); + match(NL); + } + } + setState(1627); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1628); + match(COMMA); + setState(1632); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1629); + match(NL); + } + } + setState(1634); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1635); + enumEntry(); + } + } + } + setState(1640); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,232,_ctx); + } + setState(1644); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,233,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(1641); + match(NL); + } + } + } + setState(1646); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,233,_ctx); + } + setState(1648); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==COMMA) { + { + setState(1647); + match(COMMA); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class EnumEntryContext extends ParserRuleContext { + public SimpleIdentifierContext simpleIdentifier() { + return getRuleContext(SimpleIdentifierContext.class,0); + } + public ModifiersContext modifiers() { + return getRuleContext(ModifiersContext.class,0); + } + public ValueArgumentsContext valueArguments() { + return getRuleContext(ValueArgumentsContext.class,0); + } + public ClassBodyContext classBody() { + return getRuleContext(ClassBodyContext.class,0); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public EnumEntryContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_enumEntry; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterEnumEntry(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitEnumEntry(this); + } + } + + public final EnumEntryContext enumEntry() throws RecognitionException { + EnumEntryContext _localctx = new EnumEntryContext(_ctx, getState()); + enterRule(_localctx, 96, RULE_enumEntry); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1657); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,236,_ctx) ) { + case 1: + { + setState(1650); + modifiers(); + setState(1654); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1651); + match(NL); + } + } + setState(1656); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + break; + } + setState(1659); + simpleIdentifier(); + setState(1667); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,238,_ctx) ) { + case 1: + { + setState(1663); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1660); + match(NL); + } + } + setState(1665); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1666); + valueArguments(); + } + break; + } + setState(1676); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,240,_ctx) ) { + case 1: + { + setState(1672); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1669); + match(NL); + } + } + setState(1674); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1675); + classBody(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TypeContext extends ParserRuleContext { + public ParenthesizedTypeContext parenthesizedType() { + return getRuleContext(ParenthesizedTypeContext.class,0); + } + public NullableTypeContext nullableType() { + return getRuleContext(NullableTypeContext.class,0); + } + public TypeReferenceContext typeReference() { + return getRuleContext(TypeReferenceContext.class,0); + } + public FunctionTypeContext functionType() { + return getRuleContext(FunctionTypeContext.class,0); + } + public TypeModifiersContext typeModifiers() { + return getRuleContext(TypeModifiersContext.class,0); + } + public TypeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_type; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitType(this); + } + } + + public final TypeContext type() throws RecognitionException { + TypeContext _localctx = new TypeContext(_ctx, getState()); + enterRule(_localctx, 98, RULE_type); + try { + enterOuterAlt(_localctx, 1); + { + setState(1679); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,241,_ctx) ) { + case 1: + { + setState(1678); + typeModifiers(); + } + break; + } + setState(1685); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,242,_ctx) ) { + case 1: + { + setState(1681); + parenthesizedType(); + } + break; + case 2: + { + setState(1682); + nullableType(); + } + break; + case 3: + { + setState(1683); + typeReference(); + } + break; + case 4: + { + setState(1684); + functionType(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TypeReferenceContext extends ParserRuleContext { + public UserTypeContext userType() { + return getRuleContext(UserTypeContext.class,0); + } + public TerminalNode DYNAMIC() { return getToken(KotlinParser.DYNAMIC, 0); } + public TypeReferenceContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_typeReference; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterTypeReference(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitTypeReference(this); + } + } + + public final TypeReferenceContext typeReference() throws RecognitionException { + TypeReferenceContext _localctx = new TypeReferenceContext(_ctx, getState()); + enterRule(_localctx, 100, RULE_typeReference); + try { + setState(1689); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,243,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(1687); + userType(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(1688); + match(DYNAMIC); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class NullableTypeContext extends ParserRuleContext { + public TypeReferenceContext typeReference() { + return getRuleContext(TypeReferenceContext.class,0); + } + public ParenthesizedTypeContext parenthesizedType() { + return getRuleContext(ParenthesizedTypeContext.class,0); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public List quest() { + return getRuleContexts(QuestContext.class); + } + public QuestContext quest(int i) { + return getRuleContext(QuestContext.class,i); + } + public NullableTypeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_nullableType; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterNullableType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitNullableType(this); + } + } + + public final NullableTypeContext nullableType() throws RecognitionException { + NullableTypeContext _localctx = new NullableTypeContext(_ctx, getState()); + enterRule(_localctx, 102, RULE_nullableType); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(1693); + _errHandler.sync(this); + switch (_input.LA(1)) { + case FILE: + case FIELD: + case PROPERTY: + case GET: + case SET: + case RECEIVER: + case PARAM: + case SETPARAM: + case DELEGATE: + case IMPORT: + case CONSTRUCTOR: + case BY: + case COMPANION: + case INIT: + case WHERE: + case CATCH: + case FINALLY: + case OUT: + case DYNAMIC: + case PUBLIC: + case PRIVATE: + case PROTECTED: + case INTERNAL: + case ENUM: + case SEALED: + case ANNOTATION: + case DATA: + case INNER: + case VALUE: + case TAILREC: + case OPERATOR: + case INLINE: + case INFIX: + case EXTERNAL: + case SUSPEND: + case OVERRIDE: + case ABSTRACT: + case FINAL: + case OPEN: + case CONST: + case LATEINIT: + case VARARG: + case NOINLINE: + case CROSSINLINE: + case REIFIED: + case EXPECT: + case ACTUAL: + case Identifier: + { + setState(1691); + typeReference(); + } + break; + case LPAREN: + { + setState(1692); + parenthesizedType(); + } + break; + default: + throw new NoViableAltException(this); + } + setState(1698); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1695); + match(NL); + } + } + setState(1700); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1702); + _errHandler.sync(this); + _alt = 1; + do { + switch (_alt) { + case 1: + { + { + setState(1701); + quest(); + } + } + break; + default: + throw new NoViableAltException(this); + } + setState(1704); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,246,_ctx); + } while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class QuestContext extends ParserRuleContext { + public TerminalNode QUEST_NO_WS() { return getToken(KotlinParser.QUEST_NO_WS, 0); } + public TerminalNode QUEST_WS() { return getToken(KotlinParser.QUEST_WS, 0); } + public QuestContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_quest; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterQuest(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitQuest(this); + } + } + + public final QuestContext quest() throws RecognitionException { + QuestContext _localctx = new QuestContext(_ctx, getState()); + enterRule(_localctx, 104, RULE_quest); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1706); + _la = _input.LA(1); + if ( !(_la==QUEST_WS || _la==QUEST_NO_WS) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class UserTypeContext extends ParserRuleContext { + public List simpleUserType() { + return getRuleContexts(SimpleUserTypeContext.class); + } + public SimpleUserTypeContext simpleUserType(int i) { + return getRuleContext(SimpleUserTypeContext.class,i); + } + public List DOT() { return getTokens(KotlinParser.DOT); } + public TerminalNode DOT(int i) { + return getToken(KotlinParser.DOT, i); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public UserTypeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_userType; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterUserType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitUserType(this); + } + } + + public final UserTypeContext userType() throws RecognitionException { + UserTypeContext _localctx = new UserTypeContext(_ctx, getState()); + enterRule(_localctx, 106, RULE_userType); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(1708); + simpleUserType(); + setState(1725); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,249,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(1712); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1709); + match(NL); + } + } + setState(1714); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1715); + match(DOT); + setState(1719); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1716); + match(NL); + } + } + setState(1721); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1722); + simpleUserType(); + } + } + } + setState(1727); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,249,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class SimpleUserTypeContext extends ParserRuleContext { + public SimpleIdentifierContext simpleIdentifier() { + return getRuleContext(SimpleIdentifierContext.class,0); + } + public TypeArgumentsContext typeArguments() { + return getRuleContext(TypeArgumentsContext.class,0); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public SimpleUserTypeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_simpleUserType; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterSimpleUserType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitSimpleUserType(this); + } + } + + public final SimpleUserTypeContext simpleUserType() throws RecognitionException { + SimpleUserTypeContext _localctx = new SimpleUserTypeContext(_ctx, getState()); + enterRule(_localctx, 108, RULE_simpleUserType); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1728); + simpleIdentifier(); + setState(1736); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,251,_ctx) ) { + case 1: + { + setState(1732); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1729); + match(NL); + } + } + setState(1734); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1735); + typeArguments(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TypeProjectionContext extends ParserRuleContext { + public TypeContext type() { + return getRuleContext(TypeContext.class,0); + } + public TypeProjectionModifiersContext typeProjectionModifiers() { + return getRuleContext(TypeProjectionModifiersContext.class,0); + } + public TerminalNode MULT() { return getToken(KotlinParser.MULT, 0); } + public TypeProjectionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_typeProjection; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterTypeProjection(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitTypeProjection(this); + } + } + + public final TypeProjectionContext typeProjection() throws RecognitionException { + TypeProjectionContext _localctx = new TypeProjectionContext(_ctx, getState()); + enterRule(_localctx, 110, RULE_typeProjection); + try { + setState(1743); + _errHandler.sync(this); + switch (_input.LA(1)) { + case LPAREN: + case AT_NO_WS: + case AT_PRE_WS: + case FILE: + case FIELD: + case PROPERTY: + case GET: + case SET: + case RECEIVER: + case PARAM: + case SETPARAM: + case DELEGATE: + case IMPORT: + case CONSTRUCTOR: + case BY: + case COMPANION: + case INIT: + case WHERE: + case CATCH: + case FINALLY: + case IN: + case OUT: + case DYNAMIC: + case PUBLIC: + case PRIVATE: + case PROTECTED: + case INTERNAL: + case ENUM: + case SEALED: + case ANNOTATION: + case DATA: + case INNER: + case VALUE: + case TAILREC: + case OPERATOR: + case INLINE: + case INFIX: + case EXTERNAL: + case SUSPEND: + case OVERRIDE: + case ABSTRACT: + case FINAL: + case OPEN: + case CONST: + case LATEINIT: + case VARARG: + case NOINLINE: + case CROSSINLINE: + case REIFIED: + case EXPECT: + case ACTUAL: + case Identifier: + enterOuterAlt(_localctx, 1); + { + setState(1739); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,252,_ctx) ) { + case 1: + { + setState(1738); + typeProjectionModifiers(); + } + break; + } + setState(1741); + type(); + } + break; + case MULT: + enterOuterAlt(_localctx, 2); + { + setState(1742); + match(MULT); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TypeProjectionModifiersContext extends ParserRuleContext { + public List typeProjectionModifier() { + return getRuleContexts(TypeProjectionModifierContext.class); + } + public TypeProjectionModifierContext typeProjectionModifier(int i) { + return getRuleContext(TypeProjectionModifierContext.class,i); + } + public TypeProjectionModifiersContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_typeProjectionModifiers; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterTypeProjectionModifiers(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitTypeProjectionModifiers(this); + } + } + + public final TypeProjectionModifiersContext typeProjectionModifiers() throws RecognitionException { + TypeProjectionModifiersContext _localctx = new TypeProjectionModifiersContext(_ctx, getState()); + enterRule(_localctx, 112, RULE_typeProjectionModifiers); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(1746); + _errHandler.sync(this); + _alt = 1; + do { + switch (_alt) { + case 1: + { + { + setState(1745); + typeProjectionModifier(); + } + } + break; + default: + throw new NoViableAltException(this); + } + setState(1748); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,254,_ctx); + } while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TypeProjectionModifierContext extends ParserRuleContext { + public VarianceModifierContext varianceModifier() { + return getRuleContext(VarianceModifierContext.class,0); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public AnnotationContext annotation() { + return getRuleContext(AnnotationContext.class,0); + } + public TypeProjectionModifierContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_typeProjectionModifier; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterTypeProjectionModifier(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitTypeProjectionModifier(this); + } + } + + public final TypeProjectionModifierContext typeProjectionModifier() throws RecognitionException { + TypeProjectionModifierContext _localctx = new TypeProjectionModifierContext(_ctx, getState()); + enterRule(_localctx, 114, RULE_typeProjectionModifier); + int _la; + try { + setState(1758); + _errHandler.sync(this); + switch (_input.LA(1)) { + case IN: + case OUT: + enterOuterAlt(_localctx, 1); + { + setState(1750); + varianceModifier(); + setState(1754); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1751); + match(NL); + } + } + setState(1756); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + break; + case AT_NO_WS: + case AT_PRE_WS: + enterOuterAlt(_localctx, 2); + { + setState(1757); + annotation(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class FunctionTypeContext extends ParserRuleContext { + public FunctionTypeParametersContext functionTypeParameters() { + return getRuleContext(FunctionTypeParametersContext.class,0); + } + public TerminalNode ARROW() { return getToken(KotlinParser.ARROW, 0); } + public TypeContext type() { + return getRuleContext(TypeContext.class,0); + } + public ReceiverTypeContext receiverType() { + return getRuleContext(ReceiverTypeContext.class,0); + } + public TerminalNode DOT() { return getToken(KotlinParser.DOT, 0); } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public FunctionTypeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_functionType; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterFunctionType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitFunctionType(this); + } + } + + public final FunctionTypeContext functionType() throws RecognitionException { + FunctionTypeContext _localctx = new FunctionTypeContext(_ctx, getState()); + enterRule(_localctx, 116, RULE_functionType); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1774); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,259,_ctx) ) { + case 1: + { + setState(1760); + receiverType(); + setState(1764); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1761); + match(NL); + } + } + setState(1766); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1767); + match(DOT); + setState(1771); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1768); + match(NL); + } + } + setState(1773); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + break; + } + setState(1776); + functionTypeParameters(); + setState(1780); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1777); + match(NL); + } + } + setState(1782); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1783); + match(ARROW); + setState(1787); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1784); + match(NL); + } + } + setState(1789); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1790); + type(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class FunctionTypeParametersContext extends ParserRuleContext { + public TerminalNode LPAREN() { return getToken(KotlinParser.LPAREN, 0); } + public TerminalNode RPAREN() { return getToken(KotlinParser.RPAREN, 0); } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public List parameter() { + return getRuleContexts(ParameterContext.class); + } + public ParameterContext parameter(int i) { + return getRuleContext(ParameterContext.class,i); + } + public List type() { + return getRuleContexts(TypeContext.class); + } + public TypeContext type(int i) { + return getRuleContext(TypeContext.class,i); + } + public List COMMA() { return getTokens(KotlinParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(KotlinParser.COMMA, i); + } + public FunctionTypeParametersContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_functionTypeParameters; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterFunctionTypeParameters(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitFunctionTypeParameters(this); + } + } + + public final FunctionTypeParametersContext functionTypeParameters() throws RecognitionException { + FunctionTypeParametersContext _localctx = new FunctionTypeParametersContext(_ctx, getState()); + enterRule(_localctx, 118, RULE_functionTypeParameters); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(1792); + match(LPAREN); + setState(1796); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,262,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(1793); + match(NL); + } + } + } + setState(1798); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,262,_ctx); + } + setState(1801); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,263,_ctx) ) { + case 1: + { + setState(1799); + parameter(); + } + break; + case 2: + { + setState(1800); + type(); + } + break; + } + setState(1822); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,267,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(1806); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1803); + match(NL); + } + } + setState(1808); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1809); + match(COMMA); + setState(1813); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1810); + match(NL); + } + } + setState(1815); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1818); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,266,_ctx) ) { + case 1: + { + setState(1816); + parameter(); + } + break; + case 2: + { + setState(1817); + type(); + } + break; + } + } + } + } + setState(1824); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,267,_ctx); + } + setState(1832); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,269,_ctx) ) { + case 1: + { + setState(1828); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1825); + match(NL); + } + } + setState(1830); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1831); + match(COMMA); + } + break; + } + setState(1837); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1834); + match(NL); + } + } + setState(1839); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1840); + match(RPAREN); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ParenthesizedTypeContext extends ParserRuleContext { + public TerminalNode LPAREN() { return getToken(KotlinParser.LPAREN, 0); } + public TypeContext type() { + return getRuleContext(TypeContext.class,0); + } + public TerminalNode RPAREN() { return getToken(KotlinParser.RPAREN, 0); } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public ParenthesizedTypeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_parenthesizedType; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterParenthesizedType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitParenthesizedType(this); + } + } + + public final ParenthesizedTypeContext parenthesizedType() throws RecognitionException { + ParenthesizedTypeContext _localctx = new ParenthesizedTypeContext(_ctx, getState()); + enterRule(_localctx, 120, RULE_parenthesizedType); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1842); + match(LPAREN); + setState(1846); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1843); + match(NL); + } + } + setState(1848); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1849); + type(); + setState(1853); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1850); + match(NL); + } + } + setState(1855); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1856); + match(RPAREN); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ReceiverTypeContext extends ParserRuleContext { + public ParenthesizedTypeContext parenthesizedType() { + return getRuleContext(ParenthesizedTypeContext.class,0); + } + public NullableTypeContext nullableType() { + return getRuleContext(NullableTypeContext.class,0); + } + public TypeReferenceContext typeReference() { + return getRuleContext(TypeReferenceContext.class,0); + } + public TypeModifiersContext typeModifiers() { + return getRuleContext(TypeModifiersContext.class,0); + } + public ReceiverTypeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_receiverType; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterReceiverType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitReceiverType(this); + } + } + + public final ReceiverTypeContext receiverType() throws RecognitionException { + ReceiverTypeContext _localctx = new ReceiverTypeContext(_ctx, getState()); + enterRule(_localctx, 122, RULE_receiverType); + try { + enterOuterAlt(_localctx, 1); + { + setState(1859); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,273,_ctx) ) { + case 1: + { + setState(1858); + typeModifiers(); + } + break; + } + setState(1864); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,274,_ctx) ) { + case 1: + { + setState(1861); + parenthesizedType(); + } + break; + case 2: + { + setState(1862); + nullableType(); + } + break; + case 3: + { + setState(1863); + typeReference(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ParenthesizedUserTypeContext extends ParserRuleContext { + public TerminalNode LPAREN() { return getToken(KotlinParser.LPAREN, 0); } + public TerminalNode RPAREN() { return getToken(KotlinParser.RPAREN, 0); } + public UserTypeContext userType() { + return getRuleContext(UserTypeContext.class,0); + } + public ParenthesizedUserTypeContext parenthesizedUserType() { + return getRuleContext(ParenthesizedUserTypeContext.class,0); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public ParenthesizedUserTypeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_parenthesizedUserType; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterParenthesizedUserType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitParenthesizedUserType(this); + } + } + + public final ParenthesizedUserTypeContext parenthesizedUserType() throws RecognitionException { + ParenthesizedUserTypeContext _localctx = new ParenthesizedUserTypeContext(_ctx, getState()); + enterRule(_localctx, 124, RULE_parenthesizedUserType); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1866); + match(LPAREN); + setState(1870); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1867); + match(NL); + } + } + setState(1872); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1875); + _errHandler.sync(this); + switch (_input.LA(1)) { + case FILE: + case FIELD: + case PROPERTY: + case GET: + case SET: + case RECEIVER: + case PARAM: + case SETPARAM: + case DELEGATE: + case IMPORT: + case CONSTRUCTOR: + case BY: + case COMPANION: + case INIT: + case WHERE: + case CATCH: + case FINALLY: + case OUT: + case DYNAMIC: + case PUBLIC: + case PRIVATE: + case PROTECTED: + case INTERNAL: + case ENUM: + case SEALED: + case ANNOTATION: + case DATA: + case INNER: + case VALUE: + case TAILREC: + case OPERATOR: + case INLINE: + case INFIX: + case EXTERNAL: + case SUSPEND: + case OVERRIDE: + case ABSTRACT: + case FINAL: + case OPEN: + case CONST: + case LATEINIT: + case VARARG: + case NOINLINE: + case CROSSINLINE: + case REIFIED: + case EXPECT: + case ACTUAL: + case Identifier: + { + setState(1873); + userType(); + } + break; + case LPAREN: + { + setState(1874); + parenthesizedUserType(); + } + break; + default: + throw new NoViableAltException(this); + } + setState(1880); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1877); + match(NL); + } + } + setState(1882); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1883); + match(RPAREN); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class StatementsContext extends ParserRuleContext { + public List statement() { + return getRuleContexts(StatementContext.class); + } + public StatementContext statement(int i) { + return getRuleContext(StatementContext.class,i); + } + public List semis() { + return getRuleContexts(SemisContext.class); + } + public SemisContext semis(int i) { + return getRuleContext(SemisContext.class,i); + } + public StatementsContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_statements; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterStatements(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitStatements(this); + } + } + + public final StatementsContext statements() throws RecognitionException { + StatementsContext _localctx = new StatementsContext(_ctx, getState()); + enterRule(_localctx, 126, RULE_statements); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(1894); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << LPAREN) | (1L << LSQUARE) | (1L << LCURL) | (1L << ADD) | (1L << SUB) | (1L << INCR) | (1L << DECR) | (1L << EXCL_WS) | (1L << EXCL_NO_WS) | (1L << COLONCOLON) | (1L << AT_NO_WS) | (1L << AT_PRE_WS) | (1L << RETURN_AT) | (1L << CONTINUE_AT) | (1L << BREAK_AT) | (1L << THIS_AT) | (1L << SUPER_AT) | (1L << FILE) | (1L << FIELD) | (1L << PROPERTY))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (GET - 64)) | (1L << (SET - 64)) | (1L << (RECEIVER - 64)) | (1L << (PARAM - 64)) | (1L << (SETPARAM - 64)) | (1L << (DELEGATE - 64)) | (1L << (IMPORT - 64)) | (1L << (CLASS - 64)) | (1L << (INTERFACE - 64)) | (1L << (FUN - 64)) | (1L << (OBJECT - 64)) | (1L << (VAL - 64)) | (1L << (VAR - 64)) | (1L << (TYPE_ALIAS - 64)) | (1L << (CONSTRUCTOR - 64)) | (1L << (BY - 64)) | (1L << (COMPANION - 64)) | (1L << (INIT - 64)) | (1L << (THIS - 64)) | (1L << (SUPER - 64)) | (1L << (WHERE - 64)) | (1L << (IF - 64)) | (1L << (WHEN - 64)) | (1L << (TRY - 64)) | (1L << (CATCH - 64)) | (1L << (FINALLY - 64)) | (1L << (FOR - 64)) | (1L << (DO - 64)) | (1L << (WHILE - 64)) | (1L << (THROW - 64)) | (1L << (RETURN - 64)) | (1L << (CONTINUE - 64)) | (1L << (BREAK - 64)) | (1L << (OUT - 64)) | (1L << (DYNAMIC - 64)) | (1L << (PUBLIC - 64)) | (1L << (PRIVATE - 64)) | (1L << (PROTECTED - 64)) | (1L << (INTERNAL - 64)) | (1L << (ENUM - 64)) | (1L << (SEALED - 64)) | (1L << (ANNOTATION - 64)) | (1L << (DATA - 64)) | (1L << (INNER - 64)) | (1L << (VALUE - 64)) | (1L << (TAILREC - 64)) | (1L << (OPERATOR - 64)) | (1L << (INLINE - 64)) | (1L << (INFIX - 64)) | (1L << (EXTERNAL - 64)) | (1L << (SUSPEND - 64)) | (1L << (OVERRIDE - 64)) | (1L << (ABSTRACT - 64)) | (1L << (FINAL - 64)) | (1L << (OPEN - 64)) | (1L << (CONST - 64)))) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & ((1L << (LATEINIT - 128)) | (1L << (VARARG - 128)) | (1L << (NOINLINE - 128)) | (1L << (CROSSINLINE - 128)) | (1L << (REIFIED - 128)) | (1L << (EXPECT - 128)) | (1L << (ACTUAL - 128)) | (1L << (RealLiteral - 128)) | (1L << (IntegerLiteral - 128)) | (1L << (HexLiteral - 128)) | (1L << (BinLiteral - 128)) | (1L << (UnsignedLiteral - 128)) | (1L << (LongLiteral - 128)) | (1L << (BooleanLiteral - 128)) | (1L << (NullLiteral - 128)) | (1L << (CharacterLiteral - 128)) | (1L << (Identifier - 128)) | (1L << (QUOTE_OPEN - 128)) | (1L << (TRIPLE_QUOTE_OPEN - 128)))) != 0)) { + { + setState(1885); + statement(); + setState(1891); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,278,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(1886); + semis(); + setState(1887); + statement(); + } + } + } + setState(1893); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,278,_ctx); + } + } + } + + setState(1897); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,280,_ctx) ) { + case 1: + { + setState(1896); + semis(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class StatementContext extends ParserRuleContext { + public DeclarationContext declaration() { + return getRuleContext(DeclarationContext.class,0); + } + public AssignmentContext assignment() { + return getRuleContext(AssignmentContext.class,0); + } + public LoopStatementContext loopStatement() { + return getRuleContext(LoopStatementContext.class,0); + } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public List label() { + return getRuleContexts(LabelContext.class); + } + public LabelContext label(int i) { + return getRuleContext(LabelContext.class,i); + } + public List annotation() { + return getRuleContexts(AnnotationContext.class); + } + public AnnotationContext annotation(int i) { + return getRuleContext(AnnotationContext.class,i); + } + public StatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_statement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitStatement(this); + } + } + + public final StatementContext statement() throws RecognitionException { + StatementContext _localctx = new StatementContext(_ctx, getState()); + enterRule(_localctx, 128, RULE_statement); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(1903); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,282,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + setState(1901); + _errHandler.sync(this); + switch (_input.LA(1)) { + case FILE: + case FIELD: + case PROPERTY: + case GET: + case SET: + case RECEIVER: + case PARAM: + case SETPARAM: + case DELEGATE: + case IMPORT: + case CONSTRUCTOR: + case BY: + case COMPANION: + case INIT: + case WHERE: + case CATCH: + case FINALLY: + case OUT: + case DYNAMIC: + case PUBLIC: + case PRIVATE: + case PROTECTED: + case INTERNAL: + case ENUM: + case SEALED: + case ANNOTATION: + case DATA: + case INNER: + case VALUE: + case TAILREC: + case OPERATOR: + case INLINE: + case INFIX: + case EXTERNAL: + case SUSPEND: + case OVERRIDE: + case ABSTRACT: + case FINAL: + case OPEN: + case CONST: + case LATEINIT: + case VARARG: + case NOINLINE: + case CROSSINLINE: + case REIFIED: + case EXPECT: + case ACTUAL: + case Identifier: + { + setState(1899); + label(); + } + break; + case AT_NO_WS: + case AT_PRE_WS: + { + setState(1900); + annotation(); + } + break; + default: + throw new NoViableAltException(this); + } + } + } + setState(1905); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,282,_ctx); + } + setState(1910); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,283,_ctx) ) { + case 1: + { + setState(1906); + declaration(); + } + break; + case 2: + { + setState(1907); + assignment(); + } + break; + case 3: + { + setState(1908); + loopStatement(); + } + break; + case 4: + { + setState(1909); + expression(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class LabelContext extends ParserRuleContext { + public SimpleIdentifierContext simpleIdentifier() { + return getRuleContext(SimpleIdentifierContext.class,0); + } + public TerminalNode AT_NO_WS() { return getToken(KotlinParser.AT_NO_WS, 0); } + public TerminalNode AT_POST_WS() { return getToken(KotlinParser.AT_POST_WS, 0); } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public LabelContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_label; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterLabel(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitLabel(this); + } + } + + public final LabelContext label() throws RecognitionException { + LabelContext _localctx = new LabelContext(_ctx, getState()); + enterRule(_localctx, 130, RULE_label); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(1912); + simpleIdentifier(); + setState(1913); + _la = _input.LA(1); + if ( !(_la==AT_NO_WS || _la==AT_POST_WS) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(1917); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,284,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(1914); + match(NL); + } + } + } + setState(1919); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,284,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ControlStructureBodyContext extends ParserRuleContext { + public BlockContext block() { + return getRuleContext(BlockContext.class,0); + } + public StatementContext statement() { + return getRuleContext(StatementContext.class,0); + } + public ControlStructureBodyContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_controlStructureBody; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterControlStructureBody(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitControlStructureBody(this); + } + } + + public final ControlStructureBodyContext controlStructureBody() throws RecognitionException { + ControlStructureBodyContext _localctx = new ControlStructureBodyContext(_ctx, getState()); + enterRule(_localctx, 132, RULE_controlStructureBody); + try { + setState(1922); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,285,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(1920); + block(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(1921); + statement(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class BlockContext extends ParserRuleContext { + public TerminalNode LCURL() { return getToken(KotlinParser.LCURL, 0); } + public StatementsContext statements() { + return getRuleContext(StatementsContext.class,0); + } + public TerminalNode RCURL() { return getToken(KotlinParser.RCURL, 0); } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public BlockContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_block; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterBlock(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitBlock(this); + } + } + + public final BlockContext block() throws RecognitionException { + BlockContext _localctx = new BlockContext(_ctx, getState()); + enterRule(_localctx, 134, RULE_block); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(1924); + match(LCURL); + setState(1928); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,286,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(1925); + match(NL); + } + } + } + setState(1930); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,286,_ctx); + } + setState(1931); + statements(); + setState(1935); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1932); + match(NL); + } + } + setState(1937); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1938); + match(RCURL); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class LoopStatementContext extends ParserRuleContext { + public ForStatementContext forStatement() { + return getRuleContext(ForStatementContext.class,0); + } + public WhileStatementContext whileStatement() { + return getRuleContext(WhileStatementContext.class,0); + } + public DoWhileStatementContext doWhileStatement() { + return getRuleContext(DoWhileStatementContext.class,0); + } + public LoopStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_loopStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterLoopStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitLoopStatement(this); + } + } + + public final LoopStatementContext loopStatement() throws RecognitionException { + LoopStatementContext _localctx = new LoopStatementContext(_ctx, getState()); + enterRule(_localctx, 136, RULE_loopStatement); + try { + setState(1943); + _errHandler.sync(this); + switch (_input.LA(1)) { + case FOR: + enterOuterAlt(_localctx, 1); + { + setState(1940); + forStatement(); + } + break; + case WHILE: + enterOuterAlt(_localctx, 2); + { + setState(1941); + whileStatement(); + } + break; + case DO: + enterOuterAlt(_localctx, 3); + { + setState(1942); + doWhileStatement(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ForStatementContext extends ParserRuleContext { + public TerminalNode FOR() { return getToken(KotlinParser.FOR, 0); } + public TerminalNode LPAREN() { return getToken(KotlinParser.LPAREN, 0); } + public TerminalNode IN() { return getToken(KotlinParser.IN, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode RPAREN() { return getToken(KotlinParser.RPAREN, 0); } + public VariableDeclarationContext variableDeclaration() { + return getRuleContext(VariableDeclarationContext.class,0); + } + public MultiVariableDeclarationContext multiVariableDeclaration() { + return getRuleContext(MultiVariableDeclarationContext.class,0); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public List annotation() { + return getRuleContexts(AnnotationContext.class); + } + public AnnotationContext annotation(int i) { + return getRuleContext(AnnotationContext.class,i); + } + public ControlStructureBodyContext controlStructureBody() { + return getRuleContext(ControlStructureBodyContext.class,0); + } + public ForStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_forStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterForStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitForStatement(this); + } + } + + public final ForStatementContext forStatement() throws RecognitionException { + ForStatementContext _localctx = new ForStatementContext(_ctx, getState()); + enterRule(_localctx, 138, RULE_forStatement); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(1945); + match(FOR); + setState(1949); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1946); + match(NL); + } + } + setState(1951); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1952); + match(LPAREN); + setState(1956); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,290,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(1953); + annotation(); + } + } + } + setState(1958); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,290,_ctx); + } + setState(1961); + _errHandler.sync(this); + switch (_input.LA(1)) { + case NL: + case AT_NO_WS: + case AT_PRE_WS: + case FILE: + case FIELD: + case PROPERTY: + case GET: + case SET: + case RECEIVER: + case PARAM: + case SETPARAM: + case DELEGATE: + case IMPORT: + case CONSTRUCTOR: + case BY: + case COMPANION: + case INIT: + case WHERE: + case CATCH: + case FINALLY: + case OUT: + case DYNAMIC: + case PUBLIC: + case PRIVATE: + case PROTECTED: + case INTERNAL: + case ENUM: + case SEALED: + case ANNOTATION: + case DATA: + case INNER: + case VALUE: + case TAILREC: + case OPERATOR: + case INLINE: + case INFIX: + case EXTERNAL: + case SUSPEND: + case OVERRIDE: + case ABSTRACT: + case FINAL: + case OPEN: + case CONST: + case LATEINIT: + case VARARG: + case NOINLINE: + case CROSSINLINE: + case REIFIED: + case EXPECT: + case ACTUAL: + case Identifier: + { + setState(1959); + variableDeclaration(); + } + break; + case LPAREN: + { + setState(1960); + multiVariableDeclaration(); + } + break; + default: + throw new NoViableAltException(this); + } + setState(1963); + match(IN); + setState(1964); + expression(); + setState(1965); + match(RPAREN); + setState(1969); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,292,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(1966); + match(NL); + } + } + } + setState(1971); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,292,_ctx); + } + setState(1973); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,293,_ctx) ) { + case 1: + { + setState(1972); + controlStructureBody(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class WhileStatementContext extends ParserRuleContext { + public TerminalNode WHILE() { return getToken(KotlinParser.WHILE, 0); } + public TerminalNode LPAREN() { return getToken(KotlinParser.LPAREN, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode RPAREN() { return getToken(KotlinParser.RPAREN, 0); } + public ControlStructureBodyContext controlStructureBody() { + return getRuleContext(ControlStructureBodyContext.class,0); + } + public TerminalNode SEMICOLON() { return getToken(KotlinParser.SEMICOLON, 0); } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public WhileStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_whileStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterWhileStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitWhileStatement(this); + } + } + + public final WhileStatementContext whileStatement() throws RecognitionException { + WhileStatementContext _localctx = new WhileStatementContext(_ctx, getState()); + enterRule(_localctx, 140, RULE_whileStatement); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1975); + match(WHILE); + setState(1979); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1976); + match(NL); + } + } + setState(1981); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1982); + match(LPAREN); + setState(1983); + expression(); + setState(1984); + match(RPAREN); + setState(1988); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(1985); + match(NL); + } + } + setState(1990); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1993); + _errHandler.sync(this); + switch (_input.LA(1)) { + case LPAREN: + case LSQUARE: + case LCURL: + case ADD: + case SUB: + case INCR: + case DECR: + case EXCL_WS: + case EXCL_NO_WS: + case COLONCOLON: + case AT_NO_WS: + case AT_PRE_WS: + case RETURN_AT: + case CONTINUE_AT: + case BREAK_AT: + case THIS_AT: + case SUPER_AT: + case FILE: + case FIELD: + case PROPERTY: + case GET: + case SET: + case RECEIVER: + case PARAM: + case SETPARAM: + case DELEGATE: + case IMPORT: + case CLASS: + case INTERFACE: + case FUN: + case OBJECT: + case VAL: + case VAR: + case TYPE_ALIAS: + case CONSTRUCTOR: + case BY: + case COMPANION: + case INIT: + case THIS: + case SUPER: + case WHERE: + case IF: + case WHEN: + case TRY: + case CATCH: + case FINALLY: + case FOR: + case DO: + case WHILE: + case THROW: + case RETURN: + case CONTINUE: + case BREAK: + case OUT: + case DYNAMIC: + case PUBLIC: + case PRIVATE: + case PROTECTED: + case INTERNAL: + case ENUM: + case SEALED: + case ANNOTATION: + case DATA: + case INNER: + case VALUE: + case TAILREC: + case OPERATOR: + case INLINE: + case INFIX: + case EXTERNAL: + case SUSPEND: + case OVERRIDE: + case ABSTRACT: + case FINAL: + case OPEN: + case CONST: + case LATEINIT: + case VARARG: + case NOINLINE: + case CROSSINLINE: + case REIFIED: + case EXPECT: + case ACTUAL: + case RealLiteral: + case IntegerLiteral: + case HexLiteral: + case BinLiteral: + case UnsignedLiteral: + case LongLiteral: + case BooleanLiteral: + case NullLiteral: + case CharacterLiteral: + case Identifier: + case QUOTE_OPEN: + case TRIPLE_QUOTE_OPEN: + { + setState(1991); + controlStructureBody(); + } + break; + case SEMICOLON: + { + setState(1992); + match(SEMICOLON); + } + break; + default: + throw new NoViableAltException(this); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class DoWhileStatementContext extends ParserRuleContext { + public TerminalNode DO() { return getToken(KotlinParser.DO, 0); } + public TerminalNode WHILE() { return getToken(KotlinParser.WHILE, 0); } + public TerminalNode LPAREN() { return getToken(KotlinParser.LPAREN, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode RPAREN() { return getToken(KotlinParser.RPAREN, 0); } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public ControlStructureBodyContext controlStructureBody() { + return getRuleContext(ControlStructureBodyContext.class,0); + } + public DoWhileStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_doWhileStatement; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterDoWhileStatement(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitDoWhileStatement(this); + } + } + + public final DoWhileStatementContext doWhileStatement() throws RecognitionException { + DoWhileStatementContext _localctx = new DoWhileStatementContext(_ctx, getState()); + enterRule(_localctx, 142, RULE_doWhileStatement); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(1995); + match(DO); + setState(1999); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,297,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(1996); + match(NL); + } + } + } + setState(2001); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,297,_ctx); + } + setState(2003); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,298,_ctx) ) { + case 1: + { + setState(2002); + controlStructureBody(); + } + break; + } + setState(2008); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2005); + match(NL); + } + } + setState(2010); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2011); + match(WHILE); + setState(2015); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2012); + match(NL); + } + } + setState(2017); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2018); + match(LPAREN); + setState(2019); + expression(); + setState(2020); + match(RPAREN); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class AssignmentContext extends ParserRuleContext { + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public DirectlyAssignableExpressionContext directlyAssignableExpression() { + return getRuleContext(DirectlyAssignableExpressionContext.class,0); + } + public TerminalNode ASSIGNMENT() { return getToken(KotlinParser.ASSIGNMENT, 0); } + public AssignableExpressionContext assignableExpression() { + return getRuleContext(AssignableExpressionContext.class,0); + } + public AssignmentAndOperatorContext assignmentAndOperator() { + return getRuleContext(AssignmentAndOperatorContext.class,0); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public AssignmentContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_assignment; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterAssignment(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitAssignment(this); + } + } + + public final AssignmentContext assignment() throws RecognitionException { + AssignmentContext _localctx = new AssignmentContext(_ctx, getState()); + enterRule(_localctx, 144, RULE_assignment); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(2028); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,301,_ctx) ) { + case 1: + { + setState(2022); + directlyAssignableExpression(); + setState(2023); + match(ASSIGNMENT); + } + break; + case 2: + { + setState(2025); + assignableExpression(); + setState(2026); + assignmentAndOperator(); + } + break; + } + setState(2033); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2030); + match(NL); + } + } + setState(2035); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2036); + expression(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class SemiContext extends ParserRuleContext { + public TerminalNode SEMICOLON() { return getToken(KotlinParser.SEMICOLON, 0); } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public TerminalNode EOF() { return getToken(KotlinParser.EOF, 0); } + public SemiContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_semi; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterSemi(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitSemi(this); + } + } + + public final SemiContext semi() throws RecognitionException { + SemiContext _localctx = new SemiContext(_ctx, getState()); + enterRule(_localctx, 146, RULE_semi); + int _la; + try { + int _alt; + setState(2046); + _errHandler.sync(this); + switch (_input.LA(1)) { + case NL: + case SEMICOLON: + enterOuterAlt(_localctx, 1); + { + setState(2038); + _la = _input.LA(1); + if ( !(_la==NL || _la==SEMICOLON) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(2042); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,303,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(2039); + match(NL); + } + } + } + setState(2044); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,303,_ctx); + } + } + break; + case EOF: + enterOuterAlt(_localctx, 2); + { + setState(2045); + match(EOF); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class SemisContext extends ParserRuleContext { + public List SEMICOLON() { return getTokens(KotlinParser.SEMICOLON); } + public TerminalNode SEMICOLON(int i) { + return getToken(KotlinParser.SEMICOLON, i); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public TerminalNode EOF() { return getToken(KotlinParser.EOF, 0); } + public SemisContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_semis; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterSemis(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitSemis(this); + } + } + + public final SemisContext semis() throws RecognitionException { + SemisContext _localctx = new SemisContext(_ctx, getState()); + enterRule(_localctx, 148, RULE_semis); + int _la; + try { + int _alt; + setState(2054); + _errHandler.sync(this); + switch (_input.LA(1)) { + case NL: + case SEMICOLON: + enterOuterAlt(_localctx, 1); + { + setState(2049); + _errHandler.sync(this); + _alt = 1; + do { + switch (_alt) { + case 1: + { + { + setState(2048); + _la = _input.LA(1); + if ( !(_la==NL || _la==SEMICOLON) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + break; + default: + throw new NoViableAltException(this); + } + setState(2051); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,305,_ctx); + } while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ); + } + break; + case EOF: + enterOuterAlt(_localctx, 2); + { + setState(2053); + match(EOF); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ExpressionContext extends ParserRuleContext { + public DisjunctionContext disjunction() { + return getRuleContext(DisjunctionContext.class,0); + } + public ExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_expression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitExpression(this); + } + } + + public final ExpressionContext expression() throws RecognitionException { + ExpressionContext _localctx = new ExpressionContext(_ctx, getState()); + enterRule(_localctx, 150, RULE_expression); + try { + enterOuterAlt(_localctx, 1); + { + setState(2056); + disjunction(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class DisjunctionContext extends ParserRuleContext { + public List conjunction() { + return getRuleContexts(ConjunctionContext.class); + } + public ConjunctionContext conjunction(int i) { + return getRuleContext(ConjunctionContext.class,i); + } + public List DISJ() { return getTokens(KotlinParser.DISJ); } + public TerminalNode DISJ(int i) { + return getToken(KotlinParser.DISJ, i); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public DisjunctionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_disjunction; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterDisjunction(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitDisjunction(this); + } + } + + public final DisjunctionContext disjunction() throws RecognitionException { + DisjunctionContext _localctx = new DisjunctionContext(_ctx, getState()); + enterRule(_localctx, 152, RULE_disjunction); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(2058); + conjunction(); + setState(2075); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,309,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(2062); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2059); + match(NL); + } + } + setState(2064); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2065); + match(DISJ); + setState(2069); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2066); + match(NL); + } + } + setState(2071); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2072); + conjunction(); + } + } + } + setState(2077); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,309,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ConjunctionContext extends ParserRuleContext { + public List equality() { + return getRuleContexts(EqualityContext.class); + } + public EqualityContext equality(int i) { + return getRuleContext(EqualityContext.class,i); + } + public List CONJ() { return getTokens(KotlinParser.CONJ); } + public TerminalNode CONJ(int i) { + return getToken(KotlinParser.CONJ, i); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public ConjunctionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_conjunction; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterConjunction(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitConjunction(this); + } + } + + public final ConjunctionContext conjunction() throws RecognitionException { + ConjunctionContext _localctx = new ConjunctionContext(_ctx, getState()); + enterRule(_localctx, 154, RULE_conjunction); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(2078); + equality(); + setState(2095); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,312,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(2082); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2079); + match(NL); + } + } + setState(2084); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2085); + match(CONJ); + setState(2089); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2086); + match(NL); + } + } + setState(2091); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2092); + equality(); + } + } + } + setState(2097); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,312,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class EqualityContext extends ParserRuleContext { + public List comparison() { + return getRuleContexts(ComparisonContext.class); + } + public ComparisonContext comparison(int i) { + return getRuleContext(ComparisonContext.class,i); + } + public List equalityOperator() { + return getRuleContexts(EqualityOperatorContext.class); + } + public EqualityOperatorContext equalityOperator(int i) { + return getRuleContext(EqualityOperatorContext.class,i); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public EqualityContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_equality; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterEquality(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitEquality(this); + } + } + + public final EqualityContext equality() throws RecognitionException { + EqualityContext _localctx = new EqualityContext(_ctx, getState()); + enterRule(_localctx, 156, RULE_equality); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(2098); + comparison(); + setState(2110); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,314,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(2099); + equalityOperator(); + setState(2103); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2100); + match(NL); + } + } + setState(2105); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2106); + comparison(); + } + } + } + setState(2112); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,314,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ComparisonContext extends ParserRuleContext { + public List genericCallLikeComparison() { + return getRuleContexts(GenericCallLikeComparisonContext.class); + } + public GenericCallLikeComparisonContext genericCallLikeComparison(int i) { + return getRuleContext(GenericCallLikeComparisonContext.class,i); + } + public List comparisonOperator() { + return getRuleContexts(ComparisonOperatorContext.class); + } + public ComparisonOperatorContext comparisonOperator(int i) { + return getRuleContext(ComparisonOperatorContext.class,i); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public ComparisonContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_comparison; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterComparison(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitComparison(this); + } + } + + public final ComparisonContext comparison() throws RecognitionException { + ComparisonContext _localctx = new ComparisonContext(_ctx, getState()); + enterRule(_localctx, 158, RULE_comparison); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(2113); + genericCallLikeComparison(); + setState(2125); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,316,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(2114); + comparisonOperator(); + setState(2118); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2115); + match(NL); + } + } + setState(2120); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2121); + genericCallLikeComparison(); + } + } + } + setState(2127); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,316,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class GenericCallLikeComparisonContext extends ParserRuleContext { + public InfixOperationContext infixOperation() { + return getRuleContext(InfixOperationContext.class,0); + } + public List callSuffix() { + return getRuleContexts(CallSuffixContext.class); + } + public CallSuffixContext callSuffix(int i) { + return getRuleContext(CallSuffixContext.class,i); + } + public GenericCallLikeComparisonContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_genericCallLikeComparison; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterGenericCallLikeComparison(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitGenericCallLikeComparison(this); + } + } + + public final GenericCallLikeComparisonContext genericCallLikeComparison() throws RecognitionException { + GenericCallLikeComparisonContext _localctx = new GenericCallLikeComparisonContext(_ctx, getState()); + enterRule(_localctx, 160, RULE_genericCallLikeComparison); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(2128); + infixOperation(); + setState(2132); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,317,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(2129); + callSuffix(); + } + } + } + setState(2134); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,317,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class InfixOperationContext extends ParserRuleContext { + public List elvisExpression() { + return getRuleContexts(ElvisExpressionContext.class); + } + public ElvisExpressionContext elvisExpression(int i) { + return getRuleContext(ElvisExpressionContext.class,i); + } + public List inOperator() { + return getRuleContexts(InOperatorContext.class); + } + public InOperatorContext inOperator(int i) { + return getRuleContext(InOperatorContext.class,i); + } + public List isOperator() { + return getRuleContexts(IsOperatorContext.class); + } + public IsOperatorContext isOperator(int i) { + return getRuleContext(IsOperatorContext.class,i); + } + public List type() { + return getRuleContexts(TypeContext.class); + } + public TypeContext type(int i) { + return getRuleContext(TypeContext.class,i); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public InfixOperationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_infixOperation; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterInfixOperation(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitInfixOperation(this); + } + } + + public final InfixOperationContext infixOperation() throws RecognitionException { + InfixOperationContext _localctx = new InfixOperationContext(_ctx, getState()); + enterRule(_localctx, 162, RULE_infixOperation); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(2135); + elvisExpression(); + setState(2156); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,321,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + setState(2154); + _errHandler.sync(this); + switch (_input.LA(1)) { + case IN: + case NOT_IN: + { + setState(2136); + inOperator(); + setState(2140); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2137); + match(NL); + } + } + setState(2142); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2143); + elvisExpression(); + } + break; + case IS: + case NOT_IS: + { + setState(2145); + isOperator(); + setState(2149); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2146); + match(NL); + } + } + setState(2151); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2152); + type(); + } + break; + default: + throw new NoViableAltException(this); + } + } + } + setState(2158); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,321,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ElvisExpressionContext extends ParserRuleContext { + public List infixFunctionCall() { + return getRuleContexts(InfixFunctionCallContext.class); + } + public InfixFunctionCallContext infixFunctionCall(int i) { + return getRuleContext(InfixFunctionCallContext.class,i); + } + public List elvis() { + return getRuleContexts(ElvisContext.class); + } + public ElvisContext elvis(int i) { + return getRuleContext(ElvisContext.class,i); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public ElvisExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_elvisExpression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterElvisExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitElvisExpression(this); + } + } + + public final ElvisExpressionContext elvisExpression() throws RecognitionException { + ElvisExpressionContext _localctx = new ElvisExpressionContext(_ctx, getState()); + enterRule(_localctx, 164, RULE_elvisExpression); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(2159); + infixFunctionCall(); + setState(2177); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,324,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(2163); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2160); + match(NL); + } + } + setState(2165); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2166); + elvis(); + setState(2170); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2167); + match(NL); + } + } + setState(2172); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2173); + infixFunctionCall(); + } + } + } + setState(2179); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,324,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ElvisContext extends ParserRuleContext { + public TerminalNode QUEST_NO_WS() { return getToken(KotlinParser.QUEST_NO_WS, 0); } + public TerminalNode COLON() { return getToken(KotlinParser.COLON, 0); } + public ElvisContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_elvis; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterElvis(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitElvis(this); + } + } + + public final ElvisContext elvis() throws RecognitionException { + ElvisContext _localctx = new ElvisContext(_ctx, getState()); + enterRule(_localctx, 166, RULE_elvis); + try { + enterOuterAlt(_localctx, 1); + { + setState(2180); + match(QUEST_NO_WS); + setState(2181); + match(COLON); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class InfixFunctionCallContext extends ParserRuleContext { + public List rangeExpression() { + return getRuleContexts(RangeExpressionContext.class); + } + public RangeExpressionContext rangeExpression(int i) { + return getRuleContext(RangeExpressionContext.class,i); + } + public List simpleIdentifier() { + return getRuleContexts(SimpleIdentifierContext.class); + } + public SimpleIdentifierContext simpleIdentifier(int i) { + return getRuleContext(SimpleIdentifierContext.class,i); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public InfixFunctionCallContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_infixFunctionCall; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterInfixFunctionCall(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitInfixFunctionCall(this); + } + } + + public final InfixFunctionCallContext infixFunctionCall() throws RecognitionException { + InfixFunctionCallContext _localctx = new InfixFunctionCallContext(_ctx, getState()); + enterRule(_localctx, 168, RULE_infixFunctionCall); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(2183); + rangeExpression(); + setState(2195); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,326,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(2184); + simpleIdentifier(); + setState(2188); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2185); + match(NL); + } + } + setState(2190); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2191); + rangeExpression(); + } + } + } + setState(2197); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,326,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class RangeExpressionContext extends ParserRuleContext { + public List additiveExpression() { + return getRuleContexts(AdditiveExpressionContext.class); + } + public AdditiveExpressionContext additiveExpression(int i) { + return getRuleContext(AdditiveExpressionContext.class,i); + } + public List RANGE() { return getTokens(KotlinParser.RANGE); } + public TerminalNode RANGE(int i) { + return getToken(KotlinParser.RANGE, i); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public RangeExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_rangeExpression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterRangeExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitRangeExpression(this); + } + } + + public final RangeExpressionContext rangeExpression() throws RecognitionException { + RangeExpressionContext _localctx = new RangeExpressionContext(_ctx, getState()); + enterRule(_localctx, 170, RULE_rangeExpression); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(2198); + additiveExpression(); + setState(2209); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,328,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(2199); + match(RANGE); + setState(2203); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2200); + match(NL); + } + } + setState(2205); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2206); + additiveExpression(); + } + } + } + setState(2211); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,328,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class AdditiveExpressionContext extends ParserRuleContext { + public List multiplicativeExpression() { + return getRuleContexts(MultiplicativeExpressionContext.class); + } + public MultiplicativeExpressionContext multiplicativeExpression(int i) { + return getRuleContext(MultiplicativeExpressionContext.class,i); + } + public List additiveOperator() { + return getRuleContexts(AdditiveOperatorContext.class); + } + public AdditiveOperatorContext additiveOperator(int i) { + return getRuleContext(AdditiveOperatorContext.class,i); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public AdditiveExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_additiveExpression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterAdditiveExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitAdditiveExpression(this); + } + } + + public final AdditiveExpressionContext additiveExpression() throws RecognitionException { + AdditiveExpressionContext _localctx = new AdditiveExpressionContext(_ctx, getState()); + enterRule(_localctx, 172, RULE_additiveExpression); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(2212); + multiplicativeExpression(); + setState(2224); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,330,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(2213); + additiveOperator(); + setState(2217); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2214); + match(NL); + } + } + setState(2219); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2220); + multiplicativeExpression(); + } + } + } + setState(2226); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,330,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class MultiplicativeExpressionContext extends ParserRuleContext { + public List asExpression() { + return getRuleContexts(AsExpressionContext.class); + } + public AsExpressionContext asExpression(int i) { + return getRuleContext(AsExpressionContext.class,i); + } + public List multiplicativeOperator() { + return getRuleContexts(MultiplicativeOperatorContext.class); + } + public MultiplicativeOperatorContext multiplicativeOperator(int i) { + return getRuleContext(MultiplicativeOperatorContext.class,i); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public MultiplicativeExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_multiplicativeExpression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterMultiplicativeExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitMultiplicativeExpression(this); + } + } + + public final MultiplicativeExpressionContext multiplicativeExpression() throws RecognitionException { + MultiplicativeExpressionContext _localctx = new MultiplicativeExpressionContext(_ctx, getState()); + enterRule(_localctx, 174, RULE_multiplicativeExpression); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(2227); + asExpression(); + setState(2239); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,332,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(2228); + multiplicativeOperator(); + setState(2232); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2229); + match(NL); + } + } + setState(2234); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2235); + asExpression(); + } + } + } + setState(2241); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,332,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class AsExpressionContext extends ParserRuleContext { + public PrefixUnaryExpressionContext prefixUnaryExpression() { + return getRuleContext(PrefixUnaryExpressionContext.class,0); + } + public List asOperator() { + return getRuleContexts(AsOperatorContext.class); + } + public AsOperatorContext asOperator(int i) { + return getRuleContext(AsOperatorContext.class,i); + } + public List type() { + return getRuleContexts(TypeContext.class); + } + public TypeContext type(int i) { + return getRuleContext(TypeContext.class,i); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public AsExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_asExpression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterAsExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitAsExpression(this); + } + } + + public final AsExpressionContext asExpression() throws RecognitionException { + AsExpressionContext _localctx = new AsExpressionContext(_ctx, getState()); + enterRule(_localctx, 176, RULE_asExpression); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(2242); + prefixUnaryExpression(); + setState(2260); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,335,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(2246); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2243); + match(NL); + } + } + setState(2248); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2249); + asOperator(); + setState(2253); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2250); + match(NL); + } + } + setState(2255); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2256); + type(); + } + } + } + setState(2262); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,335,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class PrefixUnaryExpressionContext extends ParserRuleContext { + public PostfixUnaryExpressionContext postfixUnaryExpression() { + return getRuleContext(PostfixUnaryExpressionContext.class,0); + } + public List unaryPrefix() { + return getRuleContexts(UnaryPrefixContext.class); + } + public UnaryPrefixContext unaryPrefix(int i) { + return getRuleContext(UnaryPrefixContext.class,i); + } + public PrefixUnaryExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_prefixUnaryExpression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterPrefixUnaryExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitPrefixUnaryExpression(this); + } + } + + public final PrefixUnaryExpressionContext prefixUnaryExpression() throws RecognitionException { + PrefixUnaryExpressionContext _localctx = new PrefixUnaryExpressionContext(_ctx, getState()); + enterRule(_localctx, 178, RULE_prefixUnaryExpression); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(2266); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,336,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(2263); + unaryPrefix(); + } + } + } + setState(2268); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,336,_ctx); + } + setState(2269); + postfixUnaryExpression(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class UnaryPrefixContext extends ParserRuleContext { + public AnnotationContext annotation() { + return getRuleContext(AnnotationContext.class,0); + } + public LabelContext label() { + return getRuleContext(LabelContext.class,0); + } + public PrefixUnaryOperatorContext prefixUnaryOperator() { + return getRuleContext(PrefixUnaryOperatorContext.class,0); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public UnaryPrefixContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_unaryPrefix; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterUnaryPrefix(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitUnaryPrefix(this); + } + } + + public final UnaryPrefixContext unaryPrefix() throws RecognitionException { + UnaryPrefixContext _localctx = new UnaryPrefixContext(_ctx, getState()); + enterRule(_localctx, 180, RULE_unaryPrefix); + int _la; + try { + setState(2280); + _errHandler.sync(this); + switch (_input.LA(1)) { + case AT_NO_WS: + case AT_PRE_WS: + enterOuterAlt(_localctx, 1); + { + setState(2271); + annotation(); + } + break; + case FILE: + case FIELD: + case PROPERTY: + case GET: + case SET: + case RECEIVER: + case PARAM: + case SETPARAM: + case DELEGATE: + case IMPORT: + case CONSTRUCTOR: + case BY: + case COMPANION: + case INIT: + case WHERE: + case CATCH: + case FINALLY: + case OUT: + case DYNAMIC: + case PUBLIC: + case PRIVATE: + case PROTECTED: + case INTERNAL: + case ENUM: + case SEALED: + case ANNOTATION: + case DATA: + case INNER: + case VALUE: + case TAILREC: + case OPERATOR: + case INLINE: + case INFIX: + case EXTERNAL: + case SUSPEND: + case OVERRIDE: + case ABSTRACT: + case FINAL: + case OPEN: + case CONST: + case LATEINIT: + case VARARG: + case NOINLINE: + case CROSSINLINE: + case REIFIED: + case EXPECT: + case ACTUAL: + case Identifier: + enterOuterAlt(_localctx, 2); + { + setState(2272); + label(); + } + break; + case ADD: + case SUB: + case INCR: + case DECR: + case EXCL_WS: + case EXCL_NO_WS: + enterOuterAlt(_localctx, 3); + { + setState(2273); + prefixUnaryOperator(); + setState(2277); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2274); + match(NL); + } + } + setState(2279); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class PostfixUnaryExpressionContext extends ParserRuleContext { + public PrimaryExpressionContext primaryExpression() { + return getRuleContext(PrimaryExpressionContext.class,0); + } + public List postfixUnarySuffix() { + return getRuleContexts(PostfixUnarySuffixContext.class); + } + public PostfixUnarySuffixContext postfixUnarySuffix(int i) { + return getRuleContext(PostfixUnarySuffixContext.class,i); + } + public PostfixUnaryExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_postfixUnaryExpression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterPostfixUnaryExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitPostfixUnaryExpression(this); + } + } + + public final PostfixUnaryExpressionContext postfixUnaryExpression() throws RecognitionException { + PostfixUnaryExpressionContext _localctx = new PostfixUnaryExpressionContext(_ctx, getState()); + enterRule(_localctx, 182, RULE_postfixUnaryExpression); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(2282); + primaryExpression(); + setState(2286); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,339,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(2283); + postfixUnarySuffix(); + } + } + } + setState(2288); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,339,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class PostfixUnarySuffixContext extends ParserRuleContext { + public PostfixUnaryOperatorContext postfixUnaryOperator() { + return getRuleContext(PostfixUnaryOperatorContext.class,0); + } + public TypeArgumentsContext typeArguments() { + return getRuleContext(TypeArgumentsContext.class,0); + } + public CallSuffixContext callSuffix() { + return getRuleContext(CallSuffixContext.class,0); + } + public IndexingSuffixContext indexingSuffix() { + return getRuleContext(IndexingSuffixContext.class,0); + } + public NavigationSuffixContext navigationSuffix() { + return getRuleContext(NavigationSuffixContext.class,0); + } + public PostfixUnarySuffixContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_postfixUnarySuffix; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterPostfixUnarySuffix(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitPostfixUnarySuffix(this); + } + } + + public final PostfixUnarySuffixContext postfixUnarySuffix() throws RecognitionException { + PostfixUnarySuffixContext _localctx = new PostfixUnarySuffixContext(_ctx, getState()); + enterRule(_localctx, 184, RULE_postfixUnarySuffix); + try { + setState(2294); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,340,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(2289); + postfixUnaryOperator(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(2290); + typeArguments(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(2291); + callSuffix(); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(2292); + indexingSuffix(); + } + break; + case 5: + enterOuterAlt(_localctx, 5); + { + setState(2293); + navigationSuffix(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class DirectlyAssignableExpressionContext extends ParserRuleContext { + public PostfixUnaryExpressionContext postfixUnaryExpression() { + return getRuleContext(PostfixUnaryExpressionContext.class,0); + } + public AssignableSuffixContext assignableSuffix() { + return getRuleContext(AssignableSuffixContext.class,0); + } + public SimpleIdentifierContext simpleIdentifier() { + return getRuleContext(SimpleIdentifierContext.class,0); + } + public ParenthesizedDirectlyAssignableExpressionContext parenthesizedDirectlyAssignableExpression() { + return getRuleContext(ParenthesizedDirectlyAssignableExpressionContext.class,0); + } + public DirectlyAssignableExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_directlyAssignableExpression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterDirectlyAssignableExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitDirectlyAssignableExpression(this); + } + } + + public final DirectlyAssignableExpressionContext directlyAssignableExpression() throws RecognitionException { + DirectlyAssignableExpressionContext _localctx = new DirectlyAssignableExpressionContext(_ctx, getState()); + enterRule(_localctx, 186, RULE_directlyAssignableExpression); + try { + setState(2301); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,341,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(2296); + postfixUnaryExpression(); + setState(2297); + assignableSuffix(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(2299); + simpleIdentifier(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(2300); + parenthesizedDirectlyAssignableExpression(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ParenthesizedDirectlyAssignableExpressionContext extends ParserRuleContext { + public TerminalNode LPAREN() { return getToken(KotlinParser.LPAREN, 0); } + public DirectlyAssignableExpressionContext directlyAssignableExpression() { + return getRuleContext(DirectlyAssignableExpressionContext.class,0); + } + public TerminalNode RPAREN() { return getToken(KotlinParser.RPAREN, 0); } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public ParenthesizedDirectlyAssignableExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_parenthesizedDirectlyAssignableExpression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterParenthesizedDirectlyAssignableExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitParenthesizedDirectlyAssignableExpression(this); + } + } + + public final ParenthesizedDirectlyAssignableExpressionContext parenthesizedDirectlyAssignableExpression() throws RecognitionException { + ParenthesizedDirectlyAssignableExpressionContext _localctx = new ParenthesizedDirectlyAssignableExpressionContext(_ctx, getState()); + enterRule(_localctx, 188, RULE_parenthesizedDirectlyAssignableExpression); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(2303); + match(LPAREN); + setState(2307); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2304); + match(NL); + } + } + setState(2309); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2310); + directlyAssignableExpression(); + setState(2314); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2311); + match(NL); + } + } + setState(2316); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2317); + match(RPAREN); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class AssignableExpressionContext extends ParserRuleContext { + public PrefixUnaryExpressionContext prefixUnaryExpression() { + return getRuleContext(PrefixUnaryExpressionContext.class,0); + } + public ParenthesizedAssignableExpressionContext parenthesizedAssignableExpression() { + return getRuleContext(ParenthesizedAssignableExpressionContext.class,0); + } + public AssignableExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_assignableExpression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterAssignableExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitAssignableExpression(this); + } + } + + public final AssignableExpressionContext assignableExpression() throws RecognitionException { + AssignableExpressionContext _localctx = new AssignableExpressionContext(_ctx, getState()); + enterRule(_localctx, 190, RULE_assignableExpression); + try { + setState(2321); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,344,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(2319); + prefixUnaryExpression(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(2320); + parenthesizedAssignableExpression(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ParenthesizedAssignableExpressionContext extends ParserRuleContext { + public TerminalNode LPAREN() { return getToken(KotlinParser.LPAREN, 0); } + public AssignableExpressionContext assignableExpression() { + return getRuleContext(AssignableExpressionContext.class,0); + } + public TerminalNode RPAREN() { return getToken(KotlinParser.RPAREN, 0); } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public ParenthesizedAssignableExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_parenthesizedAssignableExpression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterParenthesizedAssignableExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitParenthesizedAssignableExpression(this); + } + } + + public final ParenthesizedAssignableExpressionContext parenthesizedAssignableExpression() throws RecognitionException { + ParenthesizedAssignableExpressionContext _localctx = new ParenthesizedAssignableExpressionContext(_ctx, getState()); + enterRule(_localctx, 192, RULE_parenthesizedAssignableExpression); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(2323); + match(LPAREN); + setState(2327); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2324); + match(NL); + } + } + setState(2329); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2330); + assignableExpression(); + setState(2334); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2331); + match(NL); + } + } + setState(2336); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2337); + match(RPAREN); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class AssignableSuffixContext extends ParserRuleContext { + public TypeArgumentsContext typeArguments() { + return getRuleContext(TypeArgumentsContext.class,0); + } + public IndexingSuffixContext indexingSuffix() { + return getRuleContext(IndexingSuffixContext.class,0); + } + public NavigationSuffixContext navigationSuffix() { + return getRuleContext(NavigationSuffixContext.class,0); + } + public AssignableSuffixContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_assignableSuffix; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterAssignableSuffix(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitAssignableSuffix(this); + } + } + + public final AssignableSuffixContext assignableSuffix() throws RecognitionException { + AssignableSuffixContext _localctx = new AssignableSuffixContext(_ctx, getState()); + enterRule(_localctx, 194, RULE_assignableSuffix); + try { + setState(2342); + _errHandler.sync(this); + switch (_input.LA(1)) { + case LANGLE: + enterOuterAlt(_localctx, 1); + { + setState(2339); + typeArguments(); + } + break; + case LSQUARE: + enterOuterAlt(_localctx, 2); + { + setState(2340); + indexingSuffix(); + } + break; + case NL: + case DOT: + case COLONCOLON: + case QUEST_NO_WS: + enterOuterAlt(_localctx, 3); + { + setState(2341); + navigationSuffix(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class IndexingSuffixContext extends ParserRuleContext { + public TerminalNode LSQUARE() { return getToken(KotlinParser.LSQUARE, 0); } + public List expression() { + return getRuleContexts(ExpressionContext.class); + } + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); + } + public TerminalNode RSQUARE() { return getToken(KotlinParser.RSQUARE, 0); } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public List COMMA() { return getTokens(KotlinParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(KotlinParser.COMMA, i); + } + public IndexingSuffixContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_indexingSuffix; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterIndexingSuffix(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitIndexingSuffix(this); + } + } + + public final IndexingSuffixContext indexingSuffix() throws RecognitionException { + IndexingSuffixContext _localctx = new IndexingSuffixContext(_ctx, getState()); + enterRule(_localctx, 196, RULE_indexingSuffix); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(2344); + match(LSQUARE); + setState(2348); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2345); + match(NL); + } + } + setState(2350); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2351); + expression(); + setState(2368); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,351,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(2355); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2352); + match(NL); + } + } + setState(2357); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2358); + match(COMMA); + setState(2362); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2359); + match(NL); + } + } + setState(2364); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2365); + expression(); + } + } + } + setState(2370); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,351,_ctx); + } + setState(2378); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,353,_ctx) ) { + case 1: + { + setState(2374); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2371); + match(NL); + } + } + setState(2376); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2377); + match(COMMA); + } + break; + } + setState(2383); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2380); + match(NL); + } + } + setState(2385); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2386); + match(RSQUARE); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class NavigationSuffixContext extends ParserRuleContext { + public MemberAccessOperatorContext memberAccessOperator() { + return getRuleContext(MemberAccessOperatorContext.class,0); + } + public SimpleIdentifierContext simpleIdentifier() { + return getRuleContext(SimpleIdentifierContext.class,0); + } + public ParenthesizedExpressionContext parenthesizedExpression() { + return getRuleContext(ParenthesizedExpressionContext.class,0); + } + public TerminalNode CLASS() { return getToken(KotlinParser.CLASS, 0); } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public NavigationSuffixContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_navigationSuffix; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterNavigationSuffix(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitNavigationSuffix(this); + } + } + + public final NavigationSuffixContext navigationSuffix() throws RecognitionException { + NavigationSuffixContext _localctx = new NavigationSuffixContext(_ctx, getState()); + enterRule(_localctx, 198, RULE_navigationSuffix); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(2388); + memberAccessOperator(); + setState(2392); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2389); + match(NL); + } + } + setState(2394); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2398); + _errHandler.sync(this); + switch (_input.LA(1)) { + case FILE: + case FIELD: + case PROPERTY: + case GET: + case SET: + case RECEIVER: + case PARAM: + case SETPARAM: + case DELEGATE: + case IMPORT: + case CONSTRUCTOR: + case BY: + case COMPANION: + case INIT: + case WHERE: + case CATCH: + case FINALLY: + case OUT: + case DYNAMIC: + case PUBLIC: + case PRIVATE: + case PROTECTED: + case INTERNAL: + case ENUM: + case SEALED: + case ANNOTATION: + case DATA: + case INNER: + case VALUE: + case TAILREC: + case OPERATOR: + case INLINE: + case INFIX: + case EXTERNAL: + case SUSPEND: + case OVERRIDE: + case ABSTRACT: + case FINAL: + case OPEN: + case CONST: + case LATEINIT: + case VARARG: + case NOINLINE: + case CROSSINLINE: + case REIFIED: + case EXPECT: + case ACTUAL: + case Identifier: + { + setState(2395); + simpleIdentifier(); + } + break; + case LPAREN: + { + setState(2396); + parenthesizedExpression(); + } + break; + case CLASS: + { + setState(2397); + match(CLASS); + } + break; + default: + throw new NoViableAltException(this); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class CallSuffixContext extends ParserRuleContext { + public AnnotatedLambdaContext annotatedLambda() { + return getRuleContext(AnnotatedLambdaContext.class,0); + } + public ValueArgumentsContext valueArguments() { + return getRuleContext(ValueArgumentsContext.class,0); + } + public TypeArgumentsContext typeArguments() { + return getRuleContext(TypeArgumentsContext.class,0); + } + public CallSuffixContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_callSuffix; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterCallSuffix(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitCallSuffix(this); + } + } + + public final CallSuffixContext callSuffix() throws RecognitionException { + CallSuffixContext _localctx = new CallSuffixContext(_ctx, getState()); + enterRule(_localctx, 200, RULE_callSuffix); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(2401); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==LANGLE) { + { + setState(2400); + typeArguments(); + } + } + + setState(2408); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,359,_ctx) ) { + case 1: + { + setState(2404); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==LPAREN) { + { + setState(2403); + valueArguments(); + } + } + + setState(2406); + annotatedLambda(); + } + break; + case 2: + { + setState(2407); + valueArguments(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class AnnotatedLambdaContext extends ParserRuleContext { + public LambdaLiteralContext lambdaLiteral() { + return getRuleContext(LambdaLiteralContext.class,0); + } + public List annotation() { + return getRuleContexts(AnnotationContext.class); + } + public AnnotationContext annotation(int i) { + return getRuleContext(AnnotationContext.class,i); + } + public LabelContext label() { + return getRuleContext(LabelContext.class,0); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public AnnotatedLambdaContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_annotatedLambda; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterAnnotatedLambda(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitAnnotatedLambda(this); + } + } + + public final AnnotatedLambdaContext annotatedLambda() throws RecognitionException { + AnnotatedLambdaContext _localctx = new AnnotatedLambdaContext(_ctx, getState()); + enterRule(_localctx, 202, RULE_annotatedLambda); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(2413); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==AT_NO_WS || _la==AT_PRE_WS) { + { + { + setState(2410); + annotation(); + } + } + setState(2415); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2417); + _errHandler.sync(this); + _la = _input.LA(1); + if (((((_la - 61)) & ~0x3f) == 0 && ((1L << (_la - 61)) & ((1L << (FILE - 61)) | (1L << (FIELD - 61)) | (1L << (PROPERTY - 61)) | (1L << (GET - 61)) | (1L << (SET - 61)) | (1L << (RECEIVER - 61)) | (1L << (PARAM - 61)) | (1L << (SETPARAM - 61)) | (1L << (DELEGATE - 61)) | (1L << (IMPORT - 61)) | (1L << (CONSTRUCTOR - 61)) | (1L << (BY - 61)) | (1L << (COMPANION - 61)) | (1L << (INIT - 61)) | (1L << (WHERE - 61)) | (1L << (CATCH - 61)) | (1L << (FINALLY - 61)) | (1L << (OUT - 61)) | (1L << (DYNAMIC - 61)) | (1L << (PUBLIC - 61)) | (1L << (PRIVATE - 61)) | (1L << (PROTECTED - 61)) | (1L << (INTERNAL - 61)) | (1L << (ENUM - 61)) | (1L << (SEALED - 61)) | (1L << (ANNOTATION - 61)) | (1L << (DATA - 61)) | (1L << (INNER - 61)) | (1L << (VALUE - 61)) | (1L << (TAILREC - 61)) | (1L << (OPERATOR - 61)) | (1L << (INLINE - 61)) | (1L << (INFIX - 61)) | (1L << (EXTERNAL - 61)) | (1L << (SUSPEND - 61)) | (1L << (OVERRIDE - 61)) | (1L << (ABSTRACT - 61)))) != 0) || ((((_la - 125)) & ~0x3f) == 0 && ((1L << (_la - 125)) & ((1L << (FINAL - 125)) | (1L << (OPEN - 125)) | (1L << (CONST - 125)) | (1L << (LATEINIT - 125)) | (1L << (VARARG - 125)) | (1L << (NOINLINE - 125)) | (1L << (CROSSINLINE - 125)) | (1L << (REIFIED - 125)) | (1L << (EXPECT - 125)) | (1L << (ACTUAL - 125)) | (1L << (Identifier - 125)))) != 0)) { + { + setState(2416); + label(); + } + } + + setState(2422); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2419); + match(NL); + } + } + setState(2424); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2425); + lambdaLiteral(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TypeArgumentsContext extends ParserRuleContext { + public TerminalNode LANGLE() { return getToken(KotlinParser.LANGLE, 0); } + public List typeProjection() { + return getRuleContexts(TypeProjectionContext.class); + } + public TypeProjectionContext typeProjection(int i) { + return getRuleContext(TypeProjectionContext.class,i); + } + public TerminalNode RANGLE() { return getToken(KotlinParser.RANGLE, 0); } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public List COMMA() { return getTokens(KotlinParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(KotlinParser.COMMA, i); + } + public TypeArgumentsContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_typeArguments; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterTypeArguments(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitTypeArguments(this); + } + } + + public final TypeArgumentsContext typeArguments() throws RecognitionException { + TypeArgumentsContext _localctx = new TypeArgumentsContext(_ctx, getState()); + enterRule(_localctx, 204, RULE_typeArguments); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(2427); + match(LANGLE); + setState(2431); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2428); + match(NL); + } + } + setState(2433); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2434); + typeProjection(); + setState(2451); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,366,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(2438); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2435); + match(NL); + } + } + setState(2440); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2441); + match(COMMA); + setState(2445); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2442); + match(NL); + } + } + setState(2447); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2448); + typeProjection(); + } + } + } + setState(2453); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,366,_ctx); + } + setState(2461); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,368,_ctx) ) { + case 1: + { + setState(2457); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2454); + match(NL); + } + } + setState(2459); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2460); + match(COMMA); + } + break; + } + setState(2466); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2463); + match(NL); + } + } + setState(2468); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2469); + match(RANGLE); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ValueArgumentsContext extends ParserRuleContext { + public TerminalNode LPAREN() { return getToken(KotlinParser.LPAREN, 0); } + public TerminalNode RPAREN() { return getToken(KotlinParser.RPAREN, 0); } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public List valueArgument() { + return getRuleContexts(ValueArgumentContext.class); + } + public ValueArgumentContext valueArgument(int i) { + return getRuleContext(ValueArgumentContext.class,i); + } + public List COMMA() { return getTokens(KotlinParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(KotlinParser.COMMA, i); + } + public ValueArgumentsContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_valueArguments; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterValueArguments(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitValueArguments(this); + } + } + + public final ValueArgumentsContext valueArguments() throws RecognitionException { + ValueArgumentsContext _localctx = new ValueArgumentsContext(_ctx, getState()); + enterRule(_localctx, 206, RULE_valueArguments); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(2471); + match(LPAREN); + setState(2475); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,370,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(2472); + match(NL); + } + } + } + setState(2477); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,370,_ctx); + } + setState(2513); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << NL) | (1L << LPAREN) | (1L << LSQUARE) | (1L << LCURL) | (1L << MULT) | (1L << ADD) | (1L << SUB) | (1L << INCR) | (1L << DECR) | (1L << EXCL_WS) | (1L << EXCL_NO_WS) | (1L << COLONCOLON) | (1L << AT_NO_WS) | (1L << AT_PRE_WS) | (1L << RETURN_AT) | (1L << CONTINUE_AT) | (1L << BREAK_AT) | (1L << THIS_AT) | (1L << SUPER_AT) | (1L << FILE) | (1L << FIELD) | (1L << PROPERTY))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (GET - 64)) | (1L << (SET - 64)) | (1L << (RECEIVER - 64)) | (1L << (PARAM - 64)) | (1L << (SETPARAM - 64)) | (1L << (DELEGATE - 64)) | (1L << (IMPORT - 64)) | (1L << (FUN - 64)) | (1L << (OBJECT - 64)) | (1L << (CONSTRUCTOR - 64)) | (1L << (BY - 64)) | (1L << (COMPANION - 64)) | (1L << (INIT - 64)) | (1L << (THIS - 64)) | (1L << (SUPER - 64)) | (1L << (WHERE - 64)) | (1L << (IF - 64)) | (1L << (WHEN - 64)) | (1L << (TRY - 64)) | (1L << (CATCH - 64)) | (1L << (FINALLY - 64)) | (1L << (THROW - 64)) | (1L << (RETURN - 64)) | (1L << (CONTINUE - 64)) | (1L << (BREAK - 64)) | (1L << (OUT - 64)) | (1L << (DYNAMIC - 64)) | (1L << (PUBLIC - 64)) | (1L << (PRIVATE - 64)) | (1L << (PROTECTED - 64)) | (1L << (INTERNAL - 64)) | (1L << (ENUM - 64)) | (1L << (SEALED - 64)) | (1L << (ANNOTATION - 64)) | (1L << (DATA - 64)) | (1L << (INNER - 64)) | (1L << (VALUE - 64)) | (1L << (TAILREC - 64)) | (1L << (OPERATOR - 64)) | (1L << (INLINE - 64)) | (1L << (INFIX - 64)) | (1L << (EXTERNAL - 64)) | (1L << (SUSPEND - 64)) | (1L << (OVERRIDE - 64)) | (1L << (ABSTRACT - 64)) | (1L << (FINAL - 64)) | (1L << (OPEN - 64)) | (1L << (CONST - 64)))) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & ((1L << (LATEINIT - 128)) | (1L << (VARARG - 128)) | (1L << (NOINLINE - 128)) | (1L << (CROSSINLINE - 128)) | (1L << (REIFIED - 128)) | (1L << (EXPECT - 128)) | (1L << (ACTUAL - 128)) | (1L << (RealLiteral - 128)) | (1L << (IntegerLiteral - 128)) | (1L << (HexLiteral - 128)) | (1L << (BinLiteral - 128)) | (1L << (UnsignedLiteral - 128)) | (1L << (LongLiteral - 128)) | (1L << (BooleanLiteral - 128)) | (1L << (NullLiteral - 128)) | (1L << (CharacterLiteral - 128)) | (1L << (Identifier - 128)) | (1L << (QUOTE_OPEN - 128)) | (1L << (TRIPLE_QUOTE_OPEN - 128)))) != 0)) { + { + setState(2478); + valueArgument(); + setState(2495); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,373,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(2482); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2479); + match(NL); + } + } + setState(2484); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2485); + match(COMMA); + setState(2489); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,372,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(2486); + match(NL); + } + } + } + setState(2491); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,372,_ctx); + } + setState(2492); + valueArgument(); + } + } + } + setState(2497); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,373,_ctx); + } + setState(2505); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,375,_ctx) ) { + case 1: + { + setState(2501); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2498); + match(NL); + } + } + setState(2503); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2504); + match(COMMA); + } + break; + } + setState(2510); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2507); + match(NL); + } + } + setState(2512); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + + setState(2515); + match(RPAREN); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ValueArgumentContext extends ParserRuleContext { + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public AnnotationContext annotation() { + return getRuleContext(AnnotationContext.class,0); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public SimpleIdentifierContext simpleIdentifier() { + return getRuleContext(SimpleIdentifierContext.class,0); + } + public TerminalNode ASSIGNMENT() { return getToken(KotlinParser.ASSIGNMENT, 0); } + public TerminalNode MULT() { return getToken(KotlinParser.MULT, 0); } + public ValueArgumentContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_valueArgument; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterValueArgument(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitValueArgument(this); + } + } + + public final ValueArgumentContext valueArgument() throws RecognitionException { + ValueArgumentContext _localctx = new ValueArgumentContext(_ctx, getState()); + enterRule(_localctx, 208, RULE_valueArgument); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(2518); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,378,_ctx) ) { + case 1: + { + setState(2517); + annotation(); + } + break; + } + setState(2523); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,379,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(2520); + match(NL); + } + } + } + setState(2525); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,379,_ctx); + } + setState(2540); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,382,_ctx) ) { + case 1: + { + setState(2526); + simpleIdentifier(); + setState(2530); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2527); + match(NL); + } + } + setState(2532); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2533); + match(ASSIGNMENT); + setState(2537); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,381,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(2534); + match(NL); + } + } + } + setState(2539); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,381,_ctx); + } + } + break; + } + setState(2543); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==MULT) { + { + setState(2542); + match(MULT); + } + } + + setState(2548); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2545); + match(NL); + } + } + setState(2550); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2551); + expression(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class PrimaryExpressionContext extends ParserRuleContext { + public ParenthesizedExpressionContext parenthesizedExpression() { + return getRuleContext(ParenthesizedExpressionContext.class,0); + } + public SimpleIdentifierContext simpleIdentifier() { + return getRuleContext(SimpleIdentifierContext.class,0); + } + public LiteralConstantContext literalConstant() { + return getRuleContext(LiteralConstantContext.class,0); + } + public StringLiteralContext stringLiteral() { + return getRuleContext(StringLiteralContext.class,0); + } + public CallableReferenceContext callableReference() { + return getRuleContext(CallableReferenceContext.class,0); + } + public FunctionLiteralContext functionLiteral() { + return getRuleContext(FunctionLiteralContext.class,0); + } + public ObjectLiteralContext objectLiteral() { + return getRuleContext(ObjectLiteralContext.class,0); + } + public CollectionLiteralContext collectionLiteral() { + return getRuleContext(CollectionLiteralContext.class,0); + } + public ThisExpressionContext thisExpression() { + return getRuleContext(ThisExpressionContext.class,0); + } + public SuperExpressionContext superExpression() { + return getRuleContext(SuperExpressionContext.class,0); + } + public IfExpressionContext ifExpression() { + return getRuleContext(IfExpressionContext.class,0); + } + public WhenExpressionContext whenExpression() { + return getRuleContext(WhenExpressionContext.class,0); + } + public TryExpressionContext tryExpression() { + return getRuleContext(TryExpressionContext.class,0); + } + public JumpExpressionContext jumpExpression() { + return getRuleContext(JumpExpressionContext.class,0); + } + public PrimaryExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_primaryExpression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterPrimaryExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitPrimaryExpression(this); + } + } + + public final PrimaryExpressionContext primaryExpression() throws RecognitionException { + PrimaryExpressionContext _localctx = new PrimaryExpressionContext(_ctx, getState()); + enterRule(_localctx, 210, RULE_primaryExpression); + try { + setState(2567); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,385,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(2553); + parenthesizedExpression(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(2554); + simpleIdentifier(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(2555); + literalConstant(); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(2556); + stringLiteral(); + } + break; + case 5: + enterOuterAlt(_localctx, 5); + { + setState(2557); + callableReference(); + } + break; + case 6: + enterOuterAlt(_localctx, 6); + { + setState(2558); + functionLiteral(); + } + break; + case 7: + enterOuterAlt(_localctx, 7); + { + setState(2559); + objectLiteral(); + } + break; + case 8: + enterOuterAlt(_localctx, 8); + { + setState(2560); + collectionLiteral(); + } + break; + case 9: + enterOuterAlt(_localctx, 9); + { + setState(2561); + thisExpression(); + } + break; + case 10: + enterOuterAlt(_localctx, 10); + { + setState(2562); + superExpression(); + } + break; + case 11: + enterOuterAlt(_localctx, 11); + { + setState(2563); + ifExpression(); + } + break; + case 12: + enterOuterAlt(_localctx, 12); + { + setState(2564); + whenExpression(); + } + break; + case 13: + enterOuterAlt(_localctx, 13); + { + setState(2565); + tryExpression(); + } + break; + case 14: + enterOuterAlt(_localctx, 14); + { + setState(2566); + jumpExpression(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ParenthesizedExpressionContext extends ParserRuleContext { + public TerminalNode LPAREN() { return getToken(KotlinParser.LPAREN, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode RPAREN() { return getToken(KotlinParser.RPAREN, 0); } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public ParenthesizedExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_parenthesizedExpression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterParenthesizedExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitParenthesizedExpression(this); + } + } + + public final ParenthesizedExpressionContext parenthesizedExpression() throws RecognitionException { + ParenthesizedExpressionContext _localctx = new ParenthesizedExpressionContext(_ctx, getState()); + enterRule(_localctx, 212, RULE_parenthesizedExpression); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(2569); + match(LPAREN); + setState(2573); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2570); + match(NL); + } + } + setState(2575); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2576); + expression(); + setState(2580); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2577); + match(NL); + } + } + setState(2582); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2583); + match(RPAREN); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class CollectionLiteralContext extends ParserRuleContext { + public TerminalNode LSQUARE() { return getToken(KotlinParser.LSQUARE, 0); } + public TerminalNode RSQUARE() { return getToken(KotlinParser.RSQUARE, 0); } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public List expression() { + return getRuleContexts(ExpressionContext.class); + } + public ExpressionContext expression(int i) { + return getRuleContext(ExpressionContext.class,i); + } + public List COMMA() { return getTokens(KotlinParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(KotlinParser.COMMA, i); + } + public CollectionLiteralContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_collectionLiteral; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterCollectionLiteral(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitCollectionLiteral(this); + } + } + + public final CollectionLiteralContext collectionLiteral() throws RecognitionException { + CollectionLiteralContext _localctx = new CollectionLiteralContext(_ctx, getState()); + enterRule(_localctx, 214, RULE_collectionLiteral); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(2585); + match(LSQUARE); + setState(2589); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2586); + match(NL); + } + } + setState(2591); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2627); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << LPAREN) | (1L << LSQUARE) | (1L << LCURL) | (1L << ADD) | (1L << SUB) | (1L << INCR) | (1L << DECR) | (1L << EXCL_WS) | (1L << EXCL_NO_WS) | (1L << COLONCOLON) | (1L << AT_NO_WS) | (1L << AT_PRE_WS) | (1L << RETURN_AT) | (1L << CONTINUE_AT) | (1L << BREAK_AT) | (1L << THIS_AT) | (1L << SUPER_AT) | (1L << FILE) | (1L << FIELD) | (1L << PROPERTY))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (GET - 64)) | (1L << (SET - 64)) | (1L << (RECEIVER - 64)) | (1L << (PARAM - 64)) | (1L << (SETPARAM - 64)) | (1L << (DELEGATE - 64)) | (1L << (IMPORT - 64)) | (1L << (FUN - 64)) | (1L << (OBJECT - 64)) | (1L << (CONSTRUCTOR - 64)) | (1L << (BY - 64)) | (1L << (COMPANION - 64)) | (1L << (INIT - 64)) | (1L << (THIS - 64)) | (1L << (SUPER - 64)) | (1L << (WHERE - 64)) | (1L << (IF - 64)) | (1L << (WHEN - 64)) | (1L << (TRY - 64)) | (1L << (CATCH - 64)) | (1L << (FINALLY - 64)) | (1L << (THROW - 64)) | (1L << (RETURN - 64)) | (1L << (CONTINUE - 64)) | (1L << (BREAK - 64)) | (1L << (OUT - 64)) | (1L << (DYNAMIC - 64)) | (1L << (PUBLIC - 64)) | (1L << (PRIVATE - 64)) | (1L << (PROTECTED - 64)) | (1L << (INTERNAL - 64)) | (1L << (ENUM - 64)) | (1L << (SEALED - 64)) | (1L << (ANNOTATION - 64)) | (1L << (DATA - 64)) | (1L << (INNER - 64)) | (1L << (VALUE - 64)) | (1L << (TAILREC - 64)) | (1L << (OPERATOR - 64)) | (1L << (INLINE - 64)) | (1L << (INFIX - 64)) | (1L << (EXTERNAL - 64)) | (1L << (SUSPEND - 64)) | (1L << (OVERRIDE - 64)) | (1L << (ABSTRACT - 64)) | (1L << (FINAL - 64)) | (1L << (OPEN - 64)) | (1L << (CONST - 64)))) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & ((1L << (LATEINIT - 128)) | (1L << (VARARG - 128)) | (1L << (NOINLINE - 128)) | (1L << (CROSSINLINE - 128)) | (1L << (REIFIED - 128)) | (1L << (EXPECT - 128)) | (1L << (ACTUAL - 128)) | (1L << (RealLiteral - 128)) | (1L << (IntegerLiteral - 128)) | (1L << (HexLiteral - 128)) | (1L << (BinLiteral - 128)) | (1L << (UnsignedLiteral - 128)) | (1L << (LongLiteral - 128)) | (1L << (BooleanLiteral - 128)) | (1L << (NullLiteral - 128)) | (1L << (CharacterLiteral - 128)) | (1L << (Identifier - 128)) | (1L << (QUOTE_OPEN - 128)) | (1L << (TRIPLE_QUOTE_OPEN - 128)))) != 0)) { + { + setState(2592); + expression(); + setState(2609); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,391,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(2596); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2593); + match(NL); + } + } + setState(2598); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2599); + match(COMMA); + setState(2603); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2600); + match(NL); + } + } + setState(2605); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2606); + expression(); + } + } + } + setState(2611); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,391,_ctx); + } + setState(2619); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,393,_ctx) ) { + case 1: + { + setState(2615); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2612); + match(NL); + } + } + setState(2617); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2618); + match(COMMA); + } + break; + } + setState(2624); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2621); + match(NL); + } + } + setState(2626); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + + setState(2629); + match(RSQUARE); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class LiteralConstantContext extends ParserRuleContext { + public TerminalNode BooleanLiteral() { return getToken(KotlinParser.BooleanLiteral, 0); } + public TerminalNode IntegerLiteral() { return getToken(KotlinParser.IntegerLiteral, 0); } + public TerminalNode HexLiteral() { return getToken(KotlinParser.HexLiteral, 0); } + public TerminalNode BinLiteral() { return getToken(KotlinParser.BinLiteral, 0); } + public TerminalNode CharacterLiteral() { return getToken(KotlinParser.CharacterLiteral, 0); } + public TerminalNode RealLiteral() { return getToken(KotlinParser.RealLiteral, 0); } + public TerminalNode NullLiteral() { return getToken(KotlinParser.NullLiteral, 0); } + public TerminalNode LongLiteral() { return getToken(KotlinParser.LongLiteral, 0); } + public TerminalNode UnsignedLiteral() { return getToken(KotlinParser.UnsignedLiteral, 0); } + public LiteralConstantContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_literalConstant; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterLiteralConstant(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitLiteralConstant(this); + } + } + + public final LiteralConstantContext literalConstant() throws RecognitionException { + LiteralConstantContext _localctx = new LiteralConstantContext(_ctx, getState()); + enterRule(_localctx, 216, RULE_literalConstant); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(2631); + _la = _input.LA(1); + if ( !(((((_la - 135)) & ~0x3f) == 0 && ((1L << (_la - 135)) & ((1L << (RealLiteral - 135)) | (1L << (IntegerLiteral - 135)) | (1L << (HexLiteral - 135)) | (1L << (BinLiteral - 135)) | (1L << (UnsignedLiteral - 135)) | (1L << (LongLiteral - 135)) | (1L << (BooleanLiteral - 135)) | (1L << (NullLiteral - 135)) | (1L << (CharacterLiteral - 135)))) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class StringLiteralContext extends ParserRuleContext { + public LineStringLiteralContext lineStringLiteral() { + return getRuleContext(LineStringLiteralContext.class,0); + } + public MultiLineStringLiteralContext multiLineStringLiteral() { + return getRuleContext(MultiLineStringLiteralContext.class,0); + } + public StringLiteralContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_stringLiteral; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterStringLiteral(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitStringLiteral(this); + } + } + + public final StringLiteralContext stringLiteral() throws RecognitionException { + StringLiteralContext _localctx = new StringLiteralContext(_ctx, getState()); + enterRule(_localctx, 218, RULE_stringLiteral); + try { + setState(2635); + _errHandler.sync(this); + switch (_input.LA(1)) { + case QUOTE_OPEN: + enterOuterAlt(_localctx, 1); + { + setState(2633); + lineStringLiteral(); + } + break; + case TRIPLE_QUOTE_OPEN: + enterOuterAlt(_localctx, 2); + { + setState(2634); + multiLineStringLiteral(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class LineStringLiteralContext extends ParserRuleContext { + public TerminalNode QUOTE_OPEN() { return getToken(KotlinParser.QUOTE_OPEN, 0); } + public TerminalNode QUOTE_CLOSE() { return getToken(KotlinParser.QUOTE_CLOSE, 0); } + public List lineStringContent() { + return getRuleContexts(LineStringContentContext.class); + } + public LineStringContentContext lineStringContent(int i) { + return getRuleContext(LineStringContentContext.class,i); + } + public List lineStringExpression() { + return getRuleContexts(LineStringExpressionContext.class); + } + public LineStringExpressionContext lineStringExpression(int i) { + return getRuleContext(LineStringExpressionContext.class,i); + } + public LineStringLiteralContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_lineStringLiteral; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterLineStringLiteral(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitLineStringLiteral(this); + } + } + + public final LineStringLiteralContext lineStringLiteral() throws RecognitionException { + LineStringLiteralContext _localctx = new LineStringLiteralContext(_ctx, getState()); + enterRule(_localctx, 220, RULE_lineStringLiteral); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(2637); + match(QUOTE_OPEN); + setState(2642); + _errHandler.sync(this); + _la = _input.LA(1); + while (((((_la - 159)) & ~0x3f) == 0 && ((1L << (_la - 159)) & ((1L << (LineStrRef - 159)) | (1L << (LineStrText - 159)) | (1L << (LineStrEscapedChar - 159)) | (1L << (LineStrExprStart - 159)))) != 0)) { + { + setState(2640); + _errHandler.sync(this); + switch (_input.LA(1)) { + case LineStrRef: + case LineStrText: + case LineStrEscapedChar: + { + setState(2638); + lineStringContent(); + } + break; + case LineStrExprStart: + { + setState(2639); + lineStringExpression(); + } + break; + default: + throw new NoViableAltException(this); + } + } + setState(2644); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2645); + match(QUOTE_CLOSE); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class MultiLineStringLiteralContext extends ParserRuleContext { + public TerminalNode TRIPLE_QUOTE_OPEN() { return getToken(KotlinParser.TRIPLE_QUOTE_OPEN, 0); } + public TerminalNode TRIPLE_QUOTE_CLOSE() { return getToken(KotlinParser.TRIPLE_QUOTE_CLOSE, 0); } + public List multiLineStringContent() { + return getRuleContexts(MultiLineStringContentContext.class); + } + public MultiLineStringContentContext multiLineStringContent(int i) { + return getRuleContext(MultiLineStringContentContext.class,i); + } + public List multiLineStringExpression() { + return getRuleContexts(MultiLineStringExpressionContext.class); + } + public MultiLineStringExpressionContext multiLineStringExpression(int i) { + return getRuleContext(MultiLineStringExpressionContext.class,i); + } + public List MultiLineStringQuote() { return getTokens(KotlinParser.MultiLineStringQuote); } + public TerminalNode MultiLineStringQuote(int i) { + return getToken(KotlinParser.MultiLineStringQuote, i); + } + public MultiLineStringLiteralContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_multiLineStringLiteral; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterMultiLineStringLiteral(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitMultiLineStringLiteral(this); + } + } + + public final MultiLineStringLiteralContext multiLineStringLiteral() throws RecognitionException { + MultiLineStringLiteralContext _localctx = new MultiLineStringLiteralContext(_ctx, getState()); + enterRule(_localctx, 222, RULE_multiLineStringLiteral); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(2647); + match(TRIPLE_QUOTE_OPEN); + setState(2653); + _errHandler.sync(this); + _la = _input.LA(1); + while (((((_la - 164)) & ~0x3f) == 0 && ((1L << (_la - 164)) & ((1L << (MultiLineStringQuote - 164)) | (1L << (MultiLineStrRef - 164)) | (1L << (MultiLineStrText - 164)) | (1L << (MultiLineStrExprStart - 164)))) != 0)) { + { + setState(2651); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,399,_ctx) ) { + case 1: + { + setState(2648); + multiLineStringContent(); + } + break; + case 2: + { + setState(2649); + multiLineStringExpression(); + } + break; + case 3: + { + setState(2650); + match(MultiLineStringQuote); + } + break; + } + } + setState(2655); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2656); + match(TRIPLE_QUOTE_CLOSE); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class LineStringContentContext extends ParserRuleContext { + public TerminalNode LineStrText() { return getToken(KotlinParser.LineStrText, 0); } + public TerminalNode LineStrEscapedChar() { return getToken(KotlinParser.LineStrEscapedChar, 0); } + public TerminalNode LineStrRef() { return getToken(KotlinParser.LineStrRef, 0); } + public LineStringContentContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_lineStringContent; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterLineStringContent(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitLineStringContent(this); + } + } + + public final LineStringContentContext lineStringContent() throws RecognitionException { + LineStringContentContext _localctx = new LineStringContentContext(_ctx, getState()); + enterRule(_localctx, 224, RULE_lineStringContent); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(2658); + _la = _input.LA(1); + if ( !(((((_la - 159)) & ~0x3f) == 0 && ((1L << (_la - 159)) & ((1L << (LineStrRef - 159)) | (1L << (LineStrText - 159)) | (1L << (LineStrEscapedChar - 159)))) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class LineStringExpressionContext extends ParserRuleContext { + public TerminalNode LineStrExprStart() { return getToken(KotlinParser.LineStrExprStart, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode RCURL() { return getToken(KotlinParser.RCURL, 0); } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public LineStringExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_lineStringExpression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterLineStringExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitLineStringExpression(this); + } + } + + public final LineStringExpressionContext lineStringExpression() throws RecognitionException { + LineStringExpressionContext _localctx = new LineStringExpressionContext(_ctx, getState()); + enterRule(_localctx, 226, RULE_lineStringExpression); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(2660); + match(LineStrExprStart); + setState(2664); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2661); + match(NL); + } + } + setState(2666); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2667); + expression(); + setState(2671); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2668); + match(NL); + } + } + setState(2673); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2674); + match(RCURL); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class MultiLineStringContentContext extends ParserRuleContext { + public TerminalNode MultiLineStrText() { return getToken(KotlinParser.MultiLineStrText, 0); } + public TerminalNode MultiLineStringQuote() { return getToken(KotlinParser.MultiLineStringQuote, 0); } + public TerminalNode MultiLineStrRef() { return getToken(KotlinParser.MultiLineStrRef, 0); } + public MultiLineStringContentContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_multiLineStringContent; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterMultiLineStringContent(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitMultiLineStringContent(this); + } + } + + public final MultiLineStringContentContext multiLineStringContent() throws RecognitionException { + MultiLineStringContentContext _localctx = new MultiLineStringContentContext(_ctx, getState()); + enterRule(_localctx, 228, RULE_multiLineStringContent); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(2676); + _la = _input.LA(1); + if ( !(((((_la - 164)) & ~0x3f) == 0 && ((1L << (_la - 164)) & ((1L << (MultiLineStringQuote - 164)) | (1L << (MultiLineStrRef - 164)) | (1L << (MultiLineStrText - 164)))) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class MultiLineStringExpressionContext extends ParserRuleContext { + public TerminalNode MultiLineStrExprStart() { return getToken(KotlinParser.MultiLineStrExprStart, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode RCURL() { return getToken(KotlinParser.RCURL, 0); } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public MultiLineStringExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_multiLineStringExpression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterMultiLineStringExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitMultiLineStringExpression(this); + } + } + + public final MultiLineStringExpressionContext multiLineStringExpression() throws RecognitionException { + MultiLineStringExpressionContext _localctx = new MultiLineStringExpressionContext(_ctx, getState()); + enterRule(_localctx, 230, RULE_multiLineStringExpression); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(2678); + match(MultiLineStrExprStart); + setState(2682); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2679); + match(NL); + } + } + setState(2684); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2685); + expression(); + setState(2689); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2686); + match(NL); + } + } + setState(2691); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2692); + match(RCURL); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class LambdaLiteralContext extends ParserRuleContext { + public TerminalNode LCURL() { return getToken(KotlinParser.LCURL, 0); } + public StatementsContext statements() { + return getRuleContext(StatementsContext.class,0); + } + public TerminalNode RCURL() { return getToken(KotlinParser.RCURL, 0); } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public TerminalNode ARROW() { return getToken(KotlinParser.ARROW, 0); } + public LambdaParametersContext lambdaParameters() { + return getRuleContext(LambdaParametersContext.class,0); + } + public LambdaLiteralContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_lambdaLiteral; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterLambdaLiteral(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitLambdaLiteral(this); + } + } + + public final LambdaLiteralContext lambdaLiteral() throws RecognitionException { + LambdaLiteralContext _localctx = new LambdaLiteralContext(_ctx, getState()); + enterRule(_localctx, 232, RULE_lambdaLiteral); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(2694); + match(LCURL); + setState(2698); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,405,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(2695); + match(NL); + } + } + } + setState(2700); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,405,_ctx); + } + setState(2717); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,409,_ctx) ) { + case 1: + { + setState(2702); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,406,_ctx) ) { + case 1: + { + setState(2701); + lambdaParameters(); + } + break; + } + setState(2707); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2704); + match(NL); + } + } + setState(2709); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2710); + match(ARROW); + setState(2714); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,408,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(2711); + match(NL); + } + } + } + setState(2716); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,408,_ctx); + } + } + break; + } + setState(2719); + statements(); + setState(2723); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2720); + match(NL); + } + } + setState(2725); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2726); + match(RCURL); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class LambdaParametersContext extends ParserRuleContext { + public List lambdaParameter() { + return getRuleContexts(LambdaParameterContext.class); + } + public LambdaParameterContext lambdaParameter(int i) { + return getRuleContext(LambdaParameterContext.class,i); + } + public List COMMA() { return getTokens(KotlinParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(KotlinParser.COMMA, i); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public LambdaParametersContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_lambdaParameters; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterLambdaParameters(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitLambdaParameters(this); + } + } + + public final LambdaParametersContext lambdaParameters() throws RecognitionException { + LambdaParametersContext _localctx = new LambdaParametersContext(_ctx, getState()); + enterRule(_localctx, 234, RULE_lambdaParameters); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(2728); + lambdaParameter(); + setState(2745); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,413,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(2732); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2729); + match(NL); + } + } + setState(2734); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2735); + match(COMMA); + setState(2739); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,412,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(2736); + match(NL); + } + } + } + setState(2741); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,412,_ctx); + } + setState(2742); + lambdaParameter(); + } + } + } + setState(2747); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,413,_ctx); + } + setState(2755); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,415,_ctx) ) { + case 1: + { + setState(2751); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2748); + match(NL); + } + } + setState(2753); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2754); + match(COMMA); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class LambdaParameterContext extends ParserRuleContext { + public VariableDeclarationContext variableDeclaration() { + return getRuleContext(VariableDeclarationContext.class,0); + } + public MultiVariableDeclarationContext multiVariableDeclaration() { + return getRuleContext(MultiVariableDeclarationContext.class,0); + } + public TerminalNode COLON() { return getToken(KotlinParser.COLON, 0); } + public TypeContext type() { + return getRuleContext(TypeContext.class,0); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public LambdaParameterContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_lambdaParameter; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterLambdaParameter(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitLambdaParameter(this); + } + } + + public final LambdaParameterContext lambdaParameter() throws RecognitionException { + LambdaParameterContext _localctx = new LambdaParameterContext(_ctx, getState()); + enterRule(_localctx, 236, RULE_lambdaParameter); + int _la; + try { + setState(2775); + _errHandler.sync(this); + switch (_input.LA(1)) { + case NL: + case AT_NO_WS: + case AT_PRE_WS: + case FILE: + case FIELD: + case PROPERTY: + case GET: + case SET: + case RECEIVER: + case PARAM: + case SETPARAM: + case DELEGATE: + case IMPORT: + case CONSTRUCTOR: + case BY: + case COMPANION: + case INIT: + case WHERE: + case CATCH: + case FINALLY: + case OUT: + case DYNAMIC: + case PUBLIC: + case PRIVATE: + case PROTECTED: + case INTERNAL: + case ENUM: + case SEALED: + case ANNOTATION: + case DATA: + case INNER: + case VALUE: + case TAILREC: + case OPERATOR: + case INLINE: + case INFIX: + case EXTERNAL: + case SUSPEND: + case OVERRIDE: + case ABSTRACT: + case FINAL: + case OPEN: + case CONST: + case LATEINIT: + case VARARG: + case NOINLINE: + case CROSSINLINE: + case REIFIED: + case EXPECT: + case ACTUAL: + case Identifier: + enterOuterAlt(_localctx, 1); + { + setState(2757); + variableDeclaration(); + } + break; + case LPAREN: + enterOuterAlt(_localctx, 2); + { + setState(2758); + multiVariableDeclaration(); + setState(2773); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,418,_ctx) ) { + case 1: + { + setState(2762); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2759); + match(NL); + } + } + setState(2764); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2765); + match(COLON); + setState(2769); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2766); + match(NL); + } + } + setState(2771); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2772); + type(); + } + break; + } + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class AnonymousFunctionContext extends ParserRuleContext { + public TerminalNode FUN() { return getToken(KotlinParser.FUN, 0); } + public ParametersWithOptionalTypeContext parametersWithOptionalType() { + return getRuleContext(ParametersWithOptionalTypeContext.class,0); + } + public List type() { + return getRuleContexts(TypeContext.class); + } + public TypeContext type(int i) { + return getRuleContext(TypeContext.class,i); + } + public TerminalNode DOT() { return getToken(KotlinParser.DOT, 0); } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public TerminalNode COLON() { return getToken(KotlinParser.COLON, 0); } + public TypeConstraintsContext typeConstraints() { + return getRuleContext(TypeConstraintsContext.class,0); + } + public FunctionBodyContext functionBody() { + return getRuleContext(FunctionBodyContext.class,0); + } + public AnonymousFunctionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_anonymousFunction; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterAnonymousFunction(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitAnonymousFunction(this); + } + } + + public final AnonymousFunctionContext anonymousFunction() throws RecognitionException { + AnonymousFunctionContext _localctx = new AnonymousFunctionContext(_ctx, getState()); + enterRule(_localctx, 238, RULE_anonymousFunction); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(2777); + match(FUN); + setState(2793); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,422,_ctx) ) { + case 1: + { + setState(2781); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2778); + match(NL); + } + } + setState(2783); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2784); + type(); + setState(2788); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2785); + match(NL); + } + } + setState(2790); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2791); + match(DOT); + } + break; + } + setState(2798); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2795); + match(NL); + } + } + setState(2800); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2801); + parametersWithOptionalType(); + setState(2816); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,426,_ctx) ) { + case 1: + { + setState(2805); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2802); + match(NL); + } + } + setState(2807); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2808); + match(COLON); + setState(2812); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2809); + match(NL); + } + } + setState(2814); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2815); + type(); + } + break; + } + setState(2825); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,428,_ctx) ) { + case 1: + { + setState(2821); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2818); + match(NL); + } + } + setState(2823); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2824); + typeConstraints(); + } + break; + } + setState(2834); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,430,_ctx) ) { + case 1: + { + setState(2830); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2827); + match(NL); + } + } + setState(2832); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2833); + functionBody(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class FunctionLiteralContext extends ParserRuleContext { + public LambdaLiteralContext lambdaLiteral() { + return getRuleContext(LambdaLiteralContext.class,0); + } + public AnonymousFunctionContext anonymousFunction() { + return getRuleContext(AnonymousFunctionContext.class,0); + } + public FunctionLiteralContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_functionLiteral; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterFunctionLiteral(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitFunctionLiteral(this); + } + } + + public final FunctionLiteralContext functionLiteral() throws RecognitionException { + FunctionLiteralContext _localctx = new FunctionLiteralContext(_ctx, getState()); + enterRule(_localctx, 240, RULE_functionLiteral); + try { + setState(2838); + _errHandler.sync(this); + switch (_input.LA(1)) { + case LCURL: + enterOuterAlt(_localctx, 1); + { + setState(2836); + lambdaLiteral(); + } + break; + case FUN: + enterOuterAlt(_localctx, 2); + { + setState(2837); + anonymousFunction(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ObjectLiteralContext extends ParserRuleContext { + public TerminalNode OBJECT() { return getToken(KotlinParser.OBJECT, 0); } + public TerminalNode COLON() { return getToken(KotlinParser.COLON, 0); } + public DelegationSpecifiersContext delegationSpecifiers() { + return getRuleContext(DelegationSpecifiersContext.class,0); + } + public ClassBodyContext classBody() { + return getRuleContext(ClassBodyContext.class,0); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public ObjectLiteralContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_objectLiteral; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterObjectLiteral(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitObjectLiteral(this); + } + } + + public final ObjectLiteralContext objectLiteral() throws RecognitionException { + ObjectLiteralContext _localctx = new ObjectLiteralContext(_ctx, getState()); + enterRule(_localctx, 242, RULE_objectLiteral); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(2840); + match(OBJECT); + setState(2861); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,435,_ctx) ) { + case 1: + { + setState(2844); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2841); + match(NL); + } + } + setState(2846); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2847); + match(COLON); + setState(2851); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,433,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(2848); + match(NL); + } + } + } + setState(2853); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,433,_ctx); + } + setState(2854); + delegationSpecifiers(); + setState(2858); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,434,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(2855); + match(NL); + } + } + } + setState(2860); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,434,_ctx); + } + } + break; + } + setState(2870); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,437,_ctx) ) { + case 1: + { + setState(2866); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2863); + match(NL); + } + } + setState(2868); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2869); + classBody(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ThisExpressionContext extends ParserRuleContext { + public TerminalNode THIS() { return getToken(KotlinParser.THIS, 0); } + public TerminalNode THIS_AT() { return getToken(KotlinParser.THIS_AT, 0); } + public ThisExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_thisExpression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterThisExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitThisExpression(this); + } + } + + public final ThisExpressionContext thisExpression() throws RecognitionException { + ThisExpressionContext _localctx = new ThisExpressionContext(_ctx, getState()); + enterRule(_localctx, 244, RULE_thisExpression); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(2872); + _la = _input.LA(1); + if ( !(_la==THIS_AT || _la==THIS) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class SuperExpressionContext extends ParserRuleContext { + public TerminalNode SUPER() { return getToken(KotlinParser.SUPER, 0); } + public TerminalNode LANGLE() { return getToken(KotlinParser.LANGLE, 0); } + public TypeContext type() { + return getRuleContext(TypeContext.class,0); + } + public TerminalNode RANGLE() { return getToken(KotlinParser.RANGLE, 0); } + public TerminalNode AT_NO_WS() { return getToken(KotlinParser.AT_NO_WS, 0); } + public SimpleIdentifierContext simpleIdentifier() { + return getRuleContext(SimpleIdentifierContext.class,0); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public TerminalNode SUPER_AT() { return getToken(KotlinParser.SUPER_AT, 0); } + public SuperExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_superExpression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterSuperExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitSuperExpression(this); + } + } + + public final SuperExpressionContext superExpression() throws RecognitionException { + SuperExpressionContext _localctx = new SuperExpressionContext(_ctx, getState()); + enterRule(_localctx, 246, RULE_superExpression); + int _la; + try { + setState(2898); + _errHandler.sync(this); + switch (_input.LA(1)) { + case SUPER: + enterOuterAlt(_localctx, 1); + { + setState(2874); + match(SUPER); + setState(2891); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,440,_ctx) ) { + case 1: + { + setState(2875); + match(LANGLE); + setState(2879); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2876); + match(NL); + } + } + setState(2881); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2882); + type(); + setState(2886); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2883); + match(NL); + } + } + setState(2888); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2889); + match(RANGLE); + } + break; + } + setState(2895); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,441,_ctx) ) { + case 1: + { + setState(2893); + match(AT_NO_WS); + setState(2894); + simpleIdentifier(); + } + break; + } + } + break; + case SUPER_AT: + enterOuterAlt(_localctx, 2); + { + setState(2897); + match(SUPER_AT); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class IfExpressionContext extends ParserRuleContext { + public TerminalNode IF() { return getToken(KotlinParser.IF, 0); } + public TerminalNode LPAREN() { return getToken(KotlinParser.LPAREN, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode RPAREN() { return getToken(KotlinParser.RPAREN, 0); } + public List controlStructureBody() { + return getRuleContexts(ControlStructureBodyContext.class); + } + public ControlStructureBodyContext controlStructureBody(int i) { + return getRuleContext(ControlStructureBodyContext.class,i); + } + public TerminalNode ELSE() { return getToken(KotlinParser.ELSE, 0); } + public List SEMICOLON() { return getTokens(KotlinParser.SEMICOLON); } + public TerminalNode SEMICOLON(int i) { + return getToken(KotlinParser.SEMICOLON, i); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public IfExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_ifExpression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterIfExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitIfExpression(this); + } + } + + public final IfExpressionContext ifExpression() throws RecognitionException { + IfExpressionContext _localctx = new IfExpressionContext(_ctx, getState()); + enterRule(_localctx, 248, RULE_ifExpression); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(2900); + match(IF); + setState(2904); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2901); + match(NL); + } + } + setState(2906); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2907); + match(LPAREN); + setState(2911); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2908); + match(NL); + } + } + setState(2913); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2914); + expression(); + setState(2918); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2915); + match(NL); + } + } + setState(2920); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2921); + match(RPAREN); + setState(2925); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,446,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(2922); + match(NL); + } + } + } + setState(2927); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,446,_ctx); + } + setState(2959); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,453,_ctx) ) { + case 1: + { + setState(2928); + controlStructureBody(); + } + break; + case 2: + { + setState(2930); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << LPAREN) | (1L << LSQUARE) | (1L << LCURL) | (1L << ADD) | (1L << SUB) | (1L << INCR) | (1L << DECR) | (1L << EXCL_WS) | (1L << EXCL_NO_WS) | (1L << COLONCOLON) | (1L << AT_NO_WS) | (1L << AT_PRE_WS) | (1L << RETURN_AT) | (1L << CONTINUE_AT) | (1L << BREAK_AT) | (1L << THIS_AT) | (1L << SUPER_AT) | (1L << FILE) | (1L << FIELD) | (1L << PROPERTY))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (GET - 64)) | (1L << (SET - 64)) | (1L << (RECEIVER - 64)) | (1L << (PARAM - 64)) | (1L << (SETPARAM - 64)) | (1L << (DELEGATE - 64)) | (1L << (IMPORT - 64)) | (1L << (CLASS - 64)) | (1L << (INTERFACE - 64)) | (1L << (FUN - 64)) | (1L << (OBJECT - 64)) | (1L << (VAL - 64)) | (1L << (VAR - 64)) | (1L << (TYPE_ALIAS - 64)) | (1L << (CONSTRUCTOR - 64)) | (1L << (BY - 64)) | (1L << (COMPANION - 64)) | (1L << (INIT - 64)) | (1L << (THIS - 64)) | (1L << (SUPER - 64)) | (1L << (WHERE - 64)) | (1L << (IF - 64)) | (1L << (WHEN - 64)) | (1L << (TRY - 64)) | (1L << (CATCH - 64)) | (1L << (FINALLY - 64)) | (1L << (FOR - 64)) | (1L << (DO - 64)) | (1L << (WHILE - 64)) | (1L << (THROW - 64)) | (1L << (RETURN - 64)) | (1L << (CONTINUE - 64)) | (1L << (BREAK - 64)) | (1L << (OUT - 64)) | (1L << (DYNAMIC - 64)) | (1L << (PUBLIC - 64)) | (1L << (PRIVATE - 64)) | (1L << (PROTECTED - 64)) | (1L << (INTERNAL - 64)) | (1L << (ENUM - 64)) | (1L << (SEALED - 64)) | (1L << (ANNOTATION - 64)) | (1L << (DATA - 64)) | (1L << (INNER - 64)) | (1L << (VALUE - 64)) | (1L << (TAILREC - 64)) | (1L << (OPERATOR - 64)) | (1L << (INLINE - 64)) | (1L << (INFIX - 64)) | (1L << (EXTERNAL - 64)) | (1L << (SUSPEND - 64)) | (1L << (OVERRIDE - 64)) | (1L << (ABSTRACT - 64)) | (1L << (FINAL - 64)) | (1L << (OPEN - 64)) | (1L << (CONST - 64)))) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & ((1L << (LATEINIT - 128)) | (1L << (VARARG - 128)) | (1L << (NOINLINE - 128)) | (1L << (CROSSINLINE - 128)) | (1L << (REIFIED - 128)) | (1L << (EXPECT - 128)) | (1L << (ACTUAL - 128)) | (1L << (RealLiteral - 128)) | (1L << (IntegerLiteral - 128)) | (1L << (HexLiteral - 128)) | (1L << (BinLiteral - 128)) | (1L << (UnsignedLiteral - 128)) | (1L << (LongLiteral - 128)) | (1L << (BooleanLiteral - 128)) | (1L << (NullLiteral - 128)) | (1L << (CharacterLiteral - 128)) | (1L << (Identifier - 128)) | (1L << (QUOTE_OPEN - 128)) | (1L << (TRIPLE_QUOTE_OPEN - 128)))) != 0)) { + { + setState(2929); + controlStructureBody(); + } + } + + setState(2935); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,448,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(2932); + match(NL); + } + } + } + setState(2937); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,448,_ctx); + } + setState(2939); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==SEMICOLON) { + { + setState(2938); + match(SEMICOLON); + } + } + + setState(2944); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2941); + match(NL); + } + } + setState(2946); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2947); + match(ELSE); + setState(2951); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2948); + match(NL); + } + } + setState(2953); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2956); + _errHandler.sync(this); + switch (_input.LA(1)) { + case LPAREN: + case LSQUARE: + case LCURL: + case ADD: + case SUB: + case INCR: + case DECR: + case EXCL_WS: + case EXCL_NO_WS: + case COLONCOLON: + case AT_NO_WS: + case AT_PRE_WS: + case RETURN_AT: + case CONTINUE_AT: + case BREAK_AT: + case THIS_AT: + case SUPER_AT: + case FILE: + case FIELD: + case PROPERTY: + case GET: + case SET: + case RECEIVER: + case PARAM: + case SETPARAM: + case DELEGATE: + case IMPORT: + case CLASS: + case INTERFACE: + case FUN: + case OBJECT: + case VAL: + case VAR: + case TYPE_ALIAS: + case CONSTRUCTOR: + case BY: + case COMPANION: + case INIT: + case THIS: + case SUPER: + case WHERE: + case IF: + case WHEN: + case TRY: + case CATCH: + case FINALLY: + case FOR: + case DO: + case WHILE: + case THROW: + case RETURN: + case CONTINUE: + case BREAK: + case OUT: + case DYNAMIC: + case PUBLIC: + case PRIVATE: + case PROTECTED: + case INTERNAL: + case ENUM: + case SEALED: + case ANNOTATION: + case DATA: + case INNER: + case VALUE: + case TAILREC: + case OPERATOR: + case INLINE: + case INFIX: + case EXTERNAL: + case SUSPEND: + case OVERRIDE: + case ABSTRACT: + case FINAL: + case OPEN: + case CONST: + case LATEINIT: + case VARARG: + case NOINLINE: + case CROSSINLINE: + case REIFIED: + case EXPECT: + case ACTUAL: + case RealLiteral: + case IntegerLiteral: + case HexLiteral: + case BinLiteral: + case UnsignedLiteral: + case LongLiteral: + case BooleanLiteral: + case NullLiteral: + case CharacterLiteral: + case Identifier: + case QUOTE_OPEN: + case TRIPLE_QUOTE_OPEN: + { + setState(2954); + controlStructureBody(); + } + break; + case SEMICOLON: + { + setState(2955); + match(SEMICOLON); + } + break; + default: + throw new NoViableAltException(this); + } + } + break; + case 3: + { + setState(2958); + match(SEMICOLON); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class WhenSubjectContext extends ParserRuleContext { + public TerminalNode LPAREN() { return getToken(KotlinParser.LPAREN, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode RPAREN() { return getToken(KotlinParser.RPAREN, 0); } + public TerminalNode VAL() { return getToken(KotlinParser.VAL, 0); } + public VariableDeclarationContext variableDeclaration() { + return getRuleContext(VariableDeclarationContext.class,0); + } + public TerminalNode ASSIGNMENT() { return getToken(KotlinParser.ASSIGNMENT, 0); } + public List annotation() { + return getRuleContexts(AnnotationContext.class); + } + public AnnotationContext annotation(int i) { + return getRuleContext(AnnotationContext.class,i); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public WhenSubjectContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_whenSubject; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterWhenSubject(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitWhenSubject(this); + } + } + + public final WhenSubjectContext whenSubject() throws RecognitionException { + WhenSubjectContext _localctx = new WhenSubjectContext(_ctx, getState()); + enterRule(_localctx, 250, RULE_whenSubject); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(2961); + match(LPAREN); + setState(2995); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,459,_ctx) ) { + case 1: + { + setState(2965); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==AT_NO_WS || _la==AT_PRE_WS) { + { + { + setState(2962); + annotation(); + } + } + setState(2967); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2971); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2968); + match(NL); + } + } + setState(2973); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2974); + match(VAL); + setState(2978); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,456,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(2975); + match(NL); + } + } + } + setState(2980); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,456,_ctx); + } + setState(2981); + variableDeclaration(); + setState(2985); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2982); + match(NL); + } + } + setState(2987); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(2988); + match(ASSIGNMENT); + setState(2992); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(2989); + match(NL); + } + } + setState(2994); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + break; + } + setState(2997); + expression(); + setState(2998); + match(RPAREN); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class WhenExpressionContext extends ParserRuleContext { + public TerminalNode WHEN() { return getToken(KotlinParser.WHEN, 0); } + public TerminalNode LCURL() { return getToken(KotlinParser.LCURL, 0); } + public TerminalNode RCURL() { return getToken(KotlinParser.RCURL, 0); } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public WhenSubjectContext whenSubject() { + return getRuleContext(WhenSubjectContext.class,0); + } + public List whenEntry() { + return getRuleContexts(WhenEntryContext.class); + } + public WhenEntryContext whenEntry(int i) { + return getRuleContext(WhenEntryContext.class,i); + } + public WhenExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_whenExpression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterWhenExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitWhenExpression(this); + } + } + + public final WhenExpressionContext whenExpression() throws RecognitionException { + WhenExpressionContext _localctx = new WhenExpressionContext(_ctx, getState()); + enterRule(_localctx, 252, RULE_whenExpression); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(3000); + match(WHEN); + setState(3004); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,460,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(3001); + match(NL); + } + } + } + setState(3006); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,460,_ctx); + } + setState(3008); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==LPAREN) { + { + setState(3007); + whenSubject(); + } + } + + setState(3013); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(3010); + match(NL); + } + } + setState(3015); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(3016); + match(LCURL); + setState(3020); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,463,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(3017); + match(NL); + } + } + } + setState(3022); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,463,_ctx); + } + setState(3032); + _errHandler.sync(this); + _la = _input.LA(1); + while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << LPAREN) | (1L << LSQUARE) | (1L << LCURL) | (1L << ADD) | (1L << SUB) | (1L << INCR) | (1L << DECR) | (1L << EXCL_WS) | (1L << EXCL_NO_WS) | (1L << COLONCOLON) | (1L << AT_NO_WS) | (1L << AT_PRE_WS) | (1L << RETURN_AT) | (1L << CONTINUE_AT) | (1L << BREAK_AT) | (1L << THIS_AT) | (1L << SUPER_AT) | (1L << FILE) | (1L << FIELD) | (1L << PROPERTY))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (GET - 64)) | (1L << (SET - 64)) | (1L << (RECEIVER - 64)) | (1L << (PARAM - 64)) | (1L << (SETPARAM - 64)) | (1L << (DELEGATE - 64)) | (1L << (IMPORT - 64)) | (1L << (FUN - 64)) | (1L << (OBJECT - 64)) | (1L << (CONSTRUCTOR - 64)) | (1L << (BY - 64)) | (1L << (COMPANION - 64)) | (1L << (INIT - 64)) | (1L << (THIS - 64)) | (1L << (SUPER - 64)) | (1L << (WHERE - 64)) | (1L << (IF - 64)) | (1L << (ELSE - 64)) | (1L << (WHEN - 64)) | (1L << (TRY - 64)) | (1L << (CATCH - 64)) | (1L << (FINALLY - 64)) | (1L << (THROW - 64)) | (1L << (RETURN - 64)) | (1L << (CONTINUE - 64)) | (1L << (BREAK - 64)) | (1L << (IS - 64)) | (1L << (IN - 64)) | (1L << (NOT_IS - 64)) | (1L << (NOT_IN - 64)) | (1L << (OUT - 64)) | (1L << (DYNAMIC - 64)) | (1L << (PUBLIC - 64)) | (1L << (PRIVATE - 64)) | (1L << (PROTECTED - 64)) | (1L << (INTERNAL - 64)) | (1L << (ENUM - 64)) | (1L << (SEALED - 64)) | (1L << (ANNOTATION - 64)) | (1L << (DATA - 64)) | (1L << (INNER - 64)) | (1L << (VALUE - 64)) | (1L << (TAILREC - 64)) | (1L << (OPERATOR - 64)) | (1L << (INLINE - 64)) | (1L << (INFIX - 64)) | (1L << (EXTERNAL - 64)) | (1L << (SUSPEND - 64)) | (1L << (OVERRIDE - 64)) | (1L << (ABSTRACT - 64)) | (1L << (FINAL - 64)) | (1L << (OPEN - 64)) | (1L << (CONST - 64)))) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & ((1L << (LATEINIT - 128)) | (1L << (VARARG - 128)) | (1L << (NOINLINE - 128)) | (1L << (CROSSINLINE - 128)) | (1L << (REIFIED - 128)) | (1L << (EXPECT - 128)) | (1L << (ACTUAL - 128)) | (1L << (RealLiteral - 128)) | (1L << (IntegerLiteral - 128)) | (1L << (HexLiteral - 128)) | (1L << (BinLiteral - 128)) | (1L << (UnsignedLiteral - 128)) | (1L << (LongLiteral - 128)) | (1L << (BooleanLiteral - 128)) | (1L << (NullLiteral - 128)) | (1L << (CharacterLiteral - 128)) | (1L << (Identifier - 128)) | (1L << (QUOTE_OPEN - 128)) | (1L << (TRIPLE_QUOTE_OPEN - 128)))) != 0)) { + { + { + setState(3023); + whenEntry(); + setState(3027); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,464,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(3024); + match(NL); + } + } + } + setState(3029); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,464,_ctx); + } + } + } + setState(3034); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(3038); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(3035); + match(NL); + } + } + setState(3040); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(3041); + match(RCURL); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class WhenEntryContext extends ParserRuleContext { + public List whenCondition() { + return getRuleContexts(WhenConditionContext.class); + } + public WhenConditionContext whenCondition(int i) { + return getRuleContext(WhenConditionContext.class,i); + } + public TerminalNode ARROW() { return getToken(KotlinParser.ARROW, 0); } + public ControlStructureBodyContext controlStructureBody() { + return getRuleContext(ControlStructureBodyContext.class,0); + } + public List COMMA() { return getTokens(KotlinParser.COMMA); } + public TerminalNode COMMA(int i) { + return getToken(KotlinParser.COMMA, i); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public SemiContext semi() { + return getRuleContext(SemiContext.class,0); + } + public TerminalNode ELSE() { return getToken(KotlinParser.ELSE, 0); } + public WhenEntryContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_whenEntry; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterWhenEntry(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitWhenEntry(this); + } + } + + public final WhenEntryContext whenEntry() throws RecognitionException { + WhenEntryContext _localctx = new WhenEntryContext(_ctx, getState()); + enterRule(_localctx, 254, RULE_whenEntry); + int _la; + try { + int _alt; + setState(3107); + _errHandler.sync(this); + switch (_input.LA(1)) { + case LPAREN: + case LSQUARE: + case LCURL: + case ADD: + case SUB: + case INCR: + case DECR: + case EXCL_WS: + case EXCL_NO_WS: + case COLONCOLON: + case AT_NO_WS: + case AT_PRE_WS: + case RETURN_AT: + case CONTINUE_AT: + case BREAK_AT: + case THIS_AT: + case SUPER_AT: + case FILE: + case FIELD: + case PROPERTY: + case GET: + case SET: + case RECEIVER: + case PARAM: + case SETPARAM: + case DELEGATE: + case IMPORT: + case FUN: + case OBJECT: + case CONSTRUCTOR: + case BY: + case COMPANION: + case INIT: + case THIS: + case SUPER: + case WHERE: + case IF: + case WHEN: + case TRY: + case CATCH: + case FINALLY: + case THROW: + case RETURN: + case CONTINUE: + case BREAK: + case IS: + case IN: + case NOT_IS: + case NOT_IN: + case OUT: + case DYNAMIC: + case PUBLIC: + case PRIVATE: + case PROTECTED: + case INTERNAL: + case ENUM: + case SEALED: + case ANNOTATION: + case DATA: + case INNER: + case VALUE: + case TAILREC: + case OPERATOR: + case INLINE: + case INFIX: + case EXTERNAL: + case SUSPEND: + case OVERRIDE: + case ABSTRACT: + case FINAL: + case OPEN: + case CONST: + case LATEINIT: + case VARARG: + case NOINLINE: + case CROSSINLINE: + case REIFIED: + case EXPECT: + case ACTUAL: + case RealLiteral: + case IntegerLiteral: + case HexLiteral: + case BinLiteral: + case UnsignedLiteral: + case LongLiteral: + case BooleanLiteral: + case NullLiteral: + case CharacterLiteral: + case Identifier: + case QUOTE_OPEN: + case TRIPLE_QUOTE_OPEN: + enterOuterAlt(_localctx, 1); + { + setState(3043); + whenCondition(); + setState(3060); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,469,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(3047); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(3044); + match(NL); + } + } + setState(3049); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(3050); + match(COMMA); + setState(3054); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(3051); + match(NL); + } + } + setState(3056); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(3057); + whenCondition(); + } + } + } + setState(3062); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,469,_ctx); + } + setState(3070); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,471,_ctx) ) { + case 1: + { + setState(3066); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(3063); + match(NL); + } + } + setState(3068); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(3069); + match(COMMA); + } + break; + } + setState(3075); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(3072); + match(NL); + } + } + setState(3077); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(3078); + match(ARROW); + setState(3082); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(3079); + match(NL); + } + } + setState(3084); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(3085); + controlStructureBody(); + setState(3087); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,474,_ctx) ) { + case 1: + { + setState(3086); + semi(); + } + break; + } + } + break; + case ELSE: + enterOuterAlt(_localctx, 2); + { + setState(3089); + match(ELSE); + setState(3093); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(3090); + match(NL); + } + } + setState(3095); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(3096); + match(ARROW); + setState(3100); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(3097); + match(NL); + } + } + setState(3102); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(3103); + controlStructureBody(); + setState(3105); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,477,_ctx) ) { + case 1: + { + setState(3104); + semi(); + } + break; + } + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class WhenConditionContext extends ParserRuleContext { + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public RangeTestContext rangeTest() { + return getRuleContext(RangeTestContext.class,0); + } + public TypeTestContext typeTest() { + return getRuleContext(TypeTestContext.class,0); + } + public WhenConditionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_whenCondition; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterWhenCondition(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitWhenCondition(this); + } + } + + public final WhenConditionContext whenCondition() throws RecognitionException { + WhenConditionContext _localctx = new WhenConditionContext(_ctx, getState()); + enterRule(_localctx, 256, RULE_whenCondition); + try { + setState(3112); + _errHandler.sync(this); + switch (_input.LA(1)) { + case LPAREN: + case LSQUARE: + case LCURL: + case ADD: + case SUB: + case INCR: + case DECR: + case EXCL_WS: + case EXCL_NO_WS: + case COLONCOLON: + case AT_NO_WS: + case AT_PRE_WS: + case RETURN_AT: + case CONTINUE_AT: + case BREAK_AT: + case THIS_AT: + case SUPER_AT: + case FILE: + case FIELD: + case PROPERTY: + case GET: + case SET: + case RECEIVER: + case PARAM: + case SETPARAM: + case DELEGATE: + case IMPORT: + case FUN: + case OBJECT: + case CONSTRUCTOR: + case BY: + case COMPANION: + case INIT: + case THIS: + case SUPER: + case WHERE: + case IF: + case WHEN: + case TRY: + case CATCH: + case FINALLY: + case THROW: + case RETURN: + case CONTINUE: + case BREAK: + case OUT: + case DYNAMIC: + case PUBLIC: + case PRIVATE: + case PROTECTED: + case INTERNAL: + case ENUM: + case SEALED: + case ANNOTATION: + case DATA: + case INNER: + case VALUE: + case TAILREC: + case OPERATOR: + case INLINE: + case INFIX: + case EXTERNAL: + case SUSPEND: + case OVERRIDE: + case ABSTRACT: + case FINAL: + case OPEN: + case CONST: + case LATEINIT: + case VARARG: + case NOINLINE: + case CROSSINLINE: + case REIFIED: + case EXPECT: + case ACTUAL: + case RealLiteral: + case IntegerLiteral: + case HexLiteral: + case BinLiteral: + case UnsignedLiteral: + case LongLiteral: + case BooleanLiteral: + case NullLiteral: + case CharacterLiteral: + case Identifier: + case QUOTE_OPEN: + case TRIPLE_QUOTE_OPEN: + enterOuterAlt(_localctx, 1); + { + setState(3109); + expression(); + } + break; + case IN: + case NOT_IN: + enterOuterAlt(_localctx, 2); + { + setState(3110); + rangeTest(); + } + break; + case IS: + case NOT_IS: + enterOuterAlt(_localctx, 3); + { + setState(3111); + typeTest(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class RangeTestContext extends ParserRuleContext { + public InOperatorContext inOperator() { + return getRuleContext(InOperatorContext.class,0); + } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public RangeTestContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_rangeTest; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterRangeTest(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitRangeTest(this); + } + } + + public final RangeTestContext rangeTest() throws RecognitionException { + RangeTestContext _localctx = new RangeTestContext(_ctx, getState()); + enterRule(_localctx, 258, RULE_rangeTest); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3114); + inOperator(); + setState(3118); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(3115); + match(NL); + } + } + setState(3120); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(3121); + expression(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TypeTestContext extends ParserRuleContext { + public IsOperatorContext isOperator() { + return getRuleContext(IsOperatorContext.class,0); + } + public TypeContext type() { + return getRuleContext(TypeContext.class,0); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public TypeTestContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_typeTest; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterTypeTest(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitTypeTest(this); + } + } + + public final TypeTestContext typeTest() throws RecognitionException { + TypeTestContext _localctx = new TypeTestContext(_ctx, getState()); + enterRule(_localctx, 260, RULE_typeTest); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3123); + isOperator(); + setState(3127); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(3124); + match(NL); + } + } + setState(3129); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(3130); + type(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TryExpressionContext extends ParserRuleContext { + public TerminalNode TRY() { return getToken(KotlinParser.TRY, 0); } + public BlockContext block() { + return getRuleContext(BlockContext.class,0); + } + public FinallyBlockContext finallyBlock() { + return getRuleContext(FinallyBlockContext.class,0); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public List catchBlock() { + return getRuleContexts(CatchBlockContext.class); + } + public CatchBlockContext catchBlock(int i) { + return getRuleContext(CatchBlockContext.class,i); + } + public TryExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_tryExpression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterTryExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitTryExpression(this); + } + } + + public final TryExpressionContext tryExpression() throws RecognitionException { + TryExpressionContext _localctx = new TryExpressionContext(_ctx, getState()); + enterRule(_localctx, 262, RULE_tryExpression); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(3132); + match(TRY); + setState(3136); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(3133); + match(NL); + } + } + setState(3138); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(3139); + block(); + setState(3167); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,488,_ctx) ) { + case 1: + { + setState(3147); + _errHandler.sync(this); + _alt = 1; + do { + switch (_alt) { + case 1: + { + { + setState(3143); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(3140); + match(NL); + } + } + setState(3145); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(3146); + catchBlock(); + } + } + break; + default: + throw new NoViableAltException(this); + } + setState(3149); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,484,_ctx); + } while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ); + setState(3158); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,486,_ctx) ) { + case 1: + { + setState(3154); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(3151); + match(NL); + } + } + setState(3156); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(3157); + finallyBlock(); + } + break; + } + } + break; + case 2: + { + setState(3163); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(3160); + match(NL); + } + } + setState(3165); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(3166); + finallyBlock(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class CatchBlockContext extends ParserRuleContext { + public TerminalNode CATCH() { return getToken(KotlinParser.CATCH, 0); } + public TerminalNode LPAREN() { return getToken(KotlinParser.LPAREN, 0); } + public SimpleIdentifierContext simpleIdentifier() { + return getRuleContext(SimpleIdentifierContext.class,0); + } + public TerminalNode COLON() { return getToken(KotlinParser.COLON, 0); } + public TypeContext type() { + return getRuleContext(TypeContext.class,0); + } + public TerminalNode RPAREN() { return getToken(KotlinParser.RPAREN, 0); } + public BlockContext block() { + return getRuleContext(BlockContext.class,0); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public List annotation() { + return getRuleContexts(AnnotationContext.class); + } + public AnnotationContext annotation(int i) { + return getRuleContext(AnnotationContext.class,i); + } + public TerminalNode COMMA() { return getToken(KotlinParser.COMMA, 0); } + public CatchBlockContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_catchBlock; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterCatchBlock(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitCatchBlock(this); + } + } + + public final CatchBlockContext catchBlock() throws RecognitionException { + CatchBlockContext _localctx = new CatchBlockContext(_ctx, getState()); + enterRule(_localctx, 264, RULE_catchBlock); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3169); + match(CATCH); + setState(3173); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(3170); + match(NL); + } + } + setState(3175); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(3176); + match(LPAREN); + setState(3180); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==AT_NO_WS || _la==AT_PRE_WS) { + { + { + setState(3177); + annotation(); + } + } + setState(3182); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(3183); + simpleIdentifier(); + setState(3184); + match(COLON); + setState(3185); + type(); + setState(3193); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==NL || _la==COMMA) { + { + setState(3189); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(3186); + match(NL); + } + } + setState(3191); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(3192); + match(COMMA); + } + } + + setState(3195); + match(RPAREN); + setState(3199); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(3196); + match(NL); + } + } + setState(3201); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(3202); + block(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class FinallyBlockContext extends ParserRuleContext { + public TerminalNode FINALLY() { return getToken(KotlinParser.FINALLY, 0); } + public BlockContext block() { + return getRuleContext(BlockContext.class,0); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public FinallyBlockContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_finallyBlock; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterFinallyBlock(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitFinallyBlock(this); + } + } + + public final FinallyBlockContext finallyBlock() throws RecognitionException { + FinallyBlockContext _localctx = new FinallyBlockContext(_ctx, getState()); + enterRule(_localctx, 266, RULE_finallyBlock); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3204); + match(FINALLY); + setState(3208); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(3205); + match(NL); + } + } + setState(3210); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(3211); + block(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class JumpExpressionContext extends ParserRuleContext { + public TerminalNode THROW() { return getToken(KotlinParser.THROW, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public TerminalNode RETURN() { return getToken(KotlinParser.RETURN, 0); } + public TerminalNode RETURN_AT() { return getToken(KotlinParser.RETURN_AT, 0); } + public TerminalNode CONTINUE() { return getToken(KotlinParser.CONTINUE, 0); } + public TerminalNode CONTINUE_AT() { return getToken(KotlinParser.CONTINUE_AT, 0); } + public TerminalNode BREAK() { return getToken(KotlinParser.BREAK, 0); } + public TerminalNode BREAK_AT() { return getToken(KotlinParser.BREAK_AT, 0); } + public JumpExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_jumpExpression; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterJumpExpression(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitJumpExpression(this); + } + } + + public final JumpExpressionContext jumpExpression() throws RecognitionException { + JumpExpressionContext _localctx = new JumpExpressionContext(_ctx, getState()); + enterRule(_localctx, 268, RULE_jumpExpression); + int _la; + try { + setState(3229); + _errHandler.sync(this); + switch (_input.LA(1)) { + case THROW: + enterOuterAlt(_localctx, 1); + { + setState(3213); + match(THROW); + setState(3217); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(3214); + match(NL); + } + } + setState(3219); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(3220); + expression(); + } + break; + case RETURN_AT: + case RETURN: + enterOuterAlt(_localctx, 2); + { + setState(3221); + _la = _input.LA(1); + if ( !(_la==RETURN_AT || _la==RETURN) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(3223); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,496,_ctx) ) { + case 1: + { + setState(3222); + expression(); + } + break; + } + } + break; + case CONTINUE: + enterOuterAlt(_localctx, 3); + { + setState(3225); + match(CONTINUE); + } + break; + case CONTINUE_AT: + enterOuterAlt(_localctx, 4); + { + setState(3226); + match(CONTINUE_AT); + } + break; + case BREAK: + enterOuterAlt(_localctx, 5); + { + setState(3227); + match(BREAK); + } + break; + case BREAK_AT: + enterOuterAlt(_localctx, 6); + { + setState(3228); + match(BREAK_AT); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class CallableReferenceContext extends ParserRuleContext { + public TerminalNode COLONCOLON() { return getToken(KotlinParser.COLONCOLON, 0); } + public SimpleIdentifierContext simpleIdentifier() { + return getRuleContext(SimpleIdentifierContext.class,0); + } + public TerminalNode CLASS() { return getToken(KotlinParser.CLASS, 0); } + public ReceiverTypeContext receiverType() { + return getRuleContext(ReceiverTypeContext.class,0); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public CallableReferenceContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_callableReference; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterCallableReference(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitCallableReference(this); + } + } + + public final CallableReferenceContext callableReference() throws RecognitionException { + CallableReferenceContext _localctx = new CallableReferenceContext(_ctx, getState()); + enterRule(_localctx, 270, RULE_callableReference); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3232); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << LPAREN) | (1L << AT_NO_WS) | (1L << AT_PRE_WS) | (1L << FILE) | (1L << FIELD) | (1L << PROPERTY))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (GET - 64)) | (1L << (SET - 64)) | (1L << (RECEIVER - 64)) | (1L << (PARAM - 64)) | (1L << (SETPARAM - 64)) | (1L << (DELEGATE - 64)) | (1L << (IMPORT - 64)) | (1L << (CONSTRUCTOR - 64)) | (1L << (BY - 64)) | (1L << (COMPANION - 64)) | (1L << (INIT - 64)) | (1L << (WHERE - 64)) | (1L << (CATCH - 64)) | (1L << (FINALLY - 64)) | (1L << (OUT - 64)) | (1L << (DYNAMIC - 64)) | (1L << (PUBLIC - 64)) | (1L << (PRIVATE - 64)) | (1L << (PROTECTED - 64)) | (1L << (INTERNAL - 64)) | (1L << (ENUM - 64)) | (1L << (SEALED - 64)) | (1L << (ANNOTATION - 64)) | (1L << (DATA - 64)) | (1L << (INNER - 64)) | (1L << (VALUE - 64)) | (1L << (TAILREC - 64)) | (1L << (OPERATOR - 64)) | (1L << (INLINE - 64)) | (1L << (INFIX - 64)) | (1L << (EXTERNAL - 64)) | (1L << (SUSPEND - 64)) | (1L << (OVERRIDE - 64)) | (1L << (ABSTRACT - 64)) | (1L << (FINAL - 64)) | (1L << (OPEN - 64)) | (1L << (CONST - 64)))) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & ((1L << (LATEINIT - 128)) | (1L << (VARARG - 128)) | (1L << (NOINLINE - 128)) | (1L << (CROSSINLINE - 128)) | (1L << (REIFIED - 128)) | (1L << (EXPECT - 128)) | (1L << (ACTUAL - 128)) | (1L << (Identifier - 128)))) != 0)) { + { + setState(3231); + receiverType(); + } + } + + setState(3234); + match(COLONCOLON); + setState(3238); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(3235); + match(NL); + } + } + setState(3240); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(3243); + _errHandler.sync(this); + switch (_input.LA(1)) { + case FILE: + case FIELD: + case PROPERTY: + case GET: + case SET: + case RECEIVER: + case PARAM: + case SETPARAM: + case DELEGATE: + case IMPORT: + case CONSTRUCTOR: + case BY: + case COMPANION: + case INIT: + case WHERE: + case CATCH: + case FINALLY: + case OUT: + case DYNAMIC: + case PUBLIC: + case PRIVATE: + case PROTECTED: + case INTERNAL: + case ENUM: + case SEALED: + case ANNOTATION: + case DATA: + case INNER: + case VALUE: + case TAILREC: + case OPERATOR: + case INLINE: + case INFIX: + case EXTERNAL: + case SUSPEND: + case OVERRIDE: + case ABSTRACT: + case FINAL: + case OPEN: + case CONST: + case LATEINIT: + case VARARG: + case NOINLINE: + case CROSSINLINE: + case REIFIED: + case EXPECT: + case ACTUAL: + case Identifier: + { + setState(3241); + simpleIdentifier(); + } + break; + case CLASS: + { + setState(3242); + match(CLASS); + } + break; + default: + throw new NoViableAltException(this); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class AssignmentAndOperatorContext extends ParserRuleContext { + public TerminalNode ADD_ASSIGNMENT() { return getToken(KotlinParser.ADD_ASSIGNMENT, 0); } + public TerminalNode SUB_ASSIGNMENT() { return getToken(KotlinParser.SUB_ASSIGNMENT, 0); } + public TerminalNode MULT_ASSIGNMENT() { return getToken(KotlinParser.MULT_ASSIGNMENT, 0); } + public TerminalNode DIV_ASSIGNMENT() { return getToken(KotlinParser.DIV_ASSIGNMENT, 0); } + public TerminalNode MOD_ASSIGNMENT() { return getToken(KotlinParser.MOD_ASSIGNMENT, 0); } + public AssignmentAndOperatorContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_assignmentAndOperator; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterAssignmentAndOperator(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitAssignmentAndOperator(this); + } + } + + public final AssignmentAndOperatorContext assignmentAndOperator() throws RecognitionException { + AssignmentAndOperatorContext _localctx = new AssignmentAndOperatorContext(_ctx, getState()); + enterRule(_localctx, 272, RULE_assignmentAndOperator); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3245); + _la = _input.LA(1); + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << ADD_ASSIGNMENT) | (1L << SUB_ASSIGNMENT) | (1L << MULT_ASSIGNMENT) | (1L << DIV_ASSIGNMENT) | (1L << MOD_ASSIGNMENT))) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class EqualityOperatorContext extends ParserRuleContext { + public TerminalNode EXCL_EQ() { return getToken(KotlinParser.EXCL_EQ, 0); } + public TerminalNode EXCL_EQEQ() { return getToken(KotlinParser.EXCL_EQEQ, 0); } + public TerminalNode EQEQ() { return getToken(KotlinParser.EQEQ, 0); } + public TerminalNode EQEQEQ() { return getToken(KotlinParser.EQEQEQ, 0); } + public EqualityOperatorContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_equalityOperator; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterEqualityOperator(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitEqualityOperator(this); + } + } + + public final EqualityOperatorContext equalityOperator() throws RecognitionException { + EqualityOperatorContext _localctx = new EqualityOperatorContext(_ctx, getState()); + enterRule(_localctx, 274, RULE_equalityOperator); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3247); + _la = _input.LA(1); + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << EXCL_EQ) | (1L << EXCL_EQEQ) | (1L << EQEQ) | (1L << EQEQEQ))) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ComparisonOperatorContext extends ParserRuleContext { + public TerminalNode LANGLE() { return getToken(KotlinParser.LANGLE, 0); } + public TerminalNode RANGLE() { return getToken(KotlinParser.RANGLE, 0); } + public TerminalNode LE() { return getToken(KotlinParser.LE, 0); } + public TerminalNode GE() { return getToken(KotlinParser.GE, 0); } + public ComparisonOperatorContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_comparisonOperator; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterComparisonOperator(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitComparisonOperator(this); + } + } + + public final ComparisonOperatorContext comparisonOperator() throws RecognitionException { + ComparisonOperatorContext _localctx = new ComparisonOperatorContext(_ctx, getState()); + enterRule(_localctx, 276, RULE_comparisonOperator); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3249); + _la = _input.LA(1); + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << LANGLE) | (1L << RANGLE) | (1L << LE) | (1L << GE))) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class InOperatorContext extends ParserRuleContext { + public TerminalNode IN() { return getToken(KotlinParser.IN, 0); } + public TerminalNode NOT_IN() { return getToken(KotlinParser.NOT_IN, 0); } + public InOperatorContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_inOperator; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterInOperator(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitInOperator(this); + } + } + + public final InOperatorContext inOperator() throws RecognitionException { + InOperatorContext _localctx = new InOperatorContext(_ctx, getState()); + enterRule(_localctx, 278, RULE_inOperator); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3251); + _la = _input.LA(1); + if ( !(_la==IN || _la==NOT_IN) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class IsOperatorContext extends ParserRuleContext { + public TerminalNode IS() { return getToken(KotlinParser.IS, 0); } + public TerminalNode NOT_IS() { return getToken(KotlinParser.NOT_IS, 0); } + public IsOperatorContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_isOperator; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterIsOperator(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitIsOperator(this); + } + } + + public final IsOperatorContext isOperator() throws RecognitionException { + IsOperatorContext _localctx = new IsOperatorContext(_ctx, getState()); + enterRule(_localctx, 280, RULE_isOperator); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3253); + _la = _input.LA(1); + if ( !(_la==IS || _la==NOT_IS) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class AdditiveOperatorContext extends ParserRuleContext { + public TerminalNode ADD() { return getToken(KotlinParser.ADD, 0); } + public TerminalNode SUB() { return getToken(KotlinParser.SUB, 0); } + public AdditiveOperatorContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_additiveOperator; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterAdditiveOperator(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitAdditiveOperator(this); + } + } + + public final AdditiveOperatorContext additiveOperator() throws RecognitionException { + AdditiveOperatorContext _localctx = new AdditiveOperatorContext(_ctx, getState()); + enterRule(_localctx, 282, RULE_additiveOperator); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3255); + _la = _input.LA(1); + if ( !(_la==ADD || _la==SUB) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class MultiplicativeOperatorContext extends ParserRuleContext { + public TerminalNode MULT() { return getToken(KotlinParser.MULT, 0); } + public TerminalNode DIV() { return getToken(KotlinParser.DIV, 0); } + public TerminalNode MOD() { return getToken(KotlinParser.MOD, 0); } + public MultiplicativeOperatorContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_multiplicativeOperator; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterMultiplicativeOperator(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitMultiplicativeOperator(this); + } + } + + public final MultiplicativeOperatorContext multiplicativeOperator() throws RecognitionException { + MultiplicativeOperatorContext _localctx = new MultiplicativeOperatorContext(_ctx, getState()); + enterRule(_localctx, 284, RULE_multiplicativeOperator); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3257); + _la = _input.LA(1); + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << MULT) | (1L << MOD) | (1L << DIV))) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class AsOperatorContext extends ParserRuleContext { + public TerminalNode AS() { return getToken(KotlinParser.AS, 0); } + public TerminalNode AS_SAFE() { return getToken(KotlinParser.AS_SAFE, 0); } + public AsOperatorContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_asOperator; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterAsOperator(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitAsOperator(this); + } + } + + public final AsOperatorContext asOperator() throws RecognitionException { + AsOperatorContext _localctx = new AsOperatorContext(_ctx, getState()); + enterRule(_localctx, 286, RULE_asOperator); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3259); + _la = _input.LA(1); + if ( !(_la==AS_SAFE || _la==AS) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class PrefixUnaryOperatorContext extends ParserRuleContext { + public TerminalNode INCR() { return getToken(KotlinParser.INCR, 0); } + public TerminalNode DECR() { return getToken(KotlinParser.DECR, 0); } + public TerminalNode SUB() { return getToken(KotlinParser.SUB, 0); } + public TerminalNode ADD() { return getToken(KotlinParser.ADD, 0); } + public ExclContext excl() { + return getRuleContext(ExclContext.class,0); + } + public PrefixUnaryOperatorContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_prefixUnaryOperator; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterPrefixUnaryOperator(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitPrefixUnaryOperator(this); + } + } + + public final PrefixUnaryOperatorContext prefixUnaryOperator() throws RecognitionException { + PrefixUnaryOperatorContext _localctx = new PrefixUnaryOperatorContext(_ctx, getState()); + enterRule(_localctx, 288, RULE_prefixUnaryOperator); + try { + setState(3266); + _errHandler.sync(this); + switch (_input.LA(1)) { + case INCR: + enterOuterAlt(_localctx, 1); + { + setState(3261); + match(INCR); + } + break; + case DECR: + enterOuterAlt(_localctx, 2); + { + setState(3262); + match(DECR); + } + break; + case SUB: + enterOuterAlt(_localctx, 3); + { + setState(3263); + match(SUB); + } + break; + case ADD: + enterOuterAlt(_localctx, 4); + { + setState(3264); + match(ADD); + } + break; + case EXCL_WS: + case EXCL_NO_WS: + enterOuterAlt(_localctx, 5); + { + setState(3265); + excl(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class PostfixUnaryOperatorContext extends ParserRuleContext { + public TerminalNode INCR() { return getToken(KotlinParser.INCR, 0); } + public TerminalNode DECR() { return getToken(KotlinParser.DECR, 0); } + public TerminalNode EXCL_NO_WS() { return getToken(KotlinParser.EXCL_NO_WS, 0); } + public ExclContext excl() { + return getRuleContext(ExclContext.class,0); + } + public PostfixUnaryOperatorContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_postfixUnaryOperator; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterPostfixUnaryOperator(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitPostfixUnaryOperator(this); + } + } + + public final PostfixUnaryOperatorContext postfixUnaryOperator() throws RecognitionException { + PostfixUnaryOperatorContext _localctx = new PostfixUnaryOperatorContext(_ctx, getState()); + enterRule(_localctx, 290, RULE_postfixUnaryOperator); + try { + setState(3272); + _errHandler.sync(this); + switch (_input.LA(1)) { + case INCR: + enterOuterAlt(_localctx, 1); + { + setState(3268); + match(INCR); + } + break; + case DECR: + enterOuterAlt(_localctx, 2); + { + setState(3269); + match(DECR); + } + break; + case EXCL_NO_WS: + enterOuterAlt(_localctx, 3); + { + setState(3270); + match(EXCL_NO_WS); + setState(3271); + excl(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ExclContext extends ParserRuleContext { + public TerminalNode EXCL_NO_WS() { return getToken(KotlinParser.EXCL_NO_WS, 0); } + public TerminalNode EXCL_WS() { return getToken(KotlinParser.EXCL_WS, 0); } + public ExclContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_excl; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterExcl(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitExcl(this); + } + } + + public final ExclContext excl() throws RecognitionException { + ExclContext _localctx = new ExclContext(_ctx, getState()); + enterRule(_localctx, 292, RULE_excl); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3274); + _la = _input.LA(1); + if ( !(_la==EXCL_WS || _la==EXCL_NO_WS) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class MemberAccessOperatorContext extends ParserRuleContext { + public TerminalNode DOT() { return getToken(KotlinParser.DOT, 0); } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public SafeNavContext safeNav() { + return getRuleContext(SafeNavContext.class,0); + } + public TerminalNode COLONCOLON() { return getToken(KotlinParser.COLONCOLON, 0); } + public MemberAccessOperatorContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_memberAccessOperator; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterMemberAccessOperator(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitMemberAccessOperator(this); + } + } + + public final MemberAccessOperatorContext memberAccessOperator() throws RecognitionException { + MemberAccessOperatorContext _localctx = new MemberAccessOperatorContext(_ctx, getState()); + enterRule(_localctx, 294, RULE_memberAccessOperator); + int _la; + try { + setState(3291); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,505,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(3279); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(3276); + match(NL); + } + } + setState(3281); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(3282); + match(DOT); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(3286); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(3283); + match(NL); + } + } + setState(3288); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(3289); + safeNav(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(3290); + match(COLONCOLON); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class SafeNavContext extends ParserRuleContext { + public TerminalNode QUEST_NO_WS() { return getToken(KotlinParser.QUEST_NO_WS, 0); } + public TerminalNode DOT() { return getToken(KotlinParser.DOT, 0); } + public SafeNavContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_safeNav; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterSafeNav(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitSafeNav(this); + } + } + + public final SafeNavContext safeNav() throws RecognitionException { + SafeNavContext _localctx = new SafeNavContext(_ctx, getState()); + enterRule(_localctx, 296, RULE_safeNav); + try { + enterOuterAlt(_localctx, 1); + { + setState(3293); + match(QUEST_NO_WS); + setState(3294); + match(DOT); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ModifiersContext extends ParserRuleContext { + public List annotation() { + return getRuleContexts(AnnotationContext.class); + } + public AnnotationContext annotation(int i) { + return getRuleContext(AnnotationContext.class,i); + } + public List modifier() { + return getRuleContexts(ModifierContext.class); + } + public ModifierContext modifier(int i) { + return getRuleContext(ModifierContext.class,i); + } + public ModifiersContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_modifiers; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterModifiers(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitModifiers(this); + } + } + + public final ModifiersContext modifiers() throws RecognitionException { + ModifiersContext _localctx = new ModifiersContext(_ctx, getState()); + enterRule(_localctx, 298, RULE_modifiers); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(3298); + _errHandler.sync(this); + _alt = 1; + do { + switch (_alt) { + case 1: + { + setState(3298); + _errHandler.sync(this); + switch (_input.LA(1)) { + case AT_NO_WS: + case AT_PRE_WS: + { + setState(3296); + annotation(); + } + break; + case PUBLIC: + case PRIVATE: + case PROTECTED: + case INTERNAL: + case ENUM: + case SEALED: + case ANNOTATION: + case DATA: + case INNER: + case VALUE: + case TAILREC: + case OPERATOR: + case INLINE: + case INFIX: + case EXTERNAL: + case SUSPEND: + case OVERRIDE: + case ABSTRACT: + case FINAL: + case OPEN: + case CONST: + case LATEINIT: + case VARARG: + case NOINLINE: + case CROSSINLINE: + case EXPECT: + case ACTUAL: + { + setState(3297); + modifier(); + } + break; + default: + throw new NoViableAltException(this); + } + } + break; + default: + throw new NoViableAltException(this); + } + setState(3300); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,507,_ctx); + } while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ParameterModifiersContext extends ParserRuleContext { + public List annotation() { + return getRuleContexts(AnnotationContext.class); + } + public AnnotationContext annotation(int i) { + return getRuleContext(AnnotationContext.class,i); + } + public List parameterModifier() { + return getRuleContexts(ParameterModifierContext.class); + } + public ParameterModifierContext parameterModifier(int i) { + return getRuleContext(ParameterModifierContext.class,i); + } + public ParameterModifiersContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_parameterModifiers; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterParameterModifiers(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitParameterModifiers(this); + } + } + + public final ParameterModifiersContext parameterModifiers() throws RecognitionException { + ParameterModifiersContext _localctx = new ParameterModifiersContext(_ctx, getState()); + enterRule(_localctx, 300, RULE_parameterModifiers); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(3304); + _errHandler.sync(this); + _alt = 1; + do { + switch (_alt) { + case 1: + { + setState(3304); + _errHandler.sync(this); + switch (_input.LA(1)) { + case AT_NO_WS: + case AT_PRE_WS: + { + setState(3302); + annotation(); + } + break; + case VARARG: + case NOINLINE: + case CROSSINLINE: + { + setState(3303); + parameterModifier(); + } + break; + default: + throw new NoViableAltException(this); + } + } + break; + default: + throw new NoViableAltException(this); + } + setState(3306); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,509,_ctx); + } while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ModifierContext extends ParserRuleContext { + public ClassModifierContext classModifier() { + return getRuleContext(ClassModifierContext.class,0); + } + public MemberModifierContext memberModifier() { + return getRuleContext(MemberModifierContext.class,0); + } + public VisibilityModifierContext visibilityModifier() { + return getRuleContext(VisibilityModifierContext.class,0); + } + public FunctionModifierContext functionModifier() { + return getRuleContext(FunctionModifierContext.class,0); + } + public PropertyModifierContext propertyModifier() { + return getRuleContext(PropertyModifierContext.class,0); + } + public InheritanceModifierContext inheritanceModifier() { + return getRuleContext(InheritanceModifierContext.class,0); + } + public ParameterModifierContext parameterModifier() { + return getRuleContext(ParameterModifierContext.class,0); + } + public PlatformModifierContext platformModifier() { + return getRuleContext(PlatformModifierContext.class,0); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public ModifierContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_modifier; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterModifier(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitModifier(this); + } + } + + public final ModifierContext modifier() throws RecognitionException { + ModifierContext _localctx = new ModifierContext(_ctx, getState()); + enterRule(_localctx, 302, RULE_modifier); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(3316); + _errHandler.sync(this); + switch (_input.LA(1)) { + case ENUM: + case SEALED: + case ANNOTATION: + case DATA: + case INNER: + case VALUE: + { + setState(3308); + classModifier(); + } + break; + case OVERRIDE: + case LATEINIT: + { + setState(3309); + memberModifier(); + } + break; + case PUBLIC: + case PRIVATE: + case PROTECTED: + case INTERNAL: + { + setState(3310); + visibilityModifier(); + } + break; + case TAILREC: + case OPERATOR: + case INLINE: + case INFIX: + case EXTERNAL: + case SUSPEND: + { + setState(3311); + functionModifier(); + } + break; + case CONST: + { + setState(3312); + propertyModifier(); + } + break; + case ABSTRACT: + case FINAL: + case OPEN: + { + setState(3313); + inheritanceModifier(); + } + break; + case VARARG: + case NOINLINE: + case CROSSINLINE: + { + setState(3314); + parameterModifier(); + } + break; + case EXPECT: + case ACTUAL: + { + setState(3315); + platformModifier(); + } + break; + default: + throw new NoViableAltException(this); + } + setState(3321); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,511,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(3318); + match(NL); + } + } + } + setState(3323); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,511,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TypeModifiersContext extends ParserRuleContext { + public List typeModifier() { + return getRuleContexts(TypeModifierContext.class); + } + public TypeModifierContext typeModifier(int i) { + return getRuleContext(TypeModifierContext.class,i); + } + public TypeModifiersContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_typeModifiers; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterTypeModifiers(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitTypeModifiers(this); + } + } + + public final TypeModifiersContext typeModifiers() throws RecognitionException { + TypeModifiersContext _localctx = new TypeModifiersContext(_ctx, getState()); + enterRule(_localctx, 304, RULE_typeModifiers); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(3325); + _errHandler.sync(this); + _alt = 1; + do { + switch (_alt) { + case 1: + { + { + setState(3324); + typeModifier(); + } + } + break; + default: + throw new NoViableAltException(this); + } + setState(3327); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,512,_ctx); + } while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TypeModifierContext extends ParserRuleContext { + public AnnotationContext annotation() { + return getRuleContext(AnnotationContext.class,0); + } + public TerminalNode SUSPEND() { return getToken(KotlinParser.SUSPEND, 0); } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public TypeModifierContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_typeModifier; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterTypeModifier(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitTypeModifier(this); + } + } + + public final TypeModifierContext typeModifier() throws RecognitionException { + TypeModifierContext _localctx = new TypeModifierContext(_ctx, getState()); + enterRule(_localctx, 306, RULE_typeModifier); + int _la; + try { + setState(3337); + _errHandler.sync(this); + switch (_input.LA(1)) { + case AT_NO_WS: + case AT_PRE_WS: + enterOuterAlt(_localctx, 1); + { + setState(3329); + annotation(); + } + break; + case SUSPEND: + enterOuterAlt(_localctx, 2); + { + setState(3330); + match(SUSPEND); + setState(3334); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(3331); + match(NL); + } + } + setState(3336); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ClassModifierContext extends ParserRuleContext { + public TerminalNode ENUM() { return getToken(KotlinParser.ENUM, 0); } + public TerminalNode SEALED() { return getToken(KotlinParser.SEALED, 0); } + public TerminalNode ANNOTATION() { return getToken(KotlinParser.ANNOTATION, 0); } + public TerminalNode DATA() { return getToken(KotlinParser.DATA, 0); } + public TerminalNode INNER() { return getToken(KotlinParser.INNER, 0); } + public TerminalNode VALUE() { return getToken(KotlinParser.VALUE, 0); } + public ClassModifierContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_classModifier; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterClassModifier(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitClassModifier(this); + } + } + + public final ClassModifierContext classModifier() throws RecognitionException { + ClassModifierContext _localctx = new ClassModifierContext(_ctx, getState()); + enterRule(_localctx, 308, RULE_classModifier); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3339); + _la = _input.LA(1); + if ( !(((((_la - 111)) & ~0x3f) == 0 && ((1L << (_la - 111)) & ((1L << (ENUM - 111)) | (1L << (SEALED - 111)) | (1L << (ANNOTATION - 111)) | (1L << (DATA - 111)) | (1L << (INNER - 111)) | (1L << (VALUE - 111)))) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class MemberModifierContext extends ParserRuleContext { + public TerminalNode OVERRIDE() { return getToken(KotlinParser.OVERRIDE, 0); } + public TerminalNode LATEINIT() { return getToken(KotlinParser.LATEINIT, 0); } + public MemberModifierContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_memberModifier; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterMemberModifier(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitMemberModifier(this); + } + } + + public final MemberModifierContext memberModifier() throws RecognitionException { + MemberModifierContext _localctx = new MemberModifierContext(_ctx, getState()); + enterRule(_localctx, 310, RULE_memberModifier); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3341); + _la = _input.LA(1); + if ( !(_la==OVERRIDE || _la==LATEINIT) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class VisibilityModifierContext extends ParserRuleContext { + public TerminalNode PUBLIC() { return getToken(KotlinParser.PUBLIC, 0); } + public TerminalNode PRIVATE() { return getToken(KotlinParser.PRIVATE, 0); } + public TerminalNode INTERNAL() { return getToken(KotlinParser.INTERNAL, 0); } + public TerminalNode PROTECTED() { return getToken(KotlinParser.PROTECTED, 0); } + public VisibilityModifierContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_visibilityModifier; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterVisibilityModifier(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitVisibilityModifier(this); + } + } + + public final VisibilityModifierContext visibilityModifier() throws RecognitionException { + VisibilityModifierContext _localctx = new VisibilityModifierContext(_ctx, getState()); + enterRule(_localctx, 312, RULE_visibilityModifier); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3343); + _la = _input.LA(1); + if ( !(((((_la - 107)) & ~0x3f) == 0 && ((1L << (_la - 107)) & ((1L << (PUBLIC - 107)) | (1L << (PRIVATE - 107)) | (1L << (PROTECTED - 107)) | (1L << (INTERNAL - 107)))) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class VarianceModifierContext extends ParserRuleContext { + public TerminalNode IN() { return getToken(KotlinParser.IN, 0); } + public TerminalNode OUT() { return getToken(KotlinParser.OUT, 0); } + public VarianceModifierContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_varianceModifier; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterVarianceModifier(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitVarianceModifier(this); + } + } + + public final VarianceModifierContext varianceModifier() throws RecognitionException { + VarianceModifierContext _localctx = new VarianceModifierContext(_ctx, getState()); + enterRule(_localctx, 314, RULE_varianceModifier); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3345); + _la = _input.LA(1); + if ( !(_la==IN || _la==OUT) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TypeParameterModifiersContext extends ParserRuleContext { + public List typeParameterModifier() { + return getRuleContexts(TypeParameterModifierContext.class); + } + public TypeParameterModifierContext typeParameterModifier(int i) { + return getRuleContext(TypeParameterModifierContext.class,i); + } + public TypeParameterModifiersContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_typeParameterModifiers; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterTypeParameterModifiers(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitTypeParameterModifiers(this); + } + } + + public final TypeParameterModifiersContext typeParameterModifiers() throws RecognitionException { + TypeParameterModifiersContext _localctx = new TypeParameterModifiersContext(_ctx, getState()); + enterRule(_localctx, 316, RULE_typeParameterModifiers); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(3348); + _errHandler.sync(this); + _alt = 1; + do { + switch (_alt) { + case 1: + { + { + setState(3347); + typeParameterModifier(); + } + } + break; + default: + throw new NoViableAltException(this); + } + setState(3350); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,515,_ctx); + } while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TypeParameterModifierContext extends ParserRuleContext { + public ReificationModifierContext reificationModifier() { + return getRuleContext(ReificationModifierContext.class,0); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public VarianceModifierContext varianceModifier() { + return getRuleContext(VarianceModifierContext.class,0); + } + public AnnotationContext annotation() { + return getRuleContext(AnnotationContext.class,0); + } + public TypeParameterModifierContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_typeParameterModifier; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterTypeParameterModifier(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitTypeParameterModifier(this); + } + } + + public final TypeParameterModifierContext typeParameterModifier() throws RecognitionException { + TypeParameterModifierContext _localctx = new TypeParameterModifierContext(_ctx, getState()); + enterRule(_localctx, 318, RULE_typeParameterModifier); + try { + int _alt; + setState(3367); + _errHandler.sync(this); + switch (_input.LA(1)) { + case REIFIED: + enterOuterAlt(_localctx, 1); + { + setState(3352); + reificationModifier(); + setState(3356); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,516,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(3353); + match(NL); + } + } + } + setState(3358); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,516,_ctx); + } + } + break; + case IN: + case OUT: + enterOuterAlt(_localctx, 2); + { + setState(3359); + varianceModifier(); + setState(3363); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,517,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(3360); + match(NL); + } + } + } + setState(3365); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,517,_ctx); + } + } + break; + case AT_NO_WS: + case AT_PRE_WS: + enterOuterAlt(_localctx, 3); + { + setState(3366); + annotation(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class FunctionModifierContext extends ParserRuleContext { + public TerminalNode TAILREC() { return getToken(KotlinParser.TAILREC, 0); } + public TerminalNode OPERATOR() { return getToken(KotlinParser.OPERATOR, 0); } + public TerminalNode INFIX() { return getToken(KotlinParser.INFIX, 0); } + public TerminalNode INLINE() { return getToken(KotlinParser.INLINE, 0); } + public TerminalNode EXTERNAL() { return getToken(KotlinParser.EXTERNAL, 0); } + public TerminalNode SUSPEND() { return getToken(KotlinParser.SUSPEND, 0); } + public FunctionModifierContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_functionModifier; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterFunctionModifier(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitFunctionModifier(this); + } + } + + public final FunctionModifierContext functionModifier() throws RecognitionException { + FunctionModifierContext _localctx = new FunctionModifierContext(_ctx, getState()); + enterRule(_localctx, 320, RULE_functionModifier); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3369); + _la = _input.LA(1); + if ( !(((((_la - 117)) & ~0x3f) == 0 && ((1L << (_la - 117)) & ((1L << (TAILREC - 117)) | (1L << (OPERATOR - 117)) | (1L << (INLINE - 117)) | (1L << (INFIX - 117)) | (1L << (EXTERNAL - 117)) | (1L << (SUSPEND - 117)))) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class PropertyModifierContext extends ParserRuleContext { + public TerminalNode CONST() { return getToken(KotlinParser.CONST, 0); } + public PropertyModifierContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_propertyModifier; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterPropertyModifier(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitPropertyModifier(this); + } + } + + public final PropertyModifierContext propertyModifier() throws RecognitionException { + PropertyModifierContext _localctx = new PropertyModifierContext(_ctx, getState()); + enterRule(_localctx, 322, RULE_propertyModifier); + try { + enterOuterAlt(_localctx, 1); + { + setState(3371); + match(CONST); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class InheritanceModifierContext extends ParserRuleContext { + public TerminalNode ABSTRACT() { return getToken(KotlinParser.ABSTRACT, 0); } + public TerminalNode FINAL() { return getToken(KotlinParser.FINAL, 0); } + public TerminalNode OPEN() { return getToken(KotlinParser.OPEN, 0); } + public InheritanceModifierContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_inheritanceModifier; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterInheritanceModifier(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitInheritanceModifier(this); + } + } + + public final InheritanceModifierContext inheritanceModifier() throws RecognitionException { + InheritanceModifierContext _localctx = new InheritanceModifierContext(_ctx, getState()); + enterRule(_localctx, 324, RULE_inheritanceModifier); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3373); + _la = _input.LA(1); + if ( !(((((_la - 124)) & ~0x3f) == 0 && ((1L << (_la - 124)) & ((1L << (ABSTRACT - 124)) | (1L << (FINAL - 124)) | (1L << (OPEN - 124)))) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ParameterModifierContext extends ParserRuleContext { + public TerminalNode VARARG() { return getToken(KotlinParser.VARARG, 0); } + public TerminalNode NOINLINE() { return getToken(KotlinParser.NOINLINE, 0); } + public TerminalNode CROSSINLINE() { return getToken(KotlinParser.CROSSINLINE, 0); } + public ParameterModifierContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_parameterModifier; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterParameterModifier(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitParameterModifier(this); + } + } + + public final ParameterModifierContext parameterModifier() throws RecognitionException { + ParameterModifierContext _localctx = new ParameterModifierContext(_ctx, getState()); + enterRule(_localctx, 326, RULE_parameterModifier); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3375); + _la = _input.LA(1); + if ( !(((((_la - 129)) & ~0x3f) == 0 && ((1L << (_la - 129)) & ((1L << (VARARG - 129)) | (1L << (NOINLINE - 129)) | (1L << (CROSSINLINE - 129)))) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ReificationModifierContext extends ParserRuleContext { + public TerminalNode REIFIED() { return getToken(KotlinParser.REIFIED, 0); } + public ReificationModifierContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_reificationModifier; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterReificationModifier(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitReificationModifier(this); + } + } + + public final ReificationModifierContext reificationModifier() throws RecognitionException { + ReificationModifierContext _localctx = new ReificationModifierContext(_ctx, getState()); + enterRule(_localctx, 328, RULE_reificationModifier); + try { + enterOuterAlt(_localctx, 1); + { + setState(3377); + match(REIFIED); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class PlatformModifierContext extends ParserRuleContext { + public TerminalNode EXPECT() { return getToken(KotlinParser.EXPECT, 0); } + public TerminalNode ACTUAL() { return getToken(KotlinParser.ACTUAL, 0); } + public PlatformModifierContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_platformModifier; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterPlatformModifier(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitPlatformModifier(this); + } + } + + public final PlatformModifierContext platformModifier() throws RecognitionException { + PlatformModifierContext _localctx = new PlatformModifierContext(_ctx, getState()); + enterRule(_localctx, 330, RULE_platformModifier); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3379); + _la = _input.LA(1); + if ( !(_la==EXPECT || _la==ACTUAL) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class AnnotationContext extends ParserRuleContext { + public SingleAnnotationContext singleAnnotation() { + return getRuleContext(SingleAnnotationContext.class,0); + } + public MultiAnnotationContext multiAnnotation() { + return getRuleContext(MultiAnnotationContext.class,0); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public AnnotationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_annotation; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterAnnotation(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitAnnotation(this); + } + } + + public final AnnotationContext annotation() throws RecognitionException { + AnnotationContext _localctx = new AnnotationContext(_ctx, getState()); + enterRule(_localctx, 332, RULE_annotation); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(3383); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,519,_ctx) ) { + case 1: + { + setState(3381); + singleAnnotation(); + } + break; + case 2: + { + setState(3382); + multiAnnotation(); + } + break; + } + setState(3388); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,520,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(3385); + match(NL); + } + } + } + setState(3390); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,520,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class SingleAnnotationContext extends ParserRuleContext { + public UnescapedAnnotationContext unescapedAnnotation() { + return getRuleContext(UnescapedAnnotationContext.class,0); + } + public AnnotationUseSiteTargetContext annotationUseSiteTarget() { + return getRuleContext(AnnotationUseSiteTargetContext.class,0); + } + public TerminalNode AT_NO_WS() { return getToken(KotlinParser.AT_NO_WS, 0); } + public TerminalNode AT_PRE_WS() { return getToken(KotlinParser.AT_PRE_WS, 0); } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public SingleAnnotationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_singleAnnotation; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterSingleAnnotation(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitSingleAnnotation(this); + } + } + + public final SingleAnnotationContext singleAnnotation() throws RecognitionException { + SingleAnnotationContext _localctx = new SingleAnnotationContext(_ctx, getState()); + enterRule(_localctx, 334, RULE_singleAnnotation); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3400); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,522,_ctx) ) { + case 1: + { + setState(3391); + annotationUseSiteTarget(); + setState(3395); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(3392); + match(NL); + } + } + setState(3397); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + break; + case 2: + { + setState(3398); + match(AT_NO_WS); + } + break; + case 3: + { + setState(3399); + match(AT_PRE_WS); + } + break; + } + setState(3402); + unescapedAnnotation(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class MultiAnnotationContext extends ParserRuleContext { + public TerminalNode LSQUARE() { return getToken(KotlinParser.LSQUARE, 0); } + public TerminalNode RSQUARE() { return getToken(KotlinParser.RSQUARE, 0); } + public AnnotationUseSiteTargetContext annotationUseSiteTarget() { + return getRuleContext(AnnotationUseSiteTargetContext.class,0); + } + public TerminalNode AT_NO_WS() { return getToken(KotlinParser.AT_NO_WS, 0); } + public TerminalNode AT_PRE_WS() { return getToken(KotlinParser.AT_PRE_WS, 0); } + public List unescapedAnnotation() { + return getRuleContexts(UnescapedAnnotationContext.class); + } + public UnescapedAnnotationContext unescapedAnnotation(int i) { + return getRuleContext(UnescapedAnnotationContext.class,i); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public MultiAnnotationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_multiAnnotation; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterMultiAnnotation(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitMultiAnnotation(this); + } + } + + public final MultiAnnotationContext multiAnnotation() throws RecognitionException { + MultiAnnotationContext _localctx = new MultiAnnotationContext(_ctx, getState()); + enterRule(_localctx, 336, RULE_multiAnnotation); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3413); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,524,_ctx) ) { + case 1: + { + setState(3404); + annotationUseSiteTarget(); + setState(3408); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(3405); + match(NL); + } + } + setState(3410); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + break; + case 2: + { + setState(3411); + match(AT_NO_WS); + } + break; + case 3: + { + setState(3412); + match(AT_PRE_WS); + } + break; + } + setState(3415); + match(LSQUARE); + setState(3417); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + { + setState(3416); + unescapedAnnotation(); + } + } + setState(3419); + _errHandler.sync(this); + _la = _input.LA(1); + } while ( ((((_la - 61)) & ~0x3f) == 0 && ((1L << (_la - 61)) & ((1L << (FILE - 61)) | (1L << (FIELD - 61)) | (1L << (PROPERTY - 61)) | (1L << (GET - 61)) | (1L << (SET - 61)) | (1L << (RECEIVER - 61)) | (1L << (PARAM - 61)) | (1L << (SETPARAM - 61)) | (1L << (DELEGATE - 61)) | (1L << (IMPORT - 61)) | (1L << (CONSTRUCTOR - 61)) | (1L << (BY - 61)) | (1L << (COMPANION - 61)) | (1L << (INIT - 61)) | (1L << (WHERE - 61)) | (1L << (CATCH - 61)) | (1L << (FINALLY - 61)) | (1L << (OUT - 61)) | (1L << (DYNAMIC - 61)) | (1L << (PUBLIC - 61)) | (1L << (PRIVATE - 61)) | (1L << (PROTECTED - 61)) | (1L << (INTERNAL - 61)) | (1L << (ENUM - 61)) | (1L << (SEALED - 61)) | (1L << (ANNOTATION - 61)) | (1L << (DATA - 61)) | (1L << (INNER - 61)) | (1L << (VALUE - 61)) | (1L << (TAILREC - 61)) | (1L << (OPERATOR - 61)) | (1L << (INLINE - 61)) | (1L << (INFIX - 61)) | (1L << (EXTERNAL - 61)) | (1L << (SUSPEND - 61)) | (1L << (OVERRIDE - 61)) | (1L << (ABSTRACT - 61)))) != 0) || ((((_la - 125)) & ~0x3f) == 0 && ((1L << (_la - 125)) & ((1L << (FINAL - 125)) | (1L << (OPEN - 125)) | (1L << (CONST - 125)) | (1L << (LATEINIT - 125)) | (1L << (VARARG - 125)) | (1L << (NOINLINE - 125)) | (1L << (CROSSINLINE - 125)) | (1L << (REIFIED - 125)) | (1L << (EXPECT - 125)) | (1L << (ACTUAL - 125)) | (1L << (Identifier - 125)))) != 0) ); + setState(3421); + match(RSQUARE); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class AnnotationUseSiteTargetContext extends ParserRuleContext { + public TerminalNode COLON() { return getToken(KotlinParser.COLON, 0); } + public TerminalNode AT_NO_WS() { return getToken(KotlinParser.AT_NO_WS, 0); } + public TerminalNode AT_PRE_WS() { return getToken(KotlinParser.AT_PRE_WS, 0); } + public TerminalNode FIELD() { return getToken(KotlinParser.FIELD, 0); } + public TerminalNode PROPERTY() { return getToken(KotlinParser.PROPERTY, 0); } + public TerminalNode GET() { return getToken(KotlinParser.GET, 0); } + public TerminalNode SET() { return getToken(KotlinParser.SET, 0); } + public TerminalNode RECEIVER() { return getToken(KotlinParser.RECEIVER, 0); } + public TerminalNode PARAM() { return getToken(KotlinParser.PARAM, 0); } + public TerminalNode SETPARAM() { return getToken(KotlinParser.SETPARAM, 0); } + public TerminalNode DELEGATE() { return getToken(KotlinParser.DELEGATE, 0); } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public AnnotationUseSiteTargetContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_annotationUseSiteTarget; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterAnnotationUseSiteTarget(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitAnnotationUseSiteTarget(this); + } + } + + public final AnnotationUseSiteTargetContext annotationUseSiteTarget() throws RecognitionException { + AnnotationUseSiteTargetContext _localctx = new AnnotationUseSiteTargetContext(_ctx, getState()); + enterRule(_localctx, 338, RULE_annotationUseSiteTarget); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3423); + _la = _input.LA(1); + if ( !(_la==AT_NO_WS || _la==AT_PRE_WS) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(3424); + _la = _input.LA(1); + if ( !(((((_la - 62)) & ~0x3f) == 0 && ((1L << (_la - 62)) & ((1L << (FIELD - 62)) | (1L << (PROPERTY - 62)) | (1L << (GET - 62)) | (1L << (SET - 62)) | (1L << (RECEIVER - 62)) | (1L << (PARAM - 62)) | (1L << (SETPARAM - 62)) | (1L << (DELEGATE - 62)))) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(3428); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(3425); + match(NL); + } + } + setState(3430); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(3431); + match(COLON); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class UnescapedAnnotationContext extends ParserRuleContext { + public ConstructorInvocationContext constructorInvocation() { + return getRuleContext(ConstructorInvocationContext.class,0); + } + public UserTypeContext userType() { + return getRuleContext(UserTypeContext.class,0); + } + public UnescapedAnnotationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_unescapedAnnotation; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterUnescapedAnnotation(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitUnescapedAnnotation(this); + } + } + + public final UnescapedAnnotationContext unescapedAnnotation() throws RecognitionException { + UnescapedAnnotationContext _localctx = new UnescapedAnnotationContext(_ctx, getState()); + enterRule(_localctx, 340, RULE_unescapedAnnotation); + try { + setState(3435); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,527,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(3433); + constructorInvocation(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(3434); + userType(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class SimpleIdentifierContext extends ParserRuleContext { + public TerminalNode Identifier() { return getToken(KotlinParser.Identifier, 0); } + public TerminalNode ABSTRACT() { return getToken(KotlinParser.ABSTRACT, 0); } + public TerminalNode ANNOTATION() { return getToken(KotlinParser.ANNOTATION, 0); } + public TerminalNode BY() { return getToken(KotlinParser.BY, 0); } + public TerminalNode CATCH() { return getToken(KotlinParser.CATCH, 0); } + public TerminalNode COMPANION() { return getToken(KotlinParser.COMPANION, 0); } + public TerminalNode CONSTRUCTOR() { return getToken(KotlinParser.CONSTRUCTOR, 0); } + public TerminalNode CROSSINLINE() { return getToken(KotlinParser.CROSSINLINE, 0); } + public TerminalNode DATA() { return getToken(KotlinParser.DATA, 0); } + public TerminalNode DYNAMIC() { return getToken(KotlinParser.DYNAMIC, 0); } + public TerminalNode ENUM() { return getToken(KotlinParser.ENUM, 0); } + public TerminalNode EXTERNAL() { return getToken(KotlinParser.EXTERNAL, 0); } + public TerminalNode FINAL() { return getToken(KotlinParser.FINAL, 0); } + public TerminalNode FINALLY() { return getToken(KotlinParser.FINALLY, 0); } + public TerminalNode GET() { return getToken(KotlinParser.GET, 0); } + public TerminalNode IMPORT() { return getToken(KotlinParser.IMPORT, 0); } + public TerminalNode INFIX() { return getToken(KotlinParser.INFIX, 0); } + public TerminalNode INIT() { return getToken(KotlinParser.INIT, 0); } + public TerminalNode INLINE() { return getToken(KotlinParser.INLINE, 0); } + public TerminalNode INNER() { return getToken(KotlinParser.INNER, 0); } + public TerminalNode INTERNAL() { return getToken(KotlinParser.INTERNAL, 0); } + public TerminalNode LATEINIT() { return getToken(KotlinParser.LATEINIT, 0); } + public TerminalNode NOINLINE() { return getToken(KotlinParser.NOINLINE, 0); } + public TerminalNode OPEN() { return getToken(KotlinParser.OPEN, 0); } + public TerminalNode OPERATOR() { return getToken(KotlinParser.OPERATOR, 0); } + public TerminalNode OUT() { return getToken(KotlinParser.OUT, 0); } + public TerminalNode OVERRIDE() { return getToken(KotlinParser.OVERRIDE, 0); } + public TerminalNode PRIVATE() { return getToken(KotlinParser.PRIVATE, 0); } + public TerminalNode PROTECTED() { return getToken(KotlinParser.PROTECTED, 0); } + public TerminalNode PUBLIC() { return getToken(KotlinParser.PUBLIC, 0); } + public TerminalNode REIFIED() { return getToken(KotlinParser.REIFIED, 0); } + public TerminalNode SEALED() { return getToken(KotlinParser.SEALED, 0); } + public TerminalNode TAILREC() { return getToken(KotlinParser.TAILREC, 0); } + public TerminalNode SET() { return getToken(KotlinParser.SET, 0); } + public TerminalNode VARARG() { return getToken(KotlinParser.VARARG, 0); } + public TerminalNode WHERE() { return getToken(KotlinParser.WHERE, 0); } + public TerminalNode FIELD() { return getToken(KotlinParser.FIELD, 0); } + public TerminalNode PROPERTY() { return getToken(KotlinParser.PROPERTY, 0); } + public TerminalNode RECEIVER() { return getToken(KotlinParser.RECEIVER, 0); } + public TerminalNode PARAM() { return getToken(KotlinParser.PARAM, 0); } + public TerminalNode SETPARAM() { return getToken(KotlinParser.SETPARAM, 0); } + public TerminalNode DELEGATE() { return getToken(KotlinParser.DELEGATE, 0); } + public TerminalNode FILE() { return getToken(KotlinParser.FILE, 0); } + public TerminalNode EXPECT() { return getToken(KotlinParser.EXPECT, 0); } + public TerminalNode ACTUAL() { return getToken(KotlinParser.ACTUAL, 0); } + public TerminalNode CONST() { return getToken(KotlinParser.CONST, 0); } + public TerminalNode SUSPEND() { return getToken(KotlinParser.SUSPEND, 0); } + public TerminalNode VALUE() { return getToken(KotlinParser.VALUE, 0); } + public SimpleIdentifierContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_simpleIdentifier; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterSimpleIdentifier(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitSimpleIdentifier(this); + } + } + + public final SimpleIdentifierContext simpleIdentifier() throws RecognitionException { + SimpleIdentifierContext _localctx = new SimpleIdentifierContext(_ctx, getState()); + enterRule(_localctx, 342, RULE_simpleIdentifier); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(3437); + _la = _input.LA(1); + if ( !(((((_la - 61)) & ~0x3f) == 0 && ((1L << (_la - 61)) & ((1L << (FILE - 61)) | (1L << (FIELD - 61)) | (1L << (PROPERTY - 61)) | (1L << (GET - 61)) | (1L << (SET - 61)) | (1L << (RECEIVER - 61)) | (1L << (PARAM - 61)) | (1L << (SETPARAM - 61)) | (1L << (DELEGATE - 61)) | (1L << (IMPORT - 61)) | (1L << (CONSTRUCTOR - 61)) | (1L << (BY - 61)) | (1L << (COMPANION - 61)) | (1L << (INIT - 61)) | (1L << (WHERE - 61)) | (1L << (CATCH - 61)) | (1L << (FINALLY - 61)) | (1L << (OUT - 61)) | (1L << (DYNAMIC - 61)) | (1L << (PUBLIC - 61)) | (1L << (PRIVATE - 61)) | (1L << (PROTECTED - 61)) | (1L << (INTERNAL - 61)) | (1L << (ENUM - 61)) | (1L << (SEALED - 61)) | (1L << (ANNOTATION - 61)) | (1L << (DATA - 61)) | (1L << (INNER - 61)) | (1L << (VALUE - 61)) | (1L << (TAILREC - 61)) | (1L << (OPERATOR - 61)) | (1L << (INLINE - 61)) | (1L << (INFIX - 61)) | (1L << (EXTERNAL - 61)) | (1L << (SUSPEND - 61)) | (1L << (OVERRIDE - 61)) | (1L << (ABSTRACT - 61)))) != 0) || ((((_la - 125)) & ~0x3f) == 0 && ((1L << (_la - 125)) & ((1L << (FINAL - 125)) | (1L << (OPEN - 125)) | (1L << (CONST - 125)) | (1L << (LATEINIT - 125)) | (1L << (VARARG - 125)) | (1L << (NOINLINE - 125)) | (1L << (CROSSINLINE - 125)) | (1L << (REIFIED - 125)) | (1L << (EXPECT - 125)) | (1L << (ACTUAL - 125)) | (1L << (Identifier - 125)))) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class IdentifierContext extends ParserRuleContext { + public List simpleIdentifier() { + return getRuleContexts(SimpleIdentifierContext.class); + } + public SimpleIdentifierContext simpleIdentifier(int i) { + return getRuleContext(SimpleIdentifierContext.class,i); + } + public List DOT() { return getTokens(KotlinParser.DOT); } + public TerminalNode DOT(int i) { + return getToken(KotlinParser.DOT, i); + } + public List NL() { return getTokens(KotlinParser.NL); } + public TerminalNode NL(int i) { + return getToken(KotlinParser.NL, i); + } + public IdentifierContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_identifier; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).enterIdentifier(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof KotlinParserListener ) ((KotlinParserListener)listener).exitIdentifier(this); + } + } + + public final IdentifierContext identifier() throws RecognitionException { + IdentifierContext _localctx = new IdentifierContext(_ctx, getState()); + enterRule(_localctx, 344, RULE_identifier); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(3439); + simpleIdentifier(); + setState(3450); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,529,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(3443); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==NL) { + { + { + setState(3440); + match(NL); + } + } + setState(3445); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(3446); + match(DOT); + setState(3447); + simpleIdentifier(); + } + } + } + setState(3452); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,529,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + private static final int _serializedATNSegments = 2; + private static final String _serializedATNSegment0 = + "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\u00ad\u0d80\4\2\t"+ + "\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13"+ + "\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"+ + "\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31\t\31"+ + "\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36\4\37\t\37\4 \t \4!"+ + "\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t+\4"+ + ",\t,\4-\t-\4.\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64\t"+ + "\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:\4;\t;\4<\t<\4=\t="+ + "\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\tC\4D\tD\4E\tE\4F\tF\4G\tG\4H\tH\4I"+ + "\tI\4J\tJ\4K\tK\4L\tL\4M\tM\4N\tN\4O\tO\4P\tP\4Q\tQ\4R\tR\4S\tS\4T\tT"+ + "\4U\tU\4V\tV\4W\tW\4X\tX\4Y\tY\4Z\tZ\4[\t[\4\\\t\\\4]\t]\4^\t^\4_\t_\4"+ + "`\t`\4a\ta\4b\tb\4c\tc\4d\td\4e\te\4f\tf\4g\tg\4h\th\4i\ti\4j\tj\4k\t"+ + "k\4l\tl\4m\tm\4n\tn\4o\to\4p\tp\4q\tq\4r\tr\4s\ts\4t\tt\4u\tu\4v\tv\4"+ + "w\tw\4x\tx\4y\ty\4z\tz\4{\t{\4|\t|\4}\t}\4~\t~\4\177\t\177\4\u0080\t\u0080"+ + "\4\u0081\t\u0081\4\u0082\t\u0082\4\u0083\t\u0083\4\u0084\t\u0084\4\u0085"+ + "\t\u0085\4\u0086\t\u0086\4\u0087\t\u0087\4\u0088\t\u0088\4\u0089\t\u0089"+ + "\4\u008a\t\u008a\4\u008b\t\u008b\4\u008c\t\u008c\4\u008d\t\u008d\4\u008e"+ + "\t\u008e\4\u008f\t\u008f\4\u0090\t\u0090\4\u0091\t\u0091\4\u0092\t\u0092"+ + "\4\u0093\t\u0093\4\u0094\t\u0094\4\u0095\t\u0095\4\u0096\t\u0096\4\u0097"+ + "\t\u0097\4\u0098\t\u0098\4\u0099\t\u0099\4\u009a\t\u009a\4\u009b\t\u009b"+ + "\4\u009c\t\u009c\4\u009d\t\u009d\4\u009e\t\u009e\4\u009f\t\u009f\4\u00a0"+ + "\t\u00a0\4\u00a1\t\u00a1\4\u00a2\t\u00a2\4\u00a3\t\u00a3\4\u00a4\t\u00a4"+ + "\4\u00a5\t\u00a5\4\u00a6\t\u00a6\4\u00a7\t\u00a7\4\u00a8\t\u00a8\4\u00a9"+ + "\t\u00a9\4\u00aa\t\u00aa\4\u00ab\t\u00ab\4\u00ac\t\u00ac\4\u00ad\t\u00ad"+ + "\4\u00ae\t\u00ae\3\2\5\2\u015e\n\2\3\2\7\2\u0161\n\2\f\2\16\2\u0164\13"+ + "\2\3\2\7\2\u0167\n\2\f\2\16\2\u016a\13\2\3\2\3\2\3\2\7\2\u016f\n\2\f\2"+ + "\16\2\u0172\13\2\3\2\3\2\3\3\5\3\u0177\n\3\3\3\7\3\u017a\n\3\f\3\16\3"+ + "\u017d\13\3\3\3\7\3\u0180\n\3\f\3\16\3\u0183\13\3\3\3\3\3\3\3\3\3\3\3"+ + "\7\3\u018a\n\3\f\3\16\3\u018d\13\3\3\3\3\3\3\4\3\4\6\4\u0193\n\4\r\4\16"+ + "\4\u0194\3\5\3\5\3\5\7\5\u019a\n\5\f\5\16\5\u019d\13\5\3\5\3\5\7\5\u01a1"+ + "\n\5\f\5\16\5\u01a4\13\5\3\5\3\5\6\5\u01a8\n\5\r\5\16\5\u01a9\3\5\3\5"+ + "\3\5\5\5\u01af\n\5\3\5\7\5\u01b2\n\5\f\5\16\5\u01b5\13\5\3\6\3\6\3\6\5"+ + "\6\u01ba\n\6\5\6\u01bc\n\6\3\7\7\7\u01bf\n\7\f\7\16\7\u01c2\13\7\3\b\3"+ + "\b\3\b\3\b\3\b\5\b\u01c9\n\b\3\b\5\b\u01cc\n\b\3\t\3\t\3\t\3\n\3\n\5\n"+ + "\u01d3\n\n\3\13\5\13\u01d6\n\13\3\13\3\13\7\13\u01da\n\13\f\13\16\13\u01dd"+ + "\13\13\3\13\3\13\7\13\u01e1\n\13\f\13\16\13\u01e4\13\13\3\13\5\13\u01e7"+ + "\n\13\3\13\7\13\u01ea\n\13\f\13\16\13\u01ed\13\13\3\13\3\13\7\13\u01f1"+ + "\n\13\f\13\16\13\u01f4\13\13\3\13\3\13\3\f\3\f\3\f\3\f\3\f\5\f\u01fd\n"+ + "\f\3\r\5\r\u0200\n\r\3\r\3\r\3\r\7\r\u0205\n\r\f\r\16\r\u0208\13\r\5\r"+ + "\u020a\n\r\3\r\5\r\u020d\n\r\3\r\7\r\u0210\n\r\f\r\16\r\u0213\13\r\3\r"+ + "\3\r\7\r\u0217\n\r\f\r\16\r\u021a\13\r\3\r\5\r\u021d\n\r\3\r\7\r\u0220"+ + "\n\r\f\r\16\r\u0223\13\r\3\r\5\r\u0226\n\r\3\r\7\r\u0229\n\r\f\r\16\r"+ + "\u022c\13\r\3\r\3\r\7\r\u0230\n\r\f\r\16\r\u0233\13\r\3\r\5\r\u0236\n"+ + "\r\3\r\7\r\u0239\n\r\f\r\16\r\u023c\13\r\3\r\5\r\u023f\n\r\3\r\7\r\u0242"+ + "\n\r\f\r\16\r\u0245\13\r\3\r\3\r\7\r\u0249\n\r\f\r\16\r\u024c\13\r\3\r"+ + "\5\r\u024f\n\r\3\16\5\16\u0252\n\16\3\16\3\16\7\16\u0256\n\16\f\16\16"+ + "\16\u0259\13\16\5\16\u025b\n\16\3\16\3\16\3\17\3\17\7\17\u0261\n\17\f"+ + "\17\16\17\u0264\13\17\3\17\3\17\7\17\u0268\n\17\f\17\16\17\u026b\13\17"+ + "\3\17\3\17\3\20\3\20\7\20\u0271\n\20\f\20\16\20\u0274\13\20\3\20\3\20"+ + "\7\20\u0278\n\20\f\20\16\20\u027b\13\20\3\20\3\20\7\20\u027f\n\20\f\20"+ + "\16\20\u0282\13\20\3\20\7\20\u0285\n\20\f\20\16\20\u0288\13\20\3\20\7"+ + "\20\u028b\n\20\f\20\16\20\u028e\13\20\3\20\5\20\u0291\n\20\5\20\u0293"+ + "\n\20\3\20\7\20\u0296\n\20\f\20\16\20\u0299\13\20\3\20\3\20\3\21\5\21"+ + "\u029e\n\21\3\21\5\21\u02a1\n\21\3\21\7\21\u02a4\n\21\f\21\16\21\u02a7"+ + "\13\21\3\21\3\21\3\21\7\21\u02ac\n\21\f\21\16\21\u02af\13\21\3\21\3\21"+ + "\7\21\u02b3\n\21\f\21\16\21\u02b6\13\21\3\21\3\21\7\21\u02ba\n\21\f\21"+ + "\16\21\u02bd\13\21\3\21\5\21\u02c0\n\21\3\22\3\22\7\22\u02c4\n\22\f\22"+ + "\16\22\u02c7\13\22\3\22\3\22\7\22\u02cb\n\22\f\22\16\22\u02ce\13\22\3"+ + "\22\7\22\u02d1\n\22\f\22\16\22\u02d4\13\22\3\23\3\23\3\23\3\23\5\23\u02da"+ + "\n\23\3\24\3\24\3\24\3\25\7\25\u02e0\n\25\f\25\16\25\u02e3\13\25\3\25"+ + "\7\25\u02e6\n\25\f\25\16\25\u02e9\13\25\3\25\3\25\3\26\3\26\5\26\u02ef"+ + "\n\26\3\26\7\26\u02f2\n\26\f\26\16\26\u02f5\13\26\3\26\3\26\7\26\u02f9"+ + "\n\26\f\26\16\26\u02fc\13\26\3\26\3\26\3\27\3\27\7\27\u0302\n\27\f\27"+ + "\16\27\u0305\13\27\3\27\3\27\7\27\u0309\n\27\f\27\16\27\u030c\13\27\3"+ + "\27\3\27\7\27\u0310\n\27\f\27\16\27\u0313\13\27\3\27\7\27\u0316\n\27\f"+ + "\27\16\27\u0319\13\27\3\27\7\27\u031c\n\27\f\27\16\27\u031f\13\27\3\27"+ + "\5\27\u0322\n\27\3\27\7\27\u0325\n\27\f\27\16\27\u0328\13\27\3\27\3\27"+ + "\3\30\5\30\u032d\n\30\3\30\7\30\u0330\n\30\f\30\16\30\u0333\13\30\3\30"+ + "\3\30\7\30\u0337\n\30\f\30\16\30\u033a\13\30\3\30\3\30\7\30\u033e\n\30"+ + "\f\30\16\30\u0341\13\30\3\30\5\30\u0344\n\30\3\31\3\31\7\31\u0348\n\31"+ + "\f\31\16\31\u034b\13\31\3\31\3\31\7\31\u034f\n\31\f\31\16\31\u0352\13"+ + "\31\3\31\3\31\7\31\u0356\n\31\f\31\16\31\u0359\13\31\3\31\7\31\u035c\n"+ + "\31\f\31\16\31\u035f\13\31\3\32\7\32\u0362\n\32\f\32\16\32\u0365\13\32"+ + "\3\32\3\32\7\32\u0369\n\32\f\32\16\32\u036c\13\32\3\32\3\32\7\32\u0370"+ + "\n\32\f\32\16\32\u0373\13\32\3\32\3\32\3\33\3\33\5\33\u0379\n\33\7\33"+ + "\u037b\n\33\f\33\16\33\u037e\13\33\3\34\3\34\3\34\3\34\5\34\u0384\n\34"+ + "\3\35\3\35\7\35\u0388\n\35\f\35\16\35\u038b\13\35\3\35\3\35\3\36\5\36"+ + "\u0390\n\36\3\36\3\36\7\36\u0394\n\36\f\36\16\36\u0397\13\36\3\36\3\36"+ + "\7\36\u039b\n\36\f\36\16\36\u039e\13\36\3\36\5\36\u03a1\n\36\3\36\7\36"+ + "\u03a4\n\36\f\36\16\36\u03a7\13\36\3\36\3\36\7\36\u03ab\n\36\f\36\16\36"+ + "\u03ae\13\36\3\36\5\36\u03b1\n\36\3\36\7\36\u03b4\n\36\f\36\16\36\u03b7"+ + "\13\36\3\36\5\36\u03ba\n\36\3\37\3\37\7\37\u03be\n\37\f\37\16\37\u03c1"+ + "\13\37\3\37\3\37\7\37\u03c5\n\37\f\37\16\37\u03c8\13\37\3\37\3\37\7\37"+ + "\u03cc\n\37\f\37\16\37\u03cf\13\37\3\37\7\37\u03d2\n\37\f\37\16\37\u03d5"+ + "\13\37\3\37\7\37\u03d8\n\37\f\37\16\37\u03db\13\37\3\37\5\37\u03de\n\37"+ + "\5\37\u03e0\n\37\3\37\7\37\u03e3\n\37\f\37\16\37\u03e6\13\37\3\37\3\37"+ + "\3 \5 \u03eb\n \3 \3 \7 \u03ef\n \f \16 \u03f2\13 \3 \3 \7 \u03f6\n \f"+ + " \16 \u03f9\13 \3 \5 \u03fc\n \3!\5!\u03ff\n!\3!\3!\7!\u0403\n!\f!\16"+ + "!\u0406\13!\3!\5!\u0409\n!\3!\7!\u040c\n!\f!\16!\u040f\13!\3!\3!\7!\u0413"+ + "\n!\f!\16!\u0416\13!\3!\3!\5!\u041a\n!\3!\7!\u041d\n!\f!\16!\u0420\13"+ + "!\3!\3!\7!\u0424\n!\f!\16!\u0427\13!\3!\3!\7!\u042b\n!\f!\16!\u042e\13"+ + "!\3!\3!\7!\u0432\n!\f!\16!\u0435\13!\3!\5!\u0438\n!\3!\7!\u043b\n!\f!"+ + "\16!\u043e\13!\3!\5!\u0441\n!\3!\7!\u0444\n!\f!\16!\u0447\13!\3!\5!\u044a"+ + "\n!\3\"\3\"\3\"\7\"\u044f\n\"\f\"\16\"\u0452\13\"\3\"\5\"\u0455\n\"\3"+ + "#\7#\u0458\n#\f#\16#\u045b\13#\3#\7#\u045e\n#\f#\16#\u0461\13#\3#\3#\7"+ + "#\u0465\n#\f#\16#\u0468\13#\3#\3#\7#\u046c\n#\f#\16#\u046f\13#\3#\5#\u0472"+ + "\n#\3$\3$\7$\u0476\n$\f$\16$\u0479\13$\3$\3$\7$\u047d\n$\f$\16$\u0480"+ + "\13$\3$\3$\7$\u0484\n$\f$\16$\u0487\13$\3$\7$\u048a\n$\f$\16$\u048d\13"+ + "$\3$\7$\u0490\n$\f$\16$\u0493\13$\3$\5$\u0496\n$\3$\7$\u0499\n$\f$\16"+ + "$\u049c\13$\3$\3$\3%\5%\u04a1\n%\3%\3%\7%\u04a5\n%\f%\16%\u04a8\13%\3"+ + "%\5%\u04ab\n%\3%\7%\u04ae\n%\f%\16%\u04b1\13%\3%\3%\7%\u04b5\n%\f%\16"+ + "%\u04b8\13%\3%\3%\5%\u04bc\n%\3%\7%\u04bf\n%\f%\16%\u04c2\13%\3%\3%\5"+ + "%\u04c6\n%\3%\7%\u04c9\n%\f%\16%\u04cc\13%\3%\5%\u04cf\n%\3%\7%\u04d2"+ + "\n%\f%\16%\u04d5\13%\3%\3%\7%\u04d9\n%\f%\16%\u04dc\13%\3%\3%\5%\u04e0"+ + "\n%\5%\u04e2\n%\3%\6%\u04e5\n%\r%\16%\u04e6\3%\5%\u04ea\n%\3%\7%\u04ed"+ + "\n%\f%\16%\u04f0\13%\3%\5%\u04f3\n%\3%\7%\u04f6\n%\f%\16%\u04f9\13%\3"+ + "%\5%\u04fc\n%\3%\5%\u04ff\n%\3%\5%\u0502\n%\3%\7%\u0505\n%\f%\16%\u0508"+ + "\13%\3%\5%\u050b\n%\3%\5%\u050e\n%\5%\u0510\n%\3&\3&\7&\u0514\n&\f&\16"+ + "&\u0517\13&\3&\3&\3\'\5\'\u051c\n\'\3\'\3\'\7\'\u0520\n\'\f\'\16\'\u0523"+ + "\13\'\3\'\3\'\7\'\u0527\n\'\f\'\16\'\u052a\13\'\3\'\3\'\7\'\u052e\n\'"+ + "\f\'\16\'\u0531\13\'\3\'\3\'\7\'\u0535\n\'\f\'\16\'\u0538\13\'\3\'\5\'"+ + "\u053b\n\'\3\'\7\'\u053e\n\'\f\'\16\'\u0541\13\'\3\'\5\'\u0544\n\'\3("+ + "\5(\u0547\n(\3(\3(\7(\u054b\n(\f(\16(\u054e\13(\3(\3(\7(\u0552\n(\f(\16"+ + "(\u0555\13(\3(\3(\7(\u0559\n(\f(\16(\u055c\13(\3(\5(\u055f\n(\3(\7(\u0562"+ + "\n(\f(\16(\u0565\13(\3(\3(\7(\u0569\n(\f(\16(\u056c\13(\3(\3(\7(\u0570"+ + "\n(\f(\16(\u0573\13(\3(\5(\u0576\n(\3(\7(\u0579\n(\f(\16(\u057c\13(\3"+ + "(\3(\5(\u0580\n(\3)\3)\7)\u0584\n)\f)\16)\u0587\13)\3)\3)\7)\u058b\n)"+ + "\f)\16)\u058e\13)\3)\3)\7)\u0592\n)\f)\16)\u0595\13)\3)\7)\u0598\n)\f"+ + ")\16)\u059b\13)\3)\7)\u059e\n)\f)\16)\u05a1\13)\3)\5)\u05a4\n)\5)\u05a6"+ + "\n)\3)\7)\u05a9\n)\f)\16)\u05ac\13)\3)\3)\3*\5*\u05b1\n*\3*\3*\7*\u05b5"+ + "\n*\f*\16*\u05b8\13*\3*\3*\7*\u05bc\n*\f*\16*\u05bf\13*\3*\5*\u05c2\n"+ + "*\3+\3+\7+\u05c6\n+\f+\16+\u05c9\13+\3+\3+\7+\u05cd\n+\f+\16+\u05d0\13"+ + "+\3+\5+\u05d3\n+\3,\3,\7,\u05d7\n,\f,\16,\u05da\13,\3,\3,\7,\u05de\n,"+ + "\f,\16,\u05e1\13,\3,\3,\3-\5-\u05e6\n-\3-\3-\7-\u05ea\n-\f-\16-\u05ed"+ + "\13-\3-\3-\7-\u05f1\n-\f-\16-\u05f4\13-\3-\3-\7-\u05f8\n-\f-\16-\u05fb"+ + "\13-\3-\5-\u05fe\n-\3-\7-\u0601\n-\f-\16-\u0604\13-\3-\5-\u0607\n-\3."+ + "\5.\u060a\n.\3.\3.\7.\u060e\n.\f.\16.\u0611\13.\3.\3.\7.\u0615\n.\f.\16"+ + ".\u0618\13.\3.\3.\7.\u061c\n.\f.\16.\u061f\13.\3.\5.\u0622\n.\3.\7.\u0625"+ + "\n.\f.\16.\u0628\13.\3.\5.\u062b\n.\3/\3/\7/\u062f\n/\f/\16/\u0632\13"+ + "/\3/\3/\3\60\3\60\7\60\u0638\n\60\f\60\16\60\u063b\13\60\3\60\5\60\u063e"+ + "\n\60\3\60\7\60\u0641\n\60\f\60\16\60\u0644\13\60\3\60\3\60\7\60\u0648"+ + "\n\60\f\60\16\60\u064b\13\60\3\60\5\60\u064e\n\60\3\60\7\60\u0651\n\60"+ + "\f\60\16\60\u0654\13\60\3\60\3\60\3\61\3\61\7\61\u065a\n\61\f\61\16\61"+ + "\u065d\13\61\3\61\3\61\7\61\u0661\n\61\f\61\16\61\u0664\13\61\3\61\7\61"+ + "\u0667\n\61\f\61\16\61\u066a\13\61\3\61\7\61\u066d\n\61\f\61\16\61\u0670"+ + "\13\61\3\61\5\61\u0673\n\61\3\62\3\62\7\62\u0677\n\62\f\62\16\62\u067a"+ + "\13\62\5\62\u067c\n\62\3\62\3\62\7\62\u0680\n\62\f\62\16\62\u0683\13\62"+ + "\3\62\5\62\u0686\n\62\3\62\7\62\u0689\n\62\f\62\16\62\u068c\13\62\3\62"+ + "\5\62\u068f\n\62\3\63\5\63\u0692\n\63\3\63\3\63\3\63\3\63\5\63\u0698\n"+ + "\63\3\64\3\64\5\64\u069c\n\64\3\65\3\65\5\65\u06a0\n\65\3\65\7\65\u06a3"+ + "\n\65\f\65\16\65\u06a6\13\65\3\65\6\65\u06a9\n\65\r\65\16\65\u06aa\3\66"+ + "\3\66\3\67\3\67\7\67\u06b1\n\67\f\67\16\67\u06b4\13\67\3\67\3\67\7\67"+ + "\u06b8\n\67\f\67\16\67\u06bb\13\67\3\67\7\67\u06be\n\67\f\67\16\67\u06c1"+ + "\13\67\38\38\78\u06c5\n8\f8\168\u06c8\138\38\58\u06cb\n8\39\59\u06ce\n"+ + "9\39\39\59\u06d2\n9\3:\6:\u06d5\n:\r:\16:\u06d6\3;\3;\7;\u06db\n;\f;\16"+ + ";\u06de\13;\3;\5;\u06e1\n;\3<\3<\7<\u06e5\n<\f<\16<\u06e8\13<\3<\3<\7"+ + "<\u06ec\n<\f<\16<\u06ef\13<\5<\u06f1\n<\3<\3<\7<\u06f5\n<\f<\16<\u06f8"+ + "\13<\3<\3<\7<\u06fc\n<\f<\16<\u06ff\13<\3<\3<\3=\3=\7=\u0705\n=\f=\16"+ + "=\u0708\13=\3=\3=\5=\u070c\n=\3=\7=\u070f\n=\f=\16=\u0712\13=\3=\3=\7"+ + "=\u0716\n=\f=\16=\u0719\13=\3=\3=\5=\u071d\n=\7=\u071f\n=\f=\16=\u0722"+ + "\13=\3=\7=\u0725\n=\f=\16=\u0728\13=\3=\5=\u072b\n=\3=\7=\u072e\n=\f="+ + "\16=\u0731\13=\3=\3=\3>\3>\7>\u0737\n>\f>\16>\u073a\13>\3>\3>\7>\u073e"+ + "\n>\f>\16>\u0741\13>\3>\3>\3?\5?\u0746\n?\3?\3?\3?\5?\u074b\n?\3@\3@\7"+ + "@\u074f\n@\f@\16@\u0752\13@\3@\3@\5@\u0756\n@\3@\7@\u0759\n@\f@\16@\u075c"+ + "\13@\3@\3@\3A\3A\3A\3A\7A\u0764\nA\fA\16A\u0767\13A\5A\u0769\nA\3A\5A"+ + "\u076c\nA\3B\3B\7B\u0770\nB\fB\16B\u0773\13B\3B\3B\3B\3B\5B\u0779\nB\3"+ + "C\3C\3C\7C\u077e\nC\fC\16C\u0781\13C\3D\3D\5D\u0785\nD\3E\3E\7E\u0789"+ + "\nE\fE\16E\u078c\13E\3E\3E\7E\u0790\nE\fE\16E\u0793\13E\3E\3E\3F\3F\3"+ + "F\5F\u079a\nF\3G\3G\7G\u079e\nG\fG\16G\u07a1\13G\3G\3G\7G\u07a5\nG\fG"+ + "\16G\u07a8\13G\3G\3G\5G\u07ac\nG\3G\3G\3G\3G\7G\u07b2\nG\fG\16G\u07b5"+ + "\13G\3G\5G\u07b8\nG\3H\3H\7H\u07bc\nH\fH\16H\u07bf\13H\3H\3H\3H\3H\7H"+ + "\u07c5\nH\fH\16H\u07c8\13H\3H\3H\5H\u07cc\nH\3I\3I\7I\u07d0\nI\fI\16I"+ + "\u07d3\13I\3I\5I\u07d6\nI\3I\7I\u07d9\nI\fI\16I\u07dc\13I\3I\3I\7I\u07e0"+ + "\nI\fI\16I\u07e3\13I\3I\3I\3I\3I\3J\3J\3J\3J\3J\3J\5J\u07ef\nJ\3J\7J\u07f2"+ + "\nJ\fJ\16J\u07f5\13J\3J\3J\3K\3K\7K\u07fb\nK\fK\16K\u07fe\13K\3K\5K\u0801"+ + "\nK\3L\6L\u0804\nL\rL\16L\u0805\3L\5L\u0809\nL\3M\3M\3N\3N\7N\u080f\n"+ + "N\fN\16N\u0812\13N\3N\3N\7N\u0816\nN\fN\16N\u0819\13N\3N\7N\u081c\nN\f"+ + "N\16N\u081f\13N\3O\3O\7O\u0823\nO\fO\16O\u0826\13O\3O\3O\7O\u082a\nO\f"+ + "O\16O\u082d\13O\3O\7O\u0830\nO\fO\16O\u0833\13O\3P\3P\3P\7P\u0838\nP\f"+ + "P\16P\u083b\13P\3P\3P\7P\u083f\nP\fP\16P\u0842\13P\3Q\3Q\3Q\7Q\u0847\n"+ + "Q\fQ\16Q\u084a\13Q\3Q\3Q\7Q\u084e\nQ\fQ\16Q\u0851\13Q\3R\3R\7R\u0855\n"+ + "R\fR\16R\u0858\13R\3S\3S\3S\7S\u085d\nS\fS\16S\u0860\13S\3S\3S\3S\3S\7"+ + "S\u0866\nS\fS\16S\u0869\13S\3S\3S\7S\u086d\nS\fS\16S\u0870\13S\3T\3T\7"+ + "T\u0874\nT\fT\16T\u0877\13T\3T\3T\7T\u087b\nT\fT\16T\u087e\13T\3T\3T\7"+ + "T\u0882\nT\fT\16T\u0885\13T\3U\3U\3U\3V\3V\3V\7V\u088d\nV\fV\16V\u0890"+ + "\13V\3V\3V\7V\u0894\nV\fV\16V\u0897\13V\3W\3W\3W\7W\u089c\nW\fW\16W\u089f"+ + "\13W\3W\7W\u08a2\nW\fW\16W\u08a5\13W\3X\3X\3X\7X\u08aa\nX\fX\16X\u08ad"+ + "\13X\3X\3X\7X\u08b1\nX\fX\16X\u08b4\13X\3Y\3Y\3Y\7Y\u08b9\nY\fY\16Y\u08bc"+ + "\13Y\3Y\3Y\7Y\u08c0\nY\fY\16Y\u08c3\13Y\3Z\3Z\7Z\u08c7\nZ\fZ\16Z\u08ca"+ + "\13Z\3Z\3Z\7Z\u08ce\nZ\fZ\16Z\u08d1\13Z\3Z\3Z\7Z\u08d5\nZ\fZ\16Z\u08d8"+ + "\13Z\3[\7[\u08db\n[\f[\16[\u08de\13[\3[\3[\3\\\3\\\3\\\3\\\7\\\u08e6\n"+ + "\\\f\\\16\\\u08e9\13\\\5\\\u08eb\n\\\3]\3]\7]\u08ef\n]\f]\16]\u08f2\13"+ + "]\3^\3^\3^\3^\3^\5^\u08f9\n^\3_\3_\3_\3_\3_\5_\u0900\n_\3`\3`\7`\u0904"+ + "\n`\f`\16`\u0907\13`\3`\3`\7`\u090b\n`\f`\16`\u090e\13`\3`\3`\3a\3a\5"+ + "a\u0914\na\3b\3b\7b\u0918\nb\fb\16b\u091b\13b\3b\3b\7b\u091f\nb\fb\16"+ + "b\u0922\13b\3b\3b\3c\3c\3c\5c\u0929\nc\3d\3d\7d\u092d\nd\fd\16d\u0930"+ + "\13d\3d\3d\7d\u0934\nd\fd\16d\u0937\13d\3d\3d\7d\u093b\nd\fd\16d\u093e"+ + "\13d\3d\7d\u0941\nd\fd\16d\u0944\13d\3d\7d\u0947\nd\fd\16d\u094a\13d\3"+ + "d\5d\u094d\nd\3d\7d\u0950\nd\fd\16d\u0953\13d\3d\3d\3e\3e\7e\u0959\ne"+ + "\fe\16e\u095c\13e\3e\3e\3e\5e\u0961\ne\3f\5f\u0964\nf\3f\5f\u0967\nf\3"+ + "f\3f\5f\u096b\nf\3g\7g\u096e\ng\fg\16g\u0971\13g\3g\5g\u0974\ng\3g\7g"+ + "\u0977\ng\fg\16g\u097a\13g\3g\3g\3h\3h\7h\u0980\nh\fh\16h\u0983\13h\3"+ + "h\3h\7h\u0987\nh\fh\16h\u098a\13h\3h\3h\7h\u098e\nh\fh\16h\u0991\13h\3"+ + "h\7h\u0994\nh\fh\16h\u0997\13h\3h\7h\u099a\nh\fh\16h\u099d\13h\3h\5h\u09a0"+ + "\nh\3h\7h\u09a3\nh\fh\16h\u09a6\13h\3h\3h\3i\3i\7i\u09ac\ni\fi\16i\u09af"+ + "\13i\3i\3i\7i\u09b3\ni\fi\16i\u09b6\13i\3i\3i\7i\u09ba\ni\fi\16i\u09bd"+ + "\13i\3i\7i\u09c0\ni\fi\16i\u09c3\13i\3i\7i\u09c6\ni\fi\16i\u09c9\13i\3"+ + "i\5i\u09cc\ni\3i\7i\u09cf\ni\fi\16i\u09d2\13i\5i\u09d4\ni\3i\3i\3j\5j"+ + "\u09d9\nj\3j\7j\u09dc\nj\fj\16j\u09df\13j\3j\3j\7j\u09e3\nj\fj\16j\u09e6"+ + "\13j\3j\3j\7j\u09ea\nj\fj\16j\u09ed\13j\5j\u09ef\nj\3j\5j\u09f2\nj\3j"+ + "\7j\u09f5\nj\fj\16j\u09f8\13j\3j\3j\3k\3k\3k\3k\3k\3k\3k\3k\3k\3k\3k\3"+ + "k\3k\3k\5k\u0a0a\nk\3l\3l\7l\u0a0e\nl\fl\16l\u0a11\13l\3l\3l\7l\u0a15"+ + "\nl\fl\16l\u0a18\13l\3l\3l\3m\3m\7m\u0a1e\nm\fm\16m\u0a21\13m\3m\3m\7"+ + "m\u0a25\nm\fm\16m\u0a28\13m\3m\3m\7m\u0a2c\nm\fm\16m\u0a2f\13m\3m\7m\u0a32"+ + "\nm\fm\16m\u0a35\13m\3m\7m\u0a38\nm\fm\16m\u0a3b\13m\3m\5m\u0a3e\nm\3"+ + "m\7m\u0a41\nm\fm\16m\u0a44\13m\5m\u0a46\nm\3m\3m\3n\3n\3o\3o\5o\u0a4e"+ + "\no\3p\3p\3p\7p\u0a53\np\fp\16p\u0a56\13p\3p\3p\3q\3q\3q\3q\7q\u0a5e\n"+ + "q\fq\16q\u0a61\13q\3q\3q\3r\3r\3s\3s\7s\u0a69\ns\fs\16s\u0a6c\13s\3s\3"+ + "s\7s\u0a70\ns\fs\16s\u0a73\13s\3s\3s\3t\3t\3u\3u\7u\u0a7b\nu\fu\16u\u0a7e"+ + "\13u\3u\3u\7u\u0a82\nu\fu\16u\u0a85\13u\3u\3u\3v\3v\7v\u0a8b\nv\fv\16"+ + "v\u0a8e\13v\3v\5v\u0a91\nv\3v\7v\u0a94\nv\fv\16v\u0a97\13v\3v\3v\7v\u0a9b"+ + "\nv\fv\16v\u0a9e\13v\5v\u0aa0\nv\3v\3v\7v\u0aa4\nv\fv\16v\u0aa7\13v\3"+ + "v\3v\3w\3w\7w\u0aad\nw\fw\16w\u0ab0\13w\3w\3w\7w\u0ab4\nw\fw\16w\u0ab7"+ + "\13w\3w\7w\u0aba\nw\fw\16w\u0abd\13w\3w\7w\u0ac0\nw\fw\16w\u0ac3\13w\3"+ + "w\5w\u0ac6\nw\3x\3x\3x\7x\u0acb\nx\fx\16x\u0ace\13x\3x\3x\7x\u0ad2\nx"+ + "\fx\16x\u0ad5\13x\3x\5x\u0ad8\nx\5x\u0ada\nx\3y\3y\7y\u0ade\ny\fy\16y"+ + "\u0ae1\13y\3y\3y\7y\u0ae5\ny\fy\16y\u0ae8\13y\3y\3y\5y\u0aec\ny\3y\7y"+ + "\u0aef\ny\fy\16y\u0af2\13y\3y\3y\7y\u0af6\ny\fy\16y\u0af9\13y\3y\3y\7"+ + "y\u0afd\ny\fy\16y\u0b00\13y\3y\5y\u0b03\ny\3y\7y\u0b06\ny\fy\16y\u0b09"+ + "\13y\3y\5y\u0b0c\ny\3y\7y\u0b0f\ny\fy\16y\u0b12\13y\3y\5y\u0b15\ny\3z"+ + "\3z\5z\u0b19\nz\3{\3{\7{\u0b1d\n{\f{\16{\u0b20\13{\3{\3{\7{\u0b24\n{\f"+ + "{\16{\u0b27\13{\3{\3{\7{\u0b2b\n{\f{\16{\u0b2e\13{\5{\u0b30\n{\3{\7{\u0b33"+ + "\n{\f{\16{\u0b36\13{\3{\5{\u0b39\n{\3|\3|\3}\3}\3}\7}\u0b40\n}\f}\16}"+ + "\u0b43\13}\3}\3}\7}\u0b47\n}\f}\16}\u0b4a\13}\3}\3}\5}\u0b4e\n}\3}\3}"+ + "\5}\u0b52\n}\3}\5}\u0b55\n}\3~\3~\7~\u0b59\n~\f~\16~\u0b5c\13~\3~\3~\7"+ + "~\u0b60\n~\f~\16~\u0b63\13~\3~\3~\7~\u0b67\n~\f~\16~\u0b6a\13~\3~\3~\7"+ + "~\u0b6e\n~\f~\16~\u0b71\13~\3~\3~\5~\u0b75\n~\3~\7~\u0b78\n~\f~\16~\u0b7b"+ + "\13~\3~\5~\u0b7e\n~\3~\7~\u0b81\n~\f~\16~\u0b84\13~\3~\3~\7~\u0b88\n~"+ + "\f~\16~\u0b8b\13~\3~\3~\5~\u0b8f\n~\3~\5~\u0b92\n~\3\177\3\177\7\177\u0b96"+ + "\n\177\f\177\16\177\u0b99\13\177\3\177\7\177\u0b9c\n\177\f\177\16\177"+ + "\u0b9f\13\177\3\177\3\177\7\177\u0ba3\n\177\f\177\16\177\u0ba6\13\177"+ + "\3\177\3\177\7\177\u0baa\n\177\f\177\16\177\u0bad\13\177\3\177\3\177\7"+ + "\177\u0bb1\n\177\f\177\16\177\u0bb4\13\177\5\177\u0bb6\n\177\3\177\3\177"+ + "\3\177\3\u0080\3\u0080\7\u0080\u0bbd\n\u0080\f\u0080\16\u0080\u0bc0\13"+ + "\u0080\3\u0080\5\u0080\u0bc3\n\u0080\3\u0080\7\u0080\u0bc6\n\u0080\f\u0080"+ + "\16\u0080\u0bc9\13\u0080\3\u0080\3\u0080\7\u0080\u0bcd\n\u0080\f\u0080"+ + "\16\u0080\u0bd0\13\u0080\3\u0080\3\u0080\7\u0080\u0bd4\n\u0080\f\u0080"+ + "\16\u0080\u0bd7\13\u0080\7\u0080\u0bd9\n\u0080\f\u0080\16\u0080\u0bdc"+ + "\13\u0080\3\u0080\7\u0080\u0bdf\n\u0080\f\u0080\16\u0080\u0be2\13\u0080"+ + "\3\u0080\3\u0080\3\u0081\3\u0081\7\u0081\u0be8\n\u0081\f\u0081\16\u0081"+ + "\u0beb\13\u0081\3\u0081\3\u0081\7\u0081\u0bef\n\u0081\f\u0081\16\u0081"+ + "\u0bf2\13\u0081\3\u0081\7\u0081\u0bf5\n\u0081\f\u0081\16\u0081\u0bf8\13"+ + "\u0081\3\u0081\7\u0081\u0bfb\n\u0081\f\u0081\16\u0081\u0bfe\13\u0081\3"+ + "\u0081\5\u0081\u0c01\n\u0081\3\u0081\7\u0081\u0c04\n\u0081\f\u0081\16"+ + "\u0081\u0c07\13\u0081\3\u0081\3\u0081\7\u0081\u0c0b\n\u0081\f\u0081\16"+ + "\u0081\u0c0e\13\u0081\3\u0081\3\u0081\5\u0081\u0c12\n\u0081\3\u0081\3"+ + "\u0081\7\u0081\u0c16\n\u0081\f\u0081\16\u0081\u0c19\13\u0081\3\u0081\3"+ + "\u0081\7\u0081\u0c1d\n\u0081\f\u0081\16\u0081\u0c20\13\u0081\3\u0081\3"+ + "\u0081\5\u0081\u0c24\n\u0081\5\u0081\u0c26\n\u0081\3\u0082\3\u0082\3\u0082"+ + "\5\u0082\u0c2b\n\u0082\3\u0083\3\u0083\7\u0083\u0c2f\n\u0083\f\u0083\16"+ + "\u0083\u0c32\13\u0083\3\u0083\3\u0083\3\u0084\3\u0084\7\u0084\u0c38\n"+ + "\u0084\f\u0084\16\u0084\u0c3b\13\u0084\3\u0084\3\u0084\3\u0085\3\u0085"+ + "\7\u0085\u0c41\n\u0085\f\u0085\16\u0085\u0c44\13\u0085\3\u0085\3\u0085"+ + "\7\u0085\u0c48\n\u0085\f\u0085\16\u0085\u0c4b\13\u0085\3\u0085\6\u0085"+ + "\u0c4e\n\u0085\r\u0085\16\u0085\u0c4f\3\u0085\7\u0085\u0c53\n\u0085\f"+ + "\u0085\16\u0085\u0c56\13\u0085\3\u0085\5\u0085\u0c59\n\u0085\3\u0085\7"+ + "\u0085\u0c5c\n\u0085\f\u0085\16\u0085\u0c5f\13\u0085\3\u0085\5\u0085\u0c62"+ + "\n\u0085\3\u0086\3\u0086\7\u0086\u0c66\n\u0086\f\u0086\16\u0086\u0c69"+ + "\13\u0086\3\u0086\3\u0086\7\u0086\u0c6d\n\u0086\f\u0086\16\u0086\u0c70"+ + "\13\u0086\3\u0086\3\u0086\3\u0086\3\u0086\7\u0086\u0c76\n\u0086\f\u0086"+ + "\16\u0086\u0c79\13\u0086\3\u0086\5\u0086\u0c7c\n\u0086\3\u0086\3\u0086"+ + "\7\u0086\u0c80\n\u0086\f\u0086\16\u0086\u0c83\13\u0086\3\u0086\3\u0086"+ + "\3\u0087\3\u0087\7\u0087\u0c89\n\u0087\f\u0087\16\u0087\u0c8c\13\u0087"+ + "\3\u0087\3\u0087\3\u0088\3\u0088\7\u0088\u0c92\n\u0088\f\u0088\16\u0088"+ + "\u0c95\13\u0088\3\u0088\3\u0088\3\u0088\5\u0088\u0c9a\n\u0088\3\u0088"+ + "\3\u0088\3\u0088\3\u0088\5\u0088\u0ca0\n\u0088\3\u0089\5\u0089\u0ca3\n"+ + "\u0089\3\u0089\3\u0089\7\u0089\u0ca7\n\u0089\f\u0089\16\u0089\u0caa\13"+ + "\u0089\3\u0089\3\u0089\5\u0089\u0cae\n\u0089\3\u008a\3\u008a\3\u008b\3"+ + "\u008b\3\u008c\3\u008c\3\u008d\3\u008d\3\u008e\3\u008e\3\u008f\3\u008f"+ + "\3\u0090\3\u0090\3\u0091\3\u0091\3\u0092\3\u0092\3\u0092\3\u0092\3\u0092"+ + "\5\u0092\u0cc5\n\u0092\3\u0093\3\u0093\3\u0093\3\u0093\5\u0093\u0ccb\n"+ + "\u0093\3\u0094\3\u0094\3\u0095\7\u0095\u0cd0\n\u0095\f\u0095\16\u0095"+ + "\u0cd3\13\u0095\3\u0095\3\u0095\7\u0095\u0cd7\n\u0095\f\u0095\16\u0095"+ + "\u0cda\13\u0095\3\u0095\3\u0095\5\u0095\u0cde\n\u0095\3\u0096\3\u0096"+ + "\3\u0096\3\u0097\3\u0097\6\u0097\u0ce5\n\u0097\r\u0097\16\u0097\u0ce6"+ + "\3\u0098\3\u0098\6\u0098\u0ceb\n\u0098\r\u0098\16\u0098\u0cec\3\u0099"+ + "\3\u0099\3\u0099\3\u0099\3\u0099\3\u0099\3\u0099\3\u0099\5\u0099\u0cf7"+ + "\n\u0099\3\u0099\7\u0099\u0cfa\n\u0099\f\u0099\16\u0099\u0cfd\13\u0099"+ + "\3\u009a\6\u009a\u0d00\n\u009a\r\u009a\16\u009a\u0d01\3\u009b\3\u009b"+ + "\3\u009b\7\u009b\u0d07\n\u009b\f\u009b\16\u009b\u0d0a\13\u009b\5\u009b"+ + "\u0d0c\n\u009b\3\u009c\3\u009c\3\u009d\3\u009d\3\u009e\3\u009e\3\u009f"+ + "\3\u009f\3\u00a0\6\u00a0\u0d17\n\u00a0\r\u00a0\16\u00a0\u0d18\3\u00a1"+ + "\3\u00a1\7\u00a1\u0d1d\n\u00a1\f\u00a1\16\u00a1\u0d20\13\u00a1\3\u00a1"+ + "\3\u00a1\7\u00a1\u0d24\n\u00a1\f\u00a1\16\u00a1\u0d27\13\u00a1\3\u00a1"+ + "\5\u00a1\u0d2a\n\u00a1\3\u00a2\3\u00a2\3\u00a3\3\u00a3\3\u00a4\3\u00a4"+ + "\3\u00a5\3\u00a5\3\u00a6\3\u00a6\3\u00a7\3\u00a7\3\u00a8\3\u00a8\5\u00a8"+ + "\u0d3a\n\u00a8\3\u00a8\7\u00a8\u0d3d\n\u00a8\f\u00a8\16\u00a8\u0d40\13"+ + "\u00a8\3\u00a9\3\u00a9\7\u00a9\u0d44\n\u00a9\f\u00a9\16\u00a9\u0d47\13"+ + "\u00a9\3\u00a9\3\u00a9\5\u00a9\u0d4b\n\u00a9\3\u00a9\3\u00a9\3\u00aa\3"+ + "\u00aa\7\u00aa\u0d51\n\u00aa\f\u00aa\16\u00aa\u0d54\13\u00aa\3\u00aa\3"+ + "\u00aa\5\u00aa\u0d58\n\u00aa\3\u00aa\3\u00aa\6\u00aa\u0d5c\n\u00aa\r\u00aa"+ + "\16\u00aa\u0d5d\3\u00aa\3\u00aa\3\u00ab\3\u00ab\3\u00ab\7\u00ab\u0d65"+ + "\n\u00ab\f\u00ab\16\u00ab\u0d68\13\u00ab\3\u00ab\3\u00ab\3\u00ac\3\u00ac"+ + "\5\u00ac\u0d6e\n\u00ac\3\u00ad\3\u00ad\3\u00ae\3\u00ae\7\u00ae\u0d74\n"+ + "\u00ae\f\u00ae\16\u00ae\u0d77\13\u00ae\3\u00ae\3\u00ae\7\u00ae\u0d7b\n"+ + "\u00ae\f\u00ae\16\u00ae\u0d7e\13\u00ae\3\u00ae\2\2\u00af\2\4\6\b\n\f\16"+ + "\20\22\24\26\30\32\34\36 \"$&(*,.\60\62\64\668:<>@BDFHJLNPRTVXZ\\^`bd"+ + "fhjlnprtvxz|~\u0080\u0082\u0084\u0086\u0088\u008a\u008c\u008e\u0090\u0092"+ + "\u0094\u0096\u0098\u009a\u009c\u009e\u00a0\u00a2\u00a4\u00a6\u00a8\u00aa"+ + "\u00ac\u00ae\u00b0\u00b2\u00b4\u00b6\u00b8\u00ba\u00bc\u00be\u00c0\u00c2"+ + "\u00c4\u00c6\u00c8\u00ca\u00cc\u00ce\u00d0\u00d2\u00d4\u00d6\u00d8\u00da"+ + "\u00dc\u00de\u00e0\u00e2\u00e4\u00e6\u00e8\u00ea\u00ec\u00ee\u00f0\u00f2"+ + "\u00f4\u00f6\u00f8\u00fa\u00fc\u00fe\u0100\u0102\u0104\u0106\u0108\u010a"+ + "\u010c\u010e\u0110\u0112\u0114\u0116\u0118\u011a\u011c\u011e\u0120\u0122"+ + "\u0124\u0126\u0128\u012a\u012c\u012e\u0130\u0132\u0134\u0136\u0138\u013a"+ + "\u013c\u013e\u0140\u0142\u0144\u0146\u0148\u014a\u014c\u014e\u0150\u0152"+ + "\u0154\u0156\u0158\u015a\2 \4\2**,,\3\2NO\3\2UV\3\2./\3\2*+\4\2\7\7\35"+ + "\35\4\2\u0089\u0089\u008c\u0093\3\2\u00a1\u00a3\3\2\u00a6\u00a8\4\2=="+ + "UU\4\2::cc\3\2\37#\4\2\64\65\678\3\2\60\63\4\2hhjj\4\2ggii\3\2\24\25\3"+ + "\2\21\23\4\2\66\66ff\3\2\32\33\3\2qv\4\2}}\u0082\u0082\3\2mp\4\2hhkk\3"+ + "\2w|\3\2~\u0080\3\2\u0083\u0085\3\2\u0087\u0088\3\2@G\t\2?GIIQTXX]^k\u0088"+ + "\u0094\u0094\2\u0f1c\2\u015d\3\2\2\2\4\u0176\3\2\2\2\6\u0190\3\2\2\2\b"+ + "\u0196\3\2\2\2\n\u01bb\3\2\2\2\f\u01c0\3\2\2\2\16\u01c3\3\2\2\2\20\u01cd"+ + "\3\2\2\2\22\u01d0\3\2\2\2\24\u01d5\3\2\2\2\26\u01fc\3\2\2\2\30\u01ff\3"+ + "\2\2\2\32\u025a\3\2\2\2\34\u025e\3\2\2\2\36\u026e\3\2\2\2 \u029d\3\2\2"+ + "\2\"\u02c1\3\2\2\2$\u02d9\3\2\2\2&\u02db\3\2\2\2(\u02e1\3\2\2\2*\u02ee"+ + "\3\2\2\2,\u02ff\3\2\2\2.\u032c\3\2\2\2\60\u0345\3\2\2\2\62\u0363\3\2\2"+ + "\2\64\u037c\3\2\2\2\66\u0383\3\2\2\28\u0385\3\2\2\2:\u038f\3\2\2\2<\u03bb"+ + "\3\2\2\2>\u03ea\3\2\2\2@\u03fe\3\2\2\2B\u0454\3\2\2\2D\u0459\3\2\2\2F"+ + "\u0473\3\2\2\2H\u04a0\3\2\2\2J\u0511\3\2\2\2L\u051b\3\2\2\2N\u0546\3\2"+ + "\2\2P\u0581\3\2\2\2R\u05b0\3\2\2\2T\u05c3\3\2\2\2V\u05d4\3\2\2\2X\u05e5"+ + "\3\2\2\2Z\u0609\3\2\2\2\\\u062c\3\2\2\2^\u0635\3\2\2\2`\u0657\3\2\2\2"+ + "b\u067b\3\2\2\2d\u0691\3\2\2\2f\u069b\3\2\2\2h\u069f\3\2\2\2j\u06ac\3"+ + "\2\2\2l\u06ae\3\2\2\2n\u06c2\3\2\2\2p\u06d1\3\2\2\2r\u06d4\3\2\2\2t\u06e0"+ + "\3\2\2\2v\u06f0\3\2\2\2x\u0702\3\2\2\2z\u0734\3\2\2\2|\u0745\3\2\2\2~"+ + "\u074c\3\2\2\2\u0080\u0768\3\2\2\2\u0082\u0771\3\2\2\2\u0084\u077a\3\2"+ + "\2\2\u0086\u0784\3\2\2\2\u0088\u0786\3\2\2\2\u008a\u0799\3\2\2\2\u008c"+ + "\u079b\3\2\2\2\u008e\u07b9\3\2\2\2\u0090\u07cd\3\2\2\2\u0092\u07ee\3\2"+ + "\2\2\u0094\u0800\3\2\2\2\u0096\u0808\3\2\2\2\u0098\u080a\3\2\2\2\u009a"+ + "\u080c\3\2\2\2\u009c\u0820\3\2\2\2\u009e\u0834\3\2\2\2\u00a0\u0843\3\2"+ + "\2\2\u00a2\u0852\3\2\2\2\u00a4\u0859\3\2\2\2\u00a6\u0871\3\2\2\2\u00a8"+ + "\u0886\3\2\2\2\u00aa\u0889\3\2\2\2\u00ac\u0898\3\2\2\2\u00ae\u08a6\3\2"+ + "\2\2\u00b0\u08b5\3\2\2\2\u00b2\u08c4\3\2\2\2\u00b4\u08dc\3\2\2\2\u00b6"+ + "\u08ea\3\2\2\2\u00b8\u08ec\3\2\2\2\u00ba\u08f8\3\2\2\2\u00bc\u08ff\3\2"+ + "\2\2\u00be\u0901\3\2\2\2\u00c0\u0913\3\2\2\2\u00c2\u0915\3\2\2\2\u00c4"+ + "\u0928\3\2\2\2\u00c6\u092a\3\2\2\2\u00c8\u0956\3\2\2\2\u00ca\u0963\3\2"+ + "\2\2\u00cc\u096f\3\2\2\2\u00ce\u097d\3\2\2\2\u00d0\u09a9\3\2\2\2\u00d2"+ + "\u09d8\3\2\2\2\u00d4\u0a09\3\2\2\2\u00d6\u0a0b\3\2\2\2\u00d8\u0a1b\3\2"+ + "\2\2\u00da\u0a49\3\2\2\2\u00dc\u0a4d\3\2\2\2\u00de\u0a4f\3\2\2\2\u00e0"+ + "\u0a59\3\2\2\2\u00e2\u0a64\3\2\2\2\u00e4\u0a66\3\2\2\2\u00e6\u0a76\3\2"+ + "\2\2\u00e8\u0a78\3\2\2\2\u00ea\u0a88\3\2\2\2\u00ec\u0aaa\3\2\2\2\u00ee"+ + "\u0ad9\3\2\2\2\u00f0\u0adb\3\2\2\2\u00f2\u0b18\3\2\2\2\u00f4\u0b1a\3\2"+ + "\2\2\u00f6\u0b3a\3\2\2\2\u00f8\u0b54\3\2\2\2\u00fa\u0b56\3\2\2\2\u00fc"+ + "\u0b93\3\2\2\2\u00fe\u0bba\3\2\2\2\u0100\u0c25\3\2\2\2\u0102\u0c2a\3\2"+ + "\2\2\u0104\u0c2c\3\2\2\2\u0106\u0c35\3\2\2\2\u0108\u0c3e\3\2\2\2\u010a"+ + "\u0c63\3\2\2\2\u010c\u0c86\3\2\2\2\u010e\u0c9f\3\2\2\2\u0110\u0ca2\3\2"+ + "\2\2\u0112\u0caf\3\2\2\2\u0114\u0cb1\3\2\2\2\u0116\u0cb3\3\2\2\2\u0118"+ + "\u0cb5\3\2\2\2\u011a\u0cb7\3\2\2\2\u011c\u0cb9\3\2\2\2\u011e\u0cbb\3\2"+ + "\2\2\u0120\u0cbd\3\2\2\2\u0122\u0cc4\3\2\2\2\u0124\u0cca\3\2\2\2\u0126"+ + "\u0ccc\3\2\2\2\u0128\u0cdd\3\2\2\2\u012a\u0cdf\3\2\2\2\u012c\u0ce4\3\2"+ + "\2\2\u012e\u0cea\3\2\2\2\u0130\u0cf6\3\2\2\2\u0132\u0cff\3\2\2\2\u0134"+ + "\u0d0b\3\2\2\2\u0136\u0d0d\3\2\2\2\u0138\u0d0f\3\2\2\2\u013a\u0d11\3\2"+ + "\2\2\u013c\u0d13\3\2\2\2\u013e\u0d16\3\2\2\2\u0140\u0d29\3\2\2\2\u0142"+ + "\u0d2b\3\2\2\2\u0144\u0d2d\3\2\2\2\u0146\u0d2f\3\2\2\2\u0148\u0d31\3\2"+ + "\2\2\u014a\u0d33\3\2\2\2\u014c\u0d35\3\2\2\2\u014e\u0d39\3\2\2\2\u0150"+ + "\u0d4a\3\2\2\2\u0152\u0d57\3\2\2\2\u0154\u0d61\3\2\2\2\u0156\u0d6d\3\2"+ + "\2\2\u0158\u0d6f\3\2\2\2\u015a\u0d71\3\2\2\2\u015c\u015e\5\6\4\2\u015d"+ + "\u015c\3\2\2\2\u015d\u015e\3\2\2\2\u015e\u0162\3\2\2\2\u015f\u0161\7\7"+ + "\2\2\u0160\u015f\3\2\2\2\u0161\u0164\3\2\2\2\u0162\u0160\3\2\2\2\u0162"+ + "\u0163\3\2\2\2\u0163\u0168\3\2\2\2\u0164\u0162\3\2\2\2\u0165\u0167\5\b"+ + "\5\2\u0166\u0165\3\2\2\2\u0167\u016a\3\2\2\2\u0168\u0166\3\2\2\2\u0168"+ + "\u0169\3\2\2\2\u0169\u016b\3\2\2\2\u016a\u0168\3\2\2\2\u016b\u016c\5\n"+ + "\6\2\u016c\u0170\5\f\7\2\u016d\u016f\5\22\n\2\u016e\u016d\3\2\2\2\u016f"+ + "\u0172\3\2\2\2\u0170\u016e\3\2\2\2\u0170\u0171\3\2\2\2\u0171\u0173\3\2"+ + "\2\2\u0172\u0170\3\2\2\2\u0173\u0174\7\2\2\3\u0174\3\3\2\2\2\u0175\u0177"+ + "\5\6\4\2\u0176\u0175\3\2\2\2\u0176\u0177\3\2\2\2\u0177\u017b\3\2\2\2\u0178"+ + "\u017a\7\7\2\2\u0179\u0178\3\2\2\2\u017a\u017d\3\2\2\2\u017b\u0179\3\2"+ + "\2\2\u017b\u017c\3\2\2\2\u017c\u0181\3\2\2\2\u017d\u017b\3\2\2\2\u017e"+ + "\u0180\5\b\5\2\u017f\u017e\3\2\2\2\u0180\u0183\3\2\2\2\u0181\u017f\3\2"+ + "\2\2\u0181\u0182\3\2\2\2\u0182\u0184\3\2\2\2\u0183\u0181\3\2\2\2\u0184"+ + "\u0185\5\n\6\2\u0185\u018b\5\f\7\2\u0186\u0187\5\u0082B\2\u0187\u0188"+ + "\5\u0094K\2\u0188\u018a\3\2\2\2\u0189\u0186\3\2\2\2\u018a\u018d\3\2\2"+ + "\2\u018b\u0189\3\2\2\2\u018b\u018c\3\2\2\2\u018c\u018e\3\2\2\2\u018d\u018b"+ + "\3\2\2\2\u018e\u018f\7\2\2\3\u018f\5\3\2\2\2\u0190\u0192\7\3\2\2\u0191"+ + "\u0193\7\7\2\2\u0192\u0191\3\2\2\2\u0193\u0194\3\2\2\2\u0194\u0192\3\2"+ + "\2\2\u0194\u0195\3\2\2\2\u0195\7\3\2\2\2\u0196\u0197\t\2\2\2\u0197\u019b"+ + "\7?\2\2\u0198\u019a\7\7\2\2\u0199\u0198\3\2\2\2\u019a\u019d\3\2\2\2\u019b"+ + "\u0199\3\2\2\2\u019b\u019c\3\2\2\2\u019c\u019e\3\2\2\2\u019d\u019b\3\2"+ + "\2\2\u019e\u01a2\7\34\2\2\u019f\u01a1\7\7\2\2\u01a0\u019f\3\2\2\2\u01a1"+ + "\u01a4\3\2\2\2\u01a2\u01a0\3\2\2\2\u01a2\u01a3\3\2\2\2\u01a3\u01ae\3\2"+ + "\2\2\u01a4\u01a2\3\2\2\2\u01a5\u01a7\7\r\2\2\u01a6\u01a8\5\u0156\u00ac"+ + "\2\u01a7\u01a6\3\2\2\2\u01a8\u01a9\3\2\2\2\u01a9\u01a7\3\2\2\2\u01a9\u01aa"+ + "\3\2\2\2\u01aa\u01ab\3\2\2\2\u01ab\u01ac\7\16\2\2\u01ac\u01af\3\2\2\2"+ + "\u01ad\u01af\5\u0156\u00ac\2\u01ae\u01a5\3\2\2\2\u01ae\u01ad\3\2\2\2\u01af"+ + "\u01b3\3\2\2\2\u01b0\u01b2\7\7\2\2\u01b1\u01b0\3\2\2\2\u01b2\u01b5\3\2"+ + "\2\2\u01b3\u01b1\3\2\2\2\u01b3\u01b4\3\2\2\2\u01b4\t\3\2\2\2\u01b5\u01b3"+ + "\3\2\2\2\u01b6\u01b7\7H\2\2\u01b7\u01b9\5\u015a\u00ae\2\u01b8\u01ba\5"+ + "\u0094K\2\u01b9\u01b8\3\2\2\2\u01b9\u01ba\3\2\2\2\u01ba\u01bc\3\2\2\2"+ + "\u01bb\u01b6\3\2\2\2\u01bb\u01bc\3\2\2\2\u01bc\13\3\2\2\2\u01bd\u01bf"+ + "\5\16\b\2\u01be\u01bd\3\2\2\2\u01bf\u01c2\3\2\2\2\u01c0\u01be\3\2\2\2"+ + "\u01c0\u01c1\3\2\2\2\u01c1\r\3\2\2\2\u01c2\u01c0\3\2\2\2\u01c3\u01c4\7"+ + "I\2\2\u01c4\u01c8\5\u015a\u00ae\2\u01c5\u01c6\7\t\2\2\u01c6\u01c9\7\21"+ + "\2\2\u01c7\u01c9\5\20\t\2\u01c8\u01c5\3\2\2\2\u01c8\u01c7\3\2\2\2\u01c8"+ + "\u01c9\3\2\2\2\u01c9\u01cb\3\2\2\2\u01ca\u01cc\5\u0094K\2\u01cb\u01ca"+ + "\3\2\2\2\u01cb\u01cc\3\2\2\2\u01cc\17\3\2\2\2\u01cd\u01ce\7f\2\2\u01ce"+ + "\u01cf\5\u0158\u00ad\2\u01cf\21\3\2\2\2\u01d0\u01d2\5\26\f\2\u01d1\u01d3"+ + "\5\u0096L\2\u01d2\u01d1\3\2\2\2\u01d2\u01d3\3\2\2\2\u01d3\23\3\2\2\2\u01d4"+ + "\u01d6\5\u012c\u0097\2\u01d5\u01d4\3\2\2\2\u01d5\u01d6\3\2\2\2\u01d6\u01d7"+ + "\3\2\2\2\u01d7\u01db\7P\2\2\u01d8\u01da\7\7\2\2\u01d9\u01d8\3\2\2\2\u01da"+ + "\u01dd\3\2\2\2\u01db\u01d9\3\2\2\2\u01db\u01dc\3\2\2\2\u01dc\u01de\3\2"+ + "\2\2\u01dd\u01db\3\2\2\2\u01de\u01e6\5\u0158\u00ad\2\u01df\u01e1\7\7\2"+ + "\2\u01e0\u01df\3\2\2\2\u01e1\u01e4\3\2\2\2\u01e2\u01e0\3\2\2\2\u01e2\u01e3"+ + "\3\2\2\2\u01e3\u01e5\3\2\2\2\u01e4\u01e2\3\2\2\2\u01e5\u01e7\5,\27\2\u01e6"+ + "\u01e2\3\2\2\2\u01e6\u01e7\3\2\2\2\u01e7\u01eb\3\2\2\2\u01e8\u01ea\7\7"+ + "\2\2\u01e9\u01e8\3\2\2\2\u01ea\u01ed\3\2\2\2\u01eb\u01e9\3\2\2\2\u01eb"+ + "\u01ec\3\2\2\2\u01ec\u01ee\3\2\2\2\u01ed\u01eb\3\2\2\2\u01ee\u01f2\7\36"+ + "\2\2\u01ef\u01f1\7\7\2\2\u01f0\u01ef\3\2\2\2\u01f1\u01f4\3\2\2\2\u01f2"+ + "\u01f0\3\2\2\2\u01f2\u01f3\3\2\2\2\u01f3\u01f5\3\2\2\2\u01f4\u01f2\3\2"+ + "\2\2\u01f5\u01f6\5d\63\2\u01f6\25\3\2\2\2\u01f7\u01fd\5\30\r\2\u01f8\u01fd"+ + "\5X-\2\u01f9\u01fd\5@!\2\u01fa\u01fd\5H%\2\u01fb\u01fd\5\24\13\2\u01fc"+ + "\u01f7\3\2\2\2\u01fc\u01f8\3\2\2\2\u01fc\u01f9\3\2\2\2\u01fc\u01fa\3\2"+ + "\2\2\u01fc\u01fb\3\2\2\2\u01fd\27\3\2\2\2\u01fe\u0200\5\u012c\u0097\2"+ + "\u01ff\u01fe\3\2\2\2\u01ff\u0200\3\2\2\2\u0200\u020c\3\2\2\2\u0201\u020d"+ + "\7J\2\2\u0202\u0206\7L\2\2\u0203\u0205\7\7\2\2\u0204\u0203\3\2\2\2\u0205"+ + "\u0208\3\2\2\2\u0206\u0204\3\2\2\2\u0206\u0207\3\2\2\2\u0207\u020a\3\2"+ + "\2\2\u0208\u0206\3\2\2\2\u0209\u0202\3\2\2\2\u0209\u020a\3\2\2\2\u020a"+ + "\u020b\3\2\2\2\u020b\u020d\7K\2\2\u020c\u0201\3\2\2\2\u020c\u0209\3\2"+ + "\2\2\u020d\u0211\3\2\2\2\u020e\u0210\7\7\2\2\u020f\u020e\3\2\2\2\u0210"+ + "\u0213\3\2\2\2\u0211\u020f\3\2\2\2\u0211\u0212\3\2\2\2\u0212\u0214\3\2"+ + "\2\2\u0213\u0211\3\2\2\2\u0214\u021c\5\u0158\u00ad\2\u0215\u0217\7\7\2"+ + "\2\u0216\u0215\3\2\2\2\u0217\u021a\3\2\2\2\u0218\u0216\3\2\2\2\u0218\u0219"+ + "\3\2\2\2\u0219\u021b\3\2\2\2\u021a\u0218\3\2\2\2\u021b\u021d\5,\27\2\u021c"+ + "\u0218\3\2\2\2\u021c\u021d\3\2\2\2\u021d\u0225\3\2\2\2\u021e\u0220\7\7"+ + "\2\2\u021f\u021e\3\2\2\2\u0220\u0223\3\2\2\2\u0221\u021f\3\2\2\2\u0221"+ + "\u0222\3\2\2\2\u0222\u0224\3\2\2\2\u0223\u0221\3\2\2\2\u0224\u0226\5\32"+ + "\16\2\u0225\u0221\3\2\2\2\u0225\u0226\3\2\2\2\u0226\u0235\3\2\2\2\u0227"+ + "\u0229\7\7\2\2\u0228\u0227\3\2\2\2\u0229\u022c\3\2\2\2\u022a\u0228\3\2"+ + "\2\2\u022a\u022b\3\2\2\2\u022b\u022d\3\2\2\2\u022c\u022a\3\2\2\2\u022d"+ + "\u0231\7\34\2\2\u022e\u0230\7\7\2\2\u022f\u022e\3\2\2\2\u0230\u0233\3"+ + "\2\2\2\u0231\u022f\3\2\2\2\u0231\u0232\3\2\2\2\u0232\u0234\3\2\2\2\u0233"+ + "\u0231\3\2\2\2\u0234\u0236\5\"\22\2\u0235\u022a\3\2\2\2\u0235\u0236\3"+ + "\2\2\2\u0236\u023e\3\2\2\2\u0237\u0239\7\7\2\2\u0238\u0237\3\2\2\2\u0239"+ + "\u023c\3\2\2\2\u023a\u0238\3\2\2\2\u023a\u023b\3\2\2\2\u023b\u023d\3\2"+ + "\2\2\u023c\u023a\3\2\2\2\u023d\u023f\5\60\31\2\u023e\u023a\3\2\2\2\u023e"+ + "\u023f\3\2\2\2\u023f\u024e\3\2\2\2\u0240\u0242\7\7\2\2\u0241\u0240\3\2"+ + "\2\2\u0242\u0245\3\2\2\2\u0243\u0241\3\2\2\2\u0243\u0244\3\2\2\2\u0244"+ + "\u0246\3\2\2\2\u0245\u0243\3\2\2\2\u0246\u024f\5\34\17\2\u0247\u0249\7"+ + "\7\2\2\u0248\u0247\3\2\2\2\u0249\u024c\3\2\2\2\u024a\u0248\3\2\2\2\u024a"+ + "\u024b\3\2\2\2\u024b\u024d\3\2\2\2\u024c\u024a\3\2\2\2\u024d\u024f\5^"+ + "\60\2\u024e\u0243\3\2\2\2\u024e\u024a\3\2\2\2\u024e\u024f\3\2\2\2\u024f"+ + "\31\3\2\2\2\u0250\u0252\5\u012c\u0097\2\u0251\u0250\3\2\2\2\u0251\u0252"+ + "\3\2\2\2\u0252\u0253\3\2\2\2\u0253\u0257\7Q\2\2\u0254\u0256\7\7\2\2\u0255"+ + "\u0254\3\2\2\2\u0256\u0259\3\2\2\2\u0257\u0255\3\2\2\2\u0257\u0258\3\2"+ + "\2\2\u0258\u025b\3\2\2\2\u0259\u0257\3\2\2\2\u025a\u0251\3\2\2\2\u025a"+ + "\u025b\3\2\2\2\u025b\u025c\3\2\2\2\u025c\u025d\5\36\20\2\u025d\33\3\2"+ + "\2\2\u025e\u0262\7\17\2\2\u025f\u0261\7\7\2\2\u0260\u025f\3\2\2\2\u0261"+ + "\u0264\3\2\2\2\u0262\u0260\3\2\2\2\u0262\u0263\3\2\2\2\u0263\u0265\3\2"+ + "\2\2\u0264\u0262\3\2\2\2\u0265\u0269\5\64\33\2\u0266\u0268\7\7\2\2\u0267"+ + "\u0266\3\2\2\2\u0268\u026b\3\2\2\2\u0269\u0267\3\2\2\2\u0269\u026a\3\2"+ + "\2\2\u026a\u026c\3\2\2\2\u026b\u0269\3\2\2\2\u026c\u026d\7\20\2\2\u026d"+ + "\35\3\2\2\2\u026e\u0272\7\13\2\2\u026f\u0271\7\7\2\2\u0270\u026f\3\2\2"+ + "\2\u0271\u0274\3\2\2\2\u0272\u0270\3\2\2\2\u0272\u0273\3\2\2\2\u0273\u0292"+ + "\3\2\2\2\u0274\u0272\3\2\2\2\u0275\u0286\5 \21\2\u0276\u0278\7\7\2\2\u0277"+ + "\u0276\3\2\2\2\u0278\u027b\3\2\2\2\u0279\u0277\3\2\2\2\u0279\u027a\3\2"+ + "\2\2\u027a\u027c\3\2\2\2\u027b\u0279\3\2\2\2\u027c\u0280\7\n\2\2\u027d"+ + "\u027f\7\7\2\2\u027e\u027d\3\2\2\2\u027f\u0282\3\2\2\2\u0280\u027e\3\2"+ + "\2\2\u0280\u0281\3\2\2\2\u0281\u0283\3\2\2\2\u0282\u0280\3\2\2\2\u0283"+ + "\u0285\5 \21\2\u0284\u0279\3\2\2\2\u0285\u0288\3\2\2\2\u0286\u0284\3\2"+ + "\2\2\u0286\u0287\3\2\2\2\u0287\u0290\3\2\2\2\u0288\u0286\3\2\2\2\u0289"+ + "\u028b\7\7\2\2\u028a\u0289\3\2\2\2\u028b\u028e\3\2\2\2\u028c\u028a\3\2"+ + "\2\2\u028c\u028d\3\2\2\2\u028d\u028f\3\2\2\2\u028e\u028c\3\2\2\2\u028f"+ + "\u0291\7\n\2\2\u0290\u028c\3\2\2\2\u0290\u0291\3\2\2\2\u0291\u0293\3\2"+ + "\2\2\u0292\u0275\3\2\2\2\u0292\u0293\3\2\2\2\u0293\u0297\3\2\2\2\u0294"+ + "\u0296\7\7\2\2\u0295\u0294\3\2\2\2\u0296\u0299\3\2\2\2\u0297\u0295\3\2"+ + "\2\2\u0297\u0298\3\2\2\2\u0298\u029a\3\2\2\2\u0299\u0297\3\2\2\2\u029a"+ + "\u029b\7\f\2\2\u029b\37\3\2\2\2\u029c\u029e\5\u012c\u0097\2\u029d\u029c"+ + "\3\2\2\2\u029d\u029e\3\2\2\2\u029e\u02a0\3\2\2\2\u029f\u02a1\t\3\2\2\u02a0"+ + "\u029f\3\2\2\2\u02a0\u02a1\3\2\2\2\u02a1\u02a5\3\2\2\2\u02a2\u02a4\7\7"+ + "\2\2\u02a3\u02a2\3\2\2\2\u02a4\u02a7\3\2\2\2\u02a5\u02a3\3\2\2\2\u02a5"+ + "\u02a6\3\2\2\2\u02a6\u02a8\3\2\2\2\u02a7\u02a5\3\2\2\2\u02a8\u02a9\5\u0158"+ + "\u00ad\2\u02a9\u02ad\7\34\2\2\u02aa\u02ac\7\7\2\2\u02ab\u02aa\3\2\2\2"+ + "\u02ac\u02af\3\2\2\2\u02ad\u02ab\3\2\2\2\u02ad\u02ae\3\2\2\2\u02ae\u02b0"+ + "\3\2\2\2\u02af\u02ad\3\2\2\2\u02b0\u02bf\5d\63\2\u02b1\u02b3\7\7\2\2\u02b2"+ + "\u02b1\3\2\2\2\u02b3\u02b6\3\2\2\2\u02b4\u02b2\3\2\2\2\u02b4\u02b5\3\2"+ + "\2\2\u02b5\u02b7\3\2\2\2\u02b6\u02b4\3\2\2\2\u02b7\u02bb\7\36\2\2\u02b8"+ + "\u02ba\7\7\2\2\u02b9\u02b8\3\2\2\2\u02ba\u02bd\3\2\2\2\u02bb\u02b9\3\2"+ + "\2\2\u02bb\u02bc\3\2\2\2\u02bc\u02be\3\2\2\2\u02bd\u02bb\3\2\2\2\u02be"+ + "\u02c0\5\u0098M\2\u02bf\u02b4\3\2\2\2\u02bf\u02c0\3\2\2\2\u02c0!\3\2\2"+ + "\2\u02c1\u02d2\5(\25\2\u02c2\u02c4\7\7\2\2\u02c3\u02c2\3\2\2\2\u02c4\u02c7"+ + "\3\2\2\2\u02c5\u02c3\3\2\2\2\u02c5\u02c6\3\2\2\2\u02c6\u02c8\3\2\2\2\u02c7"+ + "\u02c5\3\2\2\2\u02c8\u02cc\7\n\2\2\u02c9\u02cb\7\7\2\2\u02ca\u02c9\3\2"+ + "\2\2\u02cb\u02ce\3\2\2\2\u02cc\u02ca\3\2\2\2\u02cc\u02cd\3\2\2\2\u02cd"+ + "\u02cf\3\2\2\2\u02ce\u02cc\3\2\2\2\u02cf\u02d1\5(\25\2\u02d0\u02c5\3\2"+ + "\2\2\u02d1\u02d4\3\2\2\2\u02d2\u02d0\3\2\2\2\u02d2\u02d3\3\2\2\2\u02d3"+ + "#\3\2\2\2\u02d4\u02d2\3\2\2\2\u02d5\u02da\5&\24\2\u02d6\u02da\5*\26\2"+ + "\u02d7\u02da\5l\67\2\u02d8\u02da\5v<\2\u02d9\u02d5\3\2\2\2\u02d9\u02d6"+ + "\3\2\2\2\u02d9\u02d7\3\2\2\2\u02d9\u02d8\3\2\2\2\u02da%\3\2\2\2\u02db"+ + "\u02dc\5l\67\2\u02dc\u02dd\5\u00d0i\2\u02dd\'\3\2\2\2\u02de\u02e0\5\u014e"+ + "\u00a8\2\u02df\u02de\3\2\2\2\u02e0\u02e3\3\2\2\2\u02e1\u02df\3\2\2\2\u02e1"+ + "\u02e2\3\2\2\2\u02e2\u02e7\3\2\2\2\u02e3\u02e1\3\2\2\2\u02e4\u02e6\7\7"+ + "\2\2\u02e5\u02e4\3\2\2\2\u02e6\u02e9\3\2\2\2\u02e7\u02e5\3\2\2\2\u02e7"+ + "\u02e8\3\2\2\2\u02e8\u02ea\3\2\2\2\u02e9\u02e7\3\2\2\2\u02ea\u02eb\5$"+ + "\23\2\u02eb)\3\2\2\2\u02ec\u02ef\5l\67\2\u02ed\u02ef\5v<\2\u02ee\u02ec"+ + "\3\2\2\2\u02ee\u02ed\3\2\2\2\u02ef\u02f3\3\2\2\2\u02f0\u02f2\7\7\2\2\u02f1"+ + "\u02f0\3\2\2\2\u02f2\u02f5\3\2\2\2\u02f3\u02f1\3\2\2\2\u02f3\u02f4\3\2"+ + "\2\2\u02f4\u02f6\3\2\2\2\u02f5\u02f3\3\2\2\2\u02f6\u02fa\7R\2\2\u02f7"+ + "\u02f9\7\7\2\2\u02f8\u02f7\3\2\2\2\u02f9\u02fc\3\2\2\2\u02fa\u02f8\3\2"+ + "\2\2\u02fa\u02fb\3\2\2\2\u02fb\u02fd\3\2\2\2\u02fc\u02fa\3\2\2\2\u02fd"+ + "\u02fe\5\u0098M\2\u02fe+\3\2\2\2\u02ff\u0303\7\60\2\2\u0300\u0302\7\7"+ + "\2\2\u0301\u0300\3\2\2\2\u0302\u0305\3\2\2\2\u0303\u0301\3\2\2\2\u0303"+ + "\u0304\3\2\2\2\u0304\u0306\3\2\2\2\u0305\u0303\3\2\2\2\u0306\u0317\5."+ + "\30\2\u0307\u0309\7\7\2\2\u0308\u0307\3\2\2\2\u0309\u030c\3\2\2\2\u030a"+ + "\u0308\3\2\2\2\u030a\u030b\3\2\2\2\u030b\u030d\3\2\2\2\u030c\u030a\3\2"+ + "\2\2\u030d\u0311\7\n\2\2\u030e\u0310\7\7\2\2\u030f\u030e\3\2\2\2\u0310"+ + "\u0313\3\2\2\2\u0311\u030f\3\2\2\2\u0311\u0312\3\2\2\2\u0312\u0314\3\2"+ + "\2\2\u0313\u0311\3\2\2\2\u0314\u0316\5.\30\2\u0315\u030a\3\2\2\2\u0316"+ + "\u0319\3\2\2\2\u0317\u0315\3\2\2\2\u0317\u0318\3\2\2\2\u0318\u0321\3\2"+ + "\2\2\u0319\u0317\3\2\2\2\u031a\u031c\7\7\2\2\u031b\u031a\3\2\2\2\u031c"+ + "\u031f\3\2\2\2\u031d\u031b\3\2\2\2\u031d\u031e\3\2\2\2\u031e\u0320\3\2"+ + "\2\2\u031f\u031d\3\2\2\2\u0320\u0322\7\n\2\2\u0321\u031d\3\2\2\2\u0321"+ + "\u0322\3\2\2\2\u0322\u0326\3\2\2\2\u0323\u0325\7\7\2\2\u0324\u0323\3\2"+ + "\2\2\u0325\u0328\3\2\2\2\u0326\u0324\3\2\2\2\u0326\u0327\3\2\2\2\u0327"+ + "\u0329\3\2\2\2\u0328\u0326\3\2\2\2\u0329\u032a\7\61\2\2\u032a-\3\2\2\2"+ + "\u032b\u032d\5\u013e\u00a0\2\u032c\u032b\3\2\2\2\u032c\u032d\3\2\2\2\u032d"+ + "\u0331\3\2\2\2\u032e\u0330\7\7\2\2\u032f\u032e\3\2\2\2\u0330\u0333\3\2"+ + "\2\2\u0331\u032f\3\2\2\2\u0331\u0332\3\2\2\2\u0332\u0334\3\2\2\2\u0333"+ + "\u0331\3\2\2\2\u0334\u0343\5\u0158\u00ad\2\u0335\u0337\7\7\2\2\u0336\u0335"+ + "\3\2\2\2\u0337\u033a\3\2\2\2\u0338\u0336\3\2\2\2\u0338\u0339\3\2\2\2\u0339"+ + "\u033b\3\2\2\2\u033a\u0338\3\2\2\2\u033b\u033f\7\34\2\2\u033c\u033e\7"+ + "\7\2\2\u033d\u033c\3\2\2\2\u033e\u0341\3\2\2\2\u033f\u033d\3\2\2\2\u033f"+ + "\u0340\3\2\2\2\u0340\u0342\3\2\2\2\u0341\u033f\3\2\2\2\u0342\u0344\5d"+ + "\63\2\u0343\u0338\3\2\2\2\u0343\u0344\3\2\2\2\u0344/\3\2\2\2\u0345\u0349"+ + "\7X\2\2\u0346\u0348\7\7\2\2\u0347\u0346\3\2\2\2\u0348\u034b\3\2\2\2\u0349"+ + "\u0347\3\2\2\2\u0349\u034a\3\2\2\2\u034a\u034c\3\2\2\2\u034b\u0349\3\2"+ + "\2\2\u034c\u035d\5\62\32\2\u034d\u034f\7\7\2\2\u034e\u034d\3\2\2\2\u034f"+ + "\u0352\3\2\2\2\u0350\u034e\3\2\2\2\u0350\u0351\3\2\2\2\u0351\u0353\3\2"+ + "\2\2\u0352\u0350\3\2\2\2\u0353\u0357\7\n\2\2\u0354\u0356\7\7\2\2\u0355"+ + "\u0354\3\2\2\2\u0356\u0359\3\2\2\2\u0357\u0355\3\2\2\2\u0357\u0358\3\2"+ + "\2\2\u0358\u035a\3\2\2\2\u0359\u0357\3\2\2\2\u035a\u035c\5\62\32\2\u035b"+ + "\u0350\3\2\2\2\u035c\u035f\3\2\2\2\u035d\u035b\3\2\2\2\u035d\u035e\3\2"+ + "\2\2\u035e\61\3\2\2\2\u035f\u035d\3\2\2\2\u0360\u0362\5\u014e\u00a8\2"+ + "\u0361\u0360\3\2\2\2\u0362\u0365\3\2\2\2\u0363\u0361\3\2\2\2\u0363\u0364"+ + "\3\2\2\2\u0364\u0366\3\2\2\2\u0365\u0363\3\2\2\2\u0366\u036a\5\u0158\u00ad"+ + "\2\u0367\u0369\7\7\2\2\u0368\u0367\3\2\2\2\u0369\u036c\3\2\2\2\u036a\u0368"+ + "\3\2\2\2\u036a\u036b\3\2\2\2\u036b\u036d\3\2\2\2\u036c\u036a\3\2\2\2\u036d"+ + "\u0371\7\34\2\2\u036e\u0370\7\7\2\2\u036f\u036e\3\2\2\2\u0370\u0373\3"+ + "\2\2\2\u0371\u036f\3\2\2\2\u0371\u0372\3\2\2\2\u0372\u0374\3\2\2\2\u0373"+ + "\u0371\3\2\2\2\u0374\u0375\5d\63\2\u0375\63\3\2\2\2\u0376\u0378\5\66\34"+ + "\2\u0377\u0379\5\u0096L\2\u0378\u0377\3\2\2\2\u0378\u0379\3\2\2\2\u0379"+ + "\u037b\3\2\2\2\u037a\u0376\3\2\2\2\u037b\u037e\3\2\2\2\u037c\u037a\3\2"+ + "\2\2\u037c\u037d\3\2\2\2\u037d\65\3\2\2\2\u037e\u037c\3\2\2\2\u037f\u0384"+ + "\5\26\f\2\u0380\u0384\5:\36\2\u0381\u0384\58\35\2\u0382\u0384\5Z.\2\u0383"+ + "\u037f\3\2\2\2\u0383\u0380\3\2\2\2\u0383\u0381\3\2\2\2\u0383\u0382\3\2"+ + "\2\2\u0384\67\3\2\2\2\u0385\u0389\7T\2\2\u0386\u0388\7\7\2\2\u0387\u0386"+ + "\3\2\2\2\u0388\u038b\3\2\2\2\u0389\u0387\3\2\2\2\u0389\u038a\3\2\2\2\u038a"+ + "\u038c\3\2\2\2\u038b\u0389\3\2\2\2\u038c\u038d\5\u0088E\2\u038d9\3\2\2"+ + "\2\u038e\u0390\5\u012c\u0097\2\u038f\u038e\3\2\2\2\u038f\u0390\3\2\2\2"+ + "\u0390\u0391\3\2\2\2\u0391\u0395\7S\2\2\u0392\u0394\7\7\2\2\u0393\u0392"+ + "\3\2\2\2\u0394\u0397\3\2\2\2\u0395\u0393\3\2\2\2\u0395\u0396\3\2\2\2\u0396"+ + "\u0398\3\2\2\2\u0397\u0395\3\2\2\2\u0398\u03a0\7M\2\2\u0399\u039b\7\7"+ + "\2\2\u039a\u0399\3\2\2\2\u039b\u039e\3\2\2\2\u039c\u039a\3\2\2\2\u039c"+ + "\u039d\3\2\2\2\u039d\u039f\3\2\2\2\u039e\u039c\3\2\2\2\u039f\u03a1\5\u0158"+ + "\u00ad\2\u03a0\u039c\3\2\2\2\u03a0\u03a1\3\2\2\2\u03a1\u03b0\3\2\2\2\u03a2"+ + "\u03a4\7\7\2\2\u03a3\u03a2\3\2\2\2\u03a4\u03a7\3\2\2\2\u03a5\u03a3\3\2"+ + "\2\2\u03a5\u03a6\3\2\2\2\u03a6\u03a8\3\2\2\2\u03a7\u03a5\3\2\2\2\u03a8"+ + "\u03ac\7\34\2\2\u03a9\u03ab\7\7\2\2\u03aa\u03a9\3\2\2\2\u03ab\u03ae\3"+ + "\2\2\2\u03ac\u03aa\3\2\2\2\u03ac\u03ad\3\2\2\2\u03ad\u03af\3\2\2\2\u03ae"+ + "\u03ac\3\2\2\2\u03af\u03b1\5\"\22\2\u03b0\u03a5\3\2\2\2\u03b0\u03b1\3"+ + "\2\2\2\u03b1\u03b9\3\2\2\2\u03b2\u03b4\7\7\2\2\u03b3\u03b2\3\2\2\2\u03b4"+ + "\u03b7\3\2\2\2\u03b5\u03b3\3\2\2\2\u03b5\u03b6\3\2\2\2\u03b6\u03b8\3\2"+ + "\2\2\u03b7\u03b5\3\2\2\2\u03b8\u03ba\5\34\17\2\u03b9\u03b5\3\2\2\2\u03b9"+ + "\u03ba\3\2\2\2\u03ba;\3\2\2\2\u03bb\u03bf\7\13\2\2\u03bc\u03be\7\7\2\2"+ + "\u03bd\u03bc\3\2\2\2\u03be\u03c1\3\2\2\2\u03bf\u03bd\3\2\2\2\u03bf\u03c0"+ + "\3\2\2\2\u03c0\u03df\3\2\2\2\u03c1\u03bf\3\2\2\2\u03c2\u03d3\5> \2\u03c3"+ + "\u03c5\7\7\2\2\u03c4\u03c3\3\2\2\2\u03c5\u03c8\3\2\2\2\u03c6\u03c4\3\2"+ + "\2\2\u03c6\u03c7\3\2\2\2\u03c7\u03c9\3\2\2\2\u03c8\u03c6\3\2\2\2\u03c9"+ + "\u03cd\7\n\2\2\u03ca\u03cc\7\7\2\2\u03cb\u03ca\3\2\2\2\u03cc\u03cf\3\2"+ + "\2\2\u03cd\u03cb\3\2\2\2\u03cd\u03ce\3\2\2\2\u03ce\u03d0\3\2\2\2\u03cf"+ + "\u03cd\3\2\2\2\u03d0\u03d2\5> \2\u03d1\u03c6\3\2\2\2\u03d2\u03d5\3\2\2"+ + "\2\u03d3\u03d1\3\2\2\2\u03d3\u03d4\3\2\2\2\u03d4\u03dd\3\2\2\2\u03d5\u03d3"+ + "\3\2\2\2\u03d6\u03d8\7\7\2\2\u03d7\u03d6\3\2\2\2\u03d8\u03db\3\2\2\2\u03d9"+ + "\u03d7\3\2\2\2\u03d9\u03da\3\2\2\2\u03da\u03dc\3\2\2\2\u03db\u03d9\3\2"+ + "\2\2\u03dc\u03de\7\n\2\2\u03dd\u03d9\3\2\2\2\u03dd\u03de\3\2\2\2\u03de"+ + "\u03e0\3\2\2\2\u03df\u03c2\3\2\2\2\u03df\u03e0\3\2\2\2\u03e0\u03e4\3\2"+ + "\2\2\u03e1\u03e3\7\7\2\2\u03e2\u03e1\3\2\2\2\u03e3\u03e6\3\2\2\2\u03e4"+ + "\u03e2\3\2\2\2\u03e4\u03e5\3\2\2\2\u03e5\u03e7\3\2\2\2\u03e6\u03e4\3\2"+ + "\2\2\u03e7\u03e8\7\f\2\2\u03e8=\3\2\2\2\u03e9\u03eb\5\u012e\u0098\2\u03ea"+ + "\u03e9\3\2\2\2\u03ea\u03eb\3\2\2\2\u03eb\u03ec\3\2\2\2\u03ec\u03fb\5V"+ + ",\2\u03ed\u03ef\7\7\2\2\u03ee\u03ed\3\2\2\2\u03ef\u03f2\3\2\2\2\u03f0"+ + "\u03ee\3\2\2\2\u03f0\u03f1\3\2\2\2\u03f1\u03f3\3\2\2\2\u03f2\u03f0\3\2"+ + "\2\2\u03f3\u03f7\7\36\2\2\u03f4\u03f6\7\7\2\2\u03f5\u03f4\3\2\2\2\u03f6"+ + "\u03f9\3\2\2\2\u03f7\u03f5\3\2\2\2\u03f7\u03f8\3\2\2\2\u03f8\u03fa\3\2"+ + "\2\2\u03f9\u03f7\3\2\2\2\u03fa\u03fc\5\u0098M\2\u03fb\u03f0\3\2\2\2\u03fb"+ + "\u03fc\3\2\2\2\u03fc?\3\2\2\2\u03fd\u03ff\5\u012c\u0097\2\u03fe\u03fd"+ + "\3\2\2\2\u03fe\u03ff\3\2\2\2\u03ff\u0400\3\2\2\2\u0400\u0408\7L\2\2\u0401"+ + "\u0403\7\7\2\2\u0402\u0401\3\2\2\2\u0403\u0406\3\2\2\2\u0404\u0402\3\2"+ + "\2\2\u0404\u0405\3\2\2\2\u0405\u0407\3\2\2\2\u0406\u0404\3\2\2\2\u0407"+ + "\u0409\5,\27\2\u0408\u0404\3\2\2\2\u0408\u0409\3\2\2\2\u0409\u0419\3\2"+ + "\2\2\u040a\u040c\7\7\2\2\u040b\u040a\3\2\2\2\u040c\u040f\3\2\2\2\u040d"+ + "\u040b\3\2\2\2\u040d\u040e\3\2\2\2\u040e\u0410\3\2\2\2\u040f\u040d\3\2"+ + "\2\2\u0410\u0414\5|?\2\u0411\u0413\7\7\2\2\u0412\u0411\3\2\2\2\u0413\u0416"+ + "\3\2\2\2\u0414\u0412\3\2\2\2\u0414\u0415\3\2\2\2\u0415\u0417\3\2\2\2\u0416"+ + "\u0414\3\2\2\2\u0417\u0418\7\t\2\2\u0418\u041a\3\2\2\2\u0419\u040d\3\2"+ + "\2\2\u0419\u041a\3\2\2\2\u041a\u041e\3\2\2\2\u041b\u041d\7\7\2\2\u041c"+ + "\u041b\3\2\2\2\u041d\u0420\3\2\2\2\u041e\u041c\3\2\2\2\u041e\u041f\3\2"+ + "\2\2\u041f\u0421\3\2\2\2\u0420\u041e\3\2\2\2\u0421\u0425\5\u0158\u00ad"+ + "\2\u0422\u0424\7\7\2\2\u0423\u0422\3\2\2\2\u0424\u0427\3\2\2\2\u0425\u0423"+ + "\3\2\2\2\u0425\u0426\3\2\2\2\u0426\u0428\3\2\2\2\u0427\u0425\3\2\2\2\u0428"+ + "\u0437\5<\37\2\u0429\u042b\7\7\2\2\u042a\u0429\3\2\2\2\u042b\u042e\3\2"+ + "\2\2\u042c\u042a\3\2\2\2\u042c\u042d\3\2\2\2\u042d\u042f\3\2\2\2\u042e"+ + "\u042c\3\2\2\2\u042f\u0433\7\34\2\2\u0430\u0432\7\7\2\2\u0431\u0430\3"+ + "\2\2\2\u0432\u0435\3\2\2\2\u0433\u0431\3\2\2\2\u0433\u0434\3\2\2\2\u0434"+ + "\u0436\3\2\2\2\u0435\u0433\3\2\2\2\u0436\u0438\5d\63\2\u0437\u042c\3\2"+ + "\2\2\u0437\u0438\3\2\2\2\u0438\u0440\3\2\2\2\u0439\u043b\7\7\2\2\u043a"+ + "\u0439\3\2\2\2\u043b\u043e\3\2\2\2\u043c\u043a\3\2\2\2\u043c\u043d\3\2"+ + "\2\2\u043d\u043f\3\2\2\2\u043e\u043c\3\2\2\2\u043f\u0441\5\60\31\2\u0440"+ + "\u043c\3\2\2\2\u0440\u0441\3\2\2\2\u0441\u0449\3\2\2\2\u0442\u0444\7\7"+ + "\2\2\u0443\u0442\3\2\2\2\u0444\u0447\3\2\2\2\u0445\u0443\3\2\2\2\u0445"+ + "\u0446\3\2\2\2\u0446\u0448\3\2\2\2\u0447\u0445\3\2\2\2\u0448\u044a\5B"+ + "\"\2\u0449\u0445\3\2\2\2\u0449\u044a\3\2\2\2\u044aA\3\2\2\2\u044b\u0455"+ + "\5\u0088E\2\u044c\u0450\7\36\2\2\u044d\u044f\7\7\2\2\u044e\u044d\3\2\2"+ + "\2\u044f\u0452\3\2\2\2\u0450\u044e\3\2\2\2\u0450\u0451\3\2\2\2\u0451\u0453"+ + "\3\2\2\2\u0452\u0450\3\2\2\2\u0453\u0455\5\u0098M\2\u0454\u044b\3\2\2"+ + "\2\u0454\u044c\3\2\2\2\u0455C\3\2\2\2\u0456\u0458\5\u014e\u00a8\2\u0457"+ + "\u0456\3\2\2\2\u0458\u045b\3\2\2\2\u0459\u0457\3\2\2\2\u0459\u045a\3\2"+ + "\2\2\u045a\u045f\3\2\2\2\u045b\u0459\3\2\2\2\u045c\u045e\7\7\2\2\u045d"+ + "\u045c\3\2\2\2\u045e\u0461\3\2\2\2\u045f\u045d\3\2\2\2\u045f\u0460\3\2"+ + "\2\2\u0460\u0462\3\2\2\2\u0461\u045f\3\2\2\2\u0462\u0471\5\u0158\u00ad"+ + "\2\u0463\u0465\7\7\2\2\u0464\u0463\3\2\2\2\u0465\u0468\3\2\2\2\u0466\u0464"+ + "\3\2\2\2\u0466\u0467\3\2\2\2\u0467\u0469\3\2\2\2\u0468\u0466\3\2\2\2\u0469"+ + "\u046d\7\34\2\2\u046a\u046c\7\7\2\2\u046b\u046a\3\2\2\2\u046c\u046f\3"+ + "\2\2\2\u046d\u046b\3\2\2\2\u046d\u046e\3\2\2\2\u046e\u0470\3\2\2\2\u046f"+ + "\u046d\3\2\2\2\u0470\u0472\5d\63\2\u0471\u0466\3\2\2\2\u0471\u0472\3\2"+ + "\2\2\u0472E\3\2\2\2\u0473\u0477\7\13\2\2\u0474\u0476\7\7\2\2\u0475\u0474"+ + "\3\2\2\2\u0476\u0479\3\2\2\2\u0477\u0475\3\2\2\2\u0477\u0478\3\2\2\2\u0478"+ + "\u047a\3\2\2\2\u0479\u0477\3\2\2\2\u047a\u048b\5D#\2\u047b\u047d\7\7\2"+ + "\2\u047c\u047b\3\2\2\2\u047d\u0480\3\2\2\2\u047e\u047c\3\2\2\2\u047e\u047f"+ + "\3\2\2\2\u047f\u0481\3\2\2\2\u0480\u047e\3\2\2\2\u0481\u0485\7\n\2\2\u0482"+ + "\u0484\7\7\2\2\u0483\u0482\3\2\2\2\u0484\u0487\3\2\2\2\u0485\u0483\3\2"+ + "\2\2\u0485\u0486\3\2\2\2\u0486\u0488\3\2\2\2\u0487\u0485\3\2\2\2\u0488"+ + "\u048a\5D#\2\u0489\u047e\3\2\2\2\u048a\u048d\3\2\2\2\u048b\u0489\3\2\2"+ + "\2\u048b\u048c\3\2\2\2\u048c\u0495\3\2\2\2\u048d\u048b\3\2\2\2\u048e\u0490"+ + "\7\7\2\2\u048f\u048e\3\2\2\2\u0490\u0493\3\2\2\2\u0491\u048f\3\2\2\2\u0491"+ + "\u0492\3\2\2\2\u0492\u0494\3\2\2\2\u0493\u0491\3\2\2\2\u0494\u0496\7\n"+ + "\2\2\u0495\u0491\3\2\2\2\u0495\u0496\3\2\2\2\u0496\u049a\3\2\2\2\u0497"+ + "\u0499\7\7\2\2\u0498\u0497\3\2\2\2\u0499\u049c\3\2\2\2\u049a\u0498\3\2"+ + "\2\2\u049a\u049b\3\2\2\2\u049b\u049d\3\2\2\2\u049c\u049a\3\2\2\2\u049d"+ + "\u049e\7\f\2\2\u049eG\3\2\2\2\u049f\u04a1\5\u012c\u0097\2\u04a0\u049f"+ + "\3\2\2\2\u04a0\u04a1\3\2\2\2\u04a1\u04a2\3\2\2\2\u04a2\u04aa\t\3\2\2\u04a3"+ + "\u04a5\7\7\2\2\u04a4\u04a3\3\2\2\2\u04a5\u04a8\3\2\2\2\u04a6\u04a4\3\2"+ + "\2\2\u04a6\u04a7\3\2\2\2\u04a7\u04a9\3\2\2\2\u04a8\u04a6\3\2\2\2\u04a9"+ + "\u04ab\5,\27\2\u04aa\u04a6\3\2\2\2\u04aa\u04ab\3\2\2\2\u04ab\u04bb\3\2"+ + "\2\2\u04ac\u04ae\7\7\2\2\u04ad\u04ac\3\2\2\2\u04ae\u04b1\3\2\2\2\u04af"+ + "\u04ad\3\2\2\2\u04af\u04b0\3\2\2\2\u04b0\u04b2\3\2\2\2\u04b1\u04af\3\2"+ + "\2\2\u04b2\u04b6\5|?\2\u04b3\u04b5\7\7\2\2\u04b4\u04b3\3\2\2\2\u04b5\u04b8"+ + "\3\2\2\2\u04b6\u04b4\3\2\2\2\u04b6\u04b7\3\2\2\2\u04b7\u04b9\3\2\2\2\u04b8"+ + "\u04b6\3\2\2\2\u04b9\u04ba\7\t\2\2\u04ba\u04bc\3\2\2\2\u04bb\u04af\3\2"+ + "\2\2\u04bb\u04bc\3\2\2\2\u04bc\u04c0\3\2\2\2\u04bd\u04bf\7\7\2\2\u04be"+ + "\u04bd\3\2\2\2\u04bf\u04c2\3\2\2\2\u04c0\u04be\3\2\2\2\u04c0\u04c1\3\2"+ + "\2\2\u04c1\u04c5\3\2\2\2\u04c2\u04c0\3\2\2\2\u04c3\u04c6\5F$\2\u04c4\u04c6"+ + "\5D#\2\u04c5\u04c3\3\2\2\2\u04c5\u04c4\3\2\2\2\u04c6\u04ce\3\2\2\2\u04c7"+ + "\u04c9\7\7\2\2\u04c8\u04c7\3\2\2\2\u04c9\u04cc\3\2\2\2\u04ca\u04c8\3\2"+ + "\2\2\u04ca\u04cb\3\2\2\2\u04cb\u04cd\3\2\2\2\u04cc\u04ca\3\2\2\2\u04cd"+ + "\u04cf\5\60\31\2\u04ce\u04ca\3\2\2\2\u04ce\u04cf\3\2\2\2\u04cf\u04e1\3"+ + "\2\2\2\u04d0\u04d2\7\7\2\2\u04d1\u04d0\3\2\2\2\u04d2\u04d5\3\2\2\2\u04d3"+ + "\u04d1\3\2\2\2\u04d3\u04d4\3\2\2\2\u04d4\u04df\3\2\2\2\u04d5\u04d3\3\2"+ + "\2\2\u04d6\u04da\7\36\2\2\u04d7\u04d9\7\7\2\2\u04d8\u04d7\3\2\2\2\u04d9"+ + "\u04dc\3\2\2\2\u04da\u04d8\3\2\2\2\u04da\u04db\3\2\2\2\u04db\u04dd\3\2"+ + "\2\2\u04dc\u04da\3\2\2\2\u04dd\u04e0\5\u0098M\2\u04de\u04e0\5J&\2\u04df"+ + "\u04d6\3\2\2\2\u04df\u04de\3\2\2\2\u04e0\u04e2\3\2\2\2\u04e1\u04d3\3\2"+ + "\2\2\u04e1\u04e2\3\2\2\2\u04e2\u04e9\3\2\2\2\u04e3\u04e5\7\7\2\2\u04e4"+ + "\u04e3\3\2\2\2\u04e5\u04e6\3\2\2\2\u04e6\u04e4\3\2\2\2\u04e6\u04e7\3\2"+ + "\2\2\u04e7\u04e8\3\2\2\2\u04e8\u04ea\7\35\2\2\u04e9\u04e4\3\2\2\2\u04e9"+ + "\u04ea\3\2\2\2\u04ea\u04ee\3\2\2\2\u04eb\u04ed\7\7\2\2\u04ec\u04eb\3\2"+ + "\2\2\u04ed\u04f0\3\2\2\2\u04ee\u04ec\3\2\2\2\u04ee\u04ef\3\2\2\2\u04ef"+ + "\u050f\3\2\2\2\u04f0\u04ee\3\2\2\2\u04f1\u04f3\5L\'\2\u04f2\u04f1\3\2"+ + "\2\2\u04f2\u04f3\3\2\2\2\u04f3\u04fe\3\2\2\2\u04f4\u04f6\7\7\2\2\u04f5"+ + "\u04f4\3\2\2\2\u04f6\u04f9\3\2\2\2\u04f7\u04f5\3\2\2\2\u04f7\u04f8\3\2"+ + "\2\2\u04f8\u04fb\3\2\2\2\u04f9\u04f7\3\2\2\2\u04fa\u04fc\5\u0094K\2\u04fb"+ + "\u04fa\3\2\2\2\u04fb\u04fc\3\2\2\2\u04fc\u04fd\3\2\2\2\u04fd\u04ff\5N"+ + "(\2\u04fe\u04f7\3\2\2\2\u04fe\u04ff\3\2\2\2\u04ff\u0510\3\2\2\2\u0500"+ + "\u0502\5N(\2\u0501\u0500\3\2\2\2\u0501\u0502\3\2\2\2\u0502\u050d\3\2\2"+ + "\2\u0503\u0505\7\7\2\2\u0504\u0503\3\2\2\2\u0505\u0508\3\2\2\2\u0506\u0504"+ + "\3\2\2\2\u0506\u0507\3\2\2\2\u0507\u050a\3\2\2\2\u0508\u0506\3\2\2\2\u0509"+ + "\u050b\5\u0094K\2\u050a\u0509\3\2\2\2\u050a\u050b\3\2\2\2\u050b\u050c"+ + "\3\2\2\2\u050c\u050e\5L\'\2\u050d\u0506\3\2\2\2\u050d\u050e\3\2\2\2\u050e"+ + "\u0510\3\2\2\2\u050f\u04f2\3\2\2\2\u050f\u0501\3\2\2\2\u0510I\3\2\2\2"+ + "\u0511\u0515\7R\2\2\u0512\u0514\7\7\2\2\u0513\u0512\3\2\2\2\u0514\u0517"+ + "\3\2\2\2\u0515\u0513\3\2\2\2\u0515\u0516\3\2\2\2\u0516\u0518\3\2\2\2\u0517"+ + "\u0515\3\2\2\2\u0518\u0519\5\u0098M\2\u0519K\3\2\2\2\u051a\u051c\5\u012c"+ + "\u0097\2\u051b\u051a\3\2\2\2\u051b\u051c\3\2\2\2\u051c\u051d\3\2\2\2\u051d"+ + "\u0543\7B\2\2\u051e\u0520\7\7\2\2\u051f\u051e\3\2\2\2\u0520\u0523\3\2"+ + "\2\2\u0521\u051f\3\2\2\2\u0521\u0522\3\2\2\2\u0522\u0524\3\2\2\2\u0523"+ + "\u0521\3\2\2\2\u0524\u0528\7\13\2\2\u0525\u0527\7\7\2\2\u0526\u0525\3"+ + "\2\2\2\u0527\u052a\3\2\2\2\u0528\u0526\3\2\2\2\u0528\u0529\3\2\2\2\u0529"+ + "\u052b\3\2\2\2\u052a\u0528\3\2\2\2\u052b\u053a\7\f\2\2\u052c\u052e\7\7"+ + "\2\2\u052d\u052c\3\2\2\2\u052e\u0531\3\2\2\2\u052f\u052d\3\2\2\2\u052f"+ + "\u0530\3\2\2\2\u0530\u0532\3\2\2\2\u0531\u052f\3\2\2\2\u0532\u0536\7\34"+ + "\2\2\u0533\u0535\7\7\2\2\u0534\u0533\3\2\2\2\u0535\u0538\3\2\2\2\u0536"+ + "\u0534\3\2\2\2\u0536\u0537\3\2\2\2\u0537\u0539\3\2\2\2\u0538\u0536\3\2"+ + "\2\2\u0539\u053b\5d\63\2\u053a\u052f\3\2\2\2\u053a\u053b\3\2\2\2\u053b"+ + "\u053f\3\2\2\2\u053c\u053e\7\7\2\2\u053d\u053c\3\2\2\2\u053e\u0541\3\2"+ + "\2\2\u053f\u053d\3\2\2\2\u053f\u0540\3\2\2\2\u0540\u0542\3\2\2\2\u0541"+ + "\u053f\3\2\2\2\u0542\u0544\5B\"\2\u0543\u0521\3\2\2\2\u0543\u0544\3\2"+ + "\2\2\u0544M\3\2\2\2\u0545\u0547\5\u012c\u0097\2\u0546\u0545\3\2\2\2\u0546"+ + "\u0547\3\2\2\2\u0547\u0548\3\2\2\2\u0548\u057f\7C\2\2\u0549\u054b\7\7"+ + "\2\2\u054a\u0549\3\2\2\2\u054b\u054e\3\2\2\2\u054c\u054a\3\2\2\2\u054c"+ + "\u054d\3\2\2\2\u054d\u054f\3\2\2\2\u054e\u054c\3\2\2\2\u054f\u0553\7\13"+ + "\2\2\u0550\u0552\7\7\2\2\u0551\u0550\3\2\2\2\u0552\u0555\3\2\2\2\u0553"+ + "\u0551\3\2\2\2\u0553\u0554\3\2\2\2\u0554\u0556\3\2\2\2\u0555\u0553\3\2"+ + "\2\2\u0556\u055e\5R*\2\u0557\u0559\7\7\2\2\u0558\u0557\3\2\2\2\u0559\u055c"+ + "\3\2\2\2\u055a\u0558\3\2\2\2\u055a\u055b\3\2\2\2\u055b\u055d\3\2\2\2\u055c"+ + "\u055a\3\2\2\2\u055d\u055f\7\n\2\2\u055e\u055a\3\2\2\2\u055e\u055f\3\2"+ + "\2\2\u055f\u0563\3\2\2\2\u0560\u0562\7\7\2\2\u0561\u0560\3\2\2\2\u0562"+ + "\u0565\3\2\2\2\u0563\u0561\3\2\2\2\u0563\u0564\3\2\2\2\u0564\u0566\3\2"+ + "\2\2\u0565\u0563\3\2\2\2\u0566\u0575\7\f\2\2\u0567\u0569\7\7\2\2\u0568"+ + "\u0567\3\2\2\2\u0569\u056c\3\2\2\2\u056a\u0568\3\2\2\2\u056a\u056b\3\2"+ + "\2\2\u056b\u056d\3\2\2\2\u056c\u056a\3\2\2\2\u056d\u0571\7\34\2\2\u056e"+ + "\u0570\7\7\2\2\u056f\u056e\3\2\2\2\u0570\u0573\3\2\2\2\u0571\u056f\3\2"+ + "\2\2\u0571\u0572\3\2\2\2\u0572\u0574\3\2\2\2\u0573\u0571\3\2\2\2\u0574"+ + "\u0576\5d\63\2\u0575\u056a\3\2\2\2\u0575\u0576\3\2\2\2\u0576\u057a\3\2"+ + "\2\2\u0577\u0579\7\7\2\2\u0578\u0577\3\2\2\2\u0579\u057c\3\2\2\2\u057a"+ + "\u0578\3\2\2\2\u057a\u057b\3\2\2\2\u057b\u057d\3\2\2\2\u057c\u057a\3\2"+ + "\2\2\u057d\u057e\5B\"\2\u057e\u0580\3\2\2\2\u057f\u054c\3\2\2\2\u057f"+ + "\u0580\3\2\2\2\u0580O\3\2\2\2\u0581\u0585\7\13\2\2\u0582\u0584\7\7\2\2"+ + "\u0583\u0582\3\2\2\2\u0584\u0587\3\2\2\2\u0585\u0583\3\2\2\2\u0585\u0586"+ + "\3\2\2\2\u0586\u05a5\3\2\2\2\u0587\u0585\3\2\2\2\u0588\u0599\5R*\2\u0589"+ + "\u058b\7\7\2\2\u058a\u0589\3\2\2\2\u058b\u058e\3\2\2\2\u058c\u058a\3\2"+ + "\2\2\u058c\u058d\3\2\2\2\u058d\u058f\3\2\2\2\u058e\u058c\3\2\2\2\u058f"+ + "\u0593\7\n\2\2\u0590\u0592\7\7\2\2\u0591\u0590\3\2\2\2\u0592\u0595\3\2"+ + "\2\2\u0593\u0591\3\2\2\2\u0593\u0594\3\2\2\2\u0594\u0596\3\2\2\2\u0595"+ + "\u0593\3\2\2\2\u0596\u0598\5R*\2\u0597\u058c\3\2\2\2\u0598\u059b\3\2\2"+ + "\2\u0599\u0597\3\2\2\2\u0599\u059a\3\2\2\2\u059a\u05a3\3\2\2\2\u059b\u0599"+ + "\3\2\2\2\u059c\u059e\7\7\2\2\u059d\u059c\3\2\2\2\u059e\u05a1\3\2\2\2\u059f"+ + "\u059d\3\2\2\2\u059f\u05a0\3\2\2\2\u05a0\u05a2\3\2\2\2\u05a1\u059f\3\2"+ + "\2\2\u05a2\u05a4\7\n\2\2\u05a3\u059f\3\2\2\2\u05a3\u05a4\3\2\2\2\u05a4"+ + "\u05a6\3\2\2\2\u05a5\u0588\3\2\2\2\u05a5\u05a6\3\2\2\2\u05a6\u05aa\3\2"+ + "\2\2\u05a7\u05a9\7\7\2\2\u05a8\u05a7\3\2\2\2\u05a9\u05ac\3\2\2\2\u05aa"+ + "\u05a8\3\2\2\2\u05aa\u05ab\3\2\2\2\u05ab\u05ad\3\2\2\2\u05ac\u05aa\3\2"+ + "\2\2\u05ad\u05ae\7\f\2\2\u05aeQ\3\2\2\2\u05af\u05b1\5\u012e\u0098\2\u05b0"+ + "\u05af\3\2\2\2\u05b0\u05b1\3\2\2\2\u05b1\u05b2\3\2\2\2\u05b2\u05c1\5T"+ + "+\2\u05b3\u05b5\7\7\2\2\u05b4\u05b3\3\2\2\2\u05b5\u05b8\3\2\2\2\u05b6"+ + "\u05b4\3\2\2\2\u05b6\u05b7\3\2\2\2\u05b7\u05b9\3\2\2\2\u05b8\u05b6\3\2"+ + "\2\2\u05b9\u05bd\7\36\2\2\u05ba\u05bc\7\7\2\2\u05bb\u05ba\3\2\2\2\u05bc"+ + "\u05bf\3\2\2\2\u05bd\u05bb\3\2\2\2\u05bd\u05be\3\2\2\2\u05be\u05c0\3\2"+ + "\2\2\u05bf\u05bd\3\2\2\2\u05c0\u05c2\5\u0098M\2\u05c1\u05b6\3\2\2\2\u05c1"+ + "\u05c2\3\2\2\2\u05c2S\3\2\2\2\u05c3\u05c7\5\u0158\u00ad\2\u05c4\u05c6"+ + "\7\7\2\2\u05c5\u05c4\3\2\2\2\u05c6\u05c9\3\2\2\2\u05c7\u05c5\3\2\2\2\u05c7"+ + "\u05c8\3\2\2\2\u05c8\u05d2\3\2\2\2\u05c9\u05c7\3\2\2\2\u05ca\u05ce\7\34"+ + "\2\2\u05cb\u05cd\7\7\2\2\u05cc\u05cb\3\2\2\2\u05cd\u05d0\3\2\2\2\u05ce"+ + "\u05cc\3\2\2\2\u05ce\u05cf\3\2\2\2\u05cf\u05d1\3\2\2\2\u05d0\u05ce\3\2"+ + "\2\2\u05d1\u05d3\5d\63\2\u05d2\u05ca\3\2\2\2\u05d2\u05d3\3\2\2\2\u05d3"+ + "U\3\2\2\2\u05d4\u05d8\5\u0158\u00ad\2\u05d5\u05d7\7\7\2\2\u05d6\u05d5"+ + "\3\2\2\2\u05d7\u05da\3\2\2\2\u05d8\u05d6\3\2\2\2\u05d8\u05d9\3\2\2\2\u05d9"+ + "\u05db\3\2\2\2\u05da\u05d8\3\2\2\2\u05db\u05df\7\34\2\2\u05dc\u05de\7"+ + "\7\2\2\u05dd\u05dc\3\2\2\2\u05de\u05e1\3\2\2\2\u05df\u05dd\3\2\2\2\u05df"+ + "\u05e0\3\2\2\2\u05e0\u05e2\3\2\2\2\u05e1\u05df\3\2\2\2\u05e2\u05e3\5d"+ + "\63\2\u05e3W\3\2\2\2\u05e4\u05e6\5\u012c\u0097\2\u05e5\u05e4\3\2\2\2\u05e5"+ + "\u05e6\3\2\2\2\u05e6\u05e7\3\2\2\2\u05e7\u05eb\7M\2\2\u05e8\u05ea\7\7"+ + "\2\2\u05e9\u05e8\3\2\2\2\u05ea\u05ed\3\2\2\2\u05eb\u05e9\3\2\2\2\u05eb"+ + "\u05ec\3\2\2\2\u05ec\u05ee\3\2\2\2\u05ed\u05eb\3\2\2\2\u05ee\u05fd\5\u0158"+ + "\u00ad\2\u05ef\u05f1\7\7\2\2\u05f0\u05ef\3\2\2\2\u05f1\u05f4\3\2\2\2\u05f2"+ + "\u05f0\3\2\2\2\u05f2\u05f3\3\2\2\2\u05f3\u05f5\3\2\2\2\u05f4\u05f2\3\2"+ + "\2\2\u05f5\u05f9\7\34\2\2\u05f6\u05f8\7\7\2\2\u05f7\u05f6\3\2\2\2\u05f8"+ + "\u05fb\3\2\2\2\u05f9\u05f7\3\2\2\2\u05f9\u05fa\3\2\2\2\u05fa\u05fc\3\2"+ + "\2\2\u05fb\u05f9\3\2\2\2\u05fc\u05fe\5\"\22\2\u05fd\u05f2\3\2\2\2\u05fd"+ + "\u05fe\3\2\2\2\u05fe\u0606\3\2\2\2\u05ff\u0601\7\7\2\2\u0600\u05ff\3\2"+ + "\2\2\u0601\u0604\3\2\2\2\u0602\u0600\3\2\2\2\u0602\u0603\3\2\2\2\u0603"+ + "\u0605\3\2\2\2\u0604\u0602\3\2\2\2\u0605\u0607\5\34\17\2\u0606\u0602\3"+ + "\2\2\2\u0606\u0607\3\2\2\2\u0607Y\3\2\2\2\u0608\u060a\5\u012c\u0097\2"+ + "\u0609\u0608\3\2\2\2\u0609\u060a\3\2\2\2\u060a\u060b\3\2\2\2\u060b\u060f"+ + "\7Q\2\2\u060c\u060e\7\7\2\2\u060d\u060c\3\2\2\2\u060e\u0611\3\2\2\2\u060f"+ + "\u060d\3\2\2\2\u060f\u0610\3\2\2\2\u0610\u0612\3\2\2\2\u0611\u060f\3\2"+ + "\2\2\u0612\u0621\5<\37\2\u0613\u0615\7\7\2\2\u0614\u0613\3\2\2\2\u0615"+ + "\u0618\3\2\2\2\u0616\u0614\3\2\2\2\u0616\u0617\3\2\2\2\u0617\u0619\3\2"+ + "\2\2\u0618\u0616\3\2\2\2\u0619\u061d\7\34\2\2\u061a\u061c\7\7\2\2\u061b"+ + "\u061a\3\2\2\2\u061c\u061f\3\2\2\2\u061d\u061b\3\2\2\2\u061d\u061e\3\2"+ + "\2\2\u061e\u0620\3\2\2\2\u061f\u061d\3\2\2\2\u0620\u0622\5\\/\2\u0621"+ + "\u0616\3\2\2\2\u0621\u0622\3\2\2\2\u0622\u0626\3\2\2\2\u0623\u0625\7\7"+ + "\2\2\u0624\u0623\3\2\2\2\u0625\u0628\3\2\2\2\u0626\u0624\3\2\2\2\u0626"+ + "\u0627\3\2\2\2\u0627\u062a\3\2\2\2\u0628\u0626\3\2\2\2\u0629\u062b\5\u0088"+ + "E\2\u062a\u0629\3\2\2\2\u062a\u062b\3\2\2\2\u062b[\3\2\2\2\u062c\u0630"+ + "\t\4\2\2\u062d\u062f\7\7\2\2\u062e\u062d\3\2\2\2\u062f\u0632\3\2\2\2\u0630"+ + "\u062e\3\2\2\2\u0630\u0631\3\2\2\2\u0631\u0633\3\2\2\2\u0632\u0630\3\2"+ + "\2\2\u0633\u0634\5\u00d0i\2\u0634]\3\2\2\2\u0635\u0639\7\17\2\2\u0636"+ + "\u0638\7\7\2\2\u0637\u0636\3\2\2\2\u0638\u063b\3\2\2\2\u0639\u0637\3\2"+ + "\2\2\u0639\u063a\3\2\2\2\u063a\u063d\3\2\2\2\u063b\u0639\3\2\2\2\u063c"+ + "\u063e\5`\61\2\u063d\u063c\3\2\2\2\u063d\u063e\3\2\2\2\u063e\u064d\3\2"+ + "\2\2\u063f\u0641\7\7\2\2\u0640\u063f\3\2\2\2\u0641\u0644\3\2\2\2\u0642"+ + "\u0640\3\2\2\2\u0642\u0643\3\2\2\2\u0643\u0645\3\2\2\2\u0644\u0642\3\2"+ + "\2\2\u0645\u0649\7\35\2\2\u0646\u0648\7\7\2\2\u0647\u0646\3\2\2\2\u0648"+ + "\u064b\3\2\2\2\u0649\u0647\3\2\2\2\u0649\u064a\3\2\2\2\u064a\u064c\3\2"+ + "\2\2\u064b\u0649\3\2\2\2\u064c\u064e\5\64\33\2\u064d\u0642\3\2\2\2\u064d"+ + "\u064e\3\2\2\2\u064e\u0652\3\2\2\2\u064f\u0651\7\7\2\2\u0650\u064f\3\2"+ + "\2\2\u0651\u0654\3\2\2\2\u0652\u0650\3\2\2\2\u0652\u0653\3\2\2\2\u0653"+ + "\u0655\3\2\2\2\u0654\u0652\3\2\2\2\u0655\u0656\7\20\2\2\u0656_\3\2\2\2"+ + "\u0657\u0668\5b\62\2\u0658\u065a\7\7\2\2\u0659\u0658\3\2\2\2\u065a\u065d"+ + "\3\2\2\2\u065b\u0659\3\2\2\2\u065b\u065c\3\2\2\2\u065c\u065e\3\2\2\2\u065d"+ + "\u065b\3\2\2\2\u065e\u0662\7\n\2\2\u065f\u0661\7\7\2\2\u0660\u065f\3\2"+ + "\2\2\u0661\u0664\3\2\2\2\u0662\u0660\3\2\2\2\u0662\u0663\3\2\2\2\u0663"+ + "\u0665\3\2\2\2\u0664\u0662\3\2\2\2\u0665\u0667\5b\62\2\u0666\u065b\3\2"+ + "\2\2\u0667\u066a\3\2\2\2\u0668\u0666\3\2\2\2\u0668\u0669\3\2\2\2\u0669"+ + "\u066e\3\2\2\2\u066a\u0668\3\2\2\2\u066b\u066d\7\7\2\2\u066c\u066b\3\2"+ + "\2\2\u066d\u0670\3\2\2\2\u066e\u066c\3\2\2\2\u066e\u066f\3\2\2\2\u066f"+ + "\u0672\3\2\2\2\u0670\u066e\3\2\2\2\u0671\u0673\7\n\2\2\u0672\u0671\3\2"+ + "\2\2\u0672\u0673\3\2\2\2\u0673a\3\2\2\2\u0674\u0678\5\u012c\u0097\2\u0675"+ + "\u0677\7\7\2\2\u0676\u0675\3\2\2\2\u0677\u067a\3\2\2\2\u0678\u0676\3\2"+ + "\2\2\u0678\u0679\3\2\2\2\u0679\u067c\3\2\2\2\u067a\u0678\3\2\2\2\u067b"+ + "\u0674\3\2\2\2\u067b\u067c\3\2\2\2\u067c\u067d\3\2\2\2\u067d\u0685\5\u0158"+ + "\u00ad\2\u067e\u0680\7\7\2\2\u067f\u067e\3\2\2\2\u0680\u0683\3\2\2\2\u0681"+ + "\u067f\3\2\2\2\u0681\u0682\3\2\2\2\u0682\u0684\3\2\2\2\u0683\u0681\3\2"+ + "\2\2\u0684\u0686\5\u00d0i\2\u0685\u0681\3\2\2\2\u0685\u0686\3\2\2\2\u0686"+ + "\u068e\3\2\2\2\u0687\u0689\7\7\2\2\u0688\u0687\3\2\2\2\u0689\u068c\3\2"+ + "\2\2\u068a\u0688\3\2\2\2\u068a\u068b\3\2\2\2\u068b\u068d\3\2\2\2\u068c"+ + "\u068a\3\2\2\2\u068d\u068f\5\34\17\2\u068e\u068a\3\2\2\2\u068e\u068f\3"+ + "\2\2\2\u068fc\3\2\2\2\u0690\u0692\5\u0132\u009a\2\u0691\u0690\3\2\2\2"+ + "\u0691\u0692\3\2\2\2\u0692\u0697\3\2\2\2\u0693\u0698\5z>\2\u0694\u0698"+ + "\5h\65\2\u0695\u0698\5f\64\2\u0696\u0698\5v<\2\u0697\u0693\3\2\2\2\u0697"+ + "\u0694\3\2\2\2\u0697\u0695\3\2\2\2\u0697\u0696\3\2\2\2\u0698e\3\2\2\2"+ + "\u0699\u069c\5l\67\2\u069a\u069c\7l\2\2\u069b\u0699\3\2\2\2\u069b\u069a"+ + "\3\2\2\2\u069cg\3\2\2\2\u069d\u06a0\5f\64\2\u069e\u06a0\5z>\2\u069f\u069d"+ + "\3\2\2\2\u069f\u069e\3\2\2\2\u06a0\u06a4\3\2\2\2\u06a1\u06a3\7\7\2\2\u06a2"+ + "\u06a1\3\2\2\2\u06a3\u06a6\3\2\2\2\u06a4\u06a2\3\2\2\2\u06a4\u06a5\3\2"+ + "\2\2\u06a5\u06a8\3\2\2\2\u06a6\u06a4\3\2\2\2\u06a7\u06a9\5j\66\2\u06a8"+ + "\u06a7\3\2\2\2\u06a9\u06aa\3\2\2\2\u06aa\u06a8\3\2\2\2\u06aa\u06ab\3\2"+ + "\2\2\u06abi\3\2\2\2\u06ac\u06ad\t\5\2\2\u06adk\3\2\2\2\u06ae\u06bf\5n"+ + "8\2\u06af\u06b1\7\7\2\2\u06b0\u06af\3\2\2\2\u06b1\u06b4\3\2\2\2\u06b2"+ + "\u06b0\3\2\2\2\u06b2\u06b3\3\2\2\2\u06b3\u06b5\3\2\2\2\u06b4\u06b2\3\2"+ + "\2\2\u06b5\u06b9\7\t\2\2\u06b6\u06b8\7\7\2\2\u06b7\u06b6\3\2\2\2\u06b8"+ + "\u06bb\3\2\2\2\u06b9\u06b7\3\2\2\2\u06b9\u06ba\3\2\2\2\u06ba\u06bc\3\2"+ + "\2\2\u06bb\u06b9\3\2\2\2\u06bc\u06be\5n8\2\u06bd\u06b2\3\2\2\2\u06be\u06c1"+ + "\3\2\2\2\u06bf\u06bd\3\2\2\2\u06bf\u06c0\3\2\2\2\u06c0m\3\2\2\2\u06c1"+ + "\u06bf\3\2\2\2\u06c2\u06ca\5\u0158\u00ad\2\u06c3\u06c5\7\7\2\2\u06c4\u06c3"+ + "\3\2\2\2\u06c5\u06c8\3\2\2\2\u06c6\u06c4\3\2\2\2\u06c6\u06c7\3\2\2\2\u06c7"+ + "\u06c9\3\2\2\2\u06c8\u06c6\3\2\2\2\u06c9\u06cb\5\u00ceh\2\u06ca\u06c6"+ + "\3\2\2\2\u06ca\u06cb\3\2\2\2\u06cbo\3\2\2\2\u06cc\u06ce\5r:\2\u06cd\u06cc"+ + "\3\2\2\2\u06cd\u06ce\3\2\2\2\u06ce\u06cf\3\2\2\2\u06cf\u06d2\5d\63\2\u06d0"+ + "\u06d2\7\21\2\2\u06d1\u06cd\3\2\2\2\u06d1\u06d0\3\2\2\2\u06d2q\3\2\2\2"+ + "\u06d3\u06d5\5t;\2\u06d4\u06d3\3\2\2\2\u06d5\u06d6\3\2\2\2\u06d6\u06d4"+ + "\3\2\2\2\u06d6\u06d7\3\2\2\2\u06d7s\3\2\2\2\u06d8\u06dc\5\u013c\u009f"+ + "\2\u06d9\u06db\7\7\2\2\u06da\u06d9\3\2\2\2\u06db\u06de\3\2\2\2\u06dc\u06da"+ + "\3\2\2\2\u06dc\u06dd\3\2\2\2\u06dd\u06e1\3\2\2\2\u06de\u06dc\3\2\2\2\u06df"+ + "\u06e1\5\u014e\u00a8\2\u06e0\u06d8\3\2\2\2\u06e0\u06df\3\2\2\2\u06e1u"+ + "\3\2\2\2\u06e2\u06e6\5|?\2\u06e3\u06e5\7\7\2\2\u06e4\u06e3\3\2\2\2\u06e5"+ + "\u06e8\3\2\2\2\u06e6\u06e4\3\2\2\2\u06e6\u06e7\3\2\2\2\u06e7\u06e9\3\2"+ + "\2\2\u06e8\u06e6\3\2\2\2\u06e9\u06ed\7\t\2\2\u06ea\u06ec\7\7\2\2\u06eb"+ + "\u06ea\3\2\2\2\u06ec\u06ef\3\2\2\2\u06ed\u06eb\3\2\2\2\u06ed\u06ee\3\2"+ + "\2\2\u06ee\u06f1\3\2\2\2\u06ef\u06ed\3\2\2\2\u06f0\u06e2\3\2\2\2\u06f0"+ + "\u06f1\3\2\2\2\u06f1\u06f2\3\2\2\2\u06f2\u06f6\5x=\2\u06f3\u06f5\7\7\2"+ + "\2\u06f4\u06f3\3\2\2\2\u06f5\u06f8\3\2\2\2\u06f6\u06f4\3\2\2\2\u06f6\u06f7"+ + "\3\2\2\2\u06f7\u06f9\3\2\2\2\u06f8\u06f6\3\2\2\2\u06f9\u06fd\7$\2\2\u06fa"+ + "\u06fc\7\7\2\2\u06fb\u06fa\3\2\2\2\u06fc\u06ff\3\2\2\2\u06fd\u06fb\3\2"+ + "\2\2\u06fd\u06fe\3\2\2\2\u06fe\u0700\3\2\2\2\u06ff\u06fd\3\2\2\2\u0700"+ + "\u0701\5d\63\2\u0701w\3\2\2\2\u0702\u0706\7\13\2\2\u0703\u0705\7\7\2\2"+ + "\u0704\u0703\3\2\2\2\u0705\u0708\3\2\2\2\u0706\u0704\3\2\2\2\u0706\u0707"+ + "\3\2\2\2\u0707\u070b\3\2\2\2\u0708\u0706\3\2\2\2\u0709\u070c\5V,\2\u070a"+ + "\u070c\5d\63\2\u070b\u0709\3\2\2\2\u070b\u070a\3\2\2\2\u070b\u070c\3\2"+ + "\2\2\u070c\u0720\3\2\2\2\u070d\u070f\7\7\2\2\u070e\u070d\3\2\2\2\u070f"+ + "\u0712\3\2\2\2\u0710\u070e\3\2\2\2\u0710\u0711\3\2\2\2\u0711\u0713\3\2"+ + "\2\2\u0712\u0710\3\2\2\2\u0713\u0717\7\n\2\2\u0714\u0716\7\7\2\2\u0715"+ + "\u0714\3\2\2\2\u0716\u0719\3\2\2\2\u0717\u0715\3\2\2\2\u0717\u0718\3\2"+ + "\2\2\u0718\u071c\3\2\2\2\u0719\u0717\3\2\2\2\u071a\u071d\5V,\2\u071b\u071d"+ + "\5d\63\2\u071c\u071a\3\2\2\2\u071c\u071b\3\2\2\2\u071d\u071f\3\2\2\2\u071e"+ + "\u0710\3\2\2\2\u071f\u0722\3\2\2\2\u0720\u071e\3\2\2\2\u0720\u0721\3\2"+ + "\2\2\u0721\u072a\3\2\2\2\u0722\u0720\3\2\2\2\u0723\u0725\7\7\2\2\u0724"+ + "\u0723\3\2\2\2\u0725\u0728\3\2\2\2\u0726\u0724\3\2\2\2\u0726\u0727\3\2"+ + "\2\2\u0727\u0729\3\2\2\2\u0728\u0726\3\2\2\2\u0729\u072b\7\n\2\2\u072a"+ + "\u0726\3\2\2\2\u072a\u072b\3\2\2\2\u072b\u072f\3\2\2\2\u072c\u072e\7\7"+ + "\2\2\u072d\u072c\3\2\2\2\u072e\u0731\3\2\2\2\u072f\u072d\3\2\2\2\u072f"+ + "\u0730\3\2\2\2\u0730\u0732\3\2\2\2\u0731\u072f\3\2\2\2\u0732\u0733\7\f"+ + "\2\2\u0733y\3\2\2\2\u0734\u0738\7\13\2\2\u0735\u0737\7\7\2\2\u0736\u0735"+ + "\3\2\2\2\u0737\u073a\3\2\2\2\u0738\u0736\3\2\2\2\u0738\u0739\3\2\2\2\u0739"+ + "\u073b\3\2\2\2\u073a\u0738\3\2\2\2\u073b\u073f\5d\63\2\u073c\u073e\7\7"+ + "\2\2\u073d\u073c\3\2\2\2\u073e\u0741\3\2\2\2\u073f\u073d\3\2\2\2\u073f"+ + "\u0740\3\2\2\2\u0740\u0742\3\2\2\2\u0741\u073f\3\2\2\2\u0742\u0743\7\f"+ + "\2\2\u0743{\3\2\2\2\u0744\u0746\5\u0132\u009a\2\u0745\u0744\3\2\2\2\u0745"+ + "\u0746\3\2\2\2\u0746\u074a\3\2\2\2\u0747\u074b\5z>\2\u0748\u074b\5h\65"+ + "\2\u0749\u074b\5f\64\2\u074a\u0747\3\2\2\2\u074a\u0748\3\2\2\2\u074a\u0749"+ + "\3\2\2\2\u074b}\3\2\2\2\u074c\u0750\7\13\2\2\u074d\u074f\7\7\2\2\u074e"+ + "\u074d\3\2\2\2\u074f\u0752\3\2\2\2\u0750\u074e\3\2\2\2\u0750\u0751\3\2"+ + "\2\2\u0751\u0755\3\2\2\2\u0752\u0750\3\2\2\2\u0753\u0756\5l\67\2\u0754"+ + "\u0756\5~@\2\u0755\u0753\3\2\2\2\u0755\u0754\3\2\2\2\u0756\u075a\3\2\2"+ + "\2\u0757\u0759\7\7\2\2\u0758\u0757\3\2\2\2\u0759\u075c\3\2\2\2\u075a\u0758"+ + "\3\2\2\2\u075a\u075b\3\2\2\2\u075b\u075d\3\2\2\2\u075c\u075a\3\2\2\2\u075d"+ + "\u075e\7\f\2\2\u075e\177\3\2\2\2\u075f\u0765\5\u0082B\2\u0760\u0761\5"+ + "\u0096L\2\u0761\u0762\5\u0082B\2\u0762\u0764\3\2\2\2\u0763\u0760\3\2\2"+ + "\2\u0764\u0767\3\2\2\2\u0765\u0763\3\2\2\2\u0765\u0766\3\2\2\2\u0766\u0769"+ + "\3\2\2\2\u0767\u0765\3\2\2\2\u0768\u075f\3\2\2\2\u0768\u0769\3\2\2\2\u0769"+ + "\u076b\3\2\2\2\u076a\u076c\5\u0096L\2\u076b\u076a\3\2\2\2\u076b\u076c"+ + "\3\2\2\2\u076c\u0081\3\2\2\2\u076d\u0770\5\u0084C\2\u076e\u0770\5\u014e"+ + "\u00a8\2\u076f\u076d\3\2\2\2\u076f\u076e\3\2\2\2\u0770\u0773\3\2\2\2\u0771"+ + "\u076f\3\2\2\2\u0771\u0772\3\2\2\2\u0772\u0778\3\2\2\2\u0773\u0771\3\2"+ + "\2\2\u0774\u0779\5\26\f\2\u0775\u0779\5\u0092J\2\u0776\u0779\5\u008aF"+ + "\2\u0777\u0779\5\u0098M\2\u0778\u0774\3\2\2\2\u0778\u0775\3\2\2\2\u0778"+ + "\u0776\3\2\2\2\u0778\u0777\3\2\2\2\u0779\u0083\3\2\2\2\u077a\u077b\5\u0158"+ + "\u00ad\2\u077b\u077f\t\6\2\2\u077c\u077e\7\7\2\2\u077d\u077c\3\2\2\2\u077e"+ + "\u0781\3\2\2\2\u077f\u077d\3\2\2\2\u077f\u0780\3\2\2\2\u0780\u0085\3\2"+ + "\2\2\u0781\u077f\3\2\2\2\u0782\u0785\5\u0088E\2\u0783\u0785\5\u0082B\2"+ + "\u0784\u0782\3\2\2\2\u0784\u0783\3\2\2\2\u0785\u0087\3\2\2\2\u0786\u078a"+ + "\7\17\2\2\u0787\u0789\7\7\2\2\u0788\u0787\3\2\2\2\u0789\u078c\3\2\2\2"+ + "\u078a\u0788\3\2\2\2\u078a\u078b\3\2\2\2\u078b\u078d\3\2\2\2\u078c\u078a"+ + "\3\2\2\2\u078d\u0791\5\u0080A\2\u078e\u0790\7\7\2\2\u078f\u078e\3\2\2"+ + "\2\u0790\u0793\3\2\2\2\u0791\u078f\3\2\2\2\u0791\u0792\3\2\2\2\u0792\u0794"+ + "\3\2\2\2\u0793\u0791\3\2\2\2\u0794\u0795\7\20\2\2\u0795\u0089\3\2\2\2"+ + "\u0796\u079a\5\u008cG\2\u0797\u079a\5\u008eH\2\u0798\u079a\5\u0090I\2"+ + "\u0799\u0796\3\2\2\2\u0799\u0797\3\2\2\2\u0799\u0798\3\2\2\2\u079a\u008b"+ + "\3\2\2\2\u079b\u079f\7_\2\2\u079c\u079e\7\7\2\2\u079d\u079c\3\2\2\2\u079e"+ + "\u07a1\3\2\2\2\u079f\u079d\3\2\2\2\u079f\u07a0\3\2\2\2\u07a0\u07a2\3\2"+ + "\2\2\u07a1\u079f\3\2\2\2\u07a2\u07a6\7\13\2\2\u07a3\u07a5\5\u014e\u00a8"+ + "\2\u07a4\u07a3\3\2\2\2\u07a5\u07a8\3\2\2\2\u07a6\u07a4\3\2\2\2\u07a6\u07a7"+ + "\3\2\2\2\u07a7\u07ab\3\2\2\2\u07a8\u07a6\3\2\2\2\u07a9\u07ac\5D#\2\u07aa"+ + "\u07ac\5F$\2\u07ab\u07a9\3\2\2\2\u07ab\u07aa\3\2\2\2\u07ac\u07ad\3\2\2"+ + "\2\u07ad\u07ae\7h\2\2\u07ae\u07af\5\u0098M\2\u07af\u07b3\7\f\2\2\u07b0"+ + "\u07b2\7\7\2\2\u07b1\u07b0\3\2\2\2\u07b2\u07b5\3\2\2\2\u07b3\u07b1\3\2"+ + "\2\2\u07b3\u07b4\3\2\2\2\u07b4\u07b7\3\2\2\2\u07b5\u07b3\3\2\2\2\u07b6"+ + "\u07b8\5\u0086D\2\u07b7\u07b6\3\2\2\2\u07b7\u07b8\3\2\2\2\u07b8\u008d"+ + "\3\2\2\2\u07b9\u07bd\7a\2\2\u07ba\u07bc\7\7\2\2\u07bb\u07ba\3\2\2\2\u07bc"+ + "\u07bf\3\2\2\2\u07bd\u07bb\3\2\2\2\u07bd\u07be\3\2\2\2\u07be\u07c0\3\2"+ + "\2\2\u07bf\u07bd\3\2\2\2\u07c0\u07c1\7\13\2\2\u07c1\u07c2\5\u0098M\2\u07c2"+ + "\u07c6\7\f\2\2\u07c3\u07c5\7\7\2\2\u07c4\u07c3\3\2\2\2\u07c5\u07c8\3\2"+ + "\2\2\u07c6\u07c4\3\2\2\2\u07c6\u07c7\3\2\2\2\u07c7\u07cb\3\2\2\2\u07c8"+ + "\u07c6\3\2\2\2\u07c9\u07cc\5\u0086D\2\u07ca\u07cc\7\35\2\2\u07cb\u07c9"+ + "\3\2\2\2\u07cb\u07ca\3\2\2\2\u07cc\u008f\3\2\2\2\u07cd\u07d1\7`\2\2\u07ce"+ + "\u07d0\7\7\2\2\u07cf\u07ce\3\2\2\2\u07d0\u07d3\3\2\2\2\u07d1\u07cf\3\2"+ + "\2\2\u07d1\u07d2\3\2\2\2\u07d2\u07d5\3\2\2\2\u07d3\u07d1\3\2\2\2\u07d4"+ + "\u07d6\5\u0086D\2\u07d5\u07d4\3\2\2\2\u07d5\u07d6\3\2\2\2\u07d6\u07da"+ + "\3\2\2\2\u07d7\u07d9\7\7\2\2\u07d8\u07d7\3\2\2\2\u07d9\u07dc\3\2\2\2\u07da"+ + "\u07d8\3\2\2\2\u07da\u07db\3\2\2\2\u07db\u07dd\3\2\2\2\u07dc\u07da\3\2"+ + "\2\2\u07dd\u07e1\7a\2\2\u07de\u07e0\7\7\2\2\u07df\u07de\3\2\2\2\u07e0"+ + "\u07e3\3\2\2\2\u07e1\u07df\3\2\2\2\u07e1\u07e2\3\2\2\2\u07e2\u07e4\3\2"+ + "\2\2\u07e3\u07e1\3\2\2\2\u07e4\u07e5\7\13\2\2\u07e5\u07e6\5\u0098M\2\u07e6"+ + "\u07e7\7\f\2\2\u07e7\u0091\3\2\2\2\u07e8\u07e9\5\u00bc_\2\u07e9\u07ea"+ + "\7\36\2\2\u07ea\u07ef\3\2\2\2\u07eb\u07ec\5\u00c0a\2\u07ec\u07ed\5\u0112"+ + "\u008a\2\u07ed\u07ef\3\2\2\2\u07ee\u07e8\3\2\2\2\u07ee\u07eb\3\2\2\2\u07ef"+ + "\u07f3\3\2\2\2\u07f0\u07f2\7\7\2\2\u07f1\u07f0\3\2\2\2\u07f2\u07f5\3\2"+ + "\2\2\u07f3\u07f1\3\2\2\2\u07f3\u07f4\3\2\2\2\u07f4\u07f6\3\2\2\2\u07f5"+ + "\u07f3\3\2\2\2\u07f6\u07f7\5\u0098M\2\u07f7\u0093\3\2\2\2\u07f8\u07fc"+ + "\t\7\2\2\u07f9\u07fb\7\7\2\2\u07fa\u07f9\3\2\2\2\u07fb\u07fe\3\2\2\2\u07fc"+ + "\u07fa\3\2\2\2\u07fc\u07fd\3\2\2\2\u07fd\u0801\3\2\2\2\u07fe\u07fc\3\2"+ + "\2\2\u07ff\u0801\7\2\2\3\u0800\u07f8\3\2\2\2\u0800\u07ff\3\2\2\2\u0801"+ + "\u0095\3\2\2\2\u0802\u0804\t\7\2\2\u0803\u0802\3\2\2\2\u0804\u0805\3\2"+ + "\2\2\u0805\u0803\3\2\2\2\u0805\u0806\3\2\2\2\u0806\u0809\3\2\2\2\u0807"+ + "\u0809\7\2\2\3\u0808\u0803\3\2\2\2\u0808\u0807\3\2\2\2\u0809\u0097\3\2"+ + "\2\2\u080a\u080b\5\u009aN\2\u080b\u0099\3\2\2\2\u080c\u081d\5\u009cO\2"+ + "\u080d\u080f\7\7\2\2\u080e\u080d\3\2\2\2\u080f\u0812\3\2\2\2\u0810\u080e"+ + "\3\2\2\2\u0810\u0811\3\2\2\2\u0811\u0813\3\2\2\2\u0812\u0810\3\2\2\2\u0813"+ + "\u0817\7\31\2\2\u0814\u0816\7\7\2\2\u0815\u0814\3\2\2\2\u0816\u0819\3"+ + "\2\2\2\u0817\u0815\3\2\2\2\u0817\u0818\3\2\2\2\u0818\u081a\3\2\2\2\u0819"+ + "\u0817\3\2\2\2\u081a\u081c\5\u009cO\2\u081b\u0810\3\2\2\2\u081c\u081f"+ + "\3\2\2\2\u081d\u081b\3\2\2\2\u081d\u081e\3\2\2\2\u081e\u009b\3\2\2\2\u081f"+ + "\u081d\3\2\2\2\u0820\u0831\5\u009eP\2\u0821\u0823\7\7\2\2\u0822\u0821"+ + "\3\2\2\2\u0823\u0826\3\2\2\2\u0824\u0822\3\2\2\2\u0824\u0825\3\2\2\2\u0825"+ + "\u0827\3\2\2\2\u0826\u0824\3\2\2\2\u0827\u082b\7\30\2\2\u0828\u082a\7"+ + "\7\2\2\u0829\u0828\3\2\2\2\u082a\u082d\3\2\2\2\u082b\u0829\3\2\2\2\u082b"+ + "\u082c\3\2\2\2\u082c\u082e\3\2\2\2\u082d\u082b\3\2\2\2\u082e\u0830\5\u009e"+ + "P\2\u082f\u0824\3\2\2\2\u0830\u0833\3\2\2\2\u0831\u082f\3\2\2\2\u0831"+ + "\u0832\3\2\2\2\u0832\u009d\3\2\2\2\u0833\u0831\3\2\2\2\u0834\u0840\5\u00a0"+ + "Q\2\u0835\u0839\5\u0114\u008b\2\u0836\u0838\7\7\2\2\u0837\u0836\3\2\2"+ + "\2\u0838\u083b\3\2\2\2\u0839\u0837\3\2\2\2\u0839\u083a\3\2\2\2\u083a\u083c"+ + "\3\2\2\2\u083b\u0839\3\2\2\2\u083c\u083d\5\u00a0Q\2\u083d\u083f\3\2\2"+ + "\2\u083e\u0835\3\2\2\2\u083f\u0842\3\2\2\2\u0840\u083e\3\2\2\2\u0840\u0841"+ + "\3\2\2\2\u0841\u009f\3\2\2\2\u0842\u0840\3\2\2\2\u0843\u084f\5\u00a2R"+ + "\2\u0844\u0848\5\u0116\u008c\2\u0845\u0847\7\7\2\2\u0846\u0845\3\2\2\2"+ + "\u0847\u084a\3\2\2\2\u0848\u0846\3\2\2\2\u0848\u0849\3\2\2\2\u0849\u084b"+ + "\3\2\2\2\u084a\u0848\3\2\2\2\u084b\u084c\5\u00a2R\2\u084c\u084e\3\2\2"+ + "\2\u084d\u0844\3\2\2\2\u084e\u0851\3\2\2\2\u084f\u084d\3\2\2\2\u084f\u0850"+ + "\3\2\2\2\u0850\u00a1\3\2\2\2\u0851"; + private static final String _serializedATNSegment1 = + "\u084f\3\2\2\2\u0852\u0856\5\u00a4S\2\u0853\u0855\5\u00caf\2\u0854\u0853"+ + "\3\2\2\2\u0855\u0858\3\2\2\2\u0856\u0854\3\2\2\2\u0856\u0857\3\2\2\2\u0857"+ + "\u00a3\3\2\2\2\u0858\u0856\3\2\2\2\u0859\u086e\5\u00a6T\2\u085a\u085e"+ + "\5\u0118\u008d\2\u085b\u085d\7\7\2\2\u085c\u085b\3\2\2\2\u085d\u0860\3"+ + "\2\2\2\u085e\u085c\3\2\2\2\u085e\u085f\3\2\2\2\u085f\u0861\3\2\2\2\u0860"+ + "\u085e\3\2\2\2\u0861\u0862\5\u00a6T\2\u0862\u086d\3\2\2\2\u0863\u0867"+ + "\5\u011a\u008e\2\u0864\u0866\7\7\2\2\u0865\u0864\3\2\2\2\u0866\u0869\3"+ + "\2\2\2\u0867\u0865\3\2\2\2\u0867\u0868\3\2\2\2\u0868\u086a\3\2\2\2\u0869"+ + "\u0867\3\2\2\2\u086a\u086b\5d\63\2\u086b\u086d\3\2\2\2\u086c\u085a\3\2"+ + "\2\2\u086c\u0863\3\2\2\2\u086d\u0870\3\2\2\2\u086e\u086c\3\2\2\2\u086e"+ + "\u086f\3\2\2\2\u086f\u00a5\3\2\2\2\u0870\u086e\3\2\2\2\u0871\u0883\5\u00aa"+ + "V\2\u0872\u0874\7\7\2\2\u0873\u0872\3\2\2\2\u0874\u0877\3\2\2\2\u0875"+ + "\u0873\3\2\2\2\u0875\u0876\3\2\2\2\u0876\u0878\3\2\2\2\u0877\u0875\3\2"+ + "\2\2\u0878\u087c\5\u00a8U\2\u0879\u087b\7\7\2\2\u087a\u0879\3\2\2\2\u087b"+ + "\u087e\3\2\2\2\u087c\u087a\3\2\2\2\u087c\u087d\3\2\2\2\u087d\u087f\3\2"+ + "\2\2\u087e\u087c\3\2\2\2\u087f\u0880\5\u00aaV\2\u0880\u0882\3\2\2\2\u0881"+ + "\u0875\3\2\2\2\u0882\u0885\3\2\2\2\u0883\u0881\3\2\2\2\u0883\u0884\3\2"+ + "\2\2\u0884\u00a7\3\2\2\2\u0885\u0883\3\2\2\2\u0886\u0887\7/\2\2\u0887"+ + "\u0888\7\34\2\2\u0888\u00a9\3\2\2\2\u0889\u0895\5\u00acW\2\u088a\u088e"+ + "\5\u0158\u00ad\2\u088b\u088d\7\7\2\2\u088c\u088b\3\2\2\2\u088d\u0890\3"+ + "\2\2\2\u088e\u088c\3\2\2\2\u088e\u088f\3\2\2\2\u088f\u0891\3\2\2\2\u0890"+ + "\u088e\3\2\2\2\u0891\u0892\5\u00acW\2\u0892\u0894\3\2\2\2\u0893\u088a"+ + "\3\2\2\2\u0894\u0897\3\2\2\2\u0895\u0893\3\2\2\2\u0895\u0896\3\2\2\2\u0896"+ + "\u00ab\3\2\2\2\u0897\u0895\3\2\2\2\u0898\u08a3\5\u00aeX\2\u0899\u089d"+ + "\7&\2\2\u089a\u089c\7\7\2\2\u089b\u089a\3\2\2\2\u089c\u089f\3\2\2\2\u089d"+ + "\u089b\3\2\2\2\u089d\u089e\3\2\2\2\u089e\u08a0\3\2\2\2\u089f\u089d\3\2"+ + "\2\2\u08a0\u08a2\5\u00aeX\2\u08a1\u0899\3\2\2\2\u08a2\u08a5\3\2\2\2\u08a3"+ + "\u08a1\3\2\2\2\u08a3\u08a4\3\2\2\2\u08a4\u00ad\3\2\2\2\u08a5\u08a3\3\2"+ + "\2\2\u08a6\u08b2\5\u00b0Y\2\u08a7\u08ab\5\u011c\u008f\2\u08a8\u08aa\7"+ + "\7\2\2\u08a9\u08a8\3\2\2\2\u08aa\u08ad\3\2\2\2\u08ab\u08a9\3\2\2\2\u08ab"+ + "\u08ac\3\2\2\2\u08ac\u08ae\3\2\2\2\u08ad\u08ab\3\2\2\2\u08ae\u08af\5\u00b0"+ + "Y\2\u08af\u08b1\3\2\2\2\u08b0\u08a7\3\2\2\2\u08b1\u08b4\3\2\2\2\u08b2"+ + "\u08b0\3\2\2\2\u08b2\u08b3\3\2\2\2\u08b3\u00af\3\2\2\2\u08b4\u08b2\3\2"+ + "\2\2\u08b5\u08c1\5\u00b2Z\2\u08b6\u08ba\5\u011e\u0090\2\u08b7\u08b9\7"+ + "\7\2\2\u08b8\u08b7\3\2\2\2\u08b9\u08bc\3\2\2\2\u08ba\u08b8\3\2\2\2\u08ba"+ + "\u08bb\3\2\2\2\u08bb\u08bd\3\2\2\2\u08bc\u08ba\3\2\2\2\u08bd\u08be\5\u00b2"+ + "Z\2\u08be\u08c0\3\2\2\2\u08bf\u08b6\3\2\2\2\u08c0\u08c3\3\2\2\2\u08c1"+ + "\u08bf\3\2\2\2\u08c1\u08c2\3\2\2\2\u08c2\u00b1\3\2\2\2\u08c3\u08c1\3\2"+ + "\2\2\u08c4\u08d6\5\u00b4[\2\u08c5\u08c7\7\7\2\2\u08c6\u08c5\3\2\2\2\u08c7"+ + "\u08ca\3\2\2\2\u08c8\u08c6\3\2\2\2\u08c8\u08c9\3\2\2\2\u08c9\u08cb\3\2"+ + "\2\2\u08ca\u08c8\3\2\2\2\u08cb\u08cf\5\u0120\u0091\2\u08cc\u08ce\7\7\2"+ + "\2\u08cd\u08cc\3\2\2\2\u08ce\u08d1\3\2\2\2\u08cf\u08cd\3\2\2\2\u08cf\u08d0"+ + "\3\2\2\2\u08d0\u08d2\3\2\2\2\u08d1\u08cf\3\2\2\2\u08d2\u08d3\5d\63\2\u08d3"+ + "\u08d5\3\2\2\2\u08d4\u08c8\3\2\2\2\u08d5\u08d8\3\2\2\2\u08d6\u08d4\3\2"+ + "\2\2\u08d6\u08d7\3\2\2\2\u08d7\u00b3\3\2\2\2\u08d8\u08d6\3\2\2\2\u08d9"+ + "\u08db\5\u00b6\\\2\u08da\u08d9\3\2\2\2\u08db\u08de\3\2\2\2\u08dc\u08da"+ + "\3\2\2\2\u08dc\u08dd\3\2\2\2\u08dd\u08df\3\2\2\2\u08de\u08dc\3\2\2\2\u08df"+ + "\u08e0\5\u00b8]\2\u08e0\u00b5\3\2\2\2\u08e1\u08eb\5\u014e\u00a8\2\u08e2"+ + "\u08eb\5\u0084C\2\u08e3\u08e7\5\u0122\u0092\2\u08e4\u08e6\7\7\2\2\u08e5"+ + "\u08e4\3\2\2\2\u08e6\u08e9\3\2\2\2\u08e7\u08e5\3\2\2\2\u08e7\u08e8\3\2"+ + "\2\2\u08e8\u08eb\3\2\2\2\u08e9\u08e7\3\2\2\2\u08ea\u08e1\3\2\2\2\u08ea"+ + "\u08e2\3\2\2\2\u08ea\u08e3\3\2\2\2\u08eb\u00b7\3\2\2\2\u08ec\u08f0\5\u00d4"+ + "k\2\u08ed\u08ef\5\u00ba^\2\u08ee\u08ed\3\2\2\2\u08ef\u08f2\3\2\2\2\u08f0"+ + "\u08ee\3\2\2\2\u08f0\u08f1\3\2\2\2\u08f1\u00b9\3\2\2\2\u08f2\u08f0\3\2"+ + "\2\2\u08f3\u08f9\5\u0124\u0093\2\u08f4\u08f9\5\u00ceh\2\u08f5\u08f9\5"+ + "\u00caf\2\u08f6\u08f9\5\u00c6d\2\u08f7\u08f9\5\u00c8e\2\u08f8\u08f3\3"+ + "\2\2\2\u08f8\u08f4\3\2\2\2\u08f8\u08f5\3\2\2\2\u08f8\u08f6\3\2\2\2\u08f8"+ + "\u08f7\3\2\2\2\u08f9\u00bb\3\2\2\2\u08fa\u08fb\5\u00b8]\2\u08fb\u08fc"+ + "\5\u00c4c\2\u08fc\u0900\3\2\2\2\u08fd\u0900\5\u0158\u00ad\2\u08fe\u0900"+ + "\5\u00be`\2\u08ff\u08fa\3\2\2\2\u08ff\u08fd\3\2\2\2\u08ff\u08fe\3\2\2"+ + "\2\u0900\u00bd\3\2\2\2\u0901\u0905\7\13\2\2\u0902\u0904\7\7\2\2\u0903"+ + "\u0902\3\2\2\2\u0904\u0907\3\2\2\2\u0905\u0903\3\2\2\2\u0905\u0906\3\2"+ + "\2\2\u0906\u0908\3\2\2\2\u0907\u0905\3\2\2\2\u0908\u090c\5\u00bc_\2\u0909"+ + "\u090b\7\7\2\2\u090a\u0909\3\2\2\2\u090b\u090e\3\2\2\2\u090c\u090a\3\2"+ + "\2\2\u090c\u090d\3\2\2\2\u090d\u090f\3\2\2\2\u090e\u090c\3\2\2\2\u090f"+ + "\u0910\7\f\2\2\u0910\u00bf\3\2\2\2\u0911\u0914\5\u00b4[\2\u0912\u0914"+ + "\5\u00c2b\2\u0913\u0911\3\2\2\2\u0913\u0912\3\2\2\2\u0914\u00c1\3\2\2"+ + "\2\u0915\u0919\7\13\2\2\u0916\u0918\7\7\2\2\u0917\u0916\3\2\2\2\u0918"+ + "\u091b\3\2\2\2\u0919\u0917\3\2\2\2\u0919\u091a\3\2\2\2\u091a\u091c\3\2"+ + "\2\2\u091b\u0919\3\2\2\2\u091c\u0920\5\u00c0a\2\u091d\u091f\7\7\2\2\u091e"+ + "\u091d\3\2\2\2\u091f\u0922\3\2\2\2\u0920\u091e\3\2\2\2\u0920\u0921\3\2"+ + "\2\2\u0921\u0923\3\2\2\2\u0922\u0920\3\2\2\2\u0923\u0924\7\f\2\2\u0924"+ + "\u00c3\3\2\2\2\u0925\u0929\5\u00ceh\2\u0926\u0929\5\u00c6d\2\u0927\u0929"+ + "\5\u00c8e\2\u0928\u0925\3\2\2\2\u0928\u0926\3\2\2\2\u0928\u0927\3\2\2"+ + "\2\u0929\u00c5\3\2\2\2\u092a\u092e\7\r\2\2\u092b\u092d\7\7\2\2\u092c\u092b"+ + "\3\2\2\2\u092d\u0930\3\2\2\2\u092e\u092c\3\2\2\2\u092e\u092f\3\2\2\2\u092f"+ + "\u0931\3\2\2\2\u0930\u092e\3\2\2\2\u0931\u0942\5\u0098M\2\u0932\u0934"+ + "\7\7\2\2\u0933\u0932\3\2\2\2\u0934\u0937\3\2\2\2\u0935\u0933\3\2\2\2\u0935"+ + "\u0936\3\2\2\2\u0936\u0938\3\2\2\2\u0937\u0935\3\2\2\2\u0938\u093c\7\n"+ + "\2\2\u0939\u093b\7\7\2\2\u093a\u0939\3\2\2\2\u093b\u093e\3\2\2\2\u093c"+ + "\u093a\3\2\2\2\u093c\u093d\3\2\2\2\u093d\u093f\3\2\2\2\u093e\u093c\3\2"+ + "\2\2\u093f\u0941\5\u0098M\2\u0940\u0935\3\2\2\2\u0941\u0944\3\2\2\2\u0942"+ + "\u0940\3\2\2\2\u0942\u0943\3\2\2\2\u0943\u094c\3\2\2\2\u0944\u0942\3\2"+ + "\2\2\u0945\u0947\7\7\2\2\u0946\u0945\3\2\2\2\u0947\u094a\3\2\2\2\u0948"+ + "\u0946\3\2\2\2\u0948\u0949\3\2\2\2\u0949\u094b\3\2\2\2\u094a\u0948\3\2"+ + "\2\2\u094b\u094d\7\n\2\2\u094c\u0948\3\2\2\2\u094c\u094d\3\2\2\2\u094d"+ + "\u0951\3\2\2\2\u094e\u0950\7\7\2\2\u094f\u094e\3\2\2\2\u0950\u0953\3\2"+ + "\2\2\u0951\u094f\3\2\2\2\u0951\u0952\3\2\2\2\u0952\u0954\3\2\2\2\u0953"+ + "\u0951\3\2\2\2\u0954\u0955\7\16\2\2\u0955\u00c7\3\2\2\2\u0956\u095a\5"+ + "\u0128\u0095\2\u0957\u0959\7\7\2\2\u0958\u0957\3\2\2\2\u0959\u095c\3\2"+ + "\2\2\u095a\u0958\3\2\2\2\u095a\u095b\3\2\2\2\u095b\u0960\3\2\2\2\u095c"+ + "\u095a\3\2\2\2\u095d\u0961\5\u0158\u00ad\2\u095e\u0961\5\u00d6l\2\u095f"+ + "\u0961\7J\2\2\u0960\u095d\3\2\2\2\u0960\u095e\3\2\2\2\u0960\u095f\3\2"+ + "\2\2\u0961\u00c9\3\2\2\2\u0962\u0964\5\u00ceh\2\u0963\u0962\3\2\2\2\u0963"+ + "\u0964\3\2\2\2\u0964\u096a\3\2\2\2\u0965\u0967\5\u00d0i\2\u0966\u0965"+ + "\3\2\2\2\u0966\u0967\3\2\2\2\u0967\u0968\3\2\2\2\u0968\u096b\5\u00ccg"+ + "\2\u0969\u096b\5\u00d0i\2\u096a\u0966\3\2\2\2\u096a\u0969\3\2\2\2\u096b"+ + "\u00cb\3\2\2\2\u096c\u096e\5\u014e\u00a8\2\u096d\u096c\3\2\2\2\u096e\u0971"+ + "\3\2\2\2\u096f\u096d\3\2\2\2\u096f\u0970\3\2\2\2\u0970\u0973\3\2\2\2\u0971"+ + "\u096f\3\2\2\2\u0972\u0974\5\u0084C\2\u0973\u0972\3\2\2\2\u0973\u0974"+ + "\3\2\2\2\u0974\u0978\3\2\2\2\u0975\u0977\7\7\2\2\u0976\u0975\3\2\2\2\u0977"+ + "\u097a\3\2\2\2\u0978\u0976\3\2\2\2\u0978\u0979\3\2\2\2\u0979\u097b\3\2"+ + "\2\2\u097a\u0978\3\2\2\2\u097b\u097c\5\u00eav\2\u097c\u00cd\3\2\2\2\u097d"+ + "\u0981\7\60\2\2\u097e\u0980\7\7\2\2\u097f\u097e\3\2\2\2\u0980\u0983\3"+ + "\2\2\2\u0981\u097f\3\2\2\2\u0981\u0982\3\2\2\2\u0982\u0984\3\2\2\2\u0983"+ + "\u0981\3\2\2\2\u0984\u0995\5p9\2\u0985\u0987\7\7\2\2\u0986\u0985\3\2\2"+ + "\2\u0987\u098a\3\2\2\2\u0988\u0986\3\2\2\2\u0988\u0989\3\2\2\2\u0989\u098b"+ + "\3\2\2\2\u098a\u0988\3\2\2\2\u098b\u098f\7\n\2\2\u098c\u098e\7\7\2\2\u098d"+ + "\u098c\3\2\2\2\u098e\u0991\3\2\2\2\u098f\u098d\3\2\2\2\u098f\u0990\3\2"+ + "\2\2\u0990\u0992\3\2\2\2\u0991\u098f\3\2\2\2\u0992\u0994\5p9\2\u0993\u0988"+ + "\3\2\2\2\u0994\u0997\3\2\2\2\u0995\u0993\3\2\2\2\u0995\u0996\3\2\2\2\u0996"+ + "\u099f\3\2\2\2\u0997\u0995\3\2\2\2\u0998\u099a\7\7\2\2\u0999\u0998\3\2"+ + "\2\2\u099a\u099d\3\2\2\2\u099b\u0999\3\2\2\2\u099b\u099c\3\2\2\2\u099c"+ + "\u099e\3\2\2\2\u099d\u099b\3\2\2\2\u099e\u09a0\7\n\2\2\u099f\u099b\3\2"+ + "\2\2\u099f\u09a0\3\2\2\2\u09a0\u09a4\3\2\2\2\u09a1\u09a3\7\7\2\2\u09a2"+ + "\u09a1\3\2\2\2\u09a3\u09a6\3\2\2\2\u09a4\u09a2\3\2\2\2\u09a4\u09a5\3\2"+ + "\2\2\u09a5\u09a7\3\2\2\2\u09a6\u09a4\3\2\2\2\u09a7\u09a8\7\61\2\2\u09a8"+ + "\u00cf\3\2\2\2\u09a9\u09ad\7\13\2\2\u09aa\u09ac\7\7\2\2\u09ab\u09aa\3"+ + "\2\2\2\u09ac\u09af\3\2\2\2\u09ad\u09ab\3\2\2\2\u09ad\u09ae\3\2\2\2\u09ae"+ + "\u09d3\3\2\2\2\u09af\u09ad\3\2\2\2\u09b0\u09c1\5\u00d2j\2\u09b1\u09b3"+ + "\7\7\2\2\u09b2\u09b1\3\2\2\2\u09b3\u09b6\3\2\2\2\u09b4\u09b2\3\2\2\2\u09b4"+ + "\u09b5\3\2\2\2\u09b5\u09b7\3\2\2\2\u09b6\u09b4\3\2\2\2\u09b7\u09bb\7\n"+ + "\2\2\u09b8\u09ba\7\7\2\2\u09b9\u09b8\3\2\2\2\u09ba\u09bd\3\2\2\2\u09bb"+ + "\u09b9\3\2\2\2\u09bb\u09bc\3\2\2\2\u09bc\u09be\3\2\2\2\u09bd\u09bb\3\2"+ + "\2\2\u09be\u09c0\5\u00d2j\2\u09bf\u09b4\3\2\2\2\u09c0\u09c3\3\2\2\2\u09c1"+ + "\u09bf\3\2\2\2\u09c1\u09c2\3\2\2\2\u09c2\u09cb\3\2\2\2\u09c3\u09c1\3\2"+ + "\2\2\u09c4\u09c6\7\7\2\2\u09c5\u09c4\3\2\2\2\u09c6\u09c9\3\2\2\2\u09c7"+ + "\u09c5\3\2\2\2\u09c7\u09c8\3\2\2\2\u09c8\u09ca\3\2\2\2\u09c9\u09c7\3\2"+ + "\2\2\u09ca\u09cc\7\n\2\2\u09cb\u09c7\3\2\2\2\u09cb\u09cc\3\2\2\2\u09cc"+ + "\u09d0\3\2\2\2\u09cd\u09cf\7\7\2\2\u09ce\u09cd\3\2\2\2\u09cf\u09d2\3\2"+ + "\2\2\u09d0\u09ce\3\2\2\2\u09d0\u09d1\3\2\2\2\u09d1\u09d4\3\2\2\2\u09d2"+ + "\u09d0\3\2\2\2\u09d3\u09b0\3\2\2\2\u09d3\u09d4\3\2\2\2\u09d4\u09d5\3\2"+ + "\2\2\u09d5\u09d6\7\f\2\2\u09d6\u00d1\3\2\2\2\u09d7\u09d9\5\u014e\u00a8"+ + "\2\u09d8\u09d7\3\2\2\2\u09d8\u09d9\3\2\2\2\u09d9\u09dd\3\2\2\2\u09da\u09dc"+ + "\7\7\2\2\u09db\u09da\3\2\2\2\u09dc\u09df\3\2\2\2\u09dd\u09db\3\2\2\2\u09dd"+ + "\u09de\3\2\2\2\u09de\u09ee\3\2\2\2\u09df\u09dd\3\2\2\2\u09e0\u09e4\5\u0158"+ + "\u00ad\2\u09e1\u09e3\7\7\2\2\u09e2\u09e1\3\2\2\2\u09e3\u09e6\3\2\2\2\u09e4"+ + "\u09e2\3\2\2\2\u09e4\u09e5\3\2\2\2\u09e5\u09e7\3\2\2\2\u09e6\u09e4\3\2"+ + "\2\2\u09e7\u09eb\7\36\2\2\u09e8\u09ea\7\7\2\2\u09e9\u09e8\3\2\2\2\u09ea"+ + "\u09ed\3\2\2\2\u09eb\u09e9\3\2\2\2\u09eb\u09ec\3\2\2\2\u09ec\u09ef\3\2"+ + "\2\2\u09ed\u09eb\3\2\2\2\u09ee\u09e0\3\2\2\2\u09ee\u09ef\3\2\2\2\u09ef"+ + "\u09f1\3\2\2\2\u09f0\u09f2\7\21\2\2\u09f1\u09f0\3\2\2\2\u09f1\u09f2\3"+ + "\2\2\2\u09f2\u09f6\3\2\2\2\u09f3\u09f5\7\7\2\2\u09f4\u09f3\3\2\2\2\u09f5"+ + "\u09f8\3\2\2\2\u09f6\u09f4\3\2\2\2\u09f6\u09f7\3\2\2\2\u09f7\u09f9\3\2"+ + "\2\2\u09f8\u09f6\3\2\2\2\u09f9\u09fa\5\u0098M\2\u09fa\u00d3\3\2\2\2\u09fb"+ + "\u0a0a\5\u00d6l\2\u09fc\u0a0a\5\u0158\u00ad\2\u09fd\u0a0a\5\u00dan\2\u09fe"+ + "\u0a0a\5\u00dco\2\u09ff\u0a0a\5\u0110\u0089\2\u0a00\u0a0a\5\u00f2z\2\u0a01"+ + "\u0a0a\5\u00f4{\2\u0a02\u0a0a\5\u00d8m\2\u0a03\u0a0a\5\u00f6|\2\u0a04"+ + "\u0a0a\5\u00f8}\2\u0a05\u0a0a\5\u00fa~\2\u0a06\u0a0a\5\u00fe\u0080\2\u0a07"+ + "\u0a0a\5\u0108\u0085\2\u0a08\u0a0a\5\u010e\u0088\2\u0a09\u09fb\3\2\2\2"+ + "\u0a09\u09fc\3\2\2\2\u0a09\u09fd\3\2\2\2\u0a09\u09fe\3\2\2\2\u0a09\u09ff"+ + "\3\2\2\2\u0a09\u0a00\3\2\2\2\u0a09\u0a01\3\2\2\2\u0a09\u0a02\3\2\2\2\u0a09"+ + "\u0a03\3\2\2\2\u0a09\u0a04\3\2\2\2\u0a09\u0a05\3\2\2\2\u0a09\u0a06\3\2"+ + "\2\2\u0a09\u0a07\3\2\2\2\u0a09\u0a08\3\2\2\2\u0a0a\u00d5\3\2\2\2\u0a0b"+ + "\u0a0f\7\13\2\2\u0a0c\u0a0e\7\7\2\2\u0a0d\u0a0c\3\2\2\2\u0a0e\u0a11\3"+ + "\2\2\2\u0a0f\u0a0d\3\2\2\2\u0a0f\u0a10\3\2\2\2\u0a10\u0a12\3\2\2\2\u0a11"+ + "\u0a0f\3\2\2\2\u0a12\u0a16\5\u0098M\2\u0a13\u0a15\7\7\2\2\u0a14\u0a13"+ + "\3\2\2\2\u0a15\u0a18\3\2\2\2\u0a16\u0a14\3\2\2\2\u0a16\u0a17\3\2\2\2\u0a17"+ + "\u0a19\3\2\2\2\u0a18\u0a16\3\2\2\2\u0a19\u0a1a\7\f\2\2\u0a1a\u00d7\3\2"+ + "\2\2\u0a1b\u0a1f\7\r\2\2\u0a1c\u0a1e\7\7\2\2\u0a1d\u0a1c\3\2\2\2\u0a1e"+ + "\u0a21\3\2\2\2\u0a1f\u0a1d\3\2\2\2\u0a1f\u0a20\3\2\2\2\u0a20\u0a45\3\2"+ + "\2\2\u0a21\u0a1f\3\2\2\2\u0a22\u0a33\5\u0098M\2\u0a23\u0a25\7\7\2\2\u0a24"+ + "\u0a23\3\2\2\2\u0a25\u0a28\3\2\2\2\u0a26\u0a24\3\2\2\2\u0a26\u0a27\3\2"+ + "\2\2\u0a27\u0a29\3\2\2\2\u0a28\u0a26\3\2\2\2\u0a29\u0a2d\7\n\2\2\u0a2a"+ + "\u0a2c\7\7\2\2\u0a2b\u0a2a\3\2\2\2\u0a2c\u0a2f\3\2\2\2\u0a2d\u0a2b\3\2"+ + "\2\2\u0a2d\u0a2e\3\2\2\2\u0a2e\u0a30\3\2\2\2\u0a2f\u0a2d\3\2\2\2\u0a30"+ + "\u0a32\5\u0098M\2\u0a31\u0a26\3\2\2\2\u0a32\u0a35\3\2\2\2\u0a33\u0a31"+ + "\3\2\2\2\u0a33\u0a34\3\2\2\2\u0a34\u0a3d\3\2\2\2\u0a35\u0a33\3\2\2\2\u0a36"+ + "\u0a38\7\7\2\2\u0a37\u0a36\3\2\2\2\u0a38\u0a3b\3\2\2\2\u0a39\u0a37\3\2"+ + "\2\2\u0a39\u0a3a\3\2\2\2\u0a3a\u0a3c\3\2\2\2\u0a3b\u0a39\3\2\2\2\u0a3c"+ + "\u0a3e\7\n\2\2\u0a3d\u0a39\3\2\2\2\u0a3d\u0a3e\3\2\2\2\u0a3e\u0a42\3\2"+ + "\2\2\u0a3f\u0a41\7\7\2\2\u0a40\u0a3f\3\2\2\2\u0a41\u0a44\3\2\2\2\u0a42"+ + "\u0a40\3\2\2\2\u0a42\u0a43\3\2\2\2\u0a43\u0a46\3\2\2\2\u0a44\u0a42\3\2"+ + "\2\2\u0a45\u0a22\3\2\2\2\u0a45\u0a46\3\2\2\2\u0a46\u0a47\3\2\2\2\u0a47"+ + "\u0a48\7\16\2\2\u0a48\u00d9\3\2\2\2\u0a49\u0a4a\t\b\2\2\u0a4a\u00db\3"+ + "\2\2\2\u0a4b\u0a4e\5\u00dep\2\u0a4c\u0a4e\5\u00e0q\2\u0a4d\u0a4b\3\2\2"+ + "\2\u0a4d\u0a4c\3\2\2\2\u0a4e\u00dd\3\2\2\2\u0a4f\u0a54\7\u0097\2\2\u0a50"+ + "\u0a53\5\u00e2r\2\u0a51\u0a53\5\u00e4s\2\u0a52\u0a50\3\2\2\2\u0a52\u0a51"+ + "\3\2\2\2\u0a53\u0a56\3\2\2\2\u0a54\u0a52\3\2\2\2\u0a54\u0a55\3\2\2\2\u0a55"+ + "\u0a57\3\2\2\2\u0a56\u0a54\3\2\2\2\u0a57\u0a58\7\u00a0\2\2\u0a58\u00df"+ + "\3\2\2\2\u0a59\u0a5f\7\u0098\2\2\u0a5a\u0a5e\5\u00e6t\2\u0a5b\u0a5e\5"+ + "\u00e8u\2\u0a5c\u0a5e\7\u00a6\2\2\u0a5d\u0a5a\3\2\2\2\u0a5d\u0a5b\3\2"+ + "\2\2\u0a5d\u0a5c\3\2\2\2\u0a5e\u0a61\3\2\2\2\u0a5f\u0a5d\3\2\2\2\u0a5f"+ + "\u0a60\3\2\2\2\u0a60\u0a62\3\2\2\2\u0a61\u0a5f\3\2\2\2\u0a62\u0a63\7\u00a5"+ + "\2\2\u0a63\u00e1\3\2\2\2\u0a64\u0a65\t\t\2\2\u0a65\u00e3\3\2\2\2\u0a66"+ + "\u0a6a\7\u00a4\2\2\u0a67\u0a69\7\7\2\2\u0a68\u0a67\3\2\2\2\u0a69\u0a6c"+ + "\3\2\2\2\u0a6a\u0a68\3\2\2\2\u0a6a\u0a6b\3\2\2\2\u0a6b\u0a6d\3\2\2\2\u0a6c"+ + "\u0a6a\3\2\2\2\u0a6d\u0a71\5\u0098M\2\u0a6e\u0a70\7\7\2\2\u0a6f\u0a6e"+ + "\3\2\2\2\u0a70\u0a73\3\2\2\2\u0a71\u0a6f\3\2\2\2\u0a71\u0a72\3\2\2\2\u0a72"+ + "\u0a74\3\2\2\2\u0a73\u0a71\3\2\2\2\u0a74\u0a75\7\20\2\2\u0a75\u00e5\3"+ + "\2\2\2\u0a76\u0a77\t\n\2\2\u0a77\u00e7\3\2\2\2\u0a78\u0a7c\7\u00a9\2\2"+ + "\u0a79\u0a7b\7\7\2\2\u0a7a\u0a79\3\2\2\2\u0a7b\u0a7e\3\2\2\2\u0a7c\u0a7a"+ + "\3\2\2\2\u0a7c\u0a7d\3\2\2\2\u0a7d\u0a7f\3\2\2\2\u0a7e\u0a7c\3\2\2\2\u0a7f"+ + "\u0a83\5\u0098M\2\u0a80\u0a82\7\7\2\2\u0a81\u0a80\3\2\2\2\u0a82\u0a85"+ + "\3\2\2\2\u0a83\u0a81\3\2\2\2\u0a83\u0a84\3\2\2\2\u0a84\u0a86\3\2\2\2\u0a85"+ + "\u0a83\3\2\2\2\u0a86\u0a87\7\20\2\2\u0a87\u00e9\3\2\2\2\u0a88\u0a8c\7"+ + "\17\2\2\u0a89\u0a8b\7\7\2\2\u0a8a\u0a89\3\2\2\2\u0a8b\u0a8e\3\2\2\2\u0a8c"+ + "\u0a8a\3\2\2\2\u0a8c\u0a8d\3\2\2\2\u0a8d\u0a9f\3\2\2\2\u0a8e\u0a8c\3\2"+ + "\2\2\u0a8f\u0a91\5\u00ecw\2\u0a90\u0a8f\3\2\2\2\u0a90\u0a91\3\2\2\2\u0a91"+ + "\u0a95\3\2\2\2\u0a92\u0a94\7\7\2\2\u0a93\u0a92\3\2\2\2\u0a94\u0a97\3\2"+ + "\2\2\u0a95\u0a93\3\2\2\2\u0a95\u0a96\3\2\2\2\u0a96\u0a98\3\2\2\2\u0a97"+ + "\u0a95\3\2\2\2\u0a98\u0a9c\7$\2\2\u0a99\u0a9b\7\7\2\2\u0a9a\u0a99\3\2"+ + "\2\2\u0a9b\u0a9e\3\2\2\2\u0a9c\u0a9a\3\2\2\2\u0a9c\u0a9d\3\2\2\2\u0a9d"+ + "\u0aa0\3\2\2\2\u0a9e\u0a9c\3\2\2\2\u0a9f\u0a90\3\2\2\2\u0a9f\u0aa0\3\2"+ + "\2\2\u0aa0\u0aa1\3\2\2\2\u0aa1\u0aa5\5\u0080A\2\u0aa2\u0aa4\7\7\2\2\u0aa3"+ + "\u0aa2\3\2\2\2\u0aa4\u0aa7\3\2\2\2\u0aa5\u0aa3\3\2\2\2\u0aa5\u0aa6\3\2"+ + "\2\2\u0aa6\u0aa8\3\2\2\2\u0aa7\u0aa5\3\2\2\2\u0aa8\u0aa9\7\20\2\2\u0aa9"+ + "\u00eb\3\2\2\2\u0aaa\u0abb\5\u00eex\2\u0aab\u0aad\7\7\2\2\u0aac\u0aab"+ + "\3\2\2\2\u0aad\u0ab0\3\2\2\2\u0aae\u0aac\3\2\2\2\u0aae\u0aaf\3\2\2\2\u0aaf"+ + "\u0ab1\3\2\2\2\u0ab0\u0aae\3\2\2\2\u0ab1\u0ab5\7\n\2\2\u0ab2\u0ab4\7\7"+ + "\2\2\u0ab3\u0ab2\3\2\2\2\u0ab4\u0ab7\3\2\2\2\u0ab5\u0ab3\3\2\2\2\u0ab5"+ + "\u0ab6\3\2\2\2\u0ab6\u0ab8\3\2\2\2\u0ab7\u0ab5\3\2\2\2\u0ab8\u0aba\5\u00ee"+ + "x\2\u0ab9\u0aae\3\2\2\2\u0aba\u0abd\3\2\2\2\u0abb\u0ab9\3\2\2\2\u0abb"+ + "\u0abc\3\2\2\2\u0abc\u0ac5\3\2\2\2\u0abd\u0abb\3\2\2\2\u0abe\u0ac0\7\7"+ + "\2\2\u0abf\u0abe\3\2\2\2\u0ac0\u0ac3\3\2\2\2\u0ac1\u0abf\3\2\2\2\u0ac1"+ + "\u0ac2\3\2\2\2\u0ac2\u0ac4\3\2\2\2\u0ac3\u0ac1\3\2\2\2\u0ac4\u0ac6\7\n"+ + "\2\2\u0ac5\u0ac1\3\2\2\2\u0ac5\u0ac6\3\2\2\2\u0ac6\u00ed\3\2\2\2\u0ac7"+ + "\u0ada\5D#\2\u0ac8\u0ad7\5F$\2\u0ac9\u0acb\7\7\2\2\u0aca\u0ac9\3\2\2\2"+ + "\u0acb\u0ace\3\2\2\2\u0acc\u0aca\3\2\2\2\u0acc\u0acd\3\2\2\2\u0acd\u0acf"+ + "\3\2\2\2\u0ace\u0acc\3\2\2\2\u0acf\u0ad3\7\34\2\2\u0ad0\u0ad2\7\7\2\2"+ + "\u0ad1\u0ad0\3\2\2\2\u0ad2\u0ad5\3\2\2\2\u0ad3\u0ad1\3\2\2\2\u0ad3\u0ad4"+ + "\3\2\2\2\u0ad4\u0ad6\3\2\2\2\u0ad5\u0ad3\3\2\2\2\u0ad6\u0ad8\5d\63\2\u0ad7"+ + "\u0acc\3\2\2\2\u0ad7\u0ad8\3\2\2\2\u0ad8\u0ada\3\2\2\2\u0ad9\u0ac7\3\2"+ + "\2\2\u0ad9\u0ac8\3\2\2\2\u0ada\u00ef\3\2\2\2\u0adb\u0aeb\7L\2\2\u0adc"+ + "\u0ade\7\7\2\2\u0add\u0adc\3\2\2\2\u0ade\u0ae1\3\2\2\2\u0adf\u0add\3\2"+ + "\2\2\u0adf\u0ae0\3\2\2\2\u0ae0\u0ae2\3\2\2\2\u0ae1\u0adf\3\2\2\2\u0ae2"+ + "\u0ae6\5d\63\2\u0ae3\u0ae5\7\7\2\2\u0ae4\u0ae3\3\2\2\2\u0ae5\u0ae8\3\2"+ + "\2\2\u0ae6\u0ae4\3\2\2\2\u0ae6\u0ae7\3\2\2\2\u0ae7\u0ae9\3\2\2\2\u0ae8"+ + "\u0ae6\3\2\2\2\u0ae9\u0aea\7\t\2\2\u0aea\u0aec\3\2\2\2\u0aeb\u0adf\3\2"+ + "\2\2\u0aeb\u0aec\3\2\2\2\u0aec\u0af0\3\2\2\2\u0aed\u0aef\7\7\2\2\u0aee"+ + "\u0aed\3\2\2\2\u0aef\u0af2\3\2\2\2\u0af0\u0aee\3\2\2\2\u0af0\u0af1\3\2"+ + "\2\2\u0af1\u0af3\3\2\2\2\u0af2\u0af0\3\2\2\2\u0af3\u0b02\5P)\2\u0af4\u0af6"+ + "\7\7\2\2\u0af5\u0af4\3\2\2\2\u0af6\u0af9\3\2\2\2\u0af7\u0af5\3\2\2\2\u0af7"+ + "\u0af8\3\2\2\2\u0af8\u0afa\3\2\2\2\u0af9\u0af7\3\2\2\2\u0afa\u0afe\7\34"+ + "\2\2\u0afb\u0afd\7\7\2\2\u0afc\u0afb\3\2\2\2\u0afd\u0b00\3\2\2\2\u0afe"+ + "\u0afc\3\2\2\2\u0afe\u0aff\3\2\2\2\u0aff\u0b01\3\2\2\2\u0b00\u0afe\3\2"+ + "\2\2\u0b01\u0b03\5d\63\2\u0b02\u0af7\3\2\2\2\u0b02\u0b03\3\2\2\2\u0b03"+ + "\u0b0b\3\2\2\2\u0b04\u0b06\7\7\2\2\u0b05\u0b04\3\2\2\2\u0b06\u0b09\3\2"+ + "\2\2\u0b07\u0b05\3\2\2\2\u0b07\u0b08\3\2\2\2\u0b08\u0b0a\3\2\2\2\u0b09"+ + "\u0b07\3\2\2\2\u0b0a\u0b0c\5\60\31\2\u0b0b\u0b07\3\2\2\2\u0b0b\u0b0c\3"+ + "\2\2\2\u0b0c\u0b14\3\2\2\2\u0b0d\u0b0f\7\7\2\2\u0b0e\u0b0d\3\2\2\2\u0b0f"+ + "\u0b12\3\2\2\2\u0b10\u0b0e\3\2\2\2\u0b10\u0b11\3\2\2\2\u0b11\u0b13\3\2"+ + "\2\2\u0b12\u0b10\3\2\2\2\u0b13\u0b15\5B\"\2\u0b14\u0b10\3\2\2\2\u0b14"+ + "\u0b15\3\2\2\2\u0b15\u00f1\3\2\2\2\u0b16\u0b19\5\u00eav\2\u0b17\u0b19"+ + "\5\u00f0y\2\u0b18\u0b16\3\2\2\2\u0b18\u0b17\3\2\2\2\u0b19\u00f3\3\2\2"+ + "\2\u0b1a\u0b2f\7M\2\2\u0b1b\u0b1d\7\7\2\2\u0b1c\u0b1b\3\2\2\2\u0b1d\u0b20"+ + "\3\2\2\2\u0b1e\u0b1c\3\2\2\2\u0b1e\u0b1f\3\2\2\2\u0b1f\u0b21\3\2\2\2\u0b20"+ + "\u0b1e\3\2\2\2\u0b21\u0b25\7\34\2\2\u0b22\u0b24\7\7\2\2\u0b23\u0b22\3"+ + "\2\2\2\u0b24\u0b27\3\2\2\2\u0b25\u0b23\3\2\2\2\u0b25\u0b26\3\2\2\2\u0b26"+ + "\u0b28\3\2\2\2\u0b27\u0b25\3\2\2\2\u0b28\u0b2c\5\"\22\2\u0b29\u0b2b\7"+ + "\7\2\2\u0b2a\u0b29\3\2\2\2\u0b2b\u0b2e\3\2\2\2\u0b2c\u0b2a\3\2\2\2\u0b2c"+ + "\u0b2d\3\2\2\2\u0b2d\u0b30\3\2\2\2\u0b2e\u0b2c\3\2\2\2\u0b2f\u0b1e\3\2"+ + "\2\2\u0b2f\u0b30\3\2\2\2\u0b30\u0b38\3\2\2\2\u0b31\u0b33\7\7\2\2\u0b32"+ + "\u0b31\3\2\2\2\u0b33\u0b36\3\2\2\2\u0b34\u0b32\3\2\2\2\u0b34\u0b35\3\2"+ + "\2\2\u0b35\u0b37\3\2\2\2\u0b36\u0b34\3\2\2\2\u0b37\u0b39\5\34\17\2\u0b38"+ + "\u0b34\3\2\2\2\u0b38\u0b39\3\2\2\2\u0b39\u00f5\3\2\2\2\u0b3a\u0b3b\t\13"+ + "\2\2\u0b3b\u00f7\3\2\2\2\u0b3c\u0b4d\7V\2\2\u0b3d\u0b41\7\60\2\2\u0b3e"+ + "\u0b40\7\7\2\2\u0b3f\u0b3e\3\2\2\2\u0b40\u0b43\3\2\2\2\u0b41\u0b3f\3\2"+ + "\2\2\u0b41\u0b42\3\2\2\2\u0b42\u0b44\3\2\2\2\u0b43\u0b41\3\2\2\2\u0b44"+ + "\u0b48\5d\63\2\u0b45\u0b47\7\7\2\2\u0b46\u0b45\3\2\2\2\u0b47\u0b4a\3\2"+ + "\2\2\u0b48\u0b46\3\2\2\2\u0b48\u0b49\3\2\2\2\u0b49\u0b4b\3\2\2\2\u0b4a"+ + "\u0b48\3\2\2\2\u0b4b\u0b4c\7\61\2\2\u0b4c\u0b4e\3\2\2\2\u0b4d\u0b3d\3"+ + "\2\2\2\u0b4d\u0b4e\3\2\2\2\u0b4e\u0b51\3\2\2\2\u0b4f\u0b50\7*\2\2\u0b50"+ + "\u0b52\5\u0158\u00ad\2\u0b51\u0b4f\3\2\2\2\u0b51\u0b52\3\2\2\2\u0b52\u0b55"+ + "\3\2\2\2\u0b53\u0b55\7>\2\2\u0b54\u0b3c\3\2\2\2\u0b54\u0b53\3\2\2\2\u0b55"+ + "\u00f9\3\2\2\2\u0b56\u0b5a\7Y\2\2\u0b57\u0b59\7\7\2\2\u0b58\u0b57\3\2"+ + "\2\2\u0b59\u0b5c\3\2\2\2\u0b5a\u0b58\3\2\2\2\u0b5a\u0b5b\3\2\2\2\u0b5b"+ + "\u0b5d\3\2\2\2\u0b5c\u0b5a\3\2\2\2\u0b5d\u0b61\7\13\2\2\u0b5e\u0b60\7"+ + "\7\2\2\u0b5f\u0b5e\3\2\2\2\u0b60\u0b63\3\2\2\2\u0b61\u0b5f\3\2\2\2\u0b61"+ + "\u0b62\3\2\2\2\u0b62\u0b64\3\2\2\2\u0b63\u0b61\3\2\2\2\u0b64\u0b68\5\u0098"+ + "M\2\u0b65\u0b67\7\7\2\2\u0b66\u0b65\3\2\2\2\u0b67\u0b6a\3\2\2\2\u0b68"+ + "\u0b66\3\2\2\2\u0b68\u0b69\3\2\2\2\u0b69\u0b6b\3\2\2\2\u0b6a\u0b68\3\2"+ + "\2\2\u0b6b\u0b6f\7\f\2\2\u0b6c\u0b6e\7\7\2\2\u0b6d\u0b6c\3\2\2\2\u0b6e"+ + "\u0b71\3\2\2\2\u0b6f\u0b6d\3\2\2\2\u0b6f\u0b70\3\2\2\2\u0b70\u0b91\3\2"+ + "\2\2\u0b71\u0b6f\3\2\2\2\u0b72\u0b92\5\u0086D\2\u0b73\u0b75\5\u0086D\2"+ + "\u0b74\u0b73\3\2\2\2\u0b74\u0b75\3\2\2\2\u0b75\u0b79\3\2\2\2\u0b76\u0b78"+ + "\7\7\2\2\u0b77\u0b76\3\2\2\2\u0b78\u0b7b\3\2\2\2\u0b79\u0b77\3\2\2\2\u0b79"+ + "\u0b7a\3\2\2\2\u0b7a\u0b7d\3\2\2\2\u0b7b\u0b79\3\2\2\2\u0b7c\u0b7e\7\35"+ + "\2\2\u0b7d\u0b7c\3\2\2\2\u0b7d\u0b7e\3\2\2\2\u0b7e\u0b82\3\2\2\2\u0b7f"+ + "\u0b81\7\7\2\2\u0b80\u0b7f\3\2\2\2\u0b81\u0b84\3\2\2\2\u0b82\u0b80\3\2"+ + "\2\2\u0b82\u0b83\3\2\2\2\u0b83\u0b85\3\2\2\2\u0b84\u0b82\3\2\2\2\u0b85"+ + "\u0b89\7Z\2\2\u0b86\u0b88\7\7\2\2\u0b87\u0b86\3\2\2\2\u0b88\u0b8b\3\2"+ + "\2\2\u0b89\u0b87\3\2\2\2\u0b89\u0b8a\3\2\2\2\u0b8a\u0b8e\3\2\2\2\u0b8b"+ + "\u0b89\3\2\2\2\u0b8c\u0b8f\5\u0086D\2\u0b8d\u0b8f\7\35\2\2\u0b8e\u0b8c"+ + "\3\2\2\2\u0b8e\u0b8d\3\2\2\2\u0b8f\u0b92\3\2\2\2\u0b90\u0b92\7\35\2\2"+ + "\u0b91\u0b72\3\2\2\2\u0b91\u0b74\3\2\2\2\u0b91\u0b90\3\2\2\2\u0b92\u00fb"+ + "\3\2\2\2\u0b93\u0bb5\7\13\2\2\u0b94\u0b96\5\u014e\u00a8\2\u0b95\u0b94"+ + "\3\2\2\2\u0b96\u0b99\3\2\2\2\u0b97\u0b95\3\2\2\2\u0b97\u0b98\3\2\2\2\u0b98"+ + "\u0b9d\3\2\2\2\u0b99\u0b97\3\2\2\2\u0b9a\u0b9c\7\7\2\2\u0b9b\u0b9a\3\2"+ + "\2\2\u0b9c\u0b9f\3\2\2\2\u0b9d\u0b9b\3\2\2\2\u0b9d\u0b9e\3\2\2\2\u0b9e"+ + "\u0ba0\3\2\2\2\u0b9f\u0b9d\3\2\2\2\u0ba0\u0ba4\7N\2\2\u0ba1\u0ba3\7\7"+ + "\2\2\u0ba2\u0ba1\3\2\2\2\u0ba3\u0ba6\3\2\2\2\u0ba4\u0ba2\3\2\2\2\u0ba4"+ + "\u0ba5\3\2\2\2\u0ba5\u0ba7\3\2\2\2\u0ba6\u0ba4\3\2\2\2\u0ba7\u0bab\5D"+ + "#\2\u0ba8\u0baa\7\7\2\2\u0ba9\u0ba8\3\2\2\2\u0baa\u0bad\3\2\2\2\u0bab"+ + "\u0ba9\3\2\2\2\u0bab\u0bac\3\2\2\2\u0bac\u0bae\3\2\2\2\u0bad\u0bab\3\2"+ + "\2\2\u0bae\u0bb2\7\36\2\2\u0baf\u0bb1\7\7\2\2\u0bb0\u0baf\3\2\2\2\u0bb1"+ + "\u0bb4\3\2\2\2\u0bb2\u0bb0\3\2\2\2\u0bb2\u0bb3\3\2\2\2\u0bb3\u0bb6\3\2"+ + "\2\2\u0bb4\u0bb2\3\2\2\2\u0bb5\u0b97\3\2\2\2\u0bb5\u0bb6\3\2\2\2\u0bb6"+ + "\u0bb7\3\2\2\2\u0bb7\u0bb8\5\u0098M\2\u0bb8\u0bb9\7\f\2\2\u0bb9\u00fd"+ + "\3\2\2\2\u0bba\u0bbe\7[\2\2\u0bbb\u0bbd\7\7\2\2\u0bbc\u0bbb\3\2\2\2\u0bbd"+ + "\u0bc0\3\2\2\2\u0bbe\u0bbc\3\2\2\2\u0bbe\u0bbf\3\2\2\2\u0bbf\u0bc2\3\2"+ + "\2\2\u0bc0\u0bbe\3\2\2\2\u0bc1\u0bc3\5\u00fc\177\2\u0bc2\u0bc1\3\2\2\2"+ + "\u0bc2\u0bc3\3\2\2\2\u0bc3\u0bc7\3\2\2\2\u0bc4\u0bc6\7\7\2\2\u0bc5\u0bc4"+ + "\3\2\2\2\u0bc6\u0bc9\3\2\2\2\u0bc7\u0bc5\3\2\2\2\u0bc7\u0bc8\3\2\2\2\u0bc8"+ + "\u0bca\3\2\2\2\u0bc9\u0bc7\3\2\2\2\u0bca\u0bce\7\17\2\2\u0bcb\u0bcd\7"+ + "\7\2\2\u0bcc\u0bcb\3\2\2\2\u0bcd\u0bd0\3\2\2\2\u0bce\u0bcc\3\2\2\2\u0bce"+ + "\u0bcf\3\2\2\2\u0bcf\u0bda\3\2\2\2\u0bd0\u0bce\3\2\2\2\u0bd1\u0bd5\5\u0100"+ + "\u0081\2\u0bd2\u0bd4\7\7\2\2\u0bd3\u0bd2\3\2\2\2\u0bd4\u0bd7\3\2\2\2\u0bd5"+ + "\u0bd3\3\2\2\2\u0bd5\u0bd6\3\2\2\2\u0bd6\u0bd9\3\2\2\2\u0bd7\u0bd5\3\2"+ + "\2\2\u0bd8\u0bd1\3\2\2\2\u0bd9\u0bdc\3\2\2\2\u0bda\u0bd8\3\2\2\2\u0bda"+ + "\u0bdb\3\2\2\2\u0bdb\u0be0\3\2\2\2\u0bdc\u0bda\3\2\2\2\u0bdd\u0bdf\7\7"+ + "\2\2\u0bde\u0bdd\3\2\2\2\u0bdf\u0be2\3\2\2\2\u0be0\u0bde\3\2\2\2\u0be0"+ + "\u0be1\3\2\2\2\u0be1\u0be3\3\2\2\2\u0be2\u0be0\3\2\2\2\u0be3\u0be4\7\20"+ + "\2\2\u0be4\u00ff\3\2\2\2\u0be5\u0bf6\5\u0102\u0082\2\u0be6\u0be8\7\7\2"+ + "\2\u0be7\u0be6\3\2\2\2\u0be8\u0beb\3\2\2\2\u0be9\u0be7\3\2\2\2\u0be9\u0bea"+ + "\3\2\2\2\u0bea\u0bec\3\2\2\2\u0beb\u0be9\3\2\2\2\u0bec\u0bf0\7\n\2\2\u0bed"+ + "\u0bef\7\7\2\2\u0bee\u0bed\3\2\2\2\u0bef\u0bf2\3\2\2\2\u0bf0\u0bee\3\2"+ + "\2\2\u0bf0\u0bf1\3\2\2\2\u0bf1\u0bf3\3\2\2\2\u0bf2\u0bf0\3\2\2\2\u0bf3"+ + "\u0bf5\5\u0102\u0082\2\u0bf4\u0be9\3\2\2\2\u0bf5\u0bf8\3\2\2\2\u0bf6\u0bf4"+ + "\3\2\2\2\u0bf6\u0bf7\3\2\2\2\u0bf7\u0c00\3\2\2\2\u0bf8\u0bf6\3\2\2\2\u0bf9"+ + "\u0bfb\7\7\2\2\u0bfa\u0bf9\3\2\2\2\u0bfb\u0bfe\3\2\2\2\u0bfc\u0bfa\3\2"+ + "\2\2\u0bfc\u0bfd\3\2\2\2\u0bfd\u0bff\3\2\2\2\u0bfe\u0bfc\3\2\2\2\u0bff"+ + "\u0c01\7\n\2\2\u0c00\u0bfc\3\2\2\2\u0c00\u0c01\3\2\2\2\u0c01\u0c05\3\2"+ + "\2\2\u0c02\u0c04\7\7\2\2\u0c03\u0c02\3\2\2\2\u0c04\u0c07\3\2\2\2\u0c05"+ + "\u0c03\3\2\2\2\u0c05\u0c06\3\2\2\2\u0c06\u0c08\3\2\2\2\u0c07\u0c05\3\2"+ + "\2\2\u0c08\u0c0c\7$\2\2\u0c09\u0c0b\7\7\2\2\u0c0a\u0c09\3\2\2\2\u0c0b"+ + "\u0c0e\3\2\2\2\u0c0c\u0c0a\3\2\2\2\u0c0c\u0c0d\3\2\2\2\u0c0d\u0c0f\3\2"+ + "\2\2\u0c0e\u0c0c\3\2\2\2\u0c0f\u0c11\5\u0086D\2\u0c10\u0c12\5\u0094K\2"+ + "\u0c11\u0c10\3\2\2\2\u0c11\u0c12\3\2\2\2\u0c12\u0c26\3\2\2\2\u0c13\u0c17"+ + "\7Z\2\2\u0c14\u0c16\7\7\2\2\u0c15\u0c14\3\2\2\2\u0c16\u0c19\3\2\2\2\u0c17"+ + "\u0c15\3\2\2\2\u0c17\u0c18\3\2\2\2\u0c18\u0c1a\3\2\2\2\u0c19\u0c17\3\2"+ + "\2\2\u0c1a\u0c1e\7$\2\2\u0c1b\u0c1d\7\7\2\2\u0c1c\u0c1b\3\2\2\2\u0c1d"+ + "\u0c20\3\2\2\2\u0c1e\u0c1c\3\2\2\2\u0c1e\u0c1f\3\2\2\2\u0c1f\u0c21\3\2"+ + "\2\2\u0c20\u0c1e\3\2\2\2\u0c21\u0c23\5\u0086D\2\u0c22\u0c24\5\u0094K\2"+ + "\u0c23\u0c22\3\2\2\2\u0c23\u0c24\3\2\2\2\u0c24\u0c26\3\2\2\2\u0c25\u0be5"+ + "\3\2\2\2\u0c25\u0c13\3\2\2\2\u0c26\u0101\3\2\2\2\u0c27\u0c2b\5\u0098M"+ + "\2\u0c28\u0c2b\5\u0104\u0083\2\u0c29\u0c2b\5\u0106\u0084\2\u0c2a\u0c27"+ + "\3\2\2\2\u0c2a\u0c28\3\2\2\2\u0c2a\u0c29\3\2\2\2\u0c2b\u0103\3\2\2\2\u0c2c"+ + "\u0c30\5\u0118\u008d\2\u0c2d\u0c2f\7\7\2\2\u0c2e\u0c2d\3\2\2\2\u0c2f\u0c32"+ + "\3\2\2\2\u0c30\u0c2e\3\2\2\2\u0c30\u0c31\3\2\2\2\u0c31\u0c33\3\2\2\2\u0c32"+ + "\u0c30\3\2\2\2\u0c33\u0c34\5\u0098M\2\u0c34\u0105\3\2\2\2\u0c35\u0c39"+ + "\5\u011a\u008e\2\u0c36\u0c38\7\7\2\2\u0c37\u0c36\3\2\2\2\u0c38\u0c3b\3"+ + "\2\2\2\u0c39\u0c37\3\2\2\2\u0c39\u0c3a\3\2\2\2\u0c3a\u0c3c\3\2\2\2\u0c3b"+ + "\u0c39\3\2\2\2\u0c3c\u0c3d\5d\63\2\u0c3d\u0107\3\2\2\2\u0c3e\u0c42\7\\"+ + "\2\2\u0c3f\u0c41\7\7\2\2\u0c40\u0c3f\3\2\2\2\u0c41\u0c44\3\2\2\2\u0c42"+ + "\u0c40\3\2\2\2\u0c42\u0c43\3\2\2\2\u0c43\u0c45\3\2\2\2\u0c44\u0c42\3\2"+ + "\2\2\u0c45\u0c61\5\u0088E\2\u0c46\u0c48\7\7\2\2\u0c47\u0c46\3\2\2\2\u0c48"+ + "\u0c4b\3\2\2\2\u0c49\u0c47\3\2\2\2\u0c49\u0c4a\3\2\2\2\u0c4a\u0c4c\3\2"+ + "\2\2\u0c4b\u0c49\3\2\2\2\u0c4c\u0c4e\5\u010a\u0086\2\u0c4d\u0c49\3\2\2"+ + "\2\u0c4e\u0c4f\3\2\2\2\u0c4f\u0c4d\3\2\2\2\u0c4f\u0c50\3\2\2\2\u0c50\u0c58"+ + "\3\2\2\2\u0c51\u0c53\7\7\2\2\u0c52\u0c51\3\2\2\2\u0c53\u0c56\3\2\2\2\u0c54"+ + "\u0c52\3\2\2\2\u0c54\u0c55\3\2\2\2\u0c55\u0c57\3\2\2\2\u0c56\u0c54\3\2"+ + "\2\2\u0c57\u0c59\5\u010c\u0087\2\u0c58\u0c54\3\2\2\2\u0c58\u0c59\3\2\2"+ + "\2\u0c59\u0c62\3\2\2\2\u0c5a\u0c5c\7\7\2\2\u0c5b\u0c5a\3\2\2\2\u0c5c\u0c5f"+ + "\3\2\2\2\u0c5d\u0c5b\3\2\2\2\u0c5d\u0c5e\3\2\2\2\u0c5e\u0c60\3\2\2\2\u0c5f"+ + "\u0c5d\3\2\2\2\u0c60\u0c62\5\u010c\u0087\2\u0c61\u0c4d\3\2\2\2\u0c61\u0c5d"+ + "\3\2\2\2\u0c62\u0109\3\2\2\2\u0c63\u0c67\7]\2\2\u0c64\u0c66\7\7\2\2\u0c65"+ + "\u0c64\3\2\2\2\u0c66\u0c69\3\2\2\2\u0c67\u0c65\3\2\2\2\u0c67\u0c68\3\2"+ + "\2\2\u0c68\u0c6a\3\2\2\2\u0c69\u0c67\3\2\2\2\u0c6a\u0c6e\7\13\2\2\u0c6b"+ + "\u0c6d\5\u014e\u00a8\2\u0c6c\u0c6b\3\2\2\2\u0c6d\u0c70\3\2\2\2\u0c6e\u0c6c"+ + "\3\2\2\2\u0c6e\u0c6f\3\2\2\2\u0c6f\u0c71\3\2\2\2\u0c70\u0c6e\3\2\2\2\u0c71"+ + "\u0c72\5\u0158\u00ad\2\u0c72\u0c73\7\34\2\2\u0c73\u0c7b\5d\63\2\u0c74"+ + "\u0c76\7\7\2\2\u0c75\u0c74\3\2\2\2\u0c76\u0c79\3\2\2\2\u0c77\u0c75\3\2"+ + "\2\2\u0c77\u0c78\3\2\2\2\u0c78\u0c7a\3\2\2\2\u0c79\u0c77\3\2\2\2\u0c7a"+ + "\u0c7c\7\n\2\2\u0c7b\u0c77\3\2\2\2\u0c7b\u0c7c\3\2\2\2\u0c7c\u0c7d\3\2"+ + "\2\2\u0c7d\u0c81\7\f\2\2\u0c7e\u0c80\7\7\2\2\u0c7f\u0c7e\3\2\2\2\u0c80"+ + "\u0c83\3\2\2\2\u0c81\u0c7f\3\2\2\2\u0c81\u0c82\3\2\2\2\u0c82\u0c84\3\2"+ + "\2\2\u0c83\u0c81\3\2\2\2\u0c84\u0c85\5\u0088E\2\u0c85\u010b\3\2\2\2\u0c86"+ + "\u0c8a\7^\2\2\u0c87\u0c89\7\7\2\2\u0c88\u0c87\3\2\2\2\u0c89\u0c8c\3\2"+ + "\2\2\u0c8a\u0c88\3\2\2\2\u0c8a\u0c8b\3\2\2\2\u0c8b\u0c8d\3\2\2\2\u0c8c"+ + "\u0c8a\3\2\2\2\u0c8d\u0c8e\5\u0088E\2\u0c8e\u010d\3\2\2\2\u0c8f\u0c93"+ + "\7b\2\2\u0c90\u0c92\7\7\2\2\u0c91\u0c90\3\2\2\2\u0c92\u0c95\3\2\2\2\u0c93"+ + "\u0c91\3\2\2\2\u0c93\u0c94\3\2\2\2\u0c94\u0c96\3\2\2\2\u0c95\u0c93\3\2"+ + "\2\2\u0c96\u0ca0\5\u0098M\2\u0c97\u0c99\t\f\2\2\u0c98\u0c9a\5\u0098M\2"+ + "\u0c99\u0c98\3\2\2\2\u0c99\u0c9a\3\2\2\2\u0c9a\u0ca0\3\2\2\2\u0c9b\u0ca0"+ + "\7d\2\2\u0c9c\u0ca0\7;\2\2\u0c9d\u0ca0\7e\2\2\u0c9e\u0ca0\7<\2\2\u0c9f"+ + "\u0c8f\3\2\2\2\u0c9f\u0c97\3\2\2\2\u0c9f\u0c9b\3\2\2\2\u0c9f\u0c9c\3\2"+ + "\2\2\u0c9f\u0c9d\3\2\2\2\u0c9f\u0c9e\3\2\2\2\u0ca0\u010f\3\2\2\2\u0ca1"+ + "\u0ca3\5|?\2\u0ca2\u0ca1\3\2\2\2\u0ca2\u0ca3\3\2\2\2\u0ca3\u0ca4\3\2\2"+ + "\2\u0ca4\u0ca8\7\'\2\2\u0ca5\u0ca7\7\7\2\2\u0ca6\u0ca5\3\2\2\2\u0ca7\u0caa"+ + "\3\2\2\2\u0ca8\u0ca6\3\2\2\2\u0ca8\u0ca9\3\2\2\2\u0ca9\u0cad\3\2\2\2\u0caa"+ + "\u0ca8\3\2\2\2\u0cab\u0cae\5\u0158\u00ad\2\u0cac\u0cae\7J\2\2\u0cad\u0cab"+ + "\3\2\2\2\u0cad\u0cac\3\2\2\2\u0cae\u0111\3\2\2\2\u0caf\u0cb0\t\r\2\2\u0cb0"+ + "\u0113\3\2\2\2\u0cb1\u0cb2\t\16\2\2\u0cb2\u0115\3\2\2\2\u0cb3\u0cb4\t"+ + "\17\2\2\u0cb4\u0117\3\2\2\2\u0cb5\u0cb6\t\20\2\2\u0cb6\u0119\3\2\2\2\u0cb7"+ + "\u0cb8\t\21\2\2\u0cb8\u011b\3\2\2\2\u0cb9\u0cba\t\22\2\2\u0cba\u011d\3"+ + "\2\2\2\u0cbb\u0cbc\t\23\2\2\u0cbc\u011f\3\2\2\2\u0cbd\u0cbe\t\24\2\2\u0cbe"+ + "\u0121\3\2\2\2\u0cbf\u0cc5\7\26\2\2\u0cc0\u0cc5\7\27\2\2\u0cc1\u0cc5\7"+ + "\25\2\2\u0cc2\u0cc5\7\24\2\2\u0cc3\u0cc5\5\u0126\u0094\2\u0cc4\u0cbf\3"+ + "\2\2\2\u0cc4\u0cc0\3\2\2\2\u0cc4\u0cc1\3\2\2\2\u0cc4\u0cc2\3\2\2\2\u0cc4"+ + "\u0cc3\3\2\2\2\u0cc5\u0123\3\2\2\2\u0cc6\u0ccb\7\26\2\2\u0cc7\u0ccb\7"+ + "\27\2\2\u0cc8\u0cc9\7\33\2\2\u0cc9\u0ccb\5\u0126\u0094\2\u0cca\u0cc6\3"+ + "\2\2\2\u0cca\u0cc7\3\2\2\2\u0cca\u0cc8\3\2\2\2\u0ccb\u0125\3\2\2\2\u0ccc"+ + "\u0ccd\t\25\2\2\u0ccd\u0127\3\2\2\2\u0cce\u0cd0\7\7\2\2\u0ccf\u0cce\3"+ + "\2\2\2\u0cd0\u0cd3\3\2\2\2\u0cd1\u0ccf\3\2\2\2\u0cd1\u0cd2\3\2\2\2\u0cd2"+ + "\u0cd4\3\2\2\2\u0cd3\u0cd1\3\2\2\2\u0cd4\u0cde\7\t\2\2\u0cd5\u0cd7\7\7"+ + "\2\2\u0cd6\u0cd5\3\2\2\2\u0cd7\u0cda\3\2\2\2\u0cd8\u0cd6\3\2\2\2\u0cd8"+ + "\u0cd9\3\2\2\2\u0cd9\u0cdb\3\2\2\2\u0cda\u0cd8\3\2\2\2\u0cdb\u0cde\5\u012a"+ + "\u0096\2\u0cdc\u0cde\7\'\2\2\u0cdd\u0cd1\3\2\2\2\u0cdd\u0cd8\3\2\2\2\u0cdd"+ + "\u0cdc\3\2\2\2\u0cde\u0129\3\2\2\2\u0cdf\u0ce0\7/\2\2\u0ce0\u0ce1\7\t"+ + "\2\2\u0ce1\u012b\3\2\2\2\u0ce2\u0ce5\5\u014e\u00a8\2\u0ce3\u0ce5\5\u0130"+ + "\u0099\2\u0ce4\u0ce2\3\2\2\2\u0ce4\u0ce3\3\2\2\2\u0ce5\u0ce6\3\2\2\2\u0ce6"+ + "\u0ce4\3\2\2\2\u0ce6\u0ce7\3\2\2\2\u0ce7\u012d\3\2\2\2\u0ce8\u0ceb\5\u014e"+ + "\u00a8\2\u0ce9\u0ceb\5\u0148\u00a5\2\u0cea\u0ce8\3\2\2\2\u0cea\u0ce9\3"+ + "\2\2\2\u0ceb\u0cec\3\2\2\2\u0cec\u0cea\3\2\2\2\u0cec\u0ced\3\2\2\2\u0ced"+ + "\u012f\3\2\2\2\u0cee\u0cf7\5\u0136\u009c\2\u0cef\u0cf7\5\u0138\u009d\2"+ + "\u0cf0\u0cf7\5\u013a\u009e\2\u0cf1\u0cf7\5\u0142\u00a2\2\u0cf2\u0cf7\5"+ + "\u0144\u00a3\2\u0cf3\u0cf7\5\u0146\u00a4\2\u0cf4\u0cf7\5\u0148\u00a5\2"+ + "\u0cf5\u0cf7\5\u014c\u00a7\2\u0cf6\u0cee\3\2\2\2\u0cf6\u0cef\3\2\2\2\u0cf6"+ + "\u0cf0\3\2\2\2\u0cf6\u0cf1\3\2\2\2\u0cf6\u0cf2\3\2\2\2\u0cf6\u0cf3\3\2"+ + "\2\2\u0cf6\u0cf4\3\2\2\2\u0cf6\u0cf5\3\2\2\2\u0cf7\u0cfb\3\2\2\2\u0cf8"+ + "\u0cfa\7\7\2\2\u0cf9\u0cf8\3\2\2\2\u0cfa\u0cfd\3\2\2\2\u0cfb\u0cf9\3\2"+ + "\2\2\u0cfb\u0cfc\3\2\2\2\u0cfc\u0131\3\2\2\2\u0cfd\u0cfb\3\2\2\2\u0cfe"+ + "\u0d00\5\u0134\u009b\2\u0cff\u0cfe\3\2\2\2\u0d00\u0d01\3\2\2\2\u0d01\u0cff"+ + "\3\2\2\2\u0d01\u0d02\3\2\2\2\u0d02\u0133\3\2\2\2\u0d03\u0d0c\5\u014e\u00a8"+ + "\2\u0d04\u0d08\7|\2\2\u0d05\u0d07\7\7\2\2\u0d06\u0d05\3\2\2\2\u0d07\u0d0a"+ + "\3\2\2\2\u0d08\u0d06\3\2\2\2\u0d08\u0d09\3\2\2\2\u0d09\u0d0c\3\2\2\2\u0d0a"+ + "\u0d08\3\2\2\2\u0d0b\u0d03\3\2\2\2\u0d0b\u0d04\3\2\2\2\u0d0c\u0135\3\2"+ + "\2\2\u0d0d\u0d0e\t\26\2\2\u0d0e\u0137\3\2\2\2\u0d0f\u0d10\t\27\2\2\u0d10"+ + "\u0139\3\2\2\2\u0d11\u0d12\t\30\2\2\u0d12\u013b\3\2\2\2\u0d13\u0d14\t"+ + "\31\2\2\u0d14\u013d\3\2\2\2\u0d15\u0d17\5\u0140\u00a1\2\u0d16\u0d15\3"+ + "\2\2\2\u0d17\u0d18\3\2\2\2\u0d18\u0d16\3\2\2\2\u0d18\u0d19\3\2\2\2\u0d19"+ + "\u013f\3\2\2\2\u0d1a\u0d1e\5\u014a\u00a6\2\u0d1b\u0d1d\7\7\2\2\u0d1c\u0d1b"+ + "\3\2\2\2\u0d1d\u0d20\3\2\2\2\u0d1e\u0d1c\3\2\2\2\u0d1e\u0d1f\3\2\2\2\u0d1f"+ + "\u0d2a\3\2\2\2\u0d20\u0d1e\3\2\2\2\u0d21\u0d25\5\u013c\u009f\2\u0d22\u0d24"+ + "\7\7\2\2\u0d23\u0d22\3\2\2\2\u0d24\u0d27\3\2\2\2\u0d25\u0d23\3\2\2\2\u0d25"+ + "\u0d26\3\2\2\2\u0d26\u0d2a\3\2\2\2\u0d27\u0d25\3\2\2\2\u0d28\u0d2a\5\u014e"+ + "\u00a8\2\u0d29\u0d1a\3\2\2\2\u0d29\u0d21\3\2\2\2\u0d29\u0d28\3\2\2\2\u0d2a"+ + "\u0141\3\2\2\2\u0d2b\u0d2c\t\32\2\2\u0d2c\u0143\3\2\2\2\u0d2d\u0d2e\7"+ + "\u0081\2\2\u0d2e\u0145\3\2\2\2\u0d2f\u0d30\t\33\2\2\u0d30\u0147\3\2\2"+ + "\2\u0d31\u0d32\t\34\2\2\u0d32\u0149\3\2\2\2\u0d33\u0d34\7\u0086\2\2\u0d34"+ + "\u014b\3\2\2\2\u0d35\u0d36\t\35\2\2\u0d36\u014d\3\2\2\2\u0d37\u0d3a\5"+ + "\u0150\u00a9\2\u0d38\u0d3a\5\u0152\u00aa\2\u0d39\u0d37\3\2\2\2\u0d39\u0d38"+ + "\3\2\2\2\u0d3a\u0d3e\3\2\2\2\u0d3b\u0d3d\7\7\2\2\u0d3c\u0d3b\3\2\2\2\u0d3d"+ + "\u0d40\3\2\2\2\u0d3e\u0d3c\3\2\2\2\u0d3e\u0d3f\3\2\2\2\u0d3f\u014f\3\2"+ + "\2\2\u0d40\u0d3e\3\2\2\2\u0d41\u0d45\5\u0154\u00ab\2\u0d42\u0d44\7\7\2"+ + "\2\u0d43\u0d42\3\2\2\2\u0d44\u0d47\3\2\2\2\u0d45\u0d43\3\2\2\2\u0d45\u0d46"+ + "\3\2\2\2\u0d46\u0d4b\3\2\2\2\u0d47\u0d45\3\2\2\2\u0d48\u0d4b\7*\2\2\u0d49"+ + "\u0d4b\7,\2\2\u0d4a\u0d41\3\2\2\2\u0d4a\u0d48\3\2\2\2\u0d4a\u0d49\3\2"+ + "\2\2\u0d4b\u0d4c\3\2\2\2\u0d4c\u0d4d\5\u0156\u00ac\2\u0d4d\u0151\3\2\2"+ + "\2\u0d4e\u0d52\5\u0154\u00ab\2\u0d4f\u0d51\7\7\2\2\u0d50\u0d4f\3\2\2\2"+ + "\u0d51\u0d54\3\2\2\2\u0d52\u0d50\3\2\2\2\u0d52\u0d53\3\2\2\2\u0d53\u0d58"+ + "\3\2\2\2\u0d54\u0d52\3\2\2\2\u0d55\u0d58\7*\2\2\u0d56\u0d58\7,\2\2\u0d57"+ + "\u0d4e\3\2\2\2\u0d57\u0d55\3\2\2\2\u0d57\u0d56\3\2\2\2\u0d58\u0d59\3\2"+ + "\2\2\u0d59\u0d5b\7\r\2\2\u0d5a\u0d5c\5\u0156\u00ac\2\u0d5b\u0d5a\3\2\2"+ + "\2\u0d5c\u0d5d\3\2\2\2\u0d5d\u0d5b\3\2\2\2\u0d5d\u0d5e\3\2\2\2\u0d5e\u0d5f"+ + "\3\2\2\2\u0d5f\u0d60\7\16\2\2\u0d60\u0153\3\2\2\2\u0d61\u0d62\t\2\2\2"+ + "\u0d62\u0d66\t\36\2\2\u0d63\u0d65\7\7\2\2\u0d64\u0d63\3\2\2\2\u0d65\u0d68"+ + "\3\2\2\2\u0d66\u0d64\3\2\2\2\u0d66\u0d67\3\2\2\2\u0d67\u0d69\3\2\2\2\u0d68"+ + "\u0d66\3\2\2\2\u0d69\u0d6a\7\34\2\2\u0d6a\u0155\3\2\2\2\u0d6b\u0d6e\5"+ + "&\24\2\u0d6c\u0d6e\5l\67\2\u0d6d\u0d6b\3\2\2\2\u0d6d\u0d6c\3\2\2\2\u0d6e"+ + "\u0157\3\2\2\2\u0d6f\u0d70\t\37\2\2\u0d70\u0159\3\2\2\2\u0d71\u0d7c\5"+ + "\u0158\u00ad\2\u0d72\u0d74\7\7\2\2\u0d73\u0d72\3\2\2\2\u0d74\u0d77\3\2"+ + "\2\2\u0d75\u0d73\3\2\2\2\u0d75\u0d76\3\2\2\2\u0d76\u0d78\3\2\2\2\u0d77"+ + "\u0d75\3\2\2\2\u0d78\u0d79\7\t\2\2\u0d79\u0d7b\5\u0158\u00ad\2\u0d7a\u0d75"+ + "\3\2\2\2\u0d7b\u0d7e\3\2\2\2\u0d7c\u0d7a\3\2\2\2\u0d7c\u0d7d\3\2\2\2\u0d7d"+ + "\u015b\3\2\2\2\u0d7e\u0d7c\3\2\2\2\u0214\u015d\u0162\u0168\u0170\u0176"+ + "\u017b\u0181\u018b\u0194\u019b\u01a2\u01a9\u01ae\u01b3\u01b9\u01bb\u01c0"+ + "\u01c8\u01cb\u01d2\u01d5\u01db\u01e2\u01e6\u01eb\u01f2\u01fc\u01ff\u0206"+ + "\u0209\u020c\u0211\u0218\u021c\u0221\u0225\u022a\u0231\u0235\u023a\u023e"+ + "\u0243\u024a\u024e\u0251\u0257\u025a\u0262\u0269\u0272\u0279\u0280\u0286"+ + "\u028c\u0290\u0292\u0297\u029d\u02a0\u02a5\u02ad\u02b4\u02bb\u02bf\u02c5"+ + "\u02cc\u02d2\u02d9\u02e1\u02e7\u02ee\u02f3\u02fa\u0303\u030a\u0311\u0317"+ + "\u031d\u0321\u0326\u032c\u0331\u0338\u033f\u0343\u0349\u0350\u0357\u035d"+ + "\u0363\u036a\u0371\u0378\u037c\u0383\u0389\u038f\u0395\u039c\u03a0\u03a5"+ + "\u03ac\u03b0\u03b5\u03b9\u03bf\u03c6\u03cd\u03d3\u03d9\u03dd\u03df\u03e4"+ + "\u03ea\u03f0\u03f7\u03fb\u03fe\u0404\u0408\u040d\u0414\u0419\u041e\u0425"+ + "\u042c\u0433\u0437\u043c\u0440\u0445\u0449\u0450\u0454\u0459\u045f\u0466"+ + "\u046d\u0471\u0477\u047e\u0485\u048b\u0491\u0495\u049a\u04a0\u04a6\u04aa"+ + "\u04af\u04b6\u04bb\u04c0\u04c5\u04ca\u04ce\u04d3\u04da\u04df\u04e1\u04e6"+ + "\u04e9\u04ee\u04f2\u04f7\u04fb\u04fe\u0501\u0506\u050a\u050d\u050f\u0515"+ + "\u051b\u0521\u0528\u052f\u0536\u053a\u053f\u0543\u0546\u054c\u0553\u055a"+ + "\u055e\u0563\u056a\u0571\u0575\u057a\u057f\u0585\u058c\u0593\u0599\u059f"+ + "\u05a3\u05a5\u05aa\u05b0\u05b6\u05bd\u05c1\u05c7\u05ce\u05d2\u05d8\u05df"+ + "\u05e5\u05eb\u05f2\u05f9\u05fd\u0602\u0606\u0609\u060f\u0616\u061d\u0621"+ + "\u0626\u062a\u0630\u0639\u063d\u0642\u0649\u064d\u0652\u065b\u0662\u0668"+ + "\u066e\u0672\u0678\u067b\u0681\u0685\u068a\u068e\u0691\u0697\u069b\u069f"+ + "\u06a4\u06aa\u06b2\u06b9\u06bf\u06c6\u06ca\u06cd\u06d1\u06d6\u06dc\u06e0"+ + "\u06e6\u06ed\u06f0\u06f6\u06fd\u0706\u070b\u0710\u0717\u071c\u0720\u0726"+ + "\u072a\u072f\u0738\u073f\u0745\u074a\u0750\u0755\u075a\u0765\u0768\u076b"+ + "\u076f\u0771\u0778\u077f\u0784\u078a\u0791\u0799\u079f\u07a6\u07ab\u07b3"+ + "\u07b7\u07bd\u07c6\u07cb\u07d1\u07d5\u07da\u07e1\u07ee\u07f3\u07fc\u0800"+ + "\u0805\u0808\u0810\u0817\u081d\u0824\u082b\u0831\u0839\u0840\u0848\u084f"+ + "\u0856\u085e\u0867\u086c\u086e\u0875\u087c\u0883\u088e\u0895\u089d\u08a3"+ + "\u08ab\u08b2\u08ba\u08c1\u08c8\u08cf\u08d6\u08dc\u08e7\u08ea\u08f0\u08f8"+ + "\u08ff\u0905\u090c\u0913\u0919\u0920\u0928\u092e\u0935\u093c\u0942\u0948"+ + "\u094c\u0951\u095a\u0960\u0963\u0966\u096a\u096f\u0973\u0978\u0981\u0988"+ + "\u098f\u0995\u099b\u099f\u09a4\u09ad\u09b4\u09bb\u09c1\u09c7\u09cb\u09d0"+ + "\u09d3\u09d8\u09dd\u09e4\u09eb\u09ee\u09f1\u09f6\u0a09\u0a0f\u0a16\u0a1f"+ + "\u0a26\u0a2d\u0a33\u0a39\u0a3d\u0a42\u0a45\u0a4d\u0a52\u0a54\u0a5d\u0a5f"+ + "\u0a6a\u0a71\u0a7c\u0a83\u0a8c\u0a90\u0a95\u0a9c\u0a9f\u0aa5\u0aae\u0ab5"+ + "\u0abb\u0ac1\u0ac5\u0acc\u0ad3\u0ad7\u0ad9\u0adf\u0ae6\u0aeb\u0af0\u0af7"+ + "\u0afe\u0b02\u0b07\u0b0b\u0b10\u0b14\u0b18\u0b1e\u0b25\u0b2c\u0b2f\u0b34"+ + "\u0b38\u0b41\u0b48\u0b4d\u0b51\u0b54\u0b5a\u0b61\u0b68\u0b6f\u0b74\u0b79"+ + "\u0b7d\u0b82\u0b89\u0b8e\u0b91\u0b97\u0b9d\u0ba4\u0bab\u0bb2\u0bb5\u0bbe"+ + "\u0bc2\u0bc7\u0bce\u0bd5\u0bda\u0be0\u0be9\u0bf0\u0bf6\u0bfc\u0c00\u0c05"+ + "\u0c0c\u0c11\u0c17\u0c1e\u0c23\u0c25\u0c2a\u0c30\u0c39\u0c42\u0c49\u0c4f"+ + "\u0c54\u0c58\u0c5d\u0c61\u0c67\u0c6e\u0c77\u0c7b\u0c81\u0c8a\u0c93\u0c99"+ + "\u0c9f\u0ca2\u0ca8\u0cad\u0cc4\u0cca\u0cd1\u0cd8\u0cdd\u0ce4\u0ce6\u0cea"+ + "\u0cec\u0cf6\u0cfb\u0d01\u0d08\u0d0b\u0d18\u0d1e\u0d25\u0d29\u0d39\u0d3e"+ + "\u0d45\u0d4a\u0d52\u0d57\u0d5d\u0d66\u0d6d\u0d75\u0d7c"; + public static final String _serializedATN = Utils.join( + new String[] { + _serializedATNSegment0, + _serializedATNSegment1 + }, + "" + ); + public static final ATN _ATN = + new ATNDeserializer().deserialize(_serializedATN.toCharArray()); + static { + _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()]; + for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) { + _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i); + } + } +} \ No newline at end of file diff --git a/lexers/src/main/java/com/itsaky/androidide/lexers/kotlin/KotlinParser.tokens b/lexers/src/main/java/com/itsaky/androidide/lexers/kotlin/KotlinParser.tokens new file mode 100644 index 000000000..a207d69c1 --- /dev/null +++ b/lexers/src/main/java/com/itsaky/androidide/lexers/kotlin/KotlinParser.tokens @@ -0,0 +1,290 @@ +ShebangLine=1 +DelimitedComment=2 +LineComment=3 +WS=4 +NL=5 +RESERVED=6 +DOT=7 +COMMA=8 +LPAREN=9 +RPAREN=10 +LSQUARE=11 +RSQUARE=12 +LCURL=13 +RCURL=14 +MULT=15 +MOD=16 +DIV=17 +ADD=18 +SUB=19 +INCR=20 +DECR=21 +CONJ=22 +DISJ=23 +EXCL_WS=24 +EXCL_NO_WS=25 +COLON=26 +SEMICOLON=27 +ASSIGNMENT=28 +ADD_ASSIGNMENT=29 +SUB_ASSIGNMENT=30 +MULT_ASSIGNMENT=31 +DIV_ASSIGNMENT=32 +MOD_ASSIGNMENT=33 +ARROW=34 +DOUBLE_ARROW=35 +RANGE=36 +COLONCOLON=37 +DOUBLE_SEMICOLON=38 +HASH=39 +AT_NO_WS=40 +AT_POST_WS=41 +AT_PRE_WS=42 +AT_BOTH_WS=43 +QUEST_WS=44 +QUEST_NO_WS=45 +LANGLE=46 +RANGLE=47 +LE=48 +GE=49 +EXCL_EQ=50 +EXCL_EQEQ=51 +AS_SAFE=52 +EQEQ=53 +EQEQEQ=54 +SINGLE_QUOTE=55 +RETURN_AT=56 +CONTINUE_AT=57 +BREAK_AT=58 +THIS_AT=59 +SUPER_AT=60 +FILE=61 +FIELD=62 +PROPERTY=63 +GET=64 +SET=65 +RECEIVER=66 +PARAM=67 +SETPARAM=68 +DELEGATE=69 +PACKAGE=70 +IMPORT=71 +CLASS=72 +INTERFACE=73 +FUN=74 +OBJECT=75 +VAL=76 +VAR=77 +TYPE_ALIAS=78 +CONSTRUCTOR=79 +BY=80 +COMPANION=81 +INIT=82 +THIS=83 +SUPER=84 +TYPEOF=85 +WHERE=86 +IF=87 +ELSE=88 +WHEN=89 +TRY=90 +CATCH=91 +FINALLY=92 +FOR=93 +DO=94 +WHILE=95 +THROW=96 +RETURN=97 +CONTINUE=98 +BREAK=99 +AS=100 +IS=101 +IN=102 +NOT_IS=103 +NOT_IN=104 +OUT=105 +DYNAMIC=106 +PUBLIC=107 +PRIVATE=108 +PROTECTED=109 +INTERNAL=110 +ENUM=111 +SEALED=112 +ANNOTATION=113 +DATA=114 +INNER=115 +VALUE=116 +TAILREC=117 +OPERATOR=118 +INLINE=119 +INFIX=120 +EXTERNAL=121 +SUSPEND=122 +OVERRIDE=123 +ABSTRACT=124 +FINAL=125 +OPEN=126 +CONST=127 +LATEINIT=128 +VARARG=129 +NOINLINE=130 +CROSSINLINE=131 +REIFIED=132 +EXPECT=133 +ACTUAL=134 +RealLiteral=135 +FloatLiteral=136 +DoubleLiteral=137 +IntegerLiteral=138 +HexLiteral=139 +BinLiteral=140 +UnsignedLiteral=141 +LongLiteral=142 +BooleanLiteral=143 +NullLiteral=144 +CharacterLiteral=145 +Identifier=146 +IdentifierOrSoftKey=147 +FieldIdentifier=148 +QUOTE_OPEN=149 +TRIPLE_QUOTE_OPEN=150 +UNICODE_CLASS_LL=151 +UNICODE_CLASS_LM=152 +UNICODE_CLASS_LO=153 +UNICODE_CLASS_LT=154 +UNICODE_CLASS_LU=155 +UNICODE_CLASS_ND=156 +UNICODE_CLASS_NL=157 +QUOTE_CLOSE=158 +LineStrRef=159 +LineStrText=160 +LineStrEscapedChar=161 +LineStrExprStart=162 +TRIPLE_QUOTE_CLOSE=163 +MultiLineStringQuote=164 +MultiLineStrRef=165 +MultiLineStrText=166 +MultiLineStrExprStart=167 +Inside_Comment=168 +Inside_WS=169 +Inside_NL=170 +ErrorCharacter=171 +'...'=6 +'.'=7 +','=8 +'('=9 +')'=10 +'['=11 +']'=12 +'{'=13 +'}'=14 +'*'=15 +'%'=16 +'/'=17 +'+'=18 +'-'=19 +'++'=20 +'--'=21 +'&&'=22 +'||'=23 +'!'=25 +':'=26 +';'=27 +'='=28 +'+='=29 +'-='=30 +'*='=31 +'/='=32 +'%='=33 +'->'=34 +'=>'=35 +'..'=36 +'::'=37 +';;'=38 +'#'=39 +'@'=40 +'?'=45 +'<'=46 +'>'=47 +'<='=48 +'>='=49 +'!='=50 +'!=='=51 +'as?'=52 +'=='=53 +'==='=54 +'\''=55 +'file'=61 +'field'=62 +'property'=63 +'get'=64 +'set'=65 +'receiver'=66 +'param'=67 +'setparam'=68 +'delegate'=69 +'package'=70 +'import'=71 +'class'=72 +'interface'=73 +'fun'=74 +'object'=75 +'val'=76 +'var'=77 +'typealias'=78 +'constructor'=79 +'by'=80 +'companion'=81 +'init'=82 +'this'=83 +'super'=84 +'typeof'=85 +'where'=86 +'if'=87 +'else'=88 +'when'=89 +'try'=90 +'catch'=91 +'finally'=92 +'for'=93 +'do'=94 +'while'=95 +'throw'=96 +'return'=97 +'continue'=98 +'break'=99 +'as'=100 +'is'=101 +'in'=102 +'out'=105 +'dynamic'=106 +'public'=107 +'private'=108 +'protected'=109 +'internal'=110 +'enum'=111 +'sealed'=112 +'annotation'=113 +'data'=114 +'inner'=115 +'value'=116 +'tailrec'=117 +'operator'=118 +'inline'=119 +'infix'=120 +'external'=121 +'suspend'=122 +'override'=123 +'abstract'=124 +'final'=125 +'open'=126 +'const'=127 +'lateinit'=128 +'vararg'=129 +'noinline'=130 +'crossinline'=131 +'reified'=132 +'expect'=133 +'actual'=134 +'null'=144 +'"""'=150 diff --git a/lexers/src/main/java/com/itsaky/androidide/lexers/kotlin/KotlinParserBaseListener.java b/lexers/src/main/java/com/itsaky/androidide/lexers/kotlin/KotlinParserBaseListener.java new file mode 100644 index 000000000..2603606ff --- /dev/null +++ b/lexers/src/main/java/com/itsaky/androidide/lexers/kotlin/KotlinParserBaseListener.java @@ -0,0 +1,2115 @@ +// Generated from KotlinParser.g4 by ANTLR 4.9.2 +package com.itsaky.androidide.lexers.kotlin; + +import org.antlr.v4.runtime.ParserRuleContext; +import org.antlr.v4.runtime.tree.ErrorNode; +import org.antlr.v4.runtime.tree.TerminalNode; + +/** + * This class provides an empty implementation of {@link KotlinParserListener}, + * which can be extended to create a listener which only needs to handle a subset + * of the available methods. + */ +public class KotlinParserBaseListener implements KotlinParserListener { + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterKotlinFile(KotlinParser.KotlinFileContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitKotlinFile(KotlinParser.KotlinFileContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterScript(KotlinParser.ScriptContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitScript(KotlinParser.ScriptContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterShebangLine(KotlinParser.ShebangLineContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitShebangLine(KotlinParser.ShebangLineContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFileAnnotation(KotlinParser.FileAnnotationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFileAnnotation(KotlinParser.FileAnnotationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPackageHeader(KotlinParser.PackageHeaderContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPackageHeader(KotlinParser.PackageHeaderContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterImportList(KotlinParser.ImportListContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitImportList(KotlinParser.ImportListContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterImportHeader(KotlinParser.ImportHeaderContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitImportHeader(KotlinParser.ImportHeaderContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterImportAlias(KotlinParser.ImportAliasContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitImportAlias(KotlinParser.ImportAliasContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTopLevelObject(KotlinParser.TopLevelObjectContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTopLevelObject(KotlinParser.TopLevelObjectContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTypeAlias(KotlinParser.TypeAliasContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTypeAlias(KotlinParser.TypeAliasContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDeclaration(KotlinParser.DeclarationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDeclaration(KotlinParser.DeclarationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterClassDeclaration(KotlinParser.ClassDeclarationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitClassDeclaration(KotlinParser.ClassDeclarationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPrimaryConstructor(KotlinParser.PrimaryConstructorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPrimaryConstructor(KotlinParser.PrimaryConstructorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterClassBody(KotlinParser.ClassBodyContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitClassBody(KotlinParser.ClassBodyContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterClassParameters(KotlinParser.ClassParametersContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitClassParameters(KotlinParser.ClassParametersContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterClassParameter(KotlinParser.ClassParameterContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitClassParameter(KotlinParser.ClassParameterContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDelegationSpecifiers(KotlinParser.DelegationSpecifiersContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDelegationSpecifiers(KotlinParser.DelegationSpecifiersContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDelegationSpecifier(KotlinParser.DelegationSpecifierContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDelegationSpecifier(KotlinParser.DelegationSpecifierContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterConstructorInvocation(KotlinParser.ConstructorInvocationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitConstructorInvocation(KotlinParser.ConstructorInvocationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAnnotatedDelegationSpecifier(KotlinParser.AnnotatedDelegationSpecifierContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAnnotatedDelegationSpecifier(KotlinParser.AnnotatedDelegationSpecifierContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterExplicitDelegation(KotlinParser.ExplicitDelegationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitExplicitDelegation(KotlinParser.ExplicitDelegationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTypeParameters(KotlinParser.TypeParametersContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTypeParameters(KotlinParser.TypeParametersContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTypeParameter(KotlinParser.TypeParameterContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTypeParameter(KotlinParser.TypeParameterContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTypeConstraints(KotlinParser.TypeConstraintsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTypeConstraints(KotlinParser.TypeConstraintsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTypeConstraint(KotlinParser.TypeConstraintContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTypeConstraint(KotlinParser.TypeConstraintContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterClassMemberDeclarations(KotlinParser.ClassMemberDeclarationsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitClassMemberDeclarations(KotlinParser.ClassMemberDeclarationsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterClassMemberDeclaration(KotlinParser.ClassMemberDeclarationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitClassMemberDeclaration(KotlinParser.ClassMemberDeclarationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAnonymousInitializer(KotlinParser.AnonymousInitializerContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAnonymousInitializer(KotlinParser.AnonymousInitializerContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCompanionObject(KotlinParser.CompanionObjectContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCompanionObject(KotlinParser.CompanionObjectContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFunctionValueParameters(KotlinParser.FunctionValueParametersContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFunctionValueParameters(KotlinParser.FunctionValueParametersContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFunctionValueParameter(KotlinParser.FunctionValueParameterContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFunctionValueParameter(KotlinParser.FunctionValueParameterContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFunctionDeclaration(KotlinParser.FunctionDeclarationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFunctionDeclaration(KotlinParser.FunctionDeclarationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFunctionBody(KotlinParser.FunctionBodyContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFunctionBody(KotlinParser.FunctionBodyContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterVariableDeclaration(KotlinParser.VariableDeclarationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitVariableDeclaration(KotlinParser.VariableDeclarationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterMultiVariableDeclaration(KotlinParser.MultiVariableDeclarationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitMultiVariableDeclaration(KotlinParser.MultiVariableDeclarationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPropertyDeclaration(KotlinParser.PropertyDeclarationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPropertyDeclaration(KotlinParser.PropertyDeclarationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPropertyDelegate(KotlinParser.PropertyDelegateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPropertyDelegate(KotlinParser.PropertyDelegateContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterGetter(KotlinParser.GetterContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitGetter(KotlinParser.GetterContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSetter(KotlinParser.SetterContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSetter(KotlinParser.SetterContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterParametersWithOptionalType(KotlinParser.ParametersWithOptionalTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitParametersWithOptionalType(KotlinParser.ParametersWithOptionalTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFunctionValueParameterWithOptionalType(KotlinParser.FunctionValueParameterWithOptionalTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFunctionValueParameterWithOptionalType(KotlinParser.FunctionValueParameterWithOptionalTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterParameterWithOptionalType(KotlinParser.ParameterWithOptionalTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitParameterWithOptionalType(KotlinParser.ParameterWithOptionalTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterParameter(KotlinParser.ParameterContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitParameter(KotlinParser.ParameterContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterObjectDeclaration(KotlinParser.ObjectDeclarationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitObjectDeclaration(KotlinParser.ObjectDeclarationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSecondaryConstructor(KotlinParser.SecondaryConstructorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSecondaryConstructor(KotlinParser.SecondaryConstructorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterConstructorDelegationCall(KotlinParser.ConstructorDelegationCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitConstructorDelegationCall(KotlinParser.ConstructorDelegationCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterEnumClassBody(KotlinParser.EnumClassBodyContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitEnumClassBody(KotlinParser.EnumClassBodyContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterEnumEntries(KotlinParser.EnumEntriesContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitEnumEntries(KotlinParser.EnumEntriesContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterEnumEntry(KotlinParser.EnumEntryContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitEnumEntry(KotlinParser.EnumEntryContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterType(KotlinParser.TypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitType(KotlinParser.TypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTypeReference(KotlinParser.TypeReferenceContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTypeReference(KotlinParser.TypeReferenceContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterNullableType(KotlinParser.NullableTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitNullableType(KotlinParser.NullableTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterQuest(KotlinParser.QuestContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitQuest(KotlinParser.QuestContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterUserType(KotlinParser.UserTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitUserType(KotlinParser.UserTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSimpleUserType(KotlinParser.SimpleUserTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSimpleUserType(KotlinParser.SimpleUserTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTypeProjection(KotlinParser.TypeProjectionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTypeProjection(KotlinParser.TypeProjectionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTypeProjectionModifiers(KotlinParser.TypeProjectionModifiersContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTypeProjectionModifiers(KotlinParser.TypeProjectionModifiersContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTypeProjectionModifier(KotlinParser.TypeProjectionModifierContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTypeProjectionModifier(KotlinParser.TypeProjectionModifierContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFunctionType(KotlinParser.FunctionTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFunctionType(KotlinParser.FunctionTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFunctionTypeParameters(KotlinParser.FunctionTypeParametersContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFunctionTypeParameters(KotlinParser.FunctionTypeParametersContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterParenthesizedType(KotlinParser.ParenthesizedTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitParenthesizedType(KotlinParser.ParenthesizedTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterReceiverType(KotlinParser.ReceiverTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitReceiverType(KotlinParser.ReceiverTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterParenthesizedUserType(KotlinParser.ParenthesizedUserTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitParenthesizedUserType(KotlinParser.ParenthesizedUserTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterStatements(KotlinParser.StatementsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitStatements(KotlinParser.StatementsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterStatement(KotlinParser.StatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitStatement(KotlinParser.StatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterLabel(KotlinParser.LabelContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitLabel(KotlinParser.LabelContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterControlStructureBody(KotlinParser.ControlStructureBodyContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitControlStructureBody(KotlinParser.ControlStructureBodyContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterBlock(KotlinParser.BlockContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitBlock(KotlinParser.BlockContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterLoopStatement(KotlinParser.LoopStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitLoopStatement(KotlinParser.LoopStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterForStatement(KotlinParser.ForStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitForStatement(KotlinParser.ForStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterWhileStatement(KotlinParser.WhileStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitWhileStatement(KotlinParser.WhileStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDoWhileStatement(KotlinParser.DoWhileStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDoWhileStatement(KotlinParser.DoWhileStatementContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAssignment(KotlinParser.AssignmentContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAssignment(KotlinParser.AssignmentContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSemi(KotlinParser.SemiContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSemi(KotlinParser.SemiContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSemis(KotlinParser.SemisContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSemis(KotlinParser.SemisContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterExpression(KotlinParser.ExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitExpression(KotlinParser.ExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDisjunction(KotlinParser.DisjunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDisjunction(KotlinParser.DisjunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterConjunction(KotlinParser.ConjunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitConjunction(KotlinParser.ConjunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterEquality(KotlinParser.EqualityContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitEquality(KotlinParser.EqualityContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterComparison(KotlinParser.ComparisonContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitComparison(KotlinParser.ComparisonContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterGenericCallLikeComparison(KotlinParser.GenericCallLikeComparisonContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitGenericCallLikeComparison(KotlinParser.GenericCallLikeComparisonContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterInfixOperation(KotlinParser.InfixOperationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitInfixOperation(KotlinParser.InfixOperationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterElvisExpression(KotlinParser.ElvisExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitElvisExpression(KotlinParser.ElvisExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterElvis(KotlinParser.ElvisContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitElvis(KotlinParser.ElvisContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterInfixFunctionCall(KotlinParser.InfixFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitInfixFunctionCall(KotlinParser.InfixFunctionCallContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterRangeExpression(KotlinParser.RangeExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitRangeExpression(KotlinParser.RangeExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAdditiveExpression(KotlinParser.AdditiveExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAdditiveExpression(KotlinParser.AdditiveExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterMultiplicativeExpression(KotlinParser.MultiplicativeExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitMultiplicativeExpression(KotlinParser.MultiplicativeExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAsExpression(KotlinParser.AsExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAsExpression(KotlinParser.AsExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPrefixUnaryExpression(KotlinParser.PrefixUnaryExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPrefixUnaryExpression(KotlinParser.PrefixUnaryExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterUnaryPrefix(KotlinParser.UnaryPrefixContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitUnaryPrefix(KotlinParser.UnaryPrefixContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPostfixUnaryExpression(KotlinParser.PostfixUnaryExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPostfixUnaryExpression(KotlinParser.PostfixUnaryExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPostfixUnarySuffix(KotlinParser.PostfixUnarySuffixContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPostfixUnarySuffix(KotlinParser.PostfixUnarySuffixContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDirectlyAssignableExpression(KotlinParser.DirectlyAssignableExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDirectlyAssignableExpression(KotlinParser.DirectlyAssignableExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterParenthesizedDirectlyAssignableExpression(KotlinParser.ParenthesizedDirectlyAssignableExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitParenthesizedDirectlyAssignableExpression(KotlinParser.ParenthesizedDirectlyAssignableExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAssignableExpression(KotlinParser.AssignableExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAssignableExpression(KotlinParser.AssignableExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterParenthesizedAssignableExpression(KotlinParser.ParenthesizedAssignableExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitParenthesizedAssignableExpression(KotlinParser.ParenthesizedAssignableExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAssignableSuffix(KotlinParser.AssignableSuffixContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAssignableSuffix(KotlinParser.AssignableSuffixContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterIndexingSuffix(KotlinParser.IndexingSuffixContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitIndexingSuffix(KotlinParser.IndexingSuffixContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterNavigationSuffix(KotlinParser.NavigationSuffixContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitNavigationSuffix(KotlinParser.NavigationSuffixContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCallSuffix(KotlinParser.CallSuffixContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCallSuffix(KotlinParser.CallSuffixContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAnnotatedLambda(KotlinParser.AnnotatedLambdaContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAnnotatedLambda(KotlinParser.AnnotatedLambdaContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTypeArguments(KotlinParser.TypeArgumentsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTypeArguments(KotlinParser.TypeArgumentsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterValueArguments(KotlinParser.ValueArgumentsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitValueArguments(KotlinParser.ValueArgumentsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterValueArgument(KotlinParser.ValueArgumentContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitValueArgument(KotlinParser.ValueArgumentContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPrimaryExpression(KotlinParser.PrimaryExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPrimaryExpression(KotlinParser.PrimaryExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterParenthesizedExpression(KotlinParser.ParenthesizedExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitParenthesizedExpression(KotlinParser.ParenthesizedExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCollectionLiteral(KotlinParser.CollectionLiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCollectionLiteral(KotlinParser.CollectionLiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterLiteralConstant(KotlinParser.LiteralConstantContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitLiteralConstant(KotlinParser.LiteralConstantContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterStringLiteral(KotlinParser.StringLiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitStringLiteral(KotlinParser.StringLiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterLineStringLiteral(KotlinParser.LineStringLiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitLineStringLiteral(KotlinParser.LineStringLiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterMultiLineStringLiteral(KotlinParser.MultiLineStringLiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitMultiLineStringLiteral(KotlinParser.MultiLineStringLiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterLineStringContent(KotlinParser.LineStringContentContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitLineStringContent(KotlinParser.LineStringContentContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterLineStringExpression(KotlinParser.LineStringExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitLineStringExpression(KotlinParser.LineStringExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterMultiLineStringContent(KotlinParser.MultiLineStringContentContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitMultiLineStringContent(KotlinParser.MultiLineStringContentContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterMultiLineStringExpression(KotlinParser.MultiLineStringExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitMultiLineStringExpression(KotlinParser.MultiLineStringExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterLambdaLiteral(KotlinParser.LambdaLiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitLambdaLiteral(KotlinParser.LambdaLiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterLambdaParameters(KotlinParser.LambdaParametersContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitLambdaParameters(KotlinParser.LambdaParametersContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterLambdaParameter(KotlinParser.LambdaParameterContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitLambdaParameter(KotlinParser.LambdaParameterContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAnonymousFunction(KotlinParser.AnonymousFunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAnonymousFunction(KotlinParser.AnonymousFunctionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFunctionLiteral(KotlinParser.FunctionLiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFunctionLiteral(KotlinParser.FunctionLiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterObjectLiteral(KotlinParser.ObjectLiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitObjectLiteral(KotlinParser.ObjectLiteralContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterThisExpression(KotlinParser.ThisExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitThisExpression(KotlinParser.ThisExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSuperExpression(KotlinParser.SuperExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSuperExpression(KotlinParser.SuperExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterIfExpression(KotlinParser.IfExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitIfExpression(KotlinParser.IfExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterWhenSubject(KotlinParser.WhenSubjectContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitWhenSubject(KotlinParser.WhenSubjectContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterWhenExpression(KotlinParser.WhenExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitWhenExpression(KotlinParser.WhenExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterWhenEntry(KotlinParser.WhenEntryContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitWhenEntry(KotlinParser.WhenEntryContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterWhenCondition(KotlinParser.WhenConditionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitWhenCondition(KotlinParser.WhenConditionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterRangeTest(KotlinParser.RangeTestContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitRangeTest(KotlinParser.RangeTestContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTypeTest(KotlinParser.TypeTestContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTypeTest(KotlinParser.TypeTestContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTryExpression(KotlinParser.TryExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTryExpression(KotlinParser.TryExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCatchBlock(KotlinParser.CatchBlockContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCatchBlock(KotlinParser.CatchBlockContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFinallyBlock(KotlinParser.FinallyBlockContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFinallyBlock(KotlinParser.FinallyBlockContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterJumpExpression(KotlinParser.JumpExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitJumpExpression(KotlinParser.JumpExpressionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterCallableReference(KotlinParser.CallableReferenceContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitCallableReference(KotlinParser.CallableReferenceContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAssignmentAndOperator(KotlinParser.AssignmentAndOperatorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAssignmentAndOperator(KotlinParser.AssignmentAndOperatorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterEqualityOperator(KotlinParser.EqualityOperatorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitEqualityOperator(KotlinParser.EqualityOperatorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterComparisonOperator(KotlinParser.ComparisonOperatorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitComparisonOperator(KotlinParser.ComparisonOperatorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterInOperator(KotlinParser.InOperatorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitInOperator(KotlinParser.InOperatorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterIsOperator(KotlinParser.IsOperatorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitIsOperator(KotlinParser.IsOperatorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAdditiveOperator(KotlinParser.AdditiveOperatorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAdditiveOperator(KotlinParser.AdditiveOperatorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterMultiplicativeOperator(KotlinParser.MultiplicativeOperatorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitMultiplicativeOperator(KotlinParser.MultiplicativeOperatorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAsOperator(KotlinParser.AsOperatorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAsOperator(KotlinParser.AsOperatorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPrefixUnaryOperator(KotlinParser.PrefixUnaryOperatorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPrefixUnaryOperator(KotlinParser.PrefixUnaryOperatorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPostfixUnaryOperator(KotlinParser.PostfixUnaryOperatorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPostfixUnaryOperator(KotlinParser.PostfixUnaryOperatorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterExcl(KotlinParser.ExclContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitExcl(KotlinParser.ExclContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterMemberAccessOperator(KotlinParser.MemberAccessOperatorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitMemberAccessOperator(KotlinParser.MemberAccessOperatorContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSafeNav(KotlinParser.SafeNavContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSafeNav(KotlinParser.SafeNavContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterModifiers(KotlinParser.ModifiersContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitModifiers(KotlinParser.ModifiersContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterParameterModifiers(KotlinParser.ParameterModifiersContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitParameterModifiers(KotlinParser.ParameterModifiersContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterModifier(KotlinParser.ModifierContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitModifier(KotlinParser.ModifierContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTypeModifiers(KotlinParser.TypeModifiersContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTypeModifiers(KotlinParser.TypeModifiersContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTypeModifier(KotlinParser.TypeModifierContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTypeModifier(KotlinParser.TypeModifierContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterClassModifier(KotlinParser.ClassModifierContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitClassModifier(KotlinParser.ClassModifierContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterMemberModifier(KotlinParser.MemberModifierContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitMemberModifier(KotlinParser.MemberModifierContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterVisibilityModifier(KotlinParser.VisibilityModifierContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitVisibilityModifier(KotlinParser.VisibilityModifierContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterVarianceModifier(KotlinParser.VarianceModifierContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitVarianceModifier(KotlinParser.VarianceModifierContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTypeParameterModifiers(KotlinParser.TypeParameterModifiersContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTypeParameterModifiers(KotlinParser.TypeParameterModifiersContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTypeParameterModifier(KotlinParser.TypeParameterModifierContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTypeParameterModifier(KotlinParser.TypeParameterModifierContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFunctionModifier(KotlinParser.FunctionModifierContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFunctionModifier(KotlinParser.FunctionModifierContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPropertyModifier(KotlinParser.PropertyModifierContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPropertyModifier(KotlinParser.PropertyModifierContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterInheritanceModifier(KotlinParser.InheritanceModifierContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitInheritanceModifier(KotlinParser.InheritanceModifierContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterParameterModifier(KotlinParser.ParameterModifierContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitParameterModifier(KotlinParser.ParameterModifierContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterReificationModifier(KotlinParser.ReificationModifierContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitReificationModifier(KotlinParser.ReificationModifierContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterPlatformModifier(KotlinParser.PlatformModifierContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitPlatformModifier(KotlinParser.PlatformModifierContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAnnotation(KotlinParser.AnnotationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAnnotation(KotlinParser.AnnotationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSingleAnnotation(KotlinParser.SingleAnnotationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSingleAnnotation(KotlinParser.SingleAnnotationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterMultiAnnotation(KotlinParser.MultiAnnotationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitMultiAnnotation(KotlinParser.MultiAnnotationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAnnotationUseSiteTarget(KotlinParser.AnnotationUseSiteTargetContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAnnotationUseSiteTarget(KotlinParser.AnnotationUseSiteTargetContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterUnescapedAnnotation(KotlinParser.UnescapedAnnotationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitUnescapedAnnotation(KotlinParser.UnescapedAnnotationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSimpleIdentifier(KotlinParser.SimpleIdentifierContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSimpleIdentifier(KotlinParser.SimpleIdentifierContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterIdentifier(KotlinParser.IdentifierContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitIdentifier(KotlinParser.IdentifierContext ctx) { } + + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterEveryRule(ParserRuleContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitEveryRule(ParserRuleContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void visitTerminal(TerminalNode node) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void visitErrorNode(ErrorNode node) { } +} \ No newline at end of file diff --git a/lexers/src/main/java/com/itsaky/androidide/lexers/kotlin/KotlinParserListener.java b/lexers/src/main/java/com/itsaky/androidide/lexers/kotlin/KotlinParserListener.java new file mode 100644 index 000000000..f6c5541d9 --- /dev/null +++ b/lexers/src/main/java/com/itsaky/androidide/lexers/kotlin/KotlinParserListener.java @@ -0,0 +1,1740 @@ +// Generated from KotlinParser.g4 by ANTLR 4.9.2 +package com.itsaky.androidide.lexers.kotlin; +import org.antlr.v4.runtime.tree.ParseTreeListener; + +/** + * This interface defines a complete listener for a parse tree produced by + * {@link KotlinParser}. + */ +public interface KotlinParserListener extends ParseTreeListener { + /** + * Enter a parse tree produced by {@link KotlinParser#kotlinFile}. + * @param ctx the parse tree + */ + void enterKotlinFile(KotlinParser.KotlinFileContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#kotlinFile}. + * @param ctx the parse tree + */ + void exitKotlinFile(KotlinParser.KotlinFileContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#script}. + * @param ctx the parse tree + */ + void enterScript(KotlinParser.ScriptContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#script}. + * @param ctx the parse tree + */ + void exitScript(KotlinParser.ScriptContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#shebangLine}. + * @param ctx the parse tree + */ + void enterShebangLine(KotlinParser.ShebangLineContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#shebangLine}. + * @param ctx the parse tree + */ + void exitShebangLine(KotlinParser.ShebangLineContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#fileAnnotation}. + * @param ctx the parse tree + */ + void enterFileAnnotation(KotlinParser.FileAnnotationContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#fileAnnotation}. + * @param ctx the parse tree + */ + void exitFileAnnotation(KotlinParser.FileAnnotationContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#packageHeader}. + * @param ctx the parse tree + */ + void enterPackageHeader(KotlinParser.PackageHeaderContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#packageHeader}. + * @param ctx the parse tree + */ + void exitPackageHeader(KotlinParser.PackageHeaderContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#importList}. + * @param ctx the parse tree + */ + void enterImportList(KotlinParser.ImportListContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#importList}. + * @param ctx the parse tree + */ + void exitImportList(KotlinParser.ImportListContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#importHeader}. + * @param ctx the parse tree + */ + void enterImportHeader(KotlinParser.ImportHeaderContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#importHeader}. + * @param ctx the parse tree + */ + void exitImportHeader(KotlinParser.ImportHeaderContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#importAlias}. + * @param ctx the parse tree + */ + void enterImportAlias(KotlinParser.ImportAliasContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#importAlias}. + * @param ctx the parse tree + */ + void exitImportAlias(KotlinParser.ImportAliasContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#topLevelObject}. + * @param ctx the parse tree + */ + void enterTopLevelObject(KotlinParser.TopLevelObjectContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#topLevelObject}. + * @param ctx the parse tree + */ + void exitTopLevelObject(KotlinParser.TopLevelObjectContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#typeAlias}. + * @param ctx the parse tree + */ + void enterTypeAlias(KotlinParser.TypeAliasContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#typeAlias}. + * @param ctx the parse tree + */ + void exitTypeAlias(KotlinParser.TypeAliasContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#declaration}. + * @param ctx the parse tree + */ + void enterDeclaration(KotlinParser.DeclarationContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#declaration}. + * @param ctx the parse tree + */ + void exitDeclaration(KotlinParser.DeclarationContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#classDeclaration}. + * @param ctx the parse tree + */ + void enterClassDeclaration(KotlinParser.ClassDeclarationContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#classDeclaration}. + * @param ctx the parse tree + */ + void exitClassDeclaration(KotlinParser.ClassDeclarationContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#primaryConstructor}. + * @param ctx the parse tree + */ + void enterPrimaryConstructor(KotlinParser.PrimaryConstructorContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#primaryConstructor}. + * @param ctx the parse tree + */ + void exitPrimaryConstructor(KotlinParser.PrimaryConstructorContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#classBody}. + * @param ctx the parse tree + */ + void enterClassBody(KotlinParser.ClassBodyContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#classBody}. + * @param ctx the parse tree + */ + void exitClassBody(KotlinParser.ClassBodyContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#classParameters}. + * @param ctx the parse tree + */ + void enterClassParameters(KotlinParser.ClassParametersContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#classParameters}. + * @param ctx the parse tree + */ + void exitClassParameters(KotlinParser.ClassParametersContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#classParameter}. + * @param ctx the parse tree + */ + void enterClassParameter(KotlinParser.ClassParameterContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#classParameter}. + * @param ctx the parse tree + */ + void exitClassParameter(KotlinParser.ClassParameterContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#delegationSpecifiers}. + * @param ctx the parse tree + */ + void enterDelegationSpecifiers(KotlinParser.DelegationSpecifiersContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#delegationSpecifiers}. + * @param ctx the parse tree + */ + void exitDelegationSpecifiers(KotlinParser.DelegationSpecifiersContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#delegationSpecifier}. + * @param ctx the parse tree + */ + void enterDelegationSpecifier(KotlinParser.DelegationSpecifierContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#delegationSpecifier}. + * @param ctx the parse tree + */ + void exitDelegationSpecifier(KotlinParser.DelegationSpecifierContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#constructorInvocation}. + * @param ctx the parse tree + */ + void enterConstructorInvocation(KotlinParser.ConstructorInvocationContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#constructorInvocation}. + * @param ctx the parse tree + */ + void exitConstructorInvocation(KotlinParser.ConstructorInvocationContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#annotatedDelegationSpecifier}. + * @param ctx the parse tree + */ + void enterAnnotatedDelegationSpecifier(KotlinParser.AnnotatedDelegationSpecifierContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#annotatedDelegationSpecifier}. + * @param ctx the parse tree + */ + void exitAnnotatedDelegationSpecifier(KotlinParser.AnnotatedDelegationSpecifierContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#explicitDelegation}. + * @param ctx the parse tree + */ + void enterExplicitDelegation(KotlinParser.ExplicitDelegationContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#explicitDelegation}. + * @param ctx the parse tree + */ + void exitExplicitDelegation(KotlinParser.ExplicitDelegationContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#typeParameters}. + * @param ctx the parse tree + */ + void enterTypeParameters(KotlinParser.TypeParametersContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#typeParameters}. + * @param ctx the parse tree + */ + void exitTypeParameters(KotlinParser.TypeParametersContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#typeParameter}. + * @param ctx the parse tree + */ + void enterTypeParameter(KotlinParser.TypeParameterContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#typeParameter}. + * @param ctx the parse tree + */ + void exitTypeParameter(KotlinParser.TypeParameterContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#typeConstraints}. + * @param ctx the parse tree + */ + void enterTypeConstraints(KotlinParser.TypeConstraintsContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#typeConstraints}. + * @param ctx the parse tree + */ + void exitTypeConstraints(KotlinParser.TypeConstraintsContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#typeConstraint}. + * @param ctx the parse tree + */ + void enterTypeConstraint(KotlinParser.TypeConstraintContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#typeConstraint}. + * @param ctx the parse tree + */ + void exitTypeConstraint(KotlinParser.TypeConstraintContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#classMemberDeclarations}. + * @param ctx the parse tree + */ + void enterClassMemberDeclarations(KotlinParser.ClassMemberDeclarationsContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#classMemberDeclarations}. + * @param ctx the parse tree + */ + void exitClassMemberDeclarations(KotlinParser.ClassMemberDeclarationsContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#classMemberDeclaration}. + * @param ctx the parse tree + */ + void enterClassMemberDeclaration(KotlinParser.ClassMemberDeclarationContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#classMemberDeclaration}. + * @param ctx the parse tree + */ + void exitClassMemberDeclaration(KotlinParser.ClassMemberDeclarationContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#anonymousInitializer}. + * @param ctx the parse tree + */ + void enterAnonymousInitializer(KotlinParser.AnonymousInitializerContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#anonymousInitializer}. + * @param ctx the parse tree + */ + void exitAnonymousInitializer(KotlinParser.AnonymousInitializerContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#companionObject}. + * @param ctx the parse tree + */ + void enterCompanionObject(KotlinParser.CompanionObjectContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#companionObject}. + * @param ctx the parse tree + */ + void exitCompanionObject(KotlinParser.CompanionObjectContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#functionValueParameters}. + * @param ctx the parse tree + */ + void enterFunctionValueParameters(KotlinParser.FunctionValueParametersContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#functionValueParameters}. + * @param ctx the parse tree + */ + void exitFunctionValueParameters(KotlinParser.FunctionValueParametersContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#functionValueParameter}. + * @param ctx the parse tree + */ + void enterFunctionValueParameter(KotlinParser.FunctionValueParameterContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#functionValueParameter}. + * @param ctx the parse tree + */ + void exitFunctionValueParameter(KotlinParser.FunctionValueParameterContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#functionDeclaration}. + * @param ctx the parse tree + */ + void enterFunctionDeclaration(KotlinParser.FunctionDeclarationContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#functionDeclaration}. + * @param ctx the parse tree + */ + void exitFunctionDeclaration(KotlinParser.FunctionDeclarationContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#functionBody}. + * @param ctx the parse tree + */ + void enterFunctionBody(KotlinParser.FunctionBodyContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#functionBody}. + * @param ctx the parse tree + */ + void exitFunctionBody(KotlinParser.FunctionBodyContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#variableDeclaration}. + * @param ctx the parse tree + */ + void enterVariableDeclaration(KotlinParser.VariableDeclarationContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#variableDeclaration}. + * @param ctx the parse tree + */ + void exitVariableDeclaration(KotlinParser.VariableDeclarationContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#multiVariableDeclaration}. + * @param ctx the parse tree + */ + void enterMultiVariableDeclaration(KotlinParser.MultiVariableDeclarationContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#multiVariableDeclaration}. + * @param ctx the parse tree + */ + void exitMultiVariableDeclaration(KotlinParser.MultiVariableDeclarationContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#propertyDeclaration}. + * @param ctx the parse tree + */ + void enterPropertyDeclaration(KotlinParser.PropertyDeclarationContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#propertyDeclaration}. + * @param ctx the parse tree + */ + void exitPropertyDeclaration(KotlinParser.PropertyDeclarationContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#propertyDelegate}. + * @param ctx the parse tree + */ + void enterPropertyDelegate(KotlinParser.PropertyDelegateContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#propertyDelegate}. + * @param ctx the parse tree + */ + void exitPropertyDelegate(KotlinParser.PropertyDelegateContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#getter}. + * @param ctx the parse tree + */ + void enterGetter(KotlinParser.GetterContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#getter}. + * @param ctx the parse tree + */ + void exitGetter(KotlinParser.GetterContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#setter}. + * @param ctx the parse tree + */ + void enterSetter(KotlinParser.SetterContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#setter}. + * @param ctx the parse tree + */ + void exitSetter(KotlinParser.SetterContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#parametersWithOptionalType}. + * @param ctx the parse tree + */ + void enterParametersWithOptionalType(KotlinParser.ParametersWithOptionalTypeContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#parametersWithOptionalType}. + * @param ctx the parse tree + */ + void exitParametersWithOptionalType(KotlinParser.ParametersWithOptionalTypeContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#functionValueParameterWithOptionalType}. + * @param ctx the parse tree + */ + void enterFunctionValueParameterWithOptionalType(KotlinParser.FunctionValueParameterWithOptionalTypeContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#functionValueParameterWithOptionalType}. + * @param ctx the parse tree + */ + void exitFunctionValueParameterWithOptionalType(KotlinParser.FunctionValueParameterWithOptionalTypeContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#parameterWithOptionalType}. + * @param ctx the parse tree + */ + void enterParameterWithOptionalType(KotlinParser.ParameterWithOptionalTypeContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#parameterWithOptionalType}. + * @param ctx the parse tree + */ + void exitParameterWithOptionalType(KotlinParser.ParameterWithOptionalTypeContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#parameter}. + * @param ctx the parse tree + */ + void enterParameter(KotlinParser.ParameterContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#parameter}. + * @param ctx the parse tree + */ + void exitParameter(KotlinParser.ParameterContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#objectDeclaration}. + * @param ctx the parse tree + */ + void enterObjectDeclaration(KotlinParser.ObjectDeclarationContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#objectDeclaration}. + * @param ctx the parse tree + */ + void exitObjectDeclaration(KotlinParser.ObjectDeclarationContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#secondaryConstructor}. + * @param ctx the parse tree + */ + void enterSecondaryConstructor(KotlinParser.SecondaryConstructorContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#secondaryConstructor}. + * @param ctx the parse tree + */ + void exitSecondaryConstructor(KotlinParser.SecondaryConstructorContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#constructorDelegationCall}. + * @param ctx the parse tree + */ + void enterConstructorDelegationCall(KotlinParser.ConstructorDelegationCallContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#constructorDelegationCall}. + * @param ctx the parse tree + */ + void exitConstructorDelegationCall(KotlinParser.ConstructorDelegationCallContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#enumClassBody}. + * @param ctx the parse tree + */ + void enterEnumClassBody(KotlinParser.EnumClassBodyContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#enumClassBody}. + * @param ctx the parse tree + */ + void exitEnumClassBody(KotlinParser.EnumClassBodyContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#enumEntries}. + * @param ctx the parse tree + */ + void enterEnumEntries(KotlinParser.EnumEntriesContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#enumEntries}. + * @param ctx the parse tree + */ + void exitEnumEntries(KotlinParser.EnumEntriesContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#enumEntry}. + * @param ctx the parse tree + */ + void enterEnumEntry(KotlinParser.EnumEntryContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#enumEntry}. + * @param ctx the parse tree + */ + void exitEnumEntry(KotlinParser.EnumEntryContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#type}. + * @param ctx the parse tree + */ + void enterType(KotlinParser.TypeContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#type}. + * @param ctx the parse tree + */ + void exitType(KotlinParser.TypeContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#typeReference}. + * @param ctx the parse tree + */ + void enterTypeReference(KotlinParser.TypeReferenceContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#typeReference}. + * @param ctx the parse tree + */ + void exitTypeReference(KotlinParser.TypeReferenceContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#nullableType}. + * @param ctx the parse tree + */ + void enterNullableType(KotlinParser.NullableTypeContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#nullableType}. + * @param ctx the parse tree + */ + void exitNullableType(KotlinParser.NullableTypeContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#quest}. + * @param ctx the parse tree + */ + void enterQuest(KotlinParser.QuestContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#quest}. + * @param ctx the parse tree + */ + void exitQuest(KotlinParser.QuestContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#userType}. + * @param ctx the parse tree + */ + void enterUserType(KotlinParser.UserTypeContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#userType}. + * @param ctx the parse tree + */ + void exitUserType(KotlinParser.UserTypeContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#simpleUserType}. + * @param ctx the parse tree + */ + void enterSimpleUserType(KotlinParser.SimpleUserTypeContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#simpleUserType}. + * @param ctx the parse tree + */ + void exitSimpleUserType(KotlinParser.SimpleUserTypeContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#typeProjection}. + * @param ctx the parse tree + */ + void enterTypeProjection(KotlinParser.TypeProjectionContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#typeProjection}. + * @param ctx the parse tree + */ + void exitTypeProjection(KotlinParser.TypeProjectionContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#typeProjectionModifiers}. + * @param ctx the parse tree + */ + void enterTypeProjectionModifiers(KotlinParser.TypeProjectionModifiersContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#typeProjectionModifiers}. + * @param ctx the parse tree + */ + void exitTypeProjectionModifiers(KotlinParser.TypeProjectionModifiersContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#typeProjectionModifier}. + * @param ctx the parse tree + */ + void enterTypeProjectionModifier(KotlinParser.TypeProjectionModifierContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#typeProjectionModifier}. + * @param ctx the parse tree + */ + void exitTypeProjectionModifier(KotlinParser.TypeProjectionModifierContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#functionType}. + * @param ctx the parse tree + */ + void enterFunctionType(KotlinParser.FunctionTypeContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#functionType}. + * @param ctx the parse tree + */ + void exitFunctionType(KotlinParser.FunctionTypeContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#functionTypeParameters}. + * @param ctx the parse tree + */ + void enterFunctionTypeParameters(KotlinParser.FunctionTypeParametersContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#functionTypeParameters}. + * @param ctx the parse tree + */ + void exitFunctionTypeParameters(KotlinParser.FunctionTypeParametersContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#parenthesizedType}. + * @param ctx the parse tree + */ + void enterParenthesizedType(KotlinParser.ParenthesizedTypeContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#parenthesizedType}. + * @param ctx the parse tree + */ + void exitParenthesizedType(KotlinParser.ParenthesizedTypeContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#receiverType}. + * @param ctx the parse tree + */ + void enterReceiverType(KotlinParser.ReceiverTypeContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#receiverType}. + * @param ctx the parse tree + */ + void exitReceiverType(KotlinParser.ReceiverTypeContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#parenthesizedUserType}. + * @param ctx the parse tree + */ + void enterParenthesizedUserType(KotlinParser.ParenthesizedUserTypeContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#parenthesizedUserType}. + * @param ctx the parse tree + */ + void exitParenthesizedUserType(KotlinParser.ParenthesizedUserTypeContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#statements}. + * @param ctx the parse tree + */ + void enterStatements(KotlinParser.StatementsContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#statements}. + * @param ctx the parse tree + */ + void exitStatements(KotlinParser.StatementsContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#statement}. + * @param ctx the parse tree + */ + void enterStatement(KotlinParser.StatementContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#statement}. + * @param ctx the parse tree + */ + void exitStatement(KotlinParser.StatementContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#label}. + * @param ctx the parse tree + */ + void enterLabel(KotlinParser.LabelContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#label}. + * @param ctx the parse tree + */ + void exitLabel(KotlinParser.LabelContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#controlStructureBody}. + * @param ctx the parse tree + */ + void enterControlStructureBody(KotlinParser.ControlStructureBodyContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#controlStructureBody}. + * @param ctx the parse tree + */ + void exitControlStructureBody(KotlinParser.ControlStructureBodyContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#block}. + * @param ctx the parse tree + */ + void enterBlock(KotlinParser.BlockContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#block}. + * @param ctx the parse tree + */ + void exitBlock(KotlinParser.BlockContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#loopStatement}. + * @param ctx the parse tree + */ + void enterLoopStatement(KotlinParser.LoopStatementContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#loopStatement}. + * @param ctx the parse tree + */ + void exitLoopStatement(KotlinParser.LoopStatementContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#forStatement}. + * @param ctx the parse tree + */ + void enterForStatement(KotlinParser.ForStatementContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#forStatement}. + * @param ctx the parse tree + */ + void exitForStatement(KotlinParser.ForStatementContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#whileStatement}. + * @param ctx the parse tree + */ + void enterWhileStatement(KotlinParser.WhileStatementContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#whileStatement}. + * @param ctx the parse tree + */ + void exitWhileStatement(KotlinParser.WhileStatementContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#doWhileStatement}. + * @param ctx the parse tree + */ + void enterDoWhileStatement(KotlinParser.DoWhileStatementContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#doWhileStatement}. + * @param ctx the parse tree + */ + void exitDoWhileStatement(KotlinParser.DoWhileStatementContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#assignment}. + * @param ctx the parse tree + */ + void enterAssignment(KotlinParser.AssignmentContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#assignment}. + * @param ctx the parse tree + */ + void exitAssignment(KotlinParser.AssignmentContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#semi}. + * @param ctx the parse tree + */ + void enterSemi(KotlinParser.SemiContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#semi}. + * @param ctx the parse tree + */ + void exitSemi(KotlinParser.SemiContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#semis}. + * @param ctx the parse tree + */ + void enterSemis(KotlinParser.SemisContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#semis}. + * @param ctx the parse tree + */ + void exitSemis(KotlinParser.SemisContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#expression}. + * @param ctx the parse tree + */ + void enterExpression(KotlinParser.ExpressionContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#expression}. + * @param ctx the parse tree + */ + void exitExpression(KotlinParser.ExpressionContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#disjunction}. + * @param ctx the parse tree + */ + void enterDisjunction(KotlinParser.DisjunctionContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#disjunction}. + * @param ctx the parse tree + */ + void exitDisjunction(KotlinParser.DisjunctionContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#conjunction}. + * @param ctx the parse tree + */ + void enterConjunction(KotlinParser.ConjunctionContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#conjunction}. + * @param ctx the parse tree + */ + void exitConjunction(KotlinParser.ConjunctionContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#equality}. + * @param ctx the parse tree + */ + void enterEquality(KotlinParser.EqualityContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#equality}. + * @param ctx the parse tree + */ + void exitEquality(KotlinParser.EqualityContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#comparison}. + * @param ctx the parse tree + */ + void enterComparison(KotlinParser.ComparisonContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#comparison}. + * @param ctx the parse tree + */ + void exitComparison(KotlinParser.ComparisonContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#genericCallLikeComparison}. + * @param ctx the parse tree + */ + void enterGenericCallLikeComparison(KotlinParser.GenericCallLikeComparisonContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#genericCallLikeComparison}. + * @param ctx the parse tree + */ + void exitGenericCallLikeComparison(KotlinParser.GenericCallLikeComparisonContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#infixOperation}. + * @param ctx the parse tree + */ + void enterInfixOperation(KotlinParser.InfixOperationContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#infixOperation}. + * @param ctx the parse tree + */ + void exitInfixOperation(KotlinParser.InfixOperationContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#elvisExpression}. + * @param ctx the parse tree + */ + void enterElvisExpression(KotlinParser.ElvisExpressionContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#elvisExpression}. + * @param ctx the parse tree + */ + void exitElvisExpression(KotlinParser.ElvisExpressionContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#elvis}. + * @param ctx the parse tree + */ + void enterElvis(KotlinParser.ElvisContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#elvis}. + * @param ctx the parse tree + */ + void exitElvis(KotlinParser.ElvisContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#infixFunctionCall}. + * @param ctx the parse tree + */ + void enterInfixFunctionCall(KotlinParser.InfixFunctionCallContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#infixFunctionCall}. + * @param ctx the parse tree + */ + void exitInfixFunctionCall(KotlinParser.InfixFunctionCallContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#rangeExpression}. + * @param ctx the parse tree + */ + void enterRangeExpression(KotlinParser.RangeExpressionContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#rangeExpression}. + * @param ctx the parse tree + */ + void exitRangeExpression(KotlinParser.RangeExpressionContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#additiveExpression}. + * @param ctx the parse tree + */ + void enterAdditiveExpression(KotlinParser.AdditiveExpressionContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#additiveExpression}. + * @param ctx the parse tree + */ + void exitAdditiveExpression(KotlinParser.AdditiveExpressionContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#multiplicativeExpression}. + * @param ctx the parse tree + */ + void enterMultiplicativeExpression(KotlinParser.MultiplicativeExpressionContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#multiplicativeExpression}. + * @param ctx the parse tree + */ + void exitMultiplicativeExpression(KotlinParser.MultiplicativeExpressionContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#asExpression}. + * @param ctx the parse tree + */ + void enterAsExpression(KotlinParser.AsExpressionContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#asExpression}. + * @param ctx the parse tree + */ + void exitAsExpression(KotlinParser.AsExpressionContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#prefixUnaryExpression}. + * @param ctx the parse tree + */ + void enterPrefixUnaryExpression(KotlinParser.PrefixUnaryExpressionContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#prefixUnaryExpression}. + * @param ctx the parse tree + */ + void exitPrefixUnaryExpression(KotlinParser.PrefixUnaryExpressionContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#unaryPrefix}. + * @param ctx the parse tree + */ + void enterUnaryPrefix(KotlinParser.UnaryPrefixContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#unaryPrefix}. + * @param ctx the parse tree + */ + void exitUnaryPrefix(KotlinParser.UnaryPrefixContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#postfixUnaryExpression}. + * @param ctx the parse tree + */ + void enterPostfixUnaryExpression(KotlinParser.PostfixUnaryExpressionContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#postfixUnaryExpression}. + * @param ctx the parse tree + */ + void exitPostfixUnaryExpression(KotlinParser.PostfixUnaryExpressionContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#postfixUnarySuffix}. + * @param ctx the parse tree + */ + void enterPostfixUnarySuffix(KotlinParser.PostfixUnarySuffixContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#postfixUnarySuffix}. + * @param ctx the parse tree + */ + void exitPostfixUnarySuffix(KotlinParser.PostfixUnarySuffixContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#directlyAssignableExpression}. + * @param ctx the parse tree + */ + void enterDirectlyAssignableExpression(KotlinParser.DirectlyAssignableExpressionContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#directlyAssignableExpression}. + * @param ctx the parse tree + */ + void exitDirectlyAssignableExpression(KotlinParser.DirectlyAssignableExpressionContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#parenthesizedDirectlyAssignableExpression}. + * @param ctx the parse tree + */ + void enterParenthesizedDirectlyAssignableExpression(KotlinParser.ParenthesizedDirectlyAssignableExpressionContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#parenthesizedDirectlyAssignableExpression}. + * @param ctx the parse tree + */ + void exitParenthesizedDirectlyAssignableExpression(KotlinParser.ParenthesizedDirectlyAssignableExpressionContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#assignableExpression}. + * @param ctx the parse tree + */ + void enterAssignableExpression(KotlinParser.AssignableExpressionContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#assignableExpression}. + * @param ctx the parse tree + */ + void exitAssignableExpression(KotlinParser.AssignableExpressionContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#parenthesizedAssignableExpression}. + * @param ctx the parse tree + */ + void enterParenthesizedAssignableExpression(KotlinParser.ParenthesizedAssignableExpressionContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#parenthesizedAssignableExpression}. + * @param ctx the parse tree + */ + void exitParenthesizedAssignableExpression(KotlinParser.ParenthesizedAssignableExpressionContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#assignableSuffix}. + * @param ctx the parse tree + */ + void enterAssignableSuffix(KotlinParser.AssignableSuffixContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#assignableSuffix}. + * @param ctx the parse tree + */ + void exitAssignableSuffix(KotlinParser.AssignableSuffixContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#indexingSuffix}. + * @param ctx the parse tree + */ + void enterIndexingSuffix(KotlinParser.IndexingSuffixContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#indexingSuffix}. + * @param ctx the parse tree + */ + void exitIndexingSuffix(KotlinParser.IndexingSuffixContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#navigationSuffix}. + * @param ctx the parse tree + */ + void enterNavigationSuffix(KotlinParser.NavigationSuffixContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#navigationSuffix}. + * @param ctx the parse tree + */ + void exitNavigationSuffix(KotlinParser.NavigationSuffixContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#callSuffix}. + * @param ctx the parse tree + */ + void enterCallSuffix(KotlinParser.CallSuffixContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#callSuffix}. + * @param ctx the parse tree + */ + void exitCallSuffix(KotlinParser.CallSuffixContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#annotatedLambda}. + * @param ctx the parse tree + */ + void enterAnnotatedLambda(KotlinParser.AnnotatedLambdaContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#annotatedLambda}. + * @param ctx the parse tree + */ + void exitAnnotatedLambda(KotlinParser.AnnotatedLambdaContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#typeArguments}. + * @param ctx the parse tree + */ + void enterTypeArguments(KotlinParser.TypeArgumentsContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#typeArguments}. + * @param ctx the parse tree + */ + void exitTypeArguments(KotlinParser.TypeArgumentsContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#valueArguments}. + * @param ctx the parse tree + */ + void enterValueArguments(KotlinParser.ValueArgumentsContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#valueArguments}. + * @param ctx the parse tree + */ + void exitValueArguments(KotlinParser.ValueArgumentsContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#valueArgument}. + * @param ctx the parse tree + */ + void enterValueArgument(KotlinParser.ValueArgumentContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#valueArgument}. + * @param ctx the parse tree + */ + void exitValueArgument(KotlinParser.ValueArgumentContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#primaryExpression}. + * @param ctx the parse tree + */ + void enterPrimaryExpression(KotlinParser.PrimaryExpressionContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#primaryExpression}. + * @param ctx the parse tree + */ + void exitPrimaryExpression(KotlinParser.PrimaryExpressionContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#parenthesizedExpression}. + * @param ctx the parse tree + */ + void enterParenthesizedExpression(KotlinParser.ParenthesizedExpressionContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#parenthesizedExpression}. + * @param ctx the parse tree + */ + void exitParenthesizedExpression(KotlinParser.ParenthesizedExpressionContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#collectionLiteral}. + * @param ctx the parse tree + */ + void enterCollectionLiteral(KotlinParser.CollectionLiteralContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#collectionLiteral}. + * @param ctx the parse tree + */ + void exitCollectionLiteral(KotlinParser.CollectionLiteralContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#literalConstant}. + * @param ctx the parse tree + */ + void enterLiteralConstant(KotlinParser.LiteralConstantContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#literalConstant}. + * @param ctx the parse tree + */ + void exitLiteralConstant(KotlinParser.LiteralConstantContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#stringLiteral}. + * @param ctx the parse tree + */ + void enterStringLiteral(KotlinParser.StringLiteralContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#stringLiteral}. + * @param ctx the parse tree + */ + void exitStringLiteral(KotlinParser.StringLiteralContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#lineStringLiteral}. + * @param ctx the parse tree + */ + void enterLineStringLiteral(KotlinParser.LineStringLiteralContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#lineStringLiteral}. + * @param ctx the parse tree + */ + void exitLineStringLiteral(KotlinParser.LineStringLiteralContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#multiLineStringLiteral}. + * @param ctx the parse tree + */ + void enterMultiLineStringLiteral(KotlinParser.MultiLineStringLiteralContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#multiLineStringLiteral}. + * @param ctx the parse tree + */ + void exitMultiLineStringLiteral(KotlinParser.MultiLineStringLiteralContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#lineStringContent}. + * @param ctx the parse tree + */ + void enterLineStringContent(KotlinParser.LineStringContentContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#lineStringContent}. + * @param ctx the parse tree + */ + void exitLineStringContent(KotlinParser.LineStringContentContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#lineStringExpression}. + * @param ctx the parse tree + */ + void enterLineStringExpression(KotlinParser.LineStringExpressionContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#lineStringExpression}. + * @param ctx the parse tree + */ + void exitLineStringExpression(KotlinParser.LineStringExpressionContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#multiLineStringContent}. + * @param ctx the parse tree + */ + void enterMultiLineStringContent(KotlinParser.MultiLineStringContentContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#multiLineStringContent}. + * @param ctx the parse tree + */ + void exitMultiLineStringContent(KotlinParser.MultiLineStringContentContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#multiLineStringExpression}. + * @param ctx the parse tree + */ + void enterMultiLineStringExpression(KotlinParser.MultiLineStringExpressionContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#multiLineStringExpression}. + * @param ctx the parse tree + */ + void exitMultiLineStringExpression(KotlinParser.MultiLineStringExpressionContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#lambdaLiteral}. + * @param ctx the parse tree + */ + void enterLambdaLiteral(KotlinParser.LambdaLiteralContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#lambdaLiteral}. + * @param ctx the parse tree + */ + void exitLambdaLiteral(KotlinParser.LambdaLiteralContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#lambdaParameters}. + * @param ctx the parse tree + */ + void enterLambdaParameters(KotlinParser.LambdaParametersContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#lambdaParameters}. + * @param ctx the parse tree + */ + void exitLambdaParameters(KotlinParser.LambdaParametersContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#lambdaParameter}. + * @param ctx the parse tree + */ + void enterLambdaParameter(KotlinParser.LambdaParameterContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#lambdaParameter}. + * @param ctx the parse tree + */ + void exitLambdaParameter(KotlinParser.LambdaParameterContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#anonymousFunction}. + * @param ctx the parse tree + */ + void enterAnonymousFunction(KotlinParser.AnonymousFunctionContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#anonymousFunction}. + * @param ctx the parse tree + */ + void exitAnonymousFunction(KotlinParser.AnonymousFunctionContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#functionLiteral}. + * @param ctx the parse tree + */ + void enterFunctionLiteral(KotlinParser.FunctionLiteralContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#functionLiteral}. + * @param ctx the parse tree + */ + void exitFunctionLiteral(KotlinParser.FunctionLiteralContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#objectLiteral}. + * @param ctx the parse tree + */ + void enterObjectLiteral(KotlinParser.ObjectLiteralContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#objectLiteral}. + * @param ctx the parse tree + */ + void exitObjectLiteral(KotlinParser.ObjectLiteralContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#thisExpression}. + * @param ctx the parse tree + */ + void enterThisExpression(KotlinParser.ThisExpressionContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#thisExpression}. + * @param ctx the parse tree + */ + void exitThisExpression(KotlinParser.ThisExpressionContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#superExpression}. + * @param ctx the parse tree + */ + void enterSuperExpression(KotlinParser.SuperExpressionContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#superExpression}. + * @param ctx the parse tree + */ + void exitSuperExpression(KotlinParser.SuperExpressionContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#ifExpression}. + * @param ctx the parse tree + */ + void enterIfExpression(KotlinParser.IfExpressionContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#ifExpression}. + * @param ctx the parse tree + */ + void exitIfExpression(KotlinParser.IfExpressionContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#whenSubject}. + * @param ctx the parse tree + */ + void enterWhenSubject(KotlinParser.WhenSubjectContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#whenSubject}. + * @param ctx the parse tree + */ + void exitWhenSubject(KotlinParser.WhenSubjectContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#whenExpression}. + * @param ctx the parse tree + */ + void enterWhenExpression(KotlinParser.WhenExpressionContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#whenExpression}. + * @param ctx the parse tree + */ + void exitWhenExpression(KotlinParser.WhenExpressionContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#whenEntry}. + * @param ctx the parse tree + */ + void enterWhenEntry(KotlinParser.WhenEntryContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#whenEntry}. + * @param ctx the parse tree + */ + void exitWhenEntry(KotlinParser.WhenEntryContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#whenCondition}. + * @param ctx the parse tree + */ + void enterWhenCondition(KotlinParser.WhenConditionContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#whenCondition}. + * @param ctx the parse tree + */ + void exitWhenCondition(KotlinParser.WhenConditionContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#rangeTest}. + * @param ctx the parse tree + */ + void enterRangeTest(KotlinParser.RangeTestContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#rangeTest}. + * @param ctx the parse tree + */ + void exitRangeTest(KotlinParser.RangeTestContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#typeTest}. + * @param ctx the parse tree + */ + void enterTypeTest(KotlinParser.TypeTestContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#typeTest}. + * @param ctx the parse tree + */ + void exitTypeTest(KotlinParser.TypeTestContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#tryExpression}. + * @param ctx the parse tree + */ + void enterTryExpression(KotlinParser.TryExpressionContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#tryExpression}. + * @param ctx the parse tree + */ + void exitTryExpression(KotlinParser.TryExpressionContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#catchBlock}. + * @param ctx the parse tree + */ + void enterCatchBlock(KotlinParser.CatchBlockContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#catchBlock}. + * @param ctx the parse tree + */ + void exitCatchBlock(KotlinParser.CatchBlockContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#finallyBlock}. + * @param ctx the parse tree + */ + void enterFinallyBlock(KotlinParser.FinallyBlockContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#finallyBlock}. + * @param ctx the parse tree + */ + void exitFinallyBlock(KotlinParser.FinallyBlockContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#jumpExpression}. + * @param ctx the parse tree + */ + void enterJumpExpression(KotlinParser.JumpExpressionContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#jumpExpression}. + * @param ctx the parse tree + */ + void exitJumpExpression(KotlinParser.JumpExpressionContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#callableReference}. + * @param ctx the parse tree + */ + void enterCallableReference(KotlinParser.CallableReferenceContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#callableReference}. + * @param ctx the parse tree + */ + void exitCallableReference(KotlinParser.CallableReferenceContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#assignmentAndOperator}. + * @param ctx the parse tree + */ + void enterAssignmentAndOperator(KotlinParser.AssignmentAndOperatorContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#assignmentAndOperator}. + * @param ctx the parse tree + */ + void exitAssignmentAndOperator(KotlinParser.AssignmentAndOperatorContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#equalityOperator}. + * @param ctx the parse tree + */ + void enterEqualityOperator(KotlinParser.EqualityOperatorContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#equalityOperator}. + * @param ctx the parse tree + */ + void exitEqualityOperator(KotlinParser.EqualityOperatorContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#comparisonOperator}. + * @param ctx the parse tree + */ + void enterComparisonOperator(KotlinParser.ComparisonOperatorContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#comparisonOperator}. + * @param ctx the parse tree + */ + void exitComparisonOperator(KotlinParser.ComparisonOperatorContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#inOperator}. + * @param ctx the parse tree + */ + void enterInOperator(KotlinParser.InOperatorContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#inOperator}. + * @param ctx the parse tree + */ + void exitInOperator(KotlinParser.InOperatorContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#isOperator}. + * @param ctx the parse tree + */ + void enterIsOperator(KotlinParser.IsOperatorContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#isOperator}. + * @param ctx the parse tree + */ + void exitIsOperator(KotlinParser.IsOperatorContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#additiveOperator}. + * @param ctx the parse tree + */ + void enterAdditiveOperator(KotlinParser.AdditiveOperatorContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#additiveOperator}. + * @param ctx the parse tree + */ + void exitAdditiveOperator(KotlinParser.AdditiveOperatorContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#multiplicativeOperator}. + * @param ctx the parse tree + */ + void enterMultiplicativeOperator(KotlinParser.MultiplicativeOperatorContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#multiplicativeOperator}. + * @param ctx the parse tree + */ + void exitMultiplicativeOperator(KotlinParser.MultiplicativeOperatorContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#asOperator}. + * @param ctx the parse tree + */ + void enterAsOperator(KotlinParser.AsOperatorContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#asOperator}. + * @param ctx the parse tree + */ + void exitAsOperator(KotlinParser.AsOperatorContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#prefixUnaryOperator}. + * @param ctx the parse tree + */ + void enterPrefixUnaryOperator(KotlinParser.PrefixUnaryOperatorContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#prefixUnaryOperator}. + * @param ctx the parse tree + */ + void exitPrefixUnaryOperator(KotlinParser.PrefixUnaryOperatorContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#postfixUnaryOperator}. + * @param ctx the parse tree + */ + void enterPostfixUnaryOperator(KotlinParser.PostfixUnaryOperatorContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#postfixUnaryOperator}. + * @param ctx the parse tree + */ + void exitPostfixUnaryOperator(KotlinParser.PostfixUnaryOperatorContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#excl}. + * @param ctx the parse tree + */ + void enterExcl(KotlinParser.ExclContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#excl}. + * @param ctx the parse tree + */ + void exitExcl(KotlinParser.ExclContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#memberAccessOperator}. + * @param ctx the parse tree + */ + void enterMemberAccessOperator(KotlinParser.MemberAccessOperatorContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#memberAccessOperator}. + * @param ctx the parse tree + */ + void exitMemberAccessOperator(KotlinParser.MemberAccessOperatorContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#safeNav}. + * @param ctx the parse tree + */ + void enterSafeNav(KotlinParser.SafeNavContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#safeNav}. + * @param ctx the parse tree + */ + void exitSafeNav(KotlinParser.SafeNavContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#modifiers}. + * @param ctx the parse tree + */ + void enterModifiers(KotlinParser.ModifiersContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#modifiers}. + * @param ctx the parse tree + */ + void exitModifiers(KotlinParser.ModifiersContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#parameterModifiers}. + * @param ctx the parse tree + */ + void enterParameterModifiers(KotlinParser.ParameterModifiersContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#parameterModifiers}. + * @param ctx the parse tree + */ + void exitParameterModifiers(KotlinParser.ParameterModifiersContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#modifier}. + * @param ctx the parse tree + */ + void enterModifier(KotlinParser.ModifierContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#modifier}. + * @param ctx the parse tree + */ + void exitModifier(KotlinParser.ModifierContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#typeModifiers}. + * @param ctx the parse tree + */ + void enterTypeModifiers(KotlinParser.TypeModifiersContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#typeModifiers}. + * @param ctx the parse tree + */ + void exitTypeModifiers(KotlinParser.TypeModifiersContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#typeModifier}. + * @param ctx the parse tree + */ + void enterTypeModifier(KotlinParser.TypeModifierContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#typeModifier}. + * @param ctx the parse tree + */ + void exitTypeModifier(KotlinParser.TypeModifierContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#classModifier}. + * @param ctx the parse tree + */ + void enterClassModifier(KotlinParser.ClassModifierContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#classModifier}. + * @param ctx the parse tree + */ + void exitClassModifier(KotlinParser.ClassModifierContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#memberModifier}. + * @param ctx the parse tree + */ + void enterMemberModifier(KotlinParser.MemberModifierContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#memberModifier}. + * @param ctx the parse tree + */ + void exitMemberModifier(KotlinParser.MemberModifierContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#visibilityModifier}. + * @param ctx the parse tree + */ + void enterVisibilityModifier(KotlinParser.VisibilityModifierContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#visibilityModifier}. + * @param ctx the parse tree + */ + void exitVisibilityModifier(KotlinParser.VisibilityModifierContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#varianceModifier}. + * @param ctx the parse tree + */ + void enterVarianceModifier(KotlinParser.VarianceModifierContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#varianceModifier}. + * @param ctx the parse tree + */ + void exitVarianceModifier(KotlinParser.VarianceModifierContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#typeParameterModifiers}. + * @param ctx the parse tree + */ + void enterTypeParameterModifiers(KotlinParser.TypeParameterModifiersContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#typeParameterModifiers}. + * @param ctx the parse tree + */ + void exitTypeParameterModifiers(KotlinParser.TypeParameterModifiersContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#typeParameterModifier}. + * @param ctx the parse tree + */ + void enterTypeParameterModifier(KotlinParser.TypeParameterModifierContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#typeParameterModifier}. + * @param ctx the parse tree + */ + void exitTypeParameterModifier(KotlinParser.TypeParameterModifierContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#functionModifier}. + * @param ctx the parse tree + */ + void enterFunctionModifier(KotlinParser.FunctionModifierContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#functionModifier}. + * @param ctx the parse tree + */ + void exitFunctionModifier(KotlinParser.FunctionModifierContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#propertyModifier}. + * @param ctx the parse tree + */ + void enterPropertyModifier(KotlinParser.PropertyModifierContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#propertyModifier}. + * @param ctx the parse tree + */ + void exitPropertyModifier(KotlinParser.PropertyModifierContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#inheritanceModifier}. + * @param ctx the parse tree + */ + void enterInheritanceModifier(KotlinParser.InheritanceModifierContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#inheritanceModifier}. + * @param ctx the parse tree + */ + void exitInheritanceModifier(KotlinParser.InheritanceModifierContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#parameterModifier}. + * @param ctx the parse tree + */ + void enterParameterModifier(KotlinParser.ParameterModifierContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#parameterModifier}. + * @param ctx the parse tree + */ + void exitParameterModifier(KotlinParser.ParameterModifierContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#reificationModifier}. + * @param ctx the parse tree + */ + void enterReificationModifier(KotlinParser.ReificationModifierContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#reificationModifier}. + * @param ctx the parse tree + */ + void exitReificationModifier(KotlinParser.ReificationModifierContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#platformModifier}. + * @param ctx the parse tree + */ + void enterPlatformModifier(KotlinParser.PlatformModifierContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#platformModifier}. + * @param ctx the parse tree + */ + void exitPlatformModifier(KotlinParser.PlatformModifierContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#annotation}. + * @param ctx the parse tree + */ + void enterAnnotation(KotlinParser.AnnotationContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#annotation}. + * @param ctx the parse tree + */ + void exitAnnotation(KotlinParser.AnnotationContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#singleAnnotation}. + * @param ctx the parse tree + */ + void enterSingleAnnotation(KotlinParser.SingleAnnotationContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#singleAnnotation}. + * @param ctx the parse tree + */ + void exitSingleAnnotation(KotlinParser.SingleAnnotationContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#multiAnnotation}. + * @param ctx the parse tree + */ + void enterMultiAnnotation(KotlinParser.MultiAnnotationContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#multiAnnotation}. + * @param ctx the parse tree + */ + void exitMultiAnnotation(KotlinParser.MultiAnnotationContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#annotationUseSiteTarget}. + * @param ctx the parse tree + */ + void enterAnnotationUseSiteTarget(KotlinParser.AnnotationUseSiteTargetContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#annotationUseSiteTarget}. + * @param ctx the parse tree + */ + void exitAnnotationUseSiteTarget(KotlinParser.AnnotationUseSiteTargetContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#unescapedAnnotation}. + * @param ctx the parse tree + */ + void enterUnescapedAnnotation(KotlinParser.UnescapedAnnotationContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#unescapedAnnotation}. + * @param ctx the parse tree + */ + void exitUnescapedAnnotation(KotlinParser.UnescapedAnnotationContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#simpleIdentifier}. + * @param ctx the parse tree + */ + void enterSimpleIdentifier(KotlinParser.SimpleIdentifierContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#simpleIdentifier}. + * @param ctx the parse tree + */ + void exitSimpleIdentifier(KotlinParser.SimpleIdentifierContext ctx); + /** + * Enter a parse tree produced by {@link KotlinParser#identifier}. + * @param ctx the parse tree + */ + void enterIdentifier(KotlinParser.IdentifierContext ctx); + /** + * Exit a parse tree produced by {@link KotlinParser#identifier}. + * @param ctx the parse tree + */ + void exitIdentifier(KotlinParser.IdentifierContext ctx); +} \ No newline at end of file diff --git a/lexers/src/main/java/com/itsaky/androidide/lexers/kotlin/UnicodeClasses.g4 b/lexers/src/main/java/com/itsaky/androidide/lexers/kotlin/UnicodeClasses.g4 new file mode 100644 index 000000000..537284804 --- /dev/null +++ b/lexers/src/main/java/com/itsaky/androidide/lexers/kotlin/UnicodeClasses.g4 @@ -0,0 +1,1649 @@ +/** + * Kotlin lexical grammar in ANTLR4 notation (Unicode classes) + * + * Taken from http://www.antlr3.org/grammar/1345144569663/AntlrUnicode.txt + */ + +lexer grammar UnicodeClasses; + +UNICODE_CLASS_LL: + '\u0061'..'\u007A' | + '\u00B5' | + '\u00DF'..'\u00F6' | + '\u00F8'..'\u00FF' | + '\u0101' | + '\u0103' | + '\u0105' | + '\u0107' | + '\u0109' | + '\u010B' | + '\u010D' | + '\u010F' | + '\u0111' | + '\u0113' | + '\u0115' | + '\u0117' | + '\u0119' | + '\u011B' | + '\u011D' | + '\u011F' | + '\u0121' | + '\u0123' | + '\u0125' | + '\u0127' | + '\u0129' | + '\u012B' | + '\u012D' | + '\u012F' | + '\u0131' | + '\u0133' | + '\u0135' | + '\u0137' | + '\u0138' | + '\u013A' | + '\u013C' | + '\u013E' | + '\u0140' | + '\u0142' | + '\u0144' | + '\u0146' | + '\u0148' | + '\u0149' | + '\u014B' | + '\u014D' | + '\u014F' | + '\u0151' | + '\u0153' | + '\u0155' | + '\u0157' | + '\u0159' | + '\u015B' | + '\u015D' | + '\u015F' | + '\u0161' | + '\u0163' | + '\u0165' | + '\u0167' | + '\u0169' | + '\u016B' | + '\u016D' | + '\u016F' | + '\u0171' | + '\u0173' | + '\u0175' | + '\u0177' | + '\u017A' | + '\u017C' | + '\u017E'..'\u0180' | + '\u0183' | + '\u0185' | + '\u0188' | + '\u018C' | + '\u018D' | + '\u0192' | + '\u0195' | + '\u0199'..'\u019B' | + '\u019E' | + '\u01A1' | + '\u01A3' | + '\u01A5' | + '\u01A8' | + '\u01AA' | + '\u01AB' | + '\u01AD' | + '\u01B0' | + '\u01B4' | + '\u01B6' | + '\u01B9' | + '\u01BA' | + '\u01BD'..'\u01BF' | + '\u01C6' | + '\u01C9' | + '\u01CC' | + '\u01CE' | + '\u01D0' | + '\u01D2' | + '\u01D4' | + '\u01D6' | + '\u01D8' | + '\u01DA' | + '\u01DC' | + '\u01DD' | + '\u01DF' | + '\u01E1' | + '\u01E3' | + '\u01E5' | + '\u01E7' | + '\u01E9' | + '\u01EB' | + '\u01ED' | + '\u01EF' | + '\u01F0' | + '\u01F3' | + '\u01F5' | + '\u01F9' | + '\u01FB' | + '\u01FD' | + '\u01FF' | + '\u0201' | + '\u0203' | + '\u0205' | + '\u0207' | + '\u0209' | + '\u020B' | + '\u020D' | + '\u020F' | + '\u0211' | + '\u0213' | + '\u0215' | + '\u0217' | + '\u0219' | + '\u021B' | + '\u021D' | + '\u021F' | + '\u0221' | + '\u0223' | + '\u0225' | + '\u0227' | + '\u0229' | + '\u022B' | + '\u022D' | + '\u022F' | + '\u0231' | + '\u0233'..'\u0239' | + '\u023C' | + '\u023F' | + '\u0240' | + '\u0242' | + '\u0247' | + '\u0249' | + '\u024B' | + '\u024D' | + '\u024F'..'\u0293' | + '\u0295'..'\u02AF' | + '\u0371' | + '\u0373' | + '\u0377' | + '\u037B'..'\u037D' | + '\u0390' | + '\u03AC'..'\u03CE' | + '\u03D0' | + '\u03D1' | + '\u03D5'..'\u03D7' | + '\u03D9' | + '\u03DB' | + '\u03DD' | + '\u03DF' | + '\u03E1' | + '\u03E3' | + '\u03E5' | + '\u03E7' | + '\u03E9' | + '\u03EB' | + '\u03ED' | + '\u03EF'..'\u03F3' | + '\u03F5' | + '\u03F8' | + '\u03FB' | + '\u03FC' | + '\u0430'..'\u045F' | + '\u0461' | + '\u0463' | + '\u0465' | + '\u0467' | + '\u0469' | + '\u046B' | + '\u046D' | + '\u046F' | + '\u0471' | + '\u0473' | + '\u0475' | + '\u0477' | + '\u0479' | + '\u047B' | + '\u047D' | + '\u047F' | + '\u0481' | + '\u048B' | + '\u048D' | + '\u048F' | + '\u0491' | + '\u0493' | + '\u0495' | + '\u0497' | + '\u0499' | + '\u049B' | + '\u049D' | + '\u049F' | + '\u04A1' | + '\u04A3' | + '\u04A5' | + '\u04A7' | + '\u04A9' | + '\u04AB' | + '\u04AD' | + '\u04AF' | + '\u04B1' | + '\u04B3' | + '\u04B5' | + '\u04B7' | + '\u04B9' | + '\u04BB' | + '\u04BD' | + '\u04BF' | + '\u04C2' | + '\u04C4' | + '\u04C6' | + '\u04C8' | + '\u04CA' | + '\u04CC' | + '\u04CE' | + '\u04CF' | + '\u04D1' | + '\u04D3' | + '\u04D5' | + '\u04D7' | + '\u04D9' | + '\u04DB' | + '\u04DD' | + '\u04DF' | + '\u04E1' | + '\u04E3' | + '\u04E5' | + '\u04E7' | + '\u04E9' | + '\u04EB' | + '\u04ED' | + '\u04EF' | + '\u04F1' | + '\u04F3' | + '\u04F5' | + '\u04F7' | + '\u04F9' | + '\u04FB' | + '\u04FD' | + '\u04FF' | + '\u0501' | + '\u0503' | + '\u0505' | + '\u0507' | + '\u0509' | + '\u050B' | + '\u050D' | + '\u050F' | + '\u0511' | + '\u0513' | + '\u0515' | + '\u0517' | + '\u0519' | + '\u051B' | + '\u051D' | + '\u051F' | + '\u0521' | + '\u0523' | + '\u0525' | + '\u0527' | + '\u0561'..'\u0587' | + '\u1D00'..'\u1D2B' | + '\u1D6B'..'\u1D77' | + '\u1D79'..'\u1D9A' | + '\u1E01' | + '\u1E03' | + '\u1E05' | + '\u1E07' | + '\u1E09' | + '\u1E0B' | + '\u1E0D' | + '\u1E0F' | + '\u1E11' | + '\u1E13' | + '\u1E15' | + '\u1E17' | + '\u1E19' | + '\u1E1B' | + '\u1E1D' | + '\u1E1F' | + '\u1E21' | + '\u1E23' | + '\u1E25' | + '\u1E27' | + '\u1E29' | + '\u1E2B' | + '\u1E2D' | + '\u1E2F' | + '\u1E31' | + '\u1E33' | + '\u1E35' | + '\u1E37' | + '\u1E39' | + '\u1E3B' | + '\u1E3D' | + '\u1E3F' | + '\u1E41' | + '\u1E43' | + '\u1E45' | + '\u1E47' | + '\u1E49' | + '\u1E4B' | + '\u1E4D' | + '\u1E4F' | + '\u1E51' | + '\u1E53' | + '\u1E55' | + '\u1E57' | + '\u1E59' | + '\u1E5B' | + '\u1E5D' | + '\u1E5F' | + '\u1E61' | + '\u1E63' | + '\u1E65' | + '\u1E67' | + '\u1E69' | + '\u1E6B' | + '\u1E6D' | + '\u1E6F' | + '\u1E71' | + '\u1E73' | + '\u1E75' | + '\u1E77' | + '\u1E79' | + '\u1E7B' | + '\u1E7D' | + '\u1E7F' | + '\u1E81' | + '\u1E83' | + '\u1E85' | + '\u1E87' | + '\u1E89' | + '\u1E8B' | + '\u1E8D' | + '\u1E8F' | + '\u1E91' | + '\u1E93' | + '\u1E95'..'\u1E9D' | + '\u1E9F' | + '\u1EA1' | + '\u1EA3' | + '\u1EA5' | + '\u1EA7' | + '\u1EA9' | + '\u1EAB' | + '\u1EAD' | + '\u1EAF' | + '\u1EB1' | + '\u1EB3' | + '\u1EB5' | + '\u1EB7' | + '\u1EB9' | + '\u1EBB' | + '\u1EBD' | + '\u1EBF' | + '\u1EC1' | + '\u1EC3' | + '\u1EC5' | + '\u1EC7' | + '\u1EC9' | + '\u1ECB' | + '\u1ECD' | + '\u1ECF' | + '\u1ED1' | + '\u1ED3' | + '\u1ED5' | + '\u1ED7' | + '\u1ED9' | + '\u1EDB' | + '\u1EDD' | + '\u1EDF' | + '\u1EE1' | + '\u1EE3' | + '\u1EE5' | + '\u1EE7' | + '\u1EE9' | + '\u1EEB' | + '\u1EED' | + '\u1EEF' | + '\u1EF1' | + '\u1EF3' | + '\u1EF5' | + '\u1EF7' | + '\u1EF9' | + '\u1EFB' | + '\u1EFD' | + '\u1EFF'..'\u1F07' | + '\u1F10'..'\u1F15' | + '\u1F20'..'\u1F27' | + '\u1F30'..'\u1F37' | + '\u1F40'..'\u1F45' | + '\u1F50'..'\u1F57' | + '\u1F60'..'\u1F67' | + '\u1F70'..'\u1F7D' | + '\u1F80'..'\u1F87' | + '\u1F90'..'\u1F97' | + '\u1FA0'..'\u1FA7' | + '\u1FB0'..'\u1FB4' | + '\u1FB6' | + '\u1FB7' | + '\u1FBE' | + '\u1FC2'..'\u1FC4' | + '\u1FC6' | + '\u1FC7' | + '\u1FD0'..'\u1FD3' | + '\u1FD6' | + '\u1FD7' | + '\u1FE0'..'\u1FE7' | + '\u1FF2'..'\u1FF4' | + '\u1FF6' | + '\u1FF7' | + '\u210A' | + '\u210E' | + '\u210F' | + '\u2113' | + '\u212F' | + '\u2134' | + '\u2139' | + '\u213C' | + '\u213D' | + '\u2146'..'\u2149' | + '\u214E' | + '\u2184' | + '\u2C30'..'\u2C5E' | + '\u2C61' | + '\u2C65' | + '\u2C66' | + '\u2C68' | + '\u2C6A' | + '\u2C6C' | + '\u2C71' | + '\u2C73' | + '\u2C74' | + '\u2C76'..'\u2C7B' | + '\u2C81' | + '\u2C83' | + '\u2C85' | + '\u2C87' | + '\u2C89' | + '\u2C8B' | + '\u2C8D' | + '\u2C8F' | + '\u2C91' | + '\u2C93' | + '\u2C95' | + '\u2C97' | + '\u2C99' | + '\u2C9B' | + '\u2C9D' | + '\u2C9F' | + '\u2CA1' | + '\u2CA3' | + '\u2CA5' | + '\u2CA7' | + '\u2CA9' | + '\u2CAB' | + '\u2CAD' | + '\u2CAF' | + '\u2CB1' | + '\u2CB3' | + '\u2CB5' | + '\u2CB7' | + '\u2CB9' | + '\u2CBB' | + '\u2CBD' | + '\u2CBF' | + '\u2CC1' | + '\u2CC3' | + '\u2CC5' | + '\u2CC7' | + '\u2CC9' | + '\u2CCB' | + '\u2CCD' | + '\u2CCF' | + '\u2CD1' | + '\u2CD3' | + '\u2CD5' | + '\u2CD7' | + '\u2CD9' | + '\u2CDB' | + '\u2CDD' | + '\u2CDF' | + '\u2CE1' | + '\u2CE3' | + '\u2CE4' | + '\u2CEC' | + '\u2CEE' | + '\u2CF3' | + '\u2D00'..'\u2D25' | + '\u2D27' | + '\u2D2D' | + '\uA641' | + '\uA643' | + '\uA645' | + '\uA647' | + '\uA649' | + '\uA64B' | + '\uA64D' | + '\uA64F' | + '\uA651' | + '\uA653' | + '\uA655' | + '\uA657' | + '\uA659' | + '\uA65B' | + '\uA65D' | + '\uA65F' | + '\uA661' | + '\uA663' | + '\uA665' | + '\uA667' | + '\uA669' | + '\uA66B' | + '\uA66D' | + '\uA681' | + '\uA683' | + '\uA685' | + '\uA687' | + '\uA689' | + '\uA68B' | + '\uA68D' | + '\uA68F' | + '\uA691' | + '\uA693' | + '\uA695' | + '\uA697' | + '\uA723' | + '\uA725' | + '\uA727' | + '\uA729' | + '\uA72B' | + '\uA72D' | + '\uA72F'..'\uA731' | + '\uA733' | + '\uA735' | + '\uA737' | + '\uA739' | + '\uA73B' | + '\uA73D' | + '\uA73F' | + '\uA741' | + '\uA743' | + '\uA745' | + '\uA747' | + '\uA749' | + '\uA74B' | + '\uA74D' | + '\uA74F' | + '\uA751' | + '\uA753' | + '\uA755' | + '\uA757' | + '\uA759' | + '\uA75B' | + '\uA75D' | + '\uA75F' | + '\uA761' | + '\uA763' | + '\uA765' | + '\uA767' | + '\uA769' | + '\uA76B' | + '\uA76D' | + '\uA76F' | + '\uA771'..'\uA778' | + '\uA77A' | + '\uA77C' | + '\uA77F' | + '\uA781' | + '\uA783' | + '\uA785' | + '\uA787' | + '\uA78C' | + '\uA78E' | + '\uA791' | + '\uA793' | + '\uA7A1' | + '\uA7A3' | + '\uA7A5' | + '\uA7A7' | + '\uA7A9' | + '\uA7FA' | + '\uFB00'..'\uFB06' | + '\uFB13'..'\uFB17' | + '\uFF41'..'\uFF5A'; + +UNICODE_CLASS_LM: + '\u02B0'..'\u02C1' | + '\u02C6'..'\u02D1' | + '\u02E0'..'\u02E4' | + '\u02EC' | + '\u02EE' | + '\u0374' | + '\u037A' | + '\u0559' | + '\u0640' | + '\u06E5' | + '\u06E6' | + '\u07F4' | + '\u07F5' | + '\u07FA' | + '\u081A' | + '\u0824' | + '\u0828' | + '\u0971' | + '\u0E46' | + '\u0EC6' | + '\u10FC' | + '\u17D7' | + '\u1843' | + '\u1AA7' | + '\u1C78'..'\u1C7D' | + '\u1D2C'..'\u1D6A' | + '\u1D78' | + '\u1D9B'..'\u1DBF' | + '\u2071' | + '\u207F' | + '\u2090'..'\u209C' | + '\u2C7C' | + '\u2C7D' | + '\u2D6F' | + '\u2E2F' | + '\u3005' | + '\u3031'..'\u3035' | + '\u303B' | + '\u309D' | + '\u309E' | + '\u30FC'..'\u30FE' | + '\uA015' | + '\uA4F8'..'\uA4FD' | + '\uA60C' | + '\uA67F' | + '\uA717'..'\uA71F' | + '\uA770' | + '\uA788' | + '\uA7F8' | + '\uA7F9' | + '\uA9CF' | + '\uAA70' | + '\uAADD' | + '\uAAF3' | + '\uAAF4' | + '\uFF70' | + '\uFF9E' | + '\uFF9F'; + +UNICODE_CLASS_LO: + '\u00AA' | + '\u00BA' | + '\u01BB' | + '\u01C0'..'\u01C3' | + '\u0294' | + '\u05D0'..'\u05EA' | + '\u05F0'..'\u05F2' | + '\u0620'..'\u063F' | + '\u0641'..'\u064A' | + '\u066E' | + '\u066F' | + '\u0671'..'\u06D3' | + '\u06D5' | + '\u06EE' | + '\u06EF' | + '\u06FA'..'\u06FC' | + '\u06FF' | + '\u0710' | + '\u0712'..'\u072F' | + '\u074D'..'\u07A5' | + '\u07B1' | + '\u07CA'..'\u07EA' | + '\u0800'..'\u0815' | + '\u0840'..'\u0858' | + '\u08A0' | + '\u08A2'..'\u08AC' | + '\u0904'..'\u0939' | + '\u093D' | + '\u0950' | + '\u0958'..'\u0961' | + '\u0972'..'\u0977' | + '\u0979'..'\u097F' | + '\u0985'..'\u098C' | + '\u098F' | + '\u0990' | + '\u0993'..'\u09A8' | + '\u09AA'..'\u09B0' | + '\u09B2' | + '\u09B6'..'\u09B9' | + '\u09BD' | + '\u09CE' | + '\u09DC' | + '\u09DD' | + '\u09DF'..'\u09E1' | + '\u09F0' | + '\u09F1' | + '\u0A05'..'\u0A0A' | + '\u0A0F' | + '\u0A10' | + '\u0A13'..'\u0A28' | + '\u0A2A'..'\u0A30' | + '\u0A32' | + '\u0A33' | + '\u0A35' | + '\u0A36' | + '\u0A38' | + '\u0A39' | + '\u0A59'..'\u0A5C' | + '\u0A5E' | + '\u0A72'..'\u0A74' | + '\u0A85'..'\u0A8D' | + '\u0A8F'..'\u0A91' | + '\u0A93'..'\u0AA8' | + '\u0AAA'..'\u0AB0' | + '\u0AB2' | + '\u0AB3' | + '\u0AB5'..'\u0AB9' | + '\u0ABD' | + '\u0AD0' | + '\u0AE0' | + '\u0AE1' | + '\u0B05'..'\u0B0C' | + '\u0B0F' | + '\u0B10' | + '\u0B13'..'\u0B28' | + '\u0B2A'..'\u0B30' | + '\u0B32' | + '\u0B33' | + '\u0B35'..'\u0B39' | + '\u0B3D' | + '\u0B5C' | + '\u0B5D' | + '\u0B5F'..'\u0B61' | + '\u0B71' | + '\u0B83' | + '\u0B85'..'\u0B8A' | + '\u0B8E'..'\u0B90' | + '\u0B92'..'\u0B95' | + '\u0B99' | + '\u0B9A' | + '\u0B9C' | + '\u0B9E' | + '\u0B9F' | + '\u0BA3' | + '\u0BA4' | + '\u0BA8'..'\u0BAA' | + '\u0BAE'..'\u0BB9' | + '\u0BD0' | + '\u0C05'..'\u0C0C' | + '\u0C0E'..'\u0C10' | + '\u0C12'..'\u0C28' | + '\u0C2A'..'\u0C33' | + '\u0C35'..'\u0C39' | + '\u0C3D' | + '\u0C58' | + '\u0C59' | + '\u0C60' | + '\u0C61' | + '\u0C85'..'\u0C8C' | + '\u0C8E'..'\u0C90' | + '\u0C92'..'\u0CA8' | + '\u0CAA'..'\u0CB3' | + '\u0CB5'..'\u0CB9' | + '\u0CBD' | + '\u0CDE' | + '\u0CE0' | + '\u0CE1' | + '\u0CF1' | + '\u0CF2' | + '\u0D05'..'\u0D0C' | + '\u0D0E'..'\u0D10' | + '\u0D12'..'\u0D3A' | + '\u0D3D' | + '\u0D4E' | + '\u0D60' | + '\u0D61' | + '\u0D7A'..'\u0D7F' | + '\u0D85'..'\u0D96' | + '\u0D9A'..'\u0DB1' | + '\u0DB3'..'\u0DBB' | + '\u0DBD' | + '\u0DC0'..'\u0DC6' | + '\u0E01'..'\u0E30' | + '\u0E32' | + '\u0E33' | + '\u0E40'..'\u0E45' | + '\u0E81' | + '\u0E82' | + '\u0E84' | + '\u0E87' | + '\u0E88' | + '\u0E8A' | + '\u0E8D' | + '\u0E94'..'\u0E97' | + '\u0E99'..'\u0E9F' | + '\u0EA1'..'\u0EA3' | + '\u0EA5' | + '\u0EA7' | + '\u0EAA' | + '\u0EAB' | + '\u0EAD'..'\u0EB0' | + '\u0EB2' | + '\u0EB3' | + '\u0EBD' | + '\u0EC0'..'\u0EC4' | + '\u0EDC'..'\u0EDF' | + '\u0F00' | + '\u0F40'..'\u0F47' | + '\u0F49'..'\u0F6C' | + '\u0F88'..'\u0F8C' | + '\u1000'..'\u102A' | + '\u103F' | + '\u1050'..'\u1055' | + '\u105A'..'\u105D' | + '\u1061' | + '\u1065' | + '\u1066' | + '\u106E'..'\u1070' | + '\u1075'..'\u1081' | + '\u108E' | + '\u10D0'..'\u10FA' | + '\u10FD'..'\u1248' | + '\u124A'..'\u124D' | + '\u1250'..'\u1256' | + '\u1258' | + '\u125A'..'\u125D' | + '\u1260'..'\u1288' | + '\u128A'..'\u128D' | + '\u1290'..'\u12B0' | + '\u12B2'..'\u12B5' | + '\u12B8'..'\u12BE' | + '\u12C0' | + '\u12C2'..'\u12C5' | + '\u12C8'..'\u12D6' | + '\u12D8'..'\u1310' | + '\u1312'..'\u1315' | + '\u1318'..'\u135A' | + '\u1380'..'\u138F' | + '\u13A0'..'\u13F4' | + '\u1401'..'\u166C' | + '\u166F'..'\u167F' | + '\u1681'..'\u169A' | + '\u16A0'..'\u16EA' | + '\u1700'..'\u170C' | + '\u170E'..'\u1711' | + '\u1720'..'\u1731' | + '\u1740'..'\u1751' | + '\u1760'..'\u176C' | + '\u176E'..'\u1770' | + '\u1780'..'\u17B3' | + '\u17DC' | + '\u1820'..'\u1842' | + '\u1844'..'\u1877' | + '\u1880'..'\u18A8' | + '\u18AA' | + '\u18B0'..'\u18F5' | + '\u1900'..'\u191C' | + '\u1950'..'\u196D' | + '\u1970'..'\u1974' | + '\u1980'..'\u19AB' | + '\u19C1'..'\u19C7' | + '\u1A00'..'\u1A16' | + '\u1A20'..'\u1A54' | + '\u1B05'..'\u1B33' | + '\u1B45'..'\u1B4B' | + '\u1B83'..'\u1BA0' | + '\u1BAE' | + '\u1BAF' | + '\u1BBA'..'\u1BE5' | + '\u1C00'..'\u1C23' | + '\u1C4D'..'\u1C4F' | + '\u1C5A'..'\u1C77' | + '\u1CE9'..'\u1CEC' | + '\u1CEE'..'\u1CF1' | + '\u1CF5' | + '\u1CF6' | + '\u2135'..'\u2138' | + '\u2D30'..'\u2D67' | + '\u2D80'..'\u2D96' | + '\u2DA0'..'\u2DA6' | + '\u2DA8'..'\u2DAE' | + '\u2DB0'..'\u2DB6' | + '\u2DB8'..'\u2DBE' | + '\u2DC0'..'\u2DC6' | + '\u2DC8'..'\u2DCE' | + '\u2DD0'..'\u2DD6' | + '\u2DD8'..'\u2DDE' | + '\u3006' | + '\u303C' | + '\u3041'..'\u3096' | + '\u309F' | + '\u30A1'..'\u30FA' | + '\u30FF' | + '\u3105'..'\u312D' | + '\u3131'..'\u318E' | + '\u31A0'..'\u31BA' | + '\u31F0'..'\u31FF' | + '\u3400' | + '\u4DB5' | + '\u4E00' | + '\u9FCC' | + '\uA000'..'\uA014' | + '\uA016'..'\uA48C' | + '\uA4D0'..'\uA4F7' | + '\uA500'..'\uA60B' | + '\uA610'..'\uA61F' | + '\uA62A' | + '\uA62B' | + '\uA66E' | + '\uA6A0'..'\uA6E5' | + '\uA7FB'..'\uA801' | + '\uA803'..'\uA805' | + '\uA807'..'\uA80A' | + '\uA80C'..'\uA822' | + '\uA840'..'\uA873' | + '\uA882'..'\uA8B3' | + '\uA8F2'..'\uA8F7' | + '\uA8FB' | + '\uA90A'..'\uA925' | + '\uA930'..'\uA946' | + '\uA960'..'\uA97C' | + '\uA984'..'\uA9B2' | + '\uAA00'..'\uAA28' | + '\uAA40'..'\uAA42' | + '\uAA44'..'\uAA4B' | + '\uAA60'..'\uAA6F' | + '\uAA71'..'\uAA76' | + '\uAA7A' | + '\uAA80'..'\uAAAF' | + '\uAAB1' | + '\uAAB5' | + '\uAAB6' | + '\uAAB9'..'\uAABD' | + '\uAAC0' | + '\uAAC2' | + '\uAADB' | + '\uAADC' | + '\uAAE0'..'\uAAEA' | + '\uAAF2' | + '\uAB01'..'\uAB06' | + '\uAB09'..'\uAB0E' | + '\uAB11'..'\uAB16' | + '\uAB20'..'\uAB26' | + '\uAB28'..'\uAB2E' | + '\uABC0'..'\uABE2' | + '\uAC00' | + '\uD7A3' | + '\uD7B0'..'\uD7C6' | + '\uD7CB'..'\uD7FB' | + '\uF900'..'\uFA6D' | + '\uFA70'..'\uFAD9' | + '\uFB1D' | + '\uFB1F'..'\uFB28' | + '\uFB2A'..'\uFB36' | + '\uFB38'..'\uFB3C' | + '\uFB3E' | + '\uFB40' | + '\uFB41' | + '\uFB43' | + '\uFB44' | + '\uFB46'..'\uFBB1' | + '\uFBD3'..'\uFD3D' | + '\uFD50'..'\uFD8F' | + '\uFD92'..'\uFDC7' | + '\uFDF0'..'\uFDFB' | + '\uFE70'..'\uFE74' | + '\uFE76'..'\uFEFC' | + '\uFF66'..'\uFF6F' | + '\uFF71'..'\uFF9D' | + '\uFFA0'..'\uFFBE' | + '\uFFC2'..'\uFFC7' | + '\uFFCA'..'\uFFCF' | + '\uFFD2'..'\uFFD7' | + '\uFFDA'..'\uFFDC'; + +UNICODE_CLASS_LT: + '\u01C5' | + '\u01C8' | + '\u01CB' | + '\u01F2' | + '\u1F88'..'\u1F8F' | + '\u1F98'..'\u1F9F' | + '\u1FA8'..'\u1FAF' | + '\u1FBC' | + '\u1FCC' | + '\u1FFC'; + +UNICODE_CLASS_LU: + '\u0041'..'\u005A' | + '\u00C0'..'\u00D6' | + '\u00D8'..'\u00DE' | + '\u0100' | + '\u0102' | + '\u0104' | + '\u0106' | + '\u0108' | + '\u010A' | + '\u010C' | + '\u010E' | + '\u0110' | + '\u0112' | + '\u0114' | + '\u0116' | + '\u0118' | + '\u011A' | + '\u011C' | + '\u011E' | + '\u0120' | + '\u0122' | + '\u0124' | + '\u0126' | + '\u0128' | + '\u012A' | + '\u012C' | + '\u012E' | + '\u0130' | + '\u0132' | + '\u0134' | + '\u0136' | + '\u0139' | + '\u013B' | + '\u013D' | + '\u013F' | + '\u0141' | + '\u0143' | + '\u0145' | + '\u0147' | + '\u014A' | + '\u014C' | + '\u014E' | + '\u0150' | + '\u0152' | + '\u0154' | + '\u0156' | + '\u0158' | + '\u015A' | + '\u015C' | + '\u015E' | + '\u0160' | + '\u0162' | + '\u0164' | + '\u0166' | + '\u0168' | + '\u016A' | + '\u016C' | + '\u016E' | + '\u0170' | + '\u0172' | + '\u0174' | + '\u0176' | + '\u0178' | + '\u0179' | + '\u017B' | + '\u017D' | + '\u0181' | + '\u0182' | + '\u0184' | + '\u0186' | + '\u0187' | + '\u0189'..'\u018B' | + '\u018E'..'\u0191' | + '\u0193' | + '\u0194' | + '\u0196'..'\u0198' | + '\u019C' | + '\u019D' | + '\u019F' | + '\u01A0' | + '\u01A2' | + '\u01A4' | + '\u01A6' | + '\u01A7' | + '\u01A9' | + '\u01AC' | + '\u01AE' | + '\u01AF' | + '\u01B1'..'\u01B3' | + '\u01B5' | + '\u01B7' | + '\u01B8' | + '\u01BC' | + '\u01C4' | + '\u01C7' | + '\u01CA' | + '\u01CD' | + '\u01CF' | + '\u01D1' | + '\u01D3' | + '\u01D5' | + '\u01D7' | + '\u01D9' | + '\u01DB' | + '\u01DE' | + '\u01E0' | + '\u01E2' | + '\u01E4' | + '\u01E6' | + '\u01E8' | + '\u01EA' | + '\u01EC' | + '\u01EE' | + '\u01F1' | + '\u01F4' | + '\u01F6'..'\u01F8' | + '\u01FA' | + '\u01FC' | + '\u01FE' | + '\u0200' | + '\u0202' | + '\u0204' | + '\u0206' | + '\u0208' | + '\u020A' | + '\u020C' | + '\u020E' | + '\u0210' | + '\u0212' | + '\u0214' | + '\u0216' | + '\u0218' | + '\u021A' | + '\u021C' | + '\u021E' | + '\u0220' | + '\u0222' | + '\u0224' | + '\u0226' | + '\u0228' | + '\u022A' | + '\u022C' | + '\u022E' | + '\u0230' | + '\u0232' | + '\u023A' | + '\u023B' | + '\u023D' | + '\u023E' | + '\u0241' | + '\u0243'..'\u0246' | + '\u0248' | + '\u024A' | + '\u024C' | + '\u024E' | + '\u0370' | + '\u0372' | + '\u0376' | + '\u0386' | + '\u0388'..'\u038A' | + '\u038C' | + '\u038E' | + '\u038F' | + '\u0391'..'\u03A1' | + '\u03A3'..'\u03AB' | + '\u03CF' | + '\u03D2'..'\u03D4' | + '\u03D8' | + '\u03DA' | + '\u03DC' | + '\u03DE' | + '\u03E0' | + '\u03E2' | + '\u03E4' | + '\u03E6' | + '\u03E8' | + '\u03EA' | + '\u03EC' | + '\u03EE' | + '\u03F4' | + '\u03F7' | + '\u03F9' | + '\u03FA' | + '\u03FD'..'\u042F' | + '\u0460' | + '\u0462' | + '\u0464' | + '\u0466' | + '\u0468' | + '\u046A' | + '\u046C' | + '\u046E' | + '\u0470' | + '\u0472' | + '\u0474' | + '\u0476' | + '\u0478' | + '\u047A' | + '\u047C' | + '\u047E' | + '\u0480' | + '\u048A' | + '\u048C' | + '\u048E' | + '\u0490' | + '\u0492' | + '\u0494' | + '\u0496' | + '\u0498' | + '\u049A' | + '\u049C' | + '\u049E' | + '\u04A0' | + '\u04A2' | + '\u04A4' | + '\u04A6' | + '\u04A8' | + '\u04AA' | + '\u04AC' | + '\u04AE' | + '\u04B0' | + '\u04B2' | + '\u04B4' | + '\u04B6' | + '\u04B8' | + '\u04BA' | + '\u04BC' | + '\u04BE' | + '\u04C0' | + '\u04C1' | + '\u04C3' | + '\u04C5' | + '\u04C7' | + '\u04C9' | + '\u04CB' | + '\u04CD' | + '\u04D0' | + '\u04D2' | + '\u04D4' | + '\u04D6' | + '\u04D8' | + '\u04DA' | + '\u04DC' | + '\u04DE' | + '\u04E0' | + '\u04E2' | + '\u04E4' | + '\u04E6' | + '\u04E8' | + '\u04EA' | + '\u04EC' | + '\u04EE' | + '\u04F0' | + '\u04F2' | + '\u04F4' | + '\u04F6' | + '\u04F8' | + '\u04FA' | + '\u04FC' | + '\u04FE' | + '\u0500' | + '\u0502' | + '\u0504' | + '\u0506' | + '\u0508' | + '\u050A' | + '\u050C' | + '\u050E' | + '\u0510' | + '\u0512' | + '\u0514' | + '\u0516' | + '\u0518' | + '\u051A' | + '\u051C' | + '\u051E' | + '\u0520' | + '\u0522' | + '\u0524' | + '\u0526' | + '\u0531'..'\u0556' | + '\u10A0'..'\u10C5' | + '\u10C7' | + '\u10CD' | + '\u1E00' | + '\u1E02' | + '\u1E04' | + '\u1E06' | + '\u1E08' | + '\u1E0A' | + '\u1E0C' | + '\u1E0E' | + '\u1E10' | + '\u1E12' | + '\u1E14' | + '\u1E16' | + '\u1E18' | + '\u1E1A' | + '\u1E1C' | + '\u1E1E' | + '\u1E20' | + '\u1E22' | + '\u1E24' | + '\u1E26' | + '\u1E28' | + '\u1E2A' | + '\u1E2C' | + '\u1E2E' | + '\u1E30' | + '\u1E32' | + '\u1E34' | + '\u1E36' | + '\u1E38' | + '\u1E3A' | + '\u1E3C' | + '\u1E3E' | + '\u1E40' | + '\u1E42' | + '\u1E44' | + '\u1E46' | + '\u1E48' | + '\u1E4A' | + '\u1E4C' | + '\u1E4E' | + '\u1E50' | + '\u1E52' | + '\u1E54' | + '\u1E56' | + '\u1E58' | + '\u1E5A' | + '\u1E5C' | + '\u1E5E' | + '\u1E60' | + '\u1E62' | + '\u1E64' | + '\u1E66' | + '\u1E68' | + '\u1E6A' | + '\u1E6C' | + '\u1E6E' | + '\u1E70' | + '\u1E72' | + '\u1E74' | + '\u1E76' | + '\u1E78' | + '\u1E7A' | + '\u1E7C' | + '\u1E7E' | + '\u1E80' | + '\u1E82' | + '\u1E84' | + '\u1E86' | + '\u1E88' | + '\u1E8A' | + '\u1E8C' | + '\u1E8E' | + '\u1E90' | + '\u1E92' | + '\u1E94' | + '\u1E9E' | + '\u1EA0' | + '\u1EA2' | + '\u1EA4' | + '\u1EA6' | + '\u1EA8' | + '\u1EAA' | + '\u1EAC' | + '\u1EAE' | + '\u1EB0' | + '\u1EB2' | + '\u1EB4' | + '\u1EB6' | + '\u1EB8' | + '\u1EBA' | + '\u1EBC' | + '\u1EBE' | + '\u1EC0' | + '\u1EC2' | + '\u1EC4' | + '\u1EC6' | + '\u1EC8' | + '\u1ECA' | + '\u1ECC' | + '\u1ECE' | + '\u1ED0' | + '\u1ED2' | + '\u1ED4' | + '\u1ED6' | + '\u1ED8' | + '\u1EDA' | + '\u1EDC' | + '\u1EDE' | + '\u1EE0' | + '\u1EE2' | + '\u1EE4' | + '\u1EE6' | + '\u1EE8' | + '\u1EEA' | + '\u1EEC' | + '\u1EEE' | + '\u1EF0' | + '\u1EF2' | + '\u1EF4' | + '\u1EF6' | + '\u1EF8' | + '\u1EFA' | + '\u1EFC' | + '\u1EFE' | + '\u1F08'..'\u1F0F' | + '\u1F18'..'\u1F1D' | + '\u1F28'..'\u1F2F' | + '\u1F38'..'\u1F3F' | + '\u1F48'..'\u1F4D' | + '\u1F59' | + '\u1F5B' | + '\u1F5D' | + '\u1F5F' | + '\u1F68'..'\u1F6F' | + '\u1FB8'..'\u1FBB' | + '\u1FC8'..'\u1FCB' | + '\u1FD8'..'\u1FDB' | + '\u1FE8'..'\u1FEC' | + '\u1FF8'..'\u1FFB' | + '\u2102' | + '\u2107' | + '\u210B'..'\u210D' | + '\u2110'..'\u2112' | + '\u2115' | + '\u2119'..'\u211D' | + '\u2124' | + '\u2126' | + '\u2128' | + '\u212A'..'\u212D' | + '\u2130'..'\u2133' | + '\u213E' | + '\u213F' | + '\u2145' | + '\u2183' | + '\u2C00'..'\u2C2E' | + '\u2C60' | + '\u2C62'..'\u2C64' | + '\u2C67' | + '\u2C69' | + '\u2C6B' | + '\u2C6D'..'\u2C70' | + '\u2C72' | + '\u2C75' | + '\u2C7E'..'\u2C80' | + '\u2C82' | + '\u2C84' | + '\u2C86' | + '\u2C88' | + '\u2C8A' | + '\u2C8C' | + '\u2C8E' | + '\u2C90' | + '\u2C92' | + '\u2C94' | + '\u2C96' | + '\u2C98' | + '\u2C9A' | + '\u2C9C' | + '\u2C9E' | + '\u2CA0' | + '\u2CA2' | + '\u2CA4' | + '\u2CA6' | + '\u2CA8' | + '\u2CAA' | + '\u2CAC' | + '\u2CAE' | + '\u2CB0' | + '\u2CB2' | + '\u2CB4' | + '\u2CB6' | + '\u2CB8' | + '\u2CBA' | + '\u2CBC' | + '\u2CBE' | + '\u2CC0' | + '\u2CC2' | + '\u2CC4' | + '\u2CC6' | + '\u2CC8' | + '\u2CCA' | + '\u2CCC' | + '\u2CCE' | + '\u2CD0' | + '\u2CD2' | + '\u2CD4' | + '\u2CD6' | + '\u2CD8' | + '\u2CDA' | + '\u2CDC' | + '\u2CDE' | + '\u2CE0' | + '\u2CE2' | + '\u2CEB' | + '\u2CED' | + '\u2CF2' | + '\uA640' | + '\uA642' | + '\uA644' | + '\uA646' | + '\uA648' | + '\uA64A' | + '\uA64C' | + '\uA64E' | + '\uA650' | + '\uA652' | + '\uA654' | + '\uA656' | + '\uA658' | + '\uA65A' | + '\uA65C' | + '\uA65E' | + '\uA660' | + '\uA662' | + '\uA664' | + '\uA666' | + '\uA668' | + '\uA66A' | + '\uA66C' | + '\uA680' | + '\uA682' | + '\uA684' | + '\uA686' | + '\uA688' | + '\uA68A' | + '\uA68C' | + '\uA68E' | + '\uA690' | + '\uA692' | + '\uA694' | + '\uA696' | + '\uA722' | + '\uA724' | + '\uA726' | + '\uA728' | + '\uA72A' | + '\uA72C' | + '\uA72E' | + '\uA732' | + '\uA734' | + '\uA736' | + '\uA738' | + '\uA73A' | + '\uA73C' | + '\uA73E' | + '\uA740' | + '\uA742' | + '\uA744' | + '\uA746' | + '\uA748' | + '\uA74A' | + '\uA74C' | + '\uA74E' | + '\uA750' | + '\uA752' | + '\uA754' | + '\uA756' | + '\uA758' | + '\uA75A' | + '\uA75C' | + '\uA75E' | + '\uA760' | + '\uA762' | + '\uA764' | + '\uA766' | + '\uA768' | + '\uA76A' | + '\uA76C' | + '\uA76E' | + '\uA779' | + '\uA77B' | + '\uA77D' | + '\uA77E' | + '\uA780' | + '\uA782' | + '\uA784' | + '\uA786' | + '\uA78B' | + '\uA78D' | + '\uA790' | + '\uA792' | + '\uA7A0' | + '\uA7A2' | + '\uA7A4' | + '\uA7A6' | + '\uA7A8' | + '\uA7AA' | + '\uFF21'..'\uFF3A'; + +UNICODE_CLASS_ND: + '\u0030'..'\u0039' | + '\u0660'..'\u0669' | + '\u06F0'..'\u06F9' | + '\u07C0'..'\u07C9' | + '\u0966'..'\u096F' | + '\u09E6'..'\u09EF' | + '\u0A66'..'\u0A6F' | + '\u0AE6'..'\u0AEF' | + '\u0B66'..'\u0B6F' | + '\u0BE6'..'\u0BEF' | + '\u0C66'..'\u0C6F' | + '\u0CE6'..'\u0CEF' | + '\u0D66'..'\u0D6F' | + '\u0E50'..'\u0E59' | + '\u0ED0'..'\u0ED9' | + '\u0F20'..'\u0F29' | + '\u1040'..'\u1049' | + '\u1090'..'\u1099' | + '\u17E0'..'\u17E9' | + '\u1810'..'\u1819' | + '\u1946'..'\u194F' | + '\u19D0'..'\u19D9' | + '\u1A80'..'\u1A89' | + '\u1A90'..'\u1A99' | + '\u1B50'..'\u1B59' | + '\u1BB0'..'\u1BB9' | + '\u1C40'..'\u1C49' | + '\u1C50'..'\u1C59' | + '\uA620'..'\uA629' | + '\uA8D0'..'\uA8D9' | + '\uA900'..'\uA909' | + '\uA9D0'..'\uA9D9' | + '\uAA50'..'\uAA59' | + '\uABF0'..'\uABF9' | + '\uFF10'..'\uFF19'; + +UNICODE_CLASS_NL: + '\u16EE'..'\u16F0' | + '\u2160'..'\u2182' | + '\u2185'..'\u2188' | + '\u3007' | + '\u3021'..'\u3029' | + '\u3038'..'\u303A' | + '\uA6E6'..'\uA6EF'; \ No newline at end of file diff --git a/lexers/src/main/java/com/itsaky/androidide/lexers/kotlin/UnicodeClasses.interp b/lexers/src/main/java/com/itsaky/androidide/lexers/kotlin/UnicodeClasses.interp new file mode 100644 index 000000000..0646cd818 --- /dev/null +++ b/lexers/src/main/java/com/itsaky/androidide/lexers/kotlin/UnicodeClasses.interp @@ -0,0 +1,38 @@ +token literal names: +null +null +null +null +null +null +null +null + +token symbolic names: +null +UNICODE_CLASS_LL +UNICODE_CLASS_LM +UNICODE_CLASS_LO +UNICODE_CLASS_LT +UNICODE_CLASS_LU +UNICODE_CLASS_ND +UNICODE_CLASS_NL + +rule names: +UNICODE_CLASS_LL +UNICODE_CLASS_LM +UNICODE_CLASS_LO +UNICODE_CLASS_LT +UNICODE_CLASS_LU +UNICODE_CLASS_ND +UNICODE_CLASS_NL + +channel names: +DEFAULT_TOKEN_CHANNEL +HIDDEN + +mode names: +DEFAULT_MODE + +atn: +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 9, 31, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 3, 2, 3, 2, 3, 3, 3, 3, 3, 4, 3, 4, 3, 5, 3, 5, 3, 6, 3, 6, 3, 7, 3, 7, 3, 8, 3, 8, 2, 2, 9, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 3, 2, 9, 584, 2, 99, 124, 183, 183, 225, 248, 250, 257, 259, 259, 261, 261, 263, 263, 265, 265, 267, 267, 269, 269, 271, 271, 273, 273, 275, 275, 277, 277, 279, 279, 281, 281, 283, 283, 285, 285, 287, 287, 289, 289, 291, 291, 293, 293, 295, 295, 297, 297, 299, 299, 301, 301, 303, 303, 305, 305, 307, 307, 309, 309, 311, 311, 313, 314, 316, 316, 318, 318, 320, 320, 322, 322, 324, 324, 326, 326, 328, 328, 330, 331, 333, 333, 335, 335, 337, 337, 339, 339, 341, 341, 343, 343, 345, 345, 347, 347, 349, 349, 351, 351, 353, 353, 355, 355, 357, 357, 359, 359, 361, 361, 363, 363, 365, 365, 367, 367, 369, 369, 371, 371, 373, 373, 375, 375, 377, 377, 380, 380, 382, 382, 384, 386, 389, 389, 391, 391, 394, 394, 398, 399, 404, 404, 407, 407, 411, 413, 416, 416, 419, 419, 421, 421, 423, 423, 426, 426, 428, 429, 431, 431, 434, 434, 438, 438, 440, 440, 443, 444, 447, 449, 456, 456, 459, 459, 462, 462, 464, 464, 466, 466, 468, 468, 470, 470, 472, 472, 474, 474, 476, 476, 478, 479, 481, 481, 483, 483, 485, 485, 487, 487, 489, 489, 491, 491, 493, 493, 495, 495, 497, 498, 501, 501, 503, 503, 507, 507, 509, 509, 511, 511, 513, 513, 515, 515, 517, 517, 519, 519, 521, 521, 523, 523, 525, 525, 527, 527, 529, 529, 531, 531, 533, 533, 535, 535, 537, 537, 539, 539, 541, 541, 543, 543, 545, 545, 547, 547, 549, 549, 551, 551, 553, 553, 555, 555, 557, 557, 559, 559, 561, 561, 563, 563, 565, 571, 574, 574, 577, 578, 580, 580, 585, 585, 587, 587, 589, 589, 591, 591, 593, 661, 663, 689, 883, 883, 885, 885, 889, 889, 893, 895, 914, 914, 942, 976, 978, 979, 983, 985, 987, 987, 989, 989, 991, 991, 993, 993, 995, 995, 997, 997, 999, 999, 1001, 1001, 1003, 1003, 1005, 1005, 1007, 1007, 1009, 1013, 1015, 1015, 1018, 1018, 1021, 1022, 1074, 1121, 1123, 1123, 1125, 1125, 1127, 1127, 1129, 1129, 1131, 1131, 1133, 1133, 1135, 1135, 1137, 1137, 1139, 1139, 1141, 1141, 1143, 1143, 1145, 1145, 1147, 1147, 1149, 1149, 1151, 1151, 1153, 1153, 1155, 1155, 1165, 1165, 1167, 1167, 1169, 1169, 1171, 1171, 1173, 1173, 1175, 1175, 1177, 1177, 1179, 1179, 1181, 1181, 1183, 1183, 1185, 1185, 1187, 1187, 1189, 1189, 1191, 1191, 1193, 1193, 1195, 1195, 1197, 1197, 1199, 1199, 1201, 1201, 1203, 1203, 1205, 1205, 1207, 1207, 1209, 1209, 1211, 1211, 1213, 1213, 1215, 1215, 1217, 1217, 1220, 1220, 1222, 1222, 1224, 1224, 1226, 1226, 1228, 1228, 1230, 1230, 1232, 1233, 1235, 1235, 1237, 1237, 1239, 1239, 1241, 1241, 1243, 1243, 1245, 1245, 1247, 1247, 1249, 1249, 1251, 1251, 1253, 1253, 1255, 1255, 1257, 1257, 1259, 1259, 1261, 1261, 1263, 1263, 1265, 1265, 1267, 1267, 1269, 1269, 1271, 1271, 1273, 1273, 1275, 1275, 1277, 1277, 1279, 1279, 1281, 1281, 1283, 1283, 1285, 1285, 1287, 1287, 1289, 1289, 1291, 1291, 1293, 1293, 1295, 1295, 1297, 1297, 1299, 1299, 1301, 1301, 1303, 1303, 1305, 1305, 1307, 1307, 1309, 1309, 1311, 1311, 1313, 1313, 1315, 1315, 1317, 1317, 1319, 1319, 1321, 1321, 1379, 1417, 7426, 7469, 7533, 7545, 7547, 7580, 7683, 7683, 7685, 7685, 7687, 7687, 7689, 7689, 7691, 7691, 7693, 7693, 7695, 7695, 7697, 7697, 7699, 7699, 7701, 7701, 7703, 7703, 7705, 7705, 7707, 7707, 7709, 7709, 7711, 7711, 7713, 7713, 7715, 7715, 7717, 7717, 7719, 7719, 7721, 7721, 7723, 7723, 7725, 7725, 7727, 7727, 7729, 7729, 7731, 7731, 7733, 7733, 7735, 7735, 7737, 7737, 7739, 7739, 7741, 7741, 7743, 7743, 7745, 7745, 7747, 7747, 7749, 7749, 7751, 7751, 7753, 7753, 7755, 7755, 7757, 7757, 7759, 7759, 7761, 7761, 7763, 7763, 7765, 7765, 7767, 7767, 7769, 7769, 7771, 7771, 7773, 7773, 7775, 7775, 7777, 7777, 7779, 7779, 7781, 7781, 7783, 7783, 7785, 7785, 7787, 7787, 7789, 7789, 7791, 7791, 7793, 7793, 7795, 7795, 7797, 7797, 7799, 7799, 7801, 7801, 7803, 7803, 7805, 7805, 7807, 7807, 7809, 7809, 7811, 7811, 7813, 7813, 7815, 7815, 7817, 7817, 7819, 7819, 7821, 7821, 7823, 7823, 7825, 7825, 7827, 7827, 7829, 7829, 7831, 7839, 7841, 7841, 7843, 7843, 7845, 7845, 7847, 7847, 7849, 7849, 7851, 7851, 7853, 7853, 7855, 7855, 7857, 7857, 7859, 7859, 7861, 7861, 7863, 7863, 7865, 7865, 7867, 7867, 7869, 7869, 7871, 7871, 7873, 7873, 7875, 7875, 7877, 7877, 7879, 7879, 7881, 7881, 7883, 7883, 7885, 7885, 7887, 7887, 7889, 7889, 7891, 7891, 7893, 7893, 7895, 7895, 7897, 7897, 7899, 7899, 7901, 7901, 7903, 7903, 7905, 7905, 7907, 7907, 7909, 7909, 7911, 7911, 7913, 7913, 7915, 7915, 7917, 7917, 7919, 7919, 7921, 7921, 7923, 7923, 7925, 7925, 7927, 7927, 7929, 7929, 7931, 7931, 7933, 7933, 7935, 7935, 7937, 7945, 7954, 7959, 7970, 7977, 7986, 7993, 8002, 8007, 8018, 8025, 8034, 8041, 8050, 8063, 8066, 8073, 8082, 8089, 8098, 8105, 8114, 8118, 8120, 8121, 8128, 8128, 8132, 8134, 8136, 8137, 8146, 8149, 8152, 8153, 8162, 8169, 8180, 8182, 8184, 8185, 8460, 8460, 8464, 8465, 8469, 8469, 8497, 8497, 8502, 8502, 8507, 8507, 8510, 8511, 8520, 8523, 8528, 8528, 8582, 8582, 11314, 11360, 11363, 11363, 11367, 11368, 11370, 11370, 11372, 11372, 11374, 11374, 11379, 11379, 11381, 11382, 11384, 11389, 11395, 11395, 11397, 11397, 11399, 11399, 11401, 11401, 11403, 11403, 11405, 11405, 11407, 11407, 11409, 11409, 11411, 11411, 11413, 11413, 11415, 11415, 11417, 11417, 11419, 11419, 11421, 11421, 11423, 11423, 11425, 11425, 11427, 11427, 11429, 11429, 11431, 11431, 11433, 11433, 11435, 11435, 11437, 11437, 11439, 11439, 11441, 11441, 11443, 11443, 11445, 11445, 11447, 11447, 11449, 11449, 11451, 11451, 11453, 11453, 11455, 11455, 11457, 11457, 11459, 11459, 11461, 11461, 11463, 11463, 11465, 11465, 11467, 11467, 11469, 11469, 11471, 11471, 11473, 11473, 11475, 11475, 11477, 11477, 11479, 11479, 11481, 11481, 11483, 11483, 11485, 11485, 11487, 11487, 11489, 11489, 11491, 11491, 11493, 11494, 11502, 11502, 11504, 11504, 11509, 11509, 11522, 11559, 11561, 11561, 11567, 11567, 42563, 42563, 42565, 42565, 42567, 42567, 42569, 42569, 42571, 42571, 42573, 42573, 42575, 42575, 42577, 42577, 42579, 42579, 42581, 42581, 42583, 42583, 42585, 42585, 42587, 42587, 42589, 42589, 42591, 42591, 42593, 42593, 42595, 42595, 42597, 42597, 42599, 42599, 42601, 42601, 42603, 42603, 42605, 42605, 42607, 42607, 42627, 42627, 42629, 42629, 42631, 42631, 42633, 42633, 42635, 42635, 42637, 42637, 42639, 42639, 42641, 42641, 42643, 42643, 42645, 42645, 42647, 42647, 42649, 42649, 42789, 42789, 42791, 42791, 42793, 42793, 42795, 42795, 42797, 42797, 42799, 42799, 42801, 42803, 42805, 42805, 42807, 42807, 42809, 42809, 42811, 42811, 42813, 42813, 42815, 42815, 42817, 42817, 42819, 42819, 42821, 42821, 42823, 42823, 42825, 42825, 42827, 42827, 42829, 42829, 42831, 42831, 42833, 42833, 42835, 42835, 42837, 42837, 42839, 42839, 42841, 42841, 42843, 42843, 42845, 42845, 42847, 42847, 42849, 42849, 42851, 42851, 42853, 42853, 42855, 42855, 42857, 42857, 42859, 42859, 42861, 42861, 42863, 42863, 42865, 42865, 42867, 42874, 42876, 42876, 42878, 42878, 42881, 42881, 42883, 42883, 42885, 42885, 42887, 42887, 42889, 42889, 42894, 42894, 42896, 42896, 42899, 42899, 42901, 42901, 42915, 42915, 42917, 42917, 42919, 42919, 42921, 42921, 42923, 42923, 43004, 43004, 64258, 64264, 64277, 64281, 65347, 65372, 53, 2, 690, 707, 712, 723, 738, 742, 750, 750, 752, 752, 886, 886, 892, 892, 1371, 1371, 1602, 1602, 1767, 1768, 2038, 2039, 2044, 2044, 2076, 2076, 2086, 2086, 2090, 2090, 2419, 2419, 3656, 3656, 3784, 3784, 4350, 4350, 6105, 6105, 6213, 6213, 6825, 6825, 7290, 7295, 7470, 7532, 7546, 7546, 7581, 7617, 8307, 8307, 8321, 8321, 8338, 8350, 11390, 11391, 11633, 11633, 11825, 11825, 12295, 12295, 12339, 12343, 12349, 12349, 12447, 12448, 12542, 12544, 40983, 40983, 42234, 42239, 42510, 42510, 42625, 42625, 42777, 42785, 42866, 42866, 42890, 42890, 43002, 43003, 43473, 43473, 43634, 43634, 43743, 43743, 43765, 43766, 65394, 65394, 65440, 65441, 291, 2, 172, 172, 188, 188, 445, 445, 450, 453, 662, 662, 1490, 1516, 1522, 1524, 1570, 1601, 1603, 1612, 1648, 1649, 1651, 1749, 1751, 1751, 1776, 1777, 1788, 1790, 1793, 1793, 1810, 1810, 1812, 1841, 1871, 1959, 1971, 1971, 1996, 2028, 2050, 2071, 2114, 2138, 2210, 2210, 2212, 2222, 2310, 2363, 2367, 2367, 2386, 2386, 2394, 2403, 2420, 2425, 2427, 2433, 2439, 2446, 2449, 2450, 2453, 2474, 2476, 2482, 2484, 2484, 2488, 2491, 2495, 2495, 2512, 2512, 2526, 2527, 2529, 2531, 2546, 2547, 2567, 2572, 2577, 2578, 2581, 2602, 2604, 2610, 2612, 2613, 2615, 2616, 2618, 2619, 2651, 2654, 2656, 2656, 2676, 2678, 2695, 2703, 2705, 2707, 2709, 2730, 2732, 2738, 2740, 2741, 2743, 2747, 2751, 2751, 2770, 2770, 2786, 2787, 2823, 2830, 2833, 2834, 2837, 2858, 2860, 2866, 2868, 2869, 2871, 2875, 2879, 2879, 2910, 2911, 2913, 2915, 2931, 2931, 2949, 2949, 2951, 2956, 2960, 2962, 2964, 2967, 2971, 2972, 2974, 2974, 2976, 2977, 2981, 2982, 2986, 2988, 2992, 3003, 3026, 3026, 3079, 3086, 3088, 3090, 3092, 3114, 3116, 3125, 3127, 3131, 3135, 3135, 3162, 3163, 3170, 3171, 3207, 3214, 3216, 3218, 3220, 3242, 3244, 3253, 3255, 3259, 3263, 3263, 3296, 3296, 3298, 3299, 3315, 3316, 3335, 3342, 3344, 3346, 3348, 3388, 3391, 3391, 3408, 3408, 3426, 3427, 3452, 3457, 3463, 3480, 3484, 3507, 3509, 3517, 3519, 3519, 3522, 3528, 3587, 3634, 3636, 3637, 3650, 3655, 3715, 3716, 3718, 3718, 3721, 3722, 3724, 3724, 3727, 3727, 3734, 3737, 3739, 3745, 3747, 3749, 3751, 3751, 3753, 3753, 3756, 3757, 3759, 3762, 3764, 3765, 3775, 3775, 3778, 3782, 3806, 3809, 3842, 3842, 3906, 3913, 3915, 3950, 3978, 3982, 4098, 4140, 4161, 4161, 4178, 4183, 4188, 4191, 4195, 4195, 4199, 4200, 4208, 4210, 4215, 4227, 4240, 4240, 4306, 4348, 4351, 4682, 4684, 4687, 4690, 4696, 4698, 4698, 4700, 4703, 4706, 4746, 4748, 4751, 4754, 4786, 4788, 4791, 4794, 4800, 4802, 4802, 4804, 4807, 4810, 4824, 4826, 4882, 4884, 4887, 4890, 4956, 4994, 5009, 5026, 5110, 5123, 5742, 5745, 5761, 5763, 5788, 5794, 5868, 5890, 5902, 5904, 5907, 5922, 5939, 5954, 5971, 5986, 5998, 6000, 6002, 6018, 6069, 6110, 6110, 6178, 6212, 6214, 6265, 6274, 6314, 6316, 6316, 6322, 6391, 6402, 6430, 6482, 6511, 6514, 6518, 6530, 6573, 6595, 6601, 6658, 6680, 6690, 6742, 6919, 6965, 6983, 6989, 7045, 7074, 7088, 7089, 7100, 7143, 7170, 7205, 7247, 7249, 7260, 7289, 7403, 7406, 7408, 7411, 7415, 7416, 8503, 8506, 11570, 11625, 11650, 11672, 11682, 11688, 11690, 11696, 11698, 11704, 11706, 11712, 11714, 11720, 11722, 11728, 11730, 11736, 11738, 11744, 12296, 12296, 12350, 12350, 12355, 12440, 12449, 12449, 12451, 12540, 12545, 12545, 12551, 12591, 12595, 12688, 12706, 12732, 12786, 12801, 13314, 13314, 19895, 19895, 19970, 19970, 40910, 40910, 40962, 40982, 40984, 42126, 42194, 42233, 42242, 42509, 42514, 42529, 42540, 42541, 42608, 42608, 42658, 42727, 43005, 43011, 43013, 43015, 43017, 43020, 43022, 43044, 43074, 43125, 43140, 43189, 43252, 43257, 43261, 43261, 43276, 43303, 43314, 43336, 43362, 43390, 43398, 43444, 43522, 43562, 43586, 43588, 43590, 43597, 43618, 43633, 43635, 43640, 43644, 43644, 43650, 43697, 43699, 43699, 43703, 43704, 43707, 43711, 43714, 43714, 43716, 43716, 43741, 43742, 43746, 43756, 43764, 43764, 43779, 43784, 43787, 43792, 43795, 43800, 43810, 43816, 43818, 43824, 43970, 44004, 44034, 44034, 55205, 55205, 55218, 55240, 55245, 55293, 63746, 64111, 64114, 64219, 64287, 64287, 64289, 64298, 64300, 64312, 64314, 64318, 64320, 64320, 64322, 64323, 64325, 64326, 64328, 64435, 64469, 64831, 64850, 64913, 64916, 64969, 65010, 65021, 65138, 65142, 65144, 65278, 65384, 65393, 65395, 65439, 65442, 65472, 65476, 65481, 65484, 65489, 65492, 65497, 65500, 65502, 12, 2, 455, 455, 458, 458, 461, 461, 500, 500, 8074, 8081, 8090, 8097, 8106, 8113, 8126, 8126, 8142, 8142, 8190, 8190, 578, 2, 67, 92, 194, 216, 218, 224, 258, 258, 260, 260, 262, 262, 264, 264, 266, 266, 268, 268, 270, 270, 272, 272, 274, 274, 276, 276, 278, 278, 280, 280, 282, 282, 284, 284, 286, 286, 288, 288, 290, 290, 292, 292, 294, 294, 296, 296, 298, 298, 300, 300, 302, 302, 304, 304, 306, 306, 308, 308, 310, 310, 312, 312, 315, 315, 317, 317, 319, 319, 321, 321, 323, 323, 325, 325, 327, 327, 329, 329, 332, 332, 334, 334, 336, 336, 338, 338, 340, 340, 342, 342, 344, 344, 346, 346, 348, 348, 350, 350, 352, 352, 354, 354, 356, 356, 358, 358, 360, 360, 362, 362, 364, 364, 366, 366, 368, 368, 370, 370, 372, 372, 374, 374, 376, 376, 378, 379, 381, 381, 383, 383, 387, 388, 390, 390, 392, 393, 395, 397, 400, 403, 405, 406, 408, 410, 414, 415, 417, 418, 420, 420, 422, 422, 424, 425, 427, 427, 430, 430, 432, 433, 435, 437, 439, 439, 441, 442, 446, 446, 454, 454, 457, 457, 460, 460, 463, 463, 465, 465, 467, 467, 469, 469, 471, 471, 473, 473, 475, 475, 477, 477, 480, 480, 482, 482, 484, 484, 486, 486, 488, 488, 490, 490, 492, 492, 494, 494, 496, 496, 499, 499, 502, 502, 504, 506, 508, 508, 510, 510, 512, 512, 514, 514, 516, 516, 518, 518, 520, 520, 522, 522, 524, 524, 526, 526, 528, 528, 530, 530, 532, 532, 534, 534, 536, 536, 538, 538, 540, 540, 542, 542, 544, 544, 546, 546, 548, 548, 550, 550, 552, 552, 554, 554, 556, 556, 558, 558, 560, 560, 562, 562, 564, 564, 572, 573, 575, 576, 579, 579, 581, 584, 586, 586, 588, 588, 590, 590, 592, 592, 882, 882, 884, 884, 888, 888, 904, 904, 906, 908, 910, 910, 912, 913, 915, 931, 933, 941, 977, 977, 980, 982, 986, 986, 988, 988, 990, 990, 992, 992, 994, 994, 996, 996, 998, 998, 1000, 1000, 1002, 1002, 1004, 1004, 1006, 1006, 1008, 1008, 1014, 1014, 1017, 1017, 1019, 1020, 1023, 1073, 1122, 1122, 1124, 1124, 1126, 1126, 1128, 1128, 1130, 1130, 1132, 1132, 1134, 1134, 1136, 1136, 1138, 1138, 1140, 1140, 1142, 1142, 1144, 1144, 1146, 1146, 1148, 1148, 1150, 1150, 1152, 1152, 1154, 1154, 1164, 1164, 1166, 1166, 1168, 1168, 1170, 1170, 1172, 1172, 1174, 1174, 1176, 1176, 1178, 1178, 1180, 1180, 1182, 1182, 1184, 1184, 1186, 1186, 1188, 1188, 1190, 1190, 1192, 1192, 1194, 1194, 1196, 1196, 1198, 1198, 1200, 1200, 1202, 1202, 1204, 1204, 1206, 1206, 1208, 1208, 1210, 1210, 1212, 1212, 1214, 1214, 1216, 1216, 1218, 1219, 1221, 1221, 1223, 1223, 1225, 1225, 1227, 1227, 1229, 1229, 1231, 1231, 1234, 1234, 1236, 1236, 1238, 1238, 1240, 1240, 1242, 1242, 1244, 1244, 1246, 1246, 1248, 1248, 1250, 1250, 1252, 1252, 1254, 1254, 1256, 1256, 1258, 1258, 1260, 1260, 1262, 1262, 1264, 1264, 1266, 1266, 1268, 1268, 1270, 1270, 1272, 1272, 1274, 1274, 1276, 1276, 1278, 1278, 1280, 1280, 1282, 1282, 1284, 1284, 1286, 1286, 1288, 1288, 1290, 1290, 1292, 1292, 1294, 1294, 1296, 1296, 1298, 1298, 1300, 1300, 1302, 1302, 1304, 1304, 1306, 1306, 1308, 1308, 1310, 1310, 1312, 1312, 1314, 1314, 1316, 1316, 1318, 1318, 1320, 1320, 1331, 1368, 4258, 4295, 4297, 4297, 4303, 4303, 7682, 7682, 7684, 7684, 7686, 7686, 7688, 7688, 7690, 7690, 7692, 7692, 7694, 7694, 7696, 7696, 7698, 7698, 7700, 7700, 7702, 7702, 7704, 7704, 7706, 7706, 7708, 7708, 7710, 7710, 7712, 7712, 7714, 7714, 7716, 7716, 7718, 7718, 7720, 7720, 7722, 7722, 7724, 7724, 7726, 7726, 7728, 7728, 7730, 7730, 7732, 7732, 7734, 7734, 7736, 7736, 7738, 7738, 7740, 7740, 7742, 7742, 7744, 7744, 7746, 7746, 7748, 7748, 7750, 7750, 7752, 7752, 7754, 7754, 7756, 7756, 7758, 7758, 7760, 7760, 7762, 7762, 7764, 7764, 7766, 7766, 7768, 7768, 7770, 7770, 7772, 7772, 7774, 7774, 7776, 7776, 7778, 7778, 7780, 7780, 7782, 7782, 7784, 7784, 7786, 7786, 7788, 7788, 7790, 7790, 7792, 7792, 7794, 7794, 7796, 7796, 7798, 7798, 7800, 7800, 7802, 7802, 7804, 7804, 7806, 7806, 7808, 7808, 7810, 7810, 7812, 7812, 7814, 7814, 7816, 7816, 7818, 7818, 7820, 7820, 7822, 7822, 7824, 7824, 7826, 7826, 7828, 7828, 7830, 7830, 7840, 7840, 7842, 7842, 7844, 7844, 7846, 7846, 7848, 7848, 7850, 7850, 7852, 7852, 7854, 7854, 7856, 7856, 7858, 7858, 7860, 7860, 7862, 7862, 7864, 7864, 7866, 7866, 7868, 7868, 7870, 7870, 7872, 7872, 7874, 7874, 7876, 7876, 7878, 7878, 7880, 7880, 7882, 7882, 7884, 7884, 7886, 7886, 7888, 7888, 7890, 7890, 7892, 7892, 7894, 7894, 7896, 7896, 7898, 7898, 7900, 7900, 7902, 7902, 7904, 7904, 7906, 7906, 7908, 7908, 7910, 7910, 7912, 7912, 7914, 7914, 7916, 7916, 7918, 7918, 7920, 7920, 7922, 7922, 7924, 7924, 7926, 7926, 7928, 7928, 7930, 7930, 7932, 7932, 7934, 7934, 7936, 7936, 7946, 7953, 7962, 7967, 7978, 7985, 7994, 8001, 8010, 8015, 8027, 8027, 8029, 8029, 8031, 8031, 8033, 8033, 8042, 8049, 8122, 8125, 8138, 8141, 8154, 8157, 8170, 8174, 8186, 8189, 8452, 8452, 8457, 8457, 8461, 8463, 8466, 8468, 8471, 8471, 8475, 8479, 8486, 8486, 8488, 8488, 8490, 8490, 8492, 8495, 8498, 8501, 8512, 8513, 8519, 8519, 8581, 8581, 11266, 11312, 11362, 11362, 11364, 11366, 11369, 11369, 11371, 11371, 11373, 11373, 11375, 11378, 11380, 11380, 11383, 11383, 11392, 11394, 11396, 11396, 11398, 11398, 11400, 11400, 11402, 11402, 11404, 11404, 11406, 11406, 11408, 11408, 11410, 11410, 11412, 11412, 11414, 11414, 11416, 11416, 11418, 11418, 11420, 11420, 11422, 11422, 11424, 11424, 11426, 11426, 11428, 11428, 11430, 11430, 11432, 11432, 11434, 11434, 11436, 11436, 11438, 11438, 11440, 11440, 11442, 11442, 11444, 11444, 11446, 11446, 11448, 11448, 11450, 11450, 11452, 11452, 11454, 11454, 11456, 11456, 11458, 11458, 11460, 11460, 11462, 11462, 11464, 11464, 11466, 11466, 11468, 11468, 11470, 11470, 11472, 11472, 11474, 11474, 11476, 11476, 11478, 11478, 11480, 11480, 11482, 11482, 11484, 11484, 11486, 11486, 11488, 11488, 11490, 11490, 11492, 11492, 11501, 11501, 11503, 11503, 11508, 11508, 42562, 42562, 42564, 42564, 42566, 42566, 42568, 42568, 42570, 42570, 42572, 42572, 42574, 42574, 42576, 42576, 42578, 42578, 42580, 42580, 42582, 42582, 42584, 42584, 42586, 42586, 42588, 42588, 42590, 42590, 42592, 42592, 42594, 42594, 42596, 42596, 42598, 42598, 42600, 42600, 42602, 42602, 42604, 42604, 42606, 42606, 42626, 42626, 42628, 42628, 42630, 42630, 42632, 42632, 42634, 42634, 42636, 42636, 42638, 42638, 42640, 42640, 42642, 42642, 42644, 42644, 42646, 42646, 42648, 42648, 42788, 42788, 42790, 42790, 42792, 42792, 42794, 42794, 42796, 42796, 42798, 42798, 42800, 42800, 42804, 42804, 42806, 42806, 42808, 42808, 42810, 42810, 42812, 42812, 42814, 42814, 42816, 42816, 42818, 42818, 42820, 42820, 42822, 42822, 42824, 42824, 42826, 42826, 42828, 42828, 42830, 42830, 42832, 42832, 42834, 42834, 42836, 42836, 42838, 42838, 42840, 42840, 42842, 42842, 42844, 42844, 42846, 42846, 42848, 42848, 42850, 42850, 42852, 42852, 42854, 42854, 42856, 42856, 42858, 42858, 42860, 42860, 42862, 42862, 42864, 42864, 42875, 42875, 42877, 42877, 42879, 42880, 42882, 42882, 42884, 42884, 42886, 42886, 42888, 42888, 42893, 42893, 42895, 42895, 42898, 42898, 42900, 42900, 42914, 42914, 42916, 42916, 42918, 42918, 42920, 42920, 42922, 42922, 42924, 42924, 65315, 65340, 37, 2, 50, 59, 1634, 1643, 1778, 1787, 1986, 1995, 2408, 2417, 2536, 2545, 2664, 2673, 2792, 2801, 2920, 2929, 3048, 3057, 3176, 3185, 3304, 3313, 3432, 3441, 3666, 3675, 3794, 3803, 3874, 3883, 4162, 4171, 4242, 4251, 6114, 6123, 6162, 6171, 6472, 6481, 6610, 6619, 6786, 6795, 6802, 6811, 6994, 7003, 7090, 7099, 7234, 7243, 7250, 7259, 42530, 42539, 43218, 43227, 43266, 43275, 43474, 43483, 43602, 43611, 44018, 44027, 65298, 65307, 9, 2, 5872, 5874, 8546, 8580, 8583, 8586, 12297, 12297, 12323, 12331, 12346, 12348, 42728, 42737, 2, 30, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 3, 17, 3, 2, 2, 2, 5, 19, 3, 2, 2, 2, 7, 21, 3, 2, 2, 2, 9, 23, 3, 2, 2, 2, 11, 25, 3, 2, 2, 2, 13, 27, 3, 2, 2, 2, 15, 29, 3, 2, 2, 2, 17, 18, 9, 2, 2, 2, 18, 4, 3, 2, 2, 2, 19, 20, 9, 3, 2, 2, 20, 6, 3, 2, 2, 2, 21, 22, 9, 4, 2, 2, 22, 8, 3, 2, 2, 2, 23, 24, 9, 5, 2, 2, 24, 10, 3, 2, 2, 2, 25, 26, 9, 6, 2, 2, 26, 12, 3, 2, 2, 2, 27, 28, 9, 7, 2, 2, 28, 14, 3, 2, 2, 2, 29, 30, 9, 8, 2, 2, 30, 16, 3, 2, 2, 2, 3, 2, 2] \ No newline at end of file diff --git a/lexers/src/main/java/com/itsaky/androidide/lexers/kotlin/UnicodeClasses.java b/lexers/src/main/java/com/itsaky/androidide/lexers/kotlin/UnicodeClasses.java new file mode 100644 index 000000000..ca7f0adf0 --- /dev/null +++ b/lexers/src/main/java/com/itsaky/androidide/lexers/kotlin/UnicodeClasses.java @@ -0,0 +1,384 @@ +// Generated from UnicodeClasses.g4 by ANTLR 4.9.2 +package com.itsaky.androidide.lexers.kotlin; +import org.antlr.v4.runtime.Lexer; +import org.antlr.v4.runtime.CharStream; +import org.antlr.v4.runtime.Token; +import org.antlr.v4.runtime.TokenStream; +import org.antlr.v4.runtime.*; +import org.antlr.v4.runtime.atn.*; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.misc.*; + +@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"}) +public class UnicodeClasses extends Lexer { + static { RuntimeMetaData.checkVersion("4.9.2", RuntimeMetaData.VERSION); } + + protected static final DFA[] _decisionToDFA; + protected static final PredictionContextCache _sharedContextCache = + new PredictionContextCache(); + public static final int + UNICODE_CLASS_LL=1, UNICODE_CLASS_LM=2, UNICODE_CLASS_LO=3, UNICODE_CLASS_LT=4, + UNICODE_CLASS_LU=5, UNICODE_CLASS_ND=6, UNICODE_CLASS_NL=7; + public static String[] channelNames = { + "DEFAULT_TOKEN_CHANNEL", "HIDDEN" + }; + + public static String[] modeNames = { + "DEFAULT_MODE" + }; + + private static String[] makeRuleNames() { + return new String[] { + "UNICODE_CLASS_LL", "UNICODE_CLASS_LM", "UNICODE_CLASS_LO", "UNICODE_CLASS_LT", + "UNICODE_CLASS_LU", "UNICODE_CLASS_ND", "UNICODE_CLASS_NL" + }; + } + public static final String[] ruleNames = makeRuleNames(); + + private static String[] makeLiteralNames() { + return new String[] { + }; + } + private static final String[] _LITERAL_NAMES = makeLiteralNames(); + private static String[] makeSymbolicNames() { + return new String[] { + null, "UNICODE_CLASS_LL", "UNICODE_CLASS_LM", "UNICODE_CLASS_LO", "UNICODE_CLASS_LT", + "UNICODE_CLASS_LU", "UNICODE_CLASS_ND", "UNICODE_CLASS_NL" + }; + } + private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); + public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); + + /** + * @deprecated Use {@link #VOCABULARY} instead. + */ + @Deprecated + public static final String[] tokenNames; + static { + tokenNames = new String[_SYMBOLIC_NAMES.length]; + for (int i = 0; i < tokenNames.length; i++) { + tokenNames[i] = VOCABULARY.getLiteralName(i); + if (tokenNames[i] == null) { + tokenNames[i] = VOCABULARY.getSymbolicName(i); + } + + if (tokenNames[i] == null) { + tokenNames[i] = ""; + } + } + } + + @Override + @Deprecated + public String[] getTokenNames() { + return tokenNames; + } + + @Override + + public Vocabulary getVocabulary() { + return VOCABULARY; + } + + + public UnicodeClasses(CharStream input) { + super(input); + _interp = new LexerATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache); + } + + @Override + public String getGrammarFileName() { return "UnicodeClasses.g4"; } + + @Override + public String[] getRuleNames() { return ruleNames; } + + @Override + public String getSerializedATN() { return _serializedATN; } + + @Override + public String[] getChannelNames() { return channelNames; } + + @Override + public String[] getModeNames() { return modeNames; } + + @Override + public ATN getATN() { return _ATN; } + + public static final String _serializedATN = + "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\t\37\b\1\4\2\t\2"+ + "\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\3\2\3\2\3\3\3\3\3\4\3"+ + "\4\3\5\3\5\3\6\3\6\3\7\3\7\3\b\3\b\2\2\t\3\3\5\4\7\5\t\6\13\7\r\b\17\t"+ + "\3\2\t\u0248\2c|\u00b7\u00b7\u00e1\u00f8\u00fa\u0101\u0103\u0103\u0105"+ + "\u0105\u0107\u0107\u0109\u0109\u010b\u010b\u010d\u010d\u010f\u010f\u0111"+ + "\u0111\u0113\u0113\u0115\u0115\u0117\u0117\u0119\u0119\u011b\u011b\u011d"+ + "\u011d\u011f\u011f\u0121\u0121\u0123\u0123\u0125\u0125\u0127\u0127\u0129"+ + "\u0129\u012b\u012b\u012d\u012d\u012f\u012f\u0131\u0131\u0133\u0133\u0135"+ + "\u0135\u0137\u0137\u0139\u013a\u013c\u013c\u013e\u013e\u0140\u0140\u0142"+ + "\u0142\u0144\u0144\u0146\u0146\u0148\u0148\u014a\u014b\u014d\u014d\u014f"+ + "\u014f\u0151\u0151\u0153\u0153\u0155\u0155\u0157\u0157\u0159\u0159\u015b"+ + "\u015b\u015d\u015d\u015f\u015f\u0161\u0161\u0163\u0163\u0165\u0165\u0167"+ + "\u0167\u0169\u0169\u016b\u016b\u016d\u016d\u016f\u016f\u0171\u0171\u0173"+ + "\u0173\u0175\u0175\u0177\u0177\u0179\u0179\u017c\u017c\u017e\u017e\u0180"+ + "\u0182\u0185\u0185\u0187\u0187\u018a\u018a\u018e\u018f\u0194\u0194\u0197"+ + "\u0197\u019b\u019d\u01a0\u01a0\u01a3\u01a3\u01a5\u01a5\u01a7\u01a7\u01aa"+ + "\u01aa\u01ac\u01ad\u01af\u01af\u01b2\u01b2\u01b6\u01b6\u01b8\u01b8\u01bb"+ + "\u01bc\u01bf\u01c1\u01c8\u01c8\u01cb\u01cb\u01ce\u01ce\u01d0\u01d0\u01d2"+ + "\u01d2\u01d4\u01d4\u01d6\u01d6\u01d8\u01d8\u01da\u01da\u01dc\u01dc\u01de"+ + "\u01df\u01e1\u01e1\u01e3\u01e3\u01e5\u01e5\u01e7\u01e7\u01e9\u01e9\u01eb"+ + "\u01eb\u01ed\u01ed\u01ef\u01ef\u01f1\u01f2\u01f5\u01f5\u01f7\u01f7\u01fb"+ + "\u01fb\u01fd\u01fd\u01ff\u01ff\u0201\u0201\u0203\u0203\u0205\u0205\u0207"+ + "\u0207\u0209\u0209\u020b\u020b\u020d\u020d\u020f\u020f\u0211\u0211\u0213"+ + "\u0213\u0215\u0215\u0217\u0217\u0219\u0219\u021b\u021b\u021d\u021d\u021f"+ + "\u021f\u0221\u0221\u0223\u0223\u0225\u0225\u0227\u0227\u0229\u0229\u022b"+ + "\u022b\u022d\u022d\u022f\u022f\u0231\u0231\u0233\u0233\u0235\u023b\u023e"+ + "\u023e\u0241\u0242\u0244\u0244\u0249\u0249\u024b\u024b\u024d\u024d\u024f"+ + "\u024f\u0251\u0295\u0297\u02b1\u0373\u0373\u0375\u0375\u0379\u0379\u037d"+ + "\u037f\u0392\u0392\u03ae\u03d0\u03d2\u03d3\u03d7\u03d9\u03db\u03db\u03dd"+ + "\u03dd\u03df\u03df\u03e1\u03e1\u03e3\u03e3\u03e5\u03e5\u03e7\u03e7\u03e9"+ + "\u03e9\u03eb\u03eb\u03ed\u03ed\u03ef\u03ef\u03f1\u03f5\u03f7\u03f7\u03fa"+ + "\u03fa\u03fd\u03fe\u0432\u0461\u0463\u0463\u0465\u0465\u0467\u0467\u0469"+ + "\u0469\u046b\u046b\u046d\u046d\u046f\u046f\u0471\u0471\u0473\u0473\u0475"+ + "\u0475\u0477\u0477\u0479\u0479\u047b\u047b\u047d\u047d\u047f\u047f\u0481"+ + "\u0481\u0483\u0483\u048d\u048d\u048f\u048f\u0491\u0491\u0493\u0493\u0495"+ + "\u0495\u0497\u0497\u0499\u0499\u049b\u049b\u049d\u049d\u049f\u049f\u04a1"+ + "\u04a1\u04a3\u04a3\u04a5\u04a5\u04a7\u04a7\u04a9\u04a9\u04ab\u04ab\u04ad"+ + "\u04ad\u04af\u04af\u04b1\u04b1\u04b3\u04b3\u04b5\u04b5\u04b7\u04b7\u04b9"+ + "\u04b9\u04bb\u04bb\u04bd\u04bd\u04bf\u04bf\u04c1\u04c1\u04c4\u04c4\u04c6"+ + "\u04c6\u04c8\u04c8\u04ca\u04ca\u04cc\u04cc\u04ce\u04ce\u04d0\u04d1\u04d3"+ + "\u04d3\u04d5\u04d5\u04d7\u04d7\u04d9\u04d9\u04db\u04db\u04dd\u04dd\u04df"+ + "\u04df\u04e1\u04e1\u04e3\u04e3\u04e5\u04e5\u04e7\u04e7\u04e9\u04e9\u04eb"+ + "\u04eb\u04ed\u04ed\u04ef\u04ef\u04f1\u04f1\u04f3\u04f3\u04f5\u04f5\u04f7"+ + "\u04f7\u04f9\u04f9\u04fb\u04fb\u04fd\u04fd\u04ff\u04ff\u0501\u0501\u0503"+ + "\u0503\u0505\u0505\u0507\u0507\u0509\u0509\u050b\u050b\u050d\u050d\u050f"+ + "\u050f\u0511\u0511\u0513\u0513\u0515\u0515\u0517\u0517\u0519\u0519\u051b"+ + "\u051b\u051d\u051d\u051f\u051f\u0521\u0521\u0523\u0523\u0525\u0525\u0527"+ + "\u0527\u0529\u0529\u0563\u0589\u1d02\u1d2d\u1d6d\u1d79\u1d7b\u1d9c\u1e03"+ + "\u1e03\u1e05\u1e05\u1e07\u1e07\u1e09\u1e09\u1e0b\u1e0b\u1e0d\u1e0d\u1e0f"+ + "\u1e0f\u1e11\u1e11\u1e13\u1e13\u1e15\u1e15\u1e17\u1e17\u1e19\u1e19\u1e1b"+ + "\u1e1b\u1e1d\u1e1d\u1e1f\u1e1f\u1e21\u1e21\u1e23\u1e23\u1e25\u1e25\u1e27"+ + "\u1e27\u1e29\u1e29\u1e2b\u1e2b\u1e2d\u1e2d\u1e2f\u1e2f\u1e31\u1e31\u1e33"+ + "\u1e33\u1e35\u1e35\u1e37\u1e37\u1e39\u1e39\u1e3b\u1e3b\u1e3d\u1e3d\u1e3f"+ + "\u1e3f\u1e41\u1e41\u1e43\u1e43\u1e45\u1e45\u1e47\u1e47\u1e49\u1e49\u1e4b"+ + "\u1e4b\u1e4d\u1e4d\u1e4f\u1e4f\u1e51\u1e51\u1e53\u1e53\u1e55\u1e55\u1e57"+ + "\u1e57\u1e59\u1e59\u1e5b\u1e5b\u1e5d\u1e5d\u1e5f\u1e5f\u1e61\u1e61\u1e63"+ + "\u1e63\u1e65\u1e65\u1e67\u1e67\u1e69\u1e69\u1e6b\u1e6b\u1e6d\u1e6d\u1e6f"+ + "\u1e6f\u1e71\u1e71\u1e73\u1e73\u1e75\u1e75\u1e77\u1e77\u1e79\u1e79\u1e7b"+ + "\u1e7b\u1e7d\u1e7d\u1e7f\u1e7f\u1e81\u1e81\u1e83\u1e83\u1e85\u1e85\u1e87"+ + "\u1e87\u1e89\u1e89\u1e8b\u1e8b\u1e8d\u1e8d\u1e8f\u1e8f\u1e91\u1e91\u1e93"+ + "\u1e93\u1e95\u1e95\u1e97\u1e9f\u1ea1\u1ea1\u1ea3\u1ea3\u1ea5\u1ea5\u1ea7"+ + "\u1ea7\u1ea9\u1ea9\u1eab\u1eab\u1ead\u1ead\u1eaf\u1eaf\u1eb1\u1eb1\u1eb3"+ + "\u1eb3\u1eb5\u1eb5\u1eb7\u1eb7\u1eb9\u1eb9\u1ebb\u1ebb\u1ebd\u1ebd\u1ebf"+ + "\u1ebf\u1ec1\u1ec1\u1ec3\u1ec3\u1ec5\u1ec5\u1ec7\u1ec7\u1ec9\u1ec9\u1ecb"+ + "\u1ecb\u1ecd\u1ecd\u1ecf\u1ecf\u1ed1\u1ed1\u1ed3\u1ed3\u1ed5\u1ed5\u1ed7"+ + "\u1ed7\u1ed9\u1ed9\u1edb\u1edb\u1edd\u1edd\u1edf\u1edf\u1ee1\u1ee1\u1ee3"+ + "\u1ee3\u1ee5\u1ee5\u1ee7\u1ee7\u1ee9\u1ee9\u1eeb\u1eeb\u1eed\u1eed\u1eef"+ + "\u1eef\u1ef1\u1ef1\u1ef3\u1ef3\u1ef5\u1ef5\u1ef7\u1ef7\u1ef9\u1ef9\u1efb"+ + "\u1efb\u1efd\u1efd\u1eff\u1eff\u1f01\u1f09\u1f12\u1f17\u1f22\u1f29\u1f32"+ + "\u1f39\u1f42\u1f47\u1f52\u1f59\u1f62\u1f69\u1f72\u1f7f\u1f82\u1f89\u1f92"+ + "\u1f99\u1fa2\u1fa9\u1fb2\u1fb6\u1fb8\u1fb9\u1fc0\u1fc0\u1fc4\u1fc6\u1fc8"+ + "\u1fc9\u1fd2\u1fd5\u1fd8\u1fd9\u1fe2\u1fe9\u1ff4\u1ff6\u1ff8\u1ff9\u210c"+ + "\u210c\u2110\u2111\u2115\u2115\u2131\u2131\u2136\u2136\u213b\u213b\u213e"+ + "\u213f\u2148\u214b\u2150\u2150\u2186\u2186\u2c32\u2c60\u2c63\u2c63\u2c67"+ + "\u2c68\u2c6a\u2c6a\u2c6c\u2c6c\u2c6e\u2c6e\u2c73\u2c73\u2c75\u2c76\u2c78"+ + "\u2c7d\u2c83\u2c83\u2c85\u2c85\u2c87\u2c87\u2c89\u2c89\u2c8b\u2c8b\u2c8d"+ + "\u2c8d\u2c8f\u2c8f\u2c91\u2c91\u2c93\u2c93\u2c95\u2c95\u2c97\u2c97\u2c99"+ + "\u2c99\u2c9b\u2c9b\u2c9d\u2c9d\u2c9f\u2c9f\u2ca1\u2ca1\u2ca3\u2ca3\u2ca5"+ + "\u2ca5\u2ca7\u2ca7\u2ca9\u2ca9\u2cab\u2cab\u2cad\u2cad\u2caf\u2caf\u2cb1"+ + "\u2cb1\u2cb3\u2cb3\u2cb5\u2cb5\u2cb7\u2cb7\u2cb9\u2cb9\u2cbb\u2cbb\u2cbd"+ + "\u2cbd\u2cbf\u2cbf\u2cc1\u2cc1\u2cc3\u2cc3\u2cc5\u2cc5\u2cc7\u2cc7\u2cc9"+ + "\u2cc9\u2ccb\u2ccb\u2ccd\u2ccd\u2ccf\u2ccf\u2cd1\u2cd1\u2cd3\u2cd3\u2cd5"+ + "\u2cd5\u2cd7\u2cd7\u2cd9\u2cd9\u2cdb\u2cdb\u2cdd\u2cdd\u2cdf\u2cdf\u2ce1"+ + "\u2ce1\u2ce3\u2ce3\u2ce5\u2ce6\u2cee\u2cee\u2cf0\u2cf0\u2cf5\u2cf5\u2d02"+ + "\u2d27\u2d29\u2d29\u2d2f\u2d2f\ua643\ua643\ua645\ua645\ua647\ua647\ua649"+ + "\ua649\ua64b\ua64b\ua64d\ua64d\ua64f\ua64f\ua651\ua651\ua653\ua653\ua655"+ + "\ua655\ua657\ua657\ua659\ua659\ua65b\ua65b\ua65d\ua65d\ua65f\ua65f\ua661"+ + "\ua661\ua663\ua663\ua665\ua665\ua667\ua667\ua669\ua669\ua66b\ua66b\ua66d"+ + "\ua66d\ua66f\ua66f\ua683\ua683\ua685\ua685\ua687\ua687\ua689\ua689\ua68b"+ + "\ua68b\ua68d\ua68d\ua68f\ua68f\ua691\ua691\ua693\ua693\ua695\ua695\ua697"+ + "\ua697\ua699\ua699\ua725\ua725\ua727\ua727\ua729\ua729\ua72b\ua72b\ua72d"+ + "\ua72d\ua72f\ua72f\ua731\ua733\ua735\ua735\ua737\ua737\ua739\ua739\ua73b"+ + "\ua73b\ua73d\ua73d\ua73f\ua73f\ua741\ua741\ua743\ua743\ua745\ua745\ua747"+ + "\ua747\ua749\ua749\ua74b\ua74b\ua74d\ua74d\ua74f\ua74f\ua751\ua751\ua753"+ + "\ua753\ua755\ua755\ua757\ua757\ua759\ua759\ua75b\ua75b\ua75d\ua75d\ua75f"+ + "\ua75f\ua761\ua761\ua763\ua763\ua765\ua765\ua767\ua767\ua769\ua769\ua76b"+ + "\ua76b\ua76d\ua76d\ua76f\ua76f\ua771\ua771\ua773\ua77a\ua77c\ua77c\ua77e"+ + "\ua77e\ua781\ua781\ua783\ua783\ua785\ua785\ua787\ua787\ua789\ua789\ua78e"+ + "\ua78e\ua790\ua790\ua793\ua793\ua795\ua795\ua7a3\ua7a3\ua7a5\ua7a5\ua7a7"+ + "\ua7a7\ua7a9\ua7a9\ua7ab\ua7ab\ua7fc\ua7fc\ufb02\ufb08\ufb15\ufb19\uff43"+ + "\uff5c\65\2\u02b2\u02c3\u02c8\u02d3\u02e2\u02e6\u02ee\u02ee\u02f0\u02f0"+ + "\u0376\u0376\u037c\u037c\u055b\u055b\u0642\u0642\u06e7\u06e8\u07f6\u07f7"+ + "\u07fc\u07fc\u081c\u081c\u0826\u0826\u082a\u082a\u0973\u0973\u0e48\u0e48"+ + "\u0ec8\u0ec8\u10fe\u10fe\u17d9\u17d9\u1845\u1845\u1aa9\u1aa9\u1c7a\u1c7f"+ + "\u1d2e\u1d6c\u1d7a\u1d7a\u1d9d\u1dc1\u2073\u2073\u2081\u2081\u2092\u209e"+ + "\u2c7e\u2c7f\u2d71\u2d71\u2e31\u2e31\u3007\u3007\u3033\u3037\u303d\u303d"+ + "\u309f\u30a0\u30fe\u3100\ua017\ua017\ua4fa\ua4ff\ua60e\ua60e\ua681\ua681"+ + "\ua719\ua721\ua772\ua772\ua78a\ua78a\ua7fa\ua7fb\ua9d1\ua9d1\uaa72\uaa72"+ + "\uaadf\uaadf\uaaf5\uaaf6\uff72\uff72\uffa0\uffa1\u0123\2\u00ac\u00ac\u00bc"+ + "\u00bc\u01bd\u01bd\u01c2\u01c5\u0296\u0296\u05d2\u05ec\u05f2\u05f4\u0622"+ + "\u0641\u0643\u064c\u0670\u0671\u0673\u06d5\u06d7\u06d7\u06f0\u06f1\u06fc"+ + "\u06fe\u0701\u0701\u0712\u0712\u0714\u0731\u074f\u07a7\u07b3\u07b3\u07cc"+ + "\u07ec\u0802\u0817\u0842\u085a\u08a2\u08a2\u08a4\u08ae\u0906\u093b\u093f"+ + "\u093f\u0952\u0952\u095a\u0963\u0974\u0979\u097b\u0981\u0987\u098e\u0991"+ + "\u0992\u0995\u09aa\u09ac\u09b2\u09b4\u09b4\u09b8\u09bb\u09bf\u09bf\u09d0"+ + "\u09d0\u09de\u09df\u09e1\u09e3\u09f2\u09f3\u0a07\u0a0c\u0a11\u0a12\u0a15"+ + "\u0a2a\u0a2c\u0a32\u0a34\u0a35\u0a37\u0a38\u0a3a\u0a3b\u0a5b\u0a5e\u0a60"+ + "\u0a60\u0a74\u0a76\u0a87\u0a8f\u0a91\u0a93\u0a95\u0aaa\u0aac\u0ab2\u0ab4"+ + "\u0ab5\u0ab7\u0abb\u0abf\u0abf\u0ad2\u0ad2\u0ae2\u0ae3\u0b07\u0b0e\u0b11"+ + "\u0b12\u0b15\u0b2a\u0b2c\u0b32\u0b34\u0b35\u0b37\u0b3b\u0b3f\u0b3f\u0b5e"+ + "\u0b5f\u0b61\u0b63\u0b73\u0b73\u0b85\u0b85\u0b87\u0b8c\u0b90\u0b92\u0b94"+ + "\u0b97\u0b9b\u0b9c\u0b9e\u0b9e\u0ba0\u0ba1\u0ba5\u0ba6\u0baa\u0bac\u0bb0"+ + "\u0bbb\u0bd2\u0bd2\u0c07\u0c0e\u0c10\u0c12\u0c14\u0c2a\u0c2c\u0c35\u0c37"+ + "\u0c3b\u0c3f\u0c3f\u0c5a\u0c5b\u0c62\u0c63\u0c87\u0c8e\u0c90\u0c92\u0c94"+ + "\u0caa\u0cac\u0cb5\u0cb7\u0cbb\u0cbf\u0cbf\u0ce0\u0ce0\u0ce2\u0ce3\u0cf3"+ + "\u0cf4\u0d07\u0d0e\u0d10\u0d12\u0d14\u0d3c\u0d3f\u0d3f\u0d50\u0d50\u0d62"+ + "\u0d63\u0d7c\u0d81\u0d87\u0d98\u0d9c\u0db3\u0db5\u0dbd\u0dbf\u0dbf\u0dc2"+ + "\u0dc8\u0e03\u0e32\u0e34\u0e35\u0e42\u0e47\u0e83\u0e84\u0e86\u0e86\u0e89"+ + "\u0e8a\u0e8c\u0e8c\u0e8f\u0e8f\u0e96\u0e99\u0e9b\u0ea1\u0ea3\u0ea5\u0ea7"+ + "\u0ea7\u0ea9\u0ea9\u0eac\u0ead\u0eaf\u0eb2\u0eb4\u0eb5\u0ebf\u0ebf\u0ec2"+ + "\u0ec6\u0ede\u0ee1\u0f02\u0f02\u0f42\u0f49\u0f4b\u0f6e\u0f8a\u0f8e\u1002"+ + "\u102c\u1041\u1041\u1052\u1057\u105c\u105f\u1063\u1063\u1067\u1068\u1070"+ + "\u1072\u1077\u1083\u1090\u1090\u10d2\u10fc\u10ff\u124a\u124c\u124f\u1252"+ + "\u1258\u125a\u125a\u125c\u125f\u1262\u128a\u128c\u128f\u1292\u12b2\u12b4"+ + "\u12b7\u12ba\u12c0\u12c2\u12c2\u12c4\u12c7\u12ca\u12d8\u12da\u1312\u1314"+ + "\u1317\u131a\u135c\u1382\u1391\u13a2\u13f6\u1403\u166e\u1671\u1681\u1683"+ + "\u169c\u16a2\u16ec\u1702\u170e\u1710\u1713\u1722\u1733\u1742\u1753\u1762"+ + "\u176e\u1770\u1772\u1782\u17b5\u17de\u17de\u1822\u1844\u1846\u1879\u1882"+ + "\u18aa\u18ac\u18ac\u18b2\u18f7\u1902\u191e\u1952\u196f\u1972\u1976\u1982"+ + "\u19ad\u19c3\u19c9\u1a02\u1a18\u1a22\u1a56\u1b07\u1b35\u1b47\u1b4d\u1b85"+ + "\u1ba2\u1bb0\u1bb1\u1bbc\u1be7\u1c02\u1c25\u1c4f\u1c51\u1c5c\u1c79\u1ceb"+ + "\u1cee\u1cf0\u1cf3\u1cf7\u1cf8\u2137\u213a\u2d32\u2d69\u2d82\u2d98\u2da2"+ + "\u2da8\u2daa\u2db0\u2db2\u2db8\u2dba\u2dc0\u2dc2\u2dc8\u2dca\u2dd0\u2dd2"+ + "\u2dd8\u2dda\u2de0\u3008\u3008\u303e\u303e\u3043\u3098\u30a1\u30a1\u30a3"+ + "\u30fc\u3101\u3101\u3107\u312f\u3133\u3190\u31a2\u31bc\u31f2\u3201\u3402"+ + "\u3402\u4db7\u4db7\u4e02\u4e02\u9fce\u9fce\ua002\ua016\ua018\ua48e\ua4d2"+ + "\ua4f9\ua502\ua60d\ua612\ua621\ua62c\ua62d\ua670\ua670\ua6a2\ua6e7\ua7fd"+ + "\ua803\ua805\ua807\ua809\ua80c\ua80e\ua824\ua842\ua875\ua884\ua8b5\ua8f4"+ + "\ua8f9\ua8fd\ua8fd\ua90c\ua927\ua932\ua948\ua962\ua97e\ua986\ua9b4\uaa02"+ + "\uaa2a\uaa42\uaa44\uaa46\uaa4d\uaa62\uaa71\uaa73\uaa78\uaa7c\uaa7c\uaa82"+ + "\uaab1\uaab3\uaab3\uaab7\uaab8\uaabb\uaabf\uaac2\uaac2\uaac4\uaac4\uaadd"+ + "\uaade\uaae2\uaaec\uaaf4\uaaf4\uab03\uab08\uab0b\uab10\uab13\uab18\uab22"+ + "\uab28\uab2a\uab30\uabc2\uabe4\uac02\uac02\ud7a5\ud7a5\ud7b2\ud7c8\ud7cd"+ + "\ud7fd\uf902\ufa6f\ufa72\ufadb\ufb1f\ufb1f\ufb21\ufb2a\ufb2c\ufb38\ufb3a"+ + "\ufb3e\ufb40\ufb40\ufb42\ufb43\ufb45\ufb46\ufb48\ufbb3\ufbd5\ufd3f\ufd52"+ + "\ufd91\ufd94\ufdc9\ufdf2\ufdfd\ufe72\ufe76\ufe78\ufefe\uff68\uff71\uff73"+ + "\uff9f\uffa2\uffc0\uffc4\uffc9\uffcc\uffd1\uffd4\uffd9\uffdc\uffde\f\2"+ + "\u01c7\u01c7\u01ca\u01ca\u01cd\u01cd\u01f4\u01f4\u1f8a\u1f91\u1f9a\u1fa1"+ + "\u1faa\u1fb1\u1fbe\u1fbe\u1fce\u1fce\u1ffe\u1ffe\u0242\2C\\\u00c2\u00d8"+ + "\u00da\u00e0\u0102\u0102\u0104\u0104\u0106\u0106\u0108\u0108\u010a\u010a"+ + "\u010c\u010c\u010e\u010e\u0110\u0110\u0112\u0112\u0114\u0114\u0116\u0116"+ + "\u0118\u0118\u011a\u011a\u011c\u011c\u011e\u011e\u0120\u0120\u0122\u0122"+ + "\u0124\u0124\u0126\u0126\u0128\u0128\u012a\u012a\u012c\u012c\u012e\u012e"+ + "\u0130\u0130\u0132\u0132\u0134\u0134\u0136\u0136\u0138\u0138\u013b\u013b"+ + "\u013d\u013d\u013f\u013f\u0141\u0141\u0143\u0143\u0145\u0145\u0147\u0147"+ + "\u0149\u0149\u014c\u014c\u014e\u014e\u0150\u0150\u0152\u0152\u0154\u0154"+ + "\u0156\u0156\u0158\u0158\u015a\u015a\u015c\u015c\u015e\u015e\u0160\u0160"+ + "\u0162\u0162\u0164\u0164\u0166\u0166\u0168\u0168\u016a\u016a\u016c\u016c"+ + "\u016e\u016e\u0170\u0170\u0172\u0172\u0174\u0174\u0176\u0176\u0178\u0178"+ + "\u017a\u017b\u017d\u017d\u017f\u017f\u0183\u0184\u0186\u0186\u0188\u0189"+ + "\u018b\u018d\u0190\u0193\u0195\u0196\u0198\u019a\u019e\u019f\u01a1\u01a2"+ + "\u01a4\u01a4\u01a6\u01a6\u01a8\u01a9\u01ab\u01ab\u01ae\u01ae\u01b0\u01b1"+ + "\u01b3\u01b5\u01b7\u01b7\u01b9\u01ba\u01be\u01be\u01c6\u01c6\u01c9\u01c9"+ + "\u01cc\u01cc\u01cf\u01cf\u01d1\u01d1\u01d3\u01d3\u01d5\u01d5\u01d7\u01d7"+ + "\u01d9\u01d9\u01db\u01db\u01dd\u01dd\u01e0\u01e0\u01e2\u01e2\u01e4\u01e4"+ + "\u01e6\u01e6\u01e8\u01e8\u01ea\u01ea\u01ec\u01ec\u01ee\u01ee\u01f0\u01f0"+ + "\u01f3\u01f3\u01f6\u01f6\u01f8\u01fa\u01fc\u01fc\u01fe\u01fe\u0200\u0200"+ + "\u0202\u0202\u0204\u0204\u0206\u0206\u0208\u0208\u020a\u020a\u020c\u020c"+ + "\u020e\u020e\u0210\u0210\u0212\u0212\u0214\u0214\u0216\u0216\u0218\u0218"+ + "\u021a\u021a\u021c\u021c\u021e\u021e\u0220\u0220\u0222\u0222\u0224\u0224"+ + "\u0226\u0226\u0228\u0228\u022a\u022a\u022c\u022c\u022e\u022e\u0230\u0230"+ + "\u0232\u0232\u0234\u0234\u023c\u023d\u023f\u0240\u0243\u0243\u0245\u0248"+ + "\u024a\u024a\u024c\u024c\u024e\u024e\u0250\u0250\u0372\u0372\u0374\u0374"+ + "\u0378\u0378\u0388\u0388\u038a\u038c\u038e\u038e\u0390\u0391\u0393\u03a3"+ + "\u03a5\u03ad\u03d1\u03d1\u03d4\u03d6\u03da\u03da\u03dc\u03dc\u03de\u03de"+ + "\u03e0\u03e0\u03e2\u03e2\u03e4\u03e4\u03e6\u03e6\u03e8\u03e8\u03ea\u03ea"+ + "\u03ec\u03ec\u03ee\u03ee\u03f0\u03f0\u03f6\u03f6\u03f9\u03f9\u03fb\u03fc"+ + "\u03ff\u0431\u0462\u0462\u0464\u0464\u0466\u0466\u0468\u0468\u046a\u046a"+ + "\u046c\u046c\u046e\u046e\u0470\u0470\u0472\u0472\u0474\u0474\u0476\u0476"+ + "\u0478\u0478\u047a\u047a\u047c\u047c\u047e\u047e\u0480\u0480\u0482\u0482"+ + "\u048c\u048c\u048e\u048e\u0490\u0490\u0492\u0492\u0494\u0494\u0496\u0496"+ + "\u0498\u0498\u049a\u049a\u049c\u049c\u049e\u049e\u04a0\u04a0\u04a2\u04a2"+ + "\u04a4\u04a4\u04a6\u04a6\u04a8\u04a8\u04aa\u04aa\u04ac\u04ac\u04ae\u04ae"+ + "\u04b0\u04b0\u04b2\u04b2\u04b4\u04b4\u04b6\u04b6\u04b8\u04b8\u04ba\u04ba"+ + "\u04bc\u04bc\u04be\u04be\u04c0\u04c0\u04c2\u04c3\u04c5\u04c5\u04c7\u04c7"+ + "\u04c9\u04c9\u04cb\u04cb\u04cd\u04cd\u04cf\u04cf\u04d2\u04d2\u04d4\u04d4"+ + "\u04d6\u04d6\u04d8\u04d8\u04da\u04da\u04dc\u04dc\u04de\u04de\u04e0\u04e0"+ + "\u04e2\u04e2\u04e4\u04e4\u04e6\u04e6\u04e8\u04e8\u04ea\u04ea\u04ec\u04ec"+ + "\u04ee\u04ee\u04f0\u04f0\u04f2\u04f2\u04f4\u04f4\u04f6\u04f6\u04f8\u04f8"+ + "\u04fa\u04fa\u04fc\u04fc\u04fe\u04fe\u0500\u0500\u0502\u0502\u0504\u0504"+ + "\u0506\u0506\u0508\u0508\u050a\u050a\u050c\u050c\u050e\u050e\u0510\u0510"+ + "\u0512\u0512\u0514\u0514\u0516\u0516\u0518\u0518\u051a\u051a\u051c\u051c"+ + "\u051e\u051e\u0520\u0520\u0522\u0522\u0524\u0524\u0526\u0526\u0528\u0528"+ + "\u0533\u0558\u10a2\u10c7\u10c9\u10c9\u10cf\u10cf\u1e02\u1e02\u1e04\u1e04"+ + "\u1e06\u1e06\u1e08\u1e08\u1e0a\u1e0a\u1e0c\u1e0c\u1e0e\u1e0e\u1e10\u1e10"+ + "\u1e12\u1e12\u1e14\u1e14\u1e16\u1e16\u1e18\u1e18\u1e1a\u1e1a\u1e1c\u1e1c"+ + "\u1e1e\u1e1e\u1e20\u1e20\u1e22\u1e22\u1e24\u1e24\u1e26\u1e26\u1e28\u1e28"+ + "\u1e2a\u1e2a\u1e2c\u1e2c\u1e2e\u1e2e\u1e30\u1e30\u1e32\u1e32\u1e34\u1e34"+ + "\u1e36\u1e36\u1e38\u1e38\u1e3a\u1e3a\u1e3c\u1e3c\u1e3e\u1e3e\u1e40\u1e40"+ + "\u1e42\u1e42\u1e44\u1e44\u1e46\u1e46\u1e48\u1e48\u1e4a\u1e4a\u1e4c\u1e4c"+ + "\u1e4e\u1e4e\u1e50\u1e50\u1e52\u1e52\u1e54\u1e54\u1e56\u1e56\u1e58\u1e58"+ + "\u1e5a\u1e5a\u1e5c\u1e5c\u1e5e\u1e5e\u1e60\u1e60\u1e62\u1e62\u1e64\u1e64"+ + "\u1e66\u1e66\u1e68\u1e68\u1e6a\u1e6a\u1e6c\u1e6c\u1e6e\u1e6e\u1e70\u1e70"+ + "\u1e72\u1e72\u1e74\u1e74\u1e76\u1e76\u1e78\u1e78\u1e7a\u1e7a\u1e7c\u1e7c"+ + "\u1e7e\u1e7e\u1e80\u1e80\u1e82\u1e82\u1e84\u1e84\u1e86\u1e86\u1e88\u1e88"+ + "\u1e8a\u1e8a\u1e8c\u1e8c\u1e8e\u1e8e\u1e90\u1e90\u1e92\u1e92\u1e94\u1e94"+ + "\u1e96\u1e96\u1ea0\u1ea0\u1ea2\u1ea2\u1ea4\u1ea4\u1ea6\u1ea6\u1ea8\u1ea8"+ + "\u1eaa\u1eaa\u1eac\u1eac\u1eae\u1eae\u1eb0\u1eb0\u1eb2\u1eb2\u1eb4\u1eb4"+ + "\u1eb6\u1eb6\u1eb8\u1eb8\u1eba\u1eba\u1ebc\u1ebc\u1ebe\u1ebe\u1ec0\u1ec0"+ + "\u1ec2\u1ec2\u1ec4\u1ec4\u1ec6\u1ec6\u1ec8\u1ec8\u1eca\u1eca\u1ecc\u1ecc"+ + "\u1ece\u1ece\u1ed0\u1ed0\u1ed2\u1ed2\u1ed4\u1ed4\u1ed6\u1ed6\u1ed8\u1ed8"+ + "\u1eda\u1eda\u1edc\u1edc\u1ede\u1ede\u1ee0\u1ee0\u1ee2\u1ee2\u1ee4\u1ee4"+ + "\u1ee6\u1ee6\u1ee8\u1ee8\u1eea\u1eea\u1eec\u1eec\u1eee\u1eee\u1ef0\u1ef0"+ + "\u1ef2\u1ef2\u1ef4\u1ef4\u1ef6\u1ef6\u1ef8\u1ef8\u1efa\u1efa\u1efc\u1efc"+ + "\u1efe\u1efe\u1f00\u1f00\u1f0a\u1f11\u1f1a\u1f1f\u1f2a\u1f31\u1f3a\u1f41"+ + "\u1f4a\u1f4f\u1f5b\u1f5b\u1f5d\u1f5d\u1f5f\u1f5f\u1f61\u1f61\u1f6a\u1f71"+ + "\u1fba\u1fbd\u1fca\u1fcd\u1fda\u1fdd\u1fea\u1fee\u1ffa\u1ffd\u2104\u2104"+ + "\u2109\u2109\u210d\u210f\u2112\u2114\u2117\u2117\u211b\u211f\u2126\u2126"+ + "\u2128\u2128\u212a\u212a\u212c\u212f\u2132\u2135\u2140\u2141\u2147\u2147"+ + "\u2185\u2185\u2c02\u2c30\u2c62\u2c62\u2c64\u2c66\u2c69\u2c69\u2c6b\u2c6b"+ + "\u2c6d\u2c6d\u2c6f\u2c72\u2c74\u2c74\u2c77\u2c77\u2c80\u2c82\u2c84\u2c84"+ + "\u2c86\u2c86\u2c88\u2c88\u2c8a\u2c8a\u2c8c\u2c8c\u2c8e\u2c8e\u2c90\u2c90"+ + "\u2c92\u2c92\u2c94\u2c94\u2c96\u2c96\u2c98\u2c98\u2c9a\u2c9a\u2c9c\u2c9c"+ + "\u2c9e\u2c9e\u2ca0\u2ca0\u2ca2\u2ca2\u2ca4\u2ca4\u2ca6\u2ca6\u2ca8\u2ca8"+ + "\u2caa\u2caa\u2cac\u2cac\u2cae\u2cae\u2cb0\u2cb0\u2cb2\u2cb2\u2cb4\u2cb4"+ + "\u2cb6\u2cb6\u2cb8\u2cb8\u2cba\u2cba\u2cbc\u2cbc\u2cbe\u2cbe\u2cc0\u2cc0"+ + "\u2cc2\u2cc2\u2cc4\u2cc4\u2cc6\u2cc6\u2cc8\u2cc8\u2cca\u2cca\u2ccc\u2ccc"+ + "\u2cce\u2cce\u2cd0\u2cd0\u2cd2\u2cd2\u2cd4\u2cd4\u2cd6\u2cd6\u2cd8\u2cd8"+ + "\u2cda\u2cda\u2cdc\u2cdc\u2cde\u2cde\u2ce0\u2ce0\u2ce2\u2ce2\u2ce4\u2ce4"+ + "\u2ced\u2ced\u2cef\u2cef\u2cf4\u2cf4\ua642\ua642\ua644\ua644\ua646\ua646"+ + "\ua648\ua648\ua64a\ua64a\ua64c\ua64c\ua64e\ua64e\ua650\ua650\ua652\ua652"+ + "\ua654\ua654\ua656\ua656\ua658\ua658\ua65a\ua65a\ua65c\ua65c\ua65e\ua65e"+ + "\ua660\ua660\ua662\ua662\ua664\ua664\ua666\ua666\ua668\ua668\ua66a\ua66a"+ + "\ua66c\ua66c\ua66e\ua66e\ua682\ua682\ua684\ua684\ua686\ua686\ua688\ua688"+ + "\ua68a\ua68a\ua68c\ua68c\ua68e\ua68e\ua690\ua690\ua692\ua692\ua694\ua694"+ + "\ua696\ua696\ua698\ua698\ua724\ua724\ua726\ua726\ua728\ua728\ua72a\ua72a"+ + "\ua72c\ua72c\ua72e\ua72e\ua730\ua730\ua734\ua734\ua736\ua736\ua738\ua738"+ + "\ua73a\ua73a\ua73c\ua73c\ua73e\ua73e\ua740\ua740\ua742\ua742\ua744\ua744"+ + "\ua746\ua746\ua748\ua748\ua74a\ua74a\ua74c\ua74c\ua74e\ua74e\ua750\ua750"+ + "\ua752\ua752\ua754\ua754\ua756\ua756\ua758\ua758\ua75a\ua75a\ua75c\ua75c"+ + "\ua75e\ua75e\ua760\ua760\ua762\ua762\ua764\ua764\ua766\ua766\ua768\ua768"+ + "\ua76a\ua76a\ua76c\ua76c\ua76e\ua76e\ua770\ua770\ua77b\ua77b\ua77d\ua77d"+ + "\ua77f\ua780\ua782\ua782\ua784\ua784\ua786\ua786\ua788\ua788\ua78d\ua78d"+ + "\ua78f\ua78f\ua792\ua792\ua794\ua794\ua7a2\ua7a2\ua7a4\ua7a4\ua7a6\ua7a6"+ + "\ua7a8\ua7a8\ua7aa\ua7aa\ua7ac\ua7ac\uff23\uff3c%\2\62;\u0662\u066b\u06f2"+ + "\u06fb\u07c2\u07cb\u0968\u0971\u09e8\u09f1\u0a68\u0a71\u0ae8\u0af1\u0b68"+ + "\u0b71\u0be8\u0bf1\u0c68\u0c71\u0ce8\u0cf1\u0d68\u0d71\u0e52\u0e5b\u0ed2"+ + "\u0edb\u0f22\u0f2b\u1042\u104b\u1092\u109b\u17e2\u17eb\u1812\u181b\u1948"+ + "\u1951\u19d2\u19db\u1a82\u1a8b\u1a92\u1a9b\u1b52\u1b5b\u1bb2\u1bbb\u1c42"+ + "\u1c4b\u1c52\u1c5b\ua622\ua62b\ua8d2\ua8db\ua902\ua90b\ua9d2\ua9db\uaa52"+ + "\uaa5b\uabf2\uabfb\uff12\uff1b\t\2\u16f0\u16f2\u2162\u2184\u2187\u218a"+ + "\u3009\u3009\u3023\u302b\u303a\u303c\ua6e8\ua6f1\2\36\2\3\3\2\2\2\2\5"+ + "\3\2\2\2\2\7\3\2\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2"+ + "\3\21\3\2\2\2\5\23\3\2\2\2\7\25\3\2\2\2\t\27\3\2\2\2\13\31\3\2\2\2\r\33"+ + "\3\2\2\2\17\35\3\2\2\2\21\22\t\2\2\2\22\4\3\2\2\2\23\24\t\3\2\2\24\6\3"+ + "\2\2\2\25\26\t\4\2\2\26\b\3\2\2\2\27\30\t\5\2\2\30\n\3\2\2\2\31\32\t\6"+ + "\2\2\32\f\3\2\2\2\33\34\t\7\2\2\34\16\3\2\2\2\35\36\t\b\2\2\36\20\3\2"+ + "\2\2\3\2\2"; + public static final ATN _ATN = + new ATNDeserializer().deserialize(_serializedATN.toCharArray()); + static { + _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()]; + for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) { + _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i); + } + } +} \ No newline at end of file diff --git a/lexers/src/main/java/com/itsaky/androidide/lexers/kotlin/UnicodeClasses.tokens b/lexers/src/main/java/com/itsaky/androidide/lexers/kotlin/UnicodeClasses.tokens new file mode 100644 index 000000000..bd91da7e6 --- /dev/null +++ b/lexers/src/main/java/com/itsaky/androidide/lexers/kotlin/UnicodeClasses.tokens @@ -0,0 +1,7 @@ +UNICODE_CLASS_LL=1 +UNICODE_CLASS_LM=2 +UNICODE_CLASS_LO=3 +UNICODE_CLASS_LT=4 +UNICODE_CLASS_LU=5 +UNICODE_CLASS_ND=6 +UNICODE_CLASS_NL=7 From 3c67341b8d514b584ae6aa54f329df3d09005184 Mon Sep 17 00:00:00 2001 From: MrIkso Date: Sun, 29 May 2022 16:17:49 +0300 Subject: [PATCH 3/4] Added Cpp/C highlighting --- .../androidide/language/cpp/CppAnalyzer.java | 248 + .../androidide/language/cpp/CppLanguage.java | 167 + .../views/editor/CodeEditorView.java | 701 +- .../androidide/lexers/cpp/CPP14Lexer.g4 | 409 + .../androidide/lexers/cpp/CPP14Lexer.interp | 478 + .../androidide/lexers/cpp/CPP14Lexer.java | 757 + .../androidide/lexers/cpp/CPP14Lexer.tokens | 264 + .../androidide/lexers/cpp/CPP14Parser.g4 | 823 + .../androidide/lexers/cpp/CPP14Parser.interp | 490 + .../androidide/lexers/cpp/CPP14Parser.java | 14438 ++++++++++++++++ .../androidide/lexers/cpp/CPP14Parser.tokens | 264 + 11 files changed, 18705 insertions(+), 334 deletions(-) create mode 100644 app/src/main/java/com/itsaky/androidide/language/cpp/CppAnalyzer.java create mode 100644 app/src/main/java/com/itsaky/androidide/language/cpp/CppLanguage.java create mode 100644 lexers/src/main/java/com/itsaky/androidide/lexers/cpp/CPP14Lexer.g4 create mode 100644 lexers/src/main/java/com/itsaky/androidide/lexers/cpp/CPP14Lexer.interp create mode 100644 lexers/src/main/java/com/itsaky/androidide/lexers/cpp/CPP14Lexer.java create mode 100644 lexers/src/main/java/com/itsaky/androidide/lexers/cpp/CPP14Lexer.tokens create mode 100644 lexers/src/main/java/com/itsaky/androidide/lexers/cpp/CPP14Parser.g4 create mode 100644 lexers/src/main/java/com/itsaky/androidide/lexers/cpp/CPP14Parser.interp create mode 100644 lexers/src/main/java/com/itsaky/androidide/lexers/cpp/CPP14Parser.java create mode 100644 lexers/src/main/java/com/itsaky/androidide/lexers/cpp/CPP14Parser.tokens diff --git a/app/src/main/java/com/itsaky/androidide/language/cpp/CppAnalyzer.java b/app/src/main/java/com/itsaky/androidide/language/cpp/CppAnalyzer.java new file mode 100644 index 000000000..358c0438e --- /dev/null +++ b/app/src/main/java/com/itsaky/androidide/language/cpp/CppAnalyzer.java @@ -0,0 +1,248 @@ +package com.itsaky.androidide.language.cpp; + +import static com.itsaky.androidide.lexers.cpp.CPP14Lexer.*; +import static com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.LITERAL; +import static com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.OPERATOR; +import static com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.TEXT_NORMAL; +import static com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.TYPE_NAME; +import static com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.forComment; +import static com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.forKeyword; +import static com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.forString; +import static com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.get; + +import com.itsaky.androidide.lexers.cpp.CPP14Lexer; +import com.itsaky.androidide.lexers.cpp.CPP14Parser; +import com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE; +import com.itsaky.androidide.utils.CharSequenceReader; +import com.itsaky.androidide.utils.ILogger; + +import io.github.rosemoe.sora.lang.analysis.SimpleAnalyzeManager; +import io.github.rosemoe.sora.lang.styling.CodeBlock; +import io.github.rosemoe.sora.lang.styling.MappedSpans; +import io.github.rosemoe.sora.lang.styling.Styles; + +import org.antlr.v4.runtime.CharStreams; +import org.antlr.v4.runtime.CodePointCharStream; +import org.antlr.v4.runtime.CommonTokenStream; +import org.antlr.v4.runtime.Token; + +import java.io.IOException; +import java.util.Stack; + +public class CppAnalyzer extends SimpleAnalyzeManager { + + private static final ILogger LOG = ILogger.newInstance("CppAnalyzer"); + + @Override + protected Styles analyze(StringBuilder text, Delegate delegate) { + final var styles = new Styles(); + final var colors = new MappedSpans.Builder(); + final CodePointCharStream stream; + try { + stream = CharStreams.fromReader(new CharSequenceReader(text)); + } catch (IOException e) { + LOG.error("Unable to read text to analyze", e); + return styles; + } + + final var lexer = new CPP14Lexer(stream); + // final var parser = new CPP14Parser(new CommonTokenStream(lexer)); + final var stack = new Stack(); + Token token; + int line, column, lastLine = 1, currSwitch = 0, maxSwitch = 0, type, previous = 0; + boolean isFirst = true; + + while (!delegate.isCancelled()) { + token = lexer.nextToken(); + if (token == null) { + break; + } + + line = token.getLine() - 1; + column = token.getCharPositionInLine(); + type = token.getType(); + + if (type == CPP14Lexer.EOF) { + lastLine = line; + break; + } + + switch (type) { + case Whitespace: + if (isFirst) { + colors.addNormalIfNull(); + } + break; + case Alignas: + case Alignof: + case Asm: + case Auto: + case Break: + case Class: + case Const: + case Catch: + case Case: + case Constexpr: + case Const_cast: + case Continue: + case Decltype: + case Default: + case Delete: + case Do: + case Dynamic_cast: + case Else: + case Enum: + case Explicit: + case Export: + case Extern: + case Final: + case For: + case Friend: + case Goto: + case If: + case Inline: + case Mutable: + case Namespace: + case New: + case Noexcept: + case Operator: + case Override: + case Private: + case Protected: + case Public: + case Register: + case Reinterpret_cast: + case Return: + case Sizeof: + case Signed: + case Static: + case Static_cast: + case Static_assert: + case Struct: + case Switch: + case Template: + case This: + case Throw: + case Thread_local: + case Try: + case Typedef: + case Typeid_: + case Typename_: + case Unsigned: + case Union: + case Using: + case Virtual: + case Volatile: + case While: + case Void: + colors.addIfNeeded(line, column, forKeyword()); + break; + case Bool: + case Char: + case Char16: + case Char32: + case Double: + case Float: + case Int: + case Long: + case Short: + case Wchar: + colors.addIfNeeded(line, column, get(TYPE_NAME)); + break; + case LeftParen: + case LeftBracket: + case LeftBrace: + case Dot: + case RightParen: + case RightBracket: + case RightBrace: + case Semi: + case Comma: + colors.addIfNeeded(line, column, get(OPERATOR)); + break; + case Plus: + case Minus: + case Star: + case Div: + case Mod: + case Caret: + case And: + case Or: + case Tilde: + case Not: + case Assign: + case Less: + case Greater: + case PlusAssign: + case MinusAssign: + case StarAssign: + case DivAssign: + case ModAssign: + case XorAssign: + case AndAssign: + case OrAssign: + case RightShiftAssign: + case LeftShiftAssign: + case Equal: + case NotEqual: + case LessEqual: + case GreaterEqual: + case AndAnd: + case OrOr: + case PlusPlus: + case MinusMinus: + case Arrow: + case ArrowStar: + case Question: + case Colon: + case Doublecolon: + case DotStar: + case Ellipsis: + colors.addIfNeeded(line, column, get(OPERATOR)); + break; + case IntegerLiteral: + case DecimalLiteral: + case OctalLiteral: + case HexadecimalLiteral: + case BinaryLiteral: + case Integersuffix: + case CharacterLiteral: + case FloatingLiteral: + case StringLiteral: + case BooleanLiteral: + case Nullptr: + case True_: + case False_: + colors.addIfNeeded(line, column, get(LITERAL)); + break; + case BlockComment: + case LineComment: + colors.addIfNeeded(line, column, get(SchemeAndroidIDE.COMMENT)); + break; + case MultiLineMacro: + case Directive: + colors.addIfNeeded(line, column, forString()); + break; + + default: + colors.addIfNeeded(line, column, get(TEXT_NORMAL)); + break; + } + + isFirst = false; + if (type != Whitespace) { + previous = type; + } + } + + if (stack.isEmpty() && currSwitch > maxSwitch) { + maxSwitch = currSwitch; + } + + colors.determine(lastLine); + styles.setSuppressSwitch(maxSwitch + 10); + styles.spans = colors.build(); + + return styles; + } +} diff --git a/app/src/main/java/com/itsaky/androidide/language/cpp/CppLanguage.java b/app/src/main/java/com/itsaky/androidide/language/cpp/CppLanguage.java new file mode 100644 index 000000000..ebde8b69f --- /dev/null +++ b/app/src/main/java/com/itsaky/androidide/language/cpp/CppLanguage.java @@ -0,0 +1,167 @@ +/************************************************************************************ + * This file is part of AndroidIDE. + * + * AndroidIDE is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * AndroidIDE is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with AndroidIDE. If not, see . + * + **************************************************************************************/ +package com.itsaky.androidide.language.cpp; + +import android.os.Bundle; + +import androidx.annotation.NonNull; + +import com.itsaky.androidide.language.IDELanguage; + +import com.itsaky.androidide.language.java.JavaLanguage; +import com.itsaky.androidide.utils.CharSequenceReader; +import com.itsaky.androidide.utils.ILogger; + +import org.antlr.v4.runtime.CharStreams; +import org.antlr.v4.runtime.Token; + +import java.io.StringReader; +import com.itsaky.androidide.lexers.cpp.CPP14Lexer; + +import io.github.rosemoe.sora.lang.analysis.AnalyzeManager; +import io.github.rosemoe.sora.lang.completion.CompletionCancelledException; +import io.github.rosemoe.sora.lang.completion.CompletionPublisher; +import io.github.rosemoe.sora.lang.smartEnter.NewlineHandleResult; +import io.github.rosemoe.sora.lang.smartEnter.NewlineHandler; +import io.github.rosemoe.sora.text.CharPosition; +import io.github.rosemoe.sora.text.ContentReference; +import io.github.rosemoe.sora.text.TextUtils; +import io.github.rosemoe.sora.widget.SymbolPairMatch; + +public class CppLanguage extends IDELanguage { + + private static final ILogger LOG = ILogger.newInstance("CppLanguage"); + private CppAnalyzer analyzer; + private final NewlineHandler[] newlineHandlers = new NewlineHandler[] {new BraceHandler()}; + + public CppLanguage() { + analyzer = new CppAnalyzer(); + } + + @Override + public int getIndentAdvance(@NonNull String line) { + try { + CPP14Lexer lexer = new CPP14Lexer(CharStreams.fromReader(new StringReader(line))); + Token token; + int advance = 0; + while (((token = lexer.nextToken()) != null && token.getType() != token.EOF)) { + switch (token.getType()) { + case CPP14Lexer.LeftBrace: + advance++; + break; + case CPP14Lexer.RightBrace: + advance--; + break; + } + } + advance = Math.max(0, advance); + return advance * getTabSize(); + } catch (Throwable e) { + LOG.error("Error calculating indent advance", e); + } + return 0; + } + + @Override + public SymbolPairMatch getSymbolPairs() { + return new CppSymbolPairs(); + } + + @NonNull + @Override + public AnalyzeManager getAnalyzeManager() { + return analyzer; + } + + @Override + public int getInterruptionLevel() { + return INTERRUPTION_LEVEL_STRONG; + } + + @Override + public void requireAutoComplete( + @NonNull ContentReference content, + @NonNull CharPosition position, + @NonNull CompletionPublisher publisher, + @NonNull Bundle extraArguments) + throws CompletionCancelledException { + + // completer.complete(content, position, publisher, extraArguments); + } + + @Override + public int getIndentAdvance(@NonNull ContentReference content, int line, int column) { + return getIndentAdvance(content.getLine(line).substring(0, column)); + } + + @Override + public CharSequence format(CharSequence content) { + return content; + } + + @Override + public NewlineHandler[] getNewlineHandlers() { + return newlineHandlers; + } + + @Override + public void destroy() { + analyzer = null; + } + + private static class CppSymbolPairs extends SymbolPairMatch { + public CppSymbolPairs() { + super.putPair('{', new Replacement("{}", 1)); + super.putPair('(', new Replacement("()", 1)); + super.putPair('[', new Replacement("[]", 1)); + super.putPair('"', new Replacement("\"\"", 1)); + super.putPair('\'', new Replacement("''", 1)); + super.putPair('<', new Replacement("<>", 1)); + } + } + + class BraceHandler implements NewlineHandler { + + @Override + public boolean matchesRequirement(String beforeText, String afterText) { + beforeText = beforeText.trim(); + afterText = afterText.trim(); + return beforeText.endsWith("{") && afterText.startsWith("}"); + } + + @Override + public NewlineHandleResult handleNewline(String beforeText, String afterText, int tabSize) { + int count = TextUtils.countLeadingSpaceCount(beforeText, tabSize); + int advanceBefore = getIndentAdvance(beforeText); + int advanceAfter = getIndentAdvance(afterText); + String text; + StringBuilder sb = + new StringBuilder("\n") + .append( + TextUtils.createIndent( + count + advanceBefore, tabSize, useTab())) + .append('\n') + .append( + text = + TextUtils.createIndent( + count + advanceAfter, tabSize, useTab())); + int shiftLeft = text.length() + 1; + return new NewlineHandleResult(sb, shiftLeft); + } + } +} diff --git a/app/src/main/java/com/itsaky/androidide/views/editor/CodeEditorView.java b/app/src/main/java/com/itsaky/androidide/views/editor/CodeEditorView.java index b5be7c305..3336ead66 100644 --- a/app/src/main/java/com/itsaky/androidide/views/editor/CodeEditorView.java +++ b/app/src/main/java/com/itsaky/androidide/views/editor/CodeEditorView.java @@ -44,10 +44,12 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.blankj.utilcode.util.FileIOUtils; +import com.blankj.utilcode.util.FileUtils; import com.blankj.utilcode.util.SizeUtils; import com.itsaky.androidide.adapters.CompletionListAdapter; import com.itsaky.androidide.app.StudioApp; import com.itsaky.androidide.databinding.LayoutCodeEditorBinding; +import com.itsaky.androidide.language.cpp.CppLanguage; import com.itsaky.androidide.language.groovy.GroovyLanguage; import com.itsaky.androidide.language.java.JavaLanguage; import com.itsaky.androidide.language.xml.XMLLanguage; @@ -61,8 +63,10 @@ import com.itsaky.androidide.utils.ILogger; import com.itsaky.androidide.utils.LSPUtils; import com.itsaky.androidide.utils.TypefaceUtils; import com.itsaky.inflater.values.ValuesTableFactory; +import com.itsaky.lsp.api.ILanguageServer; import com.itsaky.lsp.models.Range; +import io.github.rosemoe.sora.lang.Language; import org.antlr.v4.runtime.CharStreams; import org.antlr.v4.runtime.Token; @@ -87,357 +91,386 @@ import io.github.rosemoe.sora.widget.component.Magnifier; @SuppressLint("ViewConstructor") // This view is always dynamically created. public class CodeEditorView extends FrameLayout { - private static final ILogger LOG = ILogger.newInstance("CodeEditorView"); - private final File file; - private final LayoutCodeEditorBinding binding; - private boolean isModified; - private boolean isFirstCreate; + private static final ILogger LOG = ILogger.newInstance("CodeEditorView"); + private final File file; + private final LayoutCodeEditorBinding binding; + private boolean isModified; + private boolean isFirstCreate; - public CodeEditorView( - @NonNull Context context, @NonNull File file, final @NonNull Range selection) { - super(context); - this.file = file; - this.isModified = false; - this.isFirstCreate = true; + public CodeEditorView( + @NonNull Context context, @NonNull File file, final @NonNull Range selection) { + super(context); + this.file = file; + this.isModified = false; + this.isFirstCreate = true; - this.binding = LayoutCodeEditorBinding.inflate(LayoutInflater.from(context)); - this.binding.editor.setTypefaceText(TypefaceUtils.jetbrainsMono()); - this.binding.editor.setHighlightCurrentBlock(true); - this.binding.editor.getProps().autoCompletionOnComposing = true; - this.binding.editor.setAutoCompletionItemAdapter(new CompletionListAdapter()); - this.binding.editor.setDividerWidth(SizeUtils.dp2px(1)); - this.binding.editor.setColorScheme(new SchemeAndroidIDE()); - this.binding.editor.subscribeEvent( - ContentChangeEvent.class, ((event, unsubscribe) -> handleContentChange(event))); + this.binding = LayoutCodeEditorBinding.inflate(LayoutInflater.from(context)); + this.binding.editor.setTypefaceText(TypefaceUtils.jetbrainsMono()); + this.binding.editor.setHighlightCurrentBlock(true); + this.binding.editor.getProps().autoCompletionOnComposing = true; + this.binding.editor.setAutoCompletionItemAdapter(new CompletionListAdapter()); + this.binding.editor.setDividerWidth(SizeUtils.dp2px(1)); + this.binding.editor.setColorScheme(new SchemeAndroidIDE()); + this.binding.editor.subscribeEvent( + ContentChangeEvent.class, ((event, unsubscribe) -> handleContentChange(event))); - this.binding.diagnosticTextContainer.setVisibility(GONE); + this.binding.diagnosticTextContainer.setVisibility(GONE); - removeAllViews(); - addView(this.binding.getRoot()); + removeAllViews(); + addView(this.binding.getRoot()); - selection.validate(); - CompletableFuture.runAsync( - () -> { - final var contents = FileIOUtils.readFile2String(file); - binding.editor.post( - () -> { - binding.editor.setText(contents, createEditorArgs()); - postRead(); - if (LSPUtils.isEqual(selection.getStart(), selection.getEnd())) { - getEditor() - .setSelection( - selection.getStart().getLine(), selection.getStart().getColumn()); - } else { - getEditor().setSelection(selection); + selection.validate(); + CompletableFuture.runAsync( + () -> { + final var contents = FileIOUtils.readFile2String(file); + binding.editor.post( + () -> { + binding.editor.setText(contents, createEditorArgs()); + postRead(); + if (LSPUtils.isEqual(selection.getStart(), selection.getEnd())) { + getEditor() + .setSelection( + selection.getStart().getLine(), + selection.getStart().getColumn()); + } else { + getEditor().setSelection(selection); + } + }); + }); + + configureEditorIfNeeded(); + } + + @NonNull + private Bundle createEditorArgs() { + var bundle = new Bundle(); + if (getFile() == null) { + return bundle; + } + + bundle.putString(IDEEditor.KEY_FILE, getFile().getAbsolutePath()); + return bundle; + } + + private void handleContentChange(@NonNull ContentChangeEvent event) { + isModified = true; + + if (event.getAction() == ContentChangeEvent.ACTION_INSERT) { + final var editor = event.getEditor(); + final var content = event.getChangedText(); + final var endLine = event.getChangeEnd().line; + final var endColumn = event.getChangeEnd().column; + if (file.getName().endsWith(".xml")) { + boolean isOpen = false; + try { + isOpen = editor.getText().charAt(editor.getCursor().getLeft() - 2) == '<'; + } catch (Throwable th) { + LOG.error(th); } - }); - }); - configureEditorIfNeeded(); - } - - @NonNull - private Bundle createEditorArgs() { - var bundle = new Bundle(); - if (getFile() == null) { - return bundle; + if (isOpen && "/".contentEquals(content)) { + closeCurrentTag(editor.getText().toString(), endLine, endColumn); + } + } + } } - bundle.putString(IDEEditor.KEY_FILE, getFile().getAbsolutePath()); - return bundle; - } + public boolean save() { + final var file = getFile(); + if (file == null) { + LOG.error("Cannot save file. File instance is null."); + return false; + } - private void handleContentChange(@NonNull ContentChangeEvent event) { - isModified = true; + if (!isModified() && file.exists()) { + LOG.info(file.getName()); + LOG.info("File was not modified. Skipping save operation."); + return false; + } + + final var text = getEditor().getText().toString(); - if (event.getAction() == ContentChangeEvent.ACTION_INSERT) { - final var editor = event.getEditor(); - final var content = event.getChangedText(); - final var endLine = event.getChangeEnd().line; - final var endColumn = event.getChangeEnd().column; - if (file.getName().endsWith(".xml")) { - boolean isOpen = false; try { - isOpen = editor.getText().charAt(editor.getCursor().getLeft() - 2) == '<'; + FileUtil.writeFile(file, text); + notifySaved(); + isModified = false; + return true; + } catch (IOException io) { + LOG.error("Failed to save file", file, io); + return false; + } + } + + @NonNull + private List getLines(Content text) { + final var count = text.getLineCount(); + final var result = new ArrayList(); + + for (int i = 0; i < count; i++) { + result.add(text.getLine(i)); + } + + return result; + } + + public IDEEditor getEditor() { + return binding.editor; + } + + public LayoutCodeEditorBinding getBinding() { + return binding; + } + + @Nullable + public File getFile() { + return file; + } + + public String getText() { + return binding.editor.getText().toString(); + } + + public boolean isModified() { + return isModified; + } + + public void onPause() { + // unimplemented + } + + public void onResume() { + configureEditorIfNeeded(); + } + + public void onEditorSelected() { + final var editor = getEditor(); + if (editor != null) { + editor.onEditorSelected(); + } + } + + public void undo() { + if (binding.editor.canUndo()) { + binding.editor.undo(); + } + } + + public void redo() { + if (binding.editor.canRedo()) { + binding.editor.redo(); + } + } + + public void findDefinition() { + binding.editor.findDefinition(); + } + + public void findReferences() { + binding.editor.findReferences(); + } + + public void commentLine() { + binding.editor.commentLine(); + } + + public void uncommentLine() { + binding.editor.uncommentLine(); + } + + public void beginSearch() { + binding.editor.beginSearchMode(); + } + + protected void postRead() { + binding.editor.setEditorLanguage(createLanguage(file)); + binding.editor.setLanguageServer(createLanguageServer(file)); + // File must be set only after setting the language server + // This will make sure that textDocument/didOpen is sent + binding.editor.setFile(getFile()); + + if (getContext() instanceof Activity) { + ((Activity) getContext()).invalidateOptionsMenu(); + } + } + + private ILanguageServer createLanguageServer(File file) { + if (file.isFile()) { + String ext = FileUtils.getFileExtension(file); + switch (ext) { + case "java": + return StudioApp.getInstance().getJavaLanguageServer(); + case "xml": + return StudioApp.getInstance().getXMLLanguageServer(); + default: + return null; + } + } + return null; + } + + private Language createLanguage(File file) { + if (file.isFile()) { + String ext = FileUtils.getFileExtension(file); + switch (ext) { + case "java": + return new JavaLanguage(); + case "xml": + return new XMLLanguage(); + case "gradle": + return new GroovyLanguage(); + case "kt": + return new KotlinLanguage(); + case "c": + case "h": + case "cc": + case "cpp": + case "cxx": + return new CppLanguage(); + default: + return new EmptyLanguage(); + } + } + return new EmptyLanguage(); + } + + private void configureEditorIfNeeded() { + boolean sizeChanged = isFirstCreate || ConstantsBridge.EDITOR_PREF_SIZE_CHANGED; + boolean ligaturesChanged = isFirstCreate || ConstantsBridge.EDITOR_PREF_LIGATURES_CHANGED; + boolean flagsChanged = isFirstCreate || ConstantsBridge.EDITOR_PREF_FLAGS_CHANGED; + boolean drawHexChanged = isFirstCreate || ConstantsBridge.EDITOR_PREF_DRAW_HEX_CHANGED; + boolean inputFlagsChanged = + isFirstCreate || ConstantsBridge.EDITOR_PREF_VISIBLE_PASSWORD_CHANGED; + boolean wordWrapChanged = isFirstCreate || ConstantsBridge.EDITOR_PREF_WORD_WRAP_CHANGED; + boolean magnifierChanged = + isFirstCreate || ConstantsBridge.EDITOR_PREF_USE_MAGNIFIER_CHANGED; + + final PreferenceManager prefs = StudioApp.getInstance().getPrefManager(); + + if (sizeChanged) { + float textSize = prefs.getFloat(PreferenceManager.KEY_EDITOR_FONT_SIZE); + if (textSize < 6 || textSize > 32) { + textSize = 14; + } + + binding.editor.setTextSize(textSize); + ConstantsBridge.EDITOR_PREF_SIZE_CHANGED = false; + } + + if (ligaturesChanged) { + var enabled = prefs.getBoolean(PreferenceManager.KEY_EDITOR_FONT_LIGATURES, true); + binding.editor.setLigatureEnabled(enabled); + ConstantsBridge.EDITOR_PREF_LIGATURES_CHANGED = false; + } + + if (flagsChanged) { + int flags = 0; + if (prefs.getBoolean(PreferenceManager.KEY_EDITOR_FLAG_WS_LEADING, true)) { + flags |= IDEEditor.FLAG_DRAW_WHITESPACE_LEADING; + } + + if (prefs.getBoolean(PreferenceManager.KEY_EDITOR_FLAG_WS_TRAILING, false)) { + flags |= IDEEditor.FLAG_DRAW_WHITESPACE_TRAILING; + } + + if (prefs.getBoolean(PreferenceManager.KEY_EDITOR_FLAG_WS_INNER, true)) { + flags |= IDEEditor.FLAG_DRAW_WHITESPACE_INNER; + } + + if (prefs.getBoolean(PreferenceManager.KEY_EDITOR_FLAG_WS_EMPTY_LINE, true)) { + flags |= IDEEditor.FLAG_DRAW_WHITESPACE_FOR_EMPTY_LINE; + } + + if (prefs.getBoolean(PreferenceManager.KEY_EDITOR_FLAG_LINE_BREAK, true)) { + flags |= IDEEditor.FLAG_DRAW_LINE_SEPARATOR; + } + + binding.editor.setNonPrintablePaintingFlags(flags); + ConstantsBridge.EDITOR_PREF_FLAGS_CHANGED = false; + } + + if (inputFlagsChanged) { + binding.editor.setInputType(IDEEditor.createInputFlags()); + ConstantsBridge.EDITOR_PREF_VISIBLE_PASSWORD_CHANGED = false; + } + + if (drawHexChanged) { + // TODO Do something about this + // Maybe use spans... + // binding.editor.setLineColorsEnabled (prefs.getBoolean + // (PreferenceManager.KEY_EDITOR_DRAW_HEX, true)); + ConstantsBridge.EDITOR_PREF_DRAW_HEX_CHANGED = false; + } + + if (wordWrapChanged) { + var enabled = prefs.getBoolean(PreferenceManager.KEY_EDITOR_WORD_WRAP, false); + binding.editor.setWordwrap(enabled); + ConstantsBridge.EDITOR_PREF_WORD_WRAP_CHANGED = false; + } + + if (magnifierChanged) { + var enabled = prefs.getBoolean(PreferenceManager.KEY_EDITOR_USE_MAGNIFER, true); + binding.editor.getComponent(Magnifier.class).setEnabled(enabled); + ConstantsBridge.EDITOR_PREF_USE_MAGNIFIER_CHANGED = false; + } + + isFirstCreate = false; + } + + private void closeCurrentTag(String text, int line, int col) { + try { + XMLLexer lexer = new XMLLexer(CharStreams.fromReader(new StringReader(text))); + Token token; + boolean wasSlash = false, wasOpen = false; + ArrayList currentNames = new ArrayList<>(); + while (((token = lexer.nextToken()) != null && token.getType() != token.EOF)) { + final int type = token.getType(); + if (type == XMLLexer.OPEN) { + wasOpen = true; + } else if (type == XMLLexer.Name) { + if (wasOpen && wasSlash && currentNames.size() > 0) { + currentNames.remove(0); + } else if (wasOpen) { + currentNames.add(0, token.getText()); + wasOpen = false; + } + } else if (type == XMLLexer.OPEN_SLASH) { + int l = token.getLine() - 1; + int c = token.getCharPositionInLine(); + if (l == line && c == col) { + break; + } else if (currentNames.size() > 0) { + currentNames.remove(0); + } + } else if (type == XMLLexer.SLASH_CLOSE || type == XMLLexer.SPECIAL_CLOSE) { + if (currentNames.size() > 0 && token.getText().trim().endsWith("/>")) { + currentNames.remove(0); + } + } else if (type == XMLLexer.SLASH) { + wasSlash = true; + } else { + wasOpen = wasSlash = false; + } + } + + if (currentNames.size() > 0) { + binding.editor.getText().insert(line, col + 2, currentNames.get(0)); + } } catch (Throwable th) { - LOG.error(th); + LOG.error("Unable to close current tag", th); } + } - if (isOpen && "/".contentEquals(content)) { - closeCurrentTag(editor.getText().toString(), endLine, endColumn); + private void notifySaved() { + binding.editor.didSave(); + + if (Objects.requireNonNull(getFile()).getName().endsWith(".xml")) { + ValuesTableFactory.syncWithFile(getFile()); } - } - } - } - - public boolean save() { - final var file = getFile(); - if (file == null) { - LOG.error("Cannot save file. File instance is null."); - return false; } - if (!isModified() && file.exists()) { - LOG.info(file.getName()); - LOG.info("File was not modified. Skipping save operation."); - return false; + /** Mark this files as saved. Even if it not saved. */ + public void markAsSaved() { + isModified = false; + notifySaved(); } - - final var text = getEditor().getText().toString(); - - try { - FileUtil.writeFile(file, text); - notifySaved(); - isModified = false; - return true; - } catch (IOException io) { - LOG.error("Failed to save file", file, io); - return false; - } - } - - @NonNull - private List getLines(Content text) { - final var count = text.getLineCount(); - final var result = new ArrayList(); - - for (int i = 0; i < count; i++) { - result.add(text.getLine(i)); - } - - return result; - } - - public IDEEditor getEditor() { - return binding.editor; - } - - public LayoutCodeEditorBinding getBinding() { - return binding; - } - - @Nullable - public File getFile() { - return file; - } - - public String getText() { - return binding.editor.getText().toString(); - } - - public boolean isModified() { - return isModified; - } - - public void onPause() { - // unimplemented - } - - public void onResume() { - configureEditorIfNeeded(); - } - - public void onEditorSelected() { - final var editor = getEditor(); - if (editor != null) { - editor.onEditorSelected(); - } - } - - public void undo() { - if (binding.editor.canUndo()) { - binding.editor.undo(); - } - } - - public void redo() { - if (binding.editor.canRedo()) { - binding.editor.redo(); - } - } - - public void findDefinition() { - binding.editor.findDefinition(); - } - - public void findReferences() { - binding.editor.findReferences(); - } - - public void commentLine() { - binding.editor.commentLine(); - } - - public void uncommentLine() { - binding.editor.uncommentLine(); - } - - public void beginSearch() { - binding.editor.beginSearchMode(); - } - - protected void postRead() { - if (file.isFile() && file.getName().endsWith(".java")) { - binding.editor.setEditorLanguage(new JavaLanguage()); - binding.editor.setLanguageServer(StudioApp.getInstance().getJavaLanguageServer()); - } else if (file.isFile() && file.getName().endsWith(".xml")) { - binding.editor.setEditorLanguage(new XMLLanguage()); - binding.editor.setLanguageServer(StudioApp.getInstance().getXMLLanguageServer()); - } else if (file.isFile() && file.getName().endsWith(".gradle")) { - binding.editor.setEditorLanguage(new GroovyLanguage()); - } else if (file.isFile() && file.getName().endsWith(".kt")) { - binding.editor.setEditorLanguage(new KotlinLanguage()); - } - else { - binding.editor.setEditorLanguage(new EmptyLanguage()); - } - - // File must be set only after setting the language server - // This will make sure that textDocument/didOpen is sent - binding.editor.setFile(getFile()); - - if (getContext() instanceof Activity) { - ((Activity) getContext()).invalidateOptionsMenu(); - } - } - - private void configureEditorIfNeeded() { - boolean sizeChanged = isFirstCreate || ConstantsBridge.EDITOR_PREF_SIZE_CHANGED; - boolean ligaturesChanged = isFirstCreate || ConstantsBridge.EDITOR_PREF_LIGATURES_CHANGED; - boolean flagsChanged = isFirstCreate || ConstantsBridge.EDITOR_PREF_FLAGS_CHANGED; - boolean drawHexChanged = isFirstCreate || ConstantsBridge.EDITOR_PREF_DRAW_HEX_CHANGED; - boolean inputFlagsChanged = - isFirstCreate || ConstantsBridge.EDITOR_PREF_VISIBLE_PASSWORD_CHANGED; - boolean wordWrapChanged = isFirstCreate || ConstantsBridge.EDITOR_PREF_WORD_WRAP_CHANGED; - boolean magnifierChanged = isFirstCreate || ConstantsBridge.EDITOR_PREF_USE_MAGNIFIER_CHANGED; - - final PreferenceManager prefs = StudioApp.getInstance().getPrefManager(); - - if (sizeChanged) { - float textSize = prefs.getFloat(PreferenceManager.KEY_EDITOR_FONT_SIZE); - if (textSize < 6 || textSize > 32) { - textSize = 14; - } - - binding.editor.setTextSize(textSize); - ConstantsBridge.EDITOR_PREF_SIZE_CHANGED = false; - } - - if (ligaturesChanged) { - var enabled = prefs.getBoolean(PreferenceManager.KEY_EDITOR_FONT_LIGATURES, true); - binding.editor.setLigatureEnabled(enabled); - ConstantsBridge.EDITOR_PREF_LIGATURES_CHANGED = false; - } - - if (flagsChanged) { - int flags = 0; - if (prefs.getBoolean(PreferenceManager.KEY_EDITOR_FLAG_WS_LEADING, true)) { - flags |= IDEEditor.FLAG_DRAW_WHITESPACE_LEADING; - } - - if (prefs.getBoolean(PreferenceManager.KEY_EDITOR_FLAG_WS_TRAILING, false)) { - flags |= IDEEditor.FLAG_DRAW_WHITESPACE_TRAILING; - } - - if (prefs.getBoolean(PreferenceManager.KEY_EDITOR_FLAG_WS_INNER, true)) { - flags |= IDEEditor.FLAG_DRAW_WHITESPACE_INNER; - } - - if (prefs.getBoolean(PreferenceManager.KEY_EDITOR_FLAG_WS_EMPTY_LINE, true)) { - flags |= IDEEditor.FLAG_DRAW_WHITESPACE_FOR_EMPTY_LINE; - } - - if (prefs.getBoolean(PreferenceManager.KEY_EDITOR_FLAG_LINE_BREAK, true)) { - flags |= IDEEditor.FLAG_DRAW_LINE_SEPARATOR; - } - - binding.editor.setNonPrintablePaintingFlags(flags); - ConstantsBridge.EDITOR_PREF_FLAGS_CHANGED = false; - } - - if (inputFlagsChanged) { - binding.editor.setInputType(IDEEditor.createInputFlags()); - ConstantsBridge.EDITOR_PREF_VISIBLE_PASSWORD_CHANGED = false; - } - - if (drawHexChanged) { - // TODO Do something about this - // Maybe use spans... - // binding.editor.setLineColorsEnabled (prefs.getBoolean - // (PreferenceManager.KEY_EDITOR_DRAW_HEX, true)); - ConstantsBridge.EDITOR_PREF_DRAW_HEX_CHANGED = false; - } - - if (wordWrapChanged) { - var enabled = prefs.getBoolean(PreferenceManager.KEY_EDITOR_WORD_WRAP, false); - binding.editor.setWordwrap(enabled); - ConstantsBridge.EDITOR_PREF_WORD_WRAP_CHANGED = false; - } - - if (magnifierChanged) { - var enabled = prefs.getBoolean(PreferenceManager.KEY_EDITOR_USE_MAGNIFER, true); - binding.editor.getComponent(Magnifier.class).setEnabled(enabled); - ConstantsBridge.EDITOR_PREF_USE_MAGNIFIER_CHANGED = false; - } - - isFirstCreate = false; - } - - private void closeCurrentTag(String text, int line, int col) { - try { - XMLLexer lexer = new XMLLexer(CharStreams.fromReader(new StringReader(text))); - Token token; - boolean wasSlash = false, wasOpen = false; - ArrayList currentNames = new ArrayList<>(); - while (((token = lexer.nextToken()) != null && token.getType() != token.EOF)) { - final int type = token.getType(); - if (type == XMLLexer.OPEN) { - wasOpen = true; - } else if (type == XMLLexer.Name) { - if (wasOpen && wasSlash && currentNames.size() > 0) { - currentNames.remove(0); - } else if (wasOpen) { - currentNames.add(0, token.getText()); - wasOpen = false; - } - } else if (type == XMLLexer.OPEN_SLASH) { - int l = token.getLine() - 1; - int c = token.getCharPositionInLine(); - if (l == line && c == col) { - break; - } else if (currentNames.size() > 0) { - currentNames.remove(0); - } - } else if (type == XMLLexer.SLASH_CLOSE || type == XMLLexer.SPECIAL_CLOSE) { - if (currentNames.size() > 0 && token.getText().trim().endsWith("/>")) { - currentNames.remove(0); - } - } else if (type == XMLLexer.SLASH) { - wasSlash = true; - } else { - wasOpen = wasSlash = false; - } - } - - if (currentNames.size() > 0) { - binding.editor.getText().insert(line, col + 2, currentNames.get(0)); - } - } catch (Throwable th) { - LOG.error("Unable to close current tag", th); - } - } - - private void notifySaved() { - binding.editor.didSave(); - - if (Objects.requireNonNull(getFile()).getName().endsWith(".xml")) { - ValuesTableFactory.syncWithFile(getFile()); - } - } - - /** Mark this files as saved. Even if it not saved. */ - public void markAsSaved() { - isModified = false; - notifySaved(); - } } diff --git a/lexers/src/main/java/com/itsaky/androidide/lexers/cpp/CPP14Lexer.g4 b/lexers/src/main/java/com/itsaky/androidide/lexers/cpp/CPP14Lexer.g4 new file mode 100644 index 000000000..860e6d20c --- /dev/null +++ b/lexers/src/main/java/com/itsaky/androidide/lexers/cpp/CPP14Lexer.g4 @@ -0,0 +1,409 @@ +lexer grammar CPP14Lexer; + +IntegerLiteral: + DecimalLiteral Integersuffix? + | OctalLiteral Integersuffix? + | HexadecimalLiteral Integersuffix? + | BinaryLiteral Integersuffix?; + +CharacterLiteral: + ('u' | 'U' | 'L')? '\'' Cchar+ '\''; + +FloatingLiteral: + Fractionalconstant Exponentpart? Floatingsuffix? + | Digitsequence Exponentpart Floatingsuffix?; + +StringLiteral: + Encodingprefix? + (Rawstring + |'"' Schar* '"'); + +BooleanLiteral: False_ | True_; + +PointerLiteral: Nullptr; + +UserDefinedLiteral: + UserDefinedIntegerLiteral + | UserDefinedFloatingLiteral + | UserDefinedStringLiteral + | UserDefinedCharacterLiteral; + +MultiLineMacro: + '#' (~[\n]*? '\\' '\r'? '\n')+ ~ [\n]+ -> channel (HIDDEN); + +Directive: '#' ~ [\n]* -> channel (HIDDEN); +/*Keywords*/ + +Alignas: 'alignas'; + +Alignof: 'alignof'; + +Asm: 'asm'; + +Auto: 'auto'; + +Bool: 'bool'; + +Break: 'break'; + +Case: 'case'; + +Catch: 'catch'; + +Char: 'char'; + +Char16: 'char16_t'; + +Char32: 'char32_t'; + +Class: 'class'; + +Const: 'const'; + +Constexpr: 'constexpr'; + +Const_cast: 'const_cast'; + +Continue: 'continue'; + +Decltype: 'decltype'; + +Default: 'default'; + +Delete: 'delete'; + +Do: 'do'; + +Double: 'double'; + +Dynamic_cast: 'dynamic_cast'; + +Else: 'else'; + +Enum: 'enum'; + +Explicit: 'explicit'; + +Export: 'export'; + +Extern: 'extern'; + +//DO NOT RENAME - PYTHON NEEDS True and False +False_: 'false'; + +Final: 'final'; + +Float: 'float'; + +For: 'for'; + +Friend: 'friend'; + +Goto: 'goto'; + +If: 'if'; + +Inline: 'inline'; + +Int: 'int'; + +Long: 'long'; + +Mutable: 'mutable'; + +Namespace: 'namespace'; + +New: 'new'; + +Noexcept: 'noexcept'; + +Nullptr: 'nullptr'; + +Operator: 'operator'; + +Override: 'override'; + +Private: 'private'; + +Protected: 'protected'; + +Public: 'public'; + +Register: 'register'; + +Reinterpret_cast: 'reinterpret_cast'; + +Return: 'return'; + +Short: 'short'; + +Signed: 'signed'; + +Sizeof: 'sizeof'; + +Static: 'static'; + +Static_assert: 'static_assert'; + +Static_cast: 'static_cast'; + +Struct: 'struct'; + +Switch: 'switch'; + +Template: 'template'; + +This: 'this'; + +Thread_local: 'thread_local'; + +Throw: 'throw'; + +//DO NOT RENAME - PYTHON NEEDS True and False +True_: 'true'; + +Try: 'try'; + +Typedef: 'typedef'; + +Typeid_: 'typeid'; + +Typename_: 'typename'; + +Union: 'union'; + +Unsigned: 'unsigned'; + +Using: 'using'; + +Virtual: 'virtual'; + +Void: 'void'; + +Volatile: 'volatile'; + +Wchar: 'wchar_t'; + +While: 'while'; +/*Operators*/ + +LeftParen: '('; + +RightParen: ')'; + +LeftBracket: '['; + +RightBracket: ']'; + +LeftBrace: '{'; + +RightBrace: '}'; + +Plus: '+'; + +Minus: '-'; + +Star: '*'; + +Div: '/'; + +Mod: '%'; + +Caret: '^'; + +And: '&'; + +Or: '|'; + +Tilde: '~'; + +Not: '!' | 'not'; + +Assign: '='; + +Less: '<'; + +Greater: '>'; + +PlusAssign: '+='; + +MinusAssign: '-='; + +StarAssign: '*='; + +DivAssign: '/='; + +ModAssign: '%='; + +XorAssign: '^='; + +AndAssign: '&='; + +OrAssign: '|='; + +LeftShiftAssign: '<<='; + +RightShiftAssign: '>>='; + +Equal: '=='; + +NotEqual: '!='; + +LessEqual: '<='; + +GreaterEqual: '>='; + +AndAnd: '&&' | 'and'; + +OrOr: '||' | 'or'; + +PlusPlus: '++'; + +MinusMinus: '--'; + +Comma: ','; + +ArrowStar: '->*'; + +Arrow: '->'; + +Question: '?'; + +Colon: ':'; + +Doublecolon: '::'; + +Semi: ';'; + +Dot: '.'; + +DotStar: '.*'; + +Ellipsis: '...'; + +fragment Hexquad: + HEXADECIMALDIGIT HEXADECIMALDIGIT HEXADECIMALDIGIT HEXADECIMALDIGIT; + +fragment Universalcharactername: + '\\u' Hexquad + | '\\U' Hexquad Hexquad; + +Identifier: + /* + Identifiernondigit | Identifier Identifiernondigit | Identifier DIGIT + */ + Identifiernondigit (Identifiernondigit | DIGIT)*; + +fragment Identifiernondigit: NONDIGIT | Universalcharactername; + +fragment NONDIGIT: [a-zA-Z_]; + +fragment DIGIT: [0-9]; + +DecimalLiteral: NONZERODIGIT ('\''? DIGIT)*; + +OctalLiteral: '0' ('\''? OCTALDIGIT)*; + +HexadecimalLiteral: ('0x' | '0X') HEXADECIMALDIGIT ( + '\''? HEXADECIMALDIGIT + )*; + +BinaryLiteral: ('0b' | '0B') BINARYDIGIT ('\''? BINARYDIGIT)*; + +fragment NONZERODIGIT: [1-9]; + +fragment OCTALDIGIT: [0-7]; + +fragment HEXADECIMALDIGIT: [0-9a-fA-F]; + +fragment BINARYDIGIT: [01]; + +Integersuffix: + Unsignedsuffix Longsuffix? + | Unsignedsuffix Longlongsuffix? + | Longsuffix Unsignedsuffix? + | Longlongsuffix Unsignedsuffix?; + +fragment Unsignedsuffix: [uU]; + +fragment Longsuffix: [lL]; + +fragment Longlongsuffix: 'll' | 'LL'; + +fragment Cchar: + ~ ['\\\r\n] + | Escapesequence + | Universalcharactername; + +fragment Escapesequence: + Simpleescapesequence + | Octalescapesequence + | Hexadecimalescapesequence; + +fragment Simpleescapesequence: + '\\\'' + | '\\"' + | '\\?' + | '\\\\' + | '\\a' + | '\\b' + | '\\f' + | '\\n' + | '\\r' + | ('\\' ('\r' '\n'? | '\n')) + | '\\t' + | '\\v'; + +fragment Octalescapesequence: + '\\' OCTALDIGIT + | '\\' OCTALDIGIT OCTALDIGIT + | '\\' OCTALDIGIT OCTALDIGIT OCTALDIGIT; + +fragment Hexadecimalescapesequence: '\\x' HEXADECIMALDIGIT+; + +fragment Fractionalconstant: + Digitsequence? '.' Digitsequence + | Digitsequence '.'; + +fragment Exponentpart: + 'e' SIGN? Digitsequence + | 'E' SIGN? Digitsequence; + +fragment SIGN: [+-]; + +fragment Digitsequence: DIGIT ('\''? DIGIT)*; + +fragment Floatingsuffix: [flFL]; + +fragment Encodingprefix: 'u8' | 'u' | 'U' | 'L'; + +fragment Schar: + ~ ["\\\r\n] + | Escapesequence + | Universalcharactername; + +fragment Rawstring: 'R"' (( '\\' ["()] )|~[\r\n (])*? '(' ~[)]*? ')' (( '\\' ["()]) | ~[\r\n "])*? '"'; + +UserDefinedIntegerLiteral: + DecimalLiteral Udsuffix + | OctalLiteral Udsuffix + | HexadecimalLiteral Udsuffix + | BinaryLiteral Udsuffix; + +UserDefinedFloatingLiteral: + Fractionalconstant Exponentpart? Udsuffix + | Digitsequence Exponentpart Udsuffix; + +UserDefinedStringLiteral: StringLiteral Udsuffix; + +UserDefinedCharacterLiteral: CharacterLiteral Udsuffix; + +fragment Udsuffix: Identifier; + +Whitespace: [ \t]+ -> skip; + +Newline: ('\r' '\n'? | '\n') -> skip; + +BlockComment: '/*' .*? '*/' -> skip; + +LineComment: '//' ~ [\r\n]* -> skip; diff --git a/lexers/src/main/java/com/itsaky/androidide/lexers/cpp/CPP14Lexer.interp b/lexers/src/main/java/com/itsaky/androidide/lexers/cpp/CPP14Lexer.interp new file mode 100644 index 000000000..cfd8d38c9 --- /dev/null +++ b/lexers/src/main/java/com/itsaky/androidide/lexers/cpp/CPP14Lexer.interp @@ -0,0 +1,478 @@ +token literal names: +null +null +null +null +null +null +null +null +null +null +'alignas' +'alignof' +'asm' +'auto' +'bool' +'break' +'case' +'catch' +'char' +'char16_t' +'char32_t' +'class' +'const' +'constexpr' +'const_cast' +'continue' +'decltype' +'default' +'delete' +'do' +'double' +'dynamic_cast' +'else' +'enum' +'explicit' +'export' +'extern' +'false' +'final' +'float' +'for' +'friend' +'goto' +'if' +'inline' +'int' +'long' +'mutable' +'namespace' +'new' +'noexcept' +'nullptr' +'operator' +'override' +'private' +'protected' +'public' +'register' +'reinterpret_cast' +'return' +'short' +'signed' +'sizeof' +'static' +'static_assert' +'static_cast' +'struct' +'switch' +'template' +'this' +'thread_local' +'throw' +'true' +'try' +'typedef' +'typeid' +'typename' +'union' +'unsigned' +'using' +'virtual' +'void' +'volatile' +'wchar_t' +'while' +'(' +')' +'[' +']' +'{' +'}' +'+' +'-' +'*' +'/' +'%' +'^' +'&' +'|' +'~' +null +'=' +'<' +'>' +'+=' +'-=' +'*=' +'/=' +'%=' +'^=' +'&=' +'|=' +'<<=' +'>>=' +'==' +'!=' +'<=' +'>=' +null +null +'++' +'--' +',' +'->*' +'->' +'?' +':' +'::' +';' +'.' +'.*' +'...' +null +null +null +null +null +null +null +null +null +null +null +null +null +null + +token symbolic names: +null +IntegerLiteral +CharacterLiteral +FloatingLiteral +StringLiteral +BooleanLiteral +PointerLiteral +UserDefinedLiteral +MultiLineMacro +Directive +Alignas +Alignof +Asm +Auto +Bool +Break +Case +Catch +Char +Char16 +Char32 +Class +Const +Constexpr +Const_cast +Continue +Decltype +Default +Delete +Do +Double +Dynamic_cast +Else +Enum +Explicit +Export +Extern +False_ +Final +Float +For +Friend +Goto +If +Inline +Int +Long +Mutable +Namespace +New +Noexcept +Nullptr +Operator +Override +Private +Protected +Public +Register +Reinterpret_cast +Return +Short +Signed +Sizeof +Static +Static_assert +Static_cast +Struct +Switch +Template +This +Thread_local +Throw +True_ +Try +Typedef +Typeid_ +Typename_ +Union +Unsigned +Using +Virtual +Void +Volatile +Wchar +While +LeftParen +RightParen +LeftBracket +RightBracket +LeftBrace +RightBrace +Plus +Minus +Star +Div +Mod +Caret +And +Or +Tilde +Not +Assign +Less +Greater +PlusAssign +MinusAssign +StarAssign +DivAssign +ModAssign +XorAssign +AndAssign +OrAssign +LeftShiftAssign +RightShiftAssign +Equal +NotEqual +LessEqual +GreaterEqual +AndAnd +OrOr +PlusPlus +MinusMinus +Comma +ArrowStar +Arrow +Question +Colon +Doublecolon +Semi +Dot +DotStar +Ellipsis +Identifier +DecimalLiteral +OctalLiteral +HexadecimalLiteral +BinaryLiteral +Integersuffix +UserDefinedIntegerLiteral +UserDefinedFloatingLiteral +UserDefinedStringLiteral +UserDefinedCharacterLiteral +Whitespace +Newline +BlockComment +LineComment + +rule names: +IntegerLiteral +CharacterLiteral +FloatingLiteral +StringLiteral +BooleanLiteral +PointerLiteral +UserDefinedLiteral +MultiLineMacro +Directive +Alignas +Alignof +Asm +Auto +Bool +Break +Case +Catch +Char +Char16 +Char32 +Class +Const +Constexpr +Const_cast +Continue +Decltype +Default +Delete +Do +Double +Dynamic_cast +Else +Enum +Explicit +Export +Extern +False_ +Final +Float +For +Friend +Goto +If +Inline +Int +Long +Mutable +Namespace +New +Noexcept +Nullptr +Operator +Override +Private +Protected +Public +Register +Reinterpret_cast +Return +Short +Signed +Sizeof +Static +Static_assert +Static_cast +Struct +Switch +Template +This +Thread_local +Throw +True_ +Try +Typedef +Typeid_ +Typename_ +Union +Unsigned +Using +Virtual +Void +Volatile +Wchar +While +LeftParen +RightParen +LeftBracket +RightBracket +LeftBrace +RightBrace +Plus +Minus +Star +Div +Mod +Caret +And +Or +Tilde +Not +Assign +Less +Greater +PlusAssign +MinusAssign +StarAssign +DivAssign +ModAssign +XorAssign +AndAssign +OrAssign +LeftShiftAssign +RightShiftAssign +Equal +NotEqual +LessEqual +GreaterEqual +AndAnd +OrOr +PlusPlus +MinusMinus +Comma +ArrowStar +Arrow +Question +Colon +Doublecolon +Semi +Dot +DotStar +Ellipsis +Hexquad +Universalcharactername +Identifier +Identifiernondigit +NONDIGIT +DIGIT +DecimalLiteral +OctalLiteral +HexadecimalLiteral +BinaryLiteral +NONZERODIGIT +OCTALDIGIT +HEXADECIMALDIGIT +BINARYDIGIT +Integersuffix +Unsignedsuffix +Longsuffix +Longlongsuffix +Cchar +Escapesequence +Simpleescapesequence +Octalescapesequence +Hexadecimalescapesequence +Fractionalconstant +Exponentpart +SIGN +Digitsequence +Floatingsuffix +Encodingprefix +Schar +Rawstring +UserDefinedIntegerLiteral +UserDefinedFloatingLiteral +UserDefinedStringLiteral +UserDefinedCharacterLiteral +Udsuffix +Whitespace +Newline +BlockComment +LineComment + +channel names: +DEFAULT_TOKEN_CHANNEL +HIDDEN + +mode names: +DEFAULT_MODE + +atn: +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 2, 147, 1460, 8, 1, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 4, 88, 9, 88, 4, 89, 9, 89, 4, 90, 9, 90, 4, 91, 9, 91, 4, 92, 9, 92, 4, 93, 9, 93, 4, 94, 9, 94, 4, 95, 9, 95, 4, 96, 9, 96, 4, 97, 9, 97, 4, 98, 9, 98, 4, 99, 9, 99, 4, 100, 9, 100, 4, 101, 9, 101, 4, 102, 9, 102, 4, 103, 9, 103, 4, 104, 9, 104, 4, 105, 9, 105, 4, 106, 9, 106, 4, 107, 9, 107, 4, 108, 9, 108, 4, 109, 9, 109, 4, 110, 9, 110, 4, 111, 9, 111, 4, 112, 9, 112, 4, 113, 9, 113, 4, 114, 9, 114, 4, 115, 9, 115, 4, 116, 9, 116, 4, 117, 9, 117, 4, 118, 9, 118, 4, 119, 9, 119, 4, 120, 9, 120, 4, 121, 9, 121, 4, 122, 9, 122, 4, 123, 9, 123, 4, 124, 9, 124, 4, 125, 9, 125, 4, 126, 9, 126, 4, 127, 9, 127, 4, 128, 9, 128, 4, 129, 9, 129, 4, 130, 9, 130, 4, 131, 9, 131, 4, 132, 9, 132, 4, 133, 9, 133, 4, 134, 9, 134, 4, 135, 9, 135, 4, 136, 9, 136, 4, 137, 9, 137, 4, 138, 9, 138, 4, 139, 9, 139, 4, 140, 9, 140, 4, 141, 9, 141, 4, 142, 9, 142, 4, 143, 9, 143, 4, 144, 9, 144, 4, 145, 9, 145, 4, 146, 9, 146, 4, 147, 9, 147, 4, 148, 9, 148, 4, 149, 9, 149, 4, 150, 9, 150, 4, 151, 9, 151, 4, 152, 9, 152, 4, 153, 9, 153, 4, 154, 9, 154, 4, 155, 9, 155, 4, 156, 9, 156, 4, 157, 9, 157, 4, 158, 9, 158, 4, 159, 9, 159, 4, 160, 9, 160, 4, 161, 9, 161, 4, 162, 9, 162, 4, 163, 9, 163, 4, 164, 9, 164, 4, 165, 9, 165, 4, 166, 9, 166, 4, 167, 9, 167, 4, 168, 9, 168, 4, 169, 9, 169, 4, 170, 9, 170, 4, 171, 9, 171, 4, 172, 9, 172, 3, 2, 3, 2, 5, 2, 348, 10, 2, 3, 2, 3, 2, 5, 2, 352, 10, 2, 3, 2, 3, 2, 5, 2, 356, 10, 2, 3, 2, 3, 2, 5, 2, 360, 10, 2, 5, 2, 362, 10, 2, 3, 3, 5, 3, 365, 10, 3, 3, 3, 3, 3, 6, 3, 369, 10, 3, 13, 3, 14, 3, 370, 3, 3, 3, 3, 3, 4, 3, 4, 5, 4, 377, 10, 4, 3, 4, 5, 4, 380, 10, 4, 3, 4, 3, 4, 3, 4, 5, 4, 385, 10, 4, 5, 4, 387, 10, 4, 3, 5, 5, 5, 390, 10, 5, 3, 5, 3, 5, 7, 5, 394, 10, 5, 12, 5, 14, 5, 397, 11, 5, 3, 5, 3, 5, 5, 5, 401, 10, 5, 3, 5, 3, 5, 5, 5, 405, 10, 5, 3, 6, 3, 6, 5, 6, 409, 10, 6, 3, 7, 3, 7, 3, 8, 3, 8, 3, 8, 3, 8, 5, 8, 417, 10, 8, 3, 9, 3, 9, 7, 9, 421, 10, 9, 12, 9, 14, 9, 424, 11, 9, 3, 9, 3, 9, 5, 9, 428, 10, 9, 3, 9, 6, 9, 431, 10, 9, 13, 9, 14, 9, 432, 3, 9, 6, 9, 436, 10, 9, 13, 9, 14, 9, 437, 3, 9, 3, 9, 3, 10, 3, 10, 7, 10, 444, 10, 10, 12, 10, 14, 10, 447, 11, 10, 3, 10, 3, 10, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 12, 3, 13, 3, 13, 3, 13, 3, 13, 3, 14, 3, 14, 3, 14, 3, 14, 3, 14, 3, 15, 3, 15, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 16, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 18, 3, 19, 3, 19, 3, 19, 3, 19, 3, 19, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 22, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 25, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 28, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 32, 3, 33, 3, 33, 3, 33, 3, 33, 3, 33, 3, 34, 3, 34, 3, 34, 3, 34, 3, 34, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 35, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 36, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 37, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 38, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 39, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 40, 3, 41, 3, 41, 3, 41, 3, 41, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 42, 3, 43, 3, 43, 3, 43, 3, 43, 3, 43, 3, 44, 3, 44, 3, 44, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 46, 3, 46, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 3, 47, 3, 47, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 48, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 50, 3, 50, 3, 50, 3, 50, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 51, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 52, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 53, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 57, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 59, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 61, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 62, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 66, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 69, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 71, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 72, 3, 73, 3, 73, 3, 73, 3, 73, 3, 73, 3, 74, 3, 74, 3, 74, 3, 74, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 75, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 76, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 77, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 78, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 80, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 81, 3, 82, 3, 82, 3, 82, 3, 82, 3, 82, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 83, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 84, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 85, 3, 86, 3, 86, 3, 87, 3, 87, 3, 88, 3, 88, 3, 89, 3, 89, 3, 90, 3, 90, 3, 91, 3, 91, 3, 92, 3, 92, 3, 93, 3, 93, 3, 94, 3, 94, 3, 95, 3, 95, 3, 96, 3, 96, 3, 97, 3, 97, 3, 98, 3, 98, 3, 99, 3, 99, 3, 100, 3, 100, 3, 101, 3, 101, 3, 101, 3, 101, 5, 101, 1035, 10, 101, 3, 102, 3, 102, 3, 103, 3, 103, 3, 104, 3, 104, 3, 105, 3, 105, 3, 105, 3, 106, 3, 106, 3, 106, 3, 107, 3, 107, 3, 107, 3, 108, 3, 108, 3, 108, 3, 109, 3, 109, 3, 109, 3, 110, 3, 110, 3, 110, 3, 111, 3, 111, 3, 111, 3, 112, 3, 112, 3, 112, 3, 113, 3, 113, 3, 113, 3, 113, 3, 114, 3, 114, 3, 114, 3, 114, 3, 115, 3, 115, 3, 115, 3, 116, 3, 116, 3, 116, 3, 117, 3, 117, 3, 117, 3, 118, 3, 118, 3, 118, 3, 119, 3, 119, 3, 119, 3, 119, 3, 119, 5, 119, 1092, 10, 119, 3, 120, 3, 120, 3, 120, 3, 120, 5, 120, 1098, 10, 120, 3, 121, 3, 121, 3, 121, 3, 122, 3, 122, 3, 122, 3, 123, 3, 123, 3, 124, 3, 124, 3, 124, 3, 124, 3, 125, 3, 125, 3, 125, 3, 126, 3, 126, 3, 127, 3, 127, 3, 128, 3, 128, 3, 128, 3, 129, 3, 129, 3, 130, 3, 130, 3, 131, 3, 131, 3, 131, 3, 132, 3, 132, 3, 132, 3, 132, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 134, 3, 134, 3, 134, 3, 134, 3, 134, 3, 134, 3, 134, 3, 134, 3, 134, 3, 134, 5, 134, 1148, 10, 134, 3, 135, 3, 135, 3, 135, 7, 135, 1153, 10, 135, 12, 135, 14, 135, 1156, 11, 135, 3, 136, 3, 136, 5, 136, 1160, 10, 136, 3, 137, 3, 137, 3, 138, 3, 138, 3, 139, 3, 139, 5, 139, 1168, 10, 139, 3, 139, 7, 139, 1171, 10, 139, 12, 139, 14, 139, 1174, 11, 139, 3, 140, 3, 140, 5, 140, 1178, 10, 140, 3, 140, 7, 140, 1181, 10, 140, 12, 140, 14, 140, 1184, 11, 140, 3, 141, 3, 141, 3, 141, 3, 141, 5, 141, 1190, 10, 141, 3, 141, 3, 141, 5, 141, 1194, 10, 141, 3, 141, 7, 141, 1197, 10, 141, 12, 141, 14, 141, 1200, 11, 141, 3, 142, 3, 142, 3, 142, 3, 142, 5, 142, 1206, 10, 142, 3, 142, 3, 142, 5, 142, 1210, 10, 142, 3, 142, 7, 142, 1213, 10, 142, 12, 142, 14, 142, 1216, 11, 142, 3, 143, 3, 143, 3, 144, 3, 144, 3, 145, 3, 145, 3, 146, 3, 146, 3, 147, 3, 147, 5, 147, 1228, 10, 147, 3, 147, 3, 147, 5, 147, 1232, 10, 147, 3, 147, 3, 147, 5, 147, 1236, 10, 147, 3, 147, 3, 147, 5, 147, 1240, 10, 147, 5, 147, 1242, 10, 147, 3, 148, 3, 148, 3, 149, 3, 149, 3, 150, 3, 150, 3, 150, 3, 150, 5, 150, 1252, 10, 150, 3, 151, 3, 151, 3, 151, 5, 151, 1257, 10, 151, 3, 152, 3, 152, 3, 152, 5, 152, 1262, 10, 152, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 3, 153, 5, 153, 1285, 10, 153, 3, 153, 5, 153, 1288, 10, 153, 3, 153, 3, 153, 3, 153, 3, 153, 5, 153, 1294, 10, 153, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 3, 154, 5, 154, 1307, 10, 154, 3, 155, 3, 155, 3, 155, 3, 155, 6, 155, 1313, 10, 155, 13, 155, 14, 155, 1314, 3, 156, 5, 156, 1318, 10, 156, 3, 156, 3, 156, 3, 156, 3, 156, 3, 156, 5, 156, 1325, 10, 156, 3, 157, 3, 157, 5, 157, 1329, 10, 157, 3, 157, 3, 157, 3, 157, 5, 157, 1334, 10, 157, 3, 157, 5, 157, 1337, 10, 157, 3, 158, 3, 158, 3, 159, 3, 159, 5, 159, 1343, 10, 159, 3, 159, 7, 159, 1346, 10, 159, 12, 159, 14, 159, 1349, 11, 159, 3, 160, 3, 160, 3, 161, 3, 161, 3, 161, 5, 161, 1356, 10, 161, 3, 162, 3, 162, 3, 162, 5, 162, 1361, 10, 162, 3, 163, 3, 163, 7, 163, 1365, 10, 163, 12, 163, 14, 163, 1368, 11, 163, 3, 163, 3, 163, 7, 163, 1372, 10, 163, 12, 163, 14, 163, 1375, 11, 163, 3, 163, 3, 163, 7, 163, 1379, 10, 163, 12, 163, 14, 163, 1382, 11, 163, 3, 163, 3, 163, 3, 164, 3, 164, 3, 164, 3, 164, 3, 164, 3, 164, 3, 164, 3, 164, 3, 164, 3, 164, 3, 164, 3, 164, 5, 164, 1398, 10, 164, 3, 165, 3, 165, 5, 165, 1402, 10, 165, 3, 165, 3, 165, 3, 165, 3, 165, 3, 165, 3, 165, 5, 165, 1410, 10, 165, 3, 166, 3, 166, 3, 166, 3, 167, 3, 167, 3, 167, 3, 168, 3, 168, 3, 169, 6, 169, 1421, 10, 169, 13, 169, 14, 169, 1422, 3, 169, 3, 169, 3, 170, 3, 170, 5, 170, 1429, 10, 170, 3, 170, 5, 170, 1432, 10, 170, 3, 170, 3, 170, 3, 171, 3, 171, 3, 171, 3, 171, 7, 171, 1440, 10, 171, 12, 171, 14, 171, 1443, 11, 171, 3, 171, 3, 171, 3, 171, 3, 171, 3, 171, 3, 172, 3, 172, 3, 172, 3, 172, 7, 172, 1454, 10, 172, 12, 172, 14, 172, 1457, 11, 172, 3, 172, 3, 172, 4, 422, 1441, 2, 173, 3, 3, 5, 4, 7, 5, 9, 6, 11, 7, 13, 8, 15, 9, 17, 10, 19, 11, 21, 12, 23, 13, 25, 14, 27, 15, 29, 16, 31, 17, 33, 18, 35, 19, 37, 20, 39, 21, 41, 22, 43, 23, 45, 24, 47, 25, 49, 26, 51, 27, 53, 28, 55, 29, 57, 30, 59, 31, 61, 32, 63, 33, 65, 34, 67, 35, 69, 36, 71, 37, 73, 38, 75, 39, 77, 40, 79, 41, 81, 42, 83, 43, 85, 44, 87, 45, 89, 46, 91, 47, 93, 48, 95, 49, 97, 50, 99, 51, 101, 52, 103, 53, 105, 54, 107, 55, 109, 56, 111, 57, 113, 58, 115, 59, 117, 60, 119, 61, 121, 62, 123, 63, 125, 64, 127, 65, 129, 66, 131, 67, 133, 68, 135, 69, 137, 70, 139, 71, 141, 72, 143, 73, 145, 74, 147, 75, 149, 76, 151, 77, 153, 78, 155, 79, 157, 80, 159, 81, 161, 82, 163, 83, 165, 84, 167, 85, 169, 86, 171, 87, 173, 88, 175, 89, 177, 90, 179, 91, 181, 92, 183, 93, 185, 94, 187, 95, 189, 96, 191, 97, 193, 98, 195, 99, 197, 100, 199, 101, 201, 102, 203, 103, 205, 104, 207, 105, 209, 106, 211, 107, 213, 108, 215, 109, 217, 110, 219, 111, 221, 112, 223, 113, 225, 114, 227, 115, 229, 116, 231, 117, 233, 118, 235, 119, 237, 120, 239, 121, 241, 122, 243, 123, 245, 124, 247, 125, 249, 126, 251, 127, 253, 128, 255, 129, 257, 130, 259, 131, 261, 132, 263, 133, 265, 2, 267, 2, 269, 134, 271, 2, 273, 2, 275, 2, 277, 135, 279, 136, 281, 137, 283, 138, 285, 2, 287, 2, 289, 2, 291, 2, 293, 139, 295, 2, 297, 2, 299, 2, 301, 2, 303, 2, 305, 2, 307, 2, 309, 2, 311, 2, 313, 2, 315, 2, 317, 2, 319, 2, 321, 2, 323, 2, 325, 2, 327, 140, 329, 141, 331, 142, 333, 143, 335, 2, 337, 144, 339, 145, 341, 146, 343, 147, 3, 2, 21, 5, 2, 78, 78, 87, 87, 119, 119, 3, 2, 12, 12, 5, 2, 67, 92, 97, 97, 99, 124, 3, 2, 50, 59, 3, 2, 51, 59, 3, 2, 50, 57, 5, 2, 50, 59, 67, 72, 99, 104, 3, 2, 50, 51, 4, 2, 87, 87, 119, 119, 4, 2, 78, 78, 110, 110, 6, 2, 12, 12, 15, 15, 41, 41, 94, 94, 4, 2, 45, 45, 47, 47, 6, 2, 72, 72, 78, 78, 104, 104, 110, 110, 6, 2, 12, 12, 15, 15, 36, 36, 94, 94, 5, 2, 12, 12, 15, 15, 42, 42, 5, 2, 12, 12, 15, 15, 43, 43, 5, 2, 12, 12, 15, 15, 36, 36, 4, 2, 11, 11, 34, 34, 4, 2, 12, 12, 15, 15, 2, 1527, 2, 3, 3, 2, 2, 2, 2, 5, 3, 2, 2, 2, 2, 7, 3, 2, 2, 2, 2, 9, 3, 2, 2, 2, 2, 11, 3, 2, 2, 2, 2, 13, 3, 2, 2, 2, 2, 15, 3, 2, 2, 2, 2, 17, 3, 2, 2, 2, 2, 19, 3, 2, 2, 2, 2, 21, 3, 2, 2, 2, 2, 23, 3, 2, 2, 2, 2, 25, 3, 2, 2, 2, 2, 27, 3, 2, 2, 2, 2, 29, 3, 2, 2, 2, 2, 31, 3, 2, 2, 2, 2, 33, 3, 2, 2, 2, 2, 35, 3, 2, 2, 2, 2, 37, 3, 2, 2, 2, 2, 39, 3, 2, 2, 2, 2, 41, 3, 2, 2, 2, 2, 43, 3, 2, 2, 2, 2, 45, 3, 2, 2, 2, 2, 47, 3, 2, 2, 2, 2, 49, 3, 2, 2, 2, 2, 51, 3, 2, 2, 2, 2, 53, 3, 2, 2, 2, 2, 55, 3, 2, 2, 2, 2, 57, 3, 2, 2, 2, 2, 59, 3, 2, 2, 2, 2, 61, 3, 2, 2, 2, 2, 63, 3, 2, 2, 2, 2, 65, 3, 2, 2, 2, 2, 67, 3, 2, 2, 2, 2, 69, 3, 2, 2, 2, 2, 71, 3, 2, 2, 2, 2, 73, 3, 2, 2, 2, 2, 75, 3, 2, 2, 2, 2, 77, 3, 2, 2, 2, 2, 79, 3, 2, 2, 2, 2, 81, 3, 2, 2, 2, 2, 83, 3, 2, 2, 2, 2, 85, 3, 2, 2, 2, 2, 87, 3, 2, 2, 2, 2, 89, 3, 2, 2, 2, 2, 91, 3, 2, 2, 2, 2, 93, 3, 2, 2, 2, 2, 95, 3, 2, 2, 2, 2, 97, 3, 2, 2, 2, 2, 99, 3, 2, 2, 2, 2, 101, 3, 2, 2, 2, 2, 103, 3, 2, 2, 2, 2, 105, 3, 2, 2, 2, 2, 107, 3, 2, 2, 2, 2, 109, 3, 2, 2, 2, 2, 111, 3, 2, 2, 2, 2, 113, 3, 2, 2, 2, 2, 115, 3, 2, 2, 2, 2, 117, 3, 2, 2, 2, 2, 119, 3, 2, 2, 2, 2, 121, 3, 2, 2, 2, 2, 123, 3, 2, 2, 2, 2, 125, 3, 2, 2, 2, 2, 127, 3, 2, 2, 2, 2, 129, 3, 2, 2, 2, 2, 131, 3, 2, 2, 2, 2, 133, 3, 2, 2, 2, 2, 135, 3, 2, 2, 2, 2, 137, 3, 2, 2, 2, 2, 139, 3, 2, 2, 2, 2, 141, 3, 2, 2, 2, 2, 143, 3, 2, 2, 2, 2, 145, 3, 2, 2, 2, 2, 147, 3, 2, 2, 2, 2, 149, 3, 2, 2, 2, 2, 151, 3, 2, 2, 2, 2, 153, 3, 2, 2, 2, 2, 155, 3, 2, 2, 2, 2, 157, 3, 2, 2, 2, 2, 159, 3, 2, 2, 2, 2, 161, 3, 2, 2, 2, 2, 163, 3, 2, 2, 2, 2, 165, 3, 2, 2, 2, 2, 167, 3, 2, 2, 2, 2, 169, 3, 2, 2, 2, 2, 171, 3, 2, 2, 2, 2, 173, 3, 2, 2, 2, 2, 175, 3, 2, 2, 2, 2, 177, 3, 2, 2, 2, 2, 179, 3, 2, 2, 2, 2, 181, 3, 2, 2, 2, 2, 183, 3, 2, 2, 2, 2, 185, 3, 2, 2, 2, 2, 187, 3, 2, 2, 2, 2, 189, 3, 2, 2, 2, 2, 191, 3, 2, 2, 2, 2, 193, 3, 2, 2, 2, 2, 195, 3, 2, 2, 2, 2, 197, 3, 2, 2, 2, 2, 199, 3, 2, 2, 2, 2, 201, 3, 2, 2, 2, 2, 203, 3, 2, 2, 2, 2, 205, 3, 2, 2, 2, 2, 207, 3, 2, 2, 2, 2, 209, 3, 2, 2, 2, 2, 211, 3, 2, 2, 2, 2, 213, 3, 2, 2, 2, 2, 215, 3, 2, 2, 2, 2, 217, 3, 2, 2, 2, 2, 219, 3, 2, 2, 2, 2, 221, 3, 2, 2, 2, 2, 223, 3, 2, 2, 2, 2, 225, 3, 2, 2, 2, 2, 227, 3, 2, 2, 2, 2, 229, 3, 2, 2, 2, 2, 231, 3, 2, 2, 2, 2, 233, 3, 2, 2, 2, 2, 235, 3, 2, 2, 2, 2, 237, 3, 2, 2, 2, 2, 239, 3, 2, 2, 2, 2, 241, 3, 2, 2, 2, 2, 243, 3, 2, 2, 2, 2, 245, 3, 2, 2, 2, 2, 247, 3, 2, 2, 2, 2, 249, 3, 2, 2, 2, 2, 251, 3, 2, 2, 2, 2, 253, 3, 2, 2, 2, 2, 255, 3, 2, 2, 2, 2, 257, 3, 2, 2, 2, 2, 259, 3, 2, 2, 2, 2, 261, 3, 2, 2, 2, 2, 263, 3, 2, 2, 2, 2, 269, 3, 2, 2, 2, 2, 277, 3, 2, 2, 2, 2, 279, 3, 2, 2, 2, 2, 281, 3, 2, 2, 2, 2, 283, 3, 2, 2, 2, 2, 293, 3, 2, 2, 2, 2, 327, 3, 2, 2, 2, 2, 329, 3, 2, 2, 2, 2, 331, 3, 2, 2, 2, 2, 333, 3, 2, 2, 2, 2, 337, 3, 2, 2, 2, 2, 339, 3, 2, 2, 2, 2, 341, 3, 2, 2, 2, 2, 343, 3, 2, 2, 2, 3, 361, 3, 2, 2, 2, 5, 364, 3, 2, 2, 2, 7, 386, 3, 2, 2, 2, 9, 404, 3, 2, 2, 2, 11, 408, 3, 2, 2, 2, 13, 410, 3, 2, 2, 2, 15, 416, 3, 2, 2, 2, 17, 418, 3, 2, 2, 2, 19, 441, 3, 2, 2, 2, 21, 450, 3, 2, 2, 2, 23, 458, 3, 2, 2, 2, 25, 466, 3, 2, 2, 2, 27, 470, 3, 2, 2, 2, 29, 475, 3, 2, 2, 2, 31, 480, 3, 2, 2, 2, 33, 486, 3, 2, 2, 2, 35, 491, 3, 2, 2, 2, 37, 497, 3, 2, 2, 2, 39, 502, 3, 2, 2, 2, 41, 511, 3, 2, 2, 2, 43, 520, 3, 2, 2, 2, 45, 526, 3, 2, 2, 2, 47, 532, 3, 2, 2, 2, 49, 542, 3, 2, 2, 2, 51, 553, 3, 2, 2, 2, 53, 562, 3, 2, 2, 2, 55, 571, 3, 2, 2, 2, 57, 579, 3, 2, 2, 2, 59, 586, 3, 2, 2, 2, 61, 589, 3, 2, 2, 2, 63, 596, 3, 2, 2, 2, 65, 609, 3, 2, 2, 2, 67, 614, 3, 2, 2, 2, 69, 619, 3, 2, 2, 2, 71, 628, 3, 2, 2, 2, 73, 635, 3, 2, 2, 2, 75, 642, 3, 2, 2, 2, 77, 648, 3, 2, 2, 2, 79, 654, 3, 2, 2, 2, 81, 660, 3, 2, 2, 2, 83, 664, 3, 2, 2, 2, 85, 671, 3, 2, 2, 2, 87, 676, 3, 2, 2, 2, 89, 679, 3, 2, 2, 2, 91, 686, 3, 2, 2, 2, 93, 690, 3, 2, 2, 2, 95, 695, 3, 2, 2, 2, 97, 703, 3, 2, 2, 2, 99, 713, 3, 2, 2, 2, 101, 717, 3, 2, 2, 2, 103, 726, 3, 2, 2, 2, 105, 734, 3, 2, 2, 2, 107, 743, 3, 2, 2, 2, 109, 752, 3, 2, 2, 2, 111, 760, 3, 2, 2, 2, 113, 770, 3, 2, 2, 2, 115, 777, 3, 2, 2, 2, 117, 786, 3, 2, 2, 2, 119, 803, 3, 2, 2, 2, 121, 810, 3, 2, 2, 2, 123, 816, 3, 2, 2, 2, 125, 823, 3, 2, 2, 2, 127, 830, 3, 2, 2, 2, 129, 837, 3, 2, 2, 2, 131, 851, 3, 2, 2, 2, 133, 863, 3, 2, 2, 2, 135, 870, 3, 2, 2, 2, 137, 877, 3, 2, 2, 2, 139, 886, 3, 2, 2, 2, 141, 891, 3, 2, 2, 2, 143, 904, 3, 2, 2, 2, 145, 910, 3, 2, 2, 2, 147, 915, 3, 2, 2, 2, 149, 919, 3, 2, 2, 2, 151, 927, 3, 2, 2, 2, 153, 934, 3, 2, 2, 2, 155, 943, 3, 2, 2, 2, 157, 949, 3, 2, 2, 2, 159, 958, 3, 2, 2, 2, 161, 964, 3, 2, 2, 2, 163, 972, 3, 2, 2, 2, 165, 977, 3, 2, 2, 2, 167, 986, 3, 2, 2, 2, 169, 994, 3, 2, 2, 2, 171, 1000, 3, 2, 2, 2, 173, 1002, 3, 2, 2, 2, 175, 1004, 3, 2, 2, 2, 177, 1006, 3, 2, 2, 2, 179, 1008, 3, 2, 2, 2, 181, 1010, 3, 2, 2, 2, 183, 1012, 3, 2, 2, 2, 185, 1014, 3, 2, 2, 2, 187, 1016, 3, 2, 2, 2, 189, 1018, 3, 2, 2, 2, 191, 1020, 3, 2, 2, 2, 193, 1022, 3, 2, 2, 2, 195, 1024, 3, 2, 2, 2, 197, 1026, 3, 2, 2, 2, 199, 1028, 3, 2, 2, 2, 201, 1034, 3, 2, 2, 2, 203, 1036, 3, 2, 2, 2, 205, 1038, 3, 2, 2, 2, 207, 1040, 3, 2, 2, 2, 209, 1042, 3, 2, 2, 2, 211, 1045, 3, 2, 2, 2, 213, 1048, 3, 2, 2, 2, 215, 1051, 3, 2, 2, 2, 217, 1054, 3, 2, 2, 2, 219, 1057, 3, 2, 2, 2, 221, 1060, 3, 2, 2, 2, 223, 1063, 3, 2, 2, 2, 225, 1066, 3, 2, 2, 2, 227, 1070, 3, 2, 2, 2, 229, 1074, 3, 2, 2, 2, 231, 1077, 3, 2, 2, 2, 233, 1080, 3, 2, 2, 2, 235, 1083, 3, 2, 2, 2, 237, 1091, 3, 2, 2, 2, 239, 1097, 3, 2, 2, 2, 241, 1099, 3, 2, 2, 2, 243, 1102, 3, 2, 2, 2, 245, 1105, 3, 2, 2, 2, 247, 1107, 3, 2, 2, 2, 249, 1111, 3, 2, 2, 2, 251, 1114, 3, 2, 2, 2, 253, 1116, 3, 2, 2, 2, 255, 1118, 3, 2, 2, 2, 257, 1121, 3, 2, 2, 2, 259, 1123, 3, 2, 2, 2, 261, 1125, 3, 2, 2, 2, 263, 1128, 3, 2, 2, 2, 265, 1132, 3, 2, 2, 2, 267, 1147, 3, 2, 2, 2, 269, 1149, 3, 2, 2, 2, 271, 1159, 3, 2, 2, 2, 273, 1161, 3, 2, 2, 2, 275, 1163, 3, 2, 2, 2, 277, 1165, 3, 2, 2, 2, 279, 1175, 3, 2, 2, 2, 281, 1189, 3, 2, 2, 2, 283, 1205, 3, 2, 2, 2, 285, 1217, 3, 2, 2, 2, 287, 1219, 3, 2, 2, 2, 289, 1221, 3, 2, 2, 2, 291, 1223, 3, 2, 2, 2, 293, 1241, 3, 2, 2, 2, 295, 1243, 3, 2, 2, 2, 297, 1245, 3, 2, 2, 2, 299, 1251, 3, 2, 2, 2, 301, 1256, 3, 2, 2, 2, 303, 1261, 3, 2, 2, 2, 305, 1293, 3, 2, 2, 2, 307, 1306, 3, 2, 2, 2, 309, 1308, 3, 2, 2, 2, 311, 1324, 3, 2, 2, 2, 313, 1336, 3, 2, 2, 2, 315, 1338, 3, 2, 2, 2, 317, 1340, 3, 2, 2, 2, 319, 1350, 3, 2, 2, 2, 321, 1355, 3, 2, 2, 2, 323, 1360, 3, 2, 2, 2, 325, 1362, 3, 2, 2, 2, 327, 1397, 3, 2, 2, 2, 329, 1409, 3, 2, 2, 2, 331, 1411, 3, 2, 2, 2, 333, 1414, 3, 2, 2, 2, 335, 1417, 3, 2, 2, 2, 337, 1420, 3, 2, 2, 2, 339, 1431, 3, 2, 2, 2, 341, 1435, 3, 2, 2, 2, 343, 1449, 3, 2, 2, 2, 345, 347, 5, 277, 139, 2, 346, 348, 5, 293, 147, 2, 347, 346, 3, 2, 2, 2, 347, 348, 3, 2, 2, 2, 348, 362, 3, 2, 2, 2, 349, 351, 5, 279, 140, 2, 350, 352, 5, 293, 147, 2, 351, 350, 3, 2, 2, 2, 351, 352, 3, 2, 2, 2, 352, 362, 3, 2, 2, 2, 353, 355, 5, 281, 141, 2, 354, 356, 5, 293, 147, 2, 355, 354, 3, 2, 2, 2, 355, 356, 3, 2, 2, 2, 356, 362, 3, 2, 2, 2, 357, 359, 5, 283, 142, 2, 358, 360, 5, 293, 147, 2, 359, 358, 3, 2, 2, 2, 359, 360, 3, 2, 2, 2, 360, 362, 3, 2, 2, 2, 361, 345, 3, 2, 2, 2, 361, 349, 3, 2, 2, 2, 361, 353, 3, 2, 2, 2, 361, 357, 3, 2, 2, 2, 362, 4, 3, 2, 2, 2, 363, 365, 9, 2, 2, 2, 364, 363, 3, 2, 2, 2, 364, 365, 3, 2, 2, 2, 365, 366, 3, 2, 2, 2, 366, 368, 7, 41, 2, 2, 367, 369, 5, 301, 151, 2, 368, 367, 3, 2, 2, 2, 369, 370, 3, 2, 2, 2, 370, 368, 3, 2, 2, 2, 370, 371, 3, 2, 2, 2, 371, 372, 3, 2, 2, 2, 372, 373, 7, 41, 2, 2, 373, 6, 3, 2, 2, 2, 374, 376, 5, 311, 156, 2, 375, 377, 5, 313, 157, 2, 376, 375, 3, 2, 2, 2, 376, 377, 3, 2, 2, 2, 377, 379, 3, 2, 2, 2, 378, 380, 5, 319, 160, 2, 379, 378, 3, 2, 2, 2, 379, 380, 3, 2, 2, 2, 380, 387, 3, 2, 2, 2, 381, 382, 5, 317, 159, 2, 382, 384, 5, 313, 157, 2, 383, 385, 5, 319, 160, 2, 384, 383, 3, 2, 2, 2, 384, 385, 3, 2, 2, 2, 385, 387, 3, 2, 2, 2, 386, 374, 3, 2, 2, 2, 386, 381, 3, 2, 2, 2, 387, 8, 3, 2, 2, 2, 388, 390, 5, 321, 161, 2, 389, 388, 3, 2, 2, 2, 389, 390, 3, 2, 2, 2, 390, 391, 3, 2, 2, 2, 391, 395, 7, 36, 2, 2, 392, 394, 5, 323, 162, 2, 393, 392, 3, 2, 2, 2, 394, 397, 3, 2, 2, 2, 395, 393, 3, 2, 2, 2, 395, 396, 3, 2, 2, 2, 396, 398, 3, 2, 2, 2, 397, 395, 3, 2, 2, 2, 398, 405, 7, 36, 2, 2, 399, 401, 5, 321, 161, 2, 400, 399, 3, 2, 2, 2, 400, 401, 3, 2, 2, 2, 401, 402, 3, 2, 2, 2, 402, 403, 7, 84, 2, 2, 403, 405, 5, 325, 163, 2, 404, 389, 3, 2, 2, 2, 404, 400, 3, 2, 2, 2, 405, 10, 3, 2, 2, 2, 406, 409, 5, 75, 38, 2, 407, 409, 5, 145, 73, 2, 408, 406, 3, 2, 2, 2, 408, 407, 3, 2, 2, 2, 409, 12, 3, 2, 2, 2, 410, 411, 5, 103, 52, 2, 411, 14, 3, 2, 2, 2, 412, 417, 5, 327, 164, 2, 413, 417, 5, 329, 165, 2, 414, 417, 5, 331, 166, 2, 415, 417, 5, 333, 167, 2, 416, 412, 3, 2, 2, 2, 416, 413, 3, 2, 2, 2, 416, 414, 3, 2, 2, 2, 416, 415, 3, 2, 2, 2, 417, 16, 3, 2, 2, 2, 418, 430, 7, 37, 2, 2, 419, 421, 10, 3, 2, 2, 420, 419, 3, 2, 2, 2, 421, 424, 3, 2, 2, 2, 422, 423, 3, 2, 2, 2, 422, 420, 3, 2, 2, 2, 423, 425, 3, 2, 2, 2, 424, 422, 3, 2, 2, 2, 425, 427, 7, 94, 2, 2, 426, 428, 7, 15, 2, 2, 427, 426, 3, 2, 2, 2, 427, 428, 3, 2, 2, 2, 428, 429, 3, 2, 2, 2, 429, 431, 7, 12, 2, 2, 430, 422, 3, 2, 2, 2, 431, 432, 3, 2, 2, 2, 432, 430, 3, 2, 2, 2, 432, 433, 3, 2, 2, 2, 433, 435, 3, 2, 2, 2, 434, 436, 10, 3, 2, 2, 435, 434, 3, 2, 2, 2, 436, 437, 3, 2, 2, 2, 437, 435, 3, 2, 2, 2, 437, 438, 3, 2, 2, 2, 438, 439, 3, 2, 2, 2, 439, 440, 8, 9, 2, 2, 440, 18, 3, 2, 2, 2, 441, 445, 7, 37, 2, 2, 442, 444, 10, 3, 2, 2, 443, 442, 3, 2, 2, 2, 444, 447, 3, 2, 2, 2, 445, 443, 3, 2, 2, 2, 445, 446, 3, 2, 2, 2, 446, 448, 3, 2, 2, 2, 447, 445, 3, 2, 2, 2, 448, 449, 8, 10, 2, 2, 449, 20, 3, 2, 2, 2, 450, 451, 7, 99, 2, 2, 451, 452, 7, 110, 2, 2, 452, 453, 7, 107, 2, 2, 453, 454, 7, 105, 2, 2, 454, 455, 7, 112, 2, 2, 455, 456, 7, 99, 2, 2, 456, 457, 7, 117, 2, 2, 457, 22, 3, 2, 2, 2, 458, 459, 7, 99, 2, 2, 459, 460, 7, 110, 2, 2, 460, 461, 7, 107, 2, 2, 461, 462, 7, 105, 2, 2, 462, 463, 7, 112, 2, 2, 463, 464, 7, 113, 2, 2, 464, 465, 7, 104, 2, 2, 465, 24, 3, 2, 2, 2, 466, 467, 7, 99, 2, 2, 467, 468, 7, 117, 2, 2, 468, 469, 7, 111, 2, 2, 469, 26, 3, 2, 2, 2, 470, 471, 7, 99, 2, 2, 471, 472, 7, 119, 2, 2, 472, 473, 7, 118, 2, 2, 473, 474, 7, 113, 2, 2, 474, 28, 3, 2, 2, 2, 475, 476, 7, 100, 2, 2, 476, 477, 7, 113, 2, 2, 477, 478, 7, 113, 2, 2, 478, 479, 7, 110, 2, 2, 479, 30, 3, 2, 2, 2, 480, 481, 7, 100, 2, 2, 481, 482, 7, 116, 2, 2, 482, 483, 7, 103, 2, 2, 483, 484, 7, 99, 2, 2, 484, 485, 7, 109, 2, 2, 485, 32, 3, 2, 2, 2, 486, 487, 7, 101, 2, 2, 487, 488, 7, 99, 2, 2, 488, 489, 7, 117, 2, 2, 489, 490, 7, 103, 2, 2, 490, 34, 3, 2, 2, 2, 491, 492, 7, 101, 2, 2, 492, 493, 7, 99, 2, 2, 493, 494, 7, 118, 2, 2, 494, 495, 7, 101, 2, 2, 495, 496, 7, 106, 2, 2, 496, 36, 3, 2, 2, 2, 497, 498, 7, 101, 2, 2, 498, 499, 7, 106, 2, 2, 499, 500, 7, 99, 2, 2, 500, 501, 7, 116, 2, 2, 501, 38, 3, 2, 2, 2, 502, 503, 7, 101, 2, 2, 503, 504, 7, 106, 2, 2, 504, 505, 7, 99, 2, 2, 505, 506, 7, 116, 2, 2, 506, 507, 7, 51, 2, 2, 507, 508, 7, 56, 2, 2, 508, 509, 7, 97, 2, 2, 509, 510, 7, 118, 2, 2, 510, 40, 3, 2, 2, 2, 511, 512, 7, 101, 2, 2, 512, 513, 7, 106, 2, 2, 513, 514, 7, 99, 2, 2, 514, 515, 7, 116, 2, 2, 515, 516, 7, 53, 2, 2, 516, 517, 7, 52, 2, 2, 517, 518, 7, 97, 2, 2, 518, 519, 7, 118, 2, 2, 519, 42, 3, 2, 2, 2, 520, 521, 7, 101, 2, 2, 521, 522, 7, 110, 2, 2, 522, 523, 7, 99, 2, 2, 523, 524, 7, 117, 2, 2, 524, 525, 7, 117, 2, 2, 525, 44, 3, 2, 2, 2, 526, 527, 7, 101, 2, 2, 527, 528, 7, 113, 2, 2, 528, 529, 7, 112, 2, 2, 529, 530, 7, 117, 2, 2, 530, 531, 7, 118, 2, 2, 531, 46, 3, 2, 2, 2, 532, 533, 7, 101, 2, 2, 533, 534, 7, 113, 2, 2, 534, 535, 7, 112, 2, 2, 535, 536, 7, 117, 2, 2, 536, 537, 7, 118, 2, 2, 537, 538, 7, 103, 2, 2, 538, 539, 7, 122, 2, 2, 539, 540, 7, 114, 2, 2, 540, 541, 7, 116, 2, 2, 541, 48, 3, 2, 2, 2, 542, 543, 7, 101, 2, 2, 543, 544, 7, 113, 2, 2, 544, 545, 7, 112, 2, 2, 545, 546, 7, 117, 2, 2, 546, 547, 7, 118, 2, 2, 547, 548, 7, 97, 2, 2, 548, 549, 7, 101, 2, 2, 549, 550, 7, 99, 2, 2, 550, 551, 7, 117, 2, 2, 551, 552, 7, 118, 2, 2, 552, 50, 3, 2, 2, 2, 553, 554, 7, 101, 2, 2, 554, 555, 7, 113, 2, 2, 555, 556, 7, 112, 2, 2, 556, 557, 7, 118, 2, 2, 557, 558, 7, 107, 2, 2, 558, 559, 7, 112, 2, 2, 559, 560, 7, 119, 2, 2, 560, 561, 7, 103, 2, 2, 561, 52, 3, 2, 2, 2, 562, 563, 7, 102, 2, 2, 563, 564, 7, 103, 2, 2, 564, 565, 7, 101, 2, 2, 565, 566, 7, 110, 2, 2, 566, 567, 7, 118, 2, 2, 567, 568, 7, 123, 2, 2, 568, 569, 7, 114, 2, 2, 569, 570, 7, 103, 2, 2, 570, 54, 3, 2, 2, 2, 571, 572, 7, 102, 2, 2, 572, 573, 7, 103, 2, 2, 573, 574, 7, 104, 2, 2, 574, 575, 7, 99, 2, 2, 575, 576, 7, 119, 2, 2, 576, 577, 7, 110, 2, 2, 577, 578, 7, 118, 2, 2, 578, 56, 3, 2, 2, 2, 579, 580, 7, 102, 2, 2, 580, 581, 7, 103, 2, 2, 581, 582, 7, 110, 2, 2, 582, 583, 7, 103, 2, 2, 583, 584, 7, 118, 2, 2, 584, 585, 7, 103, 2, 2, 585, 58, 3, 2, 2, 2, 586, 587, 7, 102, 2, 2, 587, 588, 7, 113, 2, 2, 588, 60, 3, 2, 2, 2, 589, 590, 7, 102, 2, 2, 590, 591, 7, 113, 2, 2, 591, 592, 7, 119, 2, 2, 592, 593, 7, 100, 2, 2, 593, 594, 7, 110, 2, 2, 594, 595, 7, 103, 2, 2, 595, 62, 3, 2, 2, 2, 596, 597, 7, 102, 2, 2, 597, 598, 7, 123, 2, 2, 598, 599, 7, 112, 2, 2, 599, 600, 7, 99, 2, 2, 600, 601, 7, 111, 2, 2, 601, 602, 7, 107, 2, 2, 602, 603, 7, 101, 2, 2, 603, 604, 7, 97, 2, 2, 604, 605, 7, 101, 2, 2, 605, 606, 7, 99, 2, 2, 606, 607, 7, 117, 2, 2, 607, 608, 7, 118, 2, 2, 608, 64, 3, 2, 2, 2, 609, 610, 7, 103, 2, 2, 610, 611, 7, 110, 2, 2, 611, 612, 7, 117, 2, 2, 612, 613, 7, 103, 2, 2, 613, 66, 3, 2, 2, 2, 614, 615, 7, 103, 2, 2, 615, 616, 7, 112, 2, 2, 616, 617, 7, 119, 2, 2, 617, 618, 7, 111, 2, 2, 618, 68, 3, 2, 2, 2, 619, 620, 7, 103, 2, 2, 620, 621, 7, 122, 2, 2, 621, 622, 7, 114, 2, 2, 622, 623, 7, 110, 2, 2, 623, 624, 7, 107, 2, 2, 624, 625, 7, 101, 2, 2, 625, 626, 7, 107, 2, 2, 626, 627, 7, 118, 2, 2, 627, 70, 3, 2, 2, 2, 628, 629, 7, 103, 2, 2, 629, 630, 7, 122, 2, 2, 630, 631, 7, 114, 2, 2, 631, 632, 7, 113, 2, 2, 632, 633, 7, 116, 2, 2, 633, 634, 7, 118, 2, 2, 634, 72, 3, 2, 2, 2, 635, 636, 7, 103, 2, 2, 636, 637, 7, 122, 2, 2, 637, 638, 7, 118, 2, 2, 638, 639, 7, 103, 2, 2, 639, 640, 7, 116, 2, 2, 640, 641, 7, 112, 2, 2, 641, 74, 3, 2, 2, 2, 642, 643, 7, 104, 2, 2, 643, 644, 7, 99, 2, 2, 644, 645, 7, 110, 2, 2, 645, 646, 7, 117, 2, 2, 646, 647, 7, 103, 2, 2, 647, 76, 3, 2, 2, 2, 648, 649, 7, 104, 2, 2, 649, 650, 7, 107, 2, 2, 650, 651, 7, 112, 2, 2, 651, 652, 7, 99, 2, 2, 652, 653, 7, 110, 2, 2, 653, 78, 3, 2, 2, 2, 654, 655, 7, 104, 2, 2, 655, 656, 7, 110, 2, 2, 656, 657, 7, 113, 2, 2, 657, 658, 7, 99, 2, 2, 658, 659, 7, 118, 2, 2, 659, 80, 3, 2, 2, 2, 660, 661, 7, 104, 2, 2, 661, 662, 7, 113, 2, 2, 662, 663, 7, 116, 2, 2, 663, 82, 3, 2, 2, 2, 664, 665, 7, 104, 2, 2, 665, 666, 7, 116, 2, 2, 666, 667, 7, 107, 2, 2, 667, 668, 7, 103, 2, 2, 668, 669, 7, 112, 2, 2, 669, 670, 7, 102, 2, 2, 670, 84, 3, 2, 2, 2, 671, 672, 7, 105, 2, 2, 672, 673, 7, 113, 2, 2, 673, 674, 7, 118, 2, 2, 674, 675, 7, 113, 2, 2, 675, 86, 3, 2, 2, 2, 676, 677, 7, 107, 2, 2, 677, 678, 7, 104, 2, 2, 678, 88, 3, 2, 2, 2, 679, 680, 7, 107, 2, 2, 680, 681, 7, 112, 2, 2, 681, 682, 7, 110, 2, 2, 682, 683, 7, 107, 2, 2, 683, 684, 7, 112, 2, 2, 684, 685, 7, 103, 2, 2, 685, 90, 3, 2, 2, 2, 686, 687, 7, 107, 2, 2, 687, 688, 7, 112, 2, 2, 688, 689, 7, 118, 2, 2, 689, 92, 3, 2, 2, 2, 690, 691, 7, 110, 2, 2, 691, 692, 7, 113, 2, 2, 692, 693, 7, 112, 2, 2, 693, 694, 7, 105, 2, 2, 694, 94, 3, 2, 2, 2, 695, 696, 7, 111, 2, 2, 696, 697, 7, 119, 2, 2, 697, 698, 7, 118, 2, 2, 698, 699, 7, 99, 2, 2, 699, 700, 7, 100, 2, 2, 700, 701, 7, 110, 2, 2, 701, 702, 7, 103, 2, 2, 702, 96, 3, 2, 2, 2, 703, 704, 7, 112, 2, 2, 704, 705, 7, 99, 2, 2, 705, 706, 7, 111, 2, 2, 706, 707, 7, 103, 2, 2, 707, 708, 7, 117, 2, 2, 708, 709, 7, 114, 2, 2, 709, 710, 7, 99, 2, 2, 710, 711, 7, 101, 2, 2, 711, 712, 7, 103, 2, 2, 712, 98, 3, 2, 2, 2, 713, 714, 7, 112, 2, 2, 714, 715, 7, 103, 2, 2, 715, 716, 7, 121, 2, 2, 716, 100, 3, 2, 2, 2, 717, 718, 7, 112, 2, 2, 718, 719, 7, 113, 2, 2, 719, 720, 7, 103, 2, 2, 720, 721, 7, 122, 2, 2, 721, 722, 7, 101, 2, 2, 722, 723, 7, 103, 2, 2, 723, 724, 7, 114, 2, 2, 724, 725, 7, 118, 2, 2, 725, 102, 3, 2, 2, 2, 726, 727, 7, 112, 2, 2, 727, 728, 7, 119, 2, 2, 728, 729, 7, 110, 2, 2, 729, 730, 7, 110, 2, 2, 730, 731, 7, 114, 2, 2, 731, 732, 7, 118, 2, 2, 732, 733, 7, 116, 2, 2, 733, 104, 3, 2, 2, 2, 734, 735, 7, 113, 2, 2, 735, 736, 7, 114, 2, 2, 736, 737, 7, 103, 2, 2, 737, 738, 7, 116, 2, 2, 738, 739, 7, 99, 2, 2, 739, 740, 7, 118, 2, 2, 740, 741, 7, 113, 2, 2, 741, 742, 7, 116, 2, 2, 742, 106, 3, 2, 2, 2, 743, 744, 7, 113, 2, 2, 744, 745, 7, 120, 2, 2, 745, 746, 7, 103, 2, 2, 746, 747, 7, 116, 2, 2, 747, 748, 7, 116, 2, 2, 748, 749, 7, 107, 2, 2, 749, 750, 7, 102, 2, 2, 750, 751, 7, 103, 2, 2, 751, 108, 3, 2, 2, 2, 752, 753, 7, 114, 2, 2, 753, 754, 7, 116, 2, 2, 754, 755, 7, 107, 2, 2, 755, 756, 7, 120, 2, 2, 756, 757, 7, 99, 2, 2, 757, 758, 7, 118, 2, 2, 758, 759, 7, 103, 2, 2, 759, 110, 3, 2, 2, 2, 760, 761, 7, 114, 2, 2, 761, 762, 7, 116, 2, 2, 762, 763, 7, 113, 2, 2, 763, 764, 7, 118, 2, 2, 764, 765, 7, 103, 2, 2, 765, 766, 7, 101, 2, 2, 766, 767, 7, 118, 2, 2, 767, 768, 7, 103, 2, 2, 768, 769, 7, 102, 2, 2, 769, 112, 3, 2, 2, 2, 770, 771, 7, 114, 2, 2, 771, 772, 7, 119, 2, 2, 772, 773, 7, 100, 2, 2, 773, 774, 7, 110, 2, 2, 774, 775, 7, 107, 2, 2, 775, 776, 7, 101, 2, 2, 776, 114, 3, 2, 2, 2, 777, 778, 7, 116, 2, 2, 778, 779, 7, 103, 2, 2, 779, 780, 7, 105, 2, 2, 780, 781, 7, 107, 2, 2, 781, 782, 7, 117, 2, 2, 782, 783, 7, 118, 2, 2, 783, 784, 7, 103, 2, 2, 784, 785, 7, 116, 2, 2, 785, 116, 3, 2, 2, 2, 786, 787, 7, 116, 2, 2, 787, 788, 7, 103, 2, 2, 788, 789, 7, 107, 2, 2, 789, 790, 7, 112, 2, 2, 790, 791, 7, 118, 2, 2, 791, 792, 7, 103, 2, 2, 792, 793, 7, 116, 2, 2, 793, 794, 7, 114, 2, 2, 794, 795, 7, 116, 2, 2, 795, 796, 7, 103, 2, 2, 796, 797, 7, 118, 2, 2, 797, 798, 7, 97, 2, 2, 798, 799, 7, 101, 2, 2, 799, 800, 7, 99, 2, 2, 800, 801, 7, 117, 2, 2, 801, 802, 7, 118, 2, 2, 802, 118, 3, 2, 2, 2, 803, 804, 7, 116, 2, 2, 804, 805, 7, 103, 2, 2, 805, 806, 7, 118, 2, 2, 806, 807, 7, 119, 2, 2, 807, 808, 7, 116, 2, 2, 808, 809, 7, 112, 2, 2, 809, 120, 3, 2, 2, 2, 810, 811, 7, 117, 2, 2, 811, 812, 7, 106, 2, 2, 812, 813, 7, 113, 2, 2, 813, 814, 7, 116, 2, 2, 814, 815, 7, 118, 2, 2, 815, 122, 3, 2, 2, 2, 816, 817, 7, 117, 2, 2, 817, 818, 7, 107, 2, 2, 818, 819, 7, 105, 2, 2, 819, 820, 7, 112, 2, 2, 820, 821, 7, 103, 2, 2, 821, 822, 7, 102, 2, 2, 822, 124, 3, 2, 2, 2, 823, 824, 7, 117, 2, 2, 824, 825, 7, 107, 2, 2, 825, 826, 7, 124, 2, 2, 826, 827, 7, 103, 2, 2, 827, 828, 7, 113, 2, 2, 828, 829, 7, 104, 2, 2, 829, 126, 3, 2, 2, 2, 830, 831, 7, 117, 2, 2, 831, 832, 7, 118, 2, 2, 832, 833, 7, 99, 2, 2, 833, 834, 7, 118, 2, 2, 834, 835, 7, 107, 2, 2, 835, 836, 7, 101, 2, 2, 836, 128, 3, 2, 2, 2, 837, 838, 7, 117, 2, 2, 838, 839, 7, 118, 2, 2, 839, 840, 7, 99, 2, 2, 840, 841, 7, 118, 2, 2, 841, 842, 7, 107, 2, 2, 842, 843, 7, 101, 2, 2, 843, 844, 7, 97, 2, 2, 844, 845, 7, 99, 2, 2, 845, 846, 7, 117, 2, 2, 846, 847, 7, 117, 2, 2, 847, 848, 7, 103, 2, 2, 848, 849, 7, 116, 2, 2, 849, 850, 7, 118, 2, 2, 850, 130, 3, 2, 2, 2, 851, 852, 7, 117, 2, 2, 852, 853, 7, 118, 2, 2, 853, 854, 7, 99, 2, 2, 854, 855, 7, 118, 2, 2, 855, 856, 7, 107, 2, 2, 856, 857, 7, 101, 2, 2, 857, 858, 7, 97, 2, 2, 858, 859, 7, 101, 2, 2, 859, 860, 7, 99, 2, 2, 860, 861, 7, 117, 2, 2, 861, 862, 7, 118, 2, 2, 862, 132, 3, 2, 2, 2, 863, 864, 7, 117, 2, 2, 864, 865, 7, 118, 2, 2, 865, 866, 7, 116, 2, 2, 866, 867, 7, 119, 2, 2, 867, 868, 7, 101, 2, 2, 868, 869, 7, 118, 2, 2, 869, 134, 3, 2, 2, 2, 870, 871, 7, 117, 2, 2, 871, 872, 7, 121, 2, 2, 872, 873, 7, 107, 2, 2, 873, 874, 7, 118, 2, 2, 874, 875, 7, 101, 2, 2, 875, 876, 7, 106, 2, 2, 876, 136, 3, 2, 2, 2, 877, 878, 7, 118, 2, 2, 878, 879, 7, 103, 2, 2, 879, 880, 7, 111, 2, 2, 880, 881, 7, 114, 2, 2, 881, 882, 7, 110, 2, 2, 882, 883, 7, 99, 2, 2, 883, 884, 7, 118, 2, 2, 884, 885, 7, 103, 2, 2, 885, 138, 3, 2, 2, 2, 886, 887, 7, 118, 2, 2, 887, 888, 7, 106, 2, 2, 888, 889, 7, 107, 2, 2, 889, 890, 7, 117, 2, 2, 890, 140, 3, 2, 2, 2, 891, 892, 7, 118, 2, 2, 892, 893, 7, 106, 2, 2, 893, 894, 7, 116, 2, 2, 894, 895, 7, 103, 2, 2, 895, 896, 7, 99, 2, 2, 896, 897, 7, 102, 2, 2, 897, 898, 7, 97, 2, 2, 898, 899, 7, 110, 2, 2, 899, 900, 7, 113, 2, 2, 900, 901, 7, 101, 2, 2, 901, 902, 7, 99, 2, 2, 902, 903, 7, 110, 2, 2, 903, 142, 3, 2, 2, 2, 904, 905, 7, 118, 2, 2, 905, 906, 7, 106, 2, 2, 906, 907, 7, 116, 2, 2, 907, 908, 7, 113, 2, 2, 908, 909, 7, 121, 2, 2, 909, 144, 3, 2, 2, 2, 910, 911, 7, 118, 2, 2, 911, 912, 7, 116, 2, 2, 912, 913, 7, 119, 2, 2, 913, 914, 7, 103, 2, 2, 914, 146, 3, 2, 2, 2, 915, 916, 7, 118, 2, 2, 916, 917, 7, 116, 2, 2, 917, 918, 7, 123, 2, 2, 918, 148, 3, 2, 2, 2, 919, 920, 7, 118, 2, 2, 920, 921, 7, 123, 2, 2, 921, 922, 7, 114, 2, 2, 922, 923, 7, 103, 2, 2, 923, 924, 7, 102, 2, 2, 924, 925, 7, 103, 2, 2, 925, 926, 7, 104, 2, 2, 926, 150, 3, 2, 2, 2, 927, 928, 7, 118, 2, 2, 928, 929, 7, 123, 2, 2, 929, 930, 7, 114, 2, 2, 930, 931, 7, 103, 2, 2, 931, 932, 7, 107, 2, 2, 932, 933, 7, 102, 2, 2, 933, 152, 3, 2, 2, 2, 934, 935, 7, 118, 2, 2, 935, 936, 7, 123, 2, 2, 936, 937, 7, 114, 2, 2, 937, 938, 7, 103, 2, 2, 938, 939, 7, 112, 2, 2, 939, 940, 7, 99, 2, 2, 940, 941, 7, 111, 2, 2, 941, 942, 7, 103, 2, 2, 942, 154, 3, 2, 2, 2, 943, 944, 7, 119, 2, 2, 944, 945, 7, 112, 2, 2, 945, 946, 7, 107, 2, 2, 946, 947, 7, 113, 2, 2, 947, 948, 7, 112, 2, 2, 948, 156, 3, 2, 2, 2, 949, 950, 7, 119, 2, 2, 950, 951, 7, 112, 2, 2, 951, 952, 7, 117, 2, 2, 952, 953, 7, 107, 2, 2, 953, 954, 7, 105, 2, 2, 954, 955, 7, 112, 2, 2, 955, 956, 7, 103, 2, 2, 956, 957, 7, 102, 2, 2, 957, 158, 3, 2, 2, 2, 958, 959, 7, 119, 2, 2, 959, 960, 7, 117, 2, 2, 960, 961, 7, 107, 2, 2, 961, 962, 7, 112, 2, 2, 962, 963, 7, 105, 2, 2, 963, 160, 3, 2, 2, 2, 964, 965, 7, 120, 2, 2, 965, 966, 7, 107, 2, 2, 966, 967, 7, 116, 2, 2, 967, 968, 7, 118, 2, 2, 968, 969, 7, 119, 2, 2, 969, 970, 7, 99, 2, 2, 970, 971, 7, 110, 2, 2, 971, 162, 3, 2, 2, 2, 972, 973, 7, 120, 2, 2, 973, 974, 7, 113, 2, 2, 974, 975, 7, 107, 2, 2, 975, 976, 7, 102, 2, 2, 976, 164, 3, 2, 2, 2, 977, 978, 7, 120, 2, 2, 978, 979, 7, 113, 2, 2, 979, 980, 7, 110, 2, 2, 980, 981, 7, 99, 2, 2, 981, 982, 7, 118, 2, 2, 982, 983, 7, 107, 2, 2, 983, 984, 7, 110, 2, 2, 984, 985, 7, 103, 2, 2, 985, 166, 3, 2, 2, 2, 986, 987, 7, 121, 2, 2, 987, 988, 7, 101, 2, 2, 988, 989, 7, 106, 2, 2, 989, 990, 7, 99, 2, 2, 990, 991, 7, 116, 2, 2, 991, 992, 7, 97, 2, 2, 992, 993, 7, 118, 2, 2, 993, 168, 3, 2, 2, 2, 994, 995, 7, 121, 2, 2, 995, 996, 7, 106, 2, 2, 996, 997, 7, 107, 2, 2, 997, 998, 7, 110, 2, 2, 998, 999, 7, 103, 2, 2, 999, 170, 3, 2, 2, 2, 1000, 1001, 7, 42, 2, 2, 1001, 172, 3, 2, 2, 2, 1002, 1003, 7, 43, 2, 2, 1003, 174, 3, 2, 2, 2, 1004, 1005, 7, 93, 2, 2, 1005, 176, 3, 2, 2, 2, 1006, 1007, 7, 95, 2, 2, 1007, 178, 3, 2, 2, 2, 1008, 1009, 7, 125, 2, 2, 1009, 180, 3, 2, 2, 2, 1010, 1011, 7, 127, 2, 2, 1011, 182, 3, 2, 2, 2, 1012, 1013, 7, 45, 2, 2, 1013, 184, 3, 2, 2, 2, 1014, 1015, 7, 47, 2, 2, 1015, 186, 3, 2, 2, 2, 1016, 1017, 7, 44, 2, 2, 1017, 188, 3, 2, 2, 2, 1018, 1019, 7, 49, 2, 2, 1019, 190, 3, 2, 2, 2, 1020, 1021, 7, 39, 2, 2, 1021, 192, 3, 2, 2, 2, 1022, 1023, 7, 96, 2, 2, 1023, 194, 3, 2, 2, 2, 1024, 1025, 7, 40, 2, 2, 1025, 196, 3, 2, 2, 2, 1026, 1027, 7, 126, 2, 2, 1027, 198, 3, 2, 2, 2, 1028, 1029, 7, 128, 2, 2, 1029, 200, 3, 2, 2, 2, 1030, 1035, 7, 35, 2, 2, 1031, 1032, 7, 112, 2, 2, 1032, 1033, 7, 113, 2, 2, 1033, 1035, 7, 118, 2, 2, 1034, 1030, 3, 2, 2, 2, 1034, 1031, 3, 2, 2, 2, 1035, 202, 3, 2, 2, 2, 1036, 1037, 7, 63, 2, 2, 1037, 204, 3, 2, 2, 2, 1038, 1039, 7, 62, 2, 2, 1039, 206, 3, 2, 2, 2, 1040, 1041, 7, 64, 2, 2, 1041, 208, 3, 2, 2, 2, 1042, 1043, 7, 45, 2, 2, 1043, 1044, 7, 63, 2, 2, 1044, 210, 3, 2, 2, 2, 1045, 1046, 7, 47, 2, 2, 1046, 1047, 7, 63, 2, 2, 1047, 212, 3, 2, 2, 2, 1048, 1049, 7, 44, 2, 2, 1049, 1050, 7, 63, 2, 2, 1050, 214, 3, 2, 2, 2, 1051, 1052, 7, 49, 2, 2, 1052, 1053, 7, 63, 2, 2, 1053, 216, 3, 2, 2, 2, 1054, 1055, 7, 39, 2, 2, 1055, 1056, 7, 63, 2, 2, 1056, 218, 3, 2, 2, 2, 1057, 1058, 7, 96, 2, 2, 1058, 1059, 7, 63, 2, 2, 1059, 220, 3, 2, 2, 2, 1060, 1061, 7, 40, 2, 2, 1061, 1062, 7, 63, 2, 2, 1062, 222, 3, 2, 2, 2, 1063, 1064, 7, 126, 2, 2, 1064, 1065, 7, 63, 2, 2, 1065, 224, 3, 2, 2, 2, 1066, 1067, 7, 62, 2, 2, 1067, 1068, 7, 62, 2, 2, 1068, 1069, 7, 63, 2, 2, 1069, 226, 3, 2, 2, 2, 1070, 1071, 7, 64, 2, 2, 1071, 1072, 7, 64, 2, 2, 1072, 1073, 7, 63, 2, 2, 1073, 228, 3, 2, 2, 2, 1074, 1075, 7, 63, 2, 2, 1075, 1076, 7, 63, 2, 2, 1076, 230, 3, 2, 2, 2, 1077, 1078, 7, 35, 2, 2, 1078, 1079, 7, 63, 2, 2, 1079, 232, 3, 2, 2, 2, 1080, 1081, 7, 62, 2, 2, 1081, 1082, 7, 63, 2, 2, 1082, 234, 3, 2, 2, 2, 1083, 1084, 7, 64, 2, 2, 1084, 1085, 7, 63, 2, 2, 1085, 236, 3, 2, 2, 2, 1086, 1087, 7, 40, 2, 2, 1087, 1092, 7, 40, 2, 2, 1088, 1089, 7, 99, 2, 2, 1089, 1090, 7, 112, 2, 2, 1090, 1092, 7, 102, 2, 2, 1091, 1086, 3, 2, 2, 2, 1091, 1088, 3, 2, 2, 2, 1092, 238, 3, 2, 2, 2, 1093, 1094, 7, 126, 2, 2, 1094, 1098, 7, 126, 2, 2, 1095, 1096, 7, 113, 2, 2, 1096, 1098, 7, 116, 2, 2, 1097, 1093, 3, 2, 2, 2, 1097, 1095, 3, 2, 2, 2, 1098, 240, 3, 2, 2, 2, 1099, 1100, 7, 45, 2, 2, 1100, 1101, 7, 45, 2, 2, 1101, 242, 3, 2, 2, 2, 1102, 1103, 7, 47, 2, 2, 1103, 1104, 7, 47, 2, 2, 1104, 244, 3, 2, 2, 2, 1105, 1106, 7, 46, 2, 2, 1106, 246, 3, 2, 2, 2, 1107, 1108, 7, 47, 2, 2, 1108, 1109, 7, 64, 2, 2, 1109, 1110, 7, 44, 2, 2, 1110, 248, 3, 2, 2, 2, 1111, 1112, 7, 47, 2, 2, 1112, 1113, 7, 64, 2, 2, 1113, 250, 3, 2, 2, 2, 1114, 1115, 7, 65, 2, 2, 1115, 252, 3, 2, 2, 2, 1116, 1117, 7, 60, 2, 2, 1117, 254, 3, 2, 2, 2, 1118, 1119, 7, 60, 2, 2, 1119, 1120, 7, 60, 2, 2, 1120, 256, 3, 2, 2, 2, 1121, 1122, 7, 61, 2, 2, 1122, 258, 3, 2, 2, 2, 1123, 1124, 7, 48, 2, 2, 1124, 260, 3, 2, 2, 2, 1125, 1126, 7, 48, 2, 2, 1126, 1127, 7, 44, 2, 2, 1127, 262, 3, 2, 2, 2, 1128, 1129, 7, 48, 2, 2, 1129, 1130, 7, 48, 2, 2, 1130, 1131, 7, 48, 2, 2, 1131, 264, 3, 2, 2, 2, 1132, 1133, 5, 289, 145, 2, 1133, 1134, 5, 289, 145, 2, 1134, 1135, 5, 289, 145, 2, 1135, 1136, 5, 289, 145, 2, 1136, 266, 3, 2, 2, 2, 1137, 1138, 7, 94, 2, 2, 1138, 1139, 7, 119, 2, 2, 1139, 1140, 3, 2, 2, 2, 1140, 1148, 5, 265, 133, 2, 1141, 1142, 7, 94, 2, 2, 1142, 1143, 7, 87, 2, 2, 1143, 1144, 3, 2, 2, 2, 1144, 1145, 5, 265, 133, 2, 1145, 1146, 5, 265, 133, 2, 1146, 1148, 3, 2, 2, 2, 1147, 1137, 3, 2, 2, 2, 1147, 1141, 3, 2, 2, 2, 1148, 268, 3, 2, 2, 2, 1149, 1154, 5, 271, 136, 2, 1150, 1153, 5, 271, 136, 2, 1151, 1153, 5, 275, 138, 2, 1152, 1150, 3, 2, 2, 2, 1152, 1151, 3, 2, 2, 2, 1153, 1156, 3, 2, 2, 2, 1154, 1152, 3, 2, 2, 2, 1154, 1155, 3, 2, 2, 2, 1155, 270, 3, 2, 2, 2, 1156, 1154, 3, 2, 2, 2, 1157, 1160, 5, 273, 137, 2, 1158, 1160, 5, 267, 134, 2, 1159, 1157, 3, 2, 2, 2, 1159, 1158, 3, 2, 2, 2, 1160, 272, 3, 2, 2, 2, 1161, 1162, 9, 4, 2, 2, 1162, 274, 3, 2, 2, 2, 1163, 1164, 9, 5, 2, 2, 1164, 276, 3, 2, 2, 2, 1165, 1172, 5, 285, 143, 2, 1166, 1168, 7, 41, 2, 2, 1167, 1166, 3, 2, 2, 2, 1167, 1168, 3, 2, 2, 2, 1168, 1169, 3, 2, 2, 2, 1169, 1171, 5, 275, 138, 2, 1170, 1167, 3, 2, 2, 2, 1171, 1174, 3, 2, 2, 2, 1172, 1170, 3, 2, 2, 2, 1172, 1173, 3, 2, 2, 2, 1173, 278, 3, 2, 2, 2, 1174, 1172, 3, 2, 2, 2, 1175, 1182, 7, 50, 2, 2, 1176, 1178, 7, 41, 2, 2, 1177, 1176, 3, 2, 2, 2, 1177, 1178, 3, 2, 2, 2, 1178, 1179, 3, 2, 2, 2, 1179, 1181, 5, 287, 144, 2, 1180, 1177, 3, 2, 2, 2, 1181, 1184, 3, 2, 2, 2, 1182, 1180, 3, 2, 2, 2, 1182, 1183, 3, 2, 2, 2, 1183, 280, 3, 2, 2, 2, 1184, 1182, 3, 2, 2, 2, 1185, 1186, 7, 50, 2, 2, 1186, 1190, 7, 122, 2, 2, 1187, 1188, 7, 50, 2, 2, 1188, 1190, 7, 90, 2, 2, 1189, 1185, 3, 2, 2, 2, 1189, 1187, 3, 2, 2, 2, 1190, 1191, 3, 2, 2, 2, 1191, 1198, 5, 289, 145, 2, 1192, 1194, 7, 41, 2, 2, 1193, 1192, 3, 2, 2, 2, 1193, 1194, 3, 2, 2, 2, 1194, 1195, 3, 2, 2, 2, 1195, 1197, 5, 289, 145, 2, 1196, 1193, 3, 2, 2, 2, 1197, 1200, 3, 2, 2, 2, 1198, 1196, 3, 2, 2, 2, 1198, 1199, 3, 2, 2, 2, 1199, 282, 3, 2, 2, 2, 1200, 1198, 3, 2, 2, 2, 1201, 1202, 7, 50, 2, 2, 1202, 1206, 7, 100, 2, 2, 1203, 1204, 7, 50, 2, 2, 1204, 1206, 7, 68, 2, 2, 1205, 1201, 3, 2, 2, 2, 1205, 1203, 3, 2, 2, 2, 1206, 1207, 3, 2, 2, 2, 1207, 1214, 5, 291, 146, 2, 1208, 1210, 7, 41, 2, 2, 1209, 1208, 3, 2, 2, 2, 1209, 1210, 3, 2, 2, 2, 1210, 1211, 3, 2, 2, 2, 1211, 1213, 5, 291, 146, 2, 1212, 1209, 3, 2, 2, 2, 1213, 1216, 3, 2, 2, 2, 1214, 1212, 3, 2, 2, 2, 1214, 1215, 3, 2, 2, 2, 1215, 284, 3, 2, 2, 2, 1216, 1214, 3, 2, 2, 2, 1217, 1218, 9, 6, 2, 2, 1218, 286, 3, 2, 2, 2, 1219, 1220, 9, 7, 2, 2, 1220, 288, 3, 2, 2, 2, 1221, 1222, 9, 8, 2, 2, 1222, 290, 3, 2, 2, 2, 1223, 1224, 9, 9, 2, 2, 1224, 292, 3, 2, 2, 2, 1225, 1227, 5, 295, 148, 2, 1226, 1228, 5, 297, 149, 2, 1227, 1226, 3, 2, 2, 2, 1227, 1228, 3, 2, 2, 2, 1228, 1242, 3, 2, 2, 2, 1229, 1231, 5, 295, 148, 2, 1230, 1232, 5, 299, 150, 2, 1231, 1230, 3, 2, 2, 2, 1231, 1232, 3, 2, 2, 2, 1232, 1242, 3, 2, 2, 2, 1233, 1235, 5, 297, 149, 2, 1234, 1236, 5, 295, 148, 2, 1235, 1234, 3, 2, 2, 2, 1235, 1236, 3, 2, 2, 2, 1236, 1242, 3, 2, 2, 2, 1237, 1239, 5, 299, 150, 2, 1238, 1240, 5, 295, 148, 2, 1239, 1238, 3, 2, 2, 2, 1239, 1240, 3, 2, 2, 2, 1240, 1242, 3, 2, 2, 2, 1241, 1225, 3, 2, 2, 2, 1241, 1229, 3, 2, 2, 2, 1241, 1233, 3, 2, 2, 2, 1241, 1237, 3, 2, 2, 2, 1242, 294, 3, 2, 2, 2, 1243, 1244, 9, 10, 2, 2, 1244, 296, 3, 2, 2, 2, 1245, 1246, 9, 11, 2, 2, 1246, 298, 3, 2, 2, 2, 1247, 1248, 7, 110, 2, 2, 1248, 1252, 7, 110, 2, 2, 1249, 1250, 7, 78, 2, 2, 1250, 1252, 7, 78, 2, 2, 1251, 1247, 3, 2, 2, 2, 1251, 1249, 3, 2, 2, 2, 1252, 300, 3, 2, 2, 2, 1253, 1257, 10, 12, 2, 2, 1254, 1257, 5, 303, 152, 2, 1255, 1257, 5, 267, 134, 2, 1256, 1253, 3, 2, 2, 2, 1256, 1254, 3, 2, 2, 2, 1256, 1255, 3, 2, 2, 2, 1257, 302, 3, 2, 2, 2, 1258, 1262, 5, 305, 153, 2, 1259, 1262, 5, 307, 154, 2, 1260, 1262, 5, 309, 155, 2, 1261, 1258, 3, 2, 2, 2, 1261, 1259, 3, 2, 2, 2, 1261, 1260, 3, 2, 2, 2, 1262, 304, 3, 2, 2, 2, 1263, 1264, 7, 94, 2, 2, 1264, 1294, 7, 41, 2, 2, 1265, 1266, 7, 94, 2, 2, 1266, 1294, 7, 36, 2, 2, 1267, 1268, 7, 94, 2, 2, 1268, 1294, 7, 65, 2, 2, 1269, 1270, 7, 94, 2, 2, 1270, 1294, 7, 94, 2, 2, 1271, 1272, 7, 94, 2, 2, 1272, 1294, 7, 99, 2, 2, 1273, 1274, 7, 94, 2, 2, 1274, 1294, 7, 100, 2, 2, 1275, 1276, 7, 94, 2, 2, 1276, 1294, 7, 104, 2, 2, 1277, 1278, 7, 94, 2, 2, 1278, 1294, 7, 112, 2, 2, 1279, 1280, 7, 94, 2, 2, 1280, 1294, 7, 116, 2, 2, 1281, 1287, 7, 94, 2, 2, 1282, 1284, 7, 15, 2, 2, 1283, 1285, 7, 12, 2, 2, 1284, 1283, 3, 2, 2, 2, 1284, 1285, 3, 2, 2, 2, 1285, 1288, 3, 2, 2, 2, 1286, 1288, 7, 12, 2, 2, 1287, 1282, 3, 2, 2, 2, 1287, 1286, 3, 2, 2, 2, 1288, 1294, 3, 2, 2, 2, 1289, 1290, 7, 94, 2, 2, 1290, 1294, 7, 118, 2, 2, 1291, 1292, 7, 94, 2, 2, 1292, 1294, 7, 120, 2, 2, 1293, 1263, 3, 2, 2, 2, 1293, 1265, 3, 2, 2, 2, 1293, 1267, 3, 2, 2, 2, 1293, 1269, 3, 2, 2, 2, 1293, 1271, 3, 2, 2, 2, 1293, 1273, 3, 2, 2, 2, 1293, 1275, 3, 2, 2, 2, 1293, 1277, 3, 2, 2, 2, 1293, 1279, 3, 2, 2, 2, 1293, 1281, 3, 2, 2, 2, 1293, 1289, 3, 2, 2, 2, 1293, 1291, 3, 2, 2, 2, 1294, 306, 3, 2, 2, 2, 1295, 1296, 7, 94, 2, 2, 1296, 1307, 5, 287, 144, 2, 1297, 1298, 7, 94, 2, 2, 1298, 1299, 5, 287, 144, 2, 1299, 1300, 5, 287, 144, 2, 1300, 1307, 3, 2, 2, 2, 1301, 1302, 7, 94, 2, 2, 1302, 1303, 5, 287, 144, 2, 1303, 1304, 5, 287, 144, 2, 1304, 1305, 5, 287, 144, 2, 1305, 1307, 3, 2, 2, 2, 1306, 1295, 3, 2, 2, 2, 1306, 1297, 3, 2, 2, 2, 1306, 1301, 3, 2, 2, 2, 1307, 308, 3, 2, 2, 2, 1308, 1309, 7, 94, 2, 2, 1309, 1310, 7, 122, 2, 2, 1310, 1312, 3, 2, 2, 2, 1311, 1313, 5, 289, 145, 2, 1312, 1311, 3, 2, 2, 2, 1313, 1314, 3, 2, 2, 2, 1314, 1312, 3, 2, 2, 2, 1314, 1315, 3, 2, 2, 2, 1315, 310, 3, 2, 2, 2, 1316, 1318, 5, 317, 159, 2, 1317, 1316, 3, 2, 2, 2, 1317, 1318, 3, 2, 2, 2, 1318, 1319, 3, 2, 2, 2, 1319, 1320, 7, 48, 2, 2, 1320, 1325, 5, 317, 159, 2, 1321, 1322, 5, 317, 159, 2, 1322, 1323, 7, 48, 2, 2, 1323, 1325, 3, 2, 2, 2, 1324, 1317, 3, 2, 2, 2, 1324, 1321, 3, 2, 2, 2, 1325, 312, 3, 2, 2, 2, 1326, 1328, 7, 103, 2, 2, 1327, 1329, 5, 315, 158, 2, 1328, 1327, 3, 2, 2, 2, 1328, 1329, 3, 2, 2, 2, 1329, 1330, 3, 2, 2, 2, 1330, 1337, 5, 317, 159, 2, 1331, 1333, 7, 71, 2, 2, 1332, 1334, 5, 315, 158, 2, 1333, 1332, 3, 2, 2, 2, 1333, 1334, 3, 2, 2, 2, 1334, 1335, 3, 2, 2, 2, 1335, 1337, 5, 317, 159, 2, 1336, 1326, 3, 2, 2, 2, 1336, 1331, 3, 2, 2, 2, 1337, 314, 3, 2, 2, 2, 1338, 1339, 9, 13, 2, 2, 1339, 316, 3, 2, 2, 2, 1340, 1347, 5, 275, 138, 2, 1341, 1343, 7, 41, 2, 2, 1342, 1341, 3, 2, 2, 2, 1342, 1343, 3, 2, 2, 2, 1343, 1344, 3, 2, 2, 2, 1344, 1346, 5, 275, 138, 2, 1345, 1342, 3, 2, 2, 2, 1346, 1349, 3, 2, 2, 2, 1347, 1345, 3, 2, 2, 2, 1347, 1348, 3, 2, 2, 2, 1348, 318, 3, 2, 2, 2, 1349, 1347, 3, 2, 2, 2, 1350, 1351, 9, 14, 2, 2, 1351, 320, 3, 2, 2, 2, 1352, 1353, 7, 119, 2, 2, 1353, 1356, 7, 58, 2, 2, 1354, 1356, 9, 2, 2, 2, 1355, 1352, 3, 2, 2, 2, 1355, 1354, 3, 2, 2, 2, 1356, 322, 3, 2, 2, 2, 1357, 1361, 10, 15, 2, 2, 1358, 1361, 5, 303, 152, 2, 1359, 1361, 5, 267, 134, 2, 1360, 1357, 3, 2, 2, 2, 1360, 1358, 3, 2, 2, 2, 1360, 1359, 3, 2, 2, 2, 1361, 324, 3, 2, 2, 2, 1362, 1366, 7, 36, 2, 2, 1363, 1365, 10, 16, 2, 2, 1364, 1363, 3, 2, 2, 2, 1365, 1368, 3, 2, 2, 2, 1366, 1364, 3, 2, 2, 2, 1366, 1367, 3, 2, 2, 2, 1367, 1369, 3, 2, 2, 2, 1368, 1366, 3, 2, 2, 2, 1369, 1373, 7, 42, 2, 2, 1370, 1372, 10, 17, 2, 2, 1371, 1370, 3, 2, 2, 2, 1372, 1375, 3, 2, 2, 2, 1373, 1371, 3, 2, 2, 2, 1373, 1374, 3, 2, 2, 2, 1374, 1376, 3, 2, 2, 2, 1375, 1373, 3, 2, 2, 2, 1376, 1380, 7, 43, 2, 2, 1377, 1379, 10, 18, 2, 2, 1378, 1377, 3, 2, 2, 2, 1379, 1382, 3, 2, 2, 2, 1380, 1378, 3, 2, 2, 2, 1380, 1381, 3, 2, 2, 2, 1381, 1383, 3, 2, 2, 2, 1382, 1380, 3, 2, 2, 2, 1383, 1384, 7, 36, 2, 2, 1384, 326, 3, 2, 2, 2, 1385, 1386, 5, 277, 139, 2, 1386, 1387, 5, 335, 168, 2, 1387, 1398, 3, 2, 2, 2, 1388, 1389, 5, 279, 140, 2, 1389, 1390, 5, 335, 168, 2, 1390, 1398, 3, 2, 2, 2, 1391, 1392, 5, 281, 141, 2, 1392, 1393, 5, 335, 168, 2, 1393, 1398, 3, 2, 2, 2, 1394, 1395, 5, 283, 142, 2, 1395, 1396, 5, 335, 168, 2, 1396, 1398, 3, 2, 2, 2, 1397, 1385, 3, 2, 2, 2, 1397, 1388, 3, 2, 2, 2, 1397, 1391, 3, 2, 2, 2, 1397, 1394, 3, 2, 2, 2, 1398, 328, 3, 2, 2, 2, 1399, 1401, 5, 311, 156, 2, 1400, 1402, 5, 313, 157, 2, 1401, 1400, 3, 2, 2, 2, 1401, 1402, 3, 2, 2, 2, 1402, 1403, 3, 2, 2, 2, 1403, 1404, 5, 335, 168, 2, 1404, 1410, 3, 2, 2, 2, 1405, 1406, 5, 317, 159, 2, 1406, 1407, 5, 313, 157, 2, 1407, 1408, 5, 335, 168, 2, 1408, 1410, 3, 2, 2, 2, 1409, 1399, 3, 2, 2, 2, 1409, 1405, 3, 2, 2, 2, 1410, 330, 3, 2, 2, 2, 1411, 1412, 5, 9, 5, 2, 1412, 1413, 5, 335, 168, 2, 1413, 332, 3, 2, 2, 2, 1414, 1415, 5, 5, 3, 2, 1415, 1416, 5, 335, 168, 2, 1416, 334, 3, 2, 2, 2, 1417, 1418, 5, 269, 135, 2, 1418, 336, 3, 2, 2, 2, 1419, 1421, 9, 19, 2, 2, 1420, 1419, 3, 2, 2, 2, 1421, 1422, 3, 2, 2, 2, 1422, 1420, 3, 2, 2, 2, 1422, 1423, 3, 2, 2, 2, 1423, 1424, 3, 2, 2, 2, 1424, 1425, 8, 169, 3, 2, 1425, 338, 3, 2, 2, 2, 1426, 1428, 7, 15, 2, 2, 1427, 1429, 7, 12, 2, 2, 1428, 1427, 3, 2, 2, 2, 1428, 1429, 3, 2, 2, 2, 1429, 1432, 3, 2, 2, 2, 1430, 1432, 7, 12, 2, 2, 1431, 1426, 3, 2, 2, 2, 1431, 1430, 3, 2, 2, 2, 1432, 1433, 3, 2, 2, 2, 1433, 1434, 8, 170, 3, 2, 1434, 340, 3, 2, 2, 2, 1435, 1436, 7, 49, 2, 2, 1436, 1437, 7, 44, 2, 2, 1437, 1441, 3, 2, 2, 2, 1438, 1440, 11, 2, 2, 2, 1439, 1438, 3, 2, 2, 2, 1440, 1443, 3, 2, 2, 2, 1441, 1442, 3, 2, 2, 2, 1441, 1439, 3, 2, 2, 2, 1442, 1444, 3, 2, 2, 2, 1443, 1441, 3, 2, 2, 2, 1444, 1445, 7, 44, 2, 2, 1445, 1446, 7, 49, 2, 2, 1446, 1447, 3, 2, 2, 2, 1447, 1448, 8, 171, 3, 2, 1448, 342, 3, 2, 2, 2, 1449, 1450, 7, 49, 2, 2, 1450, 1451, 7, 49, 2, 2, 1451, 1455, 3, 2, 2, 2, 1452, 1454, 10, 20, 2, 2, 1453, 1452, 3, 2, 2, 2, 1454, 1457, 3, 2, 2, 2, 1455, 1453, 3, 2, 2, 2, 1455, 1456, 3, 2, 2, 2, 1456, 1458, 3, 2, 2, 2, 1457, 1455, 3, 2, 2, 2, 1458, 1459, 8, 172, 3, 2, 1459, 344, 3, 2, 2, 2, 75, 2, 347, 351, 355, 359, 361, 364, 370, 376, 379, 384, 386, 389, 395, 400, 404, 408, 416, 422, 427, 432, 437, 445, 1034, 1091, 1097, 1147, 1152, 1154, 1159, 1167, 1172, 1177, 1182, 1189, 1193, 1198, 1205, 1209, 1214, 1227, 1231, 1235, 1239, 1241, 1251, 1256, 1261, 1284, 1287, 1293, 1306, 1314, 1317, 1324, 1328, 1333, 1336, 1342, 1347, 1355, 1360, 1366, 1373, 1380, 1397, 1401, 1409, 1422, 1428, 1431, 1441, 1455, 4, 2, 3, 2, 8, 2, 2] \ No newline at end of file diff --git a/lexers/src/main/java/com/itsaky/androidide/lexers/cpp/CPP14Lexer.java b/lexers/src/main/java/com/itsaky/androidide/lexers/cpp/CPP14Lexer.java new file mode 100644 index 000000000..c96780836 --- /dev/null +++ b/lexers/src/main/java/com/itsaky/androidide/lexers/cpp/CPP14Lexer.java @@ -0,0 +1,757 @@ +// Generated from /home/syu/workspace/MSCCD_ALL/Project/grammarDefinations/CPP14/CPP14Lexer.g4 by ANTLR 4.8 +package com.itsaky.androidide.lexers.cpp; +import org.antlr.v4.runtime.Lexer; +import org.antlr.v4.runtime.CharStream; +import org.antlr.v4.runtime.Token; +import org.antlr.v4.runtime.TokenStream; +import org.antlr.v4.runtime.*; +import org.antlr.v4.runtime.atn.*; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.misc.*; + +@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"}) +public class CPP14Lexer extends Lexer { + static { RuntimeMetaData.checkVersion("4.8", RuntimeMetaData.VERSION); } + + protected static final DFA[] _decisionToDFA; + protected static final PredictionContextCache _sharedContextCache = + new PredictionContextCache(); + public static final int + IntegerLiteral=1, CharacterLiteral=2, FloatingLiteral=3, StringLiteral=4, + BooleanLiteral=5, PointerLiteral=6, UserDefinedLiteral=7, MultiLineMacro=8, + Directive=9, Alignas=10, Alignof=11, Asm=12, Auto=13, Bool=14, Break=15, + Case=16, Catch=17, Char=18, Char16=19, Char32=20, Class=21, Const=22, + Constexpr=23, Const_cast=24, Continue=25, Decltype=26, Default=27, Delete=28, + Do=29, Double=30, Dynamic_cast=31, Else=32, Enum=33, Explicit=34, Export=35, + Extern=36, False_=37, Final=38, Float=39, For=40, Friend=41, Goto=42, + If=43, Inline=44, Int=45, Long=46, Mutable=47, Namespace=48, New=49, Noexcept=50, + Nullptr=51, Operator=52, Override=53, Private=54, Protected=55, Public=56, + Register=57, Reinterpret_cast=58, Return=59, Short=60, Signed=61, Sizeof=62, + Static=63, Static_assert=64, Static_cast=65, Struct=66, Switch=67, Template=68, + This=69, Thread_local=70, Throw=71, True_=72, Try=73, Typedef=74, Typeid_=75, + Typename_=76, Union=77, Unsigned=78, Using=79, Virtual=80, Void=81, Volatile=82, + Wchar=83, While=84, LeftParen=85, RightParen=86, LeftBracket=87, RightBracket=88, + LeftBrace=89, RightBrace=90, Plus=91, Minus=92, Star=93, Div=94, Mod=95, + Caret=96, And=97, Or=98, Tilde=99, Not=100, Assign=101, Less=102, Greater=103, + PlusAssign=104, MinusAssign=105, StarAssign=106, DivAssign=107, ModAssign=108, + XorAssign=109, AndAssign=110, OrAssign=111, LeftShiftAssign=112, RightShiftAssign=113, + Equal=114, NotEqual=115, LessEqual=116, GreaterEqual=117, AndAnd=118, + OrOr=119, PlusPlus=120, MinusMinus=121, Comma=122, ArrowStar=123, Arrow=124, + Question=125, Colon=126, Doublecolon=127, Semi=128, Dot=129, DotStar=130, + Ellipsis=131, Identifier=132, DecimalLiteral=133, OctalLiteral=134, HexadecimalLiteral=135, + BinaryLiteral=136, Integersuffix=137, UserDefinedIntegerLiteral=138, UserDefinedFloatingLiteral=139, + UserDefinedStringLiteral=140, UserDefinedCharacterLiteral=141, Whitespace=142, + Newline=143, BlockComment=144, LineComment=145; + public static String[] channelNames = { + "DEFAULT_TOKEN_CHANNEL", "HIDDEN" + }; + + public static String[] modeNames = { + "DEFAULT_MODE" + }; + + private static String[] makeRuleNames() { + return new String[] { + "IntegerLiteral", "CharacterLiteral", "FloatingLiteral", "StringLiteral", + "BooleanLiteral", "PointerLiteral", "UserDefinedLiteral", "MultiLineMacro", + "Directive", "Alignas", "Alignof", "Asm", "Auto", "Bool", "Break", "Case", + "Catch", "Char", "Char16", "Char32", "Class", "Const", "Constexpr", "Const_cast", + "Continue", "Decltype", "Default", "Delete", "Do", "Double", "Dynamic_cast", + "Else", "Enum", "Explicit", "Export", "Extern", "False_", "Final", "Float", + "For", "Friend", "Goto", "If", "Inline", "Int", "Long", "Mutable", "Namespace", + "New", "Noexcept", "Nullptr", "Operator", "Override", "Private", "Protected", + "Public", "Register", "Reinterpret_cast", "Return", "Short", "Signed", + "Sizeof", "Static", "Static_assert", "Static_cast", "Struct", "Switch", + "Template", "This", "Thread_local", "Throw", "True_", "Try", "Typedef", + "Typeid_", "Typename_", "Union", "Unsigned", "Using", "Virtual", "Void", + "Volatile", "Wchar", "While", "LeftParen", "RightParen", "LeftBracket", + "RightBracket", "LeftBrace", "RightBrace", "Plus", "Minus", "Star", "Div", + "Mod", "Caret", "And", "Or", "Tilde", "Not", "Assign", "Less", "Greater", + "PlusAssign", "MinusAssign", "StarAssign", "DivAssign", "ModAssign", + "XorAssign", "AndAssign", "OrAssign", "LeftShiftAssign", "RightShiftAssign", + "Equal", "NotEqual", "LessEqual", "GreaterEqual", "AndAnd", "OrOr", "PlusPlus", + "MinusMinus", "Comma", "ArrowStar", "Arrow", "Question", "Colon", "Doublecolon", + "Semi", "Dot", "DotStar", "Ellipsis", "Hexquad", "Universalcharactername", + "Identifier", "Identifiernondigit", "NONDIGIT", "DIGIT", "DecimalLiteral", + "OctalLiteral", "HexadecimalLiteral", "BinaryLiteral", "NONZERODIGIT", + "OCTALDIGIT", "HEXADECIMALDIGIT", "BINARYDIGIT", "Integersuffix", "Unsignedsuffix", + "Longsuffix", "Longlongsuffix", "Cchar", "Escapesequence", "Simpleescapesequence", + "Octalescapesequence", "Hexadecimalescapesequence", "Fractionalconstant", + "Exponentpart", "SIGN", "Digitsequence", "Floatingsuffix", "Encodingprefix", + "Schar", "Rawstring", "UserDefinedIntegerLiteral", "UserDefinedFloatingLiteral", + "UserDefinedStringLiteral", "UserDefinedCharacterLiteral", "Udsuffix", + "Whitespace", "Newline", "BlockComment", "LineComment" + }; + } + public static final String[] ruleNames = makeRuleNames(); + + private static String[] makeLiteralNames() { + return new String[] { + null, null, null, null, null, null, null, null, null, null, "'alignas'", + "'alignof'", "'asm'", "'auto'", "'bool'", "'break'", "'case'", "'catch'", + "'char'", "'char16_t'", "'char32_t'", "'class'", "'const'", "'constexpr'", + "'const_cast'", "'continue'", "'decltype'", "'default'", "'delete'", + "'do'", "'double'", "'dynamic_cast'", "'else'", "'enum'", "'explicit'", + "'export'", "'extern'", "'false'", "'final'", "'float'", "'for'", "'friend'", + "'goto'", "'if'", "'inline'", "'int'", "'long'", "'mutable'", "'namespace'", + "'new'", "'noexcept'", "'nullptr'", "'operator'", "'override'", "'private'", + "'protected'", "'public'", "'register'", "'reinterpret_cast'", "'return'", + "'short'", "'signed'", "'sizeof'", "'static'", "'static_assert'", "'static_cast'", + "'struct'", "'switch'", "'template'", "'this'", "'thread_local'", "'throw'", + "'true'", "'try'", "'typedef'", "'typeid'", "'typename'", "'union'", + "'unsigned'", "'using'", "'virtual'", "'void'", "'volatile'", "'wchar_t'", + "'while'", "'('", "')'", "'['", "']'", "'{'", "'}'", "'+'", "'-'", "'*'", + "'/'", "'%'", "'^'", "'&'", "'|'", "'~'", null, "'='", "'<'", "'>'", + "'+='", "'-='", "'*='", "'/='", "'%='", "'^='", "'&='", "'|='", "'<<='", + "'>>='", "'=='", "'!='", "'<='", "'>='", null, null, "'++'", "'--'", + "','", "'->*'", "'->'", "'?'", "':'", "'::'", "';'", "'.'", "'.*'", "'...'" + }; + } + private static final String[] _LITERAL_NAMES = makeLiteralNames(); + private static String[] makeSymbolicNames() { + return new String[] { + null, "IntegerLiteral", "CharacterLiteral", "FloatingLiteral", "StringLiteral", + "BooleanLiteral", "PointerLiteral", "UserDefinedLiteral", "MultiLineMacro", + "Directive", "Alignas", "Alignof", "Asm", "Auto", "Bool", "Break", "Case", + "Catch", "Char", "Char16", "Char32", "Class", "Const", "Constexpr", "Const_cast", + "Continue", "Decltype", "Default", "Delete", "Do", "Double", "Dynamic_cast", + "Else", "Enum", "Explicit", "Export", "Extern", "False_", "Final", "Float", + "For", "Friend", "Goto", "If", "Inline", "Int", "Long", "Mutable", "Namespace", + "New", "Noexcept", "Nullptr", "Operator", "Override", "Private", "Protected", + "Public", "Register", "Reinterpret_cast", "Return", "Short", "Signed", + "Sizeof", "Static", "Static_assert", "Static_cast", "Struct", "Switch", + "Template", "This", "Thread_local", "Throw", "True_", "Try", "Typedef", + "Typeid_", "Typename_", "Union", "Unsigned", "Using", "Virtual", "Void", + "Volatile", "Wchar", "While", "LeftParen", "RightParen", "LeftBracket", + "RightBracket", "LeftBrace", "RightBrace", "Plus", "Minus", "Star", "Div", + "Mod", "Caret", "And", "Or", "Tilde", "Not", "Assign", "Less", "Greater", + "PlusAssign", "MinusAssign", "StarAssign", "DivAssign", "ModAssign", + "XorAssign", "AndAssign", "OrAssign", "LeftShiftAssign", "RightShiftAssign", + "Equal", "NotEqual", "LessEqual", "GreaterEqual", "AndAnd", "OrOr", "PlusPlus", + "MinusMinus", "Comma", "ArrowStar", "Arrow", "Question", "Colon", "Doublecolon", + "Semi", "Dot", "DotStar", "Ellipsis", "Identifier", "DecimalLiteral", + "OctalLiteral", "HexadecimalLiteral", "BinaryLiteral", "Integersuffix", + "UserDefinedIntegerLiteral", "UserDefinedFloatingLiteral", "UserDefinedStringLiteral", + "UserDefinedCharacterLiteral", "Whitespace", "Newline", "BlockComment", + "LineComment" + }; + } + private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); + public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); + + /** + * @deprecated Use {@link #VOCABULARY} instead. + */ + @Deprecated + public static final String[] tokenNames; + static { + tokenNames = new String[_SYMBOLIC_NAMES.length]; + for (int i = 0; i < tokenNames.length; i++) { + tokenNames[i] = VOCABULARY.getLiteralName(i); + if (tokenNames[i] == null) { + tokenNames[i] = VOCABULARY.getSymbolicName(i); + } + + if (tokenNames[i] == null) { + tokenNames[i] = ""; + } + } + } + + @Override + @Deprecated + public String[] getTokenNames() { + return tokenNames; + } + + @Override + + public Vocabulary getVocabulary() { + return VOCABULARY; + } + + + public CPP14Lexer(CharStream input) { + super(input); + _interp = new LexerATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache); + } + + @Override + public String getGrammarFileName() { return "CPP14Lexer.g4"; } + + @Override + public String[] getRuleNames() { return ruleNames; } + + @Override + public String getSerializedATN() { return _serializedATN; } + + @Override + public String[] getChannelNames() { return channelNames; } + + @Override + public String[] getModeNames() { return modeNames; } + + @Override + public ATN getATN() { return _ATN; } + + public static final String _serializedATN = + "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\u0093\u05b4\b\1\4"+ + "\2\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n"+ + "\4\13\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22"+ + "\t\22\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31"+ + "\t\31\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36\4\37\t\37\4 \t"+ + " \4!\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t"+ + "+\4,\t,\4-\t-\4.\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64"+ + "\t\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:\4;\t;\4<\t<\4=\t"+ + "=\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\tC\4D\tD\4E\tE\4F\tF\4G\tG\4H\tH\4"+ + "I\tI\4J\tJ\4K\tK\4L\tL\4M\tM\4N\tN\4O\tO\4P\tP\4Q\tQ\4R\tR\4S\tS\4T\t"+ + "T\4U\tU\4V\tV\4W\tW\4X\tX\4Y\tY\4Z\tZ\4[\t[\4\\\t\\\4]\t]\4^\t^\4_\t_"+ + "\4`\t`\4a\ta\4b\tb\4c\tc\4d\td\4e\te\4f\tf\4g\tg\4h\th\4i\ti\4j\tj\4k"+ + "\tk\4l\tl\4m\tm\4n\tn\4o\to\4p\tp\4q\tq\4r\tr\4s\ts\4t\tt\4u\tu\4v\tv"+ + "\4w\tw\4x\tx\4y\ty\4z\tz\4{\t{\4|\t|\4}\t}\4~\t~\4\177\t\177\4\u0080\t"+ + "\u0080\4\u0081\t\u0081\4\u0082\t\u0082\4\u0083\t\u0083\4\u0084\t\u0084"+ + "\4\u0085\t\u0085\4\u0086\t\u0086\4\u0087\t\u0087\4\u0088\t\u0088\4\u0089"+ + "\t\u0089\4\u008a\t\u008a\4\u008b\t\u008b\4\u008c\t\u008c\4\u008d\t\u008d"+ + "\4\u008e\t\u008e\4\u008f\t\u008f\4\u0090\t\u0090\4\u0091\t\u0091\4\u0092"+ + "\t\u0092\4\u0093\t\u0093\4\u0094\t\u0094\4\u0095\t\u0095\4\u0096\t\u0096"+ + "\4\u0097\t\u0097\4\u0098\t\u0098\4\u0099\t\u0099\4\u009a\t\u009a\4\u009b"+ + "\t\u009b\4\u009c\t\u009c\4\u009d\t\u009d\4\u009e\t\u009e\4\u009f\t\u009f"+ + "\4\u00a0\t\u00a0\4\u00a1\t\u00a1\4\u00a2\t\u00a2\4\u00a3\t\u00a3\4\u00a4"+ + "\t\u00a4\4\u00a5\t\u00a5\4\u00a6\t\u00a6\4\u00a7\t\u00a7\4\u00a8\t\u00a8"+ + "\4\u00a9\t\u00a9\4\u00aa\t\u00aa\4\u00ab\t\u00ab\4\u00ac\t\u00ac\3\2\3"+ + "\2\5\2\u015c\n\2\3\2\3\2\5\2\u0160\n\2\3\2\3\2\5\2\u0164\n\2\3\2\3\2\5"+ + "\2\u0168\n\2\5\2\u016a\n\2\3\3\5\3\u016d\n\3\3\3\3\3\6\3\u0171\n\3\r\3"+ + "\16\3\u0172\3\3\3\3\3\4\3\4\5\4\u0179\n\4\3\4\5\4\u017c\n\4\3\4\3\4\3"+ + "\4\5\4\u0181\n\4\5\4\u0183\n\4\3\5\5\5\u0186\n\5\3\5\3\5\7\5\u018a\n\5"+ + "\f\5\16\5\u018d\13\5\3\5\3\5\5\5\u0191\n\5\3\5\3\5\5\5\u0195\n\5\3\6\3"+ + "\6\5\6\u0199\n\6\3\7\3\7\3\b\3\b\3\b\3\b\5\b\u01a1\n\b\3\t\3\t\7\t\u01a5"+ + "\n\t\f\t\16\t\u01a8\13\t\3\t\3\t\5\t\u01ac\n\t\3\t\6\t\u01af\n\t\r\t\16"+ + "\t\u01b0\3\t\6\t\u01b4\n\t\r\t\16\t\u01b5\3\t\3\t\3\n\3\n\7\n\u01bc\n"+ + "\n\f\n\16\n\u01bf\13\n\3\n\3\n\3\13\3\13\3\13\3\13\3\13\3\13\3\13\3\13"+ + "\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\f\3\r\3\r\3\r\3\r\3\16\3\16\3\16\3\16\3"+ + "\16\3\17\3\17\3\17\3\17\3\17\3\20\3\20\3\20\3\20\3\20\3\20\3\21\3\21\3"+ + "\21\3\21\3\21\3\22\3\22\3\22\3\22\3\22\3\22\3\23\3\23\3\23\3\23\3\23\3"+ + "\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\24\3\25\3\25\3\25\3\25\3\25\3"+ + "\25\3\25\3\25\3\25\3\26\3\26\3\26\3\26\3\26\3\26\3\27\3\27\3\27\3\27\3"+ + "\27\3\27\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\31\3\31\3"+ + "\31\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\32\3\32\3\32\3\32\3\32\3"+ + "\32\3\32\3\32\3\32\3\33\3\33\3\33\3\33\3\33\3\33\3\33\3\33\3\33\3\34\3"+ + "\34\3\34\3\34\3\34\3\34\3\34\3\34\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3"+ + "\36\3\36\3\36\3\37\3\37\3\37\3\37\3\37\3\37\3\37\3 \3 \3 \3 \3 \3 \3 "+ + "\3 \3 \3 \3 \3 \3 \3!\3!\3!\3!\3!\3\"\3\"\3\"\3\"\3\"\3#\3#\3#\3#\3#\3"+ + "#\3#\3#\3#\3$\3$\3$\3$\3$\3$\3$\3%\3%\3%\3%\3%\3%\3%\3&\3&\3&\3&\3&\3"+ + "&\3\'\3\'\3\'\3\'\3\'\3\'\3(\3(\3(\3(\3(\3(\3)\3)\3)\3)\3*\3*\3*\3*\3"+ + "*\3*\3*\3+\3+\3+\3+\3+\3,\3,\3,\3-\3-\3-\3-\3-\3-\3-\3.\3.\3.\3.\3/\3"+ + "/\3/\3/\3/\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\60\3\61\3\61\3\61\3\61"+ + "\3\61\3\61\3\61\3\61\3\61\3\61\3\62\3\62\3\62\3\62\3\63\3\63\3\63\3\63"+ + "\3\63\3\63\3\63\3\63\3\63\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\64\3\65"+ + "\3\65\3\65\3\65\3\65\3\65\3\65\3\65\3\65\3\66\3\66\3\66\3\66\3\66\3\66"+ + "\3\66\3\66\3\66\3\67\3\67\3\67\3\67\3\67\3\67\3\67\3\67\38\38\38\38\3"+ + "8\38\38\38\38\38\39\39\39\39\39\39\39\3:\3:\3:\3:\3:\3:\3:\3:\3:\3;\3"+ + ";\3;\3;\3;\3;\3;\3;\3;\3;\3;\3;\3;\3;\3;\3;\3;\3<\3<\3<\3<\3<\3<\3<\3"+ + "=\3=\3=\3=\3=\3=\3>\3>\3>\3>\3>\3>\3>\3?\3?\3?\3?\3?\3?\3?\3@\3@\3@\3"+ + "@\3@\3@\3@\3A\3A\3A\3A\3A\3A\3A\3A\3A\3A\3A\3A\3A\3A\3B\3B\3B\3B\3B\3"+ + "B\3B\3B\3B\3B\3B\3B\3C\3C\3C\3C\3C\3C\3C\3D\3D\3D\3D\3D\3D\3D\3E\3E\3"+ + "E\3E\3E\3E\3E\3E\3E\3F\3F\3F\3F\3F\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3G\3"+ + "G\3G\3H\3H\3H\3H\3H\3H\3I\3I\3I\3I\3I\3J\3J\3J\3J\3K\3K\3K\3K\3K\3K\3"+ + "K\3K\3L\3L\3L\3L\3L\3L\3L\3M\3M\3M\3M\3M\3M\3M\3M\3M\3N\3N\3N\3N\3N\3"+ + "N\3O\3O\3O\3O\3O\3O\3O\3O\3O\3P\3P\3P\3P\3P\3P\3Q\3Q\3Q\3Q\3Q\3Q\3Q\3"+ + "Q\3R\3R\3R\3R\3R\3S\3S\3S\3S\3S\3S\3S\3S\3S\3T\3T\3T\3T\3T\3T\3T\3T\3"+ + "U\3U\3U\3U\3U\3U\3V\3V\3W\3W\3X\3X\3Y\3Y\3Z\3Z\3[\3[\3\\\3\\\3]\3]\3^"+ + "\3^\3_\3_\3`\3`\3a\3a\3b\3b\3c\3c\3d\3d\3e\3e\3e\3e\5e\u040b\ne\3f\3f"+ + "\3g\3g\3h\3h\3i\3i\3i\3j\3j\3j\3k\3k\3k\3l\3l\3l\3m\3m\3m\3n\3n\3n\3o"+ + "\3o\3o\3p\3p\3p\3q\3q\3q\3q\3r\3r\3r\3r\3s\3s\3s\3t\3t\3t\3u\3u\3u\3v"+ + "\3v\3v\3w\3w\3w\3w\3w\5w\u0444\nw\3x\3x\3x\3x\5x\u044a\nx\3y\3y\3y\3z"+ + "\3z\3z\3{\3{\3|\3|\3|\3|\3}\3}\3}\3~\3~\3\177\3\177\3\u0080\3\u0080\3"+ + "\u0080\3\u0081\3\u0081\3\u0082\3\u0082\3\u0083\3\u0083\3\u0083\3\u0084"+ + "\3\u0084\3\u0084\3\u0084\3\u0085\3\u0085\3\u0085\3\u0085\3\u0085\3\u0086"+ + "\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086\3\u0086"+ + "\5\u0086\u047c\n\u0086\3\u0087\3\u0087\3\u0087\7\u0087\u0481\n\u0087\f"+ + "\u0087\16\u0087\u0484\13\u0087\3\u0088\3\u0088\5\u0088\u0488\n\u0088\3"+ + "\u0089\3\u0089\3\u008a\3\u008a\3\u008b\3\u008b\5\u008b\u0490\n\u008b\3"+ + "\u008b\7\u008b\u0493\n\u008b\f\u008b\16\u008b\u0496\13\u008b\3\u008c\3"+ + "\u008c\5\u008c\u049a\n\u008c\3\u008c\7\u008c\u049d\n\u008c\f\u008c\16"+ + "\u008c\u04a0\13\u008c\3\u008d\3\u008d\3\u008d\3\u008d\5\u008d\u04a6\n"+ + "\u008d\3\u008d\3\u008d\5\u008d\u04aa\n\u008d\3\u008d\7\u008d\u04ad\n\u008d"+ + "\f\u008d\16\u008d\u04b0\13\u008d\3\u008e\3\u008e\3\u008e\3\u008e\5\u008e"+ + "\u04b6\n\u008e\3\u008e\3\u008e\5\u008e\u04ba\n\u008e\3\u008e\7\u008e\u04bd"+ + "\n\u008e\f\u008e\16\u008e\u04c0\13\u008e\3\u008f\3\u008f\3\u0090\3\u0090"+ + "\3\u0091\3\u0091\3\u0092\3\u0092\3\u0093\3\u0093\5\u0093\u04cc\n\u0093"+ + "\3\u0093\3\u0093\5\u0093\u04d0\n\u0093\3\u0093\3\u0093\5\u0093\u04d4\n"+ + "\u0093\3\u0093\3\u0093\5\u0093\u04d8\n\u0093\5\u0093\u04da\n\u0093\3\u0094"+ + "\3\u0094\3\u0095\3\u0095\3\u0096\3\u0096\3\u0096\3\u0096\5\u0096\u04e4"+ + "\n\u0096\3\u0097\3\u0097\3\u0097\5\u0097\u04e9\n\u0097\3\u0098\3\u0098"+ + "\3\u0098\5\u0098\u04ee\n\u0098\3\u0099\3\u0099\3\u0099\3\u0099\3\u0099"+ + "\3\u0099\3\u0099\3\u0099\3\u0099\3\u0099\3\u0099\3\u0099\3\u0099\3\u0099"+ + "\3\u0099\3\u0099\3\u0099\3\u0099\3\u0099\3\u0099\3\u0099\5\u0099\u0505"+ + "\n\u0099\3\u0099\5\u0099\u0508\n\u0099\3\u0099\3\u0099\3\u0099\3\u0099"+ + "\5\u0099\u050e\n\u0099\3\u009a\3\u009a\3\u009a\3\u009a\3\u009a\3\u009a"+ + "\3\u009a\3\u009a\3\u009a\3\u009a\3\u009a\5\u009a\u051b\n\u009a\3\u009b"+ + "\3\u009b\3\u009b\3\u009b\6\u009b\u0521\n\u009b\r\u009b\16\u009b\u0522"+ + "\3\u009c\5\u009c\u0526\n\u009c\3\u009c\3\u009c\3\u009c\3\u009c\3\u009c"+ + "\5\u009c\u052d\n\u009c\3\u009d\3\u009d\5\u009d\u0531\n\u009d\3\u009d\3"+ + "\u009d\3\u009d\5\u009d\u0536\n\u009d\3\u009d\5\u009d\u0539\n\u009d\3\u009e"+ + "\3\u009e\3\u009f\3\u009f\5\u009f\u053f\n\u009f\3\u009f\7\u009f\u0542\n"+ + "\u009f\f\u009f\16\u009f\u0545\13\u009f\3\u00a0\3\u00a0\3\u00a1\3\u00a1"+ + "\3\u00a1\5\u00a1\u054c\n\u00a1\3\u00a2\3\u00a2\3\u00a2\5\u00a2\u0551\n"+ + "\u00a2\3\u00a3\3\u00a3\7\u00a3\u0555\n\u00a3\f\u00a3\16\u00a3\u0558\13"+ + "\u00a3\3\u00a3\3\u00a3\7\u00a3\u055c\n\u00a3\f\u00a3\16\u00a3\u055f\13"+ + "\u00a3\3\u00a3\3\u00a3\7\u00a3\u0563\n\u00a3\f\u00a3\16\u00a3\u0566\13"+ + "\u00a3\3\u00a3\3\u00a3\3\u00a4\3\u00a4\3\u00a4\3\u00a4\3\u00a4\3\u00a4"+ + "\3\u00a4\3\u00a4\3\u00a4\3\u00a4\3\u00a4\3\u00a4\5\u00a4\u0576\n\u00a4"+ + "\3\u00a5\3\u00a5\5\u00a5\u057a\n\u00a5\3\u00a5\3\u00a5\3\u00a5\3\u00a5"+ + "\3\u00a5\3\u00a5\5\u00a5\u0582\n\u00a5\3\u00a6\3\u00a6\3\u00a6\3\u00a7"+ + "\3\u00a7\3\u00a7\3\u00a8\3\u00a8\3\u00a9\6\u00a9\u058d\n\u00a9\r\u00a9"+ + "\16\u00a9\u058e\3\u00a9\3\u00a9\3\u00aa\3\u00aa\5\u00aa\u0595\n\u00aa"+ + "\3\u00aa\5\u00aa\u0598\n\u00aa\3\u00aa\3\u00aa\3\u00ab\3\u00ab\3\u00ab"+ + "\3\u00ab\7\u00ab\u05a0\n\u00ab\f\u00ab\16\u00ab\u05a3\13\u00ab\3\u00ab"+ + "\3\u00ab\3\u00ab\3\u00ab\3\u00ab\3\u00ac\3\u00ac\3\u00ac\3\u00ac\7\u00ac"+ + "\u05ae\n\u00ac\f\u00ac\16\u00ac\u05b1\13\u00ac\3\u00ac\3\u00ac\4\u01a6"+ + "\u05a1\2\u00ad\3\3\5\4\7\5\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31\16"+ + "\33\17\35\20\37\21!\22#\23%\24\'\25)\26+\27-\30/\31\61\32\63\33\65\34"+ + "\67\359\36;\37= ?!A\"C#E$G%I&K\'M(O)Q*S+U,W-Y.[/]\60_\61a\62c\63e\64g"+ + "\65i\66k\67m8o9q:s;u{?}@\177A\u0081B\u0083C\u0085D\u0087E\u0089F"+ + "\u008bG\u008dH\u008fI\u0091J\u0093K\u0095L\u0097M\u0099N\u009bO\u009d"+ + "P\u009fQ\u00a1R\u00a3S\u00a5T\u00a7U\u00a9V\u00abW\u00adX\u00afY\u00b1"+ + "Z\u00b3[\u00b5\\\u00b7]\u00b9^\u00bb_\u00bd`\u00bfa\u00c1b\u00c3c\u00c5"+ + "d\u00c7e\u00c9f\u00cbg\u00cdh\u00cfi\u00d1j\u00d3k\u00d5l\u00d7m\u00d9"+ + "n\u00dbo\u00ddp\u00dfq\u00e1r\u00e3s\u00e5t\u00e7u\u00e9v\u00ebw\u00ed"+ + "x\u00efy\u00f1z\u00f3{\u00f5|\u00f7}\u00f9~\u00fb\177\u00fd\u0080\u00ff"+ + "\u0081\u0101\u0082\u0103\u0083\u0105\u0084\u0107\u0085\u0109\2\u010b\2"+ + "\u010d\u0086\u010f\2\u0111\2\u0113\2\u0115\u0087\u0117\u0088\u0119\u0089"+ + "\u011b\u008a\u011d\2\u011f\2\u0121\2\u0123\2\u0125\u008b\u0127\2\u0129"+ + "\2\u012b\2\u012d\2\u012f\2\u0131\2\u0133\2\u0135\2\u0137\2\u0139\2\u013b"+ + "\2\u013d\2\u013f\2\u0141\2\u0143\2\u0145\2\u0147\u008c\u0149\u008d\u014b"+ + "\u008e\u014d\u008f\u014f\2\u0151\u0090\u0153\u0091\u0155\u0092\u0157\u0093"+ + "\3\2\25\5\2NNWWww\3\2\f\f\5\2C\\aac|\3\2\62;\3\2\63;\3\2\629\5\2\62;C"+ + "Hch\3\2\62\63\4\2WWww\4\2NNnn\6\2\f\f\17\17))^^\4\2--//\6\2HHNNhhnn\6"+ + "\2\f\f\17\17$$^^\5\2\f\f\17\17**\5\2\f\f\17\17++\5\2\f\f\17\17$$\4\2\13"+ + "\13\"\"\4\2\f\f\17\17\2\u05f7\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2\t"+ + "\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2\2"+ + "\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2\2"+ + "\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2\2"+ + "+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2\2"+ + "\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2\2"+ + "C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2O\3"+ + "\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y\3\2\2\2\2[\3\2\2"+ + "\2\2]\3\2\2\2\2_\3\2\2\2\2a\3\2\2\2\2c\3\2\2\2\2e\3\2\2\2\2g\3\2\2\2\2"+ + "i\3\2\2\2\2k\3\2\2\2\2m\3\2\2\2\2o\3\2\2\2\2q\3\2\2\2\2s\3\2\2\2\2u\3"+ + "\2\2\2\2w\3\2\2\2\2y\3\2\2\2\2{\3\2\2\2\2}\3\2\2\2\2\177\3\2\2\2\2\u0081"+ + "\3\2\2\2\2\u0083\3\2\2\2\2\u0085\3\2\2\2\2\u0087\3\2\2\2\2\u0089\3\2\2"+ + "\2\2\u008b\3\2\2\2\2\u008d\3\2\2\2\2\u008f\3\2\2\2\2\u0091\3\2\2\2\2\u0093"+ + "\3\2\2\2\2\u0095\3\2\2\2\2\u0097\3\2\2\2\2\u0099\3\2\2\2\2\u009b\3\2\2"+ + "\2\2\u009d\3\2\2\2\2\u009f\3\2\2\2\2\u00a1\3\2\2\2\2\u00a3\3\2\2\2\2\u00a5"+ + "\3\2\2\2\2\u00a7\3\2\2\2\2\u00a9\3\2\2\2\2\u00ab\3\2\2\2\2\u00ad\3\2\2"+ + "\2\2\u00af\3\2\2\2\2\u00b1\3\2\2\2\2\u00b3\3\2\2\2\2\u00b5\3\2\2\2\2\u00b7"+ + "\3\2\2\2\2\u00b9\3\2\2\2\2\u00bb\3\2\2\2\2\u00bd\3\2\2\2\2\u00bf\3\2\2"+ + "\2\2\u00c1\3\2\2\2\2\u00c3\3\2\2\2\2\u00c5\3\2\2\2\2\u00c7\3\2\2\2\2\u00c9"+ + "\3\2\2\2\2\u00cb\3\2\2\2\2\u00cd\3\2\2\2\2\u00cf\3\2\2\2\2\u00d1\3\2\2"+ + "\2\2\u00d3\3\2\2\2\2\u00d5\3\2\2\2\2\u00d7\3\2\2\2\2\u00d9\3\2\2\2\2\u00db"+ + "\3\2\2\2\2\u00dd\3\2\2\2\2\u00df\3\2\2\2\2\u00e1\3\2\2\2\2\u00e3\3\2\2"+ + "\2\2\u00e5\3\2\2\2\2\u00e7\3\2\2\2\2\u00e9\3\2\2\2\2\u00eb\3\2\2\2\2\u00ed"+ + "\3\2\2\2\2\u00ef\3\2\2\2\2\u00f1\3\2\2\2\2\u00f3\3\2\2\2\2\u00f5\3\2\2"+ + "\2\2\u00f7\3\2\2\2\2\u00f9\3\2\2\2\2\u00fb\3\2\2\2\2\u00fd\3\2\2\2\2\u00ff"+ + "\3\2\2\2\2\u0101\3\2\2\2\2\u0103\3\2\2\2\2\u0105\3\2\2\2\2\u0107\3\2\2"+ + "\2\2\u010d\3\2\2\2\2\u0115\3\2\2\2\2\u0117\3\2\2\2\2\u0119\3\2\2\2\2\u011b"+ + "\3\2\2\2\2\u0125\3\2\2\2\2\u0147\3\2\2\2\2\u0149\3\2\2\2\2\u014b\3\2\2"+ + "\2\2\u014d\3\2\2\2\2\u0151\3\2\2\2\2\u0153\3\2\2\2\2\u0155\3\2\2\2\2\u0157"+ + "\3\2\2\2\3\u0169\3\2\2\2\5\u016c\3\2\2\2\7\u0182\3\2\2\2\t\u0194\3\2\2"+ + "\2\13\u0198\3\2\2\2\r\u019a\3\2\2\2\17\u01a0\3\2\2\2\21\u01a2\3\2\2\2"+ + "\23\u01b9\3\2\2\2\25\u01c2\3\2\2\2\27\u01ca\3\2\2\2\31\u01d2\3\2\2\2\33"+ + "\u01d6\3\2\2\2\35\u01db\3\2\2\2\37\u01e0\3\2\2\2!\u01e6\3\2\2\2#\u01eb"+ + "\3\2\2\2%\u01f1\3\2\2\2\'\u01f6\3\2\2\2)\u01ff\3\2\2\2+\u0208\3\2\2\2"+ + "-\u020e\3\2\2\2/\u0214\3\2\2\2\61\u021e\3\2\2\2\63\u0229\3\2\2\2\65\u0232"+ + "\3\2\2\2\67\u023b\3\2\2\29\u0243\3\2\2\2;\u024a\3\2\2\2=\u024d\3\2\2\2"+ + "?\u0254\3\2\2\2A\u0261\3\2\2\2C\u0266\3\2\2\2E\u026b\3\2\2\2G\u0274\3"+ + "\2\2\2I\u027b\3\2\2\2K\u0282\3\2\2\2M\u0288\3\2\2\2O\u028e\3\2\2\2Q\u0294"+ + "\3\2\2\2S\u0298\3\2\2\2U\u029f\3\2\2\2W\u02a4\3\2\2\2Y\u02a7\3\2\2\2["+ + "\u02ae\3\2\2\2]\u02b2\3\2\2\2_\u02b7\3\2\2\2a\u02bf\3\2\2\2c\u02c9\3\2"+ + "\2\2e\u02cd\3\2\2\2g\u02d6\3\2\2\2i\u02de\3\2\2\2k\u02e7\3\2\2\2m\u02f0"+ + "\3\2\2\2o\u02f8\3\2\2\2q\u0302\3\2\2\2s\u0309\3\2\2\2u\u0312\3\2\2\2w"+ + "\u0323\3\2\2\2y\u032a\3\2\2\2{\u0330\3\2\2\2}\u0337\3\2\2\2\177\u033e"+ + "\3\2\2\2\u0081\u0345\3\2\2\2\u0083\u0353\3\2\2\2\u0085\u035f\3\2\2\2\u0087"+ + "\u0366\3\2\2\2\u0089\u036d\3\2\2\2\u008b\u0376\3\2\2\2\u008d\u037b\3\2"+ + "\2\2\u008f\u0388\3\2\2\2\u0091\u038e\3\2\2\2\u0093\u0393\3\2\2\2\u0095"+ + "\u0397\3\2\2\2\u0097\u039f\3\2\2\2\u0099\u03a6\3\2\2\2\u009b\u03af\3\2"+ + "\2\2\u009d\u03b5\3\2\2\2\u009f\u03be\3\2\2\2\u00a1\u03c4\3\2\2\2\u00a3"+ + "\u03cc\3\2\2\2\u00a5\u03d1\3\2\2\2\u00a7\u03da\3\2\2\2\u00a9\u03e2\3\2"+ + "\2\2\u00ab\u03e8\3\2\2\2\u00ad\u03ea\3\2\2\2\u00af\u03ec\3\2\2\2\u00b1"+ + "\u03ee\3\2\2\2\u00b3\u03f0\3\2\2\2\u00b5\u03f2\3\2\2\2\u00b7\u03f4\3\2"+ + "\2\2\u00b9\u03f6\3\2\2\2\u00bb\u03f8\3\2\2\2\u00bd\u03fa\3\2\2\2\u00bf"+ + "\u03fc\3\2\2\2\u00c1\u03fe\3\2\2\2\u00c3\u0400\3\2\2\2\u00c5\u0402\3\2"+ + "\2\2\u00c7\u0404\3\2\2\2\u00c9\u040a\3\2\2\2\u00cb\u040c\3\2\2\2\u00cd"+ + "\u040e\3\2\2\2\u00cf\u0410\3\2\2\2\u00d1\u0412\3\2\2\2\u00d3\u0415\3\2"+ + "\2\2\u00d5\u0418\3\2\2\2\u00d7\u041b\3\2\2\2\u00d9\u041e\3\2\2\2\u00db"+ + "\u0421\3\2\2\2\u00dd\u0424\3\2\2\2\u00df\u0427\3\2\2\2\u00e1\u042a\3\2"+ + "\2\2\u00e3\u042e\3\2\2\2\u00e5\u0432\3\2\2\2\u00e7\u0435\3\2\2\2\u00e9"+ + "\u0438\3\2\2\2\u00eb\u043b\3\2\2\2\u00ed\u0443\3\2\2\2\u00ef\u0449\3\2"+ + "\2\2\u00f1\u044b\3\2\2\2\u00f3\u044e\3\2\2\2\u00f5\u0451\3\2\2\2\u00f7"+ + "\u0453\3\2\2\2\u00f9\u0457\3\2\2\2\u00fb\u045a\3\2\2\2\u00fd\u045c\3\2"+ + "\2\2\u00ff\u045e\3\2\2\2\u0101\u0461\3\2\2\2\u0103\u0463\3\2\2\2\u0105"+ + "\u0465\3\2\2\2\u0107\u0468\3\2\2\2\u0109\u046c\3\2\2\2\u010b\u047b\3\2"+ + "\2\2\u010d\u047d\3\2\2\2\u010f\u0487\3\2\2\2\u0111\u0489\3\2\2\2\u0113"+ + "\u048b\3\2\2\2\u0115\u048d\3\2\2\2\u0117\u0497\3\2\2\2\u0119\u04a5\3\2"+ + "\2\2\u011b\u04b5\3\2\2\2\u011d\u04c1\3\2\2\2\u011f\u04c3\3\2\2\2\u0121"+ + "\u04c5\3\2\2\2\u0123\u04c7\3\2\2\2\u0125\u04d9\3\2\2\2\u0127\u04db\3\2"+ + "\2\2\u0129\u04dd\3\2\2\2\u012b\u04e3\3\2\2\2\u012d\u04e8\3\2\2\2\u012f"+ + "\u04ed\3\2\2\2\u0131\u050d\3\2\2\2\u0133\u051a\3\2\2\2\u0135\u051c\3\2"+ + "\2\2\u0137\u052c\3\2\2\2\u0139\u0538\3\2\2\2\u013b\u053a\3\2\2\2\u013d"+ + "\u053c\3\2\2\2\u013f\u0546\3\2\2\2\u0141\u054b\3\2\2\2\u0143\u0550\3\2"+ + "\2\2\u0145\u0552\3\2\2\2\u0147\u0575\3\2\2\2\u0149\u0581\3\2\2\2\u014b"+ + "\u0583\3\2\2\2\u014d\u0586\3\2\2\2\u014f\u0589\3\2\2\2\u0151\u058c\3\2"+ + "\2\2\u0153\u0597\3\2\2\2\u0155\u059b\3\2\2\2\u0157\u05a9\3\2\2\2\u0159"+ + "\u015b\5\u0115\u008b\2\u015a\u015c\5\u0125\u0093\2\u015b\u015a\3\2\2\2"+ + "\u015b\u015c\3\2\2\2\u015c\u016a\3\2\2\2\u015d\u015f\5\u0117\u008c\2\u015e"+ + "\u0160\5\u0125\u0093\2\u015f\u015e\3\2\2\2\u015f\u0160\3\2\2\2\u0160\u016a"+ + "\3\2\2\2\u0161\u0163\5\u0119\u008d\2\u0162\u0164\5\u0125\u0093\2\u0163"+ + "\u0162\3\2\2\2\u0163\u0164\3\2\2\2\u0164\u016a\3\2\2\2\u0165\u0167\5\u011b"+ + "\u008e\2\u0166\u0168\5\u0125\u0093\2\u0167\u0166\3\2\2\2\u0167\u0168\3"+ + "\2\2\2\u0168\u016a\3\2\2\2\u0169\u0159\3\2\2\2\u0169\u015d\3\2\2\2\u0169"+ + "\u0161\3\2\2\2\u0169\u0165\3\2\2\2\u016a\4\3\2\2\2\u016b\u016d\t\2\2\2"+ + "\u016c\u016b\3\2\2\2\u016c\u016d\3\2\2\2\u016d\u016e\3\2\2\2\u016e\u0170"+ + "\7)\2\2\u016f\u0171\5\u012d\u0097\2\u0170\u016f\3\2\2\2\u0171\u0172\3"+ + "\2\2\2\u0172\u0170\3\2\2\2\u0172\u0173\3\2\2\2\u0173\u0174\3\2\2\2\u0174"+ + "\u0175\7)\2\2\u0175\6\3\2\2\2\u0176\u0178\5\u0137\u009c\2\u0177\u0179"+ + "\5\u0139\u009d\2\u0178\u0177\3\2\2\2\u0178\u0179\3\2\2\2\u0179\u017b\3"+ + "\2\2\2\u017a\u017c\5\u013f\u00a0\2\u017b\u017a\3\2\2\2\u017b\u017c\3\2"+ + "\2\2\u017c\u0183\3\2\2\2\u017d\u017e\5\u013d\u009f\2\u017e\u0180\5\u0139"+ + "\u009d\2\u017f\u0181\5\u013f\u00a0\2\u0180\u017f\3\2\2\2\u0180\u0181\3"+ + "\2\2\2\u0181\u0183\3\2\2\2\u0182\u0176\3\2\2\2\u0182\u017d\3\2\2\2\u0183"+ + "\b\3\2\2\2\u0184\u0186\5\u0141\u00a1\2\u0185\u0184\3\2\2\2\u0185\u0186"+ + "\3\2\2\2\u0186\u0187\3\2\2\2\u0187\u018b\7$\2\2\u0188\u018a\5\u0143\u00a2"+ + "\2\u0189\u0188\3\2\2\2\u018a\u018d\3\2\2\2\u018b\u0189\3\2\2\2\u018b\u018c"+ + "\3\2\2\2\u018c\u018e\3\2\2\2\u018d\u018b\3\2\2\2\u018e\u0195\7$\2\2\u018f"+ + "\u0191\5\u0141\u00a1\2\u0190\u018f\3\2\2\2\u0190\u0191\3\2\2\2\u0191\u0192"+ + "\3\2\2\2\u0192\u0193\7T\2\2\u0193\u0195\5\u0145\u00a3\2\u0194\u0185\3"+ + "\2\2\2\u0194\u0190\3\2\2\2\u0195\n\3\2\2\2\u0196\u0199\5K&\2\u0197\u0199"+ + "\5\u0091I\2\u0198\u0196\3\2\2\2\u0198\u0197\3\2\2\2\u0199\f\3\2\2\2\u019a"+ + "\u019b\5g\64\2\u019b\16\3\2\2\2\u019c\u01a1\5\u0147\u00a4\2\u019d\u01a1"+ + "\5\u0149\u00a5\2\u019e\u01a1\5\u014b\u00a6\2\u019f\u01a1\5\u014d\u00a7"+ + "\2\u01a0\u019c\3\2\2\2\u01a0\u019d\3\2\2\2\u01a0\u019e\3\2\2\2\u01a0\u019f"+ + "\3\2\2\2\u01a1\20\3\2\2\2\u01a2\u01ae\7%\2\2\u01a3\u01a5\n\3\2\2\u01a4"+ + "\u01a3\3\2\2\2\u01a5\u01a8\3\2\2\2\u01a6\u01a7\3\2\2\2\u01a6\u01a4\3\2"+ + "\2\2\u01a7\u01a9\3\2\2\2\u01a8\u01a6\3\2\2\2\u01a9\u01ab\7^\2\2\u01aa"+ + "\u01ac\7\17\2\2\u01ab\u01aa\3\2\2\2\u01ab\u01ac\3\2\2\2\u01ac\u01ad\3"+ + "\2\2\2\u01ad\u01af\7\f\2\2\u01ae\u01a6\3\2\2\2\u01af\u01b0\3\2\2\2\u01b0"+ + "\u01ae\3\2\2\2\u01b0\u01b1\3\2\2\2\u01b1\u01b3\3\2\2\2\u01b2\u01b4\n\3"+ + "\2\2\u01b3\u01b2\3\2\2\2\u01b4\u01b5\3\2\2\2\u01b5\u01b3\3\2\2\2\u01b5"+ + "\u01b6\3\2\2\2\u01b6\u01b7\3\2\2\2\u01b7\u01b8\b\t\2\2\u01b8\22\3\2\2"+ + "\2\u01b9\u01bd\7%\2\2\u01ba\u01bc\n\3\2\2\u01bb\u01ba\3\2\2\2\u01bc\u01bf"+ + "\3\2\2\2\u01bd\u01bb\3\2\2\2\u01bd\u01be\3\2\2\2\u01be\u01c0\3\2\2\2\u01bf"+ + "\u01bd\3\2\2\2\u01c0\u01c1\b\n\2\2\u01c1\24\3\2\2\2\u01c2\u01c3\7c\2\2"+ + "\u01c3\u01c4\7n\2\2\u01c4\u01c5\7k\2\2\u01c5\u01c6\7i\2\2\u01c6\u01c7"+ + "\7p\2\2\u01c7\u01c8\7c\2\2\u01c8\u01c9\7u\2\2\u01c9\26\3\2\2\2\u01ca\u01cb"+ + "\7c\2\2\u01cb\u01cc\7n\2\2\u01cc\u01cd\7k\2\2\u01cd\u01ce\7i\2\2\u01ce"+ + "\u01cf\7p\2\2\u01cf\u01d0\7q\2\2\u01d0\u01d1\7h\2\2\u01d1\30\3\2\2\2\u01d2"+ + "\u01d3\7c\2\2\u01d3\u01d4\7u\2\2\u01d4\u01d5\7o\2\2\u01d5\32\3\2\2\2\u01d6"+ + "\u01d7\7c\2\2\u01d7\u01d8\7w\2\2\u01d8\u01d9\7v\2\2\u01d9\u01da\7q\2\2"+ + "\u01da\34\3\2\2\2\u01db\u01dc\7d\2\2\u01dc\u01dd\7q\2\2\u01dd\u01de\7"+ + "q\2\2\u01de\u01df\7n\2\2\u01df\36\3\2\2\2\u01e0\u01e1\7d\2\2\u01e1\u01e2"+ + "\7t\2\2\u01e2\u01e3\7g\2\2\u01e3\u01e4\7c\2\2\u01e4\u01e5\7m\2\2\u01e5"+ + " \3\2\2\2\u01e6\u01e7\7e\2\2\u01e7\u01e8\7c\2\2\u01e8\u01e9\7u\2\2\u01e9"+ + "\u01ea\7g\2\2\u01ea\"\3\2\2\2\u01eb\u01ec\7e\2\2\u01ec\u01ed\7c\2\2\u01ed"+ + "\u01ee\7v\2\2\u01ee\u01ef\7e\2\2\u01ef\u01f0\7j\2\2\u01f0$\3\2\2\2\u01f1"+ + "\u01f2\7e\2\2\u01f2\u01f3\7j\2\2\u01f3\u01f4\7c\2\2\u01f4\u01f5\7t\2\2"+ + "\u01f5&\3\2\2\2\u01f6\u01f7\7e\2\2\u01f7\u01f8\7j\2\2\u01f8\u01f9\7c\2"+ + "\2\u01f9\u01fa\7t\2\2\u01fa\u01fb\7\63\2\2\u01fb\u01fc\78\2\2\u01fc\u01fd"+ + "\7a\2\2\u01fd\u01fe\7v\2\2\u01fe(\3\2\2\2\u01ff\u0200\7e\2\2\u0200\u0201"+ + "\7j\2\2\u0201\u0202\7c\2\2\u0202\u0203\7t\2\2\u0203\u0204\7\65\2\2\u0204"+ + "\u0205\7\64\2\2\u0205\u0206\7a\2\2\u0206\u0207\7v\2\2\u0207*\3\2\2\2\u0208"+ + "\u0209\7e\2\2\u0209\u020a\7n\2\2\u020a\u020b\7c\2\2\u020b\u020c\7u\2\2"+ + "\u020c\u020d\7u\2\2\u020d,\3\2\2\2\u020e\u020f\7e\2\2\u020f\u0210\7q\2"+ + "\2\u0210\u0211\7p\2\2\u0211\u0212\7u\2\2\u0212\u0213\7v\2\2\u0213.\3\2"+ + "\2\2\u0214\u0215\7e\2\2\u0215\u0216\7q\2\2\u0216\u0217\7p\2\2\u0217\u0218"+ + "\7u\2\2\u0218\u0219\7v\2\2\u0219\u021a\7g\2\2\u021a\u021b\7z\2\2\u021b"+ + "\u021c\7r\2\2\u021c\u021d\7t\2\2\u021d\60\3\2\2\2\u021e\u021f\7e\2\2\u021f"+ + "\u0220\7q\2\2\u0220\u0221\7p\2\2\u0221\u0222\7u\2\2\u0222\u0223\7v\2\2"+ + "\u0223\u0224\7a\2\2\u0224\u0225\7e\2\2\u0225\u0226\7c\2\2\u0226\u0227"+ + "\7u\2\2\u0227\u0228\7v\2\2\u0228\62\3\2\2\2\u0229\u022a\7e\2\2\u022a\u022b"+ + "\7q\2\2\u022b\u022c\7p\2\2\u022c\u022d\7v\2\2\u022d\u022e\7k\2\2\u022e"+ + "\u022f\7p\2\2\u022f\u0230\7w\2\2\u0230\u0231\7g\2\2\u0231\64\3\2\2\2\u0232"+ + "\u0233\7f\2\2\u0233\u0234\7g\2\2\u0234\u0235\7e\2\2\u0235\u0236\7n\2\2"+ + "\u0236\u0237\7v\2\2\u0237\u0238\7{\2\2\u0238\u0239\7r\2\2\u0239\u023a"+ + "\7g\2\2\u023a\66\3\2\2\2\u023b\u023c\7f\2\2\u023c\u023d\7g\2\2\u023d\u023e"+ + "\7h\2\2\u023e\u023f\7c\2\2\u023f\u0240\7w\2\2\u0240\u0241\7n\2\2\u0241"+ + "\u0242\7v\2\2\u02428\3\2\2\2\u0243\u0244\7f\2\2\u0244\u0245\7g\2\2\u0245"+ + "\u0246\7n\2\2\u0246\u0247\7g\2\2\u0247\u0248\7v\2\2\u0248\u0249\7g\2\2"+ + "\u0249:\3\2\2\2\u024a\u024b\7f\2\2\u024b\u024c\7q\2\2\u024c<\3\2\2\2\u024d"+ + "\u024e\7f\2\2\u024e\u024f\7q\2\2\u024f\u0250\7w\2\2\u0250\u0251\7d\2\2"+ + "\u0251\u0252\7n\2\2\u0252\u0253\7g\2\2\u0253>\3\2\2\2\u0254\u0255\7f\2"+ + "\2\u0255\u0256\7{\2\2\u0256\u0257\7p\2\2\u0257\u0258\7c\2\2\u0258\u0259"+ + "\7o\2\2\u0259\u025a\7k\2\2\u025a\u025b\7e\2\2\u025b\u025c\7a\2\2\u025c"+ + "\u025d\7e\2\2\u025d\u025e\7c\2\2\u025e\u025f\7u\2\2\u025f\u0260\7v\2\2"+ + "\u0260@\3\2\2\2\u0261\u0262\7g\2\2\u0262\u0263\7n\2\2\u0263\u0264\7u\2"+ + "\2\u0264\u0265\7g\2\2\u0265B\3\2\2\2\u0266\u0267\7g\2\2\u0267\u0268\7"+ + "p\2\2\u0268\u0269\7w\2\2\u0269\u026a\7o\2\2\u026aD\3\2\2\2\u026b\u026c"+ + "\7g\2\2\u026c\u026d\7z\2\2\u026d\u026e\7r\2\2\u026e\u026f\7n\2\2\u026f"+ + "\u0270\7k\2\2\u0270\u0271\7e\2\2\u0271\u0272\7k\2\2\u0272\u0273\7v\2\2"+ + "\u0273F\3\2\2\2\u0274\u0275\7g\2\2\u0275\u0276\7z\2\2\u0276\u0277\7r\2"+ + "\2\u0277\u0278\7q\2\2\u0278\u0279\7t\2\2\u0279\u027a\7v\2\2\u027aH\3\2"+ + "\2\2\u027b\u027c\7g\2\2\u027c\u027d\7z\2\2\u027d\u027e\7v\2\2\u027e\u027f"+ + "\7g\2\2\u027f\u0280\7t\2\2\u0280\u0281\7p\2\2\u0281J\3\2\2\2\u0282\u0283"+ + "\7h\2\2\u0283\u0284\7c\2\2\u0284\u0285\7n\2\2\u0285\u0286\7u\2\2\u0286"+ + "\u0287\7g\2\2\u0287L\3\2\2\2\u0288\u0289\7h\2\2\u0289\u028a\7k\2\2\u028a"+ + "\u028b\7p\2\2\u028b\u028c\7c\2\2\u028c\u028d\7n\2\2\u028dN\3\2\2\2\u028e"+ + "\u028f\7h\2\2\u028f\u0290\7n\2\2\u0290\u0291\7q\2\2\u0291\u0292\7c\2\2"+ + "\u0292\u0293\7v\2\2\u0293P\3\2\2\2\u0294\u0295\7h\2\2\u0295\u0296\7q\2"+ + "\2\u0296\u0297\7t\2\2\u0297R\3\2\2\2\u0298\u0299\7h\2\2\u0299\u029a\7"+ + "t\2\2\u029a\u029b\7k\2\2\u029b\u029c\7g\2\2\u029c\u029d\7p\2\2\u029d\u029e"+ + "\7f\2\2\u029eT\3\2\2\2\u029f\u02a0\7i\2\2\u02a0\u02a1\7q\2\2\u02a1\u02a2"+ + "\7v\2\2\u02a2\u02a3\7q\2\2\u02a3V\3\2\2\2\u02a4\u02a5\7k\2\2\u02a5\u02a6"+ + "\7h\2\2\u02a6X\3\2\2\2\u02a7\u02a8\7k\2\2\u02a8\u02a9\7p\2\2\u02a9\u02aa"+ + "\7n\2\2\u02aa\u02ab\7k\2\2\u02ab\u02ac\7p\2\2\u02ac\u02ad\7g\2\2\u02ad"+ + "Z\3\2\2\2\u02ae\u02af\7k\2\2\u02af\u02b0\7p\2\2\u02b0\u02b1\7v\2\2\u02b1"+ + "\\\3\2\2\2\u02b2\u02b3\7n\2\2\u02b3\u02b4\7q\2\2\u02b4\u02b5\7p\2\2\u02b5"+ + "\u02b6\7i\2\2\u02b6^\3\2\2\2\u02b7\u02b8\7o\2\2\u02b8\u02b9\7w\2\2\u02b9"+ + "\u02ba\7v\2\2\u02ba\u02bb\7c\2\2\u02bb\u02bc\7d\2\2\u02bc\u02bd\7n\2\2"+ + "\u02bd\u02be\7g\2\2\u02be`\3\2\2\2\u02bf\u02c0\7p\2\2\u02c0\u02c1\7c\2"+ + "\2\u02c1\u02c2\7o\2\2\u02c2\u02c3\7g\2\2\u02c3\u02c4\7u\2\2\u02c4\u02c5"+ + "\7r\2\2\u02c5\u02c6\7c\2\2\u02c6\u02c7\7e\2\2\u02c7\u02c8\7g\2\2\u02c8"+ + "b\3\2\2\2\u02c9\u02ca\7p\2\2\u02ca\u02cb\7g\2\2\u02cb\u02cc\7y\2\2\u02cc"+ + "d\3\2\2\2\u02cd\u02ce\7p\2\2\u02ce\u02cf\7q\2\2\u02cf\u02d0\7g\2\2\u02d0"+ + "\u02d1\7z\2\2\u02d1\u02d2\7e\2\2\u02d2\u02d3\7g\2\2\u02d3\u02d4\7r\2\2"+ + "\u02d4\u02d5\7v\2\2\u02d5f\3\2\2\2\u02d6\u02d7\7p\2\2\u02d7\u02d8\7w\2"+ + "\2\u02d8\u02d9\7n\2\2\u02d9\u02da\7n\2\2\u02da\u02db\7r\2\2\u02db\u02dc"+ + "\7v\2\2\u02dc\u02dd\7t\2\2\u02ddh\3\2\2\2\u02de\u02df\7q\2\2\u02df\u02e0"+ + "\7r\2\2\u02e0\u02e1\7g\2\2\u02e1\u02e2\7t\2\2\u02e2\u02e3\7c\2\2\u02e3"+ + "\u02e4\7v\2\2\u02e4\u02e5\7q\2\2\u02e5\u02e6\7t\2\2\u02e6j\3\2\2\2\u02e7"+ + "\u02e8\7q\2\2\u02e8\u02e9\7x\2\2\u02e9\u02ea\7g\2\2\u02ea\u02eb\7t\2\2"+ + "\u02eb\u02ec\7t\2\2\u02ec\u02ed\7k\2\2\u02ed\u02ee\7f\2\2\u02ee\u02ef"+ + "\7g\2\2\u02efl\3\2\2\2\u02f0\u02f1\7r\2\2\u02f1\u02f2\7t\2\2\u02f2\u02f3"+ + "\7k\2\2\u02f3\u02f4\7x\2\2\u02f4\u02f5\7c\2\2\u02f5\u02f6\7v\2\2\u02f6"+ + "\u02f7\7g\2\2\u02f7n\3\2\2\2\u02f8\u02f9\7r\2\2\u02f9\u02fa\7t\2\2\u02fa"+ + "\u02fb\7q\2\2\u02fb\u02fc\7v\2\2\u02fc\u02fd\7g\2\2\u02fd\u02fe\7e\2\2"+ + "\u02fe\u02ff\7v\2\2\u02ff\u0300\7g\2\2\u0300\u0301\7f\2\2\u0301p\3\2\2"+ + "\2\u0302\u0303\7r\2\2\u0303\u0304\7w\2\2\u0304\u0305\7d\2\2\u0305\u0306"+ + "\7n\2\2\u0306\u0307\7k\2\2\u0307\u0308\7e\2\2\u0308r\3\2\2\2\u0309\u030a"+ + "\7t\2\2\u030a\u030b\7g\2\2\u030b\u030c\7i\2\2\u030c\u030d\7k\2\2\u030d"+ + "\u030e\7u\2\2\u030e\u030f\7v\2\2\u030f\u0310\7g\2\2\u0310\u0311\7t\2\2"+ + "\u0311t\3\2\2\2\u0312\u0313\7t\2\2\u0313\u0314\7g\2\2\u0314\u0315\7k\2"+ + "\2\u0315\u0316\7p\2\2\u0316\u0317\7v\2\2\u0317\u0318\7g\2\2\u0318\u0319"+ + "\7t\2\2\u0319\u031a\7r\2\2\u031a\u031b\7t\2\2\u031b\u031c\7g\2\2\u031c"+ + "\u031d\7v\2\2\u031d\u031e\7a\2\2\u031e\u031f\7e\2\2\u031f\u0320\7c\2\2"+ + "\u0320\u0321\7u\2\2\u0321\u0322\7v\2\2\u0322v\3\2\2\2\u0323\u0324\7t\2"+ + "\2\u0324\u0325\7g\2\2\u0325\u0326\7v\2\2\u0326\u0327\7w\2\2\u0327\u0328"+ + "\7t\2\2\u0328\u0329\7p\2\2\u0329x\3\2\2\2\u032a\u032b\7u\2\2\u032b\u032c"+ + "\7j\2\2\u032c\u032d\7q\2\2\u032d\u032e\7t\2\2\u032e\u032f\7v\2\2\u032f"+ + "z\3\2\2\2\u0330\u0331\7u\2\2\u0331\u0332\7k\2\2\u0332\u0333\7i\2\2\u0333"+ + "\u0334\7p\2\2\u0334\u0335\7g\2\2\u0335\u0336\7f\2\2\u0336|\3\2\2\2\u0337"+ + "\u0338\7u\2\2\u0338\u0339\7k\2\2\u0339\u033a\7|\2\2\u033a\u033b\7g\2\2"+ + "\u033b\u033c\7q\2\2\u033c\u033d\7h\2\2\u033d~\3\2\2\2\u033e\u033f\7u\2"+ + "\2\u033f\u0340\7v\2\2\u0340\u0341\7c\2\2\u0341\u0342\7v\2\2\u0342\u0343"+ + "\7k\2\2\u0343\u0344\7e\2\2\u0344\u0080\3\2\2\2\u0345\u0346\7u\2\2\u0346"+ + "\u0347\7v\2\2\u0347\u0348\7c\2\2\u0348\u0349\7v\2\2\u0349\u034a\7k\2\2"+ + "\u034a\u034b\7e\2\2\u034b\u034c\7a\2\2\u034c\u034d\7c\2\2\u034d\u034e"+ + "\7u\2\2\u034e\u034f\7u\2\2\u034f\u0350\7g\2\2\u0350\u0351\7t\2\2\u0351"+ + "\u0352\7v\2\2\u0352\u0082\3\2\2\2\u0353\u0354\7u\2\2\u0354\u0355\7v\2"+ + "\2\u0355\u0356\7c\2\2\u0356\u0357\7v\2\2\u0357\u0358\7k\2\2\u0358\u0359"+ + "\7e\2\2\u0359\u035a\7a\2\2\u035a\u035b\7e\2\2\u035b\u035c\7c\2\2\u035c"+ + "\u035d\7u\2\2\u035d\u035e\7v\2\2\u035e\u0084\3\2\2\2\u035f\u0360\7u\2"+ + "\2\u0360\u0361\7v\2\2\u0361\u0362\7t\2\2\u0362\u0363\7w\2\2\u0363\u0364"+ + "\7e\2\2\u0364\u0365\7v\2\2\u0365\u0086\3\2\2\2\u0366\u0367\7u\2\2\u0367"+ + "\u0368\7y\2\2\u0368\u0369\7k\2\2\u0369\u036a\7v\2\2\u036a\u036b\7e\2\2"+ + "\u036b\u036c\7j\2\2\u036c\u0088\3\2\2\2\u036d\u036e\7v\2\2\u036e\u036f"+ + "\7g\2\2\u036f\u0370\7o\2\2\u0370\u0371\7r\2\2\u0371\u0372\7n\2\2\u0372"+ + "\u0373\7c\2\2\u0373\u0374\7v\2\2\u0374\u0375\7g\2\2\u0375\u008a\3\2\2"+ + "\2\u0376\u0377\7v\2\2\u0377\u0378\7j\2\2\u0378\u0379\7k\2\2\u0379\u037a"+ + "\7u\2\2\u037a\u008c\3\2\2\2\u037b\u037c\7v\2\2\u037c\u037d\7j\2\2\u037d"+ + "\u037e\7t\2\2\u037e\u037f\7g\2\2\u037f\u0380\7c\2\2\u0380\u0381\7f\2\2"+ + "\u0381\u0382\7a\2\2\u0382\u0383\7n\2\2\u0383\u0384\7q\2\2\u0384\u0385"+ + "\7e\2\2\u0385\u0386\7c\2\2\u0386\u0387\7n\2\2\u0387\u008e\3\2\2\2\u0388"+ + "\u0389\7v\2\2\u0389\u038a\7j\2\2\u038a\u038b\7t\2\2\u038b\u038c\7q\2\2"+ + "\u038c\u038d\7y\2\2\u038d\u0090\3\2\2\2\u038e\u038f\7v\2\2\u038f\u0390"+ + "\7t\2\2\u0390\u0391\7w\2\2\u0391\u0392\7g\2\2\u0392\u0092\3\2\2\2\u0393"+ + "\u0394\7v\2\2\u0394\u0395\7t\2\2\u0395\u0396\7{\2\2\u0396\u0094\3\2\2"+ + "\2\u0397\u0398\7v\2\2\u0398\u0399\7{\2\2\u0399\u039a\7r\2\2\u039a\u039b"+ + "\7g\2\2\u039b\u039c\7f\2\2\u039c\u039d\7g\2\2\u039d\u039e\7h\2\2\u039e"+ + "\u0096\3\2\2\2\u039f\u03a0\7v\2\2\u03a0\u03a1\7{\2\2\u03a1\u03a2\7r\2"+ + "\2\u03a2\u03a3\7g\2\2\u03a3\u03a4\7k\2\2\u03a4\u03a5\7f\2\2\u03a5\u0098"+ + "\3\2\2\2\u03a6\u03a7\7v\2\2\u03a7\u03a8\7{\2\2\u03a8\u03a9\7r\2\2\u03a9"+ + "\u03aa\7g\2\2\u03aa\u03ab\7p\2\2\u03ab\u03ac\7c\2\2\u03ac\u03ad\7o\2\2"+ + "\u03ad\u03ae\7g\2\2\u03ae\u009a\3\2\2\2\u03af\u03b0\7w\2\2\u03b0\u03b1"+ + "\7p\2\2\u03b1\u03b2\7k\2\2\u03b2\u03b3\7q\2\2\u03b3\u03b4\7p\2\2\u03b4"+ + "\u009c\3\2\2\2\u03b5\u03b6\7w\2\2\u03b6\u03b7\7p\2\2\u03b7\u03b8\7u\2"+ + "\2\u03b8\u03b9\7k\2\2\u03b9\u03ba\7i\2\2\u03ba\u03bb\7p\2\2\u03bb\u03bc"+ + "\7g\2\2\u03bc\u03bd\7f\2\2\u03bd\u009e\3\2\2\2\u03be\u03bf\7w\2\2\u03bf"+ + "\u03c0\7u\2\2\u03c0\u03c1\7k\2\2\u03c1\u03c2\7p\2\2\u03c2\u03c3\7i\2\2"+ + "\u03c3\u00a0\3\2\2\2\u03c4\u03c5\7x\2\2\u03c5\u03c6\7k\2\2\u03c6\u03c7"+ + "\7t\2\2\u03c7\u03c8\7v\2\2\u03c8\u03c9\7w\2\2\u03c9\u03ca\7c\2\2\u03ca"+ + "\u03cb\7n\2\2\u03cb\u00a2\3\2\2\2\u03cc\u03cd\7x\2\2\u03cd\u03ce\7q\2"+ + "\2\u03ce\u03cf\7k\2\2\u03cf\u03d0\7f\2\2\u03d0\u00a4\3\2\2\2\u03d1\u03d2"+ + "\7x\2\2\u03d2\u03d3\7q\2\2\u03d3\u03d4\7n\2\2\u03d4\u03d5\7c\2\2\u03d5"+ + "\u03d6\7v\2\2\u03d6\u03d7\7k\2\2\u03d7\u03d8\7n\2\2\u03d8\u03d9\7g\2\2"+ + "\u03d9\u00a6\3\2\2\2\u03da\u03db\7y\2\2\u03db\u03dc\7e\2\2\u03dc\u03dd"+ + "\7j\2\2\u03dd\u03de\7c\2\2\u03de\u03df\7t\2\2\u03df\u03e0\7a\2\2\u03e0"+ + "\u03e1\7v\2\2\u03e1\u00a8\3\2\2\2\u03e2\u03e3\7y\2\2\u03e3\u03e4\7j\2"+ + "\2\u03e4\u03e5\7k\2\2\u03e5\u03e6\7n\2\2\u03e6\u03e7\7g\2\2\u03e7\u00aa"+ + "\3\2\2\2\u03e8\u03e9\7*\2\2\u03e9\u00ac\3\2\2\2\u03ea\u03eb\7+\2\2\u03eb"+ + "\u00ae\3\2\2\2\u03ec\u03ed\7]\2\2\u03ed\u00b0\3\2\2\2\u03ee\u03ef\7_\2"+ + "\2\u03ef\u00b2\3\2\2\2\u03f0\u03f1\7}\2\2\u03f1\u00b4\3\2\2\2\u03f2\u03f3"+ + "\7\177\2\2\u03f3\u00b6\3\2\2\2\u03f4\u03f5\7-\2\2\u03f5\u00b8\3\2\2\2"+ + "\u03f6\u03f7\7/\2\2\u03f7\u00ba\3\2\2\2\u03f8\u03f9\7,\2\2\u03f9\u00bc"+ + "\3\2\2\2\u03fa\u03fb\7\61\2\2\u03fb\u00be\3\2\2\2\u03fc\u03fd\7\'\2\2"+ + "\u03fd\u00c0\3\2\2\2\u03fe\u03ff\7`\2\2\u03ff\u00c2\3\2\2\2\u0400\u0401"+ + "\7(\2\2\u0401\u00c4\3\2\2\2\u0402\u0403\7~\2\2\u0403\u00c6\3\2\2\2\u0404"+ + "\u0405\7\u0080\2\2\u0405\u00c8\3\2\2\2\u0406\u040b\7#\2\2\u0407\u0408"+ + "\7p\2\2\u0408\u0409\7q\2\2\u0409\u040b\7v\2\2\u040a\u0406\3\2\2\2\u040a"+ + "\u0407\3\2\2\2\u040b\u00ca\3\2\2\2\u040c\u040d\7?\2\2\u040d\u00cc\3\2"+ + "\2\2\u040e\u040f\7>\2\2\u040f\u00ce\3\2\2\2\u0410\u0411\7@\2\2\u0411\u00d0"+ + "\3\2\2\2\u0412\u0413\7-\2\2\u0413\u0414\7?\2\2\u0414\u00d2\3\2\2\2\u0415"+ + "\u0416\7/\2\2\u0416\u0417\7?\2\2\u0417\u00d4\3\2\2\2\u0418\u0419\7,\2"+ + "\2\u0419\u041a\7?\2\2\u041a\u00d6\3\2\2\2\u041b\u041c\7\61\2\2\u041c\u041d"+ + "\7?\2\2\u041d\u00d8\3\2\2\2\u041e\u041f\7\'\2\2\u041f\u0420\7?\2\2\u0420"+ + "\u00da\3\2\2\2\u0421\u0422\7`\2\2\u0422\u0423\7?\2\2\u0423\u00dc\3\2\2"+ + "\2\u0424\u0425\7(\2\2\u0425\u0426\7?\2\2\u0426\u00de\3\2\2\2\u0427\u0428"+ + "\7~\2\2\u0428\u0429\7?\2\2\u0429\u00e0\3\2\2\2\u042a\u042b\7>\2\2\u042b"+ + "\u042c\7>\2\2\u042c\u042d\7?\2\2\u042d\u00e2\3\2\2\2\u042e\u042f\7@\2"+ + "\2\u042f\u0430\7@\2\2\u0430\u0431\7?\2\2\u0431\u00e4\3\2\2\2\u0432\u0433"+ + "\7?\2\2\u0433\u0434\7?\2\2\u0434\u00e6\3\2\2\2\u0435\u0436\7#\2\2\u0436"+ + "\u0437\7?\2\2\u0437\u00e8\3\2\2\2\u0438\u0439\7>\2\2\u0439\u043a\7?\2"+ + "\2\u043a\u00ea\3\2\2\2\u043b\u043c\7@\2\2\u043c\u043d\7?\2\2\u043d\u00ec"+ + "\3\2\2\2\u043e\u043f\7(\2\2\u043f\u0444\7(\2\2\u0440\u0441\7c\2\2\u0441"+ + "\u0442\7p\2\2\u0442\u0444\7f\2\2\u0443\u043e\3\2\2\2\u0443\u0440\3\2\2"+ + "\2\u0444\u00ee\3\2\2\2\u0445\u0446\7~\2\2\u0446\u044a\7~\2\2\u0447\u0448"+ + "\7q\2\2\u0448\u044a\7t\2\2\u0449\u0445\3\2\2\2\u0449\u0447\3\2\2\2\u044a"+ + "\u00f0\3\2\2\2\u044b\u044c\7-\2\2\u044c\u044d\7-\2\2\u044d\u00f2\3\2\2"+ + "\2\u044e\u044f\7/\2\2\u044f\u0450\7/\2\2\u0450\u00f4\3\2\2\2\u0451\u0452"+ + "\7.\2\2\u0452\u00f6\3\2\2\2\u0453\u0454\7/\2\2\u0454\u0455\7@\2\2\u0455"+ + "\u0456\7,\2\2\u0456\u00f8\3\2\2\2\u0457\u0458\7/\2\2\u0458\u0459\7@\2"+ + "\2\u0459\u00fa\3\2\2\2\u045a\u045b\7A\2\2\u045b\u00fc\3\2\2\2\u045c\u045d"+ + "\7<\2\2\u045d\u00fe\3\2\2\2\u045e\u045f\7<\2\2\u045f\u0460\7<\2\2\u0460"+ + "\u0100\3\2\2\2\u0461\u0462\7=\2\2\u0462\u0102\3\2\2\2\u0463\u0464\7\60"+ + "\2\2\u0464\u0104\3\2\2\2\u0465\u0466\7\60\2\2\u0466\u0467\7,\2\2\u0467"+ + "\u0106\3\2\2\2\u0468\u0469\7\60\2\2\u0469\u046a\7\60\2\2\u046a\u046b\7"+ + "\60\2\2\u046b\u0108\3\2\2\2\u046c\u046d\5\u0121\u0091\2\u046d\u046e\5"+ + "\u0121\u0091\2\u046e\u046f\5\u0121\u0091\2\u046f\u0470\5\u0121\u0091\2"+ + "\u0470\u010a\3\2\2\2\u0471\u0472\7^\2\2\u0472\u0473\7w\2\2\u0473\u0474"+ + "\3\2\2\2\u0474\u047c\5\u0109\u0085\2\u0475\u0476\7^\2\2\u0476\u0477\7"+ + "W\2\2\u0477\u0478\3\2\2\2\u0478\u0479\5\u0109\u0085\2\u0479\u047a\5\u0109"+ + "\u0085\2\u047a\u047c\3\2\2\2\u047b\u0471\3\2\2\2\u047b\u0475\3\2\2\2\u047c"+ + "\u010c\3\2\2\2\u047d\u0482\5\u010f\u0088\2\u047e\u0481\5\u010f\u0088\2"+ + "\u047f\u0481\5\u0113\u008a\2\u0480\u047e\3\2\2\2\u0480\u047f\3\2\2\2\u0481"+ + "\u0484\3\2\2\2\u0482\u0480\3\2\2\2\u0482\u0483\3\2\2\2\u0483\u010e\3\2"+ + "\2\2\u0484\u0482\3\2\2\2\u0485\u0488\5\u0111\u0089\2\u0486\u0488\5\u010b"+ + "\u0086\2\u0487\u0485\3\2\2\2\u0487\u0486\3\2\2\2\u0488\u0110\3\2\2\2\u0489"+ + "\u048a\t\4\2\2\u048a\u0112\3\2\2\2\u048b\u048c\t\5\2\2\u048c\u0114\3\2"+ + "\2\2\u048d\u0494\5\u011d\u008f\2\u048e\u0490\7)\2\2\u048f\u048e\3\2\2"+ + "\2\u048f\u0490\3\2\2\2\u0490\u0491\3\2\2\2\u0491\u0493\5\u0113\u008a\2"+ + "\u0492\u048f\3\2\2\2\u0493\u0496\3\2\2\2\u0494\u0492\3\2\2\2\u0494\u0495"+ + "\3\2\2\2\u0495\u0116\3\2\2\2\u0496\u0494\3\2\2\2\u0497\u049e\7\62\2\2"+ + "\u0498\u049a\7)\2\2\u0499\u0498\3\2\2\2\u0499\u049a\3\2\2\2\u049a\u049b"+ + "\3\2\2\2\u049b\u049d\5\u011f\u0090\2\u049c\u0499\3\2\2\2\u049d\u04a0\3"+ + "\2\2\2\u049e\u049c\3\2\2\2\u049e\u049f\3\2\2\2\u049f\u0118\3\2\2\2\u04a0"+ + "\u049e\3\2\2\2\u04a1\u04a2\7\62\2\2\u04a2\u04a6\7z\2\2\u04a3\u04a4\7\62"+ + "\2\2\u04a4\u04a6\7Z\2\2\u04a5\u04a1\3\2\2\2\u04a5\u04a3\3\2\2\2\u04a6"+ + "\u04a7\3\2\2\2\u04a7\u04ae\5\u0121\u0091\2\u04a8\u04aa\7)\2\2\u04a9\u04a8"+ + "\3\2\2\2\u04a9\u04aa\3\2\2\2\u04aa\u04ab\3\2\2\2\u04ab\u04ad\5\u0121\u0091"+ + "\2\u04ac\u04a9\3\2\2\2\u04ad\u04b0\3\2\2\2\u04ae\u04ac\3\2\2\2\u04ae\u04af"+ + "\3\2\2\2\u04af\u011a\3\2\2\2\u04b0\u04ae\3\2\2\2\u04b1\u04b2\7\62\2\2"+ + "\u04b2\u04b6\7d\2\2\u04b3\u04b4\7\62\2\2\u04b4\u04b6\7D\2\2\u04b5\u04b1"+ + "\3\2\2\2\u04b5\u04b3\3\2\2\2\u04b6\u04b7\3\2\2\2\u04b7\u04be\5\u0123\u0092"+ + "\2\u04b8\u04ba\7)\2\2\u04b9\u04b8\3\2\2\2\u04b9\u04ba\3\2\2\2\u04ba\u04bb"+ + "\3\2\2\2\u04bb\u04bd\5\u0123\u0092\2\u04bc\u04b9\3\2\2\2\u04bd\u04c0\3"+ + "\2\2\2\u04be\u04bc\3\2\2\2\u04be\u04bf\3\2\2\2\u04bf\u011c\3\2\2\2\u04c0"+ + "\u04be\3\2\2\2\u04c1\u04c2\t\6\2\2\u04c2\u011e\3\2\2\2\u04c3\u04c4\t\7"+ + "\2\2\u04c4\u0120\3\2\2\2\u04c5\u04c6\t\b\2\2\u04c6\u0122\3\2\2\2\u04c7"+ + "\u04c8\t\t\2\2\u04c8\u0124\3\2\2\2\u04c9\u04cb\5\u0127\u0094\2\u04ca\u04cc"+ + "\5\u0129\u0095\2\u04cb\u04ca\3\2\2\2\u04cb\u04cc\3\2\2\2\u04cc\u04da\3"+ + "\2\2\2\u04cd\u04cf\5\u0127\u0094\2\u04ce\u04d0\5\u012b\u0096\2\u04cf\u04ce"+ + "\3\2\2\2\u04cf\u04d0\3\2\2\2\u04d0\u04da\3\2\2\2\u04d1\u04d3\5\u0129\u0095"+ + "\2\u04d2\u04d4\5\u0127\u0094\2\u04d3\u04d2\3\2\2\2\u04d3\u04d4\3\2\2\2"+ + "\u04d4\u04da\3\2\2\2\u04d5\u04d7\5\u012b\u0096\2\u04d6\u04d8\5\u0127\u0094"+ + "\2\u04d7\u04d6\3\2\2\2\u04d7\u04d8\3\2\2\2\u04d8\u04da\3\2\2\2\u04d9\u04c9"+ + "\3\2\2\2\u04d9\u04cd\3\2\2\2\u04d9\u04d1\3\2\2\2\u04d9\u04d5\3\2\2\2\u04da"+ + "\u0126\3\2\2\2\u04db\u04dc\t\n\2\2\u04dc\u0128\3\2\2\2\u04dd\u04de\t\13"+ + "\2\2\u04de\u012a\3\2\2\2\u04df\u04e0\7n\2\2\u04e0\u04e4\7n\2\2\u04e1\u04e2"+ + "\7N\2\2\u04e2\u04e4\7N\2\2\u04e3\u04df\3\2\2\2\u04e3\u04e1\3\2\2\2\u04e4"+ + "\u012c\3\2\2\2\u04e5\u04e9\n\f\2\2\u04e6\u04e9\5\u012f\u0098\2\u04e7\u04e9"+ + "\5\u010b\u0086\2\u04e8\u04e5\3\2\2\2\u04e8\u04e6\3\2\2\2\u04e8\u04e7\3"+ + "\2\2\2\u04e9\u012e\3\2\2\2\u04ea\u04ee\5\u0131\u0099\2\u04eb\u04ee\5\u0133"+ + "\u009a\2\u04ec\u04ee\5\u0135\u009b\2\u04ed\u04ea\3\2\2\2\u04ed\u04eb\3"+ + "\2\2\2\u04ed\u04ec\3\2\2\2\u04ee\u0130\3\2\2\2\u04ef\u04f0\7^\2\2\u04f0"+ + "\u050e\7)\2\2\u04f1\u04f2\7^\2\2\u04f2\u050e\7$\2\2\u04f3\u04f4\7^\2\2"+ + "\u04f4\u050e\7A\2\2\u04f5\u04f6\7^\2\2\u04f6\u050e\7^\2\2\u04f7\u04f8"+ + "\7^\2\2\u04f8\u050e\7c\2\2\u04f9\u04fa\7^\2\2\u04fa\u050e\7d\2\2\u04fb"+ + "\u04fc\7^\2\2\u04fc\u050e\7h\2\2\u04fd\u04fe\7^\2\2\u04fe\u050e\7p\2\2"+ + "\u04ff\u0500\7^\2\2\u0500\u050e\7t\2\2\u0501\u0507\7^\2\2\u0502\u0504"+ + "\7\17\2\2\u0503\u0505\7\f\2\2\u0504\u0503\3\2\2\2\u0504\u0505\3\2\2\2"+ + "\u0505\u0508\3\2\2\2\u0506\u0508\7\f\2\2\u0507\u0502\3\2\2\2\u0507\u0506"+ + "\3\2\2\2\u0508\u050e\3\2\2\2\u0509\u050a\7^\2\2\u050a\u050e\7v\2\2\u050b"+ + "\u050c\7^\2\2\u050c\u050e\7x\2\2\u050d\u04ef\3\2\2\2\u050d\u04f1\3\2\2"+ + "\2\u050d\u04f3\3\2\2\2\u050d\u04f5\3\2\2\2\u050d\u04f7\3\2\2\2\u050d\u04f9"+ + "\3\2\2\2\u050d\u04fb\3\2\2\2\u050d\u04fd\3\2\2\2\u050d\u04ff\3\2\2\2\u050d"+ + "\u0501\3\2\2\2\u050d\u0509\3\2\2\2\u050d\u050b\3\2\2\2\u050e\u0132\3\2"+ + "\2\2\u050f\u0510\7^\2\2\u0510\u051b\5\u011f\u0090\2\u0511\u0512\7^\2\2"+ + "\u0512\u0513\5\u011f\u0090\2\u0513\u0514\5\u011f\u0090\2\u0514\u051b\3"+ + "\2\2\2\u0515\u0516\7^\2\2\u0516\u0517\5\u011f\u0090\2\u0517\u0518\5\u011f"+ + "\u0090\2\u0518\u0519\5\u011f\u0090\2\u0519\u051b\3\2\2\2\u051a\u050f\3"+ + "\2\2\2\u051a\u0511\3\2\2\2\u051a\u0515\3\2\2\2\u051b\u0134\3\2\2\2\u051c"+ + "\u051d\7^\2\2\u051d\u051e\7z\2\2\u051e\u0520\3\2\2\2\u051f\u0521\5\u0121"+ + "\u0091\2\u0520\u051f\3\2\2\2\u0521\u0522\3\2\2\2\u0522\u0520\3\2\2\2\u0522"+ + "\u0523\3\2\2\2\u0523\u0136\3\2\2\2\u0524\u0526\5\u013d\u009f\2\u0525\u0524"+ + "\3\2\2\2\u0525\u0526\3\2\2\2\u0526\u0527\3\2\2\2\u0527\u0528\7\60\2\2"+ + "\u0528\u052d\5\u013d\u009f\2\u0529\u052a\5\u013d\u009f\2\u052a\u052b\7"+ + "\60\2\2\u052b\u052d\3\2\2\2\u052c\u0525\3\2\2\2\u052c\u0529\3\2\2\2\u052d"+ + "\u0138\3\2\2\2\u052e\u0530\7g\2\2\u052f\u0531\5\u013b\u009e\2\u0530\u052f"+ + "\3\2\2\2\u0530\u0531\3\2\2\2\u0531\u0532\3\2\2\2\u0532\u0539\5\u013d\u009f"+ + "\2\u0533\u0535\7G\2\2\u0534\u0536\5\u013b\u009e\2\u0535\u0534\3\2\2\2"+ + "\u0535\u0536\3\2\2\2\u0536\u0537\3\2\2\2\u0537\u0539\5\u013d\u009f\2\u0538"+ + "\u052e\3\2\2\2\u0538\u0533\3\2\2\2\u0539\u013a\3\2\2\2\u053a\u053b\t\r"+ + "\2\2\u053b\u013c\3\2\2\2\u053c\u0543\5\u0113\u008a\2\u053d\u053f\7)\2"+ + "\2\u053e\u053d\3\2\2\2\u053e\u053f\3\2\2\2\u053f\u0540\3\2\2\2\u0540\u0542"+ + "\5\u0113\u008a\2\u0541\u053e\3\2\2\2\u0542\u0545\3\2\2\2\u0543\u0541\3"+ + "\2\2\2\u0543\u0544\3\2\2\2\u0544\u013e\3\2\2\2\u0545\u0543\3\2\2\2\u0546"+ + "\u0547\t\16\2\2\u0547\u0140\3\2\2\2\u0548\u0549\7w\2\2\u0549\u054c\7:"+ + "\2\2\u054a\u054c\t\2\2\2\u054b\u0548\3\2\2\2\u054b\u054a\3\2\2\2\u054c"+ + "\u0142\3\2\2\2\u054d\u0551\n\17\2\2\u054e\u0551\5\u012f\u0098\2\u054f"+ + "\u0551\5\u010b\u0086\2\u0550\u054d\3\2\2\2\u0550\u054e\3\2\2\2\u0550\u054f"+ + "\3\2\2\2\u0551\u0144\3\2\2\2\u0552\u0556\7$\2\2\u0553\u0555\n\20\2\2\u0554"+ + "\u0553\3\2\2\2\u0555\u0558\3\2\2\2\u0556\u0554\3\2\2\2\u0556\u0557\3\2"+ + "\2\2\u0557\u0559\3\2\2\2\u0558\u0556\3\2\2\2\u0559\u055d\7*\2\2\u055a"+ + "\u055c\n\21\2\2\u055b\u055a\3\2\2\2\u055c\u055f\3\2\2\2\u055d\u055b\3"+ + "\2\2\2\u055d\u055e\3\2\2\2\u055e\u0560\3\2\2\2\u055f\u055d\3\2\2\2\u0560"+ + "\u0564\7+\2\2\u0561\u0563\n\22\2\2\u0562\u0561\3\2\2\2\u0563\u0566\3\2"+ + "\2\2\u0564\u0562\3\2\2\2\u0564\u0565\3\2\2\2\u0565\u0567\3\2\2\2\u0566"+ + "\u0564\3\2\2\2\u0567\u0568\7$\2\2\u0568\u0146\3\2\2\2\u0569\u056a\5\u0115"+ + "\u008b\2\u056a\u056b\5\u014f\u00a8\2\u056b\u0576\3\2\2\2\u056c\u056d\5"+ + "\u0117\u008c\2\u056d\u056e\5\u014f\u00a8\2\u056e\u0576\3\2\2\2\u056f\u0570"+ + "\5\u0119\u008d\2\u0570\u0571\5\u014f\u00a8\2\u0571\u0576\3\2\2\2\u0572"+ + "\u0573\5\u011b\u008e\2\u0573\u0574\5\u014f\u00a8\2\u0574\u0576\3\2\2\2"+ + "\u0575\u0569\3\2\2\2\u0575\u056c\3\2\2\2\u0575\u056f\3\2\2\2\u0575\u0572"+ + "\3\2\2\2\u0576\u0148\3\2\2\2\u0577\u0579\5\u0137\u009c\2\u0578\u057a\5"+ + "\u0139\u009d\2\u0579\u0578\3\2\2\2\u0579\u057a\3\2\2\2\u057a\u057b\3\2"+ + "\2\2\u057b\u057c\5\u014f\u00a8\2\u057c\u0582\3\2\2\2\u057d\u057e\5\u013d"+ + "\u009f\2\u057e\u057f\5\u0139\u009d\2\u057f\u0580\5\u014f\u00a8\2\u0580"+ + "\u0582\3\2\2\2\u0581\u0577\3\2\2\2\u0581\u057d\3\2\2\2\u0582\u014a\3\2"+ + "\2\2\u0583\u0584\5\t\5\2\u0584\u0585\5\u014f\u00a8\2\u0585\u014c\3\2\2"+ + "\2\u0586\u0587\5\5\3\2\u0587\u0588\5\u014f\u00a8\2\u0588\u014e\3\2\2\2"+ + "\u0589\u058a\5\u010d\u0087\2\u058a\u0150\3\2\2\2\u058b\u058d\t\23\2\2"+ + "\u058c\u058b\3\2\2\2\u058d\u058e\3\2\2\2\u058e\u058c\3\2\2\2\u058e\u058f"+ + "\3\2\2\2\u058f\u0590\3\2\2\2\u0590\u0591\b\u00a9\3\2\u0591\u0152\3\2\2"+ + "\2\u0592\u0594\7\17\2\2\u0593\u0595\7\f\2\2\u0594\u0593\3\2\2\2\u0594"+ + "\u0595\3\2\2\2\u0595\u0598\3\2\2\2\u0596\u0598\7\f\2\2\u0597\u0592\3\2"+ + "\2\2\u0597\u0596\3\2\2\2\u0598\u0599\3\2\2\2\u0599\u059a\b\u00aa\3\2\u059a"+ + "\u0154\3\2\2\2\u059b\u059c\7\61\2\2\u059c\u059d\7,\2\2\u059d\u05a1\3\2"+ + "\2\2\u059e\u05a0\13\2\2\2\u059f\u059e\3\2\2\2\u05a0\u05a3\3\2\2\2\u05a1"+ + "\u05a2\3\2\2\2\u05a1\u059f\3\2\2\2\u05a2\u05a4\3\2\2\2\u05a3\u05a1\3\2"+ + "\2\2\u05a4\u05a5\7,\2\2\u05a5\u05a6\7\61\2\2\u05a6\u05a7\3\2\2\2\u05a7"+ + "\u05a8\b\u00ab\3\2\u05a8\u0156\3\2\2\2\u05a9\u05aa\7\61\2\2\u05aa\u05ab"+ + "\7\61\2\2\u05ab\u05af\3\2\2\2\u05ac\u05ae\n\24\2\2\u05ad\u05ac\3\2\2\2"+ + "\u05ae\u05b1\3\2\2\2\u05af\u05ad\3\2\2\2\u05af\u05b0\3\2\2\2\u05b0\u05b2"+ + "\3\2\2\2\u05b1\u05af\3\2\2\2\u05b2\u05b3\b\u00ac\3\2\u05b3\u0158\3\2\2"+ + "\2K\2\u015b\u015f\u0163\u0167\u0169\u016c\u0172\u0178\u017b\u0180\u0182"+ + "\u0185\u018b\u0190\u0194\u0198\u01a0\u01a6\u01ab\u01b0\u01b5\u01bd\u040a"+ + "\u0443\u0449\u047b\u0480\u0482\u0487\u048f\u0494\u0499\u049e\u04a5\u04a9"+ + "\u04ae\u04b5\u04b9\u04be\u04cb\u04cf\u04d3\u04d7\u04d9\u04e3\u04e8\u04ed"+ + "\u0504\u0507\u050d\u051a\u0522\u0525\u052c\u0530\u0535\u0538\u053e\u0543"+ + "\u054b\u0550\u0556\u055d\u0564\u0575\u0579\u0581\u058e\u0594\u0597\u05a1"+ + "\u05af\4\2\3\2\b\2\2"; + public static final ATN _ATN = + new ATNDeserializer().deserialize(_serializedATN.toCharArray()); + static { + _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()]; + for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) { + _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i); + } + } +} \ No newline at end of file diff --git a/lexers/src/main/java/com/itsaky/androidide/lexers/cpp/CPP14Lexer.tokens b/lexers/src/main/java/com/itsaky/androidide/lexers/cpp/CPP14Lexer.tokens new file mode 100644 index 000000000..97906afe4 --- /dev/null +++ b/lexers/src/main/java/com/itsaky/androidide/lexers/cpp/CPP14Lexer.tokens @@ -0,0 +1,264 @@ +IntegerLiteral=1 +CharacterLiteral=2 +FloatingLiteral=3 +StringLiteral=4 +BooleanLiteral=5 +PointerLiteral=6 +UserDefinedLiteral=7 +MultiLineMacro=8 +Directive=9 +Alignas=10 +Alignof=11 +Asm=12 +Auto=13 +Bool=14 +Break=15 +Case=16 +Catch=17 +Char=18 +Char16=19 +Char32=20 +Class=21 +Const=22 +Constexpr=23 +Const_cast=24 +Continue=25 +Decltype=26 +Default=27 +Delete=28 +Do=29 +Double=30 +Dynamic_cast=31 +Else=32 +Enum=33 +Explicit=34 +Export=35 +Extern=36 +False_=37 +Final=38 +Float=39 +For=40 +Friend=41 +Goto=42 +If=43 +Inline=44 +Int=45 +Long=46 +Mutable=47 +Namespace=48 +New=49 +Noexcept=50 +Nullptr=51 +Operator=52 +Override=53 +Private=54 +Protected=55 +Public=56 +Register=57 +Reinterpret_cast=58 +Return=59 +Short=60 +Signed=61 +Sizeof=62 +Static=63 +Static_assert=64 +Static_cast=65 +Struct=66 +Switch=67 +Template=68 +This=69 +Thread_local=70 +Throw=71 +True_=72 +Try=73 +Typedef=74 +Typeid_=75 +Typename_=76 +Union=77 +Unsigned=78 +Using=79 +Virtual=80 +Void=81 +Volatile=82 +Wchar=83 +While=84 +LeftParen=85 +RightParen=86 +LeftBracket=87 +RightBracket=88 +LeftBrace=89 +RightBrace=90 +Plus=91 +Minus=92 +Star=93 +Div=94 +Mod=95 +Caret=96 +And=97 +Or=98 +Tilde=99 +Not=100 +Assign=101 +Less=102 +Greater=103 +PlusAssign=104 +MinusAssign=105 +StarAssign=106 +DivAssign=107 +ModAssign=108 +XorAssign=109 +AndAssign=110 +OrAssign=111 +LeftShiftAssign=112 +RightShiftAssign=113 +Equal=114 +NotEqual=115 +LessEqual=116 +GreaterEqual=117 +AndAnd=118 +OrOr=119 +PlusPlus=120 +MinusMinus=121 +Comma=122 +ArrowStar=123 +Arrow=124 +Question=125 +Colon=126 +Doublecolon=127 +Semi=128 +Dot=129 +DotStar=130 +Ellipsis=131 +Identifier=132 +DecimalLiteral=133 +OctalLiteral=134 +HexadecimalLiteral=135 +BinaryLiteral=136 +Integersuffix=137 +UserDefinedIntegerLiteral=138 +UserDefinedFloatingLiteral=139 +UserDefinedStringLiteral=140 +UserDefinedCharacterLiteral=141 +Whitespace=142 +Newline=143 +BlockComment=144 +LineComment=145 +'alignas'=10 +'alignof'=11 +'asm'=12 +'auto'=13 +'bool'=14 +'break'=15 +'case'=16 +'catch'=17 +'char'=18 +'char16_t'=19 +'char32_t'=20 +'class'=21 +'const'=22 +'constexpr'=23 +'const_cast'=24 +'continue'=25 +'decltype'=26 +'default'=27 +'delete'=28 +'do'=29 +'double'=30 +'dynamic_cast'=31 +'else'=32 +'enum'=33 +'explicit'=34 +'export'=35 +'extern'=36 +'false'=37 +'final'=38 +'float'=39 +'for'=40 +'friend'=41 +'goto'=42 +'if'=43 +'inline'=44 +'int'=45 +'long'=46 +'mutable'=47 +'namespace'=48 +'new'=49 +'noexcept'=50 +'nullptr'=51 +'operator'=52 +'override'=53 +'private'=54 +'protected'=55 +'public'=56 +'register'=57 +'reinterpret_cast'=58 +'return'=59 +'short'=60 +'signed'=61 +'sizeof'=62 +'static'=63 +'static_assert'=64 +'static_cast'=65 +'struct'=66 +'switch'=67 +'template'=68 +'this'=69 +'thread_local'=70 +'throw'=71 +'true'=72 +'try'=73 +'typedef'=74 +'typeid'=75 +'typename'=76 +'union'=77 +'unsigned'=78 +'using'=79 +'virtual'=80 +'void'=81 +'volatile'=82 +'wchar_t'=83 +'while'=84 +'('=85 +')'=86 +'['=87 +']'=88 +'{'=89 +'}'=90 +'+'=91 +'-'=92 +'*'=93 +'/'=94 +'%'=95 +'^'=96 +'&'=97 +'|'=98 +'~'=99 +'='=101 +'<'=102 +'>'=103 +'+='=104 +'-='=105 +'*='=106 +'/='=107 +'%='=108 +'^='=109 +'&='=110 +'|='=111 +'<<='=112 +'>>='=113 +'=='=114 +'!='=115 +'<='=116 +'>='=117 +'++'=120 +'--'=121 +','=122 +'->*'=123 +'->'=124 +'?'=125 +':'=126 +'::'=127 +';'=128 +'.'=129 +'.*'=130 +'...'=131 diff --git a/lexers/src/main/java/com/itsaky/androidide/lexers/cpp/CPP14Parser.g4 b/lexers/src/main/java/com/itsaky/androidide/lexers/cpp/CPP14Parser.g4 new file mode 100644 index 000000000..6c4d84854 --- /dev/null +++ b/lexers/src/main/java/com/itsaky/androidide/lexers/cpp/CPP14Parser.g4 @@ -0,0 +1,823 @@ +/******************************************************************************* + * The MIT License (MIT) + * + * Copyright (c) 2015 Camilo Sanchez (Camiloasc1) 2020 Martin Mirchev (Marti2203) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and + * associated documentation files (the "Software"), to deal in the Software without restriction, + * including without limitation the rights to use, copy, modify, merge, publish, distribute, + * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all copies or + * substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT + * NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, + * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + * **************************************************************************** + */ +parser grammar CPP14Parser; +options { + tokenVocab = CPP14Lexer; +} +/*Basic concepts*/ + +translationUnit: declarationseq? EOF; +/*Expressions*/ + +primaryExpression: + literal+ + | This + | LeftParen expression RightParen + | idExpression + | lambdaExpression; + +idExpression: unqualifiedId | qualifiedId; + +unqualifiedId: + Identifier + | operatorFunctionId + | conversionFunctionId + | literalOperatorId + | Tilde (className | decltypeSpecifier) + | templateId; + +qualifiedId: nestedNameSpecifier Template? unqualifiedId; + +nestedNameSpecifier: + (theTypeName | namespaceName | decltypeSpecifier)? Doublecolon + | nestedNameSpecifier ( + Identifier + | Template? simpleTemplateId + ) Doublecolon; +lambdaExpression: + lambdaIntroducer lambdaDeclarator? compoundStatement; + +lambdaIntroducer: LeftBracket lambdaCapture? RightBracket; + +lambdaCapture: + captureList + | captureDefault (Comma captureList)?; + +captureDefault: And | Assign; + +captureList: capture (Comma capture)* Ellipsis?; + +capture: simpleCapture | initcapture; + +simpleCapture: And? Identifier | This; + +initcapture: And? Identifier initializer; + +lambdaDeclarator: + LeftParen parameterDeclarationClause? RightParen Mutable? exceptionSpecification? + attributeSpecifierSeq? trailingReturnType?; + +postfixExpression: + primaryExpression + | postfixExpression LeftBracket (expression | bracedInitList) RightBracket + | postfixExpression LeftParen expressionList? RightParen + | (simpleTypeSpecifier | typeNameSpecifier) ( + LeftParen expressionList? RightParen + | bracedInitList + ) + | postfixExpression (Dot | Arrow) ( + Template? idExpression + | pseudoDestructorName + ) + | postfixExpression (PlusPlus | MinusMinus) + | ( + Dynamic_cast + | Static_cast + | Reinterpret_cast + | Const_cast + ) Less theTypeId Greater LeftParen expression RightParen + | typeIdOfTheTypeId LeftParen (expression | theTypeId) RightParen; +/* + add a middle layer to eliminate duplicated function declarations + */ + +typeIdOfTheTypeId: Typeid_; + +expressionList: initializerList; + +pseudoDestructorName: + nestedNameSpecifier? (theTypeName Doublecolon)? Tilde theTypeName + | nestedNameSpecifier Template simpleTemplateId Doublecolon Tilde theTypeName + | Tilde decltypeSpecifier; + +unaryExpression: + postfixExpression + | (PlusPlus | MinusMinus | unaryOperator | Sizeof) unaryExpression + | Sizeof ( + LeftParen theTypeId RightParen + | Ellipsis LeftParen Identifier RightParen + ) + | Alignof LeftParen theTypeId RightParen + | noExceptExpression + | newExpression + | deleteExpression; + +unaryOperator: Or | Star | And | Plus | Tilde | Minus | Not; + +newExpression: + Doublecolon? New newPlacement? ( + newTypeId + | (LeftParen theTypeId RightParen) + ) newInitializer?; + +newPlacement: LeftParen expressionList RightParen; + +newTypeId: typeSpecifierSeq newDeclarator?; + +newDeclarator: + pointerOperator newDeclarator? + | noPointerNewDeclarator; + +noPointerNewDeclarator: + LeftBracket expression RightBracket attributeSpecifierSeq? + | noPointerNewDeclarator LeftBracket constantExpression RightBracket attributeSpecifierSeq?; + +newInitializer: + LeftParen expressionList? RightParen + | bracedInitList; + +deleteExpression: + Doublecolon? Delete (LeftBracket RightBracket)? castExpression; + +noExceptExpression: Noexcept LeftParen expression RightParen; + +castExpression: + unaryExpression + | LeftParen theTypeId RightParen castExpression; + +pointerMemberExpression: + castExpression ((DotStar | ArrowStar) castExpression)*; + +multiplicativeExpression: + pointerMemberExpression ( + (Star | Div | Mod) pointerMemberExpression + )*; + +additiveExpression: + multiplicativeExpression ( + (Plus | Minus) multiplicativeExpression + )*; + +shiftExpression: + additiveExpression (shiftOperator additiveExpression)*; + +shiftOperator: Greater Greater | Less Less; + +relationalExpression: + shiftExpression ( + (Less | Greater | LessEqual | GreaterEqual) shiftExpression + )*; + +equalityExpression: + relationalExpression ( + (Equal | NotEqual) relationalExpression + )*; + +andExpression: equalityExpression (And equalityExpression)*; + +exclusiveOrExpression: andExpression (Caret andExpression)*; + +inclusiveOrExpression: + exclusiveOrExpression (Or exclusiveOrExpression)*; + +logicalAndExpression: + inclusiveOrExpression (AndAnd inclusiveOrExpression)*; + +logicalOrExpression: + logicalAndExpression (OrOr logicalAndExpression)*; + +conditionalExpression: + logicalOrExpression ( + Question expression Colon assignmentExpression + )?; + +assignmentExpression: + conditionalExpression + | logicalOrExpression assignmentOperator initializerClause + | throwExpression; + +assignmentOperator: + Assign + | StarAssign + | DivAssign + | ModAssign + | PlusAssign + | MinusAssign + | RightShiftAssign + | LeftShiftAssign + | AndAssign + | XorAssign + | OrAssign; + +expression: assignmentExpression (Comma assignmentExpression)*; + +constantExpression: conditionalExpression; +/*Statements*/ + +statement: + labeledStatement + | declarationStatement + | attributeSpecifierSeq? ( + expressionStatement + | compoundStatement + | selectionStatement + | iterationStatement + | jumpStatement + | tryBlock + ); + +labeledStatement: + attributeSpecifierSeq? ( + Identifier + | Case constantExpression + | Default + ) Colon statement; + +expressionStatement: expression? Semi; + +compoundStatement: LeftBrace statementSeq? RightBrace; + +statementSeq: statement+; + +selectionStatement: + If LeftParen condition RightParen statement (Else statement)? + | Switch LeftParen condition RightParen statement; + +condition: + expression + | attributeSpecifierSeq? declSpecifierSeq declarator ( + Assign initializerClause + | bracedInitList + ); + +iterationStatement: + While LeftParen condition RightParen statement + | Do statement While LeftParen expression RightParen Semi + | For LeftParen ( + forInitStatement condition? Semi expression? + | forRangeDeclaration Colon forRangeInitializer + ) RightParen statement; + +forInitStatement: expressionStatement | simpleDeclaration; + +forRangeDeclaration: + attributeSpecifierSeq? declSpecifierSeq declarator; + +forRangeInitializer: expression | bracedInitList; + +jumpStatement: + ( + Break + | Continue + | Return (expression | bracedInitList)? + | Goto Identifier + ) Semi; + +declarationStatement: blockDeclaration; +/*Declarations*/ + +declarationseq: declaration+; + +declaration: + blockDeclaration + | functionDefinition + | templateDeclaration + | explicitInstantiation + | explicitSpecialization + | linkageSpecification + | namespaceDefinition + | emptyDeclaration + | attributeDeclaration; + +blockDeclaration: + simpleDeclaration + | asmDefinition + | namespaceAliasDefinition + | usingDeclaration + | usingDirective + | staticAssertDeclaration + | aliasDeclaration + | opaqueEnumDeclaration; + +aliasDeclaration: + Using Identifier attributeSpecifierSeq? Assign theTypeId Semi; + +simpleDeclaration: + declSpecifierSeq? initDeclaratorList? Semi + | attributeSpecifierSeq declSpecifierSeq? initDeclaratorList Semi; + +staticAssertDeclaration: + Static_assert LeftParen constantExpression Comma StringLiteral RightParen Semi; + +emptyDeclaration: Semi; + +attributeDeclaration: attributeSpecifierSeq Semi; + +declSpecifier: + storageClassSpecifier + | typeSpecifier + | functionSpecifier + | Friend + | Typedef + | Constexpr; + +declSpecifierSeq: declSpecifier+? attributeSpecifierSeq?; + +storageClassSpecifier: + Register + | Static + | Thread_local + | Extern + | Mutable; + +functionSpecifier: Inline | Virtual | Explicit; + +typedefName: Identifier; + +typeSpecifier: + trailingTypeSpecifier + | classSpecifier + | enumSpecifier; + +trailingTypeSpecifier: + simpleTypeSpecifier + | elaboratedTypeSpecifier + | typeNameSpecifier + | cvQualifier; + +typeSpecifierSeq: typeSpecifier+ attributeSpecifierSeq?; + +trailingTypeSpecifierSeq: + trailingTypeSpecifier+ attributeSpecifierSeq?; + +simpleTypeLengthModifier: + Short + | Long; + +simpleTypeSignednessModifier: + Unsigned + | Signed; + +simpleTypeSpecifier: + nestedNameSpecifier? theTypeName + | nestedNameSpecifier Template simpleTemplateId + | simpleTypeSignednessModifier + | simpleTypeSignednessModifier? simpleTypeLengthModifier+ + | simpleTypeSignednessModifier? Char + | simpleTypeSignednessModifier? Char16 + | simpleTypeSignednessModifier? Char32 + | simpleTypeSignednessModifier? Wchar + | Bool + | simpleTypeSignednessModifier? simpleTypeLengthModifier* Int + | Float + | simpleTypeLengthModifier? Double + | Void + | Auto + | decltypeSpecifier; + +theTypeName: + className + | enumName + | typedefName + | simpleTemplateId; + +decltypeSpecifier: + Decltype LeftParen (expression | Auto) RightParen; + +elaboratedTypeSpecifier: + classKey ( + attributeSpecifierSeq? nestedNameSpecifier? Identifier + | simpleTemplateId + | nestedNameSpecifier Template? simpleTemplateId + ) + | Enum nestedNameSpecifier? Identifier; + +enumName: Identifier; + +enumSpecifier: + enumHead LeftBrace (enumeratorList Comma?)? RightBrace; + +enumHead: + enumkey attributeSpecifierSeq? ( + nestedNameSpecifier? Identifier + )? enumbase?; + +opaqueEnumDeclaration: + enumkey attributeSpecifierSeq? Identifier enumbase? Semi; + +enumkey: Enum (Class | Struct)?; + +enumbase: Colon typeSpecifierSeq; + +enumeratorList: + enumeratorDefinition (Comma enumeratorDefinition)*; + +enumeratorDefinition: enumerator (Assign constantExpression)?; + +enumerator: Identifier; + +namespaceName: originalNamespaceName | namespaceAlias; + +originalNamespaceName: Identifier; + +namespaceDefinition: + Inline? Namespace (Identifier | originalNamespaceName)? LeftBrace namespaceBody = declarationseq + ? RightBrace; + +namespaceAlias: Identifier; + +namespaceAliasDefinition: + Namespace Identifier Assign qualifiednamespacespecifier Semi; + +qualifiednamespacespecifier: nestedNameSpecifier? namespaceName; + +usingDeclaration: + Using ((Typename_? nestedNameSpecifier) | Doublecolon) unqualifiedId Semi; + +usingDirective: + attributeSpecifierSeq? Using Namespace nestedNameSpecifier? namespaceName Semi; + +asmDefinition: Asm LeftParen StringLiteral RightParen Semi; + +linkageSpecification: + Extern StringLiteral ( + LeftBrace declarationseq? RightBrace + | declaration + ); + +attributeSpecifierSeq: attributeSpecifier+; + +attributeSpecifier: + LeftBracket LeftBracket attributeList? RightBracket RightBracket + | alignmentspecifier; + +alignmentspecifier: + Alignas LeftParen (theTypeId | constantExpression) Ellipsis? RightParen; + +attributeList: attribute (Comma attribute)* Ellipsis?; + +attribute: (attributeNamespace Doublecolon)? Identifier attributeArgumentClause?; + +attributeNamespace: Identifier; + +attributeArgumentClause: LeftParen balancedTokenSeq? RightParen; + +balancedTokenSeq: balancedtoken+; + +balancedtoken: + LeftParen balancedTokenSeq RightParen + | LeftBracket balancedTokenSeq RightBracket + | LeftBrace balancedTokenSeq RightBrace + | ~( + LeftParen + | RightParen + | LeftBrace + | RightBrace + | LeftBracket + | RightBracket + )+; +/*Declarators*/ + +initDeclaratorList: initDeclarator (Comma initDeclarator)*; + +initDeclarator: declarator initializer?; + +declarator: + pointerDeclarator + | noPointerDeclarator parametersAndQualifiers trailingReturnType; + +pointerDeclarator: (pointerOperator Const?)* noPointerDeclarator; + +noPointerDeclarator: + declaratorid attributeSpecifierSeq? + | noPointerDeclarator ( + parametersAndQualifiers + | LeftBracket constantExpression? RightBracket attributeSpecifierSeq? + ) + | LeftParen pointerDeclarator RightParen; + +parametersAndQualifiers: + LeftParen parameterDeclarationClause? RightParen cvqualifierseq? refqualifier? + exceptionSpecification? attributeSpecifierSeq?; + +trailingReturnType: + Arrow trailingTypeSpecifierSeq abstractDeclarator?; + +pointerOperator: + (And | AndAnd) attributeSpecifierSeq? + | nestedNameSpecifier? Star attributeSpecifierSeq? cvqualifierseq?; + +cvqualifierseq: cvQualifier+; + +cvQualifier: Const | Volatile; + +refqualifier: And | AndAnd; + +declaratorid: Ellipsis? idExpression; + +theTypeId: typeSpecifierSeq abstractDeclarator?; + +abstractDeclarator: + pointerAbstractDeclarator + | noPointerAbstractDeclarator? parametersAndQualifiers trailingReturnType + | abstractPackDeclarator; + +pointerAbstractDeclarator: + noPointerAbstractDeclarator + | pointerOperator+ noPointerAbstractDeclarator?; + +noPointerAbstractDeclarator: + noPointerAbstractDeclarator ( + parametersAndQualifiers + | noPointerAbstractDeclarator LeftBracket constantExpression? RightBracket + attributeSpecifierSeq? + ) + | parametersAndQualifiers + | LeftBracket constantExpression? RightBracket attributeSpecifierSeq? + | LeftParen pointerAbstractDeclarator RightParen; + +abstractPackDeclarator: + pointerOperator* noPointerAbstractPackDeclarator; + +noPointerAbstractPackDeclarator: + noPointerAbstractPackDeclarator ( + parametersAndQualifiers + | LeftBracket constantExpression? RightBracket attributeSpecifierSeq? + ) + | Ellipsis; + +parameterDeclarationClause: + parameterDeclarationList (Comma? Ellipsis)?; + +parameterDeclarationList: + parameterDeclaration (Comma parameterDeclaration)*; + +parameterDeclaration: + attributeSpecifierSeq? declSpecifierSeq ( + (declarator | abstractDeclarator?) ( + Assign initializerClause + )? + ); + +functionDefinition: + attributeSpecifierSeq? declSpecifierSeq? declarator virtualSpecifierSeq? functionBody; + +functionBody: + constructorInitializer? compoundStatement + | functionTryBlock + | Assign (Default | Delete) Semi; + +initializer: + braceOrEqualInitializer + | LeftParen expressionList RightParen; + +braceOrEqualInitializer: + Assign initializerClause + | bracedInitList; + +initializerClause: assignmentExpression | bracedInitList; + +initializerList: + initializerClause Ellipsis? ( + Comma initializerClause Ellipsis? + )*; + +bracedInitList: LeftBrace (initializerList Comma?)? RightBrace; +/*Classes*/ + +className: Identifier | simpleTemplateId; + +classSpecifier: + classHead LeftBrace memberSpecification? RightBrace; + +classHead: + classKey attributeSpecifierSeq? ( + classHeadName classVirtSpecifier? + )? baseClause? + | Union attributeSpecifierSeq? ( + classHeadName classVirtSpecifier? + )?; + +classHeadName: nestedNameSpecifier? className; + +classVirtSpecifier: Final; + +classKey: Class | Struct; + +memberSpecification: + (memberdeclaration | accessSpecifier Colon)+; + +memberdeclaration: + attributeSpecifierSeq? declSpecifierSeq? memberDeclaratorList? Semi + | functionDefinition + | usingDeclaration + | staticAssertDeclaration + | templateDeclaration + | aliasDeclaration + | emptyDeclaration; + +memberDeclaratorList: + memberDeclarator (Comma memberDeclarator)*; + +memberDeclarator: + declarator ( + virtualSpecifierSeq? pureSpecifier? + | braceOrEqualInitializer? + ) + | Identifier? attributeSpecifierSeq? Colon constantExpression; + +virtualSpecifierSeq: virtualSpecifier+; + +virtualSpecifier: Override | Final; +/* + purespecifier: Assign '0'//Conflicts with the lexer ; + */ + +pureSpecifier: + Assign val = OctalLiteral {if($val.text.compareTo("0")!=0) throw new InputMismatchException(this); + }; +/*Derived classes*/ + +baseClause: Colon baseSpecifierList; + +baseSpecifierList: + baseSpecifier Ellipsis? (Comma baseSpecifier Ellipsis?)*; + +baseSpecifier: + attributeSpecifierSeq? ( + baseTypeSpecifier + | Virtual accessSpecifier? baseTypeSpecifier + | accessSpecifier Virtual? baseTypeSpecifier + ); + +classOrDeclType: + nestedNameSpecifier? className + | decltypeSpecifier; + +baseTypeSpecifier: classOrDeclType; + +accessSpecifier: Private | Protected | Public; +/*Special member functions*/ + +conversionFunctionId: Operator conversionTypeId; + +conversionTypeId: typeSpecifierSeq conversionDeclarator?; + +conversionDeclarator: pointerOperator conversionDeclarator?; + +constructorInitializer: Colon memInitializerList; + +memInitializerList: + memInitializer Ellipsis? (Comma memInitializer Ellipsis?)*; + +memInitializer: + meminitializerid ( + LeftParen expressionList? RightParen + | bracedInitList + ); + +meminitializerid: classOrDeclType | Identifier; +/*Overloading*/ + +operatorFunctionId: Operator theOperator; + +literalOperatorId: + Operator ( + StringLiteral Identifier + | UserDefinedStringLiteral + ); +/*Templates*/ + +templateDeclaration: + Template Less templateparameterList Greater declaration; + +templateparameterList: + templateParameter (Comma templateParameter)*; + +templateParameter: typeParameter | parameterDeclaration; + +typeParameter: + ( + (Template Less templateparameterList Greater)? Class + | Typename_ + ) ((Ellipsis? Identifier?) | (Identifier? Assign theTypeId)); + +simpleTemplateId: + templateName Less templateArgumentList? Greater; + +templateId: + simpleTemplateId + | (operatorFunctionId | literalOperatorId) Less templateArgumentList? Greater; + +templateName: Identifier; + +templateArgumentList: + templateArgument Ellipsis? (Comma templateArgument Ellipsis?)*; + +templateArgument: theTypeId | constantExpression | idExpression; + +typeNameSpecifier: + Typename_ nestedNameSpecifier ( + Identifier + | Template? simpleTemplateId + ); + +explicitInstantiation: Extern? Template declaration; + +explicitSpecialization: Template Less Greater declaration; +/*Exception handling*/ + +tryBlock: Try compoundStatement handlerSeq; + +functionTryBlock: + Try constructorInitializer? compoundStatement handlerSeq; + +handlerSeq: handler+; + +handler: + Catch LeftParen exceptionDeclaration RightParen compoundStatement; + +exceptionDeclaration: + attributeSpecifierSeq? typeSpecifierSeq ( + declarator + | abstractDeclarator + )? + | Ellipsis; + +throwExpression: Throw assignmentExpression?; + +exceptionSpecification: + dynamicExceptionSpecification + | noeExceptSpecification; + +dynamicExceptionSpecification: + Throw LeftParen typeIdList? RightParen; + +typeIdList: theTypeId Ellipsis? (Comma theTypeId Ellipsis?)*; + +noeExceptSpecification: + Noexcept LeftParen constantExpression RightParen + | Noexcept; +/*Preprocessing directives*/ + +/*Lexer*/ + +theOperator: + New (LeftBracket RightBracket)? + | Delete (LeftBracket RightBracket)? + | Plus + | Minus + | Star + | Div + | Mod + | Caret + | And + | Or + | Tilde + | Not + | Assign + | Greater + | Less + | GreaterEqual + | PlusAssign + | MinusAssign + | StarAssign + | ModAssign + | XorAssign + | AndAssign + | OrAssign + | Less Less + | Greater Greater + | RightShiftAssign + | LeftShiftAssign + | Equal + | NotEqual + | LessEqual + | AndAnd + | OrOr + | PlusPlus + | MinusMinus + | Comma + | ArrowStar + | Arrow + | LeftParen RightParen + | LeftBracket RightBracket; + +literal: + IntegerLiteral + | CharacterLiteral + | FloatingLiteral + | StringLiteral + | BooleanLiteral + | PointerLiteral + | UserDefinedLiteral; + diff --git a/lexers/src/main/java/com/itsaky/androidide/lexers/cpp/CPP14Parser.interp b/lexers/src/main/java/com/itsaky/androidide/lexers/cpp/CPP14Parser.interp new file mode 100644 index 000000000..58bb3437d --- /dev/null +++ b/lexers/src/main/java/com/itsaky/androidide/lexers/cpp/CPP14Parser.interp @@ -0,0 +1,490 @@ +token literal names: +null +null +null +null +null +null +null +null +null +null +'alignas' +'alignof' +'asm' +'auto' +'bool' +'break' +'case' +'catch' +'char' +'char16_t' +'char32_t' +'class' +'const' +'constexpr' +'const_cast' +'continue' +'decltype' +'default' +'delete' +'do' +'double' +'dynamic_cast' +'else' +'enum' +'explicit' +'export' +'extern' +'false' +'final' +'float' +'for' +'friend' +'goto' +'if' +'inline' +'int' +'long' +'mutable' +'namespace' +'new' +'noexcept' +'nullptr' +'operator' +'override' +'private' +'protected' +'public' +'register' +'reinterpret_cast' +'return' +'short' +'signed' +'sizeof' +'static' +'static_assert' +'static_cast' +'struct' +'switch' +'template' +'this' +'thread_local' +'throw' +'true' +'try' +'typedef' +'typeid' +'typename' +'union' +'unsigned' +'using' +'virtual' +'void' +'volatile' +'wchar_t' +'while' +'(' +')' +'[' +']' +'{' +'}' +'+' +'-' +'*' +'/' +'%' +'^' +'&' +'|' +'~' +null +'=' +'<' +'>' +'+=' +'-=' +'*=' +'/=' +'%=' +'^=' +'&=' +'|=' +'<<=' +'>>=' +'==' +'!=' +'<=' +'>=' +null +null +'++' +'--' +',' +'->*' +'->' +'?' +':' +'::' +';' +'.' +'.*' +'...' +null +null +null +null +null +null +null +null +null +null +null +null +null +null + +token symbolic names: +null +IntegerLiteral +CharacterLiteral +FloatingLiteral +StringLiteral +BooleanLiteral +PointerLiteral +UserDefinedLiteral +MultiLineMacro +Directive +Alignas +Alignof +Asm +Auto +Bool +Break +Case +Catch +Char +Char16 +Char32 +Class +Const +Constexpr +Const_cast +Continue +Decltype +Default +Delete +Do +Double +Dynamic_cast +Else +Enum +Explicit +Export +Extern +False_ +Final +Float +For +Friend +Goto +If +Inline +Int +Long +Mutable +Namespace +New +Noexcept +Nullptr +Operator +Override +Private +Protected +Public +Register +Reinterpret_cast +Return +Short +Signed +Sizeof +Static +Static_assert +Static_cast +Struct +Switch +Template +This +Thread_local +Throw +True_ +Try +Typedef +Typeid_ +Typename_ +Union +Unsigned +Using +Virtual +Void +Volatile +Wchar +While +LeftParen +RightParen +LeftBracket +RightBracket +LeftBrace +RightBrace +Plus +Minus +Star +Div +Mod +Caret +And +Or +Tilde +Not +Assign +Less +Greater +PlusAssign +MinusAssign +StarAssign +DivAssign +ModAssign +XorAssign +AndAssign +OrAssign +LeftShiftAssign +RightShiftAssign +Equal +NotEqual +LessEqual +GreaterEqual +AndAnd +OrOr +PlusPlus +MinusMinus +Comma +ArrowStar +Arrow +Question +Colon +Doublecolon +Semi +Dot +DotStar +Ellipsis +Identifier +DecimalLiteral +OctalLiteral +HexadecimalLiteral +BinaryLiteral +Integersuffix +UserDefinedIntegerLiteral +UserDefinedFloatingLiteral +UserDefinedStringLiteral +UserDefinedCharacterLiteral +Whitespace +Newline +BlockComment +LineComment + +rule names: +translationUnit +primaryExpression +idExpression +unqualifiedId +qualifiedId +nestedNameSpecifier +lambdaExpression +lambdaIntroducer +lambdaCapture +captureDefault +captureList +capture +simpleCapture +initcapture +lambdaDeclarator +postfixExpression +typeIdOfTheTypeId +expressionList +pseudoDestructorName +unaryExpression +unaryOperator +newExpression +newPlacement +newTypeId +newDeclarator +noPointerNewDeclarator +newInitializer +deleteExpression +noExceptExpression +castExpression +pointerMemberExpression +multiplicativeExpression +additiveExpression +shiftExpression +shiftOperator +relationalExpression +equalityExpression +andExpression +exclusiveOrExpression +inclusiveOrExpression +logicalAndExpression +logicalOrExpression +conditionalExpression +assignmentExpression +assignmentOperator +expression +constantExpression +statement +labeledStatement +expressionStatement +compoundStatement +statementSeq +selectionStatement +condition +iterationStatement +forInitStatement +forRangeDeclaration +forRangeInitializer +jumpStatement +declarationStatement +declarationseq +declaration +blockDeclaration +aliasDeclaration +simpleDeclaration +staticAssertDeclaration +emptyDeclaration +attributeDeclaration +declSpecifier +declSpecifierSeq +storageClassSpecifier +functionSpecifier +typedefName +typeSpecifier +trailingTypeSpecifier +typeSpecifierSeq +trailingTypeSpecifierSeq +simpleTypeSpecifier +theTypeName +decltypeSpecifier +elaboratedTypeSpecifier +enumName +enumSpecifier +enumHead +opaqueEnumDeclaration +enumkey +enumbase +enumeratorList +enumeratorDefinition +enumerator +namespaceName +originalNamespaceName +namespaceDefinition +namespaceAlias +namespaceAliasDefinition +qualifiednamespacespecifier +usingDeclaration +usingDirective +asmDefinition +linkageSpecification +attributeSpecifierSeq +attributeSpecifier +alignmentspecifier +attributeList +attribute +attributeNamespace +attributeArgumentClause +balancedTokenSeq +balancedtoken +initDeclaratorList +initDeclarator +declarator +pointerDeclarator +noPointerDeclarator +parametersAndQualifiers +trailingReturnType +pointerOperator +cvqualifierseq +cvQualifier +refqualifier +declaratorid +theTypeId +abstractDeclarator +pointerAbstractDeclarator +noPointerAbstractDeclarator +abstractPackDeclarator +noPointerAbstractPackDeclarator +parameterDeclarationClause +parameterDeclarationList +parameterDeclaration +functionDefinition +functionBody +initializer +braceOrEqualInitializer +initializerClause +initializerList +bracedInitList +className +classSpecifier +classHead +classHeadName +classVirtSpecifier +classKey +memberSpecification +memberdeclaration +memberDeclaratorList +memberDeclarator +virtualSpecifierSeq +virtualSpecifier +pureSpecifier +baseClause +baseSpecifierList +baseSpecifier +classOrDeclType +baseTypeSpecifier +accessSpecifier +conversionFunctionId +conversionTypeId +conversionDeclarator +constructorInitializer +memInitializerList +memInitializer +meminitializerid +operatorFunctionId +literalOperatorId +templateDeclaration +templateparameterList +templateParameter +typeParameter +simpleTemplateId +templateId +templateName +templateArgumentList +templateArgument +typeNameSpecifier +explicitInstantiation +explicitSpecialization +tryBlock +functionTryBlock +handlerSeq +handler +exceptionDeclaration +throwExpression +exceptionSpecification +dynamicExceptionSpecification +typeIdList +noeExceptSpecification +theOperator +literal + + +atn: +[3, 24715, 42794, 33075, 47597, 16764, 15335, 30598, 22884, 3, 147, 2077, 4, 2, 9, 2, 4, 3, 9, 3, 4, 4, 9, 4, 4, 5, 9, 5, 4, 6, 9, 6, 4, 7, 9, 7, 4, 8, 9, 8, 4, 9, 9, 9, 4, 10, 9, 10, 4, 11, 9, 11, 4, 12, 9, 12, 4, 13, 9, 13, 4, 14, 9, 14, 4, 15, 9, 15, 4, 16, 9, 16, 4, 17, 9, 17, 4, 18, 9, 18, 4, 19, 9, 19, 4, 20, 9, 20, 4, 21, 9, 21, 4, 22, 9, 22, 4, 23, 9, 23, 4, 24, 9, 24, 4, 25, 9, 25, 4, 26, 9, 26, 4, 27, 9, 27, 4, 28, 9, 28, 4, 29, 9, 29, 4, 30, 9, 30, 4, 31, 9, 31, 4, 32, 9, 32, 4, 33, 9, 33, 4, 34, 9, 34, 4, 35, 9, 35, 4, 36, 9, 36, 4, 37, 9, 37, 4, 38, 9, 38, 4, 39, 9, 39, 4, 40, 9, 40, 4, 41, 9, 41, 4, 42, 9, 42, 4, 43, 9, 43, 4, 44, 9, 44, 4, 45, 9, 45, 4, 46, 9, 46, 4, 47, 9, 47, 4, 48, 9, 48, 4, 49, 9, 49, 4, 50, 9, 50, 4, 51, 9, 51, 4, 52, 9, 52, 4, 53, 9, 53, 4, 54, 9, 54, 4, 55, 9, 55, 4, 56, 9, 56, 4, 57, 9, 57, 4, 58, 9, 58, 4, 59, 9, 59, 4, 60, 9, 60, 4, 61, 9, 61, 4, 62, 9, 62, 4, 63, 9, 63, 4, 64, 9, 64, 4, 65, 9, 65, 4, 66, 9, 66, 4, 67, 9, 67, 4, 68, 9, 68, 4, 69, 9, 69, 4, 70, 9, 70, 4, 71, 9, 71, 4, 72, 9, 72, 4, 73, 9, 73, 4, 74, 9, 74, 4, 75, 9, 75, 4, 76, 9, 76, 4, 77, 9, 77, 4, 78, 9, 78, 4, 79, 9, 79, 4, 80, 9, 80, 4, 81, 9, 81, 4, 82, 9, 82, 4, 83, 9, 83, 4, 84, 9, 84, 4, 85, 9, 85, 4, 86, 9, 86, 4, 87, 9, 87, 4, 88, 9, 88, 4, 89, 9, 89, 4, 90, 9, 90, 4, 91, 9, 91, 4, 92, 9, 92, 4, 93, 9, 93, 4, 94, 9, 94, 4, 95, 9, 95, 4, 96, 9, 96, 4, 97, 9, 97, 4, 98, 9, 98, 4, 99, 9, 99, 4, 100, 9, 100, 4, 101, 9, 101, 4, 102, 9, 102, 4, 103, 9, 103, 4, 104, 9, 104, 4, 105, 9, 105, 4, 106, 9, 106, 4, 107, 9, 107, 4, 108, 9, 108, 4, 109, 9, 109, 4, 110, 9, 110, 4, 111, 9, 111, 4, 112, 9, 112, 4, 113, 9, 113, 4, 114, 9, 114, 4, 115, 9, 115, 4, 116, 9, 116, 4, 117, 9, 117, 4, 118, 9, 118, 4, 119, 9, 119, 4, 120, 9, 120, 4, 121, 9, 121, 4, 122, 9, 122, 4, 123, 9, 123, 4, 124, 9, 124, 4, 125, 9, 125, 4, 126, 9, 126, 4, 127, 9, 127, 4, 128, 9, 128, 4, 129, 9, 129, 4, 130, 9, 130, 4, 131, 9, 131, 4, 132, 9, 132, 4, 133, 9, 133, 4, 134, 9, 134, 4, 135, 9, 135, 4, 136, 9, 136, 4, 137, 9, 137, 4, 138, 9, 138, 4, 139, 9, 139, 4, 140, 9, 140, 4, 141, 9, 141, 4, 142, 9, 142, 4, 143, 9, 143, 4, 144, 9, 144, 4, 145, 9, 145, 4, 146, 9, 146, 4, 147, 9, 147, 4, 148, 9, 148, 4, 149, 9, 149, 4, 150, 9, 150, 4, 151, 9, 151, 4, 152, 9, 152, 4, 153, 9, 153, 4, 154, 9, 154, 4, 155, 9, 155, 4, 156, 9, 156, 4, 157, 9, 157, 4, 158, 9, 158, 4, 159, 9, 159, 4, 160, 9, 160, 4, 161, 9, 161, 4, 162, 9, 162, 4, 163, 9, 163, 4, 164, 9, 164, 4, 165, 9, 165, 4, 166, 9, 166, 4, 167, 9, 167, 4, 168, 9, 168, 4, 169, 9, 169, 4, 170, 9, 170, 4, 171, 9, 171, 4, 172, 9, 172, 4, 173, 9, 173, 4, 174, 9, 174, 4, 175, 9, 175, 4, 176, 9, 176, 4, 177, 9, 177, 4, 178, 9, 178, 4, 179, 9, 179, 4, 180, 9, 180, 4, 181, 9, 181, 4, 182, 9, 182, 4, 183, 9, 183, 4, 184, 9, 184, 4, 185, 9, 185, 4, 186, 9, 186, 4, 187, 9, 187, 4, 188, 9, 188, 4, 189, 9, 189, 4, 190, 9, 190, 3, 2, 5, 2, 382, 10, 2, 3, 2, 3, 2, 3, 3, 6, 3, 387, 10, 3, 13, 3, 14, 3, 388, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 5, 3, 398, 10, 3, 3, 4, 3, 4, 5, 4, 402, 10, 4, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 3, 5, 5, 5, 411, 10, 5, 3, 5, 5, 5, 414, 10, 5, 3, 6, 3, 6, 5, 6, 418, 10, 6, 3, 6, 3, 6, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 426, 10, 7, 3, 7, 3, 7, 3, 7, 3, 7, 3, 7, 5, 7, 433, 10, 7, 3, 7, 5, 7, 436, 10, 7, 3, 7, 7, 7, 439, 10, 7, 12, 7, 14, 7, 442, 11, 7, 3, 8, 3, 8, 5, 8, 446, 10, 8, 3, 8, 3, 8, 3, 9, 3, 9, 5, 9, 452, 10, 9, 3, 9, 3, 9, 3, 10, 3, 10, 3, 10, 3, 10, 5, 10, 460, 10, 10, 5, 10, 462, 10, 10, 3, 11, 3, 11, 3, 12, 3, 12, 3, 12, 7, 12, 469, 10, 12, 12, 12, 14, 12, 472, 11, 12, 3, 12, 5, 12, 475, 10, 12, 3, 13, 3, 13, 5, 13, 479, 10, 13, 3, 14, 5, 14, 482, 10, 14, 3, 14, 3, 14, 5, 14, 486, 10, 14, 3, 15, 5, 15, 489, 10, 15, 3, 15, 3, 15, 3, 15, 3, 16, 3, 16, 5, 16, 496, 10, 16, 3, 16, 3, 16, 5, 16, 500, 10, 16, 3, 16, 5, 16, 503, 10, 16, 3, 16, 5, 16, 506, 10, 16, 3, 16, 5, 16, 509, 10, 16, 3, 17, 3, 17, 3, 17, 3, 17, 5, 17, 515, 10, 17, 3, 17, 3, 17, 5, 17, 519, 10, 17, 3, 17, 3, 17, 5, 17, 523, 10, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 5, 17, 537, 10, 17, 3, 17, 3, 17, 5, 17, 541, 10, 17, 3, 17, 3, 17, 3, 17, 3, 17, 5, 17, 547, 10, 17, 3, 17, 3, 17, 3, 17, 3, 17, 3, 17, 5, 17, 554, 10, 17, 3, 17, 3, 17, 3, 17, 3, 17, 5, 17, 560, 10, 17, 3, 17, 3, 17, 5, 17, 564, 10, 17, 3, 17, 3, 17, 7, 17, 568, 10, 17, 12, 17, 14, 17, 571, 11, 17, 3, 18, 3, 18, 3, 19, 3, 19, 3, 20, 5, 20, 578, 10, 20, 3, 20, 3, 20, 3, 20, 5, 20, 583, 10, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 3, 20, 5, 20, 596, 10, 20, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 5, 21, 603, 10, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 5, 21, 615, 10, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 3, 21, 5, 21, 625, 10, 21, 3, 22, 3, 22, 3, 23, 5, 23, 630, 10, 23, 3, 23, 3, 23, 5, 23, 634, 10, 23, 3, 23, 3, 23, 3, 23, 3, 23, 3, 23, 5, 23, 641, 10, 23, 3, 23, 5, 23, 644, 10, 23, 3, 24, 3, 24, 3, 24, 3, 24, 3, 25, 3, 25, 5, 25, 652, 10, 25, 3, 26, 3, 26, 5, 26, 656, 10, 26, 3, 26, 5, 26, 659, 10, 26, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 5, 27, 666, 10, 27, 3, 27, 3, 27, 3, 27, 3, 27, 3, 27, 5, 27, 673, 10, 27, 7, 27, 675, 10, 27, 12, 27, 14, 27, 678, 11, 27, 3, 28, 3, 28, 5, 28, 682, 10, 28, 3, 28, 3, 28, 5, 28, 686, 10, 28, 3, 29, 5, 29, 689, 10, 29, 3, 29, 3, 29, 3, 29, 5, 29, 694, 10, 29, 3, 29, 3, 29, 3, 30, 3, 30, 3, 30, 3, 30, 3, 30, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 3, 31, 5, 31, 709, 10, 31, 3, 32, 3, 32, 3, 32, 7, 32, 714, 10, 32, 12, 32, 14, 32, 717, 11, 32, 3, 33, 3, 33, 3, 33, 7, 33, 722, 10, 33, 12, 33, 14, 33, 725, 11, 33, 3, 34, 3, 34, 3, 34, 7, 34, 730, 10, 34, 12, 34, 14, 34, 733, 11, 34, 3, 35, 3, 35, 3, 35, 3, 35, 7, 35, 739, 10, 35, 12, 35, 14, 35, 742, 11, 35, 3, 36, 3, 36, 3, 36, 3, 36, 5, 36, 748, 10, 36, 3, 37, 3, 37, 3, 37, 7, 37, 753, 10, 37, 12, 37, 14, 37, 756, 11, 37, 3, 38, 3, 38, 3, 38, 7, 38, 761, 10, 38, 12, 38, 14, 38, 764, 11, 38, 3, 39, 3, 39, 3, 39, 7, 39, 769, 10, 39, 12, 39, 14, 39, 772, 11, 39, 3, 40, 3, 40, 3, 40, 7, 40, 777, 10, 40, 12, 40, 14, 40, 780, 11, 40, 3, 41, 3, 41, 3, 41, 7, 41, 785, 10, 41, 12, 41, 14, 41, 788, 11, 41, 3, 42, 3, 42, 3, 42, 7, 42, 793, 10, 42, 12, 42, 14, 42, 796, 11, 42, 3, 43, 3, 43, 3, 43, 7, 43, 801, 10, 43, 12, 43, 14, 43, 804, 11, 43, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 3, 44, 5, 44, 812, 10, 44, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 3, 45, 5, 45, 820, 10, 45, 3, 46, 3, 46, 3, 47, 3, 47, 3, 47, 7, 47, 827, 10, 47, 12, 47, 14, 47, 830, 11, 47, 3, 48, 3, 48, 3, 49, 3, 49, 5, 49, 836, 10, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 3, 49, 5, 49, 844, 10, 49, 3, 49, 5, 49, 847, 10, 49, 3, 50, 5, 50, 850, 10, 50, 3, 50, 3, 50, 3, 50, 3, 50, 5, 50, 856, 10, 50, 3, 50, 3, 50, 3, 50, 3, 51, 5, 51, 862, 10, 51, 3, 51, 3, 51, 3, 52, 3, 52, 5, 52, 868, 10, 52, 3, 52, 3, 52, 3, 53, 6, 53, 873, 10, 53, 13, 53, 14, 53, 874, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 5, 54, 884, 10, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 3, 54, 5, 54, 892, 10, 54, 3, 55, 3, 55, 5, 55, 896, 10, 55, 3, 55, 3, 55, 3, 55, 3, 55, 3, 55, 5, 55, 903, 10, 55, 5, 55, 905, 10, 55, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 3, 56, 5, 56, 925, 10, 56, 3, 56, 3, 56, 5, 56, 929, 10, 56, 3, 56, 3, 56, 3, 56, 3, 56, 5, 56, 935, 10, 56, 3, 56, 3, 56, 3, 56, 5, 56, 940, 10, 56, 3, 57, 3, 57, 5, 57, 944, 10, 57, 3, 58, 5, 58, 947, 10, 58, 3, 58, 3, 58, 3, 58, 3, 59, 3, 59, 5, 59, 954, 10, 59, 3, 60, 3, 60, 3, 60, 3, 60, 3, 60, 5, 60, 961, 10, 60, 3, 60, 3, 60, 5, 60, 965, 10, 60, 3, 60, 3, 60, 3, 61, 3, 61, 3, 62, 6, 62, 972, 10, 62, 13, 62, 14, 62, 973, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 3, 63, 5, 63, 985, 10, 63, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 3, 64, 5, 64, 995, 10, 64, 3, 65, 3, 65, 3, 65, 5, 65, 1000, 10, 65, 3, 65, 3, 65, 3, 65, 3, 65, 3, 66, 5, 66, 1007, 10, 66, 3, 66, 5, 66, 1010, 10, 66, 3, 66, 3, 66, 3, 66, 5, 66, 1015, 10, 66, 3, 66, 3, 66, 3, 66, 5, 66, 1020, 10, 66, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 67, 3, 68, 3, 68, 3, 69, 3, 69, 3, 69, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 3, 70, 5, 70, 1041, 10, 70, 3, 71, 6, 71, 1044, 10, 71, 13, 71, 14, 71, 1045, 3, 71, 5, 71, 1049, 10, 71, 3, 72, 3, 72, 3, 73, 3, 73, 3, 74, 3, 74, 3, 75, 3, 75, 3, 75, 5, 75, 1060, 10, 75, 3, 76, 3, 76, 3, 76, 3, 76, 5, 76, 1066, 10, 76, 3, 77, 6, 77, 1069, 10, 77, 13, 77, 14, 77, 1070, 3, 77, 5, 77, 1074, 10, 77, 3, 78, 6, 78, 1077, 10, 78, 13, 78, 14, 78, 1078, 3, 78, 5, 78, 1082, 10, 78, 3, 79, 5, 79, 1085, 10, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 3, 79, 5, 79, 1107, 10, 79, 3, 80, 3, 80, 3, 80, 3, 80, 5, 80, 1113, 10, 80, 3, 81, 3, 81, 3, 81, 3, 81, 5, 81, 1119, 10, 81, 3, 81, 3, 81, 3, 82, 3, 82, 5, 82, 1125, 10, 82, 3, 82, 5, 82, 1128, 10, 82, 3, 82, 3, 82, 3, 82, 3, 82, 5, 82, 1134, 10, 82, 3, 82, 3, 82, 5, 82, 1138, 10, 82, 3, 82, 3, 82, 5, 82, 1142, 10, 82, 3, 82, 5, 82, 1145, 10, 82, 3, 83, 3, 83, 3, 84, 3, 84, 3, 84, 3, 84, 5, 84, 1153, 10, 84, 5, 84, 1155, 10, 84, 3, 84, 3, 84, 3, 85, 3, 85, 5, 85, 1161, 10, 85, 3, 85, 5, 85, 1164, 10, 85, 3, 85, 5, 85, 1167, 10, 85, 3, 85, 5, 85, 1170, 10, 85, 3, 86, 3, 86, 5, 86, 1174, 10, 86, 3, 86, 3, 86, 5, 86, 1178, 10, 86, 3, 86, 3, 86, 3, 87, 3, 87, 5, 87, 1184, 10, 87, 3, 88, 3, 88, 3, 88, 3, 89, 3, 89, 3, 89, 7, 89, 1192, 10, 89, 12, 89, 14, 89, 1195, 11, 89, 3, 90, 3, 90, 3, 90, 5, 90, 1200, 10, 90, 3, 91, 3, 91, 3, 92, 3, 92, 5, 92, 1206, 10, 92, 3, 93, 3, 93, 3, 94, 5, 94, 1211, 10, 94, 3, 94, 3, 94, 3, 94, 5, 94, 1216, 10, 94, 3, 94, 3, 94, 5, 94, 1220, 10, 94, 3, 94, 3, 94, 3, 95, 3, 95, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 96, 3, 97, 5, 97, 1233, 10, 97, 3, 97, 3, 97, 3, 98, 3, 98, 5, 98, 1239, 10, 98, 3, 98, 3, 98, 5, 98, 1243, 10, 98, 3, 98, 3, 98, 3, 98, 3, 99, 5, 99, 1249, 10, 99, 3, 99, 3, 99, 3, 99, 5, 99, 1254, 10, 99, 3, 99, 3, 99, 3, 99, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 100, 3, 101, 3, 101, 3, 101, 3, 101, 5, 101, 1269, 10, 101, 3, 101, 3, 101, 5, 101, 1273, 10, 101, 3, 102, 6, 102, 1276, 10, 102, 13, 102, 14, 102, 1277, 3, 103, 3, 103, 3, 103, 5, 103, 1283, 10, 103, 3, 103, 3, 103, 3, 103, 5, 103, 1288, 10, 103, 3, 104, 3, 104, 3, 104, 3, 104, 5, 104, 1294, 10, 104, 3, 104, 5, 104, 1297, 10, 104, 3, 104, 3, 104, 3, 105, 3, 105, 3, 105, 7, 105, 1304, 10, 105, 12, 105, 14, 105, 1307, 11, 105, 3, 105, 5, 105, 1310, 10, 105, 3, 106, 3, 106, 3, 106, 5, 106, 1315, 10, 106, 3, 106, 3, 106, 5, 106, 1319, 10, 106, 3, 107, 3, 107, 3, 108, 3, 108, 5, 108, 1325, 10, 108, 3, 108, 3, 108, 3, 109, 6, 109, 1330, 10, 109, 13, 109, 14, 109, 1331, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 3, 110, 6, 110, 1347, 10, 110, 13, 110, 14, 110, 1348, 5, 110, 1351, 10, 110, 3, 111, 3, 111, 3, 111, 7, 111, 1356, 10, 111, 12, 111, 14, 111, 1359, 11, 111, 3, 112, 3, 112, 5, 112, 1363, 10, 112, 3, 113, 3, 113, 3, 113, 3, 113, 3, 113, 5, 113, 1370, 10, 113, 3, 114, 3, 114, 5, 114, 1374, 10, 114, 7, 114, 1376, 10, 114, 12, 114, 14, 114, 1379, 11, 114, 3, 114, 3, 114, 3, 115, 3, 115, 3, 115, 5, 115, 1386, 10, 115, 3, 115, 3, 115, 3, 115, 3, 115, 5, 115, 1392, 10, 115, 3, 115, 3, 115, 3, 115, 3, 115, 5, 115, 1398, 10, 115, 3, 115, 3, 115, 5, 115, 1402, 10, 115, 5, 115, 1404, 10, 115, 7, 115, 1406, 10, 115, 12, 115, 14, 115, 1409, 11, 115, 3, 116, 3, 116, 5, 116, 1413, 10, 116, 3, 116, 3, 116, 5, 116, 1417, 10, 116, 3, 116, 5, 116, 1420, 10, 116, 3, 116, 5, 116, 1423, 10, 116, 3, 116, 5, 116, 1426, 10, 116, 3, 117, 3, 117, 3, 117, 5, 117, 1431, 10, 117, 3, 118, 3, 118, 5, 118, 1435, 10, 118, 3, 118, 5, 118, 1438, 10, 118, 3, 118, 3, 118, 5, 118, 1442, 10, 118, 3, 118, 5, 118, 1445, 10, 118, 5, 118, 1447, 10, 118, 3, 119, 6, 119, 1450, 10, 119, 13, 119, 14, 119, 1451, 3, 120, 3, 120, 3, 121, 3, 121, 3, 122, 5, 122, 1459, 10, 122, 3, 122, 3, 122, 3, 123, 3, 123, 5, 123, 1465, 10, 123, 3, 124, 3, 124, 5, 124, 1469, 10, 124, 3, 124, 3, 124, 3, 124, 3, 124, 5, 124, 1475, 10, 124, 3, 125, 3, 125, 6, 125, 1479, 10, 125, 13, 125, 14, 125, 1480, 3, 125, 5, 125, 1484, 10, 125, 5, 125, 1486, 10, 125, 3, 126, 3, 126, 3, 126, 3, 126, 5, 126, 1492, 10, 126, 3, 126, 3, 126, 5, 126, 1496, 10, 126, 3, 126, 3, 126, 3, 126, 3, 126, 5, 126, 1502, 10, 126, 3, 126, 3, 126, 3, 126, 3, 126, 3, 126, 5, 126, 1509, 10, 126, 3, 126, 3, 126, 5, 126, 1513, 10, 126, 5, 126, 1515, 10, 126, 7, 126, 1517, 10, 126, 12, 126, 14, 126, 1520, 11, 126, 3, 127, 7, 127, 1523, 10, 127, 12, 127, 14, 127, 1526, 11, 127, 3, 127, 3, 127, 3, 128, 3, 128, 3, 128, 3, 128, 3, 128, 3, 128, 3, 128, 5, 128, 1537, 10, 128, 3, 128, 3, 128, 5, 128, 1541, 10, 128, 5, 128, 1543, 10, 128, 7, 128, 1545, 10, 128, 12, 128, 14, 128, 1548, 11, 128, 3, 129, 3, 129, 5, 129, 1552, 10, 129, 3, 129, 5, 129, 1555, 10, 129, 3, 130, 3, 130, 3, 130, 7, 130, 1560, 10, 130, 12, 130, 14, 130, 1563, 11, 130, 3, 131, 5, 131, 1566, 10, 131, 3, 131, 3, 131, 3, 131, 5, 131, 1571, 10, 131, 5, 131, 1573, 10, 131, 3, 131, 3, 131, 5, 131, 1577, 10, 131, 3, 132, 5, 132, 1580, 10, 132, 3, 132, 5, 132, 1583, 10, 132, 3, 132, 3, 132, 5, 132, 1587, 10, 132, 3, 132, 3, 132, 3, 133, 5, 133, 1592, 10, 133, 3, 133, 3, 133, 3, 133, 3, 133, 3, 133, 5, 133, 1599, 10, 133, 3, 134, 3, 134, 3, 134, 3, 134, 3, 134, 5, 134, 1606, 10, 134, 3, 135, 3, 135, 3, 135, 5, 135, 1611, 10, 135, 3, 136, 3, 136, 5, 136, 1615, 10, 136, 3, 137, 3, 137, 5, 137, 1619, 10, 137, 3, 137, 3, 137, 3, 137, 5, 137, 1624, 10, 137, 7, 137, 1626, 10, 137, 12, 137, 14, 137, 1629, 11, 137, 3, 138, 3, 138, 3, 138, 5, 138, 1634, 10, 138, 5, 138, 1636, 10, 138, 3, 138, 3, 138, 3, 139, 3, 139, 5, 139, 1642, 10, 139, 3, 140, 3, 140, 3, 140, 5, 140, 1647, 10, 140, 3, 140, 3, 140, 3, 141, 3, 141, 5, 141, 1653, 10, 141, 3, 141, 3, 141, 5, 141, 1657, 10, 141, 5, 141, 1659, 10, 141, 3, 141, 5, 141, 1662, 10, 141, 3, 141, 3, 141, 5, 141, 1666, 10, 141, 3, 141, 3, 141, 5, 141, 1670, 10, 141, 5, 141, 1672, 10, 141, 5, 141, 1674, 10, 141, 3, 142, 5, 142, 1677, 10, 142, 3, 142, 3, 142, 3, 143, 3, 143, 3, 144, 3, 144, 3, 145, 3, 145, 3, 145, 3, 145, 6, 145, 1689, 10, 145, 13, 145, 14, 145, 1690, 3, 146, 5, 146, 1694, 10, 146, 3, 146, 5, 146, 1697, 10, 146, 3, 146, 5, 146, 1700, 10, 146, 3, 146, 3, 146, 3, 146, 3, 146, 3, 146, 3, 146, 3, 146, 5, 146, 1709, 10, 146, 3, 147, 3, 147, 3, 147, 7, 147, 1714, 10, 147, 12, 147, 14, 147, 1717, 11, 147, 3, 148, 3, 148, 5, 148, 1721, 10, 148, 3, 148, 5, 148, 1724, 10, 148, 3, 148, 5, 148, 1727, 10, 148, 5, 148, 1729, 10, 148, 3, 148, 5, 148, 1732, 10, 148, 3, 148, 5, 148, 1735, 10, 148, 3, 148, 3, 148, 5, 148, 1739, 10, 148, 3, 149, 6, 149, 1742, 10, 149, 13, 149, 14, 149, 1743, 3, 150, 3, 150, 3, 151, 3, 151, 3, 151, 3, 151, 3, 152, 3, 152, 3, 152, 3, 153, 3, 153, 5, 153, 1757, 10, 153, 3, 153, 3, 153, 3, 153, 5, 153, 1762, 10, 153, 7, 153, 1764, 10, 153, 12, 153, 14, 153, 1767, 11, 153, 3, 154, 5, 154, 1770, 10, 154, 3, 154, 3, 154, 3, 154, 5, 154, 1775, 10, 154, 3, 154, 3, 154, 3, 154, 5, 154, 1780, 10, 154, 3, 154, 3, 154, 5, 154, 1784, 10, 154, 3, 155, 5, 155, 1787, 10, 155, 3, 155, 3, 155, 5, 155, 1791, 10, 155, 3, 156, 3, 156, 3, 157, 3, 157, 3, 158, 3, 158, 3, 158, 3, 159, 3, 159, 5, 159, 1802, 10, 159, 3, 160, 3, 160, 5, 160, 1806, 10, 160, 3, 161, 3, 161, 3, 161, 3, 162, 3, 162, 5, 162, 1813, 10, 162, 3, 162, 3, 162, 3, 162, 5, 162, 1818, 10, 162, 7, 162, 1820, 10, 162, 12, 162, 14, 162, 1823, 11, 162, 3, 163, 3, 163, 3, 163, 5, 163, 1828, 10, 163, 3, 163, 3, 163, 5, 163, 1832, 10, 163, 3, 164, 3, 164, 5, 164, 1836, 10, 164, 3, 165, 3, 165, 3, 165, 3, 166, 3, 166, 3, 166, 3, 166, 5, 166, 1845, 10, 166, 3, 167, 3, 167, 3, 167, 3, 167, 3, 167, 3, 167, 3, 168, 3, 168, 3, 168, 7, 168, 1856, 10, 168, 12, 168, 14, 168, 1859, 11, 168, 3, 169, 3, 169, 5, 169, 1863, 10, 169, 3, 170, 3, 170, 3, 170, 3, 170, 3, 170, 5, 170, 1870, 10, 170, 3, 170, 3, 170, 5, 170, 1874, 10, 170, 3, 170, 5, 170, 1877, 10, 170, 3, 170, 5, 170, 1880, 10, 170, 3, 170, 5, 170, 1883, 10, 170, 3, 170, 3, 170, 5, 170, 1887, 10, 170, 3, 171, 3, 171, 3, 171, 5, 171, 1892, 10, 171, 3, 171, 3, 171, 3, 172, 3, 172, 3, 172, 5, 172, 1899, 10, 172, 3, 172, 3, 172, 5, 172, 1903, 10, 172, 3, 172, 3, 172, 5, 172, 1907, 10, 172, 3, 173, 3, 173, 3, 174, 3, 174, 5, 174, 1913, 10, 174, 3, 174, 3, 174, 3, 174, 5, 174, 1918, 10, 174, 7, 174, 1920, 10, 174, 12, 174, 14, 174, 1923, 11, 174, 3, 175, 3, 175, 3, 175, 5, 175, 1928, 10, 175, 3, 176, 3, 176, 3, 176, 3, 176, 5, 176, 1934, 10, 176, 3, 176, 5, 176, 1937, 10, 176, 3, 177, 5, 177, 1940, 10, 177, 3, 177, 3, 177, 3, 177, 3, 178, 3, 178, 3, 178, 3, 178, 3, 178, 3, 179, 3, 179, 3, 179, 3, 179, 3, 180, 3, 180, 5, 180, 1956, 10, 180, 3, 180, 3, 180, 3, 180, 3, 181, 6, 181, 1962, 10, 181, 13, 181, 14, 181, 1963, 3, 182, 3, 182, 3, 182, 3, 182, 3, 182, 3, 182, 3, 183, 5, 183, 1973, 10, 183, 3, 183, 3, 183, 3, 183, 5, 183, 1978, 10, 183, 3, 183, 5, 183, 1981, 10, 183, 3, 184, 3, 184, 5, 184, 1985, 10, 184, 3, 185, 3, 185, 5, 185, 1989, 10, 185, 3, 186, 3, 186, 3, 186, 5, 186, 1994, 10, 186, 3, 186, 3, 186, 3, 187, 3, 187, 5, 187, 2000, 10, 187, 3, 187, 3, 187, 3, 187, 5, 187, 2005, 10, 187, 7, 187, 2007, 10, 187, 12, 187, 14, 187, 2010, 11, 187, 3, 188, 3, 188, 3, 188, 3, 188, 3, 188, 3, 188, 5, 188, 2018, 10, 188, 3, 189, 3, 189, 3, 189, 5, 189, 2023, 10, 189, 3, 189, 3, 189, 3, 189, 5, 189, 2028, 10, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 3, 189, 5, 189, 2073, 10, 189, 3, 190, 3, 190, 3, 190, 2, 8, 12, 32, 52, 228, 250, 254, 191, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 50, 52, 54, 56, 58, 60, 62, 64, 66, 68, 70, 72, 74, 76, 78, 80, 82, 84, 86, 88, 90, 92, 94, 96, 98, 100, 102, 104, 106, 108, 110, 112, 114, 116, 118, 120, 122, 124, 126, 128, 130, 132, 134, 136, 138, 140, 142, 144, 146, 148, 150, 152, 154, 156, 158, 160, 162, 164, 166, 168, 170, 172, 174, 176, 178, 180, 182, 184, 186, 188, 190, 192, 194, 196, 198, 200, 202, 204, 206, 208, 210, 212, 214, 216, 218, 220, 222, 224, 226, 228, 230, 232, 234, 236, 238, 240, 242, 244, 246, 248, 250, 252, 254, 256, 258, 260, 262, 264, 266, 268, 270, 272, 274, 276, 278, 280, 282, 284, 286, 288, 290, 292, 294, 296, 298, 300, 302, 304, 306, 308, 310, 312, 314, 316, 318, 320, 322, 324, 326, 328, 330, 332, 334, 336, 338, 340, 342, 344, 346, 348, 350, 352, 354, 356, 358, 360, 362, 364, 366, 368, 370, 372, 374, 376, 378, 2, 23, 4, 2, 99, 99, 103, 103, 6, 2, 26, 26, 33, 33, 60, 60, 67, 67, 4, 2, 126, 126, 131, 131, 3, 2, 122, 123, 4, 2, 93, 95, 99, 102, 4, 2, 125, 125, 132, 132, 3, 2, 95, 97, 3, 2, 93, 94, 4, 2, 104, 105, 118, 119, 3, 2, 116, 117, 4, 2, 103, 103, 106, 115, 7, 2, 38, 38, 49, 49, 59, 59, 65, 65, 72, 72, 5, 2, 36, 36, 46, 46, 82, 82, 4, 2, 23, 23, 68, 68, 3, 2, 87, 92, 4, 2, 99, 99, 120, 120, 4, 2, 24, 24, 84, 84, 3, 2, 29, 30, 4, 2, 40, 40, 55, 55, 3, 2, 56, 58, 3, 2, 3, 9, 2, 2307, 2, 381, 3, 2, 2, 2, 4, 397, 3, 2, 2, 2, 6, 401, 3, 2, 2, 2, 8, 413, 3, 2, 2, 2, 10, 415, 3, 2, 2, 2, 12, 421, 3, 2, 2, 2, 14, 443, 3, 2, 2, 2, 16, 449, 3, 2, 2, 2, 18, 461, 3, 2, 2, 2, 20, 463, 3, 2, 2, 2, 22, 465, 3, 2, 2, 2, 24, 478, 3, 2, 2, 2, 26, 485, 3, 2, 2, 2, 28, 488, 3, 2, 2, 2, 30, 493, 3, 2, 2, 2, 32, 540, 3, 2, 2, 2, 34, 572, 3, 2, 2, 2, 36, 574, 3, 2, 2, 2, 38, 595, 3, 2, 2, 2, 40, 624, 3, 2, 2, 2, 42, 626, 3, 2, 2, 2, 44, 629, 3, 2, 2, 2, 46, 645, 3, 2, 2, 2, 48, 649, 3, 2, 2, 2, 50, 658, 3, 2, 2, 2, 52, 660, 3, 2, 2, 2, 54, 685, 3, 2, 2, 2, 56, 688, 3, 2, 2, 2, 58, 697, 3, 2, 2, 2, 60, 708, 3, 2, 2, 2, 62, 710, 3, 2, 2, 2, 64, 718, 3, 2, 2, 2, 66, 726, 3, 2, 2, 2, 68, 734, 3, 2, 2, 2, 70, 747, 3, 2, 2, 2, 72, 749, 3, 2, 2, 2, 74, 757, 3, 2, 2, 2, 76, 765, 3, 2, 2, 2, 78, 773, 3, 2, 2, 2, 80, 781, 3, 2, 2, 2, 82, 789, 3, 2, 2, 2, 84, 797, 3, 2, 2, 2, 86, 805, 3, 2, 2, 2, 88, 819, 3, 2, 2, 2, 90, 821, 3, 2, 2, 2, 92, 823, 3, 2, 2, 2, 94, 831, 3, 2, 2, 2, 96, 846, 3, 2, 2, 2, 98, 849, 3, 2, 2, 2, 100, 861, 3, 2, 2, 2, 102, 865, 3, 2, 2, 2, 104, 872, 3, 2, 2, 2, 106, 891, 3, 2, 2, 2, 108, 904, 3, 2, 2, 2, 110, 939, 3, 2, 2, 2, 112, 943, 3, 2, 2, 2, 114, 946, 3, 2, 2, 2, 116, 953, 3, 2, 2, 2, 118, 964, 3, 2, 2, 2, 120, 968, 3, 2, 2, 2, 122, 971, 3, 2, 2, 2, 124, 984, 3, 2, 2, 2, 126, 994, 3, 2, 2, 2, 128, 996, 3, 2, 2, 2, 130, 1019, 3, 2, 2, 2, 132, 1021, 3, 2, 2, 2, 134, 1029, 3, 2, 2, 2, 136, 1031, 3, 2, 2, 2, 138, 1040, 3, 2, 2, 2, 140, 1043, 3, 2, 2, 2, 142, 1050, 3, 2, 2, 2, 144, 1052, 3, 2, 2, 2, 146, 1054, 3, 2, 2, 2, 148, 1059, 3, 2, 2, 2, 150, 1065, 3, 2, 2, 2, 152, 1068, 3, 2, 2, 2, 154, 1076, 3, 2, 2, 2, 156, 1106, 3, 2, 2, 2, 158, 1112, 3, 2, 2, 2, 160, 1114, 3, 2, 2, 2, 162, 1144, 3, 2, 2, 2, 164, 1146, 3, 2, 2, 2, 166, 1148, 3, 2, 2, 2, 168, 1158, 3, 2, 2, 2, 170, 1171, 3, 2, 2, 2, 172, 1181, 3, 2, 2, 2, 174, 1185, 3, 2, 2, 2, 176, 1188, 3, 2, 2, 2, 178, 1196, 3, 2, 2, 2, 180, 1201, 3, 2, 2, 2, 182, 1205, 3, 2, 2, 2, 184, 1207, 3, 2, 2, 2, 186, 1210, 3, 2, 2, 2, 188, 1223, 3, 2, 2, 2, 190, 1225, 3, 2, 2, 2, 192, 1232, 3, 2, 2, 2, 194, 1236, 3, 2, 2, 2, 196, 1248, 3, 2, 2, 2, 198, 1258, 3, 2, 2, 2, 200, 1264, 3, 2, 2, 2, 202, 1275, 3, 2, 2, 2, 204, 1287, 3, 2, 2, 2, 206, 1289, 3, 2, 2, 2, 208, 1300, 3, 2, 2, 2, 210, 1314, 3, 2, 2, 2, 212, 1320, 3, 2, 2, 2, 214, 1322, 3, 2, 2, 2, 216, 1329, 3, 2, 2, 2, 218, 1350, 3, 2, 2, 2, 220, 1352, 3, 2, 2, 2, 222, 1360, 3, 2, 2, 2, 224, 1369, 3, 2, 2, 2, 226, 1377, 3, 2, 2, 2, 228, 1391, 3, 2, 2, 2, 230, 1410, 3, 2, 2, 2, 232, 1427, 3, 2, 2, 2, 234, 1446, 3, 2, 2, 2, 236, 1449, 3, 2, 2, 2, 238, 1453, 3, 2, 2, 2, 240, 1455, 3, 2, 2, 2, 242, 1458, 3, 2, 2, 2, 244, 1462, 3, 2, 2, 2, 246, 1474, 3, 2, 2, 2, 248, 1485, 3, 2, 2, 2, 250, 1501, 3, 2, 2, 2, 252, 1524, 3, 2, 2, 2, 254, 1529, 3, 2, 2, 2, 256, 1549, 3, 2, 2, 2, 258, 1556, 3, 2, 2, 2, 260, 1565, 3, 2, 2, 2, 262, 1579, 3, 2, 2, 2, 264, 1598, 3, 2, 2, 2, 266, 1605, 3, 2, 2, 2, 268, 1610, 3, 2, 2, 2, 270, 1614, 3, 2, 2, 2, 272, 1616, 3, 2, 2, 2, 274, 1630, 3, 2, 2, 2, 276, 1641, 3, 2, 2, 2, 278, 1643, 3, 2, 2, 2, 280, 1673, 3, 2, 2, 2, 282, 1676, 3, 2, 2, 2, 284, 1680, 3, 2, 2, 2, 286, 1682, 3, 2, 2, 2, 288, 1688, 3, 2, 2, 2, 290, 1708, 3, 2, 2, 2, 292, 1710, 3, 2, 2, 2, 294, 1738, 3, 2, 2, 2, 296, 1741, 3, 2, 2, 2, 298, 1745, 3, 2, 2, 2, 300, 1747, 3, 2, 2, 2, 302, 1751, 3, 2, 2, 2, 304, 1754, 3, 2, 2, 2, 306, 1769, 3, 2, 2, 2, 308, 1790, 3, 2, 2, 2, 310, 1792, 3, 2, 2, 2, 312, 1794, 3, 2, 2, 2, 314, 1796, 3, 2, 2, 2, 316, 1799, 3, 2, 2, 2, 318, 1803, 3, 2, 2, 2, 320, 1807, 3, 2, 2, 2, 322, 1810, 3, 2, 2, 2, 324, 1824, 3, 2, 2, 2, 326, 1835, 3, 2, 2, 2, 328, 1837, 3, 2, 2, 2, 330, 1840, 3, 2, 2, 2, 332, 1846, 3, 2, 2, 2, 334, 1852, 3, 2, 2, 2, 336, 1862, 3, 2, 2, 2, 338, 1873, 3, 2, 2, 2, 340, 1888, 3, 2, 2, 2, 342, 1906, 3, 2, 2, 2, 344, 1908, 3, 2, 2, 2, 346, 1910, 3, 2, 2, 2, 348, 1927, 3, 2, 2, 2, 350, 1929, 3, 2, 2, 2, 352, 1939, 3, 2, 2, 2, 354, 1944, 3, 2, 2, 2, 356, 1949, 3, 2, 2, 2, 358, 1953, 3, 2, 2, 2, 360, 1961, 3, 2, 2, 2, 362, 1965, 3, 2, 2, 2, 364, 1980, 3, 2, 2, 2, 366, 1982, 3, 2, 2, 2, 368, 1988, 3, 2, 2, 2, 370, 1990, 3, 2, 2, 2, 372, 1997, 3, 2, 2, 2, 374, 2017, 3, 2, 2, 2, 376, 2072, 3, 2, 2, 2, 378, 2074, 3, 2, 2, 2, 380, 382, 5, 122, 62, 2, 381, 380, 3, 2, 2, 2, 381, 382, 3, 2, 2, 2, 382, 383, 3, 2, 2, 2, 383, 384, 7, 2, 2, 3, 384, 3, 3, 2, 2, 2, 385, 387, 5, 378, 190, 2, 386, 385, 3, 2, 2, 2, 387, 388, 3, 2, 2, 2, 388, 386, 3, 2, 2, 2, 388, 389, 3, 2, 2, 2, 389, 398, 3, 2, 2, 2, 390, 398, 7, 71, 2, 2, 391, 392, 7, 87, 2, 2, 392, 393, 5, 92, 47, 2, 393, 394, 7, 88, 2, 2, 394, 398, 3, 2, 2, 2, 395, 398, 5, 6, 4, 2, 396, 398, 5, 14, 8, 2, 397, 386, 3, 2, 2, 2, 397, 390, 3, 2, 2, 2, 397, 391, 3, 2, 2, 2, 397, 395, 3, 2, 2, 2, 397, 396, 3, 2, 2, 2, 398, 5, 3, 2, 2, 2, 399, 402, 5, 8, 5, 2, 400, 402, 5, 10, 6, 2, 401, 399, 3, 2, 2, 2, 401, 400, 3, 2, 2, 2, 402, 7, 3, 2, 2, 2, 403, 414, 7, 134, 2, 2, 404, 414, 5, 328, 165, 2, 405, 414, 5, 314, 158, 2, 406, 414, 5, 330, 166, 2, 407, 410, 7, 101, 2, 2, 408, 411, 5, 276, 139, 2, 409, 411, 5, 160, 81, 2, 410, 408, 3, 2, 2, 2, 410, 409, 3, 2, 2, 2, 411, 414, 3, 2, 2, 2, 412, 414, 5, 342, 172, 2, 413, 403, 3, 2, 2, 2, 413, 404, 3, 2, 2, 2, 413, 405, 3, 2, 2, 2, 413, 406, 3, 2, 2, 2, 413, 407, 3, 2, 2, 2, 413, 412, 3, 2, 2, 2, 414, 9, 3, 2, 2, 2, 415, 417, 5, 12, 7, 2, 416, 418, 7, 70, 2, 2, 417, 416, 3, 2, 2, 2, 417, 418, 3, 2, 2, 2, 418, 419, 3, 2, 2, 2, 419, 420, 5, 8, 5, 2, 420, 11, 3, 2, 2, 2, 421, 425, 8, 7, 1, 2, 422, 426, 5, 158, 80, 2, 423, 426, 5, 182, 92, 2, 424, 426, 5, 160, 81, 2, 425, 422, 3, 2, 2, 2, 425, 423, 3, 2, 2, 2, 425, 424, 3, 2, 2, 2, 425, 426, 3, 2, 2, 2, 426, 427, 3, 2, 2, 2, 427, 428, 7, 129, 2, 2, 428, 440, 3, 2, 2, 2, 429, 435, 12, 3, 2, 2, 430, 436, 7, 134, 2, 2, 431, 433, 7, 70, 2, 2, 432, 431, 3, 2, 2, 2, 432, 433, 3, 2, 2, 2, 433, 434, 3, 2, 2, 2, 434, 436, 5, 340, 171, 2, 435, 430, 3, 2, 2, 2, 435, 432, 3, 2, 2, 2, 436, 437, 3, 2, 2, 2, 437, 439, 7, 129, 2, 2, 438, 429, 3, 2, 2, 2, 439, 442, 3, 2, 2, 2, 440, 438, 3, 2, 2, 2, 440, 441, 3, 2, 2, 2, 441, 13, 3, 2, 2, 2, 442, 440, 3, 2, 2, 2, 443, 445, 5, 16, 9, 2, 444, 446, 5, 30, 16, 2, 445, 444, 3, 2, 2, 2, 445, 446, 3, 2, 2, 2, 446, 447, 3, 2, 2, 2, 447, 448, 5, 102, 52, 2, 448, 15, 3, 2, 2, 2, 449, 451, 7, 89, 2, 2, 450, 452, 5, 18, 10, 2, 451, 450, 3, 2, 2, 2, 451, 452, 3, 2, 2, 2, 452, 453, 3, 2, 2, 2, 453, 454, 7, 90, 2, 2, 454, 17, 3, 2, 2, 2, 455, 462, 5, 22, 12, 2, 456, 459, 5, 20, 11, 2, 457, 458, 7, 124, 2, 2, 458, 460, 5, 22, 12, 2, 459, 457, 3, 2, 2, 2, 459, 460, 3, 2, 2, 2, 460, 462, 3, 2, 2, 2, 461, 455, 3, 2, 2, 2, 461, 456, 3, 2, 2, 2, 462, 19, 3, 2, 2, 2, 463, 464, 9, 2, 2, 2, 464, 21, 3, 2, 2, 2, 465, 470, 5, 24, 13, 2, 466, 467, 7, 124, 2, 2, 467, 469, 5, 24, 13, 2, 468, 466, 3, 2, 2, 2, 469, 472, 3, 2, 2, 2, 470, 468, 3, 2, 2, 2, 470, 471, 3, 2, 2, 2, 471, 474, 3, 2, 2, 2, 472, 470, 3, 2, 2, 2, 473, 475, 7, 133, 2, 2, 474, 473, 3, 2, 2, 2, 474, 475, 3, 2, 2, 2, 475, 23, 3, 2, 2, 2, 476, 479, 5, 26, 14, 2, 477, 479, 5, 28, 15, 2, 478, 476, 3, 2, 2, 2, 478, 477, 3, 2, 2, 2, 479, 25, 3, 2, 2, 2, 480, 482, 7, 99, 2, 2, 481, 480, 3, 2, 2, 2, 481, 482, 3, 2, 2, 2, 482, 483, 3, 2, 2, 2, 483, 486, 7, 134, 2, 2, 484, 486, 7, 71, 2, 2, 485, 481, 3, 2, 2, 2, 485, 484, 3, 2, 2, 2, 486, 27, 3, 2, 2, 2, 487, 489, 7, 99, 2, 2, 488, 487, 3, 2, 2, 2, 488, 489, 3, 2, 2, 2, 489, 490, 3, 2, 2, 2, 490, 491, 7, 134, 2, 2, 491, 492, 5, 266, 134, 2, 492, 29, 3, 2, 2, 2, 493, 495, 7, 87, 2, 2, 494, 496, 5, 256, 129, 2, 495, 494, 3, 2, 2, 2, 495, 496, 3, 2, 2, 2, 496, 497, 3, 2, 2, 2, 497, 499, 7, 88, 2, 2, 498, 500, 7, 49, 2, 2, 499, 498, 3, 2, 2, 2, 499, 500, 3, 2, 2, 2, 500, 502, 3, 2, 2, 2, 501, 503, 5, 368, 185, 2, 502, 501, 3, 2, 2, 2, 502, 503, 3, 2, 2, 2, 503, 505, 3, 2, 2, 2, 504, 506, 5, 202, 102, 2, 505, 504, 3, 2, 2, 2, 505, 506, 3, 2, 2, 2, 506, 508, 3, 2, 2, 2, 507, 509, 5, 232, 117, 2, 508, 507, 3, 2, 2, 2, 508, 509, 3, 2, 2, 2, 509, 31, 3, 2, 2, 2, 510, 511, 8, 17, 1, 2, 511, 541, 5, 4, 3, 2, 512, 515, 5, 156, 79, 2, 513, 515, 5, 350, 176, 2, 514, 512, 3, 2, 2, 2, 514, 513, 3, 2, 2, 2, 515, 522, 3, 2, 2, 2, 516, 518, 7, 87, 2, 2, 517, 519, 5, 36, 19, 2, 518, 517, 3, 2, 2, 2, 518, 519, 3, 2, 2, 2, 519, 520, 3, 2, 2, 2, 520, 523, 7, 88, 2, 2, 521, 523, 5, 274, 138, 2, 522, 516, 3, 2, 2, 2, 522, 521, 3, 2, 2, 2, 523, 541, 3, 2, 2, 2, 524, 525, 9, 3, 2, 2, 525, 526, 7, 104, 2, 2, 526, 527, 5, 244, 123, 2, 527, 528, 7, 105, 2, 2, 528, 529, 7, 87, 2, 2, 529, 530, 5, 92, 47, 2, 530, 531, 7, 88, 2, 2, 531, 541, 3, 2, 2, 2, 532, 533, 5, 34, 18, 2, 533, 536, 7, 87, 2, 2, 534, 537, 5, 92, 47, 2, 535, 537, 5, 244, 123, 2, 536, 534, 3, 2, 2, 2, 536, 535, 3, 2, 2, 2, 537, 538, 3, 2, 2, 2, 538, 539, 7, 88, 2, 2, 539, 541, 3, 2, 2, 2, 540, 510, 3, 2, 2, 2, 540, 514, 3, 2, 2, 2, 540, 524, 3, 2, 2, 2, 540, 532, 3, 2, 2, 2, 541, 569, 3, 2, 2, 2, 542, 543, 12, 9, 2, 2, 543, 546, 7, 89, 2, 2, 544, 547, 5, 92, 47, 2, 545, 547, 5, 274, 138, 2, 546, 544, 3, 2, 2, 2, 546, 545, 3, 2, 2, 2, 547, 548, 3, 2, 2, 2, 548, 549, 7, 90, 2, 2, 549, 568, 3, 2, 2, 2, 550, 551, 12, 8, 2, 2, 551, 553, 7, 87, 2, 2, 552, 554, 5, 36, 19, 2, 553, 552, 3, 2, 2, 2, 553, 554, 3, 2, 2, 2, 554, 555, 3, 2, 2, 2, 555, 568, 7, 88, 2, 2, 556, 557, 12, 6, 2, 2, 557, 563, 9, 4, 2, 2, 558, 560, 7, 70, 2, 2, 559, 558, 3, 2, 2, 2, 559, 560, 3, 2, 2, 2, 560, 561, 3, 2, 2, 2, 561, 564, 5, 6, 4, 2, 562, 564, 5, 38, 20, 2, 563, 559, 3, 2, 2, 2, 563, 562, 3, 2, 2, 2, 564, 568, 3, 2, 2, 2, 565, 566, 12, 5, 2, 2, 566, 568, 9, 5, 2, 2, 567, 542, 3, 2, 2, 2, 567, 550, 3, 2, 2, 2, 567, 556, 3, 2, 2, 2, 567, 565, 3, 2, 2, 2, 568, 571, 3, 2, 2, 2, 569, 567, 3, 2, 2, 2, 569, 570, 3, 2, 2, 2, 570, 33, 3, 2, 2, 2, 571, 569, 3, 2, 2, 2, 572, 573, 7, 77, 2, 2, 573, 35, 3, 2, 2, 2, 574, 575, 5, 272, 137, 2, 575, 37, 3, 2, 2, 2, 576, 578, 5, 12, 7, 2, 577, 576, 3, 2, 2, 2, 577, 578, 3, 2, 2, 2, 578, 582, 3, 2, 2, 2, 579, 580, 5, 158, 80, 2, 580, 581, 7, 129, 2, 2, 581, 583, 3, 2, 2, 2, 582, 579, 3, 2, 2, 2, 582, 583, 3, 2, 2, 2, 583, 584, 3, 2, 2, 2, 584, 585, 7, 101, 2, 2, 585, 596, 5, 158, 80, 2, 586, 587, 5, 12, 7, 2, 587, 588, 7, 70, 2, 2, 588, 589, 5, 340, 171, 2, 589, 590, 7, 129, 2, 2, 590, 591, 7, 101, 2, 2, 591, 592, 5, 158, 80, 2, 592, 596, 3, 2, 2, 2, 593, 594, 7, 101, 2, 2, 594, 596, 5, 160, 81, 2, 595, 577, 3, 2, 2, 2, 595, 586, 3, 2, 2, 2, 595, 593, 3, 2, 2, 2, 596, 39, 3, 2, 2, 2, 597, 625, 5, 32, 17, 2, 598, 603, 7, 122, 2, 2, 599, 603, 7, 123, 2, 2, 600, 603, 5, 42, 22, 2, 601, 603, 7, 64, 2, 2, 602, 598, 3, 2, 2, 2, 602, 599, 3, 2, 2, 2, 602, 600, 3, 2, 2, 2, 602, 601, 3, 2, 2, 2, 603, 604, 3, 2, 2, 2, 604, 625, 5, 40, 21, 2, 605, 614, 7, 64, 2, 2, 606, 607, 7, 87, 2, 2, 607, 608, 5, 244, 123, 2, 608, 609, 7, 88, 2, 2, 609, 615, 3, 2, 2, 2, 610, 611, 7, 133, 2, 2, 611, 612, 7, 87, 2, 2, 612, 613, 7, 134, 2, 2, 613, 615, 7, 88, 2, 2, 614, 606, 3, 2, 2, 2, 614, 610, 3, 2, 2, 2, 615, 625, 3, 2, 2, 2, 616, 617, 7, 13, 2, 2, 617, 618, 7, 87, 2, 2, 618, 619, 5, 244, 123, 2, 619, 620, 7, 88, 2, 2, 620, 625, 3, 2, 2, 2, 621, 625, 5, 58, 30, 2, 622, 625, 5, 44, 23, 2, 623, 625, 5, 56, 29, 2, 624, 597, 3, 2, 2, 2, 624, 602, 3, 2, 2, 2, 624, 605, 3, 2, 2, 2, 624, 616, 3, 2, 2, 2, 624, 621, 3, 2, 2, 2, 624, 622, 3, 2, 2, 2, 624, 623, 3, 2, 2, 2, 625, 41, 3, 2, 2, 2, 626, 627, 9, 6, 2, 2, 627, 43, 3, 2, 2, 2, 628, 630, 7, 129, 2, 2, 629, 628, 3, 2, 2, 2, 629, 630, 3, 2, 2, 2, 630, 631, 3, 2, 2, 2, 631, 633, 7, 51, 2, 2, 632, 634, 5, 46, 24, 2, 633, 632, 3, 2, 2, 2, 633, 634, 3, 2, 2, 2, 634, 640, 3, 2, 2, 2, 635, 641, 5, 48, 25, 2, 636, 637, 7, 87, 2, 2, 637, 638, 5, 244, 123, 2, 638, 639, 7, 88, 2, 2, 639, 641, 3, 2, 2, 2, 640, 635, 3, 2, 2, 2, 640, 636, 3, 2, 2, 2, 641, 643, 3, 2, 2, 2, 642, 644, 5, 54, 28, 2, 643, 642, 3, 2, 2, 2, 643, 644, 3, 2, 2, 2, 644, 45, 3, 2, 2, 2, 645, 646, 7, 87, 2, 2, 646, 647, 5, 36, 19, 2, 647, 648, 7, 88, 2, 2, 648, 47, 3, 2, 2, 2, 649, 651, 5, 152, 77, 2, 650, 652, 5, 50, 26, 2, 651, 650, 3, 2, 2, 2, 651, 652, 3, 2, 2, 2, 652, 49, 3, 2, 2, 2, 653, 655, 5, 234, 118, 2, 654, 656, 5, 50, 26, 2, 655, 654, 3, 2, 2, 2, 655, 656, 3, 2, 2, 2, 656, 659, 3, 2, 2, 2, 657, 659, 5, 52, 27, 2, 658, 653, 3, 2, 2, 2, 658, 657, 3, 2, 2, 2, 659, 51, 3, 2, 2, 2, 660, 661, 8, 27, 1, 2, 661, 662, 7, 89, 2, 2, 662, 663, 5, 92, 47, 2, 663, 665, 7, 90, 2, 2, 664, 666, 5, 202, 102, 2, 665, 664, 3, 2, 2, 2, 665, 666, 3, 2, 2, 2, 666, 676, 3, 2, 2, 2, 667, 668, 12, 3, 2, 2, 668, 669, 7, 89, 2, 2, 669, 670, 5, 94, 48, 2, 670, 672, 7, 90, 2, 2, 671, 673, 5, 202, 102, 2, 672, 671, 3, 2, 2, 2, 672, 673, 3, 2, 2, 2, 673, 675, 3, 2, 2, 2, 674, 667, 3, 2, 2, 2, 675, 678, 3, 2, 2, 2, 676, 674, 3, 2, 2, 2, 676, 677, 3, 2, 2, 2, 677, 53, 3, 2, 2, 2, 678, 676, 3, 2, 2, 2, 679, 681, 7, 87, 2, 2, 680, 682, 5, 36, 19, 2, 681, 680, 3, 2, 2, 2, 681, 682, 3, 2, 2, 2, 682, 683, 3, 2, 2, 2, 683, 686, 7, 88, 2, 2, 684, 686, 5, 274, 138, 2, 685, 679, 3, 2, 2, 2, 685, 684, 3, 2, 2, 2, 686, 55, 3, 2, 2, 2, 687, 689, 7, 129, 2, 2, 688, 687, 3, 2, 2, 2, 688, 689, 3, 2, 2, 2, 689, 690, 3, 2, 2, 2, 690, 693, 7, 30, 2, 2, 691, 692, 7, 89, 2, 2, 692, 694, 7, 90, 2, 2, 693, 691, 3, 2, 2, 2, 693, 694, 3, 2, 2, 2, 694, 695, 3, 2, 2, 2, 695, 696, 5, 60, 31, 2, 696, 57, 3, 2, 2, 2, 697, 698, 7, 52, 2, 2, 698, 699, 7, 87, 2, 2, 699, 700, 5, 92, 47, 2, 700, 701, 7, 88, 2, 2, 701, 59, 3, 2, 2, 2, 702, 709, 5, 40, 21, 2, 703, 704, 7, 87, 2, 2, 704, 705, 5, 244, 123, 2, 705, 706, 7, 88, 2, 2, 706, 707, 5, 60, 31, 2, 707, 709, 3, 2, 2, 2, 708, 702, 3, 2, 2, 2, 708, 703, 3, 2, 2, 2, 709, 61, 3, 2, 2, 2, 710, 715, 5, 60, 31, 2, 711, 712, 9, 7, 2, 2, 712, 714, 5, 60, 31, 2, 713, 711, 3, 2, 2, 2, 714, 717, 3, 2, 2, 2, 715, 713, 3, 2, 2, 2, 715, 716, 3, 2, 2, 2, 716, 63, 3, 2, 2, 2, 717, 715, 3, 2, 2, 2, 718, 723, 5, 62, 32, 2, 719, 720, 9, 8, 2, 2, 720, 722, 5, 62, 32, 2, 721, 719, 3, 2, 2, 2, 722, 725, 3, 2, 2, 2, 723, 721, 3, 2, 2, 2, 723, 724, 3, 2, 2, 2, 724, 65, 3, 2, 2, 2, 725, 723, 3, 2, 2, 2, 726, 731, 5, 64, 33, 2, 727, 728, 9, 9, 2, 2, 728, 730, 5, 64, 33, 2, 729, 727, 3, 2, 2, 2, 730, 733, 3, 2, 2, 2, 731, 729, 3, 2, 2, 2, 731, 732, 3, 2, 2, 2, 732, 67, 3, 2, 2, 2, 733, 731, 3, 2, 2, 2, 734, 740, 5, 66, 34, 2, 735, 736, 5, 70, 36, 2, 736, 737, 5, 66, 34, 2, 737, 739, 3, 2, 2, 2, 738, 735, 3, 2, 2, 2, 739, 742, 3, 2, 2, 2, 740, 738, 3, 2, 2, 2, 740, 741, 3, 2, 2, 2, 741, 69, 3, 2, 2, 2, 742, 740, 3, 2, 2, 2, 743, 744, 7, 105, 2, 2, 744, 748, 7, 105, 2, 2, 745, 746, 7, 104, 2, 2, 746, 748, 7, 104, 2, 2, 747, 743, 3, 2, 2, 2, 747, 745, 3, 2, 2, 2, 748, 71, 3, 2, 2, 2, 749, 754, 5, 68, 35, 2, 750, 751, 9, 10, 2, 2, 751, 753, 5, 68, 35, 2, 752, 750, 3, 2, 2, 2, 753, 756, 3, 2, 2, 2, 754, 752, 3, 2, 2, 2, 754, 755, 3, 2, 2, 2, 755, 73, 3, 2, 2, 2, 756, 754, 3, 2, 2, 2, 757, 762, 5, 72, 37, 2, 758, 759, 9, 11, 2, 2, 759, 761, 5, 72, 37, 2, 760, 758, 3, 2, 2, 2, 761, 764, 3, 2, 2, 2, 762, 760, 3, 2, 2, 2, 762, 763, 3, 2, 2, 2, 763, 75, 3, 2, 2, 2, 764, 762, 3, 2, 2, 2, 765, 770, 5, 74, 38, 2, 766, 767, 7, 99, 2, 2, 767, 769, 5, 74, 38, 2, 768, 766, 3, 2, 2, 2, 769, 772, 3, 2, 2, 2, 770, 768, 3, 2, 2, 2, 770, 771, 3, 2, 2, 2, 771, 77, 3, 2, 2, 2, 772, 770, 3, 2, 2, 2, 773, 778, 5, 76, 39, 2, 774, 775, 7, 98, 2, 2, 775, 777, 5, 76, 39, 2, 776, 774, 3, 2, 2, 2, 777, 780, 3, 2, 2, 2, 778, 776, 3, 2, 2, 2, 778, 779, 3, 2, 2, 2, 779, 79, 3, 2, 2, 2, 780, 778, 3, 2, 2, 2, 781, 786, 5, 78, 40, 2, 782, 783, 7, 100, 2, 2, 783, 785, 5, 78, 40, 2, 784, 782, 3, 2, 2, 2, 785, 788, 3, 2, 2, 2, 786, 784, 3, 2, 2, 2, 786, 787, 3, 2, 2, 2, 787, 81, 3, 2, 2, 2, 788, 786, 3, 2, 2, 2, 789, 794, 5, 80, 41, 2, 790, 791, 7, 120, 2, 2, 791, 793, 5, 80, 41, 2, 792, 790, 3, 2, 2, 2, 793, 796, 3, 2, 2, 2, 794, 792, 3, 2, 2, 2, 794, 795, 3, 2, 2, 2, 795, 83, 3, 2, 2, 2, 796, 794, 3, 2, 2, 2, 797, 802, 5, 82, 42, 2, 798, 799, 7, 121, 2, 2, 799, 801, 5, 82, 42, 2, 800, 798, 3, 2, 2, 2, 801, 804, 3, 2, 2, 2, 802, 800, 3, 2, 2, 2, 802, 803, 3, 2, 2, 2, 803, 85, 3, 2, 2, 2, 804, 802, 3, 2, 2, 2, 805, 811, 5, 84, 43, 2, 806, 807, 7, 127, 2, 2, 807, 808, 5, 92, 47, 2, 808, 809, 7, 128, 2, 2, 809, 810, 5, 88, 45, 2, 810, 812, 3, 2, 2, 2, 811, 806, 3, 2, 2, 2, 811, 812, 3, 2, 2, 2, 812, 87, 3, 2, 2, 2, 813, 820, 5, 86, 44, 2, 814, 815, 5, 84, 43, 2, 815, 816, 5, 90, 46, 2, 816, 817, 5, 270, 136, 2, 817, 820, 3, 2, 2, 2, 818, 820, 5, 366, 184, 2, 819, 813, 3, 2, 2, 2, 819, 814, 3, 2, 2, 2, 819, 818, 3, 2, 2, 2, 820, 89, 3, 2, 2, 2, 821, 822, 9, 12, 2, 2, 822, 91, 3, 2, 2, 2, 823, 828, 5, 88, 45, 2, 824, 825, 7, 124, 2, 2, 825, 827, 5, 88, 45, 2, 826, 824, 3, 2, 2, 2, 827, 830, 3, 2, 2, 2, 828, 826, 3, 2, 2, 2, 828, 829, 3, 2, 2, 2, 829, 93, 3, 2, 2, 2, 830, 828, 3, 2, 2, 2, 831, 832, 5, 86, 44, 2, 832, 95, 3, 2, 2, 2, 833, 847, 5, 98, 50, 2, 834, 836, 5, 202, 102, 2, 835, 834, 3, 2, 2, 2, 835, 836, 3, 2, 2, 2, 836, 843, 3, 2, 2, 2, 837, 844, 5, 100, 51, 2, 838, 844, 5, 102, 52, 2, 839, 844, 5, 106, 54, 2, 840, 844, 5, 110, 56, 2, 841, 844, 5, 118, 60, 2, 842, 844, 5, 356, 179, 2, 843, 837, 3, 2, 2, 2, 843, 838, 3, 2, 2, 2, 843, 839, 3, 2, 2, 2, 843, 840, 3, 2, 2, 2, 843, 841, 3, 2, 2, 2, 843, 842, 3, 2, 2, 2, 844, 847, 3, 2, 2, 2, 845, 847, 5, 120, 61, 2, 846, 833, 3, 2, 2, 2, 846, 835, 3, 2, 2, 2, 846, 845, 3, 2, 2, 2, 847, 97, 3, 2, 2, 2, 848, 850, 5, 202, 102, 2, 849, 848, 3, 2, 2, 2, 849, 850, 3, 2, 2, 2, 850, 855, 3, 2, 2, 2, 851, 856, 7, 134, 2, 2, 852, 853, 7, 18, 2, 2, 853, 856, 5, 94, 48, 2, 854, 856, 7, 29, 2, 2, 855, 851, 3, 2, 2, 2, 855, 852, 3, 2, 2, 2, 855, 854, 3, 2, 2, 2, 856, 857, 3, 2, 2, 2, 857, 858, 7, 128, 2, 2, 858, 859, 5, 96, 49, 2, 859, 99, 3, 2, 2, 2, 860, 862, 5, 92, 47, 2, 861, 860, 3, 2, 2, 2, 861, 862, 3, 2, 2, 2, 862, 863, 3, 2, 2, 2, 863, 864, 7, 130, 2, 2, 864, 101, 3, 2, 2, 2, 865, 867, 7, 91, 2, 2, 866, 868, 5, 104, 53, 2, 867, 866, 3, 2, 2, 2, 867, 868, 3, 2, 2, 2, 868, 869, 3, 2, 2, 2, 869, 870, 7, 92, 2, 2, 870, 103, 3, 2, 2, 2, 871, 873, 5, 96, 49, 2, 872, 871, 3, 2, 2, 2, 873, 874, 3, 2, 2, 2, 874, 872, 3, 2, 2, 2, 874, 875, 3, 2, 2, 2, 875, 105, 3, 2, 2, 2, 876, 877, 7, 45, 2, 2, 877, 878, 7, 87, 2, 2, 878, 879, 5, 108, 55, 2, 879, 880, 7, 88, 2, 2, 880, 883, 5, 96, 49, 2, 881, 882, 7, 34, 2, 2, 882, 884, 5, 96, 49, 2, 883, 881, 3, 2, 2, 2, 883, 884, 3, 2, 2, 2, 884, 892, 3, 2, 2, 2, 885, 886, 7, 69, 2, 2, 886, 887, 7, 87, 2, 2, 887, 888, 5, 108, 55, 2, 888, 889, 7, 88, 2, 2, 889, 890, 5, 96, 49, 2, 890, 892, 3, 2, 2, 2, 891, 876, 3, 2, 2, 2, 891, 885, 3, 2, 2, 2, 892, 107, 3, 2, 2, 2, 893, 905, 5, 92, 47, 2, 894, 896, 5, 202, 102, 2, 895, 894, 3, 2, 2, 2, 895, 896, 3, 2, 2, 2, 896, 897, 3, 2, 2, 2, 897, 898, 5, 140, 71, 2, 898, 902, 5, 224, 113, 2, 899, 900, 7, 103, 2, 2, 900, 903, 5, 270, 136, 2, 901, 903, 5, 274, 138, 2, 902, 899, 3, 2, 2, 2, 902, 901, 3, 2, 2, 2, 903, 905, 3, 2, 2, 2, 904, 893, 3, 2, 2, 2, 904, 895, 3, 2, 2, 2, 905, 109, 3, 2, 2, 2, 906, 907, 7, 86, 2, 2, 907, 908, 7, 87, 2, 2, 908, 909, 5, 108, 55, 2, 909, 910, 7, 88, 2, 2, 910, 911, 5, 96, 49, 2, 911, 940, 3, 2, 2, 2, 912, 913, 7, 31, 2, 2, 913, 914, 5, 96, 49, 2, 914, 915, 7, 86, 2, 2, 915, 916, 7, 87, 2, 2, 916, 917, 5, 92, 47, 2, 917, 918, 7, 88, 2, 2, 918, 919, 7, 130, 2, 2, 919, 940, 3, 2, 2, 2, 920, 921, 7, 42, 2, 2, 921, 934, 7, 87, 2, 2, 922, 924, 5, 112, 57, 2, 923, 925, 5, 108, 55, 2, 924, 923, 3, 2, 2, 2, 924, 925, 3, 2, 2, 2, 925, 926, 3, 2, 2, 2, 926, 928, 7, 130, 2, 2, 927, 929, 5, 92, 47, 2, 928, 927, 3, 2, 2, 2, 928, 929, 3, 2, 2, 2, 929, 935, 3, 2, 2, 2, 930, 931, 5, 114, 58, 2, 931, 932, 7, 128, 2, 2, 932, 933, 5, 116, 59, 2, 933, 935, 3, 2, 2, 2, 934, 922, 3, 2, 2, 2, 934, 930, 3, 2, 2, 2, 935, 936, 3, 2, 2, 2, 936, 937, 7, 88, 2, 2, 937, 938, 5, 96, 49, 2, 938, 940, 3, 2, 2, 2, 939, 906, 3, 2, 2, 2, 939, 912, 3, 2, 2, 2, 939, 920, 3, 2, 2, 2, 940, 111, 3, 2, 2, 2, 941, 944, 5, 100, 51, 2, 942, 944, 5, 130, 66, 2, 943, 941, 3, 2, 2, 2, 943, 942, 3, 2, 2, 2, 944, 113, 3, 2, 2, 2, 945, 947, 5, 202, 102, 2, 946, 945, 3, 2, 2, 2, 946, 947, 3, 2, 2, 2, 947, 948, 3, 2, 2, 2, 948, 949, 5, 140, 71, 2, 949, 950, 5, 224, 113, 2, 950, 115, 3, 2, 2, 2, 951, 954, 5, 92, 47, 2, 952, 954, 5, 274, 138, 2, 953, 951, 3, 2, 2, 2, 953, 952, 3, 2, 2, 2, 954, 117, 3, 2, 2, 2, 955, 965, 7, 17, 2, 2, 956, 965, 7, 27, 2, 2, 957, 960, 7, 61, 2, 2, 958, 961, 5, 92, 47, 2, 959, 961, 5, 274, 138, 2, 960, 958, 3, 2, 2, 2, 960, 959, 3, 2, 2, 2, 960, 961, 3, 2, 2, 2, 961, 965, 3, 2, 2, 2, 962, 963, 7, 44, 2, 2, 963, 965, 7, 134, 2, 2, 964, 955, 3, 2, 2, 2, 964, 956, 3, 2, 2, 2, 964, 957, 3, 2, 2, 2, 964, 962, 3, 2, 2, 2, 965, 966, 3, 2, 2, 2, 966, 967, 7, 130, 2, 2, 967, 119, 3, 2, 2, 2, 968, 969, 5, 126, 64, 2, 969, 121, 3, 2, 2, 2, 970, 972, 5, 124, 63, 2, 971, 970, 3, 2, 2, 2, 972, 973, 3, 2, 2, 2, 973, 971, 3, 2, 2, 2, 973, 974, 3, 2, 2, 2, 974, 123, 3, 2, 2, 2, 975, 985, 5, 126, 64, 2, 976, 985, 5, 262, 132, 2, 977, 985, 5, 332, 167, 2, 978, 985, 5, 352, 177, 2, 979, 985, 5, 354, 178, 2, 980, 985, 5, 200, 101, 2, 981, 985, 5, 186, 94, 2, 982, 985, 5, 134, 68, 2, 983, 985, 5, 136, 69, 2, 984, 975, 3, 2, 2, 2, 984, 976, 3, 2, 2, 2, 984, 977, 3, 2, 2, 2, 984, 978, 3, 2, 2, 2, 984, 979, 3, 2, 2, 2, 984, 980, 3, 2, 2, 2, 984, 981, 3, 2, 2, 2, 984, 982, 3, 2, 2, 2, 984, 983, 3, 2, 2, 2, 985, 125, 3, 2, 2, 2, 986, 995, 5, 130, 66, 2, 987, 995, 5, 198, 100, 2, 988, 995, 5, 190, 96, 2, 989, 995, 5, 194, 98, 2, 990, 995, 5, 196, 99, 2, 991, 995, 5, 132, 67, 2, 992, 995, 5, 128, 65, 2, 993, 995, 5, 170, 86, 2, 994, 986, 3, 2, 2, 2, 994, 987, 3, 2, 2, 2, 994, 988, 3, 2, 2, 2, 994, 989, 3, 2, 2, 2, 994, 990, 3, 2, 2, 2, 994, 991, 3, 2, 2, 2, 994, 992, 3, 2, 2, 2, 994, 993, 3, 2, 2, 2, 995, 127, 3, 2, 2, 2, 996, 997, 7, 81, 2, 2, 997, 999, 7, 134, 2, 2, 998, 1000, 5, 202, 102, 2, 999, 998, 3, 2, 2, 2, 999, 1000, 3, 2, 2, 2, 1000, 1001, 3, 2, 2, 2, 1001, 1002, 7, 103, 2, 2, 1002, 1003, 5, 244, 123, 2, 1003, 1004, 7, 130, 2, 2, 1004, 129, 3, 2, 2, 2, 1005, 1007, 5, 140, 71, 2, 1006, 1005, 3, 2, 2, 2, 1006, 1007, 3, 2, 2, 2, 1007, 1009, 3, 2, 2, 2, 1008, 1010, 5, 220, 111, 2, 1009, 1008, 3, 2, 2, 2, 1009, 1010, 3, 2, 2, 2, 1010, 1011, 3, 2, 2, 2, 1011, 1020, 7, 130, 2, 2, 1012, 1014, 5, 202, 102, 2, 1013, 1015, 5, 140, 71, 2, 1014, 1013, 3, 2, 2, 2, 1014, 1015, 3, 2, 2, 2, 1015, 1016, 3, 2, 2, 2, 1016, 1017, 5, 220, 111, 2, 1017, 1018, 7, 130, 2, 2, 1018, 1020, 3, 2, 2, 2, 1019, 1006, 3, 2, 2, 2, 1019, 1012, 3, 2, 2, 2, 1020, 131, 3, 2, 2, 2, 1021, 1022, 7, 66, 2, 2, 1022, 1023, 7, 87, 2, 2, 1023, 1024, 5, 94, 48, 2, 1024, 1025, 7, 124, 2, 2, 1025, 1026, 7, 6, 2, 2, 1026, 1027, 7, 88, 2, 2, 1027, 1028, 7, 130, 2, 2, 1028, 133, 3, 2, 2, 2, 1029, 1030, 7, 130, 2, 2, 1030, 135, 3, 2, 2, 2, 1031, 1032, 5, 202, 102, 2, 1032, 1033, 7, 130, 2, 2, 1033, 137, 3, 2, 2, 2, 1034, 1041, 5, 142, 72, 2, 1035, 1041, 5, 148, 75, 2, 1036, 1041, 5, 144, 73, 2, 1037, 1041, 7, 43, 2, 2, 1038, 1041, 7, 76, 2, 2, 1039, 1041, 7, 25, 2, 2, 1040, 1034, 3, 2, 2, 2, 1040, 1035, 3, 2, 2, 2, 1040, 1036, 3, 2, 2, 2, 1040, 1037, 3, 2, 2, 2, 1040, 1038, 3, 2, 2, 2, 1040, 1039, 3, 2, 2, 2, 1041, 139, 3, 2, 2, 2, 1042, 1044, 5, 138, 70, 2, 1043, 1042, 3, 2, 2, 2, 1044, 1045, 3, 2, 2, 2, 1045, 1043, 3, 2, 2, 2, 1045, 1046, 3, 2, 2, 2, 1046, 1048, 3, 2, 2, 2, 1047, 1049, 5, 202, 102, 2, 1048, 1047, 3, 2, 2, 2, 1048, 1049, 3, 2, 2, 2, 1049, 141, 3, 2, 2, 2, 1050, 1051, 9, 13, 2, 2, 1051, 143, 3, 2, 2, 2, 1052, 1053, 9, 14, 2, 2, 1053, 145, 3, 2, 2, 2, 1054, 1055, 7, 134, 2, 2, 1055, 147, 3, 2, 2, 2, 1056, 1060, 5, 150, 76, 2, 1057, 1060, 5, 278, 140, 2, 1058, 1060, 5, 166, 84, 2, 1059, 1056, 3, 2, 2, 2, 1059, 1057, 3, 2, 2, 2, 1059, 1058, 3, 2, 2, 2, 1060, 149, 3, 2, 2, 2, 1061, 1066, 5, 156, 79, 2, 1062, 1066, 5, 162, 82, 2, 1063, 1066, 5, 350, 176, 2, 1064, 1066, 5, 238, 120, 2, 1065, 1061, 3, 2, 2, 2, 1065, 1062, 3, 2, 2, 2, 1065, 1063, 3, 2, 2, 2, 1065, 1064, 3, 2, 2, 2, 1066, 151, 3, 2, 2, 2, 1067, 1069, 5, 148, 75, 2, 1068, 1067, 3, 2, 2, 2, 1069, 1070, 3, 2, 2, 2, 1070, 1068, 3, 2, 2, 2, 1070, 1071, 3, 2, 2, 2, 1071, 1073, 3, 2, 2, 2, 1072, 1074, 5, 202, 102, 2, 1073, 1072, 3, 2, 2, 2, 1073, 1074, 3, 2, 2, 2, 1074, 153, 3, 2, 2, 2, 1075, 1077, 5, 150, 76, 2, 1076, 1075, 3, 2, 2, 2, 1077, 1078, 3, 2, 2, 2, 1078, 1076, 3, 2, 2, 2, 1078, 1079, 3, 2, 2, 2, 1079, 1081, 3, 2, 2, 2, 1080, 1082, 5, 202, 102, 2, 1081, 1080, 3, 2, 2, 2, 1081, 1082, 3, 2, 2, 2, 1082, 155, 3, 2, 2, 2, 1083, 1085, 5, 12, 7, 2, 1084, 1083, 3, 2, 2, 2, 1084, 1085, 3, 2, 2, 2, 1085, 1086, 3, 2, 2, 2, 1086, 1107, 5, 158, 80, 2, 1087, 1088, 5, 12, 7, 2, 1088, 1089, 7, 70, 2, 2, 1089, 1090, 5, 340, 171, 2, 1090, 1107, 3, 2, 2, 2, 1091, 1107, 7, 20, 2, 2, 1092, 1107, 7, 21, 2, 2, 1093, 1107, 7, 22, 2, 2, 1094, 1107, 7, 85, 2, 2, 1095, 1107, 7, 16, 2, 2, 1096, 1107, 7, 62, 2, 2, 1097, 1107, 7, 47, 2, 2, 1098, 1107, 7, 48, 2, 2, 1099, 1107, 7, 63, 2, 2, 1100, 1107, 7, 80, 2, 2, 1101, 1107, 7, 41, 2, 2, 1102, 1107, 7, 32, 2, 2, 1103, 1107, 7, 83, 2, 2, 1104, 1107, 7, 15, 2, 2, 1105, 1107, 5, 160, 81, 2, 1106, 1084, 3, 2, 2, 2, 1106, 1087, 3, 2, 2, 2, 1106, 1091, 3, 2, 2, 2, 1106, 1092, 3, 2, 2, 2, 1106, 1093, 3, 2, 2, 2, 1106, 1094, 3, 2, 2, 2, 1106, 1095, 3, 2, 2, 2, 1106, 1096, 3, 2, 2, 2, 1106, 1097, 3, 2, 2, 2, 1106, 1098, 3, 2, 2, 2, 1106, 1099, 3, 2, 2, 2, 1106, 1100, 3, 2, 2, 2, 1106, 1101, 3, 2, 2, 2, 1106, 1102, 3, 2, 2, 2, 1106, 1103, 3, 2, 2, 2, 1106, 1104, 3, 2, 2, 2, 1106, 1105, 3, 2, 2, 2, 1107, 157, 3, 2, 2, 2, 1108, 1113, 5, 276, 139, 2, 1109, 1113, 5, 164, 83, 2, 1110, 1113, 5, 146, 74, 2, 1111, 1113, 5, 340, 171, 2, 1112, 1108, 3, 2, 2, 2, 1112, 1109, 3, 2, 2, 2, 1112, 1110, 3, 2, 2, 2, 1112, 1111, 3, 2, 2, 2, 1113, 159, 3, 2, 2, 2, 1114, 1115, 7, 28, 2, 2, 1115, 1118, 7, 87, 2, 2, 1116, 1119, 5, 92, 47, 2, 1117, 1119, 7, 15, 2, 2, 1118, 1116, 3, 2, 2, 2, 1118, 1117, 3, 2, 2, 2, 1119, 1120, 3, 2, 2, 2, 1120, 1121, 7, 88, 2, 2, 1121, 161, 3, 2, 2, 2, 1122, 1137, 5, 286, 144, 2, 1123, 1125, 5, 202, 102, 2, 1124, 1123, 3, 2, 2, 2, 1124, 1125, 3, 2, 2, 2, 1125, 1127, 3, 2, 2, 2, 1126, 1128, 5, 12, 7, 2, 1127, 1126, 3, 2, 2, 2, 1127, 1128, 3, 2, 2, 2, 1128, 1129, 3, 2, 2, 2, 1129, 1138, 7, 134, 2, 2, 1130, 1138, 5, 340, 171, 2, 1131, 1133, 5, 12, 7, 2, 1132, 1134, 7, 70, 2, 2, 1133, 1132, 3, 2, 2, 2, 1133, 1134, 3, 2, 2, 2, 1134, 1135, 3, 2, 2, 2, 1135, 1136, 5, 340, 171, 2, 1136, 1138, 3, 2, 2, 2, 1137, 1124, 3, 2, 2, 2, 1137, 1130, 3, 2, 2, 2, 1137, 1131, 3, 2, 2, 2, 1138, 1145, 3, 2, 2, 2, 1139, 1141, 7, 35, 2, 2, 1140, 1142, 5, 12, 7, 2, 1141, 1140, 3, 2, 2, 2, 1141, 1142, 3, 2, 2, 2, 1142, 1143, 3, 2, 2, 2, 1143, 1145, 7, 134, 2, 2, 1144, 1122, 3, 2, 2, 2, 1144, 1139, 3, 2, 2, 2, 1145, 163, 3, 2, 2, 2, 1146, 1147, 7, 134, 2, 2, 1147, 165, 3, 2, 2, 2, 1148, 1149, 5, 168, 85, 2, 1149, 1154, 7, 91, 2, 2, 1150, 1152, 5, 176, 89, 2, 1151, 1153, 7, 124, 2, 2, 1152, 1151, 3, 2, 2, 2, 1152, 1153, 3, 2, 2, 2, 1153, 1155, 3, 2, 2, 2, 1154, 1150, 3, 2, 2, 2, 1154, 1155, 3, 2, 2, 2, 1155, 1156, 3, 2, 2, 2, 1156, 1157, 7, 92, 2, 2, 1157, 167, 3, 2, 2, 2, 1158, 1160, 5, 172, 87, 2, 1159, 1161, 5, 202, 102, 2, 1160, 1159, 3, 2, 2, 2, 1160, 1161, 3, 2, 2, 2, 1161, 1166, 3, 2, 2, 2, 1162, 1164, 5, 12, 7, 2, 1163, 1162, 3, 2, 2, 2, 1163, 1164, 3, 2, 2, 2, 1164, 1165, 3, 2, 2, 2, 1165, 1167, 7, 134, 2, 2, 1166, 1163, 3, 2, 2, 2, 1166, 1167, 3, 2, 2, 2, 1167, 1169, 3, 2, 2, 2, 1168, 1170, 5, 174, 88, 2, 1169, 1168, 3, 2, 2, 2, 1169, 1170, 3, 2, 2, 2, 1170, 169, 3, 2, 2, 2, 1171, 1173, 5, 172, 87, 2, 1172, 1174, 5, 202, 102, 2, 1173, 1172, 3, 2, 2, 2, 1173, 1174, 3, 2, 2, 2, 1174, 1175, 3, 2, 2, 2, 1175, 1177, 7, 134, 2, 2, 1176, 1178, 5, 174, 88, 2, 1177, 1176, 3, 2, 2, 2, 1177, 1178, 3, 2, 2, 2, 1178, 1179, 3, 2, 2, 2, 1179, 1180, 7, 130, 2, 2, 1180, 171, 3, 2, 2, 2, 1181, 1183, 7, 35, 2, 2, 1182, 1184, 9, 15, 2, 2, 1183, 1182, 3, 2, 2, 2, 1183, 1184, 3, 2, 2, 2, 1184, 173, 3, 2, 2, 2, 1185, 1186, 7, 128, 2, 2, 1186, 1187, 5, 152, 77, 2, 1187, 175, 3, 2, 2, 2, 1188, 1193, 5, 178, 90, 2, 1189, 1190, 7, 124, 2, 2, 1190, 1192, 5, 178, 90, 2, 1191, 1189, 3, 2, 2, 2, 1192, 1195, 3, 2, 2, 2, 1193, 1191, 3, 2, 2, 2, 1193, 1194, 3, 2, 2, 2, 1194, 177, 3, 2, 2, 2, 1195, 1193, 3, 2, 2, 2, 1196, 1199, 5, 180, 91, 2, 1197, 1198, 7, 103, 2, 2, 1198, 1200, 5, 94, 48, 2, 1199, 1197, 3, 2, 2, 2, 1199, 1200, 3, 2, 2, 2, 1200, 179, 3, 2, 2, 2, 1201, 1202, 7, 134, 2, 2, 1202, 181, 3, 2, 2, 2, 1203, 1206, 5, 184, 93, 2, 1204, 1206, 5, 188, 95, 2, 1205, 1203, 3, 2, 2, 2, 1205, 1204, 3, 2, 2, 2, 1206, 183, 3, 2, 2, 2, 1207, 1208, 7, 134, 2, 2, 1208, 185, 3, 2, 2, 2, 1209, 1211, 7, 46, 2, 2, 1210, 1209, 3, 2, 2, 2, 1210, 1211, 3, 2, 2, 2, 1211, 1212, 3, 2, 2, 2, 1212, 1215, 7, 50, 2, 2, 1213, 1216, 7, 134, 2, 2, 1214, 1216, 5, 184, 93, 2, 1215, 1213, 3, 2, 2, 2, 1215, 1214, 3, 2, 2, 2, 1215, 1216, 3, 2, 2, 2, 1216, 1217, 3, 2, 2, 2, 1217, 1219, 7, 91, 2, 2, 1218, 1220, 5, 122, 62, 2, 1219, 1218, 3, 2, 2, 2, 1219, 1220, 3, 2, 2, 2, 1220, 1221, 3, 2, 2, 2, 1221, 1222, 7, 92, 2, 2, 1222, 187, 3, 2, 2, 2, 1223, 1224, 7, 134, 2, 2, 1224, 189, 3, 2, 2, 2, 1225, 1226, 7, 50, 2, 2, 1226, 1227, 7, 134, 2, 2, 1227, 1228, 7, 103, 2, 2, 1228, 1229, 5, 192, 97, 2, 1229, 1230, 7, 130, 2, 2, 1230, 191, 3, 2, 2, 2, 1231, 1233, 5, 12, 7, 2, 1232, 1231, 3, 2, 2, 2, 1232, 1233, 3, 2, 2, 2, 1233, 1234, 3, 2, 2, 2, 1234, 1235, 5, 182, 92, 2, 1235, 193, 3, 2, 2, 2, 1236, 1242, 7, 81, 2, 2, 1237, 1239, 7, 78, 2, 2, 1238, 1237, 3, 2, 2, 2, 1238, 1239, 3, 2, 2, 2, 1239, 1240, 3, 2, 2, 2, 1240, 1243, 5, 12, 7, 2, 1241, 1243, 7, 129, 2, 2, 1242, 1238, 3, 2, 2, 2, 1242, 1241, 3, 2, 2, 2, 1243, 1244, 3, 2, 2, 2, 1244, 1245, 5, 8, 5, 2, 1245, 1246, 7, 130, 2, 2, 1246, 195, 3, 2, 2, 2, 1247, 1249, 5, 202, 102, 2, 1248, 1247, 3, 2, 2, 2, 1248, 1249, 3, 2, 2, 2, 1249, 1250, 3, 2, 2, 2, 1250, 1251, 7, 81, 2, 2, 1251, 1253, 7, 50, 2, 2, 1252, 1254, 5, 12, 7, 2, 1253, 1252, 3, 2, 2, 2, 1253, 1254, 3, 2, 2, 2, 1254, 1255, 3, 2, 2, 2, 1255, 1256, 5, 182, 92, 2, 1256, 1257, 7, 130, 2, 2, 1257, 197, 3, 2, 2, 2, 1258, 1259, 7, 14, 2, 2, 1259, 1260, 7, 87, 2, 2, 1260, 1261, 7, 6, 2, 2, 1261, 1262, 7, 88, 2, 2, 1262, 1263, 7, 130, 2, 2, 1263, 199, 3, 2, 2, 2, 1264, 1265, 7, 38, 2, 2, 1265, 1272, 7, 6, 2, 2, 1266, 1268, 7, 91, 2, 2, 1267, 1269, 5, 122, 62, 2, 1268, 1267, 3, 2, 2, 2, 1268, 1269, 3, 2, 2, 2, 1269, 1270, 3, 2, 2, 2, 1270, 1273, 7, 92, 2, 2, 1271, 1273, 5, 124, 63, 2, 1272, 1266, 3, 2, 2, 2, 1272, 1271, 3, 2, 2, 2, 1273, 201, 3, 2, 2, 2, 1274, 1276, 5, 204, 103, 2, 1275, 1274, 3, 2, 2, 2, 1276, 1277, 3, 2, 2, 2, 1277, 1275, 3, 2, 2, 2, 1277, 1278, 3, 2, 2, 2, 1278, 203, 3, 2, 2, 2, 1279, 1280, 7, 89, 2, 2, 1280, 1282, 7, 89, 2, 2, 1281, 1283, 5, 208, 105, 2, 1282, 1281, 3, 2, 2, 2, 1282, 1283, 3, 2, 2, 2, 1283, 1284, 3, 2, 2, 2, 1284, 1285, 7, 90, 2, 2, 1285, 1288, 7, 90, 2, 2, 1286, 1288, 5, 206, 104, 2, 1287, 1279, 3, 2, 2, 2, 1287, 1286, 3, 2, 2, 2, 1288, 205, 3, 2, 2, 2, 1289, 1290, 7, 12, 2, 2, 1290, 1293, 7, 87, 2, 2, 1291, 1294, 5, 244, 123, 2, 1292, 1294, 5, 94, 48, 2, 1293, 1291, 3, 2, 2, 2, 1293, 1292, 3, 2, 2, 2, 1294, 1296, 3, 2, 2, 2, 1295, 1297, 7, 133, 2, 2, 1296, 1295, 3, 2, 2, 2, 1296, 1297, 3, 2, 2, 2, 1297, 1298, 3, 2, 2, 2, 1298, 1299, 7, 88, 2, 2, 1299, 207, 3, 2, 2, 2, 1300, 1305, 5, 210, 106, 2, 1301, 1302, 7, 124, 2, 2, 1302, 1304, 5, 210, 106, 2, 1303, 1301, 3, 2, 2, 2, 1304, 1307, 3, 2, 2, 2, 1305, 1303, 3, 2, 2, 2, 1305, 1306, 3, 2, 2, 2, 1306, 1309, 3, 2, 2, 2, 1307, 1305, 3, 2, 2, 2, 1308, 1310, 7, 133, 2, 2, 1309, 1308, 3, 2, 2, 2, 1309, 1310, 3, 2, 2, 2, 1310, 209, 3, 2, 2, 2, 1311, 1312, 5, 212, 107, 2, 1312, 1313, 7, 129, 2, 2, 1313, 1315, 3, 2, 2, 2, 1314, 1311, 3, 2, 2, 2, 1314, 1315, 3, 2, 2, 2, 1315, 1316, 3, 2, 2, 2, 1316, 1318, 7, 134, 2, 2, 1317, 1319, 5, 214, 108, 2, 1318, 1317, 3, 2, 2, 2, 1318, 1319, 3, 2, 2, 2, 1319, 211, 3, 2, 2, 2, 1320, 1321, 7, 134, 2, 2, 1321, 213, 3, 2, 2, 2, 1322, 1324, 7, 87, 2, 2, 1323, 1325, 5, 216, 109, 2, 1324, 1323, 3, 2, 2, 2, 1324, 1325, 3, 2, 2, 2, 1325, 1326, 3, 2, 2, 2, 1326, 1327, 7, 88, 2, 2, 1327, 215, 3, 2, 2, 2, 1328, 1330, 5, 218, 110, 2, 1329, 1328, 3, 2, 2, 2, 1330, 1331, 3, 2, 2, 2, 1331, 1329, 3, 2, 2, 2, 1331, 1332, 3, 2, 2, 2, 1332, 217, 3, 2, 2, 2, 1333, 1334, 7, 87, 2, 2, 1334, 1335, 5, 216, 109, 2, 1335, 1336, 7, 88, 2, 2, 1336, 1351, 3, 2, 2, 2, 1337, 1338, 7, 89, 2, 2, 1338, 1339, 5, 216, 109, 2, 1339, 1340, 7, 90, 2, 2, 1340, 1351, 3, 2, 2, 2, 1341, 1342, 7, 91, 2, 2, 1342, 1343, 5, 216, 109, 2, 1343, 1344, 7, 92, 2, 2, 1344, 1351, 3, 2, 2, 2, 1345, 1347, 10, 16, 2, 2, 1346, 1345, 3, 2, 2, 2, 1347, 1348, 3, 2, 2, 2, 1348, 1346, 3, 2, 2, 2, 1348, 1349, 3, 2, 2, 2, 1349, 1351, 3, 2, 2, 2, 1350, 1333, 3, 2, 2, 2, 1350, 1337, 3, 2, 2, 2, 1350, 1341, 3, 2, 2, 2, 1350, 1346, 3, 2, 2, 2, 1351, 219, 3, 2, 2, 2, 1352, 1357, 5, 222, 112, 2, 1353, 1354, 7, 124, 2, 2, 1354, 1356, 5, 222, 112, 2, 1355, 1353, 3, 2, 2, 2, 1356, 1359, 3, 2, 2, 2, 1357, 1355, 3, 2, 2, 2, 1357, 1358, 3, 2, 2, 2, 1358, 221, 3, 2, 2, 2, 1359, 1357, 3, 2, 2, 2, 1360, 1362, 5, 224, 113, 2, 1361, 1363, 5, 266, 134, 2, 1362, 1361, 3, 2, 2, 2, 1362, 1363, 3, 2, 2, 2, 1363, 223, 3, 2, 2, 2, 1364, 1370, 5, 226, 114, 2, 1365, 1366, 5, 228, 115, 2, 1366, 1367, 5, 230, 116, 2, 1367, 1368, 5, 232, 117, 2, 1368, 1370, 3, 2, 2, 2, 1369, 1364, 3, 2, 2, 2, 1369, 1365, 3, 2, 2, 2, 1370, 225, 3, 2, 2, 2, 1371, 1373, 5, 234, 118, 2, 1372, 1374, 7, 24, 2, 2, 1373, 1372, 3, 2, 2, 2, 1373, 1374, 3, 2, 2, 2, 1374, 1376, 3, 2, 2, 2, 1375, 1371, 3, 2, 2, 2, 1376, 1379, 3, 2, 2, 2, 1377, 1375, 3, 2, 2, 2, 1377, 1378, 3, 2, 2, 2, 1378, 1380, 3, 2, 2, 2, 1379, 1377, 3, 2, 2, 2, 1380, 1381, 5, 228, 115, 2, 1381, 227, 3, 2, 2, 2, 1382, 1383, 8, 115, 1, 2, 1383, 1385, 5, 242, 122, 2, 1384, 1386, 5, 202, 102, 2, 1385, 1384, 3, 2, 2, 2, 1385, 1386, 3, 2, 2, 2, 1386, 1392, 3, 2, 2, 2, 1387, 1388, 7, 87, 2, 2, 1388, 1389, 5, 226, 114, 2, 1389, 1390, 7, 88, 2, 2, 1390, 1392, 3, 2, 2, 2, 1391, 1382, 3, 2, 2, 2, 1391, 1387, 3, 2, 2, 2, 1392, 1407, 3, 2, 2, 2, 1393, 1403, 12, 4, 2, 2, 1394, 1404, 5, 230, 116, 2, 1395, 1397, 7, 89, 2, 2, 1396, 1398, 5, 94, 48, 2, 1397, 1396, 3, 2, 2, 2, 1397, 1398, 3, 2, 2, 2, 1398, 1399, 3, 2, 2, 2, 1399, 1401, 7, 90, 2, 2, 1400, 1402, 5, 202, 102, 2, 1401, 1400, 3, 2, 2, 2, 1401, 1402, 3, 2, 2, 2, 1402, 1404, 3, 2, 2, 2, 1403, 1394, 3, 2, 2, 2, 1403, 1395, 3, 2, 2, 2, 1404, 1406, 3, 2, 2, 2, 1405, 1393, 3, 2, 2, 2, 1406, 1409, 3, 2, 2, 2, 1407, 1405, 3, 2, 2, 2, 1407, 1408, 3, 2, 2, 2, 1408, 229, 3, 2, 2, 2, 1409, 1407, 3, 2, 2, 2, 1410, 1412, 7, 87, 2, 2, 1411, 1413, 5, 256, 129, 2, 1412, 1411, 3, 2, 2, 2, 1412, 1413, 3, 2, 2, 2, 1413, 1414, 3, 2, 2, 2, 1414, 1416, 7, 88, 2, 2, 1415, 1417, 5, 236, 119, 2, 1416, 1415, 3, 2, 2, 2, 1416, 1417, 3, 2, 2, 2, 1417, 1419, 3, 2, 2, 2, 1418, 1420, 5, 240, 121, 2, 1419, 1418, 3, 2, 2, 2, 1419, 1420, 3, 2, 2, 2, 1420, 1422, 3, 2, 2, 2, 1421, 1423, 5, 368, 185, 2, 1422, 1421, 3, 2, 2, 2, 1422, 1423, 3, 2, 2, 2, 1423, 1425, 3, 2, 2, 2, 1424, 1426, 5, 202, 102, 2, 1425, 1424, 3, 2, 2, 2, 1425, 1426, 3, 2, 2, 2, 1426, 231, 3, 2, 2, 2, 1427, 1428, 7, 126, 2, 2, 1428, 1430, 5, 154, 78, 2, 1429, 1431, 5, 246, 124, 2, 1430, 1429, 3, 2, 2, 2, 1430, 1431, 3, 2, 2, 2, 1431, 233, 3, 2, 2, 2, 1432, 1434, 9, 17, 2, 2, 1433, 1435, 5, 202, 102, 2, 1434, 1433, 3, 2, 2, 2, 1434, 1435, 3, 2, 2, 2, 1435, 1447, 3, 2, 2, 2, 1436, 1438, 5, 12, 7, 2, 1437, 1436, 3, 2, 2, 2, 1437, 1438, 3, 2, 2, 2, 1438, 1439, 3, 2, 2, 2, 1439, 1441, 7, 95, 2, 2, 1440, 1442, 5, 202, 102, 2, 1441, 1440, 3, 2, 2, 2, 1441, 1442, 3, 2, 2, 2, 1442, 1444, 3, 2, 2, 2, 1443, 1445, 5, 236, 119, 2, 1444, 1443, 3, 2, 2, 2, 1444, 1445, 3, 2, 2, 2, 1445, 1447, 3, 2, 2, 2, 1446, 1432, 3, 2, 2, 2, 1446, 1437, 3, 2, 2, 2, 1447, 235, 3, 2, 2, 2, 1448, 1450, 5, 238, 120, 2, 1449, 1448, 3, 2, 2, 2, 1450, 1451, 3, 2, 2, 2, 1451, 1449, 3, 2, 2, 2, 1451, 1452, 3, 2, 2, 2, 1452, 237, 3, 2, 2, 2, 1453, 1454, 9, 18, 2, 2, 1454, 239, 3, 2, 2, 2, 1455, 1456, 9, 17, 2, 2, 1456, 241, 3, 2, 2, 2, 1457, 1459, 7, 133, 2, 2, 1458, 1457, 3, 2, 2, 2, 1458, 1459, 3, 2, 2, 2, 1459, 1460, 3, 2, 2, 2, 1460, 1461, 5, 6, 4, 2, 1461, 243, 3, 2, 2, 2, 1462, 1464, 5, 152, 77, 2, 1463, 1465, 5, 246, 124, 2, 1464, 1463, 3, 2, 2, 2, 1464, 1465, 3, 2, 2, 2, 1465, 245, 3, 2, 2, 2, 1466, 1475, 5, 248, 125, 2, 1467, 1469, 5, 250, 126, 2, 1468, 1467, 3, 2, 2, 2, 1468, 1469, 3, 2, 2, 2, 1469, 1470, 3, 2, 2, 2, 1470, 1471, 5, 230, 116, 2, 1471, 1472, 5, 232, 117, 2, 1472, 1475, 3, 2, 2, 2, 1473, 1475, 5, 252, 127, 2, 1474, 1466, 3, 2, 2, 2, 1474, 1468, 3, 2, 2, 2, 1474, 1473, 3, 2, 2, 2, 1475, 247, 3, 2, 2, 2, 1476, 1486, 5, 250, 126, 2, 1477, 1479, 5, 234, 118, 2, 1478, 1477, 3, 2, 2, 2, 1479, 1480, 3, 2, 2, 2, 1480, 1478, 3, 2, 2, 2, 1480, 1481, 3, 2, 2, 2, 1481, 1483, 3, 2, 2, 2, 1482, 1484, 5, 250, 126, 2, 1483, 1482, 3, 2, 2, 2, 1483, 1484, 3, 2, 2, 2, 1484, 1486, 3, 2, 2, 2, 1485, 1476, 3, 2, 2, 2, 1485, 1478, 3, 2, 2, 2, 1486, 249, 3, 2, 2, 2, 1487, 1488, 8, 126, 1, 2, 1488, 1502, 5, 230, 116, 2, 1489, 1491, 7, 89, 2, 2, 1490, 1492, 5, 94, 48, 2, 1491, 1490, 3, 2, 2, 2, 1491, 1492, 3, 2, 2, 2, 1492, 1493, 3, 2, 2, 2, 1493, 1495, 7, 90, 2, 2, 1494, 1496, 5, 202, 102, 2, 1495, 1494, 3, 2, 2, 2, 1495, 1496, 3, 2, 2, 2, 1496, 1502, 3, 2, 2, 2, 1497, 1498, 7, 87, 2, 2, 1498, 1499, 5, 248, 125, 2, 1499, 1500, 7, 88, 2, 2, 1500, 1502, 3, 2, 2, 2, 1501, 1487, 3, 2, 2, 2, 1501, 1489, 3, 2, 2, 2, 1501, 1497, 3, 2, 2, 2, 1502, 1518, 3, 2, 2, 2, 1503, 1514, 12, 6, 2, 2, 1504, 1515, 5, 230, 116, 2, 1505, 1506, 5, 250, 126, 2, 1506, 1508, 7, 89, 2, 2, 1507, 1509, 5, 94, 48, 2, 1508, 1507, 3, 2, 2, 2, 1508, 1509, 3, 2, 2, 2, 1509, 1510, 3, 2, 2, 2, 1510, 1512, 7, 90, 2, 2, 1511, 1513, 5, 202, 102, 2, 1512, 1511, 3, 2, 2, 2, 1512, 1513, 3, 2, 2, 2, 1513, 1515, 3, 2, 2, 2, 1514, 1504, 3, 2, 2, 2, 1514, 1505, 3, 2, 2, 2, 1515, 1517, 3, 2, 2, 2, 1516, 1503, 3, 2, 2, 2, 1517, 1520, 3, 2, 2, 2, 1518, 1516, 3, 2, 2, 2, 1518, 1519, 3, 2, 2, 2, 1519, 251, 3, 2, 2, 2, 1520, 1518, 3, 2, 2, 2, 1521, 1523, 5, 234, 118, 2, 1522, 1521, 3, 2, 2, 2, 1523, 1526, 3, 2, 2, 2, 1524, 1522, 3, 2, 2, 2, 1524, 1525, 3, 2, 2, 2, 1525, 1527, 3, 2, 2, 2, 1526, 1524, 3, 2, 2, 2, 1527, 1528, 5, 254, 128, 2, 1528, 253, 3, 2, 2, 2, 1529, 1530, 8, 128, 1, 2, 1530, 1531, 7, 133, 2, 2, 1531, 1546, 3, 2, 2, 2, 1532, 1542, 12, 4, 2, 2, 1533, 1543, 5, 230, 116, 2, 1534, 1536, 7, 89, 2, 2, 1535, 1537, 5, 94, 48, 2, 1536, 1535, 3, 2, 2, 2, 1536, 1537, 3, 2, 2, 2, 1537, 1538, 3, 2, 2, 2, 1538, 1540, 7, 90, 2, 2, 1539, 1541, 5, 202, 102, 2, 1540, 1539, 3, 2, 2, 2, 1540, 1541, 3, 2, 2, 2, 1541, 1543, 3, 2, 2, 2, 1542, 1533, 3, 2, 2, 2, 1542, 1534, 3, 2, 2, 2, 1543, 1545, 3, 2, 2, 2, 1544, 1532, 3, 2, 2, 2, 1545, 1548, 3, 2, 2, 2, 1546, 1544, 3, 2, 2, 2, 1546, 1547, 3, 2, 2, 2, 1547, 255, 3, 2, 2, 2, 1548, 1546, 3, 2, 2, 2, 1549, 1554, 5, 258, 130, 2, 1550, 1552, 7, 124, 2, 2, 1551, 1550, 3, 2, 2, 2, 1551, 1552, 3, 2, 2, 2, 1552, 1553, 3, 2, 2, 2, 1553, 1555, 7, 133, 2, 2, 1554, 1551, 3, 2, 2, 2, 1554, 1555, 3, 2, 2, 2, 1555, 257, 3, 2, 2, 2, 1556, 1561, 5, 260, 131, 2, 1557, 1558, 7, 124, 2, 2, 1558, 1560, 5, 260, 131, 2, 1559, 1557, 3, 2, 2, 2, 1560, 1563, 3, 2, 2, 2, 1561, 1559, 3, 2, 2, 2, 1561, 1562, 3, 2, 2, 2, 1562, 259, 3, 2, 2, 2, 1563, 1561, 3, 2, 2, 2, 1564, 1566, 5, 202, 102, 2, 1565, 1564, 3, 2, 2, 2, 1565, 1566, 3, 2, 2, 2, 1566, 1567, 3, 2, 2, 2, 1567, 1572, 5, 140, 71, 2, 1568, 1573, 5, 224, 113, 2, 1569, 1571, 5, 246, 124, 2, 1570, 1569, 3, 2, 2, 2, 1570, 1571, 3, 2, 2, 2, 1571, 1573, 3, 2, 2, 2, 1572, 1568, 3, 2, 2, 2, 1572, 1570, 3, 2, 2, 2, 1573, 1576, 3, 2, 2, 2, 1574, 1575, 7, 103, 2, 2, 1575, 1577, 5, 270, 136, 2, 1576, 1574, 3, 2, 2, 2, 1576, 1577, 3, 2, 2, 2, 1577, 261, 3, 2, 2, 2, 1578, 1580, 5, 202, 102, 2, 1579, 1578, 3, 2, 2, 2, 1579, 1580, 3, 2, 2, 2, 1580, 1582, 3, 2, 2, 2, 1581, 1583, 5, 140, 71, 2, 1582, 1581, 3, 2, 2, 2, 1582, 1583, 3, 2, 2, 2, 1583, 1584, 3, 2, 2, 2, 1584, 1586, 5, 224, 113, 2, 1585, 1587, 5, 296, 149, 2, 1586, 1585, 3, 2, 2, 2, 1586, 1587, 3, 2, 2, 2, 1587, 1588, 3, 2, 2, 2, 1588, 1589, 5, 264, 133, 2, 1589, 263, 3, 2, 2, 2, 1590, 1592, 5, 320, 161, 2, 1591, 1590, 3, 2, 2, 2, 1591, 1592, 3, 2, 2, 2, 1592, 1593, 3, 2, 2, 2, 1593, 1599, 5, 102, 52, 2, 1594, 1599, 5, 358, 180, 2, 1595, 1596, 7, 103, 2, 2, 1596, 1597, 9, 19, 2, 2, 1597, 1599, 7, 130, 2, 2, 1598, 1591, 3, 2, 2, 2, 1598, 1594, 3, 2, 2, 2, 1598, 1595, 3, 2, 2, 2, 1599, 265, 3, 2, 2, 2, 1600, 1606, 5, 268, 135, 2, 1601, 1602, 7, 87, 2, 2, 1602, 1603, 5, 36, 19, 2, 1603, 1604, 7, 88, 2, 2, 1604, 1606, 3, 2, 2, 2, 1605, 1600, 3, 2, 2, 2, 1605, 1601, 3, 2, 2, 2, 1606, 267, 3, 2, 2, 2, 1607, 1608, 7, 103, 2, 2, 1608, 1611, 5, 270, 136, 2, 1609, 1611, 5, 274, 138, 2, 1610, 1607, 3, 2, 2, 2, 1610, 1609, 3, 2, 2, 2, 1611, 269, 3, 2, 2, 2, 1612, 1615, 5, 88, 45, 2, 1613, 1615, 5, 274, 138, 2, 1614, 1612, 3, 2, 2, 2, 1614, 1613, 3, 2, 2, 2, 1615, 271, 3, 2, 2, 2, 1616, 1618, 5, 270, 136, 2, 1617, 1619, 7, 133, 2, 2, 1618, 1617, 3, 2, 2, 2, 1618, 1619, 3, 2, 2, 2, 1619, 1627, 3, 2, 2, 2, 1620, 1621, 7, 124, 2, 2, 1621, 1623, 5, 270, 136, 2, 1622, 1624, 7, 133, 2, 2, 1623, 1622, 3, 2, 2, 2, 1623, 1624, 3, 2, 2, 2, 1624, 1626, 3, 2, 2, 2, 1625, 1620, 3, 2, 2, 2, 1626, 1629, 3, 2, 2, 2, 1627, 1625, 3, 2, 2, 2, 1627, 1628, 3, 2, 2, 2, 1628, 273, 3, 2, 2, 2, 1629, 1627, 3, 2, 2, 2, 1630, 1635, 7, 91, 2, 2, 1631, 1633, 5, 272, 137, 2, 1632, 1634, 7, 124, 2, 2, 1633, 1632, 3, 2, 2, 2, 1633, 1634, 3, 2, 2, 2, 1634, 1636, 3, 2, 2, 2, 1635, 1631, 3, 2, 2, 2, 1635, 1636, 3, 2, 2, 2, 1636, 1637, 3, 2, 2, 2, 1637, 1638, 7, 92, 2, 2, 1638, 275, 3, 2, 2, 2, 1639, 1642, 7, 134, 2, 2, 1640, 1642, 5, 340, 171, 2, 1641, 1639, 3, 2, 2, 2, 1641, 1640, 3, 2, 2, 2, 1642, 277, 3, 2, 2, 2, 1643, 1644, 5, 280, 141, 2, 1644, 1646, 7, 91, 2, 2, 1645, 1647, 5, 288, 145, 2, 1646, 1645, 3, 2, 2, 2, 1646, 1647, 3, 2, 2, 2, 1647, 1648, 3, 2, 2, 2, 1648, 1649, 7, 92, 2, 2, 1649, 279, 3, 2, 2, 2, 1650, 1652, 5, 286, 144, 2, 1651, 1653, 5, 202, 102, 2, 1652, 1651, 3, 2, 2, 2, 1652, 1653, 3, 2, 2, 2, 1653, 1658, 3, 2, 2, 2, 1654, 1656, 5, 282, 142, 2, 1655, 1657, 5, 284, 143, 2, 1656, 1655, 3, 2, 2, 2, 1656, 1657, 3, 2, 2, 2, 1657, 1659, 3, 2, 2, 2, 1658, 1654, 3, 2, 2, 2, 1658, 1659, 3, 2, 2, 2, 1659, 1661, 3, 2, 2, 2, 1660, 1662, 5, 302, 152, 2, 1661, 1660, 3, 2, 2, 2, 1661, 1662, 3, 2, 2, 2, 1662, 1674, 3, 2, 2, 2, 1663, 1665, 7, 79, 2, 2, 1664, 1666, 5, 202, 102, 2, 1665, 1664, 3, 2, 2, 2, 1665, 1666, 3, 2, 2, 2, 1666, 1671, 3, 2, 2, 2, 1667, 1669, 5, 282, 142, 2, 1668, 1670, 5, 284, 143, 2, 1669, 1668, 3, 2, 2, 2, 1669, 1670, 3, 2, 2, 2, 1670, 1672, 3, 2, 2, 2, 1671, 1667, 3, 2, 2, 2, 1671, 1672, 3, 2, 2, 2, 1672, 1674, 3, 2, 2, 2, 1673, 1650, 3, 2, 2, 2, 1673, 1663, 3, 2, 2, 2, 1674, 281, 3, 2, 2, 2, 1675, 1677, 5, 12, 7, 2, 1676, 1675, 3, 2, 2, 2, 1676, 1677, 3, 2, 2, 2, 1677, 1678, 3, 2, 2, 2, 1678, 1679, 5, 276, 139, 2, 1679, 283, 3, 2, 2, 2, 1680, 1681, 7, 40, 2, 2, 1681, 285, 3, 2, 2, 2, 1682, 1683, 9, 15, 2, 2, 1683, 287, 3, 2, 2, 2, 1684, 1689, 5, 290, 146, 2, 1685, 1686, 5, 312, 157, 2, 1686, 1687, 7, 128, 2, 2, 1687, 1689, 3, 2, 2, 2, 1688, 1684, 3, 2, 2, 2, 1688, 1685, 3, 2, 2, 2, 1689, 1690, 3, 2, 2, 2, 1690, 1688, 3, 2, 2, 2, 1690, 1691, 3, 2, 2, 2, 1691, 289, 3, 2, 2, 2, 1692, 1694, 5, 202, 102, 2, 1693, 1692, 3, 2, 2, 2, 1693, 1694, 3, 2, 2, 2, 1694, 1696, 3, 2, 2, 2, 1695, 1697, 5, 140, 71, 2, 1696, 1695, 3, 2, 2, 2, 1696, 1697, 3, 2, 2, 2, 1697, 1699, 3, 2, 2, 2, 1698, 1700, 5, 292, 147, 2, 1699, 1698, 3, 2, 2, 2, 1699, 1700, 3, 2, 2, 2, 1700, 1701, 3, 2, 2, 2, 1701, 1709, 7, 130, 2, 2, 1702, 1709, 5, 262, 132, 2, 1703, 1709, 5, 194, 98, 2, 1704, 1709, 5, 132, 67, 2, 1705, 1709, 5, 332, 167, 2, 1706, 1709, 5, 128, 65, 2, 1707, 1709, 5, 134, 68, 2, 1708, 1693, 3, 2, 2, 2, 1708, 1702, 3, 2, 2, 2, 1708, 1703, 3, 2, 2, 2, 1708, 1704, 3, 2, 2, 2, 1708, 1705, 3, 2, 2, 2, 1708, 1706, 3, 2, 2, 2, 1708, 1707, 3, 2, 2, 2, 1709, 291, 3, 2, 2, 2, 1710, 1715, 5, 294, 148, 2, 1711, 1712, 7, 124, 2, 2, 1712, 1714, 5, 294, 148, 2, 1713, 1711, 3, 2, 2, 2, 1714, 1717, 3, 2, 2, 2, 1715, 1713, 3, 2, 2, 2, 1715, 1716, 3, 2, 2, 2, 1716, 293, 3, 2, 2, 2, 1717, 1715, 3, 2, 2, 2, 1718, 1728, 5, 224, 113, 2, 1719, 1721, 5, 296, 149, 2, 1720, 1719, 3, 2, 2, 2, 1720, 1721, 3, 2, 2, 2, 1721, 1723, 3, 2, 2, 2, 1722, 1724, 5, 300, 151, 2, 1723, 1722, 3, 2, 2, 2, 1723, 1724, 3, 2, 2, 2, 1724, 1729, 3, 2, 2, 2, 1725, 1727, 5, 268, 135, 2, 1726, 1725, 3, 2, 2, 2, 1726, 1727, 3, 2, 2, 2, 1727, 1729, 3, 2, 2, 2, 1728, 1720, 3, 2, 2, 2, 1728, 1726, 3, 2, 2, 2, 1729, 1739, 3, 2, 2, 2, 1730, 1732, 7, 134, 2, 2, 1731, 1730, 3, 2, 2, 2, 1731, 1732, 3, 2, 2, 2, 1732, 1734, 3, 2, 2, 2, 1733, 1735, 5, 202, 102, 2, 1734, 1733, 3, 2, 2, 2, 1734, 1735, 3, 2, 2, 2, 1735, 1736, 3, 2, 2, 2, 1736, 1737, 7, 128, 2, 2, 1737, 1739, 5, 94, 48, 2, 1738, 1718, 3, 2, 2, 2, 1738, 1731, 3, 2, 2, 2, 1739, 295, 3, 2, 2, 2, 1740, 1742, 5, 298, 150, 2, 1741, 1740, 3, 2, 2, 2, 1742, 1743, 3, 2, 2, 2, 1743, 1741, 3, 2, 2, 2, 1743, 1744, 3, 2, 2, 2, 1744, 297, 3, 2, 2, 2, 1745, 1746, 9, 20, 2, 2, 1746, 299, 3, 2, 2, 2, 1747, 1748, 7, 103, 2, 2, 1748, 1749, 7, 136, 2, 2, 1749, 1750, 8, 151, 1, 2, 1750, 301, 3, 2, 2, 2, 1751, 1752, 7, 128, 2, 2, 1752, 1753, 5, 304, 153, 2, 1753, 303, 3, 2, 2, 2, 1754, 1756, 5, 306, 154, 2, 1755, 1757, 7, 133, 2, 2, 1756, 1755, 3, 2, 2, 2, 1756, 1757, 3, 2, 2, 2, 1757, 1765, 3, 2, 2, 2, 1758, 1759, 7, 124, 2, 2, 1759, 1761, 5, 306, 154, 2, 1760, 1762, 7, 133, 2, 2, 1761, 1760, 3, 2, 2, 2, 1761, 1762, 3, 2, 2, 2, 1762, 1764, 3, 2, 2, 2, 1763, 1758, 3, 2, 2, 2, 1764, 1767, 3, 2, 2, 2, 1765, 1763, 3, 2, 2, 2, 1765, 1766, 3, 2, 2, 2, 1766, 305, 3, 2, 2, 2, 1767, 1765, 3, 2, 2, 2, 1768, 1770, 5, 202, 102, 2, 1769, 1768, 3, 2, 2, 2, 1769, 1770, 3, 2, 2, 2, 1770, 1783, 3, 2, 2, 2, 1771, 1784, 5, 310, 156, 2, 1772, 1774, 7, 82, 2, 2, 1773, 1775, 5, 312, 157, 2, 1774, 1773, 3, 2, 2, 2, 1774, 1775, 3, 2, 2, 2, 1775, 1776, 3, 2, 2, 2, 1776, 1784, 5, 310, 156, 2, 1777, 1779, 5, 312, 157, 2, 1778, 1780, 7, 82, 2, 2, 1779, 1778, 3, 2, 2, 2, 1779, 1780, 3, 2, 2, 2, 1780, 1781, 3, 2, 2, 2, 1781, 1782, 5, 310, 156, 2, 1782, 1784, 3, 2, 2, 2, 1783, 1771, 3, 2, 2, 2, 1783, 1772, 3, 2, 2, 2, 1783, 1777, 3, 2, 2, 2, 1784, 307, 3, 2, 2, 2, 1785, 1787, 5, 12, 7, 2, 1786, 1785, 3, 2, 2, 2, 1786, 1787, 3, 2, 2, 2, 1787, 1788, 3, 2, 2, 2, 1788, 1791, 5, 276, 139, 2, 1789, 1791, 5, 160, 81, 2, 1790, 1786, 3, 2, 2, 2, 1790, 1789, 3, 2, 2, 2, 1791, 309, 3, 2, 2, 2, 1792, 1793, 5, 308, 155, 2, 1793, 311, 3, 2, 2, 2, 1794, 1795, 9, 21, 2, 2, 1795, 313, 3, 2, 2, 2, 1796, 1797, 7, 54, 2, 2, 1797, 1798, 5, 316, 159, 2, 1798, 315, 3, 2, 2, 2, 1799, 1801, 5, 152, 77, 2, 1800, 1802, 5, 318, 160, 2, 1801, 1800, 3, 2, 2, 2, 1801, 1802, 3, 2, 2, 2, 1802, 317, 3, 2, 2, 2, 1803, 1805, 5, 234, 118, 2, 1804, 1806, 5, 318, 160, 2, 1805, 1804, 3, 2, 2, 2, 1805, 1806, 3, 2, 2, 2, 1806, 319, 3, 2, 2, 2, 1807, 1808, 7, 128, 2, 2, 1808, 1809, 5, 322, 162, 2, 1809, 321, 3, 2, 2, 2, 1810, 1812, 5, 324, 163, 2, 1811, 1813, 7, 133, 2, 2, 1812, 1811, 3, 2, 2, 2, 1812, 1813, 3, 2, 2, 2, 1813, 1821, 3, 2, 2, 2, 1814, 1815, 7, 124, 2, 2, 1815, 1817, 5, 324, 163, 2, 1816, 1818, 7, 133, 2, 2, 1817, 1816, 3, 2, 2, 2, 1817, 1818, 3, 2, 2, 2, 1818, 1820, 3, 2, 2, 2, 1819, 1814, 3, 2, 2, 2, 1820, 1823, 3, 2, 2, 2, 1821, 1819, 3, 2, 2, 2, 1821, 1822, 3, 2, 2, 2, 1822, 323, 3, 2, 2, 2, 1823, 1821, 3, 2, 2, 2, 1824, 1831, 5, 326, 164, 2, 1825, 1827, 7, 87, 2, 2, 1826, 1828, 5, 36, 19, 2, 1827, 1826, 3, 2, 2, 2, 1827, 1828, 3, 2, 2, 2, 1828, 1829, 3, 2, 2, 2, 1829, 1832, 7, 88, 2, 2, 1830, 1832, 5, 274, 138, 2, 1831, 1825, 3, 2, 2, 2, 1831, 1830, 3, 2, 2, 2, 1832, 325, 3, 2, 2, 2, 1833, 1836, 5, 308, 155, 2, 1834, 1836, 7, 134, 2, 2, 1835, 1833, 3, 2, 2, 2, 1835, 1834, 3, 2, 2, 2, 1836, 327, 3, 2, 2, 2, 1837, 1838, 7, 54, 2, 2, 1838, 1839, 5, 376, 189, 2, 1839, 329, 3, 2, 2, 2, 1840, 1844, 7, 54, 2, 2, 1841, 1842, 7, 6, 2, 2, 1842, 1845, 7, 134, 2, 2, 1843, 1845, 7, 142, 2, 2, 1844, 1841, 3, 2, 2, 2, 1844, 1843, 3, 2, 2, 2, 1845, 331, 3, 2, 2, 2, 1846, 1847, 7, 70, 2, 2, 1847, 1848, 7, 104, 2, 2, 1848, 1849, 5, 334, 168, 2, 1849, 1850, 7, 105, 2, 2, 1850, 1851, 5, 124, 63, 2, 1851, 333, 3, 2, 2, 2, 1852, 1857, 5, 336, 169, 2, 1853, 1854, 7, 124, 2, 2, 1854, 1856, 5, 336, 169, 2, 1855, 1853, 3, 2, 2, 2, 1856, 1859, 3, 2, 2, 2, 1857, 1855, 3, 2, 2, 2, 1857, 1858, 3, 2, 2, 2, 1858, 335, 3, 2, 2, 2, 1859, 1857, 3, 2, 2, 2, 1860, 1863, 5, 338, 170, 2, 1861, 1863, 5, 260, 131, 2, 1862, 1860, 3, 2, 2, 2, 1862, 1861, 3, 2, 2, 2, 1863, 337, 3, 2, 2, 2, 1864, 1865, 7, 70, 2, 2, 1865, 1866, 7, 104, 2, 2, 1866, 1867, 5, 334, 168, 2, 1867, 1868, 7, 105, 2, 2, 1868, 1870, 3, 2, 2, 2, 1869, 1864, 3, 2, 2, 2, 1869, 1870, 3, 2, 2, 2, 1870, 1871, 3, 2, 2, 2, 1871, 1874, 7, 23, 2, 2, 1872, 1874, 7, 78, 2, 2, 1873, 1869, 3, 2, 2, 2, 1873, 1872, 3, 2, 2, 2, 1874, 1886, 3, 2, 2, 2, 1875, 1877, 7, 133, 2, 2, 1876, 1875, 3, 2, 2, 2, 1876, 1877, 3, 2, 2, 2, 1877, 1879, 3, 2, 2, 2, 1878, 1880, 7, 134, 2, 2, 1879, 1878, 3, 2, 2, 2, 1879, 1880, 3, 2, 2, 2, 1880, 1887, 3, 2, 2, 2, 1881, 1883, 7, 134, 2, 2, 1882, 1881, 3, 2, 2, 2, 1882, 1883, 3, 2, 2, 2, 1883, 1884, 3, 2, 2, 2, 1884, 1885, 7, 103, 2, 2, 1885, 1887, 5, 244, 123, 2, 1886, 1876, 3, 2, 2, 2, 1886, 1882, 3, 2, 2, 2, 1887, 339, 3, 2, 2, 2, 1888, 1889, 5, 344, 173, 2, 1889, 1891, 7, 104, 2, 2, 1890, 1892, 5, 346, 174, 2, 1891, 1890, 3, 2, 2, 2, 1891, 1892, 3, 2, 2, 2, 1892, 1893, 3, 2, 2, 2, 1893, 1894, 7, 105, 2, 2, 1894, 341, 3, 2, 2, 2, 1895, 1907, 5, 340, 171, 2, 1896, 1899, 5, 328, 165, 2, 1897, 1899, 5, 330, 166, 2, 1898, 1896, 3, 2, 2, 2, 1898, 1897, 3, 2, 2, 2, 1899, 1900, 3, 2, 2, 2, 1900, 1902, 7, 104, 2, 2, 1901, 1903, 5, 346, 174, 2, 1902, 1901, 3, 2, 2, 2, 1902, 1903, 3, 2, 2, 2, 1903, 1904, 3, 2, 2, 2, 1904, 1905, 7, 105, 2, 2, 1905, 1907, 3, 2, 2, 2, 1906, 1895, 3, 2, 2, 2, 1906, 1898, 3, 2, 2, 2, 1907, 343, 3, 2, 2, 2, 1908, 1909, 7, 134, 2, 2, 1909, 345, 3, 2, 2, 2, 1910, 1912, 5, 348, 175, 2, 1911, 1913, 7, 133, 2, 2, 1912, 1911, 3, 2, 2, 2, 1912, 1913, 3, 2, 2, 2, 1913, 1921, 3, 2, 2, 2, 1914, 1915, 7, 124, 2, 2, 1915, 1917, 5, 348, 175, 2, 1916, 1918, 7, 133, 2, 2, 1917, 1916, 3, 2, 2, 2, 1917, 1918, 3, 2, 2, 2, 1918, 1920, 3, 2, 2, 2, 1919, 1914, 3, 2, 2, 2, 1920, 1923, 3, 2, 2, 2, 1921, 1919, 3, 2, 2, 2, 1921, 1922, 3, 2, 2, 2, 1922, 347, 3, 2, 2, 2, 1923, 1921, 3, 2, 2, 2, 1924, 1928, 5, 244, 123, 2, 1925, 1928, 5, 94, 48, 2, 1926, 1928, 5, 6, 4, 2, 1927, 1924, 3, 2, 2, 2, 1927, 1925, 3, 2, 2, 2, 1927, 1926, 3, 2, 2, 2, 1928, 349, 3, 2, 2, 2, 1929, 1930, 7, 78, 2, 2, 1930, 1936, 5, 12, 7, 2, 1931, 1937, 7, 134, 2, 2, 1932, 1934, 7, 70, 2, 2, 1933, 1932, 3, 2, 2, 2, 1933, 1934, 3, 2, 2, 2, 1934, 1935, 3, 2, 2, 2, 1935, 1937, 5, 340, 171, 2, 1936, 1931, 3, 2, 2, 2, 1936, 1933, 3, 2, 2, 2, 1937, 351, 3, 2, 2, 2, 1938, 1940, 7, 38, 2, 2, 1939, 1938, 3, 2, 2, 2, 1939, 1940, 3, 2, 2, 2, 1940, 1941, 3, 2, 2, 2, 1941, 1942, 7, 70, 2, 2, 1942, 1943, 5, 124, 63, 2, 1943, 353, 3, 2, 2, 2, 1944, 1945, 7, 70, 2, 2, 1945, 1946, 7, 104, 2, 2, 1946, 1947, 7, 105, 2, 2, 1947, 1948, 5, 124, 63, 2, 1948, 355, 3, 2, 2, 2, 1949, 1950, 7, 75, 2, 2, 1950, 1951, 5, 102, 52, 2, 1951, 1952, 5, 360, 181, 2, 1952, 357, 3, 2, 2, 2, 1953, 1955, 7, 75, 2, 2, 1954, 1956, 5, 320, 161, 2, 1955, 1954, 3, 2, 2, 2, 1955, 1956, 3, 2, 2, 2, 1956, 1957, 3, 2, 2, 2, 1957, 1958, 5, 102, 52, 2, 1958, 1959, 5, 360, 181, 2, 1959, 359, 3, 2, 2, 2, 1960, 1962, 5, 362, 182, 2, 1961, 1960, 3, 2, 2, 2, 1962, 1963, 3, 2, 2, 2, 1963, 1961, 3, 2, 2, 2, 1963, 1964, 3, 2, 2, 2, 1964, 361, 3, 2, 2, 2, 1965, 1966, 7, 19, 2, 2, 1966, 1967, 7, 87, 2, 2, 1967, 1968, 5, 364, 183, 2, 1968, 1969, 7, 88, 2, 2, 1969, 1970, 5, 102, 52, 2, 1970, 363, 3, 2, 2, 2, 1971, 1973, 5, 202, 102, 2, 1972, 1971, 3, 2, 2, 2, 1972, 1973, 3, 2, 2, 2, 1973, 1974, 3, 2, 2, 2, 1974, 1977, 5, 152, 77, 2, 1975, 1978, 5, 224, 113, 2, 1976, 1978, 5, 246, 124, 2, 1977, 1975, 3, 2, 2, 2, 1977, 1976, 3, 2, 2, 2, 1977, 1978, 3, 2, 2, 2, 1978, 1981, 3, 2, 2, 2, 1979, 1981, 7, 133, 2, 2, 1980, 1972, 3, 2, 2, 2, 1980, 1979, 3, 2, 2, 2, 1981, 365, 3, 2, 2, 2, 1982, 1984, 7, 73, 2, 2, 1983, 1985, 5, 88, 45, 2, 1984, 1983, 3, 2, 2, 2, 1984, 1985, 3, 2, 2, 2, 1985, 367, 3, 2, 2, 2, 1986, 1989, 5, 370, 186, 2, 1987, 1989, 5, 374, 188, 2, 1988, 1986, 3, 2, 2, 2, 1988, 1987, 3, 2, 2, 2, 1989, 369, 3, 2, 2, 2, 1990, 1991, 7, 73, 2, 2, 1991, 1993, 7, 87, 2, 2, 1992, 1994, 5, 372, 187, 2, 1993, 1992, 3, 2, 2, 2, 1993, 1994, 3, 2, 2, 2, 1994, 1995, 3, 2, 2, 2, 1995, 1996, 7, 88, 2, 2, 1996, 371, 3, 2, 2, 2, 1997, 1999, 5, 244, 123, 2, 1998, 2000, 7, 133, 2, 2, 1999, 1998, 3, 2, 2, 2, 1999, 2000, 3, 2, 2, 2, 2000, 2008, 3, 2, 2, 2, 2001, 2002, 7, 124, 2, 2, 2002, 2004, 5, 244, 123, 2, 2003, 2005, 7, 133, 2, 2, 2004, 2003, 3, 2, 2, 2, 2004, 2005, 3, 2, 2, 2, 2005, 2007, 3, 2, 2, 2, 2006, 2001, 3, 2, 2, 2, 2007, 2010, 3, 2, 2, 2, 2008, 2006, 3, 2, 2, 2, 2008, 2009, 3, 2, 2, 2, 2009, 373, 3, 2, 2, 2, 2010, 2008, 3, 2, 2, 2, 2011, 2012, 7, 52, 2, 2, 2012, 2013, 7, 87, 2, 2, 2013, 2014, 5, 94, 48, 2, 2014, 2015, 7, 88, 2, 2, 2015, 2018, 3, 2, 2, 2, 2016, 2018, 7, 52, 2, 2, 2017, 2011, 3, 2, 2, 2, 2017, 2016, 3, 2, 2, 2, 2018, 375, 3, 2, 2, 2, 2019, 2022, 7, 51, 2, 2, 2020, 2021, 7, 89, 2, 2, 2021, 2023, 7, 90, 2, 2, 2022, 2020, 3, 2, 2, 2, 2022, 2023, 3, 2, 2, 2, 2023, 2073, 3, 2, 2, 2, 2024, 2027, 7, 30, 2, 2, 2025, 2026, 7, 89, 2, 2, 2026, 2028, 7, 90, 2, 2, 2027, 2025, 3, 2, 2, 2, 2027, 2028, 3, 2, 2, 2, 2028, 2073, 3, 2, 2, 2, 2029, 2073, 7, 93, 2, 2, 2030, 2073, 7, 94, 2, 2, 2031, 2073, 7, 95, 2, 2, 2032, 2073, 7, 96, 2, 2, 2033, 2073, 7, 97, 2, 2, 2034, 2073, 7, 98, 2, 2, 2035, 2073, 7, 99, 2, 2, 2036, 2073, 7, 100, 2, 2, 2037, 2073, 7, 101, 2, 2, 2038, 2073, 7, 102, 2, 2, 2039, 2073, 7, 103, 2, 2, 2040, 2073, 7, 105, 2, 2, 2041, 2073, 7, 104, 2, 2, 2042, 2073, 7, 119, 2, 2, 2043, 2073, 7, 106, 2, 2, 2044, 2073, 7, 107, 2, 2, 2045, 2073, 7, 108, 2, 2, 2046, 2073, 7, 103, 2, 2, 2047, 2073, 7, 110, 2, 2, 2048, 2073, 7, 111, 2, 2, 2049, 2073, 7, 112, 2, 2, 2050, 2073, 7, 113, 2, 2, 2051, 2052, 7, 104, 2, 2, 2052, 2073, 7, 104, 2, 2, 2053, 2054, 7, 105, 2, 2, 2054, 2073, 7, 105, 2, 2, 2055, 2073, 7, 115, 2, 2, 2056, 2073, 7, 114, 2, 2, 2057, 2073, 7, 116, 2, 2, 2058, 2073, 7, 117, 2, 2, 2059, 2073, 7, 118, 2, 2, 2060, 2073, 7, 119, 2, 2, 2061, 2073, 7, 120, 2, 2, 2062, 2073, 7, 121, 2, 2, 2063, 2073, 7, 122, 2, 2, 2064, 2073, 7, 123, 2, 2, 2065, 2073, 7, 124, 2, 2, 2066, 2073, 7, 125, 2, 2, 2067, 2073, 7, 126, 2, 2, 2068, 2069, 7, 87, 2, 2, 2069, 2073, 7, 88, 2, 2, 2070, 2071, 7, 89, 2, 2, 2071, 2073, 7, 90, 2, 2, 2072, 2019, 3, 2, 2, 2, 2072, 2024, 3, 2, 2, 2, 2072, 2029, 3, 2, 2, 2, 2072, 2030, 3, 2, 2, 2, 2072, 2031, 3, 2, 2, 2, 2072, 2032, 3, 2, 2, 2, 2072, 2033, 3, 2, 2, 2, 2072, 2034, 3, 2, 2, 2, 2072, 2035, 3, 2, 2, 2, 2072, 2036, 3, 2, 2, 2, 2072, 2037, 3, 2, 2, 2, 2072, 2038, 3, 2, 2, 2, 2072, 2039, 3, 2, 2, 2, 2072, 2040, 3, 2, 2, 2, 2072, 2041, 3, 2, 2, 2, 2072, 2042, 3, 2, 2, 2, 2072, 2043, 3, 2, 2, 2, 2072, 2044, 3, 2, 2, 2, 2072, 2045, 3, 2, 2, 2, 2072, 2046, 3, 2, 2, 2, 2072, 2047, 3, 2, 2, 2, 2072, 2048, 3, 2, 2, 2, 2072, 2049, 3, 2, 2, 2, 2072, 2050, 3, 2, 2, 2, 2072, 2051, 3, 2, 2, 2, 2072, 2053, 3, 2, 2, 2, 2072, 2055, 3, 2, 2, 2, 2072, 2056, 3, 2, 2, 2, 2072, 2057, 3, 2, 2, 2, 2072, 2058, 3, 2, 2, 2, 2072, 2059, 3, 2, 2, 2, 2072, 2060, 3, 2, 2, 2, 2072, 2061, 3, 2, 2, 2, 2072, 2062, 3, 2, 2, 2, 2072, 2063, 3, 2, 2, 2, 2072, 2064, 3, 2, 2, 2, 2072, 2065, 3, 2, 2, 2, 2072, 2066, 3, 2, 2, 2, 2072, 2067, 3, 2, 2, 2, 2072, 2068, 3, 2, 2, 2, 2072, 2070, 3, 2, 2, 2, 2073, 377, 3, 2, 2, 2, 2074, 2075, 9, 22, 2, 2, 2075, 379, 3, 2, 2, 2, 299, 381, 388, 397, 401, 410, 413, 417, 425, 432, 435, 440, 445, 451, 459, 461, 470, 474, 478, 481, 485, 488, 495, 499, 502, 505, 508, 514, 518, 522, 536, 540, 546, 553, 559, 563, 567, 569, 577, 582, 595, 602, 614, 624, 629, 633, 640, 643, 651, 655, 658, 665, 672, 676, 681, 685, 688, 693, 708, 715, 723, 731, 740, 747, 754, 762, 770, 778, 786, 794, 802, 811, 819, 828, 835, 843, 846, 849, 855, 861, 867, 874, 883, 891, 895, 902, 904, 924, 928, 934, 939, 943, 946, 953, 960, 964, 973, 984, 994, 999, 1006, 1009, 1014, 1019, 1040, 1045, 1048, 1059, 1065, 1070, 1073, 1078, 1081, 1084, 1106, 1112, 1118, 1124, 1127, 1133, 1137, 1141, 1144, 1152, 1154, 1160, 1163, 1166, 1169, 1173, 1177, 1183, 1193, 1199, 1205, 1210, 1215, 1219, 1232, 1238, 1242, 1248, 1253, 1268, 1272, 1277, 1282, 1287, 1293, 1296, 1305, 1309, 1314, 1318, 1324, 1331, 1348, 1350, 1357, 1362, 1369, 1373, 1377, 1385, 1391, 1397, 1401, 1403, 1407, 1412, 1416, 1419, 1422, 1425, 1430, 1434, 1437, 1441, 1444, 1446, 1451, 1458, 1464, 1468, 1474, 1480, 1483, 1485, 1491, 1495, 1501, 1508, 1512, 1514, 1518, 1524, 1536, 1540, 1542, 1546, 1551, 1554, 1561, 1565, 1570, 1572, 1576, 1579, 1582, 1586, 1591, 1598, 1605, 1610, 1614, 1618, 1623, 1627, 1633, 1635, 1641, 1646, 1652, 1656, 1658, 1661, 1665, 1669, 1671, 1673, 1676, 1688, 1690, 1693, 1696, 1699, 1708, 1715, 1720, 1723, 1726, 1728, 1731, 1734, 1738, 1743, 1756, 1761, 1765, 1769, 1774, 1779, 1783, 1786, 1790, 1801, 1805, 1812, 1817, 1821, 1827, 1831, 1835, 1844, 1857, 1862, 1869, 1873, 1876, 1879, 1882, 1886, 1891, 1898, 1902, 1906, 1912, 1917, 1921, 1927, 1933, 1936, 1939, 1955, 1963, 1972, 1977, 1980, 1984, 1988, 1993, 1999, 2004, 2008, 2017, 2022, 2027, 2072] \ No newline at end of file diff --git a/lexers/src/main/java/com/itsaky/androidide/lexers/cpp/CPP14Parser.java b/lexers/src/main/java/com/itsaky/androidide/lexers/cpp/CPP14Parser.java new file mode 100644 index 000000000..c6a2ac3a2 --- /dev/null +++ b/lexers/src/main/java/com/itsaky/androidide/lexers/cpp/CPP14Parser.java @@ -0,0 +1,14438 @@ +// Generated from /home/syu/workspace/MSCCD_ALL/Project/grammarDefinations/CPP14/CPP14Parser.g4 by ANTLR 4.8 +package com.itsaky.androidide.lexers.cpp; +import org.antlr.v4.runtime.atn.*; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.*; +import org.antlr.v4.runtime.misc.*; +import org.antlr.v4.runtime.tree.*; +import java.util.List; +import java.util.Iterator; +import java.util.ArrayList; + +@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"}) +public class CPP14Parser extends Parser { + static { RuntimeMetaData.checkVersion("4.8", RuntimeMetaData.VERSION); } + + protected static final DFA[] _decisionToDFA; + protected static final PredictionContextCache _sharedContextCache = + new PredictionContextCache(); + public static final int + IntegerLiteral=1, CharacterLiteral=2, FloatingLiteral=3, StringLiteral=4, + BooleanLiteral=5, PointerLiteral=6, UserDefinedLiteral=7, MultiLineMacro=8, + Directive=9, Alignas=10, Alignof=11, Asm=12, Auto=13, Bool=14, Break=15, + Case=16, Catch=17, Char=18, Char16=19, Char32=20, Class=21, Const=22, + Constexpr=23, Const_cast=24, Continue=25, Decltype=26, Default=27, Delete=28, + Do=29, Double=30, Dynamic_cast=31, Else=32, Enum=33, Explicit=34, Export=35, + Extern=36, False_=37, Final=38, Float=39, For=40, Friend=41, Goto=42, + If=43, Inline=44, Int=45, Long=46, Mutable=47, Namespace=48, New=49, Noexcept=50, + Nullptr=51, Operator=52, Override=53, Private=54, Protected=55, Public=56, + Register=57, Reinterpret_cast=58, Return=59, Short=60, Signed=61, Sizeof=62, + Static=63, Static_assert=64, Static_cast=65, Struct=66, Switch=67, Template=68, + This=69, Thread_local=70, Throw=71, True_=72, Try=73, Typedef=74, Typeid_=75, + Typename_=76, Union=77, Unsigned=78, Using=79, Virtual=80, Void=81, Volatile=82, + Wchar=83, While=84, LeftParen=85, RightParen=86, LeftBracket=87, RightBracket=88, + LeftBrace=89, RightBrace=90, Plus=91, Minus=92, Star=93, Div=94, Mod=95, + Caret=96, And=97, Or=98, Tilde=99, Not=100, Assign=101, Less=102, Greater=103, + PlusAssign=104, MinusAssign=105, StarAssign=106, DivAssign=107, ModAssign=108, + XorAssign=109, AndAssign=110, OrAssign=111, LeftShiftAssign=112, RightShiftAssign=113, + Equal=114, NotEqual=115, LessEqual=116, GreaterEqual=117, AndAnd=118, + OrOr=119, PlusPlus=120, MinusMinus=121, Comma=122, ArrowStar=123, Arrow=124, + Question=125, Colon=126, Doublecolon=127, Semi=128, Dot=129, DotStar=130, + Ellipsis=131, Identifier=132, DecimalLiteral=133, OctalLiteral=134, HexadecimalLiteral=135, + BinaryLiteral=136, Integersuffix=137, UserDefinedIntegerLiteral=138, UserDefinedFloatingLiteral=139, + UserDefinedStringLiteral=140, UserDefinedCharacterLiteral=141, Whitespace=142, + Newline=143, BlockComment=144, LineComment=145; + public static final int + RULE_translationUnit = 0, RULE_primaryExpression = 1, RULE_idExpression = 2, + RULE_unqualifiedId = 3, RULE_qualifiedId = 4, RULE_nestedNameSpecifier = 5, + RULE_lambdaExpression = 6, RULE_lambdaIntroducer = 7, RULE_lambdaCapture = 8, + RULE_captureDefault = 9, RULE_captureList = 10, RULE_capture = 11, RULE_simpleCapture = 12, + RULE_initcapture = 13, RULE_lambdaDeclarator = 14, RULE_postfixExpression = 15, + RULE_typeIdOfTheTypeId = 16, RULE_expressionList = 17, RULE_pseudoDestructorName = 18, + RULE_unaryExpression = 19, RULE_unaryOperator = 20, RULE_newExpression = 21, + RULE_newPlacement = 22, RULE_newTypeId = 23, RULE_newDeclarator = 24, + RULE_noPointerNewDeclarator = 25, RULE_newInitializer = 26, RULE_deleteExpression = 27, + RULE_noExceptExpression = 28, RULE_castExpression = 29, RULE_pointerMemberExpression = 30, + RULE_multiplicativeExpression = 31, RULE_additiveExpression = 32, RULE_shiftExpression = 33, + RULE_shiftOperator = 34, RULE_relationalExpression = 35, RULE_equalityExpression = 36, + RULE_andExpression = 37, RULE_exclusiveOrExpression = 38, RULE_inclusiveOrExpression = 39, + RULE_logicalAndExpression = 40, RULE_logicalOrExpression = 41, RULE_conditionalExpression = 42, + RULE_assignmentExpression = 43, RULE_assignmentOperator = 44, RULE_expression = 45, + RULE_constantExpression = 46, RULE_statement = 47, RULE_labeledStatement = 48, + RULE_expressionStatement = 49, RULE_compoundStatement = 50, RULE_statementSeq = 51, + RULE_selectionStatement = 52, RULE_condition = 53, RULE_iterationStatement = 54, + RULE_forInitStatement = 55, RULE_forRangeDeclaration = 56, RULE_forRangeInitializer = 57, + RULE_jumpStatement = 58, RULE_declarationStatement = 59, RULE_declarationseq = 60, + RULE_declaration = 61, RULE_blockDeclaration = 62, RULE_aliasDeclaration = 63, + RULE_simpleDeclaration = 64, RULE_staticAssertDeclaration = 65, RULE_emptyDeclaration = 66, + RULE_attributeDeclaration = 67, RULE_declSpecifier = 68, RULE_declSpecifierSeq = 69, + RULE_storageClassSpecifier = 70, RULE_functionSpecifier = 71, RULE_typedefName = 72, + RULE_typeSpecifier = 73, RULE_trailingTypeSpecifier = 74, RULE_typeSpecifierSeq = 75, + RULE_trailingTypeSpecifierSeq = 76, RULE_simpleTypeSpecifier = 77, RULE_theTypeName = 78, + RULE_decltypeSpecifier = 79, RULE_elaboratedTypeSpecifier = 80, RULE_enumName = 81, + RULE_enumSpecifier = 82, RULE_enumHead = 83, RULE_opaqueEnumDeclaration = 84, + RULE_enumkey = 85, RULE_enumbase = 86, RULE_enumeratorList = 87, RULE_enumeratorDefinition = 88, + RULE_enumerator = 89, RULE_namespaceName = 90, RULE_originalNamespaceName = 91, + RULE_namespaceDefinition = 92, RULE_namespaceAlias = 93, RULE_namespaceAliasDefinition = 94, + RULE_qualifiednamespacespecifier = 95, RULE_usingDeclaration = 96, RULE_usingDirective = 97, + RULE_asmDefinition = 98, RULE_linkageSpecification = 99, RULE_attributeSpecifierSeq = 100, + RULE_attributeSpecifier = 101, RULE_alignmentspecifier = 102, RULE_attributeList = 103, + RULE_attribute = 104, RULE_attributeNamespace = 105, RULE_attributeArgumentClause = 106, + RULE_balancedTokenSeq = 107, RULE_balancedtoken = 108, RULE_initDeclaratorList = 109, + RULE_initDeclarator = 110, RULE_declarator = 111, RULE_pointerDeclarator = 112, + RULE_noPointerDeclarator = 113, RULE_parametersAndQualifiers = 114, RULE_trailingReturnType = 115, + RULE_pointerOperator = 116, RULE_cvqualifierseq = 117, RULE_cvQualifier = 118, + RULE_refqualifier = 119, RULE_declaratorid = 120, RULE_theTypeId = 121, + RULE_abstractDeclarator = 122, RULE_pointerAbstractDeclarator = 123, RULE_noPointerAbstractDeclarator = 124, + RULE_abstractPackDeclarator = 125, RULE_noPointerAbstractPackDeclarator = 126, + RULE_parameterDeclarationClause = 127, RULE_parameterDeclarationList = 128, + RULE_parameterDeclaration = 129, RULE_functionDefinition = 130, RULE_functionBody = 131, + RULE_initializer = 132, RULE_braceOrEqualInitializer = 133, RULE_initializerClause = 134, + RULE_initializerList = 135, RULE_bracedInitList = 136, RULE_className = 137, + RULE_classSpecifier = 138, RULE_classHead = 139, RULE_classHeadName = 140, + RULE_classVirtSpecifier = 141, RULE_classKey = 142, RULE_memberSpecification = 143, + RULE_memberdeclaration = 144, RULE_memberDeclaratorList = 145, RULE_memberDeclarator = 146, + RULE_virtualSpecifierSeq = 147, RULE_virtualSpecifier = 148, RULE_pureSpecifier = 149, + RULE_baseClause = 150, RULE_baseSpecifierList = 151, RULE_baseSpecifier = 152, + RULE_classOrDeclType = 153, RULE_baseTypeSpecifier = 154, RULE_accessSpecifier = 155, + RULE_conversionFunctionId = 156, RULE_conversionTypeId = 157, RULE_conversionDeclarator = 158, + RULE_constructorInitializer = 159, RULE_memInitializerList = 160, RULE_memInitializer = 161, + RULE_meminitializerid = 162, RULE_operatorFunctionId = 163, RULE_literalOperatorId = 164, + RULE_templateDeclaration = 165, RULE_templateparameterList = 166, RULE_templateParameter = 167, + RULE_typeParameter = 168, RULE_simpleTemplateId = 169, RULE_templateId = 170, + RULE_templateName = 171, RULE_templateArgumentList = 172, RULE_templateArgument = 173, + RULE_typeNameSpecifier = 174, RULE_explicitInstantiation = 175, RULE_explicitSpecialization = 176, + RULE_tryBlock = 177, RULE_functionTryBlock = 178, RULE_handlerSeq = 179, + RULE_handler = 180, RULE_exceptionDeclaration = 181, RULE_throwExpression = 182, + RULE_exceptionSpecification = 183, RULE_dynamicExceptionSpecification = 184, + RULE_typeIdList = 185, RULE_noeExceptSpecification = 186, RULE_theOperator = 187, + RULE_literal = 188; + private static String[] makeRuleNames() { + return new String[] { + "translationUnit", "primaryExpression", "idExpression", "unqualifiedId", + "qualifiedId", "nestedNameSpecifier", "lambdaExpression", "lambdaIntroducer", + "lambdaCapture", "captureDefault", "captureList", "capture", "simpleCapture", + "initcapture", "lambdaDeclarator", "postfixExpression", "typeIdOfTheTypeId", + "expressionList", "pseudoDestructorName", "unaryExpression", "unaryOperator", + "newExpression", "newPlacement", "newTypeId", "newDeclarator", "noPointerNewDeclarator", + "newInitializer", "deleteExpression", "noExceptExpression", "castExpression", + "pointerMemberExpression", "multiplicativeExpression", "additiveExpression", + "shiftExpression", "shiftOperator", "relationalExpression", "equalityExpression", + "andExpression", "exclusiveOrExpression", "inclusiveOrExpression", "logicalAndExpression", + "logicalOrExpression", "conditionalExpression", "assignmentExpression", + "assignmentOperator", "expression", "constantExpression", "statement", + "labeledStatement", "expressionStatement", "compoundStatement", "statementSeq", + "selectionStatement", "condition", "iterationStatement", "forInitStatement", + "forRangeDeclaration", "forRangeInitializer", "jumpStatement", "declarationStatement", + "declarationseq", "declaration", "blockDeclaration", "aliasDeclaration", + "simpleDeclaration", "staticAssertDeclaration", "emptyDeclaration", "attributeDeclaration", + "declSpecifier", "declSpecifierSeq", "storageClassSpecifier", "functionSpecifier", + "typedefName", "typeSpecifier", "trailingTypeSpecifier", "typeSpecifierSeq", + "trailingTypeSpecifierSeq", "simpleTypeSpecifier", "theTypeName", "decltypeSpecifier", + "elaboratedTypeSpecifier", "enumName", "enumSpecifier", "enumHead", "opaqueEnumDeclaration", + "enumkey", "enumbase", "enumeratorList", "enumeratorDefinition", "enumerator", + "namespaceName", "originalNamespaceName", "namespaceDefinition", "namespaceAlias", + "namespaceAliasDefinition", "qualifiednamespacespecifier", "usingDeclaration", + "usingDirective", "asmDefinition", "linkageSpecification", "attributeSpecifierSeq", + "attributeSpecifier", "alignmentspecifier", "attributeList", "attribute", + "attributeNamespace", "attributeArgumentClause", "balancedTokenSeq", + "balancedtoken", "initDeclaratorList", "initDeclarator", "declarator", + "pointerDeclarator", "noPointerDeclarator", "parametersAndQualifiers", + "trailingReturnType", "pointerOperator", "cvqualifierseq", "cvQualifier", + "refqualifier", "declaratorid", "theTypeId", "abstractDeclarator", "pointerAbstractDeclarator", + "noPointerAbstractDeclarator", "abstractPackDeclarator", "noPointerAbstractPackDeclarator", + "parameterDeclarationClause", "parameterDeclarationList", "parameterDeclaration", + "functionDefinition", "functionBody", "initializer", "braceOrEqualInitializer", + "initializerClause", "initializerList", "bracedInitList", "className", + "classSpecifier", "classHead", "classHeadName", "classVirtSpecifier", + "classKey", "memberSpecification", "memberdeclaration", "memberDeclaratorList", + "memberDeclarator", "virtualSpecifierSeq", "virtualSpecifier", "pureSpecifier", + "baseClause", "baseSpecifierList", "baseSpecifier", "classOrDeclType", + "baseTypeSpecifier", "accessSpecifier", "conversionFunctionId", "conversionTypeId", + "conversionDeclarator", "constructorInitializer", "memInitializerList", + "memInitializer", "meminitializerid", "operatorFunctionId", "literalOperatorId", + "templateDeclaration", "templateparameterList", "templateParameter", + "typeParameter", "simpleTemplateId", "templateId", "templateName", "templateArgumentList", + "templateArgument", "typeNameSpecifier", "explicitInstantiation", "explicitSpecialization", + "tryBlock", "functionTryBlock", "handlerSeq", "handler", "exceptionDeclaration", + "throwExpression", "exceptionSpecification", "dynamicExceptionSpecification", + "typeIdList", "noeExceptSpecification", "theOperator", "literal" + }; + } + public static final String[] ruleNames = makeRuleNames(); + + private static String[] makeLiteralNames() { + return new String[] { + null, null, null, null, null, null, null, null, null, null, "'alignas'", + "'alignof'", "'asm'", "'auto'", "'bool'", "'break'", "'case'", "'catch'", + "'char'", "'char16_t'", "'char32_t'", "'class'", "'const'", "'constexpr'", + "'const_cast'", "'continue'", "'decltype'", "'default'", "'delete'", + "'do'", "'double'", "'dynamic_cast'", "'else'", "'enum'", "'explicit'", + "'export'", "'extern'", "'false'", "'final'", "'float'", "'for'", "'friend'", + "'goto'", "'if'", "'inline'", "'int'", "'long'", "'mutable'", "'namespace'", + "'new'", "'noexcept'", "'nullptr'", "'operator'", "'override'", "'private'", + "'protected'", "'public'", "'register'", "'reinterpret_cast'", "'return'", + "'short'", "'signed'", "'sizeof'", "'static'", "'static_assert'", "'static_cast'", + "'struct'", "'switch'", "'template'", "'this'", "'thread_local'", "'throw'", + "'true'", "'try'", "'typedef'", "'typeid'", "'typename'", "'union'", + "'unsigned'", "'using'", "'virtual'", "'void'", "'volatile'", "'wchar_t'", + "'while'", "'('", "')'", "'['", "']'", "'{'", "'}'", "'+'", "'-'", "'*'", + "'/'", "'%'", "'^'", "'&'", "'|'", "'~'", null, "'='", "'<'", "'>'", + "'+='", "'-='", "'*='", "'/='", "'%='", "'^='", "'&='", "'|='", "'<<='", + "'>>='", "'=='", "'!='", "'<='", "'>='", null, null, "'++'", "'--'", + "','", "'->*'", "'->'", "'?'", "':'", "'::'", "';'", "'.'", "'.*'", "'...'" + }; + } + private static final String[] _LITERAL_NAMES = makeLiteralNames(); + private static String[] makeSymbolicNames() { + return new String[] { + null, "IntegerLiteral", "CharacterLiteral", "FloatingLiteral", "StringLiteral", + "BooleanLiteral", "PointerLiteral", "UserDefinedLiteral", "MultiLineMacro", + "Directive", "Alignas", "Alignof", "Asm", "Auto", "Bool", "Break", "Case", + "Catch", "Char", "Char16", "Char32", "Class", "Const", "Constexpr", "Const_cast", + "Continue", "Decltype", "Default", "Delete", "Do", "Double", "Dynamic_cast", + "Else", "Enum", "Explicit", "Export", "Extern", "False_", "Final", "Float", + "For", "Friend", "Goto", "If", "Inline", "Int", "Long", "Mutable", "Namespace", + "New", "Noexcept", "Nullptr", "Operator", "Override", "Private", "Protected", + "Public", "Register", "Reinterpret_cast", "Return", "Short", "Signed", + "Sizeof", "Static", "Static_assert", "Static_cast", "Struct", "Switch", + "Template", "This", "Thread_local", "Throw", "True_", "Try", "Typedef", + "Typeid_", "Typename_", "Union", "Unsigned", "Using", "Virtual", "Void", + "Volatile", "Wchar", "While", "LeftParen", "RightParen", "LeftBracket", + "RightBracket", "LeftBrace", "RightBrace", "Plus", "Minus", "Star", "Div", + "Mod", "Caret", "And", "Or", "Tilde", "Not", "Assign", "Less", "Greater", + "PlusAssign", "MinusAssign", "StarAssign", "DivAssign", "ModAssign", + "XorAssign", "AndAssign", "OrAssign", "LeftShiftAssign", "RightShiftAssign", + "Equal", "NotEqual", "LessEqual", "GreaterEqual", "AndAnd", "OrOr", "PlusPlus", + "MinusMinus", "Comma", "ArrowStar", "Arrow", "Question", "Colon", "Doublecolon", + "Semi", "Dot", "DotStar", "Ellipsis", "Identifier", "DecimalLiteral", + "OctalLiteral", "HexadecimalLiteral", "BinaryLiteral", "Integersuffix", + "UserDefinedIntegerLiteral", "UserDefinedFloatingLiteral", "UserDefinedStringLiteral", + "UserDefinedCharacterLiteral", "Whitespace", "Newline", "BlockComment", + "LineComment" + }; + } + private static final String[] _SYMBOLIC_NAMES = makeSymbolicNames(); + public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); + + /** + * @deprecated Use {@link #VOCABULARY} instead. + */ + @Deprecated + public static final String[] tokenNames; + static { + tokenNames = new String[_SYMBOLIC_NAMES.length]; + for (int i = 0; i < tokenNames.length; i++) { + tokenNames[i] = VOCABULARY.getLiteralName(i); + if (tokenNames[i] == null) { + tokenNames[i] = VOCABULARY.getSymbolicName(i); + } + + if (tokenNames[i] == null) { + tokenNames[i] = ""; + } + } + } + + @Override + @Deprecated + public String[] getTokenNames() { + return tokenNames; + } + + @Override + + public Vocabulary getVocabulary() { + return VOCABULARY; + } + + @Override + public String getGrammarFileName() { return "CPP14Parser.g4"; } + + @Override + public String[] getRuleNames() { return ruleNames; } + + @Override + public String getSerializedATN() { return _serializedATN; } + + @Override + public ATN getATN() { return _ATN; } + + public CPP14Parser(TokenStream input) { + super(input); + _interp = new ParserATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache); + } + + public static class TranslationUnitContext extends ParserRuleContext { + public TerminalNode EOF() { return getToken(CPP14Parser.EOF, 0); } + public DeclarationseqContext declarationseq() { + return getRuleContext(DeclarationseqContext.class,0); + } + public TranslationUnitContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_translationUnit; } + } + + public final TranslationUnitContext translationUnit() throws RecognitionException { + TranslationUnitContext _localctx = new TranslationUnitContext(_ctx, getState()); + enterRule(_localctx, 0, RULE_translationUnit); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(379); + _errHandler.sync(this); + _la = _input.LA(1); + if (((((_la - 10)) & ~0x3f) == 0 && ((1L << (_la - 10)) & ((1L << (Alignas - 10)) | (1L << (Asm - 10)) | (1L << (Auto - 10)) | (1L << (Bool - 10)) | (1L << (Char - 10)) | (1L << (Char16 - 10)) | (1L << (Char32 - 10)) | (1L << (Class - 10)) | (1L << (Const - 10)) | (1L << (Constexpr - 10)) | (1L << (Decltype - 10)) | (1L << (Double - 10)) | (1L << (Enum - 10)) | (1L << (Explicit - 10)) | (1L << (Extern - 10)) | (1L << (Float - 10)) | (1L << (Friend - 10)) | (1L << (Inline - 10)) | (1L << (Int - 10)) | (1L << (Long - 10)) | (1L << (Mutable - 10)) | (1L << (Namespace - 10)) | (1L << (Operator - 10)) | (1L << (Register - 10)) | (1L << (Short - 10)) | (1L << (Signed - 10)) | (1L << (Static - 10)) | (1L << (Static_assert - 10)) | (1L << (Struct - 10)) | (1L << (Template - 10)) | (1L << (Thread_local - 10)))) != 0) || ((((_la - 74)) & ~0x3f) == 0 && ((1L << (_la - 74)) & ((1L << (Typedef - 74)) | (1L << (Typename_ - 74)) | (1L << (Union - 74)) | (1L << (Unsigned - 74)) | (1L << (Using - 74)) | (1L << (Virtual - 74)) | (1L << (Void - 74)) | (1L << (Volatile - 74)) | (1L << (Wchar - 74)) | (1L << (LeftParen - 74)) | (1L << (LeftBracket - 74)) | (1L << (Star - 74)) | (1L << (And - 74)) | (1L << (Tilde - 74)) | (1L << (AndAnd - 74)) | (1L << (Doublecolon - 74)) | (1L << (Semi - 74)) | (1L << (Ellipsis - 74)) | (1L << (Identifier - 74)))) != 0)) { + { + setState(378); + declarationseq(); + } + } + + setState(381); + match(EOF); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class PrimaryExpressionContext extends ParserRuleContext { + public List literal() { + return getRuleContexts(LiteralContext.class); + } + public LiteralContext literal(int i) { + return getRuleContext(LiteralContext.class,i); + } + public TerminalNode This() { return getToken(CPP14Parser.This, 0); } + public TerminalNode LeftParen() { return getToken(CPP14Parser.LeftParen, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode RightParen() { return getToken(CPP14Parser.RightParen, 0); } + public IdExpressionContext idExpression() { + return getRuleContext(IdExpressionContext.class,0); + } + public LambdaExpressionContext lambdaExpression() { + return getRuleContext(LambdaExpressionContext.class,0); + } + public PrimaryExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_primaryExpression; } + } + + public final PrimaryExpressionContext primaryExpression() throws RecognitionException { + PrimaryExpressionContext _localctx = new PrimaryExpressionContext(_ctx, getState()); + enterRule(_localctx, 2, RULE_primaryExpression); + try { + int _alt; + setState(395); + _errHandler.sync(this); + switch (_input.LA(1)) { + case IntegerLiteral: + case CharacterLiteral: + case FloatingLiteral: + case StringLiteral: + case BooleanLiteral: + case PointerLiteral: + case UserDefinedLiteral: + enterOuterAlt(_localctx, 1); + { + setState(384); + _errHandler.sync(this); + _alt = 1; + do { + switch (_alt) { + case 1: + { + { + setState(383); + literal(); + } + } + break; + default: + throw new NoViableAltException(this); + } + setState(386); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,1,_ctx); + } while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ); + } + break; + case This: + enterOuterAlt(_localctx, 2); + { + setState(388); + match(This); + } + break; + case LeftParen: + enterOuterAlt(_localctx, 3); + { + setState(389); + match(LeftParen); + setState(390); + expression(); + setState(391); + match(RightParen); + } + break; + case Decltype: + case Operator: + case Tilde: + case Doublecolon: + case Identifier: + enterOuterAlt(_localctx, 4); + { + setState(393); + idExpression(); + } + break; + case LeftBracket: + enterOuterAlt(_localctx, 5); + { + setState(394); + lambdaExpression(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class IdExpressionContext extends ParserRuleContext { + public UnqualifiedIdContext unqualifiedId() { + return getRuleContext(UnqualifiedIdContext.class,0); + } + public QualifiedIdContext qualifiedId() { + return getRuleContext(QualifiedIdContext.class,0); + } + public IdExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_idExpression; } + } + + public final IdExpressionContext idExpression() throws RecognitionException { + IdExpressionContext _localctx = new IdExpressionContext(_ctx, getState()); + enterRule(_localctx, 4, RULE_idExpression); + try { + setState(399); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,3,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(397); + unqualifiedId(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(398); + qualifiedId(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class UnqualifiedIdContext extends ParserRuleContext { + public TerminalNode Identifier() { return getToken(CPP14Parser.Identifier, 0); } + public OperatorFunctionIdContext operatorFunctionId() { + return getRuleContext(OperatorFunctionIdContext.class,0); + } + public ConversionFunctionIdContext conversionFunctionId() { + return getRuleContext(ConversionFunctionIdContext.class,0); + } + public LiteralOperatorIdContext literalOperatorId() { + return getRuleContext(LiteralOperatorIdContext.class,0); + } + public TerminalNode Tilde() { return getToken(CPP14Parser.Tilde, 0); } + public ClassNameContext className() { + return getRuleContext(ClassNameContext.class,0); + } + public DecltypeSpecifierContext decltypeSpecifier() { + return getRuleContext(DecltypeSpecifierContext.class,0); + } + public TemplateIdContext templateId() { + return getRuleContext(TemplateIdContext.class,0); + } + public UnqualifiedIdContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_unqualifiedId; } + } + + public final UnqualifiedIdContext unqualifiedId() throws RecognitionException { + UnqualifiedIdContext _localctx = new UnqualifiedIdContext(_ctx, getState()); + enterRule(_localctx, 6, RULE_unqualifiedId); + try { + setState(411); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,5,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(401); + match(Identifier); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(402); + operatorFunctionId(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(403); + conversionFunctionId(); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(404); + literalOperatorId(); + } + break; + case 5: + enterOuterAlt(_localctx, 5); + { + setState(405); + match(Tilde); + setState(408); + _errHandler.sync(this); + switch (_input.LA(1)) { + case Identifier: + { + setState(406); + className(); + } + break; + case Decltype: + { + setState(407); + decltypeSpecifier(); + } + break; + default: + throw new NoViableAltException(this); + } + } + break; + case 6: + enterOuterAlt(_localctx, 6); + { + setState(410); + templateId(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class QualifiedIdContext extends ParserRuleContext { + public NestedNameSpecifierContext nestedNameSpecifier() { + return getRuleContext(NestedNameSpecifierContext.class,0); + } + public UnqualifiedIdContext unqualifiedId() { + return getRuleContext(UnqualifiedIdContext.class,0); + } + public TerminalNode Template() { return getToken(CPP14Parser.Template, 0); } + public QualifiedIdContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_qualifiedId; } + } + + public final QualifiedIdContext qualifiedId() throws RecognitionException { + QualifiedIdContext _localctx = new QualifiedIdContext(_ctx, getState()); + enterRule(_localctx, 8, RULE_qualifiedId); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(413); + nestedNameSpecifier(0); + setState(415); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Template) { + { + setState(414); + match(Template); + } + } + + setState(417); + unqualifiedId(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class NestedNameSpecifierContext extends ParserRuleContext { + public TerminalNode Doublecolon() { return getToken(CPP14Parser.Doublecolon, 0); } + public TheTypeNameContext theTypeName() { + return getRuleContext(TheTypeNameContext.class,0); + } + public NamespaceNameContext namespaceName() { + return getRuleContext(NamespaceNameContext.class,0); + } + public DecltypeSpecifierContext decltypeSpecifier() { + return getRuleContext(DecltypeSpecifierContext.class,0); + } + public NestedNameSpecifierContext nestedNameSpecifier() { + return getRuleContext(NestedNameSpecifierContext.class,0); + } + public TerminalNode Identifier() { return getToken(CPP14Parser.Identifier, 0); } + public SimpleTemplateIdContext simpleTemplateId() { + return getRuleContext(SimpleTemplateIdContext.class,0); + } + public TerminalNode Template() { return getToken(CPP14Parser.Template, 0); } + public NestedNameSpecifierContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_nestedNameSpecifier; } + } + + public final NestedNameSpecifierContext nestedNameSpecifier() throws RecognitionException { + return nestedNameSpecifier(0); + } + + private NestedNameSpecifierContext nestedNameSpecifier(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + NestedNameSpecifierContext _localctx = new NestedNameSpecifierContext(_ctx, _parentState); + NestedNameSpecifierContext _prevctx = _localctx; + int _startState = 10; + enterRecursionRule(_localctx, 10, RULE_nestedNameSpecifier, _p); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + { + setState(423); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,7,_ctx) ) { + case 1: + { + setState(420); + theTypeName(); + } + break; + case 2: + { + setState(421); + namespaceName(); + } + break; + case 3: + { + setState(422); + decltypeSpecifier(); + } + break; + } + setState(425); + match(Doublecolon); + } + _ctx.stop = _input.LT(-1); + setState(438); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,10,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + { + _localctx = new NestedNameSpecifierContext(_parentctx, _parentState); + pushNewRecursionContext(_localctx, _startState, RULE_nestedNameSpecifier); + setState(427); + if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); + setState(433); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,9,_ctx) ) { + case 1: + { + setState(428); + match(Identifier); + } + break; + case 2: + { + setState(430); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Template) { + { + setState(429); + match(Template); + } + } + + setState(432); + simpleTemplateId(); + } + break; + } + setState(435); + match(Doublecolon); + } + } + } + setState(440); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,10,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + public static class LambdaExpressionContext extends ParserRuleContext { + public LambdaIntroducerContext lambdaIntroducer() { + return getRuleContext(LambdaIntroducerContext.class,0); + } + public CompoundStatementContext compoundStatement() { + return getRuleContext(CompoundStatementContext.class,0); + } + public LambdaDeclaratorContext lambdaDeclarator() { + return getRuleContext(LambdaDeclaratorContext.class,0); + } + public LambdaExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_lambdaExpression; } + } + + public final LambdaExpressionContext lambdaExpression() throws RecognitionException { + LambdaExpressionContext _localctx = new LambdaExpressionContext(_ctx, getState()); + enterRule(_localctx, 12, RULE_lambdaExpression); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(441); + lambdaIntroducer(); + setState(443); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==LeftParen) { + { + setState(442); + lambdaDeclarator(); + } + } + + setState(445); + compoundStatement(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class LambdaIntroducerContext extends ParserRuleContext { + public TerminalNode LeftBracket() { return getToken(CPP14Parser.LeftBracket, 0); } + public TerminalNode RightBracket() { return getToken(CPP14Parser.RightBracket, 0); } + public LambdaCaptureContext lambdaCapture() { + return getRuleContext(LambdaCaptureContext.class,0); + } + public LambdaIntroducerContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_lambdaIntroducer; } + } + + public final LambdaIntroducerContext lambdaIntroducer() throws RecognitionException { + LambdaIntroducerContext _localctx = new LambdaIntroducerContext(_ctx, getState()); + enterRule(_localctx, 14, RULE_lambdaIntroducer); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(447); + match(LeftBracket); + setState(449); + _errHandler.sync(this); + _la = _input.LA(1); + if (((((_la - 69)) & ~0x3f) == 0 && ((1L << (_la - 69)) & ((1L << (This - 69)) | (1L << (And - 69)) | (1L << (Assign - 69)) | (1L << (Identifier - 69)))) != 0)) { + { + setState(448); + lambdaCapture(); + } + } + + setState(451); + match(RightBracket); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class LambdaCaptureContext extends ParserRuleContext { + public CaptureListContext captureList() { + return getRuleContext(CaptureListContext.class,0); + } + public CaptureDefaultContext captureDefault() { + return getRuleContext(CaptureDefaultContext.class,0); + } + public TerminalNode Comma() { return getToken(CPP14Parser.Comma, 0); } + public LambdaCaptureContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_lambdaCapture; } + } + + public final LambdaCaptureContext lambdaCapture() throws RecognitionException { + LambdaCaptureContext _localctx = new LambdaCaptureContext(_ctx, getState()); + enterRule(_localctx, 16, RULE_lambdaCapture); + int _la; + try { + setState(459); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,14,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(453); + captureList(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(454); + captureDefault(); + setState(457); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Comma) { + { + setState(455); + match(Comma); + setState(456); + captureList(); + } + } + + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class CaptureDefaultContext extends ParserRuleContext { + public TerminalNode And() { return getToken(CPP14Parser.And, 0); } + public TerminalNode Assign() { return getToken(CPP14Parser.Assign, 0); } + public CaptureDefaultContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_captureDefault; } + } + + public final CaptureDefaultContext captureDefault() throws RecognitionException { + CaptureDefaultContext _localctx = new CaptureDefaultContext(_ctx, getState()); + enterRule(_localctx, 18, RULE_captureDefault); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(461); + _la = _input.LA(1); + if ( !(_la==And || _la==Assign) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class CaptureListContext extends ParserRuleContext { + public List capture() { + return getRuleContexts(CaptureContext.class); + } + public CaptureContext capture(int i) { + return getRuleContext(CaptureContext.class,i); + } + public List Comma() { return getTokens(CPP14Parser.Comma); } + public TerminalNode Comma(int i) { + return getToken(CPP14Parser.Comma, i); + } + public TerminalNode Ellipsis() { return getToken(CPP14Parser.Ellipsis, 0); } + public CaptureListContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_captureList; } + } + + public final CaptureListContext captureList() throws RecognitionException { + CaptureListContext _localctx = new CaptureListContext(_ctx, getState()); + enterRule(_localctx, 20, RULE_captureList); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(463); + capture(); + setState(468); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==Comma) { + { + { + setState(464); + match(Comma); + setState(465); + capture(); + } + } + setState(470); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(472); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Ellipsis) { + { + setState(471); + match(Ellipsis); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class CaptureContext extends ParserRuleContext { + public SimpleCaptureContext simpleCapture() { + return getRuleContext(SimpleCaptureContext.class,0); + } + public InitcaptureContext initcapture() { + return getRuleContext(InitcaptureContext.class,0); + } + public CaptureContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_capture; } + } + + public final CaptureContext capture() throws RecognitionException { + CaptureContext _localctx = new CaptureContext(_ctx, getState()); + enterRule(_localctx, 22, RULE_capture); + try { + setState(476); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,17,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(474); + simpleCapture(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(475); + initcapture(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class SimpleCaptureContext extends ParserRuleContext { + public TerminalNode Identifier() { return getToken(CPP14Parser.Identifier, 0); } + public TerminalNode And() { return getToken(CPP14Parser.And, 0); } + public TerminalNode This() { return getToken(CPP14Parser.This, 0); } + public SimpleCaptureContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_simpleCapture; } + } + + public final SimpleCaptureContext simpleCapture() throws RecognitionException { + SimpleCaptureContext _localctx = new SimpleCaptureContext(_ctx, getState()); + enterRule(_localctx, 24, RULE_simpleCapture); + int _la; + try { + setState(483); + _errHandler.sync(this); + switch (_input.LA(1)) { + case And: + case Identifier: + enterOuterAlt(_localctx, 1); + { + setState(479); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==And) { + { + setState(478); + match(And); + } + } + + setState(481); + match(Identifier); + } + break; + case This: + enterOuterAlt(_localctx, 2); + { + setState(482); + match(This); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class InitcaptureContext extends ParserRuleContext { + public TerminalNode Identifier() { return getToken(CPP14Parser.Identifier, 0); } + public InitializerContext initializer() { + return getRuleContext(InitializerContext.class,0); + } + public TerminalNode And() { return getToken(CPP14Parser.And, 0); } + public InitcaptureContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_initcapture; } + } + + public final InitcaptureContext initcapture() throws RecognitionException { + InitcaptureContext _localctx = new InitcaptureContext(_ctx, getState()); + enterRule(_localctx, 26, RULE_initcapture); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(486); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==And) { + { + setState(485); + match(And); + } + } + + setState(488); + match(Identifier); + setState(489); + initializer(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class LambdaDeclaratorContext extends ParserRuleContext { + public TerminalNode LeftParen() { return getToken(CPP14Parser.LeftParen, 0); } + public TerminalNode RightParen() { return getToken(CPP14Parser.RightParen, 0); } + public ParameterDeclarationClauseContext parameterDeclarationClause() { + return getRuleContext(ParameterDeclarationClauseContext.class,0); + } + public TerminalNode Mutable() { return getToken(CPP14Parser.Mutable, 0); } + public ExceptionSpecificationContext exceptionSpecification() { + return getRuleContext(ExceptionSpecificationContext.class,0); + } + public AttributeSpecifierSeqContext attributeSpecifierSeq() { + return getRuleContext(AttributeSpecifierSeqContext.class,0); + } + public TrailingReturnTypeContext trailingReturnType() { + return getRuleContext(TrailingReturnTypeContext.class,0); + } + public LambdaDeclaratorContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_lambdaDeclarator; } + } + + public final LambdaDeclaratorContext lambdaDeclarator() throws RecognitionException { + LambdaDeclaratorContext _localctx = new LambdaDeclaratorContext(_ctx, getState()); + enterRule(_localctx, 28, RULE_lambdaDeclarator); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(491); + match(LeftParen); + setState(493); + _errHandler.sync(this); + _la = _input.LA(1); + if (((((_la - 10)) & ~0x3f) == 0 && ((1L << (_la - 10)) & ((1L << (Alignas - 10)) | (1L << (Auto - 10)) | (1L << (Bool - 10)) | (1L << (Char - 10)) | (1L << (Char16 - 10)) | (1L << (Char32 - 10)) | (1L << (Class - 10)) | (1L << (Const - 10)) | (1L << (Constexpr - 10)) | (1L << (Decltype - 10)) | (1L << (Double - 10)) | (1L << (Enum - 10)) | (1L << (Explicit - 10)) | (1L << (Extern - 10)) | (1L << (Float - 10)) | (1L << (Friend - 10)) | (1L << (Inline - 10)) | (1L << (Int - 10)) | (1L << (Long - 10)) | (1L << (Mutable - 10)) | (1L << (Register - 10)) | (1L << (Short - 10)) | (1L << (Signed - 10)) | (1L << (Static - 10)) | (1L << (Struct - 10)) | (1L << (Thread_local - 10)))) != 0) || ((((_la - 74)) & ~0x3f) == 0 && ((1L << (_la - 74)) & ((1L << (Typedef - 74)) | (1L << (Typename_ - 74)) | (1L << (Union - 74)) | (1L << (Unsigned - 74)) | (1L << (Virtual - 74)) | (1L << (Void - 74)) | (1L << (Volatile - 74)) | (1L << (Wchar - 74)) | (1L << (LeftBracket - 74)) | (1L << (Doublecolon - 74)) | (1L << (Identifier - 74)))) != 0)) { + { + setState(492); + parameterDeclarationClause(); + } + } + + setState(495); + match(RightParen); + setState(497); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Mutable) { + { + setState(496); + match(Mutable); + } + } + + setState(500); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Noexcept || _la==Throw) { + { + setState(499); + exceptionSpecification(); + } + } + + setState(503); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Alignas || _la==LeftBracket) { + { + setState(502); + attributeSpecifierSeq(); + } + } + + setState(506); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Arrow) { + { + setState(505); + trailingReturnType(); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class PostfixExpressionContext extends ParserRuleContext { + public PrimaryExpressionContext primaryExpression() { + return getRuleContext(PrimaryExpressionContext.class,0); + } + public SimpleTypeSpecifierContext simpleTypeSpecifier() { + return getRuleContext(SimpleTypeSpecifierContext.class,0); + } + public TypeNameSpecifierContext typeNameSpecifier() { + return getRuleContext(TypeNameSpecifierContext.class,0); + } + public TerminalNode LeftParen() { return getToken(CPP14Parser.LeftParen, 0); } + public TerminalNode RightParen() { return getToken(CPP14Parser.RightParen, 0); } + public BracedInitListContext bracedInitList() { + return getRuleContext(BracedInitListContext.class,0); + } + public ExpressionListContext expressionList() { + return getRuleContext(ExpressionListContext.class,0); + } + public TerminalNode Less() { return getToken(CPP14Parser.Less, 0); } + public TheTypeIdContext theTypeId() { + return getRuleContext(TheTypeIdContext.class,0); + } + public TerminalNode Greater() { return getToken(CPP14Parser.Greater, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode Dynamic_cast() { return getToken(CPP14Parser.Dynamic_cast, 0); } + public TerminalNode Static_cast() { return getToken(CPP14Parser.Static_cast, 0); } + public TerminalNode Reinterpret_cast() { return getToken(CPP14Parser.Reinterpret_cast, 0); } + public TerminalNode Const_cast() { return getToken(CPP14Parser.Const_cast, 0); } + public TypeIdOfTheTypeIdContext typeIdOfTheTypeId() { + return getRuleContext(TypeIdOfTheTypeIdContext.class,0); + } + public PostfixExpressionContext postfixExpression() { + return getRuleContext(PostfixExpressionContext.class,0); + } + public TerminalNode LeftBracket() { return getToken(CPP14Parser.LeftBracket, 0); } + public TerminalNode RightBracket() { return getToken(CPP14Parser.RightBracket, 0); } + public TerminalNode Dot() { return getToken(CPP14Parser.Dot, 0); } + public TerminalNode Arrow() { return getToken(CPP14Parser.Arrow, 0); } + public IdExpressionContext idExpression() { + return getRuleContext(IdExpressionContext.class,0); + } + public PseudoDestructorNameContext pseudoDestructorName() { + return getRuleContext(PseudoDestructorNameContext.class,0); + } + public TerminalNode Template() { return getToken(CPP14Parser.Template, 0); } + public TerminalNode PlusPlus() { return getToken(CPP14Parser.PlusPlus, 0); } + public TerminalNode MinusMinus() { return getToken(CPP14Parser.MinusMinus, 0); } + public PostfixExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_postfixExpression; } + } + + public final PostfixExpressionContext postfixExpression() throws RecognitionException { + return postfixExpression(0); + } + + private PostfixExpressionContext postfixExpression(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + PostfixExpressionContext _localctx = new PostfixExpressionContext(_ctx, _parentState); + PostfixExpressionContext _prevctx = _localctx; + int _startState = 30; + enterRecursionRule(_localctx, 30, RULE_postfixExpression, _p); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(538); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,30,_ctx) ) { + case 1: + { + setState(509); + primaryExpression(); + } + break; + case 2: + { + setState(512); + _errHandler.sync(this); + switch (_input.LA(1)) { + case Auto: + case Bool: + case Char: + case Char16: + case Char32: + case Decltype: + case Double: + case Float: + case Int: + case Long: + case Short: + case Signed: + case Unsigned: + case Void: + case Wchar: + case Doublecolon: + case Identifier: + { + setState(510); + simpleTypeSpecifier(); + } + break; + case Typename_: + { + setState(511); + typeNameSpecifier(); + } + break; + default: + throw new NoViableAltException(this); + } + setState(520); + _errHandler.sync(this); + switch (_input.LA(1)) { + case LeftParen: + { + setState(514); + match(LeftParen); + setState(516); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << IntegerLiteral) | (1L << CharacterLiteral) | (1L << FloatingLiteral) | (1L << StringLiteral) | (1L << BooleanLiteral) | (1L << PointerLiteral) | (1L << UserDefinedLiteral) | (1L << Alignof) | (1L << Auto) | (1L << Bool) | (1L << Char) | (1L << Char16) | (1L << Char32) | (1L << Const_cast) | (1L << Decltype) | (1L << Delete) | (1L << Double) | (1L << Dynamic_cast) | (1L << Float) | (1L << Int) | (1L << Long) | (1L << New) | (1L << Noexcept) | (1L << Operator) | (1L << Reinterpret_cast) | (1L << Short) | (1L << Signed) | (1L << Sizeof))) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & ((1L << (Static_cast - 65)) | (1L << (This - 65)) | (1L << (Throw - 65)) | (1L << (Typeid_ - 65)) | (1L << (Typename_ - 65)) | (1L << (Unsigned - 65)) | (1L << (Void - 65)) | (1L << (Wchar - 65)) | (1L << (LeftParen - 65)) | (1L << (LeftBracket - 65)) | (1L << (LeftBrace - 65)) | (1L << (Plus - 65)) | (1L << (Minus - 65)) | (1L << (Star - 65)) | (1L << (And - 65)) | (1L << (Or - 65)) | (1L << (Tilde - 65)) | (1L << (Not - 65)) | (1L << (PlusPlus - 65)) | (1L << (MinusMinus - 65)) | (1L << (Doublecolon - 65)))) != 0) || _la==Identifier) { + { + setState(515); + expressionList(); + } + } + + setState(518); + match(RightParen); + } + break; + case LeftBrace: + { + setState(519); + bracedInitList(); + } + break; + default: + throw new NoViableAltException(this); + } + } + break; + case 3: + { + setState(522); + _la = _input.LA(1); + if ( !(((((_la - 24)) & ~0x3f) == 0 && ((1L << (_la - 24)) & ((1L << (Const_cast - 24)) | (1L << (Dynamic_cast - 24)) | (1L << (Reinterpret_cast - 24)) | (1L << (Static_cast - 24)))) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(523); + match(Less); + setState(524); + theTypeId(); + setState(525); + match(Greater); + setState(526); + match(LeftParen); + setState(527); + expression(); + setState(528); + match(RightParen); + } + break; + case 4: + { + setState(530); + typeIdOfTheTypeId(); + setState(531); + match(LeftParen); + setState(534); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,29,_ctx) ) { + case 1: + { + setState(532); + expression(); + } + break; + case 2: + { + setState(533); + theTypeId(); + } + break; + } + setState(536); + match(RightParen); + } + break; + } + _ctx.stop = _input.LT(-1); + setState(567); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,36,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + setState(565); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,35,_ctx) ) { + case 1: + { + _localctx = new PostfixExpressionContext(_parentctx, _parentState); + pushNewRecursionContext(_localctx, _startState, RULE_postfixExpression); + setState(540); + if (!(precpred(_ctx, 7))) throw new FailedPredicateException(this, "precpred(_ctx, 7)"); + setState(541); + match(LeftBracket); + setState(544); + _errHandler.sync(this); + switch (_input.LA(1)) { + case IntegerLiteral: + case CharacterLiteral: + case FloatingLiteral: + case StringLiteral: + case BooleanLiteral: + case PointerLiteral: + case UserDefinedLiteral: + case Alignof: + case Auto: + case Bool: + case Char: + case Char16: + case Char32: + case Const_cast: + case Decltype: + case Delete: + case Double: + case Dynamic_cast: + case Float: + case Int: + case Long: + case New: + case Noexcept: + case Operator: + case Reinterpret_cast: + case Short: + case Signed: + case Sizeof: + case Static_cast: + case This: + case Throw: + case Typeid_: + case Typename_: + case Unsigned: + case Void: + case Wchar: + case LeftParen: + case LeftBracket: + case Plus: + case Minus: + case Star: + case And: + case Or: + case Tilde: + case Not: + case PlusPlus: + case MinusMinus: + case Doublecolon: + case Identifier: + { + setState(542); + expression(); + } + break; + case LeftBrace: + { + setState(543); + bracedInitList(); + } + break; + default: + throw new NoViableAltException(this); + } + setState(546); + match(RightBracket); + } + break; + case 2: + { + _localctx = new PostfixExpressionContext(_parentctx, _parentState); + pushNewRecursionContext(_localctx, _startState, RULE_postfixExpression); + setState(548); + if (!(precpred(_ctx, 6))) throw new FailedPredicateException(this, "precpred(_ctx, 6)"); + setState(549); + match(LeftParen); + setState(551); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << IntegerLiteral) | (1L << CharacterLiteral) | (1L << FloatingLiteral) | (1L << StringLiteral) | (1L << BooleanLiteral) | (1L << PointerLiteral) | (1L << UserDefinedLiteral) | (1L << Alignof) | (1L << Auto) | (1L << Bool) | (1L << Char) | (1L << Char16) | (1L << Char32) | (1L << Const_cast) | (1L << Decltype) | (1L << Delete) | (1L << Double) | (1L << Dynamic_cast) | (1L << Float) | (1L << Int) | (1L << Long) | (1L << New) | (1L << Noexcept) | (1L << Operator) | (1L << Reinterpret_cast) | (1L << Short) | (1L << Signed) | (1L << Sizeof))) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & ((1L << (Static_cast - 65)) | (1L << (This - 65)) | (1L << (Throw - 65)) | (1L << (Typeid_ - 65)) | (1L << (Typename_ - 65)) | (1L << (Unsigned - 65)) | (1L << (Void - 65)) | (1L << (Wchar - 65)) | (1L << (LeftParen - 65)) | (1L << (LeftBracket - 65)) | (1L << (LeftBrace - 65)) | (1L << (Plus - 65)) | (1L << (Minus - 65)) | (1L << (Star - 65)) | (1L << (And - 65)) | (1L << (Or - 65)) | (1L << (Tilde - 65)) | (1L << (Not - 65)) | (1L << (PlusPlus - 65)) | (1L << (MinusMinus - 65)) | (1L << (Doublecolon - 65)))) != 0) || _la==Identifier) { + { + setState(550); + expressionList(); + } + } + + setState(553); + match(RightParen); + } + break; + case 3: + { + _localctx = new PostfixExpressionContext(_parentctx, _parentState); + pushNewRecursionContext(_localctx, _startState, RULE_postfixExpression); + setState(554); + if (!(precpred(_ctx, 4))) throw new FailedPredicateException(this, "precpred(_ctx, 4)"); + setState(555); + _la = _input.LA(1); + if ( !(_la==Arrow || _la==Dot) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(561); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,34,_ctx) ) { + case 1: + { + setState(557); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Template) { + { + setState(556); + match(Template); + } + } + + setState(559); + idExpression(); + } + break; + case 2: + { + setState(560); + pseudoDestructorName(); + } + break; + } + } + break; + case 4: + { + _localctx = new PostfixExpressionContext(_parentctx, _parentState); + pushNewRecursionContext(_localctx, _startState, RULE_postfixExpression); + setState(563); + if (!(precpred(_ctx, 3))) throw new FailedPredicateException(this, "precpred(_ctx, 3)"); + setState(564); + _la = _input.LA(1); + if ( !(_la==PlusPlus || _la==MinusMinus) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + break; + } + } + } + setState(569); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,36,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + public static class TypeIdOfTheTypeIdContext extends ParserRuleContext { + public TerminalNode Typeid_() { return getToken(CPP14Parser.Typeid_, 0); } + public TypeIdOfTheTypeIdContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_typeIdOfTheTypeId; } + } + + public final TypeIdOfTheTypeIdContext typeIdOfTheTypeId() throws RecognitionException { + TypeIdOfTheTypeIdContext _localctx = new TypeIdOfTheTypeIdContext(_ctx, getState()); + enterRule(_localctx, 32, RULE_typeIdOfTheTypeId); + try { + enterOuterAlt(_localctx, 1); + { + setState(570); + match(Typeid_); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ExpressionListContext extends ParserRuleContext { + public InitializerListContext initializerList() { + return getRuleContext(InitializerListContext.class,0); + } + public ExpressionListContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_expressionList; } + } + + public final ExpressionListContext expressionList() throws RecognitionException { + ExpressionListContext _localctx = new ExpressionListContext(_ctx, getState()); + enterRule(_localctx, 34, RULE_expressionList); + try { + enterOuterAlt(_localctx, 1); + { + setState(572); + initializerList(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class PseudoDestructorNameContext extends ParserRuleContext { + public TerminalNode Tilde() { return getToken(CPP14Parser.Tilde, 0); } + public List theTypeName() { + return getRuleContexts(TheTypeNameContext.class); + } + public TheTypeNameContext theTypeName(int i) { + return getRuleContext(TheTypeNameContext.class,i); + } + public NestedNameSpecifierContext nestedNameSpecifier() { + return getRuleContext(NestedNameSpecifierContext.class,0); + } + public TerminalNode Doublecolon() { return getToken(CPP14Parser.Doublecolon, 0); } + public TerminalNode Template() { return getToken(CPP14Parser.Template, 0); } + public SimpleTemplateIdContext simpleTemplateId() { + return getRuleContext(SimpleTemplateIdContext.class,0); + } + public DecltypeSpecifierContext decltypeSpecifier() { + return getRuleContext(DecltypeSpecifierContext.class,0); + } + public PseudoDestructorNameContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_pseudoDestructorName; } + } + + public final PseudoDestructorNameContext pseudoDestructorName() throws RecognitionException { + PseudoDestructorNameContext _localctx = new PseudoDestructorNameContext(_ctx, getState()); + enterRule(_localctx, 36, RULE_pseudoDestructorName); + int _la; + try { + setState(593); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,39,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(575); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,37,_ctx) ) { + case 1: + { + setState(574); + nestedNameSpecifier(0); + } + break; + } + setState(580); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Identifier) { + { + setState(577); + theTypeName(); + setState(578); + match(Doublecolon); + } + } + + setState(582); + match(Tilde); + setState(583); + theTypeName(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(584); + nestedNameSpecifier(0); + setState(585); + match(Template); + setState(586); + simpleTemplateId(); + setState(587); + match(Doublecolon); + setState(588); + match(Tilde); + setState(589); + theTypeName(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(591); + match(Tilde); + setState(592); + decltypeSpecifier(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class UnaryExpressionContext extends ParserRuleContext { + public PostfixExpressionContext postfixExpression() { + return getRuleContext(PostfixExpressionContext.class,0); + } + public UnaryExpressionContext unaryExpression() { + return getRuleContext(UnaryExpressionContext.class,0); + } + public TerminalNode PlusPlus() { return getToken(CPP14Parser.PlusPlus, 0); } + public TerminalNode MinusMinus() { return getToken(CPP14Parser.MinusMinus, 0); } + public UnaryOperatorContext unaryOperator() { + return getRuleContext(UnaryOperatorContext.class,0); + } + public TerminalNode Sizeof() { return getToken(CPP14Parser.Sizeof, 0); } + public TerminalNode LeftParen() { return getToken(CPP14Parser.LeftParen, 0); } + public TheTypeIdContext theTypeId() { + return getRuleContext(TheTypeIdContext.class,0); + } + public TerminalNode RightParen() { return getToken(CPP14Parser.RightParen, 0); } + public TerminalNode Ellipsis() { return getToken(CPP14Parser.Ellipsis, 0); } + public TerminalNode Identifier() { return getToken(CPP14Parser.Identifier, 0); } + public TerminalNode Alignof() { return getToken(CPP14Parser.Alignof, 0); } + public NoExceptExpressionContext noExceptExpression() { + return getRuleContext(NoExceptExpressionContext.class,0); + } + public NewExpressionContext newExpression() { + return getRuleContext(NewExpressionContext.class,0); + } + public DeleteExpressionContext deleteExpression() { + return getRuleContext(DeleteExpressionContext.class,0); + } + public UnaryExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_unaryExpression; } + } + + public final UnaryExpressionContext unaryExpression() throws RecognitionException { + UnaryExpressionContext _localctx = new UnaryExpressionContext(_ctx, getState()); + enterRule(_localctx, 38, RULE_unaryExpression); + try { + setState(622); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,42,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(595); + postfixExpression(0); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(600); + _errHandler.sync(this); + switch (_input.LA(1)) { + case PlusPlus: + { + setState(596); + match(PlusPlus); + } + break; + case MinusMinus: + { + setState(597); + match(MinusMinus); + } + break; + case Plus: + case Minus: + case Star: + case And: + case Or: + case Tilde: + case Not: + { + setState(598); + unaryOperator(); + } + break; + case Sizeof: + { + setState(599); + match(Sizeof); + } + break; + default: + throw new NoViableAltException(this); + } + setState(602); + unaryExpression(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(603); + match(Sizeof); + setState(612); + _errHandler.sync(this); + switch (_input.LA(1)) { + case LeftParen: + { + setState(604); + match(LeftParen); + setState(605); + theTypeId(); + setState(606); + match(RightParen); + } + break; + case Ellipsis: + { + setState(608); + match(Ellipsis); + setState(609); + match(LeftParen); + setState(610); + match(Identifier); + setState(611); + match(RightParen); + } + break; + default: + throw new NoViableAltException(this); + } + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(614); + match(Alignof); + setState(615); + match(LeftParen); + setState(616); + theTypeId(); + setState(617); + match(RightParen); + } + break; + case 5: + enterOuterAlt(_localctx, 5); + { + setState(619); + noExceptExpression(); + } + break; + case 6: + enterOuterAlt(_localctx, 6); + { + setState(620); + newExpression(); + } + break; + case 7: + enterOuterAlt(_localctx, 7); + { + setState(621); + deleteExpression(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class UnaryOperatorContext extends ParserRuleContext { + public TerminalNode Or() { return getToken(CPP14Parser.Or, 0); } + public TerminalNode Star() { return getToken(CPP14Parser.Star, 0); } + public TerminalNode And() { return getToken(CPP14Parser.And, 0); } + public TerminalNode Plus() { return getToken(CPP14Parser.Plus, 0); } + public TerminalNode Tilde() { return getToken(CPP14Parser.Tilde, 0); } + public TerminalNode Minus() { return getToken(CPP14Parser.Minus, 0); } + public TerminalNode Not() { return getToken(CPP14Parser.Not, 0); } + public UnaryOperatorContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_unaryOperator; } + } + + public final UnaryOperatorContext unaryOperator() throws RecognitionException { + UnaryOperatorContext _localctx = new UnaryOperatorContext(_ctx, getState()); + enterRule(_localctx, 40, RULE_unaryOperator); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(624); + _la = _input.LA(1); + if ( !(((((_la - 91)) & ~0x3f) == 0 && ((1L << (_la - 91)) & ((1L << (Plus - 91)) | (1L << (Minus - 91)) | (1L << (Star - 91)) | (1L << (And - 91)) | (1L << (Or - 91)) | (1L << (Tilde - 91)) | (1L << (Not - 91)))) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class NewExpressionContext extends ParserRuleContext { + public TerminalNode New() { return getToken(CPP14Parser.New, 0); } + public NewTypeIdContext newTypeId() { + return getRuleContext(NewTypeIdContext.class,0); + } + public TerminalNode Doublecolon() { return getToken(CPP14Parser.Doublecolon, 0); } + public NewPlacementContext newPlacement() { + return getRuleContext(NewPlacementContext.class,0); + } + public NewInitializerContext newInitializer() { + return getRuleContext(NewInitializerContext.class,0); + } + public TerminalNode LeftParen() { return getToken(CPP14Parser.LeftParen, 0); } + public TheTypeIdContext theTypeId() { + return getRuleContext(TheTypeIdContext.class,0); + } + public TerminalNode RightParen() { return getToken(CPP14Parser.RightParen, 0); } + public NewExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_newExpression; } + } + + public final NewExpressionContext newExpression() throws RecognitionException { + NewExpressionContext _localctx = new NewExpressionContext(_ctx, getState()); + enterRule(_localctx, 42, RULE_newExpression); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(627); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Doublecolon) { + { + setState(626); + match(Doublecolon); + } + } + + setState(629); + match(New); + setState(631); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,44,_ctx) ) { + case 1: + { + setState(630); + newPlacement(); + } + break; + } + setState(638); + _errHandler.sync(this); + switch (_input.LA(1)) { + case Auto: + case Bool: + case Char: + case Char16: + case Char32: + case Class: + case Const: + case Decltype: + case Double: + case Enum: + case Float: + case Int: + case Long: + case Short: + case Signed: + case Struct: + case Typename_: + case Union: + case Unsigned: + case Void: + case Volatile: + case Wchar: + case Doublecolon: + case Identifier: + { + setState(633); + newTypeId(); + } + break; + case LeftParen: + { + { + setState(634); + match(LeftParen); + setState(635); + theTypeId(); + setState(636); + match(RightParen); + } + } + break; + default: + throw new NoViableAltException(this); + } + setState(641); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==LeftParen || _la==LeftBrace) { + { + setState(640); + newInitializer(); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class NewPlacementContext extends ParserRuleContext { + public TerminalNode LeftParen() { return getToken(CPP14Parser.LeftParen, 0); } + public ExpressionListContext expressionList() { + return getRuleContext(ExpressionListContext.class,0); + } + public TerminalNode RightParen() { return getToken(CPP14Parser.RightParen, 0); } + public NewPlacementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_newPlacement; } + } + + public final NewPlacementContext newPlacement() throws RecognitionException { + NewPlacementContext _localctx = new NewPlacementContext(_ctx, getState()); + enterRule(_localctx, 44, RULE_newPlacement); + try { + enterOuterAlt(_localctx, 1); + { + setState(643); + match(LeftParen); + setState(644); + expressionList(); + setState(645); + match(RightParen); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class NewTypeIdContext extends ParserRuleContext { + public TypeSpecifierSeqContext typeSpecifierSeq() { + return getRuleContext(TypeSpecifierSeqContext.class,0); + } + public NewDeclaratorContext newDeclarator() { + return getRuleContext(NewDeclaratorContext.class,0); + } + public NewTypeIdContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_newTypeId; } + } + + public final NewTypeIdContext newTypeId() throws RecognitionException { + NewTypeIdContext _localctx = new NewTypeIdContext(_ctx, getState()); + enterRule(_localctx, 46, RULE_newTypeId); + try { + enterOuterAlt(_localctx, 1); + { + setState(647); + typeSpecifierSeq(); + setState(649); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,47,_ctx) ) { + case 1: + { + setState(648); + newDeclarator(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class NewDeclaratorContext extends ParserRuleContext { + public PointerOperatorContext pointerOperator() { + return getRuleContext(PointerOperatorContext.class,0); + } + public NewDeclaratorContext newDeclarator() { + return getRuleContext(NewDeclaratorContext.class,0); + } + public NoPointerNewDeclaratorContext noPointerNewDeclarator() { + return getRuleContext(NoPointerNewDeclaratorContext.class,0); + } + public NewDeclaratorContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_newDeclarator; } + } + + public final NewDeclaratorContext newDeclarator() throws RecognitionException { + NewDeclaratorContext _localctx = new NewDeclaratorContext(_ctx, getState()); + enterRule(_localctx, 48, RULE_newDeclarator); + try { + setState(656); + _errHandler.sync(this); + switch (_input.LA(1)) { + case Decltype: + case Star: + case And: + case AndAnd: + case Doublecolon: + case Identifier: + enterOuterAlt(_localctx, 1); + { + setState(651); + pointerOperator(); + setState(653); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,48,_ctx) ) { + case 1: + { + setState(652); + newDeclarator(); + } + break; + } + } + break; + case LeftBracket: + enterOuterAlt(_localctx, 2); + { + setState(655); + noPointerNewDeclarator(0); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class NoPointerNewDeclaratorContext extends ParserRuleContext { + public TerminalNode LeftBracket() { return getToken(CPP14Parser.LeftBracket, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode RightBracket() { return getToken(CPP14Parser.RightBracket, 0); } + public AttributeSpecifierSeqContext attributeSpecifierSeq() { + return getRuleContext(AttributeSpecifierSeqContext.class,0); + } + public NoPointerNewDeclaratorContext noPointerNewDeclarator() { + return getRuleContext(NoPointerNewDeclaratorContext.class,0); + } + public ConstantExpressionContext constantExpression() { + return getRuleContext(ConstantExpressionContext.class,0); + } + public NoPointerNewDeclaratorContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_noPointerNewDeclarator; } + } + + public final NoPointerNewDeclaratorContext noPointerNewDeclarator() throws RecognitionException { + return noPointerNewDeclarator(0); + } + + private NoPointerNewDeclaratorContext noPointerNewDeclarator(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + NoPointerNewDeclaratorContext _localctx = new NoPointerNewDeclaratorContext(_ctx, _parentState); + NoPointerNewDeclaratorContext _prevctx = _localctx; + int _startState = 50; + enterRecursionRule(_localctx, 50, RULE_noPointerNewDeclarator, _p); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + { + setState(659); + match(LeftBracket); + setState(660); + expression(); + setState(661); + match(RightBracket); + setState(663); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,50,_ctx) ) { + case 1: + { + setState(662); + attributeSpecifierSeq(); + } + break; + } + } + _ctx.stop = _input.LT(-1); + setState(674); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,52,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + { + _localctx = new NoPointerNewDeclaratorContext(_parentctx, _parentState); + pushNewRecursionContext(_localctx, _startState, RULE_noPointerNewDeclarator); + setState(665); + if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); + setState(666); + match(LeftBracket); + setState(667); + constantExpression(); + setState(668); + match(RightBracket); + setState(670); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,51,_ctx) ) { + case 1: + { + setState(669); + attributeSpecifierSeq(); + } + break; + } + } + } + } + setState(676); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,52,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + public static class NewInitializerContext extends ParserRuleContext { + public TerminalNode LeftParen() { return getToken(CPP14Parser.LeftParen, 0); } + public TerminalNode RightParen() { return getToken(CPP14Parser.RightParen, 0); } + public ExpressionListContext expressionList() { + return getRuleContext(ExpressionListContext.class,0); + } + public BracedInitListContext bracedInitList() { + return getRuleContext(BracedInitListContext.class,0); + } + public NewInitializerContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_newInitializer; } + } + + public final NewInitializerContext newInitializer() throws RecognitionException { + NewInitializerContext _localctx = new NewInitializerContext(_ctx, getState()); + enterRule(_localctx, 52, RULE_newInitializer); + int _la; + try { + setState(683); + _errHandler.sync(this); + switch (_input.LA(1)) { + case LeftParen: + enterOuterAlt(_localctx, 1); + { + setState(677); + match(LeftParen); + setState(679); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << IntegerLiteral) | (1L << CharacterLiteral) | (1L << FloatingLiteral) | (1L << StringLiteral) | (1L << BooleanLiteral) | (1L << PointerLiteral) | (1L << UserDefinedLiteral) | (1L << Alignof) | (1L << Auto) | (1L << Bool) | (1L << Char) | (1L << Char16) | (1L << Char32) | (1L << Const_cast) | (1L << Decltype) | (1L << Delete) | (1L << Double) | (1L << Dynamic_cast) | (1L << Float) | (1L << Int) | (1L << Long) | (1L << New) | (1L << Noexcept) | (1L << Operator) | (1L << Reinterpret_cast) | (1L << Short) | (1L << Signed) | (1L << Sizeof))) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & ((1L << (Static_cast - 65)) | (1L << (This - 65)) | (1L << (Throw - 65)) | (1L << (Typeid_ - 65)) | (1L << (Typename_ - 65)) | (1L << (Unsigned - 65)) | (1L << (Void - 65)) | (1L << (Wchar - 65)) | (1L << (LeftParen - 65)) | (1L << (LeftBracket - 65)) | (1L << (LeftBrace - 65)) | (1L << (Plus - 65)) | (1L << (Minus - 65)) | (1L << (Star - 65)) | (1L << (And - 65)) | (1L << (Or - 65)) | (1L << (Tilde - 65)) | (1L << (Not - 65)) | (1L << (PlusPlus - 65)) | (1L << (MinusMinus - 65)) | (1L << (Doublecolon - 65)))) != 0) || _la==Identifier) { + { + setState(678); + expressionList(); + } + } + + setState(681); + match(RightParen); + } + break; + case LeftBrace: + enterOuterAlt(_localctx, 2); + { + setState(682); + bracedInitList(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class DeleteExpressionContext extends ParserRuleContext { + public TerminalNode Delete() { return getToken(CPP14Parser.Delete, 0); } + public CastExpressionContext castExpression() { + return getRuleContext(CastExpressionContext.class,0); + } + public TerminalNode Doublecolon() { return getToken(CPP14Parser.Doublecolon, 0); } + public TerminalNode LeftBracket() { return getToken(CPP14Parser.LeftBracket, 0); } + public TerminalNode RightBracket() { return getToken(CPP14Parser.RightBracket, 0); } + public DeleteExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_deleteExpression; } + } + + public final DeleteExpressionContext deleteExpression() throws RecognitionException { + DeleteExpressionContext _localctx = new DeleteExpressionContext(_ctx, getState()); + enterRule(_localctx, 54, RULE_deleteExpression); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(686); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Doublecolon) { + { + setState(685); + match(Doublecolon); + } + } + + setState(688); + match(Delete); + setState(691); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,56,_ctx) ) { + case 1: + { + setState(689); + match(LeftBracket); + setState(690); + match(RightBracket); + } + break; + } + setState(693); + castExpression(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class NoExceptExpressionContext extends ParserRuleContext { + public TerminalNode Noexcept() { return getToken(CPP14Parser.Noexcept, 0); } + public TerminalNode LeftParen() { return getToken(CPP14Parser.LeftParen, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode RightParen() { return getToken(CPP14Parser.RightParen, 0); } + public NoExceptExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_noExceptExpression; } + } + + public final NoExceptExpressionContext noExceptExpression() throws RecognitionException { + NoExceptExpressionContext _localctx = new NoExceptExpressionContext(_ctx, getState()); + enterRule(_localctx, 56, RULE_noExceptExpression); + try { + enterOuterAlt(_localctx, 1); + { + setState(695); + match(Noexcept); + setState(696); + match(LeftParen); + setState(697); + expression(); + setState(698); + match(RightParen); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class CastExpressionContext extends ParserRuleContext { + public UnaryExpressionContext unaryExpression() { + return getRuleContext(UnaryExpressionContext.class,0); + } + public TerminalNode LeftParen() { return getToken(CPP14Parser.LeftParen, 0); } + public TheTypeIdContext theTypeId() { + return getRuleContext(TheTypeIdContext.class,0); + } + public TerminalNode RightParen() { return getToken(CPP14Parser.RightParen, 0); } + public CastExpressionContext castExpression() { + return getRuleContext(CastExpressionContext.class,0); + } + public CastExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_castExpression; } + } + + public final CastExpressionContext castExpression() throws RecognitionException { + CastExpressionContext _localctx = new CastExpressionContext(_ctx, getState()); + enterRule(_localctx, 58, RULE_castExpression); + try { + setState(706); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,57,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(700); + unaryExpression(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(701); + match(LeftParen); + setState(702); + theTypeId(); + setState(703); + match(RightParen); + setState(704); + castExpression(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class PointerMemberExpressionContext extends ParserRuleContext { + public List castExpression() { + return getRuleContexts(CastExpressionContext.class); + } + public CastExpressionContext castExpression(int i) { + return getRuleContext(CastExpressionContext.class,i); + } + public List DotStar() { return getTokens(CPP14Parser.DotStar); } + public TerminalNode DotStar(int i) { + return getToken(CPP14Parser.DotStar, i); + } + public List ArrowStar() { return getTokens(CPP14Parser.ArrowStar); } + public TerminalNode ArrowStar(int i) { + return getToken(CPP14Parser.ArrowStar, i); + } + public PointerMemberExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_pointerMemberExpression; } + } + + public final PointerMemberExpressionContext pointerMemberExpression() throws RecognitionException { + PointerMemberExpressionContext _localctx = new PointerMemberExpressionContext(_ctx, getState()); + enterRule(_localctx, 60, RULE_pointerMemberExpression); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(708); + castExpression(); + setState(713); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==ArrowStar || _la==DotStar) { + { + { + setState(709); + _la = _input.LA(1); + if ( !(_la==ArrowStar || _la==DotStar) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(710); + castExpression(); + } + } + setState(715); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class MultiplicativeExpressionContext extends ParserRuleContext { + public List pointerMemberExpression() { + return getRuleContexts(PointerMemberExpressionContext.class); + } + public PointerMemberExpressionContext pointerMemberExpression(int i) { + return getRuleContext(PointerMemberExpressionContext.class,i); + } + public List Star() { return getTokens(CPP14Parser.Star); } + public TerminalNode Star(int i) { + return getToken(CPP14Parser.Star, i); + } + public List Div() { return getTokens(CPP14Parser.Div); } + public TerminalNode Div(int i) { + return getToken(CPP14Parser.Div, i); + } + public List Mod() { return getTokens(CPP14Parser.Mod); } + public TerminalNode Mod(int i) { + return getToken(CPP14Parser.Mod, i); + } + public MultiplicativeExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_multiplicativeExpression; } + } + + public final MultiplicativeExpressionContext multiplicativeExpression() throws RecognitionException { + MultiplicativeExpressionContext _localctx = new MultiplicativeExpressionContext(_ctx, getState()); + enterRule(_localctx, 62, RULE_multiplicativeExpression); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(716); + pointerMemberExpression(); + setState(721); + _errHandler.sync(this); + _la = _input.LA(1); + while (((((_la - 93)) & ~0x3f) == 0 && ((1L << (_la - 93)) & ((1L << (Star - 93)) | (1L << (Div - 93)) | (1L << (Mod - 93)))) != 0)) { + { + { + setState(717); + _la = _input.LA(1); + if ( !(((((_la - 93)) & ~0x3f) == 0 && ((1L << (_la - 93)) & ((1L << (Star - 93)) | (1L << (Div - 93)) | (1L << (Mod - 93)))) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(718); + pointerMemberExpression(); + } + } + setState(723); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class AdditiveExpressionContext extends ParserRuleContext { + public List multiplicativeExpression() { + return getRuleContexts(MultiplicativeExpressionContext.class); + } + public MultiplicativeExpressionContext multiplicativeExpression(int i) { + return getRuleContext(MultiplicativeExpressionContext.class,i); + } + public List Plus() { return getTokens(CPP14Parser.Plus); } + public TerminalNode Plus(int i) { + return getToken(CPP14Parser.Plus, i); + } + public List Minus() { return getTokens(CPP14Parser.Minus); } + public TerminalNode Minus(int i) { + return getToken(CPP14Parser.Minus, i); + } + public AdditiveExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_additiveExpression; } + } + + public final AdditiveExpressionContext additiveExpression() throws RecognitionException { + AdditiveExpressionContext _localctx = new AdditiveExpressionContext(_ctx, getState()); + enterRule(_localctx, 64, RULE_additiveExpression); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(724); + multiplicativeExpression(); + setState(729); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==Plus || _la==Minus) { + { + { + setState(725); + _la = _input.LA(1); + if ( !(_la==Plus || _la==Minus) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(726); + multiplicativeExpression(); + } + } + setState(731); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ShiftExpressionContext extends ParserRuleContext { + public List additiveExpression() { + return getRuleContexts(AdditiveExpressionContext.class); + } + public AdditiveExpressionContext additiveExpression(int i) { + return getRuleContext(AdditiveExpressionContext.class,i); + } + public List shiftOperator() { + return getRuleContexts(ShiftOperatorContext.class); + } + public ShiftOperatorContext shiftOperator(int i) { + return getRuleContext(ShiftOperatorContext.class,i); + } + public ShiftExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_shiftExpression; } + } + + public final ShiftExpressionContext shiftExpression() throws RecognitionException { + ShiftExpressionContext _localctx = new ShiftExpressionContext(_ctx, getState()); + enterRule(_localctx, 66, RULE_shiftExpression); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(732); + additiveExpression(); + setState(738); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,61,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(733); + shiftOperator(); + setState(734); + additiveExpression(); + } + } + } + setState(740); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,61,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ShiftOperatorContext extends ParserRuleContext { + public List Greater() { return getTokens(CPP14Parser.Greater); } + public TerminalNode Greater(int i) { + return getToken(CPP14Parser.Greater, i); + } + public List Less() { return getTokens(CPP14Parser.Less); } + public TerminalNode Less(int i) { + return getToken(CPP14Parser.Less, i); + } + public ShiftOperatorContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_shiftOperator; } + } + + public final ShiftOperatorContext shiftOperator() throws RecognitionException { + ShiftOperatorContext _localctx = new ShiftOperatorContext(_ctx, getState()); + enterRule(_localctx, 68, RULE_shiftOperator); + try { + setState(745); + _errHandler.sync(this); + switch (_input.LA(1)) { + case Greater: + enterOuterAlt(_localctx, 1); + { + setState(741); + match(Greater); + setState(742); + match(Greater); + } + break; + case Less: + enterOuterAlt(_localctx, 2); + { + setState(743); + match(Less); + setState(744); + match(Less); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class RelationalExpressionContext extends ParserRuleContext { + public List shiftExpression() { + return getRuleContexts(ShiftExpressionContext.class); + } + public ShiftExpressionContext shiftExpression(int i) { + return getRuleContext(ShiftExpressionContext.class,i); + } + public List Less() { return getTokens(CPP14Parser.Less); } + public TerminalNode Less(int i) { + return getToken(CPP14Parser.Less, i); + } + public List Greater() { return getTokens(CPP14Parser.Greater); } + public TerminalNode Greater(int i) { + return getToken(CPP14Parser.Greater, i); + } + public List LessEqual() { return getTokens(CPP14Parser.LessEqual); } + public TerminalNode LessEqual(int i) { + return getToken(CPP14Parser.LessEqual, i); + } + public List GreaterEqual() { return getTokens(CPP14Parser.GreaterEqual); } + public TerminalNode GreaterEqual(int i) { + return getToken(CPP14Parser.GreaterEqual, i); + } + public RelationalExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_relationalExpression; } + } + + public final RelationalExpressionContext relationalExpression() throws RecognitionException { + RelationalExpressionContext _localctx = new RelationalExpressionContext(_ctx, getState()); + enterRule(_localctx, 70, RULE_relationalExpression); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(747); + shiftExpression(); + setState(752); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,63,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(748); + _la = _input.LA(1); + if ( !(((((_la - 102)) & ~0x3f) == 0 && ((1L << (_la - 102)) & ((1L << (Less - 102)) | (1L << (Greater - 102)) | (1L << (LessEqual - 102)) | (1L << (GreaterEqual - 102)))) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(749); + shiftExpression(); + } + } + } + setState(754); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,63,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class EqualityExpressionContext extends ParserRuleContext { + public List relationalExpression() { + return getRuleContexts(RelationalExpressionContext.class); + } + public RelationalExpressionContext relationalExpression(int i) { + return getRuleContext(RelationalExpressionContext.class,i); + } + public List Equal() { return getTokens(CPP14Parser.Equal); } + public TerminalNode Equal(int i) { + return getToken(CPP14Parser.Equal, i); + } + public List NotEqual() { return getTokens(CPP14Parser.NotEqual); } + public TerminalNode NotEqual(int i) { + return getToken(CPP14Parser.NotEqual, i); + } + public EqualityExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_equalityExpression; } + } + + public final EqualityExpressionContext equalityExpression() throws RecognitionException { + EqualityExpressionContext _localctx = new EqualityExpressionContext(_ctx, getState()); + enterRule(_localctx, 72, RULE_equalityExpression); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(755); + relationalExpression(); + setState(760); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==Equal || _la==NotEqual) { + { + { + setState(756); + _la = _input.LA(1); + if ( !(_la==Equal || _la==NotEqual) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(757); + relationalExpression(); + } + } + setState(762); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class AndExpressionContext extends ParserRuleContext { + public List equalityExpression() { + return getRuleContexts(EqualityExpressionContext.class); + } + public EqualityExpressionContext equalityExpression(int i) { + return getRuleContext(EqualityExpressionContext.class,i); + } + public List And() { return getTokens(CPP14Parser.And); } + public TerminalNode And(int i) { + return getToken(CPP14Parser.And, i); + } + public AndExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_andExpression; } + } + + public final AndExpressionContext andExpression() throws RecognitionException { + AndExpressionContext _localctx = new AndExpressionContext(_ctx, getState()); + enterRule(_localctx, 74, RULE_andExpression); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(763); + equalityExpression(); + setState(768); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==And) { + { + { + setState(764); + match(And); + setState(765); + equalityExpression(); + } + } + setState(770); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ExclusiveOrExpressionContext extends ParserRuleContext { + public List andExpression() { + return getRuleContexts(AndExpressionContext.class); + } + public AndExpressionContext andExpression(int i) { + return getRuleContext(AndExpressionContext.class,i); + } + public List Caret() { return getTokens(CPP14Parser.Caret); } + public TerminalNode Caret(int i) { + return getToken(CPP14Parser.Caret, i); + } + public ExclusiveOrExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_exclusiveOrExpression; } + } + + public final ExclusiveOrExpressionContext exclusiveOrExpression() throws RecognitionException { + ExclusiveOrExpressionContext _localctx = new ExclusiveOrExpressionContext(_ctx, getState()); + enterRule(_localctx, 76, RULE_exclusiveOrExpression); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(771); + andExpression(); + setState(776); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==Caret) { + { + { + setState(772); + match(Caret); + setState(773); + andExpression(); + } + } + setState(778); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class InclusiveOrExpressionContext extends ParserRuleContext { + public List exclusiveOrExpression() { + return getRuleContexts(ExclusiveOrExpressionContext.class); + } + public ExclusiveOrExpressionContext exclusiveOrExpression(int i) { + return getRuleContext(ExclusiveOrExpressionContext.class,i); + } + public List Or() { return getTokens(CPP14Parser.Or); } + public TerminalNode Or(int i) { + return getToken(CPP14Parser.Or, i); + } + public InclusiveOrExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_inclusiveOrExpression; } + } + + public final InclusiveOrExpressionContext inclusiveOrExpression() throws RecognitionException { + InclusiveOrExpressionContext _localctx = new InclusiveOrExpressionContext(_ctx, getState()); + enterRule(_localctx, 78, RULE_inclusiveOrExpression); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(779); + exclusiveOrExpression(); + setState(784); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==Or) { + { + { + setState(780); + match(Or); + setState(781); + exclusiveOrExpression(); + } + } + setState(786); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class LogicalAndExpressionContext extends ParserRuleContext { + public List inclusiveOrExpression() { + return getRuleContexts(InclusiveOrExpressionContext.class); + } + public InclusiveOrExpressionContext inclusiveOrExpression(int i) { + return getRuleContext(InclusiveOrExpressionContext.class,i); + } + public List AndAnd() { return getTokens(CPP14Parser.AndAnd); } + public TerminalNode AndAnd(int i) { + return getToken(CPP14Parser.AndAnd, i); + } + public LogicalAndExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_logicalAndExpression; } + } + + public final LogicalAndExpressionContext logicalAndExpression() throws RecognitionException { + LogicalAndExpressionContext _localctx = new LogicalAndExpressionContext(_ctx, getState()); + enterRule(_localctx, 80, RULE_logicalAndExpression); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(787); + inclusiveOrExpression(); + setState(792); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==AndAnd) { + { + { + setState(788); + match(AndAnd); + setState(789); + inclusiveOrExpression(); + } + } + setState(794); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class LogicalOrExpressionContext extends ParserRuleContext { + public List logicalAndExpression() { + return getRuleContexts(LogicalAndExpressionContext.class); + } + public LogicalAndExpressionContext logicalAndExpression(int i) { + return getRuleContext(LogicalAndExpressionContext.class,i); + } + public List OrOr() { return getTokens(CPP14Parser.OrOr); } + public TerminalNode OrOr(int i) { + return getToken(CPP14Parser.OrOr, i); + } + public LogicalOrExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_logicalOrExpression; } + } + + public final LogicalOrExpressionContext logicalOrExpression() throws RecognitionException { + LogicalOrExpressionContext _localctx = new LogicalOrExpressionContext(_ctx, getState()); + enterRule(_localctx, 82, RULE_logicalOrExpression); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(795); + logicalAndExpression(); + setState(800); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==OrOr) { + { + { + setState(796); + match(OrOr); + setState(797); + logicalAndExpression(); + } + } + setState(802); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ConditionalExpressionContext extends ParserRuleContext { + public LogicalOrExpressionContext logicalOrExpression() { + return getRuleContext(LogicalOrExpressionContext.class,0); + } + public TerminalNode Question() { return getToken(CPP14Parser.Question, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode Colon() { return getToken(CPP14Parser.Colon, 0); } + public AssignmentExpressionContext assignmentExpression() { + return getRuleContext(AssignmentExpressionContext.class,0); + } + public ConditionalExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_conditionalExpression; } + } + + public final ConditionalExpressionContext conditionalExpression() throws RecognitionException { + ConditionalExpressionContext _localctx = new ConditionalExpressionContext(_ctx, getState()); + enterRule(_localctx, 84, RULE_conditionalExpression); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(803); + logicalOrExpression(); + setState(809); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Question) { + { + setState(804); + match(Question); + setState(805); + expression(); + setState(806); + match(Colon); + setState(807); + assignmentExpression(); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class AssignmentExpressionContext extends ParserRuleContext { + public ConditionalExpressionContext conditionalExpression() { + return getRuleContext(ConditionalExpressionContext.class,0); + } + public LogicalOrExpressionContext logicalOrExpression() { + return getRuleContext(LogicalOrExpressionContext.class,0); + } + public AssignmentOperatorContext assignmentOperator() { + return getRuleContext(AssignmentOperatorContext.class,0); + } + public InitializerClauseContext initializerClause() { + return getRuleContext(InitializerClauseContext.class,0); + } + public ThrowExpressionContext throwExpression() { + return getRuleContext(ThrowExpressionContext.class,0); + } + public AssignmentExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_assignmentExpression; } + } + + public final AssignmentExpressionContext assignmentExpression() throws RecognitionException { + AssignmentExpressionContext _localctx = new AssignmentExpressionContext(_ctx, getState()); + enterRule(_localctx, 86, RULE_assignmentExpression); + try { + setState(817); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,71,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(811); + conditionalExpression(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(812); + logicalOrExpression(); + setState(813); + assignmentOperator(); + setState(814); + initializerClause(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(816); + throwExpression(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class AssignmentOperatorContext extends ParserRuleContext { + public TerminalNode Assign() { return getToken(CPP14Parser.Assign, 0); } + public TerminalNode StarAssign() { return getToken(CPP14Parser.StarAssign, 0); } + public TerminalNode DivAssign() { return getToken(CPP14Parser.DivAssign, 0); } + public TerminalNode ModAssign() { return getToken(CPP14Parser.ModAssign, 0); } + public TerminalNode PlusAssign() { return getToken(CPP14Parser.PlusAssign, 0); } + public TerminalNode MinusAssign() { return getToken(CPP14Parser.MinusAssign, 0); } + public TerminalNode RightShiftAssign() { return getToken(CPP14Parser.RightShiftAssign, 0); } + public TerminalNode LeftShiftAssign() { return getToken(CPP14Parser.LeftShiftAssign, 0); } + public TerminalNode AndAssign() { return getToken(CPP14Parser.AndAssign, 0); } + public TerminalNode XorAssign() { return getToken(CPP14Parser.XorAssign, 0); } + public TerminalNode OrAssign() { return getToken(CPP14Parser.OrAssign, 0); } + public AssignmentOperatorContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_assignmentOperator; } + } + + public final AssignmentOperatorContext assignmentOperator() throws RecognitionException { + AssignmentOperatorContext _localctx = new AssignmentOperatorContext(_ctx, getState()); + enterRule(_localctx, 88, RULE_assignmentOperator); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(819); + _la = _input.LA(1); + if ( !(((((_la - 101)) & ~0x3f) == 0 && ((1L << (_la - 101)) & ((1L << (Assign - 101)) | (1L << (PlusAssign - 101)) | (1L << (MinusAssign - 101)) | (1L << (StarAssign - 101)) | (1L << (DivAssign - 101)) | (1L << (ModAssign - 101)) | (1L << (XorAssign - 101)) | (1L << (AndAssign - 101)) | (1L << (OrAssign - 101)) | (1L << (LeftShiftAssign - 101)) | (1L << (RightShiftAssign - 101)))) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ExpressionContext extends ParserRuleContext { + public List assignmentExpression() { + return getRuleContexts(AssignmentExpressionContext.class); + } + public AssignmentExpressionContext assignmentExpression(int i) { + return getRuleContext(AssignmentExpressionContext.class,i); + } + public List Comma() { return getTokens(CPP14Parser.Comma); } + public TerminalNode Comma(int i) { + return getToken(CPP14Parser.Comma, i); + } + public ExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_expression; } + } + + public final ExpressionContext expression() throws RecognitionException { + ExpressionContext _localctx = new ExpressionContext(_ctx, getState()); + enterRule(_localctx, 90, RULE_expression); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(821); + assignmentExpression(); + setState(826); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==Comma) { + { + { + setState(822); + match(Comma); + setState(823); + assignmentExpression(); + } + } + setState(828); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ConstantExpressionContext extends ParserRuleContext { + public ConditionalExpressionContext conditionalExpression() { + return getRuleContext(ConditionalExpressionContext.class,0); + } + public ConstantExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_constantExpression; } + } + + public final ConstantExpressionContext constantExpression() throws RecognitionException { + ConstantExpressionContext _localctx = new ConstantExpressionContext(_ctx, getState()); + enterRule(_localctx, 92, RULE_constantExpression); + try { + enterOuterAlt(_localctx, 1); + { + setState(829); + conditionalExpression(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class StatementContext extends ParserRuleContext { + public LabeledStatementContext labeledStatement() { + return getRuleContext(LabeledStatementContext.class,0); + } + public ExpressionStatementContext expressionStatement() { + return getRuleContext(ExpressionStatementContext.class,0); + } + public CompoundStatementContext compoundStatement() { + return getRuleContext(CompoundStatementContext.class,0); + } + public SelectionStatementContext selectionStatement() { + return getRuleContext(SelectionStatementContext.class,0); + } + public IterationStatementContext iterationStatement() { + return getRuleContext(IterationStatementContext.class,0); + } + public JumpStatementContext jumpStatement() { + return getRuleContext(JumpStatementContext.class,0); + } + public TryBlockContext tryBlock() { + return getRuleContext(TryBlockContext.class,0); + } + public AttributeSpecifierSeqContext attributeSpecifierSeq() { + return getRuleContext(AttributeSpecifierSeqContext.class,0); + } + public DeclarationStatementContext declarationStatement() { + return getRuleContext(DeclarationStatementContext.class,0); + } + public StatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_statement; } + } + + public final StatementContext statement() throws RecognitionException { + StatementContext _localctx = new StatementContext(_ctx, getState()); + enterRule(_localctx, 94, RULE_statement); + try { + setState(844); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,75,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(831); + labeledStatement(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(833); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,73,_ctx) ) { + case 1: + { + setState(832); + attributeSpecifierSeq(); + } + break; + } + setState(841); + _errHandler.sync(this); + switch (_input.LA(1)) { + case IntegerLiteral: + case CharacterLiteral: + case FloatingLiteral: + case StringLiteral: + case BooleanLiteral: + case PointerLiteral: + case UserDefinedLiteral: + case Alignof: + case Auto: + case Bool: + case Char: + case Char16: + case Char32: + case Const_cast: + case Decltype: + case Delete: + case Double: + case Dynamic_cast: + case Float: + case Int: + case Long: + case New: + case Noexcept: + case Operator: + case Reinterpret_cast: + case Short: + case Signed: + case Sizeof: + case Static_cast: + case This: + case Throw: + case Typeid_: + case Typename_: + case Unsigned: + case Void: + case Wchar: + case LeftParen: + case LeftBracket: + case Plus: + case Minus: + case Star: + case And: + case Or: + case Tilde: + case Not: + case PlusPlus: + case MinusMinus: + case Doublecolon: + case Semi: + case Identifier: + { + setState(835); + expressionStatement(); + } + break; + case LeftBrace: + { + setState(836); + compoundStatement(); + } + break; + case If: + case Switch: + { + setState(837); + selectionStatement(); + } + break; + case Do: + case For: + case While: + { + setState(838); + iterationStatement(); + } + break; + case Break: + case Continue: + case Goto: + case Return: + { + setState(839); + jumpStatement(); + } + break; + case Try: + { + setState(840); + tryBlock(); + } + break; + default: + throw new NoViableAltException(this); + } + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(843); + declarationStatement(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class LabeledStatementContext extends ParserRuleContext { + public TerminalNode Colon() { return getToken(CPP14Parser.Colon, 0); } + public StatementContext statement() { + return getRuleContext(StatementContext.class,0); + } + public TerminalNode Identifier() { return getToken(CPP14Parser.Identifier, 0); } + public TerminalNode Case() { return getToken(CPP14Parser.Case, 0); } + public ConstantExpressionContext constantExpression() { + return getRuleContext(ConstantExpressionContext.class,0); + } + public TerminalNode Default() { return getToken(CPP14Parser.Default, 0); } + public AttributeSpecifierSeqContext attributeSpecifierSeq() { + return getRuleContext(AttributeSpecifierSeqContext.class,0); + } + public LabeledStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_labeledStatement; } + } + + public final LabeledStatementContext labeledStatement() throws RecognitionException { + LabeledStatementContext _localctx = new LabeledStatementContext(_ctx, getState()); + enterRule(_localctx, 96, RULE_labeledStatement); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(847); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Alignas || _la==LeftBracket) { + { + setState(846); + attributeSpecifierSeq(); + } + } + + setState(853); + _errHandler.sync(this); + switch (_input.LA(1)) { + case Identifier: + { + setState(849); + match(Identifier); + } + break; + case Case: + { + setState(850); + match(Case); + setState(851); + constantExpression(); + } + break; + case Default: + { + setState(852); + match(Default); + } + break; + default: + throw new NoViableAltException(this); + } + setState(855); + match(Colon); + setState(856); + statement(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ExpressionStatementContext extends ParserRuleContext { + public TerminalNode Semi() { return getToken(CPP14Parser.Semi, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public ExpressionStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_expressionStatement; } + } + + public final ExpressionStatementContext expressionStatement() throws RecognitionException { + ExpressionStatementContext _localctx = new ExpressionStatementContext(_ctx, getState()); + enterRule(_localctx, 98, RULE_expressionStatement); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(859); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << IntegerLiteral) | (1L << CharacterLiteral) | (1L << FloatingLiteral) | (1L << StringLiteral) | (1L << BooleanLiteral) | (1L << PointerLiteral) | (1L << UserDefinedLiteral) | (1L << Alignof) | (1L << Auto) | (1L << Bool) | (1L << Char) | (1L << Char16) | (1L << Char32) | (1L << Const_cast) | (1L << Decltype) | (1L << Delete) | (1L << Double) | (1L << Dynamic_cast) | (1L << Float) | (1L << Int) | (1L << Long) | (1L << New) | (1L << Noexcept) | (1L << Operator) | (1L << Reinterpret_cast) | (1L << Short) | (1L << Signed) | (1L << Sizeof))) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & ((1L << (Static_cast - 65)) | (1L << (This - 65)) | (1L << (Throw - 65)) | (1L << (Typeid_ - 65)) | (1L << (Typename_ - 65)) | (1L << (Unsigned - 65)) | (1L << (Void - 65)) | (1L << (Wchar - 65)) | (1L << (LeftParen - 65)) | (1L << (LeftBracket - 65)) | (1L << (Plus - 65)) | (1L << (Minus - 65)) | (1L << (Star - 65)) | (1L << (And - 65)) | (1L << (Or - 65)) | (1L << (Tilde - 65)) | (1L << (Not - 65)) | (1L << (PlusPlus - 65)) | (1L << (MinusMinus - 65)) | (1L << (Doublecolon - 65)))) != 0) || _la==Identifier) { + { + setState(858); + expression(); + } + } + + setState(861); + match(Semi); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class CompoundStatementContext extends ParserRuleContext { + public TerminalNode LeftBrace() { return getToken(CPP14Parser.LeftBrace, 0); } + public TerminalNode RightBrace() { return getToken(CPP14Parser.RightBrace, 0); } + public StatementSeqContext statementSeq() { + return getRuleContext(StatementSeqContext.class,0); + } + public CompoundStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_compoundStatement; } + } + + public final CompoundStatementContext compoundStatement() throws RecognitionException { + CompoundStatementContext _localctx = new CompoundStatementContext(_ctx, getState()); + enterRule(_localctx, 100, RULE_compoundStatement); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(863); + match(LeftBrace); + setState(865); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << IntegerLiteral) | (1L << CharacterLiteral) | (1L << FloatingLiteral) | (1L << StringLiteral) | (1L << BooleanLiteral) | (1L << PointerLiteral) | (1L << UserDefinedLiteral) | (1L << Alignas) | (1L << Alignof) | (1L << Asm) | (1L << Auto) | (1L << Bool) | (1L << Break) | (1L << Case) | (1L << Char) | (1L << Char16) | (1L << Char32) | (1L << Class) | (1L << Const) | (1L << Constexpr) | (1L << Const_cast) | (1L << Continue) | (1L << Decltype) | (1L << Default) | (1L << Delete) | (1L << Do) | (1L << Double) | (1L << Dynamic_cast) | (1L << Enum) | (1L << Explicit) | (1L << Extern) | (1L << Float) | (1L << For) | (1L << Friend) | (1L << Goto) | (1L << If) | (1L << Inline) | (1L << Int) | (1L << Long) | (1L << Mutable) | (1L << Namespace) | (1L << New) | (1L << Noexcept) | (1L << Operator) | (1L << Register) | (1L << Reinterpret_cast) | (1L << Return) | (1L << Short) | (1L << Signed) | (1L << Sizeof) | (1L << Static))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (Static_assert - 64)) | (1L << (Static_cast - 64)) | (1L << (Struct - 64)) | (1L << (Switch - 64)) | (1L << (This - 64)) | (1L << (Thread_local - 64)) | (1L << (Throw - 64)) | (1L << (Try - 64)) | (1L << (Typedef - 64)) | (1L << (Typeid_ - 64)) | (1L << (Typename_ - 64)) | (1L << (Union - 64)) | (1L << (Unsigned - 64)) | (1L << (Using - 64)) | (1L << (Virtual - 64)) | (1L << (Void - 64)) | (1L << (Volatile - 64)) | (1L << (Wchar - 64)) | (1L << (While - 64)) | (1L << (LeftParen - 64)) | (1L << (LeftBracket - 64)) | (1L << (LeftBrace - 64)) | (1L << (Plus - 64)) | (1L << (Minus - 64)) | (1L << (Star - 64)) | (1L << (And - 64)) | (1L << (Or - 64)) | (1L << (Tilde - 64)) | (1L << (Not - 64)) | (1L << (AndAnd - 64)) | (1L << (PlusPlus - 64)) | (1L << (MinusMinus - 64)) | (1L << (Doublecolon - 64)))) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & ((1L << (Semi - 128)) | (1L << (Ellipsis - 128)) | (1L << (Identifier - 128)))) != 0)) { + { + setState(864); + statementSeq(); + } + } + + setState(867); + match(RightBrace); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class StatementSeqContext extends ParserRuleContext { + public List statement() { + return getRuleContexts(StatementContext.class); + } + public StatementContext statement(int i) { + return getRuleContext(StatementContext.class,i); + } + public StatementSeqContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_statementSeq; } + } + + public final StatementSeqContext statementSeq() throws RecognitionException { + StatementSeqContext _localctx = new StatementSeqContext(_ctx, getState()); + enterRule(_localctx, 102, RULE_statementSeq); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(870); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + { + setState(869); + statement(); + } + } + setState(872); + _errHandler.sync(this); + _la = _input.LA(1); + } while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << IntegerLiteral) | (1L << CharacterLiteral) | (1L << FloatingLiteral) | (1L << StringLiteral) | (1L << BooleanLiteral) | (1L << PointerLiteral) | (1L << UserDefinedLiteral) | (1L << Alignas) | (1L << Alignof) | (1L << Asm) | (1L << Auto) | (1L << Bool) | (1L << Break) | (1L << Case) | (1L << Char) | (1L << Char16) | (1L << Char32) | (1L << Class) | (1L << Const) | (1L << Constexpr) | (1L << Const_cast) | (1L << Continue) | (1L << Decltype) | (1L << Default) | (1L << Delete) | (1L << Do) | (1L << Double) | (1L << Dynamic_cast) | (1L << Enum) | (1L << Explicit) | (1L << Extern) | (1L << Float) | (1L << For) | (1L << Friend) | (1L << Goto) | (1L << If) | (1L << Inline) | (1L << Int) | (1L << Long) | (1L << Mutable) | (1L << Namespace) | (1L << New) | (1L << Noexcept) | (1L << Operator) | (1L << Register) | (1L << Reinterpret_cast) | (1L << Return) | (1L << Short) | (1L << Signed) | (1L << Sizeof) | (1L << Static))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (Static_assert - 64)) | (1L << (Static_cast - 64)) | (1L << (Struct - 64)) | (1L << (Switch - 64)) | (1L << (This - 64)) | (1L << (Thread_local - 64)) | (1L << (Throw - 64)) | (1L << (Try - 64)) | (1L << (Typedef - 64)) | (1L << (Typeid_ - 64)) | (1L << (Typename_ - 64)) | (1L << (Union - 64)) | (1L << (Unsigned - 64)) | (1L << (Using - 64)) | (1L << (Virtual - 64)) | (1L << (Void - 64)) | (1L << (Volatile - 64)) | (1L << (Wchar - 64)) | (1L << (While - 64)) | (1L << (LeftParen - 64)) | (1L << (LeftBracket - 64)) | (1L << (LeftBrace - 64)) | (1L << (Plus - 64)) | (1L << (Minus - 64)) | (1L << (Star - 64)) | (1L << (And - 64)) | (1L << (Or - 64)) | (1L << (Tilde - 64)) | (1L << (Not - 64)) | (1L << (AndAnd - 64)) | (1L << (PlusPlus - 64)) | (1L << (MinusMinus - 64)) | (1L << (Doublecolon - 64)))) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & ((1L << (Semi - 128)) | (1L << (Ellipsis - 128)) | (1L << (Identifier - 128)))) != 0) ); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class SelectionStatementContext extends ParserRuleContext { + public TerminalNode If() { return getToken(CPP14Parser.If, 0); } + public TerminalNode LeftParen() { return getToken(CPP14Parser.LeftParen, 0); } + public ConditionContext condition() { + return getRuleContext(ConditionContext.class,0); + } + public TerminalNode RightParen() { return getToken(CPP14Parser.RightParen, 0); } + public List statement() { + return getRuleContexts(StatementContext.class); + } + public StatementContext statement(int i) { + return getRuleContext(StatementContext.class,i); + } + public TerminalNode Else() { return getToken(CPP14Parser.Else, 0); } + public TerminalNode Switch() { return getToken(CPP14Parser.Switch, 0); } + public SelectionStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_selectionStatement; } + } + + public final SelectionStatementContext selectionStatement() throws RecognitionException { + SelectionStatementContext _localctx = new SelectionStatementContext(_ctx, getState()); + enterRule(_localctx, 104, RULE_selectionStatement); + try { + setState(889); + _errHandler.sync(this); + switch (_input.LA(1)) { + case If: + enterOuterAlt(_localctx, 1); + { + setState(874); + match(If); + setState(875); + match(LeftParen); + setState(876); + condition(); + setState(877); + match(RightParen); + setState(878); + statement(); + setState(881); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,81,_ctx) ) { + case 1: + { + setState(879); + match(Else); + setState(880); + statement(); + } + break; + } + } + break; + case Switch: + enterOuterAlt(_localctx, 2); + { + setState(883); + match(Switch); + setState(884); + match(LeftParen); + setState(885); + condition(); + setState(886); + match(RightParen); + setState(887); + statement(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ConditionContext extends ParserRuleContext { + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public DeclSpecifierSeqContext declSpecifierSeq() { + return getRuleContext(DeclSpecifierSeqContext.class,0); + } + public DeclaratorContext declarator() { + return getRuleContext(DeclaratorContext.class,0); + } + public TerminalNode Assign() { return getToken(CPP14Parser.Assign, 0); } + public InitializerClauseContext initializerClause() { + return getRuleContext(InitializerClauseContext.class,0); + } + public BracedInitListContext bracedInitList() { + return getRuleContext(BracedInitListContext.class,0); + } + public AttributeSpecifierSeqContext attributeSpecifierSeq() { + return getRuleContext(AttributeSpecifierSeqContext.class,0); + } + public ConditionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_condition; } + } + + public final ConditionContext condition() throws RecognitionException { + ConditionContext _localctx = new ConditionContext(_ctx, getState()); + enterRule(_localctx, 106, RULE_condition); + int _la; + try { + setState(902); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,85,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(891); + expression(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(893); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Alignas || _la==LeftBracket) { + { + setState(892); + attributeSpecifierSeq(); + } + } + + setState(895); + declSpecifierSeq(); + setState(896); + declarator(); + setState(900); + _errHandler.sync(this); + switch (_input.LA(1)) { + case Assign: + { + setState(897); + match(Assign); + setState(898); + initializerClause(); + } + break; + case LeftBrace: + { + setState(899); + bracedInitList(); + } + break; + default: + throw new NoViableAltException(this); + } + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class IterationStatementContext extends ParserRuleContext { + public TerminalNode While() { return getToken(CPP14Parser.While, 0); } + public TerminalNode LeftParen() { return getToken(CPP14Parser.LeftParen, 0); } + public ConditionContext condition() { + return getRuleContext(ConditionContext.class,0); + } + public TerminalNode RightParen() { return getToken(CPP14Parser.RightParen, 0); } + public StatementContext statement() { + return getRuleContext(StatementContext.class,0); + } + public TerminalNode Do() { return getToken(CPP14Parser.Do, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode Semi() { return getToken(CPP14Parser.Semi, 0); } + public TerminalNode For() { return getToken(CPP14Parser.For, 0); } + public ForInitStatementContext forInitStatement() { + return getRuleContext(ForInitStatementContext.class,0); + } + public ForRangeDeclarationContext forRangeDeclaration() { + return getRuleContext(ForRangeDeclarationContext.class,0); + } + public TerminalNode Colon() { return getToken(CPP14Parser.Colon, 0); } + public ForRangeInitializerContext forRangeInitializer() { + return getRuleContext(ForRangeInitializerContext.class,0); + } + public IterationStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_iterationStatement; } + } + + public final IterationStatementContext iterationStatement() throws RecognitionException { + IterationStatementContext _localctx = new IterationStatementContext(_ctx, getState()); + enterRule(_localctx, 108, RULE_iterationStatement); + int _la; + try { + setState(937); + _errHandler.sync(this); + switch (_input.LA(1)) { + case While: + enterOuterAlt(_localctx, 1); + { + setState(904); + match(While); + setState(905); + match(LeftParen); + setState(906); + condition(); + setState(907); + match(RightParen); + setState(908); + statement(); + } + break; + case Do: + enterOuterAlt(_localctx, 2); + { + setState(910); + match(Do); + setState(911); + statement(); + setState(912); + match(While); + setState(913); + match(LeftParen); + setState(914); + expression(); + setState(915); + match(RightParen); + setState(916); + match(Semi); + } + break; + case For: + enterOuterAlt(_localctx, 3); + { + setState(918); + match(For); + setState(919); + match(LeftParen); + setState(932); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,88,_ctx) ) { + case 1: + { + setState(920); + forInitStatement(); + setState(922); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << IntegerLiteral) | (1L << CharacterLiteral) | (1L << FloatingLiteral) | (1L << StringLiteral) | (1L << BooleanLiteral) | (1L << PointerLiteral) | (1L << UserDefinedLiteral) | (1L << Alignas) | (1L << Alignof) | (1L << Auto) | (1L << Bool) | (1L << Char) | (1L << Char16) | (1L << Char32) | (1L << Class) | (1L << Const) | (1L << Constexpr) | (1L << Const_cast) | (1L << Decltype) | (1L << Delete) | (1L << Double) | (1L << Dynamic_cast) | (1L << Enum) | (1L << Explicit) | (1L << Extern) | (1L << Float) | (1L << Friend) | (1L << Inline) | (1L << Int) | (1L << Long) | (1L << Mutable) | (1L << New) | (1L << Noexcept) | (1L << Operator) | (1L << Register) | (1L << Reinterpret_cast) | (1L << Short) | (1L << Signed) | (1L << Sizeof) | (1L << Static))) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & ((1L << (Static_cast - 65)) | (1L << (Struct - 65)) | (1L << (This - 65)) | (1L << (Thread_local - 65)) | (1L << (Throw - 65)) | (1L << (Typedef - 65)) | (1L << (Typeid_ - 65)) | (1L << (Typename_ - 65)) | (1L << (Union - 65)) | (1L << (Unsigned - 65)) | (1L << (Virtual - 65)) | (1L << (Void - 65)) | (1L << (Volatile - 65)) | (1L << (Wchar - 65)) | (1L << (LeftParen - 65)) | (1L << (LeftBracket - 65)) | (1L << (Plus - 65)) | (1L << (Minus - 65)) | (1L << (Star - 65)) | (1L << (And - 65)) | (1L << (Or - 65)) | (1L << (Tilde - 65)) | (1L << (Not - 65)) | (1L << (PlusPlus - 65)) | (1L << (MinusMinus - 65)) | (1L << (Doublecolon - 65)))) != 0) || _la==Identifier) { + { + setState(921); + condition(); + } + } + + setState(924); + match(Semi); + setState(926); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << IntegerLiteral) | (1L << CharacterLiteral) | (1L << FloatingLiteral) | (1L << StringLiteral) | (1L << BooleanLiteral) | (1L << PointerLiteral) | (1L << UserDefinedLiteral) | (1L << Alignof) | (1L << Auto) | (1L << Bool) | (1L << Char) | (1L << Char16) | (1L << Char32) | (1L << Const_cast) | (1L << Decltype) | (1L << Delete) | (1L << Double) | (1L << Dynamic_cast) | (1L << Float) | (1L << Int) | (1L << Long) | (1L << New) | (1L << Noexcept) | (1L << Operator) | (1L << Reinterpret_cast) | (1L << Short) | (1L << Signed) | (1L << Sizeof))) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & ((1L << (Static_cast - 65)) | (1L << (This - 65)) | (1L << (Throw - 65)) | (1L << (Typeid_ - 65)) | (1L << (Typename_ - 65)) | (1L << (Unsigned - 65)) | (1L << (Void - 65)) | (1L << (Wchar - 65)) | (1L << (LeftParen - 65)) | (1L << (LeftBracket - 65)) | (1L << (Plus - 65)) | (1L << (Minus - 65)) | (1L << (Star - 65)) | (1L << (And - 65)) | (1L << (Or - 65)) | (1L << (Tilde - 65)) | (1L << (Not - 65)) | (1L << (PlusPlus - 65)) | (1L << (MinusMinus - 65)) | (1L << (Doublecolon - 65)))) != 0) || _la==Identifier) { + { + setState(925); + expression(); + } + } + + } + break; + case 2: + { + setState(928); + forRangeDeclaration(); + setState(929); + match(Colon); + setState(930); + forRangeInitializer(); + } + break; + } + setState(934); + match(RightParen); + setState(935); + statement(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ForInitStatementContext extends ParserRuleContext { + public ExpressionStatementContext expressionStatement() { + return getRuleContext(ExpressionStatementContext.class,0); + } + public SimpleDeclarationContext simpleDeclaration() { + return getRuleContext(SimpleDeclarationContext.class,0); + } + public ForInitStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_forInitStatement; } + } + + public final ForInitStatementContext forInitStatement() throws RecognitionException { + ForInitStatementContext _localctx = new ForInitStatementContext(_ctx, getState()); + enterRule(_localctx, 110, RULE_forInitStatement); + try { + setState(941); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,90,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(939); + expressionStatement(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(940); + simpleDeclaration(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ForRangeDeclarationContext extends ParserRuleContext { + public DeclSpecifierSeqContext declSpecifierSeq() { + return getRuleContext(DeclSpecifierSeqContext.class,0); + } + public DeclaratorContext declarator() { + return getRuleContext(DeclaratorContext.class,0); + } + public AttributeSpecifierSeqContext attributeSpecifierSeq() { + return getRuleContext(AttributeSpecifierSeqContext.class,0); + } + public ForRangeDeclarationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_forRangeDeclaration; } + } + + public final ForRangeDeclarationContext forRangeDeclaration() throws RecognitionException { + ForRangeDeclarationContext _localctx = new ForRangeDeclarationContext(_ctx, getState()); + enterRule(_localctx, 112, RULE_forRangeDeclaration); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(944); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Alignas || _la==LeftBracket) { + { + setState(943); + attributeSpecifierSeq(); + } + } + + setState(946); + declSpecifierSeq(); + setState(947); + declarator(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ForRangeInitializerContext extends ParserRuleContext { + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public BracedInitListContext bracedInitList() { + return getRuleContext(BracedInitListContext.class,0); + } + public ForRangeInitializerContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_forRangeInitializer; } + } + + public final ForRangeInitializerContext forRangeInitializer() throws RecognitionException { + ForRangeInitializerContext _localctx = new ForRangeInitializerContext(_ctx, getState()); + enterRule(_localctx, 114, RULE_forRangeInitializer); + try { + setState(951); + _errHandler.sync(this); + switch (_input.LA(1)) { + case IntegerLiteral: + case CharacterLiteral: + case FloatingLiteral: + case StringLiteral: + case BooleanLiteral: + case PointerLiteral: + case UserDefinedLiteral: + case Alignof: + case Auto: + case Bool: + case Char: + case Char16: + case Char32: + case Const_cast: + case Decltype: + case Delete: + case Double: + case Dynamic_cast: + case Float: + case Int: + case Long: + case New: + case Noexcept: + case Operator: + case Reinterpret_cast: + case Short: + case Signed: + case Sizeof: + case Static_cast: + case This: + case Throw: + case Typeid_: + case Typename_: + case Unsigned: + case Void: + case Wchar: + case LeftParen: + case LeftBracket: + case Plus: + case Minus: + case Star: + case And: + case Or: + case Tilde: + case Not: + case PlusPlus: + case MinusMinus: + case Doublecolon: + case Identifier: + enterOuterAlt(_localctx, 1); + { + setState(949); + expression(); + } + break; + case LeftBrace: + enterOuterAlt(_localctx, 2); + { + setState(950); + bracedInitList(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class JumpStatementContext extends ParserRuleContext { + public TerminalNode Semi() { return getToken(CPP14Parser.Semi, 0); } + public TerminalNode Break() { return getToken(CPP14Parser.Break, 0); } + public TerminalNode Continue() { return getToken(CPP14Parser.Continue, 0); } + public TerminalNode Return() { return getToken(CPP14Parser.Return, 0); } + public TerminalNode Goto() { return getToken(CPP14Parser.Goto, 0); } + public TerminalNode Identifier() { return getToken(CPP14Parser.Identifier, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public BracedInitListContext bracedInitList() { + return getRuleContext(BracedInitListContext.class,0); + } + public JumpStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_jumpStatement; } + } + + public final JumpStatementContext jumpStatement() throws RecognitionException { + JumpStatementContext _localctx = new JumpStatementContext(_ctx, getState()); + enterRule(_localctx, 116, RULE_jumpStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(962); + _errHandler.sync(this); + switch (_input.LA(1)) { + case Break: + { + setState(953); + match(Break); + } + break; + case Continue: + { + setState(954); + match(Continue); + } + break; + case Return: + { + setState(955); + match(Return); + setState(958); + _errHandler.sync(this); + switch (_input.LA(1)) { + case IntegerLiteral: + case CharacterLiteral: + case FloatingLiteral: + case StringLiteral: + case BooleanLiteral: + case PointerLiteral: + case UserDefinedLiteral: + case Alignof: + case Auto: + case Bool: + case Char: + case Char16: + case Char32: + case Const_cast: + case Decltype: + case Delete: + case Double: + case Dynamic_cast: + case Float: + case Int: + case Long: + case New: + case Noexcept: + case Operator: + case Reinterpret_cast: + case Short: + case Signed: + case Sizeof: + case Static_cast: + case This: + case Throw: + case Typeid_: + case Typename_: + case Unsigned: + case Void: + case Wchar: + case LeftParen: + case LeftBracket: + case Plus: + case Minus: + case Star: + case And: + case Or: + case Tilde: + case Not: + case PlusPlus: + case MinusMinus: + case Doublecolon: + case Identifier: + { + setState(956); + expression(); + } + break; + case LeftBrace: + { + setState(957); + bracedInitList(); + } + break; + case Semi: + break; + default: + break; + } + } + break; + case Goto: + { + setState(960); + match(Goto); + setState(961); + match(Identifier); + } + break; + default: + throw new NoViableAltException(this); + } + setState(964); + match(Semi); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class DeclarationStatementContext extends ParserRuleContext { + public BlockDeclarationContext blockDeclaration() { + return getRuleContext(BlockDeclarationContext.class,0); + } + public DeclarationStatementContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_declarationStatement; } + } + + public final DeclarationStatementContext declarationStatement() throws RecognitionException { + DeclarationStatementContext _localctx = new DeclarationStatementContext(_ctx, getState()); + enterRule(_localctx, 118, RULE_declarationStatement); + try { + enterOuterAlt(_localctx, 1); + { + setState(966); + blockDeclaration(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class DeclarationseqContext extends ParserRuleContext { + public List declaration() { + return getRuleContexts(DeclarationContext.class); + } + public DeclarationContext declaration(int i) { + return getRuleContext(DeclarationContext.class,i); + } + public DeclarationseqContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_declarationseq; } + } + + public final DeclarationseqContext declarationseq() throws RecognitionException { + DeclarationseqContext _localctx = new DeclarationseqContext(_ctx, getState()); + enterRule(_localctx, 120, RULE_declarationseq); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(969); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + { + setState(968); + declaration(); + } + } + setState(971); + _errHandler.sync(this); + _la = _input.LA(1); + } while ( ((((_la - 10)) & ~0x3f) == 0 && ((1L << (_la - 10)) & ((1L << (Alignas - 10)) | (1L << (Asm - 10)) | (1L << (Auto - 10)) | (1L << (Bool - 10)) | (1L << (Char - 10)) | (1L << (Char16 - 10)) | (1L << (Char32 - 10)) | (1L << (Class - 10)) | (1L << (Const - 10)) | (1L << (Constexpr - 10)) | (1L << (Decltype - 10)) | (1L << (Double - 10)) | (1L << (Enum - 10)) | (1L << (Explicit - 10)) | (1L << (Extern - 10)) | (1L << (Float - 10)) | (1L << (Friend - 10)) | (1L << (Inline - 10)) | (1L << (Int - 10)) | (1L << (Long - 10)) | (1L << (Mutable - 10)) | (1L << (Namespace - 10)) | (1L << (Operator - 10)) | (1L << (Register - 10)) | (1L << (Short - 10)) | (1L << (Signed - 10)) | (1L << (Static - 10)) | (1L << (Static_assert - 10)) | (1L << (Struct - 10)) | (1L << (Template - 10)) | (1L << (Thread_local - 10)))) != 0) || ((((_la - 74)) & ~0x3f) == 0 && ((1L << (_la - 74)) & ((1L << (Typedef - 74)) | (1L << (Typename_ - 74)) | (1L << (Union - 74)) | (1L << (Unsigned - 74)) | (1L << (Using - 74)) | (1L << (Virtual - 74)) | (1L << (Void - 74)) | (1L << (Volatile - 74)) | (1L << (Wchar - 74)) | (1L << (LeftParen - 74)) | (1L << (LeftBracket - 74)) | (1L << (Star - 74)) | (1L << (And - 74)) | (1L << (Tilde - 74)) | (1L << (AndAnd - 74)) | (1L << (Doublecolon - 74)) | (1L << (Semi - 74)) | (1L << (Ellipsis - 74)) | (1L << (Identifier - 74)))) != 0) ); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class DeclarationContext extends ParserRuleContext { + public BlockDeclarationContext blockDeclaration() { + return getRuleContext(BlockDeclarationContext.class,0); + } + public FunctionDefinitionContext functionDefinition() { + return getRuleContext(FunctionDefinitionContext.class,0); + } + public TemplateDeclarationContext templateDeclaration() { + return getRuleContext(TemplateDeclarationContext.class,0); + } + public ExplicitInstantiationContext explicitInstantiation() { + return getRuleContext(ExplicitInstantiationContext.class,0); + } + public ExplicitSpecializationContext explicitSpecialization() { + return getRuleContext(ExplicitSpecializationContext.class,0); + } + public LinkageSpecificationContext linkageSpecification() { + return getRuleContext(LinkageSpecificationContext.class,0); + } + public NamespaceDefinitionContext namespaceDefinition() { + return getRuleContext(NamespaceDefinitionContext.class,0); + } + public EmptyDeclarationContext emptyDeclaration() { + return getRuleContext(EmptyDeclarationContext.class,0); + } + public AttributeDeclarationContext attributeDeclaration() { + return getRuleContext(AttributeDeclarationContext.class,0); + } + public DeclarationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_declaration; } + } + + public final DeclarationContext declaration() throws RecognitionException { + DeclarationContext _localctx = new DeclarationContext(_ctx, getState()); + enterRule(_localctx, 122, RULE_declaration); + try { + setState(982); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,96,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(973); + blockDeclaration(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(974); + functionDefinition(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(975); + templateDeclaration(); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(976); + explicitInstantiation(); + } + break; + case 5: + enterOuterAlt(_localctx, 5); + { + setState(977); + explicitSpecialization(); + } + break; + case 6: + enterOuterAlt(_localctx, 6); + { + setState(978); + linkageSpecification(); + } + break; + case 7: + enterOuterAlt(_localctx, 7); + { + setState(979); + namespaceDefinition(); + } + break; + case 8: + enterOuterAlt(_localctx, 8); + { + setState(980); + emptyDeclaration(); + } + break; + case 9: + enterOuterAlt(_localctx, 9); + { + setState(981); + attributeDeclaration(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class BlockDeclarationContext extends ParserRuleContext { + public SimpleDeclarationContext simpleDeclaration() { + return getRuleContext(SimpleDeclarationContext.class,0); + } + public AsmDefinitionContext asmDefinition() { + return getRuleContext(AsmDefinitionContext.class,0); + } + public NamespaceAliasDefinitionContext namespaceAliasDefinition() { + return getRuleContext(NamespaceAliasDefinitionContext.class,0); + } + public UsingDeclarationContext usingDeclaration() { + return getRuleContext(UsingDeclarationContext.class,0); + } + public UsingDirectiveContext usingDirective() { + return getRuleContext(UsingDirectiveContext.class,0); + } + public StaticAssertDeclarationContext staticAssertDeclaration() { + return getRuleContext(StaticAssertDeclarationContext.class,0); + } + public AliasDeclarationContext aliasDeclaration() { + return getRuleContext(AliasDeclarationContext.class,0); + } + public OpaqueEnumDeclarationContext opaqueEnumDeclaration() { + return getRuleContext(OpaqueEnumDeclarationContext.class,0); + } + public BlockDeclarationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_blockDeclaration; } + } + + public final BlockDeclarationContext blockDeclaration() throws RecognitionException { + BlockDeclarationContext _localctx = new BlockDeclarationContext(_ctx, getState()); + enterRule(_localctx, 124, RULE_blockDeclaration); + try { + setState(992); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,97,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(984); + simpleDeclaration(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(985); + asmDefinition(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(986); + namespaceAliasDefinition(); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(987); + usingDeclaration(); + } + break; + case 5: + enterOuterAlt(_localctx, 5); + { + setState(988); + usingDirective(); + } + break; + case 6: + enterOuterAlt(_localctx, 6); + { + setState(989); + staticAssertDeclaration(); + } + break; + case 7: + enterOuterAlt(_localctx, 7); + { + setState(990); + aliasDeclaration(); + } + break; + case 8: + enterOuterAlt(_localctx, 8); + { + setState(991); + opaqueEnumDeclaration(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class AliasDeclarationContext extends ParserRuleContext { + public TerminalNode Using() { return getToken(CPP14Parser.Using, 0); } + public TerminalNode Identifier() { return getToken(CPP14Parser.Identifier, 0); } + public TerminalNode Assign() { return getToken(CPP14Parser.Assign, 0); } + public TheTypeIdContext theTypeId() { + return getRuleContext(TheTypeIdContext.class,0); + } + public TerminalNode Semi() { return getToken(CPP14Parser.Semi, 0); } + public AttributeSpecifierSeqContext attributeSpecifierSeq() { + return getRuleContext(AttributeSpecifierSeqContext.class,0); + } + public AliasDeclarationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_aliasDeclaration; } + } + + public final AliasDeclarationContext aliasDeclaration() throws RecognitionException { + AliasDeclarationContext _localctx = new AliasDeclarationContext(_ctx, getState()); + enterRule(_localctx, 126, RULE_aliasDeclaration); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(994); + match(Using); + setState(995); + match(Identifier); + setState(997); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Alignas || _la==LeftBracket) { + { + setState(996); + attributeSpecifierSeq(); + } + } + + setState(999); + match(Assign); + setState(1000); + theTypeId(); + setState(1001); + match(Semi); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class SimpleDeclarationContext extends ParserRuleContext { + public TerminalNode Semi() { return getToken(CPP14Parser.Semi, 0); } + public DeclSpecifierSeqContext declSpecifierSeq() { + return getRuleContext(DeclSpecifierSeqContext.class,0); + } + public InitDeclaratorListContext initDeclaratorList() { + return getRuleContext(InitDeclaratorListContext.class,0); + } + public AttributeSpecifierSeqContext attributeSpecifierSeq() { + return getRuleContext(AttributeSpecifierSeqContext.class,0); + } + public SimpleDeclarationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_simpleDeclaration; } + } + + public final SimpleDeclarationContext simpleDeclaration() throws RecognitionException { + SimpleDeclarationContext _localctx = new SimpleDeclarationContext(_ctx, getState()); + enterRule(_localctx, 128, RULE_simpleDeclaration); + int _la; + try { + setState(1017); + _errHandler.sync(this); + switch (_input.LA(1)) { + case Auto: + case Bool: + case Char: + case Char16: + case Char32: + case Class: + case Const: + case Constexpr: + case Decltype: + case Double: + case Enum: + case Explicit: + case Extern: + case Float: + case Friend: + case Inline: + case Int: + case Long: + case Mutable: + case Operator: + case Register: + case Short: + case Signed: + case Static: + case Struct: + case Thread_local: + case Typedef: + case Typename_: + case Union: + case Unsigned: + case Virtual: + case Void: + case Volatile: + case Wchar: + case LeftParen: + case Star: + case And: + case Tilde: + case AndAnd: + case Doublecolon: + case Semi: + case Ellipsis: + case Identifier: + enterOuterAlt(_localctx, 1); + { + setState(1004); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,99,_ctx) ) { + case 1: + { + setState(1003); + declSpecifierSeq(); + } + break; + } + setState(1007); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Decltype || _la==Operator || ((((_la - 85)) & ~0x3f) == 0 && ((1L << (_la - 85)) & ((1L << (LeftParen - 85)) | (1L << (Star - 85)) | (1L << (And - 85)) | (1L << (Tilde - 85)) | (1L << (AndAnd - 85)) | (1L << (Doublecolon - 85)) | (1L << (Ellipsis - 85)) | (1L << (Identifier - 85)))) != 0)) { + { + setState(1006); + initDeclaratorList(); + } + } + + setState(1009); + match(Semi); + } + break; + case Alignas: + case LeftBracket: + enterOuterAlt(_localctx, 2); + { + setState(1010); + attributeSpecifierSeq(); + setState(1012); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,101,_ctx) ) { + case 1: + { + setState(1011); + declSpecifierSeq(); + } + break; + } + setState(1014); + initDeclaratorList(); + setState(1015); + match(Semi); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class StaticAssertDeclarationContext extends ParserRuleContext { + public TerminalNode Static_assert() { return getToken(CPP14Parser.Static_assert, 0); } + public TerminalNode LeftParen() { return getToken(CPP14Parser.LeftParen, 0); } + public ConstantExpressionContext constantExpression() { + return getRuleContext(ConstantExpressionContext.class,0); + } + public TerminalNode Comma() { return getToken(CPP14Parser.Comma, 0); } + public TerminalNode StringLiteral() { return getToken(CPP14Parser.StringLiteral, 0); } + public TerminalNode RightParen() { return getToken(CPP14Parser.RightParen, 0); } + public TerminalNode Semi() { return getToken(CPP14Parser.Semi, 0); } + public StaticAssertDeclarationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_staticAssertDeclaration; } + } + + public final StaticAssertDeclarationContext staticAssertDeclaration() throws RecognitionException { + StaticAssertDeclarationContext _localctx = new StaticAssertDeclarationContext(_ctx, getState()); + enterRule(_localctx, 130, RULE_staticAssertDeclaration); + try { + enterOuterAlt(_localctx, 1); + { + setState(1019); + match(Static_assert); + setState(1020); + match(LeftParen); + setState(1021); + constantExpression(); + setState(1022); + match(Comma); + setState(1023); + match(StringLiteral); + setState(1024); + match(RightParen); + setState(1025); + match(Semi); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class EmptyDeclarationContext extends ParserRuleContext { + public TerminalNode Semi() { return getToken(CPP14Parser.Semi, 0); } + public EmptyDeclarationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_emptyDeclaration; } + } + + public final EmptyDeclarationContext emptyDeclaration() throws RecognitionException { + EmptyDeclarationContext _localctx = new EmptyDeclarationContext(_ctx, getState()); + enterRule(_localctx, 132, RULE_emptyDeclaration); + try { + enterOuterAlt(_localctx, 1); + { + setState(1027); + match(Semi); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class AttributeDeclarationContext extends ParserRuleContext { + public AttributeSpecifierSeqContext attributeSpecifierSeq() { + return getRuleContext(AttributeSpecifierSeqContext.class,0); + } + public TerminalNode Semi() { return getToken(CPP14Parser.Semi, 0); } + public AttributeDeclarationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_attributeDeclaration; } + } + + public final AttributeDeclarationContext attributeDeclaration() throws RecognitionException { + AttributeDeclarationContext _localctx = new AttributeDeclarationContext(_ctx, getState()); + enterRule(_localctx, 134, RULE_attributeDeclaration); + try { + enterOuterAlt(_localctx, 1); + { + setState(1029); + attributeSpecifierSeq(); + setState(1030); + match(Semi); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class DeclSpecifierContext extends ParserRuleContext { + public StorageClassSpecifierContext storageClassSpecifier() { + return getRuleContext(StorageClassSpecifierContext.class,0); + } + public TypeSpecifierContext typeSpecifier() { + return getRuleContext(TypeSpecifierContext.class,0); + } + public FunctionSpecifierContext functionSpecifier() { + return getRuleContext(FunctionSpecifierContext.class,0); + } + public TerminalNode Friend() { return getToken(CPP14Parser.Friend, 0); } + public TerminalNode Typedef() { return getToken(CPP14Parser.Typedef, 0); } + public TerminalNode Constexpr() { return getToken(CPP14Parser.Constexpr, 0); } + public DeclSpecifierContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_declSpecifier; } + } + + public final DeclSpecifierContext declSpecifier() throws RecognitionException { + DeclSpecifierContext _localctx = new DeclSpecifierContext(_ctx, getState()); + enterRule(_localctx, 136, RULE_declSpecifier); + try { + setState(1038); + _errHandler.sync(this); + switch (_input.LA(1)) { + case Extern: + case Mutable: + case Register: + case Static: + case Thread_local: + enterOuterAlt(_localctx, 1); + { + setState(1032); + storageClassSpecifier(); + } + break; + case Auto: + case Bool: + case Char: + case Char16: + case Char32: + case Class: + case Const: + case Decltype: + case Double: + case Enum: + case Float: + case Int: + case Long: + case Short: + case Signed: + case Struct: + case Typename_: + case Union: + case Unsigned: + case Void: + case Volatile: + case Wchar: + case Doublecolon: + case Identifier: + enterOuterAlt(_localctx, 2); + { + setState(1033); + typeSpecifier(); + } + break; + case Explicit: + case Inline: + case Virtual: + enterOuterAlt(_localctx, 3); + { + setState(1034); + functionSpecifier(); + } + break; + case Friend: + enterOuterAlt(_localctx, 4); + { + setState(1035); + match(Friend); + } + break; + case Typedef: + enterOuterAlt(_localctx, 5); + { + setState(1036); + match(Typedef); + } + break; + case Constexpr: + enterOuterAlt(_localctx, 6); + { + setState(1037); + match(Constexpr); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class DeclSpecifierSeqContext extends ParserRuleContext { + public List declSpecifier() { + return getRuleContexts(DeclSpecifierContext.class); + } + public DeclSpecifierContext declSpecifier(int i) { + return getRuleContext(DeclSpecifierContext.class,i); + } + public AttributeSpecifierSeqContext attributeSpecifierSeq() { + return getRuleContext(AttributeSpecifierSeqContext.class,0); + } + public DeclSpecifierSeqContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_declSpecifierSeq; } + } + + public final DeclSpecifierSeqContext declSpecifierSeq() throws RecognitionException { + DeclSpecifierSeqContext _localctx = new DeclSpecifierSeqContext(_ctx, getState()); + enterRule(_localctx, 138, RULE_declSpecifierSeq); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(1041); + _errHandler.sync(this); + _alt = 1; + do { + switch (_alt) { + case 1: + { + { + setState(1040); + declSpecifier(); + } + } + break; + default: + throw new NoViableAltException(this); + } + setState(1043); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,104,_ctx); + } while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ); + setState(1046); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,105,_ctx) ) { + case 1: + { + setState(1045); + attributeSpecifierSeq(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class StorageClassSpecifierContext extends ParserRuleContext { + public TerminalNode Register() { return getToken(CPP14Parser.Register, 0); } + public TerminalNode Static() { return getToken(CPP14Parser.Static, 0); } + public TerminalNode Thread_local() { return getToken(CPP14Parser.Thread_local, 0); } + public TerminalNode Extern() { return getToken(CPP14Parser.Extern, 0); } + public TerminalNode Mutable() { return getToken(CPP14Parser.Mutable, 0); } + public StorageClassSpecifierContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_storageClassSpecifier; } + } + + public final StorageClassSpecifierContext storageClassSpecifier() throws RecognitionException { + StorageClassSpecifierContext _localctx = new StorageClassSpecifierContext(_ctx, getState()); + enterRule(_localctx, 140, RULE_storageClassSpecifier); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1048); + _la = _input.LA(1); + if ( !(((((_la - 36)) & ~0x3f) == 0 && ((1L << (_la - 36)) & ((1L << (Extern - 36)) | (1L << (Mutable - 36)) | (1L << (Register - 36)) | (1L << (Static - 36)) | (1L << (Thread_local - 36)))) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class FunctionSpecifierContext extends ParserRuleContext { + public TerminalNode Inline() { return getToken(CPP14Parser.Inline, 0); } + public TerminalNode Virtual() { return getToken(CPP14Parser.Virtual, 0); } + public TerminalNode Explicit() { return getToken(CPP14Parser.Explicit, 0); } + public FunctionSpecifierContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_functionSpecifier; } + } + + public final FunctionSpecifierContext functionSpecifier() throws RecognitionException { + FunctionSpecifierContext _localctx = new FunctionSpecifierContext(_ctx, getState()); + enterRule(_localctx, 142, RULE_functionSpecifier); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1050); + _la = _input.LA(1); + if ( !(((((_la - 34)) & ~0x3f) == 0 && ((1L << (_la - 34)) & ((1L << (Explicit - 34)) | (1L << (Inline - 34)) | (1L << (Virtual - 34)))) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TypedefNameContext extends ParserRuleContext { + public TerminalNode Identifier() { return getToken(CPP14Parser.Identifier, 0); } + public TypedefNameContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_typedefName; } + } + + public final TypedefNameContext typedefName() throws RecognitionException { + TypedefNameContext _localctx = new TypedefNameContext(_ctx, getState()); + enterRule(_localctx, 144, RULE_typedefName); + try { + enterOuterAlt(_localctx, 1); + { + setState(1052); + match(Identifier); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TypeSpecifierContext extends ParserRuleContext { + public TrailingTypeSpecifierContext trailingTypeSpecifier() { + return getRuleContext(TrailingTypeSpecifierContext.class,0); + } + public ClassSpecifierContext classSpecifier() { + return getRuleContext(ClassSpecifierContext.class,0); + } + public EnumSpecifierContext enumSpecifier() { + return getRuleContext(EnumSpecifierContext.class,0); + } + public TypeSpecifierContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_typeSpecifier; } + } + + public final TypeSpecifierContext typeSpecifier() throws RecognitionException { + TypeSpecifierContext _localctx = new TypeSpecifierContext(_ctx, getState()); + enterRule(_localctx, 146, RULE_typeSpecifier); + try { + setState(1057); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,106,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(1054); + trailingTypeSpecifier(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(1055); + classSpecifier(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(1056); + enumSpecifier(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TrailingTypeSpecifierContext extends ParserRuleContext { + public SimpleTypeSpecifierContext simpleTypeSpecifier() { + return getRuleContext(SimpleTypeSpecifierContext.class,0); + } + public ElaboratedTypeSpecifierContext elaboratedTypeSpecifier() { + return getRuleContext(ElaboratedTypeSpecifierContext.class,0); + } + public TypeNameSpecifierContext typeNameSpecifier() { + return getRuleContext(TypeNameSpecifierContext.class,0); + } + public CvQualifierContext cvQualifier() { + return getRuleContext(CvQualifierContext.class,0); + } + public TrailingTypeSpecifierContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_trailingTypeSpecifier; } + } + + public final TrailingTypeSpecifierContext trailingTypeSpecifier() throws RecognitionException { + TrailingTypeSpecifierContext _localctx = new TrailingTypeSpecifierContext(_ctx, getState()); + enterRule(_localctx, 148, RULE_trailingTypeSpecifier); + try { + setState(1063); + _errHandler.sync(this); + switch (_input.LA(1)) { + case Auto: + case Bool: + case Char: + case Char16: + case Char32: + case Decltype: + case Double: + case Float: + case Int: + case Long: + case Short: + case Signed: + case Unsigned: + case Void: + case Wchar: + case Doublecolon: + case Identifier: + enterOuterAlt(_localctx, 1); + { + setState(1059); + simpleTypeSpecifier(); + } + break; + case Class: + case Enum: + case Struct: + enterOuterAlt(_localctx, 2); + { + setState(1060); + elaboratedTypeSpecifier(); + } + break; + case Typename_: + enterOuterAlt(_localctx, 3); + { + setState(1061); + typeNameSpecifier(); + } + break; + case Const: + case Volatile: + enterOuterAlt(_localctx, 4); + { + setState(1062); + cvQualifier(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TypeSpecifierSeqContext extends ParserRuleContext { + public List typeSpecifier() { + return getRuleContexts(TypeSpecifierContext.class); + } + public TypeSpecifierContext typeSpecifier(int i) { + return getRuleContext(TypeSpecifierContext.class,i); + } + public AttributeSpecifierSeqContext attributeSpecifierSeq() { + return getRuleContext(AttributeSpecifierSeqContext.class,0); + } + public TypeSpecifierSeqContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_typeSpecifierSeq; } + } + + public final TypeSpecifierSeqContext typeSpecifierSeq() throws RecognitionException { + TypeSpecifierSeqContext _localctx = new TypeSpecifierSeqContext(_ctx, getState()); + enterRule(_localctx, 150, RULE_typeSpecifierSeq); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(1066); + _errHandler.sync(this); + _alt = 1; + do { + switch (_alt) { + case 1: + { + { + setState(1065); + typeSpecifier(); + } + } + break; + default: + throw new NoViableAltException(this); + } + setState(1068); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,108,_ctx); + } while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ); + setState(1071); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,109,_ctx) ) { + case 1: + { + setState(1070); + attributeSpecifierSeq(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TrailingTypeSpecifierSeqContext extends ParserRuleContext { + public List trailingTypeSpecifier() { + return getRuleContexts(TrailingTypeSpecifierContext.class); + } + public TrailingTypeSpecifierContext trailingTypeSpecifier(int i) { + return getRuleContext(TrailingTypeSpecifierContext.class,i); + } + public AttributeSpecifierSeqContext attributeSpecifierSeq() { + return getRuleContext(AttributeSpecifierSeqContext.class,0); + } + public TrailingTypeSpecifierSeqContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_trailingTypeSpecifierSeq; } + } + + public final TrailingTypeSpecifierSeqContext trailingTypeSpecifierSeq() throws RecognitionException { + TrailingTypeSpecifierSeqContext _localctx = new TrailingTypeSpecifierSeqContext(_ctx, getState()); + enterRule(_localctx, 152, RULE_trailingTypeSpecifierSeq); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(1074); + _errHandler.sync(this); + _alt = 1; + do { + switch (_alt) { + case 1: + { + { + setState(1073); + trailingTypeSpecifier(); + } + } + break; + default: + throw new NoViableAltException(this); + } + setState(1076); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,110,_ctx); + } while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ); + setState(1079); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,111,_ctx) ) { + case 1: + { + setState(1078); + attributeSpecifierSeq(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class SimpleTypeSpecifierContext extends ParserRuleContext { + public TheTypeNameContext theTypeName() { + return getRuleContext(TheTypeNameContext.class,0); + } + public NestedNameSpecifierContext nestedNameSpecifier() { + return getRuleContext(NestedNameSpecifierContext.class,0); + } + public TerminalNode Template() { return getToken(CPP14Parser.Template, 0); } + public SimpleTemplateIdContext simpleTemplateId() { + return getRuleContext(SimpleTemplateIdContext.class,0); + } + public TerminalNode Char() { return getToken(CPP14Parser.Char, 0); } + public TerminalNode Char16() { return getToken(CPP14Parser.Char16, 0); } + public TerminalNode Char32() { return getToken(CPP14Parser.Char32, 0); } + public TerminalNode Wchar() { return getToken(CPP14Parser.Wchar, 0); } + public TerminalNode Bool() { return getToken(CPP14Parser.Bool, 0); } + public TerminalNode Short() { return getToken(CPP14Parser.Short, 0); } + public TerminalNode Int() { return getToken(CPP14Parser.Int, 0); } + public TerminalNode Long() { return getToken(CPP14Parser.Long, 0); } + public TerminalNode Signed() { return getToken(CPP14Parser.Signed, 0); } + public TerminalNode Unsigned() { return getToken(CPP14Parser.Unsigned, 0); } + public TerminalNode Float() { return getToken(CPP14Parser.Float, 0); } + public TerminalNode Double() { return getToken(CPP14Parser.Double, 0); } + public TerminalNode Void() { return getToken(CPP14Parser.Void, 0); } + public TerminalNode Auto() { return getToken(CPP14Parser.Auto, 0); } + public DecltypeSpecifierContext decltypeSpecifier() { + return getRuleContext(DecltypeSpecifierContext.class,0); + } + public SimpleTypeSpecifierContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_simpleTypeSpecifier; } + } + + public final SimpleTypeSpecifierContext simpleTypeSpecifier() throws RecognitionException { + SimpleTypeSpecifierContext _localctx = new SimpleTypeSpecifierContext(_ctx, getState()); + enterRule(_localctx, 154, RULE_simpleTypeSpecifier); + try { + setState(1104); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,113,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(1082); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,112,_ctx) ) { + case 1: + { + setState(1081); + nestedNameSpecifier(0); + } + break; + } + setState(1084); + theTypeName(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(1085); + nestedNameSpecifier(0); + setState(1086); + match(Template); + setState(1087); + simpleTemplateId(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(1089); + match(Char); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(1090); + match(Char16); + } + break; + case 5: + enterOuterAlt(_localctx, 5); + { + setState(1091); + match(Char32); + } + break; + case 6: + enterOuterAlt(_localctx, 6); + { + setState(1092); + match(Wchar); + } + break; + case 7: + enterOuterAlt(_localctx, 7); + { + setState(1093); + match(Bool); + } + break; + case 8: + enterOuterAlt(_localctx, 8); + { + setState(1094); + match(Short); + } + break; + case 9: + enterOuterAlt(_localctx, 9); + { + setState(1095); + match(Int); + } + break; + case 10: + enterOuterAlt(_localctx, 10); + { + setState(1096); + match(Long); + } + break; + case 11: + enterOuterAlt(_localctx, 11); + { + setState(1097); + match(Signed); + } + break; + case 12: + enterOuterAlt(_localctx, 12); + { + setState(1098); + match(Unsigned); + } + break; + case 13: + enterOuterAlt(_localctx, 13); + { + setState(1099); + match(Float); + } + break; + case 14: + enterOuterAlt(_localctx, 14); + { + setState(1100); + match(Double); + } + break; + case 15: + enterOuterAlt(_localctx, 15); + { + setState(1101); + match(Void); + } + break; + case 16: + enterOuterAlt(_localctx, 16); + { + setState(1102); + match(Auto); + } + break; + case 17: + enterOuterAlt(_localctx, 17); + { + setState(1103); + decltypeSpecifier(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TheTypeNameContext extends ParserRuleContext { + public ClassNameContext className() { + return getRuleContext(ClassNameContext.class,0); + } + public EnumNameContext enumName() { + return getRuleContext(EnumNameContext.class,0); + } + public TypedefNameContext typedefName() { + return getRuleContext(TypedefNameContext.class,0); + } + public SimpleTemplateIdContext simpleTemplateId() { + return getRuleContext(SimpleTemplateIdContext.class,0); + } + public TheTypeNameContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_theTypeName; } + } + + public final TheTypeNameContext theTypeName() throws RecognitionException { + TheTypeNameContext _localctx = new TheTypeNameContext(_ctx, getState()); + enterRule(_localctx, 156, RULE_theTypeName); + try { + setState(1110); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,114,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(1106); + className(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(1107); + enumName(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(1108); + typedefName(); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(1109); + simpleTemplateId(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class DecltypeSpecifierContext extends ParserRuleContext { + public TerminalNode Decltype() { return getToken(CPP14Parser.Decltype, 0); } + public TerminalNode LeftParen() { return getToken(CPP14Parser.LeftParen, 0); } + public TerminalNode RightParen() { return getToken(CPP14Parser.RightParen, 0); } + public ExpressionContext expression() { + return getRuleContext(ExpressionContext.class,0); + } + public TerminalNode Auto() { return getToken(CPP14Parser.Auto, 0); } + public DecltypeSpecifierContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_decltypeSpecifier; } + } + + public final DecltypeSpecifierContext decltypeSpecifier() throws RecognitionException { + DecltypeSpecifierContext _localctx = new DecltypeSpecifierContext(_ctx, getState()); + enterRule(_localctx, 158, RULE_decltypeSpecifier); + try { + enterOuterAlt(_localctx, 1); + { + setState(1112); + match(Decltype); + setState(1113); + match(LeftParen); + setState(1116); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,115,_ctx) ) { + case 1: + { + setState(1114); + expression(); + } + break; + case 2: + { + setState(1115); + match(Auto); + } + break; + } + setState(1118); + match(RightParen); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ElaboratedTypeSpecifierContext extends ParserRuleContext { + public ClassKeyContext classKey() { + return getRuleContext(ClassKeyContext.class,0); + } + public TerminalNode Identifier() { return getToken(CPP14Parser.Identifier, 0); } + public SimpleTemplateIdContext simpleTemplateId() { + return getRuleContext(SimpleTemplateIdContext.class,0); + } + public NestedNameSpecifierContext nestedNameSpecifier() { + return getRuleContext(NestedNameSpecifierContext.class,0); + } + public AttributeSpecifierSeqContext attributeSpecifierSeq() { + return getRuleContext(AttributeSpecifierSeqContext.class,0); + } + public TerminalNode Template() { return getToken(CPP14Parser.Template, 0); } + public TerminalNode Enum() { return getToken(CPP14Parser.Enum, 0); } + public ElaboratedTypeSpecifierContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_elaboratedTypeSpecifier; } + } + + public final ElaboratedTypeSpecifierContext elaboratedTypeSpecifier() throws RecognitionException { + ElaboratedTypeSpecifierContext _localctx = new ElaboratedTypeSpecifierContext(_ctx, getState()); + enterRule(_localctx, 160, RULE_elaboratedTypeSpecifier); + int _la; + try { + setState(1142); + _errHandler.sync(this); + switch (_input.LA(1)) { + case Class: + case Struct: + enterOuterAlt(_localctx, 1); + { + setState(1120); + classKey(); + setState(1135); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,119,_ctx) ) { + case 1: + { + setState(1122); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Alignas || _la==LeftBracket) { + { + setState(1121); + attributeSpecifierSeq(); + } + } + + setState(1125); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,117,_ctx) ) { + case 1: + { + setState(1124); + nestedNameSpecifier(0); + } + break; + } + setState(1127); + match(Identifier); + } + break; + case 2: + { + setState(1128); + simpleTemplateId(); + } + break; + case 3: + { + setState(1129); + nestedNameSpecifier(0); + setState(1131); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Template) { + { + setState(1130); + match(Template); + } + } + + setState(1133); + simpleTemplateId(); + } + break; + } + } + break; + case Enum: + enterOuterAlt(_localctx, 2); + { + setState(1137); + match(Enum); + setState(1139); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,120,_ctx) ) { + case 1: + { + setState(1138); + nestedNameSpecifier(0); + } + break; + } + setState(1141); + match(Identifier); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class EnumNameContext extends ParserRuleContext { + public TerminalNode Identifier() { return getToken(CPP14Parser.Identifier, 0); } + public EnumNameContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_enumName; } + } + + public final EnumNameContext enumName() throws RecognitionException { + EnumNameContext _localctx = new EnumNameContext(_ctx, getState()); + enterRule(_localctx, 162, RULE_enumName); + try { + enterOuterAlt(_localctx, 1); + { + setState(1144); + match(Identifier); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class EnumSpecifierContext extends ParserRuleContext { + public EnumHeadContext enumHead() { + return getRuleContext(EnumHeadContext.class,0); + } + public TerminalNode LeftBrace() { return getToken(CPP14Parser.LeftBrace, 0); } + public TerminalNode RightBrace() { return getToken(CPP14Parser.RightBrace, 0); } + public EnumeratorListContext enumeratorList() { + return getRuleContext(EnumeratorListContext.class,0); + } + public TerminalNode Comma() { return getToken(CPP14Parser.Comma, 0); } + public EnumSpecifierContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_enumSpecifier; } + } + + public final EnumSpecifierContext enumSpecifier() throws RecognitionException { + EnumSpecifierContext _localctx = new EnumSpecifierContext(_ctx, getState()); + enterRule(_localctx, 164, RULE_enumSpecifier); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1146); + enumHead(); + setState(1147); + match(LeftBrace); + setState(1152); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Identifier) { + { + setState(1148); + enumeratorList(); + setState(1150); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Comma) { + { + setState(1149); + match(Comma); + } + } + + } + } + + setState(1154); + match(RightBrace); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class EnumHeadContext extends ParserRuleContext { + public EnumkeyContext enumkey() { + return getRuleContext(EnumkeyContext.class,0); + } + public AttributeSpecifierSeqContext attributeSpecifierSeq() { + return getRuleContext(AttributeSpecifierSeqContext.class,0); + } + public TerminalNode Identifier() { return getToken(CPP14Parser.Identifier, 0); } + public EnumbaseContext enumbase() { + return getRuleContext(EnumbaseContext.class,0); + } + public NestedNameSpecifierContext nestedNameSpecifier() { + return getRuleContext(NestedNameSpecifierContext.class,0); + } + public EnumHeadContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_enumHead; } + } + + public final EnumHeadContext enumHead() throws RecognitionException { + EnumHeadContext _localctx = new EnumHeadContext(_ctx, getState()); + enterRule(_localctx, 166, RULE_enumHead); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1156); + enumkey(); + setState(1158); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Alignas || _la==LeftBracket) { + { + setState(1157); + attributeSpecifierSeq(); + } + } + + setState(1164); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Decltype || _la==Doublecolon || _la==Identifier) { + { + setState(1161); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,125,_ctx) ) { + case 1: + { + setState(1160); + nestedNameSpecifier(0); + } + break; + } + setState(1163); + match(Identifier); + } + } + + setState(1167); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Colon) { + { + setState(1166); + enumbase(); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class OpaqueEnumDeclarationContext extends ParserRuleContext { + public EnumkeyContext enumkey() { + return getRuleContext(EnumkeyContext.class,0); + } + public TerminalNode Identifier() { return getToken(CPP14Parser.Identifier, 0); } + public TerminalNode Semi() { return getToken(CPP14Parser.Semi, 0); } + public AttributeSpecifierSeqContext attributeSpecifierSeq() { + return getRuleContext(AttributeSpecifierSeqContext.class,0); + } + public EnumbaseContext enumbase() { + return getRuleContext(EnumbaseContext.class,0); + } + public OpaqueEnumDeclarationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_opaqueEnumDeclaration; } + } + + public final OpaqueEnumDeclarationContext opaqueEnumDeclaration() throws RecognitionException { + OpaqueEnumDeclarationContext _localctx = new OpaqueEnumDeclarationContext(_ctx, getState()); + enterRule(_localctx, 168, RULE_opaqueEnumDeclaration); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1169); + enumkey(); + setState(1171); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Alignas || _la==LeftBracket) { + { + setState(1170); + attributeSpecifierSeq(); + } + } + + setState(1173); + match(Identifier); + setState(1175); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Colon) { + { + setState(1174); + enumbase(); + } + } + + setState(1177); + match(Semi); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class EnumkeyContext extends ParserRuleContext { + public TerminalNode Enum() { return getToken(CPP14Parser.Enum, 0); } + public TerminalNode Class() { return getToken(CPP14Parser.Class, 0); } + public TerminalNode Struct() { return getToken(CPP14Parser.Struct, 0); } + public EnumkeyContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_enumkey; } + } + + public final EnumkeyContext enumkey() throws RecognitionException { + EnumkeyContext _localctx = new EnumkeyContext(_ctx, getState()); + enterRule(_localctx, 170, RULE_enumkey); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1179); + match(Enum); + setState(1181); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Class || _la==Struct) { + { + setState(1180); + _la = _input.LA(1); + if ( !(_la==Class || _la==Struct) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class EnumbaseContext extends ParserRuleContext { + public TerminalNode Colon() { return getToken(CPP14Parser.Colon, 0); } + public TypeSpecifierSeqContext typeSpecifierSeq() { + return getRuleContext(TypeSpecifierSeqContext.class,0); + } + public EnumbaseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_enumbase; } + } + + public final EnumbaseContext enumbase() throws RecognitionException { + EnumbaseContext _localctx = new EnumbaseContext(_ctx, getState()); + enterRule(_localctx, 172, RULE_enumbase); + try { + enterOuterAlt(_localctx, 1); + { + setState(1183); + match(Colon); + setState(1184); + typeSpecifierSeq(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class EnumeratorListContext extends ParserRuleContext { + public List enumeratorDefinition() { + return getRuleContexts(EnumeratorDefinitionContext.class); + } + public EnumeratorDefinitionContext enumeratorDefinition(int i) { + return getRuleContext(EnumeratorDefinitionContext.class,i); + } + public List Comma() { return getTokens(CPP14Parser.Comma); } + public TerminalNode Comma(int i) { + return getToken(CPP14Parser.Comma, i); + } + public EnumeratorListContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_enumeratorList; } + } + + public final EnumeratorListContext enumeratorList() throws RecognitionException { + EnumeratorListContext _localctx = new EnumeratorListContext(_ctx, getState()); + enterRule(_localctx, 174, RULE_enumeratorList); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(1186); + enumeratorDefinition(); + setState(1191); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,131,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(1187); + match(Comma); + setState(1188); + enumeratorDefinition(); + } + } + } + setState(1193); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,131,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class EnumeratorDefinitionContext extends ParserRuleContext { + public EnumeratorContext enumerator() { + return getRuleContext(EnumeratorContext.class,0); + } + public TerminalNode Assign() { return getToken(CPP14Parser.Assign, 0); } + public ConstantExpressionContext constantExpression() { + return getRuleContext(ConstantExpressionContext.class,0); + } + public EnumeratorDefinitionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_enumeratorDefinition; } + } + + public final EnumeratorDefinitionContext enumeratorDefinition() throws RecognitionException { + EnumeratorDefinitionContext _localctx = new EnumeratorDefinitionContext(_ctx, getState()); + enterRule(_localctx, 176, RULE_enumeratorDefinition); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1194); + enumerator(); + setState(1197); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Assign) { + { + setState(1195); + match(Assign); + setState(1196); + constantExpression(); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class EnumeratorContext extends ParserRuleContext { + public TerminalNode Identifier() { return getToken(CPP14Parser.Identifier, 0); } + public EnumeratorContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_enumerator; } + } + + public final EnumeratorContext enumerator() throws RecognitionException { + EnumeratorContext _localctx = new EnumeratorContext(_ctx, getState()); + enterRule(_localctx, 178, RULE_enumerator); + try { + enterOuterAlt(_localctx, 1); + { + setState(1199); + match(Identifier); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class NamespaceNameContext extends ParserRuleContext { + public OriginalNamespaceNameContext originalNamespaceName() { + return getRuleContext(OriginalNamespaceNameContext.class,0); + } + public NamespaceAliasContext namespaceAlias() { + return getRuleContext(NamespaceAliasContext.class,0); + } + public NamespaceNameContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_namespaceName; } + } + + public final NamespaceNameContext namespaceName() throws RecognitionException { + NamespaceNameContext _localctx = new NamespaceNameContext(_ctx, getState()); + enterRule(_localctx, 180, RULE_namespaceName); + try { + setState(1203); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,133,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(1201); + originalNamespaceName(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(1202); + namespaceAlias(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class OriginalNamespaceNameContext extends ParserRuleContext { + public TerminalNode Identifier() { return getToken(CPP14Parser.Identifier, 0); } + public OriginalNamespaceNameContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_originalNamespaceName; } + } + + public final OriginalNamespaceNameContext originalNamespaceName() throws RecognitionException { + OriginalNamespaceNameContext _localctx = new OriginalNamespaceNameContext(_ctx, getState()); + enterRule(_localctx, 182, RULE_originalNamespaceName); + try { + enterOuterAlt(_localctx, 1); + { + setState(1205); + match(Identifier); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class NamespaceDefinitionContext extends ParserRuleContext { + public DeclarationseqContext namespaceBody; + public TerminalNode Namespace() { return getToken(CPP14Parser.Namespace, 0); } + public TerminalNode LeftBrace() { return getToken(CPP14Parser.LeftBrace, 0); } + public TerminalNode RightBrace() { return getToken(CPP14Parser.RightBrace, 0); } + public TerminalNode Inline() { return getToken(CPP14Parser.Inline, 0); } + public TerminalNode Identifier() { return getToken(CPP14Parser.Identifier, 0); } + public OriginalNamespaceNameContext originalNamespaceName() { + return getRuleContext(OriginalNamespaceNameContext.class,0); + } + public DeclarationseqContext declarationseq() { + return getRuleContext(DeclarationseqContext.class,0); + } + public NamespaceDefinitionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_namespaceDefinition; } + } + + public final NamespaceDefinitionContext namespaceDefinition() throws RecognitionException { + NamespaceDefinitionContext _localctx = new NamespaceDefinitionContext(_ctx, getState()); + enterRule(_localctx, 184, RULE_namespaceDefinition); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1208); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Inline) { + { + setState(1207); + match(Inline); + } + } + + setState(1210); + match(Namespace); + setState(1213); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,135,_ctx) ) { + case 1: + { + setState(1211); + match(Identifier); + } + break; + case 2: + { + setState(1212); + originalNamespaceName(); + } + break; + } + setState(1215); + match(LeftBrace); + setState(1217); + _errHandler.sync(this); + _la = _input.LA(1); + if (((((_la - 10)) & ~0x3f) == 0 && ((1L << (_la - 10)) & ((1L << (Alignas - 10)) | (1L << (Asm - 10)) | (1L << (Auto - 10)) | (1L << (Bool - 10)) | (1L << (Char - 10)) | (1L << (Char16 - 10)) | (1L << (Char32 - 10)) | (1L << (Class - 10)) | (1L << (Const - 10)) | (1L << (Constexpr - 10)) | (1L << (Decltype - 10)) | (1L << (Double - 10)) | (1L << (Enum - 10)) | (1L << (Explicit - 10)) | (1L << (Extern - 10)) | (1L << (Float - 10)) | (1L << (Friend - 10)) | (1L << (Inline - 10)) | (1L << (Int - 10)) | (1L << (Long - 10)) | (1L << (Mutable - 10)) | (1L << (Namespace - 10)) | (1L << (Operator - 10)) | (1L << (Register - 10)) | (1L << (Short - 10)) | (1L << (Signed - 10)) | (1L << (Static - 10)) | (1L << (Static_assert - 10)) | (1L << (Struct - 10)) | (1L << (Template - 10)) | (1L << (Thread_local - 10)))) != 0) || ((((_la - 74)) & ~0x3f) == 0 && ((1L << (_la - 74)) & ((1L << (Typedef - 74)) | (1L << (Typename_ - 74)) | (1L << (Union - 74)) | (1L << (Unsigned - 74)) | (1L << (Using - 74)) | (1L << (Virtual - 74)) | (1L << (Void - 74)) | (1L << (Volatile - 74)) | (1L << (Wchar - 74)) | (1L << (LeftParen - 74)) | (1L << (LeftBracket - 74)) | (1L << (Star - 74)) | (1L << (And - 74)) | (1L << (Tilde - 74)) | (1L << (AndAnd - 74)) | (1L << (Doublecolon - 74)) | (1L << (Semi - 74)) | (1L << (Ellipsis - 74)) | (1L << (Identifier - 74)))) != 0)) { + { + setState(1216); + ((NamespaceDefinitionContext)_localctx).namespaceBody = declarationseq(); + } + } + + setState(1219); + match(RightBrace); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class NamespaceAliasContext extends ParserRuleContext { + public TerminalNode Identifier() { return getToken(CPP14Parser.Identifier, 0); } + public NamespaceAliasContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_namespaceAlias; } + } + + public final NamespaceAliasContext namespaceAlias() throws RecognitionException { + NamespaceAliasContext _localctx = new NamespaceAliasContext(_ctx, getState()); + enterRule(_localctx, 186, RULE_namespaceAlias); + try { + enterOuterAlt(_localctx, 1); + { + setState(1221); + match(Identifier); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class NamespaceAliasDefinitionContext extends ParserRuleContext { + public TerminalNode Namespace() { return getToken(CPP14Parser.Namespace, 0); } + public TerminalNode Identifier() { return getToken(CPP14Parser.Identifier, 0); } + public TerminalNode Assign() { return getToken(CPP14Parser.Assign, 0); } + public QualifiednamespacespecifierContext qualifiednamespacespecifier() { + return getRuleContext(QualifiednamespacespecifierContext.class,0); + } + public TerminalNode Semi() { return getToken(CPP14Parser.Semi, 0); } + public NamespaceAliasDefinitionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_namespaceAliasDefinition; } + } + + public final NamespaceAliasDefinitionContext namespaceAliasDefinition() throws RecognitionException { + NamespaceAliasDefinitionContext _localctx = new NamespaceAliasDefinitionContext(_ctx, getState()); + enterRule(_localctx, 188, RULE_namespaceAliasDefinition); + try { + enterOuterAlt(_localctx, 1); + { + setState(1223); + match(Namespace); + setState(1224); + match(Identifier); + setState(1225); + match(Assign); + setState(1226); + qualifiednamespacespecifier(); + setState(1227); + match(Semi); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class QualifiednamespacespecifierContext extends ParserRuleContext { + public NamespaceNameContext namespaceName() { + return getRuleContext(NamespaceNameContext.class,0); + } + public NestedNameSpecifierContext nestedNameSpecifier() { + return getRuleContext(NestedNameSpecifierContext.class,0); + } + public QualifiednamespacespecifierContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_qualifiednamespacespecifier; } + } + + public final QualifiednamespacespecifierContext qualifiednamespacespecifier() throws RecognitionException { + QualifiednamespacespecifierContext _localctx = new QualifiednamespacespecifierContext(_ctx, getState()); + enterRule(_localctx, 190, RULE_qualifiednamespacespecifier); + try { + enterOuterAlt(_localctx, 1); + { + setState(1230); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,137,_ctx) ) { + case 1: + { + setState(1229); + nestedNameSpecifier(0); + } + break; + } + setState(1232); + namespaceName(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class UsingDeclarationContext extends ParserRuleContext { + public TerminalNode Using() { return getToken(CPP14Parser.Using, 0); } + public UnqualifiedIdContext unqualifiedId() { + return getRuleContext(UnqualifiedIdContext.class,0); + } + public TerminalNode Semi() { return getToken(CPP14Parser.Semi, 0); } + public TerminalNode Doublecolon() { return getToken(CPP14Parser.Doublecolon, 0); } + public NestedNameSpecifierContext nestedNameSpecifier() { + return getRuleContext(NestedNameSpecifierContext.class,0); + } + public TerminalNode Typename_() { return getToken(CPP14Parser.Typename_, 0); } + public UsingDeclarationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_usingDeclaration; } + } + + public final UsingDeclarationContext usingDeclaration() throws RecognitionException { + UsingDeclarationContext _localctx = new UsingDeclarationContext(_ctx, getState()); + enterRule(_localctx, 192, RULE_usingDeclaration); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1234); + match(Using); + setState(1240); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,139,_ctx) ) { + case 1: + { + { + setState(1236); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Typename_) { + { + setState(1235); + match(Typename_); + } + } + + setState(1238); + nestedNameSpecifier(0); + } + } + break; + case 2: + { + setState(1239); + match(Doublecolon); + } + break; + } + setState(1242); + unqualifiedId(); + setState(1243); + match(Semi); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class UsingDirectiveContext extends ParserRuleContext { + public TerminalNode Using() { return getToken(CPP14Parser.Using, 0); } + public TerminalNode Namespace() { return getToken(CPP14Parser.Namespace, 0); } + public NamespaceNameContext namespaceName() { + return getRuleContext(NamespaceNameContext.class,0); + } + public TerminalNode Semi() { return getToken(CPP14Parser.Semi, 0); } + public AttributeSpecifierSeqContext attributeSpecifierSeq() { + return getRuleContext(AttributeSpecifierSeqContext.class,0); + } + public NestedNameSpecifierContext nestedNameSpecifier() { + return getRuleContext(NestedNameSpecifierContext.class,0); + } + public UsingDirectiveContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_usingDirective; } + } + + public final UsingDirectiveContext usingDirective() throws RecognitionException { + UsingDirectiveContext _localctx = new UsingDirectiveContext(_ctx, getState()); + enterRule(_localctx, 194, RULE_usingDirective); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1246); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Alignas || _la==LeftBracket) { + { + setState(1245); + attributeSpecifierSeq(); + } + } + + setState(1248); + match(Using); + setState(1249); + match(Namespace); + setState(1251); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,141,_ctx) ) { + case 1: + { + setState(1250); + nestedNameSpecifier(0); + } + break; + } + setState(1253); + namespaceName(); + setState(1254); + match(Semi); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class AsmDefinitionContext extends ParserRuleContext { + public TerminalNode Asm() { return getToken(CPP14Parser.Asm, 0); } + public TerminalNode LeftParen() { return getToken(CPP14Parser.LeftParen, 0); } + public TerminalNode StringLiteral() { return getToken(CPP14Parser.StringLiteral, 0); } + public TerminalNode RightParen() { return getToken(CPP14Parser.RightParen, 0); } + public TerminalNode Semi() { return getToken(CPP14Parser.Semi, 0); } + public AsmDefinitionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_asmDefinition; } + } + + public final AsmDefinitionContext asmDefinition() throws RecognitionException { + AsmDefinitionContext _localctx = new AsmDefinitionContext(_ctx, getState()); + enterRule(_localctx, 196, RULE_asmDefinition); + try { + enterOuterAlt(_localctx, 1); + { + setState(1256); + match(Asm); + setState(1257); + match(LeftParen); + setState(1258); + match(StringLiteral); + setState(1259); + match(RightParen); + setState(1260); + match(Semi); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class LinkageSpecificationContext extends ParserRuleContext { + public TerminalNode Extern() { return getToken(CPP14Parser.Extern, 0); } + public TerminalNode StringLiteral() { return getToken(CPP14Parser.StringLiteral, 0); } + public TerminalNode LeftBrace() { return getToken(CPP14Parser.LeftBrace, 0); } + public TerminalNode RightBrace() { return getToken(CPP14Parser.RightBrace, 0); } + public DeclarationContext declaration() { + return getRuleContext(DeclarationContext.class,0); + } + public DeclarationseqContext declarationseq() { + return getRuleContext(DeclarationseqContext.class,0); + } + public LinkageSpecificationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_linkageSpecification; } + } + + public final LinkageSpecificationContext linkageSpecification() throws RecognitionException { + LinkageSpecificationContext _localctx = new LinkageSpecificationContext(_ctx, getState()); + enterRule(_localctx, 198, RULE_linkageSpecification); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1262); + match(Extern); + setState(1263); + match(StringLiteral); + setState(1270); + _errHandler.sync(this); + switch (_input.LA(1)) { + case LeftBrace: + { + setState(1264); + match(LeftBrace); + setState(1266); + _errHandler.sync(this); + _la = _input.LA(1); + if (((((_la - 10)) & ~0x3f) == 0 && ((1L << (_la - 10)) & ((1L << (Alignas - 10)) | (1L << (Asm - 10)) | (1L << (Auto - 10)) | (1L << (Bool - 10)) | (1L << (Char - 10)) | (1L << (Char16 - 10)) | (1L << (Char32 - 10)) | (1L << (Class - 10)) | (1L << (Const - 10)) | (1L << (Constexpr - 10)) | (1L << (Decltype - 10)) | (1L << (Double - 10)) | (1L << (Enum - 10)) | (1L << (Explicit - 10)) | (1L << (Extern - 10)) | (1L << (Float - 10)) | (1L << (Friend - 10)) | (1L << (Inline - 10)) | (1L << (Int - 10)) | (1L << (Long - 10)) | (1L << (Mutable - 10)) | (1L << (Namespace - 10)) | (1L << (Operator - 10)) | (1L << (Register - 10)) | (1L << (Short - 10)) | (1L << (Signed - 10)) | (1L << (Static - 10)) | (1L << (Static_assert - 10)) | (1L << (Struct - 10)) | (1L << (Template - 10)) | (1L << (Thread_local - 10)))) != 0) || ((((_la - 74)) & ~0x3f) == 0 && ((1L << (_la - 74)) & ((1L << (Typedef - 74)) | (1L << (Typename_ - 74)) | (1L << (Union - 74)) | (1L << (Unsigned - 74)) | (1L << (Using - 74)) | (1L << (Virtual - 74)) | (1L << (Void - 74)) | (1L << (Volatile - 74)) | (1L << (Wchar - 74)) | (1L << (LeftParen - 74)) | (1L << (LeftBracket - 74)) | (1L << (Star - 74)) | (1L << (And - 74)) | (1L << (Tilde - 74)) | (1L << (AndAnd - 74)) | (1L << (Doublecolon - 74)) | (1L << (Semi - 74)) | (1L << (Ellipsis - 74)) | (1L << (Identifier - 74)))) != 0)) { + { + setState(1265); + declarationseq(); + } + } + + setState(1268); + match(RightBrace); + } + break; + case Alignas: + case Asm: + case Auto: + case Bool: + case Char: + case Char16: + case Char32: + case Class: + case Const: + case Constexpr: + case Decltype: + case Double: + case Enum: + case Explicit: + case Extern: + case Float: + case Friend: + case Inline: + case Int: + case Long: + case Mutable: + case Namespace: + case Operator: + case Register: + case Short: + case Signed: + case Static: + case Static_assert: + case Struct: + case Template: + case Thread_local: + case Typedef: + case Typename_: + case Union: + case Unsigned: + case Using: + case Virtual: + case Void: + case Volatile: + case Wchar: + case LeftParen: + case LeftBracket: + case Star: + case And: + case Tilde: + case AndAnd: + case Doublecolon: + case Semi: + case Ellipsis: + case Identifier: + { + setState(1269); + declaration(); + } + break; + default: + throw new NoViableAltException(this); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class AttributeSpecifierSeqContext extends ParserRuleContext { + public List attributeSpecifier() { + return getRuleContexts(AttributeSpecifierContext.class); + } + public AttributeSpecifierContext attributeSpecifier(int i) { + return getRuleContext(AttributeSpecifierContext.class,i); + } + public AttributeSpecifierSeqContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_attributeSpecifierSeq; } + } + + public final AttributeSpecifierSeqContext attributeSpecifierSeq() throws RecognitionException { + AttributeSpecifierSeqContext _localctx = new AttributeSpecifierSeqContext(_ctx, getState()); + enterRule(_localctx, 200, RULE_attributeSpecifierSeq); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(1273); + _errHandler.sync(this); + _alt = 1; + do { + switch (_alt) { + case 1: + { + { + setState(1272); + attributeSpecifier(); + } + } + break; + default: + throw new NoViableAltException(this); + } + setState(1275); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,144,_ctx); + } while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class AttributeSpecifierContext extends ParserRuleContext { + public List LeftBracket() { return getTokens(CPP14Parser.LeftBracket); } + public TerminalNode LeftBracket(int i) { + return getToken(CPP14Parser.LeftBracket, i); + } + public List RightBracket() { return getTokens(CPP14Parser.RightBracket); } + public TerminalNode RightBracket(int i) { + return getToken(CPP14Parser.RightBracket, i); + } + public AttributeListContext attributeList() { + return getRuleContext(AttributeListContext.class,0); + } + public AlignmentspecifierContext alignmentspecifier() { + return getRuleContext(AlignmentspecifierContext.class,0); + } + public AttributeSpecifierContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_attributeSpecifier; } + } + + public final AttributeSpecifierContext attributeSpecifier() throws RecognitionException { + AttributeSpecifierContext _localctx = new AttributeSpecifierContext(_ctx, getState()); + enterRule(_localctx, 202, RULE_attributeSpecifier); + int _la; + try { + setState(1285); + _errHandler.sync(this); + switch (_input.LA(1)) { + case LeftBracket: + enterOuterAlt(_localctx, 1); + { + setState(1277); + match(LeftBracket); + setState(1278); + match(LeftBracket); + setState(1280); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Identifier) { + { + setState(1279); + attributeList(); + } + } + + setState(1282); + match(RightBracket); + setState(1283); + match(RightBracket); + } + break; + case Alignas: + enterOuterAlt(_localctx, 2); + { + setState(1284); + alignmentspecifier(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class AlignmentspecifierContext extends ParserRuleContext { + public TerminalNode Alignas() { return getToken(CPP14Parser.Alignas, 0); } + public TerminalNode LeftParen() { return getToken(CPP14Parser.LeftParen, 0); } + public TerminalNode RightParen() { return getToken(CPP14Parser.RightParen, 0); } + public TheTypeIdContext theTypeId() { + return getRuleContext(TheTypeIdContext.class,0); + } + public ConstantExpressionContext constantExpression() { + return getRuleContext(ConstantExpressionContext.class,0); + } + public TerminalNode Ellipsis() { return getToken(CPP14Parser.Ellipsis, 0); } + public AlignmentspecifierContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_alignmentspecifier; } + } + + public final AlignmentspecifierContext alignmentspecifier() throws RecognitionException { + AlignmentspecifierContext _localctx = new AlignmentspecifierContext(_ctx, getState()); + enterRule(_localctx, 204, RULE_alignmentspecifier); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1287); + match(Alignas); + setState(1288); + match(LeftParen); + setState(1291); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,147,_ctx) ) { + case 1: + { + setState(1289); + theTypeId(); + } + break; + case 2: + { + setState(1290); + constantExpression(); + } + break; + } + setState(1294); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Ellipsis) { + { + setState(1293); + match(Ellipsis); + } + } + + setState(1296); + match(RightParen); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class AttributeListContext extends ParserRuleContext { + public List attribute() { + return getRuleContexts(AttributeContext.class); + } + public AttributeContext attribute(int i) { + return getRuleContext(AttributeContext.class,i); + } + public List Comma() { return getTokens(CPP14Parser.Comma); } + public TerminalNode Comma(int i) { + return getToken(CPP14Parser.Comma, i); + } + public TerminalNode Ellipsis() { return getToken(CPP14Parser.Ellipsis, 0); } + public AttributeListContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_attributeList; } + } + + public final AttributeListContext attributeList() throws RecognitionException { + AttributeListContext _localctx = new AttributeListContext(_ctx, getState()); + enterRule(_localctx, 206, RULE_attributeList); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1298); + attribute(); + setState(1303); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==Comma) { + { + { + setState(1299); + match(Comma); + setState(1300); + attribute(); + } + } + setState(1305); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1307); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Ellipsis) { + { + setState(1306); + match(Ellipsis); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class AttributeContext extends ParserRuleContext { + public TerminalNode Identifier() { return getToken(CPP14Parser.Identifier, 0); } + public AttributeNamespaceContext attributeNamespace() { + return getRuleContext(AttributeNamespaceContext.class,0); + } + public TerminalNode Doublecolon() { return getToken(CPP14Parser.Doublecolon, 0); } + public AttributeArgumentClauseContext attributeArgumentClause() { + return getRuleContext(AttributeArgumentClauseContext.class,0); + } + public AttributeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_attribute; } + } + + public final AttributeContext attribute() throws RecognitionException { + AttributeContext _localctx = new AttributeContext(_ctx, getState()); + enterRule(_localctx, 208, RULE_attribute); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1312); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,151,_ctx) ) { + case 1: + { + setState(1309); + attributeNamespace(); + setState(1310); + match(Doublecolon); + } + break; + } + setState(1314); + match(Identifier); + setState(1316); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==LeftParen) { + { + setState(1315); + attributeArgumentClause(); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class AttributeNamespaceContext extends ParserRuleContext { + public TerminalNode Identifier() { return getToken(CPP14Parser.Identifier, 0); } + public AttributeNamespaceContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_attributeNamespace; } + } + + public final AttributeNamespaceContext attributeNamespace() throws RecognitionException { + AttributeNamespaceContext _localctx = new AttributeNamespaceContext(_ctx, getState()); + enterRule(_localctx, 210, RULE_attributeNamespace); + try { + enterOuterAlt(_localctx, 1); + { + setState(1318); + match(Identifier); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class AttributeArgumentClauseContext extends ParserRuleContext { + public TerminalNode LeftParen() { return getToken(CPP14Parser.LeftParen, 0); } + public TerminalNode RightParen() { return getToken(CPP14Parser.RightParen, 0); } + public BalancedTokenSeqContext balancedTokenSeq() { + return getRuleContext(BalancedTokenSeqContext.class,0); + } + public AttributeArgumentClauseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_attributeArgumentClause; } + } + + public final AttributeArgumentClauseContext attributeArgumentClause() throws RecognitionException { + AttributeArgumentClauseContext _localctx = new AttributeArgumentClauseContext(_ctx, getState()); + enterRule(_localctx, 212, RULE_attributeArgumentClause); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1320); + match(LeftParen); + setState(1322); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << IntegerLiteral) | (1L << CharacterLiteral) | (1L << FloatingLiteral) | (1L << StringLiteral) | (1L << BooleanLiteral) | (1L << PointerLiteral) | (1L << UserDefinedLiteral) | (1L << MultiLineMacro) | (1L << Directive) | (1L << Alignas) | (1L << Alignof) | (1L << Asm) | (1L << Auto) | (1L << Bool) | (1L << Break) | (1L << Case) | (1L << Catch) | (1L << Char) | (1L << Char16) | (1L << Char32) | (1L << Class) | (1L << Const) | (1L << Constexpr) | (1L << Const_cast) | (1L << Continue) | (1L << Decltype) | (1L << Default) | (1L << Delete) | (1L << Do) | (1L << Double) | (1L << Dynamic_cast) | (1L << Else) | (1L << Enum) | (1L << Explicit) | (1L << Export) | (1L << Extern) | (1L << False_) | (1L << Final) | (1L << Float) | (1L << For) | (1L << Friend) | (1L << Goto) | (1L << If) | (1L << Inline) | (1L << Int) | (1L << Long) | (1L << Mutable) | (1L << Namespace) | (1L << New) | (1L << Noexcept) | (1L << Nullptr) | (1L << Operator) | (1L << Override) | (1L << Private) | (1L << Protected) | (1L << Public) | (1L << Register) | (1L << Reinterpret_cast) | (1L << Return) | (1L << Short) | (1L << Signed) | (1L << Sizeof) | (1L << Static))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (Static_assert - 64)) | (1L << (Static_cast - 64)) | (1L << (Struct - 64)) | (1L << (Switch - 64)) | (1L << (Template - 64)) | (1L << (This - 64)) | (1L << (Thread_local - 64)) | (1L << (Throw - 64)) | (1L << (True_ - 64)) | (1L << (Try - 64)) | (1L << (Typedef - 64)) | (1L << (Typeid_ - 64)) | (1L << (Typename_ - 64)) | (1L << (Union - 64)) | (1L << (Unsigned - 64)) | (1L << (Using - 64)) | (1L << (Virtual - 64)) | (1L << (Void - 64)) | (1L << (Volatile - 64)) | (1L << (Wchar - 64)) | (1L << (While - 64)) | (1L << (LeftParen - 64)) | (1L << (LeftBracket - 64)) | (1L << (LeftBrace - 64)) | (1L << (Plus - 64)) | (1L << (Minus - 64)) | (1L << (Star - 64)) | (1L << (Div - 64)) | (1L << (Mod - 64)) | (1L << (Caret - 64)) | (1L << (And - 64)) | (1L << (Or - 64)) | (1L << (Tilde - 64)) | (1L << (Not - 64)) | (1L << (Assign - 64)) | (1L << (Less - 64)) | (1L << (Greater - 64)) | (1L << (PlusAssign - 64)) | (1L << (MinusAssign - 64)) | (1L << (StarAssign - 64)) | (1L << (DivAssign - 64)) | (1L << (ModAssign - 64)) | (1L << (XorAssign - 64)) | (1L << (AndAssign - 64)) | (1L << (OrAssign - 64)) | (1L << (LeftShiftAssign - 64)) | (1L << (RightShiftAssign - 64)) | (1L << (Equal - 64)) | (1L << (NotEqual - 64)) | (1L << (LessEqual - 64)) | (1L << (GreaterEqual - 64)) | (1L << (AndAnd - 64)) | (1L << (OrOr - 64)) | (1L << (PlusPlus - 64)) | (1L << (MinusMinus - 64)) | (1L << (Comma - 64)) | (1L << (ArrowStar - 64)) | (1L << (Arrow - 64)) | (1L << (Question - 64)) | (1L << (Colon - 64)) | (1L << (Doublecolon - 64)))) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & ((1L << (Semi - 128)) | (1L << (Dot - 128)) | (1L << (DotStar - 128)) | (1L << (Ellipsis - 128)) | (1L << (Identifier - 128)) | (1L << (DecimalLiteral - 128)) | (1L << (OctalLiteral - 128)) | (1L << (HexadecimalLiteral - 128)) | (1L << (BinaryLiteral - 128)) | (1L << (Integersuffix - 128)) | (1L << (UserDefinedIntegerLiteral - 128)) | (1L << (UserDefinedFloatingLiteral - 128)) | (1L << (UserDefinedStringLiteral - 128)) | (1L << (UserDefinedCharacterLiteral - 128)) | (1L << (Whitespace - 128)) | (1L << (Newline - 128)) | (1L << (BlockComment - 128)) | (1L << (LineComment - 128)))) != 0)) { + { + setState(1321); + balancedTokenSeq(); + } + } + + setState(1324); + match(RightParen); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class BalancedTokenSeqContext extends ParserRuleContext { + public List balancedtoken() { + return getRuleContexts(BalancedtokenContext.class); + } + public BalancedtokenContext balancedtoken(int i) { + return getRuleContext(BalancedtokenContext.class,i); + } + public BalancedTokenSeqContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_balancedTokenSeq; } + } + + public final BalancedTokenSeqContext balancedTokenSeq() throws RecognitionException { + BalancedTokenSeqContext _localctx = new BalancedTokenSeqContext(_ctx, getState()); + enterRule(_localctx, 214, RULE_balancedTokenSeq); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1327); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + { + setState(1326); + balancedtoken(); + } + } + setState(1329); + _errHandler.sync(this); + _la = _input.LA(1); + } while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << IntegerLiteral) | (1L << CharacterLiteral) | (1L << FloatingLiteral) | (1L << StringLiteral) | (1L << BooleanLiteral) | (1L << PointerLiteral) | (1L << UserDefinedLiteral) | (1L << MultiLineMacro) | (1L << Directive) | (1L << Alignas) | (1L << Alignof) | (1L << Asm) | (1L << Auto) | (1L << Bool) | (1L << Break) | (1L << Case) | (1L << Catch) | (1L << Char) | (1L << Char16) | (1L << Char32) | (1L << Class) | (1L << Const) | (1L << Constexpr) | (1L << Const_cast) | (1L << Continue) | (1L << Decltype) | (1L << Default) | (1L << Delete) | (1L << Do) | (1L << Double) | (1L << Dynamic_cast) | (1L << Else) | (1L << Enum) | (1L << Explicit) | (1L << Export) | (1L << Extern) | (1L << False_) | (1L << Final) | (1L << Float) | (1L << For) | (1L << Friend) | (1L << Goto) | (1L << If) | (1L << Inline) | (1L << Int) | (1L << Long) | (1L << Mutable) | (1L << Namespace) | (1L << New) | (1L << Noexcept) | (1L << Nullptr) | (1L << Operator) | (1L << Override) | (1L << Private) | (1L << Protected) | (1L << Public) | (1L << Register) | (1L << Reinterpret_cast) | (1L << Return) | (1L << Short) | (1L << Signed) | (1L << Sizeof) | (1L << Static))) != 0) || ((((_la - 64)) & ~0x3f) == 0 && ((1L << (_la - 64)) & ((1L << (Static_assert - 64)) | (1L << (Static_cast - 64)) | (1L << (Struct - 64)) | (1L << (Switch - 64)) | (1L << (Template - 64)) | (1L << (This - 64)) | (1L << (Thread_local - 64)) | (1L << (Throw - 64)) | (1L << (True_ - 64)) | (1L << (Try - 64)) | (1L << (Typedef - 64)) | (1L << (Typeid_ - 64)) | (1L << (Typename_ - 64)) | (1L << (Union - 64)) | (1L << (Unsigned - 64)) | (1L << (Using - 64)) | (1L << (Virtual - 64)) | (1L << (Void - 64)) | (1L << (Volatile - 64)) | (1L << (Wchar - 64)) | (1L << (While - 64)) | (1L << (LeftParen - 64)) | (1L << (LeftBracket - 64)) | (1L << (LeftBrace - 64)) | (1L << (Plus - 64)) | (1L << (Minus - 64)) | (1L << (Star - 64)) | (1L << (Div - 64)) | (1L << (Mod - 64)) | (1L << (Caret - 64)) | (1L << (And - 64)) | (1L << (Or - 64)) | (1L << (Tilde - 64)) | (1L << (Not - 64)) | (1L << (Assign - 64)) | (1L << (Less - 64)) | (1L << (Greater - 64)) | (1L << (PlusAssign - 64)) | (1L << (MinusAssign - 64)) | (1L << (StarAssign - 64)) | (1L << (DivAssign - 64)) | (1L << (ModAssign - 64)) | (1L << (XorAssign - 64)) | (1L << (AndAssign - 64)) | (1L << (OrAssign - 64)) | (1L << (LeftShiftAssign - 64)) | (1L << (RightShiftAssign - 64)) | (1L << (Equal - 64)) | (1L << (NotEqual - 64)) | (1L << (LessEqual - 64)) | (1L << (GreaterEqual - 64)) | (1L << (AndAnd - 64)) | (1L << (OrOr - 64)) | (1L << (PlusPlus - 64)) | (1L << (MinusMinus - 64)) | (1L << (Comma - 64)) | (1L << (ArrowStar - 64)) | (1L << (Arrow - 64)) | (1L << (Question - 64)) | (1L << (Colon - 64)) | (1L << (Doublecolon - 64)))) != 0) || ((((_la - 128)) & ~0x3f) == 0 && ((1L << (_la - 128)) & ((1L << (Semi - 128)) | (1L << (Dot - 128)) | (1L << (DotStar - 128)) | (1L << (Ellipsis - 128)) | (1L << (Identifier - 128)) | (1L << (DecimalLiteral - 128)) | (1L << (OctalLiteral - 128)) | (1L << (HexadecimalLiteral - 128)) | (1L << (BinaryLiteral - 128)) | (1L << (Integersuffix - 128)) | (1L << (UserDefinedIntegerLiteral - 128)) | (1L << (UserDefinedFloatingLiteral - 128)) | (1L << (UserDefinedStringLiteral - 128)) | (1L << (UserDefinedCharacterLiteral - 128)) | (1L << (Whitespace - 128)) | (1L << (Newline - 128)) | (1L << (BlockComment - 128)) | (1L << (LineComment - 128)))) != 0) ); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class BalancedtokenContext extends ParserRuleContext { + public List LeftParen() { return getTokens(CPP14Parser.LeftParen); } + public TerminalNode LeftParen(int i) { + return getToken(CPP14Parser.LeftParen, i); + } + public BalancedTokenSeqContext balancedTokenSeq() { + return getRuleContext(BalancedTokenSeqContext.class,0); + } + public List RightParen() { return getTokens(CPP14Parser.RightParen); } + public TerminalNode RightParen(int i) { + return getToken(CPP14Parser.RightParen, i); + } + public List LeftBracket() { return getTokens(CPP14Parser.LeftBracket); } + public TerminalNode LeftBracket(int i) { + return getToken(CPP14Parser.LeftBracket, i); + } + public List RightBracket() { return getTokens(CPP14Parser.RightBracket); } + public TerminalNode RightBracket(int i) { + return getToken(CPP14Parser.RightBracket, i); + } + public List LeftBrace() { return getTokens(CPP14Parser.LeftBrace); } + public TerminalNode LeftBrace(int i) { + return getToken(CPP14Parser.LeftBrace, i); + } + public List RightBrace() { return getTokens(CPP14Parser.RightBrace); } + public TerminalNode RightBrace(int i) { + return getToken(CPP14Parser.RightBrace, i); + } + public BalancedtokenContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_balancedtoken; } + } + + public final BalancedtokenContext balancedtoken() throws RecognitionException { + BalancedtokenContext _localctx = new BalancedtokenContext(_ctx, getState()); + enterRule(_localctx, 216, RULE_balancedtoken); + int _la; + try { + int _alt; + setState(1348); + _errHandler.sync(this); + switch (_input.LA(1)) { + case LeftParen: + enterOuterAlt(_localctx, 1); + { + setState(1331); + match(LeftParen); + setState(1332); + balancedTokenSeq(); + setState(1333); + match(RightParen); + } + break; + case LeftBracket: + enterOuterAlt(_localctx, 2); + { + setState(1335); + match(LeftBracket); + setState(1336); + balancedTokenSeq(); + setState(1337); + match(RightBracket); + } + break; + case LeftBrace: + enterOuterAlt(_localctx, 3); + { + setState(1339); + match(LeftBrace); + setState(1340); + balancedTokenSeq(); + setState(1341); + match(RightBrace); + } + break; + case IntegerLiteral: + case CharacterLiteral: + case FloatingLiteral: + case StringLiteral: + case BooleanLiteral: + case PointerLiteral: + case UserDefinedLiteral: + case MultiLineMacro: + case Directive: + case Alignas: + case Alignof: + case Asm: + case Auto: + case Bool: + case Break: + case Case: + case Catch: + case Char: + case Char16: + case Char32: + case Class: + case Const: + case Constexpr: + case Const_cast: + case Continue: + case Decltype: + case Default: + case Delete: + case Do: + case Double: + case Dynamic_cast: + case Else: + case Enum: + case Explicit: + case Export: + case Extern: + case False_: + case Final: + case Float: + case For: + case Friend: + case Goto: + case If: + case Inline: + case Int: + case Long: + case Mutable: + case Namespace: + case New: + case Noexcept: + case Nullptr: + case Operator: + case Override: + case Private: + case Protected: + case Public: + case Register: + case Reinterpret_cast: + case Return: + case Short: + case Signed: + case Sizeof: + case Static: + case Static_assert: + case Static_cast: + case Struct: + case Switch: + case Template: + case This: + case Thread_local: + case Throw: + case True_: + case Try: + case Typedef: + case Typeid_: + case Typename_: + case Union: + case Unsigned: + case Using: + case Virtual: + case Void: + case Volatile: + case Wchar: + case While: + case Plus: + case Minus: + case Star: + case Div: + case Mod: + case Caret: + case And: + case Or: + case Tilde: + case Not: + case Assign: + case Less: + case Greater: + case PlusAssign: + case MinusAssign: + case StarAssign: + case DivAssign: + case ModAssign: + case XorAssign: + case AndAssign: + case OrAssign: + case LeftShiftAssign: + case RightShiftAssign: + case Equal: + case NotEqual: + case LessEqual: + case GreaterEqual: + case AndAnd: + case OrOr: + case PlusPlus: + case MinusMinus: + case Comma: + case ArrowStar: + case Arrow: + case Question: + case Colon: + case Doublecolon: + case Semi: + case Dot: + case DotStar: + case Ellipsis: + case Identifier: + case DecimalLiteral: + case OctalLiteral: + case HexadecimalLiteral: + case BinaryLiteral: + case Integersuffix: + case UserDefinedIntegerLiteral: + case UserDefinedFloatingLiteral: + case UserDefinedStringLiteral: + case UserDefinedCharacterLiteral: + case Whitespace: + case Newline: + case BlockComment: + case LineComment: + enterOuterAlt(_localctx, 4); + { + setState(1344); + _errHandler.sync(this); + _alt = 1; + do { + switch (_alt) { + case 1: + { + { + setState(1343); + _la = _input.LA(1); + if ( _la <= 0 || (((((_la - 85)) & ~0x3f) == 0 && ((1L << (_la - 85)) & ((1L << (LeftParen - 85)) | (1L << (RightParen - 85)) | (1L << (LeftBracket - 85)) | (1L << (RightBracket - 85)) | (1L << (LeftBrace - 85)) | (1L << (RightBrace - 85)))) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + break; + default: + throw new NoViableAltException(this); + } + setState(1346); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,155,_ctx); + } while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class InitDeclaratorListContext extends ParserRuleContext { + public List initDeclarator() { + return getRuleContexts(InitDeclaratorContext.class); + } + public InitDeclaratorContext initDeclarator(int i) { + return getRuleContext(InitDeclaratorContext.class,i); + } + public List Comma() { return getTokens(CPP14Parser.Comma); } + public TerminalNode Comma(int i) { + return getToken(CPP14Parser.Comma, i); + } + public InitDeclaratorListContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_initDeclaratorList; } + } + + public final InitDeclaratorListContext initDeclaratorList() throws RecognitionException { + InitDeclaratorListContext _localctx = new InitDeclaratorListContext(_ctx, getState()); + enterRule(_localctx, 218, RULE_initDeclaratorList); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1350); + initDeclarator(); + setState(1355); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==Comma) { + { + { + setState(1351); + match(Comma); + setState(1352); + initDeclarator(); + } + } + setState(1357); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class InitDeclaratorContext extends ParserRuleContext { + public DeclaratorContext declarator() { + return getRuleContext(DeclaratorContext.class,0); + } + public InitializerContext initializer() { + return getRuleContext(InitializerContext.class,0); + } + public InitDeclaratorContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_initDeclarator; } + } + + public final InitDeclaratorContext initDeclarator() throws RecognitionException { + InitDeclaratorContext _localctx = new InitDeclaratorContext(_ctx, getState()); + enterRule(_localctx, 220, RULE_initDeclarator); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1358); + declarator(); + setState(1360); + _errHandler.sync(this); + _la = _input.LA(1); + if (((((_la - 85)) & ~0x3f) == 0 && ((1L << (_la - 85)) & ((1L << (LeftParen - 85)) | (1L << (LeftBrace - 85)) | (1L << (Assign - 85)))) != 0)) { + { + setState(1359); + initializer(); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class DeclaratorContext extends ParserRuleContext { + public PointerDeclaratorContext pointerDeclarator() { + return getRuleContext(PointerDeclaratorContext.class,0); + } + public NoPointerDeclaratorContext noPointerDeclarator() { + return getRuleContext(NoPointerDeclaratorContext.class,0); + } + public ParametersAndQualifiersContext parametersAndQualifiers() { + return getRuleContext(ParametersAndQualifiersContext.class,0); + } + public TrailingReturnTypeContext trailingReturnType() { + return getRuleContext(TrailingReturnTypeContext.class,0); + } + public DeclaratorContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_declarator; } + } + + public final DeclaratorContext declarator() throws RecognitionException { + DeclaratorContext _localctx = new DeclaratorContext(_ctx, getState()); + enterRule(_localctx, 222, RULE_declarator); + try { + setState(1367); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,159,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(1362); + pointerDeclarator(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(1363); + noPointerDeclarator(0); + setState(1364); + parametersAndQualifiers(); + setState(1365); + trailingReturnType(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class PointerDeclaratorContext extends ParserRuleContext { + public NoPointerDeclaratorContext noPointerDeclarator() { + return getRuleContext(NoPointerDeclaratorContext.class,0); + } + public List pointerOperator() { + return getRuleContexts(PointerOperatorContext.class); + } + public PointerOperatorContext pointerOperator(int i) { + return getRuleContext(PointerOperatorContext.class,i); + } + public List Const() { return getTokens(CPP14Parser.Const); } + public TerminalNode Const(int i) { + return getToken(CPP14Parser.Const, i); + } + public PointerDeclaratorContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_pointerDeclarator; } + } + + public final PointerDeclaratorContext pointerDeclarator() throws RecognitionException { + PointerDeclaratorContext _localctx = new PointerDeclaratorContext(_ctx, getState()); + enterRule(_localctx, 224, RULE_pointerDeclarator); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(1375); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,161,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(1369); + pointerOperator(); + setState(1371); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Const) { + { + setState(1370); + match(Const); + } + } + + } + } + } + setState(1377); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,161,_ctx); + } + setState(1378); + noPointerDeclarator(0); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class NoPointerDeclaratorContext extends ParserRuleContext { + public DeclaratoridContext declaratorid() { + return getRuleContext(DeclaratoridContext.class,0); + } + public AttributeSpecifierSeqContext attributeSpecifierSeq() { + return getRuleContext(AttributeSpecifierSeqContext.class,0); + } + public TerminalNode LeftParen() { return getToken(CPP14Parser.LeftParen, 0); } + public PointerDeclaratorContext pointerDeclarator() { + return getRuleContext(PointerDeclaratorContext.class,0); + } + public TerminalNode RightParen() { return getToken(CPP14Parser.RightParen, 0); } + public NoPointerDeclaratorContext noPointerDeclarator() { + return getRuleContext(NoPointerDeclaratorContext.class,0); + } + public ParametersAndQualifiersContext parametersAndQualifiers() { + return getRuleContext(ParametersAndQualifiersContext.class,0); + } + public TerminalNode LeftBracket() { return getToken(CPP14Parser.LeftBracket, 0); } + public TerminalNode RightBracket() { return getToken(CPP14Parser.RightBracket, 0); } + public ConstantExpressionContext constantExpression() { + return getRuleContext(ConstantExpressionContext.class,0); + } + public NoPointerDeclaratorContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_noPointerDeclarator; } + } + + public final NoPointerDeclaratorContext noPointerDeclarator() throws RecognitionException { + return noPointerDeclarator(0); + } + + private NoPointerDeclaratorContext noPointerDeclarator(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + NoPointerDeclaratorContext _localctx = new NoPointerDeclaratorContext(_ctx, _parentState); + NoPointerDeclaratorContext _prevctx = _localctx; + int _startState = 226; + enterRecursionRule(_localctx, 226, RULE_noPointerDeclarator, _p); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(1389); + _errHandler.sync(this); + switch (_input.LA(1)) { + case Decltype: + case Operator: + case Tilde: + case Doublecolon: + case Ellipsis: + case Identifier: + { + setState(1381); + declaratorid(); + setState(1383); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,162,_ctx) ) { + case 1: + { + setState(1382); + attributeSpecifierSeq(); + } + break; + } + } + break; + case LeftParen: + { + setState(1385); + match(LeftParen); + setState(1386); + pointerDeclarator(); + setState(1387); + match(RightParen); + } + break; + default: + throw new NoViableAltException(this); + } + _ctx.stop = _input.LT(-1); + setState(1405); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,167,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + { + _localctx = new NoPointerDeclaratorContext(_parentctx, _parentState); + pushNewRecursionContext(_localctx, _startState, RULE_noPointerDeclarator); + setState(1391); + if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); + setState(1401); + _errHandler.sync(this); + switch (_input.LA(1)) { + case LeftParen: + { + setState(1392); + parametersAndQualifiers(); + } + break; + case LeftBracket: + { + setState(1393); + match(LeftBracket); + setState(1395); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << IntegerLiteral) | (1L << CharacterLiteral) | (1L << FloatingLiteral) | (1L << StringLiteral) | (1L << BooleanLiteral) | (1L << PointerLiteral) | (1L << UserDefinedLiteral) | (1L << Alignof) | (1L << Auto) | (1L << Bool) | (1L << Char) | (1L << Char16) | (1L << Char32) | (1L << Const_cast) | (1L << Decltype) | (1L << Delete) | (1L << Double) | (1L << Dynamic_cast) | (1L << Float) | (1L << Int) | (1L << Long) | (1L << New) | (1L << Noexcept) | (1L << Operator) | (1L << Reinterpret_cast) | (1L << Short) | (1L << Signed) | (1L << Sizeof))) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & ((1L << (Static_cast - 65)) | (1L << (This - 65)) | (1L << (Typeid_ - 65)) | (1L << (Typename_ - 65)) | (1L << (Unsigned - 65)) | (1L << (Void - 65)) | (1L << (Wchar - 65)) | (1L << (LeftParen - 65)) | (1L << (LeftBracket - 65)) | (1L << (Plus - 65)) | (1L << (Minus - 65)) | (1L << (Star - 65)) | (1L << (And - 65)) | (1L << (Or - 65)) | (1L << (Tilde - 65)) | (1L << (Not - 65)) | (1L << (PlusPlus - 65)) | (1L << (MinusMinus - 65)) | (1L << (Doublecolon - 65)))) != 0) || _la==Identifier) { + { + setState(1394); + constantExpression(); + } + } + + setState(1397); + match(RightBracket); + setState(1399); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,165,_ctx) ) { + case 1: + { + setState(1398); + attributeSpecifierSeq(); + } + break; + } + } + break; + default: + throw new NoViableAltException(this); + } + } + } + } + setState(1407); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,167,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + public static class ParametersAndQualifiersContext extends ParserRuleContext { + public TerminalNode LeftParen() { return getToken(CPP14Parser.LeftParen, 0); } + public TerminalNode RightParen() { return getToken(CPP14Parser.RightParen, 0); } + public ParameterDeclarationClauseContext parameterDeclarationClause() { + return getRuleContext(ParameterDeclarationClauseContext.class,0); + } + public CvqualifierseqContext cvqualifierseq() { + return getRuleContext(CvqualifierseqContext.class,0); + } + public RefqualifierContext refqualifier() { + return getRuleContext(RefqualifierContext.class,0); + } + public ExceptionSpecificationContext exceptionSpecification() { + return getRuleContext(ExceptionSpecificationContext.class,0); + } + public AttributeSpecifierSeqContext attributeSpecifierSeq() { + return getRuleContext(AttributeSpecifierSeqContext.class,0); + } + public ParametersAndQualifiersContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_parametersAndQualifiers; } + } + + public final ParametersAndQualifiersContext parametersAndQualifiers() throws RecognitionException { + ParametersAndQualifiersContext _localctx = new ParametersAndQualifiersContext(_ctx, getState()); + enterRule(_localctx, 228, RULE_parametersAndQualifiers); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1408); + match(LeftParen); + setState(1410); + _errHandler.sync(this); + _la = _input.LA(1); + if (((((_la - 10)) & ~0x3f) == 0 && ((1L << (_la - 10)) & ((1L << (Alignas - 10)) | (1L << (Auto - 10)) | (1L << (Bool - 10)) | (1L << (Char - 10)) | (1L << (Char16 - 10)) | (1L << (Char32 - 10)) | (1L << (Class - 10)) | (1L << (Const - 10)) | (1L << (Constexpr - 10)) | (1L << (Decltype - 10)) | (1L << (Double - 10)) | (1L << (Enum - 10)) | (1L << (Explicit - 10)) | (1L << (Extern - 10)) | (1L << (Float - 10)) | (1L << (Friend - 10)) | (1L << (Inline - 10)) | (1L << (Int - 10)) | (1L << (Long - 10)) | (1L << (Mutable - 10)) | (1L << (Register - 10)) | (1L << (Short - 10)) | (1L << (Signed - 10)) | (1L << (Static - 10)) | (1L << (Struct - 10)) | (1L << (Thread_local - 10)))) != 0) || ((((_la - 74)) & ~0x3f) == 0 && ((1L << (_la - 74)) & ((1L << (Typedef - 74)) | (1L << (Typename_ - 74)) | (1L << (Union - 74)) | (1L << (Unsigned - 74)) | (1L << (Virtual - 74)) | (1L << (Void - 74)) | (1L << (Volatile - 74)) | (1L << (Wchar - 74)) | (1L << (LeftBracket - 74)) | (1L << (Doublecolon - 74)) | (1L << (Identifier - 74)))) != 0)) { + { + setState(1409); + parameterDeclarationClause(); + } + } + + setState(1412); + match(RightParen); + setState(1414); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,169,_ctx) ) { + case 1: + { + setState(1413); + cvqualifierseq(); + } + break; + } + setState(1417); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,170,_ctx) ) { + case 1: + { + setState(1416); + refqualifier(); + } + break; + } + setState(1420); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,171,_ctx) ) { + case 1: + { + setState(1419); + exceptionSpecification(); + } + break; + } + setState(1423); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,172,_ctx) ) { + case 1: + { + setState(1422); + attributeSpecifierSeq(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TrailingReturnTypeContext extends ParserRuleContext { + public TerminalNode Arrow() { return getToken(CPP14Parser.Arrow, 0); } + public TrailingTypeSpecifierSeqContext trailingTypeSpecifierSeq() { + return getRuleContext(TrailingTypeSpecifierSeqContext.class,0); + } + public AbstractDeclaratorContext abstractDeclarator() { + return getRuleContext(AbstractDeclaratorContext.class,0); + } + public TrailingReturnTypeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_trailingReturnType; } + } + + public final TrailingReturnTypeContext trailingReturnType() throws RecognitionException { + TrailingReturnTypeContext _localctx = new TrailingReturnTypeContext(_ctx, getState()); + enterRule(_localctx, 230, RULE_trailingReturnType); + try { + enterOuterAlt(_localctx, 1); + { + setState(1425); + match(Arrow); + setState(1426); + trailingTypeSpecifierSeq(); + setState(1428); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,173,_ctx) ) { + case 1: + { + setState(1427); + abstractDeclarator(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class PointerOperatorContext extends ParserRuleContext { + public TerminalNode And() { return getToken(CPP14Parser.And, 0); } + public TerminalNode AndAnd() { return getToken(CPP14Parser.AndAnd, 0); } + public AttributeSpecifierSeqContext attributeSpecifierSeq() { + return getRuleContext(AttributeSpecifierSeqContext.class,0); + } + public TerminalNode Star() { return getToken(CPP14Parser.Star, 0); } + public NestedNameSpecifierContext nestedNameSpecifier() { + return getRuleContext(NestedNameSpecifierContext.class,0); + } + public CvqualifierseqContext cvqualifierseq() { + return getRuleContext(CvqualifierseqContext.class,0); + } + public PointerOperatorContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_pointerOperator; } + } + + public final PointerOperatorContext pointerOperator() throws RecognitionException { + PointerOperatorContext _localctx = new PointerOperatorContext(_ctx, getState()); + enterRule(_localctx, 232, RULE_pointerOperator); + int _la; + try { + setState(1444); + _errHandler.sync(this); + switch (_input.LA(1)) { + case And: + case AndAnd: + enterOuterAlt(_localctx, 1); + { + setState(1430); + _la = _input.LA(1); + if ( !(_la==And || _la==AndAnd) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(1432); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,174,_ctx) ) { + case 1: + { + setState(1431); + attributeSpecifierSeq(); + } + break; + } + } + break; + case Decltype: + case Star: + case Doublecolon: + case Identifier: + enterOuterAlt(_localctx, 2); + { + setState(1435); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Decltype || _la==Doublecolon || _la==Identifier) { + { + setState(1434); + nestedNameSpecifier(0); + } + } + + setState(1437); + match(Star); + setState(1439); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,176,_ctx) ) { + case 1: + { + setState(1438); + attributeSpecifierSeq(); + } + break; + } + setState(1442); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,177,_ctx) ) { + case 1: + { + setState(1441); + cvqualifierseq(); + } + break; + } + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class CvqualifierseqContext extends ParserRuleContext { + public List cvQualifier() { + return getRuleContexts(CvQualifierContext.class); + } + public CvQualifierContext cvQualifier(int i) { + return getRuleContext(CvQualifierContext.class,i); + } + public CvqualifierseqContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_cvqualifierseq; } + } + + public final CvqualifierseqContext cvqualifierseq() throws RecognitionException { + CvqualifierseqContext _localctx = new CvqualifierseqContext(_ctx, getState()); + enterRule(_localctx, 234, RULE_cvqualifierseq); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(1447); + _errHandler.sync(this); + _alt = 1; + do { + switch (_alt) { + case 1: + { + { + setState(1446); + cvQualifier(); + } + } + break; + default: + throw new NoViableAltException(this); + } + setState(1449); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,179,_ctx); + } while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class CvQualifierContext extends ParserRuleContext { + public TerminalNode Const() { return getToken(CPP14Parser.Const, 0); } + public TerminalNode Volatile() { return getToken(CPP14Parser.Volatile, 0); } + public CvQualifierContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_cvQualifier; } + } + + public final CvQualifierContext cvQualifier() throws RecognitionException { + CvQualifierContext _localctx = new CvQualifierContext(_ctx, getState()); + enterRule(_localctx, 236, RULE_cvQualifier); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1451); + _la = _input.LA(1); + if ( !(_la==Const || _la==Volatile) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class RefqualifierContext extends ParserRuleContext { + public TerminalNode And() { return getToken(CPP14Parser.And, 0); } + public TerminalNode AndAnd() { return getToken(CPP14Parser.AndAnd, 0); } + public RefqualifierContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_refqualifier; } + } + + public final RefqualifierContext refqualifier() throws RecognitionException { + RefqualifierContext _localctx = new RefqualifierContext(_ctx, getState()); + enterRule(_localctx, 238, RULE_refqualifier); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1453); + _la = _input.LA(1); + if ( !(_la==And || _la==AndAnd) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class DeclaratoridContext extends ParserRuleContext { + public IdExpressionContext idExpression() { + return getRuleContext(IdExpressionContext.class,0); + } + public TerminalNode Ellipsis() { return getToken(CPP14Parser.Ellipsis, 0); } + public DeclaratoridContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_declaratorid; } + } + + public final DeclaratoridContext declaratorid() throws RecognitionException { + DeclaratoridContext _localctx = new DeclaratoridContext(_ctx, getState()); + enterRule(_localctx, 240, RULE_declaratorid); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1456); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Ellipsis) { + { + setState(1455); + match(Ellipsis); + } + } + + setState(1458); + idExpression(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TheTypeIdContext extends ParserRuleContext { + public TypeSpecifierSeqContext typeSpecifierSeq() { + return getRuleContext(TypeSpecifierSeqContext.class,0); + } + public AbstractDeclaratorContext abstractDeclarator() { + return getRuleContext(AbstractDeclaratorContext.class,0); + } + public TheTypeIdContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_theTypeId; } + } + + public final TheTypeIdContext theTypeId() throws RecognitionException { + TheTypeIdContext _localctx = new TheTypeIdContext(_ctx, getState()); + enterRule(_localctx, 242, RULE_theTypeId); + try { + enterOuterAlt(_localctx, 1); + { + setState(1460); + typeSpecifierSeq(); + setState(1462); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,181,_ctx) ) { + case 1: + { + setState(1461); + abstractDeclarator(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class AbstractDeclaratorContext extends ParserRuleContext { + public PointerAbstractDeclaratorContext pointerAbstractDeclarator() { + return getRuleContext(PointerAbstractDeclaratorContext.class,0); + } + public ParametersAndQualifiersContext parametersAndQualifiers() { + return getRuleContext(ParametersAndQualifiersContext.class,0); + } + public TrailingReturnTypeContext trailingReturnType() { + return getRuleContext(TrailingReturnTypeContext.class,0); + } + public NoPointerAbstractDeclaratorContext noPointerAbstractDeclarator() { + return getRuleContext(NoPointerAbstractDeclaratorContext.class,0); + } + public AbstractPackDeclaratorContext abstractPackDeclarator() { + return getRuleContext(AbstractPackDeclaratorContext.class,0); + } + public AbstractDeclaratorContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_abstractDeclarator; } + } + + public final AbstractDeclaratorContext abstractDeclarator() throws RecognitionException { + AbstractDeclaratorContext _localctx = new AbstractDeclaratorContext(_ctx, getState()); + enterRule(_localctx, 244, RULE_abstractDeclarator); + try { + setState(1472); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,183,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(1464); + pointerAbstractDeclarator(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(1466); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,182,_ctx) ) { + case 1: + { + setState(1465); + noPointerAbstractDeclarator(0); + } + break; + } + setState(1468); + parametersAndQualifiers(); + setState(1469); + trailingReturnType(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(1471); + abstractPackDeclarator(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class PointerAbstractDeclaratorContext extends ParserRuleContext { + public NoPointerAbstractDeclaratorContext noPointerAbstractDeclarator() { + return getRuleContext(NoPointerAbstractDeclaratorContext.class,0); + } + public List pointerOperator() { + return getRuleContexts(PointerOperatorContext.class); + } + public PointerOperatorContext pointerOperator(int i) { + return getRuleContext(PointerOperatorContext.class,i); + } + public PointerAbstractDeclaratorContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_pointerAbstractDeclarator; } + } + + public final PointerAbstractDeclaratorContext pointerAbstractDeclarator() throws RecognitionException { + PointerAbstractDeclaratorContext _localctx = new PointerAbstractDeclaratorContext(_ctx, getState()); + enterRule(_localctx, 246, RULE_pointerAbstractDeclarator); + int _la; + try { + setState(1483); + _errHandler.sync(this); + switch (_input.LA(1)) { + case LeftParen: + case LeftBracket: + enterOuterAlt(_localctx, 1); + { + setState(1474); + noPointerAbstractDeclarator(0); + } + break; + case Decltype: + case Star: + case And: + case AndAnd: + case Doublecolon: + case Identifier: + enterOuterAlt(_localctx, 2); + { + setState(1476); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + { + setState(1475); + pointerOperator(); + } + } + setState(1478); + _errHandler.sync(this); + _la = _input.LA(1); + } while ( _la==Decltype || ((((_la - 93)) & ~0x3f) == 0 && ((1L << (_la - 93)) & ((1L << (Star - 93)) | (1L << (And - 93)) | (1L << (AndAnd - 93)) | (1L << (Doublecolon - 93)) | (1L << (Identifier - 93)))) != 0) ); + setState(1481); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,185,_ctx) ) { + case 1: + { + setState(1480); + noPointerAbstractDeclarator(0); + } + break; + } + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class NoPointerAbstractDeclaratorContext extends ParserRuleContext { + public ParametersAndQualifiersContext parametersAndQualifiers() { + return getRuleContext(ParametersAndQualifiersContext.class,0); + } + public TerminalNode LeftBracket() { return getToken(CPP14Parser.LeftBracket, 0); } + public TerminalNode RightBracket() { return getToken(CPP14Parser.RightBracket, 0); } + public ConstantExpressionContext constantExpression() { + return getRuleContext(ConstantExpressionContext.class,0); + } + public AttributeSpecifierSeqContext attributeSpecifierSeq() { + return getRuleContext(AttributeSpecifierSeqContext.class,0); + } + public TerminalNode LeftParen() { return getToken(CPP14Parser.LeftParen, 0); } + public PointerAbstractDeclaratorContext pointerAbstractDeclarator() { + return getRuleContext(PointerAbstractDeclaratorContext.class,0); + } + public TerminalNode RightParen() { return getToken(CPP14Parser.RightParen, 0); } + public List noPointerAbstractDeclarator() { + return getRuleContexts(NoPointerAbstractDeclaratorContext.class); + } + public NoPointerAbstractDeclaratorContext noPointerAbstractDeclarator(int i) { + return getRuleContext(NoPointerAbstractDeclaratorContext.class,i); + } + public NoPointerAbstractDeclaratorContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_noPointerAbstractDeclarator; } + } + + public final NoPointerAbstractDeclaratorContext noPointerAbstractDeclarator() throws RecognitionException { + return noPointerAbstractDeclarator(0); + } + + private NoPointerAbstractDeclaratorContext noPointerAbstractDeclarator(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + NoPointerAbstractDeclaratorContext _localctx = new NoPointerAbstractDeclaratorContext(_ctx, _parentState); + NoPointerAbstractDeclaratorContext _prevctx = _localctx; + int _startState = 248; + enterRecursionRule(_localctx, 248, RULE_noPointerAbstractDeclarator, _p); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(1499); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,189,_ctx) ) { + case 1: + { + setState(1486); + parametersAndQualifiers(); + } + break; + case 2: + { + setState(1487); + match(LeftBracket); + setState(1489); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << IntegerLiteral) | (1L << CharacterLiteral) | (1L << FloatingLiteral) | (1L << StringLiteral) | (1L << BooleanLiteral) | (1L << PointerLiteral) | (1L << UserDefinedLiteral) | (1L << Alignof) | (1L << Auto) | (1L << Bool) | (1L << Char) | (1L << Char16) | (1L << Char32) | (1L << Const_cast) | (1L << Decltype) | (1L << Delete) | (1L << Double) | (1L << Dynamic_cast) | (1L << Float) | (1L << Int) | (1L << Long) | (1L << New) | (1L << Noexcept) | (1L << Operator) | (1L << Reinterpret_cast) | (1L << Short) | (1L << Signed) | (1L << Sizeof))) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & ((1L << (Static_cast - 65)) | (1L << (This - 65)) | (1L << (Typeid_ - 65)) | (1L << (Typename_ - 65)) | (1L << (Unsigned - 65)) | (1L << (Void - 65)) | (1L << (Wchar - 65)) | (1L << (LeftParen - 65)) | (1L << (LeftBracket - 65)) | (1L << (Plus - 65)) | (1L << (Minus - 65)) | (1L << (Star - 65)) | (1L << (And - 65)) | (1L << (Or - 65)) | (1L << (Tilde - 65)) | (1L << (Not - 65)) | (1L << (PlusPlus - 65)) | (1L << (MinusMinus - 65)) | (1L << (Doublecolon - 65)))) != 0) || _la==Identifier) { + { + setState(1488); + constantExpression(); + } + } + + setState(1491); + match(RightBracket); + setState(1493); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,188,_ctx) ) { + case 1: + { + setState(1492); + attributeSpecifierSeq(); + } + break; + } + } + break; + case 3: + { + setState(1495); + match(LeftParen); + setState(1496); + pointerAbstractDeclarator(); + setState(1497); + match(RightParen); + } + break; + } + _ctx.stop = _input.LT(-1); + setState(1516); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,193,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + { + _localctx = new NoPointerAbstractDeclaratorContext(_parentctx, _parentState); + pushNewRecursionContext(_localctx, _startState, RULE_noPointerAbstractDeclarator); + setState(1501); + if (!(precpred(_ctx, 4))) throw new FailedPredicateException(this, "precpred(_ctx, 4)"); + setState(1512); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,192,_ctx) ) { + case 1: + { + setState(1502); + parametersAndQualifiers(); + } + break; + case 2: + { + setState(1503); + noPointerAbstractDeclarator(0); + setState(1504); + match(LeftBracket); + setState(1506); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << IntegerLiteral) | (1L << CharacterLiteral) | (1L << FloatingLiteral) | (1L << StringLiteral) | (1L << BooleanLiteral) | (1L << PointerLiteral) | (1L << UserDefinedLiteral) | (1L << Alignof) | (1L << Auto) | (1L << Bool) | (1L << Char) | (1L << Char16) | (1L << Char32) | (1L << Const_cast) | (1L << Decltype) | (1L << Delete) | (1L << Double) | (1L << Dynamic_cast) | (1L << Float) | (1L << Int) | (1L << Long) | (1L << New) | (1L << Noexcept) | (1L << Operator) | (1L << Reinterpret_cast) | (1L << Short) | (1L << Signed) | (1L << Sizeof))) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & ((1L << (Static_cast - 65)) | (1L << (This - 65)) | (1L << (Typeid_ - 65)) | (1L << (Typename_ - 65)) | (1L << (Unsigned - 65)) | (1L << (Void - 65)) | (1L << (Wchar - 65)) | (1L << (LeftParen - 65)) | (1L << (LeftBracket - 65)) | (1L << (Plus - 65)) | (1L << (Minus - 65)) | (1L << (Star - 65)) | (1L << (And - 65)) | (1L << (Or - 65)) | (1L << (Tilde - 65)) | (1L << (Not - 65)) | (1L << (PlusPlus - 65)) | (1L << (MinusMinus - 65)) | (1L << (Doublecolon - 65)))) != 0) || _la==Identifier) { + { + setState(1505); + constantExpression(); + } + } + + setState(1508); + match(RightBracket); + setState(1510); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,191,_ctx) ) { + case 1: + { + setState(1509); + attributeSpecifierSeq(); + } + break; + } + } + break; + } + } + } + } + setState(1518); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,193,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + public static class AbstractPackDeclaratorContext extends ParserRuleContext { + public NoPointerAbstractPackDeclaratorContext noPointerAbstractPackDeclarator() { + return getRuleContext(NoPointerAbstractPackDeclaratorContext.class,0); + } + public List pointerOperator() { + return getRuleContexts(PointerOperatorContext.class); + } + public PointerOperatorContext pointerOperator(int i) { + return getRuleContext(PointerOperatorContext.class,i); + } + public AbstractPackDeclaratorContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_abstractPackDeclarator; } + } + + public final AbstractPackDeclaratorContext abstractPackDeclarator() throws RecognitionException { + AbstractPackDeclaratorContext _localctx = new AbstractPackDeclaratorContext(_ctx, getState()); + enterRule(_localctx, 250, RULE_abstractPackDeclarator); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1522); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==Decltype || ((((_la - 93)) & ~0x3f) == 0 && ((1L << (_la - 93)) & ((1L << (Star - 93)) | (1L << (And - 93)) | (1L << (AndAnd - 93)) | (1L << (Doublecolon - 93)) | (1L << (Identifier - 93)))) != 0)) { + { + { + setState(1519); + pointerOperator(); + } + } + setState(1524); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(1525); + noPointerAbstractPackDeclarator(0); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class NoPointerAbstractPackDeclaratorContext extends ParserRuleContext { + public TerminalNode Ellipsis() { return getToken(CPP14Parser.Ellipsis, 0); } + public NoPointerAbstractPackDeclaratorContext noPointerAbstractPackDeclarator() { + return getRuleContext(NoPointerAbstractPackDeclaratorContext.class,0); + } + public ParametersAndQualifiersContext parametersAndQualifiers() { + return getRuleContext(ParametersAndQualifiersContext.class,0); + } + public TerminalNode LeftBracket() { return getToken(CPP14Parser.LeftBracket, 0); } + public TerminalNode RightBracket() { return getToken(CPP14Parser.RightBracket, 0); } + public ConstantExpressionContext constantExpression() { + return getRuleContext(ConstantExpressionContext.class,0); + } + public AttributeSpecifierSeqContext attributeSpecifierSeq() { + return getRuleContext(AttributeSpecifierSeqContext.class,0); + } + public NoPointerAbstractPackDeclaratorContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_noPointerAbstractPackDeclarator; } + } + + public final NoPointerAbstractPackDeclaratorContext noPointerAbstractPackDeclarator() throws RecognitionException { + return noPointerAbstractPackDeclarator(0); + } + + private NoPointerAbstractPackDeclaratorContext noPointerAbstractPackDeclarator(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + NoPointerAbstractPackDeclaratorContext _localctx = new NoPointerAbstractPackDeclaratorContext(_ctx, _parentState); + NoPointerAbstractPackDeclaratorContext _prevctx = _localctx; + int _startState = 252; + enterRecursionRule(_localctx, 252, RULE_noPointerAbstractPackDeclarator, _p); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + { + setState(1528); + match(Ellipsis); + } + _ctx.stop = _input.LT(-1); + setState(1544); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,198,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + { + _localctx = new NoPointerAbstractPackDeclaratorContext(_parentctx, _parentState); + pushNewRecursionContext(_localctx, _startState, RULE_noPointerAbstractPackDeclarator); + setState(1530); + if (!(precpred(_ctx, 2))) throw new FailedPredicateException(this, "precpred(_ctx, 2)"); + setState(1540); + _errHandler.sync(this); + switch (_input.LA(1)) { + case LeftParen: + { + setState(1531); + parametersAndQualifiers(); + } + break; + case LeftBracket: + { + setState(1532); + match(LeftBracket); + setState(1534); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << IntegerLiteral) | (1L << CharacterLiteral) | (1L << FloatingLiteral) | (1L << StringLiteral) | (1L << BooleanLiteral) | (1L << PointerLiteral) | (1L << UserDefinedLiteral) | (1L << Alignof) | (1L << Auto) | (1L << Bool) | (1L << Char) | (1L << Char16) | (1L << Char32) | (1L << Const_cast) | (1L << Decltype) | (1L << Delete) | (1L << Double) | (1L << Dynamic_cast) | (1L << Float) | (1L << Int) | (1L << Long) | (1L << New) | (1L << Noexcept) | (1L << Operator) | (1L << Reinterpret_cast) | (1L << Short) | (1L << Signed) | (1L << Sizeof))) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & ((1L << (Static_cast - 65)) | (1L << (This - 65)) | (1L << (Typeid_ - 65)) | (1L << (Typename_ - 65)) | (1L << (Unsigned - 65)) | (1L << (Void - 65)) | (1L << (Wchar - 65)) | (1L << (LeftParen - 65)) | (1L << (LeftBracket - 65)) | (1L << (Plus - 65)) | (1L << (Minus - 65)) | (1L << (Star - 65)) | (1L << (And - 65)) | (1L << (Or - 65)) | (1L << (Tilde - 65)) | (1L << (Not - 65)) | (1L << (PlusPlus - 65)) | (1L << (MinusMinus - 65)) | (1L << (Doublecolon - 65)))) != 0) || _la==Identifier) { + { + setState(1533); + constantExpression(); + } + } + + setState(1536); + match(RightBracket); + setState(1538); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,196,_ctx) ) { + case 1: + { + setState(1537); + attributeSpecifierSeq(); + } + break; + } + } + break; + default: + throw new NoViableAltException(this); + } + } + } + } + setState(1546); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,198,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + public static class ParameterDeclarationClauseContext extends ParserRuleContext { + public ParameterDeclarationListContext parameterDeclarationList() { + return getRuleContext(ParameterDeclarationListContext.class,0); + } + public TerminalNode Ellipsis() { return getToken(CPP14Parser.Ellipsis, 0); } + public TerminalNode Comma() { return getToken(CPP14Parser.Comma, 0); } + public ParameterDeclarationClauseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_parameterDeclarationClause; } + } + + public final ParameterDeclarationClauseContext parameterDeclarationClause() throws RecognitionException { + ParameterDeclarationClauseContext _localctx = new ParameterDeclarationClauseContext(_ctx, getState()); + enterRule(_localctx, 254, RULE_parameterDeclarationClause); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1547); + parameterDeclarationList(); + setState(1552); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Comma || _la==Ellipsis) { + { + setState(1549); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Comma) { + { + setState(1548); + match(Comma); + } + } + + setState(1551); + match(Ellipsis); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ParameterDeclarationListContext extends ParserRuleContext { + public List parameterDeclaration() { + return getRuleContexts(ParameterDeclarationContext.class); + } + public ParameterDeclarationContext parameterDeclaration(int i) { + return getRuleContext(ParameterDeclarationContext.class,i); + } + public List Comma() { return getTokens(CPP14Parser.Comma); } + public TerminalNode Comma(int i) { + return getToken(CPP14Parser.Comma, i); + } + public ParameterDeclarationListContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_parameterDeclarationList; } + } + + public final ParameterDeclarationListContext parameterDeclarationList() throws RecognitionException { + ParameterDeclarationListContext _localctx = new ParameterDeclarationListContext(_ctx, getState()); + enterRule(_localctx, 256, RULE_parameterDeclarationList); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(1554); + parameterDeclaration(); + setState(1559); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,201,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(1555); + match(Comma); + setState(1556); + parameterDeclaration(); + } + } + } + setState(1561); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,201,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ParameterDeclarationContext extends ParserRuleContext { + public DeclSpecifierSeqContext declSpecifierSeq() { + return getRuleContext(DeclSpecifierSeqContext.class,0); + } + public AttributeSpecifierSeqContext attributeSpecifierSeq() { + return getRuleContext(AttributeSpecifierSeqContext.class,0); + } + public DeclaratorContext declarator() { + return getRuleContext(DeclaratorContext.class,0); + } + public TerminalNode Assign() { return getToken(CPP14Parser.Assign, 0); } + public InitializerClauseContext initializerClause() { + return getRuleContext(InitializerClauseContext.class,0); + } + public AbstractDeclaratorContext abstractDeclarator() { + return getRuleContext(AbstractDeclaratorContext.class,0); + } + public ParameterDeclarationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_parameterDeclaration; } + } + + public final ParameterDeclarationContext parameterDeclaration() throws RecognitionException { + ParameterDeclarationContext _localctx = new ParameterDeclarationContext(_ctx, getState()); + enterRule(_localctx, 258, RULE_parameterDeclaration); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1563); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Alignas || _la==LeftBracket) { + { + setState(1562); + attributeSpecifierSeq(); + } + } + + setState(1565); + declSpecifierSeq(); + { + setState(1570); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,204,_ctx) ) { + case 1: + { + setState(1566); + declarator(); + } + break; + case 2: + { + setState(1568); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,203,_ctx) ) { + case 1: + { + setState(1567); + abstractDeclarator(); + } + break; + } + } + break; + } + setState(1574); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Assign) { + { + setState(1572); + match(Assign); + setState(1573); + initializerClause(); + } + } + + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class FunctionDefinitionContext extends ParserRuleContext { + public DeclaratorContext declarator() { + return getRuleContext(DeclaratorContext.class,0); + } + public FunctionBodyContext functionBody() { + return getRuleContext(FunctionBodyContext.class,0); + } + public AttributeSpecifierSeqContext attributeSpecifierSeq() { + return getRuleContext(AttributeSpecifierSeqContext.class,0); + } + public DeclSpecifierSeqContext declSpecifierSeq() { + return getRuleContext(DeclSpecifierSeqContext.class,0); + } + public VirtualSpecifierSeqContext virtualSpecifierSeq() { + return getRuleContext(VirtualSpecifierSeqContext.class,0); + } + public FunctionDefinitionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_functionDefinition; } + } + + public final FunctionDefinitionContext functionDefinition() throws RecognitionException { + FunctionDefinitionContext _localctx = new FunctionDefinitionContext(_ctx, getState()); + enterRule(_localctx, 260, RULE_functionDefinition); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1577); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Alignas || _la==LeftBracket) { + { + setState(1576); + attributeSpecifierSeq(); + } + } + + setState(1580); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,207,_ctx) ) { + case 1: + { + setState(1579); + declSpecifierSeq(); + } + break; + } + setState(1582); + declarator(); + setState(1584); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Final || _la==Override) { + { + setState(1583); + virtualSpecifierSeq(); + } + } + + setState(1586); + functionBody(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class FunctionBodyContext extends ParserRuleContext { + public CompoundStatementContext compoundStatement() { + return getRuleContext(CompoundStatementContext.class,0); + } + public ConstructorInitializerContext constructorInitializer() { + return getRuleContext(ConstructorInitializerContext.class,0); + } + public FunctionTryBlockContext functionTryBlock() { + return getRuleContext(FunctionTryBlockContext.class,0); + } + public TerminalNode Assign() { return getToken(CPP14Parser.Assign, 0); } + public TerminalNode Semi() { return getToken(CPP14Parser.Semi, 0); } + public TerminalNode Default() { return getToken(CPP14Parser.Default, 0); } + public TerminalNode Delete() { return getToken(CPP14Parser.Delete, 0); } + public FunctionBodyContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_functionBody; } + } + + public final FunctionBodyContext functionBody() throws RecognitionException { + FunctionBodyContext _localctx = new FunctionBodyContext(_ctx, getState()); + enterRule(_localctx, 262, RULE_functionBody); + int _la; + try { + setState(1596); + _errHandler.sync(this); + switch (_input.LA(1)) { + case LeftBrace: + case Colon: + enterOuterAlt(_localctx, 1); + { + setState(1589); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Colon) { + { + setState(1588); + constructorInitializer(); + } + } + + setState(1591); + compoundStatement(); + } + break; + case Try: + enterOuterAlt(_localctx, 2); + { + setState(1592); + functionTryBlock(); + } + break; + case Assign: + enterOuterAlt(_localctx, 3); + { + setState(1593); + match(Assign); + setState(1594); + _la = _input.LA(1); + if ( !(_la==Default || _la==Delete) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + setState(1595); + match(Semi); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class InitializerContext extends ParserRuleContext { + public BraceOrEqualInitializerContext braceOrEqualInitializer() { + return getRuleContext(BraceOrEqualInitializerContext.class,0); + } + public TerminalNode LeftParen() { return getToken(CPP14Parser.LeftParen, 0); } + public ExpressionListContext expressionList() { + return getRuleContext(ExpressionListContext.class,0); + } + public TerminalNode RightParen() { return getToken(CPP14Parser.RightParen, 0); } + public InitializerContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_initializer; } + } + + public final InitializerContext initializer() throws RecognitionException { + InitializerContext _localctx = new InitializerContext(_ctx, getState()); + enterRule(_localctx, 264, RULE_initializer); + try { + setState(1603); + _errHandler.sync(this); + switch (_input.LA(1)) { + case LeftBrace: + case Assign: + enterOuterAlt(_localctx, 1); + { + setState(1598); + braceOrEqualInitializer(); + } + break; + case LeftParen: + enterOuterAlt(_localctx, 2); + { + setState(1599); + match(LeftParen); + setState(1600); + expressionList(); + setState(1601); + match(RightParen); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class BraceOrEqualInitializerContext extends ParserRuleContext { + public TerminalNode Assign() { return getToken(CPP14Parser.Assign, 0); } + public InitializerClauseContext initializerClause() { + return getRuleContext(InitializerClauseContext.class,0); + } + public BracedInitListContext bracedInitList() { + return getRuleContext(BracedInitListContext.class,0); + } + public BraceOrEqualInitializerContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_braceOrEqualInitializer; } + } + + public final BraceOrEqualInitializerContext braceOrEqualInitializer() throws RecognitionException { + BraceOrEqualInitializerContext _localctx = new BraceOrEqualInitializerContext(_ctx, getState()); + enterRule(_localctx, 266, RULE_braceOrEqualInitializer); + try { + setState(1608); + _errHandler.sync(this); + switch (_input.LA(1)) { + case Assign: + enterOuterAlt(_localctx, 1); + { + setState(1605); + match(Assign); + setState(1606); + initializerClause(); + } + break; + case LeftBrace: + enterOuterAlt(_localctx, 2); + { + setState(1607); + bracedInitList(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class InitializerClauseContext extends ParserRuleContext { + public AssignmentExpressionContext assignmentExpression() { + return getRuleContext(AssignmentExpressionContext.class,0); + } + public BracedInitListContext bracedInitList() { + return getRuleContext(BracedInitListContext.class,0); + } + public InitializerClauseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_initializerClause; } + } + + public final InitializerClauseContext initializerClause() throws RecognitionException { + InitializerClauseContext _localctx = new InitializerClauseContext(_ctx, getState()); + enterRule(_localctx, 268, RULE_initializerClause); + try { + setState(1612); + _errHandler.sync(this); + switch (_input.LA(1)) { + case IntegerLiteral: + case CharacterLiteral: + case FloatingLiteral: + case StringLiteral: + case BooleanLiteral: + case PointerLiteral: + case UserDefinedLiteral: + case Alignof: + case Auto: + case Bool: + case Char: + case Char16: + case Char32: + case Const_cast: + case Decltype: + case Delete: + case Double: + case Dynamic_cast: + case Float: + case Int: + case Long: + case New: + case Noexcept: + case Operator: + case Reinterpret_cast: + case Short: + case Signed: + case Sizeof: + case Static_cast: + case This: + case Throw: + case Typeid_: + case Typename_: + case Unsigned: + case Void: + case Wchar: + case LeftParen: + case LeftBracket: + case Plus: + case Minus: + case Star: + case And: + case Or: + case Tilde: + case Not: + case PlusPlus: + case MinusMinus: + case Doublecolon: + case Identifier: + enterOuterAlt(_localctx, 1); + { + setState(1610); + assignmentExpression(); + } + break; + case LeftBrace: + enterOuterAlt(_localctx, 2); + { + setState(1611); + bracedInitList(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class InitializerListContext extends ParserRuleContext { + public List initializerClause() { + return getRuleContexts(InitializerClauseContext.class); + } + public InitializerClauseContext initializerClause(int i) { + return getRuleContext(InitializerClauseContext.class,i); + } + public List Ellipsis() { return getTokens(CPP14Parser.Ellipsis); } + public TerminalNode Ellipsis(int i) { + return getToken(CPP14Parser.Ellipsis, i); + } + public List Comma() { return getTokens(CPP14Parser.Comma); } + public TerminalNode Comma(int i) { + return getToken(CPP14Parser.Comma, i); + } + public InitializerListContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_initializerList; } + } + + public final InitializerListContext initializerList() throws RecognitionException { + InitializerListContext _localctx = new InitializerListContext(_ctx, getState()); + enterRule(_localctx, 270, RULE_initializerList); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + setState(1614); + initializerClause(); + setState(1616); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Ellipsis) { + { + setState(1615); + match(Ellipsis); + } + } + + setState(1625); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,216,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + { + { + setState(1618); + match(Comma); + setState(1619); + initializerClause(); + setState(1621); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Ellipsis) { + { + setState(1620); + match(Ellipsis); + } + } + + } + } + } + setState(1627); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,216,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class BracedInitListContext extends ParserRuleContext { + public TerminalNode LeftBrace() { return getToken(CPP14Parser.LeftBrace, 0); } + public TerminalNode RightBrace() { return getToken(CPP14Parser.RightBrace, 0); } + public InitializerListContext initializerList() { + return getRuleContext(InitializerListContext.class,0); + } + public TerminalNode Comma() { return getToken(CPP14Parser.Comma, 0); } + public BracedInitListContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_bracedInitList; } + } + + public final BracedInitListContext bracedInitList() throws RecognitionException { + BracedInitListContext _localctx = new BracedInitListContext(_ctx, getState()); + enterRule(_localctx, 272, RULE_bracedInitList); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1628); + match(LeftBrace); + setState(1633); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << IntegerLiteral) | (1L << CharacterLiteral) | (1L << FloatingLiteral) | (1L << StringLiteral) | (1L << BooleanLiteral) | (1L << PointerLiteral) | (1L << UserDefinedLiteral) | (1L << Alignof) | (1L << Auto) | (1L << Bool) | (1L << Char) | (1L << Char16) | (1L << Char32) | (1L << Const_cast) | (1L << Decltype) | (1L << Delete) | (1L << Double) | (1L << Dynamic_cast) | (1L << Float) | (1L << Int) | (1L << Long) | (1L << New) | (1L << Noexcept) | (1L << Operator) | (1L << Reinterpret_cast) | (1L << Short) | (1L << Signed) | (1L << Sizeof))) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & ((1L << (Static_cast - 65)) | (1L << (This - 65)) | (1L << (Throw - 65)) | (1L << (Typeid_ - 65)) | (1L << (Typename_ - 65)) | (1L << (Unsigned - 65)) | (1L << (Void - 65)) | (1L << (Wchar - 65)) | (1L << (LeftParen - 65)) | (1L << (LeftBracket - 65)) | (1L << (LeftBrace - 65)) | (1L << (Plus - 65)) | (1L << (Minus - 65)) | (1L << (Star - 65)) | (1L << (And - 65)) | (1L << (Or - 65)) | (1L << (Tilde - 65)) | (1L << (Not - 65)) | (1L << (PlusPlus - 65)) | (1L << (MinusMinus - 65)) | (1L << (Doublecolon - 65)))) != 0) || _la==Identifier) { + { + setState(1629); + initializerList(); + setState(1631); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Comma) { + { + setState(1630); + match(Comma); + } + } + + } + } + + setState(1635); + match(RightBrace); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ClassNameContext extends ParserRuleContext { + public TerminalNode Identifier() { return getToken(CPP14Parser.Identifier, 0); } + public SimpleTemplateIdContext simpleTemplateId() { + return getRuleContext(SimpleTemplateIdContext.class,0); + } + public ClassNameContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_className; } + } + + public final ClassNameContext className() throws RecognitionException { + ClassNameContext _localctx = new ClassNameContext(_ctx, getState()); + enterRule(_localctx, 274, RULE_className); + try { + setState(1639); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,219,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(1637); + match(Identifier); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(1638); + simpleTemplateId(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ClassSpecifierContext extends ParserRuleContext { + public ClassHeadContext classHead() { + return getRuleContext(ClassHeadContext.class,0); + } + public TerminalNode LeftBrace() { return getToken(CPP14Parser.LeftBrace, 0); } + public TerminalNode RightBrace() { return getToken(CPP14Parser.RightBrace, 0); } + public MemberSpecificationContext memberSpecification() { + return getRuleContext(MemberSpecificationContext.class,0); + } + public ClassSpecifierContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_classSpecifier; } + } + + public final ClassSpecifierContext classSpecifier() throws RecognitionException { + ClassSpecifierContext _localctx = new ClassSpecifierContext(_ctx, getState()); + enterRule(_localctx, 276, RULE_classSpecifier); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1641); + classHead(); + setState(1642); + match(LeftBrace); + setState(1644); + _errHandler.sync(this); + _la = _input.LA(1); + if (((((_la - 10)) & ~0x3f) == 0 && ((1L << (_la - 10)) & ((1L << (Alignas - 10)) | (1L << (Auto - 10)) | (1L << (Bool - 10)) | (1L << (Char - 10)) | (1L << (Char16 - 10)) | (1L << (Char32 - 10)) | (1L << (Class - 10)) | (1L << (Const - 10)) | (1L << (Constexpr - 10)) | (1L << (Decltype - 10)) | (1L << (Double - 10)) | (1L << (Enum - 10)) | (1L << (Explicit - 10)) | (1L << (Extern - 10)) | (1L << (Float - 10)) | (1L << (Friend - 10)) | (1L << (Inline - 10)) | (1L << (Int - 10)) | (1L << (Long - 10)) | (1L << (Mutable - 10)) | (1L << (Operator - 10)) | (1L << (Private - 10)) | (1L << (Protected - 10)) | (1L << (Public - 10)) | (1L << (Register - 10)) | (1L << (Short - 10)) | (1L << (Signed - 10)) | (1L << (Static - 10)) | (1L << (Static_assert - 10)) | (1L << (Struct - 10)) | (1L << (Template - 10)) | (1L << (Thread_local - 10)))) != 0) || ((((_la - 74)) & ~0x3f) == 0 && ((1L << (_la - 74)) & ((1L << (Typedef - 74)) | (1L << (Typename_ - 74)) | (1L << (Union - 74)) | (1L << (Unsigned - 74)) | (1L << (Using - 74)) | (1L << (Virtual - 74)) | (1L << (Void - 74)) | (1L << (Volatile - 74)) | (1L << (Wchar - 74)) | (1L << (LeftParen - 74)) | (1L << (LeftBracket - 74)) | (1L << (Star - 74)) | (1L << (And - 74)) | (1L << (Tilde - 74)) | (1L << (AndAnd - 74)) | (1L << (Colon - 74)) | (1L << (Doublecolon - 74)) | (1L << (Semi - 74)) | (1L << (Ellipsis - 74)) | (1L << (Identifier - 74)))) != 0)) { + { + setState(1643); + memberSpecification(); + } + } + + setState(1646); + match(RightBrace); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ClassHeadContext extends ParserRuleContext { + public ClassKeyContext classKey() { + return getRuleContext(ClassKeyContext.class,0); + } + public AttributeSpecifierSeqContext attributeSpecifierSeq() { + return getRuleContext(AttributeSpecifierSeqContext.class,0); + } + public ClassHeadNameContext classHeadName() { + return getRuleContext(ClassHeadNameContext.class,0); + } + public BaseClauseContext baseClause() { + return getRuleContext(BaseClauseContext.class,0); + } + public ClassVirtSpecifierContext classVirtSpecifier() { + return getRuleContext(ClassVirtSpecifierContext.class,0); + } + public TerminalNode Union() { return getToken(CPP14Parser.Union, 0); } + public ClassHeadContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_classHead; } + } + + public final ClassHeadContext classHead() throws RecognitionException { + ClassHeadContext _localctx = new ClassHeadContext(_ctx, getState()); + enterRule(_localctx, 278, RULE_classHead); + int _la; + try { + setState(1671); + _errHandler.sync(this); + switch (_input.LA(1)) { + case Class: + case Struct: + enterOuterAlt(_localctx, 1); + { + setState(1648); + classKey(); + setState(1650); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Alignas || _la==LeftBracket) { + { + setState(1649); + attributeSpecifierSeq(); + } + } + + setState(1656); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Decltype || _la==Doublecolon || _la==Identifier) { + { + setState(1652); + classHeadName(); + setState(1654); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Final) { + { + setState(1653); + classVirtSpecifier(); + } + } + + } + } + + setState(1659); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Colon) { + { + setState(1658); + baseClause(); + } + } + + } + break; + case Union: + enterOuterAlt(_localctx, 2); + { + setState(1661); + match(Union); + setState(1663); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Alignas || _la==LeftBracket) { + { + setState(1662); + attributeSpecifierSeq(); + } + } + + setState(1669); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Decltype || _la==Doublecolon || _la==Identifier) { + { + setState(1665); + classHeadName(); + setState(1667); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Final) { + { + setState(1666); + classVirtSpecifier(); + } + } + + } + } + + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ClassHeadNameContext extends ParserRuleContext { + public ClassNameContext className() { + return getRuleContext(ClassNameContext.class,0); + } + public NestedNameSpecifierContext nestedNameSpecifier() { + return getRuleContext(NestedNameSpecifierContext.class,0); + } + public ClassHeadNameContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_classHeadName; } + } + + public final ClassHeadNameContext classHeadName() throws RecognitionException { + ClassHeadNameContext _localctx = new ClassHeadNameContext(_ctx, getState()); + enterRule(_localctx, 280, RULE_classHeadName); + try { + enterOuterAlt(_localctx, 1); + { + setState(1674); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,229,_ctx) ) { + case 1: + { + setState(1673); + nestedNameSpecifier(0); + } + break; + } + setState(1676); + className(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ClassVirtSpecifierContext extends ParserRuleContext { + public TerminalNode Final() { return getToken(CPP14Parser.Final, 0); } + public ClassVirtSpecifierContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_classVirtSpecifier; } + } + + public final ClassVirtSpecifierContext classVirtSpecifier() throws RecognitionException { + ClassVirtSpecifierContext _localctx = new ClassVirtSpecifierContext(_ctx, getState()); + enterRule(_localctx, 282, RULE_classVirtSpecifier); + try { + enterOuterAlt(_localctx, 1); + { + setState(1678); + match(Final); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ClassKeyContext extends ParserRuleContext { + public TerminalNode Class() { return getToken(CPP14Parser.Class, 0); } + public TerminalNode Struct() { return getToken(CPP14Parser.Struct, 0); } + public ClassKeyContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_classKey; } + } + + public final ClassKeyContext classKey() throws RecognitionException { + ClassKeyContext _localctx = new ClassKeyContext(_ctx, getState()); + enterRule(_localctx, 284, RULE_classKey); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1680); + _la = _input.LA(1); + if ( !(_la==Class || _la==Struct) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class MemberSpecificationContext extends ParserRuleContext { + public List memberdeclaration() { + return getRuleContexts(MemberdeclarationContext.class); + } + public MemberdeclarationContext memberdeclaration(int i) { + return getRuleContext(MemberdeclarationContext.class,i); + } + public List accessSpecifier() { + return getRuleContexts(AccessSpecifierContext.class); + } + public AccessSpecifierContext accessSpecifier(int i) { + return getRuleContext(AccessSpecifierContext.class,i); + } + public List Colon() { return getTokens(CPP14Parser.Colon); } + public TerminalNode Colon(int i) { + return getToken(CPP14Parser.Colon, i); + } + public MemberSpecificationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_memberSpecification; } + } + + public final MemberSpecificationContext memberSpecification() throws RecognitionException { + MemberSpecificationContext _localctx = new MemberSpecificationContext(_ctx, getState()); + enterRule(_localctx, 286, RULE_memberSpecification); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1686); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + setState(1686); + _errHandler.sync(this); + switch (_input.LA(1)) { + case Alignas: + case Auto: + case Bool: + case Char: + case Char16: + case Char32: + case Class: + case Const: + case Constexpr: + case Decltype: + case Double: + case Enum: + case Explicit: + case Extern: + case Float: + case Friend: + case Inline: + case Int: + case Long: + case Mutable: + case Operator: + case Register: + case Short: + case Signed: + case Static: + case Static_assert: + case Struct: + case Template: + case Thread_local: + case Typedef: + case Typename_: + case Union: + case Unsigned: + case Using: + case Virtual: + case Void: + case Volatile: + case Wchar: + case LeftParen: + case LeftBracket: + case Star: + case And: + case Tilde: + case AndAnd: + case Colon: + case Doublecolon: + case Semi: + case Ellipsis: + case Identifier: + { + setState(1682); + memberdeclaration(); + } + break; + case Private: + case Protected: + case Public: + { + setState(1683); + accessSpecifier(); + setState(1684); + match(Colon); + } + break; + default: + throw new NoViableAltException(this); + } + } + setState(1688); + _errHandler.sync(this); + _la = _input.LA(1); + } while ( ((((_la - 10)) & ~0x3f) == 0 && ((1L << (_la - 10)) & ((1L << (Alignas - 10)) | (1L << (Auto - 10)) | (1L << (Bool - 10)) | (1L << (Char - 10)) | (1L << (Char16 - 10)) | (1L << (Char32 - 10)) | (1L << (Class - 10)) | (1L << (Const - 10)) | (1L << (Constexpr - 10)) | (1L << (Decltype - 10)) | (1L << (Double - 10)) | (1L << (Enum - 10)) | (1L << (Explicit - 10)) | (1L << (Extern - 10)) | (1L << (Float - 10)) | (1L << (Friend - 10)) | (1L << (Inline - 10)) | (1L << (Int - 10)) | (1L << (Long - 10)) | (1L << (Mutable - 10)) | (1L << (Operator - 10)) | (1L << (Private - 10)) | (1L << (Protected - 10)) | (1L << (Public - 10)) | (1L << (Register - 10)) | (1L << (Short - 10)) | (1L << (Signed - 10)) | (1L << (Static - 10)) | (1L << (Static_assert - 10)) | (1L << (Struct - 10)) | (1L << (Template - 10)) | (1L << (Thread_local - 10)))) != 0) || ((((_la - 74)) & ~0x3f) == 0 && ((1L << (_la - 74)) & ((1L << (Typedef - 74)) | (1L << (Typename_ - 74)) | (1L << (Union - 74)) | (1L << (Unsigned - 74)) | (1L << (Using - 74)) | (1L << (Virtual - 74)) | (1L << (Void - 74)) | (1L << (Volatile - 74)) | (1L << (Wchar - 74)) | (1L << (LeftParen - 74)) | (1L << (LeftBracket - 74)) | (1L << (Star - 74)) | (1L << (And - 74)) | (1L << (Tilde - 74)) | (1L << (AndAnd - 74)) | (1L << (Colon - 74)) | (1L << (Doublecolon - 74)) | (1L << (Semi - 74)) | (1L << (Ellipsis - 74)) | (1L << (Identifier - 74)))) != 0) ); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class MemberdeclarationContext extends ParserRuleContext { + public TerminalNode Semi() { return getToken(CPP14Parser.Semi, 0); } + public AttributeSpecifierSeqContext attributeSpecifierSeq() { + return getRuleContext(AttributeSpecifierSeqContext.class,0); + } + public DeclSpecifierSeqContext declSpecifierSeq() { + return getRuleContext(DeclSpecifierSeqContext.class,0); + } + public MemberDeclaratorListContext memberDeclaratorList() { + return getRuleContext(MemberDeclaratorListContext.class,0); + } + public FunctionDefinitionContext functionDefinition() { + return getRuleContext(FunctionDefinitionContext.class,0); + } + public UsingDeclarationContext usingDeclaration() { + return getRuleContext(UsingDeclarationContext.class,0); + } + public StaticAssertDeclarationContext staticAssertDeclaration() { + return getRuleContext(StaticAssertDeclarationContext.class,0); + } + public TemplateDeclarationContext templateDeclaration() { + return getRuleContext(TemplateDeclarationContext.class,0); + } + public AliasDeclarationContext aliasDeclaration() { + return getRuleContext(AliasDeclarationContext.class,0); + } + public EmptyDeclarationContext emptyDeclaration() { + return getRuleContext(EmptyDeclarationContext.class,0); + } + public MemberdeclarationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_memberdeclaration; } + } + + public final MemberdeclarationContext memberdeclaration() throws RecognitionException { + MemberdeclarationContext _localctx = new MemberdeclarationContext(_ctx, getState()); + enterRule(_localctx, 288, RULE_memberdeclaration); + int _la; + try { + setState(1706); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,235,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(1691); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,232,_ctx) ) { + case 1: + { + setState(1690); + attributeSpecifierSeq(); + } + break; + } + setState(1694); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,233,_ctx) ) { + case 1: + { + setState(1693); + declSpecifierSeq(); + } + break; + } + setState(1697); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << Alignas) | (1L << Decltype) | (1L << Operator))) != 0) || ((((_la - 85)) & ~0x3f) == 0 && ((1L << (_la - 85)) & ((1L << (LeftParen - 85)) | (1L << (LeftBracket - 85)) | (1L << (Star - 85)) | (1L << (And - 85)) | (1L << (Tilde - 85)) | (1L << (AndAnd - 85)) | (1L << (Colon - 85)) | (1L << (Doublecolon - 85)) | (1L << (Ellipsis - 85)) | (1L << (Identifier - 85)))) != 0)) { + { + setState(1696); + memberDeclaratorList(); + } + } + + setState(1699); + match(Semi); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(1700); + functionDefinition(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(1701); + usingDeclaration(); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(1702); + staticAssertDeclaration(); + } + break; + case 5: + enterOuterAlt(_localctx, 5); + { + setState(1703); + templateDeclaration(); + } + break; + case 6: + enterOuterAlt(_localctx, 6); + { + setState(1704); + aliasDeclaration(); + } + break; + case 7: + enterOuterAlt(_localctx, 7); + { + setState(1705); + emptyDeclaration(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class MemberDeclaratorListContext extends ParserRuleContext { + public List memberDeclarator() { + return getRuleContexts(MemberDeclaratorContext.class); + } + public MemberDeclaratorContext memberDeclarator(int i) { + return getRuleContext(MemberDeclaratorContext.class,i); + } + public List Comma() { return getTokens(CPP14Parser.Comma); } + public TerminalNode Comma(int i) { + return getToken(CPP14Parser.Comma, i); + } + public MemberDeclaratorListContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_memberDeclaratorList; } + } + + public final MemberDeclaratorListContext memberDeclaratorList() throws RecognitionException { + MemberDeclaratorListContext _localctx = new MemberDeclaratorListContext(_ctx, getState()); + enterRule(_localctx, 290, RULE_memberDeclaratorList); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1708); + memberDeclarator(); + setState(1713); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==Comma) { + { + { + setState(1709); + match(Comma); + setState(1710); + memberDeclarator(); + } + } + setState(1715); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class MemberDeclaratorContext extends ParserRuleContext { + public DeclaratorContext declarator() { + return getRuleContext(DeclaratorContext.class,0); + } + public VirtualSpecifierSeqContext virtualSpecifierSeq() { + return getRuleContext(VirtualSpecifierSeqContext.class,0); + } + public PureSpecifierContext pureSpecifier() { + return getRuleContext(PureSpecifierContext.class,0); + } + public BraceOrEqualInitializerContext braceOrEqualInitializer() { + return getRuleContext(BraceOrEqualInitializerContext.class,0); + } + public TerminalNode Colon() { return getToken(CPP14Parser.Colon, 0); } + public ConstantExpressionContext constantExpression() { + return getRuleContext(ConstantExpressionContext.class,0); + } + public TerminalNode Identifier() { return getToken(CPP14Parser.Identifier, 0); } + public AttributeSpecifierSeqContext attributeSpecifierSeq() { + return getRuleContext(AttributeSpecifierSeqContext.class,0); + } + public MemberDeclaratorContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_memberDeclarator; } + } + + public final MemberDeclaratorContext memberDeclarator() throws RecognitionException { + MemberDeclaratorContext _localctx = new MemberDeclaratorContext(_ctx, getState()); + enterRule(_localctx, 292, RULE_memberDeclarator); + int _la; + try { + setState(1736); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,243,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(1716); + declarator(); + setState(1726); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,240,_ctx) ) { + case 1: + { + setState(1718); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Final || _la==Override) { + { + setState(1717); + virtualSpecifierSeq(); + } + } + + setState(1721); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Assign) { + { + setState(1720); + pureSpecifier(); + } + } + + } + break; + case 2: + { + setState(1724); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==LeftBrace || _la==Assign) { + { + setState(1723); + braceOrEqualInitializer(); + } + } + + } + break; + } + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(1729); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Identifier) { + { + setState(1728); + match(Identifier); + } + } + + setState(1732); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Alignas || _la==LeftBracket) { + { + setState(1731); + attributeSpecifierSeq(); + } + } + + setState(1734); + match(Colon); + setState(1735); + constantExpression(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class VirtualSpecifierSeqContext extends ParserRuleContext { + public List virtualSpecifier() { + return getRuleContexts(VirtualSpecifierContext.class); + } + public VirtualSpecifierContext virtualSpecifier(int i) { + return getRuleContext(VirtualSpecifierContext.class,i); + } + public VirtualSpecifierSeqContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_virtualSpecifierSeq; } + } + + public final VirtualSpecifierSeqContext virtualSpecifierSeq() throws RecognitionException { + VirtualSpecifierSeqContext _localctx = new VirtualSpecifierSeqContext(_ctx, getState()); + enterRule(_localctx, 294, RULE_virtualSpecifierSeq); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1739); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + { + setState(1738); + virtualSpecifier(); + } + } + setState(1741); + _errHandler.sync(this); + _la = _input.LA(1); + } while ( _la==Final || _la==Override ); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class VirtualSpecifierContext extends ParserRuleContext { + public TerminalNode Override() { return getToken(CPP14Parser.Override, 0); } + public TerminalNode Final() { return getToken(CPP14Parser.Final, 0); } + public VirtualSpecifierContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_virtualSpecifier; } + } + + public final VirtualSpecifierContext virtualSpecifier() throws RecognitionException { + VirtualSpecifierContext _localctx = new VirtualSpecifierContext(_ctx, getState()); + enterRule(_localctx, 296, RULE_virtualSpecifier); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1743); + _la = _input.LA(1); + if ( !(_la==Final || _la==Override) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class PureSpecifierContext extends ParserRuleContext { + public Token val; + public TerminalNode Assign() { return getToken(CPP14Parser.Assign, 0); } + public TerminalNode OctalLiteral() { return getToken(CPP14Parser.OctalLiteral, 0); } + public PureSpecifierContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_pureSpecifier; } + } + + public final PureSpecifierContext pureSpecifier() throws RecognitionException { + PureSpecifierContext _localctx = new PureSpecifierContext(_ctx, getState()); + enterRule(_localctx, 298, RULE_pureSpecifier); + try { + enterOuterAlt(_localctx, 1); + { + setState(1745); + match(Assign); + setState(1746); + ((PureSpecifierContext)_localctx).val = match(OctalLiteral); + if((((PureSpecifierContext)_localctx).val!=null?((PureSpecifierContext)_localctx).val.getText():null).compareTo("0")!=0) throw new InputMismatchException(this); + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class BaseClauseContext extends ParserRuleContext { + public TerminalNode Colon() { return getToken(CPP14Parser.Colon, 0); } + public BaseSpecifierListContext baseSpecifierList() { + return getRuleContext(BaseSpecifierListContext.class,0); + } + public BaseClauseContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_baseClause; } + } + + public final BaseClauseContext baseClause() throws RecognitionException { + BaseClauseContext _localctx = new BaseClauseContext(_ctx, getState()); + enterRule(_localctx, 300, RULE_baseClause); + try { + enterOuterAlt(_localctx, 1); + { + setState(1749); + match(Colon); + setState(1750); + baseSpecifierList(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class BaseSpecifierListContext extends ParserRuleContext { + public List baseSpecifier() { + return getRuleContexts(BaseSpecifierContext.class); + } + public BaseSpecifierContext baseSpecifier(int i) { + return getRuleContext(BaseSpecifierContext.class,i); + } + public List Ellipsis() { return getTokens(CPP14Parser.Ellipsis); } + public TerminalNode Ellipsis(int i) { + return getToken(CPP14Parser.Ellipsis, i); + } + public List Comma() { return getTokens(CPP14Parser.Comma); } + public TerminalNode Comma(int i) { + return getToken(CPP14Parser.Comma, i); + } + public BaseSpecifierListContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_baseSpecifierList; } + } + + public final BaseSpecifierListContext baseSpecifierList() throws RecognitionException { + BaseSpecifierListContext _localctx = new BaseSpecifierListContext(_ctx, getState()); + enterRule(_localctx, 302, RULE_baseSpecifierList); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1752); + baseSpecifier(); + setState(1754); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Ellipsis) { + { + setState(1753); + match(Ellipsis); + } + } + + setState(1763); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==Comma) { + { + { + setState(1756); + match(Comma); + setState(1757); + baseSpecifier(); + setState(1759); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Ellipsis) { + { + setState(1758); + match(Ellipsis); + } + } + + } + } + setState(1765); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class BaseSpecifierContext extends ParserRuleContext { + public BaseTypeSpecifierContext baseTypeSpecifier() { + return getRuleContext(BaseTypeSpecifierContext.class,0); + } + public TerminalNode Virtual() { return getToken(CPP14Parser.Virtual, 0); } + public AccessSpecifierContext accessSpecifier() { + return getRuleContext(AccessSpecifierContext.class,0); + } + public AttributeSpecifierSeqContext attributeSpecifierSeq() { + return getRuleContext(AttributeSpecifierSeqContext.class,0); + } + public BaseSpecifierContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_baseSpecifier; } + } + + public final BaseSpecifierContext baseSpecifier() throws RecognitionException { + BaseSpecifierContext _localctx = new BaseSpecifierContext(_ctx, getState()); + enterRule(_localctx, 304, RULE_baseSpecifier); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1767); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Alignas || _la==LeftBracket) { + { + setState(1766); + attributeSpecifierSeq(); + } + } + + setState(1781); + _errHandler.sync(this); + switch (_input.LA(1)) { + case Decltype: + case Doublecolon: + case Identifier: + { + setState(1769); + baseTypeSpecifier(); + } + break; + case Virtual: + { + setState(1770); + match(Virtual); + setState(1772); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << Private) | (1L << Protected) | (1L << Public))) != 0)) { + { + setState(1771); + accessSpecifier(); + } + } + + setState(1774); + baseTypeSpecifier(); + } + break; + case Private: + case Protected: + case Public: + { + setState(1775); + accessSpecifier(); + setState(1777); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Virtual) { + { + setState(1776); + match(Virtual); + } + } + + setState(1779); + baseTypeSpecifier(); + } + break; + default: + throw new NoViableAltException(this); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ClassOrDeclTypeContext extends ParserRuleContext { + public ClassNameContext className() { + return getRuleContext(ClassNameContext.class,0); + } + public NestedNameSpecifierContext nestedNameSpecifier() { + return getRuleContext(NestedNameSpecifierContext.class,0); + } + public DecltypeSpecifierContext decltypeSpecifier() { + return getRuleContext(DecltypeSpecifierContext.class,0); + } + public ClassOrDeclTypeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_classOrDeclType; } + } + + public final ClassOrDeclTypeContext classOrDeclType() throws RecognitionException { + ClassOrDeclTypeContext _localctx = new ClassOrDeclTypeContext(_ctx, getState()); + enterRule(_localctx, 306, RULE_classOrDeclType); + try { + setState(1788); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,253,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(1784); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,252,_ctx) ) { + case 1: + { + setState(1783); + nestedNameSpecifier(0); + } + break; + } + setState(1786); + className(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(1787); + decltypeSpecifier(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class BaseTypeSpecifierContext extends ParserRuleContext { + public ClassOrDeclTypeContext classOrDeclType() { + return getRuleContext(ClassOrDeclTypeContext.class,0); + } + public BaseTypeSpecifierContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_baseTypeSpecifier; } + } + + public final BaseTypeSpecifierContext baseTypeSpecifier() throws RecognitionException { + BaseTypeSpecifierContext _localctx = new BaseTypeSpecifierContext(_ctx, getState()); + enterRule(_localctx, 308, RULE_baseTypeSpecifier); + try { + enterOuterAlt(_localctx, 1); + { + setState(1790); + classOrDeclType(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class AccessSpecifierContext extends ParserRuleContext { + public TerminalNode Private() { return getToken(CPP14Parser.Private, 0); } + public TerminalNode Protected() { return getToken(CPP14Parser.Protected, 0); } + public TerminalNode Public() { return getToken(CPP14Parser.Public, 0); } + public AccessSpecifierContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_accessSpecifier; } + } + + public final AccessSpecifierContext accessSpecifier() throws RecognitionException { + AccessSpecifierContext _localctx = new AccessSpecifierContext(_ctx, getState()); + enterRule(_localctx, 310, RULE_accessSpecifier); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1792); + _la = _input.LA(1); + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << Private) | (1L << Protected) | (1L << Public))) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ConversionFunctionIdContext extends ParserRuleContext { + public TerminalNode Operator() { return getToken(CPP14Parser.Operator, 0); } + public ConversionTypeIdContext conversionTypeId() { + return getRuleContext(ConversionTypeIdContext.class,0); + } + public ConversionFunctionIdContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_conversionFunctionId; } + } + + public final ConversionFunctionIdContext conversionFunctionId() throws RecognitionException { + ConversionFunctionIdContext _localctx = new ConversionFunctionIdContext(_ctx, getState()); + enterRule(_localctx, 312, RULE_conversionFunctionId); + try { + enterOuterAlt(_localctx, 1); + { + setState(1794); + match(Operator); + setState(1795); + conversionTypeId(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ConversionTypeIdContext extends ParserRuleContext { + public TypeSpecifierSeqContext typeSpecifierSeq() { + return getRuleContext(TypeSpecifierSeqContext.class,0); + } + public ConversionDeclaratorContext conversionDeclarator() { + return getRuleContext(ConversionDeclaratorContext.class,0); + } + public ConversionTypeIdContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_conversionTypeId; } + } + + public final ConversionTypeIdContext conversionTypeId() throws RecognitionException { + ConversionTypeIdContext _localctx = new ConversionTypeIdContext(_ctx, getState()); + enterRule(_localctx, 314, RULE_conversionTypeId); + try { + enterOuterAlt(_localctx, 1); + { + setState(1797); + typeSpecifierSeq(); + setState(1799); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,254,_ctx) ) { + case 1: + { + setState(1798); + conversionDeclarator(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ConversionDeclaratorContext extends ParserRuleContext { + public PointerOperatorContext pointerOperator() { + return getRuleContext(PointerOperatorContext.class,0); + } + public ConversionDeclaratorContext conversionDeclarator() { + return getRuleContext(ConversionDeclaratorContext.class,0); + } + public ConversionDeclaratorContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_conversionDeclarator; } + } + + public final ConversionDeclaratorContext conversionDeclarator() throws RecognitionException { + ConversionDeclaratorContext _localctx = new ConversionDeclaratorContext(_ctx, getState()); + enterRule(_localctx, 316, RULE_conversionDeclarator); + try { + enterOuterAlt(_localctx, 1); + { + setState(1801); + pointerOperator(); + setState(1803); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,255,_ctx) ) { + case 1: + { + setState(1802); + conversionDeclarator(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ConstructorInitializerContext extends ParserRuleContext { + public TerminalNode Colon() { return getToken(CPP14Parser.Colon, 0); } + public MemInitializerListContext memInitializerList() { + return getRuleContext(MemInitializerListContext.class,0); + } + public ConstructorInitializerContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_constructorInitializer; } + } + + public final ConstructorInitializerContext constructorInitializer() throws RecognitionException { + ConstructorInitializerContext _localctx = new ConstructorInitializerContext(_ctx, getState()); + enterRule(_localctx, 318, RULE_constructorInitializer); + try { + enterOuterAlt(_localctx, 1); + { + setState(1805); + match(Colon); + setState(1806); + memInitializerList(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class MemInitializerListContext extends ParserRuleContext { + public List memInitializer() { + return getRuleContexts(MemInitializerContext.class); + } + public MemInitializerContext memInitializer(int i) { + return getRuleContext(MemInitializerContext.class,i); + } + public List Ellipsis() { return getTokens(CPP14Parser.Ellipsis); } + public TerminalNode Ellipsis(int i) { + return getToken(CPP14Parser.Ellipsis, i); + } + public List Comma() { return getTokens(CPP14Parser.Comma); } + public TerminalNode Comma(int i) { + return getToken(CPP14Parser.Comma, i); + } + public MemInitializerListContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_memInitializerList; } + } + + public final MemInitializerListContext memInitializerList() throws RecognitionException { + MemInitializerListContext _localctx = new MemInitializerListContext(_ctx, getState()); + enterRule(_localctx, 320, RULE_memInitializerList); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1808); + memInitializer(); + setState(1810); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Ellipsis) { + { + setState(1809); + match(Ellipsis); + } + } + + setState(1819); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==Comma) { + { + { + setState(1812); + match(Comma); + setState(1813); + memInitializer(); + setState(1815); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Ellipsis) { + { + setState(1814); + match(Ellipsis); + } + } + + } + } + setState(1821); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class MemInitializerContext extends ParserRuleContext { + public MeminitializeridContext meminitializerid() { + return getRuleContext(MeminitializeridContext.class,0); + } + public TerminalNode LeftParen() { return getToken(CPP14Parser.LeftParen, 0); } + public TerminalNode RightParen() { return getToken(CPP14Parser.RightParen, 0); } + public BracedInitListContext bracedInitList() { + return getRuleContext(BracedInitListContext.class,0); + } + public ExpressionListContext expressionList() { + return getRuleContext(ExpressionListContext.class,0); + } + public MemInitializerContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_memInitializer; } + } + + public final MemInitializerContext memInitializer() throws RecognitionException { + MemInitializerContext _localctx = new MemInitializerContext(_ctx, getState()); + enterRule(_localctx, 322, RULE_memInitializer); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1822); + meminitializerid(); + setState(1829); + _errHandler.sync(this); + switch (_input.LA(1)) { + case LeftParen: + { + setState(1823); + match(LeftParen); + setState(1825); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << IntegerLiteral) | (1L << CharacterLiteral) | (1L << FloatingLiteral) | (1L << StringLiteral) | (1L << BooleanLiteral) | (1L << PointerLiteral) | (1L << UserDefinedLiteral) | (1L << Alignof) | (1L << Auto) | (1L << Bool) | (1L << Char) | (1L << Char16) | (1L << Char32) | (1L << Const_cast) | (1L << Decltype) | (1L << Delete) | (1L << Double) | (1L << Dynamic_cast) | (1L << Float) | (1L << Int) | (1L << Long) | (1L << New) | (1L << Noexcept) | (1L << Operator) | (1L << Reinterpret_cast) | (1L << Short) | (1L << Signed) | (1L << Sizeof))) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & ((1L << (Static_cast - 65)) | (1L << (This - 65)) | (1L << (Throw - 65)) | (1L << (Typeid_ - 65)) | (1L << (Typename_ - 65)) | (1L << (Unsigned - 65)) | (1L << (Void - 65)) | (1L << (Wchar - 65)) | (1L << (LeftParen - 65)) | (1L << (LeftBracket - 65)) | (1L << (LeftBrace - 65)) | (1L << (Plus - 65)) | (1L << (Minus - 65)) | (1L << (Star - 65)) | (1L << (And - 65)) | (1L << (Or - 65)) | (1L << (Tilde - 65)) | (1L << (Not - 65)) | (1L << (PlusPlus - 65)) | (1L << (MinusMinus - 65)) | (1L << (Doublecolon - 65)))) != 0) || _la==Identifier) { + { + setState(1824); + expressionList(); + } + } + + setState(1827); + match(RightParen); + } + break; + case LeftBrace: + { + setState(1828); + bracedInitList(); + } + break; + default: + throw new NoViableAltException(this); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class MeminitializeridContext extends ParserRuleContext { + public ClassOrDeclTypeContext classOrDeclType() { + return getRuleContext(ClassOrDeclTypeContext.class,0); + } + public TerminalNode Identifier() { return getToken(CPP14Parser.Identifier, 0); } + public MeminitializeridContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_meminitializerid; } + } + + public final MeminitializeridContext meminitializerid() throws RecognitionException { + MeminitializeridContext _localctx = new MeminitializeridContext(_ctx, getState()); + enterRule(_localctx, 324, RULE_meminitializerid); + try { + setState(1833); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,261,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(1831); + classOrDeclType(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(1832); + match(Identifier); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class OperatorFunctionIdContext extends ParserRuleContext { + public TerminalNode Operator() { return getToken(CPP14Parser.Operator, 0); } + public TheOperatorContext theOperator() { + return getRuleContext(TheOperatorContext.class,0); + } + public OperatorFunctionIdContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_operatorFunctionId; } + } + + public final OperatorFunctionIdContext operatorFunctionId() throws RecognitionException { + OperatorFunctionIdContext _localctx = new OperatorFunctionIdContext(_ctx, getState()); + enterRule(_localctx, 326, RULE_operatorFunctionId); + try { + enterOuterAlt(_localctx, 1); + { + setState(1835); + match(Operator); + setState(1836); + theOperator(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class LiteralOperatorIdContext extends ParserRuleContext { + public TerminalNode Operator() { return getToken(CPP14Parser.Operator, 0); } + public TerminalNode StringLiteral() { return getToken(CPP14Parser.StringLiteral, 0); } + public TerminalNode Identifier() { return getToken(CPP14Parser.Identifier, 0); } + public TerminalNode UserDefinedStringLiteral() { return getToken(CPP14Parser.UserDefinedStringLiteral, 0); } + public LiteralOperatorIdContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_literalOperatorId; } + } + + public final LiteralOperatorIdContext literalOperatorId() throws RecognitionException { + LiteralOperatorIdContext _localctx = new LiteralOperatorIdContext(_ctx, getState()); + enterRule(_localctx, 328, RULE_literalOperatorId); + try { + enterOuterAlt(_localctx, 1); + { + setState(1838); + match(Operator); + setState(1842); + _errHandler.sync(this); + switch (_input.LA(1)) { + case StringLiteral: + { + setState(1839); + match(StringLiteral); + setState(1840); + match(Identifier); + } + break; + case UserDefinedStringLiteral: + { + setState(1841); + match(UserDefinedStringLiteral); + } + break; + default: + throw new NoViableAltException(this); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TemplateDeclarationContext extends ParserRuleContext { + public TerminalNode Template() { return getToken(CPP14Parser.Template, 0); } + public TerminalNode Less() { return getToken(CPP14Parser.Less, 0); } + public TemplateparameterListContext templateparameterList() { + return getRuleContext(TemplateparameterListContext.class,0); + } + public TerminalNode Greater() { return getToken(CPP14Parser.Greater, 0); } + public DeclarationContext declaration() { + return getRuleContext(DeclarationContext.class,0); + } + public TemplateDeclarationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_templateDeclaration; } + } + + public final TemplateDeclarationContext templateDeclaration() throws RecognitionException { + TemplateDeclarationContext _localctx = new TemplateDeclarationContext(_ctx, getState()); + enterRule(_localctx, 330, RULE_templateDeclaration); + try { + enterOuterAlt(_localctx, 1); + { + setState(1844); + match(Template); + setState(1845); + match(Less); + setState(1846); + templateparameterList(); + setState(1847); + match(Greater); + setState(1848); + declaration(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TemplateparameterListContext extends ParserRuleContext { + public List templateParameter() { + return getRuleContexts(TemplateParameterContext.class); + } + public TemplateParameterContext templateParameter(int i) { + return getRuleContext(TemplateParameterContext.class,i); + } + public List Comma() { return getTokens(CPP14Parser.Comma); } + public TerminalNode Comma(int i) { + return getToken(CPP14Parser.Comma, i); + } + public TemplateparameterListContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_templateparameterList; } + } + + public final TemplateparameterListContext templateparameterList() throws RecognitionException { + TemplateparameterListContext _localctx = new TemplateparameterListContext(_ctx, getState()); + enterRule(_localctx, 332, RULE_templateparameterList); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1850); + templateParameter(); + setState(1855); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==Comma) { + { + { + setState(1851); + match(Comma); + setState(1852); + templateParameter(); + } + } + setState(1857); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TemplateParameterContext extends ParserRuleContext { + public TypeParameterContext typeParameter() { + return getRuleContext(TypeParameterContext.class,0); + } + public ParameterDeclarationContext parameterDeclaration() { + return getRuleContext(ParameterDeclarationContext.class,0); + } + public TemplateParameterContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_templateParameter; } + } + + public final TemplateParameterContext templateParameter() throws RecognitionException { + TemplateParameterContext _localctx = new TemplateParameterContext(_ctx, getState()); + enterRule(_localctx, 334, RULE_templateParameter); + try { + setState(1860); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,264,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(1858); + typeParameter(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(1859); + parameterDeclaration(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TypeParameterContext extends ParserRuleContext { + public TerminalNode Class() { return getToken(CPP14Parser.Class, 0); } + public TerminalNode Typename_() { return getToken(CPP14Parser.Typename_, 0); } + public TerminalNode Assign() { return getToken(CPP14Parser.Assign, 0); } + public TheTypeIdContext theTypeId() { + return getRuleContext(TheTypeIdContext.class,0); + } + public TerminalNode Template() { return getToken(CPP14Parser.Template, 0); } + public TerminalNode Less() { return getToken(CPP14Parser.Less, 0); } + public TemplateparameterListContext templateparameterList() { + return getRuleContext(TemplateparameterListContext.class,0); + } + public TerminalNode Greater() { return getToken(CPP14Parser.Greater, 0); } + public TerminalNode Ellipsis() { return getToken(CPP14Parser.Ellipsis, 0); } + public TerminalNode Identifier() { return getToken(CPP14Parser.Identifier, 0); } + public TypeParameterContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_typeParameter; } + } + + public final TypeParameterContext typeParameter() throws RecognitionException { + TypeParameterContext _localctx = new TypeParameterContext(_ctx, getState()); + enterRule(_localctx, 336, RULE_typeParameter); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1871); + _errHandler.sync(this); + switch (_input.LA(1)) { + case Class: + case Template: + { + setState(1867); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Template) { + { + setState(1862); + match(Template); + setState(1863); + match(Less); + setState(1864); + templateparameterList(); + setState(1865); + match(Greater); + } + } + + setState(1869); + match(Class); + } + break; + case Typename_: + { + setState(1870); + match(Typename_); + } + break; + default: + throw new NoViableAltException(this); + } + setState(1884); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,270,_ctx) ) { + case 1: + { + { + setState(1874); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Ellipsis) { + { + setState(1873); + match(Ellipsis); + } + } + + setState(1877); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Identifier) { + { + setState(1876); + match(Identifier); + } + } + + } + } + break; + case 2: + { + { + setState(1880); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Identifier) { + { + setState(1879); + match(Identifier); + } + } + + setState(1882); + match(Assign); + setState(1883); + theTypeId(); + } + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class SimpleTemplateIdContext extends ParserRuleContext { + public TemplateNameContext templateName() { + return getRuleContext(TemplateNameContext.class,0); + } + public TerminalNode Less() { return getToken(CPP14Parser.Less, 0); } + public TerminalNode Greater() { return getToken(CPP14Parser.Greater, 0); } + public TemplateArgumentListContext templateArgumentList() { + return getRuleContext(TemplateArgumentListContext.class,0); + } + public SimpleTemplateIdContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_simpleTemplateId; } + } + + public final SimpleTemplateIdContext simpleTemplateId() throws RecognitionException { + SimpleTemplateIdContext _localctx = new SimpleTemplateIdContext(_ctx, getState()); + enterRule(_localctx, 338, RULE_simpleTemplateId); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1886); + templateName(); + setState(1887); + match(Less); + setState(1889); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << IntegerLiteral) | (1L << CharacterLiteral) | (1L << FloatingLiteral) | (1L << StringLiteral) | (1L << BooleanLiteral) | (1L << PointerLiteral) | (1L << UserDefinedLiteral) | (1L << Alignof) | (1L << Auto) | (1L << Bool) | (1L << Char) | (1L << Char16) | (1L << Char32) | (1L << Class) | (1L << Const) | (1L << Const_cast) | (1L << Decltype) | (1L << Delete) | (1L << Double) | (1L << Dynamic_cast) | (1L << Enum) | (1L << Float) | (1L << Int) | (1L << Long) | (1L << New) | (1L << Noexcept) | (1L << Operator) | (1L << Reinterpret_cast) | (1L << Short) | (1L << Signed) | (1L << Sizeof))) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & ((1L << (Static_cast - 65)) | (1L << (Struct - 65)) | (1L << (This - 65)) | (1L << (Typeid_ - 65)) | (1L << (Typename_ - 65)) | (1L << (Union - 65)) | (1L << (Unsigned - 65)) | (1L << (Void - 65)) | (1L << (Volatile - 65)) | (1L << (Wchar - 65)) | (1L << (LeftParen - 65)) | (1L << (LeftBracket - 65)) | (1L << (Plus - 65)) | (1L << (Minus - 65)) | (1L << (Star - 65)) | (1L << (And - 65)) | (1L << (Or - 65)) | (1L << (Tilde - 65)) | (1L << (Not - 65)) | (1L << (PlusPlus - 65)) | (1L << (MinusMinus - 65)) | (1L << (Doublecolon - 65)))) != 0) || _la==Identifier) { + { + setState(1888); + templateArgumentList(); + } + } + + setState(1891); + match(Greater); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TemplateIdContext extends ParserRuleContext { + public SimpleTemplateIdContext simpleTemplateId() { + return getRuleContext(SimpleTemplateIdContext.class,0); + } + public TerminalNode Less() { return getToken(CPP14Parser.Less, 0); } + public TerminalNode Greater() { return getToken(CPP14Parser.Greater, 0); } + public OperatorFunctionIdContext operatorFunctionId() { + return getRuleContext(OperatorFunctionIdContext.class,0); + } + public LiteralOperatorIdContext literalOperatorId() { + return getRuleContext(LiteralOperatorIdContext.class,0); + } + public TemplateArgumentListContext templateArgumentList() { + return getRuleContext(TemplateArgumentListContext.class,0); + } + public TemplateIdContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_templateId; } + } + + public final TemplateIdContext templateId() throws RecognitionException { + TemplateIdContext _localctx = new TemplateIdContext(_ctx, getState()); + enterRule(_localctx, 340, RULE_templateId); + int _la; + try { + setState(1904); + _errHandler.sync(this); + switch (_input.LA(1)) { + case Identifier: + enterOuterAlt(_localctx, 1); + { + setState(1893); + simpleTemplateId(); + } + break; + case Operator: + enterOuterAlt(_localctx, 2); + { + setState(1896); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,272,_ctx) ) { + case 1: + { + setState(1894); + operatorFunctionId(); + } + break; + case 2: + { + setState(1895); + literalOperatorId(); + } + break; + } + setState(1898); + match(Less); + setState(1900); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << IntegerLiteral) | (1L << CharacterLiteral) | (1L << FloatingLiteral) | (1L << StringLiteral) | (1L << BooleanLiteral) | (1L << PointerLiteral) | (1L << UserDefinedLiteral) | (1L << Alignof) | (1L << Auto) | (1L << Bool) | (1L << Char) | (1L << Char16) | (1L << Char32) | (1L << Class) | (1L << Const) | (1L << Const_cast) | (1L << Decltype) | (1L << Delete) | (1L << Double) | (1L << Dynamic_cast) | (1L << Enum) | (1L << Float) | (1L << Int) | (1L << Long) | (1L << New) | (1L << Noexcept) | (1L << Operator) | (1L << Reinterpret_cast) | (1L << Short) | (1L << Signed) | (1L << Sizeof))) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & ((1L << (Static_cast - 65)) | (1L << (Struct - 65)) | (1L << (This - 65)) | (1L << (Typeid_ - 65)) | (1L << (Typename_ - 65)) | (1L << (Union - 65)) | (1L << (Unsigned - 65)) | (1L << (Void - 65)) | (1L << (Volatile - 65)) | (1L << (Wchar - 65)) | (1L << (LeftParen - 65)) | (1L << (LeftBracket - 65)) | (1L << (Plus - 65)) | (1L << (Minus - 65)) | (1L << (Star - 65)) | (1L << (And - 65)) | (1L << (Or - 65)) | (1L << (Tilde - 65)) | (1L << (Not - 65)) | (1L << (PlusPlus - 65)) | (1L << (MinusMinus - 65)) | (1L << (Doublecolon - 65)))) != 0) || _la==Identifier) { + { + setState(1899); + templateArgumentList(); + } + } + + setState(1902); + match(Greater); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TemplateNameContext extends ParserRuleContext { + public TerminalNode Identifier() { return getToken(CPP14Parser.Identifier, 0); } + public TemplateNameContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_templateName; } + } + + public final TemplateNameContext templateName() throws RecognitionException { + TemplateNameContext _localctx = new TemplateNameContext(_ctx, getState()); + enterRule(_localctx, 342, RULE_templateName); + try { + enterOuterAlt(_localctx, 1); + { + setState(1906); + match(Identifier); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TemplateArgumentListContext extends ParserRuleContext { + public List templateArgument() { + return getRuleContexts(TemplateArgumentContext.class); + } + public TemplateArgumentContext templateArgument(int i) { + return getRuleContext(TemplateArgumentContext.class,i); + } + public List Ellipsis() { return getTokens(CPP14Parser.Ellipsis); } + public TerminalNode Ellipsis(int i) { + return getToken(CPP14Parser.Ellipsis, i); + } + public List Comma() { return getTokens(CPP14Parser.Comma); } + public TerminalNode Comma(int i) { + return getToken(CPP14Parser.Comma, i); + } + public TemplateArgumentListContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_templateArgumentList; } + } + + public final TemplateArgumentListContext templateArgumentList() throws RecognitionException { + TemplateArgumentListContext _localctx = new TemplateArgumentListContext(_ctx, getState()); + enterRule(_localctx, 344, RULE_templateArgumentList); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1908); + templateArgument(); + setState(1910); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Ellipsis) { + { + setState(1909); + match(Ellipsis); + } + } + + setState(1919); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==Comma) { + { + { + setState(1912); + match(Comma); + setState(1913); + templateArgument(); + setState(1915); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Ellipsis) { + { + setState(1914); + match(Ellipsis); + } + } + + } + } + setState(1921); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TemplateArgumentContext extends ParserRuleContext { + public TheTypeIdContext theTypeId() { + return getRuleContext(TheTypeIdContext.class,0); + } + public ConstantExpressionContext constantExpression() { + return getRuleContext(ConstantExpressionContext.class,0); + } + public IdExpressionContext idExpression() { + return getRuleContext(IdExpressionContext.class,0); + } + public TemplateArgumentContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_templateArgument; } + } + + public final TemplateArgumentContext templateArgument() throws RecognitionException { + TemplateArgumentContext _localctx = new TemplateArgumentContext(_ctx, getState()); + enterRule(_localctx, 346, RULE_templateArgument); + try { + setState(1925); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,278,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(1922); + theTypeId(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(1923); + constantExpression(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(1924); + idExpression(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TypeNameSpecifierContext extends ParserRuleContext { + public TerminalNode Typename_() { return getToken(CPP14Parser.Typename_, 0); } + public NestedNameSpecifierContext nestedNameSpecifier() { + return getRuleContext(NestedNameSpecifierContext.class,0); + } + public TerminalNode Identifier() { return getToken(CPP14Parser.Identifier, 0); } + public SimpleTemplateIdContext simpleTemplateId() { + return getRuleContext(SimpleTemplateIdContext.class,0); + } + public TerminalNode Template() { return getToken(CPP14Parser.Template, 0); } + public TypeNameSpecifierContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_typeNameSpecifier; } + } + + public final TypeNameSpecifierContext typeNameSpecifier() throws RecognitionException { + TypeNameSpecifierContext _localctx = new TypeNameSpecifierContext(_ctx, getState()); + enterRule(_localctx, 348, RULE_typeNameSpecifier); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1927); + match(Typename_); + setState(1928); + nestedNameSpecifier(0); + setState(1934); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,280,_ctx) ) { + case 1: + { + setState(1929); + match(Identifier); + } + break; + case 2: + { + setState(1931); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Template) { + { + setState(1930); + match(Template); + } + } + + setState(1933); + simpleTemplateId(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ExplicitInstantiationContext extends ParserRuleContext { + public TerminalNode Template() { return getToken(CPP14Parser.Template, 0); } + public DeclarationContext declaration() { + return getRuleContext(DeclarationContext.class,0); + } + public TerminalNode Extern() { return getToken(CPP14Parser.Extern, 0); } + public ExplicitInstantiationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_explicitInstantiation; } + } + + public final ExplicitInstantiationContext explicitInstantiation() throws RecognitionException { + ExplicitInstantiationContext _localctx = new ExplicitInstantiationContext(_ctx, getState()); + enterRule(_localctx, 350, RULE_explicitInstantiation); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1937); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Extern) { + { + setState(1936); + match(Extern); + } + } + + setState(1939); + match(Template); + setState(1940); + declaration(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ExplicitSpecializationContext extends ParserRuleContext { + public TerminalNode Template() { return getToken(CPP14Parser.Template, 0); } + public TerminalNode Less() { return getToken(CPP14Parser.Less, 0); } + public TerminalNode Greater() { return getToken(CPP14Parser.Greater, 0); } + public DeclarationContext declaration() { + return getRuleContext(DeclarationContext.class,0); + } + public ExplicitSpecializationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_explicitSpecialization; } + } + + public final ExplicitSpecializationContext explicitSpecialization() throws RecognitionException { + ExplicitSpecializationContext _localctx = new ExplicitSpecializationContext(_ctx, getState()); + enterRule(_localctx, 352, RULE_explicitSpecialization); + try { + enterOuterAlt(_localctx, 1); + { + setState(1942); + match(Template); + setState(1943); + match(Less); + setState(1944); + match(Greater); + setState(1945); + declaration(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TryBlockContext extends ParserRuleContext { + public TerminalNode Try() { return getToken(CPP14Parser.Try, 0); } + public CompoundStatementContext compoundStatement() { + return getRuleContext(CompoundStatementContext.class,0); + } + public HandlerSeqContext handlerSeq() { + return getRuleContext(HandlerSeqContext.class,0); + } + public TryBlockContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_tryBlock; } + } + + public final TryBlockContext tryBlock() throws RecognitionException { + TryBlockContext _localctx = new TryBlockContext(_ctx, getState()); + enterRule(_localctx, 354, RULE_tryBlock); + try { + enterOuterAlt(_localctx, 1); + { + setState(1947); + match(Try); + setState(1948); + compoundStatement(); + setState(1949); + handlerSeq(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class FunctionTryBlockContext extends ParserRuleContext { + public TerminalNode Try() { return getToken(CPP14Parser.Try, 0); } + public CompoundStatementContext compoundStatement() { + return getRuleContext(CompoundStatementContext.class,0); + } + public HandlerSeqContext handlerSeq() { + return getRuleContext(HandlerSeqContext.class,0); + } + public ConstructorInitializerContext constructorInitializer() { + return getRuleContext(ConstructorInitializerContext.class,0); + } + public FunctionTryBlockContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_functionTryBlock; } + } + + public final FunctionTryBlockContext functionTryBlock() throws RecognitionException { + FunctionTryBlockContext _localctx = new FunctionTryBlockContext(_ctx, getState()); + enterRule(_localctx, 356, RULE_functionTryBlock); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1951); + match(Try); + setState(1953); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Colon) { + { + setState(1952); + constructorInitializer(); + } + } + + setState(1955); + compoundStatement(); + setState(1956); + handlerSeq(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class HandlerSeqContext extends ParserRuleContext { + public List handler() { + return getRuleContexts(HandlerContext.class); + } + public HandlerContext handler(int i) { + return getRuleContext(HandlerContext.class,i); + } + public HandlerSeqContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_handlerSeq; } + } + + public final HandlerSeqContext handlerSeq() throws RecognitionException { + HandlerSeqContext _localctx = new HandlerSeqContext(_ctx, getState()); + enterRule(_localctx, 358, RULE_handlerSeq); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1959); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + { + setState(1958); + handler(); + } + } + setState(1961); + _errHandler.sync(this); + _la = _input.LA(1); + } while ( _la==Catch ); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class HandlerContext extends ParserRuleContext { + public TerminalNode Catch() { return getToken(CPP14Parser.Catch, 0); } + public TerminalNode LeftParen() { return getToken(CPP14Parser.LeftParen, 0); } + public ExceptionDeclarationContext exceptionDeclaration() { + return getRuleContext(ExceptionDeclarationContext.class,0); + } + public TerminalNode RightParen() { return getToken(CPP14Parser.RightParen, 0); } + public CompoundStatementContext compoundStatement() { + return getRuleContext(CompoundStatementContext.class,0); + } + public HandlerContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_handler; } + } + + public final HandlerContext handler() throws RecognitionException { + HandlerContext _localctx = new HandlerContext(_ctx, getState()); + enterRule(_localctx, 360, RULE_handler); + try { + enterOuterAlt(_localctx, 1); + { + setState(1963); + match(Catch); + setState(1964); + match(LeftParen); + setState(1965); + exceptionDeclaration(); + setState(1966); + match(RightParen); + setState(1967); + compoundStatement(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ExceptionDeclarationContext extends ParserRuleContext { + public TypeSpecifierSeqContext typeSpecifierSeq() { + return getRuleContext(TypeSpecifierSeqContext.class,0); + } + public AttributeSpecifierSeqContext attributeSpecifierSeq() { + return getRuleContext(AttributeSpecifierSeqContext.class,0); + } + public DeclaratorContext declarator() { + return getRuleContext(DeclaratorContext.class,0); + } + public AbstractDeclaratorContext abstractDeclarator() { + return getRuleContext(AbstractDeclaratorContext.class,0); + } + public TerminalNode Ellipsis() { return getToken(CPP14Parser.Ellipsis, 0); } + public ExceptionDeclarationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_exceptionDeclaration; } + } + + public final ExceptionDeclarationContext exceptionDeclaration() throws RecognitionException { + ExceptionDeclarationContext _localctx = new ExceptionDeclarationContext(_ctx, getState()); + enterRule(_localctx, 362, RULE_exceptionDeclaration); + int _la; + try { + setState(1978); + _errHandler.sync(this); + switch (_input.LA(1)) { + case Alignas: + case Auto: + case Bool: + case Char: + case Char16: + case Char32: + case Class: + case Const: + case Decltype: + case Double: + case Enum: + case Float: + case Int: + case Long: + case Short: + case Signed: + case Struct: + case Typename_: + case Union: + case Unsigned: + case Void: + case Volatile: + case Wchar: + case LeftBracket: + case Doublecolon: + case Identifier: + enterOuterAlt(_localctx, 1); + { + setState(1970); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Alignas || _la==LeftBracket) { + { + setState(1969); + attributeSpecifierSeq(); + } + } + + setState(1972); + typeSpecifierSeq(); + setState(1975); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,285,_ctx) ) { + case 1: + { + setState(1973); + declarator(); + } + break; + case 2: + { + setState(1974); + abstractDeclarator(); + } + break; + } + } + break; + case Ellipsis: + enterOuterAlt(_localctx, 2); + { + setState(1977); + match(Ellipsis); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ThrowExpressionContext extends ParserRuleContext { + public TerminalNode Throw() { return getToken(CPP14Parser.Throw, 0); } + public AssignmentExpressionContext assignmentExpression() { + return getRuleContext(AssignmentExpressionContext.class,0); + } + public ThrowExpressionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_throwExpression; } + } + + public final ThrowExpressionContext throwExpression() throws RecognitionException { + ThrowExpressionContext _localctx = new ThrowExpressionContext(_ctx, getState()); + enterRule(_localctx, 364, RULE_throwExpression); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1980); + match(Throw); + setState(1982); + _errHandler.sync(this); + _la = _input.LA(1); + if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << IntegerLiteral) | (1L << CharacterLiteral) | (1L << FloatingLiteral) | (1L << StringLiteral) | (1L << BooleanLiteral) | (1L << PointerLiteral) | (1L << UserDefinedLiteral) | (1L << Alignof) | (1L << Auto) | (1L << Bool) | (1L << Char) | (1L << Char16) | (1L << Char32) | (1L << Const_cast) | (1L << Decltype) | (1L << Delete) | (1L << Double) | (1L << Dynamic_cast) | (1L << Float) | (1L << Int) | (1L << Long) | (1L << New) | (1L << Noexcept) | (1L << Operator) | (1L << Reinterpret_cast) | (1L << Short) | (1L << Signed) | (1L << Sizeof))) != 0) || ((((_la - 65)) & ~0x3f) == 0 && ((1L << (_la - 65)) & ((1L << (Static_cast - 65)) | (1L << (This - 65)) | (1L << (Throw - 65)) | (1L << (Typeid_ - 65)) | (1L << (Typename_ - 65)) | (1L << (Unsigned - 65)) | (1L << (Void - 65)) | (1L << (Wchar - 65)) | (1L << (LeftParen - 65)) | (1L << (LeftBracket - 65)) | (1L << (Plus - 65)) | (1L << (Minus - 65)) | (1L << (Star - 65)) | (1L << (And - 65)) | (1L << (Or - 65)) | (1L << (Tilde - 65)) | (1L << (Not - 65)) | (1L << (PlusPlus - 65)) | (1L << (MinusMinus - 65)) | (1L << (Doublecolon - 65)))) != 0) || _la==Identifier) { + { + setState(1981); + assignmentExpression(); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ExceptionSpecificationContext extends ParserRuleContext { + public DynamicExceptionSpecificationContext dynamicExceptionSpecification() { + return getRuleContext(DynamicExceptionSpecificationContext.class,0); + } + public NoeExceptSpecificationContext noeExceptSpecification() { + return getRuleContext(NoeExceptSpecificationContext.class,0); + } + public ExceptionSpecificationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_exceptionSpecification; } + } + + public final ExceptionSpecificationContext exceptionSpecification() throws RecognitionException { + ExceptionSpecificationContext _localctx = new ExceptionSpecificationContext(_ctx, getState()); + enterRule(_localctx, 366, RULE_exceptionSpecification); + try { + setState(1986); + _errHandler.sync(this); + switch (_input.LA(1)) { + case Throw: + enterOuterAlt(_localctx, 1); + { + setState(1984); + dynamicExceptionSpecification(); + } + break; + case Noexcept: + enterOuterAlt(_localctx, 2); + { + setState(1985); + noeExceptSpecification(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class DynamicExceptionSpecificationContext extends ParserRuleContext { + public TerminalNode Throw() { return getToken(CPP14Parser.Throw, 0); } + public TerminalNode LeftParen() { return getToken(CPP14Parser.LeftParen, 0); } + public TerminalNode RightParen() { return getToken(CPP14Parser.RightParen, 0); } + public TypeIdListContext typeIdList() { + return getRuleContext(TypeIdListContext.class,0); + } + public DynamicExceptionSpecificationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_dynamicExceptionSpecification; } + } + + public final DynamicExceptionSpecificationContext dynamicExceptionSpecification() throws RecognitionException { + DynamicExceptionSpecificationContext _localctx = new DynamicExceptionSpecificationContext(_ctx, getState()); + enterRule(_localctx, 368, RULE_dynamicExceptionSpecification); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1988); + match(Throw); + setState(1989); + match(LeftParen); + setState(1991); + _errHandler.sync(this); + _la = _input.LA(1); + if (((((_la - 13)) & ~0x3f) == 0 && ((1L << (_la - 13)) & ((1L << (Auto - 13)) | (1L << (Bool - 13)) | (1L << (Char - 13)) | (1L << (Char16 - 13)) | (1L << (Char32 - 13)) | (1L << (Class - 13)) | (1L << (Const - 13)) | (1L << (Decltype - 13)) | (1L << (Double - 13)) | (1L << (Enum - 13)) | (1L << (Float - 13)) | (1L << (Int - 13)) | (1L << (Long - 13)) | (1L << (Short - 13)) | (1L << (Signed - 13)) | (1L << (Struct - 13)) | (1L << (Typename_ - 13)))) != 0) || ((((_la - 77)) & ~0x3f) == 0 && ((1L << (_la - 77)) & ((1L << (Union - 77)) | (1L << (Unsigned - 77)) | (1L << (Void - 77)) | (1L << (Volatile - 77)) | (1L << (Wchar - 77)) | (1L << (Doublecolon - 77)) | (1L << (Identifier - 77)))) != 0)) { + { + setState(1990); + typeIdList(); + } + } + + setState(1993); + match(RightParen); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TypeIdListContext extends ParserRuleContext { + public List theTypeId() { + return getRuleContexts(TheTypeIdContext.class); + } + public TheTypeIdContext theTypeId(int i) { + return getRuleContext(TheTypeIdContext.class,i); + } + public List Ellipsis() { return getTokens(CPP14Parser.Ellipsis); } + public TerminalNode Ellipsis(int i) { + return getToken(CPP14Parser.Ellipsis, i); + } + public List Comma() { return getTokens(CPP14Parser.Comma); } + public TerminalNode Comma(int i) { + return getToken(CPP14Parser.Comma, i); + } + public TypeIdListContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_typeIdList; } + } + + public final TypeIdListContext typeIdList() throws RecognitionException { + TypeIdListContext _localctx = new TypeIdListContext(_ctx, getState()); + enterRule(_localctx, 370, RULE_typeIdList); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(1995); + theTypeId(); + setState(1997); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Ellipsis) { + { + setState(1996); + match(Ellipsis); + } + } + + setState(2006); + _errHandler.sync(this); + _la = _input.LA(1); + while (_la==Comma) { + { + { + setState(1999); + match(Comma); + setState(2000); + theTypeId(); + setState(2002); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==Ellipsis) { + { + setState(2001); + match(Ellipsis); + } + } + + } + } + setState(2008); + _errHandler.sync(this); + _la = _input.LA(1); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class NoeExceptSpecificationContext extends ParserRuleContext { + public TerminalNode Noexcept() { return getToken(CPP14Parser.Noexcept, 0); } + public TerminalNode LeftParen() { return getToken(CPP14Parser.LeftParen, 0); } + public ConstantExpressionContext constantExpression() { + return getRuleContext(ConstantExpressionContext.class,0); + } + public TerminalNode RightParen() { return getToken(CPP14Parser.RightParen, 0); } + public NoeExceptSpecificationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_noeExceptSpecification; } + } + + public final NoeExceptSpecificationContext noeExceptSpecification() throws RecognitionException { + NoeExceptSpecificationContext _localctx = new NoeExceptSpecificationContext(_ctx, getState()); + enterRule(_localctx, 372, RULE_noeExceptSpecification); + try { + setState(2015); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,293,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(2009); + match(Noexcept); + setState(2010); + match(LeftParen); + setState(2011); + constantExpression(); + setState(2012); + match(RightParen); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(2014); + match(Noexcept); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TheOperatorContext extends ParserRuleContext { + public TerminalNode New() { return getToken(CPP14Parser.New, 0); } + public TerminalNode LeftBracket() { return getToken(CPP14Parser.LeftBracket, 0); } + public TerminalNode RightBracket() { return getToken(CPP14Parser.RightBracket, 0); } + public TerminalNode Delete() { return getToken(CPP14Parser.Delete, 0); } + public TerminalNode Plus() { return getToken(CPP14Parser.Plus, 0); } + public TerminalNode Minus() { return getToken(CPP14Parser.Minus, 0); } + public TerminalNode Star() { return getToken(CPP14Parser.Star, 0); } + public TerminalNode Div() { return getToken(CPP14Parser.Div, 0); } + public TerminalNode Mod() { return getToken(CPP14Parser.Mod, 0); } + public TerminalNode Caret() { return getToken(CPP14Parser.Caret, 0); } + public TerminalNode And() { return getToken(CPP14Parser.And, 0); } + public TerminalNode Or() { return getToken(CPP14Parser.Or, 0); } + public TerminalNode Tilde() { return getToken(CPP14Parser.Tilde, 0); } + public TerminalNode Not() { return getToken(CPP14Parser.Not, 0); } + public TerminalNode Assign() { return getToken(CPP14Parser.Assign, 0); } + public List Greater() { return getTokens(CPP14Parser.Greater); } + public TerminalNode Greater(int i) { + return getToken(CPP14Parser.Greater, i); + } + public List Less() { return getTokens(CPP14Parser.Less); } + public TerminalNode Less(int i) { + return getToken(CPP14Parser.Less, i); + } + public TerminalNode GreaterEqual() { return getToken(CPP14Parser.GreaterEqual, 0); } + public TerminalNode PlusAssign() { return getToken(CPP14Parser.PlusAssign, 0); } + public TerminalNode MinusAssign() { return getToken(CPP14Parser.MinusAssign, 0); } + public TerminalNode StarAssign() { return getToken(CPP14Parser.StarAssign, 0); } + public TerminalNode ModAssign() { return getToken(CPP14Parser.ModAssign, 0); } + public TerminalNode XorAssign() { return getToken(CPP14Parser.XorAssign, 0); } + public TerminalNode AndAssign() { return getToken(CPP14Parser.AndAssign, 0); } + public TerminalNode OrAssign() { return getToken(CPP14Parser.OrAssign, 0); } + public TerminalNode RightShiftAssign() { return getToken(CPP14Parser.RightShiftAssign, 0); } + public TerminalNode LeftShiftAssign() { return getToken(CPP14Parser.LeftShiftAssign, 0); } + public TerminalNode Equal() { return getToken(CPP14Parser.Equal, 0); } + public TerminalNode NotEqual() { return getToken(CPP14Parser.NotEqual, 0); } + public TerminalNode LessEqual() { return getToken(CPP14Parser.LessEqual, 0); } + public TerminalNode AndAnd() { return getToken(CPP14Parser.AndAnd, 0); } + public TerminalNode OrOr() { return getToken(CPP14Parser.OrOr, 0); } + public TerminalNode PlusPlus() { return getToken(CPP14Parser.PlusPlus, 0); } + public TerminalNode MinusMinus() { return getToken(CPP14Parser.MinusMinus, 0); } + public TerminalNode Comma() { return getToken(CPP14Parser.Comma, 0); } + public TerminalNode ArrowStar() { return getToken(CPP14Parser.ArrowStar, 0); } + public TerminalNode Arrow() { return getToken(CPP14Parser.Arrow, 0); } + public TerminalNode LeftParen() { return getToken(CPP14Parser.LeftParen, 0); } + public TerminalNode RightParen() { return getToken(CPP14Parser.RightParen, 0); } + public TheOperatorContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_theOperator; } + } + + public final TheOperatorContext theOperator() throws RecognitionException { + TheOperatorContext _localctx = new TheOperatorContext(_ctx, getState()); + enterRule(_localctx, 374, RULE_theOperator); + try { + setState(2070); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,296,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(2017); + match(New); + setState(2020); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,294,_ctx) ) { + case 1: + { + setState(2018); + match(LeftBracket); + setState(2019); + match(RightBracket); + } + break; + } + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(2022); + match(Delete); + setState(2025); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,295,_ctx) ) { + case 1: + { + setState(2023); + match(LeftBracket); + setState(2024); + match(RightBracket); + } + break; + } + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(2027); + match(Plus); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(2028); + match(Minus); + } + break; + case 5: + enterOuterAlt(_localctx, 5); + { + setState(2029); + match(Star); + } + break; + case 6: + enterOuterAlt(_localctx, 6); + { + setState(2030); + match(Div); + } + break; + case 7: + enterOuterAlt(_localctx, 7); + { + setState(2031); + match(Mod); + } + break; + case 8: + enterOuterAlt(_localctx, 8); + { + setState(2032); + match(Caret); + } + break; + case 9: + enterOuterAlt(_localctx, 9); + { + setState(2033); + match(And); + } + break; + case 10: + enterOuterAlt(_localctx, 10); + { + setState(2034); + match(Or); + } + break; + case 11: + enterOuterAlt(_localctx, 11); + { + setState(2035); + match(Tilde); + } + break; + case 12: + enterOuterAlt(_localctx, 12); + { + setState(2036); + match(Not); + } + break; + case 13: + enterOuterAlt(_localctx, 13); + { + setState(2037); + match(Assign); + } + break; + case 14: + enterOuterAlt(_localctx, 14); + { + setState(2038); + match(Greater); + } + break; + case 15: + enterOuterAlt(_localctx, 15); + { + setState(2039); + match(Less); + } + break; + case 16: + enterOuterAlt(_localctx, 16); + { + setState(2040); + match(GreaterEqual); + } + break; + case 17: + enterOuterAlt(_localctx, 17); + { + setState(2041); + match(PlusAssign); + } + break; + case 18: + enterOuterAlt(_localctx, 18); + { + setState(2042); + match(MinusAssign); + } + break; + case 19: + enterOuterAlt(_localctx, 19); + { + setState(2043); + match(StarAssign); + } + break; + case 20: + enterOuterAlt(_localctx, 20); + { + setState(2044); + match(Assign); + } + break; + case 21: + enterOuterAlt(_localctx, 21); + { + setState(2045); + match(ModAssign); + } + break; + case 22: + enterOuterAlt(_localctx, 22); + { + setState(2046); + match(XorAssign); + } + break; + case 23: + enterOuterAlt(_localctx, 23); + { + setState(2047); + match(AndAssign); + } + break; + case 24: + enterOuterAlt(_localctx, 24); + { + setState(2048); + match(OrAssign); + } + break; + case 25: + enterOuterAlt(_localctx, 25); + { + setState(2049); + match(Less); + setState(2050); + match(Less); + } + break; + case 26: + enterOuterAlt(_localctx, 26); + { + setState(2051); + match(Greater); + setState(2052); + match(Greater); + } + break; + case 27: + enterOuterAlt(_localctx, 27); + { + setState(2053); + match(RightShiftAssign); + } + break; + case 28: + enterOuterAlt(_localctx, 28); + { + setState(2054); + match(LeftShiftAssign); + } + break; + case 29: + enterOuterAlt(_localctx, 29); + { + setState(2055); + match(Equal); + } + break; + case 30: + enterOuterAlt(_localctx, 30); + { + setState(2056); + match(NotEqual); + } + break; + case 31: + enterOuterAlt(_localctx, 31); + { + setState(2057); + match(LessEqual); + } + break; + case 32: + enterOuterAlt(_localctx, 32); + { + setState(2058); + match(GreaterEqual); + } + break; + case 33: + enterOuterAlt(_localctx, 33); + { + setState(2059); + match(AndAnd); + } + break; + case 34: + enterOuterAlt(_localctx, 34); + { + setState(2060); + match(OrOr); + } + break; + case 35: + enterOuterAlt(_localctx, 35); + { + setState(2061); + match(PlusPlus); + } + break; + case 36: + enterOuterAlt(_localctx, 36); + { + setState(2062); + match(MinusMinus); + } + break; + case 37: + enterOuterAlt(_localctx, 37); + { + setState(2063); + match(Comma); + } + break; + case 38: + enterOuterAlt(_localctx, 38); + { + setState(2064); + match(ArrowStar); + } + break; + case 39: + enterOuterAlt(_localctx, 39); + { + setState(2065); + match(Arrow); + } + break; + case 40: + enterOuterAlt(_localctx, 40); + { + setState(2066); + match(LeftParen); + setState(2067); + match(RightParen); + } + break; + case 41: + enterOuterAlt(_localctx, 41); + { + setState(2068); + match(LeftBracket); + setState(2069); + match(RightBracket); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class LiteralContext extends ParserRuleContext { + public TerminalNode IntegerLiteral() { return getToken(CPP14Parser.IntegerLiteral, 0); } + public TerminalNode CharacterLiteral() { return getToken(CPP14Parser.CharacterLiteral, 0); } + public TerminalNode FloatingLiteral() { return getToken(CPP14Parser.FloatingLiteral, 0); } + public TerminalNode StringLiteral() { return getToken(CPP14Parser.StringLiteral, 0); } + public TerminalNode BooleanLiteral() { return getToken(CPP14Parser.BooleanLiteral, 0); } + public TerminalNode PointerLiteral() { return getToken(CPP14Parser.PointerLiteral, 0); } + public TerminalNode UserDefinedLiteral() { return getToken(CPP14Parser.UserDefinedLiteral, 0); } + public LiteralContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_literal; } + } + + public final LiteralContext literal() throws RecognitionException { + LiteralContext _localctx = new LiteralContext(_ctx, getState()); + enterRule(_localctx, 376, RULE_literal); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(2072); + _la = _input.LA(1); + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << IntegerLiteral) | (1L << CharacterLiteral) | (1L << FloatingLiteral) | (1L << StringLiteral) | (1L << BooleanLiteral) | (1L << PointerLiteral) | (1L << UserDefinedLiteral))) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) { + switch (ruleIndex) { + case 5: + return nestedNameSpecifier_sempred((NestedNameSpecifierContext)_localctx, predIndex); + case 15: + return postfixExpression_sempred((PostfixExpressionContext)_localctx, predIndex); + case 25: + return noPointerNewDeclarator_sempred((NoPointerNewDeclaratorContext)_localctx, predIndex); + case 113: + return noPointerDeclarator_sempred((NoPointerDeclaratorContext)_localctx, predIndex); + case 124: + return noPointerAbstractDeclarator_sempred((NoPointerAbstractDeclaratorContext)_localctx, predIndex); + case 126: + return noPointerAbstractPackDeclarator_sempred((NoPointerAbstractPackDeclaratorContext)_localctx, predIndex); + } + return true; + } + private boolean nestedNameSpecifier_sempred(NestedNameSpecifierContext _localctx, int predIndex) { + switch (predIndex) { + case 0: + return precpred(_ctx, 1); + } + return true; + } + private boolean postfixExpression_sempred(PostfixExpressionContext _localctx, int predIndex) { + switch (predIndex) { + case 1: + return precpred(_ctx, 7); + case 2: + return precpred(_ctx, 6); + case 3: + return precpred(_ctx, 4); + case 4: + return precpred(_ctx, 3); + } + return true; + } + private boolean noPointerNewDeclarator_sempred(NoPointerNewDeclaratorContext _localctx, int predIndex) { + switch (predIndex) { + case 5: + return precpred(_ctx, 1); + } + return true; + } + private boolean noPointerDeclarator_sempred(NoPointerDeclaratorContext _localctx, int predIndex) { + switch (predIndex) { + case 6: + return precpred(_ctx, 2); + } + return true; + } + private boolean noPointerAbstractDeclarator_sempred(NoPointerAbstractDeclaratorContext _localctx, int predIndex) { + switch (predIndex) { + case 7: + return precpred(_ctx, 4); + } + return true; + } + private boolean noPointerAbstractPackDeclarator_sempred(NoPointerAbstractPackDeclaratorContext _localctx, int predIndex) { + switch (predIndex) { + case 8: + return precpred(_ctx, 2); + } + return true; + } + + public static final String _serializedATN = + "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\u0093\u081d\4\2\t"+ + "\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13"+ + "\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"+ + "\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31\t\31"+ + "\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36\4\37\t\37\4 \t \4!"+ + "\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t+\4"+ + ",\t,\4-\t-\4.\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64\t"+ + "\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:\4;\t;\4<\t<\4=\t="+ + "\4>\t>\4?\t?\4@\t@\4A\tA\4B\tB\4C\tC\4D\tD\4E\tE\4F\tF\4G\tG\4H\tH\4I"+ + "\tI\4J\tJ\4K\tK\4L\tL\4M\tM\4N\tN\4O\tO\4P\tP\4Q\tQ\4R\tR\4S\tS\4T\tT"+ + "\4U\tU\4V\tV\4W\tW\4X\tX\4Y\tY\4Z\tZ\4[\t[\4\\\t\\\4]\t]\4^\t^\4_\t_\4"+ + "`\t`\4a\ta\4b\tb\4c\tc\4d\td\4e\te\4f\tf\4g\tg\4h\th\4i\ti\4j\tj\4k\t"+ + "k\4l\tl\4m\tm\4n\tn\4o\to\4p\tp\4q\tq\4r\tr\4s\ts\4t\tt\4u\tu\4v\tv\4"+ + "w\tw\4x\tx\4y\ty\4z\tz\4{\t{\4|\t|\4}\t}\4~\t~\4\177\t\177\4\u0080\t\u0080"+ + "\4\u0081\t\u0081\4\u0082\t\u0082\4\u0083\t\u0083\4\u0084\t\u0084\4\u0085"+ + "\t\u0085\4\u0086\t\u0086\4\u0087\t\u0087\4\u0088\t\u0088\4\u0089\t\u0089"+ + "\4\u008a\t\u008a\4\u008b\t\u008b\4\u008c\t\u008c\4\u008d\t\u008d\4\u008e"+ + "\t\u008e\4\u008f\t\u008f\4\u0090\t\u0090\4\u0091\t\u0091\4\u0092\t\u0092"+ + "\4\u0093\t\u0093\4\u0094\t\u0094\4\u0095\t\u0095\4\u0096\t\u0096\4\u0097"+ + "\t\u0097\4\u0098\t\u0098\4\u0099\t\u0099\4\u009a\t\u009a\4\u009b\t\u009b"+ + "\4\u009c\t\u009c\4\u009d\t\u009d\4\u009e\t\u009e\4\u009f\t\u009f\4\u00a0"+ + "\t\u00a0\4\u00a1\t\u00a1\4\u00a2\t\u00a2\4\u00a3\t\u00a3\4\u00a4\t\u00a4"+ + "\4\u00a5\t\u00a5\4\u00a6\t\u00a6\4\u00a7\t\u00a7\4\u00a8\t\u00a8\4\u00a9"+ + "\t\u00a9\4\u00aa\t\u00aa\4\u00ab\t\u00ab\4\u00ac\t\u00ac\4\u00ad\t\u00ad"+ + "\4\u00ae\t\u00ae\4\u00af\t\u00af\4\u00b0\t\u00b0\4\u00b1\t\u00b1\4\u00b2"+ + "\t\u00b2\4\u00b3\t\u00b3\4\u00b4\t\u00b4\4\u00b5\t\u00b5\4\u00b6\t\u00b6"+ + "\4\u00b7\t\u00b7\4\u00b8\t\u00b8\4\u00b9\t\u00b9\4\u00ba\t\u00ba\4\u00bb"+ + "\t\u00bb\4\u00bc\t\u00bc\4\u00bd\t\u00bd\4\u00be\t\u00be\3\2\5\2\u017e"+ + "\n\2\3\2\3\2\3\3\6\3\u0183\n\3\r\3\16\3\u0184\3\3\3\3\3\3\3\3\3\3\3\3"+ + "\3\3\5\3\u018e\n\3\3\4\3\4\5\4\u0192\n\4\3\5\3\5\3\5\3\5\3\5\3\5\3\5\5"+ + "\5\u019b\n\5\3\5\5\5\u019e\n\5\3\6\3\6\5\6\u01a2\n\6\3\6\3\6\3\7\3\7\3"+ + "\7\3\7\5\7\u01aa\n\7\3\7\3\7\3\7\3\7\3\7\5\7\u01b1\n\7\3\7\5\7\u01b4\n"+ + "\7\3\7\7\7\u01b7\n\7\f\7\16\7\u01ba\13\7\3\b\3\b\5\b\u01be\n\b\3\b\3\b"+ + "\3\t\3\t\5\t\u01c4\n\t\3\t\3\t\3\n\3\n\3\n\3\n\5\n\u01cc\n\n\5\n\u01ce"+ + "\n\n\3\13\3\13\3\f\3\f\3\f\7\f\u01d5\n\f\f\f\16\f\u01d8\13\f\3\f\5\f\u01db"+ + "\n\f\3\r\3\r\5\r\u01df\n\r\3\16\5\16\u01e2\n\16\3\16\3\16\5\16\u01e6\n"+ + "\16\3\17\5\17\u01e9\n\17\3\17\3\17\3\17\3\20\3\20\5\20\u01f0\n\20\3\20"+ + "\3\20\5\20\u01f4\n\20\3\20\5\20\u01f7\n\20\3\20\5\20\u01fa\n\20\3\20\5"+ + "\20\u01fd\n\20\3\21\3\21\3\21\3\21\5\21\u0203\n\21\3\21\3\21\5\21\u0207"+ + "\n\21\3\21\3\21\5\21\u020b\n\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21\3\21"+ + "\3\21\3\21\3\21\3\21\5\21\u0219\n\21\3\21\3\21\5\21\u021d\n\21\3\21\3"+ + "\21\3\21\3\21\5\21\u0223\n\21\3\21\3\21\3\21\3\21\3\21\5\21\u022a\n\21"+ + "\3\21\3\21\3\21\3\21\5\21\u0230\n\21\3\21\3\21\5\21\u0234\n\21\3\21\3"+ + "\21\7\21\u0238\n\21\f\21\16\21\u023b\13\21\3\22\3\22\3\23\3\23\3\24\5"+ + "\24\u0242\n\24\3\24\3\24\3\24\5\24\u0247\n\24\3\24\3\24\3\24\3\24\3\24"+ + "\3\24\3\24\3\24\3\24\3\24\3\24\5\24\u0254\n\24\3\25\3\25\3\25\3\25\3\25"+ + "\5\25\u025b\n\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\5\25"+ + "\u0267\n\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\3\25\5\25\u0271\n\25\3"+ + "\26\3\26\3\27\5\27\u0276\n\27\3\27\3\27\5\27\u027a\n\27\3\27\3\27\3\27"+ + "\3\27\3\27\5\27\u0281\n\27\3\27\5\27\u0284\n\27\3\30\3\30\3\30\3\30\3"+ + "\31\3\31\5\31\u028c\n\31\3\32\3\32\5\32\u0290\n\32\3\32\5\32\u0293\n\32"+ + "\3\33\3\33\3\33\3\33\3\33\5\33\u029a\n\33\3\33\3\33\3\33\3\33\3\33\5\33"+ + "\u02a1\n\33\7\33\u02a3\n\33\f\33\16\33\u02a6\13\33\3\34\3\34\5\34\u02aa"+ + "\n\34\3\34\3\34\5\34\u02ae\n\34\3\35\5\35\u02b1\n\35\3\35\3\35\3\35\5"+ + "\35\u02b6\n\35\3\35\3\35\3\36\3\36\3\36\3\36\3\36\3\37\3\37\3\37\3\37"+ + "\3\37\3\37\5\37\u02c5\n\37\3 \3 \3 \7 \u02ca\n \f \16 \u02cd\13 \3!\3"+ + "!\3!\7!\u02d2\n!\f!\16!\u02d5\13!\3\"\3\"\3\"\7\"\u02da\n\"\f\"\16\"\u02dd"+ + "\13\"\3#\3#\3#\3#\7#\u02e3\n#\f#\16#\u02e6\13#\3$\3$\3$\3$\5$\u02ec\n"+ + "$\3%\3%\3%\7%\u02f1\n%\f%\16%\u02f4\13%\3&\3&\3&\7&\u02f9\n&\f&\16&\u02fc"+ + "\13&\3\'\3\'\3\'\7\'\u0301\n\'\f\'\16\'\u0304\13\'\3(\3(\3(\7(\u0309\n"+ + "(\f(\16(\u030c\13(\3)\3)\3)\7)\u0311\n)\f)\16)\u0314\13)\3*\3*\3*\7*\u0319"+ + "\n*\f*\16*\u031c\13*\3+\3+\3+\7+\u0321\n+\f+\16+\u0324\13+\3,\3,\3,\3"+ + ",\3,\3,\5,\u032c\n,\3-\3-\3-\3-\3-\3-\5-\u0334\n-\3.\3.\3/\3/\3/\7/\u033b"+ + "\n/\f/\16/\u033e\13/\3\60\3\60\3\61\3\61\5\61\u0344\n\61\3\61\3\61\3\61"+ + "\3\61\3\61\3\61\5\61\u034c\n\61\3\61\5\61\u034f\n\61\3\62\5\62\u0352\n"+ + "\62\3\62\3\62\3\62\3\62\5\62\u0358\n\62\3\62\3\62\3\62\3\63\5\63\u035e"+ + "\n\63\3\63\3\63\3\64\3\64\5\64\u0364\n\64\3\64\3\64\3\65\6\65\u0369\n"+ + "\65\r\65\16\65\u036a\3\66\3\66\3\66\3\66\3\66\3\66\3\66\5\66\u0374\n\66"+ + "\3\66\3\66\3\66\3\66\3\66\3\66\5\66\u037c\n\66\3\67\3\67\5\67\u0380\n"+ + "\67\3\67\3\67\3\67\3\67\3\67\5\67\u0387\n\67\5\67\u0389\n\67\38\38\38"+ + "\38\38\38\38\38\38\38\38\38\38\38\38\38\38\38\58\u039d\n8\38\38\58\u03a1"+ + "\n8\38\38\38\38\58\u03a7\n8\38\38\38\58\u03ac\n8\39\39\59\u03b0\n9\3:"+ + "\5:\u03b3\n:\3:\3:\3:\3;\3;\5;\u03ba\n;\3<\3<\3<\3<\3<\5<\u03c1\n<\3<"+ + "\3<\5<\u03c5\n<\3<\3<\3=\3=\3>\6>\u03cc\n>\r>\16>\u03cd\3?\3?\3?\3?\3"+ + "?\3?\3?\3?\3?\5?\u03d9\n?\3@\3@\3@\3@\3@\3@\3@\3@\5@\u03e3\n@\3A\3A\3"+ + "A\5A\u03e8\nA\3A\3A\3A\3A\3B\5B\u03ef\nB\3B\5B\u03f2\nB\3B\3B\3B\5B\u03f7"+ + "\nB\3B\3B\3B\5B\u03fc\nB\3C\3C\3C\3C\3C\3C\3C\3C\3D\3D\3E\3E\3E\3F\3F"+ + "\3F\3F\3F\3F\5F\u0411\nF\3G\6G\u0414\nG\rG\16G\u0415\3G\5G\u0419\nG\3"+ + "H\3H\3I\3I\3J\3J\3K\3K\3K\5K\u0424\nK\3L\3L\3L\3L\5L\u042a\nL\3M\6M\u042d"+ + "\nM\rM\16M\u042e\3M\5M\u0432\nM\3N\6N\u0435\nN\rN\16N\u0436\3N\5N\u043a"+ + "\nN\3O\5O\u043d\nO\3O\3O\3O\3O\3O\3O\3O\3O\3O\3O\3O\3O\3O\3O\3O\3O\3O"+ + "\3O\3O\3O\5O\u0453\nO\3P\3P\3P\3P\5P\u0459\nP\3Q\3Q\3Q\3Q\5Q\u045f\nQ"+ + "\3Q\3Q\3R\3R\5R\u0465\nR\3R\5R\u0468\nR\3R\3R\3R\3R\5R\u046e\nR\3R\3R"+ + "\5R\u0472\nR\3R\3R\5R\u0476\nR\3R\5R\u0479\nR\3S\3S\3T\3T\3T\3T\5T\u0481"+ + "\nT\5T\u0483\nT\3T\3T\3U\3U\5U\u0489\nU\3U\5U\u048c\nU\3U\5U\u048f\nU"+ + "\3U\5U\u0492\nU\3V\3V\5V\u0496\nV\3V\3V\5V\u049a\nV\3V\3V\3W\3W\5W\u04a0"+ + "\nW\3X\3X\3X\3Y\3Y\3Y\7Y\u04a8\nY\fY\16Y\u04ab\13Y\3Z\3Z\3Z\5Z\u04b0\n"+ + "Z\3[\3[\3\\\3\\\5\\\u04b6\n\\\3]\3]\3^\5^\u04bb\n^\3^\3^\3^\5^\u04c0\n"+ + "^\3^\3^\5^\u04c4\n^\3^\3^\3_\3_\3`\3`\3`\3`\3`\3`\3a\5a\u04d1\na\3a\3"+ + "a\3b\3b\5b\u04d7\nb\3b\3b\5b\u04db\nb\3b\3b\3b\3c\5c\u04e1\nc\3c\3c\3"+ + "c\5c\u04e6\nc\3c\3c\3c\3d\3d\3d\3d\3d\3d\3e\3e\3e\3e\5e\u04f5\ne\3e\3"+ + "e\5e\u04f9\ne\3f\6f\u04fc\nf\rf\16f\u04fd\3g\3g\3g\5g\u0503\ng\3g\3g\3"+ + "g\5g\u0508\ng\3h\3h\3h\3h\5h\u050e\nh\3h\5h\u0511\nh\3h\3h\3i\3i\3i\7"+ + "i\u0518\ni\fi\16i\u051b\13i\3i\5i\u051e\ni\3j\3j\3j\5j\u0523\nj\3j\3j"+ + "\5j\u0527\nj\3k\3k\3l\3l\5l\u052d\nl\3l\3l\3m\6m\u0532\nm\rm\16m\u0533"+ + "\3n\3n\3n\3n\3n\3n\3n\3n\3n\3n\3n\3n\3n\6n\u0543\nn\rn\16n\u0544\5n\u0547"+ + "\nn\3o\3o\3o\7o\u054c\no\fo\16o\u054f\13o\3p\3p\5p\u0553\np\3q\3q\3q\3"+ + "q\3q\5q\u055a\nq\3r\3r\5r\u055e\nr\7r\u0560\nr\fr\16r\u0563\13r\3r\3r"+ + "\3s\3s\3s\5s\u056a\ns\3s\3s\3s\3s\5s\u0570\ns\3s\3s\3s\3s\5s\u0576\ns"+ + "\3s\3s\5s\u057a\ns\5s\u057c\ns\7s\u057e\ns\fs\16s\u0581\13s\3t\3t\5t\u0585"+ + "\nt\3t\3t\5t\u0589\nt\3t\5t\u058c\nt\3t\5t\u058f\nt\3t\5t\u0592\nt\3u"+ + "\3u\3u\5u\u0597\nu\3v\3v\5v\u059b\nv\3v\5v\u059e\nv\3v\3v\5v\u05a2\nv"+ + "\3v\5v\u05a5\nv\5v\u05a7\nv\3w\6w\u05aa\nw\rw\16w\u05ab\3x\3x\3y\3y\3"+ + "z\5z\u05b3\nz\3z\3z\3{\3{\5{\u05b9\n{\3|\3|\5|\u05bd\n|\3|\3|\3|\3|\5"+ + "|\u05c3\n|\3}\3}\6}\u05c7\n}\r}\16}\u05c8\3}\5}\u05cc\n}\5}\u05ce\n}\3"+ + "~\3~\3~\3~\5~\u05d4\n~\3~\3~\5~\u05d8\n~\3~\3~\3~\3~\5~\u05de\n~\3~\3"+ + "~\3~\3~\3~\5~\u05e5\n~\3~\3~\5~\u05e9\n~\5~\u05eb\n~\7~\u05ed\n~\f~\16"+ + "~\u05f0\13~\3\177\7\177\u05f3\n\177\f\177\16\177\u05f6\13\177\3\177\3"+ + "\177\3\u0080\3\u0080\3\u0080\3\u0080\3\u0080\3\u0080\3\u0080\5\u0080\u0601"+ + "\n\u0080\3\u0080\3\u0080\5\u0080\u0605\n\u0080\5\u0080\u0607\n\u0080\7"+ + "\u0080\u0609\n\u0080\f\u0080\16\u0080\u060c\13\u0080\3\u0081\3\u0081\5"+ + "\u0081\u0610\n\u0081\3\u0081\5\u0081\u0613\n\u0081\3\u0082\3\u0082\3\u0082"+ + "\7\u0082\u0618\n\u0082\f\u0082\16\u0082\u061b\13\u0082\3\u0083\5\u0083"+ + "\u061e\n\u0083\3\u0083\3\u0083\3\u0083\5\u0083\u0623\n\u0083\5\u0083\u0625"+ + "\n\u0083\3\u0083\3\u0083\5\u0083\u0629\n\u0083\3\u0084\5\u0084\u062c\n"+ + "\u0084\3\u0084\5\u0084\u062f\n\u0084\3\u0084\3\u0084\5\u0084\u0633\n\u0084"+ + "\3\u0084\3\u0084\3\u0085\5\u0085\u0638\n\u0085\3\u0085\3\u0085\3\u0085"+ + "\3\u0085\3\u0085\5\u0085\u063f\n\u0085\3\u0086\3\u0086\3\u0086\3\u0086"+ + "\3\u0086\5\u0086\u0646\n\u0086\3\u0087\3\u0087\3\u0087\5\u0087\u064b\n"+ + "\u0087\3\u0088\3\u0088\5\u0088\u064f\n\u0088\3\u0089\3\u0089\5\u0089\u0653"+ + "\n\u0089\3\u0089\3\u0089\3\u0089\5\u0089\u0658\n\u0089\7\u0089\u065a\n"+ + "\u0089\f\u0089\16\u0089\u065d\13\u0089\3\u008a\3\u008a\3\u008a\5\u008a"+ + "\u0662\n\u008a\5\u008a\u0664\n\u008a\3\u008a\3\u008a\3\u008b\3\u008b\5"+ + "\u008b\u066a\n\u008b\3\u008c\3\u008c\3\u008c\5\u008c\u066f\n\u008c\3\u008c"+ + "\3\u008c\3\u008d\3\u008d\5\u008d\u0675\n\u008d\3\u008d\3\u008d\5\u008d"+ + "\u0679\n\u008d\5\u008d\u067b\n\u008d\3\u008d\5\u008d\u067e\n\u008d\3\u008d"+ + "\3\u008d\5\u008d\u0682\n\u008d\3\u008d\3\u008d\5\u008d\u0686\n\u008d\5"+ + "\u008d\u0688\n\u008d\5\u008d\u068a\n\u008d\3\u008e\5\u008e\u068d\n\u008e"+ + "\3\u008e\3\u008e\3\u008f\3\u008f\3\u0090\3\u0090\3\u0091\3\u0091\3\u0091"+ + "\3\u0091\6\u0091\u0699\n\u0091\r\u0091\16\u0091\u069a\3\u0092\5\u0092"+ + "\u069e\n\u0092\3\u0092\5\u0092\u06a1\n\u0092\3\u0092\5\u0092\u06a4\n\u0092"+ + "\3\u0092\3\u0092\3\u0092\3\u0092\3\u0092\3\u0092\3\u0092\5\u0092\u06ad"+ + "\n\u0092\3\u0093\3\u0093\3\u0093\7\u0093\u06b2\n\u0093\f\u0093\16\u0093"+ + "\u06b5\13\u0093\3\u0094\3\u0094\5\u0094\u06b9\n\u0094\3\u0094\5\u0094"+ + "\u06bc\n\u0094\3\u0094\5\u0094\u06bf\n\u0094\5\u0094\u06c1\n\u0094\3\u0094"+ + "\5\u0094\u06c4\n\u0094\3\u0094\5\u0094\u06c7\n\u0094\3\u0094\3\u0094\5"+ + "\u0094\u06cb\n\u0094\3\u0095\6\u0095\u06ce\n\u0095\r\u0095\16\u0095\u06cf"+ + "\3\u0096\3\u0096\3\u0097\3\u0097\3\u0097\3\u0097\3\u0098\3\u0098\3\u0098"+ + "\3\u0099\3\u0099\5\u0099\u06dd\n\u0099\3\u0099\3\u0099\3\u0099\5\u0099"+ + "\u06e2\n\u0099\7\u0099\u06e4\n\u0099\f\u0099\16\u0099\u06e7\13\u0099\3"+ + "\u009a\5\u009a\u06ea\n\u009a\3\u009a\3\u009a\3\u009a\5\u009a\u06ef\n\u009a"+ + "\3\u009a\3\u009a\3\u009a\5\u009a\u06f4\n\u009a\3\u009a\3\u009a\5\u009a"+ + "\u06f8\n\u009a\3\u009b\5\u009b\u06fb\n\u009b\3\u009b\3\u009b\5\u009b\u06ff"+ + "\n\u009b\3\u009c\3\u009c\3\u009d\3\u009d\3\u009e\3\u009e\3\u009e\3\u009f"+ + "\3\u009f\5\u009f\u070a\n\u009f\3\u00a0\3\u00a0\5\u00a0\u070e\n\u00a0\3"+ + "\u00a1\3\u00a1\3\u00a1\3\u00a2\3\u00a2\5\u00a2\u0715\n\u00a2\3\u00a2\3"+ + "\u00a2\3\u00a2\5\u00a2\u071a\n\u00a2\7\u00a2\u071c\n\u00a2\f\u00a2\16"+ + "\u00a2\u071f\13\u00a2\3\u00a3\3\u00a3\3\u00a3\5\u00a3\u0724\n\u00a3\3"+ + "\u00a3\3\u00a3\5\u00a3\u0728\n\u00a3\3\u00a4\3\u00a4\5\u00a4\u072c\n\u00a4"+ + "\3\u00a5\3\u00a5\3\u00a5\3\u00a6\3\u00a6\3\u00a6\3\u00a6\5\u00a6\u0735"+ + "\n\u00a6\3\u00a7\3\u00a7\3\u00a7\3\u00a7\3\u00a7\3\u00a7\3\u00a8\3\u00a8"+ + "\3\u00a8\7\u00a8\u0740\n\u00a8\f\u00a8\16\u00a8\u0743\13\u00a8\3\u00a9"+ + "\3\u00a9\5\u00a9\u0747\n\u00a9\3\u00aa\3\u00aa\3\u00aa\3\u00aa\3\u00aa"+ + "\5\u00aa\u074e\n\u00aa\3\u00aa\3\u00aa\5\u00aa\u0752\n\u00aa\3\u00aa\5"+ + "\u00aa\u0755\n\u00aa\3\u00aa\5\u00aa\u0758\n\u00aa\3\u00aa\5\u00aa\u075b"+ + "\n\u00aa\3\u00aa\3\u00aa\5\u00aa\u075f\n\u00aa\3\u00ab\3\u00ab\3\u00ab"+ + "\5\u00ab\u0764\n\u00ab\3\u00ab\3\u00ab\3\u00ac\3\u00ac\3\u00ac\5\u00ac"+ + "\u076b\n\u00ac\3\u00ac\3\u00ac\5\u00ac\u076f\n\u00ac\3\u00ac\3\u00ac\5"+ + "\u00ac\u0773\n\u00ac\3\u00ad\3\u00ad\3\u00ae\3\u00ae\5\u00ae\u0779\n\u00ae"+ + "\3\u00ae\3\u00ae\3\u00ae\5\u00ae\u077e\n\u00ae\7\u00ae\u0780\n\u00ae\f"+ + "\u00ae\16\u00ae\u0783\13\u00ae\3\u00af\3\u00af\3\u00af\5\u00af\u0788\n"+ + "\u00af\3\u00b0\3\u00b0\3\u00b0\3\u00b0\5\u00b0\u078e\n\u00b0\3\u00b0\5"+ + "\u00b0\u0791\n\u00b0\3\u00b1\5\u00b1\u0794\n\u00b1\3\u00b1\3\u00b1\3\u00b1"+ + "\3\u00b2\3\u00b2\3\u00b2\3\u00b2\3\u00b2\3\u00b3\3\u00b3\3\u00b3\3\u00b3"+ + "\3\u00b4\3\u00b4\5\u00b4\u07a4\n\u00b4\3\u00b4\3\u00b4\3\u00b4\3\u00b5"+ + "\6\u00b5\u07aa\n\u00b5\r\u00b5\16\u00b5\u07ab\3\u00b6\3\u00b6\3\u00b6"+ + "\3\u00b6\3\u00b6\3\u00b6\3\u00b7\5\u00b7\u07b5\n\u00b7\3\u00b7\3\u00b7"+ + "\3\u00b7\5\u00b7\u07ba\n\u00b7\3\u00b7\5\u00b7\u07bd\n\u00b7\3\u00b8\3"+ + "\u00b8\5\u00b8\u07c1\n\u00b8\3\u00b9\3\u00b9\5\u00b9\u07c5\n\u00b9\3\u00ba"+ + "\3\u00ba\3\u00ba\5\u00ba\u07ca\n\u00ba\3\u00ba\3\u00ba\3\u00bb\3\u00bb"+ + "\5\u00bb\u07d0\n\u00bb\3\u00bb\3\u00bb\3\u00bb\5\u00bb\u07d5\n\u00bb\7"+ + "\u00bb\u07d7\n\u00bb\f\u00bb\16\u00bb\u07da\13\u00bb\3\u00bc\3\u00bc\3"+ + "\u00bc\3\u00bc\3\u00bc\3\u00bc\5\u00bc\u07e2\n\u00bc\3\u00bd\3\u00bd\3"+ + "\u00bd\5\u00bd\u07e7\n\u00bd\3\u00bd\3\u00bd\3\u00bd\5\u00bd\u07ec\n\u00bd"+ + "\3\u00bd\3\u00bd\3\u00bd\3\u00bd\3\u00bd\3\u00bd\3\u00bd\3\u00bd\3\u00bd"+ + "\3\u00bd\3\u00bd\3\u00bd\3\u00bd\3\u00bd\3\u00bd\3\u00bd\3\u00bd\3\u00bd"+ + "\3\u00bd\3\u00bd\3\u00bd\3\u00bd\3\u00bd\3\u00bd\3\u00bd\3\u00bd\3\u00bd"+ + "\3\u00bd\3\u00bd\3\u00bd\3\u00bd\3\u00bd\3\u00bd\3\u00bd\3\u00bd\3\u00bd"+ + "\3\u00bd\3\u00bd\3\u00bd\3\u00bd\3\u00bd\3\u00bd\3\u00bd\5\u00bd\u0819"+ + "\n\u00bd\3\u00be\3\u00be\3\u00be\2\b\f \64\u00e4\u00fa\u00fe\u00bf\2\4"+ + "\6\b\n\f\16\20\22\24\26\30\32\34\36 \"$&(*,.\60\62\64\668:<>@BDFHJLNP"+ + "RTVXZ\\^`bdfhjlnprtvxz|~\u0080\u0082\u0084\u0086\u0088\u008a\u008c\u008e"+ + "\u0090\u0092\u0094\u0096\u0098\u009a\u009c\u009e\u00a0\u00a2\u00a4\u00a6"+ + "\u00a8\u00aa\u00ac\u00ae\u00b0\u00b2\u00b4\u00b6\u00b8\u00ba\u00bc\u00be"+ + "\u00c0\u00c2\u00c4\u00c6\u00c8\u00ca\u00cc\u00ce\u00d0\u00d2\u00d4\u00d6"+ + "\u00d8\u00da\u00dc\u00de\u00e0\u00e2\u00e4\u00e6\u00e8\u00ea\u00ec\u00ee"+ + "\u00f0\u00f2\u00f4\u00f6\u00f8\u00fa\u00fc\u00fe\u0100\u0102\u0104\u0106"+ + "\u0108\u010a\u010c\u010e\u0110\u0112\u0114\u0116\u0118\u011a\u011c\u011e"+ + "\u0120\u0122\u0124\u0126\u0128\u012a\u012c\u012e\u0130\u0132\u0134\u0136"+ + "\u0138\u013a\u013c\u013e\u0140\u0142\u0144\u0146\u0148\u014a\u014c\u014e"+ + "\u0150\u0152\u0154\u0156\u0158\u015a\u015c\u015e\u0160\u0162\u0164\u0166"+ + "\u0168\u016a\u016c\u016e\u0170\u0172\u0174\u0176\u0178\u017a\2\27\4\2"+ + "ccgg\6\2\32\32!!<\u02c6"+ + "\3\2\2\2@\u02ce\3\2\2\2B\u02d6\3\2\2\2D\u02de\3\2\2\2F\u02eb\3\2\2\2H"+ + "\u02ed\3\2\2\2J\u02f5\3\2\2\2L\u02fd\3\2\2\2N\u0305\3\2\2\2P\u030d\3\2"+ + "\2\2R\u0315\3\2\2\2T\u031d\3\2\2\2V\u0325\3\2\2\2X\u0333\3\2\2\2Z\u0335"+ + "\3\2\2\2\\\u0337\3\2\2\2^\u033f\3\2\2\2`\u034e\3\2\2\2b\u0351\3\2\2\2"+ + "d\u035d\3\2\2\2f\u0361\3\2\2\2h\u0368\3\2\2\2j\u037b\3\2\2\2l\u0388\3"+ + "\2\2\2n\u03ab\3\2\2\2p\u03af\3\2\2\2r\u03b2\3\2\2\2t\u03b9\3\2\2\2v\u03c4"+ + "\3\2\2\2x\u03c8\3\2\2\2z\u03cb\3\2\2\2|\u03d8\3\2\2\2~\u03e2\3\2\2\2\u0080"+ + "\u03e4\3\2\2\2\u0082\u03fb\3\2\2\2\u0084\u03fd\3\2\2\2\u0086\u0405\3\2"+ + "\2\2\u0088\u0407\3\2\2\2\u008a\u0410\3\2\2\2\u008c\u0413\3\2\2\2\u008e"+ + "\u041a\3\2\2\2\u0090\u041c\3\2\2\2\u0092\u041e\3\2\2\2\u0094\u0423\3\2"+ + "\2\2\u0096\u0429\3\2\2\2\u0098\u042c\3\2\2\2\u009a\u0434\3\2\2\2\u009c"+ + "\u0452\3\2\2\2\u009e\u0458\3\2\2\2\u00a0\u045a\3\2\2\2\u00a2\u0478\3\2"+ + "\2\2\u00a4\u047a\3\2\2\2\u00a6\u047c\3\2\2\2\u00a8\u0486\3\2\2\2\u00aa"+ + "\u0493\3\2\2\2\u00ac\u049d\3\2\2\2\u00ae\u04a1\3\2\2\2\u00b0\u04a4\3\2"+ + "\2\2\u00b2\u04ac\3\2\2\2\u00b4\u04b1\3\2\2\2\u00b6\u04b5\3\2\2\2\u00b8"+ + "\u04b7\3\2\2\2\u00ba\u04ba\3\2\2\2\u00bc\u04c7\3\2\2\2\u00be\u04c9\3\2"+ + "\2\2\u00c0\u04d0\3\2\2\2\u00c2\u04d4\3\2\2\2\u00c4\u04e0\3\2\2\2\u00c6"+ + "\u04ea\3\2\2\2\u00c8\u04f0\3\2\2\2\u00ca\u04fb\3\2\2\2\u00cc\u0507\3\2"+ + "\2\2\u00ce\u0509\3\2\2\2\u00d0\u0514\3\2\2\2\u00d2\u0522\3\2\2\2\u00d4"+ + "\u0528\3\2\2\2\u00d6\u052a\3\2\2\2\u00d8\u0531\3\2\2\2\u00da\u0546\3\2"+ + "\2\2\u00dc\u0548\3\2\2\2\u00de\u0550\3\2\2\2\u00e0\u0559\3\2\2\2\u00e2"+ + "\u0561\3\2\2\2\u00e4\u056f\3\2\2\2\u00e6\u0582\3\2\2\2\u00e8\u0593\3\2"+ + "\2\2\u00ea\u05a6\3\2\2\2\u00ec\u05a9\3\2\2\2\u00ee\u05ad\3\2\2\2\u00f0"+ + "\u05af\3\2\2\2\u00f2\u05b2\3\2\2\2\u00f4\u05b6\3\2\2\2\u00f6\u05c2\3\2"+ + "\2\2\u00f8\u05cd\3\2\2\2\u00fa\u05dd\3\2\2\2\u00fc\u05f4\3\2\2\2\u00fe"+ + "\u05f9\3\2\2\2\u0100\u060d\3\2\2\2\u0102\u0614\3\2\2\2\u0104\u061d\3\2"+ + "\2\2\u0106\u062b\3\2\2\2\u0108\u063e\3\2\2\2\u010a\u0645\3\2\2\2\u010c"+ + "\u064a\3\2\2\2\u010e\u064e\3\2\2\2\u0110\u0650\3\2\2\2\u0112\u065e\3\2"+ + "\2\2\u0114\u0669\3\2\2\2\u0116\u066b\3\2\2\2\u0118\u0689\3\2\2\2\u011a"+ + "\u068c\3\2\2\2\u011c\u0690\3\2\2\2\u011e\u0692\3\2\2\2\u0120\u0698\3\2"+ + "\2\2\u0122\u06ac\3\2\2\2\u0124\u06ae\3\2\2\2\u0126\u06ca\3\2\2\2\u0128"+ + "\u06cd\3\2\2\2\u012a\u06d1\3\2\2\2\u012c\u06d3\3\2\2\2\u012e\u06d7\3\2"+ + "\2\2\u0130\u06da\3\2\2\2\u0132\u06e9\3\2\2\2\u0134\u06fe\3\2\2\2\u0136"+ + "\u0700\3\2\2\2\u0138\u0702\3\2\2\2\u013a\u0704\3\2\2\2\u013c\u0707\3\2"+ + "\2\2\u013e\u070b\3\2\2\2\u0140\u070f\3\2\2\2\u0142\u0712\3\2\2\2\u0144"+ + "\u0720\3\2\2\2\u0146\u072b\3\2\2\2\u0148\u072d\3\2\2\2\u014a\u0730\3\2"+ + "\2\2\u014c\u0736\3\2\2\2\u014e\u073c\3\2\2\2\u0150\u0746\3\2\2\2\u0152"+ + "\u0751\3\2\2\2\u0154\u0760\3\2\2\2\u0156\u0772\3\2\2\2\u0158\u0774\3\2"+ + "\2\2\u015a\u0776\3\2\2\2\u015c\u0787\3\2\2\2\u015e\u0789\3\2\2\2\u0160"+ + "\u0793\3\2\2\2\u0162\u0798\3\2\2\2\u0164\u079d\3\2\2\2\u0166\u07a1\3\2"+ + "\2\2\u0168\u07a9\3\2\2\2\u016a\u07ad\3\2\2\2\u016c\u07bc\3\2\2\2\u016e"+ + "\u07be\3\2\2\2\u0170\u07c4\3\2\2\2\u0172\u07c6\3\2\2\2\u0174\u07cd\3\2"+ + "\2\2\u0176\u07e1\3\2\2\2\u0178\u0818\3\2\2\2\u017a\u081a\3\2\2\2\u017c"+ + "\u017e\5z>\2\u017d\u017c\3\2\2\2\u017d\u017e\3\2\2\2\u017e\u017f\3\2\2"+ + "\2\u017f\u0180\7\2\2\3\u0180\3\3\2\2\2\u0181\u0183\5\u017a\u00be\2\u0182"+ + "\u0181\3\2\2\2\u0183\u0184\3\2\2\2\u0184\u0182\3\2\2\2\u0184\u0185\3\2"+ + "\2\2\u0185\u018e\3\2\2\2\u0186\u018e\7G\2\2\u0187\u0188\7W\2\2\u0188\u0189"+ + "\5\\/\2\u0189\u018a\7X\2\2\u018a\u018e\3\2\2\2\u018b\u018e\5\6\4\2\u018c"+ + "\u018e\5\16\b\2\u018d\u0182\3\2\2\2\u018d\u0186\3\2\2\2\u018d\u0187\3"+ + "\2\2\2\u018d\u018b\3\2\2\2\u018d\u018c\3\2\2\2\u018e\5\3\2\2\2\u018f\u0192"+ + "\5\b\5\2\u0190\u0192\5\n\6\2\u0191\u018f\3\2\2\2\u0191\u0190\3\2\2\2\u0192"+ + "\7\3\2\2\2\u0193\u019e\7\u0086\2\2\u0194\u019e\5\u0148\u00a5\2\u0195\u019e"+ + "\5\u013a\u009e\2\u0196\u019e\5\u014a\u00a6\2\u0197\u019a\7e\2\2\u0198"+ + "\u019b\5\u0114\u008b\2\u0199\u019b\5\u00a0Q\2\u019a\u0198\3\2\2\2\u019a"+ + "\u0199\3\2\2\2\u019b\u019e\3\2\2\2\u019c\u019e\5\u0156\u00ac\2\u019d\u0193"+ + "\3\2\2\2\u019d\u0194\3\2\2\2\u019d\u0195\3\2\2\2\u019d\u0196\3\2\2\2\u019d"+ + "\u0197\3\2\2\2\u019d\u019c\3\2\2\2\u019e\t\3\2\2\2\u019f\u01a1\5\f\7\2"+ + "\u01a0\u01a2\7F\2\2\u01a1\u01a0\3\2\2\2\u01a1\u01a2\3\2\2\2\u01a2\u01a3"+ + "\3\2\2\2\u01a3\u01a4\5\b\5\2\u01a4\13\3\2\2\2\u01a5\u01a9\b\7\1\2\u01a6"+ + "\u01aa\5\u009eP\2\u01a7\u01aa\5\u00b6\\\2\u01a8\u01aa\5\u00a0Q\2\u01a9"+ + "\u01a6\3\2\2\2\u01a9\u01a7\3\2\2\2\u01a9\u01a8\3\2\2\2\u01a9\u01aa\3\2"+ + "\2\2\u01aa\u01ab\3\2\2\2\u01ab\u01ac\7\u0081\2\2\u01ac\u01b8\3\2\2\2\u01ad"+ + "\u01b3\f\3\2\2\u01ae\u01b4\7\u0086\2\2\u01af\u01b1\7F\2\2\u01b0\u01af"+ + "\3\2\2\2\u01b0\u01b1\3\2\2\2\u01b1\u01b2\3\2\2\2\u01b2\u01b4\5\u0154\u00ab"+ + "\2\u01b3\u01ae\3\2\2\2\u01b3\u01b0\3\2\2\2\u01b4\u01b5\3\2\2\2\u01b5\u01b7"+ + "\7\u0081\2\2\u01b6\u01ad\3\2\2\2\u01b7\u01ba\3\2\2\2\u01b8\u01b6\3\2\2"+ + "\2\u01b8\u01b9\3\2\2\2\u01b9\r\3\2\2\2\u01ba\u01b8\3\2\2\2\u01bb\u01bd"+ + "\5\20\t\2\u01bc\u01be\5\36\20\2\u01bd\u01bc\3\2\2\2\u01bd\u01be\3\2\2"+ + "\2\u01be\u01bf\3\2\2\2\u01bf\u01c0\5f\64\2\u01c0\17\3\2\2\2\u01c1\u01c3"+ + "\7Y\2\2\u01c2\u01c4\5\22\n\2\u01c3\u01c2\3\2\2\2\u01c3\u01c4\3\2\2\2\u01c4"+ + "\u01c5\3\2\2\2\u01c5\u01c6\7Z\2\2\u01c6\21\3\2\2\2\u01c7\u01ce\5\26\f"+ + "\2\u01c8\u01cb\5\24\13\2\u01c9\u01ca\7|\2\2\u01ca\u01cc\5\26\f\2\u01cb"+ + "\u01c9\3\2\2\2\u01cb\u01cc\3\2\2\2\u01cc\u01ce\3\2\2\2\u01cd\u01c7\3\2"+ + "\2\2\u01cd\u01c8\3\2\2\2\u01ce\23\3\2\2\2\u01cf\u01d0\t\2\2\2\u01d0\25"+ + "\3\2\2\2\u01d1\u01d6\5\30\r\2\u01d2\u01d3\7|\2\2\u01d3\u01d5\5\30\r\2"+ + "\u01d4\u01d2\3\2\2\2\u01d5\u01d8\3\2\2\2\u01d6\u01d4\3\2\2\2\u01d6\u01d7"+ + "\3\2\2\2\u01d7\u01da\3\2\2\2\u01d8\u01d6\3\2\2\2\u01d9\u01db\7\u0085\2"+ + "\2\u01da\u01d9\3\2\2\2\u01da\u01db\3\2\2\2\u01db\27\3\2\2\2\u01dc\u01df"+ + "\5\32\16\2\u01dd\u01df\5\34\17\2\u01de\u01dc\3\2\2\2\u01de\u01dd\3\2\2"+ + "\2\u01df\31\3\2\2\2\u01e0\u01e2\7c\2\2\u01e1\u01e0\3\2\2\2\u01e1\u01e2"+ + "\3\2\2\2\u01e2\u01e3\3\2\2\2\u01e3\u01e6\7\u0086\2\2\u01e4\u01e6\7G\2"+ + "\2\u01e5\u01e1\3\2\2\2\u01e5\u01e4\3\2\2\2\u01e6\33\3\2\2\2\u01e7\u01e9"+ + "\7c\2\2\u01e8\u01e7\3\2\2\2\u01e8\u01e9\3\2\2\2\u01e9\u01ea\3\2\2\2\u01ea"+ + "\u01eb\7\u0086\2\2\u01eb\u01ec\5\u010a\u0086\2\u01ec\35\3\2\2\2\u01ed"+ + "\u01ef\7W\2\2\u01ee\u01f0\5\u0100\u0081\2\u01ef\u01ee\3\2\2\2\u01ef\u01f0"+ + "\3\2\2\2\u01f0\u01f1\3\2\2\2\u01f1\u01f3\7X\2\2\u01f2\u01f4\7\61\2\2\u01f3"+ + "\u01f2\3\2\2\2\u01f3\u01f4\3\2\2\2\u01f4\u01f6\3\2\2\2\u01f5\u01f7\5\u0170"+ + "\u00b9\2\u01f6\u01f5\3\2\2\2\u01f6\u01f7\3\2\2\2\u01f7\u01f9\3\2\2\2\u01f8"+ + "\u01fa\5\u00caf\2\u01f9\u01f8\3\2\2\2\u01f9\u01fa\3\2\2\2\u01fa\u01fc"+ + "\3\2\2\2\u01fb\u01fd\5\u00e8u\2\u01fc\u01fb\3\2\2\2\u01fc\u01fd\3\2\2"+ + "\2\u01fd\37\3\2\2\2\u01fe\u01ff\b\21\1\2\u01ff\u021d\5\4\3\2\u0200\u0203"+ + "\5\u009cO\2\u0201\u0203\5\u015e\u00b0\2\u0202\u0200\3\2\2\2\u0202\u0201"+ + "\3\2\2\2\u0203\u020a\3\2\2\2\u0204\u0206\7W\2\2\u0205\u0207\5$\23\2\u0206"+ + "\u0205\3\2\2\2\u0206\u0207\3\2\2\2\u0207\u0208\3\2\2\2\u0208\u020b\7X"+ + "\2\2\u0209\u020b\5\u0112\u008a\2\u020a\u0204\3\2\2\2\u020a\u0209\3\2\2"+ + "\2\u020b\u021d\3\2\2\2\u020c\u020d\t\3\2\2\u020d\u020e\7h\2\2\u020e\u020f"+ + "\5\u00f4{\2\u020f\u0210\7i\2\2\u0210\u0211\7W\2\2\u0211\u0212\5\\/\2\u0212"+ + "\u0213\7X\2\2\u0213\u021d\3\2\2\2\u0214\u0215\5\"\22\2\u0215\u0218\7W"+ + "\2\2\u0216\u0219\5\\/\2\u0217\u0219\5\u00f4{\2\u0218\u0216\3\2\2\2\u0218"+ + "\u0217\3\2\2\2\u0219\u021a\3\2\2\2\u021a\u021b\7X\2\2\u021b\u021d\3\2"+ + "\2\2\u021c\u01fe\3\2\2\2\u021c\u0202\3\2\2\2\u021c\u020c\3\2\2\2\u021c"+ + "\u0214\3\2\2\2\u021d\u0239\3\2\2\2\u021e\u021f\f\t\2\2\u021f\u0222\7Y"+ + "\2\2\u0220\u0223\5\\/\2\u0221\u0223\5\u0112\u008a\2\u0222\u0220\3\2\2"+ + "\2\u0222\u0221\3\2\2\2\u0223\u0224\3\2\2\2\u0224\u0225\7Z\2\2\u0225\u0238"+ + "\3\2\2\2\u0226\u0227\f\b\2\2\u0227\u0229\7W\2\2\u0228\u022a\5$\23\2\u0229"+ + "\u0228\3\2\2\2\u0229\u022a\3\2\2\2\u022a\u022b\3\2\2\2\u022b\u0238\7X"+ + "\2\2\u022c\u022d\f\6\2\2\u022d\u0233\t\4\2\2\u022e\u0230\7F\2\2\u022f"+ + "\u022e\3\2\2\2\u022f\u0230\3\2\2\2\u0230\u0231\3\2\2\2\u0231\u0234\5\6"+ + "\4\2\u0232\u0234\5&\24\2\u0233\u022f\3\2\2\2\u0233\u0232\3\2\2\2\u0234"+ + "\u0238\3\2\2\2\u0235\u0236\f\5\2\2\u0236\u0238\t\5\2\2\u0237\u021e\3\2"+ + "\2\2\u0237\u0226\3\2\2\2\u0237\u022c\3\2\2\2\u0237\u0235\3\2\2\2\u0238"+ + "\u023b\3\2\2\2\u0239\u0237\3\2\2\2\u0239\u023a\3\2\2\2\u023a!\3\2\2\2"+ + "\u023b\u0239\3\2\2\2\u023c\u023d\7M\2\2\u023d#\3\2\2\2\u023e\u023f\5\u0110"+ + "\u0089\2\u023f%\3\2\2\2\u0240\u0242\5\f\7\2\u0241\u0240\3\2\2\2\u0241"+ + "\u0242\3\2\2\2\u0242\u0246\3\2\2\2\u0243\u0244\5\u009eP\2\u0244\u0245"+ + "\7\u0081\2\2\u0245\u0247\3\2\2\2\u0246\u0243\3\2\2\2\u0246\u0247\3\2\2"+ + "\2\u0247\u0248\3\2\2\2\u0248\u0249\7e\2\2\u0249\u0254\5\u009eP\2\u024a"+ + "\u024b\5\f\7\2\u024b\u024c\7F\2\2\u024c\u024d\5\u0154\u00ab\2\u024d\u024e"+ + "\7\u0081\2\2\u024e\u024f\7e\2\2\u024f\u0250\5\u009eP\2\u0250\u0254\3\2"+ + "\2\2\u0251\u0252\7e\2\2\u0252\u0254\5\u00a0Q\2\u0253\u0241\3\2\2\2\u0253"+ + "\u024a\3\2\2\2\u0253\u0251\3\2\2\2\u0254\'\3\2\2\2\u0255\u0271\5 \21\2"+ + "\u0256\u025b\7z\2\2\u0257\u025b\7{\2\2\u0258\u025b\5*\26\2\u0259\u025b"+ + "\7@\2\2\u025a\u0256\3\2\2\2\u025a\u0257\3\2\2\2\u025a\u0258\3\2\2\2\u025a"+ + "\u0259\3\2\2\2\u025b\u025c\3\2\2\2\u025c\u0271\5(\25\2\u025d\u0266\7@"+ + "\2\2\u025e\u025f\7W\2\2\u025f\u0260\5\u00f4{\2\u0260\u0261\7X\2\2\u0261"+ + "\u0267\3\2\2\2\u0262\u0263\7\u0085\2\2\u0263\u0264\7W\2\2\u0264\u0265"+ + "\7\u0086\2\2\u0265\u0267\7X\2\2\u0266\u025e\3\2\2\2\u0266\u0262\3\2\2"+ + "\2\u0267\u0271\3\2\2\2\u0268\u0269\7\r\2\2\u0269\u026a\7W\2\2\u026a\u026b"+ + "\5\u00f4{\2\u026b\u026c\7X\2\2\u026c\u0271\3\2\2\2\u026d\u0271\5:\36\2"+ + "\u026e\u0271\5,\27\2\u026f\u0271\58\35\2\u0270\u0255\3\2\2\2\u0270\u025a"+ + "\3\2\2\2\u0270\u025d\3\2\2\2\u0270\u0268\3\2\2\2\u0270\u026d\3\2\2\2\u0270"+ + "\u026e\3\2\2\2\u0270\u026f\3\2\2\2\u0271)\3\2\2\2\u0272\u0273\t\6\2\2"+ + "\u0273+\3\2\2\2\u0274\u0276\7\u0081\2\2\u0275\u0274\3\2\2\2\u0275\u0276"+ + "\3\2\2\2\u0276\u0277\3\2\2\2\u0277\u0279\7\63\2\2\u0278\u027a\5.\30\2"+ + "\u0279\u0278\3\2\2\2\u0279\u027a\3\2\2\2\u027a\u0280\3\2\2\2\u027b\u0281"+ + "\5\60\31\2\u027c\u027d\7W\2\2\u027d\u027e\5\u00f4{\2\u027e\u027f\7X\2"+ + "\2\u027f\u0281\3\2\2\2\u0280\u027b\3\2\2\2\u0280\u027c\3\2\2\2\u0281\u0283"+ + "\3\2\2\2\u0282\u0284\5\66\34\2\u0283\u0282\3\2\2\2\u0283\u0284\3\2\2\2"+ + "\u0284-\3\2\2\2\u0285\u0286\7W\2\2\u0286\u0287\5$\23\2\u0287\u0288\7X"+ + "\2\2\u0288/\3\2\2\2\u0289\u028b\5\u0098M\2\u028a\u028c\5\62\32\2\u028b"+ + "\u028a\3\2\2\2\u028b\u028c\3\2\2\2\u028c\61\3\2\2\2\u028d\u028f\5\u00ea"+ + "v\2\u028e\u0290\5\62\32\2\u028f\u028e\3\2\2\2\u028f\u0290\3\2\2\2\u0290"+ + "\u0293\3\2\2\2\u0291\u0293\5\64\33\2\u0292\u028d\3\2\2\2\u0292\u0291\3"+ + "\2\2\2\u0293\63\3\2\2\2\u0294\u0295\b\33\1\2\u0295\u0296\7Y\2\2\u0296"+ + "\u0297\5\\/\2\u0297\u0299\7Z\2\2\u0298\u029a\5\u00caf\2\u0299\u0298\3"+ + "\2\2\2\u0299\u029a\3\2\2\2\u029a\u02a4\3\2\2\2\u029b\u029c\f\3\2\2\u029c"+ + "\u029d\7Y\2\2\u029d\u029e\5^\60\2\u029e\u02a0\7Z\2\2\u029f\u02a1\5\u00ca"+ + "f\2\u02a0\u029f\3\2\2\2\u02a0\u02a1\3\2\2\2\u02a1\u02a3\3\2\2\2\u02a2"+ + "\u029b\3\2\2\2\u02a3\u02a6\3\2\2\2\u02a4\u02a2\3\2\2\2\u02a4\u02a5\3\2"+ + "\2\2\u02a5\65\3\2\2\2\u02a6\u02a4\3\2\2\2\u02a7\u02a9\7W\2\2\u02a8\u02aa"+ + "\5$\23\2\u02a9\u02a8\3\2\2\2\u02a9\u02aa\3\2\2\2\u02aa\u02ab\3\2\2\2\u02ab"+ + "\u02ae\7X\2\2\u02ac\u02ae\5\u0112\u008a\2\u02ad\u02a7\3\2\2\2\u02ad\u02ac"+ + "\3\2\2\2\u02ae\67\3\2\2\2\u02af\u02b1\7\u0081\2\2\u02b0\u02af\3\2\2\2"+ + "\u02b0\u02b1\3\2\2\2\u02b1\u02b2\3\2\2\2\u02b2\u02b5\7\36\2\2\u02b3\u02b4"+ + "\7Y\2\2\u02b4\u02b6\7Z\2\2\u02b5\u02b3\3\2\2\2\u02b5\u02b6\3\2\2\2\u02b6"+ + "\u02b7\3\2\2\2\u02b7\u02b8\5<\37\2\u02b89\3\2\2\2\u02b9\u02ba\7\64\2\2"+ + "\u02ba\u02bb\7W\2\2\u02bb\u02bc\5\\/\2\u02bc\u02bd\7X\2\2\u02bd;\3\2\2"+ + "\2\u02be\u02c5\5(\25\2\u02bf\u02c0\7W\2\2\u02c0\u02c1\5\u00f4{\2\u02c1"+ + "\u02c2\7X\2\2\u02c2\u02c3\5<\37\2\u02c3\u02c5\3\2\2\2\u02c4\u02be\3\2"+ + "\2\2\u02c4\u02bf\3\2\2\2\u02c5=\3\2\2\2\u02c6\u02cb\5<\37\2\u02c7\u02c8"+ + "\t\7\2\2\u02c8\u02ca\5<\37\2\u02c9\u02c7\3\2\2\2\u02ca\u02cd\3\2\2\2\u02cb"+ + "\u02c9\3\2\2\2\u02cb\u02cc\3\2\2\2\u02cc?\3\2\2\2\u02cd\u02cb\3\2\2\2"+ + "\u02ce\u02d3\5> \2\u02cf\u02d0\t\b\2\2\u02d0\u02d2\5> \2\u02d1\u02cf\3"+ + "\2\2\2\u02d2\u02d5\3\2\2\2\u02d3\u02d1\3\2\2\2\u02d3\u02d4\3\2\2\2\u02d4"+ + "A\3\2\2\2\u02d5\u02d3\3\2\2\2\u02d6\u02db\5@!\2\u02d7\u02d8\t\t\2\2\u02d8"+ + "\u02da\5@!\2\u02d9\u02d7\3\2\2\2\u02da\u02dd\3\2\2\2\u02db\u02d9\3\2\2"+ + "\2\u02db\u02dc\3\2\2\2\u02dcC\3\2\2\2\u02dd\u02db\3\2\2\2\u02de\u02e4"+ + "\5B\"\2\u02df\u02e0\5F$\2\u02e0\u02e1\5B\"\2\u02e1\u02e3\3\2\2\2\u02e2"+ + "\u02df\3\2\2\2\u02e3\u02e6\3\2\2\2\u02e4\u02e2\3\2\2\2\u02e4\u02e5\3\2"+ + "\2\2\u02e5E\3\2\2\2\u02e6\u02e4\3\2\2\2\u02e7\u02e8\7i\2\2\u02e8\u02ec"+ + "\7i\2\2\u02e9\u02ea\7h\2\2\u02ea\u02ec\7h\2\2\u02eb\u02e7\3\2\2\2\u02eb"+ + "\u02e9\3\2\2\2\u02ecG\3\2\2\2\u02ed\u02f2\5D#\2\u02ee\u02ef\t\n\2\2\u02ef"+ + "\u02f1\5D#\2\u02f0\u02ee\3\2\2\2\u02f1\u02f4\3\2\2\2\u02f2\u02f0\3\2\2"+ + "\2\u02f2\u02f3\3\2\2\2\u02f3I\3\2\2\2\u02f4\u02f2\3\2\2\2\u02f5\u02fa"+ + "\5H%\2\u02f6\u02f7\t\13\2\2\u02f7\u02f9\5H%\2\u02f8\u02f6\3\2\2\2\u02f9"+ + "\u02fc\3\2\2\2\u02fa\u02f8\3\2\2\2\u02fa\u02fb\3\2\2\2\u02fbK\3\2\2\2"+ + "\u02fc\u02fa\3\2\2\2\u02fd\u0302\5J&\2\u02fe\u02ff\7c\2\2\u02ff\u0301"+ + "\5J&\2\u0300\u02fe\3\2\2\2\u0301\u0304\3\2\2\2\u0302\u0300\3\2\2\2\u0302"+ + "\u0303\3\2\2\2\u0303M\3\2\2\2\u0304\u0302\3\2\2\2\u0305\u030a\5L\'\2\u0306"+ + "\u0307\7b\2\2\u0307\u0309\5L\'\2\u0308\u0306\3\2\2\2\u0309\u030c\3\2\2"+ + "\2\u030a\u0308\3\2\2\2\u030a\u030b\3\2\2\2\u030bO\3\2\2\2\u030c\u030a"+ + "\3\2\2\2\u030d\u0312\5N(\2\u030e\u030f\7d\2\2\u030f\u0311\5N(\2\u0310"+ + "\u030e\3\2\2\2\u0311\u0314\3\2\2\2\u0312\u0310\3\2\2\2\u0312\u0313\3\2"+ + "\2\2\u0313Q\3\2\2\2\u0314\u0312\3\2\2\2\u0315\u031a\5P)\2\u0316\u0317"+ + "\7x\2\2\u0317\u0319\5P)\2\u0318\u0316\3\2\2\2\u0319\u031c\3\2\2\2\u031a"+ + "\u0318\3\2\2\2\u031a\u031b\3\2\2\2\u031bS\3\2\2\2\u031c\u031a\3\2\2\2"+ + "\u031d\u0322\5R*\2\u031e\u031f\7y\2\2\u031f\u0321\5R*\2\u0320\u031e\3"+ + "\2\2\2\u0321\u0324\3\2\2\2\u0322\u0320\3\2\2\2\u0322\u0323\3\2\2\2\u0323"+ + "U\3\2\2\2\u0324\u0322\3\2\2\2\u0325\u032b\5T+\2\u0326\u0327\7\177\2\2"+ + "\u0327\u0328\5\\/\2\u0328\u0329\7\u0080\2\2\u0329\u032a\5X-\2\u032a\u032c"+ + "\3\2\2\2\u032b\u0326\3\2\2\2\u032b\u032c\3\2\2\2\u032cW\3\2\2\2\u032d"+ + "\u0334\5V,\2\u032e\u032f\5T+\2\u032f\u0330\5Z.\2\u0330\u0331\5\u010e\u0088"+ + "\2\u0331\u0334\3\2\2\2\u0332\u0334\5\u016e\u00b8\2\u0333\u032d\3\2\2\2"+ + "\u0333\u032e\3\2\2\2\u0333\u0332\3\2\2\2\u0334Y\3\2\2\2\u0335\u0336\t"+ + "\f\2\2\u0336[\3\2\2\2\u0337\u033c\5X-\2\u0338\u0339\7|\2\2\u0339\u033b"+ + "\5X-\2\u033a\u0338\3\2\2\2\u033b\u033e\3\2\2\2\u033c\u033a\3\2\2\2\u033c"+ + "\u033d\3\2\2\2\u033d]\3\2\2\2\u033e\u033c\3\2\2\2\u033f\u0340\5V,\2\u0340"+ + "_\3\2\2\2\u0341\u034f\5b\62\2\u0342\u0344\5\u00caf\2\u0343\u0342\3\2\2"+ + "\2\u0343\u0344\3\2\2\2\u0344\u034b\3\2\2\2\u0345\u034c\5d\63\2\u0346\u034c"+ + "\5f\64\2\u0347\u034c\5j\66\2\u0348\u034c\5n8\2\u0349\u034c\5v<\2\u034a"+ + "\u034c\5\u0164\u00b3\2\u034b\u0345\3\2\2\2\u034b\u0346\3\2\2\2\u034b\u0347"+ + "\3\2\2\2\u034b\u0348\3\2\2\2\u034b\u0349\3\2\2\2\u034b\u034a\3\2\2\2\u034c"+ + "\u034f\3\2\2\2\u034d\u034f\5x=\2\u034e\u0341\3\2\2\2\u034e\u0343\3\2\2"+ + "\2\u034e\u034d\3\2\2\2\u034fa\3\2\2\2\u0350\u0352\5\u00caf\2\u0351\u0350"+ + "\3\2\2\2\u0351\u0352\3\2\2\2\u0352\u0357\3\2\2\2\u0353\u0358\7\u0086\2"+ + "\2\u0354\u0355\7\22\2\2\u0355\u0358\5^\60\2\u0356\u0358\7\35\2\2\u0357"+ + "\u0353\3\2\2\2\u0357\u0354\3\2\2\2\u0357\u0356\3\2\2\2\u0358\u0359\3\2"+ + "\2\2\u0359\u035a\7\u0080\2\2\u035a\u035b\5`\61\2\u035bc\3\2\2\2\u035c"+ + "\u035e\5\\/\2\u035d\u035c\3\2\2\2\u035d\u035e\3\2\2\2\u035e\u035f\3\2"+ + "\2\2\u035f\u0360\7\u0082\2\2\u0360e\3\2\2\2\u0361\u0363\7[\2\2\u0362\u0364"+ + "\5h\65\2\u0363\u0362\3\2\2\2\u0363\u0364\3\2\2\2\u0364\u0365\3\2\2\2\u0365"+ + "\u0366\7\\\2\2\u0366g\3\2\2\2\u0367\u0369\5`\61\2\u0368\u0367\3\2\2\2"+ + "\u0369\u036a\3\2\2\2\u036a\u0368\3\2\2\2\u036a\u036b\3\2\2\2\u036bi\3"+ + "\2\2\2\u036c\u036d\7-\2\2\u036d\u036e\7W\2\2\u036e\u036f\5l\67\2\u036f"+ + "\u0370\7X\2\2\u0370\u0373\5`\61\2\u0371\u0372\7\"\2\2\u0372\u0374\5`\61"+ + "\2\u0373\u0371\3\2\2\2\u0373\u0374\3\2\2\2\u0374\u037c\3\2\2\2\u0375\u0376"+ + "\7E\2\2\u0376\u0377\7W\2\2\u0377\u0378\5l\67\2\u0378\u0379\7X\2\2\u0379"+ + "\u037a\5`\61\2\u037a\u037c\3\2\2\2\u037b\u036c\3\2\2\2\u037b\u0375\3\2"+ + "\2\2\u037ck\3\2\2\2\u037d\u0389\5\\/\2\u037e\u0380\5\u00caf\2\u037f\u037e"+ + "\3\2\2\2\u037f\u0380\3\2\2\2\u0380\u0381\3\2\2\2\u0381\u0382\5\u008cG"+ + "\2\u0382\u0386\5\u00e0q\2\u0383\u0384\7g\2\2\u0384\u0387\5\u010e\u0088"+ + "\2\u0385\u0387\5\u0112\u008a\2\u0386\u0383\3\2\2\2\u0386\u0385\3\2\2\2"+ + "\u0387\u0389\3\2\2\2\u0388\u037d\3\2\2\2\u0388\u037f\3\2\2\2\u0389m\3"+ + "\2\2\2\u038a\u038b\7V\2\2\u038b\u038c\7W\2\2\u038c\u038d\5l\67\2\u038d"+ + "\u038e\7X\2\2\u038e\u038f\5`\61\2\u038f\u03ac\3\2\2\2\u0390\u0391\7\37"+ + "\2\2\u0391\u0392\5`\61\2\u0392\u0393\7V\2\2\u0393\u0394\7W\2\2\u0394\u0395"+ + "\5\\/\2\u0395\u0396\7X\2\2\u0396\u0397\7\u0082\2\2\u0397\u03ac\3\2\2\2"+ + "\u0398\u0399\7*\2\2\u0399\u03a6\7W\2\2\u039a\u039c\5p9\2\u039b\u039d\5"+ + "l\67\2\u039c\u039b\3\2\2\2\u039c\u039d\3\2\2\2\u039d\u039e\3\2\2\2\u039e"+ + "\u03a0\7\u0082\2\2\u039f\u03a1\5\\/\2\u03a0\u039f\3\2\2\2\u03a0\u03a1"+ + "\3\2\2\2\u03a1\u03a7\3\2\2\2\u03a2\u03a3\5r:\2\u03a3\u03a4\7\u0080\2\2"+ + "\u03a4\u03a5\5t;\2\u03a5\u03a7\3\2\2\2\u03a6\u039a\3\2\2\2\u03a6\u03a2"+ + "\3\2\2\2\u03a7\u03a8\3\2\2\2\u03a8\u03a9\7X\2\2\u03a9\u03aa\5`\61\2\u03aa"+ + "\u03ac\3\2\2\2\u03ab\u038a\3\2\2\2\u03ab\u0390\3\2\2\2\u03ab\u0398\3\2"+ + "\2\2\u03aco\3\2\2\2\u03ad\u03b0\5d\63\2\u03ae\u03b0\5\u0082B\2\u03af\u03ad"+ + "\3\2\2\2\u03af\u03ae\3\2\2\2\u03b0q\3\2\2\2\u03b1\u03b3\5\u00caf\2\u03b2"+ + "\u03b1\3\2\2\2\u03b2\u03b3\3\2\2\2\u03b3\u03b4\3\2\2\2\u03b4\u03b5\5\u008c"+ + "G\2\u03b5\u03b6\5\u00e0q\2\u03b6s\3\2\2\2\u03b7\u03ba\5\\/\2\u03b8\u03ba"+ + "\5\u0112\u008a\2\u03b9\u03b7\3\2\2\2\u03b9\u03b8\3\2\2\2\u03bau\3\2\2"+ + "\2\u03bb\u03c5\7\21\2\2\u03bc\u03c5\7\33\2\2\u03bd\u03c0\7=\2\2\u03be"+ + "\u03c1\5\\/\2\u03bf\u03c1\5\u0112\u008a\2\u03c0\u03be\3\2\2\2\u03c0\u03bf"+ + "\3\2\2\2\u03c0\u03c1\3\2\2\2\u03c1\u03c5\3\2\2\2\u03c2\u03c3\7,\2\2\u03c3"+ + "\u03c5\7\u0086\2\2\u03c4\u03bb\3\2\2\2\u03c4\u03bc\3\2\2\2\u03c4\u03bd"+ + "\3\2\2\2\u03c4\u03c2\3\2\2\2\u03c5\u03c6\3\2\2\2\u03c6\u03c7\7\u0082\2"+ + "\2\u03c7w\3\2\2\2\u03c8\u03c9\5~@\2\u03c9y\3\2\2\2\u03ca\u03cc\5|?\2\u03cb"+ + "\u03ca\3\2\2\2\u03cc\u03cd\3\2\2\2\u03cd\u03cb\3\2\2\2\u03cd\u03ce\3\2"+ + "\2\2\u03ce{\3\2\2\2\u03cf\u03d9\5~@\2\u03d0\u03d9\5\u0106\u0084\2\u03d1"+ + "\u03d9\5\u014c\u00a7\2\u03d2\u03d9\5\u0160\u00b1\2\u03d3\u03d9\5\u0162"+ + "\u00b2\2\u03d4\u03d9\5\u00c8e\2\u03d5\u03d9\5\u00ba^\2\u03d6\u03d9\5\u0086"+ + "D\2\u03d7\u03d9\5\u0088E\2\u03d8\u03cf\3\2\2\2\u03d8\u03d0\3\2\2\2\u03d8"+ + "\u03d1\3\2\2\2\u03d8\u03d2\3\2\2\2\u03d8\u03d3\3\2\2\2\u03d8\u03d4\3\2"+ + "\2\2\u03d8\u03d5\3\2\2\2\u03d8\u03d6\3\2\2\2\u03d8\u03d7\3\2\2\2\u03d9"+ + "}\3\2\2\2\u03da\u03e3\5\u0082B\2\u03db\u03e3\5\u00c6d\2\u03dc\u03e3\5"+ + "\u00be`\2\u03dd\u03e3\5\u00c2b\2\u03de\u03e3\5\u00c4c\2\u03df\u03e3\5"+ + "\u0084C\2\u03e0\u03e3\5\u0080A\2\u03e1\u03e3\5\u00aaV\2\u03e2\u03da\3"+ + "\2\2\2\u03e2\u03db\3\2\2\2\u03e2\u03dc\3\2\2\2\u03e2\u03dd\3\2\2\2\u03e2"+ + "\u03de\3\2\2\2\u03e2\u03df\3\2\2\2\u03e2\u03e0\3\2\2\2\u03e2\u03e1\3\2"+ + "\2\2\u03e3\177\3\2\2\2\u03e4\u03e5\7Q\2\2\u03e5\u03e7\7\u0086\2\2\u03e6"+ + "\u03e8\5\u00caf\2\u03e7\u03e6\3\2\2\2\u03e7\u03e8\3\2\2\2\u03e8\u03e9"+ + "\3\2\2\2\u03e9\u03ea\7g\2\2\u03ea\u03eb\5\u00f4{\2\u03eb\u03ec\7\u0082"+ + "\2\2\u03ec\u0081\3\2\2\2\u03ed\u03ef\5\u008cG\2\u03ee\u03ed\3\2\2\2\u03ee"+ + "\u03ef\3\2\2\2\u03ef\u03f1\3\2\2\2\u03f0\u03f2\5\u00dco\2\u03f1\u03f0"+ + "\3\2\2\2\u03f1\u03f2\3\2\2\2\u03f2\u03f3\3\2\2\2\u03f3\u03fc\7\u0082\2"+ + "\2\u03f4\u03f6\5\u00caf\2\u03f5\u03f7\5\u008cG\2\u03f6\u03f5\3\2\2\2\u03f6"+ + "\u03f7\3\2\2\2\u03f7\u03f8\3\2\2\2\u03f8\u03f9\5\u00dco\2\u03f9\u03fa"+ + "\7\u0082\2\2\u03fa\u03fc\3\2\2\2\u03fb\u03ee\3\2\2\2\u03fb\u03f4\3\2\2"+ + "\2\u03fc\u0083\3\2\2\2\u03fd\u03fe\7B\2\2\u03fe\u03ff\7W\2\2\u03ff\u0400"+ + "\5^\60\2\u0400\u0401\7|\2\2\u0401\u0402\7\6\2\2\u0402\u0403\7X\2\2\u0403"+ + "\u0404\7\u0082\2\2\u0404\u0085\3\2\2\2\u0405\u0406\7\u0082\2\2\u0406\u0087"+ + "\3\2\2\2\u0407\u0408\5\u00caf\2\u0408\u0409\7\u0082\2\2\u0409\u0089\3"+ + "\2\2\2\u040a\u0411\5\u008eH\2\u040b\u0411\5\u0094K\2\u040c\u0411\5\u0090"+ + "I\2\u040d\u0411\7+\2\2\u040e\u0411\7L\2\2\u040f\u0411\7\31\2\2\u0410\u040a"+ + "\3\2\2\2\u0410\u040b\3\2\2\2\u0410\u040c\3\2\2\2\u0410\u040d\3\2\2\2\u0410"+ + "\u040e\3\2\2\2\u0410\u040f\3\2\2\2\u0411\u008b\3\2\2\2\u0412\u0414\5\u008a"+ + "F\2\u0413\u0412\3\2\2\2\u0414\u0415\3\2\2\2\u0415\u0413\3\2\2\2\u0415"+ + "\u0416\3\2\2\2\u0416\u0418\3\2\2\2\u0417\u0419\5\u00caf\2\u0418\u0417"+ + "\3\2\2\2\u0418\u0419\3\2\2\2\u0419\u008d\3\2\2\2\u041a\u041b\t\r\2\2\u041b"+ + "\u008f\3\2\2\2\u041c\u041d\t\16\2\2\u041d\u0091\3\2\2\2\u041e\u041f\7"+ + "\u0086\2\2\u041f\u0093\3\2\2\2\u0420\u0424\5\u0096L\2\u0421\u0424\5\u0116"+ + "\u008c\2\u0422\u0424\5\u00a6T\2\u0423\u0420\3\2\2\2\u0423\u0421\3\2\2"+ + "\2\u0423\u0422\3\2\2\2\u0424\u0095\3\2\2\2\u0425\u042a\5\u009cO\2\u0426"+ + "\u042a\5\u00a2R\2\u0427\u042a\5\u015e\u00b0\2\u0428\u042a\5\u00eex\2\u0429"+ + "\u0425\3\2\2\2\u0429\u0426\3\2\2\2\u0429\u0427\3\2\2\2\u0429\u0428\3\2"+ + "\2\2\u042a\u0097\3\2\2\2\u042b\u042d\5\u0094K\2\u042c\u042b\3\2\2\2\u042d"+ + "\u042e\3\2\2\2\u042e\u042c\3\2\2\2\u042e\u042f\3\2\2\2\u042f\u0431\3\2"+ + "\2\2\u0430\u0432\5\u00caf\2\u0431\u0430\3\2\2\2\u0431\u0432\3\2\2\2\u0432"+ + "\u0099\3\2\2\2\u0433\u0435\5\u0096L\2\u0434\u0433\3\2\2\2\u0435\u0436"+ + "\3\2\2\2\u0436\u0434\3\2\2\2\u0436\u0437\3\2\2\2\u0437\u0439\3\2\2\2\u0438"+ + "\u043a\5\u00caf\2\u0439\u0438\3\2\2\2\u0439\u043a\3\2\2\2\u043a\u009b"+ + "\3\2\2\2\u043b\u043d\5\f\7\2\u043c\u043b\3\2\2\2\u043c\u043d\3\2\2\2\u043d"+ + "\u043e\3\2\2\2\u043e\u0453\5\u009eP\2\u043f\u0440\5\f\7\2\u0440\u0441"+ + "\7F\2\2\u0441\u0442\5\u0154\u00ab\2\u0442\u0453\3\2\2\2\u0443\u0453\7"+ + "\24\2\2\u0444\u0453\7\25\2\2\u0445\u0453\7\26\2\2\u0446\u0453\7U\2\2\u0447"+ + "\u0453\7\20\2\2\u0448\u0453\7>\2\2\u0449\u0453\7/\2\2\u044a\u0453\7\60"+ + "\2\2\u044b\u0453\7?\2\2\u044c\u0453\7P\2\2\u044d\u0453\7)\2\2\u044e\u0453"+ + "\7 \2\2\u044f\u0453\7S\2\2\u0450\u0453\7\17\2\2\u0451\u0453\5\u00a0Q\2"+ + "\u0452\u043c\3\2\2\2\u0452\u043f\3\2\2\2\u0452\u0443\3\2\2\2\u0452\u0444"+ + "\3\2\2\2\u0452\u0445\3\2\2\2\u0452\u0446\3\2\2\2\u0452\u0447\3\2\2\2\u0452"+ + "\u0448\3\2\2\2\u0452\u0449\3\2\2\2\u0452\u044a\3\2\2\2\u0452\u044b\3\2"+ + "\2\2\u0452\u044c\3\2\2\2\u0452\u044d\3\2\2\2\u0452\u044e\3\2\2\2\u0452"+ + "\u044f\3\2\2\2\u0452\u0450\3\2\2\2\u0452\u0451\3\2\2\2\u0453\u009d\3\2"+ + "\2\2\u0454\u0459\5\u0114\u008b\2\u0455\u0459\5\u00a4S\2\u0456\u0459\5"+ + "\u0092J\2\u0457\u0459\5\u0154\u00ab\2\u0458\u0454\3\2\2\2\u0458\u0455"+ + "\3\2\2\2\u0458\u0456\3\2\2\2\u0458\u0457\3\2\2\2\u0459\u009f\3\2\2\2\u045a"+ + "\u045b\7\34\2\2\u045b\u045e\7W\2\2\u045c\u045f\5\\/\2\u045d\u045f\7\17"+ + "\2\2\u045e\u045c\3\2\2\2\u045e\u045d\3\2\2\2\u045f\u0460\3\2\2\2\u0460"+ + "\u0461\7X\2\2\u0461\u00a1\3\2\2\2\u0462\u0471\5\u011e\u0090\2\u0463\u0465"+ + "\5\u00caf\2\u0464\u0463\3\2\2\2\u0464\u0465\3\2\2\2\u0465\u0467\3\2\2"+ + "\2\u0466\u0468\5\f\7\2\u0467\u0466\3\2\2\2\u0467\u0468\3\2\2\2\u0468\u0469"+ + "\3\2\2\2\u0469\u0472\7\u0086\2\2\u046a\u0472\5\u0154\u00ab\2\u046b\u046d"+ + "\5\f\7\2\u046c\u046e\7F\2\2\u046d\u046c\3\2\2\2\u046d\u046e\3\2\2\2\u046e"+ + "\u046f\3\2\2\2\u046f\u0470\5\u0154\u00ab\2\u0470\u0472\3\2\2\2\u0471\u0464"+ + "\3\2\2\2\u0471\u046a\3\2\2\2\u0471\u046b\3\2\2\2\u0472\u0479\3\2\2\2\u0473"+ + "\u0475\7#\2\2\u0474\u0476\5\f\7\2\u0475\u0474\3\2\2\2\u0475\u0476\3\2"+ + "\2\2\u0476\u0477\3\2\2\2\u0477\u0479\7\u0086\2\2\u0478\u0462\3\2\2\2\u0478"+ + "\u0473\3\2\2\2\u0479\u00a3\3\2\2\2\u047a\u047b\7\u0086\2\2\u047b\u00a5"+ + "\3\2\2\2\u047c\u047d\5\u00a8U\2\u047d\u0482\7[\2\2\u047e\u0480\5\u00b0"+ + "Y\2\u047f\u0481\7|\2\2\u0480\u047f\3\2\2\2\u0480\u0481\3\2\2\2\u0481\u0483"+ + "\3\2\2\2\u0482\u047e\3\2\2\2\u0482\u0483\3\2\2\2\u0483\u0484\3\2\2\2\u0484"+ + "\u0485\7\\\2\2\u0485\u00a7\3\2\2\2\u0486\u0488\5\u00acW\2\u0487\u0489"+ + "\5\u00caf\2\u0488\u0487\3\2\2\2\u0488\u0489\3\2\2\2\u0489\u048e\3\2\2"+ + "\2\u048a\u048c\5\f\7\2\u048b\u048a\3\2\2\2\u048b\u048c\3\2\2\2\u048c\u048d"+ + "\3\2\2\2\u048d\u048f\7\u0086\2\2\u048e\u048b\3\2\2\2\u048e\u048f\3\2\2"+ + "\2\u048f\u0491\3\2\2\2\u0490\u0492\5\u00aeX\2\u0491\u0490\3\2\2\2\u0491"+ + "\u0492\3\2\2\2\u0492\u00a9\3\2\2\2\u0493\u0495\5\u00acW\2\u0494\u0496"+ + "\5\u00caf\2\u0495\u0494\3\2\2\2\u0495\u0496\3\2\2\2\u0496\u0497\3\2\2"+ + "\2\u0497\u0499\7\u0086\2\2\u0498\u049a\5\u00aeX\2\u0499\u0498\3\2\2\2"+ + "\u0499\u049a\3\2\2\2\u049a\u049b\3\2\2\2\u049b\u049c\7\u0082\2\2\u049c"+ + "\u00ab\3\2\2\2\u049d\u049f\7#\2\2\u049e\u04a0\t\17\2\2\u049f\u049e\3\2"+ + "\2\2\u049f\u04a0\3\2\2\2\u04a0\u00ad\3\2\2\2\u04a1\u04a2\7\u0080\2\2\u04a2"+ + "\u04a3\5\u0098M\2\u04a3\u00af\3\2\2\2\u04a4\u04a9\5\u00b2Z\2\u04a5\u04a6"+ + "\7|\2\2\u04a6\u04a8\5\u00b2Z\2\u04a7\u04a5\3\2\2\2\u04a8\u04ab\3\2\2\2"+ + "\u04a9\u04a7\3\2\2\2\u04a9\u04aa\3\2\2\2\u04aa\u00b1\3\2\2\2\u04ab\u04a9"+ + "\3\2\2\2\u04ac\u04af\5\u00b4[\2\u04ad\u04ae\7g\2\2\u04ae\u04b0\5^\60\2"+ + "\u04af\u04ad\3\2\2\2\u04af\u04b0\3\2\2\2\u04b0\u00b3\3\2\2\2\u04b1\u04b2"+ + "\7\u0086\2\2\u04b2\u00b5\3\2\2\2\u04b3\u04b6\5\u00b8]\2\u04b4\u04b6\5"+ + "\u00bc_\2\u04b5\u04b3\3\2\2\2\u04b5\u04b4\3\2\2\2\u04b6\u00b7\3\2\2\2"+ + "\u04b7\u04b8\7\u0086\2\2\u04b8\u00b9\3\2\2\2\u04b9\u04bb\7.\2\2\u04ba"+ + "\u04b9\3\2\2\2\u04ba\u04bb\3\2\2\2\u04bb\u04bc\3\2\2\2\u04bc\u04bf\7\62"+ + "\2\2\u04bd\u04c0\7\u0086\2\2\u04be\u04c0\5\u00b8]\2\u04bf\u04bd\3\2\2"+ + "\2\u04bf\u04be\3\2\2\2\u04bf\u04c0\3\2\2\2\u04c0\u04c1\3\2\2\2\u04c1\u04c3"+ + "\7[\2\2\u04c2\u04c4\5z>\2\u04c3\u04c2\3\2\2\2\u04c3\u04c4\3\2\2\2\u04c4"+ + "\u04c5\3\2\2\2\u04c5\u04c6\7\\\2\2\u04c6\u00bb\3\2\2\2\u04c7\u04c8\7\u0086"+ + "\2\2\u04c8\u00bd\3\2\2\2\u04c9\u04ca\7\62\2\2\u04ca\u04cb\7\u0086\2\2"+ + "\u04cb\u04cc\7g\2\2\u04cc\u04cd\5\u00c0a\2\u04cd\u04ce\7\u0082\2\2\u04ce"+ + "\u00bf\3\2\2\2\u04cf\u04d1\5\f\7\2\u04d0\u04cf\3\2\2\2\u04d0\u04d1\3\2"+ + "\2\2\u04d1\u04d2\3\2\2\2\u04d2\u04d3\5\u00b6\\\2\u04d3\u00c1\3\2\2\2\u04d4"+ + "\u04da\7Q\2\2\u04d5\u04d7\7N\2\2\u04d6\u04d5\3\2\2\2\u04d6\u04d7\3\2\2"+ + "\2\u04d7\u04d8\3\2\2\2\u04d8\u04db\5\f\7\2\u04d9\u04db\7\u0081\2\2\u04da"+ + "\u04d6\3\2\2\2\u04da\u04d9\3\2\2\2\u04db\u04dc\3\2\2\2\u04dc\u04dd\5\b"+ + "\5\2\u04dd\u04de\7\u0082\2\2\u04de\u00c3\3\2\2\2\u04df\u04e1\5\u00caf"+ + "\2\u04e0\u04df\3\2\2\2\u04e0\u04e1\3\2\2\2\u04e1\u04e2\3\2\2\2\u04e2\u04e3"+ + "\7Q\2\2\u04e3\u04e5\7\62\2\2\u04e4\u04e6\5\f\7\2\u04e5\u04e4\3\2\2\2\u04e5"+ + "\u04e6\3\2\2\2\u04e6\u04e7\3\2\2\2\u04e7\u04e8\5\u00b6\\\2\u04e8\u04e9"+ + "\7\u0082\2\2\u04e9\u00c5\3\2\2\2\u04ea\u04eb\7\16\2\2\u04eb\u04ec\7W\2"+ + "\2\u04ec\u04ed\7\6\2\2\u04ed\u04ee\7X\2\2\u04ee\u04ef\7\u0082\2\2\u04ef"+ + "\u00c7\3\2\2\2\u04f0\u04f1\7&\2\2\u04f1\u04f8\7\6\2\2\u04f2\u04f4\7[\2"+ + "\2\u04f3\u04f5\5z>\2\u04f4\u04f3\3\2\2\2\u04f4\u04f5\3\2\2\2\u04f5\u04f6"+ + "\3\2\2\2\u04f6\u04f9\7\\\2\2\u04f7\u04f9\5|?\2\u04f8\u04f2\3\2\2\2\u04f8"+ + "\u04f7\3\2\2\2\u04f9\u00c9\3\2\2\2\u04fa\u04fc\5\u00ccg\2\u04fb\u04fa"+ + "\3\2\2\2\u04fc\u04fd\3\2\2\2\u04fd\u04fb\3\2\2\2\u04fd\u04fe\3\2\2\2\u04fe"+ + "\u00cb\3\2\2\2\u04ff\u0500\7Y\2\2\u0500\u0502\7Y\2\2\u0501\u0503\5\u00d0"+ + "i\2\u0502\u0501\3\2\2\2\u0502\u0503\3\2\2\2\u0503\u0504\3\2\2\2\u0504"+ + "\u0505\7Z\2\2\u0505\u0508\7Z\2\2\u0506\u0508\5\u00ceh\2\u0507\u04ff\3"+ + "\2\2\2\u0507\u0506\3\2\2\2\u0508\u00cd\3\2\2\2\u0509\u050a\7\f\2\2\u050a"+ + "\u050d\7W\2\2\u050b\u050e\5\u00f4{\2\u050c\u050e\5^\60\2\u050d\u050b\3"+ + "\2\2\2\u050d\u050c\3\2\2\2\u050e\u0510\3\2\2\2\u050f\u0511\7\u0085\2\2"+ + "\u0510\u050f\3\2\2\2\u0510\u0511\3\2\2\2\u0511\u0512\3\2\2\2\u0512\u0513"+ + "\7X\2\2\u0513\u00cf\3\2\2\2\u0514\u0519\5\u00d2j\2\u0515\u0516\7|\2\2"+ + "\u0516\u0518\5\u00d2j\2\u0517\u0515\3\2\2\2\u0518\u051b\3\2\2\2\u0519"+ + "\u0517\3\2\2\2\u0519\u051a\3\2\2\2\u051a\u051d\3\2\2\2\u051b\u0519\3\2"+ + "\2\2\u051c\u051e\7\u0085\2\2\u051d\u051c\3\2\2\2\u051d\u051e\3\2\2\2\u051e"+ + "\u00d1\3\2\2\2\u051f\u0520\5\u00d4k\2\u0520\u0521\7\u0081\2\2\u0521\u0523"+ + "\3\2\2\2\u0522\u051f\3\2\2\2\u0522\u0523\3\2\2\2\u0523\u0524\3\2\2\2\u0524"+ + "\u0526\7\u0086\2\2\u0525\u0527\5\u00d6l\2\u0526\u0525\3\2\2\2\u0526\u0527"+ + "\3\2\2\2\u0527\u00d3\3\2\2\2\u0528\u0529\7\u0086\2\2\u0529\u00d5\3\2\2"+ + "\2\u052a\u052c\7W\2\2\u052b\u052d\5\u00d8m\2\u052c\u052b\3\2\2\2\u052c"+ + "\u052d\3\2\2\2\u052d\u052e\3\2\2\2\u052e\u052f\7X\2\2\u052f\u00d7\3\2"+ + "\2\2\u0530\u0532\5\u00dan\2\u0531\u0530\3\2\2\2\u0532\u0533\3\2\2\2\u0533"+ + "\u0531\3\2\2\2\u0533\u0534\3\2\2\2\u0534\u00d9\3\2\2\2\u0535\u0536\7W"+ + "\2\2\u0536\u0537\5\u00d8m\2\u0537\u0538\7X\2\2\u0538\u0547\3\2\2\2\u0539"+ + "\u053a\7Y\2\2\u053a\u053b\5\u00d8m\2\u053b\u053c\7Z\2\2\u053c\u0547\3"+ + "\2\2\2\u053d\u053e\7[\2\2\u053e\u053f\5\u00d8m\2\u053f\u0540\7\\\2\2\u0540"+ + "\u0547\3\2\2\2\u0541\u0543\n\20\2\2\u0542\u0541\3\2\2\2\u0543\u0544\3"+ + "\2\2\2\u0544\u0542\3\2\2\2\u0544\u0545\3\2\2\2\u0545\u0547\3\2\2\2\u0546"+ + "\u0535\3\2\2\2\u0546\u0539\3\2\2\2\u0546\u053d\3\2\2\2\u0546\u0542\3\2"+ + "\2\2\u0547\u00db\3\2\2\2\u0548\u054d\5\u00dep\2\u0549\u054a\7|\2\2\u054a"+ + "\u054c\5\u00dep\2\u054b\u0549\3\2\2\2\u054c\u054f\3\2\2\2\u054d\u054b"+ + "\3\2\2\2\u054d\u054e\3\2\2\2\u054e\u00dd\3\2\2\2\u054f\u054d\3\2\2\2\u0550"+ + "\u0552\5\u00e0q\2\u0551\u0553\5\u010a\u0086\2\u0552\u0551\3\2\2\2\u0552"+ + "\u0553\3\2\2\2\u0553\u00df\3\2\2\2\u0554\u055a\5\u00e2r\2\u0555\u0556"+ + "\5\u00e4s\2\u0556\u0557\5\u00e6t\2\u0557\u0558\5\u00e8u\2\u0558\u055a"+ + "\3\2\2\2\u0559\u0554\3\2\2\2\u0559\u0555\3\2\2\2\u055a\u00e1\3\2\2\2\u055b"+ + "\u055d\5\u00eav\2\u055c\u055e\7\30\2\2\u055d\u055c\3\2\2\2\u055d\u055e"+ + "\3\2\2\2\u055e\u0560\3\2\2\2\u055f\u055b\3\2\2\2\u0560\u0563\3\2\2\2\u0561"+ + "\u055f\3\2\2\2\u0561\u0562\3\2\2\2\u0562\u0564\3\2\2\2\u0563\u0561\3\2"+ + "\2\2\u0564\u0565\5\u00e4s\2\u0565\u00e3\3\2\2\2\u0566\u0567\bs\1\2\u0567"+ + "\u0569\5\u00f2z\2\u0568\u056a\5\u00caf\2\u0569\u0568\3\2\2\2\u0569\u056a"+ + "\3\2\2\2\u056a\u0570\3\2\2\2\u056b\u056c\7W\2\2\u056c\u056d\5\u00e2r\2"+ + "\u056d\u056e\7X\2\2\u056e\u0570\3\2\2\2\u056f\u0566\3\2\2\2\u056f\u056b"+ + "\3\2\2\2\u0570\u057f\3\2\2\2\u0571\u057b\f\4\2\2\u0572\u057c\5\u00e6t"+ + "\2\u0573\u0575\7Y\2\2\u0574\u0576\5^\60\2\u0575\u0574\3\2\2\2\u0575\u0576"+ + "\3\2\2\2\u0576\u0577\3\2\2\2\u0577\u0579\7Z\2\2\u0578\u057a\5\u00caf\2"+ + "\u0579\u0578\3\2\2\2\u0579\u057a\3\2\2\2\u057a\u057c\3\2\2\2\u057b\u0572"+ + "\3\2\2\2\u057b\u0573\3\2\2\2\u057c\u057e\3\2\2\2\u057d\u0571\3\2\2\2\u057e"+ + "\u0581\3\2\2\2\u057f\u057d\3\2\2\2\u057f\u0580\3\2\2\2\u0580\u00e5\3\2"+ + "\2\2\u0581\u057f\3\2\2\2\u0582\u0584\7W\2\2\u0583\u0585\5\u0100\u0081"+ + "\2\u0584\u0583\3\2\2\2\u0584\u0585\3\2\2\2\u0585\u0586\3\2\2\2\u0586\u0588"+ + "\7X\2\2\u0587\u0589\5\u00ecw\2\u0588\u0587\3\2\2\2\u0588\u0589\3\2\2\2"+ + "\u0589\u058b\3\2\2\2\u058a\u058c\5\u00f0y\2\u058b\u058a\3\2\2\2\u058b"+ + "\u058c\3\2\2\2\u058c\u058e\3\2\2\2\u058d\u058f\5\u0170\u00b9\2\u058e\u058d"+ + "\3\2\2\2\u058e\u058f\3\2\2\2\u058f\u0591\3\2\2\2\u0590\u0592\5\u00caf"+ + "\2\u0591\u0590\3\2\2\2\u0591\u0592\3\2\2\2\u0592\u00e7\3\2\2\2\u0593\u0594"+ + "\7~\2\2\u0594\u0596\5\u009aN\2\u0595\u0597\5\u00f6|\2\u0596\u0595\3\2"+ + "\2\2\u0596\u0597\3\2\2\2\u0597\u00e9\3\2\2\2\u0598\u059a\t\21\2\2\u0599"+ + "\u059b\5\u00caf\2\u059a\u0599\3\2\2\2\u059a\u059b\3\2\2\2\u059b\u05a7"+ + "\3\2\2\2\u059c\u059e\5\f\7\2\u059d\u059c\3\2\2\2\u059d\u059e\3\2\2\2\u059e"+ + "\u059f\3\2\2\2\u059f\u05a1\7_\2\2\u05a0\u05a2\5\u00caf\2\u05a1\u05a0\3"+ + "\2\2\2\u05a1\u05a2\3\2\2\2\u05a2\u05a4\3\2\2\2\u05a3\u05a5\5\u00ecw\2"+ + "\u05a4\u05a3\3\2\2\2\u05a4\u05a5\3\2\2\2\u05a5\u05a7\3\2\2\2\u05a6\u0598"+ + "\3\2\2\2\u05a6\u059d\3\2\2\2\u05a7\u00eb\3\2\2\2\u05a8\u05aa\5\u00eex"+ + "\2\u05a9\u05a8\3\2\2\2\u05aa\u05ab\3\2\2\2\u05ab\u05a9\3\2\2\2\u05ab\u05ac"+ + "\3\2\2\2\u05ac\u00ed\3\2\2\2\u05ad\u05ae\t\22\2\2\u05ae\u00ef\3\2\2\2"+ + "\u05af\u05b0\t\21\2\2\u05b0\u00f1\3\2\2\2\u05b1\u05b3\7\u0085\2\2\u05b2"+ + "\u05b1\3\2\2\2\u05b2\u05b3\3\2\2\2\u05b3\u05b4\3\2\2\2\u05b4\u05b5\5\6"+ + "\4\2\u05b5\u00f3\3\2\2\2\u05b6\u05b8\5\u0098M\2\u05b7\u05b9\5\u00f6|\2"+ + "\u05b8\u05b7\3\2\2\2\u05b8\u05b9\3\2\2\2\u05b9\u00f5\3\2\2\2\u05ba\u05c3"+ + "\5\u00f8}\2\u05bb\u05bd\5\u00fa~\2\u05bc\u05bb\3\2\2\2\u05bc\u05bd\3\2"+ + "\2\2\u05bd\u05be\3\2\2\2\u05be\u05bf\5\u00e6t\2\u05bf\u05c0\5\u00e8u\2"+ + "\u05c0\u05c3\3\2\2\2\u05c1\u05c3\5\u00fc\177\2\u05c2\u05ba\3\2\2\2\u05c2"+ + "\u05bc\3\2\2\2\u05c2\u05c1\3\2\2\2\u05c3\u00f7\3\2\2\2\u05c4\u05ce\5\u00fa"+ + "~\2\u05c5\u05c7\5\u00eav\2\u05c6\u05c5\3\2\2\2\u05c7\u05c8\3\2\2\2\u05c8"+ + "\u05c6\3\2\2\2\u05c8\u05c9\3\2\2\2\u05c9\u05cb\3\2\2\2\u05ca\u05cc\5\u00fa"+ + "~\2\u05cb\u05ca\3\2\2\2\u05cb\u05cc\3\2\2\2\u05cc\u05ce\3\2\2\2\u05cd"+ + "\u05c4\3\2\2\2\u05cd\u05c6\3\2\2\2\u05ce\u00f9\3\2\2\2\u05cf\u05d0\b~"+ + "\1\2\u05d0\u05de\5\u00e6t\2\u05d1\u05d3\7Y\2\2\u05d2\u05d4\5^\60\2\u05d3"+ + "\u05d2\3\2\2\2\u05d3\u05d4\3\2\2\2\u05d4\u05d5\3\2\2\2\u05d5\u05d7\7Z"+ + "\2\2\u05d6\u05d8\5\u00caf\2\u05d7\u05d6\3\2\2\2\u05d7\u05d8\3\2\2\2\u05d8"+ + "\u05de\3\2\2\2\u05d9\u05da\7W\2\2\u05da\u05db\5\u00f8}\2\u05db\u05dc\7"+ + "X\2\2\u05dc\u05de\3\2\2\2\u05dd\u05cf\3\2\2\2\u05dd\u05d1\3\2\2\2\u05dd"+ + "\u05d9\3\2\2\2\u05de\u05ee\3\2\2\2\u05df\u05ea\f\6\2\2\u05e0\u05eb\5\u00e6"+ + "t\2\u05e1\u05e2\5\u00fa~\2\u05e2\u05e4\7Y\2\2\u05e3\u05e5\5^\60\2\u05e4"+ + "\u05e3\3\2\2\2\u05e4\u05e5\3\2\2\2\u05e5\u05e6\3\2\2\2\u05e6\u05e8\7Z"+ + "\2\2\u05e7\u05e9\5\u00caf\2\u05e8\u05e7\3\2\2\2\u05e8\u05e9\3\2\2\2\u05e9"+ + "\u05eb\3\2\2\2\u05ea\u05e0\3\2\2\2\u05ea\u05e1\3\2\2\2\u05eb\u05ed\3\2"+ + "\2\2\u05ec\u05df\3\2\2\2\u05ed\u05f0\3\2\2\2\u05ee\u05ec\3\2\2\2\u05ee"+ + "\u05ef\3\2\2\2\u05ef\u00fb\3\2\2\2\u05f0\u05ee\3\2\2\2\u05f1\u05f3\5\u00ea"+ + "v\2\u05f2\u05f1\3\2\2\2\u05f3\u05f6\3\2\2\2\u05f4\u05f2\3\2\2\2\u05f4"+ + "\u05f5\3\2\2\2\u05f5\u05f7\3\2\2\2\u05f6\u05f4\3\2\2\2\u05f7\u05f8\5\u00fe"+ + "\u0080\2\u05f8\u00fd\3\2\2\2\u05f9\u05fa\b\u0080\1\2\u05fa\u05fb\7\u0085"+ + "\2\2\u05fb\u060a\3\2\2\2\u05fc\u0606\f\4\2\2\u05fd\u0607\5\u00e6t\2\u05fe"+ + "\u0600\7Y\2\2\u05ff\u0601\5^\60\2\u0600\u05ff\3\2\2\2\u0600\u0601\3\2"+ + "\2\2\u0601\u0602\3\2\2\2\u0602\u0604\7Z\2\2\u0603\u0605\5\u00caf\2\u0604"+ + "\u0603\3\2\2\2\u0604\u0605\3\2\2\2\u0605\u0607\3\2\2\2\u0606\u05fd\3\2"+ + "\2\2\u0606\u05fe\3\2\2\2\u0607\u0609\3\2\2\2\u0608\u05fc\3\2\2\2\u0609"+ + "\u060c\3\2\2\2\u060a\u0608\3\2\2\2\u060a\u060b\3\2\2\2\u060b\u00ff\3\2"+ + "\2\2\u060c\u060a\3\2\2\2\u060d\u0612\5\u0102\u0082\2\u060e\u0610\7|\2"+ + "\2\u060f\u060e\3\2\2\2\u060f\u0610\3\2\2\2\u0610\u0611\3\2\2\2\u0611\u0613"+ + "\7\u0085\2\2\u0612\u060f\3\2\2\2\u0612\u0613\3\2\2\2\u0613\u0101\3\2\2"+ + "\2\u0614\u0619\5\u0104\u0083\2\u0615\u0616\7|\2\2\u0616\u0618\5\u0104"+ + "\u0083\2\u0617\u0615\3\2\2\2\u0618\u061b\3\2\2\2\u0619\u0617\3\2\2\2\u0619"+ + "\u061a\3\2\2\2\u061a\u0103\3\2\2\2\u061b\u0619\3\2\2\2\u061c\u061e\5\u00ca"+ + "f\2\u061d\u061c\3\2\2\2\u061d\u061e\3\2\2\2\u061e\u061f\3\2\2\2\u061f"+ + "\u0624\5\u008cG\2\u0620\u0625\5\u00e0q\2\u0621\u0623\5\u00f6|\2\u0622"+ + "\u0621\3\2\2\2\u0622\u0623\3\2\2\2\u0623\u0625\3\2\2\2\u0624\u0620\3\2"+ + "\2\2\u0624\u0622\3\2\2\2\u0625\u0628\3\2\2\2\u0626\u0627\7g\2\2\u0627"+ + "\u0629\5\u010e\u0088\2\u0628\u0626\3\2\2\2\u0628\u0629\3\2\2\2\u0629\u0105"+ + "\3\2\2\2\u062a\u062c\5\u00caf\2\u062b\u062a\3\2\2\2\u062b\u062c\3\2\2"+ + "\2\u062c\u062e\3\2\2\2\u062d\u062f\5\u008cG\2\u062e\u062d\3\2\2\2\u062e"+ + "\u062f\3\2\2\2\u062f\u0630\3\2\2\2\u0630\u0632\5\u00e0q\2\u0631\u0633"+ + "\5\u0128\u0095\2\u0632\u0631\3\2\2\2\u0632\u0633\3\2\2\2\u0633\u0634\3"+ + "\2\2\2\u0634\u0635\5\u0108\u0085\2\u0635\u0107\3\2\2\2\u0636\u0638\5\u0140"+ + "\u00a1\2\u0637\u0636\3\2\2\2\u0637\u0638\3\2\2\2\u0638\u0639\3\2\2\2\u0639"+ + "\u063f\5f\64\2\u063a\u063f\5\u0166\u00b4\2\u063b\u063c\7g\2\2\u063c\u063d"+ + "\t\23\2\2\u063d\u063f\7\u0082\2\2\u063e\u0637\3\2\2\2\u063e\u063a\3\2"+ + "\2\2\u063e\u063b\3\2\2\2\u063f\u0109\3\2\2\2\u0640\u0646\5\u010c\u0087"+ + "\2\u0641\u0642\7W\2\2\u0642\u0643\5$\23\2\u0643\u0644\7X\2\2\u0644\u0646"+ + "\3\2\2\2\u0645\u0640\3\2\2\2\u0645\u0641\3\2\2\2\u0646\u010b\3\2\2\2\u0647"+ + "\u0648\7g\2\2\u0648\u064b\5\u010e\u0088\2\u0649\u064b\5\u0112\u008a\2"+ + "\u064a\u0647\3\2\2\2\u064a\u0649\3\2\2\2\u064b\u010d\3\2\2\2\u064c\u064f"+ + "\5X-\2\u064d\u064f\5\u0112\u008a\2\u064e\u064c\3\2\2\2\u064e\u064d\3\2"+ + "\2\2\u064f\u010f\3\2\2\2\u0650\u0652\5\u010e\u0088\2\u0651\u0653\7\u0085"+ + "\2\2\u0652\u0651\3\2\2\2\u0652\u0653\3\2\2\2\u0653\u065b\3\2\2\2\u0654"+ + "\u0655\7|\2\2\u0655\u0657\5\u010e\u0088\2\u0656\u0658\7\u0085\2\2\u0657"+ + "\u0656\3\2\2\2\u0657\u0658\3\2\2\2\u0658\u065a\3\2\2\2\u0659\u0654\3\2"+ + "\2\2\u065a\u065d\3\2\2\2\u065b\u0659\3\2\2\2\u065b\u065c\3\2\2\2\u065c"+ + "\u0111\3\2\2\2\u065d\u065b\3\2\2\2\u065e\u0663\7[\2\2\u065f\u0661\5\u0110"+ + "\u0089\2\u0660\u0662\7|\2\2\u0661\u0660\3\2\2\2\u0661\u0662\3\2\2\2\u0662"+ + "\u0664\3\2\2\2\u0663\u065f\3\2\2\2\u0663\u0664\3\2\2\2\u0664\u0665\3\2"+ + "\2\2\u0665\u0666\7\\\2\2\u0666\u0113\3\2\2\2\u0667\u066a\7\u0086\2\2\u0668"+ + "\u066a\5\u0154\u00ab\2\u0669\u0667\3\2\2\2\u0669\u0668\3\2\2\2\u066a\u0115"+ + "\3\2\2\2\u066b\u066c\5\u0118\u008d\2\u066c\u066e\7[\2\2\u066d\u066f\5"+ + "\u0120\u0091\2\u066e\u066d\3\2\2\2\u066e\u066f\3\2\2\2\u066f\u0670\3\2"+ + "\2\2\u0670\u0671\7\\\2\2\u0671\u0117\3\2\2\2\u0672\u0674\5\u011e\u0090"+ + "\2\u0673\u0675\5\u00caf\2\u0674\u0673\3\2\2\2\u0674\u0675\3\2\2\2\u0675"+ + "\u067a\3\2\2\2\u0676\u0678\5\u011a\u008e\2\u0677\u0679\5\u011c\u008f\2"+ + "\u0678\u0677\3\2\2\2\u0678\u0679\3\2\2\2\u0679\u067b\3\2\2\2\u067a\u0676"+ + "\3\2\2\2\u067a\u067b\3\2\2\2\u067b\u067d\3\2\2\2\u067c\u067e\5\u012e\u0098"+ + "\2\u067d\u067c\3\2\2\2\u067d\u067e\3\2\2\2\u067e\u068a\3\2\2\2\u067f\u0681"+ + "\7O\2\2\u0680\u0682\5\u00caf\2\u0681\u0680\3\2\2\2\u0681\u0682\3\2\2\2"+ + "\u0682\u0687\3\2\2\2\u0683\u0685\5\u011a\u008e\2\u0684\u0686\5\u011c\u008f"+ + "\2\u0685\u0684\3\2\2\2\u0685\u0686\3\2\2\2\u0686\u0688\3\2\2\2\u0687\u0683"+ + "\3\2\2\2\u0687\u0688\3\2\2\2\u0688\u068a\3\2\2\2\u0689\u0672\3\2\2\2\u0689"+ + "\u067f\3\2\2\2\u068a\u0119\3\2\2\2\u068b\u068d\5\f\7\2\u068c\u068b\3\2"+ + "\2\2\u068c\u068d\3\2\2\2\u068d\u068e\3\2\2\2\u068e\u068f\5\u0114\u008b"+ + "\2\u068f\u011b\3\2\2\2\u0690\u0691\7(\2\2\u0691\u011d\3\2\2\2\u0692\u0693"+ + "\t\17\2\2\u0693\u011f\3\2\2\2\u0694\u0699\5\u0122\u0092\2\u0695\u0696"+ + "\5\u0138\u009d\2\u0696\u0697\7\u0080\2\2\u0697\u0699\3\2\2\2\u0698\u0694"+ + "\3\2\2\2\u0698\u0695\3\2\2\2\u0699\u069a\3\2\2\2\u069a\u0698\3\2\2\2\u069a"+ + "\u069b\3\2\2\2\u069b\u0121\3\2\2\2\u069c\u069e\5\u00caf\2\u069d\u069c"+ + "\3\2\2\2\u069d\u069e\3\2\2\2\u069e\u06a0\3\2\2\2\u069f\u06a1\5\u008cG"+ + "\2\u06a0\u069f\3\2\2\2\u06a0\u06a1\3\2\2\2\u06a1\u06a3\3\2\2\2\u06a2\u06a4"+ + "\5\u0124\u0093\2\u06a3\u06a2\3\2\2\2\u06a3\u06a4\3\2\2\2\u06a4\u06a5\3"+ + "\2\2\2\u06a5\u06ad\7\u0082\2\2\u06a6\u06ad\5\u0106\u0084\2\u06a7\u06ad"+ + "\5\u00c2b\2\u06a8\u06ad\5\u0084C\2\u06a9\u06ad\5\u014c\u00a7\2\u06aa\u06ad"+ + "\5\u0080A\2\u06ab\u06ad\5\u0086D\2\u06ac\u069d\3\2\2\2\u06ac\u06a6\3\2"+ + "\2\2\u06ac\u06a7\3\2\2\2\u06ac\u06a8\3\2\2\2\u06ac\u06a9\3\2\2\2\u06ac"+ + "\u06aa\3\2\2\2\u06ac\u06ab\3\2\2\2\u06ad\u0123\3\2\2\2\u06ae\u06b3\5\u0126"+ + "\u0094\2\u06af\u06b0\7|\2\2\u06b0\u06b2\5\u0126\u0094\2\u06b1\u06af\3"+ + "\2\2\2\u06b2\u06b5\3\2\2\2\u06b3\u06b1\3\2\2\2\u06b3\u06b4\3\2\2\2\u06b4"+ + "\u0125\3\2\2\2\u06b5\u06b3\3\2\2\2\u06b6\u06c0\5\u00e0q\2\u06b7\u06b9"+ + "\5\u0128\u0095\2\u06b8\u06b7\3\2\2\2\u06b8\u06b9\3\2\2\2\u06b9\u06bb\3"+ + "\2\2\2\u06ba\u06bc\5\u012c\u0097\2\u06bb\u06ba\3\2\2\2\u06bb\u06bc\3\2"+ + "\2\2\u06bc\u06c1\3\2\2\2\u06bd\u06bf\5\u010c\u0087\2\u06be\u06bd\3\2\2"+ + "\2\u06be\u06bf\3\2\2\2\u06bf\u06c1\3\2\2\2\u06c0\u06b8\3\2\2\2\u06c0\u06be"+ + "\3\2\2\2\u06c1\u06cb\3\2\2\2\u06c2\u06c4\7\u0086\2\2\u06c3\u06c2\3\2\2"+ + "\2\u06c3\u06c4\3\2\2\2\u06c4\u06c6\3\2\2\2\u06c5\u06c7\5\u00caf\2\u06c6"+ + "\u06c5\3\2\2\2\u06c6\u06c7\3\2\2\2\u06c7\u06c8\3\2\2\2\u06c8\u06c9\7\u0080"+ + "\2\2\u06c9\u06cb\5^\60\2\u06ca\u06b6\3\2\2\2\u06ca\u06c3\3\2\2\2\u06cb"+ + "\u0127\3\2\2\2\u06cc\u06ce\5\u012a\u0096\2\u06cd\u06cc\3\2\2\2\u06ce\u06cf"+ + "\3\2\2\2\u06cf\u06cd\3\2\2\2\u06cf\u06d0\3\2\2\2\u06d0\u0129\3\2\2\2\u06d1"+ + "\u06d2\t\24\2\2\u06d2\u012b\3\2\2\2\u06d3\u06d4\7g\2\2\u06d4\u06d5\7\u0088"+ + "\2\2\u06d5\u06d6\b\u0097\1\2\u06d6\u012d\3\2\2\2\u06d7\u06d8\7\u0080\2"+ + "\2\u06d8\u06d9\5\u0130\u0099\2\u06d9\u012f\3\2\2\2\u06da\u06dc\5\u0132"+ + "\u009a\2\u06db\u06dd\7\u0085\2\2\u06dc\u06db\3\2\2\2\u06dc\u06dd\3\2\2"+ + "\2\u06dd\u06e5\3\2\2\2\u06de\u06df\7|\2\2\u06df\u06e1\5\u0132\u009a\2"+ + "\u06e0\u06e2\7\u0085\2\2\u06e1\u06e0\3\2\2\2\u06e1\u06e2\3\2\2\2\u06e2"+ + "\u06e4\3\2\2\2\u06e3\u06de\3\2\2\2\u06e4\u06e7\3\2\2\2\u06e5\u06e3\3\2"+ + "\2\2\u06e5\u06e6\3\2\2\2\u06e6\u0131\3\2\2\2\u06e7\u06e5\3\2\2\2\u06e8"+ + "\u06ea\5\u00caf\2\u06e9\u06e8\3\2\2\2\u06e9\u06ea\3\2\2\2\u06ea\u06f7"+ + "\3\2\2\2\u06eb\u06f8\5\u0136\u009c\2\u06ec\u06ee\7R\2\2\u06ed\u06ef\5"+ + "\u0138\u009d\2\u06ee\u06ed\3\2\2\2\u06ee\u06ef\3\2\2\2\u06ef\u06f0\3\2"+ + "\2\2\u06f0\u06f8\5\u0136\u009c\2\u06f1\u06f3\5\u0138\u009d\2\u06f2\u06f4"+ + "\7R\2\2\u06f3\u06f2\3\2\2\2\u06f3\u06f4\3\2\2\2\u06f4\u06f5\3\2\2\2\u06f5"+ + "\u06f6\5\u0136\u009c\2\u06f6\u06f8\3\2\2\2\u06f7\u06eb\3\2\2\2\u06f7\u06ec"+ + "\3\2\2\2\u06f7\u06f1\3\2\2\2\u06f8\u0133\3\2\2\2\u06f9\u06fb\5\f\7\2\u06fa"+ + "\u06f9\3\2\2\2\u06fa\u06fb\3\2\2\2\u06fb\u06fc\3\2\2\2\u06fc\u06ff\5\u0114"+ + "\u008b\2\u06fd\u06ff\5\u00a0Q\2\u06fe\u06fa\3\2\2\2\u06fe\u06fd\3\2\2"+ + "\2\u06ff\u0135\3\2\2\2\u0700\u0701\5\u0134\u009b\2\u0701\u0137\3\2\2\2"+ + "\u0702\u0703\t\25\2\2\u0703\u0139\3\2\2\2\u0704\u0705\7\66\2\2\u0705\u0706"+ + "\5\u013c\u009f\2\u0706\u013b\3\2\2\2\u0707\u0709\5\u0098M\2\u0708\u070a"+ + "\5\u013e\u00a0\2\u0709\u0708\3\2\2\2\u0709\u070a\3\2\2\2\u070a\u013d\3"+ + "\2\2\2\u070b\u070d\5\u00eav\2\u070c\u070e\5\u013e\u00a0\2\u070d\u070c"+ + "\3\2\2\2\u070d\u070e\3\2\2\2\u070e\u013f\3\2\2\2\u070f\u0710\7\u0080\2"+ + "\2\u0710\u0711\5\u0142\u00a2\2\u0711\u0141\3\2\2\2\u0712\u0714\5\u0144"+ + "\u00a3\2\u0713\u0715\7\u0085\2\2\u0714\u0713\3\2\2\2\u0714\u0715\3\2\2"+ + "\2\u0715\u071d\3\2\2\2\u0716\u0717\7|\2\2\u0717\u0719\5\u0144\u00a3\2"+ + "\u0718\u071a\7\u0085\2\2\u0719\u0718\3\2\2\2\u0719\u071a\3\2\2\2\u071a"+ + "\u071c\3\2\2\2\u071b\u0716\3\2\2\2\u071c\u071f\3\2\2\2\u071d\u071b\3\2"+ + "\2\2\u071d\u071e\3\2\2\2\u071e\u0143\3\2\2\2\u071f\u071d\3\2\2\2\u0720"+ + "\u0727\5\u0146\u00a4\2\u0721\u0723\7W\2\2\u0722\u0724\5$\23\2\u0723\u0722"+ + "\3\2\2\2\u0723\u0724\3\2\2\2\u0724\u0725\3\2\2\2\u0725\u0728\7X\2\2\u0726"+ + "\u0728\5\u0112\u008a\2\u0727\u0721\3\2\2\2\u0727\u0726\3\2\2\2\u0728\u0145"+ + "\3\2\2\2\u0729\u072c\5\u0134\u009b\2\u072a\u072c\7\u0086\2\2\u072b\u0729"+ + "\3\2\2\2\u072b\u072a\3\2\2\2\u072c\u0147\3\2\2\2\u072d\u072e\7\66\2\2"+ + "\u072e\u072f\5\u0178\u00bd\2\u072f\u0149\3\2\2\2\u0730\u0734\7\66\2\2"+ + "\u0731\u0732\7\6\2\2\u0732\u0735\7\u0086\2\2\u0733\u0735\7\u008e\2\2\u0734"+ + "\u0731\3\2\2\2\u0734\u0733\3\2\2\2\u0735\u014b\3\2\2\2\u0736\u0737\7F"+ + "\2\2\u0737\u0738\7h\2\2\u0738\u0739\5\u014e\u00a8\2\u0739\u073a\7i\2\2"+ + "\u073a\u073b\5|?\2\u073b\u014d\3\2\2\2\u073c\u0741\5\u0150\u00a9\2\u073d"+ + "\u073e\7|\2\2\u073e\u0740\5\u0150\u00a9\2\u073f\u073d\3\2\2\2\u0740\u0743"+ + "\3\2\2\2\u0741\u073f\3\2\2\2\u0741\u0742\3\2\2\2\u0742\u014f\3\2\2\2\u0743"+ + "\u0741\3\2\2\2\u0744\u0747\5\u0152\u00aa\2\u0745\u0747\5\u0104\u0083\2"+ + "\u0746\u0744\3\2\2\2\u0746\u0745\3\2\2\2\u0747\u0151\3\2\2\2\u0748\u0749"+ + "\7F\2\2\u0749\u074a\7h\2\2\u074a\u074b\5\u014e\u00a8\2\u074b\u074c\7i"+ + "\2\2\u074c\u074e\3\2\2\2\u074d\u0748\3\2\2\2\u074d\u074e\3\2\2\2\u074e"+ + "\u074f\3\2\2\2\u074f\u0752\7\27\2\2\u0750\u0752\7N\2\2\u0751\u074d\3\2"+ + "\2\2\u0751\u0750\3\2\2\2\u0752\u075e\3\2\2\2\u0753\u0755\7\u0085\2\2\u0754"+ + "\u0753\3\2\2\2\u0754\u0755\3\2\2\2\u0755\u0757\3\2\2\2\u0756\u0758\7\u0086"+ + "\2\2\u0757\u0756\3\2\2\2\u0757\u0758\3\2\2\2\u0758\u075f\3\2\2\2\u0759"+ + "\u075b\7\u0086\2\2\u075a\u0759\3\2\2\2\u075a\u075b\3\2\2\2\u075b\u075c"+ + "\3\2\2\2\u075c\u075d\7g\2\2\u075d\u075f\5\u00f4{\2\u075e\u0754\3\2\2\2"+ + "\u075e\u075a\3\2\2\2\u075f\u0153\3\2\2\2\u0760\u0761\5\u0158\u00ad\2\u0761"+ + "\u0763\7h\2\2\u0762\u0764\5\u015a\u00ae\2\u0763\u0762\3\2\2\2\u0763\u0764"+ + "\3\2\2\2\u0764\u0765\3\2\2\2\u0765\u0766\7i\2\2\u0766\u0155\3\2\2\2\u0767"+ + "\u0773\5\u0154\u00ab\2\u0768\u076b\5\u0148\u00a5\2\u0769\u076b\5\u014a"+ + "\u00a6\2\u076a\u0768\3\2\2\2\u076a\u0769\3\2\2\2\u076b\u076c\3\2\2\2\u076c"+ + "\u076e\7h\2\2\u076d\u076f\5\u015a\u00ae\2\u076e\u076d\3\2\2\2\u076e\u076f"+ + "\3\2\2\2\u076f\u0770\3\2\2\2\u0770\u0771\7i\2\2\u0771\u0773\3\2\2\2\u0772"+ + "\u0767\3\2\2\2\u0772\u076a\3\2\2\2\u0773\u0157\3\2\2\2\u0774\u0775\7\u0086"+ + "\2\2\u0775\u0159\3\2\2\2\u0776\u0778\5\u015c\u00af\2\u0777\u0779\7\u0085"+ + "\2\2\u0778\u0777\3\2\2\2\u0778\u0779\3\2\2\2\u0779\u0781\3\2\2\2\u077a"+ + "\u077b\7|\2\2\u077b\u077d\5\u015c\u00af\2\u077c\u077e\7\u0085\2\2\u077d"+ + "\u077c\3\2\2\2\u077d\u077e\3\2\2\2\u077e\u0780\3\2\2\2\u077f\u077a\3\2"+ + "\2\2\u0780\u0783\3\2\2\2\u0781\u077f\3\2\2\2\u0781\u0782\3\2\2\2\u0782"+ + "\u015b\3\2\2\2\u0783\u0781\3\2\2\2\u0784\u0788\5\u00f4{\2\u0785\u0788"+ + "\5^\60\2\u0786\u0788\5\6\4\2\u0787\u0784\3\2\2\2\u0787\u0785\3\2\2\2\u0787"+ + "\u0786\3\2\2\2\u0788\u015d\3\2\2\2\u0789\u078a\7N\2\2\u078a\u0790\5\f"+ + "\7\2\u078b\u0791\7\u0086\2\2\u078c\u078e\7F\2\2\u078d\u078c\3\2\2\2\u078d"+ + "\u078e\3\2\2\2\u078e\u078f\3\2\2\2\u078f\u0791\5\u0154\u00ab\2\u0790\u078b"+ + "\3\2\2\2\u0790\u078d\3\2\2\2\u0791\u015f\3\2\2\2\u0792\u0794\7&\2\2\u0793"+ + "\u0792\3\2\2\2\u0793\u0794\3\2\2\2\u0794\u0795\3\2\2\2\u0795\u0796\7F"+ + "\2\2\u0796\u0797\5|?\2\u0797\u0161\3\2\2\2\u0798\u0799\7F\2\2\u0799\u079a"+ + "\7h\2\2\u079a\u079b\7i\2\2\u079b\u079c\5|?\2\u079c\u0163\3\2\2\2\u079d"+ + "\u079e\7K\2\2\u079e\u079f\5f\64\2\u079f\u07a0\5\u0168\u00b5\2\u07a0\u0165"+ + "\3\2\2\2\u07a1\u07a3\7K\2\2\u07a2\u07a4\5\u0140\u00a1\2\u07a3\u07a2\3"+ + "\2\2\2\u07a3\u07a4\3\2\2\2\u07a4\u07a5\3\2\2\2\u07a5\u07a6\5f\64\2\u07a6"+ + "\u07a7\5\u0168\u00b5\2\u07a7\u0167\3\2\2\2\u07a8\u07aa\5\u016a\u00b6\2"+ + "\u07a9\u07a8\3\2\2\2\u07aa\u07ab\3\2\2\2\u07ab\u07a9\3\2\2\2\u07ab\u07ac"+ + "\3\2\2\2\u07ac\u0169\3\2\2\2\u07ad\u07ae\7\23\2\2\u07ae\u07af\7W\2\2\u07af"+ + "\u07b0\5\u016c\u00b7\2\u07b0\u07b1\7X\2\2\u07b1\u07b2\5f\64\2\u07b2\u016b"+ + "\3\2\2\2\u07b3\u07b5\5\u00caf\2\u07b4\u07b3\3\2\2\2\u07b4\u07b5\3\2\2"+ + "\2\u07b5\u07b6\3\2\2\2\u07b6\u07b9\5\u0098M\2\u07b7\u07ba\5\u00e0q\2\u07b8"+ + "\u07ba\5\u00f6|\2\u07b9\u07b7\3\2\2\2\u07b9\u07b8\3\2\2\2\u07b9\u07ba"+ + "\3\2\2\2\u07ba\u07bd\3\2\2\2\u07bb\u07bd\7\u0085\2\2\u07bc\u07b4\3\2\2"+ + "\2\u07bc\u07bb\3\2\2\2\u07bd\u016d\3\2\2\2\u07be\u07c0\7I\2\2\u07bf\u07c1"+ + "\5X-\2\u07c0\u07bf\3\2\2\2\u07c0\u07c1\3\2\2\2\u07c1\u016f\3\2\2\2\u07c2"+ + "\u07c5\5\u0172\u00ba\2\u07c3\u07c5\5\u0176\u00bc\2\u07c4\u07c2\3\2\2\2"+ + "\u07c4\u07c3\3\2\2\2\u07c5\u0171\3\2\2\2\u07c6\u07c7\7I\2\2\u07c7\u07c9"+ + "\7W\2\2\u07c8\u07ca\5\u0174\u00bb\2\u07c9\u07c8\3\2\2\2\u07c9\u07ca\3"+ + "\2\2\2\u07ca\u07cb\3\2\2\2\u07cb\u07cc\7X\2\2\u07cc\u0173\3\2\2\2\u07cd"+ + "\u07cf\5\u00f4{\2\u07ce\u07d0\7\u0085\2\2\u07cf\u07ce\3\2\2\2\u07cf\u07d0"+ + "\3\2\2\2\u07d0\u07d8\3\2\2\2\u07d1\u07d2\7|\2\2\u07d2\u07d4\5\u00f4{\2"+ + "\u07d3\u07d5\7\u0085\2\2\u07d4\u07d3\3\2\2\2\u07d4\u07d5\3\2\2\2\u07d5"+ + "\u07d7\3\2\2\2\u07d6\u07d1\3\2\2\2\u07d7\u07da\3\2\2\2\u07d8\u07d6\3\2"+ + "\2\2\u07d8\u07d9\3\2\2\2\u07d9\u0175\3\2\2\2\u07da\u07d8\3\2\2\2\u07db"+ + "\u07dc\7\64\2\2\u07dc\u07dd\7W\2\2\u07dd\u07de\5^\60\2\u07de\u07df\7X"+ + "\2\2\u07df\u07e2\3\2\2\2\u07e0\u07e2\7\64\2\2\u07e1\u07db\3\2\2\2\u07e1"+ + "\u07e0\3\2\2\2\u07e2\u0177\3\2\2\2\u07e3\u07e6\7\63\2\2\u07e4\u07e5\7"+ + "Y\2\2\u07e5\u07e7\7Z\2\2\u07e6\u07e4\3\2\2\2\u07e6\u07e7\3\2\2\2\u07e7"+ + "\u0819\3\2\2\2\u07e8\u07eb\7\36\2\2\u07e9\u07ea\7Y\2\2\u07ea\u07ec\7Z"+ + "\2\2\u07eb\u07e9\3\2\2\2\u07eb\u07ec\3\2\2\2\u07ec\u0819\3\2\2\2\u07ed"+ + "\u0819\7]\2\2\u07ee\u0819\7^\2\2\u07ef\u0819\7_\2\2\u07f0\u0819\7`\2\2"+ + "\u07f1\u0819\7a\2\2\u07f2\u0819\7b\2\2\u07f3\u0819\7c\2\2\u07f4\u0819"+ + "\7d\2\2\u07f5\u0819\7e\2\2\u07f6\u0819\7f\2\2\u07f7\u0819\7g\2\2\u07f8"+ + "\u0819\7i\2\2\u07f9\u0819\7h\2\2\u07fa\u0819\7w\2\2\u07fb\u0819\7j\2\2"+ + "\u07fc\u0819\7k\2\2\u07fd\u0819\7l\2\2\u07fe\u0819\7g\2\2\u07ff\u0819"+ + "\7n\2\2\u0800\u0819\7o\2\2\u0801\u0819\7p\2\2\u0802\u0819\7q\2\2\u0803"+ + "\u0804\7h\2\2\u0804\u0819\7h\2\2\u0805\u0806\7i\2\2\u0806\u0819\7i\2\2"+ + "\u0807\u0819\7s\2\2\u0808\u0819\7r\2\2\u0809\u0819\7t\2\2\u080a\u0819"+ + "\7u\2\2\u080b\u0819\7v\2\2\u080c\u0819\7w\2\2\u080d\u0819\7x\2\2\u080e"+ + "\u0819\7y\2\2\u080f\u0819\7z\2\2\u0810\u0819\7{\2\2\u0811\u0819\7|\2\2"+ + "\u0812\u0819\7}\2\2\u0813\u0819\7~\2\2\u0814\u0815\7W\2\2\u0815\u0819"+ + "\7X\2\2\u0816\u0817\7Y\2\2\u0817\u0819\7Z\2\2\u0818\u07e3\3\2\2\2\u0818"+ + "\u07e8\3\2\2\2\u0818\u07ed\3\2\2\2\u0818\u07ee\3\2\2\2\u0818\u07ef\3\2"+ + "\2\2\u0818\u07f0\3\2\2\2\u0818\u07f1\3\2\2\2\u0818\u07f2\3\2\2\2\u0818"+ + "\u07f3\3\2\2\2\u0818\u07f4\3\2\2\2\u0818\u07f5\3\2\2\2\u0818\u07f6\3\2"+ + "\2\2\u0818\u07f7\3\2\2\2\u0818\u07f8\3\2\2\2\u0818\u07f9\3\2\2\2\u0818"+ + "\u07fa\3\2\2\2\u0818\u07fb\3\2\2\2\u0818\u07fc\3\2\2\2\u0818\u07fd\3\2"+ + "\2\2\u0818\u07fe\3\2\2\2\u0818\u07ff\3\2\2\2\u0818\u0800\3\2\2\2\u0818"+ + "\u0801\3\2\2\2\u0818\u0802\3\2\2\2\u0818\u0803\3\2\2\2\u0818\u0805\3\2"+ + "\2\2\u0818\u0807\3\2\2\2\u0818\u0808\3\2\2\2\u0818\u0809\3\2\2\2\u0818"+ + "\u080a\3\2\2\2\u0818\u080b\3\2\2\2\u0818\u080c\3\2\2\2\u0818\u080d\3\2"+ + "\2\2\u0818\u080e\3\2\2\2\u0818\u080f\3\2\2\2\u0818\u0810\3\2\2\2\u0818"+ + "\u0811\3\2\2\2\u0818\u0812\3\2\2\2\u0818\u0813\3\2\2\2\u0818\u0814\3\2"+ + "\2\2\u0818\u0816\3\2\2\2\u0819\u0179\3\2\2\2\u081a\u081b\t\26\2\2\u081b"+ + "\u017b\3\2\2\2\u012b\u017d\u0184\u018d\u0191\u019a\u019d\u01a1\u01a9\u01b0"+ + "\u01b3\u01b8\u01bd\u01c3\u01cb\u01cd\u01d6\u01da\u01de\u01e1\u01e5\u01e8"+ + "\u01ef\u01f3\u01f6\u01f9\u01fc\u0202\u0206\u020a\u0218\u021c\u0222\u0229"+ + "\u022f\u0233\u0237\u0239\u0241\u0246\u0253\u025a\u0266\u0270\u0275\u0279"+ + "\u0280\u0283\u028b\u028f\u0292\u0299\u02a0\u02a4\u02a9\u02ad\u02b0\u02b5"+ + "\u02c4\u02cb\u02d3\u02db\u02e4\u02eb\u02f2\u02fa\u0302\u030a\u0312\u031a"+ + "\u0322\u032b\u0333\u033c\u0343\u034b\u034e\u0351\u0357\u035d\u0363\u036a"+ + "\u0373\u037b\u037f\u0386\u0388\u039c\u03a0\u03a6\u03ab\u03af\u03b2\u03b9"+ + "\u03c0\u03c4\u03cd\u03d8\u03e2\u03e7\u03ee\u03f1\u03f6\u03fb\u0410\u0415"+ + "\u0418\u0423\u0429\u042e\u0431\u0436\u0439\u043c\u0452\u0458\u045e\u0464"+ + "\u0467\u046d\u0471\u0475\u0478\u0480\u0482\u0488\u048b\u048e\u0491\u0495"+ + "\u0499\u049f\u04a9\u04af\u04b5\u04ba\u04bf\u04c3\u04d0\u04d6\u04da\u04e0"+ + "\u04e5\u04f4\u04f8\u04fd\u0502\u0507\u050d\u0510\u0519\u051d\u0522\u0526"+ + "\u052c\u0533\u0544\u0546\u054d\u0552\u0559\u055d\u0561\u0569\u056f\u0575"+ + "\u0579\u057b\u057f\u0584\u0588\u058b\u058e\u0591\u0596\u059a\u059d\u05a1"+ + "\u05a4\u05a6\u05ab\u05b2\u05b8\u05bc\u05c2\u05c8\u05cb\u05cd\u05d3\u05d7"+ + "\u05dd\u05e4\u05e8\u05ea\u05ee\u05f4\u0600\u0604\u0606\u060a\u060f\u0612"+ + "\u0619\u061d\u0622\u0624\u0628\u062b\u062e\u0632\u0637\u063e\u0645\u064a"+ + "\u064e\u0652\u0657\u065b\u0661\u0663\u0669\u066e\u0674\u0678\u067a\u067d"+ + "\u0681\u0685\u0687\u0689\u068c\u0698\u069a\u069d\u06a0\u06a3\u06ac\u06b3"+ + "\u06b8\u06bb\u06be\u06c0\u06c3\u06c6\u06ca\u06cf\u06dc\u06e1\u06e5\u06e9"+ + "\u06ee\u06f3\u06f7\u06fa\u06fe\u0709\u070d\u0714\u0719\u071d\u0723\u0727"+ + "\u072b\u0734\u0741\u0746\u074d\u0751\u0754\u0757\u075a\u075e\u0763\u076a"+ + "\u076e\u0772\u0778\u077d\u0781\u0787\u078d\u0790\u0793\u07a3\u07ab\u07b4"+ + "\u07b9\u07bc\u07c0\u07c4\u07c9\u07cf\u07d4\u07d8\u07e1\u07e6\u07eb\u0818"; + public static final ATN _ATN = + new ATNDeserializer().deserialize(_serializedATN.toCharArray()); + static { + _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()]; + for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) { + _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i); + } + } +} \ No newline at end of file diff --git a/lexers/src/main/java/com/itsaky/androidide/lexers/cpp/CPP14Parser.tokens b/lexers/src/main/java/com/itsaky/androidide/lexers/cpp/CPP14Parser.tokens new file mode 100644 index 000000000..97906afe4 --- /dev/null +++ b/lexers/src/main/java/com/itsaky/androidide/lexers/cpp/CPP14Parser.tokens @@ -0,0 +1,264 @@ +IntegerLiteral=1 +CharacterLiteral=2 +FloatingLiteral=3 +StringLiteral=4 +BooleanLiteral=5 +PointerLiteral=6 +UserDefinedLiteral=7 +MultiLineMacro=8 +Directive=9 +Alignas=10 +Alignof=11 +Asm=12 +Auto=13 +Bool=14 +Break=15 +Case=16 +Catch=17 +Char=18 +Char16=19 +Char32=20 +Class=21 +Const=22 +Constexpr=23 +Const_cast=24 +Continue=25 +Decltype=26 +Default=27 +Delete=28 +Do=29 +Double=30 +Dynamic_cast=31 +Else=32 +Enum=33 +Explicit=34 +Export=35 +Extern=36 +False_=37 +Final=38 +Float=39 +For=40 +Friend=41 +Goto=42 +If=43 +Inline=44 +Int=45 +Long=46 +Mutable=47 +Namespace=48 +New=49 +Noexcept=50 +Nullptr=51 +Operator=52 +Override=53 +Private=54 +Protected=55 +Public=56 +Register=57 +Reinterpret_cast=58 +Return=59 +Short=60 +Signed=61 +Sizeof=62 +Static=63 +Static_assert=64 +Static_cast=65 +Struct=66 +Switch=67 +Template=68 +This=69 +Thread_local=70 +Throw=71 +True_=72 +Try=73 +Typedef=74 +Typeid_=75 +Typename_=76 +Union=77 +Unsigned=78 +Using=79 +Virtual=80 +Void=81 +Volatile=82 +Wchar=83 +While=84 +LeftParen=85 +RightParen=86 +LeftBracket=87 +RightBracket=88 +LeftBrace=89 +RightBrace=90 +Plus=91 +Minus=92 +Star=93 +Div=94 +Mod=95 +Caret=96 +And=97 +Or=98 +Tilde=99 +Not=100 +Assign=101 +Less=102 +Greater=103 +PlusAssign=104 +MinusAssign=105 +StarAssign=106 +DivAssign=107 +ModAssign=108 +XorAssign=109 +AndAssign=110 +OrAssign=111 +LeftShiftAssign=112 +RightShiftAssign=113 +Equal=114 +NotEqual=115 +LessEqual=116 +GreaterEqual=117 +AndAnd=118 +OrOr=119 +PlusPlus=120 +MinusMinus=121 +Comma=122 +ArrowStar=123 +Arrow=124 +Question=125 +Colon=126 +Doublecolon=127 +Semi=128 +Dot=129 +DotStar=130 +Ellipsis=131 +Identifier=132 +DecimalLiteral=133 +OctalLiteral=134 +HexadecimalLiteral=135 +BinaryLiteral=136 +Integersuffix=137 +UserDefinedIntegerLiteral=138 +UserDefinedFloatingLiteral=139 +UserDefinedStringLiteral=140 +UserDefinedCharacterLiteral=141 +Whitespace=142 +Newline=143 +BlockComment=144 +LineComment=145 +'alignas'=10 +'alignof'=11 +'asm'=12 +'auto'=13 +'bool'=14 +'break'=15 +'case'=16 +'catch'=17 +'char'=18 +'char16_t'=19 +'char32_t'=20 +'class'=21 +'const'=22 +'constexpr'=23 +'const_cast'=24 +'continue'=25 +'decltype'=26 +'default'=27 +'delete'=28 +'do'=29 +'double'=30 +'dynamic_cast'=31 +'else'=32 +'enum'=33 +'explicit'=34 +'export'=35 +'extern'=36 +'false'=37 +'final'=38 +'float'=39 +'for'=40 +'friend'=41 +'goto'=42 +'if'=43 +'inline'=44 +'int'=45 +'long'=46 +'mutable'=47 +'namespace'=48 +'new'=49 +'noexcept'=50 +'nullptr'=51 +'operator'=52 +'override'=53 +'private'=54 +'protected'=55 +'public'=56 +'register'=57 +'reinterpret_cast'=58 +'return'=59 +'short'=60 +'signed'=61 +'sizeof'=62 +'static'=63 +'static_assert'=64 +'static_cast'=65 +'struct'=66 +'switch'=67 +'template'=68 +'this'=69 +'thread_local'=70 +'throw'=71 +'true'=72 +'try'=73 +'typedef'=74 +'typeid'=75 +'typename'=76 +'union'=77 +'unsigned'=78 +'using'=79 +'virtual'=80 +'void'=81 +'volatile'=82 +'wchar_t'=83 +'while'=84 +'('=85 +')'=86 +'['=87 +']'=88 +'{'=89 +'}'=90 +'+'=91 +'-'=92 +'*'=93 +'/'=94 +'%'=95 +'^'=96 +'&'=97 +'|'=98 +'~'=99 +'='=101 +'<'=102 +'>'=103 +'+='=104 +'-='=105 +'*='=106 +'/='=107 +'%='=108 +'^='=109 +'&='=110 +'|='=111 +'<<='=112 +'>>='=113 +'=='=114 +'!='=115 +'<='=116 +'>='=117 +'++'=120 +'--'=121 +','=122 +'->*'=123 +'->'=124 +'?'=125 +':'=126 +'::'=127 +';'=128 +'.'=129 +'.*'=130 +'...'=131 From 2c40b694d8cbd43abade60447ca4806b90917b74 Mon Sep 17 00:00:00 2001 From: MrIkso Date: Sun, 29 May 2022 19:44:14 +0300 Subject: [PATCH 4/4] Add TODO spannable in Kotlin&CPP languages --- .../androidide/language/cpp/CppAnalyzer.java | 119 ++++++++++++++++- .../language/kotlin/KotlinAnalyzer.java | 121 +++++++++++++++++- 2 files changed, 235 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/itsaky/androidide/language/cpp/CppAnalyzer.java b/app/src/main/java/com/itsaky/androidide/language/cpp/CppAnalyzer.java index 358c0438e..9eac4e6ca 100644 --- a/app/src/main/java/com/itsaky/androidide/language/cpp/CppAnalyzer.java +++ b/app/src/main/java/com/itsaky/androidide/language/cpp/CppAnalyzer.java @@ -9,29 +9,59 @@ import static com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.forComm import static com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.forKeyword; import static com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.forString; import static com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.get; +import static com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.withoutCompletion; +import androidx.annotation.NonNull; + +import com.itsaky.androidide.language.IAnalyzeManager; import com.itsaky.androidide.lexers.cpp.CPP14Lexer; import com.itsaky.androidide.lexers.cpp.CPP14Parser; import com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE; import com.itsaky.androidide.utils.CharSequenceReader; import com.itsaky.androidide.utils.ILogger; +import com.itsaky.lsp.models.DiagnosticItem; +import com.itsaky.lsp.models.DiagnosticSeverity; +import com.itsaky.lsp.models.Position; +import com.itsaky.lsp.models.Range; import io.github.rosemoe.sora.lang.analysis.SimpleAnalyzeManager; import io.github.rosemoe.sora.lang.styling.CodeBlock; import io.github.rosemoe.sora.lang.styling.MappedSpans; +import io.github.rosemoe.sora.lang.styling.Span; import io.github.rosemoe.sora.lang.styling.Styles; import org.antlr.v4.runtime.CharStreams; import org.antlr.v4.runtime.CodePointCharStream; import org.antlr.v4.runtime.CommonTokenStream; import org.antlr.v4.runtime.Token; +import org.jetbrains.annotations.Contract; import java.io.IOException; +import java.util.ArrayList; +import java.util.List; import java.util.Stack; -public class CppAnalyzer extends SimpleAnalyzeManager { +public class CppAnalyzer extends SimpleAnalyzeManager implements IAnalyzeManager { private static final ILogger LOG = ILogger.newInstance("CppAnalyzer"); + private final List ideDiagnostics = new ArrayList<>(); + private List diagnostics = new ArrayList<>(); + + @Override + public void updateDiagnostics(@NonNull List diagnostics) { + this.diagnostics = diagnostics; + } + + @NonNull + @Override + public List getDiagnostics() { + final var result = new ArrayList<>(ideDiagnostics); + if (diagnostics != null && !diagnostics.isEmpty()) { + result.addAll(diagnostics); + } + result.sort(DiagnosticItem.START_COMPARATOR); + return result; + } @Override protected Styles analyze(StringBuilder text, Delegate delegate) { @@ -52,6 +82,8 @@ public class CppAnalyzer extends SimpleAnalyzeManager { int line, column, lastLine = 1, currSwitch = 0, maxSwitch = 0, type, previous = 0; boolean isFirst = true; + ideDiagnostics.clear(); + while (!delegate.isCancelled()) { token = lexer.nextToken(); if (token == null) { @@ -67,6 +99,8 @@ public class CppAnalyzer extends SimpleAnalyzeManager { break; } + final var tokenLength = token.getText().length(); + switch (type) { case Whitespace: if (isFirst) { @@ -216,8 +250,44 @@ public class CppAnalyzer extends SimpleAnalyzeManager { colors.addIfNeeded(line, column, get(LITERAL)); break; case BlockComment: + colors.addIfNeeded(line, column, forComment()); + break; case LineComment: - colors.addIfNeeded(line, column, get(SchemeAndroidIDE.COMMENT)); + var commentType = SchemeAndroidIDE.COMMENT; + + // highlight special line comments + var commentText = token.getText(); + if (commentText.length() > 2) { + commentText = commentText.substring(2); + commentText = commentText.trim(); + + var mark = true; + if ("todo".equalsIgnoreCase(commentText.substring(0, 4))) { + commentType = SchemeAndroidIDE.TODO_COMMENT; + } else if ("fixme".equalsIgnoreCase(commentText.substring(0, 5))) { + commentType = SchemeAndroidIDE.FIXME_COMMENT; + } else { + mark = false; + } + + if (mark) { + if (diagnostics == null) { + diagnostics = new ArrayList<>(); + } + final var diagnostic = new DiagnosticItem(); + diagnostic.setSeverity(DiagnosticSeverity.WARNING); + diagnostic.setMessage(commentText); + diagnostic.setCode("special.comment"); + diagnostic.setRange( + new Range( + new Position(line, column), + new Position(line, column + tokenLength))); + diagnostic.setSource(commentText); + ideDiagnostics.add(diagnostic); + } + } + + colors.addIfNeeded(line, column, withoutCompletion(commentType)); break; case MultiLineMacro: case Directive: @@ -241,8 +311,53 @@ public class CppAnalyzer extends SimpleAnalyzeManager { colors.determine(lastLine); styles.setSuppressSwitch(maxSwitch + 10); + if (diagnostics != null && !diagnostics.isEmpty()) { + markDiagnostics(colors, diagnostics); + } + + if (!ideDiagnostics.isEmpty()) { + markDiagnostics(colors, ideDiagnostics); + } + styles.spans = colors.build(); return styles; } + + private void markDiagnostics(MappedSpans.Builder colors, List diagnostics) { + diagnostics.sort(DiagnosticItem.START_COMPARATOR); + for (var d : diagnostics) { + if (d == null) { + continue; + } + + var start = d.getRange().getStart(); + var end = d.getRange().getEnd(); + + try { + colors.markProblemRegion( + convertToSpanFlag(d.getSeverity()), + start.getLine(), + start.getColumn(), + end.getLine(), + end.getColumn()); + } catch (Throwable e) { + // Might happen frequently if user types faster + } + } + } + + @Contract(pure = true) + private int convertToSpanFlag(@NonNull DiagnosticSeverity severity) { + switch (severity) { + case WARNING: + return Span.FLAG_WARNING; + case ERROR: + return Span.FLAG_ERROR; + case HINT: + case INFO: + default: + return Span.FLAG_TYPO; + } + } } diff --git a/app/src/main/java/com/itsaky/androidide/language/kotlin/KotlinAnalyzer.java b/app/src/main/java/com/itsaky/androidide/language/kotlin/KotlinAnalyzer.java index 9e0ccb613..5a01d2c0b 100644 --- a/app/src/main/java/com/itsaky/androidide/language/kotlin/KotlinAnalyzer.java +++ b/app/src/main/java/com/itsaky/androidide/language/kotlin/KotlinAnalyzer.java @@ -4,32 +4,63 @@ import static com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.ANNOTAT import static com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.LITERAL; import static com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.OPERATOR; import static com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.TEXT_NORMAL; +import static com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.forComment; import static com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.forKeyword; import static com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.forString; import static com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.get; +import static com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE.withoutCompletion; +import androidx.annotation.NonNull; + +import com.itsaky.androidide.language.IAnalyzeManager; import com.itsaky.androidide.lexers.kotlin.KotlinLexer; import com.itsaky.androidide.lexers.kotlin.KotlinParser; import com.itsaky.androidide.syntax.colorschemes.SchemeAndroidIDE; import com.itsaky.androidide.utils.CharSequenceReader; import com.itsaky.androidide.utils.ILogger; +import com.itsaky.lsp.models.DiagnosticItem; +import com.itsaky.lsp.models.DiagnosticSeverity; +import com.itsaky.lsp.models.Position; +import com.itsaky.lsp.models.Range; import io.github.rosemoe.sora.lang.analysis.SimpleAnalyzeManager; import io.github.rosemoe.sora.lang.styling.CodeBlock; import io.github.rosemoe.sora.lang.styling.MappedSpans; +import io.github.rosemoe.sora.lang.styling.Span; import io.github.rosemoe.sora.lang.styling.Styles; import org.antlr.v4.runtime.CharStreams; import org.antlr.v4.runtime.CodePointCharStream; import org.antlr.v4.runtime.CommonTokenStream; import org.antlr.v4.runtime.Token; +import org.jetbrains.annotations.Contract; import java.io.IOException; +import java.util.ArrayList; +import java.util.List; import java.util.Stack; -public class KotlinAnalyzer extends SimpleAnalyzeManager { +public class KotlinAnalyzer extends SimpleAnalyzeManager implements IAnalyzeManager { private static final ILogger LOG = ILogger.newInstance("KotlinAnalyzer"); + private final List ideDiagnostics = new ArrayList<>(); + private List diagnostics = new ArrayList<>(); + + @Override + public void updateDiagnostics(@NonNull List diagnostics) { + this.diagnostics = diagnostics; + } + + @NonNull + @Override + public List getDiagnostics() { + final var result = new ArrayList<>(ideDiagnostics); + if (diagnostics != null && !diagnostics.isEmpty()) { + result.addAll(diagnostics); + } + result.sort(DiagnosticItem.START_COMPARATOR); + return result; + } @Override protected Styles analyze(StringBuilder text, Delegate delegate) { @@ -50,6 +81,8 @@ public class KotlinAnalyzer extends SimpleAnalyzeManager { int line, column, lastLine = 1, currSwitch = 0, maxSwitch = 0, type, previous = 0; boolean isFirst = true; + ideDiagnostics.clear(); + while (!delegate.isCancelled()) { token = lexer.nextToken(); if (token == null) { @@ -65,6 +98,7 @@ public class KotlinAnalyzer extends SimpleAnalyzeManager { break; } + final var tokenLength = token.getText().length(); switch (type) { case KotlinLexer.WS: if (isFirst) { @@ -241,11 +275,47 @@ public class KotlinAnalyzer extends SimpleAnalyzeManager { colors.addIfNeeded(line, column, forKeyword()); break; // comments - case KotlinLexer.ShebangLine: case KotlinLexer.LineComment: + var commentType = SchemeAndroidIDE.COMMENT; + + // highlight special line comments + var commentText = token.getText(); + if (commentText.length() > 2) { + commentText = commentText.substring(2); + commentText = commentText.trim(); + + var mark = true; + if ("todo".equalsIgnoreCase(commentText.substring(0, 4))) { + commentType = SchemeAndroidIDE.TODO_COMMENT; + } else if ("fixme".equalsIgnoreCase(commentText.substring(0, 5))) { + commentType = SchemeAndroidIDE.FIXME_COMMENT; + } else { + mark = false; + } + + if (mark) { + if (diagnostics == null) { + diagnostics = new ArrayList<>(); + } + final var diagnostic = new DiagnosticItem(); + diagnostic.setSeverity(DiagnosticSeverity.WARNING); + diagnostic.setMessage(commentText); + diagnostic.setCode("special.comment"); + diagnostic.setRange( + new Range( + new Position(line, column), + new Position(line, column + tokenLength))); + diagnostic.setSource(commentText); + ideDiagnostics.add(diagnostic); + } + } + + colors.addIfNeeded(line, column, withoutCompletion(commentType)); + break; + case KotlinLexer.ShebangLine: case KotlinLexer.DelimitedComment: case KotlinLexer.Inside_Comment: - colors.addIfNeeded(line, column, SchemeAndroidIDE.COMMENT); + colors.addIfNeeded(line, column, forComment()); break; default: @@ -265,8 +335,53 @@ public class KotlinAnalyzer extends SimpleAnalyzeManager { colors.determine(lastLine); styles.setSuppressSwitch(maxSwitch + 10); + if (diagnostics != null && !diagnostics.isEmpty()) { + markDiagnostics(colors, diagnostics); + } + + if (!ideDiagnostics.isEmpty()) { + markDiagnostics(colors, ideDiagnostics); + } + styles.spans = colors.build(); return styles; } + + private void markDiagnostics(MappedSpans.Builder colors, List diagnostics) { + diagnostics.sort(DiagnosticItem.START_COMPARATOR); + for (var d : diagnostics) { + if (d == null) { + continue; + } + + var start = d.getRange().getStart(); + var end = d.getRange().getEnd(); + + try { + colors.markProblemRegion( + convertToSpanFlag(d.getSeverity()), + start.getLine(), + start.getColumn(), + end.getLine(), + end.getColumn()); + } catch (Throwable e) { + // Might happen frequently if user types faster + } + } + } + + @Contract(pure = true) + private int convertToSpanFlag(@NonNull DiagnosticSeverity severity) { + switch (severity) { + case WARNING: + return Span.FLAG_WARNING; + case ERROR: + return Span.FLAG_ERROR; + case HINT: + case INFO: + default: + return Span.FLAG_TYPO; + } + } }