yaap
Version:
685 lines (619 loc) • 119 kB
JavaScript
/* PanPG 0.0.11pre
* PEG → JavaScript parser generator, with its dependencies.
* built on Sun, 11 Sep 2011 01:31:17 GMT
* See http://boshi.inimino.org/3box/PanPG/about.html
* MIT Licensed
*/
;(function(exports){
function generateParser(peg,opts,_opts){var x
x=generateParserAlt(peg,opts,_opts)
if(!x[0])throw x[1]
return x[1]}
function generateParserAlt(peg,opts,_opts){var parse_result,named_res,i,l,patch,pr,nr
opts=opts||{}
if(peg instanceof Array){
opts.patches=peg.slice(1)
peg=peg[0]}
parse_result=parsePEG(peg)
if(!parse_result[0])return [0,new Error(showError(parse_result))]
named_res=v6_named_res(parse_result)
if(opts.patches)
for(i=0,l=opts.patches.length;i<l;i++){patch=opts.patches[i]
pr=parsePEG(patch)
if(!pr[0])return pr
nr=v6_named_res(pr)
named_res=apply_patch(named_res,nr)}
try{return [1,codegen_v6(opts,named_res,_opts)]}
catch(e){return [0,e]}
function apply_patch(nr1,nr2){var o={},i,l,name,rule,ret=[]
for(i=0,l=nr1.length;i<l;i++){
name=nr1[i][0]
ret[i]=nr1[i]
o[name]=i}
for(i=0,l=nr2.length;i<l;i++){
name=nr2[i][0]
// if it was already there, replace it
if(o.hasOwnProperty(name)) ret[o[name]]=nr2[i]
// otherwise add it at the end
else ret.push(nr2[i])}
return ret}}
function checkTrace(msgs){var i,l,m
,msg,S,pos,R,stack,posns,bufs,buf // regex captures
,calls=[],callstack=[],call,notes=[],prev_state,parser_is_resuming
for(i=0,l=msgs.length;i<l;i++){
if(m=/^(\w+)\s+S:(\S+) pos:(\d+) R:(\S+) stack:((?:,?\d+)*) posns:(\S*) bufs:(\S*) buf:(.*)/.exec(msgs[i])){
msg=m[1],S=m[2],pos=m[3],R=m[4],stack=m[5],posns=m[6],bufs=m[7],buf=m[8]
if(msg=='main'){
if(parser_is_resuming){
calls.push({resuming:true})}
else{
call={depth:callstack.length,expr:S,start:pos,main_stack:stack
,main_posns:posns,main_bufs:bufs}
calls.push(call)
callstack.push(call)}}
if(msg=='test'){
if(parser_is_resuming){
if(!equal_states(msgs[i],prev_state)){
calls.push({error:'parser resumed in a different state'
+msgs[i]+' '+prev_state})}}
prev_state=msgs[i]
if(!call){calls.push({error:'test without main'});continue}
call.test_posns=posns
call.test_bufs=bufs
parser_is_resuming=false}}
if(msg=='result'){
call=callstack.pop()
if(!call){/*calls.push({error:'empty stack'});*/continue}
call.result=R
call.end=pos
//if(S != call.expr) call.expr = 'XXX:' + call.expr + '!=' + S
call.result_stack=stack
call.result_posns=posns
call.result_bufs=bufs}
if(msg=='res_end'){
call=callstack[callstack.length-1]
if(!call){calls.push({error:'empty stack'});continue}
call.res_end_bufs=bufs}
if(m=/^ready/.exec(msgs[i])){
// after requesting a chunk a parser should resume in the same state
parser_is_resuming=true}}
return calls.map(show).join('\n')
function equal_states(a,b){
return a.replace(/ . R/,' R')
.replace(/dp:\S*/,'')
== b.replace(/dp:\S*/,'')}
function show(call){var indent
if(call.error)return 'ERROR: '+call.error
if(call.resuming)return '────────┤chunk├────────'
indent=Array(call.depth+1).join(' ').replace(/.../g,' ↓')
if(call.result==undefined)return indent + call.expr + ' [?]'
return indent
+ call.expr
+ ' '+call.start+'→'+call.end+''
+ ' '+(call.stack_before==call.stack_after?''
:'XXX:changed stack '+call.stack_before+'→'+call.stack_after)
+ (call.test_posns? // won't exist if it was cached
(call.test_posns==call.result_posns?'':' XXX: changed position stack')
:'')
+ (call.test_bufs?
(call.test_bufs==call.result_bufs?'':' XXX: changed bufs stack')
:'')
+ (call.result=='false'?' [x]':'')}}
function explain(grammar,opts,input,verbosity){var either_error_parser,parser,trace,streaming_parser,tree,e,result,fail,fail_msg,code
// generate a parser
opts=extend({},opts)
opts.fname='trace_test'
opts.trace=true
if(verbosity>2) opts.debug=true // if code will be shown, generate the big top comment
//opts.asserts=true
//if(verbosity>1) opts.show_trace=true
//if(verbosity>2) opts.show_code=true
either_error_parser=memoized(grammar)
if(!either_error_parser[0])return'Cannot generate parser: '+either_error_parser[1]
code='(function(){\n'+either_error_parser[1]+'\n;'
+'return '+opts.fname+'})()'
try{parser=eval(code)}
catch(e){return 'The parser did not eval() cleanly (shouldn\'t happen): '+e.toString()+'\n\n'+code}
// parse the input
trace=[],tree=[]
streaming_parser=parser(message_handler)
function message_handler(m,x,y,z){var spaces
spaces=' '.slice(m.length)
trace.push(m+spaces+x+(y?' '+y:''))
if(m=='tree segment')tree=tree.concat(x)
if(m=='fail')fail=[m,x,y,z]}
try{
streaming_parser('chunk',input)
streaming_parser('eof')}
catch(except){e=except}
if(fail){try{fail_msg=showError.apply(null,fail)}catch(e){}}
result=e?'The parser threw an exception:'+'\n\n'+(e.stack?e+'\n\n'+e.stack:e)
:fail?'Parse failed: '+fail_msg
:'Parser consumed the input.'
// explain the result
return [input
,'input length '+input.length
,'result: '+result
,'tree:\n'+showTree([true,{tree:tree,input:input,names:parser.names}])
,'trace analysis:\n'+checkTrace(trace)
,'legend:\n'+parser.legend
,verbosity>1?'trace:\n'+trace.join('\n'):''
,verbosity>2?'parser code:\n'+either_error_parser[1]:''
,verbosity>3?'raw tree:\n'+tree.join():''
].filter(function(x){return x!=''})
.join('\n\n')
// helpers
function memoized(grammar){var cache,cached
cache = explain.cache = explain.cache || {}
cached = cache[grammar]
if(!cached || !deepEq(cached[0],opts)) cached = cache[grammar] = [opts,generateParserAlt(grammar,opts)]
return cached[1]}
function extend(a,b){for(var p in b)a[p]=b[p];return a}
function deepEq(x,y){var p
if(x===y)return true
if(typeof x!='object' || typeof y!='object')return false
for(p in x)if(!deepEq(x[p],y[p]))return false
for(p in y)if(!(p in x))return false
return true}}
// (event array (can be partial), [name array], [input string], [state]) → [ascii-art tree, state]
// -or-
// (complete event array, [name array], [input string]) → ascii-art
// if the event array doesn't describe a complete, finished tree, or if the state value argument is provided, then the ascii-art and the state value will be returned as an array
// this is for examining partial tree fragments as they are generated by a streaming parser
function showTree(res,opts,state){var names,str,a,i,l,indent,name,x,y,out=[],output_positions=[],node,out_pos,state_was_passed
if(!res[0])return showError(res)
res=res[1]
names=res.names
a=res.tree
str=res.input
opts=opts||{}
opts.elide=opts.elide||['anonymous']
opts.drop=opts.drop||[]
state_was_passed=!!state
state=state||{stack:[],indent:'',pos:0,drop_depth:0}
for(i=0,l=a.length;i<l;i++){x=a[i]
if(x>0){
if(names){
name=names[x]
if(!name) return err('no such rule index in name array: '+x)}
else name=''+x
output_positions[state.stack.length]=out.length
node={index:x,name:name,start:state.pos}
if(opts.drop.indexOf(name)>-1)state.drop_depth++
out.push(show(state,node))
state.indent+=' '
state.stack.push(node)}
else if(x==-1){
i++
if(i==l){i--;return}
node={name:'anonymous',start:state.pos,end:state.pos+a[i]}
state.pos=node.end
out.push(show(state,node))
}
else if(x==-2){
i++
if(i==l)return err('incomplete close event, expected length at position '+i+' but found end of input array')
y=state.stack.pop()
state.pos=y.end=y.start+a[i]
out_pos=output_positions[state.stack.length]
state.indent=state.indent.slice(0,-1)
if(out_pos!=undefined){
out[out_pos]=show(state,y)}
if(opts.drop.indexOf(y.name)>-1)state.drop_depth--}
else return err('invalid event '+x+' at position '+i)}
if(state_was_passed || state.stack.length) return [out.join(''),state]
else return out.join('')
function err(s){return ['showTree: '+s]}
function show(state,node){var text='',main,indent,l
if(opts.elide.indexOf(node.name)>-1)return ''
if(state.drop_depth)return ''
if(node.end!=undefined && str){
text=show_str(str.slice(node.start,node.end))}
main=state.indent+node.name+' '+node.start+'-'+(node.end==undefined?'?':node.end)
l=main.length
indent=Array(32*Math.ceil((l+2)/32)-l).join(' ')
return main+indent+text+'\n'}
function show_str(s){
return '»'+s.replace(/\n/g,'\\n').replace(/\r/g,'\\r').replace(/(.{16}).{8,}/,"$1…")+'«'}}
// inspired by: http://gist.github.com/312863
function showError(res){var line_number,col,lines,line,start,end,prefix,suffix,arrow,pos,msg,str
pos=res[1];msg=res[2];str=res[3]
msg=msg||'Parse error'
if(str==undefined)return msg+' at position '+pos
prefix=str.slice(0,pos)
suffix=str.slice(pos)
line_number=prefix.split('\n').length
start=prefix.lastIndexOf('\n')+1
end=suffix.indexOf('\n')
if(end==-1) end=str.length
else end=prefix.length+end
line=str.slice(start,end)
line=line.replace(/\t/g,' ')
col=pos-start
arrow=Array(col).join('-')+'^'
return msg+' at line '+line_number+' column '+col+'\n'+line+'\n'+arrow}
function showResult(r,opts){
if(typeof r!='object' || !("0" in r)) throw new Error("showResult: argument is not a parser result object")
if(r[0])return showTree(r,opts)
return showError(r)}
function treeWalker(dict,result){var p,any,anon,other,fail,except,index,cb=[],stack=[],frame,pos=0,i,l,x,retval,names,events,begin=[],match,target,msg
fail=dict.fail
except=dict.exception
if(!result[0]){
msg='parse failed: '+result[1]+' '+(result[2]||'')
if(fail)return fail(result)||msg
return err(msg)}
result=result[1]
names=result.names
events=result.tree
for(p in dict) if(dict.hasOwnProperty(p)){
if(p=='any'){any=dict[p];throw new Error('unimplemented, use `other` instead')}
if(p=='anonymous'||p=='anon'){anon=dict[p];continue}
if(p=='other'){other=dict[p];continue}
if(p=='fail'){fail=dict[p];continue}
if(p=='exception'){except=dict[p];continue}
if(p=='warn'){continue}
target=cb
if(match=/(.*) start/.exec(p)){p=m[1];target=begin}
index=names.indexOf(p)
if(index==-1)return err('rule not found in rule names: '+p)
target[index]=dict[p]}
frame={cn:[]}
for(i=0,l=events.length;i<l;i++){x=events[i]
if(x>0){ // named rule start
stack.push(frame)
frame={index:x,start:pos}
if(begin[x]){
try{retval=begin[x](pos)}
// here we call err() but continue iff `except` returns true
catch(e){if(!err('exception in '+names[x]+' start:'+e))return}}
if(cb[x]||any||other) frame.cn=[]}
else if(x==-1){ // anonymous node
i++
if(i==l)return err('incomplete anonymous node')
if(anon)anon(m(pos,pos+events[i]))
pos+=events[i]}
else if(x==-2){ // node close
i++
if(i==l)return err('incomplete rule close')
pos=frame.start+events[i]
x=frame.index
match=m(frame.start,pos)
try{
if(cb[x]) retval=cb[x](match,frame.cn)
else if(other)retval=cb[x](match,frame.cn,names[x])}
catch(e){return err('exception in '+names[x]+': '+e+' (on node at char '+match.start+'-'+match.end+')')}
frame=stack.pop() // the parent node
if(cb[x] && retval!==undefined)
if(frame.cn)frame.cn.push(retval)
else warn('ignored return value of '+names[x]+' in '+names[frame.index])}
else return err('invalid event stream (saw '+x+' at position '+i+')')}
if(frame.cn)return frame.cn[0]
function m(s,e){
return {start:s
,end:e
,text:function(){return result.input.slice(s,e)}}}
function err(s){
if(except)return except(s)
throw new Error('treeWalker: '+s)}
function warn(s){
if(dict.warn)dict.warn(s)}}
/* parsePEG.js */
parsePEG.names=['','RuleSet','Comment','Rule','PropSpec','UPlusCodePoint','PositiveSpec','NegativeSpec','CodePoint','CodePointLit','CodePointFrom','CodePointTo','CodePointRange','UnicodePropSpec','CodePointExpr','CharSetUnion','HEXDIG','CharSetDifference','CharEscape','CharSetExpr','StrLit','CharSet','PosCharSet','NegCharSet','Epsilon','AtomicExpr','ParenthExpr','Replicand','N','M','Optional','MNRep','PosRep','AnyRep','SeqUnit','Sequence','IdentChar','IdentStartChar','OrdChoice','S','SpaceAtom','LB','NonTerminal','PosLookahead','NegLookahead','_']
function parsePEG(out){var eof=false,s='',l=0,S=184320,T,M,F,D,R,tbl=[],x,pos=0,offset=0,buf=[],bufs=[],states=[],posns=[],c,equiv,ds,dp,failed=0,emp=0,emps=[];
equiv=rle_dec([10,0,1,1,2,0,1,2,18,0,1,3,1,4,1,5,3,0,1,6,1,0,1,7,1,8,1,9,1,10,1,11,1,12,1,0,1,13,10,14,1,15,1,16,1,17,2,0,1,18,1,0,6,19,14,20,1,21,5,20,1,22,1,23,1,24,1,25,1,26,1,0,2,26,1,27,1,26,1,28,1,29,7,26,1,29,1,26,1,30,1,26,1,29,1,26,1,31,1,26,1,29,1,26,1,32,2,26,1,33,1,0,1,34,34,0,1,35,852,0,1,36,4746,0,1,35,397,0,1,35,2033,0,11,35,36,0,1,35,47,0,1,35,304,0,1,37,129,0,1,38,3565,0,1,35,43007,0,2048,39,8192,0])
function rle_dec(a){var r=[],i,l,n,x,ll;for(i=0,l=a.length;i<l;i+=2){n=a[i];x=a[i+1];r.length=ll=r.length+n;for(;n;n--)r[ll-n]=x}return r}
T=[,188416,266240,299008,949254,818182,965638,916486,765952,780806,892928,897024,880640,901120,749568,720896,,659456,1052672,643072,1028096,589824,991232,605190,,569344,1114112,557056,1171456,1163264,1187840,1126400,1204224,548864,512000,465926,,,356352,429062,442368,278528,335872,1196032,1179648,1212416,195590,196608,200704,171015,208896,11439,15535,224262,228358,229376,171015,237568,171015,245760,11439,15535,258048,171015,301,,274432,,285702,,,,,175279,162823,311296,,,,,162823,158895,154631,344064,150535,,,360448,162823,301,146607,376832,162823,301,392198,393216,,401408,162823,301,146607,417792,162823,301,430080,166919,438272,166919,446464,,454656,171015,,470022,471040,142511,479232,162823,301,494598,495616,142511,503808,162823,301,516096,138415,134319,130223,126127,109743,179375,183471,105647,113839,,561152,109743,105647,573440,101551,89263,175279,85167,593920,97455,93359,,,,618496,162823,301,630784,81071,301,,72879,651264,162823,301,64687,670726,671744,162823,679936,,,,,,,,,162823,64687,60591,732166,733184,737280,162823,301,60591,753664,56495,52399,36015,770048,23727,40111,785414,,,,,,,,,,,,831488,68615,68615,68615,68615,855046,856064,68615,864256,68615,301,301,,44207,,48303,36015,36015,905216,27823,31919,,,,,19631,,,,950272,,958464,,,,,19631,,,,,999424,162823,301,1011712,81071,301,,,,1036288,1040384,76975,,,1059846,1060864,,1069056,68615,68615,68615,68615,301,,,,,,,,158895,,113839,,122031,1145862,1146880,,117935,301,,1167360,,1175552,,,142511,113839,,,142511,113839,,7343,1220608,]
M=rle_dec([1,,47,299,1,204800,1,200704,1,217088,2,299,1,253952,1,224262,1,241664,1,233472,1,299,1,237568,4,299,1,258048,1,299,1,270336,1,299,1,274432,2,299,2,,1,299,1,303104,1,307200,1,327680,2,299,2,,1,331776,1,299,1,339968,1,299,1,344064,2,,1,368640,2,299,1,372736,1,385024,3,299,1,392198,1,397312,1,409600,2,299,1,413696,4,299,1,434176,1,299,1,438272,3,299,1,458752,2,299,1,487424,1,475136,4,299,1,494598,1,499712,12,299,1,552960,12,299,1,614400,2,,1,626688,2,299,1,638976,3,299,1,647168,3,299,1,663552,1,299,1,670726,1,675840,1,712704,2,299,6,,1,716800,1,299,1,724992,1,299,1,732166,1,745472,10,299,1,811008,1,300,6,,1,299,1,830470,2,,1,299,1,835584,1,839680,1,843776,1,847872,2,299,1,860160,4,299,1,,1,884736,1,888832,6,299,1,929792,3,,1,936966,1,299,2,,1,299,1,954368,1,299,1,958464,1,974848,2,,1,982022,1,299,2,,1,995328,1,1007616,2,299,1,1019904,3,299,1,,1,1032192,1,1048576,1,1036288,5,299,1,1068038,1,299,1,1073152,1,1077248,1,1081344,1,1085440,2,299,2,,1,299,2,,1,1118208,1,1122304,1,299,1,1130496,1,1134592,1,1138688,1,1159168,1,299,1,1150976,4,299,1,1167360,1,299,1,1175552,1,1183744,1,299,1,1191936,1,299,1,1200128,1,299,1,1208320,1,299,1,1216512,1,299,1,300])
F=rle_dec([1,,46,300,1,262144,1,300,1,299,1,300,1,212992,2,300,1,299,3,300,1,299,1,300,1,249856,2,300,1,299,3,300,1,299,1,300,1,294912,2,,4,300,1,318470,1,300,2,,4,300,1,299,2,,1,300,1,364544,3,300,1,380928,2,300,1,299,2,300,1,405504,3,300,1,421888,4,300,1,299,1,300,1,453638,7,300,1,483328,2,300,1,299,2,300,1,507904,2,300,1,520192,1,524288,1,528384,1,532480,1,536576,1,540672,1,544768,4,300,1,565248,2,300,1,577536,1,581632,1,585728,2,300,1,598016,2,300,2,,1,300,1,622592,2,300,1,634880,4,300,1,655360,3,300,1,299,2,300,1,687110,1,300,6,,4,300,1,299,1,300,1,741376,3,300,1,757760,1,761856,2,300,1,774144,2,300,1,299,6,,2,300,2,,6,300,1,872448,2,300,1,868352,2,300,1,,6,300,1,909312,2,300,3,,2,300,2,,3,300,1,299,1,300,2,,2,300,2,,2,300,1,1003520,2,300,1,1015808,2,300,1,,2,300,1,299,1,1044480,3,300,1,1092614,7,300,1,1104902,2,,1,300,2,,7,300,1,1155072,5,300,1,299,1,300,1,299,10,300,1,299])
D=function(a,i,l,b){for(i=0,l=a.length,b=[];i<l;i++)b[i]=a[i]&&revive(a[i]);return b}([,,,,,,,,,,,,,,,,[[[[14,19]]]],,,,,,,,[[[[36]]]],,,,,,,,,,,,[[[[14,19,20,21,26,27,28,29,30,31,32]]]],[[[[19,20,21]]]],,,,,,,,,,,,,,,,,,,,,,,,,,,,[[[[16]]]],,[[[[0,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38]]]],,[[[[2]]],[[[1]]]],,,[[[[1,2]]]],,,,[[[[37]]]],[[[[17]]],[[[12]]]],,,,,,,,,,,,,,,,,,,[[[[13]]]],,,,,,,,,,,,,[[[[3]]]],,,[[[[3]]]],,,,,,,,,,,,,,,,,,,,,,,[[[[9]]]],,,,,,,,,,,,[[[[22]]],[[[25]]]],,,,,,,,,[[[[24]]]],,,,,,,,,,[[[[38]]]],[[[[28]]],[[[32]]],[[[27]]],[[[28]]],[[[30]]],[[[31]]]],,,,,,,,,,,,,,,,,,,,,,,,[[[[28]]],[[[32]]],[[[27]]],[[[28]]],[[[30]]],[[[31]]]],,,,,,,[[[[0,1,2,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,25,26,27,28,29,30,31,32,33,34,36,37]]]],[[[[21]]],[[[10]]]],,,,,,,,,,,,,,,,,[[[[12]]]],,,,,,,[[[[22]]],[[[15]]],[[[25]]]],,,,,[[[[15]]],[[[24]]]],,,,[[[[3,12,19,20,21,26,27,28,29,30,31,32]]]],,[[[[3,12,19,20,21,26,27,28,29,30,31,32]]]],[[[[22]]],[[[15]]]],,,,[[[[15]]],[[[24]]]],,,[[[[22]]]],,,,,,,[[[[24]]]],,[[[[5]]]],,,,[[[[0,1,2,3,4,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38]]]],[[[[5]]]],,,[[[[23]]]],,,,,,,[[[[23]]],[[[29,31]]]],,,[[[[23]]],[[[5]]]],,,[[[[7]]]],,[[[[8]]]],,[[[[33]]]],,,,[[[[11]]]],,,[[[[34]]]],,[[[[14]]]],,[[[[14]]]],[[[[4]]]],,,[[[[18]]]],[[[[6]]]],,,[[[[10]]]],,,[[[[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38]]]]])
function revive(x){var i,l,state,j,l2,all=[],t,ts;if(!x)return;for(i=0,l=x.length;i<l;i++){state=x[i];ts=[];for(j=0,l2=state.length;j<l2;j++){t=state[j];if(t[1]==l) ts.push([t[0],true]);else ts.push([t[0],t[1]==undefined?i+1:t[1]])}all.push(ts)}return dfa(all)
function dfa(ss){var i,l_ss,st,l_s,t,l_t,a,d=[],j,k,l;for(i=0,l_ss=ss.length;i<l_ss;i++){st=ss[i];a=[];for(j=0,l_s=st.length;j<l_s;j++){t=st[j];for(k=0,l_t=t[0].length;k<l_t;k++){a[t[0][k]]=t[1]===true?l_ss:t[1]}}for(j=0,l=a.length;j<l;j++)if(a[j]==undefined)a[j]=l_ss+1;d[i]=a}
return function _dfa(st,i){var eq,pr;while(st<l_ss){eq=equiv[s.charCodeAt(i++)];st=d[pr=st][eq]}if(eq==undefined&&i>=s.length){ds=pr;dp=i-1;return}ds=0;dp=undefined;if(st==l_ss){pos=i;return true}return false}}}
if(typeof out=='string'){s=out;out=[];x=parsePEG(function(m,x,y){if(m=='fail')out=[false,x,y,s];if(m=='tree segment')out=out.concat(x)});x('chunk',s);x('eof');return out[0]===false?out:[true,{names:parsePEG.names,tree:out,input:s}]}
return function(m,x){if(failed){out('fail',pos,'parse already failed');return}
switch(m){
case 'chunk':s+=x;l=s.length;while(tbl.length<l+1)tbl.push([]);mainloop();break
case 'eof':eof=true;mainloop();break
default:throw new Error('unhandled message: '+m)}}
//mainloop
function mainloop(){for(;;){
if(dp==undefined&&(S>328||S<301))
t_block:{
if(S&4/*pushpos*/)posns.push(pos)
if(S&2/*t_bufferout*/){bufs.push(buf);buf=[]}
if(S&8/*t_emitstate*/){emps.push(emp);emp=pos;buf.push(S>>>12)}
if(S&1/*cache*/&&(x=tbl[pos-offset][S])!=undefined){if(x){R=true;pos=x[0];buf=x[1];if(emp<x[2])emp=x[2]}else{R=false}}
}
if(R==undefined){
if(D[S>>>12]){R=D[S>>>12](ds||0,dp||pos);if(R==undefined){if(eof){ds=dp=undefined;R=false}else{out('ready');return}}}
else{states.push(S);S=T[S>>>12]}
if(S==301){R=true;S=states.pop()}}
while(R!=undefined){
if(S==184320){(R?emit:fail)();return}if(R){
if(S&1/*cache*/){tbl[posns[posns.length-1]][S]=[pos,buf,emp];buf=buf.slice()}
if(S&8/*t_emitstate*/){if(pos!=emp&&emp!=posns[posns.length-1]){buf.push(-1,pos-emp)}emp=emps.pop();if(emp!=posns[posns.length-1]){buf=[-1,posns[posns.length-1]-emp].concat(buf)}}
if(S&16/*m_emitstate*/)buf.push(S>>>12)
if(S&32/*m_emitclose*/)buf.push(-2)
if(S&128/*m_emitlength*/)buf.push(pos-posns[posns.length-1])
if(S&8/*t_emitstate*/){emp=pos}
if(S&256/*m_resetpos*/)pos=posns[posns.length-1]
if(S&4/*pushpos*/)posns.pop()
if(S&512/*m_tossbuf*/)buf=bufs.pop()
if(S&1024/*m_emitbuf*/){buf=bufs.pop().concat(buf);}
if(!bufs.length&&buf.length>64)emit()
S=M[S>>>12]}
else{
if(S&1/*cache*/)tbl[posns[posns.length-1]][S]=false
if(S&4/*pushpos*/)pos=posns.pop()
if(S&2048/*f_tossbuf*/)buf=bufs.pop()
if(S&8/*t_emitstate*/){emp=emps.pop()}
if(emp>pos){emp=pos}
S=F[S>>>12]}
if(S==299){R=true;S=states.pop()}else if(S==300){R=false;S=states.pop()}else R=undefined;}}}
function emit(){var x=bufs.length?bufs[0]:buf;if(x.length){out('tree segment',x);if(bufs.length)bufs[0]=[];else buf=[]}}
function fail(s){out('fail',pos,s);failed=1}}
/* re.js */
/* Here we define an 're' type and operations on it. These are like regular expressions, except that they are stored not as strings but in a more convenient format. They may be operated on and combined in various ways and eventually may be converted into ECMAScript regexes. An re object can also be a named reference, to some other re object, which means that a set of re objects can be recursive and can express non-regular languages. Circular re objects cannot be turned into ECMAScript regexes, although some collections of re objects that contain named references but are not circular can be flattened by substitution. */
/* An re is an array, in which the first element is an integer which encodes the type of the second element:
0 → cset
1 → string literal
2 → sequence of res
3 → union of res
4 → m to n reps of re
5 → named reference
6 → re negative lookahead
7 → re positive lookahead
*/
function re_from_cset(cset){return [0,cset]}
function re_from_str(str){return [1,str]}
function re_sequence(res){return res.length>1 ?[2,res] :res[0]}
function re_union(res){return res.length>1 ?[3,res] :res[0]}
function re_rep(m,n,re){return [4,m,n,re]}
function re_reference(name){return [5,name]}
function re_neg_lookahead(re){return [6,re]}
function re_pos_lookahead(re){return [7,re]}
/* the following needs a correctness proof. */
function re_serialize(re){
return f(re)
function f(re){return h(re,1)}// wants parens
function g(re){return h(re,0)}// doesn't
function h(re,paren){var q,cs
switch(re[0]){
case 0:
return CSET.toRegex(re[1])
case 1:
return reEsc(re[1].slice(1,-1)) // defined in primitives.js
case 2:
return re[1].map(f).join('')
case 3:
return (!paren || re[1].length<2)
? re[1].map(f).join('|')
:'('+re[1].map(g).join('|')+')'
case 4:
if(re[1]==0){
if (re[2]==0) q='*'
else if(re[2]==1) q='?'}
else if(re[1]==1 && re[2]==0) q='+'
else q='{'+re[1]+','+re[2]+'}'
return '('+g(re[3])+')'+q
case 5:
throw Error('re_serialize: cannot serialize named reference')
case 6:
return '(?!'+g(re[1])+')'
case 7:
return '(?='+g(re[1])+')'
default:
throw Error('re_serialize: unknown re type: '+re[0])}}}
function re_simplify(re){var r
switch(re[0]){
case 0:
case 1:
return re
case 2:
r=[2,re[1].map(re_simplify)]
return r
case 3:
r=[3,re[1].map(re_simplify)]
if(r[1].every(function(r){return r[0]===0})){
cs=r[1][0][1]
r[1].slice(1).forEach(function(r){cs=CSET.union(cs,r[1])})
return [0,cs]}
return r
case 4:
return [4,re[1],re[2],re_simplify(re[3])]
case 5:
throw Error('re_simplify: cannot simplify named reference')
case 6:
r=re_simplify(re[1])
//if(r[0]===0)return [0,CSET.complement(r[1])] WRONG
return [6,r]
case 7:
return [7,re_simplify(re[1])]
default:
throw Error('re_simplify: unknown re type: '+re[0])}}
/* we return either a string which is a dependency of the provided re object, or undefined if the re is self-contained. */
function re_dependency(re){var i,l,r
switch(re[0]){
case 0:
case 1:
case 8:
return
case 2:
case 3:
for(i=0,l=re[1].length;i<l;i++)
if(r=re_dependency(re[1][i]))return r
return
case 4:
return re_dependency(re[3])
case 5:
return re[1]
case 6:
case 7:
return re_dependency(re[1])
default:
throw Error('re_dependency: unknown re type: '+re[0])}}
function re_substitute(re,name,value){var i,l
//log([re,name,value])
switch(re[0]){
case 0:
case 1:
return re
case 2:
case 3:
for(i=0,l=re[1].length;i<l;i++)
re[1][i]=re_substitute(re[1][i],name,value)
return re
case 4:
re[3]=re_substitute(re[3],name,value)
return re
case 5:
if(re[1]===name)return value
return re
case 6:
case 7:
re[1]=re_substitute(re[1],name,value)
return re
default:
throw Error('re_substitute: unknown re type: '+re[0])}}
/*
6 → re negative lookahead
7 → re positive lookahead
*/
function re_to_function(ctx){return function(re){
return f(re)
function f(re){
switch(re[0]){
case 0:
return 'cs_'+cset_ref(ctx,re[1])
case 1:
if(!re[1].length)return 'empty'
return 'sl_'+strlit_ref(ctx,re[1])
case 2:
return 'seq('+re[1].map(f).join(',')+')'
case 3:
return 'ordChoice('+re[1].map(f).join(',')+')'
case 4:
return 'rep('+re[1]+','+re[2]+','+f(re[3])+')'
case 5:
return re[1]
}
return re}}
function cset_ref(ctx,cset){var x
if(x=lookup(cset,ctx.csets,cset_test))return x
x=ctx.csets.length
ctx.csets[x]=cset_f(cset,x)
return x}
function lookup(x,xs,eq){
}
function cset_test(a,b){
}
function cset_f(cset,n){
return 'function cs_'+n+'(s){var c;'
+ 'c=s._str.charCodeAt(s.pos);'
+ 'if('+cset_to_expr(cset,'c')+'){s.adv(1);return true}'
+ 'return false'
+ '}'}
function strlit_ref(ctx,str){
if(x=lookup(ctx.strlits,str))return x
x=ctx.strlits.length
ctx.strlits[x]=strlit_f(str,x)
return x}
function strlit_f(str,n){var i,l,ret,ret2
l=str.length
if(l>8){
return 'function sl_'+n+'(s){var x;'
+ 'x=s._str.slice'
+ '}'}
else{
ret=['function sl_'+n+'(s){var '
,'p=s.pos'
,',t=s._str;'
,'if(']
ret2=[]
for(i=0;i<l;i++)
ret2.push('t.charCodeAt(p'+(i<l-1?'++':'')+')=='+str.charCodeAt(i))
ret.push(ret2.join('&&'))
ret.push('){s.adv('+str.length+');return true}')
ret.push('return false}')
return ret.join('')}}}
/* probably belongs in CSET */
/* takes a cset and a variable name to a JavaScript expression which is a test on the value of that variable for membership in that cset. */
/* This is a dumb implementation, but has the advantage of favoring small codepoints; much more efficient implementations are possible. */
function cset_to_expr(cset,id){var i,l,ret=[]
for(i=0,l=cset.length;i<l;i++)
ret.push(id+'<'+cset[i]+'?'+(i%2?'1':'0')+':')
ret.push(l%2?'1':'0')
return ret.join('')}
/* lists.js */
function foldl1(f,a){var x,i,l
x=a[0]
for(i=1,l=a.length;i<l;i++)x=f(x,a[i])
return x}
function foldl(f,a,x){var i,l
for(i=0,l=a.length;i<l;i++)x=f(x,a[i])
return x}
// [[a]] → [a]
function concat(as){var i,l,a=[]
for(i=0,l=as.length;i<l;i++)
a.push.apply(a,as[i])
return a}
function uniq(a){
return a.filter(function(e,i,a){return !i||e!==a[i-1]})}
function max(a){
return foldl(f,a,-Infinity)
function f(a,b){return Math.max(a,b)}}
function min(a){
return foldl(f,a,Infinity)
function f(a,b){return Math.min(a,b)}}
function sum(a){
return foldl(f,a,0)
function f(a,b){return a+b}}
function product(a){
return foldl(f,a,1)
function f(a,b){return a*b}}
// String → Object → a
function access(prop){return function(o){return o[prop]}}
/* [[name,value]] → Object */
function objectFromList(a){var o={}
a.forEach(function(e){
o[e[0]]=e[1]})
return o}
/* [a], [b] → [[a,b]] */
function zip(a,b){var r=[],i,l
l=Math.min(a.length,b.length)
for(i=0;i<l;i++) r.push([a[i],b[i]])
return r}
/* [a] → a */
function last(a){return a[a.length-1]}
function fst(a){return a[0]}
function snd(a){return a[1]}
/* assert.js */
function assert(x,msg){if(!x)throw new Error('assertion failed'+(msg?': '+msg:''))}
/* CSET */
if(!Array.prototype.forEach)
Array.prototype.forEach=function(f){var i,l=this.length>>>0,thisp=arguments[1]
for(i=0;i<l;i++)
if(i in this)
f.call(thisp,this[i],i,this)}
if(!Array.prototype.filter)
Array.prototype.filter=function(f){var i,l=this.length>>>0,res=[],thisp=arguments[1],v
for(i=0;i<l;i++){
v=this[i]
if(i in this&&f.call(thisp,v,i,this))res.push(v)}
return res}
;(function(exports){
cUC=
{Cc:[0,0x20,0x7F,0xA0]
,Zs:[0x20,0x21,0xA0,0xA1,0x1680,0x1681,0x180E,0x180F,0x2000,0x200B,0x202F,0x2030,0x205F,0x2060,0x3000,0x3001]
,Po:[0x21,0x24,0x25,0x28,0x2A,0x2B,0x2C,0x2D,0x2E,0x30,0x3A,0x3C,0x3F,0x41,0x5C,0x5D,0xA1,0xA2,0xB7,0xB8,0xBF,0xC0,0x37E,0x37F,0x387,0x388,0x55A,0x560,0x589,0x58A,0x5C0,0x5C1,0x5C3,0x5C4,0x5C6,0x5C7,0x5F3,0x5F5,0x609,0x60B,0x60C,0x60E,0x61B,0x61C,0x61E,0x620,0x66A,0x66E,0x6D4,0x6D5,0x700,0x70E,0x7F7,0x7FA,0x964,0x966,0x970,0x971,0xDF4,0xDF5,0xE4F,0xE50,0xE5A,0xE5C,0xF04,0xF13,0xF85,0xF86,0xFD0,0xFD5,0x104A,0x1050,0x10FB,0x10FC,0x1361,0x1369,0x166D,0x166F,0x16EB,0x16EE,0x1735,0x1737,0x17D4,0x17D7,0x17D8,0x17DB,0x1800,0x1806,0x1807,0x180B,0x1944,0x1946,0x19DE,0x19E0,0x1A1E,0x1A20,0x1B5A,0x1B61,0x1C3B,0x1C40,0x1C7E,0x1C80,0x2016,0x2018,0x2020,0x2028,0x2030,0x2039,0x203B,0x203F,0x2041,0x2044,0x2047,0x2052,0x2053,0x2054,0x2055,0x205F,0x2CF9,0x2CFD,0x2CFE,0x2D00,0x2E00,0x2E02,0x2E06,0x2E09,0x2E0B,0x2E0C,0x2E0E,0x2E17,0x2E18,0x2E1A,0x2E1B,0x2E1C,0x2E1E,0x2E20,0x2E2A,0x2E2F,0x2E30,0x2E31,0x3001,0x3004,0x303D,0x303E,0x30FB,0x30FC,0xA60D,0xA610,0xA673,0xA674,0xA67E,0xA67F,0xA874,0xA878,0xA8CE,0xA8D0,0xA92E,0xA930,0xA95F,0xA960,0xAA5C,0xAA60,0xFE10,0xFE17,0xFE19,0xFE1A,0xFE30,0xFE31,0xFE45,0xFE47,0xFE49,0xFE4D,0xFE50,0xFE53,0xFE54,0xFE58,0xFE5F,0xFE62,0xFE68,0xFE69,0xFE6A,0xFE6C,0xFF01,0xFF04,0xFF05,0xFF08,0xFF0A,0xFF0B,0xFF0C,0xFF0D,0xFF0E,0xFF10,0xFF1A,0xFF1C,0xFF1F,0xFF21,0xFF3C,0xFF3D,0xFF61,0xFF62,0xFF64,0xFF66,0x10100,0x10102,0x1039F,0x103A0,0x103D0,0x103D1,0x1091F,0x10920,0x1093F,0x10940,0x10A50,0x10A59,0x12470,0x12474]
,Sc:[0x24,0x25,0xA2,0xA6,0x60B,0x60C,0x9F2,0x9F4,0xAF1,0xAF2,0xBF9,0xBFA,0xE3F,0xE40,0x17DB,0x17DC,0x20A0,0x20B6,0xFDFC,0xFDFD,0xFE69,0xFE6A,0xFF04,0xFF05,0xFFE0,0xFFE2,0xFFE5,0xFFE7]
,Ps:[0x28,0x29,0x5B,0x5C,0x7B,0x7C,0xF3A,0xF3B,0xF3C,0xF3D,0x169B,0x169C,0x201A,0x201B,0x201E,0x201F,0x2045,0x2046,0x207D,0x207E,0x208D,0x208E,0x2329,0x232A,0x2768,0x2769,0x276A,0x276B,0x276C,0x276D,0x276E,0x276F,0x2770,0x2771,0x2772,0x2773,0x2774,0x2775,0x27C5,0x27C6,0x27E6,0x27E7,0x27E8,0x27E9,0x27EA,0x27EB,0x27EC,0x27ED,0x27EE,0x27EF,0x2983,0x2984,0x2985,0x2986,0x2987,0x2988,0x2989,0x298A,0x298B,0x298C,0x298D,0x298E,0x298F,0x2990,0x2991,0x2992,0x2993,0x2994,0x2995,0x2996,0x2997,0x2998,0x29D8,0x29D9,0x29DA,0x29DB,0x29FC,0x29FD,0x2E22,0x2E23,0x2E24,0x2E25,0x2E26,0x2E27,0x2E28,0x2E29,0x3008,0x3009,0x300A,0x300B,0x300C,0x300D,0x300E,0x300F,0x3010,0x3011,0x3014,0x3015,0x3016,0x3017,0x3018,0x3019,0x301A,0x301B,0x301D,0x301E,0xFD3E,0xFD3F,0xFE17,0xFE18,0xFE35,0xFE36,0xFE37,0xFE38,0xFE39,0xFE3A,0xFE3B,0xFE3C,0xFE3D,0xFE3E,0xFE3F,0xFE40,0xFE41,0xFE42,0xFE43,0xFE44,0xFE47,0xFE48,0xFE59,0xFE5A,0xFE5B,0xFE5C,0xFE5D,0xFE5E,0xFF08,0xFF09,0xFF3B,0xFF3C,0xFF5B,0xFF5C,0xFF5F,0xFF60,0xFF62,0xFF63]
,Pe:[0x29,0x2A,0x5D,0x5E,0x7D,0x7E,0xF3B,0xF3C,0xF3D,0xF3E,0x169C,0x169D,0x2046,0x2047,0x207E,0x207F,0x208E,0x208F,0x232A,0x232B,0x2769,0x276A,0x276B,0x276C,0x276D,0x276E,0x276F,0x2770,0x2771,0x2772,0x2773,0x2774,0x2775,0x2776,0x27C6,0x27C7,0x27E7,0x27E8,0x27E9,0x27EA,0x27EB,0x27EC,0x27ED,0x27EE,0x27EF,0x27F0,0x2984,0x2985,0x2986,0x2987,0x2988,0x2989,0x298A,0x298B,0x298C,0x298D,0x298E,0x298F,0x2990,0x2991,0x2992,0x2993,0x2994,0x2995,0x2996,0x2997,0x2998,0x2999,0x29D9,0x29DA,0x29DB,0x29DC,0x29FD,0x29FE,0x2E23,0x2E24,0x2E25,0x2E26,0x2E27,0x2E28,0x2E29,0x2E2A,0x3009,0x300A,0x300B,0x300C,0x300D,0x300E,0x300F,0x3010,0x3011,0x3012,0x3015,0x3016,0x3017,0x3018,0x3019,0x301A,0x301B,0x301C,0x301E,0x3020,0xFD3F,0xFD40,0xFE18,0xFE19,0xFE36,0xFE37,0xFE38,0xFE39,0xFE3A,0xFE3B,0xFE3C,0xFE3D,0xFE3E,0xFE3F,0xFE40,0xFE41,0xFE42,0xFE43,0xFE44,0xFE45,0xFE48,0xFE49,0xFE5A,0xFE5B,0xFE5C,0xFE5D,0xFE5E,0xFE5F,0xFF09,0xFF0A,0xFF3D,0xFF3E,0xFF5D,0xFF5E,0xFF60,0xFF61,0xFF63,0xFF64]
,Sm:[0x2B,0x2C,0x3C,0x3F,0x7C,0x7D,0x7E,0x7F,0xAC,0xAD,0xB1,0xB2,0xD7,0xD8,0xF7,0xF8,0x3F6,0x3F7,0x606,0x609,0x2044,0x2045,0x2052,0x2053,0x207A,0x207D,0x208A,0x208D,0x2140,0x2145,0x214B,0x214C,0x2190,0x2195,0x219A,0x219C,0x21A0,0x21A1,0x21A3,0x21A4,0x21A6,0x21A7,0x21AE,0x21AF,0x21CE,0x21D0,0x21D2,0x21D3,0x21D4,0x21D5,0x21F4,0x2300,0x2308,0x230C,0x2320,0x2322,0x237C,0x237D,0x239B,0x23B4,0x23DC,0x23E2,0x25B7,0x25B8,0x25C1,0x25C2,0x25F8,0x2600,0x266F,0x2670,0x27C0,0x27C5,0x27C7,0x27CB,0x27CC,0x27CD,0x27D0,0x27E6,0x27F0,0x2800,0x2900,0x2983,0x2999,0x29D8,0x29DC,0x29FC,0x29FE,0x2B00,0x2B30,0x2B45,0x2B47,0x2B4D,0xFB29,0xFB2A,0xFE62,0xFE63,0xFE64,0xFE67,0xFF0B,0xFF0C,0xFF1C,0xFF1F,0xFF5C,0xFF5D,0xFF5E,0xFF5F,0xFFE2,0xFFE3,0xFFE9,0xFFED,0x1D6C1,0x1D6C2,0x1D6DB,0x1D6DC,0x1D6FB,0x1D6FC,0x1D715,0x1D716,0x1D735,0x1D736,0x1D74F,0x1D750,0x1D76F,0x1D770,0x1D789,0x1D78A,0x1D7A9,0x1D7AA,0x1D7C3,0x1D7C4]
,Pd:[0x2D,0x2E,0x58A,0x58B,0x5BE,0x5BF,0x1806,0x1807,0x2010,0x2016,0x2E17,0x2E18,0x2E1A,0x2E1B,0x301C,0x301D,0x3030,0x3031,0x30A0,0x30A1,0xFE31,0xFE33,0xFE58,0xFE59,0xFE63,0xFE64,0xFF0D,0xFF0E]
,Nd:[0x30,0x3A,0x660,0x66A,0x6F0,0x6FA,0x7C0,0x7CA,0x966,0x970,0x9E6,0x9F0,0xA66,0xA70,0xAE6,0xAF0,0xB66,0xB70,0xBE6,0xBF0,0xC66,0xC70,0xCE6,0xCF0,0xD66,0xD70,0xE50,0xE5A,0xED0,0xEDA,0xF20,0xF2A,0x1040,0x104A,0x1090,0x109A,0x17E0,0x17EA,0x1810,0x181A,0x1946,0x1950,0x19D0,0x19DA,0x1B50,0x1B5A,0x1BB0,0x1BBA,0x1C40,0x1C4A,0x1C50,0x1C5A,0xA620,0xA62A,0xA8D0,0xA8DA,0xA900,0xA90A,0xAA50,0xAA5A,0xFF10,0xFF1A,0x104A0,0x104AA,0x1D7CE,0x1D800]
,Lu:[0x41,0x5B,0xC0,0xD7,0xD8,0xDF,0x100,0x101,0x102,0x103,0x104,0x105,0x106,0x107,0x108,0x109,0x10A,0x10B,0x10C,0x10D,0x10E,0x10F,0x110,0x111,0x112,0x113,0x114,0x115,0x116,0x117,0x118,0x119,0x11A,0x11B,0x11C,0x11D,0x11E,0x11F,0x120,0x121,0x122,0x123,0x124,0x125,0x126,0x127,0x128,0x129,0x12A,0x12B,0x12C,0x12D,0x12E,0x12F,0x130,0x131,0x132,0x133,0x134,0x135,0x136,0x137,0x139,0x13A,0x13B,0x13C,0x13D,0x13E,0x13F,0x140,0x141,0x142,0x143,0x144,0x145,0x146,0x147,0x148,0x14A,0x14B,0x14C,0x14D,0x14E,0x14F,0x150,0x151,0x152,0x153,0x154,0x155,0x156,0x157,0x158,0x159,0x15A,0x15B,0x15C,0x15D,0x15E,0x15F,0x160,0x161,0x162,0x163,0x164,0x165,0x166,0x167,0x168,0x169,0x16A,0x16B,0x16C,0x16D,0x16E,0x16F,0x170,0x171,0x172,0x173,0x174,0x175,0x176,0x177,0x178,0x17A,0x17B,0x17C,0x17D,0x17E,0x181,0x183,0x184,0x185,0x186,0x188,0x189,0x18C,0x18E,0x192,0x193,0x195,0x196,0x199,0x19C,0x19E,0x19F,0x1A1,0x1A2,0x1A3,0x1A4,0x1A5,0x1A6,0x1A8,0x1A9,0x1AA,0x1AC,0x1AD,0x1AE,0x1B0,0x1B1,0x1B4,0x1B5,0x1B6,0x1B7,0x1B9,0x1BC,0x1BD,0x1C4,0x1C5,0x1C7,0x1C8,0x1CA,0x1CB,0x1CD,0x1CE,0x1CF,0x1D0,0x1D1,0x1D2,0x1D3,0x1D4,0x1D5,0x1D6,0x1D7,0x1D8,0x1D9,0x1DA,0x1DB,0x1DC,0x1DE,0x1DF,0x1E0,0x1E1,0x1E2,0x1E3,0x1E4,0x1E5,0x1E6,0x1E7,0x1E8,0x1E9,0x1EA,0x1EB,0x1EC,0x1ED,0x1EE,0x1EF,0x1F1,0x1F2,0x1F4,0x1F5,0x1F6,0x1F9,0x1FA,0x1FB,0x1FC,0x1FD,0x1FE,0x1FF,0x200,0x201,0x202,0x203,0x204,0x205,0x206,0x207,0x208,0x209,0x20A,0x20B,0x20C,0x20D,0x20E,0x20F,0x210,0x211,0x212,0x213,0x214,0x215,0x216,0x217,0x218,0x219,0x21A,0x21B,0x21C,0x21D,0x21E,0x21F,0x220,0x221,0x222,0x223,0x224,0x225,0x226,0x227,0x228,0x229,0x22A,0x22B,0x22C,0x22D,0x22E,0x22F,0x230,0x231,0x232,0x233,0x23A,0x23C,0x23D,0x23F,0x241,0x242,0x243,0x247,0x248,0x249,0x24A,0x24B,0x24C,0x24D,0x24E,0x24F,0x370,0x371,0x372,0x373,0x376,0x377,0x386,0x387,0x388,0x38B,0x38C,0x38D,0x38E,0x390,0x391,0x3A2,0x3A3,0x3AC,0x3CF,0x3D0,0x3D2,0x3D5,0x3D8,0x3D9,0x3DA,0x3DB,0x3DC,0x3DD,0x3DE,0x3DF,0x3E0,0x3E1,0x3E2,0x3E3,0x3E4,0x3E5,0x3E6,0x3E7,0x3E8,0x3E9,0x3EA,0x3EB,0x3EC,0x3ED,0x3EE,0x3EF,0x3F4,0x3F5,0x3F7,0x3F8,0x3F9,0x3FB,0x3FD,0x430,0x460,0x461,0x462,0x463,0x464,0x465,0x466,0x467,0x468,0x469,0x46A,0x46B,0x46C,0x46D,0x46E,0x46F,0x470,0x471,0x472,0x473,0x474,0x475,0x476,0x477,0x478,0x479,0x47A,0x47B,0x47C,0x47D,0x47E,0x47F,0x480,0x481,0x48A,0x48B,0x48C,0x48D,0x48E,0x48F,0x490,0x491,0x492,0x493,0x494,0x495,0x496,0x497,0x498,0x499,0x49A,0x49B,0x49C,0x49D,0x49E,0x49F,0x4A0,0x4A1,0x4A2,0x4A3,0x4A4,0x4A5,0x4A6,0x4A7,0x4A8,0x4A9,0x4AA,0x4AB,0x4AC,0x4AD,0x4AE,0x4AF,0x4B0,0x4B1,0x4B2,0x4B3,0x4B4,0x4B5,0x4B6,0x4B7,0x4B8,0x4B9,0x4BA,0x4BB,0x4BC,0x4BD,0x4BE,0x4BF,0x4C0,0x4C2,0x4C3,0x4C4,0x4C5,0x4C6,0x4C7,0x4C8,0x4C9,0x4CA,0x4CB,0x4CC,0x4CD,0x4CE,0x4D0,0x4D1,0x4D2,0x4D3,0x4D4,0x4D5,0x4D6,0x4D7,0x4D8,0x4D9,0x4DA,0x4DB,0x4DC,0x4DD,0x4DE,0x4DF,0x4E0,0x4E1,0x4E2,0x4E3,0x4E4,0x4E5,0x4E6,0x4E7,0x4E8,0x4E9,0x4EA,0x4EB,0x4EC,0x4ED,0x4EE,0x4EF,0x4F0,0x4F1,0x4F2,0x4F3,0x4F4,0x4F5,0x4F6,0x4F7,0x4F8,0x4F9,0x4FA,0x4FB,0x4FC,0x4FD,0x4FE,0x4FF,0x500,0x501,0x502,0x503,0x504,0x505,0x506,0x507,0x508,0x509,0x50A,0x50B,0x50C,0x50D,0x50E,0x50F,0x510,0x511,0x512,0x513,0x514,0x515,0x516,0x517,0x518,0x519,0x51A,0x51B,0x51C,0x51D,0x51E,0x51F,0x520,0x521,0x522,0x523,0x531,0x557,0x10A0,0x10C6,0x1E00,0x1E01,0x1E02,0x1E03,0x1E04,0x1E05,0x1E06,0x1E07,0x1E08,0x1E09,0x1E0A,0x1E0B,0x1E0C,0x1E0D,0x1E0E,0x1E0F,0x1E10,0x1E11,0x1E12,0x1E13,0x1E14,0x1E15,0x1E16,0x1E17,0x1E18,0x1E19,0x1E1A,0x1E1B,0x1E1C,0x1E1D,0x1E1E,0x1E1F,0x1E20,0x1E21,0x1E22,0x1E23,0x1E24,0x1E25,0x1E26,0x1E27,0x1E28,0x1E29,0x1E2A,0x1E2B,0x1E2C,0x1E2D,0x1E2E,0x1E2F,0x1E30,0x1E31,0x1E32,0x1E33,0x1E34,0x1E35,0x1E36,0x1E37,0x1E38,0x1E39,0x1E3A,0x1E3B,0x1E3C,0x1E3D,0x1E3E,0x1E3F,0x1E40,0x1E41,0x1E42,0x1E43,0x1E44,0x1E45,0x1E46,0x1E47,0x1E48,0x1E49,0x1E4A,0x1E4B,0x1E4C,0x1E4D,0x1E4E,0x1E4F,0x1E50,0x1E51,0x1E52,0x1E53,0x1E54,0x1E55,0x1E56,0x1E57,0x1E58,0x1E59,0x1E5A,0x1E5B,0x1E5C,0x1E5D,0x1E5E,0x1E5F,0x1E60,0x1E61,0x1E62,0x1E63,0x1E64,0x1E65,0x1E66,0x1E67,0x1E68,0x1E69,0x1E6A,0x1E6B,0x1E6C,0x1E6D,0x1E6E,0x1E6F,0x1E70,0x1E71,0x1E72,0x1E73,0x1E74,0x1E75,0x1E76,0x1E77,0x1E78,0x1E79,0x1E7A,0x1E7B,0x1E7C,0x1E7D,0x1E7E,0x1E7F,0x1E80,0x1E81,0x1E82,0x1E83,0x1E84,0x1E85,0x1E86,0x1E87,0x1E88,0x1E89,0x1E8A,0x1E8B,0x1E8C,0x1E8D,0x1E8E,0x1E8F,0x1E90,0x1E91,0x1E92,0x1E93,0x1E94,0x1E95,0x1E9E,0x1E9F,0x1EA0,0x1EA1,0x1EA2,0x1EA3,0x1EA4,0x1EA5,0x1EA6,0x1EA7,0x1EA8,0x1EA9,0x1EAA,0x1EAB,0x1EAC,0x1EAD,0x1EAE,0x1EAF,0x1EB0,0x1EB1,0x1EB2,0x1EB3,0x1EB4,0x1EB5,0x1EB6,0x1EB7,0x1EB8,0x1EB9,0x1EBA,0x1EBB,0x1EBC,0x1EBD,0x1EBE,0x1EBF,0x1EC0,0x1EC1,0x1EC2,0x1EC3,0x1EC4,0x1EC5,0x1EC6,0x1EC7,0x1EC8,0x1EC9,0x1ECA,0x1ECB,0x1ECC,0x1ECD,0x1ECE,0x1ECF,0x1ED0,0x1ED1,0x1ED2,0x1ED3,0x1ED4,0x1ED5,0x1ED6,0x1ED7,0x1ED8,0x1ED9,0x1EDA,0x1EDB,0x1EDC,0x1EDD,0x1EDE,0x1EDF,0x1EE0,0x1EE1,0x1EE2,0x1EE3,0x1EE4,0x1EE5,0x1EE6,0x1EE7,0x1EE8,0x1EE9,0x1EEA,0x1EEB,0x1EEC,0x1EED,0x1EEE,0x1EEF,0x1EF0,0x1EF1,0x1EF2,0x1EF3,0x1EF4,0x1EF5,0x1EF6,0x1EF7,0x1EF8,0x1EF9,0x1EFA,0x1EFB,0x1EFC,0x1EFD,0x1EFE,0x1EFF,0x1F08,0x1F10,0x1F18,0x1F1E,0x1F28,0x1F30,0x1F38,0x1F40,0x1F48,0x1F4E,0x1F59,0x1F5A,0x1F5B,0x1F5C,0x1F5D,0x1F5E,0x1F5F,0x1F60,0x1F68,0x1F70,0x1FB8,0x1FBC,0x1FC8,0x1FCC,0x1FD8,0x1FDC,0x1FE8,0x1FED,0x1FF8,0x1FFC,0x2102,0x2103,0x2107,0x2108,0x210B,0x210E,0x2110,0x2113,0x2115,0x2116,0x2119,0x211E,0x2124,0x2125,0x2126,0x2127,0x2128,0x2129,0x212A,0x212E,0x2130,0x2134,0x213E,0x2140,0x2145,0x2146,0x2183,0x2184,0x2C00,0x2C2F,0x2C60,0x2C61,0x2C62,0x2C65,0x2C67,0x2C68,0x2C69,0x2C6A,0x2C6B,0x2C6C,0x2C6D,0x2C70,0x2C72,0x2C73,0x2C75,0x2C76,0x2C80,0x2C81,0x2C82,0x2C83,0x2C84,0x2C85,0x2C86,0x2C87,0x2C88,0x2C89,0x2C8A,0x2C8B,0x2C8C,0x2C8D,0x2C8E,0x2C8F,0x2C90,0x2C91,0x2C92,0x2C93,0x2C94,0x2C95,0x2C96,0x2C97,0x2C98,0x2C99,0x2C9A,0x2C9B,0x2C9C,0x2C9D,0x2C9E,0x2C9F,0x2CA0,0x2CA1,0x2CA2,0x2CA3,0x2CA4,0x2CA5,0x2CA6,0x2CA7,0x2CA8,0x2CA9,0x2CAA,0x2CAB,0x2CAC,0x2CAD,0x2CAE,0x2CAF,0x2CB0,0x2CB1,0x2CB2,0x2CB3,0x2CB4,0x2CB5,0x2CB6,0x2CB7,0x2CB8,0x2CB9,0x2CBA,0x2CBB,0x2CBC,0x2CBD,0x2CBE,0x2CBF,0x2CC0,0x2CC1,0x2CC2,0x2CC3,0x2CC4,0x2CC5,0x2CC6,0x2CC7,0x2CC8,0x2CC9,0x2CCA,0x2CCB,0x2CCC,0x2CCD,0x2CCE,0x2CCF,0x2CD0,0x2CD1,0x2CD2,0x2CD3,0x2CD4,0x2CD5,0x2CD6,0x2CD7,0x2CD8,0x2CD9,0x2CDA,0x2CDB,0x2CDC,0x2CDD,0x2CDE,0x2CDF,0x2CE0,0x2CE1,0x2CE2,0x2CE3,0xA640,0xA641,0xA642,0xA643,0xA644,0xA645,0xA646,0xA647,0xA648,0xA649,0xA64A,0xA64B,0xA64C,0xA64D,0xA64E,0xA64F,0xA650,0xA651,0xA652,0xA653,0xA654,0xA655,0xA656,0xA657,0xA658,0xA659,0xA65A,0xA65B,0xA65C,0xA65D,0xA65E,0xA65F,0xA662,0xA663,0xA664,0xA665,0xA666,0xA667,0xA668,0xA669,0xA66A,0xA66B,0xA66C,0xA66D,0xA680,0xA681,0xA682,0xA683,0xA684,0xA685,0xA686,0xA687,0xA688,0xA689,0xA68A,0xA68B,0xA68C,0xA68D,0xA68E,0xA68F,0xA690,0xA691,0xA692,0xA693,0xA694,0xA695,0xA696,0xA697,0xA722,0xA723,0xA724,0xA725,0xA726,0xA727,0xA728,0xA729,0xA72A,0xA72B,0xA72C,0xA72D,0xA72E,0xA72F,0xA732,0xA733,0xA734,0xA735,0xA736,0xA737,0xA738,0xA739,0xA73A,0xA73B,0xA73C,0xA73D,0xA73E,0xA73F,0xA740,0xA741,0xA742,0xA743,0xA744,0xA745,0xA746,0xA747,0xA748,0xA749,0xA74A,0xA74B,0xA74C,0xA74D,0xA74E,0xA74F,0xA750,0xA751,0xA752,0xA753,0xA754,0xA755,0xA756,0xA757,0xA758,0xA759,0xA75A,0xA75B,0xA75C,0xA75D,0xA75E,0xA75F,0xA760,0xA761,0xA762,0xA763,0xA764,0xA765,0xA766,0xA767,0xA768,0xA769,0xA76A,0xA76B,0xA76C,0xA76D,0xA76E,0xA76F,0xA779,0xA77A,0xA77B,0xA77C,0xA77D,0xA77F,0xA780,0xA781,0xA782,0xA783,0xA784,0xA785,0xA786,0xA787,0xA78B,0xA78C,0xFF21,0xFF3B,0x10400,0x10428,0x1D400,0x1D41A,0x1D434,0x1D44E,0x1D468,0x1D482,0x1D49C,0x1D49D,0x1D49E,0x1D4A0,0x1D4A2,0x1D4A3,0x1D4A5,0x1D4A7,0x1D4A9,0x1D4AD,0x1D4AE,0x1D4B6,0x1D4D0,0x1D4EA,0x1D504,0x1D506,0x1D507,0x1D50B,0x1D50D,0x1D515,0x1D516,0x1D51D,0x1D538,0x1D53A,0x1D53B,0x1D53F,0x1D540,0x1D545,0x1D546,0x1D547,0x1D54A,0x1D551,0x1D56C,0x1D586,0x1D5A0,0x1D5BA,0x1D5D4,0x1D5EE,0x1D608,0x1D622,0x1D63C,0x1D656,0x1D670,0x1D68A,0x1D6A8,0x1D6C1,0x1D6E2,0x1D6FB,0x1D71C,0x1D735,0x1D756,0x1D76F,0x1D790,0x1D7A9,0x1D7CA,0x1D7CB]
,Sk:[0x5E,0x5F,0x60,0x61,0xA8,0xA9,0xAF,0xB0,0xB4,0xB5,0xB8,0xB9,0x2C2,0x2C6,0x2D2,0x2E0,0x2E5,0x2EC,0x2ED,0x2EE,0x2EF,0x300,0x375,0x376,0x384,0x386,0x1FBD,0x1FBE,0x1FBF,0x1FC2,0x1FCD,0x1FD0,0x1FDD,0x1FE0,0x1FED,0x1FF0,0x1FFD,0x1FFF,0x309B,0x309D,0xA700,0xA717,0xA720,0xA722,0xA789,0xA78B,0xFF3E,0xFF3F,0xFF40,0xFF41,0xFFE3,0xFFE4]
,Pc:[0x5F,0x60,0x203F,0x2041,0x2054,0x2055,0xFE33,0xFE35,0xFE4D,0xFE50,0xFF3F,0xFF40]
,Ll:[0x61,0x7B,0xAA,0xAB,0xB5,0xB6,0xBA,0xBB,0xDF,0xF7,0xF8,0x100,0x101,0x102,0x103,0x104,0x105,0x106,0x107,0x108,0x109,0x10A,0x10B,0x10C,0x10D,0x10E,0x10F,0x110,0x111,0x112,0x113,0x114,0x115,0x116,0x117,0x118,0x119,0x11A,0x11B,0x11C,0x11D,0x11E,0x11F,0x120,0x121,0x122,0x123,0x124,0x125,0x126,0x127,0x128,0x129,0x12A,0x12B,0x12C,0x12D,0x12E,0x12F,0x130,0x131,0x132,0x133,0x134,0x135,0x136,0x137,0x139,0x13A,0x13B,0x13C,0x13D,0x13E,0x13F,0x140,0x141,0x142,0x143,0x144,0x145,0x146,0x147,0x148,0x14A,0x14B,0x14C,0x14D,0x14E,0x14F,0x150,0x151,0x152,0x153,0x154,0x155,0x156,0x157,0x158,0x159,0x15A,0x15B,0x15C,0x15D,0x15E,0x15F,0x160,0x161,0x162,0x163,0x164,0x165,0x166,0x167,0x168,0x169,0x16A,0x16B,0x16C,0x16D,0x16E,0x16F,0x170,0x171,0x172,0x173,0x174,0x175,0x176,0x177,0x178,0x17A,0x17B,0x17C,0x17D,0x17E,0x181,0x183,0x184,0x185,0x186,0x188,0x189,0x18C,0x18E,0x192,0x193,0x195,0x196,0x199,0x19C,0x19E,0x19F,0x1A1,0x1A2,0x1A3,0x1A4,0x1A5,0x1A6,0x1A8,0x1A9,0x1AA,0x1AC,0x1AD,0x1AE,0x1B0,0x1B1,0x1B4,0x1B5,0x1B6,0x1B7,0x1B9,0x1BB,0x1BD,0x1C0,0x1C6,0x1C7,0x1C9,0x1CA,0x1CC,0x1CD,0x1CE,0x1CF,0x1D0,0x1D1,0x1D2,0x1D3,0x1D4,0x1D5,0x1D6,0x1D7,0x1D8,0x1D9,0x1DA,0x1DB,0x1DC,0x1DE,0x1DF,0x1E0,0x1E1,0x1E2,0x1E3,0x1E4,0x1E5,0x1E6,0x1E7,0x1E8,0x1E9,0x1EA,0x1EB,0x1EC,0x1ED,0x1EE,0x1EF,0x1F1,0x1F3,0x1F4,0x1F5,0x1F6,0x1F9,0x1FA,0x1FB,0x1FC,0x1FD,0x1FE,0x1FF,0x200,0x201,0x202,0x203,0x204,0x205,0x206,0x207,0x208,0x209,0x20A,0x20B,0x20C,0x20D,0x20E,0x20F,0x210,0x211,0x212,0x213,0x214,0x215,0x216,0x217,0x218,0x219,0x21A,0x21B,0x21C,0x21D,0x21E,0x21F,0x220,0x221,0x222,0x223,0x224,0x225,0x226,0x227,0x228,0x229,0x22A,0x22B,0x22C,0x22D,0x22E,0x22F,0x230,0x231,0x232,0x233,0x23A,0x23C,0x23D,0x23F,0x241,0x242,0x243,0x247,0x248,0x249,0x24A,0x24B,0x24C,0x24D,0x24E,0x24F,0x294,0x295,0x2B0,0x371,0x372,0x373,0x374,0x377,0x378,0x37B,0x37E,0x390,0x391,0x3AC,0x3CF,0x3D0,0x3D2,0x3D5,0x3D8,0x3D9,0x3DA,0x3DB,0x3DC,0x3DD,0x3DE,0x3DF,0x3E0,0x3E1,0x3E2,0x3E3,0x3E4,0x3E5,0x3E6,0x3E7,0x3E8,0x3E9,0x3EA,0x3EB,0x3EC,0x3ED,0x3EE,0x3EF,0x3F4,0x3F5,0x3F6,0x3F8,0x3F9,0x3FB,0x3FD,0x430,0x460,0x461,0x462,0x463,0x464,0x465,0x466,0x467,0x468,0x469,0x46A,0x46B,0x46C,0x46D,0x46E,0x46F,0x470,0x471,0x472,0x473,0x474,0x475,0x476,0x477,0x478,0x479,0x47A,0x47B,0x47C,0x47D,0x47E,0x47F,0x480,0x481,0x482,0x48B,0x48C,0x48D,0x48E,0x48F,0x490,0x491,0x492,0x493,0x494,0x495,0x496,0x497,0x498,0x499,0x49A,0x49B,0x49C,0x49D,0x49E,0x49F,0x4A0,0x4A1,0x4A2,0x4A3,0x4A4,0x4A5,0x4A6,0x4A7,0x4A8,0x4A9,0x4AA,0x4AB,0x4AC,0x4AD,0x4AE,0x4AF,0x4B0,0x4B1,0x4B2,0x4B3,0x4B4,0x4B5,0x4B6,0x4B7,0x4B8,0x4B9,0x4BA,0x4BB,0x4BC,0x4BD,0x4BE,0x4BF,0x4C0,0x4C2,0x4C3,0x4C4,0x4C5,0x4C6,0x4C7,0x4C8,0x4C9,0x4CA,0x4CB,0x4CC,0x4CD,0x4CE,0x4D0,0x4D1,0x4D2,0x4D3,0x4D4,0x4D5,0x4D6,0x4D7,0x4D8,0x4D9,0x4DA,0x4DB,0x4DC,0x4DD,0x4DE,0x4DF,0x4E0,0x4E1,0x4E2,0x4E3,0x4E4,0x4E5,0x4E6,0x4E7,0x4E8,0x4E9,0x4EA,0x4EB,0x4EC,0x4ED,0x4EE,0x4EF,0x4F0,0x4F1,0x4F2,0x4F3,0x4F4,0x4F5,0x4F6,0x4F7,0x4F8,0x4F9,0x4FA,0x4FB,0x4FC,0x4FD,0x4FE,0x4FF,0x500,0x501,0x502,0x503,0x504,0x505,0x506,0x507,0x508,0x509,0x50A,0x50B,0x50C,0x50D,0x50E,0x50F,0x510,0x511,0x512,0x513,0x514,0x515,0x516,0x517,0x518,0x519,0x51A,0x51B,0x51C,0x51D,0x51E,0x51F,0x520,0x521,0x522,0x523,0x524,0x561,0x588,0x1D00,0x1D2C,0x1D62,0x1D78,0x1D79,0x1D9B,0x1E01,0x1E02,0x1E03,0x1E04,0x1E05,0x1E06,0x1E07,0x1E08,0x1E09,0x1E0A,0x1E0B,0x1E0C,0x1E0D,0x1E0E,0x1E0F,0x1E10,0x1E11,0x1E12,0x1E13,0x1E14,0x1E15,0x1E16,0x1E17,0x1E18,0x1E19,0x1E1A,0x1E1B,0x1E1C,0x1E1D,0x1E1E,0x1E1F,0x1E20,0x1E21,0x1E22,0x1E23,0x1E24,0x1E25,0x1E26,0x1E27,0x1E28,0x1E29,0x1E2A,0x1E2B,0x1E2C,0x1E2D,0x1E2E,0x1E2F,0x1E30,0x1E31,0x1E32,0x1E33,0x1E34,0x1E35,0x1E36,0x1E37,0x1E38,0x1E39,0x1E3A,0x1E3B,0x1E3C,0x1E3D,0x1E3E,0x1E3F,0x1E40,0x1E41,0x1E42,0x1E43,0x1E44,0x1E45,0x1E46,0x1E47,0x1E48,0x1E49,0x1E4A,0x1E4B,0x1E4C,0x1E4D,0x1E4E,0x1E4F,0x1E50,0x1E51,0x1E52,0x1E53,0x1E54,0x1E55,0x1E56,0x1E57,0x1E58,0x1E59,0x1E5A,0x1E5B,0x1E5C,0x1E5D,0x1E5E,0x1E5F,0x1E60,0x1E61,0x1E62,0x1E63,0x1E64,0x1E65,0x1E66,0x1E67,0x1E68,0x1E69,0x1E6A,0x1E6B,0x1E6C,0x1E6D,0x1E6E,0x1E6F,0x1E70,0x1E71,0x1E72,0x1E73,0x1E74,0x1E75,0x1E76,0x1E77,0x1E78,0x1E79,0x1E7A,0x1E7B,0x1E7C,0x1E7D,0x1E7E,0x1E7F,0x1E80,0x1E81,0x1E82,0x1E83,0x1E84,0x1E85,0x1E86,0x1E87,0x1E88,0x1E89,0x1E8A,0x1E8B,0x1E8C,0x1E8D,0x1E8E,0x1E8F,0x1E90,0x1E91,0x1E92,0x1E93,0x1E94,0x1E95,0x1E9E,0x1E9F,0x1EA0,0x1EA1,0x1EA2,0x1EA3,0x1EA4,0x1EA5,0x1EA6,0x1EA7,0x1EA8,0x1EA9,0x1EAA,0x1EAB,0x1EAC,0x1EAD,0x1EAE,0x1EAF,0x1EB0,0x1EB1,0x1EB2,0x1EB3,0x1EB4,0x1EB5,0x1EB6,0x1EB7,0x1EB8,0x1EB9,0x1EBA,0x1EBB,0x1EBC,0x1EBD,0x1EBE,0x1EBF,0x1EC0,0x1EC1,0x1EC2,0x1EC3,0x1EC4,0x1EC5,0x1EC6,0x1EC7,0x1EC8,0x1EC9,0x1ECA,0x1ECB,0x1ECC,0x1ECD,0x1ECE,0x1ECF,0x1ED0,0x1ED1,0x1ED2,0x1ED3,0x1ED4,0x1ED5,0x1ED6,0x1ED7,0x1ED8,0x1ED9,0x1EDA,0x1EDB,0x1EDC,0x1EDD,0x1EDE,0x1EDF,0x1EE0,0x1EE1,0x1EE2,0x1EE3,0x1EE4,0x1EE5,0x1EE6,0x1EE7,0x1EE8,0x1EE9,0x1EEA,0x1EEB,0x1EEC,0x1EED,0x1EEE,0x1EEF,0x1EF0,0x1EF1,0x1EF2,0x1EF3,0x1EF4,0x1EF5,0x1EF6,0x1EF7,0x1EF8,0x1EF9,0x1EFA,0x1EFB,0x1EFC,0x1EFD,0x1EFE,0x1EFF,0x1F08,0x1F10,0x1F16,0x1F20,0x1F28,0x1F30,0x1F38,0x1F40,0x1F46,0x1F50,0x1F58,0x1F60,0x1F68,0x1F70,0x1F7E,0x1F80,0x1F88,0x1F90,0x1F98,0x1FA0,0x1FA8,0x1FB0,0x1FB5,0x1FB6,0x1FB8,0x1FBE,0x1FBF,0x1FC2,0x1FC5,0x1FC6,0x1FC8,0x1FD0,0x1FD4,0x1FD6,0x1FD8,0x1FE0,0x1FE8,0x1FF2,0x1FF5,0x1FF6,0x1FF8,0x2071,0x2072,0x207F,0x2080,0x210A,0x210B,0x210E,0x2110,0x2113,0x2114,0x212F,0x2130,0x2134,0x2135,0x2139,0x213A,0x213C,0x213E,0x2146,0x214A,0x214E,0x214F,0x2184,0x2185,0x2C30,0x2C5F,0x2C61,0x2C62,0x2C65,0x2C67,0x2C68,0x2C69,0x2C6A,0x2C6B,0x2C6C,0x2C6D,0x2C71,0x2C72,0x2C73,0x2C75,0x2C76,0x2C7D,0x2C81,0x2C82,0x2C83,0x2C84,0x2C85,0x2C86,0x2C87,0x2C88,0x2C89,0x2C8A,0x2C8B,0x2C8C,0x2C8D,0x2C8E,0x2C8F,0x2C90,0x2C91,0x2C92,0x2C93,0x2C94,0x2C95,0x2C96,0x2C97,0x2C98,0x2C99,0x2C9A,0x2C9B,0x2C9C,0x2C9D,0x2C9E,0x2C9F,0x2CA0,0x2CA1,0x2CA2,0x2CA3,0x2CA4,0x2CA5,0x2CA6,0x2CA7,0x2CA8,0x2CA9,0x2CAA,0x2CAB,0x2CAC,0x2CAD,0x2CAE,0x2CAF,0x2CB0,0x2CB1,0x2CB2,0x2CB3,0x2CB4,0x2CB5,0x2CB6,0x2CB7,0x2CB8,0x2CB9,0x2CBA,0x2CBB,0x2CBC,0x2CBD,0x2CBE,0x2CBF,0x2CC0,0x2CC1,0x2CC2,0x2CC3,0x2CC4,0x2CC5,0x2CC6,0x2CC7,0x2CC8,0x2CC9,0x2CCA,0x2CCB,0x2CCC,0x2CCD,0x2CCE,0x2CCF,0x2CD0,0x2CD1,0x2CD2,0x2CD3,0x2CD4,0x2CD5,0x2CD6,0x2CD7,0x2CD8,0x2CD9,0x2CDA,0x2CDB,0x2CDC,0x2CDD,0x2CDE,0x2CDF,0x2CE0,0x2CE1,0x2CE2,0x2CE3,0x2CE5,0x2D00,0x2D26,0xA641,0xA642,0xA643,0xA644,0xA645,0xA646,0xA647,0xA648,0xA649,0xA64A,0xA64B,0xA64C,0xA64D,0xA64E,0xA64F,0xA650,0xA651,0xA652,0xA653,0xA654,0xA655,0xA656,0xA657,0xA658,0xA659,0xA65A,0xA65B,0xA65C,0xA65D,0xA65E,0xA65F,0xA660,0xA663,0xA664,0xA665,0xA666,0xA667,0xA668,0xA669,0xA66A,0xA66B,0xA66C,0xA66D,0xA66E,0xA681,0xA682,0xA683,0xA684,0xA685,0xA686,0xA687,0xA688,0xA689,0xA68A,0xA68B,0xA68C,0xA68D,0xA68E,0xA68F,0xA690,0xA691,0xA692,0xA693,0xA694,0xA695,0xA696,0xA697,0xA698,0xA723,0xA724,0xA725,0xA726,0xA727,0xA728,0xA729,0xA72A,0xA72B,0xA72C,0xA72D,0xA72E,0xA72F,0xA732,0xA733,0xA734,0xA735,0xA736,0xA737,0xA738,0xA739,0xA73A,0xA73B,0xA73C,0xA73D,0xA73E,0xA73F,0xA740,0xA741,0xA742,0xA743,0xA744,0xA745,0xA746,0xA747,0xA748,0xA749,0xA74