diff options
Diffstat (limited to 'docs')
| -rw-r--r-- | docs/design.pdf | 1380 | ||||
| -rw-r--r-- | docs/design.typ | 246 | ||||
| -rw-r--r-- | docs/ideas.typ | 13 |
3 files changed, 1639 insertions, 0 deletions
diff --git a/docs/design.pdf b/docs/design.pdf new file mode 100644 index 00000000..0022972b --- /dev/null +++ b/docs/design.pdf @@ -0,0 +1,1380 @@ +%PDF-1.7 +%���� + +1 0 obj +<</Type/Pages/Count 4/Kids[245 0 R 246 0 R 247 0 R 248 0 R]>> +endobj +2 0 obj +<</Parent 11 0 R/Next 3 0 R/Title(What it is)/Dest 217 0 R>> +endobj +3 0 obj +<</Parent 11 0 R/Next 4 0 R/Prev 2 0 R/Title(The shape)/Dest 218 0 R>> +endobj +4 0 obj +<</Parent 11 0 R/Next 5 0 R/Prev 3 0 R/Title(Data structures)/Dest 219 0 R>> +endobj +5 0 obj +<</Parent 11 0 R/Next 6 0 R/Prev 4 0 R/Title(Style)/Dest 220 0 R>> +endobj +6 0 obj +<</Parent 11 0 R/Next 7 0 R/Prev 5 0 R/Title(Testing: the old program is the oracle)/Dest 221 0 R>> +endobj +7 0 obj +<</Parent 11 0 R/Next 8 0 R/Prev 6 0 R/Title(Build)/Dest 222 0 R>> +endobj +8 0 obj +<</Parent 11 0 R/Next 9 0 R/Prev 7 0 R/Title(What is deliberately absent)/Dest 223 0 R>> +endobj +9 0 obj +<</Parent 11 0 R/Next 10 0 R/Prev 8 0 R/Title(Appendix A: feature parity checklist)/Dest 224 0 R>> +endobj +10 0 obj +<</Parent 11 0 R/Prev 9 0 R/Title(middle click, pinch, touch debug overlay, PARDES_TEST PPM capture and)/Dest 225 0 R>> +endobj +11 0 obj +<</Type/Outlines/First 2 0 R/Last 10 0 R/Count 9>> +endobj +12 0 obj +<</Type/StructTreeRoot/RoleMap<</Datetime/Span/Terms/Part/Title/P/Strong/Span/Em/Span>>/K[214 0 R]/ParentTree<</Nums[0 13 0 R 1 14 0 R 2 15 0 R 3 16 0 R]>>/ParentTreeNextKey 4>> +endobj +13 0 obj +[17 0 R 19 0 R 20 0 R 21 0 R 21 0 R 21 0 R 21 0 R 22 0 R 22 0 R 22 0 R 23 0 R 25 0 R 24 0 R 25 0 R 25 0 R 25 0 R 26 0 R 30 0 R 28 0 R 30 0 R 29 0 R 30 0 R 32 0 R 34 0 R 34 0 R 34 0 R 40 0 R 37 0 R 40 0 R 40 0 R 40 0 R 38 0 R 40 0 R 40 0 R 40 0 R 39 0 R 40 0 R 41 0 R 42 0 R 50 0 R 43 0 R 50 0 R 44 0 R 50 0 R 45 0 R 50 0 R 46 0 R 50 0 R 47 0 R 50 0 R 48 0 R 50 0 R 49 0 R 50 0 R 50 0 R 50 0 R 51 0 R 53 0 R 53 0 R 52 0 R 53 0 R 53 0 R 53 0 R 53 0 R 54 0 R 64 0 R 55 0 R 64 0 R 56 0 R 64 0 R 57 0 R 64 0 R 58 0 R 64 0 R 59 0 R 64 0 R 60 0 R 64 0 R 61 0 R 64 0 R 62 0 R 64 0 R 64 0 R 63 0 R 64 0 R 64 0 R 66 0 R 65 0 R 66 0 R 67 0 R 67 0 R 67 0 R 67 0 R 67 0 R 67 0 R 67 0 R 67 0 R 67 0 R 67 0 R 67 0 R 67 0 R 67 0 R 67 0 R 67 0 R 67 0 R 67 0 R 67 0 R 67 0 R 67 0 R 67 0 R 67 0 R 68 0 R 69 0 R 69 0 R 69 0 R 69 0 R 69 0 R 69 0 R 69 0 R 69 0 R 69 0 R 69 0 R 69 0 R 69 0 R 69 0 R 69 0 R 69 0 R 69 0 R 69 0 R 70 0 R 70 0 R 70 0 R 70 0 R 70 0 R 70 0 R 70 0 R 70 0 R 70 0 R 70 0 R 70 0 R 70 0 R 70 0 R 70 0 R 70 0 R] +endobj +14 0 obj +[76 0 R 72 0 R 76 0 R 73 0 R 76 0 R 76 0 R 74 0 R 76 0 R 75 0 R 76 0 R 76 0 R 77 0 R 78 0 R 79 0 R 80 0 R 80 0 R 80 0 R 80 0 R 80 0 R 80 0 R 80 0 R 81 0 R 81 0 R 81 0 R 81 0 R 81 0 R 81 0 R 81 0 R 82 0 R 82 0 R 82 0 R 82 0 R 82 0 R 83 0 R 83 0 R 83 0 R 83 0 R 83 0 R 83 0 R 83 0 R 84 0 R 84 0 R 84 0 R 84 0 R 84 0 R 84 0 R 84 0 R 85 0 R 85 0 R 85 0 R 85 0 R 85 0 R 86 0 R 86 0 R 86 0 R 86 0 R 86 0 R 86 0 R 86 0 R 87 0 R 87 0 R 87 0 R 87 0 R 87 0 R 87 0 R 87 0 R 87 0 R 89 0 R 90 0 R 90 0 R 90 0 R 90 0 R 90 0 R 90 0 R 90 0 R 91 0 R 91 0 R 91 0 R 91 0 R 91 0 R 91 0 R 91 0 R 91 0 R 91 0 R 91 0 R 91 0 R 91 0 R 91 0 R 91 0 R 91 0 R 91 0 R 91 0 R 91 0 R 91 0 R 91 0 R 91 0 R 91 0 R 91 0 R 91 0 R 91 0 R 92 0 R 92 0 R 92 0 R 92 0 R 92 0 R 93 0 R 93 0 R 93 0 R 93 0 R 93 0 R 93 0 R 93 0 R 93 0 R 93 0 R 93 0 R 93 0 R 93 0 R 93 0 R 93 0 R 93 0 R 93 0 R 93 0 R 93 0 R 93 0 R 94 0 R 94 0 R 94 0 R 94 0 R 94 0 R 94 0 R 94 0 R 94 0 R 94 0 R 94 0 R 94 0 R 95 0 R 95 0 R 95 0 R 95 0 R 95 0 R 95 0 R 95 0 R 95 0 R 95 0 R 95 0 R 95 0 R 95 0 R 95 0 R 95 0 R 95 0 R 95 0 R 95 0 R 95 0 R 95 0 R 96 0 R 96 0 R 96 0 R 96 0 R 96 0 R 96 0 R 96 0 R 97 0 R 97 0 R 97 0 R 97 0 R 97 0 R 97 0 R 97 0 R 97 0 R 97 0 R 99 0 R 99 0 R 99 0 R 99 0 R 99 0 R 99 0 R 99 0 R 99 0 R 99 0 R 99 0 R 99 0 R 99 0 R 99 0 R 99 0 R 99 0 R 99 0 R 99 0 R 99 0 R 99 0 R 99 0 R 99 0 R 99 0 R 99 0 R 99 0 R 99 0 R 99 0 R 99 0 R 100 0 R 100 0 R 100 0 R 100 0 R 100 0 R 100 0 R 100 0 R 100 0 R 100 0 R 100 0 R 100 0 R 100 0 R 100 0 R 100 0 R 100 0 R 100 0 R 100 0 R 100 0 R 100 0 R 100 0 R 100 0 R 100 0 R 100 0 R 100 0 R 100 0 R 100 0 R 100 0 R 100 0 R 100 0 R 101 0 R 101 0 R 101 0 R 101 0 R 101 0 R 101 0 R 101 0 R 101 0 R 101 0 R 101 0 R 101 0 R 101 0 R 101 0 R 101 0 R 101 0 R 105 0 R 103 0 R 105 0 R 104 0 R 105 0 R 105 0 R 105 0 R 106 0 R 109 0 R 107 0 R 109 0 R 109 0 R 108 0 R 108 0 R 109 0 R 109 0 R 110 0 R 112 0 R 116 0 R 117 0 R 118 0 R 120 0 R 121 0 R 122 0 R 124 0 R 125 0 R 126 0 R 128 0 R 129 0 R 130 0 R 132 0 R 134 0 R 136 0 R 136 0 R 138 0 R 139 0 R 140 0 R] +endobj +15 0 obj +[143 0 R 152 0 R 144 0 R 152 0 R 145 0 R 152 0 R 152 0 R 146 0 R 152 0 R 152 0 R 152 0 R 147 0 R 152 0 R 152 0 R 148 0 R 152 0 R 152 0 R 152 0 R 149 0 R 152 0 R 150 0 R 152 0 R 151 0 R 152 0 R 154 0 R 153 0 R 154 0 R 154 0 R 154 0 R 154 0 R 154 0 R 155 0 R 155 0 R 156 0 R 157 0 R 164 0 R 158 0 R 164 0 R 159 0 R 164 0 R 160 0 R 164 0 R 164 0 R 164 0 R 161 0 R 164 0 R 162 0 R 164 0 R 164 0 R 163 0 R 164 0 R 164 0 R 164 0 R 165 0 R 169 0 R 166 0 R 169 0 R 169 0 R 169 0 R 169 0 R 167 0 R 169 0 R 168 0 R 169 0 R 170 0 R 172 0 R 171 0 R 171 0 R 172 0 R 172 0 R 173 0 R 178 0 R 178 0 R 178 0 R 178 0 R 178 0 R 178 0 R 174 0 R 178 0 R 178 0 R 178 0 R 175 0 R 178 0 R 176 0 R 178 0 R 178 0 R 177 0 R 178 0 R 179 0 R 184 0 R 184 0 R 184 0 R 180 0 R 184 0 R 184 0 R 181 0 R 184 0 R 182 0 R 184 0 R 184 0 R 183 0 R 184 0 R 184 0 R] +endobj +16 0 obj +[184 0 R 184 0 R 185 0 R 195 0 R 186 0 R 195 0 R 187 0 R 195 0 R 188 0 R 195 0 R 195 0 R 189 0 R 195 0 R 190 0 R 195 0 R 191 0 R 195 0 R 192 0 R 195 0 R 195 0 R 195 0 R 193 0 R 195 0 R 195 0 R 194 0 R 195 0 R 195 0 R 196 0 R 201 0 R 197 0 R 201 0 R 198 0 R 201 0 R 199 0 R 201 0 R 200 0 R 200 0 R 200 0 R 201 0 R 202 0 R 204 0 R 204 0 R 203 0 R 204 0 R 204 0 R 204 0 R 204 0 R 204 0 R 205 0 R 206 0 R 206 0 R 207 0 R 208 0 R 208 0 R 208 0 R 208 0 R 210 0 R 209 0 R 210 0 R 210 0 R 210 0 R 211 0 R 213 0 R 212 0 R 213 0 R 213 0 R] +endobj +17 0 obj +<</Type/StructElem/S/Strong/P 18 0 R/K[0]/Pg 245 0 R>> +endobj +18 0 obj +<</Type/StructElem/S/P/P 214 0 R/K[17 0 R]>> +endobj +19 0 obj +<</Type/StructElem/S/P/P 214 0 R/K[1]/Pg 245 0 R>> +endobj +20 0 obj +<</Type/StructElem/S/H1/P 214 0 R/T(What it is)/K[2]/Pg 245 0 R>> +endobj +21 0 obj +<</Type/StructElem/S/P/P 214 0 R/K[3 4 5 6]/Pg 245 0 R>> +endobj +22 0 obj +<</Type/StructElem/S/P/P 214 0 R/K[7 8 9]/Pg 245 0 R>> +endobj +23 0 obj +<</Type/StructElem/S/H1/P 214 0 R/T(The shape)/K[10]/Pg 245 0 R>> +endobj +24 0 obj +<</Type/StructElem/S/Strong/P 25 0 R/K[12]/Pg 245 0 R>> +endobj +25 0 obj +<</Type/StructElem/S/P/P 214 0 R/K[11 24 0 R 13 14 15]/Pg 245 0 R>> +endobj +26 0 obj +<</Type/StructElem/S/Strong/P 27 0 R/K[16]/Pg 245 0 R>> +endobj +27 0 obj +<</Type/StructElem/S/TD/P 31 0 R/A[<</O/Table/Headers[]>><</O/Layout/BorderStyle/Solid>>]/K[26 0 R]>> +endobj +28 0 obj +<</Type/StructElem/S/Code/P 30 0 R/K[18]/Pg 245 0 R>> +endobj +29 0 obj +<</Type/StructElem/S/Code/P 30 0 R/K[20]/Pg 245 0 R>> +endobj +30 0 obj +<</Type/StructElem/S/TD/P 31 0 R/A[<</O/Table/Headers[]>><</O/Layout/BorderStyle/Solid>>]/K[17 28 0 R 19 29 0 R 21]/Pg 245 0 R>> +endobj +31 0 obj +<</Type/StructElem/S/TR/P 36 0 R/K[27 0 R 30 0 R]>> +endobj +32 0 obj +<</Type/StructElem/S/Strong/P 33 0 R/K[22]/Pg 245 0 R>> +endobj +33 0 obj +<</Type/StructElem/S/TD/P 35 0 R/A[<</O/Table/Headers[]>><</O/Layout/BorderStyle/Solid>>]/K[32 0 R]>> +endobj +34 0 obj +<</Type/StructElem/S/TD/P 35 0 R/A[<</O/Table/Headers[]>><</O/Layout/BorderStyle/Solid>>]/K[23 24 25]/Pg 245 0 R>> +endobj +35 0 obj +<</Type/StructElem/S/TR/P 36 0 R/K[33 0 R 34 0 R]>> +endobj +36 0 obj +<</Type/StructElem/S/Table/P 214 0 R/A[<</O/Layout/BorderColor[0 0 0]/BorderThickness 0.4>>]/K[31 0 R 35 0 R]>> +endobj +37 0 obj +<</Type/StructElem/S/Strong/P 40 0 R/K[27]/Pg 245 0 R>> +endobj +38 0 obj +<</Type/StructElem/S/Code/P 40 0 R/K[31]/Pg 245 0 R>> +endobj +39 0 obj +<</Type/StructElem/S/Code/P 40 0 R/K[35]/Pg 245 0 R>> +endobj +40 0 obj +<</Type/StructElem/S/P/P 214 0 R/K[26 37 0 R 28 29 30 38 0 R 32 33 34 39 0 R 36]/Pg 245 0 R>> +endobj +41 0 obj +<</Type/StructElem/S/P/P 214 0 R/K[37]/Pg 245 0 R>> +endobj +42 0 obj +<</Type/StructElem/S/Strong/P 50 0 R/K[38]/Pg 245 0 R>> +endobj +43 0 obj +<</Type/StructElem/S/Code/P 50 0 R/K[40]/Pg 245 0 R>> +endobj +44 0 obj +<</Type/StructElem/S/Code/P 50 0 R/K[42]/Pg 245 0 R>> +endobj +45 0 obj +<</Type/StructElem/S/Code/P 50 0 R/K[44]/Pg 245 0 R>> +endobj +46 0 obj +<</Type/StructElem/S/Code/P 50 0 R/K[46]/Pg 245 0 R>> +endobj +47 0 obj +<</Type/StructElem/S/Code/P 50 0 R/K[48]/Pg 245 0 R>> +endobj +48 0 obj +<</Type/StructElem/S/Code/P 50 0 R/K[50]/Pg 245 0 R>> +endobj +49 0 obj +<</Type/StructElem/S/Code/P 50 0 R/K[52]/Pg 245 0 R>> +endobj +50 0 obj +<</Type/StructElem/S/P/P 214 0 R/K[42 0 R 39 43 0 R 41 44 0 R 43 45 0 R 45 46 0 R 47 47 0 R 49 48 0 R 51 49 0 R 53 54 55]/Pg 245 0 R>> +endobj +51 0 obj +<</Type/StructElem/S/Strong/P 53 0 R/K[56]/Pg 245 0 R>> +endobj +52 0 obj +<</Type/StructElem/S/Strong/P 53 0 R/K[59]/Pg 245 0 R>> +endobj +53 0 obj +<</Type/StructElem/S/P/P 214 0 R/K[51 0 R 57 58 52 0 R 60 61 62 63]/Pg 245 0 R>> +endobj +54 0 obj +<</Type/StructElem/S/Strong/P 64 0 R/K[64]/Pg 245 0 R>> +endobj +55 0 obj +<</Type/StructElem/S/Code/P 64 0 R/K[66]/Pg 245 0 R>> +endobj +56 0 obj +<</Type/StructElem/S/Code/P 64 0 R/K[68]/Pg 245 0 R>> +endobj +57 0 obj +<</Type/StructElem/S/Code/P 64 0 R/K[70]/Pg 245 0 R>> +endobj +58 0 obj +<</Type/StructElem/S/Code/P 64 0 R/K[72]/Pg 245 0 R>> +endobj +59 0 obj +<</Type/StructElem/S/Code/P 64 0 R/K[74]/Pg 245 0 R>> +endobj +60 0 obj +<</Type/StructElem/S/Code/P 64 0 R/K[76]/Pg 245 0 R>> +endobj +61 0 obj +<</Type/StructElem/S/Code/P 64 0 R/K[78]/Pg 245 0 R>> +endobj +62 0 obj +<</Type/StructElem/S/Code/P 64 0 R/K[80]/Pg 245 0 R>> +endobj +63 0 obj +<</Type/StructElem/S/Code/P 64 0 R/K[83]/Pg 245 0 R>> +endobj +64 0 obj +<</Type/StructElem/S/P/P 214 0 R/K[54 0 R 65 55 0 R 67 56 0 R 69 57 0 R 71 58 0 R 73 59 0 R 75 60 0 R 77 61 0 R 79 62 0 R 81 82 63 0 R 84 85]/Pg 245 0 R>> +endobj +65 0 obj +<</Type/StructElem/S/Code/P 66 0 R/K[87]/Pg 245 0 R>> +endobj +66 0 obj +<</Type/StructElem/S/P/P 214 0 R/K[86 65 0 R 88]/Pg 245 0 R>> +endobj +67 0 obj +<</Type/StructElem/S/P/P 71 0 R/K[89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110]/Pg 245 0 R>> +endobj +68 0 obj +<</Type/StructElem/S/P/P 71 0 R/K[111]/Pg 245 0 R>> +endobj +69 0 obj +<</Type/StructElem/S/P/P 71 0 R/K[112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128]/Pg 245 0 R>> +endobj +70 0 obj +<</Type/StructElem/S/P/P 71 0 R/K[129 130 131 132 133 134 135 136 137 138 139 140 141 142 143]/Pg 245 0 R>> +endobj +71 0 obj +<</Type/StructElem/S/Code/P 214 0 R/A[<</O/Layout/Placement/Block>>]/K[67 0 R 68 0 R 69 0 R 70 0 R]>> +endobj +72 0 obj +<</Type/StructElem/S/Code/P 76 0 R/K[1]/Pg 246 0 R>> +endobj +73 0 obj +<</Type/StructElem/S/Strong/P 76 0 R/K[3]/Pg 246 0 R>> +endobj +74 0 obj +<</Type/StructElem/S/Code/P 76 0 R/K[6]/Pg 246 0 R>> +endobj +75 0 obj +<</Type/StructElem/S/Code/P 76 0 R/K[8]/Pg 246 0 R>> +endobj +76 0 obj +<</Type/StructElem/S/P/P 214 0 R/K[0 72 0 R 2 73 0 R 4 5 74 0 R 7 75 0 R 9 10]/Pg 246 0 R>> +endobj +77 0 obj +<</Type/StructElem/S/H1/P 214 0 R/T(Data structures)/K[11]/Pg 246 0 R>> +endobj +78 0 obj +<</Type/StructElem/S/P/P 214 0 R/K[12]/Pg 246 0 R>> +endobj +79 0 obj +<</Type/StructElem/S/P/P 102 0 R/K[13]/Pg 246 0 R>> +endobj +80 0 obj +<</Type/StructElem/S/P/P 102 0 R/K[14 15 16 17 18 19 20]/Pg 246 0 R>> +endobj +81 0 obj +<</Type/StructElem/S/P/P 102 0 R/K[21 22 23 24 25 26 27]/Pg 246 0 R>> +endobj +82 0 obj +<</Type/StructElem/S/P/P 102 0 R/K[28 29 30 31 32]/Pg 246 0 R>> +endobj +83 0 obj +<</Type/StructElem/S/P/P 102 0 R/K[33 34 35 36 37 38 39]/Pg 246 0 R>> +endobj +84 0 obj +<</Type/StructElem/S/P/P 102 0 R/K[40 41 42 43 44 45 46]/Pg 246 0 R>> +endobj +85 0 obj +<</Type/StructElem/S/P/P 102 0 R/K[47 48 49 50 51]/Pg 246 0 R>> +endobj +86 0 obj +<</Type/StructElem/S/P/P 102 0 R/K[52 53 54 55 56 57 58]/Pg 246 0 R>> +endobj +87 0 obj +<</Type/StructElem/S/P/P 102 0 R/K[59 60 61 62 63 64 65 66]/Pg 246 0 R>> +endobj +88 0 obj +<</Type/StructElem/S/P/P 102 0 R/K[]>> +endobj +89 0 obj +<</Type/StructElem/S/P/P 102 0 R/K[67]/Pg 246 0 R>> +endobj +90 0 obj +<</Type/StructElem/S/P/P 102 0 R/K[68 69 70 71 72 73 74]/Pg 246 0 R>> +endobj +91 0 obj +<</Type/StructElem/S/P/P 102 0 R/K[75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99]/Pg 246 0 R>> +endobj +92 0 obj +<</Type/StructElem/S/P/P 102 0 R/K[100 101 102 103 104]/Pg 246 0 R>> +endobj +93 0 obj +<</Type/StructElem/S/P/P 102 0 R/K[105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123]/Pg 246 0 R>> +endobj +94 0 obj +<</Type/StructElem/S/P/P 102 0 R/K[124 125 126 127 128 129 130 131 132 133 134]/Pg 246 0 R>> +endobj +95 0 obj +<</Type/StructElem/S/P/P 102 0 R/K[135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153]/Pg 246 0 R>> +endobj +96 0 obj +<</Type/StructElem/S/P/P 102 0 R/K[154 155 156 157 158 159 160]/Pg 246 0 R>> +endobj +97 0 obj +<</Type/StructElem/S/P/P 102 0 R/K[161 162 163 164 165 166 167 168 169]/Pg 246 0 R>> +endobj +98 0 obj +<</Type/StructElem/S/P/P 102 0 R/K[]>> +endobj +99 0 obj +<</Type/StructElem/S/P/P 102 0 R/K[170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196]/Pg 246 0 R>> +endobj +100 0 obj +<</Type/StructElem/S/P/P 102 0 R/K[197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225]/Pg 246 0 R>> +endobj +101 0 obj +<</Type/StructElem/S/P/P 102 0 R/K[226 227 228 229 230 231 232 233 234 235 236 237 238 239 240]/Pg 246 0 R>> +endobj +102 0 obj +<</Type/StructElem/S/Code/P 214 0 R/A[<</O/Layout/Placement/Block>>]/K[79 0 R 80 0 R 81 0 R 82 0 R 83 0 R 84 0 R 85 0 R 86 0 R 87 0 R 88 0 R 89 0 R 90 0 R 91 0 R 92 0 R 93 0 R 94 0 R 95 0 R 96 0 R 97 0 R 98 0 R 99 0 R 100 0 R 101 0 R]>> +endobj +103 0 obj +<</Type/StructElem/S/Code/P 105 0 R/K[242]/Pg 246 0 R>> +endobj +104 0 obj +<</Type/StructElem/S/Code/P 105 0 R/K[244]/Pg 246 0 R>> +endobj +105 0 obj +<</Type/StructElem/S/P/P 214 0 R/K[241 103 0 R 243 104 0 R 245 246 247]/Pg 246 0 R>> +endobj +106 0 obj +<</Type/StructElem/S/H1/P 214 0 R/T(Style)/K[248]/Pg 246 0 R>> +endobj +107 0 obj +<</Type/StructElem/S/Code/P 109 0 R/K[250]/Pg 246 0 R>> +endobj +108 0 obj +<</Type/StructElem/S/Code/P 109 0 R/K[253 254]/Pg 246 0 R>> +endobj +109 0 obj +<</Type/StructElem/S/P/P 214 0 R/K[249 107 0 R 251 252 108 0 R 255 256]/Pg 246 0 R>> +endobj +110 0 obj +<</Type/StructElem/S/Strong/P 111 0 R/K[257]/Pg 246 0 R>> +endobj +111 0 obj +<</Type/StructElem/S/TD/P 115 0 R/A[<</O/Table/Headers[]>><</O/Layout/BorderStyle/Solid>>]/K[110 0 R]>> +endobj +112 0 obj +<</Type/StructElem/S/Strong/P 113 0 R/K[258]/Pg 246 0 R>> +endobj +113 0 obj +<</Type/StructElem/S/TD/P 115 0 R/A[<</O/Table/Headers[]>><</O/Layout/BorderStyle/Solid>>]/K[112 0 R]>> +endobj +114 0 obj +<</Type/StructElem/S/TD/P 115 0 R/A[<</O/Table/Headers[]>><</O/Layout/BorderStyle/Solid>>]/K[]>> +endobj +115 0 obj +<</Type/StructElem/S/TR/P 142 0 R/K[111 0 R 113 0 R 114 0 R]>> +endobj +116 0 obj +<</Type/StructElem/S/TD/P 119 0 R/A[<</O/Table/Headers[]>><</O/Layout/BorderStyle/Solid>>]/K[259]/Pg 246 0 R>> +endobj +117 0 obj +<</Type/StructElem/S/TD/P 119 0 R/A[<</O/Table/Headers[]>><</O/Layout/BorderStyle/Solid>>]/K[260]/Pg 246 0 R>> +endobj +118 0 obj +<</Type/StructElem/S/TD/P 119 0 R/A[<</O/Table/Headers[]>><</O/Layout/BorderStyle/Solid>>]/K[261]/Pg 246 0 R>> +endobj +119 0 obj +<</Type/StructElem/S/TR/P 142 0 R/K[116 0 R 117 0 R 118 0 R]>> +endobj +120 0 obj +<</Type/StructElem/S/TD/P 123 0 R/A[<</O/Table/Headers[]>><</O/Layout/BorderStyle/Solid>>]/K[262]/Pg 246 0 R>> +endobj +121 0 obj +<</Type/StructElem/S/TD/P 123 0 R/A[<</O/Table/Headers[]>><</O/Layout/BorderStyle/Solid>>]/K[263]/Pg 246 0 R>> +endobj +122 0 obj +<</Type/StructElem/S/TD/P 123 0 R/A[<</O/Table/Headers[]>><</O/Layout/BorderStyle/Solid>>]/K[264]/Pg 246 0 R>> +endobj +123 0 obj +<</Type/StructElem/S/TR/P 142 0 R/K[120 0 R 121 0 R 122 0 R]>> +endobj +124 0 obj +<</Type/StructElem/S/TD/P 127 0 R/A[<</O/Table/Headers[]>><</O/Layout/BorderStyle/Solid>>]/K[265]/Pg 246 0 R>> +endobj +125 0 obj +<</Type/StructElem/S/TD/P 127 0 R/A[<</O/Table/Headers[]>><</O/Layout/BorderStyle/Solid>>]/K[266]/Pg 246 0 R>> +endobj +126 0 obj +<</Type/StructElem/S/TD/P 127 0 R/A[<</O/Table/Headers[]>><</O/Layout/BorderStyle/Solid>>]/K[267]/Pg 246 0 R>> +endobj +127 0 obj +<</Type/StructElem/S/TR/P 142 0 R/K[124 0 R 125 0 R 126 0 R]>> +endobj +128 0 obj +<</Type/StructElem/S/TD/P 131 0 R/A[<</O/Table/Headers[]>><</O/Layout/BorderStyle/Solid>>]/K[268]/Pg 246 0 R>> +endobj +129 0 obj +<</Type/StructElem/S/TD/P 131 0 R/A[<</O/Table/Headers[]>><</O/Layout/BorderStyle/Solid>>]/K[269]/Pg 246 0 R>> +endobj +130 0 obj +<</Type/StructElem/S/TD/P 131 0 R/A[<</O/Table/Headers[]>><</O/Layout/BorderStyle/Solid>>]/K[270]/Pg 246 0 R>> +endobj +131 0 obj +<</Type/StructElem/S/TR/P 142 0 R/K[128 0 R 129 0 R 130 0 R]>> +endobj +132 0 obj +<</Type/StructElem/S/Strong/P 133 0 R/K[271]/Pg 246 0 R>> +endobj +133 0 obj +<</Type/StructElem/S/TD/P 137 0 R/A[<</O/Table/Headers[]>><</O/Layout/BorderStyle/Solid>>]/K[132 0 R]>> +endobj +134 0 obj +<</Type/StructElem/S/Strong/P 135 0 R/K[272]/Pg 246 0 R>> +endobj +135 0 obj +<</Type/StructElem/S/TD/P 137 0 R/A[<</O/Table/Headers[]>><</O/Layout/BorderStyle/Solid>>]/K[134 0 R]>> +endobj +136 0 obj +<</Type/StructElem/S/TD/P 137 0 R/A[<</O/Table/Headers[]>><</O/Layout/BorderStyle/Solid>>]/K[273 274]/Pg 246 0 R>> +endobj +137 0 obj +<</Type/StructElem/S/TR/P 142 0 R/K[133 0 R 135 0 R 136 0 R]>> +endobj +138 0 obj +<</Type/StructElem/S/TD/P 141 0 R/A[<</O/Table/Headers[]>><</O/Layout/BorderStyle/Solid>>]/K[275]/Pg 246 0 R>> +endobj +139 0 obj +<</Type/StructElem/S/TD/P 141 0 R/A[<</O/Table/Headers[]>><</O/Layout/BorderStyle/Solid>>]/K[276]/Pg 246 0 R>> +endobj +140 0 obj +<</Type/StructElem/S/TD/P 141 0 R/A[<</O/Table/Headers[]>><</O/Layout/BorderStyle/Solid>>]/K[277]/Pg 246 0 R>> +endobj +141 0 obj +<</Type/StructElem/S/TR/P 142 0 R/K[138 0 R 139 0 R 140 0 R]>> +endobj +142 0 obj +<</Type/StructElem/S/Table/P 214 0 R/A[<</O/Layout/BorderColor[0 0 0]/BorderThickness 0.4>>]/K[115 0 R 119 0 R 123 0 R 127 0 R 131 0 R 137 0 R 141 0 R]>> +endobj +143 0 obj +<</Type/StructElem/S/H1/P 214 0 R/T(Testing: the old program is the oracle)/K[0]/Pg 247 0 R>> +endobj +144 0 obj +<</Type/StructElem/S/Code/P 152 0 R/K[2]/Pg 247 0 R>> +endobj +145 0 obj +<</Type/StructElem/S/Code/P 152 0 R/K[4]/Pg 247 0 R>> +endobj +146 0 obj +<</Type/StructElem/S/Strong/P 152 0 R/K[7]/Pg 247 0 R>> +endobj +147 0 obj +<</Type/StructElem/S/Code/P 152 0 R/K[11]/Pg 247 0 R>> +endobj +148 0 obj +<</Type/StructElem/S/Code/P 152 0 R/K[14]/Pg 247 0 R>> +endobj +149 0 obj +<</Type/StructElem/S/Code/P 152 0 R/K[18]/Pg 247 0 R>> +endobj +150 0 obj +<</Type/StructElem/S/Code/P 152 0 R/K[20]/Pg 247 0 R>> +endobj +151 0 obj +<</Type/StructElem/S/Code/P 152 0 R/K[22]/Pg 247 0 R>> +endobj +152 0 obj +<</Type/StructElem/S/P/P 214 0 R/K[1 144 0 R 3 145 0 R 5 6 146 0 R 8 9 10 147 0 R 12 13 148 0 R 15 16 17 149 0 R 19 150 0 R 21 151 0 R 23]/Pg 247 0 R>> +endobj +153 0 obj +<</Type/StructElem/S/Code/P 154 0 R/K[25]/Pg 247 0 R>> +endobj +154 0 obj +<</Type/StructElem/S/P/P 214 0 R/K[24 153 0 R 26 27 28 29 30]/Pg 247 0 R>> +endobj +155 0 obj +<</Type/StructElem/S/P/P 214 0 R/K[31 32]/Pg 247 0 R>> +endobj +156 0 obj +<</Type/StructElem/S/H1/P 214 0 R/T(Build)/K[33]/Pg 247 0 R>> +endobj +157 0 obj +<</Type/StructElem/S/Code/P 164 0 R/K[34]/Pg 247 0 R>> +endobj +158 0 obj +<</Type/StructElem/S/Code/P 164 0 R/K[36]/Pg 247 0 R>> +endobj +159 0 obj +<</Type/StructElem/S/Code/P 164 0 R/K[38]/Pg 247 0 R>> +endobj +160 0 obj +<</Type/StructElem/S/Code/P 164 0 R/K[40]/Pg 247 0 R>> +endobj +161 0 obj +<</Type/StructElem/S/Code/P 164 0 R/K[44]/Pg 247 0 R>> +endobj +162 0 obj +<</Type/StructElem/S/Code/P 164 0 R/K[46]/Pg 247 0 R>> +endobj +163 0 obj +<</Type/StructElem/S/Code/P 164 0 R/K[49]/Pg 247 0 R>> +endobj +164 0 obj +<</Type/StructElem/S/P/P 214 0 R/K[157 0 R 35 158 0 R 37 159 0 R 39 160 0 R 41 42 43 161 0 R 45 162 0 R 47 48 163 0 R 50 51 52]/Pg 247 0 R>> +endobj +165 0 obj +<</Type/StructElem/S/H1/P 214 0 R/T(What is deliberately absent)/K[53]/Pg 247 0 R>> +endobj +166 0 obj +<</Type/StructElem/S/Strong/P 169 0 R/K[55]/Pg 247 0 R>> +endobj +167 0 obj +<</Type/StructElem/S/Code/P 169 0 R/K[60]/Pg 247 0 R>> +endobj +168 0 obj +<</Type/StructElem/S/Code/P 169 0 R/K[62]/Pg 247 0 R>> +endobj +169 0 obj +<</Type/StructElem/S/P/P 214 0 R/K[54 166 0 R 56 57 58 59 167 0 R 61 168 0 R 63]/Pg 247 0 R>> +endobj +170 0 obj +<</Type/StructElem/S/H1/P 214 0 R/T(Appendix A: feature parity checklist)/K[64]/Pg 247 0 R>> +endobj +171 0 obj +<</Type/StructElem/S/Code/P 172 0 R/K[66 67]/Pg 247 0 R>> +endobj +172 0 obj +<</Type/StructElem/S/P/P 214 0 R/K[65 171 0 R 68 69]/Pg 247 0 R>> +endobj +173 0 obj +<</Type/StructElem/S/Strong/P 178 0 R/K[70]/Pg 247 0 R>> +endobj +174 0 obj +<</Type/StructElem/S/Code/P 178 0 R/K[77]/Pg 247 0 R>> +endobj +175 0 obj +<</Type/StructElem/S/Code/P 178 0 R/K[81]/Pg 247 0 R>> +endobj +176 0 obj +<</Type/StructElem/S/Code/P 178 0 R/K[83]/Pg 247 0 R>> +endobj +177 0 obj +<</Type/StructElem/S/Code/P 178 0 R/K[86]/Pg 247 0 R>> +endobj +178 0 obj +<</Type/StructElem/S/P/P 214 0 R/K[173 0 R 71 72 73 74 75 76 174 0 R 78 79 80 175 0 R 82 176 0 R 84 85 177 0 R 87]/Pg 247 0 R>> +endobj +179 0 obj +<</Type/StructElem/S/Strong/P 184 0 R/K[88]/Pg 247 0 R>> +endobj +180 0 obj +<</Type/StructElem/S/Code/P 184 0 R/K[92]/Pg 247 0 R>> +endobj +181 0 obj +<</Type/StructElem/S/Code/P 184 0 R/K[95]/Pg 247 0 R>> +endobj +182 0 obj +<</Type/StructElem/S/Code/P 184 0 R/K[97]/Pg 247 0 R>> +endobj +183 0 obj +<</Type/StructElem/S/Code/P 184 0 R/K[100]/Pg 247 0 R>> +endobj +184 0 obj +<</Type/StructElem/S/P/P 214 0 R/K[179 0 R 89 90 91 180 0 R 93 94 181 0 R 96 182 0 R 98 99 183 0 R 101 102<</Type/MCR/MCID 0/Pg 248 0 R>><</Type/MCR/MCID 1/Pg 248 0 R>>]/Pg 247 0 R>> +endobj +185 0 obj +<</Type/StructElem/S/Strong/P 195 0 R/K[2]/Pg 248 0 R>> +endobj +186 0 obj +<</Type/StructElem/S/Code/P 195 0 R/K[4]/Pg 248 0 R>> +endobj +187 0 obj +<</Type/StructElem/S/Code/P 195 0 R/K[6]/Pg 248 0 R>> +endobj +188 0 obj +<</Type/StructElem/S/Code/P 195 0 R/K[8]/Pg 248 0 R>> +endobj +189 0 obj +<</Type/StructElem/S/Code/P 195 0 R/K[11]/Pg 248 0 R>> +endobj +190 0 obj +<</Type/StructElem/S/Code/P 195 0 R/K[13]/Pg 248 0 R>> +endobj +191 0 obj +<</Type/StructElem/S/Code/P 195 0 R/K[15]/Pg 248 0 R>> +endobj +192 0 obj +<</Type/StructElem/S/Code/P 195 0 R/K[17]/Pg 248 0 R>> +endobj +193 0 obj +<</Type/StructElem/S/Code/P 195 0 R/K[21]/Pg 248 0 R>> +endobj +194 0 obj +<</Type/StructElem/S/Code/P 195 0 R/K[24]/Pg 248 0 R>> +endobj +195 0 obj +<</Type/StructElem/S/P/P 214 0 R/K[185 0 R 3 186 0 R 5 187 0 R 7 188 0 R 9 10 189 0 R 12 190 0 R 14 191 0 R 16 192 0 R 18 19 20 193 0 R 22 23 194 0 R 25 26]/Pg 248 0 R>> +endobj +196 0 obj +<</Type/StructElem/S/Strong/P 201 0 R/K[27]/Pg 248 0 R>> +endobj +197 0 obj +<</Type/StructElem/S/Code/P 201 0 R/K[29]/Pg 248 0 R>> +endobj +198 0 obj +<</Type/StructElem/S/Code/P 201 0 R/K[31]/Pg 248 0 R>> +endobj +199 0 obj +<</Type/StructElem/S/Code/P 201 0 R/K[33]/Pg 248 0 R>> +endobj +200 0 obj +<</Type/StructElem/S/Code/P 201 0 R/K[35 36 37]/Pg 248 0 R>> +endobj +201 0 obj +<</Type/StructElem/S/P/P 214 0 R/K[196 0 R 28 197 0 R 30 198 0 R 32 199 0 R 34 200 0 R 38]/Pg 248 0 R>> +endobj +202 0 obj +<</Type/StructElem/S/Strong/P 204 0 R/K[39]/Pg 248 0 R>> +endobj +203 0 obj +<</Type/StructElem/S/Code/P 204 0 R/K[42]/Pg 248 0 R>> +endobj +204 0 obj +<</Type/StructElem/S/P/P 214 0 R/K[202 0 R 40 41 203 0 R 43 44 45 46 47]/Pg 248 0 R>> +endobj +205 0 obj +<</Type/StructElem/S/Strong/P 206 0 R/K[48]/Pg 248 0 R>> +endobj +206 0 obj +<</Type/StructElem/S/P/P 214 0 R/K[205 0 R 49 50]/Pg 248 0 R>> +endobj +207 0 obj +<</Type/StructElem/S/Strong/P 208 0 R/K[51]/Pg 248 0 R>> +endobj +208 0 obj +<</Type/StructElem/S/P/P 214 0 R/K[207 0 R 52 53 54 55]/Pg 248 0 R>> +endobj +209 0 obj +<</Type/StructElem/S/Code/P 210 0 R/K[57]/Pg 248 0 R>> +endobj +210 0 obj +<</Type/StructElem/S/H1/P 214 0 R/T(middle click, pinch, touch debug overlay, PARDES_TEST PPM capture and)/K[56 209 0 R 58 59 60]/Pg 248 0 R>> +endobj +211 0 obj +<</Type/StructElem/S/Code/P 213 0 R/K[61]/Pg 248 0 R>> +endobj +212 0 obj +<</Type/StructElem/S/Strong/P 213 0 R/K[63]/Pg 248 0 R>> +endobj +213 0 obj +<</Type/StructElem/S/P/P 214 0 R/K[211 0 R 62 212 0 R 64 65]/Pg 248 0 R>> +endobj +214 0 obj +<</Type/StructElem/S/Document/P 12 0 R/K[18 0 R 19 0 R 20 0 R 21 0 R 22 0 R 23 0 R 25 0 R 36 0 R 40 0 R 41 0 R 50 0 R 53 0 R 64 0 R 66 0 R 71 0 R 76 0 R 77 0 R 78 0 R 102 0 R 105 0 R 106 0 R 109 0 R 142 0 R 143 0 R 152 0 R 154 0 R 155 0 R 156 0 R 164 0 R 165 0 R 169 0 R 170 0 R 172 0 R 178 0 R 184 0 R 195 0 R 201 0 R 204 0 R 206 0 R 208 0 R 210 0 R 213 0 R]>> +endobj +215 0 obj +[/ICCBased 268 0 R] +endobj +216 0 obj +[/ICCBased 269 0 R] +endobj +217 0 obj +[245 0 R/XYZ 62.362206 729.37256 0] +endobj +218 0 obj +[245 0 R/XYZ 62.362206 590.0229 0] +endobj +219 0 obj +[246 0 R/XYZ 62.362206 733.7516 0] +endobj +220 0 obj +[246 0 R/XYZ 62.362206 342.88815 0] +endobj +221 0 obj +[247 0 R/XYZ 62.362206 789.5276 0] +endobj +222 0 obj +[247 0 R/XYZ 62.362206 546.3959 0] +endobj +223 0 obj +[247 0 R/XYZ 62.362206 426.81766 0] +endobj +224 0 obj +[247 0 R/XYZ 62.362206 335.20096 0] +endobj +225 0 obj +[248 0 R/XYZ 62.362206 411.61353 0] +endobj +226 0 obj +<</ProcSet[/PDF/Text/ImageC/ImageB]/ColorSpace<</c0 215 0 R/c1 216 0 R>>/Font<</f0 230 0 R/f1 233 0 R/f2 236 0 R>>>> +endobj +227 0 obj +<</ProcSet[/PDF/Text/ImageC/ImageB]/ColorSpace<</c0 215 0 R/c1 216 0 R>>/Font<</f0 233 0 R/f1 236 0 R/f2 230 0 R>>>> +endobj +228 0 obj +<</ProcSet[/PDF/Text/ImageC/ImageB]/ColorSpace<</c0 215 0 R>>/Font<</f0 230 0 R/f1 233 0 R/f2 236 0 R/f3 239 0 R>>>> +endobj +229 0 obj +<</ProcSet[/PDF/Text/ImageC/ImageB]/ColorSpace<</c0 215 0 R>>/Font<</f0 233 0 R/f1 230 0 R/f2 236 0 R/f3 242 0 R>>>> +endobj +230 0 obj +<</Type/Font/Subtype/Type0/BaseFont/PNVZNM+NewCM10-Bold-Identity-H/Encoding/Identity-H/DescendantFonts[231 0 R]/ToUnicode 250 0 R>> +endobj +231 0 obj +<</Type/Font/Subtype/CIDFontType0/BaseFont/PNVZNM+NewCM10-Bold/CIDSystemInfo<</Registry(Adobe)/Ordering(Identity)/Supplement 0>>/FontDescriptor 232 0 R/DW 0/W[0 0 280 1 1 786 2 2 559 3 3 474 4 4 639 5 5 527 6 6 454 7 7 319 8 8 383 9 9 869 10 10 800 11 11 607 12 12 447 13 13 756 14 14 639 15 15 607 16 16 319 17 17 575 18 18 958 19 19 1189 20 21 639 22 22 319 23 23 639 24 24 607 25 25 510.99997 26 26 831 27 28 639 29 29 351 30 30 671 31 31 607 32 32 882 33 33 575 34 34 319 35 37 575 38 38 818 39 39 692 40 40 319 41 41 1092 42 42 831 43 44 447 45 45 383]>> +endobj +232 0 obj +<</Type/FontDescriptor/FontName/PNVZNM+NewCM10-Bold/Flags 131076/FontBBox[13 -249 1164 750]/ItalicAngle 0/Ascent 806/Descent -194/CapHeight 686/StemV 168.6/CIDSet 249 0 R/FontFile3 251 0 R>> +endobj +233 0 obj +<</Type/Font/Subtype/Type0/BaseFont/IZZBXO+NewCM10-Regular-Identity-H/Encoding/Identity-H/DescendantFonts[234 0 R]/ToUnicode 253 0 R>> +endobj +234 0 obj +<</Type/Font/Subtype/CIDFontType0/BaseFont/IZZBXO+NewCM10-Regular/CIDSystemInfo<</Registry(Adobe)/Ordering(Identity)/Supplement 0>>/FontDescriptor 235 0 R/DW 0/W[0 0 500 1 1 556 2 2 444 3 3 394 4 4 278 5 5 500 6 6 556 7 7 333 8 8 306 9 9 500 10 10 392 11 11 389 12 12 556 13 13 722 14 14 1000 15 17 500 18 18 333 19 20 500 21 21 681 22 22 500 23 24 528 25 25 833 26 26 444 27 28 278 29 30 556 31 31 278 32 32 556 33 33 528 34 34 278 35 35 556 36 36 278 37 37 722 38 38 686 39 39 528 40 40 681 41 41 528 42 42 361 43 44 389 45 45 556 46 46 764 47 47 625 48 48 500 49 49 778 50 50 444 51 52 750 53 53 778 54 54 278 55 55 583 56 56 500 57 57 750 58 58 500 59 59 750 60 60 306 61 61 736 62 62 785 63 63 708 64 64 917 65 65 556 66 66 500 67 67 611 68 69 500 70 70 778 71 71 750 72 72 722 73 73 1000 74 74 653 75 75 1028 76 76 514]>> +endobj +235 0 obj +<</Type/FontDescriptor/FontName/IZZBXO+NewCM10-Regular/Flags 131076/FontBBox[-41 -260 1009 760]/ItalicAngle 0/Ascent 806/Descent -194/CapHeight 683/StemV 95.4/CIDSet 252 0 R/FontFile3 254 0 R>> +endobj +236 0 obj +<</Type/Font/Subtype/Type0/BaseFont/EFHJNG+DejaVuSansMono/Encoding/Identity-H/DescendantFonts[237 0 R]/ToUnicode 256 0 R>> +endobj +237 0 obj +<</Type/Font/Subtype/CIDFontType2/BaseFont/EFHJNG+DejaVuSansMono/CIDSystemInfo<</Registry(Adobe)/Ordering(Identity)/Supplement 0>>/FontDescriptor 238 0 R/DW 0/CIDToGIDMap/Identity/W[0 78 602.0508]>> +endobj +238 0 obj +<</Type/FontDescriptor/FontName/EFHJNG+DejaVuSansMono/Flags 131077/FontBBox[0 -235.83984 602.0508 844.2383]/ItalicAngle 0/Ascent 759.7656/Descent -240.23438/CapHeight 759.7656/StemV 95.4/CIDSet 255 0 R/FontFile2 257 0 R>> +endobj +239 0 obj +<</Type/Font/Subtype/Type0/BaseFont/HCGNIB+LibertinusSerif-Regular-Identity-H/Encoding/Identity-H/DescendantFonts[240 0 R]/ToUnicode 259 0 R>> +endobj +240 0 obj +<</Type/Font/Subtype/CIDFontType0/BaseFont/HCGNIB+LibertinusSerif-Regular/CIDSystemInfo<</Registry(Adobe)/Ordering(Identity)/Supplement 0>>/FontDescriptor 241 0 R/DW 0/W[0 0 500 1 1 527]>> +endobj +241 0 obj +<</Type/FontDescriptor/FontName/HCGNIB+LibertinusSerif-Regular/Flags 131078/FontBBox[0 0 500 698]/ItalicAngle 0/Ascent 894/Descent -246/CapHeight 658/StemV 95.4/CIDSet 258 0 R/FontFile3 260 0 R>> +endobj +242 0 obj +<</Type/Font/Subtype/Type0/BaseFont/EFDVLV+DejaVuSansMono-Bold/Encoding/Identity-H/DescendantFonts[243 0 R]/ToUnicode 262 0 R>> +endobj +243 0 obj +<</Type/Font/Subtype/CIDFontType2/BaseFont/EFDVLV+DejaVuSansMono-Bold/CIDSystemInfo<</Registry(Adobe)/Ordering(Identity)/Supplement 0>>/FontDescriptor 244 0 R/DW 0/CIDToGIDMap/Identity/W[0 8 602.0508]>> +endobj +244 0 obj +<</Type/FontDescriptor/FontName/EFDVLV+DejaVuSansMono-Bold/Flags 131077/FontBBox[0 -235.83984 602.0508 742.1875]/ItalicAngle 0/Ascent 759.7656/Descent -240.23438/CapHeight 759.7656/StemV 168.6/CIDSet 261 0 R/FontFile2 263 0 R>> +endobj +245 0 obj +<</Type/Page/Resources 226 0 R/MediaBox[0 0 595.2756 841.8898]/StructParents 0/Parent 1 0 R/Contents 264 0 R>> +endobj +246 0 obj +<</Type/Page/Resources 227 0 R/MediaBox[0 0 595.2756 841.8898]/StructParents 1/Parent 1 0 R/Contents 265 0 R>> +endobj +247 0 obj +<</Type/Page/Resources 228 0 R/MediaBox[0 0 595.2756 841.8898]/StructParents 2/Parent 1 0 R/Contents 266 0 R>> +endobj +248 0 obj +<</Type/Page/Resources 229 0 R/MediaBox[0 0 595.2756 841.8898]/StructParents 3/Parent 1 0 R/Contents 267 0 R>> +endobj +249 0 obj +<</Length 14/Filter/FlateDecode>> +stream +x������� +endstream +endobj +250 0 obj +<</Length 554/Type/CMap/Filter/FlateDecode/WMode 0>> +stream +x�m�ˎ�0E�|E�)�� +�!*W��2�����*��跒=D#P)0*tQ�Q�7 +��=�r�C:����(Ǯc3ثh��t�+��;�6�4�>�gp��L�=���B� +endstream +endobj +251 0 obj +<</Length 4378/Filter/FlateDecode/Subtype/CIDFontType0C>> +stream +x��XiX������F�lL�T�ApBp�I�FE�!jb4N4 + + +AA�A�Vh�f7͌�L��eTJ�c4�!��M��$�!�LO�]�{��8�\s��ޟ��9}��Zg�V0}�0 +��q~h��yc|�|�օ���A�+8�� +�/�x�t�];�sȕ�v���}�a�N�g���9�} pp�},t�( +NU3-$jU������ؤaӇ�����X��q��(&j]������n���c���#��cܢCׅDŽ���E��F�ņ����`�"7���X���C#cBݼ���bBC��bc7L����[;:*z�������uO�x�~�����E^sgO����otlb�ۚ�h������u1�ƎQ0����O��H~� +����PU#��3.���S��q+����V��p �Ԙ�Qn�y�/냧h�yA�a�yۀ���/�����-D�_��%�*v�-
D^#H#�S����?,28�䘅����0vJQV�cd(Ӂ�����r͉�/�`��ع�e��tb���y���y�j� + 58�C���}�e�Q�D%n��4�a�AAaaAA�a�����"m��1MUa6H�!)�?w�Fe�թ�Q�=-=�Ps�Ϭa�1m +�x���N�!#�x�����+���c,���� �����a
��9���
I�"a:�4I�m��5�h�}�S�l��7�����Kǝ����Y@%����K����A�[��#*=H�%)�o\�<��h�.lqIn@@�6�[@ǖ�ӎ��0m�N^��|�D������>t.@=��ĵ +[�@Ϸ��u��UU��D$�C�r]��P'S�w��>h�G���7.%��M(���@�$ +X}�� +�)g���=��b(�R(�V��2�[��w�
���~F�7�CU����"͓=y����{�Wzz�UYX����ߘ �`�U�d����J�Wʍ���ޝ�u���P� +�w���I�;�I���4�2T� s[�#�q���C-���-�v�U��" *��b��!��� ������]K��EX�lc`�=oK(���WD�ԙa��,z�,����w'������$��?/��$)\�����o�3��P�k-D��_O�Ԟ��O^��Ć� B`�Y���<���G��4���`s7eo�{!�0wA_y1��,~at�|��-5g�X*�*a$��)�!�k�n� +���&hg����������ְ�[����_�G���w�������V���� ��Pn6���fS����@.��Oս-�w{3%����E���_�)+'[����ii#�E���>*�²Ș����C�=����lWy~Z�w����m�\�� +u���1��7�.�}۸��(��az�v3�g�� +m7�d^E+,��K�
V�#s���l�[Ӳ���� ���1U�%�����B^���<�}U�Ẃ�3m֧%B" �O�>P[�,�N���6~�A�tRv��ݚ�5�'�a� C�>�~!��*�Z(���|~����*C��]��;��0�%���#�]v��ٙ��/�A�4k��
�a
$�ŗ���t�C��K
?�5��P�����%O�@�.�"%�A`�N�E�d\�.�lIQA�e ��
�P��*���]@��� +��$6t|�����ϭ(!�T���J +3�� +K{Ŭ��������^�����b��K���2�N���z�5@��#V��i��3��w �Ml��_�?FUPa���k��TIBg�C>����q�@=s�d�gg� +�X�Q͓�-���8;�(�&���\R\b|R�H�g:t�;
����KbG-G�˕g� z�,������a���J��h>?� p]X��}���PQj��QŜ��I��dk�����n�VT�[�ˊ��GQ���솮�#� +�5��q�:�q����r��l�۹G:i��࠱*��ڌ�
���WE56�n8����}s�aR�[��Ҕ�b� +��m&L�Й~3
��lJ*� �$��xU
�⨎+V|�s�U]{k*G��Tf��%tUʧ������@q3�+È�@��#�rPwX4�`UŪ�X"��� +3|�Dxt6g/o�H1���\���Tԡߍ�WD8��٬�?zF�M�2�D��re��ʠ0{gn~[�Ǧ���p�\)�n��*���Ĕa�]�T-V����҈Q�0k�(<Џ��G���;w`� +�p��=���!P갼���gP"�=W�,�ӪP�b��FO�'q��Sx�m���i�e�Rdd�/������_� b��s��p8�;��oj��7B�>X�s�βI�Z��>��&h�.ҹxs �� RAOT�1���ᜤ���;��'ӱt&w�.���F���< �B��~��~[�x��ݣJ�|J�a'���Y���E��|�n��@�hB�{�i�\����{u3�v�9�23��1FD����r��C��H�|$���"-�f�Md���ޞ�lA�"�����kej��kk2��{��pߦ�*�K�o��z�i'mX���ME�9YL�m���NR��0^߳�Sݙ�/�{8mA�K/�.:6�3�`�n*Xͦ* ��j�p#�ܮ��dJK'��c��U6͢^t8
���E�c��E��ת�d:����jr�9 F��i0������ಏqڡr�N�r�h�%
�!xMR2�>�;�΅�@�먝��%��0�H~���wcC�@���C��};y�ˉ�[���0�nB5���t�R:��Q%ټ932@_ḣRh9TV�>�]�s�1Q�T��P�'J������^��9�g� +endstream +endobj +252 0 obj +<</Length 13/Filter/FlateDecode>> +stream +x��� +~ +endstream +endobj +253 0 obj +<</Length 692/Type/CMap/Filter/FlateDecode/WMode 0>> +stream +x�m��n�@E������d��_��!�%y(D3kb��ж�X����[�h4�nW��*SI�no�u��7���7ک��f���4]��td?>3�\���=u}[
<�j���fL�t�ϩ�s��R�����P�V�0��$Mߛ��� +=Ѧf?6��u������ߓN�����
�Lj��o�-��o|�K%�um�n�QT�[w]|x{F>n��%��z�$��h�Ƈf�]Ec�T�������:���N]���$�xʾ�߳ +Lŀ�>@�/�/S3`4��Ft�c~��g.�����g��p:�N��p��3CG8�����9"ӂ���g�NZpfpf���h�����h�*����Y0Z8�`�$F#7�с��,ŏ0bBV�YaD́��mq�[~�'�D'����}E�8-�fi�^pfp�d���F߉�#�38w`t˸Xd��6�e�US߳�"�,l���e#wm��������z)��~�� +endstream +endobj +254 0 obj +<</Length 10538/Filter/FlateDecode/Subtype/CIDFontType0C>> +stream +x�}zwt���Ȳ��,D �� �� @0�w�c��
���c�]ҕ�^q�E�0� +�ߍ�:H�� uRnD�ж�:��w�;��]�T�QXZ��֝Al��p�EW���-��Q5�(�ѫW�LZ���sL`P���7��������<p����C=���������p�������?�#�G����#<`�O�G���DŽ�S?�3~�G�~�>>~aaA�_
�u@x�������>�>�V���z��[��2>0 l\��OP�`���X�а���MO��}ϱ�z�3{�Z���?�c��w�C<}=&L��O���l��������x��y�yx�� �����p��X�?��m��70 ,�?!���H�6
�t�ҘB��^��\��h���
Z4w��Z��Ւa��hq�yE�-ݚn���Z�T!�L�M��`�MՉ�l�tw2M��SrH�������]_��ΨǪwr��uh֧s����ۓ��Zx���2�U�G#Z����e��/�*���|�f����g��mg�}���v�j����'_v����q~�N��;]� W���Z�):���Ӭ._u���^7}�f�O���㗞#{�սח�N����d��}��4���a�<�<�V�*�4vUnܨ�&Qg�$N��PjpH�KiZ�{�-����5ta�Y�����i���9��0�����#J��Kd
�s�#q�"���Y�e1�M_F������}���$!W��PF���B��쎮��`�߲�����p��U,�Y"��|�(�5�+�N�[�g���6�?���QN�v���P��м�"���&_@ws���B�M�����֒ o�S��}O[ҍ��b"������YW���z�F��e�v���gˌ+�>+q�~hq��Ci�Icu��6�R�bM�9�O�b��իXYY�������x$�85��1��y�=$����g�H�� �����0���,��A��w�NA��k.� J7�#��G|�jb�eH�~�HZ+R�C�Oې(ɐlA{1��dvD|�X��E��]�j$��D�3x!���/�ۊ�cY��\�$$c��y8��Sp`MŊ|�{���� +�z�D=p�W9�}��x�v8 +����H��s���C�7�ӀD�*�C���9��B�Ѩ.@D��c����U���Bc(�O�S:m�cK��&�(88x�_HA`��a+���S��(�Jݷ��mf]�ێ��Oh�q�B�jX�k_�K�7/�^0�
+��-�6������gy�?N��G���A|>:�ʏ/�O��O�;�v@�4���=N$Ë����+��M�����YF?C��{�>رK�����m����p�܀�vّ�n���B�!���nH���� ����a#�1?6�$;������/b�!F�E���.���`,H�X�!6�E"@|:ɔ�H�/�H��dK~~q�6@2ye$ q+2"ֶ�/�����ԥ�M�x��4b�)�ڛ�S^�����EMپ��rw�r��\��c��%��a���9<�Ri������gⳝ�YDd%���<Q�sep�VE��1x7)��%I��
"��i��_<y��V�?����)X +�xm�3��y�I��c�}PWLyf���MBҼU$��5좆=iڋ4�LA]�?�SI�_��?�����f������%��b�=��f���E�=�UG�mw��#���
nU�q��W����}����L�c7Ɛ�]��٥���[�v[Im����.����~��3�V� �
����w �v�#����{�@XQ@��L�aJ��A�h����`�DG��x�Z�ֽ���f��}h3ڲ�)� +��dC���s������ne�i���찿I���Y��!�x��ېm�,�ݯ�A� ͼ)!>"��-ѥ�+�kj�T������Y<P�~��2�S�X�a1t�5,/�.�)�vq)��~R��NOQ��d�Ln4�#Ι�;�A��}��Y�Vpڳ_�����yhy�W�����e-��c]䇝��"�]9 7����x��>kWF}��#ܩ��������Q�k/�ŏ��G��� ^y���N�,�C������ ����om+ +�cd� qqmH4O��<���$$��F$�����H����"�<� ��H�0��&q��(*3߽_tY�s10��a�1L������D���oȘ���nҮ9��-�������k/$��C���"u�VH��J�ר�L���P!�;�Dl8D�z"�K��]@|�6�"p)bc�I��r���x⛂KH>ڀ��g +Q +[�Hss�"6���p^^��q�b��vGI5���~a��Qw�na��/�f�%sg�&�%�Bږ�r��t"��i/�KO粉l���e�M�V����k��u��������DC�� +J�R,) +[B��>��HZ�1!�'w�4;����O{7�TH\n}�(����s=bC˳��H��#q9�@��1�����K��پ�H�u�D7q�nwo����4��A4L���!}�l�� �qi��J���w/�.,O��S�v��ԝ�\�ޗ��Km:joJ��)��!^w�o@|˪��<�f+�mp�X�c�А�K�3�Ν�xоf���9oC��^��>��X&� "M�^��1LKV̊;������^�xxٔY����/Y�ѸT�Nڊ�;8�4%7)�ˉ��g. ���~%~��촻o�M�?�T��h�AG�wQuaz�-^L +�/�,:�����,����M���*SB D�A�U�⢪�#v�f��L������hGA_��?_+�I��ZP�m[y�6������kʝM�WyN{����[�a��e,�y�7,3�ȫ;�c�%J۸�í����.�5G��W�\���u��K�����Tݖu5�}����^�g�#�L8�d��S�K��I�3��Z[H{� +:�LI]�\]�u$ӿ;�$x҄�qg��n
���� ?#+�O�`D���K�77 �{�bcsO0�)��LA�y�ziH)��ʍpu���v��RK�d�����������PK +l���x3;c���U�� �,��#�jUOՔ<�mi۞O���x�OF?�z�/��ӏ]t�/��_��� ��D� N$n�=�~O$ng�P��0�%�?�d��`$�7M@2�T*�O_#���ܛ
`��s�Ұ�a�eޫ%v[ +w(Jn*���+Ke�V��f���y9� ��cL +SiɞU�:^jZ"6n�|
F�٪���=��+���&Z�����cϘ�B���+�˼�H������:0���K��Z�NS���>�5U +��>]d���V�RN�uvZ�f�:3k!,�)Ꝺ��m���a���)_�4���^uw�y��X���� z�7n/� U��t �<Ӫ�Ӷ��� G�;L�e?0�A��J=���i�%�4���I'�9 +� +yJI7|X��?�ܺ�"�,&/��,����e��zV�W���Ռ��~�ϲ��â����˶To��|�F�^�0����=�,=v^���q�Jי� +)�5�jJ�Th*�Y��s��-5��V� +� H�}� +C� i&y 2�i$.ܝ�
��XQC? @����^�����%5GG�v�:�Ne�l��F��Vu���/6�b����_�����D� g�Is����s�=��c�bQ���;ܧw�J�:�х�7���f���W����� +nwf�a�C��4�<f�T�����p��6�k9���B�^*Rk·^�Jڭ����+��rh=���E�hUHWuՇ/��8�>�1AcD"�h�D|{����'"4�1">���݅��o�z#q�
ѐbII5�V�n(����]c��.#����a����R�6��(��V�����㩒�Wר�Wg�`���.�
��ώ��<v�ص%�j�ʶ ��
�э{�j�RRэ:V˅g'ggg�� +���r�i������"����Ҹ�����p���=������J��R�2E����Pn��A:W�$�c�H\�mH�#��Zjɚ��5��9IC�ȡ_Л��lMN!�l2����S]_ֆ��#K���z�6���bRR�DM}�����|[��h��>��f�|,8�
0�k`�-TU�����3�u�6j��{�XA���a��S(p��M3�sa.�l2t>��-�_ll�1-ua�hg����!h�������۔R����)%%^��i�s�����\ʊ�l�\j +__�S0��]�YKX]���-}�M�dR��{]���:�k�$�.e�+���ցSB�L.ݴ>9zCXAl^�)����'omhU�^w8|?-�~D{����u?T�?7���m�7�x�w{8�eSB�����4��/�N�<��˴� +������� 켾Z}2�?tv�qt�m��"��{ͻM2�=Ř�M4Ӭ��R �t n�o�2[,X,�a +Xm�x푒δUJ1���#֓|�)-�`L�]��G���2�������[����v�/�/ѡ:��.��WF%�����3i��Rf�8 �y5�(ݕY˼�r����'��vw䮧I�����K��k���>m���!T��>��߯G|[8 Qg��R���M�|�g6��F�o�B:�
���?�ڶ�ymtV�ޥy���Y�E:��f-�%TU��ƨ�mo�����K��!�*C�)��~��pꊡ������yꤋv��~g�r��5���6�Zy�!k*�m��V\��'hNB5=[JwW�S�6���z�$-�
�'%�N�5�a���S��֫/��Z��4��1>��Mz�RM#`ۨ���m����#n1u�bi�./'�T�=��~�:r�؉�E�O�~r���ܝF9}t?��SoL-5t��XEMj��l���E�x�[�`!���gS4��J��|noZ�-���ƫ��hL�ȳ�Ɠl�tXg7YC�g_���׳�|��Ln��g��4F���;��s����>���&�����%d��C:���2�Cz8��,���`�9�uI+g�k�R����s��qT��x^{3>ec����]�ij����;���d��� �[�,�aC�1��wVoD�?0���$�>e�B�C�����Z,`."S���:�����I��7y�~'�k��.�� +��R�V�7���E�'��D���W������K�\c�A�W�Z�������B��^�ĭ��H��|����Y��r�'����I124����\)<���4\7�^�5��j�E�4�B)U�]��l�Ȳ�ȧ4���'A�yHRW���+$*�&����lz�.�g�g�b}���Dֲ �KKd�� B"���ȾIFd������O��ᠢ#a���m_-��PУW��)��56cFN������]��=�U\^J�A����5���$⛴و�K��ىF_��b��T�����z��N�>xq�׃ۥRW�{���r�W�BRH�t]=���v8{�B�����_���]�:��LCM:��.��1�iou��xv,9�o�XVg��*X�a�3�U�eeK��";���|��FG�m��l����'{h�=�c�^qə�<�����-�Tkz�5���RғSm���jCJR��l�+�e$f����[Zjj:�ϙҒS�m&����eu|Jb2xM=슆x&����9�/��
}�c/�� +��y��v�K9�Ȅ�\H��Y����ϖ�^ԓΡ�i/:���K��mu����b +vî&��E�6-����'��Xcr,l��]�b$-zNEd v$-���l�ldc�ʜ��� +endstream +endobj +255 0 obj +<</Length 13/Filter/FlateDecode>> +stream +x��� +� +endstream +endobj +256 0 obj +<</Length 681/Type/CMap/Filter/FlateDecode/WMode 0>> +stream +x�m�MO�0����C$8�Ml'�*іH=�!�v�%q��h������)�� +�9]��m*|R�\b��rN�$'|Z��o.Y�˙��/�O-�ǭh�r���e�E�gȩ�3T��i� �a.�L��e�>�=h��8��j�,�E�>�>r�,�n3#|�4�Yr�,�eR>˔|Vb�Y�i�ˤ:|�����|�Y��t��X�,����<-|��>M=��tf�g=�΄��g�n�}�S�D���n��IL���>ح�Ad�˰dd��u���~+��w��jXf~sՍ���]��S�'�������xB�x +endstream +endobj +257 0 obj +<</Length 12338/Filter/FlateDecode>> +stream +x��|xT���گs�<2���d�~2 1�AB��@�@���;��A ��?&-Hx�FjS*1�!�������ۢ�6 �ds����>�������w&��9����o��^�( +h4��*�-��"��2r.����?P&y
�>�z��1i��p�4@9i (����% +�p9��1P��� +)�����b���� +@7O��B� �ҶÈN���i(V`�����mN�)W�Z�m���� +Į@��b��,�l�6�";vWl��a�E�֭]���z��j�~�����<���ЩO?A�̀����i��,OqQF�a&+� ��� �d +#1�y����%�:ll�je_�V��a_M�9�L�XTP�F4Jvc<MH7�t[x�A�����4�8��N��? +LUd� ��M�E�4,��v���=�=0zD�Y�n�Z��̳?��g7��q� +zC�q���T��e��[L��̀U�+"2"7<"�h���N�@'���y"��F+�
�]Í��PF�*�|Uq��u��46{��ck37+�q�z��%�����͕�ʿc�S���"�ӡ����gD �Rp2���3=-��;�f���G^�qS�c���>6n�7��g��ۓ�������64��{�ޣ��
3'��-�[V=w Zb8����`�Q� +���[��y@P@�J$�A�'� +�l3r�9��0ш'M��d4hz�jR!�隳[�m.�=��U+;�Z5߇��s��(�u��@M���q ��,�j1E�� %�8��$��Z7s&��2�L5]�6�i��A����Z�a�i���!Et�k�eZ�W�Ǵ������8�D�`i�4&�D��c��!Ɖƹx+6��Ud9]EW��W�&�ɶ�P$��X��;U��=����/:H�y������N
.jݩ��f +S]��.�5���\ +�S6�0!'a�Q�%�)�@�3[[���l:��W\�F8�+��PԄ�i���1 +ִ@Ă�܃���"\��2��hZ0q� ���AZWϺ�}Hڋe����$_��LT�9t�2G]Nc˕�j�d��nC��T[ls��)��g|����-G����A8w
��|<]C��j<y~.��0%6���6��V����f�����,�\k�X��)��d����gTA�k�|K^�H % +V��gf�Ś�Y��=:���j]jŚM�����,q��m��|�D?�d�����2����IɃg�$?��֒�G�B���S���8��5r��)�t�w+���y8 +6�ڽ94x�/om*��r���EUK����U�%�.jK�d/!�l ���J����]�`�2+JH��F�^B�^F�G�3֖N�m��Z/w�U��?��-ܑ\_�S|��ؘ~�Ϳ�'��$Z\��������NyǗ:�3��;)�d�h���|���$�鞰v��w�� +>.9v{��NH��L����qe�p��u�6n\�n=I�1����]�#���(�o����'�ND��
�� c�����f�j��B�x����b�4TFV���.
����| >�`�n��^@��kԛ ֦k�܋s�w�J}�l�I��\�a���k��w쌚�l趽��/�oK�Ǚ�>��ܹ?�/y�7,�.�۞���)��,�"
e������i +9_v�TmC/��ڽͶ�k��ʹtw��1�]�^р��q��n[U�kZ�QJaQ;� +����Z�V��ʊKA���E��Z92�jo�3s?8�oy�\������eO����d|��n��u��,�
���+M�&%}�?pc�¥Q�)
5o��x@p��&0@O�RM����kuWI�0J�ܨۑ�Z���b����G��]gYS-R��K�^�����<�>zZ5��1�$�n�IJ���vF�&K[��ͭ��q�2AyPm�e�A + +]̓��D�T{��%�4>�b�K�jf�D�=��Y�Ҝ�.��,>�-dM��j�s�Wҋ]��0ؓ +��d��AU�'�F� �H�eBMbqq�忿�Μ_�zc�y�J�K��:^.�i& +�2�2M��h*�j�jz�E��gɳ�Y��������Y㳦p +m�>��_��(�)P��Ժv5!��)VW +��酆o� ��Wɽ��t�k��4�����K2ġ�%z�L�S�m����������h�E���Ȃ0���(����x�5�j���D�����3 � @�&0 +��s�
*T�X%�@,2Y/���WV\lNuG�X�[�yȂ��Kh�ۨ���ZZ6�~���D�c%��A����Щ���{^bM���2�G�O�z�uY��x/���m8�����'y{g�ݯ�<ϥϐ@}l@F�3=#ڙ��/G���������u��-�]�����l�A�̶�.]�'f��)]͠$: �/��N4'%gX���m���F�\T���6^��E���c�|��Վ�NE��N=��ad_H�����\Y��I-���[�fՕO�y�
�F?����7�%4�{��L�)���d��>G�ٵk��v�����رo�������#�U���\�>@�� �����)��.'f�8���?XhM�jLa`���D�7�bs�.o��������N�K�E��5��@ӈ��6���،¡f�Ƀ6�K}z�itP����{F2c���V�ٚJ<a*�+��+��a�)H�6�]�A�����F�oe�bb�!�:΅����V'�B<W-�+Tc���A(_��f�bE�@� ��-��u�.p�k��N߽�H߽�^��Uq�ؠ�'�2Vj��X-��I�ݤa����g���{�Gv��&&��
� +� E�A%������NZf���E�u��!�4��!�kj��*xN4�ܽL��&��˟"Cu�+��a�# 5���o��^�s��I4�W�5U2�r���|��Ǣ��ogʭ�;�v@^�K�{�%���dg� ~d>��-����>YY}����f[�]D�FW#����RT�iu�6�wL��ŨJ +�t���{��Y���f�^�c��"^����z��y+�|��yĉ7Rk�髖K��
�E��[��5[��yb�v�5w<����p��_��=�V�M���_{���~���J��ľ���� �����ĤV3D6��U��],V�W,ᮈ��t��kP4I �]���>����7ϴ�g��/ɻ����nTx�-6��������}h���
g8��oF��z�-pܓ⊦kc���K�cqZO<?�'h�B��-��
LU(X��Y7%Q�ӲH>�V&X�R�N���1�u���Ƴx�W�G���SD�b���W�M����zi� +��ՠ������C6�F�Q�FСt}�~ʞP��B��.U_R��
ъ����n�����cO�4� +�nc��SS�i���z�������^��,������������z̖m+���k�����%v�/�2ୀ/��J���4��(�a(�� +;D�M@6`@�[�ODE�&�_��DA������N�i�sA�w߹a�}�Ġ߹ �P���/ -��[�ر@),����l(�%]a&$@�A*�B:D�XQ�s` ,�%�f�t(�n�� +ƴ�Z,�͂�0�R���F�`.L��PQ0�a:,��rdL���`,�(Xe0��� QP�P���錕T�P +�r�Ja���/�9�,ҡ�=Ϸ=��콴��U]�%>酄K`!dA��5|�B$�b(�2X3a�|v��.�,X�:Qk��
��,� Ũ0�C),����$�N�?8���t�����[����b�� K��72��(t.���<��R(����FKz%�Z�
괋�Y>�f�Yʂ?A�Hޝ�>��aݚ��%P*9\ �_�s}�R�K|��>Yf��n��Drq��O��r\ ,�Qo� F��4K�݂c:YI�Ԝx�P��0��t�|�
΄2(�T�K��)�90�g�]�y�A�w��X�s1c&��BX�Pe��n +�Bcs`�I~:p��u��L�e����2i�r�/�!#�}�Dm�;,|q;�e�n��#�.��X���X^�!9��˙"�N��������j���nCN�V�3]�{��C�e���h���P$}������Ԅ�IJ%7�%sa̔��1��x��K�iHH.$�Ӯ�Ő%W�8�S�a�J�С�ξ���{/]ae��۶V������J�m]S���kk:�'����u!t_"���?��X.�-�^@�N���zV`���1��\��6�&xv����Ω��MJ���V���,:^e0_~�H<+����B]��0_JS컶����,n��~|�[�:���{,LH���4'��w?.?ģ��9���ǽ��%�W�Wrݶ+��-�m��Ef����c�eR�B�|��Řv��B�o��1��M_;��3=6��*�a~'M,�R���͂�$κ�N�������Ѧ����y��#�(��b�b���]����n�u/�1?���ܣ���5+|����ݱ��V�� ��'�_�(�� �`�#(�qQX�����ǥ�3-E�ڑyr�Q0��yF� �?����a,D�h�`<��@ȃ�R/��q?F�� �/)���$-���/iO�(I[d�#�a�#a�|6 +�y0VRc$�0�C��S�1G� +<N:��'���}W<&��B_\[����9{��J;��:��Ι��˱%��븪�g=fu�<�s��\mUr���߶�C��zm�9�-�y��.n�J��Qڞ���_�ڪQ
��ro��XΫK���}Zz~)��-�4*B�_! +^F��2y.zIz�0]�c���Uź���d�w����e�����'�}t��g���V�}Z�>A-�{y��`v'�E}��"�s�����<�)�G��c�,����r_F)�%���?�$_g�ޟQ�3=�@�L03��� ���F�
&��#�xF�0S��A��8*;X`�p��t�x� +N� �zA +B< +7;��ۜ�YI���MN����N?���)NNr�:''6�� 9n&
8�8�ñ��G�V�cG���dr�C���k��F���W9�����n�Wv��Ü�\H��[�A;9��K��J~��~N~k'������^L#�,䅽6�BW��F~�|��J�|�5'{8y���g�YM!y�WV�l0�����Hvs�k����N?�c{2����dR]՟Uo#۞9ʶq����왣��t�Sn�u2��[8�'O?�fO%O�IU��U�'�7��f�d"�nVYH*��� +7y�F6r�����<��ƞ�d���'k9yܖ�K�p��1���+�*N~���� ?��BVp������-1�2RV���]b&KN��v��Cq�('9)]0��n#J��cIIW2��yid.'s�H�m2�()�d'��̜�fr2�lF���4N�r2e��M��Ʌ䑷�ÓL�a�d"9)p� �����`�P��XN�p��J2��Q2��(���d�Q2�+�Ć�"��,?��bC8<���AyAl�Q�D����Ȁ\`'��c����Y����c�h����'��� ��zr��c!�z��c�9f�1��z���~��EI��m��I��$��L[.�,$������H/Nz&9XON2���!��0����9I��4N�'9X��BR�,%�$Y�Q��-�%9HR=�v��X� +endstream +endobj +258 0 obj +<</Length 9/Filter/FlateDecode>> +stream +x�; +endstream +endobj +259 0 obj +<</Length 343/Type/CMap/Filter/FlateDecode/WMode 0>> +stream +x�mQ=k�0��+�� R�I�B�uj���Ύtv�$$y�/�夔��w����ѧS�x�ꊋ�s +g��7��քҝb}��9�)kנ�b�宔�JK�n=lj��[!�yo����n���@�%G� �J?�X��2B���9K����(V��FHn�\�.ɖ�s1 +7�j���:�J�(X�,��� +�� +endstream +endobj +260 0 obj +<</Length 380/Filter/FlateDecode/Subtype/CIDFontType0C>> +stream +x�cd`aa`dd���LJ-*��+-N-�L�
JM/�I,ɹ���!��#�C��A��A��B��<��=EFB��OVY�����\�����(��>W<�̌�l|ގ)�I��)�y%�%����E��% +����������BHF��Y +E�Y��% +��%�E�zL���8Θ;����u3VNe��4�]��y��n��\��oM����O�����Q�������4@�!!&FF����?^�c���Ce/s7ˏ��~:�n���n�}�w�ߓX����+ +b��W}��c�3��w�������Od�����`�.��?L��}� ���w�3{V�N��#�[����zJ����J3'v���)�G�����]��� +endstream +endobj +261 0 obj +<</Length 10/Filter/FlateDecode>> +stream +x��� +endstream +endobj +262 0 obj +<</Length 380/Type/CMap/Filter/FlateDecode/WMode 0>> +stream +x�m��n�0��y���h~Z�R��-��={���m����MhU��D��83k����'i�8��sأ7�8Zok�1�1�mP�WD����Xg�� +endstream +endobj +263 0 obj +<</Length 4371/Filter/FlateDecode>> +stream +x��Yp\�y�����]�,iw����]=,?�������-�ɒ,�%bKڕ%���Zɶ0;���%IJ��1���!J�x���2��P���R�dF���iE��s�>$�$����{�=�|������@2�Pֶ��s��� +X�8��$z��.�K��Z|���p����� +�
����,�g8F����`=nIe����e\@p���j�:iEǐVP�����foqѤ[���B�Pʀg�ڵ�-�,�<�gQ�mH/����?,.�i��z���D��QY\TӴeH+w��^oqQU�F�x�/��1�i��<�x$o�#���b@C�1�w� X1�?M?�9f㭚����.�����G�ҝ^g�����1�Y������k�
�}?�
�(�g��ᤀ˦9��ޔ9N�%�v;�G}������E(�"P�s�o��%s� +�}�[��9������7v�?gKY���;��E��������w���U*
^@�#�`�+����s]㺕��uf';4ٓ�n��� +m�u�-����c�vVK݆m���˼�%���(�4�`����ŭF���E�o�>E�����1��a@��G�F6����I6��l!���S�EG�a��pj`�N��δ[�����L�k��䴔���NWyf�S�'��*�����3��9��L楹�s2����dLw[b!�¢�R�j�~ƖR�k�q��b��^��сΎ{�7�*�_�w6������}��k���+�.cw��e�81�?]$;�)����\�c|4�0�W�|q:��1�N�36�p�;�9ma+Y7[e�3�e������2�sf7�o��9��>�d,�g��=��a�AX�s�x�=MJ��E(�h�ʨ�r�|���w�o��Wk�]}S��G�q�1n��е_��g(D�k�t-�]���4���Sҁtw!t{Ρ�ox��PROJ��=�w^a����y��sٔ;�1~~t|�#�Ky���d�ߗ��f�RE�̯�\V.�_���t���\�tw����~ʝ[��a*b����i��j���:�cWoӃ��9e���M�{~���P��x��w>--1�u��M
��_T���'�탥Kآ
�mͫ��BG���i���L�V�3Y(��t�R���K�K�Ή=�p'���#��X�� +dU/D�C�;^?�J,�0 ���* �K&(u��B��a]h.�r�� �"O{cOS�i�K�Ĭ��_ҫ]�.�X+��if��w'��7�ބ*�SL"1���|�O�5.0!Ä�S3�1���&�2G�b��$<�⪮�$��Bp�O"�̌�ɧHЬw�q��^�U@�ϝ�\̍�=y��=us�M��I��E�MQ�"�"�=�B� �I�U�� ��y���/N����+�7�1"�bL|GL���Ey7U
��r�D�soد�N���g#f��������(�A��'�%u�LFkڰ-r�@V���'��닽R��RQ���1�nG��S�:l�v��h�c�h�
hD=6���B��K��r7nF�D��F��0Q!���آS��w5�F*��*l�6��$Q��(�ס���6U�Y�ը�FT�뵲U��P/���u��b�� V'��M1f�P�F����hV�Z� ���y]��dZ!5�s56�Vމ�шԣI�)�+M�u҇5h4}��T$�ըG�匵�$ai�9S�o���Ȭ�Vk�SŬތ������ +1&Tz��f6&DEĴB�M0�'B��)=��M��T�� �D܄R�rvP��I=Q�X-}]mj�0Uޫ�Ps'�:���h�Px��P;D��{�"Pa��:A�x����#�Yd�����'��Y"�]T�c"J���/�F4����I�F�Qt�W� ++j{b��B'�PU�����jW�ɺ6ϵ�u'wb��J�Ϣ�Z�� �*�V�
M���:���<�=�T'W�-�hR��>T�V�F��o@���ĺu~��:����!��"���2�}/"�*ϔ��T)�)k�)Լ� 5�
Qp ��Z���:�9G����V�|��1���e���y��^�S*,���7�~�D(�~� +M�z<�ڊ��P������N���6���k�R�]�D��(��C����(��Q��!�����
x�oŀ�ew1����eX����A�9�Ξ������я��W����ҫk錏~4H?��+��O��w��t��t��A�^J���z����������f��c��A���s��f:�ן�K'����O��]˟3��k���g���Ϯ�g*��|��]����g�_�ѓc�=���`}۠o��Afб��;@�<���̠��9�Q7=�G�s��>zdy�,?b��m�����}��?�����(�����3��4z`��nС��������� +��=�whg{�������P�A��j5�� +�xA
����(�M���<�G^�<pq��3���̤�Yn�cP�l7���l7͚��g�i��I��N>3�f*N3li|��fN��,7e�P\<c��/'�rJg9<}�\>r:|�9F���Gi�[x�J���n�[Oɡi�i|Z%��.n�N�4�)�;�N#��0I��$n��e����<��0���i)�rHK!g9�a8|�-���?������� +endstream +endobj +264 0 obj +<</Length 5745/Filter/FlateDecode>> +stream +x��]ݓ�m�_Ѻ[[��[���R�쇤|�r���<�Tޔ]����T��}�G��&�9�=뗝�� �� ��ǿ�tz�����׃~�۟N���O����_x�?����3����1D���n����z���A�|z����>>�{ԃ���ǹ����������6���p���Ow����p����O�ϋ�����/m=.J=]~ s��K�tM����߀Z��x�������7_���o~��n�H���Q���*{,��`�Ⱦݬ;U���ۍUYX0�T�x��k�#�������`��w<�a| +�`��V��"���,2�Z�hOw$!û�v_� M���aH;/�O�R%7���Z���*�1/:��f�Y�$�㒲!����q㡙�6&n\dƆ�������gV��I��7+�o�U�`rR����-���u
����T|�TQ[��|��#��!�.��Hl[|K)�ay8��X۔��Rs�5j�!�:�B$�S)gD�v�?j��n������؍�������$�~�!d:�G�7ײ���%�UIR�)�������n'��}�A+k�qi15O
>5/E�Ue����ńъ����ʪ���Q_�) �� ��F��XѶ�8�7�yY�!���_��deU<W����S)�x���T;3ò&.> +k=Kk]k4�̣iE�-�Y1����0Cby$k`C��z�k�^��0�/�e{X��-Ol�L����-�1����k����廙ǚ
l��&|�*��f��ĶS�$tZ�h}���=�^ �H�{�r��}B�ULZ.!T��6 8�������ꈧ�h��$-��:��H`H��%�ǰ<p%x��*W�\h�$���e��@&C��N���ig�$�: +m �-NvU;�;0�;��(8�68n��Wc��O8<`@8�Q��*o뻟�h��A����d$���A��慌��L,���w�_����`�L���$�������9�<F�,�>���Oq�v�l�*I��<��0%�[�T�sR�#[õe�&�(��c],��嵊�&� +�j�n�Jƛ�1�u�{�Y����;�]|�z�Q�� +���)���8!�j�Z�'H`>W|R��x$�Y]Mx�(� +�?k�\!���Nx�L3ɤ �
�0�l��ӆ�n�W���̞�6f���`�(�`E-8������?8���������'��6 +j�{2 �y��찂����[�]سi q�D?�%��\x��L?�amK>��$��!��G8,�exv��x�JS۹8�ab��H����hF�]L�w���eeō.HG��T��R3N��Q�'�(w����3�5���ť�8�հ92P2��Xgg��feU����W��؋�,�g�<s�����n��]V[���k� +?[�7��Jٛ�Y[�����`�ڳ?8�B���(+�������������*��I�M�[>q� +)�� +��x����{����j/]�k� ��Kq�Nk^�r����u��j��1\�b08�o�m�'�v�Q��| ^���wL;߶��R��"iH]���Z]�7���ԅ:��B��O�$�5o�*�f;�����\�,<8�.�ֆ)�M����5u2+� #�C�c~�5د���C�!�)(�ΤG�d�6���~P�m����;��J�!;���T���H4��e�^]ꓸuX�� +\�z��f˶R* +k�r)�͎way/���6�d�p�K��Qx��y?�a�x �^�זɀ�v�H�������\���I4 �0eV��$���`� +)��O�^�"��U�[m(fo�Bu='�c��.�����)sD�.v-@a +sU��P�ؾ��En���m�U��=Xe����(�ՙx�<�Ҙ�D����+���m����Z�^�� ]8B�"0Gcu,8]$�Yȇ,�.�H��v*d
����69���t��|�*�4�kd��n�٪��5�3�~�72��J�[98e!�I�eQT.&ߓ������QZ�`��������@!a$����`'f��+ps��Bo�=�� ����e�����n߀�@"�_[3������R�Ue�q�8|ɗʚ��ƅ#�#s��P�NJ�0��l%�M!G�*d�ǃQE6�S2_bW�_�-V*]��k�ט4N�+S�5�"�P��Z��`�s���-FԻU�x����RP������k �$F}�1J�)B�><QQ�U�5�J<�{���C�H� r4�S�a��5�_�u�ZfH�Nl,��y�p�U�a]��?d=4v +��I3���\q%v}q=���~b����Y���*D��um�1��G��R(�����вA���T +y�s�ؖ�E�q���1`@�hc\�:�N���-m�UN"��~���G���}A�S�d��
���4�1���6)��U���G����P6����؏�x-7���[7ޡ�����H��M�����UI�H��qc���{��Ѻ�z.���y[{M����Ѱ!�n��R���,�gQc걔�+�-�sB"���u�����b ]�E5y�,Gm�X +��˫�Êa��������?����,uΖ����1KD�<Z��`���bZA.A����dtf���.�ϒW�^��߮��R��oh#�� +� �D�,�!�EA�͙_m��� +�8k���s=���l�� +7�;K����J�gJש� +o���q�k8*J�TU��4���� + +L����}|L��G�x
�M&��!Qq�*�ow�|����<wD]��j"�q4E�v�1���j�t���(!��2e^�}��N@��X���
z�>���k���R���9�Y��M�|R�gӱHo�� �v�KVY�G�� +a�I�!lLV�@ؑ\�\Mܐ�W�0� $�m�6`'�;lҙ|Mr�e[�m����6nJ��<(?�{����0��n�}bG$�ai���ӞsY�c �18�e�'�+���$8>�S�i���A{���L�R�\���V{�ٜ{V�Yc#�A�{�����5����I�M?�G�=ƨ��)!B���i�,�r{�KcZ
c����S�/��L\��Q��ݖ_4hF?�s�f��!3��Z���8h�O�a�����%�A� �/z�lȷ� ��'�ܘ>�f"����"�wgV�&��q%$��/��*���)Il�g�RQ���vKF/�e���f�ֱ����-:�@�
Gl4�RW[���~G�M����!ԭ����X �\h5.�S&���)�[ 0B��v/���P��|�O����K�1� ����<�n7e>���Nyƈ���_�#�(��+#d�t��eB&�b�l���gC<��J +��b��$?�8��)��
�f���O�a=C��3�L�i� +tm�� +2z[v$�/={
"����f�d +endstream +endobj +265 0 obj +<</Length 6017/Filter/FlateDecode>> +stream +x��]ݏ7r�_1�eK[\��}Qw�� � �ޢ<h
�!A����!��>��nv�X��i6��E���&���Ǫb���?~zx����w���$�۷��=��I��I�^����t'�Ah0���/�?��O>�ӟzx���I�>|���'%�=}���>>���>J)���x�WJ8>d����8)@{�η|�Ҍ��r����[iA��n ��hB�|9^h��O�8_T�Vh��a��m�z~����/Ͼ���ߞ}�ûۥ�T!)�Ahp�%�NA���>J �>Ga|�xz�|^�JjM>������R5��&)lா����^��pS�0Ѩu�a�n=�1װ'��n\����_��B��7Z�ct��K��!&y+G�~������n$��ll)]����Q^���P����d'�<qLꉹ�)HS�hD��]��%g�X�9!�c��j]�-�v +��6�R^�p���M��@,FX�M3s_�<y�,�NS,irQ��>�vJ�a�(�t2����D���r�dW�؍I3N�����w�zBKC�J5����HU�J�M�Q��Hed��k�\�����.�1Bke�^-|�V�Y�97��HX�yC�kzB7���z��&`��Ȃ��
�5 +}-��f��~�� Om��P�Qܕ+F����Pts���G��#��s^�����G'¡MlF�=z�I�j���LOn��<��Fxm�92�����A*"�lA�V�ܨH�8FX�P��t�} +P� +ou�g�Tg��R��?�?I�O�.q}�̞ +�^r&9�
G��"*v;�j�~n�+#�x�9���[5(0�xR���������Yz�����#��|�
ÞҕW:�Rc���ÒdH,={e������>��Z���":c-�ecM�*:�gp������^@`������E@&=��x�RN~�O#$�'Az�*%S�R�\�i4K&㪿�����\t�f8g�Y�E�?��I����fVd��+h�vӵ��P�sJ� ���J�Z�2К��Տؐ:"Yf�0&Zu5v�V�A+��؊R�v\-}<�8?%��Z����/ȋi�QK����8#��}.r�JA +h�a���I$�F�d1g/�+H�˥GI/��p +���-!�&fM��7(�E���g$�~��L|Dg���J{UV���-��{.��N�/�^�&��7�I���VnɃ:st��p�]��,iO91L� +{u%ųn��1\�PI#�T�o����I����5�i!8�+C3��U^Ĩ|�+ f�H��&Dh��,��Ċ��l��c�2��%un�]VA�j�ՌV�S0�r?�s%�g�bk�0{7�kzL,9 +D���#��AH�Q쌒�#y���P�ia��'�We�U��x�U��R������e&`���q����� ���a�CI)��W�3R�|%����$���<��I��2|r\�r7�+�逃�ㄳAH���%%�gn�� + ��fè63��D�8DV���0"qn�6B˖�k���8�BG��U��]��)!l6�#���eD¥wF8��� +-�Y�e8`�Hn}�2�|��}�hD���~�Q���R��]�)����JF������۽�)�Tk)t�p����RɕYP"Hot�f8�5�pwQ�G&���M�Z���\�mZ֚�4���|����+`W���d#yET���|+ �t
G��hUM�p�:�`��% =��|�u�~M���~X��x�&NMX�'f�yE�f0'z>0��nTμ�9��yZ�m�%��qv�<Ʝ"���vO���͠��=Q�y:��-��8�w=�A��* +��� �z0BEml�8�^bĩ�9����{y8�� +�
WZ9�
Չ��o�3*PF�bikk>"��#e%��Q�T�z�(n<]�_+�.:�7�wf��A(���� wj�4��e������縶�����Ds��x6N�Z��
�%�7a�,�4���D+�ܢz�S�~;��34&nq6Eu.'�/7����t,��l�o��TDK����[?9Z
���^�t��0��\�r5�A%ƨ��q�H�]��r�1L�$��Lp�9Ѻ�CF�}/V�v�\�_���O�ښJ�k�֑B�>_ql��R�Q4��K֞��RGP�œ�i�!\�&&d$:�S��Q8o�i�[F2��V�-�k�tS+sإ�p�&�=G�"τ}�P�U���W��n͗���v�9��WB_3|�3؎z������趝�[��w�E;/֓��\�IW�X��_0}�1��_Y#�v���M��2�y+tr�}����y���4����kG���̠v��n��H4
/�io�ѱs��B�p�[IX+e筇9�i7ek�5��H�5M�b��K�-'��7�S��>��>�ٟ<N�{}r�?s'�Rb��('_���+�"���+�ЉP�<�D��4)��-�A�/�Ձ�q�Y��+�a�@�fr���*Ӿ��N�9y���5T%��g(��(,�����tMܩ����Ax�s9@"y��O���{R�3Y�\ x�.�Y+��,��*��H� ��^���lwZh*�n%AW����2��g��j��3+�7}�h�˽X|tQi��˼�KG�a�T�TNi7h&:��5���a����7�S�wse0]����M����E�HD�����ڐ7`���r�:�m�|�%t{jN��9��#�X@�\b�#�����S��� ��x�*��
�Vz6/偈��EJ�'�Q�hP"��{�gѡ<����oX߉�e�Q�h�Ȝ��dF� ���i����&��ʹ�G��){��Y��r�U\%�j�BkC�'':�SC�A�A�5.C�*kc�u�ьh:�V +��{@�tKE4+koET�Ʌ�Q%r� Et~(gi5����O��M�7%���VCGu#o��)�yyՂ�+���S���^-�s`��-�%���Ȗ��B[ ����v7_��f�el�,���[܋�������Ͼ�Q�7��l�3�]��e����]��y>�/S<s�ѯ�$���ʏȥ�����z9�z��tEO^�ʋ|E��� �ͼٻ�D31��e.D�ܹٗ�i���M��c��,��U����HZgf2@�3O'"��i#ň��E��t�6�T�s:�� +�r�Z;���)G��0h�S��F�"w�&o���T)|�Ҥ + +�6��]�q��|�F�����&5�,i-%?�-�;r]���Tu�s�!�:6X�u����o^�\��&�v���Ӗ�8��u�_[��+�V��n�����1����jɺ��՛�� +p���R��,�9j$4��g[x�ɑ{'�Aٻ�ᤌ���7:!�DLd]��Zj<��j�]C�4����z%�+SC.3zi�B��W���{�)���zz:���q��a�A��8�jA\SE��(�/EC�����~ʥ(\A�r���Q\�{j��Ց���<Ut�{�'�� +����U-����6˔ʄ�9ְ�z�c��G�<��<������~�%j���Z��.��n�9���������]P���L�-��|��\ƹ��5"#�� +AV\+D') +�O�yD�W�����r��?�B�R�Lf�|�H�xȕ�������O�o��~������_��/��
/D +���w?����w�:h���dN?����$�7/����ُ�M��e-\i�s
��י�j�e�ufs � 8{��DZu:㥈v���M�iJ��7�2"�`��SC�v����RXg��e���S�t�kͧA +��{��z! �s�T�W��#țщ��������Ïg]l���{r�΅W�q$�V.��B�V�c$β��M� +a�n�G�e,����� +�e��/9�4c +V +>����j+k�A1>��>K��q��6Ypm�{�\�G�|�5�{���<^��8��� ���~�����.������V��(z?�g���(��?�}����3L��?�g�Lώ�x�r$pn/4�զm�j�1]����3F!P#�~��5������ +endstream +endobj +266 0 obj +<</Length 5845/Filter/FlateDecode>> +stream +x��]Y�9~�����=�G�},���.�<���o0D��� ��K-�U���y��[G*�Je~��^���{���|��w��ͷ߽}���9�><�C��Eku<�X�����O�z��>��߃>����g߾;�û���x��/է_�����?j�|�+������;?����'�Gm��~y.����w}���;m����Q�}��ܥkK����K�U��+H��:Hb����?��ݳ?=���o_��a��Zc�g'��V���_vt���x���b��\V����3��P�o�C�����s������Ӭ�-���F2���Rr�]����X�f�r�p�Dn�,;}�d�*7��Y[:g���>���q��E�W�F����r +g��>��W����Jf4J��E�+�������SV��z�>1�`Z#VE7|ϠQ��_͛@�|�#a_�=5�2$F�Ifɍ�r�^��oO�x���;$6�K��ђ@�Ey?�I�����i���=�J�1��G2o�Նҝm�ȏ3cuk�4����;���N��M�#��P��ݹ����͓��`��w��yE�Y�~��~����,`)WE�.'h3�v�p�a�Y�)���V��\�!6�e�<#�)��ol�Ĕí,^槪�n�m��S0�9@���q>p��- +�!���Cu��=+�N>�4��� +N����FE����=�^��l��ڪ�<�P�H=\ mgq����i�g���f�&x�pw�8��a@�9A���/~��VI��ʚ�L����H�Ff�O�j@��@\����e�����葾�(n�=P���V%큑"��!X�<�K��3�fz���yI8��$�z�J�jUg@U����s
�_��C�
��E���������A�svб�WIdWK��zc�O�>�� �Y+_R�;P�s�Q;��ͺ�Z����KZt�� +uI���4`�['��������9�D7z�՛��{����>��XeC�6*��5�������f]}�BB@��@��� d�#�����9��ķ�2jXTFPx��$��:��]�4Ht�*�h|"����*AKq�L5&��]0��w�75:���ǯ�B��`��x��-�]����@��6�}��r.��mGep48��J�m����)AY�i7}+Љ=@�����t
���#�}#k�ʡ���WǙ�Y�&J��^�L
�76D�̵�� +�T��!�Md��BV�K�:e�����?���Zg����lf8(H+R:����$t���� ��1c�V^��lQH cQO $Z8�2d ����F�VIk����,�2Dц~����^� 28�8�wR��
,'0��d�S�A�Zd����e0K�� ����,��vô0�,�D64(2�#�C&z#~r�(a��O�H�d�� ��l},&��������5� ��6��5�1�v�&�C�e�9�L9�(��[m<K +�{δ�o��30��l�4���7�@���t�ͳ��V#�N:���.$F�魅�+p>n�n�n!g�L8"!��5��/"
"b�r%mG�6�3#^A��u<�~�u5C�-��I�����.��ؗ�Sn$����#�����\V�$�@ +��"t.'������~;=�=���p���O��LIv�G}�^2I�o�A[�4p���u��$���N�Q���i���j����-Ey��~Y�7�WU|ML��ª[��Z♐̈́@� ZJǠ�ܚ +���=3���$�KN���f��ér1���nLpQ�z(WZ�X��7$��9,� +=,H�qI���\�N�Y�h�HL[m ���O"ۍa�pf���FNxo=�#���Y +��� +�{�
{m��L��E5�ڥswMz�˙�)���+> +�7�ȼ�@Ln~�N�� L�-Q���;J~_S�؛ϭQƚ�asX�Yb�m��,��ɭЎ�u0<2y|�l�D��:�ۣ��=R'���ʩTT]�����k�d����5�B���e�J-�ȶ���r��MvD�,fW����[�K�l��䜶g�{���D=uu�t���i��!�ת��=��y�S��1%���TYXi�/T�����VhF�{@ɄB+tH�E�41^��V����n��<����*��}J %|u`dצy�^�N��]�c�J��e�2��=�w0 ���뙹��Q˝���<�
p�Ͱ�������.@H�6��r��͡���u����k�[{ +��6��^�<38�Ɏ+&.C����0�bޘїQ��$�3c�W�X5?h9=[V +�m}Ċ&��۬� +bn?l�2w��{�d ��o̎�'Z!�/���x%��+B�ސ +�;Nh��1 CY�bB�撆�2-ە���n� �)��6Vd�J��r��A5�*��u�lJ�~��fX�Iu��T-l-7�Ί�N���oT��@�G���
���Qvn�rC^�����U9٘Ĉ��t|Ǻm���KRŖ�Gv��~����~7�
i�Wq������ʺd�5�))�/Zö�&A�L�˸(qm"a8��qc�� +����]�;��̲t�
�[���f)����v;`����Wd�@j�a)w�kj~���u�#G�86,7���գ��4����k����C掂$��H���,��L^c�2��;2K{^�r����z��M��E���e��U��<�����g_y�_B@\��f����1mO
������D�rR�g�(N��zayq���ݪ!�r ^��U�NN��qGF� +�xU&�n�ZY�x�2�c�*��ѡ����[η�:�4q�F���}�����5��N��\0UD�C��R{1vj�s�O����hUI�Xz9��3�
�3!�p�#����y������qs�$l�r���"����V���H����s��s�[�� +����[��%�����Oe
��=*����}�E/��6�u E�XJ~�6\���9�n�s�� +��b�-��xU��E��uS���� +��c�hg�JB�aB� +�&7 ��N�m���jA5�o���@ �(椴��j�^%0ٱz�� ~b�g��C�߫�s��ިc"~8 +�2>@���g�������{�.�
��>��DR�iB*/��%ܮѕ�ag�1��PQa��n?�<����΅� +endstream +endobj +267 0 obj +<</Length 3869/Filter/FlateDecode>> +stream +x��\Y��~ׯ�${ǫ��fS�C�!_��-ʃW��A���G�3M6Y�9�����f���"��*����m��Ww����ۍ|��ͷo��w�6r#7�j�0^k�7!ha�W�����(7����wO����ǻ�QR������������ �� �?|��[�o=?_� �[��1�QӾ�7��|���ؒ +��g���^�~�~��@���yn������FG�'
^5����B�u� �i��oo�,����>��:������@����;����n����خ&f�7ѯS{`��П�Yۃ�uh�e6w����m�h�ʯ�H-w����OO�{��/O����]���j�&a\t��Z>H����~9�;�_ �s^<}��o�^�c�m�i&���T1��j{kt��� �5ϫA,*)��J�9�N�^�����+���0YH^9(ͮ�9������ۧ������S��T+-�t>�Uo&a[ʝ�尽�AHg�h��~��M=S�g����z��?��{0qXy������=���ӖPW����
uc�tH��2�I9]�D���c�2k��紩�Ҩ�0iYa�e���c�i� +�R�H����nS�ˤD��{0D��K��Ȓ��o�k,���^��5�U�.��R��9cCs�}�/�[�ːN��Y���}�w��#���z�۶�sx�v�w!����E,�������e�[��QLZy}sN�6�<o��_4�H1�~n���I�'1E.1�����fW�j���R�O+�����9�/���\�MA,�a�Y�v%�Cj,�b�w +�z +�F��Z� +��S��
�Ѵ��I��'u�(�++��ݐO���>�9g�S!���Dc�Bay�:ݥZ +7����-�9ƾ���I�`�( +9���-��gZ��5��j�x���B6fBC!�Y�^��[��hJ�WDC�=ͺ��� + ��e��@%[tU�w�!�v`�]}���1p�4|��{;��<=���{�K�ksMNH%���X��B;eԡ2�h3��m�ָ�����V7��?�m[ �H� P�����,7O���^�u���CᇢVlg���0��vD�j�Hv������{:v�i�
�9�Ŵ^�4NG�"u*�pZO#�P;����jT�`�i+|��Y{^��ƴ +¼�"��CS�2���C����J")��Llw�������`��uSQ�ڢ���D�����1�o"�ey.9rCdhm�{�v=�ѯ�ꥅ�B�ۗ��2�:��#I��7�:A#�zo�x��������.0wkz,���Wk�H2��5S���� �s�F�U�'�XP����m��FP�pI-�KYv�T]�Əc3B�jF��y�_Pz S6b s���5�-!e.(y���H�R�.���.*��؟k�K����^�P +�:�
o��ւ��t��r���J� +�H`�y�ByH +Ւ5{d�C�B����L(��^���_��d�E�t"N�݄xU�V� + &����&p;��H2��(�C5�`���ݐw�,� +�֑^,�Z�c�u.@�d�R_�:Z.<_> +J��gF��;w�#�\�� +<"-1i~��v�"�z�S��}����mp�ZF�\q`ȇ68)���j�Hq}?^Ӆ��_�-h��JP�O@�'��n�1����T��g� aV�A�����K{p3l���u��:)����[�my�]�cדJ[ �ѡ�CĬ�����B6���S[S<��s�Ø�I�L~E���X�c�t�δ�!�&t8ű(�6'�����+I +�� c +�$������ +endstream +endobj +268 0 obj +<</Length 258/N 1/Range[0 1]/Filter/FlateDecode>> +stream +x�u��J�PFO��U�v�D�D@�`]\� +F��Mk�I���R�B|��&إ�n�ऋ��(�H�r�Tų��9�`��ըa�&�ʺ���:�l +�3Ŭ�*ުn� +̵�8+�/<����a�Rkp��ش�A�mW�Q�Ih��
�%��l��E5VW~��d���X��)�ϴ�:��b���k#�&�_¤3�0��
�I� +endstream +endobj +269 0 obj +<</Length 314/N 3/Range[0 1 0 1 0 1]/Filter/FlateDecode>> +stream +x�}��Kq�?�U�X
94%MQKS��N�#Ԧ��Q�v��B�ˡ�h�Fk ������! +��ՠ����ZP��~xx^ޗ��Q�����x"��^P��� c�!��H0 + ��0l+��ߣ�y7���;����;Q�?V.�_�tF��3L�E�K�)y ��z�80e�IP���k��T�/%[�p +endstream +endobj +270 0 obj +<</Creator(Typst 0.15.0)/ModDate(D:20260706083532-03'00)/CreationDate(D:20260706083532-03'00)>> +endobj +271 0 obj +<</Length 996/Type/Metadata/Subtype/XML>> +stream +<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?><x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="xmp-writer"><rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><rdf:Description rdf:about="" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:xmp="http://ns.adobe.com/xap/1.0/" xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/" xmlns:xmpTPg="http://ns.adobe.com/xap/1.0/t/pg/" xmlns:pdf="http://ns.adobe.com/pdf/1.3/" ><xmp:CreatorTool>Typst 0.15.0</xmp:CreatorTool><dc:language><rdf:Bag><rdf:li>en</rdf:li></rdf:Bag></dc:language><xmp:ModifyDate>2026-07-06T08:35:32-03:00</xmp:ModifyDate><xmp:CreateDate>2026-07-06T08:35:32-03:00</xmp:CreateDate><xmpTPg:NPages>4</xmpTPg:NPages><dc:format>application/pdf</dc:format><xmpMM:InstanceID>ryCwVs21NRYeVZORaVGmEw==</xmpMM:InstanceID><xmpMM:DocumentID>ryCwVs21NRYeVZORaVGmEw==</xmpMM:DocumentID><xmpMM:RenditionClass>proof</xmpMM:RenditionClass><pdf:PDFVersion>1.7</pdf:PDFVersion></rdf:Description></rdf:RDF></x:xmpmeta><?xpacket end="r"?> +endstream +endobj +272 0 obj +<</Type/Catalog/Pages 1 0 R/Metadata 271 0 R/Lang(en)/StructTreeRoot 12 0 R/MarkInfo<</Marked true/Suspects false>>/ViewerPreferences<</Direction/L2R>>/Outlines 11 0 R>> +endobj +xref +0 273 +0000000000 65535 f
+0000000016 00000 n
+0000000093 00000 n
+0000000169 00000 n
+0000000255 00000 n
+0000000347 00000 n
+0000000429 00000 n
+0000000544 00000 n
+0000000626 00000 n
+0000000730 00000 n
+0000000844 00000 n
+0000000980 00000 n
+0000001047 00000 n
+0000001241 00000 n
+0000002267 00000 n
+0000004312 00000 n
+0000005154 00000 n
+0000005700 00000 n
+0000005771 00000 n
+0000005832 00000 n
+0000005899 00000 n
+0000005981 00000 n
+0000006054 00000 n
+0000006125 00000 n
+0000006207 00000 n
+0000006279 00000 n
+0000006363 00000 n
+0000006435 00000 n
+0000006553 00000 n
+0000006623 00000 n
+0000006693 00000 n
+0000006838 00000 n
+0000006906 00000 n
+0000006978 00000 n
+0000007096 00000 n
+0000007227 00000 n
+0000007295 00000 n
+0000007423 00000 n
+0000007495 00000 n
+0000007565 00000 n
+0000007635 00000 n
+0000007745 00000 n
+0000007813 00000 n
+0000007885 00000 n
+0000007955 00000 n
+0000008025 00000 n
+0000008095 00000 n
+0000008165 00000 n
+0000008235 00000 n
+0000008305 00000 n
+0000008375 00000 n
+0000008526 00000 n
+0000008598 00000 n
+0000008670 00000 n
+0000008767 00000 n
+0000008839 00000 n
+0000008909 00000 n
+0000008979 00000 n
+0000009049 00000 n
+0000009119 00000 n
+0000009189 00000 n
+0000009259 00000 n
+0000009329 00000 n
+0000009399 00000 n
+0000009469 00000 n
+0000009640 00000 n
+0000009710 00000 n
+0000009788 00000 n
+0000009929 00000 n
+0000009997 00000 n
+0000010129 00000 n
+0000010253 00000 n
+0000010371 00000 n
+0000010440 00000 n
+0000010511 00000 n
+0000010580 00000 n
+0000010649 00000 n
+0000010757 00000 n
+0000010845 00000 n
+0000010913 00000 n
+0000010981 00000 n
+0000011067 00000 n
+0000011153 00000 n
+0000011233 00000 n
+0000011319 00000 n
+0000011405 00000 n
+0000011485 00000 n
+0000011571 00000 n
+0000011660 00000 n
+0000011715 00000 n
+0000011783 00000 n
+0000011869 00000 n
+0000012009 00000 n
+0000012094 00000 n
+0000012235 00000 n
+0000012344 00000 n
+0000012485 00000 n
+0000012578 00000 n
+0000012679 00000 n
+0000012734 00000 n
+0000012907 00000 n
+0000013089 00000 n
+0000013215 00000 n
+0000013469 00000 n
+0000013542 00000 n
+0000013615 00000 n
+0000013717 00000 n
+0000013797 00000 n
+0000013870 00000 n
+0000013947 00000 n
+0000014049 00000 n
+0000014124 00000 n
+0000014245 00000 n
+0000014320 00000 n
+0000014441 00000 n
+0000014555 00000 n
+0000014635 00000 n
+0000014763 00000 n
+0000014891 00000 n
+0000015019 00000 n
+0000015099 00000 n
+0000015227 00000 n
+0000015355 00000 n
+0000015483 00000 n
+0000015563 00000 n
+0000015691 00000 n
+0000015819 00000 n
+0000015947 00000 n
+0000016027 00000 n
+0000016155 00000 n
+0000016283 00000 n
+0000016411 00000 n
+0000016491 00000 n
+0000016566 00000 n
+0000016687 00000 n
+0000016762 00000 n
+0000016883 00000 n
+0000017015 00000 n
+0000017095 00000 n
+0000017223 00000 n
+0000017351 00000 n
+0000017479 00000 n
+0000017559 00000 n
+0000017730 00000 n
+0000017841 00000 n
+0000017912 00000 n
+0000017983 00000 n
+0000018056 00000 n
+0000018128 00000 n
+0000018200 00000 n
+0000018272 00000 n
+0000018344 00000 n
+0000018416 00000 n
+0000018585 00000 n
+0000018657 00000 n
+0000018749 00000 n
+0000018821 00000 n
+0000018900 00000 n
+0000018972 00000 n
+0000019044 00000 n
+0000019116 00000 n
+0000019188 00000 n
+0000019260 00000 n
+0000019332 00000 n
+0000019404 00000 n
+0000019562 00000 n
+0000019663 00000 n
+0000019737 00000 n
+0000019809 00000 n
+0000019881 00000 n
+0000019992 00000 n
+0000020102 00000 n
+0000020177 00000 n
+0000020260 00000 n
+0000020334 00000 n
+0000020406 00000 n
+0000020478 00000 n
+0000020550 00000 n
+0000020622 00000 n
+0000020767 00000 n
+0000020841 00000 n
+0000020913 00000 n
+0000020985 00000 n
+0000021057 00000 n
+0000021130 00000 n
+0000021330 00000 n
+0000021403 00000 n
+0000021474 00000 n
+0000021545 00000 n
+0000021616 00000 n
+0000021688 00000 n
+0000021760 00000 n
+0000021832 00000 n
+0000021904 00000 n
+0000021976 00000 n
+0000022048 00000 n
+0000022235 00000 n
+0000022309 00000 n
+0000022381 00000 n
+0000022453 00000 n
+0000022525 00000 n
+0000022603 00000 n
+0000022724 00000 n
+0000022798 00000 n
+0000022870 00000 n
+0000022973 00000 n
+0000023047 00000 n
+0000023127 00000 n
+0000023201 00000 n
+0000023287 00000 n
+0000023359 00000 n
+0000023519 00000 n
+0000023591 00000 n
+0000023665 00000 n
+0000023756 00000 n
+0000024135 00000 n
+0000024172 00000 n
+0000024209 00000 n
+0000024262 00000 n
+0000024314 00000 n
+0000024366 00000 n
+0000024419 00000 n
+0000024471 00000 n
+0000024523 00000 n
+0000024576 00000 n
+0000024629 00000 n
+0000024682 00000 n
+0000024816 00000 n
+0000024950 00000 n
+0000025084 00000 n
+0000025218 00000 n
+0000025367 00000 n
+0000025944 00000 n
+0000026152 00000 n
+0000026304 00000 n
+0000027149 00000 n
+0000027360 00000 n
+0000027500 00000 n
+0000027716 00000 n
+0000027955 00000 n
+0000028115 00000 n
+0000028321 00000 n
+0000028534 00000 n
+0000028679 00000 n
+0000028899 00000 n
+0000029144 00000 n
+0000029272 00000 n
+0000029400 00000 n
+0000029528 00000 n
+0000029656 00000 n
+0000029739 00000 n
+0000030381 00000 n
+0000034852 00000 n
+0000034934 00000 n
+0000035714 00000 n
+0000046346 00000 n
+0000046428 00000 n
+0000047197 00000 n
+0000059607 00000 n
+0000059684 00000 n
+0000060115 00000 n
+0000060587 00000 n
+0000060666 00000 n
+0000061134 00000 n
+0000065576 00000 n
+0000071392 00000 n
+0000077480 00000 n
+0000083396 00000 n
+0000087336 00000 n
+0000087679 00000 n
+0000088086 00000 n
+0000088199 00000 n
+0000089272 00000 n
+trailer +<</Size 273/Root 272 0 R/Info 270 0 R/ID[(ryCwVs21NRYeVZORaVGmEw==)(ryCwVs21NRYeVZORaVGmEw==)]>> +startxref +89459 +%%EOF
\ No newline at end of file diff --git a/docs/design.typ b/docs/design.typ new file mode 100644 index 00000000..382063cd --- /dev/null +++ b/docs/design.typ @@ -0,0 +1,246 @@ +#set page(margin: 2.2cm) +#set text(font: "New Computer Modern", size: 10.5pt) +#set par(justify: true) +#show heading: set block(above: 1.4em, below: 0.8em) + +#align(center)[ + #text(17pt)[*Pardes: A Text Environment*] + + #text(11pt)[design for the rewrite — 2026-07-05] +] + += What it is + +Pardes is a text environment in the acme tradition: columns of panes, each pane a +tag line plus a body; the body is a live terminal, a file, or an image. The mouse +carries meaning — left selects, middle executes, right looks. Everything on screen +is text and all text is equally alive, whether the shell printed it or the user +typed it. + +It runs in three places: the terminal (libvaxis), a native SDL3 window (the +steamdeck), and the browser (wasm + SDL3 + emscripten). The rewrite exists because +the prototype grew three parallel implementations of one program. The rewrite has +exactly one program and three thin shells. + += The shape + +Pardes is a *library*, in the way ghostty-vt is a library: you feed it bytes and +events, and you read state out of it. Every platform owns its own event loop and +its own renderer; the core owns everything the user would recognize as pardes. + +#table( + columns: (auto, 1fr), + stroke: 0.4pt, + [*core*], [layout, panes, modes, selection, click semantics, themes, text of the + UI. Pure state machine: `update(event)` mutates, `surface()` describes. No + syscalls, no rendering, no event loop.], + [*shell*], [one file per platform. Owns the event loop, translates native input + into core events, renders the core's surface, and performs the core's + requested effects (spawn a shell, write a pty, open a link).], +) + +This also collapses the prototype's *two* applications into one: the browser +build today is a separate 800-line read-only replay viewer. In the rewrite, +loading a dump of another instance is a first-class feature of the one +application, the way acme handles dumps: `pardes -l state.zon` on every +platform reconstructs the panes (terminals by replaying their raw VT streams +into fresh emulators, files and images from their bytes). The web shell embeds +a dump and leaves `spawn` unanswered. Same core, no viewer fork. + +The boundary is two data types, both plain values: + +*Event* (in): `key`, `text`, `mouse` (press/release/motion; button left, middle, +right; cell position), `wheel`, `pinch`, `resize`, and `output` (bytes a pty +produced, tagged with the pane id). A touch tap is a left press; a joystick +cursor is a motion plus buttons; the shells do this translation and nothing else +with input. One event vocabulary, three dialects translated at the door. + +*Surface* (out): a grid of cells — grapheme, fg, bg, attrs — plus a cursor and +per-pane rectangles. This is the *canonical interface*: it is literally what the +tty shell hands to vaxis, cell by cell. The SDL shells rasterize the same grid +through a glyph atlas. If it cannot be expressed in the surface, it does not +exist in pardes. (Pixel images ride along as an attachment per pane: the SDL +shells blit RGBA, the tty shell falls back to the petscii matcher, kitty +graphics when available.) + +*Effect* (out, queued): `spawn{pane, cwd}`, `write{pane, bytes}`, +`resize_pty{pane, cols, rows}`, `open_link{url}`, `read_file{path}`, +`set_clipboard`, `bell`, `quit`. The core never performs IO; it asks. This is +what makes the browser build honest instead of a fork: a wasm shell simply +answers `spawn` differently (or not at all) — the core does not know. + +Platform divergence inside the core is a comptime tag, used the way the stdlib +uses `os.tag`: + +```zig +pub const Platform = enum { tty, gui, web }; +// in look.zig: +if (platform == .web and target.kind == .url) + return .{ .open_link = target.text }; +``` + +There is one such file by design: `look.zig` holds *what a click on text means* — +expansion of the word under the click (acme's `isfilec`), path/`:line` +resolution, url detection, and the per-platform outcomes, kept adjacent so the +divergence is visible in one screenful. + += Data structures + +The whole state is one struct, sized at init, no hidden allocation after: + +```zig +Pardes + cols: []Col // col: weight + pane ids, top to bottom + panes: []Pane // slot array; id = index + active: Pane.Id + drag: Drag // none | select | move | border | scrollbar + theme: u2 // index into themes + colors_on: bool + surface: Surface // rebuilt by surface(), arena-backed + effects: Fifo(Effect) + +Pane + tag: TagLine // live prefix (mode, cwd/path) + editable tail + kind: union { term: Term, file: File, image: Image } + vweight: f32 + mode: enum { normal, insert, tty } // helix-modal; tty = raw to the pty + cursor: absolute body position // rides the scrollback, not the screen + sel: [3]Sel + line/char modal sels // per-button block sels, msel, vsel + edits: Splice // typed runs anchored to absolute rows + undo: edit snapshots // unified undo across term edits and file content + +Term = ghostty-vt Terminal + its stream (bytes in via Event.output) +File = path + bytes + line index + Syn (tree-sitter highlight bytes) +Image = decoded RGBA + petscii grid cache +``` + +Layout is arithmetic, not objects: columns are weights over the width, panes are +weights over the column. `splitBelow` shrinks only the source pane; +`absorbVWeight` gives a dying pane's weight to one sibling; an emptied column +hands its width to a neighbor. Minimal motion is the invariant: an operation on +one pane may not move panes it does not touch. + += Style + +TigerStyle, plus house rules proven in the prototype: imperative and flat; one +big `update` dispatch, not handler objects; no one-line helpers — inline the +four-line scan; assert invariants at entry (`assert(vsum > 0)`); static +allocation at init, arenas per frame. The metric is lines of code; the number +only goes down. As built, against the prototype's 12,072 lines of Zig: + +#table( + columns: (auto, auto, 1fr), + stroke: 0.4pt, + [*module*], [*lines*], [], + [core (pardes.zig + look.zig + syntax + image + dump)], [4,289], [all semantics, all platforms], + [modal.zig + petscii.zig (pure, unit-testable)], [1,410], [carried over, unchanged], + [shells (tty.zig; gui.zig = sdl native + web)], [2,768], [translate + rasterize only], + [main.zig + build.zig], [484], [three targets, codegen for queries], + [*application total*], [*7,626*], [vs 12,072 — three full backends instead of one and a half], + [snapshot harness (snapshot.zig + e2e_harness.zig)], [831], [the parity oracle, kept], +) + += Testing: the old program is the oracle + +Before the rewrite compiled, the prototype got a harness (`snapshot.zig`, the +`zig build snap` step): it forks either binary in a pty, feeds it an *event +script* (one line per input: keys, SGR mouse, resizes, sync points), and +captures the rendered grid — text, cursor, and per-cell style runs — through +its own ghostty terminal. Goldens are generated from the old binary +(`zig build snap -- --update`); the new binary must reproduce them byte for +byte (`pardes-snap pardes/zig-out/bin/pardes`). Eighteen scripts cover the +checklist in Appendix A; all pass. Determinism pins: fixed workdir paths (they +appear in tags), a controlled `$HOME` with `PS1='$ '`, `LC_ALL=C`, and a +grid-stability sync primitive instead of timing guesses. + +Three deliberate deviations surfaced by the oracle, kept after review: the +greeting `ls` waits for the shell's first output (the prototype raced bash's +startup and won only by allocator luck); dump files compare with base64 pty +history elided (it encodes prompt-redraw micro-timing, not state — the cleaned +text fields are the contract); and typed insert runs don't survive a dump +replay (they are an overlay, not pty bytes — the prototype's replay viewer had +the same semantics). + +Shell correctness (that SDL draws the grid it was given, that vaxis diffs +correctly) is out of snapshot scope and covered by each shell's single smoke +test. + += Build + +`zig build` produces three statically linked artifacts: `pardes` (vaxis), +`pardes-gui` (SDL3), `pardes.wasm` + shell page (emscripten). Same dependency +set as the prototype — ghostty, vaxis, uucode (shared config), zstbi, SDL +(castholm, lazy), zig-tree-sitter + grammars — all via `zig fetch`, wired in +`build.zig`. Codegen during build, consumed by comptime: tree-sitter +`highlights.scm` → options module; tutor text → embedded pane content. Debug +builds are incremental for the seconds-loop; release builds are the product. + += What is deliberately absent + +No render abstraction over the shells (the surface *is* the abstraction). No +config files. No plugin system. No async runtime in the core — the shells may +thread, the core is single-threaded by construction. No 9P yet — but the +library boundary is exactly where acme put the file server, and a fourth shell +could serve `Surface` and `Event` over 9P without touching the core. + += Appendix A: feature parity checklist + +From the prototype survey; every line is covered by at least one of the +eighteen event scripts in `test/snapshots/` (boot, tty, edit, scroll, modal, +look-file, look-dir, exec, tag, theme, tutor, windowops, dump, load, ttyonly, +syntax, fileedit, images). + +*Layout.* Columns by weight (≤6), panes by vweight (≤16); global topbar; +per-pane gutter (move box + scrollbar) and tag row; `splitBelow` shrinks only +the source (cursor row kept visible); dying pane's weight absorbed by one +sibling; emptied column hands width to a neighbor; border-drag resize on a +pane's own trailing edge (v and h), hover shows `╎`/`╌` glyph-only hints; +move-drag via the gutter box with preview; Alt-n new shell below, Alt-c move +pane to new column; Ctrl-w h/j/k/l directional focus; `--tty` single-pane mode. + +*Mouse.* Left: select (block, stays highlighted after drag, pins cursor, +enters normal), click clears, tag-row click enters tag edit, scrollbar +click scrolls up-to-row (right button: down), border/move drags. Middle: +execute — no-drag expands to file-ish word (alnum `.-+/:@_~`); builtin or send +to shell; does not focus. Right: look — peel `:NNN`, resolve against pane cwd +(`/proc/pid/cwd`) or file's dir; dir → shell + `ls` in source column (dedup by +cwd), file → file pane at line (dedup by path, first doc opens left column and +may evict a lone pristine shell; later docs split below the existing doc), +image ext → image pane. Middle+left chord: kept left selection appended as +trailing CLI argument. Wheel: scroll hovered pane, batched. + +*Modes.* normal: helix motions (`h j k l w b e W B E 0 $ ^ gg ge gh gl G`, +`Ctrl-d/u/f/b`, `zt zz zb`), insert entries (`i a I A o O`), `v`/`x` +selections, `d c y p u U`, Enter=look Tab=execute at cursor. insert: +click-and-type; terminals get splice runs (shift right, never overwrite; +absolute-row anchored), files get real edits. tty: raw pty forwarding +(Ctrl-key toggle, default Ctrl-b, `--tty-toggle`), mouse still usable, +promptClickMove on entry, prompts visible (hidden in the other modes via +OSC 133). `p` pastes from system clipboard (OSC 52 request/reply); yank +mirrors out via OSC 52. + +*Tag.* Live prefix (mode indicator, cwd or path) + editable tail with the +full modal editor; defaults `Del` / `Save Del`; image tags are toggle words +(`Petscii C64|Term Ascii`). Topbar: `Kill Newcol Tutor Debug Colors NextColor +Dump` — execute-only (left click inert). + +*Panes.* Terminal: ghostty-vt, 16 MiB scrollback, OSC 133 prompt semantics, +OSC 7 cwd, DSR/DA/kitty-query replies (write_pty + device_attributes — the +nushell/helix regression), greeting `ls`, auto-follow output unless +navigating. File: line-number gutter (fixed width), tree-sitter highlights +(c/cpp/zig minimal tier; 25 grammars full tier; re-highlight on edit, +visible-range first), Save, open-at-line, undo/redo. Image: zstbi decode, +kitty graphics when available, petscii matcher fallback (C64/terminal +palettes, ascii glyph set toggle). Tutor: embedded text as file pane. + +*Chrome.* Themes dark + acme-light (terminal-native vs paletted); Colors +toggles all recolor passes; Debug stats overlay; Dump writes state ZON. + +*Web (replay viewer parity).* Embedded dump; focus, border/move drags, wheel, +scrollbar, Colors/NextColor, pinch + touch (two-finger = middle), render +scale, link-look opens a new tab (new — the prototype has no web link +handling). SDL shells: stb_truetype atlas over the SDL GPU API (SPIR-V on +native, GLES3 on web), letterboxed web scaling, two-finger drag = wheel, tap += middle click, pinch, touch debug overlay, `PARDES_TEST` PPM capture and +`PARDES_TEST_GRID` text-grid capture. Joystick cursor for the steamdeck is +*new* scope — the prototype ships no gamepad input. diff --git a/docs/ideas.typ b/docs/ideas.typ new file mode 100644 index 00000000..f4faf810 --- /dev/null +++ b/docs/ideas.typ @@ -0,0 +1,13 @@ +- grep shows treesitter context around + - this could be implemented as a separate binary +- clickable file:lines show somehow (as highlights or something else) + - is line above of below middle one on the editor + - is this on the same file as open on the editor + +- clickable things for the mouse should be navigatable with the keyboard + - like if I get some search results I can just use tab to navigate them, the editor should know: + - semantic boundaries (maybe just jump to the next clickable thing?) + +- undo for everything? + - I want search results in general to be logged, that's one of the reasons why the tty is a good fit + - so it'd be cool to undo that too? |
