{
 "cells": [
  {
   "attachments": {
    "9ed66b13-f0c4-41cb-835e-e7b7be651a5d.svg": {
     "image/svg+xml": [
      "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgdmlld0JveD0iMCAwIDcxNSA0MTgiPgogIDxkZWZzPgogICAgPHN0eWxlPgogICAgICAuY2xzLTEgewogICAgICAgIGlzb2xhdGlvbjogaXNvbGF0ZTsKICAgICAgICBvcGFjaXR5OiAuNjsKICAgICAgfQoKICAgICAgLmNscy0xLCAuY2xzLTIsIC5jbHMtMyB7CiAgICAgICAgc3Ryb2tlLWxpbmVjYXA6IHJvdW5kOwogICAgICB9CgogICAgICAuY2xzLTEsIC5jbHMtMiwgLmNscy0zLCAuY2xzLTQgewogICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgc3Ryb2tlOiAjZmZmOwogICAgICAgIHN0cm9rZS13aWR0aDogMS41cHg7CiAgICAgIH0KCiAgICAgIC5jbHMtNSB7CiAgICAgICAgZmlsbDogIzU1NTQ1ZDsKICAgICAgfQoKICAgICAgLmNscy0zIHsKICAgICAgICBzdHJva2UtbGluZWpvaW46IHJvdW5kOwogICAgICB9CgogICAgICAuY2xzLTYgewogICAgICAgIGZpbGw6ICNmZmY7CiAgICAgIH0KCiAgICAgIC5jbHMtNyB7CiAgICAgICAgZmlsbDogIzM1MzQzYzsKICAgICAgfQoKICAgICAgLmNscy04IHsKICAgICAgICBmaWxsOiAjZTU1Mjg1OwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvZGVmcz4KICA8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMjguNy4wLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogMS4yLjAgQnVpbGQgMTM2KSAgLS0+CiAgPGc+CiAgICA8ZyBpZD0iTGF5ZXJfMSI+CiAgICAgIDxnIGlkPSJMYXllcl8xLTIiIGRhdGEtbmFtZT0iTGF5ZXJfMSI+CiAgICAgICAgPGc+CiAgICAgICAgICA8cmVjdCBjbGFzcz0iY2xzLTciIHg9IjE5IiB5PSIxNDQiIHdpZHRoPSI2OCIgaGVpZ2h0PSI2OCIgcng9IjQiIHJ5PSI0Ii8+CiAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xzLTMiIGQ9Ik0zNy4xLDE2Mi43djE1LjZNMzcuMSwxNzguM2gzMi45TTM3LjEsMTc4LjN2MTUiLz4KICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHMtNiIgZD0iTTM2LjcsMTU4LjRjLjItLjMuNy0uMy45LDBsMi4xLDMuNmMuMi4zLDAsLjgtLjQuOGgtNC4yYy0uNCwwLS42LS40LS40LS44bDIuMS0zLjZoMFoiLz4KICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHMtNiIgZD0iTTM3LjYsMTk3LjZjLS4yLjMtLjcuMy0uOSwwbC0yLjEtMy42Yy0uMi0uMywwLS44LjQtLjhoNC4yYy40LDAsLjYuNC40LjhsLTIuMSwzLjZoMFoiLz4KICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHMtNiIgZD0iTTczLjgsMTc3LjZjLjMuMi4zLjcsMCwuOWwtMy42LDIuMWMtLjMuMi0uOCwwLS44LS40di00LjJjMC0uNC40LS42LjgtLjRsMy42LDIuMWgwWiIvPgogICAgICAgICAgPHBhdGggY2xhc3M9ImNscy0zIiBkPSJNNjYuNiwxNjMuM2MtMS4yLDktMy4yLDE1LjEtMTAuMywxMS4zcy01LjEsMTAuOS0xNS44LDExLjMiLz4KICAgICAgICA8L2c+CiAgICAgICAgPHBhdGggY2xhc3M9ImNscy03IiBkPSJNNjM5LjMsMjQ1aC0xLjR2LTEwLjFoMy44YzEuMSwwLDEuOS4zLDIuNS44cy45LDEuMy45LDIuMi0uMiwxLjMtLjUsMS44LS44LjgtMS40LDFsMi4xLDQuM2gtMS41bC0xLjktNGgtMi42djRoMFpNNjM5LjMsMjM2LjF2My43aDIuNWMuNiwwLDEuMS0uMiwxLjUtLjVzLjUtLjguNS0xLjQtLjItMS0uNS0xLjNjLS40LS4zLS44LS41LTEuNS0uNWgtMi41Wk02NDkuMywyNDUuMmMtLjcsMC0xLjMtLjEtMS44LS40LS41LS4zLS45LS43LTEuMi0xLjMtLjMtLjUtLjQtMS4yLS40LTEuOXMwLTEuMy40LTEuOWMuMy0uNS43LTEsMS4yLTEuM3MxLjEtLjUsMS44LS41LDEuMi4xLDEuNy40Yy41LjMuOS43LDEuMSwxLjIuMy41LjQsMS4xLjQsMS44di41aC01Ljl2LS45aDQuNWMwLS42LS4yLTEtLjUtMS40LS4zLS4zLS44LS41LTEuNC0uNXMtLjgsMC0xLjEuM2MtLjMuMi0uNS41LS43LjgtLjIuNC0uMi44LS4yLDEuMywwLC44LjIsMS41LjYsMS45LjQuNC45LjcsMS42LjdzLjktLjEsMS4zLS4zYy4zLS4yLjUtLjUuNy0uOWgxLjJjLS4yLjctLjUsMS4zLTEuMSwxLjdzLTEuMy42LTIuMS42aDBaTTY1My40LDI0M2gxLjNjMCwuMywwLC42LjQuOC4zLjIuNi4zLDEsLjNzLjgsMCwxLjEtLjNjLjMtLjIuNC0uNC40LS43czAtLjQtLjItLjZjMC0uMS0uNC0uMy0uNy0uNGwtMS4yLS4zYy0uNi0uMS0xLjEtLjQtMS40LS43LS4zLS4zLS40LS43LS40LTEuMnMwLS44LjMtMS4xLjUtLjUuOS0uNy44LS4zLDEuMy0uMy45LDAsMS4zLjNjLjQuMi43LjQuOS43cy4zLjcuMywxLjFoLTEuM2MwLS40LDAtLjYtLjQtLjhzLS41LS4zLS45LS4zLS43LDAtMSwuM2MtLjIuMi0uMy40LS4zLjcsMCwuNS4zLjgsMSwuOWwxLjIuM2MuNi4xLDEsLjMsMS4zLjZzLjQuNy40LDEuMiwwLC44LS40LDEuMWMtLjIuMy0uNi42LTEsLjctLjQuMi0uOS4zLTEuNC4zLS44LDAtMS40LS4yLTEuOS0uNi0uNS0uNC0uNy0uOS0uNy0xLjZ2LjNaTTY2NSwyMzguMmgxLjN2Ni44aC0xLjJ2LTFjLS4zLjQtLjYuNi0xLjEuOS0uNC4yLS45LjMtMS40LjMtLjgsMC0xLjQtLjItMS44LS43LS40LS41LS42LTEuMi0uNi0ydi00LjNoMS4zdjMuOGMwLC43LDAsMS4zLjQsMS42LjMuMy43LjUsMS4yLjVzMS4xLS4yLDEuNC0uNmMuMy0uNC41LS45LjUtMS43di0zLjZoMFpNNjY5LjUsMjQ1aC0xLjN2LTEwLjNoMS4zdjEwLjNaTTY3MC43LDIzOC4yaDR2MS4xaC00di0xLjFaTTY3My40LDI0NWgtMS4zdi05aDEuM3Y5Wk02NzUuNCwyNDNoMS4zYzAsLjMsMCwuNi40LjguMy4yLjYuMywxLC4zcy44LDAsMS4xLS4zYy4zLS4yLjQtLjQuNC0uN3MwLS40LS4yLS42YzAtLjEtLjQtLjMtLjctLjRsLTEuMi0uM2MtLjYtLjEtMS4xLS40LTEuNC0uNy0uMy0uMy0uNC0uNy0uNC0xLjJzMC0uOC4zLTEuMS41LS41LjktLjcuOC0uMywxLjMtLjMuOSwwLDEuMy4zYy40LjIuNy40LjkuN3MuMy43LjMsMS4xaC0xLjNjMC0uNCwwLS42LS4zLS44cy0uNS0uMy0uOS0uMy0uNywwLTEsLjMtLjMuNC0uMy43YzAsLjUuMy44LDEsLjlsMS4yLjNjLjYuMSwxLC4zLDEuMy42cy40LjcuNCwxLjIsMCwuOC0uMywxLjEtLjYuNi0xLC43Yy0uNC4yLS45LjMtMS40LjMtLjgsMC0xLjQtLjItMS45LS42cy0uNy0uOS0uNy0xLjZ2LjNaIi8+CiAgICAgICAgPHBhdGggY2xhc3M9ImNscy01IiBkPSJNNjE2LjUsMjY5aC0xdi0xMGgxbDMuNyw4LjgsMy43LTguOGgxdjEwaC0xdi04bC0zLjMsOGgtMWwtMy4zLTcuOXY3LjloLjJaTTYyOS45LDI2OS4yYy0uNywwLTEuMi0uMS0xLjctLjRzLS45LS43LTEuMi0xLjItLjQtMS4yLS40LTEuOSwwLTEuMy40LTEuOGMuMy0uNS43LTEsMS4xLTEuMy41LS4zLDEtLjUsMS43LS41czEuMi4xLDEuNi40Yy41LjMuOC42LDEuMSwxLjFzLjQsMSwuNCwxLjd2LjVoLTUuOHYtLjdoNC44YzAtLjctLjItMS4yLS42LTEuNi0uNC0uNC0uOS0uNi0xLjUtLjZzLS45LjEtMS4yLjNjLS4zLjItLjYuNS0uOC45cy0uMy45LS4zLDEuNGMwLC45LjIsMS42LjYsMi4xLjQuNSwxLC43LDEuOC43czEtLjEsMS40LS40Yy40LS4yLjYtLjYuNy0xaC45Yy0uMi43LS41LDEuMy0xLDEuNi0uNS40LTEuMi42LTIsLjZoMFpNNjM2LjMsMjY5LjJjLS43LDAtMS4zLS4yLTEuNy0uNnMtLjYtLjktLjYtMS40LjItMS4xLjctMS41LDEuMS0uNiwxLjktLjdsMi4yLS4ydi0uMmMwLS40LDAtLjgtLjItMS4xLS4yLS4zLS40LS40LS42LS41LS4zLS4xLS42LS4yLS45LS4yLS42LDAtMS4xLjEtMS40LjQtLjMuMy0uNS42LS41LDEuMWgtLjljMC0uNSwwLS45LjMtMS4yLjItLjMuNi0uNiwxLS44LjQtLjIuOS0uMywxLjUtLjNzMSwwLDEuNC4zYy40LjIuNy41LDEsLjguMi40LjQuOS40LDEuNXY0LjRoLS44di0xLjJjLS4zLjQtLjcuOC0xLjEsMS0uNC4yLS45LjQtMS41LjRoLS4yWk02MzYuNSwyNjguNGMuNywwLDEuMy0uMiwxLjctLjdzLjYtMSwuNi0xLjh2LS40bC0yLC4yYy0uNiwwLTEuMS4yLTEuNC41LS4zLjMtLjQuNi0uNCwxczAsLjcuNC45Yy4zLjIuNy4zLDEuMS4zaDBaTTY0MS4xLDI2Ny4xaC45YzAsLjQsMCwuNy40LjkuMy4yLjcuMywxLjEuM3MuOS0uMSwxLjItLjNjLjMtLjIuNC0uNS40LS45czAtLjUtLjItLjctLjQtLjMtLjgtLjRsLTEuMi0uM2MtLjYtLjEtMS0uNC0xLjMtLjctLjMtLjMtLjQtLjctLjQtMS4xczAtLjcuMy0xLC41LS41LjktLjcuOC0uMiwxLjMtLjIuOSwwLDEuMi4zYy40LjIuNi40LjguNy4yLjMuMy43LjMsMS4xaC0uOWMwLS40LDAtLjctLjQtLjktLjMtLjItLjYtLjMtMS4xLS4zcy0uOCwwLTEuMS4zYy0uMy4yLS40LjUtLjQuOCwwLC41LjQuOSwxLjEsMS4xbDEuMi4zYy42LjEsMSwuNCwxLjMuNy4zLjMuNC43LjQsMS4yczAsLjgtLjMsMS4xYy0uMi4zLS41LjUtLjkuN3MtLjguMi0xLjMuMmMtLjgsMC0xLjQtLjItMS44LS42LS40LS40LS43LS45LS43LTEuNWgwWk02NTIuNSwyNjIuMmgxdjYuOGgtLjh2LTEuMWMtLjMuNC0uNi43LTEuMSwxLS40LjItLjkuNC0xLjQuNC0uOCwwLTEuNC0uMy0xLjgtLjgtLjQtLjUtLjYtMS4yLS42LTJ2LTQuMmgxdjMuOWMwLC44LjIsMS40LjUsMS43LjMuMy44LjUsMS4zLjVzMS4yLS4yLDEuNS0uNmMuNC0uNC41LTEsLjUtMS44di0zLjhaTTY1OSwyNjIuMXYuOWgtLjVjLS42LDAtMS4xLjItMS41LjZzLS41LjktLjUsMS42djMuOWgtMXYtNi44aC45djEuM2gwYzAtLjQuMy0uOC43LTEuMS40LS4zLjgtLjQsMS4zLS40cy4yLDAsLjMsMGguM1pNNjYyLjksMjY5LjJjLS43LDAtMS4yLS4xLTEuNy0uNHMtLjktLjctMS4yLTEuMi0uNC0xLjItLjQtMS45LDAtMS4zLjQtMS44Yy4zLS41LjctMSwxLjEtMS4zLjUtLjMsMS0uNSwxLjctLjVzMS4yLjEsMS42LjRjLjUuMy44LjYsMS4xLDEuMXMuNCwxLC40LDEuN3YuNWgtNS44di0uN2g0LjhjMC0uNy0uMi0xLjItLjYtMS42LS40LS40LS45LS42LTEuNS0uNnMtLjkuMS0xLjIuM2MtLjMuMi0uNi41LS44LjlzLS4zLjktLjMsMS40YzAsLjkuMiwxLjYuNiwyLjEuNC41LDEsLjcsMS44LjdzMS0uMSwxLjQtLjQuNi0uNi43LTFoLjljLS4yLjctLjUsMS4zLTEsMS42LS41LjQtMS4yLjYtMiwuNmgwWk02NjguNCwyNjloLTF2LTYuOGguOHYxLjNjMCwwLDAsMCwwLDAsMC0uNC40LS44LjgtMSwuNC0uMy44LS40LDEuNC0uNHMxLjEuMiwxLjUuNS43LjguOCwxLjNoLS4yYzAtLjYuMy0xLC44LTEuMy40LS4zLjktLjUsMS42LS41czEuMy4yLDEuOC43LjcsMS4xLjcsMS44djQuNGgtLjl2LTQuMmMwLS42LDAtMS0uNC0xLjQtLjMtLjMtLjctLjUtMS4yLS41cy0uNywwLTEsLjNjLS4zLjItLjUuNC0uNi43LDAsLjMtLjIuNi0uMiwxdjQuMmgtMXYtNC4zYzAtLjYtLjItMS0uNS0xLjNzLS43LS41LTEuMi0uNS0uNywwLTEsLjNjLS4zLjItLjUuNC0uNi43LDAsLjMtLjIuNi0uMi45djQuMmgtLjJaTTY4Mi4xLDI2OS4yYy0uNywwLTEuMi0uMS0xLjctLjRzLS45LS43LTEuMi0xLjItLjQtMS4yLS40LTEuOSwwLTEuMy40LTEuOGMuMy0uNS43LTEsMS4xLTEuMy41LS4zLDEtLjUsMS43LS41czEuMi4xLDEuNi40Yy41LjMuOC42LDEuMSwxLjFzLjQsMSwuNCwxLjd2LjVoLTUuOHYtLjdoNC44YzAtLjctLjItMS4yLS42LTEuNi0uNC0uNC0uOS0uNi0xLjUtLjZzLS45LjEtMS4yLjNjLS4zLjItLjYuNS0uOC45cy0uMy45LS4zLDEuNGMwLC45LjIsMS42LjYsMi4xLjQuNSwxLC43LDEuOC43czEtLjEsMS40LS40Yy40LS4yLjYtLjYuNy0xaC45Yy0uMi43LS41LDEuMy0xLDEuNi0uNS40LTEuMi42LTIsLjZoMFpNNjg3LjYsMjY5aC0xdi02LjhoLjh2MS4yYy40LS40LjctLjgsMS4xLTEsLjQtLjIuOS0uNCwxLjQtLjQuOSwwLDEuNi4zLDIsLjhzLjYsMS4yLjYsMnY0LjFoLTF2LTMuOWMwLS44LS4yLTEuMy0uNS0xLjctLjMtLjMtLjgtLjUtMS4zLS41cy0xLjIuMi0xLjYuN2MtLjQuNS0uNiwxLjEtLjYsMS44djMuN1pNNjkzLjcsMjYyLjJoMy43di44aC0zLjd2LS44Wk02OTYsMjY5aC0xdi04LjloMXY4LjlaTTY5OC4xLDI2Ny4xaC45YzAsLjQsMCwuNy40LjkuMy4yLjcuMywxLjEuM3MuOS0uMSwxLjItLjNjLjMtLjIuNC0uNS40LS45czAtLjUtLjItLjctLjQtLjMtLjgtLjRsLTEuMi0uM2MtLjYtLjEtMS0uNC0xLjMtLjctLjMtLjMtLjQtLjctLjQtMS4xczAtLjcuMy0xLC41LS41LjktLjcuOC0uMiwxLjMtLjIuOSwwLDEuMi4zYy40LjIuNi40LjguNy4yLjMuMy43LjMsMS4xaC0uOWMwLS40LDAtLjctLjQtLjktLjMtLjItLjYtLjMtMS4xLS4zcy0uOCwwLTEuMS4zYy0uMy4yLS40LjUtLjQuOCwwLC41LjQuOSwxLjEsMS4xbDEuMi4zYy42LjEsMSwuNCwxLjMuNy4zLjMuNC43LjQsMS4yczAsLjgtLjMsMS4xYy0uMi4zLS41LjUtLjkuN3MtLjguMi0xLjMuMmMtLjgsMC0xLjQtLjItMS44LS42LS40LS40LS43LS45LS43LTEuNWgwWiIvPgogICAgICAgIDxnPgogICAgICAgICAgPHJlY3QgY2xhc3M9ImNscy03IiB4PSIzMjEiIHk9IjcwIiB3aWR0aD0iNjgiIGhlaWdodD0iNjgiIHJ4PSI0IiByeT0iNCIvPgogICAgICAgICAgPHBhdGggY2xhc3M9ImNscy00IiBkPSJNMzYwLjMsMTA0LjFjMCw0LS43LDcuNi0xLjcsMTAuMi0uNSwxLjMtMS4xLDIuMy0xLjgsMi45LS42LjctMS4yLjktMS44LjlzLTEuMi0uMy0xLjgtLjljLS42LS43LTEuMi0xLjctMS44LTIuOS0xLTIuNi0xLjctNi4yLTEuNy0xMC4ycy43LTcuNiwxLjctMTAuMmMuNS0xLjMsMS4xLTIuMywxLjgtMi45LjYtLjcsMS4yLS45LDEuOC0uOXMxLjIuMywxLjguOWMuNi43LDEuMiwxLjcsMS44LDIuOSwxLDIuNiwxLjcsNi4yLDEuNywxMC4yWiIvPgogICAgICAgICAgPHBhdGggY2xhc3M9ImNscy00IiBkPSJNMzU3LjYsOTkuNWMzLjUsMiw2LjMsNC40LDgsNi42LjksMS4xLDEuNCwyLjEsMS43LDMsLjMuOS4yLDEuNSwwLDItLjMuNS0uOC45LTEuNywxLjEtLjkuMi0yLjEuMi0zLjQsMC0yLjgtLjQtNi4yLTEuNi05LjctMy42cy02LjMtNC40LTgtNi42Yy0uOS0xLjEtMS40LTIuMS0xLjctMy0uMy0uOS0uMi0xLjUsMC0yLC4zLS41LjgtLjksMS43LTEuMS45LS4yLDIuMS0uMiwzLjQsMCwyLjguNCw2LjIsMS42LDkuNywzLjZaIi8+CiAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xzLTQiIGQ9Ik0zNTIuNCw5OS41Yy0zLjUsMi02LjMsNC40LTgsNi42LS45LDEuMS0xLjQsMi4xLTEuNywzLS4zLjktLjIsMS41LDAsMiwuMy41LjguOSwxLjcsMS4xLjkuMiwyLjEuMiwzLjQsMCwyLjgtLjQsNi4yLTEuNiw5LjctMy42czYuMy00LjQsOC02LjZjLjktMS4xLDEuNC0yLjEsMS43LTMsLjMtLjkuMi0xLjUsMC0yLS4zLS41LS44LS45LTEuNy0xLjEtLjktLjItMi4xLS4yLTMuNCwwLTIuOC40LTYuMiwxLjYtOS43LDMuNloiLz4KICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHMtNCIgeD0iMzM1LjQiIHk9Ijg0LjMiIHdpZHRoPSIzOS4zIiBoZWlnaHQ9IjM5LjMiIHJ4PSIzLjIiIHJ5PSIzLjIiLz4KICAgICAgICAgIDxsaW5lIGNsYXNzPSJjbHMtMiIgeDE9IjM0Mi45IiB5MT0iODQiIHgyPSIzNDIuOSIgeTI9Ijc4LjciLz4KICAgICAgICAgIDxsaW5lIGNsYXNzPSJjbHMtMiIgeDE9IjM2NS42IiB5MT0iODQiIHgyPSIzNjUuNiIgeTI9Ijc4LjciLz4KICAgICAgICAgIDxsaW5lIGNsYXNzPSJjbHMtMiIgeDE9IjM0Mi45IiB5MT0iMTI5LjMiIHgyPSIzNDIuOSIgeTI9IjEyNCIvPgogICAgICAgICAgPGxpbmUgY2xhc3M9ImNscy0yIiB4MT0iMzY1LjYiIHkxPSIxMjkuMyIgeDI9IjM2NS42IiB5Mj0iMTI0Ii8+CiAgICAgICAgICA8bGluZSBjbGFzcz0iY2xzLTIiIHgxPSIzMjkuNyIgeTE9IjkxLjkiIHgyPSIzMzUiIHkyPSI5MS45Ii8+CiAgICAgICAgICA8bGluZSBjbGFzcz0iY2xzLTIiIHgxPSIzMjkuNyIgeTE9IjExNC42IiB4Mj0iMzM1IiB5Mj0iMTE0LjYiLz4KICAgICAgICAgIDxsaW5lIGNsYXNzPSJjbHMtMiIgeDE9IjM3NSIgeTE9IjkxLjkiIHgyPSIzODAuMyIgeTI9IjkxLjkiLz4KICAgICAgICAgIDxsaW5lIGNsYXNzPSJjbHMtMiIgeDE9IjM3NSIgeTE9IjExNC42IiB4Mj0iMzgwLjMiIHkyPSIxMTQuNiIvPgogICAgICAgIDwvZz4KICAgICAgICA8Zz4KICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHMtOCIgeD0iMzIxLjMiIHk9IjI4MiIgd2lkdGg9IjY4IiBoZWlnaHQ9IjY4IiByeD0iNCIgcnk9IjQiLz4KICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHMtNiIgZD0iTTM4MC42LDMxMS4yYy0xLjEtNS43LTQuMS0xMC45LTguNS0xNC43aDBjLTIuNS0yLjItNS4zLTMuOS04LjQtNC45LTUuNS0xLjktMTEuNC0xLjktMTYuOSwwaDBjLTMuMSwxLjEtNiwyLjctOC41LDQuOS0yLjIsMS45LTQsNC4xLTUuNSw2LjYtMS40LDIuNS0yLjUsNS4yLTMsOC4xLS42LDMuMi0uNiw2LjYsMCw5LjguNSwyLjgsMS42LDUuNiwzLDgsMS40LDIuNSwzLjMsNC43LDUuNSw2LjZoMGMyLjUsMi4yLDUuNCwzLjgsOC41LDQuOSw1LjUsMS45LDExLjUsMS45LDE3LDBoMGMzLjEtMS4xLDYtMi44LDguNC00LjksMi4yLTEuOSw0LTQuMSw1LjUtNi42LDEuNC0yLjUsMi41LTUuMiwzLThoMGMuNi0zLjMuNi02LjYsMC05LjhoLS4xWk0zNzcuMSwzMTEuM2wtNS43LDMuMy02LjktNHYtNi42bDYuMywzLjZoLjFsNS4xLDIuOSwxLjIuN2gtLjFaTTM0MC4xLDMwNi41di03LjJsNS43LDMuM3Y4bC01LjcsMy4zdi03LjNoMFpNMzYzLjgsMzI5bC02LjMtMy42LDYuMy0zLjZoMHYtLjJjLjEtLjIuMi0uNC4yLS42czAtLjUtLjItLjdoMHYtLjJoMGwtNy41LTQuNHYtNi42bDYuMywzLjZoLjFsMS44LDEsNS42LDMuM3YxNmwtNi4zLTMuNmgwdi0uNFpNMzU1LjcsMjk4LjNsNi4zLTMuNnYxNC42bC01LjUtMy4yLS44LS41aDBjLS4yLS4xLS40LS4yLS42LS4xLS4yLDAtLjQsMC0uNi4yLS4yLjEtLjMuMy0uNC40LS4xLjItLjIuNC0uMi42djguN2wtNS43LDMuM3YtNy4yaDB2LTguN2w3LjUtNC4zaDB2LS4yWk0zMzMuMiwzMjAuOGw2LjMtMy42LDUuMS0yLjksMS4zLS43djcuNGgwYzAsLjIsMCwuNC4yLjYuMS4yLjMuMy40LjRoLjdsNy41LTQuMyw1LjcsMy4zLTYuMywzLjZoLS4xbC03LjQsNC4zLTMuNS0yLTQtMi4zaDBsLTYuMy0zLjdoLjRaTTM1NC43LDMzMy43aC0uMWwtMi42LDEuNS0zLjYsMi4xdi02LjZsMy42LTIuMSwzLjMtMS45LDUuNywzLjMtMi4yLDEuMy00LDIuM2gwWk0zNzAuNiwyOTguM2MzLjMsMi44LDUuNyw2LjYsNy4xLDEwLjdsLTUuNy0zLjNoMGwtLjUtLjMtNy00LjF2LTYuOWMyLjIsMSw0LjMsMi4yLDYuMSwzLjhoMFpNMzQ3LjQsMjkzLjhoMGM0LjEtMS40LDguNS0xLjcsMTIuOC0uN2wtNS42LDMuMmgtLjFsLTcuNCw0LjMtNi0zLjVjMS45LTEuNCw0LjEtMi42LDYuNC0zLjRoMFpNMzMyLjEsMzExLjVjLjUtMi42LDEuNC01LDIuNy03LjMuOS0xLjUsMS45LTIuOSwzLTQuMXYxNS4ybC02LDMuNWMtLjMtMi40LS4yLTQuOS4zLTcuMmgwWk0zMzkuNywzMzMuOGMtMi0xLjctMy43LTMuNy01LTYtLjktMS41LTEuNi0zLjEtMi4xLTQuN2w1LjYsMy4yaDBsNy40LDQuM3Y3Yy0yLjItMS00LjMtMi4yLTYuMS0zLjhoLjJaTTM2My4xLDMzOC4zYy0uMSwwLS4zLDAtLjQuMS00LjEsMS40LTguNCwxLjYtMTIuNi43bDUuNy0zLjNoMGw3LjUtNC40LDYsMy41Yy0xLjksMS40LTQsMi42LTYuMiwzLjRoMFpNMzc4LjMsMzIwLjRoMGMtLjUsMi43LTEuNCw1LjEtMi43LDcuNC0uOSwxLjUtMS45LDIuOS0zLjEsNC4xdi0xNS4ybDIuNy0xLjUsMy40LTEuOWMuMS45LjIsMS45LjIsMi44LDAsMS41LS4xLDIuOS0uNCw0LjRoLS4xWiIvPgogICAgICAgIDwvZz4KICAgICAgICA8cGF0aCBjbGFzcz0iY2xzLTciIGQ9Ik0zMTYsMzcxLjl2MTAuMWgtMS40di0xMC4xaDEuNFpNMzE4LjYsMzc3LjVoLTN2LTEuMmgyLjljLjYsMCwxLS4xLDEuMy0uNHMuNS0uNy41LTEuMi0uMi0uOS0uNS0xLjJjLS4zLS4zLS44LS40LTEuNC0uNGgtM3YtMS4yaDMuMWMxLDAsMS44LjIsMi4zLjcuNi41LjksMS4xLjksMnMtLjIsMS4xLS41LDEuNmMtLjMuNC0uNy43LTEuMy45di0uMmMuNy4yLDEuMS40LDEuNS45LjMuNC41LjkuNSwxLjZzLS4xLDEtLjQsMS41Yy0uMy40LS42LjctMS4xLjktLjUuMi0xLjEuMy0xLjcuM2gtMy4ydi0xLjJoMy4yYy42LDAsMS0uMSwxLjQtLjQuMy0uMy41LS43LjUtMS4ycy0uMi0uOS0uNS0xLjJjLS4zLS4zLS44LS40LTEuMy0uNGwtLjItLjJaTTMyMi45LDM3OC42YzAtLjcuMi0xLjMuNS0xLjkuMy0uNS43LTEsMS4zLTEuMy41LS4zLDEuMi0uNSwxLjgtLjVzMS4zLjIsMS44LjUsMSwuNywxLjMsMS4zYy4zLjUuNSwxLjIuNSwxLjlzLS4yLDEuMy0uNSwxLjljLS4zLjUtLjcsMS0xLjMsMS4zLS41LjMtMS4xLjUtMS44LjVzLTEuMy0uMi0xLjgtLjUtMS0uNy0xLjMtMS4zYy0uMy0uNS0uNS0xLjItLjUtMS45Wk0zMjQuMiwzNzguNmMwLC41LDAsLjkuMywxLjMuMi40LjUuNi44LjkuMy4yLjcuMywxLjIuM3MuOC0uMSwxLjItLjNjLjMtLjIuNi0uNS44LS45LjItLjQuMy0uOC4zLTEuM3MwLS45LS4zLTEuM2MtLjItLjQtLjQtLjYtLjgtLjktLjMtLjItLjctLjMtMS4yLS4zcy0uOC4xLTEuMi4zYy0uMy4yLS42LjUtLjguOS0uMi40LS4zLjgtLjMsMS4zWk0zMzYsMzc1LjJoMS4zdjYuOGgtMS4ydi0xYy0uMy40LS42LjYtMS4xLjktLjQuMi0uOS4zLTEuNC4zLS44LDAtMS40LS4yLTEuOC0uN3MtLjYtMS4yLS42LTJ2LTQuM2gxLjN2My44YzAsLjcuMSwxLjMuNCwxLjYuMy4zLjcuNSwxLjIuNXMxLjEtLjIsMS40LS42LjUtLjkuNS0xLjd2LTMuNmgwWk0zNDAuNiwzODJoLTEuM3YtMTAuM2gxLjN2MTAuM1pNMzQ1LjMsMzgyLjJjLS43LDAtMS4yLS4xLTEuNy0uNHMtLjgtLjctMS4xLTEuM2MtLjMtLjUtLjQtMS4yLS40LTEuOHMuMS0xLjMuNC0xLjkuNi0xLDEuMS0xLjMsMS4xLS41LDEuNy0uNSwxLC4xLDEuNC4zYy40LjIuNy41LDEsMXYtNC42aDEuM3YxMC4zaC0xLjJ2LTEuMmMtLjMuNS0uNy44LTEuMSwxcy0uOS40LTEuNS40aC4xWk0zNDUuNSwzODFjLjQsMCwuOC0uMSwxLjEtLjMuMy0uMi42LS41LjgtLjkuMi0uNC4zLS44LjMtMS4zczAtLjktLjMtMS4yYy0uMi0uNC0uNC0uNi0uOC0uOS0uMy0uMi0uNy0uMy0xLjEtLjNzLS44LjEtMS4xLjNjLS4zLjItLjYuNS0uNy45LS4yLjQtLjMuOC0uMywxLjJzMCwuOS4zLDEuM2MuMi40LjQuNi43LjkuMy4yLjcuMywxLjEuM1pNMzUzLjksMzgyLjJjLS43LDAtMS4zLS4xLTEuOC0uNHMtLjktLjctMS4yLTEuM2MtLjMtLjUtLjQtMS4yLS40LTEuOXMuMS0xLjMuNC0xLjljLjMtLjUuNy0xLDEuMi0xLjNzMS4xLS41LDEuOC0uNSwxLjIuMSwxLjcuNC45LjcsMS4xLDEuMmMuMy41LjQsMS4xLjQsMS44di41aC01Ljl2LS45aDQuNWMwLS42LS4yLTEtLjUtMS40cy0uOC0uNS0xLjQtLjUtLjgsMC0xLjEuM2MtLjMuMi0uNS41LS43LjgtLjIuNC0uMi44LS4yLDEuMywwLC44LjIsMS41LjYsMS45cy45LjcsMS42LjcuOS0uMSwxLjMtLjNjLjMtLjIuNS0uNS43LS45aDEuMmMtLjIuNy0uNSwxLjMtMS4xLDEuNy0uNi40LTEuMy42LTIuMS42aC0uMVpNMzYyLjQsMzc1LjF2MS4yaC0uNmMtLjYsMC0xLjEuMi0xLjUuNXMtLjUuOS0uNSwxLjV2My42aC0xLjN2LTYuOGgxLjJ2MS40Yy4xLDAsMCwwLDAsMCwwLS40LjMtLjguNy0xLjEuNC0uMy44LS40LDEuMy0uNHMuMiwwLC4zLDBoLjRaTTM3Ni44LDM3Ni45YzAsMS0uMiwxLjktLjYsMi43LS40LjgtMSwxLjQtMS43LDEuOHMtMS42LjctMi41LjctMS44LS4yLTIuNS0uN2MtLjctLjQtMS4zLTEuMS0xLjctMS44LS40LS44LS42LTEuNy0uNi0yLjdzLjItMS45LjYtMi43Yy40LS44LDEtMS40LDEuNy0xLjhzMS42LS43LDIuNS0uNywxLjguMiwyLjUuN2MuNy40LDEuMywxLjEsMS43LDEuOC40LjguNiwxLjcuNiwyLjdaTTM3NS40LDM3Ni45YzAtLjgtLjEtMS41LS40LTIuMXMtLjctMS0xLjItMS40Yy0uNS0uMy0xLjEtLjUtMS44LS41cy0xLjMuMi0xLjguNS0uOS44LTEuMiwxLjRjLS4zLjYtLjQsMS4zLS40LDIuMXMuMSwxLjUuNCwyLjEuNywxLDEuMiwxLjRjLjUuMywxLjEuNSwxLjguNXMxLjMtLjIsMS44LS41LjktLjgsMS4yLTEuNGMuMy0uNi40LTEuMy40LTJoMFpNMzc4LjQsMzg1LjF2LTkuOWgxLjJ2MS4yYy4zLS41LjctLjgsMS4xLTEuMS40LS4yLjktLjQsMS41LS40czEuMi4yLDEuNy41LjguNywxLjEsMS4zYy4zLjUuNCwxLjEuNCwxLjhzLS4xLDEuMy0uNCwxLjljLS4yLjYtLjYsMS0xLjEsMS4zcy0xLC41LTEuNy41LTEtLjEtMS41LS4zYy0uNC0uMi0uOC0uNS0xLTF2NC4yaC0xLjNaTTM3OS43LDM3OC42YzAsLjUsMCwuOS4zLDEuMi4yLjQuNC42LjcuOS4zLjIuNy4zLDEuMi4zcy44LS4xLDEuMS0uM2MuMy0uMi42LS41LjctLjkuMi0uNC4zLS44LjMtMS4yczAtLjktLjMtMS4zYy0uMi0uNC0uNC0uNi0uNy0uOS0uMy0uMi0uNy0uMy0xLjEtLjNzLS44LjEtMS4yLjNjLS4zLjItLjYuNS0uNy45LS4yLjQtLjMuOC0uMywxLjNaTTM4OC44LDM4Mi4yYy0uNywwLTEuMy0uMi0xLjctLjYtLjQtLjQtLjYtLjktLjYtMS41cy4yLTEuMS43LTEuNWMuNC0uNCwxLjEtLjYsMS45LS43bDIuMi0uMnYtLjJjMC0uNCwwLS43LS4yLS45LS4xLS4yLS4zLS40LS42LS41LS4yLS4xLS41LS4yLS44LS4yLS42LDAtMSwuMS0xLjMuNC0uMy4yLS40LjUtLjQsMWgtMS4xYzAtLjUuMS0uOS40LTEuMi4yLS40LjYtLjYsMS0uOC40LS4yLDEtLjMsMS42LS4zczEuMS4xLDEuNS4zYy40LjIuOC41LDEsLjlzLjQuOS40LDEuNXY0LjNoLTEuMXYtMS4xYy0uMy40LS42LjctMS4xLjktLjQuMi0uOS4zLTEuNS4zaC0uM1pNMzg5LjEsMzgxLjFjLjYsMCwxLjEtLjIsMS41LS42cy41LS45LjUtMS41di0uNGgtMS44Yy0uNi4yLTEsLjMtMS4zLjVzLS40LjUtLjQuOC4xLjYuNC44Yy4zLjIuNi4zLDEsLjNoMFpNMzk1LjYsMzgyaC0xLjN2LTEwLjNoMS4zdjEwLjNaIi8+CiAgICAgICAgPHBhdGggY2xhc3M9ImNscy01IiBkPSJNMzEwLjIsNDAxYzAsMS0uMiwxLjktLjYsMi43LS40LjgtMSwxLjQtMS43LDEuOHMtMS41LjctMi41LjctMS44LS4yLTIuNS0uN2MtLjctLjQtMS4zLTEuMS0xLjctMS44cy0uNi0xLjctLjYtMi43LjItMS45LjYtMi43Yy40LS44LDEtMS40LDEuNy0xLjhzMS41LS43LDIuNS0uNywxLjguMiwyLjUuN2MuNy40LDEuMywxLDEuNywxLjguNC44LjYsMS43LjYsMi43Wk0zMDkuMiw0MDFjMC0uOC0uMi0xLjYtLjUtMi4ycy0uOC0xLjEtMS4zLTEuNWMtLjYtLjQtMS4yLS41LTEuOS0uNXMtMS40LjItMS45LjUtMSwuOC0xLjMsMS41Yy0uMy42LS41LDEuNC0uNSwyLjJzLjIsMS42LjUsMi4yLjgsMS4xLDEuMywxLjVjLjYuNCwxLjIuNSwxLjkuNXMxLjQtLjIsMS45LS41Yy42LS40LDEtLjgsMS4zLTEuNS4zLS42LjUtMS40LjUtMi4yWk0zMDkuMiw0MDYuNmwtMy0zLjQuNy0uNiwzLjEsMy40LS43LjZoLS4xWk0zMTEuNyw0MDIuOHYtLjloNC4xdi45aC00LjFaTTMyMiw0MDYuMmMtLjksMC0xLjgtLjItMi41LS42cy0xLjItMS0xLjctMS44Yy0uNC0uOC0uNi0xLjctLjYtMi43cy4yLTEuOS42LTIuN2MuNC0uOCwxLTEuNCwxLjctMS44czEuNS0uNywyLjUtLjcsMS40LjEsMiwuNCwxLjEuNywxLjUsMS4xYy40LjUuNywxLjEuOCwxLjdoLTEuMWMtLjItLjctLjYtMS4zLTEuMi0xLjctLjYtLjQtMS4yLS42LTItLjZzLTEuNC4yLTEuOS41LTEsLjgtMS4zLDEuNWMtLjMuNi0uNCwxLjQtLjQsMi4ycy4yLDEuNi41LDIuMi43LDEuMSwxLjMsMS41Yy42LjMsMS4yLjUsMS45LjVzMS41LS4yLDIuMS0uNiwxLS45LDEuMi0xLjZoMS4xYy0uMS42LS40LDEuMi0uOSwxLjctLjQuNS0uOS44LTEuNSwxLjEtLjYuMy0xLjMuNC0yLC40aC0uMVpNMzMwLjUsMzk2LjR2OS42aC0xdi05LjZoMVpNMzI2LjUsMzk2Ljl2LS45aDcuMnYuOWgtNy4yWk0zMzYsNDA2aC0xdi0xMGgzLjdjMSwwLDEuOC4zLDIuNC44cy45LDEuMi45LDIuMS0uMiwxLjMtLjUsMS44Yy0uNC41LS45LjgtMS41LDFsMi4xLDQuM2gtMS4xbC0yLTQuMmgtMi45djQuMmgtLjFaTTMzNiwzOTYuOXY0aDIuOGMuNywwLDEuMi0uMiwxLjYtLjUuNC0uNC42LS45LjYtMS41cy0uMi0xLjItLjYtMS41LS45LS41LTEuNi0uNWgtMi44Wk0zNDUsMzk2djEwaC0xdi0xMGgxWk0zNDQuMSw0MDZ2LS45aDUuNHYuOWgtNS40Wk0zNTQuMyw0MDIuNmMwLS43LjEtMS4zLjQtMS44cy43LTEsMS4yLTEuMywxLjEtLjUsMS44LS41LDEuMi4yLDEuOC41Yy41LjMuOS43LDEuMiwxLjMuMy41LjQsMS4xLjQsMS44cy0uMSwxLjMtLjQsMS44LS43LDEtMS4yLDEuMy0xLjEuNS0xLjguNS0xLjItLjItMS44LS41Yy0uNS0uMy0uOS0uNy0xLjItMS4zLS4zLS41LS40LTEuMi0uNC0xLjhaTTM1NS4zLDQwMi42YzAsLjUuMSwxLC4zLDEuNC4yLjQuNS43LjksMSwuNC4yLjguMywxLjMuM3MuOS0uMSwxLjMtLjNjLjQtLjIuNy0uNi45LTEsLjItLjQuMy0uOS4zLTEuNHMtLjEtMS0uMy0xLjRjLS4yLS40LS41LS43LS45LTEtLjQtLjItLjgtLjQtMS4zLS40cy0uOS4xLTEuMy40Yy0uNC4yLS43LjYtLjksMS0uMi40LS4zLjktLjMsMS40Wk0zNjIuNyw0MDl2LTkuN2guOHYxLjRjLjMtLjUuNy0uOSwxLjEtMS4yLjUtLjMsMS0uNCwxLjUtLjRzMS4yLjIsMS43LjUuOC43LDEuMSwxLjNjLjMuNS40LDEuMS40LDEuOHMtLjEsMS4zLS40LDEuOGMtLjIuNS0uNiwxLTEuMSwxLjNzLTEsLjUtMS43LjUtMS4xLS4xLTEuNS0uNC0uOC0uNi0xLTEuMXY0LjNoLTEsLjFaTTM2My43LDQwMi42YzAsLjUsMCwxLC4zLDEuNC4yLjQuNS43LjgsMSwuNC4yLjguMywxLjMuM3MuOS0uMSwxLjMtLjNjLjMtLjIuNi0uNi44LTEsLjItLjQuMy0uOS4zLTEuNHMwLTEtLjMtMS40Yy0uMi0uNC0uNC0uNy0uOC0xLS4zLS4yLS44LS4zLTEuMy0uM3MtLjkuMS0xLjMuM2MtLjMuMi0uNi41LS44LDEtLjIuNC0uMy45LS4zLDEuNFpNMzcwLjEsMzk5LjJoMy43di44aC0zLjd2LS44Wk0zNzIuNCw0MDZoLTF2LTguOWgxdjguOVpNMzc1LDQwNnYtNi44aDF2Ni44aC0xWk0zNzUuNSwzOTcuNGMtLjIsMC0uNCwwLS41LS4ycy0uMi0uMy0uMi0uNSwwLS40LjItLjVjLjEtLjEuMy0uMi41LS4ycy40LDAsLjUuMmMuMS4xLjIuMy4yLjVzMCwuNC0uMi41Yy0uMS4xLS4zLjItLjUuMlpNMzc5LDQwNmgtMXYtNi44aC44djEuM2MuMSwwLDAsMCwwLDAsLjEtLjQuNC0uOC44LTEsLjQtLjMuOS0uNCwxLjQtLjRzMS4xLjIsMS41LjUuNy44LjgsMS4zaC0uMmMwLS42LjMtMSwuOC0xLjMuNC0uMy45LS41LDEuNi0uNXMxLjMuMiwxLjguNy43LDEuMS43LDEuOHY0LjRoLS45di00LjJjMC0uNi0uMS0xLS40LTEuNC0uMy0uMy0uNy0uNS0xLjItLjVzLS43LDAtMSwuM2MtLjMuMi0uNS40LS42LjctLjEuMy0uMi42LS4yLDF2NC4yaC0xdi00LjNjMC0uNi0uMi0xLS41LTEuM3MtLjctLjUtMS4yLS41LS43LDAtMSwuM2MtLjMuMi0uNS40LS42LjctLjEuMy0uMi42LS4yLjl2NC4yaC0uMlpNMzg5LjgsNDA2di02LjhoMXY2LjhoLTFaTTM5MC4zLDM5Ny40Yy0uMiwwLS40LDAtLjUtLjItLjEtLjEtLjItLjMtLjItLjVzMC0uNC4yLS41Yy4xLS4xLjMtLjIuNS0uMnMuNCwwLC41LjJjLjEuMS4yLjMuMi41czAsLjQtLjIuNWMtLjEuMS0uMy4yLS41LjJaTTM5Ny40LDQwNmgtNS4xdi0uOGwzLjktNS4yaC0zLjl2LS44aDUuMXYuOGwtMy45LDUuMmgzLjl2LjhaTTQwMS42LDQwNi4yYy0uNywwLTEuMi0uMS0xLjctLjRzLS45LS43LTEuMi0xLjItLjQtMS4yLS40LTEuOS4xLTEuMy40LTEuOC43LTEsMS4xLTEuM2MuNS0uMywxLS41LDEuNy0uNXMxLjIuMSwxLjYuNGMuNS4zLjguNiwxLjEsMS4xLjMuNS40LDEsLjQsMS43di41aC01Ljh2LS43aDQuOGMwLS43LS4yLTEuMi0uNi0xLjZzLS45LS42LTEuNS0uNi0uOS4xLTEuMi4zYy0uMy4yLS42LjUtLjguOS0uMi40LS4zLjktLjMsMS40LDAsLjkuMiwxLjYuNiwyLjFzMSwuNywxLjguNywxLS4xLDEuNC0uNGMuNC0uMi42LS42LjctMWguOWMtLjIuNy0uNSwxLjMtMSwxLjYtLjUuNC0xLjIuNi0yLC42aDBaTTQwOS43LDM5OS4xdi45aC0uNWMtLjYsMC0xLjEuMi0xLjUuNnMtLjUuOS0uNSwxLjZ2My45aC0xdi02LjhoLjl2MS4zaDBjMC0uNC4zLS44LjctMS4xLjQtLjMuOC0uNCwxLjMtLjRzLjIsMCwuMywwaC4zWiIvPgogICAgICAgIDxwYXRoIGNsYXNzPSJjbHMtNyIgZD0iTTMyNy4xLDIzaC02LjJ2LTEwLjFoNi4ydjEuM2gtNS40bC42LS41djMuN2g0LjN2MS4yaC00LjN2My44bC0uNi0uNmg1LjR2MS4zaDBaTTMyOS42LDIzaC0xLjVsMi40LTMuNC0yLjQtMy41aDEuNWwxLjcsMi41LDEuNy0yLjVoMS41bC0yLjQsMy41LDIuMywzLjRoLTEuNWwtMS43LTIuNS0xLjcsMi41aC4xWk0zMzUuNiwyNi4xdi05LjloMS4ydjEuMmMuMy0uNS43LS44LDEuMS0xLjEuNC0uMi45LS40LDEuNS0uNHMxLjIuMiwxLjcuNS44LjcsMS4xLDEuM2MuMy41LjQsMS4xLjQsMS44cy0uMSwxLjMtLjQsMS45Yy0uMi42LS42LDEtMS4xLDEuM3MtMSwuNS0xLjcuNS0xLS4xLTEuNS0uM2MtLjQtLjItLjgtLjUtMS0xdjQuMmgtMS4zWk0zMzcsMTkuNmMwLC41LDAsLjkuMywxLjIuMi40LjQuNi43LjkuMy4yLjcuMywxLjIuM3MuOC0uMSwxLjEtLjNjLjMtLjIuNi0uNS43LS45LjItLjQuMy0uOC4zLTEuMnMwLS45LS4zLTEuM2MtLjItLjQtLjQtLjYtLjctLjktLjMtLjItLjctLjMtMS4xLS4zcy0uOC4xLTEuMi4zYy0uMy4yLS42LjUtLjcuOS0uMi40LS4zLjgtLjMsMS4zWk0zNDcsMjMuMmMtLjcsMC0xLjMtLjEtMS44LS40cy0uOS0uNy0xLjItMS4zYy0uMy0uNS0uNC0xLjItLjQtMS45cy4xLTEuMy40LTEuOWMuMy0uNS43LTEsMS4yLTEuM3MxLjEtLjUsMS44LS41LDEuMi4xLDEuNy40LjkuNywxLjEsMS4yYy4zLjUuNCwxLjEuNCwxLjh2LjVoLTUuOXYtLjloNC41YzAtLjYtLjItMS0uNS0xLjQtLjMtLjMtLjgtLjUtMS40LS41cy0uOCwwLTEuMS4zYy0uMy4yLS41LjUtLjcuOC0uMi40LS4yLjgtLjIsMS4zLDAsLjguMiwxLjUuNiwxLjlzLjkuNywxLjYuNy45LS4xLDEuMy0uM2MuMy0uMi41LS41LjctLjloMS4yYy0uMi43LS41LDEuMy0xLjEsMS43LS42LjQtMS4zLjYtMi4xLjZoLS4xWk0zNTUuNSwxNi4xdjEuMmgtLjZjLS42LDAtMS4xLjItMS41LjUtLjQuNC0uNS45LS41LDEuNXYzLjZoLTEuM3YtNi44aDEuMnYxLjRjLjEsMCwwLDAsMCwwLDAtLjQuMy0uOC43LTEuMS40LS4zLjgtLjQsMS4zLS40cy4yLDAsLjMsMGguNFpNMzU2LjgsMjN2LTYuOGgxLjN2Ni44aC0xLjNaTTM1Ny40LDE0LjVjLS4yLDAtLjQsMC0uNi0uMy0uMi0uMi0uMy0uNC0uMy0uNnMwLS40LjMtLjZjLjItLjIuNC0uMy42LS4zcy40LDAsLjYuM2MuMi4yLjMuNC4zLjZzMCwuNC0uMy42Yy0uMi4yLS40LjMtLjYuM1pNMzYxLjMsMjNoLTEuM3YtNi44aDEuMmwuMiwxLjNoLS4yYy4xLS41LjQtLjguOC0xLjEuNC0uMy44LS40LDEuNC0uNHMxLjEuMiwxLjUuNS43LjguOCwxLjNoLS4yYzAtLjUuMy0xLC44LTEuM3MuOS0uNSwxLjYtLjUsMS40LjIsMS44LjcuNywxLjEuNywxLjl2NC41aC0xLjN2LTQuMmMwLS41LS4xLTEtLjQtMS4yLS4zLS4zLS42LS40LTEuMS0uNHMtLjYsMC0uOS4yYy0uMi4xLS40LjMtLjYuNi0uMS4zLS4yLjYtLjIsMXY0LjFoLTEuM3YtNC4yYzAtLjUtLjEtMS0uNC0xLjItLjMtLjMtLjYtLjQtMS4xLS40cy0uNiwwLS45LjJjLS4yLjEtLjQuMy0uNi42LS4xLjMtLjIuNi0uMi45djQuMS0uMlpNMzc1LDIzLjJjLS43LDAtMS4zLS4xLTEuOC0uNHMtLjktLjctMS4yLTEuM2MtLjMtLjUtLjQtMS4yLS40LTEuOXMuMS0xLjMuNC0xLjljLjMtLjUuNy0xLDEuMi0xLjNzMS4xLS41LDEuOC0uNSwxLjIuMSwxLjcuNC45LjcsMS4xLDEuMmMuMy41LjQsMS4xLjQsMS44di41aC01Ljl2LS45aDQuNWMwLS42LS4yLTEtLjUtMS40LS4zLS4zLS44LS41LTEuNC0uNXMtLjgsMC0xLjEuM2MtLjMuMi0uNS41LS43LjgtLjIuNC0uMi44LS4yLDEuMywwLC44LjIsMS41LjYsMS45cy45LjcsMS42LjcuOS0uMSwxLjMtLjNjLjMtLjIuNS0uNS43LS45aDEuMmMtLjIuNy0uNSwxLjMtMS4xLDEuN3MtMS4zLjYtMi4xLjZoLS4xWk0zODEsMjNoLTEuM3YtNi44aDEuMnYxLjFjLjQtLjQuNy0uNywxLjEtLjkuNC0uMi45LS4zLDEuMy0uMy45LDAsMS42LjMsMiwuOHMuNiwxLjIuNiwyLjF2NC4yaC0xLjN2LTMuOWMwLS43LS4xLTEuMi0uNC0xLjVzLS43LS41LTEuMi0uNS0xLjEuMi0xLjQuNi0uNS45LS41LDEuNnYzLjZoLS4xWk0zODcsMTYuMmg0djEuMWgtNHYtMS4xWk0zODkuNywyM2gtMS4zdi05aDEuM3Y5WiIvPgogICAgICAgIDxwYXRoIGNsYXNzPSJjbHMtNSIgZD0iTTMwNi40LDQyYzAsMS0uMiwxLjktLjYsMi43cy0xLDEuNC0xLjcsMS44Yy0uNy40LTEuNS43LTIuNS43cy0xLjgtLjItMi41LS43Yy0uNy0uNC0xLjMtMS4xLTEuNy0xLjgtLjQtLjgtLjYtMS43LS42LTIuN3MuMi0xLjkuNi0yLjcsMS0xLjQsMS43LTEuOGMuNy0uNCwxLjUtLjcsMi41LS43czEuOC4yLDIuNS43Yy43LjQsMS4zLDEsMS43LDEuOC40LjguNiwxLjcuNiwyLjdaTTMwNS4zLDQyYzAtLjgtLjItMS42LS41LTIuMi0uMy0uNi0uOC0xLjEtMS4zLTEuNXMtMS4yLS41LTEuOS0uNS0xLjQuMi0xLjkuNWMtLjYuNC0xLC44LTEuMywxLjUtLjMuNi0uNSwxLjQtLjUsMi4ycy4yLDEuNi41LDIuMmMuMy42LjgsMS4xLDEuMywxLjUuNi40LDEuMi41LDEuOS41czEuNC0uMiwxLjktLjVjLjYtLjQsMS0uOCwxLjMtMS41LjMtLjYuNS0xLjQuNS0yLjJaTTMwNS40LDQ3LjZsLTMtMy40LjctLjYsMy4xLDMuNC0uNy42aC0uMVpNMzEyLjgsNDAuMmgxdjYuOGgtLjh2LTEuMWMtLjMuNC0uNi43LTEuMSwxLS40LjItLjkuNC0xLjQuNC0uOCwwLTEuNC0uMy0xLjgtLjhzLS42LTEuMi0uNi0ydi00LjJoMXYzLjljMCwuOC4yLDEuNC41LDEuN3MuOC41LDEuMy41LDEuMi0uMiwxLjUtLjZjLjQtLjQuNS0xLC41LTEuOHYtMy44Wk0zMTcuNyw0Ny4yYy0uNywwLTEuMy0uMi0xLjctLjYtLjQtLjQtLjYtLjktLjYtMS40cy4yLTEuMS43LTEuNWMuNC0uNCwxLjEtLjYsMS45LS43bDIuMi0uMnYtLjJjMC0uNCwwLS44LS4yLTEtLjItLjMtLjQtLjQtLjYtLjUtLjMsMC0uNi0uMi0uOS0uMi0uNiwwLTEuMSwwLTEuNC40LS4zLjMtLjUuNi0uNSwxLjFoLS45YzAtLjUuMS0uOS40LTEuMi4yLS4zLjYtLjYsMS0uOHMuOS0uMywxLjUtLjMsMSwwLDEuNC4zYy40LjIuNy41LDEsLjguMi40LjQuOS40LDEuNXY0LjRoLS44di0xLjJjLS4zLjQtLjcuOC0xLjEsMXMtLjkuMy0xLjUuM2gtLjNaTTMxNy45LDQ2LjRjLjcsMCwxLjMtLjIsMS43LS43LjQtLjUuNi0xLjEuNi0xLjh2LS40bC0yLC4yYy0uNiwwLTEuMS4yLTEuNC41cy0uNC42LS40LDEsLjEuNy40LjkuNy4zLDEuMS4zaDBaTTMyNCw0N2gtMXYtNi44aC44djEuMmMuNC0uNC43LS44LDEuMS0xcy45LS40LDEuNC0uNGMuOSwwLDEuNi4zLDIsLjhzLjYsMS4yLjYsMnY0LjFoLTF2LTMuOWMwLS44LS4yLTEuMy0uNS0xLjctLjMtLjMtLjgtLjUtMS4zLS41cy0xLjIuMi0xLjYuNy0uNiwxLjEtLjYsMS44djMuN1pNMzMwLjIsNDAuMmgzLjd2LjhoLTMuN3YtLjhaTTMzMi41LDQ3aC0xdi04LjloMXY4LjlaTTMzOS44LDQwLjJoMXY2LjhoLS44di0xLjFjLS4zLjQtLjYuNy0xLjEsMS0uNC4yLS45LjQtMS40LjQtLjgsMC0xLjQtLjMtMS44LS44cy0uNi0xLjItLjYtMnYtNC4yaDF2My45YzAsLjguMiwxLjQuNSwxLjdzLjguNSwxLjMuNSwxLjItLjIsMS41LS42Yy40LS40LjUtMSwuNS0xLjh2LTMuOFpNMzQzLjgsNDdoLTF2LTYuOGguOHYxLjNjLjEsMCwwLDAsMCwwLC4xLS40LjQtLjguOC0xLC40LS4zLjgtLjQsMS40LS40czEuMS4yLDEuNS41LjcuOC44LDEuM2gtLjJjMC0uNi4zLTEsLjgtMS4zLjQtLjMuOS0uNSwxLjYtLjVzMS4zLjIsMS44LjdjLjQuNC43LDEuMS43LDEuOHY0LjRoLS45di00LjJjMC0uNi0uMS0xLS40LTEuNC0uMy0uMy0uNy0uNS0xLjItLjVzLS43LDAtMSwuM2MtLjMuMi0uNS40LS42LjdzLS4yLjYtLjIsMXY0LjJoLTF2LTQuM2MwLS42LS4yLTEtLjUtMS4zcy0uNy0uNS0xLjItLjUtLjcsMC0xLC4zYy0uMy4yLS41LjQtLjYuN3MtLjIuNi0uMi45djQuMmgtLjJaTTM1OS41LDQ3aC0xdi0xMC4yaDF2NC42Yy4yLS40LjUtLjcuOS0xcy45LS40LDEuNS0uNGMuOSwwLDEuNS4zLDIsLjguNC41LjYsMS4yLjYsMnY0LjFoLTF2LTMuOWMwLS41LDAtMS0uMi0xLjMtLjEtLjMtLjQtLjUtLjYtLjctLjMsMC0uNi0uMi0uOS0uMnMtLjksMC0xLjIuM2MtLjMuMi0uNi41LS43LjktLjIuNC0uMy44LS4zLDEuMnYzLjdoMFpNMzY4LjMsNDcuMmMtLjcsMC0xLjMtLjItMS43LS42LS40LS40LS42LS45LS42LTEuNHMuMi0xLjEuNy0xLjVjLjQtLjQsMS4xLS42LDEuOS0uN2wyLjItLjJ2LS4yYzAtLjQsMC0uOC0uMi0xLS4yLS4zLS40LS40LS42LS41LS4zLDAtLjYtLjItLjktLjItLjYsMC0xLjEsMC0xLjQuNC0uMy4zLS41LjYtLjUsMS4xaC0uOWMwLS41LjEtLjkuMy0xLjIuMi0uMy42LS42LDEtLjhzLjktLjMsMS41LS4zLDEsMCwxLjQuM2MuNC4yLjcuNSwxLC44LjIuNC40LjkuNCwxLjV2NC40aC0uOHYtMS4yYy0uMy40LS43LjgtMS4xLDFzLS45LjMtMS41LjNoLS4yWk0zNjguNSw0Ni40Yy43LDAsMS4zLS4yLDEuNy0uNy40LS41LjYtMS4xLjYtMS44di0uNGwtMiwuMmMtLjYsMC0xLjEuMi0xLjQuNXMtLjQuNi0uNCwxLC4xLjcuNC45LjcuMywxLjEuM2gwWk0zNzcuMiw0MC4xdi45aC0uNWMtLjYsMC0xLjEuMi0xLjUuNi0uNC40LS41LjktLjUsMS42djMuOWgtMXYtNi44aC45djEuM2gwYzAtLjQuMy0uOC43LTEuMS40LS4zLjgtLjQsMS4zLS40cy4yLDAsLjMsMGguM1pNMzgwLjksNDcuMmMtLjcsMC0xLjItLjItMS43LS41cy0uOC0uNy0xLjEtMS4zYy0uMy0uNS0uNC0xLjEtLjQtMS44cy4xLTEuMy40LTEuOC42LTEsMS4xLTEuMywxLS41LDEuNy0uNSwxLjEsMCwxLjUuNGMuNC4yLjguNiwxLDEuMXYtNC43aDF2MTAuMmgtLjh2LTEuNGMtLjMuNS0uNy45LTEuMSwxLjJzLTEsLjQtMS41LjRoLS4xWk0zODEuMSw0Ni4zYy41LDAsLjksMCwxLjMtLjMuMy0uMi42LS42LjgtMSwuMi0uNC4zLS45LjMtMS40czAtMS0uMy0xLjRjLS4yLS40LS41LS43LS44LTEtLjMtLjItLjgtLjMtMS4zLS4zcy0uOSwwLTEuMy4zYy0uMy4yLS42LjYtLjgsMS0uMi40LS4zLjktLjMsMS40czAsMSwuMywxLjRjLjIuNC41LjcuOCwxLC40LjIuOC4zLDEuMy4zWk0zODcuOCw0N2wtMi4yLTYuOGgxbDEuMyw0LjFjMCwuMi4xLjUuMi43LDAsLjIuMS41LjIuOCwwLS4yLDAtLjQuMS0uNiwwLS4yLjEtLjQuMi0uNSwwLS4yLDAtLjMuMS0uM2wxLjMtNC4xaDFsMS4zLDQuMXYuM2MwLDAsMCwuMi4xLjR2LjRjMCwwLDAsLjMuMS40LDAtLjIsMC0uNC4xLS41LDAsMCwwLS4zLjEtLjQsMCwwLC4xLS4zLjItLjZsMS4zLTQuMWgxbC0yLjMsNi44aC0uOWwtMS40LTQuM2MwLS4zLS4yLS41LS4yLS43cy0uMS0uNC0uMS0uNmMwLC4yLS4xLjQtLjIuNiwwLC4yLS4xLjQtLjIuN2wtMS40LDQuM2gtMSwuM1pNMzk4LjQsNDcuMmMtLjcsMC0xLjMtLjItMS43LS42LS40LS40LS42LS45LS42LTEuNHMuMi0xLjEuNy0xLjVjLjQtLjQsMS4xLS42LDEuOS0uN2wyLjItLjJ2LS4yYzAtLjQsMC0uOC0uMi0xLS4yLS4zLS40LS40LS42LS41LS4zLDAtLjYtLjItLjktLjItLjYsMC0xLjEsMC0xLjQuNC0uMy4zLS41LjYtLjUsMS4xaC0uOWMwLS41LjEtLjkuMy0xLjIuMi0uMy42LS42LDEtLjhzLjktLjMsMS41LS4zLDEsMCwxLjQuM2MuNC4yLjcuNSwxLC44LjIuNC40LjkuNCwxLjV2NC40aC0uOHYtMS4yYy0uMy40LS43LjgtMS4xLDFzLS45LjMtMS41LjNoLS4yWk0zOTguNyw0Ni40Yy43LDAsMS4zLS4yLDEuNy0uNy40LS41LjYtMS4xLjYtMS44di0uNGwtMiwuMmMtLjYsMC0xLjEuMi0xLjQuNXMtLjQuNi0uNCwxLC4xLjcuNC45LjcuMywxLjEuM2gwWk00MDcuNCw0MC4xdi45aC0uNWMtLjYsMC0xLjEuMi0xLjUuNi0uNC40LS41LjktLjUsMS42djMuOWgtMXYtNi44aC45djEuM2gwYzAtLjQuMy0uOC43LTEuMS40LS4zLjgtLjQsMS4zLS40cy4yLDAsLjMsMGguM1pNNDExLjIsNDcuMmMtLjcsMC0xLjIsMC0xLjctLjQtLjUtLjMtLjktLjctMS4yLTEuMi0uMy0uNS0uNC0xLjItLjQtMS45cy4xLTEuMy40LTEuOC43LTEsMS4xLTEuM2MuNS0uMywxLS41LDEuNy0uNXMxLjIsMCwxLjYuNGMuNS4zLjguNiwxLjEsMS4xLjMuNS40LDEsLjQsMS43di41aC01Ljh2LS43aDQuOGMwLS43LS4yLTEuMi0uNi0xLjYtLjQtLjQtLjktLjYtMS41LS42cy0uOSwwLTEuMi4zYy0uMy4yLS42LjUtLjguOS0uMi40LS4zLjktLjMsMS40LDAsLjkuMiwxLjYuNiwyLjFzMSwuNywxLjguNywxLDAsMS40LS4zLjYtLjYuNy0xaC45Yy0uMi43LS41LDEuMy0xLDEuNi0uNS40LTEuMi42LTIsLjZaIi8+CiAgICAgICAgPHBhdGggZD0iTTUzLDI5My41bDIuOSw1aC01LjhzMi45LTUsMi45LTVaTTUzLDMxM3YuNWMtLjMsMC0uNS0uMi0uNS0uNWguNVpNMjkzLDMxMi41Yy4zLDAsLjUuMi41LjVzLS4yLjUtLjUuNXYtMVpNNTMuNSwyOTh2MTVoLTF2LTE1aDFaTTUzLDMxMi41aDI0MHYxSDUzdi0xWiIvPgogICAgICAgIDxwYXRoIGQ9Ik02NTkuNSwyOTRjMC0uMy0uMi0uNS0uNS0uNXMtLjUuMi0uNS41aDFaTTY1OSwzMTN2LjVjLjMsMCwuNS0uMi41LS41aC0uNVpNNDE3LDMxM2w1LDIuOXYtNS44bC01LDIuOVpNNjU4LjUsMjk0djE5aDF2LTE5aC0xWk02NTksMzEyLjVoLTIzNy41djFoMjM3LjV2LTFaIi8+CiAgICAgICAgPHBhdGggZD0iTTY1OSwxMTlsLTIuOS01aDUuOGwtMi45LDVoMFpNNjU5LDEwMHYtLjVjLjMsMCwuNS4yLjUuNWgtLjVaTTQxNywxMDAuNWMtLjMsMC0uNS0uMi0uNS0uNXMuMi0uNS41LS41djFaTTY1OC41LDExNC41di0xNC41aDF2MTQuNWgtMVpNNjU5LDEwMC41aC0yNDJ2LTFoMjQydjFaIi8+CiAgICAgICAgPHBhdGggZD0iTTUyLjUsMTIwLjVjMCwuMy4yLjUuNS41cy41LS4yLjUtLjVoLTFaTTUzLDEwMHYtLjVjLS4zLDAtLjUuMi0uNS41aC41Wk0yOTIuNSwxMDBsLTUtMi45djUuOGw1LTIuOVpNNTMuNSwxMjAuNXYtMjAuNWgtMXYyMC41aDFaTTUzLDEwMC41aDcwLjV2LTFINTN2MVpNMTIzLjUsMTAwLjVoMTY0LjV2LTFIMTIzLjV2MVoiLz4KICAgICAgICA8cGF0aCBjbGFzcz0iY2xzLTciIGQ9Ik0yNC40LDIzNS41djkuNWgtMS40di05LjVoMS40Wk0yMCwyMzYuMXYtMS4zaDcuNXYxLjNoLTcuNVpNMzAuNCwyNDUuMmMtLjcsMC0xLjMtLjEtMS44LS40LS41LS4zLS45LS43LTEuMi0xLjMtLjMtLjUtLjQtMS4yLS40LTEuOXMuMS0xLjMuNC0xLjljLjMtLjUuNy0xLDEuMi0xLjNzMS4xLS41LDEuOC0uNSwxLjIuMSwxLjcuNGMuNS4zLjkuNywxLjEsMS4yLjMuNS40LDEuMS40LDEuOHYuNWgtNS45di0uOWg0LjVjMC0uNi0uMi0xLS41LTEuNC0uMy0uMy0uOC0uNS0xLjQtLjVzLS44LDAtMS4xLjNjLS4zLjItLjUuNS0uNy44LS4yLjQtLjIuOC0uMiwxLjMsMCwuOC4yLDEuNS42LDEuOXMuOS43LDEuNi43LjktLjEsMS4zLS4zYy4zLS4yLjUtLjUuNy0uOWgxLjJjLS4yLjctLjUsMS4zLTEuMSwxLjctLjYuNC0xLjMuNi0yLjEuNmgwWk0zNC41LDI0M2gxLjNjMCwuMywwLC42LjQuOC4zLjIuNi4zLDEsLjNzLjgsMCwxLjEtLjNjLjMtLjIuNC0uNC40LS43czAtLjQtLjItLjZjMC0uMS0uNC0uMy0uNy0uNGwtMS4yLS4zYy0uNi0uMS0xLjEtLjQtMS40LS43LS4zLS4zLS40LS43LS40LTEuMnMwLS44LjMtMS4xLjUtLjUuOS0uNy44LS4zLDEuMy0uMy45LDAsMS4zLjNjLjQuMi43LjQuOS43cy4zLjcuMywxLjFoLTEuM2MwLS40LDAtLjYtLjQtLjhzLS41LS4zLS45LS4zLS43LDAtMSwuMy0uMy40LS4zLjdjMCwuNS4zLjgsMSwuOWwxLjIuM2MuNi4xLDEsLjMsMS4zLjZzLjQuNy40LDEuMiwwLC44LS4zLDEuMS0uNi42LTEsLjdjLS40LjItLjkuMy0xLjQuMy0uOCwwLTEuNC0uMi0xLjktLjYtLjUtLjQtLjctLjktLjctMS42di4zWk00MC42LDIzOC4yaDR2MS4xaC00di0xLjFaTTQzLjMsMjQ1aC0xLjN2LTloMS4zdjlaTTQ5LjYsMjQ4LjF2LTkuOWgxLjJ2MS4yYy4zLS41LjctLjgsMS4xLTEuMS40LS4yLjktLjQsMS41LS40czEuMi4yLDEuNy41LjguNywxLjEsMS4zYy4zLjUuNCwxLjEuNCwxLjhzMCwxLjMtLjQsMS45Yy0uMi42LS42LDEtMS4xLDEuM3MtMSwuNS0xLjcuNS0xLS4xLTEuNS0uM2MtLjQtLjItLjgtLjUtMS0xdjQuMmgtMS4zWk01MSwyNDEuNmMwLC41LDAsLjkuMywxLjIuMi40LjQuNi43LjkuMy4yLjcuMywxLjIuM3MuOC0uMSwxLjEtLjMuNi0uNS43LS45Yy4yLS40LjMtLjguMy0xLjJzMC0uOS0uMy0xLjNjLS4yLS40LS40LS42LS43LS45LS4zLS4yLS43LS4zLTEuMS0uM3MtLjguMS0xLjIuM2MtLjMuMi0uNi41LS43LjktLjIuNC0uMy44LS4zLDEuM1pNNTcuNiwyNDEuNmMwLS43LjItMS4zLjUtMS45LjMtLjUuNy0xLDEuMy0xLjMuNS0uMywxLjItLjUsMS44LS41czEuMy4yLDEuOC41LDEsLjcsMS4zLDEuM2MuMy41LjUsMS4yLjUsMS45cy0uMiwxLjMtLjUsMS45Yy0uMy41LS43LDEtMS4zLDEuMy0uNS4zLTEuMS41LTEuOC41cy0xLjMtLjItMS44LS41LTEtLjctMS4zLTEuM2MtLjMtLjUtLjUtMS4yLS41LTEuOVpNNTguOSwyNDEuNmMwLC41LDAsLjkuMywxLjMuMi40LjUuNi44LjkuMy4yLjcuMywxLjIuM3MuOC0uMSwxLjItLjNjLjMtLjIuNi0uNS44LS45cy4zLS44LjMtMS4zLDAtLjktLjMtMS4zYy0uMi0uNC0uNC0uNi0uOC0uOS0uMy0uMi0uNy0uMy0xLjItLjNzLS44LjEtMS4yLjNjLS4zLjItLjYuNS0uOC45cy0uMy44LS4zLDEuM1pNNjYuMiwyNDV2LTYuOGgxLjN2Ni44aC0xLjNaTTY2LjgsMjM2LjVjLS4yLDAtLjQsMC0uNi0uMy0uMi0uMi0uMy0uNC0uMy0uNnMwLS40LjMtLjZjLjItLjIuNC0uMy42LS4zcy40LDAsLjYuMy4zLjQuMy42LDAsLjQtLjMuNmMtLjIuMi0uNC4zLS42LjNaTTcwLjcsMjQ1aC0xLjN2LTYuOGgxLjJ2MWMuNC0uNC43LS43LDEuMS0uOXMuOS0uMywxLjMtLjNjLjksMCwxLjYuMywyLC44cy42LDEuMi42LDIuMXY0LjJoLTEuM3YtMy45YzAtLjcsMC0xLjItLjQtMS41cy0uNy0uNS0xLjItLjUtMS4xLjItMS40LjZjLS4zLjQtLjUuOS0uNSwxLjZ2My42aDBaTTc2LjcsMjM4LjJoNHYxLjFoLTR2LTEuMVpNNzkuNCwyNDVoLTEuM3YtOWgxLjN2OVpNODEuMywyNDNoMS4zYzAsLjMsMCwuNi40LjhzLjYuMywxLC4zLjgsMCwxLjEtLjNjLjMtLjIuNC0uNC40LS43czAtLjQtLjItLjYtLjQtLjMtLjctLjRsLTEuMi0uM2MtLjYtLjEtMS4xLS40LTEuNC0uN3MtLjQtLjctLjQtMS4yLDAtLjguMy0xLjFjLjItLjMuNS0uNS45LS43cy44LS4zLDEuMy0uMy45LDAsMS4zLjNjLjQuMi43LjQuOS43LjIuMy4zLjcuMywxLjFoLTEuM2MwLS40LDAtLjYtLjMtLjhzLS41LS4zLS45LS4zLS43LDAtMSwuMy0uMy40LS4zLjdjMCwuNS4zLjgsMSwuOWwxLjIuM2MuNi4xLDEsLjMsMS4zLjZzLjQuNy40LDEuMiwwLC44LS4zLDEuMWMtLjIuMy0uNi42LTEsLjctLjQuMi0uOS4zLTEuNC4zLS44LDAtMS40LS4yLTEuOS0uNnMtLjctLjktLjctMS42di4zWiIvPgogICAgICAgIDxwYXRoIGNsYXNzPSJjbHMtNSIgZD0iTTE0LjgsMjY5LjJjLS45LDAtMS44LS4yLTIuNS0uNnMtMS4zLTEtMS43LTEuOC0uNi0xLjctLjYtMi43LjItMS45LjYtMi43Yy40LS44LDEtMS40LDEuNy0xLjhzMS41LS43LDIuNS0uNywxLjQuMSwyLC40Yy42LjMsMS4xLjcsMS41LDEuMS40LjUuNywxLjEuOCwxLjdoLTEuMWMtLjItLjctLjYtMS4zLTEuMi0xLjctLjYtLjQtMS4zLS42LTItLjZzLTEuNC4yLTEuOS41Yy0uNi4zLTEsLjgtMS4zLDEuNS0uMy42LS40LDEuNC0uNCwyLjJzLjIsMS42LjUsMi4yLjcsMS4xLDEuMywxLjVjLjYuMywxLjIuNSwxLjkuNXMxLjUtLjIsMi4xLS42LDEtLjksMS4yLTEuNmgxLjFjLS4xLjYtLjQsMS4yLS45LDEuNy0uNC41LS45LjgtMS41LDEuMS0uNi4zLTEuMy40LTIsLjRoMFpNMjAuMiwyNjUuNmMwLS43LjEtMS4zLjQtMS44cy43LTEsMS4yLTEuMywxLjEtLjUsMS44LS41LDEuMy4yLDEuOC41LjkuNywxLjIsMS4zYy4zLjUuNCwxLjEuNCwxLjhzLS4xLDEuMy0uNCwxLjgtLjcsMS0xLjIsMS4zLTEuMS41LTEuOC41LTEuMi0uMi0xLjgtLjVjLS41LS4zLS45LS43LTEuMi0xLjMtLjMtLjUtLjQtMS4yLS40LTEuOFpNMjEuMiwyNjUuNmMwLC41LjEsMSwuMywxLjQuMi40LjUuNy45LDEsLjQuMi44LjMsMS4zLjNzLjktLjEsMS4zLS4zYy40LS4yLjctLjYuOS0xLC4yLS40LjMtLjkuMy0xLjRzLS4xLTEtLjMtMS40Yy0uMi0uNC0uNS0uNy0uOS0xLS40LS4yLS44LS40LTEuMy0uNHMtLjkuMS0xLjMuNGMtLjQuMi0uNy42LS45LDEtLjIuNC0uMy45LS4zLDEuNFpNMjkuNiwyNjloLTF2LTYuOGguOHYxLjJjLjQtLjQuNy0uOCwxLjEtMXMuOS0uNCwxLjQtLjRjLjksMCwxLjYuMywyLC44cy42LDEuMi42LDJ2NC4xaC0xdi0zLjljMC0uOC0uMi0xLjMtLjUtMS43LS4zLS4zLS44LS41LTEuMy0uNXMtMS4yLjItMS42LjctLjYsMS4xLS42LDEuOHYzLjdaTTM1LjgsMjYyLjJoMy43di44aC0zLjd2LS44Wk0zOC4xLDI2OWgtMXYtOC45aDF2OC45Wk00NC4yLDI2Mi4xdi45aC0uNWMtLjYsMC0xLjEuMi0xLjUuNnMtLjUuOS0uNSwxLjZ2My45aC0xdi02LjhoLjl2MS4zaDBjMC0uNC4zLS44LjctMS4xLjQtLjMuOC0uNCwxLjMtLjRzLjIsMCwuMywwaC4zWk00NC44LDI2NS42YzAtLjcsMC0xLjMuNC0xLjguMy0uNS43LTEsMS4yLTEuM3MxLjEtLjUsMS44LS41LDEuMy4yLDEuOC41LjkuNywxLjIsMS4zYy4zLjUuNCwxLjEuNCwxLjhzMCwxLjMtLjQsMS44Yy0uMy41LS43LDEtMS4yLDEuM3MtMS4xLjUtMS44LjUtMS4yLS4yLTEuOC0uNWMtLjUtLjMtLjktLjctMS4yLTEuMy0uMy0uNS0uNC0xLjItLjQtMS44Wk00NS44LDI2NS42YzAsLjUsMCwxLC4zLDEuNHMuNS43LjksMWMuNC4yLjguMywxLjMuM3MuOS0uMSwxLjMtLjNjLjQtLjIuNy0uNi45LTFzLjMtLjkuMy0xLjQsMC0xLS4zLTEuNC0uNS0uNy0uOS0xYy0uNC0uMi0uOC0uNC0xLjMtLjRzLS45LjEtMS4zLjRjLS40LjItLjcuNi0uOSwxcy0uMy45LS4zLDEuNFpNNTQuMiwyNjloLTF2LTEwLjJoMXYxMC4yWk02MC4yLDI3MnYtOS43aC44djEuNGMuMy0uNS43LS45LDEuMS0xLjIuNS0uMywxLS40LDEuNS0uNHMxLjIuMiwxLjcuNS44LjcsMS4xLDEuM2MuMy41LjQsMS4xLjQsMS44czAsMS4zLS40LDEuOGMtLjIuNS0uNiwxLTEuMSwxLjNzLTEsLjUtMS43LjUtMS4xLS4xLTEuNS0uNC0uOC0uNi0xLTEuMXY0LjNoLTEsLjFaTTYxLjEsMjY1LjZjMCwuNSwwLDEsLjMsMS40LjIuNC41LjcuOCwxLC40LjIuOC4zLDEuMy4zcy45LS4xLDEuMy0uM2MuMy0uMi42LS42LjgtMSwuMi0uNC4zLS45LjMtMS40czAtMS0uMy0xLjRjLS4yLS40LS40LS43LS44LTEtLjMtLjItLjgtLjMtMS4zLS4zcy0uOS4xLTEuMy4zYy0uMy4yLS42LjUtLjgsMS0uMi40LS4zLjktLjMsMS40Wk03Mi45LDI2Mi4yaDF2Ni44aC0uOHYtMS4xYy0uMy40LS42LjctMS4xLDEtLjQuMi0uOS40LTEuNC40LS44LDAtMS40LS4zLTEuOC0uOHMtLjYtMS4yLS42LTJ2LTQuMmgxdjMuOWMwLC44LjIsMS40LjUsMS43LjMuMy44LjUsMS4zLjVzMS4yLS4yLDEuNS0uNmMuNC0uNC41LTEsLjUtMS44di0zLjhaTTc2LjksMjY5aC0xdi0xMC4yaDF2MTAuMlpNNzguNCwyNjcuMWguOWMwLC40LDAsLjcuNC45LjMuMi43LjMsMS4xLjNzLjktLjEsMS4yLS4zYy4zLS4yLjQtLjUuNC0uOXMwLS41LS4yLS43LS40LS4zLS44LS40bC0xLjItLjNjLS42LS4xLTEtLjQtMS4zLS43LS4zLS4zLS40LS43LS40LTEuMXMwLS43LjMtMWMuMi0uMy41LS41LjktLjdzLjgtLjIsMS4zLS4yLjksMCwxLjIuM2MuNC4yLjYuNC44LjcuMi4zLjMuNy4zLDEuMWgtLjljMC0uNCwwLS43LS40LS45LS4zLS4yLS42LS4zLTEuMS0uM3MtLjgsMC0xLjEuM2MtLjMuMi0uNC41LS40LjgsMCwuNS40LjksMS4xLDEuMWwxLjIuM2MuNi4xLDEsLjQsMS4zLjcuMy4zLjQuNy40LDEuMnMwLC44LS4zLDEuMWMtLjIuMy0uNS41LS45LjdzLS44LjItMS4zLjJjLS44LDAtMS40LS4yLTEuOC0uNnMtLjctLjktLjctMS41aDBaTTg3LjksMjY5LjJjLS43LDAtMS4yLS4xLTEuNy0uNHMtLjktLjctMS4yLTEuMi0uNC0xLjItLjQtMS45LDAtMS4zLjQtMS44LjctMSwxLjEtMS4zYy41LS4zLDEtLjUsMS43LS41czEuMi4xLDEuNi40Yy41LjMuOC42LDEuMSwxLjEuMy41LjQsMSwuNCwxLjd2LjVoLTUuOHYtLjdoNC44YzAtLjctLjItMS4yLS42LTEuNnMtLjktLjYtMS41LS42LS45LjEtMS4yLjNjLS4zLjItLjYuNS0uOC45LS4yLjQtLjMuOS0uMywxLjQsMCwuOS4yLDEuNi42LDIuMXMxLC43LDEuOC43LDEtLjEsMS40LS40Yy40LS4yLjYtLjYuNy0xaC45Yy0uMi43LS41LDEuMy0xLDEuNi0uNS40LTEuMi42LTIsLjZoMFpNOTEuOSwyNjcuMWguOWMwLC40LDAsLjcuNC45LjMuMi43LjMsMS4xLjNzLjktLjEsMS4yLS4zYy4zLS4yLjQtLjUuNC0uOXMwLS41LS4yLS43LS40LS4zLS44LS40bC0xLjItLjNjLS42LS4xLTEtLjQtMS4zLS43LS4zLS4zLS40LS43LS40LTEuMXMwLS43LjMtMWMuMi0uMy41LS41LjktLjdzLjgtLjIsMS4zLS4yLjksMCwxLjIuM2MuNC4yLjYuNC44LjcuMi4zLjMuNy4zLDEuMWgtLjljMC0uNCwwLS43LS40LS45LS4zLS4yLS42LS4zLTEuMS0uM3MtLjgsMC0xLjEuM2MtLjMuMi0uNC41LS40LjgsMCwuNS40LjksMS4xLDEuMWwxLjIuM2MuNi4xLDEsLjQsMS4zLjcuMy4zLjQuNy40LDEuMnMwLC44LS4zLDEuMWMtLjIuMy0uNS41LS45LjdzLS44LjItMS4zLjJjLS44LDAtMS40LS4yLTEuOC0uNnMtLjctLjktLjctMS41aDBaIi8+CiAgICAgICAgPHBhdGggZD0iTTI5MywxMDBsLTksNS4ydi0xMC40czksNS4yLDksNS4yWiIvPgogICAgICAgIDxwYXRoIGQ9Ik00MTcsMzEzbDktNS4ydjEwLjRsLTktNS4yaDBaIi8+CiAgICAgICAgPHBhdGggZD0iTTUzLDI5My41bDUuMiw5aC0xMC40czUuMi05LDUuMi05WiIvPgogICAgICAgIDxwYXRoIGQ9Ik02NTksMTIzbC01LjItOWgxMC40bC01LjIsOVoiLz4KICAgICAgICA8Zz4KICAgICAgICAgIDxyZWN0IGNsYXNzPSJjbHMtNyIgeD0iNjI1IiB5PSIxNDQiIHdpZHRoPSI2OCIgaGVpZ2h0PSI2OCIgcng9IjQiIHJ5PSI0Ii8+CiAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xzLTEiIGQ9Ik02NDEsMTY4aDE2bDMuNSw3LDYsMSwxMS41LDExIi8+CiAgICAgICAgICA8cGF0aCBjbGFzcz0iY2xzLTIiIGQ9Ik02NDEsMTcyaDIyLjhsMy41LDEyLjEsMTAuNiw3LjkiLz4KICAgICAgICAgIDxwYXRoIGNsYXNzPSJjbHMtMyIgZD0iTTYzOCwxNTguN3YzOS43aDQwLjYiLz4KICAgICAgICA8L2c+CiAgICAgIDwvZz4KICAgIDwvZz4KICA8L2c+Cjwvc3ZnPg=="
     ]
    }
   },
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Learn to find optimal pulses with automated optimization\n",
    "**Use closed-loop optimization without a complete system model**\n",
    "\n",
    "In this tutorial you will optimize a control pulse which implements a single-qubit gate on a simulated realistic experiment.\n",
    "You will set up a [CMA-ES](https://en.wikipedia.org/wiki/CMA-ES) closed-loop optimizer which will keep suggesting new pulses to try in the experiment, in order to find one which minimizes the gate infidelity.\n",
    "\n",
    "The [closed-loop optimization features](https://docs.q-ctrl.com/references/boulder-opal/boulderopal/closed_loop) in Boulder Opal executes a closed optimization loop where the optimizer communicates with the experimental apparatus without your direct involvement.\n",
    "In this kind of setting, your experimental apparatus produces an initial set of results, which it sends to the optimizer.\n",
    "Using this information, the optimizer produces a set of improved test points (which in this case are controls) that it recommends back to the experimental apparatus.\n",
    "The results corresponding to these test points are sent back to the optimizer, and the cycle repeats itself until any of the results has a sufficiently low cost function value, or until it meets any other ending condition that you imposed.\n",
    "This setup is illustrated in the figure below.\n",
    "\n",
    "\n",
    "![find-optimal-pulses-with-automated-optimization.svg](attachment:9ed66b13-f0c4-41cb-835e-e7b7be651a5d.svg)\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Obtaining an optimal pulse to implement a single qubit gate\n",
    "\n",
    "Your task is to find an optimal pulse which implements an X gate on a qubit by using Boulder Opal's closed-loop optimizer.\n",
    "You would usually do this for an experiment, but in this case you will interact with a simulated qubit implemented by the `run_experiments` function below. \n",
    "\n",
    "The system simulated in `run_experiments` is a qubit with leakage to a higher level, thus it's a three level system.\n",
    "The qubit starts in state $|0\\rangle$ and is evolved by the controls.\n",
    "The function returns measurements of what level the qubit is in, either 0, 1 or 2.\n",
    "Our goal of implementing an X gate corresponds to evolving the qubit from state $|0\\rangle$ to state $|1\\rangle$.\n",
    "\n",
    "Do not worry about the exact details of this function, just think of it as a function that interacts with the experiment for which you want to find the optimal gate.\n",
    "It takes in an array of `controls`, a `duration`, and a `shot_count`, and returns an array of `measurements` on the qubit associated with each control and shot."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "def run_experiments(controls, duration, shot_count):\n",
    "    \"\"\"\n",
    "    Simulates a single qubit experiment using Boulder Opal\n",
    "    with the given piecewise-constant controls.\n",
    "\n",
    "    Parameters\n",
    "    ----------\n",
    "    controls : np.ndarray\n",
    "        The controls to simulate.\n",
    "        A 2D NumPy array of shape (control_count, segment_count)\n",
    "        with the per-segment values of each control.\n",
    "    duration : float\n",
    "        The duration (in nanoseconds) of the controls.\n",
    "    shot_count : int\n",
    "        The number of shots for which to generate measurements.\n",
    "\n",
    "    Returns\n",
    "    -------\n",
    "    np.ndarray\n",
    "        The qubit measurement results (either 0, 1, or 2) associated to each control\n",
    "        and shot, as an array of shape (len(controls), shot_count).\n",
    "    \"\"\"\n",
    "\n",
    "    # Create Boulder Opal graph.\n",
    "    graph = bo.Graph()\n",
    "\n",
    "    # Define simulation parameters and operators.\n",
    "    filter_cutoff_frequency = 2 * np.pi * 0.3  # GHz\n",
    "    segment_count = 128\n",
    "    max_drive_amplitude = 2 * np.pi * 0.1  # GHz\n",
    "    delta = -0.33 * 2 * np.pi  # GHz\n",
    "    big_delta = 0.01 * 2 * np.pi  # GHz\n",
    "    number_operator = graph.number_operator(3)\n",
    "    drive_operator = 0.5 * graph.annihilation_operator(3)\n",
    "    confusion_matrix = np.array(\n",
    "        [[0.99, 0.01, 0.01], [0.01, 0.98, 0.01], [0.0, 0.01, 0.98]]\n",
    "    )\n",
    "\n",
    "    # Retrieve control information.\n",
    "    control_values = controls * max_drive_amplitude\n",
    "\n",
    "    # Define initial state.\n",
    "    initial_state = graph.fock_state(3, 0)\n",
    "\n",
    "    # Construct constant Hamiltonian terms.\n",
    "    frequency_term = big_delta * number_operator\n",
    "    anharmonicity_term = (\n",
    "        delta * (number_operator @ number_operator - number_operator) / 2\n",
    "    )\n",
    "\n",
    "    # Construct filtered drive.\n",
    "    filtered_drive = graph.convolve_pwc(\n",
    "        pwc=graph.pwc_signal(duration=duration, values=control_values),\n",
    "        kernel=graph.sinc_convolution_kernel(filter_cutoff_frequency),\n",
    "    )\n",
    "    drive = graph.discretize_stf(filtered_drive, duration, segment_count)\n",
    "    drive_term = graph.hermitian_part(drive * drive_operator)\n",
    "\n",
    "    # Build Hamiltonian and calculate unitary evolution operators.\n",
    "    hamiltonian = drive_term + frequency_term + anharmonicity_term\n",
    "    unitary = graph.time_evolution_operators_pwc(\n",
    "        hamiltonian=hamiltonian, sample_times=np.array([duration])\n",
    "    )\n",
    "    unitary = unitary[:, -1]\n",
    "\n",
    "    # Evolve initial state and calculate final (normalized) populations.\n",
    "    final_state = unitary @ initial_state[:, None]\n",
    "    populations = graph.abs(final_state) ** 2\n",
    "\n",
    "    # Apply the confusion matrix to the populations.\n",
    "    populations = confusion_matrix @ populations\n",
    "    populations.name = \"populations\"\n",
    "\n",
    "    # Execute graph and retrieve the populations.\n",
    "    result = bo.execute_graph(graph, \"populations\")\n",
    "    populations = result[\"output\"][\"populations\"][\"value\"].squeeze(axis=2)\n",
    "\n",
    "    # Simulate measurements for each control.\n",
    "    measurements_list = []\n",
    "    for p in populations:\n",
    "        # Sample and store measurements.\n",
    "        measurements = rng.choice(3, size=shot_count, p=p / np.sum(p))\n",
    "        measurements_list.append(measurements)\n",
    "\n",
    "    return np.array(measurements_list)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1. Import libraries\n",
    "\n",
    "Before doing any calculation with Boulder Opal, you always need to import the necessary libraries.\n",
    "\n",
    "In this case, import the `numpy`, `matplotlib.pyplot`, `qctrlvisualizer`, and `boulderopal` packages.\n",
    "To learn more about installing Boulder Opal, see the [Get started](https://docs.q-ctrl.com/boulder-opal/toolkit/get-started-with-boulder-opal-toolkit) guide."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Import packages.\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import qctrlvisualizer\n",
    "import boulderopal as bo\n",
    "\n",
    "# Apply Q-CTRL style to plots created in pyplot.\n",
    "plt.style.use(qctrlvisualizer.get_qctrl_style())\n",
    "\n",
    "# Mute messages from Boulder Opal calls.\n",
    "bo.cloud.set_verbosity(\"QUIET\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2. Configure closed-loop optimization\n",
    "\n",
    "#### Define the bounds\n",
    "\n",
    "First, define the per-parameter bounds on the test points, which limit the values the controls generated by the optimizer can take.\n",
    "As there's no reason to treat any of the pulse segments differently, use uniform bounds, with a lower bound of 0 and an upper one of 1.\n",
    "Create an array of shape `(segment_count, 2)` representing the lower and upper bounds for each optimization parameter, and use it to create a `boulderopal.closed_loop.Bounds` object."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Number of segments in the control.\n",
    "segment_count = 10\n",
    "\n",
    "# Duration of each control.\n",
    "duration = 100  # ns\n",
    "\n",
    "# Number of projective measurements to take after the control is applied.\n",
    "shot_count = 1000\n",
    "\n",
    "# Define optimization bounds.\n",
    "bounds = bo.closed_loop.Bounds(np.repeat([[0.0, 1.0]], segment_count, axis=0))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Define the optimizer\n",
    "\n",
    "Next, you will set up a [CMA-ES](https://en.wikipedia.org/wiki/CMA-ES) optimizer to carry out your optimization.\n",
    "You can read our [Choosing a control-design (optimization) strategy in Boulder Opal](https://docs.q-ctrl.com/boulder-opal/toolkit/discover/adopt/compare-control-design-optimization-strategies-in-boulder-opal#closed-loop-experimental-optimization) topic to learn more about the optimization routines available in Boulder Opal.\n",
    "Each one of them has their own strengths, and will require a slightly different setup in this step.\n",
    "\n",
    "Create a `boulderopal.closed_loop.Cmaes` object with the bounds for the optimization parameters.\n",
    "You can also pass it an integer `seed` for the random number generator that the optimizer will use internally if you want the optimizer to generate deterministic results."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Define the closed-loop optimizer.\n",
    "optimizer = bo.closed_loop.Cmaes(bounds=bounds, seed=0)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Create a function to calculate the cost from the controls\n",
    "\n",
    "The optimizer will aim to find the minimum of a cost function that takes in a set of parameters (controls) and returns their associated costs. In this case, the cost function must be suitable for the task of performing an X gate on the qubit. As this is equivalent to maximizing the probability of finding the qubit in state $|1\\rangle$, define the cost for each control as one minus the probability of finding the qubit in state $|1\\rangle$.\n",
    "\n",
    "This can be calculated by calling the experiment function (`run_experiments`) which returns an array with the qubit measurements associated to each control. \n",
    "For each control, the measurements are a list of 0, 1, or 2, corresponding to the measured qubit state after the control is applied."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Calculate cost from experiment results.\n",
    "def cost_function(controls, duration, shot_count):\n",
    "    \"\"\"\n",
    "    Accepts an array of controls and returns their associated costs.\n",
    "    \"\"\"\n",
    "    measurements = run_experiments(controls, duration, shot_count)\n",
    "\n",
    "    costs = []\n",
    "    for shots in measurements:\n",
    "        shots_in_one = np.count_nonzero(shots == 1)\n",
    "        fidelity = shots_in_one / len(shots)\n",
    "        costs.append(1 - fidelity)\n",
    "\n",
    "    return np.array(costs)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### Create an initial set of results to seed the optimizer\n",
    "\n",
    "Next, you need to create a set of initial controls.\n",
    "If you had some pulses that you want to refine you could use those, but since you don't, you can generate a random set of pulses.\n",
    "\n",
    "Start by defining the parameters for the controls that you want to obtain, the number of piecewise-constant segments and the duration.\n",
    "Next we define the experimental parameters, the number of projective measurements (shots) you want to take after each control and the number of controls (test points) you want to test at each optimization iteration.\n",
    "For the [the CMA-ES optimizer](https://docs.q-ctrl.com/references/boulder-opal/boulderopal/closed_loop/Cmaes), it is recommended to make sure that `test_point_count` is at least $4 + 3 \\log(N)$ where $N$ is the number of optimizable parameters.\n",
    "\n",
    "With these parameters, create an array of shape `(test_point_count, segment_count)` random values for the controls to start the optimization with."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Number of controls to retrieve from the optimizer each run.\n",
    "test_point_count = 40\n",
    "\n",
    "# Define parameters as a set of controls with piecewise-constant segments.\n",
    "rng = np.random.default_rng(seed=0)\n",
    "initial_controls = rng.uniform(0.0, 1.0, size=(test_point_count, segment_count))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 3. Execute optimization loop\n",
    "\n",
    "You now have all of the elements to create a closed optimization loop to obtain the best controls.\n",
    "\n",
    "To run the closed-loop optimization, use the function `boulderopal.closed_loop.optimize`. This starts an iterative cycle, where on each iteration the optimizer suggests new test points predicted to have a low cost.\n",
    "This cycle keeps going until the best cost is lower than the target cost, `target_cost`.\n",
    "\n",
    "It is a good idea to set a maximum number of iterations in case the problem is hard for the optimizer to converge.\n",
    "\n",
    "The function will return a dictionary with the results of the optimization, namely, the best parameters `parameters`, their associated cost `cost`, and the history of best cost values `cost_history`."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Running closed loop optimization\n",
      "-----------------------------------------------\n",
      "  Optimizer             : CMA-ES\n",
      "  Number of test points : 40\n",
      "  Number of parameters  : 10\n",
      "-----------------------------------------------\n",
      "\n",
      "Calling cost function…\n",
      "  Initial best cost: 8.600e-02\n",
      "\n",
      "Running optimizer…\n",
      "Calling cost function…\n",
      "  Best cost after 1 iterations: 5.900e-02\n",
      "\n",
      "Running optimizer…\n",
      "Calling cost function…\n",
      "  Best cost after 2 iterations: 5.900e-02\n",
      "\n",
      "Running optimizer…\n",
      "Calling cost function…\n",
      "  Best cost after 3 iterations: 4.900e-02\n",
      "\n",
      "Running optimizer…\n",
      "Calling cost function…\n",
      "  Best cost after 4 iterations: 4.900e-02\n",
      "\n",
      "Running optimizer…\n",
      "Calling cost function…\n",
      "  Best cost after 5 iterations: 4.900e-02\n",
      "\n",
      "Running optimizer…\n",
      "Calling cost function…\n",
      "  Best cost after 6 iterations: 4.900e-02\n",
      "\n",
      "Running optimizer…\n",
      "Calling cost function…\n",
      "  Best cost after 7 iterations: 4.900e-02\n",
      "\n",
      "Running optimizer…\n",
      "Calling cost function…\n",
      "  Best cost after 8 iterations: 4.900e-02\n",
      "\n",
      "Running optimizer…\n",
      "Calling cost function…\n",
      "  Best cost after 9 iterations: 4.900e-02\n",
      "\n",
      "Running optimizer…\n",
      "Calling cost function…\n",
      "  Best cost after 10 iterations: 4.900e-02\n",
      "\n",
      "Running optimizer…\n",
      "Calling cost function…\n",
      "  Best cost after 11 iterations: 4.900e-02\n",
      "\n",
      "Running optimizer…\n",
      "Calling cost function…\n",
      "  Best cost after 12 iterations: 4.900e-02\n",
      "\n",
      "Running optimizer…\n",
      "Calling cost function…\n",
      "  Best cost after 13 iterations: 4.900e-02\n",
      "\n",
      "Running optimizer…\n",
      "Calling cost function…\n",
      "  Best cost after 14 iterations: 4.900e-02\n",
      "\n",
      "Running optimizer…\n",
      "Calling cost function…\n",
      "  Best cost after 15 iterations: 1.900e-02\n",
      "\n",
      "Target cost reached. Stopping the optimization.\n"
     ]
    }
   ],
   "source": [
    "# Maximum number of closed-loop iterations to perform.\n",
    "max_iteration_count = 20\n",
    "\n",
    "# Target cost to achieve.\n",
    "target_cost = 0.02\n",
    "\n",
    "# Run the optimization loop until the cost (infidelity) is sufficiently small.\n",
    "results = bo.closed_loop.optimize(\n",
    "    cost_function=lambda controls: cost_function(\n",
    "        controls, duration=duration, shot_count=shot_count\n",
    "    ),\n",
    "    initial_parameters=initial_controls,\n",
    "    optimizer=optimizer,\n",
    "    target_cost=target_cost,\n",
    "    max_iteration_count=max_iteration_count,\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "You can see that as the iterations progress, the best cost found by the optimizer gets smaller until it reaches the target cost and the optimization stops."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 4. Retrieve the best results obtained by the optimizer\n",
    "\n",
    "You can now print the best cost and controls the optimizer has achieved and visualize them with the [`plot_controls`](https://docs.q-ctrl.com/references/qctrl-visualizer/qctrlvisualizer/plot_controls) function from the Q-CTRL Visualizer."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best cost reached: 0.019\n",
      "Best control values: [0.363 0.518 0.353 0.34  0.    1.    0.234 0.576 0.401 0.775]\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 720x180 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Print final best cost.\n",
    "print(f\"Best cost reached: {results['cost']:.3f}\")\n",
    "\n",
    "# Print and plot controls that correspond to the best cost.\n",
    "print(f\"Best control values: {np.round(results['parameters'], 3)}\")\n",
    "\n",
    "qctrlvisualizer.plot_controls(\n",
    "    {\n",
    "        r\"$\\Omega(t)$\": {\n",
    "            \"durations\": np.repeat(duration / segment_count, segment_count),\n",
    "            \"values\": results[\"parameters\"],\n",
    "        }\n",
    "    },\n",
    "    two_pi_factor=False,\n",
    "    unit_symbol=\" a.u.\",\n",
    ")\n",
    "plt.suptitle(\"Best control\")\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Notice that your result for the best control will look different to the one plotted here due to a different random initialization of the optimizer."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 5. Visualize the convergence of the optimizer\n",
    "\n",
    "You can also plot the cost history during the optimization, and see its decrease until it crosses the target threshold.\n",
    "You can easily do this with the [`plot_cost_histories`](https://docs.q-ctrl.com/references/qctrl-visualizer/qctrlvisualizer/plot_cost_histories) function from the Q-CTRL Visualizer."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 720x360 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "qctrlvisualizer.plot_cost_histories(results[\"cost_history\"])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 6. Compare initial and converged parameters\n",
    "\n",
    "Finally we can compare the initial and optimized distributions of measurements.\n",
    "For this plot, you will contrast the optimized controls with the best initial controls (the controls which have the highest probability of finding the qubit in $|1\\rangle$).\n",
    "\n",
    "As expected the converged controls perform substantially better than the random initial controls."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best initial probabilities: [0.088 0.902 0.01 ]\n",
      "Optimized probabilities: [0.009 0.98  0.011]\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 720x360 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Obtain a set of initial experimental results.\n",
    "measurements = run_experiments(\n",
    "    controls=initial_controls, duration=duration, shot_count=shot_count\n",
    ")\n",
    "\n",
    "# Find the best initial (random) control.\n",
    "best_initial_control = np.argmax(np.count_nonzero(measurements == 1, axis=1))\n",
    "initial_best_counts = np.unique(\n",
    "    measurements[best_initial_control], return_counts=True, axis=0\n",
    ")[1]\n",
    "initial_best_probability = initial_best_counts / shot_count\n",
    "print(f\"Best initial probabilities: {initial_best_probability}\")\n",
    "\n",
    "\n",
    "# Obtain a set of converged experimental results.\n",
    "measurements = run_experiments(\n",
    "    controls=np.array([results[\"parameters\"]]), duration=duration, shot_count=shot_count\n",
    ")\n",
    "optimized_counts = np.unique(measurements, return_counts=True)[1]\n",
    "optimized_probability = optimized_counts / shot_count\n",
    "print(f\"Optimized probabilities: {optimized_probability}\")\n",
    "\n",
    "# Plot distribution of measurements for the initial & converged sets of pulses.\n",
    "plt.bar(\n",
    "    np.arange(3) - 0.1, optimized_probability, width=0.2, label=\"Optimized controls\"\n",
    ")\n",
    "plt.bar(\n",
    "    np.arange(3) + 0.1,\n",
    "    initial_best_probability,\n",
    "    width=0.2,\n",
    "    label=\"Best initial controls\",\n",
    ")\n",
    "plt.legend()\n",
    "plt.ylabel(\"Probability\")\n",
    "plt.xlabel(\"Measurement results\")\n",
    "plt.xticks(np.arange(3))\n",
    "\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "This concludes the tutorial. Congratulations on running a closed-loop optimization!\n",
    "\n",
    "You can now try to change the optimization loop you are running here by changing the optimization parameters or using a different [optimizer](https://docs.q-ctrl.com/references/boulder-opal/boulderopal/closed_loop#classes).\n",
    "You can also play around with the function simulating the experiment and, for instance, make it harder or easier for the optimizer to find solutions by changing the confusion matrix or the anharmonicity in the system.\n",
    "\n",
    "Our [user guides](https://docs.q-ctrl.com/boulder-opal) offer more examples and problems to which you can apply this automated optimization tool.\n",
    "In particular, you might be interested in reading about [obtaining optimal controls with other closed-loop optimization routines](https://docs.q-ctrl.com/boulder-opal/toolkit/automate/automate-closed-loop-optimization/how-to-automate-closed-loop-hardware-optimization) or [calibrating control hardware](https://docs.q-ctrl.com/boulder-opal/toolkit/automate/automate-closed-loop-optimization/how-to-automate-calibration-of-control-hardware).\n",
    "\n",
    "If you want to learn more about Boulder Opal and its capabilities, visit our [topics page](https://docs.q-ctrl.com/boulder-opal)."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.13"
  },
  "vscode": {
   "interpreter": {
    "hash": "8205af0cf92e71743549f83038e4bd76188c96d301281c9bd6c9e5bac04fb32a"
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
