25914 | SPOT подлинная бесплатная доставка Домашний дизайн и реализация компилятора (китайская версия)

Цена: 1 585руб. (¥75)
Артикул: 589508694688
Вес товара: ~0.7 кг. Указан усредненный вес, который может отличаться от фактического. Не включен в цену, оплачивается при получении.
Описание товараPHA+PGltZyBjbGFzcz0iZGVzY19hbmNob3IiIGlkPSJkZXNjLW1vZHVsZS0xIiBzcmM9Imh0dHBzOi8vYXNzZXRzLmFsaWNkbi5jb20va2lzc3kvMS4wLjAvYnVpbGQvaW1nbGF6eWxvYWQvc3BhY2ViYWxsLmdpZiI+PHRhYmxlIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjAiIGNlbGxzcGFjaW5nPSIwIiBzdHlsZT0ibWFyZ2luOiAwLjBweCBhdXRvOyI+PHRyPjx0ZD48ZGl2IGNsYXNzPSJobGdfbGlzdF8zMDM5ODMyNSI+PGRpdiBjbGFzcz0iaGxnX3Bvc3RlciIgc3R5bGU9InBvc2l0aW9uOiA7Ij48aW1nIHNyYz0iaHR0cHM6Ly9pbWcuYWxpY2RuLmNvbS9pbWdleHRyYS9pMS8yMTcwNDI5NzYvTzFDTjAxZk1VUjdPMVhyM0hTYkZhek8tMjE3MDQyOTc2LnBuZyIgd2lkdGg9Ijc1MCIgaGVpZ2h0PSIxMTg1IiBhbHQ9IlvmrKLkuZDpgJvmtbfmiqVdIiB1c2VtYXA9IiNtX3RlbXBsZXQ3OTA2NzYzIiBib3JkZXI9IjAiPjwvZGl2PjwvZGl2PjwvdGQ+PC90cj48L3RhYmxlPjx0YWJsZSBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIwIiBjZWxsc3BhY2luZz0iMCIgc3R5bGU9Im1hcmdpbjogMC4wcHggYXV0bzsiPjx0cj48dGQ+PGRpdiBjbGFzcz0iaGxnX2xpc3RfMjczMTAxMzMiPjxpbWcgc3JjPSJodHRwczovL2ltZy5hbGljZG4uY29tL2ltZ2V4dHJhL2kyLzIxNzA0Mjk3Ni9PMUNOMDF5dXBzVEQxWHIzRnlqN3hGbS0yMTcwNDI5NzYuanBnIiB3aWR0aD0iNzkwIiBoZWlnaHQ9IjIyMiIgYWx0PSJb5qyi5LmQ6YCb5rW35oqlXSIgdXNlbWFwPSIjbV90ZW1wbGV0NzY4MjE2MyIgYm9yZGVyPSIwIj48bWFwIG5hbWU9Im1fdGVtcGxldDc2ODIxNjMiPjxhcmVhIHNoYXBlPSJyZWN0IiBjb29yZHM9IjgsLTYsMTA2LDQwIiBocmVmPSJodHRwczovL2F3YnN0cy50bWFsbC5jb20vcC9yZDU3NjA0Ny5odG0/c3BtPWEyMjBvLjEwMDA4NTUudzUwMDMtMjIxMjc2MTk2OTkuMi5iN2MzNDAzMUFhS0VFMiZhbXA7c2NlbmU9dGFvYmFvX3Nob3AiPjxhcmVhIHNoYXBlPSJyZWN0IiBjb29yZHM9IjExNiwtNywyMjIsNDIiIGhyZWY9Imh0dHBzOi8vYXdic3RzLnRtYWxsLmNvbS9wL3JkNjAzOTY4Lmh0bT9zcG09YTIyMG8uMTAwMDg1NS53NTAwMy0yMjEyNzYxOTY5OS4zLmI3YzM0MDMxQWFLRUUyJmFtcDtzY2VuZT10YW9iYW9fc2hvcCI+PGFyZWEgc2hhcGU9InJlY3QiIGNvb3Jkcz0iMjI3LC02LDMzNCw0MSIgaHJlZj0iaHR0cHM6Ly9hd2JzdHMudG1hbGwuY29tL3AvcmQ3MzIxMzguaHRtP3NwbT1hMjIwby4xMDAwODU1Lnc1MDAzLTIyMTI3NjE5Njk5LjQuYjdjMzQwMzFBYUtFRTImYW1wO3NjZW5lPXRhb2Jhb19zaG9wIj48YXJlYSBzaGFwZT0icmVjdCIgY29vcmRzPSIzNDQsLTUsNDM4LDQwIiBocmVmPSJodHRwczovL2F3YnN0cy50bWFsbC5jb20vcC9yZDIxMjU5MS5odG0/c3BtPWEyMjBvLjEwMDA4NTUudzUwMDMtMjIxMjc2MTk2OTkuNS5iN2MzNDAzMUFhS0VFMiZhbXA7c2NlbmU9dGFvYmFvX3Nob3AiPjxhcmVhIHNoYXBlPSJyZWN0IiBjb29yZHM9IjQ1NSwtNiw1NTUsNDEiIGhyZWY9Imh0dHBzOi8vYXdic3RzLnRtYWxsLmNvbS9wL3JkNjYwNTgyLmh0bT9zcG09YTIyMG8uMTAwMDg1NS53NTAwMy0yMjEyNzYxOTY5OS42LmI3YzM0MDMxQWFLRUUyJmFtcDtzY2VuZT10YW9iYW9fc2hvcCI+PGFyZWEgc2hhcGU9InJlY3QiIGNvb3Jkcz0iNTc0LDAsNjY4LDQwIiBocmVmPSJodHRwczovL2F3YnN0cy50bWFsbC5jb20vcC9yZDczMzgyMi5odG0/c3BtPWEyMjBvLjEwMDA4NTUudzUwMDMtMjIxMjc2MTk2OTkuNy5iN2MzNDAzMUFhS0VFMiZhbXA7c2NlbmU9dGFvYmFvX3Nob3AiPjxhcmVhIHNoYXBlPSJyZWN0IiBjb29yZHM9IjY4MiwtNCw3NzUsNDEiIGhyZWY9Imh0dHBzOi8vYXdic3RzLnRtYWxsLmNvbS9wL3JkMjk5NjI1Lmh0bT9zcG09YTIyMG8uMTAwMDg1NS53NTAwMy0yMjEyNzYxOTY5OS44LmI3YzM0MDMxQWFLRUUyJmFtcDtzY2VuZT10YW9iYW9fc2hvcCI+PGFyZWEgc2hhcGU9InJlY3QiIGNvb3Jkcz0iOCw0NiwxMDUsMjE4IiBocmVmPSJodHRwczovL21hcmtldC5tLnRhb2Jhby5jb20vYXBwL3RiLXNvdXJjZS1hcHAvc2hvcGFjdC9wYWdlcy9pbmRleD93aF93ZWV4PXRydWUmYW1wO3BhdGhJbmZvPXNob3AvYWN0aXZpdHkmYW1wO3VzZXJJZD0yMTcwNDI5NzYmYW1wO3Nob3BJZD01Nzg5NDQ2NCZhbXA7cGFnZUlkPTEyMTgyMjIwOCZhbXA7YWxpc2l0ZT10cnVlIj48YXJlYSBzaGFwZT0icmVjdCIgY29vcmRzPSIxMTUsNDgsMjE4LDIxNCIgaHJlZj0iaHR0cHM6Ly9tYXJrZXQubS50YW9iYW8uY29tL2FwcC90Yi1zb3VyY2UtYXBwL3Nob3BhY3QvcGFnZXMvaW5kZXg/d2hfd2VleD10cnVlJmFtcDtwYXRoSW5mbz1zaG9wL2FjdGl2aXR5JmFtcDt1c2VySWQ9MjE3MDQyOTc2JmFtcDtzaG9wSWQ9NTc4OTQ0NjQmYW1wO3BhZ2VJZD0xODA2MzA0NzgmYW1wO2FsaXNpdGU9dHJ1ZSI+PGFyZWEgc2hhcGU9InJlY3QiIGNvb3Jkcz0iMjMxLDUxLDMzMCwyMTQiIGhyZWY9Imh0dHBzOi8vbWFya2V0Lm0udGFvYmFvLmNvbS9hcHAvdGItc291cmNlLWFwcC9zaG9wYWN0L3BhZ2VzL2luZGV4P3doX3dlZXg9dHJ1ZSZhbXA7cGF0aEluZm89c2hvcC9hY3Rpdml0eSZhbXA7dXNlcklkPTIxNzA0Mjk3NiZhbXA7c2hvcElkPTU3ODk0NDY0JmFtcDtwYWdlSWQ9MTIzMDIzMjA5JmFtcDthbGlzaXRlPXRydWUiPjxhcmVhIHNoYXBlPSJyZWN0IiBjb29yZHM9IjM0NSw0NCw0NDEsMjE1IiBocmVmPSJodHRwczovL21hcmtldC5tLnRhb2Jhby5jb20vYXBwL3RiLXNvdXJjZS1hcHAvc2hvcGFjdC9wYWdlcy9pbmRleD93aF93ZWV4PXRydWUmYW1wO3BhdGhJbmZvPXNob3AvYWN0aXZpdHkmYW1wO3VzZXJJZD0yMTcwNDI5NzYmYW1wO3Nob3BJZD01Nzg5NDQ2NCZhbXA7cGFnZUlkPTE3OTExNTU1OCZhbXA7YWxpc2l0ZT10cnVlIj48YXJlYSBzaGFwZT0icmVjdCIgY29vcmRzPSI0NTYsNTAsNTU2LDIxNSIgaHJlZj0iaHR0cHM6Ly9tYXJrZXQubS50YW9iYW8uY29tL2FwcC90Yi1zb3VyY2UtYXBwL3Nob3BhY3QvcGFnZXMvaW5kZXg/d2hfd2VleD10cnVlJmFtcDtwYXRoSW5mbz1zaG9wL2FjdGl2aXR5JmFtcDt1c2VySWQ9MjE3MDQyOTc2JmFtcDtzaG9wSWQ9NTc4OTQ0NjQmYW1wO3BhZ2VJZD0xNzY1MTM3NjUmYW1wO2FsaXNpdGU9dHJ1ZSI+PGFyZWEgc2hhcGU9InJlY3QiIGNvb3Jkcz0iNTcxLDQ0LDY3MSwyMTUiIGhyZWY9Imh0dHBzOi8vbWFya2V0Lm0udGFvYmFvLmNvbS9hcHAvdGItc291cmNlLWFwcC9zaG9wYWN0L3BhZ2VzL2luZGV4P3doX3dlZXg9dHJ1ZSZhbXA7cGF0aEluZm89c2hvcC9hY3Rpdml0eSZhbXA7dXNlcklkPTIxNzA0Mjk3NiZhbXA7c2hvcElkPTU3ODk0NDY0JmFtcDtwYWdlSWQ9NTUyMjc0NTcmYW1wO2FsaXNpdGU9dHJ1ZSI+PGFyZWEgc2hhcGU9InJlY3QiIGNvb3Jkcz0iNjgwLDQ0LDc4MywyMDgiIGhyZWY9Imh0dHBzOi8vbWFya2V0Lm0udGFvYmFvLmNvbS9hcHAvdGItc291cmNlLWFwcC9zaG9wYWN0L3BhZ2VzL2luZGV4P3doX3dlZXg9dHJ1ZSZhbXA7cGF0aEluZm89c2hvcC9hY3Rpdml0eSZhbXA7dXNlcklkPTIxNzA0Mjk3NiZhbXA7c2hvcElkPTU3ODk0NDY0JmFtcDtwYWdlSWQ9MTYxMzQyMjIwJmFtcDthbGlzaXRlPXRydWUiPjwvbWFwPjwvZGl2PjwvdGQ+PC90cj48L3RhYmxlPjxwPjxpbWcgc3JjPSJodHRwczovL2ltZy5hbGljZG4uY29tL2ltZ2V4dHJhL2kyLzIxNzA0Mjk3Ni9PMUNOMDEyRklkbEwxWHIzQld1NzY5T18hITIxNzA0Mjk3Ni5qcGciIGFsdD0iW+eJueiJsuWbvuS5puWbvueJhy5qcGddIj48L3A+PHRhYmxlIGJvcmRlcj0iMSIgc3R5bGU9IndpZHRoOiA3OTAuMHB4OyI+PHRyPjx0ZD48aW1nIHNyYz0iaHR0cHM6Ly9pbWcuYWxpY2RuLmNvbS9pbWdleHRyYS9pMy8yMTcwNDI5NzYvTzFDTjAxYUF3WUVTMVhyM0U0MXJWYTFfISEyMTcwNDI5NzYuanBnIiBhbGlnbj0iYWJzbWlkZGxlIiBzdHlsZT0id2lkdGg6IDc4OS4wcHg7Ij48L3RkPjwvdHI+PC90YWJsZT48cD48aW1nIHNyYz0iaHR0cHM6Ly9pbWcuYWxpY2RuLmNvbS9pbWdleHRyYS9pNC8yMTcwNDI5NzYvTzFDTjAxcDJ1cmFxMVhyM0R4Tk9rM29fISEyMTcwNDI5NzYuanBnIiBhbGlnbj0iYWJzbWlkZGxlIiBzdHlsZT0id2lkdGg6IDc5MC4wcHg7Ij48aW1nIHNyYz0iaHR0cHM6Ly9pbWcuYWxpY2RuLmNvbS9pbWdleHRyYS9pMy8yMTcwNDI5NzYvTzFDTjAxbnV6dUFWMVhyM0UxZFpVY05fISEyMTcwNDI5NzYuanBnIiBhbGlnbj0iYWJzbWlkZGxlIiBzdHlsZT0id2lkdGg6IDc5MC4wcHg7Ij48aW1nIHNyYz0iaHR0cHM6Ly9pbWcuYWxpY2RuLmNvbS9pbWdleHRyYS9pMi8yMTcwNDI5NzYvTzFDTjAxejdqREZvMVhyM0R5SlpnOTVfISEyMTcwNDI5NzYuanBnIiBhbGlnbj0iYWJzbWlkZGxlIiBzdHlsZT0id2lkdGg6IDc5MC4wcHg7Ij48aW1nIHNyYz0iaHR0cHM6Ly9pbWcuYWxpY2RuLmNvbS9pbWdleHRyYS9pNC8yMTcwNDI5NzYvTzFDTjAxUklzbEgwMVhyM0R4TlFZS2pfISEyMTcwNDI5NzYuanBnIiBhbGlnbj0iYWJzbWlkZGxlIiBzdHlsZT0id2lkdGg6IDc5MC4wcHg7Ij48aW1nIHNyYz0iaHR0cHM6Ly9pbWcuYWxpY2RuLmNvbS9pbWdleHRyYS9pMy8yMTcwNDI5NzYvTzFDTjAxSTJoQ3MxMVhyM0R5eE8wR2dfISEyMTcwNDI5NzYuanBnIiBhbGlnbj0iYWJzbWlkZGxlIiBzdHlsZT0id2lkdGg6IDc5MC4wcHg7Ij48L3A+PGRpdj48dGFibGUgYm9yZGVyPSIxIiBzdHlsZT0id2lkdGg6IDc5MC4wcHg7Ij48dHI+PHRkPjxpbWcgc3JjPSJodHRwczovL2ltZy5hbGljZG4uY29tL2ltZ2V4dHJhL2kxLzIxNzA0Mjk3Ni9PMUNOMDF6S3pGdmYxWHIzRTZzMEx1QV8hITIxNzA0Mjk3Ni5qcGciIGFsaWduPSJhYnNtaWRkbGUiIHN0eWxlPSJ3aWR0aDogNzg5LjBweDsiPjwvdGQ+PC90cj48L3RhYmxlPjwvZGl2PjxwPiZhbXA7bmJzcDs8L3A+PGRpdiBjbGFzcz0iaGxnX3JhbmRfMTA1NTU3Mzg4MyIgc3R5bGU9Im9wYWNpdHk6IDA7Ij4xMjYwNzc2MjU1PC9kaXY+PGltZyBjbGFzcz0iZGVzY19hbmNob3IiIGlkPSJkZXNjLW1vZHVsZS0yIiBzcmM9Imh0dHBzOi8vYXNzZXRzLmFsaWNkbi5jb20va2lzc3kvMS4wLjAvYnVpbGQvaW1nbGF6eWxvYWQvc3BhY2ViYWxsLmdpZiI+PHA+JmFtcDtuYnNwOzwvcD48ZGl2PjxpbWcgc3JjPSJodHRwczovL2ltZy5hbGljZG4uY29tL2ltZ2V4dHJhL2kzLzIxNzA0Mjk3Ni9UMnozM1ZYcEJYWFhYWFhYWFgtMjE3MDQyOTc2LmpwZyIgd2lkdGg9Ijc1MCIgaGVpZ2h0PSI2MCIgc3R5bGU9Im1hcmdpbi10b3A6IDEwLjBweDsiPjwvZGl2PjxkaXY+PHRhYmxlIGJvcmRlcj0iMSIgc3R5bGU9IndpZHRoOiA3NTAuMHB4OyI+PHRyPjx0ZCBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyI+PGltZyBzcmM9Imh0dHBzOi8vaW1nLmFsaWNkbi5jb20vaW1nZXh0cmEvaTEvMjE3MDQyOTc2L08xQ04wMWZ2SVV5djFYcjNFTjBMUFEzXyEhMjE3MDQyOTc2LmpwZyIgYWxpZ249ImFic21pZGRsZSIgc3R5bGU9IndpZHRoOiA3NTAuMHB4OyI+PC90ZD48L3RyPjx0cj48dGQgc3R5bGU9InRleHQtYWxpZ246IGNlbnRlcjsiPjxpbWcgc3JjPSJodHRwczovL2ltZy5hbGljZG4uY29tL2ltZ2V4dHJhL2k0LzIxNzA0Mjk3Ni9PMUNOMDE3QW5mcmMxWHIzRTJNQ0ZWZ18hITIxNzA0Mjk3Ni5qcGciIGFsaWduPSJhYnNtaWRkbGUiIHN0eWxlPSJ3aWR0aDogNzUwLjBweDsiPjwvdGQ+PC90cj48L3RhYmxlPjwvZGl2Pjx0YWJsZSB3aWR0aD0iNzUwIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgc3R5bGU9ImJvcmRlci1yaWdodDogMC4wcHggc29saWQgI2NjY2NjYztib3JkZXItYm90dG9tOiAwLjBweCBzb2xpZCAjY2NjY2NjO2JvcmRlci10b3Atc3R5bGU6IHNvbGlkO2JvcmRlci1sZWZ0LXN0eWxlOiBzb2xpZDtib3JkZXItdG9wLWNvbG9yOiAjY2NjY2NjO2JvcmRlci1sZWZ0LWNvbG9yOiAjY2NjY2NjO2xpbmUtaGVpZ2h0OiAyMy4wcHg7Y29sb3I6ICM2NjY2NjY7bWFyZ2luLXRvcDogMTAuMHB4OyI+PHRyPjx0ZCB3aWR0aD0iMTE5IiBhbGlnbj0icmlnaHQiIGJnY29sb3I9IiNGQkZCRkIiIHN0eWxlPSJib3JkZXItdG9wOiAwLjBweCBzb2xpZCAjY2NjY2NjO2JvcmRlci1sZWZ0OiAwLjBweCBzb2xpZCAjY2NjY2NjO2JvcmRlci1yaWdodC1zdHlsZTogc29saWQ7Ym9yZGVyLWJvdHRvbS1zdHlsZTogc29saWQ7Ym9yZGVyLXJpZ2h0LWNvbG9yOiAjY2NjY2NjO2JvcmRlci1ib3R0b20tY29sb3I6ICNjY2NjY2M7Ij5bIOS5puWQje+8miBdPC90ZD48dGQgd2lkdGg9IjYyOCIgc3R5bGU9ImJvcmRlci10b3A6IDAuMHB4IHNvbGlkICNjY2NjY2M7Ym9yZGVyLWxlZnQ6IDAuMHB4IHNvbGlkICNjY2NjY2M7Ym9yZGVyLXJpZ2h0LXN0eWxlOiBzb2xpZDtib3JkZXItYm90dG9tLXN0eWxlOiBzb2xpZDtib3JkZXItcmlnaHQtY29sb3I6ICNjY2NjY2M7Ym9yZGVyLWJvdHRvbS1jb2xvcjogI2NjY2NjYzsiPlsg44CQ5q2j54mI44CR6auY57qn57yW6K+R5Zmo6K6+6K6h5LiO5a6e546wW+WbvuS5pl18MjU5MTQgXTwvdGQ+PC90cj48dHI+PHRkIHdpZHRoPSIxMTkiIGFsaWduPSJyaWdodCIgYmdjb2xvcj0iI0ZCRkJGQiIgc3R5bGU9ImJvcmRlci10b3A6IDAuMHB4IHNvbGlkICNjY2NjY2M7Ym9yZGVyLWxlZnQ6IDAuMHB4IHNvbGlkICNjY2NjY2M7Ym9yZGVyLXJpZ2h0LXN0eWxlOiBzb2xpZDtib3JkZXItYm90dG9tLXN0eWxlOiBzb2xpZDtib3JkZXItcmlnaHQtY29sb3I6ICNjY2NjY2M7Ym9yZGVyLWJvdHRvbS1jb2xvcjogI2NjY2NjYzsiPlsg5Zu+5Lmm5a6a5Lu377yaIF08L3RkPjx0ZCB3aWR0aD0iNjI4IiBzdHlsZT0iYm9yZGVyLXRvcDogMC4wcHggc29saWQgI2NjY2NjYztib3JkZXItbGVmdDogMC4wcHggc29saWQgI2NjY2NjYztib3JkZXItcmlnaHQtc3R5bGU6IHNvbGlkO2JvcmRlci1ib3R0b20tc3R5bGU6IHNvbGlkO2JvcmRlci1yaWdodC1jb2xvcjogI2NjY2NjYztib3JkZXItYm90dG9tLWNvbG9yOiAjY2NjY2NjOyI+WyA3NeWFgyBdPC90ZD48L3RyPjx0cj48dGQgd2lkdGg9IjExOSIgYWxpZ249InJpZ2h0IiBiZ2NvbG9yPSIjRkJGQkZCIiBzdHlsZT0iYm9yZGVyLXRvcDogMC4wcHggc29saWQgI2NjY2NjYztib3JkZXItbGVmdDogMC4wcHggc29saWQgI2NjY2NjYztib3JkZXItcmlnaHQtc3R5bGU6IHNvbGlkO2JvcmRlci1ib3R0b20tc3R5bGU6IHNvbGlkO2JvcmRlci1yaWdodC1jb2xvcjogI2NjY2NjYztib3JkZXItYm90dG9tLWNvbG9yOiAjY2NjY2NjOyI+WyDlm77kuabkvZzogIXvvJogXTwvdGQ+PHRkIHdpZHRoPSI2MjgiIHN0eWxlPSJib3JkZXItdG9wOiAwLjBweCBzb2xpZCAjY2NjY2NjO2JvcmRlci1sZWZ0OiAwLjBweCBzb2xpZCAjY2NjY2NjO2JvcmRlci1yaWdodC1zdHlsZTogc29saWQ7Ym9yZGVyLWJvdHRvbS1zdHlsZTogc29saWQ7Ym9yZGVyLXJpZ2h0LWNvbG9yOiAjY2NjY2NjO2JvcmRlci1ib3R0b20tY29sb3I6ICNjY2NjY2M7Ij5bIO+8iOe+ju+8iVN0ZXZlbiBTLk11Y2huaWNrIF08L3RkPjwvdHI+PHRyPjx0ZCB3aWR0aD0iMTE5IiBhbGlnbj0icmlnaHQiIGJnY29sb3I9IiNGQkZCRkIiIHN0eWxlPSJib3JkZXItdG9wOiAwLjBweCBzb2xpZCAjY2NjY2NjO2JvcmRlci1sZWZ0OiAwLjBweCBzb2xpZCAjY2NjY2NjO2JvcmRlci1yaWdodC1zdHlsZTogc29saWQ7Ym9yZGVyLWJvdHRvbS1zdHlsZTogc29saWQ7Ym9yZGVyLXJpZ2h0LWNvbG9yOiAjY2NjY2NjO2JvcmRlci1ib3R0b20tY29sb3I6ICNjY2NjY2M7Ij5bIOWHuueJiOekvu+8miBdPC90ZD48dGQgd2lkdGg9IjYyOCIgc3R5bGU9ImJvcmRlci10b3A6IDAuMHB4IHNvbGlkICNjY2NjY2M7Ym9yZGVyLWxlZnQ6IDAuMHB4IHNvbGlkICNjY2NjY2M7Ym9yZGVyLXJpZ2h0LXN0eWxlOiBzb2xpZDtib3JkZXItYm90dG9tLXN0eWxlOiBzb2xpZDtib3JkZXItcmlnaHQtY29sb3I6ICNjY2NjY2M7Ym9yZGVyLWJvdHRvbS1jb2xvcjogI2NjY2NjYzsiPlsg5py65qKw5bel5Lia5Ye654mI56S+IF08L3RkPjwvdHI+PHRyPjx0ZCB3aWR0aD0iMTE5IiBhbGlnbj0icmlnaHQiIGJnY29sb3I9IiNGQkZCRkIiIHN0eWxlPSJib3JkZXItdG9wOiAwLjBweCBzb2xpZCAjY2NjY2NjO2JvcmRlci1sZWZ0OiAwLjBweCBzb2xpZCAjY2NjY2NjO2JvcmRlci1yaWdodC1zdHlsZTogc29saWQ7Ym9yZGVyLWJvdHRvbS1zdHlsZTogc29saWQ7Ym9yZGVyLXJpZ2h0LWNvbG9yOiAjY2NjY2NjO2JvcmRlci1ib3R0b20tY29sb3I6ICNjY2NjY2M7Ij5bIOWHuueJiOaXpeacn++8miBdPC90ZD48dGQgd2lkdGg9IjYyOCIgc3R5bGU9ImJvcmRlci10b3A6IDAuMHB4IHNvbGlkICNjY2NjY2M7Ym9yZGVyLWxlZnQ6IDAuMHB4IHNvbGlkICNjY2NjY2M7Ym9yZGVyLXJpZ2h0LXN0eWxlOiBzb2xpZDtib3JkZXItYm90dG9tLXN0eWxlOiBzb2xpZDtib3JkZXItcmlnaHQtY29sb3I6ICNjY2NjY2M7Ym9yZGVyLWJvdHRvbS1jb2xvcjogI2NjY2NjYzsiPiAyMDA1LzcvMSAwOjAwOjAwPC90ZD48L3RyPjx0cj48dGQgd2lkdGg9IjExOSIgYWxpZ249InJpZ2h0IiBiZ2NvbG9yPSIjRkJGQkZCIiBzdHlsZT0iYm9yZGVyLXRvcDogMC4wcHggc29saWQgI2NjY2NjYztib3JkZXItbGVmdDogMC4wcHggc29saWQgI2NjY2NjYztib3JkZXItcmlnaHQtc3R5bGU6IHNvbGlkO2JvcmRlci1ib3R0b20tc3R5bGU6IHNvbGlkO2JvcmRlci1yaWdodC1jb2xvcjogI2NjY2NjYztib3JkZXItYm90dG9tLWNvbG9yOiAjY2NjY2NjOyI+WyBJU0JO5Y+377yaIF08L3RkPjx0ZCB3aWR0aD0iNjI4IiBzdHlsZT0iYm9yZGVyLXRvcDogMC4wcHggc29saWQgI2NjY2NjYztib3JkZXItbGVmdDogMC4wcHggc29saWQgI2NjY2NjYztib3JkZXItcmlnaHQtc3R5bGU6IHNvbGlkO2JvcmRlci1ib3R0b20tc3R5bGU6IHNvbGlkO2JvcmRlci1yaWdodC1jb2xvcjogI2NjY2NjYztib3JkZXItYm90dG9tLWNvbG9yOiAjY2NjY2NjOyI+IDcxMTExNjQyOTY8L3RkPjwvdHI+PHRyPjx0ZCB3aWR0aD0iMTE5IiBhbGlnbj0icmlnaHQiIGJnY29sb3I9IiNGQkZCRkIiIHN0eWxlPSJib3JkZXItdG9wOiAwLjBweCBzb2xpZCAjY2NjY2NjO2JvcmRlci1sZWZ0OiAwLjBweCBzb2xpZCAjY2NjY2NjO2JvcmRlci1yaWdodC1zdHlsZTogc29saWQ7Ym9yZGVyLWJvdHRvbS1zdHlsZTogc29saWQ7Ym9yZGVyLXJpZ2h0LWNvbG9yOiAjY2NjY2NjO2JvcmRlci1ib3R0b20tY29sb3I6ICNjY2NjY2M7Ij5bIOW8gOacrO+8miBdPC90ZD48dGQgc3R5bGU9ImJvcmRlci10b3A6IDAuMHB4IHNvbGlkICNjY2NjY2M7Ym9yZGVyLWxlZnQ6IDAuMHB4IHNvbGlkICNjY2NjY2M7Ym9yZGVyLXJpZ2h0LXN0eWxlOiBzb2xpZDtib3JkZXItYm90dG9tLXN0eWxlOiBzb2xpZDtib3JkZXItcmlnaHQtY29sb3I6ICNjY2NjY2M7Ym9yZGVyLWJvdHRvbS1jb2xvcjogI2NjY2NjYzsiPlsgMTblvIAgXTwvdGQ+PC90cj48dHI+PHRkIHdpZHRoPSIxMTkiIGFsaWduPSJyaWdodCIgYmdjb2xvcj0iI0ZCRkJGQiIgc3R5bGU9ImJvcmRlci10b3A6IDAuMHB4IHNvbGlkICNjY2NjY2M7Ym9yZGVyLWxlZnQ6IDAuMHB4IHNvbGlkICNjY2NjY2M7Ym9yZGVyLXJpZ2h0LXN0eWxlOiBzb2xpZDtib3JkZXItYm90dG9tLXN0eWxlOiBzb2xpZDtib3JkZXItcmlnaHQtY29sb3I6ICNjY2NjY2M7Ym9yZGVyLWJvdHRvbS1jb2xvcjogI2NjY2NjYzsiPlsg6aG15pWw77yaIF08L3RkPjx0ZCBzdHlsZT0iYm9yZGVyLXRvcDogMC4wcHggc29saWQgI2NjY2NjYztib3JkZXItbGVmdDogMC4wcHggc29saWQgI2NjY2NjYztib3JkZXItcmlnaHQtc3R5bGU6IHNvbGlkO2JvcmRlci1ib3R0b20tc3R5bGU6IHNvbGlkO2JvcmRlci1yaWdodC1jb2xvcjogI2NjY2NjYztib3JkZXItYm90dG9tLWNvbG9yOiAjY2NjY2NjOyI+IDYyNDwvdGQ+PC90cj48dHI+PHRkIHdpZHRoPSIxMTkiIGFsaWduPSJyaWdodCIgYmdjb2xvcj0iI0ZCRkJGQiIgc3R5bGU9ImJvcmRlci10b3A6IDAuMHB4IHNvbGlkICNjY2NjY2M7Ym9yZGVyLWxlZnQ6IDAuMHB4IHNvbGlkICNjY2NjY2M7Ym9yZGVyLXJpZ2h0LXN0eWxlOiBzb2xpZDtib3JkZXItYm90dG9tLXN0eWxlOiBzb2xpZDtib3JkZXItcmlnaHQtY29sb3I6ICNjY2NjY2M7Ym9yZGVyLWJvdHRvbS1jb2xvcjogI2NjY2NjYzsiPlsg54mI5qyh77yaIF08L3RkPjx0ZCBzdHlsZT0iYm9yZGVyLXRvcDogMC4wcHggc29saWQgI2NjY2NjYztib3JkZXItbGVmdDogMC4wcHggc29saWQgI2NjY2NjYztib3JkZXItcmlnaHQtc3R5bGU6IHNvbGlkO2JvcmRlci1ib3R0b20tc3R5bGU6IHNvbGlkO2JvcmRlci1yaWdodC1jb2xvcjogI2NjY2NjYztib3JkZXItYm90dG9tLWNvbG9yOiAjY2NjY2NjOyI+IDEtMTwvdGQ+PC90cj48L3RhYmxlPjx0YWJsZSB3aWR0aD0iNzUwIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgc3R5bGU9ImJvcmRlci1zdHlsZTogc29saWQ7Ym9yZGVyLWNvbG9yOiAjY2NjY2NjO21hcmdpbi10b3A6IDEwLjBweDtsaW5lLWhlaWdodDogMjMuMHB4O2NvbG9yOiAjNjY2NjY2OyI+PHRyPjx0ZCBzdHlsZT0iYm9yZGVyLWJvdHRvbS1zdHlsZTogZGFzaGVkO2JvcmRlci1ib3R0b20tY29sb3I6ICNjY2NjY2M7YmFja2dyb3VuZC1jb2xvcjogI2ZiZmJmYjtmb250LXdlaWdodDogYm9sZDtjb2xvcjogIzk5MDAwMDsiPlsg5L2c6ICF566A5LuLIF08L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0icGFkZGluZzogMTAuMHB4OyI+WyBTdGV2ZW4gU++8jk11Y2huaWNr5YW35pyJ5Liw5a+M6ICM5bm/5Y2a55qE57uP6aqM44CC5LuW5pu+57uP5piv6K6h566X5py656eR5a2m5pWZ5o6I77yM5ZCO5p2l5LuW5bCG6Ieq5bex55qE55+l6K+G5ZKM57uP6aqM5bqU55So5LqO57yW6K+R5Zmo6K6+6K6h77yM5oiQ5Li65Lik56eN6K6h566X5py65L2T57O757uT5p6EKOaDoOaZrueahFBBLVJJU0PlkoxTdW7nmoRTUEFSQynlvIDlj5Hlm6LpmJ/nmoTmoLjlv4PmiJDlkZjvvIzlubbmi4Xku7vov5nkupvns7vnu5/nmoTpq5jnuqfnvJbor5Hlmajorr7orqHkuI7lrp7njrDnmoTpooblr7zkurrjgILku5bnmoTnoJTnqbblkozlvIDlj5Hnu4/pqozlr7nkuo7mjIflr7zor7vogIXlgZrlh7rnvJbor5Hlmajorr7orqHlhrPnrZbmnoHlhbfku7flgLzjgIIgXTwvdGQ+PC90cj48L3RhYmxlPjx0YWJsZSB3aWR0aD0iNzUwIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgc3R5bGU9ImJvcmRlci1zdHlsZTogc29saWQ7Ym9yZGVyLWNvbG9yOiAjY2NjY2NjO21hcmdpbi10b3A6IDEwLjBweDtsaW5lLWhlaWdodDogMjMuMHB4O2NvbG9yOiAjNjY2NjY2OyI+PHRyPjx0ZCBzdHlsZT0iYm9yZGVyLWJvdHRvbS1zdHlsZTogZGFzaGVkO2JvcmRlci1ib3R0b20tY29sb3I6ICNjY2NjY2M7YmFja2dyb3VuZC1jb2xvcjogI2ZiZmJmYjtmb250LXdlaWdodDogYm9sZDtjb2xvcjogIzk5MDAwMDsiPlsg5YaF5a65566A5LuLIF08L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0icGFkZGluZzogMTAuMHB4OyI+WyDmnKzkuabmtrXnm5bkuobnjrDku6Plvq7lpITnkIblmajnvJbor5HlmajnmoTorr7orqHlkozlrp7njrDmlrnpnaLnmoTmiYDmnInpq5jnuqfkuLvpopjjgIJdPGJyPlsg5pys5Lmm6aaW5YWI5LuL57uN57yW6K+R5Zmo55qE57uT5p6E44CB56ym5Y+36KGo566h55CG44CB5Lit6Ze05Luj56CB57uT5p6E44CB6L+Q6KGM5pe25pSv5oyB562J6Zeu6aKY77yM5o6i6K6o6L+H56iL5YaF55qE5o6n5Yi25rWB5YiG5p6Q44CB5pWw5o2u5rWB5YiG5p6Q44CB5L6d6LWW5YWz57O75YiG5p6Q5ZKM5Yir5ZCN5YiG5p6Q55qE5ZCE56eN5pa55rOV77yM5bm25LuL57uN5LiA57O75YiX55qE5YWo5bGA5LyY5YyW44CC5o6l5LiL5p2l77yM6K6y6L+w6L+H56iL6Ze055qE5o6n5Yi25rWB5YiG5p6Q44CB5pWw5o2u5rWB5YiG5p6Q5ZKM5Yir5ZCN5YiG5p6Q77yM5Lul5Y+K56iL6Ze05LyY5YyW5ZKM5aaC5L2V5bqU55So6L+H56iL6Ze05L+h5oGv5p2l5pS55ZaE5YWo5bGA5LyY5YyW44CC54S25ZCO77yM6K6o6K665pyJ5pWI5Yip55So5bGC5qyh5a2Y5YKo57O757uf55qE5LyY5YyW5oqA5pyv44CC5pyA5ZCO77yM6K+m57uG5LuL57uNNOenjeWVhuS4muWMlue8luivkeezu+e7n++8jOS7peaPkOS+m+e8luivkeWZqOe7k+aehOOAgeS4remXtOS7o+eggeiuvuiuoeOAgeS8mOWMluetlueVpeWSjOaViOaenOeahOS4k+mXqOS+i+WtkOOAgl08YnI+WyDmnKzkuabpgILlkIjkvZzkuLrpq5jnrYnpmaLmoKHorqHnrpfmnLrkuJPkuJrnoJTnqbbnlJ/lkozpq5jlubTnuqfmnKznp5HnlJ/nmoTmlZnmnZDvvIzkuZ/pgILlkIjpnIDopoHkuobop6Ppq5jnuqfnvJbor5Hlmajorr7orqHlkozmnoTpgKDmnInlhbPpl67popjnmoTorqHnrpfmnLrkuJPkuJrkurrlkZjlj4LogIPjgIJdPGJyPjxicj5bIOacrOS5pueJueeCuV08YnI+WyDil4/kuLrnkIbop6Ppq5jnuqfnvJbor5Hlmajorr7orqHnmoTkuLvopoHpl67popjlpaDlrprkuobln7rnoYBdPGJyPlsg4peP5rex5YWl6ZiQ6L+w5LyY5YyW6Zeu6aKYXTxicj5bIOKXj+eUqFN1bueahFNQQVJD44CBSUJN55qEUE9XRVLlkoxQb3dlclBD44CBREVD55qEQWxwaGHku6Xlj4pJbnRlbOeahFBlbnRpdW3lkoznm7jlhbPllYbkuJrnvJbor5HlmajkvZzkuLrmoYjkvovvvIzor7TmmI7nvJbor5Hlmajnu5PmnoTjgIHkuK3pl7Tku6PnoIHorr7orqHlkozlkITnp43kvJjljJbmlrnms5VdPGJyPlsg4peP57uZ5Ye65aSn6YeP5a6a5LmJ5riF5pmw55qE5YWz5LqO5Luj56CB55Sf5oiQ44CB5LyY5YyW5ZKM5YW25LuW6Zeu6aKY55qE566X5rOVXTxicj5bIOKXj+S7i+e7jeeUseS9nOiAheiuvuiuoeeahOS7pea4heaZsOOAgeeugOa0geeahOaWueW8j+aPj+i/sOeul+azleeahOivreiogElDQU4gKOmdnuW9ouW8j+e8luivkeeul+azleihqOekuinjgIIgXTwvdGQ+PC90cj48L3RhYmxlPjx0YWJsZSB3aWR0aD0iNzUwIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgc3R5bGU9ImJvcmRlci1zdHlsZTogc29saWQ7Ym9yZGVyLWNvbG9yOiAjY2NjY2NjO21hcmdpbi10b3A6IDEwLjBweDtsaW5lLWhlaWdodDogMjMuMHB4O2NvbG9yOiAjNjY2NjY2OyI+PHRyPjx0ZCBzdHlsZT0iYm9yZGVyLWJvdHRvbS1zdHlsZTogZGFzaGVkO2JvcmRlci1ib3R0b20tY29sb3I6ICNjY2NjY2M7YmFja2dyb3VuZC1jb2xvcjogI2ZiZmJmYjtmb250LXdlaWdodDogYm9sZDtjb2xvcjogIzk5MDAwMDsiPlsg55uu5b2VIF08L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0icGFkZGluZzogMTAuMHB4OyI+WyDlh7rniYjogIXnmoTor51dPGJyPlsg5LiT5a625oyH5a+85aeU5ZGY5LyaXTxicj5bIOivkeiAheW6j108YnI+WyDluo9dPGJyPlsg5YmN6KiAXTxicj5bIOesrDHnq6Ag6auY57qn5Li76aKY5LuL57uNIDFdPGJyPlsgMS4xIOe8luivkeWZqOe7k+aehOWbnumhviAxXTxicj5bIDEuMiDln7rmnKzpl67popjkuK3nmoTpq5jnuqforrrpopggMl08YnI+WyAxLjMg5Luj56CB5LyY5YyW55qE6YeN6KaB5oCnIDRdPGJyPlsgMS40IOS8mOWMlue8luivkeWZqOeahOe7k+aehCA1XTxicj5bIDEuNSDmv4Dov5vlnovkvJjljJbnvJbor5HlmajkuK3lkITnp43kvJjljJbnmoTkvY3nva4gN108YnI+WyAxLjYg5pys5Lmm5ZCE56ug55qE6ZiF6K+75rWB56iLIDEwXTxicj5bIDEuNyDmnKzkuabmsqHmnInmtonlj4rnmoTnm7jlhbPkuLvpopggMTBdPGJyPlsgMS44IOS+i+WtkOS4reaJgOeUqOeahOebruagh+acuiAxMV08YnI+WyAxLjkg5pWw55qE6KGo56S65LiO5pWw5o2u55qE5aSn5bCPIDExXTxicj5bIDEuMTAg5bCP57uTIDExXTxicj5bIDEuMTEg6L+b5LiA5q2l6ZiF6K+7IDEyXTxicj5bIDEuMTIg57uD5LmgIDEyXTxicj5bIOesrDLnq6Ag6Z2e5b2i5byP5YyW57yW6K+R566X5rOV6KGo56S6IDEzXTxicj5bIDIuMSDmianlsZXnmoTlt7Tnp5Hmlq8t6K+65bCU6IyD5byP6K+t5rOV6KGo56S6IDEzXTxicj5bIDIuMiBJQ0FO566A5LuLIDE0XTxicj5bIDIuMyBJQ0FO5qaC6LKMIDE2XTxicj5bIDIuNCDlrozmlbTnmoTnqIvluo8gMTddPGJyPlsgMi41IOexu+Wei+WumuS5iSAxOF08YnI+WyAyLjYg5aOw5piOIDE4XTxicj5bIDIuNyDmlbDmja7nsbvlnovlkozooajovr7lvI8gMTldPGJyPlsgMi43LjEg5LiA6Iis566A5Y2V57G75Z6LIDIwXTxicj5bIDIuNy4yIOaemuS4vuexu+WeiyAyMF08YnI+WyAyLjcuMyDmlbDnu4QgMjFdPGJyPlsgMi43LjQg6ZuG5ZCIIDIxXTxicj5bIDIuNy41IOW6j+WIlyAyMl08YnI+WyAyLjcuNiDlhYPnu4QgMjNdPGJyPlsgMi43Ljcg6K6w5b2VIDIzXTxicj5bIDIuNy44IOiBlOWQiCAyNF08YnI+WyAyLjcuOSDlh73mlbAgMjRdPGJyPlsgMi43LjEwIOe8luivkeS4k+eUqOeahOexu+WeiyAyNF08YnI+WyAyLjcuMTEg5YC8bmlsIDI1XTxicj5bIDIuNy4xMiBzaXpl6L+Q566X56ymIDI1XTxicj5bIDIuOCDor63lj6UgMjVdPGJyPlsgMi44LjEg6LWL5YC86K+t5Y+lIDI2XTxicj5bIDIuOC4yIOi/h+eoi+iwg+eUqOivreWPpSAyN108YnI+WyAyLjguMyDov5Tlm57or63lj6UgMjddPGJyPlsgMi44LjQgZ290b+ivreWPpSAyN108YnI+WyAyLjguNSBpZuivreWPpSAyN108YnI+WyAyLjguNiBjYXNl6K+t5Y+lIDI3XTxicj5bIDIuOC43IHdoaWxl6K+t5Y+lIDI4XTxicj5bIDIuOC44IGZvcuivreWPpSAyOF08YnI+WyAyLjguOSByZXBlYXTor63lj6UgMjhdPGJyPlsgMi44LjEwIElDQU7nmoTlhbPplK7lrZcgMjhdPGJyPlsgMi45IOWwj+e7kyAyOV08YnI+WyAyLjEwIOi/m+S4gOatpemYheivuyAyOV08YnI+WyAyLjExIOe7g+S5oCAyOV08YnI+WyDnrKwz56ugIOespuWPt+ihqOe7k+aehCAzMV08YnI+WyAzLjEg5a2Y5YKo57G744CB5Y+v6KeB5oCn5ZKM55Sf5ZG95pyfIDMxXTxicj5bIDMuMiDnrKblj7flsZ7mgKflkoznrKblj7fooajpobkgMzJdPGJyPlsgMy4zIOWxgOmDqOespuWPt+ihqOeuoeeQhiAzNF08YnI+WyAzLjQg5YWo5bGA56ym5Y+36KGo57uT5p6EIDM1XTxicj5bIDMuNSDlrZjlgqjnu5HlrprlkoznrKblj7flr4TlrZjlmaggMzhdPGJyPlsgMy42IOeUn+aIkOWPluaVsOWSjOWtmOaVsOaMh+S7pOeahOaWueazlSA0Ml08YnI+WyAzLjcg5bCP57uTIDQ2XTxicj5bIDMuOCDov5vkuIDmraXpmIXor7sgNDZdPGJyPlsgMy45IOe7g+S5oCA0N108YnI+WyDnrKw056ugIOS4remXtOihqOekuiA0OV08YnI+WyA0LjEg5LiO5Lit6Ze06K+t6KiA6K6+6K6h5pyJ5YWz55qE6Zeu6aKYIDQ5XTxicj5bIDQuMiDpq5jnuqfkuK3pl7Tor63oqIAgNTBdPGJyPlsgNC4zIOS4ree6p+S4remXtOivreiogCA1MV08YnI+WyA0LjQg5L2O57qn5Lit6Ze06K+t6KiAIDUyXTxicj5bIDQuNSDlpJrnuqfkuK3pl7Tor63oqIAgNTJdPGJyPlsgNC42IOaIkeS7rOeahOS4remXtOivreiogO+8mk1JUuOAgUhJUuWSjExJUiA1M108YnI+WyA0LjYuMSDkuK3nuqfkuK3pl7TooajnpLrvvIhNSVLvvIkgNTNdPGJyPlsgNC42LjIg6auY57qn5Lit6Ze06KGo56S677yISElS77yJIDU2XTxicj5bIDQuNi4zIOS9jue6p+S4remXtOihqOekuu+8iExJUu+8iSA1N108YnI+WyA0Ljcg55SoSUNBTuihqOekuk1JUuOAgUhJUuWSjExJUiA1OF08YnI+WyA0LjcuMSDnlKhJQ0FO6KGo56S6TUlSIDU5XTxicj5bIDQuNy4yIOeUqElDQU7ooajnpLpISVIgNjJdPGJyPlsgNC43LjMg55SoSUNBTuihqOekukxJUiA2NF08YnI+WyA0Ljgg566h55CG5Lit6Ze05Luj56CB55qE6Iul5bmy5pWw5o2u57uT5p6E5ZKM5L6L56iL55qESUNBTuWRveWQjSA2N108YnI+WyA0Ljkg5YW25LuW5Lit6Ze06K+t6KiA5b2i5byPIDcwXTxicj5bIDQuOS4xIOS4ieWFg+W8jyA3MF08YnI+WyA0LjkuMiDmoJEgNzFdPGJyPlsgNC45LjMg5peg546v5pyJ5ZCR5Zu+77yIREFH77yJIDcyXTxicj5bIDQuOS40IOWJjee8gOazouWFsOihqOekuiA3M108YnI+WyA0LjEwIOWwj+e7kyA3NF08YnI+WyA0LjExIOi/m+S4gOatpemYheivuyA3NF08YnI+WyA0LjEyIOe7g+S5oCA3NF08YnI+WyDnrKw156ugIOi/kOihjOaXtuaUr+aMgSA3N108YnI+WyA1LjEg5pWw5o2u6KGo56S65ZKM5oyH5LukIDc3XTxicj5bIDUuMiDlr4TlrZjlmajnlKjms5UgODBdPGJyPlsgNS4zIOWxgOmDqOagiOW4pyA4MV08YnI+WyA1LjQg6L+Q6KGM5pe25qCIIDgzXTxicj5bIDUuNSDlj4LmlbDkvKDpgJLop4TliJkgODRdPGJyPlsgNS42IOi/h+eoi+eahOWFpeWPo+WkhOeQhuOAgeWHuuWPo+WkhOeQhuOAgeiwg+eUqOWSjOi/lOWbniA4Nl08YnI+WyA1LjYuMSDnlKjlr4TlrZjlmajkvKDpgJLlj4LmlbDvvJrlubPpnaLlr4TlrZjlmajmlofku7YgODddPGJyPlsgNS42LjIg55So6L+Q6KGM5pe25qCI5Lyg6YCS5Y+C5pWwIDg4XTxicj5bIDUuNi4zIOeUqOWFt+acieWvhOWtmOWZqOeql+WPo+eahOWvhOWtmOWZqOS8oOmAkuWPguaVsCA4OV08YnI+WyA1LjYuNCDov4fnqIvlgLzlj5jph48gOTFdPGJyPlsgNS43IOS7o+eggeWFseS6q+S4juS9jee9ruaXoOWFs+S7o+eggSA5MV08YnI+WyA1Ljgg56ym5Y+35ZKM5aSa5oCB6K+t6KiA5pSv5oyBIDk0XTxicj5bIDUuOSDlsI/nu5MgOTZdPGJyPlsgNS4xMCDov5vkuIDmraXpmIXor7sgOTZdPGJyPlsgNS4xMSDnu4PkuaAgOTddPGJyPlsg56ysNueroCDoh6rliqjkuqfnlJ/ku6PnoIHnlJ/miJDlmaggOTldPGJyPlsgNi4xIOeugOS7i+S7o+eggeeUn+aIkOWZqOeahOiHquWKqOeUn+aIkCAxMDBdPGJyPlsgNi4yIOivreazleWItuWvvOaKgOacryAxMDBdPGJyPlsgNi4yLjEg5Luj56CB55Sf5oiQ5ZmoIDEwMl08YnI+WyA2LjIuMiDku6PnoIHnlJ/miJDlmajnmoTkuqfnlJ/lmaggMTAzXTxicj5bIDYuMi4zIOWIoOmZpOmTvuW+queOryAxMTBdPGJyPlsgNi4yLjQg5Yig6Zmk5Y+l5rOV6Zi75rueIDExMl08YnI+WyA2LjIuNSDmnIDlkI7nmoTogIPomZEgMTE1XTxicj5bIDYuMyDor63kuYnliLblr7znmoTliIbmnpDku4vnu40gMTE1XTxicj5bIDYuNCDmoJHmqKHlvI/ljLnphY3lkozliqjmgIHop4TliJIgMTE2XTxicj5bIDYuNSDlsI/nu5MgMTIwXTxicj5bIDYuNiDov5vkuIDmraXpmIXor7sgMTIwXTxicj5bIDYuNyDnu4PkuaAgMTIxXTxicj5bIOesrDfnq6Ag5o6n5Yi25rWB5YiG5p6QIDEyM108YnI+WyA3LjEg5o6n5Yi25rWB5YiG5p6Q55qE5pa55rOVIDEyNV08YnI+WyA3LjIg5rex5bqm5Li65Li75p+l5om+44CB5YmN5bqP6YGN5Y6G44CB5ZCO5bqP6YGN5Y6G5ZKM5a695bqm5Li65Li75p+l5om+IDEyOF08YnI+WyA3LjMg5b+F57uP57uT54K55ZKM5ZCO5b+F57uP57uT54K5IDEzMl08YnI+WyA3LjQg5b6q546v5ZKM5by66L+e6YCa5YiG6YePIDEzOV08YnI+WyA3LjUg5Y+v5b2S57qm5oCnIDE0M108YnI+WyA3LjYg5Yy66Ze05YiG5p6Q5ZKM5o6n5Yi25qCRIDE0NF08YnI+WyA3Ljcg57uT5p6E5YiG5p6QIDE0N108YnI+WyA3Ljgg5bCP57uTIDE1Nl08YnI+WyA3Ljkg6L+b5LiA5q2l6ZiF6K+7IDE1N108YnI+WyA3LjEwIOe7g+S5oCAxNTddPGJyPlsg56ysOOeroCDmlbDmja7mtYHliIbmnpAgMTU5XTxicj5bIDguMSDkuIDkuKrkvovlrZDvvJrliLDovr4t5a6a5YC8IDE1OV08YnI+WyA4LjIg5Z+65pys5qaC5b+177ya5qC844CB5rWB5Ye95pWw5ZKM5LiN5Yqo54K5IDE2M108YnI+WyA4LjMg5pWw5o2u5rWB6Zeu6aKY5Y+K5YW26Kej5Yaz5pa55rOV55qE5YiG57G7IDE2Nl08YnI+WyA4LjQg6L+t5Luj5pWw5o2u5rWB5YiG5p6QIDE2OF08YnI+WyA4LjUg5rWB5Ye95pWw55qE5qC8IDE3MV08YnI+WyA4LjYg5Z+65LqO5o6n5Yi25qCR55qE5pWw5o2u5rWB5YiG5p6QIDE3Ml08YnI+WyA4Ljcg57uT5p6E5YiG5p6QIDE3Ml08YnI+WyA4LjcuMSDnu5PmnoTliIbmnpDvvJrlkJHliY3pl67popggMTcyXTxicj5bIDguNy4yIOe7k+aehOWIhuaekO+8muWQkeWQjumXrumimCAxNzhdPGJyPlsgOC43LjMg57uT5p6E5YiG5p6Q5pa556iL55qE6KGo56S6IDE4MF08YnI+WyA4Ljgg5Yy66Ze05YiG5p6QIDE4MV08YnI+WyA4Ljkg5YW25LuW5pa55rOVIDE4Ml08YnI+WyA4LjEwIGR16ZO+44CBdWTpk77lkoznvZEgMTgzXTxicj5bIDguMTEg6Z2Z5oCB5Y2V6LWL5YC85b2i5byPIDE4NF08YnI+WyA4LjEyIOaVsOe7hOOAgee7k+aehOWSjOaMh+mSiOeahOWkhOeQhiAxODhdPGJyPlsgOC4xMyDmlbDmja7mtYHliIbmnpDlmajnmoToh6rliqjmnoTpgKAgMTg4XTxicj5bIDguMTQg5pu06LSq5amq55qE5YiG5p6QIDE4OV08YnI+WyA4LjE1IOWwj+e7kyAxOTFdPGJyPlsgOC4xNiDov5vkuIDmraXpmIXor7sgMTkyXTxicj5bIDguMTcg57uD5LmgIDE5Ml08YnI+WyDnrKw556ugIOS+nei1luWFs+ezu+WIhuaekOWSjOS+nei1luWbviAxOTVdPGJyPlsgOS4xIOS+nei1luWFs+ezuyAxOTVdPGJyPlsgOS4yIOWfuuacrOWdl+S+nei1lkRBRyAxOTZdPGJyPlsgOS4zIOW+queOr+S4reeahOS+nei1luWFs+ezuyAyMDBdPGJyPlsgOS40IOS+nei1luWFs+ezu+a1i+ivlSAyMDRdPGJyPlsgOS41IOeoi+W6j+S+nei1luWbviAyMDddPGJyPlsgOS42IOWKqOaAgeWIhumFjeeahOWvueixoeS5i+mXtOeahOS+nei1luWFs+ezuyAyMDldPGJyPlsgOS43IOWwj+e7kyAyMTBdPGJyPlsgOS44IOi/m+S4gOatpemYheivuyAyMTFdPGJyPlsgOS45IOe7g+S5oCAyMTFdPGJyPlsg56ysMTDnq6Ag5Yir5ZCN5YiG5p6QIDIxM108YnI+WyAxMC4xIOWQhOenjeeOsOWunueoi+W6j+iuvuiuoeivreiogOS4reeahOWIq+WQjSAyMTVdPGJyPlsgMTAuMS4xIEZvcnRyYW4gNzfkuK3nmoTliKvlkI0gMjE2XTxicj5bIDEwLjEuMiBQYXNjYWzkuK3nmoTliKvlkI0gMjE2XTxicj5bIDEwLjEuMyBD5Lit55qE5Yir5ZCNIDIxN108YnI+WyAxMC4xLjQgRm9ydHJhbiA5MOS4reeahOWIq+WQjSAyMThdPGJyPlsgMTAuMiDliKvlkI3mlLbpm4blmaggMjE4XTxicj5bIDEwLjMg5Yir5ZCN5Lyg5pKt5ZmoIDIyMl08YnI+WyAxMC40IOWwj+e7kyAyMjddPGJyPlsgMTAuNSDov5vkuIDmraXpmIXor7sgMjI3XTxicj5bIDEwLjYg57uD5LmgIDIyOF08YnI+WyDnrKwxMeeroCDkvJjljJbnroDku4sgMjI5XTxicj5bIDExLjEg56ysMTJ+MTjnq6DorqjorrrnmoTlhajlsYDkvJjljJYgMjMwXTxicj5bIDExLjIg5rWB5pWP5oSf5oCn5ZKM5Y+v6IO95LiO5LiA5a6a5L+h5oGvIDIzMV08YnI+WyAxMS4zIOWQhOenjeS8mOWMlueahOmHjeimgeaApyAyMzFdPGJyPlsgMTEuNCDkvJjljJbnmoTpobrluo/kuI7ph43lpI0gMjMyXTxicj5bIDExLjUg6L+b5LiA5q2l6ZiF6K+7IDIzNV08YnI+WyAxMS42IOe7g+S5oCAyMzVdPGJyPlsg56ysMTLnq6Ag5YmN5pyf5LyY5YyWIDIzN108YnI+WyAxMi4xIOW4uOaVsOihqOi+vuW8j+iuoeeul++8iOW4uOaVsOaKmOWPoO+8iSAyMzddPGJyPlsgMTIuMiDogZrlkIjph4/moIfph4/mm7/ku6MgMjM4XTxicj5bIDEyLjMg5Luj5pWw5YyW566A5ZKM6YeN57uT5ZCIIDI0MF08YnI+WyAxMi4zLjEg5Zyw5Z2A6KGo6L6+5byP55qE5Luj5pWw5YyW566A5ZKM6YeN57uT5ZCIIDI0MV08YnI+WyAxMi4zLjIg5a+55rWu54K56KGo6L6+5byP5bqU55So5Luj5pWw5YyW566AIDI0Nl08YnI+WyAxMi40IOWAvOe8luWPtyAyNDddPGJyPlsgMTIuNC4xIOS9nOeUqOS6juWfuuacrOWdl+eahOWAvOe8luWPtyAyNDddPGJyPlsgMTIuNC4yIOWFqOWxgOWAvOe8luWPtyAyNTFdPGJyPlsgMTIuNSDlpI3lhpnkvKDmkq0gMjU2XTxicj5bIDEyLjYg56iA5pyJ5p2h5Lu25bi45pWw5Lyg5pKtIDI2MV08YnI+WyAxMi43IOWwj+e7kyAyNjddPGJyPlsgMTIuOCDov5vkuIDmraXpmIXor7sgMjY5XTxicj5bIDEyLjkg57uD5LmgIDI2OV08YnI+WyDnrKwxM+eroCDlhpfkvZnliKDpmaQgMjcxXTxicj5bIDEzLjEg5YWs5YWx5a2Q6KGo6L6+5byP5Yig6ZmkIDI3MV08YnI+WyAxMy4xLjEg5bGA6YOo5YWs5YWx5a2Q6KGo6L6+5byP5Yig6ZmkIDI3Ml08YnI+WyAxMy4xLjIg5YWo5bGA5YWs5YWx5a2Q6KGo6L6+5byP5Yig6ZmkIDI3Nl08YnI+WyAxMy4xLjMg5ZCR5YmN5pu/5LujIDI4NF08YnI+WyAxMy4yIOW+queOr+S4jeWPmOS7o+eggeWkluaPkCAyODRdPGJyPlsgMTMuMyDpg6jliIblhpfkvZnliKDpmaQgMjkyXTxicj5bIDEzLjQg5YaX5L2Z5Yig6Zmk5ZKM6YeN57uT5ZCIIDI5OF08YnI+WyAxMy41IOS7o+eggeaPkOWNhyAyOTldPGJyPlsgMTMuNiDlsI/nu5MgMzAyXTxicj5bIDEzLjcg6L+b5LiA5q2l6ZiF6K+7IDMwMl08YnI+WyAxMy44IOe7g+S5oCAzMDRdPGJyPlsg56ysMTTnq6Ag5b6q546v5LyY5YyWIDMwNV08YnI+WyAxNC4xIOW9kue6s+WPmOmHj+S8mOWMliAzMDVdPGJyPlsgMTQuMS4xIOivhuWIq+W9kue6s+WPmOmHjyAzMDZdPGJyPlsgMTQuMS4yIOW8uuW6puWJiuW8sSAzMTJdPGJyPlsgMTQuMS4zIOa0u+i3g+WPmOmHj+WIhuaekCAzMTldPGJyPlsgMTQuMS40IOW9kue6s+WPmOmHj+WIoOmZpOWSjOe6v+aAp+WHveaVsOa1i+ivleabv+aNoiAzMjBdPGJyPlsgMTQuMiDkuI3lv4XopoHovrnnlYzmo4Dmn6XnmoTmtojpmaQgMzI1XTxicj5bIDE0LjMg5bCP57uTIDMyN108YnI+WyAxNC40IOi/m+S4gOatpemYheivuyAzMjldPGJyPlsgMTQuNSDnu4PkuaAgMzI5XTxicj5bIOesrDE156ugIOi/h+eoi+S8mOWMliAzMzFdPGJyPlsgMTUuMSDlsL7osIPnlKjkvJjljJblkozlsL7pgJLlvZLliKDpmaQgMzMxXTxicj5bIDE1LjIg6L+H56iL6ZuG5oiQIDMzNF08YnI+WyAxNS4zIOWGheW1jOaJqeWxlSAzMzddPGJyPlsgMTUuNCDlj7bkvovnqIvkvJjljJblkozmlLbnvKnljIXoo4UgMzM4XTxicj5bIDE1LjQuMSDlj7bkvovnqIvkvJjljJYgMzM4XTxicj5bIDE1LjQuMiDmlLbnvKnljIXoo4UgMzM5XTxicj5bIDE1LjUg5bCP57uTIDM0MV08YnI+WyAxNS42IOi/m+S4gOatpemYheivuyAzNDNdPGJyPlsgMTUuNyDnu4PkuaAgMzQzXTxicj5bIOesrDE256ugIOWvhOWtmOWZqOWIhumFjSAzNDVdPGJyPlsgMTYuMSDlr4TlrZjlmajliIbphY3lkozmjIfmtL4gMzQ1XTxicj5bIDE2LjIg5bGA6YOo5pa55rOVIDM0Nl08YnI+WyAxNi4zIOWbvuedgOiJsiAzNDddPGJyPlsgMTYuMy4xIOWbvuedgOiJsuWvhOWtmOWZqOWIhumFjeamgui/sCAzNDddPGJyPlsgMTYuMy4yIOmhtuWxgue7k+aehCAzNDldPGJyPlsgMTYuMy4zIOe9ke+8jOWPr+WIhumFjeWvueixoSAzNTBdPGJyPlsgMTYuMy40IOWGsueqgeWbviAzNTRdPGJyPlsgMTYuMy41IOWGsueqgeWbvueahOihqOekuiAzNTVdPGJyPlsgMTYuMy42IOWvhOWtmOWZqOWQiOW5tiAzNThdPGJyPlsgMTYuMy43IOiuoeeul+a6ouWHuuS7o+S7tyAzNTldPGJyPlsgMTYuMy44IOS/ruWJquWGsueqgeWbviAzNjFdPGJyPlsgMTYuMy45IOaMh+a0vuWvhOWtmOWZqCAzNjNdPGJyPlsgMTYuMy4xMCDmuqLlh7rnrKblj7flr4TlrZjlmaggMzY1XTxicj5bIDE2LjMuMTEg5Zu+552A6Imy5a+E5a2Y5Zmo5YiG6YWN55qE5Lik5Liq5L6L5a2QIDM2N108YnI+WyAxNi4zLjEyIOWFtuS7lumXrumimCAzNzVdPGJyPlsgMTYuNCDln7rkuo7kvJjlhYjnuqfnmoTlm77nnYDoibIgMzc2XTxicj5bIDE2LjUg5YW25LuW5a+E5a2Y5Zmo5YiG6YWN5pa55rOVIDM3N108YnI+WyAxNi42IOWwj+e7kyAzNzddPGJyPlsgMTYuNyDov5vkuIDmraXpmIXor7sgMzc4XTxicj5bIDE2Ljgg57uD5LmgIDM4MF08YnI+WyDnrKwxN+eroCDku6PnoIHosIPluqYgMzgxXTxicj5bIDE3LjEg5oyH5Luk6LCD5bqmIDM4MV08YnI+WyAxNy4xLjEg5YiG5pSv6LCD5bqmIDM4Ml08YnI+WyAxNy4xLjIg6KGo6LCD5bqmIDM4NV08YnI+WyAxNy4xLjMg6Ieq5Yqo55Sf5oiQ5oyH5Luk6LCD5bqm5ZmoIDM5MF08YnI+WyAxNy4xLjQg6LaF5qCH6YeP5a6e546w5pyJ5YWz55qE6LCD5bqmIDM5MF08YnI+WyAxNy4xLjUg5Z+65pys5Z2X6LCD5bqm5Lit55qE5YW25LuW6Zeu6aKYIDM5MF08YnI+WyAxNy4xLjYg6Leo5Z+65pys5Z2X6L6555WM55qE6LCD5bqmIDM5Ml08YnI+WyAxNy4yIOWJjeeeu+WPluWSjOS4iuaOqCAzOTJdPGJyPlsgMTcuMyDliY3nnrvosIPluqYgMzkzXTxicj5bIDE3LjQg6L2v5rWB5rC0IDM5M108YnI+WyAxNy40LjEg56qX5Y+j6LCD5bqmIDM5NV08YnI+WyAxNy40LjIg5bGV5byALeWOi+Wunui9r+a1geawtCAzOTddPGJyPlsgMTcuNC4zIOW+queOr+WxleW8gCA0MDBdPGJyPlsgMTcuNC40IOWPmOmHj+aJqeW8oCA0MDNdPGJyPlsgMTcuNC41IOWvhOWtmOWZqOmHjeWRveWQjSA0MDRdPGJyPlsgMTcuNC42IOi9r+a1geawtOeahOWFtuS7luaWueazlSA0MDddPGJyPlsgMTcuNC43IOWxguasoeW9kue6piA0MDddPGJyPlsgMTcuNSDouKrov7nosIPluqYgNDA4XTxicj5bIDE3LjYg5riX6YCP6LCD5bqmIDQwOV08YnI+WyAxNy43IOWwj+e7kyA0MTFdPGJyPlsgMTcuOCDov5vkuIDmraXpmIXor7sgNDEzXTxicj5bIDE3Ljkg57uD5LmgIDQxM108YnI+WyDnrKwxOOeroCDmjqfliLbmtYHlkozkvY7nuqfkvJjljJYgNDE1XTxicj5bIDE4LjEg5LiN5Y+v5Yiw6L6+5Luj56CB55qE5Yig6ZmkIDQxNV08YnI+WyAxOC4yIOS8uOebtOWMliA0MTddPGJyPlsgMTguMyBpZuWMlueugCA0MTldPGJyPlsgMTguNCDlvqrnjq/ljJbnroAgNDIwXTxicj5bIDE4LjUg5b6q546v5YCS572uIDQyMV08YnI+WyAxOC42IOaXoOW8gOWFs+WMliA0MjJdPGJyPlsgMTguNyDliIbmlK/kvJjljJYgNDIyXTxicj5bIDE4Ljgg5bC+6J6N5ZCI5oiW5Lqk5Y+J6L2s56e7IDQyM108YnI+WyAxOC45IOadoeS7tuS8oOmAgSA0MjRdPGJyPlsgMTguMTAg5q275Luj56CB5Yig6ZmkIDQyNV08YnI+WyAxOC4xMSDliIbmlK/pooTmtYsgNDI5XTxicj5bIDE4LjEyIOacuuWZqOaWueiogOWSjOaMh+S7pOW9kuW5tiA0MzBdPGJyPlsgMTguMTMg5bCP57uTIDQzM108YnI+WyAxOC4xNCDov5vkuIDmraXpmIXor7sgNDMzXTxicj5bIDE4LjE1IOe7g+S5oCA0MzVdPGJyPlsg56ysMTnnq6Ag6L+H56iL6Ze05YiG5p6Q5LiO5LyY5YyWIDQzN108YnI+WyAxOS4xIOi/h+eoi+mXtOaOp+WItua1geWIhuaekO+8muiwg+eUqOWbviA0MzhdPGJyPlsgMTkuMiDov4fnqIvpl7TmlbDmja7mtYHliIbmnpAgNDQ1XTxicj5bIDE5LjIuMSDmtYHkuI3mlY/mhJ/lia/kvZznlKjliIbmnpAgNDQ1XTxicj5bIDE5LjIuMiDmtYHmlY/mhJ/lia/kvZznlKjvvJrnqIvluo/mpoLopoHlm74gNDU1XTxicj5bIDE5LjIuMyDlia/kvZznlKjorqHnrpfkuK3nmoTlhbbku5bpl67popggNDU4XTxicj5bIDE5LjMg6L+H56iL6Ze05bi45pWw5Lyg5pKtIDQ1OF08YnI+WyAxOS40IOi/h+eoi+mXtOWIq+WQjeWIhuaekCA0NjFdPGJyPlsgMTkuNC4xIOa1geS4jeaVj+aEn+WIq+WQjeWIhuaekCA0NjJdPGJyPlsgMTkuNC4yIOS8oOWAvOWSjOS8oOaMh+mSiOivreiogOeahOi/h+eoi+mXtOWIq+WQjeWIhuaekCA0NzFdPGJyPlsgMTkuNSDov4fnqIvpl7TkvJjljJYgNDczXTxicj5bIDE5LjYg6L+H56iL6Ze05a+E5a2Y5Zmo5YiG6YWNIDQ3NV08YnI+WyAxOS42LjEg6L+e5o6l5pe255qE5a+E5a2Y5Zmo5YiG6YWNIDQ3NV08YnI+WyAxOS42LjIg57yW6K+R5pe255qE6L+H56iL6Ze05a+E5a2Y5Zmo5YiG6YWNIDQ3N108YnI+WyAxOS43IOWFqOWxgOW8leeUqOeahOiBmuWQiCA0NzddPGJyPlsgMTkuOCDov4fnqIvpl7TnqIvluo/nrqHnkIbkuK3nmoTlhbbku5bkuLvpopggNDc4XTxicj5bIDE5Ljkg5bCP57uTIDQ3OF08YnI+WyAxOS4xMCDov5vkuIDmraXpmIXor7sgNDgwXTxicj5bIDE5LjExIOe7g+S5oCA0ODBdPGJyPlsg56ysMjDnq6Ag5a2Y5YKo5bGC5qyh5LyY5YyWIDQ4M108YnI+WyAyMC4xIOaVsOaNruWSjOaMh+S7pOmrmOmAn+e8k+WtmOeahOW9seWTjSA0ODRdPGJyPlsgMjAuMiDmjIfku6Tpq5jpgJ/nvJPlrZjkvJjljJYgNDg1XTxicj5bIDIwLjIuMSDliKnnlKjnoazku7bovoXliqnvvJrmjIfku6TpooTlj5YgNDg1XTxicj5bIDIwLjIuMiDov4fnqIvmjpLluo8gNDg1XTxicj5bIDIwLjIuMyDov4fnqIvlkozln7rmnKzlnZfnmoTmlL7nva4gNDg5XTxicj5bIDIwLjIuNCDov4fnqIvlhoXnmoTku6PnoIHlronnva4gNDg5XTxicj5bIDIwLjIuNSDov4fnqIvliIboo4IgNDkyXTxicj5bIDIwLjIuNiDov4fnqIvlhoXlkozov4fnqIvpl7Tmlrnms5XnmoTnu5PlkIggNDkyXTxicj5bIDIwLjMg5pWw57uE5YWD57Sg55qE5qCH6YeP5pu/5o2iIDQ5M108YnI+WyAyMC40IOaVsOaNrumrmOmAn+e8k+WtmOS8mOWMliA0OTZdPGJyPlsgMjAuNC4xIOi/h+eoi+mXtOeahOaVsOaNruWuieaOkiA0OTddPGJyPlsgMjAuNC4yIOW+queOr+i9rOaNoiA0OThdPGJyPlsgMjAuNC4zIOWxgOmDqOaAp+S4juW+queOr+mTuuegjCA1MDJdPGJyPlsgMjAuNC40IOWIqeeUqOehrOS7tui+heWKqe+8muaVsOaNrumihOWPliA1MDRdPGJyPlsgMjAuNSDmoIfph4/kvJjljJbkuI7pnaLlkJHlrZjlgqjlmajnmoTkvJjljJYgNTA1XTxicj5bIDIwLjYg5bCP57uTIDUwNl08YnI+WyAyMC43IOi/m+S4gOatpemYheivuyA1MDhdPGJyPlsgMjAuOCDnu4PkuaAgNTA4XTxicj5bIOesrDIx56ugIOe8luivkeWZqOWunuS+i+WIhuaekOS4juacquadpeeahOWPkeWxlei2i+WKvyA1MDldPGJyPlsgMjEuMSBTdW7nlKjkuo5TUEFSQ+eahOe8luivkeWZqCA1MTBdPGJyPlsgMjEuMS4xIFNQQVJD5L2T57O757uT5p6EIDUxMF08YnI+WyAyMS4xLjIgU3VuIFNQQVJD57yW6K+R5ZmoIDUxMV08YnI+WyAyMS4yIElCTSBQT1dFUuWSjFBvd2VyUEPkvZPns7vnu5PmnoTnmoRYTOe8luivkeWZqCA1MTddPGJyPlsgMjEuMi4xIFBPV0VS5ZKMUG93ZXJQQ+S9k+ezu+e7k+aehCA1MTddPGJyPlsgMjEuMi4yIFhM57yW6K+R5ZmoIDUxOF08YnI+WyAyMS4zIERFQ+eUqOS6jkFscGhh55qE57yW6K+R5ZmoIDUyNF08YnI+WyAyMS4zLjEgQWxwaGHkvZPns7vnu5PmnoQgNTI0XTxicj5bIDIxLjMuMiBBbHBoYeeahEdFTee8luivkeWZqCA1MjVdPGJyPlsgMjEuNCBJbnRlbCAzODbkvZPns7vnu5PmnoTkuIrnmoRJbnRlbOWPguiAg+e8luivkeWZqCA1MzBdPGJyPlsgMjEuNC4xIEludGVsIDM4NuS9k+ezu+e7k+aehCA1MzBdPGJyPlsgMjEuNC4yIEludGVs57yW6K+R5ZmoIDUzMV08YnI+WyAyMS41IOWwj+e7kyA1MzhdPGJyPlsgMjEuNiDnvJbor5Hlmajorr7orqHlkozlrp7njrDmnKrmnaXnmoTotovlir8gNTM5XTxicj5bIDIxLjcg6L+b5LiA5q2l6ZiF6K+7IDUzOV08YnI+WyDpmYTlvZVBIOacrOS5puS9v+eUqOeahOaxh+e8luivreiogOaMh+WNlyA1NDFdPGJyPlsg6ZmE5b2VQiDpm4blkIjjgIHluo/liJfjgIHmoJHjgIFEQUflkozlh73mlbDnmoTooajnpLogNTQ5XTxicj5bIOmZhOW9lUMg6L2v5Lu26LWE5rqQIDU1N108YnI+WyDlj4LogIPmlofnjK4gNTYxXTxicj5bIOe0ouW8lSA1NzkgXTwvdGQ+PC90cj48L3RhYmxlPjx0YWJsZSB3aWR0aD0iNzUwIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMCIgc3R5bGU9ImJvcmRlci1zdHlsZTogc29saWQ7Ym9yZGVyLWNvbG9yOiAjY2NjY2NjO21hcmdpbi10b3A6IDEwLjBweDtsaW5lLWhlaWdodDogMjMuMHB4O2NvbG9yOiAjNjY2NjY2OyI+PHRyPjx0ZCBzdHlsZT0iYm9yZGVyLWJvdHRvbS1zdHlsZTogZGFzaGVkO2JvcmRlci1ib3R0b20tY29sb3I6ICNjY2NjY2M7YmFja2dyb3VuZC1jb2xvcjogI2ZiZmJmYjtmb250LXdlaWdodDogYm9sZDtjb2xvcjogIzk5MDAwMDsiPjxpbWcgc3JjPSJodHRwczovL2ltZy5hbGljZG4uY29tL2ltZ2V4dHJhL2kxLzIxNzA0Mjk3Ni9UQjIyXzZBdzFHU0J1TmpTc3BiWFhjaWlwWGFfISEyMTcwNDI5NzYuanBnIj48L3RkPjwvdHI+PHRyPjx0ZCBzdHlsZT0icGFkZGluZzogMTAuMHB4O2NvbG9yOiAjMDAwMDAwOyI+WyDmnKzkuaborqjorrrljZXmnLrnvJbor5Hlmajorr7orqHlkozlrp7njrDmioDmnK/poobln5/nmoTliY3msr/pl67popjvvIzph43ngrnorqjorrrnvJbor5HkvJjljJbmioDmnK/vvIjotoXov4fkuobmnKzkuaY2MO+8heeahOevh+W5he+8ieOAguaIkeS7rOiAg+iZkeS6huaUr+aMgeaMh+S7pOe6p+W5tuihjOeahOacuuWZqO+8jOS9huWHoOS5juWujOWFqOW/veeVpeS6huWkp+inhOaooeW5tuihjOWkhOeQhuWSjOWQkemHj+WkhOeQhueahOacieWFs+mXrumimOOAgiDmnKzkuabpppblhYjorqjorrrnvJbor5HlmajnmoTnu5PmnoTjgIHnrKblj7fooajnrqHnkIbvvIjljIXmi6zpgqPkupvlhYHorrjlr7zlhaXlkozlr7zlh7rkvZznlKjln5/nmoTor63oqIDvvInjgIHkuK3pl7Tku6PnoIHnu5PmnoTjgIHov5DooYzml7bmlK/mjIHpl67popjvvIjljIXmi6zlj6/ku6XlnKjov5DooYzml7bpk77mjqXnmoTlhbHkuqvlr7nosaHvvInvvIzku6Xlj4rmoLnmja7mnLrlmajmj4/ov7Doh6rliqjkuqfnlJ/ku6PnoIHnlJ/miJDlmajnrYnjgILkuYvlkI7vvIzmjqLorqjov4fnqIvlhoXnmoTvvIjpgJrluLjnp7DkuLpdJnF1b3Q7W+WFqOWxgOeahF0mcXVvdDtb77yJ5o6n5Yi25rWB5YiG5p6Q44CB5pWw5o2u5rWB5YiG5p6Q44CB5L6d6LWW5YWz57O75YiG5p6Q5ZKM5Yir5ZCN5YiG5p6Q55qE5ZCE56eN5pa55rOV77yM5bm25LuL57uN5LiA57O75YiX55qE5YWo5bGA5LyY5YyW77yM5YyF5ous6YKj5Lqb5L2c55So5LqO56iL5bqP5LiN5ZCM5oiQ5YiG77yI5LuO5Y2V5Liq6KGo6L6+5byP5Yiw5pW05Liq6L+H56iL77yJ55qE5LyY5YyW44CC5o6l5LiL5p2l5pys5Lmm6K6y6L+w6L+H56iL6Ze055qE5o6n5Yi25rWB5YiG5p6Q44CB5pWw5o2u5rWB5YiG5p6Q5ZKM5Yir5ZCN5YiG5p6Q77yM5Lul5Y+K6L+H56iL6Ze05LyY5YyW5ZKM5aaC5L2V5bqU55So6L+H56iL6Ze05L+h5oGv5p2l5pS55ZaE5YWo5bGA5LyY5YyW44CC54S25ZCO77yM6K6o6K665pyJ5pWI5Yip55So5bGC5qyh5a2Y5YKo57O757uf55qE5LyY5YyW5oqA5pyv44CC5pyA5ZCO77yM6K+m57uG5LuL57uNNOS4quWIhuWIq+adpeiHqkRFQ+OAgUlCTeOAgUludGVs5ZKMU3VuIOW+ruezu+e7n+WFrOWPuOeahOWVhuS4muWMlue8luivkeezu+e7n++8jOS7peaPkOS+m+e8luivkeWZqOe7k+aehOOAgeS4remXtOS7o+eggeiuvuiuoeOAgeS8mOWMluetlueVpeWSjOaViOaenOeahOS4k+mXqOS+i+WtkOOAguWmguaIkeS7rOWwhueci+WIsOeahO+8jOi/meS6m+e8luivkeezu+e7n+mHh+eUqOeahOaKgOacr+WFt+acieW5v+azm+eahOS7o+ihqOaAp++8jOW5tueUqOS4jeWQjOeahOaWueazleiOt+W+l+S6huexu+S8vOeahOaViOaenOOAgiDmnKzkuabnmoTlhpnkvZzov4fnqIsgMTk5MOW5tDbmnIjliLAxOTkx5bm077yM5oiR5ZyoU3Vu5b6u57O757uf5YWs5Y+45ouF5Lu76auY57qn5bel56iL5biI44CC5ZyoQUNNIFNJR1BMQU7nmoTnqIvluo/or63oqIDorr7orqHlkozlrp7njrDmioDmnK/lubTkvJrkuIrvvIzmiJHnlKjljYrlpKnml7bpl7TkvZzkuobkuIDkuKrlkI3kuLpdJnF1b3Q7W1JJU0Pns7vnu5/pq5jnuqfnvJbor5HmioDmnK9dJnF1b3Q7W+eahOiusuW6p+OAguWcqOi/meS4quiusuW6p+S4iu+8jOaIkeeUqOWkp+e6pjEzMOW8oOW5u+eBr+eJh+iusuino+S6hlJJU0PkvZPns7vnu5PmnoTlkoznm7jlhbPnmoTnvJbor5HmioDmnK/vvIznibnliKvmmK/kvJjljJbmioDmnK/jgILlnKjpgqPmrKHorrLluqfkuYvlkI7vvIzmiJHmnInkuobkuIDkuKrmg7Pms5XvvIzljbPorrLluqfmnZDmlpnlj6/og73mmK/kuIDpopfmuLTmnJvnnYDpmLPlhYnjgIHlnJ/lo6TlkozmsLTliIbvvIzmnJ/lvoXnnYDplb/miJDlj4LlpKnlpKfmoJHnmoTnp43lrZDvvIjlrp7pmYXkuIrvvIzlnKjmiJHnmoTohJHmtbfkuK3mmK/kuIDpopfmqaHmoJHnp43lrZDvvInvvIzogIzov5nmo7XlpKfmoJHlsLHmmK/kvaDpnaLliY3nmoTov5nmnKzkuabjgILkuIDlubTlpJrlkI7vvIzmiJHkuI5XYXluZSBSb3Npbmforqjorrrkuobov5nkuKrmg7Pms5XvvIznhLblkI7lj4jlkJFTdW7lvq7ns7vnu5/lrp7pqozlrqTkuLvku7vkvZzkuobmsYfmiqXvvIzlh6DlkajlkI7ku5blsLHlhrPlrprmlK/mjIHov5nmnKzkuabnmoTlhpnkvZzvvIzlubbnu5nkuojkuobkuIDlubTljYrnmoTml7bpl7Tlkozpg6jliIbotYTliqnjgIIg5pys5Lmm55qE56ys5LiA56i/5Lit6Zmk5LqG6auY57qn57yW6K+R5oqA5pyv5aSW77yM6L+Y5YyF5ZCr5LqG55u45b2T5aSa55qEUklTQ+S9k+ezu+e7k+aehOeahOWGheWuueOAguS4jeS5heaIkeWwseiupOivhuWIsO+8iOWcqDPkvY3or4TpmIXogIXnmoTluK7liqnkuIvvvInvvIzkuI3lv4XopoHlhpnov5nkuYjlpJrkvZPns7vnu5PmnoTnmoTlhoXlrrnjgILmlrDnmoRSSVND5L2T57O757uT5p6E5LiN5pat6KKr5byA5Y+R5Ye65p2l77yM5aSn5aSa5pWw5aSn5a2m55qE5L2T57O757uT5p6E6K++56iL6YO95LuL57uN5LqG56CU56m257yW6K+R5oqA5pyv5omA6ZyA6KaB55qE55u45YWz55+l6K+G77yM5pys5Lmm55qE6YeN54K55bqU6K+l5piv57yW6K+R5oqA5pyv44CCIOi/meWvvOiHtOS6huacrOS5puWGmeS9nOaWueWQkeeahOS4gOasoemHjeWkp+aUueWPmOOAguS9k+ezu+e7k+aehOaWuemdoueahOWkp+WkmuaVsOWGheWuuemDveiiq+WIoOmZpOS6hu+8jOS7heS7heS/neeVmeS6huS9k+ezu+e7k+aehOS4reS4jue8luivkei/h+eoi+WGs+etluacieWFs+eahOWGheWuueOAgue8luivkeWZqOeahOadkOaWmeS5n+aLk+WuveS4uuWMheWQq+S6huacieWFs0NJU0PnmoTnvJbor5HmioDmnK/vvIzlkIzml7blhrPlrprlj6rpm4bkuK3orqjorrrljZXmnLrnvJbor5HmioDmnK/vvIzlsIblubbooYzljJblkozlkJHph4/ljJbnmoTlhoXlrrnnlZnlvoXlhbbku5bkuabljrvorqjorrrjgILmnInlhbPnvJbor5HmioDmnK/nmoTlhoXlrrnmm7TliqDpm4bkuK3lkozmt7HlhaXvvIzmnInkupvmlrnpnaLnvKnlsI/kuobojIPlm7TvvIzmnInkupvmlrnpnaLlj4jmianlpKfkuobojIPlm7TvvIjkvovlpoLvvIzmnInlhbPmiYvlt6Xku6PnoIHnlJ/miJDnmoTlhoXlrrnlh6DkuY7lhajpg6jliKDpmaTkuobvvIzkvYbmt7vliqDkuobmnInlhbPlhYjov5vosIPluqbmioDmnK/nmoTlhoXlrrnvvIzlpoLouKrov7nosIPluqblkozmuJfpgI/osIPluqbvvInjgILov5nmoLflsLHlvaLmiJDkuobkvaDpnaLliY3nmoTov5nmnKzkuabjgIIg5YWz5LqO5pys5Lmm55qE5bCB6Z2iIOacrOS5puWwgemdoueahOWbvueJh+aYr+S7juS9nOiAheeahOilv+WMl+a1t+WyuOawkemXtOiJuuacr+aUtuiXj+S4remAieWPlueahO+8jOi/meaYr+S4gOW8oOWlh+WwlOWNoeeJueavm+avr+eahOeFp+eJh+OAgui/meWdl+avm+avr+aYr+WcqDE55LiW57qq5pma5pyf77yM55Sx576O5Zu96Zi/5ouJ5pav5Yqg5Lic5Y2X6YOo55qE5LiA5Liq54m56YeM5ZCJ54m55aaH5aWz77yM55So57qi5p2+5YaF5bGC5qCR55qu5Yi25oiQ55qE6Z2e5bi457uG55qE57uz5a2Q5ZKM5bGx576K5q+b57q/57yW57uH55qE44CC57yW57uH6L+Z5qC35LiA5Z2X5q+b5q+v6YCa5bi46ZyA6KaBNn455Liq5pyI44CC6L+Z5Z2X5q+b5q+v55qE5Zu+5qGI5YiG5Li6M+S4qumDqOWIhuOAguS4remXtOeahOS4gOWdl+aPj+e7mOS6huS4gOadoeWcqOawtOS4rea9nOa4uOeahOmyuOmxvO+8m+myuOmxvOWktOS9jeS6juW6lemDqO+8jOaYr+S4gOS4quWJsuijguW8gOS6hueahOWbvuW9ou+8m+S4remXtOacieedgOmyuOmxvOmdoumDqOeahOmCo+S4quWbvuW9ouaYr+myuOmxvOeahOi6q+S9k++8iOWcqOi/meexu+e7mOeUu+S4re+8jOeci+i1t+adpeWDj+myuOmxvOmdoumDqOeahOWbvuW9ouW5tuS4jeihqOekuumyuOmxvOeahOmdoumDqO+8ie+8m+myuOmxvOeahOS+p+mzjeWcqOi6q+S9k+eahOS4pOi+ue+8m+iAjOmhtumDqOaYr+myuOmxvOeahOWwvumzjeOAgui/meS4quiuvuiuoeS4reeahOavj+S4gOmDqOWIhu+8jOWwseacrOi6q+iAjOiogO+8jOmDveaYr+WKn+iDveS4iueahO+8jOW5tuayoeacieihqOi+vuS7gOS5iOWQq+aEj++8m+S9huWug+S7rOaMieato+ehrueahOaWueW8j+e7hOWQiOi1t+adpe+8jOWwseaPj+e7mOS6huS4gOadoeWcqOawtOS4rea9nOa4uOeahOmyuOmxvO+8jOaYvuekuuS6huaLpeaciei/meadoeavm+avr+eahOadkemVv+eahOadg+WKm+WSjOeJueadg+OAgiDnsbvkvLzlnLDvvIzkuIDkuKrnvJbor5HlmajnmoTmr4/kuKrnu4Tku7bmnInnnYDmn5Dnp43lip/og73vvIzkvYbku4XlvZPov5nkupvnu4Tku7bku6XpgILlvZPnmoTmlrnlvI/nu4TlkIjlnKjkuIDotbfml7bvvIzmiY3og73lrozmlbTlnLDlrp7njrDnvJbor5HlmajnmoTlip/og73jgILorr7orqHlkoznvJbnu4fov5nmoLfkuIDlnZfmr5vmr6/pnIDopoHmioDlt6fvvIzlkIzmoLfvvIzmnoTpgKDlt6XkuJrmsLTlh4bnmoTnvJbor5HlmajkuZ/pnIDopoHmioDlt6fjgILmr4/kuKrooYzkuJrpg73mnInkuIDnu4TnibnlrprnmoTlt6XlhbfjgIHmnZDmlpnjgIHorr7orqHopoHntKDlkozmgLvkvZPmqKHlvI/vvIzogIzmiYDmnInov5nkuIDliIfpg73lv4XpobvmjInmu6HotrPpooTmnJ/nlKjmiLfnmoTpnIDopoHlkozmhL/mnJvnmoTmlrnlvI/nu4TlkIjliLDkuIDotbfjgIIg5pys5Lmm55qE6K+76ICFIOacrOS5pumihOacn+eahOivu+iAheaYr+mcgOimgeS6huino+iuvuiuoeWSjOaehOmAoOWNleacuumrmOe6p+e8luivkeWZqOacieWFs+mXrumimOeahOiuoeeul+acuuS4k+S4muS6uuWRmOOAgeeglOeptueUn+WSjOmrmOW5tOe6p+acrOenkeeUn+OAguaIkeS7rOWBh+Wumuivu+iAheW3sue7j+mAieS/ruS6huaVsOaNrue7k+aehOOAgeeul+azleOAgee8luivkeWZqOiuvuiuoeWSjOWunueOsOOAgeiuoeeul+acuuS9k+ezu+e7k+aehOOAgeaxh+e8luivreiogOeoi+W6j+iuvuiuoeetieivvueoi++8jOaIluW3sue7j+WFt+acieebuOW9k+eahOW3peS9nOe7j+mqjOOAgiDlhoXlrrnmpoLop4gg5YWo5Lmm5YiG5Li6MjHnq6DvvIzlj6bmnIkz5Liq6ZmE5b2V44CCIOesrDHnq6Ag6auY57qn5Li76aKY5LuL57uNIOi/meS4gOeroOS7i+e7jeacrOS5pueahOS4u+mimO+8jOWNs+mrmOe6p+e8luivkeWZqOeahOiuvuiuoeWSjOaehOmAoO+8jOWQjOaXtuiuqOiuuue8luivkeWZqOeahOe7k+aehOWSjOe8luivkeS8mOWMlueahOmHjeimgeaAp++8jOW5tuS7i+e7jeacrOS5puWGheWuueeahOe7hOe7h+e7k+aehOOAgiDnrKwy56ugIOmdnuW9ouW8j+WMlue8luivkeeul+azleihqOekuiDnrKwy56ug5LuL57uN5LqG5LiA56eN56ew5Li6SUNBTueahOmdnuW9ouW8j+WMlueahOeoi+W6j+iuvuiuoeihqOekuuaWueazle+8jOW5tue7meWHuuS6huacieWFs+S+i+WtkOOAgui/meenjeihqOekuuaWueazleeUqOS6juihqOekuuacrOS5puS4reeahOe8luivkeeul+azleOAguWcqOS7i+e7jeS6hui/meenjeivreiogOeahOivreazleespuWPt+S5i+WQju+8jOaIkeS7rOe7meWHuuS6hklDQU7nmoTmpoLov7DvvIzmjqXnnYDor6bnu4bmj4/ov7Dkuobor6Xor63oqIDjgILor7vogIXor7vkuoZJQ0FO55qE5qaC6L+w77yM5bCx6Laz5Lul6K+75oeC5pys5Lmm5Lit55qE5aSn5aSa5pWw566X5rOV77yM5Y+q5piv5Zyo5b6I5bCR55qE5oOF5Ya15LiL77yM5omN6ZyA6KaB5LqG6KejSUNBTueahOWFqOmDqOe7huiKguOAgiDnrKwz56ugIOespuWPt+ihqOe7k+aehCDnrKwz56ug6aaW5YWI6K6o6K665Y+Y6YeP55qE5bGe5oCn77yM5L6L5aaC5a2Y5YKo57G744CB5Y+v6KeB5oCn44CB5piT5Y+Y5oCn44CB5L2c55So5Z+f44CB5aSn5bCP44CB57G75Z6L44CB5a+56b2Q44CB57uT5p6E44CB5a+75Z2A5pa55rOV562J44CC54S25ZCO57uZ5Ye65LqG6auY5pWI5Zyw5p6E6YCg5ZKM566h55CG5bGA6YOo5ZKM5YWo5bGA56ym5Y+36KGo55qE5pa55rOV77yM5YyF5ous5a+85YWl55qE5ZKM5a+85Ye655qE5L2c55So5Z+f77yI5ZyoQWRh44CBTWVzYeOAgU1vZHVsYS0y5Lit5a2Y5Zyo6L+Z56eN5oOF5Ya177yJ44CB5a2Y5YKo57uR5a6a77yM5Lul5Y+K5Zyo6ICD6JmR5LiK6L+w5bGe5oCn55qE5YmN5o+Q5LiL5Lqn55Sf5Y+W44CB5a2Y5oyH5Luk55qE5pa55rOV44CCIOesrDTnq6Ag5Lit6Ze06KGo56S6IOi/meS4gOeroOmbhuS4reS7i+e7jeS4remXtOivreiogOeahOiuvuiuoeOAgeacrOS5puS4k+eUqOeahOS4ieenjeS4remXtOivreiogO+8jOS7peWPiue8luivkeWZqOS4reWPr+iDveS9v+eUqOeahOS4remXtOS7o+eggeeahOWFtuS7luWfuuacrOW9ouW8j+OAguaIkeS7rOS9v+eUqOS6huWvhuWIh+ebuOWFs+eahOmrmOOAgeS4reOAgeS9juS4ieenjeW9ouW8j+eahOS4remXtOivreiogO+8jOS7peS+v+iDveWkn+a3seWFpeivtOaYjuS5puS4reiuqOiuuueahOaJgOacieS8mOWMlueul+azleOAguaIkeS7rOi/mOiuqOiuuuS6huacrOS5puS9v+eUqOeahOS4remXtOivreiogOWSjOWFtuS7luS4remXtOivreiogOeahOebuOWvuemHjeimgeaAp+S7peWPiuWug+S7rOeahOeUqOmAlOOAgiDlj6blpJbkuKTnp43mm7Tor6bnu4bnmoTkuK3pl7Tku6PnoIHlvaLlvI/vvIzljbPpnZnmgIHljZXotYvlgLzvvIhTU0HvvInlkoznqIvluo/kvp3otZblm77liIbliKvlnKg4LjEx6IqC5ZKMOS416IqC5Lit6K6o6K6644CCIOesrDXnq6Ag6L+Q6KGM5pe25pSv5oyBIOesrDXnq6DlhbPms6jnmoTpl67popjkuLvopoHkuI7ov5DooYzml7bmlK/mjIHnlKjpq5jnuqfnqIvluo/orr7orqHor63oqIDnvJblhpnnmoTnqIvluo/mnInlhbPvvIzmiJHku6zorqjorrrkuobmlbDmja7ooajnpLrjgIHlr4TlrZjlmajkvb/nlKjjgIHov5DooYzml7bmoIjlkozmoIjluKfnmoTorr7orqHjgIHlj4LmlbDkvKDpgJLjgIHov4fnqIvnu5PmnoTlkozpk77mjqXjgIHov4fnqIvlgLzlj5jph4/jgIHku6PnoIHlhbHkuqvjgIHkvY3nva7ml6DlhbPku6PnoIHvvIzku6Xlj4rkuLrmlK/mjIHnrKblj7flkozlpJrmgIHor63oqIDmtonlj4rnmoTkuIDkupvpl67popjjgIIg56ysNueroCDoh6rliqjkuqfnlJ/ku6PnoIHnlJ/miJDlmagg56ysNueroOiuqOiuuuagueaNruacuuWZqOaPj+i/sOiHquWKqOS6p+eUn+S7o+eggeeUn+aIkOWZqOeahOaWueazleOAguaIkeS7rOivpue7hue7meWHuuS6hkdyYWhhbS1HbGFudmlsbGXnmoTor63ms5XliLblr7zmioDmnK/vvIzlubbku4vnu43kuoblj6blpJbkuKTnp43mlrnms5XvvIzljbPor63kuYnliLblr7zliIbmnpDlkozmoJHmqKHlvI/ljLnphY3jgIIg56ysN+eroCDmjqfliLbmtYHliIbmnpAg6L+Z5LiA56ug5ZKM6ZqP5ZCO55qE5LiJ56ug6K6o6K665L2c55So5LqO6L+H56iL55qENOenjeWIhuaekOaWueazle+8jOi/meS6m+WIhuaekOWvueS6juWunueOsOato+ehruWSjOacieaViOeahOeoi+W6j+S8mOWMluiHs+WFs+mHjeimgeOAgiDnrKw356ug6YeN54K56K6o6K6656Gu5a6a6L+H56iL5Lit55qE5o6n5Yi25rWB5ZKM5p6E6YCg5o6n5Yi25rWB5Zu+77yIQ0ZH77yJ55qE5pa55rOV44CC5oiR5Lus6aaW5YWI57u86L+w5LqG6Iul5bmy56eN5Y+v6IO95L2/55So55qE5pa55rOV77yM54S25ZCO6K+m57uG6K6o6K665YW25Lit55qE5LiJ56eN44CC56ys5LiA56eN5piv6YeH55So5rex5bqm5Li65Li75pCc57Si5ZKM5b+F57uP57uT54K555qE5Lyg57uf5pa55rOV44CC5Zyo6K6o6K665a6D55qE5ZCM5pe277yM5oiR5Lus5Lmf5bCG6K6o6K665rWB5Zu+55qE6YGN5Y6G77yM5aaCQ0ZH55qE5YmN5bqP6YGN5Y6G5ZKM5ZCO5bqP6YGN5Y6G77yM5Lul5Y+K5p+l5om+Q0ZH55qE5by66L+e6YCa5a2Q5Zu+44CC5Y+m5aSW5Lik56eN5pa55rOV5L6d6LWW5LqO5Y+v5b2S57qm5oCn55qE5qaC5b+177yM5a6D5L2/5b6X6L+H56iL55qE5o6n5Yi25rWB5Zu+5Y+v5Lul5bGC5qyh5byP5Zyw5p6E5oiQ44CC6L+Z5Lik56eN5pa55rOV5YiG5Yir56ew5Li65Yy66Ze05YiG5p6Q5ZKM57uT5p6E5YiG5p6Q77yM5Lik6ICF5LmL6Ze055qE5LiN5ZCM5Zyo5LqO5a6D5Lus6L6o5Yir55qE57uT5p6E5Y2V5YWD55qE57G75Z6L44CC5oiR5Lus5Lmf6K6o6K665LqG55So5omA6LCT55qE5o6n5Yi25qCR6KGo56S65LiA5Liq6L+H56iL55qE5bGC5qyh57uT5p6E5pa55rOV44CCIOesrDjnq6Ag5pWw5o2u5rWB5YiG5p6QIOesrDjnq6Dorqjorrrnoa7lrprov4fnqIvkuK3mlbDmja7mtYHnmoTmlrnms5XjgILlroPku47kuIDkuKrkvovlrZDlvIDlp4vvvIznhLblkI7orqjorrrmlbDmja7mtYHliIbmnpDmiYDkvp3otZbnmoTln7rmnKzmlbDlrabmpoLlv7XvvIzljbPmoLzjgIHmtYHlh73mlbDlkozkuI3liqjngrnjgILmjqXkuIvmnaXnu5nlh7rmlbDmja7mtYHpl67popjlkozop6Pms5XnmoTliIbnsbvvvIznhLblkI7or6bnu4borqjorrrkuI7liY3kuIDnq6Az56eN5o6n5Yi25rWB5YiG5p6Q5pa55rOV5a+55bqU55qEM+enjeaVsOaNrua1geWIhuaekOaWueazleOAguesrOS4gOenjeaWueazleaYr+i/reS7o+aVsOaNrua1geWIhuaekO+8jOWug+WvueW6lOS6juS9v+eUqOa3seW6puS4uuS4u+aQnOe0ouWSjOW/hee7j+e7k+eCueeahOaOp+WItua1geWIhuaekOOAguWPpuS4pOenjeaVsOaNrua1geWIhuaekOaWueazleS4juWfuuS6juaOp+WItuagkeeahOS4pOenjeaOp+WItua1geWIhuaekOWvueW6lO+8jOW5tuWIhuWIq+WFt+acieS4juWug+S7rOebuOWQjOeahOWQjeWtl++8muWMuumXtOWIhuaekOWSjOe7k+aehOWIhuaekOOAguWcqOatpOS5i+WQju+8jOaIkeS7rOamgui/sOS4gOenjeWwkeingeeahOensOS4uuS9jee9ruW8j+WIhuaekOeahOaWsOaKgOacr++8jOW5tuaPj+i/sOihqOekuuaVsOaNrua1geS/oeaBr+eahOaWueazle+8jOWNs2R16ZO+44CBdWTpk77jgIHnvZHvvIh3ZWLvvInlkozpnZnmgIHljZXotYvlgLzlvaLlvI/vvIjmiJZTU0HvvInjgILmnIDlkI7ogIPomZHmnInlhbPmlbDnu4TjgIHnu5PmnoTlkozmjIfpkojnmoTlpITnkIbvvIzlubbku6XlhbPkuo7mlbDmja7mtYHliIbmnpDlmajoh6rliqjmnoTpgKDmlrnms5XnmoTorqjorrrnu5PmnZ/mnKznq6DjgIIg56ysOeeroCDkvp3otZblhbPns7vliIbmnpDlkozkvp3otZblm74g56ysOeeroOWFs+azqOS+nei1luWFs+ezu+WIhuaekO+8jOS7peWPiuS4juS+nei1luWIhuaekOWvhuWIh+ebuOWFs++8jOensOS4uueoi+W6j+S+nei1luWbvueahOS4remXtOS7o+eggeW9ouW8j++8jOWFtuS4reeahOS+nei1luWFs+ezu+WIhuaekOaYr+WvueaVsOe7hOWSjOS9jue6p+WtmOWCqOW8leeUqOi/m+ihjOaVsOaNrua1geWIhuaekOeahOS4gOenjeeugOaYk+aWueazleOAguaIkeS7rOmmluWFiOiuqOiuuuS+nei1luWFs+ezu++8jOeEtuWQjuiuqOiuuuWmguS9leiuoeeul+WfuuacrOWdl+S4reeahOS+nei1luWFs+ezu++8jOi/meS6m+WGheWuueWvueS6juesrDE356ug5Lit6KaB5LuL57uN55qE5Luj56CB6LCD5bqm5oqA5pyv6Iez5YWz6YeN6KaB44CC5o6l552A6K6o6K665b6q546v5Lit55qE5L6d6LWW5YWz57O75Lul5Y+K5L6d6LWW5YWz57O75rWL6K+V5pa55rOV77yM5a6D5Lus5piv56ysMjDnq6DorqjorrrmlbDmja7lrZjlgqjkvJjljJbnmoTln7rnoYDjgILmnIDlkI7orqjorrrnqIvluo/kvp3otZblm77vvIzov5nmmK/kuIDnp43nm7TmjqXooajnpLrmjqfliLblkozmlbDmja7kvp3otZbnmoTkuK3pl7Tku6PnoIHlvaLlvI/vvIznlKjlroPmnaXov5vooYzkuIDns7vliJfnmoTnqIvluo/kvJjljJbmr5TnlKjpmpDlkKvnnYDkvp3otZbkv6Hmga/nmoTkuK3pl7Tku6PnoIHmnaXov5vooYznqIvluo/kvJjljJbopoHmm7TkuLrmnInmlYjjgIIg56ysMTDnq6Ag5Yir5ZCN5YiG5p6QIOesrDEw56ug6K6o6K665Yir5ZCN5YiG5p6Q77yM6L+Z56eN5YiG5p6Q56Gu5a6a5LiA5Liq5a2Y5YKo5Y2V5YWD5piv5ZCm5pyJ5Y+v6IO955Sx5aSa5Liq6K6/6Zeu6Lev5b6E6K6/6Zeu77yM5L6L5aaC5pei5Y+v55So5ZCN5a2X5Lmf5Y+v6YCa6L+H5oyH6ZKI5p2l6K6/6Zeu44CC5oiR5Lus6aaW5YWI6K6o6K665ZyoRm9ydHJhbiA3N+OAgVBhc2NhbOOAgUPlkoxGb3J0cmFuIDkw562J6K+t6KiA5Lit5Yir5ZCN5a+556iL5bqP55qE5b2x5ZON44CC5o6l552A6K6o6K665LiA56eN6Z2e5bi46YCa55So55qE5a+56L+H56iL5YaF5Ye6546w55qE5Yir5ZCN6L+b6KGM5Yik5a6a55qE5pa55rOV77yM6L+Z56eN5pa55rOV55Sx5LiA5Liq5LiO6K+t6KiA55u45YWz55qE5Yir5ZCN5pS26ZuG5Zmo5ZKM5LiA5Liq5LiO6K+t6KiA5peg5YWz55qE5Yir5ZCN5Lyg5pKt5Zmo57uE5oiQ44CC5Y+v5Lul5a+55Yir5ZCN5pS26ZuG5Zmo5ZKM5Lyg5pKt5Zmo5L2c6KOB5Ymq5p2l5o+Q5L6b5L+h5oGv77yM6L+Z5Lqb5L+h5oGv5Y+v5Lul5piv5L6d6LWW5LqO5oiW5LiN5L6d6LWW5LqO6L+H56iL5o6n5Yi25rWB55qE5L+h5oGv77yM5Lmf5Y+v5Lul5piv55So5YW25LuW5aSa56eN5pa55byP5o+Q5L6b55qE5L+h5oGv77yM5LuO6ICM5L2/5b6X5a6D5oiQ5Li65LiA56eN6IO95aSf6YCC5bqU54m55a6a56iL5bqP6K6+6K6h6K+t6KiA57yW6K+R5Zmo6ZyA6KaB5ZKM5pe26Ze06ZmQ5Yi255qE6YCa55So5pa55rOV44CCIOesrDEx56ugIOS8mOWMlueugOS7iyDnrKwxMeeroOS7i+e7jeS7o+eggeS8mOWMlueahOWGheWuue+8jOWug+mmluWFiOiuqOiuuuS6hui/meagt+S4gOS4quS6i+Wunu+8jOWNs++8jOWwveeuoeWkp+WkmuaVsOS8mOWMlueahOmAgueUqOaAp+WSjOacieaViOaAp+aYr+mAkuW9kuS4jeWPr+WIpOWumueahO+8jOS9huS7jeeEtuWAvOW+l+WvueS6jumAgueUqOaAp+WSjOacieaViOaAp+aYr+ehruWumueahOeoi+W6j+aWveWKoOi/meS6m+S8mOWMlu+8jOW5tuS4lOWvueesrDEyfjE456ug5raJ5Y+K55qE6L+H56iL5YaF5LyY5YyW5oqA5pyv5L2c5LqG5LiA55Wq5b+r6YCf5rWP6KeI44CC54S25ZCO6K6o6K665LqG5rWB5pWP5oSf5oCn5ZKM5Y+v6IO95LiO5LiA5a6a5L+h5oGv77yM5aaC5L2V5bCG6L+Z5Lqb5L+h5oGv5bqU55So5LqO5LyY5YyW77yM54m55a6a5LyY5YyW55qE55u45a+56YeN6KaB5oCn77yM5Lul5Y+K5a6D5Lus5bqU5pyJ55qE5omn6KGM6aG65bqP44CCIOesrDEy56ugIOWJjeacn+S8mOWMliDmnKznq6DorqjorrrlnKjkvJjljJbov4fnqIvnmoTovoPml6npmLbmrrXlrp7ooYznmoTkuIDkupvkvJjljJbmioDmnK/vvIzljIXmi6zogZrlkIjph4/nmoTmoIfph4/mm7/ku6PjgIHlsYDpg6jlkozlhajlsYDlgLznvJblj7fvvIjmlr3liqDkuo5TU0HlvaLlvI/nmoTku6PnoIHvvInjgIHlsYDpg6jlkozlhajlsYDlpI3lhpnkvKDmkq3jgIHnqIDmnInmnaHku7bluLjmlbDkvKDmkq3vvIjlkIzmoLfmlr3liqDkuo5TU0HlvaLlvI/nmoTku6PnoIHvvInjgILmnKznq6Dov5jlsIborqjorrrluLjmlbDooajovr7lvI/msYLlgLzvvIjmiJbluLjmlbDmipjlj6DvvInlkozku6PmlbDljJbnroDvvIzku6Xlj4rlpoLkvZXlnKjkvJjljJblmajkuK3ku6XlrZDnqIvluo/nmoTlvaLlvI/lrp7njrDlroPku6zvvIzku6Xkvr/lj6/pmo/ml7bmoLnmja7pnIDopoHogIzosIPnlKjjgIIg56ysMTPnq6Ag5YaX5L2Z5Yig6ZmkIOesrDEz56ug5YWz5rOo5Yeg56eN57G75Z6L55qE5YaX5L2Z5Yig6Zmk44CC5YaX5L2Z5Yig6Zmk55qE5Z+65pys5Yqf6IO95piv5Yig6Zmk6L+H56iL5Lit5LiA5p2h6Lev5b6E5LiK5aSa5LqO5LiA5qyh5omn6KGM55qE6K6h566X44CC5pys56ug5o+P6L+w5LqG5bGA6YOo5ZKM5YWo5bGA5YWs5YWx5a2Q6KGo6L6+5byP5Yig6Zmk44CB5ZCR5YmN5pu/5o2i44CB5b6q546v5LiN5Y+Y5Luj56CB5aSW5o+Q44CB6YOo5YiG5YaX5L2Z5Yig6Zmk5ZKM5Luj56CB5o+Q5Y2H44CCIOesrDE056ugIOW+queOr+S8mOWMliDnrKwxNOeroOeglOeptuaWveWKoOS6juW+queOr+eahOS8mOWMluaKgOacr++8jOWMheaLrOW9kue6s+WPmOmHj+eahOivhuWIq+OAgeW8uuW6puWJiuW8seOAgeW9kue6s+WPmOmHj+WIoOmZpOOAgee6v+aAp+WHveaVsOa1i+ivleabv+aNouWSjOS4jeW/heimgei+ueeVjOajgOafpeeahOWIoOmZpOOAgiDnrKwxNeeroCDov4fnqIvkvJjljJYg56ysMTXnq6Dnu5nlh7rmlr3liqDkuo7ov4fnqIvnmoTkvJjljJbmioDmnK/vvIzorqjorrrkuoblsL7osIPnlKjkvJjljJbvvIjljIXmi6zlsL7pgJLlvZLliKDpmaTvvInjgIHov4fnqIvpm4bmiJDjgIHlhoXltYzmianlsZXjgIHlj7bkvovnqIvkvJjljJblkozmlLbnvKnljIXoo4XjgIIg56ysMTbnq6Ag5a+E5a2Y5Zmo5YiG6YWNIOesrDE256ug5YWz5rOo6L+H56iL5YaF55qE5a+E5a2Y5Zmo5YiG6YWN5ZKM5oyH5a6a44CC5oiR5Lus6aaW5YWI6K6o6K665bGA6YOo55qE44CB5Z+65LqO5Luj5Lu355qE5pa55rOV77yM54S25ZCO6K6o6K665Zu+552A6Imy5rOV44CC5oiR5Lus6K6o6K665LqG5L2c5Li65a+E5a2Y5Zmo5YiG6YWN5a+56LGh55qE572R44CB5Yay56qB5Zu+44CB5Yay56qB5Zu+55qE552A6Imy5Lul5Y+K5rqi5Ye65Luj56CB55qE55Sf5oiQ44CC5Zyo5q2k5LmL5ZCO77yM566A6KaB57uZ5Ye65LqG5L2/55So6L+H56iL55qE5o6n5Yi25qCR6L+b6KGM5a+E5a2Y5Zmo5YiG6YWN55qE5pa55rOV44CCIOesrDE356ugIOS7o+eggeiwg+W6piDnrKwxN+eroOmbhuS4reiuqOiuuuWxgOmDqOWSjOWFqOWxgOaMh+S7pOiwg+W6pu+8jOi/meenjeiwg+W6pumAmui/h+mHjeaOkuaMh+S7pOeahOmhuuW6j+adpeWPkeaMpeeOsOS7o+WkhOeQhuWZqOS4rea1geawtOe6v+eahOacgOS9s+aAp+iDveOAguWxgOmDqOiwg+W6puacieS4pOenjemAlOW+hO+8jOS4gOenjeaYr+ihqOiwg+W6pu+8jOWug+WkhOeQhuS4gOS4quWfuuacrOWdl+WGheeahOaMh+S7pOW6j+WIl++8m+WPpuS4gOenjeaYr+WIhuaUr+iwg+W6pu+8jOWug+WkhOeQhuWfuuacrOWdl+S5i+mXtOeahOi/nuaOpeOAguaOpeedgOaIkeS7rOiAg+Wvn+i3qOWfuuacrOWdl+i+ueeVjOeahOiwg+W6puaWueazle+8jOWMheaLrOWJjeeeu+WPluWSjOaPkOWNh+OAgueEtuWQjuiuqOiuuuS4pOenjei9r+a1geawtOaWueazle+8jOensOS4uueql+WPo+iwg+W6puWSjOWxleW8gC3ljovlrp7jgILmjqXkuIvmnaXorqjorrrlvqrnjq/lsZXlvIDjgIHlj5jph4/mianlsZXjgIHlr4TlrZjlmajph43lkb3lkI3lkozlsYLmrKHlvZLnuqbmioDmnK/vvIzliY3kuInnp43mioDmnK/lop7liqDkuobosIPluqbnmoToh6rnlLHluqbvvIzlsYLmrKHlvZLnuqbmioDmnK/lpITnkIbltYzlnKjlvqrnjq/kuK3nmoTmjqfliLbnu5PmnoTjgILmnIDlkI7ku6XouKrov7nosIPluqblkozmuJfpgI/osIPluqbkuKTnp43lhajlsYDosIPluqbmlrnms5XmnaXnu5PmnZ/mnKznq6DjgIIg56ysMTjnq6Ag5o6n5Yi25rWB5ZKM5L2O57qn5LyY5YyWIOesrDE456ug56CU56m25o6n5Yi25rWB5LyY5YyW5ZKM6YCa5bi45pa95Yqg5LqO5L2O57qn5b2i5byP55qE5Lit6Ze05Luj56CB5LiK5oiW57G75rGH57yW6K+t6KiA6KGo56S65LiK55qE5LiA5Lqb5LyY5YyW44CC6L+Z5Lqb5LyY5YyW5YyF5ous5LiN5Y+v5Yiw6L6+5Luj56CB55qE5Yig6Zmk44CB5Ly455u05YyW44CBaWbljJbnroDjgIHlvqrnjq/ljJbnroDjgIHlvqrnjq/lgJLnva7jgIHml6DlvIDlhbPljJbjgIHliIbmlK/kvJjljJbjgIHlsL7ono3lkIjvvIjlj4jnp7DkuqTlj4novaznp7vvvInjgIHmnaHku7bkvKDpgIHmjIfku6TnmoTkvb/nlKjjgIHmrbvku6PnoIHliKDpmaTjgIHlhoXltYzmianlsZXjgIHliIbmlK/pooTmtYvjgIHmnLrlmajmlrnoqIDjgIHmjIfku6TlvZLlubbvvIzku6Xlj4rlr4TlrZjlmajlkIjlubbmiJblvZLlubbjgIIg56ysMTnnq6Ag6L+H56iL6Ze05YiG5p6Q5LiO5LyY5YyWIOesrDE556ug5YWz5rOo5bCG5YiG5p6Q5ZKM5LyY5YyW5oqA5pyv5o6o5bm/5Yiw5aSE55CG5pW05Liq56iL5bqP55qE5oqA5pyv44CC5a6D6K6o6K666L+H56iL6Ze055qE5o6n5Yi25rWB5YiG5p6Q44CB5pWw5o2u5rWB5YiG5p6Q44CB5Yir5ZCN5YiG5p6Q5Lul5Y+K5ZCE56eN5Y+Y5o2i77yM57uZ5Ye65Lik56eN5pa55rOV77yM5YiG5Yir55So5LqO5rWB5LiN5pWP5oSf5Ymv5L2c55So5YiG5p6Q5ZKM5Yir5ZCN5YiG5p6Q77yM5ZCM5pe257uZ5Ye65LiA56eN6K6h566X5rWB5pWP5oSf5oCn5Ymv5L2c55So5ZKM6L+b6KGM6L+H56iL6Ze05bi45pWw5Lyg5pKt55qE566X5rOV44CC54S25ZCO6K6o6K666L+H56iL6Ze055qE5LyY5YyW77yM5bm25bCG6L+H56iL6Ze055qE5L+h5oGv5bqU55So5LqO6L+H56iL5YaF55qE5LyY5YyW77yM5LmL5ZCO5piv6L+H56iL6Ze05a+E5a2Y5Zmo5YiG6YWN5ZKM5YWo5bGA5byV55So55qE6IGa5ZCI44CC5pyA5ZCO6K6o6K665bCG6L+H56iL6Ze05YiG5p6Q5ZKM5LyY5YyW6ZuG5oiQ5Yiw57yW6K+R5Zmo5LyY5YyW5bqP5YiX5Lit5pe25bqU5pyJ55qE6aG65bqP44CCIOesrDIw56ugIOWtmOWCqOWxguasoeS8mOWMliDnrKwyMOeroOiuqOiuuuWPkeaMpeWkp+WkmuaVsOezu+e7n+mDveWFt+acieeahOWxguasoeWtmOWCqOWZqO+8jOeJueWIq+aYr+Wkmue6p+mrmOmAn+e8k+WtmOaViOeOh+eahOS8mOWMluaKgOacr+OAguaIkeS7rOmmluWFiOiuqOiuuuaVsOaNruWSjOaMh+S7pOmrmOmAn+e8k+WtmOWvueeoi+W6j+aAp+iDveeahOW9seWTjeOAgueEtuWQjuiAg+iZkeaMh+S7pOmrmOmAn+e8k+WtmOeahOS8mOWMlu+8jOWMheaLrOaMh+S7pOmihOWPluOAgei/h+eoi+aOkuW6j+OAgei/h+eoi+WSjOWfuuacrOWdl+eahOaUvue9ruOAgei/h+eoi+WGheeahOS7o+eggeWuiee9ruOAgei/h+eoi+WIhuijgu+8jOS7peWPiui/h+eoi+WGheWSjOi/h+eoi+mXtOaWueazleeahOe7k+WQiOOAgiDmjqXkuIvmnaXmiJHku6zorqjorrrmlbDmja7pq5jpgJ/nvJPlrZjnmoTkvJjljJbvvIzkuLvopoHpm4bkuK3kuo7lvqrnjq/lj5jmjaLjgILmiJHku6zkuI3lhajpnaLlnLDnoJTnqbbov5nkuKrpl67popjvvIzogIzmmK/pgInmi6npg6jliIbpl67popjov5vooYzor6bnu4borqjorrrvvIzkvovlpoLmlbDnu4TlhYPntKDnmoTmoIfph4/mm7/mjaLlkozmlbDmja7pooTlj5bvvIzlubbkuJTlr7nkuo7lhbbku5bpl67popjlj6rmpoLopoHmgKflnLDnu5nlh7rlrprkuYnjgIHmnK/or63lkozmioDmnK/vvIzlroPku6zmtonlj4rliLDnmoTpl67popjvvIzku6Xlj4rnm7jlhbPmioDmnK/nmoToi6XlubLkvovlrZDjgILov5nkupvmioDmnK/ljIXmi6zmlbDmja7ph43nlKjjgIHlsYDpg6jljJbjgIHlvqrnjq/pk7rnoIzjgIHmoIfph4/kvJjljJbkuI7pnaLlkJHlrZjlgqjlmajnmoTkvJjljJbkuYvpl7TnmoTnm7jkupLkvZznlKjjgILmiJHku6zov5nmoLflhpnmmK/lm6DkuLrov5nkuIDmlrnpnaLnmoTmioDmnK/pnZ7luLjmlrDvvIzku6Xoh7Pkuo7pmr7ku6Xlh4bnoa7lnLDpgInmi6nmnYPlqIHmgKfnmoTkvJjljJbnrpfms5XjgIIg56ysMjHnq6Ag57yW6K+R5Zmo5a6e5L6L5YiG5p6Q5LiO5pyq5p2l55qE5Y+R5bGV6LaL5Yq/IOesrDIx56ug57uZ5Ye6NOS4quWVhuS4muWMlue8luivkeWZqOeahOWunuS+i++8jOWug+S7rOa2ieWPiuS6huebruagh+acuuS9k+ezu+e7k+aehOOAgee8luivkeiuvuiuoeaKgOacr+OAgeS4remXtOS7o+eggeihqOekuuWSjOS8mOWMluaKgOacr+eahOWQhOS4quaWuemdouOAgui/mTTnp43kvZPns7vnu5PmnoTmmK/vvJpTdW4g5b6u57O757uf55qEU1BBUkPjgIFJQk3nmoRQT1dFUu+8iOWSjFBvd2VyUEPvvInjgIFEaWdpdGFsIEVxdWlwbWVudOeahEFscGhh5Lul5Y+KSW50ZWwgMzg257O75YiX44CC5a+55LqO5YW25Lit55qE5q+P5LiA56eN77yM5oiR5Lus6aaW5YWI566A6KaB6K6o6K665a6D55qE5L2T57O757uT5p6E77yM54S25ZCO5LuL57uN56Gs5Lu25Y6C5a625Li65a6D5o+Q5L6b55qE57yW6K+R5Zmo44CCIOmZhOW9lUEg5pys5Lmm5L2/55So55qE5rGH57yW6K+t6KiA5oyH5Y2XIOmZhOW9lUHlr7nmnKzkuabkvb/nlKjnmoTmr4/kuIDnp43msYfnvJbor63oqIDnu5nlh7rkuIDkuKrnroDnn63nmoTmj4/ov7DvvIzkvb/or7vogIXog73mm7TlrrnmmJPlnLDnkIbop6PkuabkuK3nmoTkvovlrZDjgILlroPljIXlkKvkuoblhbPkuo5TUEFSQ+OAgVBPV0VS77yI5ZKMUG93ZXJQQ++8ieOAgUFscGhh44CBSW50ZWwgMzg25L2T57O757uT5p6E57O75YiX5Lul5Y+KUEEtUklTQ+etieaxh+e8luivreiogOeahOiuqOiuuuOAgiDpmYTlvZVCIOmbhuWQiOOAgeW6j+WIl+OAgeagkeOAgURBR+WSjOWHveaVsOeahOihqOekuiDpmYTlvZVC5a+55Lmm5Lit5aSn5aSa5pWw5oq96LGh5pWw5o2u57uT5p6E55qE5YW35L2T6KGo56S65L2c5LiA55Wq5b+r6YCf55qE5Zue6aG+77yM5a6D5LiN6IO95Luj5pu/5pWw5o2u57uT5p6E6K++56iL77yM5L2G5Y+v5Lul5L2c5Li65LiA5Lqb6Zeu6aKY5ZKM5pa55rOV55qE5aSH55So5Y+C6ICD44CCIOmZhOW9lUMg6L2v5Lu26LWE5rqQIOmZhOW9lUPnu5nlh7rlj6/pgJrov4fljL/lkI1GVFDmiJbkuIfnu7TnvZHorr/pl67nmoTkuIDkupvova/ku7bvvIzov5nkupvova/ku7blj6/kvZzkuLrmlZnlrabkuK3nmoTnvJbor5Hlmajlrp7njrDor77popjnmoTln7rnoYDvvIzlnKjmn5Dkupvmg4XlhrXkuIvvvIzov5nkupvova/ku7bnlJroh7Plj6/kvZzkuLrlhazlj7jnoJTliLbnvJbor5HlmajnmoTln7rnoYDjgIIg5Y+C6ICD5paH54yuIOacgOWQjueahOWPguiAg+aWh+eMruWIl+WHuuS6humSiOWvueacrOS5puaJgOa2ieWPiumXrumimOeahOWkp+mHj+i/m+S4gOatpemYheivu+adkOaWmeOAgiDntKLlvJUg5Lmm5pyr6ZmE5pyJ5LiA5Liq57Si5byV77yM5YW25Lit5YiX5Ye65LqG5pys5Lmm5raJ5Y+K55qE5ZCE56eN6K+t5rOV56ym5Y+35ZKM5ZCE5Liq5Li76aKY44CCIOihpemBl+OAgei1hOa6kOWSjOe9kee7nOaJqeWFheeahOWGheWuuSDmr4/kuIDnq6DnmoTnu5PlsL7pg73nu5nlh7rkuoboi6XlubLkuaDpopjjgILpq5jnuqfkuaDpopjlnKjlt6bpobXovrnmoIfms6jkuoZBRFbvvIznoJTnqbbmgKfnmoTkuaDpopjmoIfms6jkuoZSU0NI44CC6YOo5YiG5Lmg6aKY6Kej562U55qE55S15a2Q54mI5Y+v5Lul5LuO5Y6f5Ye654mI56S+6I635b6X44CC5LiO5pys5Lmm55u45YWz55qE6LWE5paZ5Y+v5Lul5Zyo5YWz5LqO5pys5Lmm55qE5aaC5LiL572R5Z2A5om+5Yiw77yaaHR0cDovLyBib29rcy5lbHNldmllci4gY29tL3VzLy9tay91cyAvc3ViaW5kZXguYXNwPyBtYWludGFyZ2V0ID1jb21wYW5pb25zLyBkZWZhdWx0aW5kaXZpZHVhbC5hc3BdJmFtcDtbaXNibj0xNTU4NjAzMjA044CC5pWZ5biI5aaC6ZyA5pys5Lmm5Lmg6aKY55qE6Kej562U77yM6K+355u05o6l5LiO5Y6f5Ye654mI56S+6IGU57O744CCIOi1hOa6kCDlpoLkuIrmiYDov7DvvIzpmYTlvZVD57uZ5Ye65LqG5Y+v55So5LqO5p6E5bu657yW6K+R5Zmo6aG555uu55qE6Ieq55Sx6L2v5Lu25Y+K6I635Y+W55qE6YCU5b6E44CC5LuO5LiK6L+w572R5Z2A5Lit5Lmf5Y+v6I635b6X5pW05Liq6ZmE5b2V77yM6L+e5ZCM5a6D57uZ5Ye655qE6YKj5Lqb6LWE5rqQ55qE5Zyw5Z2A6ZO+5o6l44CCIOe9kee7nOaJqeWFheeahOWGheWuuSDlj6/ku6Xku47lh7rniYjnpL7nmoTkuIrov7DnvZHlnYDlvpfliLDlhbPkuo7nm67moIfku6PnoIHovazmjaLnmoTooaXlhYXmnZDmlpnvvIzov5nmmK/kuIDnp43ku47kuIDnp43kvZPns7vnu5PmnoTnmoTnm67moIfku6PnoIHvvIjogIzkuI3mmK/ku47mupDnqIvluo/vvInlvpfliLDlj6bkuIDnp43kvZPns7vnu5PmnoTnmoTnm67moIfku6PnoIHnmoTovazmjaLjgILor6XnvZHlnYDkuIrnmoTmianlhYXlhoXlrrnorqjorrrkuobnm67moIfku6PnoIHnvJbor5Hov4fnqIvnmoTljp/nkIbvvIznhLblkI7pm4bkuK3orqjorrrkuoYz5Liq5L6L5a2Q77yM5Y2zSGV3bGV0dC1QYWNrYXJk55qESFAzMDAw5YiwUEEtUklTQ+eahOWPmOaNouWZqE9DVOOAgeaVsOWtl+iuvuWkh+WFrOWPuO+8iERFQ++8ieeahFZBWCBWTVPliLBBbHBoYeeahOWPmOaNouWZqFZFU1TlkoxNSVBT5YiwQWxwaGHnmoTlj5jmjaLlmahteOOAgiDoh7TosKIg6aaW5YWI77yM5Lmf5piv5pyA6YeN6KaB55qE77yM5oiR6KaB5oSf6LCi5oiR5Lul5YmN5ZyoU3VuIOW+ruezu+e7n+WFrOWPuOeahOWQjOS6i+S7rO+8jOWFtuS4reS4u+imgeaciVBldGVyIERldXRzY2jjgIFEYXZlIERpdHplbOOAgUpvbiBLYW5uZWdhYXJk44CBV2F5bmUgUm9zaW5n44CBRXJpYyBTY2htaWR044CBQm9iIFNwcm91bGzjgIFCZXJ0IFN1dGhlcmxhbmTjgIFJdmFuIFN1dGhlcmxhbmTku6Xlj4rnqIvluo/orr7orqHor63oqIDpg6jnmoTmiJDlkZjku6zvvIzlsKTlhbbmmK9TaGFyb2toIE1vcnRhemF2aeOAgVBldGVyIERhbXJvbuWSjFZpbm9kIEdyb3ZlcuOAguayoeacieS7luS7rOeahOaUr+aMgeWSjOm8k+WKse+8jOWwseS4jeWPr+iDveaciei/meacrOS5puOAguaIkei/mOimgeeJueWIq+aEn+iwoldheW5lIFJvc2luZ+WcqOacrOS5puWGmeS9nOeahOWktOS4gOW5tOWNiuaXtumXtOS4ree7meS6iOeahOi1hOWKqeOAgiDlhbbmrKHvvIzmiJHopoHmhJ/osKLmnKzkuabnmoTor4TpmIXkurpKLiBSYW5keSBBbGxlbuOAgUJpbGwgQXBwZWxiZeOAgVByZXN0b24gQnJpZ2dz44CBRmFiaWFuIEUuIEJ1c3RhbWFudGXjgIFTaWRkaGFydGhhIENoYXR0ZXJqZWXjgIFCb2IgQ29sd2VsbOOAgVN1YmhlbmR1IFJhamEgRGFz44CBQW1lciBEaXdhbuOAgUtyaXNobmEgS3VuY2hpdGhhcGFkYW3jgIFKaW0gTGFydXPjgIFJb24gTWFuZG9pdeOAgUFsbGFuIFBvcnRlcmZpZWxk44CBQXJjaCBSb2Jpc29u44CBRnJhbmNpc2NvIEouIFRvcnJlcy1Sb2phc+WSjE1pY2hhZWwgV29sZmXvvIzku5bku6zpg73lr7nmnKzkuabnmoTojYnnqL/mj5Dlh7rkuobmnInku7flgLznmoTmhI/op4HjgIIg5a+55YW25LuW5YWs5Y+45ZKM57uE57uH5Lit5LiO5oiR5YWx5Lqr5LqG5LuW5Lus55qE57yW6K+R5Zmo5ZKM5YW25LuW5oqA5pyv5L+h5oGv55qE5ZCM6KGM5Lus77yM5oiR5Lmf5b+D5oCA5oSf5r+A77yM5peg6K666L+Z5Lqb5L+h5oGv5piv5ZCm55u05o6l6KKr5pys5Lmm6YeH55So44CC5LuW5Lus5piv77yaQ3lnbnVzIFN1cHBvcnTnmoRNaWNoYWVsIFRpZW1hbm7jgIFKYW1lcyBXaWxzb27lkoxUb3Jiauats24gR3Jhbmx1bmTvvIxEaWdpdGFsIEVxdWlwbWVudOeahFJpY2hhcmQgR3JvdmXjgIFOZWlsIEZhaW1hbuOAgU1hdXJpY2UgTWFya3PlkoxBbnRvbiBDaGVybm9mZu+8jEdyZWVuIEhpbGxzIFNvZnR3YXJl55qEQ3JhaWcgRnJhbmtsaW7vvIxIZXdsZXR0LVBhY2thcmTnmoRLZWl0aCBLZWlsbWFu44CBTWljaGFlbCBNYWhvbuOAgUphbWVzIE1pbGxlcuWSjENhcm9sIFRob21wc29u77yMSW50ZWznmoRSb2JlcnQgQ29sd2VsbOOAgVN1cmVzaCBSYW/jgIFXaWxsaWFtIFNhdmFnZeWSjEtldmluIEouIFNtaXRo77yMSUJN55qEQmlsbCBIYXnjgIFLZXZpbiBP6KqDcmllbuWSjEYuIEtlbm5ldGggWmFkZWNr77yMTUlQUyBUZWNobm9sb2dpZXPnmoRGcmVkIENob3fjgIFKb2huIE1hc2hleeWSjEFsZXggV3XvvIxPcGVuIFNvZnR3YXJlIEZvdW5kYXRpb27nmoRBbmRyZXcgSm9obnNvbu+8jFJpY2XlpKflrabnmoRLZWl0aCBDb29wZXLlkozku5bnmoTlkIzkuovku6zvvIzmlq/lnabnpo/lpKflrabnmoRKb2huIEhlbm5lc3N544CBTW9uaWNhIExhbeWSjOS7luS7rOeahOWQjOS6i+S7rO+8jOS7peWPiuiLseWbveWbvemYsueglOeptue9sueahE5pYyBQZWVsaW5n44CCIOaIkeeJueWIq+aEn+a/gOaIkeeahOeItuavjVNhbXVlbOWSjERvcm90aHkgTXVjaG5pY2vvvIzku5bku6zkuLrmiJHliJvpgKDkuobkuIDkuKrlhYXmu6HluIzmnJvnmoTlrrbluq3msJvlm7TvvIzpvJPlirHnnYDmiJHmj5Dpl67lkozlsJ3or5Xlm57nrZToibDpmr7nmoTpl67popjvvIzkvb/miJHmm7TliqDmrKPotY/kuJbpl7TkuIfniannmoTnvo7kuL3vvIzml6DorrrlroPku6zmmK/nroDljZXnmoTov5jmmK/lpI3mnYLnmoTvvIzmmK/oh6rnhLbnmoTov5jmmK/kurrpgKDnmoTjgIIgTW9yZ2FuIEthdWZtYW5u5Ye654mI56S+55qE5bel5L2c5Lq65ZGY5Lul5LuW5Lus54af57uD55qE5oqA5ben5ZKM5rKJ552A55qE5L2c6aOO5oyH5a+85LqG6L+Z5pys5Lmm55qE5Ye654mI44CC5LuW5Lus5piv77yaQnJ1Y2UgU3BhdHrjgIFEb3VnIFNlcnnjgIFKZW5uaWZlciBNYW5u44CBRGVuaXNlIFBlbnJvc2XjgIFZb25pZSBPdmVydG9u44CBQ2hlcmkgUGFsbWVy44CBSmFuZSBFbGxpb3R05ZKMTGlzYSBTY2huZWlkZXLjgILmiJHmhJ/osKLku5bku6zlubbmnJ/lvoXnnYDkuI7ku5bku6zlho3luqblkIjkvZzjgIIgV2luZGZhbGwgU29mdHdhcmXnmoTmjpLlrZflkZhQYXVsIEFuYWdub3N0b3BvdWxvc+iuvuiuoeS6hklDQU7kuK3nlKjnmoTnibnmrornrKblj7fvvIznu4blv4PogIzmnInkuLvop4HlnLDlrozmiJDkuobmnKzkuabnmoTmjpLniYjjgILkuIDlpKnkuIrljYjku5blj5Hnu5nmiJHkuIDlsIHnlLXlrZDpgq7ku7bor7TvvIzku5bmnJ/lvoXnnYDpmIXor7vmiJHku6zlhbHlkIzlirPliqjnmoTmiJDmnpzvvIzlr7nmiJHogIzoqIDvvIzov5nkuIDlpKnlsLHlhbfmnInkuobljYHliIbph43opoHnmoTmhI/kuYnjgIIg5pyA5ZCO77yM5oiR6KaB5oSf6LCiRXJpYyBNaWxsaXJlbu+8jOS7luWcqOi/h+WOu+eahDXlubTkuK3orqnmiJHoirHotLnkuobov5nkuYjlpJrnmoTml7bpl7TmnaXlhpnov5nmnKzkuabvvIzkuLrmiJHmj5Dkvpvkuobmu4vmtqbnmoTlrrbluq3nlJ/mtLvvvIzlubbmjqjov5/kuobku5boh6rlt7HnmoTlh6DkuKrpobnnm67nm7TliLDov5nmnKzkuabljbPlsIblrozmiJDjgIIgXTwvdGQ+PC90cj48L3RhYmxlPjxkaXYgc3R5bGU9Im1hcmdpbi10b3A6IDEwLjBweDsiPjxpbWcgc3JjPSJodHRwczovL2ltZy5hbGljZG4uY29tL2ltZ2V4dHJhL2kyLzIxNzA0Mjk3Ni9UMjJZa09YdXBhWFhYWFhYWFgtMjE3MDQyOTc2LmdpZiIgd2lkdGg9Ijc1MCIgaGVpZ2h0PSI0NyI+PC9kaXY+PGJyPjxwPiZhbXA7bmJzcDs8L3A+PGRpdiBjbGFzcz0iaGxnX3JhbmRfMTA1NTU3Mzg4MyIgc3R5bGU9Im9wYWNpdHk6IDA7Ij4xMjYwNzc2MjU1PC9kaXY+PC9wPg==
Продавец:奥维博世图书专营店
Адрес:Пекин
Рейтинг:

Всего отзывов:0
Положительных:0
Добавить в корзину
- Информация о товаре
- Фотографии

![]() |
![]() |
![[特色图书图片.jpg]](https://img.alicdn.com/imgextra/i2/217042976/O1CN012FIdlL1Xr3BWu769O_!!217042976.jpg)
![]() |





![]() |
1260776255


![]() |
![]() |
| [ 书名: ] | [ 【正版】高级编译器设计与实现[图书]|25914 ] |
| [ 图书定价: ] | [ 75元 ] |
| [ 图书作者: ] | [ (美)Steven S.Muchnick ] |
| [ 出版社: ] | [ 机械工业出版社 ] |
| [ 出版日期: ] | 2005/7/1 0:00:00 |
| [ ISBN号: ] | 7111164296 |
| [ 开本: ] | [ 16开 ] |
| [ 页数: ] | 624 |
| [ 版次: ] | 1-1 |
| [ 作者简介 ] |
| [ Steven S.Muchnick具有丰富而广博的经验。他曾经是计算机科学教授,后来他将自己的知识和经验应用于编译器设计,成为两种计算机体系结构(惠普的PA-RISC和Sun的SPARC)开发团队的核心成员,并担任这些系统的高级编译器设计与实现的领导人。他的研究和开发经验对于指导读者做出编译器设计决策极具价值。 ] |
| [ 内容简介 ] |
| [ 本书涵盖了现代微处理器编译器的设计和实现方面的所有高级主题。] [ 本书首先介绍编译器的结构、符号表管理、中间代码结构、运行时支持等问题,探讨过程内的控制流分析、数据流分析、依赖关系分析和别名分析的各种方法,并介绍一系列的全局优化。接下来,讲述过程间的控制流分析、数据流分析和别名分析,以及程间优化和如何应用过程间信息来改善全局优化。然后,讨论有效利用层次存储系统的优化技术。最后,详细介绍4种商业化编译系统,以提供编译器结构、中间代码设计、优化策略和效果的专门例子。] [ 本书适合作为高等院校计算机专业研究生和高年级本科生的教材,也适合需要了解高级编译器设计和构造有关问题的计算机专业人员参考。] [ 本书特点] [ ●为理解高级编译器设计的主要问题奠定了基础] [ ●深入阐述优化问题] [ ●用Sun的SPARC、IBM的POWER和PowerPC、DEC的Alpha以及Intel的Pentium和相关商业编译器作为案例,说明编译器结构、中间代码设计和各种优化方法] [ ●给出大量定义清晰的关于代码生成、优化和其他问题的算法] [ ●介绍由作者设计的以清晰、简洁的方式描述算法的语言ICAN (非形式编译算法表示)。 ] |
| [ 目录 ] |
| [ 出版者的话] [ 专家指导委员会] [ 译者序] [ 序] [ 前言] [ 第1章 高级主题介绍 1] [ 1.1 编译器结构回顾 1] [ 1.2 基本问题中的高级论题 2] [ 1.3 代码优化的重要性 4] [ 1.4 优化编译器的结构 5] [ 1.5 激进型优化编译器中各种优化的位置 7] [ 1.6 本书各章的阅读流程 10] [ 1.7 本书没有涉及的相关主题 10] [ 1.8 例子中所用的目标机 11] [ 1.9 数的表示与数据的大小 11] [ 1.10 小结 11] [ 1.11 进一步阅读 12] [ 1.12 练习 12] [ 第2章 非形式化编译算法表示 13] [ 2.1 扩展的巴科斯-诺尔范式语法表示 13] [ 2.2 ICAN简介 14] [ 2.3 ICAN概貌 16] [ 2.4 完整的程序 17] [ 2.5 类型定义 18] [ 2.6 声明 18] [ 2.7 数据类型和表达式 19] [ 2.7.1 一般简单类型 20] [ 2.7.2 枚举类型 20] [ 2.7.3 数组 21] [ 2.7.4 集合 21] [ 2.7.5 序列 22] [ 2.7.6 元组 23] [ 2.7.7 记录 23] [ 2.7.8 联合 24] [ 2.7.9 函数 24] [ 2.7.10 编译专用的类型 24] [ 2.7.11 值nil 25] [ 2.7.12 size运算符 25] [ 2.8 语句 25] [ 2.8.1 赋值语句 26] [ 2.8.2 过程调用语句 27] [ 2.8.3 返回语句 27] [ 2.8.4 goto语句 27] [ 2.8.5 if语句 27] [ 2.8.6 case语句 27] [ 2.8.7 while语句 28] [ 2.8.8 for语句 28] [ 2.8.9 repeat语句 28] [ 2.8.10 ICAN的关键字 28] [ 2.9 小结 29] [ 2.10 进一步阅读 29] [ 2.11 练习 29] [ 第3章 符号表结构 31] [ 3.1 存储类、可见性和生命期 31] [ 3.2 符号属性和符号表项 32] [ 3.3 局部符号表管理 34] [ 3.4 全局符号表结构 35] [ 3.5 存储绑定和符号寄存器 38] [ 3.6 生成取数和存数指令的方法 42] [ 3.7 小结 46] [ 3.8 进一步阅读 46] [ 3.9 练习 47] [ 第4章 中间表示 49] [ 4.1 与中间语言设计有关的问题 49] [ 4.2 高级中间语言 50] [ 4.3 中级中间语言 51] [ 4.4 低级中间语言 52] [ 4.5 多级中间语言 52] [ 4.6 我们的中间语言:MIR、HIR和LIR 53] [ 4.6.1 中级中间表示(MIR) 53] [ 4.6.2 高级中间表示(HIR) 56] [ 4.6.3 低级中间表示(LIR) 57] [ 4.7 用ICAN表示MIR、HIR和LIR 58] [ 4.7.1 用ICAN表示MIR 59] [ 4.7.2 用ICAN表示HIR 62] [ 4.7.3 用ICAN表示LIR 64] [ 4.8 管理中间代码的若干数据结构和例程的ICAN命名 67] [ 4.9 其他中间语言形式 70] [ 4.9.1 三元式 70] [ 4.9.2 树 71] [ 4.9.3 无环有向图(DAG) 72] [ 4.9.4 前缀波兰表示 73] [ 4.10 小结 74] [ 4.11 进一步阅读 74] [ 4.12 练习 74] [ 第5章 运行时支持 77] [ 5.1 数据表示和指令 77] [ 5.2 寄存器用法 80] [ 5.3 局部栈帧 81] [ 5.4 运行时栈 83] [ 5.5 参数传递规则 84] [ 5.6 过程的入口处理、出口处理、调用和返回 86] [ 5.6.1 用寄存器传递参数:平面寄存器文件 87] [ 5.6.2 用运行时栈传递参数 88] [ 5.6.3 用具有寄存器窗口的寄存器传递参数 89] [ 5.6.4 过程值变量 91] [ 5.7 代码共享与位置无关代码 91] [ 5.8 符号和多态语言支持 94] [ 5.9 小结 96] [ 5.10 进一步阅读 96] [ 5.11 练习 97] [ 第6章 自动产生代码生成器 99] [ 6.1 简介代码生成器的自动生成 100] [ 6.2 语法制导技术 100] [ 6.2.1 代码生成器 102] [ 6.2.2 代码生成器的产生器 103] [ 6.2.3 删除链循环 110] [ 6.2.4 删除句法阻滞 112] [ 6.2.5 最后的考虑 115] [ 6.3 语义制导的分析介绍 115] [ 6.4 树模式匹配和动态规划 116] [ 6.5 小结 120] [ 6.6 进一步阅读 120] [ 6.7 练习 121] [ 第7章 控制流分析 123] [ 7.1 控制流分析的方法 125] [ 7.2 深度为主查找、前序遍历、后序遍历和宽度为主查找 128] [ 7.3 必经结点和后必经结点 132] [ 7.4 循环和强连通分量 139] [ 7.5 可归约性 143] [ 7.6 区间分析和控制树 144] [ 7.7 结构分析 147] [ 7.8 小结 156] [ 7.9 进一步阅读 157] [ 7.10 练习 157] [ 第8章 数据流分析 159] [ 8.1 一个例子:到达-定值 159] [ 8.2 基本概念:格、流函数和不动点 163] [ 8.3 数据流问题及其解决方法的分类 166] [ 8.4 迭代数据流分析 168] [ 8.5 流函数的格 171] [ 8.6 基于控制树的数据流分析 172] [ 8.7 结构分析 172] [ 8.7.1 结构分析:向前问题 172] [ 8.7.2 结构分析:向后问题 178] [ 8.7.3 结构分析方程的表示 180] [ 8.8 区间分析 181] [ 8.9 其他方法 182] [ 8.10 du链、ud链和网 183] [ 8.11 静态单赋值形式 184] [ 8.12 数组、结构和指针的处理 188] [ 8.13 数据流分析器的自动构造 188] [ 8.14 更贪婪的分析 189] [ 8.15 小结 191] [ 8.16 进一步阅读 192] [ 8.17 练习 192] [ 第9章 依赖关系分析和依赖图 195] [ 9.1 依赖关系 195] [ 9.2 基本块依赖DAG 196] [ 9.3 循环中的依赖关系 200] [ 9.4 依赖关系测试 204] [ 9.5 程序依赖图 207] [ 9.6 动态分配的对象之间的依赖关系 209] [ 9.7 小结 210] [ 9.8 进一步阅读 211] [ 9.9 练习 211] [ 第10章 别名分析 213] [ 10.1 各种现实程序设计语言中的别名 215] [ 10.1.1 Fortran 77中的别名 216] [ 10.1.2 Pascal中的别名 216] [ 10.1.3 C中的别名 217] [ 10.1.4 Fortran 90中的别名 218] [ 10.2 别名收集器 218] [ 10.3 别名传播器 222] [ 10.4 小结 227] [ 10.5 进一步阅读 227] [ 10.6 练习 228] [ 第11章 优化简介 229] [ 11.1 第12~18章讨论的全局优化 230] [ 11.2 流敏感性和可能与一定信息 231] [ 11.3 各种优化的重要性 231] [ 11.4 优化的顺序与重复 232] [ 11.5 进一步阅读 235] [ 11.6 练习 235] [ 第12章 前期优化 237] [ 12.1 常数表达式计算(常数折叠) 237] [ 12.2 聚合量标量替代 238] [ 12.3 代数化简和重结合 240] [ 12.3.1 地址表达式的代数化简和重结合 241] [ 12.3.2 对浮点表达式应用代数化简 246] [ 12.4 值编号 247] [ 12.4.1 作用于基本块的值编号 247] [ 12.4.2 全局值编号 251] [ 12.5 复写传播 256] [ 12.6 稀有条件常数传播 261] [ 12.7 小结 267] [ 12.8 进一步阅读 269] [ 12.9 练习 269] [ 第13章 冗余删除 271] [ 13.1 公共子表达式删除 271] [ 13.1.1 局部公共子表达式删除 272] [ 13.1.2 全局公共子表达式删除 276] [ 13.1.3 向前替代 284] [ 13.2 循环不变代码外提 284] [ 13.3 部分冗余删除 292] [ 13.4 冗余删除和重结合 298] [ 13.5 代码提升 299] [ 13.6 小结 302] [ 13.7 进一步阅读 302] [ 13.8 练习 304] [ 第14章 循环优化 305] [ 14.1 归纳变量优化 305] [ 14.1.1 识别归纳变量 306] [ 14.1.2 强度削弱 312] [ 14.1.3 活跃变量分析 319] [ 14.1.4 归纳变量删除和线性函数测试替换 320] [ 14.2 不必要边界检查的消除 325] [ 14.3 小结 327] [ 14.4 进一步阅读 329] [ 14.5 练习 329] [ 第15章 过程优化 331] [ 15.1 尾调用优化和尾递归删除 331] [ 15.2 过程集成 334] [ 15.3 内嵌扩展 337] [ 15.4 叶例程优化和收缩包装 338] [ 15.4.1 叶例程优化 338] [ 15.4.2 收缩包装 339] [ 15.5 小结 341] [ 15.6 进一步阅读 343] [ 15.7 练习 343] [ 第16章 寄存器分配 345] [ 16.1 寄存器分配和指派 345] [ 16.2 局部方法 346] [ 16.3 图着色 347] [ 16.3.1 图着色寄存器分配概述 347] [ 16.3.2 顶层结构 349] [ 16.3.3 网,可分配对象 350] [ 16.3.4 冲突图 354] [ 16.3.5 冲突图的表示 355] [ 16.3.6 寄存器合并 358] [ 16.3.7 计算溢出代价 359] [ 16.3.8 修剪冲突图 361] [ 16.3.9 指派寄存器 363] [ 16.3.10 溢出符号寄存器 365] [ 16.3.11 图着色寄存器分配的两个例子 367] [ 16.3.12 其他问题 375] [ 16.4 基于优先级的图着色 376] [ 16.5 其他寄存器分配方法 377] [ 16.6 小结 377] [ 16.7 进一步阅读 378] [ 16.8 练习 380] [ 第17章 代码调度 381] [ 17.1 指令调度 381] [ 17.1.1 分支调度 382] [ 17.1.2 表调度 385] [ 17.1.3 自动生成指令调度器 390] [ 17.1.4 超标量实现有关的调度 390] [ 17.1.5 基本块调度中的其他问题 390] [ 17.1.6 跨基本块边界的调度 392] [ 17.2 前瞻取和上推 392] [ 17.3 前瞻调度 393] [ 17.4 软流水 393] [ 17.4.1 窗口调度 395] [ 17.4.2 展开-压实软流水 397] [ 17.4.3 循环展开 400] [ 17.4.4 变量扩张 403] [ 17.4.5 寄存器重命名 404] [ 17.4.6 软流水的其他方法 407] [ 17.4.7 层次归约 407] [ 17.5 踪迹调度 408] [ 17.6 渗透调度 409] [ 17.7 小结 411] [ 17.8 进一步阅读 413] [ 17.9 练习 413] [ 第18章 控制流和低级优化 415] [ 18.1 不可到达代码的删除 415] [ 18.2 伸直化 417] [ 18.3 if化简 419] [ 18.4 循环化简 420] [ 18.5 循环倒置 421] [ 18.6 无开关化 422] [ 18.7 分支优化 422] [ 18.8 尾融合或交叉转移 423] [ 18.9 条件传送 424] [ 18.10 死代码删除 425] [ 18.11 分支预测 429] [ 18.12 机器方言和指令归并 430] [ 18.13 小结 433] [ 18.14 进一步阅读 433] [ 18.15 练习 435] [ 第19章 过程间分析与优化 437] [ 19.1 过程间控制流分析:调用图 438] [ 19.2 过程间数据流分析 445] [ 19.2.1 流不敏感副作用分析 445] [ 19.2.2 流敏感副作用:程序概要图 455] [ 19.2.3 副作用计算中的其他问题 458] [ 19.3 过程间常数传播 458] [ 19.4 过程间别名分析 461] [ 19.4.1 流不敏感别名分析 462] [ 19.4.2 传值和传指针语言的过程间别名分析 471] [ 19.5 过程间优化 473] [ 19.6 过程间寄存器分配 475] [ 19.6.1 连接时的寄存器分配 475] [ 19.6.2 编译时的过程间寄存器分配 477] [ 19.7 全局引用的聚合 477] [ 19.8 过程间程序管理中的其他主题 478] [ 19.9 小结 478] [ 19.10 进一步阅读 480] [ 19.11 练习 480] [ 第20章 存储层次优化 483] [ 20.1 数据和指令高速缓存的影响 484] [ 20.2 指令高速缓存优化 485] [ 20.2.1 利用硬件辅助:指令预取 485] [ 20.2.2 过程排序 485] [ 20.2.3 过程和基本块的放置 489] [ 20.2.4 过程内的代码安置 489] [ 20.2.5 过程分裂 492] [ 20.2.6 过程内和过程间方法的结合 492] [ 20.3 数组元素的标量替换 493] [ 20.4 数据高速缓存优化 496] [ 20.4.1 过程间的数据安排 497] [ 20.4.2 循环转换 498] [ 20.4.3 局部性与循环铺砌 502] [ 20.4.4 利用硬件辅助:数据预取 504] [ 20.5 标量优化与面向存储器的优化 505] [ 20.6 小结 506] [ 20.7 进一步阅读 508] [ 20.8 练习 508] [ 第21章 编译器实例分析与未来的发展趋势 509] [ 21.1 Sun用于SPARC的编译器 510] [ 21.1.1 SPARC体系结构 510] [ 21.1.2 Sun SPARC编译器 511] [ 21.2 IBM POWER和PowerPC体系结构的XL编译器 517] [ 21.2.1 POWER和PowerPC体系结构 517] [ 21.2.2 XL编译器 518] [ 21.3 DEC用于Alpha的编译器 524] [ 21.3.1 Alpha体系结构 524] [ 21.3.2 Alpha的GEM编译器 525] [ 21.4 Intel 386体系结构上的Intel参考编译器 530] [ 21.4.1 Intel 386体系结构 530] [ 21.4.2 Intel编译器 531] [ 21.5 小结 538] [ 21.6 编译器设计和实现未来的趋势 539] [ 21.7 进一步阅读 539] [ 附录A 本书使用的汇编语言指南 541] [ 附录B 集合、序列、树、DAG和函数的表示 549] [ 附录C 软件资源 557] [ 参考文献 561] [ 索引 579 ] |
![]() |
| [ 本书讨论单机编译器设计和实现技术领域的前沿问题,重点讨论编译优化技术(超过了本书60%的篇幅)。我们考虑了支持指令级并行的机器,但几乎完全忽略了大规模并行处理和向量处理的有关问题。 本书首先讨论编译器的结构、符号表管理(包括那些允许导入和导出作用域的语言)、中间代码结构、运行时支持问题(包括可以在运行时链接的共享对象),以及根据机器描述自动产生代码生成器等。之后,探讨过程内的(通常称为]"[全局的]"[)控制流分析、数据流分析、依赖关系分析和别名分析的各种方法,并介绍一系列的全局优化,包括那些作用于程序不同成分(从单个表达式到整个过程)的优化。接下来本书讲述过程间的控制流分析、数据流分析和别名分析,以及过程间优化和如何应用过程间信息来改善全局优化。然后,讨论有效利用层次存储系统的优化技术。最后,详细介绍4个分别来自DEC、IBM、Intel和Sun 微系统公司的商业化编译系统,以提供编译器结构、中间代码设计、优化策略和效果的专门例子。如我们将看到的,这些编译系统采用的技术具有广泛的代表性,并用不同的方法获得了类似的效果。 本书的写作过程 1990年6月到1991年,我在Sun微系统公司担任高级工程师。在ACM SIGPLAN的程序语言设计和实现技术年会上,我用半天时间作了一个名为]"[RISC系统高级编译技术]"[的讲座。在这个讲座上,我用大约130张幻灯片讲解了RISC体系结构和相关的编译技术,特别是优化技术。在那次讲座之后,我有了一个想法,即讲座材料可能是一颗渴望着阳光、土壤和水分,期待着长成参天大树的种子(实际上,在我的脑海中是一颗橡树种子),而这棵大树就是你面前的这本书。一年多后,我与Wayne Rosing讨论了这个想法,然后又向Sun微系统实验室主任作了汇报,几周后他就决定支持这本书的写作,并给予了一年半的时间和部分资助。 本书的第一稿中除了高级编译技术外,还包含了相当多的RISC体系结构的内容。不久我就认识到(在3位评阅者的帮助下),不必要写这么多体系结构的内容。新的RISC体系结构不断被开发出来,大多数大学的体系结构课程都介绍了研究编译技术所需要的相关知识,本书的重点应该是编译技术。 这导致了本书写作方向的一次重大改变。体系结构方面的大多数内容都被删除了,仅仅保留了体系结构中与编译过程决策有关的内容。编译器的材料也拓宽为包含了有关CISC的编译技术,同时决定只集中讨论单机编译技术,将并行化和向量化的内容留待其他书去讨论。有关编译技术的内容更加集中和深入,有些方面缩小了范围,有些方面又扩大了范围(例如,有关手工代码生成的内容几乎全部删除了,但添加了有关先进调度技术的内容,如踪迹调度和渗透调度)。这样就形成了你面前的这本书。 关于本书的封面 本书封面的图片是从作者的西北海岸民间艺术收藏中选取的,这是一张奇尔卡特毛毯的照片。这块毛毯是在19世纪晚期,由美国阿拉斯加东南部的一个特里吉特妇女,用红松内层树皮制成的非常细的绳子和山羊毛线编织的。编织这样一块毛毯通常需要6~9个月。这块毛毯的图案分为3个部分。中间的一块描绘了一条在水中潜游的鲸鱼;鲸鱼头位于底部,是一个割裂开了的图形;中间有着鲸鱼面部的那个图形是鲸鱼的身体(在这类绘画中,看起来像鲸鱼面部的图形并不表示鲸鱼的面部);鲸鱼的侧鳍在身体的两边;而顶部是鲸鱼的尾鳍。这个设计中的每一部分,就本身而言,都是功能上的,并没有表达什么含意;但它们按正确的方式组合起来,就描绘了一条在水中潜游的鲸鱼,显示了拥有这条毛毯的村长的权力和特权。 类似地,一个编译器的每个组件有着某种功能,但仅当这些组件以适当的方式组合在一起时,才能完整地实现编译器的功能。设计和编织这样一块毛毯需要技巧,同样,构造工业水准的编译器也需要技巧。每个行业都有一组特定的工具、材料、设计要素和总体模式,而所有这一切都必须按满足预期用户的需要和愿望的方式组合到一起。 本书的读者 本书预期的读者是需要了解设计和构造单机高级编译器有关问题的计算机专业人员、研究生和高年级本科生。我们假定读者已经选修了数据结构、算法、编译器设计和实现、计算机体系结构、汇编语言程序设计等课程,或已经具有相当的工作经验。 内容概览 全书分为21章,另有3个附录。 第1章 高级主题介绍 这一章介绍本书的主题,即高级编译器的设计和构造,同时讨论编译器的结构和编译优化的重要性,并介绍本书内容的组织结构。 第2章 非形式化编译算法表示 第2章介绍了一种称为ICAN的非形式化的程序设计表示方法,并给出了有关例子。这种表示方法用于表示本书中的编译算法。在介绍了这种语言的语法符号之后,我们给出了ICAN的概述,接着详细描述了该语言。读者读了ICAN的概述,就足以读懂本书中的大多数算法,只是在很少的情况下,才需要了解ICAN的全部细节。 第3章 符号表结构 第3章首先讨论变量的属性,例如存储类、可见性、易变性、作用域、大小、类型、对齐、结构、寻址方法等。然后给出了高效地构造和管理局部和全局符号表的方法,包括导入的和导出的作用域(在Ada、Mesa、Modula-2中存在这种情况)、存储绑定,以及在考虑上述属性的前提下产生取、存指令的方法。 第4章 中间表示 这一章集中介绍中间语言的设计、本书专用的三种中间语言,以及编译器中可能使用的中间代码的其他基本形式。我们使用了密切相关的高、中、低三种形式的中间语言,以便能够深入说明书中讨论的所有优化算法。我们还讨论了本书使用的中间语言和其他中间语言的相对重要性以及它们的用途。 另外两种更详细的中间代码形式,即静态单赋值(SSA)和程序依赖图分别在8.11节和9.5节中讨论。 第5章 运行时支持 第5章关注的问题主要与运行时支持用高级程序设计语言编写的程序有关,我们讨论了数据表示、寄存器使用、运行时栈和栈帧的设计、参数传递、过程结构和链接、过程值变量、代码共享、位置无关代码,以及为支持符号和多态语言涉及的一些问题。 第6章 自动产生代码生成器 第6章讨论根据机器描述自动产生代码生成器的方法。我们详细给出了Graham-Glanville的语法制导技术,并介绍了另外两种方法,即语义制导分析和树模式匹配。 第7章 控制流分析 这一章和随后的三章讨论作用于过程的4种分析方法,这些分析对于实现正确和有效的程序优化至关重要。 第7章重点讨论确定过程中的控制流和构造控制流图(CFG)的方法。我们首先综述了若干种可能使用的方法,然后详细讨论其中的三种。第一种是采用深度为主搜索和必经结点的传统方法。在讨论它的同时,我们也将讨论流图的遍历,如CFG的前序遍历和后序遍历,以及查找CFG的强连通子图。另外两种方法依赖于可归约性的概念,它使得过程的控制流图可以层次式地构成。这两种方法分别称为区间分析和结构分析,两者之间的不同在于它们辨别的结构单元的类型。我们也讨论了用所谓的控制树表示一个过程的层次结构方法。 第8章 数据流分析 第8章讨论确定过程中数据流的方法。它从一个例子开始,然后讨论数据流分析所依赖的基本数学概念,即格、流函数和不动点。接下来给出数据流问题和解法的分类,然后详细讨论与前一章3种控制流分析方法对应的3种数据流分析方法。第一种方法是迭代数据流分析,它对应于使用深度为主搜索和必经结点的控制流分析。另两种数据流分析方法与基于控制树的两种控制流分析对应,并分别具有与它们相同的名字:区间分析和结构分析。在此之后,我们概述一种少见的称为位置式分析的新技术,并描述表示数据流信息的方法,即du链、ud链、网(web)和静态单赋值形式(或SSA)。最后考虑有关数组、结构和指针的处理,并以关于数据流分析器自动构造方法的讨论结束本章。 第9章 依赖关系分析和依赖图 第9章关注依赖关系分析,以及与依赖分析密切相关,称为程序依赖图的中间代码形式,其中的依赖关系分析是对数组和低级存储引用进行数据流分析的一种简易方法。我们首先讨论依赖关系,然后讨论如何计算基本块中的依赖关系,这些内容对于第17章中要介绍的代码调度技术至关重要。接着讨论循环中的依赖关系以及依赖关系测试方法,它们是第20章讨论数据存储优化的基础。最后讨论程序依赖图,这是一种直接表示控制和数据依赖的中间代码形式,用它来进行一系列的程序优化比用隐含着依赖信息的中间代码来进行程序优化要更为有效。 第10章 别名分析 第10章讨论别名分析,这种分析确定一个存储单元是否有可能由多个访问路径访问,例如既可用名字也可通过指针来访问。我们首先讨论在Fortran 77、Pascal、C和Fortran 90等语言中别名对程序的影响。接着讨论一种非常通用的对过程内出现的别名进行判定的方法,这种方法由一个与语言相关的别名收集器和一个与语言无关的别名传播器组成。可以对别名收集器和传播器作裁剪来提供信息,这些信息可以是依赖于或不依赖于过程控制流的信息,也可以是用其他多种方式提供的信息,从而使得它成为一种能够适应特定程序设计语言编译器需要和时间限制的通用方法。 第11章 优化简介 第11章介绍代码优化的内容,它首先讨论了这样一个事实,即,尽管大多数优化的适用性和有效性是递归不可判定的,但仍然值得对于适用性和有效性是确定的程序施加这些优化,并且对第12~18章涉及的过程内优化技术作了一番快速浏览。然后讨论了流敏感性和可能与一定信息,如何将这些信息应用于优化,特定优化的相对重要性,以及它们应有的执行顺序。 第12章 前期优化 本章讨论在优化过程的较早阶段实行的一些优化技术,包括聚合量的标量替代、局部和全局值编号(施加于SSA形式的代码)、局部和全局复写传播、稀有条件常数传播(同样施加于SSA形式的代码)。本章还将讨论常数表达式求值(或常数折叠)和代数化简,以及如何在优化器中以子程序的形式实现它们,以便可随时根据需要而调用。 第13章 冗余删除 第13章关注几种类型的冗余删除。冗余删除的基本功能是删除过程中一条路径上多于一次执行的计算。本章描述了局部和全局公共子表达式删除、向前替换、循环不变代码外提、部分冗余删除和代码提升。 第14章 循环优化 第14章研究施加于循环的优化技术,包括归纳变量的识别、强度削弱、归纳变量删除、线性函数测试替换和不必要边界检查的删除。 第15章 过程优化 第15章给出施加于过程的优化技术,讨论了尾调用优化(包括尾递归删除)、过程集成、内嵌扩展、叶例程优化和收缩包装。 第16章 寄存器分配 第16章关注过程内的寄存器分配和指定。我们首先讨论局部的、基于代价的方法,然后讨论图着色法。我们讨论了作为寄存器分配对象的网、冲突图、冲突图的着色以及溢出代码的生成。在此之后,简要给出了使用过程的控制树进行寄存器分配的方法。 第17章 代码调度 第17章集中讨论局部和全局指令调度,这种调度通过重排指令的顺序来发挥现代处理器中流水线的最佳性能。局部调度有两种途径,一种是表调度,它处理一个基本块内的指令序列;另一种是分支调度,它处理基本块之间的连接。接着我们考察跨基本块边界的调度方法,包括前瞻取和提升。然后讨论两种软流水方法,称为窗口调度和展开-压实。接下来讨论循环展开、变量扩展、寄存器重命名和层次归约技术,前三种技术增加了调度的自由度,层次归约技术处理嵌在循环中的控制结构。最后以踪迹调度和渗透调度两种全局调度方法来结束本章。 第18章 控制流和低级优化 第18章研究控制流优化和通常施加于低级形式的中间代码上或类汇编语言表示上的一些优化。这些优化包括不可到达代码的删除、伸直化、if化简、循环化简、循环倒置、无开关化、分支优化、尾融合(又称交叉转移)、条件传送指令的使用、死代码删除、内嵌扩展、分支预测、机器方言、指令归并,以及寄存器合并或归并。 第19章 过程间分析与优化 第19章关注将分析和优化技术推广到处理整个程序的技术。它讨论过程间的控制流分析、数据流分析、别名分析以及各种变换,给出两种方法,分别用于流不敏感副作用分析和别名分析,同时给出一种计算流敏感性副作用和进行过程间常数传播的算法。然后讨论过程间的优化,并将过程间的信息应用于过程内的优化,之后是过程间寄存器分配和全局引用的聚合。最后讨论将过程间分析和优化集成到编译器优化序列中时应有的顺序。 第20章 存储层次优化 第20章讨论发挥大多数系统都具有的层次存储器,特别是多级高速缓存效率的优化技术。我们首先讨论数据和指令高速缓存对程序性能的影响。然后考虑指令高速缓存的优化,包括指令预取、过程排序、过程和基本块的放置、过程内的代码安置、过程分裂,以及过程内和过程间方法的结合。 接下来我们讨论数据高速缓存的优化,主要集中于循环变换。我们不全面地研究这个问题,而是选择部分问题进行详细讨论,例如数组元素的标量替换和数据预取,并且对于其他问题只概要性地给出定义、术语和技术,它们涉及到的问题,以及相关技术的若干例子。这些技术包括数据重用、局部化、循环铺砌、标量优化与面向存储器的优化之间的相互作用。我们这样写是因为这一方面的技术非常新,以至于难以准确地选择权威性的优化算法。 第21章 编译器实例分析与未来的发展趋势 第21章给出4个商业化编译器的实例,它们涉及了目标机体系结构、编译设计技术、中间代码表示和优化技术的各个方面。这4种体系结构是:Sun 微系统的SPARC、IBM的POWER(和PowerPC)、Digital Equipment的Alpha以及Intel 386系列。对于其中的每一种,我们首先简要讨论它的体系结构,然后介绍硬件厂家为它提供的编译器。 附录A 本书使用的汇编语言指南 附录A对本书使用的每一种汇编语言给出一个简短的描述,使读者能更容易地理解书中的例子。它包含了关于SPARC、POWER(和PowerPC)、Alpha、Intel 386体系结构系列以及PA-RISC等汇编语言的讨论。 附录B 集合、序列、树、DAG和函数的表示 附录B对书中大多数抽象数据结构的具体表示作一番快速的回顾,它不能代替数据结构课程,但可以作为一些问题和方法的备用参考。 附录C 软件资源 附录C给出可通过匿名FTP或万维网访问的一些软件,这些软件可作为教学中的编译器实现课题的基础,在某些情况下,这些软件甚至可作为公司研制编译器的基础。 参考文献 最后的参考文献列出了针对本书所涉及问题的大量进一步阅读材料。 索引 书末附有一个索引,其中列出了本书涉及的各种语法符号和各个主题。 补遗、资源和网络扩充的内容 每一章的结尾都给出了若干习题。高级习题在左页边标注了ADV,研究性的习题标注了RSCH。部分习题解答的电子版可以从原出版社获得。与本书相关的资料可以在关于本书的如下网址找到:http:// books.elsevier. com/us//mk/us /subindex.asp? maintarget =companions/ defaultindividual.asp]&[isbn=1558603204。教师如需本书习题的解答,请直接与原出版社联系。 资源 如上所述,附录C给出了可用于构建编译器项目的自由软件及获取的途径。从上述网址中也可获得整个附录,连同它给出的那些资源的地址链接。 网络扩充的内容 可以从出版社的上述网址得到关于目标代码转换的补充材料,这是一种从一种体系结构的目标代码(而不是从源程序)得到另一种体系结构的目标代码的转换。该网址上的扩充内容讨论了目标代码编译过程的原理,然后集中讨论了3个例子,即Hewlett-Packard的HP3000到PA-RISC的变换器OCT、数字设备公司(DEC)的VAX VMS到Alpha的变换器VEST和MIPS到Alpha的变换器mx。 致谢 首先,也是最重要的,我要感谢我以前在Sun 微系统公司的同事们,其中主要有Peter Deutsch、Dave Ditzel、Jon Kannegaard、Wayne Rosing、Eric Schmidt、Bob Sproull、Bert Sutherland、Ivan Sutherland以及程序设计语言部的成员们,尤其是Sharokh Mortazavi、Peter Damron和Vinod Grover。没有他们的支持和鼓励,就不可能有这本书。我还要特别感谢Wayne Rosing在本书写作的头一年半时间中给予的资助。 其次,我要感谢本书的评阅人J. Randy Allen、Bill Appelbe、Preston Briggs、Fabian E. Bustamante、Siddhartha Chatterjee、Bob Colwell、Subhendu Raja Das、Amer Diwan、Krishna Kunchithapadam、Jim Larus、Ion Mandoiu、Allan Porterfield、Arch Robison、Francisco J. Torres-Rojas和Michael Wolfe,他们都对本书的草稿提出了有价值的意见。 对其他公司和组织中与我共享了他们的编译器和其他技术信息的同行们,我也心怀感激,无论这些信息是否直接被本书采用。他们是:Cygnus Support的Michael Tiemann、James Wilson和Torbj歳n Granlund,Digital Equipment的Richard Grove、Neil Faiman、Maurice Marks和Anton Chernoff,Green Hills Software的Craig Franklin,Hewlett-Packard的Keith Keilman、Michael Mahon、James Miller和Carol Thompson,Intel的Robert Colwell、Suresh Rao、William Savage和Kevin J. Smith,IBM的Bill Hay、Kevin O誃rien和F. Kenneth Zadeck,MIPS Technologies的Fred Chow、John Mashey和Alex Wu,Open Software Foundation的Andrew Johnson,Rice大学的Keith Cooper和他的同事们,斯坦福大学的John Hennessy、Monica Lam和他们的同事们,以及英国国防研究署的Nic Peeling。 我特别感激我的父母Samuel和Dorothy Muchnick,他们为我创造了一个充满希望的家庭氛围,鼓励着我提问和尝试回答艰难的问题,使我更加欣赏世间万物的美丽,无论它们是简单的还是复杂的,是自然的还是人造的。 Morgan Kaufmann出版社的工作人员以他们熟练的技巧和沉着的作风指导了这本书的出版。他们是:Bruce Spatz、Doug Sery、Jennifer Mann、Denise Penrose、Yonie Overton、Cheri Palmer、Jane Elliott和Lisa Schneider。我感谢他们并期待着与他们再度合作。 Windfall Software的排字员Paul Anagnostopoulos设计了ICAN中用的特殊符号,细心而有主见地完成了本书的排版。一天上午他发给我一封电子邮件说,他期待着阅读我们共同劳动的成果,对我而言,这一天就具有了十分重要的意义。 最后,我要感谢Eric Milliren,他在过去的5年中让我花费了这么多的时间来写这本书,为我提供了滋润的家庭生活,并推迟了他自己的几个项目直到这本书即将完成。 ] |
1260776255








![[欢乐逛海报]](https://img.alicdn.com/imgextra/i1/217042976/O1CN01fMUR7O1Xr3HSbFazO-217042976.png)
![[欢乐逛海报]](https://img.alicdn.com/imgextra/i2/217042976/O1CN01yupsTD1Xr3Fyj7xFm-217042976.jpg)


