rust-lang / rust

Empowering everyone to build reliable and efficient software.
https://www.rust-lang.org
Other
97.78k stars 12.65k forks source link

Ship logo and favicon with docs, to make them self-contained #26075

Closed SimonSapin closed 5 years ago

SimonSapin commented 9 years ago

When looking at local docs shipped with my compiler in share/doc/rust/html, my browser makes requests to the internet:

These requests are sometimes slow, and seem to block rendering. These files should be shipped together with the docs so that rendering local docs is always fast.

CC @alexcrichton

alexcrichton commented 9 years ago

Sounds like a fine idea to me.

steveklabnik commented 9 years ago

https://gist.github.com/steveklabnik/90ab0bb475bfd7cba236 would be helpful :)

SimonSapin commented 9 years ago

Trying now with data URLs

SimonSapin commented 9 years ago

Adding ~500 lines of base64 at the top of lib.rs for every crate doesn’t look so great:

diff --git a/src/etc/to-data-url.py b/src/etc/to-data-url.py
new file mode 100644
index 0000000..1f856df
--- /dev/null
+++ b/src/etc/to-data-url.py
@@ -0,0 +1,9 @@
+import urllib, sys
+
+def to_data_url(url):
+    result = urllib.urlopen(url)
+    encoded = result.read().encode('base64').strip().replace('\n', '\\\n')
+    print('"data:%s\\\n,%s"' % (result.info().type, encoded))
+
+if __name__ == '__main__':
+    to_data_url(sys.argv[1])
diff --git a/src/liballoc/lib.rs b/src/liballoc/lib.rs
index ac5a5d6..af55b09 100644
--- a/src/liballoc/lib.rs
+++ b/src/liballoc/lib.rs
@@ -63,8 +63,519 @@
 #![feature(staged_api)]
 #![staged_api]
 #![crate_type = "rlib"]
-#![doc(html_logo_url = "http://www.rust-lang.org/logos/rust-logo-128x128-blk-v2.png",
-       html_favicon_url = "https://doc.rust-lang.org/favicon.ico",
+#![doc(html_logo_url = "data:image/png\
+,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\
+gg==",
+       html_favicon_url = "data:image/x-icon\
+,AAABAAQAxMQAAAEAIAC/HwAARgAAADAwAAABACAAqCUAAAUgAAAgIAAAAQAgAKgQAACtRQAAEBAA\
+AAEAIABoBAAAVVYAAIlQTkcNChoKAAAADUlIRFIAAADEAAAAxAgGAAAAwKaOawAAH4ZJREFUeJzt\
+nXm0XUWV/z8hYR4VJYDAflBBgYCEQUAMkzLIEFSQSWnF1YIiyNgoItr8sLWRVoYgdjMo0gItk63I\
+EEGBMLQgDSSBMAhFsmVUaKaEBBIe+f2x68Hl5Z575nPuffd81norK/ecqtrv3drn1LDru0ctWrSI\
+hoYGY4m6DWho6CYah2hoaKFxiIaGFhqHaGhooXGIhoYWGodoaGihcYiGhhbGxN0watSoKuzoS5zI\
+KOD7wFHho58C3/SqzeZQScTtu8U6REM0TmQZYAfgLeAWr/pmyiq+Bnyr5f8nAE8Bk1PaMQbYCXvj\
+T/Wqr6e0oyEwKs5jmjdEe5zIWGAq8KHw0X3AJ73q8wnLrwE8Aqw07NIcYEOv+nTCelYFbgQ2Dx89\
+DmznVZ9LUr7fiOvvzRwiOyfxjjOAdchrncjwDh7FWSzuDAArAmcnqcCJrABczzvOADAu2NaQgeYN\
+kQEnshTwDLBqm8u3AHt0GrY4kd2AKTHN7OlVr4+xYQo2VBrOi8CaXvWNmDb6juYNUQ570d4ZwDro\
+FU5kdLuLTmRZbPIcx7lOZLmIOkYDl9PeGQDeC0xK0EbDMPraIZzI+k7kH5zIJimLHhJzfRJwUVhF\
+Gs63gfUStDEAfGf4h6HOnwGfjil/SII2WuvdOPwt1k9TbqTRt0MmJ/Il4AJg6El+AXCsV30tptxY\
+bCUoyQrdOV51aEkVJ7IhMB1YMqGZbwITvOrMljrOAo5OUHYQWCtuch3eQmcBh4aP3gIO9ao/T2hj\
+TxHb3/vRIcIy5d+woUUrjwIHedX7O5Q9Dvhxiua+B5wLrA6cA2yXzlruBI4EngW+CpySouwJXvVH\
+URedyATgv4ANhl16GXh/hmXkrqdxiDY4kQ2AhyMuL8BWac5ot0HmRKYBm5ZoXpHM9KobD/8wDLuO\
+AU4DloooO96rPlSmcXXQTKrbs2GHa0sBPwKmOJHVWy+EJ2qvOAPAeCeyResHYch3A3AG0c4Ai781\
++oJ+dYiNEtyzKzDDiewJb2+knViqVeXwjWA7TmR34AFgtwTlFnuz9AP9GrqRxCEA3o9tts0MZXpx\
+/Lg/sH/4HcanKNeXb4jGIZKRpiN1K2l/h7R/oxFBz0+qncja2Jxgmlf9e4L7lwDmAsuWbVuP8waw\
+vFcdjLvRiawGTAAe9qpPlm5ZDkb0pNqJHA7MAn4PPOVEfulEPhxTbIDuc4ZuXN5cGvtbReJENnEi\
+v8T2ZX4PzHIiR1ZgW2n0rEOEILqzeGdjbUngYGC6E7nRiewcUbRbhj+vYsu7A151SWB5YE/gT7Va\
+9W7a/q2cyM5OZAowA/ubD200jgbOcCIrV2Rf4fTskMmJbApMi7ltGraEerlXfTMExJ0DHFa2fTE8\
+A+zoVR8bfiHEKZ0DHF65VYtzIXCEV10QNjP3x85sTIgpt5lXjftuamHEbsw5kXHAYh0qgieBS7Ev\
+NEkcUdlM9Kp3Rl0MTnEbsG11JkUyCwsk/BywTsIyG3rVR8ozKTsj2SEGsC+r17jFq3487iYnMgm4\
+pgJ7ymBdrzq7biPaMZIn1a/UbUBGbin4vm5kbt0GZKWXHSJ2ObBLSdpZ5pVqRbl046pZInrWIbzq\
+q3XbkJFxCe/rhrlOVnr17d27DhFYWLcBGdg3nJqL4/OlW1IOb/WyjE6vO0Q3DisWAX/tcH0sdkYi\
+knCQ6J9i2vEp7aqKOXUbkIeuiWVyIksCuwOrYfsH0xIcUJkP1L0J9AZwF3ArcAdwj1d9xYmcjq3Z\
+t+N4JwLwHa86v/WCE9kBO7SzQkTZt4DDver5TuQ9wFbAR4GPh3/r/k4XxN0QlpUnAJsBzwPXe9Wu\
+eNt3xbJrcIabMNGvIV7Ddm1vxzraXV51XkuZiVi4QNuD+CXzPPBb4Frgpla7hgiHcH6KnXKL4lng\
+18ATmAN8Ati+w/1vAV/wqpe2u+hEVsSEB/YEPoNF61bNPEyf6vYWu5YDtgEmhp9tsZ35IW4Ddq7C\
+KXpiH8KJfBr475jbBoF7Med4GTuAn/RschHMAa7CNvhuTRj0Ngr4JcXMBxYC+3nV3ya5OTyFPwEc\
+COxH9BunDBZiw8JVMAfYgndCbKL4jFf9TdmG9YpDHAacV3pD2bgHs+1XcQIE7Qgd8wpgnxw2zAf2\
+9ao3ZCkc3hwHAV8GPpLDjjL5ilc9v+xGesUhPgL8ufSGkrMIuBo4q1OIRVJCDNWvsaFMWuYCn/Kq\
+N+e1I9iyLfANYG+668DT1l619D7QKw4xBhsGLR93b8kMAr8CflD0Afswjr6WaHGxdrwK7OpV7y7S\
+lmDPhpjQ8sHU7xjzgJWrUPnoCYcAcCJ/wMa8dfE74MQylSaCFusfsZWhOF7AJprTy7In2LQJJslf\
+p9LfzV61ku++l2KZ7qip3RnADl5177JlV7zqXEy8IK6TPw3sVLYzBJse8Kp7AzsCM2NuL4vb42+p\
+hn52iLmYNtEWXvW2qhr1qq8Au2Dy+e14HDsr8WBVNgF41anY3sDxVL+5VtfDcDG6aci0AjaPiFue\
+K4IbMbnGTjvKpRKSrRwJHACsie1t/BqbyNcap+VE1sEOB+1SQXODwCrh7Vk6PTOHAHAi9wBbltjE\
+fOA4r/ofJbYxIgh7KIcDp1PuYsf/etXKloJ7aQ4B5b46Z2BHGxtnSIBXXeRVf4o9oMocvnXNcAm6\
+zyFeKqneXwDbeNVHS6p/xBKOgm4NXFxSE2V955kofcgUdknXxWKTBrF5wqBXnTPsvonAzRQbjjEI\
+HBWedA05CbI/P6HYB+lC4BOtsU+hrRWx+eQq4d/lgdl551e1ziHCH/BMTOOnHQuxTZn5WL61IgP1\
+XsFif24qsM6+J6QDu4L2+fGyMg/bhFwW6wNRD8UFwDFe9d+zNlSbQwRFvVlUs2o0nKeB3b3qAzW0\
+PeJxIhthK3UfqKH5QWC9rCuEdU6qN6QeZ/CYzEvjDCURNjC3p55DSqMpUXe2TIeYTvWHzT22qTW7\
+4nb7Dq/6BLa7XekGItanIjM85aU0h/Cqf8MErqriUWBbr/pUhW32NeFvvTPVvikuD32rFMpedv23\
+kusf4kksEC5W/buhWELn3BH7Dqqg1D5VxbLrjZQcAvD47Nl1hy/3BGVGHQRp0T8B7yutEfiDV83V\
+l2oP3XAiu2ArEg318zAmhnAdFnI9v/Pt6XAiH8PC26OW2fOym1fN1ZdqdwgAJzIdiMvb0FAtc7D9\
+hJ971f8pqlIn8jns3HnRzPCquRNedkssU1VziYbkrAj8I3CnE7ndiXyyiEq96mVYut+iqaQPVeUQ\
+l1PdpKshPROBG0KimU4pi5NyMjC1gHqGeIqKViwrcYigt1PGa7ShWHbBUhGfHNRCMhEkeg4EnivI\
+rsuqEjKrag6xFDah62UB335jKvBZr/pC1gpCXuzrC7DlCSwJS6wqYBx1xjItAQi2zT4J+Eqmihrq\
+ZDawZ56z5k7kPIpJYXY+lkDmIUC96ltZKindIYKEzDgs0fd4LIZpo/D/bsv22ZCeF4CPZ40NC0eD\
+HyAmo2lK5gOPYM7xcMu/j8dJ2ZTqEE7kS8CPgfd0rKSh13kB2C5r3riwgpVJdTAlLwHHe9WLom4o\
+zSHCzuQj1BPR2lA9TwBbetVMJ9ycyJXAZ4s1qS2D2HyjbULOMvchPkrjDP3EeuQ7RnocCaTyC2A0\
+pjSeiTwO0ZV5iBtKZZIT+ULGsqsASxVpTAcyn4XJ7BBhknVh1vINPcvpYaKclmMLt6Q9F+ZJGp93\
+Y+4Y4C8562joLcZiAmuJcSKrYYnfy+YvWJ/MTC6HCPkSDqSasWFD93BUWG5PytcoLwJ2iAXAgVly\
+eLSSO3TDq94PnJS3noaeYg1gtyQ3BsnOr5VrDgAnhb6Yi6Jimc6gOfPQb3w64X2fp/xcdzdifTA3\
+hThEyEv8RUywt6E/6JQcEnhbHzbXmD4BzwNfLCo3dqGxTE5kTyxLTlL+D0tBOw1zzo9gk6+6Mwk1\
+JGPFTqrdCU5LzsNyQzyHaTxNBJZJacNeXvW6pDdXHtznRB7EYpriuAI4LORLaC3/fixUvO3Z2aTn\
+p8cNDBTyxEhDWWe7xw0MvIod6Ok2NvWqM6IuOpEbgKiDR2cDp3jVl1vufw/wryQPBJ3pVTdOaixU\
+fGLOiaxBMhGpKcBBw50BwKs+jyUE/N92BccNDFw3atQoOv3UxbiBgYE427L8eNWVsIns57D0xbEp\
+gSvivVEXgrpflDN8w6se0+oMAF71Ja/6VSylbxLGhz5XGIU5hBOZgOm4xvXIRcDXO4XvetXXid7I\
+2d2JfCiblb2LV33Oq/6XV90HWB/LiVc3nbR4j474/B7gRzH1nkLySIgzncjmCe+NJZdDOJGxTuQ4\
+JzIDU1M7IEGx+7zq43E3edU7sKODw6liotbVeNVZIS9c3X+Hee0+dCLvA6JCPM6PmwCHh2VkxOow\
+DgDudSIzQl8cm7BcW1I7hBNZyons40SuwTrsj4FNUlQxK8W9syM+/6ITWTVFPSMSr3o2BS03ZuTZ\
+iM+/SvTkOGmcUeTcJIJNsL74lBO5JvTR1LFTiR3CiazuRCYDz2BJzScBaXYrh4gcd6a4d1mKOYU1\
+EjiViCd1ybyBhYS/i9AJO4V2JI2QzponZAzWN68GnnEik53I6kkLJ3KIsNt4K/B1IO+TeduQDCOu\
+zQ9gp++i+HxOO0YEYWHizhqavivi4P9eWLxTFFsnrD9zCHcLq2J9dmrow7EkfUPsABQ1kV0GOCHB\
+ff9M5wl6302sO1DHhuhvIz6PS0p/RNxQxokUPQL4INaHY0nqEJkOdHfg204k8gnvRI4GDo2pI1cQ\
+1whj3YrbWwBcFnEtbpXRAeeGXezFL5r8zfnAWtnNy07SOcAtWKLxopa3lgAucSJ7A+dhK1SjsYyX\
+RxO9ft3KzQXZ0tM4kfEUM7xIw8UdJOnvTVD+y8DaTuSbXnX60IdOZAtMoW+nAmxs5T5MczaWxDvV\
+YQf5WuJfiVWwENg6Krpx0aJFtexUA+tWmazFibwXe1hVqZs7D/igV306wqalsLP2Sd9aT2KrVWtS\
+zlvhz1h4x/NQ4E51qHAX7Auok7nYLndpWWR6gSACdi/Vi0ifEuUMAEFMbD9MqSMJa2MP2TKc4RZg\
+lyFnSEKqfYiQEnUP6tklfQXb4Vzfq15dQ/u14kTGOJEJYfNpGqaIN1CxGTeTYN/Dq94LbIrNBV4v\
+26gIfgfskTaNb6bgvjDxuQj4hzSNZWQWcBYm2x4ZWdlKXUOmMhO3jBsYeJN6VU6eBLbyqqn0WsNQ\
++3DgCGC1MgxrwyXAIUFj9l2Uqcs0CotY/HpSK1NyJ/Y0+k1a2cIa5xAjlVeBj3nVzAkWncjS2N7R\
+sUCqCNWU/AQ4Kio8pAopy1OB73S8KTmDwJXAGV71nqyVNA5RKK8Cu3rVu4uoLDxId8Z0mgrJSdHC\
+97zqdzvdUIVDjCW/7PkrwAXAZK+aO49E4xCF8TSwe1k5v0OI+LHAwaQ/GNSO1eMylFZxHiJvPPq1\
+wFpe9YQinKGhMB7G0hyX4gxgCeC96qHAOlhkQmbp/UDusxF5w783AibntGF60slyQ2X8CptA/7WK\
+xrzq8171VODcnFWdE/pkZrJEqw7FmpyMxSRljUocorQk3A2pmQ+c4FXzdsys5H1DTASmOZEfYfOJ\
+1FlWs5yH+CTwIKbFlNcZIP8foaEY7gY2r9EZAF4soI4lgW8BM8PmZSrSnIdYw4lcgen8F5kaq9Bc\
+yQ2ZeBM4OWv+hwIp8lzHusD1TuQKJ7Jm0kKxDuFERjmRI4BHsS35ommiVutnDDDFiVQlSBzFy/G3\
+pGY/4BEncmRUhG0rSd4Q/4ptdpQlg1JJdsmGWEYDZziRC5xIEUPhbmJF4BysL3ckiUOkUnpu6Hm+\
+DFyd5TxyDxDbl6tK3N7QW0wCrhqhTtGRJA5R9qrDyiXX35CNSVi0apWsUnL9sX05iUOciJ1im5Pb\
+nPY0eeq6ly86kUMqbK+sucscrA+fGHdjrEN41UVedTKWd/qq/LYtxkol1NlQHGeGEO4qKEPk+ipg\
+A686OYlCeOKdaq/6DLCfE9kDW3Uq6mB7M2TqblbBohKipCkT40SWAP4DU8FoR2L9pATMAo70qten\
+KZT1gNByvBO6kSn8o4XTveo3c9bxLppo18J5HRCv+vc8lQStrXbypEXyJiZU8C9edbGNvrj+nqkz\
+h4ZOciKXYBOvj2WpJ7B2jrLdxnbk/8JHYeeLN8dEv3bOa1QBLAP8IwnW8WMoe3/jTizFwkNZKyji\
+PMQETEYmK7d61UJlR0aS6oYT2QD4PrBPkfVm4GGvmiuS1IkMkE7bNy2bxaXkreI8RJTgbVJqEaTq\
+FbzqI151X0y47c0aTdnQiYyrsf0k5O2LhThE3gyT6yXV3exnvOqFwEE1mzEpZ/myN4JzZzvNbGAI\
++jsb6HiGNaENuV7F/YJXvQo4vUYTUodTD6PQbD9t+K4TOTtJEF8UmRwiyND8Ajgqa8PDqFpsq5f5\
+LlDJSbY2bB2WTrOSJPdgXo4CfhH6aGoyJUzBtPejMsRkIU3Clb7Gq76BTbLrYCWi9xCS8PGiDInh\
+C2QMUEzlEE5kBSxh4qfSNhTDFgXXN9K5FJP0rIOk+R3eRUizVXS/6cSnsDMeK6QplObE3KqYgnLR\
+yswA2zQT6+R41dewB1Md7Jqx3PcpRmomDTsBf0yTfi1pBqExWALuspS/l6Z6Sfde56aa2j0w7Vnl\
+cOKyrhRoWwE3hj4cS9I3xE4Ulxsiih1Lrn+k8eea2l0C+J0TOcWJdAzGcyLrOJELsdi3OtmchCOb\
+pKEbVRwkOnjRokWnVNDOSOFBLMaojqHmaExY7BgncjVwG/CXYM/q2DL6J7D0CXlj3YoiUR9OFLoR\
+xvfTybfCMOIpQv07LlSmFSdyJ7Bt3jb7gL8Am3rV1wvTdg2pTU/CFJzTpNZtSMjjs2ePSukQZ1FA\
+WPYI5kVsRe4HQzL+RWYQes6rHoWlPtoPuA5T626oj7rmEd3MINY39wPW9KpHpclpkSvaNbw1DsY2\
+QprNtZxkeEOsjw0HGuAB4D+BSzo5QOly+EM4kc2BbwL7JyrQsBgZHGIUJgXaz0PYK4AfetX7ktxc\
+mUOAyV0CzyQu0PAu0joEgBO5geITj/QSa3rVxGHfVZyHeJtg2Mwi62yI5a66DaiRmWmcIQmFOkTY\
+wawiorHhHQpJddWjjM+i8N2JwhwipNa6uKj6GhLzJyBVUsoRxsWh7xVCIQ4RJncXA1Xp9zQEvOor\
+9Pew6f2YUxSSErmoN8QxwG4F1dWQnt/XbUDN7Ib1wdzkdggnshlwWgG2NGTnN3Ub0AWcFvpiLvIm\
+XVwOuAzoO5XobsKrzsA0ifqZpYDL4iJw48j7hjgL03xtqJ+T6zagC9gAODNPBXlUNzbBtIIaugCv\
+eitwZd12dAGHhr6ZiTxviAk5yjaUw5E0aY4hR9/M4xB30US7dhVBjPgA6lX4q5tBcixDZ3YIr/oY\
+dk62jMyRDRnxqlOBQ+jPzbqXMbHjx7JWUITY8RhgfWBDLGxjg/Dvh6jneGPPkiW4LwoncgAmJjcS\
+v4PXsTTRM4FHwr8PA4951Y5vx0qjXVsJCm8DmHPsRX2qCz1DkQ4B4EQ2Bn6KyfT3OucD12Kdf7ZX\
+zfQGrM0hWgkKao9QUNahIs4udytFOkTcd1s2BaYkmIWlxVqQt6JSEqakxasucCJXYAeIcjNuYOBB\
+YOsg2NUQQZHOlYawOVbk8dYri3CGJFSSpzrMMz5XYJXjgQuKCuhqKI7wnVxAsYruByUVGstLVYnb\
+D6D41FkHUdAbp6FQTqT4PBZrY32odKqaQ9xPORt5i4ADvGqqHVonsg4wDpgP3O9VXy/Btr7DiewH\
+XI7lySua6V41dx+qfVLtRHbBdGHL4g1gZ696R0T7K2H6nlthytVbA60HSuZiyQRPy7py0es4kZUx\
+za0DgXWAl4D7sHnA3cDdcVIuTmQ7TG926RJN3dWr5tK07QaHuBGTNCyTVzHtzhnAxlin3woTUN6Q\
+ZE+sC7xq3y0Nh6TsdxCvyvhXgnNgO8H3edX5oY4tgJux/BFlcpNXzao+DtTsEE7kw5gEZhXMxeZE\
+y+WoY3uventB9vQETuRK4LMZig5i3+09wL7A+4q0qwObhnD3TFSqutGGE0quv5UVyOcMYKJrfUOQ\
+Ddo3Y/HRmKr2V6jOGaDkPlWaQziR1ahoZaBA8iSg70W2o5wJcJkcEPpWKZT5htiM8jPXF82GTmTF\
+uo2okLIS4JTJkljfKoUyHeIhuiM8/CVslet6QGPuXQLYsnSLuockWZveAropImAQC+QrhdIcwqs+\
+iaVI7bTlPgi8gh1qmVewCXOwgMKxXnU3r7qnVx3AcqT5DuUyJRXsNcLOb6esUP+DSWQu61VXwBKh\
+HINpyRbNPKwPvELnh+gC4BivWlpa4iqWXVfGgvrmYb/QHODNoCfUet/2wB8oZpg1H5gYJYAbkvDd\
+iYWoD+c3XvUzBdjQ1QSFiiiB4POAI7zqYp0zbGr+EdvYLIKF2D7SbcPaWRmLtVsRExBYDpg1vN+k\
+pfZ9iDQ4ke8C/6+Aqr7lVTtK4ziRj2JPweE861XXLMCGrsaJfBX49zaX7sUCJyOf1E5kAuZMRXSO\
+U7xqEd95Iupedk3LKgXUMYg94TriVf9E+z2SNZzIWgXY0e1EDQ1P6+QMAF51GpaUpAiK+M4Lo9sc\
+YmIBdTzhVV9KeO/9EZ/3Q4rgKIdIujE5tSA7ivjOC6NrHCLE0BeR+reI36kXlyMTE+K7ovS0ko7R\
+5xRkzmZOZIWC6spN1zgE9lQeXUA96zqRpBl1toj4fKSvNG1F9Pg/aabZogTqRtNFb+RucoiiXp1L\
+AIfH3RRWtaIErbZ0IkU4Z7fS6Q0YG77iRJYmW/xTFF0zbBqJDgHw7bCK1Jaw9X9Rh/LLYVGzI5VO\
+b8CjQvRqJ04Filx46BqH6Ipl17BJ9DKQS6h2GPOx01vnedU3QjtLAHsCkzFFkE48BJwN/HIozLnX\
+cSLLYkd5z6BzqPaLwMFe9YY25b8HHF+waa8Bq8RJyBRBT+xDOJEtsTDiMpiLrSa9gQ2R0mabeRH4\
+GXCRVy0tZKBMnMgHgS+Hn/ekKHoPcAvwf4ADPg2UFVi3lVctqw+8Ta84xGEk2DvoAu7BxL/+u+hk\
+f0UThoX7YTnEe2HV7Cte9fyyG+kKGZoE/D3BPYPY7ugdWMDed6g+mvYj4ecnTuRuLFHJ9cCDXrVe\
+ESTAiYwHJgF7Yys3dYV2LwT+Bdt0m4gtp8ctUiTpA6XTLW+IJbE4pu1bPn4NO6p4O+YEd7XqMIUz\
+vFPIfyioCF7ANqqmYm+R6WXPO8J4fui47I7ADlR7UCeKecAnW08ehj2mbTDnmAh8lHfPF2/D4pkW\
+lm1cTwyZ4G2n2BMbo96PqWF0nGQ5kWexKMxuYxDTHn0AeAyLrvXAc8DfvOqrSSoJG2hjsd/RAeth\
+QXUfxvYBunFp+Hmv2nGeERZRJmBvjr8D11XhDNBDDpEFJ/IysHLddmRgIfZWWRB+hkLfl8VUK5bC\
+nva9dsAK4BWv2lXxSa30yhwiK90wXMrCksAadRtREj194rCbNuay0ItP0JFOT/epnjU+jK8buhAn\
+0rVDpjh61iHozgllg9Gz300vO0QvTqb7hZ6dR/SyQ6RZEHgS+CHwREm2jGRmAadhf8OklKnvWiq9\
+7BBJAgGnY+HM63nVEzGd19LDA0YQP8My93wL2wM5GJiWoNyypVpVIj27DxEm1c9ja/bDuQn4t3ZK\
+0U5kEnBNyeaNFD7lVRf7WzmRnTFJyXbCwwuA1fKqY5RFr4kMJCbs9h7DOzo+C4FLMDHcTrLpM6uw\
+b4TwYLsPveofvOpuwKbY33xol3kQOL5bnSEJPfuGGMKJrI2lb7o/JC6Pu38JLCS8Z1/rFfEGsHyc\
+Age8HVm7GfBwmSJiRTCiQzeyUmJGo5FEIRl7uo0RO2TKyUMp75+Jpe/qVRaRfqjYl0PLxiE68zyw\
+h1fdGFgTy5/Wa1wBfCD8DruT/NzBo+WZ1L00DhHN74FNhs4VhxxrPyzVqnL44dDpPq86BTtGOyVB\
+ubYT6pFOvzpEp7PRC7BD9Lt71b+1XvCq92NnHHqFB4YLPoeFhz2A4+iszN6T58fz0q8O8TgmHjCc\
+R4FtvOoZHY6E/iJlW6diB3w2I7lMZCt3hrKrA6ekLHtxuw+96iKveiZ22u6RNre8jB1s6jv6cpUJ\
+wIl8CbiAdwLRLgCObT2mGlFuLPAUyUJHJnvVo1vKboTt9CYNW38TmOBV357gOpEzsf2XOAaBtRKk\
+010OOAs4tKXcYV715wlt7CmaZdcOOJFx2PneaV418VDIiVyDHebvxH8Chwx/0ziR72M5oZNwWgib\
+aC0/Cvg5cEhM2eu86l4J28GJbIy9ie7yqiP27dA4RAk4kX2Aqzvc8ltg34iEI8tiE9b1YpqZDYz3\
+qotlVgoym1dhOklR7OdVr4ppo+9o9iHK4VpMvKsdtwD7R+3wBjWOIxK0cUQ7Zwh1DGIZXm+OKPsi\
+8LsEbTQMo3GIDHjVBcClbS79Gdg7XO9UfgpwZYdbrvaq1yewYe/Q5nAuHZLvbEhH4xDZ+QHv3ry6\
+D9vEm5uw/NG0z7EwJ1yLJSwA7I6lwRri0WBbQwaaOUQOnMgymEDYIHBrWrFeJ3IE8JNhHx/tVSen\
+rGdMsGMMMNWrvp6mfD/RTKq7mLBi9APg6+Gjc4ETu0EWc6SS2yEaGvqJZg7R0NBC4xANDS00DtHQ\
+0ELjEA0NLTQO0dDQQuMQDQ0tNA7R0NDC/wfFa72hJV1HvQAAAABJRU5ErkJggigAAAAwAAAAYAAA\
+AAEAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A////AP///wD///8A////AP///wD///8A\
+////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/\
+//8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//\
+/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////\
+AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A\
+////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/\
+//8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//\
+/wD///8A////AP///wD///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHx8jbh8fIz4AAAAAAAAAAB8fI7AfHyOx\
+AAAAAAAAAAAfHyM+Hx8jbgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP///wD///8A////AAAAAAAAAAAAAAAAAAAA\
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfHyM9Hx8jIgAAAAAfHyMUHx8j\
++x8fI/YfHyM5Hx8jVR8fI/8fHyP/Hx8jVh8fIzkfHyP2Hx8j+x8fIxUAAAAAHx8jIR8fIz0AAAAA\
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP///wD/\
+//8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\
+AAAfHyPlHx8j8x8fI18fHyN5Hx8j/x8fI/8fHyP2Hx8j9h8fI/8fHyP/Hx8j9h8fI/YfHyP/Hx8j\
+/x8fI3ofHyNfHx8j8x8fI+UAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\
+AAAAAAAAAAAAAAAA////AP///wD///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\
+AAAAAAAAAB8fIyMfHyNQHx8jBB8fIw8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8f\
+I/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyMQHx8jBB8fI1AfHyMjAAAA\
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP///wD///8A////AAAAAAAAAAAA\
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8fI4QfHyP/Hx8j3x8fI6gfHyP/Hx8j/x8fI/8f\
+HyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8f\
+I/8fHyOoHx8j3x8fI/8fHyOEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////\
+AP///wD///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8fI4AfHyP/\
+Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8f\
+HyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyOAAAAAAAAAAAAAAAAAAAAAAAAA\
+AAAAAAAAAAAAAAAAAAAAAAAA////AP///wD///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\
+AB8fI38fHyOoHx8jax8fI60fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP8Hx8jwh8fI34fHyNQ\
+Hx8jLR8fIx8fHyMfHx8jLR8fI08fHyN9Hx8jwR8fI/wfHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8f\
+HyOvHx8jax8fI6gfHyN/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP///wD///8A////AAAA\
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8fI6gfHyP/Hx8j/x8fI/8fHyP/Hx8jnR8fI14fHyPmHx8j\
+/x8fI48fHyMYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8fIxkfHyOc\
+Hx8j/x8fI84fHyNIHx8jrB8fI/8fHyP/Hx8j/x8fI/8fHyOoAAAAAAAAAAAAAAAAAAAAAAAAAAAA\
+AAAA////AP///wD///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8fI2sfHyP/Hx8j/x8f\
+I/8fHyP/Hx8jCAAAAAAfHyOIHx8j/x8fIxAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\
+AAAAAAAAAAAAAAAAAAAAAAAfHyMvHx8j/x8fI2YAAAAAHx8jKh8fI/8fHyP/Hx8j/x8fI/8fHyNr\
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP///wD///8A////AAAAAAAAAAAAAAAAAB8fIyMf\
+HyOEHx8jgB8fI68fHyP/Hx8j/x8fI/8fHyP/Hx8jhB8fIz8fHyPcHx8j2AAAAAAAAAAAAAAAAAAA\
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfHyMDHx8j9R8fI84fHyNJHx8j\
+rR8fI/8fHyP/Hx8j/x8fI/8fHyOvHx8jgB8fI4QfHyMjAAAAAAAAAAAAAAAA////AP///wD///8A\
+////AAAAAAAAAAAAAAAAAB8fI1AfHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8f\
+HyP/Hx8jnQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\
+AAAAAAAAHx8jvB8fI/8fHyP/Hx8j/x8fI/sfHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyNQAAAA\
+AAAAAAAAAAAA////AP///wD///8A////AAAAAAAAAAAAAAAAAB8fIwQfHyPfHx8j/x8fI/8fHyP/\
+Hx8j/x8fI+UfHyMjHx8jNv///wD///8A////AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHx8jIR8fI3z///8AHx8jHR8fIx4fHyPlHx8j/x8f\
+I/8fHyP/Hx8j/x8fI98fHyMEAAAAAAAAAAAAAAAA////AP///wD///8A////AAAAAAAAAAAAAAAA\
+AB8fIw8fHyOoHx8j/x8fI/8fHyP/Hx8j/////wD///8A////AP///wD///8A////AP///wD///8A\
+////AP///wD///8A////AP///wD///8AAAAAAAAAAAAAAAAA////AP///wD///8A////AP///wD/\
+//8A////AP///wD///8AHx8j/x8fI/8fHyP/Hx8j/x8fI6gfHyMPAAAAAAAAAAAAAAAA////AP//\
+/wD///8A////AAAAAAAfHyM9Hx8j5R8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j\
+/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/////8AAAAAAAAAAAAAAAAA\
+Hx8jXx8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8f\
+HyP/Hx8j5R8fIz0AAAAA////AP///wD///8A////AAAAAAAfHyMhHx8j8x8fI/8fHyP/Hx8j/x8f\
+I/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j\
+/x8fI/////8AAAAAAAAAAAAfHyMSHx8j8x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/\
+Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j8x8fIyEAAAAA////AP///wD///8A////AAAAAAAA\
+AAAAHx8jXx8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8f\
+I/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/////8AAAAAAAAAAAAfHyNYHx8j/x8fI/8fHyP/Hx8j\
+/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8jXwAAAAAAAAAA\
+////AP///wD///8A////AAAAAAAfHyMVHx8jeh8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8f\
+HyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/////8AAAAAAAAA\
+AAAfHyOXHx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j\
+/x8fI/8fHyP/Hx8jeh8fIxUAAAAA////AP///wD///8A////AB8fI24fHyP7Hx8j/x8fI/8fHyP/\
+Hx8j/x8fI+L///8A////AP///wD///8A////AB8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/////wD/\
+//8A////AP///wD///8AAAAAAAAAAAAfHyPMHx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j////\
+/wD///8AHx8j/R8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/sfHyNu////AP///wD///8A////\
+AB8fIz4fHyP2Hx8j/x8fI/8fHyP/Hx8j/x8fI2cAAAAAAAAAAAAAAAAAAAAA////AB8fI/8fHyP/\
+Hx8j/x8fI/8fHyP/Hx8j/////wAAAAAAAAAAAP///wD///8AAAAAAB8fIxEfHyP7Hx8j/x8fI/8f\
+HyP/Hx8j/x8fI/8fHyP/Hx8jfwAAAAAAAAAAHx8jRh8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8f\
+I/YfHyM+////AP///wD///8A////AAAAAAAfHyM5Hx8j9h8fI/8fHyP/Hx8j/x8fIzIAAAAAAAAA\
+AAAAAAAAAAAA////AB8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/////wAAAAAAAAAAAAAAAAAAAAAA\
+AAAAAB8fI5UfHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8jLAAAAAAAAAAAAAAAAB8fI+of\
+HyP/Hx8j/x8fI/8fHyP/Hx8j9h8fIzkAAAAA////AP///wD///8A////AAAAAAAfHyNWHx8j9h8f\
+I/8fHyP/Hx8j/x8fIxAAAAAAAAAAAAAAAAAAAAAA////AB8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j\
+/////wD///8A////AP///wD///8AHx8jxh8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyPf\
+Hx8jAQAAAAAAAAAAAAAAAB8fI9sfHyP/Hx8j/x8fI/8fHyP/Hx8j9h8fI1YAAAAA////AP///wD/\
+//8A////AB8fI7EfHyP/Hx8j/x8fI/8fHyP/Hx8j/QAAAAAAAAAAAAAAAAAAAAAAAAAA////AB8f\
+I/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j\
+/x8fI/8fHyP/Hx8j/x8fI/8fHyNTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHx8j+B8fI/8fHyP/\
+Hx8j/x8fI/8fHyOx////AP///wD///8A////AB8fI7AfHyP/Hx8j/x8fI/8fHyP/Hx8j9wAAAAAA\
+AAAAAAAAAAAAAAAAAAAA////AB8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8f\
+I/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j+x8fI18AAAAAAAAAAAAAAAAAAAAAAAAA\
+AAAAAAAAAAAAHx8j9h8fI/8fHyP/Hx8j/x8fI/8fHyOw////AP///wD///8A////AAAAAAAfHyNV\
+Hx8j9h8fI/8fHyP/Hx8j/x8fIwoAAAAAAAAAAAAAAAAAAAAA////AB8fI/8fHyP/Hx8j/x8fI/8f\
+HyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8f\
+I5ofHyMJAAAAAAAAAAAAAAAAAAAAAAAAAAAfHyMbHx8j/x8fI/8fHyP/Hx8j9h8fI1UAAAAA////\
+AP///wD///8A////AAAAAAAfHyM6Hx8j9h8fI/8fHyP/Hx8j/x8fI+wfHyOEHx8jGAAAAAAAAAAA\
+////AB8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/////wD///8A////AP///wD///8A////AP///wAf\
+HyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyO+Hx8jBwAAAAAAAAAAHx8jMh8fI6QfHyP6Hx8j/x8f\
+I/8fHyP/Hx8j9h8fIzoAAAAA////AP///wD///8A////AB8fIz4fHyP2Hx8j/x8fI/8fHyP/Hx8j\
+8R8fI8MfHyP/Hx8j+R8fI0gAAAAA////AB8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/////wAAAAAA\
+////AP///wD///8AAAAAAB8fIxYfHyOuHx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8jgwAAAAAf\
+HyNyHx8j/x8fI/UfHyOwHx8j8x8fI/8fHyP/Hx8j/x8fI/YfHyM+////AP///wD///8A////AB8f\
+I24fHyP7Hx8j/x8fI/8fHyP/Hx8jOgAAAAAfHyOKHx8j/x8fI30AAAAA////AB8fI/8fHyP/Hx8j\
+/x8fI/8fHyP/Hx8j/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8AHx8j/x8fI/8fHyP/\
+Hx8j/x8fI/8fHyP/Hx8j7x8fIwMfHyOdHx8j/x8fI2AAAAAAHx8jWB8fI/8fHyP/Hx8j/x8fI/sf\
+HyNu////AP///wD///8A////AAAAAAAfHyMUHx8jeR8fI/8fHyP/Hx8jQgAAAAAfHyOTHx8j/R8f\
+IyAAAAAA////AB8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/////wAfHyMgHx8jIB8fIyAfHyMgHx8j\
+Iv///wAfHyPeHx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fIxIfHyM5Hx8j/x8fI3gAAAAA\
+Hx8jcB8fI/8fHyP/Hx8jeR8fIxQAAAAA////AP///wD///8A////AAAAAAAAAAAAHx8jXx8fI/8f\
+HyP/Hx8j9x8fI9EfHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8f\
+I/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j\
+9R8fIwUAAAAAHx8jyR8fI/8fHyPeHx8j/x8fI/8fHyP/Hx8jXwAAAAAAAAAA////AP///wD///8A\
+////AAAAAAAfHyMiHx8j8x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8f\
+HyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8f\
+I/8fHyP/Hx8j/x8fI/8fHyP/Hx8jnwAAAAAAAAAAHx8jVx8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j\
+8x8fIyIAAAAA////AP///wD///8A////AAAAAAAfHyM9Hx8j5R8fI/8fHyP/Hx8j/x8fI/8fHyP/\
+Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8f\
+HyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyPjHx8jFwAAAAAAAAAAHx8jVR8f\
+I/8fHyP/Hx8j/x8fI/8fHyP/Hx8j5R8fIz0AAAAA////AP///wD///8A////AAAAAAAAAAAAAAAA\
+AB8fIw8fHyOoHx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/\
+Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI8cf\
+HyMfAAAAAAAAAAAfHyMVHx8j6B8fI/8fHyP/Hx8j/x8fI6gfHyMPAAAAAAAAAAAAAAAA////AP//\
+/wD///8A////AAAAAAAAAAAAAAAAAB8fIwQfHyPfHx8j/x8fI/8fHyP/Hx8j/x8fI/////8A////\
+AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A\
+////AP///wD///8A////AP///wAAAAAAAAAAAB8fIwYfHyPBHx8j/x8fI/8fHyP/Hx8j/x8fI98f\
+HyMEAAAAAAAAAAAAAAAA////AP///wD///8A////AAAAAAAAAAAAAAAAAB8fI1AfHyP/Hx8j/x8f\
+I/8fHyP/Hx8j/x8fI/8fHyOtHx8jBgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\
+AAAAAAAAAAAA////AP///wD///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAHx8jBh8fI7IfHyP/\
+Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyNQAAAAAAAAAAAAAAAA////AP///wD///8A////AAAAAAAA\
+AAAAAAAAAB8fIyMfHyODHx8jgB8fI60fHyP/Hx8j/x8fI/8fHyP/Hx8juh8fIxEAAAAAAAAAAAAA\
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\
+AAAAAAAfHyMSHx8jux8fI/8fHyP/Hx8j/x8fI/8fHyOuHx8jgB8fI4MfHyMjAAAAAAAAAAAAAAAA\
+////AP///wD///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8fI2sfHyP/Hx8j/x8fI/8f\
+HyP/Hx8j/x8fI+IfHyNEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHx8jBR8fI3MfHyNYAAAAAAAA\
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8fI0cfHyPgHx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyNsAAAA\
+AAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP///wD///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAA\
+AAAAAB8fI6gfHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8jsB8fIzMAAAAAAAAAAAAAAAAf\
+HyMDHx8jpR8fI/8fHyP/Hx8jggAAAAAAAAAAAAAAAAAAAAAfHyMyHx8jsB8fI/8fHyP/Hx8j/x8f\
+I/8fHyP/Hx8j/x8fI/8fHyOoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP///wD///8A////\
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8fI38fHyOoHx8jax8fI60fHyP/Hx8j/x8fI/8fHyP/\
+Hx8j/x8fI/8fHyPKHx8jdx8fIzUfHyObHx8j/x8fI6wfHyO7Hx8j/x8fI4sfHyM4Hx8jdx8fI88f\
+HyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyOvHx8jax8fI6gfHyN/AAAAAAAAAAAAAAAAAAAAAAAA\
+AAAAAAAA////AP///wD///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\
+AB8fI4AfHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8jwgAAAAAfHyMD\
+Hx8j4R8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyOAAAAAAAAAAAAA\
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP///wD///8A////AAAAAAAAAAAAAAAAAAAA\
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8fI4QfHyP/Hx8j3x8fI6gfHyP/Hx8j/x8fI/8fHyP/Hx8j\
+/x8fI/8fHyP/Hx8j4x8fIxUfHyMlHx8j9R8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyOo\
+Hx8j3x8fI/8fHyOEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP///wD/\
+//8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8fIyMfHyNQHx8jBB8f\
+Iw8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/wfHyP+Hx8j/x8fI/8fHyP/Hx8j\
+/x8fI/8fHyP/Hx8j/x8fI/8fHyMQHx8jBB8fI1AfHyMjAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\
+AAAAAAAAAAAAAAAA////AP///wD///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfHyPlHx8j8x8fI18fHyN5Hx8j/x8fI/8fHyP2Hx8j9h8f\
+I/8fHyP/Hx8j9h8fI/YfHyP/Hx8j/x8fI3sfHyNfHx8j8x8fI+UAAAAAAAAAAAAAAAAAAAAAAAAA\
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP///wD///8A////AAAAAAAAAAAA\
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfHyM9Hx8jIgAAAAAf\
+HyMUHx8j+h8fI/YfHyM6Hx8jVR8fI/8fHyP/Hx8jVh8fIzkfHyP2Hx8j+x8fIxUAAAAAHx8jIR8f\
+Iz0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////\
+AP///wD///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHx8jbh8fIz4AAAAAAAAAAB8fI7AfHyOxAAAAAAAAAAAf\
+HyM+Hx8jbgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\
+AAAAAAAAAAAAAAAAAAAAAAAA////AP///wD///8A////AP///wD///8A////AP///wD///8A////\
+AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A\
+////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/\
+//8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//\
+/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////\
+AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A\
+////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD/\
+//8A////AP///wD///////8AAP///////wAA///+f///AAD//+Zn//8AAP/+YAZ//wAA//4AAH//\
+AAD/4AAAB/8AAP/gAAAH/wAA/6AP8AX/AAD/Aj/8QP8AAP+Gf/7h/wAA/AJ//kA/AAD8AH/+AD8A\
+APwP///wPwAA/B////g/AADwAAD4AA8AAPAAAPAADwAA+AAA8AAfAAD4AADgAB8AAOB8D+AYBwAA\
+4PwP4DwHAADw/A/APA8AAPD8D4A8DwAAwPwAAH8DAADA/AAA/wMAAPD8AAB/DwAA8DwP4DwPAADg\
+HA/gGAcAAOGcD/AThwAA+ZwP4BufAAD4AAAAGB8AAPAAAAAcDwAA8AAAADwPAAD8AAAAeD8AAPwP\
+///wPwAA/Af//+A/AAD8A///wD8AAP+B//+B/wAA/wB8PgD/AAD/oBgYBf8AAP/gAYAH/wAA/+AB\
+gAf/AAD//gAAf/8AAP/+YAZ//wAA///mZ///AAD///5///8AAP///////wAA////////AAAoAAAA\
+IAAAAEAAAAABACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP///wD///8A////AP///wD/\
+//8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP//\
+/wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8AAAAA\
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfHyM3Hx8jiB8fIwEfHyOY\
+Hx8jmB8fIwEfHyOIHx8jNwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\
+AAAA////AP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8fIwwfHyPTHx8jRx8f\
+I6cfHyP/Hx8jtx8fI/4fHyP/Hx8jth8fI/8fHyOnHx8jRx8fI9MfHyMMAAAAAAAAAAAAAAAAAAAA\
+AAAAAAAAAAAAAAAAAAAAAAD///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8fI0YfHyNc\
+Hx8jPB8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fIzwf\
+HyNcHx8jRgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8AAAAAAAAAAAAAAAAAAAAAAAAA\
+AAAAAAAAHx8jix8fI/8fHyP+Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j\
+/x8fI/8fHyP/Hx8j/h8fI/8fHyOLAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP///wAAAAAA\
+AAAAAAAAAAAAAAAAHx8jiB8fI5gfHyPAHx8j/x8fI/8fHyP/Hx8j/x8fI8EfHyN4Hx8jSR8fIzAf\
+HyMwHx8jSR8fI3cfHyPBHx8j/x8fI/8fHyP6Hx8j/x8fI8AfHyOYHx8jiAAAAAAAAAAAAAAAAAAA\
+AAD///8A////AAAAAAAAAAAAAAAAAAAAAAAfHyOYHx8j/x8fI/8fHyOnHx8jEB8fI+YfHyNgAAAA\
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfHyNzHx8jzx8fIwYfHyO7Hx8j/x8fI/8fHyOY\
+AAAAAAAAAAAAAAAAAAAAAP///wD///8AAAAAAAAAAAAfHyNGHx8jix8fI8AfHyP/Hx8j/x8fI9Ef\
+HyNkHx8j9h8fIyEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8fIzcfHyPvHx8jbB8f\
+I+IfHyP/Hx8j/x8fI8AfHyOLHx8jRgAAAAAAAAAA////AP///wAAAAAAAAAAAB8fI1wfHyP/Hx8j\
+/x8fI/8fHyP1Hx8jmB8fI8sfHyO9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\
+Hx8jBh8fI8UfHyO7Hx8jix8fI/YfHyP/Hx8j/x8fI/8fHyNcAAAAAAAAAAD///8A////AAAAAAAf\
+HyMMHx8jPB8fI/4fHyP/Hx8j/x8fI7b///8A////AP///wD///8A////AP///wD///8A////AP//\
+/wD///8AAAAAAP///wD///8A////AP///wD///8AHx8jth8fI/8fHyP/Hx8j/h8fIzwfHyMMAAAA\
+AP///wD///8AAAAAAB8fI9MfHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/\
+Hx8j/x8fI/8fHyP/////AP///wAfHyMhHx8j8R8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8f\
+HyP/Hx8j/x8fI9MAAAAA////AP///wAAAAAAHx8jRx8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8f\
+I/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/////8A////AP///wAfHyP/Hx8j/x8fI/8fHyP/Hx8j\
+/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8jRwAAAAD///8A////AB8fIzcfHyOnHx8j/x8fI/8fHyP/\
+Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/////wAAAAAAHx8jvR8fI/8f\
+HyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyOnHx8jN////wD///8AHx8jiB8f\
+I/8fHyP/Hx8j/////wD///8A////AP///wAfHyP/Hx8j/x8fI/8fHyP/////AAAAAAAAAAAAAAAA\
+AB8fIwcfHyPyHx8j/x8fI/8fHyP/Hx8j/x8fI1YfHyMeHx8jwR8fI/8fHyP/Hx8j/x8fI/8fHyOI\
+////AP///wAfHyMBHx8jtx8fI/8fHyP/Hx8jNAAAAAAAAAAA////AB8fI/8fHyP/Hx8j/x8fI///\
+//8AHx8jEB8fIxAfHyMXHx8jlB8fI/8fHyP/Hx8j/x8fI/8fHyPmAAAAAAAAAAAfHyNnHx8j/x8f\
+I/8fHyP/Hx8jtx8fIwH///8A////AB8fI5gfHyP/Hx8j/x8fI/8fHyMbAAAAAAAAAAD///8AHx8j\
+/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI3EAAAAA\
+AAAAAB8fIx0fHyNbHx8j/x8fI/8fHyP/Hx8jmP///wD///8AHx8jmB8fI/4fHyP/Hx8j/x8fIxYA\
+AAAAAAAAAP///wAfHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8f\
+I/8fHyOyHx8jAQAAAAAAAAAAAAAAAB8fIxUfHyP/Hx8j/x8fI/8fHyOY////AP///wAfHyMBHx8j\
+tx8fI/8fHyP/Hx8jnh8fIycAAAAA////AB8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/\
+Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyN3AAAAAAAAAAAfHyM7Hx8jsB8fI/8fHyP/Hx8jtx8fIwH/\
+//8A////AB8fI4gfHyP/Hx8j/x8fI+cfHyOgHx8j/f///wD///8AHx8j/x8fI/8fHyP/Hx8j////\
+/wAAAAAAAAAAAAAAAAAfHyMS////AB8fI/8fHyP/Hx8j/x8fI/////8A////AB8fI/kfHyOPHx8j\
+7B8fI/8fHyP/Hx8jiP///wD///8AHx8jNx8fI6cfHyP/Hx8jjB8fIwEfHyPk////AP///wAfHyP/\
+Hx8j/x8fI/8fHyP/////AAAAAAAAAAAAAAAAAB8fIxj///8AHx8j/x8fI/8fHyP/Hx8j/////wD/\
+//8AHx8jzwAAAAAfHyOmHx8j/x8fI6cfHyM3////AP///wAAAAAAHx8jRx8fI/8fHyP7Hx8j1x8f\
+I/8fHyPyHx8j9x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j\
+/x8fI/8fHyP/////AB8fIwsfHyPuHx8j3h8fI/8fHyP/Hx8jRwAAAAD///8A////AAAAAAAfHyPT\
+Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8f\
+HyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI+v///8AAAAAAB8fI6cfHyP/Hx8j/x8fI/8fHyPTAAAAAP//\
+/wD///8AAAAAAB8fIwwfHyM7Hx8j/h8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j\
+/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyPXHx8jMgAAAAAfHyMxHx8j+h8fI/8fHyP+\
+Hx8jPB8fIwwAAAAA////AP///wAAAAAAAAAAAB8fI10fHyP/Hx8j/x8fI/8fHyP/////AP///wD/\
+//8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wAAAAAAHx8jHB8f\
+I+AfHyP/Hx8j/x8fI/8fHyNdAAAAAAAAAAD///8A////AAAAAAAAAAAAHx8jRh8fI4sfHyPAHx8j\
+/x8fI/8fHyPfHx8jLwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\
+AAAAAB8fIy4fHyPfHx8j/x8fI/8fHyPAHx8jix8fI0YAAAAAAAAAAP///wD///8AAAAAAAAAAAAA\
+AAAAAAAAAB8fI5gfHyP/Hx8j/x8fI/8fHyP5Hx8jfx8fIwwAAAAAAAAAAB8fIwofHyOrHx8jlR8f\
+IwMAAAAAAAAAAB8fIwsfHyN5Hx8j+B8fI/8fHyP/Hx8j/x8fI5gAAAAAAAAAAAAAAAAAAAAA////\
+AP///wAAAAAAAAAAAAAAAAAAAAAAHx8jiB8fI5gfHyPAHx8j/x8fI/8fHyP/Hx8j8B8fI5MfHyNL\
+Hx8jth8fI8ofHyPTHx8jqx8fI0gfHyORHx8j7B8fI/8fHyP/Hx8j/x8fI8AfHyOYHx8jiAAAAAAA\
+AAAAAAAAAAAAAAD///8A////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8fI4sfHyP/Hx8j/h8f\
+I/8fHyP/Hx8j/x8fI/8fHyP/Hx8jKx8fI0MfHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/4fHyP/Hx8j\
+iwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wD///8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\
+Hx8jRh8fI1wfHyM8Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyPbHx8j4h8fI/8fHyP/Hx8j/x8fI/8f\
+HyP/Hx8jPB8fI1wfHyNGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////AP///wAAAAAAAAAAAAAA\
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8fIwwfHyPTHx8jRx8fI6cfHyP/Hx8jtx8fI/4fHyP/Hx8j\
+tx8fI/8fHyOnHx8jRx8fI9MfHyMMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///8A\
+////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHx8jNx8fI4gf\
+HyMBHx8jmB8fI5gfHyMBHx8jiB8fIzcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\
+AAAAAAAAAAAAAP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////\
+AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A////AP///wD///8A\
+////AP///wD///8A////AP///wD///8A////AP//////+l///9AL///AA//+AAB/+AfgH/hf+h/w\
+X/oP8B/4D/D//w/AAOAD4ADgB8AAwAOHh8GBx4eBw4eAA+GHgAPhw4ADw4GH4YHFh+Gj4AABh8AA\
+AYPwAAOP8P//D/B//g/4Pnwf+AQgH/4BgH//wAP//9AL///6X///////KAAAABAAAAAgAAAAAQAg\
+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfHyM2Hx8jmh8fI98fHyP6\
+Hx8j+h8fI98fHyOaHx8jNgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB8fIw4fHyOlHx8j/x8fI/8f\
+HyP/Hx8j+x8fI/sfHyP/Hx8j/x8fI/8fHyOlHx8jDgAAAAAAAAAAAAAAAB8fIw4fHyPJHx8j/x8f\
+I/IfHyODHx8jJh8fIwIfHyMCHx8jJh8fI4MfHyPyHx8j/x8fI8kfHyMOAAAAAAAAAAAfHyOlHx8j\
+/x8fI9sfHyMhAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHx8jIR8fI9sfHyP/Hx8jpQAAAAAfHyM2\
+Hx8j/x8fI/8fHyO9Hx8joB8fI6AfHyOgHx8joB8fIycfHyMZHx8jmB8fI6AfHyO9Hx8j/x8fI/8f\
+HyM2Hx8jmh8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyNAHx8jkR8fI/8fHyP/Hx8j/x8f\
+I/8fHyP/Hx8jmh8fI98fHyP/Hx8jex8fI3kfHyP/Hx8j/x8fI84fHyNgHx8jFx8fI9QfHyP/Hx8j\
+/h8fI3YfHyNtHx8j/x8fI98fHyP6Hx8j9gAAAAAfHyMQHx8j/x8fI/8fHyPiHx8joB8fI7gfHyP/\
+Hx8j/x8fI8AAAAAAAAAAAB8fI/YfHyP6Hx8j+h8fI/kAAAAAHx8jEB8fI/8fHyP/Hx8j/x8fI/8f\
+HyP/Hx8j/x8fI/8fHyNoAAAAAAAAAAAfHyP5Hx8j+h8fI98fHyP/Hx8jJR8fIxAfHyP/Hx8j/x8f\
+I7ofHyMgHx8jIx8fI7sfHyP/Hx8j/B8fIyAfHyMlHx8j/x8fI98fHyOaHx8j/x8fI9UfHyPEHx8j\
+/x8fI/8fHyPxHx8j0B8fI9MfHyP+Hx8j/x8fI/8fHyMtHx8jgR8fI/8fHyOaHx8jNh8fI/8fHyP/\
+Hx8j/x8fI/8fHyP/Hx8j/x8fI/8fHyP/Hx8j/x8fI/gfHyOCHx8jIx8fI/IfHyP/Hx8jNgAAAAAf\
+HyOlHx8j/x8fI+sfHyNDHx8jIB8fIyAfHyMgHx8jIB8fIyAfHyMMHx8jIx8fI9kfHyP/Hx8jpQAA\
+AAAAAAAAHx8jDh8fI8kfHyP/Hx8j9B8fI4AfHyMmAAAAAAAAAAAfHyMlHx8jgR8fI/IfHyP/Hx8j\
+yR8fIw4AAAAAAAAAAAAAAAAfHyMOHx8jpR8fI/8fHyP/Hx8j/x8fI/ofHyP5Hx8j/x8fI/8fHyP/\
+Hx8jpR8fIw4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAfHyM2Hx8jmh8fI98fHyP6Hx8j+h8fI98f\
+HyOaHx8jNgAAAAAAAAAAAAAAAAAAAAD4HwAA4AcAAMPDAACP8QAAgMEAAACAAAAxjAAAMAwAADAc\
+AAAxjAAAAAgAAIAJAACP8QAAw8MAAOAHAAD4HwAA"
+,
        html_root_url = "http://doc.rust-lang.org/nightly/")]
 #![doc(test(no_crate_inject))]
SimonSapin commented 9 years ago

Alternative idea: when the string’s value in #![doc(html_logo_url = "...")] is not an absolute URL (i.e. doesn’t match ^[a-zA-Z0-9+.-]+:), have rustdoc interpret it as a file name relative to the source file (like include_bin!), copy that file somewhere into target/doc/, and fix up the URL when it’s being used to have the right number of ../ components, like for main.css.

alexcrichton commented 9 years ago

I think it'd be fine to just check in these assets and then have the build system ensure they move along to the right location, the crates could then just change the URL for the favicon/logo as they'll be hosted on doc.rust-lang.org

llogiq commented 9 years ago

I think @SimonSapin is on the right track – perhaps it'd be good to have a %ROOT (or some such) wildcard that inserts the right number of "../" according to the current URL. Relative URLs will work even if the source files are moved around.

steveklabnik commented 7 years ago

Triage: no change

GuillaumeGomez commented 5 years ago

I'll fix it.

GuillaumeGomez commented 5 years ago

Fixed by #57552.

SimonSapin commented 5 years ago

And https://github.com/rust-lang/rust/pull/58185