[netcalc_form calc_html=”PCFET0NUWVBFIGh0bWw+CjxodG1sIGxhbmc9J2VuJz4KICAgIDxoZWFkPiIiCiAgICAgICAgPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC10eXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiLz4KICAgICAgICA8bWV0YSBuYW1lPSJ2aWV3cG9ydCIgY29udGVudD0id2lkdGg9ZGV2aWNlLXdpZHRoLCBpbml0aWFsLXNjYWxlPTEiPgogICAgICAgIDx0aXRsZT5OZXQgUHJpY2UgQ2FsY3VsYXRvcjwvdGl0bGU+CiAgICAgICAgPHN0eWxlPi8qIEFsbCBnbG9iYWwgdmFyaWFibGUgYW5kIGZ1bmN0aW9uIHJlZmVyZW5jZXMgc2hvdWxkIGJlIGltcG9ydGVkIGhlcmUgKi8KLyogQWxsIGdsb2JhbCB2YXJpYWJsZXMgc2hvdWxkIGJlIGRlY2xhcmVkIGhlcmUgKi8KLm5hdi1idXR0b24ucHVyZS1idXR0b24tcHJpbWFyeSB7CiAgbWluLWhlaWdodDogNDBweDsKICBtaW4td2lkdGg6IDE2MHB4OwogIGJhY2tncm91bmQtY29sb3I6ICMxNzgwMEE7CiAgYm9yZGVyOiAycHggc29saWQgIzE3ODAwQTsKICBmb250LWZhbWlseTogJ1BvcHBpbnMnOwogIGZvbnQtc2l6ZTogMjJweDsKICBjb2xvcjogd2hpdGU7IH0KICAubmF2LWJ1dHRvbi5wdXJlLWJ1dHRvbi1wcmltYXJ5OmRpc2FibGVkIHsKICAgIG9wYWNpdHk6IDE7IH0KICAgIC50aGVtZS1saWdodCAubmF2LWJ1dHRvbi5wdXJlLWJ1dHRvbi1wcmltYXJ5OmRpc2FibGVkIHsKICAgICAgY29sb3I6ICMwMDA7CiAgICAgIGJhY2tncm91bmQ6ICNiYmI7IH0KICAgIC50aGVtZS1kYXJrIC5uYXYtYnV0dG9uLnB1cmUtYnV0dG9uLXByaW1hcnk6ZGlzYWJsZWQgewogICAgICBjb2xvcjogI2Y1ZjVmNTsKICAgICAgYmFja2dyb3VuZDogIzUyNTI1MjsgfQogIC5uYXYtYnV0dG9uLnB1cmUtYnV0dG9uLXByaW1hcnk6YWN0aXZlLCAubmF2LWJ1dHRvbi5wdXJlLWJ1dHRvbi1wcmltYXJ5OmhvdmVyIHsKICAgIGNvbG9yOiAjMTc4MDBBOwogICAgYm9yZGVyOiAycHggc29saWQgIzE3ODAwQTsgfQogICAgLnRoZW1lLWxpZ2h0IC5uYXYtYnV0dG9uLnB1cmUtYnV0dG9uLXByaW1hcnk6YWN0aXZlLCAudGhlbWUtbGlnaHQgLm5hdi1idXR0b24ucHVyZS1idXR0b24tcHJpbWFyeTpob3ZlciB7CiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7IH0KICAgIC50aGVtZS1kYXJrIC5uYXYtYnV0dG9uLnB1cmUtYnV0dG9uLXByaW1hcnk6YWN0aXZlLCAudGhlbWUtZGFyayAubmF2LWJ1dHRvbi5wdXJlLWJ1dHRvbi1wcmltYXJ5OmhvdmVyIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzExMTsgfQogIC5uYXYtYnV0dG9uLnB1cmUtYnV0dG9uLXByaW1hcnk6Zm9jdXMgewogICAgY29sb3I6ICMxNzgwMEE7CiAgICBib3JkZXI6IDJweCBzb2xpZCAjZGQ4YTA0OyB9CiAgICAudGhlbWUtbGlnaHQgLm5hdi1idXR0b24ucHVyZS1idXR0b24tcHJpbWFyeTpmb2N1cyB7CiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7IH0KICAgIC50aGVtZS1kYXJrIC5uYXYtYnV0dG9uLnB1cmUtYnV0dG9uLXByaW1hcnk6Zm9jdXMgewogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTExOyB9CgovKiBBbGwgZ2xvYmFsIHZhcmlhYmxlIGFuZCBmdW5jdGlvbiByZWZlcmVuY2VzIHNob3VsZCBiZSBpbXBvcnRlZCBoZXJlICovCi8qIEFsbCBnbG9iYWwgdmFyaWFibGVzIHNob3VsZCBiZSBkZWNsYXJlZCBoZXJlICovCi5ucGMtbmF2LWJ1dHRvbi1yb3cgewogIG1hcmdpbi10b3A6IDIwcHg7CiAgdGV4dC1hbGlnbjogY2VudGVyOyB9CiAgLm5wYy1uYXYtYnV0dG9uLXJvdyAubmF2LWJ1dHRvbiB7CiAgICBkaXNwbGF5OiBpbmxpbmU7CiAgICBtYXJnaW46IDBweCAxNXB4IDE1cHggMTVweDsgfQoKLyogQWxsIGdsb2JhbCB2YXJpYWJsZSBhbmQgZnVuY3Rpb24gcmVmZXJlbmNlcyBzaG91bGQgYmUgaW1wb3J0ZWQgaGVyZSAqLwovKiBBbGwgZ2xvYmFsIHZhcmlhYmxlcyBzaG91bGQgYmUgZGVjbGFyZWQgaGVyZSAqLwoucmFkaW8tYnV0dG9uLWdyb3VwLXdyYXBwZXIgewogIGNvbG9yOiB3aGl0ZTsKICBmb250LWZhbWlseTogJ0NlbnR1cnkgR290aGljJzsKICBmb250LXNpemU6IDIxcHg7IH0KICAucmFkaW8tYnV0dG9uLWdyb3VwLXdyYXBwZXIgLnJhZGlvLWJ1dHRvbi1jb250YWluZXIgewogICAgd2lkdGg6IDEwMCU7IH0KICAgIC5yYWRpby1idXR0b24tZ3JvdXAtd3JhcHBlciAucmFkaW8tYnV0dG9uLWNvbnRhaW5lciArIC5yYWRpby1idXR0b24tY29udGFpbmVyIHsKICAgICAgbWFyZ2luLXRvcDogMTVweDsgfQogIC5yYWRpby1idXR0b24tZ3JvdXAtd3JhcHBlciAucHJldHR5IGlucHV0OmNoZWNrZWQgfiAuc3RhdGUucC1wcmltYXJ5IGxhYmVsOjphZnRlciwgLnJhZGlvLWJ1dHRvbi1ncm91cC13cmFwcGVyIC5wcmV0dHkucC10b2dnbGUgLnN0YXRlLnAtcHJpbWFyeSBsYWJlbDo6YWZ0ZXIgewogICAgYmFja2dyb3VuZC1jb2xvcjogIzFFQTIwQyAhaW1wb3J0YW50OwogICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDAuNzUpICFpbXBvcnRhbnQ7CiAgICAgICAgLW1zLXRyYW5zZm9ybTogc2NhbGUoMC43NSkgIWltcG9ydGFudDsKICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjc1KSAhaW1wb3J0YW50OyB9CgoubnBjLXNlY3Rpb24tZGVzY3JpcHRpb24gewogIHBhZGRpbmc6IDIwcHg7CiAgdGV4dC1hbGlnbjogY2VudGVyOwogIGZvbnQtc2l6ZTogMTZweDsKICBmb250LWZhbWlseTogJ0NlbnR1cnkgR290aGljJzsKICBmb250LXN0eWxlOiBpdGFsaWM7IH0KICAubnBjLXNlY3Rpb24tZGVzY3JpcHRpb24gcCB7CiAgICBmb250LWZhbWlseTogJ0NlbnR1cnkgR290aGljJzsgfQogICAgLm5wYy1zZWN0aW9uLWRlc2NyaXB0aW9uIHA6Zm9jdXMgewogICAgICBvdXRsaW5lOiAwOyB9CgpAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjdweCkgewogIC5ucGMtc2VjdGlvbi1kZXNjcmlwdGlvbiB7CiAgICBwYWRkaW5nOiAxNXB4OwogICAgdGV4dC1hbGlnbjogbGVmdDsKICAgIGZvbnQtc2l6ZTogMTZweDsgfQogICAgLm5wYy1zZWN0aW9uLWRlc2NyaXB0aW9uIHAgewogICAgICBtYXJnaW46IDBweDsgfSB9CgpAY2hhcnNldCAiVVRGLTgiOwovKiBBbGwgZ2xvYmFsIHZhcmlhYmxlIGFuZCBmdW5jdGlvbiByZWZlcmVuY2VzIHNob3VsZCBiZSBpbXBvcnRlZCBoZXJlICovCi8qIEFsbCBnbG9iYWwgdmFyaWFibGVzIHNob3VsZCBiZSBkZWNsYXJlZCBoZXJlICovCi5ucGMtc3RlcHBlci13cmFwcGVyIHsKICBkaXNwbGF5OiB0YWJsZTsKICB3aWR0aDogMTAwJTsKICBtYXJnaW46IDAgYXV0bzsKICBsZXR0ZXItc3BhY2luZzogbm9ybWFsOwogIHBhZGRpbmc6IDIwcHggMHB4IDIwcHggMHB4OwogIHotaW5kZXg6IDk7IH0KICAudGhlbWUtbGlnaHQgLm5wYy1zdGVwcGVyLXdyYXBwZXIgewogICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsgfQogIC50aGVtZS1kYXJrIC5ucGMtc3RlcHBlci13cmFwcGVyIHsKICAgIGJhY2tncm91bmQtY29sb3I6ICMxMTE7IH0KICAubnBjLXN0ZXBwZXItd3JhcHBlciAubnBjLXN0ZXAgewogICAgZGlzcGxheTogdGFibGUtY2VsbDsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsgfQogICAgLm5wYy1zdGVwcGVyLXdyYXBwZXIgLm5wYy1zdGVwOmZpcnN0LWNoaWxkIC5ucGMtc3RlcC1iYXItbGVmdCwKICAgIC5ucGMtc3RlcHBlci13cmFwcGVyIC5ucGMtc3RlcDpsYXN0LWNoaWxkIC5ucGMtc3RlcC1iYXItcmlnaHQgewogICAgICBkaXNwbGF5OiBub25lOyB9CiAgICAubnBjLXN0ZXBwZXItd3JhcHBlciAubnBjLXN0ZXAgLm5wYy1zdGVwLWNpcmNsZSB7CiAgICAgIHdpZHRoOiAyMHB4OwogICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgZm9udC13ZWlnaHQ6IDYwMDsgfQogICAgICAudGhlbWUtbGlnaHQgLm5wYy1zdGVwcGVyLXdyYXBwZXIgLm5wYy1zdGVwIC5ucGMtc3RlcC1jaXJjbGUgewogICAgICAgIGJvcmRlcjogMnB4IHNvbGlkICMwMDA7CiAgICAgICAgY29sb3I6ICMwMDA7IH0KICAgICAgLnRoZW1lLWRhcmsgLm5wYy1zdGVwcGVyLXdyYXBwZXIgLm5wYy1zdGVwIC5ucGMtc3RlcC1jaXJjbGUgewogICAgICAgIGJvcmRlcjogMnB4IHNvbGlkICNmNWY1ZjU7CiAgICAgICAgY29sb3I6ICNmNWY1ZjU7IH0KICAubnBjLXN0ZXBwZXItd3JhcHBlciAubnBjLXN0ZXAgewogICAgY3Vyc29yOiBub3QtYWxsb3dlZDsgfQogICAgLm5wYy1zdGVwcGVyLXdyYXBwZXIgLm5wYy1zdGVwLmFjdGl2ZSwgLm5wYy1zdGVwcGVyLXdyYXBwZXIgLm5wYy1zdGVwLmRvbmUgewogICAgICBjdXJzb3I6IHBvaW50ZXI7IH0KICAgIC5ucGMtc3RlcHBlci13cmFwcGVyIC5ucGMtc3RlcC5hY3RpdmUgLm5wYy1zdGVwLWNpcmNsZSB7CiAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OyB9CiAgICAgIC50aGVtZS1saWdodCAubnBjLXN0ZXBwZXItd3JhcHBlciAubnBjLXN0ZXAuYWN0aXZlIC5ucGMtc3RlcC1jaXJjbGUgewogICAgICAgIGNvbG9yOiAjMTc4MDBBOwogICAgICAgIGJvcmRlcjogMnB4IHNvbGlkICMxNzgwMEE7IH0KICAgICAgLnRoZW1lLWRhcmsgLm5wYy1zdGVwcGVyLXdyYXBwZXIgLm5wYy1zdGVwLmFjdGl2ZSAubnBjLXN0ZXAtY2lyY2xlIHsKICAgICAgICBjb2xvcjogIzFFQTIwQzsKICAgICAgICBib3JkZXI6IDJweCBzb2xpZCAjMUVBMjBDOyB9CiAgICAgIC5ucGMtc3RlcHBlci13cmFwcGVyIC5ucGMtc3RlcC5hY3RpdmUgLm5wYy1zdGVwLWNpcmNsZTpiZWZvcmUgewogICAgICAgIGZvbnQtd2VpZ2h0OiAxMDA7CiAgICAgICAgY29udGVudDogIlwyNzBFIjsgfQogICAgICAubnBjLXN0ZXBwZXItd3JhcHBlciAubnBjLXN0ZXAuYWN0aXZlIC5ucGMtc3RlcC1jaXJjbGUgKiB7CiAgICAgICAgZGlzcGxheTogbm9uZTsgfQogICAgLm5wYy1zdGVwcGVyLXdyYXBwZXIgLm5wYy1zdGVwLmRvbmU6bm90KC5ub24tZWRpdGFibGUpOmhvdmVyIHsKICAgICAgb3BhY2l0eTogMC42OyB9CiAgICAgIC50aGVtZS1saWdodCAubnBjLXN0ZXBwZXItd3JhcHBlciAubnBjLXN0ZXAuZG9uZTpub3QoLm5vbi1lZGl0YWJsZSk6aG92ZXIgLm5wYy1zdGVwLWNpcmNsZSB7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgYm9yZGVyOiAycHggc29saWQgIzE3ODAwQTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTc4MDBBOyB9CiAgICAgIC50aGVtZS1kYXJrIC5ucGMtc3RlcHBlci13cmFwcGVyIC5ucGMtc3RlcC5kb25lOm5vdCgubm9uLWVkaXRhYmxlKTpob3ZlciAubnBjLXN0ZXAtY2lyY2xlIHsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgICBib3JkZXI6IDJweCBzb2xpZCAjMUVBMjBDOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICMxRUEyMEM7IH0KICAgICAgLm5wYy1zdGVwcGVyLXdyYXBwZXIgLm5wYy1zdGVwLmRvbmU6bm90KC5ub24tZWRpdGFibGUpOmhvdmVyIC5ucGMtc3RlcC1jaXJjbGU6YmVmb3JlIHsKICAgICAgICBmb250LXdlaWdodDogMTAwOwogICAgICAgIGNvbnRlbnQ6ICJcMjcwRSI7IH0KICAgICAgLm5wYy1zdGVwcGVyLXdyYXBwZXIgLm5wYy1zdGVwLmRvbmU6bm90KC5ub24tZWRpdGFibGUpOmhvdmVyIC5ucGMtc3RlcC1jaXJjbGUgKiB7CiAgICAgICAgZGlzcGxheTogbm9uZTsgfQogICAgLnRoZW1lLWxpZ2h0IC5ucGMtc3RlcHBlci13cmFwcGVyIC5ucGMtc3RlcC5kb25lOm5vdCgubm9uLWVkaXRhYmxlKSAubnBjLXN0ZXAtY2lyY2xlIHsKICAgICAgY29sb3I6ICNmZmY7CiAgICAgIGJvcmRlcjogMnB4IHNvbGlkICMxNzgwMEE7CiAgICAgIGJhY2tncm91bmQtY29sb3I6ICMxNzgwMEE7IH0KICAgIC50aGVtZS1kYXJrIC5ucGMtc3RlcHBlci13cmFwcGVyIC5ucGMtc3RlcC5kb25lOm5vdCgubm9uLWVkaXRhYmxlKSAubnBjLXN0ZXAtY2lyY2xlIHsKICAgICAgY29sb3I6ICNmZmY7CiAgICAgIGJvcmRlcjogMnB4IHNvbGlkICMxRUEyMEM7CiAgICAgIGJhY2tncm91bmQtY29sb3I6ICMxRUEyMEM7IH0KICAgIC5ucGMtc3RlcHBlci13cmFwcGVyIC5ucGMtc3RlcC5kb25lOm5vdCgubm9uLWVkaXRhYmxlKSAubnBjLXN0ZXAtY2lyY2xlOmJlZm9yZSB7CiAgICAgIGZvbnQtd2VpZ2h0OiAxMDA7CiAgICAgIGNvbnRlbnQ6ICJcMjcxNCI7IH0KICAgIC5ucGMtc3RlcHBlci13cmFwcGVyIC5ucGMtc3RlcC5kb25lOm5vdCgubm9uLWVkaXRhYmxlKSAubnBjLXN0ZXAtY2lyY2xlICogewogICAgICBkaXNwbGF5OiBub25lOyB9CiAgICAubnBjLXN0ZXBwZXItd3JhcHBlciAubnBjLXN0ZXAubm9uLWVkaXRhYmxlIHsKICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsgfQogICAgICAudGhlbWUtbGlnaHQgLm5wYy1zdGVwcGVyLXdyYXBwZXIgLm5wYy1zdGVwLm5vbi1lZGl0YWJsZSAubnBjLXN0ZXAtY2lyY2xlIHsKICAgICAgICBjb2xvcjogIzE3ODAwQTsKICAgICAgICBib3JkZXI6IDJweCBzb2xpZCAjMTc4MDBBOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNiYmI7IH0KICAgICAgLnRoZW1lLWRhcmsgLm5wYy1zdGVwcGVyLXdyYXBwZXIgLm5wYy1zdGVwLm5vbi1lZGl0YWJsZSAubnBjLXN0ZXAtY2lyY2xlIHsKICAgICAgICBjb2xvcjogIzFFQTIwQzsKICAgICAgICBib3JkZXI6IDJweCBzb2xpZCAjMUVBMjBDOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICM1MjUyNTI7IH0KICAgICAgLm5wYy1zdGVwcGVyLXdyYXBwZXIgLm5wYy1zdGVwLm5vbi1lZGl0YWJsZSAubnBjLXN0ZXAtY2lyY2xlOmJlZm9yZSB7CiAgICAgICAgZm9udC13ZWlnaHQ6IDEwMDsKICAgICAgICBjb250ZW50OiAiXDI3MTQiOyB9CiAgICAgIC5ucGMtc3RlcHBlci13cmFwcGVyIC5ucGMtc3RlcC5ub24tZWRpdGFibGUgLm5wYy1zdGVwLWNpcmNsZSAqIHsKICAgICAgICBkaXNwbGF5OiBub25lOyB9CiAgICAubnBjLXN0ZXBwZXItd3JhcHBlciAubnBjLXN0ZXAubmEgewogICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOyB9CiAgICAgIC5ucGMtc3RlcHBlci13cmFwcGVyIC5ucGMtc3RlcC5uYSAubnBjLXN0ZXAtY2lyY2xlIHsKICAgICAgICBvcGFjaXR5OiAwLjc7IH0KICAgICAgICAudGhlbWUtbGlnaHQgLm5wYy1zdGVwcGVyLXdyYXBwZXIgLm5wYy1zdGVwLm5hIC5ucGMtc3RlcC1jaXJjbGUgewogICAgICAgICAgY29sb3I6ICMwMDAgIWltcG9ydGFudDsKICAgICAgICAgIGJvcmRlcjogMnB4IHNvbGlkICMwMDAgIWltcG9ydGFudDsKICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNiYmIgIWltcG9ydGFudDsgfQogICAgICAgIC50aGVtZS1kYXJrIC5ucGMtc3RlcHBlci13cmFwcGVyIC5ucGMtc3RlcC5uYSAubnBjLXN0ZXAtY2lyY2xlIHsKICAgICAgICAgIGNvbG9yOiAjZjVmNWY1ICFpbXBvcnRhbnQ7CiAgICAgICAgICBib3JkZXI6IDJweCBzb2xpZCAjZjVmNWY1ICFpbXBvcnRhbnQ7CiAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTI1MjUyICFpbXBvcnRhbnQ7IH0KICAgICAgICAubnBjLXN0ZXBwZXItd3JhcHBlciAubnBjLXN0ZXAubmEgLm5wYy1zdGVwLWNpcmNsZTpiZWZvcmUgewogICAgICAgICAgZm9udC13ZWlnaHQ6IDEwMDsKICAgICAgICAgIGNvbnRlbnQ6ICJcMjcxOCI7IH0KICAgICAgICAubnBjLXN0ZXBwZXItd3JhcHBlciAubnBjLXN0ZXAubmEgLm5wYy1zdGVwLWNpcmNsZSAqIHsKICAgICAgICAgIGRpc3BsYXk6IG5vbmU7IH0KICAgIC5ucGMtc3RlcHBlci13cmFwcGVyIC5ucGMtc3RlcCAubnBjLXN0ZXAtdGl0bGUgewogICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfQogICAgICAudGhlbWUtbGlnaHQgLm5wYy1zdGVwcGVyLXdyYXBwZXIgLm5wYy1zdGVwIC5ucGMtc3RlcC10aXRsZSB7CiAgICAgICAgY29sb3I6ICMwMDA7IH0KICAgICAgLnRoZW1lLWRhcmsgLm5wYy1zdGVwcGVyLXdyYXBwZXIgLm5wYy1zdGVwIC5ucGMtc3RlcC10aXRsZSB7CiAgICAgICAgY29sb3I6ICNmNWY1ZjU7IH0KICAgIC5ucGMtc3RlcHBlci13cmFwcGVyIC5ucGMtc3RlcC5hY3RpdmUgLm5wYy1zdGVwLXRpdGxlLCAubnBjLXN0ZXBwZXItd3JhcHBlciAubnBjLXN0ZXAuZG9uZTpub3QoLm5hKSAubnBjLXN0ZXAtdGl0bGUgewogICAgICBmb250LXdlaWdodDogNjAwOyB9CiAgICAgIC50aGVtZS1saWdodCAubnBjLXN0ZXBwZXItd3JhcHBlciAubnBjLXN0ZXAuYWN0aXZlIC5ucGMtc3RlcC10aXRsZSwgLnRoZW1lLWxpZ2h0IC5ucGMtc3RlcHBlci13cmFwcGVyIC5ucGMtc3RlcC5kb25lOm5vdCgubmEpIC5ucGMtc3RlcC10aXRsZSB7CiAgICAgICAgY29sb3I6ICMxNzgwMEE7IH0KICAgICAgLnRoZW1lLWRhcmsgLm5wYy1zdGVwcGVyLXdyYXBwZXIgLm5wYy1zdGVwLmFjdGl2ZSAubnBjLXN0ZXAtdGl0bGUsIC50aGVtZS1kYXJrIC5ucGMtc3RlcHBlci13cmFwcGVyIC5ucGMtc3RlcC5kb25lOm5vdCgubmEpIC5ucGMtc3RlcC10aXRsZSB7CiAgICAgICAgY29sb3I6ICMxRUEyMEM7IH0KICAgIC5ucGMtc3RlcHBlci13cmFwcGVyIC5ucGMtc3RlcC5kb25lIC5ucGMtc3RlcC10aXRsZSB7CiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7IH0KICAgIC5ucGMtc3RlcHBlci13cmFwcGVyIC5ucGMtc3RlcCAubnBjLXN0ZXAtYmFyLWxlZnQgewogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIHRvcDogMTFweDsKICAgICAgaGVpZ2h0OiAxcHg7CiAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZGRkZGRkOyB9CiAgICAubnBjLXN0ZXBwZXItd3JhcHBlciAubnBjLXN0ZXAgLm5wYy1zdGVwLWJhci1yaWdodCB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgdG9wOiAxMXB4OwogICAgICBoZWlnaHQ6IDFweDsKICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNkZGRkZGQ7CiAgICAgIHJpZ2h0OiAwOwogICAgICBsZWZ0OiA1MCU7CiAgICAgIG1hcmdpbi1sZWZ0OiAyMHB4OyB9CiAgICAubnBjLXN0ZXBwZXItd3JhcHBlciAubnBjLXN0ZXAgLm5wYy1zdGVwLWJhci1sZWZ0IHsKICAgICAgbGVmdDogMDsKICAgICAgcmlnaHQ6IDUwJTsKICAgICAgbWFyZ2luLXJpZ2h0OiAyMHB4OyB9CgpAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjdweCkgewogIC5ucGMtc3RlcHBlci13cmFwcGVyIC5ucGMtc3RlcCAubnBjLXN0ZXAtdGl0bGUgewogICAgbWFyZ2luLXRvcDogMTBweDsKICAgIGZvbnQtc2l6ZTogMTNweDsKICAgIGZvbnQtd2VpZ2h0OiA0MDA7IH0gfQoKLyogQWxsIGdsb2JhbCB2YXJpYWJsZSBhbmQgZnVuY3Rpb24gcmVmZXJlbmNlcyBzaG91bGQgYmUgaW1wb3J0ZWQgaGVyZSAqLwovKiBBbGwgZ2xvYmFsIHZhcmlhYmxlcyBzaG91bGQgYmUgZGVjbGFyZWQgaGVyZSAqLwouYW5zd2VyLWlucHV0LXdyYXBwZXIgaW5wdXQ6cmVxdWlyZWQ6aW52YWxpZCB7CiAgb3V0bGluZTogbm9uZTsKICAtd2Via2l0LWJveC1zaGFkb3c6IDAgMCAwcHggcmVkOwogICAgICAgICAgYm94LXNoYWRvdzogMCAwIDBweCByZWQ7IH0KCi5hbnN3ZXItaW5wdXQtd3JhcHBlciBpbnB1dFt0eXBlPSJ0ZXh0Il0sCi5hbnN3ZXItaW5wdXQtd3JhcHBlciBpbnB1dFt0eXBlPSJudW1iZXIiXSB7CiAgaGVpZ2h0OiAzMHB4OwogIHdpZHRoOiA2MHB4OwogIGJvcmRlci1yYWRpdXM6IDVweDsKICBib3JkZXItc3R5bGU6IG5vbmU7CiAgcGFkZGluZzogMHB4IDVweCAwcHggNXB4OyB9CiAgLnRoZW1lLWxpZ2h0IC5hbnN3ZXItaW5wdXQtd3JhcHBlciBpbnB1dFt0eXBlPSJ0ZXh0Il0sIC50aGVtZS1saWdodAogIC5hbnN3ZXItaW5wdXQtd3JhcHBlciBpbnB1dFt0eXBlPSJudW1iZXIiXSB7CiAgICBib3JkZXI6IDFweCBzb2xpZCAjMTExOwogICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKICAgIGNvbG9yOiAjMTExOyB9CiAgLnRoZW1lLWRhcmsgLmFuc3dlci1pbnB1dC13cmFwcGVyIGlucHV0W3R5cGU9InRleHQiXSwgLnRoZW1lLWRhcmsKICAuYW5zd2VyLWlucHV0LXdyYXBwZXIgaW5wdXRbdHlwZT0ibnVtYmVyIl0gewogICAgYm9yZGVyOiAxcHggc29saWQgI2ZmZjsKICAgIGJhY2tncm91bmQtY29sb3I6ICM1MjUyNTI7CiAgICBjb2xvcjogI2ZmZjsgfQogIC5hbnN3ZXItaW5wdXQtd3JhcHBlciBpbnB1dFt0eXBlPSJ0ZXh0Il06Zm9jdXMsCiAgLmFuc3dlci1pbnB1dC13cmFwcGVyIGlucHV0W3R5cGU9Im51bWJlciJdOmZvY3VzIHsKICAgIG91dGxpbmU6IDFweCBkb3R0ZWQgYmxhY2s7IH0KCi5hbnN3ZXItaW5wdXQtd3JhcHBlciAucmFkaW8tb3B0aW9uLXdyYXBwZXIgewogIG1hcmdpbjogMHB4IDBweCAxMHB4IDBweDsKICBwYWRkaW5nLWxlZnQ6IDI1cHg7IH0KICAuYW5zd2VyLWlucHV0LXdyYXBwZXIgLnJhZGlvLW9wdGlvbi13cmFwcGVyIGxhYmVsIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGN1cnNvcjogcG9pbnRlcjsgfQoKLmFuc3dlci1pbnB1dC13cmFwcGVyIGlucHV0W3R5cGU9InJhZGlvIl0gewogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICBtYXJnaW46IDNweCAxMHB4IDAgLTI1cHg7CiAgaGVpZ2h0OiAxOXB4OwogIHdpZHRoOiAxOXB4OwogIGJvcmRlcjogMHB4OwogIGN1cnNvcjogcG9pbnRlcjsgfQogIC5hbnN3ZXItaW5wdXQtd3JhcHBlciBpbnB1dFt0eXBlPSJyYWRpbyJdOmJlZm9yZSB7CiAgICBjb250ZW50OiAiIjsKICAgIC13ZWJraXQtdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gMC40cyBjdWJpYy1iZXppZXIoMC40NSwgMS44LCAwLjUsIDAuNzUpOwogICAgdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gMC40cyBjdWJpYy1iZXppZXIoMC40NSwgMS44LCAwLjUsIDAuNzUpOwogICAgLW8tdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuNHMgY3ViaWMtYmV6aWVyKDAuNDUsIDEuOCwgMC41LCAwLjc1KTsKICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjRzIGN1YmljLWJlemllcigwLjQ1LCAxLjgsIDAuNSwgMC43NSk7CiAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC40cyBjdWJpYy1iZXppZXIoMC40NSwgMS44LCAwLjUsIDAuNzUpLCAtd2Via2l0LXRyYW5zZm9ybSAwLjRzIGN1YmljLWJlemllcigwLjQ1LCAxLjgsIDAuNSwgMC43NSk7CiAgICAtd2Via2l0LXRyYW5zZm9ybTogc2NhbGUoMCwgMCk7CiAgICAgICAgLW1zLXRyYW5zZm9ybTogc2NhbGUoMCwgMCk7CiAgICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMCwgMCk7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICBtYXJnaW4tdG9wOiAzcHg7CiAgICBtYXJnaW4tbGVmdDogM3B4OwogICAgei1pbmRleDogMTsKICAgIHdpZHRoOiAxMnB4OwogICAgaGVpZ2h0OiAxMnB4OwogICAgYmFja2dyb3VuZDogIzE3ODAwQTsKICAgIGJvcmRlci1yYWRpdXM6IDUwJTsgfQogIC5hbnN3ZXItaW5wdXQtd3JhcHBlciBpbnB1dFt0eXBlPSJyYWRpbyJdOmNoZWNrZWQ6YmVmb3JlIHsKICAgIC13ZWJraXQtdHJhbnNmb3JtOiBzY2FsZSgxLCAxKTsKICAgICAgICAtbXMtdHJhbnNmb3JtOiBzY2FsZSgxLCAxKTsKICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLCAxKTsgfQogIC5hbnN3ZXItaW5wdXQtd3JhcHBlciBpbnB1dFt0eXBlPSJyYWRpbyJdOmZvY3VzIHsKICAgIG91dGxpbmU6IDFweCBkb3R0ZWQgYmxhY2s7IH0KCkAtbW96LWRvY3VtZW50IHVybC1wcmVmaXgoKSB7CiAgLmFuc3dlci1pbnB1dC13cmFwcGVyIGlucHV0W3R5cGU9InJhZGlvIl0gewogICAgaGVpZ2h0OiBhdXRvICFpbXBvcnRhbnQ7CiAgICB3aWR0aDogYXV0byAhaW1wb3J0YW50OyB9IH0KCi5hbnN3ZXItaW5wdXQtd3JhcHBlciBzZWxlY3QgewogIGhlaWdodDogNDBweDsKICBib3JkZXItcmFkaXVzOiA1cHg7CiAgYm9yZGVyLXN0eWxlOiBub25lOwogIGJvcmRlcjogMXB4IHNvbGlkICNjY2M7CiAgbWluLXdpZHRoOiAyMDBweDsKICBwYWRkaW5nOiAwcHggNXB4IDBweCA1cHg7CiAgZm9udC1zaXplOiBpbmhlcml0OwogIGJhY2tncm91bmQtY29sb3I6ICNmZmY7IH0KICAudGhlbWUtbGlnaHQgLmFuc3dlci1pbnB1dC13cmFwcGVyIHNlbGVjdCB7CiAgICBib3JkZXI6IDFweCBzb2xpZCAjMTExOwogICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKICAgIGNvbG9yOiAjMTExOyB9CiAgLnRoZW1lLWRhcmsgLmFuc3dlci1pbnB1dC13cmFwcGVyIHNlbGVjdCB7CiAgICBib3JkZXI6IDFweCBzb2xpZCAjZmZmOwogICAgYmFja2dyb3VuZC1jb2xvcjogIzUyNTI1MjsKICAgIGNvbG9yOiAjZmZmOyB9CiAgLmFuc3dlci1pbnB1dC13cmFwcGVyIHNlbGVjdCAucGxhY2Vob2xkZXIgewogICAgZGlzcGxheTogbm9uZTsgfQogIC5hbnN3ZXItaW5wdXQtd3JhcHBlciBzZWxlY3Q6Zm9jdXM6Oi1tcy12YWx1ZSB7CiAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OyB9CiAgICAudGhlbWUtbGlnaHQgLmFuc3dlci1pbnB1dC13cmFwcGVyIHNlbGVjdDpmb2N1czo6LW1zLXZhbHVlIHsKICAgICAgY29sb3I6ICMxMTE7IH0KICAgIC50aGVtZS1kYXJrIC5hbnN3ZXItaW5wdXQtd3JhcHBlciBzZWxlY3Q6Zm9jdXM6Oi1tcy12YWx1ZSB7CiAgICAgIGNvbG9yOiAjZmZmOyB9CiAgLmFuc3dlci1pbnB1dC13cmFwcGVyIHNlbGVjdDpmb2N1cyB7CiAgICBvdXRsaW5lOiAxcHggZG90dGVkIGJsYWNrOyB9CgpAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjdweCkgewogIC5hbnN3ZXItaW5wdXQtd3JhcHBlciBpbnB1dFt0eXBlPSJyYWRpbyJdIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIG1hcmdpbjogMXB4IDEwcHggMCAtMjVweDsKICAgIGhlaWdodDogMTlweDsKICAgIHdpZHRoOiAxOXB4OwogICAgYm9yZGVyOiAwcHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7IH0KICAgIC5hbnN3ZXItaW5wdXQtd3JhcHBlciBpbnB1dFt0eXBlPSJyYWRpbyJdOmJlZm9yZSB7CiAgICAgIHdpZHRoOiAxMnB4OwogICAgICBoZWlnaHQ6IDEycHg7CiAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gMC40cyBjdWJpYy1iZXppZXIoMC40NSwgMS44LCAwLjUsIDAuNzUpOwogICAgICB0cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAwLjRzIGN1YmljLWJlemllcigwLjQ1LCAxLjgsIDAuNSwgMC43NSk7CiAgICAgIC1vLXRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjRzIGN1YmljLWJlemllcigwLjQ1LCAxLjgsIDAuNSwgMC43NSk7CiAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjRzIGN1YmljLWJlemllcigwLjQ1LCAxLjgsIDAuNSwgMC43NSk7CiAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjRzIGN1YmljLWJlemllcigwLjQ1LCAxLjgsIDAuNSwgMC43NSksIC13ZWJraXQtdHJhbnNmb3JtIDAuNHMgY3ViaWMtYmV6aWVyKDAuNDUsIDEuOCwgMC41LCAwLjc1KTsKICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDAsIDApOwogICAgICAgICAgLW1zLXRyYW5zZm9ybTogc2NhbGUoMCwgMCk7CiAgICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLCAwKTsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICBtYXJnaW4tdG9wOiAzcHg7CiAgICAgIG1hcmdpbi1sZWZ0OiAzcHg7CiAgICAgIHotaW5kZXg6IDE7CiAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgY29udGVudDogIiI7IH0KICAgICAgLnRoZW1lLWxpZ2h0IC5hbnN3ZXItaW5wdXQtd3JhcHBlciBpbnB1dFt0eXBlPSJyYWRpbyJdOmJlZm9yZSB7CiAgICAgICAgYmFja2dyb3VuZDogIzE3ODAwQTsgfQogICAgICAudGhlbWUtZGFyayAuYW5zd2VyLWlucHV0LXdyYXBwZXIgaW5wdXRbdHlwZT0icmFkaW8iXTpiZWZvcmUgewogICAgICAgIGJhY2tncm91bmQ6ICMxRUEyMEM7IH0KICAgIC5hbnN3ZXItaW5wdXQtd3JhcHBlciBpbnB1dFt0eXBlPSJyYWRpbyJdOmNoZWNrZWQ6YmVmb3JlIHsKICAgICAgLXdlYmtpdC10cmFuc2Zvcm06IHNjYWxlKDEsIDEpOwogICAgICAgICAgLW1zLXRyYW5zZm9ybTogc2NhbGUoMSwgMSk7CiAgICAgICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLCAxKTsgfSB9CgoubnBjLXF1ZXN0aW9uLXdyYXBwZXIgewogIG1hcmdpbi1ib3R0b206IDI1cHg7IH0KICAubnBjLXF1ZXN0aW9uLXdyYXBwZXIgLnNlY3Rpb24td3JhcHBlciB7CiAgICBkaXNwbGF5OiAtd2Via2l0LWJveDsKICAgIGRpc3BsYXk6IC13ZWJraXQtZmxleDsKICAgIGRpc3BsYXk6IC1tb3otYm94OwogICAgZGlzcGxheTogLW1zLWZsZXhib3g7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgbWFyZ2luOiBhdXRvOyB9CiAgICAubnBjLXF1ZXN0aW9uLXdyYXBwZXIgLnNlY3Rpb24td3JhcHBlciAucXVlc3Rpb24tc2VjdGlvbiB7CiAgICAgIGZvbnQtd2VpZ2h0OiBpbmhlcml0OwogICAgICB3aWR0aDogMTAwJTsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICBtYXJnaW46IDBweDsKICAgICAgZm9udC1zaXplOiAyMXB4OwogICAgICBmb250LWZhbWlseTogJ0NlbnR1cnkgR290aGljJzsKICAgICAgZm9udC13ZWlnaHQ6IG1lZGl1bTsKICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICAgIHBhZGRpbmctcmlnaHQ6IDI1cHg7IH0KICAgICAgLm5wYy1xdWVzdGlvbi13cmFwcGVyIC5zZWN0aW9uLXdyYXBwZXIgLnF1ZXN0aW9uLXNlY3Rpb24gc3BhbiB7CiAgICAgICAgd2lkdGg6IDE1cHg7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHBhZGRpbmctcmlnaHQ6IDE1cHg7IH0KICAubnBjLXF1ZXN0aW9uLXdyYXBwZXIgLnF1ZXN0aW9uLXdyYXBwZXIgZmllbGRzZXQgewogICAgcGFkZGluZy1ib3R0b206IDBweDsKICAgIGJvcmRlcjogbm9uZTsgfQogICAgLm5wYy1xdWVzdGlvbi13cmFwcGVyIC5xdWVzdGlvbi13cmFwcGVyIGZpZWxkc2V0IGxlZ2VuZCB7CiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOyB9CiAgICAubnBjLXF1ZXN0aW9uLXdyYXBwZXIgLnF1ZXN0aW9uLXdyYXBwZXIgZmllbGRzZXQgLnF1ZXN0aW9uLXRleHQgewogICAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNjY2M7CiAgICAgIGZvbnQtZmFtaWx5OiAnQ2VudHVyeSBHb3RoaWMnOwogICAgICBmb250LXNpemU6IDIxcHg7CiAgICAgIHBhZGRpbmc6IDEwcHggMjVweCAxMHB4IDI1cHg7CiAgICAgIG1hcmdpbi10b3A6IDBweDsKICAgICAgbWFyZ2luLWJvdHRvbTogMHB4OyB9CiAgICAubnBjLXF1ZXN0aW9uLXdyYXBwZXIgLnF1ZXN0aW9uLXdyYXBwZXIgZmllbGRzZXQgLnF1ZXN0aW9uLWhlbHAgewogICAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNjY2M7CiAgICAgIGZvbnQtc2l6ZTogMTVweDsKICAgICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgICBwYWRkaW5nOiAxMHB4IDI1cHggMTBweCAyNXB4OwogICAgICBtYXJnaW4tdG9wOiAtMTBweDsgfQogICAgLm5wYy1xdWVzdGlvbi13cmFwcGVyIC5xdWVzdGlvbi13cmFwcGVyIGZpZWxkc2V0IC5lcnJvci1mb3JtYXQgewogICAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkICNjY2M7CiAgICAgIHBhZGRpbmc6IDEwcHggMjVweCAxMHB4IDI1cHg7CiAgICAgIG1hcmdpbi10b3A6IC0xMHB4OwogICAgICBjb2xvcjogY3JpbXNvbjsgfQogICAgLm5wYy1xdWVzdGlvbi13cmFwcGVyIC5xdWVzdGlvbi13cmFwcGVyIGZpZWxkc2V0IC5hbnN3ZXItd3JhcHBlciB7CiAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgI2NjYzsKICAgICAgZm9udC1mYW1pbHk6ICdDZW50dXJ5IEdvdGhpYyc7CiAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgcGFkZGluZzogMTBweCAyNXB4IDEwcHggMjVweDsKICAgICAgbWFyZ2luLXRvcDogLTEwcHg7CiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbDsgfQogIC5ucGMtcXVlc3Rpb24td3JhcHBlci5hY3RpdmUgLnF1ZXN0aW9uLXRleHQgewogICAgZGlzcGxheTogYmxvY2s7IH0KICAubnBjLXF1ZXN0aW9uLXdyYXBwZXIuYWN0aXZlIC5hbnN3ZXItd3JhcHBlciB7CiAgICBkaXNwbGF5OiBibG9jazsgfQoKQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY3cHgpIHsKICAubnBjLXF1ZXN0aW9uLXdyYXBwZXIgewogICAgbWFyZ2luLWJvdHRvbTogMjVweDsgfQogICAgLm5wYy1xdWVzdGlvbi13cmFwcGVyIC5zZWN0aW9uLXdyYXBwZXIgLnF1ZXN0aW9uLXNlY3Rpb24gewogICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgIHBhZGRpbmctbGVmdDogMTVweDsgfQogICAgLm5wYy1xdWVzdGlvbi13cmFwcGVyIC5xdWVzdGlvbi13cmFwcGVyIC5xdWVzdGlvbi10ZXh0IHsKICAgICAgZm9udC1mYW1pbHk6ICdDZW50dXJ5IEdvdGhpYyc7CiAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgcGFkZGluZzogMTBweCAxNXB4IDBweCAxNXB4OwogICAgICBtYXJnaW4tdG9wOiAwcHg7CiAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgYm9yZGVyLWxlZnQ6IDBweDsgfQogICAgLm5wYy1xdWVzdGlvbi13cmFwcGVyIC5xdWVzdGlvbi13cmFwcGVyIC5xdWVzdGlvbi1oZWxwIHsKICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgIHBhZGRpbmc6IDBweCAxNXB4IDEwcHggMTVweDsKICAgICAgYm9yZGVyLWxlZnQ6IDBweDsKICAgICAgbWFyZ2luLXRvcDogMHB4OyB9CiAgICAubnBjLXF1ZXN0aW9uLXdyYXBwZXIgLnF1ZXN0aW9uLXdyYXBwZXIgLmFuc3dlci13cmFwcGVyIHsKICAgICAgZm9udC1mYW1pbHk6ICdDZW50dXJ5IEdvdGhpYyc7CiAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgcGFkZGluZzogMHB4IDE1cHggMHB4IDE1cHg7CiAgICAgIG1hcmdpbi10b3A6IDBweDsKICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgICBib3JkZXItbGVmdDogMHB4OyB9IH0KCgoubnBjLWFjdGlvbi13cmFwcGVyIHsKICBtYXJnaW4tdG9wOiA0MHB4OyB9CiAgLm5wYy1hY3Rpb24td3JhcHBlciAuYWN0aW9uLWJ1dHRvbnMgLm5hdi1idXR0b24gewogICAgbWFyZ2luLWxlZnQ6IDUwcHg7IH0KICAgIC5ucGMtYWN0aW9uLXdyYXBwZXIgLmFjdGlvbi1idXR0b25zIC5uYXYtYnV0dG9uOmZpcnN0LW9mLXR5cGUgewogICAgICBtYXJnaW4tbGVmdDogMjVweDsgfQoKQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY3cHgpIHsKICAubnBjLWFjdGlvbi13cmFwcGVyIHsKICAgIG1hcmdpbi10b3A6IDMwcHg7IH0KICAgIC5ucGMtYWN0aW9uLXdyYXBwZXIgLmFjdGlvbi1idXR0b25zIHsKICAgICAgdGV4dC1hbGlnbjogY2VudGVyOyB9CiAgICAgIC5ucGMtYWN0aW9uLXdyYXBwZXIgLmFjdGlvbi1idXR0b25zIC5uYXYtYnV0dG9uOmxhc3Qtb2YtdHlwZSB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDEwcHg7IH0KICAgICAgLm5wYy1hY3Rpb24td3JhcHBlciAuYWN0aW9uLWJ1dHRvbnMgLm5hdi1idXR0b246Zmlyc3Qtb2YtdHlwZSB7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDBweDsgfSB9CgovKiBBbGwgZ2xvYmFsIHZhcmlhYmxlIGFuZCBmdW5jdGlvbiByZWZlcmVuY2VzIHNob3VsZCBiZSBpbXBvcnRlZCBoZXJlICovCi8qIEFsbCBnbG9iYWwgdmFyaWFibGVzIHNob3VsZCBiZSBkZWNsYXJlZCBoZXJlICovCi5oZWFkZXItd3JhcHBlciB7CiAgZm9udC1zaXplOiAyOHB4OwogIHBhZGRpbmc6IDMwcHggMjBweCA1cHggMjBweDsgfQogIC50aGVtZS1saWdodCAuaGVhZGVyLXdyYXBwZXIgewogICAgYmFja2dyb3VuZC1jb2xvcjogI2ZmZjsKICAgIGNvbG9yOiAjMTExOwogICAgLXdlYmtpdC1ib3gtc2hhZG93OiAwIDNweCA4cHggLTZweCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuNSk7CiAgICAgICAgICAgIGJveC1zaGFkb3c6IDAgM3B4IDhweCAtNnB4IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC41KTsgfQogIC50aGVtZS1kYXJrIC5oZWFkZXItd3JhcHBlciB7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTExOwogICAgY29sb3I6ICNmZmY7CiAgICAtd2Via2l0LWJveC1zaGFkb3c6IDAgM3B4IDhweCAtNnB4IHJnYmEoMTcsIDE3LCAxNywgMC41KTsKICAgICAgICAgICAgYm94LXNoYWRvdzogMCAzcHggOHB4IC02cHggcmdiYSgxNywgMTcsIDE3LCAwLjUpOyB9CiAgLmhlYWRlci13cmFwcGVyIC5jb250YWluZXIgewogICAgbGluZS1oZWlnaHQ6IDUwcHg7CiAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgLW8tdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KICAgIC5oZWFkZXItd3JhcHBlciAuY29udGFpbmVyIGgxIHsKICAgICAgcGFkZGluZzogaW5oZXJpdDsKICAgICAgbWFyZ2luOiBpbmhlcml0OwogICAgICBmb250LXNpemU6IGluaGVyaXQ7CiAgICAgIGZvbnQtd2VpZ2h0OiBpbmhlcml0OyB9CiAgICAgIC5oZWFkZXItd3JhcHBlciAuY29udGFpbmVyIGgxLmRlY29yYXRlZCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHBhZGRpbmc6IDBweCAzMHB4IDBweCAzMHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDIwcHg7IH0KICAgICAgICAudGhlbWUtbGlnaHQgLmhlYWRlci13cmFwcGVyIC5jb250YWluZXIgaDEuZGVjb3JhdGVkIHsKICAgICAgICAgIGNvbG9yOiAjMTExOwogICAgICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICMxMTE7IH0KICAgICAgICAudGhlbWUtZGFyayAuaGVhZGVyLXdyYXBwZXIgLmNvbnRhaW5lciBoMS5kZWNvcmF0ZWQgewogICAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgI2ZmZjsgfQoKQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY3cHgpIHsKICAuaGVhZGVyLXdyYXBwZXIgewogICAgZm9udC1zaXplOiAyMHB4OyB9IH0KCi8qIEFsbCBnbG9iYWwgdmFyaWFibGUgYW5kIGZ1bmN0aW9uIHJlZmVyZW5jZXMgc2hvdWxkIGJlIGltcG9ydGVkIGhlcmUgKi8KLyogQWxsIGdsb2JhbCB2YXJpYWJsZXMgc2hvdWxkIGJlIGRlY2xhcmVkIGhlcmUgKi8KLm5wYy1wYWdlLXdyYXBwZXIgewogIG1hcmdpbjogMHB4IGF1dG87IH0KICAubnBjLXBhZ2Utd3JhcHBlciAuY29udGFpbmVyIHsKICAgIG1hcmdpbjogMHB4IGF1dG87CiAgICBtYXgtd2lkdGg6IDEwMjRweDsgfQogIC5ucGMtcGFnZS13cmFwcGVyIG1haW4gewogICAgcGFkZGluZy1ib3R0b206IDUwcHg7IH0KCi8qIEFsbCBnbG9iYWwgdmFyaWFibGUgYW5kIGZ1bmN0aW9uIHJlZmVyZW5jZXMgc2hvdWxkIGJlIGltcG9ydGVkIGhlcmUgKi8KLyogQWxsIGdsb2JhbCB2YXJpYWJsZXMgc2hvdWxkIGJlIGRlY2xhcmVkIGhlcmUgKi8KLm5wYy1hZ3JlZW1lbnQtd3JhcHBlciB7CiAgcGFkZGluZzogMHB4IDIwcHg7CiAgZm9udC1zaXplOiAxOXB4OwogIGZvbnQtZmFtaWx5OiAnQ2VudHVyeSBHb3RoaWMnOwogIHRleHQtYWxpZ246IGNlbnRlcjsgfQogIC5ucGMtYWdyZWVtZW50LXdyYXBwZXIgLmFjdGlvbi13cmFwcGVyIHsKICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIG1hcmdpbi10b3A6IDI1cHg7IH0KICAubnBjLWFncmVlbWVudC13cmFwcGVyIC5hZ3JlZW1lbnQtdGV4dC13cmFwcGVyIHsKICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICBmb250LXNpemU6IDE2cHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCAjY2NjOwogICAgcGFkZGluZzogMHB4IDEwcHggMjBweCAxMHB4OwogICAgbWFyZ2luOiAwcHggNTBweCAwcHggNTBweDsgfQogIC50aGVtZS1saWdodCAubnBjLWFncmVlbWVudC13cmFwcGVyIGEgewogICAgY29sb3I6ICMwMTc0NzE7CiAgICBmb250LXN0eWxlOiBpdGFsaWM7IH0KICAudGhlbWUtZGFyayAubnBjLWFncmVlbWVudC13cmFwcGVyIGEgewogICAgY29sb3I6ICMwMGM0ZmY7CiAgICBmb250LXN0eWxlOiBpdGFsaWM7IH0KCkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2N3B4KSB7CiAgLm5wYy1hZ3JlZW1lbnQtd3JhcHBlciB7CiAgICBmb250LXNpemU6IDE0cHg7IH0KICAgIC5ucGMtYWdyZWVtZW50LXdyYXBwZXIgLmFjdGlvbi13cmFwcGVyIHsKICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICBib3R0b206IDY1cHg7CiAgICAgIGxlZnQ6IDBweDsKICAgICAgcGFkZGluZzogMTBweDsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsgfQogICAgICAudGhlbWUtbGlnaHQgLm5wYy1hZ3JlZW1lbnQtd3JhcHBlciAuYWN0aW9uLXdyYXBwZXIgewogICAgICAgIGJhY2tncm91bmQ6ICNmZmY7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICNiYmI7IH0KICAgICAgLnRoZW1lLWRhcmsgLm5wYy1hZ3JlZW1lbnQtd3JhcHBlciAuYWN0aW9uLXdyYXBwZXIgewogICAgICAgIGJhY2tncm91bmQ6ICMxMTE7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICM1MjUyNTI7IH0KICAgIC5ucGMtYWdyZWVtZW50LXdyYXBwZXIgLmFncmVlbWVudC10ZXh0LXdyYXBwZXIgewogICAgICBwYWRkaW5nOiAwcHggMTBweCAyMHB4IDEwcHg7CiAgICAgIG1hcmdpbjogMHB4IDE1cHggMHB4IDE1cHg7IH0gfQoKCgoKLm5wYy1yZXZpZXctd3JhcHBlciAuYW5zd2VyLXJvdyB7CiAgbWFyZ2luOiAwcHggYXV0bzsKICBwYWRkaW5nOiAxNXB4OwogIGZvbnQtZmFtaWx5OiAnQ2VudHVyeSBHb3RoaWMnOwogIGZvbnQtc2l6ZTogMjFweDsgfQogIC5ucGMtcmV2aWV3LXdyYXBwZXIgLmFuc3dlci1yb3cgLnNlY3Rpb24tdGl0bGUgewogICAgdGV4dC1hbGlnbjogcmlnaHQ7IH0KICAgIC5ucGMtcmV2aWV3LXdyYXBwZXIgLmFuc3dlci1yb3cgLnNlY3Rpb24tdGl0bGUgc3BhbiB7CiAgICAgIGZvbnQtc2l6ZTogMjFweDsKICAgICAgZm9udC13ZWlnaHQ6IG1lZGl1bTsKICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIHBhZGRpbmctcmlnaHQ6IDI1cHg7IH0KICAubnBjLXJldmlldy13cmFwcGVyIC5hbnN3ZXItcm93IC5hbnN3ZXItcXVlc3Rpb24gewogICAgdGV4dC1hbGlnbjogbGVmdDsKICAgIGZvbnQtc2l6ZTogMjFweDsgfQogICAgLm5wYy1yZXZpZXctd3JhcHBlciAuYW5zd2VyLXJvdyAuYW5zd2VyLXF1ZXN0aW9uIGRpdiB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBwYWRkaW5nLXRvcDogNXB4OwogICAgICBwYWRkaW5nLWxlZnQ6IDI1cHg7CiAgICAgIGZvbnQtc2l6ZTogMjFweDsgfQogICAgICAubnBjLXJldmlldy13cmFwcGVyIC5hbnN3ZXItcm93IC5hbnN3ZXItcXVlc3Rpb24gZGl2LmFuc3dlciB7CiAgICAgICAgZm9udC1zaXplOiAyMXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOyB9CgpAbWVkaWEgc2NyZWVuIGFuZCAobWF4LXdpZHRoOiA3NjdweCkgewogIC5ucGMtcmV2aWV3LXdyYXBwZXIgLmFuc3dlci1yb3cgewogICAgbWFyZ2luOiAwcHggYXV0bzsKICAgIHBhZGRpbmc6IDEwcHggMTVweCAxMHB4IDE1cHg7CiAgICBmb250LWZhbWlseTogJ0NlbnR1cnkgR290aGljJzsgfQogICAgLm5wYy1yZXZpZXctd3JhcHBlciAuYW5zd2VyLXJvdyAuc2VjdGlvbi10aXRsZSB7CiAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KICAgICAgLm5wYy1yZXZpZXctd3JhcHBlciAuYW5zd2VyLXJvdyAuc2VjdGlvbi10aXRsZSBzcGFuIHsKICAgICAgICBmb250LXNpemU6IDE2cHg7IH0KICAgIC5ucGMtcmV2aWV3LXdyYXBwZXIgLmFuc3dlci1yb3cgLmFuc3dlci1xdWVzdGlvbiB7CiAgICAgIHRleHQtYWxpZ246IGxlZnQ7IH0KICAgICAgLm5wYy1yZXZpZXctd3JhcHBlciAuYW5zd2VyLXJvdyAuYW5zd2VyLXF1ZXN0aW9uIGRpdiB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcGFkZGluZy10b3A6IDVweDsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDBweDsgfQogICAgICAgIC5ucGMtcmV2aWV3LXdyYXBwZXIgLmFuc3dlci1yb3cgLmFuc3dlci1xdWVzdGlvbiBkaXYuYW5zd2VyIHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTZweCAhaW1wb3J0YW50OwogICAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7IH0gfQoKLyogQWxsIGdsb2JhbCB2YXJpYWJsZSBhbmQgZnVuY3Rpb24gcmVmZXJlbmNlcyBzaG91bGQgYmUgaW1wb3J0ZWQgaGVyZSAqLwovKiBBbGwgZ2xvYmFsIHZhcmlhYmxlcyBzaG91bGQgYmUgZGVjbGFyZWQgaGVyZSAqLwoubnBjLXJlc3VsdC13cmFwcGVyIGgyIHsKICBmb250LXNpemU6IGluaGVyaXQ7CiAgZm9udC13ZWlnaHQ6IGluaGVyaXQ7CiAgcGFkZGluZy1yaWdodDogMjVweDsKICBtYXJnaW46IGluaGVyaXQ7IH0KCi5ucGMtcmVzdWx0LXdyYXBwZXIgLmFuc3dlci1yb3cgewogIG1hcmdpbjogMHB4IGF1dG87CiAgZm9udC1mYW1pbHk6ICdDZW50dXJ5IEdvdGhpYyc7CiAgZm9udC1zaXplOiAyMXB4OyB9CiAgLm5wYy1yZXN1bHQtd3JhcHBlciAuYW5zd2VyLXJvdyAuc2VjdGlvbi10aXRsZSB7CiAgICBwYWRkaW5nOiAxNXB4IDBweCAxNXB4IDBweDsKICAgIHRleHQtYWxpZ246IHJpZ2h0OyB9CiAgICAubnBjLXJlc3VsdC13cmFwcGVyIC5hbnN3ZXItcm93IC5zZWN0aW9uLXRpdGxlIHNwYW4gewogICAgICBmb250LXdlaWdodDogbWVkaXVtOwogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgcGFkZGluZy1yaWdodDogMjVweDsgfQogIC5ucGMtcmVzdWx0LXdyYXBwZXIgLmFuc3dlci1yb3cgLmFuc3dlci1xdWVzdGlvbiB7CiAgICB3aWR0aDogY2FsYyg1MCUgLSA0cHgpOwogICAgdGV4dC1hbGlnbjogbGVmdDsKICAgIHBhZGRpbmc6IDE1cHggMHB4IDE1cHggMHB4OyB9CiAgICAubnBjLXJlc3VsdC13cmFwcGVyIC5hbnN3ZXItcm93IC5hbnN3ZXItcXVlc3Rpb24gZGl2IHsKICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIHBhZGRpbmctbGVmdDogMjVweDsgfQogICAgICAubnBjLXJlc3VsdC13cmFwcGVyIC5hbnN3ZXItcm93IC5hbnN3ZXItcXVlc3Rpb24gZGl2LmFuc3dlciB7CiAgICAgICAgZm9udC13ZWlnaHQ6IG1lZGl1bTsgfQogIC5ucGMtcmVzdWx0LXdyYXBwZXIgLmFuc3dlci1yb3cuZXhwZW5zZSB7CiAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICBmb250LXNpemU6IDE2cHg7IH0KICAgIC5ucGMtcmVzdWx0LXdyYXBwZXIgLmFuc3dlci1yb3cuZXhwZW5zZSAuc2VjdGlvbi10aXRsZSB7CiAgICAgIGJvcmRlci1yaWdodDogNHB4IHNvbGlkICNjZjExMGM7CiAgICAgIHBhZGRpbmc6IDEwcHggMHB4IDEwcHggMHB4OyB9CiAgICAgIC5ucGMtcmVzdWx0LXdyYXBwZXIgLmFuc3dlci1yb3cuZXhwZW5zZSAuc2VjdGlvbi10aXRsZS50b3AtcmFkaXVzIHsKICAgICAgICBib3JkZXItdG9wLXJpZ2h0LXJhZGl1czogOHB4OyB9CiAgICAgIC5ucGMtcmVzdWx0LXdyYXBwZXIgLmFuc3dlci1yb3cuZXhwZW5zZSAuc2VjdGlvbi10aXRsZS5ib3R0b20tcmFkaXVzIHsKICAgICAgICBib3JkZXItYm90dG9tLXJpZ2h0LXJhZGl1czogOHB4OyB9CiAgICAgIC5ucGMtcmVzdWx0LXdyYXBwZXIgLmFuc3dlci1yb3cuZXhwZW5zZSAuc2VjdGlvbi10aXRsZSAuZGVzY3JpcHRpb24gewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsgfQogICAgLm5wYy1yZXN1bHQtd3JhcHBlciAuYW5zd2VyLXJvdy5leHBlbnNlIC5hbnN3ZXItcXVlc3Rpb24gewogICAgICBwYWRkaW5nOiAxMHB4IDBweCAxMHB4IDBweDsgfQogICAgLm5wYy1yZXN1bHQtd3JhcHBlciAuYW5zd2VyLXJvdy5leHBlbnNlLmV4cC10b3RhbCB7CiAgICAgIG1hcmdpbi10b3A6IDBweDsKICAgICAgZm9udC1zdHlsZTogbm9ybWFsOwogICAgICBmb250LXdlaWdodDogbWVkaXVtICFpbXBvcnRhbnQ7CiAgICAgIGZvbnQtc2l6ZTogMjFweDsgfQogICAgICAubnBjLXJlc3VsdC13cmFwcGVyIC5hbnN3ZXItcm93LmV4cGVuc2UuZXhwLXRvdGFsIC5zZWN0aW9uLXRpdGxlIHsKICAgICAgICBwYWRkaW5nOiAxNXB4IDBweCAxNXB4IDBweDsgfQogICAgICAubnBjLXJlc3VsdC13cmFwcGVyIC5hbnN3ZXItcm93LmV4cGVuc2UuZXhwLXRvdGFsIC5hbnN3ZXItcXVlc3Rpb24gewogICAgICAgIHBhZGRpbmc6IDE1cHggMHB4IDE1cHggMHB4OyB9CiAgLm5wYy1yZXN1bHQtd3JhcHBlciAuYW5zd2VyLXJvdy5ncmFudCB7CiAgICBtYXJnaW46IDIwcHggMHB4IDBweCAwcHg7IH0KICAgIC5ucGMtcmVzdWx0LXdyYXBwZXIgLmFuc3dlci1yb3cuZ3JhbnQgLnNlY3Rpb24tdGl0bGUgewogICAgICBib3JkZXItcmlnaHQ6IDRweCBzb2xpZCAjMGM4ZmI2OwogICAgICBib3JkZXItcmFkaXVzOiA4cHg7IH0KICAgICAgLm5wYy1yZXN1bHQtd3JhcHBlciAuYW5zd2VyLXJvdy5ncmFudCAuc2VjdGlvbi10aXRsZSAuZGVzY3JpcHRpb24gewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsgfQogIC5ucGMtcmVzdWx0LXdyYXBwZXIgLmFuc3dlci1yb3cudG90YWwgewogICAgbWFyZ2luOiAyMHB4IDBweCAyMHB4IDBweDsKICAgIGZvbnQtc2l6ZTogMjJweDsKICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgZGlzcGxheTogdGFibGU7IH0KICAgIC5ucGMtcmVzdWx0LXdyYXBwZXIgLmFuc3dlci1yb3cudG90YWwgLnNlY3Rpb24tdGl0bGUgewogICAgICBib3JkZXItcmlnaHQ6IDRweCBzb2xpZCAjMWVhMjBjOwogICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7CiAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7IH0KICAgIC5ucGMtcmVzdWx0LXdyYXBwZXIgLmFuc3dlci1yb3cudG90YWwgLmFuc3dlci1xdWVzdGlvbiBkaXYgewogICAgICBkaXNwbGF5OiB0YWJsZS1jZWxsOwogICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOyB9CiAgICAgIC5ucGMtcmVzdWx0LXdyYXBwZXIgLmFuc3dlci1yb3cudG90YWwgLmFuc3dlci1xdWVzdGlvbiBkaXYuYW5zd2VyIHsKICAgICAgICBmb250LXNpemU6IDQwcHg7IH0KCi5ucGMtcmVzdWx0LXdyYXBwZXIgLnNwZWNpZmljLWV4cGxhbmF0aW9ucyB7CiAgcGFkZGluZzogMHB4IDIwcHggMHB4IDIwcHg7IH0KICAubnBjLXJlc3VsdC13cmFwcGVyIC5zcGVjaWZpYy1leHBsYW5hdGlvbnMgLmV4cGxhbmF0aW9uIHsKICAgIGZvbnQtc2l6ZTogMTRweDsKICAgIG1hcmdpbjogNXB4IDBweCA1cHggMHB4OyB9CiAgICAubnBjLXJlc3VsdC13cmFwcGVyIC5zcGVjaWZpYy1leHBsYW5hdGlvbnMgLmV4cGxhbmF0aW9uLmFsZXJ0IHsKICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgIGNvbG9yOiAjY2YxMTBjOyB9CgoubnBjLXJlc3VsdC13cmFwcGVyIC5nZW5lcmFsLWV4cGxhbmF0aW9ucyB7CiAgbWFyZ2luLXRvcDogNDBweDsKICBmb250LXNpemU6IDE0cHg7CiAgcGFkZGluZzogMHB4IDIwcHggMHB4IDIwcHg7IH0KICAudGhlbWUtbGlnaHQgLm5wYy1yZXN1bHQtd3JhcHBlciAuZ2VuZXJhbC1leHBsYW5hdGlvbnMgYSB7CiAgICBjb2xvcjogIzAxNzQ3MTsKICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsgfQogIC50aGVtZS1kYXJrIC5ucGMtcmVzdWx0LXdyYXBwZXIgLmdlbmVyYWwtZXhwbGFuYXRpb25zIGEgewogICAgY29sb3I6ICMwMGM0ZmY7CiAgICBmb250LXN0eWxlOiBpdGFsaWM7IH0KCkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2N3B4KSB7CiAgLm5wYy1yZXN1bHQtd3JhcHBlciAuYW5zd2VyLXJvdyB7CiAgICBmb250LXNpemU6IDE2cHg7IH0KICAgIC5ucGMtcmVzdWx0LXdyYXBwZXIgLmFuc3dlci1yb3cgLnNlY3Rpb24tdGl0bGUgewogICAgICBwYWRkaW5nOiAxNXB4IDBweCAxNXB4IDBweDsKICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7IH0KICAgICAgLm5wYy1yZXN1bHQtd3JhcHBlciAuYW5zd2VyLXJvdyAuc2VjdGlvbi10aXRsZSBzcGFuIHsKICAgICAgICBwYWRkaW5nOiAwcHggMTVweCAwcHggMTVweDsgfQogICAgLm5wYy1yZXN1bHQtd3JhcHBlciAuYW5zd2VyLXJvdyAuYW5zd2VyLXF1ZXN0aW9uIHsKICAgICAgcGFkZGluZzogMTVweCAwcHggMTVweCAwcHg7IH0KICAgICAgLm5wYy1yZXN1bHQtd3JhcHBlciAuYW5zd2VyLXJvdyAuYW5zd2VyLXF1ZXN0aW9uIGRpdiB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcGFkZGluZzogMHB4IDE1cHggMHB4IDE1cHg7IH0KICAgICAgICAubnBjLXJlc3VsdC13cmFwcGVyIC5hbnN3ZXItcm93IC5hbnN3ZXItcXVlc3Rpb24gZGl2LmFuc3dlciB7CiAgICAgICAgICBmb250LXdlaWdodDogbWVkaXVtOyB9CiAgICAubnBjLXJlc3VsdC13cmFwcGVyIC5hbnN3ZXItcm93LmV4cGVuc2UgewogICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgIGZvbnQtc2l6ZTogMTNweDsgfQogICAgICAubnBjLXJlc3VsdC13cmFwcGVyIC5hbnN3ZXItcm93LmV4cGVuc2UgLnNlY3Rpb24tdGl0bGUgewogICAgICAgIGJvcmRlci1yaWdodDogNHB4IHNvbGlkICNjZjExMGM7CiAgICAgICAgcGFkZGluZzogNHB4IDBweCA0cHggMHB4OyB9CiAgICAgICAgLm5wYy1yZXN1bHQtd3JhcHBlciAuYW5zd2VyLXJvdy5leHBlbnNlIC5zZWN0aW9uLXRpdGxlLnRvcC1yYWRpdXMgewogICAgICAgICAgYm9yZGVyLXRvcC1yaWdodC1yYWRpdXM6IDhweDsgfQogICAgICAgIC5ucGMtcmVzdWx0LXdyYXBwZXIgLmFuc3dlci1yb3cuZXhwZW5zZSAuc2VjdGlvbi10aXRsZS5ib3R0b20tcmFkaXVzIHsKICAgICAgICAgIGJvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOiA4cHg7IH0KICAgICAgLm5wYy1yZXN1bHQtd3JhcHBlciAuYW5zd2VyLXJvdy5leHBlbnNlIC5hbnN3ZXItcXVlc3Rpb24gewogICAgICAgIHBhZGRpbmc6IDRweCAwcHggNHB4IDBweDsgfQogICAgICAubnBjLXJlc3VsdC13cmFwcGVyIC5hbnN3ZXItcm93LmV4cGVuc2UuZXhwLXRvdGFsIHsKICAgICAgICBtYXJnaW4tdG9wOiAwcHg7CiAgICAgICAgZm9udC1zdHlsZTogbm9ybWFsOwogICAgICAgIGZvbnQtd2VpZ2h0OiBtZWRpdW0gIWltcG9ydGFudDsKICAgICAgICBmb250LXNpemU6IDE2cHg7IH0KICAgICAgICAubnBjLXJlc3VsdC13cmFwcGVyIC5hbnN3ZXItcm93LmV4cGVuc2UuZXhwLXRvdGFsIC5zZWN0aW9uLXRpdGxlIHsKICAgICAgICAgIHBhZGRpbmc6IDEwcHggMHB4IDEwcHggMHB4OyB9CiAgICAgICAgLm5wYy1yZXN1bHQtd3JhcHBlciAuYW5zd2VyLXJvdy5leHBlbnNlLmV4cC10b3RhbCAuYW5zd2VyLXF1ZXN0aW9uIHsKICAgICAgICAgIHBhZGRpbmc6IDEwcHggMHB4IDEwcHggMHB4OyB9CiAgICAubnBjLXJlc3VsdC13cmFwcGVyIC5hbnN3ZXItcm93LmdyYW50IHsKICAgICAgbWFyZ2luOiAxNXB4IDBweCAwcHggMHB4OwogICAgICBmb250LXNpemU6IDE2cHg7IH0KICAgICAgLm5wYy1yZXN1bHQtd3JhcHBlciAuYW5zd2VyLXJvdy5ncmFudCAuc2VjdGlvbi10aXRsZSB7CiAgICAgICAgYm9yZGVyLXJpZ2h0OiA0cHggc29saWQgIzBjOGZiNjsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7IH0KICAgIC5ucGMtcmVzdWx0LXdyYXBwZXIgLmFuc3dlci1yb3cudG90YWwgewogICAgICBtYXJnaW46IDE1cHggMHB4IDMwcHggMHB4OwogICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOyB9CiAgICAgIC5ucGMtcmVzdWx0LXdyYXBwZXIgLmFuc3dlci1yb3cudG90YWwgLnNlY3Rpb24tdGl0bGUgewogICAgICAgIGJvcmRlci1yaWdodDogNHB4IHNvbGlkICMxZWEyMGM7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OyB9CiAgICAgIC5ucGMtcmVzdWx0LXdyYXBwZXIgLmFuc3dlci1yb3cudG90YWwgLmFuc3dlci1xdWVzdGlvbiBkaXYuYW5zd2VyIHsKICAgICAgICBmb250LXNpemU6IDMwcHg7IH0gfQoKLyogQWxsIGdsb2JhbCB2YXJpYWJsZSBhbmQgZnVuY3Rpb24gcmVmZXJlbmNlcyBzaG91bGQgYmUgaW1wb3J0ZWQgaGVyZSAqLwovKiBBbGwgZ2xvYmFsIHZhcmlhYmxlcyBzaG91bGQgYmUgZGVjbGFyZWQgaGVyZSAqLwouaG9tZS13cmFwcGVyIHsKICBsZXR0ZXItc3BhY2luZzogbm9ybWFsOyB9CiAgLmhvbWUtd3JhcHBlciAubnBjLXN0ZXBwZXItd3JhcHBlciB7CiAgICBtYXJnaW4tdG9wOiAyMHB4OyB9CiAgLmhvbWUtd3JhcHBlciAuc3RlcC13cmFwcGVyOmZvY3VzIHsKICAgIG91dGxpbmU6IDA7IH0KCkBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDc2N3B4KSB7CiAgLmhvbWUtd3JhcHBlciB7CiAgICBwYWRkaW5nLWJvdHRvbTogMTAwcHg7IH0KICAgIC5ob21lLXdyYXBwZXIgLm5wYy1zdGVwcGVyLXdyYXBwZXIgewogICAgICBwYWRkaW5nOiAxMHB4IDBweCA1cHggMHB4OwogICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgIGJvdHRvbTogMHB4OwogICAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2NjYzsgfSB9CgpAbWVkaWEgcHJpbnQgewogIC5ob21lLXdyYXBwZXIgLm5wYy1zdGVwcGVyLXdyYXBwZXIsIC5ob21lLXdyYXBwZXIgLm5wYy1hY3Rpb24td3JhcHBlciB7CiAgICBkaXNwbGF5OiBub25lOyB9CiAgLmhlYWRlci13cmFwcGVyIHsKICAgIHBhZGRpbmc6IDBweCAhaW1wb3J0YW50OyB9IH0KCi8qIQpQdXJlIHYxLjAuMApDb3B5cmlnaHQgMjAxMyBZYWhvbyEKTGljZW5zZWQgdW5kZXIgdGhlIEJTRCBMaWNlbnNlLgpodHRwczovL2dpdGh1Yi5jb20veWFob28vcHVyZS9ibG9iL21hc3Rlci9MSUNFTlNFLm1kCiovCi8qIQpub3JtYWxpemUuY3NzIHZeMy4wIHwgTUlUIExpY2Vuc2UgfCBnaXQuaW8vbm9ybWFsaXplCkNvcHlyaWdodCAoYykgTmljb2xhcyBHYWxsYWdoZXIgYW5kIEpvbmF0aGFuIE5lYWwKKi8KLyohIG5vcm1hbGl6ZS5jc3MgdjMuMC4zIHwgTUlUIExpY2Vuc2UgfCBnaXRodWIuY29tL25lY29sYXMvbm9ybWFsaXplLmNzcyAqLy5wdXJlLWJ1dHRvbjpmb2N1cyxhOmFjdGl2ZSxhOmhvdmVye291dGxpbmU6MH0ucHVyZS10YWJsZSx0YWJsZXtib3JkZXItY29sbGFwc2U6Y29sbGFwc2U7Ym9yZGVyLXNwYWNpbmc6MH1odG1se2ZvbnQtZmFtaWx5OnNhbnMtc2VyaWY7LW1zLXRleHQtc2l6ZS1hZGp1c3Q6MTAwJTstd2Via2l0LXRleHQtc2l6ZS1hZGp1c3Q6MTAwJX1ib2R5e21hcmdpbjowfWFydGljbGUsYXNpZGUsZGV0YWlscyxmaWdjYXB0aW9uLGZpZ3VyZSxmb290ZXIsaGVhZGVyLGhncm91cCxtYWluLG1lbnUsbmF2LHNlY3Rpb24sc3VtbWFyeXtkaXNwbGF5OmJsb2NrfWF1ZGlvLGNhbnZhcyxwcm9ncmVzcyx2aWRlb3tkaXNwbGF5OmlubGluZS1ibG9jazt2ZXJ0aWNhbC1hbGlnbjpiYXNlbGluZX1hdWRpbzpub3QoW2NvbnRyb2xzXSl7ZGlzcGxheTpub25lO2hlaWdodDowfVtoaWRkZW5dLHRlbXBsYXRle2Rpc3BsYXk6bm9uZX1he2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9YWJiclt0aXRsZV17Ym9yZGVyLWJvdHRvbToxcHggZG90dGVkfWIsb3B0Z3JvdXAsc3Ryb25ne2ZvbnQtd2VpZ2h0OjcwMH1kZm57Zm9udC1zdHlsZTppdGFsaWN9aDF7Zm9udC1zaXplOjJlbTttYXJnaW46LjY3ZW0gMH1tYXJre2JhY2tncm91bmQ6I2ZmMDtjb2xvcjojMDAwfXNtYWxse2ZvbnQtc2l6ZTo4MCV9c3ViLHN1cHtmb250LXNpemU6NzUlO2xpbmUtaGVpZ2h0OjA7cG9zaXRpb246cmVsYXRpdmU7dmVydGljYWwtYWxpZ246YmFzZWxpbmV9c3Vwe3RvcDotLjVlbX1zdWJ7Ym90dG9tOi0uMjVlbX1pbWd7Ym9yZGVyOjB9c3ZnOm5vdCg6cm9vdCl7b3ZlcmZsb3c6aGlkZGVufWZpZ3VyZXttYXJnaW46MWVtIDQwcHh9aHJ7Ym94LXNpemluZzpjb250ZW50LWJveDtoZWlnaHQ6MH1wcmUsdGV4dGFyZWF7b3ZlcmZsb3c6YXV0b31jb2RlLGtiZCxwcmUsc2FtcHtmb250LWZhbWlseTptb25vc3BhY2UsbW9ub3NwYWNlO2ZvbnQtc2l6ZToxZW19YnV0dG9uLGlucHV0LG9wdGdyb3VwLHNlbGVjdCx0ZXh0YXJlYXtjb2xvcjppbmhlcml0O2ZvbnQ6aW5oZXJpdDttYXJnaW46MH0ucHVyZS1idXR0b24saW5wdXR7bGluZS1oZWlnaHQ6bm9ybWFsfWJ1dHRvbntvdmVyZmxvdzp2aXNpYmxlfWJ1dHRvbixzZWxlY3R7dGV4dC10cmFuc2Zvcm06bm9uZX1idXR0b24saHRtbCBpbnB1dFt0eXBlPWJ1dHRvbl0saW5wdXRbdHlwZT1yZXNldF0saW5wdXRbdHlwZT1zdWJtaXRdey13ZWJraXQtYXBwZWFyYW5jZTpidXR0b247Y3Vyc29yOnBvaW50ZXJ9YnV0dG9uW2Rpc2FibGVkXSxodG1sIGlucHV0W2Rpc2FibGVkXXtjdXJzb3I6ZGVmYXVsdH1idXR0b246Oi1tb3otZm9jdXMtaW5uZXIsaW5wdXQ6Oi1tb3otZm9jdXMtaW5uZXJ7Ym9yZGVyOjA7cGFkZGluZzowfWlucHV0W3R5cGU9Y2hlY2tib3hdLGlucHV0W3R5cGU9cmFkaW9de2JveC1zaXppbmc6Ym9yZGVyLWJveDtwYWRkaW5nOjB9aW5wdXRbdHlwZT1udW1iZXJdOjotd2Via2l0LWlubmVyLXNwaW4tYnV0dG9uLGlucHV0W3R5cGU9bnVtYmVyXTo6LXdlYmtpdC1vdXRlci1zcGluLWJ1dHRvbntoZWlnaHQ6YXV0b31pbnB1dFt0eXBlPXNlYXJjaF17LXdlYmtpdC1hcHBlYXJhbmNlOnRleHRmaWVsZDtib3gtc2l6aW5nOmNvbnRlbnQtYm94fS5wdXJlLWJ1dHRvbiwucHVyZS1mb3JtIGlucHV0Om5vdChbdHlwZV0pLC5wdXJlLW1lbnV7Ym94LXNpemluZzpib3JkZXItYm94fWlucHV0W3R5cGU9c2VhcmNoXTo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbixpbnB1dFt0eXBlPXNlYXJjaF06Oi13ZWJraXQtc2VhcmNoLWRlY29yYXRpb257LXdlYmtpdC1hcHBlYXJhbmNlOm5vbmV9ZmllbGRzZXR7Ym9yZGVyOjFweCBzb2xpZCBzaWx2ZXI7bWFyZ2luOjAgMnB4O3BhZGRpbmc6LjM1ZW0gLjYyNWVtIC43NWVtfWxlZ2VuZCx0ZCx0aHtwYWRkaW5nOjB9bGVnZW5ke2JvcmRlcjowfS5oaWRkZW4sW2hpZGRlbl17ZGlzcGxheTpub25lIWltcG9ydGFudH0ucHVyZS1pbWd7bWF4LXdpZHRoOjEwMCU7aGVpZ2h0OmF1dG87ZGlzcGxheTpibG9ja30ucHVyZS1ne2xldHRlci1zcGFjaW5nOi0uMzFlbTt0ZXh0LXJlbmRlcmluZzpvcHRpbWl6ZXNwZWVkO2ZvbnQtZmFtaWx5OkZyZWVTYW5zLEFyaW1vLCJEcm9pZCBTYW5zIixIZWx2ZXRpY2EsQXJpYWwsc2Fucy1zZXJpZjtkaXNwbGF5Oi13ZWJraXQtYm94O2Rpc3BsYXk6LXdlYmtpdC1mbGV4O2Rpc3BsYXk6LW1zLWZsZXhib3g7ZGlzcGxheTpmbGV4Oy13ZWJraXQtZmxleC1mbG93OnJvdyB3cmFwOy1tcy1mbGV4LWZsb3c6cm93IHdyYXA7ZmxleC1mbG93OnJvdyB3cmFwOy13ZWJraXQtYWxpZ24tY29udGVudDpmbGV4LXN0YXJ0Oy1tcy1mbGV4LWxpbmUtcGFjazpzdGFydDthbGlnbi1jb250ZW50OmZsZXgtc3RhcnR9QG1lZGlhIGFsbCBhbmQgKC1tcy1oaWdoLWNvbnRyYXN0Om5vbmUpLCgtbXMtaGlnaC1jb250cmFzdDphY3RpdmUpe3RhYmxlIC5wdXJlLWd7ZGlzcGxheTpibG9ja319Lm9wZXJhLW9ubHkgOi1vLXByZWZvY3VzLC5wdXJlLWd7d29yZC1zcGFjaW5nOi0uNDNlbX0ucHVyZS11LC5wdXJlLXUtMSwucHVyZS11LTEtMSwucHVyZS11LTEtMTIsLnB1cmUtdS0xLTIsLnB1cmUtdS0xLTI0LC5wdXJlLXUtMS0zLC5wdXJlLXUtMS00LC5wdXJlLXUtMS01LC5wdXJlLXUtMS02LC5wdXJlLXUtMS04LC5wdXJlLXUtMTAtMjQsLnB1cmUtdS0xMS0xMiwucHVyZS11LTExLTI0LC5wdXJlLXUtMTItMjQsLnB1cmUtdS0xMy0yNCwucHVyZS11LTE0LTI0LC5wdXJlLXUtMTUtMjQsLnB1cmUtdS0xNi0yNCwucHVyZS11LTE3LTI0LC5wdXJlLXUtMTgtMjQsLnB1cmUtdS0xOS0yNCwucHVyZS11LTItMjQsLnB1cmUtdS0yLTMsLnB1cmUtdS0yLTUsLnB1cmUtdS0yMC0yNCwucHVyZS11LTIxLTI0LC5wdXJlLXUtMjItMjQsLnB1cmUtdS0yMy0yNCwucHVyZS11LTI0LTI0LC5wdXJlLXUtMy0yNCwucHVyZS11LTMtNCwucHVyZS11LTMtNSwucHVyZS11LTMtOCwucHVyZS11LTQtMjQsLnB1cmUtdS00LTUsLnB1cmUtdS01LTEyLC5wdXJlLXUtNS0yNCwucHVyZS11LTUtNSwucHVyZS11LTUtNiwucHVyZS11LTUtOCwucHVyZS11LTYtMjQsLnB1cmUtdS03LTEyLC5wdXJlLXUtNy0yNCwucHVyZS11LTctOCwucHVyZS11LTgtMjQsLnB1cmUtdS05LTI0e2xldHRlci1zcGFjaW5nOm5vcm1hbDt3b3JkLXNwYWNpbmc6bm9ybWFsO3ZlcnRpY2FsLWFsaWduOnRvcDt0ZXh0LXJlbmRlcmluZzphdXRvO2Rpc3BsYXk6aW5saW5lLWJsb2NrO3pvb206MX0ucHVyZS1nIFtjbGFzcyo9cHVyZS11XXtmb250LWZhbWlseTpzYW5zLXNlcmlmfS5wdXJlLXUtMS0yNHt3aWR0aDo0LjE2NjclfS5wdXJlLXUtMS0xMiwucHVyZS11LTItMjR7d2lkdGg6OC4zMzMzJX0ucHVyZS11LTEtOCwucHVyZS11LTMtMjR7d2lkdGg6MTIuNSV9LnB1cmUtdS0xLTYsLnB1cmUtdS00LTI0e3dpZHRoOjE2LjY2NjclfS5wdXJlLXUtMS01e3dpZHRoOjIwJX0ucHVyZS11LTUtMjR7d2lkdGg6MjAuODMzMyV9LnB1cmUtdS0xLTQsLnB1cmUtdS02LTI0e3dpZHRoOjI1JX0ucHVyZS11LTctMjR7d2lkdGg6MjkuMTY2NyV9LnB1cmUtdS0xLTMsLnB1cmUtdS04LTI0e3dpZHRoOjMzLjMzMzMlfS5wdXJlLXUtMy04LC5wdXJlLXUtOS0yNHt3aWR0aDozNy41JX0ucHVyZS11LTItNXt3aWR0aDo0MCV9LnB1cmUtdS0xMC0yNCwucHVyZS11LTUtMTJ7d2lkdGg6NDEuNjY2NyV9LnB1cmUtdS0xMS0yNHt3aWR0aDo0NS44MzMzJX0ucHVyZS11LTEtMiwucHVyZS11LTEyLTI0e3dpZHRoOjUwJX0ucHVyZS11LTEzLTI0e3dpZHRoOjU0LjE2NjclfS5wdXJlLXUtMTQtMjQsLnB1cmUtdS03LTEye3dpZHRoOjU4LjMzMzMlfS5wdXJlLXUtMy01e3dpZHRoOjYwJX0ucHVyZS11LTE1LTI0LC5wdXJlLXUtNS04e3dpZHRoOjYyLjUlfS5wdXJlLXUtMTYtMjQsLnB1cmUtdS0yLTN7d2lkdGg6NjYuNjY2NyV9LnB1cmUtdS0xNy0yNHt3aWR0aDo3MC44MzMzJX0ucHVyZS11LTE4LTI0LC5wdXJlLXUtMy00e3dpZHRoOjc1JX0ucHVyZS11LTE5LTI0e3dpZHRoOjc5LjE2NjclfS5wdXJlLXUtNC01e3dpZHRoOjgwJX0ucHVyZS11LTIwLTI0LC5wdXJlLXUtNS02e3dpZHRoOjgzLjMzMzMlfS5wdXJlLXUtMjEtMjQsLnB1cmUtdS03LTh7d2lkdGg6ODcuNSV9LnB1cmUtdS0xMS0xMiwucHVyZS11LTIyLTI0e3dpZHRoOjkxLjY2NjclfS5wdXJlLXUtMjMtMjR7d2lkdGg6OTUuODMzMyV9LnB1cmUtdS0xLC5wdXJlLXUtMS0xLC5wdXJlLXUtMjQtMjQsLnB1cmUtdS01LTV7d2lkdGg6MTAwJX0ucHVyZS1idXR0b257ZGlzcGxheTppbmxpbmUtYmxvY2s7em9vbToxO3doaXRlLXNwYWNlOm5vd3JhcDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7dGV4dC1hbGlnbjpjZW50ZXI7Y3Vyc29yOnBvaW50ZXI7LXdlYmtpdC11c2VyLWRyYWc6bm9uZTstd2Via2l0LXVzZXItc2VsZWN0Om5vbmU7LW1vei11c2VyLXNlbGVjdDpub25lOy1tcy11c2VyLXNlbGVjdDpub25lO3VzZXItc2VsZWN0Om5vbmV9LnB1cmUtYnV0dG9uOjotbW96LWZvY3VzLWlubmVye3BhZGRpbmc6MDtib3JkZXI6MH0ucHVyZS1idXR0b24tZ3JvdXB7bGV0dGVyLXNwYWNpbmc6LS4zMWVtO3RleHQtcmVuZGVyaW5nOm9wdGltaXplc3BlZWR9Lm9wZXJhLW9ubHkgOi1vLXByZWZvY3VzLC5wdXJlLWJ1dHRvbi1ncm91cHt3b3JkLXNwYWNpbmc6LS40M2VtfS5wdXJlLWJ1dHRvbntmb250LWZhbWlseTppbmhlcml0O2ZvbnQtc2l6ZToxMDAlO3BhZGRpbmc6LjVlbSAxZW07Y29sb3I6IzQ0NDtjb2xvcjpyZ2JhKDAsMCwwLC44KTtib3JkZXI6MXB4IHNvbGlkICM5OTk7Ym9yZGVyOnRyYW5zcGFyZW50O2JhY2tncm91bmQtY29sb3I6I0U2RTZFNjt0ZXh0LWRlY29yYXRpb246bm9uZTtib3JkZXItcmFkaXVzOjJweH0ucHVyZS1idXR0b24taG92ZXIsLnB1cmUtYnV0dG9uOmZvY3VzLC5wdXJlLWJ1dHRvbjpob3ZlcntmaWx0ZXI6YWxwaGEob3BhY2l0eT05MCk7YmFja2dyb3VuZC1pbWFnZTotd2Via2l0LWxpbmVhci1ncmFkaWVudCh0cmFuc3BhcmVudCxyZ2JhKDAsMCwwLC4wNSkgNDAlLHJnYmEoMCwwLDAsLjEpKTtiYWNrZ3JvdW5kLWltYWdlOmxpbmVhci1ncmFkaWVudCh0cmFuc3BhcmVudCxyZ2JhKDAsMCwwLC4wNSkgNDAlLHJnYmEoMCwwLDAsLjEpKX0ucHVyZS1idXR0b24tYWN0aXZlLC5wdXJlLWJ1dHRvbjphY3RpdmV7Ym94LXNoYWRvdzowIDAgMCAxcHggcmdiYSgwLDAsMCwuMTUpIGluc2V0LDAgMCA2cHggcmdiYSgwLDAsMCwuMikgaW5zZXQ7Ym9yZGVyLWNvbG9yOiMwMDBcOX0ucHVyZS1idXR0b24tZGlzYWJsZWQsLnB1cmUtYnV0dG9uLWRpc2FibGVkOmFjdGl2ZSwucHVyZS1idXR0b24tZGlzYWJsZWQ6Zm9jdXMsLnB1cmUtYnV0dG9uLWRpc2FibGVkOmhvdmVyLC5wdXJlLWJ1dHRvbltkaXNhYmxlZF17Ym9yZGVyOm5vbmU7YmFja2dyb3VuZC1pbWFnZTpub25lO2ZpbHRlcjphbHBoYShvcGFjaXR5PTQwKTtvcGFjaXR5Oi40O2N1cnNvcjpub3QtYWxsb3dlZDtib3gtc2hhZG93Om5vbmU7cG9pbnRlci1ldmVudHM6bm9uZX0ucHVyZS1idXR0b24taGlkZGVue2Rpc3BsYXk6bm9uZX0ucHVyZS1idXR0b24tcHJpbWFyeSwucHVyZS1idXR0b24tc2VsZWN0ZWQsYS5wdXJlLWJ1dHRvbi1wcmltYXJ5LGEucHVyZS1idXR0b24tc2VsZWN0ZWR7YmFja2dyb3VuZC1jb2xvcjojMDA3OGU3O2NvbG9yOiNmZmZ9LnB1cmUtYnV0dG9uLWdyb3VwIC5wdXJlLWJ1dHRvbntsZXR0ZXItc3BhY2luZzpub3JtYWw7d29yZC1zcGFjaW5nOm5vcm1hbDt2ZXJ0aWNhbC1hbGlnbjp0b3A7dGV4dC1yZW5kZXJpbmc6YXV0bzttYXJnaW46MDtib3JkZXItcmFkaXVzOjA7Ym9yZGVyLXJpZ2h0OjFweCBzb2xpZCAjMTExO2JvcmRlci1yaWdodDoxcHggc29saWQgcmdiYSgwLDAsMCwuMil9LnB1cmUtYnV0dG9uLWdyb3VwIC5wdXJlLWJ1dHRvbjpmaXJzdC1jaGlsZHtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjJweDtib3JkZXItYm90dG9tLWxlZnQtcmFkaXVzOjJweH0ucHVyZS1idXR0b24tZ3JvdXAgLnB1cmUtYnV0dG9uOmxhc3QtY2hpbGR7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6MnB4O2JvcmRlci1ib3R0b20tcmlnaHQtcmFkaXVzOjJweDtib3JkZXItcmlnaHQ6bm9uZX0ucHVyZS1mb3JtIGlucHV0W3R5cGU9cGFzc3dvcmRdLC5wdXJlLWZvcm0gaW5wdXRbdHlwZT1lbWFpbF0sLnB1cmUtZm9ybSBpbnB1dFt0eXBlPXVybF0sLnB1cmUtZm9ybSBpbnB1dFt0eXBlPWRhdGVdLC5wdXJlLWZvcm0gaW5wdXRbdHlwZT1tb250aF0sLnB1cmUtZm9ybSBpbnB1dFt0eXBlPXRpbWVdLC5wdXJlLWZvcm0gaW5wdXRbdHlwZT1kYXRldGltZV0sLnB1cmUtZm9ybSBpbnB1dFt0eXBlPWRhdGV0aW1lLWxvY2FsXSwucHVyZS1mb3JtIGlucHV0W3R5cGU9d2Vla10sLnB1cmUtZm9ybSBpbnB1dFt0eXBlPXRlbF0sLnB1cmUtZm9ybSBpbnB1dFt0eXBlPWNvbG9yXSwucHVyZS1mb3JtIGlucHV0W3R5cGU9bnVtYmVyXSwucHVyZS1mb3JtIGlucHV0W3R5cGU9c2VhcmNoXSwucHVyZS1mb3JtIGlucHV0W3R5cGU9dGV4dF0sLnB1cmUtZm9ybSBzZWxlY3QsLnB1cmUtZm9ybSB0ZXh0YXJlYXtwYWRkaW5nOi41ZW0gLjZlbTtkaXNwbGF5OmlubGluZS1ibG9jaztib3JkZXI6MXB4IHNvbGlkICNjY2M7Ym94LXNoYWRvdzppbnNldCAwIDFweCAzcHggI2RkZDtib3JkZXItcmFkaXVzOjRweDt2ZXJ0aWNhbC1hbGlnbjptaWRkbGU7Ym94LXNpemluZzpib3JkZXItYm94fS5wdXJlLWZvcm0gaW5wdXQ6bm90KFt0eXBlXSl7cGFkZGluZzouNWVtIC42ZW07ZGlzcGxheTppbmxpbmUtYmxvY2s7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JveC1zaGFkb3c6aW5zZXQgMCAxcHggM3B4ICNkZGQ7Ym9yZGVyLXJhZGl1czo0cHh9LnB1cmUtZm9ybSBpbnB1dFt0eXBlPWNvbG9yXXtwYWRkaW5nOi4yZW0gLjVlbX0ucHVyZS1mb3JtIGlucHV0Om5vdChbdHlwZV0pOmZvY3VzLC5wdXJlLWZvcm0gaW5wdXRbdHlwZT1wYXNzd29yZF06Zm9jdXMsLnB1cmUtZm9ybSBpbnB1dFt0eXBlPWVtYWlsXTpmb2N1cywucHVyZS1mb3JtIGlucHV0W3R5cGU9dXJsXTpmb2N1cywucHVyZS1mb3JtIGlucHV0W3R5cGU9ZGF0ZV06Zm9jdXMsLnB1cmUtZm9ybSBpbnB1dFt0eXBlPW1vbnRoXTpmb2N1cywucHVyZS1mb3JtIGlucHV0W3R5cGU9dGltZV06Zm9jdXMsLnB1cmUtZm9ybSBpbnB1dFt0eXBlPWRhdGV0aW1lXTpmb2N1cywucHVyZS1mb3JtIGlucHV0W3R5cGU9ZGF0ZXRpbWUtbG9jYWxdOmZvY3VzLC5wdXJlLWZvcm0gaW5wdXRbdHlwZT13ZWVrXTpmb2N1cywucHVyZS1mb3JtIGlucHV0W3R5cGU9dGVsXTpmb2N1cywucHVyZS1mb3JtIGlucHV0W3R5cGU9Y29sb3JdOmZvY3VzLC5wdXJlLWZvcm0gaW5wdXRbdHlwZT1udW1iZXJdOmZvY3VzLC5wdXJlLWZvcm0gaW5wdXRbdHlwZT1zZWFyY2hdOmZvY3VzLC5wdXJlLWZvcm0gaW5wdXRbdHlwZT10ZXh0XTpmb2N1cywucHVyZS1mb3JtIHNlbGVjdDpmb2N1cywucHVyZS1mb3JtIHRleHRhcmVhOmZvY3Vze291dGxpbmU6MDtib3JkZXItY29sb3I6IzEyOUZFQX0ucHVyZS1mb3JtIGlucHV0W3R5cGU9ZmlsZV06Zm9jdXMsLnB1cmUtZm9ybSBpbnB1dFt0eXBlPWNoZWNrYm94XTpmb2N1cywucHVyZS1mb3JtIGlucHV0W3R5cGU9cmFkaW9dOmZvY3Vze291dGxpbmU6IzEyOUZFQSBhdXRvIDFweH0ucHVyZS1mb3JtIC5wdXJlLWNoZWNrYm94LC5wdXJlLWZvcm0gLnB1cmUtcmFkaW97bWFyZ2luOi41ZW0gMDtkaXNwbGF5OmJsb2NrfS5wdXJlLWZvcm0gaW5wdXQ6bm90KFt0eXBlXSlbZGlzYWJsZWRdLC5wdXJlLWZvcm0gaW5wdXRbdHlwZT1wYXNzd29yZF1bZGlzYWJsZWRdLC5wdXJlLWZvcm0gaW5wdXRbdHlwZT1lbWFpbF1bZGlzYWJsZWRdLC5wdXJlLWZvcm0gaW5wdXRbdHlwZT11cmxdW2Rpc2FibGVkXSwucHVyZS1mb3JtIGlucHV0W3R5cGU9ZGF0ZV1bZGlzYWJsZWRdLC5wdXJlLWZvcm0gaW5wdXRbdHlwZT1tb250aF1bZGlzYWJsZWRdLC5wdXJlLWZvcm0gaW5wdXRbdHlwZT10aW1lXVtkaXNhYmxlZF0sLnB1cmUtZm9ybSBpbnB1dFt0eXBlPWRhdGV0aW1lXVtkaXNhYmxlZF0sLnB1cmUtZm9ybSBpbnB1dFt0eXBlPWRhdGV0aW1lLWxvY2FsXVtkaXNhYmxlZF0sLnB1cmUtZm9ybSBpbnB1dFt0eXBlPXdlZWtdW2Rpc2FibGVkXSwucHVyZS1mb3JtIGlucHV0W3R5cGU9dGVsXVtkaXNhYmxlZF0sLnB1cmUtZm9ybSBpbnB1dFt0eXBlPWNvbG9yXVtkaXNhYmxlZF0sLnB1cmUtZm9ybSBpbnB1dFt0eXBlPW51bWJlcl1bZGlzYWJsZWRdLC5wdXJlLWZvcm0gaW5wdXRbdHlwZT1zZWFyY2hdW2Rpc2FibGVkXSwucHVyZS1mb3JtIGlucHV0W3R5cGU9dGV4dF1bZGlzYWJsZWRdLC5wdXJlLWZvcm0gc2VsZWN0W2Rpc2FibGVkXSwucHVyZS1mb3JtIHRleHRhcmVhW2Rpc2FibGVkXXtjdXJzb3I6bm90LWFsbG93ZWQ7YmFja2dyb3VuZC1jb2xvcjojZWFlZGVkO2NvbG9yOiNjYWQyZDN9LnB1cmUtZm9ybSBpbnB1dFtyZWFkb25seV0sLnB1cmUtZm9ybSBzZWxlY3RbcmVhZG9ubHldLC5wdXJlLWZvcm0gdGV4dGFyZWFbcmVhZG9ubHlde2JhY2tncm91bmQtY29sb3I6I2VlZTtjb2xvcjojNzc3O2JvcmRlci1jb2xvcjojY2NjfS5wdXJlLWZvcm0gaW5wdXQ6Zm9jdXM6aW52YWxpZCwucHVyZS1mb3JtIHNlbGVjdDpmb2N1czppbnZhbGlkLC5wdXJlLWZvcm0gdGV4dGFyZWE6Zm9jdXM6aW52YWxpZHtjb2xvcjojYjk0YTQ4O2JvcmRlci1jb2xvcjojZTkzMjJkfS5wdXJlLWZvcm0gaW5wdXRbdHlwZT1maWxlXTpmb2N1czppbnZhbGlkOmZvY3VzLC5wdXJlLWZvcm0gaW5wdXRbdHlwZT1jaGVja2JveF06Zm9jdXM6aW52YWxpZDpmb2N1cywucHVyZS1mb3JtIGlucHV0W3R5cGU9cmFkaW9dOmZvY3VzOmludmFsaWQ6Zm9jdXN7b3V0bGluZS1jb2xvcjojZTkzMjJkfS5wdXJlLWZvcm0gc2VsZWN0e2hlaWdodDoyLjI1ZW07Ym9yZGVyOjFweCBzb2xpZCAjY2NjO2JhY2tncm91bmQtY29sb3I6I2ZmZn0ucHVyZS1mb3JtIHNlbGVjdFttdWx0aXBsZV17aGVpZ2h0OmF1dG99LnB1cmUtZm9ybSBsYWJlbHttYXJnaW46LjVlbSAwIC4yZW19LnB1cmUtZm9ybSBmaWVsZHNldHttYXJnaW46MDtwYWRkaW5nOi4zNWVtIDAgLjc1ZW07Ym9yZGVyOjB9LnB1cmUtZm9ybSBsZWdlbmR7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlO3BhZGRpbmc6LjNlbSAwO21hcmdpbi1ib3R0b206LjNlbTtjb2xvcjojMzMzO2JvcmRlci1ib3R0b206MXB4IHNvbGlkICNlNWU1ZTV9LnB1cmUtZm9ybS1zdGFja2VkIGlucHV0Om5vdChbdHlwZV0pLC5wdXJlLWZvcm0tc3RhY2tlZCBpbnB1dFt0eXBlPXBhc3N3b3JkXSwucHVyZS1mb3JtLXN0YWNrZWQgaW5wdXRbdHlwZT1lbWFpbF0sLnB1cmUtZm9ybS1zdGFja2VkIGlucHV0W3R5cGU9dXJsXSwucHVyZS1mb3JtLXN0YWNrZWQgaW5wdXRbdHlwZT1kYXRlXSwucHVyZS1mb3JtLXN0YWNrZWQgaW5wdXRbdHlwZT1tb250aF0sLnB1cmUtZm9ybS1zdGFja2VkIGlucHV0W3R5cGU9dGltZV0sLnB1cmUtZm9ybS1zdGFja2VkIGlucHV0W3R5cGU9ZGF0ZXRpbWVdLC5wdXJlLWZvcm0tc3RhY2tlZCBpbnB1dFt0eXBlPWRhdGV0aW1lLWxvY2FsXSwucHVyZS1mb3JtLXN0YWNrZWQgaW5wdXRbdHlwZT13ZWVrXSwucHVyZS1mb3JtLXN0YWNrZWQgaW5wdXRbdHlwZT10ZWxdLC5wdXJlLWZvcm0tc3RhY2tlZCBpbnB1dFt0eXBlPWNvbG9yXSwucHVyZS1mb3JtLXN0YWNrZWQgaW5wdXRbdHlwZT1maWxlXSwucHVyZS1mb3JtLXN0YWNrZWQgaW5wdXRbdHlwZT1udW1iZXJdLC5wdXJlLWZvcm0tc3RhY2tlZCBpbnB1dFt0eXBlPXNlYXJjaF0sLnB1cmUtZm9ybS1zdGFja2VkIGlucHV0W3R5cGU9dGV4dF0sLnB1cmUtZm9ybS1zdGFja2VkIGxhYmVsLC5wdXJlLWZvcm0tc3RhY2tlZCBzZWxlY3QsLnB1cmUtZm9ybS1zdGFja2VkIHRleHRhcmVhe2Rpc3BsYXk6YmxvY2s7bWFyZ2luOi4yNWVtIDB9LnB1cmUtZm9ybS1hbGlnbmVkIC5wdXJlLWhlbHAtaW5saW5lLC5wdXJlLWZvcm0tYWxpZ25lZCBpbnB1dCwucHVyZS1mb3JtLWFsaWduZWQgc2VsZWN0LC5wdXJlLWZvcm0tYWxpZ25lZCB0ZXh0YXJlYSwucHVyZS1mb3JtLW1lc3NhZ2UtaW5saW5le2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0ucHVyZS1mb3JtLWFsaWduZWQgdGV4dGFyZWF7dmVydGljYWwtYWxpZ246dG9wfS5wdXJlLWZvcm0tYWxpZ25lZCAucHVyZS1jb250cm9sLWdyb3Vwe21hcmdpbi1ib3R0b206LjVlbX0ucHVyZS1mb3JtLWFsaWduZWQgLnB1cmUtY29udHJvbC1ncm91cCBsYWJlbHt0ZXh0LWFsaWduOnJpZ2h0O2Rpc3BsYXk6aW5saW5lLWJsb2NrO3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt3aWR0aDoxMGVtO21hcmdpbjowIDFlbSAwIDB9LnB1cmUtZm9ybS1hbGlnbmVkIC5wdXJlLWNvbnRyb2xze21hcmdpbjoxLjVlbSAwIDAgMTFlbX0ucHVyZS1mb3JtIC5wdXJlLWlucHV0LXJvdW5kZWQsLnB1cmUtZm9ybSBpbnB1dC5wdXJlLWlucHV0LXJvdW5kZWR7Ym9yZGVyLXJhZGl1czoyZW07cGFkZGluZzouNWVtIDFlbX0ucHVyZS1mb3JtIC5wdXJlLWdyb3VwIGZpZWxkc2V0e21hcmdpbi1ib3R0b206MTBweH0ucHVyZS1mb3JtIC5wdXJlLWdyb3VwIGlucHV0LC5wdXJlLWZvcm0gLnB1cmUtZ3JvdXAgdGV4dGFyZWF7ZGlzcGxheTpibG9jaztwYWRkaW5nOjEwcHg7bWFyZ2luOjAgMCAtMXB4O2JvcmRlci1yYWRpdXM6MDtwb3NpdGlvbjpyZWxhdGl2ZTt0b3A6LTFweH0ucHVyZS1mb3JtIC5wdXJlLWdyb3VwIGlucHV0OmZvY3VzLC5wdXJlLWZvcm0gLnB1cmUtZ3JvdXAgdGV4dGFyZWE6Zm9jdXN7ei1pbmRleDozfS5wdXJlLWZvcm0gLnB1cmUtZ3JvdXAgaW5wdXQ6Zmlyc3QtY2hpbGQsLnB1cmUtZm9ybSAucHVyZS1ncm91cCB0ZXh0YXJlYTpmaXJzdC1jaGlsZHt0b3A6MXB4O2JvcmRlci1yYWRpdXM6NHB4IDRweCAwIDA7bWFyZ2luOjB9LnB1cmUtZm9ybSAucHVyZS1ncm91cCBpbnB1dDpmaXJzdC1jaGlsZDpsYXN0LWNoaWxkLC5wdXJlLWZvcm0gLnB1cmUtZ3JvdXAgdGV4dGFyZWE6Zmlyc3QtY2hpbGQ6bGFzdC1jaGlsZHt0b3A6MXB4O2JvcmRlci1yYWRpdXM6NHB4O21hcmdpbjowfS5wdXJlLWZvcm0gLnB1cmUtZ3JvdXAgaW5wdXQ6bGFzdC1jaGlsZCwucHVyZS1mb3JtIC5wdXJlLWdyb3VwIHRleHRhcmVhOmxhc3QtY2hpbGR7dG9wOi0ycHg7Ym9yZGVyLXJhZGl1czowIDAgNHB4IDRweDttYXJnaW46MH0ucHVyZS1mb3JtIC5wdXJlLWdyb3VwIGJ1dHRvbnttYXJnaW46LjM1ZW0gMH0ucHVyZS1mb3JtIC5wdXJlLWlucHV0LTF7d2lkdGg6MTAwJX0ucHVyZS1mb3JtIC5wdXJlLWlucHV0LTMtNHt3aWR0aDo3NSV9LnB1cmUtZm9ybSAucHVyZS1pbnB1dC0yLTN7d2lkdGg6NjYlfS5wdXJlLWZvcm0gLnB1cmUtaW5wdXQtMS0ye3dpZHRoOjUwJX0ucHVyZS1mb3JtIC5wdXJlLWlucHV0LTEtM3t3aWR0aDozMyV9LnB1cmUtZm9ybSAucHVyZS1pbnB1dC0xLTR7d2lkdGg6MjUlfS5wdXJlLWZvcm0gLnB1cmUtaGVscC1pbmxpbmUsLnB1cmUtZm9ybS1tZXNzYWdlLWlubGluZXtkaXNwbGF5OmlubGluZS1ibG9jaztwYWRkaW5nLWxlZnQ6LjNlbTtjb2xvcjojNjY2O3ZlcnRpY2FsLWFsaWduOm1pZGRsZTtmb250LXNpemU6Ljg3NWVtfS5wdXJlLWZvcm0tbWVzc2FnZXtkaXNwbGF5OmJsb2NrO2NvbG9yOiM2NjY7Zm9udC1zaXplOi44NzVlbX1AbWVkaWEgb25seSBzY3JlZW4gYW5kIChtYXgtd2lkdGggOjQ4MHB4KXsucHVyZS1mb3JtIGJ1dHRvblt0eXBlPXN1Ym1pdF17bWFyZ2luOi43ZW0gMCAwfS5wdXJlLWZvcm0gaW5wdXQ6bm90KFt0eXBlXSksLnB1cmUtZm9ybSBpbnB1dFt0eXBlPXBhc3N3b3JkXSwucHVyZS1mb3JtIGlucHV0W3R5cGU9ZW1haWxdLC5wdXJlLWZvcm0gaW5wdXRbdHlwZT11cmxdLC5wdXJlLWZvcm0gaW5wdXRbdHlwZT1kYXRlXSwucHVyZS1mb3JtIGlucHV0W3R5cGU9bW9udGhdLC5wdXJlLWZvcm0gaW5wdXRbdHlwZT10aW1lXSwucHVyZS1mb3JtIGlucHV0W3R5cGU9ZGF0ZXRpbWVdLC5wdXJlLWZvcm0gaW5wdXRbdHlwZT1kYXRldGltZS1sb2NhbF0sLnB1cmUtZm9ybSBpbnB1dFt0eXBlPXdlZWtdLC5wdXJlLWZvcm0gaW5wdXRbdHlwZT10ZWxdLC5wdXJlLWZvcm0gaW5wdXRbdHlwZT1jb2xvcl0sLnB1cmUtZm9ybSBpbnB1dFt0eXBlPW51bWJlcl0sLnB1cmUtZm9ybSBpbnB1dFt0eXBlPXNlYXJjaF0sLnB1cmUtZm9ybSBpbnB1dFt0eXBlPXRleHRdLC5wdXJlLWZvcm0gbGFiZWx7bWFyZ2luLWJvdHRvbTouM2VtO2Rpc3BsYXk6YmxvY2t9LnB1cmUtZ3JvdXAgaW5wdXQ6bm90KFt0eXBlXSksLnB1cmUtZ3JvdXAgaW5wdXRbdHlwZT1wYXNzd29yZF0sLnB1cmUtZ3JvdXAgaW5wdXRbdHlwZT1lbWFpbF0sLnB1cmUtZ3JvdXAgaW5wdXRbdHlwZT11cmxdLC5wdXJlLWdyb3VwIGlucHV0W3R5cGU9ZGF0ZV0sLnB1cmUtZ3JvdXAgaW5wdXRbdHlwZT1tb250aF0sLnB1cmUtZ3JvdXAgaW5wdXRbdHlwZT10aW1lXSwucHVyZS1ncm91cCBpbnB1dFt0eXBlPWRhdGV0aW1lXSwucHVyZS1ncm91cCBpbnB1dFt0eXBlPWRhdGV0aW1lLWxvY2FsXSwucHVyZS1ncm91cCBpbnB1dFt0eXBlPXdlZWtdLC5wdXJlLWdyb3VwIGlucHV0W3R5cGU9dGVsXSwucHVyZS1ncm91cCBpbnB1dFt0eXBlPWNvbG9yXSwucHVyZS1ncm91cCBpbnB1dFt0eXBlPW51bWJlcl0sLnB1cmUtZ3JvdXAgaW5wdXRbdHlwZT1zZWFyY2hdLC5wdXJlLWdyb3VwIGlucHV0W3R5cGU9dGV4dF17bWFyZ2luLWJvdHRvbTowfS5wdXJlLWZvcm0tYWxpZ25lZCAucHVyZS1jb250cm9sLWdyb3VwIGxhYmVse21hcmdpbi1ib3R0b206LjNlbTt0ZXh0LWFsaWduOmxlZnQ7ZGlzcGxheTpibG9jazt3aWR0aDoxMDAlfS5wdXJlLWZvcm0tYWxpZ25lZCAucHVyZS1jb250cm9sc3ttYXJnaW46MS41ZW0gMCAwfS5wdXJlLWZvcm0gLnB1cmUtaGVscC1pbmxpbmUsLnB1cmUtZm9ybS1tZXNzYWdlLC5wdXJlLWZvcm0tbWVzc2FnZS1pbmxpbmV7ZGlzcGxheTpibG9jaztmb250LXNpemU6Ljc1ZW07cGFkZGluZzouMmVtIDAgLjhlbX19LnB1cmUtbWVudS1maXhlZHtwb3NpdGlvbjpmaXhlZDtsZWZ0OjA7dG9wOjA7ei1pbmRleDozfS5wdXJlLW1lbnUtaXRlbSwucHVyZS1tZW51LWxpc3R7cG9zaXRpb246cmVsYXRpdmV9LnB1cmUtbWVudS1saXN0e2xpc3Qtc3R5bGU6bm9uZTttYXJnaW46MDtwYWRkaW5nOjB9LnB1cmUtbWVudS1pdGVte3BhZGRpbmc6MDttYXJnaW46MDtoZWlnaHQ6MTAwJX0ucHVyZS1tZW51LWhlYWRpbmcsLnB1cmUtbWVudS1saW5re2Rpc3BsYXk6YmxvY2s7dGV4dC1kZWNvcmF0aW9uOm5vbmU7d2hpdGUtc3BhY2U6bm93cmFwfS5wdXJlLW1lbnUtaG9yaXpvbnRhbHt3aWR0aDoxMDAlO3doaXRlLXNwYWNlOm5vd3JhcH0ucHVyZS1tZW51LWhvcml6b250YWwgLnB1cmUtbWVudS1saXN0e2Rpc3BsYXk6aW5saW5lLWJsb2NrfS5wdXJlLW1lbnUtaG9yaXpvbnRhbCAucHVyZS1tZW51LWhlYWRpbmcsLnB1cmUtbWVudS1ob3Jpem9udGFsIC5wdXJlLW1lbnUtaXRlbSwucHVyZS1tZW51LWhvcml6b250YWwgLnB1cmUtbWVudS1zZXBhcmF0b3J7ZGlzcGxheTppbmxpbmUtYmxvY2s7em9vbToxO3ZlcnRpY2FsLWFsaWduOm1pZGRsZX0ucHVyZS1tZW51LWl0ZW0gLnB1cmUtbWVudS1pdGVte2Rpc3BsYXk6YmxvY2t9LnB1cmUtbWVudS1jaGlsZHJlbntkaXNwbGF5Om5vbmU7cG9zaXRpb246YWJzb2x1dGU7bGVmdDoxMDAlO3RvcDowO21hcmdpbjowO3BhZGRpbmc6MDt6LWluZGV4OjN9LnB1cmUtbWVudS1ob3Jpem9udGFsIC5wdXJlLW1lbnUtY2hpbGRyZW57bGVmdDowO3RvcDphdXRvO3dpZHRoOmluaGVyaXR9LnB1cmUtbWVudS1hY3RpdmU+LnB1cmUtbWVudS1jaGlsZHJlbiwucHVyZS1tZW51LWFsbG93LWhvdmVyOmhvdmVyPi5wdXJlLW1lbnUtY2hpbGRyZW57ZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZX0ucHVyZS1tZW51LWhhcy1jaGlsZHJlbj4ucHVyZS1tZW51LWxpbms6YWZ0ZXJ7cGFkZGluZy1sZWZ0Oi41ZW07Y29udGVudDoiXDI1QjgiO2ZvbnQtc2l6ZTpzbWFsbH0ucHVyZS1tZW51LWhvcml6b250YWwgLnB1cmUtbWVudS1oYXMtY2hpbGRyZW4+LnB1cmUtbWVudS1saW5rOmFmdGVye2NvbnRlbnQ6IlwyNUJFIn0ucHVyZS1tZW51LXNjcm9sbGFibGV7b3ZlcmZsb3cteTpzY3JvbGw7b3ZlcmZsb3cteDpoaWRkZW59LnB1cmUtbWVudS1zY3JvbGxhYmxlIC5wdXJlLW1lbnUtbGlzdHtkaXNwbGF5OmJsb2NrfS5wdXJlLW1lbnUtaG9yaXpvbnRhbC5wdXJlLW1lbnUtc2Nyb2xsYWJsZSAucHVyZS1tZW51LWxpc3R7ZGlzcGxheTppbmxpbmUtYmxvY2t9LnB1cmUtbWVudS1ob3Jpem9udGFsLnB1cmUtbWVudS1zY3JvbGxhYmxle3doaXRlLXNwYWNlOm5vd3JhcDtvdmVyZmxvdy15OmhpZGRlbjtvdmVyZmxvdy14OmF1dG87LW1zLW92ZXJmbG93LXN0eWxlOm5vbmU7LXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6dG91Y2g7cGFkZGluZzouNWVtIDB9LnB1cmUtbWVudS1ob3Jpem9udGFsLnB1cmUtbWVudS1zY3JvbGxhYmxlOjotd2Via2l0LXNjcm9sbGJhcntkaXNwbGF5Om5vbmV9LnB1cmUtbWVudS1ob3Jpem9udGFsIC5wdXJlLW1lbnUtY2hpbGRyZW4gLnB1cmUtbWVudS1zZXBhcmF0b3IsLnB1cmUtbWVudS1zZXBhcmF0b3J7YmFja2dyb3VuZC1jb2xvcjojY2NjO2hlaWdodDoxcHg7bWFyZ2luOi4zZW0gMH0ucHVyZS1tZW51LWhvcml6b250YWwgLnB1cmUtbWVudS1zZXBhcmF0b3J7d2lkdGg6MXB4O2hlaWdodDoxLjNlbTttYXJnaW46MCAuM2VtfS5wdXJlLW1lbnUtaG9yaXpvbnRhbCAucHVyZS1tZW51LWNoaWxkcmVuIC5wdXJlLW1lbnUtc2VwYXJhdG9ye2Rpc3BsYXk6YmxvY2s7d2lkdGg6YXV0b30ucHVyZS1tZW51LWhlYWRpbmd7dGV4dC10cmFuc2Zvcm06dXBwZXJjYXNlO2NvbG9yOiM1NjVkNjR9LnB1cmUtbWVudS1saW5re2NvbG9yOiM3Nzd9LnB1cmUtbWVudS1jaGlsZHJlbntiYWNrZ3JvdW5kLWNvbG9yOiNmZmZ9LnB1cmUtbWVudS1kaXNhYmxlZCwucHVyZS1tZW51LWhlYWRpbmcsLnB1cmUtbWVudS1saW5re3BhZGRpbmc6LjVlbSAxZW19LnB1cmUtbWVudS1kaXNhYmxlZHtvcGFjaXR5Oi41fS5wdXJlLW1lbnUtZGlzYWJsZWQgLnB1cmUtbWVudS1saW5rOmhvdmVye2JhY2tncm91bmQtY29sb3I6dHJhbnNwYXJlbnR9LnB1cmUtbWVudS1hY3RpdmU+LnB1cmUtbWVudS1saW5rLC5wdXJlLW1lbnUtbGluazpmb2N1cywucHVyZS1tZW51LWxpbms6aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojZWVlfS5wdXJlLW1lbnUtc2VsZWN0ZWQgLnB1cmUtbWVudS1saW5rLC5wdXJlLW1lbnUtc2VsZWN0ZWQgLnB1cmUtbWVudS1saW5rOnZpc2l0ZWR7Y29sb3I6IzAwMH0ucHVyZS10YWJsZXtlbXB0eS1jZWxsczpzaG93O2JvcmRlcjoxcHggc29saWQgI2NiY2JjYn0ucHVyZS10YWJsZSBjYXB0aW9ue2NvbG9yOiMwMDA7Zm9udDppdGFsaWMgODUlLzEgYXJpYWwsc2Fucy1zZXJpZjtwYWRkaW5nOjFlbSAwO3RleHQtYWxpZ246Y2VudGVyfS5wdXJlLXRhYmxlIHRkLC5wdXJlLXRhYmxlIHRoe2JvcmRlci1sZWZ0OjFweCBzb2xpZCAjY2JjYmNiO2JvcmRlci13aWR0aDowIDAgMCAxcHg7Zm9udC1zaXplOmluaGVyaXQ7bWFyZ2luOjA7b3ZlcmZsb3c6dmlzaWJsZTtwYWRkaW5nOi41ZW0gMWVtfS5wdXJlLXRhYmxlIHRkOmZpcnN0LWNoaWxkLC5wdXJlLXRhYmxlIHRoOmZpcnN0LWNoaWxke2JvcmRlci1sZWZ0LXdpZHRoOjB9LnB1cmUtdGFibGUgdGhlYWR7YmFja2dyb3VuZC1jb2xvcjojZTBlMGUwO2NvbG9yOiMwMDA7dGV4dC1hbGlnbjpsZWZ0O3ZlcnRpY2FsLWFsaWduOmJvdHRvbX0ucHVyZS10YWJsZSB0ZHtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fS5wdXJlLXRhYmxlLW9kZCB0ZCwucHVyZS10YWJsZS1zdHJpcGVkIHRyOm50aC1jaGlsZCgybi0xKSB0ZHtiYWNrZ3JvdW5kLWNvbG9yOiNmMmYyZjJ9LnB1cmUtdGFibGUtYm9yZGVyZWQgdGR7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2NiY2JjYn0ucHVyZS10YWJsZS1ib3JkZXJlZCB0Ym9keT50cjpsYXN0LWNoaWxkPnRke2JvcmRlci1ib3R0b20td2lkdGg6MH0ucHVyZS10YWJsZS1ob3Jpem9udGFsIHRkLC5wdXJlLXRhYmxlLWhvcml6b250YWwgdGh7Ym9yZGVyLXdpZHRoOjAgMCAxcHg7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgI2NiY2JjYn0ucHVyZS10YWJsZS1ob3Jpem9udGFsIHRib2R5PnRyOmxhc3QtY2hpbGQ+dGR7Ym9yZGVyLWJvdHRvbS13aWR0aDowfQovKiEKUHVyZSB2MS4wLjAKQ29weXJpZ2h0IDIwMTMgWWFob28hCkxpY2Vuc2VkIHVuZGVyIHRoZSBCU0QgTGljZW5zZS4KaHR0cHM6Ly9naXRodWIuY29tL3lhaG9vL3B1cmUvYmxvYi9tYXN0ZXIvTElDRU5TRS5tZAoqLwpAbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOjM1LjVlbSl7LnB1cmUtdS1zbS0xLC5wdXJlLXUtc20tMS0xLC5wdXJlLXUtc20tMS0xMiwucHVyZS11LXNtLTEtMiwucHVyZS11LXNtLTEtMjQsLnB1cmUtdS1zbS0xLTMsLnB1cmUtdS1zbS0xLTQsLnB1cmUtdS1zbS0xLTUsLnB1cmUtdS1zbS0xLTYsLnB1cmUtdS1zbS0xLTgsLnB1cmUtdS1zbS0xMC0yNCwucHVyZS11LXNtLTExLTEyLC5wdXJlLXUtc20tMTEtMjQsLnB1cmUtdS1zbS0xMi0yNCwucHVyZS11LXNtLTEzLTI0LC5wdXJlLXUtc20tMTQtMjQsLnB1cmUtdS1zbS0xNS0yNCwucHVyZS11LXNtLTE2LTI0LC5wdXJlLXUtc20tMTctMjQsLnB1cmUtdS1zbS0xOC0yNCwucHVyZS11LXNtLTE5LTI0LC5wdXJlLXUtc20tMi0yNCwucHVyZS11LXNtLTItMywucHVyZS11LXNtLTItNSwucHVyZS11LXNtLTIwLTI0LC5wdXJlLXUtc20tMjEtMjQsLnB1cmUtdS1zbS0yMi0yNCwucHVyZS11LXNtLTIzLTI0LC5wdXJlLXUtc20tMjQtMjQsLnB1cmUtdS1zbS0zLTI0LC5wdXJlLXUtc20tMy00LC5wdXJlLXUtc20tMy01LC5wdXJlLXUtc20tMy04LC5wdXJlLXUtc20tNC0yNCwucHVyZS11LXNtLTQtNSwucHVyZS11LXNtLTUtMTIsLnB1cmUtdS1zbS01LTI0LC5wdXJlLXUtc20tNS01LC5wdXJlLXUtc20tNS02LC5wdXJlLXUtc20tNS04LC5wdXJlLXUtc20tNi0yNCwucHVyZS11LXNtLTctMTIsLnB1cmUtdS1zbS03LTI0LC5wdXJlLXUtc20tNy04LC5wdXJlLXUtc20tOC0yNCwucHVyZS11LXNtLTktMjR7ZGlzcGxheTppbmxpbmUtYmxvY2s7em9vbToxO2xldHRlci1zcGFjaW5nOm5vcm1hbDt3b3JkLXNwYWNpbmc6bm9ybWFsO3ZlcnRpY2FsLWFsaWduOnRvcDt0ZXh0LXJlbmRlcmluZzphdXRvfS5wdXJlLXUtc20tMS0yNHt3aWR0aDo0LjE2NjclfS5wdXJlLXUtc20tMS0xMiwucHVyZS11LXNtLTItMjR7d2lkdGg6OC4zMzMzJX0ucHVyZS11LXNtLTEtOCwucHVyZS11LXNtLTMtMjR7d2lkdGg6MTIuNSV9LnB1cmUtdS1zbS0xLTYsLnB1cmUtdS1zbS00LTI0e3dpZHRoOjE2LjY2NjclfS5wdXJlLXUtc20tMS01e3dpZHRoOjIwJX0ucHVyZS11LXNtLTUtMjR7d2lkdGg6MjAuODMzMyV9LnB1cmUtdS1zbS0xLTQsLnB1cmUtdS1zbS02LTI0e3dpZHRoOjI1JX0ucHVyZS11LXNtLTctMjR7d2lkdGg6MjkuMTY2NyV9LnB1cmUtdS1zbS0xLTMsLnB1cmUtdS1zbS04LTI0e3dpZHRoOjMzLjMzMzMlfS5wdXJlLXUtc20tMy04LC5wdXJlLXUtc20tOS0yNHt3aWR0aDozNy41JX0ucHVyZS11LXNtLTItNXt3aWR0aDo0MCV9LnB1cmUtdS1zbS0xMC0yNCwucHVyZS11LXNtLTUtMTJ7d2lkdGg6NDEuNjY2NyV9LnB1cmUtdS1zbS0xMS0yNHt3aWR0aDo0NS44MzMzJX0ucHVyZS11LXNtLTEtMiwucHVyZS11LXNtLTEyLTI0e3dpZHRoOjUwJX0ucHVyZS11LXNtLTEzLTI0e3dpZHRoOjU0LjE2NjclfS5wdXJlLXUtc20tMTQtMjQsLnB1cmUtdS1zbS03LTEye3dpZHRoOjU4LjMzMzMlfS5wdXJlLXUtc20tMy01e3dpZHRoOjYwJX0ucHVyZS11LXNtLTE1LTI0LC5wdXJlLXUtc20tNS04e3dpZHRoOjYyLjUlfS5wdXJlLXUtc20tMTYtMjQsLnB1cmUtdS1zbS0yLTN7d2lkdGg6NjYuNjY2NyV9LnB1cmUtdS1zbS0xNy0yNHt3aWR0aDo3MC44MzMzJX0ucHVyZS11LXNtLTE4LTI0LC5wdXJlLXUtc20tMy00e3dpZHRoOjc1JX0ucHVyZS11LXNtLTE5LTI0e3dpZHRoOjc5LjE2NjclfS5wdXJlLXUtc20tNC01e3dpZHRoOjgwJX0ucHVyZS11LXNtLTIwLTI0LC5wdXJlLXUtc20tNS02e3dpZHRoOjgzLjMzMzMlfS5wdXJlLXUtc20tMjEtMjQsLnB1cmUtdS1zbS03LTh7d2lkdGg6ODcuNSV9LnB1cmUtdS1zbS0xMS0xMiwucHVyZS11LXNtLTIyLTI0e3dpZHRoOjkxLjY2NjclfS5wdXJlLXUtc20tMjMtMjR7d2lkdGg6OTUuODMzMyV9LnB1cmUtdS1zbS0xLC5wdXJlLXUtc20tMS0xLC5wdXJlLXUtc20tMjQtMjQsLnB1cmUtdS1zbS01LTV7d2lkdGg6MTAwJX19QG1lZGlhIHNjcmVlbiBhbmQgKG1pbi13aWR0aDo0OGVtKXsucHVyZS11LW1kLTEsLnB1cmUtdS1tZC0xLTEsLnB1cmUtdS1tZC0xLTEyLC5wdXJlLXUtbWQtMS0yLC5wdXJlLXUtbWQtMS0yNCwucHVyZS11LW1kLTEtMywucHVyZS11LW1kLTEtNCwucHVyZS11LW1kLTEtNSwucHVyZS11LW1kLTEtNiwucHVyZS11LW1kLTEtOCwucHVyZS11LW1kLTEwLTI0LC5wdXJlLXUtbWQtMTEtMTIsLnB1cmUtdS1tZC0xMS0yNCwucHVyZS11LW1kLTEyLTI0LC5wdXJlLXUtbWQtMTMtMjQsLnB1cmUtdS1tZC0xNC0yNCwucHVyZS11LW1kLTE1LTI0LC5wdXJlLXUtbWQtMTYtMjQsLnB1cmUtdS1tZC0xNy0yNCwucHVyZS11LW1kLTE4LTI0LC5wdXJlLXUtbWQtMTktMjQsLnB1cmUtdS1tZC0yLTI0LC5wdXJlLXUtbWQtMi0zLC5wdXJlLXUtbWQtMi01LC5wdXJlLXUtbWQtMjAtMjQsLnB1cmUtdS1tZC0yMS0yNCwucHVyZS11LW1kLTIyLTI0LC5wdXJlLXUtbWQtMjMtMjQsLnB1cmUtdS1tZC0yNC0yNCwucHVyZS11LW1kLTMtMjQsLnB1cmUtdS1tZC0zLTQsLnB1cmUtdS1tZC0zLTUsLnB1cmUtdS1tZC0zLTgsLnB1cmUtdS1tZC00LTI0LC5wdXJlLXUtbWQtNC01LC5wdXJlLXUtbWQtNS0xMiwucHVyZS11LW1kLTUtMjQsLnB1cmUtdS1tZC01LTUsLnB1cmUtdS1tZC01LTYsLnB1cmUtdS1tZC01LTgsLnB1cmUtdS1tZC02LTI0LC5wdXJlLXUtbWQtNy0xMiwucHVyZS11LW1kLTctMjQsLnB1cmUtdS1tZC03LTgsLnB1cmUtdS1tZC04LTI0LC5wdXJlLXUtbWQtOS0yNHtkaXNwbGF5OmlubGluZS1ibG9jazt6b29tOjE7bGV0dGVyLXNwYWNpbmc6bm9ybWFsO3dvcmQtc3BhY2luZzpub3JtYWw7dmVydGljYWwtYWxpZ246dG9wO3RleHQtcmVuZGVyaW5nOmF1dG99LnB1cmUtdS1tZC0xLTI0e3dpZHRoOjQuMTY2NyV9LnB1cmUtdS1tZC0xLTEyLC5wdXJlLXUtbWQtMi0yNHt3aWR0aDo4LjMzMzMlfS5wdXJlLXUtbWQtMS04LC5wdXJlLXUtbWQtMy0yNHt3aWR0aDoxMi41JX0ucHVyZS11LW1kLTEtNiwucHVyZS11LW1kLTQtMjR7d2lkdGg6MTYuNjY2NyV9LnB1cmUtdS1tZC0xLTV7d2lkdGg6MjAlfS5wdXJlLXUtbWQtNS0yNHt3aWR0aDoyMC44MzMzJX0ucHVyZS11LW1kLTEtNCwucHVyZS11LW1kLTYtMjR7d2lkdGg6MjUlfS5wdXJlLXUtbWQtNy0yNHt3aWR0aDoyOS4xNjY3JX0ucHVyZS11LW1kLTEtMywucHVyZS11LW1kLTgtMjR7d2lkdGg6MzMuMzMzMyV9LnB1cmUtdS1tZC0zLTgsLnB1cmUtdS1tZC05LTI0e3dpZHRoOjM3LjUlfS5wdXJlLXUtbWQtMi01e3dpZHRoOjQwJX0ucHVyZS11LW1kLTEwLTI0LC5wdXJlLXUtbWQtNS0xMnt3aWR0aDo0MS42NjY3JX0ucHVyZS11LW1kLTExLTI0e3dpZHRoOjQ1LjgzMzMlfS5wdXJlLXUtbWQtMS0yLC5wdXJlLXUtbWQtMTItMjR7d2lkdGg6NTAlfS5wdXJlLXUtbWQtMTMtMjR7d2lkdGg6NTQuMTY2NyV9LnB1cmUtdS1tZC0xNC0yNCwucHVyZS11LW1kLTctMTJ7d2lkdGg6NTguMzMzMyV9LnB1cmUtdS1tZC0zLTV7d2lkdGg6NjAlfS5wdXJlLXUtbWQtMTUtMjQsLnB1cmUtdS1tZC01LTh7d2lkdGg6NjIuNSV9LnB1cmUtdS1tZC0xNi0yNCwucHVyZS11LW1kLTItM3t3aWR0aDo2Ni42NjY3JX0ucHVyZS11LW1kLTE3LTI0e3dpZHRoOjcwLjgzMzMlfS5wdXJlLXUtbWQtMTgtMjQsLnB1cmUtdS1tZC0zLTR7d2lkdGg6NzUlfS5wdXJlLXUtbWQtMTktMjR7d2lkdGg6NzkuMTY2NyV9LnB1cmUtdS1tZC00LTV7d2lkdGg6ODAlfS5wdXJlLXUtbWQtMjAtMjQsLnB1cmUtdS1tZC01LTZ7d2lkdGg6ODMuMzMzMyV9LnB1cmUtdS1tZC0yMS0yNCwucHVyZS11LW1kLTctOHt3aWR0aDo4Ny41JX0ucHVyZS11LW1kLTExLTEyLC5wdXJlLXUtbWQtMjItMjR7d2lkdGg6OTEuNjY2NyV9LnB1cmUtdS1tZC0yMy0yNHt3aWR0aDo5NS44MzMzJX0ucHVyZS11LW1kLTEsLnB1cmUtdS1tZC0xLTEsLnB1cmUtdS1tZC0yNC0yNCwucHVyZS11LW1kLTUtNXt3aWR0aDoxMDAlfX1AbWVkaWEgc2NyZWVuIGFuZCAobWluLXdpZHRoOjY0ZW0pey5wdXJlLXUtbGctMSwucHVyZS11LWxnLTEtMSwucHVyZS11LWxnLTEtMTIsLnB1cmUtdS1sZy0xLTIsLnB1cmUtdS1sZy0xLTI0LC5wdXJlLXUtbGctMS0zLC5wdXJlLXUtbGctMS00LC5wdXJlLXUtbGctMS01LC5wdXJlLXUtbGctMS02LC5wdXJlLXUtbGctMS04LC5wdXJlLXUtbGctMTAtMjQsLnB1cmUtdS1sZy0xMS0xMiwucHVyZS11LWxnLTExLTI0LC5wdXJlLXUtbGctMTItMjQsLnB1cmUtdS1sZy0xMy0yNCwucHVyZS11LWxnLTE0LTI0LC5wdXJlLXUtbGctMTUtMjQsLnB1cmUtdS1sZy0xNi0yNCwucHVyZS11LWxnLTE3LTI0LC5wdXJlLXUtbGctMTgtMjQsLnB1cmUtdS1sZy0xOS0yNCwucHVyZS11LWxnLTItMjQsLnB1cmUtdS1sZy0yLTMsLnB1cmUtdS1sZy0yLTUsLnB1cmUtdS1sZy0yMC0yNCwucHVyZS11LWxnLTIxLTI0LC5wdXJlLXUtbGctMjItMjQsLnB1cmUtdS1sZy0yMy0yNCwucHVyZS11LWxnLTI0LTI0LC5wdXJlLXUtbGctMy0yNCwucHVyZS11LWxnLTMtNCwucHVyZS11LWxnLTMtNSwucHVyZS11LWxnLTMtOCwucHVyZS11LWxnLTQtMjQsLnB1cmUtdS1sZy00LTUsLnB1cmUtdS1sZy01LTEyLC5wdXJlLXUtbGctNS0yNCwucHVyZS11LWxnLTUtNSwucHVyZS11LWxnLTUtNiwucHVyZS11LWxnLTUtOCwucHVyZS11LWxnLTYtMjQsLnB1cmUtdS1sZy03LTEyLC5wdXJlLXUtbGctNy0yNCwucHVyZS11LWxnLTctOCwucHVyZS11LWxnLTgtMjQsLnB1cmUtdS1sZy05LTI0e2Rpc3BsYXk6aW5saW5lLWJsb2NrO3pvb206MTtsZXR0ZXItc3BhY2luZzpub3JtYWw7d29yZC1zcGFjaW5nOm5vcm1hbDt2ZXJ0aWNhbC1hbGlnbjp0b3A7dGV4dC1yZW5kZXJpbmc6YXV0b30ucHVyZS11LWxnLTEtMjR7d2lkdGg6NC4xNjY3JX0ucHVyZS11LWxnLTEtMTIsLnB1cmUtdS1sZy0yLTI0e3dpZHRoOjguMzMzMyV9LnB1cmUtdS1sZy0xLTgsLnB1cmUtdS1sZy0zLTI0e3dpZHRoOjEyLjUlfS5wdXJlLXUtbGctMS02LC5wdXJlLXUtbGctNC0yNHt3aWR0aDoxNi42NjY3JX0ucHVyZS11LWxnLTEtNXt3aWR0aDoyMCV9LnB1cmUtdS1sZy01LTI0e3dpZHRoOjIwLjgzMzMlfS5wdXJlLXUtbGctMS00LC5wdXJlLXUtbGctNi0yNHt3aWR0aDoyNSV9LnB1cmUtdS1sZy03LTI0e3dpZHRoOjI5LjE2NjclfS5wdXJlLXUtbGctMS0zLC5wdXJlLXUtbGctOC0yNHt3aWR0aDozMy4zMzMzJX0ucHVyZS11LWxnLTMtOCwucHVyZS11LWxnLTktMjR7d2lkdGg6MzcuNSV9LnB1cmUtdS1sZy0yLTV7d2lkdGg6NDAlfS5wdXJlLXUtbGctMTAtMjQsLnB1cmUtdS1sZy01LTEye3dpZHRoOjQxLjY2NjclfS5wdXJlLXUtbGctMTEtMjR7d2lkdGg6NDUuODMzMyV9LnB1cmUtdS1sZy0xLTIsLnB1cmUtdS1sZy0xMi0yNHt3aWR0aDo1MCV9LnB1cmUtdS1sZy0xMy0yNHt3aWR0aDo1NC4xNjY3JX0ucHVyZS11LWxnLTE0LTI0LC5wdXJlLXUtbGctNy0xMnt3aWR0aDo1OC4zMzMzJX0ucHVyZS11LWxnLTMtNXt3aWR0aDo2MCV9LnB1cmUtdS1sZy0xNS0yNCwucHVyZS11LWxnLTUtOHt3aWR0aDo2Mi41JX0ucHVyZS11LWxnLTE2LTI0LC5wdXJlLXUtbGctMi0ze3dpZHRoOjY2LjY2NjclfS5wdXJlLXUtbGctMTctMjR7d2lkdGg6NzAuODMzMyV9LnB1cmUtdS1sZy0xOC0yNCwucHVyZS11LWxnLTMtNHt3aWR0aDo3NSV9LnB1cmUtdS1sZy0xOS0yNHt3aWR0aDo3OS4xNjY3JX0ucHVyZS11LWxnLTQtNXt3aWR0aDo4MCV9LnB1cmUtdS1sZy0yMC0yNCwucHVyZS11LWxnLTUtNnt3aWR0aDo4My4zMzMzJX0ucHVyZS11LWxnLTIxLTI0LC5wdXJlLXUtbGctNy04e3dpZHRoOjg3LjUlfS5wdXJlLXUtbGctMTEtMTIsLnB1cmUtdS1sZy0yMi0yNHt3aWR0aDo5MS42NjY3JX0ucHVyZS11LWxnLTIzLTI0e3dpZHRoOjk1LjgzMzMlfS5wdXJlLXUtbGctMSwucHVyZS11LWxnLTEtMSwucHVyZS11LWxnLTI0LTI0LC5wdXJlLXUtbGctNS01e3dpZHRoOjEwMCV9fUBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6ODBlbSl7LnB1cmUtdS14bC0xLC5wdXJlLXUteGwtMS0xLC5wdXJlLXUteGwtMS0xMiwucHVyZS11LXhsLTEtMiwucHVyZS11LXhsLTEtMjQsLnB1cmUtdS14bC0xLTMsLnB1cmUtdS14bC0xLTQsLnB1cmUtdS14bC0xLTUsLnB1cmUtdS14bC0xLTYsLnB1cmUtdS14bC0xLTgsLnB1cmUtdS14bC0xMC0yNCwucHVyZS11LXhsLTExLTEyLC5wdXJlLXUteGwtMTEtMjQsLnB1cmUtdS14bC0xMi0yNCwucHVyZS11LXhsLTEzLTI0LC5wdXJlLXUteGwtMTQtMjQsLnB1cmUtdS14bC0xNS0yNCwucHVyZS11LXhsLTE2LTI0LC5wdXJlLXUteGwtMTctMjQsLnB1cmUtdS14bC0xOC0yNCwucHVyZS11LXhsLTE5LTI0LC5wdXJlLXUteGwtMi0yNCwucHVyZS11LXhsLTItMywucHVyZS11LXhsLTItNSwucHVyZS11LXhsLTIwLTI0LC5wdXJlLXUteGwtMjEtMjQsLnB1cmUtdS14bC0yMi0yNCwucHVyZS11LXhsLTIzLTI0LC5wdXJlLXUteGwtMjQtMjQsLnB1cmUtdS14bC0zLTI0LC5wdXJlLXUteGwtMy00LC5wdXJlLXUteGwtMy01LC5wdXJlLXUteGwtMy04LC5wdXJlLXUteGwtNC0yNCwucHVyZS11LXhsLTQtNSwucHVyZS11LXhsLTUtMTIsLnB1cmUtdS14bC01LTI0LC5wdXJlLXUteGwtNS01LC5wdXJlLXUteGwtNS02LC5wdXJlLXUteGwtNS04LC5wdXJlLXUteGwtNi0yNCwucHVyZS11LXhsLTctMTIsLnB1cmUtdS14bC03LTI0LC5wdXJlLXUteGwtNy04LC5wdXJlLXUteGwtOC0yNCwucHVyZS11LXhsLTktMjR7ZGlzcGxheTppbmxpbmUtYmxvY2s7em9vbToxO2xldHRlci1zcGFjaW5nOm5vcm1hbDt3b3JkLXNwYWNpbmc6bm9ybWFsO3ZlcnRpY2FsLWFsaWduOnRvcDt0ZXh0LXJlbmRlcmluZzphdXRvfS5wdXJlLXUteGwtMS0yNHt3aWR0aDo0LjE2NjclfS5wdXJlLXUteGwtMS0xMiwucHVyZS11LXhsLTItMjR7d2lkdGg6OC4zMzMzJX0ucHVyZS11LXhsLTEtOCwucHVyZS11LXhsLTMtMjR7d2lkdGg6MTIuNSV9LnB1cmUtdS14bC0xLTYsLnB1cmUtdS14bC00LTI0e3dpZHRoOjE2LjY2NjclfS5wdXJlLXUteGwtMS01e3dpZHRoOjIwJX0ucHVyZS11LXhsLTUtMjR7d2lkdGg6MjAuODMzMyV9LnB1cmUtdS14bC0xLTQsLnB1cmUtdS14bC02LTI0e3dpZHRoOjI1JX0ucHVyZS11LXhsLTctMjR7d2lkdGg6MjkuMTY2NyV9LnB1cmUtdS14bC0xLTMsLnB1cmUtdS14bC04LTI0e3dpZHRoOjMzLjMzMzMlfS5wdXJlLXUteGwtMy04LC5wdXJlLXUteGwtOS0yNHt3aWR0aDozNy41JX0ucHVyZS11LXhsLTItNXt3aWR0aDo0MCV9LnB1cmUtdS14bC0xMC0yNCwucHVyZS11LXhsLTUtMTJ7d2lkdGg6NDEuNjY2NyV9LnB1cmUtdS14bC0xMS0yNHt3aWR0aDo0NS44MzMzJX0ucHVyZS11LXhsLTEtMiwucHVyZS11LXhsLTEyLTI0e3dpZHRoOjUwJX0ucHVyZS11LXhsLTEzLTI0e3dpZHRoOjU0LjE2NjclfS5wdXJlLXUteGwtMTQtMjQsLnB1cmUtdS14bC03LTEye3dpZHRoOjU4LjMzMzMlfS5wdXJlLXUteGwtMy01e3dpZHRoOjYwJX0ucHVyZS11LXhsLTE1LTI0LC5wdXJlLXUteGwtNS04e3dpZHRoOjYyLjUlfS5wdXJlLXUteGwtMTYtMjQsLnB1cmUtdS14bC0yLTN7d2lkdGg6NjYuNjY2NyV9LnB1cmUtdS14bC0xNy0yNHt3aWR0aDo3MC44MzMzJX0ucHVyZS11LXhsLTE4LTI0LC5wdXJlLXUteGwtMy00e3dpZHRoOjc1JX0ucHVyZS11LXhsLTE5LTI0e3dpZHRoOjc5LjE2NjclfS5wdXJlLXUteGwtNC01e3dpZHRoOjgwJX0ucHVyZS11LXhsLTIwLTI0LC5wdXJlLXUteGwtNS02e3dpZHRoOjgzLjMzMzMlfS5wdXJlLXUteGwtMjEtMjQsLnB1cmUtdS14bC03LTh7d2lkdGg6ODcuNSV9LnB1cmUtdS14bC0xMS0xMiwucHVyZS11LXhsLTIyLTI0e3dpZHRoOjkxLjY2NjclfS5wdXJlLXUteGwtMjMtMjR7d2lkdGg6OTUuODMzMyV9LnB1cmUtdS14bC0xLC5wdXJlLXUteGwtMS0xLC5wdXJlLXUteGwtMjQtMjQsLnB1cmUtdS14bC01LTV7d2lkdGg6MTAwJX19Ci8qIEFsbCBnbG9iYWwgc3R5bGVzIHNob3VsZCBiZSBkZWZpbmVkIGhlcmUgKi8KLyogQWxsIGdsb2JhbCB2YXJpYWJsZSBhbmQgZnVuY3Rpb24gcmVmZXJlbmNlcyBzaG91bGQgYmUgaW1wb3J0ZWQgaGVyZSAqLwovKiBBbGwgZ2xvYmFsIHZhcmlhYmxlcyBzaG91bGQgYmUgZGVjbGFyZWQgaGVyZSAqLwpib2R5IHsKICBtYXJnaW46IDA7IH0KCi5zdHJvbmcgewogIGZvbnQtc2l6ZTogYm9sZDsgfQoKaHRtbCB7CiAgLW1zLXRleHQtc2l6ZS1hZGp1c3Q6IGF1dG87CiAgLXdlYmtpdC10ZXh0LXNpemUtYWRqdXN0OiBhdXRvOyB9CgpALW1vei1kb2N1bWVudCB1cmwtcHJlZml4KCkgewogIGgxIHsKICAgIGNvbG9yOiByZWQ7IH0gfQoKLm5wYy1hcHAgewogIG1pbi1oZWlnaHQ6IDEwMHZoOwogIG1heC13aWR0aDogMTAwdnc7IH0KICAudGhlbWUtbGlnaHQgLm5wYy1hcHAgewogICAgY29sb3I6ICMxMTE7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOyB9CiAgLnRoZW1lLWRhcmsgLm5wYy1hcHAgewogICAgY29sb3I6ICNmZmY7CiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMTExOyB9Cgo8L3N0eWxlPgogICAgPC9oZWFkPgogICAgPGJvZHk+CiAgICAgICAgPGRpdiBpZD0icm9vdCI+PC9kaXY+CiAgICAgICAgPHNjcmlwdCB0eXBlPSd0ZXh0L2phdmFzY3JpcHQnPnZhciB0ZW1wbGF0ZV9kYXRhID0geyJzY2hvb2xJZCI6bnVsbCwiZGF0YVllYXIiOiIyMDE4LTE5IiwiaG91c2luZ09mZmVyZWQiOiJOIiwiaG91c2luZ1JlcXVpcmVkIjpudWxsLCJjYWxlbmRhclN5c3RlbSI6IkFjYWRlbWljIiwiZGlmZmVyZW50VHVpdGlvbiI6Ik4iLCJkdF9pbkRpc3RyaWN0IjpmYWxzZSwiZHRfaW5TdGF0ZSI6ZmFsc2UsImR0X291dFN0YXRlIjpmYWxzZSwibGFyZ2VzdFByb2dyYW0iOiIiLCJjb21wbGV0aW9uTW9udGhzIjowLCJncmFudEF3YXJkcyI6OTYsImV4cGxhbmF0aW9uMSI6bnVsbCwiZXhwbGFuYXRpb24yIjpudWxsLCJleHBsYW5hdGlvbjMiOm51bGwsInRhYmxlT25lIjp7InR1aXRpb24iOnsiYW1vdW50Ijo0NjIwLCJpbkRpc3RyaWN0IjowLCJpblN0YXRlIjowLCJvdXRTdGF0ZSI6MH0sImJvb2tzIjp7ImFtb3VudCI6MTE4MH0sImV4cGVuc2VzUm9vbSI6eyJvbkNhbXB1cyI6MCwib2ZmQ2FtcHVzTm9GYW1pbHkiOjgwMDAsIm9mZkNhbXB1c0ZhbWlseSI6MH0sImV4cGVuc2VzT3RoZXIiOnsib25DYW1wdXMiOjAsIm9mZkNhbXB1c05vRmFtaWx5Ijo2ODAwLCJvZmZDYW1wdXNGYW1pbHkiOjUyMDB9fSwidGFibGVUd28iOnsiYW1vdW50Ijp7Im9uQ2FtcHVzIjpbbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF0sIm9mZkNhbXB1c05vRmFtaWx5IjpbMTAxOTUsODUwMCw3NTAwLDY1MDAsMjUwMCwxLDEsMSwxLDEsMSwwLDBdLCJvZmZDYW1wdXNGYW1pbHkiOlsxMDE5NSw4NTAwLDc1MDAsNjUwMCwyNTAwLDEsMSwxLDEsMSwxLDAsMF19LCJpbkRpc3RyaWN0Ijp7Im9uQ2FtcHVzIjpbbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF0sIm9mZkNhbXB1c05vRmFtaWx5IjpbbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF0sIm9mZkNhbXB1c0ZhbWlseSI6W251bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdfSwiaW5TdGF0ZSI6eyJvbkNhbXB1cyI6W251bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLCJvZmZDYW1wdXNOb0ZhbWlseSI6W251bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdLCJvZmZDYW1wdXNGYW1pbHkiOltudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsXX0sIm91dFN0YXRlIjp7Im9uQ2FtcHVzIjpbbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF0sIm9mZkNhbXB1c05vRmFtaWx5IjpbbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbF0sIm9mZkNhbXB1c0ZhbWlseSI6W251bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGxdfX0sImVmY1RhYmxlcyI6eyJkZXBlbmRlbnQiOlt7Im51bUNvbGxlZ2UiOjEsIm51bUZhbWlseSI6MiwiaW5jb21lUmFuZ2UiOiJMZXNzIHRoYW4gMzAsMDAwIiwiaW5jb21lTWluIjowLCJpbmNvbWVNYXgiOjMwMDAwLCJFRkMiOjB9LHsibnVtQ29sbGVnZSI6MSwibnVtRmFtaWx5IjoyLCJpbmNvbWVSYW5nZSI6IjMwLDAwMCAtIDM5LDk5OSIsImluY29tZU1pbiI6MzAwMDAsImluY29tZU1heCI6Mzk5OTksIkVGQyI6MTM1OX0seyJudW1Db2xsZWdlIjoxLCJudW1GYW1pbHkiOjIsImluY29tZVJhbmdlIjoiNDAsMDAwIC0gNDksOTk5IiwiaW5jb21lTWluIjo0MDAwMCwiaW5jb21lTWF4Ijo0OTk5OSwiRUZDIjozMTA4fSx7Im51bUNvbGxlZ2UiOjEsIm51bUZhbWlseSI6MiwiaW5jb21lUmFuZ2UiOiI1MCwwMDAgLSA1OSw5OTkiLCJpbmNvbWVNaW4iOjUwMDAwLCJpbmNvbWVNYXgiOjU5OTk5LCJFRkMiOjUxMzd9LHsibnVtQ29sbGVnZSI6MSwibnVtRmFtaWx5IjoyLCJpbmNvbWVSYW5nZSI6IjYwLDAwMCAtIDY5LDk5OSIsImluY29tZU1pbiI6NjAwMDAsImluY29tZU1heCI6Njk5OTksIkVGQyI6NzU1OX0seyJudW1Db2xsZWdlIjoxLCJudW1GYW1pbHkiOjIsImluY29tZVJhbmdlIjoiNzAsMDAwIC0gNzksOTk5IiwiaW5jb21lTWluIjo3MDAwMCwiaW5jb21lTWF4Ijo3OTk5OSwiRUZDIjoxMDcxOX0seyJudW1Db2xsZWdlIjoxLCJudW1GYW1pbHkiOjIsImluY29tZVJhbmdlIjoiODAsMDAwIC0gODksOTk5IiwiaW5jb21lTWluIjo4MDAwMCwiaW5jb21lTWF4Ijo4OTk5OSwiRUZDIjoxNDAyN30seyJudW1Db2xsZWdlIjoxLCJudW1GYW1pbHkiOjIsImluY29tZVJhbmdlIjoiOTAsMDAwIC0gOTksOTk5IiwiaW5jb21lTWluIjo5MDAwMCwiaW5jb21lTWF4Ijo5OTk5OSwiRUZDIjoxNzQxM30seyJudW1Db2xsZWdlIjoxLCJudW1GYW1pbHkiOjIsImluY29tZVJhbmdlIjoiMTAwLDAwMCBhbmQgaGlnaGVyIiwiaW5jb21lTWluIjoxMDAwMDAsImluY29tZU1heCI6NTAwMDAwLCJFRkMiOjMwOTg0fSx7Im51bUNvbGxlZ2UiOjEsIm51bUZhbWlseSI6MywiaW5jb21lUmFuZ2UiOiJMZXNzIHRoYW4gMzAsMDAwIiwiaW5jb21lTWluIjowLCJpbmNvbWVNYXgiOjMwMDAwLCJFRkMiOjB9LHsibnVtQ29sbGVnZSI6MSwibnVtRmFtaWx5IjozLCJpbmNvbWVSYW5nZSI6IjMwLDAwMCAtIDM5LDk5OSIsImluY29tZU1pbiI6MzAwMDAsImluY29tZU1heCI6Mzk5OTksIkVGQyI6NzI3fSx7Im51bUNvbGxlZ2UiOjEsIm51bUZhbWlseSI6MywiaW5jb21lUmFuZ2UiOiI0MCwwMDAgLSA0OSw5OTkiLCJpbmNvbWVNaW4iOjQwMDAwLCJpbmNvbWVNYXgiOjQ5OTk5LCJFRkMiOjI1NzV9LHsibnVtQ29sbGVnZSI6MSwibnVtRmFtaWx5IjozLCJpbmNvbWVSYW5nZSI6IjUwLDAwMCAtIDU5LDk5OSIsImluY29tZU1pbiI6NTAwMDAsImluY29tZU1heCI6NTk5OTksIkVGQyI6NDU1MH0seyJudW1Db2xsZWdlIjoxLCJudW1GYW1pbHkiOjMsImluY29tZVJhbmdlIjoiNjAsMDAwIC0gNjksOTk5IiwiaW5jb21lTWluIjo2MDAwMCwiaW5jb21lTWF4Ijo2OTk5OSwiRUZDIjo2OTIwfSx7Im51bUNvbGxlZ2UiOjEsIm51bUZhbWlseSI6MywiaW5jb21lUmFuZ2UiOiI3MCwwMDAgLSA3OSw5OTkiLCJpbmNvbWVNaW4iOjcwMDAwLCJpbmNvbWVNYXgiOjc5OTk5LCJFRkMiOjk5Mjl9LHsibnVtQ29sbGVnZSI6MSwibnVtRmFtaWx5IjozLCJpbmNvbWVSYW5nZSI6IjgwLDAwMCAtIDg5LDk5OSIsImluY29tZU1pbiI6ODAwMDAsImluY29tZU1heCI6ODk5OTksIkVGQyI6MTM0NDN9LHsibnVtQ29sbGVnZSI6MSwibnVtRmFtaWx5IjozLCJpbmNvbWVSYW5nZSI6IjkwLDAwMCAtIDk5LDk5OSIsImluY29tZU1pbiI6OTAwMDAsImluY29tZU1heCI6OTk5OTksIkVGQyI6MTcwNjR9LHsibnVtQ29sbGVnZSI6MSwibnVtRmFtaWx5IjozLCJpbmNvbWVSYW5nZSI6IjEwMCwwMDAgYW5kIGhpZ2hlciIsImluY29tZU1pbiI6MTAwMDAwLCJpbmNvbWVNYXgiOjUwMDAwMCwiRUZDIjozNTUxOH0seyJudW1Db2xsZWdlIjoxLCJudW1GYW1pbHkiOjQsImluY29tZVJhbmdlIjoiTGVzcyB0aGFuIDMwLDAwMCIsImluY29tZU1pbiI6MCwiaW5jb21lTWF4IjozMDAwMCwiRUZDIjowfSx7Im51bUNvbGxlZ2UiOjEsIm51bUZhbWlseSI6NCwiaW5jb21lUmFuZ2UiOiIzMCwwMDAgLSAzOSw5OTkiLCJpbmNvbWVNaW4iOjMwMDAwLCJpbmNvbWVNYXgiOjM5OTk5LCJFRkMiOjB9LHsibnVtQ29sbGVnZSI6MSwibnVtRmFtaWx5Ijo0LCJpbmNvbWVSYW5nZSI6IjQwLDAwMCAtIDQ5LDk5OSIsImluY29tZU1pbiI6NDAwMDAsImluY29tZU1heCI6NDk5OTksIkVGQyI6MTY1Nn0seyJudW1Db2xsZWdlIjoxLCJudW1GYW1pbHkiOjQsImluY29tZVJhbmdlIjoiNTAsMDAwIC0gNTksOTk5IiwiaW5jb21lTWluIjo1MDAwMCwiaW5jb21lTWF4Ijo1OTk5OSwiRUZDIjozNTg3fSx7Im51bUNvbGxlZ2UiOjEsIm51bUZhbWlseSI6NCwiaW5jb21lUmFuZ2UiOiI2MCwwMDAgLSA2OSw5OTkiLCJpbmNvbWVNaW4iOjYwMDAwLCJpbmNvbWVNYXgiOjY5OTk5LCJFRkMiOjU3NDF9LHsibnVtQ29sbGVnZSI6MSwibnVtRmFtaWx5Ijo0LCJpbmNvbWVSYW5nZSI6IjcwLDAwMCAtIDc5LDk5OSIsImluY29tZU1pbiI6NzAwMDAsImluY29tZU1heCI6Nzk5OTksIkVGQyI6ODI1N30seyJudW1Db2xsZWdlIjoxLCJudW1GYW1pbHkiOjQsImluY29tZVJhbmdlIjoiODAsMDAwIC0gODksOTk5IiwiaW5jb21lTWluIjo4MDAwMCwiaW5jb21lTWF4Ijo4OTk5OSwiRUZDIjoxMTYxOX0seyJudW1Db2xsZWdlIjoxLCJudW1GYW1pbHkiOjQsImluY29tZVJhbmdlIjoiOTAsMDAwIC0gOTksOTk5IiwiaW5jb21lTWluIjo5MDAwMCwiaW5jb21lTWF4Ijo5OTk5OSwiRUZDIjoxNTIwOX0seyJudW1Db2xsZWdlIjoxLCJudW1GYW1pbHkiOjQsImluY29tZVJhbmdlIjoiMTAwLDAwMCBhbmQgaGlnaGVyIiwiaW5jb21lTWluIjoxMDAwMDAsImluY29tZU1heCI6NTAwMDAwLCJFRkMiOjM1MDE5fSx7Im51bUNvbGxlZ2UiOjEsIm51bUZhbWlseSI6NSwiaW5jb21lUmFuZ2UiOiJMZXNzIHRoYW4gMzAsMDAwIiwiaW5jb21lTWluIjowLCJpbmNvbWVNYXgiOjMwMDAwLCJFRkMiOjB9LHsibnVtQ29sbGVnZSI6MSwibnVtRmFtaWx5Ijo1LCJpbmNvbWVSYW5nZSI6IjMwLDAwMCAtIDM5LDk5OSIsImluY29tZU1pbiI6MzAwMDAsImluY29tZU1heCI6Mzk5OTksIkVGQyI6MH0seyJudW1Db2xsZWdlIjoxLCJudW1GYW1pbHkiOjUsImluY29tZVJhbmdlIjoiNDAsMDAwIC0gNDksOTk5IiwiaW5jb21lTWluIjo0MDAwMCwiaW5jb21lTWF4Ijo0OTk5OSwiRUZDIjo2NTl9LHsibnVtQ29sbGVnZSI6MSwibnVtRmFtaWx5Ijo1LCJpbmNvbWVSYW5nZSI6IjUwLDAwMCAtIDU5LDk5OSIsImluY29tZU1pbiI6NTAwMDAsImluY29tZU1heCI6NTk5OTksIkVGQyI6MjYyNn0seyJudW1Db2xsZWdlIjoxLCJudW1GYW1pbHkiOjUsImluY29tZVJhbmdlIjoiNjAsMDAwIC0gNjksOTk5IiwiaW5jb21lTWluIjo2MDAwMCwiaW5jb21lTWF4Ijo2OTk5OSwiRUZDIjo0NTcwfSx7Im51bUNvbGxlZ2UiOjEsIm51bUZhbWlseSI6NSwiaW5jb21lUmFuZ2UiOiI3MCwwMDAgLSA3OSw5OTkiLCJpbmNvbWVNaW4iOjcwMDAwLCJpbmNvbWVNYXgiOjc5OTk5LCJFRkMiOjY4NTZ9LHsibnVtQ29sbGVnZSI6MSwibnVtRmFtaWx5Ijo1LCJpbmNvbWVSYW5nZSI6IjgwLDAwMCAtIDg5LDk5OSIsImluY29tZU1pbiI6ODAwMDAsImluY29tZU1heCI6ODk5OTksIkVGQyI6OTgwOX0seyJudW1Db2xsZWdlIjoxLCJudW1GYW1pbHkiOjUsImluY29tZVJhbmdlIjoiOTAsMDAwIC0gOTksOTk5IiwiaW5jb21lTWluIjo5MDAwMCwiaW5jb21lTWF4Ijo5OTk5OSwiRUZDIjoxMzM5N30seyJudW1Db2xsZWdlIjoxLCJudW1GYW1pbHkiOjUsImluY29tZVJhbmdlIjoiMTAwLDAwMCBhbmQgaGlnaGVyIiwiaW5jb21lTWluIjoxMDAwMDAsImluY29tZU1heCI6NTAwMDAwLCJFRkMiOjMyNjQ5fSx7Im51bUNvbGxlZ2UiOjEsIm51bUZhbWlseSI6NiwiaW5jb21lUmFuZ2UiOiJMZXNzIHRoYW4gMzAsMDAwIiwiaW5jb21lTWluIjowLCJpbmNvbWVNYXgiOjMwMDAwLCJFRkMiOjB9LHsibnVtQ29sbGVnZSI6MSwibnVtRmFtaWx5Ijo2LCJpbmNvbWVSYW5nZSI6IjMwLDAwMCAtIDM5LDk5OSIsImluY29tZU1pbiI6MzAwMDAsImluY29tZU1heCI6Mzk5OTksIkVGQyI6MH0seyJudW1Db2xsZWdlIjoxLCJudW1GYW1pbHkiOjYsImluY29tZVJhbmdlIjoiNDAsMDAwIC0gNDksOTk5IiwiaW5jb21lTWluIjo0MDAwMCwiaW5jb21lTWF4Ijo0OTk5OSwiRUZDIjowfSx7Im51bUNvbGxlZ2UiOjEsIm51bUZhbWlseSI6NiwiaW5jb21lUmFuZ2UiOiI1MCwwMDAgLSA1OSw5OTkiLCJpbmNvbWVNaW4iOjUwMDAwLCJpbmNvbWVNYXgiOjU5OTk5LCJFRkMiOjEwMzR9LHsibnVtQ29sbGVnZSI6MSwibnVtRmFtaWx5Ijo2LCJpbmNvbWVSYW5nZSI6IjYwLDAwMCAtIDY5LDk5OSIsImluY29tZU1pbiI6NjAwMDAsImluY29tZU1heCI6Njk5OTksIkVGQyI6Mjk4MH0seyJudW1Db2xsZWdlIjoxLCJudW1GYW1pbHkiOjYsImluY29tZVJhbmdlIjoiNzAsMDAwIC0gNzksOTk5IiwiaW5jb21lTWluIjo3MDAwMCwiaW5jb21lTWF4Ijo3OTk5OSwiRUZDIjo1MDczfSx7Im51bUNvbGxlZ2UiOjEsIm51bUZhbWlseSI6NiwiaW5jb21lUmFuZ2UiOiI4MCwwMDAgLSA4OSw5OTkiLCJpbmNvbWVNaW4iOjgwMDAwLCJpbmNvbWVNYXgiOjg5OTk5LCJFRkMiOjc0NTF9LHsibnVtQ29sbGVnZSI6MSwibnVtRmFtaWx5Ijo2LCJpbmNvbWVSYW5nZSI6IjkwLDAwMCAtIDk5LDk5OSIsImluY29tZU1pbiI6OTAwMDAsImluY29tZU1heCI6OTk5OTksIkVGQyI6MTA2Mzh9LHsibnVtQ29sbGVnZSI6MSwibnVtRmFtaWx5Ijo2LCJpbmNvbWVSYW5nZSI6IjEwMCwwMDAgYW5kIGhpZ2hlciIsImluY29tZU1pbiI6MTAwMDAwLCJpbmNvbWVNYXgiOjUwMDAwMCwiRUZDIjoyNzgwN30seyJudW1Db2xsZWdlIjoyLCJudW1GYW1pbHkiOjMsImluY29tZVJhbmdlIjoiTGVzcyB0aGFuIDMwLDAwMCIsImluY29tZU1pbiI6MCwiaW5jb21lTWF4IjozMDAwMCwiRUZDIjowfSx7Im51bUNvbGxlZ2UiOjIsIm51bUZhbWlseSI6MywiaW5jb21lUmFuZ2UiOiIzMCwwMDAgLSAzOSw5OTkiLCJpbmNvbWVNaW4iOjMwMDAwLCJpbmNvbWVNYXgiOjM5OTk5LCJFRkMiOjYyNX0seyJudW1Db2xsZWdlIjoyLCJudW1GYW1pbHkiOjMsImluY29tZVJhbmdlIjoiNDAsMDAwIC0gNDksOTk5IiwiaW5jb21lTWluIjo0MDAwMCwiaW5jb21lTWF4Ijo0OTk5OSwiRUZDIjoxNTgzfSx7Im51bUNvbGxlZ2UiOjIsIm51bUZhbWlseSI6MywiaW5jb21lUmFuZ2UiOiI1MCwwMDAgLSA1OSw5OTkiLCJpbmNvbWVNaW4iOjUwMDAwLCJpbmNvbWVNYXgiOjU5OTk5LCJFRkMiOjI2MzJ9LHsibnVtQ29sbGVnZSI6MiwibnVtRmFtaWx5IjozLCJpbmNvbWVSYW5nZSI6IjYwLDAwMCAtIDY5LDk5OSIsImluY29tZU1pbiI6NjAwMDAsImluY29tZU1heCI6Njk5OTksIkVGQyI6Mzk4NX0seyJudW1Db2xsZWdlIjoyLCJudW1GYW1pbHkiOjMsImluY29tZVJhbmdlIjoiNzAsMDAwIC0gNzksOTk5IiwiaW5jb21lTWluIjo3MDAwMCwiaW5jb21lTWF4Ijo3OTk5OSwiRUZDIjo1NzQyfSx7Im51bUNvbGxlZ2UiOjIsIm51bUZhbWlseSI6MywiaW5jb21lUmFuZ2UiOiI4MCwwMDAgLSA4OSw5OTkiLCJpbmNvbWVNaW4iOjgwMDAwLCJpbmNvbWVNYXgiOjg5OTk5LCJFRkMiOjcyOTN9LHsibnVtQ29sbGVnZSI6MiwibnVtRmFtaWx5IjozLCJpbmNvbWVSYW5nZSI6IjkwLDAwMCAtIDk5LDk5OSIsImluY29tZU1pbiI6OTAwMDAsImluY29tZU1heCI6OTk5OTksIkVGQyI6ODkxOH0seyJudW1Db2xsZWdlIjoyLCJudW1GYW1pbHkiOjMsImluY29tZVJhbmdlIjoiMTAwLDAwMCBhbmQgaGlnaGVyIiwiaW5jb21lTWluIjoxMDAwMDAsImluY29tZU1heCI6NTAwMDAwLCJFRkMiOjE2ODc0fSx7Im51bUNvbGxlZ2UiOjIsIm51bUZhbWlseSI6NCwiaW5jb21lUmFuZ2UiOiJMZXNzIHRoYW4gMzAsMDAwIiwiaW5jb21lTWluIjowLCJpbmNvbWVNYXgiOjMwMDAwLCJFRkMiOjB9LHsibnVtQ29sbGVnZSI6MiwibnVtRmFtaWx5Ijo0LCJpbmNvbWVSYW5nZSI6IjMwLDAwMCAtIDM5LDk5OSIsImluY29tZU1pbiI6MzAwMDAsImluY29tZU1heCI6Mzk5OTksIkVGQyI6MjQyfSx7Im51bUNvbGxlZ2UiOjIsIm51bUZhbWlseSI6NCwiaW5jb21lUmFuZ2UiOiI0MCwwMDAgLSA0OSw5OTkiLCJpbmNvbWVNaW4iOjQwMDAwLCJpbmNvbWVNYXgiOjQ5OTk5LCJFRkMiOjEyNDV9LHsibnVtQ29sbGVnZSI6MiwibnVtRmFtaWx5Ijo0LCJpbmNvbWVSYW5nZSI6IjUwLDAwMCAtIDU5LDk5OSIsImluY29tZU1pbiI6NTAwMDAsImluY29tZU1heCI6NTk5OTksIkVGQyI6MjI3MH0seyJudW1Db2xsZWdlIjoyLCJudW1GYW1pbHkiOjQsImluY29tZVJhbmdlIjoiNjAsMDAwIC0gNjksOTk5IiwiaW5jb21lTWluIjo2MDAwMCwiaW5jb21lTWF4Ijo2OTk5OSwiRUZDIjozNDgxfSx7Im51bUNvbGxlZ2UiOjIsIm51bUZhbWlseSI6NCwiaW5jb21lUmFuZ2UiOiI3MCwwMDAgLSA3OSw5OTkiLCJpbmNvbWVNaW4iOjcwMDAwLCJpbmNvbWVNYXgiOjc5OTk5LCJFRkMiOjUxMDB9LHsibnVtQ29sbGVnZSI6MiwibnVtRmFtaWx5Ijo0LCJpbmNvbWVSYW5nZSI6IjgwLDAwMCAtIDg5LDk5OSIsImluY29tZU1pbiI6ODAwMDAsImluY29tZU1heCI6ODk5OTksIkVGQyI6Njc4MH0seyJudW1Db2xsZWdlIjoyLCJudW1GYW1pbHkiOjQsImluY29tZVJhbmdlIjoiOTAsMDAwIC0gOTksOTk5IiwiaW5jb21lTWluIjo5MDAwMCwiaW5jb21lTWF4Ijo5OTk5OSwiRUZDIjo4NTU2fSx7Im51bUNvbGxlZ2UiOjIsIm51bUZhbWlseSI6NCwiaW5jb21lUmFuZ2UiOiIxMDAsMDAwIGFuZCBoaWdoZXIiLCJpbmNvbWVNaW4iOjEwMDAwMCwiaW5jb21lTWF4Ijo1MDAwMDAsIkVGQyI6MTk4NDd9LHsibnVtQ29sbGVnZSI6MiwibnVtRmFtaWx5Ijo1LCJpbmNvbWVSYW5nZSI6Ikxlc3MgdGhhbiAzMCwwMDAiLCJpbmNvbWVNaW4iOjAsImluY29tZU1heCI6MzAwMDAsIkVGQyI6MH0seyJudW1Db2xsZWdlIjoyLCJudW1GYW1pbHkiOjUsImluY29tZVJhbmdlIjoiMzAsMDAwIC0gMzksOTk5IiwiaW5jb21lTWluIjozMDAwMCwiaW5jb21lTWF4IjozOTk5OSwiRUZDIjowfSx7Im51bUNvbGxlZ2UiOjIsIm51bUZhbWlseSI6NSwiaW5jb21lUmFuZ2UiOiI0MCwwMDAgLSA0OSw5OTkiLCJpbmNvbWVNaW4iOjQwMDAwLCJpbmNvbWVNYXgiOjQ5OTk5LCJFRkMiOjcxNX0seyJudW1Db2xsZWdlIjoyLCJudW1GYW1pbHkiOjUsImluY29tZVJhbmdlIjoiNTAsMDAwIC0gNTksOTk5IiwiaW5jb21lTWluIjo1MDAwMCwiaW5jb21lTWF4Ijo1OTk5OSwiRUZDIjoxNzQ4fSx7Im51bUNvbGxlZ2UiOjIsIm51bUZhbWlseSI6NSwiaW5jb21lUmFuZ2UiOiI2MCwwMDAgLSA2OSw5OTkiLCJpbmNvbWVNaW4iOjYwMDAwLCJpbmNvbWVNYXgiOjY5OTk5LCJFRkMiOjI4MDJ9LHsibnVtQ29sbGVnZSI6MiwibnVtRmFtaWx5Ijo1LCJpbmNvbWVSYW5nZSI6IjcwLDAwMCAtIDc5LDk5OSIsImluY29tZU1pbiI6NzAwMDAsImluY29tZU1heCI6Nzk5OTksIkVGQyI6NDE1Nn0seyJudW1Db2xsZWdlIjoyLCJudW1GYW1pbHkiOjUsImluY29tZVJhbmdlIjoiODAsMDAwIC0gODksOTk5IiwiaW5jb21lTWluIjo4MDAwMCwiaW5jb21lTWF4Ijo4OTk5OSwiRUZDIjo1OTMxfSx7Im51bUNvbGxlZ2UiOjIsIm51bUZhbWlseSI6NSwiaW5jb21lUmFuZ2UiOiI5MCwwMDAgLSA5OSw5OTkiLCJpbmNvbWVNaW4iOjkwMDAwLCJpbmNvbWVNYXgiOjk5OTk5LCJFRkMiOjc1OTF9LHsibnVtQ29sbGVnZSI6MiwibnVtRmFtaWx5Ijo1LCJpbmNvbWVSYW5nZSI6IjEwMCwwMDAgYW5kIGhpZ2hlciIsImluY29tZU1pbiI6MTAwMDAwLCJpbmNvbWVNYXgiOjUwMDAwMCwiRUZDIjoxODgzMn0seyJudW1Db2xsZWdlIjoyLCJudW1GYW1pbHkiOjYsImluY29tZVJhbmdlIjoiTGVzcyB0aGFuIDMwLDAwMCIsImluY29tZU1pbiI6MCwiaW5jb21lTWF4IjozMDAwMCwiRUZDIjowfSx7Im51bUNvbGxlZ2UiOjIsIm51bUZhbWlseSI6NiwiaW5jb21lUmFuZ2UiOiIzMCwwMDAgLSAzOSw5OTkiLCJpbmNvbWVNaW4iOjMwMDAwLCJpbmNvbWVNYXgiOjM5OTk5LCJFRkMiOjB9LHsibnVtQ29sbGVnZSI6MiwibnVtRmFtaWx5Ijo2LCJpbmNvbWVSYW5nZSI6IjQwLDAwMCAtIDQ5LDk5OSIsImluY29tZU1pbiI6NDAwMDAsImluY29tZU1heCI6NDk5OTksIkVGQyI6MH0seyJudW1Db2xsZWdlIjoyLCJudW1GYW1pbHkiOjYsImluY29tZVJhbmdlIjoiNTAsMDAwIC0gNTksOTk5IiwiaW5jb21lTWluIjo1MDAwMCwiaW5jb21lTWF4Ijo1OTk5OSwiRUZDIjo5MjJ9LHsibnVtQ29sbGVnZSI6MiwibnVtRmFtaWx5Ijo2LCJpbmNvbWVSYW5nZSI6IjYwLDAwMCAtIDY5LDk5OSIsImluY29tZU1pbiI6NjAwMDAsImluY29tZU1heCI6Njk5OTksIkVGQyI6MTkzMX0seyJudW1Db2xsZWdlIjoyLCJudW1GYW1pbHkiOjYsImluY29tZVJhbmdlIjoiNzAsMDAwIC0gNzksOTk5IiwiaW5jb21lTWluIjo3MDAwMCwiaW5jb21lTWF4Ijo3OTk5OSwiRUZDIjozMDU2fSx7Im51bUNvbGxlZ2UiOjIsIm51bUZhbWlseSI6NiwiaW5jb21lUmFuZ2UiOiI4MCwwMDAgLSA4OSw5OTkiLCJpbmNvbWVNaW4iOjgwMDAwLCJpbmNvbWVNYXgiOjg5OTk5LCJFRkMiOjQ1Mzl9LHsibnVtQ29sbGVnZSI6MiwibnVtRmFtaWx5Ijo2LCJpbmNvbWVSYW5nZSI6IjkwLDAwMCAtIDk5LDk5OSIsImluY29tZU1pbiI6OTAwMDAsImluY29tZU1heCI6OTk5OTksIkVGQyI6NjM4M30seyJudW1Db2xsZWdlIjoyLCJudW1GYW1pbHkiOjYsImluY29tZVJhbmdlIjoiMTAwLDAwMCBhbmQgaGlnaGVyIiwiaW5jb21lTWluIjoxMDAwMDAsImluY29tZU1heCI6NTAwMDAwLCJFRkMiOjE2MzIzfSx7Im51bUNvbGxlZ2UiOjMsIm51bUZhbWlseSI6NCwiaW5jb21lUmFuZ2UiOiJMZXNzIHRoYW4gMzAsMDAwIiwiaW5jb21lTWluIjowLCJpbmNvbWVNYXgiOjMwMDAwLCJFRkMiOjB9LHsibnVtQ29sbGVnZSI6MywibnVtRmFtaWx5Ijo0LCJpbmNvbWVSYW5nZSI6IjMwLDAwMCAtIDM5LDk5OSIsImluY29tZU1pbiI6MzAwMDAsImluY29tZU1heCI6Mzk5OTksIkVGQyI6MjUwfSx7Im51bUNvbGxlZ2UiOjMsIm51bUZhbWlseSI6NCwiaW5jb21lUmFuZ2UiOiI0MCwwMDAgLSA0OSw5OTkiLCJpbmNvbWVNaW4iOjQwMDAwLCJpbmNvbWVNYXgiOjQ5OTk5LCJFRkMiOjk0M30seyJudW1Db2xsZWdlIjozLCJudW1GYW1pbHkiOjQsImluY29tZVJhbmdlIjoiNTAsMDAwIC0gNTksOTk5IiwiaW5jb21lTWluIjo1MDAwMCwiaW5jb21lTWF4Ijo1OTk5OSwiRUZDIjoxNjQ5fSx7Im51bUNvbGxlZ2UiOjMsIm51bUZhbWlseSI6NCwiaW5jb21lUmFuZ2UiOiI2MCwwMDAgLSA2OSw5OTkiLCJpbmNvbWVNaW4iOjYwMDAwLCJpbmNvbWVNYXgiOjY5OTk5LCJFRkMiOjI0Nzl9LHsibnVtQ29sbGVnZSI6MywibnVtRmFtaWx5Ijo0LCJpbmNvbWVSYW5nZSI6IjcwLDAwMCAtIDc5LDk5OSIsImluY29tZU1pbiI6NzAwMDAsImluY29tZU1heCI6Nzk5OTksIkVGQyI6MzU3MH0seyJudW1Db2xsZWdlIjozLCJudW1GYW1pbHkiOjQsImluY29tZVJhbmdlIjoiODAsMDAwIC0gODksOTk5IiwiaW5jb21lTWluIjo4MDAwMCwiaW5jb21lTWF4Ijo4OTk5OSwiRUZDIjo0ODE4fSx7Im51bUNvbGxlZ2UiOjMsIm51bUZhbWlseSI6NCwiaW5jb21lUmFuZ2UiOiI5MCwwMDAgLSA5OSw5OTkiLCJpbmNvbWVNaW4iOjkwMDAwLCJpbmNvbWVNYXgiOjk5OTk5LCJFRkMiOjYwODR9LHsibnVtQ29sbGVnZSI6MywibnVtRmFtaWx5Ijo0LCJpbmNvbWVSYW5nZSI6IjEwMCwwMDAgYW5kIGhpZ2hlciIsImluY29tZU1pbiI6MTAwMDAwLCJpbmNvbWVNYXgiOjUwMDAwMCwiRUZDIjoxMTIxN30seyJudW1Db2xsZWdlIjozLCJudW1GYW1pbHkiOjUsImluY29tZVJhbmdlIjoiTGVzcyB0aGFuIDMwLDAwMCIsImluY29tZU1pbiI6MCwiaW5jb21lTWF4IjozMDAwMCwiRUZDIjowfSx7Im51bUNvbGxlZ2UiOjMsIm51bUZhbWlseSI6NSwiaW5jb21lUmFuZ2UiOiIzMCwwMDAgLSAzOSw5OTkiLCJpbmNvbWVNaW4iOjMwMDAwLCJpbmNvbWVNYXgiOjM5OTk5LCJFRkMiOjY1fSx7Im51bUNvbGxlZ2UiOjMsIm51bUZhbWlseSI6NSwiaW5jb21lUmFuZ2UiOiI0MCwwMDAgLSA0OSw5OTkiLCJpbmNvbWVNaW4iOjQwMDAwLCJpbmNvbWVNYXgiOjQ5OTk5LCJFRkMiOjcxOX0seyJudW1Db2xsZWdlIjozLCJudW1GYW1pbHkiOjUsImluY29tZVJhbmdlIjoiNTAsMDAwIC0gNTksOTk5IiwiaW5jb21lTWluIjo1MDAwMCwiaW5jb21lTWF4Ijo1OTk5OSwiRUZDIjoxNDMxfSx7Im51bUNvbGxlZ2UiOjMsIm51bUZhbWlseSI6NSwiaW5jb21lUmFuZ2UiOiI2MCwwMDAgLSA2OSw5OTkiLCJpbmNvbWVNaW4iOjYwMDAwLCJpbmNvbWVNYXgiOjY5OTk5LCJFRkMiOjIyMzh9LHsibnVtQ29sbGVnZSI6MywibnVtRmFtaWx5Ijo1LCJpbmNvbWVSYW5nZSI6IjcwLDAwMCAtIDc5LDk5OSIsImluY29tZU1pbiI6NzAwMDAsImluY29tZU1heCI6Nzk5OTksIkVGQyI6MzIzMX0seyJudW1Db2xsZWdlIjozLCJudW1GYW1pbHkiOjUsImluY29tZVJhbmdlIjoiODAsMDAwIC0gODksOTk5IiwiaW5jb21lTWluIjo4MDAwMCwiaW5jb21lTWF4Ijo4OTk5OSwiRUZDIjo0NDU1fSx7Im51bUNvbGxlZ2UiOjMsIm51bUZhbWlseSI6NSwiaW5jb21lUmFuZ2UiOiI5MCwwMDAgLSA5OSw5OTkiLCJpbmNvbWVNaW4iOjkwMDAwLCJpbmNvbWVNYXgiOjk5OTk5LCJFRkMiOjU3MzZ9LHsibnVtQ29sbGVnZSI6MywibnVtRmFtaWx5Ijo1LCJpbmNvbWVSYW5nZSI6IjEwMCwwMDAgYW5kIGhpZ2hlciIsImluY29tZU1pbiI6MTAwMDAwLCJpbmNvbWVNYXgiOjUwMDAwMCwiRUZDIjoxMzcyMX0seyJudW1Db2xsZWdlIjozLCJudW1GYW1pbHkiOjYsImluY29tZVJhbmdlIjoiTGVzcyB0aGFuIDMwLDAwMCIsImluY29tZU1pbiI6MCwiaW5jb21lTWF4IjozMDAwMCwiRUZDIjowfSx7Im51bUNvbGxlZ2UiOjMsIm51bUZhbWlseSI6NiwiaW5jb21lUmFuZ2UiOiIzMCwwMDAgLSAzOSw5OTkiLCJpbmNvbWVNaW4iOjMwMDAwLCJpbmNvbWVNYXgiOjM5OTk5LCJFRkMiOjB9LHsibnVtQ29sbGVnZSI6MywibnVtRmFtaWx5Ijo2LCJpbmNvbWVSYW5nZSI6IjQwLDAwMCAtIDQ5LDk5OSIsImluY29tZU1pbiI6NDAwMDAsImluY29tZU1heCI6NDk5OTksIkVGQyI6MTAwfSx7Im51bUNvbGxlZ2UiOjMsIm51bUZhbWlseSI6NiwiaW5jb21lUmFuZ2UiOiI1MCwwMDAgLSA1OSw5OTkiLCJpbmNvbWVNaW4iOjUwMDAwLCJpbmNvbWVNYXgiOjU5OTk5LCJFRkMiOjgxN30seyJudW1Db2xsZWdlIjozLCJudW1GYW1pbHkiOjYsImluY29tZVJhbmdlIjoiNjAsMDAwIC0gNjksOTk5IiwiaW5jb21lTWluIjo2MDAwMCwiaW5jb21lTWF4Ijo2OTk5OSwiRUZDIjoxNDg5fSx7Im51bUNvbGxlZ2UiOjMsIm51bUZhbWlseSI6NiwiaW5jb21lUmFuZ2UiOiI3MCwwMDAgLSA3OSw5OTkiLCJpbmNvbWVNaW4iOjcwMDAwLCJpbmNvbWVNYXgiOjc5OTk5LCJFRkMiOjIyNzd9LHsibnVtQ29sbGVnZSI6MywibnVtRmFtaWx5Ijo2LCJpbmNvbWVSYW5nZSI6IjgwLDAwMCAtIDg5LDk5OSIsImluY29tZU1pbiI6ODAwMDAsImluY29tZU1heCI6ODk5OTksIkVGQyI6MzMwOX0seyJudW1Db2xsZWdlIjozLCJudW1GYW1pbHkiOjYsImluY29tZVJhbmdlIjoiOTAsMDAwIC0gOTksOTk5IiwiaW5jb21lTWluIjo5MDAwMCwiaW5jb21lTWF4Ijo5OTk5OSwiRUZDIjo0NTQyfSx7Im51bUNvbGxlZ2UiOjMsIm51bUZhbWlseSI6NiwiaW5jb21lUmFuZ2UiOiIxMDAsMDAwIGFuZCBoaWdoZXIiLCJpbmNvbWVNaW4iOjEwMDAwMCwiaW5jb21lTWF4Ijo1MDAwMDAsIkVGQyI6MTE1MTJ9XSwiaW5kZXBXaXRoRGVwIjpbeyJudW1Db2xsZWdlIjoxLCJudW1GYW1pbHkiOjIsImluY29tZVJhbmdlIjoiTGVzcyB0aGFuIDMwLDAwMCIsImluY29tZU1pbiI6MCwiaW5jb21lTWF4IjozMDAwMCwiRUZDIjowfSx7Im51bUNvbGxlZ2UiOjEsIm51bUZhbWlseSI6MiwiaW5jb21lUmFuZ2UiOiIzMCwwMDAgLSAzOSw5OTkiLCJpbmNvbWVNaW4iOjMwMDAwLCJpbmNvbWVNYXgiOjM5OTk5LCJFRkMiOjB9LHsibnVtQ29sbGVnZSI6MSwibnVtRmFtaWx5IjoyLCJpbmNvbWVSYW5nZSI6IjQwLDAwMCAtIDQ5LDk5OSIsImluY29tZU1pbiI6NDAwMDAsImluY29tZU1heCI6NDk5OTksIkVGQyI6MTYzOH0seyJudW1Db2xsZWdlIjoxLCJudW1GYW1pbHkiOjIsImluY29tZVJhbmdlIjoiNTAsMDAwIC0gNTksOTk5IiwiaW5jb21lTWluIjo1MDAwMCwiaW5jb21lTWF4Ijo1OTk5OSwiRUZDIjozMjk2fSx7Im51bUNvbGxlZ2UiOjEsIm51bUZhbWlseSI6MiwiaW5jb21lUmFuZ2UiOiI2MCwwMDAgLSA2OSw5OTkiLCJpbmNvbWVNaW4iOjYwMDAwLCJpbmNvbWVNYXgiOjY5OTk5LCJFRkMiOjUzMTF9LHsibnVtQ29sbGVnZSI6MSwibnVtRmFtaWx5IjoyLCJpbmNvbWVSYW5nZSI6IjcwLDAwMCAtIDc5LDk5OSIsImluY29tZU1pbiI6NzAwMDAsImluY29tZU1heCI6Nzk5OTksIkVGQyI6NzcxOH0seyJudW1Db2xsZWdlIjoxLCJudW1GYW1pbHkiOjIsImluY29tZVJhbmdlIjoiODAsMDAwIC0gODksOTk5IiwiaW5jb21lTWluIjo4MDAwMCwiaW5jb21lTWF4Ijo4OTk5OSwiRUZDIjoxMDgwNH0seyJudW1Db2xsZWdlIjoxLCJudW1GYW1pbHkiOjIsImluY29tZVJhbmdlIjoiOTAsMDAwIC0gOTksOTk5IiwiaW5jb21lTWluIjo5MDAwMCwiaW5jb21lTWF4Ijo5OTk5OSwiRUZDIjoxNDAxN30seyJudW1Db2xsZWdlIjoxLCJudW1GYW1pbHkiOjIsImluY29tZVJhbmdlIjoiMTAwLDAwMCBhbmQgaGlnaGVyIiwiaW5jb21lTWluIjoxMDAwMDAsImluY29tZU1heCI6NTAwMDAwLCJFRkMiOjIzODMzfSx7Im51bUNvbGxlZ2UiOjEsIm51bUZhbWlseSI6MywiaW5jb21lUmFuZ2UiOiJMZXNzIHRoYW4gMzAsMDAwIiwiaW5jb21lTWluIjowLCJpbmNvbWVNYXgiOjMwMDAwLCJFRkMiOjB9LHsibnVtQ29sbGVnZSI6MSwibnVtRmFtaWx5IjozLCJpbmNvbWVSYW5nZSI6IjMwLDAwMCAtIDM5LDk5OSIsImluY29tZU1pbiI6MzAwMDAsImluY29tZU1heCI6Mzk5OTksIkVGQyI6MH0seyJudW1Db2xsZWdlIjoxLCJudW1GYW1pbHkiOjMsImluY29tZVJhbmdlIjoiNDAsMDAwIC0gNDksOTk5IiwiaW5jb21lTWluIjo0MDAwMCwiaW5jb21lTWF4Ijo0OTk5OSwiRUZDIjo3MTR9LHsibnVtQ29sbGVnZSI6MSwibnVtRmFtaWx5IjozLCJpbmNvbWVSYW5nZSI6IjUwLDAwMCAtIDU5LDk5OSIsImluY29tZU1pbiI6NTAwMDAsImluY29tZU1heCI6NTk5OTksIkVGQyI6MjQ0Nn0seyJudW1Db2xsZWdlIjoxLCJudW1GYW1pbHkiOjMsImluY29tZVJhbmdlIjoiNjAsMDAwIC0gNjksOTk5IiwiaW5jb21lTWluIjo2MDAwMCwiaW5jb21lTWF4Ijo2OTk5OSwiRUZDIjo0MTg3fSx7Im51bUNvbGxlZ2UiOjEsIm51bUZhbWlseSI6MywiaW5jb21lUmFuZ2UiOiI3MCwwMDAgLSA3OSw5OTkiLCJpbmNvbWVNaW4iOjcwMDAwLCJpbmNvbWVNYXgiOjc5OTk5LCJFRkMiOjY0MzR9LHsibnVtQ29sbGVnZSI6MSwibnVtRmFtaWx5IjozLCJpbmNvbWVSYW5nZSI6IjgwLDAwMCAtIDg5LDk5OSIsImluY29tZU1pbiI6ODAwMDAsImluY29tZU1heCI6ODk5OTksIkVGQyI6OTMzM30seyJudW1Db2xsZWdlIjoxLCJudW1GYW1pbHkiOjMsImluY29tZVJhbmdlIjoiOTAsMDAwIC0gOTksOTk5IiwiaW5jb21lTWluIjo5MDAwMCwiaW5jb21lTWF4Ijo5OTk5OSwiRUZDIjoxMjg3M30seyJudW1Db2xsZWdlIjoxLCJudW1GYW1pbHkiOjMsImluY29tZVJhbmdlIjoiMTAwLDAwMCBhbmQgaGlnaGVyIiwiaW5jb21lTWluIjoxMDAwMDAsImluY29tZU1heCI6NTAwMDAwLCJFRkMiOjIyOTI0fSx7Im51bUNvbGxlZ2UiOjEsIm51bUZhbWlseSI6NCwiaW5jb21lUmFuZ2UiOiJMZXNzIHRoYW4gMzAsMDAwIiwiaW5jb21lTWluIjowLCJpbmNvbWVNYXgiOjMwMDAwLCJFRkMiOjB9LHsibnVtQ29sbGVnZSI6MSwibnVtRmFtaWx5Ijo0LCJpbmNvbWVSYW5nZSI6IjMwLDAwMCAtIDM5LDk5OSIsImluY29tZU1pbiI6MzAwMDAsImluY29tZU1heCI6Mzk5OTksIkVGQyI6MH0seyJudW1Db2xsZWdlIjoxLCJudW1GYW1pbHkiOjQsImluY29tZVJhbmdlIjoiNDAsMDAwIC0gNDksOTk5IiwiaW5jb21lTWluIjo0MDAwMCwiaW5jb21lTWF4Ijo0OTk5OSwiRUZDIjowfSx7Im51bUNvbGxlZ2UiOjEsIm51bUZhbWlseSI6NCwiaW5jb21lUmFuZ2UiOiI1MCwwMDAgLSA1OSw5OTkiLCJpbmNvbWVNaW4iOjUwMDAwLCJpbmNvbWVNYXgiOjU5OTk5LCJFRkMiOjEyNDV9LHsibnVtQ29sbGVnZSI6MSwibnVtRmFtaWx5Ijo0LCJpbmNvbWVSYW5nZSI6IjYwLDAwMCAtIDY5LDk5OSIsImluY29tZU1pbiI6NjAwMDAsImluY29tZU1heCI6Njk5OTksIkVGQyI6MjkxM30seyJudW1Db2xsZWdlIjoxLCJudW1GYW1pbHkiOjQsImluY29tZVJhbmdlIjoiNzAsMDAwIC0gNzksOTk5IiwiaW5jb21lTWluIjo3MDAwMCwiaW5jb21lTWF4Ijo3OTk5OSwiRUZDIjo0NzM1fSx7Im51bUNvbGxlZ2UiOjEsIm51bUZhbWlseSI6NCwiaW5jb21lUmFuZ2UiOiI4MCwwMDAgLSA4OSw5OTkiLCJpbmNvbWVNaW4iOjgwMDAwLCJpbmNvbWVNYXgiOjg5OTk5LCJFRkMiOjcxMTR9LHsibnVtQ29sbGVnZSI6MSwibnVtRmFtaWx5Ijo0LCJpbmNvbWVSYW5nZSI6IjkwLDAwMCAtIDk5LDk5OSIsImluY29tZU1pbiI6OTAwMDAsImluY29tZU1heCI6OTk5OTksIkVGQyI6MTAzMzd9LHsibnVtQ29sbGVnZSI6MSwibnVtRmFtaWx5Ijo0LCJpbmNvbWVSYW5nZSI6IjEwMCwwMDAgYW5kIGhpZ2hlciIsImluY29tZU1pbiI6MTAwMDAwLCJpbmNvbWVNYXgiOjUwMDAwMCwiRUZDIjoyMDcxOH0seyJudW1Db2xsZWdlIjoxLCJudW1GYW1pbHkiOjUsImluY29tZVJhbmdlIjoiTGVzcyB0aGFuIDMwLDAwMCIsImluY29tZU1pbiI6MCwiaW5jb21lTWF4IjozMDAwMCwiRUZDIjowfSx7Im51bUNvbGxlZ2UiOjEsIm51bUZhbWlseSI6NSwiaW5jb21lUmFuZ2UiOiIzMCwwMDAgLSAzOSw5OTkiLCJpbmNvbWVNaW4iOjMwMDAwLCJpbmNvbWVNYXgiOjM5OTk5LCJFRkMiOjB9LHsibnVtQ29sbGVnZSI6MSwibnVtRmFtaWx5Ijo1LCJpbmNvbWVSYW5nZSI6IjQwLDAwMCAtIDQ5LDk5OSIsImluY29tZU1pbiI6NDAwMDAsImluY29tZU1heCI6NDk5OTksIkVGQyI6MH0seyJudW1Db2xsZWdlIjoxLCJudW1GYW1pbHkiOjUsImluY29tZVJhbmdlIjoiNTAsMDAwIC0gNTksOTk5IiwiaW5jb21lTWluIjo1MDAwMCwiaW5jb21lTWF4Ijo1OTk5OSwiRUZDIjowfSx7Im51bUNvbGxlZ2UiOjEsIm51bUZhbWlseSI6NSwiaW5jb21lUmFuZ2UiOiI2MCwwMDAgLSA2OSw5OTkiLCJpbmNvbWVNaW4iOjYwMDAwLCJpbmNvbWVNYXgiOjY5OTk5LCJFRkMiOjE2NjZ9LHsibnVtQ29sbGVnZSI6MSwibnVtRmFtaWx5Ijo1LCJpbmNvbWVSYW5nZSI6IjcwLDAwMCAtIDc5LDk5OSIsImluY29tZU1pbiI6NzAwMDAsImluY29tZU1heCI6Nzk5OTksIkVGQyI6MzMzNH0seyJudW1Db2xsZWdlIjoxLCJudW1GYW1pbHkiOjUsImluY29tZVJhbmdlIjoiODAsMDAwIC0gODksOTk5IiwiaW5jb21lTWluIjo4MDAwMCwiaW5jb21lTWF4Ijo4OTk5OSwiRUZDIjo1MzcxfSx7Im51bUNvbGxlZ2UiOjEsIm51bUZhbWlseSI6NSwiaW5jb21lUmFuZ2UiOiI5MCwwMDAgLSA5OSw5OTkiLCJpbmNvbWVNaW4iOjkwMDAwLCJpbmNvbWVNYXgiOjk5OTk5LCJFRkMiOjc4NTd9LHsibnVtQ29sbGVnZSI6MSwibnVtRmFtaWx5Ijo1LCJpbmNvbWVSYW5nZSI6IjEwMCwwMDAgYW5kIGhpZ2hlciIsImluY29tZU1pbiI6MTAwMDAwLCJpbmNvbWVNYXgiOjUwMDAwMCwiRUZDIjoxNzkxNH0seyJudW1Db2xsZWdlIjoxLCJudW1GYW1pbHkiOjYsImluY29tZVJhbmdlIjoiTGVzcyB0aGFuIDMwLDAwMCIsImluY29tZU1pbiI6MCwiaW5jb21lTWF4IjozMDAwMCwiRUZDIjowfSx7Im51bUNvbGxlZ2UiOjEsIm51bUZhbWlseSI6NiwiaW5jb21lUmFuZ2UiOiIzMCwwMDAgLSAzOSw5OTkiLCJpbmNvbWVNaW4iOjMwMDAwLCJpbmNvbWVNYXgiOjM5OTk5LCJFRkMiOjB9LHsibnVtQ29sbGVnZSI6MSwibnVtRmFtaWx5Ijo2LCJpbmNvbWVSYW5nZSI6IjQwLDAwMCAtIDQ5LDk5OSIsImluY29tZU1pbiI6NDAwMDAsImluY29tZU1heCI6NDk5OTksIkVGQyI6MH0seyJudW1Db2xsZWdlIjoxLCJudW1GYW1pbHkiOjYsImluY29tZVJhbmdlIjoiNTAsMDAwIC0gNTksOTk5IiwiaW5jb21lTWluIjo1MDAwMCwiaW5jb21lTWF4Ijo1OTk5OSwiRUZDIjowfSx7Im51bUNvbGxlZ2UiOjEsIm51bUZhbWlseSI6NiwiaW5jb21lUmFuZ2UiOiI2MCwwMDAgLSA2OSw5OTkiLCJpbmNvbWVNaW4iOjYwMDAwLCJpbmNvbWVNYXgiOjY5OTk5LCJFRkMiOjB9LHsibnVtQ29sbGVnZSI6MSwibnVtRmFtaWx5Ijo2LCJpbmNvbWVSYW5nZSI6IjcwLDAwMCAtIDc5LDk5OSIsImluY29tZU1pbiI6NzAwMDAsImluY29tZU1heCI6Nzk5OTksIkVGQyI6MTQ5N30seyJudW1Db2xsZWdlIjoxLCJudW1GYW1pbHkiOjYsImluY29tZVJhbmdlIjoiODAsMDAwIC0gODksOTk5IiwiaW5jb21lTWluIjo4MDAwMCwiaW5jb21lTWF4Ijo4OTk5OSwiRUZDIjozMTkwfSx7Im51bUNvbGxlZ2UiOjEsIm51bUZhbWlseSI6NiwiaW5jb21lUmFuZ2UiOiI5MCwwMDAgLSA5OSw5OTkiLCJpbmNvbWVNaW4iOjkwMDAwLCJpbmNvbWVNYXgiOjk5OTk5LCJFRkMiOjUyMTJ9LHsibnVtQ29sbGVnZSI6MSwibnVtRmFtaWx5Ijo2LCJpbmNvbWVSYW5nZSI6IjEwMCwwMDAgYW5kIGhpZ2hlciIsImluY29tZU1pbiI6MTAwMDAwLCJpbmNvbWVNYXgiOjUwMDAwMCwiRUZDIjoxMzk3MH0seyJudW1Db2xsZWdlIjoyLCJudW1GYW1pbHkiOjIsImluY29tZVJhbmdlIjoiTGVzcyB0aGFuIDMwLDAwMCIsImluY29tZU1pbiI6MCwiaW5jb21lTWF4IjozMDAwMCwiRUZDIjowfSx7Im51bUNvbGxlZ2UiOjIsIm51bUZhbWlseSI6MiwiaW5jb21lUmFuZ2UiOiIzMCwwMDAgLSAzOSw5OTkiLCJpbmNvbWVNaW4iOjMwMDAwLCJpbmNvbWVNYXgiOjM5OTk5LCJFRkMiOjQ2MX0seyJudW1Db2xsZWdlIjoyLCJudW1GYW1pbHkiOjIsImluY29tZVJhbmdlIjoiNDAsMDAwIC0gNDksOTk5IiwiaW5jb21lTWluIjo0MDAwMCwiaW5jb21lTWF4Ijo0OTk5OSwiRUZDIjoxMzEzfSx7Im51bUNvbGxlZ2UiOjIsIm51bUZhbWlseSI6MiwiaW5jb21lUmFuZ2UiOiI1MCwwMDAgLSA1OSw5OTkiLCJpbmNvbWVNaW4iOjUwMDAwLCJpbmNvbWVNYXgiOjU5OTk5LCJFRkMiOjIxOTN9LHsibnVtQ29sbGVnZSI6MiwibnVtRmFtaWx5IjoyLCJpbmNvbWVSYW5nZSI6IjYwLDAwMCAtIDY5LDk5OSIsImluY29tZU1pbiI6NjAwMDAsImluY29tZU1heCI6Njk5OTksIkVGQyI6MzMzNH0seyJudW1Db2xsZWdlIjoyLCJudW1GYW1pbHkiOjIsImluY29tZVJhbmdlIjoiNzAsMDAwIC0gNzksOTk5IiwiaW5jb21lTWluIjo3MDAwMCwiaW5jb21lTWF4Ijo3OTk5OSwiRUZDIjo0ODIyfSx7Im51bUNvbGxlZ2UiOjIsIm51bUZhbWlseSI6MiwiaW5jb21lUmFuZ2UiOiI4MCwwMDAgLSA4OSw5OTkiLCJpbmNvbWVNaW4iOjgwMDAwLCJpbmNvbWVNYXgiOjg5OTk5LCJFRkMiOjY0MTR9LHsibnVtQ29sbGVnZSI6MiwibnVtRmFtaWx5IjoyLCJpbmNvbWVSYW5nZSI6IjkwLDAwMCAtIDk5LDk5OSIsImluY29tZU1pbiI6OTAwMDAsImluY29tZU1heCI6OTk5OTksIkVGQyI6Nzg4M30seyJudW1Db2xsZWdlIjoyLCJudW1GYW1pbHkiOjIsImluY29tZVJhbmdlIjoiMTAwLDAwMCBhbmQgaGlnaGVyIiwiaW5jb21lTWluIjoxMDAwMDAsImluY29tZU1heCI6NTAwMDAwLCJFRkMiOjEyODQzfSx7Im51bUNvbGxlZ2UiOjIsIm51bUZhbWlseSI6MywiaW5jb21lUmFuZ2UiOiJMZXNzIHRoYW4gMzAsMDAwIiwiaW5jb21lTWluIjowLCJpbmNvbWVNYXgiOjMwMDAwLCJFRkMiOjB9LHsibnVtQ29sbGVnZSI6MiwibnVtRmFtaWx5IjozLCJpbmNvbWVSYW5nZSI6IjMwLDAwMCAtIDM5LDk5OSIsImluY29tZU1pbiI6MzAwMDAsImluY29tZU1heCI6Mzk5OTksIkVGQyI6MzR9LHsibnVtQ29sbGVnZSI6MiwibnVtRmFtaWx5IjozLCJpbmNvbWVSYW5nZSI6IjQwLDAwMCAtIDQ5LDk5OSIsImluY29tZU1pbiI6NDAwMDAsImluY29tZU1heCI6NDk5OTksIkVGQyI6ODc0fSx7Im51bUNvbGxlZ2UiOjIsIm51bUZhbWlseSI6MywiaW5jb21lUmFuZ2UiOiI1MCwwMDAgLSA1OSw5OTkiLCJpbmNvbWVNaW4iOjUwMDAwLCJpbmNvbWVNYXgiOjU5OTk5LCJFRkMiOjE2OTd9LHsibnVtQ29sbGVnZSI6MiwibnVtRmFtaWx5IjozLCJpbmNvbWVSYW5nZSI6IjYwLDAwMCAtIDY5LDk5OSIsImluY29tZU1pbiI6NjAwMDAsImluY29tZU1heCI6Njk5OTksIkVGQyI6MjY3NH0seyJudW1Db2xsZWdlIjoyLCJudW1GYW1pbHkiOjMsImluY29tZVJhbmdlIjoiNzAsMDAwIC0gNzksOTk5IiwiaW5jb21lTWluIjo3MDAwMCwiaW5jb21lTWF4Ijo3OTk5OSwiRUZDIjozOTgyfSx7Im51bUNvbGxlZ2UiOjIsIm51bUZhbWlseSI6MywiaW5jb21lUmFuZ2UiOiI4MCwwMDAgLSA4OSw5OTkiLCJpbmNvbWVNaW4iOjgwMDAwLCJpbmNvbWVNYXgiOjg5OTk5LCJFRkMiOjU3MDB9LHsibnVtQ29sbGVnZSI6MiwibnVtRmFtaWx5IjozLCJpbmNvbWVSYW5nZSI6IjkwLDAwMCAtIDk5LDk5OSIsImluY29tZU1pbiI6OTAwMDAsImluY29tZU1heCI6OTk5OTksIkVGQyI6NzM4M30seyJudW1Db2xsZWdlIjoyLCJudW1GYW1pbHkiOjMsImluY29tZVJhbmdlIjoiMTAwLDAwMCBhbmQgaGlnaGVyIiwiaW5jb21lTWluIjoxMDAwMDAsImluY29tZU1heCI6NTAwMDAwLCJFRkMiOjEyNjQ3fSx7Im51bUNvbGxlZ2UiOjIsIm51bUZhbWlseSI6NCwiaW5jb21lUmFuZ2UiOiJMZXNzIHRoYW4gMzAsMDAwIiwiaW5jb21lTWluIjowLCJpbmNvbWVNYXgiOjMwMDAwLCJFRkMiOjB9LHsibnVtQ29sbGVnZSI6MiwibnVtRmFtaWx5Ijo0LCJpbmNvbWVSYW5nZSI6IjMwLDAwMCAtIDM5LDk5OSIsImluY29tZU1pbiI6MzAwMDAsImluY29tZU1heCI6Mzk5OTksIkVGQyI6MH0seyJudW1Db2xsZWdlIjoyLCJudW1GYW1pbHkiOjQsImluY29tZVJhbmdlIjoiNDAsMDAwIC0gNDksOTk5IiwiaW5jb21lTWluIjo0MDAwMCwiaW5jb21lTWF4Ijo0OTk5OSwiRUZDIjoyNTZ9LHsibnVtQ29sbGVnZSI6MiwibnVtRmFtaWx5Ijo0LCJpbmNvbWVSYW5nZSI6IjUwLDAwMCAtIDU5LDk5OSIsImluY29tZU1pbiI6NTAwMDAsImluY29tZU1heCI6NTk5OTksIkVGQyI6MTA4MX0seyJudW1Db2xsZWdlIjoyLCJudW1GYW1pbHkiOjQsImluY29tZVJhbmdlIjoiNjAsMDAwIC0gNjksOTk5IiwiaW5jb21lTWluIjo2MDAwMCwiaW5jb21lTWF4Ijo2OTk5OSwiRUZDIjoxODk1fSx7Im51bUNvbGxlZ2UiOjIsIm51bUZhbWlseSI6NCwiaW5jb21lUmFuZ2UiOiI3MCwwMDAgLSA3OSw5OTkiLCJpbmNvbWVNaW4iOjcwMDAwLCJpbmNvbWVNYXgiOjc5OTk5LCJFRkMiOjI4OTZ9LHsibnVtQ29sbGVnZSI6MiwibnVtRmFtaWx5Ijo0LCJpbmNvbWVSYW5nZSI6IjgwLDAwMCAtIDg5LDk5OSIsImluY29tZU1pbiI6ODAwMDAsImluY29tZU1heCI6ODk5OTksIkVGQyI6NDI1MX0seyJudW1Db2xsZWdlIjoyLCJudW1GYW1pbHkiOjQsImluY29tZVJhbmdlIjoiOTAsMDAwIC0gOTksOTk5IiwiaW5jb21lTWluIjo5MDAwMCwiaW5jb21lTWF4Ijo5OTk5OSwiRUZDIjo1OTY5fSx7Im51bUNvbGxlZ2UiOjIsIm51bUZhbWlseSI6NCwiaW5jb21lUmFuZ2UiOiIxMDAsMDAwIGFuZCBoaWdoZXIiLCJpbmNvbWVNaW4iOjEwMDAwMCwiaW5jb21lTWF4Ijo1MDAwMDAsIkVGQyI6MTA4MjZ9LHsibnVtQ29sbGVnZSI6MiwibnVtRmFtaWx5Ijo1LCJpbmNvbWVSYW5nZSI6Ikxlc3MgdGhhbiAzMCwwMDAiLCJpbmNvbWVNaW4iOjAsImluY29tZU1heCI6MzAwMDAsIkVGQyI6MH0seyJudW1Db2xsZWdlIjoyLCJudW1GYW1pbHkiOjUsImluY29tZVJhbmdlIjoiMzAsMDAwIC0gMzksOTk5IiwiaW5jb21lTWluIjozMDAwMCwiaW5jb21lTWF4IjozOTk5OSwiRUZDIjowfSx7Im51bUNvbGxlZ2UiOjIsIm51bUZhbWlseSI6NSwiaW5jb21lUmFuZ2UiOiI0MCwwMDAgLSA0OSw5OTkiLCJpbmNvbWVNaW4iOjQwMDAwLCJpbmNvbWVNYXgiOjQ5OTk5LCJFRkMiOjB9LHsibnVtQ29sbGVnZSI6MiwibnVtRmFtaWx5Ijo1LCJpbmNvbWVSYW5nZSI6IjUwLDAwMCAtIDU5LDk5OSIsImluY29tZU1pbiI6NTAwMDAsImluY29tZU1heCI6NTk5OTksIkVGQyI6NDYzfSx7Im51bUNvbGxlZ2UiOjIsIm51bUZhbWlseSI6NSwiaW5jb21lUmFuZ2UiOiI2MCwwMDAgLSA2OSw5OTkiLCJpbmNvbWVNaW4iOjYwMDAwLCJpbmNvbWVNYXgiOjY5OTk5LCJFRkMiOjEyNTB9LHsibnVtQ29sbGVnZSI6MiwibnVtRmFtaWx5Ijo1LCJpbmNvbWVSYW5nZSI6IjcwLDAwMCAtIDc5LDk5OSIsImluY29tZU1pbiI6NzAwMDAsImluY29tZU1heCI6Nzk5OTksIkVGQyI6MjA5Mn0seyJudW1Db2xsZWdlIjoyLCJudW1GYW1pbHkiOjUsImluY29tZVJhbmdlIjoiODAsMDAwIC0gODksOTk5IiwiaW5jb21lTWluIjo4MDAwMCwiaW5jb21lTWF4Ijo4OTk5OSwiRUZDIjozMTMzfSx7Im51bUNvbGxlZ2UiOjIsIm51bUZhbWlseSI6NSwiaW5jb21lUmFuZ2UiOiI5MCwwMDAgLSA5OSw5OTkiLCJpbmNvbWVNaW4iOjkwMDAwLCJpbmNvbWVNYXgiOjk5OTk5LCJFRkMiOjQ1NDV9LHsibnVtQ29sbGVnZSI6MiwibnVtRmFtaWx5Ijo1LCJpbmNvbWVSYW5nZSI6IjEwMCwwMDAgYW5kIGhpZ2hlciIsImluY29tZU1pbiI6MTAwMDAwLCJpbmNvbWVNYXgiOjUwMDAwMCwiRUZDIjo5MjgwfSx7Im51bUNvbGxlZ2UiOjIsIm51bUZhbWlseSI6NiwiaW5jb21lUmFuZ2UiOiJMZXNzIHRoYW4gMzAsMDAwIiwiaW5jb21lTWluIjowLCJpbmNvbWVNYXgiOjMwMDAwLCJFRkMiOjB9LHsibnVtQ29sbGVnZSI6MiwibnVtRmFtaWx5Ijo2LCJpbmNvbWVSYW5nZSI6IjMwLDAwMCAtIDM5LDk5OSIsImluY29tZU1pbiI6MzAwMDAsImluY29tZU1heCI6Mzk5OTksIkVGQyI6MH0seyJudW1Db2xsZWdlIjoyLCJudW1GYW1pbHkiOjYsImluY29tZVJhbmdlIjoiNDAsMDAwIC0gNDksOTk5IiwiaW5jb21lTWluIjo0MDAwMCwiaW5jb21lTWF4Ijo0OTk5OSwiRUZDIjowfSx7Im51bUNvbGxlZ2UiOjIsIm51bUZhbWlseSI6NiwiaW5jb21lUmFuZ2UiOiI1MCwwMDAgLSA1OSw5OTkiLCJpbmNvbWVNaW4iOjUwMDAwLCJpbmNvbWVNYXgiOjU5OTk5LCJFRkMiOjB9LHsibnVtQ29sbGVnZSI6MiwibnVtRmFtaWx5Ijo2LCJpbmNvbWVSYW5nZSI6IjYwLDAwMCAtIDY5LDk5OSIsImluY29tZU1pbiI6NjAwMDAsImluY29tZU1heCI6Njk5OTksIkVGQyI6MzQ0fSx7Im51bUNvbGxlZ2UiOjIsIm51bUZhbWlseSI6NiwiaW5jb21lUmFuZ2UiOiI3MCwwMDAgLSA3OSw5OTkiLCJpbmNvbWVNaW4iOjcwMDAwLCJpbmNvbWVNYXgiOjc5OTk5LCJFRkMiOjExMTZ9LHsibnVtQ29sbGVnZSI6MiwibnVtRmFtaWx5Ijo2LCJpbmNvbWVSYW5nZSI6IjgwLDAwMCAtIDg5LDk5OSIsImluY29tZU1pbiI6ODAwMDAsImluY29tZU1heCI6ODk5OTksIkVGQyI6MTg3Mn0seyJudW1Db2xsZWdlIjoyLCJudW1GYW1pbHkiOjYsImluY29tZVJhbmdlIjoiOTAsMDAwIC0gOTksOTk5IiwiaW5jb21lTWluIjo5MDAwMCwiaW5jb21lTWF4Ijo5OTk5OSwiRUZDIjoyODg1fSx7Im51bUNvbGxlZ2UiOjIsIm51bUZhbWlseSI6NiwiaW5jb21lUmFuZ2UiOiIxMDAsMDAwIGFuZCBoaWdoZXIiLCJpbmNvbWVNaW4iOjEwMDAwMCwiaW5jb21lTWF4Ijo1MDAwMDAsIkVGQyI6NzIzMH1dLCJpbmRlcFdpdGhvdXREZXAiOlt7Im51bUNvbGxlZ2UiOjEsIm51bUZhbWlseSI6MSwiaW5jb21lUmFuZ2UiOiJMZXNzIHRoYW4gMzAsMDAwIiwiaW5jb21lTWluIjowLCJpbmNvbWVNYXgiOjMwMDAwLCJFRkMiOjB9LHsibnVtQ29sbGVnZSI6MSwibnVtRmFtaWx5IjoxLCJpbmNvbWVSYW5nZSI6IjMwLDAwMCAtIDM5LDk5OSIsImluY29tZU1pbiI6MzAwMDAsImluY29tZU1heCI6Mzk5OTksIkVGQyI6OTAzNX0seyJudW1Db2xsZWdlIjoxLCJudW1GYW1pbHkiOjEsImluY29tZVJhbmdlIjoiNDAsMDAwIC0gNDksOTk5IiwiaW5jb21lTWluIjo0MDAwMCwiaW5jb21lTWF4Ijo0OTk5OSwiRUZDIjoxMjg4M30seyJudW1Db2xsZWdlIjoxLCJudW1GYW1pbHkiOjEsImluY29tZVJhbmdlIjoiNTAsMDAwIC0gNTksOTk5IiwiaW5jb21lTWluIjo1MDAwMCwiaW5jb21lTWF4Ijo1OTk5OSwiRUZDIjoxNjcyNH0seyJudW1Db2xsZWdlIjoxLCJudW1GYW1pbHkiOjEsImluY29tZVJhbmdlIjoiNjAsMDAwIC0gNjksOTk5IiwiaW5jb21lTWluIjo2MDAwMCwiaW5jb21lTWF4Ijo2OTk5OSwiRUZDIjoyMDM1M30seyJudW1Db2xsZWdlIjoxLCJudW1GYW1pbHkiOjEsImluY29tZVJhbmdlIjoiNzAsMDAwIC0gNzksOTk5IiwiaW5jb21lTWluIjo3MDAwMCwiaW5jb21lTWF4Ijo3OTk5OSwiRUZDIjoyMzk5N30seyJudW1Db2xsZWdlIjoxLCJudW1GYW1pbHkiOjEsImluY29tZVJhbmdlIjoiODAsMDAwIC0gODksOTk5IiwiaW5jb21lTWluIjo4MDAwMCwiaW5jb21lTWF4Ijo4OTk5OSwiRUZDIjoyNzY5OH0seyJudW1Db2xsZWdlIjoxLCJudW1GYW1pbHkiOjEsImluY29tZVJhbmdlIjoiOTAsMDAwIC0gOTksOTk5IiwiaW5jb21lTWluIjo5MDAwMCwiaW5jb21lTWF4Ijo5OTk5OSwiRUZDIjozMTUxNH0seyJudW1Db2xsZWdlIjoxLCJudW1GYW1pbHkiOjEsImluY29tZVJhbmdlIjoiMTAwLDAwMCBhbmQgaGlnaGVyIiwiaW5jb21lTWluIjoxMDAwMDAsImluY29tZU1heCI6NTAwMDAwLCJFRkMiOjQ1NTI5fSx7Im51bUNvbGxlZ2UiOjEsIm51bUZhbWlseSI6MiwiaW5jb21lUmFuZ2UiOiJMZXNzIHRoYW4gMzAsMDAwIiwiaW5jb21lTWluIjowLCJpbmNvbWVNYXgiOjMwMDAwLCJFRkMiOjB9LHsibnVtQ29sbGVnZSI6MSwibnVtRmFtaWx5IjoyLCJpbmNvbWVSYW5nZSI6IjMwLDAwMCAtIDM5LDk5OSIsImluY29tZU1pbiI6MzAwMDAsImluY29tZU1heCI6Mzk5OTksIkVGQyI6NTk2Nn0seyJudW1Db2xsZWdlIjoxLCJudW1GYW1pbHkiOjIsImluY29tZVJhbmdlIjoiNDAsMDAwIC0gNDksOTk5IiwiaW5jb21lTWluIjo0MDAwMCwiaW5jb21lTWF4Ijo0OTk5OSwiRUZDIjo5NjI2fSx7Im51bUNvbGxlZ2UiOjEsIm51bUZhbWlseSI6MiwiaW5jb21lUmFuZ2UiOiI1MCwwMDAgLSA1OSw5OTkiLCJpbmNvbWVNaW4iOjUwMDAwLCJpbmNvbWVNYXgiOjU5OTk5LCJFRkMiOjEzNTIwfSx7Im51bUNvbGxlZ2UiOjEsIm51bUZhbWlseSI6MiwiaW5jb21lUmFuZ2UiOiI2MCwwMDAgLSA2OSw5OTkiLCJpbmNvbWVNaW4iOjYwMDAwLCJpbmNvbWVNYXgiOjY5OTk5LCJFRkMiOjE3MjI3fSx7Im51bUNvbGxlZ2UiOjEsIm51bUZhbWlseSI6MiwiaW5jb21lUmFuZ2UiOiI3MCwwMDAgLSA3OSw5OTkiLCJpbmNvbWVNaW4iOjcwMDAwLCJpbmNvbWVNYXgiOjc5OTk5LCJFRkMiOjIxMDAzfSx7Im51bUNvbGxlZ2UiOjEsIm51bUZhbWlseSI6MiwiaW5jb21lUmFuZ2UiOiI4MCwwMDAgLSA4OSw5OTkiLCJpbmNvbWVNaW4iOjgwMDAwLCJpbmNvbWVNYXgiOjg5OTk5LCJFRkMiOjI0ODE4fSx7Im51bUNvbGxlZ2UiOjEsIm51bUZhbWlseSI6MiwiaW5jb21lUmFuZ2UiOiI5MCwwMDAgLSA5OSw5OTkiLCJpbmNvbWVNaW4iOjkwMDAwLCJpbmNvbWVNYXgiOjk5OTk5LCJFRkMiOjI4Njc3fSx7Im51bUNvbGxlZ2UiOjEsIm51bUZhbWlseSI6MiwiaW5jb21lUmFuZ2UiOiIxMDAsMDAwIGFuZCBoaWdoZXIiLCJpbmNvbWVNaW4iOjEwMDAwMCwiaW5jb21lTWF4Ijo1MDAwMDAsIkVGQyI6NDI2NjB9LHsibnVtQ29sbGVnZSI6MiwibnVtRmFtaWx5IjoyLCJpbmNvbWVSYW5nZSI6Ikxlc3MgdGhhbiAzMCwwMDAiLCJpbmNvbWVNaW4iOjAsImluY29tZU1heCI6MzAwMDAsIkVGQyI6OTB9LHsibnVtQ29sbGVnZSI6MiwibnVtRmFtaWx5IjoyLCJpbmNvbWVSYW5nZSI6IjMwLDAwMCAtIDM5LDk5OSIsImluY29tZU1pbiI6MzAwMDAsImluY29tZU1heCI6Mzk5OTksIkVGQyI6NDM5NH0seyJudW1Db2xsZWdlIjoyLCJudW1GYW1pbHkiOjIsImluY29tZVJhbmdlIjoiNDAsMDAwIC0gNDksOTk5IiwiaW5jb21lTWluIjo0MDAwMCwiaW5jb21lTWF4Ijo0OTk5OSwiRUZDIjo2MjkwfSx7Im51bUNvbGxlZ2UiOjIsIm51bUZhbWlseSI6MiwiaW5jb21lUmFuZ2UiOiI1MCwwMDAgLSA1OSw5OTkiLCJpbmNvbWVNaW4iOjUwMDAwLCJpbmNvbWVNYXgiOjU5OTk5LCJFRkMiOjgyMjd9LHsibnVtQ29sbGVnZSI6MiwibnVtRmFtaWx5IjoyLCJpbmNvbWVSYW5nZSI6IjYwLDAwMCAtIDY5LDk5OSIsImluY29tZU1pbiI6NjAwMDAsImluY29tZU1heCI6Njk5OTksIkVGQyI6MTAwOTF9LHsibnVtQ29sbGVnZSI6MiwibnVtRmFtaWx5IjoyLCJpbmNvbWVSYW5nZSI6IjcwLDAwMCAtIDc5LDk5OSIsImluY29tZU1pbiI6NzAwMDAsImluY29tZU1heCI6Nzk5OTksIkVGQyI6MTE5ODd9LHsibnVtQ29sbGVnZSI6MiwibnVtRmFtaWx5IjoyLCJpbmNvbWVSYW5nZSI6IjgwLDAwMCAtIDg5LDk5OSIsImluY29tZU1pbiI6ODAwMDAsImluY29tZU1heCI6ODk5OTksIkVGQyI6MTM5MTB9LHsibnVtQ29sbGVnZSI6MiwibnVtRmFtaWx5IjoyLCJpbmNvbWVSYW5nZSI6IjkwLDAwMCAtIDk5LDk5OSIsImluY29tZU1pbiI6OTAwMDAsImluY29tZU1heCI6OTk5OTksIkVGQyI6MTU4MTZ9LHsibnVtQ29sbGVnZSI6MiwibnVtRmFtaWx5IjoyLCJpbmNvbWVSYW5nZSI6IjEwMCwwMDAgYW5kIGhpZ2hlciIsImluY29tZU1pbiI6MTAwMDAwLCJpbmNvbWVNYXgiOjUwMDAwMCwiRUZDIjoyMTkzMn1dfSwidGhlbWUiOnsiY29sb3JUaGVtZSI6ImxpZ2h0IiwiaW5zdGl0dXRpb25OYW1lIjoiTGVlY2ggTGFrZSBUcmliYWwgQ29sbGVnZSIsIndlbGNvbWVNZXNzYWdlIjoiV2VsY29tZSB0byB0aGUgbmV0IHByaWNlIGNhbGN1bGF0b3IuIEJlZ2luIGJ5IHJlYWRpbmcgYW5kIGFncmVlaW5nIHRvIHRoZSBzdGF0ZW1lbnQgYmVsb3cuIFRoZW4gZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMgb24gdGhlIHN1YnNlcXVlbnQgc2NyZWVucyB0byByZWNlaXZlIGFuIEVTVElNQVRFIG9mIGhvdyBtdWNoIHN0dWRlbnRzIHNpbWlsYXIgdG8geW91IHBhaWQgdG8gYXR0ZW5kIExlZWNoIExha2UgVHJpYmFsIENvbGxlZ2UuIn19OyFmdW5jdGlvbihlKXt2YXIgdD17fTtmdW5jdGlvbiBuKHIpe2lmKHRbcl0pcmV0dXJuIHRbcl0uZXhwb3J0czt2YXIgbz10W3JdPXtpOnIsbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gZVtyXS5jYWxsKG8uZXhwb3J0cyxvLG8uZXhwb3J0cyxuKSxvLmw9ITAsby5leHBvcnRzfW4ubT1lLG4uYz10LG4uZD1mdW5jdGlvbihlLHQscil7bi5vKGUsdCl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2VudW1lcmFibGU6ITAsZ2V0OnJ9KX0sbi5yPWZ1bmN0aW9uKGUpeyJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LG4udD1mdW5jdGlvbihlLHQpe2lmKDEmdCYmKGU9bihlKSksOCZ0KXJldHVybiBlO2lmKDQmdCYmIm9iamVjdCI9PXR5cGVvZiBlJiZlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHI9T2JqZWN0LmNyZWF0ZShudWxsKTtpZihuLnIociksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsImRlZmF1bHQiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOmV9KSwyJnQmJiJzdHJpbmciIT10eXBlb2YgZSlmb3IodmFyIG8gaW4gZSluLmQocixvLGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfS5iaW5kKG51bGwsbykpO3JldHVybiByfSxuLm49ZnVuY3Rpb24oZSl7dmFyIHQ9ZSYmZS5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIGUuZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4gZX07cmV0dXJuIG4uZCh0LCJhIix0KSx0fSxuLm89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCl9LG4ucD0ifi9wcm9kLWRpc3QvIixuKG4ucz0zMTYpfShbZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9bigyNzkpfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigxMSksbz1uKDgpLGk9bigyNyksYT1uKDE4KSx1PW4oMzgpLGM9ZnVuY3Rpb24oZSx0LG4pe3ZhciBsLHMsZixwLGQ9ZSZjLkYsaD1lJmMuRyx5PWUmYy5TLF89ZSZjLlAsdj1lJmMuQixtPWg/cjp5P3JbdF18fChyW3RdPXt9KTooclt0XXx8e30pLnByb3RvdHlwZSxnPWg/bzpvW3RdfHwob1t0XT17fSksYj1nLnByb3RvdHlwZXx8KGcucHJvdG90eXBlPXt9KTtmb3IobCBpbiBoJiYobj10KSxuKWY9KChzPSFkJiZtJiZ2b2lkIDAhPT1tW2xdKT9tOm4pW2xdLHA9diYmcz91KGYscik6XyYmImZ1bmN0aW9uIj09dHlwZW9mIGY/dShGdW5jdGlvbi5jYWxsLGYpOmYsbSYmYShtLGwsZixlJmMuVSksZ1tsXSE9ZiYmaShnLGwscCksXyYmYltsXSE9ZiYmKGJbbF09Zil9O3IuY29yZT1vLGMuRj0xLGMuRz0yLGMuUz00LGMuUD04LGMuQj0xNixjLlc9MzIsYy5VPTY0LGMuUj0xMjgsZS5leHBvcnRzPWN9LGZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9bigyODQpKCl9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDUpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZighcihlKSl0aHJvdyBUeXBlRXJyb3IoZSsiIGlzIG5vdCBhbiBvYmplY3QhIik7cmV0dXJuIGV9fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXt0cnl7cmV0dXJuISFlKCl9Y2F0Y2goZSl7cmV0dXJuITB9fX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlP251bGwhPT1lOiJmdW5jdGlvbiI9PXR5cGVvZiBlfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByLG8saTtvPVt0LG4oMildLHZvaWQgMD09PShpPSJmdW5jdGlvbiI9PXR5cGVvZihyPWZ1bmN0aW9uKGUsdCl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGUuY2hpbGRyZW4/ZS5jaGlsZHJlbigpOmUuY2hpbGRyZW58fG51bGx9ZnVuY3Rpb24gcihlKXtyZXR1cm4gbihlKX1mdW5jdGlvbiBvKGUpe3JldHVybiBuKGUpfWZ1bmN0aW9uIGkoZSl7dmFyIHQ9ZS5jb25kaXRpb24sbj1lLmNoaWxkcmVuO3JldHVybiBudWxsPT1uP251bGw6W10uY29uY2F0KG4pLmZpbmQoZnVuY3Rpb24oZSl7cmV0dXJuIGUudHlwZSE9PW9eIXR9KXx8bnVsbH12YXIgYTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksZS5UaGVuPXIsZS5FbHNlPW8sZS5JZj1pLGUuVW5sZXNzPWMsZS5XaGVuPWwsZS5kZWZhdWx0PXZvaWQgMCx0PShhPXQpJiZhLl9fZXNNb2R1bGU/YTp7ZGVmYXVsdDphfSxyLnByb3BUeXBlcz1vLnByb3BUeXBlcz17Y2hpbGRyZW46dC5kZWZhdWx0Lm9uZU9mVHlwZShbdC5kZWZhdWx0LmZ1bmMsdC5kZWZhdWx0Lm5vZGVdKX07dmFyIHU9dC5kZWZhdWx0Lm9uZU9mVHlwZShbdC5kZWZhdWx0Lmluc3RhbmNlT2YociksdC5kZWZhdWx0Lmluc3RhbmNlT2YobyksdC5kZWZhdWx0Lm5vZGVdKTtmdW5jdGlvbiBjKGUpe3ZhciB0PWUuY29uZGl0aW9uLHI9ZS5jaGlsZHJlbjtyZXR1cm4hdCYmcj9uKHtjb25kaXRpb246dCxjaGlsZHJlbjpyfSk6bnVsbH1mdW5jdGlvbiBsKGUpe3ZhciB0PWUuY29uZGl0aW9uLHI9ZS5jaGlsZHJlbjtyZXR1cm4gdCYmcj9uKHtjb25kaXRpb246dCxjaGlsZHJlbjpyfSk6bnVsbH1pLnByb3BUeXBlcz17Y29uZGl0aW9uOnQuZGVmYXVsdC5ib29sLmlzUmVxdWlyZWQsY2hpbGRyZW46dC5kZWZhdWx0Lm9uZU9mVHlwZShbdC5kZWZhdWx0LmFycmF5T2YodSksdV0pfSxjLnByb3BUeXBlcz17Y29uZGl0aW9uOnQuZGVmYXVsdC5ib29sLmlzUmVxdWlyZWQsY2hpbGRyZW46dC5kZWZhdWx0Lm9uZU9mVHlwZShbdC5kZWZhdWx0LmZ1bmMsdC5kZWZhdWx0Lm5vZGVdKX0sYy5kZWZhdWx0UHJvcHM9e2NoaWxkcmVuOm51bGx9LGwucHJvcFR5cGVzPXtjb25kaXRpb246dC5kZWZhdWx0LmJvb2wuaXNSZXF1aXJlZCxjaGlsZHJlbjp0LmRlZmF1bHQub25lT2ZUeXBlKFt0LmRlZmF1bHQuZnVuYyx0LmRlZmF1bHQubm9kZV0pfSxsLmRlZmF1bHRQcm9wcz17Y2hpbGRyZW46bnVsbH0saS5UaGVuPXIsaS5FbHNlPW8saS5XaGVuPWwsaS5Vbmxlc3M9Yzt2YXIgcz1pO2UuZGVmYXVsdD1zfSk/ci5hcHBseSh0LG8pOnIpfHwoZS5leHBvcnRzPWkpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24uZCh0LCJlIixmdW5jdGlvbigpe3JldHVybiB1fSksbi5kKHQsImMiLGZ1bmN0aW9uKCl7cmV0dXJuIGx9KSxuLmQodCwiYiIsZnVuY3Rpb24oKXtyZXR1cm4gZn0pLG4uZCh0LCJhIixmdW5jdGlvbigpe3JldHVybiBofSksbi5kKHQsImQiLGZ1bmN0aW9uKCl7cmV0dXJuIGR9KTt2YXIgcj1uKDgwKSxvPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZyg3KS5zcGxpdCgiIikuam9pbigiLiIpfSxpPXtJTklUOiJAQHJlZHV4L0lOSVQiK28oKSxSRVBMQUNFOiJAQHJlZHV4L1JFUExBQ0UiK28oKSxQUk9CRV9VTktOT1dOX0FDVElPTjpmdW5jdGlvbigpe3JldHVybiJAQHJlZHV4L1BST0JFX1VOS05PV05fQUNUSU9OIitvKCl9fTtmdW5jdGlvbiBhKGUpe2lmKCJvYmplY3QiIT10eXBlb2YgZXx8bnVsbD09PWUpcmV0dXJuITE7Zm9yKHZhciB0PWU7bnVsbCE9PU9iamVjdC5nZXRQcm90b3R5cGVPZih0KTspdD1PYmplY3QuZ2V0UHJvdG90eXBlT2YodCk7cmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihlKT09PXR9ZnVuY3Rpb24gdShlLHQsbil7dmFyIG87aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBufHwiZnVuY3Rpb24iPT10eXBlb2YgbiYmImZ1bmN0aW9uIj09dHlwZW9mIGFyZ3VtZW50c1szXSl0aHJvdyBuZXcgRXJyb3IoIkl0IGxvb2tzIGxpa2UgeW91IGFyZSBwYXNzaW5nIHNldmVyYWwgc3RvcmUgZW5oYW5jZXJzIHRvIGNyZWF0ZVN0b3JlKCkuIFRoaXMgaXMgbm90IHN1cHBvcnRlZC4gSW5zdGVhZCwgY29tcG9zZSB0aGVtIHRvZ2V0aGVyIHRvIGEgc2luZ2xlIGZ1bmN0aW9uIik7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQmJnZvaWQgMD09PW4mJihuPXQsdD12b2lkIDApLHZvaWQgMCE9PW4pe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBuKXRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgdGhlIGVuaGFuY2VyIHRvIGJlIGEgZnVuY3Rpb24uIik7cmV0dXJuIG4odSkoZSx0KX1pZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIHRoZSByZWR1Y2VyIHRvIGJlIGEgZnVuY3Rpb24uIik7dmFyIGM9ZSxsPXQscz1bXSxmPXMscD0hMTtmdW5jdGlvbiBkKCl7Zj09PXMmJihmPXMuc2xpY2UoKSl9ZnVuY3Rpb24gaCgpe2lmKHApdGhyb3cgbmV3IEVycm9yKCJZb3UgbWF5IG5vdCBjYWxsIHN0b3JlLmdldFN0YXRlKCkgd2hpbGUgdGhlIHJlZHVjZXIgaXMgZXhlY3V0aW5nLiBUaGUgcmVkdWNlciBoYXMgYWxyZWFkeSByZWNlaXZlZCB0aGUgc3RhdGUgYXMgYW4gYXJndW1lbnQuIFBhc3MgaXQgZG93biBmcm9tIHRoZSB0b3AgcmVkdWNlciBpbnN0ZWFkIG9mIHJlYWRpbmcgaXQgZnJvbSB0aGUgc3RvcmUuIik7cmV0dXJuIGx9ZnVuY3Rpb24geShlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIHRoZSBsaXN0ZW5lciB0byBiZSBhIGZ1bmN0aW9uLiIpO2lmKHApdGhyb3cgbmV3IEVycm9yKCJZb3UgbWF5IG5vdCBjYWxsIHN0b3JlLnN1YnNjcmliZSgpIHdoaWxlIHRoZSByZWR1Y2VyIGlzIGV4ZWN1dGluZy4gSWYgeW91IHdvdWxkIGxpa2UgdG8gYmUgbm90aWZpZWQgYWZ0ZXIgdGhlIHN0b3JlIGhhcyBiZWVuIHVwZGF0ZWQsIHN1YnNjcmliZSBmcm9tIGEgY29tcG9uZW50IGFuZCBpbnZva2Ugc3RvcmUuZ2V0U3RhdGUoKSBpbiB0aGUgY2FsbGJhY2sgdG8gYWNjZXNzIHRoZSBsYXRlc3Qgc3RhdGUuIFNlZSBodHRwczovL3JlZHV4LmpzLm9yZy9hcGktcmVmZXJlbmNlL3N0b3JlI3N1YnNjcmliZShsaXN0ZW5lcikgZm9yIG1vcmUgZGV0YWlscy4iKTt2YXIgdD0hMDtyZXR1cm4gZCgpLGYucHVzaChlKSxmdW5jdGlvbigpe2lmKHQpe2lmKHApdGhyb3cgbmV3IEVycm9yKCJZb3UgbWF5IG5vdCB1bnN1YnNjcmliZSBmcm9tIGEgc3RvcmUgbGlzdGVuZXIgd2hpbGUgdGhlIHJlZHVjZXIgaXMgZXhlY3V0aW5nLiBTZWUgaHR0cHM6Ly9yZWR1eC5qcy5vcmcvYXBpLXJlZmVyZW5jZS9zdG9yZSNzdWJzY3JpYmUobGlzdGVuZXIpIGZvciBtb3JlIGRldGFpbHMuIik7dD0hMSxkKCk7dmFyIG49Zi5pbmRleE9mKGUpO2Yuc3BsaWNlKG4sMSl9fX1mdW5jdGlvbiBfKGUpe2lmKCFhKGUpKXRocm93IG5ldyBFcnJvcigiQWN0aW9ucyBtdXN0IGJlIHBsYWluIG9iamVjdHMuIFVzZSBjdXN0b20gbWlkZGxld2FyZSBmb3IgYXN5bmMgYWN0aW9ucy4iKTtpZih2b2lkIDA9PT1lLnR5cGUpdGhyb3cgbmV3IEVycm9yKCdBY3Rpb25zIG1heSBub3QgaGF2ZSBhbiB1bmRlZmluZWQgInR5cGUiIHByb3BlcnR5LiBIYXZlIHlvdSBtaXNzcGVsbGVkIGEgY29uc3RhbnQ/Jyk7aWYocCl0aHJvdyBuZXcgRXJyb3IoIlJlZHVjZXJzIG1heSBub3QgZGlzcGF0Y2ggYWN0aW9ucy4iKTt0cnl7cD0hMCxsPWMobCxlKX1maW5hbGx5e3A9ITF9Zm9yKHZhciB0PXM9ZixuPTA7bjx0Lmxlbmd0aDtuKyspeygwLHRbbl0pKCl9cmV0dXJuIGV9cmV0dXJuIF8oe3R5cGU6aS5JTklUfSksKG89e2Rpc3BhdGNoOl8sc3Vic2NyaWJlOnksZ2V0U3RhdGU6aCxyZXBsYWNlUmVkdWNlcjpmdW5jdGlvbihlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIHRoZSBuZXh0UmVkdWNlciB0byBiZSBhIGZ1bmN0aW9uLiIpO2M9ZSxfKHt0eXBlOmkuUkVQTEFDRX0pfX0pW3IuYV09ZnVuY3Rpb24oKXt2YXIgZSx0PXk7cmV0dXJuKGU9e3N1YnNjcmliZTpmdW5jdGlvbihlKXtpZigib2JqZWN0IiE9dHlwZW9mIGV8fG51bGw9PT1lKXRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIHRoZSBvYnNlcnZlciB0byBiZSBhbiBvYmplY3QuIik7ZnVuY3Rpb24gbigpe2UubmV4dCYmZS5uZXh0KGgoKSl9cmV0dXJuIG4oKSx7dW5zdWJzY3JpYmU6dChuKX19fSlbci5hXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxlfSxvfWZ1bmN0aW9uIGMoZSx0KXt2YXIgbj10JiZ0LnR5cGU7cmV0dXJuIkdpdmVuICIrKG4mJidhY3Rpb24gIicrU3RyaW5nKG4pKyciJ3x8ImFuIGFjdGlvbiIpKycsIHJlZHVjZXIgIicrZSsnIiByZXR1cm5lZCB1bmRlZmluZWQuIFRvIGlnbm9yZSBhbiBhY3Rpb24sIHlvdSBtdXN0IGV4cGxpY2l0bHkgcmV0dXJuIHRoZSBwcmV2aW91cyBzdGF0ZS4gSWYgeW91IHdhbnQgdGhpcyByZWR1Y2VyIHRvIGhvbGQgbm8gdmFsdWUsIHlvdSBjYW4gcmV0dXJuIG51bGwgaW5zdGVhZCBvZiB1bmRlZmluZWQuJ31mdW5jdGlvbiBsKGUpe2Zvcih2YXIgdD1PYmplY3Qua2V5cyhlKSxuPXt9LHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG89dFtyXTswLCJmdW5jdGlvbiI9PXR5cGVvZiBlW29dJiYobltvXT1lW29dKX12YXIgYSx1PU9iamVjdC5rZXlzKG4pO3RyeXshZnVuY3Rpb24oZSl7T2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXt2YXIgbj1lW3RdO2lmKHZvaWQgMD09PW4odm9pZCAwLHt0eXBlOmkuSU5JVH0pKXRocm93IG5ldyBFcnJvcignUmVkdWNlciAiJyt0KyJcIiByZXR1cm5lZCB1bmRlZmluZWQgZHVyaW5nIGluaXRpYWxpemF0aW9uLiBJZiB0aGUgc3RhdGUgcGFzc2VkIHRvIHRoZSByZWR1Y2VyIGlzIHVuZGVmaW5lZCwgeW91IG11c3QgZXhwbGljaXRseSByZXR1cm4gdGhlIGluaXRpYWwgc3RhdGUuIFRoZSBpbml0aWFsIHN0YXRlIG1heSBub3QgYmUgdW5kZWZpbmVkLiBJZiB5b3UgZG9uJ3Qgd2FudCB0byBzZXQgYSB2YWx1ZSBmb3IgdGhpcyByZWR1Y2VyLCB5b3UgY2FuIHVzZSBudWxsIGluc3RlYWQgb2YgdW5kZWZpbmVkLiIpO2lmKHZvaWQgMD09PW4odm9pZCAwLHt0eXBlOmkuUFJPQkVfVU5LTk9XTl9BQ1RJT04oKX0pKXRocm93IG5ldyBFcnJvcignUmVkdWNlciAiJyt0KyJcIiByZXR1cm5lZCB1bmRlZmluZWQgd2hlbiBwcm9iZWQgd2l0aCBhIHJhbmRvbSB0eXBlLiBEb24ndCB0cnkgdG8gaGFuZGxlICIraS5JTklUKycgb3Igb3RoZXIgYWN0aW9ucyBpbiAicmVkdXgvKiIgbmFtZXNwYWNlLiBUaGV5IGFyZSBjb25zaWRlcmVkIHByaXZhdGUuIEluc3RlYWQsIHlvdSBtdXN0IHJldHVybiB0aGUgY3VycmVudCBzdGF0ZSBmb3IgYW55IHVua25vd24gYWN0aW9ucywgdW5sZXNzIGl0IGlzIHVuZGVmaW5lZCwgaW4gd2hpY2ggY2FzZSB5b3UgbXVzdCByZXR1cm4gdGhlIGluaXRpYWwgc3RhdGUsIHJlZ2FyZGxlc3Mgb2YgdGhlIGFjdGlvbiB0eXBlLiBUaGUgaW5pdGlhbCBzdGF0ZSBtYXkgbm90IGJlIHVuZGVmaW5lZCwgYnV0IGNhbiBiZSBudWxsLicpfSl9KG4pfWNhdGNoKGUpe2E9ZX1yZXR1cm4gZnVuY3Rpb24oZSx0KXtpZih2b2lkIDA9PT1lJiYoZT17fSksYSl0aHJvdyBhO2Zvcih2YXIgcj0hMSxvPXt9LGk9MDtpPHUubGVuZ3RoO2krKyl7dmFyIGw9dVtpXSxzPW5bbF0sZj1lW2xdLHA9cyhmLHQpO2lmKHZvaWQgMD09PXApe3ZhciBkPWMobCx0KTt0aHJvdyBuZXcgRXJyb3IoZCl9b1tsXT1wLHI9cnx8cCE9PWZ9cmV0dXJuIHI/bzplfX1mdW5jdGlvbiBzKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQoZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfX1mdW5jdGlvbiBmKGUsdCl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUpcmV0dXJuIHMoZSx0KTtpZigib2JqZWN0IiE9dHlwZW9mIGV8fG51bGw9PT1lKXRocm93IG5ldyBFcnJvcigiYmluZEFjdGlvbkNyZWF0b3JzIGV4cGVjdGVkIGFuIG9iamVjdCBvciBhIGZ1bmN0aW9uLCBpbnN0ZWFkIHJlY2VpdmVkICIrKG51bGw9PT1lPyJudWxsIjp0eXBlb2YgZSkrJy4gRGlkIHlvdSB3cml0ZSAiaW1wb3J0IEFjdGlvbkNyZWF0b3JzIGZyb20iIGluc3RlYWQgb2YgImltcG9ydCAqIGFzIEFjdGlvbkNyZWF0b3JzIGZyb20iPycpO2Zvcih2YXIgbj1PYmplY3Qua2V5cyhlKSxyPXt9LG89MDtvPG4ubGVuZ3RoO28rKyl7dmFyIGk9bltvXSxhPWVbaV07ImZ1bmN0aW9uIj09dHlwZW9mIGEmJihyW2ldPXMoYSx0KSl9cmV0dXJuIHJ9ZnVuY3Rpb24gcChlLHQsbil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpuLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1uLGV9ZnVuY3Rpb24gZCgpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9bmV3IEFycmF5KGUpLG49MDtuPGU7bisrKXRbbl09YXJndW1lbnRzW25dO3JldHVybiAwPT09dC5sZW5ndGg/ZnVuY3Rpb24oZSl7cmV0dXJuIGV9OjE9PT10Lmxlbmd0aD90WzBdOnQucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUodC5hcHBseSh2b2lkIDAsYXJndW1lbnRzKSl9fSl9ZnVuY3Rpb24gaCgpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHQ9bmV3IEFycmF5KGUpLG49MDtuPGU7bisrKXRbbl09YXJndW1lbnRzW25dO3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbj1lLmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpLHI9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoIkRpc3BhdGNoaW5nIHdoaWxlIGNvbnN0cnVjdGluZyB5b3VyIG1pZGRsZXdhcmUgaXMgbm90IGFsbG93ZWQuIE90aGVyIG1pZGRsZXdhcmUgd291bGQgbm90IGJlIGFwcGxpZWQgdG8gdGhpcyBkaXNwYXRjaC4iKX0sbz17Z2V0U3RhdGU6bi5nZXRTdGF0ZSxkaXNwYXRjaDpmdW5jdGlvbigpe3JldHVybiByLmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpfX0saT10Lm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZShvKX0pO3JldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9LHI9T2JqZWN0LmtleXMobik7ImZ1bmN0aW9uIj09dHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMmJihyPXIuY29uY2F0KE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMobikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sZSkuZW51bWVyYWJsZX0pKSksci5mb3JFYWNoKGZ1bmN0aW9uKHQpe3AoZSx0LG5bdF0pfSl9cmV0dXJuIGV9KHt9LG4se2Rpc3BhdGNoOnI9ZC5hcHBseSh2b2lkIDAsaSkobi5kaXNwYXRjaCl9KX19fX0sZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmV4cG9ydHM9e3ZlcnNpb246IjIuNS43In07Im51bWJlciI9PXR5cGVvZiBfX2UmJihfX2U9bil9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDQ5KSgid2tzIiksbz1uKDQyKSxpPW4oMTEpLlN5bWJvbCxhPSJmdW5jdGlvbiI9PXR5cGVvZiBpOyhlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHJbZV18fChyW2VdPWEmJmlbZV18fChhP2k6bykoIlN5bWJvbC4iK2UpKX0pLnN0b3JlPXJ9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuLHIsbyxpLGEsdSl7aWYoIWUpe3ZhciBjO2lmKHZvaWQgMD09PXQpYz1uZXcgRXJyb3IoIk1pbmlmaWVkIGV4Y2VwdGlvbiBvY2N1cnJlZDsgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciB0aGUgZnVsbCBlcnJvciBtZXNzYWdlIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuIik7ZWxzZXt2YXIgbD1bbixyLG8saSxhLHVdLHM9MDsoYz1uZXcgRXJyb3IodC5yZXBsYWNlKC8lcy9nLGZ1bmN0aW9uKCl7cmV0dXJuIGxbcysrXX0pKSkubmFtZT0iSW52YXJpYW50IFZpb2xhdGlvbiJ9dGhyb3cgYy5mcmFtZXNUb1BvcD0xLGN9fX0sZnVuY3Rpb24oZSx0KXt2YXIgbj1lLmV4cG9ydHM9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdy5NYXRoPT1NYXRoP3dpbmRvdzoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYmJnNlbGYuTWF0aD09TWF0aD9zZWxmOkZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCk7Im51bWJlciI9PXR5cGVvZiBfX2cmJihfX2c9bil9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7fX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMyksbz1uKDgyKSxpPW4oMzQpLGE9T2JqZWN0LmRlZmluZVByb3BlcnR5O3QuZj1uKDE1KT9PYmplY3QuZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24oZSx0LG4pe2lmKHIoZSksdD1pKHQsITApLHIobiksbyl0cnl7cmV0dXJuIGEoZSx0LG4pfWNhdGNoKGUpe31pZigiZ2V0ImluIG58fCJzZXQiaW4gbil0aHJvdyBUeXBlRXJyb3IoIkFjY2Vzc29ycyBub3Qgc3VwcG9ydGVkISIpO3JldHVybiJ2YWx1ZSJpbiBuJiYoZVt0XT1uLnZhbHVlKSxlfX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1mdW5jdGlvbigpe307ZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCxuKXtlLmV4cG9ydHM9IW4oNCkoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCJhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHIoZSx0KXtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLGUuX19wcm90b19fPXR9bi5yKHQpO3ZhciBvPW4oMCksaT1uKDIpLGE9bi5uKGkpLHU9YS5hLnNoYXBlKHt0cnlTdWJzY3JpYmU6YS5hLmZ1bmMuaXNSZXF1aXJlZCx0cnlVbnN1YnNjcmliZTphLmEuZnVuYy5pc1JlcXVpcmVkLG5vdGlmeU5lc3RlZFN1YnM6YS5hLmZ1bmMuaXNSZXF1aXJlZCxpc1N1YnNjcmliZWQ6YS5hLmZ1bmMuaXNSZXF1aXJlZH0pLGM9YS5hLnNoYXBlKHtzdWJzY3JpYmU6YS5hLmZ1bmMuaXNSZXF1aXJlZCxkaXNwYXRjaDphLmEuZnVuYy5pc1JlcXVpcmVkLGdldFN0YXRlOmEuYS5mdW5jLmlzUmVxdWlyZWR9KTtmdW5jdGlvbiBsKGUpe3ZhciB0O3ZvaWQgMD09PWUmJihlPSJzdG9yZSIpO3ZhciBuPWUrIlN1YnNjcmlwdGlvbiIsaT1mdW5jdGlvbih0KXtyKGEsdCk7dmFyIGk9YS5wcm90b3R5cGU7ZnVuY3Rpb24gYShuLHIpe3ZhciBvO3JldHVybihvPXQuY2FsbCh0aGlzLG4scil8fHRoaXMpW2VdPW4uc3RvcmUsb31yZXR1cm4gaS5nZXRDaGlsZENvbnRleHQ9ZnVuY3Rpb24oKXt2YXIgdDtyZXR1cm4odD17fSlbZV09dGhpc1tlXSx0W25dPW51bGwsdH0saS5yZW5kZXI9ZnVuY3Rpb24oKXtyZXR1cm4gby5DaGlsZHJlbi5vbmx5KHRoaXMucHJvcHMuY2hpbGRyZW4pfSxhfShvLkNvbXBvbmVudCk7cmV0dXJuIGkucHJvcFR5cGVzPXtzdG9yZTpjLmlzUmVxdWlyZWQsY2hpbGRyZW46YS5hLmVsZW1lbnQuaXNSZXF1aXJlZH0saS5jaGlsZENvbnRleHRUeXBlcz0oKHQ9e30pW2VdPWMuaXNSZXF1aXJlZCx0W25dPXUsdCksaX12YXIgcz1sKCk7ZnVuY3Rpb24gZihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9ZnVuY3Rpb24gcCgpe3JldHVybihwPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9KS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gZChlLHQpe2lmKG51bGw9PWUpcmV0dXJue307dmFyIG4scixvPXt9LGk9T2JqZWN0LmtleXMoZSk7Zm9yKHI9MDtyPGkubGVuZ3RoO3IrKyluPWlbcl0sdC5pbmRleE9mKG4pPj0wfHwob1tuXT1lW25dKTtyZXR1cm4gb312YXIgaD1uKDEyMikseT1uLm4oaCksXz1uKDEwKSx2PW4ubihfKSxtPW4oNzkpLGc9bnVsbCxiPXtub3RpZnk6ZnVuY3Rpb24oKXt9fTt2YXIgdz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4pe3RoaXMuc3RvcmU9ZSx0aGlzLnBhcmVudFN1Yj10LHRoaXMub25TdGF0ZUNoYW5nZT1uLHRoaXMudW5zdWJzY3JpYmU9bnVsbCx0aGlzLmxpc3RlbmVycz1ifXZhciB0PWUucHJvdG90eXBlO3JldHVybiB0LmFkZE5lc3RlZFN1Yj1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy50cnlTdWJzY3JpYmUoKSx0aGlzLmxpc3RlbmVycy5zdWJzY3JpYmUoZSl9LHQubm90aWZ5TmVzdGVkU3Vicz1mdW5jdGlvbigpe3RoaXMubGlzdGVuZXJzLm5vdGlmeSgpfSx0LmlzU3Vic2NyaWJlZD1mdW5jdGlvbigpe3JldHVybiBCb29sZWFuKHRoaXMudW5zdWJzY3JpYmUpfSx0LnRyeVN1YnNjcmliZT1mdW5jdGlvbigpe3ZhciBlLHQ7dGhpcy51bnN1YnNjcmliZXx8KHRoaXMudW5zdWJzY3JpYmU9dGhpcy5wYXJlbnRTdWI/dGhpcy5wYXJlbnRTdWIuYWRkTmVzdGVkU3ViKHRoaXMub25TdGF0ZUNoYW5nZSk6dGhpcy5zdG9yZS5zdWJzY3JpYmUodGhpcy5vblN0YXRlQ2hhbmdlKSx0aGlzLmxpc3RlbmVycz0oZT1bXSx0PVtdLHtjbGVhcjpmdW5jdGlvbigpe3Q9ZyxlPWd9LG5vdGlmeTpmdW5jdGlvbigpe2Zvcih2YXIgbj1lPXQscj0wO3I8bi5sZW5ndGg7cisrKW5bcl0oKX0sZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHR9LHN1YnNjcmliZTpmdW5jdGlvbihuKXt2YXIgcj0hMDtyZXR1cm4gdD09PWUmJih0PWUuc2xpY2UoKSksdC5wdXNoKG4pLGZ1bmN0aW9uKCl7ciYmZSE9PWcmJihyPSExLHQ9PT1lJiYodD1lLnNsaWNlKCkpLHQuc3BsaWNlKHQuaW5kZXhPZihuKSwxKSl9fX0pKX0sdC50cnlVbnN1YnNjcmliZT1mdW5jdGlvbigpe3RoaXMudW5zdWJzY3JpYmUmJih0aGlzLnVuc3Vic2NyaWJlKCksdGhpcy51bnN1YnNjcmliZT1udWxsLHRoaXMubGlzdGVuZXJzLmNsZWFyKCksdGhpcy5saXN0ZW5lcnM9Yil9LGV9KCksRT0wLFQ9e307ZnVuY3Rpb24gTygpe31mdW5jdGlvbiBTKGUsdCl7dmFyIG4saTt2b2lkIDA9PT10JiYodD17fSk7dmFyIGE9dCxsPWEuZ2V0RGlzcGxheU5hbWUscz12b2lkIDA9PT1sP2Z1bmN0aW9uKGUpe3JldHVybiJDb25uZWN0QWR2YW5jZWQoIitlKyIpIn06bCxoPWEubWV0aG9kTmFtZSxfPXZvaWQgMD09PWg/ImNvbm5lY3RBZHZhbmNlZCI6aCxnPWEucmVuZGVyQ291bnRQcm9wLGI9dm9pZCAwPT09Zz92b2lkIDA6ZyxTPWEuc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzLHg9dm9pZCAwPT09U3x8UyxQPWEuc3RvcmVLZXksUj12b2lkIDA9PT1QPyJzdG9yZSI6UCxDPWEud2l0aFJlZixrPXZvaWQgMCE9PUMmJkMsTj1kKGEsWyJnZXREaXNwbGF5TmFtZSIsIm1ldGhvZE5hbWUiLCJyZW5kZXJDb3VudFByb3AiLCJzaG91bGRIYW5kbGVTdGF0ZUNoYW5nZXMiLCJzdG9yZUtleSIsIndpdGhSZWYiXSksQT1SKyJTdWJzY3JpcHRpb24iLEk9RSsrLEQ9KChuPXt9KVtSXT1jLG5bQV09dSxuKSxqPSgoaT17fSlbQV09dSxpKTtyZXR1cm4gZnVuY3Rpb24odCl7digpKE9iamVjdChtLmlzVmFsaWRFbGVtZW50VHlwZSkodCksIllvdSBtdXN0IHBhc3MgYSBjb21wb25lbnQgdG8gdGhlIGZ1bmN0aW9uIHJldHVybmVkIGJ5ICIrXysiLiBJbnN0ZWFkIHJlY2VpdmVkICIrSlNPTi5zdHJpbmdpZnkodCkpO3ZhciBuPXQuZGlzcGxheU5hbWV8fHQubmFtZXx8IkNvbXBvbmVudCIsaT1zKG4pLGE9cCh7fSxOLHtnZXREaXNwbGF5TmFtZTpzLG1ldGhvZE5hbWU6XyxyZW5kZXJDb3VudFByb3A6YixzaG91bGRIYW5kbGVTdGF0ZUNoYW5nZXM6eCxzdG9yZUtleTpSLHdpdGhSZWY6ayxkaXNwbGF5TmFtZTppLHdyYXBwZWRDb21wb25lbnROYW1lOm4sV3JhcHBlZENvbXBvbmVudDp0fSksdT1mdW5jdGlvbihuKXtmdW5jdGlvbiB1KGUsdCl7dmFyIHI7cmV0dXJuKHI9bi5jYWxsKHRoaXMsZSx0KXx8dGhpcykudmVyc2lvbj1JLHIuc3RhdGU9e30sci5yZW5kZXJDb3VudD0wLHIuc3RvcmU9ZVtSXXx8dFtSXSxyLnByb3BzTW9kZT1Cb29sZWFuKGVbUl0pLHIuc2V0V3JhcHBlZEluc3RhbmNlPXIuc2V0V3JhcHBlZEluc3RhbmNlLmJpbmQoZihmKHIpKSksdigpKHIuc3RvcmUsJ0NvdWxkIG5vdCBmaW5kICInK1IrJyIgaW4gZWl0aGVyIHRoZSBjb250ZXh0IG9yIHByb3BzIG9mICInK2krJyIuIEVpdGhlciB3cmFwIHRoZSByb290IGNvbXBvbmVudCBpbiBhIDxQcm92aWRlcj4sIG9yIGV4cGxpY2l0bHkgcGFzcyAiJytSKyciIGFzIGEgcHJvcCB0byAiJytpKyciLicpLHIuaW5pdFNlbGVjdG9yKCksci5pbml0U3Vic2NyaXB0aW9uKCkscn1yKHUsbik7dmFyIGM9dS5wcm90b3R5cGU7cmV0dXJuIGMuZ2V0Q2hpbGRDb250ZXh0PWZ1bmN0aW9uKCl7dmFyIGUsdD10aGlzLnByb3BzTW9kZT9udWxsOnRoaXMuc3Vic2NyaXB0aW9uO3JldHVybihlPXt9KVtBXT10fHx0aGlzLmNvbnRleHRbQV0sZX0sYy5jb21wb25lbnREaWRNb3VudD1mdW5jdGlvbigpe3gmJih0aGlzLnN1YnNjcmlwdGlvbi50cnlTdWJzY3JpYmUoKSx0aGlzLnNlbGVjdG9yLnJ1bih0aGlzLnByb3BzKSx0aGlzLnNlbGVjdG9yLnNob3VsZENvbXBvbmVudFVwZGF0ZSYmdGhpcy5mb3JjZVVwZGF0ZSgpKX0sYy5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzPWZ1bmN0aW9uKGUpe3RoaXMuc2VsZWN0b3IucnVuKGUpfSxjLnNob3VsZENvbXBvbmVudFVwZGF0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNlbGVjdG9yLnNob3VsZENvbXBvbmVudFVwZGF0ZX0sYy5jb21wb25lbnRXaWxsVW5tb3VudD1mdW5jdGlvbigpe3RoaXMuc3Vic2NyaXB0aW9uJiZ0aGlzLnN1YnNjcmlwdGlvbi50cnlVbnN1YnNjcmliZSgpLHRoaXMuc3Vic2NyaXB0aW9uPW51bGwsdGhpcy5ub3RpZnlOZXN0ZWRTdWJzPU8sdGhpcy5zdG9yZT1udWxsLHRoaXMuc2VsZWN0b3IucnVuPU8sdGhpcy5zZWxlY3Rvci5zaG91bGRDb21wb25lbnRVcGRhdGU9ITF9LGMuZ2V0V3JhcHBlZEluc3RhbmNlPWZ1bmN0aW9uKCl7cmV0dXJuIHYoKShrLCJUbyBhY2Nlc3MgdGhlIHdyYXBwZWQgaW5zdGFuY2UsIHlvdSBuZWVkIHRvIHNwZWNpZnkgeyB3aXRoUmVmOiB0cnVlIH0gaW4gdGhlIG9wdGlvbnMgYXJndW1lbnQgb2YgdGhlICIrXysiKCkgY2FsbC4iKSx0aGlzLndyYXBwZWRJbnN0YW5jZX0sYy5zZXRXcmFwcGVkSW5zdGFuY2U9ZnVuY3Rpb24oZSl7dGhpcy53cmFwcGVkSW5zdGFuY2U9ZX0sYy5pbml0U2VsZWN0b3I9ZnVuY3Rpb24oKXt2YXIgdD1lKHRoaXMuc3RvcmUuZGlzcGF0Y2gsYSk7dGhpcy5zZWxlY3Rvcj1mdW5jdGlvbihlLHQpe3ZhciBuPXtydW46ZnVuY3Rpb24ocil7dHJ5e3ZhciBvPWUodC5nZXRTdGF0ZSgpLHIpOyhvIT09bi5wcm9wc3x8bi5lcnJvcikmJihuLnNob3VsZENvbXBvbmVudFVwZGF0ZT0hMCxuLnByb3BzPW8sbi5lcnJvcj1udWxsKX1jYXRjaChlKXtuLnNob3VsZENvbXBvbmVudFVwZGF0ZT0hMCxuLmVycm9yPWV9fX07cmV0dXJuIG59KHQsdGhpcy5zdG9yZSksdGhpcy5zZWxlY3Rvci5ydW4odGhpcy5wcm9wcyl9LGMuaW5pdFN1YnNjcmlwdGlvbj1mdW5jdGlvbigpe2lmKHgpe3ZhciBlPSh0aGlzLnByb3BzTW9kZT90aGlzLnByb3BzOnRoaXMuY29udGV4dClbQV07dGhpcy5zdWJzY3JpcHRpb249bmV3IHcodGhpcy5zdG9yZSxlLHRoaXMub25TdGF0ZUNoYW5nZS5iaW5kKHRoaXMpKSx0aGlzLm5vdGlmeU5lc3RlZFN1YnM9dGhpcy5zdWJzY3JpcHRpb24ubm90aWZ5TmVzdGVkU3Vicy5iaW5kKHRoaXMuc3Vic2NyaXB0aW9uKX19LGMub25TdGF0ZUNoYW5nZT1mdW5jdGlvbigpe3RoaXMuc2VsZWN0b3IucnVuKHRoaXMucHJvcHMpLHRoaXMuc2VsZWN0b3Iuc2hvdWxkQ29tcG9uZW50VXBkYXRlPyh0aGlzLmNvbXBvbmVudERpZFVwZGF0ZT10aGlzLm5vdGlmeU5lc3RlZFN1YnNPbkNvbXBvbmVudERpZFVwZGF0ZSx0aGlzLnNldFN0YXRlKFQpKTp0aGlzLm5vdGlmeU5lc3RlZFN1YnMoKX0sYy5ub3RpZnlOZXN0ZWRTdWJzT25Db21wb25lbnREaWRVcGRhdGU9ZnVuY3Rpb24oKXt0aGlzLmNvbXBvbmVudERpZFVwZGF0ZT12b2lkIDAsdGhpcy5ub3RpZnlOZXN0ZWRTdWJzKCl9LGMuaXNTdWJzY3JpYmVkPWZ1bmN0aW9uKCl7cmV0dXJuIEJvb2xlYW4odGhpcy5zdWJzY3JpcHRpb24pJiZ0aGlzLnN1YnNjcmlwdGlvbi5pc1N1YnNjcmliZWQoKX0sYy5hZGRFeHRyYVByb3BzPWZ1bmN0aW9uKGUpe2lmKCEoa3x8Ynx8dGhpcy5wcm9wc01vZGUmJnRoaXMuc3Vic2NyaXB0aW9uKSlyZXR1cm4gZTt2YXIgdD1wKHt9LGUpO3JldHVybiBrJiYodC5yZWY9dGhpcy5zZXRXcmFwcGVkSW5zdGFuY2UpLGImJih0W2JdPXRoaXMucmVuZGVyQ291bnQrKyksdGhpcy5wcm9wc01vZGUmJnRoaXMuc3Vic2NyaXB0aW9uJiYodFtBXT10aGlzLnN1YnNjcmlwdGlvbiksdH0sYy5yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnNlbGVjdG9yO2lmKGUuc2hvdWxkQ29tcG9uZW50VXBkYXRlPSExLGUuZXJyb3IpdGhyb3cgZS5lcnJvcjtyZXR1cm4gT2JqZWN0KG8uY3JlYXRlRWxlbWVudCkodCx0aGlzLmFkZEV4dHJhUHJvcHMoZS5wcm9wcykpfSx1fShvLkNvbXBvbmVudCk7cmV0dXJuIHUuV3JhcHBlZENvbXBvbmVudD10LHUuZGlzcGxheU5hbWU9aSx1LmNoaWxkQ29udGV4dFR5cGVzPWosdS5jb250ZXh0VHlwZXM9RCx1LnByb3BUeXBlcz1ELHkoKSh1LHQpfX12YXIgeD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5O2Z1bmN0aW9uIFAoZSx0KXtyZXR1cm4gZT09PXQ/MCE9PWV8fDAhPT10fHwxL2U9PTEvdDplIT1lJiZ0IT10fWZ1bmN0aW9uIFIoZSx0KXtpZihQKGUsdCkpcmV0dXJuITA7aWYoIm9iamVjdCIhPXR5cGVvZiBlfHxudWxsPT09ZXx8Im9iamVjdCIhPXR5cGVvZiB0fHxudWxsPT09dClyZXR1cm4hMTt2YXIgbj1PYmplY3Qua2V5cyhlKSxyPU9iamVjdC5rZXlzKHQpO2lmKG4ubGVuZ3RoIT09ci5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBvPTA7bzxuLmxlbmd0aDtvKyspaWYoIXguY2FsbCh0LG5bb10pfHwhUChlW25bb11dLHRbbltvXV0pKXJldHVybiExO3JldHVybiEwfXZhciBDPW4oNyk7ZnVuY3Rpb24gayhlKXtyZXR1cm4gZnVuY3Rpb24odCxuKXt2YXIgcj1lKHQsbik7ZnVuY3Rpb24gbygpe3JldHVybiByfXJldHVybiBvLmRlcGVuZHNPbk93blByb3BzPSExLG99fWZ1bmN0aW9uIE4oZSl7cmV0dXJuIG51bGwhPT1lLmRlcGVuZHNPbk93blByb3BzJiZ2b2lkIDAhPT1lLmRlcGVuZHNPbk93blByb3BzP0Jvb2xlYW4oZS5kZXBlbmRzT25Pd25Qcm9wcyk6MSE9PWUubGVuZ3RofWZ1bmN0aW9uIEEoZSx0KXtyZXR1cm4gZnVuY3Rpb24odCxuKXtuLmRpc3BsYXlOYW1lO3ZhciByPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuZGVwZW5kc09uT3duUHJvcHM/ci5tYXBUb1Byb3BzKGUsdCk6ci5tYXBUb1Byb3BzKGUpfTtyZXR1cm4gci5kZXBlbmRzT25Pd25Qcm9wcz0hMCxyLm1hcFRvUHJvcHM9ZnVuY3Rpb24odCxuKXtyLm1hcFRvUHJvcHM9ZSxyLmRlcGVuZHNPbk93blByb3BzPU4oZSk7dmFyIG89cih0LG4pO3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBvJiYoci5tYXBUb1Byb3BzPW8sci5kZXBlbmRzT25Pd25Qcm9wcz1OKG8pLG89cih0LG4pKSxvfSxyfX12YXIgST1bZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGU/QShlKTp2b2lkIDB9LGZ1bmN0aW9uKGUpe3JldHVybiBlP3ZvaWQgMDprKGZ1bmN0aW9uKGUpe3JldHVybntkaXNwYXRjaDplfX0pfSxmdW5jdGlvbihlKXtyZXR1cm4gZSYmIm9iamVjdCI9PXR5cGVvZiBlP2soZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdChDLmIpKGUsdCl9KTp2b2lkIDB9XTt2YXIgRD1bZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGU/QShlKTp2b2lkIDB9LGZ1bmN0aW9uKGUpe3JldHVybiBlP3ZvaWQgMDprKGZ1bmN0aW9uKCl7cmV0dXJue319KX1dO2Z1bmN0aW9uIGooZSx0LG4pe3JldHVybiBwKHt9LG4sZSx0KX12YXIgTD1bZnVuY3Rpb24oZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGU/ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbil7bi5kaXNwbGF5TmFtZTt2YXIgcixvPW4ucHVyZSxpPW4uYXJlTWVyZ2VkUHJvcHNFcXVhbCxhPSExO3JldHVybiBmdW5jdGlvbih0LG4sdSl7dmFyIGM9ZSh0LG4sdSk7cmV0dXJuIGE/byYmaShjLHIpfHwocj1jKTooYT0hMCxyPWMpLHJ9fX0oZSk6dm9pZCAwfSxmdW5jdGlvbihlKXtyZXR1cm4gZT92b2lkIDA6ZnVuY3Rpb24oKXtyZXR1cm4gan19XTtmdW5jdGlvbiBNKGUsdCxuLHIpe3JldHVybiBmdW5jdGlvbihvLGkpe3JldHVybiBuKGUobyxpKSx0KHIsaSksaSl9fWZ1bmN0aW9uIEYoZSx0LG4scixvKXt2YXIgaSxhLHUsYyxsLHM9by5hcmVTdGF0ZXNFcXVhbCxmPW8uYXJlT3duUHJvcHNFcXVhbCxwPW8uYXJlU3RhdGVQcm9wc0VxdWFsLGQ9ITE7ZnVuY3Rpb24gaChvLGQpe3ZhciBoLHksXz0hZihkLGEpLHY9IXMobyxpKTtyZXR1cm4gaT1vLGE9ZCxfJiZ2Pyh1PWUoaSxhKSx0LmRlcGVuZHNPbk93blByb3BzJiYoYz10KHIsYSkpLGw9bih1LGMsYSkpOl8/KGUuZGVwZW5kc09uT3duUHJvcHMmJih1PWUoaSxhKSksdC5kZXBlbmRzT25Pd25Qcm9wcyYmKGM9dChyLGEpKSxsPW4odSxjLGEpKTp2PyhoPWUoaSxhKSx5PSFwKGgsdSksdT1oLHkmJihsPW4odSxjLGEpKSxsKTpsfXJldHVybiBmdW5jdGlvbihvLHMpe3JldHVybiBkP2gobyxzKToodT1lKGk9byxhPXMpLGM9dChyLGEpLGw9bih1LGMsYSksZD0hMCxsKX19ZnVuY3Rpb24gVShlLHQpe3ZhciBuPXQuaW5pdE1hcFN0YXRlVG9Qcm9wcyxyPXQuaW5pdE1hcERpc3BhdGNoVG9Qcm9wcyxvPXQuaW5pdE1lcmdlUHJvcHMsaT1kKHQsWyJpbml0TWFwU3RhdGVUb1Byb3BzIiwiaW5pdE1hcERpc3BhdGNoVG9Qcm9wcyIsImluaXRNZXJnZVByb3BzIl0pLGE9bihlLGkpLHU9cihlLGkpLGM9byhlLGkpO3JldHVybihpLnB1cmU/RjpNKShhLHUsYyxlLGkpfWZ1bmN0aW9uIFcoZSx0LG4pe2Zvcih2YXIgcj10Lmxlbmd0aC0xO3I+PTA7ci0tKXt2YXIgbz10W3JdKGUpO2lmKG8pcmV0dXJuIG99cmV0dXJuIGZ1bmN0aW9uKHQscil7dGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHZhbHVlIG9mIHR5cGUgIit0eXBlb2YgZSsiIGZvciAiK24rIiBhcmd1bWVudCB3aGVuIGNvbm5lY3RpbmcgY29tcG9uZW50ICIrci53cmFwcGVkQ29tcG9uZW50TmFtZSsiLiIpfX1mdW5jdGlvbiAkKGUsdCl7cmV0dXJuIGU9PT10fXZhciBHLEIscSx6LEgsVixZLEssUSxYLEosWixlZT0ocT0oQj12b2lkIDA9PT1HP3t9OkcpLmNvbm5lY3RIT0Msej12b2lkIDA9PT1xP1M6cSxIPUIubWFwU3RhdGVUb1Byb3BzRmFjdG9yaWVzLFY9dm9pZCAwPT09SD9EOkgsWT1CLm1hcERpc3BhdGNoVG9Qcm9wc0ZhY3RvcmllcyxLPXZvaWQgMD09PVk/STpZLFE9Qi5tZXJnZVByb3BzRmFjdG9yaWVzLFg9dm9pZCAwPT09UT9MOlEsSj1CLnNlbGVjdG9yRmFjdG9yeSxaPXZvaWQgMD09PUo/VTpKLGZ1bmN0aW9uKGUsdCxuLHIpe3ZvaWQgMD09PXImJihyPXt9KTt2YXIgbz1yLGk9by5wdXJlLGE9dm9pZCAwPT09aXx8aSx1PW8uYXJlU3RhdGVzRXF1YWwsYz12b2lkIDA9PT11PyQ6dSxsPW8uYXJlT3duUHJvcHNFcXVhbCxzPXZvaWQgMD09PWw/UjpsLGY9by5hcmVTdGF0ZVByb3BzRXF1YWwsaD12b2lkIDA9PT1mP1I6Zix5PW8uYXJlTWVyZ2VkUHJvcHNFcXVhbCxfPXZvaWQgMD09PXk/Ujp5LHY9ZChvLFsicHVyZSIsImFyZVN0YXRlc0VxdWFsIiwiYXJlT3duUHJvcHNFcXVhbCIsImFyZVN0YXRlUHJvcHNFcXVhbCIsImFyZU1lcmdlZFByb3BzRXF1YWwiXSksbT1XKGUsViwibWFwU3RhdGVUb1Byb3BzIiksZz1XKHQsSywibWFwRGlzcGF0Y2hUb1Byb3BzIiksYj1XKG4sWCwibWVyZ2VQcm9wcyIpO3JldHVybiB6KFoscCh7bWV0aG9kTmFtZToiY29ubmVjdCIsZ2V0RGlzcGxheU5hbWU6ZnVuY3Rpb24oZSl7cmV0dXJuIkNvbm5lY3QoIitlKyIpIn0sc2hvdWxkSGFuZGxlU3RhdGVDaGFuZ2VzOkJvb2xlYW4oZSksaW5pdE1hcFN0YXRlVG9Qcm9wczptLGluaXRNYXBEaXNwYXRjaFRvUHJvcHM6Zyxpbml0TWVyZ2VQcm9wczpiLHB1cmU6YSxhcmVTdGF0ZXNFcXVhbDpjLGFyZU93blByb3BzRXF1YWw6cyxhcmVTdGF0ZVByb3BzRXF1YWw6aCxhcmVNZXJnZWRQcm9wc0VxdWFsOl99LHYpKX0pO24uZCh0LCJQcm92aWRlciIsZnVuY3Rpb24oKXtyZXR1cm4gc30pLG4uZCh0LCJjcmVhdGVQcm92aWRlciIsZnVuY3Rpb24oKXtyZXR1cm4gbH0pLG4uZCh0LCJjb25uZWN0QWR2YW5jZWQiLGZ1bmN0aW9uKCl7cmV0dXJuIFN9KSxuLmQodCwiY29ubmVjdCIsZnVuY3Rpb24oKXtyZXR1cm4gZWV9KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDEyKSxvPW4ubihyKSxpPW4oMTApLGE9bi5uKGkpO2Z1bmN0aW9uIHUoZSl7cmV0dXJuIi8iPT09ZS5jaGFyQXQoMCl9ZnVuY3Rpb24gYyhlLHQpe2Zvcih2YXIgbj10LHI9bisxLG89ZS5sZW5ndGg7cjxvO24rPTEscis9MSllW25dPWVbcl07ZS5wb3AoKX12YXIgbD1mdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06IiIsbj1lJiZlLnNwbGl0KCIvIil8fFtdLHI9dCYmdC5zcGxpdCgiLyIpfHxbXSxvPWUmJnUoZSksaT10JiZ1KHQpLGE9b3x8aTtpZihlJiZ1KGUpP3I9bjpuLmxlbmd0aCYmKHIucG9wKCkscj1yLmNvbmNhdChuKSksIXIubGVuZ3RoKXJldHVybiIvIjt2YXIgbD12b2lkIDA7aWYoci5sZW5ndGgpe3ZhciBzPXJbci5sZW5ndGgtMV07bD0iLiI9PT1zfHwiLi4iPT09c3x8IiI9PT1zfWVsc2UgbD0hMTtmb3IodmFyIGY9MCxwPXIubGVuZ3RoO3A+PTA7cC0tKXt2YXIgZD1yW3BdOyIuIj09PWQ/YyhyLHApOiIuLiI9PT1kPyhjKHIscCksZisrKTpmJiYoYyhyLHApLGYtLSl9aWYoIWEpZm9yKDtmLS07ZilyLnVuc2hpZnQoIi4uIik7IWF8fCIiPT09clswXXx8clswXSYmdShyWzBdKXx8ci51bnNoaWZ0KCIiKTt2YXIgaD1yLmpvaW4oIi8iKTtyZXR1cm4gbCYmIi8iIT09aC5zdWJzdHIoLTEpJiYoaCs9Ii8iKSxofSxzPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfTt2YXIgZj1mdW5jdGlvbiBlKHQsbil7aWYodD09PW4pcmV0dXJuITA7aWYobnVsbD09dHx8bnVsbD09bilyZXR1cm4hMTtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiBBcnJheS5pc0FycmF5KG4pJiZ0Lmxlbmd0aD09PW4ubGVuZ3RoJiZ0LmV2ZXJ5KGZ1bmN0aW9uKHQscil7cmV0dXJuIGUodCxuW3JdKX0pO3ZhciByPXZvaWQgMD09PXQ/InVuZGVmaW5lZCI6cyh0KTtpZihyIT09KHZvaWQgMD09PW4/InVuZGVmaW5lZCI6cyhuKSkpcmV0dXJuITE7aWYoIm9iamVjdCI9PT1yKXt2YXIgbz10LnZhbHVlT2YoKSxpPW4udmFsdWVPZigpO2lmKG8hPT10fHxpIT09bilyZXR1cm4gZShvLGkpO3ZhciBhPU9iamVjdC5rZXlzKHQpLHU9T2JqZWN0LmtleXMobik7cmV0dXJuIGEubGVuZ3RoPT09dS5sZW5ndGgmJmEuZXZlcnkoZnVuY3Rpb24ocil7cmV0dXJuIGUodFtyXSxuW3JdKX0pfXJldHVybiExfSxwPWZ1bmN0aW9uKGUpe3JldHVybiIvIj09PWUuY2hhckF0KDApP2U6Ii8iK2V9LGQ9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3IFJlZ0V4cCgiXiIrdCsiKFxcL3xcXD98I3wkKSIsImkiKS50ZXN0KGUpfSxoPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGQoZSx0KT9lLnN1YnN0cih0Lmxlbmd0aCk6ZX0seT1mdW5jdGlvbihlKXtyZXR1cm4iLyI9PT1lLmNoYXJBdChlLmxlbmd0aC0xKT9lLnNsaWNlKDAsLTEpOmV9LF89ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYXRobmFtZSxuPWUuc2VhcmNoLHI9ZS5oYXNoLG89dHx8Ii8iO3JldHVybiBuJiYiPyIhPT1uJiYobys9Ij8iPT09bi5jaGFyQXQoMCk/bjoiPyIrbiksciYmIiMiIT09ciYmKG8rPSIjIj09PXIuY2hhckF0KDApP3I6IiMiK3IpLG99LHY9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX0sbT1mdW5jdGlvbihlLHQsbixyKXt2YXIgbz12b2lkIDA7InN0cmluZyI9PXR5cGVvZiBlPyhvPWZ1bmN0aW9uKGUpe3ZhciB0PWV8fCIvIixuPSIiLHI9IiIsbz10LmluZGV4T2YoIiMiKTstMSE9PW8mJihyPXQuc3Vic3RyKG8pLHQ9dC5zdWJzdHIoMCxvKSk7dmFyIGk9dC5pbmRleE9mKCI/Iik7cmV0dXJuLTEhPT1pJiYobj10LnN1YnN0cihpKSx0PXQuc3Vic3RyKDAsaSkpLHtwYXRobmFtZTp0LHNlYXJjaDoiPyI9PT1uPyIiOm4saGFzaDoiIyI9PT1yPyIiOnJ9fShlKSkuc3RhdGU9dDoodm9pZCAwPT09KG89dih7fSxlKSkucGF0aG5hbWUmJihvLnBhdGhuYW1lPSIiKSxvLnNlYXJjaD8iPyIhPT1vLnNlYXJjaC5jaGFyQXQoMCkmJihvLnNlYXJjaD0iPyIrby5zZWFyY2gpOm8uc2VhcmNoPSIiLG8uaGFzaD8iIyIhPT1vLmhhc2guY2hhckF0KDApJiYoby5oYXNoPSIjIitvLmhhc2gpOm8uaGFzaD0iIix2b2lkIDAhPT10JiZ2b2lkIDA9PT1vLnN0YXRlJiYoby5zdGF0ZT10KSk7dHJ5e28ucGF0aG5hbWU9ZGVjb2RlVVJJKG8ucGF0aG5hbWUpfWNhdGNoKGUpe3Rocm93IGUgaW5zdGFuY2VvZiBVUklFcnJvcj9uZXcgVVJJRXJyb3IoJ1BhdGhuYW1lICInK28ucGF0aG5hbWUrJyIgY291bGQgbm90IGJlIGRlY29kZWQuIFRoaXMgaXMgbGlrZWx5IGNhdXNlZCBieSBhbiBpbnZhbGlkIHBlcmNlbnQtZW5jb2RpbmcuJyk6ZX1yZXR1cm4gbiYmKG8ua2V5PW4pLHI/by5wYXRobmFtZT8iLyIhPT1vLnBhdGhuYW1lLmNoYXJBdCgwKSYmKG8ucGF0aG5hbWU9bChvLnBhdGhuYW1lLHIucGF0aG5hbWUpKTpvLnBhdGhuYW1lPXIucGF0aG5hbWU6by5wYXRobmFtZXx8KG8ucGF0aG5hbWU9Ii8iKSxvfSxnPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUucGF0aG5hbWU9PT10LnBhdGhuYW1lJiZlLnNlYXJjaD09PXQuc2VhcmNoJiZlLmhhc2g9PT10Lmhhc2gmJmUua2V5PT09dC5rZXkmJmYoZS5zdGF0ZSx0LnN0YXRlKX0sYj1mdW5jdGlvbigpe3ZhciBlPW51bGwsdD1bXTtyZXR1cm57c2V0UHJvbXB0OmZ1bmN0aW9uKHQpe3JldHVybiBvKCkobnVsbD09ZSwiQSBoaXN0b3J5IHN1cHBvcnRzIG9ubHkgb25lIHByb21wdCBhdCBhIHRpbWUiKSxlPXQsZnVuY3Rpb24oKXtlPT09dCYmKGU9bnVsbCl9fSxjb25maXJtVHJhbnNpdGlvblRvOmZ1bmN0aW9uKHQsbixyLGkpe2lmKG51bGwhPWUpe3ZhciBhPSJmdW5jdGlvbiI9PXR5cGVvZiBlP2UodCxuKTplOyJzdHJpbmciPT10eXBlb2YgYT8iZnVuY3Rpb24iPT10eXBlb2Ygcj9yKGEsaSk6KG8oKSghMSwiQSBoaXN0b3J5IG5lZWRzIGEgZ2V0VXNlckNvbmZpcm1hdGlvbiBmdW5jdGlvbiBpbiBvcmRlciB0byB1c2UgYSBwcm9tcHQgbWVzc2FnZSIpLGkoITApKTppKCExIT09YSl9ZWxzZSBpKCEwKX0sYXBwZW5kTGlzdGVuZXI6ZnVuY3Rpb24oZSl7dmFyIG49ITAscj1mdW5jdGlvbigpe24mJmUuYXBwbHkodm9pZCAwLGFyZ3VtZW50cyl9O3JldHVybiB0LnB1c2gociksZnVuY3Rpb24oKXtuPSExLHQ9dC5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIGUhPT1yfSl9fSxub3RpZnlMaXN0ZW5lcnM6ZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCxuPUFycmF5KGUpLHI9MDtyPGU7cisrKW5bcl09YXJndW1lbnRzW3JdO3QuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gZS5hcHBseSh2b2lkIDAsbil9KX19fSx3PSEoInVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3d8fCF3aW5kb3cuZG9jdW1lbnR8fCF3aW5kb3cuZG9jdW1lbnQuY3JlYXRlRWxlbWVudCksRT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGUuYWRkRXZlbnRMaXN0ZW5lcj9lLmFkZEV2ZW50TGlzdGVuZXIodCxuLCExKTplLmF0dGFjaEV2ZW50KCJvbiIrdCxuKX0sVD1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGUucmVtb3ZlRXZlbnRMaXN0ZW5lcj9lLnJlbW92ZUV2ZW50TGlzdGVuZXIodCxuLCExKTplLmRldGFjaEV2ZW50KCJvbiIrdCxuKX0sTz1mdW5jdGlvbihlLHQpe3JldHVybiB0KHdpbmRvdy5jb25maXJtKGUpKX0sUz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0seD1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfSxQPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiB3aW5kb3cuaGlzdG9yeS5zdGF0ZXx8e319Y2F0Y2goZSl7cmV0dXJue319fSxSPWZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O2EoKSh3LCJCcm93c2VyIGhpc3RvcnkgbmVlZHMgYSBET00iKTt2YXIgdCxuPXdpbmRvdy5oaXN0b3J5LHI9KC0xPT09KHQ9d2luZG93Lm5hdmlnYXRvci51c2VyQWdlbnQpLmluZGV4T2YoIkFuZHJvaWQgMi4iKSYmLTE9PT10LmluZGV4T2YoIkFuZHJvaWQgNC4wIil8fC0xPT09dC5pbmRleE9mKCJNb2JpbGUgU2FmYXJpIil8fC0xIT09dC5pbmRleE9mKCJDaHJvbWUiKXx8LTEhPT10LmluZGV4T2YoIldpbmRvd3MgUGhvbmUiKSkmJndpbmRvdy5oaXN0b3J5JiYicHVzaFN0YXRlImluIHdpbmRvdy5oaXN0b3J5LGk9ISgtMT09PXdpbmRvdy5uYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIlRyaWRlbnQiKSksdT1lLmZvcmNlUmVmcmVzaCxjPXZvaWQgMCE9PXUmJnUsbD1lLmdldFVzZXJDb25maXJtYXRpb24scz12b2lkIDA9PT1sP086bCxmPWUua2V5TGVuZ3RoLHY9dm9pZCAwPT09Zj82OmYsZz1lLmJhc2VuYW1lP3kocChlLmJhc2VuYW1lKSk6IiIsUj1mdW5jdGlvbihlKXt2YXIgdD1lfHx7fSxuPXQua2V5LHI9dC5zdGF0ZSxpPXdpbmRvdy5sb2NhdGlvbixhPWkucGF0aG5hbWUraS5zZWFyY2graS5oYXNoO3JldHVybiBvKCkoIWd8fGQoYSxnKSwnWW91IGFyZSBhdHRlbXB0aW5nIHRvIHVzZSBhIGJhc2VuYW1lIG9uIGEgcGFnZSB3aG9zZSBVUkwgcGF0aCBkb2VzIG5vdCBiZWdpbiB3aXRoIHRoZSBiYXNlbmFtZS4gRXhwZWN0ZWQgcGF0aCAiJythKyciIHRvIGJlZ2luIHdpdGggIicrZysnIi4nKSxnJiYoYT1oKGEsZykpLG0oYSxyLG4pfSxDPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cigyLHYpfSxrPWIoKSxOPWZ1bmN0aW9uKGUpe3gocSxlKSxxLmxlbmd0aD1uLmxlbmd0aCxrLm5vdGlmeUxpc3RlbmVycyhxLmxvY2F0aW9uLHEuYWN0aW9uKX0sQT1mdW5jdGlvbihlKXsoZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWUuc3RhdGUmJi0xPT09bmF2aWdhdG9yLnVzZXJBZ2VudC5pbmRleE9mKCJDcmlPUyIpfSkoZSl8fGooUihlLnN0YXRlKSl9LEk9ZnVuY3Rpb24oKXtqKFIoUCgpKSl9LEQ9ITEsaj1mdW5jdGlvbihlKXtEPyhEPSExLE4oKSk6ay5jb25maXJtVHJhbnNpdGlvblRvKGUsIlBPUCIscyxmdW5jdGlvbih0KXt0P04oe2FjdGlvbjoiUE9QIixsb2NhdGlvbjplfSk6TChlKX0pfSxMPWZ1bmN0aW9uKGUpe3ZhciB0PXEubG9jYXRpb24sbj1GLmluZGV4T2YodC5rZXkpOy0xPT09biYmKG49MCk7dmFyIHI9Ri5pbmRleE9mKGUua2V5KTstMT09PXImJihyPTApO3ZhciBvPW4tcjtvJiYoRD0hMCxXKG8pKX0sTT1SKFAoKSksRj1bTS5rZXldLFU9ZnVuY3Rpb24oZSl7cmV0dXJuIGcrXyhlKX0sVz1mdW5jdGlvbihlKXtuLmdvKGUpfSwkPTAsRz1mdW5jdGlvbihlKXsxPT09KCQrPWUpPyhFKHdpbmRvdywicG9wc3RhdGUiLEEpLGkmJkUod2luZG93LCJoYXNoY2hhbmdlIixJKSk6MD09PSQmJihUKHdpbmRvdywicG9wc3RhdGUiLEEpLGkmJlQod2luZG93LCJoYXNoY2hhbmdlIixJKSl9LEI9ITEscT17bGVuZ3RoOm4ubGVuZ3RoLGFjdGlvbjoiUE9QIixsb2NhdGlvbjpNLGNyZWF0ZUhyZWY6VSxwdXNoOmZ1bmN0aW9uKGUsdCl7bygpKCEoIm9iamVjdCI9PT0odm9pZCAwPT09ZT8idW5kZWZpbmVkIjpTKGUpKSYmdm9pZCAwIT09ZS5zdGF0ZSYmdm9pZCAwIT09dCksIllvdSBzaG91bGQgYXZvaWQgcHJvdmlkaW5nIGEgMm5kIHN0YXRlIGFyZ3VtZW50IHRvIHB1c2ggd2hlbiB0aGUgMXN0IGFyZ3VtZW50IGlzIGEgbG9jYXRpb24tbGlrZSBvYmplY3QgdGhhdCBhbHJlYWR5IGhhcyBzdGF0ZTsgaXQgaXMgaWdub3JlZCIpO3ZhciBpPW0oZSx0LEMoKSxxLmxvY2F0aW9uKTtrLmNvbmZpcm1UcmFuc2l0aW9uVG8oaSwiUFVTSCIscyxmdW5jdGlvbihlKXtpZihlKXt2YXIgdD1VKGkpLGE9aS5rZXksdT1pLnN0YXRlO2lmKHIpaWYobi5wdXNoU3RhdGUoe2tleTphLHN0YXRlOnV9LG51bGwsdCksYyl3aW5kb3cubG9jYXRpb24uaHJlZj10O2Vsc2V7dmFyIGw9Ri5pbmRleE9mKHEubG9jYXRpb24ua2V5KSxzPUYuc2xpY2UoMCwtMT09PWw/MDpsKzEpO3MucHVzaChpLmtleSksRj1zLE4oe2FjdGlvbjoiUFVTSCIsbG9jYXRpb246aX0pfWVsc2UgbygpKHZvaWQgMD09PXUsIkJyb3dzZXIgaGlzdG9yeSBjYW5ub3QgcHVzaCBzdGF0ZSBpbiBicm93c2VycyB0aGF0IGRvIG5vdCBzdXBwb3J0IEhUTUw1IGhpc3RvcnkiKSx3aW5kb3cubG9jYXRpb24uaHJlZj10fX0pfSxyZXBsYWNlOmZ1bmN0aW9uKGUsdCl7bygpKCEoIm9iamVjdCI9PT0odm9pZCAwPT09ZT8idW5kZWZpbmVkIjpTKGUpKSYmdm9pZCAwIT09ZS5zdGF0ZSYmdm9pZCAwIT09dCksIllvdSBzaG91bGQgYXZvaWQgcHJvdmlkaW5nIGEgMm5kIHN0YXRlIGFyZ3VtZW50IHRvIHJlcGxhY2Ugd2hlbiB0aGUgMXN0IGFyZ3VtZW50IGlzIGEgbG9jYXRpb24tbGlrZSBvYmplY3QgdGhhdCBhbHJlYWR5IGhhcyBzdGF0ZTsgaXQgaXMgaWdub3JlZCIpO3ZhciBpPW0oZSx0LEMoKSxxLmxvY2F0aW9uKTtrLmNvbmZpcm1UcmFuc2l0aW9uVG8oaSwiUkVQTEFDRSIscyxmdW5jdGlvbihlKXtpZihlKXt2YXIgdD1VKGkpLGE9aS5rZXksdT1pLnN0YXRlO2lmKHIpaWYobi5yZXBsYWNlU3RhdGUoe2tleTphLHN0YXRlOnV9LG51bGwsdCksYyl3aW5kb3cubG9jYXRpb24ucmVwbGFjZSh0KTtlbHNle3ZhciBsPUYuaW5kZXhPZihxLmxvY2F0aW9uLmtleSk7LTEhPT1sJiYoRltsXT1pLmtleSksTih7YWN0aW9uOiJSRVBMQUNFIixsb2NhdGlvbjppfSl9ZWxzZSBvKCkodm9pZCAwPT09dSwiQnJvd3NlciBoaXN0b3J5IGNhbm5vdCByZXBsYWNlIHN0YXRlIGluIGJyb3dzZXJzIHRoYXQgZG8gbm90IHN1cHBvcnQgSFRNTDUgaGlzdG9yeSIpLHdpbmRvdy5sb2NhdGlvbi5yZXBsYWNlKHQpfX0pfSxnbzpXLGdvQmFjazpmdW5jdGlvbigpe3JldHVybiBXKC0xKX0sZ29Gb3J3YXJkOmZ1bmN0aW9uKCl7cmV0dXJuIFcoMSl9LGJsb2NrOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXSx0PWsuc2V0UHJvbXB0KGUpO3JldHVybiBCfHwoRygxKSxCPSEwKSxmdW5jdGlvbigpe3JldHVybiBCJiYoQj0hMSxHKC0xKSksdCgpfX0sbGlzdGVuOmZ1bmN0aW9uKGUpe3ZhciB0PWsuYXBwZW5kTGlzdGVuZXIoZSk7cmV0dXJuIEcoMSksZnVuY3Rpb24oKXtHKC0xKSx0KCl9fX07cmV0dXJuIHF9LEM9KE9iamVjdC5hc3NpZ24sImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KSxrPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LE49ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBNYXRoLm1pbihNYXRoLm1heChlLHQpLG4pfSxBPWZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LHQ9ZS5nZXRVc2VyQ29uZmlybWF0aW9uLG49ZS5pbml0aWFsRW50cmllcyxyPXZvaWQgMD09PW4/WyIvIl06bixpPWUuaW5pdGlhbEluZGV4LGE9dm9pZCAwPT09aT8wOmksdT1lLmtleUxlbmd0aCxjPXZvaWQgMD09PXU/Njp1LGw9YigpLHM9ZnVuY3Rpb24oZSl7ayh2LGUpLHYubGVuZ3RoPXYuZW50cmllcy5sZW5ndGgsbC5ub3RpZnlMaXN0ZW5lcnModi5sb2NhdGlvbix2LmFjdGlvbil9LGY9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsYyl9LHA9TihhLDAsci5sZW5ndGgtMSksZD1yLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gbShlLHZvaWQgMCwic3RyaW5nIj09dHlwZW9mIGU/ZigpOmUua2V5fHxmKCkpfSksaD1fLHk9ZnVuY3Rpb24oZSl7dmFyIG49Tih2LmluZGV4K2UsMCx2LmVudHJpZXMubGVuZ3RoLTEpLHI9di5lbnRyaWVzW25dO2wuY29uZmlybVRyYW5zaXRpb25UbyhyLCJQT1AiLHQsZnVuY3Rpb24oZSl7ZT9zKHthY3Rpb246IlBPUCIsbG9jYXRpb246cixpbmRleDpufSk6cygpfSl9LHY9e2xlbmd0aDpkLmxlbmd0aCxhY3Rpb246IlBPUCIsbG9jYXRpb246ZFtwXSxpbmRleDpwLGVudHJpZXM6ZCxjcmVhdGVIcmVmOmgscHVzaDpmdW5jdGlvbihlLG4pe28oKSghKCJvYmplY3QiPT09KHZvaWQgMD09PWU/InVuZGVmaW5lZCI6QyhlKSkmJnZvaWQgMCE9PWUuc3RhdGUmJnZvaWQgMCE9PW4pLCJZb3Ugc2hvdWxkIGF2b2lkIHByb3ZpZGluZyBhIDJuZCBzdGF0ZSBhcmd1bWVudCB0byBwdXNoIHdoZW4gdGhlIDFzdCBhcmd1bWVudCBpcyBhIGxvY2F0aW9uLWxpa2Ugb2JqZWN0IHRoYXQgYWxyZWFkeSBoYXMgc3RhdGU7IGl0IGlzIGlnbm9yZWQiKTt2YXIgcj1tKGUsbixmKCksdi5sb2NhdGlvbik7bC5jb25maXJtVHJhbnNpdGlvblRvKHIsIlBVU0giLHQsZnVuY3Rpb24oZSl7aWYoZSl7dmFyIHQ9di5pbmRleCsxLG49di5lbnRyaWVzLnNsaWNlKDApO24ubGVuZ3RoPnQ/bi5zcGxpY2UodCxuLmxlbmd0aC10LHIpOm4ucHVzaChyKSxzKHthY3Rpb246IlBVU0giLGxvY2F0aW9uOnIsaW5kZXg6dCxlbnRyaWVzOm59KX19KX0scmVwbGFjZTpmdW5jdGlvbihlLG4pe28oKSghKCJvYmplY3QiPT09KHZvaWQgMD09PWU/InVuZGVmaW5lZCI6QyhlKSkmJnZvaWQgMCE9PWUuc3RhdGUmJnZvaWQgMCE9PW4pLCJZb3Ugc2hvdWxkIGF2b2lkIHByb3ZpZGluZyBhIDJuZCBzdGF0ZSBhcmd1bWVudCB0byByZXBsYWNlIHdoZW4gdGhlIDFzdCBhcmd1bWVudCBpcyBhIGxvY2F0aW9uLWxpa2Ugb2JqZWN0IHRoYXQgYWxyZWFkeSBoYXMgc3RhdGU7IGl0IGlzIGlnbm9yZWQiKTt2YXIgcj1tKGUsbixmKCksdi5sb2NhdGlvbik7bC5jb25maXJtVHJhbnNpdGlvblRvKHIsIlJFUExBQ0UiLHQsZnVuY3Rpb24oZSl7ZSYmKHYuZW50cmllc1t2LmluZGV4XT1yLHMoe2FjdGlvbjoiUkVQTEFDRSIsbG9jYXRpb246cn0pKX0pfSxnbzp5LGdvQmFjazpmdW5jdGlvbigpe3JldHVybiB5KC0xKX0sZ29Gb3J3YXJkOmZ1bmN0aW9uKCl7cmV0dXJuIHkoMSl9LGNhbkdvOmZ1bmN0aW9uKGUpe3ZhciB0PXYuaW5kZXgrZTtyZXR1cm4gdD49MCYmdDx2LmVudHJpZXMubGVuZ3RofSxibG9jazpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07cmV0dXJuIGwuc2V0UHJvbXB0KGUpfSxsaXN0ZW46ZnVuY3Rpb24oZSl7cmV0dXJuIGwuYXBwZW5kTGlzdGVuZXIoZSl9fTtyZXR1cm4gdn07bi5kKHQsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIFJ9KSxuLmQodCwiYyIsZnVuY3Rpb24oKXtyZXR1cm4gQX0pLG4uZCh0LCJiIixmdW5jdGlvbigpe3JldHVybiBtfSksbi5kKHQsImUiLGZ1bmN0aW9uKCl7cmV0dXJuIGd9KSxuLmQodCwiZCIsZnVuY3Rpb24oKXtyZXR1cm4gX30pfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigxMSksbz1uKDI3KSxpPW4oMjIpLGE9big0MikoInNyYyIpLHU9RnVuY3Rpb24udG9TdHJpbmcsYz0oIiIrdSkuc3BsaXQoInRvU3RyaW5nIik7big4KS5pbnNwZWN0U291cmNlPWZ1bmN0aW9uKGUpe3JldHVybiB1LmNhbGwoZSl9LChlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4sdSl7dmFyIGw9ImZ1bmN0aW9uIj09dHlwZW9mIG47bCYmKGkobiwibmFtZSIpfHxvKG4sIm5hbWUiLHQpKSxlW3RdIT09biYmKGwmJihpKG4sYSl8fG8obixhLGVbdF0/IiIrZVt0XTpjLmpvaW4oU3RyaW5nKHQpKSkpLGU9PT1yP2VbdF09bjp1P2VbdF0/ZVt0XT1uOm8oZSx0LG4pOihkZWxldGUgZVt0XSxvKGUsdCxuKSkpfSkoRnVuY3Rpb24ucHJvdG90eXBlLCJ0b1N0cmluZyIsZnVuY3Rpb24oKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgdGhpcyYmdGhpc1thXXx8dS5jYWxsKHRoaXMpfSl9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDEpLG89big0KSxpPW4oMzIpLGE9LyIvZyx1PWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvPVN0cmluZyhpKGUpKSx1PSI8Iit0O3JldHVybiIiIT09biYmKHUrPSIgIituKyc9IicrU3RyaW5nKHIpLnJlcGxhY2UoYSwiIiIpKyciJyksdSsiPiIrbysiPC8iK3QrIj4ifTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgbj17fTtuW2VdPXQodSkscihyLlArci5GKm8oZnVuY3Rpb24oKXt2YXIgdD0iIltlXSgnIicpO3JldHVybiB0IT09dC50b0xvd2VyQ2FzZSgpfHx0LnNwbGl0KCciJykubGVuZ3RoPjN9KSwiU3RyaW5nIixuKX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDQwKSxvPU1hdGgubWluO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gZT4wP28ocihlKSw5MDA3MTk5MjU0NzQwOTkxKTowfX0sZnVuY3Rpb24oZSx0KXt2YXIgbjtuPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KCk7dHJ5e249bnx8RnVuY3Rpb24oInJldHVybiB0aGlzIikoKXx8KDAsZXZhbCkoInRoaXMiKX1jYXRjaChlKXsib2JqZWN0Ij09dHlwZW9mIHdpbmRvdyYmKG49d2luZG93KX1lLmV4cG9ydHM9bn0sZnVuY3Rpb24oZSx0KXt2YXIgbj17fS5oYXNPd25Qcm9wZXJ0eTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbi5jYWxsKGUsdCl9fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigzMik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QocihlKSl9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuISFlJiZyKGZ1bmN0aW9uKCl7dD9lLmNhbGwobnVsbCxmdW5jdGlvbigpe30sMSk6ZS5jYWxsKG51bGwpfSl9fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9big0Myksbz1uKDMyKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHIobyhlKSl9fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigxKSxvPW4oOCksaT1uKDQpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBuPShvLk9iamVjdHx8e30pW2VdfHxPYmplY3RbZV0sYT17fTthW2VdPXQobikscihyLlMrci5GKmkoZnVuY3Rpb24oKXtuKDEpfSksIk9iamVjdCIsYSl9fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigxMyksbz1uKDM3KTtlLmV4cG9ydHM9bigxNSk/ZnVuY3Rpb24oZSx0LG4pe3JldHVybiByLmYoZSx0LG8oMSxuKSl9OmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZVt0XT1uLGV9fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigyMiksbz1uKDIzKSxpPW4oNjIpKCJJRV9QUk9UTyIpLGE9T2JqZWN0LnByb3RvdHlwZTtlLmV4cG9ydHM9T2JqZWN0LmdldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlKXtyZXR1cm4gZT1vKGUpLHIoZSxpKT9lW2ldOiJmdW5jdGlvbiI9PXR5cGVvZiBlLmNvbnN0cnVjdG9yJiZlIGluc3RhbmNlb2YgZS5jb25zdHJ1Y3Rvcj9lLmNvbnN0cnVjdG9yLnByb3RvdHlwZTplIGluc3RhbmNlb2YgT2JqZWN0P2E6bnVsbH19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDM4KSxvPW4oNDMpLGk9bigyMyksYT1uKDIwKSx1PW4oMjI1KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgbj0xPT1lLGM9Mj09ZSxsPTM9PWUscz00PT1lLGY9Nj09ZSxwPTU9PWV8fGYsZD10fHx1O3JldHVybiBmdW5jdGlvbih0LHUsaCl7Zm9yKHZhciB5LF8sdj1pKHQpLG09byh2KSxnPXIodSxoLDMpLGI9YShtLmxlbmd0aCksdz0wLEU9bj9kKHQsYik6Yz9kKHQsMCk6dm9pZCAwO2I+dzt3KyspaWYoKHB8fHcgaW4gbSkmJihfPWcoeT1tW3ddLHcsdiksZSkpaWYobilFW3ddPV87ZWxzZSBpZihfKXN3aXRjaChlKXtjYXNlIDM6cmV0dXJuITA7Y2FzZSA1OnJldHVybiB5O2Nhc2UgNjpyZXR1cm4gdztjYXNlIDI6RS5wdXNoKHkpfWVsc2UgaWYocylyZXR1cm4hMTtyZXR1cm4gZj8tMTpsfHxzP3M6RX19fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigxMTUpLG89bigxKSxpPW4oNDkpKCJtZXRhZGF0YSIpLGE9aS5zdG9yZXx8KGkuc3RvcmU9bmV3KG4oMjY3KSkpLHU9ZnVuY3Rpb24oZSx0LG4pe3ZhciBvPWEuZ2V0KGUpO2lmKCFvKXtpZighbilyZXR1cm47YS5zZXQoZSxvPW5ldyByKX12YXIgaT1vLmdldCh0KTtpZighaSl7aWYoIW4pcmV0dXJuO28uc2V0KHQsaT1uZXcgcil9cmV0dXJuIGl9O2UuZXhwb3J0cz17c3RvcmU6YSxtYXA6dSxoYXM6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXUodCxuLCExKTtyZXR1cm4gdm9pZCAwIT09ciYmci5oYXMoZSl9LGdldDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dSh0LG4sITEpO3JldHVybiB2b2lkIDA9PT1yP3ZvaWQgMDpyLmdldChlKX0sc2V0OmZ1bmN0aW9uKGUsdCxuLHIpe3UobixyLCEwKS5zZXQoZSx0KX0sa2V5czpmdW5jdGlvbihlLHQpe3ZhciBuPXUoZSx0LCExKSxyPVtdO3JldHVybiBuJiZuLmZvckVhY2goZnVuY3Rpb24oZSx0KXtyLnB1c2godCl9KSxyfSxrZXk6ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMD09PWV8fCJzeW1ib2wiPT10eXBlb2YgZT9lOlN0cmluZyhlKX0sZXhwOmZ1bmN0aW9uKGUpe28oby5TLCJSZWZsZWN0IixlKX19fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9big0MikoIm1ldGEiKSxvPW4oNSksaT1uKDIyKSxhPW4oMTMpLmYsdT0wLGM9T2JqZWN0LmlzRXh0ZW5zaWJsZXx8ZnVuY3Rpb24oKXtyZXR1cm4hMH0sbD0hbig0KShmdW5jdGlvbigpe3JldHVybiBjKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpfSkscz1mdW5jdGlvbihlKXthKGUscix7dmFsdWU6e2k6Ik8iKyArK3Usdzp7fX19KX0sZj1lLmV4cG9ydHM9e0tFWTpyLE5FRUQ6ITEsZmFzdEtleTpmdW5jdGlvbihlLHQpe2lmKCFvKGUpKXJldHVybiJzeW1ib2wiPT10eXBlb2YgZT9lOigic3RyaW5nIj09dHlwZW9mIGU/IlMiOiJQIikrZTtpZighaShlLHIpKXtpZighYyhlKSlyZXR1cm4iRiI7aWYoIXQpcmV0dXJuIkUiO3MoZSl9cmV0dXJuIGVbcl0uaX0sZ2V0V2VhazpmdW5jdGlvbihlLHQpe2lmKCFpKGUscikpe2lmKCFjKGUpKXJldHVybiEwO2lmKCF0KXJldHVybiExO3MoZSl9cmV0dXJuIGVbcl0ud30sb25GcmVlemU6ZnVuY3Rpb24oZSl7cmV0dXJuIGwmJmYuTkVFRCYmYyhlKSYmIWkoZSxyKSYmcyhlKSxlfX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKG51bGw9PWUpdGhyb3cgVHlwZUVycm9yKCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAgIitlKTtyZXR1cm4gZX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDUzKSxvPW4oMzcpLGk9bigyNSksYT1uKDM0KSx1PW4oMjIpLGM9big4MiksbD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO3QuZj1uKDE1KT9sOmZ1bmN0aW9uKGUsdCl7aWYoZT1pKGUpLHQ9YSh0LCEwKSxjKXRyeXtyZXR1cm4gbChlLHQpfWNhdGNoKGUpe31pZih1KGUsdCkpcmV0dXJuIG8oIXIuZi5jYWxsKGUsdCksZVt0XSl9fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9big1KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZighcihlKSlyZXR1cm4gZTt2YXIgbixvO2lmKHQmJiJmdW5jdGlvbiI9PXR5cGVvZihuPWUudG9TdHJpbmcpJiYhcihvPW4uY2FsbChlKSkpcmV0dXJuIG87aWYoImZ1bmN0aW9uIj09dHlwZW9mKG49ZS52YWx1ZU9mKSYmIXIobz1uLmNhbGwoZSkpKXJldHVybiBvO2lmKCF0JiYiZnVuY3Rpb24iPT10eXBlb2Yobj1lLnRvU3RyaW5nKSYmIXIobz1uLmNhbGwoZSkpKXJldHVybiBvO3Rocm93IFR5cGVFcnJvcigiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlIil9fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBUeXBlRXJyb3IoZSsiIGlzIG5vdCBhIGZ1bmN0aW9uISIpO3JldHVybiBlfX0sZnVuY3Rpb24oZSx0KXt2YXIgbj17fS50b1N0cmluZztlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIG4uY2FsbChlKS5zbGljZSg4LC0xKX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJue2VudW1lcmFibGU6ISgxJmUpLGNvbmZpZ3VyYWJsZTohKDImZSksd3JpdGFibGU6ISg0JmUpLHZhbHVlOnR9fX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMzUpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7aWYocihlKSx2b2lkIDA9PT10KXJldHVybiBlO3N3aXRjaChuKXtjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBlLmNhbGwodCxuKX07Y2FzZSAyOnJldHVybiBmdW5jdGlvbihuLHIpe3JldHVybiBlLmNhbGwodCxuLHIpfTtjYXNlIDM6cmV0dXJuIGZ1bmN0aW9uKG4scixvKXtyZXR1cm4gZS5jYWxsKHQsbixyLG8pfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZS5hcHBseSh0LGFyZ3VtZW50cyl9fX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oODUpLG89big2Myk7ZS5leHBvcnRzPU9iamVjdC5rZXlzfHxmdW5jdGlvbihlKXtyZXR1cm4gcihlLG8pfX0sZnVuY3Rpb24oZSx0KXt2YXIgbj1NYXRoLmNlaWwscj1NYXRoLmZsb29yO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gaXNOYU4oZT0rZSk/MDooZT4wP3I6bikoZSl9fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigzKSxvPW4oODcpLGk9big2MyksYT1uKDYyKSgiSUVfUFJPVE8iKSx1PWZ1bmN0aW9uKCl7fSxjPWZ1bmN0aW9uKCl7dmFyIGUsdD1uKDgzKSgiaWZyYW1lIikscj1pLmxlbmd0aDtmb3IodC5zdHlsZS5kaXNwbGF5PSJub25lIixuKDg4KS5hcHBlbmRDaGlsZCh0KSx0LnNyYz0iamF2YXNjcmlwdDoiLChlPXQuY29udGVudFdpbmRvdy5kb2N1bWVudCkub3BlbigpLGUud3JpdGUoIjxzY3JpcHQ+ZG9jdW1lbnQuRj1PYmplY3Q8XC9zY3JpcHQ+IiksZS5jbG9zZSgpLGM9ZS5GO3ItLTspZGVsZXRlIGMucHJvdG90eXBlW2lbcl1dO3JldHVybiBjKCl9O2UuZXhwb3J0cz1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbihlLHQpe3ZhciBuO3JldHVybiBudWxsIT09ZT8odS5wcm90b3R5cGU9cihlKSxuPW5ldyB1LHUucHJvdG90eXBlPW51bGwsblthXT1lKTpuPWMoKSx2b2lkIDA9PT10P246byhuLHQpfX0sZnVuY3Rpb24oZSx0KXt2YXIgbj0wLHI9TWF0aC5yYW5kb20oKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIlN5bWJvbCgiLmNvbmNhdCh2b2lkIDA9PT1lPyIiOmUsIilfIiwoKytuK3IpLnRvU3RyaW5nKDM2KSl9fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigzNik7ZS5leHBvcnRzPU9iamVjdCgieiIpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApP09iamVjdDpmdW5jdGlvbihlKXtyZXR1cm4iU3RyaW5nIj09cihlKT9lLnNwbGl0KCIiKTpPYmplY3QoZSl9fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9big0MCksbz1NYXRoLm1heCxpPU1hdGgubWluO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybihlPXIoZSkpPDA/byhlK3QsMCk6aShlLHQpfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oODUpLG89big2MykuY29uY2F0KCJsZW5ndGgiLCJwcm90b3R5cGUiKTt0LmY9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXN8fGZ1bmN0aW9uKGUpe3JldHVybiByKGUsbyl9fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz17fX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oOSkoInVuc2NvcGFibGVzIiksbz1BcnJheS5wcm90b3R5cGU7bnVsbD09b1tyXSYmbigyNykobyxyLHt9KSxlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7b1tyXVtlXT0hMH19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDUpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKCFyKGUpfHxlLl90IT09dCl0aHJvdyBUeXBlRXJyb3IoIkluY29tcGF0aWJsZSByZWNlaXZlciwgIit0KyIgcmVxdWlyZWQhIik7cmV0dXJuIGV9fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9big4KSxvPW4oMTEpLGk9b1siX19jb3JlLWpzX3NoYXJlZF9fIl18fChvWyJfX2NvcmUtanNfc2hhcmVkX18iXT17fSk7KGUuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiBpW2VdfHwoaVtlXT12b2lkIDAhPT10P3Q6e30pfSkoInZlcnNpb25zIixbXSkucHVzaCh7dmVyc2lvbjpyLnZlcnNpb24sbW9kZTpuKDUwKT8icHVyZSI6Imdsb2JhbCIsY29weXJpZ2h0OiI/IDIwMTggRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSkifSl9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPSExfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigxMykuZixvPW4oMjIpLGk9big5KSgidG9TdHJpbmdUYWciKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4pe2UmJiFvKGU9bj9lOmUucHJvdG90eXBlLGkpJiZyKGUsaSx7Y29uZmlndXJhYmxlOiEwLHZhbHVlOnR9KX19LGZ1bmN0aW9uKGUsdCl7dC5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHN9LGZ1bmN0aW9uKGUsdCl7dC5mPXt9LnByb3BlcnR5SXNFbnVtZXJhYmxlfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oOTApLG89e307b1tuKDkpKCJ0b1N0cmluZ1RhZyIpXT0ieiIsbysiIiE9IltvYmplY3Qgel0iJiZuKDE4KShPYmplY3QucHJvdG90eXBlLCJ0b1N0cmluZyIsZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCAiK3IodGhpcykrIl0ifSwhMCl9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDEpLG89bigzMiksaT1uKDQpLGE9big2NiksdT0iWyIrYSsiXSIsYz1SZWdFeHAoIl4iK3UrdSsiKiIpLGw9UmVnRXhwKHUrdSsiKiQiKSxzPWZ1bmN0aW9uKGUsdCxuKXt2YXIgbz17fSx1PWkoZnVuY3Rpb24oKXtyZXR1cm4hIWFbZV0oKXx8Ij8/IiE9Ij8/IltlXSgpfSksYz1vW2VdPXU/dChmKTphW2VdO24mJihvW25dPWMpLHIoci5QK3IuRip1LCJTdHJpbmciLG8pfSxmPXMudHJpbT1mdW5jdGlvbihlLHQpe3JldHVybiBlPVN0cmluZyhvKGUpKSwxJnQmJihlPWUucmVwbGFjZShjLCIiKSksMiZ0JiYoZT1lLnJlcGxhY2UobCwiIikpLGV9O2UuZXhwb3J0cz1zfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oOTkpKCEwKTtuKDcwKShTdHJpbmcsIlN0cmluZyIsZnVuY3Rpb24oZSl7dGhpcy5fdD1TdHJpbmcoZSksdGhpcy5faT0wfSxmdW5jdGlvbigpe3ZhciBlLHQ9dGhpcy5fdCxuPXRoaXMuX2k7cmV0dXJuIG4+PXQubGVuZ3RoP3t2YWx1ZTp2b2lkIDAsZG9uZTohMH06KGU9cih0LG4pLHRoaXMuX2krPWUubGVuZ3RoLHt2YWx1ZTplLGRvbmU6ITF9KX0pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMjcpLG89bigxOCksaT1uKDQpLGE9bigzMiksdT1uKDkpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7dmFyIGM9dShlKSxsPW4oYSxjLCIiW2VdKSxzPWxbMF0sZj1sWzFdO2koZnVuY3Rpb24oKXt2YXIgdD17fTtyZXR1cm4gdFtjXT1mdW5jdGlvbigpe3JldHVybiA3fSw3IT0iIltlXSh0KX0pJiYobyhTdHJpbmcucHJvdG90eXBlLGUscykscihSZWdFeHAucHJvdG90eXBlLGMsMj09dD9mdW5jdGlvbihlLHQpe3JldHVybiBmLmNhbGwoZSx0aGlzLHQpfTpmdW5jdGlvbihlKXtyZXR1cm4gZi5jYWxsKGUsdGhpcyl9KSl9fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigzOCksbz1uKDEwNSksaT1uKDEwNiksYT1uKDMpLHU9bigyMCksYz1uKDEwOCksbD17fSxzPXt9Oyh0PWUuZXhwb3J0cz1mdW5jdGlvbihlLHQsbixmLHApe3ZhciBkLGgseSxfLHY9cD9mdW5jdGlvbigpe3JldHVybiBlfTpjKGUpLG09cihuLGYsdD8yOjEpLGc9MDtpZigiZnVuY3Rpb24iIT10eXBlb2Ygdil0aHJvdyBUeXBlRXJyb3IoZSsiIGlzIG5vdCBpdGVyYWJsZSEiKTtpZihpKHYpKXtmb3IoZD11KGUubGVuZ3RoKTtkPmc7ZysrKWlmKChfPXQ/bShhKGg9ZVtnXSlbMF0saFsxXSk6bShlW2ddKSk9PT1sfHxfPT09cylyZXR1cm4gX31lbHNlIGZvcih5PXYuY2FsbChlKTshKGg9eS5uZXh0KCkpLmRvbmU7KWlmKChfPW8oeSxtLGgudmFsdWUsdCkpPT09bHx8Xz09PXMpcmV0dXJuIF99KS5CUkVBSz1sLHQuUkVUVVJOPXN9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0scj10LkxPQ0FUSU9OX0NIQU5HRT0iQEByb3V0ZXIvTE9DQVRJT05fQ0hBTkdFIixvPSh0Lm9uTG9jYXRpb25DaGFuZ2VkPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3R5cGU6ZygiTE9DQVRJT05fQ0hBTkdFIikscGF5bG9hZDp7bG9jYXRpb246ZSxhY3Rpb246dH19fSx0LkNBTExfSElTVE9SWV9NRVRIT0Q9IkBAcm91dGVyL0NBTExfSElTVE9SWV9NRVRIT0QiKSxpPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLG49QXJyYXkodCkscj0wO3I8dDtyKyspbltyXT1hcmd1bWVudHNbcl07cmV0dXJue3R5cGU6ZygiQ0FMTF9ISVNUT1JZX01FVEhPRCIpLHBheWxvYWQ6e21ldGhvZDplLGFyZ3M6bn19fX0sYT10LnB1c2g9ZygidXBkYXRlTG9jYXRpb24iKSgicHVzaCIpLHU9dC5yZXBsYWNlPWcoInVwZGF0ZUxvY2F0aW9uIikoInJlcGxhY2UiKSxjPXQuZ289ZygidXBkYXRlTG9jYXRpb24iKSgiZ28iKSxsPXQuZ29CYWNrPWcoInVwZGF0ZUxvY2F0aW9uIikoImdvQmFjayIpLHM9dC5nb0ZvcndhcmQ9ZygidXBkYXRlTG9jYXRpb24iKSgiZ29Gb3J3YXJkIik7dC5yb3V0ZXJBY3Rpb25zPXtwdXNoOmcoInB1c2giKSxyZXBsYWNlOmcoInJlcGxhY2UiKSxnbzpnKCJnbyIpLGdvQmFjazpnKCJnb0JhY2siKSxnb0ZvcndhcmQ6ZygiZ29Gb3J3YXJkIil9O2Z1bmN0aW9uIGYoKXt0cnl7aWYoZSlyZXR1cm4gZX1jYXRjaChlKXt0cnl7aWYod2luZG93KXJldHVybiB3aW5kb3d9Y2F0Y2goZSl7cmV0dXJuIHRoaXN9fX12YXIgcCxkPW51bGw7ZnVuY3Rpb24gaCgpe2lmKG51bGw9PT1kKXt2YXIgZT1mKCk7ZS5fXyQkR0xPQkFMX1JFV0lSRV9ORVhUX01PRFVMRV9JRF9ffHwoZS5fXyQkR0xPQkFMX1JFV0lSRV9ORVhUX01PRFVMRV9JRF9fPTApLGQ9X18kJEdMT0JBTF9SRVdJUkVfTkVYVF9NT0RVTEVfSURfXysrfXJldHVybiBkfWZ1bmN0aW9uIHkoKXt2YXIgZT1mKCk7cmV0dXJuIGUuX18kJEdMT0JBTF9SRVdJUkVfUkVHSVNUUllfX3x8KGUuX18kJEdMT0JBTF9SRVdJUkVfUkVHSVNUUllfXz1PYmplY3QuY3JlYXRlKG51bGwpKSxfXyQkR0xPQkFMX1JFV0lSRV9SRUdJU1RSWV9ffWZ1bmN0aW9uIF8oKXt2YXIgZT1oKCksdD15KCksbj10W2VdO3JldHVybiBufHwodFtlXT1PYmplY3QuY3JlYXRlKG51bGwpLG49dFtlXSksbn0ocD1mKCkpLl9fcmV3aXJlX3Jlc2V0X2FsbF9ffHwocC5fX3Jld2lyZV9yZXNldF9hbGxfXz1mdW5jdGlvbigpe3AuX18kJEdMT0JBTF9SRVdJUkVfUkVHSVNUUllfXz1PYmplY3QuY3JlYXRlKG51bGwpfSk7dmFyIHY9Il9fSU5URU5USU9OQUxfVU5ERUZJTkVEX18iLG09e307ZnVuY3Rpb24gZyhlKXt2YXIgdD1fKCk7aWYodm9pZCAwPT09dFtlXSlyZXR1cm4gZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UiTE9DQVRJT05fQ0hBTkdFIjpyZXR1cm4gcjtjYXNlIkNBTExfSElTVE9SWV9NRVRIT0QiOnJldHVybiBvO2Nhc2UidXBkYXRlTG9jYXRpb24iOnJldHVybiBpO2Nhc2UicHVzaCI6cmV0dXJuIGE7Y2FzZSJyZXBsYWNlIjpyZXR1cm4gdTtjYXNlImdvIjpyZXR1cm4gYztjYXNlImdvQmFjayI6cmV0dXJuIGw7Y2FzZSJnb0ZvcndhcmQiOnJldHVybiBzfXJldHVybn0oZSk7dmFyIG49dFtlXTtyZXR1cm4gbj09PXY/dm9pZCAwOm59ZnVuY3Rpb24gYihlLHQpe3ZhciByPV8oKTtpZigib2JqZWN0IiE9PSh2b2lkIDA9PT1lPyJ1bmRlZmluZWQiOm4oZSkpKXJldHVybiByW2VdPXZvaWQgMD09PXQ/djp0LGZ1bmN0aW9uKCl7dyhlKX07T2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXtyW3RdPWVbdF19KX1mdW5jdGlvbiB3KGUpe3ZhciB0PV8oKTtkZWxldGUgdFtlXSwwPT1PYmplY3Qua2V5cyh0KS5sZW5ndGgmJmRlbGV0ZSB5KClbaF19ZnVuY3Rpb24gRShlKXt2YXIgdD1fKCksbj1PYmplY3Qua2V5cyhlKSxyPXt9O2Z1bmN0aW9uIG8oKXtuLmZvckVhY2goZnVuY3Rpb24oZSl7dFtlXT1yW2VdfSl9cmV0dXJuIGZ1bmN0aW9uKGkpe24uZm9yRWFjaChmdW5jdGlvbihuKXtyW25dPXRbbl0sdFtuXT1lW25dfSk7dmFyIGE9aSgpO3JldHVybiBhJiYiZnVuY3Rpb24iPT10eXBlb2YgYS50aGVuP2EudGhlbihvKS5jYXRjaChvKTpvKCksYX19IWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShtLGUse3ZhbHVlOnQsZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KX1lKCJfX2dldF9fIixnKSxlKCJfX0dldERlcGVuZGVuY3lfXyIsZyksZSgiX19SZXdpcmVfXyIsYiksZSgiX19zZXRfXyIsYiksZSgiX19yZXNldF9fIix3KSxlKCJfX1Jlc2V0RGVwZW5kZW5jeV9fIix3KSxlKCJfX3dpdGhfXyIsRSl9KCksdC5fX2dldF9fPWcsdC5fX0dldERlcGVuZGVuY3lfXz1nLHQuX19SZXdpcmVfXz1iLHQuX19zZXRfXz1iLHQuX19SZXNldERlcGVuZGVuY3lfXz13LHQuX19SZXdpcmVBUElfXz1tLHQuZGVmYXVsdD1tfSkuY2FsbCh0aGlzLG4oMjEpKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuX19SZXdpcmVBUElfXz10Ll9fUmVzZXREZXBlbmRlbmN5X189dC5fX3NldF9fPXQuX19SZXdpcmVfXz10Ll9fR2V0RGVwZW5kZW5jeV9fPXQuX19nZXRfXz10LmNyZWF0ZU1hdGNoU2VsZWN0b3I9dC5nZXRBY3Rpb249dC5nZXRMb2NhdGlvbj10LnJvdXRlck1pZGRsZXdhcmU9dC5jb25uZWN0Um91dGVyPXQuQ29ubmVjdGVkUm91dGVyPXQucm91dGVyQWN0aW9ucz10LmdvRm9yd2FyZD10LmdvQmFjaz10LmdvPXQucmVwbGFjZT10LnB1c2g9dC5DQUxMX0hJU1RPUllfTUVUSE9EPXQuTE9DQVRJT05fQ0hBTkdFPXZvaWQgMDt2YXIgcj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbz1hKG4oMjg4KSksaT1hKG4oMjk0KSk7ZnVuY3Rpb24gYShlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dmFyIHU9aygiY3JlYXRlQWxsIikoaygicGxhaW5TdHJ1Y3R1cmUiKSksYz11LkxPQ0FUSU9OX0NIQU5HRSxsPXUuQ0FMTF9ISVNUT1JZX01FVEhPRCxzPXUucHVzaCxmPXUucmVwbGFjZSxwPXUuZ28sZD11LmdvQmFjayxoPXUuZ29Gb3J3YXJkLHk9dS5yb3V0ZXJBY3Rpb25zLF89dS5Db25uZWN0ZWRSb3V0ZXIsdj11LmNvbm5lY3RSb3V0ZXIsbT11LnJvdXRlck1pZGRsZXdhcmUsZz11LmdldExvY2F0aW9uLGI9dS5nZXRBY3Rpb24sdz11LmNyZWF0ZU1hdGNoU2VsZWN0b3I7ZnVuY3Rpb24gRSgpe3RyeXtpZihlKXJldHVybiBlfWNhdGNoKGUpe3RyeXtpZih3aW5kb3cpcmV0dXJuIHdpbmRvd31jYXRjaChlKXtyZXR1cm4gdGhpc319fXQuTE9DQVRJT05fQ0hBTkdFPWMsdC5DQUxMX0hJU1RPUllfTUVUSE9EPWwsdC5wdXNoPXMsdC5yZXBsYWNlPWYsdC5nbz1wLHQuZ29CYWNrPWQsdC5nb0ZvcndhcmQ9aCx0LnJvdXRlckFjdGlvbnM9eSx0LkNvbm5lY3RlZFJvdXRlcj1fLHQuY29ubmVjdFJvdXRlcj12LHQucm91dGVyTWlkZGxld2FyZT1tLHQuZ2V0TG9jYXRpb249Zyx0LmdldEFjdGlvbj1iLHQuY3JlYXRlTWF0Y2hTZWxlY3Rvcj13O3ZhciBULE89bnVsbDtmdW5jdGlvbiBTKCl7aWYobnVsbD09PU8pe3ZhciBlPUUoKTtlLl9fJCRHTE9CQUxfUkVXSVJFX05FWFRfTU9EVUxFX0lEX198fChlLl9fJCRHTE9CQUxfUkVXSVJFX05FWFRfTU9EVUxFX0lEX189MCksTz1fXyQkR0xPQkFMX1JFV0lSRV9ORVhUX01PRFVMRV9JRF9fKyt9cmV0dXJuIE99ZnVuY3Rpb24geCgpe3ZhciBlPUUoKTtyZXR1cm4gZS5fXyQkR0xPQkFMX1JFV0lSRV9SRUdJU1RSWV9ffHwoZS5fXyQkR0xPQkFMX1JFV0lSRV9SRUdJU1RSWV9fPU9iamVjdC5jcmVhdGUobnVsbCkpLF9fJCRHTE9CQUxfUkVXSVJFX1JFR0lTVFJZX199ZnVuY3Rpb24gUCgpe3ZhciBlPVMoKSx0PXgoKSxuPXRbZV07cmV0dXJuIG58fCh0W2VdPU9iamVjdC5jcmVhdGUobnVsbCksbj10W2VdKSxufShUPUUoKSkuX19yZXdpcmVfcmVzZXRfYWxsX198fChULl9fcmV3aXJlX3Jlc2V0X2FsbF9fPWZ1bmN0aW9uKCl7VC5fXyQkR0xPQkFMX1JFV0lSRV9SRUdJU1RSWV9fPU9iamVjdC5jcmVhdGUobnVsbCl9KTt2YXIgUj0iX19JTlRFTlRJT05BTF9VTkRFRklORURfXyIsQz17fTtmdW5jdGlvbiBrKGUpe3ZhciB0PVAoKTtpZih2b2lkIDA9PT10W2VdKXJldHVybiBmdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSJjcmVhdGVBbGwiOnJldHVybiBvLmRlZmF1bHQ7Y2FzZSJwbGFpblN0cnVjdHVyZSI6cmV0dXJuIGkuZGVmYXVsdH1yZXR1cm59KGUpO3ZhciBuPXRbZV07cmV0dXJuIG49PT1SP3ZvaWQgMDpufWZ1bmN0aW9uIE4oZSx0KXt2YXIgbj1QKCk7aWYoIm9iamVjdCIhPT0odm9pZCAwPT09ZT8idW5kZWZpbmVkIjpyKGUpKSlyZXR1cm4gbltlXT12b2lkIDA9PT10P1I6dCxmdW5jdGlvbigpe0EoZSl9O09iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24odCl7blt0XT1lW3RdfSl9ZnVuY3Rpb24gQShlKXt2YXIgdD1QKCk7ZGVsZXRlIHRbZV0sMD09T2JqZWN0LmtleXModCkubGVuZ3RoJiZkZWxldGUgeCgpW1NdfWZ1bmN0aW9uIEkoZSl7dmFyIHQ9UCgpLG49T2JqZWN0LmtleXMoZSkscj17fTtmdW5jdGlvbiBvKCl7bi5mb3JFYWNoKGZ1bmN0aW9uKGUpe3RbZV09cltlXX0pfXJldHVybiBmdW5jdGlvbihpKXtuLmZvckVhY2goZnVuY3Rpb24obil7cltuXT10W25dLHRbbl09ZVtuXX0pO3ZhciBhPWkoKTtyZXR1cm4gYSYmImZ1bmN0aW9uIj09dHlwZW9mIGEudGhlbj9hLnRoZW4obykuY2F0Y2gobyk6bygpLGF9fSFmdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoQyxlLHt2YWx1ZTp0LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSl9ZSgiX19nZXRfXyIsayksZSgiX19HZXREZXBlbmRlbmN5X18iLGspLGUoIl9fUmV3aXJlX18iLE4pLGUoIl9fc2V0X18iLE4pLGUoIl9fcmVzZXRfXyIsQSksZSgiX19SZXNldERlcGVuZGVuY3lfXyIsQSksZSgiX193aXRoX18iLEkpfSgpLHQuX19nZXRfXz1rLHQuX19HZXREZXBlbmRlbmN5X189ayx0Ll9fUmV3aXJlX189Tix0Ll9fc2V0X189Tix0Ll9fUmVzZXREZXBlbmRlbmN5X189QSx0Ll9fUmV3aXJlQVBJX189Qyx0LmRlZmF1bHQ9Q30pLmNhbGwodGhpcyxuKDIxKSl9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDI5MCk7ZS5leHBvcnRzPWQsZS5leHBvcnRzLnBhcnNlPWksZS5leHBvcnRzLmNvbXBpbGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdShpKGUsdCkpfSxlLmV4cG9ydHMudG9rZW5zVG9GdW5jdGlvbj11LGUuZXhwb3J0cy50b2tlbnNUb1JlZ0V4cD1wO3ZhciBvPW5ldyBSZWdFeHAoWyIoXFxcXC4pIiwiKFtcXC8uXSk/KD86KD86XFw6KFxcdyspKD86XFwoKCg/OlxcXFwufFteXFxcXCgpXSkrKVxcKSk/fFxcKCgoPzpcXFxcLnxbXlxcXFwoKV0pKylcXCkpKFsrKj9dKT98KFxcKikpIl0uam9pbigifCIpLCJnIik7ZnVuY3Rpb24gaShlLHQpe2Zvcih2YXIgbixyPVtdLGk9MCxhPTAsdT0iIixzPXQmJnQuZGVsaW1pdGVyfHwiLyI7bnVsbCE9KG49by5leGVjKGUpKTspe3ZhciBmPW5bMF0scD1uWzFdLGQ9bi5pbmRleDtpZih1Kz1lLnNsaWNlKGEsZCksYT1kK2YubGVuZ3RoLHApdSs9cFsxXTtlbHNle3ZhciBoPWVbYV0seT1uWzJdLF89blszXSx2PW5bNF0sbT1uWzVdLGc9bls2XSxiPW5bN107dSYmKHIucHVzaCh1KSx1PSIiKTt2YXIgdz1udWxsIT15JiZudWxsIT1oJiZoIT09eSxFPSIrIj09PWd8fCIqIj09PWcsVD0iPyI9PT1nfHwiKiI9PT1nLE89blsyXXx8cyxTPXZ8fG07ci5wdXNoKHtuYW1lOl98fGkrKyxwcmVmaXg6eXx8IiIsZGVsaW1pdGVyOk8sb3B0aW9uYWw6VCxyZXBlYXQ6RSxwYXJ0aWFsOncsYXN0ZXJpc2s6ISFiLHBhdHRlcm46Uz9sKFMpOmI/Ii4qIjoiW14iK2MoTykrIl0rPyJ9KX19cmV0dXJuIGE8ZS5sZW5ndGgmJih1Kz1lLnN1YnN0cihhKSksdSYmci5wdXNoKHUpLHJ9ZnVuY3Rpb24gYShlKXtyZXR1cm4gZW5jb2RlVVJJKGUpLnJlcGxhY2UoL1tcLz8jXS9nLGZ1bmN0aW9uKGUpe3JldHVybiIlIitlLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9KX1mdW5jdGlvbiB1KGUpe2Zvcih2YXIgdD1uZXcgQXJyYXkoZS5sZW5ndGgpLG49MDtuPGUubGVuZ3RoO24rKykib2JqZWN0Ij09dHlwZW9mIGVbbl0mJih0W25dPW5ldyBSZWdFeHAoIl4oPzoiK2Vbbl0ucGF0dGVybisiKSQiKSk7cmV0dXJuIGZ1bmN0aW9uKG4sbyl7Zm9yKHZhciBpPSIiLHU9bnx8e30sYz0ob3x8e30pLnByZXR0eT9hOmVuY29kZVVSSUNvbXBvbmVudCxsPTA7bDxlLmxlbmd0aDtsKyspe3ZhciBzPWVbbF07aWYoInN0cmluZyIhPXR5cGVvZiBzKXt2YXIgZixwPXVbcy5uYW1lXTtpZihudWxsPT1wKXtpZihzLm9wdGlvbmFsKXtzLnBhcnRpYWwmJihpKz1zLnByZWZpeCk7Y29udGludWV9dGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgIicrcy5uYW1lKyciIHRvIGJlIGRlZmluZWQnKX1pZihyKHApKXtpZighcy5yZXBlYXQpdGhyb3cgbmV3IFR5cGVFcnJvcignRXhwZWN0ZWQgIicrcy5uYW1lKyciIHRvIG5vdCByZXBlYXQsIGJ1dCByZWNlaXZlZCBgJytKU09OLnN0cmluZ2lmeShwKSsiYCIpO2lmKDA9PT1wLmxlbmd0aCl7aWYocy5vcHRpb25hbCljb250aW51ZTt0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCAiJytzLm5hbWUrJyIgdG8gbm90IGJlIGVtcHR5Jyl9Zm9yKHZhciBkPTA7ZDxwLmxlbmd0aDtkKyspe2lmKGY9YyhwW2RdKSwhdFtsXS50ZXN0KGYpKXRocm93IG5ldyBUeXBlRXJyb3IoJ0V4cGVjdGVkIGFsbCAiJytzLm5hbWUrJyIgdG8gbWF0Y2ggIicrcy5wYXR0ZXJuKyciLCBidXQgcmVjZWl2ZWQgYCcrSlNPTi5zdHJpbmdpZnkoZikrImAiKTtpKz0oMD09PWQ/cy5wcmVmaXg6cy5kZWxpbWl0ZXIpK2Z9fWVsc2V7aWYoZj1zLmFzdGVyaXNrP2VuY29kZVVSSShwKS5yZXBsYWNlKC9bPyNdL2csZnVuY3Rpb24oZSl7cmV0dXJuIiUiK2UuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKX0pOmMocCksIXRbbF0udGVzdChmKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCAiJytzLm5hbWUrJyIgdG8gbWF0Y2ggIicrcy5wYXR0ZXJuKyciLCBidXQgcmVjZWl2ZWQgIicrZisnIicpO2krPXMucHJlZml4K2Z9fWVsc2UgaSs9c31yZXR1cm4gaX19ZnVuY3Rpb24gYyhlKXtyZXR1cm4gZS5yZXBsYWNlKC8oWy4rKj89XiE6JHt9KClbXF18XC9cXF0pL2csIlxcJDEiKX1mdW5jdGlvbiBsKGUpe3JldHVybiBlLnJlcGxhY2UoLyhbPSE6JFwvKCldKS9nLCJcXCQxIil9ZnVuY3Rpb24gcyhlLHQpe3JldHVybiBlLmtleXM9dCxlfWZ1bmN0aW9uIGYoZSl7cmV0dXJuIGUuc2Vuc2l0aXZlPyIiOiJpIn1mdW5jdGlvbiBwKGUsdCxuKXtyKHQpfHwobj10fHxuLHQ9W10pO2Zvcih2YXIgbz0obj1ufHx7fSkuc3RyaWN0LGk9ITEhPT1uLmVuZCxhPSIiLHU9MDt1PGUubGVuZ3RoO3UrKyl7dmFyIGw9ZVt1XTtpZigic3RyaW5nIj09dHlwZW9mIGwpYSs9YyhsKTtlbHNle3ZhciBwPWMobC5wcmVmaXgpLGQ9Iig/OiIrbC5wYXR0ZXJuKyIpIjt0LnB1c2gobCksbC5yZXBlYXQmJihkKz0iKD86IitwK2QrIikqIiksYSs9ZD1sLm9wdGlvbmFsP2wucGFydGlhbD9wKyIoIitkKyIpPyI6Iig/OiIrcCsiKCIrZCsiKSk/IjpwKyIoIitkKyIpIn19dmFyIGg9YyhuLmRlbGltaXRlcnx8Ii8iKSx5PWEuc2xpY2UoLWgubGVuZ3RoKT09PWg7cmV0dXJuIG98fChhPSh5P2Euc2xpY2UoMCwtaC5sZW5ndGgpOmEpKyIoPzoiK2grIig/PSQpKT8iKSxhKz1pPyIkIjpvJiZ5PyIiOiIoPz0iK2grInwkKSIscyhuZXcgUmVnRXhwKCJeIithLGYobikpLHQpfWZ1bmN0aW9uIGQoZSx0LG4pe3JldHVybiByKHQpfHwobj10fHxuLHQ9W10pLG49bnx8e30sZSBpbnN0YW5jZW9mIFJlZ0V4cD9mdW5jdGlvbihlLHQpe3ZhciBuPWUuc291cmNlLm1hdGNoKC9cKCg/IVw/KS9nKTtpZihuKWZvcih2YXIgcj0wO3I8bi5sZW5ndGg7cisrKXQucHVzaCh7bmFtZTpyLHByZWZpeDpudWxsLGRlbGltaXRlcjpudWxsLG9wdGlvbmFsOiExLHJlcGVhdDohMSxwYXJ0aWFsOiExLGFzdGVyaXNrOiExLHBhdHRlcm46bnVsbH0pO3JldHVybiBzKGUsdCl9KGUsdCk6cihlKT9mdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPVtdLG89MDtvPGUubGVuZ3RoO28rKylyLnB1c2goZChlW29dLHQsbikuc291cmNlKTtyZXR1cm4gcyhuZXcgUmVnRXhwKCIoPzoiK3Iuam9pbigifCIpKyIpIixmKG4pKSx0KX0oZSx0LG4pOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gcChpKGUsbiksdCxuKX0oZSx0LG4pfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oNDkpKCJrZXlzIiksbz1uKDQyKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHJbZV18fChyW2VdPW8oZSkpfX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ImNvbnN0cnVjdG9yLGhhc093blByb3BlcnR5LGlzUHJvdG90eXBlT2YscHJvcGVydHlJc0VudW1lcmFibGUsdG9Mb2NhbGVTdHJpbmcsdG9TdHJpbmcsdmFsdWVPZiIuc3BsaXQoIiwiKX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMzYpO2UuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihlKXtyZXR1cm4iQXJyYXkiPT1yKGUpfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oNSksbz1uKDMpLGk9ZnVuY3Rpb24oZSx0KXtpZihvKGUpLCFyKHQpJiZudWxsIT09dCl0aHJvdyBUeXBlRXJyb3IodCsiOiBjYW4ndCBzZXQgYXMgcHJvdG90eXBlISIpfTtlLmV4cG9ydHM9e3NldDpPYmplY3Quc2V0UHJvdG90eXBlT2Z8fCgiX19wcm90b19fImlue30/ZnVuY3Rpb24oZSx0LHIpe3RyeXsocj1uKDM4KShGdW5jdGlvbi5jYWxsLG4oMzMpLmYoT2JqZWN0LnByb3RvdHlwZSwiX19wcm90b19fIikuc2V0LDIpKShlLFtdKSx0PSEoZSBpbnN0YW5jZW9mIEFycmF5KX1jYXRjaChlKXt0PSEwfXJldHVybiBmdW5jdGlvbihlLG4pe3JldHVybiBpKGUsbiksdD9lLl9fcHJvdG9fXz1uOnIoZSxuKSxlfX0oe30sITEpOnZvaWQgMCksY2hlY2s6aX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPSJcdFxuXHZcZlxyID8/Pz8/Pz8/Pz8/Pz8/Pz8/XHUyMDI4XHUyMDI5XHVmZWZmIn0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oNSksbz1uKDY1KS5zZXQ7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXt2YXIgaSxhPXQuY29uc3RydWN0b3I7cmV0dXJuIGEhPT1uJiYiZnVuY3Rpb24iPT10eXBlb2YgYSYmKGk9YS5wcm90b3R5cGUpIT09bi5wcm90b3R5cGUmJnIoaSkmJm8mJm8oZSxpKSxlfX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9TWF0aC5zaWdufHxmdW5jdGlvbihlKXtyZXR1cm4gMD09KGU9K2UpfHxlIT1lP2U6ZTwwPy0xOjF9fSxmdW5jdGlvbihlLHQpe3ZhciBuPU1hdGguZXhwbTE7ZS5leHBvcnRzPSFufHxuKDEwKT4yMjAyNS40NjU3OTQ4MDY3MTh8fG4oMTApPDIyMDI1LjQ2NTc5NDgwNjcxOHx8LTJlLTE3IT1uKC0yZS0xNyk/ZnVuY3Rpb24oZSl7cmV0dXJuIDA9PShlPStlKT9lOmU+LTFlLTYmJmU8MWUtNj9lK2UqZS8yOk1hdGguZXhwKGUpLTF9Om59LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9big1MCksbz1uKDEpLGk9bigxOCksYT1uKDI3KSx1PW4oNDYpLGM9bigxMDApLGw9big1MSkscz1uKDI4KSxmPW4oOSkoIml0ZXJhdG9yIikscD0hKFtdLmtleXMmJiJuZXh0ImluW10ua2V5cygpKSxkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9O2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbixoLHksXyx2KXtjKG4sdCxoKTt2YXIgbSxnLGIsdz1mdW5jdGlvbihlKXtpZighcCYmZSBpbiBTKXJldHVybiBTW2VdO3N3aXRjaChlKXtjYXNlImtleXMiOmNhc2UidmFsdWVzIjpyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcyxlKX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMsZSl9fSxFPXQrIiBJdGVyYXRvciIsVD0idmFsdWVzIj09eSxPPSExLFM9ZS5wcm90b3R5cGUseD1TW2ZdfHxTWyJAQGl0ZXJhdG9yIl18fHkmJlNbeV0sUD14fHx3KHkpLFI9eT9UP3coImVudHJpZXMiKTpQOnZvaWQgMCxDPSJBcnJheSI9PXQmJlMuZW50cmllc3x8eDtpZihDJiYoYj1zKEMuY2FsbChuZXcgZSkpKSE9PU9iamVjdC5wcm90b3R5cGUmJmIubmV4dCYmKGwoYixFLCEwKSxyfHwiZnVuY3Rpb24iPT10eXBlb2YgYltmXXx8YShiLGYsZCkpLFQmJngmJiJ2YWx1ZXMiIT09eC5uYW1lJiYoTz0hMCxQPWZ1bmN0aW9uKCl7cmV0dXJuIHguY2FsbCh0aGlzKX0pLHImJiF2fHwhcCYmIU8mJlNbZl18fGEoUyxmLFApLHVbdF09UCx1W0VdPWQseSlpZihtPXt2YWx1ZXM6VD9QOncoInZhbHVlcyIpLGtleXM6Xz9QOncoImtleXMiKSxlbnRyaWVzOlJ9LHYpZm9yKGcgaW4gbSlnIGluIFN8fGkoUyxnLG1bZ10pO2Vsc2UgbyhvLlArby5GKihwfHxPKSx0LG0pO3JldHVybiBtfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oNzIpLG89bigzMik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXtpZihyKHQpKXRocm93IFR5cGVFcnJvcigiU3RyaW5nIyIrbisiIGRvZXNuJ3QgYWNjZXB0IHJlZ2V4ISIpO3JldHVybiBTdHJpbmcobyhlKSl9fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9big1KSxvPW4oMzYpLGk9big5KSgibWF0Y2giKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIHIoZSkmJih2b2lkIDAhPT0odD1lW2ldKT8hIXQ6IlJlZ0V4cCI9PW8oZSkpfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oOSkoIm1hdGNoIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PS8uLzt0cnl7Ii8uLyJbZV0odCl9Y2F0Y2gobil7dHJ5e3JldHVybiB0W3JdPSExLCEiLy4vIltlXSh0KX1jYXRjaChlKXt9fXJldHVybiEwfX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDExKSxvPW4oMTMpLGk9bigxNSksYT1uKDkpKCJzcGVjaWVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PXJbZV07aSYmdCYmIXRbYV0mJm8uZih0LGEse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc319KX19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigzKTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgZT1yKHRoaXMpLHQ9IiI7cmV0dXJuIGUuZ2xvYmFsJiYodCs9ImciKSxlLmlnbm9yZUNhc2UmJih0Kz0iaSIpLGUubXVsdGlsaW5lJiYodCs9Im0iKSxlLnVuaWNvZGUmJih0Kz0idSIpLGUuc3RpY2t5JiYodCs9InkiKSx0fX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMTgpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7Zm9yKHZhciBvIGluIHQpcihlLG8sdFtvXSxuKTtyZXR1cm4gZX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuLHIpe2lmKCEoZSBpbnN0YW5jZW9mIHQpfHx2b2lkIDAhPT1yJiZyIGluIGUpdGhyb3cgVHlwZUVycm9yKG4rIjogaW5jb3JyZWN0IGludm9jYXRpb24hIik7cmV0dXJuIGV9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTEpLG89bigxKSxpPW4oMTgpLGE9big3NiksdT1uKDMxKSxjPW4oNTgpLGw9big3Nykscz1uKDUpLGY9big0KSxwPW4oMTA5KSxkPW4oNTEpLGg9big2Nyk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuLHksXyx2KXt2YXIgbT1yW2VdLGc9bSxiPV8/InNldCI6ImFkZCIsdz1nJiZnLnByb3RvdHlwZSxFPXt9LFQ9ZnVuY3Rpb24oZSl7dmFyIHQ9d1tlXTtpKHcsZSwiZGVsZXRlIj09ZT9mdW5jdGlvbihlKXtyZXR1cm4hKHYmJiFzKGUpKSYmdC5jYWxsKHRoaXMsMD09PWU/MDplKX06ImhhcyI9PWU/ZnVuY3Rpb24oZSl7cmV0dXJuISh2JiYhcyhlKSkmJnQuY2FsbCh0aGlzLDA9PT1lPzA6ZSl9OiJnZXQiPT1lP2Z1bmN0aW9uKGUpe3JldHVybiB2JiYhcyhlKT92b2lkIDA6dC5jYWxsKHRoaXMsMD09PWU/MDplKX06ImFkZCI9PWU/ZnVuY3Rpb24oZSl7cmV0dXJuIHQuY2FsbCh0aGlzLDA9PT1lPzA6ZSksdGhpc306ZnVuY3Rpb24oZSxuKXtyZXR1cm4gdC5jYWxsKHRoaXMsMD09PWU/MDplLG4pLHRoaXN9KX07aWYoImZ1bmN0aW9uIj09dHlwZW9mIGcmJih2fHx3LmZvckVhY2gmJiFmKGZ1bmN0aW9uKCl7KG5ldyBnKS5lbnRyaWVzKCkubmV4dCgpfSkpKXt2YXIgTz1uZXcgZyxTPU9bYl0odj97fTotMCwxKSE9Tyx4PWYoZnVuY3Rpb24oKXtPLmhhcygxKX0pLFA9cChmdW5jdGlvbihlKXtuZXcgZyhlKX0pLFI9IXYmJmYoZnVuY3Rpb24oKXtmb3IodmFyIGU9bmV3IGcsdD01O3QtLTspZVtiXSh0LHQpO3JldHVybiFlLmhhcygtMCl9KTtQfHwoKGc9dChmdW5jdGlvbih0LG4pe2wodCxnLGUpO3ZhciByPWgobmV3IG0sdCxnKTtyZXR1cm4gbnVsbCE9biYmYyhuLF8scltiXSxyKSxyfSkpLnByb3RvdHlwZT13LHcuY29uc3RydWN0b3I9ZyksKHh8fFIpJiYoVCgiZGVsZXRlIiksVCgiaGFzIiksXyYmVCgiZ2V0IikpLChSfHxTKSYmVChiKSx2JiZ3LmNsZWFyJiZkZWxldGUgdy5jbGVhcn1lbHNlIGc9eS5nZXRDb25zdHJ1Y3Rvcih0LGUsXyxiKSxhKGcucHJvdG90eXBlLG4pLHUuTkVFRD0hMDtyZXR1cm4gZChnLGUpLEVbZV09ZyxvKG8uRytvLlcrby5GKihnIT1tKSxFKSx2fHx5LnNldFN0cm9uZyhnLGUsXyksZ319LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPW4oMjg2KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSxyKXt2YXIgbyxpPW4oMTIzKTtvPSJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93P3dpbmRvdzp2b2lkIDAhPT1lP2U6cjt2YXIgYT1PYmplY3QoaS5hKShvKTt0LmE9YX0pLmNhbGwodGhpcyxuKDIxKSxuKDI4NykoZSkpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTEpLG89bigyMiksaT1uKDE1KSxhPW4oMSksdT1uKDE4KSxjPW4oMzEpLktFWSxsPW4oNCkscz1uKDQ5KSxmPW4oNTEpLHA9big0MiksZD1uKDkpLGg9big4NCkseT1uKDEyNiksXz1uKDEyNyksdj1uKDY0KSxtPW4oMyksZz1uKDUpLGI9bigyNSksdz1uKDM0KSxFPW4oMzcpLFQ9big0MSksTz1uKDg5KSxTPW4oMzMpLHg9bigxMyksUD1uKDM5KSxSPVMuZixDPXguZixrPU8uZixOPXIuU3ltYm9sLEE9ci5KU09OLEk9QSYmQS5zdHJpbmdpZnksRD1kKCJfaGlkZGVuIiksaj1kKCJ0b1ByaW1pdGl2ZSIpLEw9e30ucHJvcGVydHlJc0VudW1lcmFibGUsTT1zKCJzeW1ib2wtcmVnaXN0cnkiKSxGPXMoInN5bWJvbHMiKSxVPXMoIm9wLXN5bWJvbHMiKSxXPU9iamVjdC5wcm90b3R5cGUsJD0iZnVuY3Rpb24iPT10eXBlb2YgTixHPXIuUU9iamVjdCxCPSFHfHwhRy5wcm90b3R5cGV8fCFHLnByb3RvdHlwZS5maW5kQ2hpbGQscT1pJiZsKGZ1bmN0aW9uKCl7cmV0dXJuIDchPVQoQyh7fSwiYSIse2dldDpmdW5jdGlvbigpe3JldHVybiBDKHRoaXMsImEiLHt2YWx1ZTo3fSkuYX19KSkuYX0pP2Z1bmN0aW9uKGUsdCxuKXt2YXIgcj1SKFcsdCk7ciYmZGVsZXRlIFdbdF0sQyhlLHQsbiksciYmZSE9PVcmJkMoVyx0LHIpfTpDLHo9ZnVuY3Rpb24oZSl7dmFyIHQ9RltlXT1UKE4ucHJvdG90eXBlKTtyZXR1cm4gdC5faz1lLHR9LEg9JCYmInN5bWJvbCI9PXR5cGVvZiBOLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiJzeW1ib2wiPT10eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBOfSxWPWZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gZT09PVcmJlYoVSx0LG4pLG0oZSksdD13KHQsITApLG0obiksbyhGLHQpPyhuLmVudW1lcmFibGU/KG8oZSxEKSYmZVtEXVt0XSYmKGVbRF1bdF09ITEpLG49VChuLHtlbnVtZXJhYmxlOkUoMCwhMSl9KSk6KG8oZSxEKXx8QyhlLEQsRSgxLHt9KSksZVtEXVt0XT0hMCkscShlLHQsbikpOkMoZSx0LG4pfSxZPWZ1bmN0aW9uKGUsdCl7bShlKTtmb3IodmFyIG4scj1fKHQ9Yih0KSksbz0wLGk9ci5sZW5ndGg7aT5vOylWKGUsbj1yW28rK10sdFtuXSk7cmV0dXJuIGV9LEs9ZnVuY3Rpb24oZSl7dmFyIHQ9TC5jYWxsKHRoaXMsZT13KGUsITApKTtyZXR1cm4hKHRoaXM9PT1XJiZvKEYsZSkmJiFvKFUsZSkpJiYoISh0fHwhbyh0aGlzLGUpfHwhbyhGLGUpfHxvKHRoaXMsRCkmJnRoaXNbRF1bZV0pfHx0KX0sUT1mdW5jdGlvbihlLHQpe2lmKGU9YihlKSx0PXcodCwhMCksZSE9PVd8fCFvKEYsdCl8fG8oVSx0KSl7dmFyIG49UihlLHQpO3JldHVybiFufHwhbyhGLHQpfHxvKGUsRCkmJmVbRF1bdF18fChuLmVudW1lcmFibGU9ITApLG59fSxYPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuPWsoYihlKSkscj1bXSxpPTA7bi5sZW5ndGg+aTspbyhGLHQ9bltpKytdKXx8dD09RHx8dD09Y3x8ci5wdXNoKHQpO3JldHVybiByfSxKPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuPWU9PT1XLHI9ayhuP1U6YihlKSksaT1bXSxhPTA7ci5sZW5ndGg+YTspIW8oRix0PXJbYSsrXSl8fG4mJiFvKFcsdCl8fGkucHVzaChGW3RdKTtyZXR1cm4gaX07JHx8KHUoKE49ZnVuY3Rpb24oKXtpZih0aGlzIGluc3RhbmNlb2YgTil0aHJvdyBUeXBlRXJyb3IoIlN5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvciEiKTt2YXIgZT1wKGFyZ3VtZW50cy5sZW5ndGg+MD9hcmd1bWVudHNbMF06dm9pZCAwKSx0PWZ1bmN0aW9uKG4pe3RoaXM9PT1XJiZ0LmNhbGwoVSxuKSxvKHRoaXMsRCkmJm8odGhpc1tEXSxlKSYmKHRoaXNbRF1bZV09ITEpLHEodGhpcyxlLEUoMSxuKSl9O3JldHVybiBpJiZCJiZxKFcsZSx7Y29uZmlndXJhYmxlOiEwLHNldDp0fSkseihlKX0pLnByb3RvdHlwZSwidG9TdHJpbmciLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2t9KSxTLmY9USx4LmY9VixuKDQ1KS5mPU8uZj1YLG4oNTMpLmY9SyxuKDUyKS5mPUosaSYmIW4oNTApJiZ1KFcsInByb3BlcnR5SXNFbnVtZXJhYmxlIixLLCEwKSxoLmY9ZnVuY3Rpb24oZSl7cmV0dXJuIHooZChlKSl9KSxhKGEuRythLlcrYS5GKiEkLHtTeW1ib2w6Tn0pO2Zvcih2YXIgWj0iaGFzSW5zdGFuY2UsaXNDb25jYXRTcHJlYWRhYmxlLGl0ZXJhdG9yLG1hdGNoLHJlcGxhY2Usc2VhcmNoLHNwZWNpZXMsc3BsaXQsdG9QcmltaXRpdmUsdG9TdHJpbmdUYWcsdW5zY29wYWJsZXMiLnNwbGl0KCIsIiksZWU9MDtaLmxlbmd0aD5lZTspZChaW2VlKytdKTtmb3IodmFyIHRlPVAoZC5zdG9yZSksbmU9MDt0ZS5sZW5ndGg+bmU7KXkodGVbbmUrK10pO2EoYS5TK2EuRiohJCwiU3ltYm9sIix7Zm9yOmZ1bmN0aW9uKGUpe3JldHVybiBvKE0sZSs9IiIpP01bZV06TVtlXT1OKGUpfSxrZXlGb3I6ZnVuY3Rpb24oZSl7aWYoIUgoZSkpdGhyb3cgVHlwZUVycm9yKGUrIiBpcyBub3QgYSBzeW1ib2whIik7Zm9yKHZhciB0IGluIE0paWYoTVt0XT09PWUpcmV0dXJuIHR9LHVzZVNldHRlcjpmdW5jdGlvbigpe0I9ITB9LHVzZVNpbXBsZTpmdW5jdGlvbigpe0I9ITF9fSksYShhLlMrYS5GKiEkLCJPYmplY3QiLHtjcmVhdGU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dD9UKGUpOlkoVChlKSx0KX0sZGVmaW5lUHJvcGVydHk6VixkZWZpbmVQcm9wZXJ0aWVzOlksZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOlEsZ2V0T3duUHJvcGVydHlOYW1lczpYLGdldE93blByb3BlcnR5U3ltYm9sczpKfSksQSYmYShhLlMrYS5GKighJHx8bChmdW5jdGlvbigpe3ZhciBlPU4oKTtyZXR1cm4iW251bGxdIiE9SShbZV0pfHwie30iIT1JKHthOmV9KXx8Int9IiE9SShPYmplY3QoZSkpfSkpLCJKU09OIix7c3RyaW5naWZ5OmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxuLHI9W2VdLG89MTthcmd1bWVudHMubGVuZ3RoPm87KXIucHVzaChhcmd1bWVudHNbbysrXSk7aWYobj10PXJbMV0sKGcodCl8fHZvaWQgMCE9PWUpJiYhSChlKSlyZXR1cm4gdih0KXx8KHQ9ZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iPT10eXBlb2YgbiYmKHQ9bi5jYWxsKHRoaXMsZSx0KSksIUgodCkpcmV0dXJuIHR9KSxyWzFdPXQsSS5hcHBseShBLHIpfX0pLE4ucHJvdG90eXBlW2pdfHxuKDI3KShOLnByb3RvdHlwZSxqLE4ucHJvdG90eXBlLnZhbHVlT2YpLGYoTiwiU3ltYm9sIiksZihNYXRoLCJNYXRoIiwhMCksZihyLkpTT04sIkpTT04iLCEwKX0sZnVuY3Rpb24oZSx0LG4pe2UuZXhwb3J0cz0hbigxNSkmJiFuKDQpKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eShuKDgzKSgiZGl2IiksImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSl9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDUpLG89bigxMSkuZG9jdW1lbnQsaT1yKG8pJiZyKG8uY3JlYXRlRWxlbWVudCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBpP28uY3JlYXRlRWxlbWVudChlKTp7fX19LGZ1bmN0aW9uKGUsdCxuKXt0LmY9big5KX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMjIpLG89bigyNSksaT1uKDg2KSghMSksYT1uKDYyKSgiSUVfUFJPVE8iKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgbix1PW8oZSksYz0wLGw9W107Zm9yKG4gaW4gdSluIT1hJiZyKHUsbikmJmwucHVzaChuKTtmb3IoO3QubGVuZ3RoPmM7KXIodSxuPXRbYysrXSkmJih+aShsLG4pfHxsLnB1c2gobikpO3JldHVybiBsfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMjUpLG89bigyMCksaT1uKDQ0KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQsbixhKXt2YXIgdSxjPXIodCksbD1vKGMubGVuZ3RoKSxzPWkoYSxsKTtpZihlJiZuIT1uKXtmb3IoO2w+czspaWYoKHU9Y1tzKytdKSE9dSlyZXR1cm4hMH1lbHNlIGZvcig7bD5zO3MrKylpZigoZXx8cyBpbiBjKSYmY1tzXT09PW4pcmV0dXJuIGV8fHN8fDA7cmV0dXJuIWUmJi0xfX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDEzKSxvPW4oMyksaT1uKDM5KTtlLmV4cG9ydHM9bigxNSk/T2JqZWN0LmRlZmluZVByb3BlcnRpZXM6ZnVuY3Rpb24oZSx0KXtvKGUpO2Zvcih2YXIgbixhPWkodCksdT1hLmxlbmd0aCxjPTA7dT5jOylyLmYoZSxuPWFbYysrXSx0W25dKTtyZXR1cm4gZX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDExKS5kb2N1bWVudDtlLmV4cG9ydHM9ciYmci5kb2N1bWVudEVsZW1lbnR9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDI1KSxvPW4oNDUpLmYsaT17fS50b1N0cmluZyxhPSJvYmplY3QiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzP09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdyk6W107ZS5leHBvcnRzLmY9ZnVuY3Rpb24oZSl7cmV0dXJuIGEmJiJbb2JqZWN0IFdpbmRvd10iPT1pLmNhbGwoZSk/ZnVuY3Rpb24oZSl7dHJ5e3JldHVybiBvKGUpfWNhdGNoKGUpe3JldHVybiBhLnNsaWNlKCl9fShlKTpvKHIoZSkpfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMzYpLG89big5KSgidG9TdHJpbmdUYWciKSxpPSJBcmd1bWVudHMiPT1yKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0LG4sYTtyZXR1cm4gdm9pZCAwPT09ZT8iVW5kZWZpbmVkIjpudWxsPT09ZT8iTnVsbCI6InN0cmluZyI9PXR5cGVvZihuPWZ1bmN0aW9uKGUsdCl7dHJ5e3JldHVybiBlW3RdfWNhdGNoKGUpe319KHQ9T2JqZWN0KGUpLG8pKT9uOmk/cih0KToiT2JqZWN0Ij09KGE9cih0KSkmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LmNhbGxlZT8iQXJndW1lbnRzIjphfX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDM5KSxvPW4oNTIpLGk9big1MyksYT1uKDIzKSx1PW4oNDMpLGM9T2JqZWN0LmFzc2lnbjtlLmV4cG9ydHM9IWN8fG4oNCkoZnVuY3Rpb24oKXt2YXIgZT17fSx0PXt9LG49U3ltYm9sKCkscj0iYWJjZGVmZ2hpamtsbW5vcHFyc3QiO3JldHVybiBlW25dPTcsci5zcGxpdCgiIikuZm9yRWFjaChmdW5jdGlvbihlKXt0W2VdPWV9KSw3IT1jKHt9LGUpW25dfHxPYmplY3Qua2V5cyhjKHt9LHQpKS5qb2luKCIiKSE9cn0pP2Z1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPWEoZSksYz1hcmd1bWVudHMubGVuZ3RoLGw9MSxzPW8uZixmPWkuZjtjPmw7KWZvcih2YXIgcCxkPXUoYXJndW1lbnRzW2wrK10pLGg9cz9yKGQpLmNvbmNhdChzKGQpKTpyKGQpLHk9aC5sZW5ndGgsXz0wO3k+XzspZi5jYWxsKGQscD1oW18rK10pJiYobltwXT1kW3BdKTtyZXR1cm4gbn06Y30sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDM1KSxvPW4oNSksaT1uKDE0OCksYT1bXS5zbGljZSx1PXt9O2UuZXhwb3J0cz1GdW5jdGlvbi5iaW5kfHxmdW5jdGlvbihlKXt2YXIgdD1yKHRoaXMpLG49YS5jYWxsKGFyZ3VtZW50cywxKSxjPWZ1bmN0aW9uKCl7dmFyIHI9bi5jb25jYXQoYS5jYWxsKGFyZ3VtZW50cykpO3JldHVybiB0aGlzIGluc3RhbmNlb2YgYz9mdW5jdGlvbihlLHQsbil7aWYoISh0IGluIHUpKXtmb3IodmFyIHI9W10sbz0wO288dDtvKyspcltvXT0iYVsiK28rIl0iO3VbdF09RnVuY3Rpb24oIkYsYSIsInJldHVybiBuZXcgRigiK3Iuam9pbigiLCIpKyIpIil9cmV0dXJuIHVbdF0oZSxuKX0odCxyLmxlbmd0aCxyKTppKHQscixlKX07cmV0dXJuIG8odC5wcm90b3R5cGUpJiYoYy5wcm90b3R5cGU9dC5wcm90b3R5cGUpLGN9fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigxMSkucGFyc2VJbnQsbz1uKDU1KS50cmltLGk9big2NiksYT0vXlstK10/MFt4WF0vO2UuZXhwb3J0cz04IT09cihpKyIwOCIpfHwyMiE9PXIoaSsiMHgxNiIpP2Z1bmN0aW9uKGUsdCl7dmFyIG49byhTdHJpbmcoZSksMyk7cmV0dXJuIHIobix0Pj4+MHx8KGEudGVzdChuKT8xNjoxMCkpfTpyfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigxMSkucGFyc2VGbG9hdCxvPW4oNTUpLnRyaW07ZS5leHBvcnRzPTEvcihuKDY2KSsiLTAiKSE9LTEvMD9mdW5jdGlvbihlKXt2YXIgdD1vKFN0cmluZyhlKSwzKSxuPXIodCk7cmV0dXJuIDA9PT1uJiYiLSI9PXQuY2hhckF0KDApPy0wOm59OnJ9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDM2KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZigibnVtYmVyIiE9dHlwZW9mIGUmJiJOdW1iZXIiIT1yKGUpKXRocm93IFR5cGVFcnJvcih0KTtyZXR1cm4rZX19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9big0MCksbz1uKDMyKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9U3RyaW5nKG8odGhpcykpLG49IiIsaT1yKGUpO2lmKGk8MHx8aT09MS8wKXRocm93IFJhbmdlRXJyb3IoIkNvdW50IGNhbid0IGJlIG5lZ2F0aXZlIik7Zm9yKDtpPjA7KGk+Pj49MSkmJih0Kz10KSkxJmkmJihuKz10KTtyZXR1cm4gbn19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDUpLG89TWF0aC5mbG9vcjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIXIoZSkmJmlzRmluaXRlKGUpJiZvKGUpPT09ZX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPU1hdGgubG9nMXB8fGZ1bmN0aW9uKGUpe3JldHVybihlPStlKT4tMWUtOCYmZTwxZS04P2UtZSplLzI6TWF0aC5sb2coMStlKX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDQwKSxvPW4oMzIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxuKXt2YXIgaSxhLHU9U3RyaW5nKG8odCkpLGM9cihuKSxsPXUubGVuZ3RoO3JldHVybiBjPDB8fGM+PWw/ZT8iIjp2b2lkIDA6KGk9dS5jaGFyQ29kZUF0KGMpKTw1NTI5Nnx8aT41NjMxOXx8YysxPT09bHx8KGE9dS5jaGFyQ29kZUF0KGMrMSkpPDU2MzIwfHxhPjU3MzQzP2U/dS5jaGFyQXQoYyk6aTplP3Uuc2xpY2UoYyxjKzIpOmEtNTYzMjArKGktNTUyOTY8PDEwKSs2NTUzNn19fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNDEpLG89bigzNyksaT1uKDUxKSxhPXt9O24oMjcpKGEsbig5KSgiaXRlcmF0b3IiKSxmdW5jdGlvbigpe3JldHVybiB0aGlzfSksZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXtlLnByb3RvdHlwZT1yKGEse25leHQ6bygxLG4pfSksaShlLHQrIiBJdGVyYXRvciIpfX0sZnVuY3Rpb24oZSx0LG4pe24oNTcpKCJtYXRjaCIsMSxmdW5jdGlvbihlLHQsbil7cmV0dXJuW2Z1bmN0aW9uKG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKHRoaXMpLG89bnVsbD09bj92b2lkIDA6blt0XTtyZXR1cm4gdm9pZCAwIT09bz9vLmNhbGwobixyKTpuZXcgUmVnRXhwKG4pW3RdKFN0cmluZyhyKSl9LG5dfSl9LGZ1bmN0aW9uKGUsdCxuKXtuKDU3KSgicmVwbGFjZSIsMixmdW5jdGlvbihlLHQsbil7cmV0dXJuW2Z1bmN0aW9uKHIsbyl7InVzZSBzdHJpY3QiO3ZhciBpPWUodGhpcyksYT1udWxsPT1yP3ZvaWQgMDpyW3RdO3JldHVybiB2b2lkIDAhPT1hP2EuY2FsbChyLGksbyk6bi5jYWxsKFN0cmluZyhpKSxyLG8pfSxuXX0pfSxmdW5jdGlvbihlLHQsbil7big1NykoInNlYXJjaCIsMSxmdW5jdGlvbihlLHQsbil7cmV0dXJuW2Z1bmN0aW9uKG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1lKHRoaXMpLG89bnVsbD09bj92b2lkIDA6blt0XTtyZXR1cm4gdm9pZCAwIT09bz9vLmNhbGwobixyKTpuZXcgUmVnRXhwKG4pW3RdKFN0cmluZyhyKSl9LG5dfSl9LGZ1bmN0aW9uKGUsdCxuKXtuKDU3KSgic3BsaXQiLDIsZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbz1uKDcyKSxpPXIsYT1bXS5wdXNoO2lmKCJjIj09ImFiYmMiLnNwbGl0KC8oYikqLylbMV18fDQhPSJ0ZXN0Ii5zcGxpdCgvKD86KS8sLTEpLmxlbmd0aHx8MiE9ImFiIi5zcGxpdCgvKD86YWIpKi8pLmxlbmd0aHx8NCE9Ii4iLnNwbGl0KC8oLj8pKC4/KS8pLmxlbmd0aHx8Ii4iLnNwbGl0KC8oKSgpLykubGVuZ3RoPjF8fCIiLnNwbGl0KC8uPy8pLmxlbmd0aCl7dmFyIHU9dm9pZCAwPT09LygpPz8vLmV4ZWMoIiIpWzFdO3I9ZnVuY3Rpb24oZSx0KXt2YXIgbj1TdHJpbmcodGhpcyk7aWYodm9pZCAwPT09ZSYmMD09PXQpcmV0dXJuW107aWYoIW8oZSkpcmV0dXJuIGkuY2FsbChuLGUsdCk7dmFyIHIsYyxsLHMsZixwPVtdLGQ9KGUuaWdub3JlQ2FzZT8iaSI6IiIpKyhlLm11bHRpbGluZT8ibSI6IiIpKyhlLnVuaWNvZGU/InUiOiIiKSsoZS5zdGlja3k/InkiOiIiKSxoPTAseT12b2lkIDA9PT10PzQyOTQ5NjcyOTU6dD4+PjAsXz1uZXcgUmVnRXhwKGUuc291cmNlLGQrImciKTtmb3IodXx8KHI9bmV3IFJlZ0V4cCgiXiIrXy5zb3VyY2UrIiQoPyFcXHMpIixkKSk7KGM9Xy5leGVjKG4pKSYmISgobD1jLmluZGV4K2NbMF0ubGVuZ3RoKT5oJiYocC5wdXNoKG4uc2xpY2UoaCxjLmluZGV4KSksIXUmJmMubGVuZ3RoPjEmJmNbMF0ucmVwbGFjZShyLGZ1bmN0aW9uKCl7Zm9yKGY9MTtmPGFyZ3VtZW50cy5sZW5ndGgtMjtmKyspdm9pZCAwPT09YXJndW1lbnRzW2ZdJiYoY1tmXT12b2lkIDApfSksYy5sZW5ndGg+MSYmYy5pbmRleDxuLmxlbmd0aCYmYS5hcHBseShwLGMuc2xpY2UoMSkpLHM9Y1swXS5sZW5ndGgsaD1sLHAubGVuZ3RoPj15KSk7KV8ubGFzdEluZGV4PT09Yy5pbmRleCYmXy5sYXN0SW5kZXgrKztyZXR1cm4gaD09PW4ubGVuZ3RoPyFzJiZfLnRlc3QoIiIpfHxwLnB1c2goIiIpOnAucHVzaChuLnNsaWNlKGgpKSxwLmxlbmd0aD55P3Auc2xpY2UoMCx5KTpwfX1lbHNlIjAiLnNwbGl0KHZvaWQgMCwwKS5sZW5ndGgmJihyPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PWUmJjA9PT10P1tdOmkuY2FsbCh0aGlzLGUsdCl9KTtyZXR1cm5bZnVuY3Rpb24obixvKXt2YXIgaT1lKHRoaXMpLGE9bnVsbD09bj92b2lkIDA6blt0XTtyZXR1cm4gdm9pZCAwIT09YT9hLmNhbGwobixpLG8pOnIuY2FsbChTdHJpbmcoaSksbixvKX0scl19KX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMyk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuLG8pe3RyeXtyZXR1cm4gbz90KHIobilbMF0sblsxXSk6dChuKX1jYXRjaCh0KXt2YXIgaT1lLnJldHVybjt0aHJvdyB2b2lkIDAhPT1pJiZyKGkuY2FsbChlKSksdH19fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9big0Niksbz1uKDkpKCJpdGVyYXRvciIpLGk9QXJyYXkucHJvdG90eXBlO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09ZSYmKHIuQXJyYXk9PT1lfHxpW29dPT09ZSl9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTMpLG89bigzNyk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuKXt0IGluIGU/ci5mKGUsdCxvKDAsbikpOmVbdF09bn19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDkwKSxvPW4oOSkoIml0ZXJhdG9yIiksaT1uKDQ2KTtlLmV4cG9ydHM9big4KS5nZXRJdGVyYXRvck1ldGhvZD1mdW5jdGlvbihlKXtpZihudWxsIT1lKXJldHVybiBlW29dfHxlWyJAQGl0ZXJhdG9yIl18fGlbcihlKV19fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9big5KSgiaXRlcmF0b3IiKSxvPSExO3RyeXt2YXIgaT1bN11bcl0oKTtpLnJldHVybj1mdW5jdGlvbigpe289ITB9LEFycmF5LmZyb20oaSxmdW5jdGlvbigpe3Rocm93IDJ9KX1jYXRjaChlKXt9ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYoIXQmJiFvKXJldHVybiExO3ZhciBuPSExO3RyeXt2YXIgaT1bN10sYT1pW3JdKCk7YS5uZXh0PWZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6bj0hMH19LGlbcl09ZnVuY3Rpb24oKXtyZXR1cm4gYX0sZShpKX1jYXRjaChlKXt9cmV0dXJuIG59fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigzNSksbz1uKDIzKSxpPW4oNDMpLGE9bigyMCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxuLHUsYyl7cih0KTt2YXIgbD1vKGUpLHM9aShsKSxmPWEobC5sZW5ndGgpLHA9Yz9mLTE6MCxkPWM/LTE6MTtpZihuPDIpZm9yKDs7KXtpZihwIGluIHMpe3U9c1twXSxwKz1kO2JyZWFrfWlmKHArPWQsYz9wPDA6Zjw9cCl0aHJvdyBUeXBlRXJyb3IoIlJlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWUiKX1mb3IoO2M/cD49MDpmPnA7cCs9ZClwIGluIHMmJih1PXQodSxzW3BdLHAsbCkpO3JldHVybiB1fX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDQ3KSxvPW4oMTEyKSxpPW4oNDYpLGE9bigyNSk7ZS5leHBvcnRzPW4oNzApKEFycmF5LCJBcnJheSIsZnVuY3Rpb24oZSx0KXt0aGlzLl90PWEoZSksdGhpcy5faT0wLHRoaXMuX2s9dH0sZnVuY3Rpb24oKXt2YXIgZT10aGlzLl90LHQ9dGhpcy5fayxuPXRoaXMuX2krKztyZXR1cm4hZXx8bj49ZS5sZW5ndGg/KHRoaXMuX3Q9dm9pZCAwLG8oMSkpOm8oMCwia2V5cyI9PXQ/bjoidmFsdWVzIj09dD9lW25dOltuLGVbbl1dKX0sInZhbHVlcyIpLGkuQXJndW1lbnRzPWkuQXJyYXkscigia2V5cyIpLHIoInZhbHVlcyIpLHIoImVudHJpZXMiKX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm57dmFsdWU6dCxkb25lOiEhZX19fSxmdW5jdGlvbihlLHQsbil7bigxNSkmJiJnIiE9Ly4vZy5mbGFncyYmbigxMykuZihSZWdFeHAucHJvdG90eXBlLCJmbGFncyIse2NvbmZpZ3VyYWJsZTohMCxnZXQ6big3NSl9KX0sZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj1uKDExMSksbz1uKDM5KSxpPW4oMTgpLGE9bigxMSksdT1uKDI3KSxjPW4oNDYpLGw9big5KSxzPWwoIml0ZXJhdG9yIiksZj1sKCJ0b1N0cmluZ1RhZyIpLHA9Yy5BcnJheSxkPXtDU1NSdWxlTGlzdDohMCxDU1NTdHlsZURlY2xhcmF0aW9uOiExLENTU1ZhbHVlTGlzdDohMSxDbGllbnRSZWN0TGlzdDohMSxET01SZWN0TGlzdDohMSxET01TdHJpbmdMaXN0OiExLERPTVRva2VuTGlzdDohMCxEYXRhVHJhbnNmZXJJdGVtTGlzdDohMSxGaWxlTGlzdDohMSxIVE1MQWxsQ29sbGVjdGlvbjohMSxIVE1MQ29sbGVjdGlvbjohMSxIVE1MRm9ybUVsZW1lbnQ6ITEsSFRNTFNlbGVjdEVsZW1lbnQ6ITEsTWVkaWFMaXN0OiEwLE1pbWVUeXBlQXJyYXk6ITEsTmFtZWROb2RlTWFwOiExLE5vZGVMaXN0OiEwLFBhaW50UmVxdWVzdExpc3Q6ITEsUGx1Z2luOiExLFBsdWdpbkFycmF5OiExLFNWR0xlbmd0aExpc3Q6ITEsU1ZHTnVtYmVyTGlzdDohMSxTVkdQYXRoU2VnTGlzdDohMSxTVkdQb2ludExpc3Q6ITEsU1ZHU3RyaW5nTGlzdDohMSxTVkdUcmFuc2Zvcm1MaXN0OiExLFNvdXJjZUJ1ZmZlckxpc3Q6ITEsU3R5bGVTaGVldExpc3Q6ITAsVGV4dFRyYWNrQ3VlTGlzdDohMSxUZXh0VHJhY2tMaXN0OiExLFRvdWNoTGlzdDohMX0saD1vKGQpLHk9MDt5PGgubGVuZ3RoO3krKyl7dmFyIF8sdj1oW3ldLG09ZFt2XSxnPWFbdl0sYj1nJiZnLnByb3RvdHlwZTtpZihiJiYoYltzXXx8dShiLHMscCksYltmXXx8dShiLGYsdiksY1t2XT1wLG0pKWZvcihfIGluIHIpYltfXXx8aShiLF8scltfXSwhMCl9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTE2KSxvPW4oNDgpO2UuZXhwb3J0cz1uKDc4KSgiTWFwIixmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzLGFyZ3VtZW50cy5sZW5ndGg+MD9hcmd1bWVudHNbMF06dm9pZCAwKX19LHtnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ci5nZXRFbnRyeShvKHRoaXMsIk1hcCIpLGUpO3JldHVybiB0JiZ0LnZ9LHNldDpmdW5jdGlvbihlLHQpe3JldHVybiByLmRlZihvKHRoaXMsIk1hcCIpLDA9PT1lPzA6ZSx0KX19LHIsITApfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTMpLmYsbz1uKDQxKSxpPW4oNzYpLGE9bigzOCksdT1uKDc3KSxjPW4oNTgpLGw9big3MCkscz1uKDExMiksZj1uKDc0KSxwPW4oMTUpLGQ9bigzMSkuZmFzdEtleSxoPW4oNDgpLHk9cD8iX3MiOiJzaXplIixfPWZ1bmN0aW9uKGUsdCl7dmFyIG4scj1kKHQpO2lmKCJGIiE9PXIpcmV0dXJuIGUuX2lbcl07Zm9yKG49ZS5fZjtuO249bi5uKWlmKG4uaz09dClyZXR1cm4gbn07ZS5leHBvcnRzPXtnZXRDb25zdHJ1Y3RvcjpmdW5jdGlvbihlLHQsbixsKXt2YXIgcz1lKGZ1bmN0aW9uKGUscil7dShlLHMsdCwiX2kiKSxlLl90PXQsZS5faT1vKG51bGwpLGUuX2Y9dm9pZCAwLGUuX2w9dm9pZCAwLGVbeV09MCxudWxsIT1yJiZjKHIsbixlW2xdLGUpfSk7cmV0dXJuIGkocy5wcm90b3R5cGUse2NsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPWgodGhpcyx0KSxuPWUuX2kscj1lLl9mO3I7cj1yLm4pci5yPSEwLHIucCYmKHIucD1yLnAubj12b2lkIDApLGRlbGV0ZSBuW3IuaV07ZS5fZj1lLl9sPXZvaWQgMCxlW3ldPTB9LGRlbGV0ZTpmdW5jdGlvbihlKXt2YXIgbj1oKHRoaXMsdCkscj1fKG4sZSk7aWYocil7dmFyIG89ci5uLGk9ci5wO2RlbGV0ZSBuLl9pW3IuaV0sci5yPSEwLGkmJihpLm49byksbyYmKG8ucD1pKSxuLl9mPT1yJiYobi5fZj1vKSxuLl9sPT1yJiYobi5fbD1pKSxuW3ldLS19cmV0dXJuISFyfSxmb3JFYWNoOmZ1bmN0aW9uKGUpe2godGhpcyx0KTtmb3IodmFyIG4scj1hKGUsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMyk7bj1uP24ubjp0aGlzLl9mOylmb3IocihuLnYsbi5rLHRoaXMpO24mJm4ucjspbj1uLnB9LGhhczpmdW5jdGlvbihlKXtyZXR1cm4hIV8oaCh0aGlzLHQpLGUpfX0pLHAmJnIocy5wcm90b3R5cGUsInNpemUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaCh0aGlzLHQpW3ldfX0pLHN9LGRlZjpmdW5jdGlvbihlLHQsbil7dmFyIHIsbyxpPV8oZSx0KTtyZXR1cm4gaT9pLnY9bjooZS5fbD1pPXtpOm89ZCh0LCEwKSxrOnQsdjpuLHA6cj1lLl9sLG46dm9pZCAwLHI6ITF9LGUuX2Z8fChlLl9mPWkpLHImJihyLm49aSksZVt5XSsrLCJGIiE9PW8mJihlLl9pW29dPWkpKSxlfSxnZXRFbnRyeTpfLHNldFN0cm9uZzpmdW5jdGlvbihlLHQsbil7bChlLHQsZnVuY3Rpb24oZSxuKXt0aGlzLl90PWgoZSx0KSx0aGlzLl9rPW4sdGhpcy5fbD12b2lkIDB9LGZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuX2ssdD10aGlzLl9sO3QmJnQucjspdD10LnA7cmV0dXJuIHRoaXMuX3QmJih0aGlzLl9sPXQ9dD90Lm46dGhpcy5fdC5fZik/cygwLCJrZXlzIj09ZT90Lms6InZhbHVlcyI9PWU/dC52Olt0LmssdC52XSk6KHRoaXMuX3Q9dm9pZCAwLHMoMSkpfSxuPyJlbnRyaWVzIjoidmFsdWVzIiwhbiwhMCksZih0KX19fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMTE2KSxvPW4oNDgpO2UuZXhwb3J0cz1uKDc4KSgiU2V0IixmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzLGFyZ3VtZW50cy5sZW5ndGg+MD9hcmd1bWVudHNbMF06dm9pZCAwKX19LHthZGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHIuZGVmKG8odGhpcywiU2V0IiksZT0wPT09ZT8wOmUsZSl9fSxyKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsKLyoKb2JqZWN0LWFzc2lnbgooYykgU2luZHJlIFNvcmh1cwpAbGljZW5zZSBNSVQKKi92YXIgcj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLG89T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxpPU9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dHJ5e2lmKCFPYmplY3QuYXNzaWduKXJldHVybiExO3ZhciBlPW5ldyBTdHJpbmcoImFiYyIpO2lmKGVbNV09ImRlIiwiNSI9PT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKVswXSlyZXR1cm4hMTtmb3IodmFyIHQ9e30sbj0wO248MTA7bisrKXRbIl8iK1N0cmluZy5mcm9tQ2hhckNvZGUobildPW47aWYoIjAxMjM0NTY3ODkiIT09T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSkuam9pbigiIikpcmV0dXJuITE7dmFyIHI9e307cmV0dXJuImFiY2RlZmdoaWprbG1ub3BxcnN0Ii5zcGxpdCgiIikuZm9yRWFjaChmdW5jdGlvbihlKXtyW2VdPWV9KSwiYWJjZGVmZ2hpamtsbW5vcHFyc3QiPT09T2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxyKSkuam9pbigiIil9Y2F0Y2goZSl7cmV0dXJuITF9fSgpP09iamVjdC5hc3NpZ246ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4sYSx1PWZ1bmN0aW9uKGUpe2lmKG51bGw9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQiKTtyZXR1cm4gT2JqZWN0KGUpfShlKSxjPTE7Yzxhcmd1bWVudHMubGVuZ3RoO2MrKyl7Zm9yKHZhciBsIGluIG49T2JqZWN0KGFyZ3VtZW50c1tjXSkpby5jYWxsKG4sbCkmJih1W2xdPW5bbF0pO2lmKHIpe2E9cihuKTtmb3IodmFyIHM9MDtzPGEubGVuZ3RoO3MrKylpLmNhbGwobixhW3NdKSYmKHVbYVtzXV09blthW3NdXSl9fXJldHVybiB1fX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuLnIodCk7dmFyIHI9bigxNCksbz1uLm4ociksaT1uKDApLGE9bi5uKGkpLHU9bigyKSxjPW4ubih1KSxsPW4oMTcpLHM9bigxMCksZj1uLm4ocykscD1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfTtmdW5jdGlvbiBkKGUsdCl7aWYoIWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4hdHx8Im9iamVjdCIhPXR5cGVvZiB0JiYiZnVuY3Rpb24iIT10eXBlb2YgdD9lOnR9dmFyIGg9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBuLHI7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCk7Zm9yKHZhciBvPWFyZ3VtZW50cy5sZW5ndGgsaT1BcnJheShvKSxhPTA7YTxvO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gbj1yPWQodGhpcyxlLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSksci5zdGF0ZT17bWF0Y2g6ci5jb21wdXRlTWF0Y2goci5wcm9wcy5oaXN0b3J5LmxvY2F0aW9uLnBhdGhuYW1lKX0sZChyLG4pfXJldHVybiBmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90ICIrdHlwZW9mIHQpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdCk6ZS5fX3Byb3RvX189dCl9KHQsZSksdC5wcm90b3R5cGUuZ2V0Q2hpbGRDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJue3JvdXRlcjpwKHt9LHRoaXMuY29udGV4dC5yb3V0ZXIse2hpc3Rvcnk6dGhpcy5wcm9wcy5oaXN0b3J5LHJvdXRlOntsb2NhdGlvbjp0aGlzLnByb3BzLmhpc3RvcnkubG9jYXRpb24sbWF0Y2g6dGhpcy5zdGF0ZS5tYXRjaH19KX19LHQucHJvdG90eXBlLmNvbXB1dGVNYXRjaD1mdW5jdGlvbihlKXtyZXR1cm57cGF0aDoiLyIsdXJsOiIvIixwYXJhbXM6e30saXNFeGFjdDoiLyI9PT1lfX0sdC5wcm90b3R5cGUuY29tcG9uZW50V2lsbE1vdW50PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXRoaXMucHJvcHMsbj10LmNoaWxkcmVuLHI9dC5oaXN0b3J5O2YoKShudWxsPT1ufHwxPT09YS5hLkNoaWxkcmVuLmNvdW50KG4pLCJBIDxSb3V0ZXI+IG1heSBoYXZlIG9ubHkgb25lIGNoaWxkIGVsZW1lbnQiKSx0aGlzLnVubGlzdGVuPXIubGlzdGVuKGZ1bmN0aW9uKCl7ZS5zZXRTdGF0ZSh7bWF0Y2g6ZS5jb21wdXRlTWF0Y2goci5sb2NhdGlvbi5wYXRobmFtZSl9KX0pfSx0LnByb3RvdHlwZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzPWZ1bmN0aW9uKGUpe28oKSh0aGlzLnByb3BzLmhpc3Rvcnk9PT1lLmhpc3RvcnksIllvdSBjYW5ub3QgY2hhbmdlIDxSb3V0ZXIgaGlzdG9yeT4iKX0sdC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXt0aGlzLnVubGlzdGVuKCl9LHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMuY2hpbGRyZW47cmV0dXJuIGU/YS5hLkNoaWxkcmVuLm9ubHkoZSk6bnVsbH0sdH0oYS5hLkNvbXBvbmVudCk7aC5wcm9wVHlwZXM9e2hpc3Rvcnk6Yy5hLm9iamVjdC5pc1JlcXVpcmVkLGNoaWxkcmVuOmMuYS5ub2RlfSxoLmNvbnRleHRUeXBlcz17cm91dGVyOmMuYS5vYmplY3R9LGguY2hpbGRDb250ZXh0VHlwZXM9e3JvdXRlcjpjLmEub2JqZWN0LmlzUmVxdWlyZWR9O3ZhciB5PWg7ZnVuY3Rpb24gXyhlLHQpe2lmKCFlKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIXR8fCJvYmplY3QiIT10eXBlb2YgdCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQ/ZTp0fXZhciB2PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgbixyOyFmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpO2Zvcih2YXIgbz1hcmd1bWVudHMubGVuZ3RoLGk9QXJyYXkobyksYT0wO2E8bzthKyspaVthXT1hcmd1bWVudHNbYV07cmV0dXJuIG49cj1fKHRoaXMsZS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChpKSkpLHIuaGlzdG9yeT1PYmplY3QobC5jKShyLnByb3BzKSxfKHIsbil9cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgIit0eXBlb2YgdCk7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx0KTplLl9fcHJvdG9fXz10KX0odCxlKSx0LnByb3RvdHlwZS5jb21wb25lbnRXaWxsTW91bnQ9ZnVuY3Rpb24oKXtvKCkoIXRoaXMucHJvcHMuaGlzdG9yeSwiPE1lbW9yeVJvdXRlcj4gaWdub3JlcyB0aGUgaGlzdG9yeSBwcm9wLiBUbyB1c2UgYSBjdXN0b20gaGlzdG9yeSwgdXNlIGBpbXBvcnQgeyBSb3V0ZXIgfWAgaW5zdGVhZCBvZiBgaW1wb3J0IHsgTWVtb3J5Um91dGVyIGFzIFJvdXRlciB9YC4iKX0sdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIGEuYS5jcmVhdGVFbGVtZW50KHkse2hpc3Rvcnk6dGhpcy5oaXN0b3J5LGNoaWxkcmVuOnRoaXMucHJvcHMuY2hpbGRyZW59KX0sdH0oYS5hLkNvbXBvbmVudCk7di5wcm9wVHlwZXM9e2luaXRpYWxFbnRyaWVzOmMuYS5hcnJheSxpbml0aWFsSW5kZXg6Yy5hLm51bWJlcixnZXRVc2VyQ29uZmlybWF0aW9uOmMuYS5mdW5jLGtleUxlbmd0aDpjLmEubnVtYmVyLGNoaWxkcmVuOmMuYS5ub2RlfTt2YXIgbT12O3ZhciBnPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KSxmdW5jdGlvbihlLHQpe2lmKCFlKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIXR8fCJvYmplY3QiIT10eXBlb2YgdCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQ/ZTp0fSh0aGlzLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4gZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCAiK3R5cGVvZiB0KTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHQpOmUuX19wcm90b19fPXQpfSh0LGUpLHQucHJvdG90eXBlLmVuYWJsZT1mdW5jdGlvbihlKXt0aGlzLnVuYmxvY2smJnRoaXMudW5ibG9jaygpLHRoaXMudW5ibG9jaz10aGlzLmNvbnRleHQucm91dGVyLmhpc3RvcnkuYmxvY2soZSl9LHQucHJvdG90eXBlLmRpc2FibGU9ZnVuY3Rpb24oKXt0aGlzLnVuYmxvY2smJih0aGlzLnVuYmxvY2soKSx0aGlzLnVuYmxvY2s9bnVsbCl9LHQucHJvdG90eXBlLmNvbXBvbmVudFdpbGxNb3VudD1mdW5jdGlvbigpe2YoKSh0aGlzLmNvbnRleHQucm91dGVyLCJZb3Ugc2hvdWxkIG5vdCB1c2UgPFByb21wdD4gb3V0c2lkZSBhIDxSb3V0ZXI+IiksdGhpcy5wcm9wcy53aGVuJiZ0aGlzLmVuYWJsZSh0aGlzLnByb3BzLm1lc3NhZ2UpfSx0LnByb3RvdHlwZS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzPWZ1bmN0aW9uKGUpe2Uud2hlbj90aGlzLnByb3BzLndoZW4mJnRoaXMucHJvcHMubWVzc2FnZT09PWUubWVzc2FnZXx8dGhpcy5lbmFibGUoZS5tZXNzYWdlKTp0aGlzLmRpc2FibGUoKX0sdC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFVubW91bnQ9ZnVuY3Rpb24oKXt0aGlzLmRpc2FibGUoKX0sdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LHR9KGEuYS5Db21wb25lbnQpO2cucHJvcFR5cGVzPXt3aGVuOmMuYS5ib29sLG1lc3NhZ2U6Yy5hLm9uZU9mVHlwZShbYy5hLmZ1bmMsYy5hLnN0cmluZ10pLmlzUmVxdWlyZWR9LGcuZGVmYXVsdFByb3BzPXt3aGVuOiEwfSxnLmNvbnRleHRUeXBlcz17cm91dGVyOmMuYS5zaGFwZSh7aGlzdG9yeTpjLmEuc2hhcGUoe2Jsb2NrOmMuYS5mdW5jLmlzUmVxdWlyZWR9KS5pc1JlcXVpcmVkfSkuaXNSZXF1aXJlZH07dmFyIGI9Zyx3PW4oNjEpLEU9bi5uKHcpLFQ9e30sTz0wLFM9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06Ii8iLHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O3JldHVybiIvIj09PWU/ZTpmdW5jdGlvbihlKXt2YXIgdD1lLG49VFt0XXx8KFRbdF09e30pO2lmKG5bZV0pcmV0dXJuIG5bZV07dmFyIHI9RS5hLmNvbXBpbGUoZSk7cmV0dXJuIE88MWU0JiYobltlXT1yLE8rKykscn0oZSkodCx7cHJldHR5OiEwfSl9LHg9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTE7dDxhcmd1bWVudHMubGVuZ3RoO3QrKyl7dmFyIG49YXJndW1lbnRzW3RdO2Zvcih2YXIgciBpbiBuKU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChuLHIpJiYoZVtyXT1uW3JdKX1yZXR1cm4gZX07dmFyIFA9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLGZ1bmN0aW9uKGUsdCl7aWYoIWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4hdHx8Im9iamVjdCIhPXR5cGVvZiB0JiYiZnVuY3Rpb24iIT10eXBlb2YgdD9lOnR9KHRoaXMsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybiBmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90ICIrdHlwZW9mIHQpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdCk6ZS5fX3Byb3RvX189dCl9KHQsZSksdC5wcm90b3R5cGUuaXNTdGF0aWM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250ZXh0LnJvdXRlciYmdGhpcy5jb250ZXh0LnJvdXRlci5zdGF0aWNDb250ZXh0fSx0LnByb3RvdHlwZS5jb21wb25lbnRXaWxsTW91bnQ9ZnVuY3Rpb24oKXtmKCkodGhpcy5jb250ZXh0LnJvdXRlciwiWW91IHNob3VsZCBub3QgdXNlIDxSZWRpcmVjdD4gb3V0c2lkZSBhIDxSb3V0ZXI+IiksdGhpcy5pc1N0YXRpYygpJiZ0aGlzLnBlcmZvcm0oKX0sdC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXt0aGlzLmlzU3RhdGljKCl8fHRoaXMucGVyZm9ybSgpfSx0LnByb3RvdHlwZS5jb21wb25lbnREaWRVcGRhdGU9ZnVuY3Rpb24oZSl7dmFyIHQ9T2JqZWN0KGwuYikoZS50byksbj1PYmplY3QobC5iKSh0aGlzLnByb3BzLnRvKTtPYmplY3QobC5lKSh0LG4pP28oKSghMSwiWW91IHRyaWVkIHRvIHJlZGlyZWN0IHRvIHRoZSBzYW1lIHJvdXRlIHlvdSdyZSBjdXJyZW50bHkgb246IFwiIituLnBhdGhuYW1lK24uc2VhcmNoKyciJyk6dGhpcy5wZXJmb3JtKCl9LHQucHJvdG90eXBlLmNvbXB1dGVUbz1mdW5jdGlvbihlKXt2YXIgdD1lLmNvbXB1dGVkTWF0Y2gsbj1lLnRvO3JldHVybiB0PyJzdHJpbmciPT10eXBlb2Ygbj9TKG4sdC5wYXJhbXMpOngoe30sbix7cGF0aG5hbWU6UyhuLnBhdGhuYW1lLHQucGFyYW1zKX0pOm59LHQucHJvdG90eXBlLnBlcmZvcm09ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNvbnRleHQucm91dGVyLmhpc3RvcnksdD10aGlzLnByb3BzLnB1c2gsbj10aGlzLmNvbXB1dGVUbyh0aGlzLnByb3BzKTt0P2UucHVzaChuKTplLnJlcGxhY2Uobil9LHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiBudWxsfSx0fShhLmEuQ29tcG9uZW50KTtQLnByb3BUeXBlcz17Y29tcHV0ZWRNYXRjaDpjLmEub2JqZWN0LHB1c2g6Yy5hLmJvb2wsZnJvbTpjLmEuc3RyaW5nLHRvOmMuYS5vbmVPZlR5cGUoW2MuYS5zdHJpbmcsYy5hLm9iamVjdF0pLmlzUmVxdWlyZWR9LFAuZGVmYXVsdFByb3BzPXtwdXNoOiExfSxQLmNvbnRleHRUeXBlcz17cm91dGVyOmMuYS5zaGFwZSh7aGlzdG9yeTpjLmEuc2hhcGUoe3B1c2g6Yy5hLmZ1bmMuaXNSZXF1aXJlZCxyZXBsYWNlOmMuYS5mdW5jLmlzUmVxdWlyZWR9KS5pc1JlcXVpcmVkLHN0YXRpY0NvbnRleHQ6Yy5hLm9iamVjdH0pLmlzUmVxdWlyZWR9O3ZhciBSPVAsQz17fSxrPTAsTj1mdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30sbj1hcmd1bWVudHNbMl07InN0cmluZyI9PXR5cGVvZiB0JiYodD17cGF0aDp0fSk7dmFyIHI9dCxvPXIucGF0aCxpPXIuZXhhY3QsYT12b2lkIDAhPT1pJiZpLHU9ci5zdHJpY3QsYz12b2lkIDAhPT11JiZ1LGw9ci5zZW5zaXRpdmU7aWYobnVsbD09bylyZXR1cm4gbjt2YXIgcz1mdW5jdGlvbihlLHQpe3ZhciBuPSIiK3QuZW5kK3Quc3RyaWN0K3Quc2Vuc2l0aXZlLHI9Q1tuXXx8KENbbl09e30pO2lmKHJbZV0pcmV0dXJuIHJbZV07dmFyIG89W10saT17cmU6RSgpKGUsbyx0KSxrZXlzOm99O3JldHVybiBrPDFlNCYmKHJbZV09aSxrKyspLGl9KG8se2VuZDphLHN0cmljdDpjLHNlbnNpdGl2ZTp2b2lkIDAhPT1sJiZsfSksZj1zLnJlLHA9cy5rZXlzLGQ9Zi5leGVjKGUpO2lmKCFkKXJldHVybiBudWxsO3ZhciBoPWRbMF0seT1kLnNsaWNlKDEpLF89ZT09PWg7cmV0dXJuIGEmJiFfP251bGw6e3BhdGg6byx1cmw6Ii8iPT09byYmIiI9PT1oPyIvIjpoLGlzRXhhY3Q6XyxwYXJhbXM6cC5yZWR1Y2UoZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlW3QubmFtZV09eVtuXSxlfSx7fSl9fSxBPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9O2Z1bmN0aW9uIEkoZSx0KXtpZighZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiF0fHwib2JqZWN0IiE9dHlwZW9mIHQmJiJmdW5jdGlvbiIhPXR5cGVvZiB0P2U6dH12YXIgRD1mdW5jdGlvbihlKXtyZXR1cm4gMD09PWEuYS5DaGlsZHJlbi5jb3VudChlKX0saj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIG4scjshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyx0KTtmb3IodmFyIG89YXJndW1lbnRzLmxlbmd0aCxpPUFycmF5KG8pLGE9MDthPG87YSsrKWlbYV09YXJndW1lbnRzW2FdO3JldHVybiBuPXI9SSh0aGlzLGUuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoaSkpKSxyLnN0YXRlPXttYXRjaDpyLmNvbXB1dGVNYXRjaChyLnByb3BzLHIuY29udGV4dC5yb3V0ZXIpfSxJKHIsbil9cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgIit0eXBlb2YgdCk7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx0KTplLl9fcHJvdG9fXz10KX0odCxlKSx0LnByb3RvdHlwZS5nZXRDaGlsZENvbnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm57cm91dGVyOkEoe30sdGhpcy5jb250ZXh0LnJvdXRlcix7cm91dGU6e2xvY2F0aW9uOnRoaXMucHJvcHMubG9jYXRpb258fHRoaXMuY29udGV4dC5yb3V0ZXIucm91dGUubG9jYXRpb24sbWF0Y2g6dGhpcy5zdGF0ZS5tYXRjaH19KX19LHQucHJvdG90eXBlLmNvbXB1dGVNYXRjaD1mdW5jdGlvbihlLHQpe3ZhciBuPWUuY29tcHV0ZWRNYXRjaCxyPWUubG9jYXRpb24sbz1lLnBhdGgsaT1lLnN0cmljdCxhPWUuZXhhY3QsdT1lLnNlbnNpdGl2ZTtpZihuKXJldHVybiBuO2YoKSh0LCJZb3Ugc2hvdWxkIG5vdCB1c2UgPFJvdXRlPiBvciB3aXRoUm91dGVyKCkgb3V0c2lkZSBhIDxSb3V0ZXI+Iik7dmFyIGM9dC5yb3V0ZSxsPShyfHxjLmxvY2F0aW9uKS5wYXRobmFtZTtyZXR1cm4gTihsLHtwYXRoOm8sc3RyaWN0OmksZXhhY3Q6YSxzZW5zaXRpdmU6dX0sYy5tYXRjaCl9LHQucHJvdG90eXBlLmNvbXBvbmVudFdpbGxNb3VudD1mdW5jdGlvbigpe28oKSghKHRoaXMucHJvcHMuY29tcG9uZW50JiZ0aGlzLnByb3BzLnJlbmRlciksIllvdSBzaG91bGQgbm90IHVzZSA8Um91dGUgY29tcG9uZW50PiBhbmQgPFJvdXRlIHJlbmRlcj4gaW4gdGhlIHNhbWUgcm91dGU7IDxSb3V0ZSByZW5kZXI+IHdpbGwgYmUgaWdub3JlZCIpLG8oKSghKHRoaXMucHJvcHMuY29tcG9uZW50JiZ0aGlzLnByb3BzLmNoaWxkcmVuJiYhRCh0aGlzLnByb3BzLmNoaWxkcmVuKSksIllvdSBzaG91bGQgbm90IHVzZSA8Um91dGUgY29tcG9uZW50PiBhbmQgPFJvdXRlIGNoaWxkcmVuPiBpbiB0aGUgc2FtZSByb3V0ZTsgPFJvdXRlIGNoaWxkcmVuPiB3aWxsIGJlIGlnbm9yZWQiKSxvKCkoISh0aGlzLnByb3BzLnJlbmRlciYmdGhpcy5wcm9wcy5jaGlsZHJlbiYmIUQodGhpcy5wcm9wcy5jaGlsZHJlbikpLCJZb3Ugc2hvdWxkIG5vdCB1c2UgPFJvdXRlIHJlbmRlcj4gYW5kIDxSb3V0ZSBjaGlsZHJlbj4gaW4gdGhlIHNhbWUgcm91dGU7IDxSb3V0ZSBjaGlsZHJlbj4gd2lsbCBiZSBpZ25vcmVkIil9LHQucHJvdG90eXBlLmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHM9ZnVuY3Rpb24oZSx0KXtvKCkoIShlLmxvY2F0aW9uJiYhdGhpcy5wcm9wcy5sb2NhdGlvbiksJzxSb3V0ZT4gZWxlbWVudHMgc2hvdWxkIG5vdCBjaGFuZ2UgZnJvbSB1bmNvbnRyb2xsZWQgdG8gY29udHJvbGxlZCAob3IgdmljZSB2ZXJzYSkuIFlvdSBpbml0aWFsbHkgdXNlZCBubyAibG9jYXRpb24iIHByb3AgYW5kIHRoZW4gcHJvdmlkZWQgb25lIG9uIGEgc3Vic2VxdWVudCByZW5kZXIuJyksbygpKCEoIWUubG9jYXRpb24mJnRoaXMucHJvcHMubG9jYXRpb24pLCc8Um91dGU+IGVsZW1lbnRzIHNob3VsZCBub3QgY2hhbmdlIGZyb20gY29udHJvbGxlZCB0byB1bmNvbnRyb2xsZWQgKG9yIHZpY2UgdmVyc2EpLiBZb3UgcHJvdmlkZWQgYSAibG9jYXRpb24iIHByb3AgaW5pdGlhbGx5IGJ1dCBvbWl0dGVkIGl0IG9uIGEgc3Vic2VxdWVudCByZW5kZXIuJyksdGhpcy5zZXRTdGF0ZSh7bWF0Y2g6dGhpcy5jb21wdXRlTWF0Y2goZSx0LnJvdXRlcil9KX0sdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdGF0ZS5tYXRjaCx0PXRoaXMucHJvcHMsbj10LmNoaWxkcmVuLHI9dC5jb21wb25lbnQsbz10LnJlbmRlcixpPXRoaXMuY29udGV4dC5yb3V0ZXIsdT1pLmhpc3RvcnksYz1pLnJvdXRlLGw9aS5zdGF0aWNDb250ZXh0LHM9e21hdGNoOmUsbG9jYXRpb246dGhpcy5wcm9wcy5sb2NhdGlvbnx8Yy5sb2NhdGlvbixoaXN0b3J5OnUsc3RhdGljQ29udGV4dDpsfTtyZXR1cm4gcj9lP2EuYS5jcmVhdGVFbGVtZW50KHIscyk6bnVsbDpvP2U/byhzKTpudWxsOiJmdW5jdGlvbiI9PXR5cGVvZiBuP24ocyk6biYmIUQobik/YS5hLkNoaWxkcmVuLm9ubHkobik6bnVsbH0sdH0oYS5hLkNvbXBvbmVudCk7ai5wcm9wVHlwZXM9e2NvbXB1dGVkTWF0Y2g6Yy5hLm9iamVjdCxwYXRoOmMuYS5zdHJpbmcsZXhhY3Q6Yy5hLmJvb2wsc3RyaWN0OmMuYS5ib29sLHNlbnNpdGl2ZTpjLmEuYm9vbCxjb21wb25lbnQ6Yy5hLmZ1bmMscmVuZGVyOmMuYS5mdW5jLGNoaWxkcmVuOmMuYS5vbmVPZlR5cGUoW2MuYS5mdW5jLGMuYS5ub2RlXSksbG9jYXRpb246Yy5hLm9iamVjdH0sai5jb250ZXh0VHlwZXM9e3JvdXRlcjpjLmEuc2hhcGUoe2hpc3Rvcnk6Yy5hLm9iamVjdC5pc1JlcXVpcmVkLHJvdXRlOmMuYS5vYmplY3QuaXNSZXF1aXJlZCxzdGF0aWNDb250ZXh0OmMuYS5vYmplY3R9KX0sai5jaGlsZENvbnRleHRUeXBlcz17cm91dGVyOmMuYS5vYmplY3QuaXNSZXF1aXJlZH07dmFyIEw9aixNPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9O2Z1bmN0aW9uIEYoZSx0KXtpZighZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiF0fHwib2JqZWN0IiE9dHlwZW9mIHQmJiJmdW5jdGlvbiIhPXR5cGVvZiB0P2U6dH12YXIgVT1mdW5jdGlvbihlKXtyZXR1cm4iLyI9PT1lLmNoYXJBdCgwKT9lOiIvIitlfSxXPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU/TSh7fSx0LHtwYXRobmFtZTpVKGUpK3QucGF0aG5hbWV9KTp0fSwkPWZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZT9lOk9iamVjdChsLmQpKGUpfSxHPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe2YoKSghMSwiWW91IGNhbm5vdCAlcyB3aXRoIDxTdGF0aWNSb3V0ZXI+IixlKX19LEI9ZnVuY3Rpb24oKXt9LHE9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBuLHI7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsdCk7Zm9yKHZhciBvPWFyZ3VtZW50cy5sZW5ndGgsaT1BcnJheShvKSxhPTA7YTxvO2ErKylpW2FdPWFyZ3VtZW50c1thXTtyZXR1cm4gbj1yPUYodGhpcyxlLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGkpKSksci5jcmVhdGVIcmVmPWZ1bmN0aW9uKGUpe3JldHVybiBVKHIucHJvcHMuYmFzZW5hbWUrJChlKSl9LHIuaGFuZGxlUHVzaD1mdW5jdGlvbihlKXt2YXIgdD1yLnByb3BzLG49dC5iYXNlbmFtZSxvPXQuY29udGV4dDtvLmFjdGlvbj0iUFVTSCIsby5sb2NhdGlvbj1XKG4sT2JqZWN0KGwuYikoZSkpLG8udXJsPSQoby5sb2NhdGlvbil9LHIuaGFuZGxlUmVwbGFjZT1mdW5jdGlvbihlKXt2YXIgdD1yLnByb3BzLG49dC5iYXNlbmFtZSxvPXQuY29udGV4dDtvLmFjdGlvbj0iUkVQTEFDRSIsby5sb2NhdGlvbj1XKG4sT2JqZWN0KGwuYikoZSkpLG8udXJsPSQoby5sb2NhdGlvbil9LHIuaGFuZGxlTGlzdGVuPWZ1bmN0aW9uKCl7cmV0dXJuIEJ9LHIuaGFuZGxlQmxvY2s9ZnVuY3Rpb24oKXtyZXR1cm4gQn0sRihyLG4pfXJldHVybiBmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90ICIrdHlwZW9mIHQpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdCk6ZS5fX3Byb3RvX189dCl9KHQsZSksdC5wcm90b3R5cGUuZ2V0Q2hpbGRDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJue3JvdXRlcjp7c3RhdGljQ29udGV4dDp0aGlzLnByb3BzLmNvbnRleHR9fX0sdC5wcm90b3R5cGUuY29tcG9uZW50V2lsbE1vdW50PWZ1bmN0aW9uKCl7bygpKCF0aGlzLnByb3BzLmhpc3RvcnksIjxTdGF0aWNSb3V0ZXI+IGlnbm9yZXMgdGhlIGhpc3RvcnkgcHJvcC4gVG8gdXNlIGEgY3VzdG9tIGhpc3RvcnksIHVzZSBgaW1wb3J0IHsgUm91dGVyIH1gIGluc3RlYWQgb2YgYGltcG9ydCB7IFN0YXRpY1JvdXRlciBhcyBSb3V0ZXIgfWAuIil9LHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmJhc2VuYW1lLG49KGUuY29udGV4dCxlLmxvY2F0aW9uKSxyPWZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpdC5pbmRleE9mKHIpPj0wfHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmKG5bcl09ZVtyXSk7cmV0dXJuIG59KGUsWyJiYXNlbmFtZSIsImNvbnRleHQiLCJsb2NhdGlvbiJdKSxvPXtjcmVhdGVIcmVmOnRoaXMuY3JlYXRlSHJlZixhY3Rpb246IlBPUCIsbG9jYXRpb246ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4gdDt2YXIgbj1VKGUpO3JldHVybiAwIT09dC5wYXRobmFtZS5pbmRleE9mKG4pP3Q6TSh7fSx0LHtwYXRobmFtZTp0LnBhdGhuYW1lLnN1YnN0cihuLmxlbmd0aCl9KX0odCxPYmplY3QobC5iKShuKSkscHVzaDp0aGlzLmhhbmRsZVB1c2gscmVwbGFjZTp0aGlzLmhhbmRsZVJlcGxhY2UsZ286RygiZ28iKSxnb0JhY2s6RygiZ29CYWNrIiksZ29Gb3J3YXJkOkcoImdvRm9yd2FyZCIpLGxpc3Rlbjp0aGlzLmhhbmRsZUxpc3RlbixibG9jazp0aGlzLmhhbmRsZUJsb2NrfTtyZXR1cm4gYS5hLmNyZWF0ZUVsZW1lbnQoeSxNKHt9LHIse2hpc3Rvcnk6b30pKX0sdH0oYS5hLkNvbXBvbmVudCk7cS5wcm9wVHlwZXM9e2Jhc2VuYW1lOmMuYS5zdHJpbmcsY29udGV4dDpjLmEub2JqZWN0LmlzUmVxdWlyZWQsbG9jYXRpb246Yy5hLm9uZU9mVHlwZShbYy5hLnN0cmluZyxjLmEub2JqZWN0XSl9LHEuZGVmYXVsdFByb3BzPXtiYXNlbmFtZToiIixsb2NhdGlvbjoiLyJ9LHEuY2hpbGRDb250ZXh0VHlwZXM9e3JvdXRlcjpjLmEub2JqZWN0LmlzUmVxdWlyZWR9O3ZhciB6PXE7dmFyIEg9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBmdW5jdGlvbihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfSh0aGlzLHQpLGZ1bmN0aW9uKGUsdCl7aWYoIWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4hdHx8Im9iamVjdCIhPXR5cGVvZiB0JiYiZnVuY3Rpb24iIT10eXBlb2YgdD9lOnR9KHRoaXMsZS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybiBmdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90ICIrdHlwZW9mIHQpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdCk6ZS5fX3Byb3RvX189dCl9KHQsZSksdC5wcm90b3R5cGUuY29tcG9uZW50V2lsbE1vdW50PWZ1bmN0aW9uKCl7ZigpKHRoaXMuY29udGV4dC5yb3V0ZXIsIllvdSBzaG91bGQgbm90IHVzZSA8U3dpdGNoPiBvdXRzaWRlIGEgPFJvdXRlcj4iKX0sdC5wcm90b3R5cGUuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcz1mdW5jdGlvbihlKXtvKCkoIShlLmxvY2F0aW9uJiYhdGhpcy5wcm9wcy5sb2NhdGlvbiksJzxTd2l0Y2g+IGVsZW1lbnRzIHNob3VsZCBub3QgY2hhbmdlIGZyb20gdW5jb250cm9sbGVkIHRvIGNvbnRyb2xsZWQgKG9yIHZpY2UgdmVyc2EpLiBZb3UgaW5pdGlhbGx5IHVzZWQgbm8gImxvY2F0aW9uIiBwcm9wIGFuZCB0aGVuIHByb3ZpZGVkIG9uZSBvbiBhIHN1YnNlcXVlbnQgcmVuZGVyLicpLG8oKSghKCFlLmxvY2F0aW9uJiZ0aGlzLnByb3BzLmxvY2F0aW9uKSwnPFN3aXRjaD4gZWxlbWVudHMgc2hvdWxkIG5vdCBjaGFuZ2UgZnJvbSBjb250cm9sbGVkIHRvIHVuY29udHJvbGxlZCAob3IgdmljZSB2ZXJzYSkuIFlvdSBwcm92aWRlZCBhICJsb2NhdGlvbiIgcHJvcCBpbml0aWFsbHkgYnV0IG9taXR0ZWQgaXQgb24gYSBzdWJzZXF1ZW50IHJlbmRlci4nKX0sdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jb250ZXh0LnJvdXRlci5yb3V0ZSx0PXRoaXMucHJvcHMuY2hpbGRyZW4sbj10aGlzLnByb3BzLmxvY2F0aW9ufHxlLmxvY2F0aW9uLHI9dm9pZCAwLG89dm9pZCAwO3JldHVybiBhLmEuQ2hpbGRyZW4uZm9yRWFjaCh0LGZ1bmN0aW9uKHQpe2lmKG51bGw9PXImJmEuYS5pc1ZhbGlkRWxlbWVudCh0KSl7dmFyIGk9dC5wcm9wcyx1PWkucGF0aCxjPWkuZXhhY3QsbD1pLnN0cmljdCxzPWkuc2Vuc2l0aXZlLGY9aS5mcm9tLHA9dXx8ZjtvPXQscj1OKG4ucGF0aG5hbWUse3BhdGg6cCxleGFjdDpjLHN0cmljdDpsLHNlbnNpdGl2ZTpzfSxlLm1hdGNoKX19KSxyP2EuYS5jbG9uZUVsZW1lbnQobyx7bG9jYXRpb246bixjb21wdXRlZE1hdGNoOnJ9KTpudWxsfSx0fShhLmEuQ29tcG9uZW50KTtILmNvbnRleHRUeXBlcz17cm91dGVyOmMuYS5zaGFwZSh7cm91dGU6Yy5hLm9iamVjdC5pc1JlcXVpcmVkfSkuaXNSZXF1aXJlZH0sSC5wcm9wVHlwZXM9e2NoaWxkcmVuOmMuYS5ub2RlLGxvY2F0aW9uOmMuYS5vYmplY3R9O3ZhciBWPUgsWT1uKDEyNCksSz1uLm4oWSksUT1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfTt2YXIgWD1mdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbih0KXt2YXIgbj10LndyYXBwZWRDb21wb25lbnRSZWYscj1mdW5jdGlvbihlLHQpe3ZhciBuPXt9O2Zvcih2YXIgciBpbiBlKXQuaW5kZXhPZihyKT49MHx8T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUscikmJihuW3JdPWVbcl0pO3JldHVybiBufSh0LFsid3JhcHBlZENvbXBvbmVudFJlZiJdKTtyZXR1cm4gYS5hLmNyZWF0ZUVsZW1lbnQoTCx7Y2hpbGRyZW46ZnVuY3Rpb24odCl7cmV0dXJuIGEuYS5jcmVhdGVFbGVtZW50KGUsUSh7fSxyLHQse3JlZjpufSkpfX0pfTtyZXR1cm4gdC5kaXNwbGF5TmFtZT0id2l0aFJvdXRlcigiKyhlLmRpc3BsYXlOYW1lfHxlLm5hbWUpKyIpIix0LldyYXBwZWRDb21wb25lbnQ9ZSx0LnByb3BUeXBlcz17d3JhcHBlZENvbXBvbmVudFJlZjpjLmEuZnVuY30sSygpKHQsZSl9O24uZCh0LCJNZW1vcnlSb3V0ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIG19KSxuLmQodCwiUHJvbXB0IixmdW5jdGlvbigpe3JldHVybiBifSksbi5kKHQsIlJlZGlyZWN0IixmdW5jdGlvbigpe3JldHVybiBSfSksbi5kKHQsIlJvdXRlIixmdW5jdGlvbigpe3JldHVybiBMfSksbi5kKHQsIlJvdXRlciIsZnVuY3Rpb24oKXtyZXR1cm4geX0pLG4uZCh0LCJTdGF0aWNSb3V0ZXIiLGZ1bmN0aW9uKCl7cmV0dXJuIHp9KSxuLmQodCwiU3dpdGNoIixmdW5jdGlvbigpe3JldHVybiBWfSksbi5kKHQsImdlbmVyYXRlUGF0aCIsZnVuY3Rpb24oKXtyZXR1cm4gU30pLG4uZCh0LCJtYXRjaFBhdGgiLGZ1bmN0aW9uKCl7cmV0dXJuIE59KSxuLmQodCwid2l0aFJvdXRlciIsZnVuY3Rpb24oKXtyZXR1cm4gWH0pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyFmdW5jdGlvbiBlKCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18mJiJmdW5jdGlvbiI9PXR5cGVvZiBfX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX18uY2hlY2tEQ0UpdHJ5e19fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5jaGVja0RDRShlKX1jYXRjaChlKXtjb25zb2xlLmVycm9yKGUpfX0oKSxlLmV4cG9ydHM9bigyODApfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXsidXNlIHN0cmljdCI7dmFyIGV2YWxBbGxvd2VkPSExO3RyeXtldmFsKCJldmFsQWxsb3dlZCA9IHRydWUiKX1jYXRjaChlKXt9dmFyIHBsYXRmb3JtU3VwcG9ydGVkPSEhT2JqZWN0LnNldFByb3RvdHlwZU9mJiZldmFsQWxsb3dlZDttb2R1bGUuZXhwb3J0cz1fX3dlYnBhY2tfcmVxdWlyZV9fKDI4Myl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9big3OSksbz0obigwKSx7Y2hpbGRDb250ZXh0VHlwZXM6ITAsY29udGV4dFR5cGU6ITAsY29udGV4dFR5cGVzOiEwLGRlZmF1bHRQcm9wczohMCxkaXNwbGF5TmFtZTohMCxnZXREZWZhdWx0UHJvcHM6ITAsZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzOiEwLG1peGluczohMCxwcm9wVHlwZXM6ITAsdHlwZTohMH0pLGk9e25hbWU6ITAsbGVuZ3RoOiEwLHByb3RvdHlwZTohMCxjYWxsZXI6ITAsY2FsbGVlOiEwLGFyZ3VtZW50czohMCxhcml0eTohMH0sYT17fTthW3IuRm9yd2FyZFJlZl09eyQkdHlwZW9mOiEwLHJlbmRlcjohMH07dmFyIHU9T2JqZWN0LmRlZmluZVByb3BlcnR5LGM9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMsbD1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzLHM9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcixmPU9iamVjdC5nZXRQcm90b3R5cGVPZixwPU9iamVjdC5wcm90b3R5cGU7ZS5leHBvcnRzPWZ1bmN0aW9uIGUodCxuLHIpe2lmKCJzdHJpbmciIT10eXBlb2Ygbil7aWYocCl7dmFyIGQ9ZihuKTtkJiZkIT09cCYmZSh0LGQscil9dmFyIGg9YyhuKTtsJiYoaD1oLmNvbmNhdChsKG4pKSk7Zm9yKHZhciB5PWFbdC4kJHR5cGVvZl18fG8sXz1hW24uJCR0eXBlb2ZdfHxvLHY9MDt2PGgubGVuZ3RoOysrdil7dmFyIG09aFt2XTtpZighKGlbbV18fHImJnJbbV18fF8mJl9bbV18fHkmJnlbbV0pKXt2YXIgZz1zKG4sbSk7dHJ5e3UodCxtLGcpfWNhdGNoKGUpe319fXJldHVybiB0fXJldHVybiB0fX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiByKGUpe3ZhciB0LG49ZS5TeW1ib2w7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIG4/bi5vYnNlcnZhYmxlP3Q9bi5vYnNlcnZhYmxlOih0PW4oIm9ic2VydmFibGUiKSxuLm9ic2VydmFibGU9dCk6dD0iQEBvYnNlcnZhYmxlIix0fW4uZCh0LCJhIixmdW5jdGlvbigpe3JldHVybiByfSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9e2NoaWxkQ29udGV4dFR5cGVzOiEwLGNvbnRleHRUeXBlczohMCxkZWZhdWx0UHJvcHM6ITAsZGlzcGxheU5hbWU6ITAsZ2V0RGVmYXVsdFByb3BzOiEwLGdldERlcml2ZWRTdGF0ZUZyb21Qcm9wczohMCxtaXhpbnM6ITAscHJvcFR5cGVzOiEwLHR5cGU6ITB9LG89e25hbWU6ITAsbGVuZ3RoOiEwLHByb3RvdHlwZTohMCxjYWxsZXI6ITAsY2FsbGVlOiEwLGFyZ3VtZW50czohMCxhcml0eTohMH0saT1PYmplY3QuZGVmaW5lUHJvcGVydHksYT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyx1PU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsYz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yLGw9T2JqZWN0LmdldFByb3RvdHlwZU9mLHM9bCYmbChPYmplY3QpO2UuZXhwb3J0cz1mdW5jdGlvbiBlKHQsbixmKXtpZigic3RyaW5nIiE9dHlwZW9mIG4pe2lmKHMpe3ZhciBwPWwobik7cCYmcCE9PXMmJmUodCxwLGYpfXZhciBkPWEobik7dSYmKGQ9ZC5jb25jYXQodShuKSkpO2Zvcih2YXIgaD0wO2g8ZC5sZW5ndGg7KytoKXt2YXIgeT1kW2hdO2lmKCEoclt5XXx8b1t5XXx8ZiYmZlt5XSkpe3ZhciBfPWMobix5KTt0cnl7aSh0LHksXyl9Y2F0Y2goZSl7fX19cmV0dXJuIHR9cmV0dXJuIHR9fSxmdW5jdGlvbihlLHQsbil7big4MSksbig1NCksZS5leHBvcnRzPW4oOCkuU3ltYm9sfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigxMSksbz1uKDgpLGk9big1MCksYT1uKDg0KSx1PW4oMTMpLmY7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PW8uU3ltYm9sfHwoby5TeW1ib2w9aT97fTpyLlN5bWJvbHx8e30pOyJfIj09ZS5jaGFyQXQoMCl8fGUgaW4gdHx8dSh0LGUse3ZhbHVlOmEuZihlKX0pfX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMzkpLG89big1MiksaT1uKDUzKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9cihlKSxuPW8uZjtpZihuKWZvcih2YXIgYSx1PW4oZSksYz1pLmYsbD0wO3UubGVuZ3RoPmw7KWMuY2FsbChlLGE9dVtsKytdKSYmdC5wdXNoKGEpO3JldHVybiB0fX0sZnVuY3Rpb24oZSx0LG4pe24oODEpLG4oMTI5KSxuKDEzMCksbigxMzEpLG4oMTMyKSxuKDEzMyksbigxMzQpLG4oMTM1KSxuKDEzNiksbigxMzcpLG4oMTM4KSxuKDEzOSksbigxNDApLG4oMTQxKSxuKDE0MiksbigxNDMpLG4oMTQ1KSxuKDU0KSxlLmV4cG9ydHM9big4KS5PYmplY3R9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDEpO3Ioci5TLCJPYmplY3QiLHtjcmVhdGU6big0MSl9KX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMSk7cihyLlMrci5GKiFuKDE1KSwiT2JqZWN0Iix7ZGVmaW5lUHJvcGVydHk6bigxMykuZn0pfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigxKTtyKHIuUytyLkYqIW4oMTUpLCJPYmplY3QiLHtkZWZpbmVQcm9wZXJ0aWVzOm4oODcpfSl9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDI1KSxvPW4oMzMpLmY7bigyNikoImdldE93blByb3BlcnR5RGVzY3JpcHRvciIsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtyZXR1cm4gbyhyKGUpLHQpfX0pfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigyMyksbz1uKDI4KTtuKDI2KSgiZ2V0UHJvdG90eXBlT2YiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBvKHIoZSkpfX0pfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigyMyksbz1uKDM5KTtuKDI2KSgia2V5cyIsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIG8ocihlKSl9fSl9LGZ1bmN0aW9uKGUsdCxuKXtuKDI2KSgiZ2V0T3duUHJvcGVydHlOYW1lcyIsZnVuY3Rpb24oKXtyZXR1cm4gbig4OSkuZn0pfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9big1KSxvPW4oMzEpLm9uRnJlZXplO24oMjYpKCJmcmVlemUiLGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZSYmcih0KT9lKG8odCkpOnR9fSl9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDUpLG89bigzMSkub25GcmVlemU7bigyNikoInNlYWwiLGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZSYmcih0KT9lKG8odCkpOnR9fSl9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDUpLG89bigzMSkub25GcmVlemU7bigyNikoInByZXZlbnRFeHRlbnNpb25zIixmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUmJnIodCk/ZShvKHQpKTp0fX0pfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9big1KTtuKDI2KSgiaXNGcm96ZW4iLGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4hcih0KXx8ISFlJiZlKHQpfX0pfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9big1KTtuKDI2KSgiaXNTZWFsZWQiLGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4hcih0KXx8ISFlJiZlKHQpfX0pfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9big1KTtuKDI2KSgiaXNFeHRlbnNpYmxlIixmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuISFyKHQpJiYoIWV8fGUodCkpfX0pfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigxKTtyKHIuUytyLkYsIk9iamVjdCIse2Fzc2lnbjpuKDkxKX0pfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigxKTtyKHIuUywiT2JqZWN0Iix7aXM6bigxNDQpfSl9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPU9iamVjdC5pc3x8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PXQ/MCE9PWV8fDEvZT09MS90OmUhPWUmJnQhPXR9fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigxKTtyKHIuUywiT2JqZWN0Iix7c2V0UHJvdG90eXBlT2Y6big2NSkuc2V0fSl9LGZ1bmN0aW9uKGUsdCxuKXtuKDE0NyksbigxNDkpLG4oMTUwKSxlLmV4cG9ydHM9big4KS5GdW5jdGlvbn0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMSk7cihyLlAsIkZ1bmN0aW9uIix7YmluZDpuKDkyKX0pfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlLHQsbil7dmFyIHI9dm9pZCAwPT09bjtzd2l0Y2godC5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gcj9lKCk6ZS5jYWxsKG4pO2Nhc2UgMTpyZXR1cm4gcj9lKHRbMF0pOmUuY2FsbChuLHRbMF0pO2Nhc2UgMjpyZXR1cm4gcj9lKHRbMF0sdFsxXSk6ZS5jYWxsKG4sdFswXSx0WzFdKTtjYXNlIDM6cmV0dXJuIHI/ZSh0WzBdLHRbMV0sdFsyXSk6ZS5jYWxsKG4sdFswXSx0WzFdLHRbMl0pO2Nhc2UgNDpyZXR1cm4gcj9lKHRbMF0sdFsxXSx0WzJdLHRbM10pOmUuY2FsbChuLHRbMF0sdFsxXSx0WzJdLHRbM10pfXJldHVybiBlLmFwcGx5KG4sdCl9fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigxMykuZixvPUZ1bmN0aW9uLnByb3RvdHlwZSxpPS9eXHMqZnVuY3Rpb24gKFteIChdKikvOyJuYW1lImluIG98fG4oMTUpJiZyKG8sIm5hbWUiLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7dHJ5e3JldHVybigiIit0aGlzKS5tYXRjaChpKVsxXX1jYXRjaChlKXtyZXR1cm4iIn19fSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9big1KSxvPW4oMjgpLGk9big5KSgiaGFzSW5zdGFuY2UiKSxhPUZ1bmN0aW9uLnByb3RvdHlwZTtpIGluIGF8fG4oMTMpLmYoYSxpLHt2YWx1ZTpmdW5jdGlvbihlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdGhpc3x8IXIoZSkpcmV0dXJuITE7aWYoIXIodGhpcy5wcm90b3R5cGUpKXJldHVybiBlIGluc3RhbmNlb2YgdGhpcztmb3IoO2U9byhlKTspaWYodGhpcy5wcm90b3R5cGU9PT1lKXJldHVybiEwO3JldHVybiExfX0pfSxmdW5jdGlvbihlLHQsbil7bigxNTIpLGUuZXhwb3J0cz1uKDgpLnBhcnNlSW50fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigxKSxvPW4oOTMpO3Ioci5HK3IuRioocGFyc2VJbnQhPW8pLHtwYXJzZUludDpvfSl9LGZ1bmN0aW9uKGUsdCxuKXtuKDE1NCksZS5leHBvcnRzPW4oOCkucGFyc2VGbG9hdH0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMSksbz1uKDk0KTtyKHIuRytyLkYqKHBhcnNlRmxvYXQhPW8pLHtwYXJzZUZsb2F0Om99KX0sZnVuY3Rpb24oZSx0LG4pe24oMTU2KSxuKDE1NyksbigxNTgpLG4oMTU5KSxuKDE2MCksbigxNjEpLG4oMTYyKSxuKDE2MyksbigxNjQpLG4oMTY1KSxuKDE2NiksbigxNjcpLGUuZXhwb3J0cz1uKDgpLk51bWJlcn0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDExKSxvPW4oMjIpLGk9bigzNiksYT1uKDY3KSx1PW4oMzQpLGM9big0KSxsPW4oNDUpLmYscz1uKDMzKS5mLGY9bigxMykuZixwPW4oNTUpLnRyaW0sZD1yLk51bWJlcixoPWQseT1kLnByb3RvdHlwZSxfPSJOdW1iZXIiPT1pKG4oNDEpKHkpKSx2PSJ0cmltImluIFN0cmluZy5wcm90b3R5cGUsbT1mdW5jdGlvbihlKXt2YXIgdD11KGUsITEpO2lmKCJzdHJpbmciPT10eXBlb2YgdCYmdC5sZW5ndGg+Mil7dmFyIG4scixvLGk9KHQ9dj90LnRyaW0oKTpwKHQsMykpLmNoYXJDb2RlQXQoMCk7aWYoNDM9PT1pfHw0NT09PWkpe2lmKDg4PT09KG49dC5jaGFyQ29kZUF0KDIpKXx8MTIwPT09bilyZXR1cm4gTmFOfWVsc2UgaWYoNDg9PT1pKXtzd2l0Y2godC5jaGFyQ29kZUF0KDEpKXtjYXNlIDY2OmNhc2UgOTg6cj0yLG89NDk7YnJlYWs7Y2FzZSA3OTpjYXNlIDExMTpyPTgsbz01NTticmVhaztkZWZhdWx0OnJldHVybit0fWZvcih2YXIgYSxjPXQuc2xpY2UoMiksbD0wLHM9Yy5sZW5ndGg7bDxzO2wrKylpZigoYT1jLmNoYXJDb2RlQXQobCkpPDQ4fHxhPm8pcmV0dXJuIE5hTjtyZXR1cm4gcGFyc2VJbnQoYyxyKX19cmV0dXJuK3R9O2lmKCFkKCIgMG8xIil8fCFkKCIwYjEiKXx8ZCgiKzB4MSIpKXtkPWZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg8MT8wOmUsbj10aGlzO3JldHVybiBuIGluc3RhbmNlb2YgZCYmKF8/YyhmdW5jdGlvbigpe3kudmFsdWVPZi5jYWxsKG4pfSk6Ik51bWJlciIhPWkobikpP2EobmV3IGgobSh0KSksbixkKTptKHQpfTtmb3IodmFyIGcsYj1uKDE1KT9sKGgpOiJNQVhfVkFMVUUsTUlOX1ZBTFVFLE5hTixORUdBVElWRV9JTkZJTklUWSxQT1NJVElWRV9JTkZJTklUWSxFUFNJTE9OLGlzRmluaXRlLGlzSW50ZWdlcixpc05hTixpc1NhZmVJbnRlZ2VyLE1BWF9TQUZFX0lOVEVHRVIsTUlOX1NBRkVfSU5URUdFUixwYXJzZUZsb2F0LHBhcnNlSW50LGlzSW50ZWdlciIuc3BsaXQoIiwiKSx3PTA7Yi5sZW5ndGg+dzt3KyspbyhoLGc9Ylt3XSkmJiFvKGQsZykmJmYoZCxnLHMoaCxnKSk7ZC5wcm90b3R5cGU9eSx5LmNvbnN0cnVjdG9yPWQsbigxOCkociwiTnVtYmVyIixkKX19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxKSxvPW4oNDApLGk9big5NSksYT1uKDk2KSx1PTEuLnRvRml4ZWQsYz1NYXRoLmZsb29yLGw9WzAsMCwwLDAsMCwwXSxzPSJOdW1iZXIudG9GaXhlZDogaW5jb3JyZWN0IGludm9jYXRpb24hIixmPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPS0xLHI9dDsrK248Njspcis9ZSpsW25dLGxbbl09ciUxZTcscj1jKHIvMWU3KX0scD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9NixuPTA7LS10Pj0wOyluKz1sW3RdLGxbdF09YyhuL2UpLG49biVlKjFlN30sZD1mdW5jdGlvbigpe2Zvcih2YXIgZT02LHQ9IiI7LS1lPj0wOylpZigiIiE9PXR8fDA9PT1lfHwwIT09bFtlXSl7dmFyIG49U3RyaW5nKGxbZV0pO3Q9IiI9PT10P246dCthLmNhbGwoIjAiLDctbi5sZW5ndGgpK259cmV0dXJuIHR9LGg9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiAwPT09dD9uOnQlMj09MT9oKGUsdC0xLG4qZSk6aChlKmUsdC8yLG4pfTtyKHIuUCtyLkYqKCEhdSYmKCIwLjAwMCIhPT04ZS01LnRvRml4ZWQoMyl8fCIxIiE9PS45LnRvRml4ZWQoMCl8fCIxLjI1IiE9PTEuMjU1LnRvRml4ZWQoMil8fCIxMDAwMDAwMDAwMDAwMDAwMTI4IiE9PSgweGRlMGI2YjNhNzY0MDA4MCkudG9GaXhlZCgwKSl8fCFuKDQpKGZ1bmN0aW9uKCl7dS5jYWxsKHt9KX0pKSwiTnVtYmVyIix7dG9GaXhlZDpmdW5jdGlvbihlKXt2YXIgdCxuLHIsdSxjPWkodGhpcyxzKSxsPW8oZSkseT0iIixfPSIwIjtpZihsPDB8fGw+MjApdGhyb3cgUmFuZ2VFcnJvcihzKTtpZihjIT1jKXJldHVybiJOYU4iO2lmKGM8PS0xZTIxfHxjPj0xZTIxKXJldHVybiBTdHJpbmcoYyk7aWYoYzwwJiYoeT0iLSIsYz0tYyksYz4xZS0yMSlpZihuPSh0PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLG49ZTtuPj00MDk2Oyl0Kz0xMixuLz00MDk2O2Zvcig7bj49MjspdCs9MSxuLz0yO3JldHVybiB0fShjKmgoMiw2OSwxKSktNjkpPDA/YypoKDIsLXQsMSk6Yy9oKDIsdCwxKSxuKj00NTAzNTk5NjI3MzcwNDk2LCh0PTUyLXQpPjApe2ZvcihmKDAsbikscj1sO3I+PTc7KWYoMWU3LDApLHItPTc7Zm9yKGYoaCgxMCxyLDEpLDApLHI9dC0xO3I+PTIzOylwKDE8PDIzKSxyLT0yMztwKDE8PHIpLGYoMSwxKSxwKDIpLF89ZCgpfWVsc2UgZigwLG4pLGYoMTw8LXQsMCksXz1kKCkrYS5jYWxsKCIwIixsKTtyZXR1cm4gXz1sPjA/eSsoKHU9Xy5sZW5ndGgpPD1sPyIwLiIrYS5jYWxsKCIwIixsLXUpK186Xy5zbGljZSgwLHUtbCkrIi4iK18uc2xpY2UodS1sKSk6eStffX0pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMSksbz1uKDQpLGk9big5NSksYT0xLi50b1ByZWNpc2lvbjtyKHIuUCtyLkYqKG8oZnVuY3Rpb24oKXtyZXR1cm4iMSIhPT1hLmNhbGwoMSx2b2lkIDApfSl8fCFvKGZ1bmN0aW9uKCl7YS5jYWxsKHt9KX0pKSwiTnVtYmVyIix7dG9QcmVjaXNpb246ZnVuY3Rpb24oZSl7dmFyIHQ9aSh0aGlzLCJOdW1iZXIjdG9QcmVjaXNpb246IGluY29ycmVjdCBpbnZvY2F0aW9uISIpO3JldHVybiB2b2lkIDA9PT1lP2EuY2FsbCh0KTphLmNhbGwodCxlKX19KX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMSk7cihyLlMsIk51bWJlciIse0VQU0lMT046TWF0aC5wb3coMiwtNTIpfSl9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDEpLG89bigxMSkuaXNGaW5pdGU7cihyLlMsIk51bWJlciIse2lzRmluaXRlOmZ1bmN0aW9uKGUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgZSYmbyhlKX19KX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMSk7cihyLlMsIk51bWJlciIse2lzSW50ZWdlcjpuKDk3KX0pfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigxKTtyKHIuUywiTnVtYmVyIix7aXNOYU46ZnVuY3Rpb24oZSl7cmV0dXJuIGUhPWV9fSl9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDEpLG89big5NyksaT1NYXRoLmFicztyKHIuUywiTnVtYmVyIix7aXNTYWZlSW50ZWdlcjpmdW5jdGlvbihlKXtyZXR1cm4gbyhlKSYmaShlKTw9OTAwNzE5OTI1NDc0MDk5MX19KX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMSk7cihyLlMsIk51bWJlciIse01BWF9TQUZFX0lOVEVHRVI6OTAwNzE5OTI1NDc0MDk5MX0pfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigxKTtyKHIuUywiTnVtYmVyIix7TUlOX1NBRkVfSU5URUdFUjotOTAwNzE5OTI1NDc0MDk5MX0pfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigxKSxvPW4oOTQpO3Ioci5TK3IuRiooTnVtYmVyLnBhcnNlRmxvYXQhPW8pLCJOdW1iZXIiLHtwYXJzZUZsb2F0Om99KX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMSksbz1uKDkzKTtyKHIuUytyLkYqKE51bWJlci5wYXJzZUludCE9byksIk51bWJlciIse3BhcnNlSW50Om99KX0sZnVuY3Rpb24oZSx0LG4pe24oMTY5KSxuKDE3MCksbigxNzEpLG4oMTcyKSxuKDE3MyksbigxNzQpLG4oMTc1KSxuKDE3NiksbigxNzgpLG4oMTc5KSxuKDE4MCksbigxODEpLG4oMTgyKSxuKDE4MyksbigxODQpLG4oMTg1KSxuKDE4NiksZS5leHBvcnRzPW4oOCkuTWF0aH0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMSksbz1uKDk4KSxpPU1hdGguc3FydCxhPU1hdGguYWNvc2g7cihyLlMrci5GKiEoYSYmNzEwPT1NYXRoLmZsb29yKGEoTnVtYmVyLk1BWF9WQUxVRSkpJiZhKDEvMCk9PTEvMCksIk1hdGgiLHthY29zaDpmdW5jdGlvbihlKXtyZXR1cm4oZT0rZSk8MT9OYU46ZT45NDkwNjI2NS42MjQyNTE1Nj9NYXRoLmxvZyhlKStNYXRoLkxOMjpvKGUtMStpKGUtMSkqaShlKzEpKX19KX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMSksbz1NYXRoLmFzaW5oO3Ioci5TK3IuRiohKG8mJjEvbygwKT4wKSwiTWF0aCIse2FzaW5oOmZ1bmN0aW9uIGUodCl7cmV0dXJuIGlzRmluaXRlKHQ9K3QpJiYwIT10P3Q8MD8tZSgtdCk6TWF0aC5sb2codCtNYXRoLnNxcnQodCp0KzEpKTp0fX0pfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigxKSxvPU1hdGguYXRhbmg7cihyLlMrci5GKiEobyYmMS9vKC0wKTwwKSwiTWF0aCIse2F0YW5oOmZ1bmN0aW9uKGUpe3JldHVybiAwPT0oZT0rZSk/ZTpNYXRoLmxvZygoMStlKS8oMS1lKSkvMn19KX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMSksbz1uKDY4KTtyKHIuUywiTWF0aCIse2NicnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIG8oZT0rZSkqTWF0aC5wb3coTWF0aC5hYnMoZSksMS8zKX19KX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMSk7cihyLlMsIk1hdGgiLHtjbHozMjpmdW5jdGlvbihlKXtyZXR1cm4oZT4+Pj0wKT8zMS1NYXRoLmZsb29yKE1hdGgubG9nKGUrLjUpKk1hdGguTE9HMkUpOjMyfX0pfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigxKSxvPU1hdGguZXhwO3Ioci5TLCJNYXRoIix7Y29zaDpmdW5jdGlvbihlKXtyZXR1cm4obyhlPStlKStvKC1lKSkvMn19KX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMSksbz1uKDY5KTtyKHIuUytyLkYqKG8hPU1hdGguZXhwbTEpLCJNYXRoIix7ZXhwbTE6b30pfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigxKTtyKHIuUywiTWF0aCIse2Zyb3VuZDpuKDE3Nyl9KX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oNjgpLG89TWF0aC5wb3csaT1vKDIsLTUyKSxhPW8oMiwtMjMpLHU9bygyLDEyNykqKDItYSksYz1vKDIsLTEyNik7ZS5leHBvcnRzPU1hdGguZnJvdW5kfHxmdW5jdGlvbihlKXt2YXIgdCxuLG89TWF0aC5hYnMoZSksbD1yKGUpO3JldHVybiBvPGM/bCooby9jL2ErMS9pLTEvaSkqYyphOihuPSh0PSgxK2EvaSkqbyktKHQtbykpPnV8fG4hPW4/bCooMS8wKTpsKm59fSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigxKSxvPU1hdGguYWJzO3Ioci5TLCJNYXRoIix7aHlwb3Q6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4scixpPTAsYT0wLHU9YXJndW1lbnRzLmxlbmd0aCxjPTA7YTx1OyljPChuPW8oYXJndW1lbnRzW2ErK10pKT8oaT1pKihyPWMvbikqcisxLGM9bik6aSs9bj4wPyhyPW4vYykqcjpuO3JldHVybiBjPT09MS8wPzEvMDpjKk1hdGguc3FydChpKX19KX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMSksbz1NYXRoLmltdWw7cihyLlMrci5GKm4oNCkoZnVuY3Rpb24oKXtyZXR1cm4tNSE9byg0Mjk0OTY3Mjk1LDUpfHwyIT1vLmxlbmd0aH0pLCJNYXRoIix7aW11bDpmdW5jdGlvbihlLHQpe3ZhciBuPStlLHI9K3Qsbz02NTUzNSZuLGk9NjU1MzUmcjtyZXR1cm4gMHxvKmkrKCg2NTUzNSZuPj4+MTYpKmkrbyooNjU1MzUmcj4+PjE2KTw8MTY+Pj4wKX19KX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMSk7cihyLlMsIk1hdGgiLHtsb2cxMDpmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5sb2coZSkqTWF0aC5MT0cxMEV9fSl9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDEpO3Ioci5TLCJNYXRoIix7bG9nMXA6big5OCl9KX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMSk7cihyLlMsIk1hdGgiLHtsb2cyOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmxvZyhlKS9NYXRoLkxOMn19KX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMSk7cihyLlMsIk1hdGgiLHtzaWduOm4oNjgpfSl9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDEpLG89big2OSksaT1NYXRoLmV4cDtyKHIuUytyLkYqbig0KShmdW5jdGlvbigpe3JldHVybi0yZS0xNyE9IU1hdGguc2luaCgtMmUtMTcpfSksIk1hdGgiLHtzaW5oOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmFicyhlPStlKTwxPyhvKGUpLW8oLWUpKS8yOihpKGUtMSktaSgtZS0xKSkqKE1hdGguRS8yKX19KX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMSksbz1uKDY5KSxpPU1hdGguZXhwO3Ioci5TLCJNYXRoIix7dGFuaDpmdW5jdGlvbihlKXt2YXIgdD1vKGU9K2UpLG49bygtZSk7cmV0dXJuIHQ9PTEvMD8xOm49PTEvMD8tMToodC1uKS8oaShlKStpKC1lKSl9fSl9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDEpO3Ioci5TLCJNYXRoIix7dHJ1bmM6ZnVuY3Rpb24oZSl7cmV0dXJuKGU+MD9NYXRoLmZsb29yOk1hdGguY2VpbCkoZSl9fSl9LGZ1bmN0aW9uKGUsdCxuKXtuKDE4OCksbigxODkpLG4oMTkwKSxuKDU2KSxuKDE5MSksbigxOTIpLG4oMTkzKSxuKDE5NCksbigxOTUpLG4oMTk2KSxuKDE5NyksbigxOTgpLG4oMTk5KSxuKDIwMCksbigyMDEpLG4oMjAyKSxuKDIwMyksbigyMDQpLG4oMjA1KSxuKDIwNiksbigyMDcpLG4oMjA4KSxuKDEwMSksbigxMDIpLG4oMTAzKSxuKDEwNCksZS5leHBvcnRzPW4oOCkuU3RyaW5nfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigxKSxvPW4oNDQpLGk9U3RyaW5nLmZyb21DaGFyQ29kZSxhPVN0cmluZy5mcm9tQ29kZVBvaW50O3Ioci5TK3IuRiooISFhJiYxIT1hLmxlbmd0aCksIlN0cmluZyIse2Zyb21Db2RlUG9pbnQ6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49W10scj1hcmd1bWVudHMubGVuZ3RoLGE9MDtyPmE7KXtpZih0PSthcmd1bWVudHNbYSsrXSxvKHQsMTExNDExMSkhPT10KXRocm93IFJhbmdlRXJyb3IodCsiIGlzIG5vdCBhIHZhbGlkIGNvZGUgcG9pbnQiKTtuLnB1c2godDw2NTUzNj9pKHQpOmkoNTUyOTYrKCh0LT02NTUzNik+PjEwKSx0JTEwMjQrNTYzMjApKX1yZXR1cm4gbi5qb2luKCIiKX19KX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMSksbz1uKDI1KSxpPW4oMjApO3Ioci5TLCJTdHJpbmciLHtyYXc6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PW8oZS5yYXcpLG49aSh0Lmxlbmd0aCkscj1hcmd1bWVudHMubGVuZ3RoLGE9W10sdT0wO24+dTspYS5wdXNoKFN0cmluZyh0W3UrK10pKSx1PHImJmEucHVzaChTdHJpbmcoYXJndW1lbnRzW3VdKSk7cmV0dXJuIGEuam9pbigiIil9fSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7big1NSkoInRyaW0iLGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlKHRoaXMsMyl9fSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxKSxvPW4oOTkpKCExKTtyKHIuUCwiU3RyaW5nIix7Y29kZVBvaW50QXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIG8odGhpcyxlKX19KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDEpLG89bigyMCksaT1uKDcxKSxhPSIiLmVuZHNXaXRoO3Ioci5QK3IuRipuKDczKSgiZW5kc1dpdGgiKSwiU3RyaW5nIix7ZW5kc1dpdGg6ZnVuY3Rpb24oZSl7dmFyIHQ9aSh0aGlzLGUsImVuZHNXaXRoIiksbj1hcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxyPW8odC5sZW5ndGgpLHU9dm9pZCAwPT09bj9yOk1hdGgubWluKG8obiksciksYz1TdHJpbmcoZSk7cmV0dXJuIGE/YS5jYWxsKHQsYyx1KTp0LnNsaWNlKHUtYy5sZW5ndGgsdSk9PT1jfX0pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMSksbz1uKDcxKTtyKHIuUCtyLkYqbig3MykoImluY2x1ZGVzIiksIlN0cmluZyIse2luY2x1ZGVzOmZ1bmN0aW9uKGUpe3JldHVybiEhfm8odGhpcyxlLCJpbmNsdWRlcyIpLmluZGV4T2YoZSxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSl9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDEpO3Ioci5QLCJTdHJpbmciLHtyZXBlYXQ6big5Nil9KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDEpLG89bigyMCksaT1uKDcxKSxhPSIiLnN0YXJ0c1dpdGg7cihyLlArci5GKm4oNzMpKCJzdGFydHNXaXRoIiksIlN0cmluZyIse3N0YXJ0c1dpdGg6ZnVuY3Rpb24oZSl7dmFyIHQ9aSh0aGlzLGUsInN0YXJ0c1dpdGgiKSxuPW8oTWF0aC5taW4oYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsdC5sZW5ndGgpKSxyPVN0cmluZyhlKTtyZXR1cm4gYT9hLmNhbGwodCxyLG4pOnQuc2xpY2UobixuK3IubGVuZ3RoKT09PXJ9fSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bigxOSkoImFuY2hvciIsZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHRoaXMsImEiLCJuYW1lIix0KX19KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuKDE5KSgiYmlnIixmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzLCJiaWciLCIiLCIiKX19KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuKDE5KSgiYmxpbmsiLGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlKHRoaXMsImJsaW5rIiwiIiwiIil9fSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bigxOSkoImJvbGQiLGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlKHRoaXMsImIiLCIiLCIiKX19KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuKDE5KSgiZml4ZWQiLGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlKHRoaXMsInR0IiwiIiwiIil9fSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bigxOSkoImZvbnRjb2xvciIsZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlKHRoaXMsImZvbnQiLCJjb2xvciIsdCl9fSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bigxOSkoImZvbnRzaXplIixmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUodGhpcywiZm9udCIsInNpemUiLHQpfX0pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24oMTkpKCJpdGFsaWNzIixmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzLCJpIiwiIiwiIil9fSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bigxOSkoImxpbmsiLGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZSh0aGlzLCJhIiwiaHJlZiIsdCl9fSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7bigxOSkoInNtYWxsIixmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzLCJzbWFsbCIsIiIsIiIpfX0pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24oMTkpKCJzdHJpa2UiLGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlKHRoaXMsInN0cmlrZSIsIiIsIiIpfX0pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24oMTkpKCJzdWIiLGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlKHRoaXMsInN1YiIsIiIsIiIpfX0pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24oMTkpKCJzdXAiLGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlKHRoaXMsInN1cCIsIiIsIiIpfX0pfSxmdW5jdGlvbihlLHQsbil7bigyMTApLG4oMjExKSxuKDIxMiksbigyMTQpLG4oMjE1KSxlLmV4cG9ydHM9RGF0ZX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMSk7cihyLlMsIkRhdGUiLHtub3c6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKX19KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDEpLG89bigyMyksaT1uKDM0KTtyKHIuUCtyLkYqbig0KShmdW5jdGlvbigpe3JldHVybiBudWxsIT09bmV3IERhdGUoTmFOKS50b0pTT04oKXx8MSE9PURhdGUucHJvdG90eXBlLnRvSlNPTi5jYWxsKHt0b0lTT1N0cmluZzpmdW5jdGlvbigpe3JldHVybiAxfX0pfSksIkRhdGUiLHt0b0pTT046ZnVuY3Rpb24oZSl7dmFyIHQ9byh0aGlzKSxuPWkodCk7cmV0dXJuIm51bWJlciIhPXR5cGVvZiBufHxpc0Zpbml0ZShuKT90LnRvSVNPU3RyaW5nKCk6bnVsbH19KX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMSksbz1uKDIxMyk7cihyLlArci5GKihEYXRlLnByb3RvdHlwZS50b0lTT1N0cmluZyE9PW8pLCJEYXRlIix7dG9JU09TdHJpbmc6b30pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNCksbz1EYXRlLnByb3RvdHlwZS5nZXRUaW1lLGk9RGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcsYT1mdW5jdGlvbihlKXtyZXR1cm4gZT45P2U6IjAiK2V9O2UuZXhwb3J0cz1yKGZ1bmN0aW9uKCl7cmV0dXJuIjAzODUtMDctMjVUMDc6MDY6MzkuOTk5WiIhPWkuY2FsbChuZXcgRGF0ZSgtNWUxMy0xKSl9KXx8IXIoZnVuY3Rpb24oKXtpLmNhbGwobmV3IERhdGUoTmFOKSl9KT9mdW5jdGlvbigpe2lmKCFpc0Zpbml0ZShvLmNhbGwodGhpcykpKXRocm93IFJhbmdlRXJyb3IoIkludmFsaWQgdGltZSB2YWx1ZSIpO3ZhciBlPXRoaXMsdD1lLmdldFVUQ0Z1bGxZZWFyKCksbj1lLmdldFVUQ01pbGxpc2Vjb25kcygpLHI9dDwwPyItIjp0Pjk5OTk/IisiOiIiO3JldHVybiByKygiMDAwMDAiK01hdGguYWJzKHQpKS5zbGljZShyPy02Oi00KSsiLSIrYShlLmdldFVUQ01vbnRoKCkrMSkrIi0iK2EoZS5nZXRVVENEYXRlKCkpKyJUIithKGUuZ2V0VVRDSG91cnMoKSkrIjoiK2EoZS5nZXRVVENNaW51dGVzKCkpKyI6IithKGUuZ2V0VVRDU2Vjb25kcygpKSsiLiIrKG4+OTk/bjoiMCIrYShuKSkrIloifTppfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9RGF0ZS5wcm90b3R5cGUsbz1yLnRvU3RyaW5nLGk9ci5nZXRUaW1lO25ldyBEYXRlKE5hTikrIiIhPSJJbnZhbGlkIERhdGUiJiZuKDE4KShyLCJ0b1N0cmluZyIsZnVuY3Rpb24oKXt2YXIgZT1pLmNhbGwodGhpcyk7cmV0dXJuIGU9PWU/by5jYWxsKHRoaXMpOiJJbnZhbGlkIERhdGUifSl9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDkpKCJ0b1ByaW1pdGl2ZSIpLG89RGF0ZS5wcm90b3R5cGU7ciBpbiBvfHxuKDI3KShvLHIsbigyMTYpKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDMpLG89bigzNCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKCJzdHJpbmciIT09ZSYmIm51bWJlciIhPT1lJiYiZGVmYXVsdCIhPT1lKXRocm93IFR5cGVFcnJvcigiSW5jb3JyZWN0IGhpbnQiKTtyZXR1cm4gbyhyKHRoaXMpLCJudW1iZXIiIT1lKX19LGZ1bmN0aW9uKGUsdCxuKXtuKDU2KSxuKDIxOCksbigyMTkpLG4oMjIwKSxuKDIyMSksbigyMjIpLG4oMjIzKSxuKDIyNCksbigyMjcpLG4oMjI4KSxuKDIyOSksbigyMzApLG4oMjMxKSxuKDIzMiksbigyMzMpLG4oMjM0KSxuKDIzNSksbigyMzcpLG4oMjM5KSxuKDI0MCksbigyNDEpLG4oMTExKSxlLmV4cG9ydHM9big4KS5BcnJheX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMSk7cihyLlMsIkFycmF5Iix7aXNBcnJheTpuKDY0KX0pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMzgpLG89bigxKSxpPW4oMjMpLGE9bigxMDUpLHU9bigxMDYpLGM9bigyMCksbD1uKDEwNykscz1uKDEwOCk7byhvLlMrby5GKiFuKDEwOSkoZnVuY3Rpb24oZSl7QXJyYXkuZnJvbShlKX0pLCJBcnJheSIse2Zyb206ZnVuY3Rpb24oZSl7dmFyIHQsbixvLGYscD1pKGUpLGQ9ImZ1bmN0aW9uIj09dHlwZW9mIHRoaXM/dGhpczpBcnJheSxoPWFyZ3VtZW50cy5sZW5ndGgseT1oPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxfPXZvaWQgMCE9PXksdj0wLG09cyhwKTtpZihfJiYoeT1yKHksaD4yP2FyZ3VtZW50c1syXTp2b2lkIDAsMikpLG51bGw9PW18fGQ9PUFycmF5JiZ1KG0pKWZvcihuPW5ldyBkKHQ9YyhwLmxlbmd0aCkpO3Q+djt2KyspbChuLHYsXz95KHBbdl0sdik6cFt2XSk7ZWxzZSBmb3IoZj1tLmNhbGwocCksbj1uZXcgZDshKG89Zi5uZXh0KCkpLmRvbmU7disrKWwobix2LF8/YShmLHksW28udmFsdWUsdl0sITApOm8udmFsdWUpO3JldHVybiBuLmxlbmd0aD12LG59fSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxKSxvPW4oMTA3KTtyKHIuUytyLkYqbig0KShmdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt9cmV0dXJuIShBcnJheS5vZi5jYWxsKGUpaW5zdGFuY2VvZiBlKX0pLCJBcnJheSIse29mOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPTAsdD1hcmd1bWVudHMubGVuZ3RoLG49bmV3KCJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzP3RoaXM6QXJyYXkpKHQpO3Q+ZTspbyhuLGUsYXJndW1lbnRzW2UrK10pO3JldHVybiBuLmxlbmd0aD10LG59fSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxKSxvPW4oMjUpLGk9W10uam9pbjtyKHIuUCtyLkYqKG4oNDMpIT1PYmplY3R8fCFuKDI0KShpKSksIkFycmF5Iix7am9pbjpmdW5jdGlvbihlKXtyZXR1cm4gaS5jYWxsKG8odGhpcyksdm9pZCAwPT09ZT8iLCI6ZSl9fSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxKSxvPW4oODgpLGk9bigzNiksYT1uKDQ0KSx1PW4oMjApLGM9W10uc2xpY2U7cihyLlArci5GKm4oNCkoZnVuY3Rpb24oKXtvJiZjLmNhbGwobyl9KSwiQXJyYXkiLHtzbGljZTpmdW5jdGlvbihlLHQpe3ZhciBuPXUodGhpcy5sZW5ndGgpLHI9aSh0aGlzKTtpZih0PXZvaWQgMD09PXQ/bjp0LCJBcnJheSI9PXIpcmV0dXJuIGMuY2FsbCh0aGlzLGUsdCk7Zm9yKHZhciBvPWEoZSxuKSxsPWEodCxuKSxzPXUobC1vKSxmPW5ldyBBcnJheShzKSxwPTA7cDxzO3ArKylmW3BdPSJTdHJpbmciPT1yP3RoaXMuY2hhckF0KG8rcCk6dGhpc1tvK3BdO3JldHVybiBmfX0pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMSksbz1uKDM1KSxpPW4oMjMpLGE9big0KSx1PVtdLnNvcnQsYz1bMSwyLDNdO3Ioci5QK3IuRiooYShmdW5jdGlvbigpe2Muc29ydCh2b2lkIDApfSl8fCFhKGZ1bmN0aW9uKCl7Yy5zb3J0KG51bGwpfSl8fCFuKDI0KSh1KSksIkFycmF5Iix7c29ydDpmdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZT91LmNhbGwoaSh0aGlzKSk6dS5jYWxsKGkodGhpcyksbyhlKSl9fSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxKSxvPW4oMjkpKDApLGk9bigyNCkoW10uZm9yRWFjaCwhMCk7cihyLlArci5GKiFpLCJBcnJheSIse2ZvckVhY2g6ZnVuY3Rpb24oZSl7cmV0dXJuIG8odGhpcyxlLGFyZ3VtZW50c1sxXSl9fSl9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDIyNik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIG5ldyhyKGUpKSh0KX19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDUpLG89big2NCksaT1uKDkpKCJzcGVjaWVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiBvKGUpJiYoImZ1bmN0aW9uIiE9dHlwZW9mKHQ9ZS5jb25zdHJ1Y3Rvcil8fHQhPT1BcnJheSYmIW8odC5wcm90b3R5cGUpfHwodD12b2lkIDApLHIodCkmJm51bGw9PT0odD10W2ldKSYmKHQ9dm9pZCAwKSksdm9pZCAwPT09dD9BcnJheTp0fX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDEpLG89bigyOSkoMSk7cihyLlArci5GKiFuKDI0KShbXS5tYXAsITApLCJBcnJheSIse21hcDpmdW5jdGlvbihlKXtyZXR1cm4gbyh0aGlzLGUsYXJndW1lbnRzWzFdKX19KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDEpLG89bigyOSkoMik7cihyLlArci5GKiFuKDI0KShbXS5maWx0ZXIsITApLCJBcnJheSIse2ZpbHRlcjpmdW5jdGlvbihlKXtyZXR1cm4gbyh0aGlzLGUsYXJndW1lbnRzWzFdKX19KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDEpLG89bigyOSkoMyk7cihyLlArci5GKiFuKDI0KShbXS5zb21lLCEwKSwiQXJyYXkiLHtzb21lOmZ1bmN0aW9uKGUpe3JldHVybiBvKHRoaXMsZSxhcmd1bWVudHNbMV0pfX0pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMSksbz1uKDI5KSg0KTtyKHIuUCtyLkYqIW4oMjQpKFtdLmV2ZXJ5LCEwKSwiQXJyYXkiLHtldmVyeTpmdW5jdGlvbihlKXtyZXR1cm4gbyh0aGlzLGUsYXJndW1lbnRzWzFdKX19KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDEpLG89bigxMTApO3Ioci5QK3IuRiohbigyNCkoW10ucmVkdWNlLCEwKSwiQXJyYXkiLHtyZWR1Y2U6ZnVuY3Rpb24oZSl7cmV0dXJuIG8odGhpcyxlLGFyZ3VtZW50cy5sZW5ndGgsYXJndW1lbnRzWzFdLCExKX19KX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDEpLG89bigxMTApO3Ioci5QK3IuRiohbigyNCkoW10ucmVkdWNlUmlnaHQsITApLCJBcnJheSIse3JlZHVjZVJpZ2h0OmZ1bmN0aW9uKGUpe3JldHVybiBvKHRoaXMsZSxhcmd1bWVudHMubGVuZ3RoLGFyZ3VtZW50c1sxXSwhMCl9fSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxKSxvPW4oODYpKCExKSxpPVtdLmluZGV4T2YsYT0hIWkmJjEvWzFdLmluZGV4T2YoMSwtMCk8MDtyKHIuUCtyLkYqKGF8fCFuKDI0KShpKSksIkFycmF5Iix7aW5kZXhPZjpmdW5jdGlvbihlKXtyZXR1cm4gYT9pLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8MDpvKHRoaXMsZSxhcmd1bWVudHNbMV0pfX0pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMSksbz1uKDI1KSxpPW4oNDApLGE9bigyMCksdT1bXS5sYXN0SW5kZXhPZixjPSEhdSYmMS9bMV0ubGFzdEluZGV4T2YoMSwtMCk8MDtyKHIuUCtyLkYqKGN8fCFuKDI0KSh1KSksIkFycmF5Iix7bGFzdEluZGV4T2Y6ZnVuY3Rpb24oZSl7aWYoYylyZXR1cm4gdS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fDA7dmFyIHQ9byh0aGlzKSxuPWEodC5sZW5ndGgpLHI9bi0xO2Zvcihhcmd1bWVudHMubGVuZ3RoPjEmJihyPU1hdGgubWluKHIsaShhcmd1bWVudHNbMV0pKSkscjwwJiYocj1uK3IpO3I+PTA7ci0tKWlmKHIgaW4gdCYmdFtyXT09PWUpcmV0dXJuIHJ8fDA7cmV0dXJuLTF9fSl9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDEpO3Ioci5QLCJBcnJheSIse2NvcHlXaXRoaW46bigyMzYpfSksbig0NykoImNvcHlXaXRoaW4iKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDIzKSxvPW4oNDQpLGk9bigyMCk7ZS5leHBvcnRzPVtdLmNvcHlXaXRoaW58fGZ1bmN0aW9uKGUsdCl7dmFyIG49cih0aGlzKSxhPWkobi5sZW5ndGgpLHU9byhlLGEpLGM9byh0LGEpLGw9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDAscz1NYXRoLm1pbigodm9pZCAwPT09bD9hOm8obCxhKSktYyxhLXUpLGY9MTtmb3IoYzx1JiZ1PGMrcyYmKGY9LTEsYys9cy0xLHUrPXMtMSk7cy0tID4wOyljIGluIG4/blt1XT1uW2NdOmRlbGV0ZSBuW3VdLHUrPWYsYys9ZjtyZXR1cm4gbn19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDEpO3Ioci5QLCJBcnJheSIse2ZpbGw6bigyMzgpfSksbig0NykoImZpbGwiKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDIzKSxvPW4oNDQpLGk9bigyMCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1yKHRoaXMpLG49aSh0Lmxlbmd0aCksYT1hcmd1bWVudHMubGVuZ3RoLHU9byhhPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxuKSxjPWE+Mj9hcmd1bWVudHNbMl06dm9pZCAwLGw9dm9pZCAwPT09Yz9uOm8oYyxuKTtsPnU7KXRbdSsrXT1lO3JldHVybiB0fX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDEpLG89bigyOSkoNSksaT0hMDsiZmluZCJpbltdJiZBcnJheSgxKS5maW5kKGZ1bmN0aW9uKCl7aT0hMX0pLHIoci5QK3IuRippLCJBcnJheSIse2ZpbmQ6ZnVuY3Rpb24oZSl7cmV0dXJuIG8odGhpcyxlLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KSxuKDQ3KSgiZmluZCIpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oMSksbz1uKDI5KSg2KSxpPSJmaW5kSW5kZXgiLGE9ITA7aSBpbltdJiZBcnJheSgxKVtpXShmdW5jdGlvbigpe2E9ITF9KSxyKHIuUCtyLkYqYSwiQXJyYXkiLHtmaW5kSW5kZXg6ZnVuY3Rpb24oZSl7cmV0dXJuIG8odGhpcyxlLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX19KSxuKDQ3KShpKX0sZnVuY3Rpb24oZSx0LG4pe24oNzQpKCJBcnJheSIpfSxmdW5jdGlvbihlLHQsbil7bigyNDMpLG4oMjQ0KSxuKDExMyksbigxMDEpLG4oMTAyKSxuKDEwMyksbigxMDQpLGUuZXhwb3J0cz1uKDgpLlJlZ0V4cH0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMTEpLG89big2NyksaT1uKDEzKS5mLGE9big0NSkuZix1PW4oNzIpLGM9big3NSksbD1yLlJlZ0V4cCxzPWwsZj1sLnByb3RvdHlwZSxwPS9hL2csZD0vYS9nLGg9bmV3IGwocCkhPT1wO2lmKG4oMTUpJiYoIWh8fG4oNCkoZnVuY3Rpb24oKXtyZXR1cm4gZFtuKDkpKCJtYXRjaCIpXT0hMSxsKHApIT1wfHxsKGQpPT1kfHwiL2EvaSIhPWwocCwiaSIpfSkpKXtsPWZ1bmN0aW9uKGUsdCl7dmFyIG49dGhpcyBpbnN0YW5jZW9mIGwscj11KGUpLGk9dm9pZCAwPT09dDtyZXR1cm4hbiYmciYmZS5jb25zdHJ1Y3Rvcj09PWwmJmk/ZTpvKGg/bmV3IHMociYmIWk/ZS5zb3VyY2U6ZSx0KTpzKChyPWUgaW5zdGFuY2VvZiBsKT9lLnNvdXJjZTplLHImJmk/Yy5jYWxsKGUpOnQpLG4/dGhpczpmLGwpfTtmb3IodmFyIHk9ZnVuY3Rpb24oZSl7ZSBpbiBsfHxpKGwsZSx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzW2VdfSxzZXQ6ZnVuY3Rpb24odCl7c1tlXT10fX0pfSxfPWEocyksdj0wO18ubGVuZ3RoPnY7KXkoX1t2KytdKTtmLmNvbnN0cnVjdG9yPWwsbC5wcm90b3R5cGU9ZixuKDE4KShyLCJSZWdFeHAiLGwpfW4oNzQpKCJSZWdFeHAiKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtuKDExMyk7dmFyIHI9bigzKSxvPW4oNzUpLGk9bigxNSksYT0vLi8udG9TdHJpbmcsdT1mdW5jdGlvbihlKXtuKDE4KShSZWdFeHAucHJvdG90eXBlLCJ0b1N0cmluZyIsZSwhMCl9O24oNCkoZnVuY3Rpb24oKXtyZXR1cm4iL2EvYiIhPWEuY2FsbCh7c291cmNlOiJhIixmbGFnczoiYiJ9KX0pP3UoZnVuY3Rpb24oKXt2YXIgZT1yKHRoaXMpO3JldHVybiIvIi5jb25jYXQoZS5zb3VyY2UsIi8iLCJmbGFncyJpbiBlP2UuZmxhZ3M6IWkmJmUgaW5zdGFuY2VvZiBSZWdFeHA/by5jYWxsKGUpOnZvaWQgMCl9KToidG9TdHJpbmciIT1hLm5hbWUmJnUoZnVuY3Rpb24oKXtyZXR1cm4gYS5jYWxsKHRoaXMpfSl9LGZ1bmN0aW9uKGUsdCxuKXtuKDU0KSxuKDU2KSxuKDExNCksbigxMTUpLGUuZXhwb3J0cz1uKDgpLk1hcH0sZnVuY3Rpb24oZSx0LG4pe24oNTQpLG4oNTYpLG4oMTE0KSxuKDExNyksZS5leHBvcnRzPW4oOCkuU2V0fSxmdW5jdGlvbihlLHQsbil7KGZ1bmN0aW9uKGUsdCl7Ci8qISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpDb3B5cmlnaHQgKEMpIE1pY3Jvc29mdC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZQp0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZQpMaWNlbnNlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAoKVEhJUyBDT0RFIElTIFBST1ZJREVEIE9OIEFOICpBUyBJUyogQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQpLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIEFOWSBJTVBMSUVECldBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsCk1FUkNIQU5UQUJMSVRZIE9SIE5PTi1JTkZSSU5HRU1FTlQuCgpTZWUgdGhlIEFwYWNoZSBWZXJzaW9uIDIuMCBMaWNlbnNlIGZvciBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMKYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLwp2YXIgbjshZnVuY3Rpb24obil7IWZ1bmN0aW9uKHIpe3ZhciBvPSJvYmplY3QiPT10eXBlb2YgdD90OiJvYmplY3QiPT10eXBlb2Ygc2VsZj9zZWxmOiJvYmplY3QiPT10eXBlb2YgdGhpcz90aGlzOkZ1bmN0aW9uKCJyZXR1cm4gdGhpczsiKSgpLGk9YShuKTtmdW5jdGlvbiBhKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKG4scil7ImZ1bmN0aW9uIiE9dHlwZW9mIGVbbl0mJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4se2NvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMCx2YWx1ZTpyfSksdCYmdChuLHIpfX12b2lkIDA9PT1vLlJlZmxlY3Q/by5SZWZsZWN0PW46aT1hKG8uUmVmbGVjdCxpKSxmdW5jdGlvbih0KXt2YXIgbj1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LHI9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCxvPXImJnZvaWQgMCE9PVN5bWJvbC50b1ByaW1pdGl2ZT9TeW1ib2wudG9QcmltaXRpdmU6IkBAdG9QcmltaXRpdmUiLGk9ciYmdm9pZCAwIT09U3ltYm9sLml0ZXJhdG9yP1N5bWJvbC5pdGVyYXRvcjoiQEBpdGVyYXRvciIsYT0iZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmNyZWF0ZSx1PXtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSxjPSFhJiYhdSxsPXtjcmVhdGU6YT9mdW5jdGlvbigpe3JldHVybiBJKE9iamVjdC5jcmVhdGUobnVsbCkpfTp1P2Z1bmN0aW9uKCl7cmV0dXJuIEkoe19fcHJvdG9fXzpudWxsfSl9OmZ1bmN0aW9uKCl7cmV0dXJuIEkoe30pfSxoYXM6Yz9mdW5jdGlvbihlLHQpe3JldHVybiBuLmNhbGwoZSx0KX06ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdCBpbiBlfSxnZXQ6Yz9mdW5jdGlvbihlLHQpe3JldHVybiBuLmNhbGwoZSx0KT9lW3RdOnZvaWQgMH06ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0XX19LHM9T2JqZWN0LmdldFByb3RvdHlwZU9mKEZ1bmN0aW9uKSxmPSJvYmplY3QiPT10eXBlb2YgZSYmT2JqZWN0KHtBUFBfUEFUSDoiIn0pJiYidHJ1ZSI9PT1PYmplY3Qoe0FQUF9QQVRIOiIifSkuUkVGTEVDVF9NRVRBREFUQV9VU0VfTUFQX1BPTFlGSUxMLHA9Znx8ImZ1bmN0aW9uIiE9dHlwZW9mIE1hcHx8ImZ1bmN0aW9uIiE9dHlwZW9mIE1hcC5wcm90b3R5cGUuZW50cmllcz9mdW5jdGlvbigpe3ZhciBlPXt9LHQ9W10sbj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LG4pe3RoaXMuX2luZGV4PTAsdGhpcy5fa2V5cz1lLHRoaXMuX3ZhbHVlcz10LHRoaXMuX3NlbGVjdG9yPW59cmV0dXJuIGUucHJvdG90eXBlWyJAQGl0ZXJhdG9yIl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZS5wcm90b3R5cGVbaV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sZS5wcm90b3R5cGUubmV4dD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX2luZGV4O2lmKGU+PTAmJmU8dGhpcy5fa2V5cy5sZW5ndGgpe3ZhciBuPXRoaXMuX3NlbGVjdG9yKHRoaXMuX2tleXNbZV0sdGhpcy5fdmFsdWVzW2VdKTtyZXR1cm4gZSsxPj10aGlzLl9rZXlzLmxlbmd0aD8odGhpcy5faW5kZXg9LTEsdGhpcy5fa2V5cz10LHRoaXMuX3ZhbHVlcz10KTp0aGlzLl9pbmRleCsrLHt2YWx1ZTpuLGRvbmU6ITF9fXJldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19LGUucHJvdG90eXBlLnRocm93PWZ1bmN0aW9uKGUpe3Rocm93IHRoaXMuX2luZGV4Pj0wJiYodGhpcy5faW5kZXg9LTEsdGhpcy5fa2V5cz10LHRoaXMuX3ZhbHVlcz10KSxlfSxlLnByb3RvdHlwZS5yZXR1cm49ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2luZGV4Pj0wJiYodGhpcy5faW5kZXg9LTEsdGhpcy5fa2V5cz10LHRoaXMuX3ZhbHVlcz10KSx7dmFsdWU6ZSxkb25lOiEwfX0sZX0oKTtyZXR1cm4gZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7dGhpcy5fa2V5cz1bXSx0aGlzLl92YWx1ZXM9W10sdGhpcy5fY2FjaGVLZXk9ZSx0aGlzLl9jYWNoZUluZGV4PS0yfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInNpemUiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fa2V5cy5sZW5ndGh9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksdC5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9maW5kKGUsITEpPj0wfSx0LnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fZmluZChlLCExKTtyZXR1cm4gdD49MD90aGlzLl92YWx1ZXNbdF06dm9pZCAwfSx0LnByb3RvdHlwZS5zZXQ9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9maW5kKGUsITApO3JldHVybiB0aGlzLl92YWx1ZXNbbl09dCx0aGlzfSx0LnByb3RvdHlwZS5kZWxldGU9ZnVuY3Rpb24odCl7dmFyIG49dGhpcy5fZmluZCh0LCExKTtpZihuPj0wKXtmb3IodmFyIHI9dGhpcy5fa2V5cy5sZW5ndGgsbz1uKzE7bzxyO28rKyl0aGlzLl9rZXlzW28tMV09dGhpcy5fa2V5c1tvXSx0aGlzLl92YWx1ZXNbby0xXT10aGlzLl92YWx1ZXNbb107cmV0dXJuIHRoaXMuX2tleXMubGVuZ3RoLS0sdGhpcy5fdmFsdWVzLmxlbmd0aC0tLHQ9PT10aGlzLl9jYWNoZUtleSYmKHRoaXMuX2NhY2hlS2V5PWUsdGhpcy5fY2FjaGVJbmRleD0tMiksITB9cmV0dXJuITF9LHQucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fa2V5cy5sZW5ndGg9MCx0aGlzLl92YWx1ZXMubGVuZ3RoPTAsdGhpcy5fY2FjaGVLZXk9ZSx0aGlzLl9jYWNoZUluZGV4PS0yfSx0LnByb3RvdHlwZS5rZXlzPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBuKHRoaXMuX2tleXMsdGhpcy5fdmFsdWVzLHIpfSx0LnByb3RvdHlwZS52YWx1ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcy5fa2V5cyx0aGlzLl92YWx1ZXMsbyl9LHQucHJvdG90eXBlLmVudHJpZXM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IG4odGhpcy5fa2V5cyx0aGlzLl92YWx1ZXMsYSl9LHQucHJvdG90eXBlWyJAQGl0ZXJhdG9yIl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lbnRyaWVzKCl9LHQucHJvdG90eXBlW2ldPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZW50cmllcygpfSx0LnByb3RvdHlwZS5fZmluZD1mdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLl9jYWNoZUtleSE9PWUmJih0aGlzLl9jYWNoZUluZGV4PXRoaXMuX2tleXMuaW5kZXhPZih0aGlzLl9jYWNoZUtleT1lKSksdGhpcy5fY2FjaGVJbmRleDwwJiZ0JiYodGhpcy5fY2FjaGVJbmRleD10aGlzLl9rZXlzLmxlbmd0aCx0aGlzLl9rZXlzLnB1c2goZSksdGhpcy5fdmFsdWVzLnB1c2godm9pZCAwKSksdGhpcy5fY2FjaGVJbmRleH0sdH0oKTtmdW5jdGlvbiByKGUsdCl7cmV0dXJuIGV9ZnVuY3Rpb24gbyhlLHQpe3JldHVybiB0fWZ1bmN0aW9uIGEoZSx0KXtyZXR1cm5bZSx0XX19KCk6TWFwLGQ9Znx8ImZ1bmN0aW9uIiE9dHlwZW9mIFNldHx8ImZ1bmN0aW9uIiE9dHlwZW9mIFNldC5wcm90b3R5cGUuZW50cmllcz9mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLl9tYXA9bmV3IHB9cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwic2l6ZSIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXAuc2l6ZX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxlLnByb3RvdHlwZS5oYXM9ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX21hcC5oYXMoZSl9LGUucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbWFwLnNldChlLGUpLHRoaXN9LGUucHJvdG90eXBlLmRlbGV0ZT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbWFwLmRlbGV0ZShlKX0sZS5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLl9tYXAuY2xlYXIoKX0sZS5wcm90b3R5cGUua2V5cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9tYXAua2V5cygpfSxlLnByb3RvdHlwZS52YWx1ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwLnZhbHVlcygpfSxlLnByb3RvdHlwZS5lbnRyaWVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21hcC5lbnRyaWVzKCl9LGUucHJvdG90eXBlWyJAQGl0ZXJhdG9yIl09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5rZXlzKCl9LGUucHJvdG90eXBlW2ldPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMua2V5cygpfSxlfSgpOlNldCxoPW5ldyhmfHwiZnVuY3Rpb24iIT10eXBlb2YgV2Vha01hcD9mdW5jdGlvbigpe3ZhciBlPTE2LHQ9bC5jcmVhdGUoKSxyPW8oKTtyZXR1cm4gZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5fa2V5PW8oKX1yZXR1cm4gZS5wcm90b3R5cGUuaGFzPWZ1bmN0aW9uKGUpe3ZhciB0PWkoZSwhMSk7cmV0dXJuIHZvaWQgMCE9PXQmJmwuaGFzKHQsdGhpcy5fa2V5KX0sZS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKGUpe3ZhciB0PWkoZSwhMSk7cmV0dXJuIHZvaWQgMCE9PXQ/bC5nZXQodCx0aGlzLl9rZXkpOnZvaWQgMH0sZS5wcm90b3R5cGUuc2V0PWZ1bmN0aW9uKGUsdCl7dmFyIG49aShlLCEwKTtyZXR1cm4gblt0aGlzLl9rZXldPXQsdGhpc30sZS5wcm90b3R5cGUuZGVsZXRlPWZ1bmN0aW9uKGUpe3ZhciB0PWkoZSwhMSk7cmV0dXJuIHZvaWQgMCE9PXQmJmRlbGV0ZSB0W3RoaXMuX2tleV19LGUucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5fa2V5PW8oKX0sZX0oKTtmdW5jdGlvbiBvKCl7dmFyIGU7ZG97ZT0iQEBXZWFrTWFwQEAiK3UoKX13aGlsZShsLmhhcyh0LGUpKTtyZXR1cm4gdFtlXT0hMCxlfWZ1bmN0aW9uIGkoZSx0KXtpZighbi5jYWxsKGUscikpe2lmKCF0KXJldHVybjtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLHt2YWx1ZTpsLmNyZWF0ZSgpfSl9cmV0dXJuIGVbcl19ZnVuY3Rpb24gYShlLHQpe2Zvcih2YXIgbj0wO248dDsrK24pZVtuXT0yNTUqTWF0aC5yYW5kb20oKXwwO3JldHVybiBlfWZ1bmN0aW9uIHUoKXt2YXIgdD1mdW5jdGlvbihlKXtpZigiZnVuY3Rpb24iPT10eXBlb2YgVWludDhBcnJheSlyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIGNyeXB0bz9jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKG5ldyBVaW50OEFycmF5KGUpKToidW5kZWZpbmVkIiE9dHlwZW9mIG1zQ3J5cHRvP21zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDhBcnJheShlKSk6YShuZXcgVWludDhBcnJheShlKSxlKTtyZXR1cm4gYShuZXcgQXJyYXkoZSksZSl9KGUpO3RbNl09NzkmdFs2XXw2NCx0WzhdPTE5MSZ0WzhdfDEyODtmb3IodmFyIG49IiIscj0wO3I8ZTsrK3Ipe3ZhciBvPXRbcl07NCE9PXImJjYhPT1yJiY4IT09cnx8KG4rPSItIiksbzwxNiYmKG4rPSIwIiksbis9by50b1N0cmluZygxNikudG9Mb3dlckNhc2UoKX1yZXR1cm4gbn19KCk6V2Vha01hcCk7ZnVuY3Rpb24geShlLHQsbil7dmFyIHI9aC5nZXQoZSk7aWYodyhyKSl7aWYoIW4pcmV0dXJuO3I9bmV3IHAsaC5zZXQoZSxyKX12YXIgbz1yLmdldCh0KTtpZih3KG8pKXtpZighbilyZXR1cm47bz1uZXcgcCxyLnNldCh0LG8pfXJldHVybiBvfWZ1bmN0aW9uIF8oZSx0LG4pe3ZhciByPXkodCxuLCExKTtyZXR1cm4hdyhyKSYmISFyLmhhcyhlKX1mdW5jdGlvbiB2KGUsdCxuKXt2YXIgcj15KHQsbiwhMSk7aWYoIXcocikpcmV0dXJuIHIuZ2V0KGUpfWZ1bmN0aW9uIG0oZSx0LG4scil7dmFyIG89eShuLHIsITApO28uc2V0KGUsdCl9ZnVuY3Rpb24gZyhlLHQpe3ZhciBuPVtdLHI9eShlLHQsITEpO2lmKHcocikpcmV0dXJuIG47Zm9yKHZhciBvPXIua2V5cygpLGE9ZnVuY3Rpb24oZSl7dmFyIHQ9QyhlLGkpO2lmKCFQKHQpKXRocm93IG5ldyBUeXBlRXJyb3I7dmFyIG49dC5jYWxsKGUpO2lmKCFUKG4pKXRocm93IG5ldyBUeXBlRXJyb3I7cmV0dXJuIG59KG8pLHU9MDs7KXt2YXIgYz1rKGEpO2lmKCFjKXJldHVybiBuLmxlbmd0aD11LG47dmFyIGw9Yy52YWx1ZTt0cnl7blt1XT1sfWNhdGNoKGUpe3RyeXtOKGEpfWZpbmFsbHl7dGhyb3cgZX19dSsrfX1mdW5jdGlvbiBiKGUpe2lmKG51bGw9PT1lKXJldHVybiAxO3N3aXRjaCh0eXBlb2YgZSl7Y2FzZSJ1bmRlZmluZWQiOnJldHVybiAwO2Nhc2UiYm9vbGVhbiI6cmV0dXJuIDI7Y2FzZSJzdHJpbmciOnJldHVybiAzO2Nhc2Uic3ltYm9sIjpyZXR1cm4gNDtjYXNlIm51bWJlciI6cmV0dXJuIDU7Y2FzZSJvYmplY3QiOnJldHVybiBudWxsPT09ZT8xOjY7ZGVmYXVsdDpyZXR1cm4gNn19ZnVuY3Rpb24gdyhlKXtyZXR1cm4gdm9pZCAwPT09ZX1mdW5jdGlvbiBFKGUpe3JldHVybiBudWxsPT09ZX1mdW5jdGlvbiBUKGUpe3JldHVybiJvYmplY3QiPT10eXBlb2YgZT9udWxsIT09ZToiZnVuY3Rpb24iPT10eXBlb2YgZX1mdW5jdGlvbiBPKGUsdCl7c3dpdGNoKGIoZSkpe2Nhc2UgMDpjYXNlIDE6Y2FzZSAyOmNhc2UgMzpjYXNlIDQ6Y2FzZSA1OnJldHVybiBlfXZhciBuPTM9PT10PyJzdHJpbmciOjU9PT10PyJudW1iZXIiOiJkZWZhdWx0IixyPUMoZSxvKTtpZih2b2lkIDAhPT1yKXt2YXIgaT1yLmNhbGwoZSxuKTtpZihUKGkpKXRocm93IG5ldyBUeXBlRXJyb3I7cmV0dXJuIGl9cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoInN0cmluZyI9PT10KXt2YXIgbj1lLnRvU3RyaW5nO2lmKFAobikpe3ZhciByPW4uY2FsbChlKTtpZighVChyKSlyZXR1cm4gcn12YXIgbz1lLnZhbHVlT2Y7aWYoUChvKSl7dmFyIHI9by5jYWxsKGUpO2lmKCFUKHIpKXJldHVybiByfX1lbHNle3ZhciBvPWUudmFsdWVPZjtpZihQKG8pKXt2YXIgcj1vLmNhbGwoZSk7aWYoIVQocikpcmV0dXJuIHJ9dmFyIGk9ZS50b1N0cmluZztpZihQKGkpKXt2YXIgcj1pLmNhbGwoZSk7aWYoIVQocikpcmV0dXJuIHJ9fXRocm93IG5ldyBUeXBlRXJyb3J9KGUsImRlZmF1bHQiPT09bj8ibnVtYmVyIjpuKX1mdW5jdGlvbiBTKGUpe3ZhciB0PU8oZSwzKTtyZXR1cm4ic3ltYm9sIj09dHlwZW9mIHQ/dDpmdW5jdGlvbihlKXtyZXR1cm4iIitlfSh0KX1mdW5jdGlvbiB4KGUpe3JldHVybiBBcnJheS5pc0FycmF5P0FycmF5LmlzQXJyYXkoZSk6ZSBpbnN0YW5jZW9mIE9iamVjdD9lIGluc3RhbmNlb2YgQXJyYXk6IltvYmplY3QgQXJyYXldIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKX1mdW5jdGlvbiBQKGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlfWZ1bmN0aW9uIFIoZSl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIGV9ZnVuY3Rpb24gQyhlLHQpe3ZhciBuPWVbdF07aWYobnVsbCE9bil7aWYoIVAobikpdGhyb3cgbmV3IFR5cGVFcnJvcjtyZXR1cm4gbn19ZnVuY3Rpb24gayhlKXt2YXIgdD1lLm5leHQoKTtyZXR1cm4hdC5kb25lJiZ0fWZ1bmN0aW9uIE4oZSl7dmFyIHQ9ZS5yZXR1cm47dCYmdC5jYWxsKGUpfWZ1bmN0aW9uIEEoZSl7dmFyIHQ9T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiBlfHxlPT09cylyZXR1cm4gdDtpZih0IT09cylyZXR1cm4gdDt2YXIgbj1lLnByb3RvdHlwZSxyPW4mJk9iamVjdC5nZXRQcm90b3R5cGVPZihuKTtpZihudWxsPT1yfHxyPT09T2JqZWN0LnByb3RvdHlwZSlyZXR1cm4gdDt2YXIgbz1yLmNvbnN0cnVjdG9yO3JldHVybiJmdW5jdGlvbiIhPXR5cGVvZiBvP3Q6bz09PWU/dDpvfWZ1bmN0aW9uIEkoZSl7cmV0dXJuIGUuX189dm9pZCAwLGRlbGV0ZSBlLl9fLGV9dCgiZGVjb3JhdGUiLGZ1bmN0aW9uKGUsdCxuLHIpe2lmKHcobikpe2lmKCF4KGUpKXRocm93IG5ldyBUeXBlRXJyb3I7aWYoIVIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcjtyZXR1cm4gZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49ZS5sZW5ndGgtMTtuPj0wOy0tbil7dmFyIHI9ZVtuXSxvPXIodCk7aWYoIXcobykmJiFFKG8pKXtpZighUihvKSl0aHJvdyBuZXcgVHlwZUVycm9yO3Q9b319cmV0dXJuIHR9KGUsdCl9aWYoIXgoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcjtpZighVCh0KSl0aHJvdyBuZXcgVHlwZUVycm9yO2lmKCFUKHIpJiYhdyhyKSYmIUUocikpdGhyb3cgbmV3IFR5cGVFcnJvcjtyZXR1cm4gRShyKSYmKHI9dm9pZCAwKSxuPVMobiksZnVuY3Rpb24oZSx0LG4scil7Zm9yKHZhciBvPWUubGVuZ3RoLTE7bz49MDstLW8pe3ZhciBpPWVbb10sYT1pKHQsbixyKTtpZighdyhhKSYmIUUoYSkpe2lmKCFUKGEpKXRocm93IG5ldyBUeXBlRXJyb3I7cj1hfX1yZXR1cm4gcn0oZSx0LG4scil9KSx0KCJtZXRhZGF0YSIsZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24obixyKXtpZighVChuKSl0aHJvdyBuZXcgVHlwZUVycm9yO2lmKCF3KHIpJiYhZnVuY3Rpb24oZSl7c3dpdGNoKGIoZSkpe2Nhc2UgMzpjYXNlIDQ6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19KHIpKXRocm93IG5ldyBUeXBlRXJyb3I7bShlLHQsbixyKX19KSx0KCJkZWZpbmVNZXRhZGF0YSIsZnVuY3Rpb24oZSx0LG4scil7aWYoIVQobikpdGhyb3cgbmV3IFR5cGVFcnJvcjt3KHIpfHwocj1TKHIpKTtyZXR1cm4gbShlLHQsbixyKX0pLHQoImhhc01ldGFkYXRhIixmdW5jdGlvbihlLHQsbil7aWYoIVQodCkpdGhyb3cgbmV3IFR5cGVFcnJvcjt3KG4pfHwobj1TKG4pKTtyZXR1cm4gZnVuY3Rpb24gZSh0LG4scil7dmFyIG89Xyh0LG4scik7aWYobylyZXR1cm4hMDt2YXIgaT1BKG4pO2lmKCFFKGkpKXJldHVybiBlKHQsaSxyKTtyZXR1cm4hMX0oZSx0LG4pfSksdCgiaGFzT3duTWV0YWRhdGEiLGZ1bmN0aW9uKGUsdCxuKXtpZighVCh0KSl0aHJvdyBuZXcgVHlwZUVycm9yO3cobil8fChuPVMobikpO3JldHVybiBfKGUsdCxuKX0pLHQoImdldE1ldGFkYXRhIixmdW5jdGlvbihlLHQsbil7aWYoIVQodCkpdGhyb3cgbmV3IFR5cGVFcnJvcjt3KG4pfHwobj1TKG4pKTtyZXR1cm4gZnVuY3Rpb24gZSh0LG4scil7dmFyIG89Xyh0LG4scik7aWYobylyZXR1cm4gdih0LG4scik7dmFyIGk9QShuKTtpZighRShpKSlyZXR1cm4gZSh0LGkscik7cmV0dXJufShlLHQsbil9KSx0KCJnZXRPd25NZXRhZGF0YSIsZnVuY3Rpb24oZSx0LG4pe2lmKCFUKHQpKXRocm93IG5ldyBUeXBlRXJyb3I7dyhuKXx8KG49UyhuKSk7cmV0dXJuIHYoZSx0LG4pfSksdCgiZ2V0TWV0YWRhdGFLZXlzIixmdW5jdGlvbihlLHQpe2lmKCFUKGUpKXRocm93IG5ldyBUeXBlRXJyb3I7dyh0KXx8KHQ9Uyh0KSk7cmV0dXJuIGZ1bmN0aW9uIGUodCxuKXt2YXIgcj1nKHQsbik7dmFyIG89QSh0KTtpZihudWxsPT09bylyZXR1cm4gcjt2YXIgaT1lKG8sbik7aWYoaS5sZW5ndGg8PTApcmV0dXJuIHI7aWYoci5sZW5ndGg8PTApcmV0dXJuIGk7dmFyIGE9bmV3IGQ7dmFyIHU9W107Zm9yKHZhciBjPTAsbD1yO2M8bC5sZW5ndGg7YysrKXt2YXIgcz1sW2NdLGY9YS5oYXMocyk7Znx8KGEuYWRkKHMpLHUucHVzaChzKSl9Zm9yKHZhciBwPTAsaD1pO3A8aC5sZW5ndGg7cCsrKXt2YXIgcz1oW3BdLGY9YS5oYXMocyk7Znx8KGEuYWRkKHMpLHUucHVzaChzKSl9cmV0dXJuIHV9KGUsdCl9KSx0KCJnZXRPd25NZXRhZGF0YUtleXMiLGZ1bmN0aW9uKGUsdCl7aWYoIVQoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcjt3KHQpfHwodD1TKHQpKTtyZXR1cm4gZyhlLHQpfSksdCgiZGVsZXRlTWV0YWRhdGEiLGZ1bmN0aW9uKGUsdCxuKXtpZighVCh0KSl0aHJvdyBuZXcgVHlwZUVycm9yO3cobil8fChuPVMobikpO3ZhciByPXkodCxuLCExKTtpZih3KHIpKXJldHVybiExO2lmKCFyLmRlbGV0ZShlKSlyZXR1cm4hMTtpZihyLnNpemU+MClyZXR1cm4hMDt2YXIgbz1oLmdldCh0KTtyZXR1cm4gby5kZWxldGUobiksby5zaXplPjB8fChoLmRlbGV0ZSh0KSwhMCl9KX0oaSl9KCl9KG58fChuPXt9KSl9KS5jYWxsKHRoaXMsbigyNDgpLG4oMjEpKX0sZnVuY3Rpb24oZSx0KXt2YXIgbixyLG89ZS5leHBvcnRzPXt9O2Z1bmN0aW9uIGkoKXt0aHJvdyBuZXcgRXJyb3IoInNldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX1mdW5jdGlvbiBhKCl7dGhyb3cgbmV3IEVycm9yKCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX1mdW5jdGlvbiB1KGUpe2lmKG49PT1zZXRUaW1lb3V0KXJldHVybiBzZXRUaW1lb3V0KGUsMCk7aWYoKG49PT1pfHwhbikmJnNldFRpbWVvdXQpcmV0dXJuIG49c2V0VGltZW91dCxzZXRUaW1lb3V0KGUsMCk7dHJ5e3JldHVybiBuKGUsMCl9Y2F0Y2godCl7dHJ5e3JldHVybiBuLmNhbGwobnVsbCxlLDApfWNhdGNoKHQpe3JldHVybiBuLmNhbGwodGhpcyxlLDApfX19IWZ1bmN0aW9uKCl7dHJ5e249ImZ1bmN0aW9uIj09dHlwZW9mIHNldFRpbWVvdXQ/c2V0VGltZW91dDppfWNhdGNoKGUpe249aX10cnl7cj0iZnVuY3Rpb24iPT10eXBlb2YgY2xlYXJUaW1lb3V0P2NsZWFyVGltZW91dDphfWNhdGNoKGUpe3I9YX19KCk7dmFyIGMsbD1bXSxzPSExLGY9LTE7ZnVuY3Rpb24gcCgpe3MmJmMmJihzPSExLGMubGVuZ3RoP2w9Yy5jb25jYXQobCk6Zj0tMSxsLmxlbmd0aCYmZCgpKX1mdW5jdGlvbiBkKCl7aWYoIXMpe3ZhciBlPXUocCk7cz0hMDtmb3IodmFyIHQ9bC5sZW5ndGg7dDspe2ZvcihjPWwsbD1bXTsrK2Y8dDspYyYmY1tmXS5ydW4oKTtmPS0xLHQ9bC5sZW5ndGh9Yz1udWxsLHM9ITEsZnVuY3Rpb24oZSl7aWYocj09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KGUpO2lmKChyPT09YXx8IXIpJiZjbGVhclRpbWVvdXQpcmV0dXJuIHI9Y2xlYXJUaW1lb3V0LGNsZWFyVGltZW91dChlKTt0cnl7cihlKX1jYXRjaCh0KXt0cnl7cmV0dXJuIHIuY2FsbChudWxsLGUpfWNhdGNoKHQpe3JldHVybiByLmNhbGwodGhpcyxlKX19fShlKX19ZnVuY3Rpb24gaChlLHQpe3RoaXMuZnVuPWUsdGhpcy5hcnJheT10fWZ1bmN0aW9uIHkoKXt9by5uZXh0VGljaz1mdW5jdGlvbihlKXt2YXIgdD1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aC0xKTtpZihhcmd1bWVudHMubGVuZ3RoPjEpZm9yKHZhciBuPTE7bjxhcmd1bWVudHMubGVuZ3RoO24rKyl0W24tMV09YXJndW1lbnRzW25dO2wucHVzaChuZXcgaChlLHQpKSwxIT09bC5sZW5ndGh8fHN8fHUoZCl9LGgucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9LG8udGl0bGU9ImJyb3dzZXIiLG8uYnJvd3Nlcj0hMCxvLmVudj17fSxvLmFyZ3Y9W10sby52ZXJzaW9uPSIiLG8udmVyc2lvbnM9e30sby5vbj15LG8uYWRkTGlzdGVuZXI9eSxvLm9uY2U9eSxvLm9mZj15LG8ucmVtb3ZlTGlzdGVuZXI9eSxvLnJlbW92ZUFsbExpc3RlbmVycz15LG8uZW1pdD15LG8ucHJlcGVuZExpc3RlbmVyPXksby5wcmVwZW5kT25jZUxpc3RlbmVyPXksby5saXN0ZW5lcnM9ZnVuY3Rpb24oZSl7cmV0dXJuW119LG8uYmluZGluZz1mdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkIil9LG8uY3dkPWZ1bmN0aW9uKCl7cmV0dXJuIi8ifSxvLmNoZGlyPWZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkIil9LG8udW1hc2s9ZnVuY3Rpb24oKXtyZXR1cm4gMH19LGZ1bmN0aW9uKGUsdCxuKXtuKDI1MCksbigyNTEpLG4oMjUyKSxuKDI1MyksbigyNTQpLG4oMjU1KSxuKDI1NiksbigyNTcpLG4oMjU4KSxuKDI1OSksbigyNjApLG4oMjYyKSxuKDI2MyksbigyNjQpLGUuZXhwb3J0cz1uKDgpLlJlZmxlY3R9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDEpLG89bigzNSksaT1uKDMpLGE9KG4oMTEpLlJlZmxlY3R8fHt9KS5hcHBseSx1PUZ1bmN0aW9uLmFwcGx5O3Ioci5TK3IuRiohbig0KShmdW5jdGlvbigpe2EoZnVuY3Rpb24oKXt9KX0pLCJSZWZsZWN0Iix7YXBwbHk6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPW8oZSksYz1pKG4pO3JldHVybiBhP2Eocix0LGMpOnUuY2FsbChyLHQsYyl9fSl9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDEpLG89big0MSksaT1uKDM1KSxhPW4oMyksdT1uKDUpLGM9big0KSxsPW4oOTIpLHM9KG4oMTEpLlJlZmxlY3R8fHt9KS5jb25zdHJ1Y3QsZj1jKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4hKHMoZnVuY3Rpb24oKXt9LFtdLGUpaW5zdGFuY2VvZiBlKX0pLHA9IWMoZnVuY3Rpb24oKXtzKGZ1bmN0aW9uKCl7fSl9KTtyKHIuUytyLkYqKGZ8fHApLCJSZWZsZWN0Iix7Y29uc3RydWN0OmZ1bmN0aW9uKGUsdCl7aShlKSxhKHQpO3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg8Mz9lOmkoYXJndW1lbnRzWzJdKTtpZihwJiYhZilyZXR1cm4gcyhlLHQsbik7aWYoZT09bil7c3dpdGNoKHQubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG5ldyBlO2Nhc2UgMTpyZXR1cm4gbmV3IGUodFswXSk7Y2FzZSAyOnJldHVybiBuZXcgZSh0WzBdLHRbMV0pO2Nhc2UgMzpyZXR1cm4gbmV3IGUodFswXSx0WzFdLHRbMl0pO2Nhc2UgNDpyZXR1cm4gbmV3IGUodFswXSx0WzFdLHRbMl0sdFszXSl9dmFyIHI9W251bGxdO3JldHVybiByLnB1c2guYXBwbHkocix0KSxuZXcobC5hcHBseShlLHIpKX12YXIgYz1uLnByb3RvdHlwZSxkPW8odShjKT9jOk9iamVjdC5wcm90b3R5cGUpLGg9RnVuY3Rpb24uYXBwbHkuY2FsbChlLGQsdCk7cmV0dXJuIHUoaCk/aDpkfX0pfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigxMyksbz1uKDEpLGk9bigzKSxhPW4oMzQpO28oby5TK28uRipuKDQpKGZ1bmN0aW9uKCl7UmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShyLmYoe30sMSx7dmFsdWU6MX0pLDEse3ZhbHVlOjJ9KX0pLCJSZWZsZWN0Iix7ZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24oZSx0LG4pe2koZSksdD1hKHQsITApLGkobik7dHJ5e3JldHVybiByLmYoZSx0LG4pLCEwfWNhdGNoKGUpe3JldHVybiExfX19KX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMSksbz1uKDMzKS5mLGk9bigzKTtyKHIuUywiUmVmbGVjdCIse2RlbGV0ZVByb3BlcnR5OmZ1bmN0aW9uKGUsdCl7dmFyIG49byhpKGUpLHQpO3JldHVybiEobiYmIW4uY29uZmlndXJhYmxlKSYmZGVsZXRlIGVbdF19fSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7dmFyIHI9bigxKSxvPW4oMyksaT1mdW5jdGlvbihlKXt0aGlzLl90PW8oZSksdGhpcy5faT0wO3ZhciB0LG49dGhpcy5faz1bXTtmb3IodCBpbiBlKW4ucHVzaCh0KX07bigxMDApKGksIk9iamVjdCIsZnVuY3Rpb24oKXt2YXIgZSx0PXRoaXMuX2s7ZG97aWYodGhpcy5faT49dC5sZW5ndGgpcmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfX13aGlsZSghKChlPXRbdGhpcy5faSsrXSlpbiB0aGlzLl90KSk7cmV0dXJue3ZhbHVlOmUsZG9uZTohMX19KSxyKHIuUywiUmVmbGVjdCIse2VudW1lcmF0ZTpmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGkoZSl9fSl9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDMzKSxvPW4oMjgpLGk9bigyMiksYT1uKDEpLHU9big1KSxjPW4oMyk7YShhLlMsIlJlZmxlY3QiLHtnZXQ6ZnVuY3Rpb24gZSh0LG4pe3ZhciBhLGwscz1hcmd1bWVudHMubGVuZ3RoPDM/dDphcmd1bWVudHNbMl07cmV0dXJuIGModCk9PT1zP3Rbbl06KGE9ci5mKHQsbikpP2koYSwidmFsdWUiKT9hLnZhbHVlOnZvaWQgMCE9PWEuZ2V0P2EuZ2V0LmNhbGwocyk6dm9pZCAwOnUobD1vKHQpKT9lKGwsbixzKTp2b2lkIDB9fSl9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDMzKSxvPW4oMSksaT1uKDMpO28oby5TLCJSZWZsZWN0Iix7Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuZihpKGUpLHQpfX0pfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigxKSxvPW4oMjgpLGk9bigzKTtyKHIuUywiUmVmbGVjdCIse2dldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGUpe3JldHVybiBvKGkoZSkpfX0pfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigxKTtyKHIuUywiUmVmbGVjdCIse2hhczpmdW5jdGlvbihlLHQpe3JldHVybiB0IGluIGV9fSl9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDEpLG89bigzKSxpPU9iamVjdC5pc0V4dGVuc2libGU7cihyLlMsIlJlZmxlY3QiLHtpc0V4dGVuc2libGU6ZnVuY3Rpb24oZSl7cmV0dXJuIG8oZSksIWl8fGkoZSl9fSl9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDEpO3Ioci5TLCJSZWZsZWN0Iix7b3duS2V5czpuKDI2MSl9KX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oNDUpLG89big1MiksaT1uKDMpLGE9bigxMSkuUmVmbGVjdDtlLmV4cG9ydHM9YSYmYS5vd25LZXlzfHxmdW5jdGlvbihlKXt2YXIgdD1yLmYoaShlKSksbj1vLmY7cmV0dXJuIG4/dC5jb25jYXQobihlKSk6dH19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDEpLG89bigzKSxpPU9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucztyKHIuUywiUmVmbGVjdCIse3ByZXZlbnRFeHRlbnNpb25zOmZ1bmN0aW9uKGUpe28oZSk7dHJ5e3JldHVybiBpJiZpKGUpLCEwfWNhdGNoKGUpe3JldHVybiExfX19KX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMTMpLG89bigzMyksaT1uKDI4KSxhPW4oMjIpLHU9bigxKSxjPW4oMzcpLGw9bigzKSxzPW4oNSk7dSh1LlMsIlJlZmxlY3QiLHtzZXQ6ZnVuY3Rpb24gZSh0LG4sdSl7dmFyIGYscCxkPWFyZ3VtZW50cy5sZW5ndGg8ND90OmFyZ3VtZW50c1szXSxoPW8uZihsKHQpLG4pO2lmKCFoKXtpZihzKHA9aSh0KSkpcmV0dXJuIGUocCxuLHUsZCk7aD1jKDApfWlmKGEoaCwidmFsdWUiKSl7aWYoITE9PT1oLndyaXRhYmxlfHwhcyhkKSlyZXR1cm4hMTtpZihmPW8uZihkLG4pKXtpZihmLmdldHx8Zi5zZXR8fCExPT09Zi53cml0YWJsZSlyZXR1cm4hMTtmLnZhbHVlPXUsci5mKGQsbixmKX1lbHNlIHIuZihkLG4sYygwLHUpKTtyZXR1cm4hMH1yZXR1cm4gdm9pZCAwIT09aC5zZXQmJihoLnNldC5jYWxsKGQsdSksITApfX0pfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigxKSxvPW4oNjUpO28mJnIoci5TLCJSZWZsZWN0Iix7c2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oZSx0KXtvLmNoZWNrKGUsdCk7dHJ5e3JldHVybiBvLnNldChlLHQpLCEwfWNhdGNoKGUpe3JldHVybiExfX19KX0sZnVuY3Rpb24oZSx0LG4pe24oMjY2KSxuKDI2OSksbigyNzApLG4oMjcxKSxuKDI3MyksbigyNzQpLG4oMjc1KSxuKDI3NiksbigyNzcpLGUuZXhwb3J0cz1uKDgpLlJlZmxlY3R9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDMwKSxvPW4oMyksaT1yLmtleSxhPXIuc2V0O3IuZXhwKHtkZWZpbmVNZXRhZGF0YTpmdW5jdGlvbihlLHQsbixyKXthKGUsdCxvKG4pLGkocikpfX0pfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByLG89bigyOSkoMCksaT1uKDE4KSxhPW4oMzEpLHU9big5MSksYz1uKDI2OCksbD1uKDUpLHM9big0KSxmPW4oNDgpLHA9YS5nZXRXZWFrLGQ9T2JqZWN0LmlzRXh0ZW5zaWJsZSxoPWMudWZzdG9yZSx5PXt9LF89ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUodGhpcyxhcmd1bWVudHMubGVuZ3RoPjA/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSx2PXtnZXQ6ZnVuY3Rpb24oZSl7aWYobChlKSl7dmFyIHQ9cChlKTtyZXR1cm4hMD09PXQ/aChmKHRoaXMsIldlYWtNYXAiKSkuZ2V0KGUpOnQ/dFt0aGlzLl9pXTp2b2lkIDB9fSxzZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYy5kZWYoZih0aGlzLCJXZWFrTWFwIiksZSx0KX19LG09ZS5leHBvcnRzPW4oNzgpKCJXZWFrTWFwIixfLHYsYywhMCwhMCk7cyhmdW5jdGlvbigpe3JldHVybiA3IT0obmV3IG0pLnNldCgoT2JqZWN0LmZyZWV6ZXx8T2JqZWN0KSh5KSw3KS5nZXQoeSl9KSYmKHUoKHI9Yy5nZXRDb25zdHJ1Y3RvcihfLCJXZWFrTWFwIikpLnByb3RvdHlwZSx2KSxhLk5FRUQ9ITAsbyhbImRlbGV0ZSIsImhhcyIsImdldCIsInNldCJdLGZ1bmN0aW9uKGUpe3ZhciB0PW0ucHJvdG90eXBlLG49dFtlXTtpKHQsZSxmdW5jdGlvbih0LG8pe2lmKGwodCkmJiFkKHQpKXt0aGlzLl9mfHwodGhpcy5fZj1uZXcgcik7dmFyIGk9dGhpcy5fZltlXSh0LG8pO3JldHVybiJzZXQiPT1lP3RoaXM6aX1yZXR1cm4gbi5jYWxsKHRoaXMsdCxvKX0pfSkpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO3ZhciByPW4oNzYpLG89bigzMSkuZ2V0V2VhayxpPW4oMyksYT1uKDUpLHU9big3NyksYz1uKDU4KSxsPW4oMjkpLHM9bigyMiksZj1uKDQ4KSxwPWwoNSksZD1sKDYpLGg9MCx5PWZ1bmN0aW9uKGUpe3JldHVybiBlLl9sfHwoZS5fbD1uZXcgXyl9LF89ZnVuY3Rpb24oKXt0aGlzLmE9W119LHY9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcChlLmEsZnVuY3Rpb24oZSl7cmV0dXJuIGVbMF09PT10fSl9O18ucHJvdG90eXBlPXtnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dih0aGlzLGUpO2lmKHQpcmV0dXJuIHRbMV19LGhhczpmdW5jdGlvbihlKXtyZXR1cm4hIXYodGhpcyxlKX0sc2V0OmZ1bmN0aW9uKGUsdCl7dmFyIG49dih0aGlzLGUpO24/blsxXT10OnRoaXMuYS5wdXNoKFtlLHRdKX0sZGVsZXRlOmZ1bmN0aW9uKGUpe3ZhciB0PWQodGhpcy5hLGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdPT09ZX0pO3JldHVybn50JiZ0aGlzLmEuc3BsaWNlKHQsMSksISF+dH19LGUuZXhwb3J0cz17Z2V0Q29uc3RydWN0b3I6ZnVuY3Rpb24oZSx0LG4saSl7dmFyIGw9ZShmdW5jdGlvbihlLHIpe3UoZSxsLHQsIl9pIiksZS5fdD10LGUuX2k9aCsrLGUuX2w9dm9pZCAwLG51bGwhPXImJmMocixuLGVbaV0sZSl9KTtyZXR1cm4gcihsLnByb3RvdHlwZSx7ZGVsZXRlOmZ1bmN0aW9uKGUpe2lmKCFhKGUpKXJldHVybiExO3ZhciBuPW8oZSk7cmV0dXJuITA9PT1uP3koZih0aGlzLHQpKS5kZWxldGUoZSk6biYmcyhuLHRoaXMuX2kpJiZkZWxldGUgblt0aGlzLl9pXX0saGFzOmZ1bmN0aW9uKGUpe2lmKCFhKGUpKXJldHVybiExO3ZhciBuPW8oZSk7cmV0dXJuITA9PT1uP3koZih0aGlzLHQpKS5oYXMoZSk6biYmcyhuLHRoaXMuX2kpfX0pLGx9LGRlZjpmdW5jdGlvbihlLHQsbil7dmFyIHI9byhpKHQpLCEwKTtyZXR1cm4hMD09PXI/eShlKS5zZXQodCxuKTpyW2UuX2ldPW4sZX0sdWZzdG9yZTp5fX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMzApLG89bigzKSxpPXIua2V5LGE9ci5tYXAsdT1yLnN0b3JlO3IuZXhwKHtkZWxldGVNZXRhZGF0YTpmdW5jdGlvbihlLHQpe3ZhciBuPWFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6aShhcmd1bWVudHNbMl0pLHI9YShvKHQpLG4sITEpO2lmKHZvaWQgMD09PXJ8fCFyLmRlbGV0ZShlKSlyZXR1cm4hMTtpZihyLnNpemUpcmV0dXJuITA7dmFyIGM9dS5nZXQodCk7cmV0dXJuIGMuZGVsZXRlKG4pLCEhYy5zaXplfHx1LmRlbGV0ZSh0KX19KX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMzApLG89bigzKSxpPW4oMjgpLGE9ci5oYXMsdT1yLmdldCxjPXIua2V5LGw9ZnVuY3Rpb24oZSx0LG4pe2lmKGEoZSx0LG4pKXJldHVybiB1KGUsdCxuKTt2YXIgcj1pKHQpO3JldHVybiBudWxsIT09cj9sKGUscixuKTp2b2lkIDB9O3IuZXhwKHtnZXRNZXRhZGF0YTpmdW5jdGlvbihlLHQpe3JldHVybiBsKGUsbyh0KSxhcmd1bWVudHMubGVuZ3RoPDM/dm9pZCAwOmMoYXJndW1lbnRzWzJdKSl9fSl9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDExNyksbz1uKDI3MiksaT1uKDMwKSxhPW4oMyksdT1uKDI4KSxjPWkua2V5cyxsPWkua2V5LHM9ZnVuY3Rpb24oZSx0KXt2YXIgbj1jKGUsdCksaT11KGUpO2lmKG51bGw9PT1pKXJldHVybiBuO3ZhciBhPXMoaSx0KTtyZXR1cm4gYS5sZW5ndGg/bi5sZW5ndGg/byhuZXcgcihuLmNvbmNhdChhKSkpOmE6bn07aS5leHAoe2dldE1ldGFkYXRhS2V5czpmdW5jdGlvbihlKXtyZXR1cm4gcyhhKGUpLGFyZ3VtZW50cy5sZW5ndGg8Mj92b2lkIDA6bChhcmd1bWVudHNbMV0pKX19KX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oNTgpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciBuPVtdO3JldHVybiByKGUsITEsbi5wdXNoLG4sdCksbn19LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDMwKSxvPW4oMyksaT1yLmdldCxhPXIua2V5O3IuZXhwKHtnZXRPd25NZXRhZGF0YTpmdW5jdGlvbihlLHQpe3JldHVybiBpKGUsbyh0KSxhcmd1bWVudHMubGVuZ3RoPDM/dm9pZCAwOmEoYXJndW1lbnRzWzJdKSl9fSl9LGZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1uKDMwKSxvPW4oMyksaT1yLmtleXMsYT1yLmtleTtyLmV4cCh7Z2V0T3duTWV0YWRhdGFLZXlzOmZ1bmN0aW9uKGUpe3JldHVybiBpKG8oZSksYXJndW1lbnRzLmxlbmd0aDwyP3ZvaWQgMDphKGFyZ3VtZW50c1sxXSkpfX0pfSxmdW5jdGlvbihlLHQsbil7dmFyIHI9bigzMCksbz1uKDMpLGk9bigyOCksYT1yLmhhcyx1PXIua2V5LGM9ZnVuY3Rpb24oZSx0LG4pe2lmKGEoZSx0LG4pKXJldHVybiEwO3ZhciByPWkodCk7cmV0dXJuIG51bGwhPT1yJiZjKGUscixuKX07ci5leHAoe2hhc01ldGFkYXRhOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGMoZSxvKHQpLGFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6dShhcmd1bWVudHNbMl0pKX19KX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMzApLG89bigzKSxpPXIuaGFzLGE9ci5rZXk7ci5leHAoe2hhc093bk1ldGFkYXRhOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGkoZSxvKHQpLGFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6YShhcmd1bWVudHNbMl0pKX19KX0sZnVuY3Rpb24oZSx0LG4pe3ZhciByPW4oMzApLG89bigzKSxpPW4oMzUpLGE9ci5rZXksdT1yLnNldDtyLmV4cCh7bWV0YWRhdGE6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZnVuY3Rpb24obixyKXt1KGUsdCwodm9pZCAwIT09cj9vOmkpKG4pLGEocikpfX19KX0sZnVuY3Rpb24oZSx0KXt3aW5kb3cuTm9kZUxpc3QmJiFOb2RlTGlzdC5wcm90b3R5cGUuZm9yRWFjaCYmKE5vZGVMaXN0LnByb3RvdHlwZS5mb3JFYWNoPWZ1bmN0aW9uKGUsdCl7dD10fHx3aW5kb3c7Zm9yKHZhciBuPTA7bjx0aGlzLmxlbmd0aDtuKyspZS5jYWxsKHQsdGhpc1tuXSxuLHRoaXMpfSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7Ci8qKiBAbGljZW5zZSBSZWFjdCB2MTYuNi4wCiAqIHJlYWN0LnByb2R1Y3Rpb24ubWluLmpzCiAqCiAqIENvcHlyaWdodCAoYykgRmFjZWJvb2ssIEluYy4gYW5kIGl0cyBhZmZpbGlhdGVzLgogKgogKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGUKICogTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLgogKi92YXIgcj1uKDExOCksbz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yLGk9bz9TeW1ib2wuZm9yKCJyZWFjdC5lbGVtZW50Iik6NjAxMDMsYT1vP1N5bWJvbC5mb3IoInJlYWN0LnBvcnRhbCIpOjYwMTA2LHU9bz9TeW1ib2wuZm9yKCJyZWFjdC5mcmFnbWVudCIpOjYwMTA3LGM9bz9TeW1ib2wuZm9yKCJyZWFjdC5zdHJpY3RfbW9kZSIpOjYwMTA4LGw9bz9TeW1ib2wuZm9yKCJyZWFjdC5wcm9maWxlciIpOjYwMTE0LHM9bz9TeW1ib2wuZm9yKCJyZWFjdC5wcm92aWRlciIpOjYwMTA5LGY9bz9TeW1ib2wuZm9yKCJyZWFjdC5jb250ZXh0Iik6NjAxMTAscD1vP1N5bWJvbC5mb3IoInJlYWN0LmNvbmN1cnJlbnRfbW9kZSIpOjYwMTExLGQ9bz9TeW1ib2wuZm9yKCJyZWFjdC5mb3J3YXJkX3JlZiIpOjYwMTEyLGg9bz9TeW1ib2wuZm9yKCJyZWFjdC5zdXNwZW5zZSIpOjYwMTEzLHk9bz9TeW1ib2wuZm9yKCJyZWFjdC5tZW1vIik6NjAxMTUsXz1vP1N5bWJvbC5mb3IoInJlYWN0LmxhenkiKTo2MDExNix2PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcjtmdW5jdGlvbiBtKGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLTEsbj0iaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL2Vycm9yLWRlY29kZXIuaHRtbD9pbnZhcmlhbnQ9IitlLHI9MDtyPHQ7cisrKW4rPSImYXJnc1tdPSIrZW5jb2RlVVJJQ29tcG9uZW50KGFyZ3VtZW50c1tyKzFdKTshZnVuY3Rpb24oZSx0LG4scixvLGksYSx1KXtpZighZSl7aWYoZT12b2lkIDAsdm9pZCAwPT09dCllPUVycm9yKCJNaW5pZmllZCBleGNlcHRpb24gb2NjdXJyZWQ7IHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCBmb3IgdGhlIGZ1bGwgZXJyb3IgbWVzc2FnZSBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLiIpO2Vsc2V7dmFyIGM9W24scixvLGksYSx1XSxsPTA7KGU9RXJyb3IodC5yZXBsYWNlKC8lcy9nLGZ1bmN0aW9uKCl7cmV0dXJuIGNbbCsrXX0pKSkubmFtZT0iSW52YXJpYW50IFZpb2xhdGlvbiJ9dGhyb3cgZS5mcmFtZXNUb1BvcD0xLGV9fSghMSwiTWluaWZpZWQgUmVhY3QgZXJyb3IgIyIrZSsiOyB2aXNpdCAlcyBmb3IgdGhlIGZ1bGwgbWVzc2FnZSBvciB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIGZ1bGwgZXJyb3JzIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuICIsbil9dmFyIGc9e2lzTW91bnRlZDpmdW5jdGlvbigpe3JldHVybiExfSxlbnF1ZXVlRm9yY2VVcGRhdGU6ZnVuY3Rpb24oKXt9LGVucXVldWVSZXBsYWNlU3RhdGU6ZnVuY3Rpb24oKXt9LGVucXVldWVTZXRTdGF0ZTpmdW5jdGlvbigpe319LGI9e307ZnVuY3Rpb24gdyhlLHQsbil7dGhpcy5wcm9wcz1lLHRoaXMuY29udGV4dD10LHRoaXMucmVmcz1iLHRoaXMudXBkYXRlcj1ufHxnfWZ1bmN0aW9uIEUoKXt9ZnVuY3Rpb24gVChlLHQsbil7dGhpcy5wcm9wcz1lLHRoaXMuY29udGV4dD10LHRoaXMucmVmcz1iLHRoaXMudXBkYXRlcj1ufHxnfXcucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9e30sdy5wcm90b3R5cGUuc2V0U3RhdGU9ZnVuY3Rpb24oZSx0KXsib2JqZWN0IiE9dHlwZW9mIGUmJiJmdW5jdGlvbiIhPXR5cGVvZiBlJiZudWxsIT1lJiZtKCI4NSIpLHRoaXMudXBkYXRlci5lbnF1ZXVlU2V0U3RhdGUodGhpcyxlLHQsInNldFN0YXRlIil9LHcucHJvdG90eXBlLmZvcmNlVXBkYXRlPWZ1bmN0aW9uKGUpe3RoaXMudXBkYXRlci5lbnF1ZXVlRm9yY2VVcGRhdGUodGhpcyxlLCJmb3JjZVVwZGF0ZSIpfSxFLnByb3RvdHlwZT13LnByb3RvdHlwZTt2YXIgTz1ULnByb3RvdHlwZT1uZXcgRTtPLmNvbnN0cnVjdG9yPVQscihPLHcucHJvdG90eXBlKSxPLmlzUHVyZVJlYWN0Q29tcG9uZW50PSEwO3ZhciBTPXtjdXJyZW50Om51bGwsY3VycmVudERpc3BhdGNoZXI6bnVsbH0seD1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LFA9e2tleTohMCxyZWY6ITAsX19zZWxmOiEwLF9fc291cmNlOiEwfTtmdW5jdGlvbiBSKGUsdCxuKXt2YXIgcj12b2lkIDAsbz17fSxhPW51bGwsdT1udWxsO2lmKG51bGwhPXQpZm9yKHIgaW4gdm9pZCAwIT09dC5yZWYmJih1PXQucmVmKSx2b2lkIDAhPT10LmtleSYmKGE9IiIrdC5rZXkpLHQpeC5jYWxsKHQscikmJiFQLmhhc093blByb3BlcnR5KHIpJiYob1tyXT10W3JdKTt2YXIgYz1hcmd1bWVudHMubGVuZ3RoLTI7aWYoMT09PWMpby5jaGlsZHJlbj1uO2Vsc2UgaWYoMTxjKXtmb3IodmFyIGw9QXJyYXkoYykscz0wO3M8YztzKyspbFtzXT1hcmd1bWVudHNbcysyXTtvLmNoaWxkcmVuPWx9aWYoZSYmZS5kZWZhdWx0UHJvcHMpZm9yKHIgaW4gYz1lLmRlZmF1bHRQcm9wcyl2b2lkIDA9PT1vW3JdJiYob1tyXT1jW3JdKTtyZXR1cm57JCR0eXBlb2Y6aSx0eXBlOmUsa2V5OmEscmVmOnUscHJvcHM6byxfb3duZXI6Uy5jdXJyZW50fX1mdW5jdGlvbiBDKGUpe3JldHVybiJvYmplY3QiPT10eXBlb2YgZSYmbnVsbCE9PWUmJmUuJCR0eXBlb2Y9PT1pfXZhciBrPS9cLysvZyxOPVtdO2Z1bmN0aW9uIEEoZSx0LG4scil7aWYoTi5sZW5ndGgpe3ZhciBvPU4ucG9wKCk7cmV0dXJuIG8ucmVzdWx0PWUsby5rZXlQcmVmaXg9dCxvLmZ1bmM9bixvLmNvbnRleHQ9cixvLmNvdW50PTAsb31yZXR1cm57cmVzdWx0OmUsa2V5UHJlZml4OnQsZnVuYzpuLGNvbnRleHQ6cixjb3VudDowfX1mdW5jdGlvbiBJKGUpe2UucmVzdWx0PW51bGwsZS5rZXlQcmVmaXg9bnVsbCxlLmZ1bmM9bnVsbCxlLmNvbnRleHQ9bnVsbCxlLmNvdW50PTAsMTA+Ti5sZW5ndGgmJk4ucHVzaChlKX1mdW5jdGlvbiBEKGUsdCxuKXtyZXR1cm4gbnVsbD09ZT8wOmZ1bmN0aW9uIGUodCxuLHIsbyl7dmFyIHU9dHlwZW9mIHQ7InVuZGVmaW5lZCIhPT11JiYiYm9vbGVhbiIhPT11fHwodD1udWxsKTt2YXIgYz0hMTtpZihudWxsPT09dCljPSEwO2Vsc2Ugc3dpdGNoKHUpe2Nhc2Uic3RyaW5nIjpjYXNlIm51bWJlciI6Yz0hMDticmVhaztjYXNlIm9iamVjdCI6c3dpdGNoKHQuJCR0eXBlb2Ype2Nhc2UgaTpjYXNlIGE6Yz0hMH19aWYoYylyZXR1cm4gcihvLHQsIiI9PT1uPyIuIitqKHQsMCk6biksMTtpZihjPTAsbj0iIj09PW4/Ii4iOm4rIjoiLEFycmF5LmlzQXJyYXkodCkpZm9yKHZhciBsPTA7bDx0Lmxlbmd0aDtsKyspe3ZhciBzPW4raih1PXRbbF0sbCk7Yys9ZSh1LHMscixvKX1lbHNlIGlmKHM9bnVsbD09PXR8fCJvYmplY3QiIT10eXBlb2YgdD9udWxsOiJmdW5jdGlvbiI9PXR5cGVvZihzPXYmJnRbdl18fHRbIkBAaXRlcmF0b3IiXSk/czpudWxsLCJmdW5jdGlvbiI9PXR5cGVvZiBzKWZvcih0PXMuY2FsbCh0KSxsPTA7ISh1PXQubmV4dCgpKS5kb25lOyljKz1lKHU9dS52YWx1ZSxzPW4raih1LGwrKykscixvKTtlbHNlIm9iamVjdCI9PT11JiZtKCIzMSIsIltvYmplY3QgT2JqZWN0XSI9PShyPSIiK3QpPyJvYmplY3Qgd2l0aCBrZXlzIHsiK09iamVjdC5rZXlzKHQpLmpvaW4oIiwgIikrIn0iOnIsIiIpO3JldHVybiBjfShlLCIiLHQsbil9ZnVuY3Rpb24gaihlLHQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgZSYmbnVsbCE9PWUmJm51bGwhPWUua2V5P2Z1bmN0aW9uKGUpe3ZhciB0PXsiPSI6Ij0wIiwiOiI6Ij0yIn07cmV0dXJuIiQiKygiIitlKS5yZXBsYWNlKC9bPTpdL2csZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KX0oZS5rZXkpOnQudG9TdHJpbmcoMzYpfWZ1bmN0aW9uIEwoZSx0KXtlLmZ1bmMuY2FsbChlLmNvbnRleHQsdCxlLmNvdW50KyspfWZ1bmN0aW9uIE0oZSx0LG4pe3ZhciByPWUucmVzdWx0LG89ZS5rZXlQcmVmaXg7ZT1lLmZ1bmMuY2FsbChlLmNvbnRleHQsdCxlLmNvdW50KyspLEFycmF5LmlzQXJyYXkoZSk/RihlLHIsbixmdW5jdGlvbihlKXtyZXR1cm4gZX0pOm51bGwhPWUmJihDKGUpJiYoZT1mdW5jdGlvbihlLHQpe3JldHVybnskJHR5cGVvZjppLHR5cGU6ZS50eXBlLGtleTp0LHJlZjplLnJlZixwcm9wczplLnByb3BzLF9vd25lcjplLl9vd25lcn19KGUsbysoIWUua2V5fHx0JiZ0LmtleT09PWUua2V5PyIiOigiIitlLmtleSkucmVwbGFjZShrLCIkJi8iKSsiLyIpK24pKSxyLnB1c2goZSkpfWZ1bmN0aW9uIEYoZSx0LG4scixvKXt2YXIgaT0iIjtudWxsIT1uJiYoaT0oIiIrbikucmVwbGFjZShrLCIkJi8iKSsiLyIpLEQoZSxNLHQ9QSh0LGkscixvKSksSSh0KX12YXIgVT17Q2hpbGRyZW46e21hcDpmdW5jdGlvbihlLHQsbil7aWYobnVsbD09ZSlyZXR1cm4gZTt2YXIgcj1bXTtyZXR1cm4gRihlLHIsbnVsbCx0LG4pLHJ9LGZvckVhY2g6ZnVuY3Rpb24oZSx0LG4pe2lmKG51bGw9PWUpcmV0dXJuIGU7RChlLEwsdD1BKG51bGwsbnVsbCx0LG4pKSxJKHQpfSxjb3VudDpmdW5jdGlvbihlKXtyZXR1cm4gRChlLGZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LG51bGwpfSx0b0FycmF5OmZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiBGKGUsdCxudWxsLGZ1bmN0aW9uKGUpe3JldHVybiBlfSksdH0sb25seTpmdW5jdGlvbihlKXtyZXR1cm4gQyhlKXx8bSgiMTQzIiksZX19LGNyZWF0ZVJlZjpmdW5jdGlvbigpe3JldHVybntjdXJyZW50Om51bGx9fSxDb21wb25lbnQ6dyxQdXJlQ29tcG9uZW50OlQsY3JlYXRlQ29udGV4dDpmdW5jdGlvbihlLHQpe3JldHVybiB2b2lkIDA9PT10JiYodD1udWxsKSwoZT17JCR0eXBlb2Y6ZixfY2FsY3VsYXRlQ2hhbmdlZEJpdHM6dCxfY3VycmVudFZhbHVlOmUsX2N1cnJlbnRWYWx1ZTI6ZSxQcm92aWRlcjpudWxsLENvbnN1bWVyOm51bGx9KS5Qcm92aWRlcj17JCR0eXBlb2Y6cyxfY29udGV4dDplfSxlLkNvbnN1bWVyPWV9LGZvcndhcmRSZWY6ZnVuY3Rpb24oZSl7cmV0dXJueyQkdHlwZW9mOmQscmVuZGVyOmV9fSxsYXp5OmZ1bmN0aW9uKGUpe3JldHVybnskJHR5cGVvZjpfLF9jdG9yOmUsX3N0YXR1czotMSxfcmVzdWx0Om51bGx9fSxtZW1vOmZ1bmN0aW9uKGUsdCl7cmV0dXJueyQkdHlwZW9mOnksdHlwZTplLGNvbXBhcmU6dm9pZCAwPT09dD9udWxsOnR9fSxGcmFnbWVudDp1LFN0cmljdE1vZGU6Yyx1bnN0YWJsZV9Db25jdXJyZW50TW9kZTpwLFN1c3BlbnNlOmgsdW5zdGFibGVfUHJvZmlsZXI6bCxjcmVhdGVFbGVtZW50OlIsY2xvbmVFbGVtZW50OmZ1bmN0aW9uKGUsdCxuKXtudWxsPT1lJiZtKCIyNjciLGUpO3ZhciBvPXZvaWQgMCxhPXIoe30sZS5wcm9wcyksdT1lLmtleSxjPWUucmVmLGw9ZS5fb3duZXI7aWYobnVsbCE9dCl7dm9pZCAwIT09dC5yZWYmJihjPXQucmVmLGw9Uy5jdXJyZW50KSx2b2lkIDAhPT10LmtleSYmKHU9IiIrdC5rZXkpO3ZhciBzPXZvaWQgMDtmb3IobyBpbiBlLnR5cGUmJmUudHlwZS5kZWZhdWx0UHJvcHMmJihzPWUudHlwZS5kZWZhdWx0UHJvcHMpLHQpeC5jYWxsKHQsbykmJiFQLmhhc093blByb3BlcnR5KG8pJiYoYVtvXT12b2lkIDA9PT10W29dJiZ2b2lkIDAhPT1zP3Nbb106dFtvXSl9aWYoMT09PShvPWFyZ3VtZW50cy5sZW5ndGgtMikpYS5jaGlsZHJlbj1uO2Vsc2UgaWYoMTxvKXtzPUFycmF5KG8pO2Zvcih2YXIgZj0wO2Y8bztmKyspc1tmXT1hcmd1bWVudHNbZisyXTthLmNoaWxkcmVuPXN9cmV0dXJueyQkdHlwZW9mOmksdHlwZTplLnR5cGUsa2V5OnUscmVmOmMscHJvcHM6YSxfb3duZXI6bH19LGNyZWF0ZUZhY3Rvcnk6ZnVuY3Rpb24oZSl7dmFyIHQ9Ui5iaW5kKG51bGwsZSk7cmV0dXJuIHQudHlwZT1lLHR9LGlzVmFsaWRFbGVtZW50OkMsdmVyc2lvbjoiMTYuNi4wIixfX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRDp7UmVhY3RDdXJyZW50T3duZXI6Uyxhc3NpZ246cn19LFc9e2RlZmF1bHQ6VX0sJD1XJiZVfHxXO2UuZXhwb3J0cz0kLmRlZmF1bHR8fCR9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7Ci8qKiBAbGljZW5zZSBSZWFjdCB2MTYuNi4wCiAqIHJlYWN0LWRvbS5wcm9kdWN0aW9uLm1pbi5qcwogKgogKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4KICoKICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlCiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4KICovdmFyIHI9bigwKSxvPW4oMTE4KSxpPW4oMjgxKTtmdW5jdGlvbiBhKGUpe2Zvcih2YXIgdD1hcmd1bWVudHMubGVuZ3RoLTEsbj0iaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL2Vycm9yLWRlY29kZXIuaHRtbD9pbnZhcmlhbnQ9IitlLHI9MDtyPHQ7cisrKW4rPSImYXJnc1tdPSIrZW5jb2RlVVJJQ29tcG9uZW50KGFyZ3VtZW50c1tyKzFdKTshZnVuY3Rpb24oZSx0LG4scixvLGksYSx1KXtpZighZSl7aWYoZT12b2lkIDAsdm9pZCAwPT09dCllPUVycm9yKCJNaW5pZmllZCBleGNlcHRpb24gb2NjdXJyZWQ7IHVzZSB0aGUgbm9uLW1pbmlmaWVkIGRldiBlbnZpcm9ubWVudCBmb3IgdGhlIGZ1bGwgZXJyb3IgbWVzc2FnZSBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLiIpO2Vsc2V7dmFyIGM9W24scixvLGksYSx1XSxsPTA7KGU9RXJyb3IodC5yZXBsYWNlKC8lcy9nLGZ1bmN0aW9uKCl7cmV0dXJuIGNbbCsrXX0pKSkubmFtZT0iSW52YXJpYW50IFZpb2xhdGlvbiJ9dGhyb3cgZS5mcmFtZXNUb1BvcD0xLGV9fSghMSwiTWluaWZpZWQgUmVhY3QgZXJyb3IgIyIrZSsiOyB2aXNpdCAlcyBmb3IgdGhlIGZ1bGwgbWVzc2FnZSBvciB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIGZ1bGwgZXJyb3JzIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuICIsbil9cnx8YSgiMjI3Iik7dmFyIHU9ITEsYz1udWxsLGw9ITEscz1udWxsLGY9e29uRXJyb3I6ZnVuY3Rpb24oZSl7dT0hMCxjPWV9fTtmdW5jdGlvbiBwKGUsdCxuLHIsbyxpLGEsbCxzKXt1PSExLGM9bnVsbCxmdW5jdGlvbihlLHQsbixyLG8saSxhLHUsYyl7dmFyIGw9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDMpO3RyeXt0LmFwcGx5KG4sbCl9Y2F0Y2goZSl7dGhpcy5vbkVycm9yKGUpfX0uYXBwbHkoZixhcmd1bWVudHMpfXZhciBkPW51bGwsaD17fTtmdW5jdGlvbiB5KCl7aWYoZClmb3IodmFyIGUgaW4gaCl7dmFyIHQ9aFtlXSxuPWQuaW5kZXhPZihlKTtpZigtMTxufHxhKCI5NiIsZSksIXZbbl0pZm9yKHZhciByIGluIHQuZXh0cmFjdEV2ZW50c3x8YSgiOTciLGUpLHZbbl09dCxuPXQuZXZlbnRUeXBlcyl7dmFyIG89dm9pZCAwLGk9bltyXSx1PXQsYz1yO20uaGFzT3duUHJvcGVydHkoYykmJmEoIjk5IixjKSxtW2NdPWk7dmFyIGw9aS5waGFzZWRSZWdpc3RyYXRpb25OYW1lcztpZihsKXtmb3IobyBpbiBsKWwuaGFzT3duUHJvcGVydHkobykmJl8obFtvXSx1LGMpO289ITB9ZWxzZSBpLnJlZ2lzdHJhdGlvbk5hbWU/KF8oaS5yZWdpc3RyYXRpb25OYW1lLHUsYyksbz0hMCk6bz0hMTtvfHxhKCI5OCIscixlKX19fWZ1bmN0aW9uIF8oZSx0LG4pe2dbZV0mJmEoIjEwMCIsZSksZ1tlXT10LGJbZV09dC5ldmVudFR5cGVzW25dLmRlcGVuZGVuY2llc312YXIgdj1bXSxtPXt9LGc9e30sYj17fSx3PW51bGwsRT1udWxsLFQ9bnVsbDtmdW5jdGlvbiBPKGUsdCxuLHIpe3Q9ZS50eXBlfHwidW5rbm93bi1ldmVudCIsZS5jdXJyZW50VGFyZ2V0PVQociksZnVuY3Rpb24oZSx0LG4scixvLGksZixkLGgpe2lmKHAuYXBwbHkodGhpcyxhcmd1bWVudHMpLHUpe2lmKHUpe3ZhciB5PWM7dT0hMSxjPW51bGx9ZWxzZSBhKCIxOTgiKSx5PXZvaWQgMDtsfHwobD0hMCxzPXkpfX0odCxuLHZvaWQgMCxlKSxlLmN1cnJlbnRUYXJnZXQ9bnVsbH1mdW5jdGlvbiBTKGUsdCl7cmV0dXJuIG51bGw9PXQmJmEoIjMwIiksbnVsbD09ZT90OkFycmF5LmlzQXJyYXkoZSk/QXJyYXkuaXNBcnJheSh0KT8oZS5wdXNoLmFwcGx5KGUsdCksZSk6KGUucHVzaCh0KSxlKTpBcnJheS5pc0FycmF5KHQpP1tlXS5jb25jYXQodCk6W2UsdF19ZnVuY3Rpb24geChlLHQsbil7QXJyYXkuaXNBcnJheShlKT9lLmZvckVhY2godCxuKTplJiZ0LmNhbGwobixlKX12YXIgUD1udWxsO2Z1bmN0aW9uIFIoZSx0KXtpZihlKXt2YXIgbj1lLl9kaXNwYXRjaExpc3RlbmVycyxyPWUuX2Rpc3BhdGNoSW5zdGFuY2VzO2lmKEFycmF5LmlzQXJyYXkobikpZm9yKHZhciBvPTA7bzxuLmxlbmd0aCYmIWUuaXNQcm9wYWdhdGlvblN0b3BwZWQoKTtvKyspTyhlLHQsbltvXSxyW29dKTtlbHNlIG4mJk8oZSx0LG4scik7ZS5fZGlzcGF0Y2hMaXN0ZW5lcnM9bnVsbCxlLl9kaXNwYXRjaEluc3RhbmNlcz1udWxsLGUuaXNQZXJzaXN0ZW50KCl8fGUuY29uc3RydWN0b3IucmVsZWFzZShlKX19ZnVuY3Rpb24gQyhlKXtyZXR1cm4gUihlLCEwKX1mdW5jdGlvbiBrKGUpe3JldHVybiBSKGUsITEpfXZhciBOPXtpbmplY3RFdmVudFBsdWdpbk9yZGVyOmZ1bmN0aW9uKGUpe2QmJmEoIjEwMSIpLGQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZSkseSgpfSxpbmplY3RFdmVudFBsdWdpbnNCeU5hbWU6ZnVuY3Rpb24oZSl7dmFyIHQsbj0hMTtmb3IodCBpbiBlKWlmKGUuaGFzT3duUHJvcGVydHkodCkpe3ZhciByPWVbdF07aC5oYXNPd25Qcm9wZXJ0eSh0KSYmaFt0XT09PXJ8fChoW3RdJiZhKCIxMDIiLHQpLGhbdF09cixuPSEwKX1uJiZ5KCl9fTtmdW5jdGlvbiBBKGUsdCl7dmFyIG49ZS5zdGF0ZU5vZGU7aWYoIW4pcmV0dXJuIG51bGw7dmFyIHI9dyhuKTtpZighcilyZXR1cm4gbnVsbDtuPXJbdF07ZTpzd2l0Y2godCl7Y2FzZSJvbkNsaWNrIjpjYXNlIm9uQ2xpY2tDYXB0dXJlIjpjYXNlIm9uRG91YmxlQ2xpY2siOmNhc2Uib25Eb3VibGVDbGlja0NhcHR1cmUiOmNhc2Uib25Nb3VzZURvd24iOmNhc2Uib25Nb3VzZURvd25DYXB0dXJlIjpjYXNlIm9uTW91c2VNb3ZlIjpjYXNlIm9uTW91c2VNb3ZlQ2FwdHVyZSI6Y2FzZSJvbk1vdXNlVXAiOmNhc2Uib25Nb3VzZVVwQ2FwdHVyZSI6KHI9IXIuZGlzYWJsZWQpfHwocj0hKCJidXR0b24iPT09KGU9ZS50eXBlKXx8ImlucHV0Ij09PWV8fCJzZWxlY3QiPT09ZXx8InRleHRhcmVhIj09PWUpKSxlPSFyO2JyZWFrIGU7ZGVmYXVsdDplPSExfXJldHVybiBlP251bGw6KG4mJiJmdW5jdGlvbiIhPXR5cGVvZiBuJiZhKCIyMzEiLHQsdHlwZW9mIG4pLG4pfWZ1bmN0aW9uIEkoZSx0KXtpZihudWxsIT09ZSYmKFA9UyhQLGUpKSxlPVAsUD1udWxsLGUmJih4KGUsdD9DOmspLFAmJmEoIjk1IiksbCkpdGhyb3cgdD1zLGw9ITEscz1udWxsLHR9dmFyIEQ9TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc2xpY2UoMiksaj0iX19yZWFjdEludGVybmFsSW5zdGFuY2UkIitELEw9Il9fcmVhY3RFdmVudEhhbmRsZXJzJCIrRDtmdW5jdGlvbiBNKGUpe2lmKGVbal0pcmV0dXJuIGVbal07Zm9yKDshZVtqXTspe2lmKCFlLnBhcmVudE5vZGUpcmV0dXJuIG51bGw7ZT1lLnBhcmVudE5vZGV9cmV0dXJuIDU9PT0oZT1lW2pdKS50YWd8fDY9PT1lLnRhZz9lOm51bGx9ZnVuY3Rpb24gRihlKXtyZXR1cm4hKGU9ZVtqXSl8fDUhPT1lLnRhZyYmNiE9PWUudGFnP251bGw6ZX1mdW5jdGlvbiBVKGUpe2lmKDU9PT1lLnRhZ3x8Nj09PWUudGFnKXJldHVybiBlLnN0YXRlTm9kZTthKCIzMyIpfWZ1bmN0aW9uIFcoZSl7cmV0dXJuIGVbTF18fG51bGx9ZnVuY3Rpb24gJChlKXtkb3tlPWUucmV0dXJufXdoaWxlKGUmJjUhPT1lLnRhZyk7cmV0dXJuIGV8fG51bGx9ZnVuY3Rpb24gRyhlLHQsbil7KHQ9QShlLG4uZGlzcGF0Y2hDb25maWcucGhhc2VkUmVnaXN0cmF0aW9uTmFtZXNbdF0pKSYmKG4uX2Rpc3BhdGNoTGlzdGVuZXJzPVMobi5fZGlzcGF0Y2hMaXN0ZW5lcnMsdCksbi5fZGlzcGF0Y2hJbnN0YW5jZXM9UyhuLl9kaXNwYXRjaEluc3RhbmNlcyxlKSl9ZnVuY3Rpb24gQihlKXtpZihlJiZlLmRpc3BhdGNoQ29uZmlnLnBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzKXtmb3IodmFyIHQ9ZS5fdGFyZ2V0SW5zdCxuPVtdO3Q7KW4ucHVzaCh0KSx0PSQodCk7Zm9yKHQ9bi5sZW5ndGg7MDx0LS07KUcoblt0XSwiY2FwdHVyZWQiLGUpO2Zvcih0PTA7dDxuLmxlbmd0aDt0KyspRyhuW3RdLCJidWJibGVkIixlKX19ZnVuY3Rpb24gcShlLHQsbil7ZSYmbiYmbi5kaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRpb25OYW1lJiYodD1BKGUsbi5kaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRpb25OYW1lKSkmJihuLl9kaXNwYXRjaExpc3RlbmVycz1TKG4uX2Rpc3BhdGNoTGlzdGVuZXJzLHQpLG4uX2Rpc3BhdGNoSW5zdGFuY2VzPVMobi5fZGlzcGF0Y2hJbnN0YW5jZXMsZSkpfWZ1bmN0aW9uIHooZSl7ZSYmZS5kaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRpb25OYW1lJiZxKGUuX3RhcmdldEluc3QsbnVsbCxlKX1mdW5jdGlvbiBIKGUpe3goZSxCKX12YXIgVj0hKCJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93fHwhd2luZG93LmRvY3VtZW50fHwhd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpO2Z1bmN0aW9uIFkoZSx0KXt2YXIgbj17fTtyZXR1cm4gbltlLnRvTG93ZXJDYXNlKCldPXQudG9Mb3dlckNhc2UoKSxuWyJXZWJraXQiK2VdPSJ3ZWJraXQiK3QsblsiTW96IitlXT0ibW96Iit0LG59dmFyIEs9e2FuaW1hdGlvbmVuZDpZKCJBbmltYXRpb24iLCJBbmltYXRpb25FbmQiKSxhbmltYXRpb25pdGVyYXRpb246WSgiQW5pbWF0aW9uIiwiQW5pbWF0aW9uSXRlcmF0aW9uIiksYW5pbWF0aW9uc3RhcnQ6WSgiQW5pbWF0aW9uIiwiQW5pbWF0aW9uU3RhcnQiKSx0cmFuc2l0aW9uZW5kOlkoIlRyYW5zaXRpb24iLCJUcmFuc2l0aW9uRW5kIil9LFE9e30sWD17fTtmdW5jdGlvbiBKKGUpe2lmKFFbZV0pcmV0dXJuIFFbZV07aWYoIUtbZV0pcmV0dXJuIGU7dmFyIHQsbj1LW2VdO2Zvcih0IGluIG4paWYobi5oYXNPd25Qcm9wZXJ0eSh0KSYmdCBpbiBYKXJldHVybiBRW2VdPW5bdF07cmV0dXJuIGV9ViYmKFg9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iikuc3R5bGUsIkFuaW1hdGlvbkV2ZW50ImluIHdpbmRvd3x8KGRlbGV0ZSBLLmFuaW1hdGlvbmVuZC5hbmltYXRpb24sZGVsZXRlIEsuYW5pbWF0aW9uaXRlcmF0aW9uLmFuaW1hdGlvbixkZWxldGUgSy5hbmltYXRpb25zdGFydC5hbmltYXRpb24pLCJUcmFuc2l0aW9uRXZlbnQiaW4gd2luZG93fHxkZWxldGUgSy50cmFuc2l0aW9uZW5kLnRyYW5zaXRpb24pO3ZhciBaPUooImFuaW1hdGlvbmVuZCIpLGVlPUooImFuaW1hdGlvbml0ZXJhdGlvbiIpLHRlPUooImFuaW1hdGlvbnN0YXJ0IiksbmU9SigidHJhbnNpdGlvbmVuZCIpLHJlPSJhYm9ydCBjYW5wbGF5IGNhbnBsYXl0aHJvdWdoIGR1cmF0aW9uY2hhbmdlIGVtcHRpZWQgZW5jcnlwdGVkIGVuZGVkIGVycm9yIGxvYWRlZGRhdGEgbG9hZGVkbWV0YWRhdGEgbG9hZHN0YXJ0IHBhdXNlIHBsYXkgcGxheWluZyBwcm9ncmVzcyByYXRlY2hhbmdlIHNlZWtlZCBzZWVraW5nIHN0YWxsZWQgc3VzcGVuZCB0aW1ldXBkYXRlIHZvbHVtZWNoYW5nZSB3YWl0aW5nIi5zcGxpdCgiICIpLG9lPW51bGwsaWU9bnVsbCxhZT1udWxsO2Z1bmN0aW9uIHVlKCl7aWYoYWUpcmV0dXJuIGFlO3ZhciBlLHQsbj1pZSxyPW4ubGVuZ3RoLG89InZhbHVlImluIG9lP29lLnZhbHVlOm9lLnRleHRDb250ZW50LGk9by5sZW5ndGg7Zm9yKGU9MDtlPHImJm5bZV09PT1vW2VdO2UrKyk7dmFyIGE9ci1lO2Zvcih0PTE7dDw9YSYmbltyLXRdPT09b1tpLXRdO3QrKyk7cmV0dXJuIGFlPW8uc2xpY2UoZSwxPHQ/MS10OnZvaWQgMCl9ZnVuY3Rpb24gY2UoKXtyZXR1cm4hMH1mdW5jdGlvbiBsZSgpe3JldHVybiExfWZ1bmN0aW9uIHNlKGUsdCxuLHIpe2Zvcih2YXIgbyBpbiB0aGlzLmRpc3BhdGNoQ29uZmlnPWUsdGhpcy5fdGFyZ2V0SW5zdD10LHRoaXMubmF0aXZlRXZlbnQ9bixlPXRoaXMuY29uc3RydWN0b3IuSW50ZXJmYWNlKWUuaGFzT3duUHJvcGVydHkobykmJigodD1lW29dKT90aGlzW29dPXQobik6InRhcmdldCI9PT1vP3RoaXMudGFyZ2V0PXI6dGhpc1tvXT1uW29dKTtyZXR1cm4gdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9KG51bGwhPW4uZGVmYXVsdFByZXZlbnRlZD9uLmRlZmF1bHRQcmV2ZW50ZWQ6ITE9PT1uLnJldHVyblZhbHVlKT9jZTpsZSx0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPWxlLHRoaXN9ZnVuY3Rpb24gZmUoZSx0LG4scil7aWYodGhpcy5ldmVudFBvb2wubGVuZ3RoKXt2YXIgbz10aGlzLmV2ZW50UG9vbC5wb3AoKTtyZXR1cm4gdGhpcy5jYWxsKG8sZSx0LG4sciksb31yZXR1cm4gbmV3IHRoaXMoZSx0LG4scil9ZnVuY3Rpb24gcGUoZSl7ZSBpbnN0YW5jZW9mIHRoaXN8fGEoIjI3OSIpLGUuZGVzdHJ1Y3RvcigpLDEwPnRoaXMuZXZlbnRQb29sLmxlbmd0aCYmdGhpcy5ldmVudFBvb2wucHVzaChlKX1mdW5jdGlvbiBkZShlKXtlLmV2ZW50UG9vbD1bXSxlLmdldFBvb2xlZD1mZSxlLnJlbGVhc2U9cGV9byhzZS5wcm90b3R5cGUse3ByZXZlbnREZWZhdWx0OmZ1bmN0aW9uKCl7dGhpcy5kZWZhdWx0UHJldmVudGVkPSEwO3ZhciBlPXRoaXMubmF0aXZlRXZlbnQ7ZSYmKGUucHJldmVudERlZmF1bHQ/ZS5wcmV2ZW50RGVmYXVsdCgpOiJ1bmtub3duIiE9dHlwZW9mIGUucmV0dXJuVmFsdWUmJihlLnJldHVyblZhbHVlPSExKSx0aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1jZSl9LHN0b3BQcm9wYWdhdGlvbjpmdW5jdGlvbigpe3ZhciBlPXRoaXMubmF0aXZlRXZlbnQ7ZSYmKGUuc3RvcFByb3BhZ2F0aW9uP2Uuc3RvcFByb3BhZ2F0aW9uKCk6InVua25vd24iIT10eXBlb2YgZS5jYW5jZWxCdWJibGUmJihlLmNhbmNlbEJ1YmJsZT0hMCksdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD1jZSl9LHBlcnNpc3Q6ZnVuY3Rpb24oKXt0aGlzLmlzUGVyc2lzdGVudD1jZX0saXNQZXJzaXN0ZW50OmxlLGRlc3RydWN0b3I6ZnVuY3Rpb24oKXt2YXIgZSx0PXRoaXMuY29uc3RydWN0b3IuSW50ZXJmYWNlO2ZvcihlIGluIHQpdGhpc1tlXT1udWxsO3RoaXMubmF0aXZlRXZlbnQ9dGhpcy5fdGFyZ2V0SW5zdD10aGlzLmRpc3BhdGNoQ29uZmlnPW51bGwsdGhpcy5pc1Byb3BhZ2F0aW9uU3RvcHBlZD10aGlzLmlzRGVmYXVsdFByZXZlbnRlZD1sZSx0aGlzLl9kaXNwYXRjaEluc3RhbmNlcz10aGlzLl9kaXNwYXRjaExpc3RlbmVycz1udWxsfX0pLHNlLkludGVyZmFjZT17dHlwZTpudWxsLHRhcmdldDpudWxsLGN1cnJlbnRUYXJnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0sZXZlbnRQaGFzZTpudWxsLGJ1YmJsZXM6bnVsbCxjYW5jZWxhYmxlOm51bGwsdGltZVN0YW1wOmZ1bmN0aW9uKGUpe3JldHVybiBlLnRpbWVTdGFtcHx8RGF0ZS5ub3coKX0sZGVmYXVsdFByZXZlbnRlZDpudWxsLGlzVHJ1c3RlZDpudWxsfSxzZS5leHRlbmQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe31mdW5jdGlvbiBuKCl7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfXZhciByPXRoaXM7dC5wcm90b3R5cGU9ci5wcm90b3R5cGU7dmFyIGk9bmV3IHQ7cmV0dXJuIG8oaSxuLnByb3RvdHlwZSksbi5wcm90b3R5cGU9aSxuLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1uLG4uSW50ZXJmYWNlPW8oe30sci5JbnRlcmZhY2UsZSksbi5leHRlbmQ9ci5leHRlbmQsZGUobiksbn0sZGUoc2UpO3ZhciBoZT1zZS5leHRlbmQoe2RhdGE6bnVsbH0pLHllPXNlLmV4dGVuZCh7ZGF0YTpudWxsfSksX2U9WzksMTMsMjcsMzJdLHZlPVYmJiJDb21wb3NpdGlvbkV2ZW50ImluIHdpbmRvdyxtZT1udWxsO1YmJiJkb2N1bWVudE1vZGUiaW4gZG9jdW1lbnQmJihtZT1kb2N1bWVudC5kb2N1bWVudE1vZGUpO3ZhciBnZT1WJiYiVGV4dEV2ZW50ImluIHdpbmRvdyYmIW1lLGJlPVYmJighdmV8fG1lJiY4PG1lJiYxMT49bWUpLHdlPVN0cmluZy5mcm9tQ2hhckNvZGUoMzIpLEVlPXtiZWZvcmVJbnB1dDp7cGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6e2J1YmJsZWQ6Im9uQmVmb3JlSW5wdXQiLGNhcHR1cmVkOiJvbkJlZm9yZUlucHV0Q2FwdHVyZSJ9LGRlcGVuZGVuY2llczpbImNvbXBvc2l0aW9uZW5kIiwia2V5cHJlc3MiLCJ0ZXh0SW5wdXQiLCJwYXN0ZSJdfSxjb21wb3NpdGlvbkVuZDp7cGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6e2J1YmJsZWQ6Im9uQ29tcG9zaXRpb25FbmQiLGNhcHR1cmVkOiJvbkNvbXBvc2l0aW9uRW5kQ2FwdHVyZSJ9LGRlcGVuZGVuY2llczoiYmx1ciBjb21wb3NpdGlvbmVuZCBrZXlkb3duIGtleXByZXNzIGtleXVwIG1vdXNlZG93biIuc3BsaXQoIiAiKX0sY29tcG9zaXRpb25TdGFydDp7cGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6e2J1YmJsZWQ6Im9uQ29tcG9zaXRpb25TdGFydCIsY2FwdHVyZWQ6Im9uQ29tcG9zaXRpb25TdGFydENhcHR1cmUifSxkZXBlbmRlbmNpZXM6ImJsdXIgY29tcG9zaXRpb25zdGFydCBrZXlkb3duIGtleXByZXNzIGtleXVwIG1vdXNlZG93biIuc3BsaXQoIiAiKX0sY29tcG9zaXRpb25VcGRhdGU6e3BoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOntidWJibGVkOiJvbkNvbXBvc2l0aW9uVXBkYXRlIixjYXB0dXJlZDoib25Db21wb3NpdGlvblVwZGF0ZUNhcHR1cmUifSxkZXBlbmRlbmNpZXM6ImJsdXIgY29tcG9zaXRpb251cGRhdGUga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBtb3VzZWRvd24iLnNwbGl0KCIgIil9fSxUZT0hMTtmdW5jdGlvbiBPZShlLHQpe3N3aXRjaChlKXtjYXNlImtleXVwIjpyZXR1cm4tMSE9PV9lLmluZGV4T2YodC5rZXlDb2RlKTtjYXNlImtleWRvd24iOnJldHVybiAyMjkhPT10LmtleUNvZGU7Y2FzZSJrZXlwcmVzcyI6Y2FzZSJtb3VzZWRvd24iOmNhc2UiYmx1ciI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19ZnVuY3Rpb24gU2UoZSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZihlPWUuZGV0YWlsKSYmImRhdGEiaW4gZT9lLmRhdGE6bnVsbH12YXIgeGU9ITE7dmFyIFBlPXtldmVudFR5cGVzOkVlLGV4dHJhY3RFdmVudHM6ZnVuY3Rpb24oZSx0LG4scil7dmFyIG89dm9pZCAwLGk9dm9pZCAwO2lmKHZlKWU6e3N3aXRjaChlKXtjYXNlImNvbXBvc2l0aW9uc3RhcnQiOm89RWUuY29tcG9zaXRpb25TdGFydDticmVhayBlO2Nhc2UiY29tcG9zaXRpb25lbmQiOm89RWUuY29tcG9zaXRpb25FbmQ7YnJlYWsgZTtjYXNlImNvbXBvc2l0aW9udXBkYXRlIjpvPUVlLmNvbXBvc2l0aW9uVXBkYXRlO2JyZWFrIGV9bz12b2lkIDB9ZWxzZSB4ZT9PZShlLG4pJiYobz1FZS5jb21wb3NpdGlvbkVuZCk6ImtleWRvd24iPT09ZSYmMjI5PT09bi5rZXlDb2RlJiYobz1FZS5jb21wb3NpdGlvblN0YXJ0KTtyZXR1cm4gbz8oYmUmJiJrbyIhPT1uLmxvY2FsZSYmKHhlfHxvIT09RWUuY29tcG9zaXRpb25TdGFydD9vPT09RWUuY29tcG9zaXRpb25FbmQmJnhlJiYoaT11ZSgpKTooaWU9InZhbHVlImluKG9lPXIpP29lLnZhbHVlOm9lLnRleHRDb250ZW50LHhlPSEwKSksbz1oZS5nZXRQb29sZWQobyx0LG4sciksaT9vLmRhdGE9aTpudWxsIT09KGk9U2UobikpJiYoby5kYXRhPWkpLEgobyksaT1vKTppPW51bGwsKGU9Z2U/ZnVuY3Rpb24oZSx0KXtzd2l0Y2goZSl7Y2FzZSJjb21wb3NpdGlvbmVuZCI6cmV0dXJuIFNlKHQpO2Nhc2Uia2V5cHJlc3MiOnJldHVybiAzMiE9PXQud2hpY2g/bnVsbDooVGU9ITAsd2UpO2Nhc2UidGV4dElucHV0IjpyZXR1cm4oZT10LmRhdGEpPT09d2UmJlRlP251bGw6ZTtkZWZhdWx0OnJldHVybiBudWxsfX0oZSxuKTpmdW5jdGlvbihlLHQpe2lmKHhlKXJldHVybiJjb21wb3NpdGlvbmVuZCI9PT1lfHwhdmUmJk9lKGUsdCk/KGU9dWUoKSxhZT1pZT1vZT1udWxsLHhlPSExLGUpOm51bGw7c3dpdGNoKGUpe2Nhc2UicGFzdGUiOnJldHVybiBudWxsO2Nhc2Uia2V5cHJlc3MiOmlmKCEodC5jdHJsS2V5fHx0LmFsdEtleXx8dC5tZXRhS2V5KXx8dC5jdHJsS2V5JiZ0LmFsdEtleSl7aWYodC5jaGFyJiYxPHQuY2hhci5sZW5ndGgpcmV0dXJuIHQuY2hhcjtpZih0LndoaWNoKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHQud2hpY2gpfXJldHVybiBudWxsO2Nhc2UiY29tcG9zaXRpb25lbmQiOnJldHVybiBiZSYmImtvIiE9PXQubG9jYWxlP251bGw6dC5kYXRhO2RlZmF1bHQ6cmV0dXJuIG51bGx9fShlLG4pKT8oKHQ9eWUuZ2V0UG9vbGVkKEVlLmJlZm9yZUlucHV0LHQsbixyKSkuZGF0YT1lLEgodCkpOnQ9bnVsbCxudWxsPT09aT90Om51bGw9PT10P2k6W2ksdF19fSxSZT1udWxsLENlPW51bGwsa2U9bnVsbDtmdW5jdGlvbiBOZShlKXtpZihlPUUoZSkpeyJmdW5jdGlvbiIhPXR5cGVvZiBSZSYmYSgiMjgwIik7dmFyIHQ9dyhlLnN0YXRlTm9kZSk7UmUoZS5zdGF0ZU5vZGUsZS50eXBlLHQpfX1mdW5jdGlvbiBBZShlKXtDZT9rZT9rZS5wdXNoKGUpOmtlPVtlXTpDZT1lfWZ1bmN0aW9uIEllKCl7aWYoQ2Upe3ZhciBlPUNlLHQ9a2U7aWYoa2U9Q2U9bnVsbCxOZShlKSx0KWZvcihlPTA7ZTx0Lmxlbmd0aDtlKyspTmUodFtlXSl9fWZ1bmN0aW9uIERlKGUsdCl7cmV0dXJuIGUodCl9ZnVuY3Rpb24gamUoZSx0LG4pe3JldHVybiBlKHQsbil9ZnVuY3Rpb24gTGUoKXt9dmFyIE1lPSExO2Z1bmN0aW9uIEZlKGUsdCl7aWYoTWUpcmV0dXJuIGUodCk7TWU9ITA7dHJ5e3JldHVybiBEZShlLHQpfWZpbmFsbHl7TWU9ITEsKG51bGwhPT1DZXx8bnVsbCE9PWtlKSYmKExlKCksSWUoKSl9fXZhciBVZT17Y29sb3I6ITAsZGF0ZTohMCxkYXRldGltZTohMCwiZGF0ZXRpbWUtbG9jYWwiOiEwLGVtYWlsOiEwLG1vbnRoOiEwLG51bWJlcjohMCxwYXNzd29yZDohMCxyYW5nZTohMCxzZWFyY2g6ITAsdGVsOiEwLHRleHQ6ITAsdGltZTohMCx1cmw6ITAsd2VlazohMH07ZnVuY3Rpb24gV2UoZSl7dmFyIHQ9ZSYmZS5ub2RlTmFtZSYmZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9PT10PyEhVWVbZS50eXBlXToidGV4dGFyZWEiPT09dH1mdW5jdGlvbiAkZShlKXtyZXR1cm4oZT1lLnRhcmdldHx8ZS5zcmNFbGVtZW50fHx3aW5kb3cpLmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50JiYoZT1lLmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50KSwzPT09ZS5ub2RlVHlwZT9lLnBhcmVudE5vZGU6ZX1mdW5jdGlvbiBHZShlKXtpZighVilyZXR1cm4hMTt2YXIgdD0oZT0ib24iK2UpaW4gZG9jdW1lbnQ7cmV0dXJuIHR8fCgodD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKSkuc2V0QXR0cmlidXRlKGUsInJldHVybjsiKSx0PSJmdW5jdGlvbiI9PXR5cGVvZiB0W2VdKSx0fWZ1bmN0aW9uIEJlKGUpe3ZhciB0PWUudHlwZTtyZXR1cm4oZT1lLm5vZGVOYW1lKSYmImlucHV0Ij09PWUudG9Mb3dlckNhc2UoKSYmKCJjaGVja2JveCI9PT10fHwicmFkaW8iPT09dCl9ZnVuY3Rpb24gcWUoZSl7ZS5fdmFsdWVUcmFja2VyfHwoZS5fdmFsdWVUcmFja2VyPWZ1bmN0aW9uKGUpe3ZhciB0PUJlKGUpPyJjaGVja2VkIjoidmFsdWUiLG49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSx0KSxyPSIiK2VbdF07aWYoIWUuaGFzT3duUHJvcGVydHkodCkmJnZvaWQgMCE9PW4mJiJmdW5jdGlvbiI9PXR5cGVvZiBuLmdldCYmImZ1bmN0aW9uIj09dHlwZW9mIG4uc2V0KXt2YXIgbz1uLmdldCxpPW4uc2V0O3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG8uY2FsbCh0aGlzKX0sc2V0OmZ1bmN0aW9uKGUpe3I9IiIrZSxpLmNhbGwodGhpcyxlKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtlbnVtZXJhYmxlOm4uZW51bWVyYWJsZX0pLHtnZXRWYWx1ZTpmdW5jdGlvbigpe3JldHVybiByfSxzZXRWYWx1ZTpmdW5jdGlvbihlKXtyPSIiK2V9LHN0b3BUcmFja2luZzpmdW5jdGlvbigpe2UuX3ZhbHVlVHJhY2tlcj1udWxsLGRlbGV0ZSBlW3RdfX19fShlKSl9ZnVuY3Rpb24gemUoZSl7aWYoIWUpcmV0dXJuITE7dmFyIHQ9ZS5fdmFsdWVUcmFja2VyO2lmKCF0KXJldHVybiEwO3ZhciBuPXQuZ2V0VmFsdWUoKSxyPSIiO3JldHVybiBlJiYocj1CZShlKT9lLmNoZWNrZWQ/InRydWUiOiJmYWxzZSI6ZS52YWx1ZSksKGU9cikhPT1uJiYodC5zZXRWYWx1ZShlKSwhMCl9dmFyIEhlPXIuX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQsVmU9L14oLiopW1xcXC9dLyxZZT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yLEtlPVllP1N5bWJvbC5mb3IoInJlYWN0LmVsZW1lbnQiKTo2MDEwMyxRZT1ZZT9TeW1ib2wuZm9yKCJyZWFjdC5wb3J0YWwiKTo2MDEwNixYZT1ZZT9TeW1ib2wuZm9yKCJyZWFjdC5mcmFnbWVudCIpOjYwMTA3LEplPVllP1N5bWJvbC5mb3IoInJlYWN0LnN0cmljdF9tb2RlIik6NjAxMDgsWmU9WWU/U3ltYm9sLmZvcigicmVhY3QucHJvZmlsZXIiKTo2MDExNCxldD1ZZT9TeW1ib2wuZm9yKCJyZWFjdC5wcm92aWRlciIpOjYwMTA5LHR0PVllP1N5bWJvbC5mb3IoInJlYWN0LmNvbnRleHQiKTo2MDExMCxudD1ZZT9TeW1ib2wuZm9yKCJyZWFjdC5jb25jdXJyZW50X21vZGUiKTo2MDExMSxydD1ZZT9TeW1ib2wuZm9yKCJyZWFjdC5mb3J3YXJkX3JlZiIpOjYwMTEyLG90PVllP1N5bWJvbC5mb3IoInJlYWN0LnN1c3BlbnNlIik6NjAxMTMsaXQ9WWU/U3ltYm9sLmZvcigicmVhY3QubWVtbyIpOjYwMTE1LGF0PVllP1N5bWJvbC5mb3IoInJlYWN0LmxhenkiKTo2MDExNix1dD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuaXRlcmF0b3I7ZnVuY3Rpb24gY3QoZSl7cmV0dXJuIG51bGw9PT1lfHwib2JqZWN0IiE9dHlwZW9mIGU/bnVsbDoiZnVuY3Rpb24iPT10eXBlb2YoZT11dCYmZVt1dF18fGVbIkBAaXRlcmF0b3IiXSk/ZTpudWxsfWZ1bmN0aW9uIGx0KGUpe2lmKG51bGw9PWUpcmV0dXJuIG51bGw7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUpcmV0dXJuIGUuZGlzcGxheU5hbWV8fGUubmFtZXx8bnVsbDtpZigic3RyaW5nIj09dHlwZW9mIGUpcmV0dXJuIGU7c3dpdGNoKGUpe2Nhc2UgbnQ6cmV0dXJuIkNvbmN1cnJlbnRNb2RlIjtjYXNlIFhlOnJldHVybiJGcmFnbWVudCI7Y2FzZSBRZTpyZXR1cm4iUG9ydGFsIjtjYXNlIFplOnJldHVybiJQcm9maWxlciI7Y2FzZSBKZTpyZXR1cm4iU3RyaWN0TW9kZSI7Y2FzZSBvdDpyZXR1cm4iU3VzcGVuc2UifWlmKCJvYmplY3QiPT10eXBlb2YgZSlzd2l0Y2goZS4kJHR5cGVvZil7Y2FzZSB0dDpyZXR1cm4iQ29udGV4dC5Db25zdW1lciI7Y2FzZSBldDpyZXR1cm4iQ29udGV4dC5Qcm92aWRlciI7Y2FzZSBydDp2YXIgdD1lLnJlbmRlcjtyZXR1cm4gdD10LmRpc3BsYXlOYW1lfHx0Lm5hbWV8fCIiLGUuZGlzcGxheU5hbWV8fCgiIiE9PXQ/IkZvcndhcmRSZWYoIit0KyIpIjoiRm9yd2FyZFJlZiIpO2Nhc2UgaXQ6cmV0dXJuIGx0KGUudHlwZSk7Y2FzZSBhdDppZihlPTE9PT1lLl9zdGF0dXM/ZS5fcmVzdWx0Om51bGwpcmV0dXJuIGx0KGUpfXJldHVybiBudWxsfWZ1bmN0aW9uIHN0KGUpe3ZhciB0PSIiO2Rve2U6c3dpdGNoKGUudGFnKXtjYXNlIDI6Y2FzZSAxNjpjYXNlIDA6Y2FzZSAxOmNhc2UgNTpjYXNlIDg6dmFyIG49ZS5fZGVidWdPd25lcixyPWUuX2RlYnVnU291cmNlLG89bHQoZS50eXBlKSxpPW51bGw7biYmKGk9bHQobi50eXBlKSksbj1vLG89IiIscj9vPSIgKGF0ICIrci5maWxlTmFtZS5yZXBsYWNlKFZlLCIiKSsiOiIrci5saW5lTnVtYmVyKyIpIjppJiYobz0iIChjcmVhdGVkIGJ5ICIraSsiKSIpLGk9IlxuICAgIGluICIrKG58fCJVbmtub3duIikrbzticmVhayBlO2RlZmF1bHQ6aT0iIn10Kz1pLGU9ZS5yZXR1cm59d2hpbGUoZSk7cmV0dXJuIHR9dmFyIGZ0PS9eWzpBLVpfYS16XHUwMEMwLVx1MDBENlx1MDBEOC1cdTAwRjZcdTAwRjgtXHUwMkZGXHUwMzcwLVx1MDM3RFx1MDM3Ri1cdTFGRkZcdTIwMEMtXHUyMDBEXHUyMDcwLVx1MjE4Rlx1MkMwMC1cdTJGRUZcdTMwMDEtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGRkRdWzpBLVpfYS16XHUwMEMwLVx1MDBENlx1MDBEOC1cdTAwRjZcdTAwRjgtXHUwMkZGXHUwMzcwLVx1MDM3RFx1MDM3Ri1cdTFGRkZcdTIwMEMtXHUyMDBEXHUyMDcwLVx1MjE4Rlx1MkMwMC1cdTJGRUZcdTMwMDEtXHVEN0ZGXHVGOTAwLVx1RkRDRlx1RkRGMC1cdUZGRkRcLS4wLTlcdTAwQjdcdTAzMDAtXHUwMzZGXHUyMDNGLVx1MjA0MF0qJC8scHQ9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxkdD17fSxodD17fTtmdW5jdGlvbiB5dChlLHQsbixyLG8pe3RoaXMuYWNjZXB0c0Jvb2xlYW5zPTI9PT10fHwzPT09dHx8ND09PXQsdGhpcy5hdHRyaWJ1dGVOYW1lPXIsdGhpcy5hdHRyaWJ1dGVOYW1lc3BhY2U9byx0aGlzLm11c3RVc2VQcm9wZXJ0eT1uLHRoaXMucHJvcGVydHlOYW1lPWUsdGhpcy50eXBlPXR9dmFyIF90PXt9OyJjaGlsZHJlbiBkYW5nZXJvdXNseVNldElubmVySFRNTCBkZWZhdWx0VmFsdWUgZGVmYXVsdENoZWNrZWQgaW5uZXJIVE1MIHN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZyBzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmcgc3R5bGUiLnNwbGl0KCIgIikuZm9yRWFjaChmdW5jdGlvbihlKXtfdFtlXT1uZXcgeXQoZSwwLCExLGUsbnVsbCl9KSxbWyJhY2NlcHRDaGFyc2V0IiwiYWNjZXB0LWNoYXJzZXQiXSxbImNsYXNzTmFtZSIsImNsYXNzIl0sWyJodG1sRm9yIiwiZm9yIl0sWyJodHRwRXF1aXYiLCJodHRwLWVxdWl2Il1dLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9ZVswXTtfdFt0XT1uZXcgeXQodCwxLCExLGVbMV0sbnVsbCl9KSxbImNvbnRlbnRFZGl0YWJsZSIsImRyYWdnYWJsZSIsInNwZWxsQ2hlY2siLCJ2YWx1ZSJdLmZvckVhY2goZnVuY3Rpb24oZSl7X3RbZV09bmV3IHl0KGUsMiwhMSxlLnRvTG93ZXJDYXNlKCksbnVsbCl9KSxbImF1dG9SZXZlcnNlIiwiZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZCIsImZvY3VzYWJsZSIsInByZXNlcnZlQWxwaGEiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe190W2VdPW5ldyB5dChlLDIsITEsZSxudWxsKX0pLCJhbGxvd0Z1bGxTY3JlZW4gYXN5bmMgYXV0b0ZvY3VzIGF1dG9QbGF5IGNvbnRyb2xzIGRlZmF1bHQgZGVmZXIgZGlzYWJsZWQgZm9ybU5vVmFsaWRhdGUgaGlkZGVuIGxvb3Agbm9Nb2R1bGUgbm9WYWxpZGF0ZSBvcGVuIHBsYXlzSW5saW5lIHJlYWRPbmx5IHJlcXVpcmVkIHJldmVyc2VkIHNjb3BlZCBzZWFtbGVzcyBpdGVtU2NvcGUiLnNwbGl0KCIgIikuZm9yRWFjaChmdW5jdGlvbihlKXtfdFtlXT1uZXcgeXQoZSwzLCExLGUudG9Mb3dlckNhc2UoKSxudWxsKX0pLFsiY2hlY2tlZCIsIm11bHRpcGxlIiwibXV0ZWQiLCJzZWxlY3RlZCJdLmZvckVhY2goZnVuY3Rpb24oZSl7X3RbZV09bmV3IHl0KGUsMywhMCxlLG51bGwpfSksWyJjYXB0dXJlIiwiZG93bmxvYWQiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe190W2VdPW5ldyB5dChlLDQsITEsZSxudWxsKX0pLFsiY29scyIsInJvd3MiLCJzaXplIiwic3BhbiJdLmZvckVhY2goZnVuY3Rpb24oZSl7X3RbZV09bmV3IHl0KGUsNiwhMSxlLG51bGwpfSksWyJyb3dTcGFuIiwic3RhcnQiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe190W2VdPW5ldyB5dChlLDUsITEsZS50b0xvd2VyQ2FzZSgpLG51bGwpfSk7dmFyIHZ0PS9bXC06XShbYS16XSkvZztmdW5jdGlvbiBtdChlKXtyZXR1cm4gZVsxXS50b1VwcGVyQ2FzZSgpfWZ1bmN0aW9uIGd0KGUsdCxuLHIpe3ZhciBvPV90Lmhhc093blByb3BlcnR5KHQpP190W3RdOm51bGw7KG51bGwhPT1vPzA9PT1vLnR5cGU6IXImJigyPHQubGVuZ3RoJiYoIm8iPT09dFswXXx8Ik8iPT09dFswXSkmJigibiI9PT10WzFdfHwiTiI9PT10WzFdKSkpfHwoZnVuY3Rpb24oZSx0LG4scil7aWYobnVsbD09dHx8ZnVuY3Rpb24oZSx0LG4scil7aWYobnVsbCE9PW4mJjA9PT1uLnR5cGUpcmV0dXJuITE7c3dpdGNoKHR5cGVvZiB0KXtjYXNlImZ1bmN0aW9uIjpjYXNlInN5bWJvbCI6cmV0dXJuITA7Y2FzZSJib29sZWFuIjpyZXR1cm4hciYmKG51bGwhPT1uPyFuLmFjY2VwdHNCb29sZWFuczoiZGF0YS0iIT09KGU9ZS50b0xvd2VyQ2FzZSgpLnNsaWNlKDAsNSkpJiYiYXJpYS0iIT09ZSk7ZGVmYXVsdDpyZXR1cm4hMX19KGUsdCxuLHIpKXJldHVybiEwO2lmKHIpcmV0dXJuITE7aWYobnVsbCE9PW4pc3dpdGNoKG4udHlwZSl7Y2FzZSAzOnJldHVybiF0O2Nhc2UgNDpyZXR1cm4hMT09PXQ7Y2FzZSA1OnJldHVybiBpc05hTih0KTtjYXNlIDY6cmV0dXJuIGlzTmFOKHQpfHwxPnR9cmV0dXJuITF9KHQsbixvLHIpJiYobj1udWxsKSxyfHxudWxsPT09bz9mdW5jdGlvbihlKXtyZXR1cm4hIXB0LmNhbGwoaHQsZSl8fCFwdC5jYWxsKGR0LGUpJiYoZnQudGVzdChlKT9odFtlXT0hMDooZHRbZV09ITAsITEpKX0odCkmJihudWxsPT09bj9lLnJlbW92ZUF0dHJpYnV0ZSh0KTplLnNldEF0dHJpYnV0ZSh0LCIiK24pKTpvLm11c3RVc2VQcm9wZXJ0eT9lW28ucHJvcGVydHlOYW1lXT1udWxsPT09bj8zIT09by50eXBlJiYiIjpuOih0PW8uYXR0cmlidXRlTmFtZSxyPW8uYXR0cmlidXRlTmFtZXNwYWNlLG51bGw9PT1uP2UucmVtb3ZlQXR0cmlidXRlKHQpOihuPTM9PT0obz1vLnR5cGUpfHw0PT09byYmITA9PT1uPyIiOiIiK24scj9lLnNldEF0dHJpYnV0ZU5TKHIsdCxuKTplLnNldEF0dHJpYnV0ZSh0LG4pKSkpfWZ1bmN0aW9uIGJ0KGUpe3N3aXRjaCh0eXBlb2YgZSl7Y2FzZSJib29sZWFuIjpjYXNlIm51bWJlciI6Y2FzZSJvYmplY3QiOmNhc2Uic3RyaW5nIjpjYXNlInVuZGVmaW5lZCI6cmV0dXJuIGU7ZGVmYXVsdDpyZXR1cm4iIn19ZnVuY3Rpb24gd3QoZSx0KXt2YXIgbj10LmNoZWNrZWQ7cmV0dXJuIG8oe30sdCx7ZGVmYXVsdENoZWNrZWQ6dm9pZCAwLGRlZmF1bHRWYWx1ZTp2b2lkIDAsdmFsdWU6dm9pZCAwLGNoZWNrZWQ6bnVsbCE9bj9uOmUuX3dyYXBwZXJTdGF0ZS5pbml0aWFsQ2hlY2tlZH0pfWZ1bmN0aW9uIEV0KGUsdCl7dmFyIG49bnVsbD09dC5kZWZhdWx0VmFsdWU/IiI6dC5kZWZhdWx0VmFsdWUscj1udWxsIT10LmNoZWNrZWQ/dC5jaGVja2VkOnQuZGVmYXVsdENoZWNrZWQ7bj1idChudWxsIT10LnZhbHVlP3QudmFsdWU6biksZS5fd3JhcHBlclN0YXRlPXtpbml0aWFsQ2hlY2tlZDpyLGluaXRpYWxWYWx1ZTpuLGNvbnRyb2xsZWQ6ImNoZWNrYm94Ij09PXQudHlwZXx8InJhZGlvIj09PXQudHlwZT9udWxsIT10LmNoZWNrZWQ6bnVsbCE9dC52YWx1ZX19ZnVuY3Rpb24gVHQoZSx0KXtudWxsIT0odD10LmNoZWNrZWQpJiZndChlLCJjaGVja2VkIix0LCExKX1mdW5jdGlvbiBPdChlLHQpe1R0KGUsdCk7dmFyIG49YnQodC52YWx1ZSkscj10LnR5cGU7aWYobnVsbCE9bikibnVtYmVyIj09PXI/KDA9PT1uJiYiIj09PWUudmFsdWV8fGUudmFsdWUhPW4pJiYoZS52YWx1ZT0iIituKTplLnZhbHVlIT09IiIrbiYmKGUudmFsdWU9IiIrbik7ZWxzZSBpZigic3VibWl0Ij09PXJ8fCJyZXNldCI9PT1yKXJldHVybiB2b2lkIGUucmVtb3ZlQXR0cmlidXRlKCJ2YWx1ZSIpO3QuaGFzT3duUHJvcGVydHkoInZhbHVlIik/eHQoZSx0LnR5cGUsbik6dC5oYXNPd25Qcm9wZXJ0eSgiZGVmYXVsdFZhbHVlIikmJnh0KGUsdC50eXBlLGJ0KHQuZGVmYXVsdFZhbHVlKSksbnVsbD09dC5jaGVja2VkJiZudWxsIT10LmRlZmF1bHRDaGVja2VkJiYoZS5kZWZhdWx0Q2hlY2tlZD0hIXQuZGVmYXVsdENoZWNrZWQpfWZ1bmN0aW9uIFN0KGUsdCxuKXtpZih0Lmhhc093blByb3BlcnR5KCJ2YWx1ZSIpfHx0Lmhhc093blByb3BlcnR5KCJkZWZhdWx0VmFsdWUiKSl7dmFyIHI9dC50eXBlO2lmKCEoInN1Ym1pdCIhPT1yJiYicmVzZXQiIT09cnx8dm9pZCAwIT09dC52YWx1ZSYmbnVsbCE9PXQudmFsdWUpKXJldHVybjt0PSIiK2UuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWUsbnx8dD09PWUudmFsdWV8fChlLnZhbHVlPXQpLGUuZGVmYXVsdFZhbHVlPXR9IiIhPT0obj1lLm5hbWUpJiYoZS5uYW1lPSIiKSxlLmRlZmF1bHRDaGVja2VkPSFlLmRlZmF1bHRDaGVja2VkLGUuZGVmYXVsdENoZWNrZWQ9ISFlLl93cmFwcGVyU3RhdGUuaW5pdGlhbENoZWNrZWQsIiIhPT1uJiYoZS5uYW1lPW4pfWZ1bmN0aW9uIHh0KGUsdCxuKXsibnVtYmVyIj09PXQmJmUub3duZXJEb2N1bWVudC5hY3RpdmVFbGVtZW50PT09ZXx8KG51bGw9PW4/ZS5kZWZhdWx0VmFsdWU9IiIrZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZTplLmRlZmF1bHRWYWx1ZSE9PSIiK24mJihlLmRlZmF1bHRWYWx1ZT0iIituKSl9ImFjY2VudC1oZWlnaHQgYWxpZ25tZW50LWJhc2VsaW5lIGFyYWJpYy1mb3JtIGJhc2VsaW5lLXNoaWZ0IGNhcC1oZWlnaHQgY2xpcC1wYXRoIGNsaXAtcnVsZSBjb2xvci1pbnRlcnBvbGF0aW9uIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycyBjb2xvci1wcm9maWxlIGNvbG9yLXJlbmRlcmluZyBkb21pbmFudC1iYXNlbGluZSBlbmFibGUtYmFja2dyb3VuZCBmaWxsLW9wYWNpdHkgZmlsbC1ydWxlIGZsb29kLWNvbG9yIGZsb29kLW9wYWNpdHkgZm9udC1mYW1pbHkgZm9udC1zaXplIGZvbnQtc2l6ZS1hZGp1c3QgZm9udC1zdHJldGNoIGZvbnQtc3R5bGUgZm9udC12YXJpYW50IGZvbnQtd2VpZ2h0IGdseXBoLW5hbWUgZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbCBnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbCBob3Jpei1hZHYteCBob3Jpei1vcmlnaW4teCBpbWFnZS1yZW5kZXJpbmcgbGV0dGVyLXNwYWNpbmcgbGlnaHRpbmctY29sb3IgbWFya2VyLWVuZCBtYXJrZXItbWlkIG1hcmtlci1zdGFydCBvdmVybGluZS1wb3NpdGlvbiBvdmVybGluZS10aGlja25lc3MgcGFpbnQtb3JkZXIgcGFub3NlLTEgcG9pbnRlci1ldmVudHMgcmVuZGVyaW5nLWludGVudCBzaGFwZS1yZW5kZXJpbmcgc3RvcC1jb2xvciBzdG9wLW9wYWNpdHkgc3RyaWtldGhyb3VnaC1wb3NpdGlvbiBzdHJpa2V0aHJvdWdoLXRoaWNrbmVzcyBzdHJva2UtZGFzaGFycmF5IHN0cm9rZS1kYXNob2Zmc2V0IHN0cm9rZS1saW5lY2FwIHN0cm9rZS1saW5lam9pbiBzdHJva2UtbWl0ZXJsaW1pdCBzdHJva2Utb3BhY2l0eSBzdHJva2Utd2lkdGggdGV4dC1hbmNob3IgdGV4dC1kZWNvcmF0aW9uIHRleHQtcmVuZGVyaW5nIHVuZGVybGluZS1wb3NpdGlvbiB1bmRlcmxpbmUtdGhpY2tuZXNzIHVuaWNvZGUtYmlkaSB1bmljb2RlLXJhbmdlIHVuaXRzLXBlci1lbSB2LWFscGhhYmV0aWMgdi1oYW5naW5nIHYtaWRlb2dyYXBoaWMgdi1tYXRoZW1hdGljYWwgdmVjdG9yLWVmZmVjdCB2ZXJ0LWFkdi15IHZlcnQtb3JpZ2luLXggdmVydC1vcmlnaW4teSB3b3JkLXNwYWNpbmcgd3JpdGluZy1tb2RlIHhtbG5zOnhsaW5rIHgtaGVpZ2h0Ii5zcGxpdCgiICIpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBsYWNlKHZ0LG10KTtfdFt0XT1uZXcgeXQodCwxLCExLGUsbnVsbCl9KSwieGxpbms6YWN0dWF0ZSB4bGluazphcmNyb2xlIHhsaW5rOmhyZWYgeGxpbms6cm9sZSB4bGluazpzaG93IHhsaW5rOnRpdGxlIHhsaW5rOnR5cGUiLnNwbGl0KCIgIikuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UodnQsbXQpO190W3RdPW5ldyB5dCh0LDEsITEsZSwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIpfSksWyJ4bWw6YmFzZSIsInhtbDpsYW5nIiwieG1sOnNwYWNlIl0uZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UodnQsbXQpO190W3RdPW5ldyB5dCh0LDEsITEsZSwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIil9KSxfdC50YWJJbmRleD1uZXcgeXQoInRhYkluZGV4IiwxLCExLCJ0YWJpbmRleCIsbnVsbCk7dmFyIFB0PXtjaGFuZ2U6e3BoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOntidWJibGVkOiJvbkNoYW5nZSIsY2FwdHVyZWQ6Im9uQ2hhbmdlQ2FwdHVyZSJ9LGRlcGVuZGVuY2llczoiYmx1ciBjaGFuZ2UgY2xpY2sgZm9jdXMgaW5wdXQga2V5ZG93biBrZXl1cCBzZWxlY3Rpb25jaGFuZ2UiLnNwbGl0KCIgIil9fTtmdW5jdGlvbiBSdChlLHQsbil7cmV0dXJuKGU9c2UuZ2V0UG9vbGVkKFB0LmNoYW5nZSxlLHQsbikpLnR5cGU9ImNoYW5nZSIsQWUobiksSChlKSxlfXZhciBDdD1udWxsLGt0PW51bGw7ZnVuY3Rpb24gTnQoZSl7SShlLCExKX1mdW5jdGlvbiBBdChlKXtpZih6ZShVKGUpKSlyZXR1cm4gZX1mdW5jdGlvbiBJdChlLHQpe2lmKCJjaGFuZ2UiPT09ZSlyZXR1cm4gdH12YXIgRHQ9ITE7ZnVuY3Rpb24ganQoKXtDdCYmKEN0LmRldGFjaEV2ZW50KCJvbnByb3BlcnR5Y2hhbmdlIixMdCksa3Q9Q3Q9bnVsbCl9ZnVuY3Rpb24gTHQoZSl7InZhbHVlIj09PWUucHJvcGVydHlOYW1lJiZBdChrdCkmJkZlKE50LGU9UnQoa3QsZSwkZShlKSkpfWZ1bmN0aW9uIE10KGUsdCxuKXsiZm9jdXMiPT09ZT8oanQoKSxrdD1uLChDdD10KS5hdHRhY2hFdmVudCgib25wcm9wZXJ0eWNoYW5nZSIsTHQpKToiYmx1ciI9PT1lJiZqdCgpfWZ1bmN0aW9uIEZ0KGUpe2lmKCJzZWxlY3Rpb25jaGFuZ2UiPT09ZXx8ImtleXVwIj09PWV8fCJrZXlkb3duIj09PWUpcmV0dXJuIEF0KGt0KX1mdW5jdGlvbiBVdChlLHQpe2lmKCJjbGljayI9PT1lKXJldHVybiBBdCh0KX1mdW5jdGlvbiBXdChlLHQpe2lmKCJpbnB1dCI9PT1lfHwiY2hhbmdlIj09PWUpcmV0dXJuIEF0KHQpfVYmJihEdD1HZSgiaW5wdXQiKSYmKCFkb2N1bWVudC5kb2N1bWVudE1vZGV8fDk8ZG9jdW1lbnQuZG9jdW1lbnRNb2RlKSk7dmFyICR0PXtldmVudFR5cGVzOlB0LF9pc0lucHV0RXZlbnRTdXBwb3J0ZWQ6RHQsZXh0cmFjdEV2ZW50czpmdW5jdGlvbihlLHQsbixyKXt2YXIgbz10P1UodCk6d2luZG93LGk9dm9pZCAwLGE9dm9pZCAwLHU9by5ub2RlTmFtZSYmby5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO2lmKCJzZWxlY3QiPT09dXx8ImlucHV0Ij09PXUmJiJmaWxlIj09PW8udHlwZT9pPUl0OldlKG8pP0R0P2k9V3Q6KGk9RnQsYT1NdCk6KHU9by5ub2RlTmFtZSkmJiJpbnB1dCI9PT11LnRvTG93ZXJDYXNlKCkmJigiY2hlY2tib3giPT09by50eXBlfHwicmFkaW8iPT09by50eXBlKSYmKGk9VXQpLGkmJihpPWkoZSx0KSkpcmV0dXJuIFJ0KGksbixyKTthJiZhKGUsbyx0KSwiYmx1ciI9PT1lJiYoZT1vLl93cmFwcGVyU3RhdGUpJiZlLmNvbnRyb2xsZWQmJiJudW1iZXIiPT09by50eXBlJiZ4dChvLCJudW1iZXIiLG8udmFsdWUpfX0sR3Q9c2UuZXh0ZW5kKHt2aWV3Om51bGwsZGV0YWlsOm51bGx9KSxCdD17QWx0OiJhbHRLZXkiLENvbnRyb2w6ImN0cmxLZXkiLE1ldGE6Im1ldGFLZXkiLFNoaWZ0OiJzaGlmdEtleSJ9O2Z1bmN0aW9uIHF0KGUpe3ZhciB0PXRoaXMubmF0aXZlRXZlbnQ7cmV0dXJuIHQuZ2V0TW9kaWZpZXJTdGF0ZT90LmdldE1vZGlmaWVyU3RhdGUoZSk6ISEoZT1CdFtlXSkmJiEhdFtlXX1mdW5jdGlvbiB6dCgpe3JldHVybiBxdH12YXIgSHQ9MCxWdD0wLFl0PSExLEt0PSExLFF0PUd0LmV4dGVuZCh7c2NyZWVuWDpudWxsLHNjcmVlblk6bnVsbCxjbGllbnRYOm51bGwsY2xpZW50WTpudWxsLHBhZ2VYOm51bGwscGFnZVk6bnVsbCxjdHJsS2V5Om51bGwsc2hpZnRLZXk6bnVsbCxhbHRLZXk6bnVsbCxtZXRhS2V5Om51bGwsZ2V0TW9kaWZpZXJTdGF0ZTp6dCxidXR0b246bnVsbCxidXR0b25zOm51bGwscmVsYXRlZFRhcmdldDpmdW5jdGlvbihlKXtyZXR1cm4gZS5yZWxhdGVkVGFyZ2V0fHwoZS5mcm9tRWxlbWVudD09PWUuc3JjRWxlbWVudD9lLnRvRWxlbWVudDplLmZyb21FbGVtZW50KX0sbW92ZW1lbnRYOmZ1bmN0aW9uKGUpe2lmKCJtb3ZlbWVudFgiaW4gZSlyZXR1cm4gZS5tb3ZlbWVudFg7dmFyIHQ9SHQ7cmV0dXJuIEh0PWUuc2NyZWVuWCxZdD8ibW91c2Vtb3ZlIj09PWUudHlwZT9lLnNjcmVlblgtdDowOihZdD0hMCwwKX0sbW92ZW1lbnRZOmZ1bmN0aW9uKGUpe2lmKCJtb3ZlbWVudFkiaW4gZSlyZXR1cm4gZS5tb3ZlbWVudFk7dmFyIHQ9VnQ7cmV0dXJuIFZ0PWUuc2NyZWVuWSxLdD8ibW91c2Vtb3ZlIj09PWUudHlwZT9lLnNjcmVlblktdDowOihLdD0hMCwwKX19KSxYdD1RdC5leHRlbmQoe3BvaW50ZXJJZDpudWxsLHdpZHRoOm51bGwsaGVpZ2h0Om51bGwscHJlc3N1cmU6bnVsbCx0YW5nZW50aWFsUHJlc3N1cmU6bnVsbCx0aWx0WDpudWxsLHRpbHRZOm51bGwsdHdpc3Q6bnVsbCxwb2ludGVyVHlwZTpudWxsLGlzUHJpbWFyeTpudWxsfSksSnQ9e21vdXNlRW50ZXI6e3JlZ2lzdHJhdGlvbk5hbWU6Im9uTW91c2VFbnRlciIsZGVwZW5kZW5jaWVzOlsibW91c2VvdXQiLCJtb3VzZW92ZXIiXX0sbW91c2VMZWF2ZTp7cmVnaXN0cmF0aW9uTmFtZToib25Nb3VzZUxlYXZlIixkZXBlbmRlbmNpZXM6WyJtb3VzZW91dCIsIm1vdXNlb3ZlciJdfSxwb2ludGVyRW50ZXI6e3JlZ2lzdHJhdGlvbk5hbWU6Im9uUG9pbnRlckVudGVyIixkZXBlbmRlbmNpZXM6WyJwb2ludGVyb3V0IiwicG9pbnRlcm92ZXIiXX0scG9pbnRlckxlYXZlOntyZWdpc3RyYXRpb25OYW1lOiJvblBvaW50ZXJMZWF2ZSIsZGVwZW5kZW5jaWVzOlsicG9pbnRlcm91dCIsInBvaW50ZXJvdmVyIl19fSxadD17ZXZlbnRUeXBlczpKdCxleHRyYWN0RXZlbnRzOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvPSJtb3VzZW92ZXIiPT09ZXx8InBvaW50ZXJvdmVyIj09PWUsaT0ibW91c2VvdXQiPT09ZXx8InBvaW50ZXJvdXQiPT09ZTtpZihvJiYobi5yZWxhdGVkVGFyZ2V0fHxuLmZyb21FbGVtZW50KXx8IWkmJiFvKXJldHVybiBudWxsO2lmKG89ci53aW5kb3c9PT1yP3I6KG89ci5vd25lckRvY3VtZW50KT9vLmRlZmF1bHRWaWV3fHxvLnBhcmVudFdpbmRvdzp3aW5kb3csaT8oaT10LHQ9KHQ9bi5yZWxhdGVkVGFyZ2V0fHxuLnRvRWxlbWVudCk/TSh0KTpudWxsKTppPW51bGwsaT09PXQpcmV0dXJuIG51bGw7dmFyIGE9dm9pZCAwLHU9dm9pZCAwLGM9dm9pZCAwLGw9dm9pZCAwOyJtb3VzZW91dCI9PT1lfHwibW91c2VvdmVyIj09PWU/KGE9UXQsdT1KdC5tb3VzZUxlYXZlLGM9SnQubW91c2VFbnRlcixsPSJtb3VzZSIpOiJwb2ludGVyb3V0IiE9PWUmJiJwb2ludGVyb3ZlciIhPT1lfHwoYT1YdCx1PUp0LnBvaW50ZXJMZWF2ZSxjPUp0LnBvaW50ZXJFbnRlcixsPSJwb2ludGVyIik7dmFyIHM9bnVsbD09aT9vOlUoaSk7aWYobz1udWxsPT10P286VSh0KSwoZT1hLmdldFBvb2xlZCh1LGksbixyKSkudHlwZT1sKyJsZWF2ZSIsZS50YXJnZXQ9cyxlLnJlbGF0ZWRUYXJnZXQ9bywobj1hLmdldFBvb2xlZChjLHQsbixyKSkudHlwZT1sKyJlbnRlciIsbi50YXJnZXQ9byxuLnJlbGF0ZWRUYXJnZXQ9cyxyPXQsaSYmcillOntmb3Iobz1yLGw9MCxhPXQ9aTthO2E9JChhKSlsKys7Zm9yKGE9MCxjPW87YztjPSQoYykpYSsrO2Zvcig7MDxsLWE7KXQ9JCh0KSxsLS07Zm9yKDswPGEtbDspbz0kKG8pLGEtLTtmb3IoO2wtLTspe2lmKHQ9PT1vfHx0PT09by5hbHRlcm5hdGUpYnJlYWsgZTt0PSQodCksbz0kKG8pfXQ9bnVsbH1lbHNlIHQ9bnVsbDtmb3Iobz10LHQ9W107aSYmaSE9PW8mJihudWxsPT09KGw9aS5hbHRlcm5hdGUpfHxsIT09byk7KXQucHVzaChpKSxpPSQoaSk7Zm9yKGk9W107ciYmciE9PW8mJihudWxsPT09KGw9ci5hbHRlcm5hdGUpfHxsIT09byk7KWkucHVzaChyKSxyPSQocik7Zm9yKHI9MDtyPHQubGVuZ3RoO3IrKylxKHRbcl0sImJ1YmJsZWQiLGUpO2ZvcihyPWkubGVuZ3RoOzA8ci0tOylxKGlbcl0sImNhcHR1cmVkIixuKTtyZXR1cm5bZSxuXX19LGVuPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7ZnVuY3Rpb24gdG4oZSx0KXtyZXR1cm4gZT09PXQ/MCE9PWV8fDAhPT10fHwxL2U9PTEvdDplIT1lJiZ0IT10fWZ1bmN0aW9uIG5uKGUsdCl7aWYodG4oZSx0KSlyZXR1cm4hMDtpZigib2JqZWN0IiE9dHlwZW9mIGV8fG51bGw9PT1lfHwib2JqZWN0IiE9dHlwZW9mIHR8fG51bGw9PT10KXJldHVybiExO3ZhciBuPU9iamVjdC5rZXlzKGUpLHI9T2JqZWN0LmtleXModCk7aWYobi5sZW5ndGghPT1yLmxlbmd0aClyZXR1cm4hMTtmb3Iocj0wO3I8bi5sZW5ndGg7cisrKWlmKCFlbi5jYWxsKHQsbltyXSl8fCF0bihlW25bcl1dLHRbbltyXV0pKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIHJuKGUpe3ZhciB0PWU7aWYoZS5hbHRlcm5hdGUpZm9yKDt0LnJldHVybjspdD10LnJldHVybjtlbHNle2lmKDAhPSgyJnQuZWZmZWN0VGFnKSlyZXR1cm4gMTtmb3IoO3QucmV0dXJuOylpZigwIT0oMiYodD10LnJldHVybikuZWZmZWN0VGFnKSlyZXR1cm4gMX1yZXR1cm4gMz09PXQudGFnPzI6M31mdW5jdGlvbiBvbihlKXsyIT09cm4oZSkmJmEoIjE4OCIpfWZ1bmN0aW9uIGFuKGUpe2lmKCEoZT1mdW5jdGlvbihlKXt2YXIgdD1lLmFsdGVybmF0ZTtpZighdClyZXR1cm4gMz09PSh0PXJuKGUpKSYmYSgiMTg4IiksMT09PXQ/bnVsbDplO2Zvcih2YXIgbj1lLHI9dDs7KXt2YXIgbz1uLnJldHVybixpPW8/by5hbHRlcm5hdGU6bnVsbDtpZighb3x8IWkpYnJlYWs7aWYoby5jaGlsZD09PWkuY2hpbGQpe2Zvcih2YXIgdT1vLmNoaWxkO3U7KXtpZih1PT09bilyZXR1cm4gb24obyksZTtpZih1PT09cilyZXR1cm4gb24obyksdDt1PXUuc2libGluZ31hKCIxODgiKX1pZihuLnJldHVybiE9PXIucmV0dXJuKW49byxyPWk7ZWxzZXt1PSExO2Zvcih2YXIgYz1vLmNoaWxkO2M7KXtpZihjPT09bil7dT0hMCxuPW8scj1pO2JyZWFrfWlmKGM9PT1yKXt1PSEwLHI9byxuPWk7YnJlYWt9Yz1jLnNpYmxpbmd9aWYoIXUpe2ZvcihjPWkuY2hpbGQ7Yzspe2lmKGM9PT1uKXt1PSEwLG49aSxyPW87YnJlYWt9aWYoYz09PXIpe3U9ITAscj1pLG49bzticmVha31jPWMuc2libGluZ311fHxhKCIxODkiKX19bi5hbHRlcm5hdGUhPT1yJiZhKCIxOTAiKX1yZXR1cm4gMyE9PW4udGFnJiZhKCIxODgiKSxuLnN0YXRlTm9kZS5jdXJyZW50PT09bj9lOnR9KGUpKSlyZXR1cm4gbnVsbDtmb3IodmFyIHQ9ZTs7KXtpZig1PT09dC50YWd8fDY9PT10LnRhZylyZXR1cm4gdDtpZih0LmNoaWxkKXQuY2hpbGQucmV0dXJuPXQsdD10LmNoaWxkO2Vsc2V7aWYodD09PWUpYnJlYWs7Zm9yKDshdC5zaWJsaW5nOyl7aWYoIXQucmV0dXJufHx0LnJldHVybj09PWUpcmV0dXJuIG51bGw7dD10LnJldHVybn10LnNpYmxpbmcucmV0dXJuPXQucmV0dXJuLHQ9dC5zaWJsaW5nfX1yZXR1cm4gbnVsbH12YXIgdW49c2UuZXh0ZW5kKHthbmltYXRpb25OYW1lOm51bGwsZWxhcHNlZFRpbWU6bnVsbCxwc2V1ZG9FbGVtZW50Om51bGx9KSxjbj1zZS5leHRlbmQoe2NsaXBib2FyZERhdGE6ZnVuY3Rpb24oZSl7cmV0dXJuImNsaXBib2FyZERhdGEiaW4gZT9lLmNsaXBib2FyZERhdGE6d2luZG93LmNsaXBib2FyZERhdGF9fSksbG49R3QuZXh0ZW5kKHtyZWxhdGVkVGFyZ2V0Om51bGx9KTtmdW5jdGlvbiBzbihlKXt2YXIgdD1lLmtleUNvZGU7cmV0dXJuImNoYXJDb2RlImluIGU/MD09PShlPWUuY2hhckNvZGUpJiYxMz09PXQmJihlPTEzKTplPXQsMTA9PT1lJiYoZT0xMyksMzI8PWV8fDEzPT09ZT9lOjB9dmFyIGZuPXtFc2M6IkVzY2FwZSIsU3BhY2ViYXI6IiAiLExlZnQ6IkFycm93TGVmdCIsVXA6IkFycm93VXAiLFJpZ2h0OiJBcnJvd1JpZ2h0IixEb3duOiJBcnJvd0Rvd24iLERlbDoiRGVsZXRlIixXaW46Ik9TIixNZW51OiJDb250ZXh0TWVudSIsQXBwczoiQ29udGV4dE1lbnUiLFNjcm9sbDoiU2Nyb2xsTG9jayIsTW96UHJpbnRhYmxlS2V5OiJVbmlkZW50aWZpZWQifSxwbj17ODoiQmFja3NwYWNlIiw5OiJUYWIiLDEyOiJDbGVhciIsMTM6IkVudGVyIiwxNjoiU2hpZnQiLDE3OiJDb250cm9sIiwxODoiQWx0IiwxOToiUGF1c2UiLDIwOiJDYXBzTG9jayIsMjc6IkVzY2FwZSIsMzI6IiAiLDMzOiJQYWdlVXAiLDM0OiJQYWdlRG93biIsMzU6IkVuZCIsMzY6IkhvbWUiLDM3OiJBcnJvd0xlZnQiLDM4OiJBcnJvd1VwIiwzOToiQXJyb3dSaWdodCIsNDA6IkFycm93RG93biIsNDU6Ikluc2VydCIsNDY6IkRlbGV0ZSIsMTEyOiJGMSIsMTEzOiJGMiIsMTE0OiJGMyIsMTE1OiJGNCIsMTE2OiJGNSIsMTE3OiJGNiIsMTE4OiJGNyIsMTE5OiJGOCIsMTIwOiJGOSIsMTIxOiJGMTAiLDEyMjoiRjExIiwxMjM6IkYxMiIsMTQ0OiJOdW1Mb2NrIiwxNDU6IlNjcm9sbExvY2siLDIyNDoiTWV0YSJ9LGRuPUd0LmV4dGVuZCh7a2V5OmZ1bmN0aW9uKGUpe2lmKGUua2V5KXt2YXIgdD1mbltlLmtleV18fGUua2V5O2lmKCJVbmlkZW50aWZpZWQiIT09dClyZXR1cm4gdH1yZXR1cm4ia2V5cHJlc3MiPT09ZS50eXBlPzEzPT09KGU9c24oZSkpPyJFbnRlciI6U3RyaW5nLmZyb21DaGFyQ29kZShlKToia2V5ZG93biI9PT1lLnR5cGV8fCJrZXl1cCI9PT1lLnR5cGU/cG5bZS5rZXlDb2RlXXx8IlVuaWRlbnRpZmllZCI6IiJ9LGxvY2F0aW9uOm51bGwsY3RybEtleTpudWxsLHNoaWZ0S2V5Om51bGwsYWx0S2V5Om51bGwsbWV0YUtleTpudWxsLHJlcGVhdDpudWxsLGxvY2FsZTpudWxsLGdldE1vZGlmaWVyU3RhdGU6enQsY2hhckNvZGU6ZnVuY3Rpb24oZSl7cmV0dXJuImtleXByZXNzIj09PWUudHlwZT9zbihlKTowfSxrZXlDb2RlOmZ1bmN0aW9uKGUpe3JldHVybiJrZXlkb3duIj09PWUudHlwZXx8ImtleXVwIj09PWUudHlwZT9lLmtleUNvZGU6MH0sd2hpY2g6ZnVuY3Rpb24oZSl7cmV0dXJuImtleXByZXNzIj09PWUudHlwZT9zbihlKToia2V5ZG93biI9PT1lLnR5cGV8fCJrZXl1cCI9PT1lLnR5cGU/ZS5rZXlDb2RlOjB9fSksaG49UXQuZXh0ZW5kKHtkYXRhVHJhbnNmZXI6bnVsbH0pLHluPUd0LmV4dGVuZCh7dG91Y2hlczpudWxsLHRhcmdldFRvdWNoZXM6bnVsbCxjaGFuZ2VkVG91Y2hlczpudWxsLGFsdEtleTpudWxsLG1ldGFLZXk6bnVsbCxjdHJsS2V5Om51bGwsc2hpZnRLZXk6bnVsbCxnZXRNb2RpZmllclN0YXRlOnp0fSksX249c2UuZXh0ZW5kKHtwcm9wZXJ0eU5hbWU6bnVsbCxlbGFwc2VkVGltZTpudWxsLHBzZXVkb0VsZW1lbnQ6bnVsbH0pLHZuPVF0LmV4dGVuZCh7ZGVsdGFYOmZ1bmN0aW9uKGUpe3JldHVybiJkZWx0YVgiaW4gZT9lLmRlbHRhWDoid2hlZWxEZWx0YVgiaW4gZT8tZS53aGVlbERlbHRhWDowfSxkZWx0YVk6ZnVuY3Rpb24oZSl7cmV0dXJuImRlbHRhWSJpbiBlP2UuZGVsdGFZOiJ3aGVlbERlbHRhWSJpbiBlPy1lLndoZWVsRGVsdGFZOiJ3aGVlbERlbHRhImluIGU/LWUud2hlZWxEZWx0YTowfSxkZWx0YVo6bnVsbCxkZWx0YU1vZGU6bnVsbH0pLG1uPVtbImFib3J0IiwiYWJvcnQiXSxbWiwiYW5pbWF0aW9uRW5kIl0sW2VlLCJhbmltYXRpb25JdGVyYXRpb24iXSxbdGUsImFuaW1hdGlvblN0YXJ0Il0sWyJjYW5wbGF5IiwiY2FuUGxheSJdLFsiY2FucGxheXRocm91Z2giLCJjYW5QbGF5VGhyb3VnaCJdLFsiZHJhZyIsImRyYWciXSxbImRyYWdlbnRlciIsImRyYWdFbnRlciJdLFsiZHJhZ2V4aXQiLCJkcmFnRXhpdCJdLFsiZHJhZ2xlYXZlIiwiZHJhZ0xlYXZlIl0sWyJkcmFnb3ZlciIsImRyYWdPdmVyIl0sWyJkdXJhdGlvbmNoYW5nZSIsImR1cmF0aW9uQ2hhbmdlIl0sWyJlbXB0aWVkIiwiZW1wdGllZCJdLFsiZW5jcnlwdGVkIiwiZW5jcnlwdGVkIl0sWyJlbmRlZCIsImVuZGVkIl0sWyJlcnJvciIsImVycm9yIl0sWyJnb3Rwb2ludGVyY2FwdHVyZSIsImdvdFBvaW50ZXJDYXB0dXJlIl0sWyJsb2FkIiwibG9hZCJdLFsibG9hZGVkZGF0YSIsImxvYWRlZERhdGEiXSxbImxvYWRlZG1ldGFkYXRhIiwibG9hZGVkTWV0YWRhdGEiXSxbImxvYWRzdGFydCIsImxvYWRTdGFydCJdLFsibG9zdHBvaW50ZXJjYXB0dXJlIiwibG9zdFBvaW50ZXJDYXB0dXJlIl0sWyJtb3VzZW1vdmUiLCJtb3VzZU1vdmUiXSxbIm1vdXNlb3V0IiwibW91c2VPdXQiXSxbIm1vdXNlb3ZlciIsIm1vdXNlT3ZlciJdLFsicGxheWluZyIsInBsYXlpbmciXSxbInBvaW50ZXJtb3ZlIiwicG9pbnRlck1vdmUiXSxbInBvaW50ZXJvdXQiLCJwb2ludGVyT3V0Il0sWyJwb2ludGVyb3ZlciIsInBvaW50ZXJPdmVyIl0sWyJwcm9ncmVzcyIsInByb2dyZXNzIl0sWyJzY3JvbGwiLCJzY3JvbGwiXSxbInNlZWtpbmciLCJzZWVraW5nIl0sWyJzdGFsbGVkIiwic3RhbGxlZCJdLFsic3VzcGVuZCIsInN1c3BlbmQiXSxbInRpbWV1cGRhdGUiLCJ0aW1lVXBkYXRlIl0sWyJ0b2dnbGUiLCJ0b2dnbGUiXSxbInRvdWNobW92ZSIsInRvdWNoTW92ZSJdLFtuZSwidHJhbnNpdGlvbkVuZCJdLFsid2FpdGluZyIsIndhaXRpbmciXSxbIndoZWVsIiwid2hlZWwiXV0sZ249e30sYm49e307ZnVuY3Rpb24gd24oZSx0KXt2YXIgbj1lWzBdLHI9Im9uIisoKGU9ZVsxXSlbMF0udG9VcHBlckNhc2UoKStlLnNsaWNlKDEpKTt0PXtwaGFzZWRSZWdpc3RyYXRpb25OYW1lczp7YnViYmxlZDpyLGNhcHR1cmVkOnIrIkNhcHR1cmUifSxkZXBlbmRlbmNpZXM6W25dLGlzSW50ZXJhY3RpdmU6dH0sZ25bZV09dCxibltuXT10fVtbImJsdXIiLCJibHVyIl0sWyJjYW5jZWwiLCJjYW5jZWwiXSxbImNsaWNrIiwiY2xpY2siXSxbImNsb3NlIiwiY2xvc2UiXSxbImNvbnRleHRtZW51IiwiY29udGV4dE1lbnUiXSxbImNvcHkiLCJjb3B5Il0sWyJjdXQiLCJjdXQiXSxbImF1eGNsaWNrIiwiYXV4Q2xpY2siXSxbImRibGNsaWNrIiwiZG91YmxlQ2xpY2siXSxbImRyYWdlbmQiLCJkcmFnRW5kIl0sWyJkcmFnc3RhcnQiLCJkcmFnU3RhcnQiXSxbImRyb3AiLCJkcm9wIl0sWyJmb2N1cyIsImZvY3VzIl0sWyJpbnB1dCIsImlucHV0Il0sWyJpbnZhbGlkIiwiaW52YWxpZCJdLFsia2V5ZG93biIsImtleURvd24iXSxbImtleXByZXNzIiwia2V5UHJlc3MiXSxbImtleXVwIiwia2V5VXAiXSxbIm1vdXNlZG93biIsIm1vdXNlRG93biJdLFsibW91c2V1cCIsIm1vdXNlVXAiXSxbInBhc3RlIiwicGFzdGUiXSxbInBhdXNlIiwicGF1c2UiXSxbInBsYXkiLCJwbGF5Il0sWyJwb2ludGVyY2FuY2VsIiwicG9pbnRlckNhbmNlbCJdLFsicG9pbnRlcmRvd24iLCJwb2ludGVyRG93biJdLFsicG9pbnRlcnVwIiwicG9pbnRlclVwIl0sWyJyYXRlY2hhbmdlIiwicmF0ZUNoYW5nZSJdLFsicmVzZXQiLCJyZXNldCJdLFsic2Vla2VkIiwic2Vla2VkIl0sWyJzdWJtaXQiLCJzdWJtaXQiXSxbInRvdWNoY2FuY2VsIiwidG91Y2hDYW5jZWwiXSxbInRvdWNoZW5kIiwidG91Y2hFbmQiXSxbInRvdWNoc3RhcnQiLCJ0b3VjaFN0YXJ0Il0sWyJ2b2x1bWVjaGFuZ2UiLCJ2b2x1bWVDaGFuZ2UiXV0uZm9yRWFjaChmdW5jdGlvbihlKXt3bihlLCEwKX0pLG1uLmZvckVhY2goZnVuY3Rpb24oZSl7d24oZSwhMSl9KTt2YXIgRW49e2V2ZW50VHlwZXM6Z24saXNJbnRlcmFjdGl2ZVRvcExldmVsRXZlbnRUeXBlOmZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT0oZT1ibltlXSkmJiEwPT09ZS5pc0ludGVyYWN0aXZlfSxleHRyYWN0RXZlbnRzOmZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvPWJuW2VdO2lmKCFvKXJldHVybiBudWxsO3N3aXRjaChlKXtjYXNlImtleXByZXNzIjppZigwPT09c24obikpcmV0dXJuIG51bGw7Y2FzZSJrZXlkb3duIjpjYXNlImtleXVwIjplPWRuO2JyZWFrO2Nhc2UiYmx1ciI6Y2FzZSJmb2N1cyI6ZT1sbjticmVhaztjYXNlImNsaWNrIjppZigyPT09bi5idXR0b24pcmV0dXJuIG51bGw7Y2FzZSJhdXhjbGljayI6Y2FzZSJkYmxjbGljayI6Y2FzZSJtb3VzZWRvd24iOmNhc2UibW91c2Vtb3ZlIjpjYXNlIm1vdXNldXAiOmNhc2UibW91c2VvdXQiOmNhc2UibW91c2VvdmVyIjpjYXNlImNvbnRleHRtZW51IjplPVF0O2JyZWFrO2Nhc2UiZHJhZyI6Y2FzZSJkcmFnZW5kIjpjYXNlImRyYWdlbnRlciI6Y2FzZSJkcmFnZXhpdCI6Y2FzZSJkcmFnbGVhdmUiOmNhc2UiZHJhZ292ZXIiOmNhc2UiZHJhZ3N0YXJ0IjpjYXNlImRyb3AiOmU9aG47YnJlYWs7Y2FzZSJ0b3VjaGNhbmNlbCI6Y2FzZSJ0b3VjaGVuZCI6Y2FzZSJ0b3VjaG1vdmUiOmNhc2UidG91Y2hzdGFydCI6ZT15bjticmVhaztjYXNlIFo6Y2FzZSBlZTpjYXNlIHRlOmU9dW47YnJlYWs7Y2FzZSBuZTplPV9uO2JyZWFrO2Nhc2Uic2Nyb2xsIjplPUd0O2JyZWFrO2Nhc2Uid2hlZWwiOmU9dm47YnJlYWs7Y2FzZSJjb3B5IjpjYXNlImN1dCI6Y2FzZSJwYXN0ZSI6ZT1jbjticmVhaztjYXNlImdvdHBvaW50ZXJjYXB0dXJlIjpjYXNlImxvc3Rwb2ludGVyY2FwdHVyZSI6Y2FzZSJwb2ludGVyY2FuY2VsIjpjYXNlInBvaW50ZXJkb3duIjpjYXNlInBvaW50ZXJtb3ZlIjpjYXNlInBvaW50ZXJvdXQiOmNhc2UicG9pbnRlcm92ZXIiOmNhc2UicG9pbnRlcnVwIjplPVh0O2JyZWFrO2RlZmF1bHQ6ZT1zZX1yZXR1cm4gSCh0PWUuZ2V0UG9vbGVkKG8sdCxuLHIpKSx0fX0sVG49RW4uaXNJbnRlcmFjdGl2ZVRvcExldmVsRXZlbnRUeXBlLE9uPVtdO2Z1bmN0aW9uIFNuKGUpe3ZhciB0PWUudGFyZ2V0SW5zdCxuPXQ7ZG97aWYoIW4pe2UuYW5jZXN0b3JzLnB1c2gobik7YnJlYWt9dmFyIHI7Zm9yKHI9bjtyLnJldHVybjspcj1yLnJldHVybjtpZighKHI9MyE9PXIudGFnP251bGw6ci5zdGF0ZU5vZGUuY29udGFpbmVySW5mbykpYnJlYWs7ZS5hbmNlc3RvcnMucHVzaChuKSxuPU0ocil9d2hpbGUobik7Zm9yKG49MDtuPGUuYW5jZXN0b3JzLmxlbmd0aDtuKyspe3Q9ZS5hbmNlc3RvcnNbbl07dmFyIG89JGUoZS5uYXRpdmVFdmVudCk7cj1lLnRvcExldmVsVHlwZTtmb3IodmFyIGk9ZS5uYXRpdmVFdmVudCxhPW51bGwsdT0wO3U8di5sZW5ndGg7dSsrKXt2YXIgYz12W3VdO2MmJihjPWMuZXh0cmFjdEV2ZW50cyhyLHQsaSxvKSkmJihhPVMoYSxjKSl9SShhLCExKX19dmFyIHhuPSEwO2Z1bmN0aW9uIFBuKGUsdCl7aWYoIXQpcmV0dXJuIG51bGw7dmFyIG49KFRuKGUpP0NuOmtuKS5iaW5kKG51bGwsZSk7dC5hZGRFdmVudExpc3RlbmVyKGUsbiwhMSl9ZnVuY3Rpb24gUm4oZSx0KXtpZighdClyZXR1cm4gbnVsbDt2YXIgbj0oVG4oZSk/Q246a24pLmJpbmQobnVsbCxlKTt0LmFkZEV2ZW50TGlzdGVuZXIoZSxuLCEwKX1mdW5jdGlvbiBDbihlLHQpe2plKGtuLGUsdCl9ZnVuY3Rpb24ga24oZSx0KXtpZih4bil7dmFyIG49JGUodCk7aWYobnVsbD09PShuPU0obikpfHwibnVtYmVyIiE9dHlwZW9mIG4udGFnfHwyPT09cm4obil8fChuPW51bGwpLE9uLmxlbmd0aCl7dmFyIHI9T24ucG9wKCk7ci50b3BMZXZlbFR5cGU9ZSxyLm5hdGl2ZUV2ZW50PXQsci50YXJnZXRJbnN0PW4sZT1yfWVsc2UgZT17dG9wTGV2ZWxUeXBlOmUsbmF0aXZlRXZlbnQ6dCx0YXJnZXRJbnN0Om4sYW5jZXN0b3JzOltdfTt0cnl7RmUoU24sZSl9ZmluYWxseXtlLnRvcExldmVsVHlwZT1udWxsLGUubmF0aXZlRXZlbnQ9bnVsbCxlLnRhcmdldEluc3Q9bnVsbCxlLmFuY2VzdG9ycy5sZW5ndGg9MCwxMD5Pbi5sZW5ndGgmJk9uLnB1c2goZSl9fX12YXIgTm49e30sQW49MCxJbj0iX3JlYWN0TGlzdGVuZXJzSUQiKygiIitNYXRoLnJhbmRvbSgpKS5zbGljZSgyKTtmdW5jdGlvbiBEbihlKXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsSW4pfHwoZVtJbl09QW4rKyxObltlW0luXV09e30pLE5uW2VbSW5dXX1mdW5jdGlvbiBqbihlKXtpZih2b2lkIDA9PT0oZT1lfHwoInVuZGVmaW5lZCIhPXR5cGVvZiBkb2N1bWVudD9kb2N1bWVudDp2b2lkIDApKSlyZXR1cm4gbnVsbDt0cnl7cmV0dXJuIGUuYWN0aXZlRWxlbWVudHx8ZS5ib2R5fWNhdGNoKHQpe3JldHVybiBlLmJvZHl9fWZ1bmN0aW9uIExuKGUpe2Zvcig7ZSYmZS5maXJzdENoaWxkOyllPWUuZmlyc3RDaGlsZDtyZXR1cm4gZX1mdW5jdGlvbiBNbihlLHQpe3ZhciBuLHI9TG4oZSk7Zm9yKGU9MDtyOyl7aWYoMz09PXIubm9kZVR5cGUpe2lmKG49ZStyLnRleHRDb250ZW50Lmxlbmd0aCxlPD10JiZuPj10KXJldHVybntub2RlOnIsb2Zmc2V0OnQtZX07ZT1ufWU6e2Zvcig7cjspe2lmKHIubmV4dFNpYmxpbmcpe3I9ci5uZXh0U2libGluZzticmVhayBlfXI9ci5wYXJlbnROb2RlfXI9dm9pZCAwfXI9TG4ocil9fWZ1bmN0aW9uIEZuKCl7Zm9yKHZhciBlPXdpbmRvdyx0PWpuKCk7dCBpbnN0YW5jZW9mIGUuSFRNTElGcmFtZUVsZW1lbnQ7KXt0cnl7ZT10LmNvbnRlbnREb2N1bWVudC5kZWZhdWx0Vmlld31jYXRjaChlKXticmVha310PWpuKGUuZG9jdW1lbnQpfXJldHVybiB0fWZ1bmN0aW9uIFVuKGUpe3ZhciB0PWUmJmUubm9kZU5hbWUmJmUubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtyZXR1cm4gdCYmKCJpbnB1dCI9PT10JiYoInRleHQiPT09ZS50eXBlfHwic2VhcmNoIj09PWUudHlwZXx8InRlbCI9PT1lLnR5cGV8fCJ1cmwiPT09ZS50eXBlfHwicGFzc3dvcmQiPT09ZS50eXBlKXx8InRleHRhcmVhIj09PXR8fCJ0cnVlIj09PWUuY29udGVudEVkaXRhYmxlKX12YXIgV249ViYmImRvY3VtZW50TW9kZSJpbiBkb2N1bWVudCYmMTE+PWRvY3VtZW50LmRvY3VtZW50TW9kZSwkbj17c2VsZWN0OntwaGFzZWRSZWdpc3RyYXRpb25OYW1lczp7YnViYmxlZDoib25TZWxlY3QiLGNhcHR1cmVkOiJvblNlbGVjdENhcHR1cmUifSxkZXBlbmRlbmNpZXM6ImJsdXIgY29udGV4dG1lbnUgZHJhZ2VuZCBmb2N1cyBrZXlkb3duIGtleXVwIG1vdXNlZG93biBtb3VzZXVwIHNlbGVjdGlvbmNoYW5nZSIuc3BsaXQoIiAiKX19LEduPW51bGwsQm49bnVsbCxxbj1udWxsLHpuPSExO2Z1bmN0aW9uIEhuKGUsdCl7dmFyIG49dC53aW5kb3c9PT10P3QuZG9jdW1lbnQ6OT09PXQubm9kZVR5cGU/dDp0Lm93bmVyRG9jdW1lbnQ7cmV0dXJuIHpufHxudWxsPT1Hbnx8R24hPT1qbihuKT9udWxsOigic2VsZWN0aW9uU3RhcnQiaW4obj1HbikmJlVuKG4pP249e3N0YXJ0Om4uc2VsZWN0aW9uU3RhcnQsZW5kOm4uc2VsZWN0aW9uRW5kfTpuPXthbmNob3JOb2RlOihuPShuLm93bmVyRG9jdW1lbnQmJm4ub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93KS5nZXRTZWxlY3Rpb24oKSkuYW5jaG9yTm9kZSxhbmNob3JPZmZzZXQ6bi5hbmNob3JPZmZzZXQsZm9jdXNOb2RlOm4uZm9jdXNOb2RlLGZvY3VzT2Zmc2V0Om4uZm9jdXNPZmZzZXR9LHFuJiZubihxbixuKT9udWxsOihxbj1uLChlPXNlLmdldFBvb2xlZCgkbi5zZWxlY3QsQm4sZSx0KSkudHlwZT0ic2VsZWN0IixlLnRhcmdldD1HbixIKGUpLGUpKX12YXIgVm49e2V2ZW50VHlwZXM6JG4sZXh0cmFjdEV2ZW50czpmdW5jdGlvbihlLHQsbixyKXt2YXIgbyxpPXIud2luZG93PT09cj9yLmRvY3VtZW50Ojk9PT1yLm5vZGVUeXBlP3I6ci5vd25lckRvY3VtZW50O2lmKCEobz0haSkpe2U6e2k9RG4oaSksbz1iLm9uU2VsZWN0O2Zvcih2YXIgYT0wO2E8by5sZW5ndGg7YSsrKXt2YXIgdT1vW2FdO2lmKCFpLmhhc093blByb3BlcnR5KHUpfHwhaVt1XSl7aT0hMTticmVhayBlfX1pPSEwfW89IWl9aWYobylyZXR1cm4gbnVsbDtzd2l0Y2goaT10P1UodCk6d2luZG93LGUpe2Nhc2UiZm9jdXMiOihXZShpKXx8InRydWUiPT09aS5jb250ZW50RWRpdGFibGUpJiYoR249aSxCbj10LHFuPW51bGwpO2JyZWFrO2Nhc2UiYmx1ciI6cW49Qm49R249bnVsbDticmVhaztjYXNlIm1vdXNlZG93biI6em49ITA7YnJlYWs7Y2FzZSJjb250ZXh0bWVudSI6Y2FzZSJtb3VzZXVwIjpjYXNlImRyYWdlbmQiOnJldHVybiB6bj0hMSxIbihuLHIpO2Nhc2Uic2VsZWN0aW9uY2hhbmdlIjppZihXbilicmVhaztjYXNlImtleWRvd24iOmNhc2Uia2V5dXAiOnJldHVybiBIbihuLHIpfXJldHVybiBudWxsfX07ZnVuY3Rpb24gWW4oZSx0KXtyZXR1cm4gZT1vKHtjaGlsZHJlbjp2b2lkIDB9LHQpLCh0PWZ1bmN0aW9uKGUpe3ZhciB0PSIiO3JldHVybiByLkNoaWxkcmVuLmZvckVhY2goZSxmdW5jdGlvbihlKXtudWxsIT1lJiYodCs9ZSl9KSx0fSh0LmNoaWxkcmVuKSkmJihlLmNoaWxkcmVuPXQpLGV9ZnVuY3Rpb24gS24oZSx0LG4scil7aWYoZT1lLm9wdGlvbnMsdCl7dD17fTtmb3IodmFyIG89MDtvPG4ubGVuZ3RoO28rKyl0WyIkIituW29dXT0hMDtmb3Iobj0wO248ZS5sZW5ndGg7bisrKW89dC5oYXNPd25Qcm9wZXJ0eSgiJCIrZVtuXS52YWx1ZSksZVtuXS5zZWxlY3RlZCE9PW8mJihlW25dLnNlbGVjdGVkPW8pLG8mJnImJihlW25dLmRlZmF1bHRTZWxlY3RlZD0hMCl9ZWxzZXtmb3Iobj0iIitidChuKSx0PW51bGwsbz0wO288ZS5sZW5ndGg7bysrKXtpZihlW29dLnZhbHVlPT09bilyZXR1cm4gZVtvXS5zZWxlY3RlZD0hMCx2b2lkKHImJihlW29dLmRlZmF1bHRTZWxlY3RlZD0hMCkpO251bGwhPT10fHxlW29dLmRpc2FibGVkfHwodD1lW29dKX1udWxsIT09dCYmKHQuc2VsZWN0ZWQ9ITApfX1mdW5jdGlvbiBRbihlLHQpe3JldHVybiBudWxsIT10LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MJiZhKCI5MSIpLG8oe30sdCx7dmFsdWU6dm9pZCAwLGRlZmF1bHRWYWx1ZTp2b2lkIDAsY2hpbGRyZW46IiIrZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZX0pfWZ1bmN0aW9uIFhuKGUsdCl7dmFyIG49dC52YWx1ZTtudWxsPT1uJiYobj10LmRlZmF1bHRWYWx1ZSxudWxsIT0odD10LmNoaWxkcmVuKSYmKG51bGwhPW4mJmEoIjkyIiksQXJyYXkuaXNBcnJheSh0KSYmKDE+PXQubGVuZ3RofHxhKCI5MyIpLHQ9dFswXSksbj10KSxudWxsPT1uJiYobj0iIikpLGUuX3dyYXBwZXJTdGF0ZT17aW5pdGlhbFZhbHVlOmJ0KG4pfX1mdW5jdGlvbiBKbihlLHQpe3ZhciBuPWJ0KHQudmFsdWUpLHI9YnQodC5kZWZhdWx0VmFsdWUpO251bGwhPW4mJigobj0iIituKSE9PWUudmFsdWUmJihlLnZhbHVlPW4pLG51bGw9PXQuZGVmYXVsdFZhbHVlJiZlLmRlZmF1bHRWYWx1ZSE9PW4mJihlLmRlZmF1bHRWYWx1ZT1uKSksbnVsbCE9ciYmKGUuZGVmYXVsdFZhbHVlPSIiK3IpfWZ1bmN0aW9uIFpuKGUpe3ZhciB0PWUudGV4dENvbnRlbnQ7dD09PWUuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWUmJihlLnZhbHVlPXQpfU4uaW5qZWN0RXZlbnRQbHVnaW5PcmRlcigiUmVzcG9uZGVyRXZlbnRQbHVnaW4gU2ltcGxlRXZlbnRQbHVnaW4gRW50ZXJMZWF2ZUV2ZW50UGx1Z2luIENoYW5nZUV2ZW50UGx1Z2luIFNlbGVjdEV2ZW50UGx1Z2luIEJlZm9yZUlucHV0RXZlbnRQbHVnaW4iLnNwbGl0KCIgIikpLHc9VyxFPUYsVD1VLE4uaW5qZWN0RXZlbnRQbHVnaW5zQnlOYW1lKHtTaW1wbGVFdmVudFBsdWdpbjpFbixFbnRlckxlYXZlRXZlbnRQbHVnaW46WnQsQ2hhbmdlRXZlbnRQbHVnaW46JHQsU2VsZWN0RXZlbnRQbHVnaW46Vm4sQmVmb3JlSW5wdXRFdmVudFBsdWdpbjpQZX0pO3ZhciBlcj17aHRtbDoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIsbWF0aG1sOiJodHRwOi8vd3d3LnczLm9yZy8xOTk4L01hdGgvTWF0aE1MIixzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIn07ZnVuY3Rpb24gdHIoZSl7c3dpdGNoKGUpe2Nhc2Uic3ZnIjpyZXR1cm4iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciO2Nhc2UibWF0aCI6cmV0dXJuImh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiO2RlZmF1bHQ6cmV0dXJuImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwifX1mdW5jdGlvbiBucihlLHQpe3JldHVybiBudWxsPT1lfHwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI9PT1lP3RyKHQpOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI9PT1lJiYiZm9yZWlnbk9iamVjdCI9PT10PyJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIjplfXZhciBycixvcj12b2lkIDAsaXI9KHJyPWZ1bmN0aW9uKGUsdCl7aWYoZS5uYW1lc3BhY2VVUkkhPT1lci5zdmd8fCJpbm5lckhUTUwiaW4gZSllLmlubmVySFRNTD10O2Vsc2V7Zm9yKChvcj1vcnx8ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpLmlubmVySFRNTD0iPHN2Zz4iK3QrIjwvc3ZnPiIsdD1vci5maXJzdENoaWxkO2UuZmlyc3RDaGlsZDspZS5yZW1vdmVDaGlsZChlLmZpcnN0Q2hpbGQpO2Zvcig7dC5maXJzdENoaWxkOyllLmFwcGVuZENoaWxkKHQuZmlyc3RDaGlsZCl9fSwidW5kZWZpbmVkIiE9dHlwZW9mIE1TQXBwJiZNU0FwcC5leGVjVW5zYWZlTG9jYWxGdW5jdGlvbj9mdW5jdGlvbihlLHQsbixyKXtNU0FwcC5leGVjVW5zYWZlTG9jYWxGdW5jdGlvbihmdW5jdGlvbigpe3JldHVybiBycihlLHQpfSl9OnJyKTtmdW5jdGlvbiBhcihlLHQpe2lmKHQpe3ZhciBuPWUuZmlyc3RDaGlsZDtpZihuJiZuPT09ZS5sYXN0Q2hpbGQmJjM9PT1uLm5vZGVUeXBlKXJldHVybiB2b2lkKG4ubm9kZVZhbHVlPXQpfWUudGV4dENvbnRlbnQ9dH12YXIgdXI9e2FuaW1hdGlvbkl0ZXJhdGlvbkNvdW50OiEwLGJvcmRlckltYWdlT3V0c2V0OiEwLGJvcmRlckltYWdlU2xpY2U6ITAsYm9yZGVySW1hZ2VXaWR0aDohMCxib3hGbGV4OiEwLGJveEZsZXhHcm91cDohMCxib3hPcmRpbmFsR3JvdXA6ITAsY29sdW1uQ291bnQ6ITAsY29sdW1uczohMCxmbGV4OiEwLGZsZXhHcm93OiEwLGZsZXhQb3NpdGl2ZTohMCxmbGV4U2hyaW5rOiEwLGZsZXhOZWdhdGl2ZTohMCxmbGV4T3JkZXI6ITAsZ3JpZEFyZWE6ITAsZ3JpZFJvdzohMCxncmlkUm93RW5kOiEwLGdyaWRSb3dTcGFuOiEwLGdyaWRSb3dTdGFydDohMCxncmlkQ29sdW1uOiEwLGdyaWRDb2x1bW5FbmQ6ITAsZ3JpZENvbHVtblNwYW46ITAsZ3JpZENvbHVtblN0YXJ0OiEwLGZvbnRXZWlnaHQ6ITAsbGluZUNsYW1wOiEwLGxpbmVIZWlnaHQ6ITAsb3BhY2l0eTohMCxvcmRlcjohMCxvcnBoYW5zOiEwLHRhYlNpemU6ITAsd2lkb3dzOiEwLHpJbmRleDohMCx6b29tOiEwLGZpbGxPcGFjaXR5OiEwLGZsb29kT3BhY2l0eTohMCxzdG9wT3BhY2l0eTohMCxzdHJva2VEYXNoYXJyYXk6ITAsc3Ryb2tlRGFzaG9mZnNldDohMCxzdHJva2VNaXRlcmxpbWl0OiEwLHN0cm9rZU9wYWNpdHk6ITAsc3Ryb2tlV2lkdGg6ITB9LGNyPVsiV2Via2l0IiwibXMiLCJNb3oiLCJPIl07ZnVuY3Rpb24gbHIoZSx0KXtmb3IodmFyIG4gaW4gZT1lLnN0eWxlLHQpaWYodC5oYXNPd25Qcm9wZXJ0eShuKSl7dmFyIHI9MD09PW4uaW5kZXhPZigiLS0iKSxvPW4saT10W25dO289bnVsbD09aXx8ImJvb2xlYW4iPT10eXBlb2YgaXx8IiI9PT1pPyIiOnJ8fCJudW1iZXIiIT10eXBlb2YgaXx8MD09PWl8fHVyLmhhc093blByb3BlcnR5KG8pJiZ1cltvXT8oIiIraSkudHJpbSgpOmkrInB4IiwiZmxvYXQiPT09biYmKG49ImNzc0Zsb2F0Iikscj9lLnNldFByb3BlcnR5KG4sbyk6ZVtuXT1vfX1PYmplY3Qua2V5cyh1cikuZm9yRWFjaChmdW5jdGlvbihlKXtjci5mb3JFYWNoKGZ1bmN0aW9uKHQpe3Q9dCtlLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK2Uuc3Vic3RyaW5nKDEpLHVyW3RdPXVyW2VdfSl9KTt2YXIgc3I9byh7bWVudWl0ZW06ITB9LHthcmVhOiEwLGJhc2U6ITAsYnI6ITAsY29sOiEwLGVtYmVkOiEwLGhyOiEwLGltZzohMCxpbnB1dDohMCxrZXlnZW46ITAsbGluazohMCxtZXRhOiEwLHBhcmFtOiEwLHNvdXJjZTohMCx0cmFjazohMCx3YnI6ITB9KTtmdW5jdGlvbiBmcihlLHQpe3QmJihzcltlXSYmKG51bGwhPXQuY2hpbGRyZW58fG51bGwhPXQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwpJiZhKCIxMzciLGUsIiIpLG51bGwhPXQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwmJihudWxsIT10LmNoaWxkcmVuJiZhKCI2MCIpLCJvYmplY3QiPT10eXBlb2YgdC5kYW5nZXJvdXNseVNldElubmVySFRNTCYmIl9faHRtbCJpbiB0LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MfHxhKCI2MSIpKSxudWxsIT10LnN0eWxlJiYib2JqZWN0IiE9dHlwZW9mIHQuc3R5bGUmJmEoIjYyIiwiIikpfWZ1bmN0aW9uIHByKGUsdCl7aWYoLTE9PT1lLmluZGV4T2YoIi0iKSlyZXR1cm4ic3RyaW5nIj09dHlwZW9mIHQuaXM7c3dpdGNoKGUpe2Nhc2UiYW5ub3RhdGlvbi14bWwiOmNhc2UiY29sb3ItcHJvZmlsZSI6Y2FzZSJmb250LWZhY2UiOmNhc2UiZm9udC1mYWNlLXNyYyI6Y2FzZSJmb250LWZhY2UtdXJpIjpjYXNlImZvbnQtZmFjZS1mb3JtYXQiOmNhc2UiZm9udC1mYWNlLW5hbWUiOmNhc2UibWlzc2luZy1nbHlwaCI6cmV0dXJuITE7ZGVmYXVsdDpyZXR1cm4hMH19ZnVuY3Rpb24gZHIoZSx0KXt2YXIgbj1EbihlPTk9PT1lLm5vZGVUeXBlfHwxMT09PWUubm9kZVR5cGU/ZTplLm93bmVyRG9jdW1lbnQpO3Q9Ylt0XTtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG89dFtyXTtpZighbi5oYXNPd25Qcm9wZXJ0eShvKXx8IW5bb10pe3N3aXRjaChvKXtjYXNlInNjcm9sbCI6Um4oInNjcm9sbCIsZSk7YnJlYWs7Y2FzZSJmb2N1cyI6Y2FzZSJibHVyIjpSbigiZm9jdXMiLGUpLFJuKCJibHVyIixlKSxuLmJsdXI9ITAsbi5mb2N1cz0hMDticmVhaztjYXNlImNhbmNlbCI6Y2FzZSJjbG9zZSI6R2UobykmJlJuKG8sZSk7YnJlYWs7Y2FzZSJpbnZhbGlkIjpjYXNlInN1Ym1pdCI6Y2FzZSJyZXNldCI6YnJlYWs7ZGVmYXVsdDotMT09PXJlLmluZGV4T2YobykmJlBuKG8sZSl9bltvXT0hMH19fWZ1bmN0aW9uIGhyKCl7fXZhciB5cj1udWxsLF9yPW51bGw7ZnVuY3Rpb24gdnIoZSx0KXtzd2l0Y2goZSl7Y2FzZSJidXR0b24iOmNhc2UiaW5wdXQiOmNhc2Uic2VsZWN0IjpjYXNlInRleHRhcmVhIjpyZXR1cm4hIXQuYXV0b0ZvY3VzfXJldHVybiExfWZ1bmN0aW9uIG1yKGUsdCl7cmV0dXJuInRleHRhcmVhIj09PWV8fCJvcHRpb24iPT09ZXx8Im5vc2NyaXB0Ij09PWV8fCJzdHJpbmciPT10eXBlb2YgdC5jaGlsZHJlbnx8Im51bWJlciI9PXR5cGVvZiB0LmNoaWxkcmVufHwib2JqZWN0Ij09dHlwZW9mIHQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwmJm51bGwhPT10LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MJiZudWxsIT10LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MLl9faHRtbH12YXIgZ3I9c2V0VGltZW91dCxicj1jbGVhclRpbWVvdXQ7ZnVuY3Rpb24gd3IoZSl7Zm9yKGU9ZS5uZXh0U2libGluZztlJiYxIT09ZS5ub2RlVHlwZSYmMyE9PWUubm9kZVR5cGU7KWU9ZS5uZXh0U2libGluZztyZXR1cm4gZX1mdW5jdGlvbiBFcihlKXtmb3IoZT1lLmZpcnN0Q2hpbGQ7ZSYmMSE9PWUubm9kZVR5cGUmJjMhPT1lLm5vZGVUeXBlOyllPWUubmV4dFNpYmxpbmc7cmV0dXJuIGV9bmV3IFNldDt2YXIgVHI9W10sT3I9LTE7ZnVuY3Rpb24gU3IoZSl7MD5Pcnx8KGUuY3VycmVudD1UcltPcl0sVHJbT3JdPW51bGwsT3ItLSl9ZnVuY3Rpb24geHIoZSx0KXtUclsrK09yXT1lLmN1cnJlbnQsZS5jdXJyZW50PXR9dmFyIFByPXt9LFJyPXtjdXJyZW50OlByfSxDcj17Y3VycmVudDohMX0sa3I9UHI7ZnVuY3Rpb24gTnIoZSx0KXt2YXIgbj1lLnR5cGUuY29udGV4dFR5cGVzO2lmKCFuKXJldHVybiBQcjt2YXIgcj1lLnN0YXRlTm9kZTtpZihyJiZyLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkVW5tYXNrZWRDaGlsZENvbnRleHQ9PT10KXJldHVybiByLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWFza2VkQ2hpbGRDb250ZXh0O3ZhciBvLGk9e307Zm9yKG8gaW4gbilpW29dPXRbb107cmV0dXJuIHImJigoZT1lLnN0YXRlTm9kZSkuX19yZWFjdEludGVybmFsTWVtb2l6ZWRVbm1hc2tlZENoaWxkQ29udGV4dD10LGUuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNYXNrZWRDaGlsZENvbnRleHQ9aSksaX1mdW5jdGlvbiBBcihlKXtyZXR1cm4gbnVsbCE9KGU9ZS5jaGlsZENvbnRleHRUeXBlcyl9ZnVuY3Rpb24gSXIoZSl7U3IoQ3IpLFNyKFJyKX1mdW5jdGlvbiBEcihlKXtTcihDciksU3IoUnIpfWZ1bmN0aW9uIGpyKGUsdCxuKXtSci5jdXJyZW50IT09UHImJmEoIjE2OCIpLHhyKFJyLHQpLHhyKENyLG4pfWZ1bmN0aW9uIExyKGUsdCxuKXt2YXIgcj1lLnN0YXRlTm9kZTtpZihlPXQuY2hpbGRDb250ZXh0VHlwZXMsImZ1bmN0aW9uIiE9dHlwZW9mIHIuZ2V0Q2hpbGRDb250ZXh0KXJldHVybiBuO2Zvcih2YXIgaSBpbiByPXIuZ2V0Q2hpbGRDb250ZXh0KCkpaSBpbiBlfHxhKCIxMDgiLGx0KHQpfHwiVW5rbm93biIsaSk7cmV0dXJuIG8oe30sbixyKX1mdW5jdGlvbiBNcihlKXt2YXIgdD1lLnN0YXRlTm9kZTtyZXR1cm4gdD10JiZ0Ll9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0fHxQcixrcj1Sci5jdXJyZW50LHhyKFJyLHQpLHhyKENyLENyLmN1cnJlbnQpLCEwfWZ1bmN0aW9uIEZyKGUsdCxuKXt2YXIgcj1lLnN0YXRlTm9kZTtyfHxhKCIxNjkiKSxuPyh0PUxyKGUsdCxrciksci5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dD10LFNyKENyKSxTcihScikseHIoUnIsdCkpOlNyKENyKSx4cihDcixuKX12YXIgVXI9bnVsbCxXcj1udWxsO2Z1bmN0aW9uICRyKGUpe3JldHVybiBmdW5jdGlvbih0KXt0cnl7cmV0dXJuIGUodCl9Y2F0Y2goZSl7fX19ZnVuY3Rpb24gR3IoZSx0LG4scil7dGhpcy50YWc9ZSx0aGlzLmtleT1uLHRoaXMuc2libGluZz10aGlzLmNoaWxkPXRoaXMucmV0dXJuPXRoaXMuc3RhdGVOb2RlPXRoaXMudHlwZT10aGlzLmVsZW1lbnRUeXBlPW51bGwsdGhpcy5pbmRleD0wLHRoaXMucmVmPW51bGwsdGhpcy5wZW5kaW5nUHJvcHM9dCx0aGlzLmZpcnN0Q29udGV4dERlcGVuZGVuY3k9dGhpcy5tZW1vaXplZFN0YXRlPXRoaXMudXBkYXRlUXVldWU9dGhpcy5tZW1vaXplZFByb3BzPW51bGwsdGhpcy5tb2RlPXIsdGhpcy5lZmZlY3RUYWc9MCx0aGlzLmxhc3RFZmZlY3Q9dGhpcy5maXJzdEVmZmVjdD10aGlzLm5leHRFZmZlY3Q9bnVsbCx0aGlzLmNoaWxkRXhwaXJhdGlvblRpbWU9dGhpcy5leHBpcmF0aW9uVGltZT0wLHRoaXMuYWx0ZXJuYXRlPW51bGx9ZnVuY3Rpb24gQnIoZSx0LG4scil7cmV0dXJuIG5ldyBHcihlLHQsbixyKX1mdW5jdGlvbiBxcihlKXtyZXR1cm4hKCEoZT1lLnByb3RvdHlwZSl8fCFlLmlzUmVhY3RDb21wb25lbnQpfWZ1bmN0aW9uIHpyKGUsdCl7dmFyIG49ZS5hbHRlcm5hdGU7cmV0dXJuIG51bGw9PT1uPygobj1CcihlLnRhZyx0LGUua2V5LGUubW9kZSkpLmVsZW1lbnRUeXBlPWUuZWxlbWVudFR5cGUsbi50eXBlPWUudHlwZSxuLnN0YXRlTm9kZT1lLnN0YXRlTm9kZSxuLmFsdGVybmF0ZT1lLGUuYWx0ZXJuYXRlPW4pOihuLnBlbmRpbmdQcm9wcz10LG4uZWZmZWN0VGFnPTAsbi5uZXh0RWZmZWN0PW51bGwsbi5maXJzdEVmZmVjdD1udWxsLG4ubGFzdEVmZmVjdD1udWxsKSxuLmNoaWxkRXhwaXJhdGlvblRpbWU9ZS5jaGlsZEV4cGlyYXRpb25UaW1lLG4uZXhwaXJhdGlvblRpbWU9ZS5leHBpcmF0aW9uVGltZSxuLmNoaWxkPWUuY2hpbGQsbi5tZW1vaXplZFByb3BzPWUubWVtb2l6ZWRQcm9wcyxuLm1lbW9pemVkU3RhdGU9ZS5tZW1vaXplZFN0YXRlLG4udXBkYXRlUXVldWU9ZS51cGRhdGVRdWV1ZSxuLmZpcnN0Q29udGV4dERlcGVuZGVuY3k9ZS5maXJzdENvbnRleHREZXBlbmRlbmN5LG4uc2libGluZz1lLnNpYmxpbmcsbi5pbmRleD1lLmluZGV4LG4ucmVmPWUucmVmLG59ZnVuY3Rpb24gSHIoZSx0LG4scixvLGkpe3ZhciB1PTI7aWYocj1lLCJmdW5jdGlvbiI9PXR5cGVvZiBlKXFyKGUpJiYodT0xKTtlbHNlIGlmKCJzdHJpbmciPT10eXBlb2YgZSl1PTU7ZWxzZSBlOnN3aXRjaChlKXtjYXNlIFhlOnJldHVybiBWcihuLmNoaWxkcmVuLG8saSx0KTtjYXNlIG50OnJldHVybiBZcihuLDN8byxpLHQpO2Nhc2UgSmU6cmV0dXJuIFlyKG4sMnxvLGksdCk7Y2FzZSBaZTpyZXR1cm4oZT1CcigxMixuLHQsNHxvKSkuZWxlbWVudFR5cGU9WmUsZS50eXBlPVplLGUuZXhwaXJhdGlvblRpbWU9aSxlO2Nhc2Ugb3Q6cmV0dXJuKGU9QnIoMTMsbix0LG8pKS5lbGVtZW50VHlwZT1vdCxlLnR5cGU9b3QsZS5leHBpcmF0aW9uVGltZT1pLGU7ZGVmYXVsdDppZigib2JqZWN0Ij09dHlwZW9mIGUmJm51bGwhPT1lKXN3aXRjaChlLiQkdHlwZW9mKXtjYXNlIGV0OnU9MTA7YnJlYWsgZTtjYXNlIHR0OnU9OTticmVhayBlO2Nhc2UgcnQ6dT0xMTticmVhayBlO2Nhc2UgaXQ6dT0xNDticmVhayBlO2Nhc2UgYXQ6dT0xNixyPW51bGw7YnJlYWsgZX1hKCIxMzAiLG51bGw9PWU/ZTp0eXBlb2YgZSwiIil9cmV0dXJuKHQ9QnIodSxuLHQsbykpLmVsZW1lbnRUeXBlPWUsdC50eXBlPXIsdC5leHBpcmF0aW9uVGltZT1pLHR9ZnVuY3Rpb24gVnIoZSx0LG4scil7cmV0dXJuKGU9QnIoNyxlLHIsdCkpLmV4cGlyYXRpb25UaW1lPW4sZX1mdW5jdGlvbiBZcihlLHQsbixyKXtyZXR1cm4gZT1Ccig4LGUscix0KSx0PTA9PSgxJnQpP0plOm50LGUuZWxlbWVudFR5cGU9dCxlLnR5cGU9dCxlLmV4cGlyYXRpb25UaW1lPW4sZX1mdW5jdGlvbiBLcihlLHQsbil7cmV0dXJuKGU9QnIoNixlLG51bGwsdCkpLmV4cGlyYXRpb25UaW1lPW4sZX1mdW5jdGlvbiBRcihlLHQsbil7cmV0dXJuKHQ9QnIoNCxudWxsIT09ZS5jaGlsZHJlbj9lLmNoaWxkcmVuOltdLGUua2V5LHQpKS5leHBpcmF0aW9uVGltZT1uLHQuc3RhdGVOb2RlPXtjb250YWluZXJJbmZvOmUuY29udGFpbmVySW5mbyxwZW5kaW5nQ2hpbGRyZW46bnVsbCxpbXBsZW1lbnRhdGlvbjplLmltcGxlbWVudGF0aW9ufSx0fWZ1bmN0aW9uIFhyKGUsdCl7ZS5kaWRFcnJvcj0hMTt2YXIgbj1lLmVhcmxpZXN0UGVuZGluZ1RpbWU7MD09PW4/ZS5lYXJsaWVzdFBlbmRpbmdUaW1lPWUubGF0ZXN0UGVuZGluZ1RpbWU9dDpuPnQ/ZS5lYXJsaWVzdFBlbmRpbmdUaW1lPXQ6ZS5sYXRlc3RQZW5kaW5nVGltZTx0JiYoZS5sYXRlc3RQZW5kaW5nVGltZT10KSxlbyh0LGUpfWZ1bmN0aW9uIEpyKGUsdCl7ZS5kaWRFcnJvcj0hMTt2YXIgbj1lLmxhdGVzdFBpbmdlZFRpbWU7MCE9PW4mJm48PXQmJihlLmxhdGVzdFBpbmdlZFRpbWU9MCksbj1lLmVhcmxpZXN0UGVuZGluZ1RpbWU7dmFyIHI9ZS5sYXRlc3RQZW5kaW5nVGltZTtuPT09dD9lLmVhcmxpZXN0UGVuZGluZ1RpbWU9cj09PXQ/ZS5sYXRlc3RQZW5kaW5nVGltZT0wOnI6cj09PXQmJihlLmxhdGVzdFBlbmRpbmdUaW1lPW4pLG49ZS5lYXJsaWVzdFN1c3BlbmRlZFRpbWUscj1lLmxhdGVzdFN1c3BlbmRlZFRpbWUsMD09PW4/ZS5lYXJsaWVzdFN1c3BlbmRlZFRpbWU9ZS5sYXRlc3RTdXNwZW5kZWRUaW1lPXQ6bj50P2UuZWFybGllc3RTdXNwZW5kZWRUaW1lPXQ6cjx0JiYoZS5sYXRlc3RTdXNwZW5kZWRUaW1lPXQpLGVvKHQsZSl9ZnVuY3Rpb24gWnIoZSx0KXt2YXIgbj1lLmVhcmxpZXN0UGVuZGluZ1RpbWU7cmV0dXJuIGU9ZS5lYXJsaWVzdFN1c3BlbmRlZFRpbWUsKDA9PT10fHwwIT09biYmbjx0KSYmKHQ9biksKDA9PT10fHwwIT09ZSYmZTx0KSYmKHQ9ZSksdH1mdW5jdGlvbiBlbyhlLHQpe3ZhciBuPXQuZWFybGllc3RTdXNwZW5kZWRUaW1lLHI9dC5sYXRlc3RTdXNwZW5kZWRUaW1lLG89dC5lYXJsaWVzdFBlbmRpbmdUaW1lLGk9dC5sYXRlc3RQaW5nZWRUaW1lOzA9PT0obz0wIT09bz9vOmkpJiYoMD09PWV8fHI+ZSkmJihvPXIpLDAhPT0oZT1vKSYmMCE9PW4mJm48ZSYmKGU9biksdC5uZXh0RXhwaXJhdGlvblRpbWVUb1dvcmtPbj1vLHQuZXhwaXJhdGlvblRpbWU9ZX12YXIgdG89ITE7ZnVuY3Rpb24gbm8oZSl7cmV0dXJue2Jhc2VTdGF0ZTplLGZpcnN0VXBkYXRlOm51bGwsbGFzdFVwZGF0ZTpudWxsLGZpcnN0Q2FwdHVyZWRVcGRhdGU6bnVsbCxsYXN0Q2FwdHVyZWRVcGRhdGU6bnVsbCxmaXJzdEVmZmVjdDpudWxsLGxhc3RFZmZlY3Q6bnVsbCxmaXJzdENhcHR1cmVkRWZmZWN0Om51bGwsbGFzdENhcHR1cmVkRWZmZWN0Om51bGx9fWZ1bmN0aW9uIHJvKGUpe3JldHVybntiYXNlU3RhdGU6ZS5iYXNlU3RhdGUsZmlyc3RVcGRhdGU6ZS5maXJzdFVwZGF0ZSxsYXN0VXBkYXRlOmUubGFzdFVwZGF0ZSxmaXJzdENhcHR1cmVkVXBkYXRlOm51bGwsbGFzdENhcHR1cmVkVXBkYXRlOm51bGwsZmlyc3RFZmZlY3Q6bnVsbCxsYXN0RWZmZWN0Om51bGwsZmlyc3RDYXB0dXJlZEVmZmVjdDpudWxsLGxhc3RDYXB0dXJlZEVmZmVjdDpudWxsfX1mdW5jdGlvbiBvbyhlKXtyZXR1cm57ZXhwaXJhdGlvblRpbWU6ZSx0YWc6MCxwYXlsb2FkOm51bGwsY2FsbGJhY2s6bnVsbCxuZXh0Om51bGwsbmV4dEVmZmVjdDpudWxsfX1mdW5jdGlvbiBpbyhlLHQpe251bGw9PT1lLmxhc3RVcGRhdGU/ZS5maXJzdFVwZGF0ZT1lLmxhc3RVcGRhdGU9dDooZS5sYXN0VXBkYXRlLm5leHQ9dCxlLmxhc3RVcGRhdGU9dCl9ZnVuY3Rpb24gYW8oZSx0KXt2YXIgbj1lLmFsdGVybmF0ZTtpZihudWxsPT09bil7dmFyIHI9ZS51cGRhdGVRdWV1ZSxvPW51bGw7bnVsbD09PXImJihyPWUudXBkYXRlUXVldWU9bm8oZS5tZW1vaXplZFN0YXRlKSl9ZWxzZSByPWUudXBkYXRlUXVldWUsbz1uLnVwZGF0ZVF1ZXVlLG51bGw9PT1yP251bGw9PT1vPyhyPWUudXBkYXRlUXVldWU9bm8oZS5tZW1vaXplZFN0YXRlKSxvPW4udXBkYXRlUXVldWU9bm8obi5tZW1vaXplZFN0YXRlKSk6cj1lLnVwZGF0ZVF1ZXVlPXJvKG8pOm51bGw9PT1vJiYobz1uLnVwZGF0ZVF1ZXVlPXJvKHIpKTtudWxsPT09b3x8cj09PW8/aW8ocix0KTpudWxsPT09ci5sYXN0VXBkYXRlfHxudWxsPT09by5sYXN0VXBkYXRlPyhpbyhyLHQpLGlvKG8sdCkpOihpbyhyLHQpLG8ubGFzdFVwZGF0ZT10KX1mdW5jdGlvbiB1byhlLHQpe3ZhciBuPWUudXBkYXRlUXVldWU7bnVsbD09PShuPW51bGw9PT1uP2UudXBkYXRlUXVldWU9bm8oZS5tZW1vaXplZFN0YXRlKTpjbyhlLG4pKS5sYXN0Q2FwdHVyZWRVcGRhdGU/bi5maXJzdENhcHR1cmVkVXBkYXRlPW4ubGFzdENhcHR1cmVkVXBkYXRlPXQ6KG4ubGFzdENhcHR1cmVkVXBkYXRlLm5leHQ9dCxuLmxhc3RDYXB0dXJlZFVwZGF0ZT10KX1mdW5jdGlvbiBjbyhlLHQpe3ZhciBuPWUuYWx0ZXJuYXRlO3JldHVybiBudWxsIT09biYmdD09PW4udXBkYXRlUXVldWUmJih0PWUudXBkYXRlUXVldWU9cm8odCkpLHR9ZnVuY3Rpb24gbG8oZSx0LG4scixpLGEpe3N3aXRjaChuLnRhZyl7Y2FzZSAxOnJldHVybiJmdW5jdGlvbiI9PXR5cGVvZihlPW4ucGF5bG9hZCk/ZS5jYWxsKGEscixpKTplO2Nhc2UgMzplLmVmZmVjdFRhZz0tMTAyNSZlLmVmZmVjdFRhZ3w2NDtjYXNlIDA6aWYobnVsbD09KGk9ImZ1bmN0aW9uIj09dHlwZW9mKGU9bi5wYXlsb2FkKT9lLmNhbGwoYSxyLGkpOmUpKWJyZWFrO3JldHVybiBvKHt9LHIsaSk7Y2FzZSAyOnRvPSEwfXJldHVybiByfWZ1bmN0aW9uIHNvKGUsdCxuLHIsbyl7dG89ITE7Zm9yKHZhciBpPSh0PWNvKGUsdCkpLmJhc2VTdGF0ZSxhPW51bGwsdT0wLGM9dC5maXJzdFVwZGF0ZSxsPWk7bnVsbCE9PWM7KXt2YXIgcz1jLmV4cGlyYXRpb25UaW1lO3M+bz8obnVsbD09PWEmJihhPWMsaT1sKSwoMD09PXV8fHU+cykmJih1PXMpKToobD1sbyhlLDAsYyxsLG4sciksbnVsbCE9PWMuY2FsbGJhY2smJihlLmVmZmVjdFRhZ3w9MzIsYy5uZXh0RWZmZWN0PW51bGwsbnVsbD09PXQubGFzdEVmZmVjdD90LmZpcnN0RWZmZWN0PXQubGFzdEVmZmVjdD1jOih0Lmxhc3RFZmZlY3QubmV4dEVmZmVjdD1jLHQubGFzdEVmZmVjdD1jKSkpLGM9Yy5uZXh0fWZvcihzPW51bGwsYz10LmZpcnN0Q2FwdHVyZWRVcGRhdGU7bnVsbCE9PWM7KXt2YXIgZj1jLmV4cGlyYXRpb25UaW1lO2Y+bz8obnVsbD09PXMmJihzPWMsbnVsbD09PWEmJihpPWwpKSwoMD09PXV8fHU+ZikmJih1PWYpKToobD1sbyhlLDAsYyxsLG4sciksbnVsbCE9PWMuY2FsbGJhY2smJihlLmVmZmVjdFRhZ3w9MzIsYy5uZXh0RWZmZWN0PW51bGwsbnVsbD09PXQubGFzdENhcHR1cmVkRWZmZWN0P3QuZmlyc3RDYXB0dXJlZEVmZmVjdD10Lmxhc3RDYXB0dXJlZEVmZmVjdD1jOih0Lmxhc3RDYXB0dXJlZEVmZmVjdC5uZXh0RWZmZWN0PWMsdC5sYXN0Q2FwdHVyZWRFZmZlY3Q9YykpKSxjPWMubmV4dH1udWxsPT09YSYmKHQubGFzdFVwZGF0ZT1udWxsKSxudWxsPT09cz90Lmxhc3RDYXB0dXJlZFVwZGF0ZT1udWxsOmUuZWZmZWN0VGFnfD0zMixudWxsPT09YSYmbnVsbD09PXMmJihpPWwpLHQuYmFzZVN0YXRlPWksdC5maXJzdFVwZGF0ZT1hLHQuZmlyc3RDYXB0dXJlZFVwZGF0ZT1zLGUuZXhwaXJhdGlvblRpbWU9dSxlLm1lbW9pemVkU3RhdGU9bH1mdW5jdGlvbiBmbyhlLHQsbil7bnVsbCE9PXQuZmlyc3RDYXB0dXJlZFVwZGF0ZSYmKG51bGwhPT10Lmxhc3RVcGRhdGUmJih0Lmxhc3RVcGRhdGUubmV4dD10LmZpcnN0Q2FwdHVyZWRVcGRhdGUsdC5sYXN0VXBkYXRlPXQubGFzdENhcHR1cmVkVXBkYXRlKSx0LmZpcnN0Q2FwdHVyZWRVcGRhdGU9dC5sYXN0Q2FwdHVyZWRVcGRhdGU9bnVsbCkscG8odC5maXJzdEVmZmVjdCxuKSx0LmZpcnN0RWZmZWN0PXQubGFzdEVmZmVjdD1udWxsLHBvKHQuZmlyc3RDYXB0dXJlZEVmZmVjdCxuKSx0LmZpcnN0Q2FwdHVyZWRFZmZlY3Q9dC5sYXN0Q2FwdHVyZWRFZmZlY3Q9bnVsbH1mdW5jdGlvbiBwbyhlLHQpe2Zvcig7bnVsbCE9PWU7KXt2YXIgbj1lLmNhbGxiYWNrO2lmKG51bGwhPT1uKXtlLmNhbGxiYWNrPW51bGw7dmFyIHI9dDsiZnVuY3Rpb24iIT10eXBlb2YgbiYmYSgiMTkxIixuKSxuLmNhbGwocil9ZT1lLm5leHRFZmZlY3R9fWZ1bmN0aW9uIGhvKGUsdCl7cmV0dXJue3ZhbHVlOmUsc291cmNlOnQsc3RhY2s6c3QodCl9fXZhciB5bz17Y3VycmVudDpudWxsfSxfbz1udWxsLHZvPW51bGwsbW89bnVsbDtmdW5jdGlvbiBnbyhlLHQpe3ZhciBuPWUudHlwZS5fY29udGV4dDt4cih5byxuLl9jdXJyZW50VmFsdWUpLG4uX2N1cnJlbnRWYWx1ZT10fWZ1bmN0aW9uIGJvKGUpe3ZhciB0PXlvLmN1cnJlbnQ7U3IoeW8pLGUudHlwZS5fY29udGV4dC5fY3VycmVudFZhbHVlPXR9ZnVuY3Rpb24gd28oZSl7X289ZSxtbz12bz1udWxsLGUuZmlyc3RDb250ZXh0RGVwZW5kZW5jeT1udWxsfWZ1bmN0aW9uIEVvKGUsdCl7cmV0dXJuIG1vIT09ZSYmITEhPT10JiYwIT09dCYmKCJudW1iZXIiPT10eXBlb2YgdCYmMTA3Mzc0MTgyMyE9PXR8fChtbz1lLHQ9MTA3Mzc0MTgyMyksdD17Y29udGV4dDplLG9ic2VydmVkQml0czp0LG5leHQ6bnVsbH0sbnVsbD09PXZvPyhudWxsPT09X28mJmEoIjI5MyIpLF9vLmZpcnN0Q29udGV4dERlcGVuZGVuY3k9dm89dCk6dm89dm8ubmV4dD10KSxlLl9jdXJyZW50VmFsdWV9dmFyIFRvPXt9LE9vPXtjdXJyZW50OlRvfSxTbz17Y3VycmVudDpUb30seG89e2N1cnJlbnQ6VG99O2Z1bmN0aW9uIFBvKGUpe3JldHVybiBlPT09VG8mJmEoIjE3NCIpLGV9ZnVuY3Rpb24gUm8oZSx0KXt4cih4byx0KSx4cihTbyxlKSx4cihPbyxUbyk7dmFyIG49dC5ub2RlVHlwZTtzd2l0Y2gobil7Y2FzZSA5OmNhc2UgMTE6dD0odD10LmRvY3VtZW50RWxlbWVudCk/dC5uYW1lc3BhY2VVUkk6bnIobnVsbCwiIik7YnJlYWs7ZGVmYXVsdDp0PW5yKHQ9KG49OD09PW4/dC5wYXJlbnROb2RlOnQpLm5hbWVzcGFjZVVSSXx8bnVsbCxuPW4udGFnTmFtZSl9U3IoT28pLHhyKE9vLHQpfWZ1bmN0aW9uIENvKGUpe1NyKE9vKSxTcihTbyksU3IoeG8pfWZ1bmN0aW9uIGtvKGUpe1BvKHhvLmN1cnJlbnQpO3ZhciB0PVBvKE9vLmN1cnJlbnQpLG49bnIodCxlLnR5cGUpO3QhPT1uJiYoeHIoU28sZSkseHIoT28sbikpfWZ1bmN0aW9uIE5vKGUpe1NvLmN1cnJlbnQ9PT1lJiYoU3IoT28pLFNyKFNvKSl9dmFyIEFvPUhlLlJlYWN0Q3VycmVudE93bmVyLElvPShuZXcgci5Db21wb25lbnQpLnJlZnM7ZnVuY3Rpb24gRG8oZSx0LG4scil7bj1udWxsPT0obj1uKHIsdD1lLm1lbW9pemVkU3RhdGUpKT90Om8oe30sdCxuKSxlLm1lbW9pemVkU3RhdGU9bixudWxsIT09KHI9ZS51cGRhdGVRdWV1ZSkmJjA9PT1lLmV4cGlyYXRpb25UaW1lJiYoci5iYXNlU3RhdGU9bil9dmFyIGpvPXtpc01vdW50ZWQ6ZnVuY3Rpb24oZSl7cmV0dXJuISEoZT1lLl9yZWFjdEludGVybmFsRmliZXIpJiYyPT09cm4oZSl9LGVucXVldWVTZXRTdGF0ZTpmdW5jdGlvbihlLHQsbil7ZT1lLl9yZWFjdEludGVybmFsRmliZXI7dmFyIHI9U2EoKSxvPW9vKHI9WWkocixlKSk7by5wYXlsb2FkPXQsbnVsbCE9biYmKG8uY2FsbGJhY2s9biksYW8oZSxvKSxYaShlLHIpfSxlbnF1ZXVlUmVwbGFjZVN0YXRlOmZ1bmN0aW9uKGUsdCxuKXtlPWUuX3JlYWN0SW50ZXJuYWxGaWJlcjt2YXIgcj1TYSgpLG89b28ocj1ZaShyLGUpKTtvLnRhZz0xLG8ucGF5bG9hZD10LG51bGwhPW4mJihvLmNhbGxiYWNrPW4pLGFvKGUsbyksWGkoZSxyKX0sZW5xdWV1ZUZvcmNlVXBkYXRlOmZ1bmN0aW9uKGUsdCl7ZT1lLl9yZWFjdEludGVybmFsRmliZXI7dmFyIG49U2EoKSxyPW9vKG49WWkobixlKSk7ci50YWc9MixudWxsIT10JiYoci5jYWxsYmFjaz10KSxhbyhlLHIpLFhpKGUsbil9fTtmdW5jdGlvbiBMbyhlLHQsbixyLG8saSxhKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YoZT1lLnN0YXRlTm9kZSkuc2hvdWxkQ29tcG9uZW50VXBkYXRlP2Uuc2hvdWxkQ29tcG9uZW50VXBkYXRlKHIsaSxhKTohdC5wcm90b3R5cGV8fCF0LnByb3RvdHlwZS5pc1B1cmVSZWFjdENvbXBvbmVudHx8KCFubihuLHIpfHwhbm4obyxpKSl9ZnVuY3Rpb24gTW8oZSx0LG4pe3ZhciByPSExLG89UHIsaT10LmNvbnRleHRUeXBlO3JldHVybiJvYmplY3QiPT10eXBlb2YgaSYmbnVsbCE9PWk/aT1Bby5jdXJyZW50RGlzcGF0Y2hlci5yZWFkQ29udGV4dChpKToobz1Bcih0KT9rcjpSci5jdXJyZW50LGk9KHI9bnVsbCE9KHI9dC5jb250ZXh0VHlwZXMpKT9OcihlLG8pOlByKSx0PW5ldyB0KG4saSksZS5tZW1vaXplZFN0YXRlPW51bGwhPT10LnN0YXRlJiZ2b2lkIDAhPT10LnN0YXRlP3Quc3RhdGU6bnVsbCx0LnVwZGF0ZXI9am8sZS5zdGF0ZU5vZGU9dCx0Ll9yZWFjdEludGVybmFsRmliZXI9ZSxyJiYoKGU9ZS5zdGF0ZU5vZGUpLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkVW5tYXNrZWRDaGlsZENvbnRleHQ9byxlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWFza2VkQ2hpbGRDb250ZXh0PWkpLHR9ZnVuY3Rpb24gRm8oZSx0LG4scil7ZT10LnN0YXRlLCJmdW5jdGlvbiI9PXR5cGVvZiB0LmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMmJnQuY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhuLHIpLCJmdW5jdGlvbiI9PXR5cGVvZiB0LlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJiZ0LlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzKG4sciksdC5zdGF0ZSE9PWUmJmpvLmVucXVldWVSZXBsYWNlU3RhdGUodCx0LnN0YXRlLG51bGwpfWZ1bmN0aW9uIFVvKGUsdCxuLHIpe3ZhciBvPWUuc3RhdGVOb2RlO28ucHJvcHM9bixvLnN0YXRlPWUubWVtb2l6ZWRTdGF0ZSxvLnJlZnM9SW87dmFyIGk9dC5jb250ZXh0VHlwZTsib2JqZWN0Ij09dHlwZW9mIGkmJm51bGwhPT1pP28uY29udGV4dD1Bby5jdXJyZW50RGlzcGF0Y2hlci5yZWFkQ29udGV4dChpKTooaT1Bcih0KT9rcjpSci5jdXJyZW50LG8uY29udGV4dD1OcihlLGkpKSxudWxsIT09KGk9ZS51cGRhdGVRdWV1ZSkmJihzbyhlLGksbixvLHIpLG8uc3RhdGU9ZS5tZW1vaXplZFN0YXRlKSwiZnVuY3Rpb24iPT10eXBlb2YoaT10LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wcykmJihEbyhlLHQsaSxuKSxvLnN0YXRlPWUubWVtb2l6ZWRTdGF0ZSksImZ1bmN0aW9uIj09dHlwZW9mIHQuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzfHwiZnVuY3Rpb24iPT10eXBlb2Ygby5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZXx8ImZ1bmN0aW9uIiE9dHlwZW9mIG8uVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCYmImZ1bmN0aW9uIiE9dHlwZW9mIG8uY29tcG9uZW50V2lsbE1vdW50fHwodD1vLnN0YXRlLCJmdW5jdGlvbiI9PXR5cGVvZiBvLmNvbXBvbmVudFdpbGxNb3VudCYmby5jb21wb25lbnRXaWxsTW91bnQoKSwiZnVuY3Rpb24iPT10eXBlb2Ygby5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50JiZvLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQoKSx0IT09by5zdGF0ZSYmam8uZW5xdWV1ZVJlcGxhY2VTdGF0ZShvLG8uc3RhdGUsbnVsbCksbnVsbCE9PShpPWUudXBkYXRlUXVldWUpJiYoc28oZSxpLG4sbyxyKSxvLnN0YXRlPWUubWVtb2l6ZWRTdGF0ZSkpLCJmdW5jdGlvbiI9PXR5cGVvZiBvLmNvbXBvbmVudERpZE1vdW50JiYoZS5lZmZlY3RUYWd8PTQpfXZhciBXbz1BcnJheS5pc0FycmF5O2Z1bmN0aW9uICRvKGUsdCxuKXtpZihudWxsIT09KGU9bi5yZWYpJiYiZnVuY3Rpb24iIT10eXBlb2YgZSYmIm9iamVjdCIhPXR5cGVvZiBlKXtpZihuLl9vd25lcil7bj1uLl9vd25lcjt2YXIgcj12b2lkIDA7biYmKDEhPT1uLnRhZyYmYSgiMjg5Iikscj1uLnN0YXRlTm9kZSkscnx8YSgiMTQ3IixlKTt2YXIgbz0iIitlO3JldHVybiBudWxsIT09dCYmbnVsbCE9PXQucmVmJiYiZnVuY3Rpb24iPT10eXBlb2YgdC5yZWYmJnQucmVmLl9zdHJpbmdSZWY9PT1vP3QucmVmOigodD1mdW5jdGlvbihlKXt2YXIgdD1yLnJlZnM7dD09PUlvJiYodD1yLnJlZnM9e30pLG51bGw9PT1lP2RlbGV0ZSB0W29dOnRbb109ZX0pLl9zdHJpbmdSZWY9byx0KX0ic3RyaW5nIiE9dHlwZW9mIGUmJmEoIjI4NCIpLG4uX293bmVyfHxhKCIyOTAiLGUpfXJldHVybiBlfWZ1bmN0aW9uIEdvKGUsdCl7InRleHRhcmVhIiE9PWUudHlwZSYmYSgiMzEiLCJbb2JqZWN0IE9iamVjdF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpPyJvYmplY3Qgd2l0aCBrZXlzIHsiK09iamVjdC5rZXlzKHQpLmpvaW4oIiwgIikrIn0iOnQsIiIpfWZ1bmN0aW9uIEJvKGUpe2Z1bmN0aW9uIHQodCxuKXtpZihlKXt2YXIgcj10Lmxhc3RFZmZlY3Q7bnVsbCE9PXI/KHIubmV4dEVmZmVjdD1uLHQubGFzdEVmZmVjdD1uKTp0LmZpcnN0RWZmZWN0PXQubGFzdEVmZmVjdD1uLG4ubmV4dEVmZmVjdD1udWxsLG4uZWZmZWN0VGFnPTh9fWZ1bmN0aW9uIG4obixyKXtpZighZSlyZXR1cm4gbnVsbDtmb3IoO251bGwhPT1yOyl0KG4scikscj1yLnNpYmxpbmc7cmV0dXJuIG51bGx9ZnVuY3Rpb24gcihlLHQpe2ZvcihlPW5ldyBNYXA7bnVsbCE9PXQ7KW51bGwhPT10LmtleT9lLnNldCh0LmtleSx0KTplLnNldCh0LmluZGV4LHQpLHQ9dC5zaWJsaW5nO3JldHVybiBlfWZ1bmN0aW9uIG8oZSx0LG4pe3JldHVybihlPXpyKGUsdCkpLmluZGV4PTAsZS5zaWJsaW5nPW51bGwsZX1mdW5jdGlvbiBpKHQsbixyKXtyZXR1cm4gdC5pbmRleD1yLGU/bnVsbCE9PShyPXQuYWx0ZXJuYXRlKT8ocj1yLmluZGV4KTxuPyh0LmVmZmVjdFRhZz0yLG4pOnI6KHQuZWZmZWN0VGFnPTIsbik6bn1mdW5jdGlvbiB1KHQpe3JldHVybiBlJiZudWxsPT09dC5hbHRlcm5hdGUmJih0LmVmZmVjdFRhZz0yKSx0fWZ1bmN0aW9uIGMoZSx0LG4scil7cmV0dXJuIG51bGw9PT10fHw2IT09dC50YWc/KCh0PUtyKG4sZS5tb2RlLHIpKS5yZXR1cm49ZSx0KTooKHQ9byh0LG4pKS5yZXR1cm49ZSx0KX1mdW5jdGlvbiBsKGUsdCxuLHIpe3JldHVybiBudWxsIT09dCYmdC5lbGVtZW50VHlwZT09PW4udHlwZT8oKHI9byh0LG4ucHJvcHMpKS5yZWY9JG8oZSx0LG4pLHIucmV0dXJuPWUscik6KChyPUhyKG4udHlwZSxuLmtleSxuLnByb3BzLG51bGwsZS5tb2RlLHIpKS5yZWY9JG8oZSx0LG4pLHIucmV0dXJuPWUscil9ZnVuY3Rpb24gcyhlLHQsbixyKXtyZXR1cm4gbnVsbD09PXR8fDQhPT10LnRhZ3x8dC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyE9PW4uY29udGFpbmVySW5mb3x8dC5zdGF0ZU5vZGUuaW1wbGVtZW50YXRpb24hPT1uLmltcGxlbWVudGF0aW9uPygodD1RcihuLGUubW9kZSxyKSkucmV0dXJuPWUsdCk6KCh0PW8odCxuLmNoaWxkcmVufHxbXSkpLnJldHVybj1lLHQpfWZ1bmN0aW9uIGYoZSx0LG4scixpKXtyZXR1cm4gbnVsbD09PXR8fDchPT10LnRhZz8oKHQ9VnIobixlLm1vZGUscixpKSkucmV0dXJuPWUsdCk6KCh0PW8odCxuKSkucmV0dXJuPWUsdCl9ZnVuY3Rpb24gcChlLHQsbil7aWYoInN0cmluZyI9PXR5cGVvZiB0fHwibnVtYmVyIj09dHlwZW9mIHQpcmV0dXJuKHQ9S3IoIiIrdCxlLm1vZGUsbikpLnJldHVybj1lLHQ7aWYoIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT09dCl7c3dpdGNoKHQuJCR0eXBlb2Ype2Nhc2UgS2U6cmV0dXJuKG49SHIodC50eXBlLHQua2V5LHQucHJvcHMsbnVsbCxlLm1vZGUsbikpLnJlZj0kbyhlLG51bGwsdCksbi5yZXR1cm49ZSxuO2Nhc2UgUWU6cmV0dXJuKHQ9UXIodCxlLm1vZGUsbikpLnJldHVybj1lLHR9aWYoV28odCl8fGN0KHQpKXJldHVybih0PVZyKHQsZS5tb2RlLG4sbnVsbCkpLnJldHVybj1lLHQ7R28oZSx0KX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBkKGUsdCxuLHIpe3ZhciBvPW51bGwhPT10P3Qua2V5Om51bGw7aWYoInN0cmluZyI9PXR5cGVvZiBufHwibnVtYmVyIj09dHlwZW9mIG4pcmV0dXJuIG51bGwhPT1vP251bGw6YyhlLHQsIiIrbixyKTtpZigib2JqZWN0Ij09dHlwZW9mIG4mJm51bGwhPT1uKXtzd2l0Y2gobi4kJHR5cGVvZil7Y2FzZSBLZTpyZXR1cm4gbi5rZXk9PT1vP24udHlwZT09PVhlP2YoZSx0LG4ucHJvcHMuY2hpbGRyZW4scixvKTpsKGUsdCxuLHIpOm51bGw7Y2FzZSBRZTpyZXR1cm4gbi5rZXk9PT1vP3MoZSx0LG4scik6bnVsbH1pZihXbyhuKXx8Y3QobikpcmV0dXJuIG51bGwhPT1vP251bGw6ZihlLHQsbixyLG51bGwpO0dvKGUsbil9cmV0dXJuIG51bGx9ZnVuY3Rpb24gaChlLHQsbixyLG8pe2lmKCJzdHJpbmciPT10eXBlb2Ygcnx8Im51bWJlciI9PXR5cGVvZiByKXJldHVybiBjKHQsZT1lLmdldChuKXx8bnVsbCwiIityLG8pO2lmKCJvYmplY3QiPT10eXBlb2YgciYmbnVsbCE9PXIpe3N3aXRjaChyLiQkdHlwZW9mKXtjYXNlIEtlOnJldHVybiBlPWUuZ2V0KG51bGw9PT1yLmtleT9uOnIua2V5KXx8bnVsbCxyLnR5cGU9PT1YZT9mKHQsZSxyLnByb3BzLmNoaWxkcmVuLG8sci5rZXkpOmwodCxlLHIsbyk7Y2FzZSBRZTpyZXR1cm4gcyh0LGU9ZS5nZXQobnVsbD09PXIua2V5P246ci5rZXkpfHxudWxsLHIsbyl9aWYoV28ocil8fGN0KHIpKXJldHVybiBmKHQsZT1lLmdldChuKXx8bnVsbCxyLG8sbnVsbCk7R28odCxyKX1yZXR1cm4gbnVsbH1mdW5jdGlvbiB5KG8sYSx1LGMpe2Zvcih2YXIgbD1udWxsLHM9bnVsbCxmPWEseT1hPTAsXz1udWxsO251bGwhPT1mJiZ5PHUubGVuZ3RoO3krKyl7Zi5pbmRleD55PyhfPWYsZj1udWxsKTpfPWYuc2libGluZzt2YXIgdj1kKG8sZix1W3ldLGMpO2lmKG51bGw9PT12KXtudWxsPT09ZiYmKGY9Xyk7YnJlYWt9ZSYmZiYmbnVsbD09PXYuYWx0ZXJuYXRlJiZ0KG8sZiksYT1pKHYsYSx5KSxudWxsPT09cz9sPXY6cy5zaWJsaW5nPXYscz12LGY9X31pZih5PT09dS5sZW5ndGgpcmV0dXJuIG4obyxmKSxsO2lmKG51bGw9PT1mKXtmb3IoO3k8dS5sZW5ndGg7eSsrKShmPXAobyx1W3ldLGMpKSYmKGE9aShmLGEseSksbnVsbD09PXM/bD1mOnMuc2libGluZz1mLHM9Zik7cmV0dXJuIGx9Zm9yKGY9cihvLGYpO3k8dS5sZW5ndGg7eSsrKShfPWgoZixvLHksdVt5XSxjKSkmJihlJiZudWxsIT09Xy5hbHRlcm5hdGUmJmYuZGVsZXRlKG51bGw9PT1fLmtleT95Ol8ua2V5KSxhPWkoXyxhLHkpLG51bGw9PT1zP2w9XzpzLnNpYmxpbmc9XyxzPV8pO3JldHVybiBlJiZmLmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIHQobyxlKX0pLGx9ZnVuY3Rpb24gXyhvLHUsYyxsKXt2YXIgcz1jdChjKTsiZnVuY3Rpb24iIT10eXBlb2YgcyYmYSgiMTUwIiksbnVsbD09KGM9cy5jYWxsKGMpKSYmYSgiMTUxIik7Zm9yKHZhciBmPXM9bnVsbCx5PXUsXz11PTAsdj1udWxsLG09Yy5uZXh0KCk7bnVsbCE9PXkmJiFtLmRvbmU7XysrLG09Yy5uZXh0KCkpe3kuaW5kZXg+Xz8odj15LHk9bnVsbCk6dj15LnNpYmxpbmc7dmFyIGc9ZChvLHksbS52YWx1ZSxsKTtpZihudWxsPT09Zyl7eXx8KHk9dik7YnJlYWt9ZSYmeSYmbnVsbD09PWcuYWx0ZXJuYXRlJiZ0KG8seSksdT1pKGcsdSxfKSxudWxsPT09Zj9zPWc6Zi5zaWJsaW5nPWcsZj1nLHk9dn1pZihtLmRvbmUpcmV0dXJuIG4obyx5KSxzO2lmKG51bGw9PT15KXtmb3IoOyFtLmRvbmU7XysrLG09Yy5uZXh0KCkpbnVsbCE9PShtPXAobyxtLnZhbHVlLGwpKSYmKHU9aShtLHUsXyksbnVsbD09PWY/cz1tOmYuc2libGluZz1tLGY9bSk7cmV0dXJuIHN9Zm9yKHk9cihvLHkpOyFtLmRvbmU7XysrLG09Yy5uZXh0KCkpbnVsbCE9PShtPWgoeSxvLF8sbS52YWx1ZSxsKSkmJihlJiZudWxsIT09bS5hbHRlcm5hdGUmJnkuZGVsZXRlKG51bGw9PT1tLmtleT9fOm0ua2V5KSx1PWkobSx1LF8pLG51bGw9PT1mP3M9bTpmLnNpYmxpbmc9bSxmPW0pO3JldHVybiBlJiZ5LmZvckVhY2goZnVuY3Rpb24oZSl7cmV0dXJuIHQobyxlKX0pLHN9cmV0dXJuIGZ1bmN0aW9uKGUscixpLGMpe3ZhciBsPSJvYmplY3QiPT10eXBlb2YgaSYmbnVsbCE9PWkmJmkudHlwZT09PVhlJiZudWxsPT09aS5rZXk7bCYmKGk9aS5wcm9wcy5jaGlsZHJlbik7dmFyIHM9Im9iamVjdCI9PXR5cGVvZiBpJiZudWxsIT09aTtpZihzKXN3aXRjaChpLiQkdHlwZW9mKXtjYXNlIEtlOmU6e2ZvcihzPWkua2V5LGw9cjtudWxsIT09bDspe2lmKGwua2V5PT09cyl7aWYoNz09PWwudGFnP2kudHlwZT09PVhlOmwuZWxlbWVudFR5cGU9PT1pLnR5cGUpe24oZSxsLnNpYmxpbmcpLChyPW8obCxpLnR5cGU9PT1YZT9pLnByb3BzLmNoaWxkcmVuOmkucHJvcHMpKS5yZWY9JG8oZSxsLGkpLHIucmV0dXJuPWUsZT1yO2JyZWFrIGV9bihlLGwpO2JyZWFrfXQoZSxsKSxsPWwuc2libGluZ31pLnR5cGU9PT1YZT8oKHI9VnIoaS5wcm9wcy5jaGlsZHJlbixlLm1vZGUsYyxpLmtleSkpLnJldHVybj1lLGU9cik6KChjPUhyKGkudHlwZSxpLmtleSxpLnByb3BzLG51bGwsZS5tb2RlLGMpKS5yZWY9JG8oZSxyLGkpLGMucmV0dXJuPWUsZT1jKX1yZXR1cm4gdShlKTtjYXNlIFFlOmU6e2ZvcihsPWkua2V5O251bGwhPT1yOyl7aWYoci5rZXk9PT1sKXtpZig0PT09ci50YWcmJnIuc3RhdGVOb2RlLmNvbnRhaW5lckluZm89PT1pLmNvbnRhaW5lckluZm8mJnIuc3RhdGVOb2RlLmltcGxlbWVudGF0aW9uPT09aS5pbXBsZW1lbnRhdGlvbil7bihlLHIuc2libGluZyksKHI9byhyLGkuY2hpbGRyZW58fFtdKSkucmV0dXJuPWUsZT1yO2JyZWFrIGV9bihlLHIpO2JyZWFrfXQoZSxyKSxyPXIuc2libGluZ30ocj1RcihpLGUubW9kZSxjKSkucmV0dXJuPWUsZT1yfXJldHVybiB1KGUpfWlmKCJzdHJpbmciPT10eXBlb2YgaXx8Im51bWJlciI9PXR5cGVvZiBpKXJldHVybiBpPSIiK2ksbnVsbCE9PXImJjY9PT1yLnRhZz8obihlLHIuc2libGluZyksKHI9byhyLGkpKS5yZXR1cm49ZSxlPXIpOihuKGUsciksKHI9S3IoaSxlLm1vZGUsYykpLnJldHVybj1lLGU9ciksdShlKTtpZihXbyhpKSlyZXR1cm4geShlLHIsaSxjKTtpZihjdChpKSlyZXR1cm4gXyhlLHIsaSxjKTtpZihzJiZHbyhlLGkpLHZvaWQgMD09PWkmJiFsKXN3aXRjaChlLnRhZyl7Y2FzZSAxOmNhc2UgMDphKCIxNTIiLChjPWUudHlwZSkuZGlzcGxheU5hbWV8fGMubmFtZXx8IkNvbXBvbmVudCIpfXJldHVybiBuKGUscil9fXZhciBxbz1CbyghMCksem89Qm8oITEpLEhvPW51bGwsVm89bnVsbCxZbz0hMTtmdW5jdGlvbiBLbyhlLHQpe3ZhciBuPUJyKDUsbnVsbCxudWxsLDApO24uZWxlbWVudFR5cGU9IkRFTEVURUQiLG4udHlwZT0iREVMRVRFRCIsbi5zdGF0ZU5vZGU9dCxuLnJldHVybj1lLG4uZWZmZWN0VGFnPTgsbnVsbCE9PWUubGFzdEVmZmVjdD8oZS5sYXN0RWZmZWN0Lm5leHRFZmZlY3Q9bixlLmxhc3RFZmZlY3Q9bik6ZS5maXJzdEVmZmVjdD1lLmxhc3RFZmZlY3Q9bn1mdW5jdGlvbiBRbyhlLHQpe3N3aXRjaChlLnRhZyl7Y2FzZSA1OnZhciBuPWUudHlwZTtyZXR1cm4gbnVsbCE9PSh0PTEhPT10Lm5vZGVUeXBlfHxuLnRvTG93ZXJDYXNlKCkhPT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk/bnVsbDp0KSYmKGUuc3RhdGVOb2RlPXQsITApO2Nhc2UgNjpyZXR1cm4gbnVsbCE9PSh0PSIiPT09ZS5wZW5kaW5nUHJvcHN8fDMhPT10Lm5vZGVUeXBlP251bGw6dCkmJihlLnN0YXRlTm9kZT10LCEwKTtkZWZhdWx0OnJldHVybiExfX1mdW5jdGlvbiBYbyhlKXtpZihZbyl7dmFyIHQ9Vm87aWYodCl7dmFyIG49dDtpZighUW8oZSx0KSl7aWYoISh0PXdyKG4pKXx8IVFvKGUsdCkpcmV0dXJuIGUuZWZmZWN0VGFnfD0yLFlvPSExLHZvaWQoSG89ZSk7S28oSG8sbil9SG89ZSxWbz1Fcih0KX1lbHNlIGUuZWZmZWN0VGFnfD0yLFlvPSExLEhvPWV9fWZ1bmN0aW9uIEpvKGUpe2ZvcihlPWUucmV0dXJuO251bGwhPT1lJiY1IT09ZS50YWcmJjMhPT1lLnRhZzspZT1lLnJldHVybjtIbz1lfWZ1bmN0aW9uIFpvKGUpe2lmKGUhPT1IbylyZXR1cm4hMTtpZighWW8pcmV0dXJuIEpvKGUpLFlvPSEwLCExO3ZhciB0PWUudHlwZTtpZig1IT09ZS50YWd8fCJoZWFkIiE9PXQmJiJib2R5IiE9PXQmJiFtcih0LGUubWVtb2l6ZWRQcm9wcykpZm9yKHQ9Vm87dDspS28oZSx0KSx0PXdyKHQpO3JldHVybiBKbyhlKSxWbz1Ibz93cihlLnN0YXRlTm9kZSk6bnVsbCwhMH1mdW5jdGlvbiBlaSgpe1ZvPUhvPW51bGwsWW89ITF9dmFyIHRpPUhlLlJlYWN0Q3VycmVudE93bmVyO2Z1bmN0aW9uIG5pKGUsdCxuLHIpe3QuY2hpbGQ9bnVsbD09PWU/em8odCxudWxsLG4scik6cW8odCxlLmNoaWxkLG4scil9ZnVuY3Rpb24gcmkoZSx0LG4scixvKXtuPW4ucmVuZGVyO3ZhciBpPXQucmVmO3JldHVybiBDci5jdXJyZW50fHx0Lm1lbW9pemVkUHJvcHMhPT1yfHxpIT09KG51bGwhPT1lP2UucmVmOm51bGwpPyhuaShlLHQscj1uKHIsaSksbyksdC5jaGlsZCk6ZGkoZSx0LG8pfWZ1bmN0aW9uIG9pKGUsdCxuLHIsbyxpKXtpZihudWxsPT09ZSl7dmFyIGE9bi50eXBlO3JldHVybiJmdW5jdGlvbiIhPXR5cGVvZiBhfHxxcihhKXx8dm9pZCAwIT09YS5kZWZhdWx0UHJvcHN8fG51bGwhPT1uLmNvbXBhcmU/KChlPUhyKG4udHlwZSxudWxsLHIsbnVsbCx0Lm1vZGUsaSkpLnJlZj10LnJlZixlLnJldHVybj10LHQuY2hpbGQ9ZSk6KHQudGFnPTE1LHQudHlwZT1hLGlpKGUsdCxhLHIsbyxpKSl9cmV0dXJuIGE9ZS5jaGlsZCwoMD09PW98fG8+aSkmJihvPWEubWVtb2l6ZWRQcm9wcywobj1udWxsIT09KG49bi5jb21wYXJlKT9uOm5uKShvLHIpJiZlLnJlZj09PXQucmVmKT9kaShlLHQsaSk6KChlPXpyKGEscikpLnJlZj10LnJlZixlLnJldHVybj10LHQuY2hpbGQ9ZSl9ZnVuY3Rpb24gaWkoZSx0LG4scixvLGkpe3JldHVybiBudWxsIT09ZSYmKDA9PT1vfHxvPmkpJiZubihlLm1lbW9pemVkUHJvcHMscikmJmUucmVmPT09dC5yZWY/ZGkoZSx0LGkpOnVpKGUsdCxuLHIsaSl9ZnVuY3Rpb24gYWkoZSx0KXt2YXIgbj10LnJlZjsobnVsbD09PWUmJm51bGwhPT1ufHxudWxsIT09ZSYmZS5yZWYhPT1uKSYmKHQuZWZmZWN0VGFnfD0xMjgpfWZ1bmN0aW9uIHVpKGUsdCxuLHIsbyl7dmFyIGk9QXIobik/a3I6UnIuY3VycmVudDtyZXR1cm4gaT1Ocih0LGkpLHdvKHQpLG49bihyLGkpLHQuZWZmZWN0VGFnfD0xLG5pKGUsdCxuLG8pLHQuY2hpbGR9ZnVuY3Rpb24gY2koZSx0LG4scixvKXtpZihBcihuKSl7dmFyIGk9ITA7TXIodCl9ZWxzZSBpPSExO2lmKHdvKHQpLG51bGw9PT10LnN0YXRlTm9kZSludWxsIT09ZSYmKGUuYWx0ZXJuYXRlPW51bGwsdC5hbHRlcm5hdGU9bnVsbCx0LmVmZmVjdFRhZ3w9MiksTW8odCxuLHIpLFVvKHQsbixyLG8pLHI9ITA7ZWxzZSBpZihudWxsPT09ZSl7dmFyIGE9dC5zdGF0ZU5vZGUsdT10Lm1lbW9pemVkUHJvcHM7YS5wcm9wcz11O3ZhciBjPWEuY29udGV4dCxsPW4uY29udGV4dFR5cGU7Im9iamVjdCI9PXR5cGVvZiBsJiZudWxsIT09bD9sPUFvLmN1cnJlbnREaXNwYXRjaGVyLnJlYWRDb250ZXh0KGwpOmw9TnIodCxsPUFyKG4pP2tyOlJyLmN1cnJlbnQpO3ZhciBzPW4uZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLGY9ImZ1bmN0aW9uIj09dHlwZW9mIHN8fCJmdW5jdGlvbiI9PXR5cGVvZiBhLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlO2Z8fCJmdW5jdGlvbiIhPXR5cGVvZiBhLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJiYiZnVuY3Rpb24iIT10eXBlb2YgYS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzfHwodSE9PXJ8fGMhPT1sKSYmRm8odCxhLHIsbCksdG89ITE7dmFyIHA9dC5tZW1vaXplZFN0YXRlO2M9YS5zdGF0ZT1wO3ZhciBkPXQudXBkYXRlUXVldWU7bnVsbCE9PWQmJihzbyh0LGQscixhLG8pLGM9dC5tZW1vaXplZFN0YXRlKSx1IT09cnx8cCE9PWN8fENyLmN1cnJlbnR8fHRvPygiZnVuY3Rpb24iPT10eXBlb2YgcyYmKERvKHQsbixzLHIpLGM9dC5tZW1vaXplZFN0YXRlKSwodT10b3x8TG8odCxuLHUscixwLGMsbCkpPyhmfHwiZnVuY3Rpb24iIT10eXBlb2YgYS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50JiYiZnVuY3Rpb24iIT10eXBlb2YgYS5jb21wb25lbnRXaWxsTW91bnR8fCgiZnVuY3Rpb24iPT10eXBlb2YgYS5jb21wb25lbnRXaWxsTW91bnQmJmEuY29tcG9uZW50V2lsbE1vdW50KCksImZ1bmN0aW9uIj09dHlwZW9mIGEuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCYmYS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCkpLCJmdW5jdGlvbiI9PXR5cGVvZiBhLmNvbXBvbmVudERpZE1vdW50JiYodC5lZmZlY3RUYWd8PTQpKTooImZ1bmN0aW9uIj09dHlwZW9mIGEuY29tcG9uZW50RGlkTW91bnQmJih0LmVmZmVjdFRhZ3w9NCksdC5tZW1vaXplZFByb3BzPXIsdC5tZW1vaXplZFN0YXRlPWMpLGEucHJvcHM9cixhLnN0YXRlPWMsYS5jb250ZXh0PWwscj11KTooImZ1bmN0aW9uIj09dHlwZW9mIGEuY29tcG9uZW50RGlkTW91bnQmJih0LmVmZmVjdFRhZ3w9NCkscj0hMSl9ZWxzZSBhPXQuc3RhdGVOb2RlLHU9dC5tZW1vaXplZFByb3BzLGEucHJvcHM9dSxjPWEuY29udGV4dCwib2JqZWN0Ij09dHlwZW9mKGw9bi5jb250ZXh0VHlwZSkmJm51bGwhPT1sP2w9QW8uY3VycmVudERpc3BhdGNoZXIucmVhZENvbnRleHQobCk6bD1Ocih0LGw9QXIobik/a3I6UnIuY3VycmVudCksKGY9ImZ1bmN0aW9uIj09dHlwZW9mKHM9bi5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMpfHwiZnVuY3Rpb24iPT10eXBlb2YgYS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSl8fCJmdW5jdGlvbiIhPXR5cGVvZiBhLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJiYiZnVuY3Rpb24iIT10eXBlb2YgYS5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzfHwodSE9PXJ8fGMhPT1sKSYmRm8odCxhLHIsbCksdG89ITEsYz10Lm1lbW9pemVkU3RhdGUscD1hLnN0YXRlPWMsbnVsbCE9PShkPXQudXBkYXRlUXVldWUpJiYoc28odCxkLHIsYSxvKSxwPXQubWVtb2l6ZWRTdGF0ZSksdSE9PXJ8fGMhPT1wfHxDci5jdXJyZW50fHx0bz8oImZ1bmN0aW9uIj09dHlwZW9mIHMmJihEbyh0LG4scyxyKSxwPXQubWVtb2l6ZWRTdGF0ZSksKHM9dG98fExvKHQsbix1LHIsYyxwLGwpKT8oZnx8ImZ1bmN0aW9uIiE9dHlwZW9mIGEuVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUmJiJmdW5jdGlvbiIhPXR5cGVvZiBhLmNvbXBvbmVudFdpbGxVcGRhdGV8fCgiZnVuY3Rpb24iPT10eXBlb2YgYS5jb21wb25lbnRXaWxsVXBkYXRlJiZhLmNvbXBvbmVudFdpbGxVcGRhdGUocixwLGwpLCJmdW5jdGlvbiI9PXR5cGVvZiBhLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlJiZhLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlKHIscCxsKSksImZ1bmN0aW9uIj09dHlwZW9mIGEuY29tcG9uZW50RGlkVXBkYXRlJiYodC5lZmZlY3RUYWd8PTQpLCJmdW5jdGlvbiI9PXR5cGVvZiBhLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlJiYodC5lZmZlY3RUYWd8PTI1NikpOigiZnVuY3Rpb24iIT10eXBlb2YgYS5jb21wb25lbnREaWRVcGRhdGV8fHU9PT1lLm1lbW9pemVkUHJvcHMmJmM9PT1lLm1lbW9pemVkU3RhdGV8fCh0LmVmZmVjdFRhZ3w9NCksImZ1bmN0aW9uIiE9dHlwZW9mIGEuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGV8fHU9PT1lLm1lbW9pemVkUHJvcHMmJmM9PT1lLm1lbW9pemVkU3RhdGV8fCh0LmVmZmVjdFRhZ3w9MjU2KSx0Lm1lbW9pemVkUHJvcHM9cix0Lm1lbW9pemVkU3RhdGU9cCksYS5wcm9wcz1yLGEuc3RhdGU9cCxhLmNvbnRleHQ9bCxyPXMpOigiZnVuY3Rpb24iIT10eXBlb2YgYS5jb21wb25lbnREaWRVcGRhdGV8fHU9PT1lLm1lbW9pemVkUHJvcHMmJmM9PT1lLm1lbW9pemVkU3RhdGV8fCh0LmVmZmVjdFRhZ3w9NCksImZ1bmN0aW9uIiE9dHlwZW9mIGEuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGV8fHU9PT1lLm1lbW9pemVkUHJvcHMmJmM9PT1lLm1lbW9pemVkU3RhdGV8fCh0LmVmZmVjdFRhZ3w9MjU2KSxyPSExKTtyZXR1cm4gbGkoZSx0LG4scixpLG8pfWZ1bmN0aW9uIGxpKGUsdCxuLHIsbyxpKXthaShlLHQpO3ZhciBhPTAhPSg2NCZ0LmVmZmVjdFRhZyk7aWYoIXImJiFhKXJldHVybiBvJiZGcih0LG4sITEpLGRpKGUsdCxpKTtyPXQuc3RhdGVOb2RlLHRpLmN1cnJlbnQ9dDt2YXIgdT1hJiYiZnVuY3Rpb24iIT10eXBlb2Ygbi5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3I/bnVsbDpyLnJlbmRlcigpO3JldHVybiB0LmVmZmVjdFRhZ3w9MSxudWxsIT09ZSYmYT8odC5jaGlsZD1xbyh0LGUuY2hpbGQsbnVsbCxpKSx0LmNoaWxkPXFvKHQsbnVsbCx1LGkpKTpuaShlLHQsdSxpKSx0Lm1lbW9pemVkU3RhdGU9ci5zdGF0ZSxvJiZGcih0LG4sITApLHQuY2hpbGR9ZnVuY3Rpb24gc2koZSl7dmFyIHQ9ZS5zdGF0ZU5vZGU7dC5wZW5kaW5nQ29udGV4dD9qcigwLHQucGVuZGluZ0NvbnRleHQsdC5wZW5kaW5nQ29udGV4dCE9PXQuY29udGV4dCk6dC5jb250ZXh0JiZqcigwLHQuY29udGV4dCwhMSksUm8oZSx0LmNvbnRhaW5lckluZm8pfWZ1bmN0aW9uIGZpKGUsdCl7aWYoZSYmZS5kZWZhdWx0UHJvcHMpZm9yKHZhciBuIGluIHQ9byh7fSx0KSxlPWUuZGVmYXVsdFByb3BzKXZvaWQgMD09PXRbbl0mJih0W25dPWVbbl0pO3JldHVybiB0fWZ1bmN0aW9uIHBpKGUsdCxuKXt2YXIgcj10Lm1vZGUsbz10LnBlbmRpbmdQcm9wcyxpPXQubWVtb2l6ZWRTdGF0ZTtudWxsIT09aSYmKGkuYWxyZWFkeUNhcHR1cmVkP251bGwhPT1lJiZpPT09ZS5tZW1vaXplZFN0YXRlP2k9e2FscmVhZHlDYXB0dXJlZDohMCxkaWRUaW1lb3V0OiEwLHRpbWVkT3V0QXQ6aS50aW1lZE91dEF0fTooaS5hbHJlYWR5Q2FwdHVyZWQ9ITAsaS5kaWRUaW1lb3V0PSEwKTppPW51bGwpO3ZhciBhPW51bGwhPT1pJiZpLmRpZFRpbWVvdXQ7aWYobnVsbD09PWUpYT8oYT1vLmZhbGxiYWNrLG89VnIobnVsbCxyLDAsbnVsbCkscj1WcihhLHIsbixudWxsKSxvLnNpYmxpbmc9ciwobj1vKS5yZXR1cm49ci5yZXR1cm49dCk6bj1yPXpvKHQsbnVsbCxvLmNoaWxkcmVuLG4pO2Vsc2V7dmFyIHU9ZS5tZW1vaXplZFN0YXRlO251bGwhPT11JiZ1LmRpZFRpbWVvdXQ/KGU9KHI9ZS5jaGlsZCkuc2libGluZyxhPyhuPW8uZmFsbGJhY2ssKHI9enIocixyLnBlbmRpbmdQcm9wcykpLmVmZmVjdFRhZ3w9Miwobz1yLnNpYmxpbmc9enIoZSxuLGUuZXhwaXJhdGlvblRpbWUpKS5lZmZlY3RUYWd8PTIsbj1yLHIuY2hpbGRFeHBpcmF0aW9uVGltZT0wLHI9byxuLnJldHVybj1yLnJldHVybj10KTooYT1lLmNoaWxkLHI9cW8odCxyLmNoaWxkLG8uY2hpbGRyZW4sbikscW8odCxhLG51bGwsbiksbj1yKSk6KGU9ZS5jaGlsZCxhPyhhPW8uZmFsbGJhY2ssKG89VnIobnVsbCxyLDAsbnVsbCkpLmVmZmVjdFRhZ3w9MixvLmNoaWxkPWUsZS5yZXR1cm49bywocj1vLnNpYmxpbmc9VnIoYSxyLG4sbnVsbCkpLmVmZmVjdFRhZ3w9MixuPW8sby5jaGlsZEV4cGlyYXRpb25UaW1lPTAsbi5yZXR1cm49ci5yZXR1cm49dCk6cj1uPXFvKHQsZSxvLmNoaWxkcmVuLG4pKX1yZXR1cm4gdC5tZW1vaXplZFN0YXRlPWksdC5jaGlsZD1uLHJ9ZnVuY3Rpb24gZGkoZSx0LG4pe251bGwhPT1lJiYodC5maXJzdENvbnRleHREZXBlbmRlbmN5PWUuZmlyc3RDb250ZXh0RGVwZW5kZW5jeSk7dmFyIHI9dC5jaGlsZEV4cGlyYXRpb25UaW1lO2lmKDA9PT1yfHxyPm4pcmV0dXJuIG51bGw7aWYobnVsbCE9PWUmJnQuY2hpbGQhPT1lLmNoaWxkJiZhKCIxNTMiKSxudWxsIT09dC5jaGlsZCl7Zm9yKG49enIoZT10LmNoaWxkLGUucGVuZGluZ1Byb3BzLGUuZXhwaXJhdGlvblRpbWUpLHQuY2hpbGQ9bixuLnJldHVybj10O251bGwhPT1lLnNpYmxpbmc7KWU9ZS5zaWJsaW5nLChuPW4uc2libGluZz16cihlLGUucGVuZGluZ1Byb3BzLGUuZXhwaXJhdGlvblRpbWUpKS5yZXR1cm49dDtuLnNpYmxpbmc9bnVsbH1yZXR1cm4gdC5jaGlsZH1mdW5jdGlvbiBoaShlLHQsbil7dmFyIHI9dC5leHBpcmF0aW9uVGltZTtpZihudWxsIT09ZSYmZS5tZW1vaXplZFByb3BzPT09dC5wZW5kaW5nUHJvcHMmJiFDci5jdXJyZW50JiYoMD09PXJ8fHI+bikpe3N3aXRjaCh0LnRhZyl7Y2FzZSAzOnNpKHQpLGVpKCk7YnJlYWs7Y2FzZSA1OmtvKHQpO2JyZWFrO2Nhc2UgMTpBcih0LnR5cGUpJiZNcih0KTticmVhaztjYXNlIDQ6Um8odCx0LnN0YXRlTm9kZS5jb250YWluZXJJbmZvKTticmVhaztjYXNlIDEwOmdvKHQsdC5tZW1vaXplZFByb3BzLnZhbHVlKTticmVhaztjYXNlIDEzOmlmKG51bGwhPT0ocj10Lm1lbW9pemVkU3RhdGUpJiZyLmRpZFRpbWVvdXQpcmV0dXJuIDAhPT0ocj10LmNoaWxkLmNoaWxkRXhwaXJhdGlvblRpbWUpJiZyPD1uP3BpKGUsdCxuKTpudWxsIT09KHQ9ZGkoZSx0LG4pKT90LnNpYmxpbmc6bnVsbH1yZXR1cm4gZGkoZSx0LG4pfXN3aXRjaCh0LmV4cGlyYXRpb25UaW1lPTAsdC50YWcpe2Nhc2UgMjpyPXQuZWxlbWVudFR5cGUsbnVsbCE9PWUmJihlLmFsdGVybmF0ZT1udWxsLHQuYWx0ZXJuYXRlPW51bGwsdC5lZmZlY3RUYWd8PTIpLGU9dC5wZW5kaW5nUHJvcHM7dmFyIG89TnIodCxSci5jdXJyZW50KTtpZih3byh0KSxvPXIoZSxvKSx0LmVmZmVjdFRhZ3w9MSwib2JqZWN0Ij09dHlwZW9mIG8mJm51bGwhPT1vJiYiZnVuY3Rpb24iPT10eXBlb2Ygby5yZW5kZXImJnZvaWQgMD09PW8uJCR0eXBlb2Ype2lmKHQudGFnPTEsQXIocikpe3ZhciBpPSEwO01yKHQpfWVsc2UgaT0hMTt0Lm1lbW9pemVkU3RhdGU9bnVsbCE9PW8uc3RhdGUmJnZvaWQgMCE9PW8uc3RhdGU/by5zdGF0ZTpudWxsO3ZhciB1PXIuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzOyJmdW5jdGlvbiI9PXR5cGVvZiB1JiZEbyh0LHIsdSxlKSxvLnVwZGF0ZXI9am8sdC5zdGF0ZU5vZGU9byxvLl9yZWFjdEludGVybmFsRmliZXI9dCxVbyh0LHIsZSxuKSx0PWxpKG51bGwsdCxyLCEwLGksbil9ZWxzZSB0LnRhZz0wLG5pKG51bGwsdCxvLG4pLHQ9dC5jaGlsZDtyZXR1cm4gdDtjYXNlIDE2OnN3aXRjaChvPXQuZWxlbWVudFR5cGUsbnVsbCE9PWUmJihlLmFsdGVybmF0ZT1udWxsLHQuYWx0ZXJuYXRlPW51bGwsdC5lZmZlY3RUYWd8PTIpLGk9dC5wZW5kaW5nUHJvcHMsZT1mdW5jdGlvbihlKXt2YXIgdD1lLl9yZXN1bHQ7c3dpdGNoKGUuX3N0YXR1cyl7Y2FzZSAxOnJldHVybiB0O2Nhc2UgMjpjYXNlIDA6dGhyb3cgdDtkZWZhdWx0OnRocm93IGUuX3N0YXR1cz0wLCh0PSh0PWUuX2N0b3IpKCkpLnRoZW4oZnVuY3Rpb24odCl7MD09PWUuX3N0YXR1cyYmKHQ9dC5kZWZhdWx0LGUuX3N0YXR1cz0xLGUuX3Jlc3VsdD10KX0sZnVuY3Rpb24odCl7MD09PWUuX3N0YXR1cyYmKGUuX3N0YXR1cz0yLGUuX3Jlc3VsdD10KX0pLGUuX3Jlc3VsdD10LHR9fShvKSx0LnR5cGU9ZSxvPXQudGFnPWZ1bmN0aW9uKGUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlKXJldHVybiBxcihlKT8xOjA7aWYobnVsbCE9ZSl7aWYoKGU9ZS4kJHR5cGVvZik9PT1ydClyZXR1cm4gMTE7aWYoZT09PWl0KXJldHVybiAxNH1yZXR1cm4gMn0oZSksaT1maShlLGkpLHU9dm9pZCAwLG8pe2Nhc2UgMDp1PXVpKG51bGwsdCxlLGksbik7YnJlYWs7Y2FzZSAxOnU9Y2kobnVsbCx0LGUsaSxuKTticmVhaztjYXNlIDExOnU9cmkobnVsbCx0LGUsaSxuKTticmVhaztjYXNlIDE0OnU9b2kobnVsbCx0LGUsZmkoZS50eXBlLGkpLHIsbik7YnJlYWs7ZGVmYXVsdDphKCIyODMiLGUpfXJldHVybiB1O2Nhc2UgMDpyZXR1cm4gcj10LnR5cGUsbz10LnBlbmRpbmdQcm9wcyx1aShlLHQscixvPXQuZWxlbWVudFR5cGU9PT1yP286ZmkocixvKSxuKTtjYXNlIDE6cmV0dXJuIHI9dC50eXBlLG89dC5wZW5kaW5nUHJvcHMsY2koZSx0LHIsbz10LmVsZW1lbnRUeXBlPT09cj9vOmZpKHIsbyksbik7Y2FzZSAzOnJldHVybiBzaSh0KSxudWxsPT09KHI9dC51cGRhdGVRdWV1ZSkmJmEoIjI4MiIpLG89bnVsbCE9PShvPXQubWVtb2l6ZWRTdGF0ZSk/by5lbGVtZW50Om51bGwsc28odCxyLHQucGVuZGluZ1Byb3BzLG51bGwsbiksKHI9dC5tZW1vaXplZFN0YXRlLmVsZW1lbnQpPT09bz8oZWkoKSx0PWRpKGUsdCxuKSk6KG89dC5zdGF0ZU5vZGUsKG89KG51bGw9PT1lfHxudWxsPT09ZS5jaGlsZCkmJm8uaHlkcmF0ZSkmJihWbz1Fcih0LnN0YXRlTm9kZS5jb250YWluZXJJbmZvKSxIbz10LG89WW89ITApLG8/KHQuZWZmZWN0VGFnfD0yLHQuY2hpbGQ9em8odCxudWxsLHIsbikpOihuaShlLHQscixuKSxlaSgpKSx0PXQuY2hpbGQpLHQ7Y2FzZSA1OnJldHVybiBrbyh0KSxudWxsPT09ZSYmWG8odCkscj10LnR5cGUsbz10LnBlbmRpbmdQcm9wcyxpPW51bGwhPT1lP2UubWVtb2l6ZWRQcm9wczpudWxsLHU9by5jaGlsZHJlbixtcihyLG8pP3U9bnVsbDpudWxsIT09aSYmbXIocixpKSYmKHQuZWZmZWN0VGFnfD0xNiksYWkoZSx0KSwxMDczNzQxODIzIT09biYmMSZ0Lm1vZGUmJm8uaGlkZGVuPyh0LmV4cGlyYXRpb25UaW1lPTEwNzM3NDE4MjMsdD1udWxsKToobmkoZSx0LHUsbiksdD10LmNoaWxkKSx0O2Nhc2UgNjpyZXR1cm4gbnVsbD09PWUmJlhvKHQpLG51bGw7Y2FzZSAxMzpyZXR1cm4gcGkoZSx0LG4pO2Nhc2UgNDpyZXR1cm4gUm8odCx0LnN0YXRlTm9kZS5jb250YWluZXJJbmZvKSxyPXQucGVuZGluZ1Byb3BzLG51bGw9PT1lP3QuY2hpbGQ9cW8odCxudWxsLHIsbik6bmkoZSx0LHIsbiksdC5jaGlsZDtjYXNlIDExOnJldHVybiByPXQudHlwZSxvPXQucGVuZGluZ1Byb3BzLHJpKGUsdCxyLG89dC5lbGVtZW50VHlwZT09PXI/bzpmaShyLG8pLG4pO2Nhc2UgNzpyZXR1cm4gbmkoZSx0LHQucGVuZGluZ1Byb3BzLG4pLHQuY2hpbGQ7Y2FzZSA4OmNhc2UgMTI6cmV0dXJuIG5pKGUsdCx0LnBlbmRpbmdQcm9wcy5jaGlsZHJlbixuKSx0LmNoaWxkO2Nhc2UgMTA6ZTp7aWYocj10LnR5cGUuX2NvbnRleHQsbz10LnBlbmRpbmdQcm9wcyx1PXQubWVtb2l6ZWRQcm9wcyxnbyh0LGk9by52YWx1ZSksbnVsbCE9PXUpe3ZhciBjPXUudmFsdWU7aWYoMD09PShpPWM9PT1pJiYoMCE9PWN8fDEvYz09MS9pKXx8YyE9YyYmaSE9aT8wOjB8KCJmdW5jdGlvbiI9PXR5cGVvZiByLl9jYWxjdWxhdGVDaGFuZ2VkQml0cz9yLl9jYWxjdWxhdGVDaGFuZ2VkQml0cyhjLGkpOjEwNzM3NDE4MjMpKSl7aWYodS5jaGlsZHJlbj09PW8uY2hpbGRyZW4mJiFDci5jdXJyZW50KXt0PWRpKGUsdCxuKTticmVhayBlfX1lbHNlIGZvcihudWxsIT09KHU9dC5jaGlsZCkmJih1LnJldHVybj10KTtudWxsIT09dTspe2lmKG51bGwhPT0oYz11LmZpcnN0Q29udGV4dERlcGVuZGVuY3kpKWRve2lmKGMuY29udGV4dD09PXImJjAhPShjLm9ic2VydmVkQml0cyZpKSl7aWYoMT09PXUudGFnKXt2YXIgbD1vbyhuKTtsLnRhZz0yLGFvKHUsbCl9KDA9PT11LmV4cGlyYXRpb25UaW1lfHx1LmV4cGlyYXRpb25UaW1lPm4pJiYodS5leHBpcmF0aW9uVGltZT1uKSxudWxsIT09KGw9dS5hbHRlcm5hdGUpJiYoMD09PWwuZXhwaXJhdGlvblRpbWV8fGwuZXhwaXJhdGlvblRpbWU+bikmJihsLmV4cGlyYXRpb25UaW1lPW4pO2Zvcih2YXIgcz11LnJldHVybjtudWxsIT09czspe2lmKGw9cy5hbHRlcm5hdGUsMD09PXMuY2hpbGRFeHBpcmF0aW9uVGltZXx8cy5jaGlsZEV4cGlyYXRpb25UaW1lPm4pcy5jaGlsZEV4cGlyYXRpb25UaW1lPW4sbnVsbCE9PWwmJigwPT09bC5jaGlsZEV4cGlyYXRpb25UaW1lfHxsLmNoaWxkRXhwaXJhdGlvblRpbWU+bikmJihsLmNoaWxkRXhwaXJhdGlvblRpbWU9bik7ZWxzZXtpZihudWxsPT09bHx8ISgwPT09bC5jaGlsZEV4cGlyYXRpb25UaW1lfHxsLmNoaWxkRXhwaXJhdGlvblRpbWU+bikpYnJlYWs7bC5jaGlsZEV4cGlyYXRpb25UaW1lPW59cz1zLnJldHVybn19bD11LmNoaWxkLGM9Yy5uZXh0fXdoaWxlKG51bGwhPT1jKTtlbHNlIGw9MTA9PT11LnRhZyYmdS50eXBlPT09dC50eXBlP251bGw6dS5jaGlsZDtpZihudWxsIT09bClsLnJldHVybj11O2Vsc2UgZm9yKGw9dTtudWxsIT09bDspe2lmKGw9PT10KXtsPW51bGw7YnJlYWt9aWYobnVsbCE9PSh1PWwuc2libGluZykpe3UucmV0dXJuPWwucmV0dXJuLGw9dTticmVha31sPWwucmV0dXJufXU9bH19bmkoZSx0LG8uY2hpbGRyZW4sbiksdD10LmNoaWxkfXJldHVybiB0O2Nhc2UgOTpyZXR1cm4gbz10LnR5cGUscj0oaT10LnBlbmRpbmdQcm9wcykuY2hpbGRyZW4sd28odCkscj1yKG89RW8obyxpLnVuc3RhYmxlX29ic2VydmVkQml0cykpLHQuZWZmZWN0VGFnfD0xLG5pKGUsdCxyLG4pLHQuY2hpbGQ7Y2FzZSAxNDpyZXR1cm4gb2koZSx0LG89dC50eXBlLGk9Zmkoby50eXBlLHQucGVuZGluZ1Byb3BzKSxyLG4pO2Nhc2UgMTU6cmV0dXJuIGlpKGUsdCx0LnR5cGUsdC5wZW5kaW5nUHJvcHMscixuKTtjYXNlIDE3OnJldHVybiByPXQudHlwZSxvPXQucGVuZGluZ1Byb3BzLG89dC5lbGVtZW50VHlwZT09PXI/bzpmaShyLG8pLG51bGwhPT1lJiYoZS5hbHRlcm5hdGU9bnVsbCx0LmFsdGVybmF0ZT1udWxsLHQuZWZmZWN0VGFnfD0yKSx0LnRhZz0xLEFyKHIpPyhlPSEwLE1yKHQpKTplPSExLHdvKHQpLE1vKHQscixvKSxVbyh0LHIsbyxuKSxsaShudWxsLHQsciwhMCxlLG4pO2RlZmF1bHQ6YSgiMTU2Iil9fWZ1bmN0aW9uIHlpKGUpe2UuZWZmZWN0VGFnfD00fXZhciBfaT12b2lkIDAsdmk9dm9pZCAwLG1pPXZvaWQgMCxnaT12b2lkIDA7ZnVuY3Rpb24gYmkoZSx0KXt2YXIgbj10LnNvdXJjZSxyPXQuc3RhY2s7bnVsbD09PXImJm51bGwhPT1uJiYocj1zdChuKSksbnVsbCE9PW4mJmx0KG4udHlwZSksdD10LnZhbHVlLG51bGwhPT1lJiYxPT09ZS50YWcmJmx0KGUudHlwZSk7dHJ5e2NvbnNvbGUuZXJyb3IodCl9Y2F0Y2goZSl7c2V0VGltZW91dChmdW5jdGlvbigpe3Rocm93IGV9KX19ZnVuY3Rpb24gd2koZSl7dmFyIHQ9ZS5yZWY7aWYobnVsbCE9PXQpaWYoImZ1bmN0aW9uIj09dHlwZW9mIHQpdHJ5e3QobnVsbCl9Y2F0Y2godCl7VmkoZSx0KX1lbHNlIHQuY3VycmVudD1udWxsfWZ1bmN0aW9uIEVpKGUpe3N3aXRjaCgiZnVuY3Rpb24iPT10eXBlb2YgV3ImJldyKGUpLGUudGFnKXtjYXNlIDE6d2koZSk7dmFyIHQ9ZS5zdGF0ZU5vZGU7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHQuY29tcG9uZW50V2lsbFVubW91bnQpdHJ5e3QucHJvcHM9ZS5tZW1vaXplZFByb3BzLHQuc3RhdGU9ZS5tZW1vaXplZFN0YXRlLHQuY29tcG9uZW50V2lsbFVubW91bnQoKX1jYXRjaCh0KXtWaShlLHQpfWJyZWFrO2Nhc2UgNTp3aShlKTticmVhaztjYXNlIDQ6U2koZSl9fWZ1bmN0aW9uIFRpKGUpe3JldHVybiA1PT09ZS50YWd8fDM9PT1lLnRhZ3x8ND09PWUudGFnfWZ1bmN0aW9uIE9pKGUpe2U6e2Zvcih2YXIgdD1lLnJldHVybjtudWxsIT09dDspe2lmKFRpKHQpKXt2YXIgbj10O2JyZWFrIGV9dD10LnJldHVybn1hKCIxNjAiKSxuPXZvaWQgMH12YXIgcj10PXZvaWQgMDtzd2l0Y2gobi50YWcpe2Nhc2UgNTp0PW4uc3RhdGVOb2RlLHI9ITE7YnJlYWs7Y2FzZSAzOmNhc2UgNDp0PW4uc3RhdGVOb2RlLmNvbnRhaW5lckluZm8scj0hMDticmVhaztkZWZhdWx0OmEoIjE2MSIpfTE2Jm4uZWZmZWN0VGFnJiYoYXIodCwiIiksbi5lZmZlY3RUYWcmPS0xNyk7ZTp0OmZvcihuPWU7Oyl7Zm9yKDtudWxsPT09bi5zaWJsaW5nOyl7aWYobnVsbD09PW4ucmV0dXJufHxUaShuLnJldHVybikpe249bnVsbDticmVhayBlfW49bi5yZXR1cm59Zm9yKG4uc2libGluZy5yZXR1cm49bi5yZXR1cm4sbj1uLnNpYmxpbmc7NSE9PW4udGFnJiY2IT09bi50YWc7KXtpZigyJm4uZWZmZWN0VGFnKWNvbnRpbnVlIHQ7aWYobnVsbD09PW4uY2hpbGR8fDQ9PT1uLnRhZyljb250aW51ZSB0O24uY2hpbGQucmV0dXJuPW4sbj1uLmNoaWxkfWlmKCEoMiZuLmVmZmVjdFRhZykpe249bi5zdGF0ZU5vZGU7YnJlYWsgZX19Zm9yKHZhciBvPWU7Oyl7aWYoNT09PW8udGFnfHw2PT09by50YWcpaWYobilpZihyKXt2YXIgaT10LHU9by5zdGF0ZU5vZGUsYz1uOzg9PT1pLm5vZGVUeXBlP2kucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodSxjKTppLmluc2VydEJlZm9yZSh1LGMpfWVsc2UgdC5pbnNlcnRCZWZvcmUoby5zdGF0ZU5vZGUsbik7ZWxzZSByPyh1PXQsYz1vLnN0YXRlTm9kZSw4PT09dS5ub2RlVHlwZT8oaT11LnBhcmVudE5vZGUpLmluc2VydEJlZm9yZShjLHUpOihpPXUpLmFwcGVuZENoaWxkKGMpLG51bGwhPSh1PXUuX3JlYWN0Um9vdENvbnRhaW5lcil8fG51bGwhPT1pLm9uY2xpY2t8fChpLm9uY2xpY2s9aHIpKTp0LmFwcGVuZENoaWxkKG8uc3RhdGVOb2RlKTtlbHNlIGlmKDQhPT1vLnRhZyYmbnVsbCE9PW8uY2hpbGQpe28uY2hpbGQucmV0dXJuPW8sbz1vLmNoaWxkO2NvbnRpbnVlfWlmKG89PT1lKWJyZWFrO2Zvcig7bnVsbD09PW8uc2libGluZzspe2lmKG51bGw9PT1vLnJldHVybnx8by5yZXR1cm49PT1lKXJldHVybjtvPW8ucmV0dXJufW8uc2libGluZy5yZXR1cm49by5yZXR1cm4sbz1vLnNpYmxpbmd9fWZ1bmN0aW9uIFNpKGUpe2Zvcih2YXIgdD1lLG49ITEscj12b2lkIDAsbz12b2lkIDA7Oyl7aWYoIW4pe249dC5yZXR1cm47ZTpmb3IoOzspe3N3aXRjaChudWxsPT09biYmYSgiMTYwIiksbi50YWcpe2Nhc2UgNTpyPW4uc3RhdGVOb2RlLG89ITE7YnJlYWsgZTtjYXNlIDM6Y2FzZSA0OnI9bi5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyxvPSEwO2JyZWFrIGV9bj1uLnJldHVybn1uPSEwfWlmKDU9PT10LnRhZ3x8Nj09PXQudGFnKXtlOmZvcih2YXIgaT10LHU9aTs7KWlmKEVpKHUpLG51bGwhPT11LmNoaWxkJiY0IT09dS50YWcpdS5jaGlsZC5yZXR1cm49dSx1PXUuY2hpbGQ7ZWxzZXtpZih1PT09aSlicmVhaztmb3IoO251bGw9PT11LnNpYmxpbmc7KXtpZihudWxsPT09dS5yZXR1cm58fHUucmV0dXJuPT09aSlicmVhayBlO3U9dS5yZXR1cm59dS5zaWJsaW5nLnJldHVybj11LnJldHVybix1PXUuc2libGluZ31vPyhpPXIsdT10LnN0YXRlTm9kZSw4PT09aS5ub2RlVHlwZT9pLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodSk6aS5yZW1vdmVDaGlsZCh1KSk6ci5yZW1vdmVDaGlsZCh0LnN0YXRlTm9kZSl9ZWxzZSBpZig0PT09dC50YWc/KHI9dC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyxvPSEwKTpFaSh0KSxudWxsIT09dC5jaGlsZCl7dC5jaGlsZC5yZXR1cm49dCx0PXQuY2hpbGQ7Y29udGludWV9aWYodD09PWUpYnJlYWs7Zm9yKDtudWxsPT09dC5zaWJsaW5nOyl7aWYobnVsbD09PXQucmV0dXJufHx0LnJldHVybj09PWUpcmV0dXJuOzQ9PT0odD10LnJldHVybikudGFnJiYobj0hMSl9dC5zaWJsaW5nLnJldHVybj10LnJldHVybix0PXQuc2libGluZ319ZnVuY3Rpb24geGkoZSx0KXtzd2l0Y2godC50YWcpe2Nhc2UgMTpicmVhaztjYXNlIDU6dmFyIG49dC5zdGF0ZU5vZGU7aWYobnVsbCE9bil7dmFyIHI9dC5tZW1vaXplZFByb3BzLG89bnVsbCE9PWU/ZS5tZW1vaXplZFByb3BzOnI7ZT10LnR5cGU7dmFyIGk9dC51cGRhdGVRdWV1ZTtpZih0LnVwZGF0ZVF1ZXVlPW51bGwsbnVsbCE9PWkpe2ZvcihuW0xdPXIsImlucHV0Ij09PWUmJiJyYWRpbyI9PT1yLnR5cGUmJm51bGwhPXIubmFtZSYmVHQobixyKSxwcihlLG8pLHQ9cHIoZSxyKSxvPTA7bzxpLmxlbmd0aDtvKz0yKXt2YXIgdT1pW29dLGM9aVtvKzFdOyJzdHlsZSI9PT11P2xyKG4sYyk6ImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIj09PXU/aXIobixjKToiY2hpbGRyZW4iPT09dT9hcihuLGMpOmd0KG4sdSxjLHQpfXN3aXRjaChlKXtjYXNlImlucHV0IjpPdChuLHIpO2JyZWFrO2Nhc2UidGV4dGFyZWEiOkpuKG4scik7YnJlYWs7Y2FzZSJzZWxlY3QiOmU9bi5fd3JhcHBlclN0YXRlLndhc011bHRpcGxlLG4uX3dyYXBwZXJTdGF0ZS53YXNNdWx0aXBsZT0hIXIubXVsdGlwbGUsbnVsbCE9KGk9ci52YWx1ZSk/S24obiwhIXIubXVsdGlwbGUsaSwhMSk6ZSE9PSEhci5tdWx0aXBsZSYmKG51bGwhPXIuZGVmYXVsdFZhbHVlP0tuKG4sISFyLm11bHRpcGxlLHIuZGVmYXVsdFZhbHVlLCEwKTpLbihuLCEhci5tdWx0aXBsZSxyLm11bHRpcGxlP1tdOiIiLCExKSl9fX1icmVhaztjYXNlIDY6bnVsbD09PXQuc3RhdGVOb2RlJiZhKCIxNjIiKSx0LnN0YXRlTm9kZS5ub2RlVmFsdWU9dC5tZW1vaXplZFByb3BzO2JyZWFrO2Nhc2UgMzpjYXNlIDEyOmNhc2UgMTM6Y2FzZSAxNzpicmVhaztkZWZhdWx0OmEoIjE2MyIpfX1mdW5jdGlvbiBQaShlLHQsbil7KG49b28obikpLnRhZz0zLG4ucGF5bG9hZD17ZWxlbWVudDpudWxsfTt2YXIgcj10LnZhbHVlO3JldHVybiBuLmNhbGxiYWNrPWZ1bmN0aW9uKCl7RGEociksYmkoZSx0KX0sbn1mdW5jdGlvbiBSaShlLHQsbil7KG49b28obikpLnRhZz0zO3ZhciByPWUudHlwZS5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3I7aWYoImZ1bmN0aW9uIj09dHlwZW9mIHIpe3ZhciBvPXQudmFsdWU7bi5wYXlsb2FkPWZ1bmN0aW9uKCl7cmV0dXJuIHIobyl9fXZhciBpPWUuc3RhdGVOb2RlO3JldHVybiBudWxsIT09aSYmImZ1bmN0aW9uIj09dHlwZW9mIGkuY29tcG9uZW50RGlkQ2F0Y2gmJihuLmNhbGxiYWNrPWZ1bmN0aW9uKCl7ImZ1bmN0aW9uIiE9dHlwZW9mIHImJihudWxsPT09R2k/R2k9bmV3IFNldChbdGhpc10pOkdpLmFkZCh0aGlzKSk7dmFyIG49dC52YWx1ZSxvPXQuc3RhY2s7YmkoZSx0KSx0aGlzLmNvbXBvbmVudERpZENhdGNoKG4se2NvbXBvbmVudFN0YWNrOm51bGwhPT1vP286IiJ9KX0pLG59ZnVuY3Rpb24gQ2koZSl7c3dpdGNoKGUudGFnKXtjYXNlIDE6QXIoZS50eXBlKSYmSXIoKTt2YXIgdD1lLmVmZmVjdFRhZztyZXR1cm4gMTAyNCZ0PyhlLmVmZmVjdFRhZz0tMTAyNSZ0fDY0LGUpOm51bGw7Y2FzZSAzOnJldHVybiBDbygpLERyKCksMCE9KDY0Jih0PWUuZWZmZWN0VGFnKSkmJmEoIjI4NSIpLGUuZWZmZWN0VGFnPS0xMDI1JnR8NjQsZTtjYXNlIDU6cmV0dXJuIE5vKGUpLG51bGw7Y2FzZSAxMzppZigxMDI0Jih0PWUuZWZmZWN0VGFnKSl7ZS5lZmZlY3RUYWc9LTEwMjUmdHw2NCx0PW51bGwhPT0odD1lLmFsdGVybmF0ZSk/dC5tZW1vaXplZFN0YXRlOm51bGw7dmFyIG49ZS5tZW1vaXplZFN0YXRlO3JldHVybiBudWxsPT09bj9uPXthbHJlYWR5Q2FwdHVyZWQ6ITAsZGlkVGltZW91dDohMSx0aW1lZE91dEF0OjB9OnQ9PT1uP249e2FscmVhZHlDYXB0dXJlZDohMCxkaWRUaW1lb3V0Om4uZGlkVGltZW91dCx0aW1lZE91dEF0Om4udGltZWRPdXRBdH06bi5hbHJlYWR5Q2FwdHVyZWQ9ITAsZS5tZW1vaXplZFN0YXRlPW4sZX1yZXR1cm4gbnVsbDtjYXNlIDQ6cmV0dXJuIENvKCksbnVsbDtjYXNlIDEwOnJldHVybiBibyhlKSxudWxsO2RlZmF1bHQ6cmV0dXJuIG51bGx9fV9pPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXQuY2hpbGQ7bnVsbCE9PW47KXtpZig1PT09bi50YWd8fDY9PT1uLnRhZyllLmFwcGVuZENoaWxkKG4uc3RhdGVOb2RlKTtlbHNlIGlmKDQhPT1uLnRhZyYmbnVsbCE9PW4uY2hpbGQpe24uY2hpbGQucmV0dXJuPW4sbj1uLmNoaWxkO2NvbnRpbnVlfWlmKG49PT10KWJyZWFrO2Zvcig7bnVsbD09PW4uc2libGluZzspe2lmKG51bGw9PT1uLnJldHVybnx8bi5yZXR1cm49PT10KXJldHVybjtuPW4ucmV0dXJufW4uc2libGluZy5yZXR1cm49bi5yZXR1cm4sbj1uLnNpYmxpbmd9fSx2aT1mdW5jdGlvbigpe30sbWk9ZnVuY3Rpb24oZSx0LG4scixpKXt2YXIgYT1lLm1lbW9pemVkUHJvcHM7aWYoYSE9PXIpe3ZhciB1PXQuc3RhdGVOb2RlO3N3aXRjaChQbyhPby5jdXJyZW50KSxlPW51bGwsbil7Y2FzZSJpbnB1dCI6YT13dCh1LGEpLHI9d3QodSxyKSxlPVtdO2JyZWFrO2Nhc2Uib3B0aW9uIjphPVluKHUsYSkscj1Zbih1LHIpLGU9W107YnJlYWs7Y2FzZSJzZWxlY3QiOmE9byh7fSxhLHt2YWx1ZTp2b2lkIDB9KSxyPW8oe30scix7dmFsdWU6dm9pZCAwfSksZT1bXTticmVhaztjYXNlInRleHRhcmVhIjphPVFuKHUsYSkscj1Rbih1LHIpLGU9W107YnJlYWs7ZGVmYXVsdDoiZnVuY3Rpb24iIT10eXBlb2YgYS5vbkNsaWNrJiYiZnVuY3Rpb24iPT10eXBlb2Ygci5vbkNsaWNrJiYodS5vbmNsaWNrPWhyKX1mcihuLHIpLHU9bj12b2lkIDA7dmFyIGM9bnVsbDtmb3IobiBpbiBhKWlmKCFyLmhhc093blByb3BlcnR5KG4pJiZhLmhhc093blByb3BlcnR5KG4pJiZudWxsIT1hW25dKWlmKCJzdHlsZSI9PT1uKXt2YXIgbD1hW25dO2Zvcih1IGluIGwpbC5oYXNPd25Qcm9wZXJ0eSh1KSYmKGN8fChjPXt9KSxjW3VdPSIiKX1lbHNlImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIiE9PW4mJiJjaGlsZHJlbiIhPT1uJiYic3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nIiE9PW4mJiJzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmciIT09biYmImF1dG9Gb2N1cyIhPT1uJiYoZy5oYXNPd25Qcm9wZXJ0eShuKT9lfHwoZT1bXSk6KGU9ZXx8W10pLnB1c2gobixudWxsKSk7Zm9yKG4gaW4gcil7dmFyIHM9cltuXTtpZihsPW51bGwhPWE/YVtuXTp2b2lkIDAsci5oYXNPd25Qcm9wZXJ0eShuKSYmcyE9PWwmJihudWxsIT1zfHxudWxsIT1sKSlpZigic3R5bGUiPT09bilpZihsKXtmb3IodSBpbiBsKSFsLmhhc093blByb3BlcnR5KHUpfHxzJiZzLmhhc093blByb3BlcnR5KHUpfHwoY3x8KGM9e30pLGNbdV09IiIpO2Zvcih1IGluIHMpcy5oYXNPd25Qcm9wZXJ0eSh1KSYmbFt1XSE9PXNbdV0mJihjfHwoYz17fSksY1t1XT1zW3VdKX1lbHNlIGN8fChlfHwoZT1bXSksZS5wdXNoKG4sYykpLGM9cztlbHNlImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIj09PW4/KHM9cz9zLl9faHRtbDp2b2lkIDAsbD1sP2wuX19odG1sOnZvaWQgMCxudWxsIT1zJiZsIT09cyYmKGU9ZXx8W10pLnB1c2gobiwiIitzKSk6ImNoaWxkcmVuIj09PW4/bD09PXN8fCJzdHJpbmciIT10eXBlb2YgcyYmIm51bWJlciIhPXR5cGVvZiBzfHwoZT1lfHxbXSkucHVzaChuLCIiK3MpOiJzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmciIT09biYmInN1cHByZXNzSHlkcmF0aW9uV2FybmluZyIhPT1uJiYoZy5oYXNPd25Qcm9wZXJ0eShuKT8obnVsbCE9cyYmZHIoaSxuKSxlfHxsPT09c3x8KGU9W10pKTooZT1lfHxbXSkucHVzaChuLHMpKX1jJiYoZT1lfHxbXSkucHVzaCgic3R5bGUiLGMpLGk9ZSwodC51cGRhdGVRdWV1ZT1pKSYmeWkodCl9fSxnaT1mdW5jdGlvbihlLHQsbixyKXtuIT09ciYmeWkodCl9O3ZhciBraT17cmVhZENvbnRleHQ6RW99LE5pPUhlLlJlYWN0Q3VycmVudE93bmVyLEFpPTAsSWk9MCxEaT0hMSxqaT1udWxsLExpPW51bGwsTWk9MCxGaT0tMSxVaT0hMSxXaT1udWxsLCRpPSExLEdpPW51bGw7ZnVuY3Rpb24gQmkoKXtpZihudWxsIT09amkpZm9yKHZhciBlPWppLnJldHVybjtudWxsIT09ZTspe3ZhciB0PWU7c3dpdGNoKHQudGFnKXtjYXNlIDE6dmFyIG49dC50eXBlLmNoaWxkQ29udGV4dFR5cGVzO251bGwhPW4mJklyKCk7YnJlYWs7Y2FzZSAzOkNvKCksRHIoKTticmVhaztjYXNlIDU6Tm8odCk7YnJlYWs7Y2FzZSA0OkNvKCk7YnJlYWs7Y2FzZSAxMDpibyh0KX1lPWUucmV0dXJufUxpPW51bGwsTWk9MCxGaT0tMSxVaT0hMSxqaT1udWxsfWZ1bmN0aW9uIHFpKGUpe2Zvcig7Oyl7dmFyIHQ9ZS5hbHRlcm5hdGUsbj1lLnJldHVybixyPWUuc2libGluZztpZigwPT0oNTEyJmUuZWZmZWN0VGFnKSl7dmFyIGk9dCx1PSh0PWUpLnBlbmRpbmdQcm9wcztzd2l0Y2godC50YWcpe2Nhc2UgMjpjYXNlIDE2OmJyZWFrO2Nhc2UgMTU6Y2FzZSAwOmJyZWFrO2Nhc2UgMTpBcih0LnR5cGUpJiZJcigpO2JyZWFrO2Nhc2UgMzpDbygpLERyKCksKHU9dC5zdGF0ZU5vZGUpLnBlbmRpbmdDb250ZXh0JiYodS5jb250ZXh0PXUucGVuZGluZ0NvbnRleHQsdS5wZW5kaW5nQ29udGV4dD1udWxsKSxudWxsIT09aSYmbnVsbCE9PWkuY2hpbGR8fChabyh0KSx0LmVmZmVjdFRhZyY9LTMpLHZpKHQpO2JyZWFrO2Nhc2UgNTpObyh0KTt2YXIgYz1Qbyh4by5jdXJyZW50KSxsPXQudHlwZTtpZihudWxsIT09aSYmbnVsbCE9dC5zdGF0ZU5vZGUpbWkoaSx0LGwsdSxjKSxpLnJlZiE9PXQucmVmJiYodC5lZmZlY3RUYWd8PTEyOCk7ZWxzZSBpZih1KXt2YXIgcz1QbyhPby5jdXJyZW50KTtpZihabyh0KSl7aT0odT10KS5zdGF0ZU5vZGU7dmFyIGY9dS50eXBlLHA9dS5tZW1vaXplZFByb3BzLGQ9Yztzd2l0Y2goaVtqXT11LGlbTF09cCxsPXZvaWQgMCxjPWYpe2Nhc2UiaWZyYW1lIjpjYXNlIm9iamVjdCI6UG4oImxvYWQiLGkpO2JyZWFrO2Nhc2UidmlkZW8iOmNhc2UiYXVkaW8iOmZvcihmPTA7ZjxyZS5sZW5ndGg7ZisrKVBuKHJlW2ZdLGkpO2JyZWFrO2Nhc2Uic291cmNlIjpQbigiZXJyb3IiLGkpO2JyZWFrO2Nhc2UiaW1nIjpjYXNlImltYWdlIjpjYXNlImxpbmsiOlBuKCJlcnJvciIsaSksUG4oImxvYWQiLGkpO2JyZWFrO2Nhc2UiZm9ybSI6UG4oInJlc2V0IixpKSxQbigic3VibWl0IixpKTticmVhaztjYXNlImRldGFpbHMiOlBuKCJ0b2dnbGUiLGkpO2JyZWFrO2Nhc2UiaW5wdXQiOkV0KGkscCksUG4oImludmFsaWQiLGkpLGRyKGQsIm9uQ2hhbmdlIik7YnJlYWs7Y2FzZSJzZWxlY3QiOmkuX3dyYXBwZXJTdGF0ZT17d2FzTXVsdGlwbGU6ISFwLm11bHRpcGxlfSxQbigiaW52YWxpZCIsaSksZHIoZCwib25DaGFuZ2UiKTticmVhaztjYXNlInRleHRhcmVhIjpYbihpLHApLFBuKCJpbnZhbGlkIixpKSxkcihkLCJvbkNoYW5nZSIpfWZvcihsIGluIGZyKGMscCksZj1udWxsLHApcC5oYXNPd25Qcm9wZXJ0eShsKSYmKHM9cFtsXSwiY2hpbGRyZW4iPT09bD8ic3RyaW5nIj09dHlwZW9mIHM/aS50ZXh0Q29udGVudCE9PXMmJihmPVsiY2hpbGRyZW4iLHNdKToibnVtYmVyIj09dHlwZW9mIHMmJmkudGV4dENvbnRlbnQhPT0iIitzJiYoZj1bImNoaWxkcmVuIiwiIitzXSk6Zy5oYXNPd25Qcm9wZXJ0eShsKSYmbnVsbCE9cyYmZHIoZCxsKSk7c3dpdGNoKGMpe2Nhc2UiaW5wdXQiOnFlKGkpLFN0KGkscCwhMCk7YnJlYWs7Y2FzZSJ0ZXh0YXJlYSI6cWUoaSksWm4oaSk7YnJlYWs7Y2FzZSJzZWxlY3QiOmNhc2Uib3B0aW9uIjpicmVhaztkZWZhdWx0OiJmdW5jdGlvbiI9PXR5cGVvZiBwLm9uQ2xpY2smJihpLm9uY2xpY2s9aHIpfWw9Zix1LnVwZGF0ZVF1ZXVlPWwsKHU9bnVsbCE9PWwpJiZ5aSh0KX1lbHNle3A9dCxpPWwsZD11LGY9OT09PWMubm9kZVR5cGU/YzpjLm93bmVyRG9jdW1lbnQscz09PWVyLmh0bWwmJihzPXRyKGkpKSxzPT09ZXIuaHRtbD8ic2NyaXB0Ij09PWk/KChpPWYuY3JlYXRlRWxlbWVudCgiZGl2IikpLmlubmVySFRNTD0iPHNjcmlwdD48XC9zY3JpcHQ+IixmPWkucmVtb3ZlQ2hpbGQoaS5maXJzdENoaWxkKSk6InN0cmluZyI9PXR5cGVvZiBkLmlzP2Y9Zi5jcmVhdGVFbGVtZW50KGkse2lzOmQuaXN9KTooZj1mLmNyZWF0ZUVsZW1lbnQoaSksInNlbGVjdCI9PT1pJiZkLm11bHRpcGxlJiYoZi5tdWx0aXBsZT0hMCkpOmY9Zi5jcmVhdGVFbGVtZW50TlMocyxpKSwoaT1mKVtqXT1wLGlbTF09dSxfaShpLHQsITEsITEpLGQ9aTt2YXIgaD1jLHk9cHIoZj1sLHA9dSk7c3dpdGNoKGYpe2Nhc2UiaWZyYW1lIjpjYXNlIm9iamVjdCI6UG4oImxvYWQiLGQpLGM9cDticmVhaztjYXNlInZpZGVvIjpjYXNlImF1ZGlvIjpmb3IoYz0wO2M8cmUubGVuZ3RoO2MrKylQbihyZVtjXSxkKTtjPXA7YnJlYWs7Y2FzZSJzb3VyY2UiOlBuKCJlcnJvciIsZCksYz1wO2JyZWFrO2Nhc2UiaW1nIjpjYXNlImltYWdlIjpjYXNlImxpbmsiOlBuKCJlcnJvciIsZCksUG4oImxvYWQiLGQpLGM9cDticmVhaztjYXNlImZvcm0iOlBuKCJyZXNldCIsZCksUG4oInN1Ym1pdCIsZCksYz1wO2JyZWFrO2Nhc2UiZGV0YWlscyI6UG4oInRvZ2dsZSIsZCksYz1wO2JyZWFrO2Nhc2UiaW5wdXQiOkV0KGQscCksYz13dChkLHApLFBuKCJpbnZhbGlkIixkKSxkcihoLCJvbkNoYW5nZSIpO2JyZWFrO2Nhc2Uib3B0aW9uIjpjPVluKGQscCk7YnJlYWs7Y2FzZSJzZWxlY3QiOmQuX3dyYXBwZXJTdGF0ZT17d2FzTXVsdGlwbGU6ISFwLm11bHRpcGxlfSxjPW8oe30scCx7dmFsdWU6dm9pZCAwfSksUG4oImludmFsaWQiLGQpLGRyKGgsIm9uQ2hhbmdlIik7YnJlYWs7Y2FzZSJ0ZXh0YXJlYSI6WG4oZCxwKSxjPVFuKGQscCksUG4oImludmFsaWQiLGQpLGRyKGgsIm9uQ2hhbmdlIik7YnJlYWs7ZGVmYXVsdDpjPXB9ZnIoZixjKSxzPXZvaWQgMDt2YXIgXz1mLHY9ZCxtPWM7Zm9yKHMgaW4gbSlpZihtLmhhc093blByb3BlcnR5KHMpKXt2YXIgYj1tW3NdOyJzdHlsZSI9PT1zP2xyKHYsYik6ImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIj09PXM/bnVsbCE9KGI9Yj9iLl9faHRtbDp2b2lkIDApJiZpcih2LGIpOiJjaGlsZHJlbiI9PT1zPyJzdHJpbmciPT10eXBlb2YgYj8oInRleHRhcmVhIiE9PV98fCIiIT09YikmJmFyKHYsYik6Im51bWJlciI9PXR5cGVvZiBiJiZhcih2LCIiK2IpOiJzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmciIT09cyYmInN1cHByZXNzSHlkcmF0aW9uV2FybmluZyIhPT1zJiYiYXV0b0ZvY3VzIiE9PXMmJihnLmhhc093blByb3BlcnR5KHMpP251bGwhPWImJmRyKGgscyk6bnVsbCE9YiYmZ3QodixzLGIseSkpfXN3aXRjaChmKXtjYXNlImlucHV0IjpxZShkKSxTdChkLHAsITEpO2JyZWFrO2Nhc2UidGV4dGFyZWEiOnFlKGQpLFpuKGQpO2JyZWFrO2Nhc2Uib3B0aW9uIjpudWxsIT1wLnZhbHVlJiZkLnNldEF0dHJpYnV0ZSgidmFsdWUiLCIiK2J0KHAudmFsdWUpKTticmVhaztjYXNlInNlbGVjdCI6KGM9ZCkubXVsdGlwbGU9ISFwLm11bHRpcGxlLG51bGwhPShkPXAudmFsdWUpP0tuKGMsISFwLm11bHRpcGxlLGQsITEpOm51bGwhPXAuZGVmYXVsdFZhbHVlJiZLbihjLCEhcC5tdWx0aXBsZSxwLmRlZmF1bHRWYWx1ZSwhMCk7YnJlYWs7ZGVmYXVsdDoiZnVuY3Rpb24iPT10eXBlb2YgYy5vbkNsaWNrJiYoZC5vbmNsaWNrPWhyKX0odT12cihsLHUpKSYmeWkodCksdC5zdGF0ZU5vZGU9aX1udWxsIT09dC5yZWYmJih0LmVmZmVjdFRhZ3w9MTI4KX1lbHNlIG51bGw9PT10LnN0YXRlTm9kZSYmYSgiMTY2Iik7YnJlYWs7Y2FzZSA2OmkmJm51bGwhPXQuc3RhdGVOb2RlP2dpKGksdCxpLm1lbW9pemVkUHJvcHMsdSk6KCJzdHJpbmciIT10eXBlb2YgdSYmKG51bGw9PT10LnN0YXRlTm9kZSYmYSgiMTY2IikpLGk9UG8oeG8uY3VycmVudCksUG8oT28uY3VycmVudCksWm8odCk/KGw9KHU9dCkuc3RhdGVOb2RlLGk9dS5tZW1vaXplZFByb3BzLGxbal09dSwodT1sLm5vZGVWYWx1ZSE9PWkpJiZ5aSh0KSk6KGw9dCwodT0oOT09PWkubm9kZVR5cGU/aTppLm93bmVyRG9jdW1lbnQpLmNyZWF0ZVRleHROb2RlKHUpKVtqXT10LGwuc3RhdGVOb2RlPXUpKTticmVhaztjYXNlIDExOmJyZWFrO2Nhc2UgMTM6dT10Lm1lbW9pemVkU3RhdGUsbD1udWxsIT09aT9pLm1lbW9pemVkU3RhdGU6bnVsbCwobnVsbCE9PXUmJnUuZGlkVGltZW91dCkhPT0obnVsbCE9PWwmJmwuZGlkVGltZW91dCkmJih0LmVmZmVjdFRhZ3w9NCk7YnJlYWs7Y2FzZSA3OmNhc2UgODpjYXNlIDEyOmJyZWFrO2Nhc2UgNDpDbygpLHZpKHQpO2JyZWFrO2Nhc2UgMTA6Ym8odCk7YnJlYWs7Y2FzZSA5OmNhc2UgMTQ6YnJlYWs7Y2FzZSAxNzpBcih0LnR5cGUpJiZJcigpO2JyZWFrO2RlZmF1bHQ6YSgiMTU2Iil9aWYoamk9bnVsbCx0PWUsMTA3Mzc0MTgyMz09PU1pfHwxMDczNzQxODIzIT09dC5jaGlsZEV4cGlyYXRpb25UaW1lKXtmb3IodT0wLGw9dC5jaGlsZDtudWxsIT09bDspaT1sLmV4cGlyYXRpb25UaW1lLGM9bC5jaGlsZEV4cGlyYXRpb25UaW1lLCgwPT09dXx8MCE9PWkmJmk8dSkmJih1PWkpLCgwPT09dXx8MCE9PWMmJmM8dSkmJih1PWMpLGw9bC5zaWJsaW5nO3QuY2hpbGRFeHBpcmF0aW9uVGltZT11fW51bGwhPT1uJiYwPT0oNTEyJm4uZWZmZWN0VGFnKSYmKG51bGw9PT1uLmZpcnN0RWZmZWN0JiYobi5maXJzdEVmZmVjdD1lLmZpcnN0RWZmZWN0KSxudWxsIT09ZS5sYXN0RWZmZWN0JiYobnVsbCE9PW4ubGFzdEVmZmVjdCYmKG4ubGFzdEVmZmVjdC5uZXh0RWZmZWN0PWUuZmlyc3RFZmZlY3QpLG4ubGFzdEVmZmVjdD1lLmxhc3RFZmZlY3QpLDE8ZS5lZmZlY3RUYWcmJihudWxsIT09bi5sYXN0RWZmZWN0P24ubGFzdEVmZmVjdC5uZXh0RWZmZWN0PWU6bi5maXJzdEVmZmVjdD1lLG4ubGFzdEVmZmVjdD1lKSl9ZWxzZXtpZihudWxsIT09KGU9Q2koZSkpKXJldHVybiBlLmVmZmVjdFRhZyY9NTExLGU7bnVsbCE9PW4mJihuLmZpcnN0RWZmZWN0PW4ubGFzdEVmZmVjdD1udWxsLG4uZWZmZWN0VGFnfD01MTIpfWlmKG51bGwhPT1yKXJldHVybiByO2lmKG51bGw9PT1uKWJyZWFrO2U9bn1yZXR1cm4gbnVsbH1mdW5jdGlvbiB6aShlKXt2YXIgdD1oaShlLmFsdGVybmF0ZSxlLE1pKTtyZXR1cm4gZS5tZW1vaXplZFByb3BzPWUucGVuZGluZ1Byb3BzLG51bGw9PT10JiYodD1xaShlKSksTmkuY3VycmVudD1udWxsLHR9ZnVuY3Rpb24gSGkoZSx0LG4pe0RpJiZhKCIyNDMiKSxEaT0hMCxOaS5jdXJyZW50RGlzcGF0Y2hlcj1raTt2YXIgcj1lLm5leHRFeHBpcmF0aW9uVGltZVRvV29ya09uO3I9PT1NaSYmZT09PUxpJiZudWxsIT09aml8fChCaSgpLE1pPXIsamk9enIoKExpPWUpLmN1cnJlbnQsbnVsbCksZS5wZW5kaW5nQ29tbWl0RXhwaXJhdGlvblRpbWU9MCk7Zm9yKHZhciBvPSExOzspe3RyeXtpZih0KWZvcig7bnVsbCE9PWppJiYhSWEoKTspamk9emkoamkpO2Vsc2UgZm9yKDtudWxsIT09amk7KWppPXppKGppKX1jYXRjaCh0KXtpZihudWxsPT09amkpbz0hMCxEYSh0KTtlbHNle251bGw9PT1qaSYmYSgiMjcxIik7dmFyIGk9amksdT1pLnJldHVybjtpZihudWxsIT09dSl7ZTp7dmFyIGM9ZSxsPXUscz1pLGY9dDtpZih1PU1pLHMuZWZmZWN0VGFnfD01MTIscy5maXJzdEVmZmVjdD1zLmxhc3RFZmZlY3Q9bnVsbCxudWxsIT09ZiYmIm9iamVjdCI9PXR5cGVvZiBmJiYiZnVuY3Rpb24iPT10eXBlb2YgZi50aGVuKXt2YXIgcD1mO2Y9bDt2YXIgZD0tMSxoPS0xO2Rve2lmKDEzPT09Zi50YWcpe3ZhciB5PWYuYWx0ZXJuYXRlO2lmKG51bGwhPT15JiYobnVsbCE9PSh5PXkubWVtb2l6ZWRTdGF0ZSkmJnkuZGlkVGltZW91dCkpe2g9MTAqKHkudGltZWRPdXRBdC0yKTticmVha30ibnVtYmVyIj09dHlwZW9mKHk9Zi5wZW5kaW5nUHJvcHMubWF4RHVyYXRpb24pJiYoMD49eT9kPTA6KC0xPT09ZHx8eTxkKSYmKGQ9eSkpfWY9Zi5yZXR1cm59d2hpbGUobnVsbCE9PWYpO2Y9bDtkb3tpZigoeT0xMz09PWYudGFnKSYmKHZvaWQgMD09PWYubWVtb2l6ZWRQcm9wcy5mYWxsYmFjaz95PSExOnk9bnVsbD09PSh5PWYubWVtb2l6ZWRTdGF0ZSl8fCF5LmRpZFRpbWVvdXQpLHkpe2lmKGw9S2kuYmluZChudWxsLGMsZixzLDA9PSgxJmYubW9kZSk/MTp1KSxwLnRoZW4obCxsKSwwPT0oMSZmLm1vZGUpKXtmLmVmZmVjdFRhZ3w9MzIsbmkocy5hbHRlcm5hdGUscyxudWxsLHUpLHMuZWZmZWN0VGFnJj0tNTEzLDE9PT1zLnRhZyYmKHMuZWZmZWN0VGFnJj0tNDIxLG51bGw9PT1zLmFsdGVybmF0ZSYmKHMudGFnPTE3KSk7YnJlYWsgZX0tMT09PWQ/Yz0xMDczNzQxODIzOigtMT09PWgmJihoPTEwKihacihjLHUpLTIpLTVlMyksYz1oK2QpLDA8PWMmJkZpPGMmJihGaT1jKSxmLmVmZmVjdFRhZ3w9MTAyNCxmLmV4cGlyYXRpb25UaW1lPXU7YnJlYWsgZX1mPWYucmV0dXJufXdoaWxlKG51bGwhPT1mKTtmPUVycm9yKCJBbiB1cGRhdGUgd2FzIHN1c3BlbmRlZCwgYnV0IG5vIHBsYWNlaG9sZGVyIFVJIHdhcyBwcm92aWRlZC4iKX1VaT0hMCxmPWhvKGYscyksYz1sO2Rve3N3aXRjaChjLnRhZyl7Y2FzZSAzOnM9ZixjLmVmZmVjdFRhZ3w9MTAyNCxjLmV4cGlyYXRpb25UaW1lPXUsdW8oYyx1PVBpKGMscyx1KSk7YnJlYWsgZTtjYXNlIDE6aWYocz1mLGw9Yy50eXBlLHA9Yy5zdGF0ZU5vZGUsMD09KDY0JmMuZWZmZWN0VGFnKSYmKCJmdW5jdGlvbiI9PXR5cGVvZiBsLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcnx8bnVsbCE9PXAmJiJmdW5jdGlvbiI9PXR5cGVvZiBwLmNvbXBvbmVudERpZENhdGNoJiYobnVsbD09PUdpfHwhR2kuaGFzKHApKSkpe2MuZWZmZWN0VGFnfD0xMDI0LGMuZXhwaXJhdGlvblRpbWU9dSx1byhjLHU9UmkoYyxzLHUpKTticmVhayBlfX1jPWMucmV0dXJufXdoaWxlKG51bGwhPT1jKX1qaT1xaShpKTtjb250aW51ZX1vPSEwLERhKHQpfX1icmVha31pZihEaT0hMSxtbz12bz1fbz1OaS5jdXJyZW50RGlzcGF0Y2hlcj1udWxsLG8pTGk9bnVsbCxlLmZpbmlzaGVkV29yaz1udWxsO2Vsc2UgaWYobnVsbCE9PWppKWUuZmluaXNoZWRXb3JrPW51bGw7ZWxzZXtpZihudWxsPT09KHQ9ZS5jdXJyZW50LmFsdGVybmF0ZSkmJmEoIjI4MSIpLExpPW51bGwsVWkpe2lmKG89ZS5sYXRlc3RQZW5kaW5nVGltZSxpPWUubGF0ZXN0U3VzcGVuZGVkVGltZSx1PWUubGF0ZXN0UGluZ2VkVGltZSwwIT09byYmbz5yfHwwIT09aSYmaT5yfHwwIT09dSYmdT5yKXJldHVybiBKcihlLHIpLHZvaWQgT2EoZSx0LHIsZS5leHBpcmF0aW9uVGltZSwtMSk7aWYoIWUuZGlkRXJyb3ImJiFuKXJldHVybiBlLmRpZEVycm9yPSEwLHI9ZS5uZXh0RXhwaXJhdGlvblRpbWVUb1dvcmtPbj1yLG49ZS5leHBpcmF0aW9uVGltZT0xLHZvaWQgT2EoZSx0LHIsbiwtMSl9bnx8LTE9PT1GaT8oZS5wZW5kaW5nQ29tbWl0RXhwaXJhdGlvblRpbWU9cixlLmZpbmlzaGVkV29yaz10KTooSnIoZSxyKSwobj0xMCooWnIoZSxyKS0yKSk8RmkmJihGaT1uKSxuPTEwKihTYSgpLTIpLG49RmktbixPYShlLHQscixlLmV4cGlyYXRpb25UaW1lLDA+bj8wOm4pKX19ZnVuY3Rpb24gVmkoZSx0KXt2YXIgbjtlOntmb3IoRGkmJiEkaSYmYSgiMjYzIiksbj1lLnJldHVybjtudWxsIT09bjspe3N3aXRjaChuLnRhZyl7Y2FzZSAxOnZhciByPW4uc3RhdGVOb2RlO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuLnR5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yfHwiZnVuY3Rpb24iPT10eXBlb2Ygci5jb21wb25lbnREaWRDYXRjaCYmKG51bGw9PT1HaXx8IUdpLmhhcyhyKSkpe2FvKG4sZT1SaShuLGU9aG8odCxlKSwxKSksWGkobiwxKSxuPXZvaWQgMDticmVhayBlfWJyZWFrO2Nhc2UgMzphbyhuLGU9UGkobixlPWhvKHQsZSksMSkpLFhpKG4sMSksbj12b2lkIDA7YnJlYWsgZX1uPW4ucmV0dXJufTM9PT1lLnRhZyYmKGFvKGUsbj1QaShlLG49aG8odCxlKSwxKSksWGkoZSwxKSksbj12b2lkIDB9cmV0dXJuIG59ZnVuY3Rpb24gWWkoZSx0KXtyZXR1cm4gMCE9PUlpP2U9SWk6RGk/ZT0kaT8xOk1pOjEmdC5tb2RlPyhlPWRhPzIrMTAqKDErKChlLTIrMTUpLzEwfDApKToyKzI1KigxKygoZS0yKzUwMCkvMjV8MCkpLG51bGwhPT1MaSYmZT09PU1pJiYoZSs9MSkpOmU9MSxkYSYmZT5hYSYmKGFhPWUpLGV9ZnVuY3Rpb24gS2koZSx0LG4scil7dmFyIG89ZS5lYXJsaWVzdFN1c3BlbmRlZFRpbWUsaT1lLmxhdGVzdFN1c3BlbmRlZFRpbWU7aWYoMCE9PW8mJnI+PW8mJnI8PWkpe2k9bz1yLGUuZGlkRXJyb3I9ITE7dmFyIGE9ZS5sYXRlc3RQaW5nZWRUaW1lOygwPT09YXx8YTxpKSYmKGUubGF0ZXN0UGluZ2VkVGltZT1pKSxlbyhpLGUpfWVsc2UgWHIoZSxvPVlpKG89U2EoKSx0KSk7MCE9KDEmdC5tb2RlKSYmZT09PUxpJiZNaT09PXImJihMaT1udWxsKSxRaSh0LG8pLDA9PSgxJnQubW9kZSkmJihRaShuLG8pLDE9PT1uLnRhZyYmbnVsbCE9PW4uc3RhdGVOb2RlJiYoKHQ9b28obykpLnRhZz0yLGFvKG4sdCkpKSwwIT09KG49ZS5leHBpcmF0aW9uVGltZSkmJnhhKGUsbil9ZnVuY3Rpb24gUWkoZSx0KXsoMD09PWUuZXhwaXJhdGlvblRpbWV8fGUuZXhwaXJhdGlvblRpbWU+dCkmJihlLmV4cGlyYXRpb25UaW1lPXQpO3ZhciBuPWUuYWx0ZXJuYXRlO251bGwhPT1uJiYoMD09PW4uZXhwaXJhdGlvblRpbWV8fG4uZXhwaXJhdGlvblRpbWU+dCkmJihuLmV4cGlyYXRpb25UaW1lPXQpO3ZhciByPWUucmV0dXJuLG89bnVsbDtpZihudWxsPT09ciYmMz09PWUudGFnKW89ZS5zdGF0ZU5vZGU7ZWxzZSBmb3IoO251bGwhPT1yOyl7aWYobj1yLmFsdGVybmF0ZSwoMD09PXIuY2hpbGRFeHBpcmF0aW9uVGltZXx8ci5jaGlsZEV4cGlyYXRpb25UaW1lPnQpJiYoci5jaGlsZEV4cGlyYXRpb25UaW1lPXQpLG51bGwhPT1uJiYoMD09PW4uY2hpbGRFeHBpcmF0aW9uVGltZXx8bi5jaGlsZEV4cGlyYXRpb25UaW1lPnQpJiYobi5jaGlsZEV4cGlyYXRpb25UaW1lPXQpLG51bGw9PT1yLnJldHVybiYmMz09PXIudGFnKXtvPXIuc3RhdGVOb2RlO2JyZWFrfXI9ci5yZXR1cm59cmV0dXJuIG51bGw9PT1vP251bGw6b31mdW5jdGlvbiBYaShlLHQpe251bGwhPT0oZT1RaShlLHQpKSYmKCFEaSYmMCE9PU1pJiZ0PE1pJiZCaSgpLFhyKGUsdCksRGkmJiEkaSYmTGk9PT1lfHx4YShlLGUuZXhwaXJhdGlvblRpbWUpLGdhPm1hJiYoZ2E9MCxhKCIxODUiKSkpfWZ1bmN0aW9uIEppKGUsdCxuLHIsbyl7dmFyIGk9SWk7SWk9MTt0cnl7cmV0dXJuIGUodCxuLHIsbyl9ZmluYWxseXtJaT1pfX12YXIgWmk9bnVsbCxlYT1udWxsLHRhPTAsbmE9dm9pZCAwLHJhPSExLG9hPW51bGwsaWE9MCxhYT0wLHVhPSExLGNhPSExLGxhPW51bGwsc2E9bnVsbCxmYT0hMSxwYT0hMSxkYT0hMSxoYT1udWxsLHlhPWkudW5zdGFibGVfbm93KCksX2E9MisoeWEvMTB8MCksdmE9X2EsbWE9NTAsZ2E9MCxiYT1udWxsLHdhPTE7ZnVuY3Rpb24gRWEoKXtfYT0yKygoaS51bnN0YWJsZV9ub3coKS15YSkvMTB8MCl9ZnVuY3Rpb24gVGEoZSx0KXtpZigwIT09dGEpe2lmKHQ+dGEpcmV0dXJuO251bGwhPT1uYSYmaS51bnN0YWJsZV9jYW5jZWxDYWxsYmFjayhuYSl9dGE9dCxlPWkudW5zdGFibGVfbm93KCkteWEsbmE9aS51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrKFJhLHt0aW1lb3V0OjEwKih0LTIpLWV9KX1mdW5jdGlvbiBPYShlLHQsbixyLG8pe2UuZXhwaXJhdGlvblRpbWU9ciwwIT09b3x8SWEoKT8wPG8mJihlLnRpbWVvdXRIYW5kbGU9Z3IoZnVuY3Rpb24oZSx0LG4pe2UucGVuZGluZ0NvbW1pdEV4cGlyYXRpb25UaW1lPW4sZS5maW5pc2hlZFdvcms9dCxFYSgpLHZhPV9hLGthKGUsbil9LmJpbmQobnVsbCxlLHQsbiksbykpOihlLnBlbmRpbmdDb21taXRFeHBpcmF0aW9uVGltZT1uLGUuZmluaXNoZWRXb3JrPXQpfWZ1bmN0aW9uIFNhKCl7cmV0dXJuIHJhP3ZhOihQYSgpLDAhPT1pYSYmMTA3Mzc0MTgyMyE9PWlhfHwoRWEoKSx2YT1fYSksdmEpfWZ1bmN0aW9uIHhhKGUsdCl7aWYobnVsbD09PWUubmV4dFNjaGVkdWxlZFJvb3QpZS5leHBpcmF0aW9uVGltZT10LG51bGw9PT1lYT8oWmk9ZWE9ZSxlLm5leHRTY2hlZHVsZWRSb290PWUpOihlYT1lYS5uZXh0U2NoZWR1bGVkUm9vdD1lKS5uZXh0U2NoZWR1bGVkUm9vdD1aaTtlbHNle3ZhciBuPWUuZXhwaXJhdGlvblRpbWU7KDA9PT1ufHx0PG4pJiYoZS5leHBpcmF0aW9uVGltZT10KX1yYXx8KGZhP3BhJiYob2E9ZSxpYT0xLE5hKGUsMSwhMCkpOjE9PT10P0NhKDEsbnVsbCk6VGEoZSx0KSl9ZnVuY3Rpb24gUGEoKXt2YXIgZT0wLHQ9bnVsbDtpZihudWxsIT09ZWEpZm9yKHZhciBuPWVhLHI9Wmk7bnVsbCE9PXI7KXt2YXIgbz1yLmV4cGlyYXRpb25UaW1lO2lmKDA9PT1vKXtpZigobnVsbD09PW58fG51bGw9PT1lYSkmJmEoIjI0NCIpLHI9PT1yLm5leHRTY2hlZHVsZWRSb290KXtaaT1lYT1yLm5leHRTY2hlZHVsZWRSb290PW51bGw7YnJlYWt9aWYocj09PVppKVppPW89ci5uZXh0U2NoZWR1bGVkUm9vdCxlYS5uZXh0U2NoZWR1bGVkUm9vdD1vLHIubmV4dFNjaGVkdWxlZFJvb3Q9bnVsbDtlbHNle2lmKHI9PT1lYSl7KGVhPW4pLm5leHRTY2hlZHVsZWRSb290PVppLHIubmV4dFNjaGVkdWxlZFJvb3Q9bnVsbDticmVha31uLm5leHRTY2hlZHVsZWRSb290PXIubmV4dFNjaGVkdWxlZFJvb3Qsci5uZXh0U2NoZWR1bGVkUm9vdD1udWxsfXI9bi5uZXh0U2NoZWR1bGVkUm9vdH1lbHNle2lmKCgwPT09ZXx8bzxlKSYmKGU9byx0PXIpLHI9PT1lYSlicmVhaztpZigxPT09ZSlicmVhaztuPXIscj1yLm5leHRTY2hlZHVsZWRSb290fX1vYT10LGlhPWV9ZnVuY3Rpb24gUmEoZSl7aWYoZS5kaWRUaW1lb3V0JiZudWxsIT09Wmkpe0VhKCk7dmFyIHQ9Wmk7ZG97dmFyIG49dC5leHBpcmF0aW9uVGltZTswIT09biYmX2E+PW4mJih0Lm5leHRFeHBpcmF0aW9uVGltZVRvV29ya09uPV9hKSx0PXQubmV4dFNjaGVkdWxlZFJvb3R9d2hpbGUodCE9PVppKX1DYSgwLGUpfWZ1bmN0aW9uIENhKGUsdCl7aWYoc2E9dCxQYSgpLG51bGwhPT1zYSlmb3IoRWEoKSx2YT1fYTtudWxsIT09b2EmJjAhPT1pYSYmKDA9PT1lfHxlPj1pYSkmJighdWF8fF9hPj1pYSk7KU5hKG9hLGlhLF9hPj1pYSksUGEoKSxFYSgpLHZhPV9hO2Vsc2UgZm9yKDtudWxsIT09b2EmJjAhPT1pYSYmKDA9PT1lfHxlPj1pYSk7KU5hKG9hLGlhLCEwKSxQYSgpO2lmKG51bGwhPT1zYSYmKHRhPTAsbmE9bnVsbCksMCE9PWlhJiZUYShvYSxpYSksc2E9bnVsbCx1YT0hMSxnYT0wLGJhPW51bGwsbnVsbCE9PWhhKWZvcihlPWhhLGhhPW51bGwsdD0wO3Q8ZS5sZW5ndGg7dCsrKXt2YXIgbj1lW3RdO3RyeXtuLl9vbkNvbXBsZXRlKCl9Y2F0Y2goZSl7Y2F8fChjYT0hMCxsYT1lKX19aWYoY2EpdGhyb3cgZT1sYSxsYT1udWxsLGNhPSExLGV9ZnVuY3Rpb24ga2EoZSx0KXtyYSYmYSgiMjUzIiksb2E9ZSxpYT10LE5hKGUsdCwhMCksQ2EoMSxudWxsKX1mdW5jdGlvbiBOYShlLHQsbil7aWYocmEmJmEoIjI0NSIpLHJhPSEwLG51bGw9PT1zYXx8bil7dmFyIHI9ZS5maW5pc2hlZFdvcms7bnVsbCE9PXI/QWEoZSxyLHQpOihlLmZpbmlzaGVkV29yaz1udWxsLC0xIT09KHI9ZS50aW1lb3V0SGFuZGxlKSYmKGUudGltZW91dEhhbmRsZT0tMSxicihyKSksSGkoZSwhMSxuKSxudWxsIT09KHI9ZS5maW5pc2hlZFdvcmspJiZBYShlLHIsdCkpfWVsc2UgbnVsbCE9PShyPWUuZmluaXNoZWRXb3JrKT9BYShlLHIsdCk6KGUuZmluaXNoZWRXb3JrPW51bGwsLTEhPT0ocj1lLnRpbWVvdXRIYW5kbGUpJiYoZS50aW1lb3V0SGFuZGxlPS0xLGJyKHIpKSxIaShlLCEwLG4pLG51bGwhPT0ocj1lLmZpbmlzaGVkV29yaykmJihJYSgpP2UuZmluaXNoZWRXb3JrPXI6QWEoZSxyLHQpKSk7cmE9ITF9ZnVuY3Rpb24gQWEoZSx0LG4pe3ZhciByPWUuZmlyc3RCYXRjaDtpZihudWxsIT09ciYmci5fZXhwaXJhdGlvblRpbWU8PW4mJihudWxsPT09aGE/aGE9W3JdOmhhLnB1c2gociksci5fZGVmZXIpKXJldHVybiBlLmZpbmlzaGVkV29yaz10LHZvaWQoZS5leHBpcmF0aW9uVGltZT0wKTtlLmZpbmlzaGVkV29yaz1udWxsLGU9PT1iYT9nYSsrOihiYT1lLGdhPTApLCRpPURpPSEwLGUuY3VycmVudD09PXQmJmEoIjE3NyIpO3ZhciBvPWUucGVuZGluZ0NvbW1pdEV4cGlyYXRpb25UaW1lOzA9PT1vJiZhKCIyNjEiKSxlLnBlbmRpbmdDb21taXRFeHBpcmF0aW9uVGltZT0wO3ZhciBpPXQuZXhwaXJhdGlvblRpbWUsdT10LmNoaWxkRXhwaXJhdGlvblRpbWUsYz0wPT09aXx8MCE9PXUmJnU8aT91Omk7aWYoZS5kaWRFcnJvcj0hMSwwPT09YyllLmVhcmxpZXN0UGVuZGluZ1RpbWU9MCxlLmxhdGVzdFBlbmRpbmdUaW1lPTAsZS5lYXJsaWVzdFN1c3BlbmRlZFRpbWU9MCxlLmxhdGVzdFN1c3BlbmRlZFRpbWU9MCxlLmxhdGVzdFBpbmdlZFRpbWU9MDtlbHNle3ZhciBsPWUubGF0ZXN0UGVuZGluZ1RpbWU7MCE9PWwmJihsPGM/ZS5lYXJsaWVzdFBlbmRpbmdUaW1lPWUubGF0ZXN0UGVuZGluZ1RpbWU9MDplLmVhcmxpZXN0UGVuZGluZ1RpbWU8YyYmKGUuZWFybGllc3RQZW5kaW5nVGltZT1lLmxhdGVzdFBlbmRpbmdUaW1lKSk7dmFyIHM9ZS5lYXJsaWVzdFN1c3BlbmRlZFRpbWU7MD09PXM/WHIoZSxjKTpjPmUubGF0ZXN0U3VzcGVuZGVkVGltZT8oZS5lYXJsaWVzdFN1c3BlbmRlZFRpbWU9MCxlLmxhdGVzdFN1c3BlbmRlZFRpbWU9MCxlLmxhdGVzdFBpbmdlZFRpbWU9MCxYcihlLGMpKTpjPHMmJlhyKGUsYyl9aWYoZW8oMCxlKSxOaS5jdXJyZW50PW51bGwsMTx0LmVmZmVjdFRhZylpZihudWxsIT09dC5sYXN0RWZmZWN0KXt0Lmxhc3RFZmZlY3QubmV4dEVmZmVjdD10O3ZhciBmPXQuZmlyc3RFZmZlY3R9ZWxzZSBmPXQ7ZWxzZSBmPXQuZmlyc3RFZmZlY3Q7eXI9eG47dmFyIHA9Rm4oKTtpZihVbihwKSl7aWYoInNlbGVjdGlvblN0YXJ0ImluIHApdmFyIGQ9e3N0YXJ0OnAuc2VsZWN0aW9uU3RhcnQsZW5kOnAuc2VsZWN0aW9uRW5kfTtlbHNlIGU6e3ZhciBoPXAub3duZXJEb2N1bWVudCx5PWgmJmguZGVmYXVsdFZpZXd8fHdpbmRvdyxfPXkuZ2V0U2VsZWN0aW9uJiZ5LmdldFNlbGVjdGlvbigpO2lmKF8mJjAhPT1fLnJhbmdlQ291bnQpe3ZhciB2PV8uYW5jaG9yTm9kZSxtPV8uYW5jaG9yT2Zmc2V0LGc9Xy5mb2N1c05vZGUsYj1fLmZvY3VzT2Zmc2V0O3RyeXt2Lm5vZGVUeXBlLGcubm9kZVR5cGV9Y2F0Y2goZSl7ZD1udWxsO2JyZWFrIGV9dmFyIHc9MCxFPS0xLFQ9LTEsTz0wLFM9MCx4PXAsUD1udWxsO3Q6Zm9yKDs7KXtmb3IodmFyIFI7eCE9PXZ8fDAhPT1tJiYzIT09eC5ub2RlVHlwZXx8KEU9dyttKSx4IT09Z3x8MCE9PWImJjMhPT14Lm5vZGVUeXBlfHwoVD13K2IpLDM9PT14Lm5vZGVUeXBlJiYodys9eC5ub2RlVmFsdWUubGVuZ3RoKSxudWxsIT09KFI9eC5maXJzdENoaWxkKTspUD14LHg9Ujtmb3IoOzspe2lmKHg9PT1wKWJyZWFrIHQ7aWYoUD09PXYmJisrTz09PW0mJihFPXcpLFA9PT1nJiYrK1M9PT1iJiYoVD13KSxudWxsIT09KFI9eC5uZXh0U2libGluZykpYnJlYWs7UD0oeD1QKS5wYXJlbnROb2RlfXg9Un1kPS0xPT09RXx8LTE9PT1UP251bGw6e3N0YXJ0OkUsZW5kOlR9fWVsc2UgZD1udWxsfXZhciBDPWR8fHtzdGFydDowLGVuZDowfX1lbHNlIEM9bnVsbDtmb3IoX3I9e2ZvY3VzZWRFbGVtOnAsc2VsZWN0aW9uUmFuZ2U6Q30seG49ITEsV2k9ZjtudWxsIT09V2k7KXt2YXIgaz0hMSxOPXZvaWQgMDt0cnl7Zm9yKDtudWxsIT09V2k7KXtpZigyNTYmV2kuZWZmZWN0VGFnKXt2YXIgQT1XaS5hbHRlcm5hdGU7ZTp7dmFyIEk9V2k7c3dpdGNoKEkudGFnKXtjYXNlIDE6aWYoMjU2JkkuZWZmZWN0VGFnJiZudWxsIT09QSl7dmFyIEQ9QS5tZW1vaXplZFByb3BzLGo9QS5tZW1vaXplZFN0YXRlLEw9SS5zdGF0ZU5vZGU7TC5wcm9wcz1JLm1lbW9pemVkUHJvcHMsTC5zdGF0ZT1JLm1lbW9pemVkU3RhdGU7dmFyIE09TC5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZShELGopO0wuX19yZWFjdEludGVybmFsU25hcHNob3RCZWZvcmVVcGRhdGU9TX1icmVhayBlO2Nhc2UgMzpjYXNlIDU6Y2FzZSA2OmNhc2UgNDpjYXNlIDE3OmJyZWFrIGU7ZGVmYXVsdDphKCIxNjMiKX19fVdpPVdpLm5leHRFZmZlY3R9fWNhdGNoKGUpe2s9ITAsTj1lfWsmJihudWxsPT09V2kmJmEoIjE3OCIpLFZpKFdpLE4pLG51bGwhPT1XaSYmKFdpPVdpLm5leHRFZmZlY3QpKX1mb3IoV2k9ZjtudWxsIT09V2k7KXt2YXIgRj0hMSxVPXZvaWQgMDt0cnl7Zm9yKDtudWxsIT09V2k7KXt2YXIgVz1XaS5lZmZlY3RUYWc7aWYoMTYmVyYmYXIoV2kuc3RhdGVOb2RlLCIiKSwxMjgmVyl7dmFyICQ9V2kuYWx0ZXJuYXRlO2lmKG51bGwhPT0kKXt2YXIgRz0kLnJlZjtudWxsIT09RyYmKCJmdW5jdGlvbiI9PXR5cGVvZiBHP0cobnVsbCk6Ry5jdXJyZW50PW51bGwpfX1zd2l0Y2goMTQmVyl7Y2FzZSAyOk9pKFdpKSxXaS5lZmZlY3RUYWcmPS0zO2JyZWFrO2Nhc2UgNjpPaShXaSksV2kuZWZmZWN0VGFnJj0tMyx4aShXaS5hbHRlcm5hdGUsV2kpO2JyZWFrO2Nhc2UgNDp4aShXaS5hbHRlcm5hdGUsV2kpO2JyZWFrO2Nhc2UgODp2YXIgQj1XaTtTaShCKTt2YXIgcT1CO3EucmV0dXJuPW51bGwscS5jaGlsZD1udWxsLHEuYWx0ZXJuYXRlJiYocS5hbHRlcm5hdGUuY2hpbGQ9bnVsbCxxLmFsdGVybmF0ZS5yZXR1cm49bnVsbCl9V2k9V2kubmV4dEVmZmVjdH19Y2F0Y2goZSl7Rj0hMCxVPWV9RiYmKG51bGw9PT1XaSYmYSgiMTc4IiksVmkoV2ksVSksbnVsbCE9PVdpJiYoV2k9V2kubmV4dEVmZmVjdCkpfXZhciB6PV9yLEg9Rm4oKSxWPXouZm9jdXNlZEVsZW0sWT16LnNlbGVjdGlvblJhbmdlO2lmKEghPT1WJiZWJiZWLm93bmVyRG9jdW1lbnQmJmZ1bmN0aW9uIGUodCxuKXtyZXR1cm4hKCF0fHwhbikmJih0PT09bnx8KCF0fHwzIT09dC5ub2RlVHlwZSkmJihuJiYzPT09bi5ub2RlVHlwZT9lKHQsbi5wYXJlbnROb2RlKToiY29udGFpbnMiaW4gdD90LmNvbnRhaW5zKG4pOiEhdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiYmISEoMTYmdC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbihuKSkpKX0oVi5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudCxWKSl7aWYobnVsbCE9PVkmJlVuKFYpKXt2YXIgSz1ZLnN0YXJ0LFE9WS5lbmQ7aWYodm9pZCAwPT09USYmKFE9SyksInNlbGVjdGlvblN0YXJ0ImluIFYpVi5zZWxlY3Rpb25TdGFydD1LLFYuc2VsZWN0aW9uRW5kPU1hdGgubWluKFEsVi52YWx1ZS5sZW5ndGgpO2Vsc2V7dmFyIFg9Vi5vd25lckRvY3VtZW50fHxkb2N1bWVudCxKPShYJiZYLmRlZmF1bHRWaWV3fHx3aW5kb3cpLmdldFNlbGVjdGlvbigpLFo9Vi50ZXh0Q29udGVudC5sZW5ndGgsZWU9TWF0aC5taW4oWS5zdGFydCxaKSx0ZT12b2lkIDA9PT1ZLmVuZD9lZTpNYXRoLm1pbihZLmVuZCxaKTtpZighSi5leHRlbmQmJmVlPnRlKXt2YXIgbmU9dGU7dGU9ZWUsZWU9bmV9dmFyIHJlPU1uKFYsZWUpLG9lPU1uKFYsdGUpO2lmKHJlJiZvZSYmKDEhPT1KLnJhbmdlQ291bnR8fEouYW5jaG9yTm9kZSE9PXJlLm5vZGV8fEouYW5jaG9yT2Zmc2V0IT09cmUub2Zmc2V0fHxKLmZvY3VzTm9kZSE9PW9lLm5vZGV8fEouZm9jdXNPZmZzZXQhPT1vZS5vZmZzZXQpKXt2YXIgaWU9WC5jcmVhdGVSYW5nZSgpO2llLnNldFN0YXJ0KHJlLm5vZGUscmUub2Zmc2V0KSxKLnJlbW92ZUFsbFJhbmdlcygpLGVlPnRlPyhKLmFkZFJhbmdlKGllKSxKLmV4dGVuZChvZS5ub2RlLG9lLm9mZnNldCkpOihpZS5zZXRFbmQob2Uubm9kZSxvZS5vZmZzZXQpLEouYWRkUmFuZ2UoaWUpKX19fWZvcih2YXIgYWU9W10sdWU9Vjt1ZT11ZS5wYXJlbnROb2RlOykxPT09dWUubm9kZVR5cGUmJmFlLnB1c2goe2VsZW1lbnQ6dWUsbGVmdDp1ZS5zY3JvbGxMZWZ0LHRvcDp1ZS5zY3JvbGxUb3B9KTsiZnVuY3Rpb24iPT10eXBlb2YgVi5mb2N1cyYmVi5mb2N1cygpO2Zvcih2YXIgY2U9MDtjZTxhZS5sZW5ndGg7Y2UrKyl7dmFyIGxlPWFlW2NlXTtsZS5lbGVtZW50LnNjcm9sbExlZnQ9bGUubGVmdCxsZS5lbGVtZW50LnNjcm9sbFRvcD1sZS50b3B9fWZvcihfcj1udWxsLHhuPSEheXIseXI9bnVsbCxlLmN1cnJlbnQ9dCxXaT1mO251bGwhPT1XaTspe3ZhciBzZT0hMSxmZT12b2lkIDA7dHJ5e2Zvcig7bnVsbCE9PVdpOyl7dmFyIHBlPVdpLmVmZmVjdFRhZztpZigzNiZwZSl7dmFyIGRlPXZvaWQgMCxoZT1XaS5hbHRlcm5hdGUseWU9V2k7c3dpdGNoKHllLnRhZyl7Y2FzZSAxOnZhciBfZT15ZS5zdGF0ZU5vZGU7aWYoNCZ5ZS5lZmZlY3RUYWcpaWYobnVsbD09PWhlKV9lLnByb3BzPXllLm1lbW9pemVkUHJvcHMsX2Uuc3RhdGU9eWUubWVtb2l6ZWRTdGF0ZSxfZS5jb21wb25lbnREaWRNb3VudCgpO2Vsc2V7dmFyIHZlPWhlLm1lbW9pemVkUHJvcHMsbWU9aGUubWVtb2l6ZWRTdGF0ZTtfZS5wcm9wcz15ZS5tZW1vaXplZFByb3BzLF9lLnN0YXRlPXllLm1lbW9pemVkU3RhdGUsX2UuY29tcG9uZW50RGlkVXBkYXRlKHZlLG1lLF9lLl9fcmVhY3RJbnRlcm5hbFNuYXBzaG90QmVmb3JlVXBkYXRlKX12YXIgZ2U9eWUudXBkYXRlUXVldWU7bnVsbCE9PWdlJiYoX2UucHJvcHM9eWUubWVtb2l6ZWRQcm9wcyxfZS5zdGF0ZT15ZS5tZW1vaXplZFN0YXRlLGZvKDAsZ2UsX2UpKTticmVhaztjYXNlIDM6dmFyIGJlPXllLnVwZGF0ZVF1ZXVlO2lmKG51bGwhPT1iZSl7dmFyIHdlPW51bGw7aWYobnVsbCE9PXllLmNoaWxkKXN3aXRjaCh5ZS5jaGlsZC50YWcpe2Nhc2UgNTp3ZT15ZS5jaGlsZC5zdGF0ZU5vZGU7YnJlYWs7Y2FzZSAxOndlPXllLmNoaWxkLnN0YXRlTm9kZX1mbygwLGJlLHdlKX1icmVhaztjYXNlIDU6dmFyIEVlPXllLnN0YXRlTm9kZTtudWxsPT09aGUmJjQmeWUuZWZmZWN0VGFnJiZ2cih5ZS50eXBlLHllLm1lbW9pemVkUHJvcHMpJiZFZS5mb2N1cygpO2JyZWFrO2Nhc2UgNjpjYXNlIDQ6Y2FzZSAxMjpicmVhaztjYXNlIDEzOmlmKDMyJnllLmVmZmVjdFRhZyl7eWUubWVtb2l6ZWRTdGF0ZT17YWxyZWFkeUNhcHR1cmVkOiEwLGRpZFRpbWVvdXQ6ITEsdGltZWRPdXRBdDowfSxYaSh5ZSwxKTticmVha312YXIgVGU9bnVsbCE9PWhlP2hlLm1lbW9pemVkU3RhdGU6bnVsbCxPZT15ZS5tZW1vaXplZFN0YXRlLFNlPW51bGwhPT1UZSYmVGUuZGlkVGltZW91dCx4ZT15ZTtpZihudWxsPT09T2U/ZGU9ITE6KGRlPU9lLmRpZFRpbWVvdXQpJiYoeGU9eWUuY2hpbGQsT2UuYWxyZWFkeUNhcHR1cmVkPSExLDA9PT1PZS50aW1lZE91dEF0JiYoT2UudGltZWRPdXRBdD1TYSgpKSksZGUhPT1TZSYmbnVsbCE9PXhlKWU6Zm9yKHZhciBQZT14ZSxSZT1kZSxDZT1QZTs7KXtpZig1PT09Q2UudGFnKXt2YXIga2U9Q2Uuc3RhdGVOb2RlO2lmKFJlKWtlLnN0eWxlLmRpc3BsYXk9Im5vbmUiO2Vsc2V7dmFyIE5lPUNlLnN0YXRlTm9kZSxBZT1DZS5tZW1vaXplZFByb3BzLnN0eWxlLEllPW51bGwhPUFlJiZBZS5oYXNPd25Qcm9wZXJ0eSgiZGlzcGxheSIpP0FlLmRpc3BsYXk6bnVsbDtOZS5zdHlsZS5kaXNwbGF5PUllfX1lbHNlIGlmKDY9PT1DZS50YWcpQ2Uuc3RhdGVOb2RlLm5vZGVWYWx1ZT1SZT8iIjpDZS5tZW1vaXplZFByb3BzO2Vsc2UgaWYobnVsbCE9PUNlLmNoaWxkKXtDZS5jaGlsZC5yZXR1cm49Q2UsQ2U9Q2UuY2hpbGQ7Y29udGludWV9aWYoQ2U9PT1QZSlicmVhayBlO2Zvcig7bnVsbD09PUNlLnNpYmxpbmc7KXtpZihudWxsPT09Q2UucmV0dXJufHxDZS5yZXR1cm49PT1QZSlicmVhayBlO0NlPUNlLnJldHVybn1DZS5zaWJsaW5nLnJldHVybj1DZS5yZXR1cm4sQ2U9Q2Uuc2libGluZ31icmVhaztjYXNlIDE3OmJyZWFrO2RlZmF1bHQ6YSgiMTYzIil9fWlmKDEyOCZwZSl7dmFyIERlPVdpLnJlZjtpZihudWxsIT09RGUpe3ZhciBqZT1XaS5zdGF0ZU5vZGU7c3dpdGNoKFdpLnRhZyl7Y2FzZSA1OnZhciBMZT1qZTticmVhaztkZWZhdWx0OkxlPWplfSJmdW5jdGlvbiI9PXR5cGVvZiBEZT9EZShMZSk6RGUuY3VycmVudD1MZX19dmFyIE1lPVdpLm5leHRFZmZlY3Q7V2kubmV4dEVmZmVjdD1udWxsLFdpPU1lfX1jYXRjaChlKXtzZT0hMCxmZT1lfXNlJiYobnVsbD09PVdpJiZhKCIxNzgiKSxWaShXaSxmZSksbnVsbCE9PVdpJiYoV2k9V2kubmV4dEVmZmVjdCkpfURpPSRpPSExLCJmdW5jdGlvbiI9PXR5cGVvZiBVciYmVXIodC5zdGF0ZU5vZGUpO3ZhciBGZT10LmV4cGlyYXRpb25UaW1lLFVlPXQuY2hpbGRFeHBpcmF0aW9uVGltZSxXZT0wPT09RmV8fDAhPT1VZSYmVWU8RmU/VWU6RmU7MD09PVdlJiYoR2k9bnVsbCksZS5leHBpcmF0aW9uVGltZT1XZSxlLmZpbmlzaGVkV29yaz1udWxsfWZ1bmN0aW9uIElhKCl7cmV0dXJuISF1YXx8IShudWxsPT09c2F8fHNhLnRpbWVSZW1haW5pbmcoKT53YSkmJih1YT0hMCl9ZnVuY3Rpb24gRGEoZSl7bnVsbD09PW9hJiZhKCIyNDYiKSxvYS5leHBpcmF0aW9uVGltZT0wLGNhfHwoY2E9ITAsbGE9ZSl9ZnVuY3Rpb24gamEoZSx0KXt2YXIgbj1mYTtmYT0hMDt0cnl7cmV0dXJuIGUodCl9ZmluYWxseXsoZmE9bil8fHJhfHxDYSgxLG51bGwpfX1mdW5jdGlvbiBMYShlLHQpe2lmKGZhJiYhcGEpe3BhPSEwO3RyeXtyZXR1cm4gZSh0KX1maW5hbGx5e3BhPSExfX1yZXR1cm4gZSh0KX1mdW5jdGlvbiBNYShlLHQsbil7aWYoZGEpcmV0dXJuIGUodCxuKTtmYXx8cmF8fDA9PT1hYXx8KENhKGFhLG51bGwpLGFhPTApO3ZhciByPWRhLG89ZmE7ZmE9ZGE9ITA7dHJ5e3JldHVybiBlKHQsbil9ZmluYWxseXtkYT1yLChmYT1vKXx8cmF8fENhKDEsbnVsbCl9fWZ1bmN0aW9uIEZhKGUsdCxuLHIsbyl7dmFyIGk9dC5jdXJyZW50O2U6aWYobil7dDp7Mj09PXJuKG49bi5fcmVhY3RJbnRlcm5hbEZpYmVyKSYmMT09PW4udGFnfHxhKCIxNzAiKTt2YXIgdT1uO2Rve3N3aXRjaCh1LnRhZyl7Y2FzZSAzOnU9dS5zdGF0ZU5vZGUuY29udGV4dDticmVhayB0O2Nhc2UgMTppZihBcih1LnR5cGUpKXt1PXUuc3RhdGVOb2RlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWVyZ2VkQ2hpbGRDb250ZXh0O2JyZWFrIHR9fXU9dS5yZXR1cm59d2hpbGUobnVsbCE9PXUpO2EoIjE3MSIpLHU9dm9pZCAwfWlmKDE9PT1uLnRhZyl7dmFyIGM9bi50eXBlO2lmKEFyKGMpKXtuPUxyKG4sYyx1KTticmVhayBlfX1uPXV9ZWxzZSBuPVByO3JldHVybiBudWxsPT09dC5jb250ZXh0P3QuY29udGV4dD1uOnQucGVuZGluZ0NvbnRleHQ9bix0PW8sKG89b28ocikpLnBheWxvYWQ9e2VsZW1lbnQ6ZX0sbnVsbCE9PSh0PXZvaWQgMD09PXQ/bnVsbDp0KSYmKG8uY2FsbGJhY2s9dCksYW8oaSxvKSxYaShpLHIpLHJ9ZnVuY3Rpb24gVWEoZSx0LG4scil7dmFyIG89dC5jdXJyZW50O3JldHVybiBGYShlLHQsbixvPVlpKFNhKCksbykscil9ZnVuY3Rpb24gV2EoZSl7aWYoIShlPWUuY3VycmVudCkuY2hpbGQpcmV0dXJuIG51bGw7c3dpdGNoKGUuY2hpbGQudGFnKXtjYXNlIDU6ZGVmYXVsdDpyZXR1cm4gZS5jaGlsZC5zdGF0ZU5vZGV9fWZ1bmN0aW9uICRhKGUpe3ZhciB0PTIrMjUqKDErKChTYSgpLTIrNTAwKS8yNXwwKSk7dDw9QWkmJih0PUFpKzEpLHRoaXMuX2V4cGlyYXRpb25UaW1lPUFpPXQsdGhpcy5fcm9vdD1lLHRoaXMuX2NhbGxiYWNrcz10aGlzLl9uZXh0PW51bGwsdGhpcy5faGFzQ2hpbGRyZW49dGhpcy5fZGlkQ29tcGxldGU9ITEsdGhpcy5fY2hpbGRyZW49bnVsbCx0aGlzLl9kZWZlcj0hMH1mdW5jdGlvbiBHYSgpe3RoaXMuX2NhbGxiYWNrcz1udWxsLHRoaXMuX2RpZENvbW1pdD0hMSx0aGlzLl9vbkNvbW1pdD10aGlzLl9vbkNvbW1pdC5iaW5kKHRoaXMpfWZ1bmN0aW9uIEJhKGUsdCxuKXtlPXtjdXJyZW50OnQ9QnIoMyxudWxsLG51bGwsdD8zOjApLGNvbnRhaW5lckluZm86ZSxwZW5kaW5nQ2hpbGRyZW46bnVsbCxlYXJsaWVzdFBlbmRpbmdUaW1lOjAsbGF0ZXN0UGVuZGluZ1RpbWU6MCxlYXJsaWVzdFN1c3BlbmRlZFRpbWU6MCxsYXRlc3RTdXNwZW5kZWRUaW1lOjAsbGF0ZXN0UGluZ2VkVGltZTowLGRpZEVycm9yOiExLHBlbmRpbmdDb21taXRFeHBpcmF0aW9uVGltZTowLGZpbmlzaGVkV29yazpudWxsLHRpbWVvdXRIYW5kbGU6LTEsY29udGV4dDpudWxsLHBlbmRpbmdDb250ZXh0Om51bGwsaHlkcmF0ZTpuLG5leHRFeHBpcmF0aW9uVGltZVRvV29ya09uOjAsZXhwaXJhdGlvblRpbWU6MCxmaXJzdEJhdGNoOm51bGwsbmV4dFNjaGVkdWxlZFJvb3Q6bnVsbH0sdGhpcy5faW50ZXJuYWxSb290PXQuc3RhdGVOb2RlPWV9ZnVuY3Rpb24gcWEoZSl7cmV0dXJuISghZXx8MSE9PWUubm9kZVR5cGUmJjkhPT1lLm5vZGVUeXBlJiYxMSE9PWUubm9kZVR5cGUmJig4IT09ZS5ub2RlVHlwZXx8IiByZWFjdC1tb3VudC1wb2ludC11bnN0YWJsZSAiIT09ZS5ub2RlVmFsdWUpKX1mdW5jdGlvbiB6YShlLHQsbixyLG8pe3FhKG4pfHxhKCIyMDAiKTt2YXIgaT1uLl9yZWFjdFJvb3RDb250YWluZXI7aWYoaSl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIG8pe3ZhciB1PW87bz1mdW5jdGlvbigpe3ZhciBlPVdhKGkuX2ludGVybmFsUm9vdCk7dS5jYWxsKGUpfX1udWxsIT1lP2kubGVnYWN5X3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyKGUsdCxvKTppLnJlbmRlcih0LG8pfWVsc2V7aWYoaT1uLl9yZWFjdFJvb3RDb250YWluZXI9ZnVuY3Rpb24oZSx0KXtpZih0fHwodD0hKCEodD1lPzk9PT1lLm5vZGVUeXBlP2UuZG9jdW1lbnRFbGVtZW50OmUuZmlyc3RDaGlsZDpudWxsKXx8MSE9PXQubm9kZVR5cGV8fCF0Lmhhc0F0dHJpYnV0ZSgiZGF0YS1yZWFjdHJvb3QiKSkpLCF0KWZvcih2YXIgbjtuPWUubGFzdENoaWxkOyllLnJlbW92ZUNoaWxkKG4pO3JldHVybiBuZXcgQmEoZSwhMSx0KX0obixyKSwiZnVuY3Rpb24iPT10eXBlb2Ygbyl7dmFyIGM9bztvPWZ1bmN0aW9uKCl7dmFyIGU9V2EoaS5faW50ZXJuYWxSb290KTtjLmNhbGwoZSl9fUxhKGZ1bmN0aW9uKCl7bnVsbCE9ZT9pLmxlZ2FjeV9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcihlLHQsbyk6aS5yZW5kZXIodCxvKX0pfXJldHVybiBXYShpLl9pbnRlcm5hbFJvb3QpfWZ1bmN0aW9uIEhhKGUsdCl7dmFyIG49Mjxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOm51bGw7cmV0dXJuIHFhKHQpfHxhKCIyMDAiKSxmdW5jdGlvbihlLHQsbil7dmFyIHI9Mzxhcmd1bWVudHMubGVuZ3RoJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10/YXJndW1lbnRzWzNdOm51bGw7cmV0dXJueyQkdHlwZW9mOlFlLGtleTpudWxsPT1yP251bGw6IiIrcixjaGlsZHJlbjplLGNvbnRhaW5lckluZm86dCxpbXBsZW1lbnRhdGlvbjpufX0oZSx0LG51bGwsbil9UmU9ZnVuY3Rpb24oZSx0LG4pe3N3aXRjaCh0KXtjYXNlImlucHV0IjppZihPdChlLG4pLHQ9bi5uYW1lLCJyYWRpbyI9PT1uLnR5cGUmJm51bGwhPXQpe2ZvcihuPWU7bi5wYXJlbnROb2RlOyluPW4ucGFyZW50Tm9kZTtmb3Iobj1uLnF1ZXJ5U2VsZWN0b3JBbGwoImlucHV0W25hbWU9IitKU09OLnN0cmluZ2lmeSgiIit0KSsnXVt0eXBlPSJyYWRpbyJdJyksdD0wO3Q8bi5sZW5ndGg7dCsrKXt2YXIgcj1uW3RdO2lmKHIhPT1lJiZyLmZvcm09PT1lLmZvcm0pe3ZhciBvPVcocik7b3x8YSgiOTAiKSx6ZShyKSxPdChyLG8pfX19YnJlYWs7Y2FzZSJ0ZXh0YXJlYSI6Sm4oZSxuKTticmVhaztjYXNlInNlbGVjdCI6bnVsbCE9KHQ9bi52YWx1ZSkmJktuKGUsISFuLm11bHRpcGxlLHQsITEpfX0sJGEucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihlKXt0aGlzLl9kZWZlcnx8YSgiMjUwIiksdGhpcy5faGFzQ2hpbGRyZW49ITAsdGhpcy5fY2hpbGRyZW49ZTt2YXIgdD10aGlzLl9yb290Ll9pbnRlcm5hbFJvb3Qsbj10aGlzLl9leHBpcmF0aW9uVGltZSxyPW5ldyBHYTtyZXR1cm4gRmEoZSx0LG51bGwsbixyLl9vbkNvbW1pdCkscn0sJGEucHJvdG90eXBlLnRoZW49ZnVuY3Rpb24oZSl7aWYodGhpcy5fZGlkQ29tcGxldGUpZSgpO2Vsc2V7dmFyIHQ9dGhpcy5fY2FsbGJhY2tzO251bGw9PT10JiYodD10aGlzLl9jYWxsYmFja3M9W10pLHQucHVzaChlKX19LCRhLnByb3RvdHlwZS5jb21taXQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9yb290Ll9pbnRlcm5hbFJvb3QsdD1lLmZpcnN0QmF0Y2g7aWYodGhpcy5fZGVmZXImJm51bGwhPT10fHxhKCIyNTEiKSx0aGlzLl9oYXNDaGlsZHJlbil7dmFyIG49dGhpcy5fZXhwaXJhdGlvblRpbWU7aWYodCE9PXRoaXMpe3RoaXMuX2hhc0NoaWxkcmVuJiYobj10aGlzLl9leHBpcmF0aW9uVGltZT10Ll9leHBpcmF0aW9uVGltZSx0aGlzLnJlbmRlcih0aGlzLl9jaGlsZHJlbikpO2Zvcih2YXIgcj1udWxsLG89dDtvIT09dGhpczspcj1vLG89by5fbmV4dDtudWxsPT09ciYmYSgiMjUxIiksci5fbmV4dD1vLl9uZXh0LHRoaXMuX25leHQ9dCxlLmZpcnN0QmF0Y2g9dGhpc310aGlzLl9kZWZlcj0hMSxrYShlLG4pLHQ9dGhpcy5fbmV4dCx0aGlzLl9uZXh0PW51bGwsbnVsbCE9PSh0PWUuZmlyc3RCYXRjaD10KSYmdC5faGFzQ2hpbGRyZW4mJnQucmVuZGVyKHQuX2NoaWxkcmVuKX1lbHNlIHRoaXMuX25leHQ9bnVsbCx0aGlzLl9kZWZlcj0hMX0sJGEucHJvdG90eXBlLl9vbkNvbXBsZXRlPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX2RpZENvbXBsZXRlKXt0aGlzLl9kaWRDb21wbGV0ZT0hMDt2YXIgZT10aGlzLl9jYWxsYmFja3M7aWYobnVsbCE9PWUpZm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0KyspKDAsZVt0XSkoKX19LEdhLnByb3RvdHlwZS50aGVuPWZ1bmN0aW9uKGUpe2lmKHRoaXMuX2RpZENvbW1pdCllKCk7ZWxzZXt2YXIgdD10aGlzLl9jYWxsYmFja3M7bnVsbD09PXQmJih0PXRoaXMuX2NhbGxiYWNrcz1bXSksdC5wdXNoKGUpfX0sR2EucHJvdG90eXBlLl9vbkNvbW1pdD1mdW5jdGlvbigpe2lmKCF0aGlzLl9kaWRDb21taXQpe3RoaXMuX2RpZENvbW1pdD0hMDt2YXIgZT10aGlzLl9jYWxsYmFja3M7aWYobnVsbCE9PWUpZm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0Kyspe3ZhciBuPWVbdF07ImZ1bmN0aW9uIiE9dHlwZW9mIG4mJmEoIjE5MSIsbiksbigpfX19LEJhLnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLl9pbnRlcm5hbFJvb3Qscj1uZXcgR2E7cmV0dXJuIG51bGwhPT0odD12b2lkIDA9PT10P251bGw6dCkmJnIudGhlbih0KSxVYShlLG4sbnVsbCxyLl9vbkNvbW1pdCkscn0sQmEucHJvdG90eXBlLnVubW91bnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5faW50ZXJuYWxSb290LG49bmV3IEdhO3JldHVybiBudWxsIT09KGU9dm9pZCAwPT09ZT9udWxsOmUpJiZuLnRoZW4oZSksVWEobnVsbCx0LG51bGwsbi5fb25Db21taXQpLG59LEJhLnByb3RvdHlwZS5sZWdhY3lfcmVuZGVyU3VidHJlZUludG9Db250YWluZXI9ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMuX2ludGVybmFsUm9vdCxvPW5ldyBHYTtyZXR1cm4gbnVsbCE9PShuPXZvaWQgMD09PW4/bnVsbDpuKSYmby50aGVuKG4pLFVhKHQscixlLG8uX29uQ29tbWl0KSxvfSxCYS5wcm90b3R5cGUuY3JlYXRlQmF0Y2g9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgJGEodGhpcyksdD1lLl9leHBpcmF0aW9uVGltZSxuPXRoaXMuX2ludGVybmFsUm9vdCxyPW4uZmlyc3RCYXRjaDtpZihudWxsPT09ciluLmZpcnN0QmF0Y2g9ZSxlLl9uZXh0PW51bGw7ZWxzZXtmb3Iobj1udWxsO251bGwhPT1yJiZyLl9leHBpcmF0aW9uVGltZTw9dDspbj1yLHI9ci5fbmV4dDtlLl9uZXh0PXIsbnVsbCE9PW4mJihuLl9uZXh0PWUpfXJldHVybiBlfSxEZT1qYSxqZT1NYSxMZT1mdW5jdGlvbigpe3JhfHwwPT09YWF8fChDYShhYSxudWxsKSxhYT0wKX07dmFyIFZhPXtjcmVhdGVQb3J0YWw6SGEsZmluZERPTU5vZGU6ZnVuY3Rpb24oZSl7aWYobnVsbD09ZSlyZXR1cm4gbnVsbDtpZigxPT09ZS5ub2RlVHlwZSlyZXR1cm4gZTt2YXIgdD1lLl9yZWFjdEludGVybmFsRmliZXI7cmV0dXJuIHZvaWQgMD09PXQmJigiZnVuY3Rpb24iPT10eXBlb2YgZS5yZW5kZXI/YSgiMTg4Iik6YSgiMjY4IixPYmplY3Qua2V5cyhlKSkpLGU9bnVsbD09PShlPWFuKHQpKT9udWxsOmUuc3RhdGVOb2RlfSxoeWRyYXRlOmZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gemEobnVsbCxlLHQsITAsbil9LHJlbmRlcjpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHphKG51bGwsZSx0LCExLG4pfSx1bnN0YWJsZV9yZW5kZXJTdWJ0cmVlSW50b0NvbnRhaW5lcjpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4obnVsbD09ZXx8dm9pZCAwPT09ZS5fcmVhY3RJbnRlcm5hbEZpYmVyKSYmYSgiMzgiKSx6YShlLHQsbiwhMSxyKX0sdW5tb3VudENvbXBvbmVudEF0Tm9kZTpmdW5jdGlvbihlKXtyZXR1cm4gcWEoZSl8fGEoIjQwIiksISFlLl9yZWFjdFJvb3RDb250YWluZXImJihMYShmdW5jdGlvbigpe3phKG51bGwsbnVsbCxlLCExLGZ1bmN0aW9uKCl7ZS5fcmVhY3RSb290Q29udGFpbmVyPW51bGx9KX0pLCEwKX0sdW5zdGFibGVfY3JlYXRlUG9ydGFsOmZ1bmN0aW9uKCl7cmV0dXJuIEhhLmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpfSx1bnN0YWJsZV9iYXRjaGVkVXBkYXRlczpqYSx1bnN0YWJsZV9pbnRlcmFjdGl2ZVVwZGF0ZXM6TWEsZmx1c2hTeW5jOmZ1bmN0aW9uKGUsdCl7cmEmJmEoIjE4NyIpO3ZhciBuPWZhO2ZhPSEwO3RyeXtyZXR1cm4gSmkoZSx0KX1maW5hbGx5e2ZhPW4sQ2EoMSxudWxsKX19LHVuc3RhYmxlX2ZsdXNoQ29udHJvbGxlZDpmdW5jdGlvbihlKXt2YXIgdD1mYTtmYT0hMDt0cnl7SmkoZSl9ZmluYWxseXsoZmE9dCl8fHJhfHxDYSgxLG51bGwpfX0sX19TRUNSRVRfSU5URVJOQUxTX0RPX05PVF9VU0VfT1JfWU9VX1dJTExfQkVfRklSRUQ6e0V2ZW50czpbRixVLFcsTi5pbmplY3RFdmVudFBsdWdpbnNCeU5hbWUsbSxILGZ1bmN0aW9uKGUpe3goZSx6KX0sQWUsSWUsa24sSV19LHVuc3RhYmxlX2NyZWF0ZVJvb3Q6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gcWEoZSl8fGEoIjI3OCIpLG5ldyBCYShlLCEwLG51bGwhPXQmJiEwPT09dC5oeWRyYXRlKX19OyFmdW5jdGlvbihlKXt2YXIgdD1lLmZpbmRGaWJlckJ5SG9zdEluc3RhbmNlOyhmdW5jdGlvbihlKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXylyZXR1cm4hMTt2YXIgdD1fX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX187aWYodC5pc0Rpc2FibGVkfHwhdC5zdXBwb3J0c0ZpYmVyKXJldHVybiEwO3RyeXt2YXIgbj10LmluamVjdChlKTtVcj0kcihmdW5jdGlvbihlKXtyZXR1cm4gdC5vbkNvbW1pdEZpYmVyUm9vdChuLGUpfSksV3I9JHIoZnVuY3Rpb24oZSl7cmV0dXJuIHQub25Db21taXRGaWJlclVubW91bnQobixlKX0pfWNhdGNoKGUpe319KShvKHt9LGUse2ZpbmRIb3N0SW5zdGFuY2VCeUZpYmVyOmZ1bmN0aW9uKGUpe3JldHVybiBudWxsPT09KGU9YW4oZSkpP251bGw6ZS5zdGF0ZU5vZGV9LGZpbmRGaWJlckJ5SG9zdEluc3RhbmNlOmZ1bmN0aW9uKGUpe3JldHVybiB0P3QoZSk6bnVsbH19KSl9KHtmaW5kRmliZXJCeUhvc3RJbnN0YW5jZTpNLGJ1bmRsZVR5cGU6MCx2ZXJzaW9uOiIxNi42LjAiLHJlbmRlcmVyUGFja2FnZU5hbWU6InJlYWN0LWRvbSJ9KTt2YXIgWWE9e2RlZmF1bHQ6VmF9LEthPVlhJiZWYXx8WWE7ZS5leHBvcnRzPUthLmRlZmF1bHR8fEthfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1uKDI4Mil9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7Ci8qKiBAbGljZW5zZSBSZWFjdCB2MTYuNi4wCiAqIHNjaGVkdWxlci5wcm9kdWN0aW9uLm1pbi5qcwogKgogKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4KICoKICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlCiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4KICovT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPW51bGwsbz0zLGk9LTEsYT0tMSx1PSExLGM9ITEsbD0ib2JqZWN0Ij09dHlwZW9mIHBlcmZvcm1hbmNlJiYiZnVuY3Rpb24iPT10eXBlb2YgcGVyZm9ybWFuY2Uubm93LHM9e3RpbWVSZW1haW5pbmc6bD9mdW5jdGlvbigpe2lmKG51bGwhPT1yJiZyLmV4cGlyYXRpb25UaW1lPGEpcmV0dXJuIDA7dmFyIGU9ZygpLXBlcmZvcm1hbmNlLm5vdygpO3JldHVybiAwPGU/ZTowfTpmdW5jdGlvbigpe2lmKG51bGwhPT1yJiZyLmV4cGlyYXRpb25UaW1lPGEpcmV0dXJuIDA7dmFyIGU9ZygpLURhdGUubm93KCk7cmV0dXJuIDA8ZT9lOjB9LGRpZFRpbWVvdXQ6ITF9O2Z1bmN0aW9uIGYoKXtpZighdSl7dmFyIGU9ci5leHBpcmF0aW9uVGltZTtjP20oKTpjPSEwLHYoaCxlKX19ZnVuY3Rpb24gcCgpe3ZhciBlPXIsdD1yLm5leHQ7aWYocj09PXQpcj1udWxsO2Vsc2V7dmFyIG49ci5wcmV2aW91cztyPW4ubmV4dD10LHQucHJldmlvdXM9bn1lLm5leHQ9ZS5wcmV2aW91cz1udWxsLG49ZS5jYWxsYmFjayx0PWUuZXhwaXJhdGlvblRpbWUsZT1lLnByaW9yaXR5TGV2ZWw7dmFyIGk9byx1PWE7bz1lLGE9dDt0cnl7dmFyIGM9bihzKX1maW5hbGx5e289aSxhPXV9aWYoImZ1bmN0aW9uIj09dHlwZW9mIGMpaWYoYz17Y2FsbGJhY2s6Yyxwcmlvcml0eUxldmVsOmUsZXhwaXJhdGlvblRpbWU6dCxuZXh0Om51bGwscHJldmlvdXM6bnVsbH0sbnVsbD09PXIpcj1jLm5leHQ9Yy5wcmV2aW91cz1jO2Vsc2V7bj1udWxsLGU9cjtkb3tpZihlLmV4cGlyYXRpb25UaW1lPj10KXtuPWU7YnJlYWt9ZT1lLm5leHR9d2hpbGUoZSE9PXIpO251bGw9PT1uP249cjpuPT09ciYmKHI9YyxmKCkpLCh0PW4ucHJldmlvdXMpLm5leHQ9bi5wcmV2aW91cz1jLGMubmV4dD1uLGMucHJldmlvdXM9dH19ZnVuY3Rpb24gZCgpe2lmKC0xPT09aSYmbnVsbCE9PXImJjE9PT1yLnByaW9yaXR5TGV2ZWwpe3U9ITAscy5kaWRUaW1lb3V0PSEwO3RyeXtkb3twKCl9d2hpbGUobnVsbCE9PXImJjE9PT1yLnByaW9yaXR5TGV2ZWwpfWZpbmFsbHl7dT0hMSxudWxsIT09cj9mKCk6Yz0hMX19fWZ1bmN0aW9uIGgoZSl7dT0hMCxzLmRpZFRpbWVvdXQ9ZTt0cnl7aWYoZSlmb3IoO251bGwhPT1yOyl7dmFyIG49dC51bnN0YWJsZV9ub3coKTtpZighKHIuZXhwaXJhdGlvblRpbWU8PW4pKWJyZWFrO2Rve3AoKX13aGlsZShudWxsIT09ciYmci5leHBpcmF0aW9uVGltZTw9bil9ZWxzZSBpZihudWxsIT09cilkb3twKCl9d2hpbGUobnVsbCE9PXImJjA8ZygpLXQudW5zdGFibGVfbm93KCkpfWZpbmFsbHl7dT0hMSxudWxsIT09cj9mKCk6Yz0hMSxkKCl9fXZhciB5LF8sdixtLGcsYj1EYXRlLHc9ImZ1bmN0aW9uIj09dHlwZW9mIHNldFRpbWVvdXQ/c2V0VGltZW91dDp2b2lkIDAsRT0iZnVuY3Rpb24iPT10eXBlb2YgY2xlYXJUaW1lb3V0P2NsZWFyVGltZW91dDp2b2lkIDAsVD0iZnVuY3Rpb24iPT10eXBlb2YgcmVxdWVzdEFuaW1hdGlvbkZyYW1lP3JlcXVlc3RBbmltYXRpb25GcmFtZTp2b2lkIDAsTz0iZnVuY3Rpb24iPT10eXBlb2YgY2FuY2VsQW5pbWF0aW9uRnJhbWU/Y2FuY2VsQW5pbWF0aW9uRnJhbWU6dm9pZCAwO2Z1bmN0aW9uIFMoZSl7eT1UKGZ1bmN0aW9uKHQpe0UoXyksZSh0KX0pLF89dyhmdW5jdGlvbigpe08oeSksZSh0LnVuc3RhYmxlX25vdygpKX0sMTAwKX1pZihsKXt2YXIgeD1wZXJmb3JtYW5jZTt0LnVuc3RhYmxlX25vdz1mdW5jdGlvbigpe3JldHVybiB4Lm5vdygpfX1lbHNlIHQudW5zdGFibGVfbm93PWZ1bmN0aW9uKCl7cmV0dXJuIGIubm93KCl9O2lmKCJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3cuX3NjaGVkTW9jayl7dmFyIFA9d2luZG93Ll9zY2hlZE1vY2s7dj1QWzBdLG09UFsxXSxnPVBbMl19ZWxzZSBpZigidW5kZWZpbmVkIj09dHlwZW9mIHdpbmRvd3x8ImZ1bmN0aW9uIiE9dHlwZW9mIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKXt2YXIgUj1udWxsLEM9LTEsaz1mdW5jdGlvbihlLHQpe2lmKG51bGwhPT1SKXt2YXIgbj1SO1I9bnVsbDt0cnl7Qz10LG4oZSl9ZmluYWxseXtDPS0xfX19O3Y9ZnVuY3Rpb24oZSx0KXstMSE9PUM/c2V0VGltZW91dCh2LDAsZSx0KTooUj1lLHNldFRpbWVvdXQoayx0LCEwLHQpLHNldFRpbWVvdXQoaywxMDczNzQxODIzLCExLDEwNzM3NDE4MjMpKX0sbT1mdW5jdGlvbigpe1I9bnVsbH0sZz1mdW5jdGlvbigpe3JldHVybiAxLzB9LHQudW5zdGFibGVfbm93PWZ1bmN0aW9uKCl7cmV0dXJuLTE9PT1DPzA6Q319ZWxzZXsidW5kZWZpbmVkIiE9dHlwZW9mIGNvbnNvbGUmJigiZnVuY3Rpb24iIT10eXBlb2YgVCYmY29uc29sZS5lcnJvcigiVGhpcyBicm93c2VyIGRvZXNuJ3Qgc3VwcG9ydCByZXF1ZXN0QW5pbWF0aW9uRnJhbWUuIE1ha2Ugc3VyZSB0aGF0IHlvdSBsb2FkIGEgcG9seWZpbGwgaW4gb2xkZXIgYnJvd3NlcnMuIGh0dHBzOi8vZmIubWUvcmVhY3QtcG9seWZpbGxzIiksImZ1bmN0aW9uIiE9dHlwZW9mIE8mJmNvbnNvbGUuZXJyb3IoIlRoaXMgYnJvd3NlciBkb2Vzbid0IHN1cHBvcnQgY2FuY2VsQW5pbWF0aW9uRnJhbWUuIE1ha2Ugc3VyZSB0aGF0IHlvdSBsb2FkIGEgcG9seWZpbGwgaW4gb2xkZXIgYnJvd3NlcnMuIGh0dHBzOi8vZmIubWUvcmVhY3QtcG9seWZpbGxzIikpO3ZhciBOPW51bGwsQT0hMSxJPS0xLEQ9ITEsaj0hMSxMPTAsTT0zMyxGPTMzO2c9ZnVuY3Rpb24oKXtyZXR1cm4gTH07dmFyIFU9Il9fcmVhY3RJZGxlQ2FsbGJhY2skIitNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24oZSl7aWYoZS5zb3VyY2U9PT13aW5kb3cmJmUuZGF0YT09PVUpe0E9ITEsZT1OO3ZhciBuPUk7Tj1udWxsLEk9LTE7dmFyIHI9dC51bnN0YWJsZV9ub3coKSxvPSExO2lmKDA+PUwtcil7aWYoISgtMSE9PW4mJm48PXIpKXJldHVybiBEfHwoRD0hMCxTKFcpKSxOPWUsdm9pZChJPW4pO289ITB9aWYobnVsbCE9PWUpe2o9ITA7dHJ5e2Uobyl9ZmluYWxseXtqPSExfX19fSwhMSk7dmFyIFc9ZnVuY3Rpb24oZSl7aWYobnVsbCE9PU4pe1MoVyk7dmFyIHQ9ZS1MK0Y7dDxGJiZNPEY/KDg+dCYmKHQ9OCksRj10PE0/TTp0KTpNPXQsTD1lK0YsQXx8KEE9ITAsd2luZG93LnBvc3RNZXNzYWdlKFUsIioiKSl9ZWxzZSBEPSExfTt2PWZ1bmN0aW9uKGUsdCl7Tj1lLEk9dCxqfHwwPnQ/d2luZG93LnBvc3RNZXNzYWdlKFUsIioiKTpEfHwoRD0hMCxTKFcpKX0sbT1mdW5jdGlvbigpe049bnVsbCxBPSExLEk9LTF9fXQudW5zdGFibGVfSW1tZWRpYXRlUHJpb3JpdHk9MSx0LnVuc3RhYmxlX1VzZXJCbG9ja2luZ1ByaW9yaXR5PTIsdC51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eT0zLHQudW5zdGFibGVfSWRsZVByaW9yaXR5PTQsdC51bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHk9ZnVuY3Rpb24oZSxuKXtzd2l0Y2goZSl7Y2FzZSAxOmNhc2UgMjpjYXNlIDM6Y2FzZSA0OmJyZWFrO2RlZmF1bHQ6ZT0zfXZhciByPW8sYT1pO289ZSxpPXQudW5zdGFibGVfbm93KCk7dHJ5e3JldHVybiBuKCl9ZmluYWxseXtvPXIsaT1hLGQoKX19LHQudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjaz1mdW5jdGlvbihlLG4pe3ZhciBhPS0xIT09aT9pOnQudW5zdGFibGVfbm93KCk7aWYoIm9iamVjdCI9PXR5cGVvZiBuJiZudWxsIT09biYmIm51bWJlciI9PXR5cGVvZiBuLnRpbWVvdXQpbj1hK24udGltZW91dDtlbHNlIHN3aXRjaChvKXtjYXNlIDE6bj1hKy0xO2JyZWFrO2Nhc2UgMjpuPWErMjUwO2JyZWFrO2Nhc2UgNDpuPWErMTA3Mzc0MTgyMzticmVhaztkZWZhdWx0Om49YSs1ZTN9aWYoZT17Y2FsbGJhY2s6ZSxwcmlvcml0eUxldmVsOm8sZXhwaXJhdGlvblRpbWU6bixuZXh0Om51bGwscHJldmlvdXM6bnVsbH0sbnVsbD09PXIpcj1lLm5leHQ9ZS5wcmV2aW91cz1lLGYoKTtlbHNle2E9bnVsbDt2YXIgdT1yO2Rve2lmKHUuZXhwaXJhdGlvblRpbWU+bil7YT11O2JyZWFrfXU9dS5uZXh0fXdoaWxlKHUhPT1yKTtudWxsPT09YT9hPXI6YT09PXImJihyPWUsZigpKSwobj1hLnByZXZpb3VzKS5uZXh0PWEucHJldmlvdXM9ZSxlLm5leHQ9YSxlLnByZXZpb3VzPW59cmV0dXJuIGV9LHQudW5zdGFibGVfY2FuY2VsQ2FsbGJhY2s9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5uZXh0O2lmKG51bGwhPT10KXtpZih0PT09ZSlyPW51bGw7ZWxzZXtlPT09ciYmKHI9dCk7dmFyIG49ZS5wcmV2aW91cztuLm5leHQ9dCx0LnByZXZpb3VzPW59ZS5uZXh0PWUucHJldmlvdXM9bnVsbH19LHQudW5zdGFibGVfd3JhcENhbGxiYWNrPWZ1bmN0aW9uKGUpe3ZhciBuPW87cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9byxhPWk7bz1uLGk9dC51bnN0YWJsZV9ub3coKTt0cnl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZpbmFsbHl7bz1yLGk9YSxkKCl9fX0sdC51bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbD1mdW5jdGlvbigpe3JldHVybiBvfX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dmFyIHIsbz0ocj1uKDApKSYmIm9iamVjdCI9PXR5cGVvZiByJiYiZGVmYXVsdCJpbiByP3IuZGVmYXVsdDpyLGk9ZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0sYT1mdW5jdGlvbihlLHQpe2lmKCFlKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIXR8fCJvYmplY3QiIT10eXBlb2YgdCYmImZ1bmN0aW9uIiE9dHlwZW9mIHQ/ZTp0fSx1PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gaSh0aGlzLHQpLGEodGhpcyxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgIit0eXBlb2YgdCk7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx0KTplLl9fcHJvdG9fXz10KX0odCxlKSx0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtyZXR1cm4gby5DaGlsZHJlbi5vbmx5KHRoaXMucHJvcHMuY2hpbGRyZW4pfSx0fShvLkNvbXBvbmVudCk7dC5BcHBDb250YWluZXI9dSx0LmhvdD1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gZX19LHQuYXJlQ29tcG9uZW50c0VxdWFsPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT10fSx0LnNldENvbmZpZz1mdW5jdGlvbigpe30sdC5jb2xkPWZ1bmN0aW9uKGUpe3JldHVybiBlfX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0Ijt2YXIgcj1uKDI4NSk7ZnVuY3Rpb24gbygpe31lLmV4cG9ydHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxuLG8saSxhKXtpZihhIT09cil7dmFyIHU9bmV3IEVycm9yKCJDYWxsaW5nIFByb3BUeXBlcyB2YWxpZGF0b3JzIGRpcmVjdGx5IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGBwcm9wLXR5cGVzYCBwYWNrYWdlLiBVc2UgUHJvcFR5cGVzLmNoZWNrUHJvcFR5cGVzKCkgdG8gY2FsbCB0aGVtLiBSZWFkIG1vcmUgYXQgaHR0cDovL2ZiLm1lL3VzZS1jaGVjay1wcm9wLXR5cGVzIik7dGhyb3cgdS5uYW1lPSJJbnZhcmlhbnQgVmlvbGF0aW9uIix1fX1mdW5jdGlvbiB0KCl7cmV0dXJuIGV9ZS5pc1JlcXVpcmVkPWU7dmFyIG49e2FycmF5OmUsYm9vbDplLGZ1bmM6ZSxudW1iZXI6ZSxvYmplY3Q6ZSxzdHJpbmc6ZSxzeW1ib2w6ZSxhbnk6ZSxhcnJheU9mOnQsZWxlbWVudDplLGluc3RhbmNlT2Y6dCxub2RlOmUsb2JqZWN0T2Y6dCxvbmVPZjp0LG9uZU9mVHlwZTp0LHNoYXBlOnQsZXhhY3Q6dH07cmV0dXJuIG4uY2hlY2tQcm9wVHlwZXM9byxuLlByb3BUeXBlcz1uLG59fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz0iU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQifSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOwovKiogQGxpY2Vuc2UgUmVhY3QgdjE2LjYuMAogKiByZWFjdC1pcy5wcm9kdWN0aW9uLm1pbi5qcwogKgogKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4KICoKICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlCiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4KICovT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pO3ZhciByPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3Isbz1yP1N5bWJvbC5mb3IoInJlYWN0LmVsZW1lbnQiKTo2MDEwMyxpPXI/U3ltYm9sLmZvcigicmVhY3QucG9ydGFsIik6NjAxMDYsYT1yP1N5bWJvbC5mb3IoInJlYWN0LmZyYWdtZW50Iik6NjAxMDcsdT1yP1N5bWJvbC5mb3IoInJlYWN0LnN0cmljdF9tb2RlIik6NjAxMDgsYz1yP1N5bWJvbC5mb3IoInJlYWN0LnByb2ZpbGVyIik6NjAxMTQsbD1yP1N5bWJvbC5mb3IoInJlYWN0LnByb3ZpZGVyIik6NjAxMDkscz1yP1N5bWJvbC5mb3IoInJlYWN0LmNvbnRleHQiKTo2MDExMCxmPXI/U3ltYm9sLmZvcigicmVhY3QuY29uY3VycmVudF9tb2RlIik6NjAxMTEscD1yP1N5bWJvbC5mb3IoInJlYWN0LmZvcndhcmRfcmVmIik6NjAxMTIsZD1yP1N5bWJvbC5mb3IoInJlYWN0LnN1c3BlbnNlIik6NjAxMTMsaD1yP1N5bWJvbC5mb3IoInJlYWN0Lm1lbW8iKTo2MDExNSx5PXI/U3ltYm9sLmZvcigicmVhY3QubGF6eSIpOjYwMTE2O2Z1bmN0aW9uIF8oZSl7aWYoIm9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT09ZSl7dmFyIHQ9ZS4kJHR5cGVvZjtzd2l0Y2godCl7Y2FzZSBvOnN3aXRjaChlPWUudHlwZSl7Y2FzZSBmOmNhc2UgYTpjYXNlIGM6Y2FzZSB1OnJldHVybiBlO2RlZmF1bHQ6c3dpdGNoKGU9ZSYmZS4kJHR5cGVvZil7Y2FzZSBzOmNhc2UgcDpjYXNlIGw6cmV0dXJuIGU7ZGVmYXVsdDpyZXR1cm4gdH19Y2FzZSBpOnJldHVybiB0fX19ZnVuY3Rpb24gdihlKXtyZXR1cm4gXyhlKT09PWZ9dC50eXBlT2Y9Xyx0LkFzeW5jTW9kZT1mLHQuQ29uY3VycmVudE1vZGU9Zix0LkNvbnRleHRDb25zdW1lcj1zLHQuQ29udGV4dFByb3ZpZGVyPWwsdC5FbGVtZW50PW8sdC5Gb3J3YXJkUmVmPXAsdC5GcmFnbWVudD1hLHQuUHJvZmlsZXI9Yyx0LlBvcnRhbD1pLHQuU3RyaWN0TW9kZT11LHQuaXNWYWxpZEVsZW1lbnRUeXBlPWZ1bmN0aW9uKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZXx8ImZ1bmN0aW9uIj09dHlwZW9mIGV8fGU9PT1hfHxlPT09Znx8ZT09PWN8fGU9PT11fHxlPT09ZHx8Im9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT09ZSYmKGUuJCR0eXBlb2Y9PT15fHxlLiQkdHlwZW9mPT09aHx8ZS4kJHR5cGVvZj09PWx8fGUuJCR0eXBlb2Y9PT1zfHxlLiQkdHlwZW9mPT09cCl9LHQuaXNBc3luY01vZGU9ZnVuY3Rpb24oZSl7cmV0dXJuIHYoZSl9LHQuaXNDb25jdXJyZW50TW9kZT12LHQuaXNDb250ZXh0Q29uc3VtZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIF8oZSk9PT1zfSx0LmlzQ29udGV4dFByb3ZpZGVyPWZ1bmN0aW9uKGUpe3JldHVybiBfKGUpPT09bH0sdC5pc0VsZW1lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT09ZSYmZS4kJHR5cGVvZj09PW99LHQuaXNGb3J3YXJkUmVmPWZ1bmN0aW9uKGUpe3JldHVybiBfKGUpPT09cH0sdC5pc0ZyYWdtZW50PWZ1bmN0aW9uKGUpe3JldHVybiBfKGUpPT09YX0sdC5pc1Byb2ZpbGVyPWZ1bmN0aW9uKGUpe3JldHVybiBfKGUpPT09Y30sdC5pc1BvcnRhbD1mdW5jdGlvbihlKXtyZXR1cm4gXyhlKT09PWl9LHQuaXNTdHJpY3RNb2RlPWZ1bmN0aW9uKGUpe3JldHVybiBfKGUpPT09dX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKCFlLndlYnBhY2tQb2x5ZmlsbCl7dmFyIHQ9T2JqZWN0LmNyZWF0ZShlKTt0LmNoaWxkcmVufHwodC5jaGlsZHJlbj1bXSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImxvYWRlZCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHQubH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiaWQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0Lml9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsImV4cG9ydHMiLHtlbnVtZXJhYmxlOiEwfSksdC53ZWJwYWNrUG9seWZpbGw9MX1yZXR1cm4gdH19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Ll9fUmV3aXJlQVBJX189dC5fX1Jlc2V0RGVwZW5kZW5jeV9fPXQuX19zZXRfXz10Ll9fUmV3aXJlX189dC5fX0dldERlcGVuZGVuY3lfXz10Ll9fZ2V0X189dm9pZCAwO3ZhciByPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxvPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LGk9ZnVuY3Rpb24oZSl7aWYoZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciB0PXt9O2lmKG51bGwhPWUpZm9yKHZhciBuIGluIGUpT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsbikmJih0W25dPWVbbl0pO3JldHVybiB0LmRlZmF1bHQ9ZSx0fShuKDU5KSksYT1zKG4oMjg5KSksdT1zKG4oMjkxKSksYz1zKG4oMjkyKSksbD1zKG4oMjkzKSk7ZnVuY3Rpb24gcyhlKXtyZXR1cm4gZSYmZS5fX2VzTW9kdWxlP2U6e2RlZmF1bHQ6ZX19dmFyIGY9ZnVuY3Rpb24oZSl7cmV0dXJuIG8oe30sYigiYWN0aW9ucyIpLGIoImNyZWF0ZVNlbGVjdG9ycyIpKGUpLHtDb25uZWN0ZWRSb3V0ZXI6YigiY3JlYXRlQ29ubmVjdGVkUm91dGVyIikoZSksY29ubmVjdFJvdXRlcjpiKCJjcmVhdGVDb25uZWN0Um91dGVyIikoZSkscm91dGVyTWlkZGxld2FyZTpiKCJyb3V0ZXJNaWRkbGV3YXJlIil9KX07ZnVuY3Rpb24gcCgpe3RyeXtpZihlKXJldHVybiBlfWNhdGNoKGUpe3RyeXtpZih3aW5kb3cpcmV0dXJuIHdpbmRvd31jYXRjaChlKXtyZXR1cm4gdGhpc319fXQuZGVmYXVsdD1iKCJjcmVhdGVBbGwiKTt2YXIgZCxoPW51bGw7ZnVuY3Rpb24geSgpe2lmKG51bGw9PT1oKXt2YXIgZT1wKCk7ZS5fXyQkR0xPQkFMX1JFV0lSRV9ORVhUX01PRFVMRV9JRF9ffHwoZS5fXyQkR0xPQkFMX1JFV0lSRV9ORVhUX01PRFVMRV9JRF9fPTApLGg9X18kJEdMT0JBTF9SRVdJUkVfTkVYVF9NT0RVTEVfSURfXysrfXJldHVybiBofWZ1bmN0aW9uIF8oKXt2YXIgZT1wKCk7cmV0dXJuIGUuX18kJEdMT0JBTF9SRVdJUkVfUkVHSVNUUllfX3x8KGUuX18kJEdMT0JBTF9SRVdJUkVfUkVHSVNUUllfXz1PYmplY3QuY3JlYXRlKG51bGwpKSxfXyQkR0xPQkFMX1JFV0lSRV9SRUdJU1RSWV9ffWZ1bmN0aW9uIHYoKXt2YXIgZT15KCksdD1fKCksbj10W2VdO3JldHVybiBufHwodFtlXT1PYmplY3QuY3JlYXRlKG51bGwpLG49dFtlXSksbn0oZD1wKCkpLl9fcmV3aXJlX3Jlc2V0X2FsbF9ffHwoZC5fX3Jld2lyZV9yZXNldF9hbGxfXz1mdW5jdGlvbigpe2QuX18kJEdMT0JBTF9SRVdJUkVfUkVHSVNUUllfXz1PYmplY3QuY3JlYXRlKG51bGwpfSk7dmFyIG09Il9fSU5URU5USU9OQUxfVU5ERUZJTkVEX18iLGc9e307ZnVuY3Rpb24gYihlKXt2YXIgdD12KCk7aWYodm9pZCAwPT09dFtlXSlyZXR1cm4gZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UiYWN0aW9ucyI6cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O3JldHVybiBPYmplY3Qua2V5cyhlKS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIl9fZ2V0X18iIT09ZSYmIl9fc2V0X18iIT09ZSYmIl9fcmVzZXRfXyIhPT1lJiYiX193aXRoX18iIT09ZSYmIl9fR2V0RGVwZW5kZW5jeV9fIiE9PWUmJiJfX1Jld2lyZV9fIiE9PWUmJiJfX1Jlc2V0RGVwZW5kZW5jeV9fIiE9PWUmJiJfX1Jld2lyZUFQSV9fIiE9PWV9KS5yZWR1Y2UoZnVuY3Rpb24odCxuKXtyZXR1cm4gdFtuXT1lW25dLHR9LHt9KX0oaSk7Y2FzZSJjcmVhdGVTZWxlY3RvcnMiOnJldHVybiBsLmRlZmF1bHQ7Y2FzZSJjcmVhdGVDb25uZWN0ZWRSb3V0ZXIiOnJldHVybiBhLmRlZmF1bHQ7Y2FzZSJjcmVhdGVDb25uZWN0Um91dGVyIjpyZXR1cm4gdS5kZWZhdWx0O2Nhc2Uicm91dGVyTWlkZGxld2FyZSI6cmV0dXJuIGMuZGVmYXVsdDtjYXNlImNyZWF0ZUFsbCI6cmV0dXJuIGZ9cmV0dXJufShlKTt2YXIgbj10W2VdO3JldHVybiBuPT09bT92b2lkIDA6bn1mdW5jdGlvbiB3KGUsdCl7dmFyIG49digpO2lmKCJvYmplY3QiIT09KHZvaWQgMD09PWU/InVuZGVmaW5lZCI6cihlKSkpcmV0dXJuIG5bZV09dm9pZCAwPT09dD9tOnQsZnVuY3Rpb24oKXtFKGUpfTtPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe25bdF09ZVt0XX0pfWZ1bmN0aW9uIEUoZSl7dmFyIHQ9digpO2RlbGV0ZSB0W2VdLDA9PU9iamVjdC5rZXlzKHQpLmxlbmd0aCYmZGVsZXRlIF8oKVt5XX1mdW5jdGlvbiBUKGUpe3ZhciB0PXYoKSxuPU9iamVjdC5rZXlzKGUpLHI9e307ZnVuY3Rpb24gbygpe24uZm9yRWFjaChmdW5jdGlvbihlKXt0W2VdPXJbZV19KX1yZXR1cm4gZnVuY3Rpb24oaSl7bi5mb3JFYWNoKGZ1bmN0aW9uKG4pe3Jbbl09dFtuXSx0W25dPWVbbl19KTt2YXIgYT1pKCk7cmV0dXJuIGEmJiJmdW5jdGlvbiI9PXR5cGVvZiBhLnRoZW4/YS50aGVuKG8pLmNhdGNoKG8pOm8oKSxhfX0hZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGcsZSx7dmFsdWU6dCxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pfWUoIl9fZ2V0X18iLGIpLGUoIl9fR2V0RGVwZW5kZW5jeV9fIixiKSxlKCJfX1Jld2lyZV9fIix3KSxlKCJfX3NldF9fIix3KSxlKCJfX3Jlc2V0X18iLEUpLGUoIl9fUmVzZXREZXBlbmRlbmN5X18iLEUpLGUoIl9fd2l0aF9fIixUKX0oKTt2YXIgTz12b2lkIDA9PT1mPyJ1bmRlZmluZWQiOnIoZik7ZnVuY3Rpb24gUyhlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShmLGUse3ZhbHVlOnQsZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KX0ib2JqZWN0IiE9PU8mJiJmdW5jdGlvbiIhPT1PfHwhT2JqZWN0LmlzRXh0ZW5zaWJsZShmKXx8KFMoIl9fZ2V0X18iLGIpLFMoIl9fR2V0RGVwZW5kZW5jeV9fIixiKSxTKCJfX1Jld2lyZV9fIix3KSxTKCJfX3NldF9fIix3KSxTKCJfX3Jlc2V0X18iLEUpLFMoIl9fUmVzZXREZXBlbmRlbmN5X18iLEUpLFMoIl9fd2l0aF9fIixUKSxTKCJfX1Jld2lyZUFQSV9fIixnKSksdC5fX2dldF9fPWIsdC5fX0dldERlcGVuZGVuY3lfXz1iLHQuX19SZXdpcmVfXz13LHQuX19zZXRfXz13LHQuX19SZXNldERlcGVuZGVuY3lfXz1FLHQuX19SZXdpcmVBUElfXz1nfSkuY2FsbCh0aGlzLG4oMjEpKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuX19SZXdpcmVBUElfXz10Ll9fUmVzZXREZXBlbmRlbmN5X189dC5fX3NldF9fPXQuX19SZXdpcmVfXz10Ll9fR2V0RGVwZW5kZW5jeV9fPXQuX19nZXRfXz12b2lkIDA7dmFyIHI9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciByPXRbbl07ci5lbnVtZXJhYmxlPXIuZW51bWVyYWJsZXx8ITEsci5jb25maWd1cmFibGU9ITAsInZhbHVlImluIHImJihyLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLmtleSxyKX19cmV0dXJuIGZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gbiYmZSh0LnByb3RvdHlwZSxuKSxyJiZlKHQsciksdH19KCksaT1uKDApLGE9ZihpKSx1PWYobigyKSksYz1uKDE2KSxsPW4oMTE5KSxzPW4oNTkpO2Z1bmN0aW9uIGYoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXZhciBwPWZ1bmN0aW9uKGUpe3ZhciB0PWUuZ2V0SW4sbj1lLnRvSlMscj1mdW5jdGlvbihlKXtmdW5jdGlvbiByKGUsbyl7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMscik7dmFyIGk9ZnVuY3Rpb24oZSx0KXtpZighZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiF0fHwib2JqZWN0IiE9dHlwZW9mIHQmJiJmdW5jdGlvbiIhPXR5cGVvZiB0P2U6dH0odGhpcywoci5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihyKSkuY2FsbCh0aGlzLGUpKTtpLmluVGltZVRyYXZlbGxpbmc9ITEsaS51bnN1YnNjcmliZT1vLnN0b3JlLnN1YnNjcmliZShmdW5jdGlvbigpe3ZhciByPW4odChvLnN0b3JlLmdldFN0YXRlKCksWyJyb3V0ZXIiLCJsb2NhdGlvbiJdKSksYT1yLnBhdGhuYW1lLHU9ci5zZWFyY2gsYz1yLmhhc2gsbD1lLmhpc3RvcnkubG9jYXRpb24scz1sLnBhdGhuYW1lLGY9bC5zZWFyY2gscD1sLmhhc2g7cz09PWEmJmY9PT11JiZwPT09Y3x8KGkuaW5UaW1lVHJhdmVsbGluZz0hMCxlLmhpc3RvcnkucHVzaCh7cGF0aG5hbWU6YSxzZWFyY2g6dSxoYXNoOmN9KSl9KTt2YXIgYT1mdW5jdGlvbih0LG4pe2kuaW5UaW1lVHJhdmVsbGluZz9pLmluVGltZVRyYXZlbGxpbmc9ITE6ZS5vbkxvY2F0aW9uQ2hhbmdlZCh0LG4pfTtyZXR1cm4gaS51bmxpc3Rlbj1lLmhpc3RvcnkubGlzdGVuKGEpLGEoZS5oaXN0b3J5LmxvY2F0aW9uLGUuaGlzdG9yeS5hY3Rpb24pLGl9cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgIit0eXBlb2YgdCk7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YoZSx0KTplLl9fcHJvdG9fXz10KX0ocix3KCJDb21wb25lbnQiKSksbyhyLFt7a2V5OiJjb21wb25lbnRXaWxsVW5tb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnVubGlzdGVuKCksdGhpcy51bnN1YnNjcmliZSgpfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmhpc3Rvcnksbj1lLmNoaWxkcmVuO3JldHVybiB3KCJSZWFjdCIpLmNyZWF0ZUVsZW1lbnQodygiUm91dGVyIikse2hpc3Rvcnk6dH0sbil9fV0pLHJ9KCk7ci5jb250ZXh0VHlwZXM9e3N0b3JlOncoIlByb3BUeXBlcyIpLnNoYXBlKHtnZXRTdGF0ZTp3KCJQcm9wVHlwZXMiKS5mdW5jLmlzUmVxdWlyZWQsc3Vic2NyaWJlOncoIlByb3BUeXBlcyIpLmZ1bmMuaXNSZXF1aXJlZH0pLmlzUmVxdWlyZWR9LHIucHJvcFR5cGVzPXtoaXN0b3J5OncoIlByb3BUeXBlcyIpLnNoYXBlKHthY3Rpb246dygiUHJvcFR5cGVzIikuc3RyaW5nLmlzUmVxdWlyZWQsbGlzdGVuOncoIlByb3BUeXBlcyIpLmZ1bmMuaXNSZXF1aXJlZCxsb2NhdGlvbjp3KCJQcm9wVHlwZXMiKS5vYmplY3QuaXNSZXF1aXJlZCxwdXNoOncoIlByb3BUeXBlcyIpLmZ1bmMuaXNSZXF1aXJlZH0pLmlzUmVxdWlyZWQsbG9jYXRpb246dygiUHJvcFR5cGVzIikub25lT2ZUeXBlKFt3KCJQcm9wVHlwZXMiKS5vYmplY3QsdygiUHJvcFR5cGVzIikuc3RyaW5nXSkuaXNSZXF1aXJlZCxhY3Rpb246dygiUHJvcFR5cGVzIikuc3RyaW5nLmlzUmVxdWlyZWQsYmFzZW5hbWU6dygiUHJvcFR5cGVzIikuc3RyaW5nLGNoaWxkcmVuOncoIlByb3BUeXBlcyIpLm9uZU9mVHlwZShbdygiUHJvcFR5cGVzIikuZnVuYyx3KCJQcm9wVHlwZXMiKS5ub2RlXSksb25Mb2NhdGlvbkNoYW5nZWQ6dygiUHJvcFR5cGVzIikuZnVuYy5pc1JlcXVpcmVkfTtyZXR1cm4gdygiY29ubmVjdCIpKGZ1bmN0aW9uKGUpe3JldHVybnthY3Rpb246dChlLFsicm91dGVyIiwiYWN0aW9uIl0pLGxvY2F0aW9uOnQoZSxbInJvdXRlciIsImxvY2F0aW9uIl0pfX0sZnVuY3Rpb24oZSl7cmV0dXJue29uTG9jYXRpb25DaGFuZ2VkOmZ1bmN0aW9uKHQsbil7cmV0dXJuIGUodygib25Mb2NhdGlvbkNoYW5nZWQiKSh0LG4pKX19fSkocil9O2Z1bmN0aW9uIGQoKXt0cnl7aWYoZSlyZXR1cm4gZX1jYXRjaChlKXt0cnl7aWYod2luZG93KXJldHVybiB3aW5kb3d9Y2F0Y2goZSl7cmV0dXJuIHRoaXN9fX10LmRlZmF1bHQ9dygiY3JlYXRlQ29ubmVjdGVkUm91dGVyIik7dmFyIGgseT1udWxsO2Z1bmN0aW9uIF8oKXtpZihudWxsPT09eSl7dmFyIGU9ZCgpO2UuX18kJEdMT0JBTF9SRVdJUkVfTkVYVF9NT0RVTEVfSURfX3x8KGUuX18kJEdMT0JBTF9SRVdJUkVfTkVYVF9NT0RVTEVfSURfXz0wKSx5PV9fJCRHTE9CQUxfUkVXSVJFX05FWFRfTU9EVUxFX0lEX18rK31yZXR1cm4geX1mdW5jdGlvbiB2KCl7dmFyIGU9ZCgpO3JldHVybiBlLl9fJCRHTE9CQUxfUkVXSVJFX1JFR0lTVFJZX198fChlLl9fJCRHTE9CQUxfUkVXSVJFX1JFR0lTVFJZX189T2JqZWN0LmNyZWF0ZShudWxsKSksX18kJEdMT0JBTF9SRVdJUkVfUkVHSVNUUllfX31mdW5jdGlvbiBtKCl7dmFyIGU9XygpLHQ9digpLG49dFtlXTtyZXR1cm4gbnx8KHRbZV09T2JqZWN0LmNyZWF0ZShudWxsKSxuPXRbZV0pLG59KGg9ZCgpKS5fX3Jld2lyZV9yZXNldF9hbGxfX3x8KGguX19yZXdpcmVfcmVzZXRfYWxsX189ZnVuY3Rpb24oKXtoLl9fJCRHTE9CQUxfUkVXSVJFX1JFR0lTVFJZX189T2JqZWN0LmNyZWF0ZShudWxsKX0pO3ZhciBnPSJfX0lOVEVOVElPTkFMX1VOREVGSU5FRF9fIixiPXt9O2Z1bmN0aW9uIHcoZSl7dmFyIHQ9bSgpO2lmKHZvaWQgMD09PXRbZV0pcmV0dXJuIGZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIkNvbXBvbmVudCI6cmV0dXJuIGkuQ29tcG9uZW50O2Nhc2UiUHJvcFR5cGVzIjpyZXR1cm4gdS5kZWZhdWx0O2Nhc2Uib25Mb2NhdGlvbkNoYW5nZWQiOnJldHVybiBzLm9uTG9jYXRpb25DaGFuZ2VkO2Nhc2UiY29ubmVjdCI6cmV0dXJuIGMuY29ubmVjdDtjYXNlImNyZWF0ZUNvbm5lY3RlZFJvdXRlciI6cmV0dXJuIHA7Y2FzZSJSZWFjdCI6cmV0dXJuIGEuZGVmYXVsdDtjYXNlIlJvdXRlciI6cmV0dXJuIGwuUm91dGVyfXJldHVybn0oZSk7dmFyIG49dFtlXTtyZXR1cm4gbj09PWc/dm9pZCAwOm59ZnVuY3Rpb24gRShlLHQpe3ZhciBuPW0oKTtpZigib2JqZWN0IiE9PSh2b2lkIDA9PT1lPyJ1bmRlZmluZWQiOnIoZSkpKXJldHVybiBuW2VdPXZvaWQgMD09PXQ/Zzp0LGZ1bmN0aW9uKCl7VChlKX07T2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXtuW3RdPWVbdF19KX1mdW5jdGlvbiBUKGUpe3ZhciB0PW0oKTtkZWxldGUgdFtlXSwwPT1PYmplY3Qua2V5cyh0KS5sZW5ndGgmJmRlbGV0ZSB2KClbX119ZnVuY3Rpb24gTyhlKXt2YXIgdD1tKCksbj1PYmplY3Qua2V5cyhlKSxyPXt9O2Z1bmN0aW9uIG8oKXtuLmZvckVhY2goZnVuY3Rpb24oZSl7dFtlXT1yW2VdfSl9cmV0dXJuIGZ1bmN0aW9uKGkpe24uZm9yRWFjaChmdW5jdGlvbihuKXtyW25dPXRbbl0sdFtuXT1lW25dfSk7dmFyIGE9aSgpO3JldHVybiBhJiYiZnVuY3Rpb24iPT10eXBlb2YgYS50aGVuP2EudGhlbihvKS5jYXRjaChvKTpvKCksYX19IWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShiLGUse3ZhbHVlOnQsZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KX1lKCJfX2dldF9fIix3KSxlKCJfX0dldERlcGVuZGVuY3lfXyIsdyksZSgiX19SZXdpcmVfXyIsRSksZSgiX19zZXRfXyIsRSksZSgiX19yZXNldF9fIixUKSxlKCJfX1Jlc2V0RGVwZW5kZW5jeV9fIixUKSxlKCJfX3dpdGhfXyIsTyl9KCk7dmFyIFM9dm9pZCAwPT09cD8idW5kZWZpbmVkIjpyKHApO2Z1bmN0aW9uIHgoZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkocCxlLHt2YWx1ZTp0LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSl9Im9iamVjdCIhPT1TJiYiZnVuY3Rpb24iIT09U3x8IU9iamVjdC5pc0V4dGVuc2libGUocCl8fCh4KCJfX2dldF9fIix3KSx4KCJfX0dldERlcGVuZGVuY3lfXyIsdykseCgiX19SZXdpcmVfXyIsRSkseCgiX19zZXRfXyIsRSkseCgiX19yZXNldF9fIixUKSx4KCJfX1Jlc2V0RGVwZW5kZW5jeV9fIixUKSx4KCJfX3dpdGhfXyIsTykseCgiX19SZXdpcmVBUElfXyIsYikpLHQuX19nZXRfXz13LHQuX19HZXREZXBlbmRlbmN5X189dyx0Ll9fUmV3aXJlX189RSx0Ll9fc2V0X189RSx0Ll9fUmVzZXREZXBlbmRlbmN5X189VCx0Ll9fUmV3aXJlQVBJX189Yn0pLmNhbGwodGhpcyxuKDIxKSl9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKX19LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Ll9fUmV3aXJlQVBJX189dC5fX1Jlc2V0RGVwZW5kZW5jeV9fPXQuX19zZXRfXz10Ll9fUmV3aXJlX189dC5fX0dldERlcGVuZGVuY3lfXz10Ll9fZ2V0X189dm9pZCAwO3ZhciByPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxvPW4oNTkpLGk9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5maWx0ZXJOb3RSb3V0ZXIsbj1lLmZyb21KUyxyPWUuZ2V0SW4sbz1lLm1lcmdlLGk9ZS5zZXRJbjtyZXR1cm4gZnVuY3Rpb24oZSl7dmFyIGE9bih7bG9jYXRpb246ZS5sb2NhdGlvbixhY3Rpb246ZS5hY3Rpb259KTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKG4sdSl7dmFyIGM9YTtuJiYoYz1yKG4sWyJyb3V0ZXIiXSl8fGMsbj10KG4pKTt2YXIgbD1lKG4sdSk7cmV0dXJuIGkobCxbInJvdXRlciJdLGZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp7fSxuPXQudHlwZSxyPXQucGF5bG9hZDtyZXR1cm4gbj09PWgoIkxPQ0FUSU9OX0NIQU5HRSIpP28oZSxyKTplfShjLHUpKX19fX07ZnVuY3Rpb24gYSgpe3RyeXtpZihlKXJldHVybiBlfWNhdGNoKGUpe3RyeXtpZih3aW5kb3cpcmV0dXJuIHdpbmRvd31jYXRjaChlKXtyZXR1cm4gdGhpc319fXQuZGVmYXVsdD1oKCJjcmVhdGVDb25uZWN0Um91dGVyIik7dmFyIHUsYz1udWxsO2Z1bmN0aW9uIGwoKXtpZihudWxsPT09Yyl7dmFyIGU9YSgpO2UuX18kJEdMT0JBTF9SRVdJUkVfTkVYVF9NT0RVTEVfSURfX3x8KGUuX18kJEdMT0JBTF9SRVdJUkVfTkVYVF9NT0RVTEVfSURfXz0wKSxjPV9fJCRHTE9CQUxfUkVXSVJFX05FWFRfTU9EVUxFX0lEX18rK31yZXR1cm4gY31mdW5jdGlvbiBzKCl7dmFyIGU9YSgpO3JldHVybiBlLl9fJCRHTE9CQUxfUkVXSVJFX1JFR0lTVFJZX198fChlLl9fJCRHTE9CQUxfUkVXSVJFX1JFR0lTVFJZX189T2JqZWN0LmNyZWF0ZShudWxsKSksX18kJEdMT0JBTF9SRVdJUkVfUkVHSVNUUllfX31mdW5jdGlvbiBmKCl7dmFyIGU9bCgpLHQ9cygpLG49dFtlXTtyZXR1cm4gbnx8KHRbZV09T2JqZWN0LmNyZWF0ZShudWxsKSxuPXRbZV0pLG59KHU9YSgpKS5fX3Jld2lyZV9yZXNldF9hbGxfX3x8KHUuX19yZXdpcmVfcmVzZXRfYWxsX189ZnVuY3Rpb24oKXt1Ll9fJCRHTE9CQUxfUkVXSVJFX1JFR0lTVFJZX189T2JqZWN0LmNyZWF0ZShudWxsKX0pO3ZhciBwPSJfX0lOVEVOVElPTkFMX1VOREVGSU5FRF9fIixkPXt9O2Z1bmN0aW9uIGgoZSl7dmFyIHQ9ZigpO2lmKHZvaWQgMD09PXRbZV0pcmV0dXJuIGZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIkxPQ0FUSU9OX0NIQU5HRSI6cmV0dXJuIG8uTE9DQVRJT05fQ0hBTkdFO2Nhc2UiY3JlYXRlQ29ubmVjdFJvdXRlciI6cmV0dXJuIGl9cmV0dXJufShlKTt2YXIgbj10W2VdO3JldHVybiBuPT09cD92b2lkIDA6bn1mdW5jdGlvbiB5KGUsdCl7dmFyIG49ZigpO2lmKCJvYmplY3QiIT09KHZvaWQgMD09PWU/InVuZGVmaW5lZCI6cihlKSkpcmV0dXJuIG5bZV09dm9pZCAwPT09dD9wOnQsZnVuY3Rpb24oKXtfKGUpfTtPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe25bdF09ZVt0XX0pfWZ1bmN0aW9uIF8oZSl7dmFyIHQ9ZigpO2RlbGV0ZSB0W2VdLDA9PU9iamVjdC5rZXlzKHQpLmxlbmd0aCYmZGVsZXRlIHMoKVtsXX1mdW5jdGlvbiB2KGUpe3ZhciB0PWYoKSxuPU9iamVjdC5rZXlzKGUpLHI9e307ZnVuY3Rpb24gbygpe24uZm9yRWFjaChmdW5jdGlvbihlKXt0W2VdPXJbZV19KX1yZXR1cm4gZnVuY3Rpb24oaSl7bi5mb3JFYWNoKGZ1bmN0aW9uKG4pe3Jbbl09dFtuXSx0W25dPWVbbl19KTt2YXIgYT1pKCk7cmV0dXJuIGEmJiJmdW5jdGlvbiI9PXR5cGVvZiBhLnRoZW4/YS50aGVuKG8pLmNhdGNoKG8pOm8oKSxhfX0hZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGQsZSx7dmFsdWU6dCxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pfWUoIl9fZ2V0X18iLGgpLGUoIl9fR2V0RGVwZW5kZW5jeV9fIixoKSxlKCJfX1Jld2lyZV9fIix5KSxlKCJfX3NldF9fIix5KSxlKCJfX3Jlc2V0X18iLF8pLGUoIl9fUmVzZXREZXBlbmRlbmN5X18iLF8pLGUoIl9fd2l0aF9fIix2KX0oKTt2YXIgbT12b2lkIDA9PT1pPyJ1bmRlZmluZWQiOnIoaSk7ZnVuY3Rpb24gZyhlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShpLGUse3ZhbHVlOnQsZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KX0ib2JqZWN0IiE9PW0mJiJmdW5jdGlvbiIhPT1tfHwhT2JqZWN0LmlzRXh0ZW5zaWJsZShpKXx8KGcoIl9fZ2V0X18iLGgpLGcoIl9fR2V0RGVwZW5kZW5jeV9fIixoKSxnKCJfX1Jld2lyZV9fIix5KSxnKCJfX3NldF9fIix5KSxnKCJfX3Jlc2V0X18iLF8pLGcoIl9fUmVzZXREZXBlbmRlbmN5X18iLF8pLGcoIl9fd2l0aF9fIix2KSxnKCJfX1Jld2lyZUFQSV9fIixkKSksdC5fX2dldF9fPWgsdC5fX0dldERlcGVuZGVuY3lfXz1oLHQuX19SZXdpcmVfXz15LHQuX19zZXRfXz15LHQuX19SZXNldERlcGVuZGVuY3lfXz1fLHQuX19SZXdpcmVBUElfXz1kfSkuY2FsbCh0aGlzLG4oMjEpKX0sZnVuY3Rpb24oZSx0LG4peyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuX19SZXdpcmVBUElfXz10Ll9fUmVzZXREZXBlbmRlbmN5X189dC5fX3NldF9fPXQuX19SZXdpcmVfXz10Ll9fR2V0RGVwZW5kZW5jeV9fPXQuX19nZXRfXz12b2lkIDA7dmFyIHI9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9LG89big1OSk7dmFyIGk9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24obil7aWYobi50eXBlIT09aCgiQ0FMTF9ISVNUT1JZX01FVEhPRCIpKXJldHVybiB0KG4pO3ZhciByPW4ucGF5bG9hZCxvPXIubWV0aG9kLGk9ci5hcmdzO2Vbb10uYXBwbHkoZSxmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXtmb3IodmFyIHQ9MCxuPUFycmF5KGUubGVuZ3RoKTt0PGUubGVuZ3RoO3QrKyluW3RdPWVbdF07cmV0dXJuIG59cmV0dXJuIEFycmF5LmZyb20oZSl9KGkpKX19fX07ZnVuY3Rpb24gYSgpe3RyeXtpZihlKXJldHVybiBlfWNhdGNoKGUpe3RyeXtpZih3aW5kb3cpcmV0dXJuIHdpbmRvd31jYXRjaChlKXtyZXR1cm4gdGhpc319fXQuZGVmYXVsdD1oKCJyb3V0ZXJNaWRkbGV3YXJlIik7dmFyIHUsYz1udWxsO2Z1bmN0aW9uIGwoKXtpZihudWxsPT09Yyl7dmFyIGU9YSgpO2UuX18kJEdMT0JBTF9SRVdJUkVfTkVYVF9NT0RVTEVfSURfX3x8KGUuX18kJEdMT0JBTF9SRVdJUkVfTkVYVF9NT0RVTEVfSURfXz0wKSxjPV9fJCRHTE9CQUxfUkVXSVJFX05FWFRfTU9EVUxFX0lEX18rK31yZXR1cm4gY31mdW5jdGlvbiBzKCl7dmFyIGU9YSgpO3JldHVybiBlLl9fJCRHTE9CQUxfUkVXSVJFX1JFR0lTVFJZX198fChlLl9fJCRHTE9CQUxfUkVXSVJFX1JFR0lTVFJZX189T2JqZWN0LmNyZWF0ZShudWxsKSksX18kJEdMT0JBTF9SRVdJUkVfUkVHSVNUUllfX31mdW5jdGlvbiBmKCl7dmFyIGU9bCgpLHQ9cygpLG49dFtlXTtyZXR1cm4gbnx8KHRbZV09T2JqZWN0LmNyZWF0ZShudWxsKSxuPXRbZV0pLG59KHU9YSgpKS5fX3Jld2lyZV9yZXNldF9hbGxfX3x8KHUuX19yZXdpcmVfcmVzZXRfYWxsX189ZnVuY3Rpb24oKXt1Ll9fJCRHTE9CQUxfUkVXSVJFX1JFR0lTVFJZX189T2JqZWN0LmNyZWF0ZShudWxsKX0pO3ZhciBwPSJfX0lOVEVOVElPTkFMX1VOREVGSU5FRF9fIixkPXt9O2Z1bmN0aW9uIGgoZSl7dmFyIHQ9ZigpO2lmKHZvaWQgMD09PXRbZV0pcmV0dXJuIGZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlIkNBTExfSElTVE9SWV9NRVRIT0QiOnJldHVybiBvLkNBTExfSElTVE9SWV9NRVRIT0Q7Y2FzZSJyb3V0ZXJNaWRkbGV3YXJlIjpyZXR1cm4gaX1yZXR1cm59KGUpO3ZhciBuPXRbZV07cmV0dXJuIG49PT1wP3ZvaWQgMDpufWZ1bmN0aW9uIHkoZSx0KXt2YXIgbj1mKCk7aWYoIm9iamVjdCIhPT0odm9pZCAwPT09ZT8idW5kZWZpbmVkIjpyKGUpKSlyZXR1cm4gbltlXT12b2lkIDA9PT10P3A6dCxmdW5jdGlvbigpe18oZSl9O09iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24odCl7blt0XT1lW3RdfSl9ZnVuY3Rpb24gXyhlKXt2YXIgdD1mKCk7ZGVsZXRlIHRbZV0sMD09T2JqZWN0LmtleXModCkubGVuZ3RoJiZkZWxldGUgcygpW2xdfWZ1bmN0aW9uIHYoZSl7dmFyIHQ9ZigpLG49T2JqZWN0LmtleXMoZSkscj17fTtmdW5jdGlvbiBvKCl7bi5mb3JFYWNoKGZ1bmN0aW9uKGUpe3RbZV09cltlXX0pfXJldHVybiBmdW5jdGlvbihpKXtuLmZvckVhY2goZnVuY3Rpb24obil7cltuXT10W25dLHRbbl09ZVtuXX0pO3ZhciBhPWkoKTtyZXR1cm4gYSYmImZ1bmN0aW9uIj09dHlwZW9mIGEudGhlbj9hLnRoZW4obykuY2F0Y2gobyk6bygpLGF9fSFmdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZCxlLHt2YWx1ZTp0LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSl9ZSgiX19nZXRfXyIsaCksZSgiX19HZXREZXBlbmRlbmN5X18iLGgpLGUoIl9fUmV3aXJlX18iLHkpLGUoIl9fc2V0X18iLHkpLGUoIl9fcmVzZXRfXyIsXyksZSgiX19SZXNldERlcGVuZGVuY3lfXyIsXyksZSgiX193aXRoX18iLHYpfSgpO3ZhciBtPXZvaWQgMD09PWk/InVuZGVmaW5lZCI6cihpKTtmdW5jdGlvbiBnKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGksZSx7dmFsdWU6dCxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pfSJvYmplY3QiIT09bSYmImZ1bmN0aW9uIiE9PW18fCFPYmplY3QuaXNFeHRlbnNpYmxlKGkpfHwoZygiX19nZXRfXyIsaCksZygiX19HZXREZXBlbmRlbmN5X18iLGgpLGcoIl9fUmV3aXJlX18iLHkpLGcoIl9fc2V0X18iLHkpLGcoIl9fcmVzZXRfXyIsXyksZygiX19SZXNldERlcGVuZGVuY3lfXyIsXyksZygiX193aXRoX18iLHYpLGcoIl9fUmV3aXJlQVBJX18iLGQpKSx0Ll9fZ2V0X189aCx0Ll9fR2V0RGVwZW5kZW5jeV9fPWgsdC5fX1Jld2lyZV9fPXksdC5fX3NldF9fPXksdC5fX1Jlc2V0RGVwZW5kZW5jeV9fPV8sdC5fX1Jld2lyZUFQSV9fPWR9KS5jYWxsKHRoaXMsbigyMSkpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5fX1Jld2lyZUFQSV9fPXQuX19SZXNldERlcGVuZGVuY3lfXz10Ll9fc2V0X189dC5fX1Jld2lyZV9fPXQuX19HZXREZXBlbmRlbmN5X189dC5fX2dldF9fPXZvaWQgMDt2YXIgcj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0sbz1uKDExOSksaT1mdW5jdGlvbihlKXt2YXIgdD1lLmdldEluLG49ZS50b0pTLHI9ZnVuY3Rpb24oZSl7cmV0dXJuIG4odChlLFsicm91dGVyIiwibG9jYXRpb24iXSkpfTtyZXR1cm57Z2V0TG9jYXRpb246cixnZXRBY3Rpb246ZnVuY3Rpb24oZSl7cmV0dXJuIG4odChlLFsicm91dGVyIiwiYWN0aW9uIl0pKX0sY3JlYXRlTWF0Y2hTZWxlY3RvcjpmdW5jdGlvbihlKXt2YXIgdD1udWxsLG49bnVsbDtyZXR1cm4gZnVuY3Rpb24obyl7dmFyIGk9KHIobyl8fHt9KS5wYXRobmFtZTtpZihpPT09dClyZXR1cm4gbjt0PWk7dmFyIGE9aCgibWF0Y2hQYXRoIikoaSxlKTtyZXR1cm4gYSYmbiYmYS51cmw9PT1uLnVybHx8KG49YSksbn19fX07ZnVuY3Rpb24gYSgpe3RyeXtpZihlKXJldHVybiBlfWNhdGNoKGUpe3RyeXtpZih3aW5kb3cpcmV0dXJuIHdpbmRvd31jYXRjaChlKXtyZXR1cm4gdGhpc319fXQuZGVmYXVsdD1oKCJjcmVhdGVTZWxlY3RvcnMiKTt2YXIgdSxjPW51bGw7ZnVuY3Rpb24gbCgpe2lmKG51bGw9PT1jKXt2YXIgZT1hKCk7ZS5fXyQkR0xPQkFMX1JFV0lSRV9ORVhUX01PRFVMRV9JRF9ffHwoZS5fXyQkR0xPQkFMX1JFV0lSRV9ORVhUX01PRFVMRV9JRF9fPTApLGM9X18kJEdMT0JBTF9SRVdJUkVfTkVYVF9NT0RVTEVfSURfXysrfXJldHVybiBjfWZ1bmN0aW9uIHMoKXt2YXIgZT1hKCk7cmV0dXJuIGUuX18kJEdMT0JBTF9SRVdJUkVfUkVHSVNUUllfX3x8KGUuX18kJEdMT0JBTF9SRVdJUkVfUkVHSVNUUllfXz1PYmplY3QuY3JlYXRlKG51bGwpKSxfXyQkR0xPQkFMX1JFV0lSRV9SRUdJU1RSWV9ffWZ1bmN0aW9uIGYoKXt2YXIgZT1sKCksdD1zKCksbj10W2VdO3JldHVybiBufHwodFtlXT1PYmplY3QuY3JlYXRlKG51bGwpLG49dFtlXSksbn0odT1hKCkpLl9fcmV3aXJlX3Jlc2V0X2FsbF9ffHwodS5fX3Jld2lyZV9yZXNldF9hbGxfXz1mdW5jdGlvbigpe3UuX18kJEdMT0JBTF9SRVdJUkVfUkVHSVNUUllfXz1PYmplY3QuY3JlYXRlKG51bGwpfSk7dmFyIHA9Il9fSU5URU5USU9OQUxfVU5ERUZJTkVEX18iLGQ9e307ZnVuY3Rpb24gaChlKXt2YXIgdD1mKCk7aWYodm9pZCAwPT09dFtlXSlyZXR1cm4gZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UibWF0Y2hQYXRoIjpyZXR1cm4gby5tYXRjaFBhdGg7Y2FzZSJjcmVhdGVTZWxlY3RvcnMiOnJldHVybiBpfXJldHVybn0oZSk7dmFyIG49dFtlXTtyZXR1cm4gbj09PXA/dm9pZCAwOm59ZnVuY3Rpb24geShlLHQpe3ZhciBuPWYoKTtpZigib2JqZWN0IiE9PSh2b2lkIDA9PT1lPyJ1bmRlZmluZWQiOnIoZSkpKXJldHVybiBuW2VdPXZvaWQgMD09PXQ/cDp0LGZ1bmN0aW9uKCl7XyhlKX07T2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXtuW3RdPWVbdF19KX1mdW5jdGlvbiBfKGUpe3ZhciB0PWYoKTtkZWxldGUgdFtlXSwwPT1PYmplY3Qua2V5cyh0KS5sZW5ndGgmJmRlbGV0ZSBzKClbbF19ZnVuY3Rpb24gdihlKXt2YXIgdD1mKCksbj1PYmplY3Qua2V5cyhlKSxyPXt9O2Z1bmN0aW9uIG8oKXtuLmZvckVhY2goZnVuY3Rpb24oZSl7dFtlXT1yW2VdfSl9cmV0dXJuIGZ1bmN0aW9uKGkpe24uZm9yRWFjaChmdW5jdGlvbihuKXtyW25dPXRbbl0sdFtuXT1lW25dfSk7dmFyIGE9aSgpO3JldHVybiBhJiYiZnVuY3Rpb24iPT10eXBlb2YgYS50aGVuP2EudGhlbihvKS5jYXRjaChvKTpvKCksYX19IWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShkLGUse3ZhbHVlOnQsZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KX1lKCJfX2dldF9fIixoKSxlKCJfX0dldERlcGVuZGVuY3lfXyIsaCksZSgiX19SZXdpcmVfXyIseSksZSgiX19zZXRfXyIseSksZSgiX19yZXNldF9fIixfKSxlKCJfX1Jlc2V0RGVwZW5kZW5jeV9fIixfKSxlKCJfX3dpdGhfXyIsdil9KCk7dmFyIG09dm9pZCAwPT09aT8idW5kZWZpbmVkIjpyKGkpO2Z1bmN0aW9uIGcoZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxlLHt2YWx1ZTp0LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSl9Im9iamVjdCIhPT1tJiYiZnVuY3Rpb24iIT09bXx8IU9iamVjdC5pc0V4dGVuc2libGUoaSl8fChnKCJfX2dldF9fIixoKSxnKCJfX0dldERlcGVuZGVuY3lfXyIsaCksZygiX19SZXdpcmVfXyIseSksZygiX19zZXRfXyIseSksZygiX19yZXNldF9fIixfKSxnKCJfX1Jlc2V0RGVwZW5kZW5jeV9fIixfKSxnKCJfX3dpdGhfXyIsdiksZygiX19SZXdpcmVBUElfXyIsZCkpLHQuX19nZXRfXz1oLHQuX19HZXREZXBlbmRlbmN5X189aCx0Ll9fUmV3aXJlX189eSx0Ll9fc2V0X189eSx0Ll9fUmVzZXREZXBlbmRlbmN5X189Xyx0Ll9fUmV3aXJlQVBJX189ZH0pLmNhbGwodGhpcyxuKDIxKSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Ll9fUmV3aXJlQVBJX189dC5fX1Jlc2V0RGVwZW5kZW5jeV9fPXQuX19zZXRfXz10Ll9fUmV3aXJlX189dC5fX0dldERlcGVuZGVuY3lfXz10Ll9fZ2V0X189dm9pZCAwO3ZhciByPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSxvPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciBuPWFyZ3VtZW50c1t0XTtmb3IodmFyIHIgaW4gbilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobixyKSYmKGVbcl09bltyXSl9cmV0dXJuIGV9LGk9dShuKDI5NSkpLGE9dShuKDI5NikpO2Z1bmN0aW9uIHUoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fXZhciBjPXtmaWx0ZXJOb3RSb3V0ZXI6ZnVuY3Rpb24oZSl7ZS5yb3V0ZXI7cmV0dXJuIGZ1bmN0aW9uKGUsdCl7dmFyIG49e307Zm9yKHZhciByIGluIGUpdC5pbmRleE9mKHIpPj0wfHxPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmKG5bcl09ZVtyXSk7cmV0dXJuIG59KGUsWyJyb3V0ZXIiXSl9LGZyb21KUzpmdW5jdGlvbihlKXtyZXR1cm4gZX0sZ2V0SW46digiZ2V0SW4iKSxtZXJnZTpmdW5jdGlvbihlLHQpe3JldHVybiBvKHt9LGUsdCl9LHNldEluOnYoInNldEluIiksdG9KUzpmdW5jdGlvbihlKXtyZXR1cm4gZX19O2Z1bmN0aW9uIGwoKXt0cnl7aWYoZSlyZXR1cm4gZX1jYXRjaChlKXt0cnl7aWYod2luZG93KXJldHVybiB3aW5kb3d9Y2F0Y2goZSl7cmV0dXJuIHRoaXN9fX10LmRlZmF1bHQ9digic3RydWN0dXJlIik7dmFyIHMsZj1udWxsO2Z1bmN0aW9uIHAoKXtpZihudWxsPT09Zil7dmFyIGU9bCgpO2UuX18kJEdMT0JBTF9SRVdJUkVfTkVYVF9NT0RVTEVfSURfX3x8KGUuX18kJEdMT0JBTF9SRVdJUkVfTkVYVF9NT0RVTEVfSURfXz0wKSxmPV9fJCRHTE9CQUxfUkVXSVJFX05FWFRfTU9EVUxFX0lEX18rK31yZXR1cm4gZn1mdW5jdGlvbiBkKCl7dmFyIGU9bCgpO3JldHVybiBlLl9fJCRHTE9CQUxfUkVXSVJFX1JFR0lTVFJZX198fChlLl9fJCRHTE9CQUxfUkVXSVJFX1JFR0lTVFJZX189T2JqZWN0LmNyZWF0ZShudWxsKSksX18kJEdMT0JBTF9SRVdJUkVfUkVHSVNUUllfX31mdW5jdGlvbiBoKCl7dmFyIGU9cCgpLHQ9ZCgpLG49dFtlXTtyZXR1cm4gbnx8KHRbZV09T2JqZWN0LmNyZWF0ZShudWxsKSxuPXRbZV0pLG59KHM9bCgpKS5fX3Jld2lyZV9yZXNldF9hbGxfX3x8KHMuX19yZXdpcmVfcmVzZXRfYWxsX189ZnVuY3Rpb24oKXtzLl9fJCRHTE9CQUxfUkVXSVJFX1JFR0lTVFJZX189T2JqZWN0LmNyZWF0ZShudWxsKX0pO3ZhciB5PSJfX0lOVEVOVElPTkFMX1VOREVGSU5FRF9fIixfPXt9O2Z1bmN0aW9uIHYoZSl7dmFyIHQ9aCgpO2lmKHZvaWQgMD09PXRbZV0pcmV0dXJuIGZ1bmN0aW9uKGUpe3N3aXRjaChlKXtjYXNlImdldEluIjpyZXR1cm4gaS5kZWZhdWx0O2Nhc2Uic2V0SW4iOnJldHVybiBhLmRlZmF1bHQ7Y2FzZSJzdHJ1Y3R1cmUiOnJldHVybiBjfXJldHVybn0oZSk7dmFyIG49dFtlXTtyZXR1cm4gbj09PXk/dm9pZCAwOm59ZnVuY3Rpb24gbShlLHQpe3ZhciBuPWgoKTtpZigib2JqZWN0IiE9PSh2b2lkIDA9PT1lPyJ1bmRlZmluZWQiOnIoZSkpKXJldHVybiBuW2VdPXZvaWQgMD09PXQ/eTp0LGZ1bmN0aW9uKCl7ZyhlKX07T2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXtuW3RdPWVbdF19KX1mdW5jdGlvbiBnKGUpe3ZhciB0PWgoKTtkZWxldGUgdFtlXSwwPT1PYmplY3Qua2V5cyh0KS5sZW5ndGgmJmRlbGV0ZSBkKClbcF19ZnVuY3Rpb24gYihlKXt2YXIgdD1oKCksbj1PYmplY3Qua2V5cyhlKSxyPXt9O2Z1bmN0aW9uIG8oKXtuLmZvckVhY2goZnVuY3Rpb24oZSl7dFtlXT1yW2VdfSl9cmV0dXJuIGZ1bmN0aW9uKGkpe24uZm9yRWFjaChmdW5jdGlvbihuKXtyW25dPXRbbl0sdFtuXT1lW25dfSk7dmFyIGE9aSgpO3JldHVybiBhJiYiZnVuY3Rpb24iPT10eXBlb2YgYS50aGVuP2EudGhlbihvKS5jYXRjaChvKTpvKCksYX19IWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShfLGUse3ZhbHVlOnQsZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KX1lKCJfX2dldF9fIix2KSxlKCJfX0dldERlcGVuZGVuY3lfXyIsdiksZSgiX19SZXdpcmVfXyIsbSksZSgiX19zZXRfXyIsbSksZSgiX19yZXNldF9fIixnKSxlKCJfX1Jlc2V0RGVwZW5kZW5jeV9fIixnKSxlKCJfX3dpdGhfXyIsYil9KCk7dmFyIHc9dm9pZCAwPT09Yz8idW5kZWZpbmVkIjpyKGMpO2Z1bmN0aW9uIEUoZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoYyxlLHt2YWx1ZTp0LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSl9Im9iamVjdCIhPT13JiYiZnVuY3Rpb24iIT09d3x8IU9iamVjdC5pc0V4dGVuc2libGUoYyl8fChFKCJfX2dldF9fIix2KSxFKCJfX0dldERlcGVuZGVuY3lfXyIsdiksRSgiX19SZXdpcmVfXyIsbSksRSgiX19zZXRfXyIsbSksRSgiX19yZXNldF9fIixnKSxFKCJfX1Jlc2V0RGVwZW5kZW5jeV9fIixnKSxFKCJfX3dpdGhfXyIsYiksRSgiX19SZXdpcmVBUElfXyIsXykpLHQuX19nZXRfXz12LHQuX19HZXREZXBlbmRlbmN5X189dix0Ll9fUmV3aXJlX189bSx0Ll9fc2V0X189bSx0Ll9fUmVzZXREZXBlbmRlbmN5X189Zyx0Ll9fUmV3aXJlQVBJX189X30pLmNhbGwodGhpcyxuKDIxKSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0scj1mdW5jdGlvbihlLHQpe2lmKCFlKXJldHVybiBlO3ZhciBuPXQubGVuZ3RoO2lmKG4pe2Zvcih2YXIgcj1lLG89MDtvPG4mJnI7KytvKXI9clt0W29dXTtyZXR1cm4gcn19O2Z1bmN0aW9uIG8oKXt0cnl7aWYoZSlyZXR1cm4gZX1jYXRjaChlKXt0cnl7aWYod2luZG93KXJldHVybiB3aW5kb3d9Y2F0Y2goZSl7cmV0dXJuIHRoaXN9fX10LmRlZmF1bHQ9cCgiZ2V0SW4iKTt2YXIgaSxhPW51bGw7ZnVuY3Rpb24gdSgpe2lmKG51bGw9PT1hKXt2YXIgZT1vKCk7ZS5fXyQkR0xPQkFMX1JFV0lSRV9ORVhUX01PRFVMRV9JRF9ffHwoZS5fXyQkR0xPQkFMX1JFV0lSRV9ORVhUX01PRFVMRV9JRF9fPTApLGE9X18kJEdMT0JBTF9SRVdJUkVfTkVYVF9NT0RVTEVfSURfXysrfXJldHVybiBhfWZ1bmN0aW9uIGMoKXt2YXIgZT1vKCk7cmV0dXJuIGUuX18kJEdMT0JBTF9SRVdJUkVfUkVHSVNUUllfX3x8KGUuX18kJEdMT0JBTF9SRVdJUkVfUkVHSVNUUllfXz1PYmplY3QuY3JlYXRlKG51bGwpKSxfXyQkR0xPQkFMX1JFV0lSRV9SRUdJU1RSWV9ffWZ1bmN0aW9uIGwoKXt2YXIgZT11KCksdD1jKCksbj10W2VdO3JldHVybiBufHwodFtlXT1PYmplY3QuY3JlYXRlKG51bGwpLG49dFtlXSksbn0oaT1vKCkpLl9fcmV3aXJlX3Jlc2V0X2FsbF9ffHwoaS5fX3Jld2lyZV9yZXNldF9hbGxfXz1mdW5jdGlvbigpe2kuX18kJEdMT0JBTF9SRVdJUkVfUkVHSVNUUllfXz1PYmplY3QuY3JlYXRlKG51bGwpfSk7dmFyIHM9Il9fSU5URU5USU9OQUxfVU5ERUZJTkVEX18iLGY9e307ZnVuY3Rpb24gcChlKXt2YXIgdD1sKCk7aWYodm9pZCAwPT09dFtlXSlyZXR1cm4gZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UiZ2V0SW4iOnJldHVybiByfXJldHVybn0oZSk7dmFyIG49dFtlXTtyZXR1cm4gbj09PXM/dm9pZCAwOm59ZnVuY3Rpb24gZChlLHQpe3ZhciByPWwoKTtpZigib2JqZWN0IiE9PSh2b2lkIDA9PT1lPyJ1bmRlZmluZWQiOm4oZSkpKXJldHVybiByW2VdPXZvaWQgMD09PXQ/czp0LGZ1bmN0aW9uKCl7aChlKX07T2JqZWN0LmtleXMoZSkuZm9yRWFjaChmdW5jdGlvbih0KXtyW3RdPWVbdF19KX1mdW5jdGlvbiBoKGUpe3ZhciB0PWwoKTtkZWxldGUgdFtlXSwwPT1PYmplY3Qua2V5cyh0KS5sZW5ndGgmJmRlbGV0ZSBjKClbdV19ZnVuY3Rpb24geShlKXt2YXIgdD1sKCksbj1PYmplY3Qua2V5cyhlKSxyPXt9O2Z1bmN0aW9uIG8oKXtuLmZvckVhY2goZnVuY3Rpb24oZSl7dFtlXT1yW2VdfSl9cmV0dXJuIGZ1bmN0aW9uKGkpe24uZm9yRWFjaChmdW5jdGlvbihuKXtyW25dPXRbbl0sdFtuXT1lW25dfSk7dmFyIGE9aSgpO3JldHVybiBhJiYiZnVuY3Rpb24iPT10eXBlb2YgYS50aGVuP2EudGhlbihvKS5jYXRjaChvKTpvKCksYX19IWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShmLGUse3ZhbHVlOnQsZW51bWVyYWJsZTohMSxjb25maWd1cmFibGU6ITB9KX1lKCJfX2dldF9fIixwKSxlKCJfX0dldERlcGVuZGVuY3lfXyIscCksZSgiX19SZXdpcmVfXyIsZCksZSgiX19zZXRfXyIsZCksZSgiX19yZXNldF9fIixoKSxlKCJfX1Jlc2V0RGVwZW5kZW5jeV9fIixoKSxlKCJfX3dpdGhfXyIseSl9KCk7dmFyIF89dm9pZCAwPT09cj8idW5kZWZpbmVkIjpuKHIpO2Z1bmN0aW9uIHYoZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkocixlLHt2YWx1ZTp0LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSl9Im9iamVjdCIhPT1fJiYiZnVuY3Rpb24iIT09X3x8IU9iamVjdC5pc0V4dGVuc2libGUocil8fCh2KCJfX2dldF9fIixwKSx2KCJfX0dldERlcGVuZGVuY3lfXyIscCksdigiX19SZXdpcmVfXyIsZCksdigiX19zZXRfXyIsZCksdigiX19yZXNldF9fIixoKSx2KCJfX1Jlc2V0RGVwZW5kZW5jeV9fIixoKSx2KCJfX3dpdGhfXyIseSksdigiX19SZXdpcmVBUElfXyIsZikpLHQuX19nZXRfXz1wLHQuX19HZXREZXBlbmRlbmN5X189cCx0Ll9fUmV3aXJlX189ZCx0Ll9fc2V0X189ZCx0Ll9fUmVzZXREZXBlbmRlbmN5X189aCx0Ll9fUmV3aXJlQVBJX189Zn0pLmNhbGwodGhpcyxuKDIxKSl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KTt2YXIgbj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0scj1PYmplY3QuYXNzaWdufHxmdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgbj1hcmd1bWVudHNbdF07Zm9yKHZhciByIGluIG4pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4scikmJihlW3JdPW5bcl0pfXJldHVybiBlfTt2YXIgbz1mdW5jdGlvbihlLHQsbixvKXtpZihvPj1uLmxlbmd0aClyZXR1cm4gdDt2YXIgaT1uW29dLGE9aCgic2V0SW5XaXRoUGF0aCIpKGUmJmVbaV0sdCxuLG8rMSk7aWYoIWUpe3ZhciB1PWlzTmFOKGkpP3t9OltdO3JldHVybiB1W2ldPWEsdX1pZihBcnJheS5pc0FycmF5KGUpKXt2YXIgYz1bXS5jb25jYXQoZSk7cmV0dXJuIGNbaV09YSxjfXJldHVybiByKHt9LGUsZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0IGluIGU/T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6bixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMH0pOmVbdF09bixlfSh7fSxpLGEpKX0saT1mdW5jdGlvbihlLHQsbil7cmV0dXJuIGgoInNldEluV2l0aFBhdGgiKShlLG4sdCwwKX07ZnVuY3Rpb24gYSgpe3RyeXtpZihlKXJldHVybiBlfWNhdGNoKGUpe3RyeXtpZih3aW5kb3cpcmV0dXJuIHdpbmRvd31jYXRjaChlKXtyZXR1cm4gdGhpc319fXQuZGVmYXVsdD1oKCJzZXRJbiIpO3ZhciB1LGM9bnVsbDtmdW5jdGlvbiBsKCl7aWYobnVsbD09PWMpe3ZhciBlPWEoKTtlLl9fJCRHTE9CQUxfUkVXSVJFX05FWFRfTU9EVUxFX0lEX198fChlLl9fJCRHTE9CQUxfUkVXSVJFX05FWFRfTU9EVUxFX0lEX189MCksYz1fXyQkR0xPQkFMX1JFV0lSRV9ORVhUX01PRFVMRV9JRF9fKyt9cmV0dXJuIGN9ZnVuY3Rpb24gcygpe3ZhciBlPWEoKTtyZXR1cm4gZS5fXyQkR0xPQkFMX1JFV0lSRV9SRUdJU1RSWV9ffHwoZS5fXyQkR0xPQkFMX1JFV0lSRV9SRUdJU1RSWV9fPU9iamVjdC5jcmVhdGUobnVsbCkpLF9fJCRHTE9CQUxfUkVXSVJFX1JFR0lTVFJZX199ZnVuY3Rpb24gZigpe3ZhciBlPWwoKSx0PXMoKSxuPXRbZV07cmV0dXJuIG58fCh0W2VdPU9iamVjdC5jcmVhdGUobnVsbCksbj10W2VdKSxufSh1PWEoKSkuX19yZXdpcmVfcmVzZXRfYWxsX198fCh1Ll9fcmV3aXJlX3Jlc2V0X2FsbF9fPWZ1bmN0aW9uKCl7dS5fXyQkR0xPQkFMX1JFV0lSRV9SRUdJU1RSWV9fPU9iamVjdC5jcmVhdGUobnVsbCl9KTt2YXIgcD0iX19JTlRFTlRJT05BTF9VTkRFRklORURfXyIsZD17fTtmdW5jdGlvbiBoKGUpe3ZhciB0PWYoKTtpZih2b2lkIDA9PT10W2VdKXJldHVybiBmdW5jdGlvbihlKXtzd2l0Y2goZSl7Y2FzZSJzZXRJbldpdGhQYXRoIjpyZXR1cm4gbztjYXNlInNldEluIjpyZXR1cm4gaX1yZXR1cm59KGUpO3ZhciBuPXRbZV07cmV0dXJuIG49PT1wP3ZvaWQgMDpufWZ1bmN0aW9uIHkoZSx0KXt2YXIgcj1mKCk7aWYoIm9iamVjdCIhPT0odm9pZCAwPT09ZT8idW5kZWZpbmVkIjpuKGUpKSlyZXR1cm4gcltlXT12b2lkIDA9PT10P3A6dCxmdW5jdGlvbigpe18oZSl9O09iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24odCl7clt0XT1lW3RdfSl9ZnVuY3Rpb24gXyhlKXt2YXIgdD1mKCk7ZGVsZXRlIHRbZV0sMD09T2JqZWN0LmtleXModCkubGVuZ3RoJiZkZWxldGUgcygpW2xdfWZ1bmN0aW9uIHYoZSl7dmFyIHQ9ZigpLG49T2JqZWN0LmtleXMoZSkscj17fTtmdW5jdGlvbiBvKCl7bi5mb3JFYWNoKGZ1bmN0aW9uKGUpe3RbZV09cltlXX0pfXJldHVybiBmdW5jdGlvbihpKXtuLmZvckVhY2goZnVuY3Rpb24obil7cltuXT10W25dLHRbbl09ZVtuXX0pO3ZhciBhPWkoKTtyZXR1cm4gYSYmImZ1bmN0aW9uIj09dHlwZW9mIGEudGhlbj9hLnRoZW4obykuY2F0Y2gobyk6bygpLGF9fSFmdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZCxlLHt2YWx1ZTp0LGVudW1lcmFibGU6ITEsY29uZmlndXJhYmxlOiEwfSl9ZSgiX19nZXRfXyIsaCksZSgiX19HZXREZXBlbmRlbmN5X18iLGgpLGUoIl9fUmV3aXJlX18iLHkpLGUoIl9fc2V0X18iLHkpLGUoIl9fcmVzZXRfXyIsXyksZSgiX19SZXNldERlcGVuZGVuY3lfXyIsXyksZSgiX193aXRoX18iLHYpfSgpO3ZhciBtPXZvaWQgMD09PWk/InVuZGVmaW5lZCI6bihpKTtmdW5jdGlvbiBnKGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGksZSx7dmFsdWU6dCxlbnVtZXJhYmxlOiExLGNvbmZpZ3VyYWJsZTohMH0pfSJvYmplY3QiIT09bSYmImZ1bmN0aW9uIiE9PW18fCFPYmplY3QuaXNFeHRlbnNpYmxlKGkpfHwoZygiX19nZXRfXyIsaCksZygiX19HZXREZXBlbmRlbmN5X18iLGgpLGcoIl9fUmV3aXJlX18iLHkpLGcoIl9fc2V0X18iLHkpLGcoIl9fcmVzZXRfXyIsXyksZygiX19SZXNldERlcGVuZGVuY3lfXyIsXyksZygiX193aXRoX18iLHYpLGcoIl9fUmV3aXJlQVBJX18iLGQpKSx0Ll9fZ2V0X189aCx0Ll9fR2V0RGVwZW5kZW5jeV9fPWgsdC5fX1Jld2lyZV9fPXksdC5fX3NldF9fPXksdC5fX1Jlc2V0RGVwZW5kZW5jeV9fPV8sdC5fX1Jld2lyZUFQSV9fPWR9KS5jYWxsKHRoaXMsbigyMSkpfSxmdW5jdGlvbihlLHQsbil7fSxmdW5jdGlvbihlLHQsbil7fSxmdW5jdGlvbihlLHQsbil7fSxmdW5jdGlvbihlLHQsbil7fSxmdW5jdGlvbihlLHQsbil7fSxmdW5jdGlvbihlLHQsbil7fSxmdW5jdGlvbihlLHQsbil7fSxmdW5jdGlvbihlLHQsbil7fSxmdW5jdGlvbihlLHQsbil7fSxmdW5jdGlvbihlLHQsbil7fSxmdW5jdGlvbihlLHQsbil7fSxmdW5jdGlvbihlLHQsbil7fSxmdW5jdGlvbihlLHQsbil7fSxmdW5jdGlvbihlLHQsbil7fSxmdW5jdGlvbihlLHQsbil7fSxmdW5jdGlvbihlLHQsbil7fSxmdW5jdGlvbihlLHQsbil7fSxmdW5jdGlvbihlLHQsbil7fSxmdW5jdGlvbihlLHQsbil7fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO24ucih0KTtuKDEyNSksbigxMjgpLG4oMTQ2KSxuKDE1MSksbigxNTMpLG4oMTU1KSxuKDE2OCksbigxODcpLG4oMjA5KSxuKDIxNyksbigyNDIpLG4oMjQ1KSxuKDI0NiksbigyNDcpLG4oMjQ5KSxuKDI2NSksbigyNzgpO3ZhciByLG8saSxhPW4oMCksdT1uKDEyMCksYz1uKDEyMSksbD1uKDE2KSxzPW4oNjApLGY9big3KSxwPShuKDI5Nykscj1mdW5jdGlvbihlLHQpe3JldHVybihyPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KXQuaGFzT3duUHJvcGVydHkobikmJihlW25dPXRbbl0pfSkoZSx0KX0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiBuKCl7dGhpcy5jb25zdHJ1Y3Rvcj1lfXIoZSx0KSxlLnByb3RvdHlwZT1udWxsPT09dD9PYmplY3QuY3JlYXRlKHQpOihuLnByb3RvdHlwZT10LnByb3RvdHlwZSxuZXcgbil9KSxkPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gbnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBwKHQsZSksdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIGEuY3JlYXRlRWxlbWVudCgiYnV0dG9uIix7Y2xhc3NOYW1lOiJuYXYtYnV0dG9uIHB1cmUtYnV0dG9uIHB1cmUtYnV0dG9uLXByaW1hcnkiLG9uQ2xpY2s6dGhpcy5wcm9wcy5oYW5kbGVDbGljayxkaXNhYmxlZDp0aGlzLnByb3BzLmlzRGlzYWJsZWR9LHRoaXMucHJvcHMuYnV0dG9uVGV4dCl9LHR9KGEuQ29tcG9uZW50KSxoPShuKDI5OCksZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbih0LG4pe3JldHVybihlPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KXQuaGFzT3duUHJvcGVydHkobikmJihlW25dPXRbbl0pfSkodCxuKX07cmV0dXJuIGZ1bmN0aW9uKHQsbil7ZnVuY3Rpb24gcigpe3RoaXMuY29uc3RydWN0b3I9dH1lKHQsbiksdC5wcm90b3R5cGU9bnVsbD09PW4/T2JqZWN0LmNyZWF0ZShuKTooci5wcm90b3R5cGU9bi5wcm90b3R5cGUsbmV3IHIpfX0oKSkseT0oZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBudWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9aCh0LGUpLHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiBhLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToibnBjLW5hdi1idXR0b24tcm93In0sdGhpcy5wcm9wcy5jaGlsZHJlbil9fShhLkNvbXBvbmVudCksbigyOTkpLGZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24odCxuKXtyZXR1cm4oZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdCl0Lmhhc093blByb3BlcnR5KG4pJiYoZVtuXT10W25dKX0pKHQsbil9O3JldHVybiBmdW5jdGlvbih0LG4pe2Z1bmN0aW9uIHIoKXt0aGlzLmNvbnN0cnVjdG9yPXR9ZSh0LG4pLHQucHJvdG90eXBlPW51bGw9PT1uP09iamVjdC5jcmVhdGUobik6KHIucHJvdG90eXBlPW4ucHJvdG90eXBlLG5ldyByKX19KCkpLF89KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gbnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXkodCxlKSx0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9ZnVuY3Rpb24odCl7dmFyIG49dC50YXJnZXQ7ZS5wcm9wcy5oYW5kbGVDbGljayhuLnZhbHVlKX0sbj1mdW5jdGlvbigpe307cmV0dXJuIGEuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJyYWRpby1idXR0b24tZ3JvdXAtd3JhcHBlciJ9LHRoaXMucHJvcHMudmFsdWVTZXRzLm1hcChmdW5jdGlvbihyLG8pe3JldHVybiBhLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToicmFkaW8tYnV0dG9uLWNvbnRhaW5lciBwcmV0dHkgcC1yb3VuZCBwLWRlZmF1bHQgcC1zbW9vdGgiLGtleTpvfSxhLmNyZWF0ZUVsZW1lbnQoImlucHV0Iix7dHlwZToicmFkaW8iLG5hbWU6ZS5wcm9wcy5uYW1lLGlkOmUucHJvcHMubmFtZSsiXyIrbyx2YWx1ZTpyLlZhbHVlQ29kZSxvbkNsaWNrOnQsY2hlY2tlZDplLnByb3BzLmN1cnJlbnRWYWx1ZT09PXIuVmFsdWVDb2RlLG9uQ2hhbmdlOm59KSxhLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToic3RhdGUgcC1wcmltYXJ5In0sYS5jcmVhdGVFbGVtZW50KCJsYWJlbCIse2h0bWxGb3I6ZS5wcm9wcy5uYW1lKyJfIitvfSxhLmNyZWF0ZUVsZW1lbnQoInNwYW4iLG51bGwsci5WYWx1ZU5hbWUpKSkpfSkpfX0oYS5Db21wb25lbnQpLG4oMzAwKSxmdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKHQsbil7cmV0dXJuKGU9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmKGVbbl09dFtuXSl9KSh0LG4pfTtyZXR1cm4gZnVuY3Rpb24odCxuKXtmdW5jdGlvbiByKCl7dGhpcy5jb25zdHJ1Y3Rvcj10fWUodCxuKSx0LnByb3RvdHlwZT1udWxsPT09bj9PYmplY3QuY3JlYXRlKG4pOihyLnByb3RvdHlwZT1uLnByb3RvdHlwZSxuZXcgcil9fSgpKSx2PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gbnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBfKHQsZSksdC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXt0aGlzLmNvbnRhaW5lci5mb2N1cygpfSx0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiBhLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToibnBjLXNlY3Rpb24tZGVzY3JpcHRpb24ifSxhLmNyZWF0ZUVsZW1lbnQoInAiLHtyZWY6ZnVuY3Rpb24odCl7ZS5jb250YWluZXI9dH0sdGFiSW5kZXg6LTF9LHRoaXMucHJvcHMuY2hpbGRyZW4pKX0sdH0oYS5Db21wb25lbnQpLG09KG4oMzAxKSxmdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKHQsbil7cmV0dXJuKGU9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmKGVbbl09dFtuXSl9KSh0LG4pfTtyZXR1cm4gZnVuY3Rpb24odCxuKXtmdW5jdGlvbiByKCl7dGhpcy5jb25zdHJ1Y3Rvcj10fWUodCxuKSx0LnByb3RvdHlwZT1udWxsPT09bj9PYmplY3QuY3JlYXRlKG4pOihyLnByb3RvdHlwZT1uLnByb3RvdHlwZSxuZXcgcil9fSgpKSxnPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgdD1udWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIHQuaGFuZGxlQ2hhbmdlPWZ1bmN0aW9uKGUsbil7IWUuSXNDb21wbGV0ZWR8fGUuSXNBY3RpdmV8fGUuTm90RWRpdGFibGV8fHQucHJvcHMuaGFuZGxlQ2hhbmdlKG4pfSx0LmRyYXdTdGVwcz1mdW5jdGlvbigpe2Zvcih2YXIgZT1bXSxuPWZ1bmN0aW9uKG4pe3ZhciByPXQucHJvcHMuc3RlcHNbbl0sbz0obisxKS50b1N0cmluZygpLGk9LTEsdT0hMTtyLklzQ29tcGxldGVkPyhvPSI/IixpPTAsci5Ob3RFZGl0YWJsZSYmKHU9ITApKTpyLklzQWN0aXZlJiYobz0iPyIsaT0wKTt2YXIgYz0ibnBjLXN0ZXAgIisoci5Jc0FjdGl2ZT8iIGFjdGl2ZSAiOnIuSXNDb21wbGV0ZWQ/IiBkb25lICI6IiIpKyh1PyIgbm9uLWVkaXRhYmxlICI6IiIpKyhyLk5vdEFwcGxpY2FibGU/Im5hIjoiIiksbD0iIjtsPXIuSXNDb21wbGV0ZWQmJnIuTm90RWRpdGFibGU/ci5UaXRsZSsiIGlzIGRvbmUiOnIuSXNDb21wbGV0ZWQmJiFyLk5vdEVkaXRhYmxlPyJSZXR1cm4gdG8gIityLlRpdGxlOnIuSXNBY3RpdmU/IkN1cnJlbnQgc3RlcCBpcyAiK3IuVGl0bGU6IiI7dmFyIHM9YS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6YyxrZXk6Im5wYy1zdGVwLSIrbixvbkNsaWNrOmZ1bmN0aW9uKGUpe3JldHVybiB0LmhhbmRsZUNoYW5nZShyLG4pfSx0YWJJbmRleDppLHRpdGxlOmwscm9sZToib3B0aW9uIn0sYS5jcmVhdGVFbGVtZW50KCJkaXYiLHtrZXk6Im5wYy1zdGVwLWNpcmNsZS0iK24sY2xhc3NOYW1lOiJucGMtc3RlcC1jaXJjbGUiLCJhcmlhLWhpZGRlbiI6ITB9LGEuY3JlYXRlRWxlbWVudCgic3BhbiIsbnVsbCxvKSksYS5jcmVhdGVFbGVtZW50KCJkaXYiLHtrZXk6Im5wYy1zdGVwLXRpdGxlLSIrbixjbGFzc05hbWU6Im5wYy1zdGVwLXRpdGxlIix0YWJJbmRleDotMX0sci5UaXRsZSksYS5jcmVhdGVFbGVtZW50KCJkaXYiLHtrZXk6Im5wYy1zdGVwLWJhci1sZWZ0IituLGNsYXNzTmFtZToibnBjLXN0ZXAtYmFyLWxlZnQifSksYS5jcmVhdGVFbGVtZW50KCJkaXYiLHtrZXk6Im5wYy1zdGVwLWJhci1yaWdodCIrbixjbGFzc05hbWU6Im5wYy1zdGVwLWJhci1yaWdodCJ9KSk7ZS5wdXNoKHMpfSxyPTA7cjx0LnByb3BzLnN0ZXBzLmxlbmd0aDtyKyspbihyKTtyZXR1cm4gZX0sdH1yZXR1cm4gbSh0LGUpLHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiBhLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToibnBjLXN0ZXBwZXItd3JhcHBlciJ9LHRoaXMuZHJhd1N0ZXBzKCkpfSx0fShhLkNvbXBvbmVudCksYj1uKDYpLHc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3ZvaWQgMD09PWUmJihlPXt9KTt2YXIgdD10aGlzO09iamVjdC5rZXlzKGUpLmZvckVhY2goZnVuY3Rpb24obil7dFtuXT1lW25dfSl9cmV0dXJuIGUucHJvdG90eXBlLkdldE5vbkVtcHR5UHJvcGVydGllcz1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD17fTtyZXR1cm4gT2JqZWN0LmtleXModGhpcykuZm9yRWFjaChmdW5jdGlvbihuKXt2b2lkIDAhPT1lW25dJiZudWxsIT09ZVtuXSYmKHRbbl09ZVtuXSl9KSx0fSxlLnByb3RvdHlwZS5DbG9uZU1vZGVsPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBlKHRoaXMpfSxlLnByb3RvdHlwZS5DbG9uZVByb3BlcnRpZXM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9e307cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMpLmZvckVhY2goZnVuY3Rpb24obil7dFtuXT1lW25dfSksdH0sZS5wcm90b3R5cGUuQ2xlYXJQcm9wZXJ0aWVzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcztPYmplY3Qua2V5cyh0aGlzKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2VbdF09dm9pZCAwfSl9LGV9KCksRT1mdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKHQsbil7cmV0dXJuKGU9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmKGVbbl09dFtuXSl9KSh0LG4pfTtyZXR1cm4gZnVuY3Rpb24odCxuKXtmdW5jdGlvbiByKCl7dGhpcy5jb25zdHJ1Y3Rvcj10fWUodCxuKSx0LnByb3RvdHlwZT1udWxsPT09bj9PYmplY3QuY3JlYXRlKG4pOihyLnByb3RvdHlwZT1uLnByb3RvdHlwZSxuZXcgcil9fSgpLFQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBudWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIEUodCxlKSx0fSh3KSxPPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt2b2lkIDA9PT1lJiYoZT17fSk7dmFyIHQ9dGhpcztPYmplY3Qua2V5cyhlKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3Rbbl09ZVtuXX0pfXJldHVybiBlLnByb3RvdHlwZS5HZXROb25FbXB0eVByb3BlcnRpZXM9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9e307cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMpLmZvckVhY2goZnVuY3Rpb24obil7dm9pZCAwIT09ZVtuXSYmbnVsbCE9PWVbbl0mJih0W25dPWVbbl0pfSksdH0sZS5wcm90b3R5cGUuQ2xvbmVNb2RlbD1mdW5jdGlvbigpe3JldHVybiBuZXcgZSh0aGlzKX0sZS5wcm90b3R5cGUuQ2xvbmVQcm9wZXJ0aWVzPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PXt9O3JldHVybiBPYmplY3Qua2V5cyh0aGlzKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe3Rbbl09ZVtuXX0pLHR9LGUucHJvdG90eXBlLkNsZWFyUHJvcGVydGllcz1mdW5jdGlvbigpe3ZhciBlPXRoaXM7T2JqZWN0LmtleXModGhpcykuZm9yRWFjaChmdW5jdGlvbih0KXtlW3RdPXZvaWQgMH0pfSxlfSgpLFM9ZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbih0LG4pe3JldHVybihlPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KXQuaGFzT3duUHJvcGVydHkobikmJihlW25dPXRbbl0pfSkodCxuKX07cmV0dXJuIGZ1bmN0aW9uKHQsbil7ZnVuY3Rpb24gcigpe3RoaXMuY29uc3RydWN0b3I9dH1lKHQsbiksdC5wcm90b3R5cGU9bnVsbD09PW4/T2JqZWN0LmNyZWF0ZShuKTooci5wcm90b3R5cGU9bi5wcm90b3R5cGUsbmV3IHIpfX0oKSx4PShmdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIG51bGwhPT1lJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31TKHQsZSl9KE8pLGZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24odCxuKXtyZXR1cm4oZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdCl0Lmhhc093blByb3BlcnR5KG4pJiYoZVtuXT10W25dKX0pKHQsbil9O3JldHVybiBmdW5jdGlvbih0LG4pe2Z1bmN0aW9uIHIoKXt0aGlzLmNvbnN0cnVjdG9yPXR9ZSh0LG4pLHQucHJvdG90eXBlPW51bGw9PT1uP09iamVjdC5jcmVhdGUobik6KHIucHJvdG90eXBlPW4ucHJvdG90eXBlLG5ldyByKX19KCkpLFA9KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gbnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXgodCxlKX0odyksZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciB0PWUuY2FsbCh0aGlzKXx8dGhpcztyZXR1cm4gdC50dWl0aW9uPXthbW91bnQ6MCxpbkRpc3RyaWN0OjAsaW5TdGF0ZTowLG91dFN0YXRlOjB9LHQudHVpdGlvbkRpc3BsYXk9e2Ftb3VudERpc3BsYXk6ITEsaW5EaXN0cmljdERpc3BsYXk6ITEsaW5TdGF0ZURpc3BsYXk6ITEsb3V0U3RhdGVEaXNwbGF5OiExfSx0LmJvb2tzPXthbW91bnQ6MH0sdC5leHBlbnNlc1Jvb209e29uQ2FtcHVzOjAsb2ZmQ2FtcHVzTm9GYW1pbHk6MCxvZmZDYW1wdXNGYW1pbHk6MH0sdC5leHBlbnNlc090aGVyPXtvbkNhbXB1czowLG9mZkNhbXB1c05vRmFtaWx5OjAsb2ZmQ2FtcHVzRmFtaWx5OjB9LHQuZXhwZW5zZXNEaXNwbGF5PXt0aXRsZURpc3BsYXk6bnVsbCxvbkNhbXB1c0Rpc3BsYXk6bnVsbCxvZmZDYW1wdXNOb0ZhbWlseURpc3BsYXk6bnVsbCxvZmZDYW1wdXNGYW1pbHlEaXNwbGF5Om51bGx9LHR9eCh0LGUpfSh3KSxmdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIHQ9ZS5jYWxsKHRoaXMpfHx0aGlzO3JldHVybiB0LmVmY1Jhbmdlcz1bIjAiLCIxLTEsMDAwIiwiMSwwMDEtMiw1MDAiLCIyLDUwMS01LDAwMCIsIjUsMDAxLTcsNTAwIiwiNyw1MDEtMTAsMDAwIiwiMTAsMDAxLTEyLDUwMCIsIjEyLDUwMS0xNSwwMDAiLCIxNSwwMDEtMjAsMDAwIiwiMjAsMDAxLTMwLDAwMCIsIjMwLDAwMS00MCwwMDAiLCI+NDAsMDAwIiwiTm9uLUZBRlNBIGZpbGVycy8gdW5rbm93biBFRkMiXSx0LmFtb3VudD17b25DYW1wdXM6bmV3IEFycmF5KHQuZWZjUmFuZ2VzLmxlbmd0aCksb2ZmQ2FtcHVzTm9GYW1pbHk6bmV3IEFycmF5KHQuZWZjUmFuZ2VzLmxlbmd0aCksb2ZmQ2FtcHVzRmFtaWx5Om5ldyBBcnJheSh0LmVmY1Jhbmdlcy5sZW5ndGgpfSx0LmluRGlzdHJpY3Q9e29uQ2FtcHVzOm5ldyBBcnJheSh0LmVmY1Jhbmdlcy5sZW5ndGgpLG9mZkNhbXB1c05vRmFtaWx5Om5ldyBBcnJheSh0LmVmY1Jhbmdlcy5sZW5ndGgpLG9mZkNhbXB1c0ZhbWlseTpuZXcgQXJyYXkodC5lZmNSYW5nZXMubGVuZ3RoKX0sdC5pblN0YXRlPXtvbkNhbXB1czpuZXcgQXJyYXkodC5lZmNSYW5nZXMubGVuZ3RoKSxvZmZDYW1wdXNOb0ZhbWlseTpuZXcgQXJyYXkodC5lZmNSYW5nZXMubGVuZ3RoKSxvZmZDYW1wdXNGYW1pbHk6bmV3IEFycmF5KHQuZWZjUmFuZ2VzLmxlbmd0aCl9LHQub3V0U3RhdGU9e29uQ2FtcHVzOm5ldyBBcnJheSh0LmVmY1Jhbmdlcy5sZW5ndGgpLG9mZkNhbXB1c05vRmFtaWx5Om5ldyBBcnJheSh0LmVmY1Jhbmdlcy5sZW5ndGgpLG9mZkNhbXB1c0ZhbWlseTpuZXcgQXJyYXkodC5lZmNSYW5nZXMubGVuZ3RoKX0sdC5ncm91cERpc3BsYXk9e3Jvd1RpdGxlRGlzcGxheTpudWxsLGFtb3VudERpc3BsYXk6bnVsbCxpbkRpc3RyaWN0RGlzcGxheTpudWxsLGluU3RhdGVEaXNwbGF5Om51bGwsb3V0U3RhdGVEaXNwbGF5Om51bGx9LHQuY29sdW1uRGlzcGxheT17b25DYW1wdXNEaXNwbGF5Om51bGwsb2ZmQ2FtcHVzTm9GYW1pbHlEaXNwbGF5Om51bGwsb2ZmQ2FtcHVzRmFtaWx5RGlzcGxheTpudWxsfSx0fXgodCxlKX0odyksZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbih0LG4pe3JldHVybihlPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KXQuaGFzT3duUHJvcGVydHkobikmJihlW25dPXRbbl0pfSkodCxuKX07cmV0dXJuIGZ1bmN0aW9uKHQsbil7ZnVuY3Rpb24gcigpe3RoaXMuY29uc3RydWN0b3I9dH1lKHQsbiksdC5wcm90b3R5cGU9bnVsbD09PW4/T2JqZWN0LmNyZWF0ZShuKTooci5wcm90b3R5cGU9bi5wcm90b3R5cGUsbmV3IHIpfX0oKSksUj0oZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBudWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9UCh0LGUpfSh3KSxmdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKHQsbil7cmV0dXJuKGU9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmKGVbbl09dFtuXSl9KSh0LG4pfTtyZXR1cm4gZnVuY3Rpb24odCxuKXtmdW5jdGlvbiByKCl7dGhpcy5jb25zdHJ1Y3Rvcj10fWUodCxuKSx0LnByb3RvdHlwZT1udWxsPT09bj9PYmplY3QuY3JlYXRlKG4pOihyLnByb3RvdHlwZT1uLnByb3RvdHlwZSxuZXcgcil9fSgpKTshZnVuY3Rpb24oZSl7ZS5SQURJTz0iUkFESU8iLGUuRFJPUERPV049IkRST1BET1dOIixlLk5VTUJFUj0iTlVNQkVSIn0ob3x8KG89e30pKSxmdW5jdGlvbihlKXtlLkRFUEVOREVOVD0iREVQRU5ERU5UIixlLklOREVQRU5ERU5UPSJJTkRFUEVOREVOVCIsZS5JTkRFUEVOREVOVF9LSURTPSJJTkRFUEVOREVOVF9LSURTIixlLk5PVF9ESUZGRVJFTlRfVFVJVElPTj0iTk9UX0RJRkZFUkVOVF9UVUlUSU9OIixlLkRJRkZFUkVOVF9UVUlUSU9OPSJESUZGRVJFTlRfVFVJVElPTiIsZS5OT19IT1VTSU5HPSJOT19IT1VTSU5HIixlLkhPVVNJTkdfT0ZGRVJFRF9SRVFVSVJFRD0iSE9VU0lOR19PRkZFUkVEX1JFUVVJUkVEIixlLkhPVVNJTkdfT0ZGRVJFRF9PUFRJT05BTD0iSE9VU0lOR19PRkZFUkVEX09QVElPTkFMIn0oaXx8KGk9e30pKTsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBudWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9Uih0LGUpfSkodyksZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBudWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9Uih0LGUpfSh3KSxuKDMwMik7dmFyIEMsaz1mdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKHQsbil7cmV0dXJuKGU9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmKGVbbl09dFtuXSl9KSh0LG4pfTtyZXR1cm4gZnVuY3Rpb24odCxuKXtmdW5jdGlvbiByKCl7dGhpcy5jb25zdHJ1Y3Rvcj10fWUodCxuKSx0LnByb3RvdHlwZT1udWxsPT09bj9PYmplY3QuY3JlYXRlKG4pOihyLnByb3RvdHlwZT1uLnByb3RvdHlwZSxuZXcgcil9fSgpLE49ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciB0PW51bGwhPT1lJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gdC5oYW5kbGVVcGRhdGU9ZnVuY3Rpb24oZSl7dmFyIG49dC5wcm9wcy5xdWVzdGlvbjtuLkFuc3dlcj1lLnRhcmdldC52YWx1ZSx0LnByb3BzLmhhbmRsZUNoYW5nZShuKX0sdC5yZW5kZXJSYWRpb09wdGlvbnM9ZnVuY3Rpb24oKXt2YXIgZT10LnByb3BzLnF1ZXN0aW9uLlNlY3Rpb24ucmVwbGFjZSgiICIsIiIpO3JldHVybiB0LnByb3BzLnF1ZXN0aW9uLk9wdGlvbnMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiF0LnByb3BzLnR5cGV8fCFlLkFwcGxpY2FibGVXaXRofHxlLkFwcGxpY2FibGVXaXRoLmluZGV4T2YodC5wcm9wcy50eXBlKT4tMX0pLm1hcChmdW5jdGlvbihuLHIpe3ZhciBvPWUrcjtyZXR1cm4gYS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6InJhZGlvLW9wdGlvbi13cmFwcGVyIixrZXk6b30sYS5jcmVhdGVFbGVtZW50KCJpbnB1dCIse3R5cGU6InJhZGlvIixpZDpvLG5hbWU6ZSxyZXF1aXJlZDohMCx2YWx1ZTpuLktleSxvbkNoYW5nZTp0LmhhbmRsZVVwZGF0ZSxjaGVja2VkOnQucHJvcHMucXVlc3Rpb24uQW5zd2VyPT1uLktleX0pLGEuY3JlYXRlRWxlbWVudCgibGFiZWwiLHtodG1sRm9yOm99LG4uVmFsdWUpKX0pfSx0LnJlbmRlclJhZGlvPWZ1bmN0aW9uKCl7cmV0dXJuIGEuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJpbnB1dC1yYWRpby13cmFwcGVyIn0sdC5yZW5kZXJSYWRpb09wdGlvbnMoKSl9LHQucmVuZGVyRHJvcGRvd25PcHRpb25zPWZ1bmN0aW9uKCl7cmV0dXJuIHQucHJvcHMucXVlc3Rpb24uT3B0aW9ucy5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIXQucHJvcHMudHlwZXx8IWUuQXBwbGljYWJsZVdpdGh8fGUuQXBwbGljYWJsZVdpdGguaW5kZXhPZih0LnByb3BzLnR5cGUpPi0xfSkubWFwKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGEuY3JlYXRlRWxlbWVudCgib3B0aW9uIix7a2V5OiJzZWxlY3QtIit0LHZhbHVlOmUuS2V5fSxlLlZhbHVlKX0pfSx0LnJlbmRlckRyb3Bkb3duPWZ1bmN0aW9uKCl7cmV0dXJuIGEuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJpbnB1dC1kcm9wZG93bi13cmFwcGVyIn0sYS5jcmVhdGVFbGVtZW50KCJzZWxlY3QiLHtvbkNoYW5nZTp0LmhhbmRsZVVwZGF0ZSxkZWZhdWx0VmFsdWU6dC5wcm9wcy5xdWVzdGlvbi5BbnN3ZXJ8fCIiLCJhcmlhLWxhYmVsIjoiU2VsZWN0IGFuIG9wdGlvbiJ9LGEuY3JlYXRlRWxlbWVudCgib3B0aW9uIix7Y2xhc3NOYW1lOiJwbGFjZWhvbGRlciIsZGlzYWJsZWQ6ITAsdmFsdWU6IiIsaGlkZGVuOiEwfSwiU2VsZWN0IiksdC5yZW5kZXJEcm9wZG93bk9wdGlvbnMoKSkpfSx0LnJlbmRlcklucHV0TnVtYmVyPWZ1bmN0aW9uKCl7cmV0dXJuIGEuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJpbnB1dC1udW1iZXItd3JhcHBlciJ9LGEuY3JlYXRlRWxlbWVudCgiaW5wdXQiLHtkZWZhdWx0VmFsdWU6dC5wcm9wcy5xdWVzdGlvbi5BbnN3ZXIsbWluOjEsbWF4OjEwMCx0eXBlOiJudW1iZXIiLHN0ZXA6MSxwYXR0ZXJuOiJcXGQqIixvbkNoYW5nZTp0LmhhbmRsZVVwZGF0ZSwiYXJpYS1sYWJlbCI6IkVudGVyIHlvdXIgYWdlIixyZXF1aXJlZDohMH0pKX0sdH1yZXR1cm4gayh0LGUpLHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiBhLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToiYW5zd2VyLWlucHV0LXdyYXBwZXIifSxhLmNyZWF0ZUVsZW1lbnQoYi5XaGVuLHtjb25kaXRpb246dGhpcy5wcm9wcy5xdWVzdGlvbi5UeXBlPT1vLlJBRElPfSx0aGlzLnJlbmRlclJhZGlvKCkpLGEuY3JlYXRlRWxlbWVudChiLldoZW4se2NvbmRpdGlvbjp0aGlzLnByb3BzLnF1ZXN0aW9uLlR5cGU9PW8uTlVNQkVSfSx0aGlzLnJlbmRlcklucHV0TnVtYmVyKCkpLGEuY3JlYXRlRWxlbWVudChiLldoZW4se2NvbmRpdGlvbjp0aGlzLnByb3BzLnF1ZXN0aW9uLlR5cGU9PW8uRFJPUERPV059LHRoaXMucmVuZGVyRHJvcGRvd24oKSkpfSx0fShhLkNvbXBvbmVudCksQT0obigzMDMpLGZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24odCxuKXtyZXR1cm4oZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdCl0Lmhhc093blByb3BlcnR5KG4pJiYoZVtuXT10W25dKX0pKHQsbil9O3JldHVybiBmdW5jdGlvbih0LG4pe2Z1bmN0aW9uIHIoKXt0aGlzLmNvbnN0cnVjdG9yPXR9ZSh0LG4pLHQucHJvdG90eXBlPW51bGw9PT1uP09iamVjdC5jcmVhdGUobik6KHIucHJvdG90eXBlPW4ucHJvdG90eXBlLG5ldyByKX19KCkpLEk9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0KXt2YXIgbj1lLmNhbGwodGhpcyx0KXx8dGhpcztyZXR1cm4gbi5oYW5kbGVBbnN3ZXJDaGFuZ2U9ZnVuY3Rpb24oZSl7bi5wcm9wcy5vbkFuc3dlcmVkKGUsbi5wcm9wcy5pbmRleCl9LG4ucmVuZGVySGVscExpbmU9ZnVuY3Rpb24oKXtyZXR1cm4gbi5wcm9wcy5xdWVzdGlvbi5IZWxwVGV4dFtuLnByb3BzLnR5cGVdLm1hcChmdW5jdGlvbihlLHQpe3JldHVybiBhLmNyZWF0ZUVsZW1lbnQoImRpdiIse2tleTp0fSxlKX0pfSxuLnJlbmRlckhlbHBCbG9jaz1mdW5jdGlvbigpe2lmKG4ucHJvcHMucXVlc3Rpb24uSGVscFRleHQpcmV0dXJuIG4ucHJvcHMudHlwZSYmbi5wcm9wcy5xdWVzdGlvbi5IZWxwVGV4dFtuLnByb3BzLnR5cGVdP2EuY3JlYXRlRWxlbWVudCgiZGl2IixudWxsLG4ucmVuZGVySGVscExpbmUoKSk6YS5jcmVhdGVFbGVtZW50KCJkaXYiLG51bGwsbi5wcm9wcy5xdWVzdGlvbi5IZWxwVGV4dFswXSl9LG59cmV0dXJuIEEodCxlKSx0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgZT0ibnBjLXF1ZXN0aW9uLXdyYXBwZXIgcHVyZS1nICIrKHRoaXMucHJvcHMucXVlc3Rpb24uSXNBY3RpdmU/IiBhY3RpdmUgIjoiIik7cmV0dXJuIGEuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOmV9LGEuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJwdXJlLXUtMjQtMjQgcHVyZS11LW1kLTgtMjQgc2VjdGlvbi13cmFwcGVyIn0sYS5jcmVhdGVFbGVtZW50KCJoMiIse2NsYXNzTmFtZToicXVlc3Rpb24tc2VjdGlvbiJ9LHRoaXMucHJvcHMucXVlc3Rpb24uU2VjdGlvbikpLGEuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJwdXJlLXUtMjQtMjQgcHVyZS11LW1kLTE2LTI0IHF1ZXN0aW9uLXdyYXBwZXIifSxhLmNyZWF0ZUVsZW1lbnQoImZpZWxkc2V0IixudWxsLGEuY3JlYXRlRWxlbWVudChiLldoZW4se2NvbmRpdGlvbjpudWxsIT10aGlzLnByb3BzLnF1ZXN0aW9uLlRleHR8fG51bGwhPXRoaXMucHJvcHMucXVlc3Rpb24uVGV4dH0sYS5jcmVhdGVFbGVtZW50KCJsZWdlbmQiLHtjbGFzc05hbWU6InF1ZXN0aW9uLXRleHQifSx0aGlzLnByb3BzLnF1ZXN0aW9uLlRleHQpKSxhLmNyZWF0ZUVsZW1lbnQoYi5XaGVuLHtjb25kaXRpb246bnVsbCE9dGhpcy5wcm9wcy5xdWVzdGlvbi5IZWxwVGV4dHx8bnVsbCE9dGhpcy5wcm9wcy5xdWVzdGlvbi5IZWxwVGV4dH0sYS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6InF1ZXN0aW9uLWhlbHAifSx0aGlzLnJlbmRlckhlbHBCbG9jaygpKSksYS5jcmVhdGVFbGVtZW50KCJkaXYiLHtyZWY6dGhpcy5wcm9wcy5xdWVzdGlvbi5FcnJvclJlZix0YWJJbmRleDotMX0sYS5jcmVhdGVFbGVtZW50KGIuV2hlbix7Y29uZGl0aW9uOiEhdGhpcy5wcm9wcy5xdWVzdGlvbi5FcnJvclRleHR9LGEuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJlcnJvci1mb3JtYXQifSx0aGlzLnByb3BzLnF1ZXN0aW9uLkVycm9yVGV4dCkpKSxhLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToiYW5zd2VyLXdyYXBwZXIifSxhLmNyZWF0ZUVsZW1lbnQoTix7cXVlc3Rpb246dGhpcy5wcm9wcy5xdWVzdGlvbixoYW5kbGVDaGFuZ2U6dGhpcy5oYW5kbGVBbnN3ZXJDaGFuZ2UsdHlwZTp0aGlzLnByb3BzLnR5cGV9KSkpKSl9LHR9KGEuQ29tcG9uZW50KSxEPShuKDMwNCksZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbih0LG4pe3JldHVybihlPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KXQuaGFzT3duUHJvcGVydHkobikmJihlW25dPXRbbl0pfSkodCxuKX07cmV0dXJuIGZ1bmN0aW9uKHQsbil7ZnVuY3Rpb24gcigpe3RoaXMuY29uc3RydWN0b3I9dH1lKHQsbiksdC5wcm90b3R5cGU9bnVsbD09PW4/T2JqZWN0LmNyZWF0ZShuKTooci5wcm90b3R5cGU9bi5wcm90b3R5cGUsbmV3IHIpfX0oKSksaj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIHQ9bnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzO3JldHVybiB0LmhhbmRsZUFuc3dlckNoYW5nZT1mdW5jdGlvbihlLG4pe3ZhciByPXQucHJvcHMucXVlc3Rpb25zLm1hcChmdW5jdGlvbih0LHIpe3JldHVybiBuPT09ciYmKHQ9ZSksdH0pLG89dC5wcm9wcy5xdWVzdGlvbnMuZmluZChmdW5jdGlvbihlKXtyZXR1cm4obnVsbD09PWUuQW5zd2VyfHx2b2lkIDA9PT1lLkFuc3dlcnx8IiI9PT1lLkFuc3dlcikmJmUuSXNBY3RpdmV9KTt0LnByb3BzLmhhbmRsZUFuc3dlckNoYW5nZShyKSxvP3QucHJvcHMuaGFuZGxlQ29tcGxldGUoITEpOnQucHJvcHMuaGFuZGxlQ29tcGxldGUoITApfSx0LnJlbmRlclF1ZXN0aW9ucz1mdW5jdGlvbigpe3JldHVybiB0LnByb3BzLnF1ZXN0aW9ucy5tYXAoZnVuY3Rpb24oZSxuKXtyZXR1cm4gYS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6Im5wYy1xdWVzdGlvbi1zdGVwcGVyLXF1ZXN0aW9uIixrZXk6InF1ZXN0aW9uLSIrbn0sYS5jcmVhdGVFbGVtZW50KGIuV2hlbix7Y29uZGl0aW9uOmUuSXNBY3RpdmV9LGEuY3JlYXRlRWxlbWVudChJLHtxdWVzdGlvbjplLGluZGV4Om4sb25BbnN3ZXJlZDp0LmhhbmRsZUFuc3dlckNoYW5nZSx0eXBlOnQucHJvcHMudHlwZX0pKSl9KX0sdH1yZXR1cm4gRCh0LGUpLHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiBhLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToibnBjLXF1ZXN0aW9uLXN0ZXBwZXItd3JhcHBlciJ9LHRoaXMucmVuZGVyUXVlc3Rpb25zKCkpfSx0fShhLkNvbXBvbmVudCksTD0obigzMDUpLGZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24odCxuKXtyZXR1cm4oZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdCl0Lmhhc093blByb3BlcnR5KG4pJiYoZVtuXT10W25dKX0pKHQsbil9O3JldHVybiBmdW5jdGlvbih0LG4pe2Z1bmN0aW9uIHIoKXt0aGlzLmNvbnN0cnVjdG9yPXR9ZSh0LG4pLHQucHJvdG90eXBlPW51bGw9PT1uP09iamVjdC5jcmVhdGUobik6KHIucHJvdG90eXBlPW4ucHJvdG90eXBlLG5ldyByKX19KCkpLE09ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBudWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXN9cmV0dXJuIEwodCxlKSx0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtyZXR1cm4gYS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6InB1cmUtZyBucGMtYWN0aW9uLXdyYXBwZXIifSxhLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToicHVyZS11LTI0LTI0IHB1cmUtdS1tZC04LTI0In0pLGEuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJwdXJlLXUtMjQtMjQgcHVyZS11LW1kLTE2LTI0IGFjdGlvbi1idXR0b25zIn0sYS5jcmVhdGVFbGVtZW50KGIuV2hlbix7Y29uZGl0aW9uOnZvaWQgMCE9PXRoaXMucHJvcHMuZmlyc3RUZXh0fSxhLmNyZWF0ZUVsZW1lbnQoZCx7YnV0dG9uVGV4dDp0aGlzLnByb3BzLmZpcnN0VGV4dCxpc0Rpc2FibGVkOnRoaXMucHJvcHMuZmlyc3REaXNhYmxlZCxoYW5kbGVDbGljazp0aGlzLnByb3BzLmZpcnN0SGFuZGxlcn0pKSxhLmNyZWF0ZUVsZW1lbnQoYi5XaGVuLHtjb25kaXRpb246dm9pZCAwIT09dGhpcy5wcm9wcy5zZWNvbmRUZXh0fSxhLmNyZWF0ZUVsZW1lbnQoZCx7YnV0dG9uVGV4dDp0aGlzLnByb3BzLnNlY29uZFRleHQsaXNEaXNhYmxlZDp0aGlzLnByb3BzLnNlY29uZERpc2FibGVkLGhhbmRsZUNsaWNrOnRoaXMucHJvcHMuc2Vjb25kSGFuZGxlcn0pKSxhLmNyZWF0ZUVsZW1lbnQoYi5XaGVuLHtjb25kaXRpb246dm9pZCAwIT09dGhpcy5wcm9wcy5wcmludEhhbmRsZXJ9LGEuY3JlYXRlRWxlbWVudChkLHtidXR0b25UZXh0OiJQcmludCIsaGFuZGxlQ2xpY2s6dGhpcy5wcm9wcy5wcmludEhhbmRsZXJ9KSkpKX0sdH0oYS5Db21wb25lbnQpLEY9KG4oMzA2KSxmdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKHQsbil7cmV0dXJuKGU9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmKGVbbl09dFtuXSl9KSh0LG4pfTtyZXR1cm4gZnVuY3Rpb24odCxuKXtmdW5jdGlvbiByKCl7dGhpcy5jb25zdHJ1Y3Rvcj10fWUodCxuKSx0LnByb3RvdHlwZT1udWxsPT09bj9PYmplY3QuY3JlYXRlKG4pOihyLnByb3RvdHlwZT1uLnByb3RvdHlwZSxuZXcgcil9fSgpKSxVPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gbnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBGKHQsZSksdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7dmFyIGU9d2luZG93LnRlbXBsYXRlX2RhdGEudGhlbWUuaW5zdGl0dXRpb25OYW1lO3JldHVybiBhLmNyZWF0ZUVsZW1lbnQoImhlYWRlciIse2NsYXNzTmFtZToiaGVhZGVyLXdyYXBwZXIifSxhLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToiY29udGFpbmVyIn0sYS5jcmVhdGVFbGVtZW50KCJoMSIse2NsYXNzTmFtZToiZGVjb3JhdGVkIn0sYS5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOiJzdHJvbmcifSxlKSwiIE5ldCBQcmljZSBDYWxjdWxhdG9yIikpKX0sdH0oYS5Db21wb25lbnQpLFc9KG4oMzA3KSxmdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKHQsbil7cmV0dXJuKGU9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmKGVbbl09dFtuXSl9KSh0LG4pfTtyZXR1cm4gZnVuY3Rpb24odCxuKXtmdW5jdGlvbiByKCl7dGhpcy5jb25zdHJ1Y3Rvcj10fWUodCxuKSx0LnByb3RvdHlwZT1udWxsPT09bj9PYmplY3QuY3JlYXRlKG4pOihyLnByb3RvdHlwZT1uLnByb3RvdHlwZSxuZXcgcil9fSgpKSwkPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gbnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBXKHQsZSksdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIGEuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJucGMtcGFnZS13cmFwcGVyIn0sYS5jcmVhdGVFbGVtZW50KFUsbnVsbCksYS5jcmVhdGVFbGVtZW50KCJtYWluIixudWxsLGEuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJjb250YWluZXIifSx0aGlzLnByb3BzLmNoaWxkcmVuKSkpfSx0fShhLkNvbXBvbmVudCk7IWZ1bmN0aW9uKGUpe2UuTU9EQUxfVVBEQVRFPSJNT0RBTF9VUERBVEUiLGUuU1RFUF9PTkVfVVBEQVRFPSJTVEVQX09ORV9EQVRBX1VQREFURSIsZS5TVEVQX1RXT19VUERBVEU9IlNURVBfVFdPX0RBVEFfVVBEQVRFIixlLlNURVBfVEhSRUVfVVBEQVRFPSJTVEVQX1RIUkVFX0RBVEFfVVBEQVRFIixlLlNURVBfRk9VUl9VUERBVEU9IlNURVBfRk9VUl9EQVRBX1VQREFURSIsZS5TVEVQX0ZJVkVfVVBEQVRFPSJTVEVQX0ZJVkVfREFUQV9VUERBVEUiLGUuQ1VTVE9NSVpFX1VQREFURT0iQ1VTVE9NX0RBVEFfVVBEQVRFIixlLlVQREFURV9TVEVQUz0iVVBEQVRFX1NURVBTIixlLlVQREFURV9TVEVQMT0iVVBEQVRFX1NURVAxIixlLlVQREFURV9TVEVQMj0iVVBEQVRFX1NURVAyIixlLlVQREFURV9TVEVQMz0iVVBEQVRFX1NURVAzIixlLlNFVF9SRVNVTFQ9IlNFVF9SRVNVTFQifShDfHwoQz17fSkpO3ZhciBHPWZ1bmN0aW9uKGUpe3JldHVybnt0eXBlOkMuVVBEQVRFX1NURVBTLHN0ZXBzOmV9fSxCPWZ1bmN0aW9uKGUpe3JldHVybnt0eXBlOkMuVVBEQVRFX1NURVAxLHZhbHVlOmV9fSxxPWZ1bmN0aW9uKGUpe3JldHVybnt0eXBlOkMuVVBEQVRFX1NURVAyLHZhbHVlOmV9fSx6PWZ1bmN0aW9uKGUpe3JldHVybnt0eXBlOkMuVVBEQVRFX1NURVAzLHZhbHVlOmV9fSxIPW4oMTcpLFY9e2FwcFBhdGg6Ii8iLGlzQnJvd3NlcjoidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvd30sWT1WLmlzQnJvd3Nlcj9PYmplY3QoSC5hKSh7YmFzZW5hbWU6Vi5hcHBQYXRofSk6T2JqZWN0KEguYykoe2luaXRpYWxFbnRyaWVzOlsiLyJdfSksSz17c3RlcHM6W3tUaXRsZToiU3RlcCAxIixJc0NvbXBsZXRlZDohMSxJc0FjdGl2ZTohMCxDb250ZW50OiJBZ3JlZW1lbnQiLE5vdEVkaXRhYmxlOiEwLE5vdEFwcGxpY2FibGU6ITF9LHtUaXRsZToiU3RlcCAyIixJc0NvbXBsZXRlZDohMSxJc0FjdGl2ZTohMSxDb250ZW50OiJTdGVwMSIsTm90QXBwbGljYWJsZTohMX0se1RpdGxlOiJTdGVwIDMiLElzQ29tcGxldGVkOiExLElzQWN0aXZlOiExLENvbnRlbnQ6bnVsbCxOb3RBcHBsaWNhYmxlOiExfSx7VGl0bGU6IlN0ZXAgNCIsSXNDb21wbGV0ZWQ6ITEsSXNBY3RpdmU6ITEsQ29udGVudDpudWxsLE5vdEFwcGxpY2FibGU6ITF9LHtUaXRsZToiU3RlcCA1IixJc0NvbXBsZXRlZDohMSxJc0FjdGl2ZTohMSxDb250ZW50Om51bGwsTm90QXBwbGljYWJsZTohMX0se1RpdGxlOiJTdGVwIDYiLElzQ29tcGxldGVkOiExLElzQWN0aXZlOiExLENvbnRlbnQ6bnVsbCxOb3RFZGl0YWJsZTohMCxOb3RBcHBsaWNhYmxlOiExfV0sc3RlcDE6e1F1ZXN0aW9uczpbe1NlY3Rpb246IkZpbmFuY2lhbCBBaWQiLFRleHQ6IkRvIHlvdSBwbGFuIHRvIGFwcGx5IGZvciBmaW5hbmNpYWwgYWlkPyIsQW5zd2VyOm51bGwsVHlwZTpvLlJBRElPLE9wdGlvbnM6W3tLZXk6MSxWYWx1ZToiWWVzIn0se0tleTowLFZhbHVlOiJObyJ9XSxJc0FjdGl2ZTohMH0se1NlY3Rpb246IkFnZSIsVGV4dDoiSG93IG9sZCBhcmUgeW91PyIsQW5zd2VyOm51bGwsT3B0aW9uczpbXSxUeXBlOm8uTlVNQkVSLElzQWN0aXZlOiEwfSx7U2VjdGlvbjoiTGl2aW5nIEFycmFuZ2VtZW50IixUZXh0OiJXaGVyZSBkbyB5b3UgcGxhbiB0byBsaXZlIHdoaWxlIGF0dGVuZGluZyB0aGlzIGluc3RpdHV0aW9uPyIsQW5zd2VyOm51bGwsVHlwZTpvLlJBRElPLE9wdGlvbnM6W3tLZXk6Im9uQ2FtcHVzIixWYWx1ZToiT24tY2FtcHVzIChpbiBhIHJlc2lkZW5jZSBoYWxsLCBkb3JtaXRvcnksIG9yIG9uLWNhbXB1cyBhcGFydG1lbnQpIixBcHBsaWNhYmxlV2l0aDpbaS5IT1VTSU5HX09GRkVSRURfT1BUSU9OQUxdfSx7S2V5OiJvZmZDYW1wdXNOb0ZhbWlseSIsVmFsdWU6IkxpdmluZyBvbiBteSBvd24gb3Igd2l0aCBhIHJvb21tYXRlIixBcHBsaWNhYmxlV2l0aDpbaS5OT19IT1VTSU5HLGkuSE9VU0lOR19PRkZFUkVEX09QVElPTkFMXX0se0tleToib2ZmQ2FtcHVzRmFtaWx5IixWYWx1ZToiTGl2aW5nIHdpdGggbXkgcGFyZW50cyBvciBvdGhlciBmYW1pbHkgbWVtYmVycyIsQXBwbGljYWJsZVdpdGg6W2kuTk9fSE9VU0lORyxpLkhPVVNJTkdfT0ZGRVJFRF9PUFRJT05BTF19XSxJc0FjdGl2ZTohMH0se1NlY3Rpb246IlJlc2lkZW5jeSIsVGV4dDpudWxsLEFuc3dlcjpudWxsLFR5cGU6by5SQURJTyxPcHRpb25zOlt7S2V5OiJpbkRpc3RyaWN0IixWYWx1ZToiRWxpZ2libGUgZm9yIGluLWRpc3RyaWN0IHR1aXRpb24iLEFwcGxpY2FibGVXaXRoOltpLkRJRkZFUkVOVF9UVUlUSU9OXX0se0tleToiaW5TdGF0ZSIsVmFsdWU6IkVsaWdpYmxlIGZvciBpbi1zdGF0ZSB0dWl0aW9uIixBcHBsaWNhYmxlV2l0aDpbaS5ESUZGRVJFTlRfVFVJVElPTl19LHtLZXk6Im91dFN0YXRlIixWYWx1ZToiRWxpZ2libGUgZm9yIG91dC1vZi1zdGF0ZSB0dWl0aW9uIixBcHBsaWNhYmxlV2l0aDpbaS5ESUZGRVJFTlRfVFVJVElPTl19XSxJc0FjdGl2ZTohMH1dLE5leHRTdGVwOjIsSW5zdHJ1Y3Rpb246IlBsZWFzZSBwcm92aWRlIHRoZSByZXF1ZXN0ZWQgaW5mb3JtYXRpb24uIFlvdXIgcmVzcG9uc2VzIHdpbGwgYmUgdXNlZCB0byBjYWxjdWxhdGUgYW4gZXN0aW1hdGVkIGFtb3VudCB0aGF0IHN0dWRlbnRzIGxpa2UgeW91IHBhaWQgLSBhZnRlciBncmFudCBhaWQgYW5kIHNjaG9sYXJzaGlwcyBidXQgYmVmb3JlIHN0dWRlbnQgbG9hbnMgLSB0byBhdHRlbmQgdGhpcyBpbnN0aXR1dGlvbiBpbiBhIGdpdmVuIHllYXIuIn0sc3RlcDI6e1F1ZXN0aW9uczpbe1NlY3Rpb246Ik1hcml0YWwgU3RhdHVzIixUZXh0OiJBcmUgeW91ICh0aGUgc3R1ZGVudCkgbWFycmllZD8iLEhlbHBUZXh0OlsnQW5zd2VyICJ5ZXMiIGlmIHlvdSBhcmUgc2VwYXJhdGVkIGJ1dCBub3QgZGl2b3JjZWQuJ10sQW5zd2VyOm51bGwsVHlwZTpvLlJBRElPLE9wdGlvbnM6W3tLZXk6MSxWYWx1ZToiWWVzIn0se0tleTowLFZhbHVlOiJObyJ9XSxJc0FjdGl2ZTohMH0se1NlY3Rpb246IkNoaWxkcmVuIixUZXh0OiJBcmUgeW91ICh0aGUgc3R1ZGVudCkgdGhlIHByaW1hcnkgc291cmNlIG9mIGZpbmFuY2lhbCBzdXBwb3J0IGZvciBhbnkgY2hpbGRyZW4/IixBbnN3ZXI6bnVsbCxPcHRpb25zOlt7S2V5OjEsVmFsdWU6IlllcyJ9LHtLZXk6MCxWYWx1ZToiTm8ifV0sVHlwZTpvLlJBRElPLElzQWN0aXZlOiEwfV0sSW5zdHJ1Y3Rpb246IlBsZWFzZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gYW5kIHRoZW4gY2xpY2sgQ29udGludWUuIn0sc3RlcDM6e1F1ZXN0aW9uczpbe1NlY3Rpb246Ik51bWJlciBpbiBGYW1pbHkiLFRleHQ6IkhvdyBtYW55IHBlb3BsZSBhcmUgaW4geW91ciBmYW1pbHkncyBob3VzZWhvbGQ/IixIZWxwVGV4dDp7REVQRU5ERU5UOlsiQ291bnQgeW91cnNlbGYsIHlvdXIgcGFyZW50KHMpLCBhbmQgeW91ciBwYXJlbnRzJyBvdGhlciBkZXBlbmRlbnQgY2hpbGRyZW4uIl0sSU5ERVBFTkRFTlRfS0lEUzpbIkNvdW50IHlvdXJzZWxmLCB5b3VyIHNwb3VzZSAoaWYgYXBwbGljYWJsZSksIGFuZCBhbnkgZGVwZW5kZW50IGNoaWxkcmVuLiJdLElOREVQRU5ERU5UOlsiQ291bnQgeW91cnNlbGYgYW5kIHlvdXIgc3BvdXNlIChpZiBhcHBsaWNhYmxlKS4iXX0sRXJyb3I6ITEsRXJyb3JNZXNzYWdlOiJUaGUgTnVtYmVyIGluIENvbGxlZ2UgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHNwZWNpZmllZCBOdW1iZXIgaW4gRmFtaWx5LiIsQW5zd2VyOm51bGwsVHlwZTpvLkRST1BET1dOLE9wdGlvbnM6W3tLZXk6MSxWYWx1ZToiT25lIHBlcnNvbiIsQXBwbGljYWJsZVdpdGg6W2kuSU5ERVBFTkRFTlRdfSx7S2V5OjIsVmFsdWU6IlR3byBwZW9wbGUiLEFwcGxpY2FibGVXaXRoOltpLklOREVQRU5ERU5ULGkuSU5ERVBFTkRFTlRfS0lEUyxpLkRFUEVOREVOVF19LHtLZXk6MyxWYWx1ZToiVGhyZWUgcGVvcGxlIixBcHBsaWNhYmxlV2l0aDpbaS5JTkRFUEVOREVOVF9LSURTLGkuREVQRU5ERU5UXX0se0tleTo0LFZhbHVlOiJGb3VyIHBlb3BsZSIsQXBwbGljYWJsZVdpdGg6W2kuSU5ERVBFTkRFTlRfS0lEUyxpLkRFUEVOREVOVF19LHtLZXk6NSxWYWx1ZToiRml2ZSBwZW9wbGUiLEFwcGxpY2FibGVXaXRoOltpLklOREVQRU5ERU5UX0tJRFMsaS5ERVBFTkRFTlRdfSx7S2V5OjYsVmFsdWU6IlNpeCBwZW9wbGUgb3IgbW9yZSIsQXBwbGljYWJsZVdpdGg6W2kuSU5ERVBFTkRFTlRfS0lEUyxpLkRFUEVOREVOVF19XSxJc0FjdGl2ZTohMH0se1NlY3Rpb246Ik51bWJlciBpbiBDb2xsZWdlIixUZXh0OiJPZiB0aGUgbnVtYmVyIGluIHlvdXIgZmFtaWx5IGFib3ZlLCBob3cgbWFueSB3aWxsIGJlIGluIGNvbGxlZ2UgbmV4dCB5ZWFyPyIsSGVscFRleHQ6e0RFUEVOREVOVDpbIkNvdW50IHlvdXJzZWxmLCB5b3VyIHBhcmVudChzKSwgYW5kIHlvdXIgcGFyZW50cycgb3RoZXIgZGVwZW5kZW50IGNoaWxkcmVuLiJdLElOREVQRU5ERU5UX0tJRFM6WyJDb3VudCB5b3Vyc2VsZiwgeW91ciBzcG91c2UgKGlmIGFwcGxpY2FibGUpLCBhbmQgYW55IGRlcGVuZGVudCBjaGlsZHJlbi4iXSxJTkRFUEVOREVOVDpbIkNvdW50IHlvdXJzZWxmIGFuZCB5b3VyIHNwb3VzZSAoaWYgYXBwbGljYWJsZSkuIl19LEFuc3dlcjpudWxsLEVycm9yOiExLEVycm9yTWVzc2FnZToiVGhlIE51bWJlciBpbiBDb2xsZWdlIG11c3QgYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBzcGVjaWZpZWQgTnVtYmVyIGluIEZhbWlseS4iLE9wdGlvbnM6W3tLZXk6MSxWYWx1ZToiT25lIixBcHBsaWNhYmxlV2l0aDpbaS5ERVBFTkRFTlQsaS5JTkRFUEVOREVOVCxpLklOREVQRU5ERU5UX0tJRFNdfSx7S2V5OjIsVmFsdWU6IlR3byIsQXBwbGljYWJsZVdpdGg6W2kuREVQRU5ERU5ULGkuSU5ERVBFTkRFTlRdfSx7S2V5OjIsVmFsdWU6IlR3byBvciBNb3JlIixBcHBsaWNhYmxlV2l0aDpbaS5JTkRFUEVOREVOVF9LSURTXX0se0tleTozLFZhbHVlOiJUaHJlZSBvciBtb3JlIixBcHBsaWNhYmxlV2l0aDpbaS5ERVBFTkRFTlRdfV0sVHlwZTpvLlJBRElPLElzQWN0aXZlOiEwfSx7U2VjdGlvbjoiSG91c2Vob2xkIEluY29tZSIsVGV4dDoiV2hhdCBpcyB5b3VyIGFubnVhbCBob3VzZWhvbGQgaW5jb21lIGFmdGVyIHRheGVzPyIsQW5zd2VyOm51bGwsSGVscFRleHQ6e0RFUEVOREVOVDpbIkluY2x1ZGUgaW5jb21lIGVhcm5lZCBieSB5b3Vyc2VsZiBhbmQgeW91ciBwYXJlbnQocykuIiwiSW5jbHVkZSBpbmNvbWUgZnJvbSB3b3JrLCBjaGlsZCBzdXBwb3J0LCBhbmQgb3RoZXIgc291cmNlcy4iLCJJZiB5b3VyIHBhcmVudCBpcyBzaW5nbGUsIHNlcGFyYXRlZCwgb3IgZGl2b3JjZWQsIGluY2x1ZGUgdGhlIGluY29tZSBmb3IgdGhlIHBhcmVudCB3aXRoIHdob20geW91IGxpdmUuIiwiSWYgdGhlIHBhcmVudCB3aXRoIHdob20geW91IGxpdmUgaXMgcmVtYXJyaWVkLCBpbmNsdWRlIGJvdGggeW91ciBwYXJlbnQncyBpbmNvbWUgYW5kIGhpcy9oZXIgc3BvdXNlJ3MgaW5jb21lLiJdLElOREVQRU5ERU5UOlsiSW5jbHVkZSBpbmNvbWUgZnJvbSB3b3JrLCBjaGlsZCBzdXBwb3J0LCBhbmQgb3RoZXIgc291cmNlcyIsIklmIHlvdSBhcmUgbWFycmllZCwgaW5jbHVkZSB5b3VyIHNwb3VzZSdzIGluY29tZS4iXSxJTkRFUEVOREVOVF9LSURTOlsiSW5jbHVkZSBpbmNvbWUgZnJvbSB3b3JrLCBjaGlsZCBzdXBwb3J0LCBhbmQgb3RoZXIgc291cmNlcyIsIklmIHlvdSBhcmUgbWFycmllZCwgaW5jbHVkZSB5b3VyIHNwb3VzZSdzIGluY29tZS4iXX0sT3B0aW9uczpbe0tleToiTGVzcyB0aGFuIDMwLDAwMCIsVmFsdWU6Ikxlc3MgVGhhbiAkMzAsMDAwIn0se0tleToiMzAsMDAwIC0gMzksOTk5IixWYWx1ZToiQmV0d2VlbiAkMzAsMDAwIC0gJDM5LDk5OSJ9LHtLZXk6IjQwLDAwMCAtIDQ5LDk5OSIsVmFsdWU6IkJldHdlZW4gJDQwLDAwMCAtICQ0OSw5OTkifSx7S2V5OiI1MCwwMDAgLSA1OSw5OTkiLFZhbHVlOiJCZXR3ZWVuICQ1MCwwMDAgLSAkNTksOTk5In0se0tleToiNjAsMDAwIC0gNjksOTk5IixWYWx1ZToiQmV0d2VlbiAkNjAsMDAwIC0gJDY5LDk5OSJ9LHtLZXk6IjcwLDAwMCAtIDc5LDk5OSIsVmFsdWU6IkJldHdlZW4gJDcwLDAwMCAtICQ3OSw5OTkifSx7S2V5OiI4MCwwMDAgLSA4OSw5OTkiLFZhbHVlOiJCZXR3ZWVuICQ4MCwwMDAgLSAkODksOTk5In0se0tleToiOTAsMDAwIC0gOTksOTk5IixWYWx1ZToiQmV0d2VlbiAkOTAsMDAwIC0gJDk5LDk5OSJ9LHtLZXk6IjEwMCwwMDAgYW5kIGhpZ2hlciIsVmFsdWU6IkFib3ZlICQ5OSw5OTkifV0sVHlwZTpvLkRST1BET1dOLElzQWN0aXZlOiEwfV0sVHlwZTppLkRFUEVOREVOVCxJbnN0cnVjdGlvbjoiRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGNhbGN1bGF0b3IsIGFuIGluZGVwZW5kZW50IHN0dWRlbnQgaXMgb25lIHdobyBpcyBhdCBsZWFzdCAyNCB5ZWFycyBvbGQsIG1hcnJpZWQsIGFuZC9vciBoYXMgbGVnYWwgZGVwZW5kZW50cyBvdGhlciB0aGFuIGEgc3BvdXNlIChlLmcuLCBjaGlsZHJlbikuIEEgc3R1ZGVudCB3aG8gZG9lcyBub3QgbWVldCBhbnkgb2YgdGhlIGFib3ZlIGNyaXRlcmlhIGlzIGNvbnNpZGVyZWQgZGVwZW5kZW50LiIsQWRkaXRpb25hbEluc3RydWN0aW9uOntERVBFTkRFTlQ6IkJhc2VkIG9uIHRoZSBpbmZvcm1hdGlvbiB5b3UgcHJvdmlkZWQgaW4gcHJldmlvdXMgc3RlcHMsIHlvdXIgZGVwZW5kZW5jeSBzdGF0dXMgaXMgZXN0aW1hdGVkIHRvIGJlIERlcGVuZGVudC4gUGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBhbmQgdGhlbiBjbGljayBDb250aW51ZS4iLElOREVQRU5ERU5UOiJCYXNlZCBvbiB0aGUgaW5mb3JtYXRpb24geW91IHByb3ZpZGVkIGluIHByZXZpb3VzIHN0ZXBzLCB5b3VyIGRlcGVuZGVuY3kgc3RhdHVzIGlzIGVzdGltYXRlZCB0byBiZSBJbmRlcGVuZGVudC4gUGxlYXNlIHByb3ZpZGUgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBhbmQgdGhlbiBjbGljayBDb250aW51ZS4iLElOREVQRU5ERU5UX0tJRFM6IkJhc2VkIG9uIHRoZSBpbmZvcm1hdGlvbiB5b3UgcHJvdmlkZWQgaW4gcHJldmlvdXMgc3RlcHMsIHlvdXIgZGVwZW5kZW5jeSBzdGF0dXMgaXMgZXN0aW1hdGVkIHRvIGJlIEluZGVwZW5kZW50LiBQbGVhc2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGFuZCB0aGVuIGNsaWNrIENvbnRpbnVlLiJ9fSxyZXN1bHQ6e3R1aXRpb25BbmRGZWVzOjAscm9vbUFuZEJvYXJkOjAsYm9va3NBbmRTdXBwbGllczowLG90aGVyOjAsZ3JhbnQ6MH0sbW9kYWxDb25maWc6bmV3IFQoe01lc3NhZ2U6Im1vZGFsIG1lc3NhZ2UiLEFjdGl2ZTohMX0pfSxRPWZ1bmN0aW9uKCl7cmV0dXJuKFE9T2JqZWN0LmFzc2lnbnx8ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49MSxyPWFyZ3VtZW50cy5sZW5ndGg7bjxyO24rKylmb3IodmFyIG8gaW4gdD1hcmd1bWVudHNbbl0pT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHQsbykmJihlW29dPXRbb10pO3JldHVybiBlfSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfSxYPU9iamVjdChmLmMpKHttb2RhbENvbmZpZzpmdW5jdGlvbihlLHQpe3N3aXRjaCh2b2lkIDA9PT1lJiYoZT1uZXcgVCksdC50eXBlKXtjYXNlIEMuTU9EQUxfVVBEQVRFOnJldHVybiBuZXcgVChRKHt9LGUsdC5tb2RhbENvbmZpZykpO2RlZmF1bHQ6cmV0dXJuIGV9fSxzdGVwczpmdW5jdGlvbihlLHQpe3N3aXRjaCh2b2lkIDA9PT1lJiYoZT1LLnN0ZXBzKSx0LnR5cGUpe2Nhc2UgQy5VUERBVEVfU1RFUFM6cmV0dXJuIGUuc2xpY2UoKTtkZWZhdWx0OnJldHVybiBlfX0sc3RlcDE6ZnVuY3Rpb24oZSx0KXtzd2l0Y2godm9pZCAwPT09ZSYmKGU9Sy5zdGVwMSksdC50eXBlKXtjYXNlIEMuVVBEQVRFX1NURVAxOnJldHVybiBPYmplY3QuYXNzaWduKHt9LHQudmFsdWUpO2RlZmF1bHQ6cmV0dXJuIGV9fSxzdGVwMjpmdW5jdGlvbihlLHQpe3N3aXRjaCh2b2lkIDA9PT1lJiYoZT1LLnN0ZXAyKSx0LnR5cGUpe2Nhc2UgQy5VUERBVEVfU1RFUDI6cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sdC52YWx1ZSk7ZGVmYXVsdDpyZXR1cm4gZX19LHN0ZXAzOmZ1bmN0aW9uKGUsdCl7c3dpdGNoKHZvaWQgMD09PWUmJihlPUsuc3RlcDMpLHQudHlwZSl7Y2FzZSBDLlVQREFURV9TVEVQMzpyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSx0LnZhbHVlKTtkZWZhdWx0OnJldHVybiBlfX0scmVzdWx0OmZ1bmN0aW9uKGUsdCl7c3dpdGNoKHZvaWQgMD09PWUmJihlPUsucmVzdWx0KSx0LnR5cGUpe2Nhc2UgQy5TRVRfUkVTVUxUOnJldHVybiBPYmplY3QuYXNzaWduKHt9LHQudmFsdWUpO2RlZmF1bHQ6cmV0dXJuIGV9fX0pLEo9Vi5pc0Jyb3dzZXImJndpbmRvdy5fX1JFRFVYX0RFVlRPT0xTX0VYVEVOU0lPTl9DT01QT1NFX198fGYuZCxaPU9iamVjdChmLmUpKE9iamVjdChzLmNvbm5lY3RSb3V0ZXIpKFkpKFgpLEssSihPYmplY3QoZi5hKShPYmplY3Qocy5yb3V0ZXJNaWRkbGV3YXJlKShZKSkpKSxlZT0obigzMDgpLGZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24odCxuKXtyZXR1cm4oZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdCl0Lmhhc093blByb3BlcnR5KG4pJiYoZVtuXT10W25dKX0pKHQsbil9O3JldHVybiBmdW5jdGlvbih0LG4pe2Z1bmN0aW9uIHIoKXt0aGlzLmNvbnN0cnVjdG9yPXR9ZSh0LG4pLHQucHJvdG90eXBlPW51bGw9PT1uP09iamVjdC5jcmVhdGUobik6KHIucHJvdG90eXBlPW4ucHJvdG90eXBlLG5ldyByKX19KCkpLHRlPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gbnVsbCE9PWUmJmUuYXBwbHkodGhpcyxhcmd1bWVudHMpfHx0aGlzfXJldHVybiBlZSh0LGUpLHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3ZhciBlPXRoaXMsdD13aW5kb3cudGVtcGxhdGVfZGF0YS50aGVtZS53ZWxjb21lTWVzc2FnZTtyZXR1cm4gYS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6InN0ZXAtd3JhcHBlciBucGMtYWdyZWVtZW50LXdyYXBwZXIifSxhLmNyZWF0ZUVsZW1lbnQodixudWxsLHQpLGEuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJhZ3JlZW1lbnQtdGV4dC13cmFwcGVyIn0sYS5jcmVhdGVFbGVtZW50KCJwIixudWxsLGEuY3JlYXRlRWxlbWVudCgic3Ryb25nIixudWxsLCJQbGVhc2UgcmVhZCIpLCIuIFRoaXMgY2FsY3VsYXRvciBpcyBpbnRlbmRlZCB0byBwcm92aWRlIGVzdGltYXRlZCBuZXQgcHJpY2UgaW5mb3JtYXRpb24gKGRlZmluZWQgYXMgZXN0aW1hdGVkIGNvc3Qgb2YgYXR0ZW5kYW5jZSAtIGluY2x1ZGluZyB0dWl0aW9uIGFuZCByZXF1aXJlZCBmZWVzLCBib29rcyBhbmQgc3VwcGxpZXMsIHJvb20gYW5kIGJvYXJkIChtZWFscyksIGFuZCBvdGhlciByZWxhdGVkIGV4cGVuc2VzIC0gbWludXMgZXN0aW1hdGVkIGdyYW50IGFuZCBzY2hvbGFyc2hpcCBhaWQpIHRvIGN1cnJlbnQgYW5kIHByb3NwZWN0aXZlIHN0dWRlbnRzIGFuZCB0aGVpciBmYW1pbGllcyBiYXNlZCBvbiB3aGF0IHNpbWlsYXIgc3R1ZGVudHMgcGFpZCBpbiBhIHByZXZpb3VzIHllYXIuIiksYS5jcmVhdGVFbGVtZW50KCJwIixudWxsLCJCeSBjbGlja2luZyBiZWxvdywgSSBhY2tub3dsZWRnZSB0aGF0IHRoZSBlc3RpbWF0ZSBwcm92aWRlZCB1c2luZyB0aGlzIGNhbGN1bGF0b3IgZG9lcyBub3QgcmVwcmVzZW50IGEgZmluYWwgZGV0ZXJtaW5hdGlvbiwgb3IgYWN0dWFsIGF3YXJkLCBvZiBmaW5hbmNpYWwgYXNzaXN0YW5jZSwgb3IgYSBmaW5hbCBuZXQgcHJpY2U7IGl0IGlzIGFuIGVzdGltYXRlIGJhc2VkIG9uIGNvc3Qgb2YgYXR0ZW5kYW5jZSBhbmQgZmluYW5jaWFsIGFpZCBwcm92aWRlZCB0byBzdHVkZW50cyBpbiBhIHByZXZpb3VzIHllYXIuIENvc3Qgb2YgYXR0ZW5kYW5jZSBhbmQgZmluYW5jaWFsIGFpZCBhdmFpbGFiaWxpdHkgY2hhbmdlIHllYXIgdG8geWVhci4gVGhlIGVzdGltYXRlcyBzaGFsbCBub3QgYmUgYmluZGluZyBvbiB0aGUgU2VjcmV0YXJ5IG9mIEVkdWNhdGlvbiwgdGhlIGluc3RpdHV0aW9uIG9mIGhpZ2hlciBlZHVjYXRpb24sIG9yIHRoZSBTdGF0ZS4iKSxhLmNyZWF0ZUVsZW1lbnQoInAiLG51bGwsIlN0dWRlbnRzIG11c3QgY29tcGxldGUgdGhlIEZyZWUgQXBwbGljYXRpb24gZm9yIEZlZGVyYWwgU3R1ZGVudCBBaWQgKEZBRlNBKSBpbiBvcmRlciB0byBiZSBlbGlnaWJsZSBmb3IsIGFuZCByZWNlaXZlLCBhbiBhY3R1YWwgZmluYW5jaWFsIGFpZCBhd2FyZCB0aGF0IGluY2x1ZGVzIEZlZGVyYWwgZ3JhbnQsIGxvYW4sIG9yIHdvcmstc3R1ZHkgYXNzaXN0YW5jZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gYXBwbHlpbmcgZm9yIEZlZGVyYWwgc3R1ZGVudCBhaWQsIGdvIHRvICIsYS5jcmVhdGVFbGVtZW50KCJhIix7aHJlZjoiaHR0cDovL3d3dy5mYWZzYS5lZC5nb3YvIix0YXJnZXQ6Il9ibGFuayJ9LGEuY3JlYXRlRWxlbWVudCgic3Ryb25nIixudWxsLCJodHRwOi8vd3d3LmZhZnNhLmVkLmdvdiIpKSwiLiIpLGEuY3JlYXRlRWxlbWVudCgicCIsbnVsbCxhLmNyZWF0ZUVsZW1lbnQoInN0cm9uZyIsbnVsbCwiTm90ZSIpLCI6IEFueSBpbmZvcm1hdGlvbiB0aGF0IHlvdSBwcm92aWRlIG9uIHRoaXMgc2l0ZSBpcyBjb25maWRlbnRpYWwuIFRoZSBOZXQgUHJpY2UgQ2FsY3VsYXRvciBkb2VzIG5vdCBzdG9yZSB5b3VyIHJlc3BvbnNlcyBvciBhc2sgZm9yIHBlcnNvbmFsIGlkZW50aWZ5aW5nIGluZm9ybWF0aW9uIG9mIGFueSBraW5kLiIpKSxhLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToiYWN0aW9uLXdyYXBwZXIifSxhLmNyZWF0ZUVsZW1lbnQoZCx7YnV0dG9uVGV4dDoiQWdyZWUgJiBDb250aW51ZSIsaGFuZGxlQ2xpY2s6ZnVuY3Rpb24odCl7ZS5wcm9wcy5zdGVwQ29tcGxldGUoMCwhMCksZS5wcm9wcy5zdGVwQ2hhbmdlKDEpfX0pKSl9LHR9KGEuQ29tcG9uZW50KSxuZT0obigzMDkpLGZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24odCxuKXtyZXR1cm4oZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdCl0Lmhhc093blByb3BlcnR5KG4pJiYoZVtuXT10W25dKX0pKHQsbil9O3JldHVybiBmdW5jdGlvbih0LG4pe2Z1bmN0aW9uIHIoKXt0aGlzLmNvbnN0cnVjdG9yPXR9ZSh0LG4pLHQucHJvdG90eXBlPW51bGw9PT1uP09iamVjdC5jcmVhdGUobik6KHIucHJvdG90eXBlPW4ucHJvdG90eXBlLG5ldyByKX19KCkpLHJlPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgdD1udWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIHQuaGFuZGxlQW5zd2VyQ2hhbmdlPWZ1bmN0aW9uKGUpe3QucHJvcHMuc3RlcDEuUXVlc3Rpb25zPWUsMD09ZVswXS5BbnN3ZXI/KHQucHJvcHMuc3RlcDEubmV4dFN0ZXA9NCx0LnByb3BzLnRvZ2dsZVN0ZXAyYW5kMyghMCkpOih0LnByb3BzLnN0ZXAxLm5leHRTdGVwPTIsdC5wcm9wcy50b2dnbGVTdGVwMmFuZDMoITEpKSx0LnByb3BzLnVwZGF0ZVN0ZXAxKHQucHJvcHMuc3RlcDEpfSx0LmhhbmRsZUNvbXBsZXRlPWZ1bmN0aW9uKGUpe3QucHJvcHMuc3RlcENvbXBsZXRlKDEsZSl9LHQub25Db250aW51ZT1mdW5jdGlvbihlKXtmb3IodmFyIG49MDtuPHQucHJvcHMuc3RlcDEuUXVlc3Rpb25zLmxlbmd0aDtuKyspe3ZhciByPXQucHJvcHMuc3RlcDEuUXVlc3Rpb25zW25dO2lmKHIuSXNBY3RpdmUmJihyLkFuc3dlcnx8MD09ci5BbnN3ZXIpJiYoci5FcnJvclRleHQ9bnVsbCx0LnByb3BzLnN0ZXAxLlF1ZXN0aW9uc1tuXT1yLHQucHJvcHMudXBkYXRlU3RlcDEodC5wcm9wcy5zdGVwMSkpLHIuSXNBY3RpdmUmJihudWxsPT1yLkFuc3dlcnx8bnVsbD09ci5BbnN3ZXIpKXJldHVybiByLkVycm9yVGV4dD1yLlNlY3Rpb24rIiBpcyByZXF1aXJlZC4iLHIuRXJyb3JSZWYuY3VycmVudC5mb2N1cygpLHQucHJvcHMuc3RlcDEuUXVlc3Rpb25zW25dPXIsdm9pZCB0LnByb3BzLnVwZGF0ZVN0ZXAxKHQucHJvcHMuc3RlcDEpfXQucHJvcHMuc3RlcENoYW5nZSh0LnByb3BzLnN0ZXAxLm5leHRTdGVwKX0sdH1yZXR1cm4gbmUodCxlKSx0LnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudD1mdW5jdGlvbigpe3ZhciBlPXdpbmRvdy50ZW1wbGF0ZV9kYXRhOzA9PXRoaXMucHJvcHMuc3RlcDEuUXVlc3Rpb25zWzBdLkFuc3dlcj8odGhpcy5wcm9wcy5zdGVwMS5uZXh0U3RlcD00LHRoaXMucHJvcHMudG9nZ2xlU3RlcDJhbmQzKCEwKSk6KHRoaXMucHJvcHMuc3RlcDEubmV4dFN0ZXA9Mix0aGlzLnByb3BzLnRvZ2dsZVN0ZXAyYW5kMyghMSkpLCJOIj09PWUuZGlmZmVyZW50VHVpdGlvbnx8IlByb2dyYW0iPT09ZS5jYWxlbmRhclN5c3RlbT8odGhpcy5wcm9wcy5zdGVwMS5RdWVzdGlvbnNbM10uQW5zd2VyPSJhbW91bnQiLHRoaXMucHJvcHMuc3RlcDEuUXVlc3Rpb25zWzNdLklzQWN0aXZlPSExKTooZS5kdF9pbkRpc3RyaWN0fHwodGhpcy5wcm9wcy5zdGVwMS5RdWVzdGlvbnNbM10uT3B0aW9ucz10aGlzLnByb3BzLnN0ZXAxLlF1ZXN0aW9uc1szXS5PcHRpb25zLmZpbHRlcihmdW5jdGlvbihlKXtyZXR1cm4iaW5EaXN0cmljdCIhPT1lLktleX0pKSxlLmR0X2luU3RhdGV8fCh0aGlzLnByb3BzLnN0ZXAxLlF1ZXN0aW9uc1szXS5PcHRpb25zPXRoaXMucHJvcHMuc3RlcDEuUXVlc3Rpb25zWzNdLk9wdGlvbnMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiJpblN0YXRlIiE9PWUuS2V5fSkpLGUuZHRfb3V0U3RhdGV8fCh0aGlzLnByb3BzLnN0ZXAxLlF1ZXN0aW9uc1szXS5PcHRpb25zPXRoaXMucHJvcHMuc3RlcDEuUXVlc3Rpb25zWzNdLk9wdGlvbnMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiJvdXRTdGF0ZSIhPT1lLktleX0pKSksIlkiPT09ZS5ob3VzaW5nT2ZmZXJlZD8iWSI9PT1lLmhvdXNpbmdSZXF1aXJlZCYmKHRoaXMucHJvcHMuc3RlcDEuUXVlc3Rpb25zWzJdLkFuc3dlcj0ib25DYW1wdXMiLHRoaXMucHJvcHMuc3RlcDEuUXVlc3Rpb25zWzJdLklzQWN0aXZlPSExKTp0aGlzLnByb3BzLnN0ZXAxLlF1ZXN0aW9uc1syXS5PcHRpb25zPXRoaXMucHJvcHMuc3RlcDEuUXVlc3Rpb25zWzJdLk9wdGlvbnMuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiJvbkNhbXB1cyIhPT1lLktleX0pLHRoaXMucHJvcHMuc3RlcDEuUXVlc3Rpb25zPXRoaXMucHJvcHMuc3RlcDEuUXVlc3Rpb25zLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5FcnJvclRleHQ9bnVsbCxlLkVycm9yUmVmPWEuY3JlYXRlUmVmKCksZX0pLHRoaXMucHJvcHMudXBkYXRlU3RlcDEodGhpcy5wcm9wcy5zdGVwMSl9LHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3JldHVybiBhLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToic3RlcC13cmFwcGVyIG5wYy1zdGVwLTEtd3JhcHBlciJ9LGEuY3JlYXRlRWxlbWVudCh2LG51bGwsdGhpcy5wcm9wcy5zdGVwMS5JbnN0cnVjdGlvbiksYS5jcmVhdGVFbGVtZW50KGose3F1ZXN0aW9uczp0aGlzLnByb3BzLnN0ZXAxLlF1ZXN0aW9ucyxoYW5kbGVDb21wbGV0ZTp0aGlzLmhhbmRsZUNvbXBsZXRlLGhhbmRsZUFuc3dlckNoYW5nZTp0aGlzLmhhbmRsZUFuc3dlckNoYW5nZX0pLGEuY3JlYXRlRWxlbWVudChNLHtmaXJzdFRleHQ6IkNvbnRpbnVlIixmaXJzdEhhbmRsZXI6dGhpcy5vbkNvbnRpbnVlfSkpfSx0fShhLkNvbXBvbmVudCksb2U9T2JqZWN0KGwuY29ubmVjdCkoZnVuY3Rpb24oZSl7cmV0dXJue3N0ZXAxOmUuc3RlcDEsc3RlcDI6ZS5zdGVwMn19LGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QoZi5iKSh7dXBkYXRlU3RlcDE6ZnVuY3Rpb24oZSl7cmV0dXJuIEIoZSl9fSxlKX0pKHJlKSxpZT0obigzMTApLGZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24odCxuKXtyZXR1cm4oZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdCl0Lmhhc093blByb3BlcnR5KG4pJiYoZVtuXT10W25dKX0pKHQsbil9O3JldHVybiBmdW5jdGlvbih0LG4pe2Z1bmN0aW9uIHIoKXt0aGlzLmNvbnN0cnVjdG9yPXR9ZSh0LG4pLHQucHJvdG90eXBlPW51bGw9PT1uP09iamVjdC5jcmVhdGUobik6KHIucHJvdG90eXBlPW4ucHJvdG90eXBlLG5ldyByKX19KCkpLGFlPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgdD1udWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIHQuaGFuZGxlQW5zd2VyQ2hhbmdlPWZ1bmN0aW9uKGUpe3QucHJvcHMuc3RlcDIuUXVlc3Rpb25zPWUsdC5wcm9wcy51cGRhdGVTdGVwMih0LnByb3BzLnN0ZXAyKSx0LnByb3BzLnN0ZXAzLlF1ZXN0aW9ucz10LnByb3BzLnN0ZXAzLlF1ZXN0aW9ucy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuQW5zd2VyPW51bGwsZX0pLHQucHJvcHMuc3RlcENvbXBsZXRlKDMsITEpLHQucHJvcHMuc3RlcENvbXBsZXRlKDQsITEpLHQucHJvcHMudXBkYXRlU3RlcDModC5wcm9wcy5zdGVwMyl9LHQuaGFuZGxlQ29tcGxldGU9ZnVuY3Rpb24oZSl7dC5wcm9wcy5zdGVwQ29tcGxldGUoMixlKX0sdC5vblByZXZpb3VzPWZ1bmN0aW9uKCl7dC5wcm9wcy5zdGVwQ2hhbmdlKDEpfSx0Lm9uQ29udGludWU9ZnVuY3Rpb24oZSl7Zm9yKHZhciBuPTA7bjx0LnByb3BzLnN0ZXAyLlF1ZXN0aW9ucy5sZW5ndGg7bisrKXt2YXIgcj10LnByb3BzLnN0ZXAyLlF1ZXN0aW9uc1tuXTtpZihyLklzQWN0aXZlJiYoci5BbnN3ZXJ8fDA9PXIuQW5zd2VyKSYmKHIuRXJyb3JUZXh0PW51bGwsdC5wcm9wcy5zdGVwMi5RdWVzdGlvbnNbbl09cix0LnByb3BzLnVwZGF0ZVN0ZXAyKHQucHJvcHMuc3RlcDIpKSxyLklzQWN0aXZlJiYobnVsbD09ci5BbnN3ZXJ8fG51bGw9PXIuQW5zd2VyKSlyZXR1cm4gci5FcnJvclRleHQ9ci5TZWN0aW9uKyIgaXMgcmVxdWlyZWQuIixyLkVycm9yUmVmLmN1cnJlbnQuZm9jdXMoKSx0LnByb3BzLnN0ZXAyLlF1ZXN0aW9uc1tuXT1yLHZvaWQgdC5wcm9wcy51cGRhdGVTdGVwMih0LnByb3BzLnN0ZXAyKX10LnByb3BzLnN0ZXBDaGFuZ2UoMyl9LHR9cmV0dXJuIGllKHQsZSksdC5wcm90b3R5cGUuY29tcG9uZW50RGlkTW91bnQ9ZnVuY3Rpb24oKXt0aGlzLnByb3BzLnN0ZXAyLlF1ZXN0aW9uc1swXS5Jc0FjdGl2ZT10aGlzLnByb3BzLnN0ZXAxLlF1ZXN0aW9uc1sxXS5BbnN3ZXI+PTAmJnRoaXMucHJvcHMuc3RlcDEuUXVlc3Rpb25zWzFdLkFuc3dlcjw9MjM7dmFyIGU9IXRoaXMucHJvcHMuc3RlcDIuUXVlc3Rpb25zLmZpbmQoZnVuY3Rpb24oZSl7cmV0dXJuIGUuSXNBY3RpdmUmJih2b2lkIDA9PT1lLkFuc3dlcnx8bnVsbD09PWUuQW5zd2VyKX0pO3RoaXMucHJvcHMuc3RlcENvbXBsZXRlKDIsZSksdGhpcy5wcm9wcy5zdGVwMi5RdWVzdGlvbnM9dGhpcy5wcm9wcy5zdGVwMi5RdWVzdGlvbnMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLkVycm9yVGV4dD1udWxsLGUuRXJyb3JSZWY9YS5jcmVhdGVSZWYoKSxlfSksdGhpcy5wcm9wcy51cGRhdGVTdGVwMih0aGlzLnByb3BzLnN0ZXAyKX0sdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIGEuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJzdGVwLXdyYXBwZXIgbnBjLXN0ZXAtMi13cmFwcGVyIn0sYS5jcmVhdGVFbGVtZW50KHYsbnVsbCx0aGlzLnByb3BzLnN0ZXAyLkluc3RydWN0aW9uKSxhLmNyZWF0ZUVsZW1lbnQoaix7cXVlc3Rpb25zOnRoaXMucHJvcHMuc3RlcDIuUXVlc3Rpb25zLGhhbmRsZUNvbXBsZXRlOnRoaXMuaGFuZGxlQ29tcGxldGUsaGFuZGxlQW5zd2VyQ2hhbmdlOnRoaXMuaGFuZGxlQW5zd2VyQ2hhbmdlfSksYS5jcmVhdGVFbGVtZW50KE0se2ZpcnN0VGV4dDoiUHJldmlvdXMiLGZpcnN0SGFuZGxlcjp0aGlzLm9uUHJldmlvdXMsc2Vjb25kVGV4dDoiQ29udGludWUiLHNlY29uZEhhbmRsZXI6dGhpcy5vbkNvbnRpbnVlfSkpfSx0fShhLkNvbXBvbmVudCksdWU9T2JqZWN0KGwuY29ubmVjdCkoZnVuY3Rpb24oZSl7cmV0dXJue3N0ZXAxOmUuc3RlcDEsc3RlcDI6ZS5zdGVwMixzdGVwMzplLnN0ZXAzfX0sZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdChmLmIpKHt1cGRhdGVTdGVwMjpmdW5jdGlvbihlKXtyZXR1cm4gcShlKX0sdXBkYXRlU3RlcDM6ZnVuY3Rpb24oZSl7cmV0dXJuIHooZSl9fSxlKX0pKGFlKSxjZT0obigzMTEpLGZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24odCxuKXtyZXR1cm4oZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdCl0Lmhhc093blByb3BlcnR5KG4pJiYoZVtuXT10W25dKX0pKHQsbil9O3JldHVybiBmdW5jdGlvbih0LG4pe2Z1bmN0aW9uIHIoKXt0aGlzLmNvbnN0cnVjdG9yPXR9ZSh0LG4pLHQucHJvdG90eXBlPW51bGw9PT1uP09iamVjdC5jcmVhdGUobik6KHIucHJvdG90eXBlPW4ucHJvdG90eXBlLG5ldyByKX19KCkpLGxlPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgdD1udWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIHQuaGFuZGxlQW5zd2VyQ2hhbmdlPWZ1bmN0aW9uKGUpe2VbMF0uQW5zd2VyPGVbMV0uQW5zd2VyP2FsZXJ0KCJUaGUgTnVtYmVyIGluIENvbGxlZ2UgbXVzdCBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIHNwZWNpZmllZCBOdW1iZXIgaW4gRmFtaWx5LiIpOih0LnByb3BzLnN0ZXAzLlF1ZXN0aW9ucz1lLHQucHJvcHMudXBkYXRlU3RlcDModC5wcm9wcy5zdGVwMykpfSx0LmhhbmRsZUNvbXBsZXRlPWZ1bmN0aW9uKGUpe3QucHJvcHMuc3RlcENvbXBsZXRlKDMsZSl9LHQub25QcmV2aW91cz1mdW5jdGlvbigpe3QucHJvcHMuc3RlcENoYW5nZSgyKX0sdC5vbkNvbnRpbnVlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgbj0wO248dC5wcm9wcy5zdGVwMy5RdWVzdGlvbnMubGVuZ3RoO24rKyl7dmFyIHI9dC5wcm9wcy5zdGVwMy5RdWVzdGlvbnNbbl07aWYoci5Jc0FjdGl2ZSYmKHIuQW5zd2VyfHwwPT1yLkFuc3dlcikmJihyLkVycm9yVGV4dD1udWxsLHQucHJvcHMuc3RlcDMuUXVlc3Rpb25zW25dPXIsdC5wcm9wcy51cGRhdGVTdGVwMyh0LnByb3BzLnN0ZXAzKSksci5Jc0FjdGl2ZSYmKG51bGw9PXIuQW5zd2VyfHxudWxsPT1yLkFuc3dlcikpcmV0dXJuIHIuRXJyb3JUZXh0PXIuU2VjdGlvbisiIGlzIHJlcXVpcmVkLiIsci5FcnJvclJlZi5jdXJyZW50LmZvY3VzKCksdC5wcm9wcy5zdGVwMy5RdWVzdGlvbnNbbl09cix2b2lkIHQucHJvcHMudXBkYXRlU3RlcDModC5wcm9wcy5zdGVwMyl9dC5wcm9wcy5zdGVwQ2hhbmdlKDQpfSx0fXJldHVybiBjZSh0LGUpLHQucHJvdG90eXBlLmNvbXBvbmVudERpZE1vdW50PWZ1bmN0aW9uKCl7dGhpcy5wcm9wcy5zdGVwMS5RdWVzdGlvbnNbMV0uQW5zd2VyO3ZhciBlPXRoaXMucHJvcHMuc3RlcDIuUXVlc3Rpb25zWzBdLkFuc3dlcix0PXRoaXMucHJvcHMuc3RlcDIuUXVlc3Rpb25zWzFdLkFuc3dlcjswPT1lJiYwPT10P3RoaXMucHJvcHMuc3RlcDMuVHlwZT1pLkRFUEVOREVOVDoxPT10P3RoaXMucHJvcHMuc3RlcDMuVHlwZT1pLklOREVQRU5ERU5UX0tJRFM6MD09dCYmKHRoaXMucHJvcHMuc3RlcDMuVHlwZT1pLklOREVQRU5ERU5UKSx0aGlzLnByb3BzLnN0ZXAzLlF1ZXN0aW9ucz10aGlzLnByb3BzLnN0ZXAzLlF1ZXN0aW9ucy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuRXJyb3JUZXh0PW51bGwsZS5FcnJvclJlZj1hLmNyZWF0ZVJlZigpLGV9KSxjb25zb2xlLmxvZyh0aGlzLnByb3BzLnN0ZXAzLlF1ZXN0aW9ucyksdGhpcy5wcm9wcy51cGRhdGVTdGVwMyh0aGlzLnByb3BzLnN0ZXAzKX0sdC5wcm90b3R5cGUucmVuZGVyPWZ1bmN0aW9uKCl7cmV0dXJuIGEuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJzdGVwLXdyYXBwZXIgbnBjLXN0ZXAtMy13cmFwcGVyIn0sYS5jcmVhdGVFbGVtZW50KHYsbnVsbCx0aGlzLnByb3BzLnN0ZXAzLkluc3RydWN0aW9uLCIgIix0aGlzLnByb3BzLnN0ZXAzLkFkZGl0aW9uYWxJbnN0cnVjdGlvblt0aGlzLnByb3BzLnN0ZXAzLlR5cGVdKSxhLmNyZWF0ZUVsZW1lbnQoaix7cXVlc3Rpb25zOnRoaXMucHJvcHMuc3RlcDMuUXVlc3Rpb25zLGhhbmRsZUNvbXBsZXRlOnRoaXMuaGFuZGxlQ29tcGxldGUsaGFuZGxlQW5zd2VyQ2hhbmdlOnRoaXMuaGFuZGxlQW5zd2VyQ2hhbmdlLHR5cGU6dGhpcy5wcm9wcy5zdGVwMy5UeXBlfSksYS5jcmVhdGVFbGVtZW50KE0se2ZpcnN0VGV4dDoiUHJldmlvdXMiLGZpcnN0SGFuZGxlcjp0aGlzLm9uUHJldmlvdXMsc2Vjb25kVGV4dDoiQ29udGludWUiLHNlY29uZEhhbmRsZXI6dGhpcy5vbkNvbnRpbnVlfSkpfSx0fShhLkNvbXBvbmVudCksc2U9T2JqZWN0KGwuY29ubmVjdCkoZnVuY3Rpb24oZSl7cmV0dXJue3N0ZXAxOmUuc3RlcDEsc3RlcDI6ZS5zdGVwMixzdGVwMzplLnN0ZXAzfX0sZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdChmLmIpKHt1cGRhdGVTdGVwMzpmdW5jdGlvbihlKXtyZXR1cm4geihlKX19LGUpfSkobGUpLGZlPShuKDMxMiksZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbih0LG4pe3JldHVybihlPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KXQuaGFzT3duUHJvcGVydHkobikmJihlW25dPXRbbl0pfSkodCxuKX07cmV0dXJuIGZ1bmN0aW9uKHQsbil7ZnVuY3Rpb24gcigpe3RoaXMuY29uc3RydWN0b3I9dH1lKHQsbiksdC5wcm90b3R5cGU9bnVsbD09PW4/T2JqZWN0LmNyZWF0ZShuKTooci5wcm90b3R5cGU9bi5wcm90b3R5cGUsbmV3IHIpfX0oKSkscGU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciB0PW51bGwhPT1lJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gdC5tb2RpZnk9ZnVuY3Rpb24oKXt0LnByb3BzLnN0ZXBDaGFuZ2UoMSl9LHQuY29udGludWU9ZnVuY3Rpb24oKXt0LnByb3BzLnN0ZXBDb21wbGV0ZSg0LCEwKSx0LnByb3BzLnN0ZXBDaGFuZ2UoNSl9LHQuZ2V0QW5zd2VyVmFsdWU9ZnVuY3Rpb24oZSl7aWYoZS5UeXBlPT1vLkRST1BET1dOfHxlLlR5cGU9PW8uUkFESU8pe3ZhciB0PWUuT3B0aW9ucy5maW5kKGZ1bmN0aW9uKHQpe3JldHVybiB0LktleT09ZS5BbnN3ZXJ9KTtyZXR1cm4gdD90LlZhbHVlOm51bGx9cmV0dXJuIGUuQW5zd2VyfSx0LnJlbmRlclJvdz1mdW5jdGlvbihlKXtyZXR1cm4gYS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6InB1cmUtdS0yNC0yNCBhbnN3ZXItcm93IixrZXk6ZS5UZXh0fSxhLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToicHVyZS11LTI0LTI0IHB1cmUtdS1tZC0xMi0yNCBzZWN0aW9uLXRpdGxlIn0sYS5jcmVhdGVFbGVtZW50KCJzcGFuIixudWxsLGUuU2VjdGlvbikpLGEuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJwdXJlLXUtMjQtMjQgcHVyZS11LW1kLTEyLTI0IGFuc3dlci1xdWVzdGlvbiJ9LGEuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJhbnN3ZXIifSx0LmdldEFuc3dlclZhbHVlKGUpKSkpfSx0LnJlbmRlclRhYmxlPWZ1bmN0aW9uKCl7dmFyIGU9W107cmV0dXJuIHQucHJvcHMuc3RlcDEuUXVlc3Rpb25zLm1hcChmdW5jdGlvbihuKXshbi5Jc0FjdGl2ZXx8bnVsbD09bi5BbnN3ZXImJm51bGw9PW4uQW5zd2VyJiYiIj09bi5BbnN3ZXJ8fGUucHVzaCh0LnJlbmRlclJvdyhuKSl9KSwyPT09dC5wcm9wcy5zdGVwMS5uZXh0U3RlcCYmKHQucHJvcHMuc3RlcDIuUXVlc3Rpb25zLm1hcChmdW5jdGlvbihuKXtlLnB1c2godC5yZW5kZXJSb3cobikpfSksdC5wcm9wcy5zdGVwMy5RdWVzdGlvbnMubWFwKGZ1bmN0aW9uKG4pe2UucHVzaCh0LnJlbmRlclJvdyhuKSl9KSksZX0sdH1yZXR1cm4gZmUodCxlKSx0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtyZXR1cm4gYS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6InN0ZXAtd3JhcHBlciBucGMtcmV2aWV3LXdyYXBwZXIifSxhLmNyZWF0ZUVsZW1lbnQodixudWxsLCJSZXZpZXcgdGhlIGluZm9ybWF0aW9uIHlvdSBoYXZlIHByb3ZpZGVkLiBZb3UgY2FuIGNsaWNrIE1vZGlmeSB0byByZXR1cm4gdG8gU3RlcCAxIGFuZCBlZGl0IHRoaXMgaW5mb3JtYXRpb24sIG9yIGlmIHlvdSBhcmUgaGFwcHkgd2l0aCB0aGUgY3VycmVudCBzZWxlY3Rpb25zLCBjbGljayBDb250aW51ZSB0byByZWNlaXZlIHlvdXIgZXN0aW1hdGVkIG5ldCBwcmljZS4iKSxhLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToicHVyZS1nIn0sdGhpcy5yZW5kZXJUYWJsZSgpKSxhLmNyZWF0ZUVsZW1lbnQoTSx7Zmlyc3RUZXh0OiJNb2RpZnkiLGZpcnN0SGFuZGxlcjp0aGlzLm1vZGlmeSxzZWNvbmRUZXh0OiJDb250aW51ZSIsc2Vjb25kSGFuZGxlcjp0aGlzLmNvbnRpbnVlfSkpfSx0fShhLkNvbXBvbmVudCksZGU9T2JqZWN0KGwuY29ubmVjdCkoZnVuY3Rpb24oZSl7cmV0dXJue3N0ZXAxOmUuc3RlcDEsc3RlcDI6ZS5zdGVwMixzdGVwMzplLnN0ZXAzfX0sZnVuY3Rpb24oZSl7cmV0dXJuIE9iamVjdChmLmIpKHt9LGUpfSkocGUpLGhlPShuKDMxMyksZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbih0LG4pe3JldHVybihlPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8e19fcHJvdG9fXzpbXX1pbnN0YW5jZW9mIEFycmF5JiZmdW5jdGlvbihlLHQpe2UuX19wcm90b19fPXR9fHxmdW5jdGlvbihlLHQpe2Zvcih2YXIgbiBpbiB0KXQuaGFzT3duUHJvcGVydHkobikmJihlW25dPXRbbl0pfSkodCxuKX07cmV0dXJuIGZ1bmN0aW9uKHQsbil7ZnVuY3Rpb24gcigpe3RoaXMuY29uc3RydWN0b3I9dH1lKHQsbiksdC5wcm90b3R5cGU9bnVsbD09PW4/T2JqZWN0LmNyZWF0ZShuKTooci5wcm90b3R5cGU9bi5wcm90b3R5cGUsbmV3IHIpfX0oKSkseWU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciB0PW51bGwhPT1lJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpcztyZXR1cm4gdC5wcmV2aW91cz1mdW5jdGlvbigpe3QucHJvcHMuc3RlcENoYW5nZSg0KX0sdC5mb3JtYXR0ZXI9bmV3IEludGwuTnVtYmVyRm9ybWF0KCJlbi1VUyIse3N0eWxlOiJjdXJyZW5jeSIsY3VycmVuY3k6IlVTRCIsbWluaW11bUZyYWN0aW9uRGlnaXRzOjJ9KSx0LnN0YXJ0T3Zlcj1mdW5jdGlvbigpe3QucHJvcHMuc3RlcDEuUXVlc3Rpb25zPXQucHJvcHMuc3RlcDEuUXVlc3Rpb25zLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gZS5BbnN3ZXI9bnVsbCxlfSksdC5wcm9wcy5zdGVwMi5RdWVzdGlvbnM9dC5wcm9wcy5zdGVwMi5RdWVzdGlvbnMubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBlLkFuc3dlcj1udWxsLGV9KSx0LnByb3BzLnN0ZXAzLlF1ZXN0aW9ucz10LnByb3BzLnN0ZXAzLlF1ZXN0aW9ucy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuQW5zd2VyPW51bGwsZX0pLHQucHJvcHMudXBkYXRlU3RlcDEodC5wcm9wcy5zdGVwMSksdC5wcm9wcy51cGRhdGVTdGVwMih0LnByb3BzLnN0ZXAyKSx0LnByb3BzLnVwZGF0ZVN0ZXAzKHQucHJvcHMuc3RlcDMpLHQucHJvcHMudXBkYXRlU3RlcHModC5wcm9wcy5zdGVwcy5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGUuSXNDb21wbGV0ZWQ9ITEsZX0pKSx0LnByb3BzLnN0ZXBDaGFuZ2UoMSl9LHQuZ2V0RUZDPWZ1bmN0aW9uKGUsdCxuLHIpe3ZhciBvPTAsaT13aW5kb3cudGVtcGxhdGVfZGF0YS5lZmNUYWJsZXNbcl0uZmluZChmdW5jdGlvbihyKXtpZihyLm51bUNvbGxlZ2U9PXQmJnIubnVtRmFtaWx5PT1lJiZyLmluY29tZVJhbmdlPT1uKXJldHVybiByfSk7cmV0dXJuIGkmJihvPWkuRUZDKSxvfSx0LmdldEVzdGltYXRlZEdyYW50cz1mdW5jdGlvbihlLHQsbixyKXt2YXIgbz0wLGk9d2luZG93LnRlbXBsYXRlX2RhdGEudGFibGVUd287cmV0dXJuIDA9PXQ/bz0xMjowPT1lP289MDplPjAmJmU8PTFlMz9vPTE6ZT4xZTMmJmU8PTI1MDA/bz0yOmU+MjUwMCYmZTw9NWUzP289MzplPjVlMyYmZTw9NzUwMD9vPTQ6ZT43NTAwJiZlPD0xZTQ/bz01OmU+MWU0JiZlPD0xMjUwMD9vPTY6ZT4xMjUwMCYmZTw9MTVlMz9vPTc6ZT4xNWUzJiZlPD0yZTQ/bz04OmU+MmU0JiZlPD0zZTQ/bz05OmU+M2U0JiZlPD00ZTQ/bz0xMDplPjRlNCYmKG89MTEpLChyP2lbcl06aS5hbW91bnQpW25dW29dfSx0LnByaW50PWZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKSx3aW5kb3cucHJpbnQoKX0sdH1yZXR1cm4gaGUodCxlKSx0LnByb3RvdHlwZS5jb21wb25lbnREaWRNb3VudD1mdW5jdGlvbigpe2lmKHdpbmRvdy50ZW1wbGF0ZV9kYXRhKXt2YXIgZT13aW5kb3cudGVtcGxhdGVfZGF0YS50YWJsZU9uZSx0PXRoaXMucHJvcHMuc3RlcDEuUXVlc3Rpb25zWzBdLkFuc3dlcixuPXRoaXMucHJvcHMuc3RlcDEuUXVlc3Rpb25zWzFdLkFuc3dlcixyPXRoaXMucHJvcHMuc3RlcDEuUXVlc3Rpb25zWzJdLkFuc3dlcixvPXRoaXMucHJvcHMuc3RlcDEuUXVlc3Rpb25zWzNdLkFuc3dlcixpPXRoaXMucHJvcHMuc3RlcDIuUXVlc3Rpb25zWzBdLkFuc3dlcixhPXRoaXMucHJvcHMuc3RlcDIuUXVlc3Rpb25zWzFdLkFuc3dlcix1PXRoaXMucHJvcHMuc3RlcDMuUXVlc3Rpb25zWzBdLkFuc3dlcixjPXRoaXMucHJvcHMuc3RlcDMuUXVlc3Rpb25zWzFdLkFuc3dlcixsPXRoaXMucHJvcHMuc3RlcDMuUXVlc3Rpb25zWzJdLkFuc3dlcixzPTA7aWYoMT09dCl7dmFyIGY9dm9pZCAwO2Y9bjw9MjMmJjA9PWkmJjA9PWE/ImRlcGVuZGVudCI6MD09YT8iaW5kZXBXaXRob3V0RGVwIjoiaW5kZXBXaXRoRGVwIixzPXRoaXMuZ2V0RUZDKHUsYyxsLGYpfXRoaXMucHJvcHMucmVzdWx0LnR1aXRpb25BbmRGZWVzPW8/ZS50dWl0aW9uW29dOmUudHVpdGlvbi5hbW91bnQsdGhpcy5wcm9wcy5yZXN1bHQucm9vbUFuZEJvYXJkPXI/ZS5leHBlbnNlc1Jvb21bcl06ZS5leHBlbnNlc1Jvb20ub25DYW1wdXMsdGhpcy5wcm9wcy5yZXN1bHQuYm9va3NBbmRTdXBwbGllcz1lLmJvb2tzLmFtb3VudCx0aGlzLnByb3BzLnJlc3VsdC5vdGhlcj1yP2UuZXhwZW5zZXNPdGhlcltyXTplLmV4cGVuc2VzUm9vbS5vbkNhbXB1cyx0aGlzLnByb3BzLnJlc3VsdC5ncmFudD10aGlzLmdldEVzdGltYXRlZEdyYW50cyhzLHQscixvKSx0aGlzLnByb3BzLnVwZGF0ZVJlc3VsdCh0aGlzLnByb3BzLnJlc3VsdCl9fSx0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXtyZXR1cm4gYS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6InN0ZXAtd3JhcHBlciBucGMtcmVzdWx0LXdyYXBwZXIifSxhLmNyZWF0ZUVsZW1lbnQodixudWxsLCJCYXNlZCBvbiB0aGUgaW5mb3JtYXRpb24geW91IGhhdmUgcHJvdmlkZWQsIHRoZSBmb2xsb3dpbmcgY2FsY3VsYXRpb25zIHJlcHJlc2VudCB0aGUgYXZlcmFnZSBuZXQgcHJpY2Ugb2YgYXR0ZW5kYW5jZSB0aGF0IHN0dWRlbnRzIHNpbWlsYXIgdG8geW91IHBhaWQgaW4gdGhlIGdpdmVuIHllYXIiLCJQcm9ncmFtIj09PXdpbmRvdy50ZW1wbGF0ZV9kYXRhLmNhbGVuZGFyU3lzdGVtPyIuICI6IjoiLGEuY3JlYXRlRWxlbWVudChiLldoZW4se2NvbmRpdGlvbjoiUHJvZ3JhbSI9PT13aW5kb3cudGVtcGxhdGVfZGF0YS5jYWxlbmRhclN5c3RlbX0sIlRoaXMgaW5mb3JtYXRpb24gYXBwbGllcyBvbmx5IHRvIHRoZSAiLGEuY3JlYXRlRWxlbWVudCgic3Ryb25nIixudWxsLHdpbmRvdy50ZW1wbGF0ZV9kYXRhLmxhcmdlc3RQcm9ncmFtLCIgIiksInByb2dyYW0gYXQgdGhlIGluc3RpdHV0aW9uLCB3aGljaCB0eXBpY2FsbHkgdGFrZXMgYW4gYXZlcmFnZSBvZiAiLGEuY3JlYXRlRWxlbWVudCgic3Ryb25nIixudWxsLHdpbmRvdy50ZW1wbGF0ZV9kYXRhLmNvbXBsZXRpb25Nb250aHMsIiBtb250aHMiKSwiIGZvciBhIGZ1bGwtdGltZSBzdHVkZW50IHRvIGNvbXBsZXRlLiBQcmljZXMgbWF5IHZhcnkgZGVwZW5kaW5nIG9uIHRoZSBwcm9ncmFtIG9mIGludGVyZXN0IGFuZCBpdHMgZXhwZWN0ZWQgZHVyYXRpb24uIiksYS5jcmVhdGVFbGVtZW50KCJiciIsbnVsbCksYS5jcmVhdGVFbGVtZW50KCJzdHJvbmciLG51bGwsIkFjYWRlbWljIFllYXI6ICIsd2luZG93LnRlbXBsYXRlX2RhdGEuZGF0YVllYXIpKSxhLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToicHVyZS1nIn0sYS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6InB1cmUtdS0yNC0yNCBhbnN3ZXItcm93IGV4cGVuc2UgZXhwLXRvdGFsIn0sYS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6InB1cmUtdS0xMi0yNCBzZWN0aW9uLXRpdGxlIHRvcC1yYWRpdXMifSxhLmNyZWF0ZUVsZW1lbnQoImgyIixudWxsLCJFc3RpbWF0ZWQgdG90YWwgY29zdCBvZiBhdHRlbmRhbmNlIikpLGEuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJwdXJlLXUtMTItMjQgYW5zd2VyLXF1ZXN0aW9uIn0sYS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ImFuc3dlciJ9LHRoaXMuZm9ybWF0dGVyLmZvcm1hdCh0aGlzLnByb3BzLnJlc3VsdC50dWl0aW9uQW5kRmVlcyt0aGlzLnByb3BzLnJlc3VsdC5yb29tQW5kQm9hcmQrdGhpcy5wcm9wcy5yZXN1bHQuYm9va3NBbmRTdXBwbGllcyt0aGlzLnByb3BzLnJlc3VsdC5vdGhlcikpKSksYS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6InB1cmUtdS0yNC0yNCBhbnN3ZXItcm93IGV4cGVuc2UifSxhLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToicHVyZS11LTEyLTI0IHNlY3Rpb24tdGl0bGUifSxhLmNyZWF0ZUVsZW1lbnQoInNwYW4iLG51bGwsIkVzdGltYXRlZCB0dWl0aW9uIGFuZCBmZWVzIikpLGEuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJwdXJlLXUtMTItMjQgYW5zd2VyLXF1ZXN0aW9uIn0sYS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ImFuc3dlciJ9LHRoaXMuZm9ybWF0dGVyLmZvcm1hdCh0aGlzLnByb3BzLnJlc3VsdC50dWl0aW9uQW5kRmVlcyksIiArIikpKSxhLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToicHVyZS11LTI0LTI0IGFuc3dlci1yb3cgZXhwZW5zZSJ9LGEuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJwdXJlLXUtMTItMjQgc2VjdGlvbi10aXRsZSJ9LGEuY3JlYXRlRWxlbWVudCgic3BhbiIsbnVsbCwiRXN0aW1hdGVkIHJvb20gYW5kIGJvYXJkIGNoYXJnZXMiKSxhLmNyZWF0ZUVsZW1lbnQoInNwYW4iLHtjbGFzc05hbWU6ImRlc2NyaXB0aW9uIn0sIihJbmNsdWRlcyByb29taW5nIGFjY29tbW9kYXRpb25zIGFuZCBtZWFscykiKSksYS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6InB1cmUtdS0xMi0yNCBhbnN3ZXItcXVlc3Rpb24ifSxhLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToiYW5zd2VyIn0sdGhpcy5mb3JtYXR0ZXIuZm9ybWF0KHRoaXMucHJvcHMucmVzdWx0LnJvb21BbmRCb2FyZCksIiArIikpKSxhLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToicHVyZS11LTI0LTI0IGFuc3dlci1yb3cgZXhwZW5zZSJ9LGEuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJwdXJlLXUtMTItMjQgc2VjdGlvbi10aXRsZSJ9LGEuY3JlYXRlRWxlbWVudCgic3BhbiIsbnVsbCwiRXN0aW1hdGVkIGNvc3Qgb2YgYm9va3MgYW5kIHN1cHBsaWVzIikpLGEuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJwdXJlLXUtMTItMjQgYW5zd2VyLXF1ZXN0aW9uIn0sYS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ImFuc3dlciJ9LHRoaXMuZm9ybWF0dGVyLmZvcm1hdCh0aGlzLnByb3BzLnJlc3VsdC5ib29rc0FuZFN1cHBsaWVzKSwiICsiKSkpLGEuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJwdXJlLXUtMjQtMjQgYW5zd2VyLXJvdyBleHBlbnNlIn0sYS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6InB1cmUtdS0xMi0yNCBzZWN0aW9uLXRpdGxlIGJvdHRvbS1yYWRpdXMifSxhLmNyZWF0ZUVsZW1lbnQoInNwYW4iLG51bGwsIkVzdGltYXRlZCBvdGhlciBleHBlbnNlcyIpLGEuY3JlYXRlRWxlbWVudCgic3BhbiIse2NsYXNzTmFtZToiZGVzY3JpcHRpb24ifSwiKFBlcnNvbmFsIGV4cGVuc2VzLCB0cmFuc3BvcnRhdGlvbiwgZXRjLikiKSksYS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6InB1cmUtdS0xMi0yNCBhbnN3ZXItcXVlc3Rpb24ifSxhLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToiYW5zd2VyIn0sdGhpcy5mb3JtYXR0ZXIuZm9ybWF0KHRoaXMucHJvcHMucmVzdWx0Lm90aGVyKSkpKSxhLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToicHVyZS11LTI0LTI0IGFuc3dlci1yb3cgZ3JhbnQifSxhLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToicHVyZS11LTEyLTI0IHNlY3Rpb24tdGl0bGUifSxhLmNyZWF0ZUVsZW1lbnQoImgyIixudWxsLCJFc3RpbWF0ZWQgdG90YWwgZ3JhbnQgYWlkIiksYS5jcmVhdGVFbGVtZW50KCJzcGFuIix7Y2xhc3NOYW1lOiJkZXNjcmlwdGlvbiJ9LCIoSW5jbHVkZXMgYm90aCBtZXJpdCBhbmQgbmVlZCBiYXNlZCBncmFudCBhbmQgc2Nob2xhcnNoaXAgYWlkIGZyb20gRmVkZXJhbCwgU3RhdGUsIG9yIExvY2FsIEdvdmVybm1lbnRzLCBvciB0aGUgSW5zdGl0dXRpb24pIikpLGEuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJwdXJlLXUtMTItMjQgYW5zd2VyLXF1ZXN0aW9uIn0sYS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ImFuc3dlciJ9LCIoIix0aGlzLmZvcm1hdHRlci5mb3JtYXQodGhpcy5wcm9wcy5yZXN1bHQuZ3JhbnQpLCIpIikpKSxhLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToicHVyZS11LTI0LTI0IGFuc3dlci1yb3cgdG90YWwifSxhLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToicHVyZS11LTEyLTI0IHNlY3Rpb24tdGl0bGUifSxhLmNyZWF0ZUVsZW1lbnQoImgyIixudWxsLCJFc3RpbWF0ZWQgTmV0IFByaWNlIEFmdGVyIEdyYW50cyBhbmQgU2Nob2xhcnNoaXBzIikpLGEuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJwdXJlLXUtMTItMjQgYW5zd2VyLXF1ZXN0aW9uIn0sYS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6ImFuc3dlciJ9LHRoaXMuZm9ybWF0dGVyLmZvcm1hdCh0aGlzLnByb3BzLnJlc3VsdC50dWl0aW9uQW5kRmVlcyt0aGlzLnByb3BzLnJlc3VsdC5yb29tQW5kQm9hcmQrdGhpcy5wcm9wcy5yZXN1bHQuYm9va3NBbmRTdXBwbGllcyt0aGlzLnByb3BzLnJlc3VsdC5vdGhlci10aGlzLnByb3BzLnJlc3VsdC5ncmFudCkpKSksYS5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6InB1cmUtdS0yNC0yNCBzcGVjaWZpYy1leHBsYW5hdGlvbnMifSxhLmNyZWF0ZUVsZW1lbnQoYi5XaGVuLHtjb25kaXRpb246IlkiPT09d2luZG93LnRlbXBsYXRlX2RhdGEuaG91c2luZ1JlcXVpcmVkfSxhLmNyZWF0ZUVsZW1lbnQoInAiLHtjbGFzc05hbWU6ImV4cGxhbmF0aW9uIGFsZXJ0In0sIlRoaXMgaW5zdGl0dXRpb24gcmVxdWlyZXMgdGhhdCBmdWxsLXRpbWUsIGZpcnN0LXRpbWUgc3R1ZGVudHMgbGl2ZSBvbi1jYW1wdXMgb3IgaW4gaW5zdGl0dXRpb25hbGx5IGNvbnRyb2xsZWQgaG91c2luZy4iKSksYS5jcmVhdGVFbGVtZW50KCJwIix7Y2xhc3NOYW1lOiJleHBsYW5hdGlvbiJ9LCJHcmFudHMgYW5kIHNjaG9sYXJzaGlwcyBkbyBub3QgaGF2ZSB0byBiZSByZXBhaWQuIFNvbWUgc3R1ZGVudHMgYWxzbyBxdWFsaWZ5IGZvciBzdHVkZW50IGxvYW5zIHRvIGFzc2lzdCBpbiBwYXlpbmcgdGhpcyBuZXQgcHJpY2U7IGhvd2V2ZXIsIHN0dWRlbnQgbG9hbnMgZG8gaGF2ZSB0byBiZSByZXBhaWQuIikpKSxhLmNyZWF0ZUVsZW1lbnQoTSx7Zmlyc3RUZXh0OiJQcmV2aW91cyIsZmlyc3RIYW5kbGVyOnRoaXMucHJldmlvdXMsc2Vjb25kVGV4dDoiU3RhcnQgT3ZlciIsc2Vjb25kSGFuZGxlcjp0aGlzLnN0YXJ0T3ZlcixwcmludEhhbmRsZXI6dGhpcy5wcmludH0pLGEuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJwdXJlLXUtMjQtMjQgZ2VuZXJhbC1leHBsYW5hdGlvbnMifSxhLmNyZWF0ZUVsZW1lbnQoInAiLHtjbGFzc05hbWU6ImV4cGxhbmF0aW9uIn0sYS5jcmVhdGVFbGVtZW50KCJzdHJvbmciLG51bGwsIlBsZWFzZSBOb3RlOiAiKSwiVGhlIGVzdGltYXRlcyBhYm92ZSBhcHBseSB0byAiLGEuY3JlYXRlRWxlbWVudCgic3Ryb25nIixudWxsLCJmdWxsLXRpbWUsIGZpcnN0LXRpbWUgZGVncmVlL2NlcnRpZmljYXRlLXNlZWtpbmcgdW5kZXJncmFkdWF0ZSBzdHVkZW50cyIpLCIgb25seS4iLHdpbmRvdy50ZW1wbGF0ZV9kYXRhLmV4cGxhbmF0aW9uMSksYS5jcmVhdGVFbGVtZW50KCJwIix7Y2xhc3NOYW1lOiJleHBsYW5hdGlvbiJ9LCJUaGVzZSBlc3RpbWF0ZXMgZG8gbm90IHJlcHJlc2VudCBhIGZpbmFsIGRldGVybWluYXRpb24sIG9yIGFjdHVhbCBhd2FyZCwgb2YgZmluYW5jaWFsIGFzc2lzdGFuY2Ugb3IgYSBmaW5hbCBuZXQgcHJpY2U7IHRoZXkgYXJlIG9ubHkgZXN0aW1hdGVzIGJhc2VkIG9uIGNvc3Qgb2YgYXR0ZW5kYW5jZSBhbmQgZmluYW5jaWFsIGFpZCBwcm92aWRlZCB0byBzdHVkZW50cyBpbiAiLHdpbmRvdy50ZW1wbGF0ZV9kYXRhLmRhdGFZZWFyLCIuIENvc3Qgb2YgYXR0ZW5kYW5jZSBhbmQgZmluYW5jaWFsIGFpZCBhdmFpbGFiaWxpdHkgY2hhbmdlIHllYXIgdG8geWVhci4gVGhlc2UgZXN0aW1hdGVzIHNoYWxsIG5vdCBiZSBiaW5kaW5nIG9uIHRoZSBTZWNyZXRhcnkgb2YgRWR1Y2F0aW9uLCB0aGUgaW5zdGl0dXRpb24gb2YgaGlnaGVyIGVkdWNhdGlvbiwgb3IgdGhlIFN0YXRlLiIpLGEuY3JlYXRlRWxlbWVudCgicCIse2NsYXNzTmFtZToiZXhwbGFuYXRpb24ifSwiTm90IGFsbCBzdHVkZW50cyByZWNlaXZlIGZpbmFuY2lhbCBhaWQuIEluICIsd2luZG93LnRlbXBsYXRlX2RhdGEuZGF0YVllYXIsIiwiLHdpbmRvdy50ZW1wbGF0ZV9kYXRhLmdyYW50QXdhcmRzLCIlIG9mIG91ciBmdWxsLXRpbWUgc3R1ZGVudHMgZW5yb2xsaW5nIGZvciBjb2xsZWdlIGZvciB0aGUgZmlyc3QgdGltZSByZWNlaXZlZCBncmFudC9zY2hvbGFyc2hpcCBhaWQuIFN0dWRlbnRzIG1heSBhbHNvIGJlIGVsaWdpYmxlIGZvciBzdHVkZW50IGxvYW5zIGFuZCB3b3JrLXN0dWR5LiBTdHVkZW50cyBtdXN0IGNvbXBsZXRlIHRoZSBGcmVlIEFwcGxpY2F0aW9uIGZvciBGZWRlcmFsIFN0dWRlbnQgQWlkIChGQUZTQSkgaW4gb3JkZXIgdG8gZGV0ZXJtaW5lIHRoZWlyIGVsaWdpYmlsaXR5IGZvciBGZWRlcmFsIGZpbmFuY2lhbCBhaWQgdGhhdCBpbmNsdWRlcyBGZWRlcmFsIGdyYW50LCBsb2FuLCBvciB3b3JrLXN0dWR5IGFzc2lzdGFuY2UuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGFwcGx5aW5nIGZvciBGZWRlcmFsIHN0dWRlbnQgYWlkLCBnbyB0byAiLGEuY3JlYXRlRWxlbWVudCgiYSIse2hyZWY6Imh0dHA6Ly93d3cuZmFmc2EuZWQuZ292Iix0YXJnZXQ6Il9ibGFuayJ9LCJodHRwOi8vd3d3LmZhZnNhLmVkLmdvdiIpLCIuIix3aW5kb3cudGVtcGxhdGVfZGF0YS5leHBsYW5hdGlvbjIpLGEuY3JlYXRlRWxlbWVudCgicCIse2NsYXNzTmFtZToiZXhwbGFuYXRpb24ifSx3aW5kb3cudGVtcGxhdGVfZGF0YS5leHBsYW5hdGlvbjMpKSl9LHR9KGEuQ29tcG9uZW50KSxfZT1PYmplY3QobC5jb25uZWN0KShmdW5jdGlvbihlKXtyZXR1cm57c3RlcHM6ZS5zdGVwcyxzdGVwMTplLnN0ZXAxLHN0ZXAyOmUuc3RlcDIsc3RlcDM6ZS5zdGVwMyxyZXN1bHQ6ZS5yZXN1bHR9fSxmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0KGYuYikoe3VwZGF0ZVJlc3VsdDpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJue3R5cGU6Qy5TRVRfUkVTVUxULHZhbHVlOmV9fShlKX0sdXBkYXRlU3RlcDE6ZnVuY3Rpb24oZSl7cmV0dXJuIEIoZSl9LHVwZGF0ZVN0ZXAyOmZ1bmN0aW9uKGUpe3JldHVybiBxKGUpfSx1cGRhdGVTdGVwMzpmdW5jdGlvbihlKXtyZXR1cm4geihlKX0sdXBkYXRlU3RlcHM6ZnVuY3Rpb24oZSl7cmV0dXJuIEcoZSl9fSxlKX0pKHllKSx2ZT0obigzMTQpLGZ1bmN0aW9uKCl7dmFyIGU9ZnVuY3Rpb24odCxuKXtyZXR1cm4oZT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fHtfX3Byb3RvX186W119aW5zdGFuY2VvZiBBcnJheSYmZnVuY3Rpb24oZSx0KXtlLl9fcHJvdG9fXz10fXx8ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG4gaW4gdCl0Lmhhc093blByb3BlcnR5KG4pJiYoZVtuXT10W25dKX0pKHQsbil9O3JldHVybiBmdW5jdGlvbih0LG4pe2Z1bmN0aW9uIHIoKXt0aGlzLmNvbnN0cnVjdG9yPXR9ZSh0LG4pLHQucHJvdG90eXBlPW51bGw9PT1uP09iamVjdC5jcmVhdGUobik6KHIucHJvdG90eXBlPW4ucHJvdG90eXBlLG5ldyByKX19KCkpLG1lPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgdD1udWxsIT09ZSYmZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fHRoaXM7cmV0dXJuIHQuaGFuZGxlU3RlcENvbXBsZXRlPWZ1bmN0aW9uKGUsbil7dC5wcm9wcy51cGRhdGVTdGVwcyh0LnByb3BzLnN0ZXBzLm1hcChmdW5jdGlvbih0LHIpe3JldHVybiBlPT09ciYmKHQuSXNDb21wbGV0ZWQ9biksdH0pKX0sdC5jaGFuZ2VTdGVwPWZ1bmN0aW9uKGUpe3QucHJvcHMudXBkYXRlU3RlcHModC5wcm9wcy5zdGVwcy5tYXAoZnVuY3Rpb24odCxuKXtyZXR1cm4gdC5Jc0FjdGl2ZT1lPT09bix0fSkpfSx0LnRvZ2dsZVN0ZXAyYW5kMz1mdW5jdGlvbihlKXt0LnByb3BzLnVwZGF0ZVN0ZXBzKHQucHJvcHMuc3RlcHMubWFwKGZ1bmN0aW9uKHQsbil7cmV0dXJuIDIhPT1uJiYzIT09bnx8KHQuTm90QXBwbGljYWJsZT1lKSx0fSkpfSx0fXJldHVybiB2ZSh0LGUpLHQucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMuc3RlcHMuZmluZChmdW5jdGlvbihlKXtyZXR1cm4gZS5Jc0FjdGl2ZX0pO3JldHVybiBhLmNyZWF0ZUVsZW1lbnQoJCxudWxsLGEuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJob21lLXdyYXBwZXIifSxhLmNyZWF0ZUVsZW1lbnQoZyx7aGFuZGxlQ2hhbmdlOnRoaXMuY2hhbmdlU3RlcCxzdGVwczp0aGlzLnByb3BzLnN0ZXBzLGFjdGl2ZVN0ZXA6ZX0pLGEuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJzdGVwLWNvbnRhaW5lciJ9LGEuY3JlYXRlRWxlbWVudChiLldoZW4se2NvbmRpdGlvbjoiU3RlcCAxIj09PWUuVGl0bGV9LGEuY3JlYXRlRWxlbWVudCh0ZSx7c3RlcENoYW5nZTp0aGlzLmNoYW5nZVN0ZXAsc3RlcENvbXBsZXRlOnRoaXMuaGFuZGxlU3RlcENvbXBsZXRlfSkpLGEuY3JlYXRlRWxlbWVudChiLldoZW4se2NvbmRpdGlvbjoiU3RlcCAyIj09PWUuVGl0bGV9LGEuY3JlYXRlRWxlbWVudChvZSx7c3RlcDp0aGlzLnByb3BzLnN0ZXBzWzFdLHN0ZXBDb21wbGV0ZTp0aGlzLmhhbmRsZVN0ZXBDb21wbGV0ZSxzdGVwQ2hhbmdlOnRoaXMuY2hhbmdlU3RlcCx0b2dnbGVTdGVwMmFuZDM6dGhpcy50b2dnbGVTdGVwMmFuZDN9KSksYS5jcmVhdGVFbGVtZW50KGIuV2hlbix7Y29uZGl0aW9uOiJTdGVwIDMiPT09ZS5UaXRsZX0sYS5jcmVhdGVFbGVtZW50KHVlLHtzdGVwOnRoaXMucHJvcHMuc3RlcHNbMl0sc3RlcENvbXBsZXRlOnRoaXMuaGFuZGxlU3RlcENvbXBsZXRlLHN0ZXBDaGFuZ2U6dGhpcy5jaGFuZ2VTdGVwfSkpLGEuY3JlYXRlRWxlbWVudChiLldoZW4se2NvbmRpdGlvbjoiU3RlcCA0Ij09PWUuVGl0bGV9LGEuY3JlYXRlRWxlbWVudChzZSx7c3RlcDp0aGlzLnByb3BzLnN0ZXBzWzNdLHN0ZXBDb21wbGV0ZTp0aGlzLmhhbmRsZVN0ZXBDb21wbGV0ZSxzdGVwQ2hhbmdlOnRoaXMuY2hhbmdlU3RlcH0pKSxhLmNyZWF0ZUVsZW1lbnQoYi5XaGVuLHtjb25kaXRpb246IlN0ZXAgNSI9PT1lLlRpdGxlfSxhLmNyZWF0ZUVsZW1lbnQoZGUse3N0ZXBDaGFuZ2U6dGhpcy5jaGFuZ2VTdGVwLHN0ZXBDb21wbGV0ZTp0aGlzLmhhbmRsZVN0ZXBDb21wbGV0ZX0pKSxhLmNyZWF0ZUVsZW1lbnQoYi5XaGVuLHtjb25kaXRpb246IlN0ZXAgNiI9PT1lLlRpdGxlfSxhLmNyZWF0ZUVsZW1lbnQoX2Use3N0ZXBDaGFuZ2U6dGhpcy5jaGFuZ2VTdGVwfSkpKSkpfSx0fShhLkNvbXBvbmVudCksZ2U9T2JqZWN0KGwuY29ubmVjdCkoZnVuY3Rpb24oZSl7cmV0dXJue3N0ZXBzOmUuc3RlcHN9fSxmdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0KGYuYikoe3VwZGF0ZVN0ZXBzOmZ1bmN0aW9uKGUpe3JldHVybiBHKGUpfX0sZSl9KShtZSksYmU9KG4oMzE1KSxmdW5jdGlvbigpe3ZhciBlPWZ1bmN0aW9uKHQsbil7cmV0dXJuKGU9T2JqZWN0LnNldFByb3RvdHlwZU9mfHx7X19wcm90b19fOltdfWluc3RhbmNlb2YgQXJyYXkmJmZ1bmN0aW9uKGUsdCl7ZS5fX3Byb3RvX189dH18fGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuIGluIHQpdC5oYXNPd25Qcm9wZXJ0eShuKSYmKGVbbl09dFtuXSl9KSh0LG4pfTtyZXR1cm4gZnVuY3Rpb24odCxuKXtmdW5jdGlvbiByKCl7dGhpcy5jb25zdHJ1Y3Rvcj10fWUodCxuKSx0LnByb3RvdHlwZT1udWxsPT09bj9PYmplY3QuY3JlYXRlKG4pOihyLnByb3RvdHlwZT1uLnByb3RvdHlwZSxuZXcgcil9fSgpKSx3ZT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIG51bGwhPT1lJiZlLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8dGhpc31yZXR1cm4gYmUodCxlKSx0LnByb3RvdHlwZS5yZW5kZXI9ZnVuY3Rpb24oKXt2YXIgZT12b2lkIDAhPT13aW5kb3cudGVtcGxhdGVfZGF0YT8idGhlbWUtIit3aW5kb3cudGVtcGxhdGVfZGF0YS50aGVtZS5jb2xvclRoZW1lOiJ0aGVtZS1saWdodCI7cmV0dXJuIGEuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOmV9LGEuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJucGMtYXBwIn0sYS5jcmVhdGVFbGVtZW50KGdlLG51bGwpKSl9LHR9KGEuQ29tcG9uZW50KTt3aW5kb3cudGVtcGxhdGVfZGF0YXx8YWxlcnQoIllvdSBhcmUgbWlzc2luZyBkYXRhLmpzIGZpbGUuIFdpdGhvdXQgaXQsIGFwcGxpY2F0aW9uIGlzIHVzZWxlc3MuIiksdS5yZW5kZXIoYS5jcmVhdGVFbGVtZW50KGMuQXBwQ29udGFpbmVyLG51bGwsYS5jcmVhdGVFbGVtZW50KGwuUHJvdmlkZXIse3N0b3JlOlp9LGEuY3JlYXRlRWxlbWVudCh3ZSxudWxsKSkpLGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJyb290IikpfV0pOzwvc2NyaXB0PgogICAgPC9ib2R5Pgo8L2h0bWw+Cg==” /]