Best JavaScript code snippet using sinon
gfwlist.pac
Source:gfwlist.pac  
1		var strProxy = "SOCKS5 127.0.0.1:7070;SOCKS 127.0.0.1:7070";2		function regExpMatch(url, patter) 3		{ 4			try { 5				return new RegExp(pattern).test(url); 6			} catch (ex) { 7				return false; 8			} 9		} 10		function FindProxyForURL(url, host) 11		{12		if (shExpMatch(url, "http*://*.lsxszzg.com*")) return strProxy;13	if (shExpMatch(url, "http*://*.85.17.73.31*")) return strProxy;14	if (shExpMatch(url, "http*://*.alien-ufos.com*")) return strProxy;15	if (shExpMatch(url, "http*://*.altrec.com*")) return strProxy;16	if (shExpMatch(url, "http*://*.azubu.tv*")) return strProxy;17	if (shExpMatch(url, "http*://*.beeg.com*")) return strProxy;18	if (shExpMatch(url, "http*://*.darpa.mil*")) return strProxy;19	if (shExpMatch(url, "http*://*.img.dlsite.jp*")) return strProxy;20	if (shExpMatch(url, "http*://*.fastpic.ru*")) return strProxy;21	if (shExpMatch(url, "http*://*.fxnetworks.com*")) return strProxy;22	if (shExpMatch(url, "http*://*.getuploader.com*")) return strProxy;23	if (shExpMatch(url, "http*://*.hulu.com*")) return strProxy;24	if (shExpMatch(url, "http*://*.huluim.com*")) return strProxy;25	if (shExpMatch(url, "http*://*.ilovelongtoes.com*")) return strProxy;26	if (shExpMatch(url, "http*://*.m-sport.co.uk*")) return strProxy;27	if (shExpMatch(url, "http*://*.metarthunter.com*")) return strProxy;28	if (shExpMatch(url, "http*://*.muzu.tv*")) return strProxy;29	if (shExpMatch(url, "http*://*.nbc.com*")) return strProxy;30	if (shExpMatch(url, "http*://*.netflix.com*")) return strProxy;31	if (shExpMatch(url, "http*://*.nuuvem.com*")) return strProxy;32	if (shExpMatch(url, "http*://*.pandora.com*")) return strProxy;33	if (shExpMatch(url, "http*://*.pandora.tv*")) return strProxy;34	if (shExpMatch(url, "http*://*.parkansky.com*")) return strProxy;35	if (shExpMatch(url, "http*://*.pure18.com*")) return strProxy;36	if (shExpMatch(url, "http*://*.radiko.jp*")) return strProxy;37	if (shExpMatch(url, "http*://*.rdio.com*")) return strProxy;38	if (shExpMatch(url, "http*://*.slacker.com*")) return strProxy;39	if (shExpMatch(url, "http*://*.spotify.com*")) return strProxy;40	if (shExpMatch(url, "http*://*.springboardplatform.com*")) return strProxy;41	if (shExpMatch(url, "http*://*.target.com*")) return strProxy;42	if (shExpMatch(url, "http*://*.turntable.fm*")) return strProxy;43	if (shExpMatch(url, "http*://*.vevo.com*")) return strProxy;44	if (shExpMatch(url, "http*://*.ecsm.vs.com*")) return strProxy;45	if (shExpMatch(url, "http*://*.zattoo.com*")) return strProxy;46	if (shExpMatch(url, "http*://*.qq.co.za*")) return strProxy;47	if (shExpMatch(url, "http*://*.zozotown.com*")) return strProxy;48	if (shExpMatch(url, "http*://*.0rz.tw*")) return strProxy;49	if (shExpMatch(url, "http*://*.0rz.tw*")) return strProxy;50	if (shExpMatch(url, "http*://*.0to255.com*")) return strProxy;51	if (shExpMatch(url, "http*://*.1-apple.com.tw*")) return strProxy;52	if (shExpMatch(url, "http*://*.1-apple.com.tw*")) return strProxy;53	if (shExpMatch(url, "http*://*.10conditionsoflove.com*")) return strProxy;54	if (shExpMatch(url, "http*://*.10musume.com*")) return strProxy;55	if (shExpMatch(url, "http*://*.123rf.com*")) return strProxy;56	if (shExpMatch(url, "http*://*.12bet.com*")) return strProxy;57	if (shExpMatch(url, "http*://*.12bet.com*")) return strProxy;58	if (shExpMatch(url, "http*://*.12vpn.com*")) return strProxy;59	if (shExpMatch(url, "http*://*.12vpn.com*")) return strProxy;60	if (shExpMatch(url, "http*://*.141hongkong.com*")) return strProxy;61	if (shExpMatch(url, "http*://*.17t17p.com*")) return strProxy;62	if (shExpMatch(url, "http*://*.173ng.com*")) return strProxy;63	if (shExpMatch(url, "http*://*.173ng.com*")) return strProxy;64	if (shExpMatch(url, "http*://*.1984bbs.com*")) return strProxy;65	if (shExpMatch(url, "http*://*.1984bbs.com*")) return strProxy;66	if (shExpMatch(url, "http*://*.1984bbs.org*")) return strProxy;67	if (shExpMatch(url, "http*://*.1984bbs.org*")) return strProxy;68	if (shExpMatch(url, "http*://*.1bao.org*")) return strProxy;69	if (shExpMatch(url, "http*://*.1bao.org*")) return strProxy;70	if (shExpMatch(url, "http*://*.1pondo.tv*")) return strProxy;71	if (shExpMatch(url, "http*://*.1eew.com*")) return strProxy;72	if (shExpMatch(url, "http*://*.2-hand.info*")) return strProxy;73	if (shExpMatch(url, "http*://*.2000fun.com*")) return strProxy;74	if (shExpMatch(url, "http*://*.2008xianzhang.info*")) return strProxy;75	if (shExpMatch(url, "http*://*.2008xianzhang.info*")) return strProxy;76	if (shExpMatch(url, "http*://*.213.so*")) return strProxy;77	if (shExpMatch(url, "http*://*.21andy.com*")) return strProxy;78	if (shExpMatch(url, "http*://*.24smile.org*")) return strProxy;79	if (shExpMatch(url, "http*://*.2shared.com*")) return strProxy;80	if (shExpMatch(url, "http*://*.315lz.com*")) return strProxy;81	if (shExpMatch(url, "http*://*.32red.com*")) return strProxy;82	if (shExpMatch(url, "http*://*.36rain.com*")) return strProxy;83	if (shExpMatch(url, "http*://*.3a5a.com*")) return strProxy;84	if (shExpMatch(url, "http*://*.3boys2girls.com*")) return strProxy;85	if (shExpMatch(url, "http*://*.4bluestones.biz*")) return strProxy;86	if (shExpMatch(url, "http*://*.4chan.org*")) return strProxy;87	if (shExpMatch(url, "http*://*.4shared.com*")) return strProxy;88	if (shExpMatch(url, "http*://*.5i01.com*")) return strProxy;89	if (shExpMatch(url, "http*://*.taiwannation.50webs.com*")) return strProxy;90	if (shExpMatch(url, "http*://*.51.ca*")) return strProxy;91	if (shExpMatch(url, "http*://*.5isotoi5.org*")) return strProxy;92	if (shExpMatch(url, "http*://*.5maodang.com*")) return strProxy;93	if (shExpMatch(url, "http*://*.64tianwang.com*")) return strProxy;94	if (shExpMatch(url, "http*://*.64wiki.com*")) return strProxy;95	if (shExpMatch(url, "http*://*.666kb.com*")) return strProxy;96	if (shExpMatch(url, "http*://*.6park.com*")) return strProxy;97	if (shExpMatch(url, "http*://*.6park.com*")) return strProxy;98	if (shExpMatch(url, "http*://*.7capture.com*")) return strProxy;99	if (shExpMatch(url, "http*://*.85st.com*")) return strProxy;100	if (shExpMatch(url, "http*://*.881903.com*")) return strProxy;101	if (shExpMatch(url, "http*://*.888.com*")) return strProxy;102	if (shExpMatch(url, "http*://*.881903.com*")) return strProxy;103	if (shExpMatch(url, "http*://*.89-64.org*")) return strProxy;104	if (shExpMatch(url, "http*://*.89-64.org*")) return strProxy;105	if (shExpMatch(url, "http*://*.9001700.com*")) return strProxy;106	if (shExpMatch(url, "http*://*.908taiwan.org*")) return strProxy;107	if (shExpMatch(url, "http*://*.91porn.com*")) return strProxy;108	if (shExpMatch(url, "http*://*.92ccav.com*")) return strProxy;109	if (shExpMatch(url, "http*://*.9bis.com*")) return strProxy;110	if (shExpMatch(url, "http*://*.9bis.net*")) return strProxy;111	if (shExpMatch(url, "http*://*.a-normal-day.com*")) return strProxy;112	if (shExpMatch(url, "http*://*.a5.com.ru*")) return strProxy;113	if (shExpMatch(url, "http*://*.aamacau.com*")) return strProxy;114	if (shExpMatch(url, "http*://*.ablwang.com*")) return strProxy;115	if (shExpMatch(url, "http*://*.aboluowang.com*")) return strProxy;116	if (shExpMatch(url, "http*://*.aboluowang.com*")) return strProxy;117	if (shExpMatch(url, "http*://*.aboutgfw.com*")) return strProxy;118	if (shExpMatch(url, "http*://*.acgkj.com*")) return strProxy;119	if (shExpMatch(url, "http*://*.actimes.com.au*")) return strProxy;120	if (shExpMatch(url, "http*://*.aculo.us*")) return strProxy;121	if (shExpMatch(url, "http*://*.addictedtocoffee.de*")) return strProxy;122	if (shExpMatch(url, "http*://*.adultfriendfinder.com*")) return strProxy;123	if (shExpMatch(url, "http*://*.adultkeep.net*")) return strProxy;124	if (shExpMatch(url, "http*://*.advanscene.com*")) return strProxy;125	if (shExpMatch(url, "http*://*.advertfan.com*")) return strProxy;126	if (shExpMatch(url, "http*://*.aenhancers.com*")) return strProxy;127	if (shExpMatch(url, "http*://*.af.mil*")) return strProxy;128	if (shExpMatch(url, "http*://*.aiph.net*")) return strProxy;129	if (shExpMatch(url, "http*://*.aiph.net*")) return strProxy;130	if (shExpMatch(url, "http*://*.aisex.com*")) return strProxy;131	if (shExpMatch(url, "http*://*.ait.org.tw*")) return strProxy;132	if (shExpMatch(url, "http*://*.aiweiwei.com*")) return strProxy;133	if (shExpMatch(url, "http*://*.aiweiweiblog.com*")) return strProxy;134	if (shExpMatch(url, "http*://*.aiweiweiblog.com*")) return strProxy;135	if (shExpMatch(url, "http*://*.ajsands.com*")) return strProxy;136	if (shExpMatch(url, "http*://*.akiba-online.com*")) return strProxy;137	if (shExpMatch(url, "http*://*.al-qimmah.net*")) return strProxy;138	if (shExpMatch(url, "http*://*.alabout.com*")) return strProxy;139	if (shExpMatch(url, "http*://*.alasbarricadas.org*")) return strProxy;140	if (shExpMatch(url, "http*://*.alexlur.org*")) return strProxy;141	if (shExpMatch(url, "http*://*.aliengu.com*")) return strProxy;142	if (shExpMatch(url, "http*://*.alkasir.com*")) return strProxy;143	if (shExpMatch(url, "http*://*.allgirlsallowed.org*")) return strProxy;144	if (shExpMatch(url, "http*://*.alliance.org.hk*")) return strProxy;145	if (shExpMatch(url, "http*://*.allinfa.com*")) return strProxy;146	if (shExpMatch(url, "http*://*.allinfa.com*")) return strProxy;147	if (shExpMatch(url, "http*://*.allmovie.com*")) return strProxy;148	if (shExpMatch(url, "http*://*.alternate-tools.com*")) return strProxy;149	if (shExpMatch(url, "http*://*.alvinalexander.com*")) return strProxy;150	if (shExpMatch(url, "http*://*.alwaysdata.com*")) return strProxy;151	if (shExpMatch(url, "http*://*.alwaysdata.com*")) return strProxy;152	if (shExpMatch(url, "http*://*.alwaysdata.net*")) return strProxy;153	if (shExpMatch(url, "http*://*.am730.com.hk*")) return strProxy;154	if (shExpMatch(url, "http*://*.amazon.com*")) return strProxy;155	if (shExpMatch(url, "http*://*.ameblo.jp*")) return strProxy;156	if (shExpMatch(url, "http*://*.ameblo.jp*")) return strProxy;157	if (shExpMatch(url, "http*://*.americangreencard.com*")) return strProxy;158	if (shExpMatch(url, "http*://*.amiblockedornot.com*")) return strProxy;159	if (shExpMatch(url, "http*://*.amnesty.org*")) return strProxy;160	if (shExpMatch(url, "http*://*.amnesty.org*")) return strProxy;161	if (shExpMatch(url, "http*://*.amnestyusa.org*")) return strProxy;162	if (shExpMatch(url, "http*://*.amnestyusa.org*")) return strProxy;163	if (shExpMatch(url, "http*://*.amoiist.com*")) return strProxy;164	if (shExpMatch(url, "http*://*.analyze-v.com*")) return strProxy;165	if (shExpMatch(url, "http*://*.anchorfree.com*")) return strProxy;166	if (shExpMatch(url, "http*://*.ancsconf.org*")) return strProxy;167	if (shExpMatch(url, "http*://*.andfaraway.net*")) return strProxy;168	if (shExpMatch(url, "http*://*.android.com*")) return strProxy;169	if (shExpMatch(url, "http*://*.android-x86.org*")) return strProxy;170	if (shExpMatch(url, "http*://*.angularjs.org*")) return strProxy;171	if (shExpMatch(url, "http*://*.animecrazy.net*")) return strProxy;172	if (shExpMatch(url, "http*://*.anobii.com*")) return strProxy;173	if (shExpMatch(url, "http*://*.anonymizer.com*")) return strProxy;174	if (shExpMatch(url, "http*://*.anontext.com*")) return strProxy;175	if (shExpMatch(url, "http*://*.answering-islam.org*")) return strProxy;176	if (shExpMatch(url, "http*://*.antd.org*")) return strProxy;177	if (shExpMatch(url, "http*://*.anthonycalzadilla.com*")) return strProxy;178	if (shExpMatch(url, "http*://*.antiwave.net*")) return strProxy;179	if (shExpMatch(url, "http*://*.antiwave.net*")) return strProxy;180	if (shExpMatch(url, "http*://*.aobo.com.au*")) return strProxy;181	if (shExpMatch(url, "http*://*.aolchannels.aol.com*")) return strProxy;182	if (shExpMatch(url, "http*://*.video.aol.ca*")) return strProxy;183	if (shExpMatch(url, "http*://*.video.aol.co.uk*")) return strProxy;184	if (shExpMatch(url, "http*://*.video.aol.com*")) return strProxy;185	if (shExpMatch(url, "http*://*.video.aol.com*")) return strProxy;186	if (shExpMatch(url, "http*://*.aolnews.com*")) return strProxy;187	if (shExpMatch(url, "http*://*.aomiwang.com*")) return strProxy;188	if (shExpMatch(url, "http*://*.video.ap.org*")) return strProxy;189	if (shExpMatch(url, "http*://*.apetube.com*")) return strProxy;190	if (shExpMatch(url, "http*://*.apiary.io*")) return strProxy;191	if (shExpMatch(url, "http*://*.apigee.com*")) return strProxy;192	if (shExpMatch(url, "http*://*.apigee.com*")) return strProxy;193	if (shExpMatch(url, "http*://*.appledaily.com*")) return strProxy;194	if (shExpMatch(url, "http*://*.archive.is*")) return strProxy;195	if (shExpMatch(url, "http*://*.archive.org*")) return strProxy;196	if (shExpMatch(url, "http*://*.arctosia.com*")) return strProxy;197	if (shExpMatch(url, "http*://*.arctosia.com*")) return strProxy;198	if (shExpMatch(url, "http*://*.areca-backup.org*")) return strProxy;199	if (shExpMatch(url, "http*://*.army.mil*")) return strProxy;200	if (shExpMatch(url, "http*://*.artsy.net*")) return strProxy;201	if (shExpMatch(url, "http*://*.asahichinese.com*")) return strProxy;202	if (shExpMatch(url, "http*://*.asahichinese.com*")) return strProxy;203	if (shExpMatch(url, "http*://*.asdfg.jp*")) return strProxy;204	if (shExpMatch(url, "http*://*.japanfirst.asianfreeforum.com*")) return strProxy;205	if (shExpMatch(url, "http*://*.asiaharvest.org*")) return strProxy;206	if (shExpMatch(url, "http*://*.asiaharvest.org*")) return strProxy;207	if (shExpMatch(url, "http*://*.asianews.it*")) return strProxy;208	if (shExpMatch(url, "http*://*.asianwomensfilm.de*")) return strProxy;209	if (shExpMatch(url, "http*://*.askstudent.com*")) return strProxy;210	if (shExpMatch(url, "http*://*.askynz.net*")) return strProxy;211	if (shExpMatch(url, "http*://*.askynz.net*")) return strProxy;212	if (shExpMatch(url, "http*://*.assembla.com*")) return strProxy;213	if (shExpMatch(url, "http*://*.astonmartinnews.com*")) return strProxy;214	if (shExpMatch(url, "http*://*.astrill.com*")) return strProxy;215	if (shExpMatch(url, "http*://*.atc.org.au*")) return strProxy;216	if (shExpMatch(url, "http*://*.atchinese.com*")) return strProxy;217	if (shExpMatch(url, "http*://*.atchinese.com*")) return strProxy;218	if (shExpMatch(url, "http*://*.atgfw.org*")) return strProxy;219	if (shExpMatch(url, "http*://*.atj.org.tw*")) return strProxy;220	if (shExpMatch(url, "http*://*.atlaspost.com*")) return strProxy;221	if (shExpMatch(url, "http*://*.atlaspost.com*")) return strProxy;222	if (shExpMatch(url, "http*://*.atdmt.com*")) return strProxy;223	if (shExpMatch(url, "http*://*.atnext.com*")) return strProxy;224	if (shExpMatch(url, "http*://*.atnext.com*")) return strProxy;225	if (shExpMatch(url, "http*://*.avaaz.org*")) return strProxy;226	if (shExpMatch(url, "http*://*.avaaz.org*")) return strProxy;227	if (shExpMatch(url, "http*://*.avast.com*")) return strProxy;228	if (shExpMatch(url, "http*://*.avdb.in*")) return strProxy;229	if (shExpMatch(url, "http*://*.avdb.in*")) return strProxy;230	if (shExpMatch(url, "http*://*.avdb.tv*")) return strProxy;231	if (shExpMatch(url, "http*://*.avdb.tv*")) return strProxy;232	if (shExpMatch(url, "http*://*.avidemux.org*")) return strProxy;233	if (shExpMatch(url, "http*://*.avoision.com*")) return strProxy;234	if (shExpMatch(url, "http*://*.axureformac.com*")) return strProxy;235	if (shExpMatch(url, "http*://*.forum.baby-kingdom.com*")) return strProxy;236	if (shExpMatch(url, "http*://*.babynet.com.hk*")) return strProxy;237	if (shExpMatch(url, "http*://*.backchina.com*")) return strProxy;238	if (shExpMatch(url, "http*://*.backchina.com*")) return strProxy;239	if (shExpMatch(url, "http*://*.backpackers.com.tw*")) return strProxy;240	if (shExpMatch(url, "http*://*.backtotiananmen.com*")) return strProxy;241	if (shExpMatch(url, "http*://*.badoo.com*")) return strProxy;242	if (shExpMatch(url, "http*://*.baidu.jp*")) return strProxy;243	if (shExpMatch(url, "http*://*.baixing.me*")) return strProxy;244	if (shExpMatch(url, "http*://*.hen.bao.li*")) return strProxy;245	if (shExpMatch(url, "http*://*.bannedbook.org*")) return strProxy;246	if (shExpMatch(url, "http*://*.bannedbook.org*")) return strProxy;247	if (shExpMatch(url, "http*://*.barenakedislam.com*")) return strProxy;248	if (shExpMatch(url, "http*://*.barnabu.co.uk*")) return strProxy;249	if (shExpMatch(url, "http*://*.bayvoice.net*")) return strProxy;250	if (shExpMatch(url, "http*://*.bayvoice.net*")) return strProxy;251	if (shExpMatch(url, "http*://*.dajusha.baywords.com*")) return strProxy;252	if (shExpMatch(url, "http*://*.bbc.co.uk*")) return strProxy;253	if (shExpMatch(url, "http*://*.bbc.co.uk*")) return strProxy;254	if (shExpMatch(url, "http*://*.bbc.co*")) return strProxy;255	if (shExpMatch(url, "http*://*.news.bbc.co.uk*")) return strProxy;256	if (shExpMatch(url, "http*://*.newsforums.bbc.co.uk*")) return strProxy;257	if (shExpMatch(url, "http*://*.bbcchinese.com*")) return strProxy;258	if (shExpMatch(url, "http*://*.bbcchinese.com*")) return strProxy;259	if (shExpMatch(url, "http*://*.bbc.in*")) return strProxy;260	if (shExpMatch(url, "http*://*.bbg.gov*")) return strProxy;261	if (shExpMatch(url, "http*://*.bbsfeed.com*")) return strProxy;262	if (shExpMatch(url, "http*://*.bbsland.com*")) return strProxy;263	if (shExpMatch(url, "http*://*.bcc.com.tw*")) return strProxy;264	if (shExpMatch(url, "http*://*.bcchinese.net*")) return strProxy;265	if (shExpMatch(url, "http*://*.bebo.com*")) return strProxy;266	if (shExpMatch(url, "http*://*.bebo.com*")) return strProxy;267	if (shExpMatch(url, "http*://*.beijing1989.com*")) return strProxy;268	if (shExpMatch(url, "http*://*.beijingspring.com*")) return strProxy;269	if (shExpMatch(url, "http*://*.beijingspring.com*")) return strProxy;270	if (shExpMatch(url, "http*://*.berlintwitterwall.com*")) return strProxy;271	if (shExpMatch(url, "http*://*.berlintwitterwall.com*")) return strProxy;272	if (shExpMatch(url, "http*://*.bestforchina.org*")) return strProxy;273	if (shExpMatch(url, "http*://*.bestforchina.org*")) return strProxy;274	if (shExpMatch(url, "http*://*.bestvpnservice.com*")) return strProxy;275	if (shExpMatch(url, "http*://*.bet365.com*")) return strProxy;276	if (shExpMatch(url, "http*://*.betfair.com*")) return strProxy;277	if (shExpMatch(url, "http*://*.bettween.com*")) return strProxy;278	if (shExpMatch(url, "http*://*.bettween.com*")) return strProxy;279	if (shExpMatch(url, "http*://*.betvictor.com*")) return strProxy;280	if (shExpMatch(url, "http*://*.bewww.net*")) return strProxy;281	if (shExpMatch(url, "http*://*.beyondfirewall.com*")) return strProxy;282	if (shExpMatch(url, "http*://*.bfnn.org*")) return strProxy;283	if (shExpMatch(url, "http*://*.bfsh.hk*")) return strProxy;284	if (shExpMatch(url, "http*://*.biantailajiao.com*")) return strProxy;285	if (shExpMatch(url, "http*://*.biantailajiao.in*")) return strProxy;286	if (shExpMatch(url, "http*://*.bic2011.org*")) return strProxy;287	if (shExpMatch(url, "http*://*.bigfools.com*")) return strProxy;288	if (shExpMatch(url, "http*://*.bignews.org*")) return strProxy;289	if (shExpMatch(url, "http*://*.bignews.org*")) return strProxy;290	if (shExpMatch(url, "http*://*.bigsound.org*")) return strProxy;291	if (shExpMatch(url, "http*://*.bill2-software.com*")) return strProxy;292	if (shExpMatch(url, "http*://*.billypan.com*")) return strProxy;293	if (shExpMatch(url, "http*://*.billywr.com*")) return strProxy;294	if (shExpMatch(url, "http*://*.bipic.net*")) return strProxy;295	if (shExpMatch(url, "http*://*.bit.ly*")) return strProxy;296	if (shExpMatch(url, "http*://*.bit.ly*")) return strProxy;297	if (shExpMatch(url, "http*://*.bitcointalk.org*")) return strProxy;298	if (shExpMatch(url, "http*://*.bitshare.com*")) return strProxy;299	if (shExpMatch(url, "http*://*.bitshare.com*")) return strProxy;300	if (shExpMatch(url, "http*://*.bjzc.org*")) return strProxy;301	if (shExpMatch(url, "http*://*.bjzc.org*")) return strProxy;302	if (shExpMatch(url, "http*://*.tor.blingblingsquad.net*")) return strProxy;303	if (shExpMatch(url, "http*://*.blinkx.com*")) return strProxy;304	if (shExpMatch(url, "http*://*.blinkx.com*")) return strProxy;305	if (shExpMatch(url, "http*://*.blinw.com*")) return strProxy;306	if (shExpMatch(url, "http*://*.blip.tv*")) return strProxy;307	if (shExpMatch(url, "http*://*.blip.tv*")) return strProxy;308	if (shExpMatch(url, "http*://*.blockcn.com*")) return strProxy;309	if (shExpMatch(url, "http*://*.blockcn.com*")) return strProxy;310	if (shExpMatch(url, "http*://*.blog.de*")) return strProxy;311	if (shExpMatch(url, "http*://*.blogblog.com*")) return strProxy;312	if (shExpMatch(url, "http*://*.blogcatalog.com*")) return strProxy;313	if (shExpMatch(url, "http*://*.blogcatalog.com*")) return strProxy;314	if (shExpMatch(url, "http*://*.blogger.com*")) return strProxy;315	if (shExpMatch(url, "http*://*.blogger.com*")) return strProxy;316	if (shExpMatch(url, "http*://*.blogimg.jp*")) return strProxy;317	if (shExpMatch(url, "http*://*.blog.kangye.org*")) return strProxy;318	if (shExpMatch(url, "http*://*.bloglines.com*")) return strProxy;319	if (shExpMatch(url, "http*://*.bloglines.com*")) return strProxy;320	if (shExpMatch(url, "http*://*.bloglovin.com*")) return strProxy;321	if (shExpMatch(url, "http*://*.rconversation.blogs.com*")) return strProxy;322	if (shExpMatch(url, "http*://*.blogtd.net*")) return strProxy;323	if (shExpMatch(url, "http*://*.blogtd.org*")) return strProxy;324	if (shExpMatch(url, "http*://*.blogtd.org*")) return strProxy;325	if (shExpMatch(url, "http*://*.bloodshed.net*")) return strProxy;326	if (shExpMatch(url, "http*://*.bloomberg.cn*")) return strProxy;327	if (shExpMatch(url, "http*://*.bloomberg.cn*")) return strProxy;328	if (shExpMatch(url, "http*://*.bloomberg.com*")) return strProxy;329	if (shExpMatch(url, "http*://*.bloomberg.com*")) return strProxy;330	if (shExpMatch(url, "http*://*.bloomberg.de*")) return strProxy;331	if (shExpMatch(url, "http*://*.bloomberg.de*")) return strProxy;332	if (shExpMatch(url, "http*://*.bloomfortune.com*")) return strProxy;333	if (shExpMatch(url, "http*://*.bnrmetal.com*")) return strProxy;334	if (shExpMatch(url, "http*://*.boardreader.com*")) return strProxy;335	if (shExpMatch(url, "http*://*.boardreader.com*")) return strProxy;336	if (shExpMatch(url, "http*://*.bonbonme.com*")) return strProxy;337	if (shExpMatch(url, "http*://*.boobstagram.com*")) return strProxy;338	if (shExpMatch(url, "http*://*.book.com.tw*")) return strProxy;339	if (shExpMatch(url, "http*://*.books.com.tw*")) return strProxy;340	if (shExpMatch(url, "http*://*.botanwang.com*")) return strProxy;341	if (shExpMatch(url, "http*://*.bot.nu*")) return strProxy;342	if (shExpMatch(url, "http*://*.bowenpress.com*")) return strProxy;343	if (shExpMatch(url, "http*://*.bowenpress.com*")) return strProxy;344	if (shExpMatch(url, "http*://*.dl.box.net*")) return strProxy;345	if (shExpMatch(url, "http*://*.dl.box.net*")) return strProxy;346	if (shExpMatch(url, "http*://*.boxun.com*")) return strProxy;347	if (shExpMatch(url, "http*://*.boxun.com*")) return strProxy;348	if (shExpMatch(url, "http*://*.boxun.tv*")) return strProxy;349	if (shExpMatch(url, "http*://*.boxun.tv*")) return strProxy;350	if (shExpMatch(url, "http*://*.boxunblog.com*")) return strProxy;351	if (shExpMatch(url, "http*://*.boxunblog.com*")) return strProxy;352	if (shExpMatch(url, "http*://*.boxunclub.com*")) return strProxy;353	if (shExpMatch(url, "http*://*.br.st*")) return strProxy;354	if (shExpMatch(url, "http*://*.brandonhutchinson.com*")) return strProxy;355	if (shExpMatch(url, "http*://*.braumeister.org*")) return strProxy;356	if (shExpMatch(url, "http*://*.break.com*")) return strProxy;357	if (shExpMatch(url, "http*://*.break.com*")) return strProxy;358	if (shExpMatch(url, "http*://*.breakingtweets.com*")) return strProxy;359	if (shExpMatch(url, "http*://*.breakingtweets.com*")) return strProxy;360	if (shExpMatch(url, "http*://*.breakwall.net*")) return strProxy;361	if (shExpMatch(url, "http*://*.briefdream.com*")) return strProxy;362	if (shExpMatch(url, "http*://*.brightkite.com*")) return strProxy;363	if (shExpMatch(url, "http*://*.brightkite.com*")) return strProxy;364	if (shExpMatch(url, "http*://*.brizzly.com*")) return strProxy;365	if (shExpMatch(url, "http*://*.brizzly.com*")) return strProxy;366	if (shExpMatch(url, "http*://*.broadbook.com*")) return strProxy;367	if (shExpMatch(url, "http*://*.ibros.org*")) return strProxy;368	if (shExpMatch(url, "http*://*.brucewang.net*")) return strProxy;369	if (shExpMatch(url, "http*://*.bt95.com*")) return strProxy;370	if (shExpMatch(url, "http*://*.btdigg.org*")) return strProxy;371	if (shExpMatch(url, "http*://*.btspread.com*")) return strProxy;372	if (shExpMatch(url, "http*://*.budaedu.org*")) return strProxy;373	if (shExpMatch(url, "http*://*.budaedu.org*")) return strProxy;374	if (shExpMatch(url, "http*://*.bullog.org*")) return strProxy;375	if (shExpMatch(url, "http*://*.bullog.org*")) return strProxy;376	if (shExpMatch(url, "http*://*.bullogger.com*")) return strProxy;377	if (shExpMatch(url, "http*://*.bullogger.com*")) return strProxy;378	if (shExpMatch(url, "http*://*.businessinsider.com.au*")) return strProxy;379	if (shExpMatch(url, "http*://*.businessweek.com*")) return strProxy;380	if (shExpMatch(url, "http*://*.businesstimes.com.cn*")) return strProxy;381	if (shExpMatch(url, "http*://*.businesstimes.com.cn*")) return strProxy;382	if (shExpMatch(url, "http*://*.bugclub.org*")) return strProxy;383	if (shExpMatch(url, "http*://*.buugaa.com*")) return strProxy;384	if (shExpMatch(url, "http*://*.buzzhand.com*")) return strProxy;385	if (shExpMatch(url, "http*://*.buzzurl.jp*")) return strProxy;386	if (shExpMatch(url, "http*://*.bwsj.hk*")) return strProxy;387	if (shExpMatch(url, "http*://*.bx.tl*")) return strProxy;388	if (shExpMatch(url, "http*://*.holz.byethost8.com*")) return strProxy;389	if (shExpMatch(url, "http*://*.c-spanvideo.org*")) return strProxy;390	if (shExpMatch(url, "http*://*.c-spanvideo.org*")) return strProxy;391	if (shExpMatch(url, "http*://*.c-est-simple.com*")) return strProxy;392	if (shExpMatch(url, "http*://*.cacnw.com*")) return strProxy;393	if (shExpMatch(url, "http*://*.cactusvpn.com*")) return strProxy;394	if (shExpMatch(url, "http*://*.cactusvpn.com*")) return strProxy;395	if (shExpMatch(url, "http*://*.cafepress.com*")) return strProxy;396	if (shExpMatch(url, "http*://*.cahr.org.tw*")) return strProxy;397	if (shExpMatch(url, "http*://*.calameo.com*")) return strProxy;398	if (shExpMatch(url, "http*://*.cn.calameo.com*")) return strProxy;399	if (shExpMatch(url, "http*://*.cn.calameo.com*")) return strProxy;400	if (shExpMatch(url, "http*://*.cam4.com*")) return strProxy;401	if (shExpMatch(url, "http*://*.cam4.jp*")) return strProxy;402	if (shExpMatch(url, "http*://*.cam4.sg*")) return strProxy;403	if (shExpMatch(url, "http*://*.cams.com*")) return strProxy;404	if (shExpMatch(url, "http*://*.cams.org.sg*")) return strProxy;405	if (shExpMatch(url, "http*://*.canadameet.com*")) return strProxy;406	if (shExpMatch(url, "http*://*.bbs.cantonese.asia*")) return strProxy;407	if (shExpMatch(url, "http*://*.canyu.org*")) return strProxy;408	if (shExpMatch(url, "http*://*.cao.im*")) return strProxy;409	if (shExpMatch(url, "http*://*.caobian.info*")) return strProxy;410	if (shExpMatch(url, "http*://*.caobian.info*")) return strProxy;411	if (shExpMatch(url, "http*://*.catcatbox.com*")) return strProxy;412	if (shExpMatch(url, "http*://*.caochangqing.com*")) return strProxy;413	if (shExpMatch(url, "http*://*.caochangqing.com*")) return strProxy;414	if (shExpMatch(url, "http*://*.cari.com.my*")) return strProxy;415	if (shExpMatch(url, "http*://*.catch22.net*")) return strProxy;416	if (shExpMatch(url, "http*://*.catfightpayperview.xxx*")) return strProxy;417	if (shExpMatch(url, "http*://*.catholic.org.hk*")) return strProxy;418	if (shExpMatch(url, "http*://*.catholic.org.hk*")) return strProxy;419	if (shExpMatch(url, "http*://*.catholic.org.tw*")) return strProxy;420	if (shExpMatch(url, "http*://*.catholic.org.tw*")) return strProxy;421	if (shExpMatch(url, "http*://*.cattt.com*")) return strProxy;422	if (shExpMatch(url, "http*://*.cbc.ca*")) return strProxy;423	if (shExpMatch(url, "http*://*.cbsnews.com*")) return strProxy;424	if (shExpMatch(url, "http*://*.ccavtop10.com*")) return strProxy;425	if (shExpMatch(url, "http*://*.ccdtr.org*")) return strProxy;426	if (shExpMatch(url, "http*://*.ccdtr.org*")) return strProxy;427	if (shExpMatch(url, "http*://*.ccim.org*")) return strProxy;428	if (shExpMatch(url, "http*://*.cclife.org*")) return strProxy;429	if (shExpMatch(url, "http*://*.ccthere.com*")) return strProxy;430	if (shExpMatch(url, "http*://*.cctongbao.com*")) return strProxy;431	if (shExpMatch(url, "http*://*.ccue.ca*")) return strProxy;432	if (shExpMatch(url, "http*://*.ccue.com*")) return strProxy;433	if (shExpMatch(url, "http*://*.cgdepot.org*")) return strProxy;434	if (shExpMatch(url, "http*://*.cgdepot.org*")) return strProxy;435	if (shExpMatch(url, "http*://*.cdef.org*")) return strProxy;436	if (shExpMatch(url, "http*://*.cdig.info*")) return strProxy;437	if (shExpMatch(url, "http*://*.cdjp.org*")) return strProxy;438	if (shExpMatch(url, "http*://*.cdjp.org*")) return strProxy;439	if (shExpMatch(url, "http*://*.cdninstagram.com*")) return strProxy;440	if (shExpMatch(url, "http*://*.cdnews.com.tw*")) return strProxy;441	if (shExpMatch(url, "http*://*.cdp1998.org*")) return strProxy;442	if (shExpMatch(url, "http*://*.cdp1998.org*")) return strProxy;443	if (shExpMatch(url, "http*://*.cdp2006.org*")) return strProxy;444	if (shExpMatch(url, "http*://*.cdp2006.org*")) return strProxy;445	if (shExpMatch(url, "http*://*.cdpa.url.tw*")) return strProxy;446	if (shExpMatch(url, "http*://*.cdpusa.org*")) return strProxy;447	if (shExpMatch(url, "http*://*.cdpweb.org*")) return strProxy;448	if (shExpMatch(url, "http*://*.cdpweb.org*")) return strProxy;449	if (shExpMatch(url, "http*://*.cdpwu.org*")) return strProxy;450	if (shExpMatch(url, "http*://*.cdpwu.org*")) return strProxy;451	if (shExpMatch(url, "http*://*.cdw.com*")) return strProxy;452	if (shExpMatch(url, "http*://*.cecc.gov*")) return strProxy;453	if (shExpMatch(url, "http*://*.cecc.gov*")) return strProxy;454	if (shExpMatch(url, "http*://*.cellulo.info*")) return strProxy;455	if (shExpMatch(url, "http*://*.cenci.tk*")) return strProxy;456	if (shExpMatch(url, "http*://*.cenews.eu*")) return strProxy;457	if (shExpMatch(url, "http*://*.centralnation.com*")) return strProxy;458	if (shExpMatch(url, "http*://*.centurys.net*")) return strProxy;459	if (shExpMatch(url, "http*://*.centurys.net*")) return strProxy;460	if (shExpMatch(url, "http*://*.cfhks.org.hk*")) return strProxy;461	if (shExpMatch(url, "http*://*.cftfc.com*")) return strProxy;462	if (shExpMatch(url, "http*://*.chandoo.org*")) return strProxy;463	if (shExpMatch(url, "http*://*.change.org*")) return strProxy;464	if (shExpMatch(url, "http*://*.change.org*")) return strProxy;465	if (shExpMatch(url, "http*://*.changp.com*")) return strProxy;466	if (shExpMatch(url, "http*://*.changp.com*")) return strProxy;467	if (shExpMatch(url, "http*://*.chapm25.com*")) return strProxy;468	if (shExpMatch(url, "http*://*.chaturbate.com*")) return strProxy;469	if (shExpMatch(url, "http*://*.chengmingmag.com*")) return strProxy;470	if (shExpMatch(url, "http*://*.chenguangcheng.com*")) return strProxy;471	if (shExpMatch(url, "http*://*.chenguangcheng.com*")) return strProxy;472	if (shExpMatch(url, "http*://*.chenpokong.com*")) return strProxy;473	if (shExpMatch(url, "http*://*.cherrysave.com*")) return strProxy;474	if (shExpMatch(url, "http*://*.chhongbi.org*")) return strProxy;475	if (shExpMatch(url, "http*://*.chicagoncmtv.com*")) return strProxy;476	if (shExpMatch(url, "http*://*.china-week.com*")) return strProxy;477	if (shExpMatch(url, "http*://*.china101.com*")) return strProxy;478	if (shExpMatch(url, "http*://*.china101.com*")) return strProxy;479	if (shExpMatch(url, "http*://*.china18.org*")) return strProxy;480	if (shExpMatch(url, "http*://*.china21.com*")) return strProxy;481	if (shExpMatch(url, "http*://*.china21.org*")) return strProxy;482	if (shExpMatch(url, "http*://*.china21.org*")) return strProxy;483	if (shExpMatch(url, "http*://*.china5000.us*")) return strProxy;484	if (shExpMatch(url, "http*://*.chinaaffairs.org*")) return strProxy;485	if (shExpMatch(url, "http*://*.chinaaffairs.org*")) return strProxy;486	if (shExpMatch(url, "http*://*.chinaaid.me*")) return strProxy;487	if (shExpMatch(url, "http*://*.chinaaid.us*")) return strProxy;488	if (shExpMatch(url, "http*://*.chinaaid.org*")) return strProxy;489	if (shExpMatch(url, "http*://*.chinaaid.net*")) return strProxy;490	if (shExpMatch(url, "http*://*.chinacomments.org*")) return strProxy;491	if (shExpMatch(url, "http*://*.chinacomments.org*")) return strProxy;492	if (shExpMatch(url, "http*://*.chinachange.org*")) return strProxy;493	if (shExpMatch(url, "http*://*.chinachannel.hk*")) return strProxy;494	if (shExpMatch(url, "http*://*.chinachannel.hk*")) return strProxy;495	if (shExpMatch(url, "http*://*.chinadigitaltimes.net*")) return strProxy;496	if (shExpMatch(url, "http*://*.chinadigitaltimes.net*")) return strProxy;497	if (shExpMatch(url, "http*://*.chinaeweekly.com*")) return strProxy;498	if (shExpMatch(url, "http*://*.chinaeweekly.com*")) return strProxy;499	if (shExpMatch(url, "http*://*.chinafreepress.org*")) return strProxy;500	if (shExpMatch(url, "http*://*.chinagate.com*")) return strProxy;501	if (shExpMatch(url, "http*://*.chinageeks.org*")) return strProxy;502	if (shExpMatch(url, "http*://*.chinagfw.org*")) return strProxy;503	if (shExpMatch(url, "http*://*.chinagfw.org*")) return strProxy;504	if (shExpMatch(url, "http*://*.chinagreenparty.org*")) return strProxy;505	if (shExpMatch(url, "http*://*.chinagreenparty.org*")) return strProxy;506	if (shExpMatch(url, "http*://*.chinahush.com*")) return strProxy;507	if (shExpMatch(url, "http*://*.chinalawtranslate.com*")) return strProxy;508	if (shExpMatch(url, "http*://*.chinaxchina.com*")) return strProxy;509	if (shExpMatch(url, "http*://*.chinainperspective.com*")) return strProxy;510	if (shExpMatch(url, "http*://*.chinainperspective.net*")) return strProxy;511	if (shExpMatch(url, "http*://*.chinainperspective.net*")) return strProxy;512	if (shExpMatch(url, "http*://*.chinainperspective.org*")) return strProxy;513	if (shExpMatch(url, "http*://*.chinainperspective.org*")) return strProxy;514	if (shExpMatch(url, "http*://*.chinainterimgov.org*")) return strProxy;515	if (shExpMatch(url, "http*://*.chinalawandpolicy.com*")) return strProxy;516	if (shExpMatch(url, "http*://*.chinamule.com*")) return strProxy;517	if (shExpMatch(url, "http*://*.chinamule.com*")) return strProxy;518	if (shExpMatch(url, "http*://*.chinamz.org*")) return strProxy;519	if (shExpMatch(url, "http*://*.chinarightsia.org*")) return strProxy;520	if (shExpMatch(url, "http*://*.chinasocialdemocraticparty.com*")) return strProxy;521	if (shExpMatch(url, "http*://*.chinasocialdemocraticparty.com*")) return strProxy;522	if (shExpMatch(url, "http*://*.chinasoul.org*")) return strProxy;523	if (shExpMatch(url, "http*://*.chinasoul.org*")) return strProxy;524	if (shExpMatch(url, "http*://*.chinatimes.com*")) return strProxy;525	if (shExpMatch(url, "http*://*.chinatweeps.com*")) return strProxy;526	if (shExpMatch(url, "http*://*.chinaway.org*")) return strProxy;527	if (shExpMatch(url, "http*://*.chinaworker.info*")) return strProxy;528	if (shExpMatch(url, "http*://*.chinaworker.info*")) return strProxy;529	if (shExpMatch(url, "http*://*.chinayouth.org.hk*")) return strProxy;530	if (shExpMatch(url, "http*://*.chinayuanmin.org*")) return strProxy;531	if (shExpMatch(url, "http*://*.chinayuanmin.org*")) return strProxy;532	if (shExpMatch(url, "http*://*.chinese-hermit.net*")) return strProxy;533	if (shExpMatch(url, "http*://*.chinese-memorial.org*")) return strProxy;534	if (shExpMatch(url, "http*://*.chinesedailynews.com*")) return strProxy;535	if (shExpMatch(url, "http*://*.chinesen.de*")) return strProxy;536	if (shExpMatch(url, "http*://*.chinesen.de*")) return strProxy;537	if (shExpMatch(url, "http*://*.chinesepen.org*")) return strProxy;538	if (shExpMatch(url, "http*://*.chinesetalks.net*")) return strProxy;539	if (shExpMatch(url, "http*://*.chingcheong.com*")) return strProxy;540	if (shExpMatch(url, "http*://*.chingcheong.com*")) return strProxy;541	if (shExpMatch(url, "http*://*.chn.chosun.com*")) return strProxy;542	if (shExpMatch(url, "http*://*.christianstudy.com*")) return strProxy;543	if (shExpMatch(url, "http*://*.christianstudy.com*")) return strProxy;544	if (shExpMatch(url, "http*://*.christusrex.org*")) return strProxy;545	if (shExpMatch(url, "http*://*.chrlcg-hk.org*")) return strProxy;546	if (shExpMatch(url, "http*://*.chrome.com*")) return strProxy;547	if (shExpMatch(url, "http*://*.chromeadblock.com*")) return strProxy;548	if (shExpMatch(url, "http*://*.chromium.org*")) return strProxy;549	if (shExpMatch(url, "http*://*.chubun.com*")) return strProxy;550	if (shExpMatch(url, "http*://*.chuizi.net*")) return strProxy;551	if (shExpMatch(url, "http*://*.chuizi.net*")) return strProxy;552	if (shExpMatch(url, "http*://*.christiantimes.org.hk*")) return strProxy;553	if (shExpMatch(url, "http*://*.chrlawyers.hk*")) return strProxy;554	if (shExpMatch(url, "http*://*.allaboutalpha.com*")) return strProxy;555	if (shExpMatch(url, "http*://*.circlethebayfortibet.org*")) return strProxy;556	if (shExpMatch(url, "http*://*.citizenlab.org*")) return strProxy;557	if (shExpMatch(url, "http*://*.citizensradio.org*")) return strProxy;558	if (shExpMatch(url, "http*://*.city9x.com*")) return strProxy;559	if (shExpMatch(url, "http*://*.civicparty.hk*")) return strProxy;560	if (shExpMatch(url, "http*://*.civicparty.hk*")) return strProxy;561	if (shExpMatch(url, "http*://*.civilhrfront.org*")) return strProxy;562	if (shExpMatch(url, "http*://*.civilhrfront.org*")) return strProxy;563	if (shExpMatch(url, "http*://*.civilmedia.tw*")) return strProxy;564	if (shExpMatch(url, "http*://*.psiphon.civisec.org*")) return strProxy;565	if (shExpMatch(url, "http*://*.cjb.net*")) return strProxy;566	if (shExpMatch(url, "http*://*.ck101.com*")) return strProxy;567	if (shExpMatch(url, "http*://*.ck101.com*")) return strProxy;568	if (shExpMatch(url, "http*://*.classicalguitarblog.net*")) return strProxy;569	if (shExpMatch(url, "http*://*.clb.org.hk*")) return strProxy;570	if (shExpMatch(url, "http*://*.clipfish.de*")) return strProxy;571	if (shExpMatch(url, "http*://*.club1069.com*")) return strProxy;572	if (shExpMatch(url, "http*://*.cmoinc.org*")) return strProxy;573	if (shExpMatch(url, "http*://*.cms.gov*")) return strProxy;574	if (shExpMatch(url, "http*://*.cna.com.tw*")) return strProxy;575	if (shExpMatch(url, "http*://*.cnavista.com.tw*")) return strProxy;576	if (shExpMatch(url, "http*://*.cnd.org*")) return strProxy;577	if (shExpMatch(url, "http*://*.cnd.org*")) return strProxy;578	if (shExpMatch(url, "http*://*.wiki.cnitter.com*")) return strProxy;579	if (shExpMatch(url, "http*://*.cnn.com*")) return strProxy;580	if (shExpMatch(url, "http*://*.news.cnyes.com*")) return strProxy;581	if (shExpMatch(url, "http*://*.cochina.co*")) return strProxy;582	if (shExpMatch(url, "http*://*.cochina.org*")) return strProxy;583	if (shExpMatch(url, "http*://*.code1984.com*")) return strProxy;584	if (shExpMatch(url, "http*://*.codeshare.io*")) return strProxy;585	if (shExpMatch(url, "http*://*.codeskulptor.org*")) return strProxy;586	if (shExpMatch(url, "http*://*.tosh.comedycentral.com*")) return strProxy;587	if (shExpMatch(url, "http*://*.comefromchina.com*")) return strProxy;588	if (shExpMatch(url, "http*://*.comefromchina.com*")) return strProxy;589	if (shExpMatch(url, "http*://*.compileheart.com*")) return strProxy;590	if (shExpMatch(url, "http*://*.conoyo.com*")) return strProxy;591	if (shExpMatch(url, "http*://*.contactmagazine.net*")) return strProxy;592	if (shExpMatch(url, "http*://*.convio.net*")) return strProxy;593	if (shExpMatch(url, "http*://*.cool18.com*")) return strProxy;594	if (shExpMatch(url, "http*://*.coolaler.com*")) return strProxy;595	if (shExpMatch(url, "http*://*.coolaler.com*")) return strProxy;596	if (shExpMatch(url, "http*://*.coolder.com*")) return strProxy;597	if (shExpMatch(url, "http*://*.coolder.com*")) return strProxy;598	if (shExpMatch(url, "http*://*.coolloud.org.tw*")) return strProxy;599	if (shExpMatch(url, "http*://*.corumcollege.com*")) return strProxy;600	if (shExpMatch(url, "http*://*.couchdbwiki.com*")) return strProxy;601	if (shExpMatch(url, "http*://*.cotweet.com*")) return strProxy;602	if (shExpMatch(url, "http*://*.cpj.org*")) return strProxy;603	if (shExpMatch(url, "http*://*.cpj.org*")) return strProxy;604	if (shExpMatch(url, "http*://*.crackle.com*")) return strProxy;605	if (shExpMatch(url, "http*://*.crackle.com*")) return strProxy;606	if (shExpMatch(url, "http*://*.crchina.org*")) return strProxy;607	if (shExpMatch(url, "http*://*.crd-net.org*")) return strProxy;608	if (shExpMatch(url, "http*://*.creaders.net*")) return strProxy;609	if (shExpMatch(url, "http*://*.creaders.net*")) return strProxy;610	if (shExpMatch(url, "http*://*.crossthewall.net*")) return strProxy;611	if (shExpMatch(url, "http*://*.crossthewall.net*")) return strProxy;612	if (shExpMatch(url, "http*://*.csdparty.com*")) return strProxy;613	if (shExpMatch(url, "http*://*.csdparty.com*")) return strProxy;614	if (shExpMatch(url, "http*://*.csuchen.de*")) return strProxy;615	if (shExpMatch(url, "http*://*.ctfriend.net*")) return strProxy;616	if (shExpMatch(url, "http*://*.ctitv.com.tw*")) return strProxy;617	if (shExpMatch(url, "http*://*.cts.com.tw*")) return strProxy;618	if (shExpMatch(url, "http*://*.library.usc.cuhk.edu.hk*")) return strProxy;619	if (shExpMatch(url, "http*://*.mjlsh.usc.cuhk.edu.hk*")) return strProxy;620	if (shExpMatch(url, "http*://*.cuhkacs.org*")) return strProxy;621	if (shExpMatch(url, "http*://*.cuihua.org*")) return strProxy;622	if (shExpMatch(url, "http*://*.cuihua.org*")) return strProxy;623	if (shExpMatch(url, "http*://*.cuiweiping.net*")) return strProxy;624	if (shExpMatch(url, "http*://*.cuiweiping.net*")) return strProxy;625	if (shExpMatch(url, "http*://*.curvefish.com*")) return strProxy;626	if (shExpMatch(url, "http*://*.culture.tw*")) return strProxy;627	if (shExpMatch(url, "http*://*.culture.tw*")) return strProxy;628	if (shExpMatch(url, "http*://*.cw.com.tw*")) return strProxy;629	if (shExpMatch(url, "http*://*.forum.cyberctm.com*")) return strProxy;630	if (shExpMatch(url, "http*://*.cyberghostvpn.com*")) return strProxy;631	if (shExpMatch(url, "http*://*.cynscribe.com*")) return strProxy;632	if (shExpMatch(url, "http*://*.cytode.us*")) return strProxy;633	if (shExpMatch(url, "http*://*.ifan.cz.cc*")) return strProxy;634	if (shExpMatch(url, "http*://*.mike.cz.cc*")) return strProxy;635	if (shExpMatch(url, "http*://*.nic.cz.cc*")) return strProxy;636	if (shExpMatch(url, "http*://*.cl.d0z.net*")) return strProxy;637	if (shExpMatch(url, "http*://*.dabr.co.uk*")) return strProxy;638	if (shExpMatch(url, "http*://*.dabr.co.uk*")) return strProxy;639	if (shExpMatch(url, "http*://*.dabr.mobi*")) return strProxy;640	if (shExpMatch(url, "http*://*.dabr.mobi*")) return strProxy;641	if (shExpMatch(url, "http*://*.dabr.me*")) return strProxy;642	if (shExpMatch(url, "http*://*.dadazim.com*")) return strProxy;643	if (shExpMatch(url, "http*://*.dadazim.com*")) return strProxy;644	if (shExpMatch(url, "http*://*.dadi360.com*")) return strProxy;645	if (shExpMatch(url, "http*://*.dafagood.com*")) return strProxy;646	if (shExpMatch(url, "http*://*.dafahao.com*")) return strProxy;647	if (shExpMatch(url, "http*://*.dalailama.ru*")) return strProxy;648	if (shExpMatch(url, "http*://*.dailidaili.com*")) return strProxy;649	if (shExpMatch(url, "http*://*.dailidaili.com*")) return strProxy;650	if (shExpMatch(url, "http*://*.dailymotion.com*")) return strProxy;651	if (shExpMatch(url, "http*://*.dajiyuan.com*")) return strProxy;652	if (shExpMatch(url, "http*://*.dajiyuan.eu*")) return strProxy;653	if (shExpMatch(url, "http*://*.dalailama.com*")) return strProxy;654	if (shExpMatch(url, "http*://*.dalailamaworld.com*")) return strProxy;655	if (shExpMatch(url, "http*://*.dalailamaworld.com*")) return strProxy;656	if (shExpMatch(url, "http*://*.dalianmeng.org*")) return strProxy;657	if (shExpMatch(url, "http*://*.dalianmeng.org*")) return strProxy;658	if (shExpMatch(url, "http*://*.daliulian.org*")) return strProxy;659	if (shExpMatch(url, "http*://*.danke4china.net*")) return strProxy;660	if (shExpMatch(url, "http*://*.danke4china.net*")) return strProxy;661	if (shExpMatch(url, "http*://*.danwei.org*")) return strProxy;662	if (shExpMatch(url, "http*://*.daolan.net*")) return strProxy;663	if (shExpMatch(url, "http*://*.daxa.cn*")) return strProxy;664	if (shExpMatch(url, "http*://*.daxa.cn*")) return strProxy;665	if (shExpMatch(url, "http*://*.cn.dayabook.com*")) return strProxy;666	if (shExpMatch(url, "http*://*.daylife.com*")) return strProxy;667	if (shExpMatch(url, "http*://*.dcard.tw*")) return strProxy;668	if (shExpMatch(url, "http*://*.ddc.com.tw*")) return strProxy;669	if (shExpMatch(url, "http*://*.de-sci.org*")) return strProxy;670	if (shExpMatch(url, "http*://*.de-sci.org*")) return strProxy;671	if (shExpMatch(url, "http*://*.lists.debian.org*")) return strProxy;672	if (shExpMatch(url, "http*://*.packages.debian.org*")) return strProxy;673	if (shExpMatch(url, "http*://*.delcamp.net*")) return strProxy;674	if (shExpMatch(url, "http*://*.delicious.com*")) return strProxy;675	if (shExpMatch(url, "http*://*.democrats.org*")) return strProxy;676	if (shExpMatch(url, "http*://*.democrats.org*")) return strProxy;677	if (shExpMatch(url, "http*://*.desc.se*")) return strProxy;678	if (shExpMatch(url, "http*://*.destroy-china.jp*")) return strProxy;679	if (shExpMatch(url, "http*://*.deutsche-welle.de*")) return strProxy;680	if (shExpMatch(url, "http*://*.dev102.com*")) return strProxy;681	if (shExpMatch(url, "http*://*.deviantart.com*")) return strProxy;682	if (shExpMatch(url, "http*://*.deviantart.net*")) return strProxy;683	if (shExpMatch(url, "http*://*.devio.us*")) return strProxy;684	if (shExpMatch(url, "http*://*.devpn.com*")) return strProxy;685	if (shExpMatch(url, "http*://*.dfanning.com*")) return strProxy;686	if (shExpMatch(url, "http*://*.dfas.mil*")) return strProxy;687	if (shExpMatch(url, "http*://*.diaoyuislands.org*")) return strProxy;688	if (shExpMatch(url, "http*://*.diaoyuislands.org*")) return strProxy;689	if (shExpMatch(url, "http*://*.static.digg.com*")) return strProxy;690	if (shExpMatch(url, "http*://*.digiland.tw*")) return strProxy;691	if (shExpMatch(url, "http*://*.digitalnomadsproject.org*")) return strProxy;692	if (shExpMatch(url, "http*://*.diigo.com*")) return strProxy;693	if (shExpMatch(url, "http*://*.diigo.com*")) return strProxy;694	if (shExpMatch(url, "http*://*.furl.net*")) return strProxy;695	if (shExpMatch(url, "http*://*.dipity.com*")) return strProxy;696	if (shExpMatch(url, "http*://*.directcreative.com*")) return strProxy;697	if (shExpMatch(url, "http*://*.discogs.com*")) return strProxy;698	if (shExpMatch(url, "http*://*.discuss.com.hk*")) return strProxy;699	if (shExpMatch(url, "http*://*.discuss.com.hk*")) return strProxy;700	if (shExpMatch(url, "http*://*.disp.cc*")) return strProxy;701	if (shExpMatch(url, "http*://*.dit-inc.us*")) return strProxy;702	if (shExpMatch(url, "http*://*.dit-inc.us*")) return strProxy;703	if (shExpMatch(url, "http*://*.dizhidizhi.com*")) return strProxy;704	if (shExpMatch(url, "http*://*.djangosnippets.org*")) return strProxy;705	if (shExpMatch(url, "http*://*.dl-laby.jp*")) return strProxy;706	if (shExpMatch(url, "http*://*.dlsite.com*")) return strProxy;707	if (shExpMatch(url, "http*://*.dmcdn.net*")) return strProxy;708	if (shExpMatch(url, "http*://*.dnscrypt.org*")) return strProxy;709	if (shExpMatch(url, "http*://*.dns2go.com*")) return strProxy;710	if (shExpMatch(url, "http*://*.dnssec.net*")) return strProxy;711	if (shExpMatch(url, "http*://*.dojin.com*")) return strProxy;712	if (shExpMatch(url, "http*://*.dok-forum.net*")) return strProxy;713	if (shExpMatch(url, "http*://*.dolc.de*")) return strProxy;714	if (shExpMatch(url, "http*://*.dolf.org.hk*")) return strProxy;715	if (shExpMatch(url, "http*://*.dollf.com*")) return strProxy;716	if (shExpMatch(url, "http*://*.domain.club.tw*")) return strProxy;717	if (shExpMatch(url, "http*://*.dongde.com*")) return strProxy;718	if (shExpMatch(url, "http*://*.dongtaiwang.com*")) return strProxy;719	if (shExpMatch(url, "http*://*.dongtaiwang.com*")) return strProxy;720	if (shExpMatch(url, "http*://*.dongtaiwang.net*")) return strProxy;721	if (shExpMatch(url, "http*://*.dongtaiwang.net*")) return strProxy;722	if (shExpMatch(url, "http*://*.dongyangjing.com*")) return strProxy;723	if (shExpMatch(url, "http*://*.dontfilter.us*")) return strProxy;724	if (shExpMatch(url, "http*://*.dontmovetochina.com*")) return strProxy;725	if (shExpMatch(url, "http*://*.dotplane.com*")) return strProxy;726	if (shExpMatch(url, "http*://*.dotplane.com*")) return strProxy;727	if (shExpMatch(url, "http*://*.dotsub.com*")) return strProxy;728	if (shExpMatch(url, "http*://*.doubleaf.com*")) return strProxy;729	if (shExpMatch(url, "http*://*.dougscripts.com*")) return strProxy;730	if (shExpMatch(url, "http*://*.dowei.org*")) return strProxy;731	if (shExpMatch(url, "http*://*.doxygen.org*")) return strProxy;732	if (shExpMatch(url, "http*://*.dphk.org*")) return strProxy;733	if (shExpMatch(url, "http*://*.dpp.org.tw*")) return strProxy;734	if (shExpMatch(url, "http*://*.dpp.org.tw*")) return strProxy;735	if (shExpMatch(url, "http*://*.weigegebyc.dreamhosters.com*")) return strProxy;736	if (shExpMatch(url, "http*://*.drgan.net*")) return strProxy;737	if (shExpMatch(url, "http*://*.dropbox.com*")) return strProxy;738	if (shExpMatch(url, "http*://*.dropboxusercontent.com*")) return strProxy;739	if (shExpMatch(url, "http*://*.drsunacademy.com*")) return strProxy;740	if (shExpMatch(url, "http*://*.drtuber.com*")) return strProxy;741	if (shExpMatch(url, "http*://*.dscn.info*")) return strProxy;742	if (shExpMatch(url, "http*://*.dtiblog.com*")) return strProxy;743	if (shExpMatch(url, "http*://*.dtic.mil*")) return strProxy;744	if (shExpMatch(url, "http*://*.dtiserv2.com*")) return strProxy;745	if (shExpMatch(url, "http*://*.duckduckgo.com*")) return strProxy;746	if (shExpMatch(url, "http*://*.duckload.com*")) return strProxy;747	if (shExpMatch(url, "http*://*.duckmylife.com*")) return strProxy;748	if (shExpMatch(url, "http*://*.duihua.org*")) return strProxy;749	if (shExpMatch(url, "http*://*.duihua.org*")) return strProxy;750	if (shExpMatch(url, "http*://*.duihuahrjournal.org*")) return strProxy;751	if (shExpMatch(url, "http*://*.duoweitimes.com*")) return strProxy;752	if (shExpMatch(url, "http*://*.duoweitimes.com*")) return strProxy;753	if (shExpMatch(url, "http*://*.duping.net*")) return strProxy;754	if (shExpMatch(url, "http*://*.duplicati.com*")) return strProxy;755	if (shExpMatch(url, "http*://*.dupola.com*")) return strProxy;756	if (shExpMatch(url, "http*://*.dupola.net*")) return strProxy;757	if (shExpMatch(url, "http*://*.dvorak.org*")) return strProxy;758	if (shExpMatch(url, "http*://*.dw.com*")) return strProxy;759	if (shExpMatch(url, "http*://*.dw.com*")) return strProxy;760	if (shExpMatch(url, "http*://*.dw.de*")) return strProxy;761	if (shExpMatch(url, "http*://*.dw-world.com*")) return strProxy;762	if (shExpMatch(url, "http*://*.dw-world.com*")) return strProxy;763	if (shExpMatch(url, "http*://*.dw-world.de*")) return strProxy;764	if (shExpMatch(url, "http*://*.dw-world.de*")) return strProxy;765	if (shExpMatch(url, "http*://*.dwheeler.com*")) return strProxy;766	if (shExpMatch(url, "http*://*.dwnews.com*")) return strProxy;767	if (shExpMatch(url, "http*://*.dwnews.com*")) return strProxy;768	if (shExpMatch(url, "http*://*.dwnews.net*")) return strProxy;769	if (shExpMatch(url, "http*://*.dwnews.net*")) return strProxy;770	if (shExpMatch(url, "http*://*.xys.dxiong.com*")) return strProxy;771	if (shExpMatch(url, "http*://*.dy24k.info*")) return strProxy;772	if (shExpMatch(url, "http*://*.dynawebinc.com*")) return strProxy;773	if (shExpMatch(url, "http*://*.dyndns.org*")) return strProxy;774	if (shExpMatch(url, "http*://*.dzze.com*")) return strProxy;775	if (shExpMatch(url, "http*://*.e-gold.com*")) return strProxy;776	if (shExpMatch(url, "http*://*.e-gold.com*")) return strProxy;777	if (shExpMatch(url, "http*://*.e-hentai.org*")) return strProxy;778	if (shExpMatch(url, "http*://*.e-info.org.tw*")) return strProxy;779	if (shExpMatch(url, "http*://*.e-traderland.net*")) return strProxy;780	if (shExpMatch(url, "http*://*.e123.hk*")) return strProxy;781	if (shExpMatch(url, "http*://*.eastturkestan.com*")) return strProxy;782	if (shExpMatch(url, "http*://*.eastturkistan.net*")) return strProxy;783	if (shExpMatch(url, "http*://*.eastturkistan-gov.org*")) return strProxy;784	if (shExpMatch(url, "http*://*.eastturkistangovernmentinexile.us*")) return strProxy;785	if (shExpMatch(url, "http*://*.eastturkistangovernmentinexile.us*")) return strProxy;786	if (shExpMatch(url, "http*://*.ebookbrowse.com*")) return strProxy;787	if (shExpMatch(url, "http*://*.ebookee.com*")) return strProxy;788	if (shExpMatch(url, "http*://*.ecministry.net*")) return strProxy;789	if (shExpMatch(url, "http*://*.bbs.ecstart.com*")) return strProxy;790	if (shExpMatch(url, "http*://*.edgecastcdn.net*")) return strProxy;791	if (shExpMatch(url, "http*://*.twimg\.edgesuite\.net\*")) return strProxy;792	if (shExpMatch(url, "http*://*.edicypages.com*")) return strProxy;793	if (shExpMatch(url, "http*://*.edoors.com*")) return strProxy;794	if (shExpMatch(url, "http*://*.edubridge.com*")) return strProxy;795	if (shExpMatch(url, "http*://*.edubridge.com*")) return strProxy;796	if (shExpMatch(url, "http*://*.eevpn.com*")) return strProxy;797	if (shExpMatch(url, "http*://*.efcc.org.hk*")) return strProxy;798	if (shExpMatch(url, "http*://*.efmoe.com*")) return strProxy;799	if (shExpMatch(url, "http*://*.eic-av.com*")) return strProxy;800	if (shExpMatch(url, "http*://*.electionsmeter.com*")) return strProxy;801	if (shExpMatch(url, "http*://*.elgoog.im*")) return strProxy;802	if (shExpMatch(url, "http*://*.elpais.com*")) return strProxy;803	if (shExpMatch(url, "http*://*.eltondisney.com*")) return strProxy;804	if (shExpMatch(url, "http*://*.emacsblog.org*")) return strProxy;805	if (shExpMatch(url, "http*://*.emory.edu*")) return strProxy;806	if (shExpMatch(url, "http*://*.emule-ed2k.com*")) return strProxy;807	if (shExpMatch(url, "http*://*.emule-ed2k.com*")) return strProxy;808	if (shExpMatch(url, "http*://*.emuparadise.me*")) return strProxy;809	if (shExpMatch(url, "http*://*.enewstree.com*")) return strProxy;810	if (shExpMatch(url, "http*://*.chinese.engadget.com*")) return strProxy;811	if (shExpMatch(url, "http*://*.englishfromengland.co.uk*")) return strProxy;812	if (shExpMatch(url, "http*://*.entermap.com*")) return strProxy;813	if (shExpMatch(url, "http*://*.epochtimes-bg.com*")) return strProxy;814	if (shExpMatch(url, "http*://*.epochtimes-bg.com*")) return strProxy;815	if (shExpMatch(url, "http*://*.epochtimes-romania.com*")) return strProxy;816	if (shExpMatch(url, "http*://*.epochtimes-romania.com*")) return strProxy;817	if (shExpMatch(url, "http*://*.epochtimes.co.il*")) return strProxy;818	if (shExpMatch(url, "http*://*.epochtimes.co.il*")) return strProxy;819	if (shExpMatch(url, "http*://*.epochtimes.co.kr*")) return strProxy;820	if (shExpMatch(url, "http*://*.epochtimes.co.kr*")) return strProxy;821	if (shExpMatch(url, "http*://*.epochtimes.com*")) return strProxy;822	if (shExpMatch(url, "http*://*.epochtimes.com*")) return strProxy;823	if (shExpMatch(url, "http*://*.epochtimes.de*")) return strProxy;824	if (shExpMatch(url, "http*://*.epochtimes.fr*")) return strProxy;825	if (shExpMatch(url, "http*://*.epochtimes.ie*")) return strProxy;826	if (shExpMatch(url, "http*://*.epochtimes.jp*")) return strProxy;827	if (shExpMatch(url, "http*://*.epochtimes.ru*")) return strProxy;828	if (shExpMatch(url, "http*://*.epochtimes.se*")) return strProxy;829	if (shExpMatch(url, "http*://*.epochtimestr.com*")) return strProxy;830	if (shExpMatch(url, "http*://*.epochweekly.com*")) return strProxy;831	if (shExpMatch(url, "http*://*.erabaru.net*")) return strProxy;832	if (shExpMatch(url, "http*://*.erepublik.com*")) return strProxy;833	if (shExpMatch(url, "http*://*.erktv.com*")) return strProxy;834	if (shExpMatch(url, "http*://*.ernestmandel.org*")) return strProxy;835	if (shExpMatch(url, "http*://*.erights.net*")) return strProxy;836	if (shExpMatch(url, "http*://*.etaa.org.au*")) return strProxy;837	if (shExpMatch(url, "http*://*.etaiwannews.com*")) return strProxy;838	if (shExpMatch(url, "http*://*.etizer.org*")) return strProxy;839	if (shExpMatch(url, "http*://*.ettoday.net*")) return strProxy;840	if (shExpMatch(url, "http*://*.eulam.com*")) return strProxy;841	if (shExpMatch(url, "http*://*.eventful.com*")) return strProxy;842	if (shExpMatch(url, "http*://*.exblog.jp*")) return strProxy;843	if (shExpMatch(url, "http*://*.blog.exblog.co.jp*")) return strProxy;844	if (shExpMatch(url, "http*://*.blog.excite.co.jp*")) return strProxy;845	if (shExpMatch(url, "http*://*.expatshield.com*")) return strProxy;846	if (shExpMatch(url, "http*://*.exploader.net*")) return strProxy;847	if (shExpMatch(url, "http*://*.extremetube.com*")) return strProxy;848	if (shExpMatch(url, "http*://*.eyevio.jp*")) return strProxy;849	if (shExpMatch(url, "http*://*.eyevio.jp*")) return strProxy;850	if (shExpMatch(url, "http*://*.eyny.com*")) return strProxy;851	if (shExpMatch(url, "http*://*.ezpc.tk*")) return strProxy;852	if (shExpMatch(url, "http*://*.ezpeer.com*")) return strProxy;853	if (shExpMatch(url, "http*://*.facebook.com*")) return strProxy;854	if (shExpMatch(url, "http*://*.facebook.com*")) return strProxy;855	if (shExpMatch(url, "http*://*.connect.facebook.net*")) return strProxy;856	if (shExpMatch(url, "http*://*.facebookquotes4u.com*")) return strProxy;857	if (shExpMatch(url, "http*://*.facesofnyfw.com*")) return strProxy;858	if (shExpMatch(url, "http*://*.faiththedog.info*")) return strProxy;859	if (shExpMatch(url, "http*://*.fakku.net*")) return strProxy;860	if (shExpMatch(url, "http*://*.falunart.org*")) return strProxy;861	if (shExpMatch(url, "http*://*.falunasia.info*")) return strProxy;862	if (shExpMatch(url, "http*://*.falundafa.org*")) return strProxy;863	if (shExpMatch(url, "http*://*.falundafamuseum.org*")) return strProxy;864	if (shExpMatch(url, "http*://*.falunhr.org*")) return strProxy;865	if (shExpMatch(url, "http*://*.fanglizhi.info*")) return strProxy;866	if (shExpMatch(url, "http*://*.fangong.org*")) return strProxy;867	if (shExpMatch(url, "http*://*.fangongheike.com*")) return strProxy;868	if (shExpMatch(url, "http*://*.fanqianghou.com*")) return strProxy;869	if (shExpMatch(url, "http*://*.fapdu.com*")) return strProxy;870	if (shExpMatch(url, "http*://*.fawanghuihui.org*")) return strProxy;871	if (shExpMatch(url, "http*://*.fbcdn.net*")) return strProxy;872	if (shExpMatch(url, "http*://*.fanqiangyakexi.net*")) return strProxy;873	if (shExpMatch(url, "http*://*.fail.hk*")) return strProxy;874	if (shExpMatch(url, "http*://*.famunion.com*")) return strProxy;875	if (shExpMatch(url, "http*://*.fan-qiang.com*")) return strProxy;876	if (shExpMatch(url, "http*://*.fangbinxing.com*")) return strProxy;877	if (shExpMatch(url, "http*://*.fangbinxing.com*")) return strProxy;878	if (shExpMatch(url, "http*://*.fangeming.com*")) return strProxy;879	if (shExpMatch(url, "http*://*.fanswong.com*")) return strProxy;880	if (shExpMatch(url, "http*://*.fanyue.info*")) return strProxy;881	if (shExpMatch(url, "http*://*.farwestchina.com*")) return strProxy;882	if (shExpMatch(url, "http*://*.en.favotter.net*")) return strProxy;883	if (shExpMatch(url, "http*://*.faststone.org*")) return strProxy;884	if (shExpMatch(url, "http*://*.favstar.fm*")) return strProxy;885	if (shExpMatch(url, "http*://*.favstar.fm*")) return strProxy;886	if (shExpMatch(url, "http*://*.faydao.com*")) return strProxy;887	if (shExpMatch(url, "http*://*.fb.com*")) return strProxy;888	if (shExpMatch(url, "http*://*.fb.me*")) return strProxy;889	if (shExpMatch(url, "http*://*.fb.me*")) return strProxy;890	if (shExpMatch(url, "http*://*.fbsbx.com*")) return strProxy;891	if (shExpMatch(url, "http*://*.fc2.com*")) return strProxy;892	if (shExpMatch(url, "http*://*.fc2china.com*")) return strProxy;893	if (shExpMatch(url, "http*://*.fc2blog.net*")) return strProxy;894	if (shExpMatch(url, "http*://*.uygur.fc2web.com*")) return strProxy;895	if (shExpMatch(url, "http*://*.video.fdbox.com*")) return strProxy;896	if (shExpMatch(url, "http*://*.fdc89.jp*")) return strProxy;897	if (shExpMatch(url, "http*://*.fourface.nodesnoop.com*")) return strProxy;898	if (shExpMatch(url, "http*://*.feedburner.com*")) return strProxy;899	if (shExpMatch(url, "http*://*.feedzshare.com*")) return strProxy;900	if (shExpMatch(url, "http*://*.feelssh.com*")) return strProxy;901	if (shExpMatch(url, "http*://*.feer.com*")) return strProxy;902	if (shExpMatch(url, "http*://*.feministteacher.com*")) return strProxy;903	if (shExpMatch(url, "http*://*.fengzhenghu.com*")) return strProxy;904	if (shExpMatch(url, "http*://*.fengzhenghu.com*")) return strProxy;905	if (shExpMatch(url, "http*://*.fflick.com*")) return strProxy;906	if (shExpMatch(url, "http*://*.fgmtv.net*")) return strProxy;907	if (shExpMatch(url, "http*://*.fgmtv.org*")) return strProxy;908	if (shExpMatch(url, "http*://*.files2me.com*")) return strProxy;909	if (shExpMatch(url, "http*://*.files2me.com*")) return strProxy;910	if (shExpMatch(url, "http*://*.fileserve.com*")) return strProxy;911	if (shExpMatch(url, "http*://*.fillthesquare.org*")) return strProxy;912	if (shExpMatch(url, "http*://*.finalion.jp*")) return strProxy;913	if (shExpMatch(url, "http*://*.findbook.tw*")) return strProxy;914	if (shExpMatch(url, "http*://*.fingerdaily.com*")) return strProxy;915	if (shExpMatch(url, "http*://*.finler.net*")) return strProxy;916	if (shExpMatch(url, "http*://*.fireofliberty.org*")) return strProxy;917	if (shExpMatch(url, "http*://*.fireofliberty.org*")) return strProxy;918	if (shExpMatch(url, "http*://*.falsefire.com*")) return strProxy;919	if (shExpMatch(url, "http*://*.falsefire.com*")) return strProxy;920	if (shExpMatch(url, "http*://*.fleshbot.com*")) return strProxy;921	if (shExpMatch(url, "http*://*.flickr.com*")) return strProxy;922	if (shExpMatch(url, "http*://*.staticflickr.com*")) return strProxy;923	if (shExpMatch(url, "http*://*.flickrhivemind.net*")) return strProxy;924	if (shExpMatch(url, "http*://*.yuming.flnet.org*")) return strProxy;925	if (shExpMatch(url, "http*://*.cn.fmnnow.com*")) return strProxy;926	if (shExpMatch(url, "http*://*.blog.foolsmountain.com*")) return strProxy;927	if (shExpMatch(url, "http*://*.forum4hk.com*")) return strProxy;928	if (shExpMatch(url, "http*://*.pioneer-worker.forums-free.com*")) return strProxy;929	if (shExpMatch(url, "http*://*.4sq.com*")) return strProxy;930	if (shExpMatch(url, "http*://*.fotop.net*")) return strProxy;931	if (shExpMatch(url, "http*://*.video.foxbusiness.com*")) return strProxy;932	if (shExpMatch(url, "http*://*.fringenetwork.com*")) return strProxy;933	if (shExpMatch(url, "http*://*.flecheinthepeche.fr*")) return strProxy;934	if (shExpMatch(url, "http*://*.focustaiwan.tw*")) return strProxy;935	if (shExpMatch(url, "http*://*.focusvpn.com*")) return strProxy;936	if (shExpMatch(url, "http*://*.fofg.org*")) return strProxy;937	if (shExpMatch(url, "http*://*.fooooo.com*")) return strProxy;938	if (shExpMatch(url, "http*://*.fooooo.com*")) return strProxy;939	if (shExpMatch(url, "http*://*.footwiball.com*")) return strProxy;940	if (shExpMatch(url, "http*://*.fourthinternational.org*")) return strProxy;941	if (shExpMatch(url, "http*://*.foxdie.us*")) return strProxy;942	if (shExpMatch(url, "http*://*.foxsub.com*")) return strProxy;943	if (shExpMatch(url, "http*://*.foxtang.com*")) return strProxy;944	if (shExpMatch(url, "http*://*.fqrouter.com*")) return strProxy;945	if (shExpMatch(url, "http*://*.franklc.com*")) return strProxy;946	if (shExpMatch(url, "http*://*.freakshare.com*")) return strProxy;947	if (shExpMatch(url, "http*://*.freakshare.com*")) return strProxy;948	if (shExpMatch(url, "http*://*.free4u.com.ar*")) return strProxy;949	if (shExpMatch(url, "http*://*.free-gate.org*")) return strProxy;950	if (shExpMatch(url, "http*://*.free.fr*")) return strProxy;951	if (shExpMatch(url, "http*://*.allonlinux.free.fr*")) return strProxy;952	if (shExpMatch(url, "http*://*.dimitrik.free.fr*")) return strProxy;953	if (shExpMatch(url, "http*://*.kineox.free.fr*")) return strProxy;954	if (shExpMatch(url, "http*://*.puttycm.free.fr*")) return strProxy;955	if (shExpMatch(url, "http*://*.freealim.com*")) return strProxy;956	if (shExpMatch(url, "http*://*.whitebear.freebearblog.org*")) return strProxy;957	if (shExpMatch(url, "http*://*.freechal.com*")) return strProxy;958	if (shExpMatch(url, "http*://*.freedomhouse.org*")) return strProxy;959	if (shExpMatch(url, "http*://*.freedomhouse.org*")) return strProxy;960	if (shExpMatch(url, "http*://*.freegao.com*")) return strProxy;961	if (shExpMatch(url, "http*://*.freegao.com*")) return strProxy;962	if (shExpMatch(url, "http*://*.free-hada-now.org*")) return strProxy;963	if (shExpMatch(url, "http*://*.freelotto.com*")) return strProxy;964	if (shExpMatch(url, "http*://*.freelotto.com*")) return strProxy;965	if (shExpMatch(url, "http*://*.freeman2.com*")) return strProxy;966	if (shExpMatch(url, "http*://*.freeopenvpn.com*")) return strProxy;967	if (shExpMatch(url, "http*://*.freemoren.com*")) return strProxy;968	if (shExpMatch(url, "http*://*.freemorenews.com*")) return strProxy;969	if (shExpMatch(url, "http*://*.freenet-china.org*")) return strProxy;970	if (shExpMatch(url, "http*://*.freenewscn.com*")) return strProxy;971	if (shExpMatch(url, "http*://*.freeoz.org*")) return strProxy;972	if (shExpMatch(url, "http*://*.freeoz.org*")) return strProxy;973	if (shExpMatch(url, "http*://*.bulbous.freeserve.co.uk*")) return strProxy;974	if (shExpMatch(url, "http*://*.freessh.us*")) return strProxy;975	if (shExpMatch(url, "http*://*.free4u.com.ar*")) return strProxy;976	if (shExpMatch(url, "http*://*.free-ssh.com*")) return strProxy;977	if (shExpMatch(url, "http*://*.free-ssh.com*")) return strProxy;978	if (shExpMatch(url, "http*://*.freeforums.org*")) return strProxy;979	if (shExpMatch(url, "http*://*.freenetproject.org*")) return strProxy;980	if (shExpMatch(url, "http*://*.freeoz.org*")) return strProxy;981	if (shExpMatch(url, "http*://*.freetibet.net*")) return strProxy;982	if (shExpMatch(url, "http*://*.freetibet.org*")) return strProxy;983	if (shExpMatch(url, "http*://*.freetibetanheroes.org*")) return strProxy;984	if (shExpMatch(url, "http*://*.freewallpaper4.me*")) return strProxy;985	if (shExpMatch(url, "http*://*.freewebs.com*")) return strProxy;986	if (shExpMatch(url, "http*://*.freeweibo.com*")) return strProxy;987	if (shExpMatch(url, "http*://*.freexinwen.com*")) return strProxy;988	if (shExpMatch(url, "http*://*.freeyoutubeproxy.net*")) return strProxy;989	if (shExpMatch(url, "http*://*.freeyoutubeproxy.net*")) return strProxy;990	if (shExpMatch(url, "http*://*.friendfeed.com*")) return strProxy;991	if (shExpMatch(url, "http*://*.friendfeed-media.com*")) return strProxy;992	if (shExpMatch(url, "http*://*.ff.im*")) return strProxy;993	if (shExpMatch(url, "http*://*.zensur.freerk.com*")) return strProxy;994	if (shExpMatch(url, "http*://*.freevpn.nl*")) return strProxy;995	if (shExpMatch(url, "http*://*.adult.friendfinder.com*")) return strProxy;996	if (shExpMatch(url, "http*://*.fring.com*")) return strProxy;997	if (shExpMatch(url, "http*://*.fring.com*")) return strProxy;998	if (shExpMatch(url, "http*://*.frommel.net*")) return strProxy;999	if (shExpMatch(url, "http*://*.frontlinedefenders.org*")) return strProxy;1000	if (shExpMatch(url, "http*://*.fscked.org*")) return strProxy;1001	if (shExpMatch(url, "http*://*.fsurf.com*")) return strProxy;1002	if (shExpMatch(url, "http*://*.ftchinese.com*")) return strProxy;1003	if (shExpMatch(url, "http*://*.ftchinese.com*")) return strProxy;1004	if (shExpMatch(url, "http*://*.ftchinese.com*")) return strProxy;1005	if (shExpMatch(url, "http*://*.fuckcnnic.net*")) return strProxy;1006	if (shExpMatch(url, "http*://*.fuckcnnic.net*")) return strProxy;1007	if (shExpMatch(url, "http*://*.fuckgfw.org*")) return strProxy;1008	if (shExpMatch(url, "http*://*.fulue.com*")) return strProxy;1009	if (shExpMatch(url, "http*://*.funf.tw*")) return strProxy;1010	if (shExpMatch(url, "http*://*.funp.com*")) return strProxy;1011	if (shExpMatch(url, "http*://*.furinkan.com*")) return strProxy;1012	if (shExpMatch(url, "http*://*.futurechinaforum.org*")) return strProxy;1013	if (shExpMatch(url, "http*://*.futuremessage.org*")) return strProxy;1014	if (shExpMatch(url, "http*://*.fuyin.net*")) return strProxy;1015	if (shExpMatch(url, "http*://*.fw.cm*")) return strProxy;1016	if (shExpMatch(url, "http*://*.fzh999.com*")) return strProxy;1017	if (shExpMatch(url, "http*://*.fzh999.net*")) return strProxy;1018	if (shExpMatch(url, "http*://*.gabocorp.com*")) return strProxy;1019	if (shExpMatch(url, "http*://*.gaeproxy.com*")) return strProxy;1020	if (shExpMatch(url, "http*://*.galenwu.com*")) return strProxy;1021	if (shExpMatch(url, "http*://*.game735.com*")) return strProxy;1022	if (shExpMatch(url, "http*://*.gamebase.com.tw*")) return strProxy;1023	if (shExpMatch(url, "http*://*.gamer.com.tw*")) return strProxy;1024	if (shExpMatch(url, "http*://*.gamer.com.tw*")) return strProxy;1025	if (shExpMatch(url, "http*://*.gamez.com.tw*")) return strProxy;1026	if (shExpMatch(url, "http*://*.gamez.com.tw*")) return strProxy;1027	if (shExpMatch(url, "http*://*.gaoming.net*")) return strProxy;1028	if (shExpMatch(url, "http*://*.gaoming.net*")) return strProxy;1029	if (shExpMatch(url, "http*://*.ganges.com*")) return strProxy;1030	if (shExpMatch(url, "http*://*.gaopi.net*")) return strProxy;1031	if (shExpMatch(url, "http*://*.gaopi.net*")) return strProxy;1032	if (shExpMatch(url, "http*://*.gaozhisheng.org*")) return strProxy;1033	if (shExpMatch(url, "http*://*.gaozhisheng.net*")) return strProxy;1034	if (shExpMatch(url, "http*://*.gardennetworks.com*")) return strProxy;1035	if (shExpMatch(url, "http*://*.gardennetworks.org*")) return strProxy;1036	if (shExpMatch(url, "http*://*.72.52.81.22*")) return strProxy;1037	if (shExpMatch(url, "http*://*.gartlive.com*")) return strProxy;1038	if (shExpMatch(url, "http*://*.gather.com*")) return strProxy;1039	if (shExpMatch(url, "http*://*.gaymap.cc*")) return strProxy;1040	if (shExpMatch(url, "http*://*.gazotube.com*")) return strProxy;1041	if (shExpMatch(url, "http*://*.gazotube.com*")) return strProxy;1042	if (shExpMatch(url, "http*://*.gcc.org.hk*")) return strProxy;1043	if (shExpMatch(url, "http*://*.gclooney.com*")) return strProxy;1044	if (shExpMatch(url, "http*://*.gcpnews.com*")) return strProxy;1045	if (shExpMatch(url, "http*://*.gdbt.net*")) return strProxy;1046	if (shExpMatch(url, "http*://*.gdzf.org*")) return strProxy;1047	if (shExpMatch(url, "http*://*.geek-art.net*")) return strProxy;1048	if (shExpMatch(url, "http*://*.geekerhome.com*")) return strProxy;1049	if (shExpMatch(url, "http*://*.geekmanuals.com*")) return strProxy;1050	if (shExpMatch(url, "http*://*.genuitec.com*")) return strProxy;1051	if (shExpMatch(url, "http*://*.geocities.co.jp*")) return strProxy;1052	if (shExpMatch(url, "http*://*.geocities.com*")) return strProxy;1053	if (shExpMatch(url, "http*://*.hk.geocities.com*")) return strProxy;1054	if (shExpMatch(url, "http*://*.geocities.jp*")) return strProxy;1055	if (shExpMatch(url, "http*://*.geohot.com*")) return strProxy;1056	if (shExpMatch(url, "http*://*.geometrictools.com*")) return strProxy;1057	if (shExpMatch(url, "http*://*.get-digital-help.com*")) return strProxy;1058	if (shExpMatch(url, "http*://*.getchu.com*")) return strProxy;1059	if (shExpMatch(url, "http*://*.getfoxyproxy.org*")) return strProxy;1060	if (shExpMatch(url, "http*://*.getfreedur.com*")) return strProxy;1061	if (shExpMatch(url, "http*://*.getgom.com*")) return strProxy;1062	if (shExpMatch(url, "http*://*.getlantern.org*")) return strProxy;1063	if (shExpMatch(url, "http*://*.getlantern.org*")) return strProxy;1064	if (shExpMatch(url, "http*://*.getjetso.com*")) return strProxy;1065	if (shExpMatch(url, "http*://*.getiton.com*")) return strProxy;1066	if (shExpMatch(url, "http*://*.getsocialscope.com*")) return strProxy;1067	if (shExpMatch(url, "http*://*.gfw.org.ua*")) return strProxy;1068	if (shExpMatch(url, "http*://*.ggssl.com*")) return strProxy;1069	if (shExpMatch(url, "http*://*.ggssl.com*")) return strProxy;1070	if (shExpMatch(url, "http*://*.ghost.org*")) return strProxy;1071	if (shExpMatch(url, "http*://*.ghut.org*")) return strProxy;1072	if (shExpMatch(url, "http*://*.giga-web.jp*")) return strProxy;1073	if (shExpMatch(url, "http*://*.tw.gigacircle.com*")) return strProxy;1074	if (shExpMatch(url, "http*://*.cn.giganews.com*")) return strProxy;1075	if (shExpMatch(url, "http*://*.gigporno.ru*")) return strProxy;1076	if (shExpMatch(url, "http*://*.gimpshop.com*")) return strProxy;1077	if (shExpMatch(url, "http*://*.girlbanker.com*")) return strProxy;1078	if (shExpMatch(url, "http*://*.softwaredownload.gitbooks.io*")) return strProxy;1079	if (shExpMatch(url, "http*://*.gist.github.com*")) return strProxy;1080	if (shExpMatch(url, "http*://*.cthlo.github.io*")) return strProxy;1081	if (shExpMatch(url, "http*://*.glennhilton.com*")) return strProxy;1082	if (shExpMatch(url, "http*://*.globaljihad.net*")) return strProxy;1083	if (shExpMatch(url, "http*://*.globalmuseumoncommunism.org*")) return strProxy;1084	if (shExpMatch(url, "http*://*.globalrescue.net*")) return strProxy;1085	if (shExpMatch(url, "http*://*.globalvoicesonline.org*")) return strProxy;1086	if (shExpMatch(url, "http*://*.globalvoicesonline.org*")) return strProxy;1087	if (shExpMatch(url, "http*://*.gmbd.cn*")) return strProxy;1088	if (shExpMatch(url, "http*://*.gmhz.org*")) return strProxy;1089	if (shExpMatch(url, "http*://*.gmiddle.com*")) return strProxy;1090	if (shExpMatch(url, "http*://*.gmiddle.net*")) return strProxy;1091	if (shExpMatch(url, "http*://*.gnci.org.hk*")) return strProxy;1092	if (shExpMatch(url, "http*://*.goagent.biz*")) return strProxy;1093	if (shExpMatch(url, "http*://*.goagentplus.com*")) return strProxy;1094	if (shExpMatch(url, "http*://*.godfootsteps.org*")) return strProxy;1095	if (shExpMatch(url, "http*://*.godfootsteps.org*")) return strProxy;1096	if (shExpMatch(url, "http*://*.gokbayrak.com*")) return strProxy;1097	if (shExpMatch(url, "http*://*.goldbetsports.com*")) return strProxy;1098	if (shExpMatch(url, "http*://*.goldenmelody.com.tw*")) return strProxy;1099	if (shExpMatch(url, "http*://*.goldwave.com*")) return strProxy;1100	if (shExpMatch(url, "http*://*.gongmeng.info*")) return strProxy;1101	if (shExpMatch(url, "http*://*.gongm.in*")) return strProxy;1102	if (shExpMatch(url, "http*://*.gongminliliang.com*")) return strProxy;1103	if (shExpMatch(url, "http*://*.gongwt.com*")) return strProxy;1104	if (shExpMatch(url, "http*://*.gongwt.com*")) return strProxy;1105	if (shExpMatch(url, "http*://*.goodreads.com*")) return strProxy;1106	if (shExpMatch(url, "http*://*.goodreads.com*")) return strProxy;1107	if (shExpMatch(url, "http*://*.goodreaders.com*")) return strProxy;1108	if (shExpMatch(url, "http*://*.goodreaders.com*")) return strProxy;1109	if (shExpMatch(url, "http*://*.goofind.com*")) return strProxy;1110	if (shExpMatch(url, "http*://*.googlesile.com*")) return strProxy;1111	if (shExpMatch(url, "http*://*.gopetition.com*")) return strProxy;1112	if (shExpMatch(url, "http*://*.gopetition.com*")) return strProxy;1113	if (shExpMatch(url, "http*://*.gotw.ca*")) return strProxy;1114	if (shExpMatch(url, "http*://*.grandtrial.org*")) return strProxy;1115	if (shExpMatch(url, "http*://*.graphis.ne.jp*")) return strProxy;1116	if (shExpMatch(url, "http*://*.gravatar.com*")) return strProxy;1117	if (shExpMatch(url, "http*://*.greatfirewall.biz*")) return strProxy;1118	if (shExpMatch(url, "http*://*.greatfirewallofchina.net*")) return strProxy;1119	if (shExpMatch(url, "http*://*.greatfirewallofchina.org*")) return strProxy;1120	if (shExpMatch(url, "http*://*.greatfirewallofchina.org*")) return strProxy;1121	if (shExpMatch(url, "http*://*.greenparty.org.tw*")) return strProxy;1122	if (shExpMatch(url, "http*://*.greenpeace.org*")) return strProxy;1123	if (shExpMatch(url, "http*://*.great-firewall.com*")) return strProxy;1124	if (shExpMatch(url, "http*://*.great-roc.org*")) return strProxy;1125	if (shExpMatch(url, "http*://*.greatroc.org*")) return strProxy;1126	if (shExpMatch(url, "http*://*.greatzhonghua.org*")) return strProxy;1127	if (shExpMatch(url, "http*://*.greenpeace.com.tw*")) return strProxy;1128	if (shExpMatch(url, "http*://*.greenvpn.net*")) return strProxy;1129	if (shExpMatch(url, "http*://*.greenvpn.net*")) return strProxy;1130	if (shExpMatch(url, "http*://*.gs-discuss.com*")) return strProxy;1131	if (shExpMatch(url, "http*://*.gtricks.com*")) return strProxy;1132	if (shExpMatch(url, "http*://*.guancha.org*")) return strProxy;1133	if (shExpMatch(url, "http*://*.gun-world.net*")) return strProxy;1134	if (shExpMatch(url, "http*://*.gutteruncensored.com*")) return strProxy;1135	if (shExpMatch(url, "http*://*.gvm.com.tw*")) return strProxy;1136	if (shExpMatch(url, "http*://*.gzm.tv*")) return strProxy;1137	if (shExpMatch(url, "http*://*.gzone-anime.info*")) return strProxy;1138	if (shExpMatch(url, "http*://*.agoogleaday.com*")) return strProxy;1139	if (shExpMatch(url, "http*://*.chromeexperiments.com*")) return strProxy;1140	if (shExpMatch(url, "http*://*.chromercise.com*")) return strProxy;1141	if (shExpMatch(url, "http*://*.data-vocabulary.org*")) return strProxy;1142	if (shExpMatch(url, "http*://*.g.co*")) return strProxy;1143	if (shExpMatch(url, "http*://*.ggpht.com*")) return strProxy;1144	if (shExpMatch(url, "http*://*.gmail.com*")) return strProxy;1145	if (shExpMatch(url, "http*://*.gmodules.com*")) return strProxy;1146	if (shExpMatch(url, "http*://*.goo.gl*")) return strProxy;1147	if (shExpMatch(url, "http*://*.googleapis.com*")) return strProxy;1148	if (shExpMatch(url, "http*://*.googleartproject.com*")) return strProxy;1149	if (shExpMatch(url, "http*://*.googlecode.com*")) return strProxy;1150	if (shExpMatch(url, "http*://*.googlecommerce.com*")) return strProxy;1151	if (shExpMatch(url, "http*://*.googledomains.com*")) return strProxy;1152	if (shExpMatch(url, "http*://*.googleearth.com*")) return strProxy;1153	if (shExpMatch(url, "http*://*.googledrive.com*")) return strProxy;1154	if (shExpMatch(url, "http*://*.googlegroups.com*")) return strProxy;1155	if (shExpMatch(url, "http*://*.googlehosted.com*")) return strProxy;1156	if (shExpMatch(url, "http*://*.googlelabs.com*")) return strProxy;1157	if (shExpMatch(url, "http*://*.googlemail.com*")) return strProxy;1158	if (shExpMatch(url, "http*://*.googleplus.com*")) return strProxy;1159	if (shExpMatch(url, "http*://*.googlesource.com*")) return strProxy;1160	if (shExpMatch(url, "http*://*.googleusercontent.com*")) return strProxy;1161	if (shExpMatch(url, "http*://*.googlevideo.com*")) return strProxy;1162	if (shExpMatch(url, "http*://*.proxy.googlezip.net*")) return strProxy;1163	if (shExpMatch(url, "http*://*.groups.google.cn*")) return strProxy;1164	if (shExpMatch(url, "http*://*.gvt0.com*")) return strProxy;1165	if (shExpMatch(url, "http*://*.gvt1.com*")) return strProxy;1166	if (shExpMatch(url, "http*://*.html5rocks.com*")) return strProxy;1167	if (shExpMatch(url, "http*://*.panoramio.com*")) return strProxy;1168	if (shExpMatch(url, "http*://*.recaptcha.net*")) return strProxy;1169	if (shExpMatch(url, "http*://*.sipml5.org*")) return strProxy;1170	if (shExpMatch(url, "http*://*.appspot.com*")) return strProxy;1171	if (shExpMatch(url, "http*://*.appspot.com*")) return strProxy;1172	if (shExpMatch(url, "http*://*.chinaaid.net*")) return strProxy;1173	if (shExpMatch(url, "http*://*.echofon.com*")) return strProxy;1174	if (shExpMatch(url, "http*://*.golang.org*")) return strProxy;1175	if (shExpMatch(url, "http*://*.greasespot.net*")) return strProxy;1176	if (shExpMatch(url, "http*://*.klip.me*")) return strProxy;1177	if (shExpMatch(url, "http*://*.ub0.cc*")) return strProxy;1178	if (shExpMatch(url, "http*://*.wozy.in*")) return strProxy;1179	if (shExpMatch(url, "http*://*.anti.anti.cnn.googlepages.com*")) return strProxy;1180	if (shExpMatch(url, "http*://*.freegateget.googlepages.com*")) return strProxy;1181	if (shExpMatch(url, "http*://*.myboooks.googlepages.com*")) return strProxy;1182	if (shExpMatch(url, "http*://*.googlevideo.com*")) return strProxy;1183	if (shExpMatch(url, "http*://*.gospelherald.com*")) return strProxy;1184	if (shExpMatch(url, "http*://*.gospelherald.com*")) return strProxy;1185	if (shExpMatch(url, "http*://*.hk.gradconnection.com*")) return strProxy;1186	if (shExpMatch(url, "http*://*.grangorz.org*")) return strProxy;1187	if (shExpMatch(url, "http*://*.graylog2.org*")) return strProxy;1188	if (shExpMatch(url, "http*://*.greatfire.org*")) return strProxy;1189	if (shExpMatch(url, "http*://*.greatfire.org*")) return strProxy;1190	if (shExpMatch(url, "http*://*.greatfirewallofchina.org*")) return strProxy;1191	if (shExpMatch(url, "http*://*.greatroc.tw*")) return strProxy;1192	if (shExpMatch(url, "http*://*.gstatic.com*")) return strProxy;1193	if (shExpMatch(url, "http*://*.guishan.org*")) return strProxy;1194	if (shExpMatch(url, "http*://*.guishan.org*")) return strProxy;1195	if (shExpMatch(url, "http*://*.gunsamerica.com*")) return strProxy;1196	if (shExpMatch(url, "http*://*.gvlib.com*")) return strProxy;1197	if (shExpMatch(url, "http*://*.gyalwarinpoche.com*")) return strProxy;1198	if (shExpMatch(url, "http*://*.h-china.org*")) return strProxy;1199	if (shExpMatch(url, "http*://*.h1n1china.org*")) return strProxy;1200	if (shExpMatch(url, "http*://*.hacken.cc*")) return strProxy;1201	if (shExpMatch(url, "http*://*.hackthatphone.net*")) return strProxy;1202	if (shExpMatch(url, "http*://*.hahlo.com*")) return strProxy;1203	if (shExpMatch(url, "http*://*.hakkatv.org.tw*")) return strProxy;1204	if (shExpMatch(url, "http*://*.bbs.hanminzu.org*")) return strProxy;1205	if (shExpMatch(url, "http*://*.hanunyi.com*")) return strProxy;1206	if (shExpMatch(url, "http*://*.jp.hao123.com*")) return strProxy;1207	if (shExpMatch(url, "http*://*.hardsextube.com*")) return strProxy;1208	if (shExpMatch(url, "http*://*.harunyahya.com*")) return strProxy;1209	if (shExpMatch(url, "http*://*.hasaowall.com*")) return strProxy;1210	if (shExpMatch(url, "http*://*.have8.com*")) return strProxy;1211	if (shExpMatch(url, "http*://*.hdtvb.net*")) return strProxy;1212	if (shExpMatch(url, "http*://*.heartyit.com*")) return strProxy;1213	if (shExpMatch(url, "http*://*.hecaitou.net*")) return strProxy;1214	if (shExpMatch(url, "http*://*.hecaitou.net*")) return strProxy;1215	if (shExpMatch(url, "http*://*.hechaji.com*")) return strProxy;1216	if (shExpMatch(url, "http*://*.hechaji.com*")) return strProxy;1217	if (shExpMatch(url, "http*://*.helplinfen.com*")) return strProxy;1218	if (shExpMatch(url, "http*://*.helloandroid.com*")) return strProxy;1219	if (shExpMatch(url, "http*://*.helloqueer.com*")) return strProxy;1220	if (shExpMatch(url, "http*://*.hellotxt.com*")) return strProxy;1221	if (shExpMatch(url, "http*://*.hellotxt.com*")) return strProxy;1222	if (shExpMatch(url, "http*://*.htxt.it*")) return strProxy;1223	if (shExpMatch(url, "http*://*.hellouk.org*")) return strProxy;1224	if (shExpMatch(url, "http*://*.helpeachpeople.com*")) return strProxy;1225	if (shExpMatch(url, "http*://*.helpeachpeople.com*")) return strProxy;1226	if (shExpMatch(url, "http*://*.helpzhuling.org*")) return strProxy;1227	if (shExpMatch(url, "http*://*.date.fm*")) return strProxy;1228	if (shExpMatch(url, "http*://*.flightcaster.com*")) return strProxy;1229	if (shExpMatch(url, "http*://*.branch.com*")) return strProxy;1230	if (shExpMatch(url, "http*://*.awardwinningfjords.com*")) return strProxy;1231	if (shExpMatch(url, "http*://*.futureme.org*")) return strProxy;1232	if (shExpMatch(url, "http*://*.getcloudapp.com*")) return strProxy;1233	if (shExpMatch(url, "http*://*.cl.ly*")) return strProxy;1234	if (shExpMatch(url, "http*://*.getsmartlinks.com*")) return strProxy;1235	if (shExpMatch(url, "http*://*.git-scm.com*")) return strProxy;1236	if (shExpMatch(url, "http*://*.lesscss.org*")) return strProxy;1237	if (shExpMatch(url, "http*://*.list.ly*")) return strProxy;1238	if (shExpMatch(url, "http*://*.maxgif.com*")) return strProxy;1239	if (shExpMatch(url, "http*://*.overlapr.com*")) return strProxy;1240	if (shExpMatch(url, "http*://*.peerpong.com*")) return strProxy;1241	if (shExpMatch(url, "http*://*.pose.com*")) return strProxy;1242	if (shExpMatch(url, "http*://*.samsoff.es*")) return strProxy;1243	if (shExpMatch(url, "http*://*.sendoid.com*")) return strProxy;1244	if (shExpMatch(url, "http*://*.speckleapp.com*")) return strProxy;1245	if (shExpMatch(url, "http*://*.stuffimreading.net*")) return strProxy;1246	if (shExpMatch(url, "http*://*.tomayko.com*")) return strProxy;1247	if (shExpMatch(url, "http*://*.twt.fm*")) return strProxy;1248	if (shExpMatch(url, "http*://*.views.fm*")) return strProxy;1249	if (shExpMatch(url, "http*://*.heqinglian.net*")) return strProxy;1250	if (shExpMatch(url, "http*://*.here4news.com*")) return strProxy;1251	if (shExpMatch(url, "http*://*.heungkongdiscuss.com*")) return strProxy;1252	if (shExpMatch(url, "http*://*.app.heywire.com*")) return strProxy;1253	if (shExpMatch(url, "http*://*.hgseav.com*")) return strProxy;1254	if (shExpMatch(url, "http*://*.hidden-advent.org*")) return strProxy;1255	if (shExpMatch(url, "http*://*.hidden-advent.org*")) return strProxy;1256	if (shExpMatch(url, "http*://*.hidecloud.com*")) return strProxy;1257	if (shExpMatch(url, "http*://*.hidemyass.com*")) return strProxy;1258	if (shExpMatch(url, "http*://*.hidemyass.com*")) return strProxy;1259	if (shExpMatch(url, "http*://*.hideipvpn.com*")) return strProxy;1260	if (shExpMatch(url, "http*://*.hihiforum.com*")) return strProxy;1261	if (shExpMatch(url, "http*://*.hihiforum.com*")) return strProxy;1262	if (shExpMatch(url, "http*://*.hihistory.net*")) return strProxy;1263	if (shExpMatch(url, "http*://*.higfw.com*")) return strProxy;1264	if (shExpMatch(url, "http*://*.highrockmedia.com*")) return strProxy;1265	if (shExpMatch(url, "http*://*.hiitch.com*")) return strProxy;1266	if (shExpMatch(url, "http*://*.hikinggfw.org*")) return strProxy;1267	if (shExpMatch(url, "http*://*.himemix.com*")) return strProxy;1268	if (shExpMatch(url, "http*://*.himemix.com*")) return strProxy;1269	if (shExpMatch(url, "http*://*.himemix.net*")) return strProxy;1270	if (shExpMatch(url, "http*://*.times.hinet.net*")) return strProxy;1271	if (shExpMatch(url, "http*://*.hjclub.info*")) return strProxy;1272	if (shExpMatch(url, "http*://*.hk-pub.com*")) return strProxy;1273	if (shExpMatch(url, "http*://*.hk-pub.com*")) return strProxy;1274	if (shExpMatch(url, "http*://*.hk32168.com*")) return strProxy;1275	if (shExpMatch(url, "http*://*.hk32168.com*")) return strProxy;1276	if (shExpMatch(url, "http*://*.app.hkatvnews.com*")) return strProxy;1277	if (shExpMatch(url, "http*://*.hkbc.net*")) return strProxy;1278	if (shExpMatch(url, "http*://*.hkbf.org*")) return strProxy;1279	if (shExpMatch(url, "http*://*.hkchurch.org*")) return strProxy;1280	if (shExpMatch(url, "http*://*.hkday.net*")) return strProxy;1281	if (shExpMatch(url, "http*://*.hkdailynews.com.hk*")) return strProxy;1282	if (shExpMatch(url, "http*://*.hkej.com*")) return strProxy;1283	if (shExpMatch(url, "http*://*.hkepc.com*")) return strProxy;1284	if (shExpMatch(url, "http*://*.global.hkepc.com*")) return strProxy;1285	if (shExpMatch(url, "http*://*.hkfront.org*")) return strProxy;1286	if (shExpMatch(url, "http*://*.hkgolden.com*")) return strProxy;1287	if (shExpMatch(url, "http*://*.hkgreenradio.org*")) return strProxy;1288	if (shExpMatch(url, "http*://*.hkheadline.com*")) return strProxy;1289	if (shExpMatch(url, "http*://*.hkheadline.com*")) return strProxy;1290	if (shExpMatch(url, "http*://*.hkhkhk.com*")) return strProxy;1291	if (shExpMatch(url, "http*://*.hkjc.com*")) return strProxy;1292	if (shExpMatch(url, "http*://*.hkjp.org*")) return strProxy;1293	if (shExpMatch(url, "http*://*.hkptu.org*")) return strProxy;1294	if (shExpMatch(url, "http*://*.hkreporter.com*")) return strProxy;1295	if (shExpMatch(url, "http*://*.hkreporter.com*")) return strProxy;1296	if (shExpMatch(url, "http*://*.hkupop.hku.hk*")) return strProxy;1297	if (shExpMatch(url, "http*://*.hkwcc.org.hk*")) return strProxy;1298	if (shExpMatch(url, "http*://*.hkzone.org*")) return strProxy;1299	if (shExpMatch(url, "http*://*.hnjhj.com*")) return strProxy;1300	if (shExpMatch(url, "http*://*.hnjhj.com*")) return strProxy;1301	if (shExpMatch(url, "http*://*.hola.com*")) return strProxy;1302	if (shExpMatch(url, "http*://*.hola.org*")) return strProxy;1303	if (shExpMatch(url, "http*://*.holyspiritspeaks.org*")) return strProxy;1304	if (shExpMatch(url, "http*://*.holyspiritspeaks.org*")) return strProxy;1305	if (shExpMatch(url, "http*://*.derekhsu.homeip.net*")) return strProxy;1306	if (shExpMatch(url, "http*://*.homeservershow.com*")) return strProxy;1307	if (shExpMatch(url, "http*://*.old.honeynet.org*")) return strProxy;1308	if (shExpMatch(url, "http*://*.hongmeimei.com*")) return strProxy;1309	if (shExpMatch(url, "http*://*.hongzhi.li*")) return strProxy;1310	if (shExpMatch(url, "http*://*.hootsuite.com*")) return strProxy;1311	if (shExpMatch(url, "http*://*.hootsuite.com*")) return strProxy;1312	if (shExpMatch(url, "http*://*.globalrescue.hopto.org*")) return strProxy;1313	if (shExpMatch(url, "http*://*.hotpot.hk*")) return strProxy;1314	if (shExpMatch(url, "http*://*.hotshame.com*")) return strProxy;1315	if (shExpMatch(url, "http*://*.hotspotshield.com*")) return strProxy;1316	if (shExpMatch(url, "http*://*.hougaige.com*")) return strProxy;1317	if (shExpMatch(url, "http*://*.howtoforge.com*")) return strProxy;1318	if (shExpMatch(url, "http*://*.hqcdp.org*")) return strProxy;1319	if (shExpMatch(url, "http*://*.hqcdp.org*")) return strProxy;1320	if (shExpMatch(url, "http*://*.hrcir.com*")) return strProxy;1321	if (shExpMatch(url, "http*://*.hrcchina.org*")) return strProxy;1322	if (shExpMatch(url, "http*://*.hrichina.org*")) return strProxy;1323	if (shExpMatch(url, "http*://*.hrichina.org*")) return strProxy;1324	if (shExpMatch(url, "http*://*.hrw.org*")) return strProxy;1325	if (shExpMatch(url, "http*://*.hrw.org*")) return strProxy;1326	if (shExpMatch(url, "http*://*.hsjp.net*")) return strProxy;1327	if (shExpMatch(url, "http*://*.hsselite.com*")) return strProxy;1328	if (shExpMatch(url, "http*://*.htkou.net*")) return strProxy;1329	if (shExpMatch(url, "http*://*.htmldog.com*")) return strProxy;1330	if (shExpMatch(url, "http*://*.huaglad.com*")) return strProxy;1331	if (shExpMatch(url, "http*://*.huanghuagang.org*")) return strProxy;1332	if (shExpMatch(url, "http*://*.huanghuagang.org*")) return strProxy;1333	if (shExpMatch(url, "http*://*.huaren.us*")) return strProxy;1334	if (shExpMatch(url, "http*://*.huaren.us*")) return strProxy;1335	if (shExpMatch(url, "http*://*.huaxia-news.com*")) return strProxy;1336	if (shExpMatch(url, "http*://*.huaxin.ph*")) return strProxy;1337	if (shExpMatch(url, "http*://*.hua-yue.net*")) return strProxy;1338	if (shExpMatch(url, "http*://*.hugoroy.eu*")) return strProxy;1339	if (shExpMatch(url, "http*://*.huhaitai.com*")) return strProxy;1340	if (shExpMatch(url, "http*://*.huhamhire.com*")) return strProxy;1341	if (shExpMatch(url, "http*://*.hung-ya.com*")) return strProxy;1342	if (shExpMatch(url, "http*://*.hungerstrikeforaids.org*")) return strProxy;1343	if (shExpMatch(url, "http*://*.huping.net*")) return strProxy;1344	if (shExpMatch(url, "http*://*.hutianyi.net*")) return strProxy;1345	if (shExpMatch(url, "http*://*.hutong9.net*")) return strProxy;1346	if (shExpMatch(url, "http*://*.hwinfo.com*")) return strProxy;1347	if (shExpMatch(url, "http*://*.hxwq.org*")) return strProxy;1348	if (shExpMatch(url, "http*://*.hypeshell.com*")) return strProxy;1349	if (shExpMatch(url, "http*://*.hyperrate.com*")) return strProxy;1350	if (shExpMatch(url, "http*://*.i-cable.com*")) return strProxy;1351	if (shExpMatch(url, "http*://*.i1.hk*")) return strProxy;1352	if (shExpMatch(url, "http*://*.i2p2.de*")) return strProxy;1353	if (shExpMatch(url, "http*://*.i2runner.com*")) return strProxy;1354	if (shExpMatch(url, "http*://*.iask.ca*")) return strProxy;1355	if (shExpMatch(url, "http*://*.iask.ca*")) return strProxy;1356	if (shExpMatch(url, "http*://*.iask.bz*")) return strProxy;1357	if (shExpMatch(url, "http*://*.iask.bz*")) return strProxy;1358	if (shExpMatch(url, "http*://*.ibiblio.org*")) return strProxy;1359	if (shExpMatch(url, "http*://*.iblogserv-f.net*")) return strProxy;1360	if (shExpMatch(url, "http*://*.cn.ibtimes.com*")) return strProxy;1361	if (shExpMatch(url, "http*://*.blogs.icerocket.com*")) return strProxy;1362	if (shExpMatch(url, "http*://*.icij.org*")) return strProxy;1363	if (shExpMatch(url, "http*://*.icl-fi.org*")) return strProxy;1364	if (shExpMatch(url, "http*://*.iconpaper.org*")) return strProxy;1365	if (shExpMatch(url, "http*://*.icu-project.org*")) return strProxy;1366	if (shExpMatch(url, "http*://*.w.idaiwan.com*")) return strProxy;1367	if (shExpMatch(url, "http*://*.idemocracy.asia*")) return strProxy;1368	if (shExpMatch(url, "http*://*.identi.ca*")) return strProxy;1369	if (shExpMatch(url, "http*://*.identi.ca*")) return strProxy;1370	if (shExpMatch(url, "http*://*.idiomconnection.com*")) return strProxy;1371	if (shExpMatch(url, "http*://*.idlcoyote.com*")) return strProxy;1372	if (shExpMatch(url, "http*://*.idouga.com*")) return strProxy;1373	if (shExpMatch(url, "http*://*.forum.idsam.com*")) return strProxy;1374	if (shExpMatch(url, "http*://*.idv.tw*")) return strProxy;1375	if (shExpMatch(url, "http*://*.ieasynews.net*")) return strProxy;1376	if (shExpMatch(url, "http*://*.ied2k.net*")) return strProxy;1377	if (shExpMatch(url, "http*://*.if.ttt*")) return strProxy;1378	if (shExpMatch(url, "http*://*.ifanqiang.com*")) return strProxy;1379	if (shExpMatch(url, "http*://*.ifanr.com*")) return strProxy;1380	if (shExpMatch(url, "http*://*.ifcss.org*")) return strProxy;1381	if (shExpMatch(url, "http*://*.ifcss.org*")) return strProxy;1382	if (shExpMatch(url, "http*://*.ifjc.org*")) return strProxy;1383	if (shExpMatch(url, "http*://*.ift.tt*")) return strProxy;1384	if (shExpMatch(url, "http*://*.antidrm.hpg.ig.com.br*")) return strProxy;1385	if (shExpMatch(url, "http*://*.igfw.net*")) return strProxy;1386	if (shExpMatch(url, "http*://*.ignitedetroit.net*")) return strProxy;1387	if (shExpMatch(url, "http*://*.igvita.com*")) return strProxy;1388	if (shExpMatch(url, "http*://*.ihakka.net*")) return strProxy;1389	if (shExpMatch(url, "http*://*.iicns.com*")) return strProxy;1390	if (shExpMatch(url, "http*://*.illusionfactory.com*")) return strProxy;1391	if (shExpMatch(url, "http*://*.ilove80.be*")) return strProxy;1392	if (shExpMatch(url, "http*://*.im.tv*")) return strProxy;1393	if (shExpMatch(url, "http*://*.im88.tw*")) return strProxy;1394	if (shExpMatch(url, "http*://*.imageflea.com*")) return strProxy;1395	if (shExpMatch(url, "http*://*.imageshack.us*")) return strProxy;1396	if (shExpMatch(url, "http*://*.imagevenue.com*")) return strProxy;1397	if (shExpMatch(url, "http*://*.imagezilla.net*")) return strProxy;1398	if (shExpMatch(url, "http*://*.imdb.com*")) return strProxy;1399	if (shExpMatch(url, "http*://*.imdb.com*")) return strProxy;1400	if (shExpMatch(url, "http*://*.img.ly*")) return strProxy;1401	if (shExpMatch(url, "http*://*.img.ly*")) return strProxy;1402	if (shExpMatch(url, "http*://*.imkev.com*")) return strProxy;1403	if (shExpMatch(url, "http*://*.imkev.com*")) return strProxy;1404	if (shExpMatch(url, "http*://*.imlive.com*")) return strProxy;1405	if (shExpMatch(url, "http*://*.immigration.gov.tw*")) return strProxy;1406	if (shExpMatch(url, "http*://*.tech2.in.com*")) return strProxy;1407	if (shExpMatch(url, "http*://*.incredibox.fr*")) return strProxy;1408	if (shExpMatch(url, "http*://*.initiativesforchina.org*")) return strProxy;1409	if (shExpMatch(url, "http*://*.inmediahk.net*")) return strProxy;1410	if (shExpMatch(url, "http*://*.inmediahk.net*")) return strProxy;1411	if (shExpMatch(url, "http*://*.innermongolia.org*")) return strProxy;1412	if (shExpMatch(url, "http*://*.instagram.com*")) return strProxy;1413	if (shExpMatch(url, "http*://*.instagram.com*")) return strProxy;1414	if (shExpMatch(url, "http*://*.interfaceaddiction.com*")) return strProxy;1415	if (shExpMatch(url, "http*://*.internationalrivers.org*")) return strProxy;1416	if (shExpMatch(url, "http*://*.internet.org*")) return strProxy;1417	if (shExpMatch(url, "http*://*.internetdefenseleague.org*")) return strProxy;1418	if (shExpMatch(url, "http*://*.internetfreedom.org*")) return strProxy;1419	if (shExpMatch(url, "http*://*.internetpopculture.com*")) return strProxy;1420	if (shExpMatch(url, "http*://*.inxian.com*")) return strProxy;1421	if (shExpMatch(url, "http*://*.inxian.com*")) return strProxy;1422	if (shExpMatch(url, "http*://*.iphone4hongkong.com*")) return strProxy;1423	if (shExpMatch(url, "http*://*.iphonehacks.com*")) return strProxy;1424	if (shExpMatch(url, "http*://*.iphonix.fr*")) return strProxy;1425	if (shExpMatch(url, "http*://*.ipicture.ru*")) return strProxy;1426	if (shExpMatch(url, "http*://*.ipobar.com*")) return strProxy;1427	if (shExpMatch(url, "http*://*.ippotv.com*")) return strProxy;1428	if (shExpMatch(url, "http*://*.iptorrents.com*")) return strProxy;1429	if (shExpMatch(url, "http*://*.ipvanish.com*")) return strProxy;1430	if (shExpMatch(url, "http*://*.iredmail.org*")) return strProxy;1431	if (shExpMatch(url, "http*://*.ironicsoftware.com*")) return strProxy;1432	if (shExpMatch(url, "http*://*.ironbigfools.compython.net*")) return strProxy;1433	if (shExpMatch(url, "http*://*.ironpython.net*")) return strProxy;1434	if (shExpMatch(url, "http*://*.beta.iset.com.tw*")) return strProxy;1435	if (shExpMatch(url, "http*://*.beta.iset.com.tw*")) return strProxy;1436	if (shExpMatch(url, "http*://*.forum.iset.com.tw*")) return strProxy;1437	if (shExpMatch(url, "http*://*.islam.org.hk*")) return strProxy;1438	if (shExpMatch(url, "http*://*.islamicity.com*")) return strProxy;1439	if (shExpMatch(url, "http*://*.isaacmao.com*")) return strProxy;1440	if (shExpMatch(url, "http*://*.!--isaacmao.com*")) return strProxy;1441	if (shExpMatch(url, "http*://*.isgreat.org*")) return strProxy;1442	if (shExpMatch(url, "http*://*.ismprofessional.net*")) return strProxy;1443	if (shExpMatch(url, "http*://*.isohunt.com*")) return strProxy;1444	if (shExpMatch(url, "http*://*.israbox.com*")) return strProxy;1445	if (shExpMatch(url, "http*://*.blog.istef.info*")) return strProxy;1446	if (shExpMatch(url, "http*://*.istockphoto.com*")) return strProxy;1447	if (shExpMatch(url, "http*://*.isunaffairs.com*")) return strProxy;1448	if (shExpMatch(url, "http*://*.isuntv.com*")) return strProxy;1449	if (shExpMatch(url, "http*://*.itaboo.info*")) return strProxy;1450	if (shExpMatch(url, "http*://*.itaboo.info*")) return strProxy;1451	if (shExpMatch(url, "http*://*.download.ithome.com.tw*")) return strProxy;1452	if (shExpMatch(url, "http*://*.ithelp.ithome.com.tw*")) return strProxy;1453	if (shExpMatch(url, "http*://*.itshidden.com*")) return strProxy;1454	if (shExpMatch(url, "http*://*.itweet.net*")) return strProxy;1455	if (shExpMatch(url, "http*://*.itweet.net*")) return strProxy;1456	if (shExpMatch(url, "http*://*.iu45.com*")) return strProxy;1457	if (shExpMatch(url, "http*://*.iuhrdf.org*")) return strProxy;1458	if (shExpMatch(url, "http*://*.iverycd.com*")) return strProxy;1459	if (shExpMatch(url, "http*://*.lvv2.com*")) return strProxy;1460	if (shExpMatch(url, "http*://*.ixquick.com*")) return strProxy;1461	if (shExpMatch(url, "http*://*.izaobao.us*")) return strProxy;1462	if (shExpMatch(url, "http*://*.gmozomg.izihost.org*")) return strProxy;1463	if (shExpMatch(url, "http*://*.izles.net*")) return strProxy;1464	if (shExpMatch(url, "http*://*.j.mp*")) return strProxy;1465	if (shExpMatch(url, "http*://*.blog.jackjia.com*")) return strProxy;1466	if (shExpMatch(url, "http*://*.japan-whores.com*")) return strProxy;1467	if (shExpMatch(url, "http*://*.javbus.com*")) return strProxy;1468	if (shExpMatch(url, "http*://*.jbtalks.cc*")) return strProxy;1469	if (shExpMatch(url, "http*://*.jbtalks.com*")) return strProxy;1470	if (shExpMatch(url, "http*://*.jbtalks.my*")) return strProxy;1471	if (shExpMatch(url, "http*://*.jeanyim.com*")) return strProxy;1472	if (shExpMatch(url, "http*://*.jgoodies.com*")) return strProxy;1473	if (shExpMatch(url, "http*://*.jiaoyou8.com*")) return strProxy;1474	if (shExpMatch(url, "http*://*.jiehua.cz*")) return strProxy;1475	if (shExpMatch(url, "http*://*.hk.jiepang.com*")) return strProxy;1476	if (shExpMatch(url, "http*://*.tw.jiepang.com*")) return strProxy;1477	if (shExpMatch(url, "http*://*.jieshibaobao.com*")) return strProxy;1478	if (shExpMatch(url, "http*://*.jinbushe.org*")) return strProxy;1479	if (shExpMatch(url, "http*://*.jinbushe.org*")) return strProxy;1480	if (shExpMatch(url, "http*://*.zhao.jinhai.de*")) return strProxy;1481	if (shExpMatch(url, "http*://*.jingpin.org*")) return strProxy;1482	if (shExpMatch(url, "http*://*.jingpin.org*")) return strProxy;1483	if (shExpMatch(url, "http*://*.ac.jiruan.net*")) return strProxy;1484	if (shExpMatch(url, "http*://*.jitouch.com*")) return strProxy;1485	if (shExpMatch(url, "http*://*.jkforum.net*")) return strProxy;1486	if (shExpMatch(url, "http*://*.research.jmsc.hku.hk*")) return strProxy;1487	if (shExpMatch(url, "http*://*.joachims.org*")) return strProxy;1488	if (shExpMatch(url, "http*://*.jobso.tv*")) return strProxy;1489	if (shExpMatch(url, "http*://*.joeedelman.com*")) return strProxy;1490	if (shExpMatch(url, "http*://*.journalofdemocracy.org*")) return strProxy;1491	if (shExpMatch(url, "http*://*.jpopforum.net*")) return strProxy;1492	if (shExpMatch(url, "http*://*.juliereyc.com*")) return strProxy;1493	if (shExpMatch(url, "http*://*.junauza.com*")) return strProxy;1494	if (shExpMatch(url, "http*://*.junefourth-20.net*")) return strProxy;1495	if (shExpMatch(url, "http*://*.junefourth-20.net*")) return strProxy;1496	if (shExpMatch(url, "http*://*.justfreevpn.com*")) return strProxy;1497	if (shExpMatch(url, "http*://*.justtristan.com*")) return strProxy;1498	if (shExpMatch(url, "http*://*.juziyue.com*")) return strProxy;1499	if (shExpMatch(url, "http*://*.juziyue.com*")) return strProxy;1500	if (shExpMatch(url, "http*://*.jwmusic.org*")) return strProxy;1501	if (shExpMatch(url, "http*://*.jyxf.net*")) return strProxy;1502	if (shExpMatch(url, "http*://*.ka-wai.com*")) return strProxy;1503	if (shExpMatch(url, "http*://*.kagyuoffice.org.tw*")) return strProxy;1504	if (shExpMatch(url, "http*://*.kagyuoffice.org.tw*")) return strProxy;1505	if (shExpMatch(url, "http*://*.kaiyuan.de*")) return strProxy;1506	if (shExpMatch(url, "http*://*.kakao.com*")) return strProxy;1507	if (shExpMatch(url, "http*://*.kanzhongguo.com*")) return strProxy;1508	if (shExpMatch(url, "http*://*.kanzhongguo.eu*")) return strProxy;1509	if (shExpMatch(url, "http*://*.karayou.com*")) return strProxy;1510	if (shExpMatch(url, "http*://*.kcsoftwares.com*")) return strProxy;1511	if (shExpMatch(url, "http*://*.kechara.com*")) return strProxy;1512	if (shExpMatch(url, "http*://*.keepandshare.com*")) return strProxy;1513	if (shExpMatch(url, "http*://*.kendincos.net*")) return strProxy;1514	if (shExpMatch(url, "http*://*.kenengba.com*")) return strProxy;1515	if (shExpMatch(url, "http*://*.kenengba.com*")) return strProxy;1516	if (shExpMatch(url, "http*://*.keontech.net*")) return strProxy;1517	if (shExpMatch(url, "http*://*.wiki.keso.cn*")) return strProxy;1518	if (shExpMatch(url, "http*://*.khmusic.com.tw*")) return strProxy;1519	if (shExpMatch(url, "http*://*.bbs.kimy.com.tw*")) return strProxy;1520	if (shExpMatch(url, "http*://*.kingdomsalvation.org*")) return strProxy;1521	if (shExpMatch(url, "http*://*.kinghost.com*")) return strProxy;1522	if (shExpMatch(url, "http*://*.kingstone.com.tw*")) return strProxy;1523	if (shExpMatch(url, "http*://*.killwall.com*")) return strProxy;1524	if (shExpMatch(url, "http*://*.killwall.com*")) return strProxy;1525	if (shExpMatch(url, "http*://*.kissbbao.cn*")) return strProxy;1526	if (shExpMatch(url, "http*://*.knowledgerush.com*")) return strProxy;1527	if (shExpMatch(url, "http*://*.kodingen.com*")) return strProxy;1528	if (shExpMatch(url, "http*://*.kompozer.net*")) return strProxy;1529	if (shExpMatch(url, "http*://*.koolsolutions.com*")) return strProxy;1530	if (shExpMatch(url, "http*://*.koornk.com*")) return strProxy;1531	if (shExpMatch(url, "http*://*.koornk.com*")) return strProxy;1532	if (shExpMatch(url, "http*://*.kui.name*")) return strProxy;1533	if (shExpMatch(url, "http*://*.kun.im*")) return strProxy;1534	if (shExpMatch(url, "http*://*.kurashsultan.com*")) return strProxy;1535	if (shExpMatch(url, "http*://*.kurtmunger.com*")) return strProxy;1536	if (shExpMatch(url, "http*://*.kusocity.com*")) return strProxy;1537	if (shExpMatch(url, "http*://*.kwcg.ca*")) return strProxy;1538	if (shExpMatch(url, "http*://*.kwongwah.com.my*")) return strProxy;1539	if (shExpMatch(url, "http*://*.kyohk.net*")) return strProxy;1540	if (shExpMatch(url, "http*://*.kzeng.info*")) return strProxy;1541	if (shExpMatch(url, "http*://*.kzeng.info*")) return strProxy;1542	if (shExpMatch(url, "http*://*.la-forum.org*")) return strProxy;1543	if (shExpMatch(url, "http*://*.ladbrokes.com*")) return strProxy;1544	if (shExpMatch(url, "http*://*.labiennale.org*")) return strProxy;1545	if (shExpMatch(url, "http*://*.lagranepoca.com*")) return strProxy;1546	if (shExpMatch(url, "http*://*.lalulalu.com*")) return strProxy;1547	if (shExpMatch(url, "http*://*.lamenhu.com*")) return strProxy;1548	if (shExpMatch(url, "http*://*.laogai.org*")) return strProxy;1549	if (shExpMatch(url, "http*://*.laogai.org*")) return strProxy;1550	if (shExpMatch(url, "http*://*.laomiu.com*")) return strProxy;1551	if (shExpMatch(url, "http*://*.laoyang.info*")) return strProxy;1552	if (shExpMatch(url, "http*://*.laoyang.info*")) return strProxy;1553	if (shExpMatch(url, "http*://*.laptoplockdown.com*")) return strProxy;1554	if (shExpMatch(url, "http*://*.laqingdan.net*")) return strProxy;1555	if (shExpMatch(url, "http*://*.larsgeorge.com*")) return strProxy;1556	if (shExpMatch(url, "http*://*.lastfm.es*")) return strProxy;1557	if (shExpMatch(url, "http*://*.latelinenews.com*")) return strProxy;1558	if (shExpMatch(url, "http*://*.lazarsearlymusic.com*")) return strProxy;1559	if (shExpMatch(url, "http*://*.leecheukyan.org*")) return strProxy;1560	if (shExpMatch(url, "http*://*.lematin.ch*")) return strProxy;1561	if (shExpMatch(url, "http*://*.lemonde.fr*")) return strProxy;1562	if (shExpMatch(url, "http*://*.lenwhite.com*")) return strProxy;1563	if (shExpMatch(url, "http*://*.lerosua.org*")) return strProxy;1564	if (shExpMatch(url, "http*://*.lerosua.org*")) return strProxy;1565	if (shExpMatch(url, "http*://*.blog.lester850.info*")) return strProxy;1566	if (shExpMatch(url, "http*://*.lesoir.be*")) return strProxy;1567	if (shExpMatch(url, "http*://*.letscorp.net*")) return strProxy;1568	if (shExpMatch(url, "http*://*.letscorp.net*")) return strProxy;1569	if (shExpMatch(url, "http*://*.liansi.org*")) return strProxy;1570	if (shExpMatch(url, "http*://*.lianyue.net*")) return strProxy;1571	if (shExpMatch(url, "http*://*.liaowangxizang.net*")) return strProxy;1572	if (shExpMatch(url, "http*://*.liaowangxizang.net*")) return strProxy;1573	if (shExpMatch(url, "http*://*.liberal.org.hk*")) return strProxy;1574	if (shExpMatch(url, "http*://*.libertytimes.com.tw*")) return strProxy;1575	if (shExpMatch(url, "http*://*.lidecheng.com*")) return strProxy;1576	if (shExpMatch(url, "http*://*.limiao.net*")) return strProxy;1577	if (shExpMatch(url, "http*://*.abitno.linpie.com*")) return strProxy;1578	if (shExpMatch(url, "http*://*.line.me*")) return strProxy;1579	if (shExpMatch(url, "http*://*.linglingfa.com*")) return strProxy;1580	if (shExpMatch(url, "http*://*.lingvodics.com*")) return strProxy;1581	if (shExpMatch(url, "http*://*.linkideo.com*")) return strProxy;1582	if (shExpMatch(url, "http*://*.api.linksalpha.com*")) return strProxy;1583	if (shExpMatch(url, "http*://*.apidocs.linksalpha.com*")) return strProxy;1584	if (shExpMatch(url, "http*://*.linksalpha.com*")) return strProxy;1585	if (shExpMatch(url, "http*://*.help.linksalpha.com*")) return strProxy;1586	if (shExpMatch(url, "http*://*.linux-engineer.net*")) return strProxy;1587	if (shExpMatch(url, "http*://*.linuxconfig.org*")) return strProxy;1588	if (shExpMatch(url, "http*://*.linuxreviews.org*")) return strProxy;1589	if (shExpMatch(url, "http*://*.linuxtoy.org*")) return strProxy;1590	if (shExpMatch(url, "http*://*.lipuman.com*")) return strProxy;1591	if (shExpMatch(url, "http*://*.listentoyoutube.com*")) return strProxy;1592	if (shExpMatch(url, "http*://*.listorious.com*")) return strProxy;1593	if (shExpMatch(url, "http*://*.liudejun.com*")) return strProxy;1594	if (shExpMatch(url, "http*://*.liuhanyu.com*")) return strProxy;1595	if (shExpMatch(url, "http*://*.liujianshu.com*")) return strProxy;1596	if (shExpMatch(url, "http*://*.liujianshu.com*")) return strProxy;1597	if (shExpMatch(url, "http*://*.liuxiaotong.com*")) return strProxy;1598	if (shExpMatch(url, "http*://*.liuxiaotong.com*")) return strProxy;1599	if (shExpMatch(url, "http*://*.liu.lu*")) return strProxy;1600	if (shExpMatch(url, "http*://*.liveleak.com*")) return strProxy;1601	if (shExpMatch(url, "http*://*.liveleak.com*")) return strProxy;1602	if (shExpMatch(url, "http*://*.livestation.com*")) return strProxy;1603	if (shExpMatch(url, "http*://*.livestream.com*")) return strProxy;1604	if (shExpMatch(url, "http*://*.livestream.com*")) return strProxy;1605	if (shExpMatch(url, "http*://*.livingonline.us*")) return strProxy;1606	if (shExpMatch(url, "http*://*.livingstream.com*")) return strProxy;1607	if (shExpMatch(url, "http*://*.livevideo.com*")) return strProxy;1608	if (shExpMatch(url, "http*://*.livevideo.com*")) return strProxy;1609	if (shExpMatch(url, "http*://*.lizhizhuangbi.com*")) return strProxy;1610	if (shExpMatch(url, "http*://*.lkcn.net*")) return strProxy;1611	if (shExpMatch(url, "http*://*.localpresshk.com*")) return strProxy;1612	if (shExpMatch(url, "http*://*.lockdown.com*")) return strProxy;1613	if (shExpMatch(url, "http*://*.lockestek.com*")) return strProxy;1614	if (shExpMatch(url, "http*://*.logbot.net*")) return strProxy;1615	if (shExpMatch(url, "http*://*.logiqx.com*")) return strProxy;1616	if (shExpMatch(url, "http*://*.logmike.com*")) return strProxy;1617	if (shExpMatch(url, "http*://*.longhair.hk*")) return strProxy;1618	if (shExpMatch(url, "http*://*.longtermly.net*")) return strProxy;1619	if (shExpMatch(url, "http*://*.lookatgame.com*")) return strProxy;1620	if (shExpMatch(url, "http*://*.lookatgame.com*")) return strProxy;1621	if (shExpMatch(url, "http*://*.lookingglasstheatre.org*")) return strProxy;1622	if (shExpMatch(url, "http*://*.lookpic.com*")) return strProxy;1623	if (shExpMatch(url, "http*://*.looktoronto.com*")) return strProxy;1624	if (shExpMatch(url, "http*://*.lotuslight.org.tw*")) return strProxy;1625	if (shExpMatch(url, "http*://*.hkreporter.loved.hk*")) return strProxy;1626	if (shExpMatch(url, "http*://*.lrfz.com*")) return strProxy;1627	if (shExpMatch(url, "http*://*.lrip.org*")) return strProxy;1628	if (shExpMatch(url, "http*://*.lsd.org.hk*")) return strProxy;1629	if (shExpMatch(url, "http*://*.lsd.org.hk*")) return strProxy;1630	if (shExpMatch(url, "http*://*.lsforum.net*")) return strProxy;1631	if (shExpMatch(url, "http*://*.lsm.org*")) return strProxy;1632	if (shExpMatch(url, "http*://*.lsmchinese.org*")) return strProxy;1633	if (shExpMatch(url, "http*://*.lsmkorean.org*")) return strProxy;1634	if (shExpMatch(url, "http*://*.ltn.com.tw*")) return strProxy;1635	if (shExpMatch(url, "http*://*.lupm.org*")) return strProxy;1636	if (shExpMatch(url, "http*://*.lupm.org*")) return strProxy;1637	if (shExpMatch(url, "http*://*.lushstories.com*")) return strProxy;1638	if (shExpMatch(url, "http*://*.lvhai.org*")) return strProxy;1639	if (shExpMatch(url, "http*://*.lvhai.org*")) return strProxy;1640	if (shExpMatch(url, "http*://*.mh4u.org*")) return strProxy;1641	if (shExpMatch(url, "http*://*.m-team.cc*")) return strProxy;1642	if (shExpMatch(url, "http*://*.macrovpn.com*")) return strProxy;1643	if (shExpMatch(url, "http*://*.mad-ar.ch*")) return strProxy;1644	if (shExpMatch(url, "http*://*.maiplus.com*")) return strProxy;1645	if (shExpMatch(url, "http*://*.marc.info*")) return strProxy;1646	if (shExpMatch(url, "http*://*.marguerite.su*")) return strProxy;1647	if (shExpMatch(url, "http*://*.martincartoons.com*")) return strProxy;1648	if (shExpMatch(url, "http*://*.maiio.net*")) return strProxy;1649	if (shExpMatch(url, "http*://*.mail-archive.com*")) return strProxy;1650	if (shExpMatch(url, "http*://*.malaysiakini.com*")) return strProxy;1651	if (shExpMatch(url, "http*://*.makemymood.com*")) return strProxy;1652	if (shExpMatch(url, "http*://*.marines.mil*")) return strProxy;1653	if (shExpMatch(url, "http*://*.markmail.org*")) return strProxy;1654	if (shExpMatch(url, "http*://*.martau.com*")) return strProxy;1655	if (shExpMatch(url, "http*://*.maruta.be*")) return strProxy;1656	if (shExpMatch(url, "http*://*.marxist.com*")) return strProxy;1657	if (shExpMatch(url, "http*://*.marxist.net*")) return strProxy;1658	if (shExpMatch(url, "http*://*.marxists.org*")) return strProxy;1659	if (shExpMatch(url, "http*://*.matainja.com*")) return strProxy;1660	if (shExpMatch(url, "http*://*.mathiew-badimon.com*")) return strProxy;1661	if (shExpMatch(url, "http*://*.matsushimakaede.com*")) return strProxy;1662	if (shExpMatch(url, "http*://*.maturejp.com*")) return strProxy;1663	if (shExpMatch(url, "http*://*.mayimayi.com*")) return strProxy;1664	if (shExpMatch(url, "http*://*.mcadforums.com*")) return strProxy;1665	if (shExpMatch(url, "http*://*.mcfog.com*")) return strProxy;1666	if (shExpMatch(url, "http*://*.md-t.org*")) return strProxy;1667	if (shExpMatch(url, "http*://*.md-t.org*")) return strProxy;1668	if (shExpMatch(url, "http*://*.mediafire.com*")) return strProxy;1669	if (shExpMatch(url, "http*://*.meetup.com*")) return strProxy;1670	if (shExpMatch(url, "http*://*.mefeedia.com*")) return strProxy;1671	if (shExpMatch(url, "http*://*.megaporn.com*")) return strProxy;1672	if (shExpMatch(url, "http*://*.megarotic.com*")) return strProxy;1673	if (shExpMatch(url, "http*://*.megavideo.com*")) return strProxy;1674	if (shExpMatch(url, "http*://*.megurineluka.com*")) return strProxy;1675	if (shExpMatch(url, "http*://*.meirixiaochao.com*")) return strProxy;1676	if (shExpMatch(url, "http*://*.melon-peach.com*")) return strProxy;1677	if (shExpMatch(url, "http*://*.memedia.cn*")) return strProxy;1678	if (shExpMatch(url, "http*://*.memehk.com*")) return strProxy;1679	if (shExpMatch(url, "http*://*.memehk.com*")) return strProxy;1680	if (shExpMatch(url, "http*://*.memrijttm.org*")) return strProxy;1681	if (shExpMatch(url, "http*://*.merit-times.com.tw*")) return strProxy;1682	if (shExpMatch(url, "http*://*.mesotw.com*")) return strProxy;1683	if (shExpMatch(url, "http*://*.metacafe.com*")) return strProxy;1684	if (shExpMatch(url, "http*://*.meteorshowersonline.com*")) return strProxy;1685	if (shExpMatch(url, "http*://*.metro.taipei*")) return strProxy;1686	if (shExpMatch(url, "http*://*.metrolife.ca*")) return strProxy;1687	if (shExpMatch(url, "http*://*.mgoon.com*")) return strProxy;1688	if (shExpMatch(url, "http*://*.mgstage.com*")) return strProxy;1689	if (shExpMatch(url, "http*://*.mhradio.org*")) return strProxy;1690	if (shExpMatch(url, "http*://*.michaelanti.com*")) return strProxy;1691	if (shExpMatch(url, "http*://*.michaelmarketl.com*")) return strProxy;1692	if (shExpMatch(url, "http*://*.middle-way.net*")) return strProxy;1693	if (shExpMatch(url, "http*://*.mihk.hk*")) return strProxy;1694	if (shExpMatch(url, "http*://*.mihua.org*")) return strProxy;1695	if (shExpMatch(url, "http*://*.mimivip.com*")) return strProxy;1696	if (shExpMatch(url, "http*://*.minghui.org*")) return strProxy;1697	if (shExpMatch(url, "http*://*.minghui.org*")) return strProxy;1698	if (shExpMatch(url, "http*://*.minghui-a.org*")) return strProxy;1699	if (shExpMatch(url, "http*://*.minghui-b.org*")) return strProxy;1700	if (shExpMatch(url, "http*://*.minghui-school.org*")) return strProxy;1701	if (shExpMatch(url, "http*://*.mingjinglishi.com*")) return strProxy;1702	if (shExpMatch(url, "http*://*.mingjinglishi.com*")) return strProxy;1703	if (shExpMatch(url, "http*://*.mingjingnews.com*")) return strProxy;1704	if (shExpMatch(url, "http*://*.mingpao.com*")) return strProxy;1705	if (shExpMatch(url, "http*://*.mingpaocanada.com*")) return strProxy;1706	if (shExpMatch(url, "http*://*.mingpaomonthly.com*")) return strProxy;1707	if (shExpMatch(url, "http*://*.mingpaonews.com*")) return strProxy;1708	if (shExpMatch(url, "http*://*.mingpaony.com*")) return strProxy;1709	if (shExpMatch(url, "http*://*.mingpaosf.com*")) return strProxy;1710	if (shExpMatch(url, "http*://*.mingpaotor.com*")) return strProxy;1711	if (shExpMatch(url, "http*://*.mingpaovan.com*")) return strProxy;1712	if (shExpMatch(url, "http*://*.mininova.org*")) return strProxy;1713	if (shExpMatch(url, "http*://*.mimivv.com*")) return strProxy;1714	if (shExpMatch(url, "http*://*.minzhuhua.net*")) return strProxy;1715	if (shExpMatch(url, "http*://*.minzhuhua.net*")) return strProxy;1716	if (shExpMatch(url, "http*://*.minzhuzhanxian.com*")) return strProxy;1717	if (shExpMatch(url, "http*://*.minzhuzhongguo.org*")) return strProxy;1718	if (shExpMatch(url, "http*://*.miroguide.com*")) return strProxy;1719	if (shExpMatch(url, "http*://*.mirrorbooks.com*")) return strProxy;1720	if (shExpMatch(url, "http*://*.mitbbs.com*")) return strProxy;1721	if (shExpMatch(url, "http*://*.mixero.com*")) return strProxy;1722	if (shExpMatch(url, "http*://*.mixero.com*")) return strProxy;1723	if (shExpMatch(url, "http*://*.mixpod.com*")) return strProxy;1724	if (shExpMatch(url, "http*://*.mixx.com*")) return strProxy;1725	if (shExpMatch(url, "http*://*.mixx.com*")) return strProxy;1726	if (shExpMatch(url, "http*://*.mizzmona.com*")) return strProxy;1727	if (shExpMatch(url, "http*://*.mk5000.com*")) return strProxy;1728	if (shExpMatch(url, "http*://*.mlcool.com*")) return strProxy;1729	if (shExpMatch(url, "http*://*.mmaaxx.com*")) return strProxy;1730	if (shExpMatch(url, "http*://*.plurktop.mmdays.com*")) return strProxy;1731	if (shExpMatch(url, "http*://*.mmmca.com*")) return strProxy;1732	if (shExpMatch(url, "http*://*.mobatek.net*")) return strProxy;1733	if (shExpMatch(url, "http*://*.mobile01.com*")) return strProxy;1734	if (shExpMatch(url, "http*://*.mobileways.de*")) return strProxy;1735	if (shExpMatch(url, "http*://*.mobypicture.com*")) return strProxy;1736	if (shExpMatch(url, "http*://*.moby.to*")) return strProxy;1737	if (shExpMatch(url, "http*://*.mrdoob.com*")) return strProxy;1738	if (shExpMatch(url, "http*://*.wiki.moegirl.org*")) return strProxy;1739	if (shExpMatch(url, "http*://*.mog.com*")) return strProxy;1740	if (shExpMatch(url, "http*://*.molihua.org*")) return strProxy;1741	if (shExpMatch(url, "http*://*.mondex.org*")) return strProxy;1742	if (shExpMatch(url, "http*://*.monlamit.org*")) return strProxy;1743	if (shExpMatch(url, "http*://*.c1522.mooo.com*")) return strProxy;1744	if (shExpMatch(url, "http*://*.monitorchina.org*")) return strProxy;1745	if (shExpMatch(url, "http*://*.bbs.morbell.com*")) return strProxy;1746	if (shExpMatch(url, "http*://*.morningsun.org*")) return strProxy;1747	if (shExpMatch(url, "http*://*.movabletype.com*")) return strProxy;1748	if (shExpMatch(url, "http*://*.moviefap.com*")) return strProxy;1749	if (shExpMatch(url, "http*://*.moztw.org*")) return strProxy;1750	if (shExpMatch(url, "http*://*.mp3ye.eu*")) return strProxy;1751	if (shExpMatch(url, "http*://*.mpettis.com*")) return strProxy;1752	if (shExpMatch(url, "http*://*.mpfinance.com*")) return strProxy;1753	if (shExpMatch(url, "http*://*.mpinews.com*")) return strProxy;1754	if (shExpMatch(url, "http*://*.mrtweet.com*")) return strProxy;1755	if (shExpMatch(url, "http*://*.mrtweet.com*")) return strProxy;1756	if (shExpMatch(url, "http*://*.news.msn.com.tw*")) return strProxy;1757	if (shExpMatch(url, "http*://*.msguancha.com*")) return strProxy;1758	if (shExpMatch(url, "http*://*.mthruf.com*")) return strProxy;1759	if (shExpMatch(url, "http*://*.multiply.com*")) return strProxy;1760	if (shExpMatch(url, "http*://*.multiproxy.org*")) return strProxy;1761	if (shExpMatch(url, "http*://*.forum.mymaji.com*")) return strProxy;1762	if (shExpMatch(url, "http*://*.multiupload.com*")) return strProxy;1763	if (shExpMatch(url, "http*://*.muouju.com*")) return strProxy;1764	if (shExpMatch(url, "http*://*.muselinks.co.jp*")) return strProxy;1765	if (shExpMatch(url, "http*://*.muzi.com*")) return strProxy;1766	if (shExpMatch(url, "http*://*.muzi.net*")) return strProxy;1767	if (shExpMatch(url, "http*://*.mx981.com*")) return strProxy;1768	if (shExpMatch(url, "http*://*.my-proxy.com*")) return strProxy;1769	if (shExpMatch(url, "http*://*.forum.my903.com*")) return strProxy;1770	if (shExpMatch(url, "http*://*.myactimes.com*")) return strProxy;1771	if (shExpMatch(url, "http*://*.my-addr.com*")) return strProxy;1772	if (shExpMatch(url, "http*://*.myaudiocast.com*")) return strProxy;1773	if (shExpMatch(url, "http*://*.myav.com.tw*")) return strProxy;1774	if (shExpMatch(url, "http*://*.bbs.mychat.to*")) return strProxy;1775	if (shExpMatch(url, "http*://*.mychinamyhome.com*")) return strProxy;1776	if (shExpMatch(url, "http*://*.mychinamyhome.com*")) return strProxy;1777	if (shExpMatch(url, "http*://*.mycould.com*")) return strProxy;1778	if (shExpMatch(url, "http*://*.myeclipseide.com*")) return strProxy;1779	if (shExpMatch(url, "http*://*.myforum.com.hk*")) return strProxy;1780	if (shExpMatch(url, "http*://*.myforum.com.hk*")) return strProxy;1781	if (shExpMatch(url, "http*://*.myforum.com.uk*")) return strProxy;1782	if (shExpMatch(url, "http*://*.myfreshnet.com*")) return strProxy;1783	if (shExpMatch(url, "http*://*.myparagliding.com*")) return strProxy;1784	if (shExpMatch(url, "http*://*.mypopescu.com*")) return strProxy;1785	if (shExpMatch(url, "http*://*.mysinablog.com*")) return strProxy;1786	if (shExpMatch(url, "http*://*.myspace.com*")) return strProxy;1787	if (shExpMatch(url, "http*://*.naacoalition.org*")) return strProxy;1788	if (shExpMatch(url, "http*://*.old.nabble.com*")) return strProxy;1789	if (shExpMatch(url, "http*://*.naitik.net*")) return strProxy;1790	if (shExpMatch(url, "http*://*.namsisi.com*")) return strProxy;1791	if (shExpMatch(url, "http*://*.nanyang.com*")) return strProxy;1792	if (shExpMatch(url, "http*://*.nanyang.com*")) return strProxy;1793	if (shExpMatch(url, "http*://*.nanyangpost.com*")) return strProxy;1794	if (shExpMatch(url, "http*://*.nanyangpost.com*")) return strProxy;1795	if (shExpMatch(url, "http*://*.nanzao.com*")) return strProxy;1796	if (shExpMatch(url, "http*://*.jpl.nasa.gov*")) return strProxy;1797	if (shExpMatch(url, "http*://*.pds.nasa.gov*")) return strProxy;1798	if (shExpMatch(url, "http*://*.navicat.com*")) return strProxy;1799	if (shExpMatch(url, "http*://*.nakido.com*")) return strProxy;1800	if (shExpMatch(url, "http*://*.nakido.com*")) return strProxy;1801	if (shExpMatch(url, "http*://*.naol.ca*")) return strProxy;1802	if (shExpMatch(url, "http*://*.cyberghost.natado.com*")) return strProxy;1803	if (shExpMatch(url, "http*://*.national-lottery.co.uk*")) return strProxy;1804	if (shExpMatch(url, "http*://*.navy.mil*")) return strProxy;1805	if (shExpMatch(url, "http*://*.nccwatch.org.tw*")) return strProxy;1806	if (shExpMatch(url, "http*://*.nch.com.tw*")) return strProxy;1807	if (shExpMatch(url, "http*://*.ncn.org*")) return strProxy;1808	if (shExpMatch(url, "http*://*.ncn.org*")) return strProxy;1809	if (shExpMatch(url, "http*://*.etools.ncol.com*")) return strProxy;1810	if (shExpMatch(url, "http*://*.nde.de*")) return strProxy;1811	if (shExpMatch(url, "http*://*.ndr.de*")) return strProxy;1812	if (shExpMatch(url, "http*://*.ned.org*")) return strProxy;1813	if (shExpMatch(url, "http*://*.nekoslovakia.net*")) return strProxy;1814	if (shExpMatch(url, "http*://*.t.neolee.cn*")) return strProxy;1815	if (shExpMatch(url, "http*://*.netcolony.com*")) return strProxy;1816	if (shExpMatch(url, "http*://*.bolin.netfirms.com*")) return strProxy;1817	if (shExpMatch(url, "http*://*.zh.netlog.com*")) return strProxy;1818	if (shExpMatch(url, "http*://*.netme.cc*")) return strProxy;1819	if (shExpMatch(url, "http*://*.networkedblogs.com*")) return strProxy;1820	if (shExpMatch(url, "http*://*.neverforget8964.org*")) return strProxy;1821	if (shExpMatch(url, "http*://*.new-3lunch.net*")) return strProxy;1822	if (shExpMatch(url, "http*://*.new-akiba.com*")) return strProxy;1823	if (shExpMatch(url, "http*://*.newcenturymc.com*")) return strProxy;1824	if (shExpMatch(url, "http*://*.newcenturymc.com*")) return strProxy;1825	if (shExpMatch(url, "http*://*.newcenturynews.com*")) return strProxy;1826	if (shExpMatch(url, "http*://*.newchen.com*")) return strProxy;1827	if (shExpMatch(url, "http*://*.newchen.com*")) return strProxy;1828	if (shExpMatch(url, "http*://*.newgrounds.com*")) return strProxy;1829	if (shExpMatch(url, "http*://*.newlandmagazine.com.au*")) return strProxy;1830	if (shExpMatch(url, "http*://*.news100.com.tw*")) return strProxy;1831	if (shExpMatch(url, "http*://*.newscn.org*")) return strProxy;1832	if (shExpMatch(url, "http*://*.newscn.org*")) return strProxy;1833	if (shExpMatch(url, "http*://*.newsminer.com*")) return strProxy;1834	if (shExpMatch(url, "http*://*.newspeak.cc*")) return strProxy;1835	if (shExpMatch(url, "http*://*.newsancai.com*")) return strProxy;1836	if (shExpMatch(url, "http*://*.newstapa.org*")) return strProxy;1837	if (shExpMatch(url, "http*://*.newtaiwan.com.tw*")) return strProxy;1838	if (shExpMatch(url, "http*://*.newtalk.tw*")) return strProxy;1839	if (shExpMatch(url, "http*://*.newtalk.tw*")) return strProxy;1840	if (shExpMatch(url, "http*://*.newyorktimes.com*")) return strProxy;1841	if (shExpMatch(url, "http*://*.nexton-net.jp*")) return strProxy;1842	if (shExpMatch(url, "http*://*.nexttv.com.tw*")) return strProxy;1843	if (shExpMatch(url, "http*://*.nga.mil*")) return strProxy;1844	if (shExpMatch(url, "http*://*.ngensis.com*")) return strProxy;1845	if (shExpMatch(url, "http*://*.nicovideo.jp*")) return strProxy;1846	if (shExpMatch(url, "http*://*.nighost.org*")) return strProxy;1847	if (shExpMatch(url, "http*://*.nintendium.com*")) return strProxy;1848	if (shExpMatch(url, "http*://*.dayaarmongol.ning.com*")) return strProxy;1849	if (shExpMatch(url, "http*://*.dayaarmongol.ning.com*")) return strProxy;1850	if (shExpMatch(url, "http*://*.taiwanyes.ning.com*")) return strProxy;1851	if (shExpMatch(url, "http*://*.njactb.org*")) return strProxy;1852	if (shExpMatch(url, "http*://*.njuice.com*")) return strProxy;1853	if (shExpMatch(url, "http*://*.njuice.com*")) return strProxy;1854	if (shExpMatch(url, "http*://*.nlfreevpn.com*")) return strProxy;1855	if (shExpMatch(url, "http*://*.nobel.se*")) return strProxy;1856	if (shExpMatch(url, "http*://*.nobelprize.org*")) return strProxy;1857	if (shExpMatch(url, "http*://*.nobodycanstop.us*")) return strProxy;1858	if (shExpMatch(url, "http*://*.nobodycanstop.us*")) return strProxy;1859	if (shExpMatch(url, "http*://*.nokogiri.org*")) return strProxy;1860	if (shExpMatch(url, "http*://*.nokola.com*")) return strProxy;1861	if (shExpMatch(url, "http*://*.noobbox.com*")) return strProxy;1862	if (shExpMatch(url, "http*://*.novelasia.com*")) return strProxy;1863	if (shExpMatch(url, "http*://*.news.now.com*")) return strProxy;1864	if (shExpMatch(url, "http*://*.nownews.com*")) return strProxy;1865	if (shExpMatch(url, "http*://*.nowtorrents.com*")) return strProxy;1866	if (shExpMatch(url, "http*://*.noypf.com*")) return strProxy;1867	if (shExpMatch(url, "http*://*.noypf.com*")) return strProxy;1868	if (shExpMatch(url, "http*://*.npa.go.jp*")) return strProxy;1869	if (shExpMatch(url, "http*://*.nps.gov*")) return strProxy;1870	if (shExpMatch(url, "http*://*.nrk.no*")) return strProxy;1871	if (shExpMatch(url, "http*://*.nrk.no*")) return strProxy;1872	if (shExpMatch(url, "http*://*.nsc.gov.tw*")) return strProxy;1873	if (shExpMatch(url, "http*://*.ntd.tv*")) return strProxy;1874	if (shExpMatch(url, "http*://*.ntdtv.co*")) return strProxy;1875	if (shExpMatch(url, "http*://*.ntdtv.ca*")) return strProxy;1876	if (shExpMatch(url, "http*://*.ntdtv.org*")) return strProxy;1877	if (shExpMatch(url, "http*://*.ntdtv.ru*")) return strProxy;1878	if (shExpMatch(url, "http*://*.cbs.ntu.edu.tw*")) return strProxy;1879	if (shExpMatch(url, "http*://*.nuexpo.com*")) return strProxy;1880	if (shExpMatch(url, "http*://*.nurgo-software.com*")) return strProxy;1881	if (shExpMatch(url, "http*://*.nuvid.com*")) return strProxy;1882	if (shExpMatch(url, "http*://*.nuzcom.com*")) return strProxy;1883	if (shExpMatch(url, "http*://*.nvquan.org*")) return strProxy;1884	if (shExpMatch(url, "http*://*.nyaa.se*")) return strProxy;1885	if (shExpMatch(url, "http*://*.nydus.ca*")) return strProxy;1886	if (shExpMatch(url, "http*://*.nyt.com*")) return strProxy;1887	if (shExpMatch(url, "http*://*.nytco.com*")) return strProxy;1888	if (shExpMatch(url, "http*://*.nytimes.com*")) return strProxy;1889	if (shExpMatch(url, "http*://*.nytimes.com*")) return strProxy;1890	if (shExpMatch(url, "http*://*.nytimg.com*")) return strProxy;1891	if (shExpMatch(url, "http*://*.nysingtao.com*")) return strProxy;1892	if (shExpMatch(url, "http*://*.nzchinese.net.nz*")) return strProxy;1893	if (shExpMatch(url, "http*://*.observechina.net*")) return strProxy;1894	if (shExpMatch(url, "http*://*.oclp.hk*")) return strProxy;1895	if (shExpMatch(url, "http*://*.october-review.org*")) return strProxy;1896	if (shExpMatch(url, "http*://*.offbeatchina.com*")) return strProxy;1897	if (shExpMatch(url, "http*://*.ogaoga.org*")) return strProxy;1898	if (shExpMatch(url, "http*://*.twtr2src.ogaoga.org*")) return strProxy;1899	if (shExpMatch(url, "http*://*.oikos.com.tw*")) return strProxy;1900	if (shExpMatch(url, "http*://*.oiktv.com*")) return strProxy;1901	if (shExpMatch(url, "http*://*.oizoblog.com*")) return strProxy;1902	if (shExpMatch(url, "http*://*.okayfreedom.com*")) return strProxy;1903	if (shExpMatch(url, "http*://*.old-cat.net*")) return strProxy;1904	if (shExpMatch(url, "http*://*.olumpo.com*")) return strProxy;1905	if (shExpMatch(url, "http*://*.olympicwatch.org*")) return strProxy;1906	if (shExpMatch(url, "http*://*.omgili.com*")) return strProxy;1907	if (shExpMatch(url, "http*://*.omnitalk.com*")) return strProxy;1908	if (shExpMatch(url, "http*://*.omnitalk.org*")) return strProxy;1909	if (shExpMatch(url, "http*://*.cling.omy.sg*")) return strProxy;1910	if (shExpMatch(url, "http*://*.forum.omy.sg*")) return strProxy;1911	if (shExpMatch(url, "http*://*.news.omy.sg*")) return strProxy;1912	if (shExpMatch(url, "http*://*.showbiz.omy.sg*")) return strProxy;1913	if (shExpMatch(url, "http*://*.on.cc*")) return strProxy;1914	if (shExpMatch(url, "http*://*.onedrive.live.com*")) return strProxy;1915	if (shExpMatch(url, "http*://*.onion.city*")) return strProxy;1916	if (shExpMatch(url, "http*://*.onlylady.cn*")) return strProxy;1917	if (shExpMatch(url, "http*://*.onmoon.net*")) return strProxy;1918	if (shExpMatch(url, "http*://*.onmoon.com*")) return strProxy;1919	if (shExpMatch(url, "http*://*.ontrac.com*")) return strProxy;1920	if (shExpMatch(url, "http*://*.oopsforum.com*")) return strProxy;1921	if (shExpMatch(url, "http*://*.open.com.hk*")) return strProxy;1922	if (shExpMatch(url, "http*://*.opendemocracy.net*")) return strProxy;1923	if (shExpMatch(url, "http*://*.myopenid.com*")) return strProxy;1924	if (shExpMatch(url, "http*://*.myopenid.com*")) return strProxy;1925	if (shExpMatch(url, "http*://*.openid.net*")) return strProxy;1926	if (shExpMatch(url, "http*://*.openid.net*")) return strProxy;1927	if (shExpMatch(url, "http*://*.blog.openinkpot.org*")) return strProxy;1928	if (shExpMatch(url, "http*://*.openleaks.org*")) return strProxy;1929	if (shExpMatch(url, "http*://*.openleaks.org*")) return strProxy;1930	if (shExpMatch(url, "http*://*.openvpn.net*")) return strProxy;1931	if (shExpMatch(url, "http*://*.openvpn.net*")) return strProxy;1932	if (shExpMatch(url, "http*://*.openwebster.com*")) return strProxy;1933	if (shExpMatch(url, "http*://*.help.opera.com*")) return strProxy;1934	if (shExpMatch(url, "http*://*.my.opera.com*")) return strProxy;1935	if (shExpMatch(url, "http*://*.demo.opera-mini.net*")) return strProxy;1936	if (shExpMatch(url, "http*://*.opnir.com*")) return strProxy;1937	if (shExpMatch(url, "http*://*.orchidbbs.com*")) return strProxy;1938	if (shExpMatch(url, "http*://*.orient-doll.com*")) return strProxy;1939	if (shExpMatch(url, "http*://*.orientaldaily.com.my*")) return strProxy;1940	if (shExpMatch(url, "http*://*.orientaldaily.com.my*")) return strProxy;1941	if (shExpMatch(url, "http*://*.orn.jp*")) return strProxy;1942	if (shExpMatch(url, "http*://*.t.orzdream.com*")) return strProxy;1943	if (shExpMatch(url, "http*://*.t.orzdream.com*")) return strProxy;1944	if (shExpMatch(url, "http*://*.tui.orzdream.com*")) return strProxy;1945	if (shExpMatch(url, "http*://*.orzistic.org*")) return strProxy;1946	if (shExpMatch(url, "http*://*.osfoora.com*")) return strProxy;1947	if (shExpMatch(url, "http*://*.osmdroid.net*")) return strProxy;1948	if (shExpMatch(url, "http*://*.ourdearamy.com*")) return strProxy;1949	if (shExpMatch(url, "http*://*.oursogo.com*")) return strProxy;1950	if (shExpMatch(url, "http*://*.oursteps.com.au*")) return strProxy;1951	if (shExpMatch(url, "http*://*.xinqimeng.over-blog.com*")) return strProxy;1952	if (shExpMatch(url, "http*://*.share.ovi.com*")) return strProxy;1953	if (shExpMatch(url, "http*://*.owl.li*")) return strProxy;1954	if (shExpMatch(url, "http*://*.ht.ly*")) return strProxy;1955	if (shExpMatch(url, "http*://*.htl.li*")) return strProxy;1956	if (shExpMatch(url, "http*://*.mash.to*")) return strProxy;1957	if (shExpMatch(url, "http*://*.owind.com*")) return strProxy;1958	if (shExpMatch(url, "http*://*.oxid.it*")) return strProxy;1959	if (shExpMatch(url, "http*://*.oyax.com*")) return strProxy;1960	if (shExpMatch(url, "http*://*.ozchinese.com*")) return strProxy;1961	if (shExpMatch(url, "http*://*.ow.ly*")) return strProxy;1962	if (shExpMatch(url, "http*://*.bbs.ozchinese.com*")) return strProxy;1963	if (shExpMatch(url, "http*://*.ozyoyo.com*")) return strProxy;1964	if (shExpMatch(url, "http*://*.pacificpoker.com*")) return strProxy;1965	if (shExpMatch(url, "http*://*.packetix.net*")) return strProxy;1966	if (shExpMatch(url, "http*://*.page2rss.com*")) return strProxy;1967	if (shExpMatch(url, "http*://*.pagodabox.com*")) return strProxy;1968	if (shExpMatch(url, "http*://*.paint.net*")) return strProxy;1969	if (shExpMatch(url, "http*://*.coveringweb.com*")) return strProxy;1970	if (shExpMatch(url, "http*://*.palacemoon.com*")) return strProxy;1971	if (shExpMatch(url, "http*://*.forum.palmislife.com*")) return strProxy;1972	if (shExpMatch(url, "http*://*.paper-replika.com*")) return strProxy;1973	if (shExpMatch(url, "http*://*.eriversoft.com*")) return strProxy;1974	if (shExpMatch(url, "http*://*.paper.li*")) return strProxy;1975	if (shExpMatch(url, "http*://*.paperb.us*")) return strProxy;1976	if (shExpMatch(url, "http*://*.panluan.net*")) return strProxy;1977	if (shExpMatch(url, "http*://*.panluan.net*")) return strProxy;1978	if (shExpMatch(url, "http*://*.pao-pao.net*")) return strProxy;1979	if (shExpMatch(url, "http*://*.parade.com*")) return strProxy;1980	if (shExpMatch(url, "http*://*.passiontimes.hk*")) return strProxy;1981	if (shExpMatch(url, "http*://*.pastebin.com*")) return strProxy;1982	if (shExpMatch(url, "http*://*.pastie.org*")) return strProxy;1983	if (shExpMatch(url, "http*://*.pastie.org*")) return strProxy;1984	if (shExpMatch(url, "http*://*.blog.pathtosharepoint.com*")) return strProxy;1985	if (shExpMatch(url, "http*://*.pbs.org*")) return strProxy;1986	if (shExpMatch(url, "http*://*.pbs.org*")) return strProxy;1987	if (shExpMatch(url, "http*://*.pbwiki.com*")) return strProxy;1988	if (shExpMatch(url, "http*://*.pbworks.com*")) return strProxy;1989	if (shExpMatch(url, "http*://*.developers.box.net*")) return strProxy;1990	if (shExpMatch(url, "http*://*.wiki.oauth.net*")) return strProxy;1991	if (shExpMatch(url, "http*://*.wiki.phonegap.com*")) return strProxy;1992	if (shExpMatch(url, "http*://*.wiki.jqueryui.com*")) return strProxy;1993	if (shExpMatch(url, "http*://*.pbxes.com*")) return strProxy;1994	if (shExpMatch(url, "http*://*.pbxes.org*")) return strProxy;1995	if (shExpMatch(url, "http*://*.pcdiscuss.com*")) return strProxy;1996	if (shExpMatch(url, "http*://*.pcdvd.com.tw*")) return strProxy;1997	if (shExpMatch(url, "http*://*.pchome.com.tw*")) return strProxy;1998	if (shExpMatch(url, "http*://*.pcij.org*")) return strProxy;1999	if (shExpMatch(url, "http*://*.pct.org.tw*")) return strProxy;2000	if (shExpMatch(url, "http*://*.pdetails.com*")) return strProxy;2001	if (shExpMatch(url, "http*://*.pdproxy.com*")) return strProxy;2002	if (shExpMatch(url, "http*://*.peacefire.org*")) return strProxy;2003	if (shExpMatch(url, "http*://*.peacehall.com*")) return strProxy;2004	if (shExpMatch(url, "http*://*.peeasian.com*")) return strProxy;2005	if (shExpMatch(url, "http*://*.pekingduck.org*")) return strProxy;2006	if (shExpMatch(url, "http*://*.pekingduck.org*")) return strProxy;2007	if (shExpMatch(url, "http*://*.penchinese.com*")) return strProxy;2008	if (shExpMatch(url, "http*://*.penchinese.net*")) return strProxy;2009	if (shExpMatch(url, "http*://*.penchinese.net*")) return strProxy;2010	if (shExpMatch(url, "http*://*.pengyulong.com*")) return strProxy;2011	if (shExpMatch(url, "http*://*.blog.pentalogic.net*")) return strProxy;2012	if (shExpMatch(url, "http*://*.penthouse.com*")) return strProxy;2013	if (shExpMatch(url, "http*://*.peopo.org*")) return strProxy;2014	if (shExpMatch(url, "http*://*.peopo.org*")) return strProxy;2015	if (shExpMatch(url, "http*://*.percy.in*")) return strProxy;2016	if (shExpMatch(url, "http*://*.perfectgirls.net*")) return strProxy;2017	if (shExpMatch(url, "http*://*.perfectvpn.net*")) return strProxy;2018	if (shExpMatch(url, "http*://*.perfspot.com*")) return strProxy;2019	if (shExpMatch(url, "http*://*.perlhowto.com*")) return strProxy;2020	if (shExpMatch(url, "http*://*.philly.com*")) return strProxy;2021	if (shExpMatch(url, "http*://*.photofocus.com*")) return strProxy;2022	if (shExpMatch(url, "http*://*.phuquocservices.com*")) return strProxy;2023	if (shExpMatch(url, "http*://*.picidae.net*")) return strProxy;2024	if (shExpMatch(url, "http*://*.picturesocial.com*")) return strProxy;2025	if (shExpMatch(url, "http*://*.pidown.com*")) return strProxy;2026	if (shExpMatch(url, "http*://*.pign.net*")) return strProxy;2027	if (shExpMatch(url, "http*://*.blog.pilotmoon.com*")) return strProxy;2028	if (shExpMatch(url, "http*://*.pin6.com*")) return strProxy;2029	if (shExpMatch(url, "http*://*.pin6.com*")) return strProxy;2030	if (shExpMatch(url, "http*://*.ping.fm*")) return strProxy;2031	if (shExpMatch(url, "http*://*.ping.fm*")) return strProxy;2032	if (shExpMatch(url, "http*://*.pinoy-n.com*")) return strProxy;2033	if (shExpMatch(url, "http*://*.piposay.com*")) return strProxy;2034	if (shExpMatch(url, "http*://*.piring.com*")) return strProxy;2035	if (shExpMatch(url, "http*://*.pixelqi.com*")) return strProxy;2036	if (shExpMatch(url, "http*://*.css.pixnet.in*")) return strProxy;2037	if (shExpMatch(url, "http*://*.pixnet.net*")) return strProxy;2038	if (shExpMatch(url, "http*://*.pixnet.net*")) return strProxy;2039	if (shExpMatch(url, "http*://*.pk.com*")) return strProxy;2040	if (shExpMatch(url, "http*://*.placemix.com*")) return strProxy;2041	if (shExpMatch(url, "http*://*.pictures.playboy.com*")) return strProxy;2042	if (shExpMatch(url, "http*://*.playboy.com*")) return strProxy;2043	if (shExpMatch(url, "http*://*.playpcesor.com*")) return strProxy;2044	if (shExpMatch(url, "http*://*.plays.com.tw*")) return strProxy;2045	if (shExpMatch(url, "http*://*.m.plixi.com*")) return strProxy;2046	if (shExpMatch(url, "http*://*.plm.org.hk*")) return strProxy;2047	if (shExpMatch(url, "http*://*.plunder.com*")) return strProxy;2048	if (shExpMatch(url, "http*://*.plus28.com*")) return strProxy;2049	if (shExpMatch(url, "http*://*.plusbb.com*")) return strProxy;2050	if (shExpMatch(url, "http*://*.pmates.com*")) return strProxy;2051	if (shExpMatch(url, "http*://*.po2b.com*")) return strProxy;2052	if (shExpMatch(url, "http*://*.podictionary.com*")) return strProxy;2053	if (shExpMatch(url, "http*://*.pokerstars.com*")) return strProxy;2054	if (shExpMatch(url, "http*://*.pokerstars.com*")) return strProxy;2055	if (shExpMatch(url, "http*://*.zh.pokerstrategy.com*")) return strProxy;2056	if (shExpMatch(url, "http*://*.politicalchina.org*")) return strProxy;2057	if (shExpMatch(url, "http*://*.popvote.hk*")) return strProxy;2058	if (shExpMatch(url, "http*://*.popyard.com*")) return strProxy;2059	if (shExpMatch(url, "http*://*.popyard.org*")) return strProxy;2060	if (shExpMatch(url, "http*://*.porn.com*")) return strProxy;2061	if (shExpMatch(url, "http*://*.porn2.com*")) return strProxy;2062	if (shExpMatch(url, "http*://*.pornbase.org*")) return strProxy;2063	if (shExpMatch(url, "http*://*.pornhd.com*")) return strProxy;2064	if (shExpMatch(url, "http*://*.pornhub.com*")) return strProxy;2065	if (shExpMatch(url, "http*://*.pornmm.net*")) return strProxy;2066	if (shExpMatch(url, "http*://*.pornoxo.com*")) return strProxy;2067	if (shExpMatch(url, "http*://*.pornrapidshare.com*")) return strProxy;2068	if (shExpMatch(url, "http*://*.pornrapidshare.com*")) return strProxy;2069	if (shExpMatch(url, "http*://*.pornstarclub.com*")) return strProxy;2070	if (shExpMatch(url, "http*://*.porntube.com*")) return strProxy;2071	if (shExpMatch(url, "http*://*.pornvisit.com*")) return strProxy;2072	if (shExpMatch(url, "http*://*.portablevpn.nl*")) return strProxy;2073	if (shExpMatch(url, "http*://*.post852.com*")) return strProxy;2074	if (shExpMatch(url, "http*://*.postadult.com*")) return strProxy;2075	if (shExpMatch(url, "http*://*.powercx.com*")) return strProxy;2076	if (shExpMatch(url, "http*://*.powerpointninja.com*")) return strProxy;2077	if (shExpMatch(url, "http*://*.cdn.printfriendly.com*")) return strProxy;2078	if (shExpMatch(url, "http*://*.pts.org.tw*")) return strProxy;2079	if (shExpMatch(url, "http*://*.pubu.com.tw*")) return strProxy;2080	if (shExpMatch(url, "http*://*.puffinbrowser.com*")) return strProxy;2081	if (shExpMatch(url, "http*://*.putty.org*")) return strProxy;2082	if (shExpMatch(url, "http*://*.post.ly*")) return strProxy;2083	if (shExpMatch(url, "http*://*.posterous.com*")) return strProxy;2084	if (shExpMatch(url, "http*://*.posterous.com*")) return strProxy;2085	if (shExpMatch(url, "http*://*.post.anyu.org*")) return strProxy;2086	if (shExpMatch(url, "http*://*.bralio.com*")) return strProxy;2087	if (shExpMatch(url, "http*://*.calebelston.com*")) return strProxy;2088	if (shExpMatch(url, "http*://*.designerol.com*")) return strProxy;2089	if (shExpMatch(url, "http*://*.blog.fizzik.com*")) return strProxy;2090	if (shExpMatch(url, "http*://*.nf.id.au*")) return strProxy;2091	if (shExpMatch(url, "http*://*.markmilian.com*")) return strProxy;2092	if (shExpMatch(url, "http*://*.log.riku.me*")) return strProxy;2093	if (shExpMatch(url, "http*://*.sogrady.me*")) return strProxy;2094	if (shExpMatch(url, "http*://*.vatn.org*")) return strProxy;2095	if (shExpMatch(url, "http*://*.veempiire.com*")) return strProxy;2096	if (shExpMatch(url, "http*://*.vegorpedersen.com*")) return strProxy;2097	if (shExpMatch(url, "http*://*.ventureswell.com*")) return strProxy;2098	if (shExpMatch(url, "http*://*.webfee.tk*")) return strProxy;2099	if (shExpMatch(url, "http*://*.whereiswerner.com*")) return strProxy;2100	if (shExpMatch(url, "http*://*.bill.zhong.pp.ru*")) return strProxy;2101	if (shExpMatch(url, "http*://*.power.com*")) return strProxy;2102	if (shExpMatch(url, "http*://*.power.com*")) return strProxy;2103	if (shExpMatch(url, "http*://*.powerapple.com*")) return strProxy;2104	if (shExpMatch(url, "http*://*.abc.pp.ru*")) return strProxy;2105	if (shExpMatch(url, "http*://*.heix.pp.ru*")) return strProxy;2106	if (shExpMatch(url, "http*://*.prayforchina.net*")) return strProxy;2107	if (shExpMatch(url, "http*://*.premeforwindows7.com*")) return strProxy;2108	if (shExpMatch(url, "http*://*.presentationzen.com*")) return strProxy;2109	if (shExpMatch(url, "http*://*.prestige-av.com*")) return strProxy;2110	if (shExpMatch(url, "http*://*.pritunl.com*")) return strProxy;2111	if (shExpMatch(url, "http*://*.privacybox.de*")) return strProxy;2112	if (shExpMatch(url, "http*://*.privateinternetaccess.com*")) return strProxy;2113	if (shExpMatch(url, "http*://*.privatepaste.com*")) return strProxy;2114	if (shExpMatch(url, "http*://*.privatepaste.com*")) return strProxy;2115	if (shExpMatch(url, "http*://*.privatetunnel.com*")) return strProxy;2116	if (shExpMatch(url, "http*://*.privatetunnel.com*")) return strProxy;2117	if (shExpMatch(url, "http*://*.procopytips.com*")) return strProxy;2118	if (shExpMatch(url, "http*://*.provideocoalition.com*")) return strProxy;2119	if (shExpMatch(url, "http*://*.prosiben.de*")) return strProxy;2120	if (shExpMatch(url, "http*://*.proxifier.com*")) return strProxy;2121	if (shExpMatch(url, "http*://*.api.proxlet.com*")) return strProxy;2122	if (shExpMatch(url, "http*://*.proxomitron.info*")) return strProxy;2123	if (shExpMatch(url, "http*://*.proxy.org*")) return strProxy;2124	if (shExpMatch(url, "http*://*.proxypy.net*")) return strProxy;2125	if (shExpMatch(url, "http*://*.proxypy.net*")) return strProxy;2126	if (shExpMatch(url, "http*://*.proxyroad.com*")) return strProxy;2127	if (shExpMatch(url, "http*://*.prozz.net*")) return strProxy;2128	if (shExpMatch(url, "http*://*.psblog.name*")) return strProxy;2129	if (shExpMatch(url, "http*://*.psblog.name*")) return strProxy;2130	if (shExpMatch(url, "http*://*.psiphon.ca*")) return strProxy;2131	if (shExpMatch(url, "http*://*.ptt.cc*")) return strProxy;2132	if (shExpMatch(url, "http*://*.puffstore.com*")) return strProxy;2133	if (shExpMatch(url, "http*://*.pullfolio.com*")) return strProxy;2134	if (shExpMatch(url, "http*://*.pureconcepts.net*")) return strProxy;2135	if (shExpMatch(url, "http*://*.purepdf.com*")) return strProxy;2136	if (shExpMatch(url, "http*://*.purevpn.com*")) return strProxy;2137	if (shExpMatch(url, "http*://*.putlocker.com*")) return strProxy;2138	if (shExpMatch(url, "http*://*.pwned.com*")) return strProxy;2139	if (shExpMatch(url, "http*://*.python.com*")) return strProxy;2140	if (shExpMatch(url, "http*://*.python.com.tw*")) return strProxy;2141	if (shExpMatch(url, "http*://*.python.com.tw*")) return strProxy;2142	if (shExpMatch(url, "http*://*.qanote.com*")) return strProxy;2143	if (shExpMatch(url, "http*://*.qanote.com*")) return strProxy;2144	if (shExpMatch(url, "http*://*.qi-gong.me*")) return strProxy;2145	if (shExpMatch(url, "http*://*.qidian.ca*")) return strProxy;2146	if (shExpMatch(url, "http*://*.qienkuen.org*")) return strProxy;2147	if (shExpMatch(url, "http*://*.qienkuen.org*")) return strProxy;2148	if (shExpMatch(url, "http*://*.qiwen.lu*")) return strProxy;2149	if (shExpMatch(url, "http*://*.qixianglu.cn*")) return strProxy;2150	if (shExpMatch(url, "http*://*.bbs.qmzdd.com*")) return strProxy;2151	if (shExpMatch(url, "http*://*.qkshare.com*")) return strProxy;2152	if (shExpMatch(url, "http*://*.qoos.com*")) return strProxy;2153	if (shExpMatch(url, "http*://*.qoos.com*")) return strProxy;2154	if (shExpMatch(url, "http*://*.blog.qooza.hk*")) return strProxy;2155	if (shExpMatch(url, "http*://*.efksoft.com*")) return strProxy;2156	if (shExpMatch(url, "http*://*.qstatus.com*")) return strProxy;2157	if (shExpMatch(url, "http*://*.qtweeter.com*")) return strProxy;2158	if (shExpMatch(url, "http*://*.qtrac.eu*")) return strProxy;2159	if (shExpMatch(url, "http*://*.quitccp.net*")) return strProxy;2160	if (shExpMatch(url, "http*://*.quitccp.net*")) return strProxy;2161	if (shExpMatch(url, "http*://*.quitccp.org*")) return strProxy;2162	if (shExpMatch(url, "http*://*.quitccp.org*")) return strProxy;2163	if (shExpMatch(url, "http*://*.quran.com*")) return strProxy;2164	if (shExpMatch(url, "http*://*.qusi8.net*")) return strProxy;2165	if (shExpMatch(url, "http*://*.qvodzy.org*")) return strProxy;2166	if (shExpMatch(url, "http*://*.nemesis2.qx.net*")) return strProxy;2167	if (shExpMatch(url, "http*://*.qxbbs.org*")) return strProxy;2168	if (shExpMatch(url, "http*://*.radicalparty.org*")) return strProxy;2169	if (shExpMatch(url, "http*://*.radioaustralia.net.au*")) return strProxy;2170	if (shExpMatch(url, "http*://*.opml.radiotime.com*")) return strProxy;2171	if (shExpMatch(url, "http*://*.radiovaticana.org*")) return strProxy;2172	if (shExpMatch(url, "http*://*.radiovncr.com*")) return strProxy;2173	if (shExpMatch(url, "http*://*.raidcall.com.tw*")) return strProxy;2174	if (shExpMatch(url, "http*://*.raidtalk.com.tw*")) return strProxy;2175	if (shExpMatch(url, "http*://*.rangzen.org*")) return strProxy;2176	if (shExpMatch(url, "http*://*.blog.ranxiang.com*")) return strProxy;2177	if (shExpMatch(url, "http*://*.ranyunfei.com*")) return strProxy;2178	if (shExpMatch(url, "http*://*.ranyunfei.com*")) return strProxy;2179	if (shExpMatch(url, "http*://*.rapbull.net*")) return strProxy;2180	if (shExpMatch(url, "http*://*.rapidgator.net*")) return strProxy;2181	if (shExpMatch(url, "http*://*.rapidshare8.com*")) return strProxy;2182	if (shExpMatch(url, "http*://*.rapidsharedata.com*")) return strProxy;2183	if (shExpMatch(url, "http*://*.rcinet.ca*")) return strProxy;2184	if (shExpMatch(url, "http*://*.read100.com*")) return strProxy;2185	if (shExpMatch(url, "http*://*.readingtimes.com.tw*")) return strProxy;2186	if (shExpMatch(url, "http*://*.readingtimes.com.tw*")) return strProxy;2187	if (shExpMatch(url, "http*://*.readmoo.com*")) return strProxy;2188	if (shExpMatch(url, "http*://*.realraptalk.com*")) return strProxy;2189	if (shExpMatch(url, "http*://*.recordhistory.org*")) return strProxy;2190	if (shExpMatch(url, "http*://*.redchinacn.org*")) return strProxy;2191	if (shExpMatch(url, "http*://*.redtube.com*")) return strProxy;2192	if (shExpMatch(url, "http*://*.referer.us*")) return strProxy;2193	if (shExpMatch(url, "http*://*.referer.us*")) return strProxy;2194	if (shExpMatch(url, "http*://*.reflectivecode.com*")) return strProxy;2195	if (shExpMatch(url, "http*://*.relaxbbs.com*")) return strProxy;2196	if (shExpMatch(url, "http*://*.renminbao.com*")) return strProxy;2197	if (shExpMatch(url, "http*://*.renyurenquan.org*")) return strProxy;2198	if (shExpMatch(url, "http*://*.renyurenquan.org*")) return strProxy;2199	if (shExpMatch(url, "http*://*.certificate.revocationcheck.com*")) return strProxy;2200	if (shExpMatch(url, "http*://*.subacme.rerouted.org*")) return strProxy;2201	if (shExpMatch(url, "http*://*.reuters.com*")) return strProxy;2202	if (shExpMatch(url, "http*://*.revleft.com*")) return strProxy;2203	if (shExpMatch(url, "http*://*.retweetist.com*")) return strProxy;2204	if (shExpMatch(url, "http*://*.retweetrank.com*")) return strProxy;2205	if (shExpMatch(url, "http*://*.revver.com*")) return strProxy;2206	if (shExpMatch(url, "http*://*.rfa.org*")) return strProxy;2207	if (shExpMatch(url, "http*://*.rfachina.com*")) return strProxy;2208	if (shExpMatch(url, "http*://*.rfamobile.org*")) return strProxy;2209	if (shExpMatch(url, "http*://*.rferl.org*")) return strProxy;2210	if (shExpMatch(url, "http*://*.rfi.fr*")) return strProxy;2211	if (shExpMatch(url, "http*://*.rfi.fr*")) return strProxy;2212	if (shExpMatch(url, "http*://*.rfi.my*")) return strProxy;2213	if (shExpMatch(url, "http*://*.rhcloud.com*")) return strProxy;2214	if (shExpMatch(url, "http*://*.vds.rightster.com*")) return strProxy;2215	if (shExpMatch(url, "http*://*.rileyguide.com*")) return strProxy;2216	if (shExpMatch(url, "http*://*.riku.me*")) return strProxy;2217	if (shExpMatch(url, "http*://*.ritouki.jp*")) return strProxy;2218	if (shExpMatch(url, "http*://*.rlwlw.com*")) return strProxy;2219	if (shExpMatch(url, "http*://*.rlwlw.com*")) return strProxy;2220	if (shExpMatch(url, "http*://*.rmjdw.com*")) return strProxy;2221	if (shExpMatch(url, "http*://*.chinese.rnw.nl*")) return strProxy;2222	if (shExpMatch(url, "http*://*.rnw.nl*")) return strProxy;2223	if (shExpMatch(url, "http*://*.robtex.com*")) return strProxy;2224	if (shExpMatch(url, "http*://*.robustnessiskey.com*")) return strProxy;2225	if (shExpMatch(url, "http*://*.www2.rocketbbs.com*")) return strProxy;2226	if (shExpMatch(url, "http*://*.www2.rocketbbs.com*")) return strProxy;2227	if (shExpMatch(url, "http*://*.rocmp.org*")) return strProxy;2228	if (shExpMatch(url, "http*://*.rojo.com*")) return strProxy;2229	if (shExpMatch(url, "http*://*.ronjoneswriter.com*")) return strProxy;2230	if (shExpMatch(url, "http*://*.roodo.com*")) return strProxy;2231	if (shExpMatch(url, "http*://*.rosechina.net*")) return strProxy;2232	if (shExpMatch(url, "http*://*.rotten.com*")) return strProxy;2233	if (shExpMatch(url, "http*://*.rsf.org*")) return strProxy;2234	if (shExpMatch(url, "http*://*.rsf.org*")) return strProxy;2235	if (shExpMatch(url, "http*://*.rsf-chinese.org*")) return strProxy;2236	if (shExpMatch(url, "http*://*.rsf-chinese.org*")) return strProxy;2237	if (shExpMatch(url, "http*://*.rssmeme.com*")) return strProxy;2238	if (shExpMatch(url, "http*://*.rssmeme.com*")) return strProxy;2239	if (shExpMatch(url, "http*://*.rthk.hk*")) return strProxy;2240	if (shExpMatch(url, "http*://*.rthk.hk*")) return strProxy;2241	if (shExpMatch(url, "http*://*.rthk.org.hk*")) return strProxy;2242	if (shExpMatch(url, "http*://*.rthk.org.hk*")) return strProxy;2243	if (shExpMatch(url, "http*://*.rti.org.tw*")) return strProxy;2244	if (shExpMatch(url, "http*://*.ruanyifeng.com*")) return strProxy;2245	if (shExpMatch(url, "http*://*.rushbee.com*")) return strProxy;2246	if (shExpMatch(url, "http*://*.rutube.ru*")) return strProxy;2247	if (shExpMatch(url, "http*://*.ruyiseek.com*")) return strProxy;2248	if (shExpMatch(url, "http*://*.rxhj.net*")) return strProxy;2249	if (shExpMatch(url, "http*://*.rxhj.net*")) return strProxy;2250	if (shExpMatch(url, "http*://*.s-cute.com*")) return strProxy;2251	if (shExpMatch(url, "http*://*.s-dragon.org*")) return strProxy;2252	if (shExpMatch(url, "http*://*.s1heng.com*")) return strProxy;2253	if (shExpMatch(url, "http*://*.s4miniarchive.com*")) return strProxy;2254	if (shExpMatch(url, "http*://*.s8forum.com*")) return strProxy;2255	if (shExpMatch(url, "http*://*.sacom.hk*")) return strProxy;2256	if (shExpMatch(url, "http*://*.sacom.hk*")) return strProxy;2257	if (shExpMatch(url, "http*://*.sadpanda.us*")) return strProxy;2258	if (shExpMatch(url, "http*://*.saiq.me*")) return strProxy;2259	if (shExpMatch(url, "http*://*.saiq.me*")) return strProxy;2260	if (shExpMatch(url, "http*://*.salvation.org.hk*")) return strProxy;2261	if (shExpMatch(url, "http*://*.salvation.org.hk*")) return strProxy;2262	if (shExpMatch(url, "http*://*.samair.ru*")) return strProxy;2263	if (shExpMatch(url, "http*://*.sammyjs.org*")) return strProxy;2264	if (shExpMatch(url, "http*://*.sandnoble.com*")) return strProxy;2265	if (shExpMatch(url, "http*://*.sankaizok.com*")) return strProxy;2266	if (shExpMatch(url, "http*://*.sanmin.com.tw*")) return strProxy;2267	if (shExpMatch(url, "http*://*.sapikachu.net*")) return strProxy;2268	if (shExpMatch(url, "http*://*.savemedia.com*")) return strProxy;2269	if (shExpMatch(url, "http*://*.savetibet.de*")) return strProxy;2270	if (shExpMatch(url, "http*://*.savetibet.fr*")) return strProxy;2271	if (shExpMatch(url, "http*://*.savetibet.nl*")) return strProxy;2272	if (shExpMatch(url, "http*://*.savetibet.org*")) return strProxy;2273	if (shExpMatch(url, "http*://*.savetibet.ru*")) return strProxy;2274	if (shExpMatch(url, "http*://*.savevid.com*")) return strProxy;2275	if (shExpMatch(url, "http*://*.say2.info*")) return strProxy;2276	if (shExpMatch(url, "http*://*.sciencemag.org*")) return strProxy;2277	if (shExpMatch(url, "http*://*.scmp.com*")) return strProxy;2278	if (shExpMatch(url, "http*://*.scmpchinese.com*")) return strProxy;2279	if (shExpMatch(url, "http*://*.scribd.com*")) return strProxy;2280	if (shExpMatch(url, "http*://*.scriptspot.com*")) return strProxy;2281	if (shExpMatch(url, "http*://*.seapuff.com*")) return strProxy;2282	if (shExpMatch(url, "http*://*.domainhelp.search.com*")) return strProxy;2283	if (shExpMatch(url, "http*://*.secretchina.com*")) return strProxy;2284	if (shExpMatch(url, "http*://*.secretgarden.no*")) return strProxy;2285	if (shExpMatch(url, "http*://*.default.secureserver.net*")) return strProxy;2286	if (shExpMatch(url, "http*://*.securitykiss.com*")) return strProxy;2287	if (shExpMatch(url, "http*://*.seesmic.com*")) return strProxy;2288	if (shExpMatch(url, "http*://*.seevpn.com*")) return strProxy;2289	if (shExpMatch(url, "http*://*.seezone.net*")) return strProxy;2290	if (shExpMatch(url, "http*://*.sejie.com*")) return strProxy;2291	if (shExpMatch(url, "http*://*.sendspace.com*")) return strProxy;2292	if (shExpMatch(url, "http*://*.tweets.seraph.me*")) return strProxy;2293	if (shExpMatch(url, "http*://*.sesawe.net*")) return strProxy;2294	if (shExpMatch(url, "http*://*.sesawe.net*")) return strProxy;2295	if (shExpMatch(url, "http*://*.sesawe.org*")) return strProxy;2296	if (shExpMatch(url, "http*://*.sethwklein.net*")) return strProxy;2297	if (shExpMatch(url, "http*://*.forum.setty.com.tw*")) return strProxy;2298	if (shExpMatch(url, "http*://*.sevenload.com*")) return strProxy;2299	if (shExpMatch(url, "http*://*.sevenload.com*")) return strProxy;2300	if (shExpMatch(url, "http*://*.sex.com*")) return strProxy;2301	if (shExpMatch(url, "http*://*.sex-11.com*")) return strProxy;2302	if (shExpMatch(url, "http*://*.sex3.com*")) return strProxy;2303	if (shExpMatch(url, "http*://*.sex8.cc*")) return strProxy;2304	if (shExpMatch(url, "http*://*.sexandsubmission.com*")) return strProxy;2305	if (shExpMatch(url, "http*://*.sexhu.com*")) return strProxy;2306	if (shExpMatch(url, "http*://*.sexhuang.com*")) return strProxy;2307	if (shExpMatch(url, "http*://*.sexinsex.net*")) return strProxy;2308	if (shExpMatch(url, "http*://*.sexinsex.net*")) return strProxy;2309	if (shExpMatch(url, "http*://*.67.220.91.18*")) return strProxy;2310	if (shExpMatch(url, "http*://*.67.220.91.23*")) return strProxy;2311	if (shExpMatch(url, "http*://*.sfileydy.com*")) return strProxy;2312	if (shExpMatch(url, "http*://*.sftuk.org*")) return strProxy;2313	if (shExpMatch(url, "http*://*.sftuk.org*")) return strProxy;2314	if (shExpMatch(url, "http*://*.shadow.ma*")) return strProxy;2315	if (shExpMatch(url, "http*://*.shadowsocks.org*")) return strProxy;2316	if (shExpMatch(url, "http*://*.shahamat-english.com*")) return strProxy;2317	if (shExpMatch(url, "http*://*.shangfang.org*")) return strProxy;2318	if (shExpMatch(url, "http*://*.shangfang.org*")) return strProxy;2319	if (shExpMatch(url, "http*://*.shapeservices.com*")) return strProxy;2320	if (shExpMatch(url, "http*://*.sharebee.com*")) return strProxy;2321	if (shExpMatch(url, "http*://*.sharecool.org*")) return strProxy;2322	if (shExpMatch(url, "http*://*.sharkdolphin.com*")) return strProxy;2323	if (shExpMatch(url, "http*://*.sharpdaily.com.hk*")) return strProxy;2324	if (shExpMatch(url, "http*://*.sharpdaily.com.hk*")) return strProxy;2325	if (shExpMatch(url, "http*://*.sharpdaily.hk*")) return strProxy;2326	if (shExpMatch(url, "http*://*.shaunthesheep.com*")) return strProxy;2327	if (shExpMatch(url, "http*://*.shaunthesheep.com*")) return strProxy;2328	if (shExpMatch(url, "http*://*.sheikyermami.com*")) return strProxy;2329	if (shExpMatch(url, "http*://*.shellmix.com*")) return strProxy;2330	if (shExpMatch(url, "http*://*.shenshou.org*")) return strProxy;2331	if (shExpMatch(url, "http*://*.shenyunperformingarts.org*")) return strProxy;2332	if (shExpMatch(url, "http*://*.shenzhoufilm.com*")) return strProxy;2333	if (shExpMatch(url, "http*://*.shenzhoufilm.com*")) return strProxy;2334	if (shExpMatch(url, "http*://*.shinychan.com*")) return strProxy;2335	if (shExpMatch(url, "http*://*.shitaotv.org*")) return strProxy;2336	if (shExpMatch(url, "http*://*.shixiao.org*")) return strProxy;2337	if (shExpMatch(url, "http*://*.shizhao.org*")) return strProxy;2338	if (shExpMatch(url, "http*://*.shizhao.org*")) return strProxy;2339	if (shExpMatch(url, "http*://*.shkspr.mobi*")) return strProxy;2340	if (shExpMatch(url, "http*://*.shodanhq.com*")) return strProxy;2341	if (shExpMatch(url, "http*://*.shopping.com*")) return strProxy;2342	if (shExpMatch(url, "http*://*.showtime.jp*")) return strProxy;2343	if (shExpMatch(url, "http*://*.ch.shvoong.com*")) return strProxy;2344	if (shExpMatch(url, "http*://*.shwchurch3.com*")) return strProxy;2345	if (shExpMatch(url, "http*://*.shwchurch3.com*")) return strProxy;2346	if (shExpMatch(url, "http*://*.sidelinesnews.com*")) return strProxy;2347	if (shExpMatch(url, "http*://*.sidelinessportseatery.com*")) return strProxy;2348	if (shExpMatch(url, "http*://*.simplecd.org*")) return strProxy;2349	if (shExpMatch(url, "http*://*.simplecd.org*")) return strProxy;2350	if (shExpMatch(url, "http*://*.simpleproductivityblog.com*")) return strProxy;2351	if (shExpMatch(url, "http*://*.bbs.sina.com*")) return strProxy;2352	if (shExpMatch(url, "http*://*.bbs.sina.com%2F*")) return strProxy;2353	if (shExpMatch(url, "http*://*.blog.sina.com.tw*")) return strProxy;2354	if (shExpMatch(url, "http*://*.dailynews.sina.com*")) return strProxy;2355	if (shExpMatch(url, "http*://*.dailynews.sina.com%2F*")) return strProxy;2356	if (shExpMatch(url, "http*://*.forum.sina.com.hk*")) return strProxy;2357	if (shExpMatch(url, "http*://*.home.sina.com*")) return strProxy;2358	if (shExpMatch(url, "http*://*.magazines.sina.com.tw*")) return strProxy;2359	if (shExpMatch(url, "http*://*.news.sina.com.hk*")) return strProxy;2360	if (shExpMatch(url, "http*://*.news.sina.com.tw*")) return strProxy;2361	if (shExpMatch(url, "http*://*.news.sinchew.com.my*")) return strProxy;2362	if (shExpMatch(url, "http*://*.singtao.com*")) return strProxy;2363	if (shExpMatch(url, "http*://*.singtao.com*")) return strProxy;2364	if (shExpMatch(url, "http*://*.news.singtao.ca*")) return strProxy;2365	if (shExpMatch(url, "http*://*.cdp.sinica.edu.tw*")) return strProxy;2366	if (shExpMatch(url, "http*://*.sino-monthly.com*")) return strProxy;2367	if (shExpMatch(url, "http*://*.sinocast.com*")) return strProxy;2368	if (shExpMatch(url, "http*://*.sinocism.com*")) return strProxy;2369	if (shExpMatch(url, "http*://*.sinomontreal.ca*")) return strProxy;2370	if (shExpMatch(url, "http*://*.sinonet.ca*")) return strProxy;2371	if (shExpMatch(url, "http*://*.sinopitt.info*")) return strProxy;2372	if (shExpMatch(url, "http*://*.sinoants.com*")) return strProxy;2373	if (shExpMatch(url, "http*://*.sinoants.com*")) return strProxy;2374	if (shExpMatch(url, "http*://*.sinoquebec.com*")) return strProxy;2375	if (shExpMatch(url, "http*://*.site90.net*")) return strProxy;2376	if (shExpMatch(url, "http*://*.sitebro.tw*")) return strProxy;2377	if (shExpMatch(url, "http*://*.siteks.uk.to*")) return strProxy;2378	if (shExpMatch(url, "http*://*.sitemaps.org*")) return strProxy;2379	if (shExpMatch(url, "http*://*.sitetag.us*")) return strProxy;2380	if (shExpMatch(url, "http*://*.sis.xxx*")) return strProxy;2381	if (shExpMatch(url, "http*://*.sis001.com*")) return strProxy;2382	if (shExpMatch(url, "http*://*.sis001.us*")) return strProxy;2383	if (shExpMatch(url, "http*://*.sjum.cn*")) return strProxy;2384	if (shExpMatch(url, "http*://*.skimtube.com*")) return strProxy;2385	if (shExpMatch(url, "http*://*.skybet.com*")) return strProxy;2386	if (shExpMatch(url, "http*://*.skyhighpremium.com*")) return strProxy;2387	if (shExpMatch(url, "http*://*.bbs.skykiwi.com*")) return strProxy;2388	if (shExpMatch(url, "http*://*.skype.com*")) return strProxy;2389	if (shExpMatch(url, "http*://*.skype.com*")) return strProxy;2390	if (shExpMatch(url, "http*://*.skyvegas.com*")) return strProxy;2391	if (shExpMatch(url, "http*://*.xskywalker.com*")) return strProxy;2392	if (shExpMatch(url, "http*://*.xskywalker.com*")) return strProxy;2393	if (shExpMatch(url, "http*://*.m.slandr.net*")) return strProxy;2394	if (shExpMatch(url, "http*://*.slavasoft.com*")) return strProxy;2395	if (shExpMatch(url, "http*://*.slheng.com*")) return strProxy;2396	if (shExpMatch(url, "http*://*.slideshare.net*")) return strProxy;2397	if (shExpMatch(url, "http*://*.forum.slime.com.tw*")) return strProxy;2398	if (shExpMatch(url, "http*://*.slutload.com*")) return strProxy;2399	if (shExpMatch(url, "http*://*.smhric.org*")) return strProxy;2400	if (shExpMatch(url, "http*://*.sndcdn.com*")) return strProxy;2401	if (shExpMatch(url, "http*://*.so-ga.net*")) return strProxy;2402	if (shExpMatch(url, "http*://*.so-ga.net*")) return strProxy;2403	if (shExpMatch(url, "http*://*.so-news.com*")) return strProxy;2404	if (shExpMatch(url, "http*://*.so-news.com*")) return strProxy;2405	if (shExpMatch(url, "http*://*.home.so-net.net.tw*")) return strProxy;2406	if (shExpMatch(url, "http*://*.soc.mil*")) return strProxy;2407	if (shExpMatch(url, "http*://*.sockslist.net*")) return strProxy;2408	if (shExpMatch(url, "http*://*.sod.co.jp*")) return strProxy;2409	if (shExpMatch(url, "http*://*.softether.org*")) return strProxy;2410	if (shExpMatch(url, "http*://*.softether.org*")) return strProxy;2411	if (shExpMatch(url, "http*://*.softether-download.com*")) return strProxy;2412	if (shExpMatch(url, "http*://*.softether-download.com*")) return strProxy;2413	if (shExpMatch(url, "http*://*.cdn.softlayer.net*")) return strProxy;2414	if (shExpMatch(url, "http*://*.sogclub.com*")) return strProxy;2415	if (shExpMatch(url, "http*://*.sohcradio.com*")) return strProxy;2416	if (shExpMatch(url, "http*://*.sohcradio.com*")) return strProxy;2417	if (shExpMatch(url, "http*://*.somee.com*")) return strProxy;2418	if (shExpMatch(url, "http*://*.sorting-algorithms.com*")) return strProxy;2419	if (shExpMatch(url, "http*://*.soumo.info*")) return strProxy;2420	if (shExpMatch(url, "http*://*.soup.io*")) return strProxy;2421	if (shExpMatch(url, "http*://*.slinkset.com*")) return strProxy;2422	if (shExpMatch(url, "http*://*.slickvpn.com*")) return strProxy;2423	if (shExpMatch(url, "http*://*.snapchat.com*")) return strProxy;2424	if (shExpMatch(url, "http*://*.snaptu.com*")) return strProxy;2425	if (shExpMatch(url, "http*://*.snaptu.com*")) return strProxy;2426	if (shExpMatch(url, "http*://*.sneakme.net*")) return strProxy;2427	if (shExpMatch(url, "http*://*.snooper.co.uk*")) return strProxy;2428	if (shExpMatch(url, "http*://*.sobees.com*")) return strProxy;2429	if (shExpMatch(url, "http*://*.sobees.com*")) return strProxy;2430	if (shExpMatch(url, "http*://*.socialwhale.com*")) return strProxy;2431	if (shExpMatch(url, "http*://*.softether.co.jp*")) return strProxy;2432	if (shExpMatch(url, "http*://*.softwarebychuck.com*")) return strProxy;2433	if (shExpMatch(url, "http*://*.blog.sogoo.org*")) return strProxy;2434	if (shExpMatch(url, "http*://*.soh.tw*")) return strProxy;2435	if (shExpMatch(url, "http*://*.soh.tw*")) return strProxy;2436	if (shExpMatch(url, "http*://*.sohfrance.org*")) return strProxy;2437	if (shExpMatch(url, "http*://*.sohfrance.org*")) return strProxy;2438	if (shExpMatch(url, "http*://*.chinese.soifind.com*")) return strProxy;2439	if (shExpMatch(url, "http*://*.sokamonline.com*")) return strProxy;2440	if (shExpMatch(url, "http*://*.somee.com*")) return strProxy;2441	if (shExpMatch(url, "http*://*.songjianjun.com*")) return strProxy;2442	if (shExpMatch(url, "http*://*.songjianjun.com*")) return strProxy;2443	if (shExpMatch(url, "http*://*.sonidodelaesperanza.org*")) return strProxy;2444	if (shExpMatch(url, "http*://*.sopcast.com*")) return strProxy;2445	if (shExpMatch(url, "http*://*.sopcast.org*")) return strProxy;2446	if (shExpMatch(url, "http*://*.bbs.soul-plus.net*")) return strProxy;2447	if (shExpMatch(url, "http*://*.soundcloud.com*")) return strProxy;2448	if (shExpMatch(url, "http*://*.soundofhope.kr*")) return strProxy;2449	if (shExpMatch(url, "http*://*.soundofhope.org*")) return strProxy;2450	if (shExpMatch(url, "http*://*.soundofhope.org*")) return strProxy;2451	if (shExpMatch(url, "http*://*.soupofmedia.com*")) return strProxy;2452	if (shExpMatch(url, "http*://*.sourceforge.net*")) return strProxy;2453	if (shExpMatch(url, "http*://*.sourceforge.net*")) return strProxy;2454	if (shExpMatch(url, "http*://*.southnews.com.tw*")) return strProxy;2455	if (shExpMatch(url, "http*://*.sowers.org.hk*")) return strProxy;2456	if (shExpMatch(url, "http*://*.wlx.sowiki.net*")) return strProxy;2457	if (shExpMatch(url, "http*://*.space-scape.com*")) return strProxy;2458	if (shExpMatch(url, "http*://*.spankwire.com*")) return strProxy;2459	if (shExpMatch(url, "http*://*.spb.com*")) return strProxy;2460	if (shExpMatch(url, "http*://*.spencertipping.com*")) return strProxy;2461	if (shExpMatch(url, "http*://*.spinejs.com*")) return strProxy;2462	if (shExpMatch(url, "http*://*.sproutcore.com*")) return strProxy;2463	if (shExpMatch(url, "http*://*.squarespace.com*")) return strProxy;2464	if (shExpMatch(url, "http*://*.ssh91.com*")) return strProxy;2465	if (shExpMatch(url, "http*://*.stackfile.com*")) return strProxy;2466	if (shExpMatch(url, "http*://*.standupfortibet.org*")) return strProxy;2467	if (shExpMatch(url, "http*://*.usinfo.state.gov*")) return strProxy;2468	if (shExpMatch(url, "http*://*.starp2p.com*")) return strProxy;2469	if (shExpMatch(url, "http*://*.starp2p.com*")) return strProxy;2470	if (shExpMatch(url, "http*://*.startpage.com*")) return strProxy;2471	if (shExpMatch(url, "http*://*.state168.com*")) return strProxy;2472	if (shExpMatch(url, "http*://*.steel-storm.com*")) return strProxy;2473	if (shExpMatch(url, "http*://*.stepmania.com*")) return strProxy;2474	if (shExpMatch(url, "http*://*.sthoo.com*")) return strProxy;2475	if (shExpMatch(url, "http*://*.sthoo.com*")) return strProxy;2476	if (shExpMatch(url, "http*://*.stickam.com*")) return strProxy;2477	if (shExpMatch(url, "http*://*.stickeraction.com*")) return strProxy;2478	if (shExpMatch(url, "http*://*.stonegames.net*")) return strProxy;2479	if (shExpMatch(url, "http*://*.stoneip.info*")) return strProxy;2480	if (shExpMatch(url, "http*://*.storagenewsletter.com*")) return strProxy;2481	if (shExpMatch(url, "http*://*.stoptibetcrisis.net*")) return strProxy;2482	if (shExpMatch(url, "http*://*.stoptibetcrisis.net*")) return strProxy;2483	if (shExpMatch(url, "http*://*.storify.com*")) return strProxy;2484	if (shExpMatch(url, "http*://*.stoweboyd.com*")) return strProxy;2485	if (shExpMatch(url, "http*://*.streamingthe.net*")) return strProxy;2486	if (shExpMatch(url, "http*://*.cn.streetvoice.com*")) return strProxy;2487	if (shExpMatch(url, "http*://*.cn.streetvoice.com*")) return strProxy;2488	if (shExpMatch(url, "http*://*.cn2.streetvoice.com*")) return strProxy;2489	if (shExpMatch(url, "http*://*.tw.streetvoice.com*")) return strProxy;2490	if (shExpMatch(url, "http*://*.strongvpn.com*")) return strProxy;2491	if (shExpMatch(url, "http*://*.student.tw*")) return strProxy;2492	if (shExpMatch(url, "http*://*.studentsforafreetibet.org*")) return strProxy;2493	if (shExpMatch(url, "http*://*.stupidvideos.com*")) return strProxy;2494	if (shExpMatch(url, "http*://*.sugarsync.com*")) return strProxy;2495	if (shExpMatch(url, "http*://*.sugarsync.com*")) return strProxy;2496	if (shExpMatch(url, "http*://*.summify.com*")) return strProxy;2497	if (shExpMatch(url, "http*://*.sun1911.com*")) return strProxy;2498	if (shExpMatch(url, "http*://*.suyangg.com*")) return strProxy;2499	if (shExpMatch(url, "http*://*.suyangg.com*")) return strProxy;2500	if (shExpMatch(url, "http*://*.suoluo.org*")) return strProxy;2501	if (shExpMatch(url, "http*://*.api.supertweet.net*")) return strProxy;2502	if (shExpMatch(url, "http*://*.supertweet.net*")) return strProxy;2503	if (shExpMatch(url, "http*://*.surfeasy.com.au*")) return strProxy;2504	if (shExpMatch(url, "http*://*.surrenderat20.net*")) return strProxy;2505	if (shExpMatch(url, "http*://*.svwind.com*")) return strProxy;2506	if (shExpMatch(url, "http*://*.sweux.com*")) return strProxy;2507	if (shExpMatch(url, "http*://*.swift-tools.net*")) return strProxy;2508	if (shExpMatch(url, "http*://*.sydneytoday.com*")) return strProxy;2509	if (shExpMatch(url, "http*://*.sylfoundation.org*")) return strProxy;2510	if (shExpMatch(url, "http*://*.syncback.com*")) return strProxy;2511	if (shExpMatch(url, "http*://*.sysadmin1138.net*")) return strProxy;2512	if (shExpMatch(url, "http*://*.sysresccd.org*")) return strProxy;2513	if (shExpMatch(url, "http*://*.sytes.net*")) return strProxy;2514	if (shExpMatch(url, "http*://*.blog.syx86.com*")) return strProxy;2515	if (shExpMatch(url, "http*://*.blog.syx86.cn*")) return strProxy;2516	if (shExpMatch(url, "http*://*.szbbs.net*")) return strProxy;2517	if (shExpMatch(url, "http*://*.szetowah.org.hk*")) return strProxy;2518	if (shExpMatch(url, "http*://*.t35.com*")) return strProxy;2519	if (shExpMatch(url, "http*://*.t66y.com*")) return strProxy;2520	if (shExpMatch(url, "http*://*.t66y.com*")) return strProxy;2521	if (shExpMatch(url, "http*://*.t88.ca*")) return strProxy;2522	if (shExpMatch(url, "http*://*.taa-usa.org*")) return strProxy;2523	if (shExpMatch(url, "http*://*.taa-usa.org*")) return strProxy;2524	if (shExpMatch(url, "http*://*.tablesgenerator.com*")) return strProxy;2525	if (shExpMatch(url, "http*://*.tabtter.jp*")) return strProxy;2526	if (shExpMatch(url, "http*://*.tacem.org*")) return strProxy;2527	if (shExpMatch(url, "http*://*.tafaward.com*")) return strProxy;2528	if (shExpMatch(url, "http*://*.tagwalk.com*")) return strProxy;2529	if (shExpMatch(url, "http*://*.tagwalk.com*")) return strProxy;2530	if (shExpMatch(url, "http*://*.taipei.gov.tw*")) return strProxy;2531	if (shExpMatch(url, "http*://*.taipeisociety.org*")) return strProxy;2532	if (shExpMatch(url, "http*://*.taipeisociety.org*")) return strProxy;2533	if (shExpMatch(url, "http*://*.taiwandaily.net*")) return strProxy;2534	if (shExpMatch(url, "http*://*.taiwantt.org.tw*")) return strProxy;2535	if (shExpMatch(url, "http*://*.taiwandaily.net*")) return strProxy;2536	if (shExpMatch(url, "http*://*.taiwankiss.com*")) return strProxy;2537	if (shExpMatch(url, "http*://*.taiwannation.com*")) return strProxy;2538	if (shExpMatch(url, "http*://*.taiwannation.com.tw*")) return strProxy;2539	if (shExpMatch(url, "http*://*.taiwannews.com.tw*")) return strProxy;2540	if (shExpMatch(url, "http*://*.taiwanonline.cc*")) return strProxy;2541	if (shExpMatch(url, "http*://*.taiwantp.net*")) return strProxy;2542	if (shExpMatch(url, "http*://*.taiwanus.net*")) return strProxy;2543	if (shExpMatch(url, "http*://*.taiwanyes.com*")) return strProxy;2544	if (shExpMatch(url, "http*://*.taiwan-sex.com*")) return strProxy;2545	if (shExpMatch(url, "http*://*.talk853.com*")) return strProxy;2546	if (shExpMatch(url, "http*://*.tamiaode.tk*")) return strProxy;2547	if (shExpMatch(url, "http*://*.tanc.org*")) return strProxy;2548	if (shExpMatch(url, "http*://*.tangben.com*")) return strProxy;2549	if (shExpMatch(url, "http*://*.taolun.info*")) return strProxy;2550	if (shExpMatch(url, "http*://*.taolun.info*")) return strProxy;2551	if (shExpMatch(url, "http*://*.blog.taragana.com*")) return strProxy;2552	if (shExpMatch(url, "http*://*.taup.net*")) return strProxy;2553	if (shExpMatch(url, "http*://*.taup.org.tw*")) return strProxy;2554	if (shExpMatch(url, "http*://*.taweet.com*")) return strProxy;2555	if (shExpMatch(url, "http*://*.taweet.com*")) return strProxy;2556	if (shExpMatch(url, "http*://*.tbpic.info*")) return strProxy;2557	if (shExpMatch(url, "http*://*.tbsec.org*")) return strProxy;2558	if (shExpMatch(url, "http*://*.tbsn.org*")) return strProxy;2559	if (shExpMatch(url, "http*://*.tbsseattle.org*")) return strProxy;2560	if (shExpMatch(url, "http*://*.tchrd.org*")) return strProxy;2561	if (shExpMatch(url, "http*://*.tcno.net*")) return strProxy;2562	if (shExpMatch(url, "http*://*.teamseesmic.com*")) return strProxy;2563	if (shExpMatch(url, "http*://*.teashark.com*")) return strProxy;2564	if (shExpMatch(url, "http*://*.techlifeweb.com*")) return strProxy;2565	if (shExpMatch(url, "http*://*.techparaiso.com*")) return strProxy;2566	if (shExpMatch(url, "http*://*.teck.in*")) return strProxy;2567	if (shExpMatch(url, "http*://*.telecomspace.com*")) return strProxy;2568	if (shExpMatch(url, "http*://*.telegraph.co.uk*")) return strProxy;2569	if (shExpMatch(url, "http*://*.tenacy.com*")) return strProxy;2570	if (shExpMatch(url, "http*://*.theampfactory.com*")) return strProxy;2571	if (shExpMatch(url, "http*://*.theappleblog.com*")) return strProxy;2572	if (shExpMatch(url, "http*://*.theatrum-belli.com*")) return strProxy;2573	if (shExpMatch(url, "http*://*.thebodyshop-usa.com*")) return strProxy;2574	if (shExpMatch(url, "http*://*.theblemish.com*")) return strProxy;2575	if (shExpMatch(url, "http*://*.thebcomplex.com*")) return strProxy;2576	if (shExpMatch(url, "http*://*.thechinabeat.org*")) return strProxy;2577	if (shExpMatch(url, "http*://*.thechinastory.org*")) return strProxy;2578	if (shExpMatch(url, "http*://*.thedieline.com*")) return strProxy;2579	if (shExpMatch(url, "http*://*.thedw.us*")) return strProxy;2580	if (shExpMatch(url, "http*://*.thegatesnotes.com*")) return strProxy;2581	if (shExpMatch(url, "http*://*.thegioitinhoc.vn*")) return strProxy;2582	if (shExpMatch(url, "http*://*.thehots.info*")) return strProxy;2583	if (shExpMatch(url, "http*://*.thehousenews.com*")) return strProxy;2584	if (shExpMatch(url, "http*://*.thehun.net*")) return strProxy;2585	if (shExpMatch(url, "http*://*.thelifeyoucansave.com*")) return strProxy;2586	if (shExpMatch(url, "http*://*.thelius.org*")) return strProxy;2587	if (shExpMatch(url, "http*://*.thenewslens.com*")) return strProxy;2588	if (shExpMatch(url, "http*://*.thepiratebay.org*")) return strProxy;2589	if (shExpMatch(url, "http*://*.theqii.info*")) return strProxy;2590	if (shExpMatch(url, "http*://*.thereallove.kr*")) return strProxy;2591	if (shExpMatch(url, "http*://*.thesartorialist.com*")) return strProxy;2592	if (shExpMatch(url, "http*://*.thespeeder.com*")) return strProxy;2593	if (shExpMatch(url, "http*://*.thestandnews.com*")) return strProxy;2594	if (shExpMatch(url, "http*://*.thetibetpost.com*")) return strProxy;2595	if (shExpMatch(url, "http*://*.thetrotskymovie.com*")) return strProxy;2596	if (shExpMatch(url, "http*://*.thevivekspot.com*")) return strProxy;2597	if (shExpMatch(url, "http*://*.thewgo.org*")) return strProxy;2598	if (shExpMatch(url, "http*://*.thinkingtaiwan.com*")) return strProxy;2599	if (shExpMatch(url, "http*://*.thisav.com*")) return strProxy;2600	if (shExpMatch(url, "http*://*.thisav.com*")) return strProxy;2601	if (shExpMatch(url, "http*://*.thkphoto.com*")) return strProxy;2602	if (shExpMatch(url, "http*://*.thomasbernhard.org*")) return strProxy;2603	if (shExpMatch(url, "http*://*.threatchaos.com*")) return strProxy;2604	if (shExpMatch(url, "http*://*.throughnightsfire.com*")) return strProxy;2605	if (shExpMatch(url, "http*://*.thumbzilla.com*")) return strProxy;2606	if (shExpMatch(url, "http*://*.thywords.com*")) return strProxy;2607	if (shExpMatch(url, "http*://*.tiananmenmother.org*")) return strProxy;2608	if (shExpMatch(url, "http*://*.tiananmenuniv.com*")) return strProxy;2609	if (shExpMatch(url, "http*://*.tiananmenuniv.net*")) return strProxy;2610	if (shExpMatch(url, "http*://*.tiandixing.org*")) return strProxy;2611	if (shExpMatch(url, "http*://*.tianhuayuan.com*")) return strProxy;2612	if (shExpMatch(url, "http*://*.tianlawoffice.com*")) return strProxy;2613	if (shExpMatch(url, "http*://*.tiantibooks.org*")) return strProxy;2614	if (shExpMatch(url, "http*://*.tianzhu.org*")) return strProxy;2615	if (shExpMatch(url, "http*://*.tibet.at*")) return strProxy;2616	if (shExpMatch(url, "http*://*.tibet.com*")) return strProxy;2617	if (shExpMatch(url, "http*://*.tibet.com*")) return strProxy;2618	if (shExpMatch(url, "http*://*.tibet.net*")) return strProxy;2619	if (shExpMatch(url, "http*://*.tibet.net*")) return strProxy;2620	if (shExpMatch(url, "http*://*.tibet.org*")) return strProxy;2621	if (shExpMatch(url, "http*://*.tibet.org*")) return strProxy;2622	if (shExpMatch(url, "http*://*.tibet.org.tw*")) return strProxy;2623	if (shExpMatch(url, "http*://*.tibetalk.com*")) return strProxy;2624	if (shExpMatch(url, "http*://*.tibetanyouthcongress.org*")) return strProxy;2625	if (shExpMatch(url, "http*://*.tibetanyouthcongress.org*")) return strProxy;2626	if (shExpMatch(url, "http*://*.tibetcorps.org*")) return strProxy;2627	if (shExpMatch(url, "http*://*.tibetfund.org*")) return strProxy;2628	if (shExpMatch(url, "http*://*.tibetjustice.org*")) return strProxy;2629	if (shExpMatch(url, "http*://*.tibetoffice.org*")) return strProxy;2630	if (shExpMatch(url, "http*://*.tibetonline.com*")) return strProxy;2631	if (shExpMatch(url, "http*://*.tibetonline.com*")) return strProxy;2632	if (shExpMatch(url, "http*://*.tibetonline.tv*")) return strProxy;2633	if (shExpMatch(url, "http*://*.tibetonline.tv*")) return strProxy;2634	if (shExpMatch(url, "http*://*.tibetsun.com*")) return strProxy;2635	if (shExpMatch(url, "http*://*.tibetwrites.org*")) return strProxy;2636	if (shExpMatch(url, "http*://*.time.com*")) return strProxy;2637	if (shExpMatch(url, "http*://*.time.com*")) return strProxy;2638	if (shExpMatch(url, "http*://*.time.com*")) return strProxy;2639	if (shExpMatch(url, "http*://*.blog.tiney.com*")) return strProxy;2640	if (shExpMatch(url, "http*://*.tinychat.com*")) return strProxy;2641	if (shExpMatch(url, "http*://*.tinypaste.com*")) return strProxy;2642	if (shExpMatch(url, "http*://*.tidyread.com*")) return strProxy;2643	if (shExpMatch(url, "http*://*.tistory.com*")) return strProxy;2644	if (shExpMatch(url, "http*://*.tkcs-collins.com*")) return strProxy;2645	if (shExpMatch(url, "http*://*.tkforum.tk*")) return strProxy;2646	if (shExpMatch(url, "http*://*.tmagazine.com*")) return strProxy;2647	if (shExpMatch(url, "http*://*.tmagazine.com*")) return strProxy;2648	if (shExpMatch(url, "http*://*.tmi.me*")) return strProxy;2649	if (shExpMatch(url, "http*://*.tnaflix.com*")) return strProxy;2650	if (shExpMatch(url, "http*://*.tnaflix.com*")) return strProxy;2651	if (shExpMatch(url, "http*://*.togetter.com*")) return strProxy;2652	if (shExpMatch(url, "http*://*.tokyo-247.com*")) return strProxy;2653	if (shExpMatch(url, "http*://*.tokyo-hot.com*")) return strProxy;2654	if (shExpMatch(url, "http*://*.tokyocn.com*")) return strProxy;2655	if (shExpMatch(url, "http*://*.tono-oka.jp*")) return strProxy;2656	if (shExpMatch(url, "http*://*.tonyyan.net*")) return strProxy;2657	if (shExpMatch(url, "http*://*.toodoc.com*")) return strProxy;2658	if (shExpMatch(url, "http*://*.toonel.net*")) return strProxy;2659	if (shExpMatch(url, "http*://*.topnews.in*")) return strProxy;2660	if (shExpMatch(url, "http*://*.topshare.us*")) return strProxy;2661	if (shExpMatch(url, "http*://*.topshareware.com*")) return strProxy;2662	if (shExpMatch(url, "http*://*.topstyle4.com*")) return strProxy;2663	if (shExpMatch(url, "http*://*.topsy.com*")) return strProxy;2664	if (shExpMatch(url, "http*://*.topsy.com*")) return strProxy;2665	if (shExpMatch(url, "http*://*.tora.to*")) return strProxy;2666	if (shExpMatch(url, "http*://*.torproject.org*")) return strProxy;2667	if (shExpMatch(url, "http*://*.torproject.org*")) return strProxy;2668	if (shExpMatch(url, "http*://*.torrentcrazy.com*")) return strProxy;2669	if (shExpMatch(url, "http*://*.torrentcrazy.com*")) return strProxy;2670	if (shExpMatch(url, "http*://*.torrentproject.se*")) return strProxy;2671	if (shExpMatch(url, "http*://*.torvpn.com*")) return strProxy;2672	if (shExpMatch(url, "http*://*.touch99.com*")) return strProxy;2673	if (shExpMatch(url, "http*://*.toutfr.com*")) return strProxy;2674	if (shExpMatch(url, "http*://*.tpi.org.tw*")) return strProxy;2675	if (shExpMatch(url, "http*://*.tpi.org.tw*")) return strProxy;2676	if (shExpMatch(url, "http*://*.transgressionism.org*")) return strProxy;2677	if (shExpMatch(url, "http*://*.transparency.org*")) return strProxy;2678	if (shExpMatch(url, "http*://*.travelinlocal.com*")) return strProxy;2679	if (shExpMatch(url, "http*://*.treemall.com.tw*")) return strProxy;2680	if (shExpMatch(url, "http*://*.trendsmap.com*")) return strProxy;2681	if (shExpMatch(url, "http*://*.trendsmap.com*")) return strProxy;2682	if (shExpMatch(url, "http*://*.trialofccp.org*")) return strProxy;2683	if (shExpMatch(url, "http*://*.trialofccp.org*")) return strProxy;2684	if (shExpMatch(url, "http*://*.tripod.com*")) return strProxy;2685	if (shExpMatch(url, "http*://*.trouw.nl*")) return strProxy;2686	if (shExpMatch(url, "http*://*.trt.net.tr*")) return strProxy;2687	if (shExpMatch(url, "http*://*.trtc.com.tw*")) return strProxy;2688	if (shExpMatch(url, "http*://*.trulyergonomic.com*")) return strProxy;2689	if (shExpMatch(url, "http*://*.trustedbi.com*")) return strProxy;2690	if (shExpMatch(url, "http*://*.truth101.co.tv*")) return strProxy;2691	if (shExpMatch(url, "http*://*.truth101.co.tv*")) return strProxy;2692	if (shExpMatch(url, "http*://*.truthcn.com*")) return strProxy;2693	if (shExpMatch(url, "http*://*.truveo.com*")) return strProxy;2694	if (shExpMatch(url, "http*://*.tsemtulku.com*")) return strProxy;2695	if (shExpMatch(url, "http*://*.tsquare.tv*")) return strProxy;2696	if (shExpMatch(url, "http*://*.tsu.org.tw*")) return strProxy;2697	if (shExpMatch(url, "http*://*.tsunagarumon.com*")) return strProxy;2698	if (shExpMatch(url, "http*://*.tsuru-bird.net*")) return strProxy;2699	if (shExpMatch(url, "http*://*.tsctv.net*")) return strProxy;2700	if (shExpMatch(url, "http*://*.tt-rss.org*")) return strProxy;2701	if (shExpMatch(url, "http*://*.tt1069.com*")) return strProxy;2702	if (shExpMatch(url, "http*://*.tttan.com*")) return strProxy;2703	if (shExpMatch(url, "http*://*.tttan.com*")) return strProxy;2704	if (shExpMatch(url, "http*://*.bb.ttv.com.tw*")) return strProxy;2705	if (shExpMatch(url, "http*://*.tu8964.com*")) return strProxy;2706	if (shExpMatch(url, "http*://*.tuanzt.com*")) return strProxy;2707	if (shExpMatch(url, "http*://*.tube.com*")) return strProxy;2708	if (shExpMatch(url, "http*://*.tube8.com*")) return strProxy;2709	if (shExpMatch(url, "http*://*.tube8.com*")) return strProxy;2710	if (shExpMatch(url, "http*://*.tubecao.com*")) return strProxy;2711	if (shExpMatch(url, "http*://*.tubewolf.com*")) return strProxy;2712	if (shExpMatch(url, "http*://*.tuidang.net*")) return strProxy;2713	if (shExpMatch(url, "http*://*.tuidang.org*")) return strProxy;2714	if (shExpMatch(url, "http*://*.bbs.tuitui.info*")) return strProxy;2715	if (shExpMatch(url, "http*://*.tumutanzi.com*")) return strProxy;2716	if (shExpMatch(url, "http*://*.tunein.com*")) return strProxy;2717	if (shExpMatch(url, "http*://*.tunein.com*")) return strProxy;2718	if (shExpMatch(url, "http*://*.tunnelbear.com*")) return strProxy;2719	if (shExpMatch(url, "http*://*.tuo8.hk*")) return strProxy;2720	if (shExpMatch(url, "http*://*.turbobit.net*")) return strProxy;2721	if (shExpMatch(url, "http*://*.turbobit.net*")) return strProxy;2722	if (shExpMatch(url, "http*://*.turningtorso.com*")) return strProxy;2723	if (shExpMatch(url, "http*://*.tuxtraining.com*")) return strProxy;2724	if (shExpMatch(url, "http*://*.301works.org*")) return strProxy;2725	if (shExpMatch(url, "http*://*.365singles.com.ar*")) return strProxy;2726	if (shExpMatch(url, "http*://*.all-that-is-interesting.com*")) return strProxy;2727	if (shExpMatch(url, "http*://*.art-or-porn.com*")) return strProxy;2728	if (shExpMatch(url, "http*://*.news.atebits.com*")) return strProxy;2729	if (shExpMatch(url, "http*://*.tumblr.awflasher.com*")) return strProxy;2730	if (shExpMatch(url, "http*://*.badassjs.com*")) return strProxy;2731	if (shExpMatch(url, "http*://*.basetimesheightdividedby2.com*")) return strProxy;2732	if (shExpMatch(url, "http*://*.benjaminste.in*")) return strProxy;2733	if (shExpMatch(url, "http*://*.blog.birdhouseapp.com*")) return strProxy;2734	if (shExpMatch(url, "http*://*.bobulate.com*")) return strProxy;2735	if (shExpMatch(url, "http*://*.bonjourlesgeeks.com*")) return strProxy;2736	if (shExpMatch(url, "http*://*.bookshelfporn.com*")) return strProxy;2737	if (shExpMatch(url, "http*://*.blog.boxcar.io*")) return strProxy;2738	if (shExpMatch(url, "http*://*.blog.bitly.com*")) return strProxy;2739	if (shExpMatch(url, "http*://*.chevronwp7.com*")) return strProxy;2740	if (shExpMatch(url, "http*://*.clientsfromhell.net*")) return strProxy;2741	if (shExpMatch(url, "http*://*.codeboxapp.com*")) return strProxy;2742	if (shExpMatch(url, "http*://*.cookingtothegoodlife.com*")) return strProxy;2743	if (shExpMatch(url, "http*://*.cubicle17.com*")) return strProxy;2744	if (shExpMatch(url, "http*://*.photos.dailyme.com*")) return strProxy;2745	if (shExpMatch(url, "http*://*.davidslog.com*")) return strProxy;2746	if (shExpMatch(url, "http*://*.blog.davidziegler.net*")) return strProxy;2747	if (shExpMatch(url, "http*://*.blog.dayoneapp.com*")) return strProxy;2748	if (shExpMatch(url, "http*://*.drewolanoff.com*")) return strProxy;2749	if (shExpMatch(url, "http*://*.blog.dribbble.com*")) return strProxy;2750	if (shExpMatch(url, "http*://*.chaos.e-spacy.com*")) return strProxy;2751	if (shExpMatch(url, "http*://*.eamonnbrennan.com*")) return strProxy;2752	if (shExpMatch(url, "http*://*.everyday-carry.com*")) return strProxy;2753	if (shExpMatch(url, "http*://*.eyespirit.info*")) return strProxy;2754	if (shExpMatch(url, "http*://*.life.fly4ever.me*")) return strProxy;2755	if (shExpMatch(url, "http*://*.fredwilson.vc*")) return strProxy;2756	if (shExpMatch(url, "http*://*.fuckgfw.com*")) return strProxy;2757	if (shExpMatch(url, "http*://*.geekmade.co.uk*")) return strProxy;2758	if (shExpMatch(url, "http*://*.generesis.com*")) return strProxy;2759	if (shExpMatch(url, "http*://*.news.ghostery.com*")) return strProxy;2760	if (shExpMatch(url, "http*://*.givemesomethingtoread.com*")) return strProxy;2761	if (shExpMatch(url, "http*://*.blog.gowalla.com*")) return strProxy;2762	if (shExpMatch(url, "http*://*.heiyo.info*")) return strProxy;2763	if (shExpMatch(url, "http*://*.hellonewyork.us*")) return strProxy;2764	if (shExpMatch(url, "http*://*.blog.hotpotato.com*")) return strProxy;2765	if (shExpMatch(url, "http*://*.ialmostlaugh.com*")) return strProxy;2766	if (shExpMatch(url, "http*://*.blog.ifttt.com*")) return strProxy;2767	if (shExpMatch(url, "http*://*.blog.instagram.com*")) return strProxy;2768	if (shExpMatch(url, "http*://*.blog.instapaper.com*")) return strProxy;2769	if (shExpMatch(url, "http*://*.interestinglaugh.com*")) return strProxy;2770	if (shExpMatch(url, "http*://*.blog.iphone-dev.org*")) return strProxy;2771	if (shExpMatch(url, "http*://*.jayparkinsonmd.com*")) return strProxy;2772	if (shExpMatch(url, "http*://*.blog.joeyrobert.org*")) return strProxy;2773	if (shExpMatch(url, "http*://*.kt.kcome.org*")) return strProxy;2774	if (shExpMatch(url, "http*://*.my.keso.cn*")) return strProxy;2775	if (shExpMatch(url, "http*://*.blog.kickstarter.com*")) return strProxy;2776	if (shExpMatch(url, "http*://*.blog.kl.am*")) return strProxy;2777	if (shExpMatch(url, "http*://*.blog.klip.me*")) return strProxy;2778	if (shExpMatch(url, "http*://*.t.kun.im*")) return strProxy;2779	if (shExpMatch(url, "http*://*.blog.lightbox.com*")) return strProxy;2780	if (shExpMatch(url, "http*://*.littlebigdetails.com*")) return strProxy;2781	if (shExpMatch(url, "http*://*.lovequicksilver.com*")) return strProxy;2782	if (shExpMatch(url, "http*://*.lyricsquote.com*")) return strProxy;2783	if (shExpMatch(url, "http*://*.madmenunbuttoned.com*")) return strProxy;2784	if (shExpMatch(url, "http*://*.marco.org*")) return strProxy;2785	if (shExpMatch(url, "http*://*.minimalmac.com*")) return strProxy;2786	if (shExpMatch(url, "http*://*.mixedmedialabs.com*")) return strProxy;2787	if (shExpMatch(url, "http*://*.modfetish.com*")) return strProxy;2788	if (shExpMatch(url, "http*://*.blog.mongodb.org*")) return strProxy;2789	if (shExpMatch(url, "http*://*.navigeaters.com*")) return strProxy;2790	if (shExpMatch(url, "http*://*.london.neighborhoodr.com*")) return strProxy;2791	if (shExpMatch(url, "http*://*.blog.path.com*")) return strProxy;2792	if (shExpMatch(url, "http*://*.parislemon.com*")) return strProxy;2793	if (shExpMatch(url, "http*://*.blog.pikchur.com*")) return strProxy;2794	if (shExpMatch(url, "http*://*.blog.rockmelt.com*")) return strProxy;2795	if (shExpMatch(url, "http*://*.blog.romanandreg.com*")) return strProxy;2796	if (shExpMatch(url, "http*://*.solozorro.tk*")) return strProxy;2797	if (shExpMatch(url, "http*://*.blog.sparrowmailapp.com*")) return strProxy;2798	if (shExpMatch(url, "http*://*.stuffimreading.com*")) return strProxy;2799	if (shExpMatch(url, "http*://*.blog.summify.com*")) return strProxy;2800	if (shExpMatch(url, "http*://*.thedailywh.at*")) return strProxy;2801	if (shExpMatch(url, "http*://*.theinternetwishlist.com*")) return strProxy;2802	if (shExpMatch(url, "http*://*.thisiswhyyouarefat.com*")) return strProxy;2803	if (shExpMatch(url, "http*://*.tiffanyarment.com*")) return strProxy;2804	if (shExpMatch(url, "http*://*.tjholowaychuk.com*")) return strProxy;2805	if (shExpMatch(url, "http*://*.tomsc.com*")) return strProxy;2806	if (shExpMatch(url, "http*://*.blog.topify.com*")) return strProxy;2807	if (shExpMatch(url, "http*://*.thehungrydudes.com*")) return strProxy;2808	if (shExpMatch(url, "http*://*.tumblweed.org*")) return strProxy;2809	if (shExpMatch(url, "http*://*.status.twhirl.org*")) return strProxy;2810	if (shExpMatch(url, "http*://*.blog.usa.gov*")) return strProxy;2811	if (shExpMatch(url, "http*://*.photo.utom.us*")) return strProxy;2812	if (shExpMatch(url, "http*://*.v-state.org*")) return strProxy;2813	if (shExpMatch(url, "http*://*.wellplacedpixels.com*")) return strProxy;2814	if (shExpMatch(url, "http*://*.whydidyoubuymethat.com*")) return strProxy;2815	if (shExpMatch(url, "http*://*.wordboner.com*")) return strProxy;2816	if (shExpMatch(url, "http*://*.wordsandturds.com*")) return strProxy;2817	if (shExpMatch(url, "http*://*.worstthingieverate.com*")) return strProxy;2818	if (shExpMatch(url, "http*://*.xmusic.fm*")) return strProxy;2819	if (shExpMatch(url, "http*://*.xuzhuoer.com*")) return strProxy;2820	if (shExpMatch(url, "http*://*.bd.zhe.la*")) return strProxy;2821	if (shExpMatch(url, "http*://*.cocoa.zonble.net*")) return strProxy;2822	if (shExpMatch(url, "http*://*.tv.com*")) return strProxy;2823	if (shExpMatch(url, "http*://*.tv.com*")) return strProxy;2824	if (shExpMatch(url, "http*://*.tv.com*")) return strProxy;2825	if (shExpMatch(url, "http*://*.tv-intros.com*")) return strProxy;2826	if (shExpMatch(url, "http*://*.tvants.com*")) return strProxy;2827	if (shExpMatch(url, "http*://*.forum.tvb.com*")) return strProxy;2828	if (shExpMatch(url, "http*://*.tvboxnow.com*")) return strProxy;2829	if (shExpMatch(url, "http*://*.tvider.com*")) return strProxy;2830	if (shExpMatch(url, "http*://*.tvunetworks.com*")) return strProxy;2831	if (shExpMatch(url, "http*://*.tw-npo.org*")) return strProxy;2832	if (shExpMatch(url, "http*://*.twapperkeeper.com*")) return strProxy;2833	if (shExpMatch(url, "http*://*.twapperkeeper.com*")) return strProxy;2834	if (shExpMatch(url, "http*://*.twaud.io*")) return strProxy;2835	if (shExpMatch(url, "http*://*.twaud.io*")) return strProxy;2836	if (shExpMatch(url, "http*://*.twbbs.net.tw*")) return strProxy;2837	if (shExpMatch(url, "http*://*.twbbs.org*")) return strProxy;2838	if (shExpMatch(url, "http*://*.twbbs.tw*")) return strProxy;2839	if (shExpMatch(url, "http*://*.twblogger.com*")) return strProxy;2840	if (shExpMatch(url, "http*://*.tweepmag.com*")) return strProxy;2841	if (shExpMatch(url, "http*://*.tweepml.org*")) return strProxy;2842	if (shExpMatch(url, "http*://*.tweepml.org*")) return strProxy;2843	if (shExpMatch(url, "http*://*.tweetbackup.com*")) return strProxy;2844	if (shExpMatch(url, "http*://*.tweetbackup.com*")) return strProxy;2845	if (shExpMatch(url, "http*://*.tweetboard.com*")) return strProxy;2846	if (shExpMatch(url, "http*://*.tweetboard.com*")) return strProxy;2847	if (shExpMatch(url, "http*://*.tweetboner.biz*")) return strProxy;2848	if (shExpMatch(url, "http*://*.tweetboner.biz*")) return strProxy;2849	if (shExpMatch(url, "http*://*.tweetdeck.com*")) return strProxy;2850	if (shExpMatch(url, "http*://*.tweetdeck.com*")) return strProxy;2851	if (shExpMatch(url, "http*://*.deck.ly*")) return strProxy;2852	if (shExpMatch(url, "http*://*.mtw.tl*")) return strProxy;2853	if (shExpMatch(url, "http*://*.tweetedtimes.com*")) return strProxy;2854	if (shExpMatch(url, "http*://*.tweetmylast.fm*")) return strProxy;2855	if (shExpMatch(url, "http*://*.tweetphoto.com*")) return strProxy;2856	if (shExpMatch(url, "http*://*.tweetphoto.com*")) return strProxy;2857	if (shExpMatch(url, "http*://*.tweetrans.com*")) return strProxy;2858	if (shExpMatch(url, "http*://*.tweetree.com*")) return strProxy;2859	if (shExpMatch(url, "http*://*.tweetree.com*")) return strProxy;2860	if (shExpMatch(url, "http*://*.tweetwally.com*")) return strProxy;2861	if (shExpMatch(url, "http*://*.tweetymail.com*")) return strProxy;2862	if (shExpMatch(url, "http*://*.twftp.org*")) return strProxy;2863	if (shExpMatch(url, "http*://*.twibase.com*")) return strProxy;2864	if (shExpMatch(url, "http*://*.twibble.de*")) return strProxy;2865	if (shExpMatch(url, "http*://*.twibble.de*")) return strProxy;2866	if (shExpMatch(url, "http*://*.twibbon.com*")) return strProxy;2867	if (shExpMatch(url, "http*://*.twibs.com*")) return strProxy;2868	if (shExpMatch(url, "http*://*.twicsy.com*")) return strProxy;2869	if (shExpMatch(url, "http*://*.twifan.com*")) return strProxy;2870	if (shExpMatch(url, "http*://*.twifan.com*")) return strProxy;2871	if (shExpMatch(url, "http*://*.twiffo.com*")) return strProxy;2872	if (shExpMatch(url, "http*://*.twiffo.com*")) return strProxy;2873	if (shExpMatch(url, "http*://*.twilog.org*")) return strProxy;2874	if (shExpMatch(url, "http*://*.twimbow.com*")) return strProxy;2875	if (shExpMatch(url, "http*://*.twimbow.com*")) return strProxy;2876	if (shExpMatch(url, "http*://*.twindexx.com*")) return strProxy;2877	if (shExpMatch(url, "http*://*.twipple.jp*")) return strProxy;2878	if (shExpMatch(url, "http*://*.twipple.jp*")) return strProxy;2879	if (shExpMatch(url, "http*://*.twip.me*")) return strProxy;2880	if (shExpMatch(url, "http*://*.twistar.cc*")) return strProxy;2881	if (shExpMatch(url, "http*://*.twister.net.co*")) return strProxy;2882	if (shExpMatch(url, "http*://*.twisterio.com*")) return strProxy;2883	if (shExpMatch(url, "http*://*.twisternow.com*")) return strProxy;2884	if (shExpMatch(url, "http*://*.twistory.net*")) return strProxy;2885	if (shExpMatch(url, "http*://*.twitbrowser.net*")) return strProxy;2886	if (shExpMatch(url, "http*://*.twitcause.com*")) return strProxy;2887	if (shExpMatch(url, "http*://*.twitgether.com*")) return strProxy;2888	if (shExpMatch(url, "http*://*.twiggit.org*")) return strProxy;2889	if (shExpMatch(url, "http*://*.twitgoo.com*")) return strProxy;2890	if (shExpMatch(url, "http*://*.twitiq.com*")) return strProxy;2891	if (shExpMatch(url, "http*://*.twitiq.com*")) return strProxy;2892	if (shExpMatch(url, "http*://*.twitlonger.com*")) return strProxy;2893	if (shExpMatch(url, "http*://*.twitlonger.com*")) return strProxy;2894	if (shExpMatch(url, "http*://*.tl.gd*")) return strProxy;2895	if (shExpMatch(url, "http*://*.twitoaster.com*")) return strProxy;2896	if (shExpMatch(url, "http*://*.twitoaster.com*")) return strProxy;2897	if (shExpMatch(url, "http*://*.twitonmsn.com*")) return strProxy;2898	if (shExpMatch(url, "http*://*.twitpic.com*")) return strProxy;2899	if (shExpMatch(url, "http*://*.twitpic.com*")) return strProxy;2900	if (shExpMatch(url, "http*://*.twit2d.com*")) return strProxy;2901	if (shExpMatch(url, "http*://*.twit2d.com*")) return strProxy;2902	if (shExpMatch(url, "http*://*.twitstat.com*")) return strProxy;2903	if (shExpMatch(url, "http*://*.twitstat.com*")) return strProxy;2904	if (shExpMatch(url, "http*://*.firstfivefollowers.com*")) return strProxy;2905	if (shExpMatch(url, "http*://*.retweeteffect.com*")) return strProxy;2906	if (shExpMatch(url, "http*://*.tweeplike.me*")) return strProxy;2907	if (shExpMatch(url, "http*://*.tweepguide.com*")) return strProxy;2908	if (shExpMatch(url, "http*://*.turbotwitter.com*")) return strProxy;2909	if (shExpMatch(url, "http*://*.twitvid.com*")) return strProxy;2910	if (shExpMatch(url, "http*://*.twitvid.com*")) return strProxy;2911	if (shExpMatch(url, "http*://*.199.59.148.20*")) return strProxy;2912	if (shExpMatch(url, "http*://*.t.co*")) return strProxy;2913	if (shExpMatch(url, "http*://*.t.co*")) return strProxy;2914	if (shExpMatch(url, "http*://*.twt.tl*")) return strProxy;2915	if (shExpMatch(url, "http*://*.twittbot.net*")) return strProxy;2916	if (shExpMatch(url, "http*://*.twitter.com*")) return strProxy;2917	if (shExpMatch(url, "http*://*.twitter.com*")) return strProxy;2918	if (shExpMatch(url, "http*://*.twitter.jp*")) return strProxy;2919	if (shExpMatch(url, "http*://*.twttr.com*")) return strProxy;2920	if (shExpMatch(url, "http*://*.twitter4j.org*")) return strProxy;2921	if (shExpMatch(url, "http*://*.twittercounter.com*")) return strProxy;2922	if (shExpMatch(url, "http*://*.twittercounter.com*")) return strProxy;2923	if (shExpMatch(url, "http*://*.twitterfeed.com*")) return strProxy;2924	if (shExpMatch(url, "http*://*.twittergadget.com*")) return strProxy;2925	if (shExpMatch(url, "http*://*.twittergadget.com*")) return strProxy;2926	if (shExpMatch(url, "http*://*.twitterkr.com*")) return strProxy;2927	if (shExpMatch(url, "http*://*.twitterkr.com*")) return strProxy;2928	if (shExpMatch(url, "http*://*.twittermail.com*")) return strProxy;2929	if (shExpMatch(url, "http*://*.twittertim.es*")) return strProxy;2930	if (shExpMatch(url, "http*://*.twittertim.es*")) return strProxy;2931	if (shExpMatch(url, "http*://*.twitthat.com*")) return strProxy;2932	if (shExpMatch(url, "http*://*.twitturk.com*")) return strProxy;2933	if (shExpMatch(url, "http*://*.twitturly.com*")) return strProxy;2934	if (shExpMatch(url, "http*://*.twitturly.com*")) return strProxy;2935	if (shExpMatch(url, "http*://*.twitzap.com*")) return strProxy;2936	if (shExpMatch(url, "http*://*.twiyia.com*")) return strProxy;2937	if (shExpMatch(url, "http*://*.twstar.net*")) return strProxy;2938	if (shExpMatch(url, "http*://*.twtkr.com*")) return strProxy;2939	if (shExpMatch(url, "http*://*.twtkr.com*")) return strProxy;2940	if (shExpMatch(url, "http*://*.twimg.com*")) return strProxy;2941	if (shExpMatch(url, "http*://*.twtrland.com*")) return strProxy;2942	if (shExpMatch(url, "http*://*.twurl.nl*")) return strProxy;2943	if (shExpMatch(url, "http*://*.twyac.org*")) return strProxy;2944	if (shExpMatch(url, "http*://*.twyac.org*")) return strProxy;2945	if (shExpMatch(url, "http*://*.tycool.com*")) return strProxy;2946	if (shExpMatch(url, "http*://*.tycool.com*")) return strProxy;2947	if (shExpMatch(url, "http*://*.tzangms.com*")) return strProxy;2948	if (shExpMatch(url, "http*://*.typepad.com*")) return strProxy;2949	if (shExpMatch(url, "http*://*.blog.expofutures.com*")) return strProxy;2950	if (shExpMatch(url, "http*://*.legaltech.law.com*")) return strProxy;2951	if (shExpMatch(url, "http*://*.latimesblogs.latimes.com*")) return strProxy;2952	if (shExpMatch(url, "http*://*.blog.palm.com*")) return strProxy;2953	if (shExpMatch(url, "http*://*.blogs.tampabay.com*")) return strProxy;2954	if (shExpMatch(url, "http*://*.contests.twilio.com*")) return strProxy;2955	if (shExpMatch(url, "http*://*.embr.in*")) return strProxy;2956	if (shExpMatch(url, "http*://*.embr.in*")) return strProxy;2957	if (shExpMatch(url, "http*://*.guomin.us*")) return strProxy;2958	if (shExpMatch(url, "http*://*.uberproxy.net*")) return strProxy;2959	if (shExpMatch(url, "http*://*.srcf.ucam.org*")) return strProxy;2960	if (shExpMatch(url, "http*://*.ucdc1998.org*")) return strProxy;2961	if (shExpMatch(url, "http*://*.uderzo.it*")) return strProxy;2962	if (shExpMatch(url, "http*://*.udn.com*")) return strProxy;2963	if (shExpMatch(url, "http*://*.udn.com*")) return strProxy;2964	if (shExpMatch(url, "http*://*.ufreevpn.com*")) return strProxy;2965	if (shExpMatch(url, "http*://*.ugo.com*")) return strProxy;2966	if (shExpMatch(url, "http*://*.uhrp.org*")) return strProxy;2967	if (shExpMatch(url, "http*://*.uighur.nl*")) return strProxy;2968	if (shExpMatch(url, "http*://*.uighur.nl*")) return strProxy;2969	if (shExpMatch(url, "http*://*.uighurbiz.net*")) return strProxy;2970	if (shExpMatch(url, "http*://*.ulike.net*")) return strProxy;2971	if (shExpMatch(url, "http*://*.ukliferadio.co.uk*")) return strProxy;2972	if (shExpMatch(url, "http*://*.ukliferadio.co.uk*")) return strProxy;2973	if (shExpMatch(url, "http*://*.ultravpn.fr*")) return strProxy;2974	if (shExpMatch(url, "http*://*.ultravpn.fr*")) return strProxy;2975	if (shExpMatch(url, "http*://*.ultraxs.com*")) return strProxy;2976	if (shExpMatch(url, "http*://*.unblock.cn.com*")) return strProxy;2977	if (shExpMatch(url, "http*://*.unblocksit.es*")) return strProxy;2978	if (shExpMatch(url, "http*://*.uncyclomedia.org*")) return strProxy;2979	if (shExpMatch(url, "http*://*.uncyclopedia.info*")) return strProxy;2980	if (shExpMatch(url, "http*://*.uncyclopedia.tw*")) return strProxy;2981	if (shExpMatch(url, "http*://*.unholyknight.com*")) return strProxy;2982	if (shExpMatch(url, "http*://*.uni.cc*")) return strProxy;2983	if (shExpMatch(url, "http*://*.unicode.org*")) return strProxy;2984	if (shExpMatch(url, "http*://*.uniteddaily.com.my*")) return strProxy;2985	if (shExpMatch(url, "http*://*.unix100.com*")) return strProxy;2986	if (shExpMatch(url, "http*://*.unknownspace.org*")) return strProxy;2987	if (shExpMatch(url, "http*://*.unpo.org*")) return strProxy;2988	if (shExpMatch(url, "http*://*.uocn.org*")) return strProxy;2989	if (shExpMatch(url, "http*://*.tor.updatestar.com*")) return strProxy;2990	if (shExpMatch(url, "http*://*.upholdjustice.org*")) return strProxy;2991	if (shExpMatch(url, "http*://*.upload4u.info*")) return strProxy;2992	if (shExpMatch(url, "http*://*.uploaded.net*")) return strProxy;2993	if (shExpMatch(url, "http*://*.uploaded.to*")) return strProxy;2994	if (shExpMatch(url, "http*://*.uploaded.to*")) return strProxy;2995	if (shExpMatch(url, "http*://*.uploadstation.com*")) return strProxy;2996	if (shExpMatch(url, "http*://*.urbanoutfitters.com*")) return strProxy;2997	if (shExpMatch(url, "http*://*.myshare.url.com.tw*")) return strProxy;2998	if (shExpMatch(url, "http*://*.urlborg.com*")) return strProxy;2999	if (shExpMatch(url, "http*://*.urlparser.com*")) return strProxy;3000	if (shExpMatch(url, "http*://*.us.to*")) return strProxy;3001	if (shExpMatch(url, "http*://*.usacn.com*")) return strProxy;3002	if (shExpMatch(url, "http*://*.beta.usejump.com*")) return strProxy;3003	if (shExpMatch(url, "http*://*.usfk.mil*")) return strProxy;3004	if (shExpMatch(url, "http*://*.earthquake.usgs.gov*")) return strProxy;3005	if (shExpMatch(url, "http*://*.usmc.mil*")) return strProxy;3006	if (shExpMatch(url, "http*://*.tarr.uspto.gov*")) return strProxy;3007	if (shExpMatch(url, "http*://*.tsdr.uspto.gov*")) return strProxy;3008	if (shExpMatch(url, "http*://*.ustream.tv*")) return strProxy;3009	if (shExpMatch(url, "http*://*.ustream.tv*")) return strProxy;3010	if (shExpMatch(url, "http*://*.ustwrap.info*")) return strProxy;3011	if (shExpMatch(url, "http*://*.usus.cc*")) return strProxy;3012	if (shExpMatch(url, "http*://*.uwants.com*")) return strProxy;3013	if (shExpMatch(url, "http*://*.uwants.net*")) return strProxy;3014	if (shExpMatch(url, "http*://*.uyghur-j.org*")) return strProxy;3015	if (shExpMatch(url, "http*://*.uyghuramerican.org*")) return strProxy;3016	if (shExpMatch(url, "http*://*.uyghurcanadiansociety.org*")) return strProxy;3017	if (shExpMatch(url, "http*://*.uyghurensemble.co.uk*")) return strProxy;3018	if (shExpMatch(url, "http*://*.uyghurcongress.org*")) return strProxy;3019	if (shExpMatch(url, "http*://*.uyghurpen.org*")) return strProxy;3020	if (shExpMatch(url, "http*://*.uygur.org*")) return strProxy;3021	if (shExpMatch(url, "http*://*.uymaarip.com*")) return strProxy;3022	if (shExpMatch(url, "http*://*.vaayoo.com*")) return strProxy;3023	if (shExpMatch(url, "http*://*.van698.com*")) return strProxy;3024	if (shExpMatch(url, "http*://*.vanemu.cn*")) return strProxy;3025	if (shExpMatch(url, "http*://*.vanilla-jp.com*")) return strProxy;3026	if (shExpMatch(url, "http*://*.vansky.com*")) return strProxy;3027	if (shExpMatch(url, "http*://*.vcf-online.org*")) return strProxy;3028	if (shExpMatch(url, "http*://*.vcfbuilder.org*")) return strProxy;3029	if (shExpMatch(url, "http*://*.velkaepocha.sk*")) return strProxy;3030	if (shExpMatch(url, "http*://*.venbbs.com*")) return strProxy;3031	if (shExpMatch(url, "http*://*.venchina.com*")) return strProxy;3032	if (shExpMatch(url, "http*://*.veoh.com*")) return strProxy;3033	if (shExpMatch(url, "http*://*.verizon.net*")) return strProxy;3034	if (shExpMatch(url, "http*://*.verybs.com*")) return strProxy;3035	if (shExpMatch(url, "http*://*.vft.com.tw*")) return strProxy;3036	if (shExpMatch(url, "http*://*.videobam.com*")) return strProxy;3037	if (shExpMatch(url, "http*://*.videobam.com*")) return strProxy;3038	if (shExpMatch(url, "http*://*.videomo.com*")) return strProxy;3039	if (shExpMatch(url, "http*://*.vidoemo.com*")) return strProxy;3040	if (shExpMatch(url, "http*://*.viki.com*")) return strProxy;3041	if (shExpMatch(url, "http*://*.vimeo.com*")) return strProxy;3042	if (shExpMatch(url, "http*://*.vimgolf.com*")) return strProxy;3043	if (shExpMatch(url, "http*://*.vimperator.org*")) return strProxy;3044	if (shExpMatch(url, "http*://*.vincnd.com*")) return strProxy;3045	if (shExpMatch(url, "http*://*.vinniev.com*")) return strProxy;3046	if (shExpMatch(url, "http*://*.ny.visiontimes.com*")) return strProxy;3047	if (shExpMatch(url, "http*://*.vjmedia.com.hk*")) return strProxy;3048	if (shExpMatch(url, "http*://*.vllcs.org*")) return strProxy;3049	if (shExpMatch(url, "http*://*.vmixcore.com*")) return strProxy;3050	if (shExpMatch(url, "http*://*.cn.voa.mobi*")) return strProxy;3051	if (shExpMatch(url, "http*://*.tw.voa.mobi*")) return strProxy;3052	if (shExpMatch(url, "http*://*.voachineseblog.com*")) return strProxy;3053	if (shExpMatch(url, "http*://*.voachineseblog.com*")) return strProxy;3054	if (shExpMatch(url, "http*://*.voagd.com*")) return strProxy;3055	if (shExpMatch(url, "http*://*.voacantonese.com*")) return strProxy;3056	if (shExpMatch(url, "http*://*.voacantonese.com*")) return strProxy;3057	if (shExpMatch(url, "http*://*.voachinese.com*")) return strProxy;3058	if (shExpMatch(url, "http*://*.voachinese.com*")) return strProxy;3059	if (shExpMatch(url, "http*://*.voatibetan.com*")) return strProxy;3060	if (shExpMatch(url, "http*://*.voatibetan.com*")) return strProxy;3061	if (shExpMatch(url, "http*://*.voanews.com*")) return strProxy;3062	if (shExpMatch(url, "http*://*.vocn.tv*")) return strProxy;3063	if (shExpMatch(url, "http*://*.vot.org*")) return strProxy;3064	if (shExpMatch(url, "http*://*.vot.org*")) return strProxy;3065	if (shExpMatch(url, "http*://*.voy.com*")) return strProxy;3066	if (shExpMatch(url, "http*://*.vpncup.com*")) return strProxy;3067	if (shExpMatch(url, "http*://*.vpnbook.com*")) return strProxy;3068	if (shExpMatch(url, "http*://*.vpnfire.com*")) return strProxy;3069	if (shExpMatch(url, "http*://*.vpngate.jp*")) return strProxy;3070	if (shExpMatch(url, "http*://*.vpngate.net*")) return strProxy;3071	if (shExpMatch(url, "http*://*.vpngate.net*")) return strProxy;3072	if (shExpMatch(url, "http*://*.vpnpop.com*")) return strProxy;3073	if (shExpMatch(url, "http*://*.vpnpronet.com*")) return strProxy;3074	if (shExpMatch(url, "http*://*.vpnreviewz.com*")) return strProxy;3075	if (shExpMatch(url, "http*://*.vtunnel.com*")) return strProxy;3076	if (shExpMatch(url, "http*://*.w.org*")) return strProxy;3077	if (shExpMatch(url, "http*://*.lists.w3.org*")) return strProxy;3078	if (shExpMatch(url, "http*://*.w3schools.com*")) return strProxy;3079	if (shExpMatch(url, "http*://*.waffle1999.com*")) return strProxy;3080	if (shExpMatch(url, "http*://*.wahas.com*")) return strProxy;3081	if (shExpMatch(url, "http*://*.waigaobu.com*")) return strProxy;3082	if (shExpMatch(url, "http*://*.waikeung.org*")) return strProxy;3083	if (shExpMatch(url, "http*://*.waiwaier.com*")) return strProxy;3084	if (shExpMatch(url, "http*://*.waiwaier.com*")) return strProxy;3085	if (shExpMatch(url, "http*://*.wallornot.org*")) return strProxy;3086	if (shExpMatch(url, "http*://*.wallpapercasa.com*")) return strProxy;3087	if (shExpMatch(url, "http*://*.wan-press.org*")) return strProxy;3088	if (shExpMatch(url, "http*://*.wanderinghorse.net*")) return strProxy;3089	if (shExpMatch(url, "http*://*.wangafu.net*")) return strProxy;3090	if (shExpMatch(url, "http*://*.wangjinbo.org*")) return strProxy;3091	if (shExpMatch(url, "http*://*.wangjinbo.org*")) return strProxy;3092	if (shExpMatch(url, "http*://*.wanglixiong.com*")) return strProxy;3093	if (shExpMatch(url, "http*://*.wangruoshui.net*")) return strProxy;3094	if (shExpMatch(url, "http*://*.wangruowang.org*")) return strProxy;3095	if (shExpMatch(url, "http*://*.want-daily.com*")) return strProxy;3096	if (shExpMatch(url, "http*://*.wapedia.mobi*")) return strProxy;3097	if (shExpMatch(url, "http*://*.waselpro.com*")) return strProxy;3098	if (shExpMatch(url, "http*://*.wattpad.com*")) return strProxy;3099	if (shExpMatch(url, "http*://*.wattpad.com*")) return strProxy;3100	if (shExpMatch(url, "http*://*.makzhou.warehouse333.com*")) return strProxy;3101	if (shExpMatch(url, "http*://*.washeng.net*")) return strProxy;3102	if (shExpMatch(url, "http*://*.watchmygf.net*")) return strProxy;3103	if (shExpMatch(url, "http*://*.wav.tv*")) return strProxy;3104	if (shExpMatch(url, "http*://*.wdf5.com*")) return strProxy;3105	if (shExpMatch(url, "http*://*.wearn.com*")) return strProxy;3106	if (shExpMatch(url, "http*://*.wearn.com*")) return strProxy;3107	if (shExpMatch(url, "http*://*.hudatoriq.web.id*")) return strProxy;3108	if (shExpMatch(url, "http*://*.web2project.net*")) return strProxy;3109	if (shExpMatch(url, "http*://*.webbang.net*")) return strProxy;3110	if (shExpMatch(url, "http*://*.weblagu.com*")) return strProxy;3111	if (shExpMatch(url, "http*://*.webmproject.org*")) return strProxy;3112	if (shExpMatch(url, "http*://*.webs-tv.net*")) return strProxy;3113	if (shExpMatch(url, "http*://*.websitepulse.com*")) return strProxy;3114	if (shExpMatch(url, "http*://*.websnapr.com*")) return strProxy;3115	if (shExpMatch(url, "http*://*.webworkerdaily.com*")) return strProxy;3116	if (shExpMatch(url, "http*://*.weekmag.info*")) return strProxy;3117	if (shExpMatch(url, "http*://*.wefightcensorship.org*")) return strProxy;3118	if (shExpMatch(url, "http*://*.wefong.com*")) return strProxy;3119	if (shExpMatch(url, "http*://*.weiboleak.com*")) return strProxy;3120	if (shExpMatch(url, "http*://*.weijingsheng.org*")) return strProxy;3121	if (shExpMatch(url, "http*://*.weiming.info*")) return strProxy;3122	if (shExpMatch(url, "http*://*.weiquanwang.org*")) return strProxy;3123	if (shExpMatch(url, "http*://*.weisuo.ws*")) return strProxy;3124	if (shExpMatch(url, "http*://*.wengewang.com*")) return strProxy;3125	if (shExpMatch(url, "http*://*.wengewang.org*")) return strProxy;3126	if (shExpMatch(url, "http*://*.wenhui.ch*")) return strProxy;3127	if (shExpMatch(url, "http*://*.trans.wenweipo.com*")) return strProxy;3128	if (shExpMatch(url, "http*://*.wenxuecity.com*")) return strProxy;3129	if (shExpMatch(url, "http*://*.wenyunchao.com*")) return strProxy;3130	if (shExpMatch(url, "http*://*.wenyunchao.com*")) return strProxy;3131	if (shExpMatch(url, "http*://*.westca.com*")) return strProxy;3132	if (shExpMatch(url, "http*://*.westca.com*")) return strProxy;3133	if (shExpMatch(url, "http*://*.westernwolves.com*")) return strProxy;3134	if (shExpMatch(url, "http*://*.hkg.westkit.net*")) return strProxy;3135	if (shExpMatch(url, "http*://*.wet123.com*")) return strProxy;3136	if (shExpMatch(url, "http*://*.wepn.info*")) return strProxy;3137	if (shExpMatch(url, "http*://*.wetpussygames.com*")) return strProxy;3138	if (shExpMatch(url, "http*://*.wetplace.com*")) return strProxy;3139	if (shExpMatch(url, "http*://*.wexiaobo.org*")) return strProxy;3140	if (shExpMatch(url, "http*://*.wexiaobo.org*")) return strProxy;3141	if (shExpMatch(url, "http*://*.wezhiyong.org*")) return strProxy;3142	if (shExpMatch(url, "http*://*.wezone.net*")) return strProxy;3143	if (shExpMatch(url, "http*://*.wforum.com*")) return strProxy;3144	if (shExpMatch(url, "http*://*.wforum.com*")) return strProxy;3145	if (shExpMatch(url, "http*://*.whatblocked.com*")) return strProxy;3146	if (shExpMatch(url, "http*://*.whatblocked.com*")) return strProxy;3147	if (shExpMatch(url, "http*://*.whippedass.com*")) return strProxy;3148	if (shExpMatch(url, "http*://*.who.is*")) return strProxy;3149	if (shExpMatch(url, "http*://*.whylover.com*")) return strProxy;3150	if (shExpMatch(url, "http*://*.whyx.org*")) return strProxy;3151	if (shExpMatch(url, "http*://*.evchk.wikia.com*")) return strProxy;3152	if (shExpMatch(url, "http*://*.cn.uncyclopedia.wikia.com*")) return strProxy;3153	if (shExpMatch(url, "http*://*.zh.uncyclopedia.wikia.com*")) return strProxy;3154	if (shExpMatch(url, "http*://*.wikileaks.ch*")) return strProxy;3155	if (shExpMatch(url, "http*://*.wikileaks.de*")) return strProxy;3156	if (shExpMatch(url, "http*://*.wikileaks.eu*")) return strProxy;3157	if (shExpMatch(url, "http*://*.wikileaks.lu*")) return strProxy;3158	if (shExpMatch(url, "http*://*.wikileaks.org*")) return strProxy;3159	if (shExpMatch(url, "http*://*.wikileaks.org*")) return strProxy;3160	if (shExpMatch(url, "http*://*.wikileaks.pl*")) return strProxy;3161	if (shExpMatch(url, "http*://*.collateralmurder.com*")) return strProxy;3162	if (shExpMatch(url, "http*://*.collateralmurder.org*")) return strProxy;3163	if (shExpMatch(url, "http*://*.wikilivres.info*")) return strProxy;3164	if (shExpMatch(url, "http*://*.wikimapia.org*")) return strProxy;3165	if (shExpMatch(url, "http*://*.secure.wikimedia.org*")) return strProxy;3166	if (shExpMatch(url, "http*://*.wikimedia.org.mo*")) return strProxy;3167	if (shExpMatch(url, "http*://*.zh.wikinews.org*")) return strProxy;3168	if (shExpMatch(url, "http*://*.wikiwiki.jp*")) return strProxy;3169	if (shExpMatch(url, "http*://*.sports.williamhill.com*")) return strProxy;3170	if (shExpMatch(url, "http*://*.willw.net*")) return strProxy;3171	if (shExpMatch(url, "http*://*.windowsphoneme.com*")) return strProxy;3172	if (shExpMatch(url, "http*://*.winwhispers.info*")) return strProxy;3173	if (shExpMatch(url, "http*://*.wiredbytes.com*")) return strProxy;3174	if (shExpMatch(url, "http*://*.wiredpen.com*")) return strProxy;3175	if (shExpMatch(url, "http*://*.wireshark.org*")) return strProxy;3176	if (shExpMatch(url, "http*://*.wisevid.com*")) return strProxy;3177	if (shExpMatch(url, "http*://*.wisevid.com*")) return strProxy;3178	if (shExpMatch(url, "http*://*.witnessleeteaching.com*")) return strProxy;3179	if (shExpMatch(url, "http*://*.witopia.net*")) return strProxy;3180	if (shExpMatch(url, "http*://*.wnacg.com*")) return strProxy;3181	if (shExpMatch(url, "http*://*.wo.tc*")) return strProxy;3182	if (shExpMatch(url, "http*://*.woeser.com*")) return strProxy;3183	if (shExpMatch(url, "http*://*.woesermiddle-way.net*")) return strProxy;3184	if (shExpMatch(url, "http*://*.wolfax.com*")) return strProxy;3185	if (shExpMatch(url, "http*://*.wolfax.com*")) return strProxy;3186	if (shExpMatch(url, "http*://*.woopie.jp*")) return strProxy;3187	if (shExpMatch(url, "http*://*.woopie.jp*")) return strProxy;3188	if (shExpMatch(url, "http*://*.woopie.tv*")) return strProxy;3189	if (shExpMatch(url, "http*://*.woopie.tv*")) return strProxy;3190	if (shExpMatch(url, "http*://*.workatruna.com*")) return strProxy;3191	if (shExpMatch(url, "http*://*.worldcat.org*")) return strProxy;3192	if (shExpMatch(url, "http*://*.worldjournal.com*")) return strProxy;3193	if (shExpMatch(url, "http*://*.wordpress.com*")) return strProxy;3194	if (shExpMatch(url, "http*://*.wp.com*")) return strProxy;3195	if (shExpMatch(url, "http*://*.woxinghuiguo.com*")) return strProxy;3196	if (shExpMatch(url, "http*://*.wow-life.net*")) return strProxy;3197	if (shExpMatch(url, "http*://*.wowlegacy.ml*")) return strProxy;3198	if (shExpMatch(url, "http*://*.wpoforum.com*")) return strProxy;3199	if (shExpMatch(url, "http*://*.wpoforum.com*")) return strProxy;3200	if (shExpMatch(url, "http*://*.wqlhw.com*")) return strProxy;3201	if (shExpMatch(url, "http*://*.wqyd.org*")) return strProxy;3202	if (shExpMatch(url, "http*://*.wqyd.org*")) return strProxy;3203	if (shExpMatch(url, "http*://*.wrchina.org*")) return strProxy;3204	if (shExpMatch(url, "http*://*.wretch.cc*")) return strProxy;3205	if (shExpMatch(url, "http*://*.wsj.com*")) return strProxy;3206	if (shExpMatch(url, "http*://*.wsj.net*")) return strProxy;3207	if (shExpMatch(url, "http*://*.wtfpeople.com*")) return strProxy;3208	if (shExpMatch(url, "http*://*.wuala.com*")) return strProxy;3209	if (shExpMatch(url, "http*://*.wuerkaixi.com*")) return strProxy;3210	if (shExpMatch(url, "http*://*.wufi.org.tw*")) return strProxy;3211	if (shExpMatch(url, "http*://*.wuguoguang.com*")) return strProxy;3212	if (shExpMatch(url, "http*://*.wujie.net*")) return strProxy;3213	if (shExpMatch(url, "http*://*.wujieliulan.com*")) return strProxy;3214	if (shExpMatch(url, "http*://*.wujieliulan.com*")) return strProxy;3215	if (shExpMatch(url, "http*://*.wukangrui.net*")) return strProxy;3216	if (shExpMatch(url, "http*://*.wwitv.com*")) return strProxy;3217	if (shExpMatch(url, "http*://*.wzyboy.im*")) return strProxy;3218	if (shExpMatch(url, "http*://*.x-berry.com*")) return strProxy;3219	if (shExpMatch(url, "http*://*.x-art.com*")) return strProxy;3220	if (shExpMatch(url, "http*://*.x-wall.org*")) return strProxy;3221	if (shExpMatch(url, "http*://*.x1949x.com*")) return strProxy;3222	if (shExpMatch(url, "http*://*.x365x.com*")) return strProxy;3223	if (shExpMatch(url, "http*://*.xanga.com*")) return strProxy;3224	if (shExpMatch(url, "http*://*.xbabe.com*")) return strProxy;3225	if (shExpMatch(url, "http*://*.xbookcn.com*")) return strProxy;3226	if (shExpMatch(url, "http*://*.xbookcn.com*")) return strProxy;3227	if (shExpMatch(url, "http*://*.xcafe.in*")) return strProxy;3228	if (shExpMatch(url, "http*://*.x.xcity.jp*")) return strProxy;3229	if (shExpMatch(url, "http*://*.xcritic.com*")) return strProxy;3230	if (shExpMatch(url, "http*://*.destiny.xfiles.to*")) return strProxy;3231	if (shExpMatch(url, "http*://*.xfm.pp.ru*")) return strProxy;3232	if (shExpMatch(url, "http*://*.xgmyd.com*")) return strProxy;3233	if (shExpMatch(url, "http*://*.xh4n.cn*")) return strProxy;3234	if (shExpMatch(url, "http*://*.xhamster.com*")) return strProxy;3235	if (shExpMatch(url, "http*://*.one.xthost.info*")) return strProxy;3236	if (shExpMatch(url, "http*://*.xiaochuncnjp.com*")) return strProxy;3237	if (shExpMatch(url, "http*://*.s.xiaod.in*")) return strProxy;3238	if (shExpMatch(url, "http*://*.xiaohexie.com*")) return strProxy;3239	if (shExpMatch(url, "http*://*.xiaolan.me*")) return strProxy;3240	if (shExpMatch(url, "http*://*.xiaoma.org*")) return strProxy;3241	if (shExpMatch(url, "http*://*.xiaohexie.com*")) return strProxy;3242	if (shExpMatch(url, "http*://*.xiezhua.com*")) return strProxy;3243	if (shExpMatch(url, "http*://*.xing.com*")) return strProxy;3244	if (shExpMatch(url, "http*://*.xing.com*")) return strProxy;3245	if (shExpMatch(url, "http*://*.xinmiao.com.hk*")) return strProxy;3246	if (shExpMatch(url, "http*://*.xinmiao.com.hk*")) return strProxy;3247	if (shExpMatch(url, "http*://*.xinsheng.net*")) return strProxy;3248	if (shExpMatch(url, "http*://*.xinshijue.com*")) return strProxy;3249	if (shExpMatch(url, "http*://*.xinhuanet.org*")) return strProxy;3250	if (shExpMatch(url, "http*://*.xinyubbs.net*")) return strProxy;3251	if (shExpMatch(url, "http*://*.xiongpian.com*")) return strProxy;3252	if (shExpMatch(url, "http*://*.xizang-zhiye.org*")) return strProxy;3253	if (shExpMatch(url, "http*://*.xjp.cc*")) return strProxy;3254	if (shExpMatch(url, "http*://*.xjp.cc*")) return strProxy;3255	if (shExpMatch(url, "http*://*.xlfmwz.info*")) return strProxy;3256	if (shExpMatch(url, "http*://*.xml-training-guide.com*")) return strProxy;3257	if (shExpMatch(url, "http*://*.xmovies.com*")) return strProxy;3258	if (shExpMatch(url, "http*://*.xnxx.com*")) return strProxy;3259	if (shExpMatch(url, "http*://*.xpdo.net*")) return strProxy;3260	if (shExpMatch(url, "http*://*.xpud.org*")) return strProxy;3261	if (shExpMatch(url, "http*://*.k2.xrea.com*")) return strProxy;3262	if (shExpMatch(url, "http*://*.xtube.com*")) return strProxy;3263	if (shExpMatch(url, "http*://*.blog.xuite.net*")) return strProxy;3264	if (shExpMatch(url, "http*://*.vlog.xuite.net*")) return strProxy;3265	if (shExpMatch(url, "http*://*.xuzhiyong.net*")) return strProxy;3266	if (shExpMatch(url, "http*://*.xuchao.org*")) return strProxy;3267	if (shExpMatch(url, "http*://*.xuchao.net*")) return strProxy;3268	if (shExpMatch(url, "http*://*.xuchao.net*")) return strProxy;3269	if (shExpMatch(url, "http*://*.xvedios.com*")) return strProxy;3270	if (shExpMatch(url, "http*://*.xvideos.com*")) return strProxy;3271	if (shExpMatch(url, "http*://*.xxbbx.com*")) return strProxy;3272	if (shExpMatch(url, "http*://*.xxxx.com.au*")) return strProxy;3273	if (shExpMatch(url, "http*://*.xys.org*")) return strProxy;3274	if (shExpMatch(url, "http*://*.xysblogs.org*")) return strProxy;3275	if (shExpMatch(url, "http*://*.xyy69.com*")) return strProxy;3276	if (shExpMatch(url, "http*://*.xyy69.info*")) return strProxy;3277	if (shExpMatch(url, "http*://*.page.bid.yahoo.com*")) return strProxy;3278	if (shExpMatch(url, "http*://*.blogs.yahoo.co.jp*")) return strProxy;3279	if (shExpMatch(url, "http*://*.buy.yahoo.com.tw*")) return strProxy;3280	if (shExpMatch(url, "http*://*.hk.yahoo.com*")) return strProxy;3281	if (shExpMatch(url, "http*://*.hk.knowledge.yahoo.com*")) return strProxy;3282	if (shExpMatch(url, "http*://*.hk.myblog.yahoo.com*")) return strProxy;3283	if (shExpMatch(url, "http*://*.hk.news.yahoo.com*")) return strProxy;3284	if (shExpMatch(url, "http*://*.hk.rd.yahoo.com*")) return strProxy;3285	if (shExpMatch(url, "http*://*.hk.search.yahoo.com*")) return strProxy;3286	if (shExpMatch(url, "http*://*.hk.video.news.yahoo.com*")) return strProxy;3287	if (shExpMatch(url, "http*://*.meme.yahoo.com*")) return strProxy;3288	if (shExpMatch(url, "http*://*.tw.yahoo.com*")) return strProxy;3289	if (shExpMatch(url, "http*://*.tw.myblog.yahoo.com*")) return strProxy;3290	if (shExpMatch(url, "http*://*.tw.news.yahoo.com*")) return strProxy;3291	if (shExpMatch(url, "http*://*.pulse.yahoo.com*")) return strProxy;3292	if (shExpMatch(url, "http*://*.upcoming.yahoo.com*")) return strProxy;3293	if (shExpMatch(url, "http*://*.video.yahoo.com*")) return strProxy;3294	if (shExpMatch(url, "http*://*.yahoo.com.hk*")) return strProxy;3295	if (shExpMatch(url, "http*://*.yam.com*")) return strProxy;3296	if (shExpMatch(url, "http*://*.yam.com*")) return strProxy;3297	if (shExpMatch(url, "http*://*.yasni.co.uk*")) return strProxy;3298	if (shExpMatch(url, "http*://*.yasukuni.or.jp*")) return strProxy;3299	if (shExpMatch(url, "http*://*.ydy.com*")) return strProxy;3300	if (shExpMatch(url, "http*://*.yeelou.com*")) return strProxy;3301	if (shExpMatch(url, "http*://*.yeeyi.com*")) return strProxy;3302	if (shExpMatch(url, "http*://*.yegle.net*")) return strProxy;3303	if (shExpMatch(url, "http*://*.yegle.net*")) return strProxy;3304	if (shExpMatch(url, "http*://*.yes123.com.tw*")) return strProxy;3305	if (shExpMatch(url, "http*://*.yfrog.com*")) return strProxy;3306	if (shExpMatch(url, "http*://*.yhcw.net*")) return strProxy;3307	if (shExpMatch(url, "http*://*.yi.org*")) return strProxy;3308	if (shExpMatch(url, "http*://*.yibada.com*")) return strProxy;3309	if (shExpMatch(url, "http*://*.yibaochina.com*")) return strProxy;3310	if (shExpMatch(url, "http*://*.yidio.com*")) return strProxy;3311	if (shExpMatch(url, "http*://*.yidio.com*")) return strProxy;3312	if (shExpMatch(url, "http*://*.yilubbs.com*")) return strProxy;3313	if (shExpMatch(url, "http*://*.xa.yimg.com*")) return strProxy;3314	if (shExpMatch(url, "http*://*.yipub.com*")) return strProxy;3315	if (shExpMatch(url, "http*://*.yipub.com*")) return strProxy;3316	if (shExpMatch(url, "http*://*.yogichen.org*")) return strProxy;3317	if (shExpMatch(url, "http*://*.yogichen.org*")) return strProxy;3318	if (shExpMatch(url, "http*://*.yong.hu*")) return strProxy;3319	if (shExpMatch(url, "http*://*.yorkbbs.ca*")) return strProxy;3320	if (shExpMatch(url, "http*://*.youxu.info*")) return strProxy;3321	if (shExpMatch(url, "http*://*.yyii.org*")) return strProxy;3322	if (shExpMatch(url, "http*://*.yyii.org*")) return strProxy;3323	if (shExpMatch(url, "http*://*.yzzk.com*")) return strProxy;3324	if (shExpMatch(url, "http*://*.yzzk.com*")) return strProxy;3325	if (shExpMatch(url, "http*://*.youjizz.com*")) return strProxy;3326	if (shExpMatch(url, "http*://*.youjizz.com*")) return strProxy;3327	if (shExpMatch(url, "http*://*.youmaker.com*")) return strProxy;3328	if (shExpMatch(url, "http*://*.youpai.org*")) return strProxy;3329	if (shExpMatch(url, "http*://*.youpai.org*")) return strProxy;3330	if (shExpMatch(url, "http*://*.your-freedom.net*")) return strProxy;3331	if (shExpMatch(url, "http*://*.yourepeat.com*")) return strProxy;3332	if (shExpMatch(url, "http*://*.yousendit.com*")) return strProxy;3333	if (shExpMatch(url, "http*://*.yousendit.com*")) return strProxy;3334	if (shExpMatch(url, "http*://*.youthbao.com*")) return strProxy;3335	if (shExpMatch(url, "http*://*.youthnetradio.org*")) return strProxy;3336	if (shExpMatch(url, "http*://*.blog.youthwant.com.tw*")) return strProxy;3337	if (shExpMatch(url, "http*://*.share.youthwant.com.tw*")) return strProxy;3338	if (shExpMatch(url, "http*://*.topic.youthwant.com.tw*")) return strProxy;3339	if (shExpMatch(url, "http*://*.youporn.com*")) return strProxy;3340	if (shExpMatch(url, "http*://*.youporn.com*")) return strProxy;3341	if (shExpMatch(url, "http*://*.youtu.be*")) return strProxy;3342	if (shExpMatch(url, "http*://*.youtube.com*")) return strProxy;3343	if (shExpMatch(url, "http*://*.youtube.com*")) return strProxy;3344	if (shExpMatch(url, "http*://*.youtube-nocookie.com*")) return strProxy;3345	if (shExpMatch(url, "http*://*.youtubecn.com*")) return strProxy;3346	if (shExpMatch(url, "http*://*.youversion.com*")) return strProxy;3347	if (shExpMatch(url, "http*://*.youversion.com*")) return strProxy;3348	if (shExpMatch(url, "http*://*.blog.youxu.info*")) return strProxy;3349	if (shExpMatch(url, "http*://*.ytimg.com*")) return strProxy;3350	if (shExpMatch(url, "http*://*.ytht.net*")) return strProxy;3351	if (shExpMatch(url, "http*://*.yuanming.net*")) return strProxy;3352	if (shExpMatch(url, "http*://*.yunchao.net*")) return strProxy;3353	if (shExpMatch(url, "http*://*.yvesgeleyn.com*")) return strProxy;3354	if (shExpMatch(url, "http*://*.yx51.net*")) return strProxy;3355	if (shExpMatch(url, "http*://*.yymaya.com*")) return strProxy;3356	if (shExpMatch(url, "http*://*.zacebook.com*")) return strProxy;3357	if (shExpMatch(url, "http*://*.zannel.com*")) return strProxy;3358	if (shExpMatch(url, "http*://*.tap11.com*")) return strProxy;3359	if (shExpMatch(url, "http*://*.zaobao.com*")) return strProxy;3360	if (shExpMatch(url, "http*://*.zaobao.com.sg*")) return strProxy;3361	if (shExpMatch(url, "http*://*.zaobao.com.sg*")) return strProxy;3362	if (shExpMatch(url, "http*://*.zaozon.com*")) return strProxy;3363	if (shExpMatch(url, "http*://*.zarias.com*")) return strProxy;3364	if (shExpMatch(url, "http*://*.zaurus.org.uk*")) return strProxy;3365	if (shExpMatch(url, "http*://*.zdnet.com.tw*")) return strProxy;3366	if (shExpMatch(url, "http*://*.zengjinyan.org*")) return strProxy;3367	if (shExpMatch(url, "http*://*.zeutch.com*")) return strProxy;3368	if (shExpMatch(url, "http*://*.zfreet.com*")) return strProxy;3369	if (shExpMatch(url, "http*://*.zgzcjj.net*")) return strProxy;3370	if (shExpMatch(url, "http*://*.zhanbin.net*")) return strProxy;3371	if (shExpMatch(url, "http*://*.zhanbin.net*")) return strProxy;3372	if (shExpMatch(url, "http*://*.zhangboli.net*")) return strProxy;3373	if (shExpMatch(url, "http*://*.zhenghui.org*")) return strProxy;3374	if (shExpMatch(url, "http*://*.zhenlibu.info*")) return strProxy;3375	if (shExpMatch(url, "http*://*.zhenlibu.info*")) return strProxy;3376	if (shExpMatch(url, "http*://*.zhenxiang.biz*")) return strProxy;3377	if (shExpMatch(url, "http*://*.zhinengluyou.com*")) return strProxy;3378	if (shExpMatch(url, "http*://*.zhongguotese.net*")) return strProxy;3379	if (shExpMatch(url, "http*://*.zhongmeng.org*")) return strProxy;3380	if (shExpMatch(url, "http*://*.zhreader.com*")) return strProxy;3381	if (shExpMatch(url, "http*://*.zhuichaguoji.org*")) return strProxy;3382	if (shExpMatch(url, "http*://*.zhuichaguoji.org*")) return strProxy;3383	if (shExpMatch(url, "http*://*.ziddu.com*")) return strProxy;3384	if (shExpMatch(url, "http*://*.zillionk.com*")) return strProxy;3385	if (shExpMatch(url, "http*://*.zinio.com*")) return strProxy;3386	if (shExpMatch(url, "http*://*.zinio.com*")) return strProxy;3387	if (shExpMatch(url, "http*://*.ziplib.com*")) return strProxy;3388	if (shExpMatch(url, "http*://*.zkaip.com*")) return strProxy;3389	if (shExpMatch(url, "http*://*.zkaip.com*")) return strProxy;3390	if (shExpMatch(url, "http*://*.zlib.net*")) return strProxy;3391	if (shExpMatch(url, "http*://*.zmw.cn*")) return strProxy;3392	if (shExpMatch(url, "http*://*.zomobo.net*")) return strProxy;3393	if (shExpMatch(url, "http*://*.zonaeuropa.com*")) return strProxy;3394	if (shExpMatch(url, "http*://*.zonaeuropa.com*")) return strProxy;3395	if (shExpMatch(url, "http*://*.zootool.com*")) return strProxy;3396	if (shExpMatch(url, "http*://*.zoozle.net*")) return strProxy;3397	if (shExpMatch(url, "http*://*.writer.zoho.com*")) return strProxy;3398	if (shExpMatch(url, "http*://*.zshare.net*")) return strProxy;3399	if (shExpMatch(url, "http*://*.zsrhao.com*")) return strProxy;3400	if (shExpMatch(url, "http*://*.zuo.la*")) return strProxy;3401	if (shExpMatch(url, "http*://*.zuo.la*")) return strProxy;3402	if (shExpMatch(url, "http*://*.zuobiao.me*")) return strProxy;3403	if (shExpMatch(url, "http*://*.zuola.com*")) return strProxy;3404	if (shExpMatch(url, "http*://*.zuola.com*")) return strProxy;3405	if (shExpMatch(url, "http*://*.zvereff.com*")) return strProxy;3406	if (shExpMatch(url, "http*://*.zyzc9.com*")) return strProxy;3407	if (shExpMatch(url, "http*://*.upload.wikimedia.org*")) return strProxy;3408	if (shExpMatch(url, "http*://*.zh.wikipedia.org*")) return strProxy;3409	if (shExpMatch(url, "http*://*.zh.m.wikipedia.org*")) return strProxy;3410	if (shExpMatch(url, "http*://*.zh.wikibooks.org*")) return strProxy;3411	if (shExpMatch(url, "http*://*.gov.tw*")) return strProxy;3412	if (shExpMatch(url, "http*://*.174.142.105.153*")) return strProxy;3413	if (shExpMatch(url, "http*://*.69.65.19.160*")) return strProxy;3414	else return "DIRECT";...ZeParser.js
Source:ZeParser.js  
1if (typeof exports !== 'undefined') {2	var Tokenizer = require('./Tokenizer').Tokenizer;3	exports.ZeParser = ZeParser;4}5/**6 * This is my js Parser: Ze. It's actually the post-dev pre-cleanup version. Clearly.7 * Some optimizations have been applied :)8 * (c) Peter van der Zee, qfox.nl9 * @param {String} inp Input10 * @param {Tokenizer} tok11 * @param {Array} stack The tokens will be put in this array. If you're looking for the AST, this would be it :)12 */13function ZeParser(inp, tok, stack, simple){14	this.input = inp;15	this.tokenizer = tok;16	this.stack = stack;17	this.stack.root = true;18	this.scope = stack.scope = [{value:'this', isDeclared:true, isEcma:true, thisIsGlobal:true}]; // names of variables19	this.scope.global = true;20	this.statementLabels = [];21	this.errorStack = [];22	stack.scope = this.scope; // hook root23	stack.labels = this.statementLabels;24	this.regexLhsStart = ZeParser.regexLhsStart;25/*26	this.regexStartKeyword = ZeParser.regexStartKeyword;27	this.regexKeyword = ZeParser.regexKeyword;28	this.regexStartReserved = ZeParser.regexStartReserved;29	this.regexReserved = ZeParser.regexReserved;30*/31	this.regexStartKeyOrReserved = ZeParser.regexStartKeyOrReserved;32	this.hashStartKeyOrReserved = ZeParser.hashStartKeyOrReserved;33	this.regexIsKeywordOrReserved = ZeParser.regexIsKeywordOrReserved;34	this.regexAssignments = ZeParser.regexAssignments;35	this.regexNonAssignmentBinaryExpressionOperators = ZeParser.regexNonAssignmentBinaryExpressionOperators;36	this.regexUnaryKeywords = ZeParser.regexUnaryKeywords;37	this.hashUnaryKeywordStart = ZeParser.hashUnaryKeywordStart;38	this.regexUnaryOperators = ZeParser.regexUnaryOperators;39	this.regexLiteralKeywords = ZeParser.regexLiteralKeywords;40	this.testing = {'this':1,'null':1,'true':1,'false':1};41	this.ast = !simple; ///#define FULL_AST42};43/**44 * Returns just a stacked parse tree (regular array)45 * @param {string} input46 * @param {boolean} simple=false47 * @return {Array}48 */49ZeParser.parse = function(input, simple){50	var tok = new Tokenizer(input);51	var stack = [];52	try {53		var parser = new ZeParser(input, tok, stack);54		if (simple) parser.ast = false;55		parser.parse();56		return stack;57	} catch (e) {58		console.log("Parser has a bug for this input, please report it :)", e);59		return null;60	}61};62/**63 * Returns a new parser instance with parse details for input64 * @param {string} input65 * @returns {ZeParser}66 */67ZeParser.createParser = function(input){68	var tok = new Tokenizer(input);69	var stack = [];70	try {71		var parser = new ZeParser(input, tok, stack);72		parser.parse();73		return parser;74	} catch (e) {75		console.log("Parser has a bug for this input, please report it :)", e);76		return null;77	}78};79ZeParser.prototype = {80	input: null,81	tokenizer: null,82	stack: null,83	scope: null,84	statementLabels: null,85	errorStack: null,86	ast: null,87	parse: function(match){88		if (match) match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, this.stack); // meh89		else match = this.tokenizer.storeCurrentAndFetchNextToken(false, null, this.stack, true); // initialization step, dont store the match (there isnt any!)90		match = this.eatSourceElements(match, this.stack);91		var cycled = false;92		do {93			if (match && match.name != 12/*eof*/) {94				// if not already an error, insert an error before it95				if (match.name != 14/*error*/) this.failignore('UnexpectedToken', match, this.stack);96				// just parse the token as is and continue.97				match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, this.stack);98				cycled = true;99			}100		// keep gobbling any errors...101		} while (match && match.name == 14/*error*/);102		// now try again (but only if we gobbled at least one token)...103		if (cycled && match && match.name != 12/*eof*/) match = this.parse(match);104		// pop the last token off the stack if it caused an error at eof105		if (this.tokenizer.errorEscape) {106			this.stack.push(this.tokenizer.errorEscape);107			this.tokenizer.errorEscape = null;108		}109		return match;110	},111	eatSemiColon: function(match, stack){112		//this.stats.eatSemiColon = (+//this.stats.eatSemiColon||0)+1;113		if (match.value == ';') match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);114		else {115			// try asi116			// only if:117			// - this token was preceeded by at least one newline (match.newline) or next token is }118			// - this is EOF119			// - prev token was one of return,continue,break,throw (restricted production), not checked here.120			// the exceptions to this rule are 121			// - if the next line is a regex 122			// - the semi is part of the for-header. 123			// these exceptions are automatically caught by the way the parser is built124			// not eof and just parsed semi or no newline preceeding and next isnt }125			if (match.name != 12/*EOF*/ && (match.semi || (!match.newline && match.value != '}')) && !(match.newline && (match.value == '++' || match.value == '--'))) {126				this.failignore('NoASI', match, stack);127			} else {128				// ASI129				// (match is actually the match _after_ this asi, so the position of asi is match.start, not stop (!)130				var asi = {start:match.start,stop:match.start,name:13/*ASI*/};131				stack.push(asi);132				133				// slip it in the stream, before the current match.134				// for the other tokens see the tokenizer near the end of the main parsing function135				this.tokenizer.addTokenToStreamBefore(asi, match);136			}137		}138		match.semi = true;139		return match;140	},141	/**142	 * Eat one or more "AssignmentExpression"s. May also eat a labeled statement if143	 * the parameters are set that way. This is the only way to linearly distinct between144	 * an expression-statement and a labeled-statement without double lookahead. (ok, maybe not "only")145	 * @param {boolean} mayParseLabeledStatementInstead=false If the first token is an identifier and the second a colon, accept this match as a labeled statement instead... Only true if the match in the parameter is an (unreserved) identifier (so no need to validate that further) 146	 * @param {Object} match147	 * @param {Array} stack148	 * @param {boolean} onlyOne=false Only parse a AssignmentExpression149	 * @param {boolean} forHeader=false Do not allow the `in` operator150	 * @param {boolean} isBreakOrContinueArg=false The argument for break or continue is always a single identifier151	 * @return {Object}152	 */153	eatExpressions: function(mayParseLabeledStatementInstead, match, stack, onlyOne, forHeader, isBreakOrContinueArg){154		if (this.ast) { //#ifdef FULL_AST155			var pstack = stack;156			stack = [];157			stack.desc = 'expressions';158			stack.nextBlack = match.tokposb;159			pstack.push(stack);160			var parsedExpressions = 0;161		} //#endif162		var first = true;163		do {164			var parsedNonAssignmentOperator = false; // once we parse a non-assignment, this expression can no longer parse an assignment165			// TOFIX: can probably get the regex out somehow...166			if (!first) {167				match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);168				if (!(/*is left hand side start?*/ match.name <= 6 || this.regexLhsStart.test(match.value))) match = this.failsafe('ExpectedAnotherExpressionComma', match);169			}170			if (this.ast) { //#ifdef FULL_AST171				++parsedExpressions;172				var astack = stack;173				stack = [];174				stack.desc = 'expression';175				stack.nextBlack = match.tokposb;176				astack.push(stack);177			} //#endif178			// start of expression is given: match179			// it should indeed be a properly allowed lhs180			// first eat all unary operators181			// they can be added to the stack, but we need to ensure they have indeed a valid operator182			var parseAnotherExpression = true;183			while (parseAnotherExpression) { // keep parsing lhs+operator as long as there is an operator after the lhs.184				if (this.ast) { //#ifdef FULL_AST185					var estack = stack;186					stack = [];187					stack.desc = 'sub-expression';188					stack.nextBlack = match.tokposb;189					estack.push(stack);190					var news = 0; // encountered new operators waiting for parenthesis191				} //#endif192				// start checking lhs193				// if lhs is identifier (new/call expression), allow to parse an assignment operator next194				// otherwise keep eating unary expressions and then any "value"195				// after that search for a binary operator. if we only ate a new/call expression then196				// also allow to eat assignments. repeat for the rhs.197				var parsedUnaryOperator = false;198				var isUnary = null;199				while (200					!isBreakOrContinueArg && // no unary for break/continue201					(isUnary =202						(match.value && this.hashUnaryKeywordStart[match.value[0]] && this.regexUnaryKeywords.test(match.value)) || // (match.value == 'delete' || match.value == 'void' || match.value == 'typeof' || match.value == 'new') ||203						(match.name == 11/*PUNCTUATOR*/ && this.regexUnaryOperators.test(match.value))204					)205				) {206					if (isUnary) match.isUnaryOp = true;207					if (this.ast) { //#ifdef FULL_AST208						// find parenthesis209						if (match.value == 'new') ++news;210					} //#endif211					match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);212					// ensure that it is in fact a valid lhs-start213					if (!(/*is left hand side start?*/ match.name <= 6 || this.regexLhsStart.test(match.value))) match = this.failsafe('ExpectedAnotherExpressionRhs', match);214					// not allowed to parse assignment215					parsedUnaryOperator = true;216				};217				// if we parsed any kind of unary operator, we cannot be parsing a labeled statement218				if (parsedUnaryOperator) mayParseLabeledStatementInstead = false;219				// so now we know match is a valid lhs-start and not a unary operator220				// it must be a string, number, regex, identifier 221				// or the start of an object literal ({), array literal ([) or group operator (().222				var acceptAssignment = false;223				// take care of the "open" cases first (group, array, object)224				if (match.value == '(') {225					if (this.ast) { //#ifdef FULL_AST226						var groupStack = stack;227						stack = [];228						stack.desc = 'grouped';229						stack.nextBlack = match.tokposb;230						groupStack.push(stack);231						var lhp = match;232						match.isGroupStart = true;233					} //#endif234					match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);235					if (!(/*is left hand side start?*/ match.name <= 6 || this.regexLhsStart.test(match.value))) match = this.failsafe('GroupingShouldStartWithExpression', match);236					// keep parsing expressions as long as they are followed by a comma237					match = this.eatExpressions(false, match, stack);238					if (match.value != ')') match = this.failsafe('UnclosedGroupingOperator', match);239					if (this.ast) { //#ifdef FULL_AST240						match.twin = lhp;241						lhp.twin = match;242						match.isGroupStop = true;243						if (stack[stack.length-1].desc == 'expressions') {244							// create ref to this expression group to the opening paren245							lhp.expressionArg = stack[stack.length-1];246						}247					} //#endif248					match = this.tokenizer.storeCurrentAndFetchNextToken(true, match, stack); // might be div249					if (this.ast) { //#ifdef FULL_AST250						stack = groupStack;251					} //#endif252					// you can assign to group results. and as long as the group does not contain a comma (and valid ref), it will work too :)253					acceptAssignment = true;254				// there's an extra rule for [ namely that, it must start with an expression but after that, expressions are optional255				} else if (match.value == '[') {256					if (this.ast) { //#ifdef FULL_AST257						stack.sub = 'array literal';258						stack.hasArrayLiteral = true;259						var lhsb = match;260						match.isArrayLiteralStart = true;261						if (!this.scope.arrays) this.scope.arrays = [];262						match.arrayId = this.scope.arrays.length;263						this.scope.arrays.push(match);264						match.targetScope = this.scope;265					} //#endif266					// keep parsing expressions as long as they are followed by a comma267					match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);268					// arrays may start with "elided" commas269					while (match.value == ',') match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);270					var foundAtLeastOneComma = true; // for entry in while271					while (foundAtLeastOneComma && match.value != ']') {272						foundAtLeastOneComma = false;273						if (!(/*is left hand side start?*/ match.name <= 6 || this.regexLhsStart.test(match.value)) && match.name != 14/*error*/) match = this.failsafe('ArrayShouldStartWithExpression', match);274						match = this.eatExpressions(false, match, stack, true);275						while (match.value == ',') {276							foundAtLeastOneComma = true;277							match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);278						}279					}280					if (match.value != ']') {281						match = this.failsafe('UnclosedPropertyBracket', match);282					}283					if (this.ast) { //#ifdef FULL_AST284						match.twin = lhsb;285						lhsb.twin = match;286						match.isArrayLiteralStop = true;287					} //#endif288					match = this.tokenizer.storeCurrentAndFetchNextToken(true, match, stack); // might be div289					while (match.value == '++' || match.value == '--') {290						// gobble and ignore?291						this.failignore('InvalidPostfixOperandArray', match, stack);292						match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);293					}294				// object literals need seperate handling...295				} else if (match.value == '{') {296					if (this.ast) { //#ifdef FULL_AST297						stack.sub = 'object literal';298						stack.hasObjectLiteral = true;299						match.isObjectLiteralStart = true;300						if (!this.scope.objects) this.scope.objects = [];301						match.objectId = this.scope.objects.length;302						this.scope.objects.push(match);303						var targetObject = match;304						match.targetScope = this.scope;305	306						var lhc = match;307					} //#endif308					match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);309					if (match.name == 12/*eof*/) {310						match = this.failsafe('ObjectLiteralExpectsColonAfterName', match);311					}312					// ObjectLiteral313					// PropertyNameAndValueList314					while (match.value != '}' && match.name != 14/*error*/) { // will stop if next token is } or throw if not and no comma is found315						// expecting a string, number, or identifier316						//if (match.name != 5/*STRING_SINGLE*/ && match.name != 6/*STRING_DOUBLE*/ && match.name != 3/*NUMERIC_HEX*/ && match.name != 4/*NUMERIC_DEC*/ && match.name != 2/*IDENTIFIER*/) {317						// TOFIX: more specific errors depending on type...318						if (!match.isNumber && !match.isString && match.name != 2/*IDENTIFIER*/) {319							match = this.failsafe('IllegalPropertyNameToken', match);320						}321						if (this.ast) { //#ifdef FULL_AST322							var objLitStack = stack;323							stack = [];324							stack.desc = 'objlit pair';325							stack.isObjectLiteralPair = true;326							stack.nextBlack = match.tokposb;327							objLitStack.push(stack);328							var propNameStack = stack;329							stack = [];330							stack.desc = 'objlit pair name';331							stack.nextBlack = match.tokposb;332							propNameStack.push(stack);333							propNameStack.sub = 'data';334							var propName = match;335							propName.isPropertyName = true;336						} //#endif337						var getset = match.value;338						match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);339						if (this.ast) { //#ifdef FULL_AST340							stack = propNameStack;341						} //#endif342						343						// for get/set we parse a function-like definition. but only if it's immediately followed by an identifier (otherwise it'll just be the property 'get' or 'set')344						if (getset == 'get') {345							// "get" PropertyName "(" ")" "{" FunctionBody "}"346							if (match.value == ':') {347								if (this.ast) { //#ifdef FULL_AST348									propName.isPropertyOf = targetObject;349								} //#endif350								match = this.eatObjectLiteralColonAndBody(match, stack);351							} else {352								if (this.ast) { //#ifdef FULL_AST353									match.isPropertyOf = targetObject;354									propNameStack.sub = 'getter';355									propNameStack.isAccessor = true;356								} //#endif357								// if (match.name != 2/*IDENTIFIER*/ && match.name != 5/*STRING_SINGLE*/ && match.name != 6/*STRING_DOUBLE*/ && match.name != 3/*NUMERIC_HEX*/ && match.name != 4/*NUMERIC_DEC*/) {358								if (!match.isNumber && !match.isString && match.name != 2/*IDENTIFIER*/) match = this.failsafe('IllegalGetterSetterNameToken', match, true);359								match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);360								if (match.value != '(') match = this.failsafe('GetterSetterNameFollowedByOpenParen', match);361								if (this.ast) { //#ifdef FULL_AST362									var lhp = match;363								} //#endif364								match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);365								if (match.value != ')') match = this.failsafe('GetterHasNoArguments', match);366								if (this.ast) { //#ifdef FULL_AST367									match.twin = lhp;368									lhp.twin = match;369								} //#endif370								match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);371								match = this.eatFunctionBody(match, stack);372							}373						} else if (getset == 'set') {374							// "set" PropertyName "(" PropertySetParameterList ")" "{" FunctionBody "}"375							if (match.value == ':') {376								if (this.ast) { //#ifdef FULL_AST377									propName.isPropertyOf = targetObject;378								} //#endif379								match = this.eatObjectLiteralColonAndBody(match, stack);380							} else {381								if (this.ast) { //#ifdef FULL_AST382									match.isPropertyOf = targetObject;383									propNameStack.sub = 'setter';384									propNameStack.isAccessor = true;385								} //#endif386								if (!match.isNumber && !match.isString && match.name != 2/*IDENTIFIER*/) match = this.failsafe('IllegalGetterSetterNameToken', match);387								match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);388								if (match.value != '(') match = this.failsafe('GetterSetterNameFollowedByOpenParen', match);389								if (this.ast) { //#ifdef FULL_AST390									var lhp = match;391								} //#endif392								match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);393								if (match.name != 2/*IDENTIFIER*/) {394									if (match.value == ')') match = this.failsafe('SettersMustHaveArgument', match);395									else match = this.failsafe('IllegalSetterArgumentNameToken', match);396								}397								match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);398								if (match.value != ')') {399									if (match.value == ',') match = this.failsafe('SettersOnlyGetOneArgument', match);400									else match = this.failsafe('SetterHeaderShouldHaveClosingParen', match);401								}402								if (this.ast) { //#ifdef FULL_AST403									match.twin = lhp;404									lhp.twin = match;405								} //#endif406								match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);407								match = this.eatFunctionBody(match, stack);408							}409						} else {410							// PropertyName ":" AssignmentExpression411							if (this.ast) { //#ifdef FULL_AST412								propName.isPropertyOf = targetObject;413							} //#endif414							match = this.eatObjectLiteralColonAndBody(match, stack);415						}416						if (this.ast) { //#ifdef FULL_AST417							stack = objLitStack;418						} //#endif419						// one trailing comma allowed420						if (match.value == ',') {421							match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);422							if (match.value == ',') match = this.failsafe('IllegalDoubleCommaInObjectLiteral', match);423						} else if (match.value != '}') match = this.failsafe('UnclosedObjectLiteral', match);424						// either the next token is } and the loop breaks or425						// the next token is the start of the next PropertyAssignment...426					}427					// closing curly428					if (this.ast) { //#ifdef FULL_AST429						match.twin = lhc;430						lhc.twin = match;431						match.isObjectLiteralStop = true;432					} //#endif433					match = this.tokenizer.storeCurrentAndFetchNextToken(true, match, stack); // next may be div434					while (match.value == '++' || match.value == '--') {435						this.failignore('InvalidPostfixOperandObject', match, stack);436						match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);437					}438				} else if (match.value == 'function') { // function expression439					if (this.ast) { //#ifdef FULL_AST440						var oldstack = stack;441						stack = [];442						stack.desc = 'func expr';443						stack.isFunction = true;444						stack.nextBlack = match.tokposb;445						if (!this.scope.functions) this.scope.functions = [];446						match.functionId = this.scope.functions.length;447						this.scope.functions.push(match);448						oldstack.push(stack);449						var oldscope = this.scope;450						// add new scope451						match.scope = stack.scope = this.scope = [452							this.scope,453							{value:'this', isDeclared:true, isEcma:true, functionStack: stack},454							{value:'arguments', isDeclared:true, isEcma:true, varType:['Object']}455						]; // add the current scope (to build chain up-down)456						this.scope.upper = oldscope;457						// ref to back to function that's the cause for this scope458						this.scope.scopeFor = match;459						match.targetScope = oldscope; // consistency460						match.isFuncExprKeyword = true;461						match.functionStack = stack;462					} //#endif463					var funcExprToken = match;464					match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);465					if (mayParseLabeledStatementInstead && match.value == ':') match = this.failsafe('LabelsMayNotBeReserved', match);466					if (match.name == 2/*IDENTIFIER*/) {467						funcExprToken.funcName = match;468						match.meta = "func expr name";469						match.varType = ['Function'];470						match.functionStack = stack; // ref to the stack, in case we detect the var being a constructor471						if (this.ast) { //#ifdef FULL_AST472							// name is only available to inner scope473							this.scope.push({value:match.value});474						} //#endif475						if (this.hashStartKeyOrReserved[match.value[0]] /*this.regexStartKeyOrReserved.test(match.value[0])*/ && this.regexIsKeywordOrReserved.test(match.value)) match = this.failsafe('FunctionNameMustNotBeReserved', match);476						match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);477					}478					match = this.eatFunctionParametersAndBody(match, stack, true, funcExprToken); // first token after func-expr is div479					while (match.value == '++' || match.value == '--') {480						this.failignore('InvalidPostfixOperandFunction', match, stack);481						match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);482					}483					if (this.ast) { //#ifdef FULL_AST484						// restore stack and scope485						stack = oldstack;486						this.scope = oldscope;487					} //#endif488				} else if (match.name <= 6) { // IDENTIFIER STRING_SINGLE STRING_DOUBLE NUMERIC_HEX NUMERIC_DEC REG_EX489					// save it in case it turns out to be a label.490					var possibleLabel = match;491					// validate the identifier, if any492					if (match.name == 2/*IDENTIFIER*/) {493						if (494							// this, null, true, false are actually allowed here495							!this.regexLiteralKeywords.test(match.value) &&496							// other reserved words are not497							this.hashStartKeyOrReserved[match.value[0]] /*this.regexStartKeyOrReserved.test(match.value[0])*/ && this.regexIsKeywordOrReserved.test(match.value)498						) {499							// if break/continue, we skipped the unary operator check so throw the proper error here500							if (isBreakOrContinueArg) {501								this.failignore('BreakOrContinueArgMustBeJustIdentifier', match, stack);502							} else if (match.value == 'else') {503								this.failignore('DidNotExpectElseHere', match, stack);504							} else {505								//if (mayParseLabeledStatementInstead) {new ZeParser.Error('LabelsMayNotBeReserved', match);506								// TOFIX: lookahead to see if colon is following. throw label error instead if that's the case507								// any forbidden keyword at this point is likely to be a statement start.508								// its likely that the parser will take a while to recover from this point...509								this.failignore('UnexpectedToken', match, stack);510								// TOFIX: maybe i should just return at this point. cut my losses and hope for the best.511							}512						}513						// only accept assignments after a member expression (identifier or ending with a [] suffix)514						acceptAssignment = true;515					} else if (isBreakOrContinueArg) match = this.failsafe('BreakOrContinueArgMustBeJustIdentifier', match);516					// the current match is the lead value being queried. tag it that way517					if (this.ast) { //#ifdef FULL_AST518						// dont mark labels519						if (!isBreakOrContinueArg) {520							match.meta = 'lead value';521							match.leadValue = true;522						}523					} //#endif524					// ok. gobble it.525					match = this.tokenizer.storeCurrentAndFetchNextToken(true, match, stack); // division allowed526					// now check for labeled statement (if mayParseLabeledStatementInstead then the first token for this expression must be an (unreserved) identifier)527					if (mayParseLabeledStatementInstead && match.value == ':') {528						if (possibleLabel.name != 2/*IDENTIFIER*/) {529							// label was not an identifier530							// TOFIX: this colon might be a different type of error... more analysis required531							this.failignore('LabelsMayOnlyBeIdentifiers', match, stack);532						}533						mayParseLabeledStatementInstead = true; // mark label parsed (TOFIX:speed?)534						match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);535						possibleLabel.isLabel = true;536						if (this.ast) { //#ifdef FULL_AST537							delete possibleLabel.meta; // oh oops, it's not a lead value.538							possibleLabel.isLabelDeclaration = true;539							this.statementLabels.push(possibleLabel.value);540							stack.desc = 'labeled statement';541						} //#endif542						var errorIdToReplace = this.errorStack.length;543						// eat another statement now, its the body of the labeled statement (like if and while)544						match = this.eatStatement(false, match, stack);545						// if no statement was found, check here now and correct error546						if (match.error && match.error.msg == ZeParser.Errors.UnableToParseStatement.msg) {547							// replace with better error...548							match.error = new ZeParser.Error('LabelRequiresStatement');549							// also replace on stack550							this.errorStack[errorIdToReplace] = match.error;551						}552						match.wasLabel = true;553						return match;554					}555					mayParseLabeledStatementInstead = false;556				} else if (match.value == '}') {557					// ignore... its certainly the end of this expression, but maybe asi can be applied...558					// it might also be an object literal expecting more, but that case has been covered else where.559					// if it turns out the } is bad after all, .parse() will try to recover560				} else if (match.name == 14/*error*/) {561					do {562						if (match.tokenError) {563							var pe = new ZeParser.Error('TokenizerError', match);564							pe.msg += ': '+match.error.msg;565							this.errorStack.push(pe);566							567							this.failSpecial({start:match.start,stop:match.start,name:14/*error*/,error:pe}, match, stack)568						}569						match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);570					} while (match.name == 14/*error*/);571				} else if (match.name == 12/*eof*/) {572					// cant parse any further. you're probably just typing...573					return match;574				} else {575					//if (!this.errorStack.length && match.name != 12/*eof*/) console.log(["unknown token", match, stack, Gui.escape(this.input)]);576					this.failignore('UnknownToken', match, stack);577					// we cant really ignore this. eat the token and try again. possibly you're just typing?578					match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);579				}580				// search for "value" suffix. property access and call parens.581				while (match.value == '.' || match.value == '[' || match.value == '(') {582					if (isBreakOrContinueArg) match = this.failsafe('BreakOrContinueArgMustBeJustIdentifier', match);583					if (match.value == '.') {584						// property access. read in an IdentifierName (no keyword checks). allow assignments585						match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);586						if (match.name != 2/*IDENTIFIER*/) this.failignore('PropertyNamesMayOnlyBeIdentifiers', match, stack);587						if (this.ast) { //#ifdef FULL_AST588							match.isPropertyName = true;589						} //#endif590						match = this.tokenizer.storeCurrentAndFetchNextToken(true, match, stack); // may parse div591						acceptAssignment = true;592					} else if (match.value == '[') {593						if (this.ast) { //#ifdef FULL_AST594							var lhsb = match;595							match.propertyAccessStart = true;596						} //#endif597						// property access, read expression list. allow assignments598						match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);599						if (!(/*is left hand side start?*/ match.name <= 6 || this.regexLhsStart.test(match.value))) {600							if (match.value == ']') match = this.failsafe('SquareBracketsMayNotBeEmpty', match);601							else match = this.failsafe('SquareBracketExpectsExpression', match);602						}603						match = this.eatExpressions(false, match, stack);604						if (match.value != ']') match = this.failsafe('UnclosedSquareBrackets', match);605						if (this.ast) { //#ifdef FULL_AST606							match.twin = lhsb;607							match.propertyAccessStop = true;608							lhsb.twin = match;609							if (stack[stack.length-1].desc == 'expressions') {610								// create ref to this expression group to the opening bracket611								lhsb.expressionArg = stack[stack.length-1];612							}613						} //#endif614						match = this.tokenizer.storeCurrentAndFetchNextToken(true, match, stack); // might be div615						acceptAssignment = true;616					} else if (match.value == '(') {617						if (this.ast) { //#ifdef FULL_AST618							var lhp = match;619							match.isCallExpressionStart = true;620							if (news) {621								match.parensBelongToNew = true;622								--news;623							}624						} //#endif625						// call expression, eat optional expression list, disallow assignments626						match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);627						if (/*is left hand side start?*/ match.name <= 6 || this.regexLhsStart.test(match.value)) match = this.eatExpressions(false, match, stack); // arguments are optional628						if (match.value != ')') match = this.failsafe('UnclosedCallParens', match);629						if (this.ast) { //#ifdef FULL_AST630							match.twin = lhp;631							lhp.twin = match;632							match.isCallExpressionStop = true;633							if (stack[stack.length-1].desc == 'expressions') {634								// create ref to this expression group to the opening bracket635								lhp.expressionArg = stack[stack.length-1];636							}637						} //#endif638						match = this.tokenizer.storeCurrentAndFetchNextToken(true, match, stack); // might be div639						acceptAssignment = false;640					}641				}642				// check for postfix operators ++ and --643				// they are stronger than the + or - binary operators644				// they can be applied to any lhs (even when it wouldnt make sense)645				// if there was a newline, it should get an ASI646				if ((match.value == '++' || match.value == '--') && !match.newline) {647					if (isBreakOrContinueArg) match = this.failsafe('BreakOrContinueArgMustBeJustIdentifier', match);648					match = this.tokenizer.storeCurrentAndFetchNextToken(true, match, stack); // may parse div649				}650				if (this.ast) { //#ifdef FULL_AST651					// restore "expression" stack652					stack = estack;653				} //#endif654				// now see if there is an operator following...655				do { // this do allows us to parse multiple ternary expressions in succession without screwing up.656					var ternary = false;657					if (658						(!forHeader && match.value == 'in') || // one of two named binary operators, may not be first expression in for-header (when semi's occur in the for-header)659						(match.value == 'instanceof') || // only other named binary operator660						((match.name == 11/*PUNCTUATOR*/) && // we can only expect a punctuator now661							(match.isAssignment = this.regexAssignments.test(match.value)) || // assignments are only okay with proper lhs662							this.regexNonAssignmentBinaryExpressionOperators.test(match.value) // test all other binary operators663						)664					) {665						if (match.isAssignment) {666							if (!acceptAssignment) this.failignore('IllegalLhsForAssignment', match, stack);667							else if (parsedNonAssignmentOperator) this.failignore('AssignmentNotAllowedAfterNonAssignmentInExpression', match, stack);668						}669						if (isBreakOrContinueArg) match = this.failsafe('BreakOrContinueArgMustBeJustIdentifier', match);670						if (!match.isAssignment) parsedNonAssignmentOperator = true; // last allowed assignment671						if (this.ast) { //#ifdef FULL_AST672							match.isBinaryOperator = true;673							// we build a stack to ensure any whitespace doesnt break the 1+(n*2) children rule for expressions674							var ostack = stack;675							stack = [];676							stack.desc = 'operator-expression';677							stack.isBinaryOperator = true;678							stack.sub = match.value;679							stack.nextBlack = match.tokposb;680							ostack.sub = match.value;681							stack.isAssignment = match.isAssignment;682							ostack.push(stack);683						} //#endif684						ternary = match.value == '?';685						// math, logic, assignment or in or instanceof686						match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);687						if (this.ast) { //#ifdef FULL_AST688							// restore "expression" stack689							stack = ostack;690						} //#endif691						// minor exception to ternary operator, we need to parse two expressions nao. leave the trailing expression to the loop.692						if (ternary) {693							// LogicalORExpression "?" AssignmentExpression ":" AssignmentExpression694							// so that means just one expression center and right.695							if (!(/*is left hand side start?*/ match.name <= 6 || this.regexLhsStart.test(match.value))) this.failignore('InvalidCenterTernaryExpression', match, stack);696							match = this.eatExpressions(false, match, stack, true, forHeader); // only one expression allowed inside ternary center/right697							if (match.value != ':') {698								if (match.value == ',') match = this.failsafe('TernarySecondExpressionCanNotContainComma', match);699								else match = this.failsafe('UnfinishedTernaryOperator', match);700							}701							if (this.ast) { //#ifdef FULL_AST702								// we build a stack to ensure any whitespace doesnt break the 1+(n*2) children rule for expressions703								var ostack = stack;704								stack = [];705								stack.desc = 'operator-expression';706								stack.sub = match.value;707								stack.nextBlack = match.tokposb;708								ostack.sub = match.value;709								stack.isAssignment = match.isAssignment;710								ostack.push(stack);711							} //#endif712							match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);713							if (this.ast) { //#ifdef FULL_AST714								stack = ostack;715							} //#endif716							// rhs of the ternary can not contain a comma either717							match = this.eatExpressions(false, match, stack, true, forHeader); // only one expression allowed inside ternary center/right718						}719					} else {720						parseAnotherExpression = false;721					}722				} while (ternary); // if we just parsed a ternary expression, we need to check _again_ whether the next token is a binary operator.723				// start over. match is the rhs for the lhs we just parsed, but lhs for the next expression724				if (parseAnotherExpression && !(/*is left hand side start?*/ match.name <= 6 || this.regexLhsStart.test(match.value))) {725					// no idea what to do now. lets just ignore and see where it ends. TOFIX: maybe just break the loop or return?726					this.failignore('InvalidRhsExpression', match, stack);727				}728			}729			if (this.ast) { //#ifdef FULL_AST730				// restore "expressions" stack731				stack = astack;732			} //#endif733			// at this point we should have parsed one AssignmentExpression734			// lets see if we can parse another one...735			mayParseLabeledStatementInstead = first = false;736		} while (!onlyOne && match.value == ',');737		if (this.ast) { //#ifdef FULL_AST738			// remove empty array739			if (!stack.length) pstack.length = pstack.length-1;740			pstack.numberOfExpressions = parsedExpressions;741			if (pstack[0]) pstack[0].numberOfExpressions = parsedExpressions;742			stack.expressionCount = parsedExpressions;743		} //#endif744		return match;745	},746	eatFunctionDeclaration: function(match, stack){747		if (this.ast) { //#ifdef FULL_AST748			stack.push(stack = []);749			var prevscope = this.scope;750			stack.desc = 'func decl';751			stack.isFunction = true;752			stack.nextBlack = match.tokposb;753			if (!this.scope.functions) this.scope.functions = [];754			match.functionId = this.scope.functions.length;755			this.scope.functions.push(match);756			// add new scope757			match.scope = stack.scope = this.scope = [758				this.scope, // add current scope (build scope chain up-down)759				// Object.create(null,760				{value:'this', isDeclared:true, isEcma:true, functionStack:stack},761				// Object.create(null,762				{value:'arguments', isDeclared:true, isEcma:true, varType:['Object']}763			];764			// ref to back to function that's the cause for this scope765			this.scope.scopeFor = match;766			match.targetScope = prevscope; // consistency767			768			match.functionStack = stack;769			match.isFuncDeclKeyword = true;770		} //#endif771		// only place that this function is used already checks whether next token is function772		var functionKeyword = match;773		match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);774		if (match.name != 2/*IDENTIFIER*/) match = this.failsafe('FunctionDeclarationsMustHaveName', match);775		if (this.hashStartKeyOrReserved[match.value[0]] /*this.regexStartKeyOrReserved.test(match.value[0])*/ && this.regexIsKeywordOrReserved.test(match.value)) this.failignore('FunctionNameMayNotBeReserved', match, stack);776		if (this.ast) { //#ifdef FULL_AST777			functionKeyword.funcName = match;778			prevscope.push({value:match.value});779			match.meta = 'func decl name'; // that's what it is, really780			match.varType = ['Function'];781			match.functionStack = stack;782		} //#endif783		match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);784		match = this.eatFunctionParametersAndBody(match, stack, false, functionKeyword); // first token after func-decl is regex785		if (this.ast) { //#ifdef FULL_AST786			// restore previous scope787			this.scope = prevscope;788		} //#endif789		return match;790	},791	eatObjectLiteralColonAndBody: function(match, stack){792		if (this.ast) { //#ifdef FULL_AST793			var propValueStack = stack;794			stack = [];795			stack.desc = 'objlit pair colon';796			stack.nextBlack = match.tokposb;797			propValueStack.push(stack);798		} //#endif799		if (match.value != ':') match = this.failsafe('ObjectLiteralExpectsColonAfterName', match);800		match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);801		if (this.ast) { //#ifdef FULL_AST802			stack = propValueStack;803		} //#endif804		// this might actually fail due to ASI optimization.805		// if the property name does not exist and it is the last item806		// of the objlit, the expression parser will see an unexpected807		// } and ignore it, giving some leeway to apply ASI. of course,808		// that doesnt work for objlits. but we dont want to break the809		// existing mechanisms. so we check this differently... :)810		var prevMatch = match;811		match = this.eatExpressions(false, match, stack, true); // only one expression812		if (match == prevMatch) match = this.failsafe('ObjectLiteralMissingPropertyValue', match);813		return match;814	},815	eatFunctionParametersAndBody: function(match, stack, div, funcToken){816		// div: the first token _after_ a function expression may be a division...817		if (match.value != '(') match = this.failsafe('ExpectingFunctionHeaderStart', match);818		else if (this.ast) { //#ifdef FULL_AST819			var lhp = match;820			funcToken.lhp = match;821		} //#endif822		match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);823		if (match.name == 2/*IDENTIFIER*/) { // params824			if (this.hashStartKeyOrReserved[match.value[0]] /*this.regexStartKeyOrReserved.test(match.value[0])*/ && this.regexIsKeywordOrReserved.test(match.value)) this.failignore('FunctionArgumentsCanNotBeReserved', match, stack);825			if (this.ast) { //#ifdef FULL_AST826				if (!funcToken.paramNames) funcToken.paramNames = [];827				stack.paramNames = funcToken.paramNames;828				funcToken.paramNames.push(match);829				this.scope.push({value:match.value}); // add param name to scope830				match.meta = 'parameter';831			} //#endif832			match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);833			while (match.value == ',') {834				match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);835				if (match.name != 2/*IDENTIFIER*/) {836					// example: if name is 12, the source is incomplete...837					this.failignore('FunctionParametersMustBeIdentifiers', match, stack);838				} else if (this.hashStartKeyOrReserved[match.value[0]] /*this.regexStartKeyOrReserved.test(match.value[0])*/ && this.regexIsKeywordOrReserved.test(match.value)) {839					this.failignore('FunctionArgumentsCanNotBeReserved', match, stack);840				}841				if (this.ast) { //#ifdef FULL_AST842					// Object.create(null,843					this.scope.push({value:match.value}); // add param name to scope844					match.meta = 'parameter';845					if (match.name == 2/*IDENTIFIER*/) funcToken.paramNames.push(match);846				} //#endif847				match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);848			}849		}850		if (this.ast) { //#ifdef FULL_AST851			if (lhp) {852				match.twin = lhp;853				lhp.twin = match;854				funcToken.rhp = match;855			}856		} //#endif857		if (match.value != ')') match = this.failsafe('ExpectedFunctionHeaderClose', match); // TOFIX: can be various things here...858		match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);859		match = this.eatFunctionBody(match, stack, div, funcToken);860		return match;861	},862	eatFunctionBody: function(match, stack, div, funcToken){863		if (this.ast) { //#ifdef FULL_AST864			stack.push(stack = []);865			stack.desc = 'func body';866			stack.nextBlack = match.tokposb;867			// create EMPTY list of functions. labels cannot cross function boundaries868			var labelBackup = this.statementLabels;869			this.statementLabels = [];870			stack.labels = this.statementLabels;871		} //#endif872		// if div, a division can occur _after_ this function expression873		//this.stats.eatFunctionBody = (+//this.stats.eatFunctionBody||0)+1;874		if (match.value != '{') match = this.failsafe('ExpectedFunctionBodyCurlyOpen', match);875		if (this.ast) { //#ifdef FULL_AST876			var lhc = match;877			if (funcToken) funcToken.lhc = lhc;878		} //#endif879		match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);880		match = this.eatSourceElements(match, stack);881		if (match.value != '}') match = this.failsafe('ExpectedFunctionBodyCurlyClose', match);882		if (this.ast) { //#ifdef FULL_AST883			match.twin = lhc;884			lhc.twin = match;885			if (funcToken) funcToken.rhc = match;886		} //#endif887		match = this.tokenizer.storeCurrentAndFetchNextToken(div, match, stack);888		if (this.ast) { //#ifdef FULL_AST889			// restore label set890			this.statementLabels = labelBackup;891		} //#endif892		return match;893	},894	eatVar: function(match, stack){895		if (this.ast) { //#ifdef FULL_AST896			stack.push(stack = []);897			stack.desc = 'statement';898			stack.sub = 'var';899			stack.nextBlack = match.tokposb;900			match.stack = stack;901			match.isVarKeyword = true;902		} //#endif903		match = this.eatVarDecl(match, stack);904		match = this.eatSemiColon(match, stack);905		return match;906	},907	eatVarDecl: function(match, stack, forHeader){908		// assumes match is indeed the identifier 'var'909		if (this.ast) { //#ifdef FULL_AST910			stack.push(stack = []);911			stack.desc = 'var decl';912			stack.nextBlack = match.tokposb;913			var targetScope = this.scope;914			while (targetScope.catchScope) targetScope = targetScope[0];915		} //#endif916		var first = true;917		var varsDeclared = 0;918		do {919			++varsDeclared;920			match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack); // start: var, iteration: comma921			if (this.ast) { //#ifdef FULL_AST922				var declStack = stack;923				var stack = [];924				stack.desc = 'single var decl';925				stack.varStack = declStack; // reference to the var statement stack, it might hook to jsdoc needed for these vars926				stack.nextBlack = match.tokposb;927				declStack.push(stack);928				var singleDecStack = stack;929				stack = [];930				stack.desc = 'sub-expression';931				stack.nextBlack = match.tokposb;932				singleDecStack.push(stack);933			} //#endif934			// next token should be a valid identifier935			if (match.name == 12/*eof*/) {936				if (first) match = this.failsafe('VarKeywordMissingName', match);937				// else, ignore. TOFIX: return?938				else match = this.failsafe('IllegalTrailingComma', match);939			} else if (match.name != 2/*IDENTIFIER*/) {940				match = this.failsafe('VarNamesMayOnlyBeIdentifiers', match);941			} else if (this.hashStartKeyOrReserved[match.value[0]] /*this.regexStartKeyOrReserved.test(match.value[0])*/ && this.regexIsKeywordOrReserved.test(match.value)) {942				match = this.failsafe('VarNamesCanNotBeReserved', match);943			}944			// mark the match as being a variable name. we need it for lookup later :)945			if (this.ast) { //#ifdef FULL_AST946				match.meta = 'var name';947				targetScope.push({value:match.value});948			} //#endif949			match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);950			if (this.ast) { //#ifdef FULL_AST951				stack = singleDecStack;952			} //#endif953			// next token should either be a = , or ;954			// if = parse an expression and optionally a comma955			if (match.value == '=') {956				if (this.ast) { //#ifdef FULL_AST957					singleDecStack = stack;958					stack = [];959					stack.desc = 'operator-expression';960					stack.sub = '=';961					stack.nextBlack = match.tokposb;962					singleDecStack.push(stack);963					stack.isAssignment = true;964				} //#endif965				match.isInitialiser = true;966				match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);967				if (this.ast) { //#ifdef FULL_AST968					stack = singleDecStack;969				} //#endif970				if (!(/*is left hand side start?*/ match.name <= 6 || match.name == 14/*error*/ || this.regexLhsStart.test(match.value))) match = this.failsafe('VarInitialiserExpressionExpected', match);971				match = this.eatExpressions(false, match, stack, true, forHeader); // only one expression 972				// var statement: comma or semi now973				// for statement: semi, comma or 'in'974			}975			if (this.ast) { //#ifdef FULL_AST976				stack = declStack;977			} //#endif978			// determines proper error message in one case979			first = false;980		// keep parsing name(=expression) sequences as long as you see a comma here981		} while (match.value == ',');982		if (this.ast) { //#ifdef FULL_AST983			stack.varsDeclared = varsDeclared;984		} //#endif985		return match;986	},987	eatIf: function(match, stack){988		if (this.ast) { //#ifdef FULL_AST989			stack.push(stack = []);990			stack.desc = 'statement';991			stack.sub = 'if';992			stack.hasElse = false;993			stack.nextBlack = match.tokposb;994		} //#endif995		// (996		// expression997		// )998		// statement999		// [else statement]1000		var ifKeyword = match;1001		match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1002		if (match.value != '(') match = this.failsafe('ExpectedStatementHeaderOpen', match);1003		if (this.ast) { //#ifdef FULL_AST1004			var lhp = match;1005			match.statementHeaderStart = true;1006		} //#endif1007		match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1008		if (!(/*is left hand side start?*/ match.name <= 6 || this.regexLhsStart.test(match.value))) match = this.failsafe('StatementHeaderIsNotOptional', match);1009		match = this.eatExpressions(false, match, stack);1010		if (match.value != ')') match = this.failsafe('ExpectedStatementHeaderClose', match);1011		if (this.ast) { //#ifdef FULL_AST1012			match.twin = lhp;1013			match.statementHeaderStop = true;1014			lhp.twin = match;1015			if (stack[stack.length-1].desc == 'expressions') {1016				// create ref to this expression group to the opening bracket1017				lhp.expressionArg = stack[stack.length-1];1018			}1019		} //#endif1020		match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1021		match = this.eatStatement(false, match, stack);1022		// match might be null here... (if the if-statement was end part of the source)1023		if (match && match.value == 'else') {1024			if (this.ast) { //#ifdef FULL_AST1025				ifKeyword.hasElse = match;1026			} //#endif1027			match = this.eatElse(match, stack);1028		}1029		return match;1030	},1031	eatElse: function(match, stack){1032		if (this.ast) { //#ifdef FULL_AST1033			stack.hasElse = true;1034			stack.push(stack = []);1035			stack.desc = 'statement';1036			stack.sub = 'else';1037			stack.nextBlack = match.tokposb;1038		} //#endif1039		match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1040		match = this.eatStatement(false, match, stack);1041		return match;1042	},1043	eatDo: function(match, stack){1044		if (this.ast) { //#ifdef FULL_AST1045			stack.push(stack = []);1046			stack.desc = 'statement';1047			stack.sub = 'do';1048			stack.isIteration = true;1049			stack.nextBlack = match.tokposb;1050			this.statementLabels.push(''); // add "empty"1051			var doToken = match;1052		} //#endif1053		// statement1054		// while1055		// (1056		// expression1057		// )1058		// semi-colon1059		match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1060		match = this.eatStatement(false, match, stack);1061		if (match.value != 'while') match = this.failsafe('DoShouldBeFollowedByWhile', match);1062		if (this.ast) { //#ifdef FULL_AST1063			match.hasDo = doToken;1064		} //#endif1065		match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1066		if (match.value != '(') match = this.failsafe('ExpectedStatementHeaderOpen', match);1067		if (this.ast) { //#ifdef FULL_AST1068			var lhp = match;1069			match.statementHeaderStart = true;1070		} //#endif1071		match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1072		if (!(/*is left hand side start?*/ match.name <= 6 || this.regexLhsStart.test(match.value))) match = this.failsafe('StatementHeaderIsNotOptional', match);1073		match = this.eatExpressions(false, match, stack);1074		if (match.value != ')') match = this.failsafe('ExpectedStatementHeaderClose', match);1075		if (this.ast) { //#ifdef FULL_AST1076			match.twin = lhp;1077			match.statementHeaderStop = true;1078			match.isForDoWhile = true; // prevents missing block warnings1079			lhp.twin = match;1080			if (stack[stack.length-1].desc == 'expressions') {1081				// create ref to this expression group to the opening bracket1082				lhp.expressionArg = stack[stack.length-1];1083			}1084		} //#endif1085		match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1086		match = this.eatSemiColon(match, stack); // TOFIX: this is not optional according to the spec, but browsers apply ASI anyways1087		return match;1088	},1089	eatWhile: function(match, stack){1090		if (this.ast) { //#ifdef FULL_AST1091			stack.push(stack = []);1092			stack.desc = 'statement';1093			stack.sub = 'while';1094			stack.isIteration = true;1095			stack.nextBlack = match.tokposb;1096			this.statementLabels.push(''); // add "empty"1097		} //#endif1098		// (1099		// expression1100		// )1101		// statement1102		match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1103		if (match.value != '(') match = this.failsafe('ExpectedStatementHeaderOpen', match);1104		if (this.ast) { //#ifdef FULL_AST1105			var lhp = match;1106			match.statementHeaderStart = true;1107		} //#endif1108		match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1109		if (!(/*is left hand side start?*/ match.name <= 6 || this.regexLhsStart.test(match.value))) match = this.failsafe('StatementHeaderIsNotOptional', match);1110		match = this.eatExpressions(false, match, stack);1111		if (match.value != ')') match = this.failsafe('ExpectedStatementHeaderClose', match);1112		if (this.ast) { //#ifdef FULL_AST1113			match.twin = lhp;1114			match.statementHeaderStop = true;1115			lhp.twin = match;1116			if (stack[stack.length-1].desc == 'expressions') {1117				// create ref to this expression group to the opening bracket1118				lhp.expressionArg = stack[stack.length-1];1119			}1120		} //#endif1121		match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1122		match = this.eatStatement(false, match, stack);1123		return match;1124	},1125	eatFor: function(match, stack){1126		if (this.ast) { //#ifdef FULL_AST1127			stack.push(stack = []);1128			stack.desc = 'statement';1129			stack.sub = 'for';1130			stack.isIteration = true;1131			stack.nextBlack = match.tokposb;1132			this.statementLabels.push(''); // add "empty"1133		} //#endif1134		// either a for(..in..) or for(..;..;..)1135		// start eating an expression but refuse to parse1136		// 'in' on the top-level of that expression. they are fine1137		// in sub-levels (group, array, etc). Now the expression1138		// must be followed by either ';' or 'in'. Else throw.1139		// Branch on that case, ; requires two.1140		match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1141		if (match.value != '(') match = this.failsafe('ExpectedStatementHeaderOpen', match);1142		if (this.ast) { //#ifdef FULL_AST1143			var lhp = match;1144			match.statementHeaderStart = true;1145			match.forHeaderStart = true;1146		} //#endif1147		match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1148		// for (either case) may start with var, in which case you'll parse a var declaration before encountering the 'in' or first semi.1149		if (match.value == 'var') {1150			match = this.eatVarDecl(match, stack, true);1151		} else if (match.value != ';') { // expressions are optional in for-each1152			if (!(/*is left hand side start?*/ match.name <= 6 || this.regexLhsStart.test(match.value))) {1153				this.failignore('StatementHeaderIsNotOptional', match, stack);1154			}1155			match = this.eatExpressions(false, match, stack, false, true); // can parse multiple expressions, in is not ok here1156		}1157		// now we parsed an expression if it existed. the next token should be either ';' or 'in'. branch accordingly1158		if (match.value == 'in') {1159			var declStack = stack[stack.length-1];1160			if (declStack.varsDeclared > 1) {1161				// disallowed. for-in var decls can only have one var name declared1162				this.failignore('ForInCanOnlyDeclareOnVar', match, stack);1163			}1164			1165			if (this.ast) { //#ifdef FULL_AST1166				stack.forType = 'in';1167				match.forFor = true; // make easy distinction between conditional and iterational operator1168			} //#endif1169			// just parse another expression, where 'in' is allowed.1170			match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1171			match = this.eatExpressions(false, match, stack);1172		} else {1173			if (match.value != ';') match = this.failsafe('ForHeaderShouldHaveSemisOrIn', match);1174			if (this.ast) { //#ifdef FULL_AST1175				stack.forType = 'each';1176				match.forEachHeaderStart = true;1177			} //#endif1178			// parse another optional no-in expression, another semi and then one more optional no-in expression1179			match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1180			if (/*is left hand side start?*/ match.name <= 6 || this.regexLhsStart.test(match.value)) match = this.eatExpressions(false, match, stack); // in is ok here1181			if (match.value != ';') match = this.failsafe('ExpectedSecondSemiOfForHeader', match);1182			if (this.ast) { //#ifdef FULL_AST1183				match.forEachHeaderStop = true;1184			} //#endif1185			match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1186			if (/*is left hand side start?*/ match.name <= 6 || this.regexLhsStart.test(match.value)) match = this.eatExpressions(false, match, stack); // in is ok here1187		}1188		if (match.value != ')') match = this.failsafe('ExpectedStatementHeaderClose', match);1189		if (this.ast) { //#ifdef FULL_AST1190			match.twin = lhp;1191			match.statementHeaderStop = true;1192			match.forHeaderStop = true;1193			lhp.twin = match;1194			if (match.forType == 'in' && stack[stack.length-1].desc == 'expressions') {1195				// create ref to this expression group to the opening bracket1196				lhp.expressionArg = stack[stack.length-1];1197			}1198		} //#endif1199		match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1200		match = this.eatStatement(false, match, stack);1201		return match;1202	},1203	eatContinue: function(match, stack){1204		if (this.ast) { //#ifdef FULL_AST1205			stack.push(stack = []);1206			stack.desc = 'statement';1207			stack.sub = 'continue';1208			stack.nextBlack = match.tokposb;1209			match.restricted = true;1210		} //#endif1211		// (no-line-break identifier)1212		// ;1213		match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack); // may not have line terminator...1214		if (!match.newline && match.value != ';' && match.name != 12/*EOF*/ && match.value != '}') {1215			if (this.ast) { //#ifdef FULL_AST1216				match.isLabel = true;1217				match.isLabelTarget = true;1218				var continueArg = match; // remember to see if this continue parsed a label1219			} //#endif1220			// may only parse exactly an identifier at this point1221			match = this.eatExpressions(false, match, stack, true, false, true); // first true=onlyOne, second: continue/break arg1222			if (this.ast) { //#ifdef FULL_AST1223				stack.hasLabel = continueArg != match;1224			} //#endif1225			if (match.value != ';' && !match.newline && match.name != 12/*eof*/ && match.value != '}') match = this.failsafe('BreakOrContinueArgMustBeJustIdentifier', match);1226		}1227		match = this.eatSemiColon(match, stack);1228		return match;1229	},1230	eatBreak: function(match, stack){1231		if (this.ast) { //#ifdef FULL_AST1232			var parentstack = stack1233			stack = [];1234			stack.desc = 'statement';1235			stack.sub = 'break';1236			stack.nextBlack = match.tokposb;1237			1238			parentstack.push(stack);1239			match.restricted = true;1240		} //#endif1241		// (no-line-break identifier)1242		// ;1243		match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack); // may not have line terminator...1244		if (!match.newline && match.value != ';' && match.name != 12/*EOF*/ && match.value != '}') {1245			if (this.ast) { //#ifdef FULL_AST1246				match.isLabel = true;1247				match.isLabelTarget = true;1248				var breakArg = match; // remember to see if this break parsed a label1249			} //#endif1250			// may only parse exactly an identifier at this point1251			match = this.eatExpressions(false, match, stack, true, false, true); // first true=onlyOne, second: continue/break arg1252			if (this.ast) { //#ifdef FULL_AST1253				stack.hasLabel = breakArg != match;1254			} //#endif1255			if (match.value != ';' && !match.newline && match.name != 12/*eof*/ && match.value != '}') match = this.failsafe('BreakOrContinueArgMustBeJustIdentifier', match);1256		}1257		match = this.eatSemiColon(match, stack);1258		return match;1259	},1260	eatReturn: function(match, stack){1261		if (this.ast) { //#ifdef FULL_AST1262			stack.push(stack = []);1263			stack.desc = 'statement';1264			stack.sub = 'return';1265			stack.nextBlack = match.tokposb;1266			stack.returnFor = this.scope.scopeFor;1267			match.restricted = true;1268		} //#endif1269		// (no-line-break expression)1270		// ;1271		match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack); // may not have line terminator...1272		if (!match.newline && match.value != ';' && match.name != 12/*EOF*/ && match.value != '}') {1273			match = this.eatExpressions(false, match, stack);1274		}1275		match = this.eatSemiColon(match, stack);1276		return match;1277	},1278	eatThrow: function(match, stack){1279		if (this.ast) { //#ifdef FULL_AST1280			stack.push(stack = []);1281			stack.desc = 'statement';1282			stack.sub = 'throw';1283			stack.nextBlack = match.tokposb;1284			match.restricted = true;1285		} //#endif1286		// (no-line-break expression)1287		// ;1288		match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack); // may not have line terminator...1289		if (match.newline) match = this.failsafe('ThrowCannotHaveReturn', match);1290		if (match.value == ';') match = this.failsafe('ThrowMustHaveArgument', match);1291		match = this.eatExpressions(false, match, stack);1292		match = this.eatSemiColon(match, stack);1293		return match;1294	},1295	eatSwitch: function(match, stack){1296		if (this.ast) { //#ifdef FULL_AST1297			stack.push(stack = []);1298			stack.desc = 'statement';1299			stack.sub = 'switch';1300			stack.nextBlack = match.tokposb;1301			this.statementLabels.push(''); // add "empty"1302		} //#endif1303		// meh.1304		match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1305		if (match.value != '(') match = this.failsafe('ExpectedStatementHeaderOpen', match);1306		if (this.ast) { //#ifdef FULL_AST1307			var lhp = match;1308			match.statementHeaderStart = true;1309		} //#endif1310		match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1311		if (!(/*is left hand side start?*/ match.name <= 6 || this.regexLhsStart.test(match.value))) {1312			this.failignore('StatementHeaderIsNotOptional', match, stack);1313		}1314		match = this.eatExpressions(false, match, stack);1315		if (match.value != ')') match = this.failsafe('ExpectedStatementHeaderClose', match);1316		if (this.ast) { //#ifdef FULL_AST1317			match.twin = lhp;1318			match.statementHeaderStop = true;1319			lhp.twin = match;1320			if (stack[stack.length-1].desc == 'expressions') {1321				// create ref to this expression group to the opening bracket1322				lhp.expressionArg = stack[stack.length-1];1323			}1324		} //#endif1325		match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1326		if (match.value != '{') match = this.failsafe('SwitchBodyStartsWithCurly', match);1327		if (this.ast) { //#ifdef FULL_AST1328			var lhc = match;1329		} //#endif1330		match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1331		// you may parse a default case, and only once per switch. but you may do so anywhere.1332		var parsedAnything = false;1333		while (match.value == 'case' || (!stack.parsedSwitchDefault && match.value == 'default')) {1334			parsedAnything = true;1335			if (match.value == 'default') stack.parsedSwitchDefault = true;1336			match = this.eatSwitchClause(match, stack);1337		}1338		// if you didnt parse anything but not encountering a closing curly now, you might be thinking that switches may start with silly stuff1339		if (!parsedAnything && match.value != '}') {1340			match = this.failsafe('SwitchBodyMustStartWithClause', match);1341		}1342		if (stack.parsedSwitchDefault && match.value == 'default') {1343			this.failignore('SwitchCannotHaveDoubleDefault', match, stack);1344		}1345		if (match.value != '}' && match.name != 14/*error*/) match = this.failsafe('SwitchBodyEndsWithCurly', match);1346		if (this.ast) { //#ifdef FULL_AST1347			match.twin = lhc;1348			lhc.twin = match;1349		} //#endif1350		match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1351		return match;1352	},1353	eatSwitchClause: function(match, stack){1354		match = this.eatSwitchHeader(match, stack);1355		match = this.eatSwitchBody(match, stack);1356		return match;1357	},1358	eatSwitchHeader: function(match, stack){1359		if (this.ast) { //#ifdef FULL_AST1360			// collect whitespace...1361			var switchHeaderStack = stack1362			stack.push(stack = []);1363			stack.desc = 'switch clause header';1364			stack.nextBlack = match.tokposb;1365		} //#endif1366		if (match.value == 'case') {1367			match = this.eatSwitchCaseHead(match, stack);1368		} else { // default1369			if (this.ast) { //#ifdef FULL_AST1370				switchHeaderStack.hasDefaultClause = true;1371			} //#endif1372			match = this.eatSwitchDefaultHead(match, stack);1373		}1374		if (this.ast) { //#ifdef FULL_AST1375			// just to group whitespace (makes certain navigation easier..)1376			stack.push(stack = []);1377			stack.desc = 'colon';1378			stack.nextBlack = match.tokposb;1379		} //#endif1380		if (match.value != ':') {1381			match = this.failsafe('SwitchClausesEndWithColon', match);1382		}1383		match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1384		return match;1385	},1386	eatSwitchBody: function(match, stack){1387		if (this.ast) { //#ifdef FULL_AST1388			stack.push(stack = []);1389			stack.desc = 'switch clause body';1390			stack.nextBlack = match.tokposb;1391		} //#endif1392		// parse body of case or default, just so long case and default keywords are not seen and end of switch is not reached1393		// (clause bodies may be empty, for instance to fall through)1394		var lastMatch = null;1395		while (match.value != 'default' && match.value != 'case' && match.value != '}' && match.name != 14/*error*/ && match.name != 12/*eof*/ && lastMatch != match) {1396			lastMatch = match; // prevents endless loops on error ;)1397			match = this.eatStatement(true, match, stack);1398		}1399		if (lastMatch == match) this.failsafe('UnexpectedInputSwitch', match);1400		return match;1401	},1402	eatSwitchCaseHead: function(match, stack){1403		if (this.ast) { //#ifdef FULL_AST1404			stack.sub = 'case';1405			var caseHeadStack = stack;1406			stack.push(stack = []);1407			stack.desc = 'case';1408			stack.nextBlack = match.tokposb;1409			match.isCase = true;1410		} //#endif1411		match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1412		if (match.value == ':') {1413			this.failignore('CaseMissingExpression', match, stack);1414		} else {1415			if (this.ast) { //#ifdef FULL_AST1416				caseHeadStack.push(stack = []);1417				stack.desc = 'case arg';1418				stack.nextBlack = match.tokposb;1419			} //#endif1420			match = this.eatExpressions(false, match, stack);1421		}1422		return match;1423	},1424	eatSwitchDefaultHead: function(match, stack){1425		if (this.ast) { //#ifdef FULL_AST1426			stack.sub = 'default';1427			stack.push(stack = []);1428			stack.desc = 'case';1429			stack.nextBlack = match.tokposb;1430			match.isDefault = true;1431		} //#endif1432		match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1433		return match;1434	},1435	eatTryCatchFinally: function(match, stack){1436		if (this.ast) { //#ifdef FULL_AST1437			stack.push(stack = []);1438			stack.desc = 'statement';1439			stack.sub = 'try';1440			stack.nextBlack = match.tokposb;1441		} //#endif1442		match = this.eatTry(match, stack);1443		if (match.value == 'catch') {1444			if (this.ast) { //#ifdef FULL_AST1445				stack.hasCatch = true;1446			} //#endif1447			match = this.eatCatch(match, stack);1448		}1449		if (match.value == 'finally') {1450			if (this.ast) { //#ifdef FULL_AST1451				stack.hasFinally = true;1452			} //#endif1453			match = this.eatFinally(match, stack);1454		}1455		// at least a catch or finally block must follow. may be both.1456		if (!stack.tryHasCatchOrFinally) {1457			this.failignore('TryMustHaveCatchOrFinally', match, stack);1458		}1459		return match;1460	},1461	eatTry: function(match, stack){1462		// block1463		// (catch ( identifier ) block )1464		// (finally block)1465		match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1466		if (match.value != '{') match = this.failsafe('MissingTryBlockCurlyOpen', match);1467		if (this.ast) { //#ifdef FULL_AST1468			stack.push(stack = []);1469			stack.desc = 'statement';1470			stack.sub = 'tryblock';1471			stack.nextBlack = match.tokposb;1472			var lhc = match;1473		} //#endif1474		match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1475		if (match.value != '}') match = this.eatStatements(match, stack);1476		if (match.value != '}') match = this.failsafe('MissingTryBlockCurlyClose', match);1477		if (this.ast) { //#ifdef FULL_AST1478			match.twin = lhc;1479			lhc.twin = match;1480		} //#endif1481		1482		match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1483		return match;1484	},1485	eatCatch: function(match, stack){1486		stack.tryHasCatchOrFinally = true;1487		if (this.ast) { //#ifdef FULL_AST1488			stack.push(stack = []);1489			stack.desc = 'statement';1490			stack.sub = 'catch';1491			stack.nextBlack = match.tokposb;1492			// the catch block has a header which can contain at most one parameter1493			// this parameter is bound to a local stack. formally, if that parameter1494			// shadows another variable, changes made to the variable inside the catch1495			// should not be reflected by the variable being shadowed. however, this1496			// is not very safe to rely on so there ought to be a warning. note that1497			// only this parameter gets bound to this inner scope, other parameters.1498			var catchScopeBackup = this.scope;1499			match.scope = this.scope = stack.scope = [this.scope];1500			this.scope.catchScope = true; // mark this as being a catchScope1501			// find first function scope or global scope object...1502			var nonCatchScope = catchScopeBackup;1503			while (nonCatchScope.catchScope) nonCatchScope = nonCatchScope[0];1504			// get catch id, which is governed by the function/global scope only1505			if (!nonCatchScope.catches) nonCatchScope.catches = [];1506			match.catchId = nonCatchScope.catches.length;1507			nonCatchScope.catches.push(match);1508			match.targetScope = nonCatchScope;1509			match.catchScope = this.scope;1510			// ref to back to function that's the cause for this scope1511			this.scope.scopeFor = match;1512			// catch clauses dont have a special `this` or `arguments`, map them to their parent scope1513			if (catchScopeBackup.global) this.scope.push(catchScopeBackup[0]); // global (has no `arguments` but always a `this`)1514			else if (catchScopeBackup.catchScope) {1515				// tricky. there will at least be a this1516				this.scope.push(catchScopeBackup[1]);1517				// but there might not be an arguments1518				if (catchScopeBackup[2] && catchScopeBackup[2].value == 'arguments') this.scope.push(catchScopeBackup[2]);1519			} else this.scope.push(catchScopeBackup[1], catchScopeBackup[2]); // function scope, copy this and arguments1520		} //#endif1521		match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1522		if (match.value != '(') match = this.failsafe('CatchHeaderMissingOpen', match);1523		if (this.ast) { //#ifdef FULL_AST1524			var lhp = match;1525		} //#endif1526		match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1527		if (match.name != 2/*IDENTIFIER*/) match = this.failsafe('MissingCatchParameter', match);1528		if (this.hashStartKeyOrReserved[match.value[0]] /*this.regexStartKeyOrReserved.test(match.value[0])*/ && this.regexIsKeywordOrReserved.test(match.value)) {1529			this.failignore('CatchParameterNameMayNotBeReserved', match, stack);1530		}1531		if (this.ast) { //#ifdef FULL_AST1532			match.meta = 'var name';1533			// this is the catch variable. bind it to a scope but keep the scope as1534			// it currently is.1535			this.scope.push(match);1536			match.isCatchVar = true;1537		} //#endif1538		// now the catch body will use the outer scope to bind new variables. the problem is that1539		// inner scopes, if any, should have access to the scope variable, so their scope should1540		// be linked to the catch scope. this is a problem in the current architecture but the 1541		// idea is to pass on the catchScope as the scope to the eatStatements call, etc.1542		match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1543		if (match.value != ')') match = this.failsafe('CatchHeaderMissingClose', match);1544		if (this.ast) { //#ifdef FULL_AST1545			match.twin = lhp;1546			lhp.twin = match;1547		} //#endif1548		match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1549		if (match.value != '{') match = this.failsafe('MissingCatchBlockCurlyOpen', match);1550		if (this.ast) { //#ifdef FULL_AST1551			var lhc = match;1552		} //#endif1553		match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1554		// catch body. statements are optional.	1555		if (match.value != '}') match = this.eatStatements(match, stack);1556		if (match.value != '}') match = this.failsafe('MissingCatchBlockCurlyClose', match);1557		if (this.ast) { //#ifdef FULL_AST1558			match.twin = lhc;1559			lhc.twin = match;1560		} //#endif1561		match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1562		if (this.ast) { //#ifdef FULL_AST1563			this.scope = catchScopeBackup;1564		} //#endif1565		return match;1566	},1567	eatFinally: function(match, stack){1568		stack.tryHasCatchOrFinally = true;1569		if (this.ast) { //#ifdef FULL_AST1570			stack.push(stack = []);1571			stack.desc = 'statement';1572			stack.sub = 'finally';1573			stack.nextBlack = match.tokposb;1574		} //#endif1575		match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1576		if (match.value != '{') match = this.failsafe('MissingFinallyBlockCurlyOpen', match);1577		if (this.ast) { //#ifdef FULL_AST1578			var lhc = match;1579		} //#endif1580		match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1581		if (match.value != '}') match = this.eatStatements(match, stack);1582		if (match.value != '}') match = this.failsafe('MissingFinallyBlockCurlyClose', match);1583		if (this.ast) { //#ifdef FULL_AST1584			match.twin = lhc;1585			lhc.twin = match;1586		} //#endif1587		match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1588		return match;1589	},1590	eatDebugger: function(match, stack){1591		if (this.ast) { //#ifdef FULL_AST1592			stack.push(stack = []);1593			stack.desc = 'statement';1594			stack.sub = 'debugger';1595			stack.nextBlack = match.tokposb;1596		} //#endif1597		match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1598		match = this.eatSemiColon(match, stack);1599		return match;1600	},1601	eatWith: function(match, stack){1602		if (this.ast) { //#ifdef FULL_AST1603			stack.push(stack = []);1604			stack.desc = 'statement';1605			stack.sub = 'with';1606			stack.nextBlack = match.tokposb;1607		} //#endif1608		match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1609		if (match.value != '(') match = this.failsafe('ExpectedStatementHeaderOpen', match);1610		if (this.ast) { //#ifdef FULL_AST1611			var lhp = match;1612			match.statementHeaderStart = true;1613		} //#endif1614		match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1615		if (!(/*is left hand side start?*/ match.name <= 6 || this.regexLhsStart.test(match.value))) match = this.failsafe('StatementHeaderIsNotOptional', match);1616		match = this.eatExpressions(false, match, stack);1617		if (match.value != ')') match = this.failsafe('ExpectedStatementHeaderClose', match);1618		if (this.ast) { //#ifdef FULL_AST1619			match.twin = lhp;1620			match.statementHeaderStop = true;1621			lhp.twin = match;1622			if (stack[stack.length-1].desc == 'expressions') {1623				// create ref to this expression group to the opening bracket1624				lhp.expressionArg = stack[stack.length-1];1625			}1626		} //#endif1627		match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1628		match = this.eatStatement(false, match, stack);1629		return match;1630	},1631	eatFunction: function(match, stack){1632		var pe = new ZeParser.Error1633		this.errorStack.push(pe);1634		// ignore. browsers will accept it anyways1635		var error = {start:match.stop,stop:match.stop,name:14/*error*/,error:pe};1636		this.specialError(error, match, stack);1637		// now try parsing a function declaration...1638		match = this.eatFunctionDeclaration(match, stack);1639		return match;1640	},1641	eatLabelOrExpression: function(match, stack){1642		if (this.ast) { //#ifdef FULL_AST1643			var parentstack = stack;1644			stack = [];1645			stack.desc = 'statement';1646			stack.sub = 'expression';1647			stack.nextBlack = match.tokposb;1648			parentstack.push(stack);1649		} //#endif1650		// must be an expression or a labeled statement.1651		// in order to prevent very weird return constructs, we'll first check the first match1652		// if that's an identifier, we'll gobble it here and move on to the second.1653		// if that's a colon, we'll gobble it as a labeled statement. otherwise, we'll pass on1654		// control to eatExpression, with the note that we've already gobbled a 1655		match = this.eatExpressions(true, match, stack);1656		// if we parsed a label, the returned match (colon) will have this property1657		if (match.wasLabel) {1658			if (this.ast) { //#ifdef FULL_AST1659				stack.sub = 'labeled';1660			} //#endif1661			// it will have already eaten another statement for the label1662		} else {1663			if (this.ast) { //#ifdef FULL_AST1664				stack.sub = 'expression';1665			} //#endif1666			// only parse semi if we didnt parse a label just now...1667			match = this.eatSemiColon(match, stack);1668		}1669		return match;1670	},1671	eatBlock: function(match, stack){1672		if (this.ast) { //#ifdef FULL_AST1673			stack.sub = 'block';1674			var lhc = match;1675		} //#endif1676		match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1677		if (match.value == '}') {1678			if (this.ast) { //#ifdef FULL_AST1679				stack.isEmptyBlock = true;1680			} //#endif1681		} else {1682			match = this.eatStatements(match, stack);1683		}1684		if (match.value != '}') match = this.failsafe('BlockCurlyClose', match);1685		if (this.ast) { //#ifdef FULL_AST1686			match.twin = lhc;1687			lhc.twin = match;1688		} //#endif1689		match = this.tokenizer.storeCurrentAndFetchNextToken(false, match, stack);1690		return match;1691	},1692	eatStatements: function(match, stack){1693		//this.stats.eatStatements = (+//this.stats.eatStatements||0)+1;1694		// detecting the start of a statement "quickly" is virtually impossible.1695		// instead we keep eating statements until the match stops changing1696		// the first argument indicates that the statement is optional. if that1697		// statement was not found, the input match will also be the output.1698		while (match != (match = this.eatStatement(true, match, stack)));1699		return match;1700	},1701	eatStatement: function(isOptional, match, stack){1702		if (!match && isOptional) return match; // eof1703		if (this.ast) { //#ifdef FULL_AST1704			match.statementStart = true;1705			var pstack = stack;1706			stack = [];1707			stack.desc = 'statement-parent';1708			stack.nextBlack = match.tokposb;1709			pstack.push(stack);1710			// list of labels, these are bound to statements (and can access any label higher up, but not cross functions)1711			var labelBackup = this.statementLabels;1712			this.statementLabels = [labelBackup]; // make ref like tree. we need this to catch labels parsed beyond the current position (not yet known to use)1713			stack.labels = this.statementLabels;1714		} //#endif1715		if (match.name == 2/*IDENTIFIER*/) {1716			// try to determine whether it's a statement1717			// (block/empty statements come later, this branch is only for identifiers)1718			switch (match.value) {1719				case 'var':1720					match = this.eatVar(match, stack);1721					break;1722				case 'if':1723					match = this.eatIf(match, stack);1724					break;1725				case 'do':1726					match = this.eatDo(match, stack);1727					break;1728				case 'while':1729					match = this.eatWhile(match, stack);1730					break;1731				case 'for':1732					match = this.eatFor(match, stack);1733					break;1734				case 'continue':1735					match = this.eatContinue(match, stack);1736					break;1737				case 'break':1738					match = this.eatBreak(match, stack);1739					break;1740				case 'return':1741					match = this.eatReturn(match, stack);1742					break;1743				case 'throw':1744					match = this.eatThrow(match, stack);1745					break;1746				case 'switch':1747					match = this.eatSwitch(match, stack);1748					break;1749				case 'try':1750					match = this.eatTryCatchFinally(match, stack);1751					break;1752				case 'debugger':1753					match = this.eatDebugger(match, stack);1754					break;1755				case 'with':1756					match = this.eatWith(match, stack);1757					break;1758				case 'function':1759					// I'm not sure whether this is at all possible.... (but it's bad, either way ;)1760					// so add an error token, but parse the function as if it was a declaration.1761					this.failignore('StatementMayNotStartWithFunction', match, stack);1762					// now parse as declaration... (most likely?)1763					match = this.eatFunctionDeclaration(match, stack);1764					break;1765				default: // either a label or an expression-statement1766					match = this.eatLabelOrExpression(match, stack);1767			}1768		} else if (match.value == '{') { // Block (make sure you do this before checking for expression...)1769			match = this.eatBlock(match, stack);1770		} else if (1771			// expression statements:1772			match.isString ||1773			match.isNumber ||1774			match.name == 1/*REG_EX*/ ||1775			this.regexLhsStart.test(match.value)1776		) {1777			match = this.eatExpressions(false, match,stack);1778			match = this.eatSemiColon(match, stack);1779		} else if (match.value == ';') { // empty statement1780			match.emptyStatement = true;1781			match = this.eatSemiColon(match, stack);1782		} else if (!isOptional) {1783			if (this.ast) { //#ifdef FULL_AST1784				// unmark token as being start of a statement, since it's obviously not1785				match.statementStart = false;1786			} //#endif1787			match = this.failsafe('UnableToParseStatement', match);1788		} else {1789			// unmark token as being start of a statement, since it's obviously not1790			if (this.ast) match.statementStart = true;1791		}1792		if (this.ast) { //#ifdef FULL_AST1793			if (!stack.length) pstack.length = pstack.length-1;1794			// restore label set1795			this.statementLabels = labelBackup;1796		} //#endif1797		return match;1798	},1799	eatSourceElements: function(match, stack){1800		//this.stats.eatSourceElements = (+//this.stats.eatSourceElements||0)+1;1801		// detecting the start of a statement "quickly" is virtually impossible.1802		// instead we keep eating statements until the match stops changing1803		// the first argument indicates that the statement is optional. if that1804		// statement was not found, the input match will also be the output.1805		while (match != oldMatch) { // difficult to determine whether ` && match.name != 12/*EOF*/` is actually speeding things up. it's an extra check vs one less call to eatStatement...1806			var oldMatch = match;1807			// always try to eat function declaration first. otherwise 'function' at the start might cause eatStatement to throw up1808			if (match.value == 'function') match = this.eatFunctionDeclaration(match, stack);1809			else match = this.eatStatement(true, match, stack);1810		}1811		return match;1812	},1813	failsafe: function(name, match, doNotAddMatch){1814		var pe = new ZeParser.Error(name, match);1815		this.errorStack.push(pe);1816		if (!doNotAddMatch) {1817			// the match was bad, but add it to the ast anyways. in most cases this is the case but in some its not.1818			// the tokenizer will pick up on the errorEscape property and add it after the match we passed on.1819			if (this.tokenizer.errorEscape) this.stack.push(this.tokenizer.errorEscape);1820			this.tokenizer.errorEscape = match;1821		}1822		var error = {start:match.start,stop:match.start,len:0, name:14/*error*/,error:pe, value:''};1823		this.tokenizer.addTokenToStreamBefore(error, match);1824		return error;1825	},1826	failignore: function(name, match, stack){1827		var pe = new ZeParser.Error(name, match);1828		this.errorStack.push(pe);1829		// ignore the error (this will screw up :)1830		var error = {start:match.start,stop:match.start,len:0,name:14/*error*/,error:pe, value:''};1831		stack.push(error);1832		this.tokenizer.addTokenToStreamBefore(error, match);1833	},1834	failSpecial: function(error, match, stack){1835		// we cant really ignore this. eat the token1836		stack.push(error);1837		this.tokenizer.addTokenToStreamBefore(error, match);1838	},18390:0};1840//#ifdef TEST_SUITE1841ZeParser.testSuite = function(tests){1842	var ok = 0;1843	var fail = 0;1844	var start = +new Date;1845	for (var i = 0; i < tests.length; ++i) {1846		var test = tests[i], input = test[0], outputLen = test[1].length ? test[1][1] : test[1], desc = test[test.length - 1], stack = [];1847		try {1848			var result = ZeParser.parse(input, true);1849			if (result.length == outputLen) {1850				++ok;1851			} else {1852				++fail;1853			}1854		} catch (e) {1855			++fail;1856		}1857		document.getElementsByTagName('div')[0].innerHTML = ('Ze parser test suite finished ('+(+new Date - start)+' ms). ok:'+ok+', fail:'+fail);1858	};1859};1860//#endif1861ZeParser.regexLhsStart = /[\+\-\~\!\(\{\[]/;1862/*1863ZeParser.regexStartKeyword = /[bcdefinrstvw]/;1864ZeParser.regexKeyword = /^break$|^catch$|^continue$|^debugger$|^default$|^delete$|^do$|^else$|^finally$|^for$|^function$|^if$|^in$|^instanceof$|^new$|^return$|^switch$|^this$|^throw$|^try$|^typeof$|^var$|^void$|^while$|^with$/;1865ZeParser.regexStartReserved = /[ceis]/;1866ZeParser.regexReserved = /^class$|^const$|^enum$|^export$|^extends$|^import$|^super$/;1867*/1868ZeParser.regexStartKeyOrReserved = /[bcdefinrstvw]/;1869ZeParser.hashStartKeyOrReserved = Object.create ? Object.create(null, {b:{value:1},c:{value:1},d:{value:1},e:{value:1},f:{value:1},i:{value:1},n:{value:1},r:{value:1},s:{value:1},t:{value:1},v:{value:1},w:{value:1}}) : {b:1,c:1,d:1,e:1,f:1,i:1,n:1,r:1,s:1,t:1,v:1,w:1};1870ZeParser.regexIsKeywordOrReserved = /^break$|^catch$|^continue$|^debugger$|^default$|^delete$|^do$|^else$|^finally$|^for$|^function$|^if$|^in$|^instanceof$|^new$|^return$|^switch$|^case$|^this$|^true$|^false$|^null$|^throw$|^try$|^typeof$|^var$|^void$|^while$|^with$|^class$|^const$|^enum$|^export$|^extends$|^import$|^super$/;1871ZeParser.regexAssignments = /^[\+\-\*\%\&\|\^\/]?=$|^\<\<\=$|^\>{2,3}\=$/;1872ZeParser.regexNonAssignmentBinaryExpressionOperators = /^[\+\-\*\%\|\^\&\?\/]$|^[\<\>]\=?$|^[\=\!]\=\=?$|^\<\<|\>\>\>?$|^\&\&$|^\|\|$/;1873ZeParser.regexUnaryKeywords = /^delete$|^void$|^typeof$|^new$/;1874ZeParser.hashUnaryKeywordStart = Object.create ? Object.create(null, {d:{value:1},v:{value:1},t:{value:1},n:{value:1}}) : {d:1,v:1,t:1,n:1};1875ZeParser.regexUnaryOperators = /[\+\-\~\!]/;1876ZeParser.regexLiteralKeywords = /^this$|^null$|^true$|^false$/;1877ZeParser.Error = function(type, match){1878	//if (type == 'BreakOrContinueArgMustBeJustIdentifier') throw here;1879	this.msg = ZeParser.Errors[type].msg;1880	this.before = ZeParser.Errors[type].before;1881	this.match = match;1882};1883ZeParser.Errors = {1884	NoASI: {msg:'Expected semi-colon, was unable to apply ASI'},1885	ExpectedAnotherExpressionComma: {msg:'expecting another (left hand sided) expression after the comma'},1886	ExpectedAnotherExpressionRhs: {msg:"expected a rhs expression"},1887	UnclosedGroupingOperator: {msg:"Unclosed grouping operator"},1888	GroupingShouldStartWithExpression: {msg:'The grouping operator (`(`) should start with a left hand sided expression'},1889	ArrayShouldStartWithExpression: {msg:'The array literal (`[`) should start with a left hand sided expression'},1890	UnclosedPropertyBracket: {msg:'Property bracket was not closed after expression (expecting `]`)'},1891	IllegalPropertyNameToken: {msg:'Object literal property names can only be assigned as strings, numbers or identifiers'},1892	IllegalGetterSetterNameToken: {msg:'Name of a getter/setter can only be assigned as strings, numbers or identifiers'},1893	GetterSetterNameFollowedByOpenParen: {msg:'The name of the getter/setter should immediately be followed by the opening parenthesis `(`'},1894	GetterHasNoArguments: {msg:'The opening parenthesis `(` of the getter should be immediately followed by the closing parenthesis `)`, the getter cannot have an argument'},1895	IllegalSetterArgumentNameToken: {msg:'Expecting the name of the argument of a setter, can only be assigned as strings, numbers or identifiers'},1896	SettersOnlyGetOneArgument: {msg:'Setters have one and only one argument, missing the closing parenthesis `)`'},1897	SetterHeaderShouldHaveClosingParen: {msg:'After the first argument of a setter should come a closing parenthesis `)`'},1898	SettersMustHaveArgument: {msg:'Setters must have exactly one argument defined'},1899	UnclosedObjectLiteral: {msg:'Expected to find a comma `,` for the next expression or a closing curly brace `}` to end the object literal'},1900	FunctionNameMustNotBeReserved: {msg:'Function name may not be a keyword or a reserved word'},1901	ExpressionMayNotStartWithKeyword: {msg:'Expressions may not start with keywords or reserved words that are not in this list: [this, null, true, false, void, typeof, delete, new]'},1902	LabelsMayOnlyBeIdentifiers: {msg:'Label names may only be defined as an identifier'},1903	LabelsMayNotBeReserved: {msg:'Labels may not be a keyword or a reserved word'},1904	UnknownToken: {msg:'Unknown token encountered, dont know how to proceed'},1905	PropertyNamesMayOnlyBeIdentifiers: {msg:'The tokens of property names accessed through the dot operator may only be identifiers'},1906	SquareBracketExpectsExpression: {msg:'The square bracket property access expects an expression'},1907	SquareBracketsMayNotBeEmpty: {msg:'Square brackets may never be empty, expecting an expression'},1908	UnclosedSquareBrackets: {msg:'Unclosed square bracket encountered, was expecting `]` after the expression'},1909	UnclosedCallParens: {msg:'Unclosed call parenthesis, expecting `)` after the optional expression'},1910	InvalidCenterTernaryExpression: {msg:'Center expression of ternary operator should be a regular expression (but may not contain the comma operator directly)'},1911	UnfinishedTernaryOperator: {msg:'Encountered a ternary operator start (`?`) but did not find the required colon (`:`) after the center expression'},1912	TernarySecondExpressionCanNotContainComma: {msg:'The second and third expressions of the ternary operator can/may not "directly" contain a comma operator'},1913	InvalidRhsExpression: {msg:'Expected a right hand side expression after the operator (which should also be a valid lhs) but did not find one'},1914	FunctionDeclarationsMustHaveName: {msg:'Function declaration must have name'},1915	FunctionNameMayNotBeReserved: {msg:'Function name may not be a keyword or reserved word'},1916	ExpectingFunctionHeaderStart: {msg:'Expected the opening parenthesis of the function header'},1917	FunctionArgumentsCanNotBeReserved: {msg:'Function arguments may not be keywords or reserved words'},1918	FunctionParametersMustBeIdentifiers: {msg:'Function arguments must be identifiers'},1919	ExpectedFunctionHeaderClose: {msg:'Expected the closing parenthesis `)` of the function header'},1920	ExpectedFunctionBodyCurlyOpen: {msg:'Expected the opening curly brace `{` for the function body'},1921	ExpectedFunctionBodyCurlyClose: {msg:'Expected the closing curly brace `}` for the function body'},1922	VarNamesMayOnlyBeIdentifiers: {msg:'Missing variable name, must be a proper identifier'},1923	VarNamesCanNotBeReserved: {msg:'Variable names may not be keywords or reserved words'},1924	VarInitialiserExpressionExpected: {msg:'The initialiser of the variable statement should be an expression without comma'},1925	ExpectedStatementHeaderOpen: {msg:'Expected opening parenthesis `(` for statement header'},1926	StatementHeaderIsNotOptional: {msg:'Statement header must not be empty'},1927	ExpectedStatementHeaderClose: {msg:'Expected closing parenthesis `)` for statement header'},1928	DoShouldBeFollowedByWhile: {msg:'The do-while statement requires the `while` keyword after the expression'},1929	ExpectedSecondSemiOfForHeader: {msg:'Expected the second semi-colon of the for-each header'},1930	ForHeaderShouldHaveSemisOrIn: {msg:'The for-header should contain at least the `in` operator or two semi-colons (`;`)'},1931	SwitchBodyStartsWithCurly: {msg:'The body of a switch statement starts with a curly brace `{`'},1932	SwitchClausesEndWithColon: {msg:'Switch clauses (`case` and `default`) end with a colon (`:`)'},1933	SwitchCannotHaveDoubleDefault: {msg:'Switches cannot have more than one `default` clause'},1934	SwitchBodyEndsWithCurly: {msg:'The body of a switch statement ends with a curly brace `}`'},1935	MissingTryBlockCurlyOpen: {msg:'Missing the opening curly brace (`{`) for the block of the try statement'},1936	MissingTryBlockCurlyClose: {msg:'Missing the closing curly brace (`}`) for the block of the try statement'},1937	CatchHeaderMissingOpen: {msg:'Missing the opening parenthesis of the catch header'},1938	MissingCatchParameter: {msg:'Catch clauses should have exactly one argument which will be bound to the error object being thrown'},1939	CatchParameterNameMayNotBeReserved: {msg:'Catch clause parameter may not be a keyword or reserved word'},1940	CatchHeaderMissingClose: {msg:'Missing the closing parenthesis of the catch header'},1941	MissingCatchBlockCurlyOpen: {msg:'Missing the opening curly brace (`{`) for the block of the catch statement'},1942	MissingCatchBlockCurlyClose: {msg:'Missing the closing curly brace (`}`) for the block of the catch statement'},1943	MissingFinallyBlockCurlyOpen: {msg:'Missing the opening curly brace (`{`) for the block of the finally statement'},1944	MissingFinallyBlockCurlyClose: {msg:'Missing the closing curly brace (`}`) for the block of the finally statement'},1945	StatementMayNotStartWithFunction: {msg:'statements may not start with function...', before:true},1946	BlockCurlyClose: {msg:'Expected the closing curly (`}`) for a block statement'},1947	BlockCurlyOpen: {msg:'Expected the closing curly (`}`) for a block statement'},1948	UnableToParseStatement: {msg:'Was unable to find a statement when it was requested'},1949	IllegalDoubleCommaInObjectLiteral: {msg:'A double comma in object literals is not allowed'},1950	ObjectLiteralExpectsColonAfterName: {msg:'After every property name (identifier, string or number) a colon (`:`) should follow'},1951	ThrowMustHaveArgument: {msg:'The expression argument for throw is not optional'},1952	ThrowCannotHaveReturn: {msg:'There may not be a return between throw and the start of its expression argument'},1953	SwitchBodyMustStartWithClause: {msg:'The body of a switch clause must start with at a case or default clause (but may be empty, which would be silly)'},1954	BreakOrContinueArgMustBeJustIdentifier: {msg:'The argument to a break or continue statement must be exactly and only an identifier (an existing label)'},1955	AssignmentNotAllowedAfterNonAssignmentInExpression: {msg:'An assignment is not allowed if it is preceeded by a non-expression operator in the same expression-level'},1956	IllegalLhsForAssignment: {msg:'Illegal left hand side for assignment (you cannot assign to things like string literals, number literals or function calls}'},1957	VarKeywordMissingName: {msg:'Var keyword should be followed by a variable name'},1958	IllegalTrailingComma: {msg:'Illegal trailing comma found'},1959	ObjectLiteralMissingPropertyValue: {msg:'Missing object literal property value'},1960	TokenizerError: {msg:'Tokenizer encountered unexpected input'},1961	LabelRequiresStatement: {msg:'Saw a label without the (required) statement following'},1962	DidNotExpectElseHere: {msg:'Did not expect an else here. To what if should it belong? Maybe you put a ; after the if-block? (if(x){};else{})'},1963	UnexpectedToken: {msg:'Found an unexpected token and have no idea why'},1964	InvalidPostfixOperandArray: {msg:'You cannot apply ++ or -- to an array'},1965	InvalidPostfixOperandObject: {msg:'You cannot apply ++ or -- to an object'},1966	InvalidPostfixOperandFunction: {msg:'You cannot apply ++ or -- to a function'},1967	CaseMissingExpression: {msg:'Case expects an expression before the colon'},1968	TryMustHaveCatchOrFinally: {msg:'The try statement must have a catch or finally block'},1969	UnexpectedInputSwitch: {msg:'Unexpected input while parsing a switch clause...'},1970	ForInCanOnlyDeclareOnVar: {msg:'For-in header can only introduce one new variable'}...ezproxy autoforwarding.user.js
Source:ezproxy autoforwarding.user.js  
1// ==UserScript==2// @name  EzProxy Redirector3// @namespace    http://example.com4// @author       @ronery5// @description Automatically redirect to the proxified equivalent as provided by the UofL.6// @updateRUL https://github.com/biochemputer/Javascripts/raw/master/ezproxy%20autoforwarding.user.js7// @version 0.18// @match https://www.thieme.de/*9// @match http://www.thieme-chemistry.com/*10// @match http://www.tandfonline.com/*11// @match https://www.reaxys.com/*12// @match https://origin-scifinder.cas.org/*13// @match https://scifinder.cas.org/*14// @match http://pubs.acs.org/*15// @match https://pubs.acs.org/*16// @match http://acta.astrouw.edu.pl/*17// @match https://acta.astrouw.edu.pl/*18// @match http://www.actahort.org/*19// @match https://www.actahort.org/*20// @match http://www.actamathematica.org/*21// @match https://www.actamathematica.org/*22// @match http://www.acta.hu/*23// @match https://www.acta.hu/*24// @match http://app.pan.pl/*25// @match https://app.pan.pl/*26// @match http://www.architecture.com.au/*27// @match https://www.architecture.com.au/*28// @match http://www.ahajournals.org/*29// @match https://www.ahajournals.org/*30// @match http://www.aiaa.org/*31// @match https://www.aiaa.org/*32// @match http://aids-clinical-care.jwatch.org/*33// @match https://aids-clinical-care.jwatch.org/*34// @match http://www.humanitiesebook.org/*35// @match https://www.humanitiesebook.org/*36// @match http://search.alexanderstreet.com/*37// @match https://search.alexanderstreet.com/*38// @match http://www.akademiai.com/*39// @match https://www.akademiai.com/*40// @match http://www.astreetpress.com/*41// @match https://www.astreetpress.com/*42// @match http://ejournals.wspc.com.sg/*43// @match https://ejournals.wspc.com.sg/*44// @match http://neur.allenpress.com/*45// @match https://neur.allenpress.com/*46// @match http://intl.alphamedpress.org/*47// @match https://intl.alphamedpress.org/*48// @match http://www.aacc.org/*49// @match https://www.aacc.org/*50// @match http://www.aapm.org/*51// @match https://www.aapm.org/*52// @match http://jada.ada.org/*53// @match https://jada.ada.org/*54// @match http://www.aeaweb.org/*55// @match https://www.aeaweb.org/*56// @match http://www.agu.org/*57// @match https://www.agu.org/*58// @match http://intl.amjbot.org/*59// @match https://intl.amjbot.org/*60// @match http://www.ajcn.org/*61// @match https://www.ajcn.org/*62// @match http://www.ajhg.org/*63// @match https://www.ajhg.org/*64// @match http://www.amjpathol.org/*65// @match https://www.amjpathol.org/*66// @match http://ajp.press.uiuc.edu/*67// @match https://ajp.press.uiuc.edu/*68// @match http://www.ajsonline.org/*69// @match https://www.ajsonline.org/*70// @match http://www.ajtmh.org/*71// @match https://www.ajtmh.org/*72// @match http://www.ams.org/*73// @match https://www.ams.org/*74// @match http://www.minsocam.org/*75// @match https://www.minsocam.org/*76// @match http://*.aps.org/*77// @match https://*.aps.org/*78// @match http://www.physiology.org/*79// @match https://www.physiology.org/*80// @match http://www.the-aps.org/*81// @match https://www.the-aps.org/*82// @match http://www.amamanualofstyle.com/*83// @match https://www.amamanualofstyle.com/*84// @match http://alatechsource.metapress.com/*85// @match https://alatechsource.metapress.com/*86// @match http://alcts.metapress.com/*87// @match https://alcts.metapress.com/*88// @match http://journals.ametsoc.org/*89// @match https://journals.ametsoc.org/*90// @match http://www.agronomy.org/*91// @match https://www.agronomy.org/*92// @match http://www.ascb.org/*93// @match https://www.ascb.org/*94// @match http://www.asbmb.org/*95// @match https://www.asbmb.org/*96// @match http://ajcp.ascpjournals.org/*97// @match https://ajcp.ascpjournals.org/*98// @match http://horttech.ashspublications.org/*99// @match https://horttech.ashspublications.org/*100// @match http://www.hematology.org/*101// @match https://www.hematology.org/*102// @match http://jasn.asnjournals.org/*103// @match https://jasn.asnjournals.org/*104// @match http://www.asn-online.org/*105// @match https://www.asn-online.org/*106// @match http://www.atsjournals.org/*107// @match https://www.atsjournals.org/*108// @match http://www.annee-philologique.com/*109// @match https://www.annee-philologique.com/*110// @match http://www.anesthesiaprogress.org/*111// @match https://www.anesthesiaprogress.org/*112// @match http://www.annallergy.org/*113// @match https://www.annallergy.org/*114// @match http://www.annals.org/*115// @match https://www.annals.org/*116// @match http://annals.princeton.edu/*117// @match https://annals.princeton.edu/*118// @match http://www.theannals.com/*119// @match https://www.theannals.com/*120// @match http://www.annualreviews.org/*121// @match https://www.annualreviews.org/*122// @match http://www.imfareaer.org/*123// @match https://www.imfareaer.org/*124// @match http://www.anthrosource.net/*125// @match https://www.anthrosource.net/*126// @match http://antiquity.ac.uk/*127// @match https://antiquity.ac.uk/*128// @match http://content.apa.org/*129// @match https://content.apa.org/*130// @match http://www.adtmag.com/*131// @match https://www.adtmag.com/*132// @match http://apsjournals.apsnet.org/*133// @match https://apsjournals.apsnet.org/*134// @match http://www.artstor.org/*135// @match https://www.artstor.org/*136// @match http://www.ascelibrary.org/*137// @match https://www.ascelibrary.org/*138// @match http://www.asip.org/*139// @match https://www.asip.org/*140// @match http://www.aslo.org/*141// @match https://www.aslo.org/*142// @match http://products.asminternational.org/*143// @match https://products.asminternational.org/*144// @match http://www.asm.org/*145// @match https://www.asm.org/*146// @match http://elibrary.asabe.org/*147// @match https://elibrary.asabe.org/*148// @match http://www.asmedigitalcollection.asme.org/*149// @match https://www.asmedigitalcollection.asme.org/*150// @match http://www.aspectfinancial.com.au/*151// @match https://www.aspectfinancial.com.au/*152// @match http://www.aspetjournals.org/*153// @match https://www.aspetjournals.org/*154// @match http://www.asia-studies.com/*155// @match https://www.asia-studies.com/*156// @match http://www.afpe.org.uk/*157// @match https://www.afpe.org.uk/*158// @match http://crl.acrl.org/*159// @match https://crl.acrl.org/*160// @match http://journalsip.astm.org/*161// @match https://journalsip.astm.org/*162// @match http://enterprise.astm.org/*163// @match https://enterprise.astm.org/*164// @match http://www.oxford-auslawdictionary.com/*165// @match https://www.oxford-auslawdictionary.com/*166// @match http://www.austms.org.au/*167// @match https://www.austms.org.au/*168// @match http://www.onlinepublications.austroads.com.au/*169// @match https://www.onlinepublications.austroads.com.au/*170// @match http://www.abs.gov.au/*171// @match https://www.abs.gov.au/*172// @match http://www.austlit.edu.au/*173// @match https://www.austlit.edu.au/*174// @match http://www.asmjournals.org/*175// @match https://www.asmjournals.org/*176// @match http://eureka.rlg.org/*177// @match https://eureka.rlg.org/*178// @match http://journals.bcdecker.com/*179// @match https://journals.bcdecker.com/*180// @match http://www.bepress.com/*181// @match https://www.bepress.com/*182// @match http://www.waspress.co.uk/*183// @match https://www.waspress.co.uk/*184// @match http://www.begellhouse.com/*185// @match https://www.begellhouse.com/*186// @match http://ebooks.benthamscience.com/*187// @match https://ebooks.benthamscience.com/*188// @match http://bmc.lib.umich.edu/*189// @match https://bmc.lib.umich.edu/*190// @match http://apps.brepolis.net/*191// @match https://apps.brepolis.net/*192// @match http://autoweb.rlg.org/*193// @match https://autoweb.rlg.org/*194// @match http://www.biochemj.org/*195// @match https://www.biochemj.org/*196// @match http://bst.portlandpress.com/*197// @match https://bst.portlandpress.com/*198// @match http://www.biochemsoctrans.org/*199// @match https://www.biochemsoctrans.org/*200// @match http://www.biolbull.org/*201// @match https://www.biolbull.org/*202// @match http://www.biolreprod.org/*203// @match https://www.biolreprod.org/*204// @match http://www.biomedcentral.com/*205// @match https://www.biomedcentral.com/*206// @match http://ccforum.com/*207// @match https://ccforum.com/*208// @match http://alzres.com/*209// @match https://alzres.com/*210// @match http://arthritis-research.com/*211// @match https://arthritis-research.com/*212// @match http://breast-cancer-research.com/*213// @match https://breast-cancer-research.com/*214// @match http://genomebiology.com/*215// @match https://genomebiology.com/*216// @match http://genomemedicine.com/*217// @match https://genomemedicine.com/*218// @match http://stemcellres.com/*219// @match https://stemcellres.com/*220// @match http://www.biophysj.org/*221// @match https://www.biophysj.org/*222// @match http://www.sociologyencyclopedia.com/*223// @match https://www.sociologyencyclopedia.com/*224// @match http://www.blackwellreference.com/*225// @match https://www.blackwellreference.com/*226// @match http://www.blackwell-synergy.com/*227// @match https://www.blackwell-synergy.com/*228// @match http://www.bloodjournal.org/*229// @match https://www.bloodjournal.org/*230// @match http://www.bioscientifica.com/*231// @match https://www.bioscientifica.com/*232// @match http://dmfr.birjournals.org/*233// @match https://dmfr.birjournals.org/*234// @match http://journals.bmj.com/*235// @match https://journals.bmj.com/*236// @match http://journals.brepols.net/*237// @match https://journals.brepols.net/*238// @match http://brepols.metapress.com/*239// @match https://brepols.metapress.com/*240// @match http://www.bridgemaneducation.com/*241// @match https://www.bridgemaneducation.com/*242// @match http://referenceworks.brillonline.com/*243// @match https://referenceworks.brillonline.com/*244// @match http://www.brillonline.nl/*245// @match https://www.brillonline.nl/*246// @match http://nijhoffonline.nl/*247// @match https://nijhoffonline.nl/*248// @match http://britishacademy.universitypressscholarship.com/*249// @match https://britishacademy.universitypressscholarship.com/*250// @match http://bjp.rcpsych.org/*251// @match https://bjp.rcpsych.org/*252// @match http://britishperiodicals.chadwyck.co.uk/*253// @match https://britishperiodicals.chadwyck.co.uk/*254// @match http://www.pharmacopoeia.co.uk/*255// @match https://www.pharmacopoeia.co.uk/*256// @match http://www.abcb.gov.au/*257// @match https://www.abcb.gov.au/*258// @match http://www.bcaillustrated.com.au/*259// @match https://www.bcaillustrated.com.au/*260// @match http://www.businessnews.com.au/*261// @match https://www.businessnews.com.au/*262// @match http://bww.dnb.com.au/*263// @match https://bww.dnb.com.au/*264// @match http://www.butterworthsonline.com/*265// @match https://www.butterworthsonline.com/*266// @match http://www.cabdirect.org/*267// @match https://www.cabdirect.org/*268// @match http://www.cabi.org/*269// @match https://www.cabi.org/*270// @match http://caliber.ucpress.net/*271// @match https://caliber.ucpress.net/*272// @match http://histories.cambridge.org/*273// @match https://histories.cambridge.org/*274// @match http://universitypublishingonline.org/*275// @match https://universitypublishingonline.org/*276// @match http://journals.cambridge.org/*277// @match https://journals.cambridge.org/*278// @match http://uwa.cambridge.patron.eb20.com/*279// @match https://uwa.cambridge.patron.eb20.com/*280// @match http://www.csa3.com/*281// @match https://www.csa3.com/*282// @match http://www.caaa.ca/*283// @match https://www.caaa.ca/*284// @match http://journals.cms.math.ca/*285// @match https://journals.cms.math.ca/*286// @match http://www.cmaj.ca/*287// @match https://www.cmaj.ca/*288// @match http://www.canmin.org/*289// @match https://www.canmin.org/*290// @match http://pubservices.nrc-cnrc.ca/*291// @match https://pubservices.nrc-cnrc.ca/*292// @match http://www.lexxion.eu/*293// @match https://www.lexxion.eu/*294// @match http://ww3.cch.com.au:8080/*295// @match https://ww3.cch.com.au:8080/*296// @match http://www.ceda.com.au/*297// @match https://www.ceda.com.au/*298// @match http://www.cellbiolint.org/*299// @match https://www.cellbiolint.org/*300// @match http://www.cellpress.com/*301// @match https://www.cellpress.com/*302// @match http://eebo.chadwyck.com/*303// @match https://eebo.chadwyck.com/*304// @match http://iimp.chadwyck.com/*305// @match https://iimp.chadwyck.com/*306// @match http://iimpft.chadwyck.com/*307// @match https://iimpft.chadwyck.com/*308// @match http://www.charlestonco.com/*309// @match https://www.charlestonco.com/*310// @match http://www.chelonianjournals.org/*311// @match https://www.chelonianjournals.org/*312// @match http://www.csj.jp/*313// @match https://www.csj.jp/*314// @match http://www.chemnetbase.com/*315// @match https://www.chemnetbase.com/*316// @match http://www.chicagomanualofstyle.org/*317// @match https://www.chicagomanualofstyle.org/*318// @match http://oversea.cnki.net/*319// @match https://oversea.cnki.net/*320// @match http://www.pkulaw.cn/*321// @match https://www.pkulaw.cn/*322// @match http://www.cefc.com.hk/*323// @match https://www.cefc.com.hk/*324// @match http://www.cro3.org/*325// @match https://www.cro3.org/*326// @match http://www.citiprogram.org/*327// @match https://www.citiprogram.org/*328// @match http://shmu.alexanderstreet.com/*329// @match https://shmu.alexanderstreet.com/*330// @match http://www.classiques-garnier.com/*331// @match https://www.classiques-garnier.com/*332// @match http://uwau.classical.com/*333// @match https://uwau.classical.com/*334// @match http://www.aspresolver.com/*335// @match https://www.aspresolver.com/*336// @match http://www.clinchem.org/*337// @match https://www.clinchem.org/*338// @match http://clinicalevidence.bmj.com/*339// @match https://clinicalevidence.bmj.com/*340// @match http://www.clinicalkey.com/*341// @match https://www.clinicalkey.com/*342// @match http://www.clinicalevidence.org/*343// @match https://www.clinicalevidence.org/*344// @match http://cs.portlandpress.com/*345// @match https://cs.portlandpress.com/*346// @match http://www.update-software.com/*347// @match https://www.update-software.com/*348// @match http://cognet.mit.edu/*349// @match https://cognet.mit.edu/*350// @match http://www.comlaw.gov.au/*351// @match https://www.comlaw.gov.au/*352// @match http://www.biologists.org/*353// @match https://www.biologists.org/*354// @match http://www.biologists.com/*355// @match https://www.biologists.com/*356// @match http://www.computerworld.com.au/*357// @match https://www.computerworld.com.au/*358// @match http://www.connect4.com.au/*359// @match https://www.connect4.com.au/*360// @match http://www.connectweb.com.au/*361// @match https://www.connectweb.com.au/*362// @match http://www.oceanalaw.com/*363// @match https://www.oceanalaw.com/*364// @match http://www.asihcopeiaonline.org/*365// @match https://www.asihcopeiaonline.org/*366// @match http://www.cortex-online.org/*367// @match https://www.cortex-online.org/*368// @match http://library.cqpress.com/*369// @match https://library.cqpress.com/*370// @match http://www.crcnetbase.com/*371// @match https://www.crcnetbase.com/*372// @match http://www.credoreference.com/*373// @match https://www.credoreference.com/*374// @match http://www.edata-center.com/*375// @match https://www.edata-center.com/*376// @match http://dx.doi.org/*377// @match https://dx.doi.org/*378// @match http://www.publish.csiro.au/*379// @match https://www.publish.csiro.au/*380// @match http://clp.oxfordjournals.org/*381// @match https://clp.oxfordjournals.org/*382// @match http://web.ovid.unilinc.edu.au/*383// @match https://web.ovid.unilinc.edu.au/*384// @match http://www.current-reports.com/*385// @match https://www.current-reports.com/*386// @match http://www.datatrace.com/*387// @match https://www.datatrace.com/*388// @match http://www.datamonitor.com/*389// @match https://www.datamonitor.com/*390// @match http://www.dbpia.co.kr/*391// @match https://www.dbpia.co.kr/*392// @match http://www.datagold.com/*393// @match https://www.datagold.com/*394// @match http://www.gender.amdigital.co.uk/*395// @match https://www.gender.amdigital.co.uk/*396// @match http://www.dental-update.co.uk/*397// @match https://www.dental-update.co.uk/*398// @match http://www.dialogatsite.com/*399// @match https://www.dialogatsite.com/*400// @match http://dib.cambridge.org/*401// @match https://dib.cambridge.org/*402// @match http://www.dukeupress.edu/*403// @match https://www.dukeupress.edu/*404// @match http://www.dukejournals.org/*405// @match https://www.dukejournals.org/*406// @match http://www.dukemathjournal.org/*407// @match https://www.dukemathjournal.org/*408// @match http://www.earthmagazine.org/*409// @match https://www.earthmagazine.org/*410// @match http://www.exacteditions.com/*411// @match https://www.exacteditions.com/*412// @match http://www.esajournals.org/*413// @match https://www.esajournals.org/*414// @match http://www.edpsciences.org/*415// @match https://www.edpsciences.org/*416// @match http://www.europhysicsnews.org/*417// @match https://www.europhysicsnews.org/*418// @match http://www.aanda.org/*419// @match https://www.aanda.org/*420// @match http://www.euppublishing.com/*421// @match https://www.euppublishing.com/*422// @match http://www.editlib.org/*423// @match https://www.editlib.org/*424// @match http://www.educause.edu/*425// @match https://www.educause.edu/*426// @match http://www.elgaronline.com/*427// @match https://www.elgaronline.com/*428// @match http://www.electrochem.org/*429// @match https://www.electrochem.org/*430// @match http://ecsdl.org/*431// @match https://ecsdl.org/*432// @match http://www.e-enlightenment.com/*433// @match https://www.e-enlightenment.com/*434// @match http://www.expertconsultbook.com/*435// @match https://www.expertconsultbook.com/*436// @match http://www.emeraldinsight.com/*437// @match https://www.emeraldinsight.com/*438// @match http://www.empire.amdigital.co.uk/*439// @match https://www.empire.amdigital.co.uk/*440// @match http://www.igi-online.com/*441// @match https://www.igi-online.com/*442// @match http://www.oxford-naswsocialwork.com/*443// @match https://www.oxford-naswsocialwork.com/*444// @match http://press.endocrine.org/*445// @match https://press.endocrine.org/*446// @match http://www.engineeringvillage.com/*447// @match https://www.engineeringvillage.com/*448// @match http://www.justis.com/*449// @match https://www.justis.com/*450// @match http://www.engnetbase.com/*451// @match https://www.engnetbase.com/*452// @match http://edition.pagesuite-professional.co.uk/*453// @match https://edition.pagesuite-professional.co.uk/*454// @match http://www.envplan.com/*455// @match https://www.envplan.com/*456// @match http://www.yale.edu/*457// @match https://www.yale.edu/*458// @match http://www.eolss.net/*459// @match https://www.eolss.net/*460// @match http://www.equinoxpub.com/*461// @match https://www.equinoxpub.com/*462// @match http://hwwilsonweb.com/*463// @match https://hwwilsonweb.com/*464// @match http://vnweb.hwwilsonweb.com/*465// @match https://vnweb.hwwilsonweb.com/*466// @match http://www.edrs.com/*467// @match https://www.edrs.com/*468// @match http://estuariesandcoasts.org/*469// @match https://estuariesandcoasts.org/*470// @match http://etg.tg.com.au/*471// @match https://etg.tg.com.au/*472// @match http://www.erudit.org/*473// @match https://www.erudit.org/*474// @match http://www.europaworld.com/*475// @match https://www.europaworld.com/*476// @match http://www.eje-online.org/*477// @match https://www.eje-online.org/*478// @match http://www.ems-ph.org/*479// @match https://www.ems-ph.org/*480// @match http://www.erj.ersjournals.com/*481// @match https://www.erj.ersjournals.com/*482// @match http://www.evolutionary-ecology.com/*483// @match https://www.evolutionary-ecology.com/*484// @match http://www.ebmonline.org/*485// @match https://www.ebmonline.org/*486// @match http://www.digitaleditions.com.au/*487// @match https://www.digitaleditions.com.au/*488// @match http://www.libraryedition.com.au/*489// @match https://www.libraryedition.com.au/*490// @match http://f1000.com/*491// @match https://f1000.com/*492// @match http://www.fasebj.org/*493// @match https://www.fasebj.org/*494// @match http://www.fq.math.ca/*495// @match https://www.fq.math.ca/*496// @match http://infotrac.galegroup.com/*497// @match https://infotrac.galegroup.com/*498// @match http://www.finsia.com/*499// @match https://www.finsia.com/*500// @match http://www.fupress.net/*501// @match https://www.fupress.net/*502// @match http://flm-journal.org/*503// @match https://flm-journal.org/*504// @match http://fordham.universitypressscholarship.com/*505// @match https://fordham.universitypressscholarship.com/*506// @match http://www.atilf.fr/*507// @match https://www.atilf.fr/*508// @match http://www.futuremedicine.com/*509// @match https://www.futuremedicine.com/*510// @match http://find.galegroup.com/*511// @match https://find.galegroup.com/*512// @match http://www.gendatabaseonline.com/*513// @match https://www.gendatabaseonline.com/*514// @match http://genesdev.cshlp.org/*515// @match https://genesdev.cshlp.org/*516// @match http://www.genetics.org/*517// @match https://www.genetics.org/*518// @match http://www.geoscienceworld.org/*519// @match https://www.geoscienceworld.org/*520// @match http://www.csa.com/*521// @match https://www.csa.com/*522// @match http://www.icevirtuallibrary.com/*523// @match https://www.icevirtuallibrary.com/*524// @match http://GIDEONonline.net/*525// @match https://GIDEONonline.net/*526// @match http://www.portal.euromonitor.com/*527// @match https://www.portal.euromonitor.com/*528// @match http://www3.griffith.edu.au/*529// @match https://www3.griffith.edu.au/*530// @match http://ebooks.greenwood.com/*531// @match https://ebooks.greenwood.com/*532// @match http://www.groundimprovement.com/*533// @match https://www.groundimprovement.com/*534// @match http://guilfordjournals.com/*535// @match https://guilfordjournals.com/*536// @match http://www.hbcpnetbase.com/*537// @match https://www.hbcpnetbase.com/*538// @match http://www.accessmedicine.com/*539// @match https://www.accessmedicine.com/*540// @match http://www.hartjournals.co.uk/*541// @match https://www.hartjournals.co.uk/*542// @match http://www.hhpr.org/*543// @match https://www.hhpr.org/*544// @match http://ebooks.hcn.com.au/*545// @match https://ebooks.hcn.com.au/*546// @match http://heinonline.org/*547// @match https://heinonline.org/*548// @match http://henrystewart.metapress.com/*549// @match https://henrystewart.metapress.com/*550// @match http://www.hstalks.com/*551// @match https://www.hstalks.com/*552// @match http://www.hljournals.org/*553// @match https://www.hljournals.org/*554// @match http://www.heterocycles.jp/*555// @match https://www.heterocycles.jp/*556// @match http://highwire.stanford.edu/*557// @match https://highwire.stanford.edu/*558// @match http://www.hh.um.es/*559// @match https://www.hh.um.es/*560// @match http://historicbrass.org/*561// @match https://historicbrass.org/*562// @match http://serials.abc-clio.com/*563// @match https://serials.abc-clio.com/*564// @match http://www.math.uh.edu/*565// @match https://www.math.uh.edu/*566// @match http://parlipapers.chadwyck.co.uk/*567// @match https://parlipapers.chadwyck.co.uk/*568// @match http://clients.ibisworld.com.au/*569// @match https://clients.ibisworld.com.au/*570// @match http://ieeexplore.ieee.org/*571// @match https://ieeexplore.ieee.org/*572// @match http://books.igi-online.com/*573// @match https://books.igi-online.com/*574// @match http://services.igi-global.com/*575// @match https://services.igi-global.com/*576// @match http://portal.igpublish.com/*577// @match https://portal.igpublish.com/*578// @match http://www.iias.nl/*579// @match https://www.iias.nl/*580// @match http://old.iias.asia/*581// @match https://old.iias.asia/*582// @match http://www.cababstractsplus.org/*583// @match https://www.cababstractsplus.org/*584// @match http://incites.isiknowledge.com/*585// @match https://incites.isiknowledge.com/*586// @match http://www.inderscienceonline.com/*587// @match https://www.inderscienceonline.com/*588// @match http://www.indiaraj.amdigital.co.uk/*589// @match https://www.indiaraj.amdigital.co.uk/*590// @match http://www.iumj.indiana.edu/*591// @match https://www.iumj.indiana.edu/*592// @match http://cip.cornell.edu/*593// @match https://cip.cornell.edu/*594// @match http://iai.asm.org/*595// @match https://iai.asm.org/*596// @match http://www.infosci-books.com/*597// @match https://www.infosci-books.com/*598// @match http://journals.informs.org/*599// @match https://journals.informs.org/*600// @match http://www.informaworld.com/*601// @match https://www.informaworld.com/*602// @match http://www.informahealthcare.com/*603// @match https://www.informahealthcare.com/*604// @match http://www.i-law.com/*605// @match https://www.i-law.com/*606// @match http://search.informit.com.au/*607// @match https://search.informit.com.au/*608// @match http://www.ingentaconnect.com/*609// @match https://www.ingentaconnect.com/*610// @match http://www.ingentaselect.com/*611// @match https://www.ingentaselect.com/*612// @match http://icsd.fiz-karlsruhe.de/*613// @match https://icsd.fiz-karlsruhe.de/*614// @match http://www.iijournals.com/*615// @match https://www.iijournals.com/*616// @match http://intelliconnect.wkasiapacific.com/*617// @match https://intelliconnect.wkasiapacific.com/*618// @match http://www.aaiddjournals.org/*619// @match https://www.aaiddjournals.org/*620// @match http://www.ijdb.ehu.es/*621// @match https://www.ijdb.ehu.es/*622// @match http://www.communicationencyclopedia.com/*623// @match https://www.communicationencyclopedia.com/*624// @match http://www.ijocs.org/*625// @match https://www.ijocs.org/*626// @match http://www.ijee.dit.ie/*627// @match https://www.ijee.dit.ie/*628// @match http://www.intmedpress.com/*629// @match https://www.intmedpress.com/*630// @match http://www.brepolis.net/*631// @match https://www.brepolis.net/*632// @match http://www.imf.org/*633// @match https://www.imf.org/*634// @match http://www.imfstatistics.org/*635// @match https://www.imfstatistics.org/*636// @match http://www.intlpress.com/*637// @match https://www.intlpress.com/*638// @match http://journals.iucr.org/*639// @match https://journals.iucr.org/*640// @match http://intarch.ac.uk/*641// @match https://intarch.ac.uk/*642// @match http://onlinelibrary.wiley.com/*643// @match https://onlinelibrary.wiley.com/*644// @match http://intl.iovs.org/*645// @match https://intl.iovs.org/*646// @match http://oxia.ouplaw.com/*647// @match https://oxia.ouplaw.com/*648// @match http://www.iop.org/*649// @match https://www.iop.org/*650// @match http://content.iospress.com/*651// @match https://content.iospress.com/*652// @match http://webofknowledge.com/*653// @match https://webofknowledge.com/*654// @match http://apps.webofknowledge.com/*655// @match https://apps.webofknowledge.com/*656// @match http://www.webofknowledge.com/*657// @match https://www.webofknowledge.com/*658// @match http://www.researcherid.com/*659// @match https://www.researcherid.com/*660// @match http://www.ipasource.com/*661// @match https://www.ipasource.com/*662// @match http://www.ishib.org/*663// @match https://www.ishib.org/*664// @match http://www.sif.it/*665// @match https://www.sif.it/*666// @match http://www.itergateway.org/*667// @match https://www.itergateway.org/*668// @match http://www.iwaponline.com/*669// @match https://www.iwaponline.com/*670// @match http://www.jstage.jst.go.jp/*671// @match https://www.jstage.jst.go.jp/*672// @match http://www.joannabriggs.edu.au/*673// @match https://www.joannabriggs.edu.au/*674// @match http://connect.jbiconnectplus.org/*675// @match https://connect.jbiconnectplus.org/*676// @match http://jid.sagepub.com/*677// @match https://jid.sagepub.com/*678// @match http://www.lyellcollection.org/*679// @match https://www.lyellcollection.org/*680// @match http://www.asadl.org/*681// @match https://www.asadl.org/*682// @match http://www.african-archaeology.de/*683// @match https://www.african-archaeology.de/*684// @match http://agdevjournal.com/*685// @match https://agdevjournal.com/*686// @match http://www.jabfp.org/*687// @match https://www.jabfp.org/*688// @match http://www.japmaonline.org/*689// @match https://www.japmaonline.org/*690// @match http://www.journalofanimalscience.org/*691// @match https://www.journalofanimalscience.org/*692// @match http://quod.lib.umich.edu/*693// @match https://quod.lib.umich.edu/*694// @match http://www.sloan-c.org/*695// @match https://www.sloan-c.org/*696// @match http://intl.jbc.org/*697// @match https://intl.jbc.org/*698// @match http://www.ejbjs.org/*699// @match https://www.ejbjs.org/*700// @match http://www.jbmronline.com/*701// @match https://www.jbmronline.com/*702// @match http://jchemed.chem.wisc.edu/*703// @match https://jchemed.chem.wisc.edu/*704// @match http://jco.ascopubs.org/*705// @match https://jco.ascopubs.org/*706// @match http://www.psychiatrist.com/*707// @match https://www.psychiatrist.com/*708// @match http://jds.fass.org/*709// @match https://jds.fass.org/*710// @match http://www.jdentaled.org/*711// @match https://www.jdentaled.org/*712// @match http://gerontologist.gerontologyjournals.org/*713// @match https://gerontologist.gerontologyjournals.org/*714// @match http://www.iaglr.org/*715// @match https://www.iaglr.org/*716// @match http://www.journalofgreenbuilding.com/*717// @match https://www.journalofgreenbuilding.com/*718// @match http://www.jhortscib.org/*719// @match https://www.jhortscib.org/*720// @match http://www.jimmunol.org/*721// @match https://www.jimmunol.org/*722// @match http://www.jleukbio.org/*723// @match https://www.jleukbio.org/*724// @match http://www.jlr.org/*725// @match https://www.jlr.org/*726// @match http://www.jomms.org/*727// @match https://www.jomms.org/*728// @match http://www.jmecology.com/*729// @match https://www.jmecology.com/*730// @match http://jmd.amjpathol.org/*731// @match https://jmd.amjpathol.org/*732// @match http://www.jnrlse.org/*733// @match https://www.jnrlse.org/*734// @match http://www.jneurosci.org/*735// @match https://www.jneurosci.org/*736// @match http://www-thejns-net.org/*737// @match https://www-thejns-net.org/*738// @match http://www.jnabs.org/*739// @match https://www.jnabs.org/*740// @match http://jn.nutrition.org/*741// @match https://jn.nutrition.org/*742// @match http://jorthod.maneyjournals.org/*743// @match https://jorthod.maneyjournals.org/*744// @match http://www.jospt.org/*745// @match https://www.jospt.org/*746// @match http://www.journalofphilosophy.org/*747// @match https://www.journalofphilosophy.org/*748// @match http://www.joponline.org/*749// @match https://www.joponline.org/*750// @match http://jrm.medicaljournals.se/*751// @match https://jrm.medicaljournals.se/*752// @match http://www.jrheum.com/*753// @match https://www.jrheum.com/*754// @match http://www.jrheum.org/*755// @match https://www.jrheum.org/*756// @match http://journals.asha.org/*757// @match https://journals.asha.org/*758// @match http://www.jsad.com/*759// @match https://www.jsad.com/*760// @match http://www.jultrasoundmed.org/*761// @match https://www.jultrasoundmed.org/*762// @match http://www.jove.com/*763// @match https://www.jove.com/*764// @match http://www.opuluspress.se/*765// @match https://www.opuluspress.se/*766// @match http://www.jstor.org/*767// @match https://www.jstor.org/*768// @match http://plants.jstor.org/*769// @match https://plants.jstor.org/*770// @match http://www.justcite.com/*771// @match https://www.justcite.com/*772// @match http://uwa.kanopystreaming.com/*773// @match https://uwa.kanopystreaming.com/*774// @match http://www.karger.com/*775// @match https://www.karger.com/*776// @match http://content.karger.com/*777// @match https://content.karger.com/*778// @match http://www.rbgkew.org.uk/*779// @match https://www.rbgkew.org.uk/*780// @match http://klapp-online.de/*781// @match https://klapp-online.de/*782// @match http://www.kluwerarbitration.com/*783// @match https://www.kluwerarbitration.com/*784// @match http://www.kluweronline.com/*785// @match https://www.kluweronline.com/*786// @match http://www.kluwerlawonline.com/*787// @match https://www.kluwerlawonline.com/*788// @match http://www.knovel.com/*789// @match https://www.knovel.com/*790// @match http://www.labanimal.com/*791// @match https://www.labanimal.com/*792// @match http://www.thelancet.com/*793// @match https://www.thelancet.com/*794// @match http://www.revues.armand-colin.com/*795// @match https://www.revues.armand-colin.com/*796// @match http://tla.thomson.com.au/*797// @match https://tla.thomson.com.au/*798// @match http://subscriber.lawbookco.com.au/*799// @match https://subscriber.lawbookco.com.au/*800// @match http://www.lcoastpress.com/*801// @match https://www.lcoastpress.com/*802// @match http://my.lawlex.com.au/*803// @match https://my.lawlex.com.au/*804// @match http://llama.metapress.com/*805// @match https://llama.metapress.com/*806// @match http://librarymusicsource.com/*807// @match https://librarymusicsource.com/*808// @match http://leme.library.utoronto.ca/*809// @match https://leme.library.utoronto.ca/*810// @match http://www.lexisnexis.com.au/*811// @match https://www.lexisnexis.com.au/*812// @match http://librariesaustralia.nla.gov.au/*813// @match https://librariesaustralia.nla.gov.au/*814// @match http://online.liebertpub.com/*815// @match https://online.liebertpub.com/*816// @match http://www.litencyc.com/*817// @match https://www.litencyc.com/*818// @match http://www.literatureencyclopedia.com/*819// @match https://www.literatureencyclopedia.com/*820// @match http://lion.chadwyck.co.uk/*821// @match https://lion.chadwyck.co.uk/*822// @match http://www.londonlowlife.amdigital.co.uk/*823// @match https://www.londonlowlife.amdigital.co.uk/*824// @match http://www.lrb.co.uk/*825// @match https://www.lrb.co.uk/*826// @match http://lupjournals.org/*827// @match https://lupjournals.org/*828// @match http://www.macquariedictionary.com.au/*829// @match https://www.macquariedictionary.com.au/*830// @match http://www.maneyonline.com/*831// @match https://www.maneyonline.com/*832// @match http://www.mrlonline.org/*833// @match https://www.mrlonline.org/*834// @match http://msp.org/*835// @match https://msp.org/*836// @match http://www.mathscipub.org/*837// @match https://www.mathscipub.org/*838// @match http://www.mathnetbase.com/*839// @match https://www.mathnetbase.com/*840// @match http://opil.ouplaw.com/*841// @match https://opil.ouplaw.com/*842// @match http://online.medphys.org/*843// @match https://online.medphys.org/*844// @match http://www.mja.com.au/*845// @match https://www.mja.com.au/*846// @match http://www.medicalevidencematters.com/*847// @match https://www.medicalevidencematters.com/*848// @match http://www.medici.tv/*849// @match https://www.medici.tv/*850// @match http://www.medicinescomplete.com/*851// @match https://www.medicinescomplete.com/*852// @match http://www.mergentonline.com/*853// @match https://www.mergentonline.com/*854// @match http://www.metapress.com/*855// @match https://www.metapress.com/*856// @match http://www.sanbi.co.jp/*857// @match https://www.sanbi.co.jp/*858// @match http://www.micromedexsolutions.com/*859// @match https://www.micromedexsolutions.com/*860// @match http://search.micronexx.com/*861// @match https://search.micronexx.com/*862// @match http://www.mimsonline.com.au/*863// @match https://www.mimsonline.com.au/*864// @match http://www.mitpressjournals.org/*865// @match https://www.mitpressjournals.org/*866// @match http://collections.chadwyck.co.uk/*867// @match https://collections.chadwyck.co.uk/*868// @match http://www.mlajournals.org/*869// @match https://www.mlajournals.org/*870// @match http://publications.epress.monash.edu/*871// @match https://publications.epress.monash.edu/*872// @match http://www.mcponline.org/*873// @match https://www.mcponline.org/*874// @match http://epress.monash.edu/*875// @match https://epress.monash.edu/*876// @match http://publishing.monash.edu/*877// @match https://publishing.monash.edu/*878// @match http://www.morganclaypool.com/*879// @match https://www.morganclaypool.com/*880// @match http://datanalysis.morningstar.com.au/*881// @match https://datanalysis.morningstar.com.au/*882// @match http://multi-science.metapress.com/*883// @match https://multi-science.metapress.com/*884// @match http://jmpt.hcn.com.au/*885// @match https://jmpt.hcn.com.au/*886// @match http://www.msa.org.au/*887// @match https://www.msa.org.au/*888// @match http://www.musicforum.org.au/*889// @match https://www.musicforum.org.au/*890// @match http://muco.alexanderstreet.com/*891// @match https://muco.alexanderstreet.com/*892// @match http://www.myilibrary.com/*893// @match https://www.myilibrary.com/*894// @match http://myrmecologicalnews.org/*895// @match https://myrmecologicalnews.org/*896// @match http://periodicals.narr.de/*897// @match https://periodicals.narr.de/*898// @match http://www.nature.com/*899// @match https://www.nature.com/*900// @match http://uwa.naxosvideolibrary.com/*901// @match https://uwa.naxosvideolibrary.com/*902// @match http://uwa.naxosmusiclibrary.com/*903// @match https://uwa.naxosmusiclibrary.com/*904// @match http://www.nber.org/*905// @match https://www.nber.org/*906// @match http://nearmap.com/*907// @match https://nearmap.com/*908// @match http://www.neilsonjournals.com/*909// @match https://www.neilsonjournals.com/*910// @match http://neoreviews.aappublications.org/*911// @match https://neoreviews.aappublications.org/*912// @match http://www.nejm.org/*913// @match https://www.nejm.org/*914// @match http://nejm.highwire.org/*915// @match https://nejm.highwire.org/*916// @match http://www.newleftreview.org/*917// @match https://www.newleftreview.org/*918// @match http://www.dictionaryofeconomics.com/*919// @match https://www.dictionaryofeconomics.com/*920// @match http://www.nybooks.com/*921// @match https://www.nybooks.com/*922// @match http://www.pacificarchaeology.org/*923// @match https://www.pacificarchaeology.org/*924// @match http://journal.nzma.org.nz/*925// @match https://journal.nzma.org.nz/*926// @match http://c19.chadwyck.co.uk/*927// @match https://c19.chadwyck.co.uk/*928// @match http://www.nowpublishers.com/*929// @match https://www.nowpublishers.com/*930// @match http://www.nrcresearchpress.com/*931// @match https://www.nrcresearchpress.com/*932// @match http://mcom.alexanderstreet.com/*933// @match https://mcom.alexanderstreet.com/*934// @match http://www.nursingreview.com.au/*935// @match https://www.nursingreview.com.au/*936// @match http://www.statistics.gov.uk/*937// @match https://www.statistics.gov.uk/*938// @match http://ojps.aip.org/*939// @match https://ojps.aip.org/*940// @match http://www.oldenbourg-link.com/*941// @match https://www.oldenbourg-link.com/*942// @match http://www.onarchitecture.com/*943// @match https://www.onarchitecture.com/*944// @match http://www.mathjournals.org/*945// @match https://www.mathjournals.org/*946// @match http://www.onemine.org/*947// @match https://www.onemine.org/*948// @match http://www.openbookpublishers.com/*949// @match https://www.openbookpublishers.com/*950// @match http://www.jopdentonline.org/*951// @match https://www.jopdentonline.org/*952// @match http://www.opticsinfobase.org/*953// @match https://www.opticsinfobase.org/*954// @match http://www.orchestralmusic.com/*955// @match https://www.orchestralmusic.com/*956// @match http://ovidsp.ovid.com/*957// @match https://ovidsp.ovid.com/*958// @match http://somme.library.uwa.edu.au/*959// @match https://somme.library.uwa.edu.au/*960// @match http://www.oldcitypublishing.com/*961// @match https://www.oldcitypublishing.com/*962// @match http://www.atypon-link.com/*963// @match https://www.atypon-link.com/*964// @match http://access.ovid.com/*965// @match https://access.ovid.com/*966// @match http://online.factsandcomparisons.com/*967// @match https://online.factsandcomparisons.com/*968// @match http://advisor.lww.com/*969// @match https://advisor.lww.com/*970// @match http://www.oxfordartonline.com/*971// @match https://www.oxfordartonline.com/*972// @match http://www.oxfordbibliographies.com/*973// @match https://www.oxfordbibliographies.com/*974// @match http://www.oxforddnb.com/*975// @match https://www.oxforddnb.com/*976// @match http://www.oxford-humanrights.com/*977// @match https://www.oxford-humanrights.com/*978// @match http://www.oxford-economichistory.com/*979// @match https://www.oxford-economichistory.com/*980// @match http://www.oxford-theatreandperformance.com/*981// @match https://www.oxford-theatreandperformance.com/*982// @match http://www.oxfordhandbooks.com/*983// @match https://www.oxfordhandbooks.com/*984// @match http://www.oxfordwesternmusic.com/*985// @match https://www.oxfordwesternmusic.com/*986// @match http://acn.oxfordjournals.org/*987// @match https://acn.oxfordjournals.org/*988// @match http://www.oed.com/*989// @match https://www.oed.com/*990// @match http://www.oxfordjournals.org/*991// @match https://www.oxfordjournals.org/*992// @match http://jwelb.oxfordjournals.org/*993// @match https://jwelb.oxfordjournals.org/*994// @match http://www.oxfordmusiconline.com/*995// @match https://www.oxfordmusiconline.com/*996// @match http://www.oxfordreference.com/*997// @match https://www.oxfordreference.com/*998// @match http://www.oxfordscholarship.com/*999// @match https://www.oxfordscholarship.com/*1000// @match http://pjm.math.berkeley.edu/*1001// @match https://pjm.math.berkeley.edu/*1002// @match http://www.museumoftheearth.org/*1003// @match https://www.museumoftheearth.org/*1004// @match http://www.palgrave-journals.com/*1005// @match https://www.palgrave-journals.com/*1006// @match http://geo.arizona.edu/*1007// @match https://geo.arizona.edu/*1008// @match http://pediatrics.aappublications.org/*1009// @match https://pediatrics.aappublications.org/*1010// @match http://poj.peeters-leuven.be/*1011// @match https://poj.peeters-leuven.be/*1012// @match http://www.perceptionweb.com/*1013// @match https://www.perceptionweb.com/*1014// @match http://pci.chadwyck.com/*1015// @match https://pci.chadwyck.com/*1016// @match http://pio.chadwyck.co.uk/*1017// @match https://pio.chadwyck.co.uk/*1018// @match http://pao.chadwyck.co.uk/*1019// @match https://pao.chadwyck.co.uk/*1020// @match http://www.kappanmagazine.org/*1021// @match https://www.kappanmagazine.org/*1022// @match http://www.pdcnet.org/*1023// @match https://www.pdcnet.org/*1024// @match http://thephilosophersmagazine.com/*1025// @match https://thephilosophersmagazine.com/*1026// @match http://philpapers.org/*1027// @match https://philpapers.org/*1028// @match http://www.phycologia.org/*1029// @match https://www.phycologia.org/*1030// @match http://physicsworldarchive.iop.org/*1031// @match https://physicsworldarchive.iop.org/*1032// @match http://www.physsportsmed.com/*1033// @match https://www.physsportsmed.com/*1034// @match http://piprofiler.systematics.net.au/*1035// @match https://piprofiler.systematics.net.au/*1036// @match http://www.pidgeondigital.com/*1037// @match https://www.pidgeondigital.com/*1038// @match http://www.plantcell.org/*1039// @match https://www.plantcell.org/*1040// @match http://www.plantphysiol.org/*1041// @match https://www.plantphysiol.org/*1042// @match http://www.polymersdatabase.com/*1043// @match https://www.polymersdatabase.com/*1044// @match http://dlib.eastview.com/*1045// @match https://dlib.eastview.com/*1046// @match http://ps.fass.org/*1047// @match https://ps.fass.org/*1048// @match http://www.pnas.org/*1049// @match https://www.pnas.org/*1050// @match http://www.sciquest.org.nz/*1051// @match https://www.sciquest.org.nz/*1052// @match http://www.presidian.com.au/*1053// @match https://www.presidian.com.au/*1054// @match http://library.pressdisplay.com/*1055// @match https://library.pressdisplay.com/*1056// @match http://www.sleepmedtext.com/*1057// @match https://www.sleepmedtext.com/*1058// @match http://projecteuclid.org/*1059// @match https://projecteuclid.org/*1060// @match http://muse.jhu.edu.au/*1061// @match https://muse.jhu.edu.au/*1062// @match http://search.proquest.com/*1063// @match https://search.proquest.com/*1064// @match http://www.proteinscience.org/*1065// @match https://www.proteinscience.org/*1066// @match http://www.psychiatryonline.org/*1067// @match https://www.psychiatryonline.org/*1068// @match http://www.psychonomic-journals.org/*1069// @match https://www.psychonomic-journals.org/*1070// @match http://www.publichealthreports.org/*1071// @match https://www.publichealthreports.org/*1072// @match http://library.queensu.ca/*1073// @match https://library.queensu.ca/*1074// @match http://pubs.rsna.org/*1075// @match https://pubs.rsna.org/*1076// @match http://www.srmjournals.org/*1077// @match https://www.srmjournals.org/*1078// @match http://www.reproduction-online.org/*1079// @match https://www.reproduction-online.org/*1080// @match http://biblioline.nisc.com/*1081// @match https://biblioline.nisc.com/*1082// @match http://db.riskwaters.com/*1083// @match https://db.riskwaters.com/*1084// @match http://www.rockefeller.edu/*1085// @match https://www.rockefeller.edu/*1086// @match http://www.jem.org/*1087// @match https://www.jem.org/*1088// @match http://www.rupress.org/*1089// @match https://www.rupress.org/*1090// @match http://rmmc.eas.asu.edu/*1091// @match https://rmmc.eas.asu.edu/*1092// @match http://www.romanticism.amdigital.co.uk/*1093// @match https://www.romanticism.amdigital.co.uk/*1094// @match http://www.rep.routledge.com/*1095// @match https://www.rep.routledge.com/*1096// @match http://www.rsc.org/*1097// @match https://www.rsc.org/*1098// @match http://www.rsnz.org/*1099// @match https://www.rsnz.org/*1100// @match http://journals.royalsociety.org/*1101// @match https://journals.royalsociety.org/*1102// @match http://royalsocietypublishing.org/*1103// @match https://royalsocietypublishing.org/*1104// @match http://www.csu.edu.au/*1105// @match https://www.csu.edu.au/*1106// @match http://escarpmentpress.org/*1107// @match https://escarpmentpress.org/*1108// @match http://reference.sabinet.co.za/*1109// @match https://reference.sabinet.co.za/*1110// @match http://digitallibrary.sae.org/*1111// @match https://digitallibrary.sae.org/*1112// @match http://sage-ereference.com/*1113// @match https://sage-ereference.com/*1114// @match http://knowledge.sagepub.com/*1115// @match https://knowledge.sagepub.com/*1116// @match http://online.sagepub.com/*1117// @match https://online.sagepub.com/*1118// @match http://www.sauerlaender-verlag.com/*1119// @match https://www.sauerlaender-verlag.com/*1120// @match http://www.schattauer.de/*1121// @match https://www.schattauer.de/*1122// @match http://www.sciandmed.com/*1123// @match https://www.sciandmed.com/*1124// @match http://www.trrjournalonline.trb.org/*1125// @match https://www.trrjournalonline.trb.org/*1126// @match http://www.wssajournals.org/*1127// @match https://www.wssajournals.org/*1128// @match http://www.hub.sciverse.com/*1129// @match https://www.hub.sciverse.com/*1130// @match http://www.sciencedirect.com/*1131// @match https://www.sciencedirect.com/*1132// @match http://www.scopus.com/*1133// @match https://www.scopus.com/*1134// @match http://www.sciencemag.org/*1135// @match https://www.sciencemag.org/*1136// @match http://sos.thieme.com/*1137// @match https://sos.thieme.com/*1138// @match http://utpjournals.metapress.com/*1139// @match https://utpjournals.metapress.com/*1140// @match http://sex.sagepub.com/*1141// @match https://sex.sagepub.com/*1142// @match http://www.sjmjournals.org/*1143// @match https://www.sjmjournals.org/*1144// @match http://www.shancocksltd.co.uk/*1145// @match https://www.shancocksltd.co.uk/*1146// @match http://epubs.siam.org/*1147// @match https://epubs.siam.org/*1148// @match http://www.journalsleep.org/*1149// @match https://www.journalsleep.org/*1150// @match http://glmu.alexanderstreet.com/*1151// @match https://glmu.alexanderstreet.com/*1152// @match http://sfaa.metapress.com/*1153// @match https://sfaa.metapress.com/*1154// @match http://www.endocrinology-journals.org/*1155// @match https://www.endocrinology-journals.org/*1156// @match http://library.seg.org/*1157// @match https://library.seg.org/*1158// @match http://www.sgm.ac.uk/*1159// @match https://www.sgm.ac.uk/*1160// @match http://www.rangelands.org/*1161// @match https://www.rangelands.org/*1162// @match http://journalofrheology.org/*1163// @match https://journalofrheology.org/*1164// @match http://www.ssr.org/*1165// @match https://www.ssr.org/*1166// @match http://www.oecd-ilibrary.org/*1167// @match https://www.oecd-ilibrary.org/*1168// @match http://www.oecd-nea.org/*1169// @match https://www.oecd-nea.org/*1170// @match http://www.oecdobserver.org/*1171// @match https://www.oecdobserver.org/*1172// @match http://new.sourceoecd.org/*1173// @match https://new.sourceoecd.org/*1174// @match http://www.spe.org/*1175// @match https://www.spe.org/*1176// @match http://spiedigitallibrary.org/*1177// @match https://spiedigitallibrary.org/*1178// @match http://ebooks.spiedigitallibrary.org/*1179// @match https://ebooks.spiedigitallibrary.org/*1180// @match http://spiedigitallibrary.aip.org/*1181// @match https://spiedigitallibrary.aip.org/*1182// @match http://journals.spiedigitallibrary.org/*1183// @match https://journals.spiedigitallibrary.org/*1184// @match http://opticalengineering.spiedigitallibrary.org/*1185// @match https://opticalengineering.spiedigitallibrary.org/*1186// @match http://biomedicaloptics.spiedigitallibrary.org/*1187// @match https://biomedicaloptics.spiedigitallibrary.org/*1188// @match http://link.springer.de/*1189// @match https://link.springer.de/*1190// @match http://link.springer.com/*1191// @match https://link.springer.com/*1192// @match http://materials.springer.com/*1193// @match https://materials.springer.com/*1194// @match http://www.saiglobal.com/*1195// @match https://www.saiglobal.com/*1196// @match http://www.stata-journal.com/*1197// @match https://www.stata-journal.com/*1198// @match http://www.stat.sinica.edu.tw/*1199// @match https://www.stat.sinica.edu.tw/*1200// @match http://www.statindex.org/*1201// @match https://www.statindex.org/*1202// @match http://stahlonline.cambridge.org/*1203// @match https://stahlonline.cambridge.org/*1204// @match http://www.surgeryjournal.co.uk/*1205// @match https://www.surgeryjournal.co.uk/*1206// @match http://www.hcn.net.au/*1207// @match https://www.hcn.net.au/*1208// @match http://www.law.usyd.edu.au/*1209// @match https://www.law.usyd.edu.au/*1210// @match http://archives.smh.com.au/*1211// @match https://archives.smh.com.au/*1212// @match http://www.arabidopsis.org/*1213// @match https://www.arabidopsis.org/*1214// @match http://tax.thomsonreuters.com.au/*1215// @match https://tax.thomsonreuters.com.au/*1216// @match http://tl2.idcpublishers.info/*1217// @match https://tl2.idcpublishers.info/*1218// @match http://www.tandfonline.com/*1219// @match https://www.tandfonline.com/*1220// @match http://technopress.kaist.ac.kr/*1221// @match https://technopress.kaist.ac.kr/*1222// @match http://journal.telospress.com/*1223// @match https://journal.telospress.com/*1224// @match http://www.terrapub.co.jp/*1225// @match https://www.terrapub.co.jp/*1226// @match http://jep.textrum.com/*1227// @match https://jep.textrum.com/*1228// @match http://www.economist.com/*1229// @match https://www.economist.com/*1230// @match http://stephanus.tlg.uci.edu/*1231// @match https://stephanus.tlg.uci.edu/*1232// @match http://xroads.virginia.edu/*1233// @match https://xroads.virginia.edu/*1234// @match http://www.theshakespearerecords.com/*1235// @match https://www.theshakespearerecords.com/*1236// @match http://www.escj.org/*1237// @match https://www.escj.org/*1238// @match http://archive.thewest.com.au/*1239// @match https://archive.thewest.com.au/*1240// @match http://www.thomastelford.com/*1241// @match https://www.thomastelford.com/*1242// @match http://www.tlemea.com/*1243// @match https://www.tlemea.com/*1244// @match http://archive.scijournal.com/*1245// @match https://archive.scijournal.com/*1246// @match http://transactionpub.metapress.com/*1247// @match https://transactionpub.metapress.com/*1248// @match http://trb.metapress.com/*1249// @match https://trb.metapress.com/*1250// @match http://www.scientific.net/*1251// @match https://www.scientific.net/*1252// @match http://www.triangle.co.uk/*1253// @match https://www.triangle.co.uk/*1254// @match http://turf.lib.msu.edu/*1255// @match https://turf.lib.msu.edu/*1256// @match http://www.turpion.org/*1257// @match https://www.turpion.org/*1258// @match http://ulrichsweb.serialssolutions.com/*1259// @match https://ulrichsweb.serialssolutions.com/*1260// @match http://untreaty.un.org/*1261// @match https://untreaty.un.org/*1262// @match http://157.150.195.4/*1263// @match https://157.150.195.4/*1264// @match http://www.journals.uchicago.edu/*1265// @match https://www.journals.uchicago.edu/*1266// @match http://www.press.uillinois.edu/*1267// @match https://www.press.uillinois.edu/*1268// @match http://www.uwpress.org/*1269// @match https://www.uwpress.org/*1270// @match http://www.universitypressscholarship.com/*1271// @match https://www.universitypressscholarship.com/*1272// @match http://www.v-r.de/*1273// @match https://www.v-r.de/*1274// @match http://wileyonlinelibrary.com/*1275// @match https://wileyonlinelibrary.com/*1276// @match http://wlt.metapress.com/*1277// @match https://wlt.metapress.com/*1278// @match http://elib.library.uwa.edu.au/*1279// @match https://elib.library.uwa.edu.au/*1280// @match http://erl.library.uwa.edu.au:8050/*1281// @match https://erl.library.uwa.edu.au:8050/*1282// @match http://etext.library.uwa.edu.au/*1283// @match https://etext.library.uwa.edu.au/*1284// @match http://findit.library.uwa.edu.au/*1285// @match https://findit.library.uwa.edu.au/*1286// @match http://www.victoriandatabase.com/*1287// @match https://www.victoriandatabase.com/*1288// @match http://www.degruyter.com/*1289// @match https://www.degruyter.com/*1290// @match http://www.victorianperiodicals.com/*1291// @match https://www.victorianperiodicals.com/*1292// @match http://wellesley.chadwyck.co.uk/*1293// @match https://wellesley.chadwyck.co.uk/*1294// @match http://web5s.silverplatter.com/*1295// @match https://web5s.silverplatter.com/*1296// @match http://westlaw.com.au/*1297// @match https://westlaw.com.au/*1298// @match http://login.westlaw.co.uk/*1299// @match https://login.westlaw.co.uk/*1300// @match http://www.westlaw.com/*1301// @match https://www.westlaw.com/*1302// @match http://connectweb.com.au/*1303// @match https://connectweb.com.au/*1304// @match http://hw.oeaw.ac.at/*1305// @match https://hw.oeaw.ac.at/*1306// @match http://www.withoutsanctuary.org/*1307// @match https://www.withoutsanctuary.org/*1308// @match http://journals.witpress.com/*1309// @match https://journals.witpress.com/*1310// @match http://www.worldbank.org/*1311// @match https://www.worldbank.org/*1312// @match http://newfirstsearch.oclc.org/*1313// @match https://newfirstsearch.oclc.org/*1314// @match http://worldcatlibraries.org/*1315// @match https://worldcatlibraries.org/*1316// @match http://www.worldscinet.com/*1317// @match https://www.worldscinet.com/*1318// @match http://www.worldscientific.com/*1319// @match https://www.worldscientific.com/*1320// @match http://ebooks.worldscinet.com/*1321// @match https://ebooks.worldscinet.com/*1322// @match http://www.worldshakesbib.org/*1323// @match https://www.worldshakesbib.org/*1324// @match http://naa12.naa.gov.au/*1325// @match https://naa12.naa.gov.au/*1326// @match http://www.meddent.uwa.edu.au/*1327// @match https://www.meddent.uwa.edu.au/*1328// ==/UserScript==1329window.location.replace(window.location.href.replace(/(https?:\/\/)(.*)/i, "$1echo.louisville.edu/login?url=$1$2"))...match.spec.js
Source:match.spec.js  
...17    });18    // ---19    it('should match simple string', function(){20        var r1 = crossroads.addRoute('/lorem-ipsum');21        expect( r1.match('/lorem-ipsum') ).toBe( true );22        expect( r1.match('/lorem-ipsum/') ).toBe( true );23        expect( r1.match('/lorem-ipsum/dolor') ).toBe( false );24    });25    it('should ignore trailing slash on pattern', function(){26        var r1 = crossroads.addRoute('/lorem-ipsum/');27        expect( r1.match('/lorem-ipsum') ).toBe( true );28        expect( r1.match('/lorem-ipsum/') ).toBe( true );29        expect( r1.match('/lorem-ipsum/dolor') ).toBe( false );30    });31    it('should match params', function(){32        var s = crossroads.addRoute('/{foo}');33        expect( s.match('/lorem-ipsum') ).toBe( true );34        expect( s.match('/lorem-ipsum/') ).toBe( true );35        expect( s.match('/lorem-ipsum/dolor') ).toBe( false );36        expect( s.match('lorem-ipsum') ).toBe( true );37        expect( s.match('/123') ).toBe( true );38        expect( s.match('/123/') ).toBe( true );39        expect( s.match('123') ).toBe( true );40        expect( s.match('123/45') ).toBe( false );41    });42    it('should match optional params', function(){43        var s = crossroads.addRoute(':bar:');44        expect( s.match('lorem-ipsum') ).toBe( true );45        expect( s.match('') ).toBe( true );46        expect( s.match('lorem-ipsum/dolor') ).toBe( false );47        expect( s.match('/lorem-ipsum/') ).toBe( true );48    });49    it('should match normal params and optional params', function(){50        var s = crossroads.addRoute('/{foo}/:bar:');51        expect( s.match('/lorem-ipsum') ).toBe( true );52        expect( s.match('/lorem-ipsum/') ).toBe( true );53        expect( s.match('/lorem-ipsum/dolor') ).toBe( true );54        expect( s.match('123/45') ).toBe( true );55    });56    it('should work even with optional params on the middle of pattern', function(){57        var a = crossroads.addRoute('/{foo}/:bar:/{ipsum}'); //bad use!58        expect( a.match('/123/45/asd') ).toBe( true );59        expect( a.match('/123/asd') ).toBe( true );60        var b = crossroads.addRoute('/{foo}:bar:{ipsum}'); //bad use!61        expect( b.match('/123/45/asd') ).toBe( true );62        expect( b.match('/123/45') ).toBe( true );63        var c = crossroads.addRoute('/{foo}:bar:/ipsum');64        expect( c.match('/123/45/ipsum') ).toBe( true );65        expect( c.match('/123/ipsum') ).toBe( true );66        var d = crossroads.addRoute('/{foo}:bar:ipsum'); //weird use!67        expect( d.match('/123/ipsum') ).toBe( true );68        expect( d.match('/123/45/ipsum') ).toBe( true );69    });70    it('should support multiple consecutive optional params', function(){71        var s = crossroads.addRoute('/123/:bar:/:ipsum:');72        expect( s.match('/123') ).toBe( true );73        expect( s.match('/123/') ).toBe( true );74        expect( s.match('/123/asd') ).toBe( true );75        expect( s.match('/123/asd/45') ).toBe( true );76        expect( s.match('/123/asd/45/') ).toBe( true );77        expect( s.match('/123/asd/45/qwe') ).toBe( false );78    });79    it('should not be case sensitive by default', function () {80        var s = crossroads.addRoute('foo/bar');81        expect( s.match('foo') ).toBe( false );82        expect( s.match('Foo') ).toBe( false );83        expect( s.match('foo/bar') ).toBe( true );84        expect( s.match('Foo/Bar') ).toBe( true );85        expect( s.match('FoO/BAR') ).toBe( true );86    });87    it('should be allow toggling case sensitivity', function () {88        crossroads.ignoreCase = true;89        var s = crossroads.addRoute('foo/bar');90        expect( s.match('foo') ).toBe( false );91        expect( s.match('Foo') ).toBe( false );92        expect( s.match('foo/bar') ).toBe( true );93        expect( s.match('Foo/Bar') ).toBe( true );94        expect( s.match('FoO/BAR') ).toBe( true );95    });96    describe('rest params', function () {97        it('should support rest params', function () {98            var s = crossroads.addRoute('/123/{bar}/:ipsum*:');99            expect( s.match('/123') ).toBe( false );100            expect( s.match('/123/') ).toBe( false );101            expect( s.match('/123/asd') ).toBe( true );102            expect( s.match('/123/asd/45') ).toBe( true );103            expect( s.match('/123/asd/45/') ).toBe( true );104            expect( s.match('/123/asd/45/qwe') ).toBe( true );105            expect( s.match('/456/asd/45/qwe') ).toBe( false );106        });107        it('should work even in the middle of pattern', function () {108            var s = crossroads.addRoute('/foo/:bar*:/edit');109            expect( s.match('/foo') ).toBe( false );110            expect( s.match('/foo/') ).toBe( false );111            expect( s.match('/foo/edit') ).toBe( true );112            expect( s.match('/foo/asd') ).toBe( false );113            expect( s.match('/foo/asd/edit') ).toBe( true );114            expect( s.match('/foo/asd/edit/') ).toBe( true );115            expect( s.match('/foo/asd/123/edit') ).toBe( true );116            expect( s.match('/foo/asd/edit/qwe') ).toBe( false );117        });118    });119    describe('query string', function () {120        it('should match query string as first segment', function () {121            var r = crossroads.addRoute('{?q}');122            expect( r.match('') ).toBe( false );123            expect( r.match('foo') ).toBe( false );124            expect( r.match('/foo') ).toBe( false );125            expect( r.match('foo/') ).toBe( false );126            expect( r.match('/foo/') ).toBe( false );127            expect( r.match('?foo') ).toBe( true );128            expect( r.match('?foo=bar') ).toBe( true );129            expect( r.match('?foo=bar&lorem=123') ).toBe( true );130        });131        it('should match optional query string as first segment', function () {132            var r = crossroads.addRoute(':?q:');133            expect( r.match('') ).toBe( true );134            expect( r.match('foo') ).toBe( false );135            expect( r.match('/foo') ).toBe( false );136            expect( r.match('foo/') ).toBe( false );137            expect( r.match('/foo/') ).toBe( false );138            expect( r.match('?foo') ).toBe( true );139            expect( r.match('?foo=bar') ).toBe( true );140            expect( r.match('?foo=bar&lorem=123') ).toBe( true );141        });142        it('should match query string as 2nd segment', function () {143            var r = crossroads.addRoute('{a}{?q}');144            expect( r.match('') ).toBe( false );145            expect( r.match('foo') ).toBe( false );146            expect( r.match('/foo') ).toBe( false );147            expect( r.match('foo/') ).toBe( false );148            expect( r.match('/foo/') ).toBe( false );149            expect( r.match('foo?foo') ).toBe( true );150            expect( r.match('foo?foo=bar') ).toBe( true );151            expect( r.match('foo?foo=bar&lorem=123') ).toBe( true );152        });153        it('should match optional query string as 2nd segment', function () {154            var r = crossroads.addRoute('{a}:?q:');155            expect( r.match('') ).toBe( false );156            expect( r.match('foo') ).toBe( true );157            expect( r.match('/foo') ).toBe( true );158            expect( r.match('foo/') ).toBe( true );159            expect( r.match('/foo/') ).toBe( true );160            expect( r.match('foo?foo') ).toBe( true );161            expect( r.match('foo?foo=bar') ).toBe( true );162            expect( r.match('foo?foo=bar&lorem=123') ).toBe( true );163        });164        it('should match query string as middle segment', function () {165            //if hash is required should use the literal "#" to avoid matching166            //the last char of string as a string "foo?foo" shouldn't match167            var r = crossroads.addRoute('{a}{?q}#{hash}');168            expect( r.match('') ).toBe( false );169            expect( r.match('foo') ).toBe( false );170            expect( r.match('/foo') ).toBe( false );171            expect( r.match('foo/') ).toBe( false );172            expect( r.match('/foo/') ).toBe( false );173            expect( r.match('foo?foo') ).toBe( false );174            expect( r.match('foo?foo#bar') ).toBe( true );175            expect( r.match('foo?foo=bar#bar') ).toBe( true );176            expect( r.match('foo?foo=bar&lorem=123#bar') ).toBe( true );177        });178        it('should match optional query string as middle segment', function () {179            var r = crossroads.addRoute('{a}:?q::hash:');180            expect( r.match('') ).toBe( false );181            expect( r.match('foo') ).toBe( true );182            expect( r.match('/foo') ).toBe( true );183            expect( r.match('foo/') ).toBe( true );184            expect( r.match('/foo/') ).toBe( true );185            expect( r.match('foo?foo') ).toBe( true );186            expect( r.match('foo?foo=bar') ).toBe( true );187            expect( r.match('foo?foo=bar#bar') ).toBe( true );188            expect( r.match('foo?foo=bar&lorem=123') ).toBe( true );189            expect( r.match('foo?foo=bar&lorem=123#bar') ).toBe( true );190        });191        it('should match query string even if not using the special query syntax', function () {192            var r = crossroads.addRoute('{a}?{q}#{hash}');193            expect( r.match('') ).toBe( false );194            expect( r.match('foo') ).toBe( false );195            expect( r.match('/foo') ).toBe( false );196            expect( r.match('foo/') ).toBe( false );197            expect( r.match('/foo/') ).toBe( false );198            expect( r.match('foo?foo') ).toBe( false );199            expect( r.match('foo?foo#bar') ).toBe( true );200            expect( r.match('foo?foo=bar#bar') ).toBe( true );201            expect( r.match('foo?foo=bar&lorem=123#bar') ).toBe( true );202        });203    });204    describe('slash between params are optional', function(){205        describe('between required params', function(){206            it('after other param', function(){207                var a = crossroads.addRoute('{bar}{ipsum}');208                expect( a.match('123') ).toBe( false );209                expect( a.match('123/') ).toBe( false );210                expect( a.match('123/asd') ).toBe( true );211                expect( a.match('123/asd/') ).toBe( true );212                expect( a.match('123/asd/45') ).toBe( false );213                expect( a.match('123/asd/45/') ).toBe( false );214                expect( a.match('123/asd/45/qwe') ).toBe( false );215            });216        });217        describe('between optional params', function(){218            it('optional after other optional param', function(){219                var a = crossroads.addRoute(':bar::ipsum:');220                expect( a.match('123') ).toBe( true );221                expect( a.match('123/') ).toBe( true );222                expect( a.match('123/asd') ).toBe( true );223                expect( a.match('123/asd/') ).toBe( true );224                expect( a.match('123/asd/45') ).toBe( false );225                expect( a.match('123/asd/45/') ).toBe( false );226                expect( a.match('123/asd/45/qwe') ).toBe( false );227            });228        });229        describe('mixed', function(){230            it('between normal + optional', function(){231                var a = crossroads.addRoute('/{foo}:bar:');232                expect( a.match('/lorem-ipsum/dolor') ).toBe( true );233            });234            it('between normal + optional*2', function(){235                var b = crossroads.addRoute('/{foo}:bar::ipsum:');236                expect( b.match('/123') ).toBe( true );237                expect( b.match('/123/asd') ).toBe( true );238                expect( b.match('/123/asd/') ).toBe( true );239                expect( b.match('/123/asd/qwe') ).toBe( true );240                expect( b.match('/123/asd/qwe/') ).toBe( true );241                expect( b.match('/123/asd/qwe/asd') ).toBe( false );242                expect( b.match('/123/asd/qwe/asd/') ).toBe( false );243            });244            it('with slashes all', function(){245                var c = crossroads.addRoute('bar/{foo}/:bar:/:ipsum:');246                expect( c.match('bar/123') ).toBe( true );247                expect( c.match('bar/123/') ).toBe( true );248                expect( c.match('bar/123/asd') ).toBe( true );249                expect( c.match('bar/123/asd/') ).toBe( true );250                expect( c.match('bar/123/asd/45') ).toBe( true );251                expect( c.match('bar/123/asd/45/') ).toBe( true );252                expect( c.match('bar/123/asd/45/qwe') ).toBe( false );253            });254            it('required param after \\w/', function(){255                var a = crossroads.addRoute('/123/{bar}{ipsum}');256                expect( a.match('/123') ).toBe( false );257                expect( a.match('/123/') ).toBe( false );258                expect( a.match('/123/asd') ).toBe( false );259                expect( a.match('/123/asd/') ).toBe( false );260                expect( a.match('/123/asd/45') ).toBe( true );261                expect( a.match('/123/asd/45/') ).toBe( true );262                expect( a.match('/123/asd/45/qwe') ).toBe( false );263            });264            it('optional params after \\w/', function(){265                var a = crossroads.addRoute('/123/:bar::ipsum:');266                expect( a.match('/123') ).toBe( true );267                expect( a.match('/123/') ).toBe( true );268                expect( a.match('/123/asd') ).toBe( true );269                expect( a.match('/123/asd/') ).toBe( true );270                expect( a.match('/123/asd/45') ).toBe( true );271                expect( a.match('/123/asd/45/') ).toBe( true );272                expect( a.match('/123/asd/45/qwe') ).toBe( false );273            });274        });275    });276    describe('slash is required between word and param', function(){277        it('required param after \\w', function(){278            var a = crossroads.addRoute('/123{bar}{ipsum}');279            expect( a.match('/123') ).toBe( false );280            expect( a.match('/123/') ).toBe( false );281            expect( a.match('/123/asd') ).toBe( false );282            expect( a.match('/123/asd/') ).toBe( false );283            expect( a.match('/123/asd/45') ).toBe( false );284            expect( a.match('/123/asd/45/') ).toBe( false );285            expect( a.match('/123/asd/45/qwe') ).toBe( false );286            expect( a.match('/123asd') ).toBe( false );287            expect( a.match('/123asd/') ).toBe( false );288            expect( a.match('/123asd/45') ).toBe( true );289            expect( a.match('/123asd/45/') ).toBe( true );290            expect( a.match('/123asd/45/qwe') ).toBe( false );291        });292        it('optional param after \\w', function(){293            var a = crossroads.addRoute('/123:bar::ipsum:');294            expect( a.match('/123') ).toBe( true );295            expect( a.match('/123/') ).toBe( true );296            expect( a.match('/123/asd') ).toBe( true );297            expect( a.match('/123/asd/') ).toBe( true );298            expect( a.match('/123/asd/45') ).toBe( false );299            expect( a.match('/123/asd/45/') ).toBe( false );300            expect( a.match('/123/asd/45/qwe') ).toBe( false );301            expect( a.match('/123asd') ).toBe( true );302            expect( a.match('/123asd/') ).toBe( true );303            expect( a.match('/123asd/45') ).toBe( true );304            expect( a.match('/123asd/45/') ).toBe( true );305            expect( a.match('/123asd/45/qwe') ).toBe( false );306        });307    });308    describe('strict slash rules', function () {309        afterEach(function(){310            crossroads.patternLexer.loose();311        });312        it('should only match if traling slashes match the original pattern', function () {313            crossroads.patternLexer.strict();314            var a = crossroads.addRoute('{foo}');315            expect( a.match('foo') ).toBe( true );316            expect( a.match('/foo') ).toBe( false );317            expect( a.match('foo/') ).toBe( false );318            expect( a.match('/foo/') ).toBe( false );319            var b = crossroads.addRoute('/{foo}');320            expect( b.match('foo') ).toBe( false );321            expect( b.match('/foo') ).toBe( true );322            expect( b.match('foo/') ).toBe( false );323            expect( b.match('/foo/') ).toBe( false );324            var c = crossroads.addRoute('');325            expect( c.match() ).toBe( true );326            expect( c.match('') ).toBe( true );327            expect( c.match('/') ).toBe( false );328            expect( c.match('foo') ).toBe( false );329            var d = crossroads.addRoute('/');330            expect( d.match() ).toBe( false );331            expect( d.match('') ).toBe( false );332            expect( d.match('/') ).toBe( true );333            expect( d.match('foo') ).toBe( false );334        });335    });336    describe('loose slash rules', function () {337        beforeEach(function(){338            crossroads.patternLexer.loose();339        });340        it('should treat single slash and empty string as same', function () {341            var c = crossroads.addRoute('');342            expect( c.match() ).toBe( true );343            expect( c.match('') ).toBe( true );344            expect( c.match('/') ).toBe( true );345            expect( c.match('foo') ).toBe( false );346            var d = crossroads.addRoute('/');347            expect( d.match() ).toBe( true );348            expect( d.match('') ).toBe( true );349            expect( d.match('/') ).toBe( true );350            expect( d.match('foo') ).toBe( false );351        });352    });353    describe('legacy slash rules', function () {354        beforeEach(function(){355            crossroads.patternLexer.legacy();356        });357        afterEach(function(){358            crossroads.patternLexer.loose();359        });360        it('should treat single slash and empty string as same', function () {361            var c = crossroads.addRoute('');362            expect( c.match() ).toBe( true );363            expect( c.match('') ).toBe( true );364            expect( c.match('/') ).toBe( true );365            expect( c.match('foo') ).toBe( false );366            var d = crossroads.addRoute('/');367            expect( d.match() ).toBe( true );368            expect( d.match('') ).toBe( true );369            expect( d.match('/') ).toBe( true );370            expect( d.match('foo') ).toBe( false );371        });372        it('slash at end of string is optional', function () {373            var a = crossroads.addRoute('/foo');374            expect( a.match('/foo') ).toEqual( true );375            expect( a.match('/foo/') ).toEqual( true );376            expect( a.match('/foo/bar') ).toEqual( false );377        });378        it('slash at begin of string is required', function () {379            var a = crossroads.addRoute('/foo');380            expect( a.match('/foo') ).toEqual( true );381            expect( a.match('/foo/') ).toEqual( true );382            expect( a.match('foo') ).toEqual( false );383            expect( a.match('foo/') ).toEqual( false );384            expect( a.match('/foo/bar') ).toEqual( false );385        });386    });387    describe('rules', function(){388        describe('basic rules', function(){389            it('should allow array options', function(){390                var s = crossroads.addRoute('/{foo}/{bar}');391                s.rules = {392                    foo : ['lorem-ipsum', '123'],393                    bar : ['DoLoR', '45']394                };395                expect( s.match('/lorem-ipsum') ).toBe( false );396                expect( s.match('/lorem-ipsum/DoLoR') ).toBe( true );397                expect( s.match('/LoReM-IpSuM/DOLoR') ).toBe( true );398                expect( s.match('lorem-ipsum') ).toBe( false );399                expect( s.match('/123') ).toBe( false );400                expect( s.match('123') ).toBe( false );401                expect( s.match('/123/123') ).toBe( false );402                expect( s.match('/123/45') ).toBe( true );403            });404            it('should change array validation behavior when ignoreCase is false', function(){405                crossroads.ignoreCase = false;406                var s = crossroads.addRoute('/{foo}/{bar}');407                s.rules = {408                    foo : ['lorem-ipsum', '123'],409                    bar : ['DoLoR', '45']410                };411                expect( s.match('/lorem-ipsum') ).toBe( false );412                expect( s.match('/lorem-ipsum/dolor') ).toBe( false );413                expect( s.match('/lorem-ipsum/DoLoR') ).toBe( true );414                expect( s.match('/LoReM-IpSuM/DOLoR') ).toBe( false );415                expect( s.match('lorem-ipsum') ).toBe( false );416                expect( s.match('/123') ).toBe( false );417                expect( s.match('123') ).toBe( false );418                expect( s.match('/123/123') ).toBe( false );419                expect( s.match('/123/45') ).toBe( true );420            });421            it('should allow RegExp options', function(){422                var s = crossroads.addRoute('/{foo}/{bar}');423                s.rules = {424                    foo : /(^[a-z0-9\-]+$)/,425                    bar : /(.+)/426                };427                expect( s.match('/lorem-ipsum') ).toBe( false );428                expect( s.match('/lorem-ipsum/dolor') ).toBe( true );429                expect( s.match('lorem-ipsum') ).toBe( false );430                expect( s.match('/123') ).toBe( false );431                expect( s.match('123') ).toBe( false );432                expect( s.match('/123/45') ).toBe( true );433            });434            it('should allow function rule', function(){435                var s = crossroads.addRoute('/{foo}/{bar}/{ipsum}');436                s.rules = {437                    foo : function(val, request, params){438                        return (val === 'lorem-ipsum' || val === '123');439                    },440                    bar : function(val, request, params){441                        return (request !== '/lorem-ipsum');442                    },443                    ipsum : function(val, request, params){444                        return (params.bar === 'dolor' && params.ipsum === 'sit-amet') || (params.bar === '45' && params.ipsum === '67');445                    }446                };447                expect( s.match('/lorem-ipsum') ).toBe( false );448                expect( s.match('/lorem-ipsum/dolor/sit-amet') ).toBe( true );449                expect( s.match('lorem-ipsum') ).toBe( false );450                expect( s.match('/123') ).toBe( false );451                expect( s.match('123') ).toBe( false );452                expect( s.match('/123/44/55') ).toBe( false );453                expect( s.match('/123/45/67') ).toBe( true );454            });455            it('should work with mixed rules', function(){456                var s = crossroads.addRoute('/{foo}/{bar}/{ipsum}');457                s.rules = {458                    foo : function(val, request, params){459                        return (val === 'lorem-ipsum' || val === '123');460                    },461                    bar : ['dolor', '45'],462                    ipsum : /(sit-amet|67)/463                };464                expect( s.match('/lorem-ipsum') ).toBe( false );465                expect( s.match('/lorem-ipsum/dolor/sit-amet') ).toBe( true );466                expect( s.match('lorem-ipsum') ).toBe( false );467                expect( s.match('/123') ).toBe( false );468                expect( s.match('123') ).toBe( false );469                expect( s.match('/123/45/67') ).toBe( true );470            });471            it('should only check rules of optional segments if param exists', function(){472                var a = crossroads.addRoute('/123/:a:/:b:/:c:');473                a.rules = {474                    a : /^\w+$/,475                    b : function(val){476                        return val === 'ipsum';477                    },478                    c : ['lorem', 'bar']479                };480                expect( a.match('/123') ).toBe( true );481                expect( a.match('/123/') ).toBe( true );482                expect( a.match('/123/asd') ).toBe( true );483                expect( a.match('/123/asd/') ).toBe( true );484                expect( a.match('/123/asd/ipsum/') ).toBe( true );485                expect( a.match('/123/asd/ipsum/bar') ).toBe( true );486                expect( a.match('/123/asd/45') ).toBe( false );487                expect( a.match('/123/asd/45/qwe') ).toBe( false );488                expect( a.match('/123/as#%d&/ipsum') ).toBe( false );489                expect( a.match('/123/asd/ipsum/nope') ).toBe( false );490            });491            it('should work with shouldTypecast=false', function(){492                var s = crossroads.addRoute('/{foo}/{bar}/{ipsum}');493                crossroads.shouldTypecast = false;494                s.rules = {495                    foo : function(val, request, params){496                        return (val === 'lorem-ipsum' || val === '123');  //only string validates497                    },498                    bar : ['dolor', '45'], //only string validates499                    ipsum : /(sit-amet|67)/500                };501                expect( s.match('/lorem-ipsum') ).toBe( false );502                expect( s.match('/lorem-ipsum/dolor/sit-amet') ).toBe( true );503                expect( s.match('lorem-ipsum') ).toBe( false );504                expect( s.match('/123') ).toBe( false );505                expect( s.match('123') ).toBe( false );506                expect( s.match('/123/45/67') ).toBe( true );507            });508        });509        describe('query string', function () {510            it('should validate with array', function () {511                var r = crossroads.addRoute('/foo.php{?query}');512                r.rules = {513                    '?query' : ['lorem=ipsum&dolor=456', 'amet=789']514                };515                expect( r.match('foo.php?bar=123&ipsum=dolor') ).toBe( false );516                expect( r.match('foo.php?lorem=ipsum&dolor=456') ).toBe( true );517                expect( r.match('foo.php?amet=789') ).toBe( true );518            });519            it('should validate with RegExp', function () {520                var r = crossroads.addRoute('/foo.php{?query}');521                r.rules = {522                    '?query' : /^lorem=\w+&dolor=\d+$/523                };524                expect( r.match('foo.php?bar=123&ipsum=dolor') ).toBe( false );525                expect( r.match('foo.php?lorem=ipsum&dolor=12345') ).toBe( true );526                expect( r.match('foo.php?lorem=ipsum&dolor=amet') ).toBe( false );527            });528            it('should validate with Function', function () {529                var r = crossroads.addRoute('/foo.php{?query}');530                crossroads.shouldTypecast = true;531                r.rules = {532                    '?query' : function(val, req, vals){533                        return (val.lorem === 'ipsum' && typeof val.dolor === 'number');534                    }535                };536                expect( r.match('foo.php?bar=123&ipsum=dolor') ).toBe( false );537                expect( r.match('foo.php?lorem=ipsum&dolor=12345') ).toBe( true );538                expect( r.match('foo.php?lorem=ipsum&dolor=amet') ).toBe( false );539            });540        });541        describe('path alias', function(){542            it('should work with string pattern', function(){543                var s = crossroads.addRoute('/{foo}/{bar}/{ipsum}');544                s.rules = {545                    0 : ['lorem-ipsum', '123'],546                    1 : function(val, request, params){547                        return (request !== '/lorem-ipsum');548                    },549                    2 : /^(sit-amet|67)$/550                };551                expect( s.match('/lorem-ipsum') ).toBe( false );552                expect( s.match('/lorem-ipsum/dolor/sit-amet') ).toBe( true );553                expect( s.match('lorem-ipsum') ).toBe( false );554                expect( s.match('/123') ).toBe( false );555                expect( s.match('123') ).toBe( false );556                expect( s.match('/123/44/55') ).toBe( false );557                expect( s.match('/123/45/67') ).toBe( true );558            });559            it('should work with RegExp pattern', function(){560                var s = crossroads.addRoute(/([\-\w]+)\/([\-\w]+)\/([\-\w]+)/);561                s.rules = {562                    0 : ['lorem-ipsum', '123'],563                    1 : function(val, request, params){564                        return (request !== '/lorem-ipsum');565                    },566                    2 : /^(sit-amet|67)$/567                };568                expect( s.match('/lorem-ipsum') ).toBe( false );569                expect( s.match('/lorem-ipsum/dolor/sit-amet') ).toBe( true );570                expect( s.match('lorem-ipsum') ).toBe( false );571                expect( s.match('/123') ).toBe( false );572                expect( s.match('123') ).toBe( false );573                expect( s.match('/123/44/55') ).toBe( false );574                expect( s.match('/123/45/67') ).toBe( true );575            });576        });577        describe('request_', function(){578            it('should validate whole request', function(){579                var s = crossroads.addRoute(/^([a-z0-9]+)$/);580                s.rules = {581                    request_ : function(request){ //this gets executed after all other validations582                        return request !== '555';583                    }584                };585                expect( s.match('lorem') ).toBe( true );586                expect( s.match('lorem/dolor/sit-amet') ).toBe( false );587                expect( s.match('lorem-ipsum') ).toBe( false );588                expect( s.match('123') ).toBe( true );589                expect( s.match('555') ).toBe( false );590            });591            it('should execute after other rules', function(){592                var s = crossroads.addRoute('/{foo}/{bar}/{ipsum}');593                s.rules = {594                    foo : function(val, request, params){595                        return (val === 'lorem-ipsum' || val === '123');596                    },597                    bar : ['dolor', '45'],598                    ipsum : /(sit-amet|67|555)/,599                    request_ : function(request){ //this gets executed after all other validations600                        return request !== '/123/45/555';601                    }602                };603                expect( s.match('/lorem-ipsum') ).toBe( false );604                expect( s.match('/lorem-ipsum/dolor/sit-amet') ).toBe( true );605                expect( s.match('lorem-ipsum') ).toBe( false );606                expect( s.match('/123') ).toBe( false );607                expect( s.match('123') ).toBe( false );608                expect( s.match('/123/45/67') ).toBe( true );609                expect( s.match('/123/45/555') ).toBe( false );610            });611            it('can be an array', function(){612                var s = crossroads.addRoute(/^([a-z0-9]+)$/);613                s.rules = {614                    request_ : ['lorem', '123']615                };616                expect( s.match('lorem') ).toBe( true );617                expect( s.match('lorem/dolor/sit-amet') ).toBe( false );618                expect( s.match('lorem-ipsum') ).toBe( false );619                expect( s.match('123') ).toBe( true );620                expect( s.match('555') ).toBe( false );621            });622            it('can be a RegExp', function(){623                var s = crossroads.addRoute(/^([a-z0-9]+)$/);624                s.rules = {625                    request_ : /^(lorem|123)$/626                };627                expect( s.match('lorem') ).toBe( true );628                expect( s.match('lorem/dolor/sit-amet') ).toBe( false );629                expect( s.match('lorem-ipsum') ).toBe( false );630                expect( s.match('123') ).toBe( true );631                expect( s.match('555') ).toBe( false );632            });633            it('should work with optional params', function(){634                var s = crossroads.addRoute(':foo:');635                s.rules = {636                    request_ : /^(lorem|123|)$/ //empty also matches!637                };638                expect( s.match('lorem') ).toBe( true );639                expect( s.match('lorem/dolor/sit-amet') ).toBe( false );640                expect( s.match('lorem-ipsum') ).toBe( false );641                expect( s.match('123') ).toBe( true );642                expect( s.match('555') ).toBe( false );643                expect( s.match('') ).toBe( true );644            });645        });646        describe('normalize_', function(){647            it('should ignore normalize_ since it isn\'t a validation rule', function () {648                var calledNormalize = false;649                var s = crossroads.addRoute('/{foo}/{bar}/{ipsum}');650                s.rules = {651                     foo : function(val, request, params){652                         return (val === 'lorem-ipsum' || val === '123');653                     },654                     bar : ['dolor', '45'],655                     ipsum : /(sit-amet|67)/,656                     normalize_ : function(){657                         calledNormalize = true;658                         return [true];659                     }660                 };661                 expect( calledNormalize ).toBe( false );662                 expect( s.match('/lorem-ipsum') ).toBe( false );663                 expect( s.match('/lorem-ipsum/dolor/sit-amet') ).toBe( true );664                 expect( s.match('lorem-ipsum') ).toBe( false );665                 expect( s.match('/123') ).toBe( false );666                 expect( s.match('123') ).toBe( false );667                 expect( s.match('/123/45/67') ).toBe( true );668            });669        });670    });...rules.js
Source:rules.js  
1import {2  F, B, U, D, R, L,3  N, W, S, E, NW, NE, SW, SE, SLOT_M, SLOT_D,4  COLOR_D as CD, COLOR_F as CF, COLOR_R as CR5} from './consts.js'6const SE_D_AS_F = { [F]: CD, [U]: CF, [R]: CR }7const SE_D_AS_R = { [F]: CF, [U]: CR, [R]: CD }8const SE_D_AS_U = { [F]: CR, [U]: CD, [R]: CF }9const SLOT_M_SOLVED = { [F]: CF, [R]: CR }10const SLOT_M_REVERSED = { [F]: CR, [R]: CF }11const SLOT_D_SOLVED = { [F]: CF, [R]: CR, [D]: CD }12const SLOT_D_D_AS_F = { [F]: CD, [R]: CF, [D]: CR }13const SLOT_D_D_AS_R = { [F]: CR, [R]: CD, [D]: CF }14const topEdge = (topColor, dir) => {15  const mapping = { [W]: L, [N]: B, [E]: R, [S]: F }16  return { [U]: topColor, [mapping[dir]]: topColor === CF ? CR : CF }17}18// https://www.speedsolving.com/wiki/index.php/F2L19export const F2L = [20  // 121  {22    match: { [E]: topEdge(CF, E), [SE]: SE_D_AS_F },23    moves: "U (R U' R')"24  },25  // 226  {27    match: { [S]: topEdge(CR, S), [SE]: SE_D_AS_R },28    moves: "U' (F' U F)"29  },30  // 331  {32    match: { [W]: topEdge(CR, W), [SE]: SE_D_AS_F },33    moves: "F' U' F"34  },35  // 436  {37    match: { [N]: topEdge(CF, N), [SE]: SE_D_AS_R },38    moves: "(R U R')"39  },40  // 541  {42    match: { [N]: topEdge(CF, N), [SE]: SE_D_AS_F },43    moves: "(U' R U R') U (R' F R F')"44  },45  // 646  {47    match: { [W]: topEdge(CR, W), [SE]: SE_D_AS_R },48    moves: "R R (B U B' U') R R"49  },50  // 751  {52    match: { [W]: topEdge(CF, W), [SE]: SE_D_AS_F },53    moves: "U' (R U U R') U U (R U' R')"54  },55  // 856  {57    match: { [N]: topEdge(CR, N), [SE]: SE_D_AS_R },58    moves: "(U F' U U F) (U F' U U F)"59  },60  // 961  {62    match: { [N]: topEdge(CR, N), [SE]: SE_D_AS_F },63    moves: "(U F' U' F) U' (F' U' F)"64  },65  // 1066  {67    match: { [W]: topEdge(CF, W), [SE]: SE_D_AS_R },68    moves: "U' (R U R' U) (R U R')"69  },70  // 1171  {72    match: { [E]: topEdge(CR, E), [SE]: SE_D_AS_F },73    moves: "U (F R' F' R) (F R' F' R) U' R U R'"74  },75  // 1276  {77    match: { [S]: topEdge(CF, S), [SE]: SE_D_AS_R },78    moves: "R' U U R R U R R U R"79  },80  // 1381  {82    match: { [S]: topEdge(CR, S), [SE]: SE_D_AS_F },83    moves: "(U F' U F) U' (F' U' F)"84  },85  // 1486  {87    match: { [E]: topEdge(CF, E), [SE]: SE_D_AS_R },88    moves: "U' (R U' R' U) (R U R')"89  },90  // 1591  {92    match: { [S]: topEdge(CF, S), [SE]: SE_D_AS_F },93    moves: "R B L U' L' B' R'"94  },95  // 1696  {97    match: { [E]: topEdge(CR, E), [SE]: SE_D_AS_R },98    moves: "(R U' R') U U (F' U' F)"99  },100  // 17101  {102    match: { [E]: topEdge(CF, E), [SE]: SE_D_AS_U },103    moves: "(R U U R') U' (R U R')"104  },105  // 18106  {107    match: { [S]: topEdge(CR, S), [SE]: SE_D_AS_U },108    moves: "F' U U F U F' U' F"109  },110  // 19111  {112    match: { [N]: topEdge(CF, N), [SE]: SE_D_AS_U },113    moves: "U R U U R R (F R F')"114  },115  // 20116  {117    match: { [W]: topEdge(CR, W), [SE]: SE_D_AS_U },118    moves: "U' F' U U F F (R' F' R)"119  },120  // 21121  {122    match: { [W]: topEdge(CF, W), [SE]: SE_D_AS_U },123    moves: "R B U U B' R'"124  },125  // 22126  {127    match: { [N]: topEdge(CR, N), [SE]: SE_D_AS_U },128    moves: "F' L' U U L F"129  },130  // 23131  {132    match: { [S]: topEdge(CF, S), [SE]: SE_D_AS_U },133    moves: "U (F R' F' R) U (R U R')"134  },135  // 24136  {137    match: { [E]: topEdge(CR, E), [SE]: SE_D_AS_U },138    moves: "U F' L' U L F R U R'"139  },140  // 25141  {142    match: { [E]: topEdge(CF, E), [SLOT_D]: SLOT_D_SOLVED },143    moves: "U' (F' U F) U (R U' R')"144  },145  // 26146  {147    match: { [S]: topEdge(CR, S), [SLOT_D]: SLOT_D_SOLVED },148    moves: "U (R U' R') U' (F' U F)"149  },150  // 27151  {152    match: { [E]: topEdge(CF, E), [SLOT_D]: SLOT_D_D_AS_F },153    moves: "(R U' R' U) (R U' R')"154  },155  // 28156  {157    match: { [S]: topEdge(CR, S), [SLOT_D]: SLOT_D_D_AS_R },158    moves: "(R U R' U') F R' F' R"159  },160  // 29161  {162    match: { [S]: topEdge(CR, S), [SLOT_D]: SLOT_D_D_AS_F },163    moves: "(R' F R F') (R' F R F')"164  },165  // 30166  {167    match: { [E]: topEdge(CF, E), [SLOT_D]: SLOT_D_D_AS_R },168    moves: "(R U R' U') (R U R')"169  },170  // 31171  {172    match: { [SLOT_M]: SLOT_M_REVERSED, [SE]: SE_D_AS_U },173    moves: "(R U' R' U) (F' U F)"174  },175  // 32176  {177    match: { [SLOT_M]: SLOT_M_SOLVED, [SE]: SE_D_AS_U },178    moves: "(R U R' U') (R U R' U') (R U R')"179  },180  // 33181  {182    match: { [SLOT_M]: SLOT_M_SOLVED, [SE]: SE_D_AS_F },183    moves: "U' (R U' R') U U (R U' R')"184  },185  // 34186  {187    match: { [SLOT_M]: SLOT_M_SOLVED, [SE]: SE_D_AS_R },188    moves: "U (F' U F) U U (F' U F)"189  },190  // 35191  {192    match: { [SLOT_M]: SLOT_M_REVERSED, [SE]: SE_D_AS_F },193    moves: "U U (R U' R') U' (F' U' F)"194  },195  // 36196  {197    match: { [SLOT_M]: SLOT_M_REVERSED, [SE]: SE_D_AS_R },198    moves: "U F' U' F U' (R U R')"199  },200  // 37 Solved201  // 38202  {203    match: { [SLOT_M]: SLOT_M_REVERSED, [SLOT_D]: SLOT_D_SOLVED },204    moves: "(R' F R F') (R U' R' U) (R U' R' U U) (R U' R')"205  },206  // 39207  {208    match: { [SLOT_M]: SLOT_M_SOLVED, [SLOT_D]: SLOT_D_D_AS_F },209    moves: "(R U' R') U' (R U R') U U (R U' R')"210  },211  // 40212  {213    match: { [SLOT_M]: SLOT_M_SOLVED, [SLOT_D]: SLOT_D_D_AS_R },214    moves: "(R U' R' U) (R U U R') U (R U' R')"215  },216  // 41217  {218    match: { [SLOT_M]: SLOT_M_REVERSED, [SLOT_D]: SLOT_D_D_AS_F },219    moves: "R F (U R U' R' F') U' R'"220  },221  // 42222  {223    match: { [SLOT_M]: SLOT_M_REVERSED, [SLOT_D]: SLOT_D_D_AS_R },224    moves: "(R U R' U') (R U' R') U U (F' U' F)"225  }226].map(rule => ({227  match: rule.match,228  moves: rule.moves.replace(/(\(|\))/g, '').split(' ')229}))230// https://www.speedsolving.com/wiki/index.php/OLL231export const OLL = [232  {233    id: 1,234    match: {235      [NW]: L, [N]: B, [NE]: R, [E]: R, [SE]: R, [S]: F, [SW]: L, [W]: L236    },237    moves: "R U B' R B R R U' R' F R F'"238  },239  {240    id: 2,241    match: {242      [NW]: L, [N]: B, [NE]: B, [E]: R, [SE]: F, [S]: F, [SW]: L, [W]: L243    },244    moves: "U U F R' F' R U R R B' R' B U' R'"245  },246  {247    id: 3,248    match: { [NW]: B, [N]: B, [E]: R, [SE]: F, [S]: F, [SW]: L, [W]: L },249    moves: "L (U F U' F') L' U' R (B U B' U') R'"250  },251  {252    id: 4,253    match: { [NW]: L, [N]: B, [E]: R, [SE]: R, [S]: F, [SW]: F, [W]: L },254    moves: "B (U L U' L') B' U F (R U R' U') F'"255  },256  {257    id: 5,258    match: { [NW]: B, [N]: B, [NE]: R, [SW]: L, [W]: L },259    moves: "L' B B R B R' B L"260  },261  {262    id: 6,263    match: { [NW]: L, [N]: B, [NE]: B, [E]: R, [SE]: R },264    moves: "R B B L' B' L B' R'"265  },266  {267    id: 7,268    match: { [NW]: B, [NE]: R, [E]: R, [SE]: F, [S]: F },269    moves: "F R' F' R U U R U U R'"270  },271  {272    id: 8,273    match: { [NW]: L, [NE]: B, [S]: F, [SW]: F, [W]: L },274    moves: "R U U R' U U R' F R F'"275  },276  {277    id: 9,278    match: { [NW]: L, [NE]: B, [SE]: R, [S]: F, [W]: L },279    moves: "R' U' R U' R' U R' F R F' U R"280  },281  {282    id: 10,283    match: { [NW]: B, [NE]: R, [E]: R, [S]: F, [SW]: L },284    moves: "(F U F' U) (F' L F L') F U U F'"285  },286  {287    id: 11,288    match: { [N]: B, [NE]: R, [E]: R, [SE]: F, [SW]: L },289    moves: "R U' R' U' R U' R' U U F' U F U' R U R'"290  },291  {292    id: 12,293    match: { [NW]: L, [N]: B, [SE]: R, [SW]: F, [W]: L },294    moves: "F (R U R' U') F' U F (R U R' U') F'"295  },296  {297    id: 13,298    match: { [NW]: B, [N]: B, [NE]: R, [SE]: F, [S]: F },299    moves: "F U R U' R R F' R U R U' R'"300  },301  {302    id: 14,303    match: { [NW]: L, [N]: B, [NE]: B, [S]: F, [SW]: F },304    moves: "F' U' L' U U L U L' U' L F"305  },306  {307    id: 15,308    match: { [NW]: B, [N]: B, [NE]: R, [S]: F, [SW]: L },309    moves: "L' B' L R' U' R U L' B L"310  },311  {312    id: 16,313    match: { [NW]: L, [N]: B, [NE]: B, [SE]: R, [S]: F },314    moves: "R B R' (L U L' U') R B' R'"315  },316  {317    id: 17,318    match: { [N]: B, [NE]: B, [E]: R, [S]: F, [SW]: L, [W]: L },319    moves: "R U R' U (R' F R F') U U (R' F R F')"320  },321  {322    id: 18,323    match: { [NW]: L, [N]: B, [E]: R, [S]: F, [SW]: L, [W]: L },324    moves: "(L' B L B') U U (L' B L B') (U B' U B)"325  },326  {327    id: 19,328    match: { [N]: B, [E]: R, [SE]: R, [S]: F, [SW]: L, [W]: L },329    moves: "R' U U F R U R' U' F F U U F R"330  },331  {332    id: 20,333    match: { [N]: B, [E]: R, [S]: F, [W]: L },334    moves: "R B U B' R' F F B D' L' D B' F F"335  },336  {337    id: 21,338    match: { [NW]: L, [NE]: R, [SE]: R, [SW]: L },339    moves: "R U R' U R U' R' U R U U R'"340  },341  {342    id: 22,343    match: { [NW]: L, [NE]: B, [SE]: F, [SW]: L },344    moves: "R U U R' R' U' R R U' R' R' U U R"345  },346  {347    id: 23,348    match: { [NW]: B, [NE]: B },349    moves: "R' U U R F U' R' U' R U F'"350  },351  {352    id: 24,353    match: { [NW]: B, [SW]: F },354    moves: "L F R' F' L' F R F'"355  },356  {357    id: 25,358    match: { [NE]: B, [SW]: L },359    moves: "R' F' L' F R F' L F"360  },361  {362    id: 26,363    match: { [NW]: L, [NE]: B, [SW]: F },364    moves: "L' U' L U' L' U U L"365  },366  {367    id: 27,368    match: { [NW]: B, [NE]: R, [SE]: F },369    moves: "R U R' U R U U R'"370  },371  {372    id: 28,373    match: { [E]: R, [S]: F },374    moves: "F R U R' U' F F L' U' L U F"375  },376  {377    id: 29,378    match: { [N]: B, [E]: R, [SE]: R, [SW]: L },379    moves: "L' L' U' L B L' U L' L' U' L' B' L"380  },381  {382    id: 30,383    match: { [N]: B, [SE]: R, [SW]: L, [W]: L },384    moves: "R' R' U R' B' R U' R' R' U R B R'"385  },386  {387    id: 31,388    match: { [N]: B, [NE]: B, [E]: R, [SE]: F },389    moves: "L' U' B U L U' L' B' L"390  },391  {392    id: 32,393    match: { [NW]: B, [N]: B, [SW]: F, [W]: L },394    moves: "R U B' U' R' U R B R'"395  },396  {397    id: 33,398    match: { [NW]: B, [N]: B, [S]: F, [SW]: F },399    moves: "(R U R' U') (R' F R F')"400  },401  {402    id: 34,403    match: { [NW]: L, [N]: B, [NE]: R, [S]: F },404    moves: "(R U R' U') B' (R' F R F') B"405  },406  {407    id: 35,408    match: { [N]: B, [NE]: R, [SW]: F, [W]: L },409    moves: "R U U R' R' F R F' R U U R'"410  },411  {412    id: 36,413    match: { [N]: B, [NE]: R, [E]: R, [SW]: F },414    moves: "R' U' R U' R' U R U R B' R' B"415  },416  {417    id: 37,418    match: { [NW]: B, [N]: B, [E]: R, [SE]: R },419    moves: "R B' R' B U B U' B'"420  },421  {422    id: 38,423    match: { [NW]: L, [N]: B, [SE]: F, [W]: L },424    moves: "L U L' U L U' L' U' L' B L B'"425  },426  {427    id: 39,428    match: { [NW]: B, [N]: B, [SE]: R, [S]: F },429    moves: "L F' (L' U' L U) F U' L'"430  },431  {432    id: 40,433    match: { [N]: B, [NE]: B, [S]: F, [SW]: L },434    moves: "R' F (R U R' U') F' U R"435  },436  {437    id: 41,438    match: { [N]: B, [SE]: F, [SW]: F, [W]: L },439    moves: "B U L U' L' B' L' U U L U L' U L"440  },441  {442    id: 42,443    match: { [N]: B, [E]: R, [SE]: F, [SW]: F },444    moves: "R' U' R U F R U R' U' R' U R U' F'"445  },446  {447    id: 43,448    match: { [N]: B, [NE]: R, [E]: R, [SE]: R },449    moves: "B' U' R' U R B"450  },451  {452    id: 44,453    match: { [NW]: L, [N]: B, [SW]: L, [W]: L },454    moves: "B U L U' L' B'"455  },456  {457    id: 45,458    match: { [NW]: L, [N]: B, [S]: F, [SW]: L },459    moves: "F (R U R' U') F'"460  },461  {462    id: 46,463    match: { [NE]: R, [E]: R, [SE]: R, [W]: L },464    moves: "R' U' R' F R F' U R"465  },466  {467    id: 47,468    match: { [NW]: B, [NE]: R, [W]: L, [SW]: F, [S]: F, [SE]: R },469    moves: "F' (L' U' L U) (L' U' L U) F"470  },471  {472    id: 48,473    match: { [NW]: L, [NE]: B, [E]: R, [SE]: F, [S]: F, [SW]: L },474    moves: "F (R U R' U') (R U R' U') F'"475  },476  {477    id: 49,478    match: { [NW]: B, [N]: B, [NE]: R, [E]: R, [SE]: R, [SW]: F },479    moves: "R B' R R F R R B R R F' R"480  },481  {482    id: 50,483    match: { [NW]: L, [N]: B, [NE]: B, [SE]: F, [SW]: L, [W]: L },484    moves: "R B' R B R R U U F R' F' R"485  },486  {487    id: 51,488    match: { [NW]: B, [N]: B, [NE]: R, [SE]: R, [S]: F, [SW]: F },489    moves: "F U R U' R' U R U' R' F'"490  },491  {492    id: 52,493    match: { [NW]: B, [NE]: R, [E]: R, [SE]: R, [SW]: F, [W]: L },494    moves: "R' U' R U' R' U F' U F R"495  },496  {497    id: 53,498    match: { [NW]: L, [SW]: L, [S]: F, [SE]: R, [E]: R, [NE]: R },499    moves: "F R U R' U' F' R U R' U' R' F R F'"500  },501  {502    id: 54,503    match: { [NW]: L, [NE]: R, [SE]: R, [S]: F, [SW]: L, [W]: L },504    moves: "U U F R' F' R U U F F L F L' F"505  },506  {507    id: 55,508    match: { [NW]: L, [NE]: R, [E]: R, [SE]: R, [SW]: L, [W]: L },509    moves: "R U U R R U' R U' R' U U F R F'"510  },511  {512    id: 56,513    match: { [NW]: L, [N]: B, [NE]: R, [SE]: R, [S]: F, [SW]: L },514    moves: "L F L' U R U' R' U R U' R' L F' L'"515  },516  {517    id: 57,518    match: { [N]: B, [S]: F },519    moves: "R U R' U' L R' F R F' L'"520  }521].map(rule => ({522  id: rule.id,523  match: rule.match,524  moves: rule.moves.replace(/(\(|\))/g, '').split(' ')525}))526// https://www.speedsolving.com/wiki/index.php/PLL527export const PLL = [528  {529    name: 'H',530    match: { [N]: S, [S]: [N], [W]: E, [E]: W },531    moves: "L R U U L' R' F' B' U U F B"532  },533  {534    name: 'U-a',535    match: { [N]: W, [W]: [E], [E]: N },536    moves: "R R U' R' U' R U R U R U' R"537  },538  {539    name: 'U-b',540    match: { [N]: E, [E]: W, [W]: N },541    moves: "R' U R' U' R' U' R' U R U R R"542  },543  {544    name: 'Z',545    match: { [W]: N, [N]: W, [S]: E, [E]: S },546    moves: "U R' U' R U' R U R U' R' U R U R R U' R' U"547  },548  {549    name: 'A-a',550    match: { [NW]: NE, [NE]: SE, [SE]: NW },551    moves: "R' F R' B B R F' R' B B R R"552  },553  {554    name: 'A-b',555    match: { [NE]: SW, [SW]: SE, [SE]: NE },556    moves: "R B' R F F R' B R F F R R"557  },558  {559    name: 'E',560    match: { [NW]: NE, [NE]: NW, [SW]: SE, [SE]: SW },561    moves: "D R' D D F' D L D' F D D R D' F' L' F"562  },563  {564    name: 'F',565    match: { [NW]: NE, [NE]: NW, [W]: E, [E]: W },566    moves: "(R' U R U') R R (F' U' F U) (R F R' F') R R U'"567  },568  {569    name: 'G-a',570    match: { [NW]: SE, [SE]: SW, [SW]: NW, [W]: S, [S]: N, [N]: W },571    moves: "(R U R' U' R') U F (R U R U' R') F' U R' U U R"572  },573  {574    name: 'G-b',575    match: { [NW]: SW, [SW]: SE, [SE]: NW, [W]: N, [N]: S, [S]: W },576    moves: "R' U' R B B D (L' U L U' L) D' B B"577  },578  {579    name: 'G-c',580    match: { [NE]: SW, [SW]: SE, [SE]: NE, [N]: E, [E]: S, [S]: N },581    moves: "L' U' L U L U' F' L' U' L' U L F U' L U U L'"582  },583  {584    name: 'G-d',585    match: { [NE]: SE, [SE]: SW, [SW]: NE, [N]: S, [S]: E, [E]: N },586    moves: "L U L' B B D' (R U' R' U R') D B B"587  },588  {589    name: 'J-a',590    match: { [NW]: SW, [SW]: NW, [W]: S, [S]: W },591    moves: "(B' U F') U U (B U' B') U U (F B U')"592  },593  {594    name: 'J-b',595    match: { [NE]: SE, [SE]: NE, [E]: S, [S]: E },596    moves: "(B U' F) U U (B' U B) U U (F' B' U)"597  },598  {599    name: 'N-a',600    match: { [W]: E, [E]: W, [SW]: NE, [NE]: SW },601    moves: "(R U' L U U R' U L') (R U' L U U R' U L')"602  },603  {604    name: 'N-b',605    match: { [W]: E, [E]: W, [NW]: SE, [SE]: NW },606    moves: "(L' U R' U' U' L U' R) (L' U R' U' U' L U' R)"607  },608  {609    name: 'R-a',610    match: { [N]: E, [E]: N, [SW]: SE, [SE]: SW },611    moves: "R U U R' U U R B' R' U' R U R B R R"612  },613  {614    name: 'R-b',615    match: { [NW]: NE, [NE]: NW, [S]: E, [E]: S },616    moves: "R' U U R U U R' F R U R' U' R' F' R R"617  },618  {619    name: 'T',620    match: { [W]: E, [E]: W, [NE]: SE, [SE]: NE },621    moves: "R U R' U' R' F R R U' R' U' R U R' F'"622  },623  {624    name: 'V',625    match: { [NW]: SE, [SE]: NW, [N]: E, [E]: N },626    moves: "R' U R' U' B' R' B B U' B' U B' R B R"627  },628  {629    name: 'Y',630    match: { [NW]: SE, [SE]: NW, [W]: N, [N]: W },631    moves: "F R U' R' U' R U R' F' R U R' U' R' F R F'"632  }633].map(rule => ({634  name: rule.name,635  match: rule.match,636  moves: rule.moves.replace(/(\(|\))/g, '').split(' ')...regexp-zero-length-alternatives.js
Source:regexp-zero-length-alternatives.js  
...10var s6 = "xabx";11var s7 = "g0";12// Non-capturing empty first alternative greedy '*'13var re1 = new RegExp(/(?:|a|z)*/);14shouldBe('emptyStr.match(re1)', '[""]');15shouldBe('s1.match(re1)', '[""]');16shouldBe('s2.match(re1)', '["aaaa"]');17shouldBe('s3.match(re1)', '["aa"]');18// Non-capturing empty middle alternative greedy '*'19var re2 = new RegExp(/(?:a||z)*/);20shouldBe('emptyStr.match(re2)', '[""]');21shouldBe('s1.match(re2)', '[""]');22shouldBe('s2.match(re2)', '["aaaa"]');23shouldBe('s3.match(re2)', '["aa"]');24// Non-capturing empty last alternative greedy '*'25var re3 = new RegExp(/(?:a|z|)*/);26shouldBe('emptyStr.match(re3)', '[""]');27shouldBe('s1.match(re3)', '[""]');28shouldBe('s2.match(re3)', '["aaaa"]');29shouldBe('s3.match(re3)', '["aa"]');30// Capturing empty first alternative greedy '*'31var re4 = new RegExp(/(|a|z)*/);32shouldBe('emptyStr.match(re4)', '["", undefined]');33shouldBe('s1.match(re4)', '["", undefined]');34shouldBe('s2.match(re4)', '["aaaa", "a"]');35shouldBe('s3.match(re4)', '["aa", "a"]');36// Capturing empty middle alternative greedy '*'37var re5 = new RegExp(/(a||z)*/);38shouldBe('emptyStr.match(re5)', '["", undefined]');39shouldBe('s1.match(re5)', '["", undefined]');40shouldBe('s2.match(re5)', '["aaaa", "a"]');41shouldBe('s3.match(re5)', '["aa", "a"]');42// Capturing empty last alternative greedy '*'43var re6 = new RegExp(/(a|z|)*/);44shouldBe('emptyStr.match(re6)', '["", undefined]');45shouldBe('s1.match(re6)', '["", undefined]');46shouldBe('s2.match(re6)', '["aaaa", "a"]');47shouldBe('s3.match(re6)', '["aa", "a"]');48// Non-capturing empty first alternative fixed-count49var re7 = new RegExp(/(?:|a|z){2,5}/);50shouldBe('emptyStr.match(re7)', '[""]');51shouldBe('s1.match(re7)', '[""]');52shouldBe('s2.match(re7)', '["aaa"]');53shouldBe('s3.match(re7)', '["aa"]');54// Non-capturing empty middle alternative fixed-count55var re8 = new RegExp(/(?:a||z){2,5}/);56shouldBe('emptyStr.match(re8)', '[""]');57shouldBe('s1.match(re8)', '[""]');58shouldBe('s2.match(re8)', '["aaaa"]');59shouldBe('s3.match(re8)', '["aa"]');60// Non-capturing empty last alternative fixed-count61var re9 = new RegExp(/(?:a|z|){2,5}/);62shouldBe('emptyStr.match(re9)', '[""]');63shouldBe('s1.match(re9)', '[""]');64shouldBe('s2.match(re9)', '["aaaa"]');65shouldBe('s3.match(re9)', '["aa"]');66// Non-capturing empty first alternative non-greedy '*'67var re10 = new RegExp(/(?:|a|z)*?/);68shouldBe('emptyStr.match(re10)', '[""]');69shouldBe('s1.match(re10)', '[""]');70shouldBe('s2.match(re10)', '[""]');71shouldBe('s3.match(re10)', '[""]');72// Non-capturing empty middle alternative non-greedy '*'73var re11 = new RegExp(/(?:a||z)*?/);74shouldBe('emptyStr.match(re11)', '[""]');75shouldBe('s1.match(re11)', '[""]');76shouldBe('s2.match(re11)', '[""]');77shouldBe('s3.match(re11)', '[""]');78// Non-capturing empty last alternative non-greedy '*'79var re12 = new RegExp(/(?:a|z|)*?/);80shouldBe('emptyStr.match(re12)', '[""]');81shouldBe('s1.match(re12)', '[""]');82shouldBe('s2.match(re12)', '[""]');83shouldBe('s3.match(re12)', '[""]');84// Capturing empty first alternative non-greedy '*'85var re13 = new RegExp(/(|a|z)*?/);86shouldBe('emptyStr.match(re13)', '["", undefined]');87shouldBe('s1.match(re13)', '["", undefined]');88shouldBe('s2.match(re13)', '["", undefined]');89shouldBe('s3.match(re13)', '["", undefined]');90// Capturing empty middle alternative non-greedy '*'91var re14 = new RegExp(/(a||z)*?/);92shouldBe('emptyStr.match(re14)', '["", undefined]');93shouldBe('s1.match(re14)', '["", undefined]');94shouldBe('s2.match(re14)', '["", undefined]');95shouldBe('s3.match(re14)', '["", undefined]');96// Capturing empty last alternative non-greedy '*'97var re15 = new RegExp(/(a|z|)*?/);98shouldBe('emptyStr.match(re15)', '["", undefined]');99shouldBe('s1.match(re15)', '["", undefined]');100shouldBe('s2.match(re15)', '["", undefined]');101shouldBe('s3.match(re15)', '["", undefined]');102// Non-capturing empty first alternative greedy '?'103var re16 = new RegExp(/(?:|a|z)?/);104shouldBe('emptyStr.match(re16)', '[""]');105shouldBe('s1.match(re16)', '[""]');106shouldBe('s2.match(re16)', '["a"]');107shouldBe('s3.match(re16)', '["a"]');108// Non-capturing empty middle alternative greedy '?'109var re17 = new RegExp(/(?:a||z)?/);110shouldBe('emptyStr.match(re17)', '[""]');111shouldBe('s1.match(re17)', '[""]');112shouldBe('s2.match(re17)', '["a"]');113shouldBe('s3.match(re17)', '["a"]');114// Non-capturing empty last alternative greedy '?'115var re18 = new RegExp(/(?:a|z|)?/);116shouldBe('emptyStr.match(re18)', '[""]');117shouldBe('s1.match(re18)', '[""]');118shouldBe('s2.match(re18)', '["a"]');119shouldBe('s3.match(re18)', '["a"]');120// Capturing empty first alternative greedy '?'121var re19 = new RegExp(/(|a|z)?/);122shouldBe('emptyStr.match(re19)', '["", undefined]');123shouldBe('s1.match(re19)', '["", undefined]');124shouldBe('s2.match(re19)', '["a", "a"]');125shouldBe('s3.match(re19)', '["a", "a"]');126// Capturing empty middle alternative greedy '?'127var re20 = new RegExp(/(a||z)?/);128shouldBe('emptyStr.match(re20)', '["", undefined]');129shouldBe('s1.match(re20)', '["", undefined]');130shouldBe('s2.match(re20)', '["a", "a"]');131shouldBe('s3.match(re20)', '["a", "a"]');132// Capturing empty last alternative greedy '?'133var re21 = new RegExp(/(a|z|)?/);134shouldBe('emptyStr.match(re21)', '["", undefined]');135shouldBe('s1.match(re21)', '["", undefined]');136shouldBe('s2.match(re21)', '["a", "a"]');137shouldBe('s3.match(re21)', '["a", "a"]');138// Non-capturing empty first alternative non-greedy '?'139var re22 = new RegExp(/(?:|a|z)??/);140shouldBe('emptyStr.match(re22)', '[""]');141shouldBe('s1.match(re22)', '[""]');142shouldBe('s2.match(re22)', '[""]');143shouldBe('s3.match(re22)', '[""]');144// Non-capturing empty middle alternative non-greedy '?'145var re23 = new RegExp(/(?:a||z)??/);146shouldBe('emptyStr.match(re23)', '[""]');147shouldBe('s1.match(re23)', '[""]');148shouldBe('s2.match(re23)', '[""]');149shouldBe('s3.match(re23)', '[""]');150// Non-capturing empty last alternative non-greedy '?'151var re24 = new RegExp(/(?:a|z|)??/);152shouldBe('emptyStr.match(re24)', '[""]');153shouldBe('s1.match(re24)', '[""]');154shouldBe('s2.match(re24)', '[""]');155shouldBe('s3.match(re24)', '[""]');156// Capturing empty first alternative non-greedy '?'157var re25 = new RegExp(/(|a|z)??/);158shouldBe('emptyStr.match(re25)', '["", undefined]');159shouldBe('s1.match(re25)', '["", undefined]');160shouldBe('s2.match(re25)', '["", undefined]');161shouldBe('s3.match(re25)', '["", undefined]');162// Capturing empty middle alternative non-greedy '?'163var re26 = new RegExp(/(a||z)??/);164shouldBe('emptyStr.match(re26)', '["", undefined]');165shouldBe('s1.match(re26)', '["", undefined]');166shouldBe('s2.match(re26)', '["", undefined]');167shouldBe('s3.match(re26)', '["", undefined]');168// Capturing empty last alternative non-greedy '?'169var re27 = new RegExp(/(a|z|)??/);170shouldBe('emptyStr.match(re27)', '["", undefined]');171shouldBe('s1.match(re27)', '["", undefined]');172shouldBe('s2.match(re27)', '["", undefined]');173shouldBe('s3.match(re27)', '["", undefined]');174// Non-capturing empty first alternative greedy '*' non-terminal175var re28 = new RegExp(/(?:|a|z)*x/);176shouldBe('emptyStr.match(re28)', 'null');177shouldBe('s1.match(re28)', '["x"]');178shouldBe('s2.match(re28)', 'null');179shouldBe('s3.match(re28)', '["aax"]');180// Non-capturing empty middle alternative greedy '*' non-terminal181var re29 = new RegExp(/(?:a||z)*x/);182shouldBe('emptyStr.match(re29)', 'null');183shouldBe('s1.match(re29)', '["x"]');184shouldBe('s2.match(re29)', 'null');185shouldBe('s3.match(re29)', '["aax"]');186// Non-capturing empty last alternative greedy '*' non-terminal187var re30 = new RegExp(/(?:a|z|)*x/);188shouldBe('emptyStr.match(re30)', 'null');189shouldBe('s1.match(re30)', '["x"]');190shouldBe('s2.match(re30)', 'null');191shouldBe('s3.match(re30)', '["aax"]');192// Non-capturing two possibly empty alternatives greedy '*'193var re31 = new RegExp(/(?:a*|b*)*/);194shouldBe('emptyStr.match(re31)', '[""]');195shouldBe('s1.match(re31)', '[""]');196shouldBe('s3.match(re31)', '["aa"]');197shouldBe('s4.match(re31)', '["abab"]');198// Non-capturing two possibly empty non-greedy alternatives non-greedy '*'199var re32 = new RegExp(/(?:a*?|b*?)*/);200shouldBe('emptyStr.match(re32)', '[""]');201shouldBe('s1.match(re32)', '[""]');202shouldBe('s2.match(re32)', '["aaaa"]');203shouldBe('s4.match(re32)', '["abab"]');204shouldBe('s5.match(re32)', '["ab"]');205shouldBe('s6.match(re32)', '[""]');206// Three possibly empty alternatives with greedy +207var re33 = new RegExp(/(?:(?:(?!))|g?|0*\*?)+/);208shouldBe('emptyStr.match(re33)', '[""]');209shouldBe('s1.match(re33)', '[""]');210shouldBe('s7.match(re33)', '["g0"]');211// first alternative zero length fixed count212var re34 = new RegExp(/(?:|a)/);213shouldBe('emptyStr.match(re34)', '[""]');214shouldBe('s1.match(re34)', '[""]');215shouldBe('s2.match(re34)', '[""]');...replace.js
Source:replace.js  
1module.exports = function(grunt) {2  return {3    /***********4     * PRIVATE METHODS5     * Ignore _init method, which is a subset of other method names, and is used in different ways6     * Note: can't do public methods, as they need to be called as is7     ***********/8    one: {9      options: {10        patterns: [11          // Note: _a is now reserved for step two12          {13            match: /_processCountryData/g,14            replacement: '_b'15          }, {16            match: /_addCountryCode/g,17            replacement: '_c'18          }, {19            match: /_processAllCountries/g,20            replacement: '_d'21          }, {22            match: /_translateCountriesByLocale/g,23            replacement: '_d0'24          }, {25            match: /_countryNameSort/g,26            replacement: '_d1'27          }, {28            match: /_processCountryCodes/g,29            replacement: '_d2'30          }, {31            match: /_processPreferredCountries/g,32            replacement: '_e'33          }, {34            match: /_createEl/g,35            replacement: '_e2'36          }, {37            match: /_generateMarkup/g,38            replacement: '_f'39          }, {40            match: /_appendListItems/g,41            replacement: '_g'42          }, {43            match: /_setInitialState/g,44            replacement: '_h'45          }, {46            match: /_initListeners/g,47            replacement: '_i'48          }, {49            match: /_initHiddenInputListener/g,50            replacement: '_i0'51          }, {52            match: /_getClosestLabel/g,53            replacement: '_i1'54          }, {55            match: /_initDropdownListeners/g,56            replacement: '_i2'57          }, {58            match: /_initRequests/g,59            replacement: '_i3'60          }, {61            match: /_loadAutoCountry/g,62            replacement: '_i4'63          }, {64            match: /_initKeyListeners/g,65            replacement: '_j'66          }, {67            match: /_cap/g,68            replacement: '_j2'69          }, {70            match: /_initBlurListeners/g,71            replacement: '_l'72          }, {73            match: /_removeEmptyDialCode/g,74            replacement: '_l2'75          }, {76            match: /_getNumeric/g,77            replacement: '_m'78          }, {79            match: /_trigger/g,80            replacement: '_m2'81          }, {82            match: /_showDropdown/g,83            replacement: '_n'84          }, {85            match: /_toggleClass/g,86            replacement: '_n2'87          }, {88            match: /_setDropdownPosition/g,89            replacement: '_o'90          }, {91            match: /_getClosestListItem/g,92            replacement: '_o2'93          }, {94            match: /_bindDropdownListeners/g,95            replacement: '_p'96          }, {97            match: /_handleUpDownKey/g,98            replacement: '_q'99          }, {100            match: /_handleEnterKey/g,101            replacement: '_r'102          }, {103            match: /_searchForCountry/g,104            replacement: '_s'105          }, {106            match: /_startsWith/g,107            replacement: '_t'108          }, {109            match: /_updateValFromNumber/g,110            replacement: '_u'111          }, {112            match: /_updateFlagFromNumber/g,113            replacement: '_v'114          }, {115            match: /_isRegionlessNanp/g,116            replacement: '_w'117          }, {118            match: /_highlightListItem/g,119            replacement: '_x'120          }, {121            match: /_getCountryData/g,122            replacement: '_y'123          }, {124            match: /_setFlag/g,125            replacement: '_z'126          }, {127            match: /_updatePlaceholder/g,128            replacement: '_0'129          }, {130            match: /_selectListItem/g,131            replacement: '_1'132          }, {133            match: /_closeDropdown/g,134            replacement: '_2'135          }, {136            match: /_scrollTo/g,137            replacement: '_3'138          }, {139            match: /_updateDialCode/g,140            replacement: '_4'141          }, {142            match: /_getDialCode/g,143            replacement: '_5'144          }, {145            match: /_getFullNumber/g,146            replacement: '_6'147          }, {148            match: /_beforeSetNumber/g,149            replacement: '_7'150          }, {151            match: /_triggerCountryChange/g,152            replacement: '_8'153          }154        ]155      },156      files: {157        'tmp/one.min.js': 'tmp/wrapped.min.js',158        'tmp/one-jquery.min.js': 'tmp/wrapped-jquery.min.js',159      }160    },161    /***********162     * INLINE PRIVATE METHODS163     ***********/164    two: {165      options: {166        patterns: [167          {168            match: /_handleMouseoverCountryList/g,169            replacement: '_a0'170          }, {171            match: /_handleClickCountryList/g,172            replacement: '_a1'173          }, {174            match: /_handleClickOffToClose/g,175            replacement: '_a2'176          }, {177            match: /_handleKeydownOnDropdown/g,178            replacement: '_a3'179          }, {180            match: /_handleWindowScroll/g,181            replacement: '_a4'182          }, {183            match: /_handleSubmitOrBlurEvent/g,184            replacement: '_a8'185          }, {186            match: /_handleLabelClick/g,187            replacement: '_a9'188          }, {189            match: /_handleClickSelectedFlag/g,190            replacement: '_a10'191          }, {192            match: /_handleFlagsContainerKeydown/g,193            replacement: '_a11'194          }, {195            match: /_handleKeyupEvent/g,196            replacement: '_a12'197          }, {198            match: /_handleClipboardEvent/g,199            replacement: '_a13'200          }, {201            match: /_handleHiddenInputSubmit/g,202            replacement: '_a14'203          }204        ]205      },206      files: {207        'tmp/two.min.js': 'tmp/one.min.js',208        'tmp/two-jquery.min.js': 'tmp/one-jquery.min.js',209      }210    },211    /***********212     * INSTANCE FIELDS213     * Note: avoid option names as that will break things!214     ***********/215    three: {216      options: {217        patterns: [218          {219            match: /\.telInput/g,220            replacement: '.a'221          }, {222            match: /\.activeItem/g,223            replacement: '.b'224          }, {225            match: /\.highlightedItem/g,226            replacement: '.c'227          }, {228            match: /\.options/g,229            replacement: '.d'230          }, {231            match: /\.hadInitialPlaceholder/g,232            replacement: '.e'233          }, {234            match: /\.isMobile/g,235            replacement: '.g'236          }, {237            match: /\.resolveAutoCountryPromise/g,238            replacement: '.h'239          }, {240            match: /\.rejectAutoCountryPromise/g,241            replacement: '.i'242          }, {243            match: /\.resolveUtilsScriptPromise/g,244            replacement: '.i0'245          }, {246            match: /\.rejectUtilsScriptPromise/g,247            replacement: '.i1'248          }, {249            match: /\.defaultCountry/g,250            replacement: '.j'251          }, {252            match: /\.flagsContainer/g,253            replacement: '.k'254          }, {255            match: /\.selectedFlagInner/g,256            replacement: '.l'257          }, {258            match: /\.countryList/g,259            replacement: '.m'260          }, {261            match: /\.countries/g,262            replacement: '.p'263          }, {264            match: /\.countryCodes/g,265            replacement: '.q'266          }, {267            match: /\.selectedCountryData/g,268            replacement: '.s'269          }, {270            match: /\.selectedDialCode/g,271            replacement: '.t'272          }, {273            match: /\.dropdownArrow/g,274            replacement: '.u'275          }276        ]277      },278      files: {279        'build/js/intlTelInput.min.js': 'tmp/two.min.js',280        'build/js/intlTelInput-jquery.min.js': 'tmp/two-jquery.min.js',281      }282    }283  };...emodal-utilities-strtotime.js
Source:emodal-utilities-strtotime.js  
...34	// dates with "." or "-" as MDY instead of DMY35	// dates with two-digit years differently36	// etc...etc...37	// ...therefore we manually parse lots of common date formats38	match = text.match(39		/^(\d{1,4})([\-\.\/\:])(\d{1,2})([\-\.\/\:])(\d{1,4})(?:\s(\d{1,2}):(\d{2})?:?(\d{2})?)?(?:\s([A-Z]+)?)?$/);40	if (match && match[2] === match[4]) {41		if (match[1] > 1901) {42			switch (match[2]) {43			case '-':44				{ // YYYY-M-D45					if (match[3] > 12 || match[5] > 31) {46						return fail;47					}48					return new Date(match[1], parseInt(match[3], 10) - 1, match[5],49						match[6] || 0, match[7] || 0, match[8] || 0, match[9] || 0) / 1000;50				}51			case '.':52				{ // YYYY.M.D is not parsed by strtotime()53					return fail;54				}55			case '/':56				{ // YYYY/M/D57					if (match[3] > 12 || match[5] > 31) {58						return fail;59					}60					return new Date(match[1], parseInt(match[3], 10) - 1, match[5],61						match[6] || 0, match[7] || 0, match[8] || 0, match[9] || 0) / 1000;62				}63			}64		} else if (match[5] > 1901) {65			switch (match[2]) {66			case '-':67				{ // D-M-YYYY68					if (match[3] > 12 || match[1] > 31) {69						return fail;70					}71					return new Date(match[5], parseInt(match[3], 10) - 1, match[1],72						match[6] || 0, match[7] || 0, match[8] || 0, match[9] || 0) / 1000;73				}74			case '.':75				{ // D.M.YYYY76					if (match[3] > 12 || match[1] > 31) {77						return fail;78					}79					return new Date(match[5], parseInt(match[3], 10) - 1, match[1],80						match[6] || 0, match[7] || 0, match[8] || 0, match[9] || 0) / 1000;81				}82			case '/':83				{ // M/D/YYYY84					if (match[1] > 12 || match[3] > 31) {85						return fail;86					}87					return new Date(match[5], parseInt(match[1], 10) - 1, match[3],88						match[6] || 0, match[7] || 0, match[8] || 0, match[9] || 0) / 1000;89				}90			}91		} else {92			switch (match[2]) {93			case '-':94				{ // YY-M-D95					if (match[3] > 12 || match[5] > 31 || (match[1] < 70 && match[1] > 38)) {96						return fail;97					}98					year = match[1] >= 0 && match[1] <= 38 ? +match[1] + 2000 : match[1];99					return new Date(year, parseInt(match[3], 10) - 1, match[5],100						match[6] || 0, match[7] || 0, match[8] || 0, match[9] || 0) / 1000;101				}102			case '.':103				{ // D.M.YY or H.MM.SS104					if (match[5] >= 70) { // D.M.YY105						if (match[3] > 12 || match[1] > 31) {106							return fail;107						}108						return new Date(match[5], parseInt(match[3], 10) - 1, match[1],109							match[6] || 0, match[7] || 0, match[8] || 0, match[9] || 0) / 1000;110					}111					if (match[5] < 60 && !match[6]) { // H.MM.SS112						if (match[1] > 23 || match[3] > 59) {113							return fail;114						}115						today = new Date();116						return new Date(today.getFullYear(), today.getMonth(), today.getDate(),117							match[1] || 0, match[3] || 0, match[5] || 0, match[9] || 0) / 1000;118					}119					return fail; // invalid format, cannot be parsed120				}121			case '/':122				{ // M/D/YY123					if (match[1] > 12 || match[3] > 31 || (match[5] < 70 && match[5] > 38)) {124						return fail;125					}126					year = match[5] >= 0 && match[5] <= 38 ? +match[5] + 2000 : match[5];127					return new Date(year, parseInt(match[1], 10) - 1, match[3],128						match[6] || 0, match[7] || 0, match[8] || 0, match[9] || 0) / 1000;129				}130			case ':':131				{ // HH:MM:SS132					if (match[1] > 23 || match[3] > 59 || match[5] > 59) {133						return fail;134					}135					today = new Date();136					return new Date(today.getFullYear(), today.getMonth(), today.getDate(),137						match[1] || 0, match[3] || 0, match[5] || 0) / 1000;138				}139			}140		}141	}142	// other formats and "now" should be parsed by Date.parse()143	if (text === 'now') {144		return now === null || isNaN(now) ? new Date()145			.getTime() / 1000 | 0 : now | 0;146	}147	if (!isNaN(parsed = Date.parse(text))) {148		return parsed / 1000 | 0;149	}150	date = now ? new Date(now * 1000) : new Date();151	days = {152		'sun': 0,153		'mon': 1,154		'tue': 2,155		'wed': 3,156		'thu': 4,157		'fri': 5,158		'sat': 6159	};160	ranges = {161		'yea': 'FullYear',162		'mon': 'Month',163		'day': 'Date',164		'hou': 'Hours',165		'min': 'Minutes',166		'sec': 'Seconds'167	};168169	function lastNext(type, range, modifier) {170		var diff, day = days[range];171		if (typeof day !== 'undefined') {172			diff = day - date.getDay();173			if (diff === 0) {174				diff = 7 * modifier;175			} else if (diff > 0 && type === 'last') {176				diff -= 7;177			} else if (diff < 0 && type === 'next') {178				diff += 7;179			}180			date.setDate(date.getDate() + diff);181		}182	}183184	function process(val) {185		var splt = val.split(' '), // Todo: Reconcile this with regex using \s, taking into account browser issues with split and regexes186			type = splt[0],187			range = splt[1].substring(0, 3),188			typeIsNumber = /\d+/.test(type),189			ago = splt[2] === 'ago',190			num = (type === 'last' ? -1 : 1) * (ago ? -1 : 1);191		if (typeIsNumber) {192			num *= parseInt(type, 10);193		}194		if (ranges.hasOwnProperty(range) && !splt[1].match(/^mon(day|\.)?$/i)) {195			return date['set' + ranges[range]](date['get' + ranges[range]]() + num);196		}197		if (range === 'wee') {198			return date.setDate(date.getDate() + (num * 7));199		}200		if (type === 'next' || type === 'last') {201			lastNext(type, range, num);202		} else if (!typeIsNumber) {203			return false;204		}205		return true;206	}207	times = '(years?|months?|weeks?|days?|hours?|minutes?|min|seconds?|sec' +208		'|sunday|sun\\.?|monday|mon\\.?|tuesday|tue\\.?|wednesday|wed\\.?' +209		'|thursday|thu\\.?|friday|fri\\.?|saturday|sat\\.?)';210	regex = '([+-]?\\d+\\s' + times + '|' + '(last|next)\\s' + times + ')(\\sago)?';211	match = text.match(new RegExp(regex, 'gi'));212	if (!match) {213		return fail;214	}215	for (i = 0, len = match.length; i < len; i++) {216		if (!process(match[i])) {217			return fail;218		}219	}220	// ECMAScript 5 only221	// if (!match.every(process))222	//    return false;223	return (date.getTime() / 1000);
...Using AI Code Generation
1var sinon = require('sinon');2var assert = sinon.assert;3var spy = sinon.spy();4spy(1, 2, 3);5assert.match(spy.getCall(0).args, [1, 2, 3]);6var sinon = require('sinon');7var assert = sinon.assert;8var spy = sinon.spy();9spy(1, 2, 3);10assert.match(spy.getCall(0).args, [1, 2, 3]);11var sinon = require('sinon');12var assert = sinon.assert;13var spy = sinon.spy();14spy(1, 2, 3);15assert.match(spy.getCall(0).args, [1, 2, 3]);16var sinon = require('sinon');17var assert = sinon.assert;18var spy = sinon.spy();19spy(1, 2, 3);20assert.match(spy.getCall(0).args, [1, 2, 3]);21var sinon = require('sinon');22var assert = sinon.assert;23var spy = sinon.spy();24spy(1, 2, 3);25assert.match(spy.getCall(0).args, [1, 2, 3]);26var sinon = require('sinon');27var assert = sinon.assert;28var spy = sinon.spy();29spy(1, 2, 3);30assert.match(spy.getCall(0).args, [1, 2, 3]);Using AI Code Generation
1var spy = sinon.spy();2spy(1, 2);3spy(3, 4);4spy(5, 6);5assert(spy.match(1, 2));6assert(spy.match(3, 4));7assert(spy.match(5, 6));8var stub = sinon.stub();9stub(1, 2);10stub(3, 4);11stub(5, 6);12assert(stub.match(1, 2));13assert(stub.match(3, 4));14assert(stub.match(5, 6));15var mock = sinon.mock();16mock.expects('method').once().withArgs(1, 2);17mock.expects('method').once().withArgs(3, 4);18mock.expects('method').once().withArgs(5, 6);19mock.verify();20mock.restore();21var server = sinon.fakeServer.create();22server.respondWith([200, {}, '']);23server.respond();24assert(server.match('GET', '/'));25assert(server.match('POST', '/'));26assert(server.match('DELETE', '/'));27var xhr = sinon.useFakeXMLHttpRequest();28xhr.onCreate = function (xhr) {29    xhr.respond(200, {}, '');30};31xhr.open('GET', '/');32xhr.send();33assert(xhr.match('GET', '/'));34xhr.restore();35var clock = sinon.useFakeTimers();36var callback = sinon.spy();37setTimeout(callback, 1000);38clock.tick(1000);39assert(callback.match(1));40clock.restore();41var server = sinon.fakeServer.create();42server.respondWith([200, {}, '']);43server.respond();44assert(server.match('GET', '/'));45assert(server.match('POST', '/'));46assert(server.match('DELETE', '/'));47var xhr = sinon.useFakeXMLHttpRequest();48xhr.onCreate = function (xhr) {49    xhr.respond(200, {}, '');50};51xhr.open('GET', '/');52xhr.send();53assert(xhr.match('GET', '/'));54xhr.restore();55var clock = sinon.useFakeTimers();56var callback = sinon.spy();57setTimeout(callback, 1000Using AI Code Generation
1var sinon = require('sinon');2var assert = require('assert');3var myObj = {4    myMethod: function() {5        return 1;6    }7};8var spy = sinon.spy(myObj, "myMethod");9myObj.myMethod();10assert(spy.calledOnce);11assert(spy.calledWith());12assert(spy.calledWithExactly());13var sinon = require('sinon');14var assert = require('assert');15var myObj = {16    myMethod: function() {17        return 1;18    }19};20var spy = sinon.spy(myObj, "myMethod");21myObj.myMethod();22assert(spy.calledOnce);23assert(spy.calledWith());24assert(spy.calledWithExactly());25var sinon = require('sinon');26var assert = require('assert');27var myObj = {28    myMethod: function() {29        return 1;30    }31};32var spy = sinon.spy(myObj, "myMethod");33myObj.myMethod();34assert(spy.calledOnce);35assert(spy.calledWith());36assert(spy.calledWithExactly());37var sinon = require('sinon');38var assert = require('assert');39var myObj = {40    myMethod: function() {41        return 1;42    }43};44var spy = sinon.spy(myObj, "myMethod");45myObj.myMethod();46assert(spy.calledOnce);47assert(spy.calledWith());48assert(spy.calledWithExactly());49var sinon = require('sinon');50var assert = require('assert');51var myObj = {52    myMethod: function() {53        return 1;54    }55};56var spy = sinon.spy(myObj, "myMethod");57myObj.myMethod();58assert(spy.calledOnce);59assert(spy.calledWith());60assert(spy.calledWithExactly());61var sinon = require('sinon');62var assert = require('assert');63var myObj = {64    myMethod: function() {65        return 1;66    }67};68var spy = sinon.spy(myObj, "myMethod");69myObj.myMethod();70assert(spy.calledOnce);71assert(spy.calledWith());72assert(spy.calledWithExactly());73var sinon = require('sinon');74var assert = require('assert');Using AI Code Generation
1const sinon = require('sinon');2const {expect} = require('chai');3const {add} = require('./add');4describe('add', () => {5  it('should add two numbers', () => {6    const spy = sinon.spy(add);7    spy(1,2);8    expect(spy.calledWithMatch(sinon.match.number, sinon.match.number)).to.be.true;9  });10});11exports.add = (a, b) => {12  return a + b;13};14const sinon = require('sinon');15const {expect} = require('chai');16const {add} = require('./add');17describe('add', () => {18  it('should add two numbers', () => {19    const spy = sinon.spy(add);20    spy(1,2);21    expect(spy.calledWithMatch(sinon.match.number, sinon.match.number)).to.be.true;22  });23});24exports.add = (a, b) => {25  return a + b;26};27const sinon = require('sinon');28const {expect} = require('chai');29const {add} = require('./add');30describe('add', () => {31  it('should add two numbers', () => {32    const spy = sinon.spy(add);33    spy(1,2);34    expect(spy.calledWithMatch(sinon.match.number, sinon.match.number)).to.be.true;35  });36});37exports.add = (a, b) => {38  return a + b;39};40const sinon = require('sinon');41const {expect} = require('chai');42const {add} = require('./add');43describe('add', () => {44  it('should add two numbers', () => {45    const spy = sinon.spy(add);46    spy(1,2);47    expect(spy.calledWithMatch(sinon.match.number, sinon.match.number)).to.be.true;48  });49});50exports.add = (a, b) => {51  return a + b;52};Using AI Code Generation
1var sinon = require('sinon');2var assert = require('assert');3var stub = sinon.stub();4stub(1, 2, 3);5assert(stub.calledWith(sinon.match(1), sinon.match(2), sinon.match(3)));6assert(stub.calledWith(sinon.match(1), sinon.match(2), sinon.match(4)) === false);7var stub = sinon.stub();8stub(1, 2, 3);9assert(stub.calledWith(sinon.match.defined, sinon.match.defined, sinon.match.defined));10var stub = sinon.stub();11stub(1, 2, 3);12assert(stub.calledWith(sinon.match.number, sinon.match.number, sinon.match.number));13var stub = sinon.stub();14stub('Hello', 'World');15assert(stub.calledWith(sinon.match.string, sinon.match.string));16var stub = sinon.stub();17stub({ name: 'John' }, { name: 'Doe' });18assert(stub.calledWith(sinon.match.object, sinon.match.object));19var stub = sinon.stub();20stub(function () {}, function () {});21assert(stub.calledWith(sinon.match.func, sinon.match.func));22var stub = sinon.stub();23stub('Hello', 'World');24assert(stub.calledWith(sinon.match.truthy, sinon.match.truthy));25var stub = sinon.stub();26stub(null, undefined);27assert(stub.calledWith(sinon.match.falsy, sinon.match.falsy));28var stub = sinon.stub();29var obj = { name: 'John' };30stub(obj, obj);31assert(stub.calledWith(sinon.match.same(obj), sinon.match.same(obj)));32var stub = sinon.stub();33stub(1, 2, 3);34assert(stub.calledWith(sinon.match.typeOf('number'), sinon.match.typeOf('number'), sinon.match.typeOf('number')));35var stub = sinon.stub();36stub(new Date(), new Date());37assert(stub.calledWith(sinon.match.instanceOf(Date), sinon.match.instanceOf(Date)));38var stub = sinon.stub();39stub({ nameLearn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
