├── .gitignore ├── Cargo.lock ├── Cargo.toml ├── README.md ├── SERVO.md ├── resources ├── ahem.css ├── ahem │ ├── AHEM____.TTF │ ├── Ahem.ps │ ├── Ahem.sit │ ├── COPIED-FROM │ ├── COPYING │ └── README ├── badcert.html ├── badcert.jpg ├── cert-google-only ├── certs ├── failure.html ├── hsts_preload.json ├── iso-8859-8.css ├── prefs.json ├── presentational-hints.css ├── quirks-mode.css ├── quotes.css ├── rippy.jpg ├── servo.css ├── user-agent-js │ └── 00.example.js └── user-agent.css └── src ├── browser ├── browser.rs ├── buffer.rs ├── mod.rs ├── tab.rs └── window.rs ├── main.rs └── util.rs /.gitignore: -------------------------------------------------------------------------------- 1 | target 2 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | [root] 2 | name = "miserve" 3 | version = "0.1.0" 4 | dependencies = [ 5 | "bitflags 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 6 | "env_logger 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 7 | "glutin 0.3.5 (git+https://github.com/tomaka/glutin)", 8 | "log 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 9 | "num_cpus 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", 10 | "servo 0.0.1 (git+https://github.com/servo/servo)", 11 | "time 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", 12 | "x11 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 13 | ] 14 | 15 | [[package]] 16 | name = "advapi32-sys" 17 | version = "0.1.2" 18 | source = "registry+https://github.com/rust-lang/crates.io-index" 19 | dependencies = [ 20 | "winapi 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 21 | "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 22 | ] 23 | 24 | [[package]] 25 | name = "aho-corasick" 26 | version = "0.3.0" 27 | source = "registry+https://github.com/rust-lang/crates.io-index" 28 | dependencies = [ 29 | "memchr 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 30 | ] 31 | 32 | [[package]] 33 | name = "android_glue" 34 | version = "0.0.2" 35 | source = "registry+https://github.com/rust-lang/crates.io-index" 36 | 37 | [[package]] 38 | name = "angle" 39 | version = "0.1.0" 40 | source = "git+https://github.com/ecoal95/angle?branch=servo#77288884bd7a89bf3019ca94dcda6c94cb178aa4" 41 | dependencies = [ 42 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 43 | ] 44 | 45 | [[package]] 46 | name = "aster" 47 | version = "0.4.4" 48 | source = "registry+https://github.com/rust-lang/crates.io-index" 49 | 50 | [[package]] 51 | name = "azure" 52 | version = "0.1.0" 53 | source = "git+https://github.com/servo/rust-azure#53e7b7d07bd43199b136d869b1605016ed882cbc" 54 | dependencies = [ 55 | "core-foundation 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 56 | "core-graphics 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 57 | "core-text 0.1.0 (git+https://github.com/servo/core-text-rs)", 58 | "egl 0.1.0 (git+https://github.com/servo/rust-egl)", 59 | "euclid 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 60 | "freetype 0.1.0 (git+https://github.com/servo/rust-freetype)", 61 | "freetype-sys 2.4.11 (git+https://github.com/servo/libfreetype2)", 62 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 63 | "serde 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", 64 | "serde_macros 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 65 | "skia 0.0.20130412 (git+https://github.com/servo/skia)", 66 | "x11 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 67 | ] 68 | 69 | [[package]] 70 | name = "bincode" 71 | version = "0.4.0" 72 | source = "git+https://github.com/TyOverby/bincode#5bc43b85bcd9290e9ffc519eca32913214c81124" 73 | dependencies = [ 74 | "byteorder 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)", 75 | "num 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", 76 | "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", 77 | "serde 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", 78 | ] 79 | 80 | [[package]] 81 | name = "bitflags" 82 | version = "0.1.1" 83 | source = "registry+https://github.com/rust-lang/crates.io-index" 84 | 85 | [[package]] 86 | name = "bitflags" 87 | version = "0.3.2" 88 | source = "registry+https://github.com/rust-lang/crates.io-index" 89 | 90 | [[package]] 91 | name = "block" 92 | version = "0.1.1" 93 | source = "registry+https://github.com/rust-lang/crates.io-index" 94 | dependencies = [ 95 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 96 | ] 97 | 98 | [[package]] 99 | name = "byteorder" 100 | version = "0.3.11" 101 | source = "registry+https://github.com/rust-lang/crates.io-index" 102 | 103 | [[package]] 104 | name = "canvas" 105 | version = "0.0.1" 106 | source = "git+https://github.com/servo/servo#0d37e8f96b7f40d14bf4fbb0b66e42a01302a336" 107 | dependencies = [ 108 | "azure 0.1.0 (git+https://github.com/servo/rust-azure)", 109 | "canvas_traits 0.0.1 (git+https://github.com/servo/servo)", 110 | "cssparser 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 111 | "euclid 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 112 | "gfx_traits 0.0.1 (git+https://github.com/servo/servo)", 113 | "gleam 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 114 | "ipc-channel 0.1.0 (git+https://github.com/pcwalton/ipc-channel)", 115 | "layers 0.1.0 (git+https://github.com/servo/rust-layers)", 116 | "log 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 117 | "num 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", 118 | "offscreen_gl_context 0.1.0 (git+https://github.com/ecoal95/rust-offscreen-rendering-context)", 119 | "util 0.0.1 (git+https://github.com/servo/servo)", 120 | ] 121 | 122 | [[package]] 123 | name = "canvas_traits" 124 | version = "0.0.1" 125 | source = "git+https://github.com/servo/servo#0d37e8f96b7f40d14bf4fbb0b66e42a01302a336" 126 | dependencies = [ 127 | "azure 0.1.0 (git+https://github.com/servo/rust-azure)", 128 | "cssparser 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 129 | "euclid 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 130 | "gfx_traits 0.0.1 (git+https://github.com/servo/servo)", 131 | "ipc-channel 0.1.0 (git+https://github.com/pcwalton/ipc-channel)", 132 | "layers 0.1.0 (git+https://github.com/servo/rust-layers)", 133 | "offscreen_gl_context 0.1.0 (git+https://github.com/ecoal95/rust-offscreen-rendering-context)", 134 | "plugins 0.0.1 (git+https://github.com/servo/servo)", 135 | "serde 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", 136 | "serde_macros 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 137 | "util 0.0.1 (git+https://github.com/servo/servo)", 138 | ] 139 | 140 | [[package]] 141 | name = "cgl" 142 | version = "0.1.0" 143 | source = "registry+https://github.com/rust-lang/crates.io-index" 144 | dependencies = [ 145 | "gleam 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 146 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 147 | ] 148 | 149 | [[package]] 150 | name = "clipboard" 151 | version = "0.0.3" 152 | source = "git+https://github.com/aweinstock314/rust-clipboard#8c4c31e73a5ac5afd97825acc4c534dccfc0ab9b" 153 | dependencies = [ 154 | "clipboard-win 1.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 155 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 156 | "objc 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 157 | "objc-foundation 0.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 158 | "objc_id 0.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 159 | "x11 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 160 | ] 161 | 162 | [[package]] 163 | name = "clipboard-win" 164 | version = "1.5.1" 165 | source = "registry+https://github.com/rust-lang/crates.io-index" 166 | dependencies = [ 167 | "kernel32-sys 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 168 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 169 | "user32-sys 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 170 | "winapi 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 171 | ] 172 | 173 | [[package]] 174 | name = "clock_ticks" 175 | version = "0.0.6" 176 | source = "git+https://github.com/tomaka/clock_ticks#acfcf96806ae5e3bc647b7412a1c430ce62b79a1" 177 | dependencies = [ 178 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 179 | ] 180 | 181 | [[package]] 182 | name = "cocoa" 183 | version = "0.1.3" 184 | source = "registry+https://github.com/rust-lang/crates.io-index" 185 | dependencies = [ 186 | "bitflags 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 187 | "core-graphics 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 188 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 189 | "objc 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 190 | ] 191 | 192 | [[package]] 193 | name = "compositing" 194 | version = "0.0.1" 195 | source = "git+https://github.com/servo/servo#0d37e8f96b7f40d14bf4fbb0b66e42a01302a336" 196 | dependencies = [ 197 | "azure 0.1.0 (git+https://github.com/servo/rust-azure)", 198 | "canvas 0.0.1 (git+https://github.com/servo/servo)", 199 | "canvas_traits 0.0.1 (git+https://github.com/servo/servo)", 200 | "clipboard 0.0.3 (git+https://github.com/aweinstock314/rust-clipboard)", 201 | "core-graphics 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 202 | "core-text 0.1.0 (git+https://github.com/servo/core-text-rs)", 203 | "devtools_traits 0.0.1 (git+https://github.com/servo/servo)", 204 | "euclid 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 205 | "gfx 0.0.1 (git+https://github.com/servo/servo)", 206 | "gfx_traits 0.0.1 (git+https://github.com/servo/servo)", 207 | "gleam 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 208 | "ipc-channel 0.1.0 (git+https://github.com/pcwalton/ipc-channel)", 209 | "layers 0.1.0 (git+https://github.com/servo/rust-layers)", 210 | "layout_traits 0.0.1 (git+https://github.com/servo/servo)", 211 | "log 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 212 | "msg 0.0.1 (git+https://github.com/servo/servo)", 213 | "net_traits 0.0.1 (git+https://github.com/servo/servo)", 214 | "num 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", 215 | "offscreen_gl_context 0.1.0 (git+https://github.com/ecoal95/rust-offscreen-rendering-context)", 216 | "png 0.1.0 (git+https://github.com/servo/rust-png)", 217 | "profile_traits 0.0.1 (git+https://github.com/servo/servo)", 218 | "script_traits 0.0.1 (git+https://github.com/servo/servo)", 219 | "style_traits 0.0.1 (git+https://github.com/servo/servo)", 220 | "time 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", 221 | "url 0.2.37 (registry+https://github.com/rust-lang/crates.io-index)", 222 | "util 0.0.1 (git+https://github.com/servo/servo)", 223 | ] 224 | 225 | [[package]] 226 | name = "cookie" 227 | version = "0.1.21" 228 | source = "registry+https://github.com/rust-lang/crates.io-index" 229 | dependencies = [ 230 | "openssl 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", 231 | "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", 232 | "time 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", 233 | "url 0.2.37 (registry+https://github.com/rust-lang/crates.io-index)", 234 | ] 235 | 236 | [[package]] 237 | name = "core-foundation" 238 | version = "0.1.0" 239 | source = "registry+https://github.com/rust-lang/crates.io-index" 240 | dependencies = [ 241 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 242 | ] 243 | 244 | [[package]] 245 | name = "core-graphics" 246 | version = "0.1.0" 247 | source = "registry+https://github.com/rust-lang/crates.io-index" 248 | dependencies = [ 249 | "core-foundation 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 250 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 251 | ] 252 | 253 | [[package]] 254 | name = "core-text" 255 | version = "0.1.0" 256 | source = "git+https://github.com/servo/core-text-rs#d97cd4ae33509857f956e64c71f43cc71c98430f" 257 | dependencies = [ 258 | "core-foundation 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 259 | "core-graphics 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 260 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 261 | ] 262 | 263 | [[package]] 264 | name = "cssparser" 265 | version = "0.3.6" 266 | source = "registry+https://github.com/rust-lang/crates.io-index" 267 | dependencies = [ 268 | "encoding 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)", 269 | "matches 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 270 | "serde 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", 271 | "serde_macros 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 272 | ] 273 | 274 | [[package]] 275 | name = "debug-builders" 276 | version = "0.1.0" 277 | source = "registry+https://github.com/rust-lang/crates.io-index" 278 | 279 | [[package]] 280 | name = "debug_unreachable" 281 | version = "0.0.6" 282 | source = "registry+https://github.com/rust-lang/crates.io-index" 283 | dependencies = [ 284 | "unreachable 0.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 285 | ] 286 | 287 | [[package]] 288 | name = "devtools" 289 | version = "0.0.1" 290 | source = "git+https://github.com/servo/servo#0d37e8f96b7f40d14bf4fbb0b66e42a01302a336" 291 | dependencies = [ 292 | "devtools_traits 0.0.1 (git+https://github.com/servo/servo)", 293 | "hyper 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", 294 | "ipc-channel 0.1.0 (git+https://github.com/pcwalton/ipc-channel)", 295 | "log 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 296 | "msg 0.0.1 (git+https://github.com/servo/servo)", 297 | "plugins 0.0.1 (git+https://github.com/servo/servo)", 298 | "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", 299 | "serde 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", 300 | "serde_macros 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 301 | "time 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", 302 | "url 0.2.37 (registry+https://github.com/rust-lang/crates.io-index)", 303 | "util 0.0.1 (git+https://github.com/servo/servo)", 304 | ] 305 | 306 | [[package]] 307 | name = "devtools_traits" 308 | version = "0.0.1" 309 | source = "git+https://github.com/servo/servo#0d37e8f96b7f40d14bf4fbb0b66e42a01302a336" 310 | dependencies = [ 311 | "bitflags 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 312 | "hyper 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", 313 | "ipc-channel 0.1.0 (git+https://github.com/pcwalton/ipc-channel)", 314 | "msg 0.0.1 (git+https://github.com/servo/servo)", 315 | "plugins 0.0.1 (git+https://github.com/servo/servo)", 316 | "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", 317 | "serde 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", 318 | "serde_macros 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 319 | "time 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", 320 | "url 0.2.37 (registry+https://github.com/rust-lang/crates.io-index)", 321 | "util 0.0.1 (git+https://github.com/servo/servo)", 322 | ] 323 | 324 | [[package]] 325 | name = "dlib" 326 | version = "0.1.1" 327 | source = "registry+https://github.com/rust-lang/crates.io-index" 328 | dependencies = [ 329 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 330 | ] 331 | 332 | [[package]] 333 | name = "dwmapi-sys" 334 | version = "0.1.0" 335 | source = "registry+https://github.com/rust-lang/crates.io-index" 336 | dependencies = [ 337 | "winapi 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 338 | "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 339 | ] 340 | 341 | [[package]] 342 | name = "dylib" 343 | version = "0.0.1" 344 | source = "registry+https://github.com/rust-lang/crates.io-index" 345 | dependencies = [ 346 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 347 | ] 348 | 349 | [[package]] 350 | name = "egl" 351 | version = "0.1.0" 352 | source = "git+https://github.com/servo/rust-egl#b21a3eafc321bd498231fcd4f4704fd90898ebf4" 353 | dependencies = [ 354 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 355 | ] 356 | 357 | [[package]] 358 | name = "encoding" 359 | version = "0.2.32" 360 | source = "registry+https://github.com/rust-lang/crates.io-index" 361 | dependencies = [ 362 | "encoding-index-japanese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)", 363 | "encoding-index-korean 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)", 364 | "encoding-index-simpchinese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)", 365 | "encoding-index-singlebyte 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)", 366 | "encoding-index-tradchinese 1.20141219.5 (registry+https://github.com/rust-lang/crates.io-index)", 367 | ] 368 | 369 | [[package]] 370 | name = "encoding-index-japanese" 371 | version = "1.20141219.5" 372 | source = "registry+https://github.com/rust-lang/crates.io-index" 373 | dependencies = [ 374 | "encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 375 | ] 376 | 377 | [[package]] 378 | name = "encoding-index-korean" 379 | version = "1.20141219.5" 380 | source = "registry+https://github.com/rust-lang/crates.io-index" 381 | dependencies = [ 382 | "encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 383 | ] 384 | 385 | [[package]] 386 | name = "encoding-index-simpchinese" 387 | version = "1.20141219.5" 388 | source = "registry+https://github.com/rust-lang/crates.io-index" 389 | dependencies = [ 390 | "encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 391 | ] 392 | 393 | [[package]] 394 | name = "encoding-index-singlebyte" 395 | version = "1.20141219.5" 396 | source = "registry+https://github.com/rust-lang/crates.io-index" 397 | dependencies = [ 398 | "encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 399 | ] 400 | 401 | [[package]] 402 | name = "encoding-index-tradchinese" 403 | version = "1.20141219.5" 404 | source = "registry+https://github.com/rust-lang/crates.io-index" 405 | dependencies = [ 406 | "encoding_index_tests 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", 407 | ] 408 | 409 | [[package]] 410 | name = "encoding_index_tests" 411 | version = "0.1.4" 412 | source = "registry+https://github.com/rust-lang/crates.io-index" 413 | 414 | [[package]] 415 | name = "env_logger" 416 | version = "0.3.1" 417 | source = "registry+https://github.com/rust-lang/crates.io-index" 418 | dependencies = [ 419 | "log 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 420 | "regex 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)", 421 | ] 422 | 423 | [[package]] 424 | name = "euclid" 425 | version = "0.1.6" 426 | source = "registry+https://github.com/rust-lang/crates.io-index" 427 | dependencies = [ 428 | "log 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 429 | "num 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", 430 | "rand 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)", 431 | "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", 432 | "serde 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", 433 | "serde_macros 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 434 | ] 435 | 436 | [[package]] 437 | name = "expat-sys" 438 | version = "2.1.0" 439 | source = "git+https://github.com/servo/libexpat#b0f0d40b6651b0f6286f0f6bcc31c86c5c6c0f4f" 440 | 441 | [[package]] 442 | name = "flate2" 443 | version = "0.2.7" 444 | source = "registry+https://github.com/rust-lang/crates.io-index" 445 | dependencies = [ 446 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 447 | "miniz-sys 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 448 | ] 449 | 450 | [[package]] 451 | name = "fnv" 452 | version = "1.0.0" 453 | source = "registry+https://github.com/rust-lang/crates.io-index" 454 | 455 | [[package]] 456 | name = "fontconfig" 457 | version = "0.1.0" 458 | source = "git+https://github.com/servo/rust-fontconfig#7839e5adcb4d6da3cefe2256f5071ac0203b9206" 459 | dependencies = [ 460 | "fontconfig-sys 2.11.1 (git+https://github.com/servo/libfontconfig)", 461 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 462 | ] 463 | 464 | [[package]] 465 | name = "fontconfig-sys" 466 | version = "2.11.1" 467 | source = "git+https://github.com/servo/libfontconfig#b01ee3e2f8523a6566b8e5d406a2176ccb574060" 468 | dependencies = [ 469 | "expat-sys 2.1.0 (git+https://github.com/servo/libexpat)", 470 | "freetype-sys 2.4.11 (git+https://github.com/servo/libfreetype2)", 471 | ] 472 | 473 | [[package]] 474 | name = "freetype" 475 | version = "0.1.0" 476 | source = "git+https://github.com/servo/rust-freetype#d564ff90a3c69d987f5c015d7ec034cfaee21aff" 477 | dependencies = [ 478 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 479 | ] 480 | 481 | [[package]] 482 | name = "freetype-sys" 483 | version = "2.4.11" 484 | source = "git+https://github.com/servo/libfreetype2#8b6e4e384dd78a5b373c9bfcdd4a2f2cf650db86" 485 | 486 | [[package]] 487 | name = "futf" 488 | version = "0.1.1" 489 | source = "registry+https://github.com/rust-lang/crates.io-index" 490 | dependencies = [ 491 | "debug_unreachable 0.0.6 (registry+https://github.com/rust-lang/crates.io-index)", 492 | "mac 0.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 493 | ] 494 | 495 | [[package]] 496 | name = "gcc" 497 | version = "0.3.12" 498 | source = "registry+https://github.com/rust-lang/crates.io-index" 499 | dependencies = [ 500 | "advapi32-sys 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 501 | "winapi 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 502 | ] 503 | 504 | [[package]] 505 | name = "gdi32-sys" 506 | version = "0.1.1" 507 | source = "registry+https://github.com/rust-lang/crates.io-index" 508 | dependencies = [ 509 | "winapi 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 510 | ] 511 | 512 | [[package]] 513 | name = "getopts" 514 | version = "0.2.11" 515 | source = "registry+https://github.com/rust-lang/crates.io-index" 516 | dependencies = [ 517 | "log 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 518 | ] 519 | 520 | [[package]] 521 | name = "gfx" 522 | version = "0.0.1" 523 | source = "git+https://github.com/servo/servo#0d37e8f96b7f40d14bf4fbb0b66e42a01302a336" 524 | dependencies = [ 525 | "azure 0.1.0 (git+https://github.com/servo/rust-azure)", 526 | "bitflags 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 527 | "canvas_traits 0.0.1 (git+https://github.com/servo/servo)", 528 | "core-foundation 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 529 | "core-graphics 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 530 | "core-text 0.1.0 (git+https://github.com/servo/core-text-rs)", 531 | "euclid 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 532 | "fnv 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 533 | "fontconfig 0.1.0 (git+https://github.com/servo/rust-fontconfig)", 534 | "freetype 0.1.0 (git+https://github.com/servo/rust-freetype)", 535 | "gfx_traits 0.0.1 (git+https://github.com/servo/servo)", 536 | "harfbuzz 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 537 | "ipc-channel 0.1.0 (git+https://github.com/pcwalton/ipc-channel)", 538 | "layers 0.1.0 (git+https://github.com/servo/rust-layers)", 539 | "lazy_static 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", 540 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 541 | "log 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 542 | "msg 0.0.1 (git+https://github.com/servo/servo)", 543 | "net_traits 0.0.1 (git+https://github.com/servo/servo)", 544 | "plugins 0.0.1 (git+https://github.com/servo/servo)", 545 | "profile_traits 0.0.1 (git+https://github.com/servo/servo)", 546 | "rand 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)", 547 | "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", 548 | "script_traits 0.0.1 (git+https://github.com/servo/servo)", 549 | "serde 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", 550 | "serde_macros 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 551 | "skia 0.0.20130412 (git+https://github.com/servo/skia)", 552 | "smallvec 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 553 | "string_cache 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", 554 | "style 0.0.1 (git+https://github.com/servo/servo)", 555 | "time 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", 556 | "url 0.2.37 (registry+https://github.com/rust-lang/crates.io-index)", 557 | "util 0.0.1 (git+https://github.com/servo/servo)", 558 | ] 559 | 560 | [[package]] 561 | name = "gfx_traits" 562 | version = "0.0.1" 563 | source = "git+https://github.com/servo/servo#0d37e8f96b7f40d14bf4fbb0b66e42a01302a336" 564 | dependencies = [ 565 | "azure 0.1.0 (git+https://github.com/servo/rust-azure)", 566 | ] 567 | 568 | [[package]] 569 | name = "gl_common" 570 | version = "0.0.4" 571 | source = "registry+https://github.com/rust-lang/crates.io-index" 572 | dependencies = [ 573 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 574 | ] 575 | 576 | [[package]] 577 | name = "gl_generator" 578 | version = "0.0.26" 579 | source = "registry+https://github.com/rust-lang/crates.io-index" 580 | dependencies = [ 581 | "khronos_api 0.0.7 (registry+https://github.com/rust-lang/crates.io-index)", 582 | "log 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 583 | "xml-rs 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)", 584 | ] 585 | 586 | [[package]] 587 | name = "gl_generator" 588 | version = "0.0.27" 589 | source = "registry+https://github.com/rust-lang/crates.io-index" 590 | dependencies = [ 591 | "khronos_api 0.0.7 (registry+https://github.com/rust-lang/crates.io-index)", 592 | "log 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 593 | "xml-rs 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)", 594 | ] 595 | 596 | [[package]] 597 | name = "gleam" 598 | version = "0.1.9" 599 | source = "registry+https://github.com/rust-lang/crates.io-index" 600 | dependencies = [ 601 | "gl_common 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 602 | "gl_generator 0.0.27 (registry+https://github.com/rust-lang/crates.io-index)", 603 | "khronos_api 0.0.7 (registry+https://github.com/rust-lang/crates.io-index)", 604 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 605 | ] 606 | 607 | [[package]] 608 | name = "glutin" 609 | version = "0.3.5" 610 | source = "git+https://github.com/tomaka/glutin#8092fd640938366110627027b3471025abd2c4b9" 611 | dependencies = [ 612 | "android_glue 0.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 613 | "cgl 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 614 | "cocoa 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 615 | "core-foundation 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 616 | "core-graphics 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 617 | "dwmapi-sys 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 618 | "gdi32-sys 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 619 | "gl_common 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 620 | "gl_generator 0.0.26 (registry+https://github.com/rust-lang/crates.io-index)", 621 | "kernel32-sys 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 622 | "khronos_api 0.0.7 (registry+https://github.com/rust-lang/crates.io-index)", 623 | "lazy_static 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", 624 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 625 | "objc 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 626 | "osmesa-sys 0.0.5 (registry+https://github.com/rust-lang/crates.io-index)", 627 | "shared_library 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 628 | "shell32-sys 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 629 | "user32-sys 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 630 | "wayland-client 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 631 | "wayland-kbd 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 632 | "wayland-window 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 633 | "winapi 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 634 | "x11-dl 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 635 | ] 636 | 637 | [[package]] 638 | name = "glx" 639 | version = "0.0.1" 640 | source = "git+https://github.com/servo/rust-glx#75ed2359f50c16c60f871e2f5f146e2016d8453d" 641 | dependencies = [ 642 | "gl_common 0.0.4 (registry+https://github.com/rust-lang/crates.io-index)", 643 | "gl_generator 0.0.27 (registry+https://github.com/rust-lang/crates.io-index)", 644 | "khronos_api 0.0.7 (registry+https://github.com/rust-lang/crates.io-index)", 645 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 646 | ] 647 | 648 | [[package]] 649 | name = "harfbuzz" 650 | version = "0.1.1" 651 | source = "registry+https://github.com/rust-lang/crates.io-index" 652 | dependencies = [ 653 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 654 | ] 655 | 656 | [[package]] 657 | name = "hbs-common-sys" 658 | version = "0.1.0" 659 | source = "git+https://github.com/libheartbeats/heartbeats-simple-sys.git#2b415b92cd955e63c4b939b91a3e7dbf5902c8af" 660 | dependencies = [ 661 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 662 | ] 663 | 664 | [[package]] 665 | name = "hbs-pow" 666 | version = "0.1.0" 667 | source = "git+https://github.com/libheartbeats/heartbeats-simple-rust.git#70ad49c810da3842e12eef2075d58552f1f6c707" 668 | dependencies = [ 669 | "hbs-pow-sys 0.1.0 (git+https://github.com/libheartbeats/heartbeats-simple-sys.git)", 670 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 671 | ] 672 | 673 | [[package]] 674 | name = "hbs-pow-sys" 675 | version = "0.1.0" 676 | source = "git+https://github.com/libheartbeats/heartbeats-simple-sys.git#2b415b92cd955e63c4b939b91a3e7dbf5902c8af" 677 | dependencies = [ 678 | "hbs-common-sys 0.1.0 (git+https://github.com/libheartbeats/heartbeats-simple-sys.git)", 679 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 680 | "pkg-config 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", 681 | ] 682 | 683 | [[package]] 684 | name = "heapsize" 685 | version = "0.1.2" 686 | source = "registry+https://github.com/rust-lang/crates.io-index" 687 | dependencies = [ 688 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 689 | ] 690 | 691 | [[package]] 692 | name = "hpack" 693 | version = "0.2.0" 694 | source = "registry+https://github.com/rust-lang/crates.io-index" 695 | dependencies = [ 696 | "log 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 697 | ] 698 | 699 | [[package]] 700 | name = "html5ever" 701 | version = "0.2.3" 702 | source = "registry+https://github.com/rust-lang/crates.io-index" 703 | dependencies = [ 704 | "html5ever_macros 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", 705 | "log 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 706 | "mac 0.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 707 | "phf 0.7.4 (registry+https://github.com/rust-lang/crates.io-index)", 708 | "phf_codegen 0.7.4 (registry+https://github.com/rust-lang/crates.io-index)", 709 | "rc 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 710 | "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", 711 | "string_cache 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", 712 | "string_cache_plugin 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 713 | "tendril 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 714 | "time 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", 715 | ] 716 | 717 | [[package]] 718 | name = "html5ever_macros" 719 | version = "0.2.2" 720 | source = "registry+https://github.com/rust-lang/crates.io-index" 721 | dependencies = [ 722 | "mac 0.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 723 | ] 724 | 725 | [[package]] 726 | name = "httparse" 727 | version = "0.1.5" 728 | source = "registry+https://github.com/rust-lang/crates.io-index" 729 | 730 | [[package]] 731 | name = "hyper" 732 | version = "0.6.13" 733 | source = "registry+https://github.com/rust-lang/crates.io-index" 734 | dependencies = [ 735 | "cookie 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", 736 | "httparse 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 737 | "language-tags 0.0.7 (registry+https://github.com/rust-lang/crates.io-index)", 738 | "log 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 739 | "mime 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 740 | "num_cpus 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", 741 | "openssl 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", 742 | "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", 743 | "serde 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", 744 | "solicit 0.4.3 (registry+https://github.com/rust-lang/crates.io-index)", 745 | "time 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", 746 | "traitobject 0.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 747 | "typeable 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 748 | "unicase 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 749 | "url 0.2.37 (registry+https://github.com/rust-lang/crates.io-index)", 750 | ] 751 | 752 | [[package]] 753 | name = "io-surface" 754 | version = "0.1.0" 755 | source = "git+https://github.com/servo/io-surface-rs#55ed8f9491e6d1f67b60ed2683088a4c5da058f2" 756 | dependencies = [ 757 | "cgl 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 758 | "core-foundation 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 759 | "euclid 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 760 | "gleam 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 761 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 762 | ] 763 | 764 | [[package]] 765 | name = "ipc-channel" 766 | version = "0.1.0" 767 | source = "git+https://github.com/pcwalton/ipc-channel#63a7b00deb5296ff890cc2c7964e039dbd7aeb13" 768 | dependencies = [ 769 | "bincode 0.4.0 (git+https://github.com/TyOverby/bincode)", 770 | "byteorder 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)", 771 | "lazy_static 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", 772 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 773 | "rand 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)", 774 | "serde 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", 775 | "serde_macros 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 776 | ] 777 | 778 | [[package]] 779 | name = "js" 780 | version = "0.1.0" 781 | source = "git+https://github.com/servo/rust-mozjs#ff77d7152515b8dbfe29cb5f883e3a348673741c" 782 | dependencies = [ 783 | "heapsize 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 784 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 785 | "log 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 786 | "mozjs_sys 0.0.0 (git+https://github.com/servo/mozjs)", 787 | "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", 788 | ] 789 | 790 | [[package]] 791 | name = "kernel32-sys" 792 | version = "0.1.3" 793 | source = "registry+https://github.com/rust-lang/crates.io-index" 794 | dependencies = [ 795 | "winapi 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 796 | "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 797 | ] 798 | 799 | [[package]] 800 | name = "khronos_api" 801 | version = "0.0.7" 802 | source = "registry+https://github.com/rust-lang/crates.io-index" 803 | 804 | [[package]] 805 | name = "language-tags" 806 | version = "0.0.7" 807 | source = "registry+https://github.com/rust-lang/crates.io-index" 808 | 809 | [[package]] 810 | name = "layers" 811 | version = "0.1.0" 812 | source = "git+https://github.com/servo/rust-layers#a8400005fd3ee37ced92865184974c9a93201bc0" 813 | dependencies = [ 814 | "azure 0.1.0 (git+https://github.com/servo/rust-azure)", 815 | "cgl 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 816 | "core-foundation 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 817 | "egl 0.1.0 (git+https://github.com/servo/rust-egl)", 818 | "euclid 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 819 | "gleam 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 820 | "glx 0.0.1 (git+https://github.com/servo/rust-glx)", 821 | "io-surface 0.1.0 (git+https://github.com/servo/io-surface-rs)", 822 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 823 | "log 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 824 | "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", 825 | "skia 0.0.20130412 (git+https://github.com/servo/skia)", 826 | "x11 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 827 | ] 828 | 829 | [[package]] 830 | name = "layout" 831 | version = "0.0.1" 832 | source = "git+https://github.com/servo/servo#0d37e8f96b7f40d14bf4fbb0b66e42a01302a336" 833 | dependencies = [ 834 | "azure 0.1.0 (git+https://github.com/servo/rust-azure)", 835 | "bitflags 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 836 | "canvas 0.0.1 (git+https://github.com/servo/servo)", 837 | "canvas_traits 0.0.1 (git+https://github.com/servo/servo)", 838 | "clock_ticks 0.0.6 (git+https://github.com/tomaka/clock_ticks)", 839 | "cssparser 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 840 | "encoding 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)", 841 | "euclid 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 842 | "fnv 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 843 | "gfx 0.0.1 (git+https://github.com/servo/servo)", 844 | "gfx_traits 0.0.1 (git+https://github.com/servo/servo)", 845 | "ipc-channel 0.1.0 (git+https://github.com/pcwalton/ipc-channel)", 846 | "layout_traits 0.0.1 (git+https://github.com/servo/servo)", 847 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 848 | "log 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 849 | "msg 0.0.1 (git+https://github.com/servo/servo)", 850 | "net_traits 0.0.1 (git+https://github.com/servo/servo)", 851 | "plugins 0.0.1 (git+https://github.com/servo/servo)", 852 | "profile_traits 0.0.1 (git+https://github.com/servo/servo)", 853 | "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", 854 | "script 0.0.1 (git+https://github.com/servo/servo)", 855 | "script_traits 0.0.1 (git+https://github.com/servo/servo)", 856 | "selectors 0.1.0 (git+https://github.com/servo/rust-selectors)", 857 | "serde 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", 858 | "serde_json 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 859 | "serde_macros 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 860 | "smallvec 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 861 | "string_cache 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", 862 | "string_cache_plugin 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 863 | "style 0.0.1 (git+https://github.com/servo/servo)", 864 | "unicode-bidi 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 865 | "url 0.2.37 (registry+https://github.com/rust-lang/crates.io-index)", 866 | "util 0.0.1 (git+https://github.com/servo/servo)", 867 | ] 868 | 869 | [[package]] 870 | name = "layout_traits" 871 | version = "0.0.1" 872 | source = "git+https://github.com/servo/servo#0d37e8f96b7f40d14bf4fbb0b66e42a01302a336" 873 | dependencies = [ 874 | "euclid 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 875 | "gfx 0.0.1 (git+https://github.com/servo/servo)", 876 | "ipc-channel 0.1.0 (git+https://github.com/pcwalton/ipc-channel)", 877 | "msg 0.0.1 (git+https://github.com/servo/servo)", 878 | "net_traits 0.0.1 (git+https://github.com/servo/servo)", 879 | "profile_traits 0.0.1 (git+https://github.com/servo/servo)", 880 | "script_traits 0.0.1 (git+https://github.com/servo/servo)", 881 | "serde 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", 882 | "serde_macros 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 883 | "url 0.2.37 (registry+https://github.com/rust-lang/crates.io-index)", 884 | "util 0.0.1 (git+https://github.com/servo/servo)", 885 | ] 886 | 887 | [[package]] 888 | name = "lazy_static" 889 | version = "0.1.14" 890 | source = "registry+https://github.com/rust-lang/crates.io-index" 891 | 892 | [[package]] 893 | name = "libc" 894 | version = "0.1.8" 895 | source = "registry+https://github.com/rust-lang/crates.io-index" 896 | 897 | [[package]] 898 | name = "libressl-pnacl-sys" 899 | version = "2.1.6" 900 | source = "registry+https://github.com/rust-lang/crates.io-index" 901 | dependencies = [ 902 | "pnacl-build-helper 1.4.10 (registry+https://github.com/rust-lang/crates.io-index)", 903 | ] 904 | 905 | [[package]] 906 | name = "log" 907 | version = "0.3.1" 908 | source = "registry+https://github.com/rust-lang/crates.io-index" 909 | dependencies = [ 910 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 911 | ] 912 | 913 | [[package]] 914 | name = "mac" 915 | version = "0.0.2" 916 | source = "registry+https://github.com/rust-lang/crates.io-index" 917 | 918 | [[package]] 919 | name = "malloc_buf" 920 | version = "0.0.5" 921 | source = "registry+https://github.com/rust-lang/crates.io-index" 922 | dependencies = [ 923 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 924 | ] 925 | 926 | [[package]] 927 | name = "matches" 928 | version = "0.1.2" 929 | source = "registry+https://github.com/rust-lang/crates.io-index" 930 | 931 | [[package]] 932 | name = "memchr" 933 | version = "0.1.3" 934 | source = "registry+https://github.com/rust-lang/crates.io-index" 935 | dependencies = [ 936 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 937 | ] 938 | 939 | [[package]] 940 | name = "mime" 941 | version = "0.1.0" 942 | source = "registry+https://github.com/rust-lang/crates.io-index" 943 | dependencies = [ 944 | "log 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 945 | ] 946 | 947 | [[package]] 948 | name = "miniz-sys" 949 | version = "0.1.5" 950 | source = "registry+https://github.com/rust-lang/crates.io-index" 951 | dependencies = [ 952 | "gcc 0.3.12 (registry+https://github.com/rust-lang/crates.io-index)", 953 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 954 | ] 955 | 956 | [[package]] 957 | name = "mmap" 958 | version = "0.1.1" 959 | source = "registry+https://github.com/rust-lang/crates.io-index" 960 | dependencies = [ 961 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 962 | "tempdir 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 963 | ] 964 | 965 | [[package]] 966 | name = "mozjs_sys" 967 | version = "0.0.0" 968 | source = "git+https://github.com/servo/mozjs#5da854e637fcfeefe4aebda0b66fc2406ea7dc63" 969 | 970 | [[package]] 971 | name = "msg" 972 | version = "0.0.1" 973 | source = "git+https://github.com/servo/servo#0d37e8f96b7f40d14bf4fbb0b66e42a01302a336" 974 | dependencies = [ 975 | "azure 0.1.0 (git+https://github.com/servo/rust-azure)", 976 | "bitflags 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 977 | "canvas_traits 0.0.1 (git+https://github.com/servo/servo)", 978 | "core-foundation 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 979 | "euclid 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 980 | "hyper 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", 981 | "io-surface 0.1.0 (git+https://github.com/servo/io-surface-rs)", 982 | "ipc-channel 0.1.0 (git+https://github.com/pcwalton/ipc-channel)", 983 | "layers 0.1.0 (git+https://github.com/servo/rust-layers)", 984 | "offscreen_gl_context 0.1.0 (git+https://github.com/ecoal95/rust-offscreen-rendering-context)", 985 | "plugins 0.0.1 (git+https://github.com/servo/servo)", 986 | "png 0.1.0 (git+https://github.com/servo/rust-png)", 987 | "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", 988 | "serde 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", 989 | "serde_macros 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 990 | "style_traits 0.0.1 (git+https://github.com/servo/servo)", 991 | "url 0.2.37 (registry+https://github.com/rust-lang/crates.io-index)", 992 | "util 0.0.1 (git+https://github.com/servo/servo)", 993 | ] 994 | 995 | [[package]] 996 | name = "net" 997 | version = "0.0.1" 998 | source = "git+https://github.com/servo/servo#0d37e8f96b7f40d14bf4fbb0b66e42a01302a336" 999 | dependencies = [ 1000 | "cookie 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", 1001 | "devtools_traits 0.0.1 (git+https://github.com/servo/servo)", 1002 | "euclid 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 1003 | "flate2 0.2.7 (registry+https://github.com/rust-lang/crates.io-index)", 1004 | "hyper 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", 1005 | "ipc-channel 0.1.0 (git+https://github.com/pcwalton/ipc-channel)", 1006 | "log 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 1007 | "net_traits 0.0.1 (git+https://github.com/servo/servo)", 1008 | "openssl 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", 1009 | "png 0.1.0 (git+https://github.com/servo/rust-png)", 1010 | "regex 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)", 1011 | "regex_macros 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", 1012 | "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", 1013 | "time 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", 1014 | "url 0.2.37 (registry+https://github.com/rust-lang/crates.io-index)", 1015 | "util 0.0.1 (git+https://github.com/servo/servo)", 1016 | "uuid 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", 1017 | ] 1018 | 1019 | [[package]] 1020 | name = "net_traits" 1021 | version = "0.0.1" 1022 | source = "git+https://github.com/servo/servo#0d37e8f96b7f40d14bf4fbb0b66e42a01302a336" 1023 | dependencies = [ 1024 | "euclid 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 1025 | "hyper 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", 1026 | "ipc-channel 0.1.0 (git+https://github.com/pcwalton/ipc-channel)", 1027 | "log 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 1028 | "msg 0.0.1 (git+https://github.com/servo/servo)", 1029 | "plugins 0.0.1 (git+https://github.com/servo/servo)", 1030 | "png 0.1.0 (git+https://github.com/servo/rust-png)", 1031 | "regex 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)", 1032 | "regex_macros 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", 1033 | "serde 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", 1034 | "serde_macros 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 1035 | "stb_image 0.1.0 (git+https://github.com/servo/rust-stb-image)", 1036 | "url 0.2.37 (registry+https://github.com/rust-lang/crates.io-index)", 1037 | "util 0.0.1 (git+https://github.com/servo/servo)", 1038 | ] 1039 | 1040 | [[package]] 1041 | name = "num" 1042 | version = "0.1.27" 1043 | source = "registry+https://github.com/rust-lang/crates.io-index" 1044 | dependencies = [ 1045 | "rand 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)", 1046 | "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", 1047 | ] 1048 | 1049 | [[package]] 1050 | name = "num_cpus" 1051 | version = "0.2.6" 1052 | source = "registry+https://github.com/rust-lang/crates.io-index" 1053 | dependencies = [ 1054 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 1055 | ] 1056 | 1057 | [[package]] 1058 | name = "objc" 1059 | version = "0.1.5" 1060 | source = "registry+https://github.com/rust-lang/crates.io-index" 1061 | dependencies = [ 1062 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 1063 | "malloc_buf 0.0.5 (registry+https://github.com/rust-lang/crates.io-index)", 1064 | ] 1065 | 1066 | [[package]] 1067 | name = "objc-foundation" 1068 | version = "0.0.1" 1069 | source = "registry+https://github.com/rust-lang/crates.io-index" 1070 | dependencies = [ 1071 | "block 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1072 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 1073 | "objc 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1074 | "objc_id 0.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 1075 | ] 1076 | 1077 | [[package]] 1078 | name = "objc_id" 1079 | version = "0.0.1" 1080 | source = "registry+https://github.com/rust-lang/crates.io-index" 1081 | dependencies = [ 1082 | "objc 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1083 | ] 1084 | 1085 | [[package]] 1086 | name = "offscreen_gl_context" 1087 | version = "0.1.0" 1088 | source = "git+https://github.com/ecoal95/rust-offscreen-rendering-context#41fb6bf5a8ff16024e62ec71892bfe7697de3b7d" 1089 | dependencies = [ 1090 | "cgl 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 1091 | "core-foundation 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 1092 | "euclid 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 1093 | "gl_generator 0.0.27 (registry+https://github.com/rust-lang/crates.io-index)", 1094 | "gleam 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 1095 | "khronos_api 0.0.7 (registry+https://github.com/rust-lang/crates.io-index)", 1096 | "layers 0.1.0 (git+https://github.com/servo/rust-layers)", 1097 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 1098 | "log 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 1099 | "serde 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", 1100 | "serde_macros 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 1101 | "x11 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 1102 | ] 1103 | 1104 | [[package]] 1105 | name = "openssl" 1106 | version = "0.6.4" 1107 | source = "registry+https://github.com/rust-lang/crates.io-index" 1108 | dependencies = [ 1109 | "bitflags 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 1110 | "lazy_static 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", 1111 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 1112 | "openssl-sys 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", 1113 | ] 1114 | 1115 | [[package]] 1116 | name = "openssl-sys" 1117 | version = "0.6.4" 1118 | source = "registry+https://github.com/rust-lang/crates.io-index" 1119 | dependencies = [ 1120 | "gcc 0.3.12 (registry+https://github.com/rust-lang/crates.io-index)", 1121 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 1122 | "libressl-pnacl-sys 2.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 1123 | "pkg-config 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", 1124 | ] 1125 | 1126 | [[package]] 1127 | name = "osmesa-sys" 1128 | version = "0.0.5" 1129 | source = "registry+https://github.com/rust-lang/crates.io-index" 1130 | dependencies = [ 1131 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 1132 | "shared_library 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 1133 | ] 1134 | 1135 | [[package]] 1136 | name = "phf" 1137 | version = "0.7.4" 1138 | source = "registry+https://github.com/rust-lang/crates.io-index" 1139 | dependencies = [ 1140 | "debug-builders 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 1141 | "phf_shared 0.7.4 (registry+https://github.com/rust-lang/crates.io-index)", 1142 | ] 1143 | 1144 | [[package]] 1145 | name = "phf_codegen" 1146 | version = "0.7.4" 1147 | source = "registry+https://github.com/rust-lang/crates.io-index" 1148 | dependencies = [ 1149 | "phf_generator 0.7.4 (registry+https://github.com/rust-lang/crates.io-index)", 1150 | "phf_shared 0.7.4 (registry+https://github.com/rust-lang/crates.io-index)", 1151 | ] 1152 | 1153 | [[package]] 1154 | name = "phf_generator" 1155 | version = "0.7.4" 1156 | source = "registry+https://github.com/rust-lang/crates.io-index" 1157 | dependencies = [ 1158 | "phf_shared 0.7.4 (registry+https://github.com/rust-lang/crates.io-index)", 1159 | "rand 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)", 1160 | ] 1161 | 1162 | [[package]] 1163 | name = "phf_shared" 1164 | version = "0.7.4" 1165 | source = "registry+https://github.com/rust-lang/crates.io-index" 1166 | 1167 | [[package]] 1168 | name = "pkg-config" 1169 | version = "0.3.5" 1170 | source = "registry+https://github.com/rust-lang/crates.io-index" 1171 | 1172 | [[package]] 1173 | name = "plugins" 1174 | version = "0.0.1" 1175 | source = "git+https://github.com/servo/servo#0d37e8f96b7f40d14bf4fbb0b66e42a01302a336" 1176 | dependencies = [ 1177 | "tenacious 0.0.9 (git+https://github.com/servo/rust-tenacious)", 1178 | ] 1179 | 1180 | [[package]] 1181 | name = "pnacl-build-helper" 1182 | version = "1.4.10" 1183 | source = "registry+https://github.com/rust-lang/crates.io-index" 1184 | dependencies = [ 1185 | "tempdir 0.3.4 (registry+https://github.com/rust-lang/crates.io-index)", 1186 | ] 1187 | 1188 | [[package]] 1189 | name = "png" 1190 | version = "0.1.0" 1191 | source = "git+https://github.com/servo/rust-png#a3569ca11ea54e5d6152ee80d7d39b2799700dbf" 1192 | dependencies = [ 1193 | "gcc 0.3.12 (registry+https://github.com/rust-lang/crates.io-index)", 1194 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 1195 | "png-sys 1.6.16 (git+https://github.com/servo/rust-png)", 1196 | "serde 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", 1197 | "serde_macros 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 1198 | ] 1199 | 1200 | [[package]] 1201 | name = "png-sys" 1202 | version = "1.6.16" 1203 | source = "git+https://github.com/servo/rust-png#a3569ca11ea54e5d6152ee80d7d39b2799700dbf" 1204 | 1205 | [[package]] 1206 | name = "profile" 1207 | version = "0.0.1" 1208 | source = "git+https://github.com/servo/servo#0d37e8f96b7f40d14bf4fbb0b66e42a01302a336" 1209 | dependencies = [ 1210 | "hbs-pow 0.1.0 (git+https://github.com/libheartbeats/heartbeats-simple-rust.git)", 1211 | "ipc-channel 0.1.0 (git+https://github.com/pcwalton/ipc-channel)", 1212 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 1213 | "log 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 1214 | "profile_traits 0.0.1 (git+https://github.com/servo/servo)", 1215 | "regex 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)", 1216 | "task_info 0.0.1 (git+https://github.com/servo/servo)", 1217 | "time 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", 1218 | "util 0.0.1 (git+https://github.com/servo/servo)", 1219 | ] 1220 | 1221 | [[package]] 1222 | name = "profile_traits" 1223 | version = "0.0.1" 1224 | source = "git+https://github.com/servo/servo#0d37e8f96b7f40d14bf4fbb0b66e42a01302a336" 1225 | dependencies = [ 1226 | "ipc-channel 0.1.0 (git+https://github.com/pcwalton/ipc-channel)", 1227 | "serde 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", 1228 | "serde_macros 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 1229 | "time 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", 1230 | "url 0.2.37 (registry+https://github.com/rust-lang/crates.io-index)", 1231 | ] 1232 | 1233 | [[package]] 1234 | name = "quasi" 1235 | version = "0.3.1" 1236 | source = "registry+https://github.com/rust-lang/crates.io-index" 1237 | 1238 | [[package]] 1239 | name = "quasi_codegen" 1240 | version = "0.3.1" 1241 | source = "registry+https://github.com/rust-lang/crates.io-index" 1242 | dependencies = [ 1243 | "aster 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", 1244 | ] 1245 | 1246 | [[package]] 1247 | name = "quasi_macros" 1248 | version = "0.3.1" 1249 | source = "registry+https://github.com/rust-lang/crates.io-index" 1250 | dependencies = [ 1251 | "quasi_codegen 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 1252 | ] 1253 | 1254 | [[package]] 1255 | name = "quickersort" 1256 | version = "1.0.0" 1257 | source = "registry+https://github.com/rust-lang/crates.io-index" 1258 | dependencies = [ 1259 | "num 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", 1260 | "unreachable 0.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 1261 | ] 1262 | 1263 | [[package]] 1264 | name = "rand" 1265 | version = "0.3.11" 1266 | source = "registry+https://github.com/rust-lang/crates.io-index" 1267 | dependencies = [ 1268 | "advapi32-sys 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 1269 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 1270 | "winapi 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 1271 | ] 1272 | 1273 | [[package]] 1274 | name = "rc" 1275 | version = "0.1.1" 1276 | source = "registry+https://github.com/rust-lang/crates.io-index" 1277 | 1278 | [[package]] 1279 | name = "regex" 1280 | version = "0.1.41" 1281 | source = "registry+https://github.com/rust-lang/crates.io-index" 1282 | dependencies = [ 1283 | "aho-corasick 0.3.0 (registry+https://github.com/rust-lang/crates.io-index)", 1284 | "memchr 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 1285 | "regex-syntax 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 1286 | ] 1287 | 1288 | [[package]] 1289 | name = "regex-syntax" 1290 | version = "0.2.1" 1291 | source = "registry+https://github.com/rust-lang/crates.io-index" 1292 | 1293 | [[package]] 1294 | name = "regex_macros" 1295 | version = "0.1.21" 1296 | source = "registry+https://github.com/rust-lang/crates.io-index" 1297 | dependencies = [ 1298 | "regex 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)", 1299 | ] 1300 | 1301 | [[package]] 1302 | name = "rustc-serialize" 1303 | version = "0.3.16" 1304 | source = "registry+https://github.com/rust-lang/crates.io-index" 1305 | 1306 | [[package]] 1307 | name = "script" 1308 | version = "0.0.1" 1309 | source = "git+https://github.com/servo/servo#0d37e8f96b7f40d14bf4fbb0b66e42a01302a336" 1310 | dependencies = [ 1311 | "angle 0.1.0 (git+https://github.com/ecoal95/angle?branch=servo)", 1312 | "bitflags 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 1313 | "canvas 0.0.1 (git+https://github.com/servo/servo)", 1314 | "canvas_traits 0.0.1 (git+https://github.com/servo/servo)", 1315 | "cssparser 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 1316 | "devtools_traits 0.0.1 (git+https://github.com/servo/servo)", 1317 | "encoding 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)", 1318 | "euclid 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 1319 | "fnv 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 1320 | "html5ever 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 1321 | "hyper 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", 1322 | "ipc-channel 0.1.0 (git+https://github.com/pcwalton/ipc-channel)", 1323 | "js 0.1.0 (git+https://github.com/servo/rust-mozjs)", 1324 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 1325 | "log 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 1326 | "msg 0.0.1 (git+https://github.com/servo/servo)", 1327 | "net_traits 0.0.1 (git+https://github.com/servo/servo)", 1328 | "num 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", 1329 | "offscreen_gl_context 0.1.0 (git+https://github.com/ecoal95/rust-offscreen-rendering-context)", 1330 | "plugins 0.0.1 (git+https://github.com/servo/servo)", 1331 | "profile_traits 0.0.1 (git+https://github.com/servo/servo)", 1332 | "rand 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)", 1333 | "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", 1334 | "script_traits 0.0.1 (git+https://github.com/servo/servo)", 1335 | "selectors 0.1.0 (git+https://github.com/servo/rust-selectors)", 1336 | "serde 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", 1337 | "smallvec 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1338 | "string_cache 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", 1339 | "string_cache_plugin 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 1340 | "style 0.0.1 (git+https://github.com/servo/servo)", 1341 | "tendril 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1342 | "time 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", 1343 | "unicase 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 1344 | "url 0.2.37 (registry+https://github.com/rust-lang/crates.io-index)", 1345 | "util 0.0.1 (git+https://github.com/servo/servo)", 1346 | "uuid 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", 1347 | "websocket 0.12.2 (registry+https://github.com/rust-lang/crates.io-index)", 1348 | ] 1349 | 1350 | [[package]] 1351 | name = "script_traits" 1352 | version = "0.0.1" 1353 | source = "git+https://github.com/servo/servo#0d37e8f96b7f40d14bf4fbb0b66e42a01302a336" 1354 | dependencies = [ 1355 | "devtools_traits 0.0.1 (git+https://github.com/servo/servo)", 1356 | "euclid 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 1357 | "ipc-channel 0.1.0 (git+https://github.com/pcwalton/ipc-channel)", 1358 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 1359 | "msg 0.0.1 (git+https://github.com/servo/servo)", 1360 | "net_traits 0.0.1 (git+https://github.com/servo/servo)", 1361 | "profile_traits 0.0.1 (git+https://github.com/servo/servo)", 1362 | "serde 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", 1363 | "serde_macros 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 1364 | "url 0.2.37 (registry+https://github.com/rust-lang/crates.io-index)", 1365 | "util 0.0.1 (git+https://github.com/servo/servo)", 1366 | ] 1367 | 1368 | [[package]] 1369 | name = "selectors" 1370 | version = "0.1.0" 1371 | source = "git+https://github.com/servo/rust-selectors#572353b3209af040cd3e6261978b09c7f8122844" 1372 | dependencies = [ 1373 | "bitflags 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 1374 | "cssparser 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 1375 | "fnv 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 1376 | "matches 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 1377 | "quickersort 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 1378 | "smallvec 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1379 | "string_cache 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", 1380 | "string_cache_plugin 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 1381 | ] 1382 | 1383 | [[package]] 1384 | name = "serde" 1385 | version = "0.5.3" 1386 | source = "registry+https://github.com/rust-lang/crates.io-index" 1387 | dependencies = [ 1388 | "num 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", 1389 | ] 1390 | 1391 | [[package]] 1392 | name = "serde_codegen" 1393 | version = "0.5.0" 1394 | source = "registry+https://github.com/rust-lang/crates.io-index" 1395 | dependencies = [ 1396 | "aster 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", 1397 | "quasi 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 1398 | "quasi_macros 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 1399 | ] 1400 | 1401 | [[package]] 1402 | name = "serde_json" 1403 | version = "0.5.1" 1404 | source = "registry+https://github.com/rust-lang/crates.io-index" 1405 | dependencies = [ 1406 | "num 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", 1407 | "serde 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", 1408 | ] 1409 | 1410 | [[package]] 1411 | name = "serde_macros" 1412 | version = "0.5.1" 1413 | source = "registry+https://github.com/rust-lang/crates.io-index" 1414 | dependencies = [ 1415 | "serde_codegen 0.5.0 (registry+https://github.com/rust-lang/crates.io-index)", 1416 | ] 1417 | 1418 | [[package]] 1419 | name = "servo" 1420 | version = "0.0.1" 1421 | source = "git+https://github.com/servo/servo#0d37e8f96b7f40d14bf4fbb0b66e42a01302a336" 1422 | dependencies = [ 1423 | "bitflags 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 1424 | "canvas 0.0.1 (git+https://github.com/servo/servo)", 1425 | "canvas_traits 0.0.1 (git+https://github.com/servo/servo)", 1426 | "compositing 0.0.1 (git+https://github.com/servo/servo)", 1427 | "devtools 0.0.1 (git+https://github.com/servo/servo)", 1428 | "devtools_traits 0.0.1 (git+https://github.com/servo/servo)", 1429 | "env_logger 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 1430 | "euclid 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 1431 | "gfx 0.0.1 (git+https://github.com/servo/servo)", 1432 | "gleam 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 1433 | "layers 0.1.0 (git+https://github.com/servo/rust-layers)", 1434 | "layout 0.0.1 (git+https://github.com/servo/servo)", 1435 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 1436 | "msg 0.0.1 (git+https://github.com/servo/servo)", 1437 | "net 0.0.1 (git+https://github.com/servo/servo)", 1438 | "net_traits 0.0.1 (git+https://github.com/servo/servo)", 1439 | "png 0.1.0 (git+https://github.com/servo/rust-png)", 1440 | "profile 0.0.1 (git+https://github.com/servo/servo)", 1441 | "profile_traits 0.0.1 (git+https://github.com/servo/servo)", 1442 | "script 0.0.1 (git+https://github.com/servo/servo)", 1443 | "script_traits 0.0.1 (git+https://github.com/servo/servo)", 1444 | "style 0.0.1 (git+https://github.com/servo/servo)", 1445 | "time 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", 1446 | "url 0.2.37 (registry+https://github.com/rust-lang/crates.io-index)", 1447 | "util 0.0.1 (git+https://github.com/servo/servo)", 1448 | ] 1449 | 1450 | [[package]] 1451 | name = "shared_library" 1452 | version = "0.1.0" 1453 | source = "registry+https://github.com/rust-lang/crates.io-index" 1454 | dependencies = [ 1455 | "lazy_static 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", 1456 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 1457 | ] 1458 | 1459 | [[package]] 1460 | name = "shell32-sys" 1461 | version = "0.1.1" 1462 | source = "registry+https://github.com/rust-lang/crates.io-index" 1463 | dependencies = [ 1464 | "winapi 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 1465 | "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1466 | ] 1467 | 1468 | [[package]] 1469 | name = "skia" 1470 | version = "0.0.20130412" 1471 | source = "git+https://github.com/servo/skia#fce887de8bd7e3144226b3c48f088c1395a3b328" 1472 | dependencies = [ 1473 | "cgl 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", 1474 | "egl 0.1.0 (git+https://github.com/servo/rust-egl)", 1475 | "euclid 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 1476 | "expat-sys 2.1.0 (git+https://github.com/servo/libexpat)", 1477 | "freetype-sys 2.4.11 (git+https://github.com/servo/libfreetype2)", 1478 | "gleam 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", 1479 | "glx 0.0.1 (git+https://github.com/servo/rust-glx)", 1480 | "io-surface 0.1.0 (git+https://github.com/servo/io-surface-rs)", 1481 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 1482 | "x11 2.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 1483 | ] 1484 | 1485 | [[package]] 1486 | name = "smallvec" 1487 | version = "0.1.5" 1488 | source = "registry+https://github.com/rust-lang/crates.io-index" 1489 | 1490 | [[package]] 1491 | name = "solicit" 1492 | version = "0.4.3" 1493 | source = "registry+https://github.com/rust-lang/crates.io-index" 1494 | dependencies = [ 1495 | "hpack 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", 1496 | "log 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 1497 | ] 1498 | 1499 | [[package]] 1500 | name = "stb_image" 1501 | version = "0.1.0" 1502 | source = "git+https://github.com/servo/rust-stb-image#ad05c642b64a9059dd31c37b1a1ac78722821008" 1503 | dependencies = [ 1504 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 1505 | ] 1506 | 1507 | [[package]] 1508 | name = "string_cache" 1509 | version = "0.1.11" 1510 | source = "registry+https://github.com/rust-lang/crates.io-index" 1511 | dependencies = [ 1512 | "lazy_static 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", 1513 | "serde 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", 1514 | "string_cache_plugin 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 1515 | "string_cache_shared 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1516 | ] 1517 | 1518 | [[package]] 1519 | name = "string_cache_plugin" 1520 | version = "0.1.6" 1521 | source = "registry+https://github.com/rust-lang/crates.io-index" 1522 | dependencies = [ 1523 | "lazy_static 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", 1524 | "mac 0.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 1525 | "string_cache_shared 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1526 | ] 1527 | 1528 | [[package]] 1529 | name = "string_cache_shared" 1530 | version = "0.1.5" 1531 | source = "registry+https://github.com/rust-lang/crates.io-index" 1532 | dependencies = [ 1533 | "debug_unreachable 0.0.6 (registry+https://github.com/rust-lang/crates.io-index)", 1534 | "phf 0.7.4 (registry+https://github.com/rust-lang/crates.io-index)", 1535 | "phf_codegen 0.7.4 (registry+https://github.com/rust-lang/crates.io-index)", 1536 | ] 1537 | 1538 | [[package]] 1539 | name = "style" 1540 | version = "0.0.1" 1541 | source = "git+https://github.com/servo/servo#0d37e8f96b7f40d14bf4fbb0b66e42a01302a336" 1542 | dependencies = [ 1543 | "bitflags 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 1544 | "cssparser 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 1545 | "encoding 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)", 1546 | "euclid 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 1547 | "fnv 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 1548 | "lazy_static 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", 1549 | "log 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 1550 | "matches 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 1551 | "num 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", 1552 | "plugins 0.0.1 (git+https://github.com/servo/servo)", 1553 | "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", 1554 | "selectors 0.1.0 (git+https://github.com/servo/rust-selectors)", 1555 | "serde 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", 1556 | "serde_macros 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 1557 | "smallvec 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1558 | "string_cache 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", 1559 | "string_cache_plugin 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 1560 | "style_traits 0.0.1 (git+https://github.com/servo/servo)", 1561 | "url 0.2.37 (registry+https://github.com/rust-lang/crates.io-index)", 1562 | "util 0.0.1 (git+https://github.com/servo/servo)", 1563 | ] 1564 | 1565 | [[package]] 1566 | name = "style_traits" 1567 | version = "0.0.1" 1568 | source = "git+https://github.com/servo/servo#0d37e8f96b7f40d14bf4fbb0b66e42a01302a336" 1569 | dependencies = [ 1570 | "cssparser 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 1571 | "euclid 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 1572 | "lazy_static 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", 1573 | "log 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 1574 | "num 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", 1575 | "plugins 0.0.1 (git+https://github.com/servo/servo)", 1576 | "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", 1577 | "selectors 0.1.0 (git+https://github.com/servo/rust-selectors)", 1578 | "serde 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", 1579 | "serde_macros 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 1580 | "url 0.2.37 (registry+https://github.com/rust-lang/crates.io-index)", 1581 | "util 0.0.1 (git+https://github.com/servo/servo)", 1582 | ] 1583 | 1584 | [[package]] 1585 | name = "task_info" 1586 | version = "0.0.1" 1587 | source = "git+https://github.com/servo/servo#0d37e8f96b7f40d14bf4fbb0b66e42a01302a336" 1588 | dependencies = [ 1589 | "gcc 0.3.12 (registry+https://github.com/rust-lang/crates.io-index)", 1590 | ] 1591 | 1592 | [[package]] 1593 | name = "tempdir" 1594 | version = "0.3.4" 1595 | source = "registry+https://github.com/rust-lang/crates.io-index" 1596 | dependencies = [ 1597 | "rand 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)", 1598 | ] 1599 | 1600 | [[package]] 1601 | name = "tempfile" 1602 | version = "1.1.1" 1603 | source = "registry+https://github.com/rust-lang/crates.io-index" 1604 | dependencies = [ 1605 | "kernel32-sys 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 1606 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 1607 | "rand 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)", 1608 | "winapi 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 1609 | ] 1610 | 1611 | [[package]] 1612 | name = "tenacious" 1613 | version = "0.0.9" 1614 | source = "git+https://github.com/servo/rust-tenacious#a04fe4a6e6c332f94b491b9369b8e50e94b3c37d" 1615 | 1616 | [[package]] 1617 | name = "tendril" 1618 | version = "0.1.5" 1619 | source = "registry+https://github.com/rust-lang/crates.io-index" 1620 | dependencies = [ 1621 | "encoding 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)", 1622 | "futf 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1623 | "mac 0.0.2 (registry+https://github.com/rust-lang/crates.io-index)", 1624 | ] 1625 | 1626 | [[package]] 1627 | name = "time" 1628 | version = "0.1.32" 1629 | source = "registry+https://github.com/rust-lang/crates.io-index" 1630 | dependencies = [ 1631 | "kernel32-sys 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", 1632 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 1633 | "winapi 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 1634 | ] 1635 | 1636 | [[package]] 1637 | name = "traitobject" 1638 | version = "0.0.1" 1639 | source = "registry+https://github.com/rust-lang/crates.io-index" 1640 | 1641 | [[package]] 1642 | name = "typeable" 1643 | version = "0.1.2" 1644 | source = "registry+https://github.com/rust-lang/crates.io-index" 1645 | 1646 | [[package]] 1647 | name = "unicase" 1648 | version = "1.0.0" 1649 | source = "registry+https://github.com/rust-lang/crates.io-index" 1650 | 1651 | [[package]] 1652 | name = "unicode-bidi" 1653 | version = "0.2.1" 1654 | source = "registry+https://github.com/rust-lang/crates.io-index" 1655 | dependencies = [ 1656 | "matches 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 1657 | ] 1658 | 1659 | [[package]] 1660 | name = "unreachable" 1661 | version = "0.0.2" 1662 | source = "registry+https://github.com/rust-lang/crates.io-index" 1663 | dependencies = [ 1664 | "void 0.0.5 (registry+https://github.com/rust-lang/crates.io-index)", 1665 | ] 1666 | 1667 | [[package]] 1668 | name = "url" 1669 | version = "0.2.37" 1670 | source = "registry+https://github.com/rust-lang/crates.io-index" 1671 | dependencies = [ 1672 | "encoding 0.2.32 (registry+https://github.com/rust-lang/crates.io-index)", 1673 | "matches 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", 1674 | "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", 1675 | "serde 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", 1676 | ] 1677 | 1678 | [[package]] 1679 | name = "user32-sys" 1680 | version = "0.1.1" 1681 | source = "registry+https://github.com/rust-lang/crates.io-index" 1682 | dependencies = [ 1683 | "winapi 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 1684 | "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1685 | ] 1686 | 1687 | [[package]] 1688 | name = "util" 1689 | version = "0.0.1" 1690 | source = "git+https://github.com/servo/servo#0d37e8f96b7f40d14bf4fbb0b66e42a01302a336" 1691 | dependencies = [ 1692 | "azure 0.1.0 (git+https://github.com/servo/rust-azure)", 1693 | "bitflags 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 1694 | "cssparser 0.3.6 (registry+https://github.com/rust-lang/crates.io-index)", 1695 | "euclid 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", 1696 | "getopts 0.2.11 (registry+https://github.com/rust-lang/crates.io-index)", 1697 | "html5ever 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", 1698 | "hyper 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", 1699 | "ipc-channel 0.1.0 (git+https://github.com/pcwalton/ipc-channel)", 1700 | "js 0.1.0 (git+https://github.com/servo/rust-mozjs)", 1701 | "layers 0.1.0 (git+https://github.com/servo/rust-layers)", 1702 | "lazy_static 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", 1703 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 1704 | "log 0.3.1 (registry+https://github.com/rust-lang/crates.io-index)", 1705 | "num 0.1.27 (registry+https://github.com/rust-lang/crates.io-index)", 1706 | "num_cpus 0.2.6 (registry+https://github.com/rust-lang/crates.io-index)", 1707 | "plugins 0.0.1 (git+https://github.com/servo/servo)", 1708 | "rand 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)", 1709 | "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", 1710 | "selectors 0.1.0 (git+https://github.com/servo/rust-selectors)", 1711 | "serde 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", 1712 | "serde_macros 0.5.1 (registry+https://github.com/rust-lang/crates.io-index)", 1713 | "smallvec 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", 1714 | "string_cache 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", 1715 | "url 0.2.37 (registry+https://github.com/rust-lang/crates.io-index)", 1716 | ] 1717 | 1718 | [[package]] 1719 | name = "uuid" 1720 | version = "0.1.17" 1721 | source = "registry+https://github.com/rust-lang/crates.io-index" 1722 | dependencies = [ 1723 | "rand 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)", 1724 | "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", 1725 | ] 1726 | 1727 | [[package]] 1728 | name = "void" 1729 | version = "0.0.5" 1730 | source = "registry+https://github.com/rust-lang/crates.io-index" 1731 | 1732 | [[package]] 1733 | name = "wayland-client" 1734 | version = "0.2.1" 1735 | source = "registry+https://github.com/rust-lang/crates.io-index" 1736 | dependencies = [ 1737 | "bitflags 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 1738 | "dlib 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1739 | "lazy_static 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", 1740 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 1741 | ] 1742 | 1743 | [[package]] 1744 | name = "wayland-kbd" 1745 | version = "0.2.0" 1746 | source = "registry+https://github.com/rust-lang/crates.io-index" 1747 | dependencies = [ 1748 | "bitflags 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1749 | "lazy_static 0.1.14 (registry+https://github.com/rust-lang/crates.io-index)", 1750 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 1751 | "mmap 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1752 | "wayland-client 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 1753 | ] 1754 | 1755 | [[package]] 1756 | name = "wayland-window" 1757 | version = "0.1.0" 1758 | source = "registry+https://github.com/rust-lang/crates.io-index" 1759 | dependencies = [ 1760 | "byteorder 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)", 1761 | "tempfile 1.1.1 (registry+https://github.com/rust-lang/crates.io-index)", 1762 | "wayland-client 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", 1763 | ] 1764 | 1765 | [[package]] 1766 | name = "websocket" 1767 | version = "0.12.2" 1768 | source = "registry+https://github.com/rust-lang/crates.io-index" 1769 | dependencies = [ 1770 | "bitflags 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 1771 | "byteorder 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)", 1772 | "hyper 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", 1773 | "openssl 0.6.4 (registry+https://github.com/rust-lang/crates.io-index)", 1774 | "rand 0.3.11 (registry+https://github.com/rust-lang/crates.io-index)", 1775 | "rustc-serialize 0.3.16 (registry+https://github.com/rust-lang/crates.io-index)", 1776 | "unicase 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", 1777 | "url 0.2.37 (registry+https://github.com/rust-lang/crates.io-index)", 1778 | ] 1779 | 1780 | [[package]] 1781 | name = "winapi" 1782 | version = "0.2.1" 1783 | source = "registry+https://github.com/rust-lang/crates.io-index" 1784 | 1785 | [[package]] 1786 | name = "winapi-build" 1787 | version = "0.1.1" 1788 | source = "registry+https://github.com/rust-lang/crates.io-index" 1789 | 1790 | [[package]] 1791 | name = "x11" 1792 | version = "2.0.1" 1793 | source = "registry+https://github.com/rust-lang/crates.io-index" 1794 | dependencies = [ 1795 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 1796 | "pkg-config 0.3.5 (registry+https://github.com/rust-lang/crates.io-index)", 1797 | ] 1798 | 1799 | [[package]] 1800 | name = "x11-dl" 1801 | version = "2.0.1" 1802 | source = "registry+https://github.com/rust-lang/crates.io-index" 1803 | dependencies = [ 1804 | "dylib 0.0.1 (registry+https://github.com/rust-lang/crates.io-index)", 1805 | "libc 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", 1806 | ] 1807 | 1808 | [[package]] 1809 | name = "xml-rs" 1810 | version = "0.1.26" 1811 | source = "registry+https://github.com/rust-lang/crates.io-index" 1812 | dependencies = [ 1813 | "bitflags 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", 1814 | ] 1815 | 1816 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "miserve" 3 | version = "0.1.0" 4 | 5 | authors = ["meh. "] 6 | license = "GPLv3" 7 | 8 | [dependencies] 9 | # base dependencies 10 | log = "*" 11 | env_logger = "*" 12 | bitflags = "*" 13 | time = "0.1.12" 14 | num_cpus = "*" 15 | 16 | # windowing dependencies 17 | glutin = { git = "https://github.com/tomaka/glutin" } 18 | x11 = "2.0" 19 | 20 | [dependencies.servo] 21 | git = "https://github.com/servo/servo" 22 | path = "components/servo" 23 | 24 | default-features = false 25 | features = [] 26 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | miserve 2 | ======= 3 | Servo based, vim-inspired, tinfoil hat approved, modal browser, that's what 4 | this wants to be at least. 5 | 6 | Features 7 | -------- 8 | - [ ] vimperator inspired bindings 9 | - [ ] vimperator inspired status bar 10 | - [ ] vim inspired tab bar 11 | - [ ] vim inspired buffers 12 | - [ ] vim inspired windows 13 | - [ ] vim inspired tabs 14 | - [ ] built-in ad blocker 15 | - [ ] built-in NoScript-like thingy 16 | - [ ] built-in RequestPolicy-like thingy 17 | - [ ] built-in GreaseMonkey support 18 | - [ ] built-in Stylish-like support 19 | 20 | Buffer 21 | ------ 22 | A buffer is a web page, when you close a window the page doesn't go away, 23 | unless you close the buffer (which will also close the window). 24 | 25 | This allows you to reopen a buffer in different window without losing its 26 | state, or have it opened in multiple windows. 27 | 28 | Window 29 | ------ 30 | A window is a container for a buffer, windows can be split vertically or 31 | horizontally however many times you want, like in vim. 32 | 33 | Tab 34 | --- 35 | A tab is a container for windows. 36 | 37 | Modes 38 | ----- 39 | `NORMAL` mode will be like vimperator's normal mode. 40 | 41 | `EDIT` mode will be enabled while inside a text input area, it will behave like 42 | vim normal mode. 43 | 44 | `INSERT` behaves like vim. 45 | 46 | `REPLACE` behaves like vim. 47 | -------------------------------------------------------------------------------- /SERVO.md: -------------------------------------------------------------------------------- 1 | Servo embedding 2 | =============== 3 | Stuff I need implemented in Servo for embedding purposes. 4 | 5 | Network 6 | ------- 7 | The network hooks are required to implement ad-blocking, request policing and 8 | smart referers. 9 | 10 | On any request, before it's made, there should be a callback called with the 11 | request object containing its origin (chrome or the page it's coming from) and 12 | it should return an `Option` where `None` signifies the request should 13 | not be made, and `Some(request)` contains the optionally modified request. 14 | 15 | Script 16 | ------ 17 | The script hooks are required for interaction between the chrome and the 18 | chrome-sub-pages (status bar, tab bar, input bar). 19 | 20 | There should be a bidirectional channel (possibly type safe on the Rust side) 21 | so that the various parts of the chrome can be directed. 22 | 23 | For example from chrome to page, when the buffer inside a window changes, I 24 | need to send the updated information to the window status bar, such as URL, TLS 25 | status and whatnot. 26 | 27 | From page to chrome, when the user starts inputting things in the input bar, I 28 | need to talk back and forth to know completions and to receive the final input 29 | and do something with it. 30 | 31 | I also need a way to run user-scripts. 32 | 33 | Style 34 | ----- 35 | The style hooks are required to implement user-styles. 36 | 37 | There should be a way to prepend a stylesheet to any page. 38 | 39 | Compositor 40 | ---------- 41 | I need a way to know the final height of the page before rendering it, 42 | basically to know how big the status bar would be based on the font and other 43 | styling, same goes for the input bar when completion is started. 44 | -------------------------------------------------------------------------------- /resources/ahem.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: Ahem; 3 | src: url(ahem/AHEM____.TTF); 4 | } 5 | -------------------------------------------------------------------------------- /resources/ahem/AHEM____.TTF: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meh/miserve/18bf3ca945cffa8b6f97f088f04c918e741f7dd9/resources/ahem/AHEM____.TTF -------------------------------------------------------------------------------- /resources/ahem/Ahem.ps: -------------------------------------------------------------------------------- 1 | %!PS-AdobeFont-1.0: Ahem 001.000 %%CreationDate: 24.5.99 at 19:57 %%VMusage: 1024 22706 % Generated by Fontographer 4.1.5 % Most characters are the em square, except &EAcute and "p", which show ascent/descent from the baseline. Useful for testing composition systems. Produced by Todd Fahrner for the CSS Samurai's browser testing. % ADL: 800 200 0 %%EndComments FontDirectory/Ahem known{/Ahem findfont dup/UniqueID known{dup /UniqueID get 4790119 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 20 dict begin /FontInfo 16 dict dup begin /version (001.000) readonly def /FullName (Ahem) readonly def /FamilyName (Ahem) readonly def /Weight (Medium) readonly def /ItalicAngle 0 def /isFixedPitch true def /UnderlinePosition -133 def /UnderlineThickness 20 def /Notice (Most characters are the em square, except &EAcute and "p", which show ascent/descent from the baseline. Useful for testing composition systems. Produced by Todd Fahrner for the CSS Samurai's browser testing.) readonly def /em 1000 def /ascent 800 def /descent 200 def end readonly def /FontName /Ahem def /Encoding 256 array dup 0/.notdef put dup 1/.notdef put dup 2/.notdef put dup 3/.notdef put dup 4/.notdef put dup 5/.notdef put dup 6/.notdef put dup 7/.notdef put dup 8/.notdef put dup 9/.notdef put dup 10/.notdef put dup 11/.notdef put dup 12/.notdef put dup 13/.notdef put dup 14/.notdef put dup 15/.notdef put dup 16/.notdef put dup 17/.notdef put dup 18/.notdef put dup 19/.notdef put dup 20/.notdef put dup 21/.notdef put dup 22/.notdef put dup 23/.notdef put dup 24/.notdef put dup 25/.notdef put dup 26/.notdef put dup 27/.notdef put dup 28/.notdef put dup 29/.notdef put dup 30/.notdef put dup 31/.notdef put dup 32/space put dup 33/exclam put dup 34/quotedbl put dup 35/numbersign put dup 36/dollar put dup 37/percent put dup 38/ampersand put dup 39/quoteright put dup 40/parenleft put dup 41/parenright put dup 42/asterisk put dup 43/plus put dup 44/comma put dup 45/minus put dup 46/period put dup 47/slash put dup 48/zero put dup 49/one put dup 50/two put dup 51/three put dup 52/four put dup 53/five put dup 54/six put dup 55/seven put dup 56/eight put dup 57/nine put dup 58/colon put dup 59/semicolon put dup 60/less put dup 61/equal put dup 62/greater put dup 63/question put dup 64/at put dup 65/A put dup 66/B put dup 67/C put dup 68/D put dup 69/E put dup 70/F put dup 71/G put dup 72/H put dup 73/I put dup 74/J put dup 75/K put dup 76/L put dup 77/M put dup 78/N put dup 79/O put dup 80/P put dup 81/Q put dup 82/R put dup 83/S put dup 84/T put dup 85/U put dup 86/V put dup 87/W put dup 88/X put dup 89/Y put dup 90/Z put dup 91/bracketleft put dup 92/backslash put dup 93/bracketright put dup 94/asciicircum put dup 95/underscore put dup 96/quoteleft put dup 97/a put dup 98/b put dup 99/c put dup 100/d put dup 101/e put dup 102/f put dup 103/g put dup 104/h put dup 105/i put dup 106/j put dup 107/k put dup 108/l put dup 109/m put dup 110/n put dup 111/o put dup 112/p put dup 113/q put dup 114/r put dup 115/s put dup 116/t put dup 117/u put dup 118/v put dup 119/w put dup 120/x put dup 121/y put dup 122/z put dup 123/braceleft put dup 124/bar put dup 125/braceright put dup 126/asciitilde put dup 127/.notdef put dup 128/.notdef put dup 129/.notdef put dup 130/.notdef put dup 131/.notdef put dup 132/.notdef put dup 133/.notdef put dup 134/.notdef put dup 135/.notdef put dup 136/.notdef put dup 137/.notdef put dup 138/.notdef put dup 139/.notdef put dup 140/.notdef put dup 141/.notdef put dup 142/.notdef put dup 143/.notdef put dup 144/dotlessi put dup 145/grave put dup 146/acute put dup 147/circumflex put dup 148/tilde put dup 149/macron put dup 150/breve put dup 151/dotaccent put dup 152/dieresis put dup 153/.notdef put dup 154/ring put dup 155/cedilla put dup 156/.notdef put dup 157/hungarumlaut put dup 158/ogonek put dup 159/caron put dup 160/nbspace put dup 161/exclamdown put dup 162/cent put dup 163/sterling put dup 164/currency put dup 165/yen put dup 166/brokenbar put dup 167/section put dup 168/dieresis put dup 169/copyright put dup 170/ordfeminine put dup 171/guillemotleft put dup 172/logicalnot put dup 173/hyphen put dup 174/registered put dup 175/macron put dup 176/degree put dup 177/plusminus put dup 178/twosuperior put dup 179/threesuperior put dup 180/acute put dup 181/mu put dup 182/paragraph put dup 183/periodcentered put dup 184/cedilla put dup 185/onesuperior put dup 186/ordmasculine put dup 187/guillemotright put dup 188/onequarter put dup 189/onehalf put dup 190/threequarters put dup 191/questiondown put dup 192/Agrave put dup 193/Aacute put dup 194/Acircumflex put dup 195/Atilde put dup 196/Adieresis put dup 197/Aring put dup 198/AE put dup 199/Ccedilla put dup 200/Egrave put dup 201/Eacute put dup 202/Ecircumflex put dup 203/Edieresis put dup 204/Igrave put dup 205/Iacute put dup 206/Icircumflex put dup 207/Idieresis put dup 208/Eth put dup 209/Ntilde put dup 210/Ograve put dup 211/Oacute put dup 212/Ocircumflex put dup 213/Otilde put dup 214/Odieresis put dup 215/multiply put dup 216/Oslash put dup 217/Ugrave put dup 218/Uacute put dup 219/Ucircumflex put dup 220/Udieresis put dup 221/Yacute put dup 222/Thorn put dup 223/germandbls put dup 224/agrave put dup 225/aacute put dup 226/acircumflex put dup 227/atilde put dup 228/adieresis put dup 229/aring put dup 230/ae put dup 231/ccedilla put dup 232/egrave put dup 233/eacute put dup 234/ecircumflex put dup 235/edieresis put dup 236/igrave put dup 237/iacute put dup 238/icircumflex put dup 239/idieresis put dup 240/eth put dup 241/ntilde put dup 242/ograve put dup 243/oacute put dup 244/ocircumflex put dup 245/otilde put dup 246/odieresis put dup 247/divide put dup 248/oslash put dup 249/ugrave put dup 250/uacute put dup 251/ucircumflex put dup 252/udieresis put dup 253/yacute put dup 254/thorn put dup 255/ydieresis put readonly def /PaintType 0 def /FontType 1 def /StrokeWidth 0 def /FontMatrix[0.001 0 0 0.001 0 0]readonly def /UniqueID 4790119 def /FontBBox{0 -200 1000 800}readonly def currentdict end currentfile eexec D8061D93A8246509E76A3EC656E953B7C22E43117F5A3D5F277C16E04EEF1E062177EBA1C7CD44CC 08EC69212435871DAE39145F9F511D31325A34487F72B91B61DF205DADD53B3626BEAC69A3EBD7A7 D1DCF6BB839B313143D219124CF63C16290FAF4759F32E6BC73D55DE9F71047CE1AB2D992BBA9040 CFB7C803C372371CF5D6EE966F903DE04BD5203314DA296E16E25A00333AE4BAE32D333A421DA78C 8EEC9DFC38A8CD91D7B463EFABEB7BB632B23B9FBF511C9076A64C977809E52EF5C6AFFB7BD57F5A 2CFCCA063E226D1F69EE6D82099789C7AACDCA9774086760D9125C5DC0B3C6B4CB02AAA3C691B600 2C10B806D9D9760F7796E080A92DCD951675EA909D77269CB6BFD767EB97F27AF43A993080DAE5AD 01E3FCCC2A5C687554002CE66DCFEC4EACF2C69215AF98E1851DAFE7244BDC6F3A0775F484A11634 2224EDD6565FEFC196EFB202AC2988599B989F7DBE219C075F90D6019F29683CCD25B4D4D31A54BA E067CFE982A0A9C417FF87E4F8A40D0719DFE7A6220FA99D238FA32F856A4492D316CD1A578A79A4 F7D8005977CD1AB08EC17FD09C12EEB7BC57BD9D575D59D88B530A501FED9A1C18DD5B7F5BD8892E 8B77F6A795596DC0E0B4EAFFCFE7A9B1092B13852758C5C51466408C91B1C654EBE24659DA18A126 FF7B60295F9FC18B784438EC28144BCFCA3E58845CF1ABFF1CAEC75FA16F61B3469D5B3645638C07 46830E03A395C974274D8AC421C6B23C02C62E0295DFD74F50D045CE9A7EDD7C5A8115D28F2E9CA8 57701F425416D5EFA91396AD179718BB3F1350667055D1AE055659C758D420EFD0ADE14BA051D59D 108817CB54CA11DEBDA46F42435905809C6907AD86956D2DBA1926BED10755F4BCCC541787211E76 2BCD336A0C89B15162EE1BBDB4B93197D3E03DB4E1FB112D1C70FDF8099E3359DF117C2324B78F6C 945657533CCFF91712846718B1DF57D11E70EF1363BEAE4B01A2B6FF7C86B46C33D503219296AC8E 4B40E7988921D551F26223A25F51DDF434C42B99FDCCA388A9DC7C6FB0CB7B2589B756F38F83DF58 77217EE630C757DB7AF2007469A2D2E75DD95A6BE1F9F052A044D1A495934A3FE1229866AE35FB23 9CB735AAEA7C85501757C29D5A2DFB09569298E8E6A1BC9862C5958BB47E0C48E778BEDFFCF0F01D 401948B2CCE02D91A6975192CC8B4DE1F572A48B0B7E0B339EFDEFB7D24AA203D946F8D39D85C49E 510E8B863C2DBD046241446CD25EC35313EC5862E521B1F99A48AD1C3827AB3B8E4DA99CD6DB7AA4 A62B4EBEDFB6B965F64FF019BFEA94CCDF71BC33805047C371F2CA5813321639E9B26A5E1E46F46B 3CFE4374596CDEB791C2EC09D44A9ED140328B3B593316460EDD6E28F857D58A90E4D5B371DE8A30 C056FD3D4549C493A407456063CC74C4CEB661E9F18C4C22C7F0FB927CDD322A8672F3B0851B5AF1 6BBD8B6FDDD89A7D093B91A9481777FC9E00100F0C91C3F2955BD20E98974631E7D158AB9416A8F6 0CFEB787E532FF18CFCED64330B5ED66612C3E0AEC74D2066DDCC1C44CCDE1C72FCACFAC986EAE7C 5D65D6EF1CE27B143E7BE6267E29774D2670EF831CB9AD882BF4A4A5222DF9D853177E3732E65A28 0982816E4DEFC64DBA6A47D0344FCAF42322FC171AA713F263F58D4C8561D6D2D18807B012409528 374E9D58ACBAEF664B35942ABEBE0FE54A0207E9A6B977EB9335F6A455168320FFFBD0BCCFBB7628 66A6538221B324EFC98AB255F2A4A313E0D4E15892764B701D849F6E69726817EB2A26851DF3E524 6CCD30F71C80111ED88F5205D8C85828F69F969929413F81CE3785CA74497292538AC422FFAFB350 8B3EAA0E6E786F0F632BE36FF5F4264C923704CFC4A7A60E217807ADD069CD4D999CA03F0D839598 7ABED83E733E06DEDC4E8D03F409DEF33D70CB0E87396DA1ADE83E493C9302DA46977BE70B2AE397 3B0F9E1A0B2DE9F6D3492602E8BD259F74CB63E3991BB7F1950BABD83D787E154AF4EF004A4846B0 7ABC732FC32B889292851E809504382756C114C922BF7FAE42E2576D535DAABA7DAE820ADD0AE2E9 6F19E5C09CACACD5BAC4E795B526A7509C8AFBA7319E397F04FAC95863FFEDF45F0352A0C614F7B0 34E6E7F3AA0ED5FB4CD2BE21FC13908F0BBA29756E3622ED010C459015B4A0F897003EC8E616DBA6 DD8B5A8FE036EF78602EF1EDEE711190E11B6DA4B8277175B3A07E68B7C157C5DDB8DA54771E69C1 CC44CCD5C7B8F02074227F0EF3F4AA1671482691CC82D17BBC8D2266392B1548D1DD2D82C88935CA 45416A4F02E658A7AA6C3B3BE050D815795B1695BFEA08383481D90A6AF44576A7DDBA153162C5CB 3565642FD4BC52935AD67E8801495FC610DF826CEF773FF710EF72C446A39B0DD7CC2A2BAB6D715A 1F9EF13F054BBCD5616464E9A3231396DE8EE7F4201E52EF3ED113F6B7874CCB8010C8DA7A792111 FE52D5EE94C76544D0D29C0463392A94F557652FF6E10468948AE9201AE92FDDE8D6378240E04477 909C3B696FFEC95EBE7A60543525763E8C70B86634DB4491543675B9A722F35546BF91263D8FBF23 CB6515BC721B672DB7AD41A0151F15B4D97B0E3314012613DD2B2B7171BC6FD94FE29A7C4D44E657 9E659A33793D397C80576B0131E884A65E9740FC1966AB125BA8436919A61E46BD7E24F7DB75D206 E0E27F866F9412266643786B7BB1C27E4F136243B0E8F905B1877F598C537E0DF68DD19A4E5C908C 732F4E8782E6D65A2A0130407DAEDCEFB4E981F7140B94473B93EC11FE144823E3FB4F040DB22BFB B01DE4FFCDA710E9F35D018285DA47B80DCEC844C7A43BDE81F9E7ADA697E11115524AEBCA48BE4B 6B351002757A1E2AB5AB573A18C82D8587FC576165A9D9E5610FAC401336DE657A7EA101FF8BBC16 D446C49CAAFE1EFC665247E63B297AA52D666CB9F08A0235A0726C4B2F9F66DE61FB48A5C8BE0DB5 998997B3B68F9D689ADBED55F803AE0086E73EDFF6FF74471B78D16FA63498EC5103F3401AB38AC8 7C3976133C405A6EC17C53E12E2411ECD5C129D5C53F93BB51095423486F3947E4CC90DCD653775F 3714068D53AC4BB6CEEDAC6314696F0199CBDAEF5ECBDE598A9AF75F4F965FA527D2D90A8C7562A4 1F0433A954E3CD4CBCE2F0CD26D04072B69DE1B59716A566E61354129957FF5A8A4BCB51C3FE1A9C AE4510D2C6CCEAF776974D0201E8ED5E2CBDDACCD8F9674C7EE4DF64A1A37075D0393498CC6BD09C 5A0929B34A6F6C2FDC001F936EDE2654ECDA6AFA436368A90F0EB70954607AF1C8BBBFF9AD2D494D 8F5DD0F34DA08B0BA7354800EC1069155DD87A4F37943D9106FB69CB5812ED3FA513159E6AA47631 DD63BF72CF07D3A718DD6AB95ED187D919ED3F173A464CBCF3A1CAE65266F18642F3845F9244DFEC A59033BCE4636824920FE36650BA71F9FD960625237B74903178320C8B999478A25E04A8CAD4D3EC B54C1826CBDD5643594EE55F07F0EEDE18A6E392C5B989B5465FCD1A86DD4477DA4AEF6FDA8CD363 A808D23EBCB36A2EF281226FD0BCB0A0EF24C71ED24266E40397D1A5863C547124DA6BF596E30011 6005FA21FD0F0976F119ADDB8E95B5380CB51B4E5E219C2CB4769E90FABE6853425AF11E4A7F29E9 00085B8AEC2489F07B588C4D6DD29BBB06F2ACFC467CE5CD3F0AAF7A215C20370310F01E4B5B10F3 D4570C7A6FC9C4AA074A874DCD04EBD53D03E511B2FAE76B34AC5EEF7D5B50E055A49AB6461FFC42 541C2948E304A29C3C08798DFC13AB5F7DB95A0F51D91B66F4182E7858BBE86E5D19B2F303B04327 16BAD69E1B817E78B646E581E2A52FA25CBB43D5ABFAE2E41ABCFED31A0EBC548EDBCA39B4200DF6 05366409ED0E42468692C3C1126231E739AA88C6BD16A56C62249AEBE02F0F79541F64920AE4C942 95179A6F272AB83AFC011F11A109E472093B1101FEF61B04BB8D11535BFE994858B19961B10F4D5E 6228952D697A676A0712A70678D288F3E0E17E756AABB8173C6C0D19113CFC4151FEC2E7737E70F5 5B1D002AC76CBAB18CC55655BC4C759A4E54BF7F33558F31AF8148814F27E24877F40A4A34F3911F F3A15F7D07231165E325D62ECB26B7F229C5637303A451F211BAE81FC87AFDD529FD05360B98EBE1 05D72BF444BDDF7A80F0C7A3212F36E7CD6F61947E3EBFD84B4A39F85C103CDA29A2D96EA56D29E1 FB798710DE64912DFDA45AE9F2B7E4316B8B7D1DE4D575EE8E36BEAFA3EA431BB9E917E249E78F07 CD9E8A0B95E6F4148D7366211A3CB79C461929C3538C2E54DD869A082C9E50A2617930896AAE8E33 A93B8D7E725E2F6C0C865D97D20C50E3806F08C598D9D976879A8B12EC441ACF4386929CEA07FB85 16F0EA4225EF4C42F88280F7D15A7CF54815B69BB2331AE602188FCD9E80E1B257DAF548E863FA71 91A1E4EA15FC354CA3C9A8EA0CED31FDC4834C2711BAE745E6FDFD4C54A373DDC146658D2D086969 5B0E91ECD20D4062872BC14F0526DCEE3F250FE4E615252E522276383B382E66B0D3932D07A47C23 BAB39DE68EC3541F85227000D886EB7191F0350361ADF6CFDBCFF657BDCD9EE53DA9F64BD7823A4E C4FAF24A28316B2DAA1421931DCE2821DA9EEA6E0CCBA7A397D0FB6C2277CFBF70CEDB2B41A36F12 2E7191B29AFE79C5239EE03D3A0D125649B4E09E91614CD92C7F1F5C086E9F3794638F5E10178364 9AB4F5020CF2C1B585AACD1FD102F28B65352A28F82386FB0A8B8F6508DE129DE32748A371C6EA0C 0D35B4B2ADBCF08D34BD4B48025905402400482269DA9006F052726187572556E7D3C60F9F4B8624 D1B5812A10DD644672685711C8ACAD1E1C004DB5A428EC03DCA2692056D64116228D486B8AD66465 70E75CAB6C93109A00458E532DE15111541769C9932EC672E43743EB22383F590F63660FA53483CF BF17086A0331B306F412738455B49C46B3D822E1294D0C62C5F805CE02A82F21CC36E8C7EA737C02 6A2F559F7375946E89AA02EF96A5102A7822F3609FC75B0CD60579D39564EE3082874A1E7F472C88 EC830F31E281DC618D39B3F9895FB3BAC49F8F5C0D5D6DA3EBA76567CBD09884869321514D62B70B 24BD92DC1A0F9E1D24B885E6E6EDF7DCF81E9FEAC4CAEA37C7B6505B2DA2A07490DCC3175943D516 E2533BCBD31810EE81971E311D5695A3E5AFE15E34DA11DEB353D4DFCB5CE2D8FE88D812CC5FE232 099F9F147CC87C47E017FD43C6C4B4657AAF946D4625B1ABAB856F0BE4D22BE1356A8AE9F74A3223 3D173D16ECA86557B1DF2F48120CD16D028C9D403DDD94C00245BB774F35C0A33317B641B5AC6BAC BE1437BC11FE074BD53174CBB706F2227FADD928405955A40D32A3318CE3FDACB621FE8B2866C709 9F8863D5A712A71FF67E8A6001C388A3B0F5B4FD3A05088B84AC5FFDD155407F683B088D18394289 0D2493F608D12CBDEE6C5A4072A96B50DE71BAF53AD388AB4CC3342F8E733F2208B7E29E0B70C509 8FD25B4409EED781EC50B6EBD34E8C63D04CF2740EA628E3EF9A4462F338839A5EA90428E57E4836 4DFBD5EB4D980771B3C358D6274E83289ACCF4DF02DB5B476BC64F2E4A0D37B7FC7816FD3E742F74 84A693CEDC427708851C18A8BB18C0357A21A84E24B14F0B81D435CEE7644B62211F7943BB45540C 2C286FF0E7A869C7448C2F2A051695C98B73012C300BFC0E0B49B73AE834956D88934570EA804A80 5DD54487945D2638887F77181115C14E4D95BF6C4D55F913026B26DDC62DD6BD3CA6383B535D7EA5 CCA880A363A787920555ABB2EF8618FBC13EAF12E90A36A68156BC2D880D296ECF645A3E2D88AD20 C22A7F2B621652870F4AAE48ADC6465F55AA8C65E4474875BAB83252E0060FA6CDA59951B70ECAB4 ACD16C97E3E0CF54B566481871747832D607BA6E16852BD760D55D4D10AD2C58CD2FF25B162B78CB B971DB3477F8D2ECA3EE9CBC90323B2C236E375337EA0848CD7CB5781A2B0A42DE7E4D99DB27460B 26796CEE129D23C76794B7CE21C13C7D4A998B752C8CF43A4821B736EBE246D2A2BD7BA3351FBCFB D2E512A576B0A065241AC9C40151C4DA7D06C581077ACB4C3A7AFEC15FB5F5B78DC78535B79568D2 60A99B0A0835EB2906B749EBB364850D5B24F98839DDAC5A19FE5AC3CFDA91186287F22088018BA0 6C35F680553D7E5F3360CB9539931ADCCA910DA7AF02473957F1EC9D9492C429270D8B99E0029708 26FB1CB733512C696D3BD442C84E0759460AD00B03D5056C55CB597DAECBF98B422C75CDA119B062 FF5FA251B1E31AAE5E2A1DC63241CEA9236733789F2E9AFA3AE6326D8713BC7B35C5FECEE088DBCD 225A91BD5F851D954C8FA91DD27611532070464DF076DED556A3546C08B4E2082B6286A60F4390A5 F797427792D1AAEE2BA3941F6FE39589BBBDB00AD959F06D85077311D1CE96C271A8A52FFDC6521D 3D87B7EBD39B0A0481FB90B65DB562ECB94217E830A39E1251CC8AAFFCA7D65BF373C9D72870109C 862745D0DAB7B9A4A8BE2145B89893DFA9DF3A29EE82160CCEF63759C9D4043A92E7C5F9E1D3107B F32910E9DBBF9FD4D4C949A96B72C420C1075FA2E6E376FA49ADD0866F0E0BFDAEE810F0807C1819 3CE19E7E81DF48E421D816B657F6D263B0DCA0EECB983DE88F0F7275F849B32579E6B4D47854B026 122CB9433E9E94C994BBF3649601CF9835FE5F56F090390AC8212A9AE61FC08CF436D9DF101EF1B0 BF8DE6E72877121AF321919AF90F53BBA4541541D222E7B40EB5ADB9CA202079471F3DC8FC2B3E83 C91C77F0628CEBD06F41CB5F0D45E872038EF0B996138A32E9CCD746D91FA08D6DDA83B8BB22AE58 172566FDC0B23642DCB3125846504DD6CD8A6D9C718005D8EA88C68160DC9F84406CBB5B6E8477FA BF1D7F6CBD9A4DEB2CB2D4FD8E47939D31D3F4F229FBD32A61AD4EA360BDFC1D65C2874C8F3B48D7 0ED7F7605B44662C9AF75815F647BA5C9801A3D4F633DF5ED8B5727F59A37D24D6D57768F81B8DD9 7143A39240C4BF37D374059C9594B7681A590E001D7ADFBCBF7B6CFF419171F8659A36DA28BD125D F1BE74AE67F2220F7B45AAA13F97D9BE9C1AB7DE04F2190C12BDD1A38289E36C5F811CD34AC2CD79 CE11A39C46C3D79D073C9E132546BAFCA615C18212488E556EDA969688FAE7D5DEB7B7C4CED3965F 449C59DC99F30110B9922D17258D0A749790B59432A81DF94080613D0C867BEFFDC9FAAD481021DB 2A41963C1E6741D39DFC6EAE2888D3E3C10DD03549F15CA0E196C496CD7C54A982938D076BAC29C3 532A909B1C1B4DA819695EA5A60BC00B27924E5F7B738AEE0B00005046555AC34B5793CED3419F1F 0DD0CB2AFB9F9687BFBBF19C2F048EE1B69D060E07192D8A30EA81E7C18808123A9535044B0F9B97 53848A56ACF74CA8422A86E0C520C5F08DAD0D798727020D92EAD72E617436CCF46F850C459565BE DD2113730BCCC47957D6FE94A957D7CE041DD22F49499747F69EDE674DB15062551AD073E955404F BBB0F80FA5BDBCEA635B2B437DE0AAD6422ABE3C354E312C27E9136EAADBD9C922BAFB6AB6DF5021 CAB56CE07FC11AFC3C620148B7BECF50F62CFDC605D893931538814A1EEEF75E7A4FF61C34A90101 49B7C93E442678CD841073516A4E2AE298E9B33CCADE663E51ADED4EDDFA8E12139EEA5481973B46 B818753D52DA6399970B71FDC6F7918E4E4A3628B083EC9922433AD99E26D0238B1CF66402E5222F E0C25E5EBFC3F839885BCF2D16542F8F109503311C6CE80B29B7B7036A1F15FEC4761F1F66E05578 75412FC707E3F73E916229F8D0B6BEF0CF3ADF6C8544A006F23A9CAB785453A0C5308BB4A3F1A722 9427BEF3FD3AF4F72B0EA6AC62DD8D27F0F0F6D1F8DE6B9FE613473C8F9341DD441E1EE757CAE9E3 F5823F4317A0A332B7D3C122F34B681A46AC7B6EE2CFCFCE337297C02D8A2AC1C164C45C06D24E3F 0E34A366537875CB47BA9C1FEF822BFD0026688EF18C3C2533D08BD09BED88EF3D291A87539BD5A8 F50E7E5350662E053FD5FB6424960774C09A511DDE7CAC206EC3863D61D9DDD8460A0D1A7041F6A7 D7D269ACE95122FD5B6F78CFFE75D4E27AC30C49902E17D8EBAE8B4371C5A6D658106476F57BC410 EC523A9DFC321E3DAAD06C86B08CDAA8FC513CCA1F348E1F7891A31729106A133592FC49D6AE8F48 2BCB87F815EEF89C900250BEE5E7440315F05F1EAB1A243A1DC9747D9BCCB11AC97E0427B8AE0D85 2DD07A29E60CD758497FAA49641C1C87F2EEAB75701601520AB7377B5832B4CDF730F533833FEA23 810215F5CED3A3D2DDD5C6E09D2C1372F9C9C398C9BF53BE17C6D8C6391AD9DB00551A88335B4F17 C90B1F93A895BEB5BB38161E2C999A3550968D0E825112F1E5BC2CA8205214005D234415C1BE18D9 A901DC3D7DD23970B9248C0E1B3883394BA9DCAACAA839C97044B7E190EFE457360AEA940D61091B 4EB2000717FCC5768F664D536B7BFBD867BEB880FA518197F7A936D1249688BBC313197AFC5D4273 198690C3C5C5827A77DB5F3315DF7C66D0B7770996BFDEDB5A5F81BC20AF0CACA5C50906D8C55A6E 42E49BEE7AD5DD407E9C256F2151A3335FD102FD970D9A7D4F756A4EF161A7C773AAB8FFB63AF09C DAA402066DFBC7B2EEA032893655EE59F3F6D54B8ECC37EAF5F5628B2FBF6182F15746A8DE9A9D47 D5CC6ED05C84F533BE40C0ADCB09448C46594147CF55DC14178B605C8F3CEAF1849192A3C660FE9C DE62ED49152A88334556AA31CD9F60F07609B046A0A9FA87D823BF3FAE666EA92F348B27F474253D EA96BC7158BDE6F2E8617CE71AA69DDB99797D1DAEFE81D4A54E790A30E595E284D2D0F29562CD6A F153137676F08CB29324548D00E64398E9E4FB1C78FD6E6843964C45B67D81BA1B062D99517A34B9 C312D71B7BDD2D77E7E68BC335C60DCCA6895F94C422BDCBA910713AD0D9BD81E288062838B8B711 0D09A4C687EE8BC43CEC6D9306820B778462B8F647E0BD1AC38DC8AC5A902CCFF4D3CA00BD3CB326 F2C84BBDE72230590E59239EBAC07FCEAC808E59F77C805578CC2CB7904EA17BDEFFA7646ECD183C A3DC1DFBF93258267984AE381DF783E203DD8890F0736359945C3D50511A8E7AAF8819B6E3FC71D8 22EDE5718E461C799090D3116747CC20F277326B30714B8CB788A16AA1092BD9AC23D98C3AE27DE1 3485005AC9DF490B93F245D6F8EF2E67619A29C031FCEF50D800CF6683311ACBBF85A98794C77D7B EB073A19CD5512AE5A9147EF976A36EB965083FA48F8C9DE860174818477434A83AC97F9999F9BD5 E406A1E76EDFE1D316E31888E881712368C4C3CB639A115A3E6335F784B4F0C9204C1BBE064B60E2 3740DED48204079B15CE80F557CEA83F345B6DBC9A414A86ACD235A936D9142E5C2C824EBACBA4B3 3C349B0E04B8E16AE78B66697546429E3C9D1705D4DBFD121278C63B27D3A184A1AC2DBDEB1BE412 379EB99069D11CF102F6CA69A7E441357B284227F9AAD645C853BAF627A884DC1271B8F0F2D28BEC 608141CE484F0A88979A0CEC71083937F1E25E0EF7E5E94F3A774166FCA492A88A2B46F118248958 2D16AAD1A157764FF931F3402AE542EE641E70ED5E19C429A11F8D1E108E044E07A7CDFD52260483 8D080EE2710434587789A34EABEB855074472CAA0F594A9E30AD9C3755C16C7ADA4A3B7BBDE3AEAB FDC2C2192DEC91C0143050139721801BF72EDBE78B1A684D2FCECEBF8813A74F872F1852DE29C81C 797A817A3E6073109E07791C7B9F3196FD1546BDFA34136CF67E8278A9C09DC9D149C9718AC0E6B6 CCF0CD1B446DA82241BCB48C13E74D96DC8723A4F4A883850F8D76042685B034B0AF478E02E0191E A2820F327E0113BF8FADA1D29811D25FDB47268EBC8961EDD0B47F2EF2DD9941094C637EB8849568 A01616B9FF922914F4BAB5C3798DA5A78D775C8946BE0CD34957E4F972F56B5579A0062E5F0A3A74 4C4254413D07A630CA51E638DF1DDFD6E7376C959EB1924A11FCC8EF791B0EFAB668DAA528E848B3 57CE43E8B86D0A34E01531CEAD72030D133696210E0C1282485F6F2391E61904EFD996D5722482AC 3FD20D6D945ABCEA1D28DE683511B17E9E573A54E9C0DCBB0E9D18F33C9E4ADBDA524104D732D8E9 CB84194BBF2F93B5F3D16D54F449A85B3B6E3536567E3E57E5E49125ED39E2ED0E2C0AD0A08AF241 07A4829408553D6F4FD08C5DA2B785CA5A7ABAE7B9508DABEBE81A0BCEC9CDAA8AAB9CB711CFA6C1 6E71F2612D0818D8357C52C12A573B66985D052106264EFB96BD93258CA086BF48D85CFBE3C3C248 F6BFD839C2ADE5442F285A80DD29148A9808E5B733EA1F5F4CE4FB2A3C6FCC58E8D268E49178BA49 5B8BE7F3DF4775A03BD0F6B28F730CF146A819032769618AB056DBE2BF3D6DE5F44226F2F3BE95E6 945214804C0D11857CF8C31578A1364884C16A9B676D86167921059BDA50AB8C10455C3B8997D483 C4B8599690337AC7A7AD63FFF3EF5D1B67F2B8B2128C57C9AFB8D3C753F02CAC83AFF82490C8411A 0E8131F154B394C625A251D688F88E396969E576751C580CA70046408B47E5139E5C4D0FDCFBEAFC B4B63428792EE7E318DD8366BB1E3A563795924F4A10CC8E8B85971BD412DC12708FF1215F715A15 99CCEC8FF74EEBA34FAC6AC730E790E3497A4B6794F8BDC5D3D6A0AF819B950A42C5B4B53BEC8579 57DAD79BDD3265CDA3DB3BDB57EEF6F7427DB559037ABF79FB5048CFE699EBCC7AD54DEF337D6D15 736C32D89FB4ABBD44CAD6BFABD26972ED888D4080F2CE1D1DD81DB9131A70CD085874AEDD920DAB D2DF39B7B8301872B0224668C9B83CF3DD5322A0939C8E539A10DC92F7673FF3D6624C03202A1874 2DF7CBED2139833020144F52C4B9C6D9C00EE01279F12B117A516A5F63E8A487E7104DD22C51A9AD 4F84C57F6C60E5FD249565021E0C734B1F6C1F5E002BDB3CB52D0994C556A90E109F1B9CD9220AE3 67C119C0B517195F7A34C34CC896C1B86E6323DA27AAB83EFB09D1D0899BAAB39332B22E48C1131C A1FFB8D94C0D3C5EF81DA9B1C4551F226F816716245DF35A660889F70D21EE09E2525EF2ECAAC681 C5F5D07692B6D933A4E74DFD6A01D285ED8DE7C0C8C43013D0C1D21F727F7E5FD957D84796162362 84A48C12B02AB8B7350EC721A7D44014DDE0F04CB516FC22AD865A7552D978FF883AB31A2E6E8465 D5DFD66F27EF29AB94C9A2D2C0ECD6510E234A4657BD6EE58D8F01A97541336E4E8B364C698B3FE4 0CF6CB375DF221D5EF1757E32744FAA0AE3498DEDF616715962099B1C3AA561287838D21538CF002 6846FA72D86C33244B839EC63D791B8AE88C9C86062FE84C902957300E4ED9FC8DFCC6E26F522D99 AA4CEDC233A5FD75B6C1A17F2213A09272594B6A52A2BE5475ABBB8E23092196A8400335ACE63551 78EE28CAAA34706303A33A1E220AA648F41C822025E2779A861A45ACF5E99A0A6C846AE1328D2C68 5D920FD29A2D41F10E49DD3B4371DE9FFD25C55B33A1071262A79A91127E6BA40CA6D2667102AE82 8223BB5A9324894FC335FDE30D9E820FF8550209F6F0F4224CE7133C5289C02CD70BECDC3B1E2F1A C874B90BC518A180A1ED8CFB094DE78DBEE77B42BADFAE49D3FF1EBE7E0BB148C673D92AE5CE56F7 A5E6FB6AD3AE98F776735CE3A9668FA34EF42FDEA2B615705CE6C3090E9BCB4A690C88BA66C12DF6 51AD065B12C36D5AEA5C774A7E53A88F1822B2BD430C961406585BD2A5165A9BD39E2C717033681E CACEC13133D94E2E89217E6C301EED2519B4932AAE8858DC1CF465DA315154A017C6AA27327AF497 D4FEF99E564AD49931A9E57F53FAD918974F0E8E87BC72064046C819F2371BDA383603D6B371AB6D 51F7BCEBD832255BF977837E8766D3D9ED92EA70764C53B89E260ADC415E05919D4EFEA0B7826827 6FA3A5844EB0A66DD261EADA4FC3836355249BE8D506839364B8A2CB7895CE8228853BC2715F8FD0 6AA5691D7ABE5E4E2E6BEB4EB1DA247F9D2C3D88C2300F2316C63DAB9C1223B1481B5C94D3A38C91 DAB2928D3BFD3480CE6202CD3E13C8879F1C67EF0A89E7135A4103DC6C58CF60AE60058EB29D6DD3 2EA7367624815A222BE9F05DB8D2451D110DAF352E995105F24D0E56BC168BC543EF7335CA8D4EBC 5B4FE119ADEA3E342E7BA4F23ED196BAC8215CEB10B4F1F7C93AF4CFC6B88E4753C61ED5F3CA7397 CA89AA133EAB2A287608D2FE33CBFBEAE29B1691BC35F7E72AB6D958F06AA3023C633D983F97B08A 846A0D99D66742891D2AA152ADF0A4BF996E22ABCD6E532BA9DA53970887A282D4EA7A7E15ACA15F 5EE3A88A99D7E4D069DF9EA55D340AE7622D764D2F50B3917956DCBA97580F7DDF7BBC45356145CE EBB27FEC5A3F9AA5455F899C3797412659DF45AF87D26A57923AB3BD1975A570E7FEACEBDA3A5099 4A4ECE85EFA2CB883F8ABA5E60F74F5E022385C756D639A135923EA9EB09D8A136442071F8BD01B1 E5B88E0622D53DA2FB6C1054A45B40BEDDC805BB825DA4345EB2AA7709AF2AD49806F044C0A20CCC DB71283BE79DF6C4104BB4599BFC9EDF219F1399FE804B12F010D893F404CB8EFD903F35B37FD80B 97251C59C73CFB89634B3EAED136986F9D946B719EB04B5396F4AE9C135382005745BFED67DA33F1 DD507DF06AF64C84305A99B731FD68879EE148D4C8B1DC43178EB4BFFCACEB0A6CB0E1959775191E 3AF0459A4FE0AD307ADE17A9E930916E9D579E379C037D575ECF7E0305B73EA2250B13C94D18045D 2A4C04664C5FA789C7A0098F165EB3286CFC8B882B39999178F7C74F6E45F8F7F2CBDED4EA9BB535 B3BA4F3C72006BB9CCD2F2EA58DC820E723E1987E86DC3C483A7EBD4ED4EECE791877102EB3A9035 93BD5DA3A3466B9C9E3E069B85A473E41549E763740FEAE5BC4314A601BA9CD7318ABCB3078DC2F8 EBCAC29DB2984B08EB561D37B767BF10442EB93F2038D91F46E953FE8D265EE8DB4D388EAAAAEF68 62FC9DC0620A21400182B5072990C9B9819EE14C2F9B8999A8771959C2DD3AAC2F3CA5EAA5DCACD8 2A33AE51C470CCCB2DDCAF24338AEAD5F7CA866388BF1FC62D6E7A6D96510C761B7EB58ACAE7DA61 18154AD5F2DE54C6775A4D8DD95A00368DDD71C5FE0F33DF6D52B6A2F163473278D2E1F1CE71E355 2D73D1BB2D9AE9EFDDE947598569A1079656C1C7CECB6706DE4EF3F442852DC2D97A2895396A8791 D80E45E8DE2D52BB8B7D88D2C3F49FDD03BD83C000E762E0DAAC0AF2608F30917EEDE517CD595008 0076EB009F602C51B3D8A794B3DFA38BB416B91E6A111A0852322C4FBD25DAD95ED33C3F996F67FD 71C4DDAD6C6112F66E587AE642E8EFFFB0DF0D1D23AA307D3129F67C16B5A17569FCDE2620F70AD4 DF94B1438B4BAFD1B311F995DB04FCAF4C721CBED94FF66B1DBD900BC4F4160AD1CF55D6C5F74019 02F32D62078B05975AA71C4FDEDF656966A0C1DF25FC4DF61E218D9A1BDF55B6BCB09771F6C8C6F1 64E7D06C06C094F99CB068ED782DDF291A8F236E6EB50B3117D3BDEC32E981CB5DDA0D72BA79FB72 EA3D88A87AC94687376AC4604D4C1473BC05BF263ADAD77F3EAD8186D66DA6298784228ADAD52B5D 3F4CD38CEC4E8D7B61F73DED591783618B005DB67171B151786B2C8B7208CB5FCB46471F766E6026 C8B7FDA28D251F399FF004ACB1AC2E5BFCE34DB39CE6C265E30AF64122392E77222A438A79B6F828 A83240961C9C9129C0A1F43FD3F0A27FA203321F7864291BDEB55E1991826F012E46945164388A6A 60A67823515F068605F3C660C0B46B0948A85A87CD0108DEC3E57D9209C1DF188A79985A8151F0D2 D39922A41B214D58C2B63778C412DAF06C35165B6B3769B5F33C7588955AF608F05768B61887585B DA3A49E430181F789ADECB4E90ACC7188CE7932FB61EFA6CC6B5CC3F40802E0D33930A3CDCE226ED 6B91CE3D7BA1AB7A10FA0A346A8AC94834A5120C5B3C6EA481A8A462B499731BE63503DFB76C79B7 CDE10E9DE33504C778C96B3FF0D6FEDD3E893181DC73DE591FAD7F27493993D0673EDE1924C3DB66 DDB780AD7CD9A12CAADBB8B8DB2CEF92AF4C081219B9504CA74EEA27ACE7D345C52FBBE33503D596 87B0FCB863EFD3D7D777251E96B3173BD7C9B01951052F7946561D5412432E63FCBC74D664B1CD13 DD66E1573148FCCC155038272E053E2ABCA08FF984939BBFE02F052CEC6F6C4CAA6E9DCC3F281DD3 F7BEB819C3C122E7ED00BCA391E2C44E2CDF855D8E8A1E7E738A64212864F29F9FE5046BD8617A83 A1AD080801F9BD1419A7CA274C0B8C8C138B0D7AA71F63DD3A1B0E29EF16BD5F8C5CC636E1E2F69D A1CABD42C65B2D849851713A356F28D00B908B5DB61AABB08180ACEBEB679FC7E2D4049AA4309BC6 E5725A0D9A8E74C3E607C1EE5C34C2AB3D1610B8B49928D6926C530CE4700C7C50E8DF0E3EE1B04F FE6E0413EC2A31DA32F18600B9BB455B6A722E410DD8023FFF9FEB30A06098F4761F4506F076F988 B8C5A1FF827C5E7E95DC19AA5D4BE4A1724BECAB3222173D03560B9771DF7D3B208050EEA13DDF80 14378432FE0430F8FB7EB6ACE1EA82F2317AFCE8D2B45A65B7784C9E13F1193B6346F6A352E228C8 8A4D55D31695CAE971BDA2FBCC17960991B8E60947AC99CF2FABCB79A48E16283B2BA2164A930740 A9D18F0009AFF67DD34167BD41196B3D5DAFC9E1049CCA6FB774209DEA7E2C42F6E65A188D24896F 3653891ABBAB78FD1C23817CF3C5D8E3AB5F64D379282D2BC351525E9C76B76567E08A01F1E16255 0378016066F6BDDCB6D9E5F7D08AB20939EFAD81CF5E364A70D65EFB67B9E571880C3FE2835A747B A63C62FC210735A2A3083FB9DE151D2E6E679B91C71D1DC6314D6CF5FB5E28ACA83FFF557700CA6F 21393495BF37F483773475E4A01D4A13CEA3AB3F3A48B732A0EDAD00D357E6FB319F9856E3C60D8B 5D12CD73DD6E781198F4E90AAC81D3EB4F81631C6CE5C0C15C10D3EF2646CFE66DCE4D96E9BF865B 757E8BF6166116AAC9CBD2F3740A4BB774C56929682454B42D94AB588F7F08C947B05160C69AC734 6850D92EA778FC283C8E426C20B5298872676067E9514628EAB2945EEAAD7B0B14B5897AC72E85E0 79D14BEEECF991C3B5520425DFECEECE27074E88764123B44DF55D6B0AC4B5907BD06A1597042E38 1620C3FC4FC060055F44CC990CB0CE4FA3413E25EE2946B320822602693D0A84A903219CD5BD4D80 A9E39FC7E3A3E005836161BF14BCDF1CA8CA53ADAA0EFC8EA9099B09F52B3E41D35D45ADFDB07A49 D728FECD98878114E540AB9EF742CD5C9D460457ECE43DDFE1A5D86E4D18B23CA9321641E132C15A CFDB4160FFCD520F73B4953548FE979B1816EA0898FD5CB960B64F2D3825E62D5756E612E21DF873 1DFB0247E1EFD2703734B09BEFF822DCAA6D0E05A56A2460D8E6B77BD6318B449EB09EDD7377266A E07FE52A9A487A419ABFCC76A68316E08B80BA83B34E9E47DBDF4579BC64EC21360EEFBDE14694B7 17F729A6BD42BE390CCE525A5DA99E98F34D9A7F3BFE9575E801925764EE7B1DBE3026EADB091F1D 55D7FC7150F6F9C7A0B018C60B24CB616A38179D8F87EE7AD45CB396BE8E80C28FC165D71C386E45 81BE50C467EA1A136F5524161D35B177A4B87ECD98738704C1AAF35511E2774A5CA6F552ECE4F1FF B439E130E4888A970846B49C6DB033B426D4B8546C4B8EA3E664C7AFC6E957BD57B0A2DFA3F14A23 930FD17F2B8203D0ADEA1882229024764251D4E74709C7397AB4223D8EF5323C09861455D36F55C7 69048ACC0295ACC374B65000F7DFC1EC3A22F390A5FFFE871760BF89F37AA22397BF0675D630D2CB E1BDC2A0897534E5E223916C2A6E9D012E93955D70597A9CD89187AFB4018A89F828F4491BE959F0 A387773E61B44748CC18377772089F99D3DFF8D8C7B2E82C34F4B9ADF5092E4197C86EAF396CAA00 F8CD06FF2C1B1B46955F30A6898F7AAC6AB3BA2657C41F972C7A23F76EF0382A4817F362364489B8 B009BB7147C7A1B44216B09C2731873F15E5AF07B2F0B9F35BC176ADFA37A0D668CD51175AF4CAB0 4D8F2E8E3B758C89A80A372DE05C0C4BCBEAD27FDD7A4AD65D4404D1D70607833057E12C1A7B57D5 8791F7022F156B273E41BFED870F73A6DA20ADA11055A0F1C7F0C7FD04D5E3A9FBBF578356598546 DC94211B501E13B5E8E3E6C2A7E8EFA083EFA69C4720AA78874BA25FA1DC6EC16BE1F98BBD6D9C7A B9BCD387E18182A48EE6A355B7063CABED163499F433089FCA5B23C80049C32CBE669C518850144A 3A22DEE14676208C871E163013D00F8181CBEAC592FD328194C24E1C8897E43B92080C2F0EF20896 CD42CE9C7E7F7BE4C3F10797924923A5BFC901238A7370B623561C831153E1B0D99E8B7B0880BCC0 98403F8AD1D28D02A1D56B587570B761B21BCD31138BA52D5C2BD8C44E60CBE9C4CF29AEAF10A7E1 3AF3443CF7E59C5B2211C348DF9300240B7DFD026C86C6FF0DC13CE702A16FF580EAAE28ABEFDB6D 74857E0DAD7A133BE197E1DF368C83336739E180F62583D737B4FA1A7768E8A939C1B8B87A6EFDD8 CC7A7ABD2FD67D407DFE11AEE68C2A018ECB13A7962647AA73FABE65C263B99F4F64F8E783008F63 F08E60214FB8E87BB9F070BA1D525963212C969EE445489D5BE6A84F891DF035685B577250A04E2A 072910D98A4D0DA55EC11BCD68D6DC9FC9406AED3F29654A281320B832E55C4CE18148567C89DF73 3618F030784B8E33E279693662471ECDAE924EBD4C70E0A195E291C6326878F8F9D456E911F9097A DBB6F65F063A1013A93E5F03A40DDB2B1A8F5653F4B9CE8D97DE9697950A61E7FFD9C1BE4BF0A4A9 B0D23033DECEF861F8105E0BC940D1AC0241431FFF30301EEC0AA5A92B1884D57784D65FF566DA67 F63E22F63CAD3B3C79AB163E06D3815C5B0FB77190A9AFDA28F20AAA7B27211687AA70DD145D991A DEC5806C72CBC11842E71520FD506131FC2B1171707FE37B0088CF0741BBE9B1DA3C20B483C1EABC 6B8D001FE905EC49C083E743C80EB61F1C07D2EC900D29F555D1746C72E4FEE31B8C9BA2FF5AD86A CA7C99AF7166E10BA511EFB374E6B4B6CC60A1BC411A0F0A99A235717311F9B5F13DA039CC809CE6 7A0DCE7E6789DC3855612B87A45A22ECDBB3D27A50D273A79DC536885497F45162EBDF611B28F08E 5E87F4DB33A4AF35EF1ABF036D0F20408C40C97BC7CD0C1BD67C63C8B579472C31DCAF6EFB3340C5 84EA880860E8270D0C9DE4EDC9A5ECAD002F8FC89AE35B5B1BAF0EE2622812722171C7EBE7456430 333B2BC721AC050608A248B749FA14425AE342A372ECEDC8D8575885FD9F8A01A1AC49600DF359CB 447240CE2BE67E2A87F8C667714CA293C73C32FBD81C68ED378098B4AA2F25F6833BDA37378122E2 B42B0D71455A107A5A8E1ECA62F90B344A721829ACABD7508CCAF5A5E4FD21FB7835904436332C34 B0C76E8D5AF8FD17DC4905B9240FF0A8463F382A4F994B983EF7181B2194C408BD78420EC166036E 85834828815B1F0E2B86054302022A579B326835E5C3A5E6004B65913AD3C850087768B98967CAED 1AE2D57ED0F571401B49454CBD6E0C0A56184AB53AF115E8E9EAE3DFA21C043ECB858DFC4719711E F0276CBAC01060B468313C1F47A5F6D19827F0B2BC270A507053D3F1E7CC5103D851F31132BA7673 C00D8442B969991CBF2170867ED3CBE7DB83FB54280BE9A7F6409442E25F19450AD71303D9DF6C5B 87D94BB1BE7164B4304B6A4D5199B9C66CAF82F77D9EDB6AD9F9EDF53FE4771C77B9E2D0F66A9DF2 907EE8AB0B99A3C84E2A54695E31FD722CF866D92776EBE025A7E782316F31249CCC8ADAE49CAB8E 5EE47174BDBC51912526F12591BA50A9EFE34A811B4B742534DAF509037EE1120C9D34A5A10C3C50 86A7A7FD6725D41949A0CD6B09F315C84888653589B5D037EBB4A7994E2167A8A8C5A83EBBC7B2D7 3885E9CA771D458BE380A9A9C577675473E73AA1B8EC7B403B15487ACBE732E3473F0C657E7667FA 378E596CB60376BD4674F6F434BC0F1D74C53F16DD262F75E1126F0E9DC72AAF172D45927CAFFB78 19AAE5591F8499ACE69C55E540880472AD52E410F7EBACBFC5A425782BA6EFA0314AE9DB2A701D83 B6718CC8A193A881750E5D19764B41EA7F65D5407F8EDB7A0CE18FFBAE859D6A06E03CE95799427E E6CFB40946DC4D91F16308DEEACACB1DEB688ACB8C9B066031D439DF464683C26AA72903F65043C8 24043F42269743B48B9F0FF7F1A03490D0488727A1E0AE777362336E91E07724491857EADF75C77E 5A0E9EB475858069D091ED36624675F318016EE24B2FC58CFE1CDF3B0E48CBAF0570A86919ACF9E6 0348717CEC01D9B06B133785964D25FB84F480F44F37DCC14C4410079F996845C3A6C3F687685831 31DACF9D31CD567909108660E25B31C8A54A7BFF987D8877E27EA80D450A582BD6E14C36D146036C AE2203C923E77C45721931AD20FBB70DA40C424A81C3DF7D7F72906DEC2DCDCC6F48FB94F0B5F50F 1D5EE35258BF057E914F05880F75616D57CF722825988D1DF1029F6829A754629A104141E58AD0CF 2E80C798544F816622D5ECBF98F4FA691FADD53EA9A1C0F888C3E9F56B3AC3AD7FA5DF806B70BC93 104A950594E0C93596577111F806ACF86300CB419EA2AF287B0D8429E8860232129E66055C1494F8 4A33D24E85AFF56A6E0A8ABDA05ACCD8E7EFD2269107B96CC1E541288FFD0844265EC9C7973483AA 5CEE5E273EC905AF86F4E006C676DE7D5052F66602568FFD3C7EC31C796F7B8DC857F21132A5FFD2 C2056BC52DF2C6A05966ACED0E5EDCEF502FCB79DCA3BC0C2D7C08A256611E44F5F5D923FF120A35 9A8E378A68DB20FFDC4B04FD8C5EE9D70020F5409CDE41FBD28B8231FAFA932DB9B7851F2C981BD7 41048D58FB311CB5D5CA58E91D688AA7F96C11D341BD1CC285A4864C8B852945C0E7446658B9A168 89B0D2DBCAA9C3E19EBB69AA9E4461D92BB34BB7C108C054099BEFF7278C55738751A291D20F2285 A3A2B2CB9D395A945FD3ADC1C0A005EF6369B0375B93BA4F30A4C77CC425B31B7AB2192E69EF4C1B 13C6CEEA5E26E68D5507A0A163B2E3D45F1FEE90E6C242EA7A9954B723B68C424F6BF647727E8028 6BBFE003D0C422A4F6823ECB5825192AB1EBB2B1B16A5A786AA7C62CD02624B0CB9C0566627D001A 8B9DEAD47294AC97B0D75AB890A18F87663FA32553444411D96EF29C86E6FCA8636C3CEA00037A74 59D83A715275B77E3FFAAFFAC8F5AC1BA2ECB925B1F81725663DE85830A52E7E465485E22F4189B8 635D6C4B484684C938AA352FA813E2F00E5733DCB2E6F6CB03EA98E5AE658FD2725713F7FF9B0CEE EC80D6D1FCED6A4047CCD98DC0C56BC9B64061FB458D2742FBFB46A3FC883D173AD767E7F5C91A90 F1611088DB87C6FC6FADDA141D8D598060EE144D0EC5BDF3B18FAA97919737270BDED59CFD1547F8 047D075F7CE8CBF1FB63E95AB4D34EE34C7001522D5FFED2F9BFF121035158DC4D011A3C32700D28 364526B06FC48FDE1E1DCE77BC120E93C85EB0C8B6589D1AA97338DA39D4CBB0C2CDEEBEA86EF069 367C53E571075D67E01B5BEE2CA83F27D341DB417A207A9DA8452E2D74B6B27909E976A96C7EF316 50CE7570532C3A9E502ED3812146ABFA12754D7E1871CCB59154254C9FF34AE07EC5033CAA68FB5F 0F64D7013B1976A373DDFC406420012E61F76D62F34D2FEF08751F54E8A2321D38BBF32CDBCBB619 A47EC4A4EBB92CDA9417B695131C99A895FDC7242CF93B29A12E6862871E1D07F6023574810627F5 655F14CB55F4062456C6DAC6FA4121E0C87E30FC0FEFD09F113B42C94AC0045BB6729AA4685D3C31 0CB92A3B8DA8229DE0CE4D1D39F575147FDF2238D243E15CD1BBA7AC2BB3744B95B103E3DA2C9EE5 2B053C200501C8D933CDDA4495CEA2C6C5731AEC14BD1E8CA27DFF3CC1A04C2FE936B16516673279 5E5EAB231CBE020039A5DBC94A198925001A338C2AEBE26C4C3C0242A2697865381775368D34D0E5 6225CDB95A62674D7027AD9C2786FD637D5762C378F2FBE5B44B2A93A4B047FA8D8E2FC020E24258 F3CB93ADCAFBF884C0B17847D7ED45C0EE756E9550CCCB65044572CB04E5C96833DBAEC0C71E8AF1 67A773389CEB9AD55C63A37D5B02986AD6574AB96EEAADAEA4BB069ED66C9421C3CD52514DA8636C 98306CE6B5DA2442304EF186C2C4AF16172AEDA79D25698D3FF457BCB8A8B4F532F4C7DBA8AC6702 9BED6D804755729F68AAD5D4C780FFE432E9038CEFC5FFA9D0B92C2E911AC259D52858ECE3B98CEB 7CB39386272DBCF4020C86E355465EE1A0C956ABD520D144444313C3DA655AFEC31B127788A52B11 9A6CF230880D2D0F9FAF9438F2B2C297913D1E65DA4DD056B72CD1EB5E299F13DA6EC29E90C18D4C 226284369D975011E08DE090DB02C940394C7FA2A9185B5DA872D3237C1042E7B1419F320FE0B2FA D7BE54B21572211A860F0D83FACD214E045FAB5666686561507BB894197D8B9263F2C903D9DC7D12 F396482ED4AB4B8CF2BB5BAA3ABF991984D66650F0921FE26D4F3A278BC2AF17F1270267AD340D0D B44E5B9492E0EC851E85178BEC1BE3EF265ADD71F89B44EBFB7AED2689875AF8D23AE2AB4074BD82 D02BBFACD555F78842D55654AF77B736E42527A8B87E92FE141D4B8AC9F86CDEE43CD8F458755629 7C386745A45D25F9C235436ED1A3F518CB3CB060F9E25F3053A46101F8A47E8E56D12F3BE60C9B24 D6E8CD106B21B918FADA3351072D466A4C611A3A22062654200FB562F8F226541624DD047EE2216E 15A23BD056931A7DBF1AB4837040695F92BE2828ED16E2E3151E8548B007B92040F2CE3E375C5258 881DE796857CB4F8B045E1B9C4BF7E592654E3D52947E66208F3C1068AB8EC1A5EFA08BA5A3DDA75 AF95CF256C26C247EA42E788438AD2F6C21AB08F36B65592E73C60C28C1A2B606DA7247BC9955727 9F7CCC3159BE92D298AE0F2B62F934D3B57BA952B7C9BAD9DC78448A5959694BEBD4FB9635A0F5DD 49A72C12150E2A83763F545B2613BD56E836BD1F0135FFB953160A24095C31EF7F7E5539C3CE9C32 43E0EF46776D83F450ABD074A6BE926A774681D2D7D70982E6198080B8CF113890403AACA80585C3 1050B9FAFE8339AE404F1FCED604E1B884A634C508E1C50B7C64FB3055043F5A3B336F0E0F9471F8 624113A49D197BB3D0D0643D73B9A93AAD1AEF9D6440D1D960537917952F85E063C38212D0C212F1 10CDDE659EDD02D9F0D62057FCF8F65798EC6EE9866ABDC74DA9CA98B909802F38AD7B2C5EB5F682 769D4E3715BDB46DDEF744CE75FE0D38D04EFFF7CF64DCB552F474C8D6861AC30D8269BCAC58B843 15214A035146AFCDD689B69E2529B632B097E4DC6E36C585A8C228C687A6CF9E69DBB752ABAE8E8A 6F880EFB2BA3DE28B126C0357E6ADF9BB92353CA98B1DC5EFF9B136BDDDF4D442435339DA03C979C BA3DA87F14ACF3EA05C07793424C0586B56CB44581C6E969BFDD32862C11C5B561EDBE135A9A5939 EE591266B1A6FDBCA8147D4775F53B9B5016E00185608BB14637DE71B23B0A9D908E9594343C782B CE1DE2409C3953CAD9129E8C250FF111B6C664D96820E059C67B1F37730F858AA9E40E33EC688D55 819B66A6443212175AE46C17FE2A2E1E5C800A803933BDB5577D749CE78590B7F133CBF5B33F61A9 9E478B00E679717299D3B4157E1383436A460A24390781CA9AF2D468CCD08BD6A0A1452AE459C1F5 A1DA700FB018BD928D57344BCBAD15A37F8AD3EC32A1F3A6F21CCE25D73D4E1F1DC93CAF76FDED7A 431B954C154A513B7982A7F72D03E24551E768545C81FF727D5EAB1E6F8B7F850BB96721151E88AE CA305CD7576E47B0AA02E8058BF142C5F6C8D0F8A987070C98C7BB3EF7BF09EC255F6A959C04D04F C456703E17961C88F5C22120C07868BE80D2EBC356B2653F2159675C2F8917AD7D9202FC65594728 374AA869A0B5EF2684D8DDCB8B8EF3B8FC8B04D31FD16C5132C174D9F23F72C3BF891960B1636150 1866C7F7C54B74A257579DCAB97B709D0D4A8B8FE99A1B7CCCF0899D09BECAD1C3B0ECCC8E9975EA BDA1047ED99F3997467150A785B8ECF3B2C6D3FD1729F6AD8450DB4C4B6686B5F5A06C61CCCB0143 BF7C7836D79FBA68BEE6474240DF8675F8F2B780898236BBA20A63341ECC3B02D14F620B91641D58 93585DC32806A933F26F3B9840C95E637F0E233CEAFB31177EBE6BB9A3A0D82D46EF410560D6D10F 36FFACEAC9D735A80A06A5646698A4290D9EB02047996E741C212EC6FCEA3BF7502EE2F3E860BB7A EAB485F1991FB28410DDD46A77A40178D8E0190ABD7817349A50A7EDFFB008742100E927445A4908 10E1FEE2869B4609838BBC219A3D6822C652C5A9F564C7AA7F3A3F934B2D4F0F06A54BF344BCA794 A4D3A2EF5B565D39D9241BC2A5EF7C96A11465166F480017DE4C884BABBCF33F072DCCAF833E0771 D105B449ED23DDC5D3C02DE2CBA45F8D22BA3E1B6842EEE791540BE727044CF7D99FADFEF45FE14C 74CEA615DFB5BB6F7B27A4A1EF8A1FFD4F838A8DE85D488F41E97B9ECE0EDF00604F922EE0EE4ADF 486CC0EAA2C3C60EC275F2792FEBAF4B6BC4FA59AC378212EFCB763CC794D2179FFD538A6C19F5F7 35084AE03A90AF00BE5821CFB9BF2C966B4AF8D66AEC8A58C1C683AD392F1DF20983D1210AB6BD73 9FF130869E652C09E9A61D8E892A86DE1B31BBB1B80239B6829368ED026C645F95FB953298411E84 003C85967FCC739651014E3AE23B578A64BF14F6AC87777A6719ACE6119D6393E8DC9B9C7AC424A7 857092DE86375831DC985ABA2133B44EAD072744924EA4A738DB94D432045A8035A9BE5F9DA3581B E8D60FB428BFD91A4E145D11CC9E37B47179162B6721F02E943E3CC9CE5A14C89117F44E4113E47D 08A3D75BA6E33D52A7A479BB40A41DB53E3A9C6BE6298B2ACC8AA8A0CFC10954EDF1D3EA9EE3C5AC 8D8C4424603C5B41DB638FF08CD744DD8AF80D1D96587F12AAF4FECAE452DC350204E10740469ED1 ACA97C52C331A823C651E99021A7DCA218086B724D2B483F0484C158D238507834F478347418ED16 B42D30F04C3E1AB8E0C006E8943934B6AEDFA2A5B255F2B41F5EF8A1CA1FEA020A40A8A8AF420615 E2FC6237EDADAB7B8C8DEB09D78580B4C29782EF9551E55CD962FC17DC96FBA80DFE4AFB9806AD98 F06B021F84C35D19B5672E538EC00838588BE19932C79B79F630948E4A47D1C54025FA75AED05AFF A16F675A7C089E7890618EBD3D0CEF29CCAB7F5BBBF5C6FCE56E64816ACA9895DC824E8BBE7A329C DD7FF5925736B8FF8AEC4A56E6A980311F8F5A6B06520E74512270098436D99C5BD9C4BA2F81728B 1C82B52D9E9C33EFE65BDB233C6384471C0FAFAE94D7308B7EA591ECE5412151F0CA5C1F8214CA0E FE6EC698D0AF6B64524C6FF9F3DF6B2AAFA270535F6484B743FF927C0284E56296C8BE8E77D566D2 EC6D45C933C5CE1128BDF66FFD0DA7864F1BB09F74604D2D27B4C7FB1DA5D28CEB0902A32C1EDDB3 6BEEA2D44FCBE59B0D0F3C37FFCBAC595D6110DA77605FF20042239CBC1B7B245CD25C99196105D9 9AB195319A9AE4287A0A46D32F8DFDFCABF792CE8105CF77F0AF50A011D7D58F17696FC68706B4C2 B9BF5AD816C492AE5248EB96622399A3AC9FE5FD926CAFE71279F7677820983BBDDF28625E4884A2 ECEEE746603B1E7E500239FEDC6A7DFAD82AE32A7A4A83046B3649EE86A77A39E5A165C28DA4FFBF 98652943738A6F3C4A83C092DC0A40B1065F429AA1B1C2B1A2DBD13F194ACC00D52E3D4C0A8C9CE9 C2EFDD9708F5CDA6334687D4E21DA5C5C734CE2574BF1E441D9BE03946EB7A35359AEDFCB84028D5 04D7393088C9A7DD1C0B185E72C51E7DD1BF6F7D074105C530963F3E463A98B2ED01DAFEC6AAE40E E63CDF0CD8C180306692D12175F73D3175FADE69B4FA3B98D0A4358BEFDC972D8A26EBF8FEB0FC53 35FE9F528808E7ED2228172021278E0EB68ECEB7C3E6FDD42B27EFBC8D41530959317FF714928F77 FD36FB5723FC5F3890A8D91CF18BFA4073BE695FCCA6294F9B272E29352F72B9F420B881BE4543E0 C45650974079F8BD8D70A1CC24CE4112F201DCF2556325F5D62BE6606F72888937BB54BDBF744C25 E08CA867C757FB314E8D51DDFEA3905CA670E5F478F42033B569A754C686E3FE4F93FFB96BB1CB57 16334F15CBD2D37650D6C4BCB11DDC6BEBA5D33B862D2D9B7CDD4FA537F439DDCB13C966BF5CF6A9 395ED6E32DAD3F9BCEEABEFE91F4AB4F129982165F089F9D40159998F8D737641D6C32CE4DA1AE05 F0C1958EA4D2A9BDA6AA567BCC1F0DD5152624E66E4BE9F45791C0B1EC1E09EEADC0515E72E7C672 A63AB31E8B85EE2EA39B193618427C4134162604DBE8BE3BBA64B4F3A43FE6F56A08BDF26AD4C4B4 6BB12C4EDAE915E47C236364298A637ABCD18590C6EF2C096A2D3D53C48469D25B514A23A6568186 05E255F1B85F576638243CDB4FF8068DEBB912EF9674C80976DD3CD0C75CBB562BD3F3C6A31868F8 40CC9197E4FA01DF1A1422ED16B127A4059D2C63838BAAA0F7F620D89A4450916B2FA001FA4E9C77 3ECA2D2DE2775ECBC0CEBB9CA6903440EB1E4E83ECADC1B5EA255D953F91BC39846692CDCED695BE F7EF5B838A34509B771F4C89CE01FD851E3CC0A02486FA574A1F09DB3DDEE582C27C5FB213ACBC35 C96CE631EC7FDCACE158B5814FA74101EDE2FE917928532AF7476C41857D972CA11EFAFB7CB42AA8 5E957769A16C570CC97CBA01F71E574AFC75C94A99939BC8EB001760829467FB5227539FAC3226EF 68D8E7D91870787C47285A3F08F0386B132024F2008C9C081CD741D691D9E7EFAF47B2BD7D552426 5F40CC31ABE23DC2A26CA215CA49700432DEC497ABDE6EBD4066207033879642B6CA884DA74281EE C3F8EB4F40C89998ED7D4659604E95ACAA0F182625139D9F9E4DFFD97C20C09D88927F524FDE1E3F C8AC0B149F9C4F4AE3F82FCCD553608AB401DA54BCA3A7FE854B01E5C07A20FF9AD6C7C7E25C68E3 92E48C88B5AF930920CFB487092CEE4937BF5E76F99D49289252DA678433A6877B37856C4D3402A7 ECB7C4E6FA9E1595CA25F15279EF185864D44A0389B1FE69AF3C271688B0E2EAA7147B4C2B4A1206 7CA524E7BB570434E1D1F0A886A4A368B93220E33B9041B979000A2FCEDCC494C05A1EA3EA79331F CF6567C41FD5BA08829F094B7F0A1149E5738219A8FEB3FF04FC4A7EE3A620040D436AF600AE157D F48A246B76B05BF836F7BB2950BFEBB9B2B34E1FF7150BA77E48D45ABC18D074906D136D9AED3BCF FE951A7F707E 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark{restore}if -------------------------------------------------------------------------------- /resources/ahem/Ahem.sit: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meh/miserve/18bf3ca945cffa8b6f97f088f04c918e741f7dd9/resources/ahem/Ahem.sit -------------------------------------------------------------------------------- /resources/ahem/COPIED-FROM: -------------------------------------------------------------------------------- 1 | The files in this directory are copied from http://www.w3.org/Style/CSS/Test/Fonts/Ahem/ 2 | -------------------------------------------------------------------------------- /resources/ahem/COPYING: -------------------------------------------------------------------------------- 1 | The Ahem font in this directory belongs to the public domain. In 2 | jurisdictions that do not recognize public domain ownership of these 3 | files, the following Creative Commons Zero declaration applies: 4 | 5 | 6 | 7 | which is quoted below: 8 | 9 | The person who has associated a work with this document (the "Work") 10 | affirms that he or she (the "Affirmer") is the/an author or owner of 11 | the Work. The Work may be any work of authorship, including a 12 | database. 13 | 14 | The Affirmer hereby fully, permanently and irrevocably waives and 15 | relinquishes all of her or his copyright and related or neighboring 16 | legal rights in the Work available under any federal or state law, 17 | treaty or contract, including but not limited to moral rights, 18 | publicity and privacy rights, rights protecting against unfair 19 | competition and any rights protecting the extraction, dissemination 20 | and reuse of data, whether such rights are present or future, vested 21 | or contingent (the "Waiver"). The Affirmer makes the Waiver for the 22 | benefit of the public at large and to the detriment of the Affirmer's 23 | heirs or successors. 24 | 25 | The Affirmer understands and intends that the Waiver has the effect 26 | of eliminating and entirely removing from the Affirmer's control all 27 | the copyright and related or neighboring legal rights previously held 28 | by the Affirmer in the Work, to that extent making the Work freely 29 | available to the public for any and all uses and purposes without 30 | restriction of any kind, including commercial use and uses in media 31 | and formats or by methods that have not yet been invented or 32 | conceived. Should the Waiver for any reason be judged legally 33 | ineffective in any jurisdiction, the Affirmer hereby grants a free, 34 | full, permanent, irrevocable, nonexclusive and worldwide license for 35 | all her or his copyright and related or neighboring legal rights in 36 | the Work. 37 | -------------------------------------------------------------------------------- /resources/ahem/README: -------------------------------------------------------------------------------- 1 | The Ahem font was developed by Todd Fahrner to help test writers 2 | develop predictable tests. The font's em square is exactly square. 3 | Its ascent and descent is exactly the size of the em square. This 4 | means that the font's extent is exactly the same as its line-height, 5 | meaning that it can be exactly aligned with padding, borders, margins, 6 | and so forth. 7 | 8 | The font's alphabetic baseline is 0.2em above its bottom, and 0.8em 9 | below its top. The font has an x-height of 0.8em. 10 | 11 | The font has four glyphs: 12 | 13 | 'X' U+0058 A square exactly 1em in height and width. 14 | 15 | 'p' U+0070 A rectangle exactly 0.2em high, 1em wide, and aligned so 16 | that its top is flush with the baseline. 17 | 18 | 'É' U+00C9 A rectangle exactly 0.8em high, 1em wide, and aligned so 19 | that its bottom is flush with the baseline. 20 | 21 | ' ' U+0020 A transparent space exactly 1em high and wide. 22 | 23 | Most other US-ASCII characters in the font have the same glyph as X. 24 | 25 | The Ahem font belongs to the public domain as described in COPYING. 26 | 27 | Acknowledgements: The font was originally created by Todd Fahrner in 28 | the late 90s, and was updated by Paul Nelson in the mid 2000s. The 29 | changes were the introduction of x-height information to the OS/2 30 | table and the addition of the space and non-breaking space glyphs. 31 | -------------------------------------------------------------------------------- /resources/badcert.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | Certificate error 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /resources/badcert.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meh/miserve/18bf3ca945cffa8b6f97f088f04c918e741f7dd9/resources/badcert.jpg -------------------------------------------------------------------------------- /resources/cert-google-only: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV 3 | UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy 4 | dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1 5 | MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx 6 | dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B 7 | AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f 8 | BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A 9 | cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC 10 | AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ 11 | MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm 12 | aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw 13 | ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj 14 | IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF 15 | MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA 16 | A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y 17 | 7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh 18 | 1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4 19 | -----END CERTIFICATE----- 20 | -------------------------------------------------------------------------------- /resources/failure.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | about:failure 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /resources/iso-8859-8.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | https://html.spec.whatwg.org/multipage/#bidi-rendering 4 | 5 | > When the document's character encoding is ISO-8859-8, 6 | > the following rules are additionally expected to apply, following [user-agent.css] 7 | 8 | */ 9 | 10 | @namespace url(http://www.w3.org/1999/xhtml); 11 | 12 | 13 | address, blockquote, center, div, figure, figcaption, footer, form, header, hr, 14 | legend, listing, main, p, plaintext, pre, summary, xmp, article, aside, h1, h2, 15 | h3, h4, h5, h6, hgroup, nav, section, table, caption, colgroup, col, thead, 16 | tbody, tfoot, tr, td, th, dir, dd, dl, dt, menu, ol, ul, li, [dir=ltr i], 17 | [dir=rtl i], [dir=auto i], *|* { 18 | unicode-bidi: bidi-override; 19 | } 20 | input:not([type=submit i]):not([type=reset i]):not([type=button i]), 21 | textarea, keygen { 22 | unicode-bidi: normal; 23 | } 24 | -------------------------------------------------------------------------------- /resources/prefs.json: -------------------------------------------------------------------------------- 1 | { 2 | "dom.mouseevent.which.enabled": false, 3 | "dom.mozbrowser.enabled": false, 4 | "layout.columns.enabled": false, 5 | "layout.column-width.enabled": false, 6 | "layout.column-count.enabled": false, 7 | "layout.column-gap.enabled": false, 8 | "layout.flex.enabled": false, 9 | "layout.flex-direction.enabled": false, 10 | "layout.text-orientation.enabled": false, 11 | "layout.viewport.enabled": false, 12 | "layout.writing-mode.enabled": false 13 | } 14 | -------------------------------------------------------------------------------- /resources/presentational-hints.css: -------------------------------------------------------------------------------- 1 | /* 2 | https://html.spec.whatwg.org/multipage/#presentational-hints 3 | */ 4 | 5 | @namespace url(http://www.w3.org/1999/xhtml); 6 | 7 | 8 | pre[wrap] { white-space: pre-wrap; } 9 | 10 | /* 11 | FIXME: also "align descendants" 12 | https://html.spec.whatwg.org/multipage/#align-descendants 13 | */ 14 | div[align=left i] { text-align: left; } 15 | div[align=right i] { text-align: right; } 16 | div[align=justify i] { text-align: justify; } 17 | 18 | 19 | br[clear=left i] { clear: left; } 20 | br[clear=right i] { clear: right; } 21 | br[clear=all i], br[clear=both i] { clear: both; } 22 | 23 | 24 | ol[type=1], li[type=1] { list-style-type: decimal; } 25 | ol[type=a], li[type=a] { list-style-type: lower-alpha; } 26 | ol[type=A], li[type=A] { list-style-type: upper-alpha; } 27 | ol[type=i], li[type=i] { list-style-type: lower-roman; } 28 | ol[type=I], li[type=I] { list-style-type: upper-roman; } 29 | ul[type=none i], li[type=none i] { list-style-type: none; } 30 | ul[type=disc i], li[type=disc i] { list-style-type: disc; } 31 | ul[type=circle i], li[type=circle i] { list-style-type: circle; } 32 | ul[type=square i], li[type=square i] { list-style-type: square; } 33 | 34 | 35 | table[align=left i] { float: left; } 36 | table[align=right i] { float: right; } 37 | table[align=center i] { margin-left: auto; margin-right: auto; } 38 | :matches(thead, tbody, tfoot, tr, td, th)[align=absmiddle i] { 39 | text-align: center; 40 | } 41 | 42 | caption[align=bottom i] { caption-side: bottom; } 43 | :matches(p, h1, h2, h3, h4, h5, h6)[align=left i] { text-align: left; } 44 | :matches(p, h1, h2, h3, h4, h5, h6)[align=right i] { text-align: right; } 45 | :matches(p, h1, h2, h3, h4, h5, h6)[align=center i] { text-align: center; } 46 | :matches(p, h1, h2, h3, h4, h5, h6)[align=justify i] { text-align: justify; } 47 | :matches(thead, tbody, tfoot, tr, td, th)[valign=top i] { vertical-align: top; } 48 | :matches(thead, tbody, tfoot, tr, td, th)[valign=middle i] { vertical-align: middle; } 49 | :matches(thead, tbody, tfoot, tr, td, th)[valign=bottom i] { vertical-align: bottom; } 50 | :matches(thead, tbody, tfoot, tr, td, th)[valign=baseline i] { vertical-align: baseline; } 51 | 52 | td[nowrap], th[nowrap] { white-space: nowrap; } 53 | 54 | table:matches([rules=none i], [rules=groups i], [rules=rows i], [rules=cols i], [rules=all i]) { 55 | border-style: hidden; 56 | border-collapse: collapse; 57 | } 58 | 59 | table:-servo-nonzero-border { 60 | border-style: outset; 61 | } 62 | table[frame=void i] { border-style: hidden; } 63 | table[frame=above i] { border-style: outset hidden hidden hidden; } 64 | table[frame=below i] { border-style: hidden hidden outset hidden; } 65 | table[frame=hsides i] { border-style: outset hidden outset hidden; } 66 | table[frame=lhs i] { border-style: hidden hidden hidden outset; } 67 | table[frame=rhs i] { border-style: hidden outset hidden hidden; } 68 | table[frame=vsides i] { border-style: hidden outset; } 69 | table[frame=box i], table[frame=border i] { border-style: outset; } 70 | 71 | 72 | table:-servo-nonzero-border > tr > td, 73 | table:-servo-nonzero-border > tr > th, 74 | table:-servo-nonzero-border > thead > tr > td, 75 | table:-servo-nonzero-border > thead > tr > th, 76 | table:-servo-nonzero-border > tbody > tr > td, 77 | table:-servo-nonzero-border > tbody > tr > th, 78 | table:-servo-nonzero-border > tfoot > tr > td, 79 | table:-servo-nonzero-border > tfoot > tr > th { 80 | border-width: 1px; 81 | border-style: inset; 82 | } 83 | 84 | table:matches([rules=none i], [rules=groups i], [rules=rows i]) > tr > :matches(td, th), 85 | table:matches([rules=none i], [rules=groups i], [rules=rows i]) > :matches(thead, tbody, tfoot) > tr > :matches(td, th) { 86 | border-width: 1px; 87 | border-style: none; 88 | } 89 | table[rules=cols i] > tr > :matches(td, th), 90 | table[rules=cols i] > :matches(thead, tbody, tfoot) > tr > :matches(td, th) { 91 | border-width: 1px; 92 | border-style: none solid; 93 | } 94 | table[rules=all i] > tr > :matches(td, th), 95 | table[rules=all i] > :matches(thead, tbody, tfoot) > tr > :matches(td, th) { 96 | border-width: 1px; 97 | border-style: solid; 98 | } 99 | 100 | table[rules=groups i] > colgroup { 101 | border-left-width: 1px; 102 | border-left-style: solid; 103 | border-right-width: 1px; 104 | border-right-style: solid; 105 | } 106 | table[rules=groups i] > :matches(thead, tbody, tfoot) { 107 | border-top-width: 1px; 108 | border-top-style: solid; 109 | border-bottom-width: 1px; 110 | border-bottom-style: solid; 111 | } 112 | table[rules=rows i] > tr, 113 | table[rules=rows i] > :matches(thead, tbody, tfoot) > tr { 114 | border-top-width: 1px; 115 | border-top-style: solid; 116 | border-bottom-width: 1px; 117 | border-bottom-style: solid; 118 | } 119 | 120 | 121 | hr[align=left] { margin-left: 0; margin-right: auto; } 122 | hr[align=right] { margin-left: auto; margin-right: 0; } 123 | hr[align=center] { margin-left: auto; margin-right: auto; } 124 | hr[color], hr[noshade] { border-style: solid; } 125 | 126 | 127 | 128 | iframe[frameborder=0], iframe[frameborder=no i] { border: none; } 129 | 130 | :matches(applet, embed, iframe, img, input[type=image i], object)[align=left i] { 131 | float: left; 132 | } 133 | :matches(applet, embed, iframe, img, input[type=image i], object)[align=right i] { 134 | float: right; 135 | } 136 | :matches(applet, embed, iframe, img, input[type=image i], object)[align=top i] { 137 | vertical-align: top; 138 | } 139 | :matches(applet, embed, iframe, img, input[type=image i], object)[align=baseline i] { 140 | vertical-align: baseline; 141 | } 142 | :matches(applet, embed, iframe, img, input[type=image i], object)[align=texttop i] { 143 | vertical-align: text-top; 144 | } 145 | :matches(applet, embed, iframe, img, input[type=image i], object):matches([align=absmiddle i], [align=abscenter i]) { 146 | vertical-align: middle; 147 | } 148 | :matches(applet, embed, iframe, img, input[type=image i], object)[align=bottom i] { 149 | vertical-align: bottom; 150 | } 151 | /* 152 | FIXME: 153 | :matches(applet, embed, iframe, img, input[type=image i], object):matches([align=center i], [align=middle i]) { 154 | vertical-align: "aligns the vertical middle of the element with the parent element's baseline." 155 | } 156 | */ 157 | 158 | /* 159 | 160 | Presentational attributes which can not currently be expressed in CSS. 161 | FIXME: Deal with them with attr(foo dimension) and the like? 162 | 163 | body 164 | marginheight 165 | marginwidth 166 | topmargin 167 | rightmargin 168 | bottommargin 169 | leftmargin 170 | background 171 | bgcolor 172 | text 173 | link 174 | vlink 175 | alink 176 | 177 | frame, iframe 178 | marginheight 179 | marginwidth 180 | 181 | font 182 | face 183 | color 184 | size 185 | 186 | table 187 | cellspacing 188 | cellpadding 189 | hspace 190 | vspace 191 | height 192 | width 193 | bordercolor 194 | border 195 | 196 | col 197 | width 198 | 199 | tr 200 | height 201 | 202 | td, th 203 | width 204 | height 205 | 206 | caption, thead, tbody, tfoot, tr, td, and th 207 | align 208 | 209 | table, thead, tbody, tfoot, tr, td, or th 210 | background 211 | bgcolor 212 | 213 | (quirks mode) th, td 214 | nowrap 215 | 216 | hr 217 | color 218 | noshade 219 | size 220 | width 221 | 222 | legend 223 | align 224 | 225 | applet, embed, iframe, img, input[type=image i], object 226 | hspace 227 | vspace 228 | 229 | img, input[type=image i], object 230 | border 231 | 232 | applet, embed, iframe, img, input[type=image i], object, video 233 | width 234 | height 235 | 236 | */ 237 | 238 | /* 239 | 240 | Extra 241 | ol > li 242 | https://html.spec.whatwg.org/multipage/#ordinal-value 243 | col 244 | span 245 | colgroup (if not col child) 246 | span 247 | td, th 248 | colspan 249 | rowspan 250 | 251 | :computed-value(text-align is initial) > th { 252 | text-align: center; 253 | } 254 | 255 | https://html.spec.whatwg.org/multipage/#rendered-legend 256 | 257 | */ 258 | 259 | -------------------------------------------------------------------------------- /resources/quirks-mode.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | https://html.spec.whatwg.org/multipage/#flow-content-3 4 | 5 | > In quirks mode, the following rules are also expected to apply: 6 | 7 | */ 8 | 9 | @namespace url(http://www.w3.org/1999/xhtml); 10 | 11 | 12 | form { margin-bottom: 1em; } 13 | 14 | 15 | table { 16 | font-weight: initial; 17 | font-style: initial; 18 | font-variant: initial; 19 | font-size: initial; 20 | line-height: initial; 21 | white-space: initial; 22 | /* text-align: initial; -- see FIXME below */ 23 | } 24 | 25 | /* 26 | * FIXME(pcwalton): Actually saying `text-align: initial` above breaks `` inside `
` 27 | * in quirks mode. This is because we (following Gecko, WebKit, and Blink) implement the HTML5 28 | * align-descendants rules with a special `text-align: -servo-center`. `text-align: initial`, if 29 | * placed on the `
` element per the spec, would break this behavior. So we place it on 30 | * `` instead. 31 | */ 32 | tbody { 33 | text-align: initial; 34 | } 35 | 36 | 37 | /* FIXME: https://html.spec.whatwg.org/multipage/#margin-collapsing-quirks */ 38 | 39 | 40 | input:not([type=image]), textarea { box-sizing: border-box; } 41 | 42 | 43 | img[align=left i] { margin-right: 3px; } 44 | img[align=right i] { margin-left: 3px; } 45 | -------------------------------------------------------------------------------- /resources/quotes.css: -------------------------------------------------------------------------------- 1 | /* 2 | 3 | https://html.spec.whatwg.org/multipage/#quotes 4 | 5 | > This block is automatically generated from the Unicode Common Locale Data Repository. 6 | > http://cldr.unicode.org/ 7 | > 8 | > User agents are expected to use either the block [from the spec] 9 | > (which will be regularly updated) 10 | > or to automatically generate their own copy directly from the source material. 11 | > The language codes are derived from the CLDR file names. 12 | > The quotes are derived from the delimiter blocks, 13 | > with fallback handled as specified in the CLDR documentation. 14 | 15 | */ 16 | 17 | @namespace url(http://www.w3.org/1999/xhtml); 18 | 19 | 20 | :root { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 21 | :root:lang(af), :not(:lang(af)) > :lang(af) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 22 | :root:lang(agq), :not(:lang(agq)) > :lang(agq) { quotes: '\201e' '\201d' '\201a' '\2019' } /* „ ” ‚ ’ */ 23 | :root:lang(ak), :not(:lang(ak)) > :lang(ak) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 24 | :root:lang(am), :not(:lang(am)) > :lang(am) { quotes: '\00ab' '\00bb' '\2039' '\203a' } /* « » ‹ › */ 25 | :root:lang(ar), :not(:lang(ar)) > :lang(ar) { quotes: '\201d' '\201c' '\2019' '\2018' } /* ” “ ’ ‘ */ 26 | :root:lang(asa), :not(:lang(asa)) > :lang(asa) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 27 | :root:lang(ast), :not(:lang(ast)) > :lang(ast) { quotes: '\00ab' '\00bb' '\201c' '\201d' } /* « » “ ” */ 28 | :root:lang(az), :not(:lang(az)) > :lang(az) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 29 | :root:lang(az-Cyrl), :not(:lang(az-Cyrl)) > :lang(az-Cyrl) { quotes: '\00ab' '\00bb' '\2039' '\203a' } /* « » ‹ › */ 30 | :root:lang(bas), :not(:lang(bas)) > :lang(bas) { quotes: '\00ab' '\00bb' '\201e' '\201c' } /* « » „ “ */ 31 | :root:lang(bem), :not(:lang(bem)) > :lang(bem) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 32 | :root:lang(bez), :not(:lang(bez)) > :lang(bez) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 33 | :root:lang(bg), :not(:lang(bg)) > :lang(bg) { quotes: '\201e' '\201c' '\201e' '\201c' } /* „ “ „ “ */ 34 | :root:lang(bm), :not(:lang(bm)) > :lang(bm) { quotes: '\00ab' '\00bb' '\201c' '\201d' } /* « » “ ” */ 35 | :root:lang(bn), :not(:lang(bn)) > :lang(bn) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 36 | :root:lang(br), :not(:lang(br)) > :lang(br) { quotes: '\00ab' '\00bb' '\2039' '\203a' } /* « » ‹ › */ 37 | :root:lang(brx), :not(:lang(brx)) > :lang(brx) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 38 | :root:lang(bs), :not(:lang(bs)) > :lang(bs) { quotes: '\201e' '\201c' '\2018' '\2019' } /* „ “ ‘ ’ */ 39 | :root:lang(bs-Cyrl), :not(:lang(bs-Cyrl)) > :lang(bs-Cyrl) { quotes: '\201e' '\201c' '\201a' '\2018' } /* „ “ ‚ ‘ */ 40 | :root:lang(ca), :not(:lang(ca)) > :lang(ca) { quotes: '\00ab' '\00bb' '\201c' '\201d' } /* « » “ ” */ 41 | :root:lang(cgg), :not(:lang(cgg)) > :lang(cgg) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 42 | :root:lang(chr), :not(:lang(chr)) > :lang(chr) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 43 | :root:lang(cs), :not(:lang(cs)) > :lang(cs) { quotes: '\201e' '\201c' '\201a' '\2018' } /* „ “ ‚ ‘ */ 44 | :root:lang(cy), :not(:lang(cy)) > :lang(cy) { quotes: '\2018' '\2019' '\201c' '\201d' } /* ‘ ’ “ ” */ 45 | :root:lang(da), :not(:lang(da)) > :lang(da) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 46 | :root:lang(dav), :not(:lang(dav)) > :lang(dav) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 47 | :root:lang(de), :not(:lang(de)) > :lang(de) { quotes: '\201e' '\201c' '\201a' '\2018' } /* „ “ ‚ ‘ */ 48 | :root:lang(de-CH), :not(:lang(de-CH)) > :lang(de-CH) { quotes: '\00ab' '\00bb' '\2039' '\203a' } /* « » ‹ › */ 49 | :root:lang(dje), :not(:lang(dje)) > :lang(dje) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 50 | :root:lang(dsb), :not(:lang(dsb)) > :lang(dsb) { quotes: '\201e' '\201c' '\201a' '\2018' } /* „ “ ‚ ‘ */ 51 | :root:lang(dua), :not(:lang(dua)) > :lang(dua) { quotes: '\00ab' '\00bb' '\2018' '\2019' } /* « » ‘ ’ */ 52 | :root:lang(dyo), :not(:lang(dyo)) > :lang(dyo) { quotes: '\00ab' '\00bb' '\201c' '\201d' } /* « » “ ” */ 53 | :root:lang(dz), :not(:lang(dz)) > :lang(dz) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 54 | :root:lang(ebu), :not(:lang(ebu)) > :lang(ebu) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 55 | :root:lang(ee), :not(:lang(ee)) > :lang(ee) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 56 | :root:lang(el), :not(:lang(el)) > :lang(el) { quotes: '\00ab' '\00bb' '\0022' '\0022' } /* « » " " */ 57 | :root:lang(en), :not(:lang(en)) > :lang(en) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 58 | :root:lang(es), :not(:lang(es)) > :lang(es) { quotes: '\00ab' '\00bb' '\201c' '\201d' } /* « » “ ” */ 59 | :root:lang(et), :not(:lang(et)) > :lang(et) { quotes: '\201e' '\201c' '\201a' '\2018' } /* „ “ ‚ ‘ */ 60 | :root:lang(eu), :not(:lang(eu)) > :lang(eu) { quotes: '\0022' '\0022' '\0022' '\0022' } /* " " " " */ 61 | :root:lang(ewo), :not(:lang(ewo)) > :lang(ewo) { quotes: '\00ab' '\00bb' '\201c' '\201d' } /* « » “ ” */ 62 | :root:lang(fa), :not(:lang(fa)) > :lang(fa) { quotes: '\00ab' '\00bb' '\2039' '\203a' } /* « » ‹ › */ 63 | :root:lang(ff), :not(:lang(ff)) > :lang(ff) { quotes: '\201e' '\201d' '\201a' '\2019' } /* „ ” ‚ ’ */ 64 | :root:lang(fi), :not(:lang(fi)) > :lang(fi) { quotes: '\201d' '\201d' '\2019' '\2019' } /* ” ” ’ ’ */ 65 | :root:lang(fil), :not(:lang(fil)) > :lang(fil) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 66 | :root:lang(fr), :not(:lang(fr)) > :lang(fr) { quotes: '\00ab' '\00bb' '\00ab' '\00bb' } /* « » « » */ 67 | :root:lang(fr-CA), :not(:lang(fr-CA)) > :lang(fr-CA) { quotes: '\00ab' '\00bb' '\2039' '\203a' } /* « » ‹ › */ 68 | :root:lang(fr-CH), :not(:lang(fr-CH)) > :lang(fr-CH) { quotes: '\00ab' '\00bb' '\2039' '\203a' } /* « » ‹ › */ 69 | :root:lang(ga), :not(:lang(ga)) > :lang(ga) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 70 | :root:lang(gd), :not(:lang(gd)) > :lang(gd) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 71 | :root:lang(gl), :not(:lang(gl)) > :lang(gl) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 72 | :root:lang(gsw), :not(:lang(gsw)) > :lang(gsw) { quotes: '\00ab' '\00bb' '\2039' '\203a' } /* « » ‹ › */ 73 | :root:lang(gu), :not(:lang(gu)) > :lang(gu) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 74 | :root:lang(guz), :not(:lang(guz)) > :lang(guz) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 75 | :root:lang(ha), :not(:lang(ha)) > :lang(ha) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 76 | :root:lang(he), :not(:lang(he)) > :lang(he) { quotes: '\05f4' '\05f4' '\05f3' '\05f3' } /* ״ ״ ׳ ׳ */ 77 | :root:lang(hi), :not(:lang(hi)) > :lang(hi) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 78 | :root:lang(hr), :not(:lang(hr)) > :lang(hr) { quotes: '\201e' '\201c' '\201a' '\2018' } /* „ “ ‚ ‘ */ 79 | :root:lang(hsb), :not(:lang(hsb)) > :lang(hsb) { quotes: '\201e' '\201c' '\201a' '\2018' } /* „ “ ‚ ‘ */ 80 | :root:lang(hu), :not(:lang(hu)) > :lang(hu) { quotes: '\201e' '\201d' '\00bb' '\00ab' } /* „ ” » « */ 81 | :root:lang(hy), :not(:lang(hy)) > :lang(hy) { quotes: '\00ab' '\00bb' '\00ab' '\00bb' } /* « » « » */ 82 | :root:lang(id), :not(:lang(id)) > :lang(id) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 83 | :root:lang(ig), :not(:lang(ig)) > :lang(ig) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 84 | :root:lang(is), :not(:lang(is)) > :lang(is) { quotes: '\201e' '\201c' '\201a' '\2018' } /* „ “ ‚ ‘ */ 85 | :root:lang(it), :not(:lang(it)) > :lang(it) { quotes: '\00ab' '\00bb' '\201c' '\201d' } /* « » “ ” */ 86 | :root:lang(ja), :not(:lang(ja)) > :lang(ja) { quotes: '\300c' '\300d' '\300e' '\300f' } /* 「 」 『 』 */ 87 | :root:lang(jgo), :not(:lang(jgo)) > :lang(jgo) { quotes: '\00ab' '\00bb' '\2039' '\203a' } /* « » ‹ › */ 88 | :root:lang(jmc), :not(:lang(jmc)) > :lang(jmc) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 89 | :root:lang(ka), :not(:lang(ka)) > :lang(ka) { quotes: '\201e' '\201c' '\00ab' '\00bb' } /* „ “ « » */ 90 | :root:lang(kab), :not(:lang(kab)) > :lang(kab) { quotes: '\00ab' '\00bb' '\201c' '\201d' } /* « » “ ” */ 91 | :root:lang(kam), :not(:lang(kam)) > :lang(kam) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 92 | :root:lang(kde), :not(:lang(kde)) > :lang(kde) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 93 | :root:lang(kea), :not(:lang(kea)) > :lang(kea) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 94 | :root:lang(khq), :not(:lang(khq)) > :lang(khq) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 95 | :root:lang(ki), :not(:lang(ki)) > :lang(ki) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 96 | :root:lang(kk), :not(:lang(kk)) > :lang(kk) { quotes: '\201c' '\0022' '\2018' '\2019' } /* “ " ‘ ’ */ 97 | :root:lang(kkj), :not(:lang(kkj)) > :lang(kkj) { quotes: '\00ab' '\00bb' '\2039' '\203a' } /* « » ‹ › */ 98 | :root:lang(kln), :not(:lang(kln)) > :lang(kln) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 99 | :root:lang(km), :not(:lang(km)) > :lang(km) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 100 | :root:lang(kn), :not(:lang(kn)) > :lang(kn) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 101 | :root:lang(ko), :not(:lang(ko)) > :lang(ko) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 102 | :root:lang(ksb), :not(:lang(ksb)) > :lang(ksb) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 103 | :root:lang(ksf), :not(:lang(ksf)) > :lang(ksf) { quotes: '\00ab' '\00bb' '\2018' '\2019' } /* « » ‘ ’ */ 104 | :root:lang(ky), :not(:lang(ky)) > :lang(ky) { quotes: '\00ab' '\00bb' '\201e' '\201c' } /* « » „ “ */ 105 | :root:lang(lag), :not(:lang(lag)) > :lang(lag) { quotes: '\201d' '\201d' '\2019' '\2019' } /* ” ” ’ ’ */ 106 | :root:lang(lb), :not(:lang(lb)) > :lang(lb) { quotes: '\201e' '\201c' '\201a' '\2018' } /* „ “ ‚ ‘ */ 107 | :root:lang(lg), :not(:lang(lg)) > :lang(lg) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 108 | :root:lang(ln), :not(:lang(ln)) > :lang(ln) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 109 | :root:lang(lo), :not(:lang(lo)) > :lang(lo) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 110 | :root:lang(lt), :not(:lang(lt)) > :lang(lt) { quotes: '\201e' '\201c' '\201e' '\201c' } /* „ “ „ “ */ 111 | :root:lang(lu), :not(:lang(lu)) > :lang(lu) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 112 | :root:lang(luo), :not(:lang(luo)) > :lang(luo) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 113 | :root:lang(luy), :not(:lang(luy)) > :lang(luy) { quotes: '\201e' '\201c' '\201a' '\2018' } /* „ “ ‚ ‘ */ 114 | :root:lang(lv), :not(:lang(lv)) > :lang(lv) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 115 | :root:lang(mas), :not(:lang(mas)) > :lang(mas) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 116 | :root:lang(mer), :not(:lang(mer)) > :lang(mer) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 117 | :root:lang(mfe), :not(:lang(mfe)) > :lang(mfe) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 118 | :root:lang(mg), :not(:lang(mg)) > :lang(mg) { quotes: '\00ab' '\00bb' '\201c' '\201d' } /* « » “ ” */ 119 | :root:lang(mgo), :not(:lang(mgo)) > :lang(mgo) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 120 | :root:lang(mk), :not(:lang(mk)) > :lang(mk) { quotes: '\201e' '\201c' '\201a' '\2018' } /* „ “ ‚ ‘ */ 121 | :root:lang(ml), :not(:lang(ml)) > :lang(ml) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 122 | :root:lang(mn), :not(:lang(mn)) > :lang(mn) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 123 | :root:lang(mr), :not(:lang(mr)) > :lang(mr) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 124 | :root:lang(ms), :not(:lang(ms)) > :lang(ms) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 125 | :root:lang(mt), :not(:lang(mt)) > :lang(mt) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 126 | :root:lang(mua), :not(:lang(mua)) > :lang(mua) { quotes: '\00ab' '\00bb' '\201c' '\201d' } /* « » “ ” */ 127 | :root:lang(my), :not(:lang(my)) > :lang(my) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 128 | :root:lang(naq), :not(:lang(naq)) > :lang(naq) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 129 | :root:lang(nb), :not(:lang(nb)) > :lang(nb) { quotes: '\00ab' '\00bb' '\2018' '\2019' } /* « » ‘ ’ */ 130 | :root:lang(nd), :not(:lang(nd)) > :lang(nd) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 131 | :root:lang(ne), :not(:lang(ne)) > :lang(ne) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 132 | :root:lang(nl), :not(:lang(nl)) > :lang(nl) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 133 | :root:lang(nmg), :not(:lang(nmg)) > :lang(nmg) { quotes: '\201e' '\201d' '\00ab' '\00bb' } /* „ ” « » */ 134 | :root:lang(nn), :not(:lang(nn)) > :lang(nn) { quotes: '\00ab' '\00bb' '\2018' '\2019' } /* « » ‘ ’ */ 135 | :root:lang(nnh), :not(:lang(nnh)) > :lang(nnh) { quotes: '\00ab' '\00bb' '\201c' '\201d' } /* « » “ ” */ 136 | :root:lang(nus), :not(:lang(nus)) > :lang(nus) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 137 | :root:lang(nyn), :not(:lang(nyn)) > :lang(nyn) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 138 | :root:lang(pa), :not(:lang(pa)) > :lang(pa) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 139 | :root:lang(pl), :not(:lang(pl)) > :lang(pl) { quotes: '\201e' '\201d' '\00ab' '\00bb' } /* „ ” « » */ 140 | :root:lang(pt), :not(:lang(pt)) > :lang(pt) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 141 | :root:lang(pt-PT), :not(:lang(pt-PT)) > :lang(pt-PT) { quotes: '\00ab' '\00bb' '\201c' '\201d' } /* « » “ ” */ 142 | :root:lang(rn), :not(:lang(rn)) > :lang(rn) { quotes: '\201d' '\201d' '\2019' '\2019' } /* ” ” ’ ’ */ 143 | :root:lang(ro), :not(:lang(ro)) > :lang(ro) { quotes: '\201c' '\201d' '\00ab' '\00bb' } /* “ ” « » */ 144 | :root:lang(rof), :not(:lang(rof)) > :lang(rof) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 145 | :root:lang(ru), :not(:lang(ru)) > :lang(ru) { quotes: '\00ab' '\00bb' '\201e' '\201c' } /* « » „ “ */ 146 | :root:lang(rw), :not(:lang(rw)) > :lang(rw) { quotes: '\00ab' '\00bb' '\2018' '\2019' } /* « » ‘ ’ */ 147 | :root:lang(rwk), :not(:lang(rwk)) > :lang(rwk) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 148 | :root:lang(saq), :not(:lang(saq)) > :lang(saq) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 149 | :root:lang(sbp), :not(:lang(sbp)) > :lang(sbp) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 150 | :root:lang(seh), :not(:lang(seh)) > :lang(seh) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 151 | :root:lang(ses), :not(:lang(ses)) > :lang(ses) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 152 | :root:lang(sg), :not(:lang(sg)) > :lang(sg) { quotes: '\00ab' '\00bb' '\201c' '\201d' } /* « » “ ” */ 153 | :root:lang(shi), :not(:lang(shi)) > :lang(shi) { quotes: '\00ab' '\00bb' '\201e' '\201d' } /* « » „ ” */ 154 | :root:lang(shi-Latn), :not(:lang(shi-Latn)) > :lang(shi-Latn) { quotes: '\00ab' '\00bb' '\201e' '\201d' } /* « » „ ” */ 155 | :root:lang(si), :not(:lang(si)) > :lang(si) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 156 | :root:lang(sk), :not(:lang(sk)) > :lang(sk) { quotes: '\201e' '\201c' '\201a' '\2018' } /* „ “ ‚ ‘ */ 157 | :root:lang(sl), :not(:lang(sl)) > :lang(sl) { quotes: '\201e' '\201c' '\201a' '\2018' } /* „ “ ‚ ‘ */ 158 | :root:lang(sn), :not(:lang(sn)) > :lang(sn) { quotes: '\201d' '\201d' '\2019' '\2019' } /* ” ” ’ ’ */ 159 | :root:lang(so), :not(:lang(so)) > :lang(so) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 160 | :root:lang(sq), :not(:lang(sq)) > :lang(sq) { quotes: '\00ab' '\00bb' '\201c' '\201d' } /* « » “ ” */ 161 | :root:lang(sr), :not(:lang(sr)) > :lang(sr) { quotes: '\201e' '\201c' '\2018' '\2018' } /* „ “ ‘ ‘ */ 162 | :root:lang(sr-Latn), :not(:lang(sr-Latn)) > :lang(sr-Latn) { quotes: '\201e' '\201c' '\2018' '\2018' } /* „ “ ‘ ‘ */ 163 | :root:lang(sv), :not(:lang(sv)) > :lang(sv) { quotes: '\201d' '\201d' '\2019' '\2019' } /* ” ” ’ ’ */ 164 | :root:lang(sw), :not(:lang(sw)) > :lang(sw) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 165 | :root:lang(swc), :not(:lang(swc)) > :lang(swc) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 166 | :root:lang(ta), :not(:lang(ta)) > :lang(ta) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 167 | :root:lang(te), :not(:lang(te)) > :lang(te) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 168 | :root:lang(teo), :not(:lang(teo)) > :lang(teo) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 169 | :root:lang(th), :not(:lang(th)) > :lang(th) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 170 | :root:lang(ti-ER), :not(:lang(ti-ER)) > :lang(ti-ER) { quotes: '\2018' '\2019' '\201c' '\201d' } /* ‘ ’ “ ” */ 171 | :root:lang(to), :not(:lang(to)) > :lang(to) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 172 | :root:lang(tr), :not(:lang(tr)) > :lang(tr) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 173 | :root:lang(twq), :not(:lang(twq)) > :lang(twq) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 174 | :root:lang(tzm), :not(:lang(tzm)) > :lang(tzm) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 175 | :root:lang(uk), :not(:lang(uk)) > :lang(uk) { quotes: '\00ab' '\00bb' '\201e' '\201c' } /* « » „ “ */ 176 | :root:lang(ur), :not(:lang(ur)) > :lang(ur) { quotes: '\201d' '\201c' '\2019' '\2018' } /* ” “ ’ ‘ */ 177 | :root:lang(ur-IN), :not(:lang(ur-IN)) > :lang(ur-IN) { quotes: '\0022' '\0022' '\0027' '\0027' } /* " " ' ' */ 178 | :root:lang(uz), :not(:lang(uz)) > :lang(uz) { quotes: '\0022' '\0022' '\0027' '\0027' } /* " " ' ' */ 179 | :root:lang(uz-Cyrl), :not(:lang(uz-Cyrl)) > :lang(uz-Cyrl) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 180 | :root:lang(vai), :not(:lang(vai)) > :lang(vai) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 181 | :root:lang(vai-Latn), :not(:lang(vai-Latn)) > :lang(vai-Latn) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 182 | :root:lang(vi), :not(:lang(vi)) > :lang(vi) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 183 | :root:lang(vun), :not(:lang(vun)) > :lang(vun) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 184 | :root:lang(xog), :not(:lang(xog)) > :lang(xog) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 185 | :root:lang(yav), :not(:lang(yav)) > :lang(yav) { quotes: '\00ab' '\00bb' '\00ab' '\00bb' } /* « » « » */ 186 | :root:lang(yo), :not(:lang(yo)) > :lang(yo) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 187 | :root:lang(zgh), :not(:lang(zgh)) > :lang(zgh) { quotes: '\00ab' '\00bb' '\201e' '\201d' } /* « » „ ” */ 188 | :root:lang(zh), :not(:lang(zh)) > :lang(zh) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 189 | :root:lang(zh-Hant), :not(:lang(zh-Hant)) > :lang(zh-Hant) { quotes: '\300c' '\300d' '\300e' '\300f' } /* 「 」 『 』 */ 190 | :root:lang(zu), :not(:lang(zu)) > :lang(zu) { quotes: '\201c' '\201d' '\2018' '\2019' } /* “ ” ‘ ’ */ 191 | -------------------------------------------------------------------------------- /resources/rippy.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/meh/miserve/18bf3ca945cffa8b6f97f088f04c918e741f7dd9/resources/rippy.jpg -------------------------------------------------------------------------------- /resources/servo.css: -------------------------------------------------------------------------------- 1 | input, textarea, select { display: inline-block; } 2 | input { background: white; min-height: 1.0em; padding: 0em; padding-left: 0.25em; padding-right: 0.25em; border: solid lightgrey 1px; color: black; white-space: nowrap; } 3 | textarea { background: white; min-height: 1.0em; padding: 0em; padding-left: 0.25em; padding-right: 0.25em; border: solid lightgrey 1px; color: black; white-space: pre; } 4 | button, 5 | input[type="button"], 6 | input[type="submit"], 7 | input[type="reset"] { background: lightgrey; border-top: solid 1px #EEEEEE; border-left: solid 1px #CCCCCC; border-right: solid 1px #999999; border-bottom: solid 1px #999999; text-align: center; vertical-align: middle; color: black; } 8 | input[type="hidden"] { display: none !important } 9 | input[type="checkbox"], 10 | input[type="radio"] { font-family: monospace !important; border: none !important; background: transparent; } 11 | 12 | input[type="checkbox"]::before { display: inline-block; border: solid currentcolor 1px; content: ""; padding: 0; width: 1em; height: 1em; text-align: center; } 13 | input[type="checkbox"]:checked::before { content: "✓"; } 14 | input[type="checkbox"]:indeterminate::before { content: "-"; } 15 | input[type="radio"]::before { display: inline-block; border: solid currentcolor 1px; content: ""; padding: 0; width: 1em; height: 1em; border-radius: 50%; text-align: center; } 16 | input[type="radio"]:checked::before { content: "●"; line-height: 1em; } 17 | 18 | select { border-style: solid; border-width: 1px; padding: 0.25em 0.5em; border-radius: 6px; background: white; } 19 | select::after { content: ""; display: inline-block; border-width: 5.2px 3px 0 3px; border-style: solid; border-color: currentcolor transparent transparent transparent; margin-left: 0.5em; } 20 | option { display: none !important } 21 | option[selected] { display: inline !important } 22 | 23 | td[align="left"] { text-align: left; } 24 | td[align="center"] { text-align: center; } 25 | td[align="right"] { text-align: right; } 26 | 27 | center, div[align=center i], div[align=middle i] { text-align: -servo-center; } 28 | 29 | -------------------------------------------------------------------------------- /resources/user-agent-js/00.example.js: -------------------------------------------------------------------------------- 1 | // Keep files in this directory which you would like executed before 2 | // any other script when servo is run with `--userscripts` 3 | // Files are sorted alphabetically. When committing polyfills 4 | // order them with numbers, e.g. `01.innerhtml.js` will be executed before 5 | // `05.jquery.js` 6 | -------------------------------------------------------------------------------- /resources/user-agent.css: -------------------------------------------------------------------------------- 1 | /* 2 | https://html.spec.whatwg.org/multipage/#form-controls 3 | */ 4 | 5 | @namespace url(http://www.w3.org/1999/xhtml); 6 | 7 | /* 8 | FIXME: Uncomment this when :lang() is supported, or do something equivalent. 9 | @import url(quotes.css); 10 | */ 11 | 12 | [hidden], area, base, basefont, datalist, head, link, menu[type=popup i], meta, 13 | noembed, noframes, param, rp, script, source, style, template, track, title { 14 | display: none; 15 | } 16 | 17 | embed[hidden] { display: inline; height: 0; width: 0; } 18 | 19 | /* FIXME: only if scripting is enabled */ 20 | noscript { display: none !important; } 21 | 22 | input[type=hidden i] { display: none !important; } 23 | 24 | 25 | html, body { display: block; } 26 | 27 | body { margin: 8px; } 28 | 29 | 30 | address, blockquote, center, div, figure, figcaption, footer, form, header, hr, 31 | legend, listing, main, p, plaintext, pre, summary, xmp { 32 | display: block; 33 | } 34 | 35 | blockquote, figure, listing, p, plaintext, pre, xmp { 36 | margin-top: 1em; margin-bottom: 1em; 37 | } 38 | 39 | blockquote, figure { margin-left: 40px; margin-right: 40px; } 40 | 41 | address { font-style: italic; } 42 | listing, plaintext, pre, xmp { 43 | font-family: monospace; white-space: pre; 44 | } 45 | 46 | dialog:not([open]) { display: none; } 47 | dialog { 48 | position: absolute; 49 | left: 0; right: 0; 50 | /* FIXME: support fit-content */ 51 | width: fit-content; 52 | height: fit-content; 53 | margin: auto; 54 | border: solid; 55 | padding: 1em; 56 | background: white; 57 | color: black; 58 | } 59 | /* FIXME: support ::backdrop */ 60 | dialog::backdrop { 61 | position: fixed; 62 | top: 0; right: 0; bottom: 0; left: 0; 63 | background: rgba(0,0,0,0.1); 64 | } 65 | 66 | /* for small devices, modal dialogs go full-screen */ 67 | @media screen and (max-width: 540px) { 68 | /* FIXME: support :modal */ 69 | dialog:modal { 70 | top: 0; 71 | width: auto; 72 | margin: 1em; 73 | } 74 | } 75 | 76 | 77 | cite, dfn, em, i, var { font-style: italic; } 78 | b, strong { font-weight: bolder; } 79 | code, kbd, samp, tt { font-family: monospace; } 80 | big { font-size: larger; } 81 | small { font-size: smaller; } 82 | 83 | sub { vertical-align: sub; } 84 | sup { vertical-align: super; } 85 | sub, sup { line-height: normal; font-size: smaller; } 86 | 87 | ruby { display: ruby; } 88 | rt { display: ruby-text; } 89 | 90 | :link { color: #0000EE; } 91 | :visited { color: #551A8B; } 92 | :link, :visited { text-decoration: underline; cursor: pointer; } 93 | a:link[rel~=help], a:visited[rel~=help], 94 | area:link[rel~=help], area:visited[rel~=help] { cursor: help; } 95 | 96 | :focus { outline: thin dotted; } /* FIXME: 'outline: auto' ? */ 97 | 98 | mark { background: yellow; color: black; } 99 | 100 | abbr[title], acronym[title] { text-decoration: dotted underline; } 101 | ins, u { text-decoration: underline; } 102 | del, s, strike { text-decoration: line-through; } 103 | blink { text-decoration: blink; } 104 | 105 | q::before { content: open-quote; } 106 | q::after { content: close-quote; } 107 | 108 | /*br { display-outside: newline; } /* this also has bidi implications */ 109 | br::before { content: "\A"; white-space: pre } 110 | 111 | nobr { white-space: nowrap; } 112 | wbr { display-outside: break-opportunity; } /* this also has bidi implications */ 113 | nobr wbr { white-space: normal; } 114 | 115 | 116 | [dir]:dir(ltr), bdi:dir(ltr), input[type=tel]:dir(ltr) { direction: ltr; } 117 | [dir]:dir(rtl), bdi:dir(rtl) { direction: rtl; } 118 | 119 | address, blockquote, center, div, figure, figcaption, footer, form, header, hr, 120 | legend, listing, main, p, plaintext, pre, summary, xmp, article, aside, h1, h2, 121 | h3, h4, h5, h6, hgroup, nav, section, table, caption, colgroup, col, thead, 122 | tbody, tfoot, tr, td, th, dir, dd, dl, dt, menu, ol, ul, li, bdi, output, 123 | [dir=ltr i], [dir=rtl i], [dir=auto i] { 124 | unicode-bidi: isolate; 125 | } 126 | 127 | bdo, bdo[dir] { unicode-bidi: isolate-override; } 128 | 129 | textarea[dir=auto i], pre[dir=auto i] { unicode-bidi: plaintext; } 130 | 131 | 132 | article, aside, h1, h2, h3, h4, h5, h6, hgroup, nav, section { 133 | display: block; 134 | } 135 | 136 | h1 { margin-top: 0.67em; margin-bottom: 0.67em; font-size: 2.00em; font-weight: bold; } 137 | h2 { margin-top: 0.83em; margin-bottom: 0.83em; font-size: 1.50em; font-weight: bold; } 138 | h3 { margin-top: 1.00em; margin-bottom: 1.00em; font-size: 1.17em; font-weight: bold; } 139 | h4 { margin-top: 1.33em; margin-bottom: 1.33em; font-size: 1.00em; font-weight: bold; } 140 | h5 { margin-top: 1.67em; margin-bottom: 1.67em; font-size: 0.83em; font-weight: bold; } 141 | h6 { margin-top: 2.33em; margin-bottom: 2.33em; font-size: 0.67em; font-weight: bold; } 142 | 143 | :matches(article, aside, nav, section) h1 { margin-top: 0.83em; margin-bottom: 0.83em; font-size: 1.50em; } 144 | :matches(article, aside, nav, section) :matches(article, aside, nav, section) h1 { margin-top: 1.00em; margin-bottom: 1.00em; font-size: 1.17em; } 145 | :matches(article, aside, nav, section) :matches(article, aside, nav, section) :matches(article, aside, nav, section) h1 { margin-top: 1.33em; margin-bottom: 1.33em; font-size: 1.00em; } 146 | :matches(article, aside, nav, section) :matches(article, aside, nav, section) :matches(article, aside, nav, section) :matches(article, aside, nav, section) h1 { margin-top: 1.67em; margin-bottom: 1.67em; font-size: 0.83em; } 147 | :matches(article, aside, nav, section) :matches(article, aside, nav, section) :matches(article, aside, nav, section) :matches(article, aside, nav, section) :matches(article, aside, nav, section) h1 { margin-top: 2.33em; margin-bottom: 2.33em; font-size: 0.67em; } 148 | 149 | :matches(article, aside, nav, section) hgroup > h1 ~ h2 { margin-top: 1.00em; margin-bottom: 1.00em; font-size: 1.17em; } 150 | :matches(article, aside, nav, section) :matches(article, aside, nav, section) hgroup > h1 ~ h2 { margin-top: 1.33em; margin-bottom: 1.33em; font-size: 1.00em; } 151 | :matches(article, aside, nav, section) :matches(article, aside, nav, section) :matches(article, aside, nav, section) hgroup > h1 ~ h2 { margin-top: 1.67em; margin-bottom: 1.67em; font-size: 0.83em; } 152 | :matches(article, aside, nav, section) :matches(article, aside, nav, section) :matches(article, aside, nav, section) :matches(article, aside, nav, section) hgroup > h1 ~ h2 { margin-top: 2.33em; margin-bottom: 2.33em; font-size: 0.67em; } 153 | 154 | :matches(article, aside, nav, section) hgroup > h1 ~ h3 { margin-top: 1.33em; margin-bottom: 1.33em; font-size: 1.00em; } 155 | :matches(article, aside, nav, section) :matches(article, aside, nav, section) hgroup > h1 ~ h3 { margin-top: 1.67em; margin-bottom: 1.67em; font-size: 0.83em; } 156 | :matches(article, aside, nav, section) :matches(article, aside, nav, section) :matches(article, aside, nav, section) hgroup > h1 ~ h3 { margin-top: 2.33em; margin-bottom: 2.33em; font-size: 0.67em; } 157 | 158 | :matches(article, aside, nav, section) hgroup > h1 ~ h4 { margin-top: 1.67em; margin-bottom: 1.67em; font-size: 0.83em; } 159 | :matches(article, aside, nav, section) :matches(article, aside, nav, section) hgroup > h1 ~ h4 { margin-top: 2.33em; margin-bottom: 2.33em; font-size: 0.67em; } 160 | 161 | :matches(article, aside, nav, section) hgroup > h1 ~ h5 { margin-top: 2.33em; margin-bottom: 2.33em; font-size: 0.67em; } 162 | 163 | 164 | dir, dd, dl, dt, menu, ol, ul { display: block; } 165 | li { display: list-item; } 166 | 167 | dir, dl, menu, ol, ul { margin-top: 1em; margin-bottom: 1em; } 168 | 169 | :matches(dir, dl, menu, ol, ul) :matches(dir, dl, menu, ol, ul) { 170 | margin-top: 0; margin-bottom: 0; 171 | } 172 | 173 | dd { margin-left: 40px; } /* FIXME: use margin-inline-start when supported */ 174 | dir, menu, ol, ul { padding-left: 40px; } /* FIXME: use padding-inline-start when supported */ 175 | 176 | ol { list-style-type: decimal; } 177 | 178 | dir, menu, ul { list-style-type: disc; } 179 | 180 | :matches(dir, menu, ol, ul) :matches(dir, menu, ul) { 181 | list-style-type: circle; 182 | } 183 | 184 | :matches(dir, menu, ol, ul) :matches(dir, menu, ol, ul) :matches(dir, menu, ul) { 185 | list-style-type: square; 186 | } 187 | 188 | 189 | table { display: table; } 190 | caption { display: table-caption; } 191 | colgroup, colgroup[hidden] { display: table-column-group; } 192 | col, col[hidden] { display: table-column; } 193 | thead, thead[hidden] { display: table-header-group; } 194 | tbody, tbody[hidden] { display: table-row-group; } 195 | tfoot, tfoot[hidden] { display: table-footer-group; } 196 | tr, tr[hidden] { display: table-row; } 197 | td, th, td[hidden], th[hidden] { display: table-cell; } 198 | 199 | colgroup[hidden], col[hidden], thead[hidden], tbody[hidden], 200 | tfoot[hidden], tr[hidden], td[hidden], th[hidden] { 201 | visibility: collapse; 202 | } 203 | 204 | table { 205 | box-sizing: border-box; 206 | border-spacing: 2px; 207 | border-collapse: separate; 208 | text-indent: initial; 209 | } 210 | td, th { padding: 1px; } 211 | th { font-weight: bold; } 212 | 213 | thead, tbody, tfoot, table > tr { vertical-align: middle; } 214 | tr, td, th { vertical-align: inherit; } 215 | 216 | 217 | table, td, th { border-color: gray; } 218 | thead, tbody, tfoot, tr { border-color: inherit; } 219 | table:matches( 220 | [rules=none i], [rules=groups i], [rules=rows i], 221 | [rules=cols i], [rules=all i], 222 | [frame=void i], [frame=above i], [frame=below i], 223 | [frame=hsides i], [frame=lhs i], [frame=rhs i], 224 | [frame=vsides i], [frame=box i], [frame=border i] 225 | ), 226 | table:matches( 227 | [rules=none i], [rules=groups i], [rules=rows i], 228 | [rules=cols i], [rules=all i] 229 | ) > tr > :matches(td, th), 230 | table:matches( 231 | [rules=none i], [rules=groups i], [rules=rows i], 232 | [rules=cols i], [rules=all i] 233 | ) > :matches(thead, tbody, tfoot) > tr > :matches(td, th) { 234 | border-color: black; 235 | } 236 | 237 | 238 | :matches(table, thead, tbody, tfoot, tr) > form { 239 | display: none !important; 240 | } 241 | 242 | 243 | input, select, option, optgroup, button, textarea, keygen { 244 | text-indent: initial; 245 | } 246 | 247 | textarea { white-space: pre-wrap; } 248 | 249 | input[type="radio"], input[type="checkbox"], input[type="reset"], input[type="button"], 250 | input[type="submit"], select, button { 251 | box-sizing: border-box; 252 | } 253 | 254 | 255 | hr { color: gray; border-style: inset; border-width: 1px; margin: 0.5em auto; } 256 | 257 | 258 | fieldset { 259 | display: block; /* https://www.w3.org/Bugs/Public/show_bug.cgi?id=27018 */ 260 | margin-left: 2px; margin-right: 2px; 261 | border: groove 2px; 262 | border-color: ThreeDFace; /* FIXME: system color */ 263 | padding: 0.35em 0.625em 0.75em; 264 | min-width: min-content; 265 | } 266 | 267 | legend { 268 | padding-left: 2px; padding-right: 2px; 269 | } 270 | 271 | iframe:not([seamless]) { border: 2px inset; } 272 | iframe[seamless] { display: block; } 273 | video { object-fit: contain; } 274 | 275 | 276 | textarea { white-space: pre-wrap; } 277 | -------------------------------------------------------------------------------- /src/browser/browser.rs: -------------------------------------------------------------------------------- 1 | use std::rc::Rc; 2 | use std::cell::RefCell; 3 | use std::mem; 4 | 5 | use servo::net::image_cache_task::new_image_cache_task; 6 | use servo::net::resource_task::new_resource_task; 7 | use servo::net::storage_task::StorageTaskFactory; 8 | use servo::gfx::font_cache_task::FontCacheTask; 9 | use servo::profile; 10 | 11 | pub use servo::net_traits::ResourceTask as Resource; 12 | pub use servo::net_traits::storage_task::StorageTask as Storage; 13 | pub use servo::net_traits::image_cache_task::ImageCacheTask as ImageCache; 14 | pub use servo::gfx::font_cache_task::FontCacheTask as FontCache; 15 | pub use servo::profile_traits::time::ProfilerChan as TimeProfiler; 16 | pub use servo::profile_traits::mem::ProfilerChan as MemProfiler; 17 | 18 | use servo::util::opts; 19 | 20 | use servo::gl; 21 | use glutin; 22 | 23 | use browser::{buffer, Buffer, Tab, Event}; 24 | 25 | /// This struct is the main entry point of the browser. 26 | /// 27 | /// When rendering it will render the tab bar, the input bar and the curren tab to 28 | /// the given textures, and composite them back onto the screen. 29 | pub struct Browser { 30 | window: Rc, 31 | events: Rc>>, 32 | 33 | profiler: Profiler, 34 | cache: Cache, 35 | resource: Resource, 36 | storage: Storage, 37 | 38 | buffers: Vec>>, 39 | tabs: Vec>>, 40 | current: Option>>, 41 | } 42 | 43 | pub struct Profiler { 44 | time: Option, 45 | mem: Option, 46 | } 47 | 48 | impl Profiler { 49 | pub fn time(&self) -> TimeProfiler { 50 | profile::time::Profiler::create(self.time) 51 | } 52 | 53 | pub fn mem(&self) -> MemProfiler { 54 | profile::mem::Profiler::create(self.mem) 55 | } 56 | } 57 | 58 | pub struct Cache { 59 | image: ImageCache, 60 | font: FontCache, 61 | } 62 | 63 | impl Cache { 64 | pub fn image(&self) -> ImageCache { 65 | self.image.clone() 66 | } 67 | 68 | pub fn font(&self) -> FontCache { 69 | self.font.clone() 70 | } 71 | } 72 | 73 | impl Browser { 74 | pub fn new(window: Rc) -> Browser { 75 | let opts = opts::get(); 76 | let resource = new_resource_task(opts.user_agent.clone(), None); 77 | 78 | gl::load_with(|s| window.get_proc_address(s)); 79 | 80 | Browser { 81 | window: window, 82 | events: Rc::new(RefCell::new(Vec::new())), 83 | 84 | profiler: Profiler { 85 | time: opts.time_profiler_period, 86 | mem: opts.mem_profiler_period, 87 | }, 88 | 89 | cache: Cache { 90 | image: new_image_cache_task(resource.clone()), 91 | font: FontCacheTask::new(resource.clone()), 92 | }, 93 | 94 | resource: resource, 95 | storage: StorageTaskFactory::new(), 96 | 97 | buffers: Vec::new(), 98 | tabs: Vec::new(), 99 | current: None, 100 | } 101 | } 102 | 103 | pub fn show(&mut self) { 104 | if self.tabs.is_empty() { 105 | let tab = Rc::new(RefCell::new(Tab::new(self))); 106 | self.tabs.push(tab.clone()); 107 | self.current = Some(tab); 108 | } 109 | 110 | self.window.show(); 111 | } 112 | 113 | pub fn window(&self) -> Rc { 114 | self.window.clone() 115 | } 116 | 117 | pub fn events(&self) -> Rc>> { 118 | self.events.clone() 119 | } 120 | 121 | pub fn width(&self) -> u32 { 122 | self.window.get_inner_size_pixels().unwrap().0 123 | } 124 | 125 | pub fn height(&self) -> u32 { 126 | self.window.get_inner_size_pixels().unwrap().1 127 | } 128 | 129 | pub fn resource(&self) -> Resource { 130 | self.resource.clone() 131 | } 132 | 133 | pub fn storage(&self) -> Storage { 134 | self.storage.clone() 135 | } 136 | 137 | pub fn profiler(&self) -> &Profiler { 138 | &self.profiler 139 | } 140 | 141 | pub fn cache(&self) -> &Cache { 142 | &self.cache 143 | } 144 | 145 | pub fn handle(&mut self, event: Event) { 146 | let mut events = mem::replace(&mut *self.events.borrow_mut(), Vec::new()); 147 | events.push(event); 148 | 149 | for event in events { 150 | match event { 151 | Event::Idle => { 152 | for buffer in &self.buffers { 153 | buffer.borrow_mut().idle(); 154 | } 155 | } 156 | 157 | Event::Window(glutin::Event::Refresh) => { 158 | self.render(); 159 | } 160 | 161 | // should render only if the buffer is currently in view 162 | Event::Buffer(_, buffer::Event::Load(buffer::Load::End { .. })) => { 163 | self.render(); 164 | } 165 | 166 | _ => () 167 | } 168 | } 169 | } 170 | 171 | pub fn render(&mut self) { 172 | if let Some(tab) = self.current.as_ref() { 173 | tab.borrow_mut().render(); 174 | } 175 | 176 | self.window.swap_buffers().unwrap(); 177 | } 178 | 179 | // XXX: temporary to test 180 | pub fn open(&mut self, url: ::servo::url::Url, (width, height): (u32, u32), (x, y): (u32, u32)) { 181 | let buffer = Buffer::new(self); 182 | buffer.borrow_mut().go(url); 183 | self.buffers.push(buffer.clone()); 184 | 185 | if let Some(tab) = self.current.as_ref() { 186 | let window = tab.borrow_mut().open(); 187 | 188 | window.borrow_mut().assign(buffer); 189 | window.borrow_mut().resize(width, height); 190 | window.borrow_mut().position(x, y); 191 | } 192 | } 193 | } 194 | -------------------------------------------------------------------------------- /src/browser/buffer.rs: -------------------------------------------------------------------------------- 1 | use std::cell::{Cell, RefCell}; 2 | use std::sync::mpsc::{channel, Sender}; 3 | use std::rc::Rc; 4 | use std::fmt; 5 | 6 | use servo::compositing::CompositorEventListener; 7 | use servo::compositing::windowing::{WindowEvent, WindowMethods}; 8 | use servo::msg::constellation_msg::{Key, KeyModifiers}; 9 | use servo::net_traits::net_error_list::NetError; 10 | use servo::url::Url; 11 | use servo::euclid::size::{Size2D, TypedSize2D}; 12 | use servo::euclid::point::Point2D; 13 | use servo::layers::geometry::DevicePixel; 14 | use servo::util::geometry::ScreenPx; 15 | use servo::euclid::scale_factor::ScaleFactor; 16 | use servo::util::cursor::Cursor; 17 | 18 | use servo::compositing::Constellation; 19 | use servo::compositing::CompositorTask; 20 | use servo::layout::layout_task::LayoutTask; 21 | use servo::script::script_task::ScriptTask; 22 | 23 | use servo::compositing::compositor_task::{CompositorProxy, CompositorReceiver, Msg}; 24 | use servo::layers::platform::surface::NativeDisplay; 25 | use glutin; 26 | use x11::xlib::Display; 27 | 28 | use browser::{self, Browser}; 29 | 30 | /// This struct holds the compositor for a page. 31 | pub struct Buffer { 32 | window: Rc, 33 | compositor: Box, 34 | 35 | width: u32, 36 | height: u32, 37 | } 38 | 39 | impl Buffer { 40 | pub fn new(browser: &Browser) -> Rc> { 41 | let window = Rc::new(Window::new(browser)); 42 | let (proxy, receiver) = WindowMethods::create_compositor_channel(&Some(window.clone())); 43 | 44 | let time_profiler = browser.profiler().time(); 45 | let mem_profiler = browser.profiler().mem(); 46 | 47 | let constellation = Constellation::::start( 48 | proxy.clone_compositor_proxy(), 49 | browser.resource(), 50 | browser.cache().image(), browser.cache().font(), 51 | time_profiler.clone(), mem_profiler.clone(), None, 52 | browser.storage(), true); 53 | 54 | let mut compositor = CompositorTask::create(Some(window.clone()), proxy, receiver, 55 | constellation, time_profiler, mem_profiler); 56 | 57 | compositor.handle_events(vec![WindowEvent::InitializeCompositing]); 58 | 59 | let buffer = Rc::new(RefCell::new(Buffer { 60 | window: window.clone(), 61 | compositor: compositor, 62 | 63 | width: 0, 64 | height: 0, 65 | })); 66 | 67 | window.buffer(buffer.clone()); 68 | 69 | buffer 70 | } 71 | 72 | pub fn idle(&mut self) { 73 | self.compositor.handle_events(vec![ 74 | WindowEvent::Idle]); 75 | } 76 | 77 | pub fn render(&mut self) { 78 | self.compositor.handle_events(vec![ 79 | WindowEvent::Refresh]); 80 | } 81 | 82 | pub fn viewport(&mut self, (x, y): (u32, u32), (width, height): (u32, u32)) { 83 | self.compositor.handle_events(vec![ 84 | WindowEvent::Viewport(Point2D::typed(x, y), Size2D::typed(width, height))]); 85 | 86 | if self.width != width || self.height != height { 87 | self.window.resize(width, height); 88 | self.compositor.handle_events(vec![ 89 | WindowEvent::Resize(Size2D::typed(width, height))]); 90 | } 91 | } 92 | 93 | pub fn go(&mut self, url: Url) { 94 | self.compositor.handle_events(vec![ 95 | WindowEvent::LoadUrl(url.to_string())]); 96 | } 97 | 98 | pub fn title(&self) -> Option { 99 | self.window.title.borrow().clone() 100 | } 101 | 102 | pub fn url(&self) -> Option { 103 | self.window.url.borrow().clone() 104 | } 105 | } 106 | 107 | impl fmt::Debug for Buffer { 108 | fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { 109 | f.write_str("Buffer") 110 | } 111 | } 112 | 113 | impl Drop for Buffer { 114 | fn drop(&mut self) { 115 | self.compositor.shutdown(); 116 | } 117 | } 118 | 119 | struct Window { 120 | glutin: Rc, 121 | buffer: RefCell>>>, 122 | events: Rc>>, 123 | 124 | pub size: Cell<(u32, u32)>, 125 | pub title: RefCell>, 126 | pub url: RefCell>, 127 | pub favicon: RefCell>, 128 | pub cursor: RefCell>, 129 | pub status: RefCell>, 130 | pub load: RefCell>, 131 | } 132 | 133 | #[derive(Debug)] 134 | pub enum Event { 135 | Present, 136 | Resize(Size2D), 137 | Position(Point2D), 138 | Title(Option), 139 | Url(Url), 140 | Favicon(Url), 141 | Cursor(Cursor), 142 | Status(Option), 143 | Load(Load), 144 | Head, 145 | Key { key: Key, modifier: KeyModifiers }, 146 | } 147 | 148 | #[derive(Debug)] 149 | pub enum Load { 150 | Start { 151 | back: bool, 152 | forward: bool, 153 | }, 154 | 155 | End { 156 | back: bool, 157 | forward: bool, 158 | }, 159 | 160 | Error { 161 | url: String, 162 | //code: NetError 163 | } 164 | } 165 | 166 | impl Window { 167 | pub fn new(browser: &Browser) -> Self { 168 | Window { 169 | glutin: browser.window(), 170 | buffer: RefCell::new(None), 171 | events: browser.events(), 172 | size: Cell::new((0, 0)), 173 | 174 | title: RefCell::new(None), 175 | url: RefCell::new(None), 176 | favicon: RefCell::new(None), 177 | cursor: RefCell::new(None), 178 | status: RefCell::new(None), 179 | load: RefCell::new(None), 180 | } 181 | } 182 | 183 | pub fn buffer(&self, buffer: Rc>) { 184 | *self.buffer.borrow_mut() = Some(buffer); 185 | } 186 | 187 | pub fn event(&self, event: Event) { 188 | self.events.borrow_mut().push(browser::Event::Buffer( 189 | self.buffer.borrow().as_ref().unwrap().clone(), event)); 190 | } 191 | 192 | pub fn resize(&self, width: u32, height: u32) { 193 | self.size.set((width, height)); 194 | } 195 | 196 | pub fn create_window_proxy(&self) -> glutin::WindowProxy { 197 | self.glutin.create_window_proxy() 198 | } 199 | } 200 | 201 | impl WindowMethods for Window { 202 | fn create_compositor_channel(window: &Option>) -> (Box, Box) { 203 | Proxy::new(window) 204 | } 205 | 206 | fn supports_clipboard(&self) -> bool { 207 | true 208 | } 209 | 210 | fn hidpi_factor(&self) -> ScaleFactor { 211 | ScaleFactor::new(self.glutin.hidpi_factor()) 212 | } 213 | 214 | fn framebuffer_size(&self) -> TypedSize2D { 215 | let factor = self.glutin.hidpi_factor() as u32; 216 | let (width, height) = self.size.get(); 217 | 218 | Size2D::typed(width * factor, height * factor) 219 | } 220 | 221 | fn size(&self) -> TypedSize2D { 222 | let (width, height) = self.size.get(); 223 | 224 | Size2D::typed(width as f32, height as f32) 225 | } 226 | 227 | fn native_display(&self) -> NativeDisplay { 228 | unsafe { 229 | NativeDisplay::new(self.glutin.platform_display() as *mut Display) 230 | } 231 | } 232 | 233 | fn client_window(&self) -> (Size2D, Point2D) { 234 | let (width, height) = self.size.get(); 235 | (Size2D::new(width, height), Point2D::zero()) 236 | } 237 | 238 | fn set_inner_size(&self, size: Size2D) { 239 | self.event(Event::Resize(size)); 240 | } 241 | 242 | fn set_position(&self, point: Point2D) { 243 | self.event(Event::Position(point)); 244 | } 245 | 246 | fn prepare_for_composite(&self, _width: usize, _height: usize) -> bool { 247 | true 248 | } 249 | 250 | fn present(&self) { 251 | self.event(Event::Present); 252 | } 253 | 254 | fn set_page_title(&self, title: Option) { 255 | *self.title.borrow_mut() = title.clone(); 256 | self.event(Event::Title(title)); 257 | } 258 | 259 | fn set_page_url(&self, url: Url) { 260 | *self.url.borrow_mut() = Some(url.clone()); 261 | self.event(Event::Url(url)); 262 | } 263 | 264 | fn set_favicon(&self, url: Url) { 265 | *self.favicon.borrow_mut() = Some(url.clone()); 266 | self.event(Event::Favicon(url)); 267 | } 268 | 269 | fn set_cursor(&self, cursor: Cursor) { 270 | *self.cursor.borrow_mut() = Some(cursor); 271 | self.event(Event::Cursor(cursor)); 272 | } 273 | 274 | fn status(&self, status: Option) { 275 | *self.status.borrow_mut() = status.clone(); 276 | self.event(Event::Status(status)); 277 | } 278 | 279 | fn load_start(&self, back: bool, forward: bool) { 280 | *self.load.borrow_mut() = Some(Load::Start{ back: back, forward: forward }); 281 | self.event(Event::Load(Load::Start { back: back, forward: forward })); 282 | } 283 | 284 | fn load_end(&self, back: bool, forward: bool) { 285 | *self.load.borrow_mut() = Some(Load::End { back: back, forward: forward }); 286 | self.event(Event::Load(Load::End { back: back, forward: forward })); 287 | } 288 | 289 | // TODO: fix NetError because it's shit 290 | fn load_error(&self, _code: NetError, url: String) { 291 | *self.load.borrow_mut() = Some(Load::Error { url: url.clone() }); 292 | self.event(Event::Load(Load::Error { url: url })); 293 | } 294 | 295 | fn head_parsed(&self) { 296 | self.event(Event::Head); 297 | } 298 | 299 | fn handle_key(&self, key: Key, modifier: KeyModifiers) { 300 | self.event(Event::Key { key: key, modifier: modifier }); 301 | } 302 | } 303 | 304 | struct Proxy { 305 | sender: Sender, 306 | proxy: Option, 307 | } 308 | 309 | unsafe impl Send for Proxy { } 310 | 311 | impl Proxy { 312 | pub fn new(window: &Option>) -> (Box, Box) { 313 | let (sender, receiver) = channel(); 314 | 315 | let proxy = match window { 316 | &Some(ref window) => Some(window.create_window_proxy()), 317 | &None => None, 318 | }; 319 | 320 | ( 321 | box Proxy { 322 | sender: sender, 323 | proxy: proxy, 324 | } as Box, 325 | 326 | box receiver as Box 327 | ) 328 | } 329 | } 330 | 331 | impl CompositorProxy for Proxy { 332 | fn send(&self, msg: Msg) { 333 | self.sender.send(msg).unwrap(); 334 | 335 | if let Some(ref proxy) = self.proxy { 336 | proxy.wakeup_event_loop(); 337 | } 338 | } 339 | 340 | fn clone_compositor_proxy(&self) -> Box { 341 | box Proxy { 342 | sender: self.sender.clone(), 343 | proxy: self.proxy.clone(), 344 | } as Box 345 | } 346 | } 347 | -------------------------------------------------------------------------------- /src/browser/mod.rs: -------------------------------------------------------------------------------- 1 | mod browser; 2 | pub use self::browser::Browser; 3 | 4 | mod tab; 5 | pub use self::tab::Tab; 6 | 7 | mod window; 8 | pub use self::window::Window; 9 | 10 | pub mod buffer; 11 | pub use self::buffer::Buffer; 12 | 13 | use std::rc::Rc; 14 | use std::cell::RefCell; 15 | use glutin; 16 | 17 | #[derive(Debug)] 18 | pub enum Event { 19 | Idle, 20 | Window(glutin::Event), 21 | Buffer(Rc>, buffer::Event), 22 | } 23 | -------------------------------------------------------------------------------- /src/browser/tab.rs: -------------------------------------------------------------------------------- 1 | use std::rc::Rc; 2 | use std::cell::RefCell; 3 | 4 | use browser::{Browser, Window}; 5 | 6 | pub struct Tab { 7 | windows: Vec>>, 8 | } 9 | 10 | impl Tab { 11 | pub fn new(browser: &Browser) -> Self { 12 | Tab { 13 | windows: Vec::new(), 14 | } 15 | } 16 | 17 | pub fn open(&mut self) -> Rc> { 18 | let window = Rc::new(RefCell::new(Window::new())); 19 | self.windows.push(window.clone()); 20 | 21 | window 22 | } 23 | 24 | pub fn render(&mut self) { 25 | for window in &self.windows { 26 | window.borrow_mut().render(); 27 | } 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/browser/window.rs: -------------------------------------------------------------------------------- 1 | use std::rc::Rc; 2 | use std::cell::RefCell; 3 | 4 | use servo::gl; 5 | use browser::{Buffer}; 6 | 7 | /// This struct holds the texture of the size of the window, where the buffer 8 | /// it contains is rendered to. 9 | pub struct Window { 10 | buffer: Option>>, 11 | 12 | width: u32, 13 | height: u32, 14 | 15 | x: u32, 16 | y: u32, 17 | } 18 | 19 | impl Window { 20 | pub fn new() -> Self { 21 | Window { 22 | buffer: None, 23 | 24 | width: 0, 25 | height: 0, 26 | 27 | x: 0, 28 | y: 0, 29 | } 30 | } 31 | 32 | pub fn resize(&mut self, width: u32, height: u32) { 33 | self.width = width; 34 | self.height = height; 35 | } 36 | 37 | pub fn position(&mut self, x: u32, y: u32) { 38 | self.x = x; 39 | self.y = y; 40 | } 41 | 42 | pub fn assign(&mut self, buffer: Rc>) { 43 | self.buffer = Some(buffer); 44 | } 45 | 46 | pub fn buffer(&self) -> Option>> { 47 | self.buffer.clone() 48 | } 49 | 50 | pub fn render(&mut self) { 51 | if let Some(buffer) = self.buffer.as_ref() { 52 | buffer.borrow_mut().viewport((self.x, self.y), (self.width, self.height)); 53 | buffer.borrow_mut().render(); 54 | } 55 | else { 56 | gl::clear_color(0.6, 0.6, 0.6, 1.0); 57 | gl::clear(gl::COLOR_BUFFER_BIT); 58 | } 59 | } 60 | 61 | pub fn width(&self) -> u32 { 62 | self.width 63 | } 64 | 65 | pub fn height(&self) -> u32 { 66 | self.height 67 | } 68 | 69 | pub fn x(&self) -> u32 { 70 | self.x 71 | } 72 | 73 | pub fn y(&self) -> u32 { 74 | self.y 75 | } 76 | } 77 | -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | #![feature(box_syntax, result_expect)] 2 | #![allow(dead_code, unused_variables)] 3 | 4 | extern crate servo; 5 | use servo::gl; 6 | 7 | extern crate x11; 8 | extern crate glutin; 9 | use glutin::{Event, GlRequest}; 10 | 11 | extern crate time; 12 | 13 | use servo::url::Url; 14 | 15 | #[macro_use] 16 | extern crate log; 17 | extern crate env_logger; 18 | 19 | #[macro_use] 20 | extern crate bitflags; 21 | 22 | extern crate num_cpus; 23 | 24 | use std::env; 25 | use std::rc::Rc; 26 | use std::thread; 27 | 28 | pub mod util; 29 | use util::init; 30 | 31 | pub mod browser; 32 | pub use browser::Browser; 33 | 34 | fn main() { 35 | util::init(); 36 | 37 | let window = Rc::new(glutin::WindowBuilder::new() 38 | .with_title("miserve".to_owned()) 39 | .with_dimensions(800, 600) 40 | .with_visibility(false) 41 | .with_gl(GlRequest::Latest) 42 | .build() 43 | .unwrap()); 44 | 45 | unsafe { 46 | window.make_current().expect("failed to make the context current"); 47 | 48 | gl::load_with(|s| window.get_proc_address(s)); 49 | 50 | gl::clear_color(0.6, 0.6, 0.6, 1.0); 51 | gl::clear(gl::COLOR_BUFFER_BIT); 52 | gl::finish(); 53 | 54 | window.swap_buffers().unwrap(); 55 | } 56 | 57 | let mut browser = Browser::new(window.clone()); 58 | browser.show(); 59 | 60 | browser.open(Url::parse(&env::args().nth(1).expect("no url given")).unwrap(), (400, 600), (0, 0)); 61 | browser.open(Url::parse(&env::args().nth(2).expect("no url given")).unwrap(), (400, 600), (400, 0)); 62 | 63 | let mut events = window.poll_events(); 64 | 65 | 'main: loop { 66 | if let Some(event) = events.next() { 67 | if let &Event::Closed = &event { 68 | break 'main; 69 | } 70 | 71 | browser.handle(browser::Event::Window(event)); 72 | } 73 | else { 74 | browser.handle(browser::Event::Idle); 75 | thread::sleep_ms(10); 76 | } 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /src/util.rs: -------------------------------------------------------------------------------- 1 | use servo::util::opts; 2 | use servo::net_traits::hosts; 3 | use servo::script::dom::bindings::codegen::RegisterBindings; 4 | use servo::script; 5 | 6 | use env_logger; 7 | use num_cpus; 8 | 9 | pub fn init() { 10 | env_logger::init().unwrap(); 11 | hosts::global_init(); 12 | script::init(); 13 | RegisterBindings::RegisterProxyHandlers(); 14 | 15 | let mut opts = opts::default_opts(); 16 | 17 | opts.user_agent = concat!("Mozilla/5.0 Servo/1.0 miserve/", 18 | env!("CARGO_PKG_VERSION")).to_owned(); 19 | 20 | opts.url = None; 21 | opts.resources_path = None; 22 | 23 | opts.headless = false; 24 | opts.hard_fail = false; 25 | 26 | opts.enable_text_antialiasing = true; 27 | opts.enable_canvas_antialiasing = true; 28 | 29 | { 30 | let mut threads = num_cpus::get() * 3 / 4; 31 | 32 | if threads < 1 { 33 | threads = 1; 34 | } 35 | 36 | opts.paint_threads = threads; 37 | opts.layout_threads = threads; 38 | } 39 | 40 | opts::set_defaults(opts); 41 | } 42 | --------------------------------------------------------------------------------