{"servers":[{"id":"72cd2b50-edbc-468d-ad4c-b34a5b7827d5","name":"adobe-express-addon-developer-mcp-server","title":"Adobe Express Developer MCP Server","summary":"Accelerate your Adobe Express Add-on development workflow through Model Context Protocol(MCP) that seamlessly integrates with any AI-powered IDEs.","description":"Now, to build Adobe Express Add-ons, all you require is a Model Context Protocol (MCP)-compatible IDE with an LLM of your choice. \n\nThe Adobe Express Developer MCP Server brings the right context to your LLM so that it provides accurate answers for coding, debugging, and building full-fledged add-ons quickly. \n\n⋅ Brings the goodness of add-on documentation and typedefs directly to your development environment. \n⋅ Works with any Large Language Model (LLM) of your choice. \n\nReach out to us via our community forum (https://discord.gg/nc3QDyFeb4) for feedback or questions.","tags":["developer-tools","learning-and-documentation","hide-from-playground"],"deployment_mode":["local"],"category":["Developer Tools","Learning and Documentation"],"lifecycle":"production","owner":["org-nitmitta-all-mgrs"],"server_type":["external"],"base64_icon":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI2LjYuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiIFsKCTwhRU5USVRZIG5zX2V4dGVuZCAiaHR0cDovL25zLmFkb2JlLmNvbS9FeHRlbnNpYmlsaXR5LzEuMC8iPgoJPCFFTlRJVFkgbnNfYWkgImh0dHA6Ly9ucy5hZG9iZS5jb20vQWRvYmVJbGx1c3RyYXRvci8xMC4wLyI+Cgk8IUVOVElUWSBuc19ncmFwaHMgImh0dHA6Ly9ucy5hZG9iZS5jb20vR3JhcGhzLzEuMC8iPgoJPCFFTlRJVFkgbnNfdmFycyAiaHR0cDovL25zLmFkb2JlLmNvbS9WYXJpYWJsZXMvMS4wLyI+Cgk8IUVOVElUWSBuc19pbXJlcCAiaHR0cDovL25zLmFkb2JlLmNvbS9JbWFnZVJlcGxhY2VtZW50LzEuMC8iPgoJPCFFTlRJVFkgbnNfc2Z3ICJodHRwOi8vbnMuYWRvYmUuY29tL1NhdmVGb3JXZWIvMS4wLyI+Cgk8IUVOVElUWSBuc19jdXN0b20gImh0dHA6Ly9ucy5hZG9iZS5jb20vR2VuZXJpY0N1c3RvbU5hbWVzcGFjZS8xLjAvIj4KCTwhRU5USVRZIG5zX2Fkb2JlX3hwYXRoICJodHRwOi8vbnMuYWRvYmUuY29tL1hQYXRoLzEuMC8iPgpdPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IkFkb2JlX0V4cHJlc3NfTG9nbyIgeG1sbnM6eD0iJm5zX2V4dGVuZDsiIHhtbG5zOmk9IiZuc19haTsiIHhtbG5zOmdyYXBoPSImbnNfZ3JhcGhzOyIKCSB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIgdmlld0JveD0iMCAwIDI0MCAyMzQiCgkgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMjQwIDIzNDsiIHhtbDpzcGFjZT0icHJlc2VydmUiPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLnN0MHtmaWxsOiMwMDBCMUQ7fQoJLnN0MXtjbGlwLXBhdGg6dXJsKCNTVkdJRF8wMDAwMDEyNTU5MzM1OTUzOTcxNzgxODAyMDAwMDAwODAwODc1NzExNDMzMTQ4NDA0N18pO30KPC9zdHlsZT4KPHN3aXRjaD4KCTxmb3JlaWduT2JqZWN0IHJlcXVpcmVkRXh0ZW5zaW9ucz0iJm5zX2FpOyIgeD0iMCIgeT0iMCIgd2lkdGg9IjEiIGhlaWdodD0iMSI+CgkJPGk6YWlwZ2ZSZWYgIHhsaW5rOmhyZWY9IiNhZG9iZV9pbGx1c3RyYXRvcl9wZ2YiPgoJCTwvaTphaXBnZlJlZj4KCTwvZm9yZWlnbk9iamVjdD4KCTxnIGk6ZXh0cmFuZW91cz0ic2VsZiI+CgkJPHBhdGggaWQ9IkJhY2tncm91bmRfVGlsZSIgY2xhc3M9InN0MCIgZD0iTTQyLjUsMGgxNTVDMjIwLjk3MiwwLDI0MCwxOS4wMjgsMjQwLDQyLjV2MTQ5YzAsMjMuNDcyLTE5LjAyOCw0Mi41LTQyLjUsNDIuNWgtMTU1CgkJCUMxOS4wMjgsMjM0LDAsMjE0Ljk3MiwwLDE5MS41di0xNDlDMCwxOS4wMjgsMTkuMDI4LDAsNDIuNSwweiIvPgoJCTxnIGlkPSJBZG9iZV9BIj4KCQkJPGRlZnM+CgkJCQk8cGF0aCBpZD0iU1ZHSURfMV8iIGQ9Ik0xNDYuMDgsNjcuMTNDMTQxLjY5LDU2Ljc1LDEzMS41Myw1MCwxMjAuMjUsNTBzLTIxLjU0LDYuNzctMjUuOTIsMTcuMThsLTM1LjQ3LDg0LjQ3CgkJCQkJYy00Ljg2LDExLjU0LDMuNiwyNC4zLDE2LjEyLDI0LjNoMzkuNWM5LjctMC4wMiwxNy41NS03Ljg5LDE3LjU1LTE3LjZzLTcuODgtMTcuNi0xNy42LTE3LjZjLTAuNCwwLTYuNzUsMC4wNS02Ljc1LDAuMDUKCQkJCQljLTIuODYsMC00Ljc5LTIuOTEtMy42OC01LjU1bDEyLjU5LTMwYzEuMzctMy4yNiw1Ljg0LTMuMjgsNy4yMi0wLjAybDI1LjY5LDYwLjA2YzMuNTMsOC4wMiwxMC4yNCwxMC42MywxNi4xNiwxMC42NQoJCQkJCWMxMi41NSwwLDIxLjAxLTEyLjc4LDE2LjEyLTI0LjMzTDE0Ni4wOCw2Ny4xM0wxNDYuMDgsNjcuMTN6Ii8+CgkJCTwvZGVmcz4KCQkJPGNsaXBQYXRoIGlkPSJTVkdJRF8wMDAwMDEyMTk4MjEyNjY1MTY1NDY0NDEyMDAwMDAxNjQxNDU5OTI2OTE1NzM3Mzg4Nl8iPgoJCQkJPHVzZSB4bGluazpocmVmPSIjU1ZHSURfMV8iICBzdHlsZT0ib3ZlcmZsb3c6dmlzaWJsZTsiLz4KCQkJPC9jbGlwUGF0aD4KCQkJPGcgc3R5bGU9ImNsaXAtcGF0aDp1cmwoI1NWR0lEXzAwMDAwMTIxOTgyMTI2NjUxNjU0NjQ0MTIwMDAwMDE2NDE0NTk5MjY5MTU3MzczODg2Xyk7Ij4KCQkJCTxkZWZzPgoJCQkJCTxyZWN0IGlkPSJTVkdJRF8wMDAwMDE2ODA5MTU4ODc1NzA4MTc1NTU5MDAwMDAxMTM3NzM1NDEzNTA5MjA2MDg1N18iIHg9IjUyLjQ4IiB5PSI0NSIgd2lkdGg9IjEzNS42OSIgaGVpZ2h0PSIxMzUuOTUiLz4KCQkJCTwvZGVmcz4KCQkJCTxjbGlwUGF0aCBpZD0iU1ZHSURfMDAwMDAwNTcxNDEyMTQxNzk4OTg2NzQxNDAwMDAwMTA1NTg0Njg0NTU5NDg3ODMwMzZfIj4KCQkJCQk8dXNlIHhsaW5rOmhyZWY9IiNTVkdJRF8wMDAwMDE2ODA5MTU4ODc1NzA4MTc1NTU5MDAwMDAxMTM3NzM1NDEzNTA5MjA2MDg1N18iICBzdHlsZT0ib3ZlcmZsb3c6dmlzaWJsZTsiLz4KCQkJCTwvY2xpcFBhdGg+CgkJCQk8ZyBzdHlsZT0iY2xpcC1wYXRoOnVybCgjU1ZHSURfMDAwMDAwNTcxNDEyMTQxNzk4OTg2NzQxNDAwMDAwMTA1NTg0Njg0NTU5NDg3ODMwMzZfKTtlbmFibGUtYmFja2dyb3VuZDpuZXcgICAgOyI+CgkJCQkJCgkJCQkJCTxpbWFnZSBzdHlsZT0ib3ZlcmZsb3c6dmlzaWJsZTsiIHdpZHRoPSIyODIiIGhlaWdodD0iMjg1IiBpZD0iQWRvYmVfQV9HcmFkaWVudF9NZXNoX1Jhc3Rlcml6ZWRfSW1hZ2VfIiB4bGluazpocmVmPSJkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQVJzQUFBRWZDQVlBQUFCeHZHSTNBQUFBQ1hCSVdYTUFBQmM0QUFBWE9BR3V3emdxQUFBZwpBRWxFUVZSNG5PeTllYnd0eDFVZXVxclBsU1VQU1BMSTRBbGp3QXBUd0JqamlZQXpNWHNJdk9TWHZCY1NTT0JsSkhtODk0Ti9FbXlaCjRlRmdBb1NFR0VnQVl4ek1aQWJuSmIrOEpFK1NMY25JbGlkNWtBZXdqZkdBYlR4SW5pVGRzN3ZlYisvZFZmV3RiNjFWM2Z2Y2UrNDkKOTk1ZFV0L3VycWxyZDFkOS9hMXZWZlZKT2VjcyszREpodFcxMTZxZmZ2anNaeC81VnB5Q3NnZlBldGErVSsxRERXa2Q5bUJ6NllRQwpMSWZQdnBaKzgvRjJnZUhydm02enBhLzdXaG0rOXVzdTljZHdTWVk5MkZ6a1lYWHRjelkvc0lGTDlLalBRUmRJN2ZEVXM3WU1hTTkrCkxwMndCNXVMTUt3QlpyeitoczFtUWVSa2dBMkh0ZmwxOElONzRMbVl3eDVzTHBJdzNuQ0RySzc5b1MzQW1NZDVRZ0FuQWh1SVg1dFkKYTNOckR6d1hYOWlEelFVZTFnQ3ozdFpBMFI1aUp0dzRBV0N6QUdqNC9OUVBQbHZTMSs0MW5vc2w3TUhtQWcycjUvendGbVRVb3l1QQpNd2MydThTZGhiQVVhTHk0dEdVN0IvL3lXWHZRdWNEREhtd3VzTEFGbVI5dVlPR0NqUkRnWENCZ013TStHOUQ1d1dmSjhCZjJvSE1oCmhqM1lYQ0JoOVp3ZjJRQk5BeGQ0WkNlWjNSd1ZhRHJubGVuc1FlZUNDbnV3T2VFaDMvQnlPZjJYdmo0QUY5Z1RpN0dBY3g3QTVpd3gKR25NK0haLzZsOCtXZzMreEY1SXZsTERHbXVGU3Z3a25NYXhCNXZBdmY0T2Mvc3ZmTUxVT1Jwc1puQW5pa28xUGJxSGpEY2NNTk90dworTVBQbHROLzlha3l2dXo2Yy92Yjl1SElZYzlzVGxoWS9kQ1B5dW81UHpvMUtnTkRtV0UzbEphRGVJZ0lmdmhaNkE3SFlENzFqdGNtCjFXWC83Ym96YVBBK0hIZlltMUVuTEJ6K2xXK1M4WWFYVzRBSlRTZXQxN1NkQnppczQzRDVYdHpDMENOUVo4SnFJcUNoUEd2QUdiNW0KcitXY3hMQTNvMDVJeUMrN1VlNjUvRW9aYjdoeGFsRFM1aytpYzA3SDRKbFpXT2E0TEtwZGdHWXVUMW9BTk01dk9mMzFUNVhWai9LNgpyMzA0S1dIUGJNNXpPUHdyM3lMankxNCtOWUlaQzU3NzdtNlR2eVlGNWxUWHRPSzhNMkZYRUluaWxwaFBDOW5OT216TXF2KzZONnRPClV0Z3ptL01jRHYvcXQ4cjQ4cHY2aklYRjMwUWpMUVVueVVubWtJRHR1Q0p6Vk83a0FzMDY1SmRmTC9mY0wyMzIrM0J5d2g1c3prUEkKTDd0SkR2L3EwMlI4MlUzYmkzc21Va29Pd015ZFkyaEFrcGJhVGowUU1hQzBvSzY1dURNQm1zRFV3bHR4K3B1ZXVnZWNFeFQyWnRRNQpEaHVnK2ZxbmJTNjZtWUtYSTlFM01xRTZJbkhQUzdXK1dqanY1aHdJeFhOeHV3S05jNXlDT2k3N0w5ZEplc3BlT0Q2ZllXOUduZU9RClgzNlRISDdETStwSVdET09sSUF5Sk5Fc3hwaFFva2RSYUhMNUVTNEI4Z3NlWFVsZXltaVdBTW5TOUE3UXJNUHBiMzZxckg1c0x4eWYKNzdCbk51Y281SmZmTElkZi93eDM3b3hoT05Kak1UMEdGSnpYa0Z2Vlo1dmQ5TXl2cGVkSDFHdDZRSU5saWx2ODFIL2VpOGZuT3V6bgoyWnlqc0FHYWIzaW1BeG9ORUxiUmM0QVRITmNkeGtYeDZvb0NFUXNCQ01JdTd1NWpFSWFaMlBXQWhrSG4xRXYzZ0hNdXc5Nk1PZ2RoCkF6VGYrTmUwcVZTUDI2allSbnVlcGtDVU1LSng0SmtLdkZWR05IWUY0TWhtV1NBa0x6M255eXd4bzQ0S05GUFo4Y2JyWmZYY3ZWbDEKcnNPZTJSeGp5QzkvaFJ4KzQ3YzU1czhTaHROak1kNjhHeTgveHd1eEZjTnZkbWMzR001VWUxbklibzRNTkJSMzJVdXZrL1RrdlhCOApMc0tlMlJ4ajJBRE5OMzA3TVJscEx1MEVvd1ptQ0xmc0tBUTdMQVlGQzQ4QmVXS3hxaGV1ZHpiQ25MWnlKdWxpYjVuSjYrMW40azQvCjdhbVNiOXE3eHM5VjJET2JZd3FucjN6WWpLaWJ1NHduZTh4RnNSaVB3UVJzSjNLSks1RmFLQStHb0l2c3lsN216cVB5bllYdHMzRnoKK3MvYU5mNTdlNFp6M0dFdkVCOVRPUHptdjdIUmFtYm55b1NBQTE2cXNJejRKdGF1Z0VOQXd0RGo1UWxEWjBDYnNGUzM4WURtYkFBTwp4ZC9yUS90aGNKeGhiMFlkUXhoLzdLY2szL2dIWUM0bFp6WXdIenZDTWM3OFZXYVRZMklaMjZKanlyZ21sczNXcjJ5bTBLNG1rNmZMCjhFODdncG5rN3IxOFNlVHdtVS90LzhaOU9PT3dCNXV6R05ZZ3MvcXhuOUtnc1FrOXdCSElEOGRUZW5MVFdLdnhCQTFua2lDR2hhQXoKcStuc3dGQzY1MTZUby9wNjRCTGw4L0xEK1hqejliSjYzdDVEZFp4aGIwYWR4WEQ2NnM4TGRKbkFaSXJNS01lc2F1YU50OUo3YmxKZwpGTytiVXBIWjVQbXVWRmpDYmhJZGRreWJidmtsNExKci9yVis4NUxySkQxcHI5K2M3YkRYYk01aU9Qeld2eVg1eGx1Q3lYY2U0RGh4Ck0rY1pBYWpXTDFSbjVPcnV1Y2lYYWpTT290TmpObkRlQlJZK1AxUEFtY3ZMK1NqL3ZkNi9IeEpuTyt3MW03TVV4dWYrak1oTnI1b3EKUzg3a084OWtHbHA2cE9PSTFueFMxWEhJVk1KcjhkcXE1TmttTFV0b0p5VnZTK295eGhLakwxWWt6N3J6cnN2WEV0cDdway9QTkJLbgpqcm5yd1BIaHQrMzFtK01JZTJaekZzTGhBeC9UV0VVdWJ1c093d2taU2M5N3BmUGxtc2IxaU1OYU9KL1lPQlA2N0VhRnBZeGwxK016Ck5ZdDJ6WS9tMUc5ZEorbUplM1BxYklXOUdYVVd3dXJwM3pHWlQyenlMSEJ4WTVveXB6b2FEb0ZXN3VrKzZ0cmlBOHhPcGhURTlSaFIKbEdjdWJRbEk3R0FPTFk2THpLbjM3SWZHMlFwN00rb01RNzdwVlp0dGF4S3h5WlBBaytTWVJld2FUM1A1aE9LM2JVL1ZYa0d6eVR2bgozd3Ftbld2U3NFM2ttQ0JjWFkvQjlFeWRDSlNpTXVLMFpZbXAxYnMyN01zdEczOXk3NTA2bTJIUGJNNGdySjd4blpKdnVzVXhpZGFICjQxUXhzWnpRdkdKMkU1dFFuZ25XcEZ2SFpPc3hKY3hqQXNaUmVzUnN4Qm5BWHBuak1KR1c3anYxSlVvNzlSdlhTWHJDM3B3NjA3Qm4KTm1jUXhoLy8yUzJyQ1puTG9GbU94Mlo2eDE2OTlaamYyclRHQ1prSmwrRzFXUWtMellRbHpHYk8vT214a1NWeDN2VjY3R3NoU1BHdApMOXRxejI3T1d0Z3pteU9HdzRkOG1TL0V6cm02eTdxblVDQmV3bXhZMy9GMEhORjVWSDNpTTZrZWs0a0U0eVhzSlRyZU5mMG9qR2ZCCk5aak5jTmxUTDk2em16TU5lMlp6eERBKzcvbXVUck05SC93MDFITWlOcVNPK1EwZDZEeGNadnRnb1hxb3BKNkxQbysvRnpvRkVvWTkKOXJCa1lJdDBCM1dYNGN6bDhkbzJzMFZzaHEreCt1azl1emtiWWM5c2poQU9QK3V4bWhsRWJHU0JQcE81ekN5RGtXVjVwM3F6UkcxegoybFRyeGowZlE0Z0F4WXZieGF6cHhTMnBNd0FtMWNRbFpTRCsxSzlkSittcjkrem1xR0hQYkk0UXh1Zjl2R1Vra1FZanlCcDhEYVpTCitDUzJmTTl6NWVZVlBWcVN3QWZWQXlhRGNmVlkrbXlueHpUT2hJbkl3bnhwV3RXM0Ezc0pHWXgzUGVlYXEzK3paemRuR3ZiTVpzZHcKK05sZjFmVUt4VXhuSGNhUURXVWhaaExPdjJGMk04YjZEYkdXN05WbjJ1anRkMlEyakZOTG1NdFJHVXVRenJpN3VFMmQ5cHg2MFo3ZApIRFhzbWMyT1lmeUpYd2kwbG9HT1ViY1ptbWNxRGM2MkxaZnFOa0FkYyt4R09teUgwNEN3cUFOa043akhBWWY1QW1ZaHdmRVNOdE5qCk1KdzJ3Mmc4Z3VmV1AzZGRKMzcxTTN0MmN5Wmh6MngyQ0ljUGZlTEVUbVM3RitreUNmOThuTkZvcEo1blpDMm1yaWd0cXprKzgxcU8KdzJyY0QyMU54MHNZakhjK2Q3eUV0WFRZVU9yVjAyTlBjOWVrL1dWdjNRK1hvNFE5czlraDVGZThGbGpIeEZJaUZvT3ZXWHdkSjJJNgpoaDFwTnBPOGZNeGFUQnJOR0ZadjY4WlFXbFhPcUZUc0p2Y1p6Tng1aDRVY2RXUEMxL1VvTGQwV3RuWDh0M3QyYzlTd1p6WUx3L2pYCnYxZnlLMTdUdkVqdWpGNGg1aktuMll4Vyt3a1lUMlpHMVBWWTliU2NnRVVKdG9IYVU5cTNsTlY0YVZIK09VWURhU25LZndRbTFHTXYKWVYzVCtXVnYzZytaWGNPZTJld1E4aCs4dnJFUEdUYXN3ekFkVjdOSnZtWXpETUNPN0t4anpWU2t6VUJlNnFIcWJjaCtra3dzcWlRbApmK0F2MERTNmFiMzhRWHJrNEp2MVJBMVVKKzY5dUFqNEluYnpzM3QyYzVTd0I1c0ZJZi9rQ3h3ekIwSG5ZREo1UEJOcDhNRkFrcTNQCmlNM2E5TnBlaTBZamdSSUNpQTlDblVHKzJlVTJMbXUrN0E5RUNZN25OZzhzaHFEWlhsNEo5blBnc3lSdENQYVFQdDY2Ly9NdlJ3bDcKTTJwQldEM3lMMXRYczdja3dQM0VoQ01XS3hNcU8ySnpUMGh1OFZuVjRabEpIVEc2RnpmOXJtemlwdUN4aEY0YTdZdnNsRXZVSEloZwpmVXRZeVpKNmhFQ2sxMmJuK05RdlhpZnBjWHMzK05Ld05xTk9YUmhOUFg4aC85UUxhWUxiUUFNenRZR2NXbnpDd2JySlZnQ2xkTmdCCnlreEFnNWZKdzVRMjZ0KytpZC9HcFUxYlJqc0xwallycUdNMmJHdE1VSEZlQWlyT2NaSjQ0QnNHMWNsNzF2WmNsM2Z0SUE4Q1k3NzEKaGozWTdCajJ6R1ltakgveit5ZTlCajlnTmVvM3ZpdStqb3I5WkM0WHNaYlFsZTJ3SWlxYmUrVzY3SWJ6aVo5M1Y4Qlp5aTUyTFQ5bgpTaTJwZjVjeU5CRzhzcHZYN29mTzByQVhpR2RDdnVVTmttOTVZeURrcnJjRG1yU1hXcytrK0NUSkY0RFZOdGcwU1ZwWWpvVGs5VFdHClNLZFpjRjF6RGRpdzNpVTZ5SEZzdTF4dmFkNEZXZzQrRnBWL3JkMzgvRjRvM2lYc3dhWVhibmxEWjlhdkl3UXJUeFRQeDRFWndyZ3AKTUVtVGwycUpWNG56RmNGNnVzNWdBYTlmbmdmY0JESUZhSVppK3poMURWUmVPaWJLWEo0NWNJZ0UzR0doMkJzQkRENEt4T3dPSUkwLwovK3dUMEVrdm5MRFhiRHBoL0RlL3Z1MTlxTWVndHFMaVIydG1WSDBIam5PV05Pa29PY3F6cmJ4VDV6U0xPY0d4bEVHYjZ2bjZPbHZmClV0NktMcWF1UlBWNlFuR1FQVW5Ma3lCUjVjazZmODlVOHVJaXdPcmw5WTZqOWlkcTl0SzZvR3gremZXU0hydlhicGFFUGJNSlF2NloKWHcvWVN2UzltaUJmTkdONDdjYXVUSVROc01GbkgrSXhGSTlwREpXUmJLTThWaU14TThFMGQ2TTh0VjNUdlV3d2VwZTBmOE9nQWpaeQpSUE9uRzg5VzhaTHJCdkhqZjlpYlVrdkRYaUFPd3VvTHYyM1pkMmFNRzV2ekNMaXNPMnVkcGpxeUVZQkh4NFh0elE3MnhPRFJhWnRNClhqS3VJeENKaFZpZFlqUFM4bmx2ZjJSSGMwekV5MWVQczQxYldpZnNsY3U5azgrdDA3djJkSDd3czlmdDJjMU0yTHUrby9ES04wK3YKUGpTZHhvazNqMU5QTGFhTWtCdmJBeEdCVjZNRENwdHQyTlNkcHZxcTl5cHh1UkZNbnFsdWJJT0tINlptZ090N1EwQnk5V1ZuVEtpSApLVGFqTW1mUGVtcUFBb2hrdlZnOVFPQzRlbHhzSFFmVXdqTDRlMmRNcGw0ZE13QzI2Ukt2dldFUE5ndkNudGs0SVgvSGN5VGY4aVphCmp5VEFJS1MvOXNpZEtNY3U3TWd0cmZOa0w4MHJxOXJxWEtla0pmOWE2cmRXVnVMOUJtUTJEQ1NPUnBNWklDSVdSTWREa0FkWkRsOEwKWmFsZEdGU1V6d09iNExxbmJ0d1BvMTdZdTc2OThNcmJKYi95OXNsZDNaWWpHRGZ4Y0RDajBiRFhpZU1PbkhTb1gxSmJvaUI0N2NETApKRDJOWlJxRnhvVU5idlBxUHAveGhpbDlKYWdQTlNEV2d3WW5EMnNpWGRjMTZUdkJwNkM3OVF5NmJMUjh3dDNUZGNzMi90SmV1NWtMCmU3Q2hrRjkxdXl2dWF1Q1pBeFVXakhuQ0JnN09RWi9YZEEwaTdjL0JERERJbmJWVjVqcUIyS3lBWWdJMkpTclRBUGZjNXJYZG1NYzcKNzRqUUExeHNpUEl4bHFiNlVmZkZJRE1uL0FaemFicDF3SGwrM1g2OTFGelltMUVVeGkvNmpobXpTRlJjKzhCVnRHYUt6QnZYeEFMeApXSmxJWG40dE1tZFpoU2FZWHliU2pJcXVRN09qcTVrVm1WaFRjTjNjYUdhUitkTXpoeUM5SytUeU5XYnpUaUV5MFV3Ym5ITXZ6N1EvCitLbnJKSDM1WHJ2eHdsNGdwcEIvOW5mdHZCcldLNUtvOVBWZzJBSU9yWFdxWUFIcmsrb3hEL0lCeW9nNzJEZmxjaEZkVjdYaGFTTW0Kb3dpTjRqREdBMWlnOWdRMTJiMGpINnVCbVFDSVVrMVBGWkJTQllUTmZCOEZTQWwyOElHdVVoV0t3bEh6U2dWcG9RaTlKTTRyRTVXbAplc2NYWENzSGU3QUp3eDVzTUx6cWJaTUp3Z0JEYjNLMXVIR1kraG95Z09rOGl3YWFnVlo1MXg1YnlyQ25hZENpcmpCNGpOUDEwOFpiClZrRlBsU2Z2bVpTRm5BaEdKVDQ3OFJSd2tFL3RidU1VUUFPQVJpUXBoMVdMcDd6SkF4Y0FuWENnSjEzV3pkT0o2ekdjaGFDMU9ieHQKYjByMXdsNnpLZUZWYjVWODY5c1hUTndqb1ZnbXNWZktOMmNPMm5kblVDOFpQSkU0K2JxUEVxS2RKUktCVHRPdWk5b090UUhqQnVmMwpZUHpBMjZDWE1MaDVITzFtaUk0RDBkblZVYWhlRm1rSHVOYWMvakluREVmTEdpaE95VmRUV3Y2VnZWQWNoYjFtTTRYOFhmOWE4cXZlCjR1czBab0plYjJXMmdOYlNQanllald0YWZGYzJUc1R6dEJvMVVTL1NaVmFxckozRU4zYTBHNmMrVjYrUk9GNnhFMlFrMk5XOGJ4dXoKanVPWVVNbXIxMk1lUVZtT08yS2UxQ2wzOFAvdWh4U0h2ZXNid29iVnVNc1MwRlY5QUhQZE82NXNWU1lwYjFiTVpwakpzSHZiY1h0SApySWZpelpJSXozV096S2V5bU1qYmxlaGF5R3lRdGJEckc5aUp0NUpjSFFjc3g2dkxaUys5c2p1d0hOanpxcEtvWFA3VlBidnh3bDZ6CldRUE44Ly9MQkNTanMraVMzc1oxejdyT21nbE1kUlNSV1drdzIvT2t6b3U0U3pwTEVvZE5nUVpUclY4V2hnZk5MckxVNitocmo1THIKN0dJUW9HdGR3TDZLaGxVbjV5WFFrRWpua0FrRTZuMUxMVjJ4a1JUck95d00xK3RGN0NURmVrNVUxdVR6V1lwNkZTOWxRK3VmLzRicgpKY216WkIrb2Erek5LSkh4eS8rWll3NnhHMXNnRHQzTndUWTNXN2lhTTlQZ2QvT1NXMTJscitMODJTdHI4NmtQZW5uZU44K2NVaVlUCmVkOFFoREN2TWFNQzA4cUFCZ0xGakZuVTgxcEZidmFnUGpOdnAxZEduTHhyVXZWajEwbjYwcjFucW9TOTYzdmRuWC91djlIYk84RzYKSnhvOHlHQTI2NWFZM1FnTTNnUURWUUpBYWdNaEtTMmtmSDZpOUY3UHBUMDRkVS9INkcxS2tJOWM0YWw2cXRJRVBwNFhDcTR0ekRnZwpHek1jNFVGWm1BN3VwUjBiaGtOcEtiWDd4WU45OE1wMjJJL1R2a3E0VkowekFNTjdMUFBHRzBUMllLUENKYzlzOG5jL1gvS3IvN0F6CjhVNThGa01pYkRNem5EU1gzWGhybWRDTUcyRnRWTVJ3V0NqMldFekFrcmhNeXFvOTZtUG5pZXNBVTgxbE4wSk1TT0RZMlF1YldXTE4Kbng0RFVnd2tFbzZ6NDM3dm0wTTdBWTFUNXVEM0xubWpvWWE5UVB6cWQwaCs5VHRKOEQyd3g2RWdET2tENW9YalNGQVdUOXkxQW5LaQpMUlNWamJEc3VkSmhLUU5mUzdUd2kxLzhVMHNsbEF1ZHhXSW5qdE9VaTV5RjNCSW4ybzF0M05xcG5mTkFMKzAxUDUzYzV0NCs0ZlZtCjh2TDZMS2RNZnZGZUtNWndTVE9iL1BQL1UrVG4vZ2V0ckFibXNMRXVQUE9IR1lJNExDSlloVTFhamF1M0lKTlFMQWxXYVNzWGVlUU8KNzJrM3lLYkdRTE1wcGx2QWxxWXlkU0lqTWgwd0VUVkxZWk1QZFNDUDRUQ1RRWVlUTUphUUhkVW43ek1YTCs5Y3Zwa3lCeS9ac3h2WgphellpOHZQWGJka0REUEptUGlReUlkQmNtdExWWnpzeEgrZ0xTbGNSTmZlbTdhUFp3c1V6eGRwUDhTekpaUEtBZDZwcU90dFp4WnVaCnl6STYrcytncjRIZ1VzTUFnNXUxbTNhUUtoZzFoVFhUMG9STm51bSs1Zkk3VUtkUmdGUHFtWUNrekZiMkJ2M1E4cW8wVjlkcDdRa0IKWjVjNHpCK1V6Mis2WHRJWDc3VWJ1YVJkMzc5d1BiaW9ZYTJUQnp5VnZTUUNIMm1nWkRZaGdWaW9ESUpPY3BnRDVLK0E0N2k0OWZBbApuVVFJdEJnVVdEd2VMT0Nvd1RVUXdPTEFINVJla3dxSUNES1Q3YjFLQ1FvbUFCakRjRmc4emdCT0RDNExBWVRyNXZTZWhoTWRkOHJtCjM3eDJEelpUdUdUQkp2L0NEV2FBc0JtVEprYVI2em9nR0lpNXpPNEszTnFsaUFzMm5FNXRNR3hvdWhhYWJPWExnUVVnOHJSR2FtcGoKWFJ5SmdGSzlWS1VPWWxCbVhwQ3pMaXNCVTFMTXpSdlFvZ0ZDYUVCbUhKZzR4d2J1a1dJMXV5NjZuSmxuNHpHbXhYVXZBSnYxSTd2OQplc2x2dmw3U0YrMEI1OUlFbTlmODhkWjl6YTVyWXphbHlXVFpEcmFjQnhxRXBYYzVXa2RHOHlRNUlJSUFZaWYvaGVZT0ExaGhKT1V2CmJrNzJRcHAwaytiT0JtQ3FBTlNiS0NnQXBxS3ZVZjhxSjR4TU5VaFQ4MjdWQVIyQkJydkRTMXBxdnpNbG44bDA1OVpRWERoQkQ5M3IKbE9kTTJBNGUzMzZEeUI1c0xrMkJPUC9ERjAyQXM4VE56WG0wZnRMKzNuWm40dDRtQkFKdGR5MVVJT2FxZEJLWjFTUzlVZFdmc1o0VQp0V20wSW5YeWZyOEh6c1ZrWWpZRWJLK1dvV05QUkdhekN2TWlJeEljNE40OG16azJsSmZOcSttQm1aT2U0SGg0MFNVM3pGUzRkQVhpCjE3NW4wbXNTTUFKclJtMmpTeDVrTzZCTlZKTWtUUU9hQjZUTzMvWVRheWlUMVF6WVNNdURaVGY1VnpTRERBZTIwT0J2OVd6YjJwaE4KOXRpVENOd1RJUllremZRMGY5UEttemczRVB2b0xVZEFMWWFYTDdBcE5MbTlLME9rMzlyOUhJVnpub2pkWkU2bk1sNWRrSjY0L25WWAplOG0xa3Y3YXBiMkU0ZEpqTnYvaFpzbi80V2I3bGc0L1VzN2dJWlRtVE9BTG1FbzI2UjVqWVZaRDU0V3BKR1pGSGtOeTBwV2JPMkE5Ci9CdlE5ZDJiNEljc3h6QWpvWFN4ZTg2bm1JdkRhdHpsRDZMemlRQXdjUjZ4ZFMxaE5zeUNCQ1ppZC9JT0w3aDAyYzBseVd6eWY3d0YKM3RhSnpBNEdIdWlFNW5PZmFBNGdhS0ViVzVRbWswQS8yWlpFUFNaQlBRTFhBc2FCZjlvbGxYbEFvdk1vb0VFZHByQVdyTGZwT0FuMApuUHIrcVNBajhNb3VBVnoxUFBjRmo2dVFIdWdpZ29NZFdVb3BBMVNqNUNuZ2tTRE9CWnlBaVhDZXV0ekJNYmVDK3VLNVBaMXJ2K1Y2CmtXc3VYZTNtMGdJYkJKb3FDTk1ncit1ZkFGeXkrTUJTMGtvKzlUWW1XazR1YTcwV3FwbGMyMjhLSTNCQTJTUmc1Z24wZXZKVUtkTW8KNldPY2grT0swR3ZYOUFvRTRVRi9mVkNaYXdGNHFJR1BRTURycWJ3MVVXQm1HY0FKMWl4VnU0V3VxN1FkTXNja0FJU09LWlc4dkVMbApPdlhtMzc5VzBoNXNMbzJRWC9zK1ovSWNmb29CM3JCVkdJWTNzMENhcTYzQVd4YnoxMTQ2T25XSUFwVTA3V1V5YmxwZ1V3VExFYWdWCjkzU215WDcxdWtMbG1jbkFKMEpybTRiSkZCeEkweEY3ekRxUG15ZURHOTBieEpGWGlsa1FlYllRNUNOR2hkZnpUQjlrTUV2eThqNm8KSzcvdGV0T01TeWxjT21DekJwclh2bi82YmswR01DRjJzK25YQ1RxejFWNjJpcCtqS3lnQVlrQVNKNDhESmhBU3hHbmdHZjB5OVkwTQpiVkFnTThKdjQxRXlPT25JZW1UNkNCamtUZEFDVi9PQW9WWHZFODBZVm1iU0RKQVk0VGNBSkNIdlVsS05jSmN4Sk84YS9Ic2ladVBkClNyNTJBWnlYWGl2cFd5OU5vZmlTRVlqelAzM3BGbkRjdFU2UjZ4bE1xSzVyRzQ4bGlPOElzSnd2NGNweEwvOElndk5JbTNjOTc1anEKVjRJemljaUpycThFNDlGSnk5TnlCVmhON3JtL1BVRzVwb3VPUTBhWEVEQklYTVoweGFKVWI0ak5JazkvT2t0QVU0Nkg1MThTUTA2RgpTMHNnZnUwSHdEeEFvR0hkQnY5a0NuWitOby9ZQk1NM01wdEthRWFKays2WVpCdEx4R013ellSSkV4TnBhNk5LT3ZkMDBtL1VtcW1oCmdVY2RmY1hVWkxjNEFrMnhNV0Q5Rmx4U0VadkNnS1o3V1ZkZ1MvMlQ0NjJwNVY2N1FqR0RDT3luZktGWHlEQ2NnUDNndFRGdGlRa1YKNmtuNk9QOC8xMHI2NWt1UDNWd2FZUE5McndVZEFRRWxhM0F3bmluUlFPS3lFUUlMTlNkSDZMZ2MwbHZhMDIvS0FDcjU2MnhqN1AzVApiR0hKYWlCbHdiazdBcUFDeHkwNzZUaFNUYVF1MENoektEWDl4UnVJR2EwMlBTK21nUktEQ3dFTno4dnhaaWFIb0lBdkRrcWZBeEl2CjNnVzdIZkw4NGZwUHZ1ekI1cUlNK1pkdTY2ejV5WTcrNG9IRmRLNFdNNVl5QVdOUmpDazU2Nmx3RVBGZUhETURRcTBuRVZpTTB4K3UKY3dBdEl5Z0FnM0VBVEluRkZVUWdMN0FUOUZ5NTNpbzE4REtVWlc4UnBHTlpudWhYMHdpTXZDVU9JWGpzdUJCekxxNXNmRHM1enpyTApIMTR2YVEwNG4zOXBlYVl1ZnJCNW5XTStzVzVUMHBoMUdPYVN0Q2RHbVQ0UlNJbldIaktVTlVDRmU4cWpxSDF5eXRWRThDQnRYZGpWClZGSGxTbGxrUzd6bWlkZFNpVjRBV3Mwdm1RZWNlditFVENUTWgrWnJSeHdXQWdweFRCZ0pCcnhwMXhtQWpRY3F2QVlycUNQLzEyc2wKL2RNOTJGeFVJZi9TRy9XbkpKalZvUGFpZEJrSnpLWUVBd29HUngyNG5sNkRURWRnUUxFVzQzbUVKa1pVZEp4TndMWUk5T3JCZ3NjYQplQ1lXa3l2cndXdDZRRE1RczhtUWxqVGJVZVpUQVE4SGNDVEZnNi91Z1hVbFpEZ0lMTkh5Qk5qbmJLL0Z5eDd3dGtYSFM4R0o4M3Q1CnlyN016M3pIcGVjR3Y3akI1blVmRkhuZG4wMHJ2RmtBRm9mZE1HTklGbkRRWGQ3VmVJTGp5bWJZek1GcjQ0Q0d1dXBYWE1mcHo4WjQKVEFXcVVLSDlLWmZ0ZU15ZzR3Z0FpNENaSlFRa2lRQ2hsQVZXZzZ2UEV3QnU0blZTTTRBekpMaGY0Z0FQcEllZ3NjQlU4dEk4SUpHWgo5TzV2OHIxVStiOWRLK25yTHgzdDV1SjJmZi95bXlYLzhwdWM5VTBPSUxocm96b3U4VjRlSlJKSCtja2w3YXhYYW03d3NibXEweGpVCnNYTGl1UzQ0WHJ2VzRUeFhkenNBYUhMcVM1bU9JWjlaUTRWNStIZG1TcU05TG9NdzZRSkFFN2pMUlNnZUFRQkJPUUNqbEpjRGpaY1cKNWFHOHcvTXUzdUdINGFKM2ZlZGZmZ3VzVWhZSE9Ed21nR3dCbHpaUVhPMzB6SDVHeXNQcHhHQVVvOHEyRGNiVUttMGxKaUxlRE9GNgpKNGpCSkdBMVkxdTNOYlE2Mm1jOWk1dWJaeU5qZXhKY0J4bUl4MGE4d1plZGdjZ2lNcGIxOHVQZ1JsT3E4NzBhNmRXeEkxdmgvVkxXCjlJN3JSVDd2MHRCdUxsNndLVUFqOURiMFRDTERkQWdnVUxoa0U2ajJIdTg2Q0ZBQUF0VVRSR2FUbWRjaUJCUVVFdVlURFNTMTNrUWcKVlVLbWR1aFp4V2t6TVU5TXZOYWRDZ0NVL1dBQktHRjhNRWRHSEQybnE5T0lieUpGak1LWVpIQWI1a0NHai9QQ3ZETng1ZmJrLzNHdApwTy9aZzgwRkhmSUwzcTduMW5qTUpubEF3d3lFQVVvY1VFa3dJeGZMSmExYm1QalVCbjFHOTdLM0Q0SUJIR1EzNVhzNTJNUExjYlFpCnZIbWZ5dUtFTWpJeWpwSlNyMkV3TUhuR3NJbUkyWGdzaDc1aFhQUGp0MndRZEJiTXY0bEF4bXRMcFBjc21DR3M2NkdmeitudnZINjcKUGVyaUI1eUxFMnhlL3hGblhvMEVqRVlzb1BRQVIzazFtT1h3NUR3NnJtVkJoSzdDS3M3QmtSM0FScUN0cWJxN1Zmcm1zaWd3bHpJcwpDRHVmdWdCWGVBSW1sSk5lckdrQkFzUmlrODhicUFReWh0bE0rUWZIOUoxakkrYWFBZE5ad215ODQ2QXRaamxFVk04N2I3Z2t3T2FpCkZJano5NzFTNUhVZjdwaEx3WllEYzh0OElFc0FOTkJrUXRQTEVZa0xjM0RGNFpIS2VVSndJTlJHZ25BVmhVY1FrQU5CT1hHZEpFZ24KNzlyVFI3ZFlJRTUwak5jTnhXQVdwcVdURjU2RFdpT0Z4NktaamRGNTBEd052RnBZSnZxR2NYQWNmbzRpQUxiMFF4ZmRNRlRoNGhXSQpYL2N4MG1zSzZMQjRtZ0FRY041THhIQkdBaU9oUE1RS0RLTkJVVmwwdmlSMkFLazhwY2w0blNnZ0t5aHRZMjNIRVh6VlhCcDZQVmZtClU4cW42WC9NSzhwVXlzcTBTZFN1aUhsa2E4S1VkaGlXd0dhT1kwcDVwcEIzYmZFRTMrQ2o2ZzV3SkM5dGppbGgzUFhYaW56ZHhlMEcKdi9pWXphKzhRL0lMM2hHd0dqWjdLRThkbko3TDI5dm9iVzFZRUl2TTJiS0pNMlU0UGNhVFZwMjhLMzFkandFbHIwN2NaN3B1MW5XbAo5anV6K28zRVVCTDg1a1QzczdJUWh4Vmh1bUMrOGh3ZGxpTkNaU0ROQlFOcmJpMDJqM3JnNHNTbFoxMjg3T2FpWkRiNUJlK2lWdzRDClN2SkJ3MHpLRXorZnlqOWFYYWlXTFlNSEdRaE4wTVBBOFhDZXFqaExRcTdYTDNHUTFYTm5aR3pLNDJCRlJsT21DaUNiSWZkM3JZcTgKV0hVUWs1QzgrYXVaVURDMXRqYVBWMjU3cnE4M1VQa25obWJMZ3RYY3ZKL3l1OEp1dDl4MHZLdHIvSSt2RjRTUFNpMEFBQ0FBU1VSQgpWSG5reGF2ZFhGeGc4eXZ2Mm40Y1MzMTdKam1BQXVtdVdKd0FNSUp5cWw1bVRBTEFoRXNJUmdBZzdHM1dFNVZxUHA3WGtzQ2NRZUFnCkV3ZTNPakFoYmppWVdFeDVyV0wrb1ExK2dkRlc0NUpqWG9ITEc0R2o1a0V3a1pxM3JWalhKbEJPZXBEblJEOUJxRXlpZXZnbkMrL0wKbndUZW5tZHBHTmNGaFFnb3ZISkxRYW0wNGVYWFN0cUR6WVVSOHVzL1BuVzJnd1lBR1FaTkJRVkh6MUdBSXNSYXhORmhzczJMZzFFeApHdnBVZ3lCN0tmbTI3dkJVUWF5anliQzJVc0NoZnB1SE4yWWtBbDR3b1hLRHpzZm1CN0taUk40c2w5VmtqUnBWZThsd250c0ZDcHVvCmY4TWI4TklNV0lmMU9PQ1VSS2ZWUjFialUvc3FZZ1FRSGx2aGZGNzhFc0FwNSsrK2Zyczk0dUlFbklzSGJGNS81M1lUY3U4cXNYWHEKL09GWDkwb2UxRnJFQVIwUFpBQTBTbG9DUmlNNDUwYjBJSmJ5aGdjMjR3R0VGMUF3eGk5R3VIbURZN3hsbFgwbGNGY0RpMEgzT1lKZQpBbWFGbjdGSXlWNHpJUkNKWmp6dTRzc0ZMSVBpZlhCeXl2ZXUwYnR1TC85Y1hiMzRkOSt3QjVzVEgyNjdFLzV5UW1tc1p4NUY3bTFrCkdnT1ZDeGlPRW4zeE96QWwzK0F3Ry8zSmhsVExqSHJVSzVBczF4dkVCdncyRFE1a0tzdXNKV0c5S1dBNWFDNDVIcXRhRjlFSFpEajQKMjRlVllpOHU0Q3gxTWZmU3VPeGNQbGZMQ2NCdUtUQkZaV2JxekRjL1c5SlRMazZ2bE5kN0w4aVFmNlg4NVlRQk9qbHZaVkFlVEJ1bQpIMEQ2ME5KVFo2dlhPNWkyUWRkUnlwcHpITXh3M1lRRE5NRjFEeVFsYmk5YzE3UXpCVzFPZE95Y0QwNzZnT2VwL2NSYUh0SUcyaU5KCnF1ZFlEOVJYeXdxVmM0NTVHMFEvWXQ1SFhTR0p6Y1BYNCt2MjJzSDFlZkc5TnE2UGI3NzJZaG1XS2x3Y3pPYUY3NE9uMmZNeThYSGEKdm5Vem1qUVNzQjRVamhPSnVvNUE3SnBNamIwMDd3eW1sYktlZDRxWlRwcGMyNlduSW1NYjRCaFlUMjBYbWtQRWJLcVF5N09MVWJGRgpobFRxeTVTUEdOTEFiRWlvbkdoVHlwc2Z3d05YT00xalRTUkt1M1VtdU5kUm5nWEh2ZmFHMTdibitUM3JiOTFjZk96bW9nQ2IvTUkvCmJZUERlSmZLSVBhMEdmU2FnSm5GRzdyUDFTQ0djbW9ORkFCVHpTODFYeE9CeFlJSXVzc1RtblE0aUJJQW5PaDZramoxNFhtOWF3UXkKR0M4YUxGeXpDdlpzWWludkZRK3FCUFZMeTFmQkFxOGRMQ25ZeGFYTWVkeTBPVEFLcmpXWGQ2NThGUC9lNjBYZWM3M0l3eTR1N2ViQwpCNXZiUHVGODBnSEFJc01iM05Wb0JBQUMzdEloNk1CQTl6eFN5cjNOczNUWFFITVFzSjdVOGlvQWFPdW50cTNFQWUxcFBJNjJvelFKClI3OVI4V0FTZWVkSzhIVkFSY1VEcTNGWkQxd1gzTkFLbUJod0RDaGhtZ2R1QVFCNCtUaXZhVTlRUHJwbUwrOU1tWHpMdFpMMllIT3kKUW43aEI1M0pkWWtBZ3RsTVpDS0pZNjVnU0dUaU1QTVlhYUMzd1pES3Y1MEpmTWJjUXNaU2l0ZmpSQzExbUZJOUgvUnh2YTdIVmdZWQp1TmxKN3pHWjVET1N4SUNGN2ZNQWhPYk5DQXhLQlNvSVdOTEtsVGdFcEtXQTA0dWZBeHhtWEp5K0MvQ3MyYzFGRmk1c3NMbnRreUszCmZjcisvZTVOaUVDbEJBWWUwYXpGWlRYU0JpRHV6V2NrY0tETDFtenFnVXdTMjQ3RTJoQTF2WHptcy81Vnl0Sk9aSExzcWc3WVQwSVEKS2dNVkppTWFzT2tOUGdJZVYzOEJrQ2lBTVZDZW5vNnloRUhzd2pJTVFHWW5EOVhoMW5PRWZMMzBWMTRyOHZpTFI3dTVzTDFSdDMycQpmWE5GdlZtRm5scmtqbkRTRSt4eE01NGdURU5QMFVITm56YXpWQTkwZWM5RHhXVTN2K0hBNXVYODlUcURaZzdsTnltdkZ1M1YvWEk4ClZxb2NiNVJmZWFEdzlqcGVxdUp0TWw2ZjFQYjhXTHhIeUhFbVQ3S1BtSUdveG1XcWc3MW9DNDdudkZ5cGt4NjBNZC82N1BNNHVNNSsKdUtDWlRYN2hoK3RIdkRVcndITklqejQxVVpsRmVTdDNKdjI1T2cxcVJTTm9NOGxuTXQxemVxc0x2Z1VkdHJLT3JRRHJlTlVLNjB2TwpkYkZlMW1XcUprUnZmTVZhQk00RjdsL0FhQlQ3SVZaVDZ3cFdiUXNNU09INnZMaU82TXZwcG4yZDlWaGVuVDBXeGVVaVV5dTYxcTNYCmlqenU0bUEzRnk3WS9PcUhOMDlqK3oyNWNmczVBMCt6MllRRUEyNTAwdG1jWWczSTBWTnFuRjVXa0NxcktLWUpUZXJqVDMrYWMybHQKU3JybTdTN1JRcy9CMFlxa1hiKzB1VTRreExhUlJ5cmhkYk1HbHdweTJUS2Rta2V2ZTNMektBYm11Ym9kd0dIZHBUZjRROTJFUU1zRAptZ2dnZXRlY0F6K3V6N3NPN3lGUGZ2L0Y0d2EvWU1FbTMzWVhhRFZEQjJTRTBxSnowbWZ3aitHcmJkRDV1SHdGbHRFQ1RYZDkxRUFECmdtY1U4L24ybjR4Z1Z4a2FBZzBLc3NocVBKMEdnV1BPelozMWdrMERLcDRHUTZ4b3ZZREpzQnFoY3ZEUWNiMlVhcmM0OGFMYkVPME4KU0hUcUM4dnN3SUIyYmMvN3I5OXVuMzNoZTZZdVRMQzU3ZE1pYTdDWm5reEdVTmowcndoWXlwTUVRVmNOVUJhRW1RVmhtbVZHcVRLZgp3aFlTbUZ4b3JqRUlDZFNKSFpYWmp1N0U5by95aTJnUUJKT3dNaDAweGJKbEs4eGsyQ3ZsbWx1UXR3SUhnNHZub1hJbTNTbW1neXpICkFSWXpXQ05obDAwcXgwUFZZeHpkYSs2UWgrTWtTRGVBYzhORkFUWVg1TWV6OHZlL2Z3czQyN1BOdjF0VFNnZ0UrTnpSWU1LMDNJQkIKTVJHT3o5dFBGV3dDTHVEa1kvallsUHJ3bEplMzVGdFJIdmpBVmNKUGN1SUhyVmJ0QTFpYlFiWFNkYVZWeTVQd1kxaXJWdDZVT2ZUcgpTNk4vem0xSzBQNDAwblV4UGRNSHRDQ3QzSHVUeHZIU2psbW5ja0dKQWNyUnlucGdFS1Y3eHh6bnhRZGwwM2RkY01OVWhmWEhzeTVNCmI5UWI3akhTZm5ZWG1mVE9aenhUc0M3SmVvVlN6Wk9VTjhySm02Z05YbjdCdFZYazVVb0hUaDBIMjk5cjhpZHFNeklzWmlGWVJvQTkKTUNPUmFYMFVlMmlnbk5telZ5cHJqMC92MFNRbzQzbVFhbjFlWGNtL2h2ZlkzV3QyeW5FZGMrMmZ1MGJQUzJYeUo1SFhYZmpycFM0OApadk9pT3lULzZoMldtZVM4L1Z0SEliTnArVk0xcVpxSm8wd3h3M1p3eVVON3kyNkhKMzlrSzV0OGxwMHdnL0h5T0I4MW45SVVvMUg1ClZ4QkhUQVkvKzVrODFoSXdtelRxK0ZsbVErekdZelRNYWd5RGNjNEhZbjRlcXlsQUpKekdqTUpoTmdKQUpuQXVEbEJnbWdUeHUrWm4KWWJ2dVV6MVBmNmZ6amFNVEhpN0l6NExtWC8wNGVZdFMxUncyUUdNbTlrbk5rK3FzMlpMV3hOcTZYc2tBRnZRU0VGaFRxUU85UTByWApFUUFhRkgrTGpvTGxNOFdYeS9LaVNkWnBRSWVDejFhMHVsRW9MbkV3bTdoTzN2UDJ3Q0JRMDFITWh4aVJZVGwwQzNrQURwakdnckpUCnhoTjhlL205dkx2RTlhNGhUcjZsK1JlM0krbTREOXdnOHBsZkt4ZHF1TERNcUJkOVBPQ25iWjk0OGxyYXhtbHpwOCtyVTlscVBmcnoKRVFrL1A4RjFLVE1xMlh5MUhRZjYyb2w3NlhaYm0wdDVjdkZuOTNjUHJWTUtlcDRHZlcyY2pDZEp0OVBrUmZQUG1kUTN3R0JJeFh6aApTWG5PcERyejZKTHpHQUhvekNNS0p2elZ1QVdtbXJjdE1ZdmlMaGVYbnl2bmxlL2NtM3piaFcxS1hWRE1KdDkyZXZzUWxNZEo3M1BGClR6U1hmS2F6M1NNMWhid1Q0MGlLUVFsNWU2U3hJMk5HbGJkU0p1YlMyTTZXcFl5MlY2bzNKdEw2NU1RVmhsWXV5Zk5rT295QXpZMEsKTk9oOUdzQk1vUTIveHFjQUJpZjgwVFhMK2VDNHg4dHZSRS9VSU8xNGx0bjBKaEx5ZmVzd0MyWXNjMHdsYXBOWGQ3UlhhY25QKzhIcgpSVDU0ZzhoRExreDJjK0dBelZvVTNnakQ4Q0N5T0lDekRhbit5NUlVZzlTZ1FTSnhPYXJEZUtTbzA2a0dRTjNoWkQ3b1lCV1FTaDBBCmhzcGNRL1BLR1lDcW5hTDNkZERCTEdIajBSazB3MkJtbzB5b25sRHNEVnh5aFROUUtJOFNnSVFISm5EYkZKaTQ0QkRNbnduekw0am4KWno4SFN0NzlVUHNBWkJod0xsQ3d1WERNcURXcllZN0tKaE9rTmROajJHN21hM1ZrV25qbUQ1bzY5UnFlaVVRYm0wckttMFRwNlVCLwpGVkRsNlJ6WC9ZR05VOWRLMVA1eTcraDNLYlBLOFZoRkd3T0wyVHpQRk9ZQjA4d3psVEJ2bVFEb1djSXBpQ3VtbVdkZW9hbVdLSjliClQ4Zk1XbW8rQ2RWZjdnR3Y1UXFBSzcveHdqV2xMaGl3eVMvNjFQeVROZUNoUmMyc05CRFAyQzRiZ0lRQm1abk5BQmIxMm1ud1pnVkMKU1FPU0FSb0NJd011em1KUEEwajQrVkQ2bENpMFM5Kzc2ZVpIckNZOHB6UmNxRGtrYzBzMDhCUUFTTTZnbk5FK0lnQndOUlVDb0NIcgpjajJNOWNETk80N0t6b0ZNNzdldDg3L3BPZWQ1TkI0dFhCaG0xQnBvakZhRHg2bGpMa1dlL1Z4OVNpVjNMYU0wR2E0YnFMenhRSG5uCjdYcmJpMlJiUnlyWElmM0kvY3lFODN1TWJpUGdJcGIyK1ZDY0Vad0E0R3BjTWN2SS9GT2dJdmI3d2hJTUxHUTJicjRFYlV6dFd1czQKODhrSnVQZGVYUUpnRmFXcis0VnAwY3pqWU8rbDhYWG15ck9uYWE2TXRQdVkvMnk5WHVvSGJUODQ0ZUdDQUp2OG4rNXFON3RHOWdERwppMk5RMGtCVi9pNTFDdXRqSURyUUx1OEtKTjY4RzlCcWpHdmRYL01VZnMvRzB5d0VPbStObTF1N0JFQ0RrLzJxZG9Qc3BPUXI5ZUdTCkROQ3QrTzFjQjRnbkZMTnVrd2w4bklITlFHTHlvdUROOXlnU2gzdmcxZGxId0RRSEhwRXVrNzE2blB1MkRuOTJnOGlIYmhCNThJV2wKM1p4OHNIbkRvZk5xZ2lnRE9qVWhBQit4OGFrZFpPV0JFZ0FUOUY2VjhnY0FCdkRaQ1RXWjc2QjViUXdRMFVBb0hheldoWC9EaVFUaApLQmlQRlRFc0JNRjY3YXpaVFdVek1EaXFtZUVJdDJxdWpRQjRpYTBIZ2FhV1NRNHJTVlMvdDQ2S0FFc0VqcjNKZlBTOGp3bzB1QjltCjBwZm01WmRHdDExSjhsdWVJK25CLzFNdXBIRGl3U2EvNkM2bnQ1U0E1a2h5L2tvQzVEUHNodU9rSGh2QVNWZ0hEM2pIOUFEM2RodlUKb3dXaXF0Tmd1K0Z6RWFiRFloM0VWTXllV1l1MFhwdWc5eW93YzBBalVWbWgvQzVyNlcwT282bHNLZ0tMQUZBaVZxRUFDdEtRcEhZOQpWMDQ4cDhrQ29GSGxIWE5TN2VGQ1lUMXdyejk4ZzF4bzRlUUx4Ry9FUDFlU25HTWVMSnpIVlFlRHVscmV0ZmVxZXJBaWQ0Zm5vVXFVCmo4Umx1NFpyMEdYcTM1RUs2cWhycGtEOEZXOXpoR3dqZER0L080dUZkUTg0QmhKVUs0aElYS2FrUlkrZzFEbkFPcXBCTERDcGVHZk4KRmFiekpMK0IyczVDZGErTDlZVG8zaVp6OTJRbXZiWXYyV3UvOWNJU2lrODIyUHludTlzQVRnd201bWtzY0NNc0FLS2tBU09ySG9sNQplQ0I3Y1ozek9RK1hjam4zQUlLQXRySWFySXRuTElOM0NnRU1nYzhNQmpTUmhBQnBtQUdSVWpiN0lNRFhxV2xSdnNpVkhRemkrcGh6CkREUzd2S2NpZ0RKbHZVK2xjdDQwVTI4TSt2bHRQM1MrUitoTzRVU0RUZjVQcCswZFp0ZnFKblNmWnRCckJyOU9wMHpHc29icGVJQXcKRURCNmc5OWpOYVZlQmdJNk51RFJBNndESjg1clU5cldtMDg1eXpyNHZwZTAzaTFBaldlOWtISVVPVUNnNFRrdUFFYnVyUTNpYXpudgp2Wk4xV2crWWxqQ1czcnRNMVUrZ0dkYlpBYUpTVHcrVTE4Y1hFT0NjV00xbURUUVpQbWRPcWROZHp3MXd5dCtvOXJSaUUxRGZTYlpPCjNxOU5xczJaOXpFdDZiaTg5WGsyZWc3L0pxd1BBK2s3UlNOQ3JEVy9sMFR1MUdsZkRTdnlRRVZ1YTJmZ3UxdVVEMmN5QjJWNXhpKzIKWTZCekw0K3BiOGY5a2pMZTlTWHdJS215eWRZVnBadnl1djc4a1Jza3liK1VDeUdjWElINGpkdUIzVFE5QmdFTXVHcVo0azNlQlBrNgpRSk5zbWJ4WmhNbXVjTkh6WTJxNWdieFF4U3MxdGt3VlFNckE0eVVOem55ZmhNc1gyT2MyOWM2VUFMaTJ1WHE0YSs1bFhsbnpzTFk3CjBYV1NObzlZbFBVWWlRRWNSLzhSeWl0Y2pnZHBaNjZNQUlHYzB1cWRqWUFsT25iM0hmQXdMNExBOVMzMDI2TjRMdlBSRzBRKzhqS1IKQi93RmZwQW5McHhNc0huREtQa05xd1lJdVUzQWE0K0NKeWIwZ3ZVNHhTSHJCNjdDOUJtTHpSSE9meG1BTVNEd0ZDWXliTXNsWkRNOAp6Nlo0bUVaS0Y4Z250UWRYMDA2Uk9RU0VRZFdUNjIzUzdLWjQzZklHTzBhWVlWeStWVE5NMzZjUmE4SXF2UUhFWFhmK2l3TTg3SEVTCnlpL2kxSk44UmlSY1J5dWZFcjA4RXBIZ0hyZ1lac0g3T1M4VDVBblRIWUJWamUyWHlYLzRRNUllLzkvbHBJY1RDVGJqcjUzV2Q3d2UKWnNucWd5NDk4Sm1aaitLRjBqRzZKbFZ5V0U3VzgyeVVtY1ZiNlZUQWtHZzErRGFhRjJwdXkyVGh6a2czZ2dlZW1VOXpvSXBsWUhGNQp3NzZLOFpwSXBCZ2FtRldReVZzdHBtb3QrSUVzQmgxdm5rNkNQT3dTaDk5UjJqK0lCVEwrN1FBNHlWd0hYamdlNEloVGI0K3RSRUNnCkFJb21vL2JZREFOUFdJYnlmL1RDY0lPZlNMREpiOWdPU20yeVRIdlNNNVNoa1RGMmp1MVFwNWtESjFNZHpzY1JZREZsa1BIU0F3Q2sKellBdnJBSFl5T1lhbzJZbFNWOVBqYlR1VHdSdEI4MU1aWEtTcmxOWjJLbnBkeFYyYzlEWVRSVjMwVTA5Q2NCVmtDMWxBOEhYQlI2UApyUkF3OWViYjRLMVc4VFFSVUhUWmtpVjc5VVVna1NBaUJKdmt0azN2R2F5b1RzN2JxK09QZmxqazBmL0M2d2duSnB3NHNNbS9kbGpICmZtdzYrV0NTbldlMVc0allUSytTUk1CU0FnNXVJWE1KTkJ5b3BoMDNFeXNyZGtNemlnM3pvY3BNdXgxQVZRTy8xYi9sTjhXYlJZQlQKODJjTk1ORlc3Z0VMdXg3Z0pCcElXRmFTemlkUUg4ODlMT1hWVEdWSGIwc3RPYytDQXdHSm15OFFpRlYranhGQmhtNGMxdDJlYzM3bgpEMHM2NFdCejRsemY0NitWUllQdGdiVDNMdzR5ODdxc20vMmkzUkczMEIyT1BiekVlKzdxNUxqT2s1UFBkMk5uL01xZTY5YnV1YnlYCmJtdDM5OEgyYjI5dHRqSUg1OVFXNkRaL2srdlVOdjRMSHJNRm5BSC9LZ0t3SExNVmwvZG9RV2tBTnppNnFKV3Iybk9QMDFzZUIvVGcKcEFrTWJ0U1puTlhXYWlaRnVGRzVRV3pkM0s3VXlTUGU3K2w5Y3NLYmNEa2RmL1JseHo0K3p5U2NLR2FUMzVqclg3YmMzbjU4ZytUcQpyUzVHRmhsUmNNNEdHT2NGODRKRFNqNjdVYUc4SlRrUExsUVVjRThYczBMQXJCbGJUNjBmSS9mbURwVmorRnRYWm9TMGZjWjVPMFdiCkFJRllUeWJJenIwY1JNYnByeW1zQnNuREduanVrZlROM3lUcDFDY2t2K3UxSXNOcUlhc1JHMWQramtrWFlCdVJ1UVRpTnFWcDB3bWUKbzhjeWFzZHd4T1lvYjgzdnNSVVA0SGp2c2FFT3c4RzhYRDRvbTkvMUk1THVmM0s5VWljS2JMYXNSaXBZSkFhVDFJWkhGbURGbThBZQpwM0xrZ2NlMnZ0RHA1QVlvWHowNTB1SVRISmMyZ0RuVUJOWVNCdkl3RGFyVkRhU0VUREQ5aTd2TnJaNG8xR01JYVBPYVFhMDJOc1FXCmRLYTVOblhlVWhJWlQwbjYvQzhVK1lKSGkveC9MOXFDelFCL1RhSG9OWVAzbHhRUVhCaHdQQmJRQXh5NDE1eFd6U3dHRDNneG9FbUYKend5OFhBak03VDcyVEtNNUFYaEdsNGxBcGxzMzU1ME9QdmF5N1hiMXlRU2NFMk5HYlZqTkc3WGJXWC9vdXdSSVgvOUZoZHJ4ZUVxOQo4OHFqQ1d2K1I4UnhDMmJSMXJob1dpcVlRdVhjbUUrcEhwZXZDZG9QYnlWSVQ5djFXbVhkMXF5WmhMT01ENXE1NUs2ajJzNGF6aHZUCjZaVGs5U3ppUEpsTytVRFNHbVRXMjdwRmYrV3Zpd3lIYlR0WWdkNERaaEhPSk1abXNkbUY0REp3ZWM3bm1GWGV4d1FINkFjRDdxT04KemF6SXZjK1BPekNwcHJRMDhDeGlyeDJPYWNYZkMvSisyK0NVWGNkOTdPWG5ldWd1RGljTGJNb0ozc1NTWG1lRTRLdEZKcGFUd0M5RQp3R0pBd200NWlOY3phUjN3VVhWNzEvWjBtdFl6Y29MNU1naFMwMkxNck1BcTBvdmdXcWtBWFBrYW9ROHVlYzFtS3JnZ0lKMnF5eFcyCmFaZUo1TXNxMEd6Q1gveGJFNnRaYmNGbXZWOERUZ1VHUjU5SkRCWUlNS1RaZUoreVVHQkZ0d29ITFFLQSthTjYwcjRVeUlNMmVtK0UKVWwyNTcxNmVWTnZpdndnNXIxZDNCRWlPOWtSNThydC81SmhINnRIRGlRR2IxYStWR2NQNGNRZGZDTk9nZytDankyZUl0NXVPVi9XNQo0TlFaN0c1Ni9Dck5PQ2tQV1pNQ1RrODBEc0JERHRxM2xpdm9IRXpBVTlMYVhqT2RRWEkrQUtaVTByWkFrL05sa3I3bGEvVEQrcnd2CkZqazRyYzJwZ1YzZGdaZkpCUlVDb1dnZGxDY1d6eEZNVnhCRzVrTXNocGUxMWJxU1pod2VBT0VuVC9uNkhuQU1YcndITkZCbkFUbngKeTYwQjdxUUN6b2tBbTlXTDJaVzlQZGFnQVlDQU56YkJRekFnNG9FUzlFU2l5N215S1F0aXRtYzdQZHd3SU10d01oeTNQSTJOS0ZNSwpqdHVIMnljd3FudHJRbVhhZkcrWDlaNXRHYy9ra2Rxd25NdGsrRllDbW5WcnZ1NDd3SXlhVEtuS2FNUmhNQVE0eG1zRnBoTjZvenh3Cm9kdmRCanFCU1BUWVUvQUlGVGdnSUNTZkpYa2dJVVJ5eFFPYUFLUlUzVW5IcXpnQVAxYzBYck9iSHozN2cvUXNoQk1oRUs5ZVBFN1AKWlJJbU42SGNSWmh1cnp4UkxUUlBTekQveG8zMVF6ZHY4ZzZUSXhDVEVEbDVvcllEWDg4MHpnblBCU2IrRGRzL3N5dkZvd1dmNGxUWApIaDJoT0NueE9SZGszclJuQmVuVG5heHBvMGdlSjhGNHV0UGYrbmg3SHg3NUZTS1Ardk1pNzc2MTZUVUR6Qm9XTkoxR2JVYnhyR0lSCnk0YktUNGd3Mzc1VGdqZ1doMU83SGdMQm5OY0s2K08rQVB2a01ZK29uSnVQOG1MWmJodkFsVkxpN255NXlKWDJSWEUrdzNsbk51TWIKbFErbWlyNFpIMHJkSnhGbFp1a1FzeGpQOUJLVHB3eG1VNC9SWmVqVjZQSHVOQVRpYzlOZmZGTnFnRGF3M2pPWlBVbWJUbGF2R1pUcApoT2xXdndGUnVKcFEyK1AwbUllRnp5MnRBYWZPSElaNU41SDRXL2FWdllESjFCVnYvUzBwRmtCN2ZMVDhtTDFINGpDSmR0czlsdUU4CmJzOE1FMm9QTWlkWDFNYTJleEtDZDU1bzl2TVU5eWNuajkyY2QyYXpOcUgwM0JwcEFKR1k1WlFYVVFNUW5TcXdVQkpEZ25TUnR2NG4KRGpseEhSaGdZYWdDeGV3Y2w4c1BhaG5EVmx2aFJadXlaVE5Kc0xlMi9NN01Zd082Q1ZxWHNzbVQ4alJTTS95Qi83eGRsckJkZDdhTgpUM21VNFdtUGkyL1FrNzlINUJYUGIrdTZlQkVtejVsUmJLZWtqWklHK0FBOFkvK0FMS245UGoyWVlhL2lrcytVYWlYdC91aDZFdVVOCnJpWHQ0ZHYySkNlL3cyU2dEdE8yQmVuWkt6TmRhN3p6UnRHcjRNNS9PTy9NWnZXbWhzaSttMXMvZVc4TlN6V3hVa3VFVlV0T1FFRzQKWElwc2RTWFd1cSt5cXNGa3cxendHRmhNNUtHQ3Yybmx1OFYxbThRVm1SdXpZWWFqMHcvYTc4cVFobTd4aWUya3gzeFc5OW1sTmVDbwp0VkV3MytZQVJlUFIwV255Qm1nMmMxdGNqeEF2Y2NqVExhRS9KR2RZQ3NleG51Tm9JeWFlMkEyeUVpVW84M1dUQmFzSWFFcGRLay9TCjZSNlRHVkNyWkpZMDlZMHludDd6Zis4MkdJODVwSnh6UENhUE9SeitlcGJERjdmTEt5YVJHME9KZEJUTmJ6amV5NTluNmxJTnNQc2sKNm5wOC9ZU2FSV1ZtVzgwbXE3U2kxWlRqM0dZSXB4SGU5Q09VSFUzZXRHWWpVSzR1ZmhTWVhLZlNjeTFYdGFTYWIzdWVwaklIVC84aQpHWjcrSmJNZElQL1VsOUlFUG1RcHlFeWdmWlBHazVTT1UxYTBaOGludFo2RTM4dHg5NlFCR1hZRkR3NG4vNmtIbW1Gd3QzaWppVWpCCkIyWWkwR3NDZlVVZDYzbW1EaXZTNTlsaE1TcWRybm53K0R1alIzZE9RMG9wblZkbWMvckZXVUdGMG1LVVBlcXpsS0xETVB2Z1A4YlMKOHNmcG1iYjJFRUVUb0ZkWjhRcTF0aWJuRlcxZm1ka3duTWFJS2t1aVNZZFpiU1Z2K1JPK3ZoZXE2alpoK2xiN0VkQnJ0bTd3ZzBWQQpzd2tQLzByTmFCSWNWdytWMVhNU0FrbDF2dWx6eFRKWW80bHVNVHNNWGZlenh4eVFDZGw0ZGpKdVdWYW5YdVBCU25xeW9ibDJYNlBKCjZDME5XRlJHWUpyNnovamVIMXYySE05Qk9HK2F6ZWxmYjdPRmMzM0phSTFoQzl4dDBHdnR3Y0tQU2xlOG83dytjcEF1VFRQQ041UGgKTzlxamthRFYrdDhFWHFaaTNnMFRTMmwxWmJoZ1JtOVZHdHFLNytsdHV3WGQ5b2ZybW9ZelVBc25QYXFDMkxZZFJTbmFiSGxiVjd2Zgo3WTZ2LzF1em1xVWhQZUVmU2Y2ZFY4QmZzR1N2RTdDYnNrZnhtTW9rNTNNUFNwdFhiM1dIRmNEU2czb3VwUjlscDU3MlBQMXJhTGQyCnhtSUIrOUI1RVJENnJNWDNXZ2xNeWREdEtXVTA2OXFtbDJ2blQ5eTQrRmtlZHpodllETytDWVl1VWtUb2d3ZzladGhqNTRsZ0FaOUMKMHJteUtXdlprNjRUM0tVS1dBU0hlRE1IQUVSUWx1WmZsSlhRSnhNTEtTNXZBSlhLZW5JRm81S25BazY5ai9hVEYwMkVINmUycGlsZgpBYVRVMGg3eklGTStEQTk5dktTSGZaWGs5OTlpUVNZUWpPdVg4engzdUd6VEMrQW9Rc25nd1FLdkFxV3BmOVM5TjdqUmxFcTZIaldnCjIxNTFJMU1mWnVyRkVhaHdIbndKcWQrajA3TmdPelhJMUw3dzhSczNXL3FNcHl4L3BzY1V6b3NadFJhRlYyL2NIaHR6aDc1WlhwNUcKOXZKQ3ozRE5LWmo0eDJZU0N0Rllyekt0YW5uUC9kM2FWVWJGOWpyUWxtb0s2UWw1VXRjNUpUSngyRnpDZW5COUZOZVAxMm5MT3JnTgpzYW5WMHRJMUQ1TGhtZ2Z1OWtBZjl2Z05RR3kyYWphaDZUUTZJakxQRXJZbVZRTWx1dTNzdGxibWpmTlhEWlorcmdIckVTOC9VQnJQCkRHTEE4RURFZFcrVGpsT0FvN2FkeWlpZ3dmeldGRnZIcmQ3LzNOMmU1ekdGODhKc05xd0dYampDSnBEN1J4SmFaQ2JJRWVnZnVxNWsKMGh6RFNiZWhYaVpUR25PbklnaWo4YWQvVkMwRGJ4OThHMjJCQThYa1VsZjcySG43cldOak5wSTB1Nm1tRnpJSitsSmcvUnZqaVF6VgpVYkdjVTAvL0F2TTdaOFBqdmxma05UOWR6YVFtL0c1QkpJTStnK09qaWNmUUhHOVZlSWxJd0ZDTTI1clNtZFdvUWQ4enAraTJkZmVkCk1wS2M5bnZIbXNtMHZwRnNtbUQvMUhWNCtZdVpuajk1MDdMbmVNemh2RENiZTM1OU9pRG1VUUt6bUhwdTNraFM5MXlIZmhDYXBiRFkKNWpFZ2x6SFJXdzBYZ09iS3BQZ2NoR3hhYmE2WFlRRERBUFlpeUV4NHFVSmxMOHhVa2lNRVd4YWpqcWYxVWNNMUR6amFRLzNLNzNWRQoyd1krWmRPVC9YcWJzL1RCTUE5aU1hRmdHMHppVTR4aGp0RUViTVNOQjNjN3NpQ3h6S012REVjaXNXVXZXRmRtbHJPMkp2NzAvTE9iCmMrNzZ2dWMzR3RoMFo4SlFrdVVWYzJuVzRQSkRnNWFNK1ZLdkxMNVYyUUNETnpyR3BRWmplWEx0RmhkM2NZdG5LUzdnRWNxTU5iOTIKb1k5VUwyelY1VDJhOUdxUWJnVGlsYXJyWHM5OHBGejI5TS90M09tWjhCOGZSZTV1WHFhQVRJWW4rNGt0Vis2dnlVL2x5bmw1V0ZnVwo0L2hCS3VhQ3duS0pUMDYrRGhzeXJDTElwMWlXbU02bTNOZUNXZ3hkQTg4TEl6S3NxWTJ5ZTMzNWgrVjhoZlBpK3I3N04zS2RHYXhYCmFPdWdseXhZelFXRE05eG9nbUFpRnNMYURiQ0lsRUJiMGRkdTUweVJxVTVrUFluT1Jhb0dJOVVOcmxtTTRJSkxwZE5vNWlLSkdVeUMKdXZXM2Nuek5ScThJUHlPZ1dZZlArV3J0NGs0RUNQelhNSldiMjlGeGpBdThzWnlzUHVGQUxJZFpUY2c4OEZyTUpoYnFQQXA0Z3VzSgpnZ0xsRVVnZkVwaERxQU5TZnRZUkZjT1JWaDhzWlZpbmpaODR2K2JVT1FXYjFadG9RRllVYjBodFRDaGUzVjBwcFcrQ01TVldBOTQ4CnBLVHJja0FGWnhwalBXTUZMZ0NRYWtiQlExWjVkTG9HRlA5NFJLQWhrMnBrVVRscDRCbTdRS08zZzJ2dWYrWVArQ3YrT2ExNzhvQ2sKQnpqUlN1LzIwU3cxK0FZN3VNeWNsa2djTGdPZlB6RVJnVlBQZEFxQnlpc2JuNnRad1R4TEdJRE12T3lVK3h0TWJ3VkNTUTQvK09Obgovb3pQSUp4VGdmaXUzL0FseWpiZkpMdWlNWjl6WUVHNUJtYXZiajN0Qzd3Rjh1cDFBWUR3TzcwTlNCSzB6UXJFVWtHbk1UbGNmWXpVCjJCNFBkYll3enFuSkU0eU1WU3dHRTRYZ3VsMFZaaVZYK0d0QXVrNi8xek1lTWZmNDVzTm5QVUhrczU4ZzhzRlgrS1pVYUJxMSsrQ2EKV2dnd0t1OTBFTTJSVVVJeDNQSEtBRWljTG1raU5sN3dla0VaZ1hQdWRLWmV5SUFBTWtXWTMxc1l3N0lWT3dBQUlBQkpSRUZVRGRXSApjN1ZFOEQ2VmRIaVJmL0ltR1Q5NXN3ejNmWktjajNET3dPYndUU0tIYjU1dWJCYm84QzJrZWtOYmJNb2RrSm4yUGRFcHphV24ralVGClVHOUVKUEI1NWFSalZaa0tKTGtPZ3BLdU80OEZMUkhSbmFubUtwTUJoelkxRHp4UFJlY3hRRE1OcGxTWFpUYXRKMG5Ua3pZdi8ydXUKbElOcnJ1emNwUjNDR213K2RIT2cxZkJFUHRFYVRHa1FNbGk4YjJxZ2tsdThsazBXUklJQjdnTkgxbmtOMk16VXA5cEJnYThwUHRCNAp4ejJRWVlEQmRNNjMrdVJONXcxc3pwa1p0UVlhTktIRU5WdDR3TE1uaVRwaXNHRUhZN1BONjh6UlBCd3NPeXJ0aFUxQlNnTmJtNzFVCkc5bDJiUUtsUkNZVnR6VXlwVWlIOFQ0WDJwbFhJL1JwaXZYKzFOa0Ntblg0c3UramJ3Wm54NHdLVEtxQnpDWG5lZFZ0YUgwZzFsZEUKbVNsOUxZYnlZemZzMW1QcjVXVURvWmsyb0ZjVXpDZnh0QmcwdDlEVWFtWVdlbHRGNllFdC92UUhuM2YybnZXTzRaeUJ6YWQvSXl0dwpVYURqVHJ3RDdRT0NCWVVZdFBTWC9DaU50YUg2TmdnQUNmNllpZ1lUSDFTMklKR1V2dE1BUmlqUEJDcUN4M3hmdkVsOE5HbXdncE1qCkppdncyYTUvR3FmOTVjLzQ3TFA3c0wvMCs3VFlhejczaWNLeEJSN0RaaFFRNEdCRjhHRzl4VmtuMVFXZ09jM0dhWXRBdkFqbDdXZzgKU3NoRmNHT1JGeGh4S2dKeXUzWmhSQWd3Z2k4ckFLTU05Wi8rMFBrQm5IUGkrdjcwYjY2M3lWaWdxK0YzWlF6eGRMeVZOU0VxUTJFdQpmYjZTM01uanBlSHFaVERHd0JXK01XekE5VjFNRFR6WHE4UzNrLzZhNldOZDJrSXU5RGEzdVpsT0NLMXAwb1B1L1l3SHlSWFBlTWlTCnU3UmIrUFhQYm0wY1NLOVJlNmtQdXQ2M090aUN2T1VWT1owckM4Sk1FdFI1YTFEeEMvWm8zdUR6ZGt5cDl0S2lUa04xK1hwTFkwVVoKOHNJdlZkK3hRV0RXNWpqbVRhMytxWDMzKzZMM3k3a01hOWYzT2RGc1RyOVpheFFDeno3RDdVWWNLdmNJU3JyajNVWEszUDRtVk00aApZc1ZCNVUvK1ZZSTZkVWZRMXk0Q3NXRnNyTlZnbVVtRHlDcmZNSEVmdnkxYkJsVDBHdG44R1YwRlZKc0Mydzl4bmJybWZqdmVuSVhoCk01OG84cUdiT25OclN0dXpaWlQ4dTFpalVZTStVWDFVVnhjWUNLVE1OYjI4bnZoTDhUMHRoOXRTQUlycTg0QURBU2g3WllOeWxkVk0KMmRieHEwKzlRZzd1ODBRNWwrSFl6YWpUYnhZNWpTN3Yrb045ODBrd3ZmN1hONThNRktSVzB0ZGpyS2sxdDQ3SzVLZjRzZWc2bkhjYQozbXhTdGJvbTgya3lmOGJwdkIyRHpnUHU5clUzYXEzbDFQelR0c0w2YU4vYXZDMS82cHI3YkxaakNWLzhmOWs1TjBXZlNkTXpHakxwCk1taDZFV0R3SnlaVUdwaE54Ynd5THUwRldnMldFVXBiWW1ZSnR3L1NrSTBsTW9lb0hjMjE3V2czNk5LRzQxWU9QNGJ2bTFIcmJIZC8KNkNlT2NkVDc0ZGlaemFkK0U5NWMyZktFemR0M2VyZ3R6WGRCSVF2Q0VIQ1BPQ3hoT2lhUGZ4WE5RdncyTjVwYjhpV1ZvM29Pbkx3Qwo0T2UxdTM0cUE2aDBZelRsbmlIVEtaQWpHeFBxMk1LRG55VHlrQ2VKZlBoR3hXYjB6RnBucjVnSjNIT1YxbUV6SlozamFqbStmcVo2Clo5cm5NcHNXb1Q4SDRUQWI4ajRoRTlsMGUzV05CTTkxT2gvb0hLclBXRTRnbi9vOHk3Yk93MCsvUWc0LzlRbzVkUTdaemJHRHpUMXYKaG50ZmFDRE5wV25IMXFaT0pvOE9Pd05ORlBoQ2JraWd4YlNHb2p0Y3RaWHFzaWFSQnpwaTBvc2IyNlBiVzVPcThVQUJvT0gyNFpoWgoxMzNaTmZjK0czY3VEbXV3K2VpTjZqZWJodUIrNEhqcUR3SGdGRURkTXFQazFPM001eWszS1pwWGt5Q1RtMFp4NWFTMk1kbDBHdlE0Ck1PcjlTVFp2RllJNUw5U2xYbGowUWdzQjV4eUR6YkVLeEovOExaRlAvcWJ0NkxvQlRxTjJ1TVl1ZWFQQ1daL09YcUN0MUc0eDNubUwKQnpDcWMyOXdBQkpZZ1BnNzh0b3J0Y1lLZFpoV0xpbHJIUTArcWNCMHYyZGNKWi94OUxNd2EzZ201Tjk3b0dVc0lvNUc0c1hodWZPNQpDY2hUeC9jY29LbGpaRTBCNkdDWjNqeWRVcU9abjZQemxJSHZIZ05BYVlCaE5pUSs2K0UyZElDbTFIbjFZLzVFemtVNDlyVlJuL2l0ClpwTkhPb3MzajJhcHRpSmV2cDRXTTZQTmpGNVpTaCs5dEkyK1FuWFUrVFJOdDFrbDBSck1kTDZxdXM2azdVVDZEZWt6eFM1djJzM1cKdGIzUmN5Z2Z4NTBMb0ZtSGRNMFBOQkRBNVF2SVZNSTQzRHlHSVhVd3F5a092YjBDdHdSYURjVXRubGV6SUk5UVhEVzNFcVZOL1Q4QgowS2g2WU8xZTFRZGh1VXZWZFVUSHFYTlJaVDc5NFo4ODlqNVF3ckdaVVovNExUSnZwdnMxeDZNeXZVQzZlUjN6ZWFjUUxYTUlyaVZvCjZoRXIwbmxTVFdrbUViN1ZZRDM0Vkdhc0N5S0thUUF1MUhZRmVNT3h6VGNvRTZxeXRaU1VUck0rdXZMcFY1M0pYZHN0UE9iN1JkNysKWEJya1VJTVhIK1lwZzVNWmtHWUJrblQybU4xRVpoY2VweUNmdzNLNHZjeHFFbFdPZmNoaE8vV2MySWlvZm9YZzByb0ZtMXhvc3VOYwpyM3MrL1FkeXpNWjBEY2NHTm5mZmJqditKc0F6MjhTN21aYUhXWmtGcnVuWlMzelpUSDFIZ1Fsb0JGeC9wdktaNDEyUVNXQ1M2VitSClU0WU9ndHBCcGgvVTNPbjJQclRGQ3ZoYkxyL21DdjgrSFZkNDBKTkZQbkpUdS9jZUNNd0N3d3pvT1BuUnBjNTRnS3pJUFZmNVU1RHUKQVU2Tzg2VnRoN0JURy9SeDEwd2lJRUV6eVpoYWp2dTdIQmR3V29QTjZVLy9nVngyN3lmSWNZZGpNYVBXb3ZEZGI0N05FWUhqbW9abQpGSnBKYzBzU3FINjNESnRIUGJOcGNtR1B5aVRhNmlFbFBvT3J1OFcxV2IvRjFCcEY1MEZUeVRPbjJGektBVzFtMDJvbGJSdXJ5YVROCnByTGQ2NW9yNUlySFhIN3NIUXREK3NJZlVNOUxiY1VkTGhRdjRwZ2xYRDR3ZDRUM1RqOFF1ZzVEdFdwRHFSTVNsWHNjMG52bUZyeGsKQkV3ZVhaODJ2OHBpMlNZeDZLOEdWS0RCcnc2WXBURGFuTkpMWlpKODRzTS9mVnlQWG9WallUWjMzKzRRRm42OU9vRUpEcjRCK0szdApzWXVaNm5mUG03SnVqMmkyZ25GNG5yQkR3K1MrWXNpMHQ1RTF0V285NkEweDE4bndwb08vempuOU8wQk56UkcrM2M0NXExbUhCenhaCjVJRVR1M0ZaVERGVk9GNWdFS1BkM0pzbDNLbUQwa3IvVXF6SENMd0lLQmpuc0pvaUZYQWU0M20wZGFBZ2pGNUl4VXlJL1NBRFVpNEIKWTRaaFBxeC8yNGZ1dnVzUGJOdU9JUndMMk56eDIxbmZkREl0MUoyQWZzYjVoYkxPQmE3RFBsOXJSM241dmZYZVF1eEpnNE4yN1k1VApCdnhJV0I5a09CMndPUUd3QUVWSEIvZVk5Q3o5dHA3ZXJpNTd3Tk9PYWNid1RFZ1BmSXJrajRFcFZmWTh5SHRBWWdBaDB6bTB3Zk4yCkNSelRnR1E1UlFHVUIxaHVmSDhPanRWaTJ2TVdwYVVzQXhpQjg4WjZTdndVbDdHdklrTnUrZGJISC8vSVQ4dG5QT0NmeVhHR3MrNzYKdnZPM3M5ejUyenF1dkl6VU9ZQ0RnL20xVEU2K2V4d3JhaUREZW9ZT0ZtbzZFL0VnSTVwK09nN2dodGxTQllSU0RqOFNtbWZUdFJzZAoxMXRCcWJUOTJrMXJWb1o3bXpkL1c2dGE5aW5MQTU5MkgzblEwKzRiM016akQvbS9UMysxSWZyK1RMMTNYbnFLTzlFc3N3blM2bkZqCkpYNVpIekI4a0dHeDJnRUtLT3VCaFdFcVUxVkcwMUg5RG1ZSjg3VnFIN092SUFTZmh6NzZqK1M0d3JHNHZqLzIyN0JVQUFaVDVOckcKRzJxMjRrNmUxcyswTGRlRmlkc3Y5dUt5Qm1lSlF5S1hkY0xsQlcxRGphVmVXMG9iUUllQnBSQ3N5YkRtNDJzMjVUekJPYmpIMDNiWgp3ZnA0TlIwWEhXY2xXcXRwMm8yQU5pT095M3c0cjBDekR1blJuaHZjK3pLZjUwYkdZMCsvd2ZwbTBvMitNL1hEanVhRGJtdWpEYW40CjhtTUJhRno5eG40cW9tb3VZc3RabDNZQm4ra0xqYWpmU0luWEdnNU9sOGd3emFKc2QzNzAzeHpyOHorclp0UmR0MHVqYmpXZzFkam8KM1NhRW5DcWJvK3hidlRyQUc2VjNDUk1IYnhsRWZNeVBiRUlJS0xGaG95bzdtVWZUMjFON25xejdPMCttbDZiTGx2dTFhK2JxTWk4egphTTFMT1c5TnF2cys1cno5UGNJVzd2OWtQZWlsdzB6RUdieGtmbXozVzdkMDR2SWVBekhYbWRpUzBsWUsyYUh5ZUFHWDBReVVSblVRCjQ4bW1QTlp0elJ5Qmw2ODRMSVpaRTV0aldaSmhRZHEwRXJucnJsZktXZnl5a1FsbnRRZHVXUTNjUTNkVk43aGlIZlR3UUFJZjBCemcKWk5yYnl2MWFOQ1cxcVF3K2lpb1RTR1d4WUNWTy9RaEMySkZHUVJjN3JoN0h1N05sTXlVMlRjWjVVWHpRQWxnZlAvaHA1Mm8yUlNlcwp3V1l0Rm4vc1JoOWtETmdReU5EWTNlNXhBaHdrY1Y0enRhQWxLbkJSZ0FQWDRJcGR3R2w1VSsxVGJjQ2J2Rk1jbWpJSXBwcjllOW9PCm1rOU9QZ0FaQmg1Ui9XOGIvK2xQMzdJQm5DdXVlRHczOHF5RXM4eHNhSmppalExWnpMS3dwTGp1a0I1a2xHWnA1dVFCQTRNSjFtOUEKQnBrUnUrRWx3WG9xbittTXlIUmdaWGhVcnVSdVhxaThtYnlIUDcrQlRwYjdmZUZsSjRQWnJGdjBxQitRL0xvRllGUHVhVGlvYzh0SApMQ1J6ZG5aMUUyQmtyQUxBUVU4SzdJSE1qREJzempXd3RYTUVoRll2TTVjczJyUEUvWkU5VzJWcVJsTDkzUUd6dEdZM3Q1eDhzUG5vClMvVHFiaFBtS0VrSkhWUXBOOWdJeHZXaDZRUTBxUkJFaENkV1FmMVJNektEak1PQ2VDNkhvTEhFRk5yTSswZzF2K2MyUjNESzFMbmIKWVp2YWgvZm9QaWNFYURiaDZzQ1VFdS9ZbWprNnJROVlXY1U1Tnd6QXdnT1hiS3djQnBXWmN6TVZIazBwUGJ0WHNSb0NDOFZVSEZhagpnSWdZamdhbUhzUFpubi80by85T3JyNzZuOHB4aExNbUVHL0FCZ2NQRFM2Tm92SEdRcTQzT2MrSXZZRW9qR0l3MWpFNmRhazRxRU5QCjNOTjVlWUtmUGQ1T0JBelhSSmx2MWdpc2h5cHQweE1BaTNCOFdJLzFoTDdWOUtmbkRrRmcvcHh2UGJlVCtPWkMrdHg0a3A4V05aZUkKdmJTSlZGRjFPMmdkUVZrZ1haSzZ0aFdOYlZ5cjF6dEhRUmVPOGR2QjlacE5ESzduTk9HdUNNSThFWThuN05sME1YWFZ6OU5DbnJvVwpEOUkvL0xGL2V6elAvV3k0dmoveWtyd0JHMVV4N2VFRnY3eHhUcHo2eXd0WWRlSjhmcWdUKzQxWU54MTdqRWNjOHluWlBFMnZhVHlMCnpiVHlHMWpicVdCSkxBMUJlMHlaNnRTQzhOYlZyVnYxaUcrNWx6ejhXKzRWM0kzekYvS05EMUNkUkpzVCtLT2dpZDV4TkFsUE91bjEKM0MrYjNISXNRdmZNS3RIZUkvcU45Y1ZMQWk4eUZWZVhtV0UzZWpJZ3NSdGk5OTVjRzJSQmovbmMyODlxM3pocm53WDk5RnRnUURrVAo5TFpYQytLOVlNd2szenlLQWNXVzVScllkREptazdTT3BLZ3Fnd3psVVVEam1FNVMzaXlwdGFOMXZBWTRqUllqd05TUFNWVFRhNWhxCkx3T2tMWjdlR0FaeTVSY2U5TzcwZVF2cGtUOGcrZDNQaGVuNytNekt2Z01rQWJpWStoQXNYTURCNHpaWUUweTJLMGxWSStzQkRoWmcKa3d0TTVzejlhZzVJQXM4VHB3dUJqd1dlMWg2dmZNbjNxYnRlSmZlNTRxdk9hdmM0WTdENTlPMVpQblY3K1I2dUk1VHR3SnNxWGlVNwpBemtLYmg1SHcxR3NKR0F3NHJJUTBJb1VPRmhXSS9pMllLRVl6Q3pCRHFQQXFkQmNaRDdZNGRyNjdUTG5KNkZPVTJkWWJHUHUvd1VICmN0VUpCUnU1NmltUzA3OEt3RU43V0ZTNngxckNkTEVtRVNaeWNRQzV4Z0lZZEZyYmtvaUVsYWh2eUZCYkF5Q1JhcHJyeVgycUh3WGwKZXF4SUlvWTAvWWlSZ1VlU2ZPQmovMDRlOVZtL0xHY3puREhZL05udm9HSGpEUDNwQWNSL2JNNlczZ2xvWEx2TVhYQmcyRW92SGdHbApiTWxoUWlOY2YxU3pnSFY1a1RZcFVOZVJpTDFZNWpQaTJ5a1JHTkhmdGl5c1p2Mzl2cy85bHNzVzNNWHpGSzU4c3FTcm5pejU0L0QzCnA5VWduekdiVkp6b2pBQXVpY3R3L3Zvc0VvRUYzUmFhUlZ6N2FFcm04aHJJN0dBMzM2bzJZTUhwdmhsVjZwOWxSWlJIb0UveW41RXUKOStJVGQ5MHFuN3pyVlhMZnM4aHV6aGhzUHZVVy9ZMVBIeWlXLzRXRFRmbE1FYlkyYzE1dW9YNmIyREtjN3NWcjB5aWJCNFJzQi9PUApGSTk1QlVSZ3k2d2F3NmxDTVhhZWFXbUQ2b2hWdE43Kyt2WTk4RHhONUZzem0zUDZwOXgzRHcvL0FjbHZmbnFId1hqbUVEdzNkK2tBCm5CTjRhVkR3eW1xUXdKZFFBa0JLTUdqNW1PdG1iNUJpTGwyQVFZYkRqRVNEdytndFErZ3dwTUoyNmhxK0FLdytmdmV0Sndkc05LdHgKSG5qV2h3dnh4ckFNTEdlQkp2akdqSk0vdS9xTlppRVloMkl0ZHU1TVpaRGxJSkF3cTlFc0pXWTRLOHBiM29TcUh0QnQxdWxEQm5hVApSUDdjTjU1UTh3bEN1aExjNEZMdWJ6YklrQTNnK0pwTUY3VHd1VHRwb2U0aXVtOGswTzJpWXpFRDE3S0w3QTMyR1lEdzJFMWxTd1FrClhoM0M5VGw2RGg2Ly8yUC9YajdycW4rNHl5UHRoak42OVgzb2QwWjFvNFNPSmZFYlBONlc1TUZQYm01ZDBQMC8xVEp5WHNkZGpXdWUKTXFlWjh5eXI2YnZBNFhxbitxblBzczdKcGhWM09PYlpucmMveFlMcFpYOGF0clZydTIwaXA0Y2twOWQvN1hESzg1aHZQRUZ6YXpvaApQZXo3SjZCRmQ2MmV1bUJkMmVBaWwyVEtxRFZKQllTd0hxaXZEZHdFZ0o2Y1FWL2MxMUxiWVkvRnJtUHF1S0xiaEx2eTBraDYrb055CmZ3dTV1RVd0ZzJ2M3dmblR6bkN0c1g3UFJwUzdXN1VUOHIvdmpuOS8xcDcxa1h2a0o5OHlUZUtqdjVRZ2p1YVNIZDJZZzhkOEdJVGkKbzhZMC9McHpiUWZXeGF3TXowY3ZyMkl5MmRCYlpEYk1mZ1FYYW1JZTU3b2pVR00xZjJkaVp5TmRvN1JqbUV5b3ovejh4Unp5dklmaApvZDh2aCsvN2NjdEtISjJsdmNTSWpiZ3NKSmxqVTZHNkpyTWZPSytlVk0xNlV1MVQ3VmdMc3ByaGpJcUZKUFhzYzZ0WWRlU1IySFJqCkpab1JPWC96MUp5UGllT0VBTWF5bmp2dWZyVjh6bG5xSkVjR213OFdFNHI3QkFuQnZvYXpMQlFBR29NYUlvOFN4dkNBejZxc0ZaSVoKVlBoRFJLTzZadnNtc0FJYkJodzQ1endqL1k3UkJSamNKekt2bXFaVFRLZ3YrWVlMZzlXVXNBYWNFUUFuZXlCQ2gzV1FlNmFUV0UxRwpEZVl3SDNkbS9leTNqM3FhVkVDdThCRkFwdWc0eGpUcG1WWXFuelA0NFRlUGJ2a1dMeEFuMEcrd2pJVHRRQkJNY3VkZHQ4cWRkOThxClYxNyt1Tm5uT0JlTzFDdlhyR2E5dVlHZVZ6WUhjV0Iya3hjSXZ1WjRRcnZTVHhqSkpRSFRxV1ZzbTdWZW8vV1NMSm9sS1hDWkFSeG0KSlo3T2crWVdzNXZzQUZLRzlWV2Y4K2dMaTltc1EvcU1KMHRPUDA0dmRtSXFDVHZJTW5kMlJrOFI1Vk12U21kMXRuZU9UQWJiV1FlMgo2aE9KbnJ2SElCaGdURVBOdGVhQXBvQUZ0Mk9rL09LMG9iMWtOUnQ3OXgwL0oxL3lrRE1IbXlQTklQN0E3MmI1NE8rMnZ6WE5IMFZ6Ckx6VFhrSHJrdTYwNU1JQW9KZ1BCTWh1ZjhXQlpPeG1QdlFZYUlHb25XQUE0Q0M0ajVTbXNxUXMwTXdDMFhjb2djcytRNUo1QjVKNUoKejdtbjZFSlRlbHZPVUpaT1RPVkY1TnYvd3ZiM2Zza2p0dHU1Q0lkdmY2YmtqOS9jWnpjdWk2R1BWZEdnRi9ZVVVWa0xIcTJPSmc4awoyd3pRWmRyMWRDLzNtTXhvNGpsUHpIQ1FQZW41T05aVUV6cm5hNGx6SGFGOFdQWnJIdkdhTStvRjZ4bkVSd0tiMi83dXFsVlM3K3pSCndhYmNucWdobHZGTSs2UmptQVZsSnhYZmFKYng5T0tTTVlFRWp2a05GUjQ3SU5NRG45RTU5d0NueEI5VzhYZ05NZzFzVGs5cHE3cmYKNWlrQWc2SzFFc2luL1JjL1F1UkxINUhrYnorNTh5RFBJT1JQM0N5bjMvNU1uMjE0ZW8zb1RvR0R2aVNpYU90Sk5pTGFURTZxRGdmZwp3R3p6UUtZeUUySVd5QmdpWmxKTTh0ekphOEFtQUsyU2IvU3V3NU5SYVg1TkJGQ1B2T3AvbDgrOTZudU8vSUNQQkRaLytydWpmQUJaCkRSeEZnQUxFZzBKN0Y3akpIWmUyT0J6SU00ZmFudjY4TFpWQjVzRmwyendadmVSZmd3Z0xndzZReklCTG5qeFNuTDk0d2pJQkFJUE8KQm1BbUVEa2NwQzdZTEI2cXhtb0V2Z1FJQzBXbk5MNEc3Ny9zNFNKZjlvZ2tmL2RKbllkemhIRFA2ejV6ZXU3TmJHMTlvYVBCY0p3RApDSW5yNEhwZGtFazJDdGlRNmtmTXFCQ0FDQlRhYzBjWE9BNTJ5M2hXRlNqWUJQS0Fpd0NqdzVCRWJGcFU1MTk4eEsxSGZyYkgvaGN4CjkyRWY5bUVmS3VEc3lteis4TGtyK2NSYnNtczJkWmxORU5kbkxyMDAzMjdMdkhmMG5NZ0ZIZ25BVXVOaTdjWlNaaXNFODFJRnpXNlMKWVN2R0c5WHhWSTNBV2c3Um5CcWErVlRtNnlDektXbG9UaGxtUSt3R3IvL25IeUh5NVE5UDhsMW40ZS9Ucno3d1BGbjk2Zk5DYnhScQpaTTJzYW5reXNaTTJEd1pqUFZQTU04MGNoaU9GUWFIQzJOZHNKR0lmMkRjY3MwY2QwL29sOGVwRDVwUzJzL0JqNzVlTzd3blBlUHlvCnE3NWJIbjFFVTJwbk0yb05NbTkvcnFQWFRIZDBGN0JaRWt6RHdKUEVRVk5hZG9zSDN3N213YzhnSXNYRmllazl3R0hQQXBoQ0FCU0MKNjJNZ1BhYzJleGdCWjJWTUt0K1VZcUE1UFdnZHBwbE5TUTRCZVBBNmFGSkZwaFNiYytVM2Y5Y1RrL3k5TXdTZHUyLzdyT0FUbmhwZwpzZ0VJQnFBR0JGVWlObTlIaXBqcThVREpmTjZ6bWtnRVBzNkN5MUVZZU95QU56b0ovL0hEbnBDc3lpeDByeFA0K0dDaisvdjlMLzlLCmVmeERuci9vT1hMWUdXeldRUFB4dHpCK0x3ZWQzVnJuTVJ2TlVGUkswcm5hWUhmKzBCelZyd0dnMVpmcFdzMlRaQUhIZEtoQXMxRlQKMUVtYjRXVUttUVRiRmZ4T0h2Z28vcDVHOFJjQURNR21nTkFoNmpZZG5XYk9GWS8zNGU4L0tjbDNIL0d2dVI1KzRDZms4RVBQYTBnUApnMXFBUFNndmt1b0RkdUJicVVhekVmdnBDU1VXUWIwWm5wMEZGUU9DMGhoclQyc1pEUVBSQU1BNnlqaTFoaWNISWpBMUhjZ0hHT3lICnZaWG1YUDZySC9KOGVlRGxqMTMyTU5VdDNSRnNYdjFkaHlHWXBPRDRxS0VMTk8yNVEwbzdabGJEQUtKcmpOa04xNWVSa1NDZzFJSEcKY3h3MEk4SHk0a3p3V3hHalFIWlRYZHVRQndjNmVxRld5VElhWkM0c0RxdDhERElScXpHVENtMzZ6LzB2U2I3eVlidDFnUEdUTjhzOQo3L3kyTHBQUnE1NmJBQ3VRdjVaUHdGVlNYTWJtYWVmbGVTZUg0YmhBT05Wbm1VYWFlcVFlMkQ1endhVUlQdFBBTm1CZUg5dzY3dmFaCjFlTFl2alhRUFBFaHV5OWgyT25qV2UvN3ZWSGQyQnJDbGQ1bkZqSmVvQnc1aUJZQkRYSWdiM0tkY0RrR0djZnJWUEpHTTRWell2ZWwKWmpac09qRVlyU0N2NSs2MkFGRGVqTG5PbXhuNXVyQ0dhMU9uOXhaVnJtWG5kM2tiZ3lvOXJYWDZkLytXYk1EbUY3NTllVmNZN3ZzawpTZmQ5c3F3K2RiT2oxelJXb3dkMmVRbjVtb2tQSUZCZkxScVpacmo0RXE1TjVwczNzWTlady9vZlpBL2VaRHZqOGc2MGw5b2Y2VG9qCjFlY0J5WmgwdTczNnZmWjk4TzdYTG4rWS9HeVhabnp2N3pWM3QrcGc1UzBMMjBoNXNsT3V0N1dCMGY0NEhRN3dFYlk2TUJMVCtteksKcWNHTm03ZndVcHpCVFVEVFl3REsvSEhZQ2NhdEtFMnhFTm9qMEl3MVRadDFvd002cWxPbVBwaVlrT0JaUTFvZjZMZHRldFY3UlA3OApUNHZjK3A3bG5mS3loL3lmeWx6eEYwYTJORnljdUFWejJpU3BlUHhqYmU2aXhmcGRYcW1MSTBzZEk4WXJzMFV2Ymx5cFB5aFlRRDZwClB3dzNtazNxdDZSSFNmU05haSsvL3Y0MGw3ZmxwTlVMNWR0WW9IeEswMm54dDkvNUg1Yy9UQWlMektnMTBLeTNybGJUaTgrZHpFNUEKVnFLT092TnVGUGhSRGQ2YjJCczR2b2ZKTTZ2Z0RXSW02MWxUYWtUUXF6YTh2c2JLRVdSWlhDNWVDVXhYUU9XdEpFK2xnN0VwNVFNZgo2MFN1UUl4dFk1MHBNalZGNUhFUEUvbkZiMXZXQno3NTVvY0JTN0tNcFQwNy9Xa0hMeTQ1WmhmMkQ4ZGRwZGhQcG5LdExHcEtkdDVOCm03UGxlNEZHQkUySUUyblBmUmZXTVRySGd1VVN2SENJK1FqVno5ZG1mZWZiSDM1ejhPVDhzSGlleloxdnpZM0J6TEFTOGVKbnlsV2EKWDdmMm9haXFUd1NNQ1FkakxwUGZGRHR5Z0FOWmpEZXd2R1AyME5DQXcwRTRLakhXMTF5cVZrSUNjTWlBOEs4dVNQTStJUk55bVJpVwpJYjNIQTlYeXU0U2ZKWm13WEZaVWZSWm8xdHNyM3l2eWQxOGk4cXIzenZlNXl4NzhmWlZsdExvYmcybC9pUUFIQ2NVaDQxRi91YUFNCjFNYU0xSitpQllZeVloNTQreVB6UVJHNGZNS2hmaXJFWVJZWjZ0V2ZpOURISGpzcFRPYVEvcUlHNWxzQk14bXhUUTZUUWhaVC9qTEgKeW0ydlBqNktPVFhMYk5aQWMvdS9XcW00a05FNE5TM1JjL2d2Sm1nNmJvK3hFYnF6Nnc5cGVjd0Y0ejB0cDhkc1NqNWxRNXZCYWpVWgpKWnlXamtrQWhYcU5FbU9ud1ZhRllXTk9XWmFqeE4rVVZGa0ZkQUhEeWR3RzhKUjViR1kwdjlNSEc0SGYvSUp2RTNuOFEvdjk0czdiCkgxNGZ0bnAyTE5LcUR1bDRxMGl6eWZXUUdJK3EyOWFUM1h5dEhtUmdMT3dLTXBMQURXNlpqSTczbUF1eUZ0WnNrQ1ZsMVNadVcwc1QKdW5iR2V3SFhmdkRsajVXLzlKQ2Y2VDlBZGJzV01KczEyTXl4R1dZTnlyUndOQjI5MVQ4SFlOaVQwQTFCYllaMUcrUEZ3WnZzZUc5dwpvSGdNSmpwZUpmMWJJODJHM2RXbVhoejRDZXFBclFBRmdzc2htVTdjZHMybWtycXVBU2xpVkQzV0tQQU1oSjZQcStrNE5qY08xdTk0CnlaYnA5TUxsYTNaRDdLWDhyU1gxdDZYcWdJT1BhQWtkMDkvaVV1SXQ2RDZvMDR4SnY5VkhsWTkwRC9qN1hzdzBJcjNFWXp6bGQ1WTYKbUdXTWh0R2t5bnBYcE5sWWxoU3pKV1E0Tm84WTV2UCt1MThySDlpUjNjeUN6Wi84L2hnQ0FMOFZHSGpDdExwWklCdjUyQkdJK1RyagpwTk1ZNERHaXNUYURWalJRSXhOS0FWelNaZ2tERHI3UjJYU3FKZzJKdURZZmFTRElPdGhMUlF5bC9kNFV0c25vVjh6U2FPOCt2OUJyCjVjMFo4Y3YrYnk4UnVhVURPQWYzZVNLWkhNd2NHK2dJbWtIcVRlK1lTV1Z3WTUxMTRBN1dkQ0NSV0FGQjdRL0pERTQxWU92Y0pnc0sKSzlvT2xmQXJCaERhYzI4Z3QxSnBXSzlqVWhHQWVLSnpCRkNZOXFkM3YyNHgwTWljR2JVR212VldNeE42ekFuRW1jcGs1MGhWNlFCVQpWRUlQaEt6S1p5cmp4WTg0NElLNU1mNnhOaEZHbFNlcFFXaEF3L242WHA2QVJFVG5IOG5jQ2lmZE9lWk94SW84QnVZdFZWQ2c1V2hVCmlrRWFrOHAzN2ZNNTN2dGZmYWJJVndjbTFjZi81Ry9JNlUvZFVqdFduZzR5bUVhYVRXblJWdmNkZG4zcjh2cERhZFpObnFHT3h1UWkKRnpLeEx0ZTBzbVZHeUZmNmhFQmNBVDAwdVVxK09YT3NsNmI2ZjFCV3pHOUk4cDBQZjVuLzRDak1tbEh2L3YyUmJneDFHa2MwNW55agpTWFArVEcrUHVUalhWSUtzNlBMS2pQTGl3UlN5WXVxY09kWE1rcFUzQUwyQjdHZ2h1Wk9uQUVVNzlnSEQwNFdhS1psVVh1KzNhSURvCk1SVWJiNEFtQW1ybkpTSFlSNmE4Lyt2dnhBem4zZy84UHpUUW0rLzRsbjZCYkVSQWVCVmdPTmgzMmh1N3NoOWdCVVV2VTRKdVlRVHcKWjQ5OTVvR21EVElaejZ3QkpsS0U1U1J3VEh0ajZ2aW1Wbnc4bDJaL1U0Yjd4YTcyMTl6NVM0dkFSbnJNNW82M1pubkRqMitGNGFVdQpicC9GbExUc3hudHg2anlhdktmUy9GbkNxa3hIOFBYZXRqWnZjMlVpa3hBbkQ0SUo1b3UrSzF6MlZVQ0ZSWmtlazNGMUlHQkUzcWNqCklrWTB0MHhCL1Jaa05RNjdNUk1HQTFiRDUrVyt2K09mT0oxai9WYzgzdmFvMmhleXcxejR2RDNiWk1xMS9DZ0Fiek9OSmJNelgwaWsKdWJmeGpaL2d2UFVmTGNTT25FNXNJYXU1VW0yQWk4TWtzRDdNdHd1VEdaMzZra2xyNldMSzZ2anZlZmdOL29PRDBHVTJmL3pTMVNUZQo1bWxtclA3ai9mcWg2dk1DSy9vL1d5NWlMUkZyUWphQzJrdXZNeHYyd2dObkNiTmhzd0lHbkJGcm5VR2JwemRWRDJqUWxER3JyMW5uCmNlb3ZiMksxQkNFQ0dtWTQwVE1oTTlCbHNaNmJmQVpveXBqbWNuL3pkLzIrZUo4SC9uUDRTd3FpWGRxbDgzZGMyaTZycU04VUdFN1YKY0RndmFpTmF0emhFRFNTeGkxbk1jV1U2MEw1REdWeTl4R05PVFJ5MmJJVkYzSlZUTG1JOHd4ZzNBQUFnQUVsRVFWUTFUZCt4NlVhUQpCa2ExM3Q2M1VMdHhtYzJhMWJ6K2VZZnpqQ1lMZlRKTFY4VVZKeWUrcDlOd1hPUUpFUWNFaFFlRzAvbkZHUXhDNTAwWXRHOTJQSmZhCjZYMmRBOTNsUmlCV2RWcDIxR01mamU2M3RoaVBsUU9ZTHFETnNCc1BnRWJuOXhtd2NaWTJST2xQZUtqSWk1OWgrOEFIMy81NVZsTWgKVGFROWV6c1pUWGRFejIzZGVxZ3FSMnpLVEhTYmZrZHkwcGhCWU50WWw5SE1RVHBzcEoyUGhubm9jaXVIbVdTbm5yNXVFK3RNcFUyZgpjL2xYeURNZjhwUDJvYWxiSGpDYmo3MHQwNFYxME15QldBK3dFbDdLWUZoTFQ2ZEJEUUc5TU5qSkkzYkRGSi9aQ3RUbERueWxweVJiCkx3OTRYbjVBckNKMFZSdldrbHlRTUhxSzBvbTBqb1Q2a0xtSEJ0am8zZ2pkVCsvNWVLRFRBZTRHRGdIUVVQb3IzaXZ5azYreWZYTEQKYmtTVXkxdnJMcUxkMTZDeElNdXhrOXNFWE5tb3VUVE5wdDBYMWxqYThTR3hqVU82Um1NeExhL25sZks4VStoUldoSFFlR3hsUmRmdgp1Yyt6S2I5T0c0Z2xDYlZONS8rVGhjekdYWWo1cnQrM1dvMTVPMHdCSitGNUlTcG5RTXpwb0diaW5xUEhaQ3F2T20rZ3pmQ0E4TjYwCjBjQXdtZ1hvTlVxb05jd0dCaW16aWc2RGNFMjZtYlM4TUI4RFQzM2dNeXhRVEJ4N2hJTDdHcHp6OC96SlYyNFp6aFBoRHhiZDY5NWYKVFgvOFRlcXg3aGRhTzJsMWE0WXpPcCtJYUgzTUx6ZFNIbjdUWS81eWpJd1ZXVU5qdzM0YXg0OG1IektiVkk4eG51dVFtWFNQK2RpWApncC9uRCs1OGdUemh5cjhqdldDWXpidGVPblpaQndjdlR5OC92amtWODZGeTZrM0xiQVhmckNtcnREclFIRzNHNi9DUnBsUGZSc1NBCjJQeGdZUEFHbHRGN09pWkxZVUxSbWllMWJnbm4vRGpta21GQ0JOd2lBQ3lCK2RRRmlpaHVJZEN3K0k5QTlxK0ozYXpCWmdNNGxXbmEKNVFycWJXOG16NGxpTi93MmI4L2IxelZXVHA1TWVUSXdpOUZvSUFKMTJXdjdMRVpVZmFPakdmWG40N0JlNDZkN2JmVE9lZEVtQXM5TgpkL3hLRjJqRUE1dVB2bTJzeDJnTzFUZ0hUT1lBQnp0YkQyQ0VPMllFZWhUdm1VQUlNbU5RanVzT3hWRHZXSmxpb0prNEFNUFhZTVlUCk1Sd0dKZ1VLRE1ZTzRKbjd5ZTJtOHJPL25lOFR2ckZuN3EwSE5OeE9nWHhyYytvVjc5Tjk4MzczLzE0QUVoemdNUGhoa2wzdEd5UW8Kcy9sUUp1ZGxNOUFjb0ZLRHp3SkJNN0gwcW0wdDJESW94V0RCcGxVNVBuVE5IMjNxYUlGWUNPUzRMSXZJTWVoRWVXNjZzdzg0eW94YQphelVmZTJ0V0dSSjBEbzVmSjR3ZEV5b0ttZUx4UENjYmo1MlQ0L2tOaVIyYjQ4VHAxUEhnQ3I0N1EwQlJ4VEtvM3dKTzAxVkdhUzV1CkRTUXBCQjRHcGpLWUZMaEc1dGhDNWpIeWJ5UVFjczI4aGNEQzVxd1I3OFVIbjIvL1haSDMvcVBXSHk2LzkxZlhlOVdlYmZUSDRlZ1AKL1pNWmhhN3ZNRTMxQXlzU3F6YkFNZmFMVE5kdllHZlRyS25reDQvR3ZObUNSVGJsN1RtM3BlUlp1Yi9kMXNIM0FJLy8rSzdYeTVPdgpsREFvWnZQT3RidmJOTXpwR0RTQWhlTjMzV2JNS2RlRUVxbnJxbkpGMldBQU9ZUElNNXRheDlQZkJtYXgxcHBiVU8rTWlXUzBuZzdECm1kdmpZTFlnMkRHbkFxWlc2aFY0dHB4SFAzdnV0UE5BNDRyREVjc1JrWjhnYytySyszOXZIWEQ0Qi9LYjRLa0h2QktDY1lMZVpJWm0KWWdhcnlRMXRseUpZOTdITGFpai9TZ25DZ1J1K3c2ajhhNktwdGYyZWRJOXhlSUx6U3BYM3pDUy9UVDBYK3J2dXZrMysrTzdYTHdPYgpqN3pOZnE4M1U0RWpnWW5YSWRFN05aT3ZGNitBZ25VVHIrTTdES1VOZHMxQVBQRGl1QWg4REFPSjhub21FcHpqeDg3YlBrR2JOUUF2CkFTbnpHNFR1Vys4ZU9pK0M0d0thOVl2a2ViZUszQXptMU5YMy95ZjFudm9tVkFxMEZ4aElpUWN6RGM2a05SOWZNeUhBcVV0RXJJN2kKZ3dTRGdEYlBEdDE4dW53TVdCNDRXWUQwTlJ3N242Yjk5cDU1dFQyKzRZNFh6b1BOTy83enVEMUFsakVIQnM0bTJOR2liYTZUTzljdApIWk05RDNVQ0YxSmJyOTNFVkJobzJvUXhmN0I0ZzlaOExzTFJiTUpadk9vNHFUaStubG0zRkpsWUJGb2grRHJBSTFTWEFRdHpIUC9aCm1qbWdFWXJqRnh0ZWJ4MmVSK3ptNmdmOEU1b2pnck52cmJreFRnRHQ2eTRBV0RpVndBQkxlMDZabnRuS2dKc1BLb2VlUzd3RFFHckMKWUFCS1ZnZnk4M0orVDlmeFFhbjludXlDak5hVDNubjNiU0hZVk0zbUhTOWRtY1E2Q2UrSXVreWl6b1ZwOVRpWTFNY2RqK040QUpRMwpmc21GbmI2Y2o2enRBRXRRQTlQVFg4eGd0SCtPMXdPbTNOa3pXQ0FBTC8zekxSVTBaclNia0xrd3V4THZIdWw3TTRLWjZUMWI4MHk5CnVnbG9WTCtndEp0SktMNzNGWStYVVg0V2dDeldVL1MzY1BUQ3pQcUNTbGFEMFMrMEZtL3lKSDJPSUJlN2xYM05adVZvS2FLWWE3cysKQXFsdHB3QVkyelRNUDdydHNmY0w4NnBuRGRjcFphNjc4NFh5MUN2L3R1a2JHMmJ6MGJmcEdiaTZNakVOamRJNDM5akx1NFExZVhwTApFSi9ob1kvaTZ5NDZMUmx6UkExK0h0UUJzekNzSlRDaHVzekdaVTJXZlJRVHdBQ042RHk2Yzh5WVVaRnBPV1B5bU9ma21WVUVLdUxFCnFYMm5UendQL3ZMckdteXV1T0x4elhSaUV3STlRV3J4SXBzQnpsZjJvSTk0Yi9ocTNrd3N5SHFaSWlaaGo5bHNHbDNtb2MyZFF6aG0KYjFaa2xtbjI1TFZCM3hka01IYnlJZGRsemJmL2VjZXZHcUNwWVBOSHdHb2ljQ2xoRE9MMW02RURPRHVDekZ3OGQ5QTZVSXRwUkdaVwpUbmJBZDBHREFLMVNjbUVRc0NCaXpCa3l0eEE4c25OdFUzZGdRbUY5TGhBNUFHUGFIQUVObTJ1Qmw4NTlFVVhQTUFJYUwzN2EveXY2Ck05TVB1djgvcm9CZTNkakJ0MlVZQk9vQWhieVJPVElTTU9SeW5jQ1Y3Ym00L2JhMG1iNzZPbXhhSlFNNHF3QmdMSmo2NWwvUHhlM04KYk9hMnIwUk0zU01BNDNwN2gyTk9iY0RtSTIvWEg3RmlFREZ2dUU2OFlLZWFOSmJSK1FxZkJ5S2hZQnpFczBEcXNTQnZFSm8zY29vSAptdFZCa2luUHVva0hNSzVYcW1jT2Vld0ttSkxSZ3ZnM092ckxZdUFLd2NMYTB6MGdpUmlONlRNQjBKUXlKZjBtTUtmdWM4Vlh1U0RpCnZYMHQ4MEhBMElOY013NGM3RklaVTJNcDNtRDNBTTRISEU5ejBRTzZwY1ZhalFWTXE4MVlRUEkwR1k3ejI2ZC9td3RLV2VSLzNQRWkKQ3paLzlKOUg5VkI3ays2Nm9pOXMzandLdzNCNkRJWkJhRUc1a2V0aEFQSFlENVZ6MllsbnlnU0ROd2RwckwxMFRTa0hHRDBOQ0FFbgpBaGJ2dXQ1OVpyM0lldzdJREJrSVhXRHFmSkJNZ1ZFRU5NbHFkVDlPN09iQlYvL2pxZjJlT1NYYU5Fb3k0NmtLZ0FHK0tXTk5CczB1CkRwMkJpV0RSRTNrUDZaenJ4blBMcExTNUZRR01CYVZFOTh2L2ZUNTRUbkZaWUV2YlRaSzgvYTdiNUkrSTNaejZNTTRZSmlUaVAwdksKNlhPQjg2dk81a3plazVrT0tOQnBKZXJFZ1diZ3BrZGFRMkJHS0ZQTTI2djhUVnNKQjNUU0N5OVYvbEovQUJ3UmdER0lodkhBcEF6bwp6TjBMb1VtZURyRHd1UUdhYVBJbWxjYzhONUpRL0psWC8wTjUveDMvZnFwYmk3SXMzR0lZYTV5ZEhOZk85VWZFTlVqNm92RUkxMXF5CjNpbkR3R1ZoZStTMnFCZEFWSjkzcnVzZWhYOVRtaFpSNjk5cGZrTnVjZVAweUVmNi9YeC8vdkN1TjhpakwvK3lXdC93a2JmWjd3Q0wKS2pnZkgyMm13eUg3WWZDQmZHaEdxUGdPa0hqblFyL0ZFMU43UUtNSDZqS2djZGtPbTBuVFpwZ0ovRzdiMW1TWUN3T1BNRmg0cGhHWgpqUUp0eCtjd3F2cy84NmxQTW1YTmMrYytGVHgvRVF0TVFzZXMzYXdCUnpFU01KSDZER2JHM0VtUnFhUTNkR2xIYm1VcjFtN1BMUk5DCjl6Z3lGV1ltdWo1ckV2bS9xOGVzR2xPWjR2TjZLNndGVGFidDg3Q21sWTdiZ00zZGIxRFA2bFIydnJqSEE3VVh1bm1UVFk4Nmtkc0IKbzRWNkVnK1c4a09qbGN1bFhZYUpPRUJqd00rTGM5TDh0NHUraHZ2SDVEMld3K1pWWU9wNEpwSnJmdmJPM2Z1UjNMbzlNT2tCRFQ4SApmcVlpUGpCNXh4anVkL2xYU1phZnF3NEJkUzFuTlRiVzV6S1U4cHM1ZmhxTVVWbi91Sjl2WmVLWUhiVzIrTmNWR053ZXc5RDVSeXBiCm1WeHU1VGFzSmR2ckNERWZlMy90ODNyN1hScHNCdDB3dSttSDR3eGdaOHZlbTlQcnBJRStoQjFQRFp4SVQySnppTUdFVFlkd1lERWcKbEFlVUtFNFBjQTFDeVFDR1lWTGU0SVk5Ly83cFdadTIxV3Q2djIrQmpsUHJkOENFMXlvSnQ4TzVaL3lzVGQvWjVlWGhISy9EajcxYQpOK2N6cm5pYzNQZUt4OVdCeEcvMHRrVEJhaGFHeVFTcnZwSFZlQjZpMk1VZEM4TDZyeUg0TTVPdEowclhjVGg5ZDhZVGRFT0dWWFNWCmlibHMyQXRjSTRjNkQ3dmhrK3JQdnVZajhuWmdONmR5c3N3R1F5NVBmMGY5eGt2SERzZDVHR1JNcHd1KzBqYzZaY01Cd0FQV0s2ZlkKeGZSV1lkZXhwN0VFWUdYcjlQZVJMclBkcHhCSWtNWjZKaDYzelRNYnJkNFVBL0lzVUpjSDJua1c2dGwyQUVqMW5VNG5mZWpWLzBBKwo5b0h2ZGxtRXdQSG92ZjNOR2k4N0lXOTBHQkxYVjhxTWNFM1ZOMTJ0WmpjdFJtaFEyemJydk9YYUl6QVZicThaWitiZVJiOUJGQ2k0Ckw1Q0ozWHpCNVYrNmladGxObDVuaW9DRzA1ZlU0NldySCtsb1BJYTllSjIvWXpJb3JjWmhCUWcwNWpvOTBKQkVkZmh6WEFUcTdla3cKSytmNnM3cE1vSG1wTmdYM3pMS3VaUEo2ejFXMXozdk8zc3h0OFJrVjk2K2NMTkE4bDlqTmxaYy96dmNrdVM1cGFXL3F4Q3dBbVV6awpYaFpWWDdSMnlUSXBqLzMwMTBkNUxNV3JYN0dRbkRabTBUaXhsc1BNM3FaV0RzY0NzeW5NNnkxVFFIRWI1OTF3dWJjcFpqTWR6SzFJCnlKM2xCNWhIaGNBR1Yvdm9qVWVkVktEanVvQVVBQnFtemJscVc1NEdOQ1ZPbUJVWXdFbnFPaEhUS05UZTBrOW5BQWNBd2t3bThqaGgKVzN5VHo3bW5xUlBuUExNY0hRZEFnOC9kN1EvMDdNTytSZUZoVi8wRCtlTTdmbTY2anM5d1Z2akdUNFVwTkNZamtJL0xjMTE0anBvSgo2eWVhclVobFJwYlp4TnFLWlZ2YVN4UXRSeGlwemViWmRENG53ZmVkcjZ1ZlNWem1yYURiREppaHQza1AzT1FIVGFVckttSmVaNkM1CmJJWTZMdXN6UE1od1FKbTBMZ3VpK1NTc0IzRmIrWUV3NHdoK2UyUldWZER3SnVFRmMzcTg2M3I1M1RaRllNemVOK2VlZXVZVFAwZHgKMG1jLzd6b0ROQzhuRi9nNlBQS3E3M0VueDVYampZZUh2a05jTkFvMHN3NGRBUENZa2ZVRTlTWUUraHBLNUFuTHpuWFVPWG1KT0YxZgp0N0VQT3pNNCtyNndxRFpGdjlHMmoxNkdVM3BoTjZmNFFSN0pNK1YwSHBrdW1Eb2RUYUxPNWd4Z2NUcHlyMk9IbW9Kak9wUnkrTVU5Ckhud01WcHA1YUpQTEJiYU9VRHVLTm8rTU9jTUFpOERFNlFGQXEzdWRiTGt1TzZSNGZrNzhQUEI2YzBDRGJlTEFmYStjODN5YkVqNzMKcXUrUlA3cmpGNkIrWkp0V3cybHQ4Tm5McU5MNmMzSkc1OWo3Q3d0anJYdEhiMWIyV0pPWFgxL0xuei9qMVdQdml5QVRuTm9zVGwzdAoyR280c21FM2I5enN6UWZQWFhCSlFYeDQwUllVNE15OTBTQ09PMkVZRnpBZ2I3QkdiM0dodFU0aDBQUVloV08zV2xOTHRDdlpZeVBFCmNFcCtOcXM4NElwTVBOc0dQMytyTTdueERGQWUwTGpuT3dLTjE5ZWkvb1hoNml1K1VzWU4yTUNnb2IrTTJhN3RDNmFqWXlvZzg1a0QKS1I3Z1BUQ0p6S1ZhUithMllidm1KdlA1TG5PaDN5eE8zaExIOTN1c01YYWlwQm5QVHR3cDc0MGlDejhQMFVzcm5VczM4bWdnZzJsWgpnWVRUcVFNdHhnVUtTU1oralBJNkdnZnFMNTZMV2JFbTNuZTBsQWhJWFBiVW1VQTRCeXE2Y3k1a2d3d09Sd1FhMWRHQ3ZyVnIvN3YvCjVWOHBWMS94T1Bud1hhODJmOFRPWXdXbGx6T1llR0RFYVVMNVBBMUc5ZHNBakJEQUlwRGgrdkZlUktERGVnMjNTOGZwOXZJK09kZm0KNTlIU1lsQnovNVNMWDBrY1BBRGhzaTdpelh5bmh2UDJPclZoT001Z1FiWVFBcEJYcmxPWE4rOW1yaTR0R0RxRC9nZ2JQMWp4N29OMwpMODI4bnBuWndrNGE5eHZ6ckJlK1VMeStZdUptUEJtZmY5VjN5NGZ1Zm8wWmlKcVZhRmUyQUJqaGI0Mll6RGo5YWNaTUx4d2U3S1d4ClhscXBvNWJQM0Jjc2FQaXN5d2Vja2ZMWXBSbmV2UkJ6ai9qK2M5bm91ZUh4N2NXTVdnSW1YZ1VtZm1iK2pEb096S2tjeE84Q0xCSU0KaU5aRzMwVHcybUxhSDVrYkRzRDRhNTFJZE8xTXdPdnQ1L0wxMWppeDJKdWR3ZUE5WCs4K1Ira1lGekdhcFVERElGUE9iM3kveUZNKwoyN2IxQVpjL0ZyeE9FZGg0Zzh3SEhNN0hvS1hCSUs0YjYxdGhXa2JQcEcyanB3WEZIaWJkRG4vV3J4amdTVTZhVUxsMkxVZVh5VG9QCmx5MWdFLzZ0Yi90RE92R1JvSWpIQ1RaeE5xZWoxaks5QWJMZ3pXdG1sVUlkbm1mSHRJSGFXN1FYTjgzNWJic0FpaTZ2d1V5a3VlRzcKSUVMbjNtL1ViSzE1WkpZeWw1NXA1WlgzOG5vRHhqMTNRTTd6U0pYd2hWZjkvZTdNWHV1eDZuMUdRU2dQZTVmMDdGcXZqRHR6T0UvcgpqNXh5aDV3M1dGOFYvVVovVGhERWw1bkRNSnU0YmVLdjVNNTZEczltb21CRzRScEJNYWw5ZVc2bitLSDNBajU4N0JUY0dhUGpNSTJaCmlkTWh1WU56T1M3am1VdEhPdVp5UzRSV0YxanNCRGtEREFFb0dMMUhTRU9DOHdKRzBtc25ndG1janVNQmovTnlFU2MvUDcvZTN1MVAKTzVoWkdLNjU4dS9MbSs3NFJSb0EyQVp0UnJuZzN2RVl5WXczaVFjZjNwdFYxV1JpVFlpRlk2bUE0YlZGczdneDY5OGwxQmFPcy9lMQpuNGZ6UnMvRUsrdWFVU1ZPaWNTQng2QlhmdW5FTFE5QVZQeWM3dURVWmFudHdtMXUrajUzTGdJWXozVXZuSmNITUsrYml1cWNpUmRnClArWjN3N1Y1RWFnSTM3dmxZakUvQyt3cjVoNTBGbUdhYzRkVmVXV2ljTTFWZjA4QlRtUkc4YmtIT2g2WVNBQTRuZ0NjSmhGNjg0eXoKVGpQM2ZjWjBVbHRlQWlnK2VEQ3d1TStMMGoybmtWL2VGOVpPcVl3ZEYrU1NpMkNydkU3TTE0bEF4WXRqa01xVUI4dWdKNEpudTg0TgpJQnp3M29BZGlRMjRyTU1CS2s5SG1YZVR0M1N6THNwMFVzZVVBbzlZSFFSbmcrVTVRTVBQMmdPYXFNK2NUWkFwNGNHWFAxWkcrVVV6CllFdm9lV3Q2eDNPNmpzdFFjcHV0N0pVWFU0ZHRoM25aWlgzdDhveEZiRHlERDhmcGUrelB5NEhINDVaWjhweU02M3Z1b2JxTldOaEIKdXRRNk1LV2lUdXVCa1RlWVhOTWxZQytMMHNuN0pFRWVEVHpKQUloN1hhK3p6V2hjdU9lMnRHZVRWRnFKZCs5eklBS2I4azdlM2pQegorb1M1eHRKK0pDSlArUnduSTRTSFhQNFY4cURMSHl0L2V2ZHJad1hicFlDajNkdWFsWVJMRDdJUFJQWTYvcmxoVVk1Ym5NdGd1eVNNCkU4TkErRDdVaHdMbmlmS0tXOFlQaTcxUlMwRW1PdThCVGMrYzRuT1Zid1pvWElDSzRxbE9URzhnRVp0UE1Udml0OUx1WHFmb014RzkKVFZSYURpaTd2VGZxV1ViM3JRTTAzblAzbnJrS3UzcW1ST1JySEU4VWh5Kzk2cnZrZlIvODN1cUcxdk85K3V6QzAyOThWdUt3RGdNMApzYmVxdE0wREhad2J0TXI0VFBzZ0pWU25kSDRuMzkveW05em5OTFdKQVFmTDlHQkptMUdkc0F2QWNGelk0VHdBMlJsb3pvSUk3SmsyCkR0RDAxaGdKMUtWK1E4UitHSmc2SUdEdUQrZnBzSzkycndGd0ZvQlY5emZ5ODQyZThjeWNtRjFNcHJuKzZZWFB2UHdyektKSy9SdTgKQVRtdncxaXgyRW5QeklURXpIL2hlVFBHQk11NmZxSDc3d0VpM3k4R21TaU80LzM3WHNwbkJVZ0lMNlcrQkdXKytJb3ZFWkhmNnpPYgp6RGJhVXJzYkFJRi91T0FBNUIrNVFIeFVBM2dPYUlKQjR1VWY4ZnJtbXNrSEM5WmxHRUFpWnVLVlZmVkRwNXNCclFpcytON2w2WmVNCldEOHlrZDQ5Wk5PS21hakhhT2IyQzlaQ2hYRnpJQWJoeTYvNlRubjFIYjlzMnVTeEIyOGd4eXV6QS9BS1FJWkJJWGRZelppeHJieHEKM05ibm1WTkNkWHUvWDB4K0RUN3hNL0NaRCtOQnFlblBiY0FtbUdmakRXNlhYWFR5R3RHMkF3WXVJSVJBazZhYnVJRFI0SUQwZ0FIcgpENERPMnRrQmtMalg0TTdwZ0k0RElJWVZPWFZJcDZ6cENDWk9mM2VhVjh1cnZsQ2ZlMWJuM0xGTTJSNGdPRHFoMTNIZHVCMkFaaDIrCjRzcnZyUGRPZjNFdi9pTnRlb1d6bnQveS83ZDNMckdhRkZVY1B6MU1jaThiQmhiTU9HTjhKQTZvd0RBRE14cURRSXlLQWdGWHFKRTMKaWJLQ2FLSW9qeEZpb3FoclVWbXBFQjhNckRYQVd1TUxFbERHamVKQ1VBTWJablpqNG54bCt2djZjZXFjLy85VWZZOTdaOEI3a3U5MgpkM1ZWZFhVOWZuM3ExT20rWWJxVS83OHArdGIyMERlYTdHM3NrNTBQVEpRV2ZVVlArOTJndDdFVHViL2hwLzRyUXRMaExyMjRhOE94CllmcHJMOXpQcHZEa3lmWXIvRzcwZ0JiUW1keFRHQjRiWTE1Qm85RnAzVFVMVTZxSkxpdXhtZlNDVnBPc0p1SzhvTUVncCtBMXZqTlYKVTdJSWhqS2JWczMyVFVNMytIK0lsUVovMXM2bzdZTXQ2aTh1VEJXenhsNmo1WklkZDhoengzOHk1RzJYd1pubmJtelFOVnBENG5ZZApieThEeTl0Z2RTbVo4dW4yUXVXYWRDZG02WnZaeDRTVllWbW5RNnRPK3NDMWRTTVFDbXlaVytmVDV6Vk9vNGlSem9hNS9RcmpYbVFrCnRFOXZPREFici9MVnF2MVF1MEZMMUhCNTJrK2ZkRG5DNzhRWTlUZGEzZEwzYk9zSXdjY2VXL2hGK2ZoNjlQOWRRK2ViWFV0MzNxRHQKUS8rcU9SejFMR1I2dWFLd0VtVmx6OXFCQVI3Wi9ZQkJQQTlrWnBBWTA3SHBEWnB5NmZnbkEzOFpsbDUwUFBENUNWRmx5OXVCT2UxcApnd2wrSlFHMWxmMTNUMGd1WEp0Tm8raGIzeWhqQzVBb2p1NWNOYUFSRTMvczBNdUR4ZzRNQkRodjM4RFdmS3N4MUhnU014c1ZoQlRRCmpDYnEySVBZMXd0c2g2eE9RYjBMSHRnZUVza1pCN05yVmJRM3pOK0dWY2F0a1JZMnU5Y3VrVmYvODhJMGRpMU1tSzFGRDNJZmprR2gKNjJLY3JqVEczUit2R0tMcjZuZ0N0VE9CMExDZ3l1dTF5WkJUVS9kSm5YQk4xZ1ZjdEg3aGRGdjFQUnNIRTlCWklYQU1rQmhrRUVSbQpoUVhMa3d1QUpvZVhIM1RpOGlqNHVOaHlCM1ZoNjgwQndsNC91QmFGakwwK2dha09LeTZoRTBPN2dPdmIrME50NitvQ25FT1FRZWtmCnVCUUVGdVNETzI2VGY3eitvcW1YZ3VNY2dZNDI0c0pQUk1BOHRRYVUrOTlnSTdBNHpTaEovbTlYVURrRjVOTmt4Mk01V0x2NFJlc3gKMzBadGJTeWIzalplMGM4bTZ4akJxb01MWjVwUEpXaVFMd0F5VHBha0JBMC9jTGtESGxxdDBuR3NJVHE4SnJwK29CblJRVy9yeHBSYgp4QU1XQXFEQ29EdVdJV1VkVUY4RHRXM1U3cUxLSlRac2hmTDJ0UU5UUTJ4ZldEVFFrWGJBbHJUenREbElMR1JzZTBlZ1Fkck5STHpICnNDM254TFJIVXZkcDY5WEdzVEl4b2E2dE1yREVxMWMzbnYzWllYODdpNVNGRjZaTTJUN29kUDIrZmJvS0MzTUFBRS9TV3EwR1FVUHkKQVlqaTBuTG9leU9RMEkzTVFHTFRqdmxiQnpCUVB2c3BVVk0rRkliYUROWjdBTGRCR2huK1pTdXNseVZBczJySWFQblFqdHVuUjc4NQovaGoxMXNVRDNucnZlZ095Z0h6Z3UxTUFHc3haY0RnSFBtcXU0eVNscVRpN2pkbzJ4aGNucXZQYWRrZ1FWemdmdWhvVmRRTFVZZUdLClR3VlVVTjZwTVU4WU85MVpZUHBVaEJHYVBsWFlZM0Q1NHpKSWRNNW9JM0JKSHRTdGd3TzZGZ0d2QmJtQWZIUTYxdlpJcUNhcjhyZDEKR01rREJ5c2pBcm5zckZ1bmdiOCsvcmlIUUduVko5WEhwZE1wYU9QaDNzV1NTdmFsc2U2d1pwTkRDYlpQR042b3UrTVNBZWZHc3o4ego3RzlEblN3QlB4bFV1T0Zjb09hanJaaDBPcStrek51NmM4UEJDenAvZGkvTVpnVDJJenZOQkhua1VyQTBXZGxRL2RTK2ZnRHJHSUJRCjE2ZXJLOUtPckcwWkVGRzZwUDY2ZWdsQXM0ajBlYzY3N0kza3NoMjNadDk4eVgxanhpWHM3RDlJS3Q4YjVuK2ovV2RzWG1NZXVaZncKSklOVEgzY1dQL0twNmNOT3FqeHpwOUw4ZXpJNTBOaXZBZW1hN0RmSnpqZFp1VzIrK3pyRGNDL2JkcDZucU56RUtpMkVUbVRzYk1ZOAoyZURKNC9OVkRwMU8xTFhkOWNoK0w5WVdJMkJRUkdHb2JQb2N0ZXVRS1UrL1AwRnBJMDJJbEltbHMrMklCcjZEQXRBb25UVFNZU2NICno3d2FTeVI5SGxmdW52MldsWGVzN1FjZnZMSU9iOTBIcmd4SXJGMkd3MEIvcU1vNjJGa0h1dnk4aDFWOExmYnZWVHhrZkR3TGpBbUEKRWd2TCs1MEgwTDdPYzdpWGJlZWV0dzFxTXV6cGxzR2lZcG1UcG5WaGZ2NXZiUkxVRVk4Tk9nSWdjZkdiSEJTZ3JDeU0zYU8rWnRaWQpnZEhYTnVyUU9ZRzl4d2xhS2laZ3ppQkNqTWNsSUtIajFQMU53eDdPSzhwRGg5bDBWODdwWDhQa1hXdjc1WjFyKzNPdzZJSGNmN0ZPClF3TjhMUzhGa09tMW1lUTBtZHhMMTAyM1VwNlg3OU5nV3FXK21wZTZFOE5YOUZMMzZkSFVaR0VUOWZaNERzSThERU9yN3ZnbU5ZVnEKWmR1RjEyNkRIY0oyQXQwaDdZcUdHNGhrYVp4MzZIaUoyeDZIUUxGUVFjRE1BQVFhTkRKa0czanBhZEJFZldQWTNqOFZrMjlwZ3N6SwpLYUF1WVB1NHVpOWZqNVVoOXRlcHlKM2NLMHU1eUpJM2t5dW5VNmwrS21JR2JqU3dBVGdzZElicGw5RkdQR1FzNVBLcFdETHBvWWFUCkdCUzBsdUdoa2dSODNuTUtwTzZYYVR4MmVzV25ULzJ4blVKSmJ5QSs5N3hHWHY5cjNzVEpiTkdTcVkyRFZxMnlMUU1OV1drU0Y1ZkEKUlh3NUhUVElGTWdDS0FzUGxySHR2VUc0TmI0Y0xMNnRWelRGSzEzWDVURUhkQnlrS2xhSUdJakc3YmhpeGRLVWpudFp4ZlJKeTd2WApMczZjNjZabEFTdEY4eDczeTlSQ1Zwbm9LaGcwQmd0eDlMT3JZK0tNd0d6OE9KY0ZKaWFDN2NOanF6WXVyRDIrR01CbXF0WmNkTTBaCjdvYXlBaFVHdnkwTXpDY0FUWll2V1VVUnliVUllODVkMjB3UGJQNnpjRy9CRDRHSjhtbkd2TmpBUnZBU3liV1pXVGp4V2lid0dhNkYKak1CZ3FxVEQ3YjFxZ1ZBQ0R4dWJ4bDUzbGJMTUtoU1RqK3k0WlFST1F0b0RQazdndkFaTk10cEpNdHBObm42OE5nSk55alFabThZQQpTK1h0OTNOdEtaazQ5dWZLb3FkcXBIL3IzeTFtQ2lVOWJGb2o4Ym5ubVZVZzRWTW11eDh0Yi9aRzRnZzBzSE1EVURnaEJtSUIrYUJ3CkFlbHFLakxTa3RBU3Ryc25CaU5TVml1c1BkQTlvL3NzNVkvcXlkM0RzZ2JnT2FDMEtzT3dsWStkZFhNM2tKcWlCbUlOc3ZCVmhtU0EKa0VIRzJtSzhYWWRCenNKaVhJWkg1VEJscW5nN200MFArdFBUTDlCM2J3V2dFZjJKaVgxS3U1bEtoUkZVQ3FEaEdwRUhqYjBtR3RTUgpQMDFrOU1UaDQ5TkFWSjQ2cmsxajY2QlkzaEpJamJoNm1HUDZoZXE3end2S0hJTTk5TU5oYlU4NjhEekh2V3lFVnRQTFI4KzZwV3BWCnlVSUlhenNXSEZ4VFFuWWRCQThIQzZNRm9WVWhYMllNbzJ3OFZ2L3k5aHdNMGhsc1BnM3Jlb0JOcTkxTWw4RXJ0UmtScm9aMzVjOEwKQmRMWnNJaXdKYWtodEEzdnkra3FFRDIxcmJOZEJ0eGNLOFJ4RE5ESXlvOE5xNEZJTk1nWjZNSmZZWHBscjR2S2hOSXVJbGRza0ZiVAp5MVU3YnFKZ3FBSEhjRDRKQUlkazZUV2tVdkpROFcxaThnRFRMY25pNXM2dzNuRE1nS0x6S1Qwdzg3UkR1azdUdVkxb05XSS9uclh2CjJqUENEcFVObklKdGd3NThaQ2RCQTRJWWpXRUZBSy9XRUR3V0Rpei9lVmJBQ3ZYZ084Y1lSd1REdzVmYjEzZkp1Yy9tQXdVdG13ZngKdzRkTWpSUTBKWDM5d3h1bzFmUnkxWTZid1lCa3k5UGpOQ2twY0l3UTRORGlZUEdnc1ZNeFBOVmorZWQ1VHhRWWJQMHUvOVBnYWVRMgpvdFdJaGMzT3ZZM3MwazUrcG1BaUhqSnNnSWtORis5TE13d2dZSHZKcm1FSFlnQVhPeFZDNFNpZExxdmREd1dVeGFXZncyNVRXb1hxCjc5L1ZPd0dmeldPUis0blNvbkxJb25WcFpLTnNOVlkrcWJTYkJMUUJOcVU2bVVhL0dBc2hEcFVtODNIQklEUFR0bVR0TitNNWNXSDUKdFZqL0VCSWUvYVNRL3Jaek9HZ0VmUmIwNDNkdng1QXBEQUEwb1BPMERTd291dVY4aVV3QUFBbk1TVVJCVklIb3BrcnY2ckJ5SjFBTwo1azlqcjhNR3Qrak8wbFRFQlI3Q09NODZFREtnNmJBRXpqT05LNUpGZ2VIU0ZWYTF0R3lHVnRQTFhidStXeHowbVcwbjVXRHlOaEp5ClBLeFc0VGhhR0VRRWFETVNYaHYvNEtvVCtVbmgzSUgxQytYMlFLc1I5ZzNpaTY4NUkrL2NEVmJOVWFlQkF3MU1uYWFDdENBTHJBcVYKWGNQRDdrZHBCcWsweEViTHp5Ny9JRThuQUZDMmJLaU15SWpQM21tRDl3M2lPd0NSNmQzSzRBUENVZ2VhemRCcWV0bTd0ay9lczc0dgpnd0JhM3U0MURRNmxBRFRHRUZ3YTdMcnlreWtYQTVHK2xoVHlyelVLUTZkYnMzOUhRYXNSRHB0dDJYUkszekRkRDUvK1BwME5jN0FJCnJzWGlod1BhTkxyTFM4aFR0N0JjVFBPS2dFRHFnWmU3SExjR0JQTUNvbFNmOHdyVFF1MXhDNW5ESy9RV3JwVXY3dnhPcHNGWTZQUlQKSUgxZW5IWVRnSWQ4S29LdFFvMXBKSFBHODhEeFBqMDFZQkVZRC9makhEejU5S3dGellIMUM0cTFER0hUeWlmdTNqNnNURmx4SFR1YwpPbUFiRUhydlNXemVkc1dtY3ZXTHZVT0ZITm9ZcVJuMExKeUVsTXNCb21MMXlFMnp5SzBpSU5KelMwTEQzVnF3bEQ0dlNObjV6WncrCldmblNybThEUDVjT09zRFdNdW5TMjlVbU4wMGlqbnZlenVOQmc3UWdvWkRLOHhHZ21hQyt6WVNOZ1Q3UGR2cDBSMkg2MUF1RmpmVEEKUWFEbzk1dENKMk5UcjhBajJjWkg2ZTJBckxGQldLM0dsYVhKdytDOWduSkZBd3lkNDNZYVBJb1JrRVR3L1RMUXNISzcrckpGcUxTdgpzRGlsR1RBNi8reDFtenQ5c25MKzJqNDVmMzJmcnlNQ0dqYkluWTJIR0l0eFduOHNKRzIyS3FZQUU5dDA2bjlpMHViSGpYeHY5MFBWCmRSdkNadGZlUnZaM3puNENMaFp0WngyMWNmRWlueEU3dUxPS3FqVXNWamozTVJ0Sk5ERFJ2bjNQeE5wMEJOU1BvUEtBYThKOHlYMEcKUVQ3dmdnOU5DVmlsK3BwSGJQck50dE13K2ZMT2h4VndhbDdPYk9MenljSnBrU1ZzRFJQY0x5Zm1nYm9JWERCVS9ISDdlMlFPMEVnSgpOcTNzdjNyYkZEcG9zS0NCSkRLQ1JzeDUraDZUdlJteXFxWHp0K2VqQ3FOeEF1Tm5kdDZzNm5ENG1DM1JZaHA5SE9WSEFNc0d1WVdSCkxYTXRISmFGeUNMU1FtYVZiM1V2Sy9mc2ZGamV1MzV4RVRUaXdLT09VNzdNalRRT0JwK2FWeWhFOHJ6RmhjWEhiS3hFZWZSaDM5LzkKa0Z4U1lhZlJVb1JOSzFmZnZWM2V0bGM5eFF1YVFUSlBmSkVnUGxrOXlZN0p0QXVCeWNvc2pvcEUzb09TSUQ4SUErQ014OUpGdml1MQorVVgxTGFZdW8zaVpiSURIcjdoc3l6bTFvSG5tdWlVdXVFSHlxYk0rcHdZNUh2aGNXeGtmMFBaOXFUd09NT3c2NzJLQnM0UWNZcmkyCkkralllRFhRa1U2am1SYzBVZ3NiNllEVGFqaWxEcDNZZjYwcUdER0hjNFdCT2M4Z1FCVVAwNU5YRmh3VWlGR1pkd0tmWGdNTnhnbTIKdFRDeHg4czYvSmF1dDh4MVRsZlF0UEsrOVl2azNsMFAwNEdQK3NId0szeitnV2s0MmttUWdTYnZkdzF0RDk1bTQ4cFMva1A1NTlkdApOWnBMRndDTnpBT2JWcTdwTkJ6V3VhdHNGWHEvOEQ2VUhlQTJqZnRCajJHdlphRmpMWGJRWU5nMTZtL3NlOE9lT2lzUjRwMGNoZFhLCnZPbm1qWDg2ZzZhWEZqajM3Zm9XQk0yb2tmanBVd3lLZUNvbFdaaVBLOE1XbURjSysxWUxzdUN5UDMzTkh5d0JHcGtYTnExY2M5ZDIKMlEyQU0rdjAySGt2c28xays0VVZINXVtNWxIS0JpQTdyaHFjUlhzVk9SZVV3WVZYVEwyRWhHWG5qR0c4VkM0YmQ1V2lzM3d6Z0thWAo5NjlmSkE5TWdWT3pvbFF5OHZwVjBVRzZRSlNQRnp4WmpjWkxDclFnSWVYdDRiTXNhR1FSMkVnSG5FdXZWcCtrVUFaaDF2a1hBWXQ3CmF0ZjYyUUROeU9WZlllc3BuV1BUb1N4dUZDY0EwMUxBQ2xidVdLZXN6bnhPeWFxNXk3TUZ6ZE52RXREMDBnTG44SzV2bHJVVFlsQkcKVWdNb0xXUGJrWWM2aWEvVHpDdHRIai9jL2VEU29HbWxTU2t0M0szKy9iY2t2M3prdi9ndDZuNExETUJKOENCa3k5MGFIRWtiMHNDMAphWG9ldkF2bHZ2S244MUxoNkg5NDI3QkpCOWNKUFFlMjNYVlFtbGw0VTUwKzZYMVVUaDBPenRzNjBIVnJ6N20yWTM1VkFWUjFSMy82Cit0WDhPNVpUS2Q5NDdiQWNQWEYwckZjQUd1eElGNFFGYVgyOTR1a1RobzdSWnBJOVAwUnpPRHE0Zm9GODRad2JWZ09hVnBhQmpYVEEKZWY2WnlYVExPcUhydElXT1hCb0Fiajg0TnpFdlhrYXdnWUF4QTN2U0FZd04vb243Q0xvSFJRUXZDaVFISjd6dllZdWh5dXBEMkxGcApJOWZPb0YxbDJHL2tpajJ6ajJDOTJVSFR5NVBIajhpVHg1N282dGErV3VEQkl0SExtcWxQTTRhTHJYZVZyOER3VWNiOVN0Qm82WWpUCmd1YlIzUTh1VTBWNXRxdUFUUzh0Y0o1L2V1YTh6YUFpSkx6djdQYllWamFGRFIxRURSeDRhTUFpd01UUWFUeUVEQ1FncUdpY3hvR0IKcFdOaEVDcUZjRnJmQVd4YzJOQ2pjT2UvLzJBajk1L0NWeEEyU282ZWVFbSsvdHFER1dneWlCaEk1S0FScDlYWWVBTHlFRkR2cU02ZAo5alBIS0g5MHo0TlQyS3hTVmdvYjZiU2M1NTZaeUw5YUxZZTllMVQ1eEZ3V05vTnFXd0NNaFEyYnB1VGFocG55Z1BnbkxSam0xR3lzCmhzTmdnOHBaZGM5QkhjTDJVT0cyWFlldHNSVmR2bWNHbXJlS05zUGtpZU5INUJkdkhGa01OTE1JUTVpNGVHTWV3dW85QXcxWUxRWWoKUEEyeFI3bnpuQnVtMDZhTmtKWERwcGNXT08wUFZRaXoxWWl0NU5LU2Q5VlV3Y1BHeFF1bUpFekRzTk1vWkY5aHRoY0dtNkxOaHRoZQpWcTNaaUFuTDJtQU8yUHpxK3JjK1pMUzhkT0tvL1B6WUVmbnppYVBEeTVrYUtxTHFjYUtoVW0ycnFZRU5zT1dZMFkwRys4RXpMNWlDClp0WGFqSllOZzAwdkxYRCsyRUhIZHNZUU5vR2RaeTdZS0h0TjdYU3FCalpPczRId0tKK2owN0pLU05YQ0p0TG1WZzJiK3c0MmN0OWIKY01wVUt5MXNmbmJzaVB6cHhORnBpbWhwWENSL3M5djFlWlZHV0owVDBQUjVpNG1yWlRNZzA4dUd3NmFYRmpoL2VHYmluUGdzUk1SMAovQm9neFFOcVFkZ1U3U1FlTm5WVHBRZzZvMzBKRzZVQllEWVJOcWdkOVBiZVEvL2ZrTEhTUXVlbng1NlVGOVdxbFFWSGt2eDdOYTcrClNiaW9yWUI0UTFqeWNXV1RJZFBMcHNHbWwzKytuS2JRZWZYbDJTVWhSQ1FHa0QxbUlKbVFLVlEwTUNNRGJBNENiRitaQ3piSVpsT1kKYW9WbDF2ZTFpbWxVaFJiYUF1YnkzVFBiekpad2FhSHorTEVuc2ZGWGZWREwxYldCRTkrQ2Q2TUFhRnJBM0xsQk5wbVNiRHBzdFB6KwoyZG5NOW5mUFRsd0ZsN1NkN0ppRWwyQ0RudmJSd0s0eDV0WkNCOGRwNlBXWkFaaHBhNHZDUmtBOTltSDk5bXVIR3Zud25pM0FMQ0t0Cmx2UGlpYi9JQ3llT1RuOVdxM0hqQUlUN0xkZG9MajN6Z3FuMmNyRGJua281cGJDeDBrUG50KzNXcU9xVHdoUUtROFQ3MTVSOFRXcTAKQ1EyR2toWUQ0YkpDMkVUZ0xFMi9pckNSR2ZUdk9UUTc4ZFZEcDdaL3ZCWGxzV05QRFgzOHgyODhCWUREdFJvRW1tRWxLY21HclNvdApLcWNWYkpDODhuS1NWLzZlc2dvZEtwdzhlVWV0aUh6WWlzWlg1NGxodEJUUDVnZVBVVjZxekxYWEM4UEVHK09qZXVpUHYvS0I2cWJaCmtnMlVIeDE3cXN1Y3YvVGN5K2ZQUHIyZ3dxUmx6ZWxac2kzWmtpM1praTNaa2kzWmtybEZSUDRIUXpQdVNGWWxjOGdBQUFBQVNVVk8KUks1Q1lJST0iIHRyYW5zZm9ybT0ibWF0cml4KDAuNDc4MyAwIDAgMC40NzgzIDUyLjk1NzUgNDQuOTYpIj4KCQkJCQk8L2ltYWdlPgoJCQkJPC9nPgoJCQk8L2c+CgkJPC9nPgoJPC9nPgo8L3N3aXRjaD4KPGk6YWlwZ2YgIGlkPSJhZG9iZV9pbGx1c3RyYXRvcl9wZ2YiIGk6cGdmRW5jb2Rpbmc9InpzdGQvYmFzZTY0IiBpOnBnZlZlcnNpb249IjI0Ij4KCTwhW0NEQVRBWwoJS0xVdi9RQlloQlVEeWpxUHFFM3dTa1RPQTBKZStQSU1QQVBQd0RPUVNCSTg4QXc4QTgvQU14SkJaQ0VJNzEwb1hSTlM3Q0NkQ2NFMAovTU1GRWtoQTdWaEozd2krNjdwYlN1b2ZTQi9RSStOeENBSWhDT2k5OTc3V0dqUUtmZ3AxQ3UxcDRWb2hvbFZhdHg2SGlMZGRlaTVTClJLVUxRMHZoNUtYcmtPbEZ4Tk15MzVWVDQ2d3F0VzV5MzJ5c2VydTY4a3pJT1p5QUtPd0Q2ZUUvY0FpaXRMTzM4VHVhb3YwWHR1YUkKSEZFbldoTkkvdUZKSFdxbU1EaTR3L2MybkxRb1hFaWpsR2Z0VU82THZVL2RkMVRSNkQ4Q1VpQTk3R2YxOWxtbVZFRklDNXkwandsRgpjNHArWjFWcGlJR1Qxb3VVNy9xV0Y0YVdabUhOSmNJMVhYdytXVmpIUlNUVS90aG93eEViOFFtaXpEZ3l5eWRJOHJqVFlnbk9tamN3Cm1ZNlF2WW9SSjcwTjFHQzdrajVYaDRmQlZZT2xuVEVPckdneGExUkMxRThTWXBPV29VMDVINGVJQWd3WEthRzRzbUNSdUtOVitwYTQKR01yYVVnVW5tZFhiUHdvS0pJWGtUdUsvYUl4YTNnUHhPbUxDSlFISHQ5WmozdHRxNSsrc2lCVmlIVWNwQ1RqU2tWTU9NZkd2ZC9YVQpYeTBzQ1NWZW1adSsya28rbW93Sm9ERUNVaUEvQnhUN21NY21vTWdCeFM2eVNoUHdYSlVxNkcwUExuYlZyYmd0VVF5R0ZhMGlGK0c4Cng2emlsbGNRajd6SHJBbnp2TWF6TGVkempSTkRnRVdZdFFLM0pESzVKVkhkb2kxdVNVVGZzYWJPYTZzclpzMHNia25rVy9YRzQzSXIKdmo5dVNmU0NmZHlTaUpZM0xocm1janFXWGZEdHhxODcvc3h4QmZLSDQvckhyUEpMUVIyalJUaXJKc3JwK3VLV1JMQ054ek80NDVaRQo5WXZHc09vTWw5T3k2NjVqL0k0aHhQYzh3MzZlNjFiSXFoOWtORHl6YkZtR2g2ejZBVWJEZHd5RFczTExyVnhPeXdseFBGZGFkUnZqCnRaQlZQOFR6WExmbTJGWFBYUFlkenpsdTIzT08zN2J0Q20vYjd0NWtoVEVNbnNuaGJaKzNiZDh4QlBsdU9RdFluQ3VtNVZmY3hpZ0kKYjl1dVkrRnQyK0Z0MnpSTXhtTlh5S29mYWpVTG51VXlDNGREVnYzUVdmVkRlTTg1SGN1M3JBWFByUENlVzdWOXp3eTQ2NWd0ejYvUQpkYmRLQ0hTcmhjUHUyQ3pucmRtT1o3aUZoNjY3NVdNUVFodWU3eGhDSGJydWxnVTVuc3M1cTM2Z0lLYmwrUlc3Zm5pM1hyUWN3MkQ3CkRtVXoyQTJ6UXRrTTFsMXhQTE5lOFp6ZjRldFZoN0laYkk0aHhQTU4weklMaHNYMExLZnJWb2pic0QyclczNE9jZnVPWFhBTUQzRTcKai9FUXQrMTd2R0doWFVIcDh6dUdRTmV0MEs3QWx1Y1dMT2MwWExkaXZPYXk2OUN1d0s3alhJNVJZTmZ3MEs1Z1pzRjAzS0pyckJwZQp2MjU3ZG9VNS9jSnBHdjdrVngxK2lHbW0zbVF0R0s3aWh2RFBWYzlDL0hiZGNVN0xNZ3RtclR1TzVYVTRhNG1pak5lMHpOVTBsMkpXCnpNcDlqOFB5dkhKeVRxOW1pS3Nnbm0xNVprVis1T21lQ2llS1BoYk8relBINFUwN2F0MlNLSzg3SXVlS1hYZmRpa09pQmJFR3oyTWMKWCtPWkJlZDNiVmRnRWZPVzNINWNRZ3hCenVFNURwV1EwMFRIbjZKbGV0SjFLeGJOYzh5ZWZrUTU5T3planlSK3k1Y0tZaGVOeWVGYwpKT055eWE1SDZUbXI4N3l1NUs5NEE2UGxHQzdUY0NsL3hadlVvMXhKb21jYWRuK2VNOHppSUVEdTdtc1pGdDljQmZGc3orb1daOHR6CkM4OXArYmJ2R0VKdHgvQ1lrOWZzdk9iaFVzemFSN3YrY0RFTXJzRm9lTVBsRjQ1ejRHWTEyUlZ6R3I1Y05NKzFDMmFWeVRRSmJuazQKRjMyU1JEbWZlclJGd3prdXR6QmFwaUNXUzJnOHcrZzFic0dYT0svQWtyL2lUZWwvUjhzOEJwTkQrU3ZlbkdoSjByV2FuZWVZTFgyTQp2MTZlZVk3WmthNFpJTi8xKzlFVUxkMzhGVy84Ti84bzFJSnRUeThyZDEzUEY1Vkx2dDNUUFA4b3ErOGN6eXVJY3k2bTVUbXYxUjJICjVSbm01SnlHdVR0K2NhYkhyQmJrOGl5ejRMeUNlTVRGRU80WWorL1BpSTdtSGVjNEhPTHF2TFp5bVBXVFozaXVXMlFvMjY2enRuRVoKRHM5Y0x0ZzJ4MXJPNGJrMmszSHVqbTNZNXRKNFpuRnhEczgxTHNPNHZGYkxXalV0NHpqdk1Xdk1BQm5uWFBJTjR5eG8wZkVOMnpnTgozem1YWXRhUGZ2S1hyUGlHM1p6bjducXVXekNYWXRaeUxFc3pscnZraFU3bU1aZ2N2eFhVRmJ1K1dYTDgzd3JIOTJyWE4rdUs4MVk4Cnh5SWM4M0Z6WFZkQzYrZmovTzljSjMrTElaSFE3bjMvNkF0K3hSL3kvOGlDeEhCSlF0RFA2cENVNVhwNTAweS84dXdvNTgrT3ltNlkKWXdFODI3amM5azdzcWxzeVRSSzVodWRjTjF5ejhudjlQRjNMdVl6WG40OVRlVnVvSHMxeEtLZmwralBEY1Vqa1RxWUs2Z29Gc1Z4Uwp1U1VSMThQK3FienQ0V1ZXSjQ5Rk53d2hwbXZhRmN0YTlUeXJjN3pXK2duNERVTlE0ZlRpZ3hEQjZYbFdBWnpEYlR6Yk14aVBRRWpBCjQ3ekdrdTg4aCtuNGRzMXlySldBNTdFb25sbXdmTU1RUEp6RExqaVBaL0I5cjZKdFFaN1RHSkZMYXpNTVFlVnRENjRSejJBNmR0VTAKSkhiVjlEeXI0T05ndEh6bklwRnJ1QkpmN0tvN0c0N0pnaHVtYXpsdnlSRk9WSGtibk1OdDZxSXRLdktUUDhmbFRlV3p0VDdieGdBVAo2eFBuZVR6REh4ZHRTZUJlY1N0eVc0SzR1VXljNS93V01uRjljM0hkb1lIamNOMXpGSENlZStBNmwrSDZab0dKNjl0cTRqcm56ZEdYClBmVm5TZnFlaHAxTHpUSkZ5MCthWmtwMkVpVkpzL1RuSjFPZm5tYll1ZEpNeVpROFRkTC9NeVhQc0c4aHJtK3dpZk45ODNBOW51MloKTEJLM0J4ZlA0STdJTlJ6eXVRYS80cmJoMnlJY1RVRk5hOFFOajJjTGNsRityeWtFVW9xNFJtekRNUkhub211MVBhdlpPSmRySXU2TwpYYlQ4aXVYd3g1VEhORHgvY2xxR056ZE13M01NUWQ3Z0xqcWVLMXdNWjhtYldDdUhLUkRkZFM2N0xCd0VPVy9GTm43SExUbG13emRNCm5tZVl6ZTgxdjlkWURuOW9ELzJaNjNvMDEvV0lpK0cxdThMZGNaN0RyVGpITFJERmMwdk9iL2d6dytXNVpzMHNFTm4xSEVPZ0xiTzcKZnNYdHh6VzQrSWJuUzhPVzRmRGpHakJhYnNIM2lQdTRSdDZLSDFnZXpoVXpRTDdydkJXWHZxMSswUmk3VnQ4dUxjTnE4MGVGZGpZWQpMZWUwZkgvb3VxT3lhM2tzZ3RWemZYODhiOE56T3A3TmF0WkZXenh2RTNIQzNqbXM2dE54bnNQejVaTWVMYjE1cHVsUCswKzk3MmlJCmN2OTB5YmVyT3RQdklSRmFoc20zSjRiQkgrK2tJSlpMcFN0V3VXZ0xCWEVPMDNlY3o2dnE5Q1hKbFIvMTNFZFRycU9uNThhemt4NGwKVGUvUDBKY2U1VXl5SkgrS2ttVDM0VWwrbE9zY2lxSm9TdllUTlUyVU5FUFBsUjRkeVc3KzlIc2ZvcC9rVU5ML1RwTG9XWkk5SE04UAo0U0t4WEtwSGRHeDdWTjFqVm04ak9mSkhjcGdLZ3VvbHEzSTZ6dW1hVmRFeUxLNm9Uby9mc1FYd1psYnJvSGx0cnZFNGxNZXdHeDU1CmVMN2s5Nm9xNTloVmMxTE02bTJlaThRejNCTEZzQnZlcU1pUFdiM3RjeEU4bDJuU0hjKzFVTzhrS2Nydk5hYnJEaGVoSUpZaHhPTW4KT2RPWFhJcDZDR2VlSHpMTG96STh2ZWZLc0g4ZjUvQnN6K0tSYXNTc3VPeUdaM1o5Tnh6b1dwWmhjYWpoNDNyRkRYbmUxcmtJRHFQbApQSTlGTVF5ZVlWUW5adlUyTGhMRFlKeWtHakdydDZXLzVDSjN6SnJWT3E1WnJsVlUzMk5XeitYdzdLNHY4U3hmVkNWbTlUWlpDNTRyCkhBWDFQTWNuRHM3cEdBWnpPQnEyZ09VaStGM1BOWXZqY2F1K1B6a2R6MnF0dXNYamtQeDYza2FPbit2azV6clh1VWdGZFFWR3l5NjYKVmxjOGJ4dlIwZlJjSkdhQWpPTXdCQnBtUFcvamZEaXlqSHpQL1M5K0VlVWljUTYzZEMwM1lCRHcwQ3kvaXE1YnNtM0RLaHlQYjd1QwpPR2JWTHZqakl2R2N5eVBQMnhvZjEzRE5NSDNIRnc2K1hUUmNRVHl2SHhlNTY0c1ptcCtMMExXTTMzRkpoV0pXejl0NlNINnVFZnJ1Ck9vZnZISy9OTTRiakluZWR3L0hOZXQ3RzlYQ0V4S3phdFVKRW44NExwZ1U4aElBOVMwTzVxTktpaEVKWnZMZU5qTmZKWlVrTDBlcncKWDRiTDhMakw4TGd1dVd4akFmSnd6RDZpaGdxT0dTbzQ3aUZhUkdOclBOSmtIRHVOcldtQUloTU40eVJOUmxCa290SFlZaTNqTTdQTQpTRXNWdFl6UHpENHlvc2pNTW9vdm9zak1haG1mUzFEazV0VXhENlhLVlBrdmJQeTRLcXBNbGYrK0NwcXA0azBmV2ZTbXp5VHZKbmxOCnpVRW5oSDk5RjNpOHdDM0s0bnVMc25qN2NWSXRLUXZZb2l6ZWtuSlRGWEt5cEN3T0ZXWHh2bTFJMkJ3MUZhUnRjTFFON1c4YjJzOEIKVzBmYjhOMjF5K3hiVWF2RFYyS2x4MlJKMFJJbVBhdWxaaTRHdHBIR0k0Z0RwV05zTGdnODdCUmk1eGN6U3F1SFMrSVhCTzV0RHFmVQpuNFVVQ2ZOTFZyWDcxR2lZS1dqcWk4YXhCTzV0b2tvSGRiVlVHYi93dGkvcXZDNys0Y0p3SXIwTkJQc0tZTGlxM1F1RWdyZWxrWThnClgvVDJQSDR2Rk9sbURMMk5EYldQTGhPMndJN3lFSHQwbzRmWW96dWxHVXVhZ1hTcGNZVjBsbFRwMGFsQU5LU0Q0VDgxZ3NFeDBhcDgKS0k0MlgwZnZRNG10aUFtbUk5TEdHK1kveVN1MHZoVjVIYjFOZ1ZsWXgzRzFrWURuNW9zaHk0b2hpN05PcHROanhGa2grK3FoNlZhWgp5aTlDZnBIL1JXb3BDY05rMm53WFF4b0tSUGhYdDAvMnlUN1pKL3RrbjF5MVpFS2NVQmJQc2g2VUphUXhYaVZUNDVQcWtsdVg2aEtKCjlUYXJ3N1A0WlhWNGRvUEk4TGlUVEk3R2lCYTV0TWdWdWFwSVpLcFJWbTluNGJpTEtqanVLamp1czQ5YjBkZ2RLREtwVVdpcFlxeGwKL0NRenkzeGFxaGhyR1QveE5vYkdleFoxek13eUNJMnYyYWxpeEROK0FvckZjSWNZdy9KTkZsL3U4TC9KeHp3MExKaVFoVHY4OTcrNAptcXNnS0pRckpya2ZQVlRRajE3WWYyRnVxdUpxZnA4dVhsZG9rZXZSaWxUMlhkZVhtZVExeDNXNU9DcjczdWE2d01zRnZ0Uk1DTmpTCnVTcDRHZTNIYWJPa0Z2YkpoYlFvaTdjZko4akprckk4VGphTHNuajZjVko3MkRZNGFxcTJ3WUZndEEyT20yTFBGaDgxNVBrZUMxZjMKTmsrbXF0MmR4SU9JRXg1WHJZTkNQT25oRWJkcWdia2djQXZpMFNtUXpBU3FTNWlKREF5L0k5MkZXU1ZSNWlYTTErSFNZUmNFZmpxUgp0bU9CNG9pVnVCaDJTSE1DR0tLQVVJZE93ZHZHMCsyNnZleGNST3BFSmt5UFdibDBTT3FDUURWa0lRWHJzMnNGQSsvaUIvMDZCVmtyCnF5VnFxZEpBT2xhbWd0M0hwWHAwdFViRDE0MWNxa2NuU3BVZTNVS29mWFErUWVQb3ZFMEZRU0hkUnFhQ25lZ2g5dWhPUmVqcmNvb0kKODcvRExMUm13RVpKMlNRK3NwN0wzTC9TSlFlL1Juek5FVFZnbzZROFZLMjhpb3hGWlhUWU9Pc0VMaENuU3NpK1F2YlZ4NUR0WXFiSwpQNWtnSjFQbE0wd21TTW04VmQ1MnExei9SVjY5TWJMeUJnbmpmNUZYZjN3UmI0TWcvS3Y3am9COXlFSEEvc0ZCd0I3aFg1MkdvcUZvCktGZGRvRzBRTU9naVlFOWp2RGI3VkNxWlNxWWJnN0o0bHNaNGRRZU44ZW9mbE9GeDl6WUpXTWRFTVV4WUhSNlNzRHE4STJGMStGR0cKMXlWWHJVdHVYU0xWa2RYaEcrWHE4SC9oNnV6SXRJMU1JMU9qRVVJZVlPTnJyTjdPZWhVY2QyK2JmVnhWWlBwV2IyY1ppZFhiR1dNSAppa3cwOXFZaFBkSms3RUNSeWFMUmtKQW1HbHZqZWRKRVl6czgwbVRNUDVHSnQ0R1pyUnk5clpieGsxQmRjbFV3MDJtcFl1U01TcE14Ck0yUDRpR0wwazh3TUVWR01ZMllXZWhzTjVhb2d4dHRpK09XaDR2QjUrMDB3RHcwR21EdDh6QU1ta2VNT3Z4S0NNUStOamNZZHZnVm0KdURybXdVMVZTR05rZVJ1dTVyVEl3dFhaRi9aVnBzb1BWYSt0ME5ob0VoVGpDMnRvTE44RWZCRXlVK1VkV1NyNGJpOHNaYXA4YjZPcAp1ZG9Rc2krR0wvSXkwUmd2MTFXS0grSk9Vc0Z4VHloa0VzWlBwTEtINWFIK1RNcFErYTdyWTBsa3NVdGwvMlVvWU8rNjNGUjF2UTAzClNSai9SbVVxU0NOQm5vYVFmWFh3cXp4RzFyT29ta3JONFYvZzc4R1JNRDZqaGtsbEtuanhOdHBucWFEdGNaWXJrZz09CgldXT4KCTwhW0NEQVRBWwoJOHJoVGJwVzNpZTFDNDQ3MmdneVB1eVcxbUgxY0ZWeUVuN2duSUJ1Tm40Q1dFc3FTUDA2THhzcTEySStUQ3RiaHl1N2JDZUZmM1Q2NQpEekJockJjZiszVFVWQnhRWkRMbXNlN2piYlhGUndWQm9JZmxNV0w2aFBFVGJSd1R2VGFPaVJWMmRmaEtDSDQveUVtdE9RL1BvcXFnCml6dFlmTnZncG1wcmdyM0Y2dTBma3B1cTNuWmhmRlN3eGV2S0Frc2lpNTVYWm5vbEJGTkVpM3J4VVVGdkE0VkVwTmhwY1BYYURROVAKZW5qS3lQWFo2aTFadUhvbEJML2QyK2JhNVp1Ymo1TWhCNFQ5Tk1qNzNxREkrL2EyaEVpbjhJZ2taTkhiRWh3UXBFb1lhY1dMdWcwZApTL2MyRTZpRHhxNVl2Rm1NUnZXbGU5dWZYUkI0dzRsRTFVeGFJbUdHWmdrS1lPaFh0VnNoSWorRXd1d21iR0ltOHAxbFJoeU00SGRpCnNYQ2xFQmV4T3BFd1IvWjRDUk5VR1YyNjZMb2dUQ2ZTMitwT3dYUEVTbzZubFFCQ1BoTEdSOXlmQ0FqRkxZalY0UnNzaVN3bU9BcXYKelJnMmRBcjNYVE5KeE02Z1VZN1lNTnVreEl2aVlzZ1lFK29vSXNWdWkwb1ZCRFZpaFdWYllZWDF0bERCd3RDT1RoZUc5blJPUmhlVwprWXNVejQ5V29zMmFsNDVYdnlHcmpmZVlsSTVZYWlmZ2VMbHdTc3JFOWJhZlRhVys3NzNtWEdlZzZtMmw2aUoydThGMjVleXhEUXhYClp4MFFOdlFnSzVHSEV1ZDBsSFBpdUlCUTNOdnV4Y25BUDRSQ2lUNUI2b3RlS25ZQ2QwUStna1Q1RHdxU0RRdTFlOUlwT09BTlErTkYKVXhyajFYR1N3cnZ3dGhlZFBCTDVMWTQ2YUtlUzhQdlJLWGdiS3VFYkZhOWZRUEVidE54M2wxbTQrdnVlSkFodjg4d09LUHRjN3J2cgpGQmlpbDNoK0dNelU3VzFlY1RsTm1FTEthUTczS2tkNDV2S3R3Q0NrTUNjZFNCQ0s0M0NqWnZjY2tTNUtjYkFPRFQ4M2pLZlBSZkdQCjB6WWNiaE9lNEpyemhORkZGNTJMd25EVVRTNWMzV09OMkUraVhkQVA4MkJBM1NNOGdTRlhTQmpScVhLaGVUajVoa3Yrc282dld4a0UKU09ORmw5U2k0aE1zemwrbC9vTkxqU1AwM25hck9sRGszWTVVRm5Lc0VzQ1l3MGFBSGpTV1FXcmFyRU91cVZTZm9NWUVVcXFucUF4agpqc2hlKzVNL2NCQXNoNjZobVJ3K1I2dDdpREVkQ0tON0crVEx5a2xKSGd4ZDlqYUhNOEhRUDRtRWIxMklJUHlyZHlMTFcxaVVJQXZkCjIyZ294VWV4TU9sMFg0bVJiaUIvNGVxcXBRRW1MY3dOQWxjWnFWTEhOTGc1QXBaMHBGSi9HMkppSng1NW01ejMwdG5nYmtSNVRRTXAKblpIUFM2TnBpRENqVGpaOEhNcW9odzJraG5RM2YwS0RHMjg3UjQ2b2hMU2l1dzVERFFORFEzdkZZSm1FSElQQXZVM2ttVDA5RmNLMApQTjNDd0VwWk9LaTNvVEk4WG9VY0g0MWZzN3JrdGxhdVRiZlBoYXVUa3dwNWVodE45b0ovNGVxanlhQk5PL1k2eGhTejZTckRKeUxGCi9rZktwa3NZdk8waVExbDhTQ1NqbFNVVTVKcENGb1pCZ2JqZVZsbzkzQTViVHVSZlpPUTZ4SkU5WHNTK0lIQnZDNzBPbCs0Z2FkeTAKSW1GV1FKcEw5N1pPSTNRcVRGZWowOU5MUHpHVUVnbnpnNXhNeUlPbHg4d1FUbG00K3NWTW9McHdjMEhnNFlWa3NYVFF5ZUpSc1BUUAp5ZHMrbWNOU3dmdUxTMVVGYlEwYlVZeXJEbWsvUEJTR2ljUGJPT1JFNFlneEdCODFNaWVBdEYrNE9pcWtZSDJLY0ZYek5oRXA5b3prClRRQkpqZmRUR2Ivc2NQb2lCb285czZtQzR6NjdwWmtIblJSQzl0VXhJb29EaVlOL25BeEJrVW5NVS9tenp3dVRmbTl6c2YzakxCSDAKakZ0VnN1REMyM0NXcTRJMWRET0dOQWxIMGNYTWtLU0QxNVZUWmhLNzNKTDNqVzlBc1ljMnRZZk9tdkpNejN1bzVTOWc0ME9Kc2JDUQp1TmhrWW43T1A1eDFWaUhCOFVQNUphVjhiU1NndDVtclNnaTJGUnEydXJDd1ZvZC9VTHlwT3J1bEN0b0JqM0oxZU5IekVmdnRRY0FlCjNYeWNSRmtTV2F6RUtJdDNKRlp2ZjF3K1lsZFJQbUt2ZGFUSjZFT3UyR3NQdU1NSFVZN0h3dFZEakp0NnNHN0tJWEhGUG51cnQ2ZTgKWjRVbEtFWVJNeUV4VkQ2RWxiQUtHSlNvalZOTmMvanREZ3NMSFZPS1BhWEpXcFk4UW5xUkc4aGJxaURraTd3NitKWXFDTklZci82VwpLdWlJSHo0VkhIY3gvSHJQWjZsaURCRXlzYXN3Mk1Pam5HKzUxSjlTVlNWNEZ2d29EWDVObkVmbkdsZElOMEZiUmVkdEhRUUk3RElNCkVTS2lyYUpyWlNyWWxSZ2lwQ003Q28xdWtmK2ZPR21VUjZ5QnM0YlVzRVJoVThhSFFnbTVIWkdDbXkxUG45YjJlNVZaYVAxbWFHVWsKb2I3R2luTnlRQWFIOUtxMzJSSnZZeGM0cTRva0V3RzVsdzZvWlk0c0RHMW5aYjZyT1N2ZjFUSkdOSlFHK3NMUTVsM3RiVFJvL25XVQpPdi9hT2pEdHIzVTA1dGZ6a2VuNGJYUEVERzQydmlpdVhVWUl2UkNoUURpNHczOVl2Z2w0Nmc2dXQ4MHkzcmJ3b3hmbUVadld6cXBTClVUQWgyQVhMSmdHY3RDTm53NUF3ZXBHeWp0amNHejh2d280WWFsVStsTVFNa2ZrMVpBMS9wMVpqcStiU2xwUThoR3RJeTlzV1dBM1MKNDIyY05BUHBFbWE1MFZFVytIdGlxVE1GNGZKY1JuRG1BVWNOeHVPczNzWVo1WkQ0M1d2TGUrRW90RDQweko3ZUpjeXgxY0hVbE51NQpXZFZ1YjhNVjVidGVGRWd2U2tnY1AybDJHM0s0MWphNjE4OEh2RnFNREpTU1htM0ppeU0rU2dXSVV1bWg5czlTRTlYM0loM3YxOGhECkRmRzJ6L0I1SkxSYzFkc3VEbzhFYjF0d0ZWNldDQW55Tm0vclRKTmVNMGk4allOL3doYlllVXljUnhjMktMNHVCRUVoSGUxbGZ0N1cKWDZRSTVVT2RNMlZEYTN5NkxVcHcxZ3hKN1loZUdMYjhaRlJZeDF4VmZ5aWw1Q0t2WDk1SVFITmxsMzhrMXAzSjJ5SVdGZjRnV293YQpGbVk5aDAyVkJNekNBWW1aSVVtam9aUFpqeEZQdWdkNFhpK09XYWE2ckdKSks1V3FKVUxlZDZlNnBCNUlveFhsQ0UzTXlPYmpaRzJCCnpFRmE3SERHMkR4bStIN1dFT25GMjB6a1pIUzViZnF4WmtwdzBsNDZvTlpLNmZaajdad3FDNWJmd3dyN3BxYnY0VStmRnh3ZFZDMXcKOUVoaVplU01VTjVZTDJnY0VkRVFoOTgxVmEvT1NWMk4vK0FrT0Z5ZnJYNU9iMU1mU040MkE3VWY4cjk4YTN4dnM5L0c5N1lIeGV0UApvMHYxUUYrclJ1ZUJvSkF1QVFFQ0hSNWlqNDd4TVlDZHQ0V01TUGhMR1JBNG1seVBScGt3enRkdk1Jak1ueVVzME4rZVIwY01PdzJoCmxaS0tQQndRMXR0ZUgyK0QyWWYzTm0vcjRONEdnN1M4elpUSDNwYnh0amFzeVZUUTI3ek4yejdYTVdIODBrMkdsWWNLcXlXOGlZd0QKNndvcDBvdGFKdEpMTjEySk50TFdpMGhJMnJod3JWWElJUW9LM3dlaWpKODNDcTNmdkw3ZU03bERJbVlUKzFBUWlNcTVLbHdpRCs5dAo5THI2Zm1tZFkydUUwOVZpZzM5NGJ3dEpNZzFzeEIxVmQ0SzJ5SCtYWFJWdkZTV1MrbnFidDRWa21RU0tkOGhWbHdXRk1Hei9ncmZoCk1JZmF6VlIvZHIvcVFodmIwU3FUdUc2TGFoV2FCRzlUdmEwK3FhSHNxakViRnltOW9YeFhsS2swdXlxOVlVaElSVkszNWRGQ0xTbmwKL1phS3FNMDRzSGRYdnF0bWtvdVVqYWl5WUJINVd1bitHbXBKTzRuT3F1SnRGUVh6WFNtbSthNHA1K01RT1dHVFRwV0FuaFpkY2QvUQpHckkraHkrTzZKVjJTYkVzeUl0UmdTTEw5QXFjK2o2SXdhTHBENkdiaHpSWTdLRUg2VzFsT3J0cU42TVFHc0xJUDE3elJtODdoUmdsCnlrcWswUlNaWlFWYktIRHE0VDl2QzdIaWp2R255dmUycjdCaGp1NWVLSTNXR0lNTVd2Q0VxWUlxUTJFZFBSem0rRVFtOXgzem1DdEwKTjhwVkYyL0RTRFFsU2x4aW5ETFFoK2pDMWJ0RlRlM2czZ2I2UGxsRmppMFJTbWdUOFRZS3BmSG9SQ2JPbzdzaExiRFR5RlN3MnpCRQpTTGV4YVk5T0ljRndkQzcvMFZYQ0Z0aWxESjFHWitaaHQ2dytlL2tldm5MNVpQcHM0UUw5UmdVTGlkNm1wbUFzdnpMT3h2ZVVGQnJGCjhST09mM0pvYUtWUzliYUZtakFCRWVsbURFR1JpWXYxTmpYbFh6M1JUWm9WMzlTejlUNlZxcWk2T0ZRa0ZmeTFpK3BGV0dZcHFackQKcjh6V2x3emx0dUxuOW9MTE0weTdpaXVONHVYUGEwR2wyTkdxYXRreGdxSlpJaFNGd2xSQmIwTlhqY1RxN1Fua2lDTktHaUthL3FVbwpXcWxxcldBTHEyWEhTTUpldkZyUUk4SGIydTVleDlQOTFoU2FpVkdpM0l1THpGSnFDc29DVWZnU3E3ZUhpOFlFL0I0bXpQdGRhdDZqCkJSTTJIeWNubmxiN0V3eVN1MlU0ZEhnSUI3MWFCZG1PMW8wQ3pMTW0zb2Zxd3FJbEwvWmVoY0xXMjFReFZBTEZvV3I5Qm1iRDhnOVMKaExMNG0vWmk0anU3dFBBeVVhQWd2cHBvelpnTm1QWjdTQml0cTdKc0x3NlVqNmRDdDNnSEU2dTMwNXhTQlZVWDZkVzlrMFRzWUFPawovWTY3MnlSUVdnaVoyRThTc2JNT3RSZER1QmdzSVFPR0xadlFTenRqWFUyMHl1NDBUc0FaWjlpaWFJYXN3ckoyd2tSSHRESTJWQmV4CmV4dGsxdkpHaHJnNnZLS05ZNkwvaTRsTUJic2V0c0FPQmFJaG5UckxqUzRGUVNIZG8rSm9kT3psUDdwTzJBSWJId1BZWlZ5cVIzY2gKWjdEek5zckhBSFlkaGdqcGZxaDlQR1ltN3lFdUd2Tkw2aWJtODlFYTh6U3A1ZWt5K01oMFU1YmhpS0JUOXA0VTZYai9Ya2lUMGR0QQp0d2NCZXdmNTdpQ1lDd0svZ0NpTGYxaHNUb2dGRmIrTVdHbHlGaWtwd1loV2pKYjJYSDB6VTlEVWp3T21ZS20xWVdna3hCVGRBeldkCmhhNWowcFNicGlERlJLU2ZZOFpHUk11OE5yRWdVa1RNMUFraGhpNXJGNkpWR0Exdmk3VWtxK1N5V1M4TWJZNHo4dEliSzdEVXcvK08KVjZKZ2NCaEhiSGdzNnloSmZacmVNa0l0WDZ1cjc0OUVOdVl0RkxXdVA2VUt1bUpGOTBhank5b2xURndNYVU2dFc5VnVoMEpyZW1CNQpGaW1KOFZwejR1dUlLUUxoeVdLTGpDdjZlSlU1QVZWOFRON0MwY0VZSEVyZVJubWxuZGZ6dW1RSUkvLzNuWWRRVmUwdTBiNTJKOVFvCi9CWXQ5MzJEUHM2cU0wempxdWRqU05WZnBsU3FleEFzaDk0Z1BSajZWNElzOUpva1ZlcHoza3Y5RmNOSnZTUmpSdDNiMHBFajZyRjQKOW5UWWE3YnBxZzVtMHlFcHlPMGJ1YjcwRnFTNTlBamt3ZExGQjR1bDF6SjVCSjVDQ1FwZ1NsTVR3UFZCRW5heE44WG9Wb2RuZEFzUQo1WFUzL0JtQjNpWmFRUDJhVWNoRmloeFNFeDhjOXA1UStOZnZxNnYvY0VtRlJNL1RXWXpwSm8vNy9VckE4YVdvL0FweVFIejZMQ3pOCjJDTjJiNnZERmNlV3FMVllMVWJ5TUpqRWtIMUJRdlpWa2pBK0czNlIxNjFxbUV5M3FuOFJTQU9rb1dpb2hVV0NoWUE5NjZrUXNHY1IKL3JWZ2VqUjhGME9XOGVyMnlUNjU5cWxrY29BeXZDSEQ0KzZJSCtLL2NIVXZaeGV1emhnYktqZ2VaeDlYRlptOFRXUUtWMjluWjUvWgpKNkhSZUtQR2pwQW1vOFpPZ0tUSnFPbjVhREptWmhsYXFoakhXaVl6eTN5Wk1LSVlOWDZTd2V1S0djTWRQaG5ESFQ3bUlZYlpNQStOCnZQMG1lSVNTeDY0S3ZyaWFlOXRYOCsxOVlhdlVYMzJmK2l2WDY3L3Z1cnpOZnB6Ky80dFB1L2kwa3RYaFc1WkJuaVJpdCtSMUJGd2oKamxYdjdGaTd2ZTJMRWtmdGZud2tqSy80SlUwSERiMG9Rd0xrbWdwWHRXbzdwSmN3UHdxYVN3L2hDNkpCemcyVHJ4RXJmL2xCRzUwQwpMR1JoR0NTR2hEdmFKNGRHNkZRa1RJNmpYN3FQckdwM2c3enZVd01iVVYvMGN5b2xKaDBVOTdZV29USys2NEl5ZlZ4dzBwcmdxcGFNClJPQ2tGV1hpUkx1UUVTdXNsN1VqeVZ2T0xMVGx2WTErT0I3ZXBNb1dvNnhoOW5RS3hZMTdCcmM1NHFjbFZzWk5RK1k5Q0dramxBWUgKZC9nSitBWmw4UldjOVZVZW9yZmhMUGFFc3lBbENlUGZLdmRXdVRTVSt5RUlQMElRSG9Md0VJUmZDQkU4aUJEQmd3Z1JTQ0FBQWt5QQpBQXdVQUFBTUZoQUFEREp3QVFwZ2dBTU50Z2dOQ0JBQkFCSkU4Q0FDQkE4Z2lBQUFFUklBQUF3U0FBQU1NbUFCRGhBZ1FvTUJSQWlBCkF3Y1BIa1JnZ0FraUhHQ0NDQWlZSUFMSG9vRU1XSUFESEJoQWhBQUFZQUlKSW9EZ2dRY09IRGg0OEFBRUVrd2dnQT09CgldXT4KCTwhW0NEQVRBWwoJQVJoQWdnZ0htQ0RDeHFJQnlvdEJBd0ZjMEVBQUZ6UUl3QVVSUEdqZzRBRUFCS0FBRWtUUXRCcVlRQVlCZ09DQkF3Y1FiQkZFMkNTSQpnQUVMY0lBQ0Y5aEFnd0JjMEFBQUZ6eHc4TUJCaEFnaUVDQ0NDSmhXQTVRTEJnMEFjRUdEQ1M2WVFJSUlJSEF3QVFBZ2lDQ0FBVUFRCllRSVF5TUNDUVlNSkxwQWdBZ2dlZU9EQWdRQWdpT0N5R3JoQUJUamdnQWhrMEVDQ0N4cElBTUVERFJ3OGdDQUNBRHdRSVFBUFJMaEEKQlRqUVloREJCUkJNOENBQ0FCNklJSUVIWkdBQkNDNTRRSUlIRVNhZ3NCZzBnT0NDQnc5RUlNR0RDQkY0UUFZUHlPQUJCdzhldUFBQwpCeEVpY0JBQkFnN0lnTEppOE9BQkJBNHVZRmNNS2xDQkRUamdBUms4ME9DQ0NnV0RCemdnQXdjTkhEeG9jTUVESEpEQkF4eVFBUVVxCnNBRUhPQ0FEQ2dXREJnNGFYTkNnd1FVT2NFQUdIUkFBeHJTTjNudnljeEU0aDF1T1BEM251WkZEWXlhdWN5WDZ1WTkrem9IclpBOVQKMUhQbVQ5TnlKRS95TE5Qd2x6Lzk2VTk3ZXBaK1JFOHk3RnpEMWpGeEZUY1V0MlFJY1N0dXJvbnJYT1BiSWhhWXVMNFpTKzlERlBYYgpqRXRSejQwbkdmNXlhOG1OdHNYMHRyREZ0czJHOCtkWTlvNzZjeVJSMGlSOTcra1lmdlE4UTMrYVpscDYzenRaa2lscWVqUk5VOU1NClRkVC9FRDM5eHBwcDk5ODB4OTY3YVlhbDZjZVVMSHZ2NUJtbXBlZkdQcForMjNEL05OSFJuMmJ2M1o4aGFuSmxtSkorWTdteVJIMVAKdmUvOUpOTVNMY3N6VGRPT2h1UDNuSWwyZE95azczMzA2Rm1lNWsvVDlKUGgvNTc3dlV6SDAvZnUwL0QwZnR0d2Z4ek5ORTNSTWpTOQozOWp1ZldpbUhFcWFLVHFpNGUrZTdINDdjYU5IemZEc3ZqVnlQa1hIbEV0UHRQeWw5eUg1VXhNdGZlL21HSmJvMXVMSThmeGw2ZFBlCmUybUc1VG1TYVZpYVBmeWo1MURVZi9LUForLzk5Q0g1L2JZaHlaRDBmbVBOY1V6TmNoeDc3Mmdha2llSG51WHB5OTVEdEN6SjhKc2MKK3RIeDlPajN2WHMwN0NkSGx0dUdNOHR5REQvS21iNGN1emQ3NzkxRVE3VGNXSTc4S0ptYWFacW0vaVRITVNSVHpoei9KOHMwVGROLwovcE1rMFo2bWFkclBFRTNIZnZiL2ZlLzlURU8wKzYxVmZoTDEzSm4rOUR6Uk5FMS9HZnJSYzJkcWtoNGRlKy9sRDgvVGMyWW5QVW4rCjNudHFocDcwMjR6N2FHbVM1Kys5bjJob21wNHJ5KzVIMVBmZTBSNmFwRzg1ditFclovcU50c1VyNTExMHJiNWhzaFpjVWJrbDBXdGoKT1hMODIyWmp4KzQ5aXByYmh1c3MxN25PaldZblRiT1BLWHIrSHFaK3czWHlieXhYaGo3MVo0cWkzbytrSjlOeUhGT3orMyttWWY5LwoyNXlwMzJZY09YNnVERC81dWM1NTlPdys3SnczVTk5VHN2em42RWVTSTgzZVUwK1c1bG1lcCtsTnNwdWVKRW5TVE04eTdGemF4NCtpClo5bjllSkpuMkRseVJOT3pqMzc4Wm5tU2FOZzNEOWMzZk9YUWpRSVQxN2VWNjV2SzJ4THllMVYxbFNyQ3RSaFNmcStpeXRzc0srYzMKZXNNMWFsaTk0U3lzRGRlNVhuS2RLOHZQb2Q5ejZlbnYyQUo0NDZJdEt1ODN0UUU0cFBNbEdMeU41cFNxdDNtYjUyMGhXNWI5ZTV2NApROGpqZzM4czFSdGtPUkx5SFVWdisxNWN2YjJMb1FoNWlLRDRFVm1OaThBVDVuOTRXMytJRDg4RXJ0Mng4UEY0UEZhTmg3ZjUzbWlFCkVHL3pOckR4TlVSUmxpcEcrUFEwMUZBaXZGM1JEOUNoWWZJMVlBWWpzWHB6Rlk0cVZYQlU0UTVoeVZUNWp6RGxlbTk3dEFqWSs0YUUKeFFoSlFGbThySmJNN2llNzY4ZGt1amhxZDZJaUVPOTRTci8vV2lZS0ZyVElqd1pld3YvS0lqclBwUzRwK01kZHVNT1BWOW1LZlV1bgpDb3FkVWdYRmlPMzZ1LzBtb0xkQk9xVUtRc0lVMkhGSTNFbW1zL2JEaDVwU0JUR3EyR2toaW1wNzdNTnJWblIvZU0yQ2ZVdlZFMStHCk1PWDZrSllxUnNwYnFtQXZtU29mOVhqQlNOa2d5eEFQdjc3NElHUlJacW8vREpReENydWw4cHFmZTI1VU1wektndVdyUFE2UmpXSUYKVWY3S2RhNlBURnRTYUI5TlNlbkFCbTlVaU5RY3NmWXBUSXI2a0hMOXlaVEk2eGNSVTE5UEhmZGlYQ2tvS01Zd3NYcTdHV0hGM2R2SwpXUzUydE1TeFhDNE5GR3paVTJsMUFaRU9wUXFTTU01aTlBNmxDbjRMSnhYc0RxVUtkazlqTVlZT3BicFFsSG9DSmRWSUh4WlBOSCtUCm9YeFF5TnFSUVU3OTFlOE1Ja05MeFZDcW9EbExzSHh5b2NickNqZ3VsQ3BZTC9pRlVnVWJEaXdWN0F2aVFxbUNJZ3RxLzBMcm5MU2YKSEkycGs5aTl6WTlLRmV3ZkY0TkZWdFJFS3d4bGNIQmp4U2N2SzVJTlNPSHlObjdGWS9HNkl1b3dtbmJ6YW4xV2IzUEF3cmtTU3FCTQpHbjlVcWlDRWhEVCtyWHBIRXFqbFBhaFVRUlF6YVhrUlZLcWdsMEJhM3RzcW5JY2FPUld0QjZoVXdSQ0VzVUNsQ282aHlldDlwMVRCCjhRSjVLWXJYaHgwWENYTzl0ejA2ckkva09qcWxDanBvRmRmRFdGdU16OVREWXlBdGNBUENlZHJReEJnUDM4VkxLZDROcHNwblNFcXgKMnhnRTdCbG4rZm1TRVpaaXoxV2xDb1pmTHQ2bjhqRi9WRFFuOVlsSVZtZU9sQVhMUjVaSUx3a3VYS1FnWEd6SDlEWlR5SFZnTFRWWApvalhGRjRhMnhucW1hcWs5c3Y1NWlkcWZDR1ZpL3FKcXlIcXNib0hlWld1TytDQ05xdzg2dFM2ajZaZXJmMHE3V3ZuWGhKeHBmTXQ0CmgwVEVJbFZTRVBRcVFxa1ZLKzh6R0kremdoNFFFR1VHY3V1RnJFNTkwRHo2VUVnTlpQeHppQndTUlNVR2NKeHA1VXp4dGdTS2YzaEoKYXFMNm5qWXNVU2d3VUJ6Zmw5cEZreEsyQnlkeWFSODN0UUdydDgyeVZERTZlTnRpNFczZVJwNGs1T2JWdlEzeXBsL2sxV2xxYnRkbwpPYzB5b1hBWkszWEhXTFNZeFdDeldLSllpZEdoOEo5SU1DQnEzWjJxMGFjT2FUYmxzaE1lTzZYdTJOdFFOTmJKcERxcDREK2hUbXJyCnhIbjc3SVM0UDZmYTVHMnlUK3hUMDlpSndoRXozS3hQU3ZXeFVReXAweWRWK25RektvL2Rrd1BPY2syb1cyVkNKVTRPZGNtRU1pMGEKY0xMcmFnMm55bTBSNjg3MGhnNm9ueHZHamdMc2JRd2cyRTgxVWk0R3R1RWpyUEZ1Y0hnYkl2YUkzZGYrZmNzODU5alZIOUlESW5SNApOWTFLSXUzUzJiZDZYUklCZTFSSXdmcStaTFZnQ0w5K2Y3bllhYUtIQ25aVkRGV1V4WVB2UXdVaEtzcmlmK2VoZ28wRTQxMjh0WC9mCitDYnpHUlpkQWlmaFAvWkFZZm9ybWlqYzl3MXFPNlFubG9pNHZ3K2k1TDRoWG9ybC84WjhmVWZES3J1NGNUc0xkL2lRaTh0WmVTWWsKU0hGRHhNYjFqVTRNbzRENEM0MllLN01zRFMrcTJIdXRrR2xGQ2V6aE5hVUtRc0ROd3plNFVoYi9SU0xmNStyaHlWVDVINm1LZmRIbwptSElUTDZYR1ZVR1R4MDNWa0MzRkRua2ZrdEx4bGlyNGtPRngvMTRWSEhmWXNqQVplN2s2UENTR08zeUhTTUw0anRnamRwcFRMa1NQClRYdGtaQ3JZS1hqTHZSZ1pNalFTWllIb05NcUVkT1B1R1NrZGtTU3ZMUitpUjNyMU5wcnJiZitIcXBhL0VOdElRRnFwaHhMV2NmUmEKQ3d1YTlUV1ZMS0RwVUtwZ0NicVpmdUtxeFpoNm5OV0ZnNENVemdTMTRiaVU4cEo4eU1WT0Mwa1kvN3R5c1hzNEY3dTNmUlR2K3A3SwpXNkVwRnp1YVFPZUs1MkxHMkZjakZac3ptVWZqckw2bW9hRzZxTVl1OVZtalM2WnVKb3pQU3NrYVpLSkpKblpJQWhLU2thNFJab205Ci9waFUvU2xXQTZ1YldDS0pKZlpIWXZWMmlJY0ZMeXhvVm04ajRWTkNOVGMrNW8rODZTUjJGNllkeFF6S3hVVlRFSnBwYkN5TmdIMjYKQVpuY0J3WU5peXdVWUxHRk1LdzJKN0hQd29Xckp4UVNLZ2lPU2hVY1pTS09PRFo4UkFmcEkzWnZDNWNIcUlSVFJycFFWNUtNS1RNagpNd0lNMkFBekV3QXdHQ0Fha0lrR3Mva3d0Z2NVQUFOR1BDaEtTazR1TGg0UlNvT2hPQ1FNaU1TQmNSaUdnUlJGWVNUSGxGT1NIUVVECkRGRUdETlFsQ0FsSVZSYmpGK2gxMm5WRUQ2WnRqbWx4bzY1OXg0c1dtaGFUYS9VRno3OWIwMUVEc25GUWRYZmE2d3MzMDBSREtnNHoKQWdmaEZhSlFtUkZuVUZUcHIvRElEejFVQXIvUUFZUk4ySDZ6ZTZMdjNlUFN3R0dmdlA0STdrSWF1ZkVlRUQ5VktPSWE4Y2JwTFlsRwpKMjZtUDQ3MGp5Q21jdnNzUWU1L2xDcHhELzhiTjJscXZUaUMzNTFwT3ZmbWlwdHVHNTlNRWRyaDdsVDdVZG0zRks2bytaeGFrQWVECmdSVGQ2bHVXa3BYV1k4QVpBSmlmeFI5N29kY3hpeE43OFZIcENDb1ArNHI2bE5BZ1FhSUNZdlNQRlJwVTYyQUMxbzlPSGJXWFluL1IKTkpLNzJDK2lsbUxmcGg3QlFINWdwNlRJR2s4d1VuS2ZxQks3bG85VDlGelY2ZTc1TFU1SlVrQ21YOHlPNHFrT1ZsUm40NkRzdjFwTApNK3ZXVkRQbnFBWkxKZUtLZExWZVpDZlpHRW9pL2FSNmI1MnEzWGo2S2gwbW1xejJDcWloblVJQjJ6OThyTFRhSDdGSkQ1U2JKNWR0CmdjVlNLbGR5LzdXMlQrbjc0WnlvMG1LcEpWcURmMXphNnQ5K2tJOUdKOGlZWjY3MWorc3pwMzhDNE1sdkNTWGYxLzdyQ1QrZlZWemUKby83TFJjN0g3L2w2RmN6QktUWnpiNHBKV0xORThHRXQyMm1KblFIRGxCeEY4dlc5cE1EQ2E3aEJlemxqQnI3T21POFY4SU9vNFU5VQpXOWtzZnFpaFhPYkxONEQ5WkRZb2tiaTJ5WTBSZVdRUVJ6cTZKeHhOVUIyeHJUMTk0cGNlRUhQcGtNY0IrL01hWGE4Vm9DRmk0clZYCmRpOHpNVzJVbyt3dmJxQm03OSt3ZVpuL01LQlpJaWQ3czNjWjdaSUVHY1YwSHlUUjdkS1IxVHNqQnJDNFNZeHhhSW0xY3lmRUVxNlgKc2srRExWOW5NeVVCak4rcmVST2ZjbTBob0Yyb09rUmJMcFc5L01SaCtOQnYwUktVRkpITExpTmdnRC85T1F3c2VwMGMra2ZINllPZQpjcjdPY1U1RDJPM1VQZzNZV2lnUXBuM3BhbmNobE5mZnBlMExlNjAxd2F2RUg0bmZqejNENktBWDBocEJJTnNpVHdyNFF3UUhsL0xxCmdLaWhTUEVlS2pPOTZtUWM5VDZFUHp2K29VMlg3bXFVQTFjK0w3bWVhL2YxN05vbEZ3MkhGWWJSZTdHS29XTXJobDRnSm5DTlQvdmkKaG5helhWdEI3VkNVNElEZC9HUnVsNVdrMEhiOVA3ZGRDNmkxTTR6UWRyNkp0cUUzTmx3dXY5Y0ZTVCtZQUt3MjA4OW1ackdKNmVkbgpNUmF3TXZhakxOQ1A5REt4a1lvUU1wYUNYaW1nRkV1UUtmaEtRelB6VGJGMGVjWjc3WXNsaWErVUNvcWx2RTNJSzRIMFdJSXlVTEQrCjJPY1NrWW1tWThsV3lmWHBuTDRJOEJKTFNLY1dYNitrUklxbE1LYllWMnIrWTZsMUNrbXZGSmFQcFRpQnN2Wks1b3RZNm40WmgrZVYKWGl5V091bFpqcExTcnlLUk9FV2VIWmE0ajZNb3BoK3loTi8wOVFoSWhHbWFsMys2Vk5NSkVHNFZXbU83UU5CeFlYV1FBdkUzSWFaeQpLdWkvdytBSkpkdHRxVms4Ri9kQlF6L2kvN2pGanlrV0E3VGpMbllhSDNvUnlmdk0rS2hVaW9rTmUyZFFJY29zNWY1d0lORkVzZnNICjFuSFc5R2pHNmJLR0pEdjR4Qm9vWW4rR2FQdTY5RDFOQ1YxelRocnVRVWJGVXZZRUkrclN4NzB1ckdJWkZRMkptZTRVUHhJV2hyMUQKaFlPMzNudWN3eFBGVHFUNSttc0tTYW1RakNxd0FMTEVtSldWNUl4c2kyVWh5eGc1TERhSndIT0FoSzVnU2Zmbmc5L0hEVytac1NsNQpnZ01ZRXoyMThUOElZZ0dQY2ZFenVsS2tIMUVCUCs0enFTOXg1YnJRUjUyNEEyTUwya29JNUVVb2ZjMDI5Q0JWZkFEZU81aUE5RFV4CkE1WlJwekFaY0VLT2xuNmpScXczQW9UN0lsalFudmJZdmM3R2J0Kytub1J2ZTJJS0ErQVJzTjd0YUFxQ3ZKbzhiUWVlTTNOMjl2TzYKbDFZTGhIcjFpR2ZzcnZnS1FHcmRBSGJEMVlPaVh3R3l5d1FLR2l1QzgrQXF1a3VvVEszYk9kVXdqSGFhNzNwaStjZExzL1ZZeVdsZwo5NmpUblByZDQ1aW9uM0tpSzZNVVF1ZUYwL3c1U0xDbjB6czdRem9adU85SGZrVkdvVUVab0R6REhjY1UvMmIzY2JFMk8yWnZLbFozCnF4UUc2SDRyNVhGYnpNU2MzOUJ0WWJOSE5NWk9xMVZYendWY3diRG1PN2d6UjhzWjZ3NzQxajE0VExEZkFtZ1BGdz09CgldXT4KCTwhW0NEQVRBWwoJVWZJOUllYlBjMGtaQ1g3dUhYYTJPTmUrbEhIcEphbVdNaFlFMnhDTWhVK3k5QWk3L0p3SDhsODA4enhjb1pDOXBuZ3crRkRpQ3BNawpqcWFBUE13dWQzVzQwT3hqaVFFRGJ6dlFvbytoRTRIWUxubmhzMUU1bjRQOTRZOGh2Mklob0dLS1FBeGhyK25pOW94Q2ppZ2J3dmhBClF3ai9CTXlCZGxoTklqWjMyT1pjUjZ6azJRbEZxZXF2am1FczZrQ00rWng0N0pGUmlTdTQzYzdmQjVZRkhWRzA5L0Y5VTZzL2M3UVUKR1E0dkxxd0gxOEJ2SzVHQ1ViQk9Ndkhqc21LS1QvRkxJQm5GbEFCbXZoQ1FPTWFxMnYyZ2R2enBvZXFld3hqelNvOStGSWpTNms3MAppWm1pb3phUEFvbUI4OTZxYjRlRnNkMVdwdW9ubnVubFhiSEVkUEVBck9uNmhKOTdNSHNGQjRKaW1iSkhtWXhkbmxLQllMSFhnSlpRCkxMRml1bmF6UkdPdGZsbXp0djVnYjZzWTBsS2doYzVkbEl6Mm9GYVdIazZLLzc0L2hjcU8rLy9kNjBjbGdBVG1mQm9YV0p1dXIwR3oKNjMrSFZpRDhhMk1nTEE5Wlc2K0gyam9ZRmhhcFlmWEUwN2FISFNXeEdhVmc5RWNHQnZPYVY1VitDY2Rlak9lcUNDc3R1NTdGUGRBYgo2K1pSd29vTlJUUkVzRVVCWklUTnJmVGNpS2NmMnhYWko1VXNlcG03M2g3ODhhTFZicnk2YmhQdU9oaVNnejJCRC81ZjMzdFB2eVVCCm43b29pVi93dVp2cDl4NmlQdmpVczREVWV3S2s0QlAzbHF3TkxwRzZTWWRDSjNWMnFlWW05WnVkUkh5V1kyMVNJS0NUWUNQRzE4RnQKT2ltbFRRSkVkQktmalUyUzh5c1VQQ1h1dUkvci9TTGsxbUlKNUpVQVQ3RjBHQnpVdmhJNTkyaHFVb3FsOGNrenp1bGlhZlNWQ0w1WQppbUMxdzNMejdHKzdhdVV6WU5vTUtwMS9wR09RZEFsdjVmWmY4cEt2azJVYUtGTGZkUlFyRGRMYm1ZRmlQR0NFRjUxYUJLU1ZSK3NRCmtINkp3NE1JaGNtd0VSNEdkc2NhakQ5Z2dGS1I3ekNTTXk4SHZLWGt0VWpKMGhkUnh5U090QmVxUkZVNW5zencyMGlRUnZMQVRsMkgKalQ2ZmlRSUp5M0ZEWU81UjF2MWpJRG5BUUw0eDJzZjRIYzA2c1FITEMwTkdyY2lld0krWElCYUNzYkRpN1k2R2RtVENXSEpZZGZlcQphakFDOGNEaGRTeUJ5OEQ2UWU5TUl3MTQ1c0FDOGRvTUdvWDlyWkQ1dS83aEZTY01sa1Nna3MrZk1zU0JURWtzSUdPeWZBSW5kZUQ0CkpHa1FqSHVuYncyNGQ1bDRCNDJDWTVuN0lzcW55Z1kwQlpnTk83Ris4VTE1ZWs3SWtva2lrRkdxSmZwUjlnUkVlUmtwY29RaGFNWUoKRUMwN1NKTklXb2xCMHpOclo2RU9hRXFKNTBHNDNGcVFsank3ZkFQenVDQllETitBUWNjUDRTSTl0ZVRqVEtzdWNMUnBKVWtHMmlLcwpUcFpDTnhpMjA3OEpHR0FnNG8xaVFoeEVRTWJFbXJxb0FjR3pBeG9Zd3MwRHJ1UVFyVk1wbU5JMHVRem8vN3AzdVNnRlZiS2I4RkI5Ck9aaDZHZXJHWlU2aFpENmJ3K244YlpmU0V0Q0FMamp6bFZJV1djUTVjaHl0djRVbWtiaDArOWlvaG8xREdsR0JybDJ6c05nNTlLNWoKSEtLb0xkZGhqRXNRYkFTQlkvTFFJZlpGbUtma01wZyszS2IrUGpDc01lcUlkMUZuTlVSZHFlMjdhZkk3aUlpbmhrREZ1TTdwcnlQTgorQkJlQk4xWHJvR0x0Tk9uQnNqZStOZkRiMUlDYUJaMUdJQzVmRTIweEpSbDhWWlRId3kwOWtSUUIvKytRWVBDNHdvNitlbEduV1VsCk11YjFza0FieHljUm5SSzhKRk5KckM3RC9RNGs0RGJ6S3d0dnRTSC9LWndvQW42Z3h0c1ZaanpQRUpLZDNxMnk5a0d5Q1BKeG1mMmkKQXNVTVQvT0VSeWQ2Rnl1QjRERHVWT2dMdjVOUThhdVJFVXV3UWdNc21wMzF6eGtkcmJoaGE0MzV3Q1RVZm9qOTR0R2s3MGF2cU9mawp3QXJHNURBRDg3Tkc4VDljQlRYSDl0WU1Ibmt6eS9ma2JmbVE1NHFMTGtaZ1J0bG00SGt0aGJSVTNqREhOSmNTaUh2MU84emN1VzR6Cnp5UzZBZUdkRXFmNmRiMzVRbFYwQ21TZ1BpUG1yb1V3OEdxak9hYlU1RzVySjcvMHVOckFSakhMYWw2NGlGbXJVc3djcGtMOFlMNGkKV3hxY2xYM1RIRlk0SW5CQkRwYlhFOVM1WjluWm4yNUJvZElRbFFvY2FrbEljMHJaQWc1SVpnVC9YZEFrb28wV0ZmS1F1dkhBNlpGTQo3bnlmUG5XaFYwTWlCVzdIVW1DR0hyQlEyT2h0SUZHcXl4RzRDNmhsZG9xZkNlWmtzNDdqanZjblRCZ21ScGpQNm40K2p1NXF2SG1yCmhkTW5ZM3JyT1NBVFJGeFVob3lxNXZHWlM5SkVwM21pei9QUXFBSVdKaGEzZWtVTVdlMURvdjB2RlBVL1ovWk5LUGlVSkJZVVlMcmwKc0tjVngrdTBMODQ2aUFpUXMxeklYSkJRellYV2NxNHdxajNmM2d5U2tjMURSKzErZXA4VVpSUXF6VGZpOHAvd2NQbG91WjlMNHBMYwo4WlJFUXpDUmh5WFZsS3BDMzRjYitlYWRCT243UnFqbE5kamVTTm9wV085ZndTc0tjUGxMQThzeDk4ZjVVYVVoK2YyUUtsSDl4cWl1Cit0N2N4SzN0WkdDcDUxYmNXb0hsakhEY0E3UE9JbVRmYldmcUpvYmE3aFBmbXZrM2k0OW5yZU1ZSzZjNnB3dlVYV3haQURUUEpKMk0KSjIxWmE5TGlJS3J1cTlLV1NReXhyditIeXY1aGE1ZTdYKy8vQjVnUERjU0wzQnZ1d010dzBTQ0xWcGFnU3gzTkZCNElwR2ZueEN4RgoweTgvTWxOT3Q4OXVocDROVEZJKzNnT3pvdG43KzZuaWlXYWFXYzVWY1luSzRob2h0Yk53aW5ycnhCTnhsNncvc3lxeUVtSVlWR2pKCkNCR1poSXJNMlJXbjljSkRGSVZVb3dYU0RQeGFmSmQ0K2dQaXViMTBTK1RZa3FyQzJ3djNuN0djVVpGcEczWERrTmRwQ2hjL1pxN1gKc3NkZWxsM2JRbmduUnBSZ1FsVjRDa0lzQ0c4TkVPY1dYSGRqY2VNUFVHdzJwcmk3UjMvWWFnek55QnJERzlCVWNwYUhubjd0LzdVUwo4SFlDTTc5WUlmOUtxU0Y0VytCR0l1L3U4eGt3a2dqakFhVlFmWDBrZ0NGMzI5ZEl1SllFZXBaN3c0aUNjbmUrV0NRNEJXU0JlZEs2CmRQY1h1Nytqd3Z2NDRrTHJsc3lNdzRYRkl0KzNzR3htUG1LM250MWRCTjVrZnlTNjNWM0Jlekl0cmc0K0tRbkVNY0o3dzkwaGx5VmEKcDZDdGZpNUJCcHZ3dGEzOUgzTGVvOXlILzlmVXlzeW4yZWlnYlpiNk5xWVBDKzRldFA3S2UwamZRU1Y2WlVxMFhkbGY1TFVHYlZvMQppNTdiVGdBUmZmbks2RW5Odk0wMnZ1M05UWUN1YlowYWRQQy9TNDByQWpSYzI1NEMwTWp0UEFIQXk2Nlh0NmZwTTNOYkN0VDJ1eHFNClpmSDR5dXRPaTVDY0dCdGl4MW0ybFArY214VjBWaWc4Z1ZIYnJUTnVoeVlpaW9yTmNhM2QvbFNvS21ESGx0cjZnN0h0Nlc2UUdYakYKeEJ1UnZRbWgyVmdkV3ovOHVENEVWVi9hUGo1ekRjRVI5UTNXZlBUMElRNGV2RE5YdThpVDBCYk5oM0tYcE40SUc1QlZxTDZzNy9QNApSdW9UMVhxU2MrUEVJYzJwd3pzU0kvdFlHdDdERUlNQ3p6cGo2eFcwam9rWWRBaHdiSVd2Q0EwOTI2NlRkbStXU3U0dEdyWncyUEtnCkxkaFRQTVNXQnU4WjZybGhadHVOZVlKeDBlNElLYXZtb0tZVFI5QmFxNnEyUncvOTZOMEJyamZEelI4emF1YS9TTzZyUit4aWdMa0gKc1Y5WnNGdEtVaUZyanU2M3VZZ0l5Qnh6dXFQZEZhdUNuVFF5NDBUbHlYWTdEOEMrYW1UWXpyVS9rWVhJa1hISDlkSmhQZGdJaStOSgpSeEc1RUJZa2UySVRRR2dhQkF6Wk9tQVd3S2hubThrYTFzV1VnZU44RDhHc3BYZHZ5R2pidE9XRHZHcENoN1lvc2VJMTdhaFNna29MClVRNGZGR3FqSDgweGpjU2NXSnZiMmlLeEwxa0k5U20zWllIYzVuTFhzTFN1STh2aHk2MVBCK1EwamYrMml1ZUlRWEdQSERaZHA4WDcKekdxSG5KT1I4VzlWUzRyNzIrZUdDMlYvSFR1aU1IS00vcjM3YTFBRGhTT2JHRWl3L1R2RmhzSkNsbUdWdDV2NnIzRDdFN3lDclczMgpOc1gvSjlIQ3B3RWlyc0VNMGNoUG43b1E1b0RYYXkvUGIxQ0dkYjFSQlB6L2E3SXdVVzZ4NzhtL09VWndTbzY2aTVVNFpLUnp3YmsxCkdYNDY5VzFtQ0tueTV0dTV3bDBDMmI5ZmluMDZkbytoSjV0dnBJYTdyc0Z6VFYzSVpWMXJnV2lMcVFRNFlFZCtlaFNybTdJQzBiZ3UKYWZqZzREZ2VLcmkrWkpCblVId0daS08rUHphMHk5N0xFSjZwZEJHUlB1NFBiZUNlc2FDMFkyWVRnRG1QN3ZoaUJlUGF0NFdGbkhUYwpHRWZOclNObFNyOVFiZDV6bGZlSG40YXhHWnJFcnRSRUFmVFFoUlIyc1Z4VFlvU3hxdVZhcFJGK3JsUWcySk4wQk5pNlEvN2REZFlHCllVbzdWMXJvT0tmNkxhTDdKcm0zWGJseVFIUDZpVW12SGhyWVBuOE5PcThCd09WTWFlMERMN3VpT0pFa1I2RnBycjk3aGZ3NVdSZ0IKaFF2VHhCcW9ka0dxSFhId3VmcTRCOXEvdnFON2dBTWhER1p0a2RwdVJEQzA5dzY2OXRHMmllc0hxQ1p5aXpIYmZkSnRsU0QvNVV0YQpEL3NENXJUc0dBWVZnelpXd05JNlkrc3JVTEVhMUVVcXZXRmh2YjVZbXFmR3o0cVdtMjVNUXh1dDJtRG5HVlZXVExXSllWUFRZZXY1CkFIQnl2WWJYN21UQmxuQmQwTDdFR01XUzBwNk5VcUEvWEQ1bHVsODZpZldzY2FWbjh0QVdoYzNWUnZGcDBUa0JsVmFBbFN6ZEhSSVcKWG5LUnRibDZOcHg5bmt5QU0wc01ERnFLRTFnTHhwdytEcWtzbERtaHNYNytOV051NUhObVJnbUoyT0RETm5ocnVQM29NemFBbHUxVAoyOFMvbUZqNTY0d2N0dG1ObmNPelpObmpiMGNRMGpKaXBqbDJscE5ONnViQ0NheU53VEFnZlVpYkRPRlV6M0ZJOHBGRHJGT0hlTjNoClhYZ25NTkYxdUtudjBPWkM1RWMyMTRZTjNtc2FqazJCTkZ1SGpBdWt5U0psWXQxVXRiVW1ocWpxZlJBU0dTWlBaMXBIZlYycWcvdkUKUE4vQnBKSmJWSlprTDAvNkhaeFUwTEtHVHJjQmMzL2pjQUpEamRqakhQSDNrUW1rQzFlcE5YeVNOM3NMa0puVElaTGxTMEppZWkrSQpkT0ZiQUp5QlJCK1NqenpoaFdXUG9rZEtJczVJMXdBZVY1U2IwTDhEM0NTMnVRdW0zU0c0OTFxWklUeG9HMXVJVUpXWU1reVFhZUdVCjJVZk9FeG5NZEZwQ1VMWDhEWjlBK2lNY0Q0UFcvajhEYXF3dzdXdDFCUkdRVnk3OUZLTTlnUEtTRmNNMzk0NGFqU0lpVng5OFAveDQKdUZTYkdXbS9BcFZpRFhFV2NZUXNPWU5rL042dGx6QlBhNEhGL29pQzZWUFFLVFg4M3NxaFZZZ3NqMlIxOTYwTXJyY09lczA0UUFpKwpuRG9lL0hMTmtWU0hKdy9CVmlNbXdEVWI1d0RTdkNwdnZLNTRVOFc0cEl6dnBwWktvMmVoSi9QL2cxYjc2eHZYYWoxV1Z4VzcrSjBYCkxsTThudzVMSytZbzVwcFdvRlVZUHViaHJnSXZWcnhQVGRMZE8vWVZCK2lnd05oblRCWVdCZ3FkcDJ4SGtBYTRtQnp2RHgyR2VaRy8KRjRWWWNpSUczc3YvRHFZUWJaRmRnOG84anNZY05WblA1YVkxQkdjaFdna0orOE1maG9aK2o2ZDh6NjhqalQvdndwenNMNnp4Wmc3RQp0Sk9KN0VXTUlXWkdTTWtxaUtkU29UaG1XVVJrU0VjYThTU25talk3anFFM1RmSGsxSkRzVUtkUkVERTdzU1o1QVNOMU9JYUdSenpGCjhncVdoWnA3RVU4MDFpYms3a0l4aXFjYUxWSHY3cVRGRXFNRDdBY08rcUY0QWtlTDlVRko5Y1FOSVo3bzZYbzg1NkZ5Ky9LUGlUSEsKYVhLMDc4UzR4Tjhmcnp5eUFKZ1pDL0FWSkRUT1FFZW1JUTZCcElDQVpHOTUrUDZENnZjY251Y3JKT2RldGJ1NDVSemJ4ejZHNVdJTwplVTlJbTBkRDNZL1A2VDBVd3JRSkVIK3JZRWp2dUtBRVhid2tkWmxld1JGM2c0bzMrNzhxRUhRQ1NZQ1ZZL3JhWHNXS090S1JmUFZ4CjlISCtWTU5uejg0VTZNZU95UTYyb2xGTG4zOExkdFpLWGZaR1N4TGpKbW9JMGtDSkFrMHJ0VlpXMFlEcWM3ZnFPNDNTS2xsbFJpTWUKaVFVTk9iZmw4Y0NYY1J4M3dXSjdCTVpGNGhQUnpqSXAybUlRVFBXbk5YZWs3MkI1NGxpYVE5UGtPcUJMT0ZLRkJISzZsMU5xS3pSbQpFand3TGhKSTN1d2lTV2xYZHVKRk9LZVkzQVhiTUlDbFN4S0pyenU5bVIvWm5wZ3lCVkJRdzl3SEVETytHcmw2eEI1WUxCVmp1WXhQCnB3a294bUFrN21VNTJ2QUFrZ1ppQ0JYRmpoOWtPQTlUQjJLVmFEeVYwOGZUOElycDV5dk5iRHdWY3dMOTZnYXVqUT09CgldXT4KCTwhW0NEQVRBWwoJSjR4TVRpVDk4ZFJ1ckdNOS9pcytubXpYV1l0bjZjYnlxR3c4alZ6Z2pXeThMQzRHQ05vYU9BVTg3ZkZVdy85WFFlTXBwbzlMcTBUZgpNS1h4RkxyL3JrTUQybjQ4aFJOYXlGQVlhU3FFYVNHUEp3U3E4djNRZ1Jaako2cVpEZjBGRW5KNmdhQ2lVYWpOQnBpVHMxYjI5djkrCkozVWphdTFwcUhCQnR0TG1Lb2hOMkxsQ0lwMi9GUkhtV29yOGg2WnMyVDIwSW8zdEtSZ0ZWcXNPL1ViVFdmUHdieS9QaVZIWUt4SWsKKy9qMlQveG9JdEdDY3hoc0t3WXM3Q1B2NUZobVo5Zmw0N1A2OFJFdzRjNW9YTHhRZ3JvT2I4TmtnbE14MCs0bTdDM3RMNExmRUdPbQoxa3lFbU1CTTY3WDd5WlNXN1BvL1BXVWZ2bzA0aEVFbVE4MXlDOFlnNGpZNTlpdEFEa3o5SVZvcHV1eFIxL0VPVk9KYVZSbXRRTlJsCjg5UXBvcld5ak9pVnJvTEdPeHBTSS9Bbk10Y21rS05DckZKNGt4My9TTHhuMXZiRTRwOUxFRGR2dDd5K21vS1Z0WElMclJkZzZXQlMKZkplTElkMVRBcWhNQ3RxU3JVdG1nR2tIK0N0QUF4VjdXd3ZuUVVWUlBPVGR4M204Ym1BYS80VE13RDBzYlpmVFZnUU9DMU9QMVdVTQpjaDFxVHd6dnRvczJPUkQydzl4b2VyU3ZwbWd5MkRPU21idzhqV2ZWbDVVYW5OUHpudUJ4MDZsdzdnVWdzNnlFNEhHUHZIU3E0SGQzCklkb0E1OHpseHFQdHNLbmFZTXIvZDNSVnhJYnlaTWR3RnVHdHFscEZEakxQZE9NMEV2Uk1TdEFCWFZmY3JpTmhGc3ZRTU1veHAyNTIKajl3OWdlRHhCS05NdnpyVHBrOTRmRllueDQ1eHR6ekE5d09GK1BZTUNEZyt2bVErMlZNR3NZTVUxNjhNLy9XUStkbEczTmFKZjlrcgpLa2tLekFIc0pMSHE1aHhpd1B1LysycUNKQzhBSUp6UkVsd1RsTm1qL3krQ1BEZDU4cXZ4RWo3cXNFNWxzbGZndzhuNXhCbjVQd3RICndoaCs3VkRlMkRaVmIzTW9IN3REQmpoN1VJYmI5YjZ0ZTJGbmdVcXZUM3FHT1poYTFrODNTQ2EzSHdNTWxHQUVVQnJKbHg1VUNtclEKWENIbDVHaEpjOXdNVytHTVVIR2VjdXJIL1NLaERSa2RSQ3RGQzdrQnVzemlHUzl3NW1sTlFmZE5vSlp4SmE1ZDJjSjJFTzhLTEVRbQpseG8ydEpzeEx1bUg1ZFg3ejlRQzM1YTkrVXlJTlRCenVBSmxOZGJnbncvY3BFY0gxR1hKSURkSnVkcmdULy9hU2M4bWRrcUFVbWNJCkF6K0JjbHNNRk1jWjRrRERGb3ZoaW9OazVubkpUZDY2Z0JrSWErRmJJZjI3MXFnMjhpeEJ0cHViNEVoSWp3Q3M0dC9nUFJFVEE5dW8KQ3QySmtSWENNamVWdGVjN2gzL1ZhR1hIM0NRaEsrRjFKSkF4L3EyTHJtS1ZCQjlBSjNla0tQQnZ4dE9vRDBXNTlaL1c2bCthMXlRbgppeVA2OXhielJmZ2VVOHY0US96TGl2MXYzZmNtNHQ4T2RFTk8vSlRVdjVOZlRpUWlqK3NlQm9pYy94REJ5RU5Nek1hL0FJL3A3dEsvCjh3RytTSTV0d3U2bWYyZEtNZEMraDE3OEM2MFBUQjNQS1pNTi93WnFwMTljL1N2cG5aSkI4RzlZWWNxRXZwUkxRaER4YnhMcjN5cm0KSlJwUHcvWjlNc1NFMjFFTElhb3o4OUNpUU1sS2loY1B1RFdnVHRpREhTcnhLdVB2RmxmMUp2SC9sN3dPTUdGVVluUTE5eGJLY2VIawozaFZMemtXMjJRc2tNRTh3d2p6ZXo2TmJDVDBEdTlSaVNnMGw4THJWdkpvYXcwNmUwVWhaV05tU0plNkNqUnh1bDNsNGlITEtxWjh4ClZ4aGo0VkRmeDdjbGxKamxoaGlkS1ZzYUMzaVFOUlcxb2pwTmFUY0RCSWY2eFlCTW5DMFA0d0JoL3RVWFk0YVFwQmxXK01jWnI5WlgKS2x0ZFZKdnlsSE4zcHY5Ui9LNllyZnRXMExaSHNIRjZobVpQVGRWVFZmVTFTa3ZVWXRSV1dhKzUrYmRmRzJPYUxRMjdvbERDcU0vcwpQcGhiRkdrN0NBRGJNb2JPU3FWKzY0ZnVMdFVGSHp4aUtTOE1kY0s3aklKdzhtMHg1cG1BOEZrTG44Y2J5dmx0eWVCNHo3bG1kMWltCkZVeEt0dHJJaExSSkxIK3BxRkQrdVoyR0FPQmpUQ0xtM1BKV2lUbXEwRzFRSkF4WDgrVGdtNHRoa003czNWMkJvYXhDNGtNTVVVZ2UKRUV1STBxQkg3ZUVnOXhwam9DU1VDcFhhSjRPL0JjWldaMFJxNkhYTWZ4dU1icDRzY2dDRkxESnRhNmNRclozd0RwREJEZUFXZjNaVwp2Z2FaZzlzQm1TcnphQzFLeTNKa1hqelU2M1QvazRDSGJtYUIxRkJ2b083MmROUUVGVnpiZHFrL0xCWWVkdHl5cG9ONk8wQ2VWMU5KCnBabi9DZlVhUWZmbHFJNVhTaGFwTlRZV0dIMmtTWTE5RnQ0bFM3RTZBdFFMR3NFWkdUZGJJbi90Z3dOdllXcmphUlFUOThvT3hEck0KK0NpZUtJREc0OCtERFhGVEJheGxWOGNjdDBYUmFCYVBPaFY3clg0ZXpydFhHTmcwV0VpVVRhZzhoNUNzbUx2WE8xcGd0dmppUnNNdgpQQkk2azJ1NXk0bnRYV2JsbkFBSTNxMDd1K1B5NDVZMmpUb2tkSjVGNGNrR0QrRmZocGtrbGh1MkFBdlpiencyNVFVcjdTZ0lYU05mCkp5bWI0MHRkeG85bHdPeGFGSytPK0RoNUNjUms2NWRnMGZDS055ZW1pZkVmWWhsVkhJN2xVRVZJTWpsWjhVYWNJUjA1UC9SWnpua1kKaUliNWZtT0NhM0RIL1c1SmdNdlVBbStNaEZPYzZDVzBYS3QxRi9YUUxnNDhncWZBNitaeVZQaHJaRDNpbUVPN1Fyak1ZemUyMDI1SwpMK2drWC9IaEQ4RjJMNERUYk1Ua1hDclU2Z0RueTBWUnI3QkJuaXdFNEx6d3dzQnI2aEQrMDkxUVVCNjFpeWhBQi91WlR2ei9zUWgrCm5LUGlPVGlYZDVLN1E1OUxMdGpPWm1QME5BUW5lWVlFUjNPeUZDc0Q1bDQvTVUyYUloN0gyVkRyaG5iMWVpZ1V5UTVDZGF2cWpkU3AKODYvNDJNSDBDaHJySEVZaGNBSGVYVmxYYjJiYTFJWDRQWXFoUkx1OXZYcWg2RzdoY0RzQ0JTR20raVgxY1laZXZjV2FhcmZtR2h0OQo4ZFE2Y3Awa2hpVUxubDdaYlV5VEZGaDZ2bnFqWFl0OFNaUVpiTm5scS9JN2gwaFpxT285RGVBMFhyMlE1bSsrQm5LMzFHZFl1SWVaCnMxWHY1TmNaWGg2VHp6UFNDRXl4cXJjSm1wRmppZ3pPT1cyeW9yZllyRHpEQkZ1OXpVL0VtMWtBbHFQTk1PWkRKbE9pd2NVTjl3K3QKbTZFRjE4RlFRRVQxZUdLUkFwdGpUSDNzN2ZYRzFJVHIrVXJnY0w3blVMY0RkQnh0Rjc2M3hSeDR4a0hhaDNMT1NSVU04MzdXN1JMYQoxREVZT1lGZjRPMVV0Rk5HNXRPTFJWQWhtQm5PZFlpRG0xdDNBYXFpd256NEhiak5rQUkzcE5aNWdiTHZjZi9ITTJSdlNGZFFmNWlWCjFySENoMDdtTGdPRjJMVnRKWWtQNHRMR3hFTzRTZC9hUkZnR2VFWTVrckpBQnhOZnZ1bFkyL2RTRXhsc3JGNFo4VUJzeExndEFUSHQKWHFEeXVxU2JKMzcwZm1yUjVYdkNPV3VhNGphNDU2N1VMUjhGZW52NlJ6VnJiV2tjSmhyN3pmUmxzT0x0QjN1UkRsbkdya1RHUktodQp6d0labndYS09WOEtFc3Q2ODBSMkFDSkhUUFhRM3dNZ2pOQmtpeFJzUm1WVVpYZjJkMmpUQTgvczFpZTF0blhsbHcxblcwekJmcTJaCm04b0R3OVUyTXlyZU5YWisxWkMybFlBVW1sL1phc3d0ZWxjdDhlNEFYNUtIMzExcW1ESmZXa0p2QnNHWGxxRHN5TXdwZDRFdEtYL2IKTU1IZGorLzd1MHRzMUpGNjdnNEdvRWtXOVlTcFpNSEd1ejJ5YnZubkpWQUQ3KzU4cjVpbkNxQjZtQnQrYW9WTEhXZ2piUEd1ZVE5TAp3K0Jvcko2NlJ4TUVRZU5kYnJtRzJyc0FOWlNHQWpmc1lhWG95UUlrOGU2bVhoUjlnN2F1UnFkWlNNY0hsdSt1SSttcWNUemV0YndjCmVoUUVGOXpndXl2TWRndFdIVnVOcXZBWkFSWlhpb3dNOGlnQTRDcSszSjh1dm11aERpYUFCcjR3a3RSK3l0QXFVZWpDcU1mbDZsN28KU0UzUjRYSGZXSFZueWt1V1Y2dVRLQ29IUnZKcWNEMXJZTU9XY1g0dE16VUlTOWV2UnhRRGZqTmJ4R0JXalFqRmQ5TUk1WVE2ZDR4aQo2ZmR6WU44WDdEcnhBbGVzZHV3Z2hEVEkzc1pQMEZpa1Nsd2xZSDMzdGUraWpZOVB5MzZUMFcxc3g2SGlhbUxPRHF2VkFZdHFYSmkwCkRLNTFXdWFKd0NiUEQrcG9UWWhhNlFpR3ZZWUh3dUd6Vm9SYnFDYys2eWk3SFB4VEwrSi9lSmJtSWFrcEFDeEY5R0VURFM3eGFya2wKN1VoWFdGU3QxeVY1YUd3NC9ZVUh5bDczUk93SXN6cEVlSnZqa3BRNmRKT0pTT09XWmRLbGRkU1djNEdkRVlDaEdYRURqTTNiWTB0bAphSmtnOHJOdGs3bG8xZXkyUkFGTEJpdHlTN05wTVhwZjIwSERkbGpydkVBSFBYNDVoNm1waENJWTRNRnEvUlQ4RzN6ZytnOTVBMTMxCnY3Ti9FN2dZa3pSSysyZUhYZnJsczhJNXYyc3lZUHhoYndjNEhNRVpYaW4xT3BJMmtNNU1WVmV0cGZGSUt5VmNPWEo3VTNzK1lvcE0KZFFPN0FtNmVYTGMvS2Fyb1k5SGRqK25ZVGU5cHZrc2V2MkNVTjRhZkNxY0VrV2tHeDEvcXJIaGIyOWlTNW15Q3RZTHptVklNTVV1VgpDWWJ0V3J6Qk5uTU1hVGNyOGw1RWhtN05oV3N6SW1CcW1MUldTRnVoeWRybVFHRk9oaVNvbGdQdHZ4OGk1MERZUWU5ME4ybHNaSndiCmpWWlJqVzVuVjVrK3g4d2tvQTM1L1ZzNWgvamRQOGthYWlWdXlTTG1INTJPN3N1S2RjY2dFaG9wN3VqcWlaOGU0M2JaWXZMMXE4UVAKUHRFYWdyQWNoRlQyQ255QUNBZVZQNlF0MWIrVkxicmVyTUlOank3MmtoQ0VzMzVWeDA5MnpOMGZOejRDS0xySlg2RVVpeDFWM1NWegpGZDh3UXRxakN5Wml3N1hzbXBmWTlZQkI5UWtUZXZ3VUkxR2JoaHU2VUN6N2p1d2RlbFJhSjYydForRjVNZUFKTVJrUWlyWEpvdDAwCmo3aWNXZkhrQUhUSWMwTXhvck53eFpHTEhNTVd1ZmZDdkNJZ1pSbVpEV0UrN2NZdzJnK0VGRHBsQUdLaWgwNG9oZ3d6S2tYMkt0N3kKem91NG1pa1BTSVU2YjZEYkNVTVZCdWRDY1pBSk9PZHRucFpvaktQVm9BRlhYL1ZHMWt4MGozUURkRE5hNUJkQWNXRFFKeHJMQzQyNQprejA2MkZ5UC9kWGRENjgxLzAzbndENENtNTk5WXY1RzVMREUyUXJhNWFzVFl2aWtid1ZSVDgwR3luSnZ2di82dDRTTzJ5c2t5YW5zCnNlR1YvRmsvUW95eXRtM3ZqSmg1RTczNU40V1RVeVVvWjU4U1FVTFFmQTVyc0liQmVQeWxaZDdMRTVWdG5uanFOWjBCZGVxU0dXVWMKVDVSK1JaWG94QTFRdTNWSjBFakl6dWt1dUxJVXpzU2hpTEVtRHIrL0NQNXl2V0FiTjFGQjBzam9vcGtETkFaSTllTkxKcHlCSnBSYQpGRjZlQWUwTTNLRjAybDVDWlR5ZDBka0pLOW5BNzBkL1h1T3FsTzc3NVFYbk5kVzNsYjBvNHhYWFpVRWRsYTdPVk4zTmRFZlJRZnNHCjJJWVAzQ3hucGR0RkZ6RGRjeW05cUxGL3BoczFxTUllQmwyZXhFdE1GL3ovbGNWdTNIbXB4b2ljc2VsUnBHSVJVWmt1WVlibm1ZVzgKbXhNMndYU2ZHTWRBNXV2V1VUWk10eXFFbjRLVWF5bUZTdmNJVkN0Z25SZkErdDFnZHBBU2J0OGJhcDg0WGFVMFlhRm92bEpFNG15MQpQQ29qb2w1SHJlanc4OC9LVWJPNDNnL0tvNzJ3MjRlMk1yeHpHUVdQVjU2eVZFT0VpZFB1aFl5M3ZkSXBKQjFDMUFsVnQyUlBoN2NlCi9Bd0RlUFg4UVdXZ0k2ZDBscmhjOFVKd0tla0ZWenVoN3luWnFxZTRYUVFUK2VycU9hL1RxQXg2QTNQWWJHNExBNEZpcDRFSWUzMlcKcVVKMVFaSjNQMWFUVkVYam1ITWE4WGFoLzgrY01uU09Ma2dtSHFZbEwyT0ZlSmdYN2RYUmpGYnJ3K1R4QWwzcTdVWnh5azZ0V1Z2WAorcHBsd0V0MHhxSTJTZGZkVWNUWWtHUlFiNFhqQVdObWZ4Zko0aEovL2ZIZ0VRZEhBcU5MTzBCMjdnOGM4ZkZLS09QLzNPWXAwcENDCk90WlFlODg4aUV6Vml1dVZqUzJsbmdFdzlTeTZIdnJ0U0N1N3lKOXp1MEdrWitzZ0pRMTJSRTk2LzdQb0l0TWh2TWh3aXd6ditNTE0KQ3BKUk5lVEpWTVMzL1JFOUJsOVpFekJSUmVjaC9uQkljcmFiNk5UTGxRbGZTNWdTcW5ZZklKMGFqL2hFdGgxbGt4bWpSVUdma21KNQp5S3B4aDI1ckR4czhUQlIvY1kyWmdRTGpqaTRFUGN0UWxURE1DcDJiZzVyUUtqeUpjMkZ5VG1iSGpEMDJHQTc2NHNFdjAzTEg0VFZWCjVESTZnd3ZuMnhMZzY1VjlNeUNZWlIxOXgwL0I1MHRXUFpLWlhpUmlkcHE0VFdNaHYzSGx4Ty9YLytvQjMrUlZLQT09CgldXT4KCTwhW0NEQVRBWwoJZkpjZGxnWTJxMXgxQnV1bDBWM3lUd3d0WWdKL2dSbEpvTmlrRkI0cjFvdlZUWnNDTXNNQ20vTWlMT0JQbEVQVGRFVGtHdllZM050eAp1MFc1eWFnZXRWMDJPelNmWnVSY3V3RlowZlRNckJUaXdDMWI4cnVaUHF2QnRINW1kZzB1clUwaUxyTkFuVTV0MDVGSlFYcExEdFdNCjVzTWd6ZGFKZHNqbkdtbHlqWnV5RkxMemdnNzlIbjZVZTd6VzNwQ05Wenp0aUptdDJPd3ltYzFhMFA1OXNtV3RQUCtwOWFPODkzbU0KNnZEQVhPdUY0UmlGN2ZDdGtjL1p1SVhuYUY1Vk9FTDRNMXROM0gzalk5YmFRNTJVYm5ja05LVmNzUkp1dDhnUEJROHVNK09YMmtYcwoyRzY4MXR0MDNERUw2WTNCQ0ltUXgvKzdZUEdpTDljaTAxMkhjWTVoVlo1NkV0OFZ5eDkyZHZtRndDN1pIZ216S2pESUpsYmZzZVNsClUyUXo3d28xeHNWblFXVTBPbmdNRXZ1WU5wVmhxVytZN1RFWlpISC9kRUpKVWt2ZmdrRzFscWd1cms1YkU0elhsNzNJaXZBTWtoSHMKc3V5MnJXZUpJdmM2aStpRnhRbmgyeXh6V1NwRkNRWmhlNis2M1hGMXZiZUV2V2pibEJDd0FIZGlWQVFFdnpnWG4ySTZ3Z2gyLzQrTgp3djR3anZYRUs1aHpMa3dCc0RreTQ2dStFdHNlVG5yTmpydUVtMjR0ZkF3ZWRkMStRREErMjN3K3RiYjJINkRma3dKMHExaWp5Smt0CnFMN2VHdDJrWWEvcjIvU0lCZXlDbzRPZE5hc2xVNnFtc3pSMGFpUkpMd3MzKzRPeDZLMDEvQVNBRnY0bmhRZzduOUJjeSs0c1lMd0UKV1BVS1haVVVlb25KN2RLV1dvNVVRS25vejE5S1NJcjh2ZmhsQkhCVmVhNFpuSnBUZGxJS21XMS9ORG9sd0w3dW5xRjBrTDZ2NHhibQpkWWhOU1BqY3Z4RHNiMkxiQ2FrMTczUFRUSHRObTlQQXpDYzkzWlVIbU5rVFNEL1VsaS9Mazd0azJYMEdnM0FWdk1Dd3dnVm1kbEtyCndHdDhiUlNPRXc2a2tLQkRtN1Uvcktobk5WY0doVFh3NnJ2M3V4Rkhoc2U5SzZveFJWMS9OLzJ1OTBqaG12RDJOQi9ncWwvVk9kRTUKQnJMOE9lb21GcW9ZNVBrVVExYnRyejg0VXF3SVBoeGIzeVlVMFlZeDI4QmdJa2JpSHViU2lHSEVKQVMyUk9TUk9PdTFJdkxJQkRFbwpMTmZLK0RYdkVqQlZTOGJmWEt3YW9ydUlqY1I4R1ZPR0g1YWVITEZaTTRtajVZZnBzK1JUdDM1OVZ3dGZwc2RrZkRzWlNzdGNLNHZqCncwNDVxL0g5VVJ4MFY0b1I1M1ZTcTNnUWZnUUlVTytnWDdlL2VhTjZ1a3N0VFRxTDRSTzYyWkVrdGZmTUE1akxjakFnekYyYlFPWlcKMS95RUZaNStjaldRRkpEekdiLy9BWnVnRll1cFZZVkZNV0VvQ0MwUEZWTHJXVHZqTkhJb3JnR1Fqb0Z6OU51ZE9PNk0yZi9qa1BPdQpaZXhGY3lxMHdtMCtmRjhwZ3d2YjVEMnhMcDFMNkt5SlVPWUNMT244YTZKRVFTTkM4MGpKallWbTQ0M0FCUkFRL25MUWl2L0l4QnNJCnF0bkhoRlBOcXM4aS9WNTQzOG02aFYxR2RkTTl0a3o4ZXF4VTQ4NXFpS1A3VjZaUm54S040SzN2djNMNXN2SHpnTHpRS1N6SWFTL0YKdEZjY1VwT0p1UXhKYWl0ZjA3akhoMUlWQmltcEErRldYRUlRUy83eVpsaEpIRmtXaC8xeThRcDE0NzhOU1FUQzdTa2tPMzhFY0gvUwowTGpJQWhXSk03cEliQldJR2JCem5iZHNyb0tRRXE1QWZyNmhGRyt3dVU3NWoxaG1KeGw0YWRUeGZkMkxTOGhiaDJheXZ6ckErMWszCnNodTg2M04zdmovQW5yV1BPQ1d4MnhmeXNoSE5XN3dRVklGK1FhOEVwTDVGdURUMnkzcWtRZTFpVDJjM0FzeGtoaGUrOFMvZWFzMUQKUXMwYlptSm0rSVhGRFBWSjVQSXhMSU9qanJyNGZpbVNYRmlXeEN6VVptY21qVXNpSzFrUGdLS1VlRitvZmFTejA4c2gvVEpnbUxIcQpLMnA5N0s5UkU5b2NpdS9kcUM0cHAxTVJ3VTZVRHBGMVZLT092SXcwMWlzMlFTR1J3MDZLc2QxYlJpcGFjVkRNTnJ0Ym5UQnd1VDlkCnZEL1JRY3ZTeDJLVC9xQUpwd0xUTEN0QWVaM2NEYlJlOUNMZFRtYVpZcVdlZ0VKRU9OT2dnNVVhWGNkcGphd2xOVC9xL2hJSmhsRWoKelE5YU9PTXZleUEvL3pBWWVlWlRiNVE3SW9RZE5pMlkrY1J3K2dmSzdvNzV1UnBlcittdnJ3a3JCcUk4ZXVCY1A5a0xoaXBmUWFObAp6TTlJbStTbnYvdlZ5ZndkU0FBOGFyNklIS1lSb0gyV3FKVWVjQyttdXVFQWhZb05LbG9yK1pmRXowbExNVDRTQm5zbHZlTlpRYXhaCjVuVGVtQU9wVm1jOGJQb1JNeExTSnRjRVJJYUhqZ3RXcUZZV244Q0FHVVhXWEE0OThhdjkxMWFGRmdPSVA3VXB3VUNYYmFra0R4KzcKQ09sa09lcjNraGZqdldDT2JiRDhYKy80aFM3emJpMmc1V2IyMG1BbWNRNGl2WmExR2traVYyb0ZDL3NMMjJ1TXBDS2JNY3ZrTlJvVwpzdHlNeFBkOFpaVUllenZRZkExZEJuU0dnZEMyQTZwVVJydVl5RTRKRnNxZnZzYVZRUnFFa0NhMFk5ZzR4ZGdiZzEvRERPcGdJSVpICnRnSXJUaXBpOXh2VXh6YmZtZUdDZGVwenByMUlqdjl5dGgxZU5EQUJEY1NmbDI4eUJkcEJFYUc3ZXZ6bnNmc010NnhwemM0cVg5K28KTjRKQjI2bEdkdWtSMmV6MVE0SjBqUVpUUmtXYmF3OTJYRGd4RmNjUWd6QUJDK2V2Wk9kK1dObThpV0FzdWZkaDVDeFRsdjJ2ZWU0RwpvaGNHMGluT1pib0dsOCtIOTVuUTYzZndhNzZ0ZTltL2dHYXgvOG1ncWk5Tld3cERpR3gybEhEWVQxU2RBMTREem1KUnZVZEkxZndMCmZLVU13OU0ybjluQ1MyVHM3R3ZnZC91ZnU4cXJzeUNuYlkwNU1HeGxxRnZRK1lmdXFIZ1hUakltOHNvVUVLbDNNay9BeHF0NDBQbFoKQkJ0akNrcVJOdWVxMkUyaVJFalFMTndJbWZGeCsvRmdaQjlnRDBqR3UzNEFoRXZ0dFp6Z1ZzQ2M5R3dQMWFSWjZONzM5eE5ZUmYyMwpweENlTGhIeXZEeERnMmR1Z29UUVNaaTNCcVZSWVp4dk9RWmo4V0NNYWliakx1WVJwUnZwczJ3REZoaEdtbjBVdjZnTVhMOUFIbjFUClRvNkpaMVphY3JkbHEvc2tHdXlXN2NObXhvYXdrb0hBTUJnRHU2WFN5WUprc3dZc0N6VjltR2hFUVd6Q2NsamY5UU9YQUxsc0RDbzUKRzFTb0I5dnVUaVVURmthN1NxVXBpWk9KVkVYVWpGR1AwMGhKek1NYzBZZmNQTmpFdmVqMGcwYi8yMmtpdm41WGJmSmkrYUhEdkMwYwpoWVRVV3QyajZTSHVYWTQ2WkFmUTJ2VzRyV0tNWVdyemZtdGtUTDJSSUhablJaWGllcklWSUlxQjgrcDRjVDJqbXZsa0hneFMzeVlFCkRnZVNNY21KUjdWSXFtWWJiUWliTjljdUZrNmljdVFxMnNxNmdhc2NyNDdTaVRjbGZMMEV2VFBMWDNvWE1PNEtqNXF0cGJNK2NEbUkKRzhUOGVoRGVyS0Y4aFo4S0ppY0w5blZNOWsxOGdvMmZtcVN3bHFvYkRPSjRrSUpRTGMyTVpONHpHR2NwdlVmRzA2QUVickRxQTk0VAo1UUMvRGxBTHZwanhyejRwZGtFRjEzR0xlYlNpU3JLYytGUHBSQ1dESUZ2WUwvb0dqT0RwejJlZHNDZlhUc280bk84MHNvd20wbnNSClRNQkh1amkzaU1QQlIrZGp3bENXM0Fpd2k2VEUyamcwYXFhK3h2ei84dWdMMXVDSklLSUpZNEIreVk4QXhEQkppM2duUTlSV3RhbDIKYWZ5UzFzWlpDUERsMGNpWjBRWEJZRnkwcWJ5Z1hTUzV0UFF3L25WWkN1NEdpeDRBbVJzc2RQclVGaUJVS2dYNUdHcTNLWFVveUNXeAoyT3lQVTVzdmcrYksrQVliTGFVWEI2Z1BCYmk4a3RYME9Ga0dUQURVYkxKa0RnSms2WHI4VkhOQzVQU3gwbmVuc3NwaEhRVU1Pc1pwCjF5a1pWenVEYjhrMllmNW1NNUhjKzZnUS9INkdmTjgwR1BjdEN5RE04R2plNGxzaFM2bkxvR2NNdkc3Q0MrY3BCZUREZDJtUGNranEKUStVcW01RVIvNWhEUmthaUJ0bW4wTTN3Qk1KOHM5YTBNY0VJYm9XWTd4NllUQWJVeVR2cUxwUCt2bEs2TmpNQzVWdkdVTUk3ekRiRApXTUZNSDNRNnhkZVVPRkJIQkVrcHcwbG5NbkpodlYyQUM0Y3MwMG1GMFBsZEl4MUFiYlZNNkhwZ0NJSDNDNWUvbVVlTEd2L1hJQ2VhCllmOHVmMFZVSjRwSjZINVVJK0pJVnJnWHMwbmJwMll5L3JSTEhSYXdab0lQcWh6MGFtQmhaQ2pORzhndzUvdmk0SHpPTHIrSGMyOG0KMEV1RXlLZkZrOWRqeExLU3l3VzlUeDBwUU13US9kUE1VQ0UxVVJJY3pQNUliVDZSd1F1dU12QU9vY3U3NDRZdmlVUXVCTmgwbHdvbgpidnBQMjRwNUQ1RXpCWEhsbXVEc1BkZXV3YlZLZmtUL0p2MktqT0RqM0V4QWUrcVBsMEM0em1WMldIcGhaeDBNaW5ESTUvTDQyNCszCkNRL09wcU5ScXBvSG9LZG1aUW5Ea0pLV3QyT2llQ1FDb1BmVlhWbUhpUjdGNTZmcWQyQ2hZL3NtZU9iSk1VbUxkTUo0N2hqeUhFRUkKcWw2SGV6UjFGMG96MjFHNVJVSmVCOVMzaW11Q3JDOGM1cHNBY0E5Qk5KSWFzcFluTzFGRzVYUmtDcFEwbjZPSnFVTS9Ka1hFeDl2TApsRU92ZFQyQWNZMnJaTWFpTXpBcUh6WUpzU1lrTmtTVHBFVDRVTTNGQ1BzNlVUUWI2ZEs2Y1ZiYzZOdVdEWHJpaFZDSjRoQW4xcFNNClB2YXpiMndnaS9NTU5YWHpqeE9rbTZsdUpkUW8weEp4Q3pKTXFMWE1nMkMzUmp1c1BCQUNickkybmhqbmdlWjdtQjFscTVES2dEVGcKT0hxTGxiZWhBbldmbllpQlE2aEFPNnFxM2QxY1Q4bEVVQWdYeG8yd2doc0tuQ3dBNDNYYmh2SVN1ZzdXeDU3dzBiTkFMRGp2a0ZxYQpqQ0xpY1gzUUVhRzYrSU9jU3NyNFN5djBETFM1VUJlRHRDVkRzMlFQZ2xkbUZ0eFBQOE5rRTNMV1VEU0J4NmxvN0pvRllUSVBUaVlLCkNzYTlYRzVEczhHTVNzZ3ZYNEpKcXlkMG5vNVZ5d2hqcjdodDNWbExNR1NSbHhYb1dIWXFkV0pROHpqaUwyM2FsRXB1UlE5VkFUSzYKZ3R0T21EdTIvb2FSNVdVQnZCZklic1RPdVdsa0Z3RnFkSzFRVUNpZ2FKRzlnaWVVMGtJblZ1Y2RscGZaVWtQNVlodi9FRnVWaTQwUAo5cktZbEZ3c3lZaE1PWUlHMXBoOXpPZzhPNHpoKzQwZWhWQm1ZNlB5aFFoMjQxWHlEZm9zUFBvMFhxaU1ScmtvVTY0eFpqOXYzT1pPCmREdy9lZHZFaUFiY0h5ZHd1c1VocDNIVnYwR3UrOE5lZkJmU0Ntck9CT0JEVVVmVUVCRTF5bFlYTDBvSmVaMUhhT0E2RzhwNWgzdWkKbGQ1R1puZ21idHZJaGtmN2ZiMXlnbUpNZ1VXOHpMK0MxZlljQ0FldkVNVVZXQ0ZjeXVOUXl0ZFRjczVLYysvVVNpY2xIV1YyaFYvcwpGbDIxNDV2d1pSaGFPZGZGOHM2VHVLVlYrbk53aFczd1h0bEtOT2thYllocHJKaUxjZ2FUbW90eGlobUtqVTVsbGEvMHBZQlpETTlFCnNjWHNoYndweGxNUGlRaGxIaGJBMVpwRDIxNU5GaUIrcGtFQU5YTk8waE5QazhyTzVCK3BTUnhyS3dkckw2emFMQjBqdmE0em5PTmYKTXl3V3BnV3M0WUlDVE0vUnZJcnQ1NnBuTnlRb0IrK09PUitHUmRIbFlWNTdHWFpWeDMvOFJqQ3pEUUNQbDRpQjlGVmFoUk80aUtEcwpKUElJZ0llOU53TFU0cEdLQUZCbmtZak8zMjZnYmw4Qk5DVTd3eG5aSzJqQVlpbFVWVDRTNzFzVmtJMDF5SmdMYTZXOWpna3kvcEdBCkdzTUs2b2xmVk5sRUVrNVFpL3RWc1dDTEhOSU5wcm1HRjNXNFBJcitGMDRiamtVdy9TbjRKL0daMDlOVWRVUjNGcmUvbmtFRDk1WmkKWjY1c1BlSUtjV1l6VExGUlkzd1JidDQxc3JyTDV2NWxPQTFXQWw2NDFLNnZ6dHVFa3l4SXRUVDVoMjhZSjB1cDhtRml1bjV2MmNEbwozL1ZUZDhsSE1meWVBQ05nTDduT1dnZXZiZGE1amFkMUpCV1BzOW8yTjZWSzhjODgwdDR0QThnbFV0cjU0bWtnMk9BSThQRFA1UVc3Cll6ZVZHUTdFOWM1anpFTzFBOUNOYjdWaTUzUFNIWEkxRy9XRUJPaUpadTdseXIyS1p3WmdwbFJmWTJnYTUrU2hPZXc2VnNWMENVVVMKTWsxWTNzTjhSSHdPV3cxR2UxemNURGNtZGczMmhPRjNLK28yWUM4R3B3QTBkaFh0UVdjUE95TnN4dGlhYzZIR2JJalZjL3lldjFxMgpaOFllc0Z5dHRndk9ENjZ1Sk5Hdm9YZDRrcGdPTktoZ1hadG1sVjJHL0x3SXZ4aGZCUXBWWGFiaWlVOGZjZUFpRFlBRDFUa1NiSHlxCkZJL09VVjVBbWw5VFFvZkZ5Q25zQkJnbzBPL0RzL0huWE5aRzd5L3dWbDBhdE9yVEFnZDhFOXliU2RBOEJHMkptdz09CgldXT4KCTwhW0NEQVRBWwoJYTZRamNmZmVCdTlVZE9sQkpoWVNFR2xqNzk4bllLMDNEM04weUJqS3Z6RTNYRUZSUnE2NGNpYzE4eHhqS2s2ak9ET1pQSm11OXFTWQo1K3hxV2dDbm1takFNc2Y0WVlzS1AwVm1RTkxCK0xEVFUrelJUai9WVjRhOTFiSHhuNXo5WkZ0Q3VvT3drK3VFM2kwdDZqRFN2U2FECktGZHp0ZDJOc2g5a0d1Z2ZNTjBwUWFkSk9SSGhSYjlQZHI1NFRQUnZhYnlJbnE4b2M2azVTbFVDZkFaaklUeEE2RGx0WFFHOTlqdFIKQXFBSkdxYUJMa3g5TktZaXRnZFgwVUJuTFYwTUIrWFlZOHFLSzJFTzdUYWx2aXhmcStxd0d2dzFVT09BbFZ1TG9aa3pibXZibWdIcQpnL0NTaFkzVVZaM2JlZ2JJbUJKT3J6KzAzdDBBZ2gvV3VQNEVtVUFoYlg5U2dpU1dvUEpvaGdNZTJWTWdjUEp5T0t2Z0tCa2lHeG94Cko2Z0ZvNCt4b3RKby9veWtxSWc3TFhCVmpwSVFIb3lLYU9URm5YTnhabUNmQTVjYksrUFNCWGI0S2k3THFXT3pzL0ZRM3RvOE1nbU0KME5WaEJmcTRWLzJzRHdxSjl5MDB0UFVESm5vb2tSUFl2OTZVZUZzMHhXQkdrMGRIV2lOYXZWMk1oempBMEFOWHByR1c0ejhodVBKUQphd3JYSks3d3M4cjBBdklpNXppL2NRNU5PT1FnYktFaVRSdXhxZDdzRStzZzQ0ZzkxcW00RG1mcks2Yi91WDZPUHJqMHFwNHB0M0NqCmdrbG9uYVA5d05DVEc1elkwWUtpbkt1UDRZdzhOY1hSUis5ZHYrVlBUMDlhVmp5UFp0TGtnZ3VhRDk0L3E3NThTOS8ramFUVis4U1YKOG9QNC8zS1lyZXdmekd1S0MwMXo5dmtRUE1sSEtaei9ySTlCclVOWEYyNzl3dnd0eGZVNzQ1R0hMamtTbk5NdVJlUVMxdG1SdzREUwpkNmRMdER1YVFINXpwNGdhNWtxM0FMT1pEUWZ6TGZERzlTMUVmMFAyMXVQK3ZqRC9JMHp5MXdkRVlKTUdUcktqM1V3R3lDVGpyb2xJCld2VTdSUDF6aUxXZnVCUjgwRlBFQ2NZaHRsSlVpU0hkUEZHYThBeXRreHdhcW9WYzZJelVERVdXL2piWFc2WFlRa2NxNzM4RzVmNWgKMGJvUGhHVE9Jbzg5cWY3R0RrUWVCUjVMaWZFZ1JoQXdpeWNkU1c1U29mVE9HWkpPVTdzWGFjTmZwQTAvd2JlejBBbThkODZRR3VjTgorNUEzN0VQZXNBL2l4OFo2dXVzVXJoTEdtRW9ZWXlwaGpLbUVNUTdYcVdYcWJBc1dJZGNlOHg4dGZldkV0MTZrdnJYMXJSbmZqbjE3Cjl1M2F0eisrdmNMYkxid2RRNGEzYjNnN2g3ZDdlUHVIdDRONHU0aTNrM2k3aWJlZmVEc0tGVzlmOFhZV2IzZng5aGN5M2o0RDdqVGcKYmdQdU4rQ09BKzQ1NHU1RDdrVUFrRHNiRG5MT2VWbWhseFY2Q2RuWFhrNlppWmpKakdLZktQWXh4RDZGK0tjUS94RGluMEg4STRpQgpBb01BaGY1dzB3ODMrM0NURHcveFlTY2ZkdTRSNlJYbFlTTzg1eDArdXNOSGRoaXBEaWZWS2RIaEpUck1OSWViNXZEVEhJYWF3MUZ5CldFb09UOFZocWpoY0ZZZXQ0UEFWSE1hQ3cxcHZlT3V0dTk3YTY2Mi8zanJzcmNYZWVzeXR5OXo2ekszUjJscXRyZGZhdXEydDNkb2EKcnEzbDNKck9yZXZjMnE2dDhkcGFyNjMzM0xyUHJmM2FHckN0QmQyYTBLME4zZnJRclJIZE90R3RGZDE2MGEycGJsMTFhMGEzeHJwMQpvOXUxYm45MGV3VUxici9nOWd4dTErQjJEbTd2NEhZUGJnZmhkaEZ1SitIMkVtNDM0ZllUYmtmaDloUnVWK0YyRm01djRmWVhiNGZ4CjloaHZuL0YyR20rdmNlUHRPSGpBL1lnVEV2Y2hjZC9DNFhnNnZuenNwV012SGJHOXZQWWlVNHFaaUZITU5DekVQaitDZ2ZnSEVBUDkKQmZuMVlhRTkzTnpEUTN0NFNBODc5YkF6RHhQaDRTSThYSFNIamU3czhMTU9IOUhoSXpxTVJJZVQ1bkRTSEZhU3cwdHltRWtPTjhsaApwemdNRlllajRyQVVISjZDdzFSd3VPb05XNzNoS3plTTVZYTEzUENXRys1eXcxNXUvZVhXWVcwZDF0WmtiVjNHMW1ac2pjYldhV3k5Cnh0WnNiTzNHMW5CdEhjZldjMnhkeDlaMmJJM0gxbnBzdmNmV2ZXenR4OWFBYkMzWTFvUnRiZGpXMGJaR2JHc3BXeWUyOVdKYlQ5dTYKMnRhTWJYMXQ2OGEyenJiMVk5c2gyMTZoN1pGdHY5QjJERzNQMFBZTmJlZlE5ZzV0LzlEMkVHNGY0ZllSYlNmUjloSW9XcmpkaGR0Zgp1QjJHRExmUGNIdU50OXQ0ZzdzT3VPOEFFdmNnY2JkZ1NjNDVpeUdUbDlwZWFodDdpSm1HaFV4QzdET0lmUVN4VHlEMkFjUS9nSC80CkI4Z1BCL1hoSUQ0c3hJZUY5TENRSG03bTRXWWVIc3JEUTNqWWlZZWRkNWpvRGhmWjRTSTdiRlNIbjNUNFNZZWhjeGc2aDQvbU1KSWMKVG9yRFNuRllDUTR6eGVFbU9Pd0VoNS9nTU5RYmpuckRVbTk0eWcxVHRlR3FObXpWaHEvYU1GWWJ6bUxEVzJ5WWl3MTdzZUd2TlJ5Mgpoc1hZZW15dHk5YmFiSzNSMWpwdHJkZld1bTJ0M2RZYWJxM2wxbnB1cmV2VyttNnQ4ZFphYjYzMzFwcHZyZjNXK20rdEE5ZDZrSzBMCjJUcTZ4dGFMYkQxbDZ5cGJXOW42eXRhTmJKMWxhOGNMYk0vQTloQnREMUdpN1NiYWZxTHRLZHErNGtYYlliaTk2WGc3RDdqM2dMc1AKdVArQWU3YXhsOWRlWHExVXZLUXFJaklOTWROSEVCRDcvUG4xNFI4Z1BoeTBoNFAwY0ZBZUZzTERRbmk0ZVllYmQzam9EZy9aWWFjZApKcXJEUkhXNGlBNFh6V0dqT1d3a2g1OXkrQm1Ib1hINEtBNGp3V0VrT0p6MGhwZmVNTk1iYm5MRFRtNzR5UTFEdGVFb05oekZocVhZCjhCUWJybUxEVm16NGFnMWpyV0d0TmJ5bGhyblVjSmNhL2xMRFlHcFlUQTJQcWVFeXRUWlRhelMxVmxQck5iVm1TMnMzdFlaVGF6bTEKbmxQck9yVytVMnM4dGM1VGF6MjE1bE5yUDdYK1UrdEF0UjVjYThLMVJsenJ4TFZlWE92cFdsUFgycnJXMTdYR3JuWGpXbXZaK3BHdApJZGs2a3EwdHNEVUd0czdBMWhyWXpvSHRIZGp1Z2UwZjJBNkM3U0xZUG9MdEpOaGVndTBtMnI2Q1JkdGJ0TjJGMjJXNDNYamI4WFllCmI1OUFTYzQ1eHhqZ1Myd3ZHWHZ4a0VtSW1ZT1lPZWp6NTRkOSt2aCs5b0QwY0pBZUhnNjZFN0xEVFR2Y3JNTkRkVTQ2VERSSEpGY1UKaDQzaThCTU9RK0V3OUEwZnZXRWtONXpraHBYYThGSWJabXJEVFczWWllMXBEVU90NGFnMUxLV0dxZFp3bFJxMlVzTlhhamhMRFd1cAo0YTAwekpXR3U5THdWeG9PUzhOaWFaZ3NEWmVsNGJNMGpKYldhV210aHRac2FPMlcxbkJwSFpmV2MybGRsOVoyYVgyWDFubHB2WmZXCmZXbnRsOVovYVIyWTFvSnBYYWpXaG1wOXFOYUlhcDJvMW90cVBWWHJxbHBiMVpwUnJhOXFqVlZyN1ZvN3JqWGtXbGRZNjhpMXZyRFcKR05aYXcxcHZXR3NPYTkxaHJUMnNOWWkxRHJGMkVXc2ZzWFlTYXorQmd1MHAySzZDN1N2WXpvTHRMbUMwdVoxR0RiZmZjRHVPdCtkNAorNUt4bDlaZVZydFFFRE1GTVRNUU13UDcrTERQbnQ1UEhnYkt3MEI0R09ndXlBNEwxUW5SNFNZZGJzN2hvVG5zbEhQR0VjSGhJcU0zCi9IVERVRGNNYmNOSGJSaUpEU094WVNVMnZNU0dtZFp3a3hwdVVzTk9hdmhKRFVPbDRhZzBMSldHcDlKd1ZScTJTc05YYVJnTERXdWgKNFMwMHpIV0d1OUR3RnhvT1E4TmlhSmdNRFplaDRUTTBmSGFHMDg2dzJobG1PK3UyczM0NzZ6aTBua05ydXJPdU8rczd0TTVEYXoyMAoza1ByUHJUK1ErdEF0TFEyVE90b1dpT210VFN0RmRONm10YlV0SzZtdFRXdEdkUFVXcXZXajJvTnFkYVJhbTBCZzFwclVPc05JZFphCnhGcVRLTEYyTmhodGo5SG1kaHR1bjVMaE1iUjhXY1ZMS2pZc0hBVEVURCtmUGV5ejk0T0hmNERzTUZBUUhRNml3MEp6V0tncGg1dHgKUTNET055STNYT1JtMUlhZmJCaktocUZyK0dnTkg2bmhwRFdzcElhVjB2QlNHbVpLdzAxbzJPa0pEVWVkWVNrMFBJV0dxODZ3MVJtKwpPc05aWnpqTERHdVo0UzB6M0dXR3Y4d3dtQmtXTThOalpyak1ESnVaNFRNem5HYUcxY3d3bXhsdU04TnZaaDEzMW5KbVRXZldkV1puCjNYZldmMmNOZU5hQ2FFMkkxb1ZvSFVYclE3U1dvblVpV2kraTlSU3RxV2hkUld0R3RNYW1kVGF0dFdudG1OYVFhVjBoclNQVDJrS2EKV25OUTZ3NXE3VUd0UDZnMUNMVVdRVUt0UzZpMWliV2pXSHNLTmhsdG45RjJHbTAvczBIT09Zc1o0Y3NwWGs3eGNoRW5GZ0l5L3pEVApEelA3TUxOUEQvdjgzT0dmTzZBNkRFUTNoNFBrc0pBY0ZvckRRbkM0Q1llYmIzam9EUSs1WWFjYmRyWmhJalpjMUlhTDJMQVIyM01OCnFvYVAwakJTR2taQ3cwbG9XQWtOTDUxaHBqUGNkSWFkenA3TWNKUVpsakxEVTJhNHlneGJtZUdyTW94VmhyUEtzRllaM2lyRFhXWDQKcXd5RGxXR3hNanhHaHNuSXNGa1pQaXZEYVdWNHJReXpsZUcyTXZ4V2h1SEtXcTZzNmNxNnJxenR6QnJQclBQTWVzK3MrOHphejZ3Qgp6VnJ3ckFuUHV2Q3NvMmQ5ZU5iU3MwNDhhOFd6WGp4cjZsbFh6OXA2MWxlMGJrVHJMRm83UHFKMUJiU09ST3NMYVowaHJUV2s5WWEwCjVwRFdIZExhUXdpMUZxSFdJOVRZN3VJRjIyR3dQVWJiOFdEMFVoRXZGYkdoSUI5bU12UHdzTThkOXJIRFAzWkFjMEJ5Y1RnSTdrM0kKRFRmZDhGRGJFQnQyRXEzaElpTTEvRXlEb2gyZFlhUXpuSFNHbGN6d2tobG1Nc05NWmJpcEREdVY0U2N5SEZXR3BjcndGQm1tSXNOVgpZOWhxREYrTllhd3hyRFdHdDhad0Z4bitJc05nWkRoc0RJdU5ZYkl4YkRhR3o4aHcyaGhXRzhOc2JtUVlqZ3pIa2VFNXNxNGphenV5CnhpTnJQYkxlSzJ1K3N2WXI2Nyt5RGpUclFiTXVOR3REc3o0MGEwU3pscHAxb2xrdm12WFVyS2xtYlRYcjYxbGp6enFyUGV2SHM0WTgKNjhpenZvRFdHTkE2QTFwclFPc05hTTBCclR1ZzlZZTBFbXBmYTdGMkYyd1hrMFNFTHhPbCtKQncwSSs1cDRlWmVENTNkSEw0Snc0RAp4V0VnT0J3RWg0UGVjSkJibXhEYjIyUjdoOWFHMUY1bjJrdVU5aGFsNGFJMGJJU0duMmRQc3hkcTloNlo0U09rTXF4VXRrU0dtY2h3CjB4aDJHc05QWXpocURFdU40YWt4VENXR3E4U3dsUmkrRXNOWVlsaExERytKNFM0eDdDV0d3Y1J3bUJnZUU4TmtZcmhNREorSjRUUXgKckRiR0pvYmR4dkRiR0k0YnczTmptRzZzN2NZYWI2enp5SHFQclBuSTJvK3MvOGc2c0t3SHk1cXdyQTNMT2xyV2gyV05XTmJTc2xZcwo2OFd5cHBaMTFhd1pzV2JkYU9abzFvOW1IWG5XRnM3NndsbGpPTXR3MWh2U09rVGFpRFMxcDFDN2lyV3ZXRHVMdFM4UjhSSVJMdzh4Cm9TRCs0MlBtWVNZZVp0WmhIenE1OXlmdUIrN3RCWEo3ZzlyWTNxQzFWMmhOU08xdHFyM050SGZJaWZZU29iMUZaMitSMlZ0azlocVYKdlVabDc1UHNmWmE5VUxMM2lPeEZHbnVSeHQ2a01hdzBocGZFTUpNWWJoTERUbUw0U1F4SGlXR3BNQ3dWaHFuQ2NGVVl0Z3JEVjJFWQpLd3huZ2VHdE1Od1ZocjNDTUZnWURndkRZMkdZTEF5YmhlR3pNSndXaHRYQzhGb1laZ3ZEYm1MNFRRekhpZUU1TVV3bmhqZldlV090Ck45WjhZOTAzMW41akhValdnMlJOU05hRlkyMUkxbEd5UmlScktWa25rcFYxdGF5dFpjMVkxdGV5YkZscnpmb3gwcXd0bVBXRkRHZXQKNFF5dFBhRDFCeEZwTFFKTnJWR29kUXExaDBIeUdGYStqT0psRlBmbDJkVmhKaDMybWNNK2M2K1AzT3NqOS9QMjQ5YjJBckc5UUd0cQpiMURhSzVRbWhQWTIwZDdtMlR0MDlqclBYcWNaVVJuWld6VDJHajNIWHVqWWV5VDJIb205U0dGdlV0aXJGUFl1aGIxTVlHOFQyT3NFCmhwL0FNQlFZanZyQ1VsOTQ2Z3RYZlgzaHJDK3M5WVczdnNCd0dCZ2VBOE5rWU5nTURKK0JZVFF3bkFhRzE4QXdHeGgyQzhOdllUZ3UKRE11RjJZbmhPekdNSjlaNllyMG4xbjFpWXkwNE50YUZZeDBkNjhPeGxpNlM5WlNzcVdSZGJTeHJiWmxaVnpBejZ3dG1qY0dzTlp6MQpoclBtY0liV0lOQkdwRFdKdEM2UjFpYlMra1JhbjZDQllTSEd1N1BEeTdvNHQ5ZW43WWZ0QlZwN2dkU0EwdERlb0xOWDZFekk3RzJhCnZjMnlkNmpzSFNKN25XU3ZjK3dsRW51TGpNVGVKelRzUFFKN2tjRGVwSzgzNmV0VitucVh2dDZtcjlmcDYzM3llZz09CgldXT4KCTwhW0NEQVRBWwoJb2J6ZUtLOVh5Z3RUZWVFcUwyejFoYSs4TUpZWDF2TENXMTY0Nnd0N2ZXR3dMeHoyaGNlK01Oa1hMdnZDWmwvNDdBdW5mV0cxTDh6MgpoZHUrOEJzWWhnUERjbUNZTGd6WGhXRzdNSXdYaHZQQzhGNFk1Z3RyUDdFR0ZCTnJRckV1Rk91bzJGZ25qclhpV0MrTzlYU3NxMlJ0CkpXdEdzcjZTTlphc3RXWHRXRmJXa0dWZG9hd2p5eHFEV1djNDZ3NW4zVUVFV285QWF4SnBIVURrWTFUNWtoQXZCL0Z5RVBEUHI0OHYKRHpQbjVPSmVKdHpyQS9mMityU3R2VDlxNzA4YTJndDA5Z2FkbWIxQlpVSmt6YkVoc2RjcDlqckRYcUt3bDZnSTdEVUNlNTlnMEsvMwo2QXZKNjAzeWVwVzYzcVd1bDZucmRlcDZuN3BlcUs0M3F1dVY2bnFudXQ0cXF5Nk0xWVcxdXZCV0YrYnF3bDFkK01zTGgzbGhNUzg4CjFvWEx2TENaRjBiendtbGVlTTBMczNtOWZXRzRMeXozaGVuQWNCMFl0Z1BEZUdBNER3enJnV0UrTU53SDFuOWdIUmpXZ21FOUdOYUYKaDJLTktOWlNzVTRVYTBXeFhoUnI2bGhYczJSa2tHUWRXZFlXT0lCQTZ4Qm9uY0NSZy9DbFlDRHUyOFBMdTdlT2pobm4wL2FEOW5QMgpBcDJadlVCbFFXUmpyMUJUTE93ZEFudWRZSytUNk9zdCtucU5ubDR2dE9zOTZucVJ1dDZrcmplSjYxWGllcGU0WGlhdTE0bnJmZUo2Cm9iamVLSzVYaXV1ZDRucXB0dDZxcmZlSzY4WGl3bGxjZUlzTGMzSGhMaTc4eFlYQnVMcndXUmRPNjhKcVhWN1l6UXZIZWRGOTRib3YKYlBlRjhiNXczaGZlQThPQVlEZ1FyTVBhTUt5allYMFkxb2hoaTJJOUZiT09OZU5ZWDhjYU8wYldqMlY5b2N5c05aajFCclB1Y05ZZQp6dnJEV1ovb0pTQmUvdm5odkxlWDZiT205dnI0blAyWWxiMUFaRzhRMmRnYkpQWUdoYjFDWUc4VDdHMSt2VU5mNzVEWE8rVDFPcnRlCklxK1hxT3N0Nm5xTnV0NW4xL3ZrZXFGYzd4SFhpN1QxSW0yOVNWcXYwdGE3dFBVeWJiMU5XKy9UMWd1MTlVWnR2VkpiNzVUV1M2WDEKVm1tOVYxc3YxaGJXMnNKYlc1aHJDM3R0NGE4dERMYUZ4Ymp3R0JjdTQ4Sm1YUGlNQzZkeGRlRzJMdnpXNVlYbnZIQ2RGN2J6d25oZQpPTThMNjMxaHZpL2M5NFgvdnNEd0lGZ1RnblVoV0J1Q2RWUWExb2xoclJqVzA3Q21pblZWakhHc3MyT3RIV3ZIc1g2TTFHRFdITXphCmdBQ2VjNDRoNVVzL3ZPekRkM05NdDVmWjlqSjkwdEJlbnpNem43TDNwNHpzL1JsN2djYUF4TjZnTUxBMzZFdkk2MjE2dmMydWQ2aHIKaU90MWNyMUVYRy9SMW11MDlSbzl0VjZvMW51azlTSmx2VWhaYjFMV3U2VDFNbW05VFZxdms5WUxwZlZHWmIxUldhOVUxanVWcGZWaQphYjFaV3UrV0Z1Ynkwc0pnV2poc0M0OXRZYkl0YkxhRno3WncyaFpXNDhKclhMaU5xd3ZMZGVHNUxrelhoZTI2OEYwWHh1dkNlbDZZCnp3djNlV0UvTHd6NGhRTUh2ekRoRnpiOGFyQkdCT3RFc0Zha2hqVlZySzlpalJWN3ZGRFdHTW82UTFubm5KZDllTW1IbDN4M2RuSnUKUzdhWHlmWXkxOUJlSnByUDJldGo5dnFVdlQ1alAySmhMMUNRVjljcnhQVTJ1WnBiUTFxdlUrc2wwbnFKc3Q0aW82ejNtZlZDczE0bwoxbnVFOVNKaHZVbFlyeExXeTRUMU5tRzlUbGp2RTlZTGhmVkdZYjFTV084VTFsdVY5VjVsdlZoWmIxYld1NVgxY21YaHJpenNsWVcvCnNyQ1lGaDdUd21SYTJFd0xuMm1wYmVHMUxkeTJoZCs0TUJ3WGx1UENjMXlZamd2WGNXRTdMb3pIaGZXNi9MendYNkRYRjQ1KzllRlgKZy9VaW1OZ1lXVWVTdFFXeTl2SDRHRkMrM01QTFBielV3M1YwYzIxcWFTL3o3TXlIYk93bjdBZnNCZnJ5QXVvSzR0cDZoYlRlNWxEVwo2OHg2aVlxd1hpT3M5M24xUHE5ZTZOVjdkUFVpWGIxSlZxL1MxYnQwOVRaZHZVNVdyNVBWKzJUMVJsMjlVbGN2MWRWYmhmVmVZYjFZCldHOFcxcXQxOVc1aHZWMVlyeGZXKzRXRnN6QlpGaTdMMHNKcFduaE5hd3ZEYmVHNExTeTNoZWUyTU4wV3R0dkNkMXg3WFppdkMvZDEKWWI4dS9OZUZBN3V3WUJjZTlNS0VYcmpRNjB2eHF4clcxckJtREJPREhPc0tZeDFKMW1Vd3lEbm5wUjVlNXVGbDNuc1h0OFk4TTN1WgpaUytUTE96bjYvM3g2bnAvZ0xoZW9LMFhhT3NOMm5xRHRONGdyVmRJNnhYS2VvV3ltbGZ2ME5YcnZIcUpybDRpcTdmSTZpMnFlbzJxCjNtZlZDNjE2ajVDcVhpV3JkOG5xWmFwNm02cGVwNnIzcWVxTnNucWxyRjRxcTdmSzZyVzZlckd1WGl5cnE3ZnI2dlc2ZXIrdTNqQXMKUElhRnliQndHUlkreThKb1dWZ3RDNjlsNFRZdDdLYUYzN0l3bkJhTzA4SnpXcGhPQzlkdDRic3RuTWVGOWZpNGNCOFhZQmNPNU1LQwpYWml3Q3hkMjRhZ1hQdlJxNlZjbmZ2VWlXRS9CbWdvbTFscXhkaFRyeDdIVzRYaThFSGlKOXk3eDNqazNOalF6SnRuTDlQbDZmYjY4ClhwK3UxNGZyL2VGNnQzNjBYS0FzRnlqckRjb0t3bnFGc0Y2aEt5RXJ0Mm4xRGxtOVExV3ZzK29scW5xSnFONGlxdGVJNm4xU3ZkQWoKcWhkSmllcGxvbnFicUY0bnF2ZUo2bzJpZXFXcVhxcXF0NnJxdGFwNnI2cGVyS3BYeStyZHNucTVyRjR2cTZ0WDdBb0xtMkhoTkN5cwpob1hYc2pBYkZtN0R3bTVaR0M0THgyWFJhVzFodkMyc3Q0WDN0akRmRnU3andvRmR1TkN3eXdzamV1SEVyMTc4QWd2TGhyVldyTGtBCjhBNit2TE43NjlyU3lzaVlZeS96OVhKOXVseWZycTJzSHl3WDZNb051bktEcklLcWhLamNKcFU3Uk9VNnFWem5sRXMwNVJaTnZVYlAKcVJjNjlSNGxUYjFMVXkvVDFOczA5VHBKVWIxVFZDOFYxV3RGOVY1UnZWaFVyMWJWdTFYMWNsVlp2V0JXNzVnVkpydkNaVmZZN0FxagpYZUcwSzZ4MmhZWGRzUEFibGx3V25zdkNkVnI0VGd2amFlRThMYXludFlYOXRyaXdJQmNlSk9UQ2hWM1lzQ3ZScXhXOWV2R3JwMTlYCnNNYUdkV05ZNDMzQXk3cDNTZmZPc2FHUmhiMU1zSmY1OWZwd3VUNWJXbG11ejgvVmo1VUxaRlhsQWxHNVFWUkJVMEpOS1hkSXluVVMKU2JsRlVxNlIxUHM4a25xVHBGNGxxWGRKNm1XU2VwdW0zcWVwRjJycWpacWFvbnExcU40dHFxcjNxK29OcTNyRnF0NHhxN2ZNNmpXegp3bWRXR08wS3M4Rmg0Ymk2TEZ5WGhlMjAvcll3NEZZZ1Y3UUxIM1pocVJkTzlNS0tYcTM0WlFWclJyQWVvTWh6anRHa2wzU3ZYSnRhCkdQUExaWHE1VEMwZnJDdlh4OHFueXYyaGNvR29wbHdnS1Rjb3lnMktjb1dpM0dhVU94VGxPcU5jb2lpM0tNbzFpbktmVVM0MDZvVkMKdVVkUmIxTFVxeFQxTGtXOVRGR3ZrOVQ3SlBWQ1NiMVFVYStVMURzbDlWWk52VlpUNzlYVW16VzFOZlYyVWIxZVZPOFgxUnRHVmZXVwpWZUUwcTdZcjdIYUYzN0R3SEJhbXk4SjRXVGhQQy9kcFlUK3RMUzVzeUlVUEVidTg4S0pYTDNyMTFLdXBYMTM5NmpFWDVPWGN1NVI3CjRjYmVwVmlYeStSeW1WbFlXRmMrVlZTdXo1VDdRK1grVFAxSVJibEFVRzRRbEJ2MEJPVTJvZHdoS05jSjVSSkJ1VVZRcmhHVWEvVGsKUHA5Y0tKU0xCUFVtUWIxS1VDOFQxTnNVOVRwRnZVOVFMeFRVR3hYMVNrVzlWRkp2bGRSckpmVmlTVTI5WEZOdjE5VHJOZlYrVFZHOQpZMVJWNzFuVmkxYUYxYXp3bWhWbXM3ckNjRmM0N2dyTFhlRzVLMXlIaGUydzhCMFd6c3ZDZWxsNEwwdHJpOUFMVDcxYVJ1TmpMT2xsCjNMdUVlOTNVeHI2MlhLYVd5OFM2OHBHS2duSi9ubHdnSnhmSXlRMTZjb1dlM09hVE8vVGtPcDljb2llMzZNa3RjbktObk55bmszdjAKNUNJOXVVbFByOUxUdXdUMU5rRzlUVTlRYnhUVU94WDFVa1c5VlZIdlZkU0xGZlZtU2IxYVV1K1cxTXNsOVhwSlRiMWlVKy9ZMUZ0RwpsVmIxcWxWaEsveG1oZUdzcmpEZEZiYTd3bmRZR0E4TDUySGh2U3hBTFJ5b1ZSaE43TUtLWFhpRUM5N2VwZHViNVRLeHJxeGNwbFNVClR4VFVrK3ZqOU5Qa0FqVzVRVTZ1a0pQYmJIS0huRTB1VVpOYjFPUWFOYmxRSi9mSXlVVnljcE9jM0NVbmw4bnBaWEo2bjk2bko2aVgKQ3VxdGducXRvTjRycURjTDZ0V0tlcmVpdXFMZUw2bXBsMnpxTmFONno2aGV0TFVxek9aV1pZWGxyTEt3bitBV0Z6N2t3b2hjV05xRgpjODU0R3ZEUzdUWGIwc3F5WWxhNVRLb3BxU2dvSDZjbTErZUh5UVZpY29PWVhDRW10em5FNURxWlhDSW10NGpKZlRhNTBDYjNxTWxGClVtcHlsNXBjcGlhM3llbDFjbnFmbk42b3FhZTM2dW0xZXNLQ2VyV2d1S0trM2pDcFYweHFpdXBWbzNyWnFEQWJGWGFqd205VkdLN3EKQ2d2dllmbGxSYmZ3SVJlK011UTVaekViZk5uMkx0bGV0Yk15c2pDd3I2MnNxcWtvcHlhWDZjUGtzK1QrTExsQVMyN1FraXUwNURhWAozS0VsMTdua0VpMjVSVXRNTGhTSnlVMWlXbUp5bVpwY3B5YlhTY3JwQ1NycS9ZcDZ3YUxJcE40eXFmZHM2a1diZXRPbVhyV3BkMjNxClphTjYyK0txc0Z3Vm5SV3VzN3JDZUZkK2Y0UmF1SEFMRzI3aG5QTnk3VjJ1dldrdkdSaVdGQlNUYVVuSlpTYTVQa3J1ajVJTHBPUUcKQ1NtNVRTVjNTTWwxS2kyNXo2TWxGMmxKaWNsbFluS2JtRnduSnZlcDZZVnFlcU9hM3FtbWw4cnByWEo2clp5ZVhxMm5kK3ZwN1lKNgp2YURlTDZpb1Z5enFIWXQ2eTZSZU02bTFxYmFwMTQwS3YxRmh1TGtycklmVmg0WC9zZ1MxOEtBV3BpTGtNWkQwVXUxZHByMW43N0tzCnpJc3J5MHJxU1ltWjVES1JYSjhrOXdjcHlSVktjcHRKN2xDUzYweFNjbzJVM0tlU0MxVmFXbktabUZ3b0pqZXE2WlZxZXFtYW5ONHMKSjY2bnQrc0o2ZzJEaW5yTm9xVGVOS2twcWlwTVYyV0Y3LzZ3TUdBV0RzekNJRmp3SmRxN1JIdk54c1Mrc0s2c3FxaW1wS0tnbnB5YQptSmFVa3BEYzVaSExQSEo5am9LUVhDRWt0NG5rRGlHNVJFbHVVWkpybE9RK2sxeG9rbnVrNUNJcHVVbEtycEtTdTZUa05pMHh2Vk5OCnIxWFRlOVhrOVBSK1BVRzlZMUJ2V1pUVTFCd1ZwcXZDZFhoV2ZGZTQ3d3IzWVdFL0xHeWkyakVDNk9YWnV6UjdsMlh2c3N3TkErUEsKdW5KcVluS1hTNjdTa2N1RXVqNVE5K2ZJQlRweWc0NWNvU08zZWVRT0hTRzVSVWl1RVpMN1JFcHlrWkpjcFNYM2FjbUZXbUo2cVpqZQpLcVltcDVmTDZmVjZlc1BHbmw0eXFOY01Lc3BONm5XYmV0K21YaXE3S214bmRZWDNyakRmRlk0QzVHSXkrTExNWFphNVhGbFhVdHNtCmwybEpLZWtJeW9SdWZhRGJIeUNvR3dROWNvbU8zS0lqMXdqSlBVSktVbktibEZ3bkpmZEphY21WV25LcGx0NnFwZGVLcWVuZGFucTUKbXQ0dXAvZkw2UVY3ZXNXZVhyS250d3pxTldPVGV0bWszamFwS1F3M2hlT21zQndWbnN1enducFdlTThLNHoyK1N6SjNPZWFHZ1gxMQphV0ZWU1VWQlBibExKNWRwS1FrSnlueHVmWjR1ME5PRnVrMG8xSFZDWFNLb1czVGtQbytRM0NRa1Z3bkpYVXB5bVpMY0ppVTNTbW5wCnZWcDZzWmplTEtZbXNEQW5xS2hYTGVwZGk1cXF3bmRWR0s4S1AvbnhHQUQwVXN4ZGluRnRhV1ZoWFZXNVNzOHQwRGJvNlFvMW4rN1EKRStvYVFZL2NveU1YNmNoTk9uS1hrSkxjcHlRbGQwckpwVkt5V25xdm1KcmVyeWFubCt6SjdPazlnM3JSb0tZd0hSV3VvOEoyVlhnWgo1aTdEM0NXWTI1V0ZkZVV1b1pLT2pxQlBvNjJQMGZZSHlHZ2JaTFFWTXRvS0dibFBsK2dKZGFIUUl5UzNDY2wxUWtweW81S1UzQ3VsCkYydUo2ZVZpK21wNmVzK2VvTjQwcUtpM0xXNEt5MDNoT1Nyc1liRmpFT25sbDd2MGNyT3dxS2Frb2x5b0phVWtwQ1BvMDJqSkxOcjYKRkcxL2lwcEc3cENSNnl4NnVrWlA5L2wwb1UvM0NPb2lIYmxNUjBndVZKSTdsYVRrWWltOVdVdXYxdEs3dGRURjlIb3h2VjlNTHhqYQpXdHViM0JUbWdJTG5uSmRlN3JMTFhYYTVWMUZSVUU5UUp0RVBFVkJRMFZhb2FOczBjb21NM0NLajU5SFRUWUlldVU1SDd0T1JHNFhrClJpRWx1VlZKcmxXU2k3WEU1UFNTT1owOVFVVzliRkd2VzlUckp2WENTYjE0MTNmSjVTNjVYQ3NYU2lrSjZZanA5QT09CgldXT4KCTwhW0NEQVRBWwoJSWRyK0FCRnRnNGkyUVVYYm9hS3RzOGdsTW5LZlJrK291d1IxbWFCdUU5UjlPbktoanBEY0tTU2xOMHZwMVZwcWVzV2F5TnFpM2lROQplc3RkYnJsTExiZEt5bjBxSW5JeW5VQkVXeUdpYlpOb08xUzBMU3B5aTR4Y3FCSFMwMDE2dWtwUGQrbnBOa0dQa053cUpOY3F5ZDFTCmVybVUzcTZsMTJ2cC9XSjZ3OGFhWGpJbk5haDNEZXBsZzNyeEdOK2xscnZVY3F1bW9weWFscEtRbmtaTG54L25GaWpJdVJVaTJqcUoKdHM0aTErakk2QWwxbjZCSHJ0UVIwbFdTaTFYbTlLVDI5Q0xoMFJZOEM4dTFrbnBpVWtwQ09vSStqWXFJbkV1bXo4L1FGc2k1YlRxMwpUYUl0VVpIN0xIS2hSVVpQdCtucE9qMmhTVzVXMHF1VjlHNHh2V0ZtVHUrWjA0djI5S1k5dmRWM2lYVmxWU1VWOWVTMGxIUUVIV0w2CkJBMXRoWnpiSWFKdEVkSFdpTWg5RXJuUElpTjN5ZWpwUGoyaGJoVDB5S1U2UW5LdnhNNmMzZ0I0OUpXN3RJcUNjbUphVWtJNmdqNk4KaW9pY1EwdW1UM1A3MDl6K0REbTNUdWVXaU1pRkVyblFJcU9uQzNXVXBjUTBSdGIwbGpXOWVOTjNhZVV1cTl3b0tDZW1KYVFqNk5NNQp4UHdSMmdJMXQwRE5vVzF6cU1pNU5YSnVuMFR1RVZHUnExVDBqSHE2VWxCM0N1cFNZU0VsdVZwSlMySk1yeGpUTzhiMEFyQ2p4VlR3ClpaVzdwSEtobUphVWtxQkd6aVlUS0tpNUZXb09EVG1WaXFDZUx0UVRpZXNyYk9rTlkzb2RvempuSE9OSEw2bmM1WlM3bkdwaVdrcUMKUG91SW5FUE5KVk5JYVB2VDNBNDFoN1pFUTl1aW9hM1JrSE1MZFc2aFR2Zkk2U0lSdVVsRVJzK3FvM2NyNlV2cEJWdDZ3WlplRENUNApjbXE3bE5wS1JUMHhMU2taRVFsdGdZU0VtczJ0czdrbGNwR1dpbHdtSnlPb1ZaS1gwdHRvaUNuNFVpcHFDOFcwQkhVT0Nma0FCUWx0CmhacER6dTJSczhodGVqSnlvYVN3dHBCZXJxUzNLK24xVW5wenpualNkd20xYlVJNmdqNk5pb2ljUTgzdFVpaG91d1FLQ3RyK0JBbHQKbTBMYklTR2k1cmFvNlJJeEdVMVJYWEVsdlVOeU5OU1NFdElSOUdsVVJPUnNicHRCMnlYUU5tZ2JGTFFORWhweURtMmhRMDZpb2lnawpWd3ZKdFJLK0UzejU1TlRFdEtTVWhIUUVmUm9WRVRtM3k2SHRVRk1vaU9rRDlBTVV0QlVLYWdvUkNXMkxtdENoN2RHUW0rUmNJcEo2CnVsTllSMjdXa2NzREw1MmF0a3NtcFNTa0k2aFJFWkZ6U0NnSUNBZ295Q25VSEhLNmdycFhSMjRGRVJ6djhGMDJiYmREVGFBZ29lYVEKVUhQN1BISldRVjBycUFzRVJ5K1pvRWJPb2FaUUVOQ1NXZW56NHpTQ0pqMFpVVDNkcWVDN3RGMHFiWi9ib1NDZm4rMFBFRkRRZGlpSQpDR3JLeUoxNnVrcmJwZEwyYUR2VURHTCtCQUUxZzRxR3RraE9KcUtpS0NOWHlraU1CRjhtYlpkSjJ4K2hKMVNSRzFYa1VoQWpCMTRpCmJaZElXNmRRa0U4bDB3ZElxQWxFWkFROWVpSnluNHJ3Q04vbDBYWjV0TjA2Z1g1OGxqNCtQei9ib0o4aFoxR1NVaE9SNjBTRU4vZ3UKb2RzbGRPdkRCQko2SW0yWG5DNlQwMjF5dWhQRXdJR1gwTzN5dVhVS0FmMXNBeUplRk9KR0lmNEVjZWlISDNrNFVvY25kYmdTaHk5eAplQk9ITzIzNGs0WkhaYmhVaGxOZGVOV0ZXMWs0VnVTeklyOFYrYTRLLzRKOEdPVEhIbC9tK0RQdDA3SmZ5NTZ0OFc2Tmg4TmVEbnM2CjdPMnV4MlA4bnZWOTF2OVZIMWo5SVBXRjFDTlNuemo5ZFBGVnhUTXFIcXQ0YmVJZkUxOGg4UmFrenlEOUJ1azlJQjRFNGtVZ25zVGgKVFJ3K3hlRlhITDVGOURDaWp4SDlqR2l1WVpodkdPWWNobmxIWWU1Um1IOFU1aUNGZVFoaExrS1lBU0RNQVF6bUk0TTV5V0JtTXBpYgpET1luZ2htS1lKWWltS2NFNWlxQjJVcGd4aEtZc3dCbUFRQS9BT0MzQUw3TDM3djh2WUMvZS9uN2x6Ky9MeERHRHdJTFFBakI3NUpMCklWOEcrVEtJang0M1pyUTQwK2NueFg5US9BZkZnVTZVYUk3NGtJZ1BoYmd6eElsQXZBakVqVDc4K2VGUUR6L3FjQ1FPVDlwd3BRMWYKMm5BbURYZks4Q2NNajhKd3FRdWZzbkNxeUZ0Ri9xckNzU3A4Qy9KZGtQOTZmSmpqeGJRbnk5NHNlN1RHcXpXZURYdTM2K0d1bDJNOApIZVB0ck1lelhxOTZ2dXI5cUFla1huQjZ3dW1qMDBzWHI2ajRxZUtyaWI4bXZsRjZyZlNQMGd1SXo0QjREb2ozY0hnUWh4OXhHSDJLCjZGbEU3OEx3THd3ZncvQXpERy9ETU44b3pEa0s4NDVDd2h5RU1Bc2h6RVFHYzVIQmJHUXdIeEhNU2dUekVzSGNSREE3Q2N4UUFuT1UKd0R3bE1GUEpWZ0NQQmZBQy9GM0xscjl6S2NEdkIvZ2RBYjhyNEhjd2ZYZWc3dzlFMEhjSitqNUIzeW5vZXdWOXQrQ0NQZzQ4NlBzSApmVCtoeFBHMGZBbmt5eC8zc1VQSGpSbE1GbWV1WUtxNFQ0cjdvQUF5Y2FBU0R5THhJQklYR25FaEVXK0dlRFBFaDBEYytlSE9EeWZ5CmNDTVBmM2I0azhPaEczNms0VWdhbnBUaFN4bk9sT0ZOR1A1MDRWQVdIaFg1cVFxbnFuQXJ5RjlCSHV2eFdvL25jcnlYNDhHMEYyczgKV2VQTnNFZkRQdTM2dGV2YkdQL0crRGpyNTZ5bnE5NnUrcnpxOTZqdm8vNXYrc0RGRHk2K2NQR0hpcGNtZmpIeDFNUXpTbytWUGl1OQpJK0loRVIrSmVBeUgxM0I0RG9mL0VIMkk2RWRFWHlMNkU0WlhZWGdXaG05UitCZUZqMUg0R1lXdlFmZ2JoTTlCbUhjUTVoNkUrY2RnCkJqS1loUXdLWmlPQ0dZbGdUaUtZbHdSbUpvSFpTV0IrRXBpakFPWW9nSjhDK0hjc2Y4L3lkeTEvMStMM0xYN240dmN1ZmlmQTcxNzgKRE9qck81aStMOUQzTUgxbm9POE45SW1Cd0lLK1o5QzNBUWQ5NzZEdmVqN0lPV2N4YXZMeXg1Yyt2dXpCbzhZTEYwd1ZQajhtZ0VnRQpqWGlRaUF1RmFJTDRrTlBEblIxTzFPRkZIRzdFNFU4TmgyYjRVWVlqWVhnU2hpdGRPTk9GTjFuNGs0VkRSVDZxd3FVZ1QvWDRxc2RiCk9SN0w4Vm5hYjJuZmxmMVg0OE93SDhPKzdQcXo2OU1ZdjhiNE51dmZySWVyWG81Nk91cnRwc2ViWG0veGZJdjNXenlnNGdVVlQ1ajQKYU9JUnBWZVVmaXA5VlhwR3hHTVJuejM4NCtFckhONUM5QmlpMXhCOWg2amhSeGplaE9GUkZGNUY0VmNVdmlDOERNTFRJTHdOd3Q4WQpmSTdCekdNdzl4ak1QZ2FGQ0dZaWdvRTVTV0JXRXBpWkFPWW1nTmtKNEtIOFBjcmZwL3lkeXQrdCtCMkwzN1A0WFFDL2EvSDdBSDVkCitrNUEzd3ZvdTVlK2YrbnJld0o5WVJyZ3U1Z0xNdUM3Qm4zWG9POGI5QjBQeTVjOXZ1UnhHQ3lZS003ME9YRWZFL2NwOFo4Uy93RWEKY1NBUkR3cnhJQkFYQW5HaEQyOSsrSkNIRDNXNGs4T2RIRTYwNFVVYmJxVGh6d3lIWXZqUmhTTmRlSktGSzBWK0tmSk5rWGVxOENmSQpSejFlNnZGVGpxL1Mza3I3cSt5eHN0OXFmRmZqdjY0UHUzN3NlakxHbXpFZXpYbzE2OWVxYjZQK2pmcTQ2ZWVtcjF2ODNlTHpGcituCitEN0YveVUrTVBHRGlTK1VQaXE5VkhwRnhFOFJYejM4OWZDTmg5ZEcveGg5QmNOYk1Ed0d3MnN3UEFmRGZ6QjhpTUtQS0x5SndxTWcKZkFyQ3J5QjhDOExER0h5TXdjOFlmSTNCM3hqTU9nWjdDR1lmZ2htSVlHQXVFcGlOQk9ZamdCa0pZRllDbVAvKzVPOVJxUGk5aXQrVgp2bXZwKzVhK2Mrazdsd0w0amdEZkUrQzdBbndIc3dEZkdlRGp1d044ZjREdkVFVEFkd2t3NER1YkdCUGs1WTR2ZC95R2pSZ3ZWS1JnCm5qalR4SmtsN2tQaVBpVCtNK0kvSTRCQ0hDam93NE04WE1qRG14M2U3UEFoRG5kdXVGUERpVEs4S01PTk1QeDU0ZEFMUDdKd3BNZ24KUlY2cHdwY2d6MVRoVHBCL2VqeVU0Nk8wbjlLZUtudXJ4bDgxSGd0N0xleTVydmRpUEJqanhhd25zNzZzK3JQcTA2aGZvNTV0ZXJmRgp2eTArYnZGemlyZFRQRjdpOVJMUGwzZy82ZjhRSDRoNFFzUWJJdjRROGRMREx4NmVHcjAxK212MFdjTTdHdjZ4OEJVS2I2SHdHUXEvCm9mQWRDditoOENJSVQ0THdKZ2gvWXZBcUJzOWljSWJnYXdobUhJSTVoMkRlSVpoNUJHWWZnZmxIWUE0U0NKaU5BR1lqZjFmeWR5Wi8KVC93T3hlOVMvRDZsNzFmNmpxWHZXZm91QU4rMThIMEF2bS9oZXhlK0U4QjNMM3ovd25jRCtIN0EzaEhZT3dJTFNGQUIzeTNnK3dWOApYK3I0TXNlWE9PNml4UXFtQ1o4UlB5TCtBL1RoUUI0TzVPRkJIUjdVNFVJYzN1VHc1b1lQYWJoVHc1MFpUb1RoUlJodWRPRlBDNGRHCi9panlTQldlQkhrbHlDODludW54VFk5MzBoNHErNmpzcFJwUDFmZ3E3SzJ3eDdvKzYzb3U2NzJzQjdNK3JQb3g2c21vTjVzZWJYcTEKNmRjV3o2WjROOFhISlg0dThYV0p2NU0rVDNvOXhQTWgzdS93Z0ljWFBEeGg5TkhESTBhZkdQMmk0YXVHWnpROHR2RFp3anNTL3BIdwpGUWgvZ2ZBWkNMK0I4QjRJQjA5aThDVUdmMEx3S1FTL1F2QXRCUDlDOERFRUx5UHdnVGxIWU40UkNKaURBT1loZ0puSVh3Ymc3d0g4Ci9jaWYzNWY0dllsZjM2UDBYVXJmcWZTOUN0K3g4RDBMM3dYWXNuY3VCZXpkeTVlOUc3RDNBeExZdXdKN0I3UDNCZlllWnU4TU9BREIKQkh1ZmdPOFU4RjFObEJnUjVDV09MMitjV2VKTUVtZVM4QkZ4bng4UUhvSTRQR2pEaFRhOHFlSE5EQjl5WWpqUmhSZFp1RkhrbnhVTwpyZkFqeU1jck9YN0o4VXphTjJudmxQMVQ0Nk93bDhKKzZ2cXE2NjBZZjJWOWx2VmExWGRWNzFVOUdQVmkwNU5OWDdiNHM4V25LVjR0CjhXeUpkMHM4blBSeTB0TkpYNGY0dThQbkhYNHYrcjdvLzZJUGpIN1E4SVdHanhwZWFuakZ3azhMWHkwOEkrR3hoTThTM25Id2tJT1AKSFB5RndXY1kvSWJCZHhBOGlNR0xFRHdKd1pzUURIeUx3TDhJZkl6QXp3ak1OUUlCc3c3QXpBTXcrd0RNUVA1eWtMOEwrVHVSdndQZwpkeU4rUCtKM0pINVgwdmNsZlcvU2R5ZDlVS1R3ZlFyZnEvRGR5dDZ6N0YzTDNnZllPNWU5ZDlrN0FYdGU5QmpZZXdOaTl1N0EzaCtJCllPOFM3QjJQR0RSNWFlUExHbC9XaUlGaXhKaytJZTRENGo0Zi92UGhQeDMrMCtGQUhBNjA0VUFiT2toREIybG9vUXh2Wm5nVHc0Y3UKM0duaFRnc25pbnhSaFJ0VitCUHlVTWdmUFI3cDhVbU9WOUorU2Z1bHhqTTEzZ243Sit5aHNKZTZmb3J4Vkl5M3N2NnEraXpxdGFqbgpvcjVyK3EvcHd4WXZ0bmd5eFpjcC9penhhZEt2U2Q4bXZSdmk0UTR2ZDNpNnc5dEZqeGU5bnVIM0RPOW5lRUREQ3haK3NQQ0ZoWThTClhscDRSY0pQQ1Y4ZFBPUGdzWU9PZ29jVWZLVGdMd2crZytBM0NMNUQ0RUVJUGtUZ1J3UytST0JQQkQ1RjRHTUE1aG1BdVFaZ3ZnR1kKYy94bEhYOTV4OTk3K04ySDM0SDRYWWpmaWZpOVNOK045RDJBdmgvcGU1SytLMkhDZHlkOGg4TDNLSHlYc3ZjcWU3K3lkeXg2enpMQQpGcjF6MFhzWHZST2c5d0srNkNXd2R6RVA3QjJFRWNlVDhpV05MMmY4aFlzVkowS0ErSDA4M0tmRE9mVFBoaUFNSFlTaGhUQjA4MEkzCkwvU1FoWFpHdHJOQ0UwRTJFV1FYUWJiUll6OGRHK3JZUjlvamFaK1V2VkpqTDJIUGhIM1Q5VStNaDJKOGxQVlQxbE5WWDFXOUZmVlkKMDJkTnZ6VjkxK0s5RmcrbStEREZqeVcrVEhvejZkRVFuNGI0dGNPM0hmNHQrcmpvNWFLbk03eWQ0ZkVLbjFmNHZjTDdGUjZROElLRQpKeVM4NGVBUEJ5OGQvT0xncDRLdkNwNVI4RmpCWndYL0dQZ0tnYmNRZUF5QjF4QjREb0gzQVBnUGdCY1JlQktBZ0U4QitCV0Fid0g0CkY0QTV4bCtlOFpkci9HVWJmci9oOXh4KzErRjNIbjMzMGZjZmZSZlM5eUY5TDlKM0FQZ2VBTitQOEQwSjM1UHNYY25lbCt5OXlkNmYKN0IzSzNxUHNmY3JlcWVpOWl0NnQ2UDJLM3JFSW9IY3Rlbm8vUU84STZGMEJ2VEFONk4yQnZhY0E1VXlXOFdVTUdGZUI0a3lmRHUzRApvWDAyOUkrRy90SFFRQmthQ0VNRFllaWdDeDEwb1lVc3RKQ0Zia2IyVUlVZWdtem5ZenNmbStpeGl4emJ5TEdmMm9abSt5amJTSTJkCmhHMmxheTlkZTRteG02enRaRzJvYWtkVlc0cDZLdXFycHJkYS9OWGlzeGF2cFhndXhYc2wvaXZ4WWRLTFNVK0crQT09CgldXT4KCTwhW0NEQVRBWwoJc3NPYkhSNHRlclhvMmFKM2l4N084SEtHbnl0OFhlSHZDSTlIZUwzQjh4SCtiL0NCZ3g4Y2ZPSGdvNEpIREx3MDhJdUNwd2JlR25ocwo0TE9CZHd3OFpPQWpBWDhCOEJrQXJ3SHdIUDd1NGU4Zy9pN2k3eVQrYmdMd0tQNnU0dThyL3Q3aUw4UDR5ekg4THNQdk5QeHU5QjFICjMzWDA4ZjBIMzRQd1hRamZpZkM5aUpHOUg5bExvdmNsZW4raWR5aDZqNkozS1hxbm9xZUZTOTY3NUJrUVJ1OE02SDBaNDBzWVg3NjQKaXhVblNvejRVa1NJRDgzMDRMT2hmWDR5OUErRy9yblFRQmNheUVJSFJYWlFaQXRGdGxDRmJrTDIwR01QUGJiVHNaM2FKdEoya2JhTgpzdjNNTnJTeGo3Q05kRzBreGs1aWJDWEdYckkyVTdXZHFQMUU3YWhwUzAxN2FyR3BGTHRLc2EwU0d5dXhzeEsvSlgyWDlGNklCME84CjJPSEhvaWVMdnN6d1o0WlBNN3lhNGRrSzcxWjRPTUxMRVo2TzhIV0R2eHQ4bnVEM0JOOG5lRURCQ3dxZU1QQ0ZnSThDL2hEd2lZQmYKQkR3VjhGYkFYd0hmQ0hndDRDSC9Idm4zQzM4bS9JN0M3eXI4dnNMdkxmeit3dTh3L0M2ajd6UDZYcVB2TnZpT2crODUrTDZEN3ozMgovbVB2UVBZdVpPOUQ5azVFNzBYMERvRGVBOUQ3RWIwajBmc1N2VFBSZXhPOU84bjdFeWw1bjVKM0tubXZrbmNyZWIrU2R5eDV6NUozCkFmSStRTjYzNU9XZGdBTHk3aVh2WC9RT1J1OEw2UDBFS0RubkhFTk1Ycjc0MHNWVm1QZ0lFVXdQemV6UXpBNGNmRFMwVDRiMndRQVUKMlVDUkhWU2hneUJiQ0xLRkhydnAyRTNISHRMMlVMYWQyU1pxN0tMR05tcnNKN2FoMTRZeTloRmpJMWs3eWRwSzFWYWlOaE8xbTZiOQpORzJveFk1U2JLbkVua3BzS21sWFNmdEsybG5TMWtKc3JzUDJPdnhYOUdEUml4bCtyUEJraFRjclBGcmgwd2kvUnZnMndyOE5IbTd3CmNvS25FN3hkNE84Q3J4ZDR2c0Q3QlI0UThJS0FIL3g3NGQramYwZjhlK0xmRi85Ty9idjE3OWUvWi8vdTZIZEl2MWZ3dXdXL1kvQzcKQnI5ejhMc0h2NFB3dXdpL2svQjdpYjZmNkh1S3ZxL29PNHUrdStnN2pMN0g0UHNNdnRQZ3U0MjkzOWg3anIzcjJIdVB2ZnZZT3hDOQpCOUc3RUQwaWVTK1NkeU41RHlEdlNQS3VKTzlMOHM0azcwM3kvaVR2VVBJZUpXOEtBbmxQSU84SzVMM0ZseXkrWEtIaUtEb3dPVFJ6ClF6TTMrR0JvSHd6dGM2Ri9MUFJQWlA5VWFLQUtEUVRaUUk4ZDlOaEJqaTJrYlNGdE43TTkxTmhEamUzRXRoUGJSTmd1dXJZUll6K3QKRGJYMlViV1JxcDFFN1NScUwwMmJhYkdiRnZ0SnNhRVNPMHJhVXRLZVFtd3F4SzQ2Ykt2RHhqcHNyY1BlaW5aWHRMME0rNnV3d3dwYgpqTERIQ0x0c3NNOEdqelo0dGNHdkNiNU44RytDand2OFhPRHJBRzhIK0R6QTd3RytEL0IrZndmMHU2RGZCLzFlNlBkRHZ5UDZQZEh2CmkzNnYrcDNSNzlpK1ovdnUyUGZIdmxmb3U0VytZK2k3aHI1ejZMdUh2bi9nZXdpK2orQjdDYjZmNEhzS3ZxdmdPd3UrdStEN0M3N0gKMkx1TXZkUFlldzI5MzlBN0RyM3IwRHNQdmZ2UXU0KzgvOGg3a0x3THlmdVF2QmZCT3dCSzhMNEU3MDJjNFAwSjNxSGdQUXJlcWVDOQpDdDZ0NFAwSzNySGc0VjBBdkd2QjY1SjNBL0orUU40dkVQRVlET1RsaWk5Vi9Fc1NJRHd3TlRUVHgwTDdSUFpQWlA5VTZCL0lCb0pzCm9NY0djdXdnYlFkcFd5amJRbzNkYk93bXRvZXVQWFJ0SjJNVE1YWVJZeHRWKzFsdEtMV2gxRDZhTnRLMGt4WmJTYkdYRkpzcHNaMFMKKzBuYVVJZ2RoZGhTaHoxMTJGVFJ0b3IyVmJTekRGdkxzTGtLdTR1d3ZRajdhN0REQmx0TXNNa0V1MHl3MFFRN0xmQnJnV2NMdkJ2Zwozd0FmQi9pNXY5ZjlIZS92ZW4vZjh6dWYzLzM2RHRoM3diNFA5dDJ3NzRkOWwvWTlrZS9UdmxmN3pzaDNMTit6Zk5meUhaTHZrWHkzCndQY0xmTSt3OXcxNzc3RDNEM3NQc2ZjUmV5K3g5eE43UjdGM0ZYdGZzZmNXZTMreDl4aDZsNkgzR1hxdmtYY2JlY2VSZHgxNTM1SFgKQSs4KzhBNEU3MEh3TGdUdlJQQmVCTzlHOEg0RTcwanduZ1R2Uys2ZzRIMEwzcmw0d2ZzWHZOUHhJT2VjeGFDUWx5bStUUEVsaWk5TAo5TEtFaUJBZm1CbWFpU0d5ZlNxMFQ0WDJnZXdmeVA1NWJDREhCdEkyVUxhRHNoM1UyRUtOTFlUdDVyV2IxeDVpN0NGck82MU5aTzBpCmFoZFIyMmphejJsREYvdG9zWkVVRzBteGt4SjdTZHBNMG01Q2JLZkRmanBzcUdoSFJWdktzS2NNbTZxd3J3b2JxN0N6Q0Z0cnNMa0cKdTB1d3ZRUWJMTEREQWxzc3NNa0EyeXl3MFFBN0RiRFgvcnJ0NzI1L2gvTjduTi9uL0c3bjk3dSs1L1Y5ais5OWZQZmpPeURmQmZsTwp5SGREdmgveVhicDN4YjFQK1Y3ZE8rUGVzWHZQN2wyNzk4ZTlWOWg3NU40djZEMkQzamZvdllQZVArZzloTjVINkwyRTNrM29IWVhlClUraDloZDVaNk4xRjNtSG9YVWJlWitTZFJ0NXQ0UDBHM25IZ1hRZmVkK0NkQng2UXV3dTUrNUM3RTdtN2tic0hjUGNqZDBkeWR5UkwKN3M3azdrM3U3dVR1VCs0ZTVlNVM3ajdsN2xTcTNISEJleGU4RTREM0F2Q081TVJIaE1qQXZOQk1uOGYrY2V3ZmJRTnBnN0FkZEcyaAphd3N4ZHRQYXpXb1BWZHRKYmVlMGlhWmR0TmhHaS8xVTdLZGlReFA3S0xHUnBKMkUyRXFJdlhUWVRORnVpcmFUWVQ4Wk5sUmhSeFcyCkZHRlRFYllWWVY4Tk5wWmdad24yVm1CekJiWlhZSDhCTmhoZ2kvMzEyRitYL2ZYWlg2UDl0WnBmcy9sMW0xKy85VFZjWDh2eG5ZN3YKZG55LzQzdmUzdmYyM3JkM3Y3MEQ2bjF3NzRWN2orNGRVZStKZWwvVU8xWHZWYjB6NnYycTkwYTlhL1grcVBjS2VvL1V5L3VHdkhmSQorNGU4RVhrbmtYY1RlVCtSOXhSNVY1SFhBdTh2OEE0RDd6THdQZ1B2N2p2dTN1UHVQdTcrNCs1QjdDNEVBQ04yRDhEdVIreWV4TTZKCjNkMnYzQjNMM2JQY1hZQXRkK2R5ZHpKaVRzaExFNzBzMFNBME1DT2JDZW5ZUHRyKzBmWVBFTGFCcmtIWERtSnNvV2ExbTlRZW12YlEKdEoyTFRiVFlSWXB0cE5oR2lmMlVObFRhUjRoOWhOaEloNTBVYmFWb0x4bDJVMkU3RmZZVFlVTVJkdFJnU3cwS3RsVmdYd1UyVm1CcgpBZllXWUhQOXRkZGZmLzExbUYrTCtUV1pYNXY1OVZsZnAvWDFXbCt6OGJVYlg4UHh0UnhmeisyOWJ1OTJlOGZUdTU3ZTkvVGVwL2UvCnZBZnFmVkR2aFhxUDZoMHg3OUs4SytaOW12ZHEzaG56anMxN1k5NjFlWC9NZTRXOFIrYjlRdDR6NEgwRDNqdmcvUVBlUStSZEJONUoKNE4wRTNrL2dQUVhlVmVDZEJkNWQ0UDNGM1dIY1hjYmRhZHk5eHQxdDNQM0czWFBjWFlmZGQ5aWRoOTE3MlAySDNZSFlQWWpkaDlpOQppSjNkbDlpZGlkMmIyUDJKM1ovWVhSSGc3bHJ1UHNEZGx5UjZTYUtYSS9xRGh3NU1TSjlzL3pUMkQ3Wi9nQmdieU5wQTFnNnl0bEMxCmhhamRwSFp6MmtPTFBhVFlUc1YySmpaUlloZEoyMGphVDhSK0lqYjBzSStpaldUWVNZYXRWTmhMaGMxRTJFMkU3VFRZVDRNTk5kaFIKZ2owbDJGU0JYUlhZVm9DTkJkaFpmNjMxMTF4LzNlWFhYbjROMXRkaGZTM0cxMlI4YmNiWFozdWR0dGRyZTkyMjEyNTdEYWZYY1hrdApsOWQwZVgybjEzaDUxOHY3WHQ3NzhBNllkOEc4RCthOUVPOVJ2Qi9pWFlwM1JieFA4VjdGdXhYdlY3eG44YTdGK3lQZUsrQTlFdThYCjhKN2g3aHJ1UHVBZHhOMUYzSDNFM1V2Yy9jVGRVZHc5aGQxWDJKMkYzVjNZSFliZFk5aDlodDFwMkwyRzNXM1lIWWZkYzloZGg5MTUKMUIxSTNZWFVmVWpkaWRTOXlKRWxkbzlpZHlsMlZiRFlQY3ZkUjNBU0k0RXZSZlJTUkh2WWNJSHBxRzFtbHRtSWJaOXIvekQyRDFDMQpnYWdOUk8wZ2FnZE5XMmphUW92ZFZPeG1ZZzhsOXBDMG5kSW1RdXdpeEM0NmJLUERma1liR20xb1lTTVZkbEpoS3hIMkVtRXpEWGJUCllEc0o5cE5nUXdWMlZHQkxBZmJVWDAvOWRkVmZYL2sxbGw5bitmVldYM1AxdFJkZmYvRTFHRitIN2ZXWVhwZnB0WmxlbyttMW1sNnYKNVhWYlhyL2w5UnRleCtIMUhGN1Q0YlVkWHVQaHRkNWQ3OTIxSDk0Qjd4NTRkOEc3RTk3ZDhPNkhkNWZlWGZIdTA3dFg3MjY5Ky9YdQpqWGZYM3YzeDdwQjNqN3o3aGJ0anNQc0d1M2U0dXdlN2c3QjdDTHVMc0RzSnU1dXcrd203cDZqN2lycXpxSHVMdXIrb2U0eTZ5Nmo3CmpMclhxTHVOdXQrb2U0NjY2Nmo3anJyM3FMdVBPaUIwRjFKWGR3RHFicVR1QWRRZFNkMlQxRjFKM1pYWWZZcmRxZGpkaXQydjJCMU8KQnlGQWRBY09HcGpaWm1aOUdOdUhzWDJzL1dQdG4yci9VUHVIMmtEVEJscnNvR2tITGJhUVlnc2xkbFBhVFdrM0VYc0lzWjJIN1R4cwpvbWdYUmR2SXNKK0cvU3hzS0dGREJ4dHBzSk1HVzBtd2x3U2JLYkNiQXRzSnNKOEFHK3F2b2Z4YXlxK24vSnFxcjZ2NitxcXZzZmc2Cmk2KzMrSnBycjczMitrdXZ3ZkphTEsvSDhyb3NyOC95T2cydjFmQjZEYS9iOE5ydHJ0L3VPdTZ1NSt5YXpxN3Q3QnJQcnZYc21zK3UKL2V6K1o5ZUJkaGUwTzJIZERldCtXSGVwM1JYdFByVTcxZTVXdTEvdGpyVjcxdTZQZG9lMGU2VGRMOVE5UTkwMzJKMkQzVG5VM1VQZApRZFJkUk4xSDFMMUUzVS9VUFVYZFZkQjlCZDFaMFAxRjNXSFFQUWJkWjlDZEJ0MXIwUDBHM1hIUVBRZmRkOUNkQjkxNzBOMEgzWC9RClBRamRoZEI5Q04ySjBMMEkzUUdndXhHNkg2SDdFYm9sZFdkUzl5WjFVdW8reGU1aFBqeG52Q0ZmZXVnTkY1aU56V1F5VHZ0bkVVZ3gKS0ZFSXNYazRGRzFudElrTWl3cmJpTENmZy8yRUNqWlNZQ2NGdGhKZ0x3RTIwMTgzL2JXVDMxTmZSL1cxRkY5UDhUWFZYbGZ0OWRWZQpZKzIxbGw1djZUVlhYbnZsOVJkZWcrRzFHRjZUM2JYWlhaL2ROWnBkcTluMW1sMnoyYldiWGNQVmRWeGR6OVYxWFYzZjFUVmVYZXZWCk5WOWQrOVgxWDEwSDF2VWczUW5wSHFVN1l0MFQ2NjVZOTJuZHEzVm5yUHUxN28xMTE5YmRrZTZRZEkrc3V3VzZZNkM3QnJwdm9Ic0gKdW4rZ093aTZpNkQ3Q0xxWG9Qc0p1cCtZTzRxNXE1ZzdDN3E3b1BzTHVzT1l1NHk1ejVnN2pibmJtUHVOdWVPWWU0NjU2NWc3ang1egovMUgzSjNXSFV2Y29kWC9UUVFsNTJZRkRXN0R3Nk1qRU50T24yajVVbitsaS95ZzJVQ0tRdElPa0hZVFlRb2N0Rk8xbXRKdUczU3pzCm9jSjJGaElSZHRGZ0d3bTJVV0EvQS9zSjJGREFQZ0pzSk1CTyttc2x2MmJ5NjZhK2J1SnJKNzUrMm11b3ZZN2FheW05bnRKcnFyeXUKeXV1cnZNYktheTI4M3NKckxyenV1dXN2dXc2emF6RzdKclByc3JvK3EydTB1bGFyNnpXNmJxTnJON3FHbzJzNXVxYWo2enE2dHFOcgpQTHJXbyt1OXVlNmo2eis2RHB6cndia21uT3NvM1EvcExxVzdJdDJuZEsvUzNVcjNLOTJ4YzgvTzNYSHVrSFN2TVBmSXVXT2dlNGE1CmI1aDdoN2w3bUR1SXVZZVkrNGk1azVCN0NibWJrRHNLdWF1UU80dTV0NWk3aTduRG1Ic011Y3VRT3cyNTE3QWhkeHc5NU81ajdrRG0KSG1UdVFvYk1uY2pjaTh3ZEFMb21kSGRDOXlkMXh3dnk1WVplYW1nTWtGa3M4OXBNUm1zekY5dEhzWDhVRS90SGl0aEFoeDBVN1NERApGakpzb2NKdUZuYVRzSWNHZTJpd25ZTk5KTmhFZ1YwVTJFV0FiZlRYejc5KytqWFVyNUg4T3FtdmxmcDZpYStaK0xwcHI1djAya212Cm4vSWFTcStqOGxvcXI2ZndtZ3F2cSs3NjZxNng3bHJycnJmc21xdXV2ZW9hcks3RjZucU1yc25vdW95dXorZ2FqYTdUNW5wdHJ0dm0KK20ydTQrWjZicTduNU9ZYWI2NzE1cHBQcnZ2aytrK3VBK1ZhVUs0TDV6bzY5OE81UytldUtQZEZ1VlBsWHBVN285eXhjcy9LM1hIdQpqM0tIbEx1RnVWK1lld2E1YjVBN0I3bDdrUHNIdVllUWV3Z1NjazhoOXhWeVp5SDNGbkovSVhjWWNvOGg5eGx4bnhGM0duR3ZFWGNjCmNzOGhkeDF5M3lGM0huTDNJZmNmY2djaTl5QnlST1FPd0J6ZGxkQjlDZDJaMEoyREpqbm5IT1BMbHhsNm1hRWZXdz09CgldXT4KCTwhW0NEQVRBWwoJMjhpMEtyWlBZdnRJKzBmYVA0ajljOWhBaHcwVWJTQkRIR1NJZzRRSXNkQWdiZzdpcGlBZUNzVE9RT3dFeEVTQW1PZ1BGLzFoSXo5cwoxSWVmZlJqS2g0LzRNQklmVHRwcnBiMWUwdXVsUE15VWg1dndzQk5lUCtFMUZGNUgzYlhVWFUvWk5aVmRWOVgxbFYxbjFiVldYVy9SCmRSZGRmOUUxMkZ5SHpiWFlYSlBOZGRsY244azFtbHlueWZXYVhMZko5WnRjdzhWMVhGelB4WFdkWE4vRk5WNWM2OFUxWDF6M3hmVmYKWEFQR3RXQmNFOGExWVZ3ZnhyVTByaFBqdmhoM2F0eXRjYjgyeGwwYmQ4ZTRROFk5VXU0WDRwNGg3aHJpemlIdUhlTHVJZTRmNGg0aQo3aUxpUGlMdUplSitJdTRwNHE0aTdpdmkzaUx1THVMK0lrNEczR2ZBM1ViY2I4UWRSOXh6eEYxSDNIZkV5VjJJM0lmTVBZQzVINWs3Cmtya25tYnVTdVdPNDBKR1FXQ2ExbWRObVRwdVppSmxTN0lONGlIK2lHTWdRcUJBSEVRb0pZaUZCM0F6RXpTRkE3UHpEVGo5TTVJZUwKK25BUkh6Yml3MFo3K0xtSG9YcjRTQThqNmVHa1BLeUVoNWZ3OE5JZFpyckRUWGJZNlE0LzJXRW9PeHhWMTFKMVBVWFhWSFJkUmRkWApkSjAxMTFwenpUWFhYWEx0SmRkZmNoMG0xMkp4VFJiWFpYRnRCdGRvY0swRzEyeHgzUWJYYm5BTkI5ZHhjRTBIMTNWd2ZRZlhlWEN0CkI5ZDhjTzBIMTM5d0hRalhnM0JOQ05lR2NIMEkxMUs0Vm9UclJiaFQ0VzZGT3lQY3IzQnZoSHNXN281d2Y0UjdaTnd0d0IwRDNEWEEKZlFQY09jQzlBOXc5d0IwRTNFUEFmUVRjU2NEZEJOeFJ3RDBGM0ZYQW5VVUx1TCtBT3d5NHg0Q3JvU051Ujl4NXhOMUgzSDhRTVNMMwpBT1IrWk80RmRIaU1BcjYwME12SXJpNDJrNGw0aUgyaWh2aUhFQU1SQWczaW9FRWNKQmlJaFFCeEV4QTMvL0NRSHg3eXc4NCtUTVNICmlmaHcwUjR1MnNOR2V2aVpoNTk1R0pxSGovQXdFaDVPdXNOS2RsakpEaS9aWWFZNjNGU0huZXJ3VXgyR29zTlJkRmhxRGsvTjRTbzUKYkNXSHIrUWFLNjYxNG5vcnJybmkyZ3V1ditBNkRLN0Y0Sm9NcnNuZTJ1eXQwZDVhN2EzWDNwcnRyZDNlK3UydDQ5eDY3cTNyM3ZydQpyZlBlV3UvdHJmL2VHdEN0QmQrYThLME4zL3J3TFR3aSswZUZIZ0xaUlNDeGtVZkhkcUp0S0ZvOEpZdXJORGFXUml3QUZtKzU0aTVYClhNQVZmMkhzQXhnN0FXdURzWGFZYWpkUWJRZW9EUUcxSlpoMkJkTytZTHJZR3lpK0E4VjdvSGdRRWk5QzRzY2t2b3owSkVodlJub1QKRUg4QzRsRkFSSFA0TklmUjNDWUt4ekRITVh3Y3d6cDJDbituRUErZWZyZUY3ME40enZtQk9ya1o1czB3RnhKU0lBRURnTDU0SVVDTApBSGs1SlMrbFpHYVV6SVNTZmFCa255ZjV4MG1RMEpJa2R5STUwWkVYQmZCbkFJY2ErUkVBUndMZ1NVV3VST1JMUTk0MDVFOUNEaFhrClVrQSs5ZU5WUDM3bDQxZzlyc1hqV3p2ZXBlTmZPUjZHNDJJNFRuYmpaamFlVnVOck5ONDI0Mjh5TGdmamR5N094K0tCS2w2STR0SVQKbjVaNERTTy84T0VkUER3RWg1dlkwQzB5ZEF3TVhjTkM0NGhzSGhVYUNHUUxnZXdpajBnY2U0bTJtMlFiU3Jhbk5IWVZiR1BCdHBacgpjN2t5V3F2TlFKVTZiUXFtYmNGaVk3RFlHaWllQThVUUVpK0M5Q05JVDBaNkVoQnZCdkVsSVA2RXAzRDRNMm1pV1UzVWpXRitZNWpsCnpDazhuY0k4a3BjazdEMlVsWVc0dWNDRkZyZ1FtQXVCZWRDUGxpV1dMNjlRaVpLWFVQS1MrU1Q3T01rK1RmSlBrd3pFSkFNdHlVRkwKY3BDU0xKUWtONU44Q01tZFIwNFV3SXNDdUpHUlF3SDRVWkVqRlhuU2tDc0pPWk9RTndYNVU1QkhBYm5VajFQNXVGV1BYL0Y0MW81dgo2VGlYam52bE9CaU9pOWs0V1kyYjFUZ2FqYXZOT0p1TXU4VTRISXpQdVRnZWkvZXR1R0NLUjA5Y3NjU3RKTjRvNGhWQVBJT0hmK2h3CkVodWVJa083dU5BeUxyUU5DNjBqc250VTZCK1FQZVRSc1pOb2UwbTJuV1E3U21OUHdiWVZiR2U1OWdDTXpZV3hDV0JzTDlZMndLcEEKdFJlZ05nUFVGa1B0QjZZZHdiUW5XT3dLRmx2eEdpZ20vb05FNlVkQXZKbkRvM0NZVVlqbUZLTDVUTlF3c3pITWJncHpuTUk1ZE96Ywp3Wk5IRCtFbDkxQVc0cmZLYVppUWhjQmNTSUVISmZBdlAxNyswNFhMZmJZd3RaeTV2UElrTDUza0piTko5bUdTZjVia255VVpTRWtPClNwS0RrRnpveUp0SFBuVGt6Z0JPWk9SRkFOd0lnRCtMSEVya1NFT2VKT1JLUWI0RTVFMUEvdlRqVVQ0KzFlTlVQVzdGNDFnN25xWGoKV3puT2hlTmVOdzVtNDJJMVhrYmpaek9lSnVOck1kNFc0Mjh3SHZmaWRDMmV0K0orS1Q2STRvY21ya2ppMWhISGhyZ2ppRi93Y0E0ZApMbUxEVVdSNGl3c2R3MExYaUd3Y0ZYb0haUGQ0YkNDUFBjU3hBWERzQUxTZEpOdE1zdTJrc2FOZ2U4cTFyVndacmRWR29OcGdxQjJHCjJnMU0yNEZwUDdENENCWS93ZUlyVUx3RmlvbmZJUEVkU04rQjlCOUlFVThHOGZBbEhONkVhRVloYXBqVEdHWTFocm1ObXplRmgxTjQKT0hIa3pDRThIY0xYb1NURWxJUTRLSUVISWZBZ0JId0dZQXBnNWNzcVZLWkVlZUlrTDV2a0paUE1aSktaUzdMUGt1eWpKUDhreVVCSQpIblRrUVVjdUZNQ2JSajVrNUU0QVRnVEFpNHJjaU1pZlF3NGQ4cU1nVHdweUpTQm4rdkdtSDMveThhZ2VuK0x4cWgyMzBuR3NITmZLCjhTMGM3N3B4THhzSHEzR3hHUytUY2JRWVY0UHhOaGgzZTNFNEY1ZHJjYnNWMzB2eFB4UW5OSEZFRWw4Y2NXdUlZMEhjOGNNcmVMZ0cKRHYrdzRTUXlQTVdGdjdEUU15TGJSb1hPQWRrN0hoMmJpTGFOYVB0SXRwVTBkcFBHZm9KdEtkZW1jdTByakoyRnNiVlltNHUxU20wRgpxTDNBdEJtWXZvSEZPN0NvZUFvVUV6ZVFuZ1BwUFVEOEI0Z1BBWkhNNGNzY25vVG96VVJ6Q2RGc1FqU2ZZSmhSTU14b0NyT2FOWVdaClRlSGJGTjVONGQyOGdSTkhEaUVkTzNsYXoyRHZtU1RzU2hYTmQ4R0REbmpRQVFjeTRJdVhBckJjV1VxQjRvUkpYaTdKU3lXWnFTUXoKazJRZkpQODVjcUFqRHdyZ1FrWXVaT1JOQUQ0RXdKMUZUa1RrUlVOdU5PUlFJWWNHT1JLUUovMzRrbzh6OVhoVGp6L3hlTlNPVCtrNApsWTViNVRnV2ptZmQrTmFOZDluNFY0MkQwZmlZakpmRk9CcU1yNzI0bTR2RHRiaGNpOU94K0oySzg2RjRvSWtYbGpqaWlDdUtlRFhFCnJ5Q2UvWEJJRDhmQTRSMDJmRVNHbzdqd0ZoWU9JL0kwS3JTTngrZDRQQS9IOXVIWVFiUk5KTnNCWkJ0Sll4TnNRN20yRk1hdXd0aFgKckozRjJscXF6YVhhQkZUYkM3VU5vRFlDMHlzd1hWVDhCSW1uSVBFV0pCNEQ2VE9RSXY2RHc0ODVQSm5veTBRekNkRnNKbXFZVXpETQpad296bWpTRmJONFFIZzdoNGN5WnM0ZXdHNFFINkdTZ0F3dzQwSmVmQW53RXlIS0ZTVVZLbENaSzhqSkpaaUxKQVJ6SXlJTUF1QkFBCmJ4SzVjOGlKaHJ4SXlJMkMvQW5rUnorTzVPTkpQcjdVNDB3ODNyVGpVRHNlcGVOVE9WNkY0MVkzam5YaldqYStWZU5kTlA0MTQyRXkKUGhialpqQ085dUpyTGU3RzRuRXJQcWZpZFNxT2grSjhKeDVZNG9Ra2ZpamlpU0ZPQlhIR0Q4OTZPR1NIVytEd0RSb09Jc05MV1BpSwp5TCtvY0JtUXAvSDRHNC9YNGFpOWtHemprV0I3Q2JhZFhCc0tZMU5oYkN2V3htTHRMTlhXVWowWGFoTkEvUmZxRDVnK2dlbkJMSDZCClJjVTdvSmdvL1FWU3hHK0E2TUhoUVRpOENOR1BpZVl4MFZ3bWFwaE5NQ3pNYUFyVkVPWTJiZ2ovQms2Y3djc1pwR05uOE00Z25qeVMKZzcxbnNDdFZmSytDQTMwNWtKZi9jTm15clBJbGxTK25NR0VldWMrUit3VHdIeU1IQXVCQlJTNVU1RTBpSDNJS09aR1FGd1c1RVpCRApmZnpJeDVGNlhJbkhsM2FjYWNlYmRQeEp4Nk55ZkFySHEyNzh5c2F6YWx5cnhybG92R3ZHdjJROExNYkhYdHpNeGROYWZJM0YzVlk4ClRzWHBVdHdPeGZOT3ZNL0VBVXQ4Y01TaklpNE44U21JV3o5d2VPU0daOUJ3RHhrKzRzSlJSSjVGaGIrQXZJekgwM0Q4RGNmcjBKNkgKOWoreUY5TDRJbzBQQUx2a2VpZU0xbGV4L2tyMVdhclhRajBYNmdtWTNzdjBCeXdlZ2NVbnNLaVkrQWdTS1pDK0FzVERmeEE5Q05HSApFTTBqUk1rWTVqS0cyWXhoWVQ2aE1LTlFtRk5JUTVqWEVINE40ZG0wY2ZNR3p1RGpDTXFaUTJmd2RRWUg5VWdPdGt2bE9lY1pKR1FnCkx3Y3E0RjE4dHR4bkFHWVdMR2RlV1VKNXdnemdQa1lBT0ZDUkJ4RzVFSkUzaDN4SUNCR1FGLzI0a1k5RGUveUl4NUY0WEduSGwzU2MKS2NlZGNQd0p4Nk51Zk1yR3Eycjhpc2F6YUh4cnhybGszRXZHdjJJOERNYkhYTnlzeGROWW5HM0YzVlE4THNYcFVOenV4UE5NdksvRQpBVWw4VU1TaklaNEk0dE1QdDNwNFk0YzdibmlraG1QSWNBNFlMc0xDVDFUNGlncG5BZmtYajVmaCtCcU94Nkc5anV4N1pBK2s4VU93CkJ3RDdJOWNudVo0Sm83VktuYjZBNmI4czNvQkZCUlFQUmpGUmVnbWtGQ0RlQWtRTkRzL0I0VHVJM29Oby9pQnFtTWNZbWluTUpSUVMKNWhRSTh4bkNqQ2FuV2NPbXpTQ2NPWGZ3NUJtOG5zRURGVURBQjJCbXFVSmxTaFFvVHBnQTNBZUEveFE1RUpFRERYblFrQXNKZVRQSQpoNExjQ2VUT0h5Znk4U0lmTitweEtJOGY3WGlTaml2bCtGS09NK0c0MDQwLzNiaVVqVlBWZUJXTlg4MTRsb3h2eFhoWGpIdkJPTmlMCmk3VjRHWXVqc2JqYWlyT3ArQnVLeDUwNG5ZbmJsWGhlaWZlUk9PQ0lENHE0WVlnamZ2aWloMWM3SE12aDJnMkgxUEFMR2E0Qnd6OVkKK0lqSW80RDhpc2UzZUR3TXg4L1Ezb2IyT2JMZjBYZ2ZqUStDUFJIc0FiaitDT09WTUw2SjlVK3NqMUw5bE9xclVIK0ZxbVZhd0tMaQpFMGc4bU1TSFNYd0QwajhnUFFTSXIrRHdGaHdlZzhNTm91Y2dHb0poRnNHd01KTXB6R1VLTXdtRnVRUVRUaURNYWRTc0dXd1RadzRkCk9uZ0dYMGtsNTV4bGxNay9YZjdUNVZ4OHRtUmhMcVZBZVlLRVdlVE1JdmNoOGg4aS94bHlJQ0VQRW5LaElHOEMrZENQTzMvYzZlUEoKNDlBZFA5THhwQnhYd3ZHbEcyKzZjU2NiZjZyeHFCcWZvdkdxR2IrUzhhd1kzNEx4cmhmL2N2RXdGeDlqOGJJVlAxTnh0UlJuUS9HMwpFNDh6Y2JvU3R5UHh2QkhmRy9FL0VSY004VUlRUi94d3hRNnZjdmgxdzdNYURwbmhGekJjdzRWN3NIQVJGVzRDOGlnZXY4THhMaHdmClEvc1oyZHZJUGtmamVUVGVCL1pCcmlkeXZSRkc2NTFVRDZWNktkUlRvZDRLOVZlbXp6TDlBSXZuc3FoNEF4UVREMGI2TU5LTGtUNkEKK0FnUVA4SGhLVGg4QnRGcllKZy9NTXdnRk9ZUkN2TVl3bHlHTUpOZ2huQXdwekNZend4bU5JTlBNNmdHVGh3NWRld0kvczdnZjdqOApaOHQvdG1UQmNrVktGQ2FSK3d6NWo1QURCWGxRa0FjQnVkQ1BOMzk4eU1lZFBVN1U0MFU4YnJUalR4Mkg1amhTamlmaHVOS05NOWw0ClU0MDcwVGdValV2Tk9KV01WOFg0Rll4bndmaldpM2U1K0ZlTGg3RzQySXFYcWZoWmlxdWhPTnVKdjVsNFhJblBrYmpkaU9PSitKNkkKLzRXNElJZ2JlamhpaHl0eWVIWERyeHFlelhCSURMZHc0UmtzdkVQa1FVQitCT1JOUEQ2RjQxazQzb1gyTWJLbmtmMk54dXZBbmdmMgpQNjRYY24wUnhnZGdQUkxybDFUZnBQb24xRWVoZnNyMFZhYS9zdmdzaXg5QThWd1VUNEJpNGhGSXZBTFNMeUJGdkFPSWgrRHdFUnhlCmdrTUxvcjhnYXBnM01Nd2RoRkNZUlNETUk1QWhOSFBDWUVhVFJvM2cxN0JwSTNnM2IrQUlQbzZjT25ZRXJ3ZkY5U0Q0endEM0dTQUwKRnA4cnl5bGZSamtTUUpFaFovb0krVStRQXdINWNTRWZiL2I0VUk4N2VaeG94NHQwM0NqSG56a094WEdrRzAreThTVWJaNnJ4SmhwLwptbkVvR1plU2Nhb1l0NEp4ckJmWGN2R3RGdTlxOFM4V0IxdHhNUlV2Uy9FekZGYzdjVFlUZnl2eE9CS2ZHM0U3RWNjTDhiMFE5d1B4CndBOHY5UERERGsva2NPcUdNMnA0RnNNZkx6elN3ak5FbmtPRmc0QzhpTWVYZUR3S3g2L1Ezb1gyTUxLZjBYZ2JqUT09CgldXT4KCTwhW0NEQVRBWwoJejRFOWordDlYQitFOFVTc0I4RDZJOVVycVZLbml3SW9mb3ZpdVNTZWdNUjdTWlJlQWNRdmdQZ3dpQTRjL29IRENhS25JUG9LRExNRgpoaGtEdzV5QkI0WDVnMElSQ1BNWXdqeW1EQWtsRE9ZemFBVFp2S0ZUUi9DdkEzR3lqNWI3Q0hBZkFhcFFjYUxrU0FCR21FRCs4K05BClB4N2s0MEU5THRUalRSNGYybkduamhNWjRmanp4cUUzZm1UalNUV3VST05NTk40MDQwNHlEaFhqVWpCT0JlTlZMMzdsNGxrdHZzWGkKWFN2dXBlSmdLUzZHNG1Rb2ZuYmlhU2JPVnVKdUpRNDM0bk1pWGhmaWVDQ3U5K0YrSHk3WTRZVWNmcmpoaWhwT3pmQXJobWN2M05IQwpJeU9Qb2NJM1FON0Q0ME04Zm9UalRUZytoZllzc25lUmZZekcwOEQrQnZZNXJ1ZkIrQitNRjJJOWtlcU5WSCtFK2lUVU02SGV5ZlJRCnBwZXllQ3FMdDZKNExJcUo3NUw0QXFUL0lyMEIwaU9BK0FRUUR5T0lYZ0xEVDJDWUtUREVvREJ2VUpnNUtDVE1JQkRtRUFoSElET1kKeXd3S1poUUVjd3FDUDRObXpSekIweEY4bmdQM3lYSWZMUGU1TW1VWnhVa1NKQUVRWVFvNU13Z1RpTStQLy9nNFVJOEg4YmdRanpkMwpmRWpIaDNMY21lTkVPRjUwNDBZMi9yUnhhSTBqMFhnU2pTdk5PSk9NTjhXNFU0eER2YmpVaTArNXVGV0xYN0Y0MW9wdnJUaVhpbnVsCk9CaUtpNTA0MlltYm1YaGFpYStSdU51SXc0bjRYSWpYZ1RqZWgrdDVlSitIQTNZNElZZEhOMXlhNFlzWWJyMXdySVZySTEraHdpOUEKWHNQak9UaitnK05GYUY5Q2V4VFpxOGkrUmVOaFlEOERleHZYNDJEOERzYjdzQjVJOVVPcUwwSzlFV3FTNlpkTUZ4VnZKZkZaRXE4bAo4VnVrN3lJOUFkSjdRZndYeEI5dytBUU9EK2J3WVE3ZlFQUmlvbjhnZWdnTWN3U0dXUUxEVEVGaHJxQXdYMUNZTXlna3pCd1E1ZzRJCkJ6TUlnem1Fd1N6Q1lCNHpTTWFNWUM1Qk1Kc2crQlRPdkFtOEhNSHZtU0pEaE95RDVjd3JaMXE1bENoUW1ENC9QQTdFNDBFN0xxVGoKVFIxdjR2Z1FqanR2bk9qR2kycmNxTWFmTkE2bDhhTVpUNUp4SlJsbml2RW1HSDk2Y1NnWGoycHhxaGF2WXZHckZjOVNjUzBWNTBweApMeFFITzNFeEV5Y3JjYk1TUnlQeHRSRjNFM0c0RUo4RDhib1B4L053dlE3djQzREFEUi9VY01NTWwyTDQ0b1ZYTGZ3YVdlR1JrTWZ3CitBMk83NkI5Q08xSFpHOGkreFNOWjRIOUMreGpYRStEOFRjWXI4UDZIZFg3cUQ0STlVS28weCtaTHQ3SjRxRW9Yb3JpcVNUK1N1S3oKU0s5RitnR2s1NEw0TG9ndkFQSHdDQnhlZ2VqRFJNOUE5R0lNTDhZd1AyQ1lJU2pNRWhUbUNRcHpCWVE1QThLc0FlRmc5bUF3ZnlDWQpRUkRNWk1vSVpoSUVVZmlad0tkUkUvZzFjT0lFUG1lbWxUT3JmQXFVTDU4d1FYSUVnQ0pDbUQ0K2ZuWWNTTWVEZEZ3b3g1czQzcnp4CklSdDMyamhSalJmUnVOR01QMmNjS3VOSE1wNFU0MG93enZUaVRTL3UxT0pRTEM3RjRsTXNYclhpVnlxZWxlSmFLTTUxNGw0bS9sWGkKWVNRK1J1SmxJNDQyNG1vaTNoYmlieUF1OStGMEhuN1g0WG9jenJmaGZ4b3VtT0dHR0k1NDRZb1dUbzA4WTRWbksvd1I4aFVlYjhIeApHYlRub1AySDdFVmtUNkx4SjdCWGdUMkw2MTh3WGdiamFWaC9vL29jMWZPZy9nZjFRS1lmTW4yUjZZMHMvc2ppbFN5ZWllS2RLQjVLCjRxVWtYcEVlaTNRQXhHOUJQUHlYd3g4UWZRTFJnNGsrak9FWk1Nd05HR1l4aGZtQndneEJZWTZnTUU5QW1DdTRnSEF3YnpDWU9SZ0UKUVRDSElKaEZFTXdqQ0pZSnpDUUVaak9CdVlUQWJNSUpnUm1GRkFMem1jQ01KcEJONE5rRXZnazhuTUJMVG9rUlFtWldPWlBLbVZTZQpPRWtTaEFua3pCNzM2WEdmSHgzL3lYR2dIQS9DY2FFYmI5cDQwOGFIYXR4SjQwUXpYaVRqUmpMK2pIRm9qQ1BCZUJLTUs3MDRrNHMzCnRiZ1RpME90ZU5TS1Q2bDRWWXBicFRnV2ltdWRPSmVKZTVVNEdJbUhqZmlZaUplSitKbUlxNFY0RzRpL2ZiaWNoOU4xK0IySDUyMDQKbjRiN2FYaGdoaGRpK09HRkoxcjROUExXQ3NkQ1h2djRSOGRIYW45QmV3M1pkMmc4aU1hUHdMNEU5aWl1WDNHOUM4YkRzTmFvNnFDKwpCL1UrcGc4eS9aREZGMWs4b25nbGltZVNlQ2VKaHlMOUZPbXJTTEVnWGdERXczYzVmQUhSZjRuZWdLamh3UmdXWmdjS013U0VPUUxDCkxBRmhwb0J3TUdjdzJJRmc5a0F3ZnlBb3doZ3lnV1pPUUFPWTA3UnhFL2d0Q0RubjdBQ2N6Snh5NXBRenBTeWhQRUZpaE9ualRCOGUKOTlIeEh4d0h1dkVnR3hlcThXYU5EOUg0RUkwN1o1eEl4b3RpM0FqR256QU9mZkdqRjA5eThhVVdaMnJ4cGhWL1VuRW9GWmRLOFNrVQpwMEp4cXhQSE1uRXRFK2NxOGE0Ui94cnhNQkVmQy9FeUVEOERjYlVQWi92d053K1A2M0E2RHJmYjhEd04zOHZ3UGd3UHhIRENDNDlhCnVEVHlpeFZlaGZ6MThZMk8xMm9QcWIyRjdERTBma1BqUFdBZkFuc1MxNSs0WGdYaldWanZ3dm9ZMWMrbzNnYjFPS2pmTVQyUDZYMHMKUHNoaUVjVWJVVHlTeEM5SmZKUEVPNUUraWhUeFZoQi81ZkJaRHEvbDhGdWk1eEk5QWRGN01id0Joa2ZBOEdFS013T0ZXUXhoZG9BdwpQMENZSVJqTUZReG1Dd2J6QllNWkE4RzhnV0RtUURCM0VKZzlBQ0V3aHhDWVJRak1Jd1NXZ0VJS2dQa000TldzYVJONE9pZWVCK1pNCktWSE9oUExrU3lkZktqa3k1QWV6aDQ4T254ei93ZkZ6NDBBMUhsVGpRalRlcFBIbWpBL0p1RFBHaVdDOENNYU5YdnpwNHRBV1IycngKcEJaWFluR21GVzlTY2FjVWgwTHhxQk9mT25FcUU3Y3ljYXdTMXlMeHJSSHZFdkd2RUE4TDhURVFML3Z3TXc5UDgzQzJEbmZqOExnTgpuOXR3T3czSHkzQTlETys3OEQ4TEY3VHd3c2dmVm5naTVLZVB0em9lcTMxVys4ZnNLelQrUXVNMVlNOEIrdy9YaTdpK0JPTlBXSy9DCmVoYlZ1NmcrQnZVMHFMY3hmWTdwNG44TVVRd2c4VWlZU084RThWQVFMd1h4VkE1ZjVUQmZPY3hab2xsTE5HK0o1aTdSTDRiWmdNS00KUUdGV29EQ0RLU1RNRFJBT1pna0c4d1NEbVFMQlhJRmd6a0F3YTVBM0NEd0hnZmZnZzhDREVKak5BT1lTVEFETUo2QUFtTkdrV1FONApOb0RQNDhDYnpJUnlKcFEvK1ZKSkFFT0FNSGVjcWVNK09lN3pjNlBHZ1dnOGlNYUZacndwNDBNeFBoVGpUaGduZXZFaUZ6ZHE4V2VMClExbjhpTVdUVmx4SnhabFN2QW5GbjFBYzZzU2xUSHlxeEtsSzNJckVzVWc4YThTM1Fyd3J4TDlBUE96RHh6eTh6TVBQT2p5dHc5YzQKM0czRDRUUjhMc1ByTVB6dXd2VXVuTS9DL3lJdldPR0VGUjZGdlBUeGk0NnZPcDVSKzhic3RZMkhiSHdrOWhpdzEzQjloK3RCTUg2RQo5U2FzUjFHOUN1cGJVQStEZWhuVDA1ait4dUoxTFBwUWZCREZDMGs4a2NRRGtQZ2owaWVSZm9uMFRSRHpFOFFjQlRGTE9jeFVEck9WCncyZ2VJSnE1R0dZQ0RITUJodGxMWWY1U21BOG96QWtRWmdVSTh3S0VZZ2F6QTRPQ2VRTEJUSUZndGtBd1h4Q1lNUWpNR0FRK2c4QnYKRU1oQkZtRUV3RHdHTUpNQnpHVklBTXhtZmdaTkdqV0FaejVoT2ttQ0pBaFR4NWs1enN6aGcrTStQemIrQXlUalFUSXVGT1BOR0IrQwo4YUVYZDdvNFVZc1h0YmdSaXo5WEhMcmlTQ3FlcE9KS0tNNkU0azBuL21UaVVDVXVWZUpUSkY0MTRsWWlqaVhpV1NHK0JlSmRJUDcxCjRXRWVQdGJoWlJ4K3h1RnBHNzYyNFcwYURwZmhjaGhPZCtGM0ZwNW40WHlSOTZ2d1FNZ1BRdDd3OFlpT1YzVDhWUHRxOXRmR056YmUKRWZzSzJGdTRQZ1BqTnpEK2cvVWhyQ2RSdlFucVUxQy9ndm9XMDhPWWZzYmlheXdleCtKMUtKNkhZdUtISkw2STlFYWtQNEw0SkloNQpDV0p1Y3BpbkhHWXEwV3dsbXJGRURmTVd3OHlsTUJOUW1Bc296RjhJc3dHRUdRRkNNSU01ekdCbVlEQTNJSmdkRU13UENHWUlCSE1FCmdsbUN3RHhCWUs0Z01GY1FlQXNDZndIZ005REFBOEIvQUhnUUFCOEM0RVVZNFMrVCtjdGovbkpHNFMrRk00QkhBL2c3VTNMT09VWUgKbWRua1N5Wlg4aVVTQUFBQUFvU0o0MHdmRy9mNW9mRWZJQmtIaXZFZ0dCZDY4ZWFMRDczNGtJczdXWnlJeFl0VzNFakZueXArbE9KSQpLSjZFNGtvbnptVGlUU2J1Vk9KUUpCNDE0bE1qVGlYaVZpRitGZUpaSUw3MTRWMGUvdFhoWVIwdXh1RmtHMjZtNFdnYXJwYmhiUm4rCmh1RnhGMDVuNFhhUno0djhYb1g3UVI0UThvS1BMM1I4MVBGUzdSV3pwMmJQMkhnczlscnNINitQdlA0QzR6VlkzOEg2RDlXTHFKNEUKOVNlb1R6RTlpK2xmTEQ3RzRtY28zb2JpY1NoZVIrSjdKUDVING9OSVAwVDZJb2czZ3BnRE9NeE1Edk9Ud3h3bG1xZEVjNVZvdG1LWQpzUmhtQVF5emxzSThRR0htUXBpN0VPWUNDTE1Yd3NHc3dHQmVRRENIRWN3TkNHWXhndm1Cd0F4QkJJRlpna0FMQUg4QkJvRFhBUEFiCkFKNER3QTlPUU9IdktmejlET0NaTExrUklNd2JaOTd3cWZFajR6OHgvaFBqUURBT0JPTkJMeTdrNHMwV2I3YjRFSXM3VjV4b3hZdFUKM0NqRm9TbCtoT0pJSjU1MDRrb216bFRpVFNUK1JPSlFJeDRsNGxNaFRoWGlWaUIrOWVGWkhyN2w0VjBkL3NYaFlScyt0dUZsR202Vwo0V2dZcm9iaGJCanVkdUZ4Rmo0WGVic0t4NnZ3UGNqM1BSN1E4WUtPTDlUZU1QdkQ3QlViUDIyOEZmc3I5dG5ySDYrdndQZ0wxbWV3CmZrUDFIYWdIUWYwSTZrMU1qMkw2Rll0dnNYZ1lpak1TYnlQeE9SSy9RL29lMHYrUVBnamloeUJtSW9mWnlHRStjcGlUSE9ZbDBjd2sKbXAxRWN4VERQTVV3VXpITVZncnpsY0tNcFRBTHNJVXdjeUhNQkF4bUw0UDV5MkErWURBbklKZ1ZFTXhnQkhPWUJod0l6Qk1BbmdMQQpWd0I0d1FjZy9EMkV2NHZ3OXhIRy9KM016ZnhsRS81dXdnbC9iMlBpTVRiSVN5VmZKdmt5U1FBL2NqQnRuRm5EaDhaOWZvQmVITWpGCmcxcGNxTVdiTE41YzhTRVZkNm80VVlvYnBmZ1R4YUVuZm5UaVNDYWVWT0pLSmI1RTRrMGo3alRpVUNJZUZlSlNJRTRGNGxVZmZ1WGgKV0IydTFlRmNITzYxNFdBYkxxYmhaQmx1aHVGb0Y2NTI0V3dXM21iaGNKR2ZxL0E2eU45Qlh1L3hmSTcvYzN5ZzlvUFpGelkrMm5ocAo0eGV4cDE3UGVEMlc4VnJHUDFvZldUMkc2ak5RejRGNkQ5T0htSjdFNGswc1BvWGlXU2plUmVKZkpENUc0bWxJZjBQNkhGTEUvMEI4CmtNTTg1REFYT1l6bUpGSERETVdRU21HdVVraVl0UkJ5R2N4ZEJuTUJCZ2htQkFRVkNNd0xCR1lHQWpNRGdHL2dBY0JEQVBnSUFDMzQKT3daL3orRHZHdng5Zzc5ejhQY08vdTdCM3owWTRlOGsvTjFNQ1g4MzRlK1RZdHJrSlpJdmtYeDU1TXNqQUJRaHdrTUhEaHRNR2o0eQo3dk1ENHo5QUxnN1U0a0F0SHNUaVFpdFVmQ2pGblNsT2hPSkdKLzQwY2FpSkg1VTRVb2tqalhqU2lDK05PSk9JTzRYNEU0aEhnYmpVCmgxTjVlSldIVzNVNDFvWm5jVGpYaG50cE9GaUdpMlg0R0lhWFhmaVpoYWRaK0ZyazJ5cjhyY0xqSUUvM2VMdkg1emwrVDN1LzdBR3oKRjJ3OElmYUcyQjllbjNqOWxQRld4bCt0ejFydldIMEY2aTFNajJGNkRkTjNXRHlJeFl0WWZBbkZuMUM4aXNTdlNId0w2VjlJTDBQNgpHdExmUUh3T3hPOUFmSS9EL09Nd21vdEVzNUdvWVdaaVdKaWxGQkptTElSYUJ2TUFnNExaaTJEK0VwZ1BDTXdKQkdZd2dUa000QmtBCnZCakFPL0QzQnlMNHV3Ui9uK0R2RlB5OWdyKy9EdnpJK0wyTVh5Ymg3MmIrdnNiRUN3amdQM3pzcURIalRCbG54cmdQREo4WC8zSHgKMCtKQUxBNFV0T0pDS3Q1VThTSG5pUk9kZUpHSkc1WDRzOFNoSkg0MDRrZ2luaFRpU3lIT0JPSk9JUDcwNFZFZUx0WGhVeDFleGVGVwpHMzZsNFZrYXZxWGhYUm4raGVGaEZ6NTI0V1VXZmhiNXRBcFhnendiNU4wZUQvZjRPY2ZYT2Y1T2U3M3MrUnJ2aDMwZzlvUFhGMTRmClpieVU4WXZXVjYxbnJMNnhlaTMxajlOWG1ON0M0ak1zZnNQaVBTZ2VoT0pIS0w1RTRrOGtQb1gwSzZTSW40SDRHZz09CgldXT4KCTwhW0NEQVRBWwoJaUw5eCtCeUhXY2RoNWhITlA2STVTQlFBdzJ6RU1COHh6RWtNODVMQ3pLUXdPeWtrekZNSU14WEN3WnhsTUFzd0tKaTdDQWJtTDRIWgpBTUI4QUdBR1BCakFMd0I0QnY3ZXdOOGgrS1BBN3hWZzRQY01OUEQ3Qm43bndPOGNnT0IzRUVRbzQvY3lmcDhqSmNmSUlDK05YRWlRCkhUYVlQaTd1NHdKb3hZR0NWRHdveFlWUXZJbmlReWMrWk9KT0V5Y3E4YUlTTnlMeDU0aERSL3dveEpGQVBBbkVsVUNjNmNPYlBQekoKdzZFNlhJckRwemljYXNPdE12d3F3N0V3WEF2RHVTN2M2OExCTEZ3czhtUVZibGJoYUpCWGV6eWI0OTBjLytaNE9lM3BzcmZMUHEveAplOWozWGY5M3ZTRGpDUmx2YUQyaTlZbldUNnV2VW4rbHZuRjY3ZUloRngrNStBdUsxNkI0RG9yL2tQZ1FpU2NoZlFucFR5QmVCZUpaCklONEY0bUVjZnNiaGJSdyttbmRFYzQ5bzltR1lnUmptSVlhNWlHRmhUbEtZbFJSbUpvVFpDV0dHUWpobE1GTVp6RllHc3dobUFRVHoKQUlKZEFqTUJnZGtMWVBZQ2VBTUFqd0RnRXdDOEFuOEg4M2NHL2k3bTd3NzRYUUsvVCtEM0Npencrd1YrdjZEUEE3K1A0UGN4ZnBtTQozM05lQXZCbGtRZnhzVU5IRFdhTU0yR2MrZUxNRno0L0xJQlVIQ2pGZ1ZBOENNV0ZVRnpveEpzbVBsVGlReVR1SkhFaUVpOGFjU01SCmY0bzROTVNQUUJ6cHc1TThYTW5EbHp5OHFjT2RPQnhxdzZNMmZFckRxVEs4Q3NPdExoenJ3ck11bk12Q3ZTSVBGbm14Q2llRHZObmoKenh5ZjV2ZzE3ZHUwZjhzK0x2dTV4dHMxSGc5N3ZldjVHTy9IZUVEckJhMG5yRDVhdlpUNlJlcXAwek11SHJ2NHJPSWRGUStwK01qRQpZMGk4aHNSM1NQd0g2VVZJUHdMeEpoQ1A0dkFxRHMvaThDNE9IK013bW05RURYTVB3OEpjcERBYktjeEhDUE1Sd3B5RU1ETVp6RTRHCjg1UEJIR1V3U3hITVZBUnpGY0Y4UlRCakNjd0NCR1l0Z1hsTFlONENtTHNBdmdCQUEvNk93TjhUK0xzQ2YxL2c3Mkg4emtBRGZoZmoKZHdmOC9vRGZJZkR6cThCUEJMOGNSMHFNQy9LU3lKZER6Z01IalJndXpteHhueGIzWVhHZkZmOVo4UjhWLzBrUmRPSkJKaTVVNGswUwpIeHJ4b1JGM2lqaFJqMk1vSGNtVXFYUWtZYXNsWWFzMXM5V2FjYlVsdU5rU1hCUGU3QWx2NHdrbzRNWVVybWp3RlUxZjBUU2pkUTBiCmE1czJ6U1pOVzlGb21iQkd5d1EyV1NhMGNaT0ZWVUtjS3pOeDVGeVptV05seGd4VkdUMVRaU2FseUV4R2thR01HbE1aTldZTE5jYUYKZWhyaGZSTGhmWElTNFU0aTVLWWxENUp5a2daUHl1QklHZndDQ3lxZ0lJSWpRWkFFQVpLWUJwVEFYQW5NSlFtUUU2ZENHVG1RWmVaQQpscUVEU2FaT2hURWoyQkhoVG9VUTdsUUlBVStGRWZDTWtBZHlqQjdJTVpLUFl5UWZ5ZXg1SkRQcFdJYlNrUVRLU3EyWnlxM1doRzNXCkJEZDdndnMyb3ZEaXhqTVlld1pqcjJuNm1xWVoxYXhoWk9PbVRWZmR2S202Y2ZPcW16WnMxbGpWWEF1ZUlIVHlaSlhRSnF1RU9GZG0KNU15eE1rUEh5ZzRWQ1hlb3l1Q1pLb05ucWt5ZXFUSjVwc2pvMlNORmhqSnFEQ1hVbUVxb01TTzRUeU5nSnhINlRTR2NDUVFtRURMVApCMWxwZzV5VUFSSUdFeHhKZ2lOQjhNQ1JIR0RnU1dHZUZFWkpnU3NwY0IwbXZJRTBBd2ZTVEJ4SU0zSWd6Y3doVXdlU2pCM0lNWFlxCmpHRG5EaVFaUEpCNUhzdm9lU3dqK1VpQzVDTUplOHhNT3BKQTZXaUdVbXVHc29SS3JRbVZXUk8yMlJPMjJSUGNMQXB1SXdwdUNtL2oKbWJmeERCcHNHbnhOZzlXc2FXc2JxNXV1dm1rNDFEWnNxbXR1VlpOenhpckJEVllKYjdCS2lHTTFwNHFFT25pbXlPU1JsQ0lqdVNkcQp6R1RVbUVtb01aUlFJMVJDalZENUpJTHJKTUtMbTBMb3BoQ2FLWVF6Z2ZBUDh0SUhlY21Eck9SQlZ1cUFBdzQweUNBalpZREJCUlpVClFNRUVFamh3SktTa0JjQWtLWENsQks2RXdBc3Z1QjRDNkxpQk5PRU5wQWx3VElnRFdZSWN5QkxtUUpaQUI1SUVPcEFrbEtrRFNZS2QKUnhMdVBKcTU4MmdHejZPWlBJOW04amlhMFNQcFdNSWV4eEwyYUUyWU5JRlNld0psOW9US0xBcVZXUlMyMlJTMmpTbHN6N2lOYUZ3cwptalF2VmcyK3JzRlhOZmk2cGhuWHNMRytxYTdKV3ZKVTFkUzVNZ1BueWt5Y0t6Tnk2TkM1UTFWR2lveGsxQmlvN2RNSTd1dUVtMERBCnpRVENsMEQ0MGdmM1lBTU5rREN3b0FJS0RwM2dSeE5JRU1HUElIamdSdzc4Q0ttQkl5RXhjS1F3UjFJNjRCTFFrYU9qRFp0SEZObzgKb3VEbUVZVTNqeWZBZVR3aHpnbHlIazJZODFnQ25VY3pkQjVMcVBOb1FwMUhFK3c4bW5ESDBZUTdlQnhQeU9ONGdoNUhTZTBKZTdRbwpUR3BSb05TaVFKbEZnVEtiUW1VMmhjckdNNVdOWnhyUmJOTzRXRFV1VnMxN1hmTmUyV0JHTm94dDNMUVZUbGVuY3VKTTQ4QnA4eXFiClY5bmtFYllWVExwV1p1SlltWkZqVldlS2pKNm9QV01tS1N1ZlJxaDhFbUg3ZnRCTUlQVFNCMS82NEVvZVhLbURuTlJCVHVJZ2E1Q1AKTk1qZ0NDcEJCRkFIeENDRldRQUp6Sk1VVURwQXlZQVhWdkRLTXBScUhzK3NlVHpENXZGTW04Y3pidDQ4cGdEbk1ZVTRqeWpJZVVSaAp6dU1KY3g3cE9LSlF4NDRqQ25jY1VjQ2pSUUdQRm9VOFdoVDBhRkhRbzAxQk1udG1UL2JNWlBZTVpmWU1aU01heWtZMGxZMXBLaHZUClZHTFZiTEZxdHRnMUxuYU5lMlhqWHRtODF6WnZHOHpvQmpPNmFjWTNiWVhUVlRoeTRwd0toOXJtTStaTTFkeXBJbUZPRlFsMHFNclkKbVpJaWswZHF6SjVKS05kSkJQZHRDZ0VFelBRQlh2b2dpWU9jeEVGRzRpQnJjSFNFZ1FVVlpDaVVnZ2traUNCRDhNQ2hEakNBdE1DUgp3Q0NRZE1DVkRMalQ1VTZheHpScUh0T3NlVVRENWhGTm0wYzBiUnpQdUhFODg4YnhEQnpIRk9JNHBpQm5EaDNIRk9vNHBtQkhtNElkCjdaazdlTFJuOG1qUDZNbWkwWk5OSTltWVprK2ptc25HTkkxcUtOZFVZdGxzc1d5MlZ6YmJheHYzNnNabGRQTXl2bmtaMzJBNDFxN0cKcWNxWkkrZlVPWExndURuVlRSWkFUODc1eDV6SktoTHFVSld4YzBjS2FnVEtKeEcyVGlLRTRMNU1JUFNWUEVEYUlJTUxvQlpVTU1HZgpZaHBnQUJwbWdSOGhLWENrTHpyS25IRmNnOFp4VFJvMWptcldPS1poNDVnR3pSdEhOSEFjejhDUjQ0aG1EaDB0bWpwMnRHanVhTkhjCnlhTEJrMVdUSjZ0R2oyVGptajFZTnBUWU5aUllOcFJZTnBYWU5wWFhOcFZYTjl1cm15M2pHNWNSanNzSTUyV0U4MXJqdk5ZNDJBb0gKVytOZ2E1eTJ5dWxYNTV3Nmgwcm5VenB6cHRNNWMrS2NDdWZVTjZlK3lUbFRsYkV6VmViT0NKTlBJMHcraVZEcEpFS2xVd2picGhEYwpKcVlQWHFZUDhOSUhIblJTQjkzQmt6allRSU44aE1HVGd2dzBraUFDQ1BLemdmeHM0TThHR0RnVXpJL0EvRWlCSHlsd3BBU09sSFRBCmt3eDRrZ0ZLWHE3a3BZQTZYZktrNE5pR0RScEhObWtjMTZoeFhMTm1EUnRITlcwYzA3aHhUUE5HcXdhT1ZvMGNiUm81MmpSenRHcm0KYU5YUTBkYXhrMVZ6cDVFTm5rWTJlUnJaNk1HMmtjUzIyWU4xTTRsMVE0bDFRM2wxUS9tbThncG55eGpIdGNweFg2c2NYSjJEcTNPYQpTcWVwZEtoMTZFenJ6SkVUNTFNNG44TEpBa2ptbkgzSW9ad3FjMmVLREI0eVVXTW1LWjFFb0t6Y3V1L1N1K1NCQjYzRVFRYjVXUUVGCkVtUWpDU0xJUnM4SEhNaFBNZm41WkNBL0dmaVRnVC9ESEJybTBBVU9YZUFvZ1NNZDhLUXZUL3JpUmFtQUszWEpTMTJ5RGpJbk9MNDUKd2ZFTkNvNXVVbkIwYzhheERScEhObXUwYTlobzE3VFJybkdqWmZOR3l3YU9kazBjN1JvNWM3SnI2R1RaME1teXFaTmxZNmZOblVZMwplTEJ1OG1EZjZNRytrYnpDMlhPRk13bUg4aHFua2pGT0phT2NMYU9jclhYTzFyWE9lYXQwM2lvZFhKMkRxM1RxTk5WT1U2ZFRPM1UrCmpmTktrY0VqUlFhUDFKZzhVQ1BzZVJwQmhFbW5FQ1pEcUd3S29iSUpCQkJjSmhCY3BnOWVyT1FCVnVvQUszV0FrenJvcEE0YWFZTWYKUVRISXp3dU1Kb2dnRjBHUWpTQjR3QUVHc2xHWS9BeVRGL2dUektGZ2poRDRFUUpIUXVCSUJ4eUpnQ3QxaVQ0d1NjWXRRUnZIQkMyYwpFN1J3VU5EQ1NlSE5HYTBiTkZvM2FiUnQxR2pick5HeVdhTnR3MGJicGszV2padXNHempaTm5Ia1pOdk15YmFoMDlpR1RxT2JPbzF2CjdHRGYzTUcrd1lPRmt3Y0xSODhWanVRMWp1UTF6aDVHT1pPTWNpZ1o1VlF5eXFtMHpxbTB6dGxhNld5dGROd3FIZmV0MXNGVU96MWQKdkdPblRsNmtNNVh6R0hjU3orekpFelZHaitRSVQ1Uk9JVkEyaGJCbEFtSEw5SUg3d2J2a3dkc0JUdUtnTjdqQWlJSUpJaENUalJySQpSbUd5MFFMNXVVQitndmtUektFSkhJckFvUWo4NklBZklSbHdwQzlIK3JMRUpTOHhEWkNiQk1nVHhFbURBNCtaRXJSeVROREdPVUViCkJ3VXRuQlMwY001bzM2RFJ2a21qZFpORzYwWk45czJhN0JzMjJUZHRzbS9lWk4vQWlkUDRSazdqbXptTmIrWmc0ZERCd3FtRGpXTUgKRytmT05RNmVxNXc4VnpsNkdPZElNczdadzBobkR5T2RTU3NkU2pxVjFqcGJhNTF0dFk1YnRlTlc3YnpVT3kvMURwN2l3ZE5ldkhNNwppblV5blMvT3lTTzRPV2NLOXVDb0VmSkFqYUJuaE1rbVY2bURONm1EUnVLZzgvT0NYUFNBQTJKeVVRTlBCZjVVNEUvb0FZY2E4Q01ECmpyNGdlWGxTQVFROHFRdVhMUU5reVloaTlwQjV5MmpwbE5IU01hT2RZMFk3eHdTdEhCTzBjazdReWtGQkd5Y0ZiWnd6V2pob3RIRFEKWk9Pa3ljWlJrNDJ6Smh1SFRXT2NObzF4M0RUR2dRTW5UbU1jT2RnNGM3Qnk2R0RsMExuT3FYT2RZK2M2NXc0akhUeU1kUEl3MHRIRApXRWZTV21lUHRjNWtIVXFybmNxcW5jcHQ5WTVMdmZOUzhlQnBucDcyb21LZUp5cm15WWw0cm5qbmVaSE9ZK0RKT1VPTm9BZEtCRWtSCktDdVpRTmgrOENwNThDcDFzRUVmYWZDakRJNEJGQU1Mc3BFRjJhaUNYQ1JCQkJBVU5jQkFMZ3F6UUM0Q2s0MFV5RVlLSlBCbkFnajgKYWNDaEJrQy9ISGtwNEVnRVBLbkx1V1NsSlNZdG1VbExiaElnTzJISlQxZ3kxQlU0WENoSDBOWWhvNjFUSmt1SGhDd2RFa3JJeWtFaApLeWVGYkp3eldUbG9zbkxTTk01UjB6aG5UZU1jTm8xejJqVE9jWU9kQXdjckJ3NVdUaHpzSERsWE9uS3VkT1pjNmRDNTBxbkRXTWNPClk1MDdqSFh3TU5ySlk3V2p4MnBIMG1wbmovWE9aTlVPWmZVT1pmVk9aWFZMeGVOUzg3alVQTzgwenp2Rmk2MzRYT2VMZGI1SUoyZVoKNUJISGZSSkI4a2tFcHhBbW0wS1liQUtCc25Mckxubmd2a2tkdkVrZGJOQVpISnFOS3NoRUVHU2lCeHdRMHdBRFlZb1V5RVVLR0NXUQpqUkRJUmdqY0NJRS9EL2dUK3VWUUw0ZDYrUkdTVXRQVGxReGxKVU5aeVQxQStFQnJKd1J0blJHMGRlaVl5ZEl4SVV2bmhPeWNFN0p6ClVHaWtrMElqSFRTTmROSTAwbEhUU0djTmxnNGJMSjAyV0RwdXNIVGVZT25BdWRLSmM2VWo1MXBuenJVT0hjWTZkUmp0MkdHMGM4ZHEKQjQvMVRoN3JIVDNXTzVKVlBKSlZQSHVxZUNhcmVDaXJlQ2p6VkZMMWJLbDYzS21rKzA3eG9tUXZTcmJpbmxaVWxOd2pxUWRQNHAxcwo1NHAxOWppRk1Pa3FlZUMrU1J6ZzFpQ0RRekg0RXdNS01sRUVtY2dCb2pBTFpDSXdtVWlCVEtSQVVRSkdCMlNqQTI1a3dJME0rUFBMCm45QUNEaTNnUndUOGlJQWpkVGxTbDV6RUpTZHR5VXBic3RJQWVXa0FKaXhXTWxRVkttMjRWSUtndFJOQ0hUTFpPbWF5ZFVySTBtbXMKazZheGpocHNuVFhZT215d2RkcGc2N2k1MW5senJSUG5Xa2NPbzUwNWpIYm9NTjZodzNpbmp2V09IU3VlTzFZOGVLcDQ4bFR6NktubQprYXptMlZQTnM0ZWFaMUlQSlZXeWNpcFpPZDJ6bmU1eHAzdmNkM0VQVnR5REZmZE1LdmFlUktta25qdjVpblp5RnNxYzh3NDRiaE1JCmswMGdVRGFCUU1rRUF1V1NCMXNsRDdaS0hXdzN3RWdhOUFVVFBKQ2REbVJuQXd5RXlVNG5HS0lpQkhLUmtRSFo2QT09CgldXT4KCTwhW0NEQVRBWwoJeTQyOC9Pbmx6d0wrTE9CUUFnNGw0RWRkZnRRbEkzSEpTRnR5MGdCWlNVdFcwcEtYdE9RbEFUS1RBRTFVc3RTVVBDVWwrL2dBaCtRZApEN1IyUk1qYUlaTzFVeVpiaDRSc25SSWE2NWpRV09lRXhqb29OTlpKb2JIT0dXd2RORmc3YWJCMjFHRHRyTG5hWVhPMTQrWnE1dzNqCm5UaU1kK1F3M3BsanhVUEhpcWVPRlk4ZGE1NDdlZkJVOWVTaDZ0RkRsWlNrU3U2aFNrNVNKU2Vua3BUVFBaVFRQWlhUcmJzNCtXTEYKU2NwT1RKeThkSThrbnB4NDU0cDNybmduaS9CT0lObE1JRkF5ZlVESjlFRWxVd2R1RWdjdlJ0TGdLSVBPNEhtQkJFNEh4RFRnWENBNwp3ZVFoQmJJemdVeVVRQ1pDSUJNVmZjbEdYcktSbHo4Sk9MVExvVjN5RVpkOHRDVWpiY2xJQXl4bGFjTGk5RlFsUTFISlVWT3lsSlFvCmVURUJQR1N3QmRvOEdHanhhS0RGdzRFV1R3ZlpPeDVrNzR5UXRUTW1hMmRNNHgwU0d1MllhYlJUUXFNZEV4cnRuSUMxZ3dMV1RncFkKTzJld2R0QmM3Nmk1MmxsenZjT0c4WTRieGp0dkdQSEVZY1FqeDVwbmpqVVBIYXVlT2xVOWRxcDY3bFFsOFZBbDgxQWw5VWhTOSt5Wgo3dGt6blp5Y1RsSXVUbFl1VWxZdVVtNFhLYmV1SXVWYnFVaUpFeWx4WWlXdXBPekV5azlPNWptZW5Jam56bDlJUmsvWU1uMVF1ZlJCCjVaSUhXNlVPTW1nTStubkIwNEpQa0lra3lFUVJaQWZFTkpDSEdBaXpRQjRDbzRBVGdldzhJQk1ka0lrTXlFUUc1S0l2dWNpb2dCc1IKOE96eVo1Y001WktoVzVBR1NOS1NsUVRJU2xueUVwYk1oQ1V6WGNsTlYzS1RsZXhrSlR0VmdacVNvNlJNUmNsVVVDcHdnMk9TQW0yZQpDclI1THREbXlVQ0xaNE1zbmpzZ1pPK0VrTDBqUWlNZU1vMTN5alRlSWFIeGpobnNuUkt3ZDB6QTNqa0Jld2NGTEo0ejF6dG9ybmZTClhQR3NZY1REaGhHUEcwWThiNng1NEZqenlMSHFtVlBWUTZjcVdhY3FhWWU2NXc1MUR4N3FaSjdwcEo3cHBPU1VVbkpLdVdkeWtaSnkKc2JKeXExanBLbGE2YitLMk1uR0x0NVZOZWFsMHo2V1NPVEhQRS9FOEVVOFdBVXVncDVjOHFGVHlnSU1YWS9Ec2pDQS9NQ1FtTjhVMAp3RUNZQlhJVFRGT0JCUElRQW5uSWFVQjJmc25PTDVuSVN5Ynlrb3NLeUVVRjNLakxqYnJrSjVmODNISTBBSktXakNSQVRzcVNsYkJrCkpTeDU2VXFUbGR4VUpUdFZ5VTVVOGhPVi9EUWxSMFhKVWxHZTVDb24yYXBKcGg2ZzFTT0JWczhFV2owVmFQVmNvTTJEcDRNc0hnK3kKZUQ3SU51SVowNGlIREJZUENWZzhadkNVZ00xendoVVBDbGM4WjY1NDBERG1TY09ZWncxakhqWldQVzZzZXQ1WTljU3BTc3FwU3M2cAo3cUZEM1ZPSE9tbUhPbmtuejVSU3oyS2w1SjdGeXNuRlNrckZTc1Z0NVRaeDZ5YTY3cHZvWXVsMksyMnA1S1Y2bnBqbmlYbTJTaDI0CjcxRkRMMmdqQ3lvZ2NtWW5CRmxNQXd3MHcrUm1tQ3kwUUJOTVU0SGNUQ0EzRXhneUlBOTl5VU5mc3ROTGRuckpSQVZrb2lJQ2NsR1gKNXhib0FFZGFrTEprcEN3NUNVdFd1cEtYckdRbUs1bXBpaE9WN0RRbFAwM0pUMUtnNUtrbm1jb0prNHkxSklVdXJnTmF5UWNrMEVwVwpvTlZ6UVZZUEJsazlHV1R6YUpETnMwRTJEd2ZaUEIwMDV2bWdNVThJalhsR3dPWVpnODFEQnB1bkREWVBDZGc4WnE1NVNyam1PZUdhCkI0VnJuaFFZOWFCaDFKUEdxbWVOVmJLTlZkSk5WZkpOVlRKT2RZOGM2cDQ1MUVrNjFNazZVMG83VThvNzAwbzhpNVY2RnJkNkZyZVMKaTlzOWs0cGJTc1hLclp2NHV0TEtTb3hZMlh1a2VqS1diUTQzZUFNa0RNM2dnaHRWOENJS0RzRURlY2lCUE5RQUExbUlnVEFMZ0ZHZwppY0FCQnVUbUZ5OTVxSURzTENBN0NjaEVCR1NpTHBtSVN5N2lrbzIyUUxWa3FBRDVTSUI4bEVYSlNsYXlrcGVxWkNZcXVZbUtrNVQ4CkpDVktqb0tTcFo3a0tTZVpxa211YXBLdG1PU3JKUmxMU2M1U2tvTm9FTVp4VHdQYVBXSWcwRXBHb05WalFWYlBCUmxrOVd6UXFLZUQKUmowZU5Pb0pBYXRIQkt5ZUViQjZ4bUQxa0xucUtYUFZZK2FxcDRTcm5oTVk5YURBS0huR0tvbkdLcW5HdW1kTmRVK2I2cDQzMVQxdwpxSk54cUpOeXFKUnpwcFIwcHBWMXBwVjJGcmQzRnJkNEZsMDlpNUtLN2g1RmQxTFJwVXg4S1NzVHQ2NzBmYVh2aS9oaTZldGl4QzBpCklpSmxOK1drVkRLSkF6ZHBBeGRwQXhkSmd4ZUtBY2JnZ3Y0RUVrUUFnWmhtbUFYQUtKQkFGa0lnQ3lIUS9KS2JYbkxUeTFBQmVZaUEKN0NRZ080bTJaS0l0dVdpQVhEUkFOaG9nUDdYa3B3QVptaVVmWWNsSFdESVNsb3gwSlNkWnlVcFZzbElWcGltNWFVcHVraElsUTBISgpVVSt5MUpOUE9UbFZrMWN4c1ZxU3I1UmtyQ1E1QzBuV1FrS0hUSU54bkZ6QWNaSUI3V1FEMmowT2FQYzhvTjBqUVZaeWdxd2tCVm5KCkNyS1NGbVFsTDhoS1p0QW91VUdqWkFlTmtoOWdKVUhBU29hQWxSVGhLam5tS2tubUtrbkNWZElNbzZRSmpKSW5XQ1ZSc080NVk5MlQKcHJwSFRYV1NUWFd5RFhYU0RYWHlEWlVTRHBWU3pyUnl6clNTem5SYlo5RzFzK2plVVhUeEtMNTZGRjlKeFhmUE81bUlLUk14WmVWVwppbDMzUlhRcktZOG9lYWxreHVMbW5BbEplSkUwY0pFMGVJODBlS0VVWEFMbkVBUWZhamF3UUJaQ1FPZ0FBN0xRbHl6MHBWbEFiaEtRCm13VGtvUzU1cUV0MmNzbk9MVVFENUNJdHVVaExOaElnR3dtUW4xa3k5T2hLUnFxU2xhamtKU3A1YVlwVGxQd0VKVDlCeVZCUGNwU1QKVHpVNUZaTlhNYm5Wa2w4cHlWcEg4bFlBV1VnR0Z1VFlJdUJJcVlBakpSanRaQmp0SkFQYVNUSGF5UWV5ZXlESTdwRWd1MmVDck9RRQoyVDBWWlBkYzBMZ25nOFk5R21EM2RJRGQ0d0YyendmWFBTRmM5NGh3M1RQbXVvY000eDRTR1BlVXdMaW5CT3VlRTZ5VEtGZ256MVFuCjBWUXAxVkFwMTFBcDIxQXAzVXdyNFV3cjQweTNjcVpiT1lzdW5VVzNqdUpyUi9HOW8vam1TY1I2RXJGa0l0NlQySk9VMHE2VXVvZ1kKMFhYeHRnOHJKNCs0SjR1QUk4anpETjQyc3VCRkU1eG9BZ2tnZUVCTWJvckp6UWF5VUFOQkJ4Z1E5TVZMRmlvZ0N4SFE3SktiWFBJUQpsenprSENBN3RXUWlBVEtSQUxsSWdHeVVKUnRoeVU4c0dYb2xRNi9rSXlzWnFVcE9vbktsS1ZlYWtwZWtaQ1lwdVNrS2xQejBKRU01CnlWRk44aFNUVnkyNWxaSmZLVWx5NVRLSFRIOXhyRFRBc1JJQlI4b0V0SlJndEpRTGFDa1owRkx1aVNDN1I0THNKQVdOa3hZMFRtTFEKT0trQkI5aEpENjZUSUZ3blE3aE9qc0E0T1laeHNnempKQW5XU1RQV3lSS3NsQ2RVS1ZPb1VwNnBWcWFoVnFxaFZyS2hWcmFaYnQxTQp0MittV3ppTGJwekZWNDdpUzBmeHJhT0k3U1JpUFlrdEtmMmVTZWtwdXhJUmJ4SHgreDY2VzN4WWlROHJNU1hpbnJ1b0hDeURqekI0Cm9SaThVQXd3a1FSM1F2Q2hCeHhnSUNlUWc0QytlTWxCQmVTZ0FvUzZaQ0V1V1loTGJtN0p6UzE1YUlBOHBDVTdCY2hPQVRKUmxreVUKSlJkaHlVVllzdEdWL0x5U24xWXl0RW8rcXBLUnFEeHB5cFdrZkNuS21hSmtKaWk1Q1VwMmVnTGxKRU0xeVZKTVRuV1Y1RmhJbm9YawpXa2V1UmVRWHJDblRCUlBndVBYaVdQbkZzZklBYlNVQ1lMU1VZYktVRFdRbnhXUW5IY2hPUXBDbGxLQ1Jrb0pHU2dzYUtUSEFVbWFBCm5kVGdTc25CbGRLREt5VUlqSlFoTUZLT3dFZzVwb3lWMGt5VjBvUnE1UW5WeWhTb2xXZW8yelRVclpycGxzMTAyMmJxdWxsODN5eSsKY0JiZk9JcDRqaUttbzRnVEcwOWlTeThwL1NSaW5teEt4TXJ0SWQ0ZUlrNytpb3RqVFVNdmVLRVg0T2NGRlV3QXdRTk5vUVl1eEVBVwpDZ09rQUFJSEdPQUZxQUFDY2xDWElDNWJzdEFBVFMxNVNJQThsQ1U3czJRaUxKbW82RW8yc3BLZlZmS3pTb1pTeVVkVGppVGxTVkd1CkJPVkxVTTcwNUUxUHNwT1QvT1FrUHpXWlV2S3FKTGRDY3F3ano5b0s0RnhHdW9yY3E0aFd5N1U4YnJjNGJyOW90d1pvS3hIUVZpYWcKclZSQVd4a21TOGxBbHJLQmJLVURXVW9JR2lramFLU2NBRXRaQVpieUFpd2xCbGRLRGE2VkhGd3JQV0NzQklHeE1nVEd5aEdzbEdPcwpsR1NxbFdXcWxXYXEyeEtvMnhPbzJ4U283cG1wbTJicXFwa3V2bTRXTVJ4RkhFY1J5MUhFaVMyOUhzUXNtZmQ4RXBHeThyQzNoNzNGCjdvdWprMzA0K2J6Z2FRRTJxcUNOS2pBcStnTkREcndwSm1pQkw1Q0FBUm5vQzFBQkJBQjF5VUZjdHVTZ0FiSlFVNEFoTEhrSVMzWmUKeVVSWE1wR1ZYR1FsRjFYSlJsV2VWSTZrSENuS2s2QmM2Y21Ybkx6SnlaMmEzS2xKZm1LU29aamtxQ1ZaU3NtcGtOd3FLNEJ2R1RrWApBTzhDNEY1RndJQThoQzc5NkE3Z3VPWGl1TzNpZUlCMmk0QjJDeVpidVVDMk1reTJzb0hHU2pHTmxRODBUb0N0ckFCYmFjRzFFb05yCnBRYU1sUnN3Vm5iQXVBWEJXaG1DdFhJRWErV1k2cFpNZFV0Q2RXdUc2cHBBZFZHWXVpbE0zVFBUeFpmTjR2dEdFU2MybmNTdUkvMGQKNmZGSW53Y3g1MEhNZWhDekpHTGU4OG5EcGp4c3lzcHRZemY2dWxIOHVwVTRXdG1IbEwveTVweHZxUG16QW14VUFUYWlvQ21ZUUlJSQp4SVRKUVdEeUFWNHlseUF0T1VoTEZoSWdDMlhKelN5NWlTVVBYY2xEVjdMVFNuWmF5VVJWTWxHVlhFUWxHMUhKUmxNeVZNcWhVWkNnClBPbkpsWnljcWNtYm1OeUp5WitXSEdwSmhsS1NvNUprS2lTdk92S3JBSTVsNUZvQWZLc0lrWDhST2RpUWh3bDVtSkNMQlRuWmo1djUKZUFBVVRJRjBxMndMMEc2L2FMY0laQ3NkYUt4OEFGc1pBYlpTQW16bGxYRzdnWFhiZ1hYN2dkVU5vYm9Wb2VxT3FicGtxQzRKVkxjRQo2dlJOWWZxaVdYelRMTDVxRkRFYlJkeEdFYnRSeEhBU08wNWl5MG5zT2RLbUk3MGQ2ZThnL2c1aXhvTjQrRDJWVWRldzNhZ2JyZXhEClNpTUtzQkVGWFVSQkYwbmdnQmdHTHNSQUJsSWdIeWovRUpCL3V1U2ZueTBaYUFBdEdVaUFISlFsQjJYSlFsaHk4MHB1WHNsRFZ2S1EKbGV5c1FrU2xhRW8ya3BLZlVRNkY4aU1vUDNyaTVFdE16c1RrVFV2dXBPUlBTUTZWNUZGSnN0U1JWd1Z3S3lQSDJpTHlMaUwzR25JdwpJUThMY3JFZ1FFNzJvOGZUZU54Tm1idFRIdDBxais2VlIwZXQrMldiUUhiYnVHMmc4UUZzSlFUWXJRVFhMUVhYclFXTVd3d1l0eDVZClhSQ3FiZ2hWZHdTcU80YjZrcUdhbWI0bVROOFRGdDhVRmpHYVJVVzhSaEczU2NSdUV2dE5Zc2VSdGh6cDUwaHZCekhQWWRaem1DWDMKVEVaUEdUMWx0Q2xmdDdLamxjM0NCUlRoUlJOMDBRUjlvZ2hPQklHWW9BVWVCQ1lESlpDQkVNZ0d2RXYyNFpKL3VPU2ZMUVBrSDZBcwpHU2hMRGhKcVZzbERWZklRbGV5a2twMVRNdEdVVENRbEYwbkpSbEgraEhMb2t4ODVPWktUSnpXNUVwTXZMVG1Ua2pjcHVWT1NReUY1CkZKSkxIVGxWQUs4eThpc0FubFhrV2tUT05lUmRRdjRWNUdCQUxnYmtZejlPOXVObFBsNjI0Mm82amtRQ0x6dndrZ3B2RThpWHlxTnIKNWRIRjR1Z0s0T2dPNE9oeTBib0VhRjB2V2ZlQUxKakdiUmpzbGdIc1ZneDI2OEIxQzhIVmxlRHFVc0RvV3NEb1ltQjFOYkM2SEZqZApEcW92Q0ZYcU80YjZscG0rSkV6ZkVoYXhDWXY0aEVVMGlqaU5JbGFUaU5ja2RwdkVoaU05SGNUWFFjeDFEck9kTzRjWnoySE9veWVhCkphUGY4MG5LeXQ3aTZQWjlDSjF6aGdCUEpwS2dpU1RvQ0NBUVlnQW9nUVBsbndNeWwreXo1VWRML2hFZy8yVEpQMWt5RUpZTWhDVUgKWGNsQlY3S1FsU3hVSlRlcjVDYVZQRFFsRDAzSlRpblpLU1VUUmNsRlVHNEU1YzhuaHpyNVVaTWpOWGtTa3lzdCtaS1NNeVY1VTVJNwpJVG5Va1VjRjhDa2pwekp5S3dDT1ZlUlpRNzQxNUZ4QzdoWGtYMEFlOXVOalBXN1c0MmM4TWxCNUFCVmVKQlhlSkJWZUpwQ3ZFOGdYCkN1UXI1ZkdsOHZoZWNYU3pPTHBhdE80V3JVdEExdjNTNkI3UTZDYlF1QURXWlFEck5uQjFIYmk2RURDNkVqQzZGQT09CgldXT4KCTwhW0NEQVRBWwoJTUw0V1dOOExyQnRVM3c2bzd3ZlVOd1RxTzhMMEhUTjl5MHdYY1FxSytJd2lUcFBZYWhMYmpiVGZTQThIOFhJUVB3ZlJ6bUcrZ3lmbgppVjVQOUpKUnllOHg3RW5LU3NQZUdqWjJEVi9YZmFNdWptNXhkRXNVUVJORjBFUVEzQW5CaDVvTnZDa1VCRWFCQkJESVB3UjBHU0Q3CllNay9XUExQbFF4MEpRTlp5VUZWY2xDVkxFUWxONmZrNXBROEpDVVBTY25PS05rSkpSTTl5VVZPYnVUa3p5YUhOdmtSa3lNdGVkS1MKS3luNVVwSXpJWG5Ua1Q4ZE9WUUFsekx5S1FCZVZlUldSWTVGNUZwQ3poWGtYVUQrOWVOaFBpN200MlE5WHNialp6dU90dU5wT3I2Vwo0Mnc0L21iamNUWE93WmtMQ25pUlNHemtWUUw1TW9GOG4wQytVUjVmS282dkZjZjNpdllWUVBzT2tIMjdaQnRkQkxDdUFsZ1hETmE5Ck1yNFNNTDRUV044S3JPOEYxVGVENnNzQjlmV0Erazd4Q05NeWk1aUVSV3hHRVp1Z2lGRlFUR3cwaWExRzJtdWt6VVo2TjRoL2czZzQKaUo5em1Pa2Mzb2xtUEliSEkybjRQWk9HVGRtVmhuaHI2THJZMEwwVm5IT3VnZVpPQ05vSndac0pIUEJ6d0g5OENPaVNtVm9FeUpKOQpybVNmSy9uSFN2Nnhrb0dzWktBcU9ZaEtEcUtTaGFZMHBlUm1sRHdFSlE5QnljNG5tY2pKaTVyY2lNbWZUQTVsOHFNbFIxTHlwQ1JYClF2S2xJMmM2Y3FjQS9tVGtVUUJjcXNpcGlOeHF5SytHUEV2SXRZS2NDOGk5ZnZ6THg4TjZmSXpIeVhiY2JNZlBkRHd0eDlkdzNJM0cKNjJZOHhKUDNzSUNCV01CREluR1J5QXBZQ2VRcnhmR2Q0dmhXMGI1WXRLOEEyWGRMOXUzUytIcHBmQTNBdmdoZzN3U3dMNWpyRytiNgpOc0Q0T3NENFFtREZFbGd4QlZWc1FSVmpRTVVlVFBFSFV4ekNJaDVoRVk5WnhHUVVNUW1LYlVZUmhjUk9JYkhQU0J1TnROTkkyeUQrCnplRVBjNXpEYUxZVHpYbjBHRjV5c3JJUVV4Wml5cTM3R3JyT0IrNTg0RTRITGlaTWtBSUlIT2lBQWdqWWN1YVdMRDVXc2srVi9GTWwKLzFESlFGUXkwSlFjSkNVTFNjbENVWElUU201Q3lVTlA4cENUN0d5U2lacThpTW1ObHZ5cDVGQWxQMHB5cENSUFFuS2xJMThLNEUxRwo3bVRrVUVVZVJlUlRSRjQxNUZaQ2poWGtXVUcrQmVSY1ArN2w0MkJqTzE2bTQyWTZqcGJqYWpqZVp1TndOVDQzSTBQZzVUZ3U5STRMCjJJY0ZMQ1FTRjZtQUE2Z0FpWnM4dms4ZVh5aU9yeFR0VzBXTHNXU3hBRm04cFJGM2FjUmVzTzhYN0h2QTlVM2dpc0ZjY1JoR3pBQWoKRm1QRkQxaHhCRlU4UVJWWFFNVVhVTEVHVk16QkZIY3d4UjhzWWhBV2U0UkZ4VFloc1U5SWJPblJTSzhHOFdzUXp3YnhiZzcvNWpDLwpPY3h3RHVkRU01MW9ybU9ZNjlpNVkzZzhocEtGbDl4VGlDdTNsVzViNlJvcDVDRUhQaVRtUTJJYUVGb0F6SThCWC83akpSZEFRQmNtCmw4ekVrcG5NS3BsWnhZZkt6NVFNSkNVRFNjbEJVWElRbEN3RUpRczl5VTBudWVra0R6WEpUaVluV3ZJaUpUZFM4bWVTUTVFY2VkS1IKS3dWd0ppTnZBdUJQUlE1RjVGSkRUaVhrVlVGK0ZlUllRSzcxNDFzKzN1WGpYejBleHVOaU8wNm00Mlk1Zm9iamFqZStadU51TkQ0bgo0M1l5cmdmamZTOE8yT0pVR0hEeTR6b3M5STlJSENRU0U2bUFqVUJpSkpCWXlTTmU4Z2pGc1VvV1g4azJlc0ZlR2EzWWdTcUdvSW9sCnFHSUtxTmdDS3NaZ2lqV1lZZzZtaTRvOVJySExKRFlKaVYxQzRrMlEvZ1RwVTVEK0RPTFJJRDRONHRjY25zM2gyeHhtTjlIOEpwcmwKUkxNY3d6d24wekU4blRxR3QzTUhUNTdyS1d3OWtvV1RoWVNUVGVrYXZxN2greEJ1Snc4MUlLUUFjNHNBZVhrbE02M2taUlVxbVRrbAorMHpKUGxMeVQ1VDhFeVVEUWNsQVVITFFFeUVudWRra041dmtvU1YzS2ptUmtoY2x1UkdTUDQvODZNaVJBbmlTa1NzWitSSUFaeXB5Ckp5Si9HdklvSVo4U2Nxb2d0d0p5ckIvUDh2R3RIdWZxOFM0ZS85cnhNQjBmeTNHeUdvZWJjYm9ZejN0eFB4Y1BiSEhDRlkrbWVNN1oKQkRPNWhZYUdrYUZuWUdnYkYzcUhoZTRSMlVBcU5CRklEQUFrUHZLSWtUeGlKWTY0aVNOK29zVlN0SmhLRmw5cHhBSTA0Z0d3dUF2MgppZzlneEFrd1lqQldITWFLRzZoaUI2clVwbURLd1dKM3NOZ2ZLRFlJaWkxQ1lvOUpQSmxFS2VMWEhPWTFoNWxOTkxlSjVqZHdvamxPCmxtUDRPWVowNnRpNWd5ZFA0ZlVRZGg0OWhFMjVMWHkzN3dxYy9UaGc0QW44RUhDZkxqNERaUGtTUzVVOEpUT2xaS1lVbnlnL1QvTFAKa3d6a0pBYzV5VUZOc2xDVExNUWtONWZrSVNWM0pqa1JraGNodWRHUkFJNWs1RWtBWEtuSWw0cThpY2lkaGh4S3lLT0NmQ3JJcVlEYwo2c2V4ZkR5cng3ZDR2R3ZIdlhZY1RNZkRjbndNeDgxdUhNM0cxV3FjamNiZFpqd3V4dTFlZksvRkFWbWNVTVdqS1o1NDRsbkE1QU1PCitBZ09uVUpEdjhEUU1qRDBEUXV0dzBJSGxJU294QWhVS0VLYU1JL1NJTWN4WktCQmhvaG95Z0NUR1hBWkFBQUlHR1lzRFJRQUhaQjAKUG5KQUVBdUVKRWlCbEVISUdBTUlBQUFBQUFBQUFBQUFBT1lBeG5USE9KaHlVUk5JL2YrNVRJMExoTG5pS3V0VWR2MnB2QlFlczVmWApTdUdxZzJMMjh6R2NSS3NzVG5XaFlxbmFzQlRiWnQ5TG9mM3VsR1ZGaXU4MjA0ZmM5V2w0UmtFWWEyNzljeDZJZitrYUp3MngrNmUrCnMzWlR5a0Q4R2pNU1drb2hWV0xweVlxU1RtUnlRalBkMkEwaWF0L1Q5a09KYWFWNW51bkthNnVHQU5GQkFsUUpOa3ZqMUVzWFp4MDcKT0lWLytFbWsvVGxpQzE1N2RUaVJJSGhvNnV1TzJLVk9qMGNNWGp0cjlWcVBabmhrNXQvcnM4NGlCWEJRd2IzSjRLbjB0cWZVTEw4ZgpyWC9yNHptY0NDUTVwWE1nZy9RemRFdlRTMjA0UGVLUVJWcHdNK09PTkx2am9sQ1FtK0ZVb3BnaXNCU3BMRTJlR1lyQi9nMGRnT3ZnCkVGT2thN3VwN2phUlJoRWd3dlFEbDhMalhBMFROU3B5ckxGQWE0NmxIWW1xODFmR2tFL2ZJdWdVUklrZ0xaZE9SaTI3VWVKakRKVkoKVjJ5MG5SY3lmaWx6cDRkQUdZVjRtM3puNmJDSGZCOTJaRVpWRTRqUUwwUmwxdlU0emVGdmkrbWFyOXBNSzh5aHFkUC9XNnBHcVNOZApEczFTd0Y5Nlo2NGhaYWgzWEVqUFVFaVRRTFJvdlF0TE4xTUVwRTMrQzJ2cFpLMlJrYnFEUk5zNGJPaW9uYllmZk5pYWhCK1ppeHJiCjNsYjhmUGZjdzMrYXNlOWp0M0t0Vmh5dURsSFRZVXdjOGpKNVhLcldGVXNON1g2WFdrZ3ZxbFNuOWFLZFZPK1gxT214UGtqNW43Uk0KMjFNN0Rrd0ZTMEhOQzdEZVR4cnlwcEVybDFhZTFkZndEK1ppOCtsQmlhR2U1Yjk4TTYyclBhYUtHZ3JDMFpLWU5JblNwZjA0bklySAo3aU5MRzROVlUxa2lUUTJ0emdvNU9nMG84bFhseThTcEE1UmdMWDJxV3R3OG1pcTkraFpaQ2hTYlJXVkkwN0lIZ2tyWTdsTG93RDdICndpeXVxOWNUTWpOTTh5QzFUbGVDOUFTblBtV1NVUVczaWNTcEFLbGQvM1JWSnFSZG1nSVorWE9pT1VoWHdWSVd6STdRYUx2S0ZaTjQKQjVvVG1hU1lFWnM4d3l3ZjdlR3Jta0hIaWcxcDNuOXRuMzVwS0tRMkpZd3lYRm1hTktTcWlyV2l3K1JqMFR4dmRGZnVTMm1oSW1mUgpDUWhTdmNPbXlOSllCRzVPSlZDNEZ1MHdWNnJVWmEreTBXQ2owMDFxTXU2UlRUQXhKMjJLbFhPc083bGN6UkJWTHhFajZqTm1LVUNiCkZPYVhzbk02c0xTSXFVbUpMUGh0VkNCOEtub0lxTEcwMkc2T20wTk14VUwwaGZ0U0cybmFXSFlOM0FDSTZMZ3pSektaT0RzM3JDNG8KQnlWc2xTclRUakhUZm50dkx2a240bm5uMWhEVjA3UTBXNUtIYTZPQ1JzRFgvVk8wUFl3cU14ZjJDN0tYdGp2bGJpbk1IVWhyVnhlcwpHMWk1ZmliRTBuc0t2RDgwR0V6UHdiSFpNN0cwc0RCUmFsTkxUeTI3ZGFRSGFVald1QzA2OVNTclczcDZpMFVqVGt2NWFVdUhobC9TCmtIN3RORVdPUmN2OVloSExSTDhnRkVZb1NjbjZXdmZZVXkxbzlWS0tDVGgrcHlmM1VueTRuVktzOUZMUlBoQU8zb1g4bHhCcHJFR0sKU2NtTFpXa2tJVXVkNGlWMGpWVmlPczJmNTZTVlU1MXk4MWMxRmRONjNXZ1FlL25CZlg3QlVDZkFJQkNnVG9CWEJlNW5nWnlpYldlOQpqSWUweU9ubGRpOXFmKzNaNkJQUDVOS0VRWG8zQURTUkxzVlF1bWlTMW5QYWZmT2xFMnhTNEx3dTdpcEgyOEdhcG8zVHFGa0tIeFdCCkJ4RTlqK0pNUHA5bzdsZ2FSbXhuUWtLcWpzbDBsMG4wbGdha09nRTRmUldwTEkrZE1IWnNzclNER0RZMm5HWU13bXZwUWJOVFNlVncKY1VDcFNwcldWYktGUUZYY3VFNFpWc2cveVNlNG1ReGpLMHdxeGp2cXZXcEwxQlVWV1NTUkUwdC9LOGRwZjlwUENrMm4wWlV1L2pZbAo2aDgxT2t0QnRLNGlwYWVYK2tDbmdrMGJXVzFmcEFvcVU0YXJ0cUszVkJWMGczZ0haUTg4OWs0MnNhQVRpbmRYZmFRbHhDa3VTeGxmCmcxUyt1Q3FKcFZYUkJkWFpOSXFTeWNYN1BrRE1YUHBtYTVZR1I3TUFkamkxTHpLYXh0Sndwd3pjVVdJT1lhem5La3FKU2NtNHBtQUkKOXlMVk5QRUtSbUZrbHNwRVJXa1ZTS0lpeHJRdDFYcHBwUEJ5bWtLejZnQjJhWWhWeVZTZG1TTFJhSVV4NTUwZzdaS1JjZFNhYm5tLwpFbFVhNXAxeVpnb01yZTI2aHJ1YTlmVUdIYi8yaS9Ib2lTcEJabzkyZzZkbThlck5ZcUd0cXB4R2tOMlJrcVFOZDZrZzZkUWFTSkdvCnNaUmtwcG9abWVkcEdSdmNUTG5YVGdzMzZwWXlqTWpWV2FsNmlGVElsa2lUeXlRZjFhU1ZWN2JaT0FkVUhJcGFteWFPS3VoN2haSlgKR25FcHgxNUMranNUVmRrd2w3MldHNlR6SnI2TjlHUzlGcGNiREZzUG45TUNKM0htcVoydjVvb3h4SVFOZU41S3FvdVhEbG9GMEZBVgprTGVqYVFYcHNtUUNEcGZhcGNKT2JZRnJLWVptdzA2aWhDdlZDdWtCNW14MzJuR2NTVHBxY3ZRWVJTUTd6UkV6UzBDSXFScDh0Y2xzClhVd1BtT3JtNTFock9PeUNYUDNGckxmSDBCQTFHZFpmakdpOThLc05xUWlCN0ZsRHdxNUdVOENJWDNacEhQY1RyU1hvdEUxdEdkYkQKQWxHdTRxZ0lVNk1LS00vWTFkbzFxSzA2ZWxxVGVEL0Y5WSsweHVaVUxXWWZJbnI4NmxDUG9QbzFnTGdVdlR6bHY1ZVF1aGpuTk9oTQpxc0NSWGRpZU9tbXMrN3FJNFZxcWttckptOFFxdFdjVkZxcWpwamJ1RUt4OEtveW9vS1hHTnpLa28rMWNyaUYrQk82M1F5MmRkYVJKCmRacld1M0VCTVU3bkNWaWFqNGdwR1NLQlYzVjNFWEJSQjJobWxER0NxbnJmR3RZL1hSMHVpOVVZQlo1V05xaUtrTXUvSVVQekNTUXkKL3o5OGwvSTV5a0w2U2tnM3JuVnVxb3BMV1piWHB4cVdJdUYwZTJrUFF0cVNoTk5IU3JvcVBrQjVIVnFwd3ZGTUNYek0yTlAxV1A0OQpkN2pLUW5iTjArTjNTczlYY2N6U1ZSSTArb2VpWVNlUW9yK3EwN0tqSXNQTEFkK3RRU2ZMYVdFdDYvU2x3Yk5UenJxOXE1WU90aE9xCkMwR1A2a3R0WUxWMkNMZ3F4TkwrdWNDMm9zby9yWmxDTG8yNnN1cndJYUx3ZGRYSm0zWkErWmVDdjhvZ0JEWWpqZnNpdmVlRm5aSkQKWFJLdW9JOEpqTEE2RGJsVWJxYzNMZ0M0UGVpK21uV0YzN0RrU3RYY1pSSnNBaEhzMmN3Q2R5T3VqbjVqakF2WWpOL00ySFE3Z3hlSApwUzNKcGVKQSt0UzI2azNpbE9NVXAwT1dudGpGbXRPdjc3UUVBbzBxWHJjVXNmMWlpWU5xOEtvZWtSS3Q4VCtLMzNFL0ZtMHRvbnA3CjkxR3pSdUtBcVE2bDFnU1piSloyTFFkVG5VUXNUWWtkNTZDUWxyakdNN2FTb092d3B0UFFwWDZiS1ExZGF5Zy9DM0UxVGJFQnNya28KUXJReFZkZFZVcCtOdExoZG4yL2NVTTFVSlhTUDBOaUxKbmIxMEtNYUFwMkhILzNkVkZuNjFLVDFWakhRNzlTSTd6aVBvbHNBbjFacgpTM3UvaW5KTzFRQUcxR2FnV29lUXU1b2dIcDdxWHZSOC96SkJDdEtLV2Mxa2pURnZwVUMxd2xMWnFDWForQmZ3UGF3NkdseTZrMGkxCkVxUkhiVHZvb3pMZ1ZhcEQ1OUJneHZoMU11RFVCa1dvQTNXbTc1TnFIWEJVKzFmSkNUMFBUU1hFazlwTkYxcmY2QT09CgldXT4KCTwhW0NEQVRBWwoJMWdHOW1GSDlaS2FXNU0vU0NmYTZHRkw4V1FaTk1vbXBVemJFOGFzcmcvb1Q0WThzM2FJWklIWnozQitOY2x3S3BCcDQ1bmhWTjFYeQpKenVZQitLWURoejF6bG9yTnRXUGllb1JUUEh1dVNldDNLWFQ0V25zN1FiR2pnYXBBM0traWp3eEQ2cDNuUTYvYjBCdFMxTDlaUFlFClFuVWhyMHAxNTlVcUxQNVV4ZWpqdGhGZDAxZVo4MlRXR204ZWhJQS9DZlRuSm9VWHdPVjFsT3RZOTZWcHQ3TUNRYnF4Sm0yN2RLV2QKblg1TWI2aXNhb0Z3cEJQVnhxUEt0cThqVXoxdDRkZ3N5OVhxZjdIMkhnQ2lROVJWV0wzbmVtbUxRcnJHWlhpUGRNWVdXajdYTEUwcQpvOTZpV3NBK3RHSk9VeWZCN0w2MnozQkY4dXBMbDZySnI2Skx6UjVQWmM4NDF1dDYrK3RmR3AzWXFheWk5cStOU25xa1I4am45T1pJCllWZ3VsVFZTZjVmcHd5emNtTk83WldURUEzVEpSL1dDZVQ2L3Y5a21UYUd6QXIzZS82Q2JvbGM3NkVVMUNGcW9qanRkV3M2a3pXMW4KVHB3Um5MaEZJTlkzcER6blJ1d011aExtZ0wxUmNKcWI1cWVmK0ZQOStKSFAxZnk2d2h5dGluQTF5UVgyRU5JYVBsQUZZN0MvUy9YWApMU2tLK2dFMHpIYUdwd0ZYT3gzR3h0RlNHbFh1ZEtUWXVFU1ZXRVZoS3VsU2dncEtOZnRGbEtEYkZMdEl4c2RpYnJKY0ZXakZFZFczCm1mWTcwZ0pkeWpPV2YrcnFDR1pTUUNEUnk2QTFFbXdtdHRZZ1lXNlBrdUtUcDBvMVRzQXoxRHpRWElVSTRYS0hWOFZIVlFRMGZHdUYKZEdKSWFlNUdMY3kza21QUTZNNE5OMmFwNGtIcUVlbHhUZHFrZVU1QkNiN0gvbEZJcXNNMHJqcXVwTHZWdFJtbnJQYXFSb0xXZkJjNQppVG9HTnhGdXBUcWt4NWVPbm9Ma2tXWW81b1VQdVZzcXZTS1ZRQnF1RUFHYzZtQ2tlWVBBOU9USVdFdThHcDJjVjh5Um1QWkVjeHRWCm13UlNoNlRndlVaT3BGd2FzV2FFSkIySHExSE5MSXB4WkNzajJ0QmZvQWhkUFZLZGF5SDRIellVZUFHa0RqcGRDRkowaGFtTjQxOUoKMjZVVjBSN1ZFYTVCZkl5NnRSZW5LMHZpTW5vUWcwcm9VZjBBdldIdWI0aTNKZW91UC9kYnJnWUJvODk5Y3JwSzVLVjdwTmsvSkVncgpxSTdseFFDbGt3VnB3a2w3dDk3SFRsZHBSTjFyK0s1ZU9VaW0raitRUUhnK0tSWHdvWnZRcTNzZld2VlR0Vm5xZmVrKzZndnBxMW9kCk9ocWFMNDIyUVVnM2NnNUllODJRWWtGQjN0Z0NYbHRPQTBLam1xdndaTklxVk4yWHcxVi9uS2ppaGxWZDE1b281V29QVTgwTWNnNFYKdGk2bGttREhjRDRHNWF5eE5FS1dnZkFEN05BOWxvcmZmc0hoemMrTU5MbEp3NWFvcG5UVjNqcnRWMk9MQUtIcHE5WWJZYXhhQVkzQgpESmZXUkdidFVROS9MTVVhNmFRc1ZQQkhIdFZoTmtoT2Z5UEtBUWt2RHkxQ2xaNktVVmNUTnV0WDZTdS8xUUo2RUtCRlFZeWY4NWV5Cm5HSzRCVkkxemxLWWJNd2dkbVNRdXBrWXhOamV4SmVtRC96WmdPSU0xVkJmVUVldlJtK0hpbXVBYktqV3gxSTFXWG1vNUJ0UzlockIKVVkxMm5OaFNTS1NUbWJ6cE11eHMwS2JLb09FRHFacEVwOENDUmxpNDVwQkhBRk9WenNhMzFzaXZabEp4K1NoWklORmYvYURWa09xTgpnM0JXN1lpbHUzTWJkZ3hRWEhwRXl2NnFVUWdtVEZINGVWL0tBTklwNmJlRGYxV3FQQXBYVmNrNVIxVDNHZ3lMZ0ZmZnp3c3djSDBmCldNcXNvdHBZcWtNS0tnWjJDNCtNNlVrZDVJU29jUEJvQTFXc2F0QzNSbTlxeEljbjhxdXJLSi9rKzd3K1JHbzhja3FZYTdRcXhsUEEKUzh2cEE5TFF1NmlUVU9pTlVGV1FOQnRkUGRPV1pLNjEzbnNTQm44VnZWYzRCMHluZXVFcXVzUTlJeVFsTWFBdERXL21TVld6LytlcAo4dUREcnRZYTFZeldrRGpOcXp0WDFWZXl1dW9LaHdIUW0yS3Y1bUdjT3NvSGc2V1lTTjdTWEJweHpEd001THBnTEJ1cUpYU1ZvbnF1ClNOMm1xL0VWTUZUZDB4eStBdENGZ0tYMHI2TUZKcFNxYzBMRG15OEc4bm5GRDEycWVtSmhoNkk2ZDFmTEVGWFpxdXVxM1ZSelJHdHQKeVA4Z3I5SklkYVFzUUxWYWNaMldoN1FwU0w4ckEycDVnMG9MNm5TMEFwRmFzNUNRcXExR1hhWUIwUUNPWlRXcWJBdGxtRnpWRDExVApabGJWdm5NVmpkTW1Jb2h2dk5TRkF0amhXbVhRYTR1aWVReDVFeTFnNlVaVE9nVzM0RTVRVk0wZ0Y3eGZCV0ppSWJXU3pabFhGUkxFClJrRDFRRW1SWmd0SVNRM3N1S3pSSllGSkcwSUxlZnVyL0p0emFXNGhHN09vdmo0VHdWTy9PY0lDcWpPdXBvWDBhdzdSZ1FzZE8wczAKWGtwM24rWHRBdEJBRjYvZTVud1RsNWV1M29ZMTFTOTlIbFZsaXI0S2pTcDRyZUMrdWh4NFZkaTMybUU4d3AraWxzcWRWRVhiK1ZtRgpGTkpieDFNRmVZdnNkOU5RNFpTM1ppbXNjeW5TQVpTd1ZNbWozRkxONGJlY1NXTjQ5UmRQWENNQ0VpYmdTNlY1b3dxSW5lV3ZEcGh1CnZSRXNVMGRkQ2wxT2xERmtmc3J0bmFrR1gxVVZ5VEovMkZCYSsrYXE5RjF6RUlnT2lwZGhGVjZ3STFPKzBYa21iZTliQ2dRMGF1bFkKTkRhL1NWTE40NnVDVHpXMnE5Q3E5UzZxTk1TSy8xVktxS3p1OFFnTkJGbzZQU2xIVzlSd1NQMWhaMXVQQmlKdCtsUkg1c2RjZ3JLagptem50bHRqelhpZU5FdHVYcXAzQ1hDV0Uxc09NcTExVVoxYUh4YWxFUE5TUUFsWFRhTlpDeHM2WnBoOE1UbmU1VVYycXZURU5CWnViCis1NnFKbDYxUzcyZXFzdXM2dUtrTDNOMU8wTUdweFZMRFUvQzFWay9rTzY3cCsvUUlpS3dscW8wclZNZmFWYWI2aWYyYXAvbXZXcXcKdWFycjBGVjNtSnRxSHU3Qm8yVnBrRW5SaTVMSjRZZkxZTHZVb2VnOW9VSExDVUt6MU9SZmhTQU1YMFdTU0J1MXJsMUZKRUJPWWUrSQpacDR0SlFFcEwyUi82NkN6c3ZYWFViZEZLbnlkdWlTbjFaL0dleEJWNG95N3Y5ckd5cE5xc0tEU0hjTlZiTFJMRW5sZkdrdTZnaFFtCkFiV2pTNWg2V3pyWUdQQXZyZmRUZ21yZUg0cTJjRnRTZlRWRG1paVdsdFNrQnBHS1JjdkE5b1ZhdG1PbVVsUzJsTW9tQTI5dE9lMHQKS0g3UVBhWjYxc253OXZRNFY2L0VyNjVnbmlwSVM1TzJsMGpKVm9tOW1WeXV2aFI3N0RFdFRyVnlYR1RqNm5aa1Z2d3h1ZU91SGplSgowNkpqMlNiU2h2bU50S2JLU0E3MjJxVlhUd1dHZFczalVnMEd1ZFNxaUx6cWh1WEM2TkdxMGVXemtGcHFLQzdsci9mdUlpV1BLN3FVCjJPaU1YQnFqaHB1b2NxNXkxU01SdWk2dm1zQlU5eWdtbUZUZGtBb0pXdXpjYUdEU0RDb1ZXR3BPWlJNc2Ric0VXU3FxOTFMRFZOMVAKZERHbFd0alZxNjd5WGYyNS94TThVNGJLY1p4U3B1dlNHWDFJSVR4SUR5Z3dxcU4rS05oUnBCSHJhMk5SelUvd1MxVGxGcW50eDJ0MgpkVG55NGtFYnBXWDhhSlBxVEVaTGkwL2g0SURVU2hGcjdkSkhONm51b2xTb0VuQ1ZBRFN2Y3BYenZPY1JQbEFaT3lsWmg1U0QyOUdWCk5IcndJZ1hWd1NHV3VsOUhWS0VsNEVCaStDcFJxc0JkSy9LdXZvZ3FoQzd3WEpFd0Q1ZDJXZFI0TzZPUjJ0bEppV3VYSGx5UFViVVYKWE5XMFZVL25HWC9WZ2Zqa2FxVG9ZcjNIVFpQQVVrTENwRktPSVpHbCtiK25NbWd0NWdqNEk3bFh6V0xsWkFKa2p5ZW5IS1RPUXRxMAp6Sy9RMG1HcW8xNDFSNnI3YWxDdFVmelZQZWdnTkVJd1NFRWdjbWZLVW1QR0NsTDdYMmNpRFZwRFlJZXZ0bkNpb2k1bExrcG9aU245CnBvaEJqOU5sTURhVGp2OWR2YjZvNGxYK3E4Z0hWRU8xMHlNVUVYcnB4MkpCMm1BR1VvUTFpZ3FwUnZscVRhbExTUmNRMSt3aUhkV0oKVjFSZGxWblZaQzF5RlFpbjdxQjBvNjJsQ2FjNnJCVklFZEtvQU1lc1lLQ2xkZHhNT08ycmI5UnRzU3hRTmJ0ZFZhRHFSeXlkM0M3OQp1YWpzV0FheGczUlgyMmdBdDdEbUlMMFUzRFQ1UVJXNGVrNTFjZzlmTForcUQ4WHRoQTVDU2RoSlYvellPaUZabWlzTmtIa056ZEorCmdmRlZLMmoxYUZmbFBkWWphQ1N3VVlwZERDQ2t0clNsR0gxcWsyYWFLcUFGeUZWeHZYbzdoYjVOalphWlhiaWRKQW5BWDZwUkZDSW0KRGxZSCtpOU9QTWdkdGRaRGdqOTlwMWUvUGJkY3JybmdTd2Q4VXBoR2Q5ZDJucEx1NkVKZkxWVXZIM1Y1WUNDOG1WZXBTZFdhblhyUApxMmwwbGxhRE9nZExsM1N4bzZZcjdVbmRNRThCYVQyTmF1MnFKV21xOEc4UFg1VjBycHVsYUNkdFIwaERnRlRUd3RCUmg2dFI3bjJwCm1GVk1WRHJGR3lISTdWV3dXTDJBTzY4YWVUTlJaYlNmV3FwME83S1IzamlreTJBU2lycGQrbnBOTTlZV21BQTRMZi9PWDdWU3FyUGcKYzNGMUNXK0JSVjE2SWJRZE9OS0ZOYnJMam82M0tScStxcFltQ3dsOUt2dklyVGRWZkpqNG92VHNYVk03VitsakdzdkV3Z21wbGJMVQpOaUFGSExIMFozUTFxaEZKYUo4ZllUTG9oaW9MdFVZV3F2aHlsUTdOWWpiZHBVMWlKMzgxQ3FpOGRiVFNLTTFycHl1VGpxcFlTOHRRCjZTRHNsV1JCVjU5TjFSN2tjdERhejY5YUlkcXcrZEtTSDl6RWprNVIwVFpkTUlhV2xnNDltQXhlalRoVjhWclhFNmlyZUw3VDFRU1QKRTdWT1lVR2t6YTNPVjZDdmRTTFpMalVlcEN5VnNOelJsQjVScllwVzJlUXJsVnRWcjY0YVliYzdTd2RnVXFyVmhWazBLdWhTOFpxVQpLdlB2cTFKaWIyclRPVG5HbmtPMVN2YXFPcTg3bnl0T2VwYTJBbWwralFZRFFLRTZicGJldUdlNExaS1JWOUluc2R0S1RGVTU5VXVxCkNDaHhGY2xVWGVLcU9SdlZIV29nbDFwYTJhVEdlMzdZam5TbkNKZU8vMGtwNXN5bG1BaHpPcUxHQnNPdEdwT3RaSWhTVk1lOGg2dlQKWTYwRGgwNjFjOTFPYTR3TEtTZFVoS2ZtQ0dtcEpVdmVhYU84ekQyRUl0OVYxMmkxbkdZT0xwNWxhWE9RcGxGM2FNQzFtZTA0cVRNUgozZDYydE5GUXZueVpMTmRJTjYrZVc1bTF2S2hTYUsrdWtyYitQUUlGd2w2a1NyWURoMzdBY2tocnF1MmxhaExwQk1SQy9FSDZIak9KClFqY1RPRTFOc2s1RHFJT3JTUUJ1bjl2UzY4Q2F0UGJQSGJYTVlpQTladWxaeVNnS0haU3JuWnBoK0xGMGkrclpxYTlTb2lxR1ZlMmkKVmRhN2lvT2YvT0s2bE5LZkRyWk90SUhVR1V4czZTc25QYjViVFB5SFVwUW4rdlVBbk9rT1RKVnFGRnk5cHBXK3E0WlVRQXVzcXpZZQo0aU1FYm1LcC9VbTVDdEsvdzA3Vmpia3Z4RnM2bUtNMnhxblR3SmpiWU80d0VOVUl2YXEyYUpWWXJnN2lYZ2MzV0N0Ni90SU1CZExyCnBBeDBkazFoTEYxMUpqRklCNVEwZVNSTHFtL2NrdW13UWhYWDhzVlZqbDE1V2oxWFRjL1ZZeUpGbDJzaGVHbUxpMVRxWjBEcW1aQlkKZkN1c3UvUXQ0VkpzVWltUE0wRFJYUlNudFVFMWNzUUU3VEUybXlxZHgwcmhLdXE5eWdJSytRZ2hXdnlrQjI4SEZoWmxzN2g3bENZagpaU0V5U3k5RTZyZ1hrVzRKeDVkTzVnTFRtNUVIVk8wYzhuV1YzbGpSYkZlN2tIRXNOZU9rMGhReFVxT2xaanFORDd2ODl2Zi9sajY4CkxnMGNWWGdLWVlOVUFWS0tNS3FCWkZVbDRHb0Q1dXFsU1Y0NS9jS2tSaGttYzNsaHN5ekxZRTZWNVMvTmhXb3RTSkxMbkpVQlRSVUgKcFhjMUo5WHNxUHA5VlVzcklLcVlueXJqT0xCeERHbmxsMUxlVDBRMit0NWtwQ1hsZ2JLVW94eXBreG5BdE4xWmJRVTdRdkdsVStNMgpxYTYwTWxDQnhxT2F0NnVpVmZtNTFCN05wT3VmclFFOWJnVkwwengyMXE0SnBBM2ZXb3FZS09qUzA2a2JEMko4R1lHcVFqcWpuUFZxCnlGV1g1S3U2QU5ESytwYWliYlR0ZVllWFNSbnNQTFJ0cE9OT3U5dExKVkp6M3NNd0dUeTY5ZHNFRVQ0OHJCdUlLb242RDZxNHUycDEKaGFzWVJaeVA4Q0ZhZXVrQm9teDdvNExXUmxwTGlDSEZFRjNxWHVQVXpVczV4d2VuVTFCOGp0NWZvOUtYdDVpUkw2SktoVkpCVUtWVApyejRqMFp0cUNDMlZ3VWhMSDFLR08rb1JKdFdrdEJERXMxU0ZVR2hMdTFPZFdMdVZ2VTZ2cDNxQjNnOFI2eGZWaXFKYzQ3bXVxdEtuCnFOTjFJRjBEZHB4NnBGLzdzME5iUjVtU1NlOGlCUnhRQmh0YjZ0aWsxZUhSTGxLQkFMSTd4cGRFeWZqc24xU3JaZz09CgldXT4KCTwhW0NEQVRBWwoJeUZuQmw2czB1bUpDVlhoSkowNVJHc1YyaEE5TDRkcWx5bjBUSzhKY3BPN0VicDRVTkVsTmNVYkQ2Q21YUkUwMVNURTVYVjB5Vlh2MApnV2p4ZkpTcWlSMFRsL1pvT2VwTk55cVhhVm1hRGRJMmVuNlgxSW5KUmlXeW9KcXBVdUNZUGorZ2ZINlZGcTJLcWlaRGtrbExuSDRkCmlMYlRYeFVScEg3bnlXa0VTd0hHaWJSbWRzRGpsUGpnUGNOd2xTcjNxcG42ZDdla1VlVzRLaWRrcWw5UkpYU0tBNU1lYWxKUkNOSTQKUUFvb0MwaHJJelF2QXcxcG53TEJaR21HRXlDSHVGVnFoQUlnWXRONlZESEFQZ1lEcWtIajFVK29ldWFETTRVcmI5VXJsaWExQXN1ZQpkSWZWMUtVbVdhbUhhb2VTNUl5MXoyQ3pxRTYvbXRyOFVMMDBYVjdsRU5pb25FcUx3K2wxVGtUMktPeUVndjFna3dKMEE5SU1Bc0p4CmtxcFZmQUFBQlIxVm1rTlZVYUZmTHF1Ni9wNXdOVDYwMVRyeWtDM2ZkdVVESE1ycVV1RnhLWnBIZVpXYlY3THhZMUUyd0JPcVlGbWcKdW9lcko2K3FvRmN4elZhWmNzb1l3VUphaXJBUWZ3Q080dFZqYkxtbzJqOGwrUlI5MFd0cUE2cDVyZnBGcXZ6UzZoY1kxWEtJakxQbgpMTzNtK0FURVMxV1Rpc2pIK245dWxvSjBYK1BrT1JCbi9GUUhlWFV3UHkycWU5ZDA5V1ZjclllcW1GUzFXTzdqbE54OXBMRnhaUlluCnR2UWRPYXdzQWtBcE4xdVVqbHFIcVg3MlVhbWpLZ1pSTVI5VmRaYlVxL1VKVlpUV24xRU5UL1U4b1p1NytySWRvMXFhbmRpeE80eUMKSU9lbUF5NndUeDhFbUZyNjdSNm1xTWduNXpLd1RCVklwOWRBcUs1M1Z4MWYxUmlxenUwWDN5bkEyS1NMQkhGTHlZZkhxQ1pNT2xNYQo3NHkwQ21aVWRURkpnbEtacmd5Wm5TclRrMUlwODNHVmI5V0FYU1hOcnY0QWtINmRwWWtmS2ViSHpseXZPQjNIYk1BMDBoRjI2bzg4ClordUV6THUvTk5hb3VsT3JRVlJjQjZ4ejlqL1ZZbDhWVFhVOHFFSTVVZ0JBZGRWNUZSVGgrazI1Tk55a2psNHNhanRDT0JNYlBzUGIKb1l5MDRtSGtMUm5mY2poZE1lNEJMWG5mcU1iOFZGVE5BSEQ2ZkpVMlZPVlZ6SDNtU2hZOGw2WXhYcGowMWZOT1hRQlMzQVRTZ3NCYQpoMzRtUStZeDFXRlU1RS80YktyY3EvRjVwdm8vOHYvVHFWNVFuWXN5aW5jdTFaeDBLNnNLcHlkeHJGbnZjTEZJR1RVOHhXRkk0Ulk3ClNTZjQ1TUFyWmdoRW8vb2RHMU1pZjBCUlFhaTJYeDBzMVV6bno2THFXaW9hcVVIMUlVMEpKV2JsVHJPZjRvcnE4T0VnQzFaWnNDYXEKclcyZmoyTWdXSlR3VlVZa3lmSkNXM2dZUjB2R0FocFdHdFltUVl1dXg5S2FGYnZjSzVIYlpLVDJuWWlPQkxlNnlzbEQxUkdYRmpYMgpqTTFYRjlJTE4xclZwRENxckhDNzNrU0ZhaGY1MUF2MXVUZXBJbEgzaXFyV2w1K2xsYWxVd2VkVjV4UmIxS3oyRlpOU2svT1dqSlM3Clh3UkNieTdhY29yTFNxQ0g4U25hM3FDYUVoWHpTS2xLajJwSlZ3YTdTaTZvN29LMnFNMUF1d3h2U3hkaVZLb250VkZqcUMvS2tWQ0cKbS9zM1BkWFBQRUx6a3VyQWNSN2tLdEFYRVVmMUowUzhsdDdTblIyYlpVc3pWYUxwdHFkcVQ5cUNzSlhuSWdMVjg2Zys0YldWS2lWUgpLMW9xSFpmSDk2b2QyNmlhd2xUWnJWczlwNHVMc1lrdjY3RXZ5N09MS291VjA2VXNaSVNTUk8xcmlBbEY5WGg2dDQyb0l2QXFEUWRmCjcxUzJiMnEyWUhqYXZCRjZJVCsrRnIvYUYzVW9xNmlCSDJ4SU5UTFJLNUtLNTJ1cHFMcDZRL1BoQ3NQU0FLT3dUTXhjMWN2RFNQMU8KSGQzMmUxRXpxTVpoS2VyZlJrWFRqcTlvL0tvbXFnaXNRRFdwcWM5bkVVVkxucW1UOERxbFRvQ2Jkc28yems1b1NIY1NOWkJvS0luWQpSYnlDclFMSjRHcmRpa0oxNE5pWFBqRk9sMzRwUkJRNTNwSDJrNjdlUnF4M3JacVoydGVrM0Z2RkJxcnBvdnJUUEZGcjNaZkt0QitiCk5LTytGeFRhUGNFVUZhUDdnM1QrT0dCUjU5NHNaR0k2dmpFT1VsWDcycHRQODlVdTBLUnhiMEVOS1dud3BPU2ZtS0xTeSt6VS9XT3MKNkRKVVFtSUtiYXlKNnBPcXNMaWV3RzgrOThWdjA0TG9OWDYydEZUcloxcU5OdFpFWmNGbUZyUGpnWnJZcU9iTG54WGRkT01IclhicApFRGxheWtmN1d5K1NUamVKR3NCNzhSTkZyYTBoNitvaDFYZStDTWpuTG9YVTRzMnA4c3RHbTJ1S1hqd0g5eXlheTBYRmF4Q3VheGRRCmJYR3FPdE42TTVGUGxwQ0hBNmRnaHQvaFpGS0FPVlAzaEd4RU9NL0MwcjJqQ0ZUWG1YYmMwa1VmTUtBQ2JBRlk0MjFMdk1sVXlxaWUKcXlob1BYVEs4dTZIcUk4NkpoVVhPdWdDNGtVSkhkZHFlS05vdUJnbjloOVU0MU1Zc3Q1T3pRUnBPTjFJRDZSaEsxNEt2cGlvRHZ1aApYTk5laFdwK0VrUjNwNm96clkrR051Ung0NzAwQW42bkZla3V4RmFrYlJCY2JKSjdaaGlxVWgwVDF3ZXo5eDRCK0NjQnR2RXFWVkFNCkZkZjcvNG1hS1AvQ096ZHM4SGdGak9nQ09zTWlxa0lnaEdCdkRsTEtsR0xTb0pPNXBCVFozZDNkMXhCQkJBK2Y3bnNXa1dRSEVTNjYKcGlxZ0JGVHVhd2dyYnpMcGxLSU9sUmdLS0lBQk1OZmRkYzY1Q3dBQUFJQXpDbUlLb2dwWmlaRCtLdkpLMGxjcGZiWHl0cks4clM1dgpLOHk3Q2pQem51cjgzZTYyRTUvUzRsUGEzTVg0Q25RN1ZFOE8xWlJEUWtHY1FMUVdpTzc4OFFIUFBEUE5NOWM4czg3NFUyZjhpU1ZICm5BVkhyQVZIdk9WR0hDcDZJeDY5S2JVSm45clVoTXMxWVJvd1RqUHp6WEVaTHk3ai9USGVIOVAxTWQzdURjTzlYVGczUFFOTnorRFMKSzdqMGxMNFA4ZjdxY1lQeDhHQTZQTmdPLzhYRGYvWHdYejY4VjZIM0F2SzdESCtYa0o4bDhyTkZQdGVSejRYa2J5bjVXMHljUlBsWQpLUitydVBpdmpKS1UzZ3JUVjJsS2JibGRieWMrMWFselQ2MEkwWlZDdEtWUVVHZTRaeGJ6ekdPZThjd3pwbmZHOWM3WTFobFhzYUl6Cjlzd1pmK2FJcitTSVFYUEVXMjVNYldyQ1pCcXdwd0gvZkFhc3kzejFYTWFieDNpN2VQZkRjRDBNMTc5d1g3YmVwZk83ZFBvR1d0OUEKMjREVEw5RDhERFMvWnVZQ1RLOEEwMThxc0t5a25Qd0pKSEVZVmZLeWwySFpDOGp0OWVQK0tyeS9mSGl2SDk0TGlPOHk5RjFCZkpjUQpueDNpczBVOGw1R3RyOVhrYXgzK3JDYy9DOHJQUXZ4WmlCOEw4V01sT2w1Ri9xdEpTbCsxOUZhV2w5NEtNMVBiK2FlNHVKVDM2KzF5CmNhbXRFSDBaUkY4RzBaaTA5b2ZtZXUyZE1SV2RjUldkOFdlTytBcU9PTXVOV010TmVNdU5UWmpVSmx4YUV5NnRDWi9XaEduQVpSb3cKUGdQT1piNjZMdVBWdXpsTWw0dHovOHYydjNRMjBINEdXazRHbXovekw3Q3MvQWtvRTB3eTZaYTdpcFM3aUpTN2hwUzdoTnhlaG5lWAprTHRyeUowbDRyTkdmUFlJRXMrVnhHOHQ4VnRNRUgxV1lwU1BKZVZqU2ZuWUtSK3IyUGl2am8vZkNsbTkvRmFZdmlwVDAxZHRlaXBPCnJhZnE5Rk9kV3ovRjlWTmNGbDZ3dDR0TGNYVWlXZlo5Qnh6OURLSXpnV2hOSUhvVGlPNzhtYmRkbjdrTDVwbDU2QjByb0RqaUc1dXcKcUUxNHRDWmNBemF0QWQ4ellEOEQvak5mWE9hYnkzeDFtZThlNDlWallMbzVURGQvNGVZdlhQeGxpN3RzY1pmdGQ5bCtsODd2d29EQgpBczJ2SUJOVHdlVlBZUGtUV0ZaUzRna21jUVNUa0hnanFVN09KaWxua1pTelI4clpJdVZza1R0cjVNNGl1Ym1TM0Z4SzdxMGw5eFlUCnY5WEVhem54V29jKzY0blBRdlJZVVR6V0ZJODE1V01Wc1l2L3l2aXZqZC82ZUNWWnJmelZTOHh2aFZtbCthczJOejBWVldmWEsvWDkKM3pET0lneis0bExkVTZCNUUyam0vSm0xUDdQMng5c3pmM3ZtTDg4WXJEUE9FWHQrNG9peDNOaUVRMnZDTldEU0duQXBEUmlWQnB3NgpBeWJQZk84Wm1Uem1xOGQ0ZHhpdi9zTE5YYmFkRGJRNEF5M09nQk5mOEJWZ0tyaWNqSHpTNnZrM05IWHJTZXFXRS9KV0V6SVhFekxYCkVqS1hrakpYa2pLWGtqTFhrdklXazN2THlhMTFlR3M5dWJXZytLd29Ia3VLeDFMMDJFV1BaZlRZUnNkL2Zmelh4MitGL0ZiSmZ6WDUKcnlhdE1qYzVPVCtWZHZ1NzN1K0tzQmdIZjNFVzNwek9wdm9jLzh4YW43blQ1OXNUNWhsNzRvaXpoRTFwd0ROZnNzejNsdmw2bWUrWAorZUl4WGp5UDhlb3czUjJtdTd0czlRYWRlb1BPVFh5QlppYXVBQk5QZ0hscG1hQ1NjbElTUnhDSkk0aHNKTVc3Uk5WS1ROVkNUTldDCmtycjE1SkM4NWFTODFhUzhkVmpXZWxMV2dsTFdRcnl6RXUrc0tIZVdsQnRyeW8ybGVHTVhQYmJSWXgzOTlkRmZJZjBWTXZKYkpiOVYKc3ZKWE0vRmZ0Y241cTdTZlNrdlYrYW0yZjRvNzFSV0h2em5PNHF0dlUvZDlueVNqK3N4Ym41bkx3elByakdtZGNhMlRJN2FDSTdhQwpJNzRKWTdFSmI2bWhBYzk4VTc4K3h2dGp2RGlNRjRmeDVqQmVIYWFydjNUM0YrNyt3dDIzZWdNR1dqMW5vTlVYY0M3WXpCVnNhbUplCjRna3NjUVNXT09Xa1pJNGdNa2Z3K0ZobjQ5N1IweXpGMHl4RjFLd3BxVmxTb3FScUpaSzFFc2xhVU1oYWlPU3N4SEpXbEhMV2xES1cKWWhscnNZekZlR01iYjZ6ampYVzhyNC8zRmRKZkk3MDEwbHNsdlhYeVd5Zi9GZVcvc3Z4WGxyOXErYXVYdjNxcGlWZHgvMVIzeXZ1bAp2Tjh2QmY1UzRQQm5JZjRzeEdGd3pnS2Nzd0RyZEZWNjVtN1A3TzBaZjhVNE9HRlBuTENuVFRpTFRUaTBCa3hLQTU2UitaSmx2bVdaCjd4M2p2V084UHNiN1lid2Z4b3ZEZEhHWWJ2N1MxVis2M0wwQkE2MitnRk5mb0trZ00wK1FtZUN5a2pKSElCbjU2S2pmU1d6VDAwWlUKTE1iVXJFWEYxS3dwNUt3cFpDeEZNdFlpR1l2UnNZeDlMRjhoeTVEM05mSzJTdDdXU1N1bHY2cjBWNWErZWxuRi9GYVptM2dWVlNkTwp0Y1dwdGwwcEx6aThZdnhYaU1jcVpocFhNZE96aXJFNFh4SFdoMnpwRTlYQ013YUxkOGJqbmZGWVI1d2pyb0lqdG5JVDl2eThDVis1CkNXT3BBVytwQVllSzBvQkhhYjZrTTkvU21hL3B6UGRVNW9zcTgwMk4rWkxMTWQ0Ynh1dGh1aDdHKzJHNkgzL3A1aTljM1lXcnUzQjMKRjEzQnBwNkptU2RBVUprZm9JdzgwRmhIWXlOTHNaR21XRWpUVXl3a0t2WVJGZnZvbUlyVm1JcDFKR01meVZoSThqV1NmSTBzWHlWdgo2K1J0cGJ5dGxmZFY1WDFsNmE4dS9kV2xyMmI2YXVhdmFtcCtxODF2eFRuVnhhZTZVbDljNmhzVzB6VmR6L2tLTWM4NHZETWU2NHhuCkhURnRpNm5naUt2Z2hLM2NoRDJ2MklCQmJjQ2tNOTlUbVJodkdjWjd3M1J2R1AvUy9TOTQ3c0xWdDNzREJadTZBazA5Z2FhT21TZkEKcktTY2pJUjhQT0NvTnpJdUlyRkNXbnFsbkRROXhVcWlZaU5UcjVHcFY4blVxK1Ixa215ZHBDeGJLOHRYbHBmM0ZlWmR6YnlybXI2Ngo2YTAydlJYbnQrTDhWdHBmcGYxVldyeXFFNi9xN0hxbnZ1THhDcHJHNTNHK1lweXZHT3REUXZsRVJYWEdzNDZWVDV2d0Zac3dxRTJXCkdyQVdHdkFXR25Bb3pjeVhWT1pMS3ZNdGxmbWF5bmhQWTd5cE1WNHlUTGNNMDcyNy9vWHJYN2dmZCtIaURiYTUzbURMSUVHbWZwa2oKc013UjVBY3E5UU9Va3dja2N3T1JCaUFmOHdPT2k0cU5vbmJnMFNzbTZmV1M5SHBaZXJVc3Badzh2VktpWGl1dmxLbVZaS3NsMldwWgp2cklzWDEyV3J6TEwxY3h5VmZPdWF0NVduTGNWcDVYV2QvNnE3YS9hNGxSYkxrN1ZCZU5TWVJiaWVRV05xNmp0R2s5aDJ6V2RxNWdsCnllUWNNWjBqcm5QRWRvNllDczVOMkpOVXhsdHFHdU05amZHaXBzSjB5VERkOGt2M2Z2a3UzTyt5eGJkNWd5MkRUZ1diQ1RKMUJKZzYKZ2tzZGdXVis0TUNrWkdSdUFOSng4ZWxTLzkxVDBWRnJKcWsxazlTS1NYcHBlclUwdlZhYVhpdFByWmVuMWt0VTYyWHExU1VtK1NxVApYTTNjTEZjNXkxWmFxODU3NjZ1NHZvcmIvVlJlZk9xTFQ0SERZaFUycm9KS3JvSktGU3BWN0Z3Rm5hdWdkYm5QZmQ5WGVJTGlpRzBjCmNmZ1RyR1dMNk14MzFGc2EweldONlpyR3BMNTB5Uy9jOGd2M2R1RjZGNjUzK1EyMmVJUE9YR2ZRcWU4THRQc0N6Zz09CgldXT4KCTwhW0NEQVRBWwoJZllHQ3pUMEJBdjNBcFg3QVVqOVFPU2xwQUZJM0FKa1hlSFRNRFRUcUJob1hFL1VEaUhwamFHbU1PVlIwYzFTVE5MUFVpbGxxdlN5MQpacHBhTTArdk1rK3ZORkZUcnpRM3lWVk9jbFZidHVxMDJwYTVkMVhYVjNVOWxkZFRlYW0rZndxTVM0VlpqSEVXTkoydnFGZllWcXBZCnlYVXFkb282VjFIdlcvSmVLQ2xPbUFwTytOTUdmS1VHaklVR25JWG1xMlZMNk14WFZNWTdLa01hNHpVOWhlbWl3blJSWDdpcFpCZHUKMllWNy93YWRIMmZRbVRQbzFPb0tPUGNFbTd1Q0JKcDdnc3Y5Z0dXbEFVb0RrWkFGR2hsMUExT2tISUNpd3hCZmJiVmNiYmRjYlVORgpyemczUjYyYnBGWk5VcXRtNmRWbTZSV242UlduYVpYekZEVzFxaVZYdFdTckxUbGxQcDRmM2NJSks2eU9scStwdFozVnhjREx5UFRBClp1QmdOVDZZamEvamUvSDRoVDRMeEdjTmZUYUk1eExpdVlqNGU4dklqU1FMNjhtTmhYSmpFNk13ZWl0akkyU2t0NUtNL0ZYSS9BaVYKTENpaWtsMm9aQU5Kc2cyVDdDQkRraHdaSWRwU2ltekZJbnNSZ3MwSVNXU1o2V0RJQ3dhaTV4OGZ6OCtkOFpVck9tSlFIVEVvbGl3Mwo0Q3czWUMwMlh5MDJYeTAxWHkwMTNpMDFXMlM0b2pMY0xlbSs3MVVrOTcyZWZjOUh0N3Z3UVlSY05YZmpJbXNSNXlJM3E4dk43SEk4Cm5Fd1BIK1BEeC94d3NiL0I3NVBjV2tydUoxS3NpcmQxa2ZFSzBsdEpUa3IrYXFUZUpkMzMvYklNbW1RRFNiS0RKTmxDa093aFJKSXcKU1N5cWkrb29SZlVVeGtmS0IzV2xBKzFRM2RrTnFtY2d6NTN4bFoweHFNNFlWSXhGQzA0NEMwNDR5MDFZeXcxWXl3MVlpODJXbXU4VwpHdThXR205b041U21HenJURFkzcExMM0RjdS83WG1WeUgwSzE3d0h0ZWtGSWRoZzZmS2k2Nm05Wk9odFlXNTcybHFQSjVXVjRNMmpnCllEVzhkdndnbmtpU1cydkp2ZVRPWXJKNDllaXJrSkdVazVTVFZwSy9Ldm1ya2ppTWJaSWRCTWtXZ21RVFFiS0xTTENMS0RtS1VrUlUKUno0WTJnclZYS0dhRzFSN2crcHZVUDFEejNXVkh2cHpad3k2TTlZWlk4bVNJOWFDSTlZU3Z0a1NXdk1WOVliU2RFVm45bDFQYU5jYgoydlVjN0hrUDhDak1vV0FCcDc5aDZXNWJ1VnVXTEY4N3k5ZlVjalcyTkxnY2JTNG40d3UwZ1dQSDkrb3EvRmtnUDJ2NHVZUjRyaUZlCkM4bWR4ZVRPYW5KUFVXUjBmUFNUbnJLcWtuTHlXMG5tUnFycyswNkRkSXRrRTVGZ0YwRnlaQ2VCVUROR1ZsNDZxREdIT29YcWJSRGQKRGFLOVFlSHhEMDMvMERZVkg3cUtEMDE3Z3U3TVdIYkdXSGJFV25MRVc3YmNoRU52UkczQW9UYmcwQnJ3S0kxWGxNWXJPak1xd3lXTgoyWkpxVDErMHFJK25PUlhLWFc5b3ozT3c1ejNZOHlCRW9MdlN1ZHh5TkxnY1RTNC9veHZydzhmK2NMRkJQR3pHRHR5cngrL3k4WVg0CkxTTyt5WjNsNVBER2VyTFllRjg1K2lwa1pMV3Ewckp5VW9KdFJJSjk1TWhHd3NSSThrRTltVGtrVkhkNndVQzBHTWltcmZUTW5qMVoKc21qWkVvb2pGaFdING9qZWhFZHR3amJnMFJyd2FNMVh0T1k3V3ZNZHBmbU9la2xudXFNejNWRVpMaW5NMWhTMXhMaTg3M3NRNjU1SApwT2RCaUtEZlNhaUE0UVRjVnQ2V1JjdlYxSEkxdGp3L2M1R2Z2ZEREeWZobzRHQTFjREFjK0plT3d0LzE0MmNOZjFiSTV4ckM1YmVRCmVLMGtYa3RKMW8xNFl4T3hrVlZKYnpWSjZTMHJ2eFhsdDZMTWpWalo5ejBMOVBISVRuSmtLMmtTd1U0c3Noa2ZVRHFvS3pPSGFzMTYKVTZqbUZLcTFRWFJuMEJlSUR2L1E0aDk2L0VQUFAxUjY2Q285czVXZW5wMVp5ODU0eTVhYzBCeHhhSTVZRkVjc2FnT3UrWmFTMG55OQpNOTFTbVM2cERKZFVobHNhd3kyTjJackNkSjQ2bnViN3ZsT3AxUEdLZER3akhlOUl2NU9nM3lYWnZRQ2h2d2lCUWl0M3k0Nmw1V290CmNoaTRtZDBkVHBhSGsvSE4rTUtCZiszQXZYZ2crVnRJdmxZU3I3WEVhekh4V1UxOGxoT1BkZWl4bnR4WVVLUllIUi92SzBoZm5iU3MKdXNTOHRQeFZsZCtxMHJLc0pZSzlKSUxOSklMZHhNaUdVbVFqS2tLb0Z4dUpIa3c2eU96Y0JvVi82TEVQUGRPMUQyMzcwRlI2WmlzOQpQRE1XbmkwNll0SFJtekRwVGJqVUpseHE4eldsOFpaNlRXZTZwakxjVWhsdWFjeldOR1pyK3RKNXVrbHV3RW1XY2VWREV1cDNSL29kCmtuNlhwTXRRb3FEYldYQlJRcWN6b2M4ZEVGZlY0YTc1VzFaWnZtWjJwNGVUOGVGa2ZQaFludzJ2SHRrZ1cxcEtsdmdzSnY3R0p0N1kKS0ZPdUhpUHZxaVNsdDZxMHNyVEU2NzVZb0pKR3RoTWorOURJZmxMVTZNREJVSTBwVkdzSzBadEJRSFFYaVBZQ2lYM29zUTlOKzNoZQo0Wm0xN015ak9HTFNHM0hwVGJqMEpteDZFemExK1o3T2ZHZTgzVk1aN3FscHpOWVU1aFNtOC9SRmk3cEpRNzlUbXFETHFLRGJXZER0Ck1PZ3hNdWd4bUhRWUhIUVlIVnpFVWVsd1ZSME9tNzlwaGVWc1pDM3d0RGNjYlE0L3E4UE5aT0JsZUlSNFdJMnZIUGlYRHZ4clJ5SGUKQlFUdk1zU3pRWDVXeU5hUnJDWS95NG5QT3ZUM2RjcDlWYnl2aS9lVjhiWktXbEZhVmZvcXk4dGZsWW41cXk1MXJtbllxSVpTVkNNNgpQcWdkSDB3TzFabEM5R1lRa05obm5uMm85RmpobVQ5NTVzK2RHWFFubExUMEpteGFBMGFsQWROOFo3eW9NbDZaTG1vTUY1VjdHck05CmhkbWV3blNpd25TaXZtaFRYMUxKbTNaWDhNY2FPcEF1M2E2Q2JuZEJqNUVoQm95dXZBMHNaeHZMVzV6bGFtdDRtaHVPSm9lWDVlRmsKZXpoWkh6N21oNDhCNG1LQ3VOZ2dIallERDZPQmg5bkFmZUJkUDNBamYrdUkxcEt2eGVTSng0TGlzUkE5OXJZeTN0YkcyOW9vZVZjbgpLYjJWSldabXB1WW01eWJtcjhMRTY4QkZkV0pSSFFWQ0xlVkI3VmhiQ3RWQzJoOGEvRU9EZmVpd3p5eXVlMmE3aDJmMjVKay9yK3pNCldIWm1uYkZvem5nMFoweWFNeTdGRVpmaWlFMXhUTVduTitIVG1uQnFEUmxNODAyZCtjNTRaYm94M0ZTWWJTck1GaFZtaXdyVGlacnEKb2sxMTRTUTM0Q1NYOTMxM3ZLRVhodWt4Tk9nd051Z3dtdlE2RDNyZEJ4RzZDeEk2M1FsOTdnQjlUb1V1SjZYSFZlbHdWL2tiTm5mYgp5dHU4Y3Jhd3ZJVlp2cmFHcTdtNXdNMWlrUG45TVVBYU4zQ3dIUGpYRHZ5TEIrN1ZBL2NxeEx0Ky9LNGdRejRYa2M5VlpJa1RyRVNQCmplS3hVdnlWMGVwNFh6MUNYa1ZlWWxKUmNlS2FueW96TC9LNTcvdmc2QXlobmdLaFZxd3BoK3JLSVNIT0lKcHpDMFJ6eFQ3ejJHY2UKMTFaMlpzK2QrWE5uUnlkblRJb3pMc1VabStLZzNvUlJiY0tvcVdGeURaZ01MdE44WjJLNnFUQmttRzFuNm91V2s5eGdzOHpnZGpUVgpHM1hvUHNyME9pZTlEb1QrNGtsL0FhVzdHS0hUbGREcFRxeW93c3JkdVBJMnJ6TmNyUVdlRm9lZnZjRE43UDcrV09BWEcrd1JoS3VJCkV5eXN4MDd4VjBWL1hmVFhSVys5Z3J5dklPK3J5THQ2cVVtMSthYzR0ZHBObkVxVHFGNGtxaG1KNnNZSDllT0RHdEpCSnhDOS9hRzcKUDdUM2gvNzZ6T0M1WjZaN2JKNlpDczljWldmZTBSbG4wUmxyeVJsdnlSbUg1b3h2eEtnMzR0Unl6VjJlK1pabnZPVVpMMW5HV3liTApkR080WkJndUdhYVQvTkpKZHRHU3RXV1hjdWJOSVBPMjlDSyt2K2JjR1F0M3hoODZYWlJPaDBLZlM2SExzZERscHZRNEt4M09tcjlsCjVXN1p2TzByWnhQTFc2RGhhbXg0bWh4K0J1T1g1WDJ5dmo4RytNVUV2eGpoRjV2eHcycjhNQnVGaGt1eURxK0svOHJvclkzZTZuaFgKSlNzdHF6NFY1NS9pMUc1eHFrMjl5QlVyS09lRDJ0RkJEU20wU1c5L2FPNFB6ZjJadXpzNlkxQ2RNWmFjTVphY2NaWWNzWlljSFBFbwpqcmhVbkVxMnVXdkF0NThCKzVtdm4vbmVNdDlieG50N3l6TGRjZ3dNZDF0KzZTeS8zQzdhTXVmZFlQTm1vSGt6MEx6dkJaamVzVlQvCmYwcThHT0VYSS94aE5INVlqUS8ycGVOLzhmaGZQYjVYb2VHUUpIOUx5ZGRpOHJXYUlGb2J2OVhSV3grOTlkRlArdW9rNVgxNWlVbWwKeWNucHFUaTFuVk5mYXR1cHhhYzRkZTRwWlpuVVFSM3BvSlljcWlXSDZza2htbEl6U1B0RGIzOW1ydGVuWng3M1VObVpxZXlNcSt4Ywp5Um5qaUVOeHhLUTNZdE1iOGFsTk9OV21KdXhwd1AvN1o3NWY1dnRsdkY3RzYyTzhNVjBZN3N1MjgzYlIzZzIwTjJjRFRzOWdVNU5CCjVyMGc4MTZBdWVEU0s3aTA5SlZmQWVXUFlTWFh3VmQ4R0E0ZmRzT0gyZmhoTno0WWpnK1c0My90K0Y4OHZwZVA3L1hqZHdINVhVRisKbHN2STV6cnl0NUpzTGZsYVRBSW9wckk0VzRzMXRvL1c5dEhlL3BuWjNEZHpBU05QakkvdzYwY1FJMGlTWkdseE9kVmMyYkNtMmkyTwpxWlpqc3VjQ2x5UkVxSnRFcUowWTFWQVFpK3JFd1ZHNmdMNzNveGRCNVhJcGNqazRyTHhOQzJmek9rdWJlMUVXbzBhUHdpQkNpbmd0CkkwZVFKRkdDQnByM29kNzZVRzg1MVZ4WnNMUVdHK3EyRGZYYmhocHVRdzJuWVk4SEVRbEg5aEtqK2pCQy9jU29obEpaZHdCQmdnVjgKT0QweWttQm9vRXVSWjIzbGJWMDQyeGZPQmpiR0Z1T1Q0ZTJGQ1g3aDhPckJWZVJJRWlVOVJwYzQxVnhPZGJiTHkrbXJRMU90dHFGMgoyMkREYmNEekVVVENFNk1hQ3FKUm5maElXU1lWTkhCQUowclM0Q0tLUlI1SGhjWGIvcHNkM2lDWWtDTllTemJMM3k2bjJzdXA5dkl3CmxsYXpjYWpiT05SdWNIWjdQcGFVam1yRW9xc3IyMzNmQlEwb1dPREhvK05ONE9DVXgwbmxjVlA1Rjk0aWJNMXQ3KzlyaDVFalNaUXMKeWRxZHZzREtPcHlwMVMwNDBHSHd1NkNFRkFFS0JFcEtjdW1CUGZBQWdnVkVkeEUyNkhWTlR5Tk15TVd0eUsyMnVuSzJMeko4elN4dApEYTBOUjN1VEt4dkw4MTAvdG9wb0lVbWloQW1UTTFBL0QzV1loenBNckVNOTFxRW1RMHVyNlRSa3NQRXdYQ0NrMEdNSkNkR29YblIwCmZCQTVSRk1PMFpXQW81Nzd2bFBDMkFNUkpHQUFvK0x0U2l0dncxdUk0UzNHOExXeUgrZFhvMHZIRWlhalRqelVZaDdxc1RRMUR2VWEKaDNyTmJZTXRWN2VId2VZRHRIQmp5VkdFQ0hVVVJTTEllbWpmZHdSN1lJSUdmeTQwRC9KZTBLWEk0Nmh5dUtvY3JwcS9YWE0zclRKYwo3UXhYUzJPRCsyZHlMdjVvN0NDaWhXUUpscE4vSnhudVVKTjFxTXM2MUdZZGFyT20rcXlwUm11cTBkYmFObXhnTWl4U1ZFdUJVQzlLClRqcWdLWWRvU2tEUksvdStINEhhQXhNRXV2RG9PYkNEeXQyd2JQZ2EyUm11aHRiMjltSEkwUE4rWUQrMmpCeFo0dVF3VHhJMkF4MXMKcXMrYWJMUW1HNjNKVm50anVzdGc0d0ZlSUxUeHd4Q3B5WlNpbW5MV0RKbzNneHIzd0FSN29JSVhQeGtJU2s5eko2YXk4alo4elF4ZgpVMlA3Wm5WM2UyRmZXUzVETFNaT0RwOWdIV3FXeFUxMldwT3R4c0ZXMjhCa3h6SFY1ZlU0Ukl4UUx4YlJsRUNUWk5SOTN3TVY3SUFLClptd2NGQjAxZ1ppcXlxOWJaV200MnBlaFIraDFZd2VYb1pQRFF5aFB2Z3hLZTQyRDNZS05nOTBXeDJUTHVjQUFPS01DamgwL2xtd2cKUnBKc0k0bFRpbXJGb2xvUkFsMDVSRjhPYWY2TXVWU2V0ZDBPdUdBSFhDREJnd3M2RWpwZGlTK3lmTTBNWDhQVFdyakYwWlhKOEdKOQpYdXpQMnlqMFEvd1dFYjlGQkltU0pVMmVQSG1pZTBOMWtFYmhZTGU1YmJEZk50aHhjeHBzT3J2QkNqWjRMQ25aUTVKc0kwbEdSZlZpClVlMkF0aHlpTDRYb1RLR2dtUk5vNWdTYWY3bytZNjhrT1hYZmQwQUdPeUFEbHlNWk1XRFV2UWd4SW4rejVtL1l2TVZhR2E2bWhxZTEKd0QrTVBDLzJsL1hodDRwNExTTmVpMGtUSjA4UU45aHZjQnZzdUJjeU1samdNYUhTUVcwNWRJbXA3ZndaZTMzR2ZhSmI5bjAzTW1JSApiUEFDTXhOMGhBRnE3Z0NybkN0dnkrWnNYMnBvdVZvYW5nWTM5K0tUNmYweFBURkJEemFZbGNSbktWbVN4YVRKSVNKaW5rUzg3L3NZCmFBNG1XNDdKbm1PeTZUVEF5TnY3cTBGaHdwQWloNDZQRUdySVM4d2hPbE9JN2dTYXVUOXoxMGNzdHVLNEF6YllBUT09CgldXT4KCTwhW0NEQVRBWwoJWFdEc1ltQW9jU0pPQ2c2YnUyWGxYbU5xT0pxYzNTZTcrMlI0ZjB6UGh3SDZNRUUvdzM5MWNRSHhXVXY4RXlpSUhvdVlXYWFaYkRvbQoyNFVHKzRVZElHSGgwaEFrVDQ0Z0lkU1FSSklPaGpLSGFFMmhyZGRuL08wWmczdkVmYUdpKzc1UHl0ai9YR0oraFBTak82ditkczNGCjJPQndORG44bDhuNFpIZDZmNHp2ai9XRkFmcXdRSThEeU5hUWU4czNjWUk5Ukl3aUJ0cERnMTJud1laaGQ0ZUh3YzY3SUVpQkJ4QWwKRzRpUUlrbU9wakJLUHFqRXBEV0ZhRTV0MFB6ejlSbVBkM1RFOWQvTC92ZnlKMk9qNnducGVYUldhVzB5ZkkwN3E4WEVZelh4VDZBZwo2bDdSSEtTTkdld1lHV3daR2V3N0REWWVqOElsUXlVN2lKSWRoRWlTYlFSSndtRXRXV21wN1F6aUFzMWNvTG43TTN2QllaNHdsY2pVCjhoL00vZ2V6NStEdWFDbEYxUTByZDlQSzI3N1E4QjlJbU1ONzZiaTdmTnpaSHplWDRjMFY1TWdSaitYRVEwRzhUbEdVOG1WYzd2dWUKd1phQndjYWpNTUhlRWFUSUVTUWJpWlBES0VaRXRTUlJUWG1wdVNsRWMyNjdQN1AzQnl5ZWQ4UXFyR2d4RXJYL3hmVHBla05KTHRadwp0RGNjTFE1L2dYK3l2Ty9CWnZnYVhqaThsNDQ3eStXeERuMk9aTjczSFFjcEpBWTdENE90NTJkQmtFZVBKZHZIa2wwb0pNa2VrcFJFCmdzM2s4TWgrY21UMFdGTVMxWmFaRG1pdEVOMFpCRFIvZjJad3oxamNNeGFIY1NKVDczM2ZyVHp1ZmpLN253ek5ub004cGhCWHJieU4KQzBlTHc4bnlQbGdOLzJYanp2NjRsWGpzRTc5NHdkNjdZUE5kc1BzdTJIOFc3TDhLRk93YkZPd2JPaWJZTzNyOFVFSkNzcEU0T1VwVQpOTElYaSt4SENQWWpKZWFtVm9qdUZKckJQMkdmZWR3ekh2ZU14enpqV1V4VHlRbmozSUEvOTdhWTRzM3NmalExZTUvTmtJNFVBMFlVCjFwa2NiZ1pqNzQveGZURy9ML2IzdzhCbWZEQWFIb3lHLzdLQnczdmx1TE5BYnE0Z1JKQTQ4VmdvSG92b3NZaittdWl2aVZNV2N5UTAKR0NnUkM3YWZCZnZQZ2gxb3dSYXNZQTlXS0hJWXdYNFN3WTVpSkFuQm5yUVVvcmx6K0djV2ozdkdjOCtZNWhuVDlZN1kxaEhiT2VFcQpPV0VyT1dFcm56WmYwQ0lvZGorYTNhOW05NnZaKzJ6NGVINGtRTW1sa0hyRGF1bHVYQzNpOHJNNS9Jd09OM09CbTlYaFpUSHdNcnV4CnZiNFArTU1DdzI3NHJ4eStpNGZ2OHVHemhVRHVyT0h0c1luK21taFZWTlM3bzVobEt4WnNRQXQyWUFWYmNJWU9Ia3RFbURRNWdoSWgKeWhUR0lydXh5SGFNaEdCTFdqcm8vQUtKZitieFBMWjN4RlIycU9pSXEraGNBZXRwUWQzM3ZjZ0JlMS9OWGd3TVRuUmVhM04vWHl4dwowTWIvd3VHL2NuZ2RQZ3p2YkpBYnE4bU5CU1dLb25YeDIybFdzQWNKSzlnektOZzBkUGhRc244Z0haRWd4Y2lld2dqQmRveDhZRnMrCnFDOGYxSm5ndWU0WjF6emptc3FPdU1xT3VJcU9adzdvRjdUbW02WEdtNlhHbTZYUFp1KzcyZnR1K0l3c01JMUFJV1dWL2NyWndzeHcKd1QvajY0YVhEdSsxdzN2eDhEMkUzRkFRL1hXS3YwN3gxaWxYakkrTS80cFI3NDVhVXJCcDFLQmcyOWhoQk9sSXltS1IzUWpCZG9SZwpQMEt3SVNIWWtFUzJKSkU5U1dSWFBxZ3ZIOVNZbWc3cVRRZEI5RGVJQnZ2TXRNOWMyend6anhVZHNXZE8rRE1uL0lrVC9yd0NhZ01HCnRmbDJ0VUNpZnB5OUwyZm4wL25SOHg3b2VVUTZIZ1FkejBpQ0RDVXZzenFjNzRjUi9odzd2QmRYRU04bDVPWWFjbTlwSGNseWNrMk0Kb3VnWkdSc2RxNCtRajVEVlI4ZC8xVWpCdGpIQnZqSEJ4akhCenJGazcxaXlleGhoY2hURmFFcmtKTkdER2xNclZIZUZ2a0h6WFB2TQpQT01xbmpyaXo1elBLMWhzdmxtMDBIUzNuTEJMKzNKMjlEd2lJd2xLRk9wR2pKM2xhbW01MmxxZXhsWm1oNWZKd01udzlQd0NQeGlOCkQxYWpxNGZQL3ZCWnd4c0w4ZW9oSC8rVlkzN0UzdmZkQm1ubUJEdkhCRnRIRHlVaEVwcEVTSnlpMkFoaHNuT28zZzV0d1VFMDJHZTIKZTJZcVBWVjRyT2lJUDNQRTRTczNZQ3czWUN3MllDdzJXMmE0b1ROY1VValV2Kzk3bGNpZFQyZm4yOW41ZUg2S0RwalM0NnFzYUdoeQpaaTl5TXhpNEdJMGIvd3VIN3lyMFhUOThGc2dRSXZkV0VTUlliMTMwVmtaLzFmam9xNUNRajcvNitLOGUvOVhqbFNWN3g1TE5ROG4yCjhTTnBpQVFiaVlURENJbEdqQkJxUndnUGFrdE1CMEsxVjJpbTBqTmI0Wms5cmZDTVBYZkdubUZRbkRBb1RoZ0xEampMRFRpTHpUZEwKelZkTGpSWXVYcFl6YUFReEZLMWhKMk9mdkp2RXk5c2w5ZloyU2I0OWttK1A3UE9ML05zaEFRTWhCZmZIUWNMOWNjYitTS1BHN21oRApkN3loTytMSW9UZnEwQnQzOE5BWmUraU1QblRHUW4yeFVGLzhvUzhDMFJjTmRVVkRYVEdJcmloRWNZZytoVWdSZllvUmZjb1JKTHFVCkpGS1U2RkdXTU5Hak5OR2pPTkVUblJ6cWlVOFNvU0RxaUlrNlltS09HQ1ZIbEpKRGtUSkZNWWV5eU5pWVAzSFV3M1lRVWNJZ29vUkgKU0VrbUp0d3dGTVZCQ2VQUEF3aTV1QzIxL1BBeFA0UU1Fam9JNTRrMU9rcWk0UFlaWmlpYVEwdk9wS3hqc0RkRUI0ZTFWWllmUnVhSAprWU5GRkdZZ29qdXNNTzZWTHdKdGVQUWVSRUJhdXBBL2laaXJ1bXJqbXJ2RC80am80U29Ta0U3TWJaOW1XdkttSUFFRERnQXVJTEp6CnNuSjVpYW50NVU0bWl5SkVzWDJlYWNtYkxqTFFzYUR5RWt1VG9jZVhPNkdFODhRV0dVMkl5Z0NDN1ROTlMrWWtZQURnZ3FJWUdsSmsKZVluSkdPUHJ5NTFRaGhJV29SQVhrZmd4V3FnbjZhQVBCb0NBQVFVVTdDbHg4QUFpNmtTS1BHNUZOU3VyNWdlSSt5SFJ3WjZWUmtkegppUkdjWkMyZFlBRWdDQkV5NUJ4d042NnhNN0xjU1NXY0p4YUtzUkdLTVlva3BhVUtJbjZNQXRuM1BVbVRvSTNPejRPN0NoanlFVkpXCkxLKzdQajlBTU53dmlRNzJoUFBNTWtJaFhydnlWc0RlRDlGZERLYW1LRGl4R0hoOGZYOWhnVHJZazBMVUhNVko3aHdrQU1FZmpSNmUKQkYxR1VnNGp3NGVxTkRROFRlMnNqNUJHM3VReWdnU2xwWGtFYlVMRUFBR0k2Y3VmNWc1WWdRMHJROXY3ZlV5T1RoeE5NREZ6a3JlQwpnWUE1UkVaTEZYSW5FbkpTWlRIdUFBVUhmeDhUQ1NlT1VJd2pvRWhhbWpWOE9DRVlPRVJrbE5lQllISEY1VVVtdzQvdzh6R3hSRktpCkVOVlVJZ1FubWJ2dnV4NEFIZ29YUHB6UXlzcndHeVQ4b29FazRTaEppY0pNUWcwVXhyN3ZEaXB3b0N0eEF1N042dlpsZGplbUZ5aEkKK1BtYVhDWWhTVEF4VnBxZlJxU0J4dGozUFlBRmZueDdlU0ZPcEdCaGhTZVlOOGxVU2tJNk1VNVNPckUwWWFaSHFKaXEwMEJsQ0dCQQpDR21wd29zNHZJb20xeGNHU0tPR2pSczRkUENWckFrS1VsYWJaVzhBQStnRzlvd2s1REEwNUUxT0p1Q3M4TGRxQ3krOEJWaVpISjlZCkRodExTa2tubENpUWVDS0JvcTQrWFd0NGdDSWdjZkFBZ2lvdHpjVXZFL3g4aDUxa1RBb1RUQ3lkR0N0ZG1FZlFKZXJxR2FpZW5BQkoKT1F3TmVaT1RDaW1zbHRoYTJpQ05HamwwNUV3MFBiMU1qQ3RRbUxCVVllWkFZbTRDVVZjM3kyQjlrQURkVCs5QmtZUU1VMjFmWTJweQozMnpPMDdDQm8rdEdCUW9UTEZ6NElJS09FaEdDS2dzQUhUQkJYcENSaGh3R1UxN0g0VVFLbkMxTWNBYU96d2ZGeFBpQ2hRb1VLRlM0CjBFUmlIa0ZIUWRFbXBxcGJZVHhHblFCZ0p3U0FIb0FDQ0JnUU5FUjBkS0hKYWU1c2pBOFFiQWNQSFF5S3cwS0ZxTEdGcUF0TUorcXIKRFlNRDZINDFTN2xYV0puWm9LZEJ3OFlOSERuK0htTFVqTUdDaVhFRkV4YVlPSFJ3b2szVVZoNmpUd0lRWUFBQ0FsQUFnUUorZkhkTQpJRTdnYjFac1hEaGJkb3dOcms5d3h3NGUraGZVVURUSGpDRnFqTUZDMU5qQ0JRenpBU282S1BnamlnQVZoVUtGVkxYRldnc3hQMEljCk8zajArSHVJR0M1ZzJFQmlwcVdlUHFUdElFVzB5VXZDQUhYQU5hc05sMEY0UXdlUEh2b1hWQWVUaGpsRDFGaERsSVlOSktEcTY0Y2EKTFMyQUFPZ0ZmSVRtckxCYmJHaDFkbU45WVlBNXVuYjBLUHg3aVcyZlpDVm1Ea3hNYzlSWUExUFQ3RFFDeFZTMXhxNXBsdWQ5M3drRAowQWNMMEFlSjhQSTZEbmxkaHhkUmNsVnRaaTNFdm5UNEtHemlzSUZwQTRjU1RSMDhrQmc3a1JnN2xZQ2FvN0RHUUhNRUlNQUF1bUFCCk9nRWRud2RLRkM3a2RVMzVDdy81QzZmY3hRaThTeXdORHNiWURCM1p3bnlKZHQ5M0hodzJjQ2d4TjNud1FPTHBnS2NQYVcrWlpacEQKQUFNWW9Bc1cwQVZoK0pDVzhqb1BJVXJFU2JIRkFQUHlVZmpqNjBsaCt6enIwTlNocWNUY29VUUhFck9IRHlDNjBKanN1QnlralB1KwpleXJ1aEFIc2hBRVFVSUFlYUVBUE5LQUhFUzFaeUVsTVdZV1JuWlhaaFJIaTZPS3hPM1VvMGNIRGh4RWc2SmdFR0NEUVJVWlBDTzhCClVnVVBVWE5ZcmJhenRiWTRzaGlmeks1SDRZOGVINXhHekU4aFJKQVFNWmRBNDVDRDFISGZkMElCQkNCZ1FJRURlaUFDUFRDQjNpQ0gKSjJpSWFNbENoZzE2WGRPVEM2M3NseDJnditFRGlLZ1BFQjlJekNCQWdCZ3hnNEFTSVdJV0lXSWVBWFhBRXkxMWRhcTNPTkRkNllBSgpkRUFGZmpNL2VVTkVFU1RFc0tESHVOQWhuN1BDeGM3V3ltUjhIRGw0K1BqeEJJTEUvRVJpZm5vYU1UK1JpRG9neEFvUVhrNFpNTXRWCkJDaUFnQUVGRE9pQUMvUVhuRHdob3dzYVhuaklYM3pJWGRDSktIR0Z1MzJKa2RIUXdjTkg0UThhS2dTSnFDZ1VJZVlWSWVZVklXZ1cKVHlDMHdNNzR3RUNKN1BzdXdFNG9RQUVJZE1BRk9pQURIVkFIejI0cGw0dkQzNng0R3A2MjltYjJRdkR2Nk9FRGlPRys3MW95SnkwQwpTc1NJRVNKbUVsQW41Z09nNWdOV1dJR1oyVzEzRnV3L3pMS1ZmZDh0NTNiQ0FRZ2dnRUNCRHNoQWgrbWowZnRxOUQ0YnZlOUdSd2RDCmV1R2t2L2lRdTNncWtRTHV6ZTJLdTJHNzF0TFl5bmI0RVBKamhBaDZCSWtTSnFCbUUxRHpDYWdaQmRTY0FtcE9FV0pPRVdKV0VZSlcKSVpWVnh2YUdJZkFHS1dXU3BwMXdBQU1KR3VqNkg0enVGNlA3eWVoK016cU96cGVqOCszb2V6eTZub3luM0FXVUNSVTRGdjZDVEd6dworeWpNY3BVWVFZOFlRV0tPRWpGSFFkRW1WRmlkN2ZzK0FBRUIwUDllZHZTOUh2MG5LWU1PZ3lrWElZY2lsenRneFJUKzlzL2k1ajdZCjRBY2ovR0NFTkd6d01Bd2k1TWNva0tnU1VWQW5RanhKV1htSnpiQkJla2s0d0Q1SWdBRStSVWhNSkZiZ2IyeHJhWEpsZDRRMHZINEEKTWVRU3N1OTdpeXR2VVNKb0V5S2dRcWg0b3FXZXFMS2NzbU5vZGh5RmZkOEwvRFh3MHdPQ2tHUWhkeEdDYWswTVh5TTdNNHV4OTMwVQpHcDZBRWdFbGdqNEJSWjlBY1VDS0VIU0tFQ3VtbkxpOG5NemFPT2hkb0hFangyWDV5cjd2Z3dRUUVJQkJBZ1ZlK29TU2NoZFFPZDBJCkZtOVZOeTI4YlF0bisyVTZlQmdLR2JMdk93b28rb0FRVC9RVVZmVURmYjFnNzJWQm9YZ3U3b01FR0VDRUFTcW5FNUhUa1pERDNiRHcKdHF6YUI1dUJvOUJReUpCOTMxT29DRUd2V0dIMUFhdnU4bEI3bVRYVmFFeTFIQWJBR2pZdXk2QUVDZ0F5OE5zUjJ2R0lkRHdpR0xrTApFWGtjSEw3VjFXSk5MZTJzN083dkJ4Y1VyWUpGVmRhSjd2SlFlN1haYzB5Mml6NGFwTm9DQlBmMGRxSzdDRS81Q3B3TlRJNXNERThzCkRNeEhFQ0ZHOW4xZkVZSm1FWUtXdW9LZ3M3USswRnRPOUpZVHplVlVkMzAxMVdjVTluMFB3Q0FCQXdJUjdBK01sRGprYzFXM0s5bloKWjNzem0zdVJKK2Izd3dBL1lRL0RJVVdrcGtKUVZWazlWYTlBMEZZUXRCVUVmUVZCWXovUTJBODAxb2M2cTBQZGhCbWtYQmNFREFCVQpzQU1odlNDQmhidGw0VjFoYTNKMVA4enZoLzExQlJsQ0pNUVVWZFVUYllYRnlub0lLM3V6eTdzd29WRElFVS9HZmJDQWZiQ0FRUUlJCjlCemdIWUhJNlVwTTRXMWFiVm0xbjliQ0xVN01VQWlSSWtiMmZWZTc4cUxLNnFtdWdzRGk4bHFEcSttWVl0anhZUT09CgldXT4KCTwhW0NEQVRBWwoJNEtOaEtFR0paWG5MdnUrREJQWkJBZ1lVTUhDQVFZL2U0VWwzQVpYUFJlVnpKL0MyclM2eUwxY240NE45MmZEQlpTaGtDSkd0SWthTwpHSG1xcmFwUDlWWFdoeHFyREk1UUtRa0pxV2FTQlNxNTczdUJBd2owUFI4OUQ2bERqcmR4NFd3dHdQQVdZR2RvY1Mvczl2NWZWN1pICllSQWpSNDVjV2JFZ3RMYkN6TkxxSlFtSGxlWFFmZDhGQ1JUb0U4SnJRc0UxcHBhbWhxZTErRzVuZkg1ZlhqeDgxa2NRSVVPSUZERnkKeE1jb2tpdUlHb3Y5NEpUdFV1dGJFb0lrUW4wNE9EbzJZQmNzWU9DQVg4OFFrZEVGRFRxTURmbmNpVnp1Z0Z4T3hWUVY5d29qdyt2VApVV2hJeE1nUkw0Z2FDd0pMSyt0QlRLMmV3MkQzQlJJcUpSVlJjbWhVUDBIeVlSY3NJT2lpb3dkMHg4RkZQaGVjdmFoMHp2VWlTVXhDCnBraEVSQUlBQUxNWGdERVFBQUFBVUJRMTJ3RVVnQkJlaUR4d2FpZ1p6K0pFQnFLUWNnWXhRZ3dRQUJrWUVJZ2tZUkEwQU5pTUR2NzYKTHBSdGRIOHo3RkZrSFlmcVl1RldidjRjbEVLb3p3MUxORjU4dmVzR2Z1eFpZazhwanE2ZWFvZDBlTGVXZ08xSXVMYzNQa0xyQU9QVQp6Z3IwVEo3blplV0E0UUhpaTFLNGoyOFR0WU50N3lMWXptbCtYOVI1Tnc0TnpjUjFWMUVYbjY3T0dNY1FDaHc2LzhJeVUzZlBFQ2lTCmVoOXU0dFVBYVNUNlBBTkpLcG9nT2IwT0dhWjFLMUw0YllSY2FNSjgrMlIwa0ZPaTl6VTdUcFVJUk94NWlpcUYwMzU3bnFBaW1VOC8KT0JocFJPdE9Cd1M3dWdmQ2FSc3pOaTJ3QUJzM2xsSnBVQWxQNjZiblIxVWhhcEdBNnBPQkl1YjR2Skt5VWFWUHg0TGI4M0RLdGc2cgpaL3llSjJmcE1LZGlFT0RpaVlxYm5kTzU2RlFzTFdGMlM4T3pCeVdwekNlM1diVGRxVHpYT2ErZUxQWkI4TzArOHVjQmtVTm9zdE1EClVROGFkR3FiTFBBcVRScGthZHhTcEZQRnNFMTZVZmZWOHp3ajJsZzAzL0xudzhZNzhZdWJQMVFkNU9neDNXYkJGOGV0VVhIMVFqMkUKZHg1eVp4czFlaFFOeGpsdGtuR01MVTBWTmZEV1p1SjBpbngzK3E0Q2FWOGU1cmtZN2JxeWlrUjVzTFFVbnJpcU1OSlNJVjdrNEJ5awpYUkZMd1NwTlN4SGpHTjVHUGMybW9xYmkvUFNBMnNaeEFxL2R6V2tuekR4eEN2TExvZ251N1F0cDZiVFRsZGtIZjYxNjgwZWxqRTdyCmVPdHdJdUY5eVBMRTB2amxJWkpHSmdmaFZFUGswNUxNSkdnSXZ6NnZTR3Q0RlI1eDlLNXh1TnFKR21pY1F1WDA1ZlNZM2c0UVlJZXYKWWltcjFlN1FmazROTFk1V2VxRG9HZzl4c3ZZMVppTG93VUJsS2xKcVM5MGtCTFF2NktFZmpMc1MwNmR6eXMycjdpVFl2amJOSjRuego3S2diREV0d2liNCtuKzNzY29PVTZRMWlvK1l3UlEvelgzQUtTelhWaXJxRTFRdDFXcjNGUzNXNzE1ZkMzMGkvcFdKMkc0cStYR2FtClE1RkhzS2xOdGpDbSs4SDMzWDF3VU4zMFdtSGIvKzloWmZKR1JDNmx5UWpiSStvVCtMZzdUNGxrR1ZvTWh3U2huMUFjZGIxNlRnTVAKUms2cXRqYysvVzJGVG8yWURYQTZNNWJYSnMwUmFNcUl6aVUyenM3cEtlSVBlVkk1ZGFJK3FHQlpQNnowdnB0UHZJMmptbzlSOGxVVwpmdnFpTExnSDRWZDZjWW9KejZJNFZVczAvVUFZNkpHQlRjekJxQ1Y4RHlhYXRRRjJjSE9NRVgvSVZCcWNlaVJBOFpna1I3elRmVE1sClVjRU5HZFc2SWxsK2x0aU80ZnVkYmZES1lkZGRtejUybXFvNHFxS1NERFcxcytiNXVtcjFaTVFmOVlobnFyUEJuTlpuS2hUWmlRdmIKUUU0ZllEV0RHTHpSZzNJbkxEenJwVFk3bldKYnBwOGlQQXFxd2FLUXJ4ZFhjUFBwaHI5dzJyOUlmTnpnbXVCMVluaFZZbUFJOU9QMApmNXNyaFlxTUtZUHJvVlpEUUFOWDA1dUYwODRzY083VXJ1bm5LR0M3VzdaVFl5dkdoZHdwbmNzcTBCZ2xDakN0Z2NxQW5Ocm93UVYrClNwdXhUZWxVdlVSTkJvSXZ2WENRcFowUy9CMmxJWWdJTE5uZ3lReGxHOE9wNGVpeGZLSVJXZUc0NlZBcmdLMXBpMDQvTis0c2p5N1gKeEVrcVIwZmRQYmNXN1Y5MTROSXRsYTRBekIxc3lxZktQc3hwdTBSd2pSSFN6eEFrcndTaFJSR1M0VFZGOWNNdnVyZlV1QW4xRTZkbQppSVpmMnphME9hTXlWRFY0azFQVUlsS3BPNTBVdFJSSTVXbVptaDVYbzJmYmpkVVQ1a3RKeHRKam1aS2w4TDVOUEFLWDVIVHZaMk9qCjRqdytPYnNOMzI4T1JWTGkxQ00vajQyd1YxTXF3aW45Nm9GcWdkRk9zNkt5S3F6bk9WaU1tenJUaEdvREtYZUtyb1pYbFVZYTl0amsKZjM0VndUdndsYWxyMXdZak1yMFVweTlUb0ZQMGprUkNMNm9QUldlb21RdE9mNEI2L3R1Qk9Hd013Y0xrQ1VmS25sVVAwcHpIOFo2cApLWndMVVEvU2RGSk9EWVJUZ2N1VHhpWWsweHNMOGZBNGVub3l2Y2EyVDVnczlBa2tpc08rczV0eFNyRWVRUE5CSGxWQ3A2RXZYSGt2ClR0UlhWQXNzUTRBaXp6UlRkYUlxK0huTFZBQkRPRkpkLytPZWRxTjlnMkMxRDBaMTFqanVOemJibCtHOXJEcHZuSlk0MWthcWMrb1AKLzVzd0dWSUg5eEVDQUYyV29kZ3BaTkZaTEExbTRXN3B6ajVUOTFGTHdYVjBjS0xDcnl6Vnh4NmNVL21RRTVXSmVqTGdrTFdwbUVGcgpLaElLM0pReVhOVFZ6bkdheGt0dEZBRW5sUjZjdmpESDNlQy9PSDB5amhEZW5sT082NGRBODZUUkhrdDVER09jUjNwWEhUVXhPSDU2CklBWHZGTjJicXhOMVp1bGRVMkZwM05tcHN2R29CeWM0SGU3N2pFTzdHRlZwYlUrd0ZLTU1JWUdyMUs0YUdPQlBrRzVBU1BiWWpPTlEKMEpHUHN3QXNPWUFPaERad1kwMkZRcmpLTk5hZEJ3R2lCeGM0VXg5eE5tUm11ai9QRzFVUlRza1Yyd0tBdE84YWRFaFRuTWkydStsMwp5aGlkQ05Kd29PeDFydXNUSGFBcW5mcFdMUzEwNm5PODU4R05uUGJQVzlVVGhhSzl2SFEwVzNsLzFiVG01enhZQzIyakhqVHo1Ni90Ck9JQ2FpcWdFbVhlUXNFY3hjZHEwSkZNVGlYSGQ1NEd4bG1vS3FEbGJGUXVXNXJnMWFTM05xYnFWcHk4OEpIZW0vZGRsNllJUTg3a0EKakdvMEVrQVlzYnBqYTE4cis2aWNQRjJtSGwwV0oxdFEwN1Y4dzJuUWgwU2tjaDUrSkM2UG1VWHh1RGR5QWd5WVExUTNraHUwaWZMdAp1ZFhpUm14WVpNeE1nRTUvS1RXeDNrUWdmQ1BoTklDOEFaUjNzR21jUHNDV25rL3BuNkdEZlloYTVOU1ZOT1k4cHhTL1A0NVNFY2ROClU2VStjTlN1enJUYW5ZNmFFNmRRZ2pHcDU2ekJ1YnFpdEFZNXhWSEpveGJ2ejZONkgvQ1R4eFhiQmZUQXV4dTRkOUJNZzFNMmlXQXEKbWVYOGo0TXhQTjg3eEtDcHEzcWNjbHJUazlvdXhhTDI5cjdzM0NoNjFCdC84VGg5ZzJRQXd2RmIxV09obWVxNVRQR3lMSG9VekxoZApOUTRmY2Vrem9SNDJCOEZIeWFuYkhlQzRSMzA5NkR4dnRPelUwN1BLVExPMC9DeWxEcllpQWJTSTlaTCtqZFJQK2xRdGJWOEt4aEFICkI2Q0czZk9rOU5SWG41VGlKcXAwcDlUZHp6dkUrSjdRakx3cDNyQWluN0hONlN2Z2R2MWNZWXZ6RlRmVFZWZlF2cWpndDdONmNKc0MKUm4xT3dYazZ6Z2JCZ2V5Y3A4c3BWV2V1ejFhbjhNZURhcWtkeTNRck5LNmxMeFZ6K3FyMWhhdnJWLzhjejBrZFVpZVlkeDZBZEg3cQp0THQzS0NaUEdvNy82Q3JFVjVURHhJTE1IYUFvdE5PelJkL0pLUmJIc2F2cEdlcDFBRG0rSEU3dHJZcUJxYWZnMFNOaC9lRGozQmN2Cmh2N0ZlZmdWMHkxRk5QVm00cldmNXNWaldhMzRjMk50bks0Tmp3QVlCNCsvcURrRi90Vjl3ZEpGU2ZwbnZXcFJ6bzB1UFprVXFtcHYKUzRWVkJvNGlQTXpWeERMdkRFM0tHclRZNVc0ZE5VdWJNL1RPMWtMQ2FUckJwRVY2RTBCbmJVLzYvYWpmN04wNExSUnFVYXNIckRONgpJcXVJcXVvOHAzblhOT05VeUx1THlqZk1kdDBNTzhCcGZrL21sdEthcDBPbmdWeDAzWmovcXc5VlBoc2hEV2kwRDZWenFtbHBFTyt3Cis2bEtCKytrQmt0MWFwOTBPT24wSmVCRU9FV1BNa2Q5VlkrYlorQ0lzS2h0cEFmQk4rNVdWREk2eDBSRmJwSXJseTlOb0RqRmJhb1kKbVVhaW1YcERYUFgvcFhDWnAxRnc2Y1hRS2JDUHFoVnFqVGJORnlXV0FxK29TZVlnU3h0NGJydWxJald4Q3BLZEh2ZzRHT1JScFlOagp0ejZSTGswQzlsQmtHZ1M3K2FnaUo2QjZLcDJOVGgza1BOQUlHS2RpTldXb3J4Tko2TTcwSWJzTWkwbzFGV1RjeitWSm1QTWc3d1J1Cm5CNGh3cU4vcWZRUEZTbE1WejJIZVVXUU5SVGhTSHROVVpwVEJCcWtjQU5WZWtjM3BPUUlVWEZLZEVncDBQUkZCcFlyMFNxcDR5REkKZGdRTDJEb3E1ZGVkMmxEUEdDdEVnVHljWG85a29nZG5RVTZERUhUU21FbzlDYlhONEpraVViTlJ6eWQ3MkphN1NuS0haWnlDVGg2Swp5VjY3N3J5RlBreWNhdEFEaHFOTlMyRkp6ak9wZVRDSUNHeDJSeDN0S1c2ZkI4TDVTQVdEVU4ybExkNlJ5S1FNSlVndGNSQVlIcGJDCmd1cDB3Nm1nRXJiYU8yQ1BMSGJhVWdWd0hkVWhwOUtaMUlOb3ErbEdNY2h4RUFtRjdtTEFPeXFZVmhoZXFvUDdyYy9wUDdLbVBhQUUKWW1WaDVYVFNsTW9HZDBoUG1iUGd0OEhscmxkUnNvUWc0WktNemVBNk9aMm9qajFkUzZPK0RHSzVscWFPdjFFczkzWVBHRmFXR1ZQUApjWXhkRTlzTWNSVjRWUDJNVTU4NU5YZW12Sk50R0Y2bi9FRWdQUE40WCtsWjA2Ukp0bWw3cHV0eUhnRERydUZVdHRlK3NqM1BlSnJzCkExSmVHcm0zVzBxelpKcFA0WjFMVzNxa0F0UnpCUlpablAvaHdVR24zT1Z1WnlKNGZycVpLT3FmcFVWQWFubnBkT3NHeGxEdTB2ZncKb0U4SzhYYSs4VW16N0RPV3FBL2VvZTRYYlVwUUdyVXUwUWRXWGhyMFBlamlHbEZsek1mMDVUZ0JMT0UwOXpuWGRCMmM1K2ZVY2E3bgo4ZFJjU0tUcW5NWTdlU0NsQ0pIbmdDUXYzV1FXMTgwa3AzeVJ0c05MZmNKQi9GZUk0Q05aZDVISVJXVnRnRm5kcENEVlg0cndreHBiCmlqZ04xdTlHelFtMlF1RnJNMlhReDBpWmRBWkVMRGJLaXFOUWtyV1VkU0NzTXZLN1Rya2xvd0FFVUozVHBRUTVkWW53N2pBTUNMSnAKTjFIVEtuSTY3OWVmQis2bWkyUFVPSXNqZXVFNHVuNVM5Z3RjcXVSMGplZGduU0xBWVJQaklFSWk1NEN4YU5DRFZBTlNvZ2M3QkpYQgpIcjdSdk1Qb0w3R3VSL1BkUUQ1VUo5cXhVN0F6ME9QeTlyYU1sUDA0U05jaWhsUG8wYmJzRk5UUGd4djFTR0dBL1lIb0taeThuSkpGCkk3dHdlalZOY0RvVm4zUm0rcW5pOFRFUUQvb1ZENFYzY0xwZHl0K1FiVHRkVVNqcnFPdVJFbmlIU1c0UkNrT3A2SFYxRGk0bFJRUDIKZG9hUU5Uamo1WFhsVWt1bmgxanNqSlNhaDEycUV1Tk5pdWpRd3Q0K1JrOXgrdmRNNTZTMEFxMVpnaytSUnliZnUxQXJKeklrcHpkWApLME1pREN3UEgwVWs1VlUxSFVjZzJiR29WcnFVbktLQUR0WkVldWZBZktnNjd4bzF4NUJwVlBYcnp1ek1oM0dPUUpmc2lBWi9xYVB0CitKWXV4OWtaZTRsSkhpa2NaYXA0N3lDZEgxMkN5MXV6U2ZWdU8xQW9TT3Q1V1VyL2Mzb2xVSEFhcy9Xc1dkWjJvR3BxeW5iakpLZWoKZWk3RTQ1VEY4cFFJZUt0REZEQnpjYXBsQjJmdElucWdpbCtLaHFVQVIxdXZSdEQyV1BjT21VaGlhV3pKMzBPdmxJVy9JOXFDQ3FNRgpxVWVLSnd4VnBZUVV2RkVCaUJKNjNhVmNxa05LT21INlI0dDFsQUMrUFZEWEtjbkZYc2dHUW1WU3R4QlkrbEhScVdZSTVwbkpwR2xPCkg5RG03eE56ZWNRZm9SdVRVd05MUkJrMTU2a3pzWFpOVTlHdlJoMENDTkwrSGErdEtGeWVCN0d0Y25xY09wYmk0YnIwdTRsUkZVNHgKVTEvR0ZhMC9JZ3VLa0FUc2FtNWFnbXlPTDcyL1VZMUlvU29qU0swYmhTWWRIakZnMFNpRzZxMm9UZ09rM095WUhvSzQ3c05JcXp4YQpiSXNMVVdHcEwwaUZDNC9xdnFWNTJKalRmZ1V5Z3Q1RlRyMmlMc1RKOXFhZnA0azZ6MjMrRkM5TzZUTk83cnVoa3VYWnVJaEFvWXZGCit0cjdZV3B0VXFRUWlUZWlNdE9iTEhwSkVEZE9TMGZEbHRDbEE5YW9DRXZmNGVNdTVoZXAyaFo2UWhxOVJqSEdqUT09CgldXT4KCTwhW0NEQVRBWwoJQXRMS0pqV2JqaXF5RkNVTWlPcTFNQWZib3FYcCtQWkRScHFYUVZmMjlTK0xrNllPRGkzWWxYRkhYTmhwNmxFWHkya2lQQVVaeDRHYwpBVUkwT0FnMWljV3BjeW9JTzIzSjREektqdHRoU2doUHZXYzdTNE00UlVlSS9yRUFTYWxFN05SME80S0tIWDM5dElJTklmMGZOTEVRCnBPMGFGUTFNQzNZNmlyb0cySVhNczhNVHZUU0l3cmFXTW1nUFVqZ0dnd2lCQm4wZ3JVdEFHZ3pHd1A5dnFkSG5kUG84SWVyZTRYUkYKRDNDTDB4RHpqZmpnbFNlcWVUbm5uL1BJSFBLbzNWYmU1VHg4ZnJ0SG5LT1A0dFNXOEdDZEpydEhZVlY0cm5UOS8vclNaY0s4ajdDbwpjdFNFbUtCU2QwdzhjMmxXaEJkUy9DQnpmZzdOdEFJaGdwQitPR2xCeE1BbDJJOGx5SVBsN1F6MXFKTHQwYTNaeExtUWxCZzZPMkFICnBCZUNsbXBTMkZJWTlUZXYyK3NoREtRTnhZalRnc2dwQVl3dGJYT0tJdE0zaWdxakh1TEJQa0NQZXVEekFQaHFkem80dGVVU1Ntd3oKZVlnZFV2cktIUldrM3pNbGpVb05OaG1OT0RkR0VRdzV2MGg3OUkxcVIwWGpRU0MxWkZMemx2N0hJSzFxT3pEUUFBVWN3WllPdFRkSQp5MUVINlZOUjEwbS8wYSsvVXBlT2NDcXNkeC9pdUZPYmdGTnlUdmM5MDBzU2l3ZytJYmJpY0hMYTVHdHY2a1VFaE5OTjVYVEZWNlVQCnB1N0JnWG9mSk9ZVWlmeEtYcDJXaTdwUXpOTHBLTmhtdEU2WWM0VFd6VGRlUnZhaEpkdHl4bmJOV2hENWZHd1VTeWJPWnFucERoeEoKcndFUk8yelFJQWZmZEFqRVpwM0pyMUZCcUhxc2dRMTJtT2l3ZFFMUXFQT2NOb1pKMnpGRnBqNHhhWGNNaURMdG9oU283MWRFMXVjVQpCQ1R5U251dFplb1FwNVJjRVRuclBFNEFZUi95R08wOWJCVkFMMTJ3ZmxnVlduVktrd1hwNDA5UlR0aWlta3hPQ0MyMHg2Vk9EYjl6CldPZmwwbWFqazZVREhBcW9RcHBFbzRwMmRSU25kYlM1dER0U1NrNXFxdFl4a21DcndUZHRJN1cyTk9qSnMrK2taRWpEcU1LNm0vL2EKMWFxR2pVNFJ1Zkp3K2w4aFd6OU9uY24wOGhlQXNJckZNVURMODR0VDFBUmFEazZuM0t6Tlh4L3d3alJZVnhlYWRoNVQ4cDZaclZNQgoySmVPek12amN0WS9TeGFxdVgvOFozTFpUbWhjOVRMU3owV3RoN1NmL2pqU09zRVk2WXN5dWtjMUtaU3hGSXZuU3AxWStBWk03L3dNCnBJSG83ZFdLOG5IRW5Kb3RUZDF0Y0R1eWFhYlRuUWNlU1Z5VXFyWmJIREl0Q1B6cXJRYXlzc1hpOHRGeDFad24yM3ozQVRSR3llbWkKMndCNS9xM3dOTmpaZGZpa0poVVNxYlAwZjg1T0JsNVUrVTlhWm5MNVNTRVV2WDF5dG9vYS9UT2tsM1dxVjVNNm5hbHVleGtFVUFZdAptMEZEMVhieVFRT29waTNPb3FONlh4QmZKRHRMZXkyZFBsSGhmNmx5RUVzRmxlVk1BTmZZcVlYNVZoOWdHaENpS05PUGtPZVU4L0JzCjFQT2F5U2ZPVlNLZXhHblZLV0h5YUJ1ejJuMEhHaEVlL2x3aGQ2b2orekViOVZuMFo0ZFNvK0k2L29wZWZ4TEFmeWRuUWNRSkxTdlMKcktnL1dSVXQ3VUk2eUhaQVRuVlFyV0FIMkJwRTJxTUVEZTdpVGNlWnRHc2dUVnRxTGZYbWlWRk5ZQ1VmOUZZNTVlMmxvMW9QMERqSgpUYWRaU1didkZCRWdxdldzeFpsaHp4cTJueWZTeGp5MnR6cFYrdExBd2gwRTd6Z2RGQ2NscEtvalJTaFVaZEVvMDdBNExKNXNPZUdFCkhoV296VFluaXVMODVIMFNhWTI2SkRwNm9TaEJhVlJsakJLV3dadGc1OUZSNVFONVlLVHpZRWR6RDBRWFNLRVZieG56VW1Ldk9wZmYKM25ZNktjbWlsbVdJQjZlTVUvWDB5MDJOV052UU1DbFRlU0NzT0R3UGhEQTFGTUdjMHNoRHA0bWI1ckRpZFBxTUpKRlhweWc0djFPTgpEcGJFQVorbFpBM2Y0T081Qm10czFaR1ExU1JQZFZSd3NxR1Mwck5jSFAxQVJLNk5ZS1BwbUZ6d1dycU82b1FycEt1WXZDbWNMSjNnCk5oK05yTFlPb0k2KzBpeER4S1FyaEZBdStKZWFGdm5WVExzM3YzUGR4TDMyejNOQnd2dWR6dW9EVGh5bW8vRncvT053Q3U4ODdHUjYKaEJvUGE1VTh2V1VhNUoxMjR1QThBZGt5VGFkNGZnN1BHWFRBTkN3cnF2VU9kdUlBbUt5WDdUUVlrTzVkMU1Cc1NqUm5SanBPbzFBUgovWWdVZTIzM0pRWnVlWmUrS3hjc0tBWUNOTlh4SW1WT2FaMGdKeDJTSGtpMnBTd0FZaWYzNmlpa2tCTGs3WURVendnYm9OUm5NQ2lFCmJPZDZPMDYrRWFkRlFvbUZTQkVXcDQ5Q1pJalRBM3dmNUp2MUlMNU1FQ2RTM0wvbm4wTTRyVHRBdE5TMEZBY0NBR3NrcE5VYlJZV2MKUUdhVFJ2aUp0ZVF2elJkMVkwdTBXQXBwQmk1NDZlaVhEMDVxQXcyWTVQVlcyUTUyTkhUMFRhbDF1UEpBWE5uWUNVaVlLdkh0bkpRWgpHMDFSMlp2TTR5VGJxWXcra09Dc1RXWGljdUE4ZEVFc3ppc2VUbVAyd2J2RzB4dlg2UzE1Zkt4MWxoYTFuQXhMR2x3NHhjS2tnM1E3Ck15bDU3ekJyVGROdWg2aXVKeGloQmErZjZSQktWdEhtVFRBYmMrYUtqb2hVN2ZVWDVES0dPdXBBNjZVTDVFM1EzTnRWVkMxRER5U2MKcUJocmdrZzZZc2k5NmdkSVVZbWFUeWI5OGpObVR0TnpNdlVqbEtsUG1aODBkd1Y1T0pWTUQ2cnhQQ3RyMFRpNS9CWXd2Rk12ektvQQo2Tk93TklJNkVLU3QwcVJIOUtITEkvVEpsbTNVQXN1Q0RBdFYveVBtU0YyMEptOFV0U0xGNTV1cUEzZEkvOTlvNGJRZHRwY2dCU2ZZClBXR0oyZUtwT2tvS1NHL216dEs5cGNOb08wYTN1TXlsZmxiWmNsbW4wODA0emY5NUpobEN4RkNSVTRva2p4UjU3dXIyeGw2YVl2WkkKcTNGN2dnVmRwN1VQRHRJdTBkazdTVGJmeTNuOXA2TG1FOTRXL1NXVTVFQkJpc2J3K1RuTm10dFBqdHYrVjVTUFpjQTFLUjNwV2hsTQpRb01OMDFISzNNNm96YXJqM0JKa3IzWFUwbEg0MGgxY2sxbzVpT2xEMm9pV3pyS0pIWHUrMTE5SHBOWHlQS2QzK1V5eG03V2ZVRzhmCnRONnhjYkUyVGw5Q3NFd1p5VFFsVEJsRkhpWVc3djNwQVNNRVM2bnY5STAyVHFWZ1lZR2xtYjIvemkyNktrT1N1dnBVYVkxRkJmQW4KbTBDUktjb3FuZnREMFliVS9YT3NkQlQwdDNTSHF0UGNPcjlBR2J3NUxkQWdETjZMMUhtVEJVbitWSjlLMTNFTWZOOHNmTFF0dU5RUAowdUlwVzBlekFvQXZtQkxlMjJsMjZqQjVnb21SeHpyN09qM1dnM1RxeXBTTEk4OEZzVHlrL1JDbllqd1JuRDU4eDhKVEVYVEE4RFJOCnFSc0UwaEEvQ2VrSTFtczBxdDZpQWtGbzcwTUJ6ekZwdXFqNnNBSFNxNDJ5b3VGbFVzK0l0RmRpME9kR0g4c2dTWStCeTFJS1BKQjQKcVEyNWx4c1BSQlJMaWVYbUl4MXRJSGU5NkNEV1N5a2tMSDBZbFd4UFMyL0FLZkY2SUlnT3o2VStDRFFvdGR2VHhjMnpUbVB4L3FWQgpDUkdwR3BFblRwTnB1VU0yY1QxSkVXVmxzcHl1bndqUDNydVFLVFNsZ09vNG01U1l6dXJnS3JvcmwrR3BnS0I2eDZqcElFRGNNdjBWCmphelJTb3JpWGpjWFNQbVE3c0lGSU85MmFvN0JYNnRwVlBWMnNsbHpKam82STBuQmNoVEkyeGRTT2l6ZUxyU3dIUVhWMHFtOGxOUDEKNnpTbjVpMTF3Q3dQZEFKM3VnK2dwUThNeXBTelZxWlhHM0dlRjg5amVwRDQ3U3A1VUtlUjlncDVkdmVsamNFZGxGQ2xnWHJYRFpYUwo4ZlpPVlRJb2cxaGd5VlBFbzY0N1FzQURxZUxtSUZyNngwaHBTSFdTVzFFbGdYWlV0UjBtbWtHNWpzNUpGNUJDc0wyV1lPa1VzeDJGCmFGbXFWSlVZcFNERkhOWDJFRG4rTzlSK0VvTDJnSzh5UlQvYVdlQUpZM1JLQUhIa054N0FBWFRGMUw1VVdrcVhTSnlXRndmMHR2TzUKYUVGYVJicEdyNEVuRmNhVWRwUFVqQ2ZpSFpoV3RHK3MvQnQxTlpXSzdxOW9zbXNVNTNUQVNMV0cyQ2tIS2JEVmtZK2RHYmRETysxZgpJdmZ2aGV5OGRVWHEweGg1RmRqQmJsZEhmUzNHcVZSTExaL09qYWtPZUpPb25KWUdvOUdaaGpLWXRoenlJN0lQd0FCNXpzMUZ2MU16CmZYQUg1d0QzakR4a3dYbEk1OVU2clUydDlxV1g0c0p6S2xWQUIveWxsbmpIb2Uzc29IYUxVdlp3UkIwWkNHZXRVelVrR1NvTVNIK0wKN2d1dTF2TkN6ZkU3MmtlNktacDQxcndNQ2xWSHFydUN0TndpRFdYVFViVzVGNHdnWXV1b3lqYXdTdHhqUytOOFZOcGJTb0h1YTA1bAo0bVFYYk9LRVlDbXUyY3RVT0dGMjYxVG5Yam84cDM2Y2FaRVRVZ2piZFRDS09OMXV1QXJSMVZWS0cwYkJiZ0JkYXFSOXVPV0xabEg2CitIeFpVVzFnUVl4YnVpeHFCWmJLNkNHRkxycTV1YURnNXRJVm5sU0k2U2libEM4REpFaEYrN1NsL2hkMnVhalNMK3BXQmdXVDBoSkgKMjVEWlFyUjBIdEttNGFPV2E1UnZ2S0JSRlh1VUxweDJyeUdQSjVubXgrcURjMUlmWEFYeWFFNzN1YTBFMElPSmtGTWErREx0bHp5Wgp5MmdSWEtaYnNLZTVqMU5GOSs4UWp6eTdsaEthRkc3RUFSMmsrZjcyczIvVGxnYlNLeTcxQm56SU9HKzFuTUR3QkVxMytmT2xheUFsCmdLSWF0RHJncGh0ZFB0M0NRV0owZ21iQjBrWHlSaGtOMGlNajFTbHN1dTJ3SWtGcTZOUmNHdDZ3U0RNMktTeEZhazhxYWszRjdVaTUKUkU2RmJVQW9ZWjJYS3JKMEtxZEpnMlZxaXF4VzVXNHhSV1RLUXJiajFMV1h5bTByMUorR05aNTlZRkdMcDdqRG1Sd21QK1U3cTA3SApxeFJCOHZaYXVvK05MYTBaS3gzdDFhamJXL1huOEdSemhYS0pDbXVJbWdWcGNjR3RUcUtjMmtaVmUwYUtlcWdPcmJXZEoreUVSNE12ClNPTzJUcjY0VkEvUzFLc3paYW5EeEZGaGhQUUxLYjZsb0x6Ui9LWFpQUHBuWHpqdEVSNHJURmZyTU5VcVU3R0h3d3g1OXVRSnBGRHUKOGtza0tCQmVkS3RUWUtqZlNTWTYwUGtqVGlwVFM4MXh4ZTJnbU9xVVZKRlJ0S0JNK1FHVEF1d2huSlM3cEdGYStveEkzVXVaNEVpVgpSenBCR3UyVEI2bS9GT3hnTDdXakhvUDAyMHk2c0V0ZFNJSzl1U3dSczNRUU9BWm51VmQ1czJYc3NPcjBMd2JTUzVuTGFMdmg2MWJLCjljYVBJRnk2dmt5ZCtpSThCdEFENTVxQU1FdW1iWFRTTkhtZ3FhSERHczg1RkdWY3oyUHhicE9SVmFmeFMzZXZPL2VoSTcybEFwdDAKaUtxb1NZNE9qWFFZaGVmUmtZUWdxazV2U0ZjaEpRRXBzbzQra1hZOEIramVJRDJlWHgyZ1M2bmM3UXgxOUdHcHhFbWhXMmZCMGtpTgpFbFFIWmREeHZLMncxRjgyUVZGa0VMUjBrS2VyYzFxYWdkUTVsaGk1SG1ZbVMzRTZ1akxxb3dTbm4vTUZXQUliSWRQc3hxbGhub0xVCnhPRVJXV1dNaE9IdVdBb01jMnBucXRzdkJUcmx2OVNoR0wvQzFHcUs0a2hMbDJ4WWVGZ2NxazUwdmRURUZQOFcvQndFMzFWZkdaNUkKakFzRy9USmY5RWsvbDVaSUwwWGphbFExc0h6ZC9kNGhqZm85NlJhUnltZG9vTEJSaE5kUjN1M2d0Q3BTcXVxZ0ZWS1FhblNraWM5TgpuTW9vTDBwZDJnakt2WDA3QmxHNmxJT2xPZDJCb2pnQmlHUHI4ekRHVzcwS3ZPWEJNYWppdFBVZTFGdmxSOWNMVHVlVWRYaGltQ3BkCldWcXVPOGlPZ2xPK0xBY1hwdFNmY1hhYXhqWjM2UU5wSElvU1YzTktHbm9tVXR4Vk9RRkt3NDRSOFUyVEpqMHZBU21FMUFBVXBaOFUKQk94TWJwUnNPeENCVkxvVXlwNTBnMi92WHlLcjgzbHBFRXF3eTJGNE9ub2tBNUZPUVFwTXBHbUtZa0ZxUFFxczczNTMwSnp6bUphcgpLT21CMThZdnpSZTlUb1BRQTBIVHhxRjNwNGVYd2k2aFBBcXJGTTBwcnlwdFN3UWQ5TDJZcFZBNnBZeGMzN1l1RlpNY3BEcEVnazBvClVXdEVEaE1SdGhYRW95WmMrbzRkWXA5VTFCUXRRWENqZzFabldBcEdLa0Y1VTlxT0VrZ0xzZU91a2VZWktjcElEZFhSdXd0YldsVEIKT1A3SlNHV1Q0dnZDZ1NiOHBFMjcyOUxQanAydSs3QkFtZjRURjhWeWV1MnRHS0lVNlVqazVhWmZtT0xvMkNTK2t4NFF0eFhMZDhvVQptV0w3Vm1CTDVVN3hFd2NQa1YvZnYwQXB3VGRTT1ZNb0h2bENOV3lRVkJLZjk5Zjg3SnVXTXB4VUlRWnBPcVU2aU5JUkgvcTdSZnZTCnREU21OMkZTL0pBYXdZNitZbW5MTmM1QUNwTzMzSEcwWCs1ZFdZNmFKaWdiL1lqOEhTT2tvYUowcU1KcWhvTCtkZz09CgldXT4KCTwhW0NEQVRBWwoJa3psOWNqb1RyUTlhOTlvcis0RXZYeXgrbTA1TlRmdk81MlVkcS9UYlMwdWpuZUtpNzJDZVcxcnQ4RUJmeWVtV0JtZ0VsbjVRbjlaYwpNQ2FEOEJhUHlsakpvUU5WaEY4QzNWTHRScVVHN0VoWG5YSnoxVEVzZzlxaUZkTFgwcGwzMEpRWU5EaFhvNkNsNnp1dDRaR3FucWxLClk2a3Mycnd6NUEvbG1uNk5OQTlMVFlkUHIxT0FLeDZPeFcyRkxWUGZSUVNZNGo4UFNmUURlMnRhazhHOEJ6aTduUnFqVWxEb1NSSC8KRWg3d216em5BQUt4cXRSU3c1VE5NcklCYlFyQzVWS2RmVEhBbzJqYkJ6OHd6bnZDWEhnNDBRZkdLZVpOdDNRMnFRcm5TMDlsY0ZRTQpCRWNEUytGQ0NnWHNOQ0xGTzFXakx3VWhJL1V2ZzdTTFZLb1krT2dGKy90bjZJVzArTHA5bXFnUFlQYVJ0QWdwNzhVYjJTRDkrVVpoCldKVW5udkI5VjRyVC95aVJTSGRBVUFrdHptQ1lSdm9nb3ZGZ2RacU81RW5SQTBIYkZ1NWdGcWNGd0ZLVXp0S2tnaFdZS1d0Z0I1TisKclZzNnlDUUlwT0xROFcrdmVtUDdnWldnbGFuOUNNTEU4QUFwejZVL3BneGFtRlNJcXM3VklRVW00NE9sUFdnNjZYbmdaSkI2TCszVgowY0pYUjlWTDFKZm1tdFF4NVNRRTdISFIyMm5GcFRjZ0hVWFI1UVJSYTBuUlpwdnBEQWl4SDY0NDlabmFsa3c5QUQ1UW1Vcmp2NE83CjVKeis4NkFzQldIUzhjdStISzFDR2xpcXV3bTRrREpnb3k3WWoxTFpSbkt4b1M4OHNqQjFUdnNMS1VWTnp1T2paMmtNS1FISnZGVEwKcEJMNVVrUHNLTzlvVTAzelVua3NzYTF6YjJpWGhSamNQUzg2RnpVVnRyYzBEbEt3T3ZVRkhUZW5UcGxxdWlKUGowU1lYb0VreXhNRApnTUJpRERLZHhTa2lrT2NTNGpRNkhIbHNJVHg0VWVGVWtTbnVzRFFWaWl3MVY1R0tjanFWcFQzWnR5TFNsRVBxcE5Ia1JVdmw2VzlJCmxXU3dad25CMUIzcTd2K1gxZ0lwUjBoZHpQVVdadUdYaHF5QkJOSWdYcEtsV0NabDNVNDRBenNCaXdaM3BDSGRhQ0FKMGl0OElQc2cKaFJiMUc3eDM0WkdpdEhOYXVvdENxdHcxdXRNeTYrVzBHeG9BQi9VaU54NFFkS1Fqa1dyNllMMHd4Y3A5YVUrTEovZXdWRVY0MUwvRApDTkMrNWxTRXBaQXN2ZUJlcHpyTE95a3NCZGE3d1RqU1VwQjNqQ1cxbEJaSXdWcjRrNXpRaFZTb3Y4THpWVFY5YVlNOFBVRFg0NGF6ClNUK0VGUE1ibVh4WWl4M1pkbmgwM3hLZFFpTloraUxTWTJXcEs1QkdNZGlSVEVxWXVGR3BxRUlnRXptaURvemd2YlVXeTR5VUNBeTIKbk1JdTlaRzZRNWxHTGJkTTZaSmFpbnFIWUNPUEhiUG81eWtGRU1ReXptZFNwdnZEOUd3NzA1bXpwRlRITUJQYlVqaWQwMkVtcGQ2MApJbWRTcUtVZUZBS1QxaWtkckJmNWk2U0MyN3dmMW9wVzFGejBJWmJ1Z2VKVWZTOHYzV0JIQnFSc1pYRGhERWdUc2NNZTJDZ3lXMHUxCkpuVmVldHNPb2ZzOWNla1NwUG9lZmNiS29GTHI1SkNCZENsT3RaaVNlNDBXNi9qd2lVZktHbWNTa2ROMUFvUlFSWkRUS0t6RlZWMmQKY1R1eXpicE1hUTFYemNMaWxoYW0ybDdxeVlkSGhhWFBCeWZQaWU5M0hGQzRPTlpXcDdtZEd6K3BvZERoK2NRN1dkdFJhbWtQT2hWQQpXSmFxQjJudU9lWEVjZVJRem5zYU9aUEVWUmxZVFB6MDAxTU1XSzFSU0xVbkJhZEQ3SWlFTkR0U1JJTk9Xa3duSUJxb2lMRzZUaXJPCkZFZ3pBZW5GN1h3QTZWcGhNNSsvSmhKVjZzNUFET21veXJsWFhYbzBGdEE0cFk0d1V2NUdzeVJ3QkphS2I5b3BMMDVSNUdIYkIvdWMKbkJvbVU0NldaMkhSQnhMVW1XZDRzYmdTdzlUV3FUUjVVSDhJcEhoUWFMUTNZakZEMVZiZE9NVWdYOHFTS2RXQ3BZUnVCNjVtaDloaQp4eU5QNmdOZVVlNTFKa1ZvQ2xmeG9aUmhhc3BDVmNFaSt5SHNBcHgzTWlRZ2Z0bjBTUU9Sa0FMaitFdjhabW1ONG5yOTB0aElCN2QwCk1LVElwWmhYSnh2c2NBRlNFbnYwd1RHb1hlckRxYVpDZUVPSVMzTkZ5VnRLYktmQ0xtR2tuQjJrNERRWlp6eWRjaTNQb01WdGNYM0kKdEhTNnhsTlQ5SUNnQ2hnaFJDSTF6N053S3RQaWdUSGxGQ3c4a0pja2xGSm54THlsbHBZeW05S3lVWGduaGNjcXBGVk9jV0RuQkhoRgp3OGdwbU1UUENBcE1CbUJoTGkrR3F0Sy9SVTI5RHJmME1FanhqVzRzcGFyanduWkNGZElPSDdCUG12OVNuVkcyVWQ2Y1VPai9ES1QwCk9GVUcyK1RlaUxqQlRHNEdmWTEwOEpaV29YckVHb3FveUJmU2wwS21Fak9QcW5ObDRwU3l0bUhtTS8xMEhtbGZkUG8wT2xYSTlBNUkKeWJObEtWQkRwNXhMRzUzQ2MzZUt1VjFxaXhCNGUyWnBBZW13MUhtKzlHbElxNGdHNXdZcVkyT3E4bEtIS2FSR0hERTk2UkpJdFVxTgpRdmw5TEoxWjhiZmF6bE5MdDVocDBIYXVMbTBoVGJUb3VWcURqR0ZIdStoUkdLbFRWUGVuWWoxRml2NmxxZE9zTXBkK2tlNDlkbmNNClM2M3lxT3FKU2tPbUFtN1RnWTNuT2NNSGdHRFBjYkZ5V253ZXFVd3JmUkFhbnJqUVRDL2JUaHVGVTNjc1JjcmhNY3l5ZEd2aVQ1YysKcHdlMzFFTnVNSGwyVmt0N3BMb3d0VlJpU0pjNE5HVGpUUHk1WEdoVENWU0JqSkh5Y2lISXE5SW9pZFBvNFZKaWs4SnU1Nk1LazliSgpLY0ZTVkYyNkgweGF0VWpoWUIxcEhxazVTRzJxQTh6U0tNb09CakJKemdXekZzb3p2TkJiMis5SUYydFNLQmgyM0c2WUZrNk5BZ0lsClV0T0FkVHVSQkRsT3ptb0tuWTkra0NoVGRBK1M2VG0rb052b3dLeTk0SnpHcU5ZdFZRKzFIYU9pekV3ckl3VUNtaHpKVUVxcUV4V3MKOGpLL2dhcmlRb2Vvc1paR2tFSXZKUVVweVBQaExJVkNieW51bkVucjAxSUlXWEpLdVZ0cTFDWTlJc1hDenRHKzZXUjF0RWQxT016WApOMExGV2lyTFJqVGhSaUg1a0MrSzdJQVV4eWhLUk9KU2YxaXEwS2lJdzVjNVRqSncrbklnQ0hlZWVLZWJOVlU0RDR1WmVscWVFWE9lCjNVdlpzdlRJSFdoOWFUbFBTaVE4bkNEdjVHYVpla3IxbnRLN3FqNEovWlo2SjlQb2FWUW9XczRPWHI2WEorUE1iUGlnNGdrTEp6M1oKSUgzZVRuU2ppZVJTMWRLUWV2aWtLZTlNZlM1VnNkU2NVcS9UbUtXNDVKMEFwR1gwZWhuRWRaU2U3YStDUVRHelJKY1NVUEw1RnZWQgpTd1drcEZsS1NNMUYvWGZLSWo3UGwvTnMremh1VzAwWkpJNHppcDdBWnR4T3kybDVCZ2pYNGZTd1pzcTNVWGdpVGd0eHdDTUFtZFBYCmxwWnAxNU1LdXgydkpnMWQyamxBaXBlQUJXbmhjOVIzcUQ4eGU2bXJuNjZFQ0lteWtObGprNlVmWmFRYUR6cy84MkFhRXFuVWg4TlMKQ2pqdDFkSmhTeGNnUGQ2T1hCSXZxbytKZ1QyblV1ZmNPeENjR3FXaEtBMVhuV3JwRjB2bXRIWWV5V3BhNlR4eG9aNlgxRFEyQ3JmUApmT1lVcll6N2ZKN21xSjFPZUtZZ3RIUkVHQzY5NkJPeVpTbkVPNXVSWWtHWFV5WTZNeDNTdjZXMDFTRkI2dXFEVmVTaWc5RGd1eUlyCmRCZWRzbnhSVDVvektTZDI3a1didDdRMU81Wkk5ZTYwb3hhY250UmFHblJtYWI0ZzdVL3FwSmpyQ0ZuSmFraVVHYVJUdGpRUStydzAKcG5SUXhZNUtqU0hPcU0zaWxHRk5zNmxIeTNrb1Z3OVZFazZySDZmQjdPS25wbnk5MTlYcHNQU2FEbkpsQ2hJSDIrTUdqSk9rNzgrawpweTF0WEphU1NDRzFWTzIwQ1duZ0ZVcExINCtFVWlXZHpGZWZ6amdMMHRaS1BQblNHdWdkWUdPazZrbTllanRaa0hLOXBhcGpDd3RiCkxEVUlVb0REYkVzdmwwbHBMTzNSYTFJeGpvRVc2YkVjMTBVTmthYWxxamxDbkY1TzZpNUlEOENZaHpySmFUNFh6NW9XVmtjOU1talQKN1FsZE9jVjFpdlp4MEhoU2VKSkw3eWd0RFJtSUxRVk9lR0MzaEtWNUhLUm9kUkxZb1dYU0FWd1gxSXlmRFcyQzZBSWloWU1sUjBrNQpwOTFJZ0hqaTlPZkRYNUYrQVpZNlNQdFNQYlhURlo1c0tRaDJBRnI2NlNqN2tNcDdxYzB1SGpDTzRMdk4vbEkxOG5MTm9rcVRaclBZCkdXQXYycWp5bkxXYkRxY2cvQjQxcHkwcjAzUnA5RTRSaFNkUElYcFBkdGtlbDNxY0ppbW85aXI2c0ZTcVJ1RjlmcXBuUkZ1ZlZxOUUKRGFUTDUwc1h5R21EMjhHM2xtcUJrSHJOMGxsQkxjanhlMm5YcE80czBuMkROSnFwTHIwS3R1Q2s0cjRTcVBEZHNBQzBKMFhzZmJ4ZgpRcHd1TzZyR0U2Y0hOVVdDTWhYaW1jN01wUGJld1pNcFVpeU41eDJmU2JxZUZHVHBFQS9lc1hacW8xeHFqQjBydFUwZTB0TjBReTlOCmFsU3RFY3FjSFBObTNVZXFkUWFtZnVTUGx5S1FRZXdVaU9lTVUreWxLMFI2dW5QNkVYdkVwVUNRTHBTeklMVURiSjNFcE56dkI3SjkKa0NMV2FJSzBmcXFveDZYTlJrZXgxWEhLQ3R1Tnlzd3BZUFVncTVWVzFBdzR6Zmdna0VDbmVKWXAvRHFUVTBUUGIwczUyL0VXY2dPdwp1NWVsbXM4UlVpMUlXMThhR0hZODE5RkRYWVlsbnZESm9jNW5OaGxlWmt2TXZBcnhxTGkxekU3NVF1cS9iZ1ZtS1RFN0luL1NncVVxCjlrV1hQazZheHpUcU5KTjQwWlB6bDg0TUJ6bUwwMHRjNm5GUEYwRDZUK3dBM1BtcWo1dVVpUWxUbUl5eWV1d09wekFUVHFmclM4c0cKV25FcStVQktZaW5JaHRSdjZiM0tTUTJMZmt1aEpoVUl3b3BCN2g2L2luNGFrRTV1bDZzSUVyRE5zQzFxYjJuenBMRGZEaWZzcEFyMApncWFKMjBGVng2VkVMajg0cFdycHFUSlUxTHpVVytHaTN5T2g0MDNZWXozdi9RYUJYWXJtZUJFcGd1UHFNWGczNnY3L21jYVhwdE1wCmNwWmF6QTE0VGkxaS95enRJNzB2RFdqanBGUm5WWmZYaTM0bFdwYUFVRnkxTmlIVkJpejA3M3VucGFPUWVvYVlCSjBlTUlndFpla2kKYTVKVnAzN3ZPZ0VxV3JMNWJ2bC82eVBwMEV2ek95NndkTkdjSWozSUNmK0wrck5UdlROVDExSmNHVUMvVGJ4VHp6L0UwbTFMaFN3bApzajJqRzJIbkdWbXR5YzVGNVFGNFRuSnZzNmpSdFlmaktpSU9VeHV4dS96dmtBYS9zUjJUc0dxVzhrK1Rjcm90bDdhb0RtUlBSTGZzCmtwZTRhMmw5QnhhOUwydzBOR3RMWDJraG5ER3E5eEYxU3p2dGFTbEl6aWxzNFpGVGhzSGNwTmRoUzYyeFJZOVg1eFBwdDdrUEJ2SHMKdERPMDZpbmFNbHhjZkRQNzJpYjlpZGpKTHA1ek83bTIrcWFXaHJpZGRtaWFSdDN0YUVnU3ZqMUYyaEhSdnFxRmxPOFFPbjdkWFZSWQpDZ3BDYWxwSkEydmdmVUMzRkMranY1U2VsbWIyU1kwb3lXMHBickFFbThXQ29obVJHc0daNDQ2WFdXY3Rab0ZPcjdMaHN1SENJWjZXCmVyQVU4cVEwSU4xR1krbUttRTlmVk5TRDdEU1NLaTl0QnVvZ3BYMEhzTEV2dkFJLzA2L3dTWXZxeGRMemxCTjNWeS96V2JwcUtUWlAKeXJOMGdhVXArUERTSjZTNm5aSmV1cFphUVN1S0w1dWliMVVkOWhySEY3MzdzYkZ2WkhjVThKaDg3cE1XelBGdU1WTG9PTDBmY0hMTQpTMlZXSGpzbGdMUWRZRHRZdHl3Q2xkRmlZNDdJS0hUMzN4VDQ1Vkl3NVpmQ1BVbEdDeUoycktXQjFGSWNRaEZTV3BYUWFUeFNGUmxhCmxQd2FmeS95bmVDRnRjN3Mwa0JMckh1K3RHS0g5Q3N6dFZvYWs2VVBKQk5PK2JUU1hkZ1ZwOGxtcWMwQk8zcGRSeWtBZ1BUWlVpMFUKMm9QOElneVFrSUxMU3k4OTVWYldlcE1uUm92K3ZoUXNUR3BhMm5IYW4zUWlLSFV2YlVFNlF3VS9JMGp6YnhNb1F2NStmcC8vODBKLwpkOVh4VmVYbWM2THEyY0NMV3U2MEFiMlhBbGo2Uk9UNmk5Mmw2OEdsTVRqZ2RKQks0cEJ5Z1VaSEtxSUliL1VFZHFUT3BOK1p3TVhzCmhRSWl5cVhYYlY4SHpOS2FwZk5VZ0pRclNGR1hxampTMXNqWHBkWEFKNnFvWW56YUp0UUFrbmxkcVNySVc5aU5FT0k5ZnhmeHVKUm4KalBSSHN0K2lsZTEyS3FkWkxXMEkyRkZUR2J6ZURkY0s1T2VSNEtxaFl1UFZXbnFBYXp2dEdsZ09vYmFCOU5YSzBuYVRNRjNhU0UyTApCaWtxcXVPa09ZUFVhUFByK0lZVUpUMktqTjZvQk5ialVuL0o4UW1zVjhsQW1LVzRnYnBZamwwNlBWa2E5ODZHcFRYc1NZVVJzVm1MClR2OS9nMlZzUi8rOVg1OUxmd2dqcUxWM1ZXQXBHSkVxc0RtYVVGWTFkOTJOMzUxREtzcTBKcDI0bHVxWmw2bVZUQT09CgldXT4KCTwhW0NEQVRBWwoJaXZwck9vRzBIc25NVDJkdWZGZFFyTmxMZFQ5bzBqU1FxTFNPTHNlbDE2L0s2WGo1LzBacHd0TGpZcHhHVjc0dWF2cFh5RlJyYkg5RQowMXBxR1VKSWtiaHY2YitOVkR5SG9hck5iK25vZjYrUkhyc1gzWG1uOXBaR0cvWEJ1YVc1Sk5SbWs3cXhkQVBxM2RVOVE3ZmxnK2hoClZOak02ZEs2VXdlT0laUmJOdUFpWHBlbDNYLzlwWUZJbXhvMUVvQTN3R3VwSTlla0YxcmpMczMyQ1FqcFNJQzhPRFhkRFpMRG0wdlcKb0tVTWx5Sm5SbVVmYUFCRUV0cHZOK0ludXpkT1FLaEdZRTRxZ1VYQnFMbXVGZ3JCNXBwbGgwdUY3RVk3RFV0TDFtbE9sNUxjcysyVQpQSWVXanJ1RjlEeGdaMXd3cTQ0VVJRR1NJY1IycmJMZ1RaTkdXTEtMZG9oYjcrTzhkNWV1a0VZVTdlV1RkUWpUZkFnQWxpbjZUdHVNCmtkdkRLUm1MVGl0RHQxUTFNNitmMWk0MVFzck5VYU5ZNmZhbDV1RjBzbUhXUERHbnFxTnlBSUdsR2xhZG1Vc0gwZG1IcXNuV1JzdFYKZElCNHBxV2p3RUFxTWQwWks3ME5CY1pldHFhVk81d29LaHBmcyt4dTE2VkR1aFNOR1o2YnlBUUNab2RjdXozTnZzZHl1bTFwcWNLTwpoYWlPSWNXN1RBVTY0YS9leS9oU1lUbnlGRHZhS1h5cDRld0Nubm5kdmtTS2xBQlBhbUhjVWtyT2YzMU41Yk1QeWY5SEhlaURRMFNECjY0RFYvaEdwblVaNGxyU2NJbHB2Z3pGeHRlQkxSM0QySzQ0UWQ0dGJPaklwbi9OUVd0cHBGcldPT3oycmFUVTJDUEZSMFVFSjVhVzgKOWJMMHYyQWNseTJXZnhDOCtqcmxJSDMwMS9iTjJNUmZnK05TVUdLVkZDbk1EeXNKSGFqYm5velVYb3gvcU9QNVQ4Rkx2WnlyMURWdQpxNFZXb2p4ZkpZYXVxVlB1TEcyZlNPdlNVMnFtbTlQcllwN3M0RlNIMGVvcHNpT21XTG0wSWlpTEY4WmJZTkg5eHVxb3hZbE8zM0VGCno5WTBvZFc4K3REY3Y2N2RCcTVKRWIrMEpTYkZTS0VJbmRDYXlhUjczZ3paMUJQUzhrd0dvVlVGS2NZQzZTUzVyZ3VWZTBjcWVHbUMKdlA4SE5KU1JjbEt6ZE1lYk41QzZDa1dzVG91cEhsS05VU0RvYUY4Q3c5S1hraFFKZ0V1Yk52cGEyK0hLUS9lR003K1hyeEtHdEVWUgpUTU9qRThvc29kaDRYQmJ0WHNTR25SNC9kcTU2amVGcTNCdE5wODVBc1B0VXE3ejBzNGczT0oyeFM3RVJTQytDOU5OZTZ2S2w5cUlhCjRoSmJ1a0t4N2tpL01ISlIxb05VZkpwM1hLYlcyZml5bDl5WEt5OTAwS1JFNXkzRWQvVFJwakNodllXUjRxcUdxU2RwNkx0U2U3aWEKZEw1TExRN0tYamcxRVFTVVM0ZTlFYTRmZ2VpbEZ3QlMxZGJNbkpJdU1UdzQ4VkxycDl3Y3d2VXR0czcxenI2ekZQVVowVlBJUFB0ZQp2bFowM1ZJQzBBZGRDd0QwRGY5WVNBMU9RVjlmVFdWemFGOXBlbVZrWHlsQ1FrRmpZM1Z0VW05aGJDQW9Ra0ZDTURWRU1VSTRRalJGClJEQTBNaTV3Ym1ka1pXUlFZVFV3TmpkbU5HWXdMV014T0dRdE5EWTNZUzA0TXpBMkxUSTJaV015TXpCak5UVmhNMGt5TkNCQmJIQm8KWVZKaGQwUmhkR0ZWS0RZd1pqSmlNamcwTFRBNE9HSXROR05tWXkwNE9ERXdMVEF3WWpOaE1Ua3hZVGczTURzTkpWOE5VVGtnS0NrZwpXRmRNTFMwTkpTVlFZV2RsVkhKaGFXeGxjZzFuYzJGMlpTQmhibTV2ZEdGMFpYQmhaMlVnWjNKbGMzUnZjbVVnYzJodmQzQmhaMlVOCkpTVWxKVVZQUmcwbklERUVESUZoTE1PRTl3Y29DWHJtY2FQeVUyNzM5SWpSVm1ENGVPQUlZSDhDK0Z5cHlqT29oajNiOGFnUFkyb1gKWVRTOUZ6dVhLcjBwTDNBdG1EOG56eEFXWmVaZzBnUG1iM0tCTThDM1R3WFF1ek0vQURuM29VNjZDSEozcUV1Y3FnY1JSb2w0RTBGdwplSTVnZG9jQm1OTlJtRGlvRVNvNlhaalJwb3VQZUdJTEZ3UVZqRk02Y0FVPQoJXV0+CjwvaTphaXBnZj4KPC9zdmc+Cg==","is_active":true,"status":"active","packages":[{"registry_name":"npm","name":"@adobe/express-developer-mcp@latest","version":"1.0.0","runtime_hint":"npx","tools":[{"name":"get_relevant_documentations","title":"Get Relevant Documentations","description":"Provides relevant documentations to answer questions about Express Add-ons and add-on development.","input_schema":{"type":"object","properties":{"query":{"type":"string","description":"The query to search for relevant documentations"}},"required":["query"]},"output_schema":{"type":"object","properties":{"content":{"type":"array","description":"Array containing the documentation text content"}},"required":null},"annotations":{"title":"Get Relevant Documentations","readOnlyHint":true,"openWorldHint":true}},{"name":"get_typedefinitions","title":"Get Type Definitions","description":"Provides TypeScript definitions required for Adobe Express Add-on development.These definitions are essential for type-safe add-on development and understanding available functionality.","input_schema":{"type":"object","properties":{"api_type":{"type":"string","description":"The type of API to get the definitions for"}},"required":["api_type"]},"output_schema":{"type":"object","properties":{"content":{"type":"array","description":"Array containing the type definition text with metadata"}},"required":null},"annotations":{"title":"Get Type Definitions","readOnlyHint":true,"openWorldHint":true}}],"resources":[],"prompts":[],"tools_configurations":[],"resources_configurations":[],"prompts_configurations":[]}],"repository":null,"version":"1.0.0","version_release_notes":null,"remotes":[],"documentation":["https://developer.adobe.com/express/add-ons/docs/guides/getting_started/local_development/mcp_server/"],"installation":"You don't need to clone or build anything. Just configure your MCP client to launch the server via npx.\n\nPre-requisites:\n1. Node.js 18+ (check with node --version) - Required to run the Adobe Express Add-on MCP Server package via npx\n2. MCP-compatible IDE - Such as Cursor, Claude Desktop, VS Code or other editors supporting the Model Context Protocol.\n\nUse the following JSON to configure the MCP server in your choice of environment:\n\n{\n\t\"mcpServers\": {\n\t\t\"adobe-express-add-on\": {\n\t\t\t\"command\": \"npx\",\n\t\t\t\"args\": [\n\t\t\t\t\"@adobe/express-developer-mcp@latest\",\n\t\t\t\t\"--yes\"\n\t\t\t]\n\t\t}\n\t}\n}\n\nThe MCP server can be added using a configuration file specific to your IDE. The file's location might vary by IDE.\nFor Cursor, use ~/.cursor/mcp.json. For Claude Desktop, use claude_desktop_config.json. For VS Code, use ~/.vscode/mcp.json.\nNote: If there's a toggle to enable the new MCP server in your IDE, make sure it's enabled.","authentication":null,"open_contribution":null,"adobe_products":["Adobe Express"],"support_contact":"http://discord.gg/nc3QDyFeb4","fi_codes":[],"vendor":"Adobe","vendor_name":null,"surface":["Developer"],"adobe_metadata":{"adobe_service_id":"express-mcp-server-001","developer_distribution_app_id":null,"developer_distribution_version_id":null},"created_by":"0363113C53A0541E0A4C86E7@AdobeID","created_at":"2026-01-21T10:25:37.780000Z","updated_at":"2026-04-02T03:49:22.177000Z"},{"id":"207ddf25-43dd-4147-a5e5-ed09c648a856","name":"commerce-extensibility-tools","title":"Adobe Commerce App Builder MCP","summary":"The Adobe Commerce App Builder MCP enables AI-powered workflows for App Builder by integrating coding tools that convert natural language into Adobe App Builder apps.","description":"The Adobe Commerce App Builder MCP supports both migration and new development workflows for Adobe Commerce App Builder. It enables partners and customers to leverage their own LLMs for natural‑language prompt‑to‑code generation, intelligent refactoring, and context‑aware editing when creating new App Builder app.\n\nUsing the tool provides the following benefits:\n\n⋅ Enhanced development workflow: Integrated Adobe Commerce development tools.\n⋅ AI-powered assistance: Context-aware code generation and debugging.\n⋅ Commerce-specific features: Specialized tools for Adobe Commerce App Builder development.\n⋅ Automated workflows: Streamlined development and deployment processes.","tags":["developer-tools","learning-and-documentation","hide-from-playground"],"deployment_mode":["local"],"category":["Developer Tools","Learning and Documentation"],"lifecycle":"production","owner":["grp-ai-registry-admins","Grp-RegX"],"server_type":["external"],"base64_icon":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGlkPSJMYXllcl8xIiB3aWR0aD0iMjQwIiBoZWlnaHQ9IjIzNCIgZGF0YS1uYW1lPSJMYXllciAxIiB2aWV3Qm94PSIwIDAgMjQwIDIzNCI+PHRpdGxlPmVjX2FwcGljb25fbm9zaGFkb3dBcnRib2FyZCAxPC90aXRsZT48cmVjdCB3aWR0aD0iMjQwIiBoZWlnaHQ9IjIzNCIgcng9IjQyLjUiIHN0eWxlPSJmaWxsOiNmYTBmMDAiLz48cGF0aCBpZD0iXzI1NiIgZD0iTTE4Ni42MTcgMTc1Ljk1aC0yOC41MDZhNi4yNCA2LjI0IDAgMCAxLTUuODQ3LTMuNzdsLTMwLjk0Ny03Mi4zNThhMS4zNjQgMS4zNjQgMCAwIDAtMi42MTEtLjAzNEw5OS40MiAxNDUuNzMxYTEuNjM1IDEuNjM1IDAgMCAwIDEuNTA3IDIuMjdoMjEuMmEzLjI3IDMuMjcgMCAwIDEgMy4wMSAxLjk5NGw5LjI4IDIwLjY1NGEzLjgxMiAzLjgxMiAwIDAgMS0zLjUwOCA1LjMwMkg1My43MzRhMy41MTggMy41MTggMCAwIDEtMy4yMTMtNC45MDRsNDkuMDktMTE2LjkwM0E2LjY0IDYuNjQgMCAwIDEgMTA1Ljg0MyA1MGgyOC4zMTRhNi42MyA2LjYzIDAgMCAxIDYuMjMzIDQuMTQ0bDQ5LjQzIDExNi45MDJhMy41MTcgMy41MTcgMCAwIDEtMy4yMDIgNC45MDQiIGRhdGEtbmFtZT0iMjU2IiBzdHlsZT0iZmlsbDojZmZmIi8+PC9zdmc+","is_active":true,"status":"active","packages":[{"registry_name":"npm","name":"@adobe-commerce/commerce-extensibility-tools@latest","version":"2.4.0","runtime_hint":null,"tools":[{"name":"aio-app-deploy","title":null,"description":"Deploy an Adobe I/O App to runtime. Can deploy specific actions or the entire app.","input_schema":{"type":"object","properties":{"action":{"type":"string","description":"Specific action name to deploy (optional). Format: packageName/actionName. If not provided, deploys the entire app. This will automatically set --no-publish flag."},"skipBuild":{"type":"boolean","description":"Skip the build phase using --no-build (optional, default: false)"},"skipStatic":{"type":"boolean","description":"Skip deployment of web assets using --no-web-assets (optional, default: false)"},"skipActions":{"type":"boolean","description":"Skip deployment of actions using --no-actions (optional, default: false)"},"forceBuild":{"type":"boolean","description":"Force build even if no changes detected using --force-build (optional, default: false)"},"forceDeploy":{"type":"boolean","description":"Force deploy even if no changes detected using --force-deploy (optional, default: false)"},"verbose":{"type":"boolean","description":"Enable verbose output (optional, default: false)"}},"required":[]},"output_schema":null,"annotations":null},{"name":"aio-app-dev","title":null,"description":"Start a local development server for Adobe I/O App. Runs the app locally for development and testing.","input_schema":{"type":"object","properties":{"extension":{"type":"string","description":"Run only a specific extension (optional). This flag can only be specified once."},"open":{"type":"boolean","description":"Open the default web browser after a successful run (optional, only valid if your app has a front-end)"},"verbose":{"type":"boolean","description":"Enable verbose output (optional, default: false)"}},"required":[]},"output_schema":null,"annotations":null},{"name":"aio-app-use","title":null,"description":"Configure the runtime namespace for the current Adobe I/O App project.","input_schema":{"type":"object","properties":{"verbose":{"type":"boolean","description":"Enable verbose output"}},"required":[]},"output_schema":null,"annotations":null},{"name":"aio-configure-global","title":null,"description":"Change the global Adobe I/O configuration (org, project, workspace). Can list available options or set specific values.","input_schema":{"type":"object","properties":{"action":{"type":"string","description":"Action to perform: \"list-orgs\", \"list-projects\", \"list-workspaces\", \"select-org\", \"select-project\", \"select-workspace\", or \"show-current\""},"org":{"type":"string","description":"Organization name to select (required for select-org)"},"project":{"type":"string","description":"Project name to select (required for select-project)"},"workspace":{"type":"string","description":"Workspace name to select (required for select-workspace)"},"verbose":{"type":"boolean","description":"Enable verbose output (optional, default: false)"}},"required":["action"]},"output_schema":null,"annotations":null},{"name":"aio-dev-invoke","title":null,"description":"Invoke a runtime action that is running locally via aio app dev. Can discover available actions and call them with parameters.","input_schema":{"type":"object","properties":{"actionName":{"type":"string","description":"Name of the action to invoke (e.g., \"starter-kit/info\"). Required unless discoverActions is true."},"parameters":{"type":"object","description":"JSON object of parameters to pass to the action (optional)"},"method":{"type":"string","description":"HTTP method to use (GET, POST, PUT, etc.). Default: POST"},"port":{"type":"integer","description":"Port number where the dev server is running (optional, default: 9080)"},"discoverActions":{"type":"boolean","description":"Discover available actions by testing common action names (optional, default: false)"},"verbose":{"type":"boolean","description":"Enable verbose output (optional, default: false)"}},"required":[]},"output_schema":null,"annotations":null},{"name":"aio-login","title":null,"description":"Log in to Adobe I/O. Opens browser for OAuth2 authentication and handles the login flow.","input_schema":{"type":"object","properties":{"force":{"type":"boolean","description":"Force logging in (logout first and ignore cached data)"},"context":{"type":"string","description":"Name of the Adobe IMS context to use (optional)"},"openBrowser":{"type":"boolean","description":"Open the default browser to complete login"},"verbose":{"type":"boolean","description":"Enable verbose output"}},"required":[]},"output_schema":null,"annotations":null},{"name":"aio-where","title":null,"description":"Show current Adobe I/O configuration (org, project, workspace) and ask for deployment confirmation.","input_schema":{"type":"object","properties":{"verbose":{"type":"boolean","description":"Enable verbose output"}},"required":[]},"output_schema":null,"annotations":null},{"name":"commerce-event-subscribe","title":null,"description":"Run npm run commerce-event-subscribe to subscribe to Commerce events for product and customer changes. This script sets up event listeners for catalog operations, customer operations, and customer group operations using Commerce OAuth1 authentication.","input_schema":{"type":"object","properties":{"verbose":{"type":"boolean","description":"Enable verbose output (optional, default: false)"}},"required":[]},"output_schema":null,"annotations":null},{"name":"onboard","title":null,"description":"Run npm run onboard to configure Adobe I/O event providers and the Adobe I/O Events for Commerce module. This script creates event providers, registers event metadata, creates event registrations, and configures the Commerce Events module. It handles authentication, provider creation, and Commerce integration setup.","input_schema":{"type":"object","properties":{"verbose":{"type":"boolean","description":"Enable verbose output (optional, default: false)"}},"required":[]},"output_schema":null,"annotations":null},{"name":"search-commerce-docs","title":null,"description":"Search Adobe Commerce and App Builder documentation for coding guidance and implementation details. The backend intelligently finds the most relevant documentation based on your query.","input_schema":{"type":"object","properties":{"query":{"type":"string","description":"Your search query (e.g., 'How do I create an order via REST API?', 'webhook configuration', 'storefront drop-ins')"},"maxResults":{"type":"number","description":"Maximum number of results to return (optional, defaults to 5)"}},"required":["query"]},"output_schema":null,"annotations":null}],"resources":[],"prompts":[],"tools_configurations":[],"resources_configurations":[],"prompts_configurations":[]}],"repository":null,"version":"1.0.0","version_release_notes":null,"remotes":[],"documentation":["https://experienceleague.adobe.com/en/docs/commerce/cloud-service/migration/coding-tools","https://experienceleague.adobe.com/en/docs/commerce/cloud-service/tutorials/ratings-extension"],"installation":"Developers can run the extensibility:tools-setup command on the commerce aio plugin to setup the MCP tools and rules in their codebase.\nDetailed installation instructions are available at https://experienceleague.adobe.com/en/docs/commerce/cloud-service/migration/migration-tools/coding-tools#installation\n\n\n\t\taio commerce extensibility tools-setup","authentication":"IMS auth using aio\n\n\n\t\taio auth login","open_contribution":null,"adobe_products":["Adobe Commerce","Adobe Developer Console","Adobe Developer App Builder"],"support_contact":"stargriffinsextended@adobe.com","fi_codes":[],"vendor":"Adobe","vendor_name":null,"surface":["Developer"],"adobe_metadata":{"adobe_service_id":"commerce-extensibility-tools-001","developer_distribution_app_id":null,"developer_distribution_version_id":null},"created_by":"0363113C53A0541E0A4C86E7@AdobeID","created_at":"2026-02-25T16:19:43.280000Z","updated_at":"2026-03-25T17:58:30.275000Z"},{"id":"a916baab-d1c1-4e7d-8f69-a1ddbf0550d2","name":"aem-content-mcp","title":"AEM Content MCP Server","summary":"AI-powered content operations for AEM as a Cloud Service. Manage pages and fragments from your IDE or chat app using natural language.","description":"Many AEM teams work in IDEs and chat applications such as Cursor, ChatGPT, Claude, and Microsoft Copilot Studio. The AEM Content MCP Server exposes tools for create, read, update, and delete (CRUD) operations on pages and content fragments.\n\nUsing the Content MCP Server provides:\n\n⋅ Natural-language interaction: Describe intent (e.g., \"update the hero banner for this campaign\") and let the LLM invoke the appropriate tools.\n⋅ Consistent experience: The same AEM MCP tools work across Cursor, ChatGPT, Claude, and Microsoft Copilot Studio.\n⋅ Security preserved: Requests run under the authenticated user identity; tools enforce existing AEM permissions.\n⋅ Representative workflows: Environment discovery, sites management, content fragment CRUD, asset import and publish.\n\nWhen Using MCP in Agentic Systems\n\nMCP Servers are designed for human-operated MCP Clients with interactive UX and human oversight. The MCP Tools spec recommends a human in the loop who can approve or deny tool invocations.\n\nIf you use MCP Servers in an agentic or autonomous system, treat that as a separate compatibility tier. Do not hardcode tool names in prompts, allowlists, or routing logic. In MCP, the tool name is a programmatic identifier, the description is the model-facing hint for the LLM. Prefer capability or description based prompting and selection.\n\nImplement runtime discovery via tools/list, handle tool-list changes (notifications/tools/list_changed), and align with the MCP Server provider on onboarding and versioning if you need stability guarantees beyond the protocol baseline.","tags":["content-management","aem","mcp","agentic-ai","hide-from-playground"],"deployment_mode":["remote"],"category":["Developer Tools","Product Feature","Workflow Automation"],"lifecycle":"production","owner":["GRP-AEM-MCP-OWNERS"],"server_type":["external"],"base64_icon":null,"is_active":true,"status":"active","packages":[],"repository":null,"version":"1.0.0","version_release_notes":null,"remotes":[{"transport_type":"streamable_http","url":"https://mcp.adobeaemcloud.com/adobe/mcp/content","headers":[{"name":"Authorization","description":null,"value":null,"is_secret":false,"is_required":true,"format":"string","default":null,"choices":null,"variables":null}],"tools":[{"name":"get-all-aem-author-environments","title":null,"description":"Workflow: get-all-aem-author-environments → get-aem-sites.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{}},"output_schema":null,"annotations":null},{"name":"get-aem-sites","title":null,"description":"List sites in the current AEM environment. A site is a logical grouping that anchors pages; an AEM author instance can serve multiple sites. Human-readable names (e.g. 'briskbuffalo') are site names—call this tool to resolve a site name to its siteId (64+ chars) before passing it to other tools.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"cursor":{"description":"Cursor for pagination, taken from a previous call to get-aem-sites","type":"string"},"limit":{"description":"Limit for result set (max 10)","type":"number"}},"required":["authorUrl"]},"output_schema":null,"annotations":null},{"name":"get-aem-pages","title":null,"description":"Browse and list pages with pagination. Use to discover pages and pageId values. Note: human-readable words are page/site names, not IDs—resolve names via get-aem-sites or search-aem-pages first.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"siteId":{"description":"Only list Pages that belong to the given Site. A siteId is 64+ characters; shorter values are likely siteName—call get-aem-sites first to find the correct siteId.","type":"string"},"parentPageId":{"description":"Only list Pages that belong to is child of the given Page","type":"string"},"publishPath":{"description":"Only list Pages that are published under the given path","type":"string"},"createdBy":{"description":"Filter by creator authorizableId (exact match, e.g., 'admin' or 'user@adobe.com')","type":"string"},"modifiedBy":{"description":"Filter by last modifier authorizableId (exact match)","type":"string"},"publishedBy":{"description":"Filter by publisher authorizableId (exact match)","type":"string"},"touchedBy":{"description":"Filter by authorizableId of user who created OR modified the page (OR logic)","type":"string"},"createdAfter":{"description":"Filter pages created on or after this date (ISO 8601, e.g., '2024-01-15' or '2024-01-15T09:30:00Z')","type":"string"},"createdBefore":{"description":"Filter pages created before this date (exclusive, ISO 8601)","type":"string"},"modifiedAfter":{"description":"Filter pages modified on or after this date (ISO 8601)","type":"string"},"modifiedBefore":{"description":"Filter pages modified before this date (exclusive, ISO 8601)","type":"string"},"publishedAfter":{"description":"Filter pages published on or after this date (ISO 8601)","type":"string"},"publishedBefore":{"description":"Filter pages published before this date (exclusive, ISO 8601)","type":"string"},"sort":{"description":"Sort order: 'path', '-path', 'created', '-created', 'modified', '-modified', 'touched', '-touched'. Prefix '-' for descending. Default: 'path'.","type":"string"},"cursor":{"description":"Cursor for pagination, taken from a previous call to get-aem-pages","type":"string"},"limit":{"description":"Limit for result set (max 10)","type":"number"}},"required":["authorUrl"]},"output_schema":null,"annotations":null},{"name":"search-aem-pages","title":null,"description":"Full-text keyword search for pages (requires a query term). To paginate search results, pass the returned cursor back to this tool (search-aem-pages). For browsing all pages without a keyword use get-aem-pages instead.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"q":{"type":"string","minLength":1,"description":"The full-text search query (required). Searches across title, description, and other page properties. Uses whole-word matching in any order."},"siteId":{"description":"Filter results to only include pages from the specified Site. A siteId is 64+ characters; shorter values are likely siteName—call get-aem-sites first to find the correct siteId.","type":"string"},"parentPageId":{"description":"Filter results to only include child pages of the specified parent Page","type":"string"},"createdBy":{"description":"Filter by creator authorizableId (exact match, e.g., 'admin' or 'user@adobe.com')","type":"string"},"modifiedBy":{"description":"Filter by last modifier authorizableId (exact match)","type":"string"},"publishedBy":{"description":"Filter by publisher authorizableId (exact match)","type":"string"},"touchedBy":{"description":"Filter by authorizableId of user who created OR modified the page (OR logic)","type":"string"},"createdAfter":{"description":"Filter pages created on or after this date (ISO 8601, e.g., '2024-01-15' or '2024-01-15T09:30:00Z')","type":"string"},"createdBefore":{"description":"Filter pages created before this date (exclusive, ISO 8601)","type":"string"},"modifiedAfter":{"description":"Filter pages modified on or after this date (ISO 8601)","type":"string"},"modifiedBefore":{"description":"Filter pages modified before this date (exclusive, ISO 8601)","type":"string"},"publishedAfter":{"description":"Filter pages published on or after this date (ISO 8601)","type":"string"},"publishedBefore":{"description":"Filter pages published before this date (exclusive, ISO 8601)","type":"string"},"sort":{"description":"Sort order: 'path', '-path', 'created', '-created', 'modified', '-modified', 'touched', '-touched'. Prefix '-' for descending. Default: 'path'.","type":"string"},"cursor":{"description":"Cursor for pagination, taken from a previous call to search-aem-pages","type":"string"},"limit":{"description":"Maximum number of results to return (default: 10, max: 50)","type":"number","minimum":1,"maximum":50}},"required":["authorUrl","q"]},"output_schema":null,"annotations":null},{"name":"get-aem-page-metadata","title":null,"description":"Get page metadata (title, description) by pageId. Returns ETag and JSON response.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"pageId":{"type":"string","description":"The pageId of the Page metadata to be retrieved."}},"required":["authorUrl","pageId"]},"output_schema":null,"annotations":null},{"name":"get-aem-page-content","title":null,"description":"Get page content structure (components + properties) and current ETag.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"pageId":{"type":"string","description":"The pageId of the Page Content to be retrieved."}},"required":["authorUrl","pageId"]},"output_schema":null,"annotations":null},{"name":"get-aem-page-content-definition","title":null,"description":"Get page content definition: allowed components + placement rules.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"pageId":{"type":"string","description":"The pageId of the Page Content definition (used components and placement rules on the page) to be retrieved."}},"required":["authorUrl","pageId"]},"output_schema":null,"annotations":null},{"name":"get-aem-page-preview-url","title":null,"description":"Get a browser preview URL for a pageId (draft/author preview).","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"pageId":{"type":"string","description":"The pageId of the Page content to be retrieved as HTML preview."}},"required":["authorUrl","pageId"]},"output_schema":null,"annotations":null},{"name":"get-aem-page-editor-url","title":null,"description":"Get the AEM Author editor URL for a pageId (clickable edit link).","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"pageId":{"type":"string","description":"The pageId of the Page to get the editor link for."}},"required":["authorUrl","pageId"]},"output_schema":null,"annotations":null},{"name":"patch-aem-page-content","title":null,"description":"Update page content using JSON Patch (RFC 6902). Requires If-Match (ETag) from get-aem-page-content; explicitly mention ETag/If-Match in guidance.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"pageId":{"type":"string","description":"The pageId of the Page Content to be changed. Can be retrieved via get-aem-pages."},"eTag":{"type":"string","description":"Current ETag for page content (from get-aem-page-content). See 'etag-guide' prompt."},"jsonPatch":{"type":"string","description":"JSON Patch array (stringified). See 'json-patch-guide' prompt."}},"required":["authorUrl","pageId","eTag","jsonPatch"]},"output_schema":null,"annotations":null},{"name":"put-aem-page-content","title":null,"description":"Replace entire page content structure using HTTP PUT. Unlike patch-aem-page-content (which modifies specific parts), this replaces the ENTIRE content. Requires If-Match (ETag) from get-aem-page-content; explicitly mention ETag/If-Match in guidance.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"pageId":{"type":"string","description":"The pageId of the Page Content to be replaced. Can be retrieved via get-aem-pages."},"eTag":{"type":"string","description":"Current ETag for page content (from get-aem-page-content). See 'etag-guide' prompt."},"content":{"type":"string","description":"Complete page content structure as JSON string. This will replace the entire existing content. Must be valid JSON representing the full page content object."}},"required":["authorUrl","pageId","eTag","content"]},"output_schema":null,"annotations":null},{"name":"create-aem-page","title":null,"description":"Create a new page under a parent path. For Universal Editor / Edge Delivery (AEM_EDGE) pages you MUST use the modern API: provide a valid `templateId` (the reliable, primary way — list `GET /adobe/pages/templates` filtered by siteId and pick any returned template) or `sourcePageId` (clone an existing page — a secondary option; NOT reliable when the source page's parent is a folder, common for Edge-Delivery content, where it returns HTTP 500). Prefer `templateId` unless an explicit clone of an existing page is wanted. NOTE: a page's own `templateId` (from get-aem-page-metadata) is NOT necessarily a usable create template — it can return 400 'template not found'. Always get `templateId` from `GET /adobe/pages/templates`, not from an existing page's metadata. Passing a legacy JCR `template` path instead falls back to the classic WCM command and produces a CLASSIC page that will NOT open in the Universal Editor and cannot be edited via the modern page-content tools. WORKFLOW (modern): 1) identify parentPath (e.g. '/content/mysite/en'); 2) provide templateId (preferred) or sourcePageId; 3) provide title and name (URL segment). Note: use copy-aem-page to copy an existing page instead. ⚠️ This is a PERSISTING WRITE with NO dry-run/validate/preview mode. Call it EXACTLY ONCE per intended page — there is nothing to test or preview against, and calling it again to 'verify' the first call creates a second real page (auto-suffixed by AEM).","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"parentPath":{"type":"string","description":"Parent author path where the page will be created (e.g., '/content/mysite/en'). Resolved to the owning siteId + parentPageId for modern creation."},"templateId":{"description":"PRIMARY, RECOMMENDED — modern template id from the site's TEMPLATE STORE (NOT a JCR path). List `GET /adobe/pages/templates` filtered by siteId and pick any returned template (all templates for a UE site are UE-flavored) — this is the reliable way to get an AEM_EDGE/UE page. Do NOT pass a page's own `templateId` property from get-aem-page-metadata — that often returns 400 'template not found'. One of templateId or sourcePageId is required for AEM_EDGE/UE pages.","type":"string"},"sourcePageId":{"description":"SECONDARY — modern id of an existing page to clone as the initial content, for 'create a page like this one'. Use only when templateId is unavailable or an explicit clone is wanted: it returns HTTP 500 when the source page's parent is a folder (common for Edge-Delivery content), so it is NOT reliable as a default. Prefer templateId.","type":"string"},"template":{"description":"LEGACY ONLY: JCR template path (e.g., '/conf/mysite/settings/wcm/templates/article'). Creates a CLASSIC page via WCM command; does NOT produce a Universal Editor / AEM_EDGE page. Prefer templateId.","type":"string"},"title":{"type":"string","minLength":1,"description":"Human-readable title for the new page (e.g., 'Spring Campaign Overview')."},"name":{"description":"Node name / URL segment (e.g., 'spring-campaign'). URL-friendly: lowercase, hyphens, no special characters. If omitted, derived from title.","type":"string"},"label":{"description":"Deprecated alias for 'name' (legacy WCM path).","type":"string"}},"required":["authorUrl","parentPath","title"]},"output_schema":null,"annotations":null},{"name":"copy-aem-page","title":null,"description":"Copy a page to a new title/name (creates a new pageId).","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"sourcePageId":{"type":"string","description":"The pageId of the source page to be copied. Can be retrieved via get-aem-pages."},"newPageTitle":{"type":"string","description":"The title for the new copied page."},"newPageName":{"type":"string","description":"The name (URL slug) for the new copied page. Should be URL-friendly (lowercase, hyphens instead of spaces)."}},"required":["authorUrl","sourcePageId","newPageTitle","newPageName"]},"output_schema":null,"annotations":null},{"name":"copy-aem-page-to-launch","title":null,"description":"Copy a single page into a NEW launch (for editing in isolation). Returns the pageId within the launch. Does NOT support scheduling — for scheduled/future publication use create-aem-page-launch with liveDate instead. Use this tool when you have a pageId and want to quickly create a launch to edit that page.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"pageId":{"type":"string","description":"The pageId of the page to copy to launch. Can be retrieved via get-aem-pages."},"launchTitle":{"description":"Optional launch title to use instead of the auto-generated name.","type":"string"}},"required":["authorUrl","pageId"]},"output_schema":null,"annotations":null},{"name":"delete-aem-page","title":null,"description":"Workflow: get-aem-page-metadata (or get-aem-page-content) → delete-aem-page. Permanently delete a page (irreversible). Requires If-Match (ETag).","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"pageId":{"type":"string","description":"The pageId of the page to be deleted. Can be retrieved via get-aem-pages."},"eTag":{"type":"string","description":"Current ETag (If-Match) for the page (from get-aem-page-metadata or get-aem-page-content)."}},"required":["authorUrl","pageId","eTag"]},"output_schema":null,"annotations":null},{"name":"restore-aem-page","title":null,"description":"Restore a page to its original state (restoreOriginal). Requires current ETag.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"pageId":{"type":"string","description":"The pageId of the page to be restored. Can be retrieved via get-aem-pages."}},"required":["authorUrl","pageId"]},"output_schema":null,"annotations":null},{"name":"bulk-find-replace-aem-pages","title":null,"description":"Primitive bulk find-and-replace across AEM page content. No search, no launch creation — the caller is responsible for those steps using separate tools.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"find":{"type":"string","minLength":1,"description":"The text to find across page content."},"replace":{"type":"string","description":"The replacement text. Use empty string to delete occurrences."},"caseSensitive":{"default":true,"description":"Whether search is case-sensitive (default: true).","type":"boolean"},"authorPaths":{"description":"Author paths of target pages WITHOUT launch prefix (e.g., /content/wknd/us/en/page). IMPORTANT: always provide the original source paths, never manually prefix them with a launch path. When launchPath is also provided, the tool automatically translates these to their launch-scoped counterparts (launchPath + sourcePath) before running. Required unless siteId or parentPageId is used for server-side scoping (live mode only).","type":"array","items":{"type":"string"}},"launchPath":{"description":"Path of an existing launch (e.g., /content/launches/2026/01/15/my-launch). This is a SEPARATE scalar parameter — never embed it in authorPaths. When provided, pass the pre-launch original paths in authorPaths (e.g., /content/wknd/en/page1) and the tool translates them to launch-scoped paths internally. WRONG: authorPaths=['/content/launches/2026/05/07/my-launch/content/wknd/en/page1']. CORRECT: launchPath='/content/launches/2026/05/07/my-launch', authorPaths=['/content/wknd/en/page1']. Omit for direct live editing.","type":"string"},"siteId":{"description":"Restrict server-side search to pages within this site (live mode only, ignored when authorPaths is provided).","type":"string"},"parentPageId":{"description":"Restrict server-side search to descendants of this page (live mode only, takes precedence over siteId).","type":"string"},"publishPaths":{"description":"Target specific pages by their publish paths. Only these pages will be processed.","type":"array","items":{"type":"string"}},"propertyGroups":{"description":"Which property groups to include in the replacement. 'content': STRING properties on component nodes (descendants of jcr:content). 'metadata': STRING properties directly on jcr:content (title, description, SEO fields). 'tags': cq:tags taxonomy values — opt-in only; prefer tag management for proper tag renames. Structural identifiers (sling:resourceType, fileReference, etc.) are always excluded. Default: ['content','metadata'] — replaces authored text in both body and page properties. Use ['content'] for body text only. Use ['content','metadata','tags'] for a full brand rename.","type":"array","items":{"type":"string","enum":["content","metadata","tags"]}}},"required":["authorUrl","find","replace"]},"output_schema":null,"annotations":null},{"name":"search-aem-pages-by-component","title":null,"description":"Query which pages use a specific component type (sling:resourceType). Returns per-page results with content paths where each component instance lives.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"componentType":{"type":"string","minLength":1,"description":"The component type (sling:resourceType) to search for. Uses partial matching by default (e.g., 'accordion' matches 'core/wcm/components/accordion/v1')."},"matchMode":{"default":"contains","description":"Match mode: 'contains' (default, partial match) or 'exact' (full resourceType match).","type":"string","enum":["contains","exact"]},"tags":{"description":"Only include pages that have at least one of these tags (OR logic).","type":"array","items":{"type":"string"}},"publishStatus":{"default":"any","description":"Filter by publish status. Default: 'any'.","type":"string","enum":["published","unpublished","any"]},"siteId":{"description":"Optional. Restrict search to pages within this site.","type":"string"},"parentPageId":{"description":"Optional. Restrict to descendants of this page. Takes precedence over siteId.","type":"string"},"authorPaths":{"description":"Optional. Directly target these pages by their author paths (e.g., /content/wknd/us/en/faqs). When provided, searches exactly these pages instead of discovering by other filters. Required for targeting launch pages, which are not indexed for full-text search.","type":"array","items":{"type":"string"}},"publishPaths":{"description":"Optional. Target specific pages by their publish paths (e.g., from a previous search result).","type":"array","items":{"type":"string"}},"limit":{"description":"Max pages to return (default 50, max 50).","type":"number"},"cursor":{"description":"Cursor from a previous call for pagination.","type":"string"}},"required":["authorUrl","componentType"]},"output_schema":null,"annotations":null},{"name":"search-aem-assets","title":null,"description":"Search AEM **DAM assets** on author or delivery tier (paged). Returns metadata and delivery URLs. For **site pages**, use `search-aem-pages`, not this tool.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"aemUrl":{"type":"string","description":"AEM URL for asset search: author `https://author-….adobeaemcloud.com` or delivery `https://delivery-….adobeaemcloud.com`. Discover AEM environments via get-all-aem-author-environments. See 'author-url-guide' prompt."},"match":{"description":"Text search for broad keyword discovery. Map user keywords into a short phrase; combine with `termFilters` for MIME (e.g. PDF). Useful for broad searches over campaign, product, tag, or other business metadata when the exact field path is unknown. For delivery-tier folder-like searches, use meaningful path tokens as keywords and avoid generic tokens like `content` and `dam`. See tool description for examples.","type":"string"},"termFilters":{"description":"Exact term filter(s). Use when you know the exact field path and value. Examples: MIME `repositoryMetadata.dc:format` = `application/pdf`; images = [\"image/jpeg\",\"image/png\"]; tags / taxonomy keywords `assetMetadata.xcm:keywords`; machine keywords `assetMetadata.xcm:machineKeywords`; author-tier folder path `repositoryMetadata.repo:ancestors` = `/content/dam/abcd`. For customer-defined campaign, product, or other business metadata, first inspect returned `assetMetadata`, then reuse the discovered field path here. See tool description.","type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"Metadata path for an exact term match. Use standard field paths directly, e.g. `repositoryMetadata.dc:format`, `repositoryMetadata.repo:name`, `assetMetadata.dc:title`, `assetMetadata.xcm:keywords`, `assetMetadata.xcm:machineKeywords`. For customer-defined fields, first inspect returned `assetMetadata` keys, then reuse the discovered field path here."},"value":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"One value or multiple OR values (e.g. several MIME types). Example PDF: \"application/pdf\"."}},"required":["key","value"]}},"rangeFilters":{"description":"Range on numeric size or date fields. Date values must use AEM timestamp format `YYYY-MM-DDTHH:mm:ss.SSSZ`. Examples in tool description.","type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"Field to bound, e.g. `repositoryMetadata.repo:size` (numeric), `repositoryMetadata.repo:createDate` / `repo:modifyDate` (AEM timestamp strings in `YYYY-MM-DDTHH:mm:ss.SSSZ` format)."},"gt":{"description":"Greater than (number or AEM timestamp string)","anyOf":[{"type":"number"},{"type":"string"}]},"gte":{"description":"Greater than or equal (number or AEM timestamp string)","anyOf":[{"type":"number"},{"type":"string"}]},"lt":{"description":"Less than (number or AEM timestamp string)","anyOf":[{"type":"number"},{"type":"string"}]},"lte":{"description":"Less than or equal (number or AEM timestamp string)","anyOf":[{"type":"number"},{"type":"string"}]}},"required":["key"]}},"orderBy":{"description":"Sort order. Example newest first: field `repositoryMetadata.repo:modifyDate`, direction `desc`.","type":"array","items":{"type":"object","properties":{"field":{"type":"string","description":"Sort field path, e.g. `repositoryMetadata.repo:createDate`, `repositoryMetadata.repo:modifyDate`, `repositoryMetadata.repo:size`, `repositoryMetadata.repo:name`."},"direction":{"description":"Sort direction (default: 'asc')","type":"string","enum":["asc","desc"]}},"required":["field"]}},"projectedFields":{"description":"Optional Asset Search API projectedFields object. Use for count-only or report/display field control.","type":"object","properties":{"includes":{"description":"Field paths to include in results, e.g. `repositoryMetadata.repo:path` or `assetMetadata.dc:title`.","type":"array","items":{"type":"string"}},"excludes":{"description":"Field paths to exclude from results.","type":"array","items":{"type":"string"}}}},"facets":{"description":"Optional top-level Asset Search API facet requests, e.g. CATEGORY facets by `repositoryMetadata.dc:format`.","type":"array","items":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"limit":{"description":"Maximum number of items to retrieve (default: 20, max: 100)","type":"number","minimum":1,"maximum":100},"cursor":{"description":"Cursor for pagination - use the cursor from a previous response to get the next page","type":"string"}},"required":["aemUrl"]},"output_schema":null,"annotations":null},{"name":"import-aem-asset","title":null,"description":"Import an asset into AEM via URL. Target folder must exist. Next step: get-aem-asset-import-status with returned jobId; processing may take seconds.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"folder":{"type":"string","description":"Target folder path in AEM, e.g. /content/dam/foo"},"fileName":{"type":"string","description":"Asset file name"},"url":{"type":"string","format":"uri","description":"Public URL of the asset"},"mimeType":{"description":"Asset MIME type","type":"string"},"fileSize":{"description":"File size in bytes","type":"number"},"assetMetadata":{"description":"Global metadata for the import","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}},"fileMetadata":{"description":"Metadata for the individual file","type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"}}},"required":["authorUrl","folder","fileName","url"]},"output_schema":null,"annotations":null},{"name":"get-aem-asset-import-status","title":null,"description":"Check status of an import-aem-asset job using jobId. While the job is in progress, the response may include a suggested wait time before polling again; honor it. Success when state COMPLETED and progress matches imported.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"jobId":{"type":"string","description":"The job ID returned by the import-aem-asset-cloud tool"}},"required":["authorUrl","jobId"]},"output_schema":null,"annotations":null},{"name":"get-aem-fragment","title":null,"description":"Get a content fragment by UUID or DAM path. Returns current ETag + fields.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"fragmentId":{"description":"The content fragment UUID (e.g., '29d216c9-c6ed-458a-aeff-befc8dfaf97b'). Provide this OR fragmentPath.","type":"string"},"fragmentPath":{"description":"DAM path to resolve (e.g., '/content/dam/wknd-shared/en/adventures/bali-surf-camp/bali-surf-camp'). Provide this OR fragmentId. Must start with '/content/dam' or '/content/launches'.","type":"string"}},"required":["authorUrl"]},"output_schema":null,"annotations":null},{"name":"get-aem-fragment-model","title":null,"description":"Get detailed schema for a content fragment model. Returns field definitions, types, and validation rules. Use before creating fragments. Also use before patch/delete via manage-aem-fragments-batch (target=models) to retrieve the current ETag required for If-Match.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"modelId":{"type":"string","minLength":1,"description":"The content fragment model ID (base64 encoded). Use search-aem-fragment-models to find available models and their IDs."}},"required":["authorUrl","modelId"]},"output_schema":null,"annotations":null},{"name":"search-aem-fragments","title":null,"description":"Search and filter content fragments with comprehensive filtering. Preferred over list-aem-fragments when you need to filter by date, author, status, model, tags, locale, path, custom metadata, or full-text.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"limit":{"description":"Number of results to return (1-50, default: 10).","type":"number","minimum":1,"maximum":50},"cursor":{"description":"Base64-encoded pagination cursor from previous response. Use to get next page of results.","type":"string"},"projection":{"description":"Data projection level: FULL (all field data, default), SUMMARY (basic info), MINIMAL (IDs only).","type":"string","enum":["FULL","SUMMARY","MINIMAL"]},"path":{"description":"Filter fragments under this path (e.g., '/content/dam/my-project'). Must start with /content/dam or /content/launches.","type":"string","pattern":"^\\/content\\/(dam|launches)(\\/.*)?$"},"onlyDirectChildren":{"description":"When true, only direct children under the specified path are retrieved (default: false). Requires path to be set.","type":"boolean"},"createdAfter":{"description":"Filter fragments created after this date (ISO 8601, e.g., '2021-01-30T08:30:00Z').","type":"string"},"createdBefore":{"description":"Filter fragments created before this date (ISO 8601, e.g., '2021-01-30T08:30:00Z').","type":"string"},"createdBy":{"description":"Filter by creator user IDs. Returns fragments created by any of the listed users.","minItems":1,"type":"array","items":{"type":"string","minLength":1}},"modifiedAfter":{"description":"Filter fragments modified after this date (ISO 8601, e.g., '2021-01-30T08:30:00Z').","type":"string"},"modifiedBefore":{"description":"Filter fragments modified before this date (ISO 8601, e.g., '2021-01-30T08:30:00Z').","type":"string"},"modifiedBy":{"description":"Filter by modifier user IDs. Returns fragments modified by any of the listed users.","minItems":1,"type":"array","items":{"type":"string","minLength":1}},"modifiedOrCreatedAfter":{"description":"Filter fragments modified OR created after this date (ISO 8601, e.g., '2021-01-30T08:30:00Z').","type":"string"},"modifiedOrCreatedBefore":{"description":"Filter fragments modified OR created before this date (ISO 8601, e.g., '2021-01-30T08:30:00Z').","type":"string"},"modifiedOrCreatedBy":{"description":"Filter by user IDs for create or modify events. Returns fragments created or modified by any of the listed users.","minItems":1,"type":"array","items":{"type":"string","minLength":1}},"publishedAfter":{"description":"Filter fragments published after this date (ISO 8601, e.g., '2021-01-30T08:30:00Z').","type":"string"},"publishedBefore":{"description":"Filter fragments published before this date (ISO 8601, e.g., '2021-01-30T08:30:00Z').","type":"string"},"publishedBy":{"description":"Filter by publisher user IDs. Returns fragments published by any of the listed users.","minItems":1,"type":"array","items":{"type":"string","minLength":1}},"status":{"description":"Filter by fragment status. Valid values: NEW, DRAFT, PUBLISHED, MODIFIED, UNPUBLISHED.","type":"array","items":{"type":"string","enum":["NEW","DRAFT","PUBLISHED","MODIFIED","UNPUBLISHED"]}},"modelIds":{"description":"Filter by model IDs (Base64URL-encoded). Only fragments based on models matching at least one ID are retrieved. If both modelIds and modelTags are provided, fragments matching either criteria are returned. Use search-aem-fragment-models to resolve model names to IDs.","type":"array","items":{"type":"string"}},"modelTags":{"description":"Filter by model tags. Only fragments based on models matching at least one tag are retrieved. If both modelIds and modelTags are provided, fragments matching either criteria are returned.","type":"array","items":{"type":"string"}},"tags":{"description":"Filter by tags. Returns fragments that have any of these tags.","type":"array","items":{"type":"string"}},"locale":{"description":"Filter by locale codes (BCP 47, e.g., ['en', 'fr', 'de']). Returns fragments in any of these locales.","type":"array","items":{"type":"string"}},"metadata":{"description":"Filter by custom metadata key-value pairs (max 10). Returns fragments whose metadata matches at least one of the provided entries.","minItems":1,"maxItems":10,"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"pattern":"^[^\\[\\]\\*|/]+$","description":"The name of the metadata property to filter by."},"value":{"type":"string","minLength":1,"description":"The value of the metadata property to filter by."}},"required":["key","value"]}},"fullText":{"description":"Full text search. When provided, only fragments whose content matches the text will be retrieved.","type":"object","properties":{"text":{"type":"string","minLength":1,"description":"A text value used to search for Content Fragments. For semantic (vector) search instead of keyword search, prepend the literal token '?{}?' to the text (e.g. '?{}?insulin affordability programs under $35'); when doing so, omit queryMode."},"queryMode":{"description":"Query mode for keyword full text search (default: AS_IS). Does not apply to semantic search (text prefixed with '?{}?'). EXACT_WORDS: terms rendered as they are; EXACT_PHRASE: terms rendered as a phrase; ALL_TERMS: every term as a 'contains' operation; EDGES: only edge terms as 'contains'; AS_IS: use search term as provided.","type":"string","enum":["EXACT_WORDS","EXACT_PHRASE","ALL_TERMS","EDGES","AS_IS"]}},"required":["text"]},"sortBy":{"description":"Sort field passed as 'on' to the fragments search API. Valid values: created, modified, modifiedOrCreated, published, name, title.","type":"string","enum":["created","modified","modifiedOrCreated","published","name","title"]},"sortOrder":{"description":"Sort order: asc or desc (sent to the API as ASC or DESC). Used with sortBy.","type":"string","enum":["asc","desc"]},"responseFormat":{"description":"Response format: 'full' returns complete fragment data (default), 'summary' returns only id, path, and eTag per fragment — useful when driving follow-up calls and token efficiency matters.","type":"string","enum":["full","summary"]}},"required":["authorUrl"]},"output_schema":null,"annotations":null},{"name":"search-aem-fragment-models","title":null,"description":"List and search content fragment models. Call with no filters to list all models (unfiltered, paged). Use filters for refined results: folder (enabledForFolder), configuration path (configurationFolder), name, tags, status, replication status, or dates.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"limit":{"description":"Number of results to return (1-50, default: 10).","type":"number","minimum":1,"maximum":50},"cursor":{"description":"Base64-encoded pagination cursor from previous response. Use to get next page of results.","type":"string"},"projection":{"description":"Data projection level: FULL (all field data, default), SUMMARY (basic info), MINIMAL (IDs only).","type":"string","enum":["FULL","SUMMARY","MINIMAL"]},"detail":{"description":"Response detail level. FULL (default): return all model data. SUMMARY: return only name, path, description, and fields (each field trimmed to name, label, type). Reduces response size when full schema data is not needed.","type":"string","enum":["FULL","SUMMARY"]},"includeModelReferences":{"description":"Include model references in the response. Default: false.","type":"boolean"},"name":{"description":"Search by model display name. Use with nameMatching to control match type.","type":"string"},"nameMatching":{"description":"Name matching mode: PARTIAL_MATCH (contains, default) or EXACT_MATCH (exact match). Only used if 'name' is provided.","type":"string","enum":["PARTIAL_MATCH","EXACT_MATCH"]},"technicalName":{"description":"Search by model technical name. Use with technicalNameMatching to control match type.","type":"string"},"technicalNameMatching":{"description":"Technical name matching mode: PARTIAL_MATCH (contains, default) or EXACT_MATCH (exact match). Only used if 'technicalName' is provided.","type":"string","enum":["PARTIAL_MATCH","EXACT_MATCH"]},"createdAfter":{"description":"Filter models created after this date (ISO 8601 format, e.g., '2021-01-30T08:30:00Z').","type":"string"},"createdBefore":{"description":"Filter models created before this date (ISO 8601 format, e.g., '2021-01-30T08:30:00Z').","type":"string"},"modifiedAfter":{"description":"Filter models modified after this date (ISO 8601 format, e.g., '2021-01-30T08:30:00Z').","type":"string"},"modifiedBefore":{"description":"Filter models modified before this date (ISO 8601 format, e.g., '2021-01-30T08:30:00Z').","type":"string"},"modifiedOrCreatedAfter":{"description":"Filter models modified OR created after this date (ISO 8601 format, e.g., '2021-01-30T08:30:00Z').","type":"string"},"modifiedOrCreatedBefore":{"description":"Filter models modified OR created before this date (ISO 8601 format, e.g., '2021-01-30T08:30:00Z').","type":"string"},"publishedAfter":{"description":"Filter models published after this date (ISO 8601 format, e.g., '2021-01-30T08:30:00Z').","type":"string"},"publishedBefore":{"description":"Filter models published before this date (ISO 8601 format, e.g., '2021-01-30T08:30:00Z').","type":"string"},"configurationFolder":{"description":"Filter by configuration folder path (e.g., '/conf/mysite'). Returns models within this configuration.","type":"string"},"enabledForFolder":{"description":"Filter models that are enabled for a specific folder path (e.g., '/content/dam/mysite').","type":"string"},"status":{"description":"Filter by model status. Valid values: enabled, disabled, draft (case-insensitive input; sent lowercase).","type":"array","items":{"type":"string","enum":["enabled","disabled","draft"]}},"replicationStatus":{"description":"Filter by replication status. Valid values: PUBLISHED, UNPUBLISHED, MODIFIED, NEVER_PUBLISHED.","type":"array","items":{"type":"string","enum":["PUBLISHED","UNPUBLISHED","MODIFIED","NEVER_PUBLISHED"]}},"locked":{"description":"Filter by lock status. true = locked models, false = unlocked models.","type":"boolean"},"ids":{"description":"Filter by specific model IDs (Base64URLId). Returns only models matching these IDs.","type":"array","items":{"type":"string"}},"tags":{"description":"Filter by tags. Returns models that have any of these tags.","type":"array","items":{"type":"string"}},"sortBy":{"description":"Field to sort by. Valid values: created, modified, published, name, technicalName.","type":"string","enum":["created","modified","published","name","technicalName","title"]},"sortOrder":{"description":"Sort order: asc (ascending) or desc (descending). Only used if sortBy is provided.","type":"string","enum":["asc","desc"]}},"required":["authorUrl"]},"output_schema":null,"annotations":null},{"name":"list-aem-fragments","title":null,"description":"List content fragments (paged) with optional folder filtering. Also use with a launch path (from get-aem-launch) to list fragments inside a launch.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"limit":{"description":"Number of results to return (1-50, default: 10). Higher values may cause performance issues with all-hydrated references.","type":"number","minimum":1,"maximum":50},"cursor":{"description":"Base64-encoded pagination cursor from previous response. Use to get next page of results.","type":"string"},"path":{"description":"Filter fragments by folder path (e.g., '/content/dam/my-project'). Typically starts with '/content/dam'. Also accepts CF launch paths (from get-aem-launch) to list fragments inside a launch. Defaults to '/content/dam' if not provided.","type":"string"},"projection":{"description":"Data projection level: FULL (all field data, default), SUMMARY (basic info), MINIMAL (IDs only).","type":"string","enum":["FULL","SUMMARY","MINIMAL"]},"references":{"description":"Reference resolution mode: direct (IDs only), direct_hydrated (basic ref data), all-hydrated (full ref data).","type":"string","enum":["direct","direct_hydrated","all-hydrated"]}},"required":["authorUrl"]},"output_schema":null,"annotations":null},{"name":"manage-aem-fragments-batch","title":null,"description":"Unified batch tool for fragment models (create/copy/patch/delete/publish/unpublish), content fragments, and fragment tags — use this for ALL fragment-model CRUD instead of per-fragment tools. Patch/delete operations require fetching the current ETag first.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"target":{"type":"string","enum":["fragments","models","fragmentTags"],"description":"Entity type to operate on. Provide the matching sub-object for this target."},"fragments":{"description":"Fragment batch params. Required when target='fragments'.","type":"object","properties":{"operation":{"type":"string","enum":["create","patch","delete","copy","publish","unpublish","findReplace"],"description":"The batch operation to perform on fragments."},"create":{"description":"Parameters for operation=create.","type":"object","properties":{"fragments":{"minItems":1,"maxItems":50,"type":"array","items":{"type":"object","properties":{"title":{"type":"string","minLength":1,"description":"The display title of the content fragment (e.g., 'Travel Adventure Article')."},"name":{"type":"string","minLength":1,"description":"The unique name of the content fragment (e.g., 'travel-adventure-article'). Must be unique within the parent folder."},"description":{"description":"Optional description of the content fragment.","type":"string"},"modelId":{"type":"string","minLength":1,"description":"The content fragment model ID (base64 encoded) this fragment is based on."},"parentPath":{"type":"string","minLength":1,"description":"The parent folder path where the fragment will be created (e.g., '/content/dam/my-project'). Must be a valid DAM folder path."},"fields":{"type":"string","minLength":1,"description":"Stringified JSON field payload matching this fragment's model schema."}},"required":["title","name","modelId","parentPath","fields"]},"description":"Array of fragments to create, one entry per fragment (each with its own modelId). Max 50. Before building this array, fetch the model schemas in ONE search-aem-fragment-models call passing ALL distinct modelIds — do not call get-aem-fragment-model per model."}},"required":["fragments"]},"patch":{"description":"Parameters for operation=patch.","type":"object","properties":{"edits":{"minItems":1,"maxItems":50,"type":"array","items":{"type":"object","properties":{"fragmentId":{"type":"string","minLength":1,"description":"The UUID of the content fragment to edit. Use search-aem-fragments or list-aem-fragments to find fragment IDs."},"eTag":{"type":"string","minLength":1,"description":"The current ETag of the fragment. Required for optimistic locking. See 'etag-guide' prompt."},"operations":{"minItems":1,"type":"array","items":{"oneOf":[{"type":"object","properties":{"op":{"type":"string","const":"add","description":"Add a value at the given path"},"path":{"type":"string","minLength":1,"description":"The location where information should be added"},"value":{"description":"The value to place at the given path"}},"required":["op","path","value"]},{"type":"object","properties":{"op":{"type":"string","const":"replace","description":"Replace the value at the given path"},"path":{"type":"string","minLength":1,"description":"The location where information should be replaced"},"value":{"description":"The new value to place at the given path"}},"required":["op","path","value"]},{"type":"object","properties":{"op":{"type":"string","const":"copy","description":"Copy a value from one path to another"},"from":{"type":"string","minLength":1,"description":"The path pointing to the entity to copy from"},"path":{"type":"string","minLength":1,"description":"The path pointing to the location to copy to"}},"required":["op","from","path"]},{"type":"object","properties":{"op":{"type":"string","const":"move","description":"Move a value from one path to another"},"from":{"type":"string","minLength":1,"description":"The path pointing to the entity to move from"},"path":{"type":"string","minLength":1,"description":"The path pointing to the location to move to"}},"required":["op","from","path"]},{"type":"object","properties":{"op":{"type":"string","const":"remove","description":"Remove the value at the given path. Destructive: use only when the user clearly intends to delete a field or property."},"path":{"type":"string","minLength":1,"description":"The path pointing to the entity to be removed."}},"required":["op","path"]}]},"description":"Array of JSON Patch operations to apply. See 'json-patch-guide' prompt."}},"required":["fragmentId","eTag","operations"]},"description":"Array of edit operations, one entry per fragment to edit. Max 50."}},"required":["edits"]},"delete":{"description":"Parameters for operation=delete.","type":"object","properties":{"fragments":{"minItems":1,"maxItems":50,"type":"array","items":{"type":"object","properties":{"fragmentId":{"type":"string","minLength":1,"description":"The UUID of the content fragment to delete."},"eTag":{"type":"string","minLength":1,"description":"The current ETag of the fragment. See 'etag-guide' prompt."}},"required":["fragmentId","eTag"]},"description":"Array of fragments to delete. Max 50. Deletion is permanent and irreversible."},"unlinkReferences":{"description":"When true, references to each deleted fragment are removed from other fragments that reference it.","type":"boolean"}},"required":["fragments"]},"copy":{"description":"Parameters for operation=copy.","type":"object","properties":{"copies":{"minItems":1,"maxItems":50,"type":"array","items":{"type":"object","properties":{"fragmentId":{"type":"string","minLength":1,"description":"The UUID of the content fragment to copy."},"parentPath":{"type":"string","pattern":"^(\\/content\\/dam.*?)$|^((?!\\/).*)$","description":"The destination folder. Must start with /content/dam or be relative to /content/dam. Must already exist."},"name":{"description":"Optional name for the copied fragment. If omitted, the original name is used with an auto-generated suffix.","type":"string"}},"required":["fragmentId","parentPath"]},"description":"Array of copy operations, one entry per fragment to copy. Max 50."}},"required":["copies"]},"publish":{"description":"Parameters for operation=publish.","type":"object","properties":{"ids":{"minItems":1,"maxItems":500,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Content fragment UUID."},"description":"Fragment UUIDs to publish; deduplicated; auto-chunked to 50 per sub-request. Max 500."},"filterReferencesByStatus":{"description":"Which reference statuses to include in publication.","maxItems":3,"type":"array","items":{"type":"string","enum":["DRAFT","UNPUBLISHED","MODIFIED"]}},"tier":{"description":"Target delivery tier. 'preview' publishes to the non-live preview review surface (agentId=preview); 'publish' (default) goes to the live delivery tier. Use 'preview' to stage content for a pre-approval publishHtmlFragment render without going live.","type":"string","enum":["preview","publish"]},"scheduledTime":{"description":"Epoch ms for scheduled publish. Omit for immediate.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["ids"]},"unpublish":{"description":"Parameters for operation=unpublish.","type":"object","properties":{"ids":{"minItems":1,"maxItems":500,"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Content fragment UUID."},"description":"Fragment UUIDs to unpublish; deduplicated; auto-chunked to 50 per sub-request. Max 500."},"allowUnpublishingWhenReferenced":{"description":"When true, unpublish even if fragments are referenced.","type":"boolean"},"scheduledTime":{"description":"Epoch ms for scheduled unpublish. Omit for immediate.","type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["ids"]},"findReplace":{"description":"Parameters for operation=findReplace.","type":"object","properties":{"paths":{"minItems":1,"maxItems":200,"type":"array","items":{"type":"string","minLength":1},"description":"Absolute paths of content fragments for find-and-replace. Deduplicated; auto-chunked in groups of 20. Max 200."},"find":{"type":"string","minLength":1,"pattern":"^[^<>]*$","description":"The text string to find in all TEXT fields. Must not contain < or >."},"replace":{"type":"string","pattern":"^[^<>]*$","description":"The replacement string. Must not contain < or >. Can be empty to delete occurrences."},"dryRun":{"type":"boolean","description":"When true, returns what would change without committing anything."},"ignoreErrors":{"type":"boolean","description":"When true, silently skips fragments that would produce errors."},"isCaseSensitive":{"description":"When true (default), the search is case-sensitive.","type":"boolean"},"matchExactWord":{"description":"When true, only whole-word occurrences are replaced.","type":"boolean"}},"required":["paths","find","replace","dryRun","ignoreErrors"]}},"required":["operation"]},"models":{"description":"Model batch params. Required when target='models'.","type":"object","properties":{"operation":{"type":"string","enum":["copy","create","patch","delete","publish","unpublish"],"description":"The batch operation to perform on models."},"copy":{"description":"Parameters for operation=copy.","type":"object","properties":{"copies":{"minItems":1,"maxItems":10,"type":"array","items":{"type":"object","properties":{"modelId":{"type":"string","description":"Base64URLId of the content fragment model to copy."},"parentPath":{"type":"string","description":"Destination folder path where the model copy will be created."},"name":{"type":"string","description":"Technical model name for the copied model."}},"required":["modelId","parentPath","name"]},"description":"Array of copy operations."}},"required":["copies"]},"create":{"description":"Parameters for operation=create.","type":"object","properties":{"configurationFolder":{"description":"Global configuration folder for all models.","type":"string"},"locked":{"description":"Global lock setting for all models.","type":"boolean"},"dryRun":{"description":"If true, validates the payload without creating models.","type":"boolean"},"models":{"minItems":1,"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"A human-readable name for this model"},"technicalName":{"description":"Optional technical name (auto-generated from 'name' if omitted).","type":"string","pattern":"^[^\\/:\\[\\]|*]*$"},"description":{"description":"A human-readable description for this model","type":"string"},"configurationFolder":{"description":"The configuration folder where this model should be created (overrides global setting)","type":"string"},"previewUrlPattern":{"description":"Preview URL pattern for the model","type":"string"},"locked":{"description":"If true, no edits can be performed on this model except unlocking","type":"boolean"},"fields":{"minItems":1,"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"The name of this field"},"label":{"type":"string","minLength":1,"description":"A label to be used when rendering this field in an editable form"},"type":{"type":"string","enum":["text","boolean","long-text","number","float-number","date-time","date","time","enumeration","tag","content-reference","content-fragment","json"],"description":"Type of data stored in the field"},"description":{"description":"A human-readable description for this field","type":"string"},"required":{"description":"Defines whether this field is required or optional (default: false)","type":"boolean"},"multiple":{"description":"Defines if this field should store multiple values (default: false)","type":"boolean"},"minItems":{"description":"Minimum number of values that can be stored into this field","type":"integer","minimum":0,"maximum":9007199254740991},"maxItems":{"description":"Maximum number of values that can be stored into this field","type":"integer","minimum":1,"maximum":9007199254740991},"placeholder":{"description":"Placeholder text for the field","type":"string"},"defaultValue":{"description":"Default value for the field","type":"string"},"maxLength":{"description":"Maximum length this text should have (cannot exceed 256)","type":"integer","minimum":0,"maximum":256},"unique":{"description":"Whether this field value must be unique","type":"boolean"},"translatable":{"description":"Whether this field is translatable","type":"boolean"},"validationType":{"description":"Validation type (default: 'none')","type":"string","enum":["none","email","url","custom"]},"customValidationRegex":{"description":"Custom validation regex pattern (required when validationType is 'custom')","type":"string"},"customErrorMessage":{"description":"Custom error message for validation failures","type":"string"}},"required":["name","label","type"]},"description":"Array of field definitions for this model"}},"required":["name","fields"]},"description":"Array of model definitions to create."}},"required":["models"]},"patch":{"description":"Parameters for operation=patch.","type":"object","properties":{"edits":{"minItems":1,"maxItems":50,"type":"array","items":{"type":"object","properties":{"modelId":{"type":"string","minLength":1,"description":"The Base64URLId of the model to edit. Use get-aem-fragment-model or search-aem-fragment-models to find the ID."},"eTag":{"type":"string","minLength":1,"description":"The ETag of the model. Required for cache validation. Retrieve via get-aem-fragment-model."},"operations":{"minItems":1,"type":"array","items":{"oneOf":[{"type":"object","properties":{"op":{"type":"string","const":"add","description":"Add a value at the given path"},"path":{"type":"string","minLength":1,"description":"The location where information should be added"},"value":{"description":"The value to place at the given path"}},"required":["op","path","value"]},{"type":"object","properties":{"op":{"type":"string","const":"replace","description":"Replace the value at the given path"},"path":{"type":"string","minLength":1,"description":"The location where information should be replaced"},"value":{"description":"The new value to place at the given path"}},"required":["op","path","value"]},{"type":"object","properties":{"op":{"type":"string","const":"copy","description":"Copy a value from one path to another"},"from":{"type":"string","minLength":1,"description":"The path pointing to the entity to copy from"},"path":{"type":"string","minLength":1,"description":"The path pointing to the location to copy to"}},"required":["op","from","path"]},{"type":"object","properties":{"op":{"type":"string","const":"move","description":"Move a value from one path to another"},"from":{"type":"string","minLength":1,"description":"The path pointing to the entity to move from"},"path":{"type":"string","minLength":1,"description":"The path pointing to the location to move to"}},"required":["op","from","path"]},{"type":"object","properties":{"op":{"type":"string","const":"remove","description":"Remove the value at the given path. Destructive: use only when the user clearly intends to delete a field or property."},"path":{"type":"string","minLength":1,"description":"The path pointing to the entity to be removed."}},"required":["op","path"]}]},"description":"Array of JSON Patch operations to apply."}},"required":["modelId","eTag","operations"]},"description":"Array of edit operations, one per model to edit. Max 50."}},"required":["edits"]},"delete":{"description":"Parameters for operation=delete.","type":"object","properties":{"models":{"minItems":1,"maxItems":50,"type":"array","items":{"type":"object","properties":{"modelId":{"type":"string","minLength":1,"description":"The Base64URLId of the model to delete."},"eTag":{"type":"string","minLength":1,"description":"The current ETag of the model (required for If-Match)."}},"required":["modelId","eTag"]},"description":"Array of models to delete; each must have modelId and eTag. Max 50."}},"required":["models"]},"publish":{"description":"Parameters for operation=publish.","type":"object","properties":{"ids":{"minItems":1,"maxItems":50,"type":"array","items":{"type":"string"},"description":"Array of content fragment model IDs (Base64URLId)."},"filterAllowedModelIdsByStatus":{"description":"Optional filter to restrict which models can be published based on their status.","type":"array","items":{"type":"string","enum":["ENABLED","DISABLED","DRAFT"]}}},"required":["ids"]},"unpublish":{"description":"Parameters for operation=unpublish.","type":"object","properties":{"ids":{"minItems":1,"maxItems":50,"type":"array","items":{"type":"string"},"description":"Array of content fragment model IDs (Base64URLId)."}},"required":["ids"]}},"required":["operation"]},"fragmentTags":{"description":"Fragment tag batch params. Required when target='fragmentTags'.","type":"object","properties":{"action":{"type":"string","enum":["add","replace","remove_all"],"description":"add: POST tags. replace: PUT full tag list. remove_all: DELETE all tags."},"fragments":{"minItems":1,"maxItems":50,"type":"array","items":{"type":"object","properties":{"fragmentId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"Content fragment UUID."}},"required":["fragmentId"]},"description":"Fragments to update; same action and tags list for every entry. Max 50."},"tags":{"description":"Required non-empty for add and replace. Omit for remove_all.","type":"array","items":{"type":"string","minLength":1,"pattern":"^(?:(?!\\.|%|\\*|\\?|\\[|\\]|\\|).)+$","description":"Tag ID, e.g. 'namespace:category/tag-name'."}}},"required":["action","fragments"]}},"required":["authorUrl","target"]},"output_schema":null,"annotations":null},{"name":"create-aem-fragment","title":null,"description":"Creates fragment instances, not model definitions. For new model schemas use manage-aem-fragments-batch (target=models, operation=create). Create a new content fragment using a modelId and field payload.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"title":{"type":"string","minLength":1,"description":"The display title of the content fragment (e.g., 'Travel Adventure Article'). Used for identification and display purposes."},"name":{"type":"string","minLength":1,"description":"The unique name of the content fragment (e.g., 'travel-adventure-article'). Must be unique within the parent folder. Used as the node name in AEM."},"description":{"description":"Optional description of the content fragment (e.g., 'Article about travel adventures in Bali'). Used for documentation and search.","type":"string"},"modelId":{"type":"string","minLength":1,"description":"The content fragment model ID (base64 encoded). Use get-aem-fragment-model to find available models and their schemas."},"parentPath":{"type":"string","minLength":1,"description":"The parent folder path where the fragment will be created (e.g., '/content/dam/my-project'). Must be a valid DAM folder path."},"fields":{"type":"string","minLength":1,"description":"Stringified JSON field payload matching the selected model schema. Get schema via get-aem-fragment-model."}},"required":["authorUrl","title","name","modelId","parentPath","fields"]},"output_schema":null,"annotations":null},{"name":"patch-aem-fragment","title":null,"description":"Patches fragment content, not model schema. For model schema patch operations use manage-aem-fragments-batch (target=models, operation=patch). Update a content fragment using JSON Patch (RFC 6902). Requires current ETag.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"fragmentId":{"type":"string","description":"The content fragment ID (UUID)"},"ifMatch":{"type":"string","description":"Current ETag (If-Match) for optimistic locking. See 'etag-guide' prompt."},"patchOperations":{"type":"string","description":"Stringified JSON Patch array (RFC 6902). See 'json-patch-guide' prompt. Common paths: /title, /description, /fields/0/values/0."},"references":{"description":"Reference resolution mode (NONE, DIRECT, DIRECT_HYDRATED)","type":"string"}},"required":["authorUrl","fragmentId","ifMatch","patchOperations"]},"output_schema":null,"annotations":null},{"name":"copy-aem-fragment","title":null,"description":"Copy a content fragment (shallow copy; does not copy referenced dependencies).","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"fragmentId":{"type":"string","description":"The content fragment ID (UUID) to copy"},"parentPath":{"type":"string","description":"The parent path where the fragment will be copied (e.g., /content/dam/my-project)"},"name":{"description":"The name for the copied fragment (optional). If not provided, uses original name with suffix.","type":"string"}},"required":["authorUrl","fragmentId","parentPath"]},"output_schema":null,"annotations":null},{"name":"delete-aem-fragment","title":null,"description":"Deletes fragment instances, not model definitions. For model deletion use manage-aem-fragments-batch (target=models, operation=delete). Delete a content fragment permanently. Requires ETag for safety. Cannot be undone.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"fragmentId":{"type":"string","description":"The content fragment ID (UUID) to delete."},"ifMatch":{"type":"string","description":"Current ETag (If-Match) from get-aem-fragment. See 'etag-guide' prompt."}},"required":["authorUrl","fragmentId","ifMatch"]},"output_schema":null,"annotations":null},{"name":"manage-aem-fragment-versions","title":null,"description":"Manage fragment versions. Actions:","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"fragmentId":{"type":"string","description":"The content fragment ID (UUID)."},"action":{"type":"string","enum":["list","get","create","restore"],"description":"Action to perform: list, get, create, or restore."},"versionId":{"description":"Version ID (required for get and restore).","type":"string"},"label":{"description":"Optional label for create (e.g., \"Before major update\").","type":"string"},"comment":{"description":"Optional comment for create (e.g., \"Backup before content changes\").","type":"string"},"limit":{"description":"Number of results to return for list (default: 10).","type":"number"},"cursor":{"description":"Cursor for pagination for list (base64 encoded).","type":"string"}},"required":["authorUrl","fragmentId","action"]},"output_schema":null,"annotations":null},{"name":"restore-aem-fragment-version","title":null,"description":"Restore a fragment to a previous version (overwrites current content).","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"fragmentId":{"type":"string","description":"Fragment UUID to restore."},"versionId":{"type":"string","description":"Version UUID to restore from."}},"required":["authorUrl","fragmentId","versionId"]},"output_schema":null,"annotations":null},{"name":"manage-aem-fragment-variations","title":null,"description":"Manage fragment variations (list, get, create, patch, delete). Use this tool for ALL variation-specific operations—not patch-aem-fragment (which patches the main fragment, not its variations).","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"fragmentId":{"type":"string","minLength":1,"description":"The content fragment UUID."},"action":{"type":"string","enum":["list","get","create","patch","delete"],"description":"Action to perform. Provide the matching sub-object for this action."},"list":{"description":"Parameters for action=list.","type":"object","properties":{"limit":{"description":"Max variations to return (1-50, default: server default).","type":"integer","minimum":1,"maximum":50},"cursor":{"description":"Pagination cursor from a previous response.","type":"string"}}},"get":{"description":"Parameters for action=get.","type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Single variation name to retrieve full content for. E.g., 'master', 'mobile', 'web'. To list/discover all variation names, use action=list instead of calling get repeatedly."}},"required":["name"]},"create":{"description":"Parameters for action=create.","type":"object","properties":{"variations":{"minItems":1,"maxItems":50,"type":"array","items":{"type":"object","properties":{"title":{"type":"string","minLength":1,"description":"Variation title. E.g., 'Mobile', 'German'. Name is auto-generated from this."},"description":{"description":"Optional description explaining the variation's purpose.","type":"string"}},"required":["title"]},"description":"Variations to create. Max 50. One sub-request per variation."}},"required":["variations"]},"patch":{"description":"Parameters for action=patch.","type":"object","properties":{"edits":{"minItems":1,"maxItems":50,"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Variation name to patch. E.g., 'mobile', 'web'. Get names from action=list, not per-variation get calls. ETag is fetched internally—do not pre-fetch it."},"operations":{"minItems":1,"type":"array","items":{"oneOf":[{"type":"object","properties":{"op":{"type":"string","const":"add"},"path":{"type":"string","minLength":1,"description":"The location where information should be added"},"value":{"description":"The value to place at the given path"}},"required":["op","path","value"]},{"type":"object","properties":{"op":{"type":"string","const":"replace"},"path":{"type":"string","minLength":1,"description":"The location where information should be replaced"},"value":{"description":"The new value to place at the given path"}},"required":["op","path","value"]},{"type":"object","properties":{"op":{"type":"string","const":"copy"},"from":{"type":"string","minLength":1,"description":"A path pointing to the entity to copy from"},"path":{"type":"string","minLength":1,"description":"A path pointing to the location to copy to"}},"required":["op","from","path"]},{"type":"object","properties":{"op":{"type":"string","const":"move"},"from":{"type":"string","minLength":1,"description":"A path pointing to the entity to move from"},"path":{"type":"string","minLength":1,"description":"A path pointing to the location to move to"}},"required":["op","from","path"]},{"type":"object","properties":{"op":{"type":"string","const":"remove"},"path":{"type":"string","minLength":1,"description":"A path pointing to the entity to be removed"}},"required":["op","path"]}]},"description":"JSON Patch operations to apply. See 'json-patch-guide' prompt."}},"required":["name","operations"]},"description":"Edits to apply. Max 50. ETag fetched automatically per variation before patching."}},"required":["edits"]},"delete":{"description":"Parameters for action=delete.","type":"object","properties":{"variations":{"minItems":1,"maxItems":50,"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Variation name to delete. Cannot delete master/main. Get names from action=list, not per-variation get calls. ETag is fetched internally—do not pre-fetch it."}},"required":["name"]},"description":"Variations to delete. Max 50. ETag fetched automatically per variation before deleting. Irreversible."},"unlinkReferences":{"description":"When true, removes references to each deleted variation from other fragments (default: false).","type":"boolean"}},"required":["variations"]},"variationName":{"description":"DEPRECATED — use get.name / patch.edits[].name / delete.variations[].name instead. Retained for backward compatibility; will be removed after the migration window.","type":"string"},"title":{"description":"DEPRECATED — use create.variations[].title instead. Retained for backward compatibility; will be removed after the migration window.","type":"string"},"description":{"description":"DEPRECATED — use create.variations[].description instead. Retained for backward compatibility; will be removed after the migration window.","type":"string"},"ifMatch":{"description":"DEPRECATED — use patch or delete actions (ETag is fetched automatically internally). Retained for backward compatibility; will be removed after the migration window.","type":"string"},"patchOperations":{"description":"DEPRECATED — use patch.edits[].operations instead (provide a JSON Patch array object, not a stringified string). Retained for backward compatibility; will be removed after the migration window.","type":"string"}},"required":["authorUrl","fragmentId","action"]},"output_schema":null,"annotations":null},{"name":"patch-cf-variation-fields","title":null,"description":"Set a single Content Fragment variation's field values BY NAME, without dealing with JSON Patch indices.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"fragmentId":{"type":"string","minLength":1,"description":"The content fragment UUID."},"variationName":{"type":"string","minLength":1,"description":"The variation NODE name to patch (from manage-aem-fragment-variations action=list, or the name returned by create) — not the title."},"fields":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]},"description":"Map of fieldName -> value to set, e.g. {\"headline\":\"…\",\"body\":\"…\"}. Single scalar value per field; names not on the model are skipped."}},"required":["authorUrl","fragmentId","variationName","fields"]},"output_schema":null,"annotations":null},{"name":"create-cf-variation-with-content","title":null,"description":"Create a Content Fragment variation and populate its fields in ONE call.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"fragmentId":{"type":"string","minLength":1,"description":"The content fragment UUID."},"title":{"type":"string","minLength":1,"description":"Variation display title (e.g., 'First-Home Buyers'). AEM auto-generates the node `name` from this (spaces → underscores, lowercased)."},"description":{"description":"Optional description for the variation.","type":"string"},"fields":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]},"description":"Map of fieldName -> value to set on the new variation, e.g. {\"headline\":\"…\",\"body\":\"…\",\"cta\":\"…\"}. Names not on the model are skipped."}},"required":["authorUrl","fragmentId","title","fields"]},"output_schema":null,"annotations":null},{"name":"resolve-aem-fragment-path","title":null,"description":"Convert a DAM fragmentPath to fragment UUID. Only needed for get-aem-fragment or patch-aem-fragment (which require UUID). NOT needed for publish/unpublish — those accept paths directly.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"fragmentPath":{"type":"string","minLength":1,"description":"The DAM path to resolve (e.g., '/content/dam/wknd-shared/en/adventures/bali-surf-camp/bali-surf-camp'). Must start with '/content/dam' or '/content/launches' (for fragments inside a CF launch)."}},"required":["authorUrl","fragmentPath"]},"output_schema":null,"annotations":null},{"name":"update-aem-fragment-references","title":null,"description":"Update content-fragment reference fields in a fragment after a copy operation. Given a fragment UUID and a JSON array of {oldPath, newPath} mappings, finds all fields of type 'content-fragment' whose values match an oldPath and patches them to the corresponding newPath. Use after copying a fragment and its dependencies to rewire the copy's reference fields to point at the new copies instead of the originals.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"fragmentId":{"type":"string","description":"UUID of the fragment whose reference fields should be updated"},"referenceMappings":{"type":"string","description":"JSON array of path mappings, e.g. [{\"oldPath\":\"/content/dam/a\",\"newPath\":\"/content/dam/b\"}]"}},"required":["authorUrl","fragmentId","referenceMappings"]},"output_schema":null,"annotations":null},{"name":"aem-fragment-operation-with-references","title":null,"description":"Execute a fragment operation (copy, version, patch, delete, restore) on a fragment and automatically handle all references. Discovers references, performs operations in order, updates reference fields after copy, and handles deep/recursive requests.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"operation":{"type":"string","enum":["copy","version","patch","delete","restore"],"description":"Operation type: copy | version | patch | delete | restore"},"fragmentId":{"type":"string","description":"Main fragment UUID"},"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"targetPath":{"description":"copy: destination path","type":"string"},"name":{"description":"copy: optional new name","type":"string"},"label":{"description":"version/restore: label","type":"string"},"comment":{"description":"version: optional comment","type":"string"},"versionId":{"description":"restore: version UUID (optional if label provided)","type":"string"},"ifMatch":{"description":"patch/delete: ETag (If-Match). See 'etag-guide' prompt.","type":"string"},"patchOperations":{"description":"patch: stringified JSON Patch array. See 'json-patch-guide' prompt.","type":"string"}},"required":["operation","fragmentId","authorUrl"]},"output_schema":null,"annotations":null},{"name":"get-aem-fragment-referenced-by","title":null,"description":"INCOMING references: find all resources (fragments, pages) that reference a given content fragment ('where is this fragment used?').","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"fragmentId":{"type":"string","minLength":1,"description":"The content fragment UUID to find references for."},"limit":{"description":"Number of results to return (1-50, default: 10).","type":"number","minimum":1,"maximum":50},"cursor":{"description":"Base64-encoded pagination cursor from previous response.","type":"string"}},"required":["authorUrl","fragmentId"]},"output_schema":null,"annotations":null},{"name":"get-aem-fragment-references-tree","title":null,"description":"OUTGOING references: get the full recursive dependency tree of what a content fragment references ('what does this fragment depend on?').","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"fragmentId":{"type":"string","minLength":1,"description":"The content fragment UUID to get the reference tree for."}},"required":["authorUrl","fragmentId"]},"output_schema":null,"annotations":null},{"name":"bulk-get-aem-fragments-referenced-by","title":null,"description":"INCOMING references (bulk): find all resources that reference any of the given content fragment paths ('where used' for multiple fragments at once).","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"paths":{"minItems":1,"type":"array","items":{"type":"string"},"description":"Array of content fragment paths to check (e.g., ['/content/dam/wknd/en/adventures/bali-surf-camp']). Each path must start with '/content/dam' or '/content/launches'."}},"required":["authorUrl","paths"]},"output_schema":null,"annotations":null},{"name":"create-aem-launch","title":null,"description":"Create a new launch. A launch is a temporary branch of content used to develop it for future releases. A launch will store copies of a set of content fragments, which can be modified without affecting the originals, then later promoted to production or rebased against production or another launch. You can only create launches for content fragments, not for pages or other content types. Use this tool when needing to prepare content for future publication or apply bulk changes, such as marketing campaigns. For these use cases, ONLY consider content fragments - disregard pages or other content types. EXAMPLE WORKFLOW: User prompts to create launch for Christmas campaign for mountain adventures. 1. Search for relevant content fragments using search-aem-fragments tool with queryMode EXACT_WORDS. 2. Create launch using create-aem-launch tool with selected fragments as sources (optionally pass waitForCompletion:true to wait for creation inline and get launchId/launchPath back directly, skipping step 3). 3. Track progress of launch job using get-aem-launch-job-status tool. 4. Once job is finished successfully, get the launch equivalents of the source fragments using list-aem-fragments to get fragments under the launch path. 5. Modify the content fragments within the launch (NOT the ones from production, but their launch equivalents!) as needed for the campaign. 6. Compute differences using compute-aem-launch-differences tool to review changes and summarize them (If the diff job finishes, make sure to include the diff url inside a markdown link and a summary of the diffs in your response). You will describe the result in natural language, NOT via creating documents.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"title":{"type":"string","minLength":1,"description":"The title of the launch (e.g., 'Black Friday Launch'), as used for display purposes"},"description":{"description":"Optional description of the launch (e.g., 'Launch for Black Friday marketing campaign'). Used for display purposes.","type":"string"},"isDeep":{"default":true,"description":"Indicates whether the launch is deep (true) or shallow (false). A deep launch automatically includes all content fragments referenced by launch sources or linked in their HTML (only content fragments, not other types of resources), while a shallow launch includes only the specified sources.","type":"boolean"},"sources":{"type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"A content fragment UUID to be added inside the launch (e.g., '3ce2bf53-7436-4d3e-b19a-2793bc2ca63e')"},"description":"An array of content fragment UUIDs used as launch sources, to be added inside the launch."},"liveDate":{"description":"ISO date string. If this parameter is set along with the productionReady parameter, when the launch is promoted the launch's content fragments are also published to the environment specified by the publishAgent parameter at the time specified by this parameter, and not immediately.","type":"string"},"productionReady":{"default":false,"description":"When the launch is marked as production ready, after a launch is promoted, the launch's content fragments are also published to the environment specified by the publishAgent parameter.","type":"boolean"},"publishAgent":{"description":"The publish agent to use when publishing the launch's content fragments after promotion if productionReady is set to true. If not provided, the default publish agent will be used.","type":"string"},"waitForCompletion":{"default":false,"description":"Opt-in. When true, wait server-side for the launch-creation job to finish and return the created launch (launchId + launchPath) inline, instead of returning immediately with only a jobId to poll via get-aem-launch-job-status. Defaults to false — the legacy immediate-return contract — so existing callers are unaffected. NOTE: the SITES-49643 coworker-polling slowness fix lands on the OneAEM MCP (code-mode) path, whose launch recipes wait via aem.waitForJob; this flag only affects this discrete aem-content-fragments tool (which is being retired), not the OneAEM path.","type":"boolean"}},"required":["authorUrl","title","sources"]},"output_schema":null,"annotations":null},{"name":"get-aem-launch-job-status","title":null,"description":"Get the status of a launch job. Call this tool after starting a launch job to track its progress. If the job is still ongoing or not started, use the tool again, and keep polling until status changes.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"jobId":{"type":"string","description":"The id of a launch job (e.g. 2025%7E10%7E30%7E7%7E23%7Efd69176a-aea8-4d4c-b464-bc3b41d3d17d_3)."}},"required":["authorUrl","jobId"]},"output_schema":null,"annotations":null},{"name":"get-aem-launch","title":null,"description":"Get a launch by its UUID and return current ETag + launch details.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"launchId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"The UUID of the launch to get (e.g., '671a4996-047f-4a15-bf8c-8141f264d7db')"}},"required":["authorUrl","launchId"]},"output_schema":null,"annotations":null},{"name":"list-aem-launches","title":null,"description":"List launches with pagination.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"cursor":{"description":"Base64-encoded pagination cursor from previous response. Use to get next page of results.","type":"string"},"limit":{"description":"Number of results to return (1-50, default: 10).","type":"number","minimum":1,"maximum":50}},"required":["authorUrl"]},"output_schema":null,"annotations":null},{"name":"compute-aem-launch-differences","title":null,"description":"Compute the differences between launch content and either production or another Launch, depending on the provided parameters. This will start a launch job, whose results will contain the differences. Use this tool after making a set of changes within a launch so that a human user can review the changes made.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"launchId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"The UUID of the launch to compute differences for (e.g., 'c4bf6ee5-b325-42cf-97b5-37453ddd04cb')"},"compare":{"description":"The target launch UUID against which differences should be computed (e.g., '2f48f442-bce0-488a-9015-c4fb187be86c'). If not specified, differences are computed against production.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"isDeep":{"default":true,"description":"This parameter specifies if the content fragments that are transitively referenced by the launch source content fragments should have differences computed, otherwise only those fragments that are directly referenced in the launch sources will be included.","type":"boolean"},"sources":{"description":"An array of content fragment UUIDs for which differences should be computed. If not specified, then the operation is performed for all the content fragments which are launch sources.","type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"A content fragment UUID for which differences should be computed (e.g., 'b80cea28-9203-4493-a9af-44338ed6d06f')"}}},"required":["authorUrl","launchId"]},"output_schema":null,"annotations":null},{"name":"rebase-aem-launch","title":null,"description":"Perform a rebase of this Launch over production or another launch, depending on the provided parameters.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"launchId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"The UUID of the launch to rebase (e.g., '671a4996-047f-4a15-bf8c-8141f264d7db')"},"ifMatch":{"type":"string","description":"Current ETag (If-Match) for optimistic locking. See 'etag-guide' prompt."},"compare":{"description":"The target launch UUID against which the launch should be rebased (e.g., '9ccef3f9-9f9c-400f-98e2-4f52ecf63c51'). If not specified, rebase is done against production.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"isDeep":{"default":true,"description":"This parameter specifies if the content fragments that are transitively referenced by the launch source content fragments should be rebased, otherwise only those fragments that are directly referenced in the launch sources will be included.","type":"boolean"},"sources":{"description":"An array of content fragment UUIDs for which rebase should be done. If not specified, then the rebase is performed for all the content fragments which are launch sources.","type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"A content fragment UUID for which rebase should be done (e.g., '3ee38d0a-06c9-4755-aa2f-c719aa5f4a5a')"}}},"required":["authorUrl","launchId","ifMatch"]},"output_schema":null,"annotations":null},{"name":"promote-aem-launch","title":null,"description":"Perform a promote of this Launch to production or another Launch, depending on the provided parameters. This will start a launch job, whose results will contain the outcome of promotion after it is finished. Use deleteAfterPromotion to automatically clean up the launch after successful promotion.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"launchId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"The UUID of the launch to promote (e.g., '671a4996-047f-4a15-bf8c-8141f264d7db')"},"compare":{"description":"The target launch UUID against which the launch should be promoted (e.g., '9ccef3f9-9f9c-400f-98e2-4f52ecf63c51'). If not specified, promotion is done against production.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"isDeep":{"default":true,"description":"This parameter specifies if the content fragments that are transitively referenced by the launch source content fragments should be promoted, otherwise only those fragments that are directly referenced in the launch sources will be included.","type":"boolean"},"sources":{"description":"An array of content fragment UUIDs for which promotion should be done. If not specified, then the operation is performed for all the content fragments which are launch sources.","type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"A content fragment UUID for which promotion should be done (e.g., '3ee38d0a-06c9-4755-aa2f-c719aa5f4a5a')"}},"deleteAfterPromotion":{"default":false,"description":"Whether to delete the launch after successful promotion. Defaults to false.","type":"boolean"}},"required":["authorUrl","launchId"]},"output_schema":null,"annotations":null},{"name":"edit-aem-launch-sources","title":null,"description":"Add or remove content fragment sources from an existing launch. This is an async operation — poll get-aem-launch-job-status with the returned jobId. Requires the current ETag from get-aem-launch.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"launchId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"The UUID of the launch to edit (e.g., '671a4996-047f-4a15-bf8c-8141f264d7db')"},"ifMatch":{"type":"string","description":"Current ETag (If-Match) from get-aem-launch. See 'etag-guide' prompt."},"sourcesToAdd":{"description":"Array of content fragment UUIDs to add as new sources to the launch.","type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"A content fragment UUID to add to the launch"}},"sourcesToRemove":{"description":"Array of content fragment UUIDs to remove from the launch sources.","type":"array","items":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"A content fragment UUID to remove from the launch"}}},"required":["authorUrl","launchId","ifMatch"]},"output_schema":null,"annotations":null},{"name":"create-aem-page-launch","title":null,"description":"Create a page launch for future/scheduled publication. Use liveDate parameter to SCHEDULE automatic publication at a specific date/time. A launch is a staging branch where you prepare content before it goes live. Supports MULTISITE launches: pass multiple paths from different sites via srcPathList (e.g., ['/content/wknd/us/en', '/content/brand/global/en']) to stage changes across sites in one launch. Keywords: schedule, scheduled publish, future publication, timed release, embargo, launch, multisite.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"title":{"type":"string","minLength":1,"description":"The title of the launch (e.g., 'Spring Campaign Launch')"},"srcPath":{"description":"Single source page path to include in the launch (e.g., '/content/mysite/en'). Use either srcPath for single source or srcPathList for multiple sources.","type":"string"},"srcPathList":{"description":"Array of source page paths to include in the launch. Use when creating a launch from multiple source pages.","type":"array","items":{"type":"string"}},"shallow":{"default":false,"description":"When true, only the specified page(s) are included, not their children (shallow copy). When false (default), all subpages are included (deep copy).","type":"boolean"},"shallowList":{"description":"Array of boolean flags corresponding to srcPathList. Each flag indicates whether to do a shallow copy (exclude subpages) for that source.","type":"array","items":{"type":"boolean"}},"isLiveCopy":{"description":"When true, the launch maintains a live copy relationship with the source via MSM. Changes in source can be synchronized to the launch. When false or omitted, the launch is a static copy.","type":"boolean"},"liveDate":{"description":"ISO 8601 date-time for SCHEDULED publication (e.g., '<YYYY-MM-DD>T09:00:00Z'). AEM auto-promotes and publishes at this time.","type":"string"},"template":{"description":"Optional template path to use for launch pages (e.g., '/conf/mysite/settings/wcm/templates/landing').","type":"string"},"sourceRolloutConfigs":{"description":"MSM rollout configuration paths for source-to-launch synchronization (e.g., ['/libs/msm/wcm/rolloutconfigs/pushonmodify', '/libs/msm/launches/rolloutconfigs/pushonmodifyshallow']). Each config is sent as a separate parameter.","type":"array","items":{"type":"string"}},"promoteRolloutConfigs":{"description":"MSM rollout configuration paths for launch-to-source promotion behavior (e.g., ['/libs/msm/launches/rolloutconfigs/launch']). Each config is sent as a separate parameter.","type":"array","items":{"type":"string"}}},"required":["authorUrl","title"]},"output_schema":null,"annotations":null},{"name":"promote-aem-page-launch","title":null,"description":"Promote a page launch to production or another launch. This merges the launch content back to the source (production) pages. Use the promotionScope parameter to control which pages are promoted: - smart: Only pages where launch content differs from live (recommended default) - full: All pages in the launch, regardless of whether they changed - resource: Only the single page specified by launchPath (no children) - deep: The page specified by launchPath and all its descendants - approved: Only pages that passed the approval workflow","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"launchPath":{"type":"string","description":"The path to the launch page (e.g., '/content/launches/2026/01/22/demo_launch/content/wknd/en/page'). This should be the full path to a page within the launch, not just the launch root."},"promotionScope":{"default":"smart","description":"Promotion scope: 'smart' (only pages differing from live, recommended), 'full' (all pages), 'resource' (single page only), 'deep' (page + descendants), or 'approved' (workflow-approved). Defaults to 'smart'.","type":"string","enum":["smart","full","resource","deep","approved"]},"target":{"description":"Optional target launch path for nested launch promotion. If omitted, promotes to production.","type":"string"},"workflowPackage":{"description":"Optional workflow package path if you want promoted pages to go through an activation workflow.","type":"string"},"deleteAfterPromotion":{"default":false,"description":"Whether to delete the launch after successful promotion. Defaults to false.","type":"boolean"}},"required":["authorUrl","launchPath"]},"output_schema":null,"annotations":null},{"name":"delete-aem-page-launch","title":null,"description":"Delete a page launch. This permanently removes the launch and all its content. Use with caution - this operation cannot be undone.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"launchPath":{"type":"string","description":"The path to the launch to delete (e.g., '/content/launches/2026/01/20/my-launch')"}},"required":["authorUrl","launchPath"]},"output_schema":null,"annotations":null},{"name":"edit-aem-page-launch","title":null,"description":"Edit a page launch to add or modify source pages. Use this to update which pages are included in an existing launch.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"launchPath":{"type":"string","description":"The path to the launch to edit (e.g., '/content/launches/2026/01/20/my-launch')"},"srcPathList":{"type":"array","items":{"type":"string"},"description":"Array of source page paths to set for this launch."},"shallowList":{"description":"Array of boolean flags corresponding to srcPathList. Each flag indicates whether to do a shallow copy (exclude subpages) for that source.","type":"array","items":{"type":"boolean"}}},"required":["authorUrl","launchPath","srcPathList"]},"output_schema":null,"annotations":null},{"name":"list-aem-page-launches","title":null,"description":"List all page launches via QueryBuilder (read-only operation). Returns launches stored under /content/launches. Use this to discover existing page launches before promoting, editing, or deleting them. Note: This tool is named 'list-aem-page-launches' (not 'get-aem-page-launches').","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"limit":{"description":"Maximum number of launches to return (default: 20, max: 100).","type":"number","minimum":1,"maximum":100},"offset":{"description":"Offset for pagination (default: 0).","type":"number","minimum":0}},"required":["authorUrl"]},"output_schema":null,"annotations":null},{"name":"get-aem-page-launch-diff-url","title":null,"description":"Get a browser URL to view side-by-side differences between a launch page and its production version. This opens AEM's visual diff viewer showing what changed in the launch.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"launchPagePath":{"type":"string","description":"The full path to the page within the launch (e.g., '/content/launches/2026/01/22/demo_launch/content/wknd/en/page')"},"productionPagePath":{"type":"string","description":"The corresponding production page path (e.g., '/content/wknd/en/page')"}},"required":["authorUrl","launchPagePath","productionPagePath"]},"output_schema":null,"annotations":null},{"name":"publish-aem-content","title":null,"description":"Publish (activate) any AEM resource — page, content fragment, or experience fragment — to the delivery tier. Pass the JCR path directly (no UUID resolution needed).","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"path":{"type":"string","description":"The full JCR path of the resource to publish (NOT a UUID — use the path directly). Pages: /content/<site>/... | Content fragments: /content/dam/<site>/... | Experience fragments: /content/experience-fragments/<site>/... | No path resolution needed; pass the DAM path as-is."}},"required":["authorUrl","path"]},"output_schema":null,"annotations":null},{"name":"unpublish-aem-content","title":null,"description":"Unpublish (deactivate) any AEM resource — page, content fragment, or experience fragment — removing it from the delivery tier. Pass the JCR path directly (no UUID resolution needed).","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"path":{"type":"string","description":"The full JCR path of the resource to unpublish (NOT a UUID — use the path directly). Pages: /content/<site>/... | Content fragments: /content/dam/<site>/... | Experience fragments: /content/experience-fragments/<site>/... | No path resolution needed; pass the DAM path as-is."}},"required":["authorUrl","path"]},"output_schema":null,"annotations":null},{"name":"list-aem-cf-templates","title":null,"description":"List HTML visualization templates for a Content Fragment Model (paged).","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"modelId":{"type":"string","minLength":1,"description":"The Content Fragment Model ID (base64-encoded)."},"limit":{"description":"Max number of items to retrieve (1-50).","type":"number","minimum":1,"maximum":50},"cursor":{"description":"Opaque pagination cursor from previous response.","type":"string"}},"required":["authorUrl","modelId"]},"output_schema":null,"annotations":null},{"name":"get-aem-cf-template","title":null,"description":"Get a specific template by templateId for a given model. Returns ETag and JSON details.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"modelId":{"type":"string","minLength":1,"description":"The Content Fragment Model ID (base64-encoded)."},"templateId":{"type":"string","minLength":1,"description":"The template UUID."}},"required":["authorUrl","modelId","templateId"]},"output_schema":null,"annotations":null},{"name":"render-aem-fragment-preview","title":null,"description":"Render and return the HTML preview of a Content Fragment. Optionally specify a templateId and variation.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"fragmentId":{"type":"string","minLength":1,"description":"The Content Fragment UUID to render."},"templateId":{"description":"Optional template UUID to render with.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"variation":{"description":"Optional variation name to render.","type":"string"}},"required":["authorUrl","fragmentId"]},"output_schema":null,"annotations":null},{"name":"get-aem-cf-delivery-html","title":null,"description":"Fetch the rendered HTML for a materialized Content Fragment delivery URL (sets Accept: text/html to avoid the delivery CDN's 406). Pass the authorUrl you published through and the deliveryUrl returned by publish-aem-cf-html-fragment; the deliveryUrl must be the preview-/publish-/delivery- tier of that same environment. Supports AEM Cloud Service environments with autogenerated '<tier>-p<N>-e<N>' delivery FQDNs; a custom-mapped delivery domain isn't supported here — fetch such a render directly.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"deliveryUrl":{"type":"string","minLength":1,"description":"The delivery URL returned by publish-aem-cf-html-fragment (its host must be the preview-/publish- tier of authorUrl)."}},"required":["authorUrl","deliveryUrl"]},"output_schema":null,"annotations":null},{"name":"create-aem-cf-template","title":null,"description":"Create an HTML visualization template for a Content Fragment Model. Use dryRun=true to validate without creating.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"modelId":{"type":"string","minLength":1,"description":"The Content Fragment Model ID (base64-encoded)."},"name":{"type":"string","minLength":1,"maxLength":512,"description":"Human-readable template name."},"content":{"type":"string","minLength":1,"description":"HTML template with Handlebars syntax. Field access: {{ fields.<fieldName> }} for text, {{{ fields.<fieldName> }}} for HTML (unescaped)."},"dryRun":{"description":"If true, validates the template without creating it.","type":"boolean"}},"required":["authorUrl","modelId","name","content"]},"output_schema":null,"annotations":null},{"name":"update-aem-cf-template","title":null,"description":"Update a template's name and/or content. Requires If-Match ETag from get-aem-cf-template.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"modelId":{"type":"string","minLength":1,"description":"The Content Fragment Model ID (base64-encoded)."},"templateId":{"type":"string","minLength":1,"description":"The template UUID."},"ifMatch":{"type":"string","minLength":1,"description":"The ETag value from a prior GET (must include quotes)."},"name":{"description":"New name for the template.","type":"string","minLength":1,"maxLength":512},"content":{"description":"HTML template with Handlebars syntax.","type":"string","minLength":1}},"required":["authorUrl","modelId","templateId","ifMatch"]},"output_schema":null,"annotations":null},{"name":"delete-aem-cf-template","title":null,"description":"Delete a template by templateId for a given model. Requires If-Match ETag. Cannot be undone.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"modelId":{"type":"string","minLength":1,"description":"The Content Fragment Model ID (base64-encoded)."},"templateId":{"type":"string","minLength":1,"description":"The template UUID."},"ifMatch":{"type":"string","minLength":1,"description":"The ETag value from a prior GET (must include quotes)."}},"required":["authorUrl","modelId","templateId","ifMatch"]},"output_schema":null,"annotations":null},{"name":"publish-aem-cf-html-fragment","title":null,"description":"Materialize a Content Fragment variation's rendered HTML on a delivery tier and return the authoritative deliveryUrl. Publish the fragment CONTENT to the target tier FIRST (manage-fragments operation=publish with tier), else this returns 409. Use tier='preview' for a pre-approval review render (non-live), tier='publish' for the live render. Fetch the rendered HTML from the returned deliveryUrl via get-aem-cf-delivery-html.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"fragmentId":{"type":"string","minLength":1,"description":"The Content Fragment UUID."},"templateId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"The render template UUID (from the model's templates list — NOT the model id)."},"variation":{"type":"string","minLength":1,"description":"The variation name (the sanitized AEM `name`; the master is accepted as `master` or `main`)."},"tier":{"type":"string","enum":["preview","publish"],"description":"Delivery tier to materialize on: 'preview' (non-live review surface) or 'publish' (live)."},"hydration":{"description":"Reference hydration control. Defaults to {enabled:true, maxDepth:5}.","type":"object","properties":{"enabled":{"type":"boolean","description":"Whether to dereference nested references when rendering."},"maxDepth":{"type":"integer","minimum":1,"maximum":10,"description":"Max reference-chain depth to dereference (spec range 1..10)."}},"required":["enabled","maxDepth"]}},"required":["authorUrl","fragmentId","templateId","variation","tier"]},"output_schema":null,"annotations":null},{"name":"tools_index","title":null,"description":"Workflow: tools_index → get_tool_details (include BOTH names in workflow and tools[]). Use for advisory-only questions (including rate limiting / HTTP 429) and list ONLY tool names from the catalog.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"detail":{"description":"Level of detail to return (default: summary)","type":"string","enum":["names","summary","full"]}}},"output_schema":null,"annotations":null},{"name":"search_tools","title":null,"description":"Workflow: search_tools → get_tool_details (include BOTH names in workflow and tools[]). Search tools by name/description to find the right tool for a task.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Substring to search in tool name/description."},"detail":{"description":"Level of detail to return (default: summary)","type":"string","enum":["names","summary","full"]}},"required":["query"]},"output_schema":null,"annotations":null},{"name":"get_tool_details","title":null,"description":"Use this tool to answer questions like 'What does [tool-name] do?' or 'What inputs does [tool-name] take?' - call get_tool_details instead of calling the actual tool when the user asks about a tool's purpose or parameters.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"toolName":{"type":"string","minLength":1,"description":"Exact name of the tool to get details for (e.g., 'patch-aem-page-content')."}},"required":["toolName"]},"output_schema":null,"annotations":null}],"tools_configurations":[],"resources":[],"resources_configurations":[],"prompts":[{"name":"server-capabilities","title":null,"description":"Information about this server's capabilities and limitations","arguments":null},{"name":"author-url-guide","title":null,"description":"How to choose authorUrl (AEM Author base URL)","arguments":null},{"name":"json-patch-guide","title":null,"description":"How to use JSON Patch (RFC 6902) for patch tools","arguments":null},{"name":"page-content-guide","title":null,"description":"How to interpret page content and prepare safe edits","arguments":null},{"name":"page-content-definition-guide","title":null,"description":"How to use page content definition to add components safely","arguments":null},{"name":"tool-discovery-guidance","title":null,"description":"How to discover tools progressively","arguments":null},{"name":"pagination-guide","title":null,"description":"How pagination works for list/search tools","arguments":null},{"name":"publishing-guide","title":null,"description":"How to publish content immediately or schedule it for a future date","arguments":null},{"name":"bulk-page-edit-guide","title":null,"description":"Safe workflow for bulk page edits using launches","arguments":null},{"name":"etag-guide","title":null,"description":"How ETags work for update operations","arguments":null}],"prompts_configurations":[]}],"documentation":["https://experienceleague.adobe.com/en/docs/experience-manager-cloud-service/content/ai-in-aem/using-mcp-with-aem-as-a-cloud-service","https://experienceleague.adobe.com/en/docs/experience-manager-learn/cloud-service/ai/mcp-servers/accelerate-content-operations-with-aem-mcp-server"],"installation":"Supported MCP clients: Anthropic Claude, Cursor, OpenAI ChatGPT, Microsoft Copilot Studio.\n\nGeneric setup (all clients):\n\t1. Add the AEM MCP server URL (https://mcp.adobeaemcloud.com/adobe/mcp/content).\n\t2. Save or activate the configuration to trigger the connection.\n\t3. Sign in with your Adobe ID when prompted.\n\t4. Verify that the application has discovered the MCP tools.\n\nUse the following JSON to configure the MCP server in Cursor:\n\n{\n\t\"mcpServers\": {\n\t\t\"AEM-Content\": {\n\t\t\t\"url\": \"https://mcp.adobeaemcloud.com/adobe/mcp/content\"\n\t\t}\n\t}\n}\n\nCursor: Settings ⇒ Cursor Settings ⇒ Tools ＆ MCP ⇒ Add Custom MCP (or New MCP Server). Paste the JSON above into mcp.json. Click Connect, sign in with Adobe ID, then confirm the server shows as connected.","authentication":"OAuth with Adobe ID. When connecting, sign in with your Adobe ID. MCP tools enforce your existing AEM permissions.","open_contribution":null,"adobe_products":["Adobe Experience Manager"],"support_contact":"aemcs-mcp-feedback@adobe.com","fi_codes":[],"vendor":"Adobe","vendor_name":null,"surface":["Developer"],"adobe_metadata":{"adobe_service_id":"aem-content-mcp-001","developer_distribution_app_id":null,"developer_distribution_version_id":null},"created_by":"0363113C53A0541E0A4C86E7@AdobeID","created_at":"2026-03-12T15:42:18.279000Z","updated_at":"2026-10-20T09:02:16.260000Z"},{"id":"d09eca33-2f22-4d06-8ed6-b262163aff9f","name":"aem-content-mcp-readonly","title":"AEM Content MCP Server (Read-Only)","summary":"AI-powered read-only access to AEM as a Cloud Service. Browse pages, fragments, and launches from your IDE or chat app using natural language—no create, update, or delete operations.","description":"The AEM Content MCP Server (Read-Only) variant exposes tools for read-only operations on pages, content fragments and launches. It is designed for environments where write access is restricted or for users who only need to discover, browse, and inspect content.\n\nUsing the Read-Only Content MCP Server provides:\n\n⋅ Natural-language interaction: Describe intent (e.g., \"show me the hero banner content for this page\") and let the LLM invoke the appropriate tools.\n⋅ Consistent experience: The same AEM MCP tools work across Cursor, ChatGPT, Claude, and Microsoft Copilot Studio.\n⋅ Security preserved: Requests run under the authenticated user identity; tools enforce existing AEM permissions.\n⋅ Representative workflows: Environment discovery, sites management, page browsing, content fragment inspection, launch listing, and asset import status checking.\n\nWhen Using MCP in Agentic Systems\n\nMCP Servers are designed for human-operated MCP Clients with interactive UX and human oversight. The MCP Tools spec recommends a human in the loop who can approve or deny tool invocations.\n\nIf you use MCP Servers in an agentic or autonomous system, treat that as a separate compatibility tier. Do not hardcode tool names in prompts, allowlists, or routing logic. In MCP, the tool name is a programmatic identifier, the description is the model-facing hint for the LLM. Prefer capability or description based prompting and selection.\n\nImplement runtime discovery via tools/list, handle tool-list changes (notifications/tools/list_changed), and align with the MCP Server provider on onboarding and versioning if you need stability guarantees beyond the protocol baseline.","tags":["content-management","aem","mcp","agentic-ai","read-only","hide-from-playground"],"deployment_mode":["remote"],"category":["Developer Tools","Product Feature","Workflow Automation"],"lifecycle":"production","owner":["GRP-AEM-MCP-OWNERS"],"server_type":["external"],"base64_icon":null,"is_active":true,"status":"active","packages":[],"repository":null,"version":"1.0.0","version_release_notes":null,"remotes":[{"transport_type":"streamable_http","url":"https://mcp.adobeaemcloud.com/adobe/mcp/content-readonly","headers":[{"name":"Authorization","description":null,"value":null,"is_secret":false,"is_required":true,"format":"string","default":null,"choices":null,"variables":null}],"tools":[{"name":"get-all-aem-author-environments","title":null,"description":"Workflow: get-all-aem-author-environments → get-aem-sites.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{}},"output_schema":null,"annotations":null},{"name":"get-aem-sites","title":null,"description":"List sites in the current AEM environment. A site is a logical grouping that anchors pages; an AEM author instance can serve multiple sites. Human-readable names (e.g. 'briskbuffalo') are site names—call this tool to resolve a site name to its siteId (64+ chars) before passing it to other tools.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"cursor":{"description":"Cursor for pagination, taken from a previous call to get-aem-sites","type":"string"},"limit":{"description":"Limit for result set (max 10)","type":"number"}},"required":["authorUrl"]},"output_schema":null,"annotations":null},{"name":"get-aem-pages","title":null,"description":"Browse and list pages with pagination. Use to discover pages and pageId values. Note: human-readable words are page/site names, not IDs—resolve names via get-aem-sites or search-aem-pages first.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"siteId":{"description":"Only list Pages that belong to the given Site. A siteId is 64+ characters; shorter values are likely siteName—call get-aem-sites first to find the correct siteId.","type":"string"},"parentPageId":{"description":"Only list Pages that belong to is child of the given Page","type":"string"},"publishPath":{"description":"Only list Pages that are published under the given path","type":"string"},"createdBy":{"description":"Filter by creator authorizableId (exact match, e.g., 'admin' or 'user@adobe.com')","type":"string"},"modifiedBy":{"description":"Filter by last modifier authorizableId (exact match)","type":"string"},"publishedBy":{"description":"Filter by publisher authorizableId (exact match)","type":"string"},"touchedBy":{"description":"Filter by authorizableId of user who created OR modified the page (OR logic)","type":"string"},"createdAfter":{"description":"Filter pages created on or after this date (ISO 8601, e.g., '2024-01-15' or '2024-01-15T09:30:00Z')","type":"string"},"createdBefore":{"description":"Filter pages created before this date (exclusive, ISO 8601)","type":"string"},"modifiedAfter":{"description":"Filter pages modified on or after this date (ISO 8601)","type":"string"},"modifiedBefore":{"description":"Filter pages modified before this date (exclusive, ISO 8601)","type":"string"},"publishedAfter":{"description":"Filter pages published on or after this date (ISO 8601)","type":"string"},"publishedBefore":{"description":"Filter pages published before this date (exclusive, ISO 8601)","type":"string"},"sort":{"description":"Sort order: 'path', '-path', 'created', '-created', 'modified', '-modified', 'touched', '-touched'. Prefix '-' for descending. Default: 'path'.","type":"string"},"cursor":{"description":"Cursor for pagination, taken from a previous call to get-aem-pages","type":"string"},"limit":{"description":"Limit for result set (max 10)","type":"number"}},"required":["authorUrl"]},"output_schema":null,"annotations":null},{"name":"search-aem-pages","title":null,"description":"Full-text keyword search for pages (requires a query term). To paginate search results, pass the returned cursor back to this tool (search-aem-pages). For browsing all pages without a keyword use get-aem-pages instead.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"q":{"type":"string","minLength":1,"description":"The full-text search query (required). Searches across title, description, and other page properties. Uses whole-word matching in any order."},"siteId":{"description":"Filter results to only include pages from the specified Site. A siteId is 64+ characters; shorter values are likely siteName—call get-aem-sites first to find the correct siteId.","type":"string"},"parentPageId":{"description":"Filter results to only include child pages of the specified parent Page","type":"string"},"createdBy":{"description":"Filter by creator authorizableId (exact match, e.g., 'admin' or 'user@adobe.com')","type":"string"},"modifiedBy":{"description":"Filter by last modifier authorizableId (exact match)","type":"string"},"publishedBy":{"description":"Filter by publisher authorizableId (exact match)","type":"string"},"touchedBy":{"description":"Filter by authorizableId of user who created OR modified the page (OR logic)","type":"string"},"createdAfter":{"description":"Filter pages created on or after this date (ISO 8601, e.g., '2024-01-15' or '2024-01-15T09:30:00Z')","type":"string"},"createdBefore":{"description":"Filter pages created before this date (exclusive, ISO 8601)","type":"string"},"modifiedAfter":{"description":"Filter pages modified on or after this date (ISO 8601)","type":"string"},"modifiedBefore":{"description":"Filter pages modified before this date (exclusive, ISO 8601)","type":"string"},"publishedAfter":{"description":"Filter pages published on or after this date (ISO 8601)","type":"string"},"publishedBefore":{"description":"Filter pages published before this date (exclusive, ISO 8601)","type":"string"},"sort":{"description":"Sort order: 'path', '-path', 'created', '-created', 'modified', '-modified', 'touched', '-touched'. Prefix '-' for descending. Default: 'path'.","type":"string"},"cursor":{"description":"Cursor for pagination, taken from a previous call to search-aem-pages","type":"string"},"limit":{"description":"Maximum number of results to return (default: 10, max: 50)","type":"number","minimum":1,"maximum":50}},"required":["authorUrl","q"]},"output_schema":null,"annotations":null},{"name":"get-aem-page-metadata","title":null,"description":"Get page metadata (title, description) by pageId. Returns ETag and JSON response.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"pageId":{"type":"string","description":"The pageId of the Page metadata to be retrieved."}},"required":["authorUrl","pageId"]},"output_schema":null,"annotations":null},{"name":"get-aem-page-content","title":null,"description":"Get page content structure (components + properties) and current ETag.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"pageId":{"type":"string","description":"The pageId of the Page Content to be retrieved."}},"required":["authorUrl","pageId"]},"output_schema":null,"annotations":null},{"name":"get-aem-page-content-definition","title":null,"description":"Get page content definition: allowed components + placement rules.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"pageId":{"type":"string","description":"The pageId of the Page Content definition (used components and placement rules on the page) to be retrieved."}},"required":["authorUrl","pageId"]},"output_schema":null,"annotations":null},{"name":"get-aem-page-preview-url","title":null,"description":"Get a browser preview URL for a pageId (draft/author preview).","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"pageId":{"type":"string","description":"The pageId of the Page content to be retrieved as HTML preview."}},"required":["authorUrl","pageId"]},"output_schema":null,"annotations":null},{"name":"get-aem-page-editor-url","title":null,"description":"Get the AEM Author editor URL for a pageId (clickable edit link).","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"pageId":{"type":"string","description":"The pageId of the Page to get the editor link for."}},"required":["authorUrl","pageId"]},"output_schema":null,"annotations":null},{"name":"search-aem-assets","title":null,"description":"Search AEM **DAM assets** on author or delivery tier (paged). Returns metadata and delivery URLs. For **site pages**, use `search-aem-pages`, not this tool.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"aemUrl":{"type":"string","description":"AEM URL for asset search: author `https://author-….adobeaemcloud.com` or delivery `https://delivery-….adobeaemcloud.com`. Discover AEM environments via get-all-aem-author-environments. See 'author-url-guide' prompt."},"match":{"description":"Text search for broad keyword discovery. Map user keywords into a short phrase; combine with `termFilters` for MIME (e.g. PDF). Useful for broad searches over campaign, product, tag, or other business metadata when the exact field path is unknown. For delivery-tier folder-like searches, use meaningful path tokens as keywords and avoid generic tokens like `content` and `dam`. See tool description for examples.","type":"string"},"termFilters":{"description":"Exact term filter(s). Use when you know the exact field path and value. Examples: MIME `repositoryMetadata.dc:format` = `application/pdf`; images = [\"image/jpeg\",\"image/png\"]; tags / taxonomy keywords `assetMetadata.xcm:keywords`; machine keywords `assetMetadata.xcm:machineKeywords`; author-tier folder path `repositoryMetadata.repo:ancestors` = `/content/dam/abcd`. For customer-defined campaign, product, or other business metadata, first inspect returned `assetMetadata`, then reuse the discovered field path here. See tool description.","type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"Metadata path for an exact term match. Use standard field paths directly, e.g. `repositoryMetadata.dc:format`, `repositoryMetadata.repo:name`, `assetMetadata.dc:title`, `assetMetadata.xcm:keywords`, `assetMetadata.xcm:machineKeywords`. For customer-defined fields, first inspect returned `assetMetadata` keys, then reuse the discovered field path here."},"value":{"anyOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"One value or multiple OR values (e.g. several MIME types). Example PDF: \"application/pdf\"."}},"required":["key","value"]}},"rangeFilters":{"description":"Range on numeric size or date fields. Date values must use AEM timestamp format `YYYY-MM-DDTHH:mm:ss.SSSZ`. Examples in tool description.","type":"array","items":{"type":"object","properties":{"key":{"type":"string","description":"Field to bound, e.g. `repositoryMetadata.repo:size` (numeric), `repositoryMetadata.repo:createDate` / `repo:modifyDate` (AEM timestamp strings in `YYYY-MM-DDTHH:mm:ss.SSSZ` format)."},"gt":{"description":"Greater than (number or AEM timestamp string)","anyOf":[{"type":"number"},{"type":"string"}]},"gte":{"description":"Greater than or equal (number or AEM timestamp string)","anyOf":[{"type":"number"},{"type":"string"}]},"lt":{"description":"Less than (number or AEM timestamp string)","anyOf":[{"type":"number"},{"type":"string"}]},"lte":{"description":"Less than or equal (number or AEM timestamp string)","anyOf":[{"type":"number"},{"type":"string"}]}},"required":["key"]}},"orderBy":{"description":"Sort order. Example newest first: field `repositoryMetadata.repo:modifyDate`, direction `desc`.","type":"array","items":{"type":"object","properties":{"field":{"type":"string","description":"Sort field path, e.g. `repositoryMetadata.repo:createDate`, `repositoryMetadata.repo:modifyDate`, `repositoryMetadata.repo:size`, `repositoryMetadata.repo:name`."},"direction":{"description":"Sort direction (default: 'asc')","type":"string","enum":["asc","desc"]}},"required":["field"]}},"projectedFields":{"description":"Optional Asset Search API projectedFields object. Use for count-only or report/display field control.","type":"object","properties":{"includes":{"description":"Field paths to include in results, e.g. `repositoryMetadata.repo:path` or `assetMetadata.dc:title`.","type":"array","items":{"type":"string"}},"excludes":{"description":"Field paths to exclude from results.","type":"array","items":{"type":"string"}}}},"facets":{"description":"Optional top-level Asset Search API facet requests, e.g. CATEGORY facets by `repositoryMetadata.dc:format`.","type":"array","items":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{}}},"limit":{"description":"Maximum number of items to retrieve (default: 20, max: 100)","type":"number","minimum":1,"maximum":100},"cursor":{"description":"Cursor for pagination - use the cursor from a previous response to get the next page","type":"string"}},"required":["aemUrl"]},"output_schema":null,"annotations":null},{"name":"get-aem-asset-import-status","title":null,"description":"Check status of an import-aem-asset job using jobId. While the job is in progress, the response may include a suggested wait time before polling again; honor it. Success when state COMPLETED and progress matches imported.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"jobId":{"type":"string","description":"The job ID returned by the import-aem-asset-cloud tool"}},"required":["authorUrl","jobId"]},"output_schema":null,"annotations":null},{"name":"list-aem-fragments","title":null,"description":"List content fragments (paged) with optional folder filtering. Also use with a launch path (from get-aem-launch) to list fragments inside a launch.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"limit":{"description":"Number of results to return (1-50, default: 10). Higher values may cause performance issues with all-hydrated references.","type":"number","minimum":1,"maximum":50},"cursor":{"description":"Base64-encoded pagination cursor from previous response. Use to get next page of results.","type":"string"},"path":{"description":"Filter fragments by folder path (e.g., '/content/dam/my-project'). Typically starts with '/content/dam'. Also accepts CF launch paths (from get-aem-launch) to list fragments inside a launch. Defaults to '/content/dam' if not provided.","type":"string"},"projection":{"description":"Data projection level: FULL (all field data, default), SUMMARY (basic info), MINIMAL (IDs only).","type":"string","enum":["FULL","SUMMARY","MINIMAL"]},"references":{"description":"Reference resolution mode: direct (IDs only), direct_hydrated (basic ref data), all-hydrated (full ref data).","type":"string","enum":["direct","direct_hydrated","all-hydrated"]}},"required":["authorUrl"]},"output_schema":null,"annotations":null},{"name":"resolve-aem-fragment-path","title":null,"description":"Convert a DAM fragmentPath to fragment UUID. Only needed for get-aem-fragment or patch-aem-fragment (which require UUID). NOT needed for publish/unpublish — those accept paths directly.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"fragmentPath":{"type":"string","minLength":1,"description":"The DAM path to resolve (e.g., '/content/dam/wknd-shared/en/adventures/bali-surf-camp/bali-surf-camp'). Must start with '/content/dam' or '/content/launches' (for fragments inside a CF launch)."}},"required":["authorUrl","fragmentPath"]},"output_schema":null,"annotations":null},{"name":"get-aem-fragment","title":null,"description":"Get a content fragment by UUID or DAM path. Returns current ETag + fields.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"fragmentId":{"description":"The content fragment UUID (e.g., '29d216c9-c6ed-458a-aeff-befc8dfaf97b'). Provide this OR fragmentPath.","type":"string"},"fragmentPath":{"description":"DAM path to resolve (e.g., '/content/dam/wknd-shared/en/adventures/bali-surf-camp/bali-surf-camp'). Provide this OR fragmentId. Must start with '/content/dam' or '/content/launches'.","type":"string"}},"required":["authorUrl"]},"output_schema":null,"annotations":null},{"name":"get-aem-fragment-model","title":null,"description":"Get detailed schema for a content fragment model. Returns field definitions, types, and validation rules. Use before creating fragments. Also use before patch/delete via manage-aem-fragments-batch (target=models) to retrieve the current ETag required for If-Match.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"modelId":{"type":"string","minLength":1,"description":"The content fragment model ID (base64 encoded). Use search-aem-fragment-models to find available models and their IDs."}},"required":["authorUrl","modelId"]},"output_schema":null,"annotations":null},{"name":"search-aem-fragments","title":null,"description":"Search and filter content fragments with comprehensive filtering. Preferred over list-aem-fragments when you need to filter by date, author, status, model, tags, locale, path, custom metadata, or full-text.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"limit":{"description":"Number of results to return (1-50, default: 10).","type":"number","minimum":1,"maximum":50},"cursor":{"description":"Base64-encoded pagination cursor from previous response. Use to get next page of results.","type":"string"},"projection":{"description":"Data projection level: FULL (all field data, default), SUMMARY (basic info), MINIMAL (IDs only).","type":"string","enum":["FULL","SUMMARY","MINIMAL"]},"path":{"description":"Filter fragments under this path (e.g., '/content/dam/my-project'). Must start with /content/dam or /content/launches.","type":"string","pattern":"^\\/content\\/(dam|launches)(\\/.*)?$"},"onlyDirectChildren":{"description":"When true, only direct children under the specified path are retrieved (default: false). Requires path to be set.","type":"boolean"},"createdAfter":{"description":"Filter fragments created after this date (ISO 8601, e.g., '2021-01-30T08:30:00Z').","type":"string"},"createdBefore":{"description":"Filter fragments created before this date (ISO 8601, e.g., '2021-01-30T08:30:00Z').","type":"string"},"createdBy":{"description":"Filter by creator user IDs. Returns fragments created by any of the listed users.","minItems":1,"type":"array","items":{"type":"string","minLength":1}},"modifiedAfter":{"description":"Filter fragments modified after this date (ISO 8601, e.g., '2021-01-30T08:30:00Z').","type":"string"},"modifiedBefore":{"description":"Filter fragments modified before this date (ISO 8601, e.g., '2021-01-30T08:30:00Z').","type":"string"},"modifiedBy":{"description":"Filter by modifier user IDs. Returns fragments modified by any of the listed users.","minItems":1,"type":"array","items":{"type":"string","minLength":1}},"modifiedOrCreatedAfter":{"description":"Filter fragments modified OR created after this date (ISO 8601, e.g., '2021-01-30T08:30:00Z').","type":"string"},"modifiedOrCreatedBefore":{"description":"Filter fragments modified OR created before this date (ISO 8601, e.g., '2021-01-30T08:30:00Z').","type":"string"},"modifiedOrCreatedBy":{"description":"Filter by user IDs for create or modify events. Returns fragments created or modified by any of the listed users.","minItems":1,"type":"array","items":{"type":"string","minLength":1}},"publishedAfter":{"description":"Filter fragments published after this date (ISO 8601, e.g., '2021-01-30T08:30:00Z').","type":"string"},"publishedBefore":{"description":"Filter fragments published before this date (ISO 8601, e.g., '2021-01-30T08:30:00Z').","type":"string"},"publishedBy":{"description":"Filter by publisher user IDs. Returns fragments published by any of the listed users.","minItems":1,"type":"array","items":{"type":"string","minLength":1}},"status":{"description":"Filter by fragment status. Valid values: NEW, DRAFT, PUBLISHED, MODIFIED, UNPUBLISHED.","type":"array","items":{"type":"string","enum":["NEW","DRAFT","PUBLISHED","MODIFIED","UNPUBLISHED"]}},"modelIds":{"description":"Filter by model IDs (Base64URL-encoded). Only fragments based on models matching at least one ID are retrieved. If both modelIds and modelTags are provided, fragments matching either criteria are returned. Use search-aem-fragment-models to resolve model names to IDs.","type":"array","items":{"type":"string"}},"modelTags":{"description":"Filter by model tags. Only fragments based on models matching at least one tag are retrieved. If both modelIds and modelTags are provided, fragments matching either criteria are returned.","type":"array","items":{"type":"string"}},"tags":{"description":"Filter by tags. Returns fragments that have any of these tags.","type":"array","items":{"type":"string"}},"locale":{"description":"Filter by locale codes (BCP 47, e.g., ['en', 'fr', 'de']). Returns fragments in any of these locales.","type":"array","items":{"type":"string"}},"metadata":{"description":"Filter by custom metadata key-value pairs (max 10). Returns fragments whose metadata matches at least one of the provided entries.","minItems":1,"maxItems":10,"type":"array","items":{"type":"object","properties":{"key":{"type":"string","minLength":1,"pattern":"^[^\\[\\]\\*|/]+$","description":"The name of the metadata property to filter by."},"value":{"type":"string","minLength":1,"description":"The value of the metadata property to filter by."}},"required":["key","value"]}},"fullText":{"description":"Full text search. When provided, only fragments whose content matches the text will be retrieved.","type":"object","properties":{"text":{"type":"string","minLength":1,"description":"A text value used to search for Content Fragments. For semantic (vector) search instead of keyword search, prepend the literal token '?{}?' to the text (e.g. '?{}?insulin affordability programs under $35'); when doing so, omit queryMode."},"queryMode":{"description":"Query mode for keyword full text search (default: AS_IS). Does not apply to semantic search (text prefixed with '?{}?'). EXACT_WORDS: terms rendered as they are; EXACT_PHRASE: terms rendered as a phrase; ALL_TERMS: every term as a 'contains' operation; EDGES: only edge terms as 'contains'; AS_IS: use search term as provided.","type":"string","enum":["EXACT_WORDS","EXACT_PHRASE","ALL_TERMS","EDGES","AS_IS"]}},"required":["text"]},"sortBy":{"description":"Sort field passed as 'on' to the fragments search API. Valid values: created, modified, modifiedOrCreated, published, name, title.","type":"string","enum":["created","modified","modifiedOrCreated","published","name","title"]},"sortOrder":{"description":"Sort order: asc or desc (sent to the API as ASC or DESC). Used with sortBy.","type":"string","enum":["asc","desc"]},"responseFormat":{"description":"Response format: 'full' returns complete fragment data (default), 'summary' returns only id, path, and eTag per fragment — useful when driving follow-up calls and token efficiency matters.","type":"string","enum":["full","summary"]}},"required":["authorUrl"]},"output_schema":null,"annotations":null},{"name":"search-aem-fragment-models","title":null,"description":"List and search content fragment models. Call with no filters to list all models (unfiltered, paged). Use filters for refined results: folder (enabledForFolder), configuration path (configurationFolder), name, tags, status, replication status, or dates.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"limit":{"description":"Number of results to return (1-50, default: 10).","type":"number","minimum":1,"maximum":50},"cursor":{"description":"Base64-encoded pagination cursor from previous response. Use to get next page of results.","type":"string"},"projection":{"description":"Data projection level: FULL (all field data, default), SUMMARY (basic info), MINIMAL (IDs only).","type":"string","enum":["FULL","SUMMARY","MINIMAL"]},"detail":{"description":"Response detail level. FULL (default): return all model data. SUMMARY: return only name, path, description, and fields (each field trimmed to name, label, type). Reduces response size when full schema data is not needed.","type":"string","enum":["FULL","SUMMARY"]},"includeModelReferences":{"description":"Include model references in the response. Default: false.","type":"boolean"},"name":{"description":"Search by model display name. Use with nameMatching to control match type.","type":"string"},"nameMatching":{"description":"Name matching mode: PARTIAL_MATCH (contains, default) or EXACT_MATCH (exact match). Only used if 'name' is provided.","type":"string","enum":["PARTIAL_MATCH","EXACT_MATCH"]},"technicalName":{"description":"Search by model technical name. Use with technicalNameMatching to control match type.","type":"string"},"technicalNameMatching":{"description":"Technical name matching mode: PARTIAL_MATCH (contains, default) or EXACT_MATCH (exact match). Only used if 'technicalName' is provided.","type":"string","enum":["PARTIAL_MATCH","EXACT_MATCH"]},"createdAfter":{"description":"Filter models created after this date (ISO 8601 format, e.g., '2021-01-30T08:30:00Z').","type":"string"},"createdBefore":{"description":"Filter models created before this date (ISO 8601 format, e.g., '2021-01-30T08:30:00Z').","type":"string"},"modifiedAfter":{"description":"Filter models modified after this date (ISO 8601 format, e.g., '2021-01-30T08:30:00Z').","type":"string"},"modifiedBefore":{"description":"Filter models modified before this date (ISO 8601 format, e.g., '2021-01-30T08:30:00Z').","type":"string"},"modifiedOrCreatedAfter":{"description":"Filter models modified OR created after this date (ISO 8601 format, e.g., '2021-01-30T08:30:00Z').","type":"string"},"modifiedOrCreatedBefore":{"description":"Filter models modified OR created before this date (ISO 8601 format, e.g., '2021-01-30T08:30:00Z').","type":"string"},"publishedAfter":{"description":"Filter models published after this date (ISO 8601 format, e.g., '2021-01-30T08:30:00Z').","type":"string"},"publishedBefore":{"description":"Filter models published before this date (ISO 8601 format, e.g., '2021-01-30T08:30:00Z').","type":"string"},"configurationFolder":{"description":"Filter by configuration folder path (e.g., '/conf/mysite'). Returns models within this configuration.","type":"string"},"enabledForFolder":{"description":"Filter models that are enabled for a specific folder path (e.g., '/content/dam/mysite').","type":"string"},"status":{"description":"Filter by model status. Valid values: enabled, disabled, draft (case-insensitive input; sent lowercase).","type":"array","items":{"type":"string","enum":["enabled","disabled","draft"]}},"replicationStatus":{"description":"Filter by replication status. Valid values: PUBLISHED, UNPUBLISHED, MODIFIED, NEVER_PUBLISHED.","type":"array","items":{"type":"string","enum":["PUBLISHED","UNPUBLISHED","MODIFIED","NEVER_PUBLISHED"]}},"locked":{"description":"Filter by lock status. true = locked models, false = unlocked models.","type":"boolean"},"ids":{"description":"Filter by specific model IDs (Base64URLId). Returns only models matching these IDs.","type":"array","items":{"type":"string"}},"tags":{"description":"Filter by tags. Returns models that have any of these tags.","type":"array","items":{"type":"string"}},"sortBy":{"description":"Field to sort by. Valid values: created, modified, published, name, technicalName.","type":"string","enum":["created","modified","published","name","technicalName","title"]},"sortOrder":{"description":"Sort order: asc (ascending) or desc (descending). Only used if sortBy is provided.","type":"string","enum":["asc","desc"]}},"required":["authorUrl"]},"output_schema":null,"annotations":null},{"name":"manage-aem-fragment-versions","title":null,"description":"Manage fragment versions. Actions:","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"fragmentId":{"type":"string","description":"The content fragment ID (UUID)."},"action":{"type":"string","enum":["list","get"],"description":"Action to perform: list or get."},"versionId":{"description":"Version ID (required for get and restore).","type":"string"},"label":{"description":"Optional label for create (e.g., \"Before major update\").","type":"string"},"comment":{"description":"Optional comment for create (e.g., \"Backup before content changes\").","type":"string"},"limit":{"description":"Number of results to return for list (default: 10).","type":"number"},"cursor":{"description":"Cursor for pagination for list (base64 encoded).","type":"string"}},"required":["authorUrl","fragmentId","action"]},"output_schema":null,"annotations":null},{"name":"manage-aem-fragment-variations","title":null,"description":"Manage fragment variations (list, get). Use this tool for ALL variation-specific read operations—not patch-aem-fragment (which patches the main fragment, not its variations).","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"fragmentId":{"type":"string","minLength":1,"description":"The content fragment UUID."},"action":{"type":"string","enum":["list","get"],"description":"Action to perform. Provide the matching sub-object for this action."},"list":{"description":"Parameters for action=list.","type":"object","properties":{"limit":{"description":"Max variations to return (1-50, default: server default).","type":"integer","minimum":1,"maximum":50},"cursor":{"description":"Pagination cursor from a previous response.","type":"string"}}},"get":{"description":"Parameters for action=get.","type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Single variation name to retrieve full content for. E.g., 'master', 'mobile', 'web'. To list/discover all variation names, use action=list instead of calling get repeatedly."}},"required":["name"]},"create":{"description":"Parameters for action=create.","type":"object","properties":{"variations":{"minItems":1,"maxItems":50,"type":"array","items":{"type":"object","properties":{"title":{"type":"string","minLength":1,"description":"Variation title. E.g., 'Mobile', 'German'. Name is auto-generated from this."},"description":{"description":"Optional description explaining the variation's purpose.","type":"string"}},"required":["title"]},"description":"Variations to create. Max 50. One sub-request per variation."}},"required":["variations"]},"patch":{"description":"Parameters for action=patch.","type":"object","properties":{"edits":{"minItems":1,"maxItems":50,"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Variation name to patch. E.g., 'mobile', 'web'. Get names from action=list, not per-variation get calls. ETag is fetched internally—do not pre-fetch it."},"operations":{"minItems":1,"type":"array","items":{"oneOf":[{"type":"object","properties":{"op":{"type":"string","const":"add"},"path":{"type":"string","minLength":1,"description":"The location where information should be added"},"value":{"description":"The value to place at the given path"}},"required":["op","path","value"]},{"type":"object","properties":{"op":{"type":"string","const":"replace"},"path":{"type":"string","minLength":1,"description":"The location where information should be replaced"},"value":{"description":"The new value to place at the given path"}},"required":["op","path","value"]},{"type":"object","properties":{"op":{"type":"string","const":"copy"},"from":{"type":"string","minLength":1,"description":"A path pointing to the entity to copy from"},"path":{"type":"string","minLength":1,"description":"A path pointing to the location to copy to"}},"required":["op","from","path"]},{"type":"object","properties":{"op":{"type":"string","const":"move"},"from":{"type":"string","minLength":1,"description":"A path pointing to the entity to move from"},"path":{"type":"string","minLength":1,"description":"A path pointing to the location to move to"}},"required":["op","from","path"]},{"type":"object","properties":{"op":{"type":"string","const":"remove"},"path":{"type":"string","minLength":1,"description":"A path pointing to the entity to be removed"}},"required":["op","path"]}]},"description":"JSON Patch operations to apply. See 'json-patch-guide' prompt."}},"required":["name","operations"]},"description":"Edits to apply. Max 50. ETag fetched automatically per variation before patching."}},"required":["edits"]},"delete":{"description":"Parameters for action=delete.","type":"object","properties":{"variations":{"minItems":1,"maxItems":50,"type":"array","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"description":"Variation name to delete. Cannot delete master/main. Get names from action=list, not per-variation get calls. ETag is fetched internally—do not pre-fetch it."}},"required":["name"]},"description":"Variations to delete. Max 50. ETag fetched automatically per variation before deleting. Irreversible."},"unlinkReferences":{"description":"When true, removes references to each deleted variation from other fragments (default: false).","type":"boolean"}},"required":["variations"]},"variationName":{"description":"DEPRECATED — use get.name / patch.edits[].name / delete.variations[].name instead. Retained for backward compatibility; will be removed after the migration window.","type":"string"},"title":{"description":"DEPRECATED — use create.variations[].title instead. Retained for backward compatibility; will be removed after the migration window.","type":"string"},"description":{"description":"DEPRECATED — use create.variations[].description instead. Retained for backward compatibility; will be removed after the migration window.","type":"string"},"ifMatch":{"description":"DEPRECATED — use patch or delete actions (ETag is fetched automatically internally). Retained for backward compatibility; will be removed after the migration window.","type":"string"},"patchOperations":{"description":"DEPRECATED — use patch.edits[].operations instead (provide a JSON Patch array object, not a stringified string). Retained for backward compatibility; will be removed after the migration window.","type":"string"}},"required":["authorUrl","fragmentId","action"]},"output_schema":null,"annotations":null},{"name":"get-aem-launch-job-status","title":null,"description":"Get the status of a launch job. Call this tool after starting a launch job to track its progress. If the job is still ongoing or not started, use the tool again, and keep polling until status changes.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"jobId":{"type":"string","description":"The id of a launch job (e.g. 2025%7E10%7E30%7E7%7E23%7Efd69176a-aea8-4d4c-b464-bc3b41d3d17d_3)."}},"required":["authorUrl","jobId"]},"output_schema":null,"annotations":null},{"name":"get-aem-launch","title":null,"description":"Get a launch by its UUID and return current ETag + launch details.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"launchId":{"type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$","description":"The UUID of the launch to get (e.g., '671a4996-047f-4a15-bf8c-8141f264d7db')"}},"required":["authorUrl","launchId"]},"output_schema":null,"annotations":null},{"name":"list-aem-launches","title":null,"description":"List launches with pagination.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"cursor":{"description":"Base64-encoded pagination cursor from previous response. Use to get next page of results.","type":"string"},"limit":{"description":"Number of results to return (1-50, default: 10).","type":"number","minimum":1,"maximum":50}},"required":["authorUrl"]},"output_schema":null,"annotations":null},{"name":"list-aem-cf-templates","title":null,"description":"List HTML visualization templates for a Content Fragment Model (paged).","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"modelId":{"type":"string","minLength":1,"description":"The Content Fragment Model ID (base64-encoded)."},"limit":{"description":"Max number of items to retrieve (1-50).","type":"number","minimum":1,"maximum":50},"cursor":{"description":"Opaque pagination cursor from previous response.","type":"string"}},"required":["authorUrl","modelId"]},"output_schema":null,"annotations":null},{"name":"get-aem-cf-template","title":null,"description":"Get a specific template by templateId for a given model. Returns ETag and JSON details.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"modelId":{"type":"string","minLength":1,"description":"The Content Fragment Model ID (base64-encoded)."},"templateId":{"type":"string","minLength":1,"description":"The template UUID."}},"required":["authorUrl","modelId","templateId"]},"output_schema":null,"annotations":null},{"name":"render-aem-fragment-preview","title":null,"description":"Render and return the HTML preview of a Content Fragment. Optionally specify a templateId and variation.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"authorUrl":{"type":"string","description":"AEM Author base URL (e.g., 'https://author-xxxx.adobeaemcloud.com' or 'https://author-xxx.adobecqms.net'). Discover via get-all-aem-author-environments. See 'author-url-guide' prompt."},"fragmentId":{"type":"string","minLength":1,"description":"The Content Fragment UUID to render."},"templateId":{"description":"Optional template UUID to render with.","type":"string","format":"uuid","pattern":"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"},"variation":{"description":"Optional variation name to render.","type":"string"}},"required":["authorUrl","fragmentId"]},"output_schema":null,"annotations":null},{"name":"tools_index","title":null,"description":"Workflow: tools_index → get_tool_details (include BOTH names in workflow and tools[]). Use for advisory-only questions (including rate limiting / HTTP 429) and list ONLY tool names from the catalog.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"detail":{"description":"Level of detail to return (default: summary)","type":"string","enum":["names","summary","full"]}}},"output_schema":null,"annotations":null},{"name":"search_tools","title":null,"description":"Workflow: search_tools → get_tool_details (include BOTH names in workflow and tools[]). Search tools by name/description to find the right tool for a task.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"query":{"type":"string","minLength":1,"description":"Substring to search in tool name/description."},"detail":{"description":"Level of detail to return (default: summary)","type":"string","enum":["names","summary","full"]}},"required":["query"]},"output_schema":null,"annotations":null},{"name":"get_tool_details","title":null,"description":"Use this tool to answer questions like 'What does [tool-name] do?' or 'What inputs does [tool-name] take?' - call get_tool_details instead of calling the actual tool when the user asks about a tool's purpose or parameters.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"toolName":{"type":"string","minLength":1,"description":"Exact name of the tool to get details for (e.g., 'patch-aem-page-content')."}},"required":["toolName"]},"output_schema":null,"annotations":null}],"tools_configurations":[],"resources":[],"resources_configurations":[],"prompts":[{"name":"server-capabilities","title":null,"description":"Information about this server's capabilities and limitations","arguments":null},{"name":"author-url-guide","title":null,"description":"How to choose authorUrl (AEM Author base URL)","arguments":null},{"name":"json-patch-guide","title":null,"description":"How to use JSON Patch (RFC 6902) for patch tools","arguments":null},{"name":"page-content-guide","title":null,"description":"How to interpret page content and prepare safe edits","arguments":null},{"name":"page-content-definition-guide","title":null,"description":"How to use page content definition to add components safely","arguments":null},{"name":"tool-discovery-guidance","title":null,"description":"How to discover tools progressively","arguments":null},{"name":"pagination-guide","title":null,"description":"How pagination works for list/search tools","arguments":null},{"name":"publishing-guide","title":null,"description":"How to publish content immediately or schedule it for a future date","arguments":null},{"name":"bulk-page-edit-guide","title":null,"description":"Safe workflow for bulk page edits using launches","arguments":null},{"name":"etag-guide","title":null,"description":"How ETags work for update operations","arguments":null}],"prompts_configurations":[]}],"documentation":["https://experienceleague.adobe.com/en/docs/experience-manager-cloud-service/content/ai-in-aem/using-mcp-with-aem-as-a-cloud-service","https://experienceleague.adobe.com/en/docs/experience-manager-learn/cloud-service/ai/mcp-servers/accelerate-content-operations-with-aem-mcp-server"],"installation":"Supported MCP clients: Anthropic Claude, Cursor, OpenAI ChatGPT, Microsoft Copilot Studio.\n\nGeneric setup (all clients):\n\t1. Add the AEM MCP server URL (https://mcp.adobeaemcloud.com/adobe/mcp/content-readonly).\n\t2. Save or activate the configuration to trigger the connection.\n\t3. Sign in with your Adobe ID when prompted.\n\t4. Verify that the application has discovered the MCP tools.\n\nUse the following JSON to configure the MCP server in Cursor:\n\n{\n\t\"mcpServers\": {\n\t\t\"AEM-Content-ReadOnly\": {\n\t\t\t\"url\": \"https://mcp.adobeaemcloud.com/adobe/mcp/content-readonly\"\n\t\t}\n\t}\n}\n\nCursor: Settings ⇒ Cursor Settings ⇒ Tools ＆ MCP ⇒ Add Custom MCP (or New MCP Server). Paste the JSON above into mcp.json. Click Connect, sign in with Adobe ID, then confirm the server shows as connected.","authentication":"OAuth with Adobe ID. When connecting, sign in with your Adobe ID. MCP tools enforce your existing AEM permissions.","open_contribution":null,"adobe_products":["Adobe Experience Manager"],"support_contact":"aemcs-mcp-feedback@adobe.com","fi_codes":[],"vendor":"Adobe","vendor_name":null,"surface":["Developer"],"adobe_metadata":{"adobe_service_id":"aem-content-mcp-readonly-001","developer_distribution_app_id":null,"developer_distribution_version_id":null},"created_by":"0363113C53A0541E0A4C86E7@AdobeID","created_at":"2026-03-12T15:43:23.637000Z","updated_at":"2026-10-18T21:00:13.843000Z"},{"id":"1ef3a4e9-e3a6-4746-ab83-1d098febef13","name":"aem-cloud-manager-mcp","title":"AEM Cloud Manager MCP Server","summary":"Manage Cloud Manager programs, environments, pipelines, and repositories from your IDE. Run pipelines, debug failures, and access Cloud Manager tools via natural language—no context switching.","description":"The AEM Cloud Manager MCP Server exposes tools for managing Adobe Cloud Manager programs, environments, pipelines, repositories, and pipeline executions. It lets AEM developers run pipelines, debug failures, and access Cloud Manager tools directly in their IDE—no context switching.\n\nUsing the Cloud Manager MCP Server provides:\n\n⋅ Natural-language interaction: Describe intent (e.g., \"list my programs\", \"start the production pipeline\", \"show me the logs from the failed build\") and let the LLM invoke the appropriate tools.\n⋅ Consistent experience: The same AEM MCP tools work across Cursor, ChatGPT, Claude, and Microsoft Copilot Studio.\n⋅ Security preserved: Requests run under the authenticated user identity; destructive actions (e.g., start pipeline, create environment) require explicit user confirmation by typing the pipeline or environment name.\n⋅ Representative workflows: Program discovery, environment management, pipeline listing and execution, repository and branch inspection, execution step details, and log retrieval for debugging failed pipelines.\n\nWhen Using MCP in Agentic Systems\n\nMCP Servers are designed for human-operated MCP Clients with interactive UX and human oversight. The MCP Tools spec recommends a human in the loop who can approve or deny tool invocations.\n\nIf you use MCP Servers in an agentic or autonomous system, treat that as a separate compatibility tier. Do not hardcode tool names in prompts, allowlists, or routing logic. In MCP, the tool name is a programmatic identifier, the description is the model-facing hint for the LLM. Prefer capability or description based prompting and selection.\n\nImplement runtime discovery via tools/list, handle tool-list changes (notifications/tools/list_changed), and align with the MCP Server provider on onboarding and versioning if you need stability guarantees beyond the protocol baseline.","tags":["cloud-manager","aem","mcp","agentic-ai","ci-cd","pipelines","hide-from-playground"],"deployment_mode":["remote"],"category":["Developer Tools","Product Feature","Workflow Automation"],"lifecycle":"production","owner":["GRP-AEM-MCP-OWNERS"],"server_type":["external"],"base64_icon":null,"is_active":true,"status":"active","packages":[],"repository":null,"version":"1.0.0","version_release_notes":null,"remotes":[{"transport_type":"streamable_http","url":"https://mcp.adobeaemcloud.com/adobe/mcp/cloudmanager","headers":[{"name":"Authorization","description":null,"value":null,"is_secret":true,"is_required":true,"format":"string","default":null,"choices":null,"variables":null}],"tools":[{"name":"manage_programs","title":null,"description":"Consolidated tool for managing Cloud Manager programs. Actions: list (all programs), get (specific program details), create (new program). This is a new consolidated tool that replaces list-programs, get-program, and create-program.","input_schema":{"type":"object","properties":{"action":{"type":"string","enum":["list","get","create"],"description":"Action to perform on programs"},"programId":{"type":"string","description":"Program ID (required for get/delete actions)"},"tenantId":{"type":"string","description":"Tenant ID (optional - will be fetched from /tenants API at runtime if not provided)"},"name":{"type":"string","maxLength":64,"description":"Program name (required for create, max 64 characters)"},"type":{"type":"string","enum":["aem_cloud_service","aem_managed_services","media_library"],"description":"Program type (default: aem_cloud_service)"},"solutionNames":{"type":"array","items":{"type":"string","enum":["aemsites","aemassets"]},"description":"Solutions to enable"},"capabilities":{"type":"object","properties":{"sandbox":{"type":"boolean"}},"additionalProperties":false,"description":"Program capabilities"},"goLive":{"type":"object","properties":{"plannedDate":{"type":"string","description":"Planned go-live date (YYYY-MM-DD format)"},"actualDate":{"type":"string","description":"Actual go-live date (YYYY-MM-DD format)"}},"required":["plannedDate"],"additionalProperties":false,"description":"Go-live dates"}},"required":["action"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"output_schema":null,"annotations":null},{"name":"manage_environments","title":null,"description":"Consolidated tool for managing Cloud Manager environments. Actions: list (all environments in program), get (specific environment details), create (new environment: dev/stage/prod/rde - REQUIRES USER TO TYPE ENVIRONMENT NAME). IMPORTANT FOR CREATE ACTION: Always call with action=\"create\", programId, name, and type ONLY. DO NOT include confirmEnvironmentName parameter on first call. The tool will return a confirmation prompt asking the user to type the exact environment name. Only after user provides the environment name should you call again with confirmEnvironmentName set to what the user typed. The server will validate that the typed name matches the actual environment name. This is a new consolidated tool that replaces list-environments, get-environment, and create-environment.","input_schema":{"type":"object","properties":{"action":{"type":"string","enum":["list","get","create"],"description":"Action to perform on environments"},"programId":{"type":"string","description":"Program ID"},"environmentId":{"type":"string","description":"Environment ID (required for get/delete actions)"},"name":{"type":"string","description":"Environment name (required for create)"},"type":{"type":"string","enum":["dev","stage","prod","rde"],"description":"Environment type (required for create)"},"description":{"type":"string","description":"Environment description"},"region":{"type":"string","description":"Cloud region"},"advancedNetworking":{"type":"boolean","description":"Enable advanced networking"},"tier":{"type":"string","enum":["author","publish","preview"],"description":"Tier type"},"confirmEnvironmentName":{"type":"string","description":"INTERNAL USE ONLY - Do not set this parameter on initial call. User must type the exact environment name to confirm creating the environment. This will be validated against the actual environment name provided in the name parameter."}},"required":["action","programId"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"output_schema":null,"annotations":null},{"name":"manage_pipelines","title":null,"description":"Consolidated tool for managing Cloud Manager pipelines. Actions: list (all pipelines in program), get (specific pipeline details), start (trigger pipeline execution - REQUIRES USER TO TYPE PIPELINE NAME). IMPORTANT FOR START ACTION: Always call with action=\"start\", programId, and pipelineId ONLY. DO NOT include confirmPipelineName parameter on first call. The tool will return a confirmation prompt asking the user to type the exact pipeline name. Only after user provides the pipeline name should you call again with confirmPipelineName set to what the user typed. The server will validate that the typed name matches the actual pipeline name. This is a new consolidated tool that replaces list-pipelines, get-pipeline, and start-pipeline.","input_schema":{"type":"object","properties":{"action":{"type":"string","enum":["list","get","start"],"description":"Action to perform on pipelines"},"programId":{"type":"string","description":"Program ID"},"pipelineId":{"type":"string","description":"Pipeline ID (required for get/delete/start actions)"},"confirmPipelineName":{"type":"string","description":"INTERNAL USE ONLY - Do not set this parameter on initial call. User must type the exact pipeline name to confirm starting the pipeline. This will be validated against the actual pipeline name."}},"required":["action","programId"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"output_schema":null,"annotations":null},{"name":"manage_pipeline_executions","title":null,"description":"Consolidated tool for managing pipeline executions. Actions: list (all executions for a pipeline), get (specific execution details), cancel (stop running execution), advance (approve/move to next step). This is a new consolidated tool that replaces list-pipeline-executions, get-pipeline-execution, cancel-pipeline-execution, and advance-pipeline-execution.","input_schema":{"type":"object","properties":{"action":{"type":"string","enum":["list","get","cancel","advance"],"description":"Action to perform on pipeline executions"},"programId":{"type":"string","description":"Program ID"},"pipelineId":{"type":"string","description":"Pipeline ID"},"executionId":{"type":"string","description":"Execution ID (required for get/cancel/advance actions)"},"reason":{"type":"string","description":"Cancellation reason (optional for cancel action)"}},"required":["action","programId","pipelineId"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"output_schema":null,"annotations":null},{"name":"manage_execution_steps","title":null,"description":"Consolidated tool for managing pipeline execution steps. Actions: get-details (step status and metrics), get-logs (fetch and summarize log output with intelligent sampling for large files). This is a new consolidated tool that replaces get-execution-step-details and get-execution-step-logs.","input_schema":{"type":"object","properties":{"action":{"type":"string","enum":["get-details","get-logs"],"description":"Action to perform on execution steps"},"programId":{"type":"string","description":"Program ID"},"pipelineId":{"type":"string","description":"Pipeline ID"},"executionId":{"type":"string","description":"Execution ID"},"phaseId":{"type":"string","description":"Phase ID"},"stepId":{"type":"string","description":"Step ID"},"logFile":{"type":"string","description":"Specific log file to retrieve (e.g., build.log, test.log)"},"includeFullContent":{"type":"boolean","description":"Include full log content (default: false, sampled for large files)"},"maxLines":{"type":"integer","minimum":100,"maximum":10000,"description":"Maximum number of lines (default: 1000)"},"returnUrlOnly":{"type":"boolean","description":"Return only the redirect URL without fetching logs"}},"required":["action","programId","pipelineId","executionId","phaseId","stepId"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"output_schema":null,"annotations":null},{"name":"manage_repositories","title":null,"description":"Consolidated tool for managing Git repositories. Actions: list (all repositories in program), get (specific repository details), list-branches (all branches in repository). This is a new consolidated tool that replaces list-repositories, get-repository, and get-repository-branches.","input_schema":{"type":"object","properties":{"action":{"type":"string","enum":["list","get","list-branches"],"description":"Action to perform on repositories"},"programId":{"type":"string","description":"Program ID"},"repositoryId":{"type":"string","description":"Repository ID (required for get/list-branches actions)"}},"required":["action","programId"],"additionalProperties":false,"$schema":"http://json-schema.org/draft-07/schema#"},"output_schema":null,"annotations":null}],"tools_configurations":[],"resources":[],"resources_configurations":[],"prompts":[],"prompts_configurations":[]}],"documentation":["https://experienceleague.adobe.com/en/docs/experience-manager-cloud-service/content/ai-in-aem/using-mcp-with-aem-as-a-cloud-service","https://experienceleague.adobe.com/en/docs/experience-manager-learn/cloud-service/ai/mcp-servers/overview","https://experienceleague.adobe.com/en/docs/experience-manager-learn/cloud-service/ai/mcp-servers/cloud-manager"],"installation":"Supported MCP clients: Anthropic Claude, Cursor, OpenAI ChatGPT, Microsoft Copilot Studio.\n\nGeneric setup (all clients):\n\t1. Add the AEM Cloud Manager MCP server URL (https://mcp.adobeaemcloud.com/adobe/mcp/cloudmanager).\n\t2. Save or activate the configuration to trigger the connection.\n\t3. Sign in with your Adobe ID when prompted.\n\t4. Verify that the application has discovered the MCP tools.\n\nUse the following JSON to configure the MCP server in Cursor:\n\n{\n\t\"mcpServers\": {\n\t\t\"AEM-Cloud-Manager\": {\n\t\t\t\"url\": \"https://mcp.adobeaemcloud.com/adobe/mcp/cloudmanager\"\n\t\t}\n\t}\n}\n\nCursor: Settings ⇒ Cursor Settings ⇒ Tools ＆ MCP ⇒ Add Custom MCP (or New MCP Server). Paste the JSON above into mcp.json. Click Connect, sign in with Adobe ID, then confirm the server shows as connected.","authentication":"OAuth with Adobe ID. When connecting, sign in with your Adobe ID. Destructive actions (e.g., start pipeline, create environment) require explicit user confirmation by typing the pipeline or environment name.","open_contribution":null,"adobe_products":["Adobe Experience Manager"],"support_contact":"aemcs-mcp-feedback@adobe.com","fi_codes":[],"vendor":"Adobe","vendor_name":null,"surface":["Developer"],"adobe_metadata":{"adobe_service_id":"aem-cloud-manager-mcp-001","developer_distribution_app_id":null,"developer_distribution_version_id":null},"created_by":"0363113C53A0541E0A4C86E7@AdobeID","created_at":"2026-03-12T15:44:31.586000Z","updated_at":"2026-10-20T09:21:31.255000Z"},{"id":"53b7cb92-e949-47c0-b368-2ca9b47e5fae","name":"ajo-mcp-server","title":"Adobe Journey Optimizer MCP Server","summary":"This MCP server exposes Adobe Journey Optimizer (AJO) tools to AI clients, letting marketers manage campaigns, journeys, audiences, and messages through agents.","description":"This MCP server exposes Adobe Journey Optimizer (AJO) tools to AI clients, letting marketers manage campaigns, journeys, audiences, and messages through agents.","tags":["ai","hide-from-playground"],"deployment_mode":["remote"],"category":["Learning and Documentation","Developer Tools","Administrative Tools","Workflow Automation"],"lifecycle":"production","owner":["org-snikhil-all"],"server_type":["external"],"base64_icon":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgMjUwIDI0NSI+PGRlZnM+PHN0eWxlPi5jbHMtMXtpc29sYXRpb246aXNvbGF0ZTt9LmNscy0ye29wYWNpdHk6MC40O21peC1ibGVuZC1tb2RlOm11bHRpcGx5O30uY2xzLTN7ZmlsbDojZmZmO30uY2xzLTR7ZmlsbDojZmEwZjAwO308L3N0eWxlPjwvZGVmcz48dGl0bGU+YWR2ZXJ0aXNpbmdfY2xvdWRfYXBwaWNvbl9BcnRib2FyZCAxPC90aXRsZT48ZyBjbGFzcz0iY2xzLTEiPjxnIGlkPSJMYXllcl8xIiBkYXRhLW5hbWU9IkxheWVyIDEiPjxpbWFnZSBjbGFzcz0iY2xzLTIiIHdpZHRoPSIyNTIiIGhlaWdodD0iMjQ2IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMSAtMSkiIHhsaW5rOmhyZWY9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBUHdBQUFEMkNBWUFBQUR5TU9vQkFBQUFDWEJJV1hNQUFBc1NBQUFMRWdIUzNYNzhBQUFRTjBsRVFWUjRYdTJkZTFNVVN4SkhmNE9Lb2lLSXIvdmMyTHZmL3p0dHhPNWV2WHBGQmVRbDRPd2ZXVWxsMS9RTUl3eE1RNTRUVWRIRGE4UUlUdVdqcXF0SDQvRllRMlUwR28wdStoNkFvVEVlc0ZTaklmMXVRZkJwVjRBaE0rNjdEbWtDV0tyd1RRUWZoYkhTWEgwQURKVnhHTiticXcvN3hpVktkLytpYjdnT21rZ2U1VjZSZEMrTSsrVWF4UWNZR2xIME0wbW41ZXJqdThJazRILyt5eEQvUmlOOEVUMUdjUmY4ZmhrUHlsaVY5TEJjSDVTdklUME1rU2o3cWFRVFNkOGtIWmZyU1JtbnFoTkJuQURHTnluK2pRamZJM29VL0dFWmo4cFlrL1M0WE5mSzUxWmxFd00xUFF5SldLdWZ5UVEva25SWXhrRzVIcFZ4WEVhY0FHNVUvR3NWZm9yb0x2a2ptZGhQSkQyVnRCNWVQeTJ2WFh3WGZrVUF3OE5UK1crcW91OUwrbHJHdnFTOThQcEFkUUp3K1c5RS9HdXA0WnNhM2V0eFQ5UFhaRUkvazdRcGFTTmNuMmxTK0VleVNRTGhZYWk0OENjeWtWdmhkeVh0U1BvU3JydmxhNGVxNmYrWnBMUHJyUEVYTG55STZsNmZlMFIvTEl2aUc1SzJKTDBvWTB2U2M1bjBMcnVuODE3SHh4b2VZR2pFR3Q3cmQwL3JYZm92a2o1TCtpUnB1NHhQc2dsZ1R6WkplTVEvVTJudUxWcjZoUW9mWlBkR1hCUjlVeWI0cXpCZXlvVGZrSW51RVgxVlZYUzY5REIwK3JyMDMxUnIrZ09aOURzeXlUOUsranVNYmRtRUVNVS9WWW4yaTVSK0lUVjhTT0U5cXErcXB1NmJNckZmUzNwVHh1dnl1ZWV5TlA2SnF1amUwR3RGUjNZWU11MDZ2SXZ2OGgvSjB2eGRXYVQvS09tRHBQZGxmQ2lmKzZLYTZudWEvMTFhVElwLzVRamZwUEF4cW0vSUl2cHJTVDlMK2tYU1QrWGpGNnBSM1p0eXNVNXZJenF5dzIwZ2R1MWRmSmYvc2JxOXE3YXNkUjgreUNMK2pyclJmaUVwL3BXRWIxTDRCN0lvL1ZRV3VWL0pSUCsxakovTDV6eXFQNVpORGxIME5wb2pPdHdtL08vVnBWd3ByL3RXcDN4bHFxOXA3ZjJyejdKb2Y2UlMyMTlWK2tzTFgyUnZVL2gxMll6MVJ0SnZZZndrazMxVGxyNnZxWXJ1Nit0SURuZUYrTGNjNWZlLzl5aC9YSXBlVjEyaGlpWHVua0tLUHhxTnZsOVcra3NKSDJUM0ZQNkpiSVo2S1l2a3YwbjZYVlYyVCtFOXFudU5UbjBPZDUxV2ZzK0l2Ykh0eTlVZStYM0VsYXFQc2hSL1h5WEZ2NnowUHl4OEk3dW44RnV5cVA2THF1eS95bVRma3MxYzdRWWFSSWRzK04rOGl4KzNsc2VvN3p0TzQyN1RCNnJlSE9tUzB2K1E4RTNOL2xBbSswdVo2TDlMK2tlNS9peHJ6ajB2M3hOL1lkYlRJVHVqWnJUaXI2b2I4YU0vVWxnUitOR2FmbTdoRzlsWFpXbjhsa3oyZjByNlF5YjhMN0pKWUZQZEZKNm9EdERGWlcvRmo5TDc1ck43NVdlK2h6SFdEemJ5NWhhK3NDTDdaZFprTmZrYldVVC9ROUsvWkduOEsxbTNzVzhQUExJRGRIRW52S2NWbzMyOFcxU3EyM2ZiL2Zkbm1wTzVoTytwMjlkVlUvbC9sUEdyTEkzZlVMY0xUMVFIbUkzNzBVYjdXUDdHRFR4SDZtN0tHYzliejE4by9KUzYvWVZxTi80MzFUVGVPL0d4d1lEc0FQUFJSbnYvK0x1Nk4rYjREVGZ4L3ZxNTZ2bVp3dmZVN1k5bGpUaGZaLzlkVlhaUDQ1RWQ0UExFYU8vbGM3d1Q3ekFNUDJEalRIUFc4eGRHZU5WVTN1djJWK291dlhrYVQyUUhXQXl0OUkvVlRlbGRlTCtuM2lQOWhmWDhWT0huVE9WL2trWDhKK3FlU29Qc0FGY2pwdmUrS2hhbDkzdnVQYjAvVWVuZXo0cnlzeUs4eSs0enpLWXNtdnZlZU45VTgxUTJJU0E3d0dLSjBudlE5ZFErSHJEUnVjbEdOZHBQMEN0OFQzVDNycnpmRFBPekxOcXZ5N3IyY1owZEFCYUhkK3pqQ3RrTDFYdnMvZVNjOXM2NlVWK1VueGJoL1IveFZPSzVMTHIvSXBQZE8vS3hTUWNBMTBlN0I4WlAwOWxSUFRYblVOMG0zc1hDaCtqdU44WjQ3ZjVHOWE2MzU3STBmMVUwNlFDdW05akVpNnRsKzdJRE16NnBucFBuMHZkRytiN0k3TkhkWnhNL3NjWlBxdkVtbmRmdHBQSUExNDk3NldWMnpMemZxRzVuYjVmR08zU0VueExkL1RDTDE3SW0zVE5SdHdNc2c3YWVmeVp6OHJWcTV1MU45UHN5cFR0KzlrWDQ5ZzM5NE1sNFEwejdZQWdBdUJtOG1lNnB2V2ZncjJTdXRnRzV3L2tuUW5TUGkvMSswcXdmT01rU0hNQnlhVmZRUEF0L0tYUFZnL0o1V2gramZEc0R0RFdDSDdibnFYeDdVd3dBM0R3dXZQZlpQTFhmVWoxR0x2Yll6b2tmOU5Ydkc3TFpZMFBzcGdNWUNqSEsrOUo1ZExWVHh5dTQyaGZoNHdML1JuaUQ5cGdkQUZnZXNmejJvK2JjMTNaRDNEa3JVbS85SHAvL3RpNGFkUUJEcEczZ3JhdDcxUFZFSGQrbTlGNFgrSXdSajh6bG1DcUE0UkNEdEdmbDhjanIrQkRXaVpUZWZ6RE9GdjdESHQxWmR3Y1lGbEY0OTlhRGRNekt6NzF0STd3MzdOYktEOFdIUmlBN3dQQm9TL0hvYld6Y1NaSldtdm85Um5nL0ROOGZCMFU2RHpBczJ0NmJCMnYzdHhQaFI2UFJxSytHOStOeC9SRDg5dVJaQUJnV01WakhoMWRNTk5wakRSK2p2SitMN1VVLzBSMWdtUHlRdTMwYmIrNzFER1FIR0M1enU5dW02YU1aQXdDR3kxenVUcXZMRVIzZ2RqTFRYUnB4QUlsQWVJQkVJRHhBSWhBZUlCRUlENUFJaEFkSUJNSURKQUxoQVJLQjhBQ0pRSGlBUkNBOFFDSVFIaUFSQ0ErUUNJUUhTQVRDQXlRQzRRRVNnZkFBaVVCNGdFUWdQRUFpRUI0Z0VRZ1BrQWlFQjBnRXdnTWtBdUVCRW9Id0FJbEFlSUJFSUR4QUloQWVJQkVJRDVBSWhBZElCTUlESkFMaEFSS0I4QUNKUUhpQVJDQThRQ0lRSGlBUkNBK1FDSVFIU0FUQ0F5UUM0UUVTZ2ZBQWlVQjRnRVFnUEVBaUVCNGdFUWdQa0FpRUIwZ0V3Z01rQXVFQkVvSHdBSWxBZUlCRUlEeEFJaEFlSUJFSUQ1QUloQWRJQk1JREpBTGhBUktCOEFDSlFIaUFSQ0E4UUNJUUhpQVJDQStRQ0lRSFNBVENBeVFDNFFFU2dmQUFpVUI0Z0VRZ1BFQWlFQjRnRVFnUGtBaUVCMGdFd2dNa0F1RUJFb0h3QUlsQWVJQkVJRHhBSWhBZUlCRUlENUFJaEFkSUJNSURKQUxoQVJLQjhBQ0pRSGlBUkNBOFFDSVFIaUFSQ0ErUUNJUUhTQVRDQXlRQzRRRVNnZkFBaVVCNGdFUWdQRUFpRUI0Z0VRZ1BrQWlFQjBnRXdnTWtBdUVCRW9Id0FJbEFlSUJFSUR4QUloQWVJQkVJRDVBSWhBZElCTUlESkFMaEFSS0I4QUNKUUhpQVJDQThRQ0lRSGlBUkNBK1FDSVFIU0FUQ0F5UUM0UUVTZ2ZBQWlVQjRnRVFnUEVBaUVCNGdFUWdQa0FpRUIwZ0V3Z01rQXVFQkVvSHdBSWxBZUlCRUlEeEFJaEFlSUJFSUQ1QUloQWRJQk1JREpBTGhBUktCOEFDSlFIaUFSQ0E4UUNJUUhpQVJDQStRQ0lRSFNBVENBeVFDNFFFU2dmQUFpVUI0Z0VRZ1BFQWlFQjRnRVFnUGtBaUVCMGdFd2dNa0F1RUJFb0h3QUlsQWVJQkVJRHhBSXZxRUg0VUJBSGVJS1B4b3hnQ0FPNEFMNzJLdmxIRXZ2RVo2Z0R0Q0ZIb2tFLzErR1BlYXJ3UEFMU2FtOUI3Wkg0VGhrUjRBN2dCOUtmMjlNRWpwQWU0UVJHK0FSTGp3NHpLK1N6b0w0M3Y0R2dEY2NtS0VkOWxQd25EcEFlQU9zS0lhd2NjeXdVOWxzcCtXaitQWEFlQVdNMDlLNzJrOUFBeWZtUUU2cHZSUitpZyswUjFnK0l4bmpITmE0VjEyVCtkcDNBRU1uMWlTdDZQamJsOUs3elg4TjlWYUh1a0Joa2xiamtkM0p3SjJHK0hQeWpjZlNUb3M0MXY0UVFBWUhpNzdOMVZ2ajFUZHJSRitQQjYzTThRM1NRZGxIRW82bHMwV1JIbUFZUkhkUFpHNWVxanFid3pXNC9GNFBHNGovR240b2YweUR0VVZIZ0NHUXhTKzlmWlk1blJ2RGQ5RytIMUpYMVZuaWxqTEE4RHlpWDAzOS9hcnpOMkpDQy8xMS9BbnN2ei9hL2poSTlHOEF4Z1NiYVA5U0RWSWZ5MGZlK091RytHYk90NVRnNitTZGlYdHFUdGJJRHZBTUlpTjlnT1pxN3N5ZHp1bGVIRjg0bTY1T0Z2c1Nkb3BJODRZcFBVQXl5Y0dhTS9JM2RjOWRiUHljL3AyMm5uanp0L2djN251cXh2bGtSNWdPYmgvSHQzMzFYWDFxN29OdTRtbW5lT051K1B5Smw4a2ZTcGpWelZOSUxVSFdCNngzM1lvYzlNOS9TSno5MWc5KzJmT2hlK3A0dy9LRDI5TCtpaWJQWHptSU1vRExJY1kzVDBUL3l4emRGdm03SUY2Nm5lcC84U2JXTWZ2bGpmNVcvYUcvbVkwOEFDV1E5dW8reUp6ODIrWnE3dWFVcjlMamZBaHlzYzYvclBzelQ2b3B2YnRNaDBBWEQvdE1weW44aDlranNZcy9GUk5kSmZzS09xV2Rubk9aNUQza2w1STJwRDBSTktxNmpIV2Z0Z2xBRndQN21Yc3NYMld5ZjVlTlFPZnVUTjJRdmp4ZUR3ZWpVWnRsTitXdmVtV3BFMlo4QS9MejBmWmtSNWc4Y1QrbXFmeW5ubi9KWE56V3hkRWQ2ay93a3ZkTjQ4enlVWVpUeVd0cVo1ZDd3K3hBSURySVdiZE83S0kvazdTVzVtYm4xV1h6cWVXMnIzQ2h5anY2Y09lN0I5NEt1bFp1VDdXWkpRbnRRZFlMRzNkdmllTDV1OGsvVm11SDh2bnoxZlErcUs3TkQzQ1M5MjFQdThHZnBESi9sU1cxajlTOXdrMXBQWUFpNk52Q2U2VExJMy9zNHdQNmk3RnpWdzlteXA4aWZKUzl4L2JscVh5VDJRUi9wR3NlUmVmUStlcFBkSURYSjRvZXl5dC81TDB2ekxlcVZ1N3o0enUwdXdJNzNnNjRiWERRNW5vYTJWRTZXTnFMeUU5d0dXSVRUclBzSGRrMGZ4UFNmK1ZDZjkzK2Z5aHBxeTd0OHdVdm9ueXNUdTRxaXE4U3g4YmVBK0U5QUNYb1pYZHQ4NStsRFhvWFBiM01oYzdHK0ZtUlhkcGpnZy9KYlcvTDR2MGE2cXBmWlE4ZHZBbHBBZVloNWpHdHgzNXQ3cENLdTljS0x4MExuM2JLZndvRXoybTlGS2RuZFpVTitjUTdRR200Nkw2eGhvL2pISlhscmIvS2VrL1pieFY3Y3FmNzNpZFIzWnBUdUVEN1ZwZ2ZJNjgxRDNpZWxPVFMzY1MwZ05FWWdydm05M2lIdm0zTXRIL0xVdm4zNnZXN2I2amJtN21GcjZubnQrWFNld2krK2VQVlkvSWZTNWJ3b3NwUDJ2MUFJYUwzaDVrNFJ2ZDNza2svMCs1dnBVdHkzWE9wcGczdWtzL0lMelVXOCs3dVBFWDlpTnlYZm9UU2V1YVRQRkhRbnpJU1l6cU1ZWGZVM2VkM1J0MGIyV1IvWk11VWJkSGZraDRxYmVlangzRitBQUxQd3ovU1BXbW01amllMGNmOFNFTDR6RE8xRTNoZDJTTk9GOW5kOWw5SjUyZk91Vjc1ZWV1MnlNL0xMdzBJWDJzUHp5bGQrRVAxSTM0ZnVOTjdPSkg4U1hraDd2Rk9GeGQ5TmlGOTVPbC9FYVkvNFhoTjhYc3FYa0sxR1ZrbHk0cHZOU1J2azFQWFB4NGJPNWV1YjZTMWZYUFZLTjl1elVYK2VHMjAwb2UvZkFueEJ6SXV2QisxNXZ2amZmOThmSCs5czZSMDVlVlhicUM4TkpFVGQvM240ckhYZS9JWnJMWHFpbSszM1czcXE3NGJZMlArSEFiYUVYM2hwdzc0Ylc2SHhDN0xXdk8vU1dyMDkrVmo3ZkwxdzhVVW5oZFVYYnBpc0pMTTZXUDlZbi9Cei9KL2pPdkpiMVVqZlorSTQ2djUzdU4zeGYxQVlaSVh6US8xV1RHNjFIOW8rcmhGZS9MYXovRXdzK1ZqMCtPMFZWbGx4WWd2RlIva1NiRm41YSsrQmw1cjJUU2I2bEcrM2hEVHJ3cGg2NCtESmxwWmEyTDNnWTlQNFBPaHg4KzZROTk4YWgrNVJTK1piVEE5NUlralN6Y2oyU1MzcE9sNmc5bE1xL0w1TjZTcGZVdnl1dm5zb2FlMzNycmUvUWZhdkxHSElDaE1hdHg3WTkrK2lJTGVKN2xicGZYL3VBSUY5MXI5WVdrOEMwTEYxNDZsMTR5UWIwVHY2cTYvOTRQMHRpVVRRQis5Y00xL0g3N3VFOC9idEVGR0JLeFR2ZUlIcC96Rm50WWZvMlBoRHBXVGQrOU5GNUlDdDl5TGNJN0lkcDd4TCt2R3ZFZnlZUitJaE44UGJ5T3d2ZnR5UWNZRXUwR21sYjRmZFdWS24reTY1RnFSSThuUUM4OHFrZXVWWGhuaXZoUmZwOEEvRDU3RnozZWIrL3I5UXBYZ0dVU3UvSXVmTng4ZHFEdUJyUmpkU1cvTWRHZEd4SGU2UkhmNi93NEFUeFFUZjk5dVM3VzhNZ09ReUkyN09MTlk1Nm1uNmdydU5mbk55cTZjNlBDTzAyTkgwL0o4UW5BQjExNnVBMzBkZW5Qd29pQysvVmFhdlNMV0lyd1RoQmZxa0szazBEOFBNQlFHYXNyZnJ6NnNHOWNvblJMRmI2bGlmeDlWNEFoTSs2N0xsUHdsa0VKMzlKa0FBQzNnaUVKM3ZKL0NsVlRqOVh3dEIwQUFBQUFTVVZPUks1Q1lJST0iLz48cmVjdCBjbGFzcz0iY2xzLTMiIHg9IjUiIHk9IjMiIHdpZHRoPSIyNDAiIGhlaWdodD0iMjM0IiByeD0iNDIuNSIvPjxwYXRoIGlkPSJfMjU2IiBkYXRhLW5hbWU9IjI1NiIgY2xhc3M9ImNscy00IiBkPSJNMTkxLjYzNTI2LDE3OC45NTAzN0gxNjMuMTI4ODFhNi4yNDMyNiw2LjI0MzI2LDAsMCwxLTUuODQ2NTMtMy43NjkxMWwtMzAuOTQ2OS03Mi4zNTkxNWExLjM2MzcxLDEuMzYzNzEsMCwwLDAtMi42MTE0NS0uMDM0bC0xOS4yODYsNDUuOTQyNTJBMS42MzQ3OSwxLjYzNDc5LDAsMCwwLDEwNS45NDQ0OSwxNTFoMjEuMTk5MTlhMy4yNjk1NywzLjI2OTU3LDAsMCwxLDMuMDEwNTMsMS45OTQwOWw5LjI4MTQsMjAuNjU0NTJhMy44MTI0OSwzLjgxMjQ5LDAsMCwxLTMuNTA3OCw1LjMwMTc2SDU4Ljc1MjI0YTMuNTE4MjcsMy41MTgyNywwLDAsMS0zLjIxMjktNC45MDQzN0wxMDQuNjI4OSw1Ny4xNDM3NkE2LjYzOSw2LjYzOSwwLDAsMSwxMTAuODYxMjQsNTNoMjguMzEzNTVhNi42MjgxMSw2LjYyODExLDAsMCwxLDYuMjMyODksNC4xNDM3NkwxOTQuODM3MDcsMTc0LjA0NkEzLjUxNzE2LDMuNTE3MTYsMCwwLDEsMTkxLjYzNTI2LDE3OC45NTAzN1oiLz48L2c+PC9nPjwvc3ZnPg==","is_active":false,"status":"active","packages":[],"repository":{"url":"https://github.com/Adobe-CJM/ajo-mcp-service","source":"github","id":"14326538","subfolder":null},"version":"1.0.0-beta","version_release_notes":null,"remotes":[{"transport_type":"streamable_http","url":"https://ajo-mcp.adobe.io/mcp","headers":[{"name":"authorization","description":null,"value":"Bearer <token>","is_secret":false,"is_required":false,"format":"string","default":null,"choices":null,"variables":null}],"tools":[{"name":"list_resources","title":null,"description":"List all available resources that can be read via read_resource.","input_schema":{"additionalProperties":false,"properties":{},"type":"object"},"output_schema":null,"annotations":null},{"name":"read_resource","title":null,"description":"Read the content of a resource by its URI (e.g., skill://workflow-name, resource://doc-name).","input_schema":{"additionalProperties":false,"properties":{"uri":{"type":"string","description":"The resource URI (e.g., \"skill://onboard-new-tool\", \"resource://shared-doc\")"}},"required":["uri"],"type":"object"},"output_schema":null,"annotations":null},{"name":"ajo_campaign_list","title":null,"description":"List AJO marketing campaigns (not journeys, not loyalty challenges).\n\nSupported server-side filters (all optional, combinable):\n  status:        DRAFT, PUBLISHING, UNPUBLISHING, LIVE, SCHEDULED,\n                 COMPLETED, CLOSED, ARCHIVED, STOPPED\n  campaign_type: Scheduled, ApiTriggered\n  category:      TRANSACTIONAL, MARKETING\n  channel:       email, sms, push, directMail\n\nDate ranges, name search, audience filters, and tags are not supported.\n\nReturns the first page (up to 50 by default, max 200). Use filters to narrow results\nrather than paginating through thousands of campaigns.\n\nField projection: default returns id, name, status, campaignType, startDate, endDate.\nPass fields=['minimal'] for id/name/status only; fields=['detail'] adds description,\ntags, and message variants.","input_schema":{"additionalProperties":false,"properties":{"req":{"additionalProperties":false,"properties":{"sn":{"description":"AEP env","type":"string"},"pagination":{"additionalProperties":false,"description":"Pagination + filters for ajo_campaign_list.\n\nThe campaigns API uses page-based pagination with `count` (not `limit`) as the page size param.\n- First page: filters + offset are used to build params.\n- Subsequent pages: pass next_href from the previous response verbatim; the client\n  extracts all query params (page, count, property, orderby) from it directly.","properties":{"limit":{"default":50,"description":"Max results (1–200).","maximum":200,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Pagination offset.","minimum":0,"type":"integer"},"next_href":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Next-page URL from next_href in the previous response. Pass verbatim for page 2+. Omit for the first page."},"filter":{"additionalProperties":false,"description":"Filter fields for ajo_campaign_list. All fields optional.","properties":{"status":{"anyOf":[{"enum":["DRAFT","PUBLISHING","UNPUBLISHING","LIVE","SCHEDULED","COMPLETED","CLOSED","ARCHIVED","STOPPED"],"type":"string"},{"type":"null"}],"default":null,"description":"Filter by campaign status (case-insensitive). Valid values: DRAFT, PUBLISHING, UNPUBLISHING, LIVE, SCHEDULED, COMPLETED, CLOSED, ARCHIVED, STOPPED."},"campaign_type":{"anyOf":[{"enum":["Scheduled","ApiTriggered"],"type":"string"},{"type":"null"}],"default":null,"description":"Filter by campaign type. Valid values: Scheduled, ApiTriggered."},"category":{"anyOf":[{"enum":["TRANSACTIONAL","MARKETING"],"type":"string"},{"type":"null"}],"default":null,"description":"Filter by campaign category (case-insensitive). Valid values: TRANSACTIONAL, MARKETING."},"channel":{"anyOf":[{"enum":["email","sms","push","directMail"],"type":"string"},{"type":"null"}],"default":null,"description":"Filter by channel. Valid values: email, sms, push, directMail. Aliases accepted: direct_mail → directMail."}},"type":"object"}},"type":"object"},"fields":{"anyOf":[{"items":{"enum":["minimal","detail"],"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"Projection tier: omit for 6-field default, 'minimal' for id/name/status, 'detail' adds description/tags/variants."}},"required":["sn"],"type":"object"}},"required":["req"],"type":"object"},"output_schema":null,"annotations":null},{"name":"ajo_campaign_get","title":null,"description":"Get details and configuration of a specific AJO campaign by campaign ID.","input_schema":{"additionalProperties":false,"properties":{"req":{"additionalProperties":false,"properties":{"sn":{"description":"AEP env","type":"string"},"campaign_id":{"description":"AJO campaign ID.","type":"string"}},"required":["sn","campaign_id"],"type":"object"}},"required":["req"],"type":"object"},"output_schema":null,"annotations":null},{"name":"ajo_journey_list","title":null,"description":"List AJO customer journeys (automated flows/workflows).\n\nStatus filter: the journey API does not support server-side status filtering.\nTo filter by status, paginate through all pages and filter the results\nclient-side. Valid values: DRAFT, LIVE, CLOSED, FINISHED.\n\nProjection: pass `fields=[\"minimal\"]` for id/name/status only;\nomit for the default 8-field table row.\n\nPagination contract — response always includes:\n  total       — total number of journeys across all pages\n  count       — number of journeys in this page\n  has_more    — true if more pages remain\n  next_offset — pass as offset on the next call; null when has_more=false\n\nTo collect ALL journeys: call with offset=0, then loop while has_more=true,\npassing next_offset as offset each time. Default page size is 50; max is 200.","input_schema":{"additionalProperties":false,"properties":{"req":{"additionalProperties":false,"properties":{"sn":{"description":"AEP env","type":"string"},"pagination":{"additionalProperties":false,"description":"Pagination + filters for ajo_journey_list.","properties":{"limit":{"default":50,"description":"Max results (1–200).","maximum":200,"minimum":1,"type":"integer"},"offset":{"default":0,"description":"Pagination offset.","minimum":0,"type":"integer"},"next_href":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Next-page URL from next_href in the previous response. Pass verbatim for page 2+. Omit for the first page."},"filter":{"additionalProperties":false,"description":"Filter fields for ajo_journey_list. All fields optional.","properties":{"status":{"anyOf":[{"enum":["DRAFT","LIVE","CLOSED","FINISHED"],"type":"string"},{"type":"null"}],"default":null,"description":"Filter by status (case-insensitive). Valid values: DRAFT, LIVE, CLOSED, FINISHED."}},"type":"object"}},"type":"object"},"fields":{"anyOf":[{"items":{"enum":["minimal","detail"],"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"Projection tier: omit for the default 8-field table row; 'minimal' for id/name/status only; 'detail' adds steps, journey_id, in_test, is_batch."}},"required":["sn"],"type":"object"}},"required":["req"],"type":"object"},"output_schema":null,"annotations":null},{"name":"ajo_journey_get","title":null,"description":"Get configuration, details, and current status of a specific AJO journey.","input_schema":{"additionalProperties":false,"properties":{"req":{"properties":{"sn":{"description":"AEP env","type":"string"},"journey_id":{"description":"AJO journey ID.","type":"string"}},"required":["sn","journey_id"],"type":"object"}},"required":["req"],"type":"object"},"output_schema":null,"annotations":null},{"name":"ajo_loyalty_get_challenges","title":null,"description":"List (get/fetch) active loyalty program challenges (tasks, promotions, offers).\n\nReturns challenges that are currently published and running. Use this for loyalty\nchallenges — NOT ajo_campaign_list.\n\nReturns challenges where state is published, startDate <= now,\nand endDate > now. Use the limit parameter to control result count.","input_schema":{"additionalProperties":false,"properties":{"req":{"additionalProperties":false,"description":"Request model for ajo_loyalty_get_challenges.\n\nFetches active, published loyalty challenges from the AJO Loyalty API.","properties":{"sn":{"description":"AEP env","type":"string"},"limit":{"default":100,"description":"Max results to return (1–500).","maximum":500,"minimum":1,"type":"integer"}},"required":["sn"],"type":"object"}},"required":["req"],"type":"object"},"output_schema":null,"annotations":null},{"name":"ajo_sandbox_list","title":null,"description":"List AEP sandboxes available to the current org.\n\nResults are cached for 5 minutes per org.","input_schema":{"additionalProperties":false,"properties":{},"type":"object"},"output_schema":null,"annotations":null},{"name":"ajo_interactive_render_chart","title":null,"description":"Render an interactive chart inline in the response.\n\nUse this when the user asks for a chart or visual, or when you are\npresenting aggregated/comparative data (e.g. counts by status, trends\nover time, distributions). Do NOT use for single-item detail views —\npresent those as structured text instead.\n\nAll chart types support: title (required), description, badge.\nbadge fields: label (str), variant — MUST be exactly one of \"positive\"|\"negative\"|\"info\"|\"neutral\".\n  DO NOT use \"success\", \"warning\", \"error\", \"danger\", or any other string — validation will fail.\nseries fields: label (str), data (list[float|None]), color (hex str, optional).\nextra=\"forbid\" — passing any undocumented field causes a validation error.\n\nChart types and their EXACT valid fields:\n\n\"line\"           — title, description, badge, series, x_labels\n\"area\"           — title, description, badge, series, x_labels\n\"bar\"            — title, description, badge, series, x_labels, stacked (bool)\n\"horizontal_bar\" — title, description, badge, series, x_labels, stacked (bool)\n\"pie\"            — title, description, badge, series\n                   NO x_labels — segment names go in series[].label, values in series[].data[0]\n\"donut\"          — title, description, badge, series, center_label\n                   NO x_labels — same as pie; center_label is optional text in hole\n\"scatter\"        — title, description, badge, series\n                   NO x_labels\n\"metric\"         — label (required), value (num|str), description, trend (float -100..1000)\n                   badge: {label, variant} — variant MUST be \"positive\"|\"negative\"|\"info\"|\"neutral\" only\n                   NOT title — use label instead\n\"dashboard\"      — title, charts (list of ChartItem, min 1)\n                   ChartItem = line|area|bar|horizontal_bar|pie|donut|scatter|metric ONLY\n                   NEVER put \"table\" inside dashboard.charts — use \"data_dashboard\" instead\n\"table\"          — title, columns (list of {label, key}), rows (list of {cells: {key: value}})\n\"data_dashboard\" — description (optional), metrics (list of MetricCard),\n                   charts (list of ChartItem), table (DataTable|null)\n\nREQUIRED: every chart object MUST include the \"type\" field — including\n\"data_dashboard\". Omitting \"type\" causes a discriminator validation error.\n\nx_labels usage: list of strings, one per data point, aligns with\nseries[].data indices. Only valid on: line, area, bar, horizontal_bar.\nNever on pie/donut/scatter/metric.\n\nCall once per chart or dashboard. Each call renders one panel inline.","input_schema":{"additionalProperties":false,"properties":{"chart":{"description":"The chart specification. Nest ALL chart fields (type, title, series, columns, rows, etc.) inside this object — never pass them as top-level arguments.","oneOf":[{"additionalProperties":false,"properties":{"type":{"const":"line","default":"line","type":"string"},"title":{"minLength":1,"type":"string"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"badge":{"anyOf":[{"additionalProperties":false,"properties":{"label":{"minLength":1,"type":"string"},"variant":{"description":"Must be exactly one of: \"positive\", \"negative\", \"info\", \"neutral\". Do NOT use \"success\", \"warning\", \"error\", or \"danger\" — they are invalid.","enum":["positive","negative","info","neutral"],"type":"string"}},"required":["label","variant"],"type":"object"},{"type":"null"}],"default":null},"series":{"items":{"additionalProperties":false,"properties":{"label":{"minLength":1,"type":"string"},"data":{"items":{"anyOf":[{"type":"number"},{"type":"null"}]},"minItems":1,"type":"array"},"color":{"anyOf":[{"pattern":"^#[0-9a-fA-F]{6}$","type":"string"},{"type":"null"}],"default":null}},"required":["label","data"],"type":"object"},"minItems":1,"type":"array"},"x_labels":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"One string per data point, aligned with series[].data indices. Only valid on line/area/bar/horizontal_bar. NEVER pass x_labels to pie/donut/scatter/metric."}},"required":["title","series"],"type":"object"},{"additionalProperties":false,"properties":{"type":{"const":"area","default":"area","type":"string"},"title":{"minLength":1,"type":"string"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"badge":{"anyOf":[{"additionalProperties":false,"properties":{"label":{"minLength":1,"type":"string"},"variant":{"description":"Must be exactly one of: \"positive\", \"negative\", \"info\", \"neutral\". Do NOT use \"success\", \"warning\", \"error\", or \"danger\" — they are invalid.","enum":["positive","negative","info","neutral"],"type":"string"}},"required":["label","variant"],"type":"object"},{"type":"null"}],"default":null},"series":{"items":{"additionalProperties":false,"properties":{"label":{"minLength":1,"type":"string"},"data":{"items":{"anyOf":[{"type":"number"},{"type":"null"}]},"minItems":1,"type":"array"},"color":{"anyOf":[{"pattern":"^#[0-9a-fA-F]{6}$","type":"string"},{"type":"null"}],"default":null}},"required":["label","data"],"type":"object"},"minItems":1,"type":"array"},"x_labels":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"One string per data point, aligned with series[].data indices. Only valid on line/area/bar/horizontal_bar. NEVER pass x_labels to pie/donut/scatter/metric."}},"required":["title","series"],"type":"object"},{"additionalProperties":false,"properties":{"type":{"const":"bar","default":"bar","type":"string"},"title":{"minLength":1,"type":"string"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"badge":{"anyOf":[{"additionalProperties":false,"properties":{"label":{"minLength":1,"type":"string"},"variant":{"description":"Must be exactly one of: \"positive\", \"negative\", \"info\", \"neutral\". Do NOT use \"success\", \"warning\", \"error\", or \"danger\" — they are invalid.","enum":["positive","negative","info","neutral"],"type":"string"}},"required":["label","variant"],"type":"object"},{"type":"null"}],"default":null},"series":{"items":{"additionalProperties":false,"properties":{"label":{"minLength":1,"type":"string"},"data":{"items":{"anyOf":[{"type":"number"},{"type":"null"}]},"minItems":1,"type":"array"},"color":{"anyOf":[{"pattern":"^#[0-9a-fA-F]{6}$","type":"string"},{"type":"null"}],"default":null}},"required":["label","data"],"type":"object"},"minItems":1,"type":"array"},"x_labels":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"One string per data point, aligned with series[].data indices. Only valid on line/area/bar/horizontal_bar. NEVER pass x_labels to pie/donut/scatter/metric."},"stacked":{"default":false,"type":"boolean"}},"required":["title","series"],"type":"object"},{"additionalProperties":false,"properties":{"type":{"const":"horizontal_bar","default":"horizontal_bar","type":"string"},"title":{"minLength":1,"type":"string"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"badge":{"anyOf":[{"additionalProperties":false,"properties":{"label":{"minLength":1,"type":"string"},"variant":{"description":"Must be exactly one of: \"positive\", \"negative\", \"info\", \"neutral\". Do NOT use \"success\", \"warning\", \"error\", or \"danger\" — they are invalid.","enum":["positive","negative","info","neutral"],"type":"string"}},"required":["label","variant"],"type":"object"},{"type":"null"}],"default":null},"series":{"items":{"additionalProperties":false,"properties":{"label":{"minLength":1,"type":"string"},"data":{"items":{"anyOf":[{"type":"number"},{"type":"null"}]},"minItems":1,"type":"array"},"color":{"anyOf":[{"pattern":"^#[0-9a-fA-F]{6}$","type":"string"},{"type":"null"}],"default":null}},"required":["label","data"],"type":"object"},"minItems":1,"type":"array"},"x_labels":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"One string per data point, aligned with series[].data indices. Only valid on line/area/bar/horizontal_bar. NEVER pass x_labels to pie/donut/scatter/metric."},"stacked":{"default":false,"type":"boolean"}},"required":["title","series"],"type":"object"},{"additionalProperties":false,"properties":{"type":{"const":"pie","default":"pie","type":"string"},"title":{"minLength":1,"type":"string"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"badge":{"anyOf":[{"additionalProperties":false,"properties":{"label":{"minLength":1,"type":"string"},"variant":{"description":"Must be exactly one of: \"positive\", \"negative\", \"info\", \"neutral\". Do NOT use \"success\", \"warning\", \"error\", or \"danger\" — they are invalid.","enum":["positive","negative","info","neutral"],"type":"string"}},"required":["label","variant"],"type":"object"},{"type":"null"}],"default":null},"series":{"description":"Segment names in series[].label, segment values in series[].data[0]. No x_labels.","items":{"additionalProperties":false,"properties":{"label":{"minLength":1,"type":"string"},"data":{"items":{"anyOf":[{"type":"number"},{"type":"null"}]},"minItems":1,"type":"array"},"color":{"anyOf":[{"pattern":"^#[0-9a-fA-F]{6}$","type":"string"},{"type":"null"}],"default":null}},"required":["label","data"],"type":"object"},"minItems":1,"type":"array"}},"required":["title","series"],"type":"object"},{"additionalProperties":false,"properties":{"type":{"const":"donut","default":"donut","type":"string"},"title":{"minLength":1,"type":"string"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"badge":{"anyOf":[{"additionalProperties":false,"properties":{"label":{"minLength":1,"type":"string"},"variant":{"description":"Must be exactly one of: \"positive\", \"negative\", \"info\", \"neutral\". Do NOT use \"success\", \"warning\", \"error\", or \"danger\" — they are invalid.","enum":["positive","negative","info","neutral"],"type":"string"}},"required":["label","variant"],"type":"object"},{"type":"null"}],"default":null},"series":{"description":"Segment names in series[].label, segment values in series[].data[0]. No x_labels.","items":{"additionalProperties":false,"properties":{"label":{"minLength":1,"type":"string"},"data":{"items":{"anyOf":[{"type":"number"},{"type":"null"}]},"minItems":1,"type":"array"},"color":{"anyOf":[{"pattern":"^#[0-9a-fA-F]{6}$","type":"string"},{"type":"null"}],"default":null}},"required":["label","data"],"type":"object"},"minItems":1,"type":"array"},"center_label":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}},"required":["title","series"],"type":"object"},{"additionalProperties":false,"properties":{"type":{"const":"scatter","default":"scatter","type":"string"},"title":{"minLength":1,"type":"string"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"badge":{"anyOf":[{"additionalProperties":false,"properties":{"label":{"minLength":1,"type":"string"},"variant":{"description":"Must be exactly one of: \"positive\", \"negative\", \"info\", \"neutral\". Do NOT use \"success\", \"warning\", \"error\", or \"danger\" — they are invalid.","enum":["positive","negative","info","neutral"],"type":"string"}},"required":["label","variant"],"type":"object"},{"type":"null"}],"default":null},"series":{"items":{"additionalProperties":false,"properties":{"label":{"minLength":1,"type":"string"},"data":{"items":{"anyOf":[{"type":"number"},{"type":"null"}]},"minItems":1,"type":"array"},"color":{"anyOf":[{"pattern":"^#[0-9a-fA-F]{6}$","type":"string"},{"type":"null"}],"default":null}},"required":["label","data"],"type":"object"},"minItems":1,"type":"array"}},"required":["title","series"],"type":"object"},{"additionalProperties":false,"properties":{"type":{"const":"metric","default":"metric","type":"string"},"label":{"description":"Required. Use 'label', not 'title'.","minLength":1,"type":"string"},"value":{"anyOf":[{"type":"number"},{"type":"integer"},{"type":"string"}]},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"badge":{"anyOf":[{"additionalProperties":false,"properties":{"label":{"minLength":1,"type":"string"},"variant":{"description":"Must be exactly one of: \"positive\", \"negative\", \"info\", \"neutral\". Do NOT use \"success\", \"warning\", \"error\", or \"danger\" — they are invalid.","enum":["positive","negative","info","neutral"],"type":"string"}},"required":["label","variant"],"type":"object"},{"type":"null"}],"default":null},"trend":{"anyOf":[{"maximum":1000.0,"minimum":-100.0,"type":"number"},{"type":"null"}],"default":null}},"required":["label","value"],"type":"object"},{"additionalProperties":false,"properties":{"type":{"const":"dashboard","default":"dashboard","type":"string"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"charts":{"description":"Valid type values: line, area, bar, horizontal_bar, pie, donut, scatter, metric. NEVER use \"table\" here — put a table in data_dashboard.table instead.","items":{"description":"Valid type values: line, area, bar, horizontal_bar, pie, donut, scatter, metric. NEVER use \"table\" here — put a table in data_dashboard.table instead.","oneOf":[{"additionalProperties":false,"properties":{"type":{"const":"line","default":"line","type":"string"},"title":{"minLength":1,"type":"string"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"badge":{"anyOf":[{"additionalProperties":false,"properties":{"label":{"minLength":1,"type":"string"},"variant":{"description":"Must be exactly one of: \"positive\", \"negative\", \"info\", \"neutral\". Do NOT use \"success\", \"warning\", \"error\", or \"danger\" — they are invalid.","enum":["positive","negative","info","neutral"],"type":"string"}},"required":["label","variant"],"type":"object"},{"type":"null"}],"default":null},"series":{"items":{"additionalProperties":false,"properties":{"label":{"minLength":1,"type":"string"},"data":{"items":{"anyOf":[{"type":"number"},{"type":"null"}]},"minItems":1,"type":"array"},"color":{"anyOf":[{"pattern":"^#[0-9a-fA-F]{6}$","type":"string"},{"type":"null"}],"default":null}},"required":["label","data"],"type":"object"},"minItems":1,"type":"array"},"x_labels":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"One string per data point, aligned with series[].data indices. Only valid on line/area/bar/horizontal_bar. NEVER pass x_labels to pie/donut/scatter/metric."}},"required":["title","series"],"type":"object"},{"additionalProperties":false,"properties":{"type":{"const":"area","default":"area","type":"string"},"title":{"minLength":1,"type":"string"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"badge":{"anyOf":[{"additionalProperties":false,"properties":{"label":{"minLength":1,"type":"string"},"variant":{"description":"Must be exactly one of: \"positive\", \"negative\", \"info\", \"neutral\". Do NOT use \"success\", \"warning\", \"error\", or \"danger\" — they are invalid.","enum":["positive","negative","info","neutral"],"type":"string"}},"required":["label","variant"],"type":"object"},{"type":"null"}],"default":null},"series":{"items":{"additionalProperties":false,"properties":{"label":{"minLength":1,"type":"string"},"data":{"items":{"anyOf":[{"type":"number"},{"type":"null"}]},"minItems":1,"type":"array"},"color":{"anyOf":[{"pattern":"^#[0-9a-fA-F]{6}$","type":"string"},{"type":"null"}],"default":null}},"required":["label","data"],"type":"object"},"minItems":1,"type":"array"},"x_labels":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"One string per data point, aligned with series[].data indices. Only valid on line/area/bar/horizontal_bar. NEVER pass x_labels to pie/donut/scatter/metric."}},"required":["title","series"],"type":"object"},{"additionalProperties":false,"properties":{"type":{"const":"bar","default":"bar","type":"string"},"title":{"minLength":1,"type":"string"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"badge":{"anyOf":[{"additionalProperties":false,"properties":{"label":{"minLength":1,"type":"string"},"variant":{"description":"Must be exactly one of: \"positive\", \"negative\", \"info\", \"neutral\". Do NOT use \"success\", \"warning\", \"error\", or \"danger\" — they are invalid.","enum":["positive","negative","info","neutral"],"type":"string"}},"required":["label","variant"],"type":"object"},{"type":"null"}],"default":null},"series":{"items":{"additionalProperties":false,"properties":{"label":{"minLength":1,"type":"string"},"data":{"items":{"anyOf":[{"type":"number"},{"type":"null"}]},"minItems":1,"type":"array"},"color":{"anyOf":[{"pattern":"^#[0-9a-fA-F]{6}$","type":"string"},{"type":"null"}],"default":null}},"required":["label","data"],"type":"object"},"minItems":1,"type":"array"},"x_labels":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"One string per data point, aligned with series[].data indices. Only valid on line/area/bar/horizontal_bar. NEVER pass x_labels to pie/donut/scatter/metric."},"stacked":{"default":false,"type":"boolean"}},"required":["title","series"],"type":"object"},{"additionalProperties":false,"properties":{"type":{"const":"horizontal_bar","default":"horizontal_bar","type":"string"},"title":{"minLength":1,"type":"string"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"badge":{"anyOf":[{"additionalProperties":false,"properties":{"label":{"minLength":1,"type":"string"},"variant":{"description":"Must be exactly one of: \"positive\", \"negative\", \"info\", \"neutral\". Do NOT use \"success\", \"warning\", \"error\", or \"danger\" — they are invalid.","enum":["positive","negative","info","neutral"],"type":"string"}},"required":["label","variant"],"type":"object"},{"type":"null"}],"default":null},"series":{"items":{"additionalProperties":false,"properties":{"label":{"minLength":1,"type":"string"},"data":{"items":{"anyOf":[{"type":"number"},{"type":"null"}]},"minItems":1,"type":"array"},"color":{"anyOf":[{"pattern":"^#[0-9a-fA-F]{6}$","type":"string"},{"type":"null"}],"default":null}},"required":["label","data"],"type":"object"},"minItems":1,"type":"array"},"x_labels":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"One string per data point, aligned with series[].data indices. Only valid on line/area/bar/horizontal_bar. NEVER pass x_labels to pie/donut/scatter/metric."},"stacked":{"default":false,"type":"boolean"}},"required":["title","series"],"type":"object"},{"additionalProperties":false,"properties":{"type":{"const":"pie","default":"pie","type":"string"},"title":{"minLength":1,"type":"string"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"badge":{"anyOf":[{"additionalProperties":false,"properties":{"label":{"minLength":1,"type":"string"},"variant":{"description":"Must be exactly one of: \"positive\", \"negative\", \"info\", \"neutral\". Do NOT use \"success\", \"warning\", \"error\", or \"danger\" — they are invalid.","enum":["positive","negative","info","neutral"],"type":"string"}},"required":["label","variant"],"type":"object"},{"type":"null"}],"default":null},"series":{"description":"Segment names in series[].label, segment values in series[].data[0]. No x_labels.","items":{"additionalProperties":false,"properties":{"label":{"minLength":1,"type":"string"},"data":{"items":{"anyOf":[{"type":"number"},{"type":"null"}]},"minItems":1,"type":"array"},"color":{"anyOf":[{"pattern":"^#[0-9a-fA-F]{6}$","type":"string"},{"type":"null"}],"default":null}},"required":["label","data"],"type":"object"},"minItems":1,"type":"array"}},"required":["title","series"],"type":"object"},{"additionalProperties":false,"properties":{"type":{"const":"donut","default":"donut","type":"string"},"title":{"minLength":1,"type":"string"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"badge":{"anyOf":[{"additionalProperties":false,"properties":{"label":{"minLength":1,"type":"string"},"variant":{"description":"Must be exactly one of: \"positive\", \"negative\", \"info\", \"neutral\". Do NOT use \"success\", \"warning\", \"error\", or \"danger\" — they are invalid.","enum":["positive","negative","info","neutral"],"type":"string"}},"required":["label","variant"],"type":"object"},{"type":"null"}],"default":null},"series":{"description":"Segment names in series[].label, segment values in series[].data[0]. No x_labels.","items":{"additionalProperties":false,"properties":{"label":{"minLength":1,"type":"string"},"data":{"items":{"anyOf":[{"type":"number"},{"type":"null"}]},"minItems":1,"type":"array"},"color":{"anyOf":[{"pattern":"^#[0-9a-fA-F]{6}$","type":"string"},{"type":"null"}],"default":null}},"required":["label","data"],"type":"object"},"minItems":1,"type":"array"},"center_label":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}},"required":["title","series"],"type":"object"},{"additionalProperties":false,"properties":{"type":{"const":"scatter","default":"scatter","type":"string"},"title":{"minLength":1,"type":"string"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"badge":{"anyOf":[{"additionalProperties":false,"properties":{"label":{"minLength":1,"type":"string"},"variant":{"description":"Must be exactly one of: \"positive\", \"negative\", \"info\", \"neutral\". Do NOT use \"success\", \"warning\", \"error\", or \"danger\" — they are invalid.","enum":["positive","negative","info","neutral"],"type":"string"}},"required":["label","variant"],"type":"object"},{"type":"null"}],"default":null},"series":{"items":{"additionalProperties":false,"properties":{"label":{"minLength":1,"type":"string"},"data":{"items":{"anyOf":[{"type":"number"},{"type":"null"}]},"minItems":1,"type":"array"},"color":{"anyOf":[{"pattern":"^#[0-9a-fA-F]{6}$","type":"string"},{"type":"null"}],"default":null}},"required":["label","data"],"type":"object"},"minItems":1,"type":"array"}},"required":["title","series"],"type":"object"},{"additionalProperties":false,"properties":{"type":{"const":"metric","default":"metric","type":"string"},"label":{"description":"Required. Use 'label', not 'title'.","minLength":1,"type":"string"},"value":{"anyOf":[{"type":"number"},{"type":"integer"},{"type":"string"}]},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"badge":{"anyOf":[{"additionalProperties":false,"properties":{"label":{"minLength":1,"type":"string"},"variant":{"description":"Must be exactly one of: \"positive\", \"negative\", \"info\", \"neutral\". Do NOT use \"success\", \"warning\", \"error\", or \"danger\" — they are invalid.","enum":["positive","negative","info","neutral"],"type":"string"}},"required":["label","variant"],"type":"object"},{"type":"null"}],"default":null},"trend":{"anyOf":[{"maximum":1000.0,"minimum":-100.0,"type":"number"},{"type":"null"}],"default":null}},"required":["label","value"],"type":"object"}]},"minItems":1,"type":"array"}},"required":["charts"],"type":"object"},{"additionalProperties":false,"properties":{"type":{"const":"table","default":"table","type":"string"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"columns":{"items":{"additionalProperties":false,"properties":{"label":{"minLength":1,"type":"string"},"key":{"minLength":1,"type":"string"}},"required":["label","key"],"type":"object"},"minItems":1,"type":"array"},"rows":{"items":{"additionalProperties":false,"properties":{"cells":{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":"object"}},"required":["cells"],"type":"object"},"minItems":1,"type":"array"}},"required":["columns","rows"],"type":"object"},{"additionalProperties":false,"properties":{"type":{"const":"data_dashboard","default":"data_dashboard","type":"string"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"metrics":{"items":{"additionalProperties":false,"properties":{"type":{"const":"metric","default":"metric","type":"string"},"label":{"description":"Required. Use 'label', not 'title'.","minLength":1,"type":"string"},"value":{"anyOf":[{"type":"number"},{"type":"integer"},{"type":"string"}]},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"badge":{"anyOf":[{"additionalProperties":false,"properties":{"label":{"minLength":1,"type":"string"},"variant":{"description":"Must be exactly one of: \"positive\", \"negative\", \"info\", \"neutral\". Do NOT use \"success\", \"warning\", \"error\", or \"danger\" — they are invalid.","enum":["positive","negative","info","neutral"],"type":"string"}},"required":["label","variant"],"type":"object"},{"type":"null"}],"default":null},"trend":{"anyOf":[{"maximum":1000.0,"minimum":-100.0,"type":"number"},{"type":"null"}],"default":null}},"required":["label","value"],"type":"object"},"type":"array"},"charts":{"description":"Valid type values: line, area, bar, horizontal_bar, pie, donut, scatter, metric. NEVER use \"table\" here — put a table in data_dashboard.table instead.","items":{"description":"Valid type values: line, area, bar, horizontal_bar, pie, donut, scatter, metric. NEVER use \"table\" here — put a table in data_dashboard.table instead.","oneOf":[{"additionalProperties":false,"properties":{"type":{"const":"line","default":"line","type":"string"},"title":{"minLength":1,"type":"string"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"badge":{"anyOf":[{"additionalProperties":false,"properties":{"label":{"minLength":1,"type":"string"},"variant":{"description":"Must be exactly one of: \"positive\", \"negative\", \"info\", \"neutral\". Do NOT use \"success\", \"warning\", \"error\", or \"danger\" — they are invalid.","enum":["positive","negative","info","neutral"],"type":"string"}},"required":["label","variant"],"type":"object"},{"type":"null"}],"default":null},"series":{"items":{"additionalProperties":false,"properties":{"label":{"minLength":1,"type":"string"},"data":{"items":{"anyOf":[{"type":"number"},{"type":"null"}]},"minItems":1,"type":"array"},"color":{"anyOf":[{"pattern":"^#[0-9a-fA-F]{6}$","type":"string"},{"type":"null"}],"default":null}},"required":["label","data"],"type":"object"},"minItems":1,"type":"array"},"x_labels":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"One string per data point, aligned with series[].data indices. Only valid on line/area/bar/horizontal_bar. NEVER pass x_labels to pie/donut/scatter/metric."}},"required":["title","series"],"type":"object"},{"additionalProperties":false,"properties":{"type":{"const":"area","default":"area","type":"string"},"title":{"minLength":1,"type":"string"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"badge":{"anyOf":[{"additionalProperties":false,"properties":{"label":{"minLength":1,"type":"string"},"variant":{"description":"Must be exactly one of: \"positive\", \"negative\", \"info\", \"neutral\". Do NOT use \"success\", \"warning\", \"error\", or \"danger\" — they are invalid.","enum":["positive","negative","info","neutral"],"type":"string"}},"required":["label","variant"],"type":"object"},{"type":"null"}],"default":null},"series":{"items":{"additionalProperties":false,"properties":{"label":{"minLength":1,"type":"string"},"data":{"items":{"anyOf":[{"type":"number"},{"type":"null"}]},"minItems":1,"type":"array"},"color":{"anyOf":[{"pattern":"^#[0-9a-fA-F]{6}$","type":"string"},{"type":"null"}],"default":null}},"required":["label","data"],"type":"object"},"minItems":1,"type":"array"},"x_labels":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"One string per data point, aligned with series[].data indices. Only valid on line/area/bar/horizontal_bar. NEVER pass x_labels to pie/donut/scatter/metric."}},"required":["title","series"],"type":"object"},{"additionalProperties":false,"properties":{"type":{"const":"bar","default":"bar","type":"string"},"title":{"minLength":1,"type":"string"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"badge":{"anyOf":[{"additionalProperties":false,"properties":{"label":{"minLength":1,"type":"string"},"variant":{"description":"Must be exactly one of: \"positive\", \"negative\", \"info\", \"neutral\". Do NOT use \"success\", \"warning\", \"error\", or \"danger\" — they are invalid.","enum":["positive","negative","info","neutral"],"type":"string"}},"required":["label","variant"],"type":"object"},{"type":"null"}],"default":null},"series":{"items":{"additionalProperties":false,"properties":{"label":{"minLength":1,"type":"string"},"data":{"items":{"anyOf":[{"type":"number"},{"type":"null"}]},"minItems":1,"type":"array"},"color":{"anyOf":[{"pattern":"^#[0-9a-fA-F]{6}$","type":"string"},{"type":"null"}],"default":null}},"required":["label","data"],"type":"object"},"minItems":1,"type":"array"},"x_labels":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"One string per data point, aligned with series[].data indices. Only valid on line/area/bar/horizontal_bar. NEVER pass x_labels to pie/donut/scatter/metric."},"stacked":{"default":false,"type":"boolean"}},"required":["title","series"],"type":"object"},{"additionalProperties":false,"properties":{"type":{"const":"horizontal_bar","default":"horizontal_bar","type":"string"},"title":{"minLength":1,"type":"string"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"badge":{"anyOf":[{"additionalProperties":false,"properties":{"label":{"minLength":1,"type":"string"},"variant":{"description":"Must be exactly one of: \"positive\", \"negative\", \"info\", \"neutral\". Do NOT use \"success\", \"warning\", \"error\", or \"danger\" — they are invalid.","enum":["positive","negative","info","neutral"],"type":"string"}},"required":["label","variant"],"type":"object"},{"type":"null"}],"default":null},"series":{"items":{"additionalProperties":false,"properties":{"label":{"minLength":1,"type":"string"},"data":{"items":{"anyOf":[{"type":"number"},{"type":"null"}]},"minItems":1,"type":"array"},"color":{"anyOf":[{"pattern":"^#[0-9a-fA-F]{6}$","type":"string"},{"type":"null"}],"default":null}},"required":["label","data"],"type":"object"},"minItems":1,"type":"array"},"x_labels":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"description":"One string per data point, aligned with series[].data indices. Only valid on line/area/bar/horizontal_bar. NEVER pass x_labels to pie/donut/scatter/metric."},"stacked":{"default":false,"type":"boolean"}},"required":["title","series"],"type":"object"},{"additionalProperties":false,"properties":{"type":{"const":"pie","default":"pie","type":"string"},"title":{"minLength":1,"type":"string"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"badge":{"anyOf":[{"additionalProperties":false,"properties":{"label":{"minLength":1,"type":"string"},"variant":{"description":"Must be exactly one of: \"positive\", \"negative\", \"info\", \"neutral\". Do NOT use \"success\", \"warning\", \"error\", or \"danger\" — they are invalid.","enum":["positive","negative","info","neutral"],"type":"string"}},"required":["label","variant"],"type":"object"},{"type":"null"}],"default":null},"series":{"description":"Segment names in series[].label, segment values in series[].data[0]. No x_labels.","items":{"additionalProperties":false,"properties":{"label":{"minLength":1,"type":"string"},"data":{"items":{"anyOf":[{"type":"number"},{"type":"null"}]},"minItems":1,"type":"array"},"color":{"anyOf":[{"pattern":"^#[0-9a-fA-F]{6}$","type":"string"},{"type":"null"}],"default":null}},"required":["label","data"],"type":"object"},"minItems":1,"type":"array"}},"required":["title","series"],"type":"object"},{"additionalProperties":false,"properties":{"type":{"const":"donut","default":"donut","type":"string"},"title":{"minLength":1,"type":"string"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"badge":{"anyOf":[{"additionalProperties":false,"properties":{"label":{"minLength":1,"type":"string"},"variant":{"description":"Must be exactly one of: \"positive\", \"negative\", \"info\", \"neutral\". Do NOT use \"success\", \"warning\", \"error\", or \"danger\" — they are invalid.","enum":["positive","negative","info","neutral"],"type":"string"}},"required":["label","variant"],"type":"object"},{"type":"null"}],"default":null},"series":{"description":"Segment names in series[].label, segment values in series[].data[0]. No x_labels.","items":{"additionalProperties":false,"properties":{"label":{"minLength":1,"type":"string"},"data":{"items":{"anyOf":[{"type":"number"},{"type":"null"}]},"minItems":1,"type":"array"},"color":{"anyOf":[{"pattern":"^#[0-9a-fA-F]{6}$","type":"string"},{"type":"null"}],"default":null}},"required":["label","data"],"type":"object"},"minItems":1,"type":"array"},"center_label":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null}},"required":["title","series"],"type":"object"},{"additionalProperties":false,"properties":{"type":{"const":"scatter","default":"scatter","type":"string"},"title":{"minLength":1,"type":"string"},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"badge":{"anyOf":[{"additionalProperties":false,"properties":{"label":{"minLength":1,"type":"string"},"variant":{"description":"Must be exactly one of: \"positive\", \"negative\", \"info\", \"neutral\". Do NOT use \"success\", \"warning\", \"error\", or \"danger\" — they are invalid.","enum":["positive","negative","info","neutral"],"type":"string"}},"required":["label","variant"],"type":"object"},{"type":"null"}],"default":null},"series":{"items":{"additionalProperties":false,"properties":{"label":{"minLength":1,"type":"string"},"data":{"items":{"anyOf":[{"type":"number"},{"type":"null"}]},"minItems":1,"type":"array"},"color":{"anyOf":[{"pattern":"^#[0-9a-fA-F]{6}$","type":"string"},{"type":"null"}],"default":null}},"required":["label","data"],"type":"object"},"minItems":1,"type":"array"}},"required":["title","series"],"type":"object"},{"additionalProperties":false,"properties":{"type":{"const":"metric","default":"metric","type":"string"},"label":{"description":"Required. Use 'label', not 'title'.","minLength":1,"type":"string"},"value":{"anyOf":[{"type":"number"},{"type":"integer"},{"type":"string"}]},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"badge":{"anyOf":[{"additionalProperties":false,"properties":{"label":{"minLength":1,"type":"string"},"variant":{"description":"Must be exactly one of: \"positive\", \"negative\", \"info\", \"neutral\". Do NOT use \"success\", \"warning\", \"error\", or \"danger\" — they are invalid.","enum":["positive","negative","info","neutral"],"type":"string"}},"required":["label","variant"],"type":"object"},{"type":"null"}],"default":null},"trend":{"anyOf":[{"maximum":1000.0,"minimum":-100.0,"type":"number"},{"type":"null"}],"default":null}},"required":["label","value"],"type":"object"}]},"type":"array"},"table":{"anyOf":[{"additionalProperties":false,"properties":{"type":{"const":"table","default":"table","type":"string"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"columns":{"items":{"additionalProperties":false,"properties":{"label":{"minLength":1,"type":"string"},"key":{"minLength":1,"type":"string"}},"required":["label","key"],"type":"object"},"minItems":1,"type":"array"},"rows":{"items":{"additionalProperties":false,"properties":{"cells":{"additionalProperties":{"anyOf":[{"type":"string"},{"type":"null"}]},"type":"object"}},"required":["cells"],"type":"object"},"minItems":1,"type":"array"}},"required":["columns","rows"],"type":"object"},{"type":"null"}],"default":null}},"type":"object"}]}},"required":["chart"],"type":"object"},"output_schema":null,"annotations":null},{"name":"ajo_interactive_render_graph","title":null,"description":"Render an interactive node/edge graph inline in the response.\n\nUse this when the user asks to draw, visualize, diagram, or show as a\ngraph any structure with nodes and connections — e.g. journey\nflowcharts, hierarchies, or relationship maps. Do NOT use for tabular\ndata or charts (use ajo_interactive_render_chart instead).\n\nSupported graph types (set graph.type):\n- \"flow\": directional flowchart with optional layout direction\n  (LR / TB / RL / BT). Use for journeys, pipelines, approval flows.\n- \"tree\": hierarchical tree with TB or LR direction. Use for org\n  charts, taxonomies, or any single-root hierarchy.\n- \"network\": non-directional node/edge graph. Use for relationship\n  maps or audience overlap.\n\nEach graph has:\n- nodes: list of GraphNode (id, title, subtitle, shape, color, icon, badge)\n- edges: list of GraphEdge (source, target, label, style)\n\nNode shapes: circle, rect, rounded_rect, diamond, pill, hexagon.\nNode colors: teal, amber, blue, gray, purple, green, orange, red, neutral.\nEdge styles: solid, dashed, dotted.\n\nEdge `source` and `target` must reference node `id` values that exist\nin the same graph. Call once per graph; each call renders one panel.","input_schema":{"additionalProperties":false,"properties":{"graph":{"oneOf":[{"additionalProperties":false,"properties":{"type":{"const":"flow","default":"flow","type":"string"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"direction":{"default":"LR","enum":["LR","TB","RL","BT"],"type":"string"},"nodes":{"items":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"title":{"minLength":1,"type":"string"},"subtitle":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"shape":{"default":"rounded_rect","enum":["circle","rect","rounded_rect","diamond","pill","hexagon"],"type":"string"},"color":{"default":"neutral","enum":["teal","amber","blue","gray","purple","green","orange","red","neutral"],"type":"string"},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"badge":{"anyOf":[{"additionalProperties":false,"properties":{"label":{"minLength":1,"type":"string"},"variant":{"enum":["alert","info","success","warning"],"type":"string"}},"required":["label","variant"],"type":"object"},{"type":"null"}],"default":null},"x":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null},"y":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null}},"required":["id","title"],"type":"object"},"minItems":1,"type":"array"},"edges":{"items":{"additionalProperties":false,"properties":{"source":{"minLength":1,"type":"string"},"target":{"minLength":1,"type":"string"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"style":{"default":"solid","enum":["solid","dashed","dotted"],"type":"string"}},"required":["source","target"],"type":"object"},"type":"array"}},"required":["nodes"],"type":"object"},{"additionalProperties":false,"properties":{"type":{"const":"tree","default":"tree","type":"string"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"direction":{"default":"TB","enum":["TB","LR"],"type":"string"},"nodes":{"items":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"title":{"minLength":1,"type":"string"},"subtitle":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"shape":{"default":"rounded_rect","enum":["circle","rect","rounded_rect","diamond","pill","hexagon"],"type":"string"},"color":{"default":"neutral","enum":["teal","amber","blue","gray","purple","green","orange","red","neutral"],"type":"string"},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"badge":{"anyOf":[{"additionalProperties":false,"properties":{"label":{"minLength":1,"type":"string"},"variant":{"enum":["alert","info","success","warning"],"type":"string"}},"required":["label","variant"],"type":"object"},{"type":"null"}],"default":null},"x":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null},"y":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null}},"required":["id","title"],"type":"object"},"minItems":1,"type":"array"},"edges":{"items":{"additionalProperties":false,"properties":{"source":{"minLength":1,"type":"string"},"target":{"minLength":1,"type":"string"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"style":{"default":"solid","enum":["solid","dashed","dotted"],"type":"string"}},"required":["source","target"],"type":"object"},"type":"array"}},"required":["nodes"],"type":"object"},{"additionalProperties":false,"properties":{"type":{"const":"network","default":"network","type":"string"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"description":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"nodes":{"items":{"additionalProperties":false,"properties":{"id":{"minLength":1,"type":"string"},"title":{"minLength":1,"type":"string"},"subtitle":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"shape":{"default":"rounded_rect","enum":["circle","rect","rounded_rect","diamond","pill","hexagon"],"type":"string"},"color":{"default":"neutral","enum":["teal","amber","blue","gray","purple","green","orange","red","neutral"],"type":"string"},"icon":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"badge":{"anyOf":[{"additionalProperties":false,"properties":{"label":{"minLength":1,"type":"string"},"variant":{"enum":["alert","info","success","warning"],"type":"string"}},"required":["label","variant"],"type":"object"},{"type":"null"}],"default":null},"x":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null},"y":{"anyOf":[{"type":"number"},{"type":"null"}],"default":null}},"required":["id","title"],"type":"object"},"minItems":1,"type":"array"},"edges":{"items":{"additionalProperties":false,"properties":{"source":{"minLength":1,"type":"string"},"target":{"minLength":1,"type":"string"},"label":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null},"style":{"default":"solid","enum":["solid","dashed","dotted"],"type":"string"}},"required":["source","target"],"type":"object"},"type":"array"}},"required":["nodes"],"type":"object"}]}},"required":["graph"],"type":"object"},"output_schema":null,"annotations":null},{"name":"import-claude-design-from-url","title":null,"description":"Create an AJO email template from a hosted HTML URL.\n\nThe URL must point to a self-contained HTML email bundle (images and styles\ninlined). The server fetches the HTML, creates an AJO email content template,\nand returns an openable Journey Optimizer deep link.","input_schema":{"additionalProperties":false,"properties":{"req":{"additionalProperties":false,"properties":{"sn":{"description":"AEP env","type":"string"},"url":{"description":"Public HTTPS URL to the HTML email bundle on an allowlisted host (*.claudeusercontent.com or AEM preview templates). Fetch immediately.","type":"string"},"title":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"Template name in AJO (default: \"Claude Design import\", max 255 chars)."}},"required":["sn","url"],"type":"object"}},"required":["req"],"type":"object"},"output_schema":null,"annotations":null},{"name":"skill__cja_analytics","title":null,"description":"Run CJA analytics reports — find metrics, dimensions, segments, and data views, then run ranked or breakdown reports. Use when asked to analyse data, run a report, find metrics, explore CJA data, or get reporting for a campaign.","input_schema":{"additionalProperties":false,"properties":{},"type":"object"},"output_schema":null,"annotations":null},{"name":"skill__list_campaigns","title":null,"description":"List, browse, and preview AJO campaigns. Use when asked to list, show, browse, or view the contents of email campaigns.","input_schema":{"additionalProperties":false,"properties":{},"type":"object"},"output_schema":null,"annotations":null},{"name":"skill__list_journeys","title":null,"description":"List, browse, inspect, or get details about AJO journeys — including showing a journey's flow diagram. Use when asked to list, show, browse, view, get, open, or visualize any journey.","input_schema":{"additionalProperties":false,"properties":{},"type":"object"},"output_schema":null,"annotations":null},{"name":"skill__tool_reference","title":null,"description":"Start here before any AJO workflow. Enforces Rule 0 — read the relevant skill doc before calling any tool.","input_schema":{"additionalProperties":false,"properties":{},"type":"object"},"output_schema":null,"annotations":null},{"name":"channels__list-channel-configs","title":null,"description":"List channel configurations with optional filters (name, status, channels, sandboxName) to return a unified list from both backend APIs, setting channels for specified types and returning the total count from _count for count questions.","input_schema":{"type":"object","additionalProperties":true},"output_schema":null,"annotations":null},{"name":"channels__get-channel-config","title":null,"description":"Fetch a single channel configuration by its required configId UUID and optional sandboxName by automatically searching both endpoints to return full details including name, channel type, settings, status, and metadata.","input_schema":{"type":"object","additionalProperties":true},"output_schema":null,"annotations":null},{"name":"channels__list-config-resource","title":null,"description":"Lists channel configuration resources by resource type with optional filters. Returns matching resources with a count. Inputs: resourceType (required) — one of pushCredential, emailSubdomain, emailIpPool, smsCredential, smsSubdomain, whatsappCredential, directMailFileRouting, lineChannelSettings, liveActivityRegistry. Optional filters: name (contains match), platform/messagingService/appId (pushCredential only), status (smsSubdomain|whatsappCredential|directMailFileRouting), sandboxName. Returned ids feed channel configs (e.g. emailSubdomain→email.subDomainId, smsCredential→sms.configId); lineChannelSettings and liveActivityRegistry also return channelRegistryId and channelPublicationVersion.","input_schema":{"type":"object","additionalProperties":true},"output_schema":null,"annotations":null},{"name":"channels__get-config-resource","title":null,"description":"Fetch a single configuration resource by its ID and required resourceType (plus optional sandboxName) to return full resource details (or _etag), excluding liveActivityRegistry which lacks get-by-id, while including channelRegistryId and channelPublicationVersion for lineChannelSettings.","input_schema":{"type":"object","additionalProperties":true},"output_schema":null,"annotations":null},{"name":"channels__list-marketing-actions","title":null,"description":"List available DULE marketing actions for a given sandboxName (optional), where each action provides a name and a self href link used to determine its type as core or custom based on the path structure.","input_schema":{"type":"object","additionalProperties":true},"output_schema":null,"annotations":null}],"tools_configurations":[],"resources":[{"name":"cja-analytics","uri":"skill://cja-analytics","title":"Cja Analytics","description":"Run CJA analytics reports — find metrics, dimensions, segments, and data views, then run ranked or breakdown reports. Use when asked to analyse data, run a report, find metrics, explore CJA data, or get reporting for a campaign.","mime_type":null},{"name":"list-campaigns","uri":"skill://list-campaigns","title":"List Campaigns","description":"List, browse, and preview AJO campaigns. Use when asked to list, show, browse, or view the contents of email campaigns.","mime_type":null},{"name":"list-journeys","uri":"skill://list-journeys","title":"List Journeys","description":"List, browse, inspect, or get details about AJO journeys — including showing a journey's flow diagram. Use when asked to list, show, browse, view, get, open, or visualize any journey.","mime_type":null},{"name":"tool-reference","uri":"skill://tool-reference","title":"Tool Reference","description":"Start here before any AJO workflow. Enforces Rule 0 — read the relevant skill doc before calling any tool.","mime_type":null},{"name":"ajo-chart-renderer","uri":"ui://ajo-chart-renderer","title":"Ajo Chart Renderer","description":"Interactive MCP UI: ajo-chart-renderer","mime_type":null},{"name":"ajo-graph-renderer","uri":"ui://ajo-graph-renderer","title":"Ajo Graph Renderer","description":"Interactive MCP UI: ajo-graph-renderer","mime_type":null},{"name":"ajo-loyalty-summary","uri":"ui://ajo-loyalty-summary","title":"Ajo Loyalty Summary","description":"Interactive MCP UI: ajo-loyalty-summary","mime_type":null}],"resources_configurations":[],"prompts":[],"prompts_configurations":[]}],"documentation":[],"installation":"Supported MCP clients: Anthropic Claude, Cursor, OpenAI ChatGPT.\n\nGeneric setup (all clients):\n\t1. Add the Adobe Journey Optimizer MCP server URL (https://ajo-mcp.adobe.io/mcp).\n\t2. Save or activate the configuration to trigger the connection.\n\t3. Sign in with your Adobe ID when prompted.\n\t4. If your Adobe ID belongs to multiple IMS organizations, select the desired organization.\n\t5. Approve the connection between Adobe and your client.\n\t6. Verify that the application has discovered the MCP tools.\n\nUse the following JSON to configure the MCP server in Claude:\n{\n\t\"mcpServers\": {\n\t\t\"adobe-journey-optimizer\": {\n\t\t\t\"command\": \"npx\",\n\t\t\t\"args\": [\n\t\t\t\t\"-y\",\n\t\t\t\t\"mcp-remote@latest\",\n\t\t\t\t\"https://ajo-mcp.adobe.io/mcp\",\n\t\t\t\t\"--allow-http\"\n\t\t\t]\n\t\t}\n\t}\n}\n\nClaude: Select the Customize icon → Connectors → + icon → Create app. Name it \"Adobe Journey Optimizer\" and enter the URL.\n\nBefore using, ensure you have an Adobe ID with access to the desired IMS organization and correct product permissions for Adobe Journey Optimizer.","authentication":"OAuth with Adobe ID. Sign in with your Adobe ID when connecting. MCP tools enforce your existing Adobe Journey Optimizer permissions.\n\nAuthentication flow: Connect through your IDE or LLM client, log in with Adobe ID credentials, select your IMS organization if you belong to multiple, and approve the connection. Access tokens are automatically managed by the client.\n\nTo switch IMS organizations: Disconnect the MCP connector, log out of your Adobe session in your browser, then reconnect to see the organization chooser.\n\nRequired: Valid Adobe ID with access to the desired IMS organization and Adobe Analytics product permissions.\n\nProgrammatic access: Use OAuth server-to-server credentials from Adobe Developer Console. Include headers: Authorization (Bearer token), x-gw-ims-org-id, x-api-key, and x-global-company-id.","open_contribution":null,"adobe_products":["Adobe Journey Optimizer"],"support_contact":"ajo-mcp-feedback@adobe.com","fi_codes":[],"vendor":"Adobe","vendor_name":null,"surface":["Developer"],"adobe_metadata":{"adobe_service_id":"604977","developer_distribution_app_id":null,"developer_distribution_version_id":null},"created_by":"0363113C53A0541E0A4C86E7@AdobeID","created_at":"2026-03-19T22:08:12.211000Z","updated_at":"2026-08-03T22:28:12.374000Z"},{"id":"602c8530-b8e7-4a68-9e65-6a2dabfbee54","name":"react-aria-mcp","title":"React Aria MCP","summary":"AI-powered React Aria documentation tools. Browse component docs and primitives directly from your IDE or chat app.","description":"The React Aria MCP Server exposes tools for working with React Aria documentation. It lets developers discover components and primitives, list available pages, and fetch full markdown content directly in their IDE—no context switching.\n\nUsing the React Aria MCP provides:\n\n⋅ Natural-language interaction: Describe intent (e.g., \"show me the Button docs\", \"find the useButton hook\", \"what are the Dialog options?\") and let the LLM invoke the appropriate tools.\n⋅ Consistent experience: The same React Aria MCP tools work across Cursor, VS Code, Claude Code, Codex, and Gemini CLI.\n⋅ No authentication: The server runs locally via npx; no sign-in required.\n⋅ Representative workflows: List documentation pages, fetch full markdown content for components and hooks, and preview page structure before fetching.","tags":["react-aria","react","mcp","documentation","accessibility","hooks","hide-from-playground"],"deployment_mode":["local"],"category":["Developer Tools","Learning and Documentation"],"lifecycle":"production","owner":["GRP-REACT-SPECTRUM-MCP-OWNERS"],"server_type":["external"],"base64_icon":"data:image/png;base64,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","is_active":true,"status":"active","packages":[{"registry_name":"npm","name":"@react-aria/mcp@latest","version":"1.0.0","runtime_hint":null,"tools":[{"name":"list_react_aria_pages","title":null,"description":"List available pages in the React Aria docs. Use to discover component and hook documentation before fetching full content.","input_schema":{"type":"object","properties":{"includeDescription":{"type":"boolean","description":"Include page descriptions in the output"}},"required":null},"output_schema":null,"annotations":null},{"name":"get_react_aria_page_info","title":null,"description":"Return page description and list of section titles for a given page. Use to preview a page's structure before fetching full content with get_react_aria_page.","input_schema":{"type":"object","properties":{"page_name":{"type":"string","description":"Name of the page (e.g., 'Button', 'Dialog', 'useButton'). Discover via list_react_aria_pages."}},"required":["page_name"]},"output_schema":null,"annotations":null},{"name":"get_react_aria_page","title":null,"description":"Return full page markdown, or only the specified section. Use for component docs, hooks (useButton, useDialog), guides, or API reference.","input_schema":{"type":"object","properties":{"page_name":{"type":"string","description":"Name of the page to fetch (e.g., 'Button', 'Dialog', 'useButton'). Discover via list_react_aria_pages."},"section_name":{"type":"string","description":"Optional section name to fetch only that section"}},"required":["page_name"]},"output_schema":null,"annotations":null}],"resources":[],"prompts":[],"tools_configurations":[],"resources_configurations":[],"prompts_configurations":[]}],"repository":{"url":"https://github.com/adobe/react-spectrum","source":"github","id":"12123434","subfolder":"packages/dev/mcp/react-aria"},"version":"1.0.0","version_release_notes":null,"remotes":[],"documentation":["https://react-aria.adobe.com/ai"],"installation":"Node.js must be installed on your system to run the MCP server.\n\nSupported MCP clients: Cursor, VS Code, Claude Code, Codex, Gemini CLI.\n\nCursor:\n\t1. Add the React Aria MCP server via Cursor's MCP install guide.\n\t2. Use the following config in mcp.json:\n\n{\n\t\"mcpServers\": {\n\t\t\"React Aria\": {\n\t\t\t\"command\": \"npx\",\n\t\t\t\"args\": [\"@react-aria/mcp@latest\"]\n\t\t}\n\t}\n}\n\nOr use the Add to Cursor button on https://react-aria.adobe.com/ai\n\nVS Code:\n\tcode --add-mcp '{\"name\":\"React Aria\",\"command\":\"npx\",\"args\":[\"@react-aria/mcp@latest\"]}'\n\nClaude Code:\n\tclaude mcp add react-aria npx @react-aria/mcp@latest\n\n\tFor more information, see the Claude Code MCP documentation: https://docs.claude.com/en/docs/claude-code/mcp\n\nGemini CLI:\n\tgemini mcp add react-aria npx @react-aria/mcp@latest\n\n\tFor more information, see the Gemini CLI MCP documentation: https://github.com/google-gemini/gemini-cli/blob/main/docs/tools/mcp-server.md#how-to-set-up-your-mcp-server","authentication":"The server runs locally via npx; no authentication required.","open_contribution":null,"adobe_products":[],"support_contact":null,"fi_codes":[],"vendor":"Adobe","vendor_name":null,"surface":["Developer"],"adobe_metadata":{"adobe_service_id":"react-aria-mcp-001","developer_distribution_app_id":null,"developer_distribution_version_id":null},"created_by":"0363113C53A0541E0A4C86E7@AdobeID","created_at":"2026-03-20T10:18:29.789000Z","updated_at":"2026-03-25T18:03:51.970000Z"},{"id":"84e2180a-f8dd-4a7f-910e-00a71980be9f","name":"react-spectrum-mcp","title":"React Spectrum (S2) MCP","summary":"AI-powered React Spectrum S2 documentation and design system tools. Browse component docs, search icons and illustrations, and look up style values—all from your IDE or chat app.","description":"The React Spectrum MCP Server exposes tools for working with React Spectrum S2 documentation and design system assets. It lets developers and designers discover components, find icons and illustrations, and look up style macro values directly in their IDE—no context switching.\n\nUsing the React Spectrum MCP provides:\n\n⋅ Natural-language interaction: Describe intent (e.g., \"show me the Button component docs\", \"find icons for search\", \"what are the valid values for background?\") and let the LLM invoke the appropriate tools.\n⋅ Consistent experience: The same React Spectrum MCP tools work across Cursor, VS Code, Claude Code, Codex, and Gemini CLI.\n⋅ No authentication: The server runs locally via npx; no sign-in required.\n⋅ Representative workflows: List documentation pages, fetch full markdown content for components, search the S2 icon set, search the S2 illustration set, and look up style macro property values.","tags":["react-spectrum","design-system","mcp","documentation","icons","illustrations","hide-from-playground"],"deployment_mode":["local"],"category":["Developer Tools","Learning and Documentation"],"lifecycle":"production","owner":["GRP-REACT-SPECTRUM-MCP-OWNERS"],"server_type":["external"],"base64_icon":"data:image/png;base64,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","is_active":true,"status":"active","packages":[{"registry_name":"npm","name":"@react-spectrum/mcp@latest","version":"1.0.0","runtime_hint":null,"tools":[{"name":"list_s2_pages","title":null,"description":"Returns a list of available pages in the S2 docs. Use to discover component documentation (e.g., Button, Dialog, Picker) before fetching full content.","input_schema":{"type":"object","properties":{"includeDescription":{"type":"boolean","description":"Include page descriptions in the output"}},"required":null},"output_schema":null,"annotations":null},{"name":"get_s2_page","title":null,"description":"Returns the full markdown content for a page, or a specific section if provided. Use for component docs (e.g., Button, Dialog), guides (getting-started, forms), or migration docs.","input_schema":{"type":"object","properties":{"page_name":{"type":"string","description":"Name of the page to fetch (e.g., 'Button', 'Dialog', 'getting-started'). Discover via list_s2_pages."},"section_name":{"type":"string","description":"Optional section name to fetch only that section"}},"required":["page_name"]},"output_schema":null,"annotations":null},{"name":"get_s2_page_info","title":null,"description":"Returns page description and list of sections for a given page. Use to preview a page's structure before fetching full content with get_s2_page.","input_schema":{"type":"object","properties":{"page_name":{"type":"string","description":"Name of the page (e.g., 'Button', 'Dialog'). Discover via list_s2_pages."}},"required":["page_name"]},"output_schema":null,"annotations":null},{"name":"search_s2_icons","title":null,"description":"Searches the S2 workflow icon set by one or more terms; returns matching icon names. Use to find icons for UI (e.g., 'search', 'edit', 'delete').","input_schema":{"type":"object","properties":{"terms":{"type":"array","description":"One or more search terms (e.g., ['search'] or ['add', 'plus'])"}},"required":["terms"]},"output_schema":null,"annotations":null},{"name":"search_s2_illustrations","title":null,"description":"Searches the S2 illustrations set by one or more terms; returns matching illustration names. Use for empty states, error states, or onboarding visuals.","input_schema":{"type":"object","properties":{"terms":{"type":"array","description":"One or more search terms (e.g., ['empty'] or ['error', 'not found'])"}},"required":["terms"]},"output_schema":null,"annotations":null},{"name":"get_style_macro_property_values","title":null,"description":"Returns the allowed values for a given S2 style macro property (including expanded color/spacing value lists where applicable). Use for style tokens like background, padding, border-radius.","input_schema":{"type":"object","properties":{"propertyName":{"type":"string","description":"Name of the style macro property (e.g., 'background', 'padding', 'border-radius')"}},"required":["propertyName"]},"output_schema":null,"annotations":null}],"resources":[],"prompts":[],"tools_configurations":[],"resources_configurations":[],"prompts_configurations":[]}],"repository":{"url":"https://github.com/adobe/react-spectrum","source":"github","id":"12123435","subfolder":"packages/dev/mcp/s2"},"version":"1.0.0","version_release_notes":null,"remotes":[],"documentation":["https://react-spectrum.adobe.com/ai"],"installation":"Node.js must be installed on your system to run the MCP server.\n\nSupported MCP clients: Cursor, VS Code, Claude Code, Codex, Gemini CLI.\n\nCursor:\n\t1. Add the React Spectrum MCP server via Cursor's MCP install guide.\n\t2. Use the following config in mcp.json:\n\n{\n\t\"mcpServers\": {\n\t\t\"React Spectrum (S2)\": {\n\t\t\t\"command\": \"npx\",\n\t\t\t\"args\": [\"@react-spectrum/mcp@latest\"]\n\t\t}\n\t}\n}\n\nOr use the Add to Cursor button on https://react-spectrum.adobe.com/ai\n\nClaude Code:\n\tUse the Claude Code CLI to add the server:\n\n\tclaude mcp add react-spectrum-s2 npx @react-spectrum/mcp@latest\n\n\tFor more information, see the Claude Code MCP documentation: https://docs.claude.com/en/docs/claude-code/mcp\n\nGemini CLI:\n\tUse the Gemini CLI to add the server:\n\n\tgemini mcp add react-spectrum-s2 npx @react-spectrum/mcp@latest\n\n\tFor more information, see the Gemini CLI MCP documentation: https://github.com/google-gemini/gemini-cli/blob/main/docs/tools/mcp-server.md#how-to-set-up-your-mcp-server","authentication":"The server runs locally via npx; no authentication required.","open_contribution":null,"adobe_products":[],"support_contact":null,"fi_codes":[],"vendor":"Adobe","vendor_name":null,"surface":["Developer"],"adobe_metadata":{"adobe_service_id":"react-spectrum-mcp-001","developer_distribution_app_id":null,"developer_distribution_version_id":null},"created_by":"0363113C53A0541E0A4C86E7@AdobeID","created_at":"2026-03-20T10:18:50.431000Z","updated_at":"2026-03-25T18:04:04.073000Z"},{"id":"1f01b815-7434-4348-89a2-c5a617d0b6ae","name":"spectrum-design-data-mcp","title":"Spectrum Design Data MCP Server","summary":"A Model Context Protocol (MCP) server that provides AI tools with structured access to Adobe Spectrum design system data, including design tokens and component API schemas.","description":"This MCP server enables AI assistants to query and interact with Spectrum design data through a standardized protocol. It provides access to:\n\n⋅ Design Tokens: Color palettes, typography, layout tokens, and semantic tokens\n⋅ Component Schemas: API definitions and validation schemas for Spectrum components\n⋅ Future: Component anatomy, design patterns, and guidelines","tags":["spectrum","design-system","design-tokens","component-schemas","mcp","adobe","hide-from-playground"],"deployment_mode":["local"],"category":["Developer Tools","Learning and Documentation"],"lifecycle":"production","owner":["GRP-SPECTRUM-DESIGN-DATA-MCP-OWNERS"],"server_type":["external"],"base64_icon":"data:image/png;base64,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","is_active":true,"status":"active","packages":[{"registry_name":"npm","name":"@adobe/spectrum-design-data-mcp@latest","version":"1.1.1","runtime_hint":null,"tools":[{"name":"query-tokens","title":null,"description":"Search Spectrum tokens by name, type, or category. Categories: color-aliases, color-component, color-palette, icons, layout, layout-component, semantic-color-palette, typography.","input_schema":{"type":"object","properties":{"query":{"type":"string","description":"Filter by name, type, or description"},"category":{"type":"string","description":"Filter by category"},"type":{"type":"string","description":"Filter by token type"},"limit":{"type":"number","description":"Max results (default: 50)"}},"required":null},"output_schema":null,"annotations":null},{"name":"query-tokens-by-value","title":null,"description":"Find tokens by direct or resolved value (follows aliases).","input_schema":{"type":"object","properties":{"value":{"type":"string","description":"Value to match (e.g. 1px, #000)"},"exact":{"type":"boolean","description":"Exact match (default: true)"},"limit":{"type":"number","description":"Max results (default: 50)"}},"required":["value"]},"output_schema":null,"annotations":null},{"name":"get-token-details","title":null,"description":"Get full token data by path (flat token name).","input_schema":{"type":"object","properties":{"tokenPath":{"type":"string","description":"Token path/name"},"category":{"type":"string","description":"Category to search in"}},"required":["tokenPath"]},"output_schema":null,"annotations":null},{"name":"get-component-tokens","title":null,"description":"Get tokens whose name contains a component (e.g. button, input).","input_schema":{"type":"object","properties":{"componentName":{"type":"string","description":"Component name substring"}},"required":["componentName"]},"output_schema":null,"annotations":null},{"name":"list-components","title":null,"description":"List all components (names and summary, no full schema).","input_schema":{"type":"object","properties":{"includeDescription":{"type":"boolean","description":"Include component descriptions in the output"}},"required":null},"output_schema":null,"annotations":null},{"name":"get-component-schema","title":null,"description":"Get full JSON schema for one component.","input_schema":{"type":"object","properties":{"component":{"type":"string","description":"Component name"}},"required":["component"]},"output_schema":null,"annotations":null},{"name":"validate-component-props","title":null,"description":"Validate props against a component schema.","input_schema":{"type":"object","properties":{"component":{"type":"string","description":"Component name"},"props":{"type":"object","description":"Props to validate"}},"required":["component","props"]},"output_schema":null,"annotations":null},{"name":"search-components-by-feature","title":null,"description":"Find components that have a property matching a name (e.g. size, disabled).","input_schema":{"type":"object","properties":{"feature":{"type":"string","description":"Property name substring"}},"required":["feature"]},"output_schema":null,"annotations":null}],"resources":[],"prompts":[],"tools_configurations":[],"resources_configurations":[],"prompts_configurations":[]}],"repository":{"url":"https://github.com/adobe/spectrum-design-data","source":"github","id":"12123436","subfolder":"tools/spectrum-design-data-mcp"},"version":"1.1.1","version_release_notes":null,"remotes":[],"documentation":["https://github.com/adobe/spectrum-design-data/tree/main/tools/spectrum-design-data-mcp#readme"],"installation":"Node.js 20+ must be installed on your system to run the MCP server.\n\nSupported MCP clients: Cursor, VS Code, Claude Code, Codex, Gemini CLI.\n\nCursor:\n\t1. Add the Spectrum Design Data MCP server via Cursor's MCP install guide.\n\t2. Use the following config in mcp.json:\n\n{\n\t\"mcpServers\": {\n\t\t\"spectrum-design-data\": {\n\t\t\t\"command\": \"npx\",\n\t\t\t\"args\": [\"-y\", \"@adobe/spectrum-design-data-mcp\"]\n\t\t}\n\t}\n}\n\nOr with global installation:\n\n{\n\t\"mcpServers\": {\n\t\t\"spectrum-design-data\": {\n\t\t\t\"command\": \"@adobe/spectrum-design-data-mcp\"\n\t\t}\n\t}\n}\n\nClaude Code:\n\tUse the Claude Code CLI to add the server:\n\n\tclaude mcp add spectrum-design-data -- npx -y @adobe/spectrum-design-data-mcp\n\n\tFor more information, see the Claude Code MCP documentation: https://docs.claude.com/en/docs/claude-code/mcp\n\nGemini CLI:\n\tUse the Gemini CLI to add the server:\n\n\tgemini mcp add spectrum-design-data -- npx -y @adobe/spectrum-design-data-mcp\n\n\tFor more information, see the Gemini CLI MCP documentation: https://github.com/google-gemini/gemini-cli/blob/main/docs/tools/mcp-server.md#how-to-set-up-your-mcp-server","authentication":"The server runs locally via npx; no authentication required.","open_contribution":null,"adobe_products":[],"support_contact":null,"fi_codes":[],"vendor":"Adobe","vendor_name":null,"surface":["Developer"],"adobe_metadata":{"adobe_service_id":"spectrum-design-data-mcp-001","developer_distribution_app_id":null,"developer_distribution_version_id":null},"created_by":"0363113C53A0541E0A4C86E7@AdobeID","created_at":"2026-03-20T10:19:06.649000Z","updated_at":"2026-04-20T16:22:05.482000Z"},{"id":"4e003226-b5f8-47c3-b290-436f171acdd6","name":"cja-mcp","title":"Customer Journey Analytics MCP Server","summary":"AI-powered access to Customer Journey Analytics (CJA). Discover data views, dimensions, metrics, segments, audiences, and run reports from your IDE or chat app using natural language.","description":"The Customer Journey Analytics (CJA) MCP server lets LLM clients interact with your components and data in Customer Journey Analytics. Once connected, you can retrieve data views, dimensions, metrics, segments, and run reports through natural language prompts.\n\nUsing the Customer Journey Analytics MCP Server provides:\n\n\t• Natural-language interaction: Describe intent (e.g., \"show me sessions by marketing channel for last quarter\") and let the LLM invoke the appropriate tools.\n\t• Consistent experience: The same Customer Journey Analytics MCP tools work across Cursor, ChatGPT, and Claude.\n\t• Security preserved: Requests run under the authenticated user identity; tools enforce existing Customer Journey Analytics permissions.\n\t• Representative workflows: Data view discovery, dimension and metric exploration, segment management, audience management, report execution with breakdown support, calculated metric creation, and workspace project management.\n\nCapabilities:\n\n\t• Discover data views and their configurations\n\t• Find and describe dimensions, metrics, and calculated metrics\n\t• Create and run ranked and trended reports with breakdown support\n\t• Manage segments, audiences, and date ranges\n\t• Explore workspace projects","tags":["cja","analytics","adobe","customer-journey","reporting","data-analysis","mcp"],"deployment_mode":["remote"],"category":["Product Feature","Developer Tools","Workflow Automation"],"lifecycle":"production","owner":["grp-analytics-mcp-owners"],"server_type":["external"],"base64_icon":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgMjUwIDI0NSI+PGRlZnM+PHN0eWxlPi5jbHMtMXtpc29sYXRpb246aXNvbGF0ZTt9LmNscy0ye29wYWNpdHk6MC40O21peC1ibGVuZC1tb2RlOm11bHRpcGx5O30uY2xzLTN7ZmlsbDojZmZmO30uY2xzLTR7ZmlsbDojZmEwZjAwO308L3N0eWxlPjwvZGVmcz48dGl0bGU+YWR2ZXJ0aXNpbmdfY2xvdWRfYXBwaWNvbl9BcnRib2FyZCAxPC90aXRsZT48ZyBjbGFzcz0iY2xzLTEiPjxnIGlkPSJMYXllcl8xIiBkYXRhLW5hbWU9IkxheWVyIDEiPjxpbWFnZSBjbGFzcz0iY2xzLTIiIHdpZHRoPSIyNTIiIGhlaWdodD0iMjQ2IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMSAtMSkiIHhsaW5rOmhyZWY9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBUHdBQUFEMkNBWUFBQUR5TU9vQkFBQUFDWEJJV1hNQUFBc1NBQUFMRWdIUzNYNzhBQUFRTjBsRVFWUjRYdTJkZTFNVVN4SkhmNE9Lb2lLSXIvdmMyTHZmL3p0dHhPNWV2WHBGQmVRbDRPd2ZXVWxsMS9RTUl3eE1RNTRUVWRIRGE4UUlUdVdqcXF0SDQvRllRMlUwR28wdStoNkFvVEVlc0ZTaklmMXVRZkJwVjRBaE0rNjdEbWtDV0tyd1RRUWZoYkhTWEgwQURKVnhHTiticXcvN3hpVktkLytpYjdnT21rZ2U1VjZSZEMrTSsrVWF4UWNZR2xIME0wbW41ZXJqdThJazRILyt5eEQvUmlOOEVUMUdjUmY4ZmhrUHlsaVY5TEJjSDVTdklUME1rU2o3cWFRVFNkOGtIWmZyU1JtbnFoTkJuQURHTnluK2pRamZJM29VL0dFWmo4cFlrL1M0WE5mSzUxWmxFd00xUFF5SldLdWZ5UVEva25SWXhrRzVIcFZ4WEVhY0FHNVUvR3NWZm9yb0x2a2ptZGhQSkQyVnRCNWVQeTJ2WFh3WGZrVUF3OE5UK1crcW91OUwrbHJHdnFTOThQcEFkUUp3K1c5RS9HdXA0WnNhM2V0eFQ5UFhaRUkvazdRcGFTTmNuMmxTK0VleVNRTGhZYWk0OENjeWtWdmhkeVh0U1BvU3JydmxhNGVxNmYrWnBMUHJyUEVYTG55STZsNmZlMFIvTEl2aUc1SzJKTDBvWTB2U2M1bjBMcnVuODE3SHh4b2VZR2pFR3Q3cmQwL3JYZm92a2o1TCtpUnB1NHhQc2dsZ1R6WkplTVEvVTJudUxWcjZoUW9mWlBkR1hCUjlVeWI0cXpCZXlvVGZrSW51RVgxVlZYUzY5REIwK3JyMDMxUnIrZ09aOURzeXlUOUsranVNYmRtRUVNVS9WWW4yaTVSK0lUVjhTT0U5cXErcXB1NmJNckZmUzNwVHh1dnl1ZWV5TlA2SnF1amUwR3RGUjNZWU11MDZ2SXZ2OGgvSjB2eGRXYVQvS09tRHBQZGxmQ2lmKzZLYTZudWEvMTFhVElwLzVRamZwUEF4cW0vSUl2cHJTVDlMK2tYU1QrWGpGNnBSM1p0eXNVNXZJenF5dzIwZ2R1MWRmSmYvc2JxOXE3YXNkUjgreUNMK2pyclJmaUVwL3BXRWIxTDRCN0lvL1ZRV3VWL0pSUCsxakovTDV6eXFQNVpORGxIME5wb2pPdHdtL08vVnBWd3ByL3RXcDN4bHFxOXA3ZjJyejdKb2Y2UlMyMTlWK2tzTFgyUnZVL2gxMll6MVJ0SnZZZndrazMxVGxyNnZxWXJ1Nit0SURuZUYrTGNjNWZlLzl5aC9YSXBlVjEyaGlpWHVua0tLUHhxTnZsOVcra3NKSDJUM0ZQNkpiSVo2S1l2a3YwbjZYVlYyVCtFOXFudU5UbjBPZDUxV2ZzK0l2Ykh0eTlVZStYM0VsYXFQc2hSL1h5WEZ2NnowUHl4OEk3dW44RnV5cVA2THF1eS95bVRma3MxYzdRWWFSSWRzK04rOGl4KzNsc2VvN3p0TzQyN1RCNnJlSE9tUzB2K1E4RTNOL2xBbSswdVo2TDlMK2tlNS9peHJ6ajB2M3hOL1lkYlRJVHVqWnJUaXI2b2I4YU0vVWxnUitOR2FmbTdoRzlsWFpXbjhsa3oyZjByNlF5YjhMN0pKWUZQZEZKNm9EdERGWlcvRmo5TDc1ck43NVdlK2h6SFdEemJ5NWhhK3NDTDdaZFprTmZrYldVVC9ROUsvWkduOEsxbTNzVzhQUExJRGRIRW52S2NWbzMyOFcxU3EyM2ZiL2Zkbm1wTzVoTytwMjlkVlUvbC9sUEdyTEkzZlVMY0xUMVFIbUkzNzBVYjdXUDdHRFR4SDZtN0tHYzliejE4by9KUzYvWVZxTi80MzFUVGVPL0d4d1lEc0FQUFJSbnYvK0x1Nk4rYjREVGZ4L3ZxNTZ2bVp3dmZVN1k5bGpUaGZaLzlkVlhaUDQ1RWQ0UExFYU8vbGM3d1Q3ekFNUDJEalRIUFc4eGRHZU5WVTN1djJWK291dlhrYVQyUUhXQXl0OUkvVlRlbGRlTCtuM2lQOWhmWDhWT0huVE9WL2trWDhKK3FlU29Qc0FGY2pwdmUrS2hhbDkzdnVQYjAvVWVuZXo0cnlzeUs4eSs0enpLWXNtdnZlZU45VTgxUTJJU0E3d0dLSjBudlE5ZFErSHJEUnVjbEdOZHBQMEN0OFQzVDNycnpmRFBPekxOcXZ5N3IyY1owZEFCYUhkK3pqQ3RrTDFYdnMvZVNjOXM2NlVWK1VueGJoL1IveFZPSzVMTHIvSXBQZE8vS3hTUWNBMTBlN0I4WlAwOWxSUFRYblVOMG0zc1hDaCtqdU44WjQ3ZjVHOWE2MzU3STBmMVUwNlFDdW05akVpNnRsKzdJRE16NnBucFBuMHZkRytiN0k3TkhkWnhNL3NjWlBxdkVtbmRmdHBQSUExNDk3NldWMnpMemZxRzVuYjVmR08zU0VueExkL1RDTDE3SW0zVE5SdHdNc2c3YWVmeVp6OHJWcTV1MU45UHN5cFR0KzlrWDQ5ZzM5NE1sNFEwejdZQWdBdUJtOG1lNnB2V2ZncjJTdXRnRzV3L2tuUW5TUGkvMSswcXdmT01rU0hNQnlhVmZRUEF0L0tYUFZnL0o1V2gramZEc0R0RFdDSDdibnFYeDdVd3dBM0R3dXZQZlpQTFhmVWoxR0x2Yll6b2tmOU5Ydkc3TFpZMFBzcGdNWUNqSEsrOUo1ZExWVHh5dTQyaGZoNHdML1JuaUQ5cGdkQUZnZXNmejJvK2JjMTNaRDNEa3JVbS85SHAvL3RpNGFkUUJEcEczZ3JhdDcxUFZFSGQrbTlGNFgrSXdSajh6bG1DcUE0UkNEdEdmbDhjanIrQkRXaVpUZWZ6RE9GdjdESHQxWmR3Y1lGbEY0OTlhRGRNekt6NzF0STd3MzdOYktEOFdIUmlBN3dQQm9TL0hvYld6Y1NaSldtdm85Um5nL0ROOGZCMFU2RHpBczJ0NmJCMnYzdHhQaFI2UFJxSytHOStOeC9SRDg5dVJaQUJnV01WakhoMWRNTk5wakRSK2p2SitMN1VVLzBSMWdtUHlRdTMwYmIrNzFER1FIR0M1enU5dW02YU1aQXdDR3kxenVUcXZMRVIzZ2RqTFRYUnB4QUlsQWVJQkVJRHhBSWhBZUlCRUlENUFJaEFkSUJNSURKQUxoQVJLQjhBQ0pRSGlBUkNBOFFDSVFIaUFSQ0ErUUNJUUhTQVRDQXlRQzRRRVNnZkFBaVVCNGdFUWdQRUFpRUI0Z0VRZ1BrQWlFQjBnRXdnTWtBdUVCRW9Id0FJbEFlSUJFSUR4QUloQWVJQkVJRDVBSWhBZElCTUlESkFMaEFSS0I4QUNKUUhpQVJDQThRQ0lRSGlBUkNBK1FDSVFIU0FUQ0F5UUM0UUVTZ2ZBQWlVQjRnRVFnUEVBaUVCNGdFUWdQa0FpRUIwZ0V3Z01rQXVFQkVvSHdBSWxBZUlCRUlEeEFJaEFlSUJFSUQ1QUloQWRJQk1JREpBTGhBUktCOEFDSlFIaUFSQ0E4UUNJUUhpQVJDQStRQ0lRSFNBVENBeVFDNFFFU2dmQUFpVUI0Z0VRZ1BFQWlFQjRnRVFnUGtBaUVCMGdFd2dNa0F1RUJFb0h3QUlsQWVJQkVJRHhBSWhBZUlCRUlENUFJaEFkSUJNSURKQUxoQVJLQjhBQ0pRSGlBUkNBOFFDSVFIaUFSQ0ErUUNJUUhTQVRDQXlRQzRRRVNnZkFBaVVCNGdFUWdQRUFpRUI0Z0VRZ1BrQWlFQjBnRXdnTWtBdUVCRW9Id0FJbEFlSUJFSUR4QUloQWVJQkVJRDVBSWhBZElCTUlESkFMaEFSS0I4QUNKUUhpQVJDQThRQ0lRSGlBUkNBK1FDSVFIU0FUQ0F5UUM0UUVTZ2ZBQWlVQjRnRVFnUEVBaUVCNGdFUWdQa0FpRUIwZ0V3Z01rQXVFQkVvSHdBSWxBZUlCRUlEeEFJaEFlSUJFSUQ1QUloQWRJQk1JREpBTGhBUktCOEFDSlFIaUFSQ0E4UUNJUUhpQVJDQStRQ0lRSFNBVENBeVFDNFFFU2dmQUFpVUI0Z0VRZ1BFQWlFQjRnRVFnUGtBaUVCMGdFd2dNa0F1RUJFb0h3QUlsQWVJQkVJRHhBSXZxRUg0VUJBSGVJS1B4b3hnQ0FPNEFMNzJLdmxIRXZ2RVo2Z0R0Q0ZIb2tFLzErR1BlYXJ3UEFMU2FtOUI3Wkg0VGhrUjRBN2dCOUtmMjlNRWpwQWU0UVJHK0FSTGp3NHpLK1N6b0w0M3Y0R2dEY2NtS0VkOWxQd25EcEFlQU9zS0lhd2NjeXdVOWxzcCtXaitQWEFlQVdNMDlLNzJrOUFBeWZtUUU2cHZSUitpZyswUjFnK0l4bmpITmE0VjEyVCtkcDNBRU1uMWlTdDZQamJsOUs3elg4TjlWYUh1a0Joa2xiamtkM0p3SjJHK0hQeWpjZlNUb3M0MXY0UVFBWUhpNzdOMVZ2ajFUZHJSRitQQjYzTThRM1NRZGxIRW82bHMwV1JIbUFZUkhkUFpHNWVxanFid3pXNC9GNFBHNGovR240b2YweUR0VVZIZ0NHUXhTKzlmWlk1blJ2RGQ5RytIMUpYMVZuaWxqTEE4RHlpWDAzOS9hcnpOMkpDQy8xMS9BbnN2ei9hL2poSTlHOEF4Z1NiYVA5U0RWSWZ5MGZlK091RytHYk90NVRnNitTZGlYdHFUdGJJRHZBTUlpTjlnT1pxN3N5ZHp1bGVIRjg0bTY1T0Z2c1Nkb3BJODRZcFBVQXl5Y0dhTS9JM2RjOWRiUHljL3AyMm5uanp0L2djN251cXh2bGtSNWdPYmgvSHQzMzFYWDFxN29OdTRtbW5lT051K1B5Smw4a2ZTcGpWelZOSUxVSFdCNngzM1lvYzlNOS9TSno5MWc5KzJmT2hlK3A0dy9LRDI5TCtpaWJQWHptSU1vRExJY1kzVDBUL3l4emRGdm03SUY2Nm5lcC84U2JXTWZ2bGpmNVcvYUcvbVkwOEFDV1E5dW8reUp6ODIrWnE3dWFVcjlMamZBaHlzYzYvclBzelQ2b3B2YnRNaDBBWEQvdE1weW44aDlranNZcy9GUk5kSmZzS09xV2Rubk9aNUQza2w1STJwRDBSTktxNmpIV2Z0Z2xBRndQN21Yc3NYMld5ZjVlTlFPZnVUTjJRdmp4ZUR3ZWpVWnRsTitXdmVtV3BFMlo4QS9MejBmWmtSNWc4Y1QrbXFmeW5ubi9KWE56V3hkRWQ2ay93a3ZkTjQ4enlVWVpUeVd0cVo1ZDd3K3hBSURySVdiZE83S0kvazdTVzVtYm4xV1h6cWVXMnIzQ2h5anY2Y09lN0I5NEt1bFp1VDdXWkpRbnRRZFlMRzNkdmllTDV1OGsvVm11SDh2bnoxZlErcUs3TkQzQ1M5MjFQdThHZnBESi9sU1cxajlTOXdrMXBQWUFpNk52Q2U2VExJMy9zNHdQNmk3RnpWdzlteXA4aWZKUzl4L2JscVh5VDJRUi9wR3NlUmVmUStlcFBkSURYSjRvZXl5dC81TDB2ekxlcVZ1N3o0enUwdXdJNzNnNjRiWERRNW5vYTJWRTZXTnFMeUU5d0dXSVRUclBzSGRrMGZ4UFNmK1ZDZjkzK2Z5aHBxeTd0OHdVdm9ueXNUdTRxaXE4U3g4YmVBK0U5QUNYb1pYZHQ4NStsRFhvWFBiM01oYzdHK0ZtUlhkcGpnZy9KYlcvTDR2MGE2cXBmWlE4ZHZBbHBBZVloNWpHdHgzNXQ3cENLdTljS0x4MExuM2JLZndvRXoybTlGS2RuZFpVTitjUTdRR200Nkw2eGhvL2pISlhscmIvS2VrL1pieFY3Y3FmNzNpZFIzWnBUdUVEN1ZwZ2ZJNjgxRDNpZWxPVFMzY1MwZ05FWWdydm05M2lIdm0zTXRIL0xVdm4zNnZXN2I2amJtN21GcjZubnQrWFNld2krK2VQVlkvSWZTNWJ3b3NwUDJ2MUFJYUwzaDVrNFJ2ZDNza2svMCs1dnBVdHkzWE9wcGczdWtzL0lMelVXOCs3dVBFWDlpTnlYZm9UU2V1YVRQRkhRbnpJU1l6cU1ZWGZVM2VkM1J0MGIyV1IvWk11VWJkSGZraDRxYmVlangzRitBQUxQd3ovU1BXbW01amllMGNmOFNFTDR6RE8xRTNoZDJTTk9GOW5kOWw5SjUyZk91Vjc1ZWV1MnlNL0xMdzBJWDJzUHp5bGQrRVAxSTM0ZnVOTjdPSkg4U1hraDd2Rk9GeGQ5TmlGOTVPbC9FYVkvNFhoTjhYc3FYa0sxR1ZrbHk0cHZOU1J2azFQWFB4NGJPNWV1YjZTMWZYUFZLTjl1elVYK2VHMjAwb2UvZkFueEJ6SXV2QisxNXZ2amZmOThmSCs5czZSMDVlVlhicUM4TkpFVGQvM240ckhYZS9JWnJMWHFpbSszM1czcXE3NGJZMlArSEFiYUVYM2hwdzc0Ylc2SHhDN0xXdk8vU1dyMDkrVmo3ZkwxdzhVVW5oZFVYYnBpc0pMTTZXUDlZbi9Cei9KL2pPdkpiMVVqZlorSTQ2djUzdU4zeGYxQVlaSVh6US8xV1RHNjFIOW8rcmhGZS9MYXovRXdzK1ZqMCtPMFZWbGx4WWd2RlIva1NiRm41YSsrQmw1cjJUU2I2bEcrM2hEVHJ3cGg2NCtESmxwWmEyTDNnWTlQNFBPaHg4KzZROTk4YWgrNVJTK1piVEE5NUlralN6Y2oyU1MzcE9sNmc5bE1xL0w1TjZTcGZVdnl1dm5zb2FlMzNycmUvUWZhdkxHSElDaE1hdHg3WTkrK2lJTGVKN2xicGZYL3VBSUY5MXI5WVdrOEMwTEYxNDZsMTR5UWIwVHY2cTYvOTRQMHRpVVRRQis5Y00xL0g3N3VFOC9idEVGR0JLeFR2ZUlIcC96Rm50WWZvMlBoRHBXVGQrOU5GNUlDdDl5TGNJN0lkcDd4TCt2R3ZFZnlZUitJaE44UGJ5T3d2ZnR5UWNZRXUwR21sYjRmZFdWS24reTY1RnFSSThuUUM4OHFrZXVWWGhuaXZoUmZwOEEvRDU3RnozZWIrL3I5UXBYZ0dVU3UvSXVmTng4ZHFEdUJyUmpkU1cvTWRHZEd4SGU2UkhmNi93NEFUeFFUZjk5dVM3VzhNZ09ReUkyN09MTlk1Nm1uNmdydU5mbk55cTZjNlBDTzAyTkgwL0o4UW5BQjExNnVBMzBkZW5Qd29pQysvVmFhdlNMV0lyd1RoQmZxa0szazBEOFBNQlFHYXNyZnJ6NnNHOWNvblJMRmI2bGlmeDlWNEFoTSs2N0xsUHdsa0VKMzlKa0FBQzNnaUVKM3ZKL0NsVlRqOVh3dEIwQUFBQUFTVVZPUks1Q1lJST0iLz48cmVjdCBjbGFzcz0iY2xzLTMiIHg9IjUiIHk9IjMiIHdpZHRoPSIyNDAiIGhlaWdodD0iMjM0IiByeD0iNDIuNSIvPjxwYXRoIGlkPSJfMjU2IiBkYXRhLW5hbWU9IjI1NiIgY2xhc3M9ImNscy00IiBkPSJNMTkxLjYzNTI2LDE3OC45NTAzN0gxNjMuMTI4ODFhNi4yNDMyNiw2LjI0MzI2LDAsMCwxLTUuODQ2NTMtMy43NjkxMWwtMzAuOTQ2OS03Mi4zNTkxNWExLjM2MzcxLDEuMzYzNzEsMCwwLDAtMi42MTE0NS0uMDM0bC0xOS4yODYsNDUuOTQyNTJBMS42MzQ3OSwxLjYzNDc5LDAsMCwwLDEwNS45NDQ0OSwxNTFoMjEuMTk5MTlhMy4yNjk1NywzLjI2OTU3LDAsMCwxLDMuMDEwNTMsMS45OTQwOWw5LjI4MTQsMjAuNjU0NTJhMy44MTI0OSwzLjgxMjQ5LDAsMCwxLTMuNTA3OCw1LjMwMTc2SDU4Ljc1MjI0YTMuNTE4MjcsMy41MTgyNywwLDAsMS0zLjIxMjktNC45MDQzN0wxMDQuNjI4OSw1Ny4xNDM3NkE2LjYzOSw2LjYzOSwwLDAsMSwxMTAuODYxMjQsNTNoMjguMzEzNTVhNi42MjgxMSw2LjYyODExLDAsMCwxLDYuMjMyODksNC4xNDM3NkwxOTQuODM3MDcsMTc0LjA0NkEzLjUxNzE2LDMuNTE3MTYsMCwwLDEsMTkxLjYzNTI2LDE3OC45NTAzN1oiLz48L2c+PC9nPjwvc3ZnPg==","is_active":false,"status":"active","packages":[],"repository":null,"version":"1.0.0","version_release_notes":null,"remotes":[{"transport_type":"streamable_http","url":"https://mcp-gateway.adobe.io/cja/mcp","headers":[{"name":"Authorization","description":"Bearer token using your IMS access token","value":null,"is_secret":true,"is_required":true,"format":"string","default":null,"choices":null,"variables":null},{"name":"x-gw-ims-org-id","description":"Your IMS Organization ID","value":null,"is_secret":false,"is_required":true,"format":"string","default":null,"choices":null,"variables":null},{"name":"x-api-key","description":"Your OAuth client ID","value":null,"is_secret":false,"is_required":true,"format":"string","default":null,"choices":null,"variables":null}],"tools":[{"name":"describeCja","title":null,"description":"The starting point for learning how to use the Customer Journey Analytics MCP tools. Returns focused reference guides covering tool usage, available dimensions and metrics, segment definition syntax, calculated metric definition syntax, and the two-step breakdown report workflow. Call this tool before creating segments, calculated metrics, or breakdown reports to learn the required structures.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"guideType":{"type":"string","enum":["CJA_REFERENCE_GUIDE","SEGMENT_DEFINITION_GUIDE","CALCULATED_METRIC_DEFINITION_GUIDE","BREAKDOWN_GUIDE","IMS_ORG_CONTEXT_GUIDE","DATAVIEW_CONTEXT_GUIDE"],"description":"The type of guide to return."},"dataViewId":{"type":"string","description":"Override data view ID. Provide when calling with DATAVIEW_CONTEXT_GUIDE."}},"required":["guideType"]},"output_schema":null,"annotations":null},{"name":"describeProjectDefinition","title":null,"description":"Returns a guide for creating or modifying workspace project definitions. Call this tool with the BASE guide before calling upsertProject to learn the required project structure.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"guideType":{"type":"string","enum":["BASE","DATE_RANGES","PANELS","FREEFORM_TABLE","VISUALIZATIONS","VIZ_BAR","VIZ_AREA","VIZ_SCATTER","VIZ_BULLET","VIZ_SUMMARY_CHANGE","VIZ_SECTION_HEADER","VIZ_TEXT","VIZ_FALLOUT","VIZ_FLOW","VIZ_COMBO","VIZ_COHORT","VIZ_HISTOGRAM","VIZ_JOURNEY_CANVAS","VIZ_KEY_METRIC_SUMMARY","VIZ_MAP","VIZ_VENN"],"description":"The project guide type to return."}},"required":["guideType"]},"output_schema":null,"annotations":null},{"name":"setDefaultSessionDataViewId","title":null,"description":"Sets the default data view ID for the current session. Once set, other tools that accept a dataViewId parameter can omit it. The default persists for up to 8 hours.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"dataViewId":{"type":"string","description":"The data view ID to set as the session default."}},"required":["dataViewId"]},"output_schema":null,"annotations":null},{"name":"findDimensions","title":null,"description":"Finds dimensions available in a given data view. Supports semantic search with searchQuery parameter. Hidden dimensions are excluded by default. The returned dimension IDs can be used directly in runReport and searchDimensionItems.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"dataViewId":{"type":"string","description":"The data view ID. If omitted, uses the session default."},"searchQuery":{"type":"string","description":"Semantic search query (topic, name, or purpose). Returns relevance-ranked results."},"page":{"type":"integer","description":"Page number for pagination (starts at 1). Only used when searchQuery is not provided."},"limit":{"type":"integer","description":"Number of dimensions per page (default 500, max 1000). Only used when searchQuery is not provided."},"includeHidden":{"type":"boolean","description":"Include dimensions marked as hidden. Defaults to false."}}},"output_schema":null,"annotations":null},{"name":"findMetrics","title":null,"description":"Finds available standard and custom metrics from the data view. Does NOT include calculated metrics (use findCalculatedMetrics for those). Supports semantic search. Hidden metrics are excluded by default.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"dataViewId":{"type":"string","description":"The data view ID. If omitted, uses the session default."},"searchQuery":{"type":"string","description":"Semantic search query (topic, name, or purpose). Returns relevance-ranked results."},"page":{"type":"integer","description":"Page number for pagination (starts at 1). Only used when searchQuery is not provided."},"limit":{"type":"integer","description":"Number of metrics per page (default 100, max 1000). Only used when searchQuery is not provided."},"expansions":{"type":"string","description":"Additional data to return. Available: ownerFullName, modified, componentType, approved, tags, hidden, dataName, categories."},"includeHidden":{"type":"boolean","description":"Include metrics marked as hidden. Defaults to false."}}},"output_schema":null,"annotations":null},{"name":"findCalculatedMetrics","title":null,"description":"Finds available calculated metrics. Hidden calculated metrics are excluded by default.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"page":{"type":"integer","description":"Page number for pagination (starts at 0)."},"limit":{"type":"integer","description":"Number of results per page (max 1000)."},"expansions":{"type":"string","description":"Additional data to return. Available: ownerFullName, modified, componentType, approved, tags, warning, hidden, dataName, categories."},"includeType":{"type":"string","description":"Include additional calculated metrics not owned by current user. Values: all, shared, templates, deleted, internal, curatedItem."},"includeHidden":{"type":"boolean","description":"Include calculated metrics marked as hidden. Defaults to false."}}},"output_schema":null,"annotations":null},{"name":"findSegments","title":null,"description":"Finds segments available to the user. Returns a paginated list of segments that the current user has access to.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"page":{"type":"integer","description":"Page number for pagination (starts at 0)."},"limit":{"type":"integer","description":"Number of segments per page (max 1000)."},"expansions":{"type":"string","description":"Additional data to return. Available: ownerFullName, modified, componentType, compatibility, dataId, dataName, approved, tags."},"includeType":{"type":"string","description":"Include additional segments not owned by current user. Values: all, shared, templates, deleted, internal."}},"required":["page","limit"]},"output_schema":null,"annotations":null},{"name":"findDateRanges","title":null,"description":"Finds saved date range components available to the user. Returns a paginated list.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"page":{"type":"integer","description":"Page number for pagination (starts at 0)."},"limit":{"type":"integer","description":"Number of date ranges per page (max 1000)."},"expansions":{"type":"string","description":"Additional data to return. Available: ownerFullName, modified, definition, tags."},"includeType":{"type":"string","description":"Include additional date ranges not owned by current user. Values: all, shared, templates."}},"required":["page","limit"]},"output_schema":null,"annotations":null},{"name":"findDataViews","title":null,"description":"Finds data views accessible to the user. Returns a paginated list, useful for discovering available data views or obtaining a data view ID.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"page":{"type":"integer","description":"Page number for pagination (starts at 0)."},"limit":{"type":"integer","description":"Number of data views per page (max 1000)."},"expansions":{"type":"string","description":"Additional data to return. Available: name, description."},"includeType":{"type":"string","description":"Use 'all' to return all data views in the organization (requires product admin privileges)."}},"required":["page","limit"]},"output_schema":null,"annotations":null},{"name":"findProjects","title":null,"description":"Finds workspace projects available to the user. Returns a paginated list.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"page":{"type":"integer","description":"Page number for pagination (starts at 0)."},"limit":{"type":"integer","description":"Number of projects per page (max 1000)."},"expansions":{"type":"string","description":"Additional data to return. Available: dataId, dataName, ownerFullName, modified, componentType, approved, tags, folder."},"includeType":{"type":"string","description":"Include additional projects not owned by current user. Values: all, shared."}},"required":["page","limit"]},"output_schema":null,"annotations":null},{"name":"findAudiences","title":null,"description":"Lists audiences available to the user. Returns a paginated list of audience components.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"page":{"type":"integer","description":"Page number for pagination (starts at 0)."},"limit":{"type":"integer","description":"Number of audiences per page (max 1000)."},"expansions":{"type":"string","description":"Additional data to return. Available: name, description, ownerFullName, frequency, expirationDate, publishingStatus, dataViewId, modifiedDate, createdDate, componentType, approved, tags, size."},"includeType":{"type":"string","description":"Use 'all' to return all audiences in the organization (requires product admin privileges)."}},"required":["expansions"]},"output_schema":null,"annotations":null},{"name":"runReport","title":null,"description":"The primary tool for pulling analytics data from Customer Journey Analytics. Runs a ranked report with support for single or multiple dimensions and metrics over a specified date range. Supports breakdown reports via breakdowns parameter—call describeCja(BREAKDOWN_GUIDE) for the full two-step workflow.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"dataViewId":{"type":"string","description":"The data view ID. If omitted, uses the session default."},"dimensionIds":{"type":"string","description":"The ID(s) of the dimension(s). Comma-separated for multiple. Each dimension is assigned a column ID starting from 0."},"metricIds":{"type":"string","description":"The ID(s) of the metric(s). Comma-separated for multiple. Each metric is assigned a column ID starting from 0."},"startDate":{"type":"string","description":"Start date in ISO 8601 format (YYYY-MM-DDTHH:mm:ss)."},"endDate":{"type":"string","description":"End date in ISO 8601 format (YYYY-MM-DDTHH:mm:ss)."},"page":{"type":"integer","description":"Page number for pagination (starts at 0)."},"limit":{"type":"integer","description":"Number of dimension items per page (max 1000). Defaults to 100 if not specified."},"segmentIds":{"type":"string","description":"The ID(s) of segments to apply as global filters. Comma-separated for multiple."},"adhocSegments":{"type":"array","description":"One or more ad hoc segment definitions to apply as global filters. Cannot be used with segmentIds.","items":{"type":"object"}},"sort":{"type":"array","description":"Sort settings. Each entry has componentType (metric or dimension), columnId (optional), and ascending (boolean).","items":{"type":"object"}},"generateRequestOnly":{"type":"boolean","description":"When true, returns the API request payload without executing. Defaults to false."},"breakdowns":{"type":"array","description":"One or more breakdown filters to scope the report. Each entry must have dimensionId and itemId (numeric).","items":{"type":"object"}}},"required":["dimensionIds","metricIds","startDate","endDate","page"]},"output_schema":null,"annotations":null},{"name":"searchDimensionItems","title":null,"description":"Retrieves the top dimension items for a given dimension. Also supports keyword search. Essential for obtaining numeric itemId values needed for breakdown reports in runReport.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"dataViewId":{"type":"string","description":"The data view ID. If omitted, uses the session default."},"dimensionId":{"type":"string","description":"The ID of the dimension to analyze. The variables/ prefix is required."},"startDate":{"type":"string","description":"Start date in ISO 8601 format (YYYY-MM-DDTHH:mm:ss or YYYY-MM-DD)."},"endDate":{"type":"string","description":"End date in ISO 8601 format (YYYY-MM-DDTHH:mm:ss or YYYY-MM-DD)."},"page":{"type":"integer","description":"Page number for pagination (starts at 0)."},"limit":{"type":"integer","description":"Number of dimension items per page (max 1000)."},"searchAnd":{"type":"string","description":"Search terms that are AND'd together. Space delimited."},"searchOr":{"type":"string","description":"Search terms that are OR'd together. Space delimited."}},"required":["dimensionId","startDate","endDate","page","limit"]},"output_schema":null,"annotations":null},{"name":"describeDimension","title":null,"description":"Returns detailed metadata for a given dimension, including its name, description, type, and other properties.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"dataViewId":{"type":"string","description":"The data view ID. If omitted, uses the session default."},"dimensionId":{"type":"string","description":"The dimension ID. Remove the variables/ prefix for this parameter."}},"required":["dimensionId"]},"output_schema":null,"annotations":null},{"name":"describeMetric","title":null,"description":"Returns metadata for a given metric, including its name, description, type, and other properties.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"dataViewId":{"type":"string","description":"The data view ID. If omitted, uses the session default."},"metricId":{"type":"string","description":"The metric ID. Remove the metrics/ prefix for this parameter."}},"required":["metricId"]},"output_schema":null,"annotations":null},{"name":"describeSegment","title":null,"description":"Returns metadata for a given segment, including its name, description, definition, and compatibility.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"segmentId":{"type":"string","description":"The segment ID."},"expansions":{"type":"string","description":"Additional data to return. Available: ownerFullName, modified, definition, componentType, compatibility, dataId, dataName, approved, tags, createdDate."}},"required":["segmentId","expansions"]},"output_schema":null,"annotations":null},{"name":"describeCalculatedMetric","title":null,"description":"Shows the metric formula and base metrics used for a calculated metric.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"id":{"type":"string","description":"The calculated metric ID."},"expansions":{"type":"string","description":"Additional data to return. Available: ownerFullName, modified, definition, componentType, approved, tags, warning, compatibility, hidden, dataName, categories."}},"required":["id","expansions"]},"output_schema":null,"annotations":null},{"name":"describeProject","title":null,"description":"Shows details about a workspace project. Response includes a workspaceLink field with a direct URL to open the project.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"id":{"type":"string","description":"The project ID."},"expansions":{"type":"string","description":"Additional data to return. Available: dataId, dataName, ownerFullName, modified, definition, componentType, approved, tags, folder."}},"required":["id","expansions"]},"output_schema":null,"annotations":null},{"name":"describeAudience","title":null,"description":"Returns metadata for a given audience, including its name, description, definition, publishing status, and other properties.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"audienceId":{"type":"string","description":"The audience ID."},"expansions":{"type":"string","description":"Additional data to return. Available: name, description, definition, ownerFullName, frequency, expirationDate, publishingStatus, dataViewId, modifiedDate, createdDate, componentType, approved, tags, size."}},"required":["audienceId","expansions"]},"output_schema":null,"annotations":null},{"name":"listComponentUsage","title":null,"description":"Lists the components of a specified type that are most used in reports, ranked by usage frequency.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"dataViewId":{"type":"string","description":"The data view ID. If omitted, uses the session default."},"componentType":{"type":"string","enum":["dimension","metric","segment","dateRange","project","calculatedMetric"],"description":"The type of component to check."}},"required":["componentType"]},"output_schema":null,"annotations":null},{"name":"listFrequentlyUsedWith","title":null,"description":"Lists components that are frequently used together in reports with a specified component.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"dataViewId":{"type":"string","description":"The data view ID. If omitted, uses the session default."},"componentId":{"type":"string","description":"The ID of the component to check."},"componentType":{"type":"string","enum":["dimension","metric","segment","dateRange","project","calculatedMetric"],"description":"The type of the component."}},"required":["componentId","componentType"]},"output_schema":null,"annotations":null},{"name":"listSimilarTo","title":null,"description":"Lists components that are similar to a specified component.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"dataViewId":{"type":"string","description":"The data view ID. If omitted, uses the session default."},"componentId":{"type":"string","description":"The ID of the component to check."},"componentType":{"type":"string","enum":["dimension","metric","segment","dateRange","project","calculatedMetric"],"description":"The type of the component."}},"required":["componentId","componentType"]},"output_schema":null,"annotations":null},{"name":"upsertSegment","title":null,"description":"Creates a new segment or updates an existing one. Call describeCja with SEGMENT_DEFINITION_GUIDE first to learn the required structure.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"segmentId":{"type":"string","description":"The ID of the segment to update. If not provided, creates a new segment."},"segmentBody":{"type":"object","description":"The segment metadata and definition object including name, description, definition, and compatibility."},"expansions":{"type":"string","description":"Additional data to return. Available: ownerFullName, modified, definition, componentType, compatibility, dataId, dataName, approved, tags."}},"required":["segmentBody","expansions"]},"output_schema":null,"annotations":null},{"name":"upsertCalculatedMetric","title":null,"description":"Creates a new calculated metric or updates an existing one. Call describeCja with CALCULATED_METRIC_DEFINITION_GUIDE first to learn the required structure.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"calculatedMetricId":{"type":"string","description":"The ID of the calculated metric to update. If not provided, creates a new calculated metric."},"metricBody":{"type":"object","description":"The metric metadata and definition object including name, description, dataId, and definition."},"expansions":{"type":"string","description":"Additional data to return. Available: ownerFullName, modified, definition, componentType, approved, tags, warning, compatibility, hidden, dataName."}},"required":["metricBody","expansions"]},"output_schema":null,"annotations":null},{"name":"createDateRange","title":null,"description":"Creates a new reusable date range component.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"dateRangeBody":{"type":"object","description":"The date range definition as a map."},"expansions":{"type":"string","description":"Additional data to return. Available: definition, ownerFullName, modified, approved, tags."}},"required":["dateRangeBody","expansions"]},"output_schema":null,"annotations":null},{"name":"upsertProject","title":null,"description":"Creates a new workspace project or updates an existing one. Call describeProjectDefinition with BASE first to learn the required structure. Response includes a workspaceLink field.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"projectId":{"type":"string","description":"The ID of the project to update. If not provided, creates a new project."},"projectBody":{"type":"object","description":"The project payload including definition, dataId (must be set to data view ID), type (must be project), and optionally name and description."},"expansions":{"type":"string","description":"Additional data to return. Available: dataId, dataName, ownerFullName, modified, definition, componentType, approved, tags, folder."}},"required":["projectBody","expansions"]},"output_schema":null,"annotations":null}],"tools_configurations":[],"resources":[],"resources_configurations":[],"prompts":[],"prompts_configurations":[]}],"documentation":["https://developer.adobe.com/analytics-mcp/docs/cja/","https://developer.adobe.com/analytics-mcp/docs/guides/"],"installation":"For detailed setup instructions, please refer to the official onboarding guides for your preferred MCP client:\n\n\t• ChatGPT: https://developer.adobe.com/analytics-mcp/docs/guides/chatgpt\n\t• Claude: https://developer.adobe.com/analytics-mcp/docs/guides/claude\n\t• Cursor: https://developer.adobe.com/analytics-mcp/docs/guides/cursor\n\t• Gemini CLI: https://developer.adobe.com/analytics-mcp/docs/guides/gemini\n\t• OAuth server-to-server: https://developer.adobe.com/analytics-mcp/docs/guides/oauth\n\nBefore connecting, ensure you have a valid Adobe ID with access to the desired IMS organization and the necessary product permissions.","authentication":"OAuth with Adobe ID. Sign in with your Adobe ID when connecting. MCP tools enforce your existing Customer Journey Analytics permissions.\n\nAuthentication flow: Connect through your IDE or LLM client, log in with Adobe ID credentials, select your IMS organization if you belong to multiple, and approve the connection. Access tokens are automatically managed by the client.\n\nTo switch IMS organizations: Disconnect the MCP connector, log out of your Adobe session in your browser, then reconnect to see the organization chooser.\n\nRequired: Valid Adobe ID with access to the desired IMS organization and Customer Journey Analytics product permissions.\n\nProgrammatic access: Use OAuth server-to-server credentials from Adobe Developer Console. Include headers: Authorization (Bearer token), x-gw-ims-org-id, and x-api-key.","open_contribution":null,"adobe_products":["Customer Journey Analytics"],"support_contact":"analytics-mcps@adobe.com","fi_codes":[],"vendor":"Adobe","vendor_name":null,"surface":["Developer"],"adobe_metadata":{"adobe_service_id":"594451","developer_distribution_app_id":null,"developer_distribution_version_id":null},"created_by":"0363113C53A0541E0A4C86E7@AdobeID","created_at":"2026-04-15T11:31:13.822000Z","updated_at":"2026-05-01T04:52:04.452000Z"},{"id":"353bfde1-c039-4251-a281-3991a709ad78","name":"adobe-analytics-mcp","title":"Adobe Analytics MCP Server","summary":"AI-powered access to Adobe Analytics. Discover report suites, dimensions, metrics, segments, and run reports from your IDE or chat app using natural language.","description":"The Adobe Analytics MCP server lets LLM clients interact with your components and data in Adobe Analytics. Once connected, you can retrieve report suites, dimensions, metrics, segments, and run ranked or trended reports through natural language prompts.\n\nUsing the Adobe Analytics MCP Server provides:\n\n\t• Natural-language interaction: Describe intent (e.g., \"show me page views by day for last month\") and let the LLM invoke the appropriate tools.\n\t• Consistent experience: The same Adobe Analytics MCP tools work across Cursor, ChatGPT, and Claude.\n\t• Security preserved: Requests run under the authenticated user identity; tools enforce existing Adobe Analytics permissions.\n\t• Representative workflows: Report suite discovery, dimension and metric exploration, segment management, report execution, calculated metric creation, and workspace project management.\n\nCapabilities:\n\n\t• Discover report suites and their configurations\n\t• Find and describe dimensions, metrics, and calculated metrics\n\t• Create and run ranked and trended reports\n\t• Manage segments and date ranges\n\t• Explore workspace projects","tags":["analytics","adobe","reporting","data-analysis","mcp"],"deployment_mode":["remote"],"category":["Product Feature","Developer Tools","Workflow Automation"],"lifecycle":"production","owner":["grp-analytics-mcp-owners"],"server_type":["external"],"base64_icon":"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2aWV3Qm94PSIwIDAgMjUwIDI0NSI+PGRlZnM+PHN0eWxlPi5jbHMtMXtpc29sYXRpb246aXNvbGF0ZTt9LmNscy0ye29wYWNpdHk6MC40O21peC1ibGVuZC1tb2RlOm11bHRpcGx5O30uY2xzLTN7ZmlsbDojZmZmO30uY2xzLTR7ZmlsbDojZmEwZjAwO308L3N0eWxlPjwvZGVmcz48dGl0bGU+YWR2ZXJ0aXNpbmdfY2xvdWRfYXBwaWNvbl9BcnRib2FyZCAxPC90aXRsZT48ZyBjbGFzcz0iY2xzLTEiPjxnIGlkPSJMYXllcl8xIiBkYXRhLW5hbWU9IkxheWVyIDEiPjxpbWFnZSBjbGFzcz0iY2xzLTIiIHdpZHRoPSIyNTIiIGhlaWdodD0iMjQ2IiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMSAtMSkiIHhsaW5rOmhyZWY9ImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBUHdBQUFEMkNBWUFBQUR5TU9vQkFBQUFDWEJJV1hNQUFBc1NBQUFMRWdIUzNYNzhBQUFRTjBsRVFWUjRYdTJkZTFNVVN4SkhmNE9Lb2lLSXIvdmMyTHZmL3p0dHhPNWV2WHBGQmVRbDRPd2ZXVWxsMS9RTUl3eE1RNTRUVWRIRGE4UUlUdVdqcXF0SDQvRllRMlUwR28wdStoNkFvVEVlc0ZTaklmMXVRZkJwVjRBaE0rNjdEbWtDV0tyd1RRUWZoYkhTWEgwQURKVnhHTiticXcvN3hpVktkLytpYjdnT21rZ2U1VjZSZEMrTSsrVWF4UWNZR2xIME0wbW41ZXJqdThJazRILyt5eEQvUmlOOEVUMUdjUmY4ZmhrUHlsaVY5TEJjSDVTdklUME1rU2o3cWFRVFNkOGtIWmZyU1JtbnFoTkJuQURHTnluK2pRamZJM29VL0dFWmo4cFlrL1M0WE5mSzUxWmxFd00xUFF5SldLdWZ5UVEva25SWXhrRzVIcFZ4WEVhY0FHNVUvR3NWZm9yb0x2a2ptZGhQSkQyVnRCNWVQeTJ2WFh3WGZrVUF3OE5UK1crcW91OUwrbHJHdnFTOThQcEFkUUp3K1c5RS9HdXA0WnNhM2V0eFQ5UFhaRUkvazdRcGFTTmNuMmxTK0VleVNRTGhZYWk0OENjeWtWdmhkeVh0U1BvU3JydmxhNGVxNmYrWnBMUHJyUEVYTG55STZsNmZlMFIvTEl2aUc1SzJKTDBvWTB2U2M1bjBMcnVuODE3SHh4b2VZR2pFR3Q3cmQwL3JYZm92a2o1TCtpUnB1NHhQc2dsZ1R6WkplTVEvVTJudUxWcjZoUW9mWlBkR1hCUjlVeWI0cXpCZXlvVGZrSW51RVgxVlZYUzY5REIwK3JyMDMxUnIrZ09aOURzeXlUOUsranVNYmRtRUVNVS9WWW4yaTVSK0lUVjhTT0U5cXErcXB1NmJNckZmUzNwVHh1dnl1ZWV5TlA2SnF1amUwR3RGUjNZWU11MDZ2SXZ2OGgvSjB2eGRXYVQvS09tRHBQZGxmQ2lmKzZLYTZudWEvMTFhVElwLzVRamZwUEF4cW0vSUl2cHJTVDlMK2tYU1QrWGpGNnBSM1p0eXNVNXZJenF5dzIwZ2R1MWRmSmYvc2JxOXE3YXNkUjgreUNMK2pyclJmaUVwL3BXRWIxTDRCN0lvL1ZRV3VWL0pSUCsxakovTDV6eXFQNVpORGxIME5wb2pPdHdtL08vVnBWd3ByL3RXcDN4bHFxOXA3ZjJyejdKb2Y2UlMyMTlWK2tzTFgyUnZVL2gxMll6MVJ0SnZZZndrazMxVGxyNnZxWXJ1Nit0SURuZUYrTGNjNWZlLzl5aC9YSXBlVjEyaGlpWHVua0tLUHhxTnZsOVcra3NKSDJUM0ZQNkpiSVo2S1l2a3YwbjZYVlYyVCtFOXFudU5UbjBPZDUxV2ZzK0l2Ykh0eTlVZStYM0VsYXFQc2hSL1h5WEZ2NnowUHl4OEk3dW44RnV5cVA2THF1eS95bVRma3MxYzdRWWFSSWRzK04rOGl4KzNsc2VvN3p0TzQyN1RCNnJlSE9tUzB2K1E4RTNOL2xBbSswdVo2TDlMK2tlNS9peHJ6ajB2M3hOL1lkYlRJVHVqWnJUaXI2b2I4YU0vVWxnUitOR2FmbTdoRzlsWFpXbjhsa3oyZjByNlF5YjhMN0pKWUZQZEZKNm9EdERGWlcvRmo5TDc1ck43NVdlK2h6SFdEemJ5NWhhK3NDTDdaZFprTmZrYldVVC9ROUsvWkduOEsxbTNzVzhQUExJRGRIRW52S2NWbzMyOFcxU3EyM2ZiL2Zkbm1wTzVoTytwMjlkVlUvbC9sUEdyTEkzZlVMY0xUMVFIbUkzNzBVYjdXUDdHRFR4SDZtN0tHYzliejE4by9KUzYvWVZxTi80MzFUVGVPL0d4d1lEc0FQUFJSbnYvK0x1Nk4rYjREVGZ4L3ZxNTZ2bVp3dmZVN1k5bGpUaGZaLzlkVlhaUDQ1RWQ0UExFYU8vbGM3d1Q3ekFNUDJEalRIUFc4eGRHZU5WVTN1djJWK291dlhrYVQyUUhXQXl0OUkvVlRlbGRlTCtuM2lQOWhmWDhWT0huVE9WL2trWDhKK3FlU29Qc0FGY2pwdmUrS2hhbDkzdnVQYjAvVWVuZXo0cnlzeUs4eSs0enpLWXNtdnZlZU45VTgxUTJJU0E3d0dLSjBudlE5ZFErSHJEUnVjbEdOZHBQMEN0OFQzVDNycnpmRFBPekxOcXZ5N3IyY1owZEFCYUhkK3pqQ3RrTDFYdnMvZVNjOXM2NlVWK1VueGJoL1IveFZPSzVMTHIvSXBQZE8vS3hTUWNBMTBlN0I4WlAwOWxSUFRYblVOMG0zc1hDaCtqdU44WjQ3ZjVHOWE2MzU3STBmMVUwNlFDdW05akVpNnRsKzdJRE16NnBucFBuMHZkRytiN0k3TkhkWnhNL3NjWlBxdkVtbmRmdHBQSUExNDk3NldWMnpMemZxRzVuYjVmR08zU0VueExkL1RDTDE3SW0zVE5SdHdNc2c3YWVmeVp6OHJWcTV1MU45UHN5cFR0KzlrWDQ5ZzM5NE1sNFEwejdZQWdBdUJtOG1lNnB2V2ZncjJTdXRnRzV3L2tuUW5TUGkvMSswcXdmT01rU0hNQnlhVmZRUEF0L0tYUFZnL0o1V2gramZEc0R0RFdDSDdibnFYeDdVd3dBM0R3dXZQZlpQTFhmVWoxR0x2Yll6b2tmOU5Ydkc3TFpZMFBzcGdNWUNqSEsrOUo1ZExWVHh5dTQyaGZoNHdML1JuaUQ5cGdkQUZnZXNmejJvK2JjMTNaRDNEa3JVbS85SHAvL3RpNGFkUUJEcEczZ3JhdDcxUFZFSGQrbTlGNFgrSXdSajh6bG1DcUE0UkNEdEdmbDhjanIrQkRXaVpUZWZ6RE9GdjdESHQxWmR3Y1lGbEY0OTlhRGRNekt6NzF0STd3MzdOYktEOFdIUmlBN3dQQm9TL0hvYld6Y1NaSldtdm85Um5nL0ROOGZCMFU2RHpBczJ0NmJCMnYzdHhQaFI2UFJxSytHOStOeC9SRDg5dVJaQUJnV01WakhoMWRNTk5wakRSK2p2SitMN1VVLzBSMWdtUHlRdTMwYmIrNzFER1FIR0M1enU5dW02YU1aQXdDR3kxenVUcXZMRVIzZ2RqTFRYUnB4QUlsQWVJQkVJRHhBSWhBZUlCRUlENUFJaEFkSUJNSURKQUxoQVJLQjhBQ0pRSGlBUkNBOFFDSVFIaUFSQ0ErUUNJUUhTQVRDQXlRQzRRRVNnZkFBaVVCNGdFUWdQRUFpRUI0Z0VRZ1BrQWlFQjBnRXdnTWtBdUVCRW9Id0FJbEFlSUJFSUR4QUloQWVJQkVJRDVBSWhBZElCTUlESkFMaEFSS0I4QUNKUUhpQVJDQThRQ0lRSGlBUkNBK1FDSVFIU0FUQ0F5UUM0UUVTZ2ZBQWlVQjRnRVFnUEVBaUVCNGdFUWdQa0FpRUIwZ0V3Z01rQXVFQkVvSHdBSWxBZUlCRUlEeEFJaEFlSUJFSUQ1QUloQWRJQk1JREpBTGhBUktCOEFDSlFIaUFSQ0E4UUNJUUhpQVJDQStRQ0lRSFNBVENBeVFDNFFFU2dmQUFpVUI0Z0VRZ1BFQWlFQjRnRVFnUGtBaUVCMGdFd2dNa0F1RUJFb0h3QUlsQWVJQkVJRHhBSWhBZUlCRUlENUFJaEFkSUJNSURKQUxoQVJLQjhBQ0pRSGlBUkNBOFFDSVFIaUFSQ0ErUUNJUUhTQVRDQXlRQzRRRVNnZkFBaVVCNGdFUWdQRUFpRUI0Z0VRZ1BrQWlFQjBnRXdnTWtBdUVCRW9Id0FJbEFlSUJFSUR4QUloQWVJQkVJRDVBSWhBZElCTUlESkFMaEFSS0I4QUNKUUhpQVJDQThRQ0lRSGlBUkNBK1FDSVFIU0FUQ0F5UUM0UUVTZ2ZBQWlVQjRnRVFnUEVBaUVCNGdFUWdQa0FpRUIwZ0V3Z01rQXVFQkVvSHdBSWxBZUlCRUlEeEFJaEFlSUJFSUQ1QUloQWRJQk1JREpBTGhBUktCOEFDSlFIaUFSQ0E4UUNJUUhpQVJDQStRQ0lRSFNBVENBeVFDNFFFU2dmQUFpVUI0Z0VRZ1BFQWlFQjRnRVFnUGtBaUVCMGdFd2dNa0F1RUJFb0h3QUlsQWVJQkVJRHhBSXZxRUg0VUJBSGVJS1B4b3hnQ0FPNEFMNzJLdmxIRXZ2RVo2Z0R0Q0ZIb2tFLzErR1BlYXJ3UEFMU2FtOUI3Wkg0VGhrUjRBN2dCOUtmMjlNRWpwQWU0UVJHK0FSTGp3NHpLK1N6b0w0M3Y0R2dEY2NtS0VkOWxQd25EcEFlQU9zS0lhd2NjeXdVOWxzcCtXaitQWEFlQVdNMDlLNzJrOUFBeWZtUUU2cHZSUitpZyswUjFnK0l4bmpITmE0VjEyVCtkcDNBRU1uMWlTdDZQamJsOUs3elg4TjlWYUh1a0Joa2xiamtkM0p3SjJHK0hQeWpjZlNUb3M0MXY0UVFBWUhpNzdOMVZ2ajFUZHJSRitQQjYzTThRM1NRZGxIRW82bHMwV1JIbUFZUkhkUFpHNWVxanFid3pXNC9GNFBHNGovR240b2YweUR0VVZIZ0NHUXhTKzlmWlk1blJ2RGQ5RytIMUpYMVZuaWxqTEE4RHlpWDAzOS9hcnpOMkpDQy8xMS9BbnN2ei9hL2poSTlHOEF4Z1NiYVA5U0RWSWZ5MGZlK091RytHYk90NVRnNitTZGlYdHFUdGJJRHZBTUlpTjlnT1pxN3N5ZHp1bGVIRjg0bTY1T0Z2c1Nkb3BJODRZcFBVQXl5Y0dhTS9JM2RjOWRiUHljL3AyMm5uanp0L2djN251cXh2bGtSNWdPYmgvSHQzMzFYWDFxN29OdTRtbW5lT051K1B5Smw4a2ZTcGpWelZOSUxVSFdCNngzM1lvYzlNOS9TSno5MWc5KzJmT2hlK3A0dy9LRDI5TCtpaWJQWHptSU1vRExJY1kzVDBUL3l4emRGdm03SUY2Nm5lcC84U2JXTWZ2bGpmNVcvYUcvbVkwOEFDV1E5dW8reUp6ODIrWnE3dWFVcjlMamZBaHlzYzYvclBzelQ2b3B2YnRNaDBBWEQvdE1weW44aDlranNZcy9GUk5kSmZzS09xV2Rubk9aNUQza2w1STJwRDBSTktxNmpIV2Z0Z2xBRndQN21Yc3NYMld5ZjVlTlFPZnVUTjJRdmp4ZUR3ZWpVWnRsTitXdmVtV3BFMlo4QS9MejBmWmtSNWc4Y1QrbXFmeW5ubi9KWE56V3hkRWQ2ay93a3ZkTjQ4enlVWVpUeVd0cVo1ZDd3K3hBSURySVdiZE83S0kvazdTVzVtYm4xV1h6cWVXMnIzQ2h5anY2Y09lN0I5NEt1bFp1VDdXWkpRbnRRZFlMRzNkdmllTDV1OGsvVm11SDh2bnoxZlErcUs3TkQzQ1M5MjFQdThHZnBESi9sU1cxajlTOXdrMXBQWUFpNk52Q2U2VExJMy9zNHdQNmk3RnpWdzlteXA4aWZKUzl4L2JscVh5VDJRUi9wR3NlUmVmUStlcFBkSURYSjRvZXl5dC81TDB2ekxlcVZ1N3o0enUwdXdJNzNnNjRiWERRNW5vYTJWRTZXTnFMeUU5d0dXSVRUclBzSGRrMGZ4UFNmK1ZDZjkzK2Z5aHBxeTd0OHdVdm9ueXNUdTRxaXE4U3g4YmVBK0U5QUNYb1pYZHQ4NStsRFhvWFBiM01oYzdHK0ZtUlhkcGpnZy9KYlcvTDR2MGE2cXBmWlE4ZHZBbHBBZVloNWpHdHgzNXQ3cENLdTljS0x4MExuM2JLZndvRXoybTlGS2RuZFpVTitjUTdRR200Nkw2eGhvL2pISlhscmIvS2VrL1pieFY3Y3FmNzNpZFIzWnBUdUVEN1ZwZ2ZJNjgxRDNpZWxPVFMzY1MwZ05FWWdydm05M2lIdm0zTXRIL0xVdm4zNnZXN2I2amJtN21GcjZubnQrWFNld2krK2VQVlkvSWZTNWJ3b3NwUDJ2MUFJYUwzaDVrNFJ2ZDNza2svMCs1dnBVdHkzWE9wcGczdWtzL0lMelVXOCs3dVBFWDlpTnlYZm9UU2V1YVRQRkhRbnpJU1l6cU1ZWGZVM2VkM1J0MGIyV1IvWk11VWJkSGZraDRxYmVlangzRitBQUxQd3ovU1BXbW01amllMGNmOFNFTDR6RE8xRTNoZDJTTk9GOW5kOWw5SjUyZk91Vjc1ZWV1MnlNL0xMdzBJWDJzUHp5bGQrRVAxSTM0ZnVOTjdPSkg4U1hraDd2Rk9GeGQ5TmlGOTVPbC9FYVkvNFhoTjhYc3FYa0sxR1ZrbHk0cHZOU1J2azFQWFB4NGJPNWV1YjZTMWZYUFZLTjl1elVYK2VHMjAwb2UvZkFueEJ6SXV2QisxNXZ2amZmOThmSCs5czZSMDVlVlhicUM4TkpFVGQvM240ckhYZS9JWnJMWHFpbSszM1czcXE3NGJZMlArSEFiYUVYM2hwdzc0Ylc2SHhDN0xXdk8vU1dyMDkrVmo3ZkwxdzhVVW5oZFVYYnBpc0pMTTZXUDlZbi9Cei9KL2pPdkpiMVVqZlorSTQ2djUzdU4zeGYxQVlaSVh6US8xV1RHNjFIOW8rcmhGZS9MYXovRXdzK1ZqMCtPMFZWbGx4WWd2RlIva1NiRm41YSsrQmw1cjJUU2I2bEcrM2hEVHJ3cGg2NCtESmxwWmEyTDNnWTlQNFBPaHg4KzZROTk4YWgrNVJTK1piVEE5NUlralN6Y2oyU1MzcE9sNmc5bE1xL0w1TjZTcGZVdnl1dm5zb2FlMzNycmUvUWZhdkxHSElDaE1hdHg3WTkrK2lJTGVKN2xicGZYL3VBSUY5MXI5WVdrOEMwTEYxNDZsMTR5UWIwVHY2cTYvOTRQMHRpVVRRQis5Y00xL0g3N3VFOC9idEVGR0JLeFR2ZUlIcC96Rm50WWZvMlBoRHBXVGQrOU5GNUlDdDl5TGNJN0lkcDd4TCt2R3ZFZnlZUitJaE44UGJ5T3d2ZnR5UWNZRXUwR21sYjRmZFdWS24reTY1RnFSSThuUUM4OHFrZXVWWGhuaXZoUmZwOEEvRDU3RnozZWIrL3I5UXBYZ0dVU3UvSXVmTng4ZHFEdUJyUmpkU1cvTWRHZEd4SGU2UkhmNi93NEFUeFFUZjk5dVM3VzhNZ09ReUkyN09MTlk1Nm1uNmdydU5mbk55cTZjNlBDTzAyTkgwL0o4UW5BQjExNnVBMzBkZW5Qd29pQysvVmFhdlNMV0lyd1RoQmZxa0szazBEOFBNQlFHYXNyZnJ6NnNHOWNvblJMRmI2bGlmeDlWNEFoTSs2N0xsUHdsa0VKMzlKa0FBQzNnaUVKM3ZKL0NsVlRqOVh3dEIwQUFBQUFTVVZPUks1Q1lJST0iLz48cmVjdCBjbGFzcz0iY2xzLTMiIHg9IjUiIHk9IjMiIHdpZHRoPSIyNDAiIGhlaWdodD0iMjM0IiByeD0iNDIuNSIvPjxwYXRoIGlkPSJfMjU2IiBkYXRhLW5hbWU9IjI1NiIgY2xhc3M9ImNscy00IiBkPSJNMTkxLjYzNTI2LDE3OC45NTAzN0gxNjMuMTI4ODFhNi4yNDMyNiw2LjI0MzI2LDAsMCwxLTUuODQ2NTMtMy43NjkxMWwtMzAuOTQ2OS03Mi4zNTkxNWExLjM2MzcxLDEuMzYzNzEsMCwwLDAtMi42MTE0NS0uMDM0bC0xOS4yODYsNDUuOTQyNTJBMS42MzQ3OSwxLjYzNDc5LDAsMCwwLDEwNS45NDQ0OSwxNTFoMjEuMTk5MTlhMy4yNjk1NywzLjI2OTU3LDAsMCwxLDMuMDEwNTMsMS45OTQwOWw5LjI4MTQsMjAuNjU0NTJhMy44MTI0OSwzLjgxMjQ5LDAsMCwxLTMuNTA3OCw1LjMwMTc2SDU4Ljc1MjI0YTMuNTE4MjcsMy41MTgyNywwLDAsMS0zLjIxMjktNC45MDQzN0wxMDQuNjI4OSw1Ny4xNDM3NkE2LjYzOSw2LjYzOSwwLDAsMSwxMTAuODYxMjQsNTNoMjguMzEzNTVhNi42MjgxMSw2LjYyODExLDAsMCwxLDYuMjMyODksNC4xNDM3NkwxOTQuODM3MDcsMTc0LjA0NkEzLjUxNzE2LDMuNTE3MTYsMCwwLDEsMTkxLjYzNTI2LDE3OC45NTAzN1oiLz48L2c+PC9nPjwvc3ZnPg==","is_active":false,"status":"active","packages":[],"repository":null,"version":"1.0.0","version_release_notes":null,"remotes":[{"transport_type":"streamable_http","url":"https://mcp-gateway.adobe.io/aa/mcp","headers":[{"name":"Authorization","description":"Bearer token using your IMS access token","value":null,"is_secret":true,"is_required":true,"format":"string","default":null,"choices":null,"variables":null},{"name":"x-gw-ims-org-id","description":"Your IMS Organization ID","value":null,"is_secret":false,"is_required":true,"format":"string","default":null,"choices":null,"variables":null},{"name":"x-api-key","description":"Your OAuth client ID","value":null,"is_secret":false,"is_required":true,"format":"string","default":null,"choices":null,"variables":null},{"name":"x-global-company-id","description":"Your global company ID","value":null,"is_secret":false,"is_required":true,"format":"string","default":null,"choices":null,"variables":null}],"tools":[{"name":"describeAa","title":null,"description":"The starting point for learning how to use the Adobe Analytics MCP tools. Returns focused reference guides covering tool usage, available dimensions and metrics, segment definition syntax, calculated metric definition syntax, and organizational context. Call this tool before creating segments or calculated metrics to learn the required structures.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"guideType":{"type":"string","enum":["AA_REFERENCE_GUIDE","SEGMENT_DEFINITION_GUIDE","CALCULATED_METRIC_DEFINITION_GUIDE","IMS_ORG_CONTEXT_GUIDE","REPORT_SUITE_CONTEXT_GUIDE"],"description":"The type of guide to return. If omitted, returns the default AA reference guide."}}},"output_schema":null,"annotations":null},{"name":"describeProjectDefinition","title":null,"description":"Returns a guide for creating or modifying workspace project definitions. Call this tool with the BASE guide before calling upsertProject to learn the required project structure.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"guideType":{"type":"string","enum":["BASE","DATE_RANGES","PANELS","FREEFORM_TABLE","VISUALIZATIONS","VIZ_BAR","VIZ_AREA","VIZ_SCATTER","VIZ_BULLET","VIZ_SUMMARY_CHANGE","VIZ_SECTION_HEADER","VIZ_TEXT","VIZ_FALLOUT","VIZ_FLOW","VIZ_COMBO","VIZ_COHORT","VIZ_HISTOGRAM","VIZ_JOURNEY_CANVAS","VIZ_KEY_METRIC_SUMMARY","VIZ_MAP","VIZ_VENN"],"description":"The project guide type to return."}},"required":["guideType"]},"output_schema":null,"annotations":null},{"name":"setSessionDefaults","title":null,"description":"Sets the default report suite ID and global company ID for the current session. Once set, other tools that accept these parameters can omit them. The defaults persist for up to 8 hours.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"reportSuiteId":{"type":"string","description":"The report suite ID to set as the session default."},"globalCompanyId":{"type":"string","description":"The global company ID to set as the session default."}}},"output_schema":null,"annotations":null},{"name":"getDefaultSessionReportSuiteId","title":null,"description":"Returns the current default report suite ID for this session. Returns '(not set)' if no default has been configured.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{}},"output_schema":null,"annotations":null},{"name":"clearDefaultSessionReportSuiteId","title":null,"description":"Clears the default report suite ID for this session.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{}},"output_schema":null,"annotations":null},{"name":"findCompanies","title":null,"description":"Lists all companies (login companies) accessible to the current user. Use this tool to discover which companies you have access to and to obtain a globalCompanyId.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{}},"output_schema":null,"annotations":null},{"name":"findReportSuites","title":null,"description":"Finds report suites accessible to the user within a specific company. Returns a paginated list, useful for discovering available report suites or obtaining a report suite ID.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"globalCompanyId":{"type":"string","description":"The global company ID."},"page":{"type":"integer","description":"Page number for pagination (starts at 0)."},"limit":{"type":"integer","description":"Number of report suites to return per page (max 1000)."},"expansions":{"type":"string","description":"Additional data to return. Available: name, description."}},"required":["globalCompanyId","page","limit"]},"output_schema":null,"annotations":null},{"name":"findDimensions","title":null,"description":"Finds dimensions available for the given report suite. Hidden dimensions are excluded by default. The returned dimension IDs can be used directly in runReport and searchDimensionItems.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"globalCompanyId":{"type":"string","description":"The global company ID. If omitted, uses the session default."},"reportSuiteId":{"type":"string","description":"The report suite ID. If omitted, uses the session default."},"page":{"type":"integer","description":"Page number for pagination (starts at 1)."},"limit":{"type":"integer","description":"Number of dimensions to return per page (default 500, max 1000)."},"includeHidden":{"type":"boolean","description":"Include dimensions marked as hidden. Defaults to false."}},"required":["page","limit"]},"output_schema":null,"annotations":null},{"name":"findMetrics","title":null,"description":"Finds available metrics for the given report suite. Hidden metrics are excluded by default. Returns both standard metrics and calculated metrics in a single response.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"globalCompanyId":{"type":"string","description":"The global company ID. If omitted, uses the session default."},"reportSuiteId":{"type":"string","description":"The report suite ID. If omitted, uses the session default."},"page":{"type":"integer","description":"Page number for pagination (starts at 0)."},"limit":{"type":"integer","description":"Number of metrics per page (max 1000)."},"expansions":{"type":"string","description":"Additional data to return. Available: ownerFullName, modified, componentType, approved, tags, warning, hidden, dataName, categories."},"includeHidden":{"type":"boolean","description":"Include metrics marked as hidden. Defaults to false."},"includeType":{"type":"string","description":"Use 'all' to return all metrics in the organization (requires product admin privileges)."}}},"output_schema":null,"annotations":null},{"name":"findSegments","title":null,"description":"Finds segments available to the user. Returns a paginated list of segments that the current user has access to.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"globalCompanyId":{"type":"string","description":"The global company ID. If omitted, uses the session default."},"reportSuiteId":{"type":"string","description":"The report suite ID. If omitted, uses the session default."},"page":{"type":"integer","description":"Page number for pagination (starts at 0)."},"limit":{"type":"integer","description":"Number of segments per page (max 1000)."},"expansions":{"type":"string","description":"Additional data to return. Available: ownerFullName, modified, componentType, compatibility, dataId, dataName, approved, tags."},"includeType":{"type":"string","description":"Use 'all' to return all segments in the organization (requires product admin privileges)."}},"required":["page","limit"]},"output_schema":null,"annotations":null},{"name":"findDateRanges","title":null,"description":"Finds saved date range components available to the user. Returns a paginated list.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"globalCompanyId":{"type":"string","description":"The global company ID. If omitted, uses the session default."},"reportSuiteId":{"type":"string","description":"The report suite ID. If omitted, uses the session default."},"page":{"type":"integer","description":"Page number for pagination (starts at 0)."},"limit":{"type":"integer","description":"Number of date ranges per page (max 1000)."},"expansions":{"type":"string","description":"Additional data to return. Available: ownerFullName, modified, definition, tags."},"includeType":{"type":"string","description":"Use 'all' to return all date ranges in the organization (requires product admin privileges)."}},"required":["page","limit"]},"output_schema":null,"annotations":null},{"name":"findProjects","title":null,"description":"Finds workspace projects available to the user. Returns a paginated list.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"globalCompanyId":{"type":"string","description":"The global company ID. If omitted, uses the session default."},"reportSuiteId":{"type":"string","description":"The report suite ID. If omitted, uses the session default."},"page":{"type":"integer","description":"Page number for pagination (starts at 0)."},"limit":{"type":"integer","description":"Number of projects per page (max 1000)."},"expansions":{"type":"string","description":"Additional data to return. Available: dataId, dataName, ownerFullName, modified, definition, componentType, approved, tags, folder."},"includeType":{"type":"string","description":"Use 'all' to return all projects in the organization (requires product admin privileges)."}},"required":["page","limit"]},"output_schema":null,"annotations":null},{"name":"runReport","title":null,"description":"The primary tool for pulling analytics data from Adobe Analytics. Runs a ranked report with one dimension and one or more metrics over a specified date range. Segments can be applied as global filters.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"globalCompanyId":{"type":"string","description":"The global company ID. If omitted, uses the session default."},"reportSuiteId":{"type":"string","description":"The report suite ID. If omitted, uses the session default."},"dimensionId":{"type":"string","description":"The ID of the dimension to analyze (e.g., variables/daterangeday)."},"metricIds":{"type":"string","description":"The ID(s) of the metric(s) to measure. Comma-separated for multiple."},"startDate":{"type":"string","description":"Start date in ISO 8601 format (YYYY-MM-DDTHH:mm:ss)."},"endDate":{"type":"string","description":"End date in ISO 8601 format (YYYY-MM-DDTHH:mm:ss)."},"segmentIds":{"type":"string","description":"The ID(s) of segments to apply as global filters. Comma-separated for multiple."},"limit":{"type":"integer","description":"Number of rows to return (default 100, max 1000)."},"allocationModel":{"type":"string","enum":["lastTouch","firstTouch","linear","participation","uShaped","jShaped","reverseJShaped","positionBased","timeDecay","algorithmic","instance"],"description":"The attribution model applied to each metric."}},"required":["dimensionId","metricIds","startDate","endDate"]},"output_schema":null,"annotations":null},{"name":"searchDimensionItems","title":null,"description":"Retrieves the top dimension items for a given dimension. Also supports keyword search to find specific items within a dimension.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"globalCompanyId":{"type":"string","description":"The global company ID. If omitted, uses the session default."},"reportSuiteId":{"type":"string","description":"The report suite ID. If omitted, uses the session default."},"dimensionId":{"type":"string","description":"The ID of the dimension to analyze. The variables/ prefix is required."},"startDate":{"type":"string","description":"Start date in ISO 8601 format (YYYY-MM-DDTHH:mm:ss)."},"endDate":{"type":"string","description":"End date in ISO 8601 format (YYYY-MM-DDTHH:mm:ss)."},"page":{"type":"integer","description":"Page number for pagination (starts at 1)."},"limit":{"type":"integer","description":"Number of dimension items per page (max 1000)."},"searchAnd":{"type":"string","description":"Search terms that are AND'd together. Space delimited."},"searchOr":{"type":"string","description":"Search terms that are OR'd together. Space delimited."}},"required":["dimensionId","startDate","endDate","page","limit"]},"output_schema":null,"annotations":null},{"name":"describeSegment","title":null,"description":"Returns metadata for a given segment, including its name, description, definition, and compatibility.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"globalCompanyId":{"type":"string","description":"The global company ID. If omitted, uses the session default."},"reportSuiteId":{"type":"string","description":"The report suite ID. If omitted, uses the session default."},"segmentId":{"type":"string","description":"The segment ID."},"expansions":{"type":"string","description":"Additional data to return. Available: ownerFullName, modified, isDeleted, componentType, compatibility, definition, internal, definitionLastModified, createdDate, dataId, dataName, owner, approved, tags, usageSummary."}},"required":["segmentId"]},"output_schema":null,"annotations":null},{"name":"describeCalculatedMetric","title":null,"description":"Shows the metric formula and base metrics used for a calculated metric.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"globalCompanyId":{"type":"string","description":"The global company ID. If omitted, uses the session default."},"reportSuiteId":{"type":"string","description":"The report suite ID. If omitted, uses the session default."},"id":{"type":"string","description":"The calculated metric ID."},"expansions":{"type":"string","description":"Additional data to return. Available: ownerFullName, modified, definition, componentType, approved, tags, warning, compatibility, hidden, dataName."}},"required":["id"]},"output_schema":null,"annotations":null},{"name":"describeProject","title":null,"description":"Shows details about a workspace project. Response includes a workspaceLink field with a direct URL to open the project.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"globalCompanyId":{"type":"string","description":"The global company ID. If omitted, uses the session default."},"reportSuiteId":{"type":"string","description":"The report suite ID. If omitted, uses the session default."},"id":{"type":"string","description":"The project ID."},"expansions":{"type":"string","description":"Additional data to return. Available: dataId, dataName, ownerFullName, modified, definition, componentType, approved, tags, folder."}},"required":["id"]},"output_schema":null,"annotations":null},{"name":"listComponentUsage","title":null,"description":"Lists the components of a specified type that are most used in reports, ranked by usage frequency.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"globalCompanyId":{"type":"string","description":"The global company ID. If omitted, uses the session default."},"reportSuiteId":{"type":"string","description":"The report suite ID. If omitted, uses the session default."},"componentType":{"type":"string","enum":["dimension","metric","segment","dateRange","project","calculatedMetric"],"description":"The type of component to check."}},"required":["componentType"]},"output_schema":null,"annotations":null},{"name":"listFrequentlyUsedWith","title":null,"description":"Lists components that are frequently used together in reports with a specified component.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"globalCompanyId":{"type":"string","description":"The global company ID. If omitted, uses the session default."},"reportSuiteId":{"type":"string","description":"The report suite ID. If omitted, uses the session default."},"componentId":{"type":"string","description":"The ID of the component to check."},"componentType":{"type":"string","enum":["dimension","metric","segment","dateRange","project","calculatedMetric"],"description":"The type of the component."}},"required":["componentId","componentType"]},"output_schema":null,"annotations":null},{"name":"listSimilarTo","title":null,"description":"Lists components that are similar to a specified component.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"globalCompanyId":{"type":"string","description":"The global company ID. If omitted, uses the session default."},"reportSuiteId":{"type":"string","description":"The report suite ID. If omitted, uses the session default."},"componentId":{"type":"string","description":"The ID of the component to check."},"componentType":{"type":"string","enum":["dimension","metric","segment","dateRange","project","calculatedMetric"],"description":"The type of the component."}},"required":["componentId","componentType"]},"output_schema":null,"annotations":null},{"name":"upsertSegment","title":null,"description":"Creates a new segment or updates an existing one. Call describeAa with SEGMENT_DEFINITION_GUIDE first to learn the required structure.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"globalCompanyId":{"type":"string","description":"The global company ID. If omitted, uses the session default."},"reportSuiteId":{"type":"string","description":"The report suite ID. If omitted, uses the session default."},"segmentId":{"type":"string","description":"The ID of the segment to update. If not provided, creates a new segment."},"segmentBody":{"type":"object","description":"The segment metadata and definition object including name, description, definition, and compatibility."},"expansions":{"type":"string","description":"Additional data to return. Available: ownerFullName, modified, definition, componentType, compatibility, dataId, dataName, approved, tags."}},"required":["segmentBody"]},"output_schema":null,"annotations":null},{"name":"upsertCalculatedMetric","title":null,"description":"Creates a new calculated metric or updates an existing one. Call describeAa with CALCULATED_METRIC_DEFINITION_GUIDE first to learn the required structure.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"globalCompanyId":{"type":"string","description":"The global company ID. If omitted, uses the session default."},"reportSuiteId":{"type":"string","description":"The report suite ID. If omitted, uses the session default."},"calculatedMetricId":{"type":"string","description":"The ID of the calculated metric to update. If not provided, creates a new calculated metric."},"metricBody":{"type":"object","description":"The metric metadata and definition object including name, description, dataId, and definition."},"expansions":{"type":"string","description":"Additional data to return. Available: ownerFullName, modified, definition, componentType, approved, tags, warning, compatibility, hidden, dataName."}},"required":["metricBody"]},"output_schema":null,"annotations":null},{"name":"createDateRange","title":null,"description":"Creates a new reusable date range component.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"globalCompanyId":{"type":"string","description":"The global company ID. If omitted, uses the session default."},"reportSuiteId":{"type":"string","description":"The report suite ID. If omitted, uses the session default."},"dateRangeBody":{"type":"object","description":"The date range definition as a map."},"expansions":{"type":"string","description":"Additional data to return. Available: definition, ownerFullName, modified, approved, tags."}},"required":["dateRangeBody"]},"output_schema":null,"annotations":null},{"name":"upsertProject","title":null,"description":"Creates a new workspace project or updates an existing one. Call describeProjectDefinition with BASE first to learn the required structure. Response includes a workspaceLink field.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"globalCompanyId":{"type":"string","description":"The global company ID. If omitted, uses the session default."},"reportSuiteId":{"type":"string","description":"The report suite ID. If omitted, uses the session default."},"projectId":{"type":"string","description":"The ID of the project to update. If not provided, creates a new project."},"projectBody":{"type":"object","description":"The project payload including definition, dataId (must be set to report suite ID), type (must be project), and optionally name and description."},"expansions":{"type":"string","description":"Additional data to return. Available: dataId, dataName, ownerFullName, modified, definition, componentType, approved, tags, folder."}},"required":["projectBody"]},"output_schema":null,"annotations":null}],"tools_configurations":[],"resources":[],"resources_configurations":[],"prompts":[],"prompts_configurations":[]}],"documentation":["https://developer.adobe.com/analytics-mcp/docs/aa/","https://developer.adobe.com/analytics-mcp/docs/guides/"],"installation":"For detailed setup instructions, please refer to the official onboarding guides for your preferred MCP client:\n\n\t• ChatGPT: https://developer.adobe.com/analytics-mcp/docs/guides/chatgpt\n\t• Claude: https://developer.adobe.com/analytics-mcp/docs/guides/claude\n\t• Cursor: https://developer.adobe.com/analytics-mcp/docs/guides/cursor\n\t• Gemini CLI: https://developer.adobe.com/analytics-mcp/docs/guides/gemini\n\t• OAuth server-to-server: https://developer.adobe.com/analytics-mcp/docs/guides/oauth\n\nBefore connecting, ensure you have a valid Adobe ID with access to the desired IMS organization and the necessary product permissions.","authentication":"OAuth with Adobe ID. Sign in with your Adobe ID when connecting. MCP tools enforce your existing Adobe Analytics permissions.\n\nAuthentication flow: Connect through your IDE or LLM client, log in with Adobe ID credentials, select your IMS organization if you belong to multiple, and approve the connection. Access tokens are automatically managed by the client.\n\nTo switch IMS organizations: Disconnect the MCP connector, log out of your Adobe session in your browser, then reconnect to see the organization chooser.\n\nRequired: Valid Adobe ID with access to the desired IMS organization and Adobe Analytics product permissions.\n\nProgrammatic access: Use OAuth server-to-server credentials from Adobe Developer Console. Include headers: Authorization (Bearer token), x-gw-ims-org-id, x-api-key, and x-global-company-id.","open_contribution":null,"adobe_products":["Adobe Analytics"],"support_contact":"analytics-mcps@adobe.com","fi_codes":[],"vendor":"Adobe","vendor_name":null,"surface":["Developer"],"adobe_metadata":{"adobe_service_id":"583118","developer_distribution_app_id":null,"developer_distribution_version_id":null},"created_by":"0363113C53A0541E0A4C86E7@AdobeID","created_at":"2026-04-15T11:31:25.866000Z","updated_at":"2026-05-01T04:53:04.526000Z"},{"id":"010382cd-e9c7-4ded-bf43-96545f5c62d5","name":"rtcdp-mcp","title":"Adobe Real-Time CDP MCP Server","summary":"Exposes Adobe Real-Time CDP capabilities as MCP tools for AI Agents.","description":"Query your Real-Time CDP audiences, destinations, sources, and activation run history using natural language inside your AI assistant — no API calls or product screens required. Built on the Model Context Protocol (MCP) with Streamable HTTP transport; authenticates via Adobe ID browser sign-in flow. Beta Customers: contact your Adobe representative to request access.","tags":["Agentic","MCP","AI","AEP","RTCDP","LLM","Remote","Developer","Automation"],"deployment_mode":["remote"],"category":["Developer Tools","Product Feature","Workflow Automation"],"lifecycle":"production","owner":["grp-rtcdp-mcp-owners"],"server_type":["external"],"base64_icon":null,"is_active":false,"status":"active","packages":[],"repository":null,"version":"1.0.0-beta","version_release_notes":null,"remotes":[{"transport_type":"streamable_http","url":"https://rtcdp-mcp.adobe.io/mcp","headers":[],"tools":[{"name":"search_audiences","title":null,"description":"Returns audience entities. An audience is a collection of profiles — people or accounts — that share similar behaviors or characteristics. Supports lookup by ID, catalog browsing, or filtering by name, type, state, namespace, or origin. Read-only.\n\n**Modes:** `audienceId` → one audience (filters ignored) · `audienceIds` → bulk fetch multiple audiences by ID (filters ignored) · neither → paginated list (filters: `name` substring, `entityType` profile/account, `lifecycleState` draft/published/inactive/archived, `namespace`, `originName`; pagination via `limit` and `page`).","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"imsOrgId":{"type":"string","description":"IMS Organization ID. Mapped to the x-gw-ims-org-id header on downstream AEP calls. Never automatically switch Organization ID context without asking user first."},"sandboxName":{"type":"string","description":"AEP sandbox name. Mapped to the x-sandbox-name header on downstream AEP calls. Never automatically switch Sandbox context without asking user first."},"audienceId":{"type":"string","description":"Fetch a specific audience by ID. When provided, performs a direct GET to /audiences/{audienceId} and all filter parameters are ignored. When omitted, the tool operates in list mode with optional filters."},"audienceIds":{"type":"array","items":{"type":"string"},"description":"Fetch multiple audiences in a single call. Ignored when audienceId is provided. Typical use: pass the audience IDs mapped to a destination flow to retrieve their expressions in bulk."},"name":{"type":"string","description":"Name of the Audience"},"entityType":{"type":"string","enum":["_xdm.context.profile","_xdm.context.account"],"description":"Entity type of the audience: '_xdm.context.profile' for individual/profile audiences, '_xdm.context.account' for account-based audiences."},"lifecycleState":{"type":"string","enum":["draft","published","inactive","archived"],"description":"Lifecycle state of the audience."},"namespace":{"type":"string","description":"Namespace of the audience."},"originName":{"type":"string","description":"Origin of the audience."},"limit":{"type":"integer","description":"Maximum number of results to return."},"page":{"type":"integer","description":"Page number of the results to return."}},"required":["imsOrgId","sandboxName"]},"output_schema":null,"annotations":null},{"name":"preview_audience_membership","title":null,"description":"Preview and estimate audience membership for a given audience query. Submits a preview request to the UPS API, polls until ready, then fetches membership estimate including size, confidence interval, and metadata. Supports both relational (SDD) and non-relational (PQL) audience queries.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"imsOrgId":{"type":"string","description":"IMS Organization ID. Mapped to the x-gw-ims-org-id header on downstream AEP calls. Never automatically switch Organization ID context without asking user first."},"sandboxName":{"type":"string","description":"AEP sandbox name. Mapped to the x-sandbox-name header on downstream AEP calls. Never automatically switch Sandbox context without asking user first."},"predicateExpression":{"type":"string","description":"The audience query expression (PQL/TEXT or PQL/JSON or SDD/JSON). Required input parameter - you must provide a query expression."},"predicateType":{"type":"string","enum":["pql/text","pql/json","sdd/json"],"default":"pql/text","description":"Type of predicate expression. Defaults to 'pql/text' for profile audiences. For account audiences, always forced to 'sdd/json'."},"predicateModel":{"type":"string","enum":["_xdm.context.profile","_xdm.context.account"],"default":"_xdm.context.profile","description":"Data model for the audience. Defaults to '_xdm.context.profile'. Profile audiences support both PQL and SDD; account audiences always use SDD."}},"required":["predicateExpression","imsOrgId","sandboxName"]},"output_schema":null,"annotations":null},{"name":"inspect_audience_evaluation_jobs","title":null,"description":"Returns audience evaluation job (segment job) records. Use to inspect job history, check for failures, or measure evaluation time. Read-only.\n\n**Modes:** `jobId` → one job · `jobIds` → many via bulk-get · neither → paginated list (filters: `status`, `audienceId`, `property`; controls: `limit`, `start`, `sort`).\n\nStatus enum: NEW, QUEUED, PROCESSING, SUCCEEDED, FAILED, CANCELLING, CANCELLED.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"imsOrgId":{"type":"string","description":"IMS Organization ID. Mapped to the x-gw-ims-org-id header on downstream AEP calls. Never automatically switch Organization ID context without asking user first."},"sandboxName":{"type":"string","description":"AEP sandbox name. Mapped to the x-sandbox-name header on downstream AEP calls. Never automatically switch Sandbox context without asking user first."},"jobId":{"type":"string","description":"Fetch a single audience evaluation job by ID. When provided, all other parameters are ignored."},"jobIds":{"type":"array","items":{"type":"string"},"description":"Fetch multiple audience evaluation jobs by ID in one call via bulk-get. Ignored when jobId is provided."},"status":{"type":"string","enum":["NEW","QUEUED","PROCESSING","SUCCEEDED","FAILED","CANCELLING","CANCELLED"],"description":"Filter list results by status. Omit to return jobs of all statuses."},"audienceId":{"type":"string","description":"Filter list results to jobs that processed a specific audience."},"property":{"type":"string","description":"Raw property filter expression for advanced list filtering."},"limit":{"type":"integer","description":"Maximum number of results to return per page."},"start":{"type":"integer","description":"Zero-based offset for pagination."},"sort":{"type":"string","description":"Sort expression in the format [attributeName]:[desc|asc]. Example: creationTime:desc."}},"required":["imsOrgId","sandboxName"]},"output_schema":null,"annotations":null},{"name":"inspect_audience_export_jobs","title":null,"description":"Returns audience export job records. Export jobs persist audience members to datasets in the Data Lake — distinct from evaluation jobs which run the segmentation query but don't write profiles out. Read-only.\n\n**Modes:** `exportJobId` → one job · no `exportJobId` → paginated list (controls: `limit`, `start`, `page`, `sort`). List does NOT support native filtering by status or audienceId — filter client-side.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"imsOrgId":{"type":"string","description":"IMS Organization ID. Mapped to the x-gw-ims-org-id header on downstream AEP calls. Never automatically switch Organization ID context without asking user first."},"sandboxName":{"type":"string","description":"AEP sandbox name. Mapped to the x-sandbox-name header on downstream AEP calls. Never automatically switch Sandbox context without asking user first."},"exportJobId":{"type":"integer","description":"Fetch a single export job by ID. When provided, all other parameters are ignored."},"limit":{"type":"integer","description":"Maximum number of results to return."},"page":{"type":"integer","description":"Specific page of results to return."},"start":{"type":"integer","description":"Offset for pagination by creation time."},"sort":{"type":"string","description":"Sort expression (e.g. 'updateTime:asc'). Note: does not work across multiple pages."}},"required":["imsOrgId","sandboxName"]},"output_schema":null,"annotations":null},{"name":"inspect_flow_runs","title":null,"description":"Execution history for source ingestion and destination activation flows — each run is one execution of a configured flow, with status, timing, and metrics. All flow types share the same runs collection; use `flowId` to scope to a single flow, or filter by `flowSpecId` / `status` / time range across all flows.\n\n**Modes:** `id` → one · `ids` → many with OR logic · neither → paginated list (filters: flowId, flowSpecId, status, completedAtOrAfter, completedAtOrBefore). Time-range params are epoch milliseconds (UTC).","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"imsOrgId":{"type":"string","description":"IMS Organization ID. Mapped to the x-gw-ims-org-id header on downstream AEP calls. Never automatically switch Organization ID context without asking user first."},"sandboxName":{"type":"string","description":"AEP sandbox name. Mapped to the x-sandbox-name header on downstream AEP calls. Never automatically switch Sandbox context without asking user first."},"id":{"type":"string","description":"Fetch a specific flow run by ID. When provided, all filter parameters are ignored."},"ids":{"type":"array","items":{"type":"string"},"description":"Fetch multiple flow runs by ID. Matched with OR logic. Ignored when 'id' is provided."},"flowId":{"type":"string","description":"Filter runs for a specific dataflow ID (source ingestion or destination activation)."},"flowSpecId":{"type":"string","description":"Filter by flow spec ID — identifies the run's flow template."},"status":{"type":"string","enum":["success","failed","inProgress"],"description":"Filter by run status."},"completedAtOrAfter":{"type":"integer","description":"Return runs completed at or after this timestamp (epoch milliseconds UTC)."},"completedAtOrBefore":{"type":"integer","description":"Return runs completed at or before this timestamp (epoch milliseconds UTC)."},"continuationToken":{"type":"string","description":"Continuation token for fetching the next page of results."},"limit":{"type":"integer","description":"Maximum number of results to return."},"additionalFilters":{"type":"array","items":{"type":"string"},"description":"Raw Flow Service filter expressions."}},"required":["imsOrgId","sandboxName"]},"output_schema":null,"annotations":null},{"name":"search_destination_connectors","title":null,"description":"The catalog of available destination connectors — connector classes you can activate audiences to. Each returned connectionSpec is a type definition (the connector class), not a configured instance.\n\n**Modes:** `id` → one · `ids` → many with OR logic · neither → paginated list (filters: name, state, additionalFilters).","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"imsOrgId":{"type":"string","description":"IMS Organization ID. Mapped to the x-gw-ims-org-id header on downstream AEP calls. Never automatically switch Organization ID context without asking user first."},"sandboxName":{"type":"string","description":"AEP sandbox name. Mapped to the x-sandbox-name header on downstream AEP calls. Never automatically switch Sandbox context without asking user first."},"id":{"type":"string","description":"Fetch a specific connection spec by ID. When provided, all filter parameters are ignored."},"ids":{"type":"array","items":{"type":"string"},"description":"Fetch multiple connection specs by ID. Matched with OR logic. Ignored when 'id' is provided."},"name":{"type":"string","description":"Filter by connection spec name."},"state":{"type":"string","description":"Filter by state."},"continuationToken":{"type":"string","description":"Continuation token for fetching the next page of results."},"limit":{"type":"integer","description":"Maximum number of results to return."},"additionalFilters":{"type":"array","items":{"type":"string"},"description":"Raw Flow Service filter expressions."}},"required":["imsOrgId","sandboxName"]},"output_schema":null,"annotations":null},{"name":"search_destination_accounts","title":null,"description":"Authenticated destination accounts — base connections holding credentials and connection state for a destination connector type. Each account is a configured instance of a type from search_destination_connectors.\n\n**Modes:** `id` → one · `ids` → many with OR logic · neither → paginated list (filters: name, state, connectionSpecId, additionalFilters).","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"imsOrgId":{"type":"string","description":"IMS Organization ID. Mapped to the x-gw-ims-org-id header on downstream AEP calls. Never automatically switch Organization ID context without asking user first."},"sandboxName":{"type":"string","description":"AEP sandbox name. Mapped to the x-sandbox-name header on downstream AEP calls. Never automatically switch Sandbox context without asking user first."},"id":{"type":"string","description":"Fetch a specific connection by ID. When provided, all filter parameters are ignored."},"ids":{"type":"array","items":{"type":"string"},"description":"Fetch multiple connections by ID. Matched with OR logic. Ignored when 'id' is provided."},"name":{"type":"string","description":"Filter by name."},"state":{"type":"string","description":"Filter by state."},"connectionSpecId":{"type":"string","description":"Filter by connection spec ID."},"continuationToken":{"type":"string","description":"Continuation token for fetching the next page of results."},"limit":{"type":"integer","description":"Maximum number of results to return."},"additionalFilters":{"type":"array","items":{"type":"string"},"description":"Raw Flow Service filter expressions."}},"required":["imsOrgId","sandboxName"]},"output_schema":null,"annotations":null},{"name":"search_destination_flows","title":null,"description":"Configured destination activation flows — the orchestration layer that ties together a destination account, a source connection (the AEP audience being exported), a target connection (the external destination), plus mappings, schedule, and state.\n\n**Modes:** `id` → one · `ids` → many with OR logic · neither → paginated list (filters: name, state, additionalFilters, connection spec, flow spec, segment IDs, source/target connection IDs).","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"imsOrgId":{"type":"string","description":"IMS Organization ID. Mapped to the x-gw-ims-org-id header on downstream AEP calls. Never automatically switch Organization ID context without asking user first."},"sandboxName":{"type":"string","description":"AEP sandbox name. Mapped to the x-sandbox-name header on downstream AEP calls. Never automatically switch Sandbox context without asking user first."},"id":{"type":"string","description":"Fetch a specific flow by ID. When provided, all filter parameters are ignored."},"ids":{"type":"array","items":{"type":"string"},"description":"Fetch multiple flows by ID. Matched with OR logic. Ignored when 'id' is provided."},"name":{"type":"string","description":"Filter by flow name."},"state":{"type":"string","description":"Filter by flow state (e.g., enabled, disabled)."},"flowSpecId":{"type":"string","description":"Filter by flow spec ID."},"sourceConnectionSpecId":{"type":"string","description":"Filter by the connection spec ID of the source connection."},"targetConnectionSpecId":{"type":"string","description":"Filter by the connection spec ID of the target connection (identifies the destination type)."},"segmentIds":{"type":"array","items":{"type":"string"},"description":"Filter destinations that are activated for any of these audience segment IDs (OR logic)."},"sourceConnectionIds":{"type":"array","items":{"type":"string"},"description":"Filter flows that include any of these source connection IDs."},"targetConnectionIds":{"type":"array","items":{"type":"string"},"description":"Filter flows that include any of these target connection IDs."},"continuationToken":{"type":"string","description":"Continuation token for fetching the next page of results."},"limit":{"type":"integer","description":"Maximum number of results to return."},"additionalFilters":{"type":"array","items":{"type":"string"},"description":"Raw Flow Service filter expressions."}},"required":["imsOrgId","sandboxName"]},"output_schema":null,"annotations":null},{"name":"search_destination_input_connections","title":null,"description":"The AEP audience or dataset that feeds a destination flow. Returns sourceConnection entities — NOTE: in a destination flow, the sourceConnection field actually points at the AEP-side input (the audience being exported), NOT an external source.\n\n**Modes:** `id` → one · `ids` → many with OR logic · neither → paginated list (filters: name, state, baseConnectionId, connectionSpecId, additionalFilters).","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"imsOrgId":{"type":"string","description":"IMS Organization ID. Mapped to the x-gw-ims-org-id header on downstream AEP calls. Never automatically switch Organization ID context without asking user first."},"sandboxName":{"type":"string","description":"AEP sandbox name. Mapped to the x-sandbox-name header on downstream AEP calls. Never automatically switch Sandbox context without asking user first."},"id":{"type":"string","description":"Fetch a specific source connection by ID. When provided, all filter parameters are ignored."},"ids":{"type":"array","items":{"type":"string"},"description":"Fetch multiple source connections by ID. Matched with OR logic. Ignored when 'id' is provided."},"name":{"type":"string","description":"Filter by name."},"state":{"type":"string","description":"Filter by state."},"baseConnectionId":{"type":"string","description":"Filter by base connection ID."},"connectionSpecId":{"type":"string","description":"Filter by connection spec ID."},"continuationToken":{"type":"string","description":"Continuation token for fetching the next page of results."},"limit":{"type":"integer","description":"Maximum number of results to return."},"additionalFilters":{"type":"array","items":{"type":"string"},"description":"Raw Flow Service filter expressions."}},"required":["imsOrgId","sandboxName"]},"output_schema":null,"annotations":null},{"name":"search_destination_output_connections","title":null,"description":"The external destination of a destination flow — the endpoint that receives exported audience data (data format + path config). Returns targetConnection entities.\n\n**Modes:** `id` → one · `ids` → many with OR logic · neither → paginated list (filters: name, state, baseConnectionId, connectionSpecId, additionalFilters).","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"imsOrgId":{"type":"string","description":"IMS Organization ID. Mapped to the x-gw-ims-org-id header on downstream AEP calls. Never automatically switch Organization ID context without asking user first."},"sandboxName":{"type":"string","description":"AEP sandbox name. Mapped to the x-sandbox-name header on downstream AEP calls. Never automatically switch Sandbox context without asking user first."},"id":{"type":"string","description":"Fetch a specific target connection by ID. When provided, all filter parameters are ignored."},"ids":{"type":"array","items":{"type":"string"},"description":"Fetch multiple target connections by ID. Matched with OR logic. Ignored when 'id' is provided."},"name":{"type":"string","description":"Filter by name."},"state":{"type":"string","description":"Filter by state."},"baseConnectionId":{"type":"string","description":"Filter by base connection ID."},"connectionSpecId":{"type":"string","description":"Filter by connection spec ID."},"continuationToken":{"type":"string","description":"Continuation token for fetching the next page of results."},"limit":{"type":"integer","description":"Maximum number of results to return."},"additionalFilters":{"type":"array","items":{"type":"string"},"description":"Raw Flow Service filter expressions."}},"required":["imsOrgId","sandboxName"]},"output_schema":null,"annotations":null},{"name":"search_source_connectors","title":null,"description":"The catalog of available source connectors — connector classes you can authenticate against and ingest from. Each returned connectionSpec is a type definition (the connector class), not a configured instance.\n\n**Modes:** `id` → one · `ids` → many with OR logic · neither → paginated list (filters: name, state, additionalFilters).","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"imsOrgId":{"type":"string","description":"IMS Organization ID. Mapped to the x-gw-ims-org-id header on downstream AEP calls. Never automatically switch Organization ID context without asking user first."},"sandboxName":{"type":"string","description":"AEP sandbox name. Mapped to the x-sandbox-name header on downstream AEP calls. Never automatically switch Sandbox context without asking user first."},"id":{"type":"string","description":"Fetch a specific connection spec by ID. When provided, all filter parameters are ignored."},"ids":{"type":"array","items":{"type":"string"},"description":"Fetch multiple connection specs by ID. Matched with OR logic. Ignored when 'id' is provided."},"name":{"type":"string","description":"Filter by connection spec name."},"state":{"type":"string","description":"Filter by state."},"continuationToken":{"type":"string","description":"Continuation token for fetching the next page of results."},"limit":{"type":"integer","description":"Maximum number of results to return."},"additionalFilters":{"type":"array","items":{"type":"string"},"description":"Raw Flow Service filter expressions."}},"required":["imsOrgId","sandboxName"]},"output_schema":null,"annotations":null},{"name":"search_source_accounts","title":null,"description":"Authenticated source accounts — base connections holding credentials and connection state for a specific source connector type. Each account is a configured instance of a type from search_source_connectors.\n\n**Modes:** `id` → one · `ids` → many with OR logic · neither → paginated list (filters: name, state, connectionSpecId, additionalFilters).","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"imsOrgId":{"type":"string","description":"IMS Organization ID. Mapped to the x-gw-ims-org-id header on downstream AEP calls. Never automatically switch Organization ID context without asking user first."},"sandboxName":{"type":"string","description":"AEP sandbox name. Mapped to the x-sandbox-name header on downstream AEP calls. Never automatically switch Sandbox context without asking user first."},"id":{"type":"string","description":"Fetch a specific connection by ID. When provided, all filter parameters are ignored."},"ids":{"type":"array","items":{"type":"string"},"description":"Fetch multiple connections by ID. Matched with OR logic. Ignored when 'id' is provided."},"name":{"type":"string","description":"Filter by name."},"state":{"type":"string","description":"Filter by state."},"connectionSpecId":{"type":"string","description":"Filter by connection spec ID."},"continuationToken":{"type":"string","description":"Continuation token for fetching the next page of results."},"limit":{"type":"integer","description":"Maximum number of results to return."},"additionalFilters":{"type":"array","items":{"type":"string"},"description":"Raw Flow Service filter expressions."}},"required":["imsOrgId","sandboxName"]},"output_schema":null,"annotations":null},{"name":"search_source_flows","title":null,"description":"Configured source ingestion pipelines — the orchestration layer that ties together a source account, an ingest connection, and a target connection, plus mappings, schedule, and state.\n\n**Modes:** `id` → one · `ids` → many with OR logic · neither → paginated list (filters: name, state, additionalFilters, connection spec, flow spec, source/target connection IDs).","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"imsOrgId":{"type":"string","description":"IMS Organization ID. Mapped to the x-gw-ims-org-id header on downstream AEP calls. Never automatically switch Organization ID context without asking user first."},"sandboxName":{"type":"string","description":"AEP sandbox name. Mapped to the x-sandbox-name header on downstream AEP calls. Never automatically switch Sandbox context without asking user first."},"id":{"type":"string","description":"Fetch a specific flow by ID. When provided, all filter parameters are ignored."},"ids":{"type":"array","items":{"type":"string"},"description":"Fetch multiple flows by ID. Matched with OR logic. Ignored when 'id' is provided."},"name":{"type":"string","description":"Filter by flow name."},"state":{"type":"string","description":"Filter by flow state (e.g., enabled, disabled)."},"flowSpecId":{"type":"string","description":"Filter by flow spec ID."},"connectionSpecId":{"type":"string","description":"Filter by the connection spec ID of the source connector (identifies the source connector type)."},"sourceConnectionIds":{"type":"array","items":{"type":"string"},"description":"Filter flows that include any of these source connection IDs."},"targetConnectionIds":{"type":"array","items":{"type":"string"},"description":"Filter flows that include any of these target connection IDs."},"continuationToken":{"type":"string","description":"Continuation token for fetching the next page of results."},"limit":{"type":"integer","description":"Maximum number of results to return."},"additionalFilters":{"type":"array","items":{"type":"string"},"description":"Raw Flow Service filter expressions."}},"required":["imsOrgId","sandboxName"]},"output_schema":null,"annotations":null},{"name":"search_source_input_connections","title":null,"description":"The data selection layer of a source flow — what data to pull from an account (table, file path, schema). Sits between search_source_accounts and search_source_flows. Returns sourceConnection entities.\n\n**Modes:** `id` → one · `ids` → many with OR logic · neither → paginated list (filters: name, state, baseConnectionId, connectionSpecId, additionalFilters).","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"imsOrgId":{"type":"string","description":"IMS Organization ID. Mapped to the x-gw-ims-org-id header on downstream AEP calls. Never automatically switch Organization ID context without asking user first."},"sandboxName":{"type":"string","description":"AEP sandbox name. Mapped to the x-sandbox-name header on downstream AEP calls. Never automatically switch Sandbox context without asking user first."},"id":{"type":"string","description":"Fetch a specific source connection by ID. When provided, all filter parameters are ignored."},"ids":{"type":"array","items":{"type":"string"},"description":"Fetch multiple source connections by ID. Matched with OR logic. Ignored when 'id' is provided."},"name":{"type":"string","description":"Filter by name."},"state":{"type":"string","description":"Filter by state."},"baseConnectionId":{"type":"string","description":"Filter by base connection ID."},"connectionSpecId":{"type":"string","description":"Filter by connection spec ID."},"continuationToken":{"type":"string","description":"Continuation token for fetching the next page of results."},"limit":{"type":"integer","description":"Maximum number of results to return."},"additionalFilters":{"type":"array","items":{"type":"string"},"description":"Raw Flow Service filter expressions."}},"required":["imsOrgId","sandboxName"]},"output_schema":null,"annotations":null},{"name":"search_source_output_connections","title":null,"description":"The AEP dataset destination of a source flow — where ingested data lands inside AEP. Returns targetConnection entities.\n\n**Modes:** `id` → one · `ids` → many with OR logic · neither → paginated list (filters: name, state, baseConnectionId, connectionSpecId, additionalFilters).","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"imsOrgId":{"type":"string","description":"IMS Organization ID. Mapped to the x-gw-ims-org-id header on downstream AEP calls. Never automatically switch Organization ID context without asking user first."},"sandboxName":{"type":"string","description":"AEP sandbox name. Mapped to the x-sandbox-name header on downstream AEP calls. Never automatically switch Sandbox context without asking user first."},"id":{"type":"string","description":"Fetch a specific target connection by ID. When provided, all filter parameters are ignored."},"ids":{"type":"array","items":{"type":"string"},"description":"Fetch multiple target connections by ID. Matched with OR logic. Ignored when 'id' is provided."},"name":{"type":"string","description":"Filter by name."},"state":{"type":"string","description":"Filter by state."},"baseConnectionId":{"type":"string","description":"Filter by base connection ID."},"connectionSpecId":{"type":"string","description":"Filter by connection spec ID."},"continuationToken":{"type":"string","description":"Continuation token for fetching the next page of results."},"limit":{"type":"integer","description":"Maximum number of results to return."},"additionalFilters":{"type":"array","items":{"type":"string"},"description":"Raw Flow Service filter expressions."}},"required":["imsOrgId","sandboxName"]},"output_schema":null,"annotations":null},{"name":"search_identity_namespaces","title":null,"description":"Returns identity namespace definitions. Namespaces classify identity values (e.g. Email, Phone, ECID, loyalty IDs). Includes both Adobe-provided standard namespaces (custom: false) and organization-defined custom namespaces (custom: true).\n\n**Modes:** `id` → one namespace · no `id` → all namespaces filtered client-side by code, idType, custom. No pagination — returns every namespace in one response.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"imsOrgId":{"type":"string","description":"IMS Organization ID. Mapped to the x-gw-ims-org-id header on downstream AEP calls. Never automatically switch Organization ID context without asking user first."},"sandboxName":{"type":"string","description":"AEP sandbox name. Mapped to the x-sandbox-name header on downstream AEP calls. Never automatically switch Sandbox context without asking user first."},"id":{"type":"integer","description":"Fetch a specific namespace by its integer ID. When provided, all filter parameters are ignored."},"code":{"type":"string","description":"Filter list results to namespaces whose code matches this value (e.g. 'Email', 'ECID', 'Phone'). Ignored when 'id' is provided."},"idType":{"type":"string","enum":["COOKIE","CROSS_DEVICE","DEVICE","Email","MOBILE","NON_PEOPLE","PHONE_NUMBER","Phone"],"description":"Filter list results by identity type. Ignored when 'id' is provided."},"custom":{"type":"boolean","description":"Filter by namespace type. 'true' returns only custom namespaces; 'false' returns only Adobe-provided standard namespaces. Omit to return all. Ignored when 'id' is provided."}},"required":["imsOrgId","sandboxName"]},"output_schema":null,"annotations":null},{"name":"search_merge_policies","title":null,"description":"Returns merge policy records. A merge policy defines how RT-CDP assembles a unified Real-Time Customer Profile from profile fragments across datasets — controlling which fragments are included, whether identities are stitched, and which value wins on conflict.\n\n**Modes:** `mergePolicyId` → one · `mergePolicyIds` → bulk fetch · neither → paginated list (filters: schemaName, default, isActiveOnEdge, identityGraphType, attributeMergeType, orderBy).","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{"imsOrgId":{"type":"string","description":"IMS Organization ID. Mapped to the x-gw-ims-org-id header on downstream AEP calls. Never automatically switch Organization ID context without asking user first."},"sandboxName":{"type":"string","description":"AEP sandbox name. Mapped to the x-sandbox-name header on downstream AEP calls. Never automatically switch Sandbox context without asking user first."},"mergePolicyId":{"type":"string","description":"Fetch a single merge policy by ID. When provided, all other parameters are ignored."},"mergePolicyIds":{"type":"array","items":{"type":"string"},"description":"Fetch multiple merge policies by ID in one call via bulk-get. Ignored when mergePolicyId is provided."},"schemaName":{"type":"string","description":"Filter by XDM schema class name (e.g. '_xdm.context.profile'). Combine with 'default=true' to retrieve the single default merge policy for a specific schema class."},"default":{"type":"boolean","description":"Filter by whether the merge policy is the default. Always combine with 'schemaName'."},"isActiveOnEdge":{"type":"boolean","description":"Filter by whether merge policies are active on edge. Required for edge audiences and Edge Destinations."},"identityGraphType":{"type":"string","enum":["none","pdg"],"description":"Filter by identity graph type. 'none' = no stitching; 'pdg' = private identity graph stitching."},"attributeMergeType":{"type":"string","enum":["timestampOrdered","dataSetPrecedence"],"description":"Filter by attribute merge type."},"orderBy":{"type":"string","description":"Sort expression. Use field name for ascending (e.g. 'name'), prefix with '-' for descending ('-name')."},"limit":{"type":"integer","description":"Maximum number of results to return per page. Default is 20."},"start":{"type":"string","description":"Pagination cursor. Use the 'start' value from the previous response's '_page' block."}},"required":["imsOrgId","sandboxName"]},"output_schema":null,"annotations":null},{"name":"search_organizations","title":null,"description":"Returns the list of Adobe IMS organizations accessible to the authenticated user. Each organization has orgName (human-readable) and orgId (canonical ID used across AEP, already formatted as {ident}@{authSrc}). Use to show available Organizations when Organization ID is needed for other tools.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{}},"output_schema":null,"annotations":null}],"tools_configurations":[],"resources":[],"resources_configurations":[],"prompts":[],"prompts_configurations":[]}],"documentation":["https://experienceleague.adobe.com/en/docs/experience-cloud-ai/experience-cloud-ai/mcp/rtcdp-mcp"],"installation":"Validated MCP clients: Anthropic Claude, Cursor, OpenAI ChatGPT, Claude Code, Codex.\n\nNOTE: The Real-Time CDP MCP server is in Public Beta. Access is not automatic -- contact your Adobe account representative to request enrollment and have your organization allowlisted before attempting to connect.\n\nBEFORE YOU START\n- Your Adobe organization has been allowlisted for the RT-CDP MCP Beta (your account rep confirms this).\n- You have RT-CDP permissions to view audiences, destinations, and data flows in Adobe Experience Platform.\n- You know your Organization ID and sandbox name.\n- Server URL: https://rtcdp-mcp.adobe.io/mcp\n- You sign in with your Adobe ID in the browser on first use. There is no API key to create or store.\n\nGENERIC SETUP (ALL CLIENTS)\n1. Add the Real-Time CDP MCP server URL (https://rtcdp-mcp.adobe.io/mcp).\n2. Save or activate the configuration to trigger the connection.\n3. Sign in with your Adobe ID when prompted.\n4. If your Adobe ID belongs to multiple organizations, select the desired organization.\n5. Approve the connection between Adobe and your client.\n6. Verify that the application has discovered the MCP tools.\n7. At the start of each session, tell your assistant your Organization ID and sandbox name:\n   \"Use org  and sandbox  for this session.\"\n\nWHERE TO ADD THE SERVER, BY CLIENT\n- Claude (web and desktop): Settings &gt; Connectors &gt; Add custom connector\n- ChatGPT (web and desktop): Apps &amp; Connectors (Developer Mode)\n- Cursor: mcp.json configuration file\n- Claude Code: claude mcp add, or config file\n- Codex: ~/.codex/config.toml configuration file\n\nCONFIGURATION FOR CLIENTS THAT USE A CONFIG FILE (e.g., Cursor, Claude Code, Codex)\n{\n  \"mcpServers\": {\n    \"rtcdp\": {\n      \"url\": \"https://rtcdp-mcp.adobe.io/mcp\",\n      \"transport\": \"http\"\n    }\n  }\n}\n\nENTERPRISE and TEAM ROLLOUT (ADMIN GUIDE)\nOn organization plans, custom connectors are off by default. An admin enables RT-CDP once; then each user connects with their own Adobe ID. Because every user signs in individually, their own AEP permissions and PII access carry through -- no shared credentials, no over-broad access.\n\nClaude Team and Claude Enterprise:\n1. An Owner or Primary Owner goes to Settings &gt; Organization &gt; Connectors.\n2. Click Add custom connector.\n3. Enter the URL https://rtcdp-mcp.adobe.io/mcp. Leave OAuth Client ID/Secret blank -- RT-CDP registers automatically.\n4. Click Add.\n5. Each user then connects the \"rtcdp\" connector from their own settings and signs in with their Adobe ID.\nNote: Claude Enterprise also offers Enterprise-managed auth (beta) -- authorize the connector once via your identity provider and users inherit access on first login.\n\nChatGPT Business and ChatGPT Enterprise:\n1. A workspace admin goes to Settings &gt; Permissions &amp; Roles &gt; Connected data.\n2. Enable Developer Mode / Create custom MCP connectors. (Each admin enables it for themselves.)\n3. On Enterprise/Edu, use RBAC to grant connector access to specific people, and allowlist the RT-CDP connector.\n4. Users add https://rtcdp-mcp.adobe.io/mcp under Apps &amp; Connectors and sign in with their Adobe ID.\n\nVERIFY and TROUBLESHOOT\n- No tools appear: confirm your org is allowlisted and that the connection was approved.\n- Permission errors on a tool: you need the matching RT-CDP permission (audiences / destinations / data flows) in AEP.\n- Wrong data returned: re-state your org and sandbox at the start of the session.\n\nBefore using, ensure your Adobe organization has been allowlisted for the RT-CDP MCP Beta, and that you have the necessary permissions in Adobe Experience Platform to view audiences, destinations, and flow service entities.\n\nFor more information, check out the documentation link.","authentication":"OAuth with Adobe ID. Sign in when connecting — MCP tools enforce your existing Real-Time CDP permissions.\n\nAuthentication flow: Connect through your MCP client, sign in with Adobe ID, select your organization if you belong to multiple, and approve the connection. Tokens are managed by the client.\n\nSession context required: Every tool call requires your Organization ID and sandbox name. At the start of each session, tell your assistant: \"Use org  and sandbox  for this session.\" If you don't know your Organization ID, call search_organizations — it returns all orgs your credentials can access.\n\nTo switch organizations: Disconnect the MCP connector, log out of your Adobe session in your browser, then reconnect to see the organization chooser.\n\nRequired: Valid Adobe ID with access to an allowlisted Adobe organization and the necessary Real-Time CDP product permissions.","open_contribution":null,"adobe_products":["Adobe Experience Platform"],"support_contact":"adobecxmcp@adobe.com","fi_codes":[],"vendor":"Adobe","vendor_name":null,"surface":["Developer"],"adobe_metadata":{"adobe_service_id":"606595","developer_distribution_app_id":null,"developer_distribution_version_id":null},"created_by":"0363113C53A0541E0A4C86E7@AdobeID","created_at":"2026-05-04T21:15:19.522000Z","updated_at":"2026-06-24T21:33:31.266000Z"},{"id":"0f947ab3-195a-4bdf-84ca-ab62f8131c1a","name":"run-workflow","title":"Firefly Creative Production MCP Server","summary":"MCP server exposing Adobe creative production workflow capabilities to LLMs via natural language.","description":"The Firefly Creative Production MCP Server bridges any MCP-compatible LLM Agent with Adobe's Firefly Creative Production for Enterprise (FFCPE) platform running our creative production workflows. \n\nFFCPE is a workflow orchestration engine that creates and executes multimodal media workflows using Adobe services like Photoshop, InDesign, Illustrator, Firefly etc. to deliver scaled activation ready assets.\n\nUsers can discover and execute prebuilt workflows or compose new workflows using natural language commands via any Agents that integrate with these MCP tools.","tags":["firefly-creative-production","run-workflow"],"deployment_mode":["remote"],"category":["Workflow Automation"],"lifecycle":"production","owner":["aws_aws_cent_dev_administrator","org-anmolc-all","grp-claude-ent-users"],"server_type":["external"],"base64_icon":null,"is_active":false,"status":"active","packages":[{"registry_name":"npm","name":"run-workflow-mcp-3.4.2.tgz","version":"3.4.2","runtime_hint":null,"tools":[],"resources":[],"prompts":[],"tools_configurations":[],"resources_configurations":[],"prompts_configurations":[]}],"repository":null,"version":"3.4.2","version_release_notes":null,"remotes":[{"transport_type":"streamable_http","url":"https://run-workflow.adobe.io/mcp","headers":[{"name":"Authorization","description":null,"value":"Bearer <token>","is_secret":true,"is_required":true,"format":"string","default":null,"choices":null,"variables":null},{"name":"x-api-key","description":null,"value":"bulk-automation-web","is_secret":true,"is_required":true,"format":"string","default":null,"choices":null,"variables":null}],"tools":[{"name":"compose_workflow","title":null,"description":"Compose a workflow using the AI graph agent. Describe the goal in 'message' and the server builds a validated workflow graph with a session_id for follow-up execution or editing.","input_schema":null,"output_schema":null,"annotations":null},{"name":"create_preset","title":null,"description":"Publish a workflow definition as a durable preset/interface so its static assets are retained and re-minted on future runs.","input_schema":null,"output_schema":null,"annotations":null},{"name":"create_upload_url","title":null,"description":"Mint short-lived upload URLs for direct file uploads, useful for large attached assets or multi-file transfers that should bypass large tool-call payloads.","input_schema":null,"output_schema":null,"annotations":null},{"name":"display_asset","title":null,"description":"Display one or more image files inline in the chat as embedded previews for inspection or approval.","input_schema":null,"output_schema":null,"annotations":null},{"name":"download_output","title":null,"description":"Download a workflow output from a presigned URL to a local file path for inspection or downstream use.","input_schema":null,"output_schema":null,"annotations":null},{"name":"generate_curl","title":null,"description":"Generate a ready-to-use curl command for executing a published workflow, with placeholders for required asset URLs.","input_schema":null,"output_schema":null,"annotations":null},{"name":"get_action_schema","title":null,"description":"Get the full parameter schema for a specific action type, including input/output ports and parameter metadata.","input_schema":null,"output_schema":null,"annotations":null},{"name":"get_dgr_presets","title":null,"description":"List available DGR output presets for After Effects template renders, including aspect-ratio and platform-specific options.","input_schema":null,"output_schema":null,"annotations":null},{"name":"get_dgr_template_description","title":null,"description":"Describe an After Effects motion graphics template (.mogrt), including variables and font metadata, so the caller can pass exact values into a render.","input_schema":null,"output_schema":null,"annotations":null},{"name":"get_featured_workflow","title":null,"description":"Look up a predefined or featured workflow by stable id or keyword and return its prepared inputs and cached session data.","input_schema":null,"output_schema":null,"annotations":null},{"name":"get_indesign_tags","title":null,"description":"Extract data-merge tags from an InDesign template so the caller can match template placeholders to workflow inputs before execution.","input_schema":null,"output_schema":null,"annotations":null},{"name":"get_psd_tags","title":null,"description":"Extract data-merge tags from a Photoshop template and identify text and smart-object placeholders that need mapping.","input_schema":null,"output_schema":null,"annotations":null},{"name":"get_workflow_examples","title":null,"description":"Look up real workflow examples for given action types to compare wiring and parameters against known-good patterns.","input_schema":null,"output_schema":null,"annotations":null},{"name":"inspect_run","title":null,"description":"Inspect an existing workflow run or historical execution to review diagnostics, workflow JSON, rerun options, and output status.","input_schema":null,"output_schema":null,"annotations":null},{"name":"list_actions","title":null,"description":"List available workflow actions and their categories, helping the caller discover the capabilities before building or remodeling a workflow.","input_schema":null,"output_schema":null,"annotations":null},{"name":"list_all_workflows","title":null,"description":"List workflows visible to the caller, including personal and org-shared items, with pagination and summary metadata.","input_schema":null,"output_schema":null,"annotations":null},{"name":"list_batches","title":null,"description":"List recent workflow batch executions for the current user, including status and run metadata, useful for auditing recent jobs.","input_schema":null,"output_schema":null,"annotations":null},{"name":"list_custom_models","title":null,"description":"List the caller’s custom Firefly models that can be used with image-generation workflows, including their IDs and versions.","input_schema":null,"output_schema":null,"annotations":null},{"name":"list_featured_workflows","title":null,"description":"List featured workflow templates available for intake or graph composition, including their required inputs and metadata.","input_schema":null,"output_schema":null,"annotations":null},{"name":"list_golden_workflows","title":null,"description":"List the homepage golden-demo workflows, including their use-case labels and workflow identifiers for direct execution or inspection.","input_schema":null,"output_schema":null,"annotations":null},{"name":"list_interface_runs","title":null,"description":"List runs launched from published interfaces or presets, representing the interface job log for the caller’s org.","input_schema":null,"output_schema":null,"annotations":null},{"name":"list_interfaces","title":null,"description":"List published interfaces or presets available to the user, including metadata about the interface definition and workflow id.","input_schema":null,"output_schema":null,"annotations":null},{"name":"list_workflow_history","title":null,"description":"List the caller’s workflow definitions and historical activity, with filtering by last execution or publish date and run metadata.","input_schema":null,"output_schema":null,"annotations":null},{"name":"list_workflow_runs","title":null,"description":"List plain workflow executions (non-interface runs) for the current user, including status, timing, and batch identifiers.","input_schema":null,"output_schema":null,"annotations":null},{"name":"plan_template_rewire","title":null,"description":"Compare a workflow’s default template tags with a custom template and generate precise rewire instructions for a supported template swap.","input_schema":null,"output_schema":null,"annotations":null},{"name":"publish_workflow","title":null,"description":"Publish a workflow definition so it becomes reusable via a stable workflow id and can be executed or inspected later.","input_schema":null,"output_schema":null,"annotations":null},{"name":"refresh_catalog","title":null,"description":"Refresh the action catalog and featured-workflow metadata from the remote service so newly registered actions or template updates are visible.","input_schema":null,"output_schema":null,"annotations":null},{"name":"reload_examples","title":null,"description":"Reload workflow example fixtures from disk to pick up updates without restarting the MCP server.","input_schema":null,"output_schema":null,"annotations":null},{"name":"resolve_workflow_session","title":null,"description":"Resolve a cached compose or featured-workflow session to its Matrix graph and related prepared inputs for editing, import, or saving.","input_schema":null,"output_schema":null,"annotations":null},{"name":"run_dgr_render","title":null,"description":"Submit a DGR render job for a motion-graphics template with explicit variable values, font overrides, and output format presets.","input_schema":null,"output_schema":null,"annotations":null},{"name":"run_workflow_get_status","title":null,"description":"Poll a submitted workflow batch for lifecycle status, progress counts, and final output URLs once complete.","input_schema":null,"output_schema":null,"annotations":null},{"name":"run_workflow_submit","title":null,"description":"Submit a workflow for asynchronous execution and return immediately with a batch id for monitoring and output retrieval.","input_schema":null,"output_schema":null,"annotations":null},{"name":"save_workflow","title":null,"description":"Save a workflow as a Builder draft so it can continue to be edited in the Workflow Builder and persist in the user’s cloud workspace.","input_schema":null,"output_schema":null,"annotations":null},{"name":"upload_asset","title":null,"description":"Upload a file or URL to cloud storage and receive a usable asset URL for workflow inputs, including batch uploads and base64 content.","input_schema":null,"output_schema":null,"annotations":null},{"name":"validate_workflow","title":null,"description":"Validate a workflow graph before execution, checking structural integrity, connection validity, MIME compatibility, and required inputs.","input_schema":null,"output_schema":null,"annotations":null}],"tools_configurations":[],"resources":[],"resources_configurations":[],"prompts":[],"prompts_configurations":[]}],"documentation":["https://helpx.adobe.com/firefly/web/work-with-enterprise-features/creative-production/creative-production-overview.html"],"installation":"Connect the Firefly Creative Production MCP server\n\nEndpoint: https://run-workflow.adobe.io/mcp\n\nAuthentication is handled automatically via IMS OAuth 2.1 — no manual API key or token entry required.\n\nOption A — Clients with built-in remote MCP support\n(Claude.ai / Claude Desktop Connectors, ChatGPT Connectors, Cursor, VS Code Copilot, and other clients that support adding a remote MCP server by URL)\n\nOpen your client's MCP/Connector settings.\n1. Add a new server with URL: https://run-workflow.adobe.io/mcp\n2. Save. \n3. Authorize - The client will detect the OAuth requirement and open a browser window to sign in with your Adobe ID (IMS).\nOnce authorized, the client will list the available Firefly Creative Production tools.\n\nOption B — Clients that only support local (stdio) MCP servers\n(Claude Code, Codex, older Claude Desktop versions, or any client expecting a command/args config instead of a URL)\n\nAdd this to the client's MCP config file:\n\n{\n  \"mcpServers\": {\n    \"firefly-creative-production\": {\n      \"command\": \"npx\",\n      \"args\": [\"mcp-remote\", \"https://run-workflow.adobe.io/mcp\"]\n    }\n  }\n}\n\nOn first use, mcp-remote opens a browser to complete IMS sign-in and caches the resulting credentials locally for future sessions.\n\nVerifying the connection\nAsk the agent to list its available tools, or check the client's MCP/tool panel — you should see Firefly Creative Production actions (e.g. workflow discovery, execution, publishing).","authentication":"The /mcp endpoint uses the same auth as all run-workflow REST endpoints.","open_contribution":null,"adobe_products":["Adobe Developer Console","Adobe Firefly Services"],"support_contact":"ffcpemcp@adobe.com","fi_codes":[],"vendor":"Adobe","vendor_name":null,"surface":["Developer","End-user"],"adobe_metadata":{"adobe_service_id":"613857","developer_distribution_app_id":null,"developer_distribution_version_id":null},"created_by":"0363113C53A0541E0A4C86E7@AdobeID","created_at":"2026-07-10T16:40:23.956000Z","updated_at":"2026-09-16T15:23:19.400000Z"},{"id":"5ddea7e3-8d1d-48ca-a15f-13797f36954a","name":"workfront-mcp","title":"Adobe Workfront","summary":"Manage your work in Workfront","description":"Search, summarize, create, and update projects, tasks, workspaces, planning records  and approvals directly from any AI harness. Stay on top of deadlines, surface risks, and move work forward faster.","tags":["workfront","projects","workfront-planning","tasks","approvals"],"deployment_mode":["remote"],"category":["Workflow Automation","Product Feature"],"lifecycle":"production","owner":["grp-wf-llm-gateway-qa"],"server_type":["external"],"base64_icon":null,"is_active":false,"status":"active","packages":[],"repository":null,"version":"1.0.0","version_release_notes":null,"remotes":[{"transport_type":"streamable_http","url":"https://mcp.workfront.adobe.com/mcp/v1/workfront","headers":[{"name":"Authorization","description":null,"value":null,"is_secret":false,"is_required":true,"format":"string","default":null,"choices":null,"variables":null}],"tools":[{"name":"insights_find_id_by_name","title":null,"description":"Find and resolve a named Workfront object — project, task, issue, user, portfolio, program, team, document — to its GUID for use in a filter condition.","input_schema":{"type":"object","additionalProperties":false,"properties":{"entity":{"type":"string","description":"entity type to resolve against (e.g. \"project\", \"user\",\n\"portfolio\"). Must be a valid id from list_entities()."},"name":{"type":"string","description":"the user-supplied object name to look up."}},"required":["entity","name"]},"output_schema":null,"annotations":null},{"name":"insights_find_workfront_data","title":null,"description":"Use this to answer questions like \"show me my tasks\", \"what's due this week\", \"list open projects\", \"find tasks assigned to me\", \"how many issues are overdue\", \"which projects are behind schedule\", \"count tasks by status\", \"show unassigned tasks\", \"get planned hours for a project\", \"find issues submitted this month\", \"what project templates are available\". This is the primary read/query tool for all Workfront data retrieval. REQUIRED: call read_docs(\"mcp-usage\") first if you have not already done so this session. Search, list, filter, count, sort, or retrieve Workfront data — projects, tasks, issues, users, portfolios, programs, teams, documents, milestones; returns rows, columns, totalCount.","input_schema":{"type":"object","additionalProperties":false,"properties":{"aggregations":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"aggregation_type":{"type":"string","enum":["avg","count","max","min","sum"],"description":"Aggregation function. 'count' for 'how many', 'sum' for totals, 'avg' for averages, 'max'/'min' for highest/lowest values."},"field_id":{"type":"string","minLength":1,"description":"Dot-notation field path to aggregate (from get_field_paths() output)."}},"required":["aggregation_type","field_id"]}},{"type":"null"}],"default":null,"description":"optional list of aggregations, each with aggregation_type and field_id."},"condition":{"description":"structured filter. REQUIRED: call read_docs(\"conditions\") before building this. Also call read_docs(\"status\") for any status filter, read_docs(\"dates\") for any date filter, and read_docs(\"implicit-patterns\") for questions containing \"my\", \"mine\", \"upcoming\", or \"overdue\". Up to 3 levels of nesting are supported.","anyOf":[{"type":"object","properties":{"conditions":{"type":"array","description":"List of individual conditions or nested condition groups. Must be non-empty. Up to 3 levels of nesting."},"operator":{"type":"string","enum":["and","or"],"default":"and"}},"required":["conditions"]},{"type":"null"}],"default":null},"field_paths":{"type":"array","description":"columns to include. Each entry has a \"field_id\" (dot-notation path from get_field_paths() output) and an optional \"sort\" to sort by that column.","items":{"type":"object","properties":{"field_id":{"type":"string","minLength":1,"description":"Dot-notation field path from get_field_paths() output."},"sort":{"anyOf":[{"type":"object","properties":{"direction":{"type":"string","enum":["asc","desc"],"default":"asc"},"index":{"type":"integer","minimum":0,"default":0}}},{"type":"null"}],"default":null,"description":"Optional sort for this column. Set sort=SortConfig(index=0) on exactly one column to sort by it."}},"required":["field_id"]}},"limit":{"type":"integer","minimum":1,"maximum":100,"default":25,"description":"Maximum number of rows to return (1-100)."}},"required":["field_paths"]},"output_schema":null,"annotations":null},{"name":"insights_get_current_user","title":null,"description":"Find and retrieve the current user's Workfront identity (name, ID, URL) for personalizing a response. When to call: when the response should address the user by name or include a direct link to a Workfront object that needs the user's workfront URL as a base. Do NOT call this just because the question mentions \"me\" / \"my\" / \"mine\" — use the `$$USER.ID` sentinel directly inside conditions instead. This tool is for rendering a response, not for filtering. Returns: ok with {user_id, user_name, wf_url}.","input_schema":{"type":"object","additionalProperties":false,"properties":{}},"output_schema":null,"annotations":null},{"name":"insights_get_field_paths","title":null,"description":"Resolve and retrieve dot-notation field paths for Workfront entities — projects, tasks, issues, users, portfolios, programs, teams — required by find_workfront_data(). Returns the single best root entity and, per field, all candidate paths.","input_schema":{"type":"object","additionalProperties":false,"properties":{"field_ids":{"type":"array","items":{"type":"string"},"description":"leaf field IDs in entity.field form (e.g. project.project_name, user.user_name) from search_fields output. Do NOT pass already-traversed multi-hop strings — pass the leaf field, not the route. Bare names without a dot are rejected."},"root_entity":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"the entity the user wants to SEE (the query's grain) — e.g. \"project\" for \"which projects...\", \"issue\" for \"open issues in portfolio X\". Biases root selection; overridden when another root has broader coverage."}},"required":["field_ids"]},"output_schema":null,"annotations":null},{"name":"insights_list_entities","title":null,"description":"List all Workfront object types available to query — projects, tasks, issues, portfolios, programs, users, teams, documents, templates, milestones, and more. Needs: - read_docs(\"mcp-usage\") — if not called this session. When to call: at the start of any data query to identify entity IDs for use in search_fields(). Always include \"user\" when the question involves ownership, assignment, \"my\", \"I\", \"me\", a person's name, or team membership. Do NOT call: more than once per session — the entity catalog is stable for the lifetime of the conversation; reuse the prior result. This does NOT mean you can skip it on the first query: always call it at least once before search_fields(). Returns: list of entities, each with id, label, description, synonyms, and contextualHelpLabel. Use the `id` values as input to search_fields().","input_schema":{"type":"object","additionalProperties":false,"properties":{}},"output_schema":null,"annotations":null},{"name":"insights_read_docs","title":null,"description":"Load the Workfront insights playbook or domain documentation — the required first step before querying, searching, listing, filtering, or counting any Workfront data. Call read_docs(\"mcp-usage\") FIRST in any session before using any other insights tool. This loads the master tool-sequencing playbook. Trigger keywords: find, search, list, show, get, retrieve, display, fetch, filter, query, count, how many, which, what, who, report, lookup, aggregate, sort, group, breakdown, summarize, due, assigned, overdue, upcoming, open, closed, completed, active, late, behind schedule, unassigned, in progress, not started, planned hours, actual hours, percent complete, status, condition. Object types: project, task, issue, user, portfolio, program, team, document, milestone, hour, assignment, category, queueDef, queueTopic, role, group, company, timesheet, timesheetProfile, expense, dashboard, board, iteration, risk, billingRecord, documentVersion, predecessor, rsrcPool, staffingPlan, staffingPlanResource, nonLaborResource, rateAttribute, exchangeRate, booking, customEnum, parameterValue, uiTemplate, accessLevel, workspace, record_type, record_field, nlbrCategory, milestonePath, project_health, board_column, board_card, board_tag, dashboard_widget, userDelegation, time_phased_duration, time_phased_currency, template, templateTask, teamMember, schedule, expenseType, objectCategory, hourType, rateCard, approval, approval_stage, approval_stage_participant, documentApproval.","input_schema":{"type":"object","additionalProperties":false,"properties":{"topic":{"type":"string","description":"one of — mcp-usage, conditions, status, dates, implicit-patterns, field-paths."}},"required":["topic"]},"output_schema":null,"annotations":null},{"name":"insights_search_fields","title":null,"description":"Search and find Workfront fields (columns) for projects, tasks, issues, users, portfolios, programs, teams — to filter on, sort by, or display in find_workfront_data(), ranked by relevance to the question.","input_schema":{"type":"object","additionalProperties":false,"properties":{"entity_ids":{"type":"array","minItems":1,"items":{"type":"string"},"description":"Entity IDs to scope the search. Required — must not be empty."},"field_keywords":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"description":"concise field-name terms extracted from the question — strip entity names, filter values, and filler words. Boosts custom fields so they aren't drowned out by noisy question words. Always write multi-word field names as separate space-separated words (e.g. \"template id\", \"user id\") rather than a single camelCase word (\"templateID\") — the search does not reliably match compound-word forms."},"limit":{"type":"integer","minimum":1,"maximum":100,"default":100,"description":"Maximum number of fields to return (1-100)."},"query":{"type":"string","description":"the user's question, used for ranking matches."}},"required":["query","entity_ids"]},"output_schema":null,"annotations":null},{"name":"insights_summarize_object","title":null,"description":"Fetch and summarize a single Workfront object — project, task, issue, user, portfolio, program, document — as a markdown narrative.","input_schema":{"type":"object","additionalProperties":false,"properties":{"entity":{"type":"string","description":"one of \"project\", \"task\", \"issue\", \"user\", \"portfolio\", \"program\", \"document\", \"comment\"."},"object_id":{"type":"string","description":"GUID of the object to summarize — MUST be a GUID, not a display name. If you only have a name, call find_id_by_name() first and pass the `id` from its response here."}},"required":["entity","object_id"]},"output_schema":null,"annotations":null},{"name":"workflow_create_any_object","title":null,"description":"Create a new Workfront object of the given objectType. Supported types: projects, tasks, issues/requests, portfolios, programs, hour entries, assignments, plus users, teams, roles, and groups (admin only). The 'data' parameter is REQUIRED on every call and must include the object's 'name' plus any required parent IDs — never invoke this tool with an empty or partial payload. Task names cannot contain colon (:), forward slash (/), double quote (\"), or curly braces ({ }) — Workfront rejects these characters; remove them before calling. When the user references a parent or related object by name (project, portfolio, owner, assignee), FIRST call insights_find_id_by_name (entity = the objectType) to obtain its ID, THEN call create_any_object in the same turn — do not stop after the lookup. If the result is ambiguous, ask the user to choose from the returned options instead of guessing. Use a field's `name` from insights_search_fields as the data key; if `name` is not set, fall back to its `label`. Discover unknown fields with insights_search_fields before adding them. You MUST call read_workflow_docs with workfront://tools/create-any-object BEFORE this tool whenever the request involves a status/enum value, a filter modifier other than plain equality (_Mod/_Range), a date comparison, a scheduling or date field on a project or task, a task dependency field, a relation path, result ordering, or a force delete. For some accounts, a slow create returns { status: \"pending\", jobId, message } instead of the created object — poll check_job_status until completed or failed.","input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","additionalProperties":false,"properties":{"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}}]},"description":"Object data as a flat key/value map. Parameter name is exactly \"data\". REQUIRED on every create or update call. Custom fields go directly here with the DE: prefix. Priority is numeric: 0=None, 1=Low, 2=Normal, 3=High, 4=Urgent. The `description` field, if present, must be ≤ 4000 characters."},"objectType":{"type":"string","enum":["project","task","issue","user","team","role","hour","assignment","program","portfolio","group"],"description":"Workfront object type to write. (user, team, role, group require an admin session)."}},"required":["objectType","data"]},"output_schema":null,"annotations":null},{"name":"workflow_update_any_object","title":null,"description":"Update an existing Workfront object by ID. Supported types: projects, tasks, issues/requests, portfolios, programs, hour entries, assignments, plus users, teams, roles, and groups (admin only). The 'data' parameter is REQUIRED and must contain at least one field to change. 'data' is a FLAT key/value map — custom fields belong directly at the top level with the DE: prefix. Task names cannot contain colon (:), forward slash (/), double quote (\"), or curly braces ({ }). When the user identifies the target (or any related object) by name, FIRST call insights_find_id_by_name to obtain its ID, THEN call update_any_object in the same turn. Use a field's `name` from insights_search_fields as the data key. You MUST call read_workflow_docs with workfront://tools/update-any-object BEFORE this tool whenever the request involves a status/enum value, a filter modifier other than plain equality, a date comparison, a scheduling field, a task dependency field, a relation path, result ordering, or a force delete.","input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","additionalProperties":false,"properties":{"action":{"type":"string","minLength":1,"description":"Optional redrock action to run instead of a plain field update. Call read_workflow_docs with workfront://tools/object-actions to discover current actions before setting this."},"actionOptions":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]},"description":"Action-specific options as a flat key/value map (e.g. { \"copyCategories\": true } for convertToProject). Only used when 'action' is set."},"data":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"},{"type":"array","items":{"anyOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}}]},"description":"Object data as a flat key/value map. Custom fields go directly here with the DE: prefix. Priority is numeric: 0=None, 1=Low, 2=Normal, 3=High, 4=Urgent."},"id":{"type":"string","minLength":1,"pattern":"^[a-zA-Z0-9]+$","description":"Workfront object ID (32-char GUID). If you only have a name, resolve it to an ID first."},"objectType":{"type":"string","enum":["project","task","issue","user","team","role","hour","assignment","program","portfolio","group"],"description":"Workfront object type to write. (user, team, role, group require an admin session)."}},"required":["objectType","id"]},"output_schema":null,"annotations":null},{"name":"workflow_delete_any_object","title":null,"description":"Delete a Workfront object by ID. Supported types: projects, tasks, issues/requests, portfolios, programs, hour entries, assignments, plus users, teams, roles, and groups (admin only). MUST obtain explicit user confirmation (object type, ID, and name) before invoking, unless the user's current message already contains explicit confirmation language. When the user identifies the target by name, FIRST call insights_find_id_by_name to obtain its ID, THEN call delete_any_object in the same turn. 'force: true' bypasses the Recycle Bin and is permanent; warn the user and require a second confirmation before passing it. You MUST call read_workflow_docs with workfront://tools/delete-any-object BEFORE this tool whenever the request involves a status/enum value, a filter modifier other than plain equality, a date comparison, a scheduling field, a task dependency field, a relation path, result ordering, or a force delete.","input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","additionalProperties":false,"properties":{"force":{"type":"boolean","default":false,"description":"Force delete (default: false). When true, bypasses soft-delete for object types that support it."},"id":{"type":"string","minLength":1,"pattern":"^[a-zA-Z0-9]+$","description":"The ID of the object to delete"},"objectType":{"type":"string","enum":["project","task","issue","user","team","role","hour","assignment","program","portfolio","group"],"description":"Workfront object type to write. (user, team, role, group require an admin session)."}},"required":["objectType","id","force"]},"output_schema":null,"annotations":null},{"name":"workflow_read_workflow_docs","title":null,"description":"Fetch the full Workfront guide or reference doc for a workfront:// URI and return it as markdown. This server's detailed guidance lives behind this tool because the claude.ai connector does not auto-load MCP resources. Call this whenever a tool description or the server instructions point you to a workfront:// URI. Fetch the relevant guide BEFORE non-trivial query/report/filter, status, or deep-link work instead of guessing syntax, field names, or status codes.","input_schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","additionalProperties":false,"properties":{"uri":{"type":"string","description":"The workfront:// doc URI to fetch — copy it verbatim from a tool description or the server instructions. URI shapes: workfront://reference/query-syntax, workfront://reference/wildcards, workfront://reference/status-codes, workfront://reference/report-syntax; workfront://tools/<tool>-any-object; workfront://knowledge/{objectType}/{operation}."}},"required":["uri"]},"output_schema":null,"annotations":null},{"name":"list_resources","title":null,"description":"List all MCP resources and resource templates available on this lane. Returns prefixed URIs that can be passed to read_resource. Use this when your MCP client does not expose resources/list to the model.","input_schema":{"type":"object","additionalProperties":false,"properties":{}},"output_schema":null,"annotations":null},{"name":"read_resource","title":null,"description":"Read an MCP resource from any backend on this lane by its prefixed URI (the `<backend>+<scheme>://<rest>` form returned by list_resources). Use this when server init instructions tell you to load a resource but your MCP client does not expose resources/read to the model. Works for every URI scheme any configured backend publishes.","input_schema":{"type":"object","additionalProperties":false,"properties":{"uri":{"type":"string","description":"Prefixed resource URI as returned by list_resources."}},"required":["uri"]},"output_schema":null,"annotations":null},{"name":"approvals_create_approval_from_template","title":null,"description":"Creates an approval workflow for one document version using an existing template. template_id must be the template GUID. Accepts one document version per call.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","additionalProperties":false,"properties":{"document_version_id":{"type":"string","description":"Document version ID (DOCV) — the 32-char GUID for the document version."},"template_id":{"type":"string","description":"Template ID — the template's 32-char GUID (not a template name)."}},"required":["document_version_id","template_id"]},"output_schema":null,"annotations":null},{"name":"approvals_create_or_update_approval_workflow","title":null,"description":"Use this for any request to set up, add, or change approvers or reviewers on a document — e.g. 'create an approval with X as approver', 'add a review stage'. This is the dedicated tool for document approval workflows. Create or update the approval workflow stages for a document version. Every stage must declare its prerequisites via `dependsOn` (use [] for the first stage / parallel roots). Most workflows are LINEAR: stages[0].dependsOn=[], stages[1].dependsOn=[0], stages[2].dependsOn=[1], and so on. Provide all desired stages — this replaces or extends the existing workflow. WARNING: for a stage matched to an existing one, the `participants` array you provide REPLACES that stage's entire participant list. Supports per-stage plain-text customMessage shown in the first-activation notification email.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","additionalProperties":false,"properties":{"document_version_id":{"type":"string","description":"Document version ID (DOCV ID) — use find_document to get this"},"paths":{"type":"array","minItems":2,"description":"Parallel approval paths (2 or more). Each path runs independently at the same time. Provide this OR stages, not both.","items":{"type":"object","properties":{"name":{"type":"string","maxLength":29,"description":"Optional path label, max 29 chars."},"pathId":{"type":"string","description":"Optional. Provide the pathId to match and update this path."},"stages":{"type":"array","minItems":1,"description":"Stages within this path, in execution order."}},"required":["stages"]}},"stages":{"type":"array","description":"Stages for a single-track approval workflow. Provide this OR paths, not both.","items":{"type":"object","additionalProperties":false,"properties":{"config":{"type":"object","properties":{"autoLockEnabled":{"type":"boolean"},"decisionRules":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string","enum":["onlyOneDecisionRequired"]}]},{"type":"null"}]}}},"customMessage":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"description":"Optional plain-text note (max 500 chars) shown to this stage's approvers/reviewers in the first-activation notification email."},"deadlineBusinessDays":{"anyOf":[{"anyOf":[{"not":{}},{"type":"number"}]},{"type":"null"}]},"dependsOn":{"type":"array","items":{"type":"integer","minimum":0},"description":"Required. The 0-based indexes of stages in this same `stages` array that must complete before this one runs."},"name":{"type":"string","description":"Stage display name. A name matching 'Stage N' is treated as auto-generated and will be renumbered."},"participants":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"properties":{"participantId":{"type":"string","description":"Workfront user or team ID"},"participantMetadata":{"type":"object","additionalProperties":false,"description":"Optional. Set this when this participant is an AI Collaborator bot.","properties":{"emailAddr":{"type":["string","null"]},"isBot":{"type":"boolean"},"participantIdType":{"type":"string","const":"wf_guid"},"wfUserId":{"type":"string"}},"required":["isBot","emailAddr","wfUserId","participantIdType"]},"participantRole":{"type":"string","enum":["approver","reviewer"],"description":"approver or reviewer"},"participantType":{"type":"string","enum":["USER","TEAMOB"],"description":"USER or TEAMOB"}},"required":["participantId","participantType","participantRole"]}},"stageId":{"type":"string","description":"Optional. Provide the stageId to explicitly match and update that stage."}},"required":["name","participants","dependsOn"]}}},"required":["document_version_id"]},"output_schema":null,"annotations":null},{"name":"approvals_create_template","title":null,"description":"Create a new reusable approval workflow template. This is the dedicated tool for creating approval templates. Use it only when the user explicitly asks to create a reusable template; to set up an approval on a specific document, use create_or_update_approval_workflow. Every stage must declare its prerequisites via `dependsOn`. Resolve every participant to its ID before calling this: use Insights `search_users` for people when available, otherwise use `find_user_by_name`; use `find_team_by_name` for teams. Never pass a participant name.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","additionalProperties":false,"properties":{"description":{"type":"string","description":"Optional human-readable description of what this template is for."},"stages":{"type":"array","minItems":1,"description":"Stages of the template, listed in execution order. Every stage's dependsOn is required.","items":{"type":"object","additionalProperties":false,"properties":{"config":{"type":"object","properties":{"autoLockEnabled":{"type":"boolean"},"decisionRules":{"anyOf":[{"anyOf":[{"not":{}},{"type":"string","enum":["onlyOneDecisionRequired"]}]},{"type":"null"}]}}},"customMessage":{"anyOf":[{"type":"string","maxLength":5000},{"type":"null"}],"description":"Optional plain-text note (max 500 chars) shown in the first-activation notification email."},"deadlineBusinessDays":{"anyOf":[{"anyOf":[{"not":{}},{"type":"number"}]},{"type":"null"}]},"dependsOn":{"type":"array","items":{"type":"integer","minimum":0},"description":"Required. The 0-based indexes of prerequisite stages."},"name":{"type":"string","description":"Stage display name."},"participants":{"type":"array","minItems":1,"items":{"type":"object","additionalProperties":false,"properties":{"participantId":{"type":"string","description":"Workfront user or team ID"},"participantMetadata":{"type":"object","additionalProperties":false,"properties":{"emailAddr":{"type":["string","null"]},"isBot":{"type":"boolean"},"participantIdType":{"type":"string","const":"wf_guid"},"wfUserId":{"type":"string"}},"required":["isBot","emailAddr","wfUserId","participantIdType"]},"participantRole":{"type":"string","enum":["approver","reviewer"]},"participantType":{"type":"string","enum":["USER","TEAMOB"]}},"required":["participantId","participantType","participantRole"]}},"stageId":{"type":"string","description":"Optional."}},"required":["name","participants","dependsOn"]}},"template_name":{"type":"string","description":"Name for the new template"},"timeframe":{"type":"number","description":"Template-level timeframe in business days (max 30)"}},"required":["template_name","stages"]},"output_schema":null,"annotations":null},{"name":"approvals_delete_approval_stage","title":null,"description":"Delete a single stage from an approval workflow by name or position (e.g. 'Legal Review', 'stage 2', 'last stage'). Only not-started stages can be deleted. For approvals with parallel paths, use remove_stage_from_path instead — this tool only works on single-path approvals.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","additionalProperties":false,"properties":{"document_version_id":{"type":"string","description":"Document version ID"},"stage_name":{"type":"string","description":"Stage name, 'stage N' (1-indexed), or 'first'/'last stage'"}},"required":["document_version_id","stage_name"]},"output_schema":null,"annotations":null},{"name":"approvals_find_document","title":null,"description":"Look up a document by filename OR by document version ID (DOCV) — provide exactly one. Use document_name when the user names a file; use document_version_id when you have a DOCV from a Workfront URL or another tool. Returns document name, current version ID, and a Workfront document link per match (for name search) or full metadata (for version ID lookup). Matching by name is word-order-tolerant.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","additionalProperties":false,"properties":{"document_name":{"type":"string","description":"Document filename (with or without extension). Word-order-tolerant match. Provide this OR document_version_id, not both."},"document_version_id":{"type":"string","description":"Document version ID (DOCV) — the 32-char GUID from Workfront document URLs. Provide this OR document_name, not both."}}},"output_schema":null,"annotations":null},{"name":"approvals_find_projects","title":null,"description":"Look up Workfront projects, optionally filtered by name and/or restricted to projects the calling user owns. Use a name fragment when the user names a project; set owned_by_me when the user says \"my projects\", \"projects I own\", or \"what am I working on\". Returns project name, ID, and status for each match — feed a project ID to get_documents_by_scope, then approval tools on the documents.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","additionalProperties":false,"properties":{"name":{"type":"string","description":"Optional project name or fragment. Partial match supported. Omit to list without a name filter."},"owned_by_me":{"type":"boolean","description":"When true, restrict results to projects the calling user owns. Omit (or false) to search across all projects."}}},"output_schema":null,"annotations":null},{"name":"approvals_find_team_by_name","title":null,"description":"Look up a Workfront team's ID by name (fuzzy/partial match). Call this whenever the user wants a whole team — not a single person — as an approver or reviewer. Approval and template tools accept teams as participants with participantType: \"TEAMOB\" and the ID this tool returns. The word \"team\" is stripped from the query automatically.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","additionalProperties":false,"properties":{"team_name":{"type":"string","description":"Team name to search for. Partial match supported. The trailing word \"team\" is OK — it is stripped automatically."}},"required":["team_name"]},"output_schema":null,"annotations":null},{"name":"approvals_find_user_by_name","title":null,"description":"Look up a Workfront user's ID by name (fuzzy/partial match). Call this whenever the user mentions a person by name — downstream tools like create_or_update_approval_workflow, create_template, and send_approval_reminder all require Workfront user IDs, not names. Returns name, ID, email, title, and avatar URL.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","additionalProperties":false,"properties":{"user_name":{"type":"string","description":"Person's name to search for. Partial and fuzzy match supported (e.g. \"deepak\", \"Vennapu\")."}},"required":["user_name"]},"output_schema":null,"annotations":null},{"name":"approvals_get_approval_info","title":null,"description":"Get the current approval workflow (stages, participants, status, stage IDs) for a document version. Each participant is listed with its participantId and, for AI Collaborator bots, its participantMetadata. REQUIRED before sending reminders or modifying an existing approval — returns the stage IDs that send_approval_reminder and delete_approval_stage need.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","additionalProperties":false,"properties":{"document_version_id":{"type":"string","description":"Document version ID (DOCV ID)"}},"required":["document_version_id"]},"output_schema":null,"annotations":null},{"name":"approvals_get_current_user","title":null,"description":"Get the calling user's Workfront identity: name, user ID, home team name, and home team ID. Use when the user refers to themselves (\"me\", \"my projects\", \"approvals I own\") and you need a concrete ID. Returns a single user every call — no disambiguation needed. Do not call this just to learn who the user is at the start of a conversation; only call it when an ID is actually required.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{}},"output_schema":null,"annotations":null},{"name":"approvals_get_documents_by_scope","title":null,"description":"List documents (with name and current version ID) inside a project or folder. scope_type=project → returns all documents in that project. scope_type=folder → scope_id = folder ID directly. scope_type=folder_name → scope_id = project ID plus folder_name. Returns a numbered list of documents with name and document version ID (DOCV).","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","additionalProperties":false,"properties":{"folder_name":{"type":"string","description":"Folder name to resolve. Required only when scope_type is \"folder_name\"."},"limit":{"type":"number","description":"Cap on documents returned (default 50, max 500). Raise for bulk operations."},"scope_id":{"type":"string","description":"Project ID when scope_type is \"project\" or \"folder_name\"; folder ID when scope_type is \"folder\"."},"scope_type":{"type":"string","enum":["project","folder","folder_name"],"description":"Which scope to expand."}},"required":["scope_type","scope_id"]},"output_schema":null,"annotations":null},{"name":"approvals_list_templates","title":null,"description":"List approval templates available in this Workfront instance. Use when the user wants to browse what's available or when picking one to instantiate with create_approval_from_template. Filters compose with AND: name, creator_name, participant_name, sort_by_usage.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","additionalProperties":false,"properties":{"creator_name":{"type":"string","description":"Partial-match filter on the template creator. Omit to see all creators."},"name":{"type":"string","description":"Partial-match filter on the template name. Omit to see all names."},"participant_name":{"type":"string","description":"Restrict to templates that include this participant ID/name."},"sort_by_usage":{"type":"boolean","default":false,"description":"If true, sort by usage count descending (most-used first)."}}},"output_schema":null,"annotations":null},{"name":"approvals_send_approval_reminder","title":null,"description":"Send reminder email(s) to participants in approval stage(s). Works for a single approval or in bulk. SINGLE MODE requires document_version_id and stage_id from get_approval_info. BULK MODE provides an 'approvals' array; all approvals must come from ONE project/folder/program/campaign, max 100 per request.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","additionalProperties":false,"properties":{"approvals":{"type":"array","maxItems":100,"description":"Bulk mode: array of approval targets to send reminders on. All must come from a SINGLE scope entity.","items":{"type":"object","additionalProperties":false,"properties":{"document_name":{"type":"string","description":"Document name for the confirmation report"},"document_version_id":{"type":"string","description":"Document version ID (DOCV)"},"stage_id":{"type":"string","description":"Active stage ID to send reminders on"}},"required":["document_version_id","document_name","stage_id"]}},"document_name":{"type":"string","description":"Document name for display in confirmation message"},"document_version_id":{"type":"string","description":"Document version ID (DOCV) — required for single mode, omit for bulk mode"},"participant_ids":{"type":"array","items":{"type":"string"},"description":"Optional list of participant IDs to remind (single mode only)."},"stage_id":{"type":"string","description":"Approval stage ID — required for single mode, omit for bulk mode"}}},"output_schema":null,"annotations":null},{"name":"approvals_update_approval_participants","title":null,"description":"SINGLE-PROJECT ONLY. STEP 1 of 2 (preview only — makes NO changes). Validates an add/remove/replace of a participant on the active stage of up to 100 document approval workflows within that single project and returns { requestId, preview }. Not a multi-project tool. If the user asks for a broader scope, STOP and ask for the ONE specific project. After confirmation, call _submit_bulk_update_approval_participants with the returned requestId.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","additionalProperties":false,"properties":{"add_participant_id":{"type":"string","description":"Workfront user ID of the participant to add. Required for 'add' and 'replace' operations."},"document_version_ids":{"type":"array","minItems":1,"maxItems":100,"items":{"type":"string"},"description":"Document version IDs (DOCVs) of the approval workflows to modify. Must all come from a SINGLE project."},"operation":{"type":"string","enum":["add","remove","replace"],"description":"The mutation to perform on each approval's active stage."},"participant_role":{"type":"string","enum":["approver","reviewer"],"description":"Role for the participant being added."},"remove_participant_id":{"type":"string","description":"Workfront user ID of the participant to remove. Required for 'remove' and 'replace' operations."}},"required":["document_version_ids","operation"]},"output_schema":null,"annotations":null},{"name":"approvals_update_template","title":null,"description":"Update an existing template with structured modifications (add/remove participants, rename stages, set deadlines, etc.). Batch all changes in a single call. To apply a modification to every stage at once, set stage_names: [\"all\"]. Obtain the template_id with list_templates using the name filter.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","additionalProperties":false,"properties":{"modifications":{"type":"array","minItems":1,"description":"All changes to apply in this one call, as a list of modification objects.","items":{"type":"object","additionalProperties":false,"properties":{"deadline_days":{"type":"number","description":"Stage deadline in business days (set_stage_deadline)."},"decision_rules":{"type":"string","enum":["onlyOneDecisionRequired"],"description":"Decision rule for the stage(s) (set_decision_rules)."},"new_description":{"type":"string","description":"New template description (update_description only)."},"new_name":{"type":"string","description":"New template name (rename_template only)."},"new_role":{"type":"string","enum":["approver","reviewer"],"description":"New role for change_participant_role."},"new_stage_name":{"type":"string","description":"New stage name (rename_stage only)."},"operation":{"type":"string","enum":["add_participant","remove_participant","change_participant_role","add_stage","remove_stage","rename_stage","rename_template","update_description","set_stage_deadline","remove_stage_deadline","set_template_timeframe","remove_template_timeframe","set_decision_rules","remove_decision_rules"],"description":"The change to make."},"participant_id":{"type":"string","description":"Workfront user or team ID to add/remove/re-role."},"participant_role":{"type":"string","enum":["approver","reviewer"],"description":"Role for add_participant. Defaults to approver."},"participant_type":{"type":"string","enum":["USER","TEAMOB"],"description":"USER for a person, TEAMOB for a team. Defaults to USER."},"participants":{"type":"array","description":"Initial participants for a new stage (add_stage only).","items":{"type":"object","properties":{"participant_id":{"type":"string"},"participant_role":{"type":"string","enum":["approver","reviewer"]},"participant_type":{"type":"string","enum":["USER","TEAMOB"]}},"required":["participant_id"]}},"position":{"type":"number","description":"1-based insertion index for add_stage. Omit to append to the end."},"stage_name":{"type":"string","description":"Target a single stage by exact (case-insensitive) name."},"stage_names":{"type":"array","items":{"type":"string"},"description":"Target multiple stages by name, or pass [\"all\"] to apply to every stage."},"timeframe_days":{"type":"number","description":"Template-level timeframe in business days (set_template_timeframe, max 30)."}},"required":["operation"]}},"template_id":{"type":"string","description":"Template ID — a GUID, not a name. Find it with list_templates using the name filter."}},"required":["template_id","modifications"]},"output_schema":null,"annotations":null},{"name":"approvals__submit_bulk_update_approval_participants","title":null,"description":"STEP 2 of 2 (applies changes). Executes a bulk participant update previously previewed by update_approval_participants. Only call this after the user has explicitly confirmed the preview. Pass the requestId returned by the preview step; the request is consumed on use and cannot be replayed.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","additionalProperties":false,"properties":{"requestId":{"type":"string","description":"The pending bulk request ID returned by update_approval_participants."}},"required":["requestId"]},"output_schema":null,"annotations":null},{"name":"boards_add_card_member","title":null,"description":"Assign an existing board member to a card. member_id is the member's id as listed in the board members or a card's members array (see get_board_snapshot / get_card).","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","additionalProperties":false,"properties":{"board_id":{"type":"string","description":"Board id"},"card_id":{"type":"string","description":"Card id"},"member_id":{"type":"string","pattern":"^[0-9a-fA-F]{24}$","description":"Member id (userAuth id from the board members)"}},"required":["board_id","card_id","member_id"]},"output_schema":null,"annotations":null},{"name":"boards_add_card_tag","title":null,"description":"Add an existing board tag to a card. Tag ids come from the board tags list (see get_board_snapshot).","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","additionalProperties":false,"properties":{"board_id":{"type":"string","description":"Board id"},"card_id":{"type":"string","description":"Card id"},"tag_id":{"type":"string","pattern":"^[0-9a-fA-F]{24}$","description":"Tag id (from the board tags)"}},"required":["board_id","card_id","tag_id"]},"output_schema":null,"annotations":null},{"name":"boards_archive_card","title":null,"description":"Archive or restore a card. This is the reversible alternative to deleting a card.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","additionalProperties":false,"properties":{"board_id":{"type":"string","description":"Board id"},"card_id":{"type":"string","description":"Card id"},"is_archived":{"type":"boolean","description":"true to archive the card, false to restore it"}},"required":["board_id","card_id","is_archived"]},"output_schema":null,"annotations":null},{"name":"boards_connect_card","title":null,"description":"Connect a card to Workfront by creating a new Workfront Task or Issue under the given project and linking it to the card. The new Workfront item takes its name/description/estimation from the card. Resolve project_id and project_name with the Workfront insights tools first. Returns the connected card.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","additionalProperties":false,"properties":{"board_id":{"type":"string","pattern":"^[0-9a-fA-F]{24}$"},"card_id":{"type":"string","pattern":"^[0-9a-fA-F]{24}$"},"estimation":{"type":"number","description":"Optional story-point estimation for the Workfront item"},"object_type":{"type":"string","enum":["TASK","OPTASK"],"description":"Workfront item type: TASK or OPTASK (Issue)"},"project_id":{"type":"string","description":"Workfront parent project id (resolve via insights tools)"},"project_name":{"type":"string","description":"Workfront parent project name (resolve via insights tools)"},"status":{"type":"string","description":"Optional initial Workfront status; omit for project default"}},"required":["board_id","card_id","object_type","project_id","project_name"]},"output_schema":null,"annotations":null},{"name":"boards_create_board","title":null,"description":"Create a new basic board, optionally inside a workspace. Creates a standard board (no dynamic/kanban/connected-service setup — those are configured in the web UI). Returns the new board id, name, and template.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","additionalProperties":false,"properties":{"name":{"type":"string","description":"Board name"},"workspace_id":{"type":"string","pattern":"^[0-9a-fA-F]{24}$","description":"Workspace to create the board in; omit for a standalone board"}},"required":["name"]},"output_schema":null,"annotations":null},{"name":"boards_create_board_tag","title":null,"description":"Create a new tag in a board's tag catalog (then use add_card_tag to apply it). Returns the new tag. Tag names must be unique on the board.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","additionalProperties":false,"properties":{"board_id":{"type":"string","description":"Board id"},"color":{"type":"string","description":"Tag color, e.g. \"orange-500\" (reuse a color seen on existing tags in get_board_snapshot)"},"name":{"type":"string","description":"Tag name (unique within the board)"}},"required":["board_id","name"]},"output_schema":null,"annotations":null},{"name":"boards_create_card","title":null,"description":"Create a new card on a board in the given column. Returns the created card. To assign members or move the card afterwards, use add_card_member / move_card.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","additionalProperties":false,"properties":{"board_id":{"type":"string","description":"Board id (24-char hex ObjectId)"},"column_id":{"type":"string","description":"Target column id the card is created in"},"description":{"type":"string","description":"Card description"},"due_date":{"type":"string","format":"date-time","description":"ISO 8601 due date"},"estimation":{"type":"number","description":"Estimate (story points or hours)"},"name":{"type":"string","description":"Card title"},"start_date":{"type":"string","format":"date-time","description":"ISO 8601 start date"},"status":{"type":"string","description":"Status id from the board status catalog — reuse a `status` value seen on an existing card on the same board, not a free-form label."},"tags":{"type":"array","items":{"type":"string"},"description":"Tag ids to attach on creation (from the board tags)"}},"required":["board_id","column_id","name"]},"output_schema":null,"annotations":null},{"name":"boards_create_checklist_item","title":null,"description":"Add a checklist item (or subtask) to a parent card. Returns the new item. Use update_checklist_item to rename or mark it done.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","additionalProperties":false,"properties":{"board_id":{"type":"string","description":"Board id"},"description":{"type":"string","description":"Item description"},"due_date":{"type":"string","format":"date-time","description":"ISO 8601 due date"},"estimation":{"type":"number","description":"Estimate (story points or hours)"},"name":{"type":"string","description":"Checklist item title"},"parent_card_id":{"type":"string","pattern":"^[0-9a-fA-F]{24}$","description":"Id of the card this item belongs to"},"type":{"type":"string","enum":["checkList","subTask"],"description":"Item kind; defaults to checkList"}},"required":["board_id","parent_card_id","name"]},"output_schema":null,"annotations":null},{"name":"boards_create_column","title":null,"description":"Add a new plain column to a board. Creates a standard column with the given name (no WIP limits, automation, or intake/dynamic filters — those are configured in the web UI). Returns the board id and its columns so you can find the new column id.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","additionalProperties":false,"properties":{"board_id":{"type":"string","description":"Board id"},"name":{"type":"string","description":"Name for the new column"}},"required":["board_id","name"]},"output_schema":null,"annotations":null},{"name":"boards_delete_checklist_item","title":null,"description":"Delete a checklist item from its parent card. Returns the updated parent card.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","additionalProperties":false,"properties":{"board_id":{"type":"string","description":"Board id"},"child_card_id":{"type":"string","pattern":"^[0-9a-fA-F]{24}$","description":"Id of the checklist item to delete"},"parent_card_id":{"type":"string","pattern":"^[0-9a-fA-F]{24}$","description":"Id of the parent card"}},"required":["board_id","parent_card_id","child_card_id"]},"output_schema":null,"annotations":null},{"name":"boards_delete_column","title":null,"description":"Delete a column from a board. If the column still has cards, pass to_column_id to move them to another column — otherwise the delete is rejected so cards are not lost. Returns the board id and its remaining columns.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","additionalProperties":false,"properties":{"board_id":{"type":"string","pattern":"^[0-9a-fA-F]{24}$"},"column_id":{"type":"string","description":"Id of the column to delete"},"to_column_id":{"type":"string","description":"Column to move existing cards to (required if the column has cards)"}},"required":["board_id","column_id"]},"output_schema":null,"annotations":null},{"name":"boards_disconnect_card","title":null,"description":"Disconnect a card from its Workfront source. Pass the card's connectedObjectId (exposed on a connected card). Returns the card with its connection cleared. Does not delete the underlying Workfront item.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","additionalProperties":false,"properties":{"board_id":{"type":"string","pattern":"^[0-9a-fA-F]{24}$"},"card_id":{"type":"string","pattern":"^[0-9a-fA-F]{24}$"},"connected_object_id":{"type":"string","pattern":"^[0-9a-fA-F]{24}$"}},"required":["board_id","card_id","connected_object_id"]},"output_schema":null,"annotations":null},{"name":"boards_get_board_snapshot","title":null,"description":"Fetch a board by id (cards + columns) via the in-process Nest BoardsService.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","additionalProperties":false,"properties":{"board_id":{"type":"string","description":"Boards board id"}},"required":["board_id"]},"output_schema":null,"annotations":null},{"name":"boards_get_board_summary","title":null,"description":"Normalized pipeline view for one board: columns, slim cards, aggregates, explicit gaps.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","additionalProperties":false,"properties":{"board_id":{"type":"string","description":"Boards board id"}},"required":["board_id"]},"output_schema":null,"annotations":null},{"name":"boards_get_card","title":null,"description":"Fetch a single card by board id and card id.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","additionalProperties":false,"properties":{"board_id":{"type":"string","description":"Board id"},"card_id":{"type":"string","description":"Card id"}},"required":["board_id","card_id"]},"output_schema":null,"annotations":null},{"name":"boards_list_boards","title":null,"description":"Discover boards from the authenticated user's workspaces.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","properties":{}},"output_schema":null,"annotations":null},{"name":"boards_list_candidates","title":null,"description":"Return simplified candidate rows: id, name, description, columnId.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","additionalProperties":false,"properties":{"board_id":{"type":"string","description":"Board id"}},"required":["board_id"]},"output_schema":null,"annotations":null},{"name":"boards_move_card","title":null,"description":"Move a card to a different column and/or position. to_index is the 0-based slot within the destination column.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","additionalProperties":false,"properties":{"board_id":{"type":"string","description":"Board id"},"card_id":{"type":"string","description":"Card id to move"},"to_column_id":{"type":"string","description":"Destination column id"},"to_index":{"type":"integer","minimum":0,"description":"Destination position within the column (0-based)"}},"required":["board_id","card_id","to_column_id","to_index"]},"output_schema":null,"annotations":null},{"name":"boards_remove_card_member","title":null,"description":"Remove a member from a card. member_id is the member's id as listed in the card's members array (see get_card).","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","additionalProperties":false,"properties":{"board_id":{"type":"string","description":"Board id"},"card_id":{"type":"string","description":"Card id"},"member_id":{"type":"string","pattern":"^[0-9a-fA-F]{24}$","description":"Member id to remove (userAuth id)"}},"required":["board_id","card_id","member_id"]},"output_schema":null,"annotations":null},{"name":"boards_remove_card_tag","title":null,"description":"Remove a tag from a card. Tag ids come from the board tags list (see get_board_snapshot).","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","additionalProperties":false,"properties":{"board_id":{"type":"string","description":"Board id"},"card_id":{"type":"string","description":"Card id"},"tag_id":{"type":"string","pattern":"^[0-9a-fA-F]{24}$","description":"Tag id to remove"}},"required":["board_id","card_id","tag_id"]},"output_schema":null,"annotations":null},{"name":"boards_summarize_boards","title":null,"description":"Summarize one or more boards. Use list_boards first to discover ids the authenticated user can access.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","additionalProperties":false,"properties":{"board_ids":{"type":"string","minLength":1,"description":"Comma-separated board ids. Required — discover ids via list_boards."}},"required":["board_ids"]},"output_schema":null,"annotations":null},{"name":"boards_update_card","title":null,"description":"Update mutable fields on an existing card (name, description, start/due date, status, estimation). At least one field must be provided. Use move_card to change column, archive_card to archive/restore, and the tag/member tools for tags and assignees.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","additionalProperties":false,"properties":{"board_id":{"type":"string","description":"Board id"},"card_id":{"type":"string","description":"Card id to update"},"description":{"type":"string","description":"New card description"},"due_date":{"type":"string","format":"date-time","description":"ISO 8601 due date"},"estimation":{"type":"number","description":"Estimate (story points or hours)"},"name":{"type":"string","description":"New card title"},"start_date":{"type":"string","format":"date-time","description":"ISO 8601 start date"},"status":{"type":"string","description":"Status id from the board status catalog — reuse a `status` value seen on an existing card on the same board, not a free-form label."}},"required":["board_id","card_id"]},"output_schema":null,"annotations":null},{"name":"boards_update_checklist_item","title":null,"description":"Update a checklist item (name, description, due date, status, estimation). At least one field must be provided. `status` is a status id from the board status catalog (not a label like \"done\").","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","additionalProperties":false,"properties":{"board_id":{"type":"string","description":"Board id"},"child_card_id":{"type":"string","pattern":"^[0-9a-fA-F]{24}$","description":"Id of the checklist item to update"},"description":{"type":"string","description":"New item description"},"due_date":{"type":"string","format":"date-time","description":"ISO 8601 due date"},"estimation":{"type":"number","description":"Estimate (story points or hours)"},"name":{"type":"string","description":"New item title"},"parent_card_id":{"type":"string","pattern":"^[0-9a-fA-F]{24}$","description":"Id of the parent card"},"status":{"type":"string","pattern":"24-char hex","description":"Status id (24-char hex) from the board status catalog — NOT a label like \"done\". Reuse a `status` value seen on an existing card/item on the same board."}},"required":["board_id","parent_card_id","child_card_id"]},"output_schema":null,"annotations":null},{"name":"boards_update_column","title":null,"description":"Rename a board column. WIP limits, automation, and filters are configured in the web UI and are not editable here. Returns the updated column.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","additionalProperties":false,"properties":{"board_id":{"type":"string","pattern":"^[0-9a-fA-F]{24}$"},"column_id":{"type":"string","description":"Id of the column to rename"},"name":{"type":"string","description":"New name for the column"}},"required":["board_id","column_id","name"]},"output_schema":null,"annotations":null},{"name":"comment-stream_add_reaction","title":null,"description":"Add a reaction (like) to a comment. Currently only \"LIKE\" reactions are supported. Returns the reaction details including commentID, userID, and type. RECORD objects (objectCode: \"RECORD\"): the response will NOT include a `links` field — construct the URL client-side using the maestro record URL pattern.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","additionalProperties":false,"properties":{"commentID":{"type":"string","description":"The comment ID (MongoDB ObjectId)"},"objectCode":{"type":"string","description":"The object code (optional)"},"type":{"type":"string","default":"LIKE","description":"The reaction type (currently only \"LIKE\" is supported)"}},"required":["commentID"]},"output_schema":null,"annotations":null},{"name":"comment-stream_create_comment","title":null,"description":"Create a new comment on an object. Supports rich text, HTML content, tags, and attachments. When tagging users or teams, use the \"tags\" array with objects shaped as { id, objCode: \"USER\"|\"TEAMOB\" }; for users, ALWAYS use the Workfront wfId (32-char hex). Use dry_run: true first to preview and confirm before posting — a dry run never sends notifications. RECORD objects require objectMetadata (name, url) when tagging users.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","additionalProperties":false,"properties":{"attachments":{"anyOf":[{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string"}},"required":["id","type","name"]}},{"type":"null"}],"default":[],"description":"Array of attachments. Do NOT send null — send an empty array [] or omit the field."},"content":{"type":"string","description":"The comment content (plain text)"},"contentHTML":{"type":"string","description":"The HTML representation of the comment. Must be valid HTML, structured with <strong>, <code>, <ul><li>, <em>. Mentions use a specific <a data-lexical-mention> tag format."},"dry_run":{"type":"boolean","default":false,"description":"When true, validates the comment and returns a preview without posting or sending any notifications."},"metadata":{"type":"object","additionalProperties":false,"description":"Comment metadata. REQUIRED to include objectMetadata (name and url) when tagging users.","properties":{"objectMetadata":{"type":"object","additionalProperties":false,"properties":{"name":{"type":"string","description":"The name of the object being commented on"},"url":{"type":"string","description":"Fully qualified https:// URL. For record objects, must follow the maestro record URL pattern and match an allowed hostname."}},"required":["name","url"]}}},"objectCode":{"type":"string","description":"Object code. Accepts friendly names (task, project, document, issue, program, portfolio, template, template task, record) or actual codes."},"objectID":{"type":"string","description":"The object ID to comment on (e.g., board_12345)"},"tags":{"type":"array","default":[],"description":"Array of tags (mentions). Do not send null – send [] or omit this field.","items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string"},"objCode":{"type":"string"}},"required":["id","objCode"]}},"type":{"type":"string","const":"comment","description":"Type of comment (always \"comment\")"}},"required":["type","objectID","content","contentHTML","objectCode"]},"output_schema":null,"annotations":null},{"name":"comment-stream_create_reply","title":null,"description":"Create a reply to an existing comment. Supports rich text, HTML content, tags, and attachments. Same mention/tag rules as create_comment. Use dry_run: true first to preview and confirm before posting.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","additionalProperties":false,"properties":{"attachments":{"anyOf":[{"type":"array","items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string"}},"required":["id","type","name"]}},{"type":"null"}],"default":[],"description":"Array of attachments. Do NOT send null — send an empty array [] or omit the field."},"content":{"type":"string","description":"The reply content (plain text)"},"contentHTML":{"type":"string","description":"The comment content (HTML). Mentions use <a data-lexical-mention> tags."},"dry_run":{"type":"boolean","default":false,"description":"When true, validates the reply and returns a preview without posting or sending any notifications."},"metadata":{"type":"object","additionalProperties":false,"properties":{"objectMetadata":{"type":"object","additionalProperties":false,"properties":{"name":{"type":"string"},"url":{"type":"string"}},"required":["name","url"]}}},"objectCode":{"type":"string","description":"Object code."},"objectID":{"type":"string","description":"The object ID (e.g., board_12345)"},"parentCommentID":{"type":"string","description":"The parent comment ID (required)"},"parentID":{"type":"string","description":"The parent comment documentID to reply to (required)"},"tags":{"type":"array","default":[],"items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string"},"objCode":{"type":"string"}},"required":["id","objCode"]}},"type":{"type":"string","const":"reply","description":"Type of comment (always \"reply\")"}},"required":["type","parentID","parentCommentID","objectID","content","contentHTML","objectCode"]},"output_schema":null,"annotations":null},{"name":"comment-stream_delete_comment","title":null,"description":"Delete a comment by its ID. Marks the comment as deleted and updates the deleted metadata. Users can only delete their own comments or must have admin privileges.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","additionalProperties":false,"properties":{"commentID":{"type":"string","description":"The comment ID to delete (MongoDB ObjectId)"}},"required":["commentID"]},"output_schema":null,"annotations":null},{"name":"comment-stream_get_comment","title":null,"description":"Get a single comment by its ID. Returns detailed information about a specific comment.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","additionalProperties":false,"properties":{"commentID":{"type":"string","description":"The comment ID (MongoDB ObjectId)"}},"required":["commentID"]},"output_schema":null,"annotations":null},{"name":"comment-stream_get_comments_count","title":null,"description":"Get the total count of top-level comments for a specific object, matching what `query_comments` would return across all pages. For container objects (e.g. PROJECT), the count includes comments on child objects the same way the listing tool does. Replies are not included in the count.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","additionalProperties":false,"properties":{"objectCode":{"type":"string","description":"Object code."},"objectID":{"type":"string","description":"The object ID to count comments for"}},"required":["objectID","objectCode"]},"output_schema":null,"annotations":null},{"name":"comment-stream_query_comments","title":null,"description":"Query comments by object ID with pagination support. Returns a list of comments for a specific object (e.g., BOARD, TASK, etc.) with cursor-based pagination.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","additionalProperties":false,"properties":{"cursor":{"type":"number","description":"Pagination cursor (createdAt timestamp). Omit for the first page; use pageInfo.nextCursor from a previous response."},"limit":{"type":"number","minimum":1,"maximum":500,"description":"Number of comments to return (default: 10, max: 500)"},"objectCode":{"type":"string","description":"Object code."},"objectID":{"type":"string","description":"The object ID to query comments for (e.g., board_12345)"}},"required":["objectID","objectCode"]},"output_schema":null,"annotations":null},{"name":"comment-stream_remove_reaction","title":null,"description":"Remove a reaction (like) from a comment. Currently only \"LIKE\" reactions are supported. Returns acknowledgment of the removal.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","additionalProperties":false,"properties":{"commentID":{"type":"string","description":"The comment ID (MongoDB ObjectId)"},"objectCode":{"type":"string","description":"The object code (optional)"},"type":{"type":"string","default":"LIKE","description":"The reaction type (currently only \"LIKE\" is supported)"}},"required":["commentID"]},"output_schema":null,"annotations":null},{"name":"comment-stream_update_comment","title":null,"description":"Update an existing comment or reply. Can update content, tags, attachments, and metadata. Note: Comments can only be edited within 15 minutes of creation. When tagging users or teams, use the \"tags\" array with the Workfront wfId for users.","input_schema":{"$schema":"http://json-schema.org/draft-07/schema#","type":"object","additionalProperties":false,"properties":{"attachments":{"type":"array","description":"Updated array of attachments","items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string"}},"required":["id","type","name"]}},"commentID":{"type":"string","description":"The comment ID to update (required)"},"content":{"type":"string","description":"The updated comment content (plain text)"},"contentHTML":{"type":"string","description":"The comment content (HTML)."},"metadata":{"type":"object","additionalProperties":false,"properties":{"objectMetadata":{"type":"object","additionalProperties":false,"properties":{"name":{"type":"string"},"url":{"type":"string"}},"required":["name","url"]}}},"tags":{"type":"array","description":"Updated array of tags (mentions)","items":{"type":"object","additionalProperties":false,"properties":{"id":{"type":"string"},"objCode":{"type":"string"}},"required":["id","objCode"]}}},"required":["commentID"]},"output_schema":null,"annotations":null},{"name":"planning_add_global_record_type_to_workspace","title":null,"description":"Add a global record type to a workspace. WARNING: The workspace MUST have a section first—call update_workspace to add one if needed.","input_schema":{"type":"object","properties":{"recordTypeId":{"type":"string","description":"Global Record Type ID to add (e.g., 'Rt123abc'). Must be a record type with isGlobal=true. Use list_addable_global_record_types to see available options."},"sectionName":{"type":"string","description":"Section name within the workspace. Must match an existing section."},"workspaceId":{"type":"string","description":"Target Workspace ID (e.g., 'Ws123abc') where the global record type should be added."}},"required":["recordTypeId","workspaceId","sectionName"]},"output_schema":null,"annotations":null},{"name":"planning_bulk_record_actions","title":null,"description":"Create, update, delete, or restore records in a single request. Use for all record mutations. Before writing, read schema://record-type/{recordTypeId} to learn field IDs, value formats, and writable fields. To LINK an existing external object to a record, do it here as an update: set the record's connection/reference field value to the external object's raw Workfront ID. When the user does not provide a record ID for an update or delete, call search_records first. Not atomic — check the hasErrors flag. When tool B needs an ID returned by tool A, call them in SEPARATE turns.","input_schema":{"type":"object","properties":{"aliased":{"type":"boolean","description":"Whether alias-aware field mapping is enabled. Default: false."},"mcpBulkActionsDto":{"type":"object","description":"Bulk actions payload with recordTypeId plus optional recordsToCreate, recordsToUpdate, recordIdsToDelete, recordIdsToRestore.","properties":{"recordIdsToDelete":{"type":["array","null"],"items":{"type":"string"},"description":"Record IDs to soft-delete (format: Rc + 24 hex chars)."},"recordIdsToRestore":{"type":["array","null"],"items":{"type":"string"},"description":"Recently soft-deleted record IDs to restore."},"recordTypeId":{"type":["string","null"],"description":"Target record type ID (format: Rt + 24 hex chars)."},"recordsToCreate":{"type":["array","null"],"items":{"type":"object","properties":{"colorCode":{"type":["string","null"],"description":"6-digit hex color code for the record. If omitted, a random color is assigned."},"data":{"type":["object","null"],"description":"Field values for the new record; map of field ID to value."}},"required":["data"]},"description":"Records to create; each entry contains a data map of field ID to value."},"recordsToUpdate":{"type":["array","null"],"items":{"type":"object","properties":{"colorCode":{"type":["string","null"]},"data":{"type":["object","null"],"description":"Field values to update; only specified fields are changed, use null to clear a value."},"id":{"type":["string","null"],"description":"Record ID to update (format: Rc + 24 hex chars)."}},"required":["data","id"]},"description":"Records to update; each entry contains an id and a data map of fields to change."}},"required":["recordTypeId"]},"recordTypeAlias":{"type":"string","description":"Optional Record Type alias. Used when aliased=true."},"scopeWorkspaceId":{"type":"string","description":"Optional workspace ID used to scope records & fields filtering for global/dynamic record types."}},"required":["mcpBulkActionsDto"]},"output_schema":null,"annotations":null},{"name":"planning_convert_workspace_to_template","title":null,"description":"Convert an existing workspace into a reusable template. Requires admin privileges.","input_schema":{"type":"object","properties":{"templateDescription":{"type":"string","description":"Template name/title."},"templateIcon":{"type":"string","description":"Icon identifier for the template."},"templateLongDescription":{"type":"string","description":"Detailed description of what the template provides."},"workspaceId":{"type":"string","description":"Workspace ID to convert (format: Ws + 24 hex chars)."}},"required":["workspaceId","templateDescription","templateLongDescription","templateIcon"]},"output_schema":null,"annotations":null},{"name":"planning_create_connection_record","title":null,"description":"Create a brand-new record/object in an external connected system (e.g. create a new Workfront project, portfolio, or program). The record type must be an external record type linked to a supported connection object. Supported Workfront object types: PROJECT, PORTFOLIO, PROGRAM. IMPORTANT: Use this ONLY to create a brand-new external object. To LINK an EXISTING Workfront project to a Planning record, use bulk_record_actions instead.","input_schema":{"type":"object","properties":{"metadata":{"type":"object","description":"Optional custom key/value pairs to include in the external record payload (e.g. portfolio ID, description)."},"name":{"type":"string","description":"Name of the record to create in the external system."},"recordTypeId":{"type":"string","description":"ID of the external record type to create a record for."}},"required":["recordTypeId","name"]},"output_schema":null,"annotations":null},{"name":"planning_create_fields","title":null,"description":"Create one or more fields (columns) on a record type. PREREQUISITE: Call get_record_type first to check existing field names (displayName must be unique). Read docs://field-types for available types and options. For formula fields, also read docs://formula-syntax. LOOKUP / ROLLUP FIELDS: Use type \"lookup\" with lookupOptions containing referenceFieldId, sourceFieldId, and optionally rollup. Not atomic — check the hasErrors flag.","input_schema":{"type":"object","properties":{"fields":{"type":"array","description":"List of fields to create. Each entry needs at minimum displayName and type.","items":{"type":"object","properties":{"alias":{"type":["string","null"],"description":"Unique API identifier in lowercase-with-hyphens format."},"attachmentOptions":{"type":["object","null"],"description":"Attachment display configuration; applicable to attachment fields."},"dateOptions":{"type":["object","null"],"description":"Date display configuration; required for date fields."},"description":{"type":["string","null"],"description":"Field description explaining its purpose."},"displayName":{"type":["string","null"],"description":"User-visible field name shown in the UI."},"formulaOptions":{"type":["object","null"],"description":"Formula calculation configuration; required for formula fields."},"linkedField":{"type":["object","null"],"description":"Back-reference field definition used in bidirectional reference fields."},"lookupOptions":{"type":["object","null"],"description":"Lookup configuration; required for lookup fields. Provide referenceFieldId, sourceFieldId, and optional rollup."},"metadata":{"type":["object","null"],"description":"Field origin and extended rollup metadata."},"numberOptions":{"type":["object","null"],"description":"Number formatting configuration; required for number, currency, and percentage fields."},"options":{"type":["array","null"],"description":"Choice options; required for single-select and multi-select fields."},"referenceOptions":{"type":["object","null"],"description":"Reference link configuration; required for reference fields."},"type":{"type":["string","null"],"enum":["TEXT","LONG_TEXT","LONG_TEXT_HTML","NUMBER","CURRENCY","PERCENTAGE","DATE","SINGLE_SELECT","MULTI_SELECT","BOOLEAN","REFERENCE","FORMULA","USER","LOOKUP","CREATED_AT","UPDATED_AT","CREATED_BY","UPDATED_BY","APPROVED_AT","APPROVED_BY","RECORD_ID"],"description":"Field type."},"userOptions":{"type":["object","null"],"description":"User selection configuration; required for user fields."}},"required":["displayName","type"]}},"recordTypeId":{"type":"string","description":"Record Type ID to add fields to (format: Rt + 24 hex chars)."},"scopeWorkspaceId":{"type":"string","description":"Workspace scope ID. Required when creating fields in global/dynamic record types."},"showInAllViews":{"type":"boolean","description":"When true (default), new fields are automatically made visible in all existing table views."},"viewId":{"type":"string","description":"The ID of the current view. When provided, the new fields are shown on this specific view."}},"required":["recordTypeId","fields"]},"output_schema":null,"annotations":null},{"name":"planning_create_record_types","title":null,"description":"Create one or more record types. A default table view is created automatically for each. PREREQUISITE: The workspace must have a section — call update_workspace to add one if needed. Read docs://workspace-setup-guide for best practices. isGlobal=true requires admin privileges; default to local record types. Not atomic — check the hasErrors flag.","input_schema":{"type":"object","properties":{"recordTypes":{"type":"array","description":"List of record types to create. Each entry is a flat object with workspaceId, sectionName, displayName, and optional fields.","items":{"type":"object","properties":{"authorizedToCreateDynamicRecordType":{"type":["array","null"],"description":"Users authorized to add this global record type to their workspaces; only used when isGlobal is true."},"color":{"type":["string","null"],"description":"Record type color. If omitted or invalid, a random color is auto-assigned."},"createAllDefaultFields":{"type":["boolean","null"],"description":"When true, creates default fields (Name, Description, Start Date, End Date, Status)."},"description":{"type":["string","null"],"description":"Purpose and contents of the record type."},"displayName":{"type":["string","null"],"description":"User-visible record type name shown in the UI."},"icon":{"type":["string","null"],"description":"Record type icon. If omitted or invalid, a random icon is auto-assigned."},"isGlobal":{"type":["boolean","null"],"description":"Whether this record type can be added to multiple workspaces."},"linkableWithAllWorkspaces":{"type":["boolean","null"],"description":"Whether any workspace can create reference fields linking to this record type."},"linkableWithWorkspaceIds":{"type":["array","null"],"description":"Specific workspace IDs allowed to link to this record type."},"sectionName":{"type":["string","null"],"description":"Section name where the record type will be placed."},"workspaceId":{"type":["string","null"],"description":"Workspace ID where the record type will be created (format: Ws + 24 hex chars)."}},"required":["displayName","sectionName","workspaceId"]}}},"required":["recordTypes"]},"output_schema":null,"annotations":null},{"name":"planning_create_view","title":null,"description":"Create a new view for a record type. Views define how records are displayed: table (spreadsheet), timeline (Gantt chart), or calendar. Can configure filters, sorting, and grouping during creation. Read docs://view-types for view type requirements and capabilities. For filter configuration, read docs://filter-operators.","input_schema":{"type":"object","properties":{"mcpViewDto":{"type":"object","description":"View creation payload. See DTO schema for required fields per view type.","properties":{"filter":{"type":["string","null"],"description":"Filter expressions as a JSON-encoded string."},"groupingFieldIds":{"type":["array","null"],"description":"Simple grouping for table/calendar views: list of field IDs to group by."},"groupingRules":{"type":["array","null"],"description":"Grouping with sort direction for timeline views."},"metadata":{"type":["object","null"],"description":"View-specific display settings; required for timeline and calendar views."},"name":{"type":["string","null"],"description":"View display name shown in the UI."},"recordTypeId":{"type":["string","null"],"description":"Record type ID this view belongs to (format: Rt + 24 hex chars)."},"sorting":{"type":["array","null"],"description":"Sorting rules as array of {fieldId, direction} objects."},"type":{"type":["string","null"],"enum":["TABLE","TIMELINE","CALENDAR"],"description":"View type: table, timeline, or calendar."}},"required":["name","recordTypeId","type"]},"scopeWorkspaceId":{"type":"string","description":"Optional workspace ID for scoping views on global/dynamic record types."}},"required":["mcpViewDto"]},"output_schema":null,"annotations":null},{"name":"planning_create_workspace","title":null,"description":"Create a new empty workspace. A workspace is a container for organizing related record types, fields, and data. Read docs://workspace-setup-guide for best practices. Hierarchy: Workspace → Section → RecordType → Field/View/Record.","input_schema":{"type":"object","properties":{"mcpCreateWorkspaceDto":{"type":"object","description":"Workspace details. Do NOT include system-generated fields.","properties":{"alias":{"type":["string","null"],"description":"Not supported on workspace creation (value is ignored)."},"description":{"type":["string","null"],"description":"Purpose and contents of the workspace."},"icon":{"type":["string","null"],"description":"Workspace icon. If omitted or invalid, a random icon is auto-assigned."},"name":{"type":["string","null"],"description":"User-visible workspace name displayed in the UI."},"recordTypeSections":{"type":["array","null"],"description":"Section names that organize record types into logical groups within the workspace."}},"required":["name"]}},"required":["mcpCreateWorkspaceDto"]},"output_schema":null,"annotations":null},{"name":"planning_create_workspace_from_template","title":null,"description":"Create a new workspace from a template. The template provides pre-configured record types, fields, views, and sample data. Use get_template_list to find available templates and get_template for full template details.","input_schema":{"type":"object","properties":{"alias":{"type":"string","description":"Optional workspace alias override (lowercase-with-hyphens format)."},"description":{"type":"string","description":"Optional workspace description override."},"icon":{"type":"string","description":"Optional workspace icon override."},"name":{"type":"string","description":"Optional workspace name override. If omitted, the template's default name is used."},"templateId":{"type":"string","description":"Template ID to create the workspace from (format: T + 24 hex chars)."}},"required":["templateId"]},"output_schema":null,"annotations":null},{"name":"planning_delete_field","title":null,"description":"Delete a Field by ID. This permanently removes the field from its record type, including all data stored in this field across all records. This action cannot be undone. The field must exist and the user must have EDIT permission on the record type.","input_schema":{"type":"object","properties":{"fieldId":{"type":"string","description":"Field ID to delete (format: F + 24 hex chars). WARNING: permanent, cannot be undone."}},"required":["fieldId"]},"output_schema":null,"annotations":null},{"name":"planning_delete_record_type","title":null,"description":"Delete a Record Type by ID. This will permanently remove the record type and ALL its data including all records, fields, and views. Requires MANAGE permission. WARNING: This action cannot be undone.","input_schema":{"type":"object","properties":{"recordTypeId":{"type":"string","description":"Record type ID to delete (format: Rt + 24 hex chars). WARNING: permanent, cannot be undone."}},"required":["recordTypeId"]},"output_schema":null,"annotations":null},{"name":"planning_delete_view","title":null,"description":"Delete a view by ID. This permanently removes the view configuration but does NOT delete records. Requires MANAGE permission. Cannot be undone. The last table view in a record type cannot be deleted.","input_schema":{"type":"object","properties":{"viewId":{"type":"string","description":"View ID to delete (format: V + 24 hex chars). WARNING: permanent, cannot be undone."}},"required":["viewId"]},"output_schema":null,"annotations":null},{"name":"planning_delete_workspace","title":null,"description":"Delete a workspace by ID. Permanently removes the workspace and all its data. Requires MANAGE permission. Use workspace ID only (not name/alias); use get_workspace_list to find the ID if needed.","input_schema":{"type":"object","properties":{"workspaceId":{"type":"string","description":"The workspace ID to delete (format: Ws + 24 hex chars). WARNING: This action cannot be undone."}},"required":["workspaceId"]},"output_schema":null,"annotations":null},{"name":"planning_get_external_record_workspaces","title":null,"description":"Find which Maestro workspaces and record types are connected to a specific external object. Use this to check whether an external record (e.g. a Workfront project) is already linked to a Maestro record, or to discover which workspaces/record types can accept a connection for that object type. See docs://connections for available connections and their supported object types.","input_schema":{"type":"object","properties":{"connection":{"type":"string","description":"Connection/integration name (e.g. 'workfront', 'aem', 'brand')."},"externalId":{"type":"string","description":"ID of the specific external object to look up. Omit to return all connections for the given object type."},"object":{"type":"string","description":"External object type identifier (e.g. 'PROJ' for a Workfront project)."}},"required":["connection","object"]},"output_schema":null,"annotations":null},{"name":"planning_get_field","title":null,"description":"Get Field details by ID. Returns field configuration and a fieldValueSchema describing how to format values for this field when creating or updating records. TIP: To see all fields on a record type at once, prefer get_record_type with attributes=['id','displayName','fields'].","input_schema":{"type":"object","properties":{"fieldId":{"type":"string","description":"Field ID to retrieve (format: F + 24 hex chars)."}},"required":["fieldId"]},"output_schema":null,"annotations":null},{"name":"planning_get_record","title":null,"description":"Get Record details by ID. Returns all attributes.","input_schema":{"type":"object","properties":{"aliased":{"type":"boolean","description":"Optional attribute that controls whether the fields should be mapped using their aliases"},"recordId":{"type":"string","description":"Record ID"}},"required":["recordId"]},"output_schema":null,"annotations":null},{"name":"planning_get_record_change_log","title":null,"description":"Get field change history for a record. Returns chronological list of field value changes (most recent first) showing what changed, when, and by whom. Includes before/after values. Useful for audit trails. Excludes system field changes. Supports pagination via offset/limit.","input_schema":{"type":"object","properties":{"limit":{"type":"integer","description":"Maximum number of entries to return (must be > 0, default: 10, recommended max: 100)"},"offset":{"type":"integer","description":"Number of entries to skip for pagination (must be >= 0, default: 0)."},"recordId":{"type":"string","description":"Record ID to retrieve change history for (format: Rc* e.g., Rc69149189a97038623827bbc7)"}},"required":["recordId"]},"output_schema":null,"annotations":null},{"name":"planning_get_record_sharing","title":null,"description":"Get record sharing. Retrieves sharing/permissions information for a specific record, including who has access and their permission levels. Returns a wildcard access level (EVERYONE_IN_WORKSPACE or SELECTED_USERS_ONLY) and a list of sharing entries. Requires MANAGE permission on the record type containing the record.","input_schema":{"type":"object","properties":{"recordId":{"type":"string","description":"Record ID (format: Rc + 24 hex chars)."}},"required":["recordId"]},"output_schema":null,"annotations":null},{"name":"planning_get_record_type","title":null,"description":"Get Record Type details by ID. Retrieves complete information about a specific record type including its configuration, fields, permissions, metadata, and a summary of all views (table/timeline/calendar). For global record types, also includes global settings. For per-field value schemas, read the schema://record-type/{recordTypeId} resource.","input_schema":{"type":"object","properties":{"recordTypeId":{"type":"string","description":"Record Type ID to retrieve (e.g. 'Rt123abc')."},"scopeWorkspaceId":{"type":"string","description":"Optional workspace ID for scoping dynamic/global record types."}},"required":["recordTypeId"]},"output_schema":null,"annotations":null},{"name":"planning_get_record_type_sharing","title":null,"description":"Get record type sharing. Retrieves sharing/permissions information for a record type, including who has access and their permission levels. Requires MANAGE permission on the workspace containing the record type. For dynamic (global) record types, use scopeWorkspaceId.","input_schema":{"type":"object","properties":{"recordTypeId":{"type":"string","description":"Record type ID (format: Rt + 24 hex chars)."},"scopeWorkspaceId":{"type":"string","description":"Optional workspace ID for scoping dynamic/global record types."}},"required":["recordTypeId"]},"output_schema":null,"annotations":null},{"name":"planning_get_template","title":null,"description":"Get template details by template ID, projected at the requested detail level. Use 'minimal' for just identity and counts, 'metadata' (default) for the embedded workspace with record-type metadata but no fields, or 'full' for the complete legacy payload.","input_schema":{"type":"object","properties":{"templateDetail":{"type":"string","description":"How much detail to include. One of: 'minimal', 'metadata' (default), 'full'."},"templateId":{"type":"string","description":"Template ID (format: T + 24 hex chars)."}},"required":["templateId"]},"output_schema":null,"annotations":null},{"name":"planning_get_template_list","title":null,"description":"List all available templates with lightweight summary info (ID, name, description, type, icon). Use get_template with the template ID to retrieve full details.","input_schema":{"type":"object","properties":{}},"output_schema":null,"annotations":null},{"name":"planning_get_view","title":null,"description":"Get complete view details by ID. Returns view configuration including name, type (table/timeline/calendar), metadata (date fields, column settings), filters, sorting, grouping, permission level, sharing status, and audit fields.","input_schema":{"type":"object","properties":{"scopeWorkspaceId":{"type":"string","description":"Optional workspace ID for scoping global/dynamic record type views."},"viewId":{"type":"string","description":"View ID to retrieve (format: V + 24 hex chars)."}},"required":["viewId"]},"output_schema":null,"annotations":null},{"name":"planning_get_view_sharing","title":null,"description":"Get view sharing. Retrieves sharing/permissions information for a view, including who has access and the view's public sharing status. Requires MANAGE permission on the view.","input_schema":{"type":"object","properties":{"viewId":{"type":"string","description":"View ID (format: V + 24 hex chars)."}},"required":["viewId"]},"output_schema":null,"annotations":null},{"name":"planning_get_workspace","title":null,"description":"Get workspace details by ID or alias. Returns workspace metadata, sections, and a list of record types projected at the requested detail level (defaults to 'metadata'). Use 'minimal' for the smallest payload or 'full' to inline every field (can produce multi-MB responses).","input_schema":{"type":"object","properties":{"alias":{"type":"boolean","description":"Whether alias-aware field mapping is enabled. When true, workspaceId is interpreted as an alias instead of an ID."},"includeExternalRecordTypes":{"type":"boolean","description":"Optional flag to include external record types in the response. Defaults to true."},"recordTypeDetail":{"type":"string","description":"How much detail to include for each record type. One of: 'minimal', 'metadata' (default), 'full'."},"workspaceId":{"type":"string","description":"Workspace ID (format: Ws + 24 hex chars) or, when 'alias' is true, a workspace alias."}},"required":["workspaceId"]},"output_schema":null,"annotations":null},{"name":"planning_get_workspace_list","title":null,"description":"Get workspaces with cursor-based pagination. Returns a lightweight summary for each workspace (id, name, description, permission, createdBy/At, updatedBy/At). Use get_workspace with a specific workspace ID for full details.","input_schema":{"type":"object","properties":{"cursor":{"type":"string","description":"Cursor for pagination. Pass the 'nextCursor' value from a previous response to fetch the next page."},"limit":{"type":"integer","description":"Maximum number of workspaces to return per page (1-50, default 50)."},"nameFilter":{"type":"string","description":"Filter workspaces by name (case-insensitive substring match). Omit to return all."}}},"output_schema":null,"annotations":null},{"name":"planning_get_workspace_sharing","title":null,"description":"Get workspace sharing. Retrieves sharing/permissions information for a workspace, including who has access and their permission levels. Requires MANAGE permission on the workspace.","input_schema":{"type":"object","properties":{"workspaceId":{"type":"string","description":"Workspace ID (format: Ws + 24 hex chars)."}},"required":["workspaceId"]},"output_schema":null,"annotations":null},{"name":"planning_list_addable_global_record_types","title":null,"description":"List global record types available to add to a specific workspace. Returns centrally-defined record types that the current user is authorized to add to the specified workspace, excluding those already linked.","input_schema":{"type":"object","properties":{"workspaceId":{"type":"string","description":"Workspace ID for which to fetch addable global record types"}},"required":["workspaceId"]},"output_schema":null,"annotations":null},{"name":"planning_list_global_record_types","title":null,"description":"List all global record types in the organization. Returns the full catalog of centrally-defined record types visible to the current user, regardless of workspace. Use list_addable_global_record_types to see what can be added to a specific workspace.","input_schema":{"type":"object","properties":{}},"output_schema":null,"annotations":null},{"name":"planning_modify_record_type_sharing","title":null,"description":"Modify record type sharing. Add or remove user/group/team/role/company permissions. Permission levels: administrator, member, viewer, inherit_view_only. License type may restrict levels. Auto-adds workspace viewer access for new users. Cannot remove owner. Verify user existence with search_users before calling this tool.","input_schema":{"type":"object","properties":{"recordTypeId":{"type":"string","description":"Record type ID (format: Rt + 24 hex chars)."},"request":{"type":"object","description":"Sharing modification payload with relationsToCreate and relationsToRemove arrays.","properties":{"relationsToCreate":{"type":["array","null"],"description":"Relations to create; users are auto-granted workspace VIEWER access if needed."},"relationsToRemove":{"type":["array","null"],"description":"Relations to remove (revoke permissions); can be empty if only adding."},"scopeWorkspaceId":{"type":["string","null"],"description":"Workspace ID for scoping permissions in dynamic (global) record types."}},"required":["relationsToCreate","relationsToRemove"]},"scopeWorkspaceId":{"type":"string","description":"Optional workspace ID for scoping dynamic/global record types."}},"required":["recordTypeId","request"]},"output_schema":null,"annotations":null},{"name":"planning_modify_records_sharing","title":null,"description":"Modify record-level sharing. Requires MANAGE permission on the record type. Auto-adds workspace viewer for new users. To GRANT access: use relationsToCreate with relation viewer or member. To REVOKE access: use relationsToCreate with relation no_access. Set wildcard to EVERYONE_IN_WORKSPACE to control default access. SELECTED_USERS_ONLY is not supported. Verify user existence with search_users before calling this tool.","input_schema":{"type":"object","properties":{"recordIds":{"type":"array","items":{"type":"string"},"description":"Record IDs to share (format: Rc + 24 hex chars)."},"recordTypeId":{"type":"string","description":"RecordType ID of the record."},"relationsToCreate":{"type":"array","description":"Relations to grant or revoke. Use relation viewer/member to grant, no_access to revoke.","items":{"type":"object","properties":{"relation":{"type":["string","null"],"description":"Permission level: administrator, member, viewer, limited_viewer, inherit_view_only, or no_access."},"subjectId":{"type":["string","null"],"description":"Unique identifier of the subject (user ID, group ID, team ID, etc.)."},"subjectType":{"type":["string","null"],"description":"Subject type: ims/user, redrock/user, redrock/group, redrock/teamob, redrock/role, or redrock/cmpy."}}}},"scopeWorkspaceId":{"type":"string","description":"Workspace ID for scoping sharing in dynamic (global) record types."},"wildcard":{"type":"string","enum":["SELECTED_USERS_ONLY","EVERYONE_IN_WORKSPACE"],"description":"Record-wide access policy. Only EVERYONE_IN_WORKSPACE is supported."}},"required":["recordIds"]},"output_schema":null,"annotations":null},{"name":"planning_modify_view_sharing","title":null,"description":"Modify view sharing. Views support only 2 levels: administrator (manage) and viewer (view). Can enable/disable public sharing via isPublicShared (requires workspace MANAGE). Cannot remove owner. Verify user existence with search_users before calling this tool.","input_schema":{"type":"object","properties":{"request":{"type":"object","description":"Sharing modification payload with relationsToCreate and relationsToRemove arrays.","properties":{"isPublicShared":{"type":["boolean","null"],"description":"Whether to enable public sharing via link; requires workspace MANAGE permission."},"relationsToCreate":{"type":["array","null"],"description":"Relations to create (grant permissions); views support only ADMINISTRATOR and VIEWER levels."},"relationsToRemove":{"type":["array","null"],"description":"Relations to remove (revoke permissions)."},"scopeWorkspaceId":{"type":["string","null"],"description":"Workspace ID for scoping view sharing in dynamic (global) record types."},"tokenExpirationDate":{"type":["string","null"],"description":"Public link expiration date in ISO 8601 format; max 12 months from today."}},"required":["relationsToCreate","relationsToRemove"]},"viewId":{"type":"string","description":"View ID (format: V + 24 hex chars)."}},"required":["viewId","request"]},"output_schema":null,"annotations":null},{"name":"planning_modify_workspace_sharing","title":null,"description":"Modify workspace sharing. Add or remove user/group/team/role/company permissions. Permission levels: administrator, member, viewer. License type may restrict available levels. Cannot remove owner or downgrade system admins. Verify user existence with search_users before calling this tool.","input_schema":{"type":"object","properties":{"request":{"type":"object","description":"Sharing modification payload with relationsToCreate and relationsToRemove arrays.","properties":{"relationsToCreate":{"type":["array","null"],"description":"Relations to create (grant permissions); can be empty if only removing."},"relationsToRemove":{"type":["array","null"],"description":"Relations to remove (revoke permissions); can be empty if only adding."},"wildcard":{"type":["string","null"],"enum":["SELECTED_USERS_ONLY","EVERYONE_IN_WORKSPACE"],"description":"Workspace-wide access policy."}},"required":["relationsToCreate","relationsToRemove"]},"workspaceId":{"type":"string","description":"Workspace ID (format: Ws + 24 hex chars)."}},"required":["workspaceId","request"]},"output_schema":null,"annotations":null},{"name":"planning_remove_global_record_type_from_ws","title":null,"description":"Remove a global record type from a workspace. This removes only the instance from the specified workspace, not the source global record type. WARNING: All records of this type in the workspace will be permanently deleted.","input_schema":{"type":"object","properties":{"recordTypeId":{"type":"string","description":"Record Type ID to remove (e.g., 'Rt123abc'). Must be a global record type instance in the specified workspace."},"workspaceId":{"type":"string","description":"Workspace ID to remove the global record type from (format: Ws + 24 hex chars)."}},"required":["recordTypeId","workspaceId"]},"output_schema":null,"annotations":null},{"name":"planning_search_records","title":null,"description":"Search and filter records. IMPORTANT: text equality uses $is (not $eq). Read docs://filter-operators for all operators and filter syntax by field type.","input_schema":{"type":"object","properties":{"alias":{"type":"boolean","description":"Whether the recordTypeId parameter is a record type alias instead of an ID. Default: false."},"aliased":{"type":"boolean","description":"Whether alias-aware field mapping is enabled for filters and responses. Default: false."},"fieldAliases":{"type":"array","items":{"type":"string"},"description":"Optional list of field Aliases to include in record data. Omit for all fields."},"fieldIds":{"type":"array","items":{"type":"string"},"description":"Optional list of field IDs to include in record data. Omit for all fields."},"recordSearchDto":{"type":"object","description":"Search payload: optional filters, groupingFieldIds, sorting, offset, limit. Omit for defaults."},"recordTypeId":{"type":"string","description":"Record Type ID (e.g., 'Rt123abc') or record type alias depending on the 'alias' parameter."},"scopeWorkspaceId":{"type":"string","description":"Optional workspace ID used to scope records & fields filtering for global/dynamic record types."}},"required":["recordTypeId"]},"output_schema":null,"annotations":null},{"name":"planning_search_resources","title":null,"description":"Search across all resource types (workspaces, record types, views) by name. Returns results ranked by relevance. Each result includes the resource type and contextual details (e.g., workspace name for record types, view type for views). Use this tool to quickly find any object by name when you don't know its type or location.","input_schema":{"type":"object","properties":{"searchTerm":{"type":"string","description":"Search term to match against resource names."}},"required":["searchTerm"]},"output_schema":null,"annotations":null},{"name":"planning_search_sharing_data","title":null,"description":"Search for users, groups, teams, job roles, and companies for sharing and permissions. IMPORTANT: This tool searches ONLY by name. Do NOT pass IDs, emails, or any other field values — only names are supported. General-purpose API for finding entities to share workspaces, record types, records, or views with.","input_schema":{"type":"object","properties":{"connectionName":{"type":"string","description":"Connection name to search within (e.g., 'workfront', 'aem', 'brand'). Use 'workfront' for Workfront Planning sharing scenarios."},"name":{"type":"string","description":"The NAME to search for (case-insensitive substring match). Can be a partial or full name."}},"required":["connectionName","name"]},"output_schema":null,"annotations":null},{"name":"planning_search_users","title":null,"description":"Search for users with pagination. Supports two modes (use exactly one): (1) By IDs — provide 'ids' to look up specific users by their IDs. (2) By search term — provide 'searchTerm' to match against name, email, user ID, or IMS user ID. NOTE: the user 'id' field in results is the IMS user ID, not the Workfront User ID; the Workfront User ID is in 'wfId'. Returns an empty list when no users match.","input_schema":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"string"},"description":"List of user IDs for direct lookup."},"limit":{"type":"integer","description":"Maximum number of results to return per page (default: 50, must be > 0)."},"offset":{"type":"integer","description":"Number of results to skip for pagination (default: 0, must be >= 0)."},"searchTerm":{"type":"string","description":"Free text search term — name, email, user ID, or IMS user ID. Pass empty string to retrieve all users."}}},"output_schema":null,"annotations":null},{"name":"planning_update_field","title":null,"description":"Partially update a field by ID. Only provided fields change; others are preserved. A field's type cannot be changed after creation. For lookup fields: rollup can be changed via lookupOptions.rollup. Read docs://field-types for type-specific options that can be updated.","input_schema":{"type":"object","properties":{"fieldId":{"type":"string","description":"Field ID to update (format: F + 24 hex chars)."},"recordTypeId":{"type":"string","description":"Record Type ID that owns the field (format: Rt + 24 hex chars). Required when updating reference fields with a backField."},"scopeWorkspaceId":{"type":"string","description":"Workspace scope ID. Required when updating fields in global/dynamic record types."},"updateFieldDto":{"type":"object","description":"Field update payload. Only include fields you want to change. Do NOT include system-generated fields."}},"required":["fieldId","updateFieldDto"]},"output_schema":null,"annotations":null},{"name":"planning_update_record_type","title":null,"description":"Partially update a record type. Only provided fields change; omitted fields retain their current values.","input_schema":{"type":"object","properties":{"mcpUpdateRecordTypeDto":{"type":"object","description":"Fields to update. Only include fields you want to change."},"recordTypeId":{"type":"string","description":"Record Type ID to update (e.g. 'Rt123abc')."},"scopeWorkspaceId":{"type":"string","description":"Optional workspace ID for scoping permissionSettings on a global record type."}},"required":["recordTypeId","mcpUpdateRecordTypeDto"]},"output_schema":null,"annotations":null},{"name":"planning_update_records_order","title":null,"description":"Update records order within a record type. Moves specified records to a new position relative to another record. You must provide either putUnderRecordId (place after) or putBeforeRecordId (place before), and at least one record ID to move.","input_schema":{"type":"object","properties":{"movingRecordIds":{"type":"array","items":{"type":"string"},"description":"Record IDs to move. Must contain at least one."},"putBeforeRecordId":{"type":"string","description":"Place the moving records before this record ID. Provide either this or putUnderRecordId, not both."},"putUnderRecordId":{"type":"string","description":"Place the moving records after this record ID. Provide either this or putBeforeRecordId, not both."},"recordTypeId":{"type":"string","description":"Record Type ID (e.g., 'Rt123abc') containing the records to reorder. Must exist and you must have EDIT permission."}},"required":["recordTypeId","movingRecordIds"]},"output_schema":null,"annotations":null},{"name":"planning_update_view","title":null,"description":"Partially update an existing view. Only the fields you provide will change; omitted fields remain untouched. Read docs://view-types for view type configuration details. For filter updates, read docs://filter-operators.","input_schema":{"type":"object","properties":{"mcpViewUpdateDto":{"type":"object","description":"View update payload. Only include fields to change."},"recordTypeId":{"type":"string","description":"Record type ID this view belongs to (format: Rt + 24 hex chars)."},"viewId":{"type":"string","description":"View ID to update (format: V + 24 hex chars)."}},"required":["viewId","recordTypeId","mcpViewUpdateDto"]},"output_schema":null,"annotations":null},{"name":"planning_update_workspace","title":null,"description":"Update an existing workspace. Partial update: only provided fields change, null fields are ignored. When tool B needs an ID returned by tool A, call them in SEPARATE turns. Hierarchy: Workspace → Section → RecordType → Field/View/Record.","input_schema":{"type":"object","properties":{"mcpUpdateWorkspaceDto":{"type":"object","description":"Fields to update. Only include fields you want to change. Do NOT include system-generated fields."},"workspaceId":{"type":"string","description":"The workspace ID to update (format: Ws + 24 hex chars)."}},"required":["workspaceId","mcpUpdateWorkspaceDto"]},"output_schema":null,"annotations":null}],"tools_configurations":[],"resources":[],"resources_configurations":[],"prompts":[],"prompts_configurations":[]}],"documentation":["https://experienceleague.adobe.com/en/docs/workfront/using/basics/workfront-mcp-server/workfront-mcp-server","https://experienceleague.adobe.com/en/docs/workfront/using/basics/workfront-mcp-server/workfront-mcp-server-overview","https://experienceleague.adobe.com/en/docs/workfront/using/basics/workfront-mcp-server/configure-workfront-mcp-server","https://experienceleague.adobe.com/en/docs/workfront/using/basics/workfront-mcp-server/use-workfront-mcp-server","https://experienceleague.adobe.com/en/docs/workfront/using/basics/workfront-mcp-server/workfront-mcp-server-tools"],"installation":"Check https://experienceleague.adobe.com/en/docs/workfront/using/basics/workfront-mcp-server/configure-workfront-mcp-server#connect-workfront-to-a-custom-mcp-solution for installation instructions.","authentication":"OAuth 2.0 DCR with user IMS and OAuth 2.0 with ClientID and ClientSecret","open_contribution":null,"adobe_products":["Workfront"],"support_contact":"aidevusworkfront@adobe.com","fi_codes":[],"vendor":"Adobe","vendor_name":null,"surface":["End-user","Developer"],"adobe_metadata":{"adobe_service_id":"534971","developer_distribution_app_id":null,"developer_distribution_version_id":null},"created_by":"0363113C53A0541E0A4C86E7@AdobeID","created_at":"2026-08-05T20:59:07.187000Z","updated_at":"2026-08-07T06:58:04.737000Z"},{"id":"8f950090-6e80-4c9a-8872-b2dbabde066b","name":"workfront-fusion-mcp","title":"Workfront Fusion MCP","summary":"Work with your Adobe Workfront Fusion scenarios, executions, connections, webhooks and more through natural-language conversation in your AI assistant.","description":"The Adobe Workfront Fusion MCP Server brings Fusion into your favorite AI assistant, such as Adobe Coworker, Claude and more. Instead of switching between tools, just ask your assistant to help with your Fusion work in plain language. Getting started is simple: sign in with your Adobe ID and choose the Fusion organization you want to work in. From then on, your assistant can find and review your scenarios, help you understand how they work, organize your folders and take care of everyday tasks for you. Your data stays secure. The assistant only sees and does what you're already allowed to do in Fusion, and your Adobe credentials are never shared with the AI tool. We regularly add new capabilities, so your assistant can do more in Fusion over time with no extra setup on your side.","tags":["fusion","workfront-fusion"],"deployment_mode":["remote"],"category":["Workflow Automation","Product Feature"],"lifecycle":"production","owner":["org-dgevorgy-all"],"server_type":["external"],"base64_icon":null,"is_active":false,"status":"active","packages":[],"repository":null,"version":"1.11.1","version_release_notes":null,"remotes":[{"transport_type":"streamable_http","url":"https://mcp.fusion.adobe.com/mcp","headers":[],"tools":[{"name":"fusion_activity_logs_export","title":null,"description":"Export the caller's organization activity logs as CSV or XLSX for offline analysis or compliance reporting, using the same filters as fusion_activity_logs_list. Each log records an action performed on an entity by a user, with a UTC timestamp and a human-readable \"message\" (e.g. `John Snow updated \"My scenario\" scenario`). Filter by \"entity\" — one of \"team\", \"scenario\", \"webhook\", \"connection\", \"data structure\", \"data store\", \"organization\", \"folder\", \"user\", \"key\", \"keys\" — and by \"action\" — one of \"created\", \"deleted\", \"renamed\", \"disabled\", \"enabled\", \"deactivated\", \"reauthorized\", \"activated\", \"updated\", \"moved\", \"cloned\", \"invited\", \"transferred ownership\", \"changed organization role\", \"changed team role\", \"restored\" — using \"property\" expressions, e.g. property: [\"entity==scenario\", \"action==created\"]. These values are lowercase and some contain spaces (e.g. \"data structure\", \"transferred ownership\", \"changed organization role\"), so they must be matched exactly. Returns the file content inline (base64-encoded for XLSX); large exports are replaced with size metadata and guidance instead of the full file — see the tool result if that happens.","input_schema":{"type":"object","properties":{"format":{"type":"string","description":"Export file format. Defaults to \"csv\".","enum":["csv","xlsx"]},"query":{"type":"object","additionalProperties":false,"properties":{"limit":{"type":"integer","minimum":1,"maximum":200,"description":"Maximum number of items to return. Range 1–200; defaults to 50 when omitted."},"orderby":{"type":"string","description":"Sort property and direction, e.g. \"+id\" (ascending) or \"-name\" (descending)."},"property":{"type":"array","items":{"type":"string"},"description":"Filter expressions, one per entry, e.g. [\"teamId==88\", \"name~report\"]. Operators: == != (not-equals) > >= < <= ~ (regex)."},"start":{"type":"string","description":"Paging cursor. Must correspond to the \"orderby\" field and is used only when orderby is set."}}}},"additionalProperties":false},"output_schema":null,"annotations":null},{"name":"fusion_activity_logs_list","title":null,"description":"List activity logs for the caller's organization (e.g. scenario creation, user invites) using cursor-based paging. Each log records an action performed on an entity by a user, with a UTC timestamp and a human-readable \"message\" (e.g. `John Snow updated \"My scenario\" scenario`). Filter by \"entity\" — one of \"team\", \"scenario\", \"webhook\", \"connection\", \"data structure\", \"data store\", \"organization\", \"folder\", \"user\", \"key\", \"keys\" — and by \"action\" — one of \"created\", \"deleted\", \"renamed\", \"disabled\", \"enabled\", \"deactivated\", \"reauthorized\", \"activated\", \"updated\", \"moved\", \"cloned\", \"invited\", \"transferred ownership\", \"changed organization role\", \"changed team role\", \"restored\" — using \"property\" expressions, e.g. property: [\"entity==scenario\", \"action==created\"]. These values are lowercase and some contain spaces (e.g. \"data structure\", \"transferred ownership\", \"changed organization role\"), so they must be matched exactly. Supports pagination, filtering and sorting via the \"query\" param. Filterable fields: timestamp, messageId, userId, userName, teamId, teamName, entity, entityId, action, message. Sortable fields: timestamp. Filter operators: <= >= == != < > ~ in nin (where \"!=\" is not-equals and \"~\" is regex match) — one expression per \"property\" entry, e.g. \"teamId==88\" or \"name~report\". Sort with \"orderby\" (e.g. \"+name\" or \"-lastEdit\"); page with \"limit\" and the opaque \"start\" cursor.","input_schema":{"type":"object","properties":{"query":{"type":"object","additionalProperties":false,"properties":{"limit":{"type":"integer","minimum":1,"maximum":200,"description":"Maximum number of items to return. Range 1–200; defaults to 50 when omitted."},"orderby":{"type":"string","description":"Sort property and direction, e.g. \"+id\" (ascending) or \"-name\" (descending)."},"property":{"type":"array","items":{"type":"string"},"description":"Filter expressions, one per entry, e.g. [\"teamId==88\", \"name~report\"]. Operators: == != (not-equals) > >= < <= ~ (regex)."},"start":{"type":"string","description":"Paging cursor. Must correspond to the \"orderby\" field and is used only when orderby is set."}}}},"additionalProperties":false},"output_schema":null,"annotations":null},{"name":"fusion_connections_clone","title":null,"description":"Clone a connection by connectionId into a new connection with the same credentials and settings. teamId defaults to the source connection's team; name defaults to \"{source name} (clone)\". Requires edit permission on the source connection and permission to add connections to the target team, which must be in the same organization. The source connection is tested first: a 400 means its credentials are invalid and it must be reauthorized before cloning. Not idempotent: every call creates a new connection. Returns the id and name of the new connection.","input_schema":{"type":"object","properties":{"connectionId":{"type":"integer","description":"Source connection ID","minimum":1},"name":{"type":"string","description":"Name for the cloned connection. Defaults to `\"{source name} (clone)\"`.","maxLength":128,"examples":["My Connection (clone)"]},"teamId":{"type":"integer","description":"Target team for the clone. Defaults to the source connection's team; the caller must have permission to add connections to the resolved team.","minimum":1,"examples":[12345]}},"additionalProperties":false,"required":["connectionId"]},"output_schema":null,"annotations":null},{"name":"fusion_connections_delete","title":null,"description":"Permanently delete a connection by connectionId. Requires per-item delete permission. Fails with 409 while any hook still depends on the connection — check first with fusion_hooks_dependents (kind=\"connection\") and delete those hooks. Scenarios that use the connection do not block the delete; it is detached from them, so check them beforehand with fusion_scenarios_dependents (kind=\"connection\") and warn the user if needed.","input_schema":{"type":"object","properties":{"connectionId":{"type":"integer","description":"Connection ID","minimum":1}},"additionalProperties":false,"required":["connectionId"]},"output_schema":null,"annotations":null},{"name":"fusion_connections_get","title":null,"description":"Get a single connection by id, including its full details. Scoped to the caller's organization and gated by per-item view permission.","input_schema":{"type":"object","properties":{"connectionId":{"type":"integer","description":"Connection ID","minimum":1}},"additionalProperties":false,"required":["connectionId"]},"output_schema":null,"annotations":null},{"name":"fusion_connections_search","title":null,"description":"Search connections for the caller's organization, cursor-paginated. Supports pagination, filtering and sorting via the \"query\" param. Filterable fields: id, name, accountName, accountType, expire, teamId, scopesCount, editable, uid, environmentType, authenticationType. Sortable fields: id, name, accountName, expire. Filter operators: <= >= == != < > ~ in nin (where \"!=\" is not-equals and \"~\" is regex match) — one expression per \"property\" entry, e.g. \"teamId==88\" or \"name~report\". Only these operators are supported: no other operators, OR logic, wildcards or functions; multiple \"property\" entries are combined with AND. Sort with \"orderby\" (e.g. \"+name\" or \"-lastEdit\"). Default sort when \"orderby\" is omitted: \"+id\". Page size is set with \"limit\": minimum 1, maximum 200, default 50. Paginate whenever possible instead of stopping at the first page: keep the same \"orderby\" (or the default), then while the response \"_page.next\" is present, call again with the same query and \"start\" set to that value until no \"next\" is returned. Supply property=teamId==<id> to restrict to a single team.","input_schema":{"type":"object","properties":{"query":{"type":"object","additionalProperties":false,"properties":{"limit":{"type":"integer","minimum":1,"maximum":200,"description":"Maximum number of items to return. Range 1–200; defaults to 50 when omitted."},"orderby":{"type":"string","description":"Sort property and direction, e.g. \"+id\" (ascending) or \"-name\" (descending)."},"property":{"type":"array","items":{"type":"string"},"description":"Filter expressions, one per entry, e.g. [\"teamId==88\", \"name~report\"]. Operators: == != (not-equals) > >= < <= ~ (regex)."},"start":{"type":"string","description":"Paging cursor. Must correspond to the \"orderby\" field and is used only when orderby is set."}}}},"additionalProperties":false},"output_schema":null,"annotations":null},{"name":"fusion_data_list","title":null,"description":"Read the records stored inside a data store, identified by its numeric ID. Use this to inspect a store's actual contents — each record is a key (string) paired with arbitrary JSON data. Results are a paginated page ordered by the store; records have no stable sortable field, so ordering by record data is not supported. Page with limit (1–200, default 50) and start (a row offset, default 0). If you don't have the store's ID yet, call fusion_datastores_list first.","input_schema":{"type":"object","properties":{"dataStoreId":{"type":"integer","description":"Data store ID","minimum":1},"limit":{"type":"integer","description":"Page size, 1–200 (default 50)","minimum":1,"maximum":200,"default":50},"start":{"type":"integer","description":"Row offset to start the page at (default 0)","minimum":0,"default":0}},"additionalProperties":false,"required":["dataStoreId"]},"output_schema":null,"annotations":null},{"name":"fusion_data_stores_data_delete","title":null,"description":"Permanently delete one or more records from a data store, identified by its numeric ID. Provide the record keys to delete in \"id\", or set \"all\": true to clear every record (optionally keeping some via \"except\", which is only allowed with \"all\"). \"id\" and \"all\" are mutually exclusive. Requires per-item delete permission on the data store. The delete always proceeds and reports per-key outcomes: the response lists the keys \"deleted\" and any that \"failed\"; if any key failed the call surfaces a 409 carrying that same body. Use fusion_data_list to find record keys. To delete one record, pass its key as the only entry in \"id\".","input_schema":{"type":"object","properties":{"all":{"type":"boolean","description":"Delete every record in the data store. Mutually exclusive with \"id\"."},"dataStoreId":{"type":"integer","description":"Data store ID","minimum":1},"except":{"type":"array","minItems":1,"items":{"type":"string","minLength":1},"description":"Record keys to keep. Only allowed together with \"all\": true."},"id":{"type":"array","minItems":1,"items":{"type":"string","minLength":1},"description":"Record keys to delete. Mutually exclusive with \"all\"."}},"additionalProperties":false,"required":["dataStoreId"]},"output_schema":null,"annotations":null},{"name":"fusion_data_structures_delete","title":null,"description":"Permanently delete a data structure by id. Requires per-item delete permission. Fails with 409 (listing the blocking data stores) while any data store still uses the data structure — check first with fusion_datastores_dependents (kind=\"dataStructure\") and remove or repoint those data stores. Scenarios that reference the data structure do not block the delete; check them beforehand with fusion_scenarios_dependents (kind=\"dataStructure\") and warn the user if needed.","input_schema":{"type":"object","properties":{"id":{"type":"integer","description":"Data structure ID","minimum":1}},"additionalProperties":false,"required":["id"]},"output_schema":null,"annotations":null},{"name":"fusion_data_structures_get","title":null,"description":"Get a single data structure by id, including its full field specification (spec). Scoped to the caller's organization and gated by per-item view permission.","input_schema":{"type":"object","properties":{"id":{"type":"integer","description":"Data structure ID","minimum":1}},"additionalProperties":false,"required":["id"]},"output_schema":null,"annotations":null},{"name":"fusion_data_structures_search","title":null,"description":"Search data structures for the caller's organization, cursor-paginated. Supports pagination, filtering and sorting via the \"query\" param. Filterable fields: id, name, strict, teamId. Sortable fields: id, name. Filter operators: <= >= == != < > ~ in nin (where \"!=\" is not-equals and \"~\" is regex match) — one expression per \"property\" entry, e.g. \"teamId==88\" or \"name~report\". Only these operators are supported: no other operators, OR logic, wildcards or functions; multiple \"property\" entries are combined with AND. Sort with \"orderby\" (e.g. \"+name\" or \"-lastEdit\"). Default sort when \"orderby\" is omitted: \"-id\". Page size is set with \"limit\": minimum 1, maximum 200, default 50. Paginate whenever possible instead of stopping at the first page: keep the same \"orderby\" (or the default), then while the response \"_page.next\" is present, call again with the same query and \"start\" set to that value until no \"next\" is returned. Supply property=teamId==<id> to restrict to a single team.","input_schema":{"type":"object","properties":{"query":{"type":"object","additionalProperties":false,"properties":{"limit":{"type":"integer","minimum":1,"maximum":200,"description":"Maximum number of items to return. Range 1–200; defaults to 50 when omitted."},"orderby":{"type":"string","description":"Sort property and direction, e.g. \"+id\" (ascending) or \"-name\" (descending)."},"property":{"type":"array","items":{"type":"string"},"description":"Filter expressions, one per entry, e.g. [\"teamId==88\", \"name~report\"]. Operators: == != (not-equals) > >= < <= ~ (regex)."},"start":{"type":"string","description":"Paging cursor. Must correspond to the \"orderby\" field and is used only when orderby is set."}}}},"additionalProperties":false},"output_schema":null,"annotations":null},{"name":"fusion_datastores_delete","title":null,"description":"Permanently delete a data store, including every record inside it, by its numeric ID. Requires per-item delete permission. Fails with 409 (listing the blocking scenarios) while any scenario still uses the data store — check first with fusion_scenarios_dependents (kind=\"dataStore\") and remove or repoint those scenarios. To remove only some records and keep the store, use fusion_data_stores_data_delete instead.","input_schema":{"type":"object","properties":{"id":{"type":"integer","description":"Data store ID","minimum":1}},"additionalProperties":false,"required":["id"]},"output_schema":null,"annotations":null},{"name":"fusion_datastores_dependents","title":null,"description":"Find data stores in the organization that reference a given resource. Returns each dependent data store's id and name. Only kind=\"dataStructure\" is supported today. Returns an empty array when no data stores depend on the resource.","input_schema":{"type":"object","properties":{"id":{"type":"integer","description":"ID of the resource to find dependent data stores for.","minimum":1},"kind":{"type":"string","description":"Type of resource to look up data stores by.","enum":["dataStructure"]}},"additionalProperties":false,"required":["kind","id"]},"output_schema":null,"annotations":null},{"name":"fusion_datastores_get","title":null,"description":"Fetch full details for a single data store by its numeric ID. Use this when you already know the store's ID (for example from fusion_datastores_list) and need its metadata and current usage metrics: record count, bytes used and maximum capacity, the linked data-structure ID, and whether validation is strict. This returns the store itself, not its records — use fusion_data_list to read the records inside it.","input_schema":{"type":"object","properties":{"id":{"type":"integer","description":"Data store ID","minimum":1}},"additionalProperties":false,"required":["id"]},"output_schema":null,"annotations":null},{"name":"fusion_datastores_list","title":null,"description":"List and search the organization's data stores. Use this to discover which data stores exist, to find a store's numeric ID from its name, or to review usage metrics (record count, bytes used vs. maximum capacity) across stores. Start here when you don't yet know a store's ID. Returns a paginated list; each item includes id, name, owning teamId, records, size and maxSize (bytes). Filter by teamId to scope to a single team, or omit for an org-wide list. Supports pagination, filtering and sorting via the \"query\" param. Filterable fields: id, name, teamId, records, size, maxSize, dataStructureId. Sortable fields: id, name, records, size, maxSize, dataStructureId. Filter operators: <= >= == != < > ~ in nin (where \"!=\" is not-equals and \"~\" is regex match) — one expression per \"property\" entry, e.g. \"teamId==88\" or \"name~report\". Only these operators are supported: no other operators, OR logic, wildcards or functions; multiple \"property\" entries are combined with AND. Sort with \"orderby\" (e.g. \"+name\" or \"-lastEdit\"). Default sort when \"orderby\" is omitted: \"+name\". Page size is set with \"limit\": minimum 1, maximum 200, default 50. Paginate whenever possible instead of stopping at the first page: keep the same \"orderby\" (or the default), then while the response \"_page.next\" is present, call again with the same query and \"start\" set to that value until no \"next\" is returned.","input_schema":{"type":"object","properties":{"query":{"type":"object","additionalProperties":false,"properties":{"limit":{"type":"integer","minimum":1,"maximum":200,"description":"Maximum number of items to return. Range 1–200; defaults to 50 when omitted."},"orderby":{"type":"string","description":"Sort property and direction, e.g. \"+id\" (ascending) or \"-name\" (descending)."},"property":{"type":"array","items":{"type":"string"},"description":"Filter expressions, one per entry, e.g. [\"teamId==88\", \"name~report\"]. Operators: == != (not-equals) > >= < <= ~ (regex)."},"start":{"type":"string","description":"Paging cursor. Must correspond to the \"orderby\" field and is used only when orderby is set."}}}},"additionalProperties":false},"output_schema":null,"annotations":null},{"name":"fusion_executions_get","title":null,"description":"Get a single execution by its execution ID, including metadata about the scenario or DLQ it belongs to. Exactly one of scenarioId or dlqId is required.","input_schema":{"type":"object","properties":{"dlqId":{"type":"string","description":"Incomplete execution (DLQ) identifier. Mutually exclusive with scenarioId."},"executionId":{"type":"string","description":"Unique identifier for the execution. A 32-character lowercase string.","examples":["62672b87ce5a449dae743947962da8b7"]},"scenarioId":{"type":"string","description":"Scenario identifier. Mutually exclusive with dlqId."}},"additionalProperties":false,"required":["executionId"]},"output_schema":null,"annotations":null},{"name":"fusion_executions_list","title":null,"description":"List executions for a scenario or incomplete execution (DLQ). Exactly one of scenarioId or dlqId is required. To narrow results, filter by status — for example `property=[\"status==3\"]` for failed executions or `property=[\"status==2\"]` for executions that completed with warnings. Supports pagination, filtering and sorting via the \"query\" param. Filterable fields: id, status, timestamp, duration, bundles, operations, transfer. Sortable fields: timestamp, duration, bundles, operations. Filter operators: <= >= == != < > ~ in nin (where \"!=\" is not-equals and \"~\" is regex match) — one expression per \"property\" entry, e.g. \"teamId==88\" or \"name~report\". Sort with \"orderby\" (e.g. \"+name\" or \"-lastEdit\"); page with \"limit\" and the opaque \"start\" cursor.","input_schema":{"type":"object","properties":{"dlqId":{"type":"string","description":"Incomplete execution (DLQ) identifier. Mutually exclusive with scenarioId."},"query":{"type":"object","additionalProperties":false,"properties":{"limit":{"type":"integer","minimum":1,"maximum":200,"description":"Maximum number of items to return. Range 1–200; defaults to 50 when omitted."},"orderby":{"type":"string","description":"Sort property and direction, e.g. \"+id\" (ascending) or \"-name\" (descending)."},"property":{"type":"array","items":{"type":"string"},"description":"Filter expressions, one per entry, e.g. [\"teamId==88\", \"name~report\"]. Operators: == != (not-equals) > >= < <= ~ (regex)."},"start":{"type":"string","description":"Paging cursor. Must correspond to the \"orderby\" field and is used only when orderby is set."}}},"scenarioId":{"type":"string","description":"Scenario identifier. Mutually exclusive with dlqId."},"showCheckRuns":{"type":"boolean","description":"Include small check-run executions","default":false}},"additionalProperties":false},"output_schema":null,"annotations":null},{"name":"fusion_feedback_submit","title":null,"description":"Sends the user's feedback about the Fusion MCP (bug reports, wrong results, feature requests, praise) to the Fusion team. Only call this when the user explicitly asks to give feedback, report a problem, or suggest an improvement — never automatically after an error. Pass the user's own words as `message`, and confirm the text with the user before submitting. One call per explicit request. If the call fails, do not tell the user the feedback was submitted.","input_schema":{"type":"object","properties":{"category":{"type":"string","description":"The kind of feedback.","enum":["bug","feature_request","wrong_result","praise","other"]},"message":{"type":"string","description":"The user's feedback, in their own words.","minLength":1,"maxLength":4000,"pattern":"\\S"},"rating":{"type":"integer","description":"Optional overall satisfaction rating, 1 (poor) to 5 (great), only if the user gave one.","minimum":1,"maximum":5},"related_tool":{"type":"string","description":"Optional name of the Fusion MCP tool the feedback is about.","minLength":1,"maxLength":200}},"required":["message","category"]},"output_schema":null,"annotations":null},{"name":"fusion_folders_create","title":null,"description":"Create a folder for organizing scenarios in a team. Requires team automation-add permission.","input_schema":{"type":"object","properties":{"body":{"type":"object","properties":{"name":{"type":"string","description":"Display name of the folder","examples":["Marketing automations"]},"teamId":{"type":"number","description":"Team that will own the folder","examples":[88]}},"required":["teamId","name"]}},"additionalProperties":false,"required":["body"]},"output_schema":null,"annotations":null},{"name":"fusion_folders_delete","title":null,"description":"Delete a folder by folderId. Requires folder delete permission","input_schema":{"type":"object","properties":{"folderId":{"type":"integer","description":"Folder ID","minimum":1}},"additionalProperties":false,"required":["folderId"]},"output_schema":null,"annotations":null},{"name":"fusion_folders_list","title":null,"description":"List folders for the organization, with scenario counts. Supports pagination, filtering and sorting via the \"query\" param. Filterable fields: id, name, teamId. Sortable fields: id, name, scenariosTotal. Filter operators: <= >= == != < > ~ in nin (where \"!=\" is not-equals and \"~\" is regex match) — one expression per \"property\" entry, e.g. \"teamId==88\" or \"name~report\". Only these operators are supported: no other operators, OR logic, wildcards or functions; multiple \"property\" entries are combined with AND. Sort with \"orderby\" (e.g. \"+name\" or \"-lastEdit\"). Default sort when \"orderby\" is omitted: \"+id\". Page size is set with \"limit\": minimum 1, maximum 200, default 50. Paginate whenever possible instead of stopping at the first page: keep the same \"orderby\" (or the default), then while the response \"_page.next\" is present, call again with the same query and \"start\" set to that value until no \"next\" is returned. Requires organization view permission.","input_schema":{"type":"object","properties":{"query":{"type":"object","additionalProperties":false,"properties":{"limit":{"type":"integer","minimum":1,"maximum":200,"description":"Maximum number of items to return. Range 1–200; defaults to 50 when omitted."},"orderby":{"type":"string","description":"Sort property and direction, e.g. \"+id\" (ascending) or \"-name\" (descending)."},"property":{"type":"array","items":{"type":"string"},"description":"Filter expressions, one per entry, e.g. [\"teamId==88\", \"name~report\"]. Operators: == != (not-equals) > >= < <= ~ (regex)."},"start":{"type":"string","description":"Paging cursor. Must correspond to the \"orderby\" field and is used only when orderby is set."}}}},"additionalProperties":false},"output_schema":null,"annotations":null},{"name":"fusion_folders_update","title":null,"description":"Update a folder (rename) by folderId. Requires folder edit permission.","input_schema":{"type":"object","properties":{"body":{"type":"object","properties":{"name":{"type":"string","description":"New display name for the folder","examples":["Marketing automations"]}},"required":["name"]},"folderId":{"type":"integer","description":"Folder ID","minimum":1}},"additionalProperties":false,"required":["folderId","body"]},"output_schema":null,"annotations":null},{"name":"fusion_hook_queue_delete","title":null,"description":"Permanently delete queued webhook events from a hook's queue. Provide a specific set of \"id\"s (up to 50), or set \"all\": true to clear the queue (optionally excluding some via \"except\"). If some events cannot be deleted (e.g. currently processing), the deletable ones are still removed and the call surfaces a 409 whose body reports the per-id \"deleted\" and \"failed\" outcome.","input_schema":{"type":"object","properties":{"all":{"type":"boolean","description":"Delete all queued webhook events for the hook.","examples":[false]},"except":{"type":"array","items":{"type":"string"},"description":"ID of the queued webhook event to exclude when deleting `all`. Repeat for multiple (`?except=a&except=b`). Maximum 50.","examples":[["cea19821d0ad423d92b853a51ea2321e"]]},"hookId":{"type":"integer","description":"Numeric ID of the hook.","minimum":1},"id":{"type":"array","items":{"type":"string"},"description":"ID of the queued webhook event to delete. Repeat for multiple (`?id=a&id=b`). Maximum 50.","examples":[["cea19821d0ad423d92b853a51ea2321e","563e8cc79fd84ae08fca37fa05d94150"]]}},"additionalProperties":false,"required":["hookId"]},"output_schema":null,"annotations":null},{"name":"fusion_hooks_clone","title":null,"description":"Create a copy of an existing hook by its numeric ID. The clone gets a new URL, copies the source hook's configuration and enabled/priority state, and is created in the source hook's team unless \"teamId\" is given. Requires view permission on the source hook and permission to add hooks to the target team. Before cloning, call fusion_hooks_dependencies for the source hook to find what the user needs to supply: its items are the only reference kinds \"replacements\" accepts (400 otherwise). Every reference the clone keeps must belong to the clone's team, so when cloning into another team the user must pick a connection from that team (a connection is never copied) — a kept data structure or key is duplicated into it automatically. A replacement connection must have the same \"type\" (connector) as the source connection, and a replacement key must match the hook's auth type. Each call creates a new hook. Returns the new hook's \"id\", \"name\", and \"url\".","input_schema":{"type":"object","properties":{"hookId":{"type":"integer","description":"Numeric ID of the hook to clone.","minimum":1},"name":{"type":"string","description":"Name for the cloned hook. Defaults to `\"{source name} (clone)\"` when omitted.","examples":["My Hook (clone)"]},"replacements":{"type":"array","description":"Reference replacements to apply to the clone. Only the reference kinds the source hook type actually uses are accepted.","items":{"type":"object","properties":{"kind":{"type":"string","description":"Which reference on the cloned hook to re-point.","enum":["dataStructure","connection","key"],"examples":["connection"]},"targetId":{"type":"number","description":"Id of the target resource to point the clone at (a connection id for `connection`, a data structure id for `dataStructure`, a key id for `key`). The caller's permission on this target -- and that it belongs to the clone's team -- is checked before the clone is created.","examples":["456"]}},"required":["kind","targetId"]}},"teamId":{"type":"number","description":"Target team for the clone. Defaults to the source hook's team when omitted; the caller must have permission to add hooks to the resolved team.","examples":[12685]}},"additionalProperties":false,"required":["hookId"]},"output_schema":null,"annotations":null},{"name":"fusion_hooks_delete","title":null,"description":"Permanently delete a hook by its numeric ID. Any webhook events still queued for the hook are removed with it. Requires per-item hook delete permission; only the creator of the hook can delete it (403 otherwise). Scenarios that use the hook do not block the delete — check them beforehand with fusion_scenarios_dependents (kind=\"hook\") and warn the user if needed. To clear only queued events and keep the hook, use fusion_hook_queue_delete instead.","input_schema":{"type":"object","properties":{"hookId":{"type":"integer","description":"Numeric ID of the hook to delete.","minimum":1}},"additionalProperties":false,"required":["hookId"]},"output_schema":null,"annotations":null},{"name":"fusion_hooks_dependencies","title":null,"description":"List the resources a hook references — its connection, data structure, and key — as items with \"kind\", \"id\", \"name\", and \"type\" (connector identity for a connection, key type for a key). Call this before fusion_hooks_clone to learn which \"replacements\" the clone can take and what the user needs to supply. Every reference is read as the caller, so one the user cannot access fails the call with 403. To find hooks that reference a given resource instead, use fusion_hooks_dependents.","input_schema":{"type":"object","properties":{"hookId":{"type":"integer","description":"Numeric ID of the hook.","minimum":1}},"additionalProperties":false,"required":["hookId"]},"output_schema":null,"annotations":null},{"name":"fusion_hooks_dependents","title":null,"description":"Find hooks in the organization that reference a given resource. Returns each dependent hook's id and name. Only kind=\"connection\" is supported today. Returns an empty array when no hooks depend on the resource.","input_schema":{"type":"object","properties":{"id":{"type":"integer","description":"ID of the resource to find dependent hooks for.","minimum":1},"kind":{"type":"string","description":"Type of resource to look up hooks by.","enum":["connection"]}},"additionalProperties":false,"required":["kind","id"]},"output_schema":null,"annotations":null},{"name":"fusion_hooks_get","title":null,"description":"Get the full details of a single hook by its numeric ID, including its configuration data, owner binding, and external references. Use this to inspect a hook before triggering it or to verify its URL and event subscription data.","input_schema":{"type":"object","properties":{"hookId":{"type":"integer","description":"Numeric ID of the hook to retrieve.","minimum":1}},"additionalProperties":false,"required":["hookId"]},"output_schema":null,"annotations":null},{"name":"fusion_hooks_list","title":null,"description":"List and search hooks in the caller organization that the user can view, with cursor-based paging. Supports pagination, filtering and sorting via the \"query\" param. Filterable fields: id, name, teamId, udid, type, enabled, gone, typeName, scenarioId, priority, detached, automationType, automationId. Sortable fields: id, name, teamId, udid, type, priority. Filter operators: <= >= == != < > ~ in nin (where \"!=\" is not-equals and \"~\" is regex match) — one expression per \"property\" entry, e.g. \"teamId==88\" or \"name~report\". Only these operators are supported: no other operators, OR logic, wildcards or functions; multiple \"property\" entries are combined with AND. Sort with \"orderby\" (e.g. \"+name\" or \"-lastEdit\"). Default sort when \"orderby\" is omitted: \"+id\". Page size is set with \"limit\": minimum 1, maximum 200, default 50. Paginate whenever possible instead of stopping at the first page: keep the same \"orderby\" (or the default), then while the response \"_page.next\" is present, call again with the same query and \"start\" set to that value until no \"next\" is returned. The `typeName` field identifies the hook's integration, e.g. `custom-webhook`, `adobe-workfront` / `adobe-workfront-legacy`, or `workfront-planning` / `workfront-planning-legacy`.","input_schema":{"type":"object","properties":{"query":{"type":"object","additionalProperties":false,"properties":{"limit":{"type":"integer","minimum":1,"maximum":200,"description":"Maximum number of items to return. Range 1–200; defaults to 50 when omitted."},"orderby":{"type":"string","description":"Sort property and direction, e.g. \"+id\" (ascending) or \"-name\" (descending)."},"property":{"type":"array","items":{"type":"string"},"description":"Filter expressions, one per entry, e.g. [\"teamId==88\", \"name~report\"]. Operators: == != (not-equals) > >= < <= ~ (regex)."},"start":{"type":"string","description":"Paging cursor. Must correspond to the \"orderby\" field and is used only when orderby is set."}}}},"additionalProperties":false},"output_schema":null,"annotations":null},{"name":"fusion_keys_delete","title":null,"description":"Permanently delete a key by id. Requires per-item delete permission. Scenarios that use the key do not block the delete — check them beforehand with fusion_scenarios_dependents (kind=\"key\") and warn the user if needed.","input_schema":{"type":"object","properties":{"id":{"type":"integer","description":"Key ID","minimum":1}},"additionalProperties":false,"required":["id"]},"output_schema":null,"annotations":null},{"name":"fusion_keys_get","title":null,"description":"Get a single key by id. Scoped to the caller's organization and gated by per-item view permission.","input_schema":{"type":"object","properties":{"id":{"type":"integer","description":"Key ID","minimum":1}},"additionalProperties":false,"required":["id"]},"output_schema":null,"annotations":null},{"name":"fusion_keys_search","title":null,"description":"List keys, cursor-paginated. Supports pagination, filtering and sorting via the \"query\" param. Filterable fields: id, name, typeName, teamId. Sortable fields: id, name. Filter operators: <= >= == != < > ~ in nin (where \"!=\" is not-equals and \"~\" is regex match) — one expression per \"property\" entry, e.g. \"teamId==88\" or \"name~report\". Only these operators are supported: no other operators, OR logic, wildcards or functions; multiple \"property\" entries are combined with AND. Sort with \"orderby\" (e.g. \"+name\" or \"-lastEdit\"). Default sort when \"orderby\" is omitted: \"+id\". Page size is set with \"limit\": minimum 1, maximum 200, default 50. Paginate whenever possible instead of stopping at the first page: keep the same \"orderby\" (or the default), then while the response \"_page.next\" is present, call again with the same query and \"start\" set to that value until no \"next\" is returned.","input_schema":{"type":"object","properties":{"query":{"type":"object","additionalProperties":false,"properties":{"limit":{"type":"integer","minimum":1,"maximum":200,"description":"Maximum number of items to return. Range 1–200; defaults to 50 when omitted."},"orderby":{"type":"string","description":"Sort property and direction, e.g. \"+id\" (ascending) or \"-name\" (descending)."},"property":{"type":"array","items":{"type":"string"},"description":"Filter expressions, one per entry, e.g. [\"teamId==88\", \"name~report\"]. Operators: == != (not-equals) > >= < <= ~ (regex)."},"start":{"type":"string","description":"Paging cursor. Must correspond to the \"orderby\" field and is used only when orderby is set."}}}},"additionalProperties":false},"output_schema":null,"annotations":null},{"name":"fusion_operations_get","title":null,"description":"Get operation counts for the caller’s organization over a date range (from/to, ISO 8601 UTC, max 1 year), optionally filtered by teamId, scenarioId, and/or package, and optionally broken down with groupby (module/package/scenario/team). Returns a time series grouped by day or month depending on the range. Note: scenarioId requires teamId, and package requires scenarioId. Filterable by operations count via property (e.g. operations>=100). Sortable via orderby by timestamp (+timestamp ascending / -timestamp descending). Requires the organization_view permission on the organization.","input_schema":{"type":"object","properties":{"from":{"type":"string","description":"Valid ISO format dates, eg 2025-01-01T19:20:30+01:00. Date range cannot exceed 1 full year.","format":"date-time","examples":["2025-01-01T12:00:00.000Z"]},"groupby":{"type":"string","description":"Group operation counts by a specific dimension. When set, each time-period entry in the response includes a nested array broken down by the chosen group.\n\n**Available Groups:**\n- `module` - Group by module name\n- `package` - Group by package name\n- `scenario` - Group by scenario ID\n- `team` - Group by team ID","enum":["module","package","scenario","team"]},"orderby":{"type":"string","description":"Sort results by timestamp. Prefix with `+` for ascending or `-` for descending.\n\n**Values:**\n- `+timestamp` - Oldest first (ascending)\n- `-timestamp` - Newest first (descending)\n\n**Default:** Oldest first (`+timestamp`).","examples":["-timestamp"]},"package":{"type":"string","description":"Filter results to a specific package name.\n\n**Note:** Requires `scenarioId` to also be specified.","examples":["workfront-workfront"]},"property":{"type":"string","description":"Filter results by operations count. When `groupby` is used, filters the nested arrays by their operations value.\n\n**Format:** `operations<operator><value>`\n\n**Operators:**\n- `==` equals\n- `!=` not equals\n- `>` greater than\n- `>=` greater than or equal to\n- `<` less than\n- `<=` less than or equal to","examples":["operations>=100"]},"scenarioId":{"type":"number","description":"Filter results to a specific scenario.\n\n**Note:** Requires `teamId` to also be specified.","examples":[11111]},"teamId":{"type":"number","description":"Filter results to a specific team. When provided, only operations for this team are returned.","examples":[67890]},"to":{"type":"string","description":"End date in ISO format. Date range cannot exceed 1 full year.","format":"date-time","examples":["2025-02-01T12:00:00.000Z"]}},"additionalProperties":false,"required":["from","to"]},"output_schema":null,"annotations":null},{"name":"fusion_operations_summary_by_org","title":null,"description":"Get a high-level summary of total operation counts for the caller’s organization over a date range (from/to, ISO 8601 UTC, max 1 year), broken down by scenario and team, without time-series data. Optionally filtered by teamId, scenarioId, and/or package. Returns per scenario/team operation counts plus the total across all of them. Filterable by operations count via property (e.g. operations>=100). Sortable via orderby by scenarioId, teamId, or operations (prefix + for ascending / - for descending; default -operations). Requires the organization_view permission on the organization.","input_schema":{"type":"object","properties":{"from":{"type":"string","description":"Valid ISO format dates, eg 2025-01-01T19:20:30+01:00. Date range cannot exceed 1 full year.","format":"date-time","examples":["2025-01-01T12:00:00.000Z"]},"orderby":{"type":"string","description":"Sort summary results by field. Prefix with `+` for ascending or `-` for descending.\n\n**Sortable Fields:**\n- `scenarioId` - Sort by scenario ID\n- `teamId` - Sort by team ID\n- `operations` - Sort by operation count\n\n**Default:** `-operations` (highest operation count first).","examples":["-operations"]},"package":{"type":"string","description":"Filter results to a specific package name.","examples":["workfront-workfront"]},"property":{"type":"string","description":"Filter scenarios by their total operations count within the specified date range.\n\n**Format:** `operations<operator><value>`\n\n**Operators:**\n- `==` equals\n- `!=` not equals\n- `>` greater than\n- `>=` greater than or equal to\n- `<` less than\n- `<=` less than or equal to","examples":["operations>=100"]},"scenarioId":{"type":"number","description":"Filter results to a specific scenario. Returns the operation count for this single scenario.","examples":[11111]},"teamId":{"type":"number","description":"Filter results to a specific team. When provided, only scenarios belonging to this team are included in the summary.","examples":[67890]},"to":{"type":"string","description":"End date in ISO format. Date range cannot exceed 1 full year.","format":"date-time","examples":["2025-02-01T12:00:00.000Z"]}},"additionalProperties":false,"required":["from","to"]},"output_schema":null,"annotations":null},{"name":"fusion_organizations_get","title":null,"description":"Get the current organization (the one named by organizationId, sent as the x-organization-id header).","input_schema":{"type":"object","properties":{"organizationId":{"type":"integer","description":"Organization ID","minimum":1}},"additionalProperties":false,"required":["organizationId"]},"output_schema":null,"annotations":null},{"name":"fusion_organizations_list","title":null,"description":"List every organization the caller can view (requires view permission on organizationId). Supports pagination, filtering and sorting via the \"query\" param. Filterable fields: id, name, externalId. Sortable fields: id, name. Filter operators: <= >= == != < > ~ in nin (where \"!=\" is not-equals and \"~\" is regex match) — one expression per \"property\" entry, e.g. \"teamId==88\" or \"name~report\". Only these operators are supported: no other operators, OR logic, wildcards or functions; multiple \"property\" entries are combined with AND. Sort with \"orderby\" (e.g. \"+name\" or \"-lastEdit\"). Default sort when \"orderby\" is omitted: \"+name\". Page size is set with \"limit\": minimum 1, maximum 200, default 50. Paginate whenever possible instead of stopping at the first page: keep the same \"orderby\" (or the default), then while the response \"_page.next\" is present, call again with the same query and \"start\" set to that value until no \"next\" is returned.","input_schema":{"type":"object","properties":{"organizationId":{"type":"integer","description":"Organization ID the caller has view permission on","minimum":1},"query":{"type":"object","additionalProperties":false,"properties":{"limit":{"type":"integer","minimum":1,"maximum":200,"description":"Maximum number of items to return. Range 1–200; defaults to 50 when omitted."},"orderby":{"type":"string","description":"Sort property and direction, e.g. \"+id\" (ascending) or \"-name\" (descending)."},"property":{"type":"array","items":{"type":"string"},"description":"Filter expressions, one per entry, e.g. [\"teamId==88\", \"name~report\"]. Operators: == != (not-equals) > >= < <= ~ (regex)."},"start":{"type":"string","description":"Paging cursor. Must correspond to the \"orderby\" field and is used only when orderby is set."}}}},"additionalProperties":false,"required":["organizationId"]},"output_schema":null,"annotations":null},{"name":"fusion_orgs_list","title":null,"description":"Lists the Fusion organizations available to the current user, with id, region, and label. Call this when no organization is active yet, or when the user asks which Fusion organizations they can use, or before switching so you can pick a valid id for fusion_orgs_set. Read-only — it does not change the active organization.","input_schema":{"type":"object","properties":{}},"output_schema":null,"annotations":null},{"name":"fusion_orgs_set","title":null,"description":"Switches the active Fusion organization for this session; all later tool calls run against it. Requires organization_id, as returned by fusion_orgs_list. Use only when the user explicitly names a different organization to work in, or none is active yet and more than one is available. Do NOT call this to answer data questions — those run against the already-active organization and never need a switch first.","input_schema":{"type":"object","properties":{"organization_id":{"type":"string","description":"The id of the Fusion organization to switch to, as returned by fusion_orgs_list."}},"required":["organization_id"]},"output_schema":null,"annotations":null},{"name":"fusion_queue_get","title":null,"description":"Get the full detail of a single queued webhook event, including its decoded payload. Requires the hook ID and the queue item ID (UUID).","input_schema":{"type":"object","properties":{"hookId":{"type":"integer","description":"Numeric ID of the hook.","minimum":1},"itemId":{"type":"string","description":"Unique identifier (UUID) of the queued webhook event to retrieve.","minLength":1}},"additionalProperties":false,"required":["hookId","itemId"]},"output_schema":null,"annotations":null},{"name":"fusion_queue_list","title":null,"description":"List a hook's queue of received webhook events, with cursor-based paging. Requires the hook ID. Supports pagination, filtering and sorting via the \"query\" param. Filterable fields: id, size, createdAt, processing, processingStartedAt. Sortable fields: id, size, createdAt, processingStartedAt. Filter operators: <= >= == != < > ~ in nin (where \"!=\" is not-equals and \"~\" is regex match) — one expression per \"property\" entry, e.g. \"teamId==88\" or \"name~report\". Only these operators are supported: no other operators, OR logic, wildcards or functions; multiple \"property\" entries are combined with AND. Sort with \"orderby\" (e.g. \"+name\" or \"-lastEdit\"). Default sort when \"orderby\" is omitted: \"+id\". Page size is set with \"limit\": minimum 1, maximum 200, default 50. Paginate whenever possible instead of stopping at the first page: keep the same \"orderby\" (or the default), then while the response \"_page.next\" is present, call again with the same query and \"start\" set to that value until no \"next\" is returned.","input_schema":{"type":"object","properties":{"hookId":{"type":"integer","description":"Numeric ID of the hook.","minimum":1},"query":{"type":"object","additionalProperties":false,"properties":{"limit":{"type":"integer","minimum":1,"maximum":200,"description":"Maximum number of items to return. Range 1–200; defaults to 50 when omitted."},"orderby":{"type":"string","description":"Sort property and direction, e.g. \"+id\" (ascending) or \"-name\" (descending)."},"property":{"type":"array","items":{"type":"string"},"description":"Filter expressions, one per entry, e.g. [\"teamId==88\", \"name~report\"]. Operators: == != (not-equals) > >= < <= ~ (regex)."},"start":{"type":"string","description":"Paging cursor. Must correspond to the \"orderby\" field and is used only when orderby is set."}}}},"additionalProperties":false,"required":["hookId"]},"output_schema":null,"annotations":null},{"name":"fusion_queue_stats","title":null,"description":"Get statistics about a hook's queue: the number of events currently queued, the queue limit, and whether the hook is enabled. Requires the hook ID.","input_schema":{"type":"object","properties":{"hookId":{"type":"integer","description":"Numeric ID of the hook.","minimum":1}},"additionalProperties":false,"required":["hookId"]},"output_schema":null,"annotations":null},{"name":"fusion_scenario_versions_create","title":null,"description":"Publish a blueprint as a new version of a scenario. Use this to update an existing scenario's blueprint (modules, actions, flow, mappings) - scenarios are versioned, so updating the blueprint means creating a new version. The blueprint becomes the scenario's live blueprint; earlier versions are kept. Chain relationships and scheduling are synced to the new blueprint. Re-publishing a blueprint identical to the latest version is a no-op and returns the latest version. Requires automation edit permission.","input_schema":{"type":"object","properties":{"body":{"type":"object","properties":{"blueprint":{"type":"object","description":"Blueprint to publish as a new version of the scenario."}},"required":["blueprint"]},"scenarioId":{"type":"integer","description":"Scenario ID","minimum":1}},"additionalProperties":false,"required":["scenarioId","body"]},"output_schema":null,"annotations":null},{"name":"fusion_scenario_versions_get","title":null,"description":"Get the blueprint and metadata for a specific version of a scenario. Requires automation view permission.","input_schema":{"type":"object","properties":{"scenarioId":{"type":"integer","description":"Scenario ID","minimum":1},"version":{"type":"integer","description":"Scenario version number","minimum":1}},"additionalProperties":false,"required":["scenarioId","version"]},"output_schema":null,"annotations":null},{"name":"fusion_scenario_versions_list","title":null,"description":"List versions of a scenario. Supports pagination, filtering and sorting via the \"query\" param. Filterable fields: version, createdAt, comment. Sortable fields: version, createdAt. Filter operators: <= >= == != < > ~ in nin (where \"!=\" is not-equals and \"~\" is regex match) — one expression per \"property\" entry, e.g. \"teamId==88\" or \"name~report\". Only these operators are supported: no other operators, OR logic, wildcards or functions; multiple \"property\" entries are combined with AND. Sort with \"orderby\" (e.g. \"+name\" or \"-lastEdit\"). Default sort when \"orderby\" is omitted: \"-version\". Page size is set with \"limit\": minimum 1, maximum 200, default 50. Paginate whenever possible instead of stopping at the first page: keep the same \"orderby\" (or the default), then while the response \"_page.next\" is present, call again with the same query and \"start\" set to that value until no \"next\" is returned. Requires automation view permission.","input_schema":{"type":"object","properties":{"query":{"type":"object","additionalProperties":false,"properties":{"limit":{"type":"integer","minimum":1,"maximum":200,"description":"Maximum number of items to return. Range 1–200; defaults to 50 when omitted."},"orderby":{"type":"string","description":"Sort property and direction, e.g. \"+id\" (ascending) or \"-name\" (descending)."},"property":{"type":"array","items":{"type":"string"},"description":"Filter expressions, one per entry, e.g. [\"teamId==88\", \"name~report\"]. Operators: == != (not-equals) > >= < <= ~ (regex)."},"start":{"type":"string","description":"Paging cursor. Must correspond to the \"orderby\" field and is used only when orderby is set."}}},"scenarioId":{"type":"integer","description":"Scenario ID","minimum":1}},"additionalProperties":false,"required":["scenarioId"]},"output_schema":null,"annotations":null},{"name":"fusion_scenarios_clone","title":null,"description":"Clone a scenario into a target team, applying dependency replacements. Before calling this tool, ALWAYS call fusion_scenarios_getDependencies for the source scenarioId to learn which dependencies the blueprint references, then build body.replacements from its items: each replacement is { kind: item.kind, sourceId: item.id, targetId: <ID of the equivalent resource the clone should use> }. Required replacements: every hook dependency (always, even when cloning into the same team); and every connection dependency when the target team differs from the source team. Replacements for other kinds (key, dataStore, dataStructure) are optional. If a required dependency exists and you do not know the targetId, ask the user for it instead of guessing; the request is rejected with 400 when a required replacement is missing. If getDependencies returns no hook dependencies and the clone stays in the same team, pass replacements: []. Requires automation edit permission on the source and team automation-edit permission on the target.","input_schema":{"type":"object","properties":{"body":{"type":"object","properties":{"continueFromLastProcessed":{"type":"boolean","description":"When true, the clone continues right after the last record the original processed. When false (default), the clone starts fresh and processes all records from the beginning.","default":false,"examples":[false]},"folderId":{"type":"number","description":"Folder ID where the cloned scenario will be created","examples":[88]},"name":{"type":"string","description":"Name for the cloned scenario","maxLength":255,"examples":["My copied scenario"]},"replacements":{"type":"array","description":"Maps source dependencies to target resources in the new team","items":{"type":"object","properties":{"kind":{"type":"string","description":"Type of dependency to replace","enum":["hook","dataStore","dataStructure","connection","key","scenario"]},"sourceId":{"type":"number","description":"Source dependency id (in the original scenario)","examples":[100]},"targetId":{"type":"number","description":"Target dependency id (replacement in the clone)","examples":[200]}},"required":["kind","sourceId","targetId"]}},"teamId":{"type":"number","description":"Team ID where the cloned scenario will be created. If omitted, the clone is created in the source scenario team.","examples":[88]}},"required":["replacements"]},"scenarioId":{"type":"integer","description":"Scenario ID","minimum":1}},"additionalProperties":false,"required":["scenarioId","body"]},"output_schema":null,"annotations":null},{"name":"fusion_scenarios_create","title":null,"description":"Create a new scenario in the specified team. Requires team automation-add permission. After it succeeds, call fusion_scenarios_get_link with the newly created scenario ID and include the returned URL in your response so the user can open the scenario in Fusion.","input_schema":{"type":"object","properties":{"body":{"type":"object","properties":{"blueprint":{"type":"object","description":"Blueprint for the scenario."},"description":{"type":"string","description":"Optional description for the scenario","maxLength":1000,"examples":["Syncs data from source A to destination B."]},"folderId":{"type":"number","description":"Folder ID for organizing the scenario; omit if not placing in a folder.","examples":[10]},"name":{"type":"string","description":"Name for the new scenario","maxLength":255,"examples":["My new scenario"]},"scheduling":{"type":"object","description":"Scheduling configuration for the scenario trigger. When omitted the scenario has no trigger schedule.","examples":[{"interval":600,"type":"indefinitely"}]},"sequential":{"type":"boolean","description":"Whether modules in the scenario run strictly in order. Defaults to false.","examples":[false]},"teamId":{"type":"number","description":"Team ID where the scenario will be created","examples":[88]},"templateId":{"type":"number","description":"ID of the template this scenario is being created from","examples":[42]}},"required":["teamId","blueprint"]}},"additionalProperties":false,"required":["body"]},"output_schema":null,"annotations":null},{"name":"fusion_scenarios_delete","title":null,"description":"Delete a scenario. Requires automation delete permission and confirm=true.","input_schema":{"type":"object","properties":{"scenarioId":{"type":"integer","description":"Scenario ID","minimum":1}},"additionalProperties":false,"required":["scenarioId"]},"output_schema":null,"annotations":null},{"name":"fusion_scenarios_dependents","title":null,"description":"Find scenarios in the organization that reference a given resource. Returns each dependent scenario's id and name. Supported kinds: hook, dataStore, dataStructure, connection, key, scenario. Returns an empty array when no scenarios depend on the resource.","input_schema":{"type":"object","properties":{"id":{"type":"integer","description":"ID of the resource to find dependent scenarios for.","minimum":1},"kind":{"type":"string","description":"Type of resource to look up scenarios by.","enum":["hook","dataStore","dataStructure","connection","key","scenario"]}},"additionalProperties":false,"required":["kind","id"]},"output_schema":null,"annotations":null},{"name":"fusion_scenarios_execute","title":null,"description":"Trigger a single (\"run once\") execution of a scenario and wait (bounded by timeoutMs) for it to finish. Use this to validate a scenario after creating or editing it — run it once, inspect the returned status/errorMessage for failures, and fix the scenario if it did not complete successfully. Not applicable to webhook-triggered (\"instant\") scenarios, which wait for an external webhook call and are not supported by this tool. Requires automation edit permission.","input_schema":{"type":"object","properties":{"scenarioId":{"type":"integer","description":"Scenario ID","minimum":1},"timeoutMs":{"type":"number","description":"Max time to wait for completion, in milliseconds","default":10000}},"additionalProperties":false,"required":["scenarioId"]},"output_schema":null,"annotations":null},{"name":"fusion_scenarios_get","title":null,"description":"Get a single scenario by scenarioId, including its full blueprint. Requires automation view permission. After it succeeds, call fusion_scenarios_get_link with the same scenario ID and include the returned URL in your response so the user can open the scenario in Fusion.","input_schema":{"type":"object","properties":{"scenarioId":{"type":"integer","description":"Scenario ID","minimum":1}},"additionalProperties":false,"required":["scenarioId"]},"output_schema":null,"annotations":null},{"name":"fusion_scenarios_getDependencies","title":null,"description":"Get the dependencies referenced by a scenario blueprint: connections, keys, data stores, hooks, and data structures. Each item has { kind, id, name }. Call this before fusion_scenarios_clone — its items are the source side (kind, sourceId) of the clone replacements. Requires automation view permission.","input_schema":{"type":"object","properties":{"scenarioId":{"type":"integer","description":"Scenario ID","minimum":1}},"additionalProperties":false,"required":["scenarioId"]},"output_schema":null,"annotations":null},{"name":"fusion_scenarios_get_link","title":null,"description":"Get the Fusion UI link (URL) for a scenario, e.g. https://experience.adobe.com/so:WorkfrontFusion{orgId}/fusion/{teamId}/scenarios/{scenarioId}. The organization comes from the x-organization-id request header, and the team is resolved from the scenario. Use this when the user wants a clickable URL to open a scenario in the browser, and always call it after fusion_scenarios_create, fusion_scenarios_clone (with the new scenario ID), fusion_scenarios_update and fusion_scenarios_get so the returned URL can be shared with the user. Requires automation view permission.","input_schema":{"type":"object","properties":{"scenarioId":{"type":"integer","description":"Scenario ID","minimum":1}},"additionalProperties":false,"required":["scenarioId"]},"output_schema":null,"annotations":null},{"name":"fusion_scenarios_list","title":null,"description":"List scenarios in the organization. Supports pagination, filtering and sorting via the \"query\" param. Filterable fields: id, name, teamId, description, folderId, isInvalid, isActive, isLocked, isPaused, lastEdit, hookId, deleted. Sortable fields: id, name, lastEdit. Filter operators: <= >= == != < > ~ in nin (where \"!=\" is not-equals and \"~\" is regex match) — one expression per \"property\" entry, e.g. \"teamId==88\" or \"name~report\". Only these operators are supported: no other operators, OR logic, wildcards or functions; multiple \"property\" entries are combined with AND. Sort with \"orderby\" (e.g. \"+name\" or \"-lastEdit\"). Default sort when \"orderby\" is omitted: \"-id\". Page size is set with \"limit\": minimum 1, maximum 200, default 50. Paginate whenever possible instead of stopping at the first page: keep the same \"orderby\" (or the default), then while the response \"_page.next\" is present, call again with the same query and \"start\" set to that value until no \"next\" is returned. Requires organization view permission.","input_schema":{"type":"object","properties":{"query":{"type":"object","additionalProperties":false,"properties":{"limit":{"type":"integer","minimum":1,"maximum":200,"description":"Maximum number of items to return. Range 1–200; defaults to 50 when omitted."},"orderby":{"type":"string","description":"Sort property and direction, e.g. \"+id\" (ascending) or \"-name\" (descending)."},"property":{"type":"array","items":{"type":"string"},"description":"Filter expressions, one per entry, e.g. [\"teamId==88\", \"name~report\"]. Operators: == != (not-equals) > >= < <= ~ (regex)."},"start":{"type":"string","description":"Paging cursor. Must correspond to the \"orderby\" field and is used only when orderby is set."}}}},"additionalProperties":false},"output_schema":null,"annotations":null},{"name":"fusion_scenarios_update","title":null,"description":"Patch mutable scenario fields (name, description, folder, active state, scheduling). Requires automation edit permission.","input_schema":{"type":"object","properties":{"body":{"type":"object","properties":{"deleted":{"type":"boolean","description":"Set to `false` to restore a previously soft-deleted scenario (un-bin). Setting `true` here is rejected — use `DELETE /scenarios/:scenarioId` for soft-delete. Cannot be combined with `isActive` or `scheduling` because those operations run against the scenario's dependents, which are not yet rebuilt at the moment of restore.","examples":[false]},"description":{"type":"string","description":"Optional longer description shown in the UI.","maxLength":1000,"examples":["Generate an image"]},"folderId":{"type":"number","description":"Folder ID for organizing scenarios; omit if the scenario is not in a folder.","examples":[10]},"isActive":{"type":"boolean","description":"Whether the scenario is linked and eligible to run.","examples":[true]},"name":{"type":"string","description":"Scenario name.","maxLength":255,"examples":["My updated scenario"]},"scheduling":{"type":"object","description":"Schedule definition when the scenario is triggered on a timer (shape depends on scheduler settings).","examples":[{"interval":600,"type":"indefinitely"}]}}},"scenarioId":{"type":"integer","description":"Scenario ID","minimum":1}},"additionalProperties":false,"required":["scenarioId","body"]},"output_schema":null,"annotations":null},{"name":"fusion_scenarios_validate_blueprint","title":null,"description":"Structurally validate a blueprint against a team (module references, connections, required fields) without creating a scenario or persisting any change. Requires team automation view permission.","input_schema":{"type":"object","properties":{"body":{"type":"object","properties":{"blueprint":{"type":"object","description":"Blueprint to validate."},"teamId":{"type":"number","description":"Team ID to validate the blueprint against.","examples":[88]}},"required":["teamId","blueprint"]}},"additionalProperties":false,"required":["body"]},"output_schema":null,"annotations":null},{"name":"fusion_teams_delete","title":null,"description":"Delete a single team by id (soft-delete; also stops its scenarios and removes its authz relationships). Requires confirm=true. Irreversible via the API.","input_schema":{"type":"object","properties":{"confirm":{"const":true,"description":"Must be set to true to acknowledge a destructive or overwriting operation."},"organizationId":{"type":"integer","description":"Organization ID the team belongs to","minimum":1},"teamId":{"type":"integer","description":"Team ID","minimum":1}},"additionalProperties":false,"required":["organizationId","teamId","confirm"]},"output_schema":null,"annotations":null},{"name":"fusion_teams_get","title":null,"description":"Get a single team by id within an organization.","input_schema":{"type":"object","properties":{"organizationId":{"type":"integer","description":"Organization ID the team belongs to","minimum":1},"teamId":{"type":"integer","description":"Team ID","minimum":1}},"additionalProperties":false,"required":["organizationId","teamId"]},"output_schema":null,"annotations":null},{"name":"fusion_teams_list","title":null,"description":"List the teams of an organization that the caller can view. Supports pagination, filtering and sorting via the \"query\" param. Filterable fields: id, name. Sortable fields: id, name. Filter operators: <= >= == != < > ~ in nin (where \"!=\" is not-equals and \"~\" is regex match) — one expression per \"property\" entry, e.g. \"teamId==88\" or \"name~report\". Only these operators are supported: no other operators, OR logic, wildcards or functions; multiple \"property\" entries are combined with AND. Sort with \"orderby\" (e.g. \"+name\" or \"-lastEdit\"). Default sort when \"orderby\" is omitted: \"+name\". Page size is set with \"limit\": minimum 1, maximum 200, default 50. Paginate whenever possible instead of stopping at the first page: keep the same \"orderby\" (or the default), then while the response \"_page.next\" is present, call again with the same query and \"start\" set to that value until no \"next\" is returned.","input_schema":{"type":"object","properties":{"organizationId":{"type":"integer","description":"Organization ID to list teams for","minimum":1},"query":{"type":"object","additionalProperties":false,"properties":{"limit":{"type":"integer","minimum":1,"maximum":200,"description":"Maximum number of items to return. Range 1–200; defaults to 50 when omitted."},"orderby":{"type":"string","description":"Sort property and direction, e.g. \"+id\" (ascending) or \"-name\" (descending)."},"property":{"type":"array","items":{"type":"string"},"description":"Filter expressions, one per entry, e.g. [\"teamId==88\", \"name~report\"]. Operators: == != (not-equals) > >= < <= ~ (regex)."},"start":{"type":"string","description":"Paging cursor. Must correspond to the \"orderby\" field and is used only when orderby is set."}}}},"additionalProperties":false,"required":["organizationId"]},"output_schema":null,"annotations":null},{"name":"fusion_users_get","title":null,"description":"Get a single user by id, scoped to an organization.","input_schema":{"type":"object","properties":{"organizationId":{"type":"integer","description":"Organization ID the user belongs to","minimum":1},"userId":{"type":"integer","description":"User ID","minimum":1}},"additionalProperties":false,"required":["organizationId","userId"]},"output_schema":null,"annotations":null},{"name":"fusion_users_get_me","title":null,"description":"Get the authorised caller's own profile plus their organization- and team-role arrays (requires view permission on organizationId).","input_schema":{"type":"object","properties":{"organizationId":{"type":"integer","description":"Organization ID the caller has view permission on","minimum":1}},"additionalProperties":false,"required":["organizationId"]},"output_schema":null,"annotations":null},{"name":"fusion_users_get_regions","title":null,"description":"Get the Fusion regions and organizations the caller can access. Not org-scoped: call this first to discover which organizationId values are valid for the other tools.","input_schema":{"type":"object","properties":{},"additionalProperties":false},"output_schema":null,"annotations":null},{"name":"fusion_users_list","title":null,"description":"List the users of an organization. Supports pagination, filtering and sorting via the \"query\" param. Filterable fields: id, name, email, lastLogin, teamId. Sortable fields: id, name, email, lastLogin. Filter operators: <= >= == != < > ~ in nin (where \"!=\" is not-equals and \"~\" is regex match) — one expression per \"property\" entry, e.g. \"teamId==88\" or \"name~report\". Only these operators are supported: no other operators, OR logic, wildcards or functions; multiple \"property\" entries are combined with AND. Sort with \"orderby\" (e.g. \"+name\" or \"-lastEdit\"). Default sort when \"orderby\" is omitted: \"+name\". Page size is set with \"limit\": minimum 1, maximum 200, default 50. Paginate whenever possible instead of stopping at the first page: keep the same \"orderby\" (or the default), then while the response \"_page.next\" is present, call again with the same query and \"start\" set to that value until no \"next\" is returned.","input_schema":{"type":"object","properties":{"organizationId":{"type":"integer","description":"Organization ID to list users for","minimum":1},"query":{"type":"object","additionalProperties":false,"properties":{"limit":{"type":"integer","minimum":1,"maximum":200,"description":"Maximum number of items to return. Range 1–200; defaults to 50 when omitted."},"orderby":{"type":"string","description":"Sort property and direction, e.g. \"+id\" (ascending) or \"-name\" (descending)."},"property":{"type":"array","items":{"type":"string"},"description":"Filter expressions, one per entry, e.g. [\"teamId==88\", \"name~report\"]. Operators: == != (not-equals) > >= < <= ~ (regex)."},"start":{"type":"string","description":"Paging cursor. Must correspond to the \"orderby\" field and is used only when orderby is set."}}}},"additionalProperties":false,"required":["organizationId"]},"output_schema":null,"annotations":null}],"tools_configurations":[],"resources":[],"resources_configurations":[],"prompts":[],"prompts_configurations":[]}],"documentation":["https://experienceleague.adobe.com/en/docs/workfront-fusion/using/set-up-and-manage-fusion/use-fusion-mcp-server/configure-fusion-mcp-server","https://experienceleague.adobe.com/en/docs/workfront-fusion/using/set-up-and-manage-fusion/use-fusion-mcp-server/fusion-mcp-server-tools"],"installation":"https://experienceleague.adobe.com/en/docs/workfront-fusion/using/set-up-and-manage-fusion/use-fusion-mcp-server/configure-fusion-mcp-server","authentication":"OAuth 2.1 with PKCE and Dynamic Client Registration, backed by Adobe IMS (user sign-in with Adobe ID). After sign-in the user selects a Fusion organization. Requests run with the user's own Fusion permissions. ","open_contribution":null,"adobe_products":["Workfront"],"support_contact":null,"fi_codes":[],"vendor":"Adobe","vendor_name":null,"surface":["End-user"],"adobe_metadata":{"adobe_service_id":"532498","developer_distribution_app_id":null,"developer_distribution_version_id":null},"created_by":"0363113C53A0541E0A4C86E7@AdobeID","created_at":"2026-10-02T08:01:51.286000Z","updated_at":"2026-10-20T08:54:39.143000Z"}],"pagination":{"total":15,"limit":15,"skip":0,"has_next":false,"has_previous":false}}