ZG5sCmRubCAkWEZyZWU4NjogeGMvbGliL2ZvbnRjb25maWcvY29uZmlndXJlLmluLHYgMS43IDIwMDIvMDgvMDEgMTU6NTc6MjUga2VpdGhwIEV4cCAkCmRubApkbmwgQ29weXJpZ2h0IKkgMjAwMiBLZWl0aCBQYWNrYXJkLCBtZW1iZXIgb2YgVGhlIFhGcmVlODYgUHJvamVjdCwgSW5jLgpkbmwKZG5sIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUsIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUgYW5kIGl0cwpkbmwgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQKZG5sIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdApkbmwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZwpkbmwgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgS2VpdGggUGFja2FyZCBub3QgYmUgdXNlZCBpbgpkbmwgYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0CmRubCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgS2VpdGggUGFja2FyZCBtYWtlcyBubwpkbmwgcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0CmRubCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgpkbmwKZG5sIEtFSVRIIFBBQ0tBUkQgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsCmRubCBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MsIElOIE5PCmRubCBFVkVOVCBTSEFMTCBLRUlUSCBQQUNLQVJEIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNUIE9SCmRubCBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwKZG5sIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIKZG5sIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IKZG5sIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCmRubAoKIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9jb25mIHRvIHByb2R1Y2UgYSBjb25maWd1cmUgc2NyaXB0LgoKQUNfSU5JVChmb250Y29uZmlnLCAxLjAuMSwgZm9udHNAeGZyZWU4Ni5vcmcpCkFDX0NPTkZJR19BVVhfRElSKGNvbmZpZykKQUNfQ09ORklHX0hFQURFUihjb25maWcuaCkKCkFDX0FSR19XSVRIKGZyZWV0eXBlX2luY2x1ZGVzLCBbICAtLXdpdGgtZnJlZXR5cGUtaW5jbHVkZXM9RElSICBVc2UgRnJlZVR5cGUgaW5jbHVkZXMgaW4gRElSXSwgZnJlZXR5cGVfaW5jbHVkZXM9JHdpdGh2YWwsIGZyZWV0eXBlX2luY2x1ZGVzPXllcykKQUNfQVJHX1dJVEgoZnJlZXR5cGVfbGliLCAgICAgIFsgIC0td2l0aC1mcmVldHlwZS1saWI9RElSICAgICAgIFVzZSBGcmVlVHlwZSBsaWJyYXJ5IGluIERJUl0sIGZyZWV0eXBlX2xpYj0kd2l0aHZhbCwgZnJlZXR5cGVfbGliPXllcykKQUNfQVJHX1dJVEgoZnJlZXR5cGVfY29uZmlnLCAgIFsgIC0td2l0aC1mcmVldHlwZS1jb25maWc9UFJPRyAgIFVzZSBGcmVlVHlwZSBjb25maWd1cmF0aW9uIHByb2dyYW0gUFJPR10sIGZyZWV0eXBlX2NvbmZpZz0kd2l0aHZhbCwgZnJlZXR5cGVfY29uZmlnPXllcykKQUNfQVJHX1dJVEgoZXhwYXQsICAgICAgICAgICAgIFsgIC0td2l0aC1leHBhdD1ESVIgICAgICAgICAgICAgIFVzZSBFeHBhdCBpbiBESVJdLCBleHBhdD0kd2l0aHZhbCwgZXhwYXQ9eWVzKQpBQ19BUkdfV0lUSChleHBhdF9pbmNsdWRlcywgICAgWyAgLS13aXRoLWV4cGF0LWluY2x1ZGVzPURJUiAgICAgVXNlIEV4cGF0IGluY2x1ZGVzIGluIERJUl0sIGV4cGF0X2luY2x1ZGVzPSR3aXRodmFsLCBleHBhdF9pbmNsdWRlcz15ZXMpCkFDX0FSR19XSVRIKGV4cGF0X2xpYiwgICAgICAgICBbICAtLXdpdGgtZXhwYXQtbGliPURJUiAgICAgICAgICBVc2UgRXhwYXQgbGlicmFyeSBpbiBESVJdLCBleHBhdF9saWI9JHdpdGh2YWwsIGV4cGF0X2xpYj15ZXMpCkFDX0FSR19XSVRIKGRlZmF1bHRfZm9udHMsICAgICBbICAtLXdpdGgtZGVmYXVsdC1mb250cz1ESVIgICAgICBVc2UgZm9udHMgZnJvbSBESVIgd2hlbiBjb25maWcgaXMgYnVzdGVkXSwgZGVmYXVsdGZvbnRzPSIkd2l0aHZhbCIsIGRlZmF1bHRfZm9udHM9eWVzKQpBQ19BUkdfV0lUSChjb25mZGlyLCAgICAgICAgICAgWyAgLS13aXRoLWNvbmZkaXI9RElSICAgICAgICAgICAgVXNlIERJUiB0byBzdG9yZSBjb25maWd1cmF0aW9uIGZpbGVzIChkZWZhdWx0IC9ldGMvZm9udHMpXSwgY29uZmRpcj0iJHdpdGh2YWwiLCBjb25mZGlyPXllcykKCiMgQ2hlY2tzIGZvciBwcm9ncmFtcy4KQUNfUFJPR19DQwpBQ19QUk9HX0lOU1RBTEwKQUNfUFJPR19MTl9TCkFDX1BBVEhfWAoKUEFDS0FHRV9WRVJTSU9OPTEuMC4xCgojIFNldCBtYWpvciB2ZXJzaW9uClBBQ0tBR0VfTUFKT1I9YGVjaG8gJFBBQ0tBR0VfVkVSU0lPTiB8IGF3ayAtRiAuICd7IHByaW50ICQxIH0nYApQQUNLQUdFX01JTk9SPWBlY2hvICRQQUNLQUdFX1ZFUlNJT04gfCBhd2sgLUYgLiAneyBwcmludCAkMiB9J2AKUEFDS0FHRV9SRVZJU0lPTj1gZWNobyAkUEFDS0FHRV9WRVJTSU9OIHwgYXdrIC1GIC4gJ3sgcHJpbnQgJDMgfSdgCkFDX1NVQlNUKFBBQ0tBR0VfVkVSU0lPTikKQUNfU1VCU1QoUEFDS0FHRV9NQUpPUikKQUNfU1VCU1QoUEFDS0FHRV9NSU5PUikKQUNfU1VCU1QoUEFDS0FHRV9SRVZJU0lPTikKCk9CSkVYVD0ibyIKQUNfU1VCU1QoT0JKRVhUKQoKQUNfREVGSU5FX1VOUVVPVEVEKFBBQ0tBR0VfTUFKT1IsJFBBQ0tBR0VfTUFKT1IpCkFDX0RFRklORV9VTlFVT1RFRChQQUNLQUdFX01JTk9SLCRQQUNLQUdFX01JTk9SKQpBQ19ERUZJTkVfVU5RVU9URUQoUEFDS0FHRV9SRVZJU0lPTiwkUEFDS0FHRV9SRVZJU0lPTikKCSAKIyBDaGVja3MgZm9yIGhlYWRlciBmaWxlcy4KQUNfSEVBREVSX0RJUkVOVApBQ19IRUFERVJfU1REQwpBQ19DSEVDS19IRUFERVJTKFtmY250bC5oIHN0ZGxpYi5oIHN0cmluZy5oIHVuaXN0ZC5oXSkKCiMgQ2hlY2tzIGZvciB0eXBlZGVmcywgc3RydWN0dXJlcywgYW5kIGNvbXBpbGVyIGNoYXJhY3RlcmlzdGljcy4KQUNfQ19DT05TVApBQ19UWVBFX1BJRF9UCgojIENoZWNrcyBmb3IgbGlicmFyeSBmdW5jdGlvbnMuCkFDX0ZVTkNfVlBSSU5URgpBQ19DSEVDS19GVU5DUyhbbWVtbW92ZSBtZW1zZXQgc3RyY2hyIHN0cnJjaHIgc3RydG9sIGdldG9wdCBnZXRvcHRfbG9uZ10pCgppZiB0ZXN0ICIkR0NDIiA9ICJ5ZXMiOyB0aGVuCiAgICBNS1NITElCPSckKENDKSAkKENGTEFHUykgJChEU09fUElDX0NGTEFHUykgJChEU09fTERPUFRTKSAtbyAkQCcKICAgIERTT19MRE9QVFM9Jy1zaGFyZWQgLVdsLC1oLGBlY2hvICRAIHwgc2VkICciJ3MvXC5zb1wuXChbWzAtOV1bMC05XV0qXCkuKi8uc28uXDEvJyInYCcKICAgIERTT19DRkxBR1M9JycKICAgIERTT19QSUNfQ0ZMQUdTPSctZlBJQyAtRFBJQycKZWxzZQogICAgQUNfQ0FOT05JQ0FMX0hPU1QKICAgIAogICAgTUtTSExJQj0nJChMRCkgJChEU09fTERPUFRTKSAtbyAkQCcKICAgIERTT19DRkxBR1M9JycKICAgIERTT19QSUNfQ0ZMQUdTPSctS1BJQyAtRFBJQycKICAgIAogICAgY2FzZSAiJGhvc3QiIGluCiAgICAqc29sYXJpcyopCiAgICAJRFNPX0xET1BUUz0nLUcgLXogdGV4dCAteiBkZWZzIC1oICRAJwoJTElCUz0iJExJQlMgLWxjIgoJOzsKICAgICopCiAgICAJRFNPX0xET1BUUz0nLXNoYXJlZCAtaCAkQCcKICAgIAk7OwogICAgZXNhYwpmaQoKQUNfU1VCU1QoTUtTSExJQikKQUNfU1VCU1QoRFNPX0xET1BUUykKQUNfU1VCU1QoRFNPX0NGTEFHUykKQUNfU1VCU1QoRFNPX1BJQ19DRkxBR1MpCgojCiMgVXNpbmcgeCBsaWJyYXJpZXMsIHNldCBYIGZvbnQgZGlyZWN0b3J5CmNhc2UgIiRub194IiBpbgp5ZXMpCgk7OwoqKQoJWF9GT05UX0RJUj0iJHhfbGlicmFyaWVzL1gxMS9mb250cyIKCUFDX0RFRklORV9VTlFVT1RFRChYX0ZPTlRfRElSLCRYX0ZPTlRfRElSKQoJOzsKZXNhYwpBQ19TVUJTVChYX0ZPTlRfRElSKQoKIwojIENoZWNrIGZyZWV0eXBlIGNvbmZpZ3VyYXRpb24KIwpjYXNlICIkZnJlZXR5cGVfY29uZmlnIiBpbgpubykKCTs7CnllcykKCUFDX0NIRUNLX1BST0coZnRfY29uZmlnLGZyZWV0eXBlLWNvbmZpZyxmcmVldHlwZS1jb25maWcsbm8pCgk7OwoqKQoJZnRfY29uZmlnPSIkZnJlZXR5cGVfY29uZmlnIgoJOzsKZXNhYwoKY2FzZSAiJGZyZWV0eXBlX2luY2x1ZGVzIiBpbgpubykKCUZSRUVUWVBFX0NGTEFHUz0iIgoJOzsKeWVzKQoJY2FzZSAiJGZ0X2NvbmZpZyIgaW4KCW5vKQoJCUZSRUVUWVBFX0NGTEFHUz0iIgoJCTs7CgkqKQoJCUZSRUVUWVBFX0NGTEFHUz0iYCRmdF9jb25maWcgLS1jZmxhZ3NgIgoJCTs7Cgllc2FjCgk7OwoqKQoJRlJFRVRZUEVfQ0ZMQUdTPSItSSRmcmVldHlwZV9pbmNsdWRlcyIKCTs7CmVzYWMKCmNhc2UgIiRmcmVldHlwZV9saWIiIGluCm5vKQoJZnJlZXR5cGVfbGliPSIiCgk7Owp5ZXMpCgljYXNlICIkZnRfY29uZmlnIiBpbgoJbm8pCgkJZnJlZXR5cGVfbGliPSIiCgkJOzsKCSopCgkJZnJlZXR5cGVfbGliPSJgJGZ0X2NvbmZpZyAtLWxpYnNgIgoJCTs7Cgllc2FjCgk7OwoqKQoJZnJlZXR5cGVfbGliPSItTCRmcmVldHlwZV9saWIgLWxmcmVldHlwZSIKCTs7CmVzYWMKCnNhdmVkX0xJQlM9IiRMSUJTIgpMSUJTPSIkTElCUyAkZnJlZXR5cGVfbGliIgpzYXZlZF9DUFBGTEFHUz0iJENQUEZMQUdTIgpDUFBGTEFHUz0iJENQUEZMQUdTICRGUkVFVFlQRV9DRkxBR1MiCkFDX0NIRUNLX0hFQURFUlMoZnJlZXR5cGUvZnJlZXR5cGUuaCkKCmNhc2UgIiRhY19jdl9oZWFkZXJfZnJlZXR5cGVfZnJlZXR5cGVfaCIgaW4Kbm8pCglDUFBGTEFHUz0iJHNhdmVkX0NQUEZMQUdTIgoJTElCUz0iJHNhdmVkX0xJQlMiCgk7Owp5ZXMpCglBQ19DSEVDS19GVU5DUyhGVF9Jbml0X0ZyZWVUeXBlKQoJY2FzZSAiJGFjX2N2X2Z1bmNfRlRfSW5pdF9GcmVlVHlwZSIgaW4KCW5vKQoJCUNQUEZMQUdTPSIkc2F2ZWRfQ1BQRkxBR1MiCgkJTElCUz0iJHNhdmVkX0xJQlMiCgkJOzsKCXllcykKCQlBQ19ERUZJTkUoSEFWRV9GUkVFVFlQRSkKCQlBQ19TVUJTVChGUkVFVFlQRV9DRkxBR1MpCgkJOzsKCWVzYWMKCTs7CmVzYWMKCmNhc2UgIiRkZWZhdWx0X2ZvbnRzIiBpbgp5ZXMpCglGQ19ERUZBVUxUX0ZPTlRTPSIvdXNyL3NoYXJlL2ZvbnRzIgoJQUNfREVGSU5FX1VOUVVPVEVEKEZDX0RFRkFVTFRfRk9OVFMsICIvdXNyL3NoYXJlL2ZvbnRzIikKCTs7CiopCglGQ19ERUZBVUxUX0ZPTlRTPSIkZGVmYXVsdF9mb250cyIKCUFDX0RFRklORV9VTlFVT1RFRChGQ19ERUZBVUxUX0ZPTlRTLCAiJGRlZmF1bHRfZm9udHMiKQoJOzsKZXNhYwoKQUNfU1VCU1QoRkNfREVGQVVMVF9GT05UUykKCiMKIyBTZXQgQ09ORkRJUiBhbmQgRk9OVENPTkZJR19QQVRICiMKCmNhc2UgIiRjb25mZGlyIiBpbgpub3x5ZXMpCgljb25mZGlyPS9ldGMvZm9udHMKCTs7CiopCgk7Owplc2FjCkFDX1NVQlNUKGNvbmZkaXIpCkNPTkZESVI9JyR7Y29uZmRpcn0nCkFDX0RFRklORV9VTlFVT1RFRChDT05GRElSLCAiJENPTkZESVIiKQpBQ19TVUJTVChDT05GRElSKQoKIwojIENoZWNrIGV4cGF0IGNvbmZpZ3VyYXRpb24KIwoKY2FzZSAiJGV4cGF0IiBpbgpubykKCTs7CiopCgljYXNlICIkZXhwYXRfaW5jbHVkZXMiIGluCgl5ZXN8bm8pCgkJZXhwYXRfaW5jbHVkZV9wYXRoPSIiCgkJOzsKCSopCgkJZXhwYXRfaW5jbHVkZV9wYXRoPSItSSRleHBhdF9pbmNsdWRlcyIKCQk7OwoJZXNhYwoJY2FzZSAiJGV4cGF0X2xpYiIgaW4KCXllcykKCQljYXNlICIkZXhwYXQiIGluCgkJeWVzKQoJCQlleHBhdF9saWJyYXJ5PSItbGV4cGF0IgoJCQk7OwoJCSopCgkJCWV4cGF0X2xpYnJhcnk9Ii1MJGV4cGF0L2xpYiAtbGV4cGF0IgoJCQk7OwoJCWVzYWMKCQk7OwoJbm8pCgkJOzsKCSopCgkJZXhwYXRfbGlicmFyeT0iLUwkZXhwYXRfbGliIC1sZXhwYXQiCgkJOzsKCWVzYWMKCglzYXZlZF9DUFBGTEFHUz0iJENQUEZMQUdTIgoJQ1BQRkxBR1M9IiRDUFBGTEFHUyAkZXhwYXRfaW5jbHVkZV9wYXRoIgoJc2F2ZWRfTElCUz0iJExJQlMiCglMSUJTPSIkTElCUyAkZXhwYXRfbGlicmFyeSIKCglBQ19DSEVDS19IRUFERVIoZXhwYXQuaCkKCWNhc2UgIiRhY19jdl9oZWFkZXJfZXhwYXRfaCIgaW4KCW5vKQoJCUFDX0NIRUNLX0hFQURFUih4bWxwYXJzZS5oKQoJCWNhc2UgIiRhY19jdl9oZWFkZXJfeG1scGFyc2VfaCIgaW4KCQlubykKCQkJaGF2ZV9leHBhdF9oZWFkZXI9bm87CgkJCTs7CgkJeWVzKQoJCQlIQVZFX1hNTFBBUlNFX0g9MQoJCQlBQ19TVUJTVChIQVZFX1hNTFBBUlNFX0gpCgkJCUFDX0RFRklORV9VTlFVT1RFRChIQVZFX1hNTFBBUlNFX0gsJEhBVkVfWE1MUEFSU0VfSCkKCQkJaGF2ZV9leHBhdF9oZWFkZXI9eWVzCgkJCTs7CgkJZXNhYwoJCTs7Cgl5ZXMpCgkJaGF2ZV9leHBhdF9oZWFkZXI9eWVzCgkJOzsKCWVzYWMKCWNhc2UgIiRoYXZlX2V4cGF0X2hlYWRlciIgaW4KCW5vKQoJCUNQUEZMQUdTPSIkc2F2ZWRfQ1BQRkxBR1MiCgkJTElCUz0iJHNhdmVkX0xJQlMiCgkJZXhwYXQ9bm8KCQk7OwoJeWVzKQoJCUFDX0NIRUNLX0ZVTkNTKFhNTF9QYXJzZXJDcmVhdGUpCgkJY2FzZSAiJGFjX2N2X2Z1bmNfWE1MX1BhcnNlckNyZWF0ZSIgaW4KCQlubykKCQkJQ1BQRkxBR1M9IiRzYXZlZF9DUFBGTEFHUyIKCQkJTElCUz0iJHNhdmVkX0xJQlMiCgkJCWV4cGF0PW5vCgkJCTs7CgkJeWVzKQoJCQlIQVZFX0VYUEFUPTEKCQkJQUNfU1VCU1QoSEFWRV9FWFBBVCkKCQkJQUNfREVGSU5FX1VOUVVPVEVEKEhBVkVfRVhQQVQsJEhBVkVfRVhQQVQpCgkJCTs7CgkJZXNhYwoJCTs7Cgllc2FjCgk7Owplc2FjCgkKCQpjYXNlICIkZXhwYXQiIGluCm5vKQoJQUNfTVNHX0VSUk9SKFtjYW5ub3QgZmluZCBleHBhdCBsaWJyYXJ5XSkKCTs7CmVzYWMKCkFDX09VVFBVVChbTWFrZWZpbGUKCSAgY29uZmlnL01ha2VkZWZzCgkgIHNyYy9NYWtlZmlsZQoJICBmYy1jYWNoZS9NYWtlZmlsZQoJICBmYy1saXN0L01ha2VmaWxlCgkgIGZvbnRjb25maWcvTWFrZWZpbGUKCSAgZm9udGNvbmZpZy5wYwoJICBmb250Y29uZmlnLWNvbmZpZ10pCgo=