h,A ?0             ! "#$% & ' ( )*+,-./01 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K LMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~          !!!!!!! """""""""""""""""""""""#######$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%%%%%%%%%%%%%%%%%%%%%%%%%%%%&&&&&&&&&&&&&&''''''''''''''''''''''(((((((((((((((())))))***++++,,,,,,,,,,------------------------------------------------.....//////////////00000000000111111111112222222222222222222233333333333333333333333333333333334444444445666666666666666666666666666666666666667777777777777777777777777777778888888888888888888888888888888888889999::::::::::::::::::::::::::::;;;;;;;;;;;;;;;;;;;;;;;;;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<              = = = = = = = = = = = = = = = = = = = = = = = = > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ A A A A A A A A A A A A A B B B B B B C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C                                                         D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D D E E E E E E E E E E E E E E E F F F F F F G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G G H H H H H H H H H H H H H H I I I I I I I I I I I I I I I I I I I I I I I J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J J K K K K K K K K K K K K K K K K K K K K K K K L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L L LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOOOOOOPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPQRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUVVVVVVVVVVVVVVVVVVVVVVVVWWWWXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYZZZZZZZZZZZZZ[[[[[[[[[[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ \ ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ] ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ ` ` `!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!`!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a!a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"a"b"b"b"b"b"b"b"b"b"b"b"b"b"b"b"b"b"b"b"b"b"b"b"b"b"b"b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#b#c#c#c#c#c#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$f$g$g$h$h$h$h$h$h$h$h$h$h$h$h$h$h$h$h$h$h$h$h$h$h$h$h$h$h$h$h$h$h$h$h$h$h$h$h$h$h$h$h$h$h$h$h$h$h$h$h$h$h$h$h$h$h$h$h$h$h$h$h$h$h$h$h$h$h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%h%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i%i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i&i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i'i(i(i(i(i(i(i(i(i(i(i(i(i(i(i(i(i(i(i(i(i(i(i(i(i(i(i(i(i(i(i(i(i(i(i(i(i(i(i(i(i(i(i(i(i(i(i(i(i(i(i(i(i(i(i(i(i(i(i(i(i(i(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(j(k(k(k(k(k(k(k(k(k(k(k(k(k(k(k(k(k(k(k(k(k(k(k(k(k(k(k(k(k(k(k(k(k(k(k(k(k(k)k)k)k)k)k)k)k)k)k)k)k)k)k)k)k)k)k)k)k)k)k)k)k)k)k)k)k)k)k)k)k)k)k)k)k)k)k)k)k)k)k)k)k)k)k)k)k)k)k)k)k)k)k)k)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)l)m)m)m)m)m)m)m)m)m)m)m)m)m)m)m)m)m)m)m)m)m)m)m)m)m)m)m)m)m)m)m*m*m*m*m*m*m*m*m*m*m*m*m*m*m*m*m*m*m*m*m*m*m*n*n*n*n*n*n*n*n*n*n*n*n*n*n*n*n*n*n*n*n*n*n*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*o*p*p*p*p*p*p*p*p*p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p+p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p,p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p-p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.q.q.q.q.q.q.q.q.q.q.q.r.r.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s.s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/s/t/t/t/t/t/t/t/t/t/t/t/t/t/t/t/t/u/u/u/u/u/u/u/u/u/u/u/u/u/u/u/u/u/u/u/u/u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0u0v0v0v0v0v0v0v0v0v0v0v0v0v0v0v0v0v1v1v1v1v1v1v1v1v1v1w1w1w1w1w1w1w1w1w1w1w1w1w1w1w1w1w1w1w1w1w1w1w1w1w1w1w1w1w1w1w1w1w1w1w1w1w1w1w1w1w1w1w1w1w1w1w1w1w1w1w1w1w1w1x1x1x1x1x1x1x1x1x1x1x1x1x1x1x1x1x1x1x1x1x1x1x1x1x1x1x1x1x1x1x1x1x1x1x1x1x1x1x1x1x1x1x1x1x1x1x1x1x1x1x1x1x1x1x1x1x1y1y1y1y1y1y1y1y2y2y2y2y2y2y2y2y2y2y2y2y2y2y2y2y2y2y2y2y2y2z2z2z2z2z2z2z2z2z2z2z2z2z2z2z2z2z2z2z2z2z2z2z2z2z2z2z2z2z2z2z2z2z2z2z2z2z2z2z2z2z2z2z2z2z2z2z2z2z2z2z2z2z2z2z2z2z2z2z2{2{2{2{2{2{2{2{2{2{2{2{2{2{2{2{2{2{2{2{2{2{2{2{2|2|2|2|2|2|2|2|2|2|2|2|2|2|2|2|2|2|2|2|2|2|2|2|3|3|3|3|3|3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3}3~3~3~3~3~3~3~3~3~3~3~3~3~3~3~3~3~3~3~3~3~3~3~3~3~3~3~3~3~3~3~3~3~3~3~3~3~3~3~33333333333333333333333333333333444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444444445555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555566666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666666777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777777778888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888888899999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<================================================================================================================================>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQQRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVVWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^________________________________________________________________________________________________________________________________````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````````aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffgggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggggghhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiijjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjjkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssssttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttttuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{{||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}}~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~€ÀĀŀƀǀȀɀʀˀ̀̀΀πЀрҀӀԀՀր׀؀ـڀۀ܀݀ހ߀ÁāŁƁǁȁɁʁˁ́́΁ρЁсҁӁԁՁցׁ؁فځہ܁݁ށ߁‚ÂĂłƂǂȂɂʂ˂̂͂΂ςЂт҂ӂԂՂւׂ؂قڂۂ܂݂ނ߂ƒÃăŃƃǃȃɃʃ˃̃̓΃σЃу҃ӃԃՃփ׃؃كڃۃ܃݃ރ߃„ÄĄńƄDŽȄɄʄ˄̄̈́΄τЄф҄ӄԄՄքׄ؄لڄۄ܄݄ބ߄…ÅąŅƅDžȅɅʅ˅̅ͅ΅υЅх҅ӅԅՅօׅ؅مڅۅ܅݅ޅ߅†ÆĆņƆdžȆɆʆˆ̆͆ΆφІц҆ӆԆՆֆ׆؆نچۆ܆݆ކ߆‡ÇćŇƇLJȇɇʇˇ͇̇·χЇч҇ӇԇՇևׇ؇هڇۇ܇݇އ߇ˆÈĈňƈLjȈɈʈˈ͈̈ΈψЈш҈ӈԈՈֈ׈؈وڈۈ܈݈ވ߈‰ÉĉʼnƉljȉɉʉˉ͉̉ΉωЉщ҉ӉԉՉ։׉؉ىډۉ܉݉މ߉ŠÊĊŊƊNJȊɊʊˊ̊͊ΊϊЊъҊӊԊՊ֊׊؊يڊۊ܊݊ފߊ‹ËċŋƋNjȋɋʋˋ̋͋΋ϋЋыҋӋԋՋ֋׋؋ًڋۋ܋݋ދߋ 2.6.20240714 None&"%&'()*-/37:;<=>A14271113154Return the error corresponding to an exit code from the Agda process !  ! None&"%&'()*-/37:;<=>_2Cut off structural order comparison at some depth in termination checker?3c >= 0( means: record decrease up to including c+1.5The default termination depth.52342345 None&"%&'()*-/37:;<=>: Semirings.<Zero. The one is never used in matrix multiplication , one :: a -- ^ One.=Multiplication.> Addition.?HasZero is needed for sparse matrices, to tell which is the element that does not have to be stored. It is a cut-down version of SemiRing, which is definable without the implicit ?cutoff.CThe standard semiring on s.DThe standard semiring on s.EThe standard semiring on s. CBA?@:;>=< ?@:;>={GA constant term.H,A term with one hole and the (old) contents.I%A term with many holes (error value).FIHGFIHGNone&"%&'()*-/37:;<=>LBetter name for .MGuard: return the action f only if the boolean is TrueNGuard: return the value a only if the boolean is TrueOBranch over a  collection of values.PBranch over a 3 collection of values using the supplied action.NMOPLMNOPLNone&"%&'()*-/37:;<=>STypes isomorphic to .XBoolean algebras.`Set difference, dual to _. gjebcaifdhX]`[Y_\Z^SVWUTX`[Z^]\_YjedhgfiSUWVTacb]^None'"%&'()*-/37:;<=>? nWe have IsFibrant < IsStrict.oFibrant universe.pNon-fibrant universe.qFlavor of standard universe (Prop < Type < SSet,).r!Fibrant universe of propositions.sFibrant universe.tNon-fibrant universe.u*The successor universe type of a universe.vCompute the universe type of a function space from the universe types of domain and codomain.w Conclude u1 from  funUniv u1 u2 and u2.x Conclude u2 from  funUniv u1 u2 and u1.yFibrancy of standard universes.zHacky showing of standard universes, does not take actual names into account.wHave r?q kind of the funSort.q kind of the codomain.q kind of the domain, if unique.xq kind of the funSort.q kind of the domain.q* kind of the codomain, if uniquely exists. xwvzyunopqrts qtsrnpouvwxyzNone&"%&'()*-/37:;<=>Type of a filter for CallSiteType of an entry in a  CallStackType of a column of a SrcLocType of a line number of a SrcLocType of a filename of a SrcLoc | e.g. `srcfullAgdaUtilsFoo.hs`$Type of the name of a function in a CallSite | e.g. proveEverythingType of the module name of a SrcLoc | e.g. Type of the package name of a SrcLoc | e.g. `Agda-2.@`1The same as the un-exported internal function in %GHC.Exceptions (prettyCallStackLines) Prints like: +doFoo, called at foo.hs:190:24 in main:MainPretty-print a  CallStack". This has a few differences from GHC.Stack.prettyCallStackLines. We omit the "CallStack (from GetCallStack)" header line for brevity. If there is only one entry (which is common, due to the manual nature of the  HasCallStack constraint), shows the entry on one line. If there are multiple, then the following lines are indented.Get the most recent CallSite in a  CallStack, if there is one. CallStack! comprising only the most recent CallSite Transform a  CallStack by transforming its list of CallSite Transform a  CallStack by filtering each CallSitePops n entries off a  CallStack using  popCallStack.. Note that frozen callstacks are unaffected.!)# $" *+,-./0None&"%&'()*-/37:;<=>%The unicode replacement character  .&Is a character a surrogate code point.?Map surrogate code points to the unicode replacement character.Total function to convert an integer to a character. Maps surrogate code points to the replacement character U+FFFD.None&"%&'()*-/37:;<=>3Tokenization for environment variable substitution.~. $VARIABLE or @${VARIABLE}$.Ordinary characters.&List of environment variable bindings.Expand a telescope of environment variables (each value may refer to variables earlier in the list).Tokenize a string. The ~ is recognized as $HOME% only at the beginning of the string.Home directory.&Environment variable substitution map.Input.Output with variables and ~ (home) substituted.None&"%&'()*-/37:;<=>hNone'"%&'()*-./37:;<=> Repeat a state transition f :: a -> (b, a) with output b while condition cond on the output is true. Return all intermediate results and the final result where cond is False.(Postconditions (when it terminates): (fst (last (iterWhile cond f a)) == False. $all fst (init (interWhile cond f a)).Repeat something while a condition on some state is true. Return the last state (including the changes of the last transition, even if the condition became false then).Monadic version of .%A version of the trampoline function.The usual function iterates f :: a -> Maybe a as long as Just{}, is returned, and returns the last value of a upon Nothing.usualTrampoline f = trampolineWhile $ a -> maybe (False,a) (True,) (f a).trampolineWhile is very similar to  repeatWhile, only that it discards the state on which the condition went False;, and returns the last state on which the condition was True.Monadic version of .More general trampoline, which allows some final computation from iteration state a into result type b.Monadic version of .Iteration to fixed-point.iterateUntil r f a0 iterates endofunction f, starting with a0 , until r( relates its result to its input, i.e., f a r a.9This is the generic pattern behind saturation algorithms.If f is monotone with regard to r , meaning a r b implies f a r f b , and f-chains starting with a09 are finite then iteration is guaranteed to terminate.*A typical instance will work on sets, and r could be set inclusion, and a0 the empty set, and f- the step function of a saturation algorithm.Monadic version of . n f x applies f to x n times and returns the result.)The applications are calculated strictly.applyWhen b f a applies f to a when b.applyUnless b f a applies f to a unless b.Monadic version of  applyWhenMonadic version of  applyUnless version of . version of .None&"%&'()*-/37:;<=>Semiring with idempotent  == dioidE.g. +neutral element of compose , e.g. zeroNone&"%&'()*-/37:;<=>c ?A decoration is a functor that is traversable into any functor.The  superclass is given because of the limitations of the Haskell class system.  traverseF actually implies functoriality.Minimal complete definition:  traverseF or  distributeF. traverseF is the defining property.%Decorations commute into any functor.?Composition: pure function after functorial (monadic) function.The true pure for loop.  is a misnomer, it should be forA.#Any decoration is traversable with traverse = traverseF. Just like any 6 is a functor, so is any decoration, given by just  traverseF , a functor.Any decoration is a lens. set is a special case of dmap.0A typical decoration is pairing with some stuff.3Decorations compose. (Thus, they form a category.)%The identity functor is a decoration.   None&"%&'()*-/37:;<=> Hash tables.An empty hash table.Inserts the key and the corresponding value into the hash table.Tries to find a value corresponding to the key in the hash table."Converts the hash table to a list.5The order of the elements in the list is unspecified.None&"%&'()*-/37:;<=>(Should not be used when  could be used.Should only be used in let or where.7Unstructured pragma (Andreas, 2017-08-23, issue #2712).None&"%&'()*-/37:;<=> The function  makes every function argument, case and generator pattern, and  binding strict (except for those patterns that are marked as irrefutable, and anything in a  or :). Note that only the outermost patterns are made strict.None'"%&'()*-/37:;<=>bRRNone&"%&'()*-/37:;<=>NReturns a close function for the file together with the contents.None&"%&'()*-/37:;<=>=Action to be carried out for copying a directory recursively.Create directory if missing.Copy file if changed.copyDirContent src dest recursively copies directory src onto dest.First, a to-do list of copy actions is created. Then, the to-do list is carried out.This avoids copying files we have just created again, which can happen if src and dest( are not disjoint. (See issue #2705.)Perform scheduled .copyDirContentDryRun src dest; creates a to-do list for recursively copying directory src onto dest.copyIfChanged src dst makes sure that dst' exists and has the same content as dst. None&"%&'()*-/37:;<=>.Creates a temporary file, writes some stuff, and returns the filepath!None'"%&'()*-/37:;<=>`*A kind of exception that can be thrown by  and .#Decoding failed for the given file.Converts many character sequences which may be interpreted as line or paragraph separators into 'n'.,Strip the byte order mark (BOM) from a Text. (https://github.com/agda/agda/issues/6524 https://github.com/haskell-hvr/cassava/issues/106#issuecomment-373986176Reads a UTF8-encoded text file and converts many character sequences which may be interpreted as line or paragraph separators into 'n'.&If the file cannot be decoded, then a  is raised.Reads a UTF8-encoded text file and converts many character sequences which may be interpreted as line or paragraph separators into 'n'.&If the file cannot be decoded, then a  is raised.Writes a UTF8-encoded text file. The native convention for line endings is used.Writes a UTF8-encoded text file. The native convention for line endings is used. None&"%&'()*-/37:;<=>Read 1+, modify it strictly, and return old value. 1 1"None'"%&'()*-/37:;<=> Monads in which we can catch an "impossible" error, if possible. Catch any  exception. Catch only # exceptions selected by the filter. Version of , with argument order suiting short handlers. Version of , with argument order suiting short handlers."Impossible" errors, annotated with a file name and a line number corresponding to the source code location of the error.7We reached a program point which should be unreachable. Impossible with a different error message. Used when we reach a program point which can in principle be reached, but not for a certain run.We reached a program point without all the required primitives or BUILTIN to proceed forward. (ImpMissingDefinitions neededDefs forThisAbort by throwing an "impossible" error. You should not use this function directly. Instead use  IMPOSSIBLE Throw an  Impossible* error reporting the *caller's* call site. Throw an  Unreachable error reporting the *caller's* call site. Note that this call to "withFileAndLine" will be filtered out due its filter on the srcLocModule. #None&"%&'()*-/37:;<=>|toImpossible e extracts the  Impossible value raised via  IMPOSSIBLE to create the element e of type Empty. It proceeds by evaluating e to weak head normal form and catching the exception. We are forced to wrap things in a Maybe because of catchImpossible's type.Values of type  are not forced, because ' is used as a constructor argument in p.$None&"%&'()*-/37:;<=>̜Isomorphic to Set .not . member b.toSingleton s == Just b iff s == singleton b.The empty set. The full set.A singleton set.%None&"%&'()*-/37:;<=>ЀA set with duplicates. Faithfully stores elements which are equal with regard to (==).%The list contains all occurrences of a (not just the duplicates!). Hence, the invariant: the list is never empty.Is the bag empty?7Number of elements in the bag. Duplicates count. O(n). (bag ! a) finds all elements equal to a(. O(log n). Total function, returns [] if none are. O(log n). O(log n).Return the multiplicity of the given element. O(log n + count _ _).O(1)O(1) "insert a b = union b (singleton a) !fromList = unions . map singleton:Returns the elements of the bag, grouped by equality (==).!Returns the bag, with duplicates.#Returns the bag without duplicates.!Returns the bag, with duplicates.&None&"%&'()*-/37:;<=>e Represents a set of integers. Invariants: - All cannot be the argument to  or  - at most one  IntsBelow - at most one  IntsAbove - if `Below lo` and `Below hi`, then `lo < hi` - if `Below lo .. (Some xs)` then `all (> lo) xs` - if `Above hi .. (Some xs)` then `all (< hi - 1) xs` MembershipAll integers `< n`All integers `>= n`A single integer.From a list of integers. No integers. All integers.'If finite, return the list of elements. Invariant.  'None&"%&'()*-/37:;<=>kVan Laarhoven style homogeneous lenses. Mnemoic: "Lens outer inner", same type argument order as 'get :: o -> i'.Get inner part i of structure o as designated by  Lens' o i.Set inner part i of structure o as designated by  Lens' o i.Modify inner part i of structure o using a function i -> i.#Build a lens out of an isomorphism.8Focus on a part of the state for a stateful computation.Read a part of the state.Write a part of the state.Modify a part of the state.'Modify a part of the state monadically.?Modify a part of the state monadically, and return some result.#Modify a part of the state locally. Ask for part of read-only state./Modify a part of the state in a subcomputation."Access a map value at a given key. Focus on given element in a set.(None("%&'()*-/0137:;<=>ڗ  An index into a type-level list.4Lists indexed by a type-level list. A value of type All p [xA..xA]% is a sequence of values of types p xA, .., p xA.&Existential wrapper for indexed types.Unpacking a wrapped value./Constructing an indexed list from a plain list./Turning an indexed list back into a plain list.!Indices are just natural numbers.Mapping over an indexed list.>If you have an index you can get a lens for the given element.)Looking up an element in an indexed list.!All indices into an indexed list.)None&"%&'()*-/37:;<=>w(View source:) This is how you implement a lens for a record field.*None&"%&'()*-/37:;<=>v;Update monadically the value at one position (must exist!). Wrapper for  for convenience.Filter a map based on the keys.None&"%&'()*-/37:;<=>lRetain object when tag is . unionWith for collections of size <= 1. unionsWith for collections of size <= 1. Unzipping a list of length <= 1.Filtering a singleton list. filterMaybe p a =  ( p [a]) Version of " with different argument ordering. Version of  with different argument ordering. Often, we want to case on a %, do something interesting in the  ( case, but only a default action in the  * case. Then, the argument ordering of  caseMaybe is preferable. $caseMaybe m d f = flip (maybe d) m f with flipped branches.Monadic version of .Monadic version of .Monadic version of . That is, $ with a different argument ordering. with flipped branches.A more telling name for  for the  collection type. Or:  without the   case. without the   case. without the   case. without the   case.Lazy version of allJust  . sequence. (allJust = mapM for the Maybe/ monad.) Only executes monadic effect while isJust.Lift a maybe to an Alternative.Like , takes the prefix of a list satisfying a predicate. Returns the run of  s until the first  , and the tail of the list.  +None&"%&'()*-/37:;<=>"Simple, non-reentrant memoisation.Recursive memoisation, second argument is the value you get on recursive calls.,None&"%&'()*-/37:;<=>R/Maximum of on-negative (small) natural numbers.-None&"%&'()*-/37:;<=>Inclusion comparison wrapper.Pointwise comparison wrapper.Decidable partial orderings.6The result of comparing two things (of the same type). Less than.Less or equal than.EqualGreater or equal. Greater than.No information (incomparable).8Comparing the information content of two elements of '. More precise information is smaller.Includes equality: x  x == True. Opposites.related a po b iff related b (oppPO po) a.Combining two pieces of information (picking the least information). Used for the dominance ordering on tuples.orPO1 is associative, commutative, and idempotent. orPO has dominant element POAny, but no neutral element.Chains (transitivity)  x R y S z.seqPO1 is associative, commutative, and idempotent. seqPO has dominant element POAny and neutral element (unit) POEQ.Embed .%Represent a non-empty disjunction of s as .A ! information is a disjunction of  informations.Any  is a .+Are two elements related in a specific way? related a o b holds iff comparable a b is contained in o.1Partial ordering forms a monoid under sequencing..Less is ``less general'' (i.e., more precise).&Pointwise partial ordering for tuples.related (x1,x2) o (y1,y2) iff related x1 o x2 and related y1 o y2.$Partial ordering for disjoint sums: Left _ and Right _ are unrelated.  and   _ are unrelated.Partial ordering for Maybe a is the same as for  Either () a.4The pointwise ordering for lists of the same length.There are other partial orderings for lists, e.g., prefix, sublist, subset, lexicographic, simultaneous order.(Sets are partially ordered by inclusion.Sublist for ordered lists..None&"%&'()*-/37:;<=>?Completing POMonoids with inverses to form a Galois connection.Law: composition and inverse composition form a Galois connection. & related (inverseCompose p x) POLE y  == related x POLE (p <> y) Partially ordered monoid."Law: composition must be monotone.  related x POLE x' && related y POLE y' ==> related (x <> y) POLE (x' <> y') Partially ordered semigroup."Law: composition must be monotone.  related x POLE x' && related y POLE y' ==> related (x <> y) POLE (x' <> y') hasLeftAdjoint x checks whether  x^-1 := x  mempty is such that x  y == x^-1 <> y for any y./None&"%&'()*-/37:;<=>If f a contains many copies of a they will all be the same pointer in the result. If the function is well-behaved (i.e. preserves the implicit equivalence, this shouldn't matter).0None&"%&'()*-/37:;<=>Star semirings ( 5https://en.wikipedia.org/wiki/Semiring#Star_semirings). Semirings ( &https://en.wikipedia.org/wiki/Semiring).None&"%&'()*-/37:;<=>1None&"%&'()*-/37:;<=>. &Classification of identifier variants.Identifier ends in Integer many primes.Identifier ends in number Integer (ordinary digits).Identifier ends in number Integer (subscript digits).'Is the character one of the subscripts 'A'-'A'? Converts '0'-'9' to 'A'-'A'-Precondition: The digit needs to be in range. Converts 'A'-'A' to '0'-'9'.-Precondition: The digit needs to be in range.Increase the suffix by one. Parse suffix. Print suffix.  2None&"%&'()*-/37:;<=>Disjoint sum of three.Enum type with 3 elements.Partition a list into 3 groups.)Preserves the relative order or elements.Partition a list into 3 groups.)Preserves the relative order or elements.  None&"%&'()*-/37:;<=>Bifunctoriality for pairs. mapFst f = f -*- id mapSnd g = id -*- gLifted pairing.Monadic version of .Monadic .Monadic .{{<None&"%&'()*-/37:;<=>$Internal state for stripping suffix.Error.8"Negative string" to remove from end. List may be empty.+"Positive string" (result). Non-empty list.Append a single element at the end. Time: O(length); use only on small lists.5Case distinction for lists, with list first. O(1).Cf. 6.5Case distinction for lists, with list first. O(1).Cf. 6.4Case distinction for lists, with list last. O(1).Head function (safe). Returns a default value on empty lists. O(1). >headWithDefault 42 [] = 42 headWithDefault 42 [1,2,3] = 1Tail function (safe). O(1).Tail function (safe). Returns a default list on empty lists. O(1).Last element (safe). O(n).Last element (safe). Returns a default list on empty lists. O(n).3Last element of non-empty list (safe). O(n). last1 a as = last (a : as)"Last two elements (safe). O(n). last2' x y zs# computes the last two elements of x:y:zs . O(n).Opposite of cons (:), safe. O(1).Maybe cons. O(1). "mcons ma as = maybeToList ma ++ as and  in one go, safe. O(n). and & of non-empty list, safe. O(n). *initLast1 a as = (init (a:as), last (a:as)& of non-empty list, safe. O(n). init1 a as = init (a:as)init, safe. O(n).init, safe. O(n).*Lookup function (safe). O(min n index). A variant of  that might provide more informative error messages if the index is out of bounds.4Precondition: The index should not be out of bounds.Lookup function with default value for index out of range. O(min n index).The name is chosen akin to .Find an element satisfying a predicate and return it with its index. O(n) in the worst case, e.g. findWithIndex f xs = Nothing.%TODO: more efficient implementation!?A generalised variant of  elemIndex. O(n).downFrom n = [n-1,..1,0] . O(n).:Update the first element of a list, if it exists. O(1).9Update the last element of a list, if it exists. O(n)./Update nth element of a list, if it exists. O(min index n). Precondition: the index is >= 0.#splitExactlyAt n xs = Just (ys, zs) iff  xs = ys ++ zs and genericLength ys = n.*Drop from the end of a list. O(length). &dropEnd n = reverse . drop n . reverseForces the whole list even for n==0.Split off the largest suffix whose elements satisfy a predicate. O(n).spanEnd p xs = (ys, zs) where  xs = ys ++ zs and all p zs and #maybe True (not . p) (lastMaybe yz).Breaks a list just after1 an element satisfying the predicate is found. breakAfter1 even 1 [3,5,2,4,7,8](1 :| [3,5,2],[4,7,8])Breaks a list just after1 an element satisfying the predicate is found.breakAfter even [1,3,5,2,4,7,8]([1,3,5,2],[4,7,8])A generalized version of  takeWhile . (Cf. mapMaybe vs. filter#). @O(length . takeWhileJust f)."takeWhileJust f = fst . spanJust f.A generalized version of span. O(length . fst . spanJust f).Partition a list into  s and   s. O(n). partitionMaybe f = partitionEithers . map ( a -> maybe (Left a) Right (f a))Note:  f = snd . partitionMaybe f.Like , but additionally return the last partition of the list where the predicate is False everywhere. O(n).Like , but additionally return the last partition of the list where the function always returns Nothing . O(n).Sublist relation.dropFrom marker xs drops everything from xs starting with (and including) marker.If the marker does not appear, the string is returned unchanged.+The following two properties hold provided marker has no overlap with xs:  dropFrom marker (xs ++ marker ++ ys) == xs dropFrom marker xs == xs 7All ways of removing one element from a list. O(n).6Compute the common prefix of two lists. O(min n m).Drops from both lists simultaneously until one list is empty. O(min n m).Check if a list has a given prefix. If so, return the list minus the prefix. O(length prefix).4Compute the common suffix of two lists. O(n + m).stripSuffix suf xs = Just pre iff xs = pre ++ suf. O(n).&stripReversedSuffix rsuf xs = Just pre iff xs = pre ++ reverse suf . O(n).Returns a list with one boolean for each non-empty suffix of the list, starting with the longest suffix (the entire list). Each boolean is  exactly when every element in the corresponding suffix satisfies the predicate. An example:    AbCde( = [False, False, False, True, True] For total predicates p and finite and total lists xs the following holds:   p xs =  ( p) ( ( xs)) ,Find the longest suffix of the first string xs* that is a prefix of the second string ys. So, basically, find the overlap where the strings can be glued together. Returns the index where the overlap starts and the length of the overlap. The length of the overlap plus the index is the length of the first string. Note that in the worst case, the empty overlap  (length xs,0) is returned.)Worst-case time complexity is quadratic:  O(min(n,m)) where  n = length xs and  m = length ys.There might be asymptotically better implementations following Knuth-Morris-Pratt (KMP), but for rather short lists this is good enough.2Chop up a list in chunks of a given length. O(n).Chop a list at the positions when the predicate holds. Contrary to wordsBy, consecutive separator elements will result in an empty segment in the result. O(n). *intercalate [x] (chopWhen (== x) xs) == xsCheck membership for the same list often. Use partially applied to create membership predicate hasElem xs :: a -> Bool. First time:  O(n log n) in the worst case.Subsequently: O(log n).Specification: hasElem xs == ( xs).&Check whether a list is sorted. O(n).Assumes that the % instance implements a partial order.Check whether all consecutive elements of a list satisfy the given relation. O(n).Check whether all elements in a list are distinct from each other. Assumes that the - instance stands for an equivalence relation.O(n) in the worst case distinct xs == True.An optimised version of . O(n log n)./Precondition: The list's length must fit in an .Returns an (arbitrary) representative for each list element that occurs more than once. O(n log n).Remove the first representative for each list element. Thus, returns all duplicate copies. O(n log n).&allDuplicates xs == sort $ xs \ nub xs.Partition a list into first and later occurrences of elements (modulo some quotient given by a representation function).Time: O(n log n).Specification: nubAndDuplicatesOn f xs = (ys, xs List.\\ ys) where ys = nubOn f xsEfficient variant of nubBy for lists, using a set to store already seen elements. O(n log n)Specification: )nubOn f xs == 'nubBy' ((==) `'on'` f) xs. A variant of  that is parametrised by a function that is used to select which element from a group of equal elements that is returned. The returned elements keep the order that they had in the input list.$P Denotational equality for floating point numbers, checks bitwise equality.NOTE: Denotational equality distinguishes NaNs, so its results may vary depending on the architecture and compilation flags. Unfortunately, this is a problem with floating-point numbers in general. I guess "denotational orderings" are now a thing? The point is that we need an Ord instance which provides a total ordering, and is consistent with the denotational equality.NOTE: The ordering induced via  * is total, and is consistent with  . However, it is *deeply* unintuitive. For one, it considers all negative numbers to be larger than positive numbers. Return Just x if it's a finite number, otherwise return Nothing. Remove suffix .0$ from printed floating point number. $Decode a Double to an integer ratio. $Encode an integer ratio as a double. Decode a Double to its mantissa and its exponent, normalised such that the mantissa is the smallest possible number without loss of accuracy. Checks whether or not the Double is within a safe range of operation.The smallest representable mantissa. Simultaneously, the smallest integer which can be represented as a Double without loss of precision.The largest representable mantissa. Simultaneously, the largest integer which can be represented as a Double without loss of precision.#The largest representable exponent.$The smallest representable exponent. .Encode a mantissa and an exponent as a Double.+ + None&"%&'()*-/37:;<=>*d ,A finite map, represented as a set of pairs.%Invariant: at most one value per key.Lookup keys in the same association list often. Use partially applied to create partial function apply m :: k -> Maybe v. First time:  O(n log n) in the worst case.Subsequently: O(log n).Specification:  apply m == ( m).9O(n). Get the domain (list of keys) of the finite map.O(1). Add a new binding. Assumes the binding is not yet in the list.O(n). Update the value at a key. The key must be in the domain of the finite map. Otherwise, an internal error is raised.O(n). Delete a binding. The key must be in the domain of the finite map. Otherwise, an internal error is raised.O(n). Update the value at a key with a certain function. The key must be in the domain of the finite map. Otherwise, an internal error is raised./ Currying as b# witnesses the isomorphism between  Arrows as b and Products as -> b. It is defined as a type class rather than by recursion on a singleton for as so all of that these conversions are inlined at compile time for concrete arguments.Using IsBase we can define notions of Domains and  CoDomains. which *reduce* under positive information IsBase t ~ 'True even though the shape of t is not formally exposedIsBase t is 'True whenever t is *not* a function space.Arrows [a1,..,an] r corresponds to a1 -> .. -> an -> r | Products [a1,..,an] corresponds to (a1, (..,( an, ())..)) Version of Foldr taking a defunctionalised argument so that we can use partially applied functions.On Lists On BooleansAll p as ensures that the constraint p is satisfied by all the types in as. (Types is between scare-quotes here because the code is actually kind polymorphic)4None'"%&'()*-/137:;<=>0oA known boolean is one we can obtain a singleton for. Concrete values are trivially known."Singleton for type level booleans.5None'"%&'()*-/37:;<=>2Checks if two arguments are equal as pointers in memory. Please note, that this function is a hack, and it can worsen the behavior of compiler. See  https://gitlab.haskell.org/ghc/ghc/-/blob/d151546e59a50158f25c3df6728b00d3c27bb4b9/compiler/GHC/Builtin/primops.txt.pp#L3455.6None&"%&'()*-/37:;<=>3 Satisfying null empty == True.The default implementation of  compares with 9, first trying pointer equality, then falling back to  equality.Viewing  as  (), a boolean is  when it is false.A  is ' when it corresponds to the empty list.  7None'"%&'()*-/37:;<=>6An element in a small set.This must implement Œ and  , and contain at most 64 values. Time O(1). Time O(1).not . member a . Time O(1).The empty set. Time O(1).The full set. Time O(1).A singleton set. Time O(1). Time O(1). Time O(1). Time O(n). Time O(1). Time O(1). Time O(1). Time O(n). Time O(n). Time O(n). Time O(n). Time O(n). Time O(n). Time O(n).8None&"%&'()*-/37:;<=>7 Overloaded  singleton constructor for collections.0Create-only collection with at most one element.A create-only possibly empty collection is a monoid with the possibility to inject elements.9None&"%&'()*-/37:;<=><Given a function f :: a -> NonEmpty c9 which returns a non-empty list of characteristics of a, partition a list of as into groups such that each element in a group shares at least one characteristic with at least one other element of the group.Partition a list of as paired with a non-empty list of characteristics into groups such that each element in a group shares at least one characteristic with at least one other element of the group.Ì:Lift a function on non-empty lists to a function on lists. Duplicate of .Given a function f :: a -> NonEmpty c9 which returns a non-empty list of characteristics of a , partition a non-empty list of as into groups such that each element in a group shares at least one characteristic with at least one other element of the group.Partition a non-empty list of as paired with a non-empty list of characteristics into groups such that each element in a group shares at least one characteristic with at least one other element of the group.:None&"%&'()*-/37:;<=>A  unionWith for collections of size <= 1. Unzipping a list of length <= 1.Filtering a singleton list. filterMaybe p a =  ( p [a]) Version of " with different argument ordering. Version of  with different argument ordering. Often, we want to case on a %, do something interesting in the ( case, but only a default action in the * case. Then, the argument ordering of  caseMaybe is preferable. (caseMaybe m err f = flip (maybe err) m fMonadic version of .Monadic version of .Monadic version of . That is, $ with a different argument ordering. with flipped branches.A more telling name for  for the  collection type. Or:  without the  case. without the  case.Note that strict Maybe is an Č only modulo strictness. The laws only hold in the strict semantics. Eg. pure f  * pure _|_ = _|_#, but according to the laws for Č it should be  pure (f _|_)3. We ignore this issue here, it applies also to  and .;None&"%&'()*-/37:;<=>GFinite map from [k] to v.With the strict  type,  is also strict in v.Ō"Helper function used to implement  and .Singleton trie.everyPrefix k v! is a trie where every prefix of k (including k itself) is mapped to v.Left biased union.#union = unionWith ( new old -> new)./Pointwise union with merge function for values..Insert. Overwrites existing value if present. %insert = insertWith ( new old -> new)6Insert with function merging new value with old value..Delete value at key, but leave subtree intact.*Adjust value at key, leave subtree intact.Convert to ascending list.Convert to ascending list.Convert to list where nodes at the same level are ordered according to the given ordering.Create new values based on the entire subtrie. Almost, but not quite comonad extend.8Returns the value associated with the given key, if any.%Is the given key present in the trie?&Collect all values along a given path.(Get the subtrie rooted at the given key.Filter a trie. Key lens. Empty trie.None'"%&'()*-/37:;<=>O Lossless , opposite of .:Lift a function on non-empty lists to a function on lists.This is in essence ƌ for  , if we take [a] = Maybe (List1 a).Safe version of .%Return the last element and the rest."Last two elements (safe). O(n).Build a list with one element.More precise type for snoc. f =  ((nj ) `on` f) Ȍ  (Ɍ `on` f). O(n log n).More precise type for <. A variant of : which applies the predicate to consecutive pairs. O(n).Uu   adds double quotes around the string, replaces newline characters with n, and escapes double quotes and backslashes within the string. This is different from the behaviour of ʌ: > ˌ $ ʌ "\x2200" "\8704" > ˌ $   "\x2200" "D" (The code examples above have been tested using version 4.2.0.0 of the base library.) Turns the string into a Haskell string literal, avoiding escape codes. $Adds hyphens around the given stringputStrLn $ delimiter "Title"<@@@@ Title @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1Adds a final newline if there is not already one. -Indents every line the given number of steps. ̌, but remove empty words first. 6Show a number using comma to separate powers of 1,000. Remove leading whitespace. Remove trailing whitespace. 'Remove leading and trailing whitesapce. BNone'"%&'()*-/37:;<=>V Catch ͌s.  Print an ͌ without the call stack. #Upon exception, the state is reset. +Upon exception, the written output is lost.  Alias of Ό for the IO monad.  =None&"%&'()*-/37:;<=>Y Thing decorated with its size. The thing should fit into main memory, thus, the size is an Int. ,The size of a collection (i.e., its length). Strict size computation.Anti-patterns:  size xs == n where n is 0, 10 or another number that is likely smaller than size xs. Similar for  size xs >= 1 etc. Use   instead.See  https://wiki.haskell.org/Haskell_programming_tips#Don.27t_ask_for_the_length_of_a_list_when_you_don.27t_need_it . *Lazily compute a (possibly infinite) size.1Use when comparing a size against a fixed number. Cache the size of an object. Return the cached size.  >None&"%&'()*-/37:;<=>hj %Things that support delayed dropping. )Delayed dropping which allows undropping. Where to drop from. &Non-negative number of things to drop. 3Invert a Permutation on a partial finite int map. inversePermute perm f = f' such that permute perm f' = f!Example, with map represented as  [Maybe a]:  f = [Nothing, Just a, Just b ] perm = Perm 4 [3,0,2] f' = [ Just a , Nothing , Just b , Nothing ]  Zipping perm with f gives  [(0,a),(2,b)], after compression with  catMaybes. This is an IntMap9 which can easily written out into a substitution again. Partial permutations. Examples:)permute [1,2,0] [x0,x1,x2] = [x1,x2,x0] (proper permutation).&permute [1,0] [x0,x1,x2] = [x1,x0] (partial permuation).,permute [1,0,1,2] [x0,x1,x2] = [x1,x0,x1,x2]- (not a permutation because not invertible).Agda typing would be: 9Perm : {m : Nat}(n : Nat) -> Vec (Fin n) m -> Permutation m is the   of the permutation. 'permute [1,2,0] [x0,x1,x2] = [x1,x2,x0] More precisely, permute indices list = sublist , generates sublist from list1 by picking the elements of list as indicated by indices. *permute [1,3,0] [x0,x1,x2,x3] = [x1,x3,x0]Agda typing: ,permute (Perm {m} n is) : Vec A m -> Vec A nPrecondition for   (  _ is) xs: Every index in is must be non-negative and, if xs is finite, then every index must also be smaller than the length of xs.The implementation is supposed to be extensionally equal to the following one (if different exceptions are identified), but in some cases more efficient:  permute (  _ is) xs =  (xs <) is Identity permutation. "Restrict a permutation to work on n elements, discarding picks >=n. 9Pick the elements that are not picked by the permutation. liftP k takes a  Perm {m} n to a Perm {m+k} (n+k). Analogous to ?, but Permutations operate on de Bruijn LEVELS, not indices. 2permute (compose p1 p2) == permute p1 . permute p2  invertP err p is the inverse of p) where defined, otherwise defaults to err. composeP p (invertP err p) == p Turn a possible non-surjective permutation into a surjective permutation.  ?permute (reverseP p) xs == reverse $ permute p $ reverse xs Example:  permute (reverseP (Perm 4 [1,3,0])) [x0,x1,x2,x3] == permute (Perm 4 $ map (3-) [0,3,1]) [x0,x1,x2,x3] == permute (Perm 4 [3,0,2]) [x0,x1,x2,x3] == [x3,x0,x2] == reverse [x2,x0,x3] == reverse $ permute (Perm 4 [1,3,0]) [x3,x2,x1,x0] == reverse $ permute (Perm 4 [1,3,0]) $ reverse [x0,x1,x2,x3] With reverseP, you can convert a permutation on de Bruijn indices to one on de Bruijn levels, and vice versa. 8permPicks (flipP p) = permute p (downFrom (permRange p)) or permute (flipP (Perm n xs)) [0..n-1] = permute (Perm n xs) (downFrom n)Can be use to turn a permutation from (de Bruijn) levels to levels to one from levels to indices.See .  expandP i n  in the domain of  replace the ith element by n elements. Stable topologic sort. The first argument decides whether its first argument is an immediate parent to its second argument. Perform the dropping.  Drop more. Pick up dropped stuff.    ?None&"%&'()*-/37:;<=>oX  A set of  s Various things that can be measured when checking an Agda development. Turned on with the `--profile` flag, for instance `--profile=sharing` to turn on the   option.  ,  , and   are mutually exclusive.NOTE: Changing this data type requires bumping the interface version number in . Measure time taken by various parts of the system (type checking, serialization, etc) /Measure time spent on individual (Agda) modules 3Measure time spent on individual (Agda) definitions !Measure things related to sharing /Collect detailed statistics about serialization +Collect statistics about constraint solving %Count number of created metavariables $Measure time of interactive commands ,Collect statistics about conversion checking (Collect statistics about instance search #The empty set of profiling options. Strings accepted by  Parse and add a profiling option to a set of profiling options. Returns ό with a helpful error message if the option doesn't parse or if it's incompatible with existing options. The special string "all" adds all options compatible with the given set and prefering the first of incompatible options. So `--profile=all` sets   over   and  0, but `--profile=modules --profile=all` sets   and not  . Check if a given profiling option is present in a set of profiling options. Use only for serialization. Use only for serialization.  @None&"%&'()*-/37:;<=>q< Lists of length D2.  Unsafe! O(1).  Safe. O(1).  Safe. O(1).  Safe. O(1). Any  is either a singleton or a  . O(1).  Inverse of  . O(1). O(1). O(length first list). O(length first list).  Safe. O(1).  Safe. O(1).  Safe. O(n).  is unsafe.  None&"%&'()*-/37:;<=>v)  Loop while we have an exception. Monadic version of Ќ$ with a different argument ordering. 'Either _ b' is a functor. 'Either a' is a functor. ь is bitraversable. Note: From base >= 4.10.0.0 already present in .  Analogue of .  Analogue of .  Analogue of .  Analogue of . Safe projection from ό. 8maybeLeft (Left a) = Just a maybeLeft Right{} = Nothing Safe projection from Ҍ.  x) xs) else Nothing )Groups a list into alternating chunks of ό and Ҍ values Convert  to ь e, given an error e for the   case.  Swap tags ό and Ҍ. Q Q None&"%&'()*-/37:;<=>A  Binary bind. Strict ap Monadic guard. Monadic if-then-else. ifNotM mc = ifM (not  $ mc) Lazy monadic conjunction. Lazy monadic disjunction. Lazy monadic disjunction with Either> truth values. Returns the last error message if all fail. Lazy monadic disjunction with accumulation of errors in a monoid. Errors are discarded if we succeed. Generalized version of 8traverse_ :: Applicative m => (a -> m ()) -> [a] -> m () Executes effects and collects results in left-to-right order. Works best with left-associative monoids.!Note that there is an alternative !mapM' f t = foldr mappend mempty  $ mapM f tthat collects results in right-to-left order (effects still left-to-right). It might be preferable for right associative monoids. Generalized version of 3for_ :: Applicative m => [a] -> (a -> m ()) -> m () A monadic version of  :: (a -> Maybe b) -> [a] -> [b].  A version of  ' with a computation for the input list. The for version of  . The for version of  . A monadic version of ӌ :: (a -> Bool) -> [a] -> [a]. A monadic version of  dropWhileEnd :: (a -> Bool) -> [a] -> m [a]:. Effects happen starting at the end of the list until p becomes false. A `monadic' version of @ partition# :: (a -> Bool) -> [a] -> ([a],[a])  Translates  to . Generalises the & function from lists to an arbitrary . "Branch over elements of a monadic  data structure. Finally for the Error class. Errors in the finally part take precedence over prior errors. Try a computation, return   if an Error occurs. 1Run a command, catch the exception and return it. Like Ԍ-, but raise given error when condition fails. ;Bracket without failure. Typically used to preserve state.  Restore state after computation. Output a single value. Acquires resource. Run first.Releases resource. Run last. Computes result. Run in-between.1 1  DNone'"%&'()*-/37:;<=> .Lazy monadic computation of a list of results. Boilerplate function to lift Ռ through the   transformer.  Inverse to  . The empty lazy list. Consing a value to a lazy list. Singleton lazy list.  Case distinction over lazy list. +Folding a lazy list, effects left-to-right. Lazy monadic disjunction of lazy monadic list, effects left-to-right Lazy monadic conjunction of lazy monadic list, effects left-to-right 8Force all values in the lazy list, effects left-to-right The join operation of the ListT m monad. We can `run' a computation of a   as it is monadic itself.  Monadic cons. Monadic singleton.  Extending a monadic function to  . !Alternative implementation using  .  Change from one monad to another  ENone'"%&'()*-/37:;<=>R %Paths which are known to be absolute.Note that the  and  instances do not check if different paths point to the same files or directories.  Extract the   to be used as ֌.  Constructs  s.2Precondition: The path must be absolute and valid. Makes the path absolute.This function may raise an __IMPOSSIBLE__ error if ׌" does not return an absolute path. !Resolve symlinks etc. Preserves  . Tries to establish if the two file paths point to the same file (or directory). False negatives may be returned. Case-sensitive ، for Windows.This is case-sensitive only on the file name part, not on the directory part. (Ideally, path components coming from module name components should be checked case-sensitively and the other path components should be checked case insensitively.) True if the first file is newer than the second file. If a file doesn't exist it is considered to be infinitely old. A partial version of & with flipped arguments, returning  6 if the given path cannot be relativized to the given root. 'The absolute path we see to relativize.The root for relativization.The relative path, if any. FNone&"%&'()*-/37:;<=>% Hashes a piece of ٌ. -Hashing a module name for unique identifiers.  GNone&"%&'()*-/37:;<=> The  WarningName data enumeration is meant to have a one-to-one correspondance to existing warnings in the codebase. 8Some warning could not be set or unset. Parser Warningsڌ9From user-given directives we compute WarningMode updates 2Some warnings are errors and cannot be turned off. Unknown warning.  Warning that cannot be disabled. A  WarningMode has two components: a set of warnings to be displayed and a flag stating whether warnings should be turned into fatal errors. The defaultWarningMode is a curated set of warnings covering non-fatal errors and disabling style-related ones warningModeUpdate str computes the action of str over the current  WarningMode: it may reset the set of warnings, add or remove a specific flag or demand that any warning be turned into an error Common sets of warnings Warnings enabled by  --exact-split. The flag corresponding to a warning is precisely the name of the constructor minus the trailing underscore.  warningUsage generated using warningNameDescriptionی WarningName descriptions used for generating usage information Leave String empty to skip that name.The description should be a completion of the sentence "This warning is about ...". So, typically the subject is in plural.  HNone&"%&'()*-/37:;<=>܌List of Help Topics NOTA BENE: You need to add each new topic together with its name to  allHelpTopics Interface to the help function General usage information )Specialised usage information about TOPIC Usage information generation Conversion functions to strings  INone&"%&'()*-/37:;<=> ;Result of comparing a candidate with the current favorites. Great, you are dominating a possibly (empty list of favorites) but there is also a rest that is not dominated. If null dominated, then  notDominated2 is necessarily the complete list of favorites. .Sorry, but you are dominated by that favorite. !A list of incomparable favorites. Gosh, got some pretty a here, compare with my current favorites! Discard it if there is already one that is better or equal. (Skewed conservatively: faithful to the old favorites.) If there is no match for it, add it, and dispose of all that are worse than a.We require a partial ordering. Less is better! (Maybe paradoxically.) Compare a new set of favorites to an old one and discard the new favorites that are dominated by the old ones and vice verse. (Skewed conservatively: faithful to the old favorites.) 'compareFavorites new old = (new', old') )After comparing, do the actual insertion. %Compare, then insert accordingly. :insert a l = insertCompared a l (compareWithFavorites a l) =Insert all the favorites from the first list into the second. Construct favorites from elements of a partial order. The result depends on the order of the list if it contains equal elements, since earlier seen elements are favored over later seen equals. The first element of the list is seen first.   forms a ݌ under  and 'union. Equality checking is a bit expensive, since we need to sort! Maybe use a Set! of favorites in the first place?  JNone&"%&'()*-/37:;<=>8 Finite maps from k to v!, with a way to quickly get from v to k for certain values of type v (those for which   is defined).&Every value of this type must satisfy  . 0Partial injections from a type to some tag type.The idea is that  ( should be injective on its domain: if   x =   y =   i, then x = y. However, this property does not need to hold globally. The preconditions of the  3 operations below specify for which sets of values   must be injective. Checks if the function   is injective for the values in the given list for which the function is defined. The invariant for  . $Is the value a source key? O(log n). $Is the value a target key? O(log n). Lookup. O(log n). Inverse lookup. O(log n). Singleton map. O(1). 0Insertion. Overwrites existing values. O(log n).Precondition: See  . The precondition for   k v m: If v has a   (  v D  ), then m must not contain any mapping k' C v' for which k D k' and   v =   v'. Modifies the value at the given position, if any. If the function returns  &, then the value is removed. O(log n).The precondition for   f k m is that, if the value v is inserted into m, and   v% is defined, then no key other than k may map to a value v' for which   v' =   v. Modifies the value at the given position, if any. If the function returns  &, then the value is removed. O(log n).Precondition: See  . The precondition for   f k m is that, if the value v is inserted into m, and   v% is defined, then no key other than k may map to a value v' for which   v' =   v. Modifies the value at the given position, if any. If the function returns  &, then the value is removed. O(log n).Precondition: See  . The precondition for   f k m is that, if the value v is inserted into m, and   v% is defined, then no key other than k may map to a value v' for which   v' =   v. ;Modifies the value at the given position, if any. O(log n).Precondition: See  . The precondition for   f k m is that, if the value v is inserted into m, and   v% is defined, then no key other than k may map to a value v' for which   v' =   v. Inserts a binding into the map. If a binding for the key already exists, then the value obtained by applying the function to the key, the new value and the old value is inserted, and the old value is returned.Precondition: See  . The precondition for   f k v m is that, if the value v' is inserted into m, and   v'% is defined, then no key other than k may map to a value v'' for which   v'' =   v'. Changes all the values using the given function, which is also given access to keys. O(n log n).Precondition: See  . The precondition for   f m!: For any two distinct mappings kA C vA, kA C vA in m for which the tags of f kA vA and f kA vA are defined the values of f must be distinct (f kA vA D f kA vA). Furthermore   must be injective for { f k v | (k, v) D m }. Changes all the values using the given function, which is also given access to keys. O(n).Precondition: See  ". Note that tags must not change. The precondition for   f m is that, if m maps k to v, then   (f k v) ==   v. 0Left-biased union. For the time complexity, see .Precondition: See  . Conversion from lists of pairs. Later entries take precedence over earlier ones. O(n log n).Precondition: See  . Conversion to lists of pairs, with the keys in ascending order. O(n). #The keys, in ascending order. O(n). >The values, ordered according to the corresponding keys. O(n). Conversion from two lists that contain distinct keys/tags, with the keys/tags in ascending order. O(n).Precondition: See  . Generates input suitable for  . O(n).' ' KNone&"%&'()*-/37:;<=> =The record selector is not included in the resulting strings. The range is not forced. LNone("%&'()*-/137:;<=>? =Killing the range of an object sets all range information to  . ;If it is also possible to set the range, this is the class.Instances should satisfy   (  r x) == r. 5Things that have a range are instances of this class. 1Wrapper to indicate that range should be printed. A range is a file name, plus a sequence of intervals, assumed to point to the given file. The intervals should be consecutive and separated.1Note the invariant which ranges have to satisfy:  . An interval. The iEnd* position is not included in the interval.4Note the invariant which intervals have to satisfy:  . File information used in the  ,   and   types. 1The file's top-level module name (if applicable).This field is optional, but some things may break if the field is not instantiated with an actual top-level module name. For instance, the  and ( instances only make use of this field.The field uses  rather than  because it should be possible to instantiate it with something that is not yet defined (see ).>This '(TopLevelModuleName' Range)' should not contain a range. The file's path.  Represents a point in the input.If two positions have the same   and   components, then the final two components should be the same as well, but since this can be hard to enforce the program should not rely too much on the last two components; they are mainly there to improve error messages for the user.4Note the invariant which positions have to satisfy:  . Column number, counting from 1. Line number, counting from 1. Position, counting from 1. File. A smart constructor for  .  Sets the   components of the interval.  Gets the   component of the interval. Because of the invariant, they are both the same. 6Converts a file name and two positions to an interval. The length of an interval. The intervals that make up the range. The intervals are consecutive and separated ( ). 8Turns a file name plus a list of intervals into a range.Precondition:  . Are the intervals consecutive and separated, do they all point to the same file, and do they satisfy the interval invariant? Range invariant. "The file the range is pointing to. *The range's top-level module name, if any.If there is no range, then  ? is returned. If there is a range without a module name, then     is returned. *The range's top-level module name, if any. %Conflate a range to its right margin. *Remove ranges in keys and values of a map. ;The first position in a file: position 1, line 1, column 1. ;The first position in a file: position 1, line 1, column 1. $Ranges between two unknown positions ?Advance the position by one character. A newline character ('n') moves the position to the first character in the next line. Any other character moves the position to the next column.!Advance the position by a string.  movePosByString = foldl' movePos%Backup the position by one character.(Precondition: The character must not be 'n'.2Converts a file name and two positions to a range."Converts two positions to a range.;Precondition: The positions have to point to the same file.0Converts a file name and an interval to a range.-Converts a range to an interval, if possible.Converts a range to an interval, if possible. Note that the information about the source file is lost.?Returns the shortest continuous range containing the given one.0Removes gaps between intervals on the same line.*The initial position in the range, if any.*The initial position in the range, if any.;The position after the final position in the range, if any.;The position after the final position in the range, if any.4Finds the least interval which covers the arguments.8Precondition: The intervals must point to the same file.fuseRanges r r' unions the ranges r and r'.!Meaning it finds the least range r0 that covers r and r'.Precondition: The ranges must point to the same file (or be empty).Precondition: The ranges must point to the same file (or be empty). beginningOf r is an empty range (a single, empty interval) positioned at the beginning of r. If r" does not have a beginning, then   is returned.beginningOfFile r is an empty range (a single, empty interval) at the beginning of r's starting position's file. If there is no such position, then an empty range is returned.x `withRangeOf` y sets the range of x to the range of y.*Interleaves two streams of ranged elementsIt will report the conflicts as a list of conflicting pairs. In case of conflict, the element with the earliest start position is placed first. In case of a tie, the element with the earliest ending position is placed first. If both tie, the element from the first list is placed first. Only the   component is compared. Only the   component is compared.Precondition: The ranges of the tuple elements must point to the same file (or be empty).Precondition: The ranges of the tuple elements must point to the same file (or be empty).Precondition: The ranges of the tuple elements must point to the same file (or be empty).Precondition: The ranges of the tuple elements must point to the same file (or be empty).Precondition: The ranges of the tuple elements must point to the same file (or be empty).Precondition: The ranges of the tuple elements must point to the same file (or be empty).Precondition: The ranges of the list elements must point to the same file (or be empty).Precondition: The ranges of the list elements must point to the same file (or be empty).Overlaps with  KillRange [a].                MNone&"%&'()*-/37:;<=>#Is the highlighting "token-based", i.e. based only on information from the lexer?#A pretty name for the HTML linking. Has this DefinitionSite/ been created at the defining site of the name?The file position in that module. File positions are counted from 1.The defining module.6Syntactic aspects of the code. (These cannot overlap.)Meta information which can be associated with a character/character range.Is this entry token-based?The definition site of the annotated thing, if applicable and known.This note, if not null, can be displayed as a tool-tip or something like that. It should contain useful information about the range (like the module containing a certain identifier, or the fixity of an operator).Other aspects, generated by type checking. (These can overlap with each other and with s.).A warning that is considered fatal in the end.Unsolved constraint not connected to meta-variable. This could for instance be an emptyness constraint.Used for highlighting unreachable clauses, unreachable RHS (because of an absurd pattern), etc.8Used for shadowed repeated variable names in telescopes.When this constructor is used it is probably a good idea to include a * explaining why the pattern is incomplete.!Code which is being type-checked.Function declaration without matching definition NB: We put CatchallClause last so that it is overwritten by other, more important, aspects in the emacs mode.NameKind(s are figured out during scope checking.Bound variable.Generalizable variable. (This includes generalizable variables that have been generalized).%Inductive or coinductive constructor. Record field. Module name. Primitive. Record type.!Named argument, like x in {x = v}Macro. Symbols like forall, =, ->, etc.Things like Set and Prop.Is the name an operator part?Text occurring in pragmas that does not have a more specific aspect."Non-code contents in literate AgdaDelimiters used to separate the Agda code blocks from the other contents in literate AgdaSome #s are more informative than others.NameKind in Name can get more precise.<<None&"%&'()*-/37:;<=>While ތ- is for rendering data in Haskell syntax,  is for displaying data to the world, i.e., the user and the environment.Atomic data has no inner document structure, so just implement  as pretty a = text $ ... a ....5The type of documents. We use documents annotated by  to record syntactic highlighting information that is generated during pretty-printing.Use instead of ʌ when printing to world.1Separate, but only if both separees are not null.+Comma separated list, without the brackets.Pretty print a set.!Pretty print an association list."Pretty print a single association.Apply  to  if boolean is true.Only wrap in parens if not align max rows lays out the elements of rows in two columns, with the second components aligned. The alignment column of the second components is at most max2 characters to the right of the left-most column.Precondition: max > 0.?Handles strings with newlines properly (preserving indentation) a  ? b = hang a 2 b pshow = text . showUsed for with-like  telescopesAttach a simple , rather than a full set of , to a document.Wrap document in '...'Wrap document in "..."Wrap document in (...)Wrap document in [...]Wrap document in {...}NNone&"%&'()*-/37:;<=>ۗ"CPU time in pico (10^-12) seconds. Timestamps.The current time.Measure the time of a computation. Of course, does not work with exceptions.(Print CPU time in milli (10^-3) seconds.ONone&"%&'()*-/37:;<=>ߌThe extended parser type computes one top-level document, plus one document per encountered memoisation key.  is used to mark that a given memoisation key has been seen, but that no corresponding document has yet been stored.(Documents paired with precedence levels.An extended parser type, with some support for printing parsers.Invariant: If the boolean is , then the result must be ό something, and if the boolean is , then the result must be Ҍ something.Runs the parser.&Tries to print the parser, or returns , depending on the implementation. This function might not terminate.Parses a token satisfying the given predicate. The computed value is returned.Uses the given function to modify the printed representation (if any) of the given parser.Memoises the given parser./Every memoised parser must be annotated with a unique key. (Parametrised parsers must use distinct keys for distinct inputs.)Memoises the given parser, but only if printing, not if parsing./Every memoised parser must be annotated with a unique key. (Parametrised parsers must use distinct keys for distinct inputs.)The parser type.The parameters of the type Parser k r tok a have the following meanings: kType used for memoisation keys.rThe type of memoised values. (Yes, all memoised values have to have the same type.)tokThe token type.aThe result type.Memoised values.Continuations.State monad used by the parser. Positions.Uses the given document as the printed representation of the given parser. The document's precedence is taken to be ..Parses a token satisfying the given predicate.Parses a single token.Parses a given token.Precedence of >>=.Precedence of  |.Precedence of  *.Precedence of E and +.Precedence of atoms.A smart constructor.Extracts the parser.Extracts the documents.A helper function. Pretty-prints a memoisation key.A helper function.PNone&"%&'()*-/37:;<=>9 SCC DAGs.0The maps map SCC indices to and from SCCs/nodes.WithUniqueInt n consists of pairs of (unique) s and values of type n.2Values of this type are compared by comparing the s.Various kinds of nodes.!All nodes, with or without edges.Nodes with incoming edges.Nodes with outgoing edges.Edges.Edge label (weight).Incoming node.Outgoing node. Graph n e, is a type of directed graphs with nodes in n and edges in e.At most one edge is allowed between any two nodes. Multigraphs can be simulated by letting the edge type e be a collection type.The graphs are represented as adjacency maps (adjacency lists, but using finite maps instead of arrays and lists). This makes it possible to compute a node's outgoing edges in logarithmic time (O(log n)). However, computing the incoming edges may be more expensive.Note that neither the number of nodes nor the number of edges may exceed  :: .Forward edges.Internal invariant.If there is an edge from s to t, then  lookup s t g is   e, where e is the edge's label. O(log n).The graph's edges. O(n + e).neighbours u g consists of all nodes v" for which there is an edge from u to v in g-, along with the corresponding edge labels.  O(log n + |neighbours u g|).neighboursMap u g consists of all nodes v" for which there is an edge from u to v in g-, along with the corresponding edge labels. O(log n).edgesFrom g ns is a list containing all edges originating in the given nodes (i.e., all outgoing edges for the given nodes). If ns does not contain duplicates, then the resulting list does not contain duplicates. O(|ns| log |n| + |edgesFrom g ns|). edgesTo g ns is a list containing all edges ending in the given nodes (i.e., all incoming edges for the given nodes). If ns does not contain duplicates, then the resulting list does not contain duplicates. O(|ns | n log n).All self-loops.  O(n log n). All nodes. O(n).Nodes with outgoing edges. O(n).Nodes with incoming edges. O(n + e log n). Constructs a  structure. O(n + e log n).*Nodes without incoming or outgoing edges. O(n + e log n).Checks whether the graph is discrete (containing no edges other than  edges). O(n + e).Returns True iff the graph is acyclic.Constructs a completely disconnected graph containing the given nodes.  O(n log n).Constructs a completely disconnected graph containing the given nodes. O(n). fromEdges es$ is a graph containing the edges in es=, with the caveat that later edges overwrite earlier edges. O(|es| log n).fromEdgesWith f es$ is a graph containing the edges in es. Later edges are combined with earlier edges using the supplied function. O(|es| log n)."Empty graph (no nodes, no edges). O(1).5A graph with two nodes and a single connecting edge. O(1). Inserts an edge into the graph. O(log n). Inserts an edge into the graph. O(log n).insertWith f s t new inserts an edge from s to t3 into the graph. If there is already an edge from s to t with label old6, then this edge gets replaced by an edge with label  f new old%, and otherwise the edge's label is new. O(log n). A variant of . O(log n).Left-biased union.Time complexity: See .Union. The function is used to combine edge labels for edges that occur in both graphs (labels from the first graph are given as the first argument to the function).Time complexity:  O(nA log (nAnA + 1) + eA log eA), where nA/ is the number of nodes in the graph with the smallest number of nodes and nA0 is the number of nodes in the other graph, and eA is the number of edges in the graph with the smallest number of edges and eA+ is the number of edges in the other graph."Less complicated time complexity: O((n + e) log n (where n and e refer to the resulting graph).Union. O((n + e) log n (where n and e refer to the resulting graph).Union. The function is used to combine edge labels for edges that occur in several graphs. O((n + e) log n (where n and e refer to the resulting graph). A variant of ƌ< that provides extra information to the function argument. O(n + e).Reverses an edge. O(1)..The opposite graph (with all edges reversed). O((n + e) log n).Removes  edges. O(n + e). The graph filterNodes p g# contains exactly those nodes from g that satisfy the predicate p=. Edges to or from nodes that are removed are also removed. O(n + e).removeNodes ns g removes the nodes in ns% (and all corresponding edges) from g. O((n + e) log |ns|).removeNode n g removes the node n% (and all corresponding edges) from g. O(n + e).removeEdge s t g removes the edge going from s to t , if any. O(log n).0Keep only the edges that satisfy the predicate. O(n + e).Removes the nodes that do not satisfy the predicate from the graph, but keeps the edges: if there is a path in the original graph between two nodes that are retained, then there is a path between these two nodes also in the resulting graph.(Precondition: The graph must be acyclic.Worst-case time complexity:  O(e n log n)) (this has not been verified carefully).Renames the nodes.6Precondition: The renaming function must be injective.Time complexity: O((n + e) log n).Renames the nodes.$Precondition: The renaming function ren" must be strictly increasing (if x  y then ren x  ren y).Time complexity: O(n + e).'Combines each node label with a unique .Precondition: The number of nodes in the graph must not be larger than  :: .Time complexity: O(n + e log n).Unzips the graph. O(n + e).composeWith times plus g g' finds all edges s --c_i--> t_i --d_i--> u) and constructs the result graph from !edge(s,u) = sum_i (c_i times d_i).Complexity: For each edge s --> t in g' we look up all edges starting with t in g'.>Precondition: The two graphs must have exactly the same nodes.The graph's strongly connected components, in reverse topological order.The time complexity is likely O(n + e log n) (but this depends on the, at the time of writing undocumented, time complexity of ).The graph's strongly connected components, in reverse topological order.The time complexity is likely O(n + e log n) (but this depends on the, at the time of writing undocumented, time complexity of ). with a more precise type. invariant.The opposite DAG.'The nodes reachable from the given SCC.Constructs a DAG containing the graph's strongly connected components.Constructs a DAG containing the graph's strongly connected components.reachableFrom g n/ is a map containing all nodes reachable from n in g. For each node a simple path to the node is given, along with its length (the number of edges). The paths are as short as possible (in terms of the number of edges).Precondition: n must be a node in g<. The number of nodes in the graph must not be larger than  :: .Amortised time complexity (assuming that comparisons take constant time):  O(e log n), if the lists are not inspected. Inspection of a prefix of a list is linear in the length of the prefix.reachableFromSet g ns/ is a set containing all nodes reachable from ns in g.Precondition: Every node in ns must be a node in g<. The number of nodes in the graph must not be larger than  :: .Amortised time complexity (assuming that comparisons take constant time): O((|ns | + e) log n).Used to implement  and .#walkSatisfying every some g from to% determines if there is a walk from from to to in g/, in which every edge satisfies the predicate every(, and some edge satisfies the predicate some. If there are several such walks, then a shortest one (in terms of the number of edges) is returned.Precondition: from and to must be nodes in g<. The number of nodes in the graph must not be larger than  :: .Amortised time complexity (assuming that comparisons and the predicates take constant time to compute): O(n + e log n).Constructs a graph g', with the same nodes as the original graph g. In g' there is an edge from n1 to n2> if and only if there is a (possibly empty) simple path from n1 to n2 in g. In that case the edge is labelled with all of the longest (in terms of numbers of edges) simple paths from n1 to n2 in g), as well as the lengths of these paths.Precondition: The graph must be acyclic. The number of nodes in the graph must not be larger than  :: .>Worst-case time complexity (if the paths are not inspected):  O(e n log n)( (this has not been verified carefully).1The algorithm is based on one found on Wikipedia.Transitive closure ported from Agda.Termination.CallGraph.%Relatively efficient, see Issue 1560. Version of  that produces a list of intermediate results paired to the left with a difference that lead to the new intermediat result.The last element in the list is the transitive closure, paired with the empty graph. (complete g = snd $ last $ completeIter g-Computes the transitive closure of the graph.Uses the Gauss-Jordan-Floyd-Warshall-McNaughton-Yamada algorithm (as described by Russell O'Connor in "A Very General Method of Computing Shortest Paths"  'http://r6.ca/blog/20110808T035622Z.html), implemented using matrices.4The resulting graph does not contain any zero edges.This algorithm should be seen as a reference implementation. In practice ! is likely to be more efficient.-Computes the transitive closure of the graph.Uses the Gauss-Jordan-Floyd-Warshall-McNaughton-Yamada algorithm (as described by Russell O'Connor in "A Very General Method of Computing Shortest Paths"  'http://r6.ca/blog/20110808T035622Z.html), implemented using , and with some shortcuts:Zero edge differences are not added to the graph, thus avoiding some zero edges.Strongly connected components are used to avoid computing some zero edges.The graph's strongly connected components (in reverse topological order) are returned along with the transitive closure.The transitive closure. Using . NOTE: DO NOT USE () AS EDGE LABEL SINCE THIS MEANS EVERY EDGE IS CONSIDERED A ZERO EDGE AND NO NEW EDGES WILL BE ADDED! Use 'Maybe ()' instead.The transitive reduction of the graph: a graph with the same reachability relation as the graph, but with as few edges as possible.Precondition: The graph must be acyclic. The number of nodes in the graph must not be larger than  :: .Worst-case time complexity:  O(e n log n)) (this has not been verified carefully).1The algorithm is based on one found on Wikipedia.*The graph's strongly connected components.QNone&"%&'()*-/37:;<=>]topoligical sort with smallest-numbered available vertex first | input: nodes, edges | output is Nothing if the graph is not a DAG Note: should be stable to preserve order of generalizable variables. Algorithm due to Richard Eisenberg, and works by walking over the list left-to-right and moving each node the minimum distance left to guarantee topological ordering.None&"%&'()*-/37:;<=>Graph structureNone&"%&'()*-/37:;<=>/None&"%&'()*-/37:;<=>!)# $" *+,-./0!$ )#" *+,-./0RNone&"%&'()*-/37:;<=>'Monad with access to benchmarking data.We need to be able to terminate benchmarking in case of an exception.Benchmark structure is a trie, mapping accounts (phases and subphases) to CPU time spent on their performance./The accounts and their accumulated timing bill.!What are we billing to currently?Are we benchmarking at all?3Record when we started billing the current account.(Account we can bill computation time to.Semantic editor combinator.Semantic editor combinator.Semantic editor combinator."Add to specified CPU time account.Turn benchmarking on/off.Bill current account with time up to now. Switch to new account. Return old account (if any)..Resets the account and the timing information.Bill a computation to a specific account. Works even if the computation is aborted by an exception.;Bill a CPS function to an account. Can't handle exceptions..Bill a pure computation to a specific account.2Print benchmark as three-column table with totals.$Initial benchmark structure (empty).Maybe new account.Maybe old account. SNone&"%&'()*-/37:;<=>2#Transposable things. m extracts the diagonal of m.For non-square matrices, the length of the diagonal is the minimum of the dimensions of the matrix.6Type of matrices, parameterised on the type of values.Sparse matrices are implemented as an ordered association list, mapping coordinates to values.!Association of indices to values.Dimensions of the matrix.%Type of matrix indices (row, column). Column index 1 <= col <= cols. Row index, 1 <= row <= rows.Size of a matrix.Number of columns, >= 0.Number of rows, >= 0. iff the matrix is square.Returns  iff the matrix is empty.5Compute the matrix size of the union of two matrices. (i,)  $ f a), and same for gs and g. Instance of $ which keeps longer assoc lists.  O(n1 + n2).?General pointwise combination function for sparse matrices.  O(n1 + n2). (+) m1 m2 adds m1 and m2, using (+) to add values.  O(n1 + n2).Returns a matrix of size  m1 m2. f m1 m2! build the pointwise conjunction m1 and m2 . Uses f to combine non-zero values.  O(n1 + n2).Returns a matrix of size  infSize m1 m2."Association list intersection.  O(n1 + n2). interAssocWith f l l' = { (i, f a b) | (i,a) D l and (i,b) D l' }Used to combine sparse matrices, it might introduce zero elements if f( can return zero for non-zero arguments. semiring m1 m2 multiplies matrices m1 and m2). Uses the operations of the semiring semiring" to perform the multiplication.0O(n1 + n2 log n2 + (i <= r1) (j <= c2) d(i,j)) where r1$ is the number of non-empty rows in m1 and c2' is the number of non-empty columns in m2 and d(i,j) is the bigger one of the following two quantifies: the length of sparse row i in m1$ and the length of sparse column j in m2.Given dimensions  m1 : r1  c1 and  m2 : r2  c2, a matrix of size r1  c2* is returned. It is not necessary that c1 == r2, the matrices are implicitly patched with zeros to match up for multiplication. For sparse matrices, this patching is a no-op. x m adds a new column to m, after the columns already existing in the matrix. All elements in the new column get set to x. x m adds a new row to m, after the rows already existing in the matrix. All elements in the new row get set to x.Pointwise comparison. Only matrices with the same dimension are comparable.Diagonal of sparse matrix.O(n) where n2 is the number of non-zero elements in the matrix.Matrix transposition. O(n log n) where n2 is the number of non-zero elements in the matrix.Transposing coordinates.Size of transposed matrix.Only left map remaining.Only right map remaining.!Element only present in left map."Element only present in right map.Element present in both maps.!Element only present in left map."Element only present in right map.Element present in both maps.$Element only present in left matrix.%Element only present in right matrix.!Element present in both matrices.Result counts as zero?TNone'"%&'()*-/37:;<=>BA partial order, aimed at deciding whether a call graph gets worse during the completion.:In the paper referred to above, there is an order R with   Le  Lt.This is generalized to   'Decr k' where Decr 1 replaces Lt and Decr 0 replaces Le. A negative decrease means an increase. The generalization allows the termination checker to record an increase by 1 which can be compensated by a following decrease by 2 which results in an overall decrease.However, the termination checker of the paper itself terminates because there are only finitely many different call-matrices. To maintain termination of the terminator we set a cutoff point which determines how high the termination checker can count. This value should be set by a global or file-wise option.See Call for more information.9TODO: document orders which are call-matrices themselves.2Decrease of callee argument wrt. caller parameter.The Bool indicates whether the decrease (if any) is usable. In any chain, there needs to be one usable decrease. Unusable decreases come from SIZELT constraints which are not in inductive pattern match or a coinductive copattern match. See issue #2331.UPDATE: Andreas, 2017-07-26: Feature #2331 is unsound due to size quantification in terms. While the infrastructure for usable/unusable decrease remains in place, no unusable decreases are generated by TermCheck.No relation, infinite increase, or increase beyond termination depth.&Matrix-shaped order, currently UNUSED.$Raw increase which does not cut off.$Raw decrease which does not cut off.Smart constructor for Decr k :: Order which cuts off too big values.Possible values for k:  - ?cutoff  k  ?cutoff + 1.Smart constructor for matrix shaped orders, avoiding empty and singleton matrices.le, lt,  decreasing, unknown4: for backwards compatibility, and for external use.Usable decrease.Decreasing and usable?Matrix-shaped order is decreasing if any diagonal element is decreasing.Multiplication of .s. (Corresponds to sequential composition.) collapse mWe assume that m codes a permutation: each row has at most one column that is not Unknown.To collapse a matrix into a single value, we take the best value of each column and multiply them. That means if one column is all Unknown, i.e., no argument relates to that parameter, then the collapsed value is also Unknown.,This makes order multiplication associative.'Can two matrices be multplied together?+The supremum of a (possibly empty) list of ;s. More information (i.e., more decrease) is bigger. # is no information, thus, smallest.(, , ) forms a semiring, with  as zero and Le as one.%The infimum of a (non empty) list of $s. Gets the worst information. & is the least element, thus, dominant.Pick the worst information.We use a record for semiring instead of a type class since implicit arguments cannot occur in instance constraints, like +instance (?cutoff :: Int) => SemiRing Order.Information order:  is least information. The more we decrease, the more information we have.When having comparable call-matrices, we keep the lesser one. Call graph completion works toward losing the good calls, tending towards Unknown (the least information)./We assume the matrices have the same dimension.It does not get worse then ` increase'. If we are still decreasing, it can get worse: less decreasing.UNone'"%&'()*-/37:;<=>NSets of incomparable call matrices augmented with path information. Use overloaded , , , .,Call matrix augmented with path information.Meta info, like call path."The matrix of the (composed call).0Call matrix multiplication and call combination.Call matrices.A call matrix for a call f --> g has dimensions  ar(g)  ar(f).9Each column corresponds to one formal argument of caller f9. Each row corresponds to one argument in the call to g.In the presence of dot patterns, a call argument can be related to several different formal arguments of f. See e.g. testsucceedDotPatternTermination.agda:  data D : Nat -> Set where cz : D zero c1 : forall n -> D n -> D (suc n) c2 : forall n -> D n -> D n f : forall n -> D n -> Nat f .zero cz = zero f .(suc n) (c1 n d) = f n (c2 n d) f n (c2 .n d) = f n d 'Call matrices (without guardedness) are  -1 -1 n < suc n and n < c1 n d ? = c2 n d <= c1 n d = -1 n <= n and n < c2 n d ? -1 d < c2 n d Here is a part of the original documentation for call matrices (kept for historical reasons):This datatype encodes information about a single recursive function application. The columns of the call matrix stand for source function arguments (patterns). The rows of the matrix stand for target function arguments. Element (i, j)0 in the matrix should be computed as follows: (less than) if the j-th argument to the target; function is structurally strictly smaller than the i-th pattern. (less than or equal) if the j-th argument to the target+ function is structurally smaller than the i-th pattern. otherwise.0Call matrix indices = function argument indices.Machine integer  is sufficient, since we cannot index more arguments than we have addresses on our machine.Non-augmented call matrix.Insert into a call matrix set.Union two call matrix sets./Convert into a list of augmented call matrices.Call matrix multiplication.f --(m1)--> g --(m2)--> h is combined to f --(m2  m1)--> h9Note the reversed order of multiplication: The matrix c1 of the second call g-->h in the sequence  f-->g-->h is multiplied with the matrix c2 of the first call.Preconditions: m1 has dimensions  ar(g)  ar(f). m2 has dimensions  ar(h)  ar(g).Postcondition:  m1 >*< m2 has dimensions  ar(h)  ar(f).%Augmented call matrix multiplication.1Call matrix set product is the Cartesian product.VNone'"%&'()*-/37:;<=>W A call graph is a set of calls. Every call also has some associated meta information, which should be ݌al so that the meta information for different calls can be combined when the calls are combined.Calls are edges in the call graph. It can be labelled with several call matrices if there are several pathes from one function to another.Call graph nodes.Machine integer  is sufficient, since we cannot index more than we have addresses on our machine.!Make a call with a single matrix.Make a call with empty cinfo.Returns all the nodes with incoming edges. Somewhat expensive. O(e).Converts a call graph to a list of calls with associated meta information.Converts a list of calls with associated meta information to a call graph.#Takes the union of two call graphs.!Inserts a call into a call graph.Call graph combination.Application of  to all pairs (c1,c2) for which  c1 =  c2.)"Call graph comparison. A graph cs' is `worse' than cs if it has a new edge (call) or a call got worse, which means that one of its elements that was better or equal to Le moved a step towards Un.A call graph is complete if combining it with itself does not make it any worse. This is sound because of monotonicity: By combining a graph with itself, it can only get worse, but if it does not get worse after one such step, it gets never any worse. cs completes the call graph cs. A call graph is complete if it contains all indirect calls; if f -> g and g -> h are present in the graph, then f -> h should also be present.?Displays the recursion behaviour corresponding to a call graph. is a monoid under .: checks whether the call graph is completely disconnected.WNone'"%&'()*-/37:;<=>\2TODO: This comment seems to be partly out of date. cs( checks if the functions represented by cs terminate. The call graph cs should have one entry (&) per recursive function application.Ҍ perms: is returned if the functions are size-change terminating.,If termination can not be established, then ό problems is returned instead. Here problems contains an indication of why termination cannot be established. See lexOrder for further details.Note that this function assumes that all data types are strictly positive.The termination criterion is taken from Jones et al. In the completed call graph, each idempotent call-matrix from a function to itself must have a decreasing argument. Idempotency is wrt. matrix multiplication.This criterion is strictly more liberal than searching for a lexicographic order (and easier to implement, but harder to justify).A call c! is idempotent if it is an endo ( == ) of order 1. (Endo-calls of higher orders are e.g. argument permutations). We can test idempotency by self-composition. Self-composition c >*< c: should not make any parameter-argument relation worse.XNone&"%&'()*-/37:;<=>^Picking the appropriate set of special characters depending on whether we are allowed to use unicode or have to limit ourselves to ascii.We want to know whether we are allowed to insert unicode characters or not.Z!: Unicode characters are allowed.'false: Stick to ASCII.3Are we allowed to use unicode supscript characters?Return the glyph set based on a given (unicode or ascii) glyph mode/Choose the glyph set based on the unsafe IORef.YNone&"%&'()*-/37:;<=>b !A primitive name, defined by the  primitive block.A builtin name, defined by the BUILTIN pragma.-The class of types which can be converted to . Convert this value to a builtin.Get the identifier for this builtin, generally used for error messages. Either a  or , used for some lookups.Builtins that come without a definition in Agda syntax. These are giving names to Agda internal concepts which cannot be assigned an Agda type.,An example would be a user-defined name for Set.{-# BUILTIN TYPE Type #-} The type of Type would be Type : Level C Set which is not valid Agda.+Lookup a builtin by the string used in the BUILTIN pragma.%Lookup a primitive by its identifier.ZNone&"%&'()*-/37:;<=>n Simple Emacs Lisp expressions.Atom.List.Formats a response command. Replaces 'n'= with spaces to ensure that each command is a single line.-Writes a response command to standard output.0displayInBuffer buffername append header content displays content (with header header%) in some suitable way in the buffer  buffername. If append is True, then the content is appended to previous content (if any), otherwise any previous content is deleted.$The name of the running info buffer.Clear the running info buffer.Clear the warning bufferDisplay running information about what the type-checker is up to.  [None&"%&'()*-/37:;<=>o5Range dedicated to a keyword or fixed token sequence.Motivation: by lacking a  0 instance we indicate that it cannot be updated.Create a keyword range.\None&"%&'()*-/37:;<=>'Notation parts.&An identifier part. For instance, for _+_ the only identifier part is +.A hole: a place where argument expressions can be written. For instance, for _+_) the two underscores are holes, and for  syntax  A ( x C B) = B , A , x the variables A and B are holes. The number is the position of the hole, counting from zero. For instance, the number for A is 0, and the number for B is 1.A bound variable.The first range is the range of the variable in the right-hand side of the syntax declaration, and the second range is the range of the variable in the left-hand side./A wildcard (an underscore in binding position)..Positions of variables in syntax declarations.The position in the list of variables for this particular variable, counting from zero, and including wildcards. For instance, for "syntax F ( x _ y C A) = y ! A ! x the number for x is 0, the number for _ is 1, and the number for y is 2.The position (in the left-hand side of the syntax declaration) of the hole in which the variable is bound, counting from zero (and excluding parts that are not holes). For instance, for  syntax  A ( x C B) = B , A , x the number for x is 1, corresponding to B (0 would correspond to A).Notation as provided by the syntax declaration.RewriteEqn' qn p e represents the rewrite and irrefutable with clauses of the LHS. qn stands for the QName of the auxiliary function generated to implement the feature nm/ is the type of names for pattern variables p is the type of patterns e is the type of expressions  rewrite e with p <- e in eq  using p <- e!Coverage check? (Default is yes).!Universe check? (Default is yes).#Positivity check? (Default = True).0Termination check? (Default = TerminationCheck).Run the termination checker.#Skip termination checking (unsafe).Treat as non-terminating./Treat as terminating (unsafe). Same effect as .2Skip termination checking but use measure instead.The range of the "to" keyword. Retained for highlighting purposes.New fixity of  (optional).#To this one. Must be same kind as .Rename from this name.3An imported name can be a module or a defined name.Imported module name of type m.Imported name of type n.The using clause of import directive.No using clause given.using the specified names.The things you are allowed to say when you shuffle names between name spaces (i.e. in import,  namespace, or open declarations). Only for open. Exports the opened names from the current module. Range of the public keyword.The notation is handled as the fixity in the renamer. Hence, they are grouped together in this type.Range of the name in the fixity declaration (used for correct highlighting, see issue #2140).Fixity of operators.&Range of the whole fixity declaration.Associativity.No fixity declared.$Fixity level declared as the number. Precedence levels for operators.Placeholders are used to represent the underscores in a section.The second argument is used only (but not always) for name parts other than underscores.4The position of a name part or underscore in a name.;The following underscore is at the beginning of the name: _foo.8The following underscore is in the middle of the name: foo_bar.4The following underscore is at the end of the name: foo_.The unique identifier of an opaque block. Second argument is the top-level module identifier.A "problem" consists of a set of constraints and the same constraint can be part of multiple problems.4Meta-variable identifiers use the same structure as s.The unique identifier of a name. Second argument is the top-level module identifier.4Monoid representing the combined opaque blocks of a * containing possibly-opaque declarations.