[fusion_builder_container type=”flex” hundred_percent=”no” equal_height_columns=”no” hide_on_mobile=”small-visibility,medium-visibility,large-visibility” background_position=”center center” background_repeat=”no-repeat” fade=”no” background_parallax=”none” parallax_speed=”0.3″ video_aspect_ratio=”16:9″ video_loop=”yes” video_mute=”yes” border_style=”solid”][fusion_builder_row][fusion_builder_column type=”1_1″ layout=”1_1″ background_position=”left top” border_style=”solid” border_position=”all” spacing=”yes” background_repeat=”no-repeat” margin_top=”0px” margin_bottom=”0px” animation_speed=”0.3″ animation_direction=”left” hide_on_mobile=”small-visibility,medium-visibility,large-visibility” center_content=”no” last=”true” hover_type=”none” min_height=”” link=”” background_blend_mode=”overlay” first=”true”][fusion_code admin_label=”” render_logics=””]PCEtLQogIEpvY3VsIEFsZmFiZXR1bHVpIFJvbcOibmVzYwogIFdvcmRQcmVzcyAvIEF2YWRhIGZyaWVuZGx5IHZlcnNpb24KICBQYXN0ZSB0aGlzIGludG8gYSBDdXN0b20gSFRNTCAvIFJhdyBIVE1MIGJsb2NrLgogIENTUyBpcyBzY29wZWQgdG8gI2FscGhhYmV0LWdhbWUtd3JhcHBlci4KLS0+Cgo8ZGl2IGlkPSJhbHBoYWJldC1nYW1lLXdyYXBwZXIiIGNsYXNzPSJhbHBoYWJldC1nYW1lIiB0YWJpbmRleD0iMCIgYXJpYS1sYWJlbD0iSm9jdWwgYWxmYWJldHVsdWkgcm9tw6JuZXNjIj4KICA8aGVhZGVyIGNsYXNzPSJhbHBoYWJldC1nYW1lX19oZWFkZXIiPgogICAgPGRpdiBjbGFzcz0iYWxwaGFiZXQtZ2FtZV9fZXllYnJvdyI+Sm9jIGVkdWNhdGl2PC9kaXY+CiAgICA8aDI+UHVuZSBsaXRlcmVsZSDDrm4gb3JkaW5lIGFsZmFiZXRpY8SDPC9oMj4KCiAgICA8ZGl2IGNsYXNzPSJhbHBoYWJldC1nYW1lX190b3BiYXIiIGFyaWEtbGFiZWw9IkluZm9ybWHIm2lpIGpvYyI+CiAgICAgIDxkaXYgY2xhc3M9ImFscGhhYmV0LWdhbWVfX3N0YXR1cyIgYXJpYS1saXZlPSJwb2xpdGUiPgogICAgICAgIDxzcGFuIGNsYXNzPSJhbHBoYWJldC1nYW1lX19zdGF0dXMtbGFiZWwiPkNhdXTEgyBhY3VtOjwvc3Bhbj4KICAgICAgICA8c3Ryb25nIGlkPSJjdXJyZW50LWxldHRlci1jaGlwIj5BPC9zdHJvbmc+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iYWxwaGFiZXQtZ2FtZV9fcHJvZ3Jlc3MiIGFyaWEtbGFiZWw9IlByb2dyZXMgam9jIj4KICAgICAgICA8ZGl2IGNsYXNzPSJhbHBoYWJldC1nYW1lX19wcm9ncmVzcy10ZXh0Ij4KICAgICAgICAgIDxzcGFuPlByb2dyZXM8L3NwYW4+CiAgICAgICAgICA8c3Ryb25nIGlkPSJwcm9ncmVzcy10ZXh0Ij4wIC8gMzE8L3N0cm9uZz4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJhbHBoYWJldC1nYW1lX19wcm9ncmVzcy10cmFjayIgYXJpYS1oaWRkZW49InRydWUiPgogICAgICAgICAgPGRpdiBpZD0icHJvZ3Jlc3MtZmlsbCIgY2xhc3M9ImFscGhhYmV0LWdhbWVfX3Byb2dyZXNzLWZpbGwiPjwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9ImFscGhhYmV0LWdhbWVfX2FjdGlvbnMiIGFyaWEtbGFiZWw9IkFjyJtpdW5pIGpvYyI+CiAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYWxwaGFiZXQtZ2FtZV9fYnRuIGFscGhhYmV0LWdhbWVfX2J0bi0tZ3JheSIgZGF0YS1hY3Rpb249Imluc3RydWN0aW9ucyI+CiAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49InRydWUiPuKEue+4jzwvc3Bhbj4KICAgICAgICBJbnN0cnVjyJtpdW5pCiAgICAgIDwvYnV0dG9uPgoKICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJhbHBoYWJldC1nYW1lX19idG4gYWxwaGFiZXQtZ2FtZV9fYnRuLS1oaW50IiBkYXRhLWFjdGlvbj0iaGludCI+CiAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49InRydWUiPvCfkqE8L3NwYW4+CiAgICAgICAgSW5kaWNpdQogICAgICA8L2J1dHRvbj4KCiAgICAgIDxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYWxwaGFiZXQtZ2FtZV9fYnRuIGFscGhhYmV0LWdhbWVfX2J0bi0tcmVzZXQiIGRhdGEtYWN0aW9uPSJyZXNldCI+CiAgICAgICAgPHNwYW4gYXJpYS1oaWRkZW49InRydWUiPuKGuzwvc3Bhbj4KICAgICAgICBSZXNldGVhesSDCiAgICAgIDwvYnV0dG9uPgoKICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJhbHBoYWJldC1nYW1lX19idG4gYWxwaGFiZXQtZ2FtZV9fYnRuLS10ZWFjaGVyIiBkYXRhLWFjdGlvbj0idG9nZ2xlLWd1aWRlIiBhcmlhLXByZXNzZWQ9InRydWUiPgogICAgICAgIDxzcGFuIGFyaWEtaGlkZGVuPSJ0cnVlIj7wn5mIPC9zcGFuPgogICAgICAgIEFzY3VuZGUgZ2hpZGFqdWwKICAgICAgPC9idXR0b24+CiAgICA8L2Rpdj4KICA8L2hlYWRlcj4KCiAgPHNlY3Rpb24gaWQ9Imluc3RydWN0aW9ucy1wYW5lbCIgY2xhc3M9ImFscGhhYmV0LWdhbWVfX2luc3RydWN0aW9ucyBpcy1oaWRkZW4iIGFyaWEtbGFiZWw9Ikluc3RydWPIm2l1bmkgZGUgam9jIj4KICAgIDxkaXYgY2xhc3M9ImFscGhhYmV0LWdhbWVfX2luc3RydWN0aW9ucy1oZWFkIj4KICAgICAgPGgzPkN1bSBzZSBqb2FjxIM8L2gzPgogICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImFscGhhYmV0LWdhbWVfX2Nsb3NlIiBkYXRhLWFjdGlvbj0iaW5zdHJ1Y3Rpb25zIj7Djm5jaGlkZSDinJU8L2J1dHRvbj4KICAgIDwvZGl2PgoKICAgIDxvbCBjbGFzcz0iYWxwaGFiZXQtZ2FtZV9fc3RlcHMiPgogICAgICA8bGk+PHN0cm9uZz5BbGVnZSBsaXRlcmEgbHVtaW5hdMSDOjwvc3Ryb25nPiBqb2N1bCBjZXJlIGxpdGVyZWxlIHBlIHLDom5kLCBkZSBsYSA8c3Ryb25nPkE8L3N0cm9uZz4gbGEgPHN0cm9uZz5aPC9zdHJvbmc+LjwvbGk+CiAgICAgIDxsaT48c3Ryb25nPkNsaWNrIHNhdSBkcmFnOjwvc3Ryb25nPiBhcGFzxIMgcGUgbGl0ZXLEgyBvcmkgdHJhZ2UgbGl0ZXJhIMOubiBjxINzdcibYSBhbGJhc3RyxIMuPC9saT4KICAgICAgPGxpPjxzdHJvbmc+UG/Im2kgdGFzdGE6PC9zdHJvbmc+IGxpdGVyZWxlIHNlIHBvdCBpbnRyb2R1Y2UgyJlpIGRlIGxhIHRhc3RhdHVyxIMsIGluY2x1c2l2IGN1IGRpYWNyaXRpY2UuPC9saT4KICAgICAgPGxpPjxzdHJvbmc+SW5kaWNpdWwgYWp1dMSDIHRyZXB0YXQ6PC9zdHJvbmc+IHByaW1hIGFwxINzYXJlIGFyYXTEgyBsaXRlcmEsIGEgZG91YSBleHBsaWPEgywgYSB0cmVpYSBvIHB1bmUgYXV0b21hdC48L2xpPgogICAgPC9vbD4KICA8L3NlY3Rpb24+CgogIDxtYWluIGNsYXNzPSJhbHBoYWJldC1nYW1lX19jYXJkIiBhcmlhLWxhYmVsPSJab25hIGRlIGpvYyI+CiAgICA8ZGl2IGlkPSJ0YXJnZXQtZ3JpZCIgY2xhc3M9ImFscGhhYmV0LWdhbWVfX2dyaWQiIGFyaWEtbGFiZWw9IlDEg3RyxIPIm2VsZSBwZW50cnUgbGl0ZXJlIj48L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJhbHBoYWJldC1nYW1lX19zZXBhcmF0b3IiIGFyaWEtaGlkZGVuPSJ0cnVlIj4KICAgICAgPHNwYW4+PC9zcGFuPgogICAgICA8c3Ryb25nPlJlemVydsSDIGRlIGxpdGVyZTwvc3Ryb25nPgogICAgICA8c3Bhbj48L3NwYW4+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGlkPSJsZXR0ZXItcG9vbCIgY2xhc3M9ImFscGhhYmV0LWdhbWVfX3Bvb2wiIGFyaWEtbGFiZWw9IkxpdGVyZSBhbWVzdGVjYXRlIj48L2Rpdj4KICA8L21haW4+CgogIDxzZWN0aW9uIGNsYXNzPSJhbHBoYWJldC1nYW1lX190ZWFjaGVyIiBhcmlhLWxpdmU9InBvbGl0ZSI+CiAgICA8ZGl2IGNsYXNzPSJhbHBoYWJldC1nYW1lX19hdmF0YXIiIGFyaWEtaGlkZGVuPSJ0cnVlIj4KICAgICAgPGltZyBzcmM9Imh0dHBzOi8vYXJpY2ljYS5jb20vd3AtY29udGVudC91cGxvYWRzL0FyaWNpY2EuY29tXy5wbmciIGFsdD0iIiBsb2FkaW5nPSJsYXp5Ij4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0iYWxwaGFiZXQtZ2FtZV9fYnViYmxlIj4KICAgICAgPHAgaWQ9InRlYWNoZXItbXNnIj5CdW7EgyEgSGFpIHPEgyBwdW5lbSBhbGZhYmV0dWwgcm9tw6JuZXNjIMOubiBvcmRpbmUuIMOObmNlcGVtIGN1IEEhPC9wPgogICAgPC9kaXY+CiAgPC9zZWN0aW9uPgoKICA8ZGl2IGlkPSJ2aWN0b3J5LW1vZGFsIiBjbGFzcz0iYWxwaGFiZXQtZ2FtZV9fbW9kYWwgaXMtaGlkZGVuIiByb2xlPSJkaWFsb2ciIGFyaWEtbW9kYWw9InRydWUiIGFyaWEtbGFiZWw9IkpvYyB0ZXJtaW5hdCI+CiAgICA8ZGl2IGlkPSJtb2RhbC1jb250ZW50IiBjbGFzcz0iYWxwaGFiZXQtZ2FtZV9fbW9kYWwtY2FyZCI+CiAgICAgIDxkaXYgY2xhc3M9ImFscGhhYmV0LWdhbWVfX3Ryb3BoeSIgYXJpYS1oaWRkZW49InRydWUiPvCfj4Y8L2Rpdj4KICAgICAgPGgyPkV4Y2VsZW50ITwvaDI+CiAgICAgIDxwPkFpIG9yZG9uYXQgdG90IGFsZmFiZXR1bCByb23Dom5lc2MuPC9wPgogICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9ImFscGhhYmV0LWdhbWVfX2J0biBhbHBoYWJldC1nYW1lX19idG4tLXByaW1hcnkiIGRhdGEtYWN0aW9uPSJyZXNldCI+Sm9hY8SDIGRpbiBub3U8L2J1dHRvbj4KICAgIDwvZGl2PgogIDwvZGl2Pgo8L2Rpdj4KCjxzdHlsZT4KICAjYWxwaGFiZXQtZ2FtZS13cmFwcGVyLAogICNhbHBoYWJldC1nYW1lLXdyYXBwZXIgKiB7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogIH0KCiAgI2FscGhhYmV0LWdhbWUtd3JhcHBlciB7CiAgICAtLWFnLXRleHQ6ICMxNzIwMzM7CiAgICAtLWFnLW11dGVkOiAjNjY3MDg1OwogICAgLS1hZy1saW5lOiAjZTRlN2VjOwogICAgLS1hZy1saW5lLXN0cm9uZzogI2NiZDVlMTsKICAgIC0tYWctc29mdDogI2Y1ZjdmYjsKICAgIC0tYWctY2FyZDogI2ZmZmZmZjsKICAgIC0tYWctYmx1ZTogIzI1NjNlYjsKICAgIC0tYWctYmx1ZS1zb2Z0OiAjZGJlYWZlOwogICAgLS1hZy1ncmVlbjogIzE2YTM0YTsKICAgIC0tYWctZ3JlZW4tc29mdDogI2RjZmNlNzsKICAgIC0tYWctYW1iZXI6ICNkOTc3MDY7CiAgICAtLWFnLWFtYmVyLXNvZnQ6ICNmZWYzYzc7CiAgICAtLWFnLXJlZDogI2VmNDQ0NDsKICAgIC0tYWctcmVkLXNvZnQ6ICNmZWUyZTI7CiAgICAtLWFnLXNoYWRvdzogMCAxNnB4IDM4cHggcmdiYSgxNSwgMjMsIDQyLCAwLjEwKTsKCiAgICB3aWR0aDogMTAwJTsKICAgIG1heC13aWR0aDogMTEyMHB4OwogICAgbWFyZ2luOiAwIGF1dG87CiAgICBwYWRkaW5nOiBjbGFtcCgxNHB4LCAzdncsIDI4cHgpOwogICAgY29sb3I6IHZhcigtLWFnLXRleHQpOwogICAgYmFja2dyb3VuZDogcmFkaWFsLWdyYWRpZW50KGNpcmNsZSBhdCB0b3AsICNmZmZmZmYgMCUsIHZhcigtLWFnLXNvZnQpIDcwJSk7CiAgICBib3JkZXI6IDJweCBzb2xpZCAjMTExODI3OwogICAgYm9yZGVyLXJhZGl1czogMjZweDsKICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgbGluZS1oZWlnaHQ6IDEuNDU7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBpc29sYXRpb246IGlzb2xhdGU7CiAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICB0b3VjaC1hY3Rpb246IHBhbi15OwogIH0KCiAgI2FscGhhYmV0LWdhbWUtd3JhcHBlciBidXR0b24gewogICAgZm9udDogaW5oZXJpdDsKICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIGFwcGVhcmFuY2U6IG5vbmU7CiAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CiAgfQoKICAjYWxwaGFiZXQtZ2FtZS13cmFwcGVyIC5pcy1oaWRkZW4gewogICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogIH0KCiAgLmFscGhhYmV0LWdhbWVfX2hlYWRlciB7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ2FwOiAxNHB4OwogICAganVzdGlmeS1pdGVtczogY2VudGVyOwogICAgbWFyZ2luLWJvdHRvbTogMjJweDsKICB9CgogIC5hbHBoYWJldC1nYW1lX19leWVicm93IHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgcGFkZGluZzogNXB4IDEycHg7CiAgICBib3JkZXI6IDFweCBzb2xpZCAjYmZkYmZlOwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgICBjb2xvcjogIzFkNGVkODsKICAgIGJhY2tncm91bmQ6ICNlZmY2ZmY7CiAgICBmb250LXNpemU6IDEzcHg7CiAgICBmb250LXdlaWdodDogODAwOwogICAgbGV0dGVyLXNwYWNpbmc6IDAuMDRlbTsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgfQoKICAuYWxwaGFiZXQtZ2FtZV9faGVhZGVyIGgyIHsKICAgIG1hcmdpbjogMDsKICAgIGNvbG9yOiB2YXIoLS1hZy10ZXh0KTsKICAgIGZvbnQtc2l6ZTogY2xhbXAoMjVweCwgNHZ3LCAzOHB4KTsKICAgIGxpbmUtaGVpZ2h0OiAxLjEyOwogICAgZm9udC13ZWlnaHQ6IDkwMDsKICB9CgogIC5hbHBoYWJldC1nYW1lX190b3BiYXIgewogICAgd2lkdGg6IG1pbigxMDAlLCA3NjBweCk7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBtaW5tYXgoMTUwcHgsIGF1dG8pIDFmcjsKICAgIGdhcDogMTJweDsKICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoOwogIH0KCiAgLmFscGhhYmV0LWdhbWVfX3N0YXR1cywKICAuYWxwaGFiZXQtZ2FtZV9fcHJvZ3Jlc3MgewogICAgYmFja2dyb3VuZDogI2ZmZmZmZjsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWFnLWxpbmUpOwogICAgYm9yZGVyLXJhZGl1czogMThweDsKICAgIGJveC1zaGFkb3c6IDAgOHB4IDE4cHggcmdiYSgxNSwgMjMsIDQyLCAwLjA2KTsKICB9CgogIC5hbHBoYWJldC1nYW1lX19zdGF0dXMgewogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGdhcDogMTBweDsKICAgIG1pbi1oZWlnaHQ6IDU4cHg7CiAgICBwYWRkaW5nOiAxMHB4IDE0cHg7CiAgfQoKICAuYWxwaGFiZXQtZ2FtZV9fc3RhdHVzLWxhYmVsIHsKICAgIGNvbG9yOiB2YXIoLS1hZy1tdXRlZCk7CiAgICBmb250LXNpemU6IDE0cHg7CiAgICBmb250LXdlaWdodDogODAwOwogIH0KCiAgI2N1cnJlbnQtbGV0dGVyLWNoaXAgewogICAgbWluLXdpZHRoOiA0NHB4OwogICAgaGVpZ2h0OiA0NHB4OwogICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBjb2xvcjogI2ZmZmZmZjsKICAgIGJhY2tncm91bmQ6IHZhcigtLWFnLWJsdWUpOwogICAgYm9yZGVyLXJhZGl1czogMTRweDsKICAgIGZvbnQtc2l6ZTogMjNweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgYm94LXNoYWRvdzogMCA2cHggMCAjMWU0MGFmOwogIH0KCiAgLmFscGhhYmV0LWdhbWVfX3Byb2dyZXNzIHsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBhbGlnbi1jb250ZW50OiBjZW50ZXI7CiAgICBnYXA6IDhweDsKICAgIHBhZGRpbmc6IDEwcHggMTRweDsKICB9CgogIC5hbHBoYWJldC1nYW1lX19wcm9ncmVzcy10ZXh0IHsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgZ2FwOiAxMnB4OwogICAgY29sb3I6IHZhcigtLWFnLW11dGVkKTsKICAgIGZvbnQtc2l6ZTogMTRweDsKICAgIGZvbnQtd2VpZ2h0OiA4MDA7CiAgfQoKICAuYWxwaGFiZXQtZ2FtZV9fcHJvZ3Jlc3MtdGV4dCBzdHJvbmcgewogICAgY29sb3I6IHZhcigtLWFnLXRleHQpOwogIH0KCiAgLmFscGhhYmV0LWdhbWVfX3Byb2dyZXNzLXRyYWNrIHsKICAgIGhlaWdodDogMTBweDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBiYWNrZ3JvdW5kOiAjZWVmMmY3OwogICAgYm9yZGVyLXJhZGl1czogOTk5cHg7CiAgfQoKICAuYWxwaGFiZXQtZ2FtZV9fcHJvZ3Jlc3MtZmlsbCB7CiAgICB3aWR0aDogMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQoOTBkZWcsICM2MGE1ZmEsICMyNTYzZWIpOwogICAgYm9yZGVyLXJhZGl1czogaW5oZXJpdDsKICAgIHRyYW5zaXRpb246IHdpZHRoIDAuMjJzIGVhc2U7CiAgfQoKICAuYWxwaGFiZXQtZ2FtZV9fYWN0aW9ucyB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC13cmFwOiB3cmFwOwogICAgZ2FwOiAxMHB4OwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgfQoKICAuYWxwaGFiZXQtZ2FtZV9fYnRuIHsKICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgZ2FwOiA4cHg7CiAgICBtaW4taGVpZ2h0OiA0MnB4OwogICAgcGFkZGluZzogOXB4IDE2cHg7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgZm9udC13ZWlnaHQ6IDgwMDsKICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjE1cyBlYXNlLCBib3gtc2hhZG93IDAuMTVzIGVhc2UsIGJhY2tncm91bmQtY29sb3IgMC4xNXMgZWFzZSwgYm9yZGVyLWNvbG9yIDAuMTVzIGVhc2U7CiAgfQoKICAuYWxwaGFiZXQtZ2FtZV9fYnRuOmFjdGl2ZSB7CiAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMXB4KTsKICB9CgogIC5hbHBoYWJldC1nYW1lX19idG4tLWdyYXkgewogICAgY29sb3I6ICMzMzQxNTU7CiAgICBiYWNrZ3JvdW5kOiAjZTJlOGYwOwogICAgYm9yZGVyLWNvbG9yOiAjY2JkNWUxOwogIH0KCiAgLmFscGhhYmV0LWdhbWVfX2J0bi0tZ3JheTpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiAjY2JkNWUxOwogIH0KCiAgLmFscGhhYmV0LWdhbWVfX2J0bi0taGludCB7CiAgICBjb2xvcjogIzkyNDAwZTsKICAgIGJhY2tncm91bmQ6IHZhcigtLWFnLWFtYmVyLXNvZnQpOwogICAgYm9yZGVyLWNvbG9yOiAjZmRlNjhhOwogIH0KCiAgLmFscGhhYmV0LWdhbWVfX2J0bi0taGludDpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiAjZmRlNjhhOwogIH0KCiAgLmFscGhhYmV0LWdhbWVfX2J0bi0tcmVzZXQgewogICAgY29sb3I6ICM0NzU0Njc7CiAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmOwogICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1hZy1saW5lLXN0cm9uZyk7CiAgfQoKICAuYWxwaGFiZXQtZ2FtZV9fYnRuLS1yZXNldDpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiAjZjhmYWZjOwogICAgYm9yZGVyLWNvbG9yOiAjOTRhM2I4OwogIH0KCiAgLmFscGhhYmV0LWdhbWVfX2J0bi0tdGVhY2hlciB7CiAgICBjb2xvcjogIzA2NWY0NjsKICAgIGJhY2tncm91bmQ6ICNlY2ZkZjM7CiAgICBib3JkZXItY29sb3I6ICNhN2YzZDA7CiAgfQoKICAuYWxwaGFiZXQtZ2FtZV9fYnRuLS10ZWFjaGVyOmhvdmVyIHsKICAgIGJhY2tncm91bmQ6ICNkMWZhZTU7CiAgfQoKICAuYWxwaGFiZXQtZ2FtZV9fdG9wYmFyLmlzLWd1aWRlLWhpZGRlbiB7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsKICB9CgogIC5hbHBoYWJldC1nYW1lX19zdGF0dXMuaXMtZ3VpZGUtaGlkZGVuLAogIC5hbHBoYWJldC1nYW1lX190ZWFjaGVyLmlzLWd1aWRlLWhpZGRlbiB7CiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7CiAgfQoKICAuYWxwaGFiZXQtZ2FtZV9fYnRuLS1wcmltYXJ5IHsKICAgIHdpZHRoOiAxMDAlOwogICAgY29sb3I6ICNmZmZmZmY7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1hZy1ibHVlKTsKICAgIGJvcmRlci1jb2xvcjogdmFyKC0tYWctYmx1ZSk7CiAgICBib3JkZXItcmFkaXVzOiAxNHB4OwogICAgYm94LXNoYWRvdzogMCAxMHB4IDE4cHggcmdiYSgzNywgOTksIDIzNSwgMC4yMik7CiAgfQoKICAuYWxwaGFiZXQtZ2FtZV9fYnRuLS1wcmltYXJ5OmhvdmVyIHsKICAgIGJhY2tncm91bmQ6ICMxZDRlZDg7CiAgfQoKICAuYWxwaGFiZXQtZ2FtZV9faW5zdHJ1Y3Rpb25zIHsKICAgIHdpZHRoOiAxMDAlOwogICAgbWF4LXdpZHRoOiA3ODBweDsKICAgIG1hcmdpbjogMCBhdXRvIDIycHg7CiAgICBwYWRkaW5nOiBjbGFtcCgxNnB4LCAzdncsIDI0cHgpOwogICAgYmFja2dyb3VuZDogI2VmZjZmZjsKICAgIGJvcmRlcjogMnB4IHNvbGlkICNiZmRiZmU7CiAgICBib3JkZXItcmFkaXVzOiAyMHB4OwogICAgY29sb3I6ICMxZTNhOGE7CiAgfQoKICAuYWxwaGFiZXQtZ2FtZV9faW5zdHJ1Y3Rpb25zLWhlYWQgewogICAgZGlzcGxheTogZmxleDsKICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0OwogICAgZ2FwOiAxMnB4OwogICAgbWFyZ2luLWJvdHRvbTogMTRweDsKICB9CgogIC5hbHBoYWJldC1nYW1lX19pbnN0cnVjdGlvbnMgaDMgewogICAgbWFyZ2luOiAwOwogICAgZm9udC1zaXplOiAyMnB4OwogICAgZm9udC13ZWlnaHQ6IDkwMDsKICAgIGNvbG9yOiAjMWU0MGFmOwogIH0KCiAgLmFscGhhYmV0LWdhbWVfX2Nsb3NlIHsKICAgIGJvcmRlcjogMDsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgY29sb3I6ICMyNTYzZWI7CiAgICBmb250LXdlaWdodDogOTAwOwogICAgcGFkZGluZzogNHB4OwogIH0KCiAgLmFscGhhYmV0LWdhbWVfX3N0ZXBzIHsKICAgIG1hcmdpbjogMDsKICAgIHBhZGRpbmctbGVmdDogMjJweDsKICB9CgogIC5hbHBoYWJldC1nYW1lX19zdGVwcyBsaSArIGxpIHsKICAgIG1hcmdpbi10b3A6IDEwcHg7CiAgfQoKICAuYWxwaGFiZXQtZ2FtZV9fY2FyZCB7CiAgICB3aWR0aDogMTAwJTsKICAgIGJhY2tncm91bmQ6IHZhcigtLWFnLWNhcmQpOwogICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tYWctbGluZSk7CiAgICBib3JkZXItcmFkaXVzOiAyNHB4OwogICAgYm94LXNoYWRvdzogdmFyKC0tYWctc2hhZG93KTsKICAgIHBhZGRpbmc6IGNsYW1wKDE0cHgsIDN2dywgMjZweCk7CiAgfQoKICAuYWxwaGFiZXQtZ2FtZV9fZ3JpZCB7CiAgICBkaXNwbGF5OiBncmlkOwogICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maXQsIG1pbm1heCg0MnB4LCAxZnIpKTsKICAgIGdhcDogOXB4OwogICAganVzdGlmeS1pdGVtczogY2VudGVyOwogICAgd2lkdGg6IDEwMCU7CiAgICBtYXJnaW4tYm90dG9tOiAyMnB4OwogIH0KCiAgQG1lZGlhIChtaW4td2lkdGg6IDkwMHB4KSB7CiAgICAuYWxwaGFiZXQtZ2FtZV9fZ3JpZCB7CiAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDExLCAxZnIpOwogICAgfQogIH0KCiAgLmFscGhhYmV0LWdhbWVfX3NlcGFyYXRvciB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGdhcDogMTRweDsKICAgIG1hcmdpbjogNHB4IDAgMTZweDsKICAgIGNvbG9yOiAjOTRhM2I4OwogICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgIGxldHRlci1zcGFjaW5nOiAwLjEyZW07CiAgICBmb250LXNpemU6IDEycHg7CiAgfQoKICAuYWxwaGFiZXQtZ2FtZV9fc2VwYXJhdG9yIHNwYW4gewogICAgaGVpZ2h0OiAxcHg7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1hZy1saW5lKTsKICAgIGZsZXg6IDE7CiAgfQoKICAuYWxwaGFiZXQtZ2FtZV9fcG9vbCB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC13cmFwOiB3cmFwOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBhbGlnbi1jb250ZW50OiBmbGV4LXN0YXJ0OwogICAgZ2FwOiA5cHg7CiAgICBtaW4taGVpZ2h0OiAxMTJweDsKICAgIHBhZGRpbmc6IDE0cHg7CiAgICBiYWNrZ3JvdW5kOiAjZjhmYWZjOwogICAgYm9yZGVyOiAxcHggZGFzaGVkICNjYmQ1ZTE7CiAgICBib3JkZXItcmFkaXVzOiAxOHB4OwogIH0KCiAgLmFscGhhYmV0LWdhbWVfX3RpbGUsCiAgLmFscGhhYmV0LWdhbWVfX3Nsb3QgewogICAgd2lkdGg6IDQ4cHg7CiAgICBoZWlnaHQ6IDQ4cHg7CiAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGJvcmRlci1yYWRpdXM6IDEycHg7CiAgICBmb250LXNpemU6IDIwcHg7CiAgICBmb250LXdlaWdodDogOTAwOwogICAgbGluZS1oZWlnaHQ6IDE7CiAgfQoKICAuYWxwaGFiZXQtZ2FtZV9fdGlsZSB7CiAgICBjb2xvcjogIzBmMTcyYTsKICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7CiAgICBib3JkZXI6IDJweCBzb2xpZCAjMTExODI3OwogICAgYm94LXNoYWRvdzogMCA0cHggMCAjMTExODI3OwogICAgY3Vyc29yOiBncmFiOwogICAgdG91Y2gtYWN0aW9uOiBub25lOwogICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMTJzIGVhc2UsIGJveC1zaGFkb3cgMC4xMnMgZWFzZSwgb3BhY2l0eSAwLjEycyBlYXNlLCBib3JkZXItY29sb3IgMC4xMnMgZWFzZTsKICB9CgogIC5hbHBoYWJldC1nYW1lX190aWxlOmhvdmVyIHsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTsKICB9CgogIC5hbHBoYWJldC1nYW1lX190aWxlOmFjdGl2ZSB7CiAgICBjdXJzb3I6IGdyYWJiaW5nOwogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDJweCk7CiAgICBib3gtc2hhZG93OiAwIDJweCAwICMxMTE4Mjc7CiAgfQoKICAuYWxwaGFiZXQtZ2FtZV9fdGlsZS5pcy1kcmFnZ2luZyB7CiAgICBvcGFjaXR5OiAwLjQ1OwogICAgdHJhbnNmb3JtOiBzY2FsZSgxLjA4KTsKICB9CgogIC5hbHBoYWJldC1nYW1lX19zbG90IHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGNvbG9yOiAjMTExODI3OwogICAgYmFja2dyb3VuZDogcmdiYSgyNDEsIDI0NSwgMjQ5LCAwLjc1KTsKICAgIGJvcmRlcjogMnB4IGRhc2hlZCAjY2JkNWUxOwogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZC1jb2xvciAwLjE4cyBlYXNlLCBib3JkZXItY29sb3IgMC4xOHMgZWFzZSwgYm94LXNoYWRvdyAwLjE4cyBlYXNlLCB0cmFuc2Zvcm0gMC4xOHMgZWFzZTsKICB9CgogIC5hbHBoYWJldC1nYW1lX19zbG90LmlzLWFjdGl2ZSB7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDM3LCA5OSwgMjM1LCAwLjA4KTsKICAgIGJvcmRlci1jb2xvcjogdmFyKC0tYWctYmx1ZSk7CiAgICBib3JkZXItc3R5bGU6IHNvbGlkOwogICAgYm94LXNoYWRvdzogMCAwIDAgNHB4IHJnYmEoMzcsIDk5LCAyMzUsIDAuMTApOwogIH0KCiAgLmFscGhhYmV0LWdhbWVfX3Nsb3QuaXMtZmlsbGVkIHsKICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7CiAgICBib3JkZXI6IDJweCBzb2xpZCAjMTExODI3OwogICAgYm94LXNoYWRvdzogMCA0cHggMCAjMTExODI3OwogIH0KCiAgLmFscGhhYmV0LWdhbWVfX3Nsb3QuaXMtZmlsbGVkOjphZnRlciB7CiAgICBjb250ZW50OiAi4pyTIjsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHJpZ2h0OiAtNnB4OwogICAgdG9wOiAtOHB4OwogICAgd2lkdGg6IDE4cHg7CiAgICBoZWlnaHQ6IDE4cHg7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgY29sb3I6ICNmZmZmZmY7CiAgICBiYWNrZ3JvdW5kOiB2YXIoLS1hZy1ncmVlbik7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgYm9yZGVyOiAycHggc29saWQgI2ZmZmZmZjsKICB9CgogIC5hbHBoYWJldC1nYW1lX19zbG90LmlzLXdyb25nIHsKICAgIGJhY2tncm91bmQ6IHZhcigtLWFnLXJlZC1zb2Z0KTsKICAgIGJvcmRlci1jb2xvcjogdmFyKC0tYWctcmVkKTsKICAgIGFuaW1hdGlvbjogYWxwaGFiZXQtc2hha2UgMC4yNnMgbGluZWFyOwogIH0KCiAgLmFscGhhYmV0LWdhbWVfX3Nsb3QuaXMtcG9wIHsKICAgIGFuaW1hdGlvbjogYWxwaGFiZXQtcG9wIDAuMjhzIGVhc2Utb3V0OwogIH0KCiAgLmFscGhhYmV0LWdhbWVfX3RpbGUuaXMtaGludCwKICAuYWxwaGFiZXQtZ2FtZV9fc2xvdC5pcy1oaW50IHsKICAgIGJvcmRlci1jb2xvcjogdmFyKC0tYWctYmx1ZSkgIWltcG9ydGFudDsKICAgIGFuaW1hdGlvbjogYWxwaGFiZXQtaGludCAxLjFzIGVhc2UtaW4tb3V0IGluZmluaXRlOwogICAgei1pbmRleDogNDsKICB9CgogIC5hbHBoYWJldC1nYW1lX190ZWFjaGVyIHsKICAgIHdpZHRoOiAxMDAlOwogICAgbWF4LXdpZHRoOiA2NTBweDsKICAgIGRpc3BsYXk6IGdyaWQ7CiAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IGF1dG8gMWZyOwogICAgZ2FwOiAxNHB4OwogICAgYWxpZ24taXRlbXM6IGVuZDsKICAgIG1hcmdpbjogMjRweCBhdXRvIDA7CiAgfQoKICAuYWxwaGFiZXQtZ2FtZV9fYXZhdGFyIHsKICAgIHdpZHRoOiA3NHB4OwogICAgaGVpZ2h0OiA3NHB4OwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmOwogICAgYm9yZGVyOiA0cHggc29saWQgI2ZmZmZmZjsKICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgYm94LXNoYWRvdzogMCA4cHggMThweCByZ2JhKDE1LCAyMywgNDIsIDAuMTIpOwogIH0KCiAgLmFscGhhYmV0LWdhbWVfX2F2YXRhciBpbWcgewogICAgd2lkdGg6IDEwMCU7CiAgICBoZWlnaHQ6IDEwMCU7CiAgICBkaXNwbGF5OiBibG9jazsKICAgIG9iamVjdC1maXQ6IGNvbnRhaW47CiAgfQoKICAuYWxwaGFiZXQtZ2FtZV9fYnViYmxlIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7CiAgICBib3JkZXI6IDFweCBzb2xpZCB2YXIoLS1hZy1saW5lKTsKICAgIGJvcmRlci1yYWRpdXM6IDE4cHg7CiAgICBwYWRkaW5nOiAxNHB4IDE2cHg7CiAgICBib3gtc2hhZG93OiAwIDhweCAxOHB4IHJnYmEoMTUsIDIzLCA0MiwgMC4wOCk7CiAgfQoKICAuYWxwaGFiZXQtZ2FtZV9fYnViYmxlOjphZnRlciB7CiAgICBjb250ZW50OiAiIjsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGxlZnQ6IDE4cHg7CiAgICBib3R0b206IC05cHg7CiAgICB3aWR0aDogMThweDsKICAgIGhlaWdodDogMThweDsKICAgIGJhY2tncm91bmQ6ICNmZmZmZmY7CiAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCB2YXIoLS1hZy1saW5lKTsKICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCB2YXIoLS1hZy1saW5lKTsKICAgIHRyYW5zZm9ybTogcm90YXRlKDQ1ZGVnKTsKICB9CgogIC5hbHBoYWJldC1nYW1lX19idWJibGUgcCB7CiAgICBtYXJnaW46IDA7CiAgICBjb2xvcjogIzMzNDE1NTsKICAgIGZvbnQtc2l6ZTogMTZweDsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgfQoKICAuYWxwaGFiZXQtZ2FtZV9fbW9kYWwgewogICAgcG9zaXRpb246IGZpeGVkOwogICAgaW5zZXQ6IDA7CiAgICB6LWluZGV4OiA5OTk5OTk7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgcGFkZGluZzogMThweDsKICAgIGJhY2tncm91bmQ6IHJnYmEoMTUsIDIzLCA0MiwgMC43OCk7CiAgfQoKICAuYWxwaGFiZXQtZ2FtZV9fbW9kYWwtY2FyZCB7CiAgICB3aWR0aDogbWluKDEwMCUsIDM4MHB4KTsKICAgIHBhZGRpbmc6IDI4cHg7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBiYWNrZ3JvdW5kOiAjZmZmZmZmOwogICAgYm9yZGVyLXJhZGl1czogMjZweDsKICAgIGJveC1zaGFkb3c6IDAgMjhweCA2MHB4IHJnYmEoMTUsIDIzLCA0MiwgMC4yOCk7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTQpOwogICAgb3BhY2l0eTogMDsKICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjIycyBlYXNlLCBvcGFjaXR5IDAuMjJzIGVhc2U7CiAgfQoKICAuYWxwaGFiZXQtZ2FtZV9fbW9kYWwtY2FyZC5pcy12aXNpYmxlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMSk7CiAgICBvcGFjaXR5OiAxOwogIH0KCiAgLmFscGhhYmV0LWdhbWVfX3Ryb3BoeSB7CiAgICBmb250LXNpemU6IDU4cHg7CiAgICBtYXJnaW4tYm90dG9tOiAxMnB4OwogIH0KCiAgLmFscGhhYmV0LWdhbWVfX21vZGFsLWNhcmQgaDIgewogICAgbWFyZ2luOiAwIDAgOHB4OwogICAgZm9udC1zaXplOiAzMHB4OwogICAgZm9udC13ZWlnaHQ6IDkwMDsKICAgIGNvbG9yOiAjMGYxNzJhOwogIH0KCiAgLmFscGhhYmV0LWdhbWVfX21vZGFsLWNhcmQgcCB7CiAgICBtYXJnaW46IDAgMCAyMHB4OwogICAgY29sb3I6IHZhcigtLWFnLW11dGVkKTsKICB9CgogIC5hbHBoYWJldC1nYW1lX19jb25mZXR0aSB7CiAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICB3aWR0aDogOHB4OwogICAgaGVpZ2h0OiA4cHg7CiAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHotaW5kZXg6IDEwMDAwMDA7CiAgfQoKICBAa2V5ZnJhbWVzIGFscGhhYmV0LWhpbnQgewogICAgMCUsIDEwMCUgewogICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOwogICAgICBib3gtc2hhZG93OiAwIDAgMCAwIHJnYmEoMzcsIDk5LCAyMzUsIDAuMzUpOwogICAgfQogICAgNTAlIHsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjA4KTsKICAgICAgYm94LXNoYWRvdzogMCAwIDAgMTBweCByZ2JhKDM3LCA5OSwgMjM1LCAwKTsKICAgIH0KICB9CgogIEBrZXlmcmFtZXMgYWxwaGFiZXQtc2hha2UgewogICAgMCUsIDEwMCUgeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7IH0KICAgIDI1JSB7IHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNHB4KTsgfQogICAgNzUlIHsgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDRweCk7IH0KICB9CgogIEBrZXlmcmFtZXMgYWxwaGFiZXQtcG9wIHsKICAgIDAlIHsgdHJhbnNmb3JtOiBzY2FsZSgxKTsgfQogICAgNTAlIHsgdHJhbnNmb3JtOiBzY2FsZSgxLjEyKTsgfQogICAgMTAwJSB7IHRyYW5zZm9ybTogc2NhbGUoMSk7IH0KICB9CgogIEBtZWRpYSAobWF4LXdpZHRoOiA3NjBweCkgewogICAgLmFscGhhYmV0LWdhbWVfX3RvcGJhciB7CiAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOwogICAgfQogIH0KCiAgQG1lZGlhIChtYXgtd2lkdGg6IDY0MHB4KSB7CiAgICAjYWxwaGFiZXQtZ2FtZS13cmFwcGVyIHsKICAgICAgcGFkZGluZzogMTJweDsKICAgICAgYm9yZGVyLXJhZGl1czogMThweDsKICAgIH0KCiAgICAuYWxwaGFiZXQtZ2FtZV9faGVhZGVyIHsKICAgICAgZ2FwOiAxMnB4OwogICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgfQoKICAgIC5hbHBoYWJldC1nYW1lX19jYXJkIHsKICAgICAgcGFkZGluZzogMTJweDsKICAgICAgYm9yZGVyLXJhZGl1czogMThweDsKICAgIH0KCiAgICAuYWxwaGFiZXQtZ2FtZV9fYWN0aW9ucyB7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBkaXNwbGF5OiBncmlkOwogICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsKICAgIH0KCiAgICAuYWxwaGFiZXQtZ2FtZV9fYnRuIHsKICAgICAgd2lkdGg6IDEwMCU7CiAgICB9CgogICAgLmFscGhhYmV0LWdhbWVfX2dyaWQgewogICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDM2cHgsIDFmcikpOwogICAgICBnYXA6IDdweDsKICAgIH0KCiAgICAuYWxwaGFiZXQtZ2FtZV9fdGlsZSwKICAgIC5hbHBoYWJldC1nYW1lX19zbG90IHsKICAgICAgd2lkdGg6IDM5cHg7CiAgICAgIGhlaWdodDogMzlweDsKICAgICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgICAgZm9udC1zaXplOiAxN3B4OwogICAgfQoKICAgIC5hbHBoYWJldC1nYW1lX19wb29sIHsKICAgICAgbWluLWhlaWdodDogOTZweDsKICAgICAgcGFkZGluZzogMTBweDsKICAgICAgZ2FwOiA3cHg7CiAgICB9CgogICAgLmFscGhhYmV0LWdhbWVfX3RlYWNoZXIgewogICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDU0cHggMWZyOwogICAgICBnYXA6IDEwcHg7CiAgICAgIG1hcmdpbi10b3A6IDE4cHg7CiAgICB9CgogICAgLmFscGhhYmV0LWdhbWVfX2F2YXRhciB7CiAgICAgIHdpZHRoOiA1OHB4OwogICAgICBoZWlnaHQ6IDU4cHg7CiAgICB9CgogICAgLmFscGhhYmV0LWdhbWVfX2J1YmJsZSBwIHsKICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgfQogIH0KPC9zdHlsZT4KCjxzY3JpcHQ+CiAgKGZ1bmN0aW9uICgpIHsKICAgICd1c2Ugc3RyaWN0JzsKCiAgICB2YXIgcm9vdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhbHBoYWJldC1nYW1lLXdyYXBwZXInKTsKICAgIGlmICghcm9vdCkgcmV0dXJuOwoKICAgIHZhciBhbHBoYWJldCA9IFsnQScsICfEgicsICfDgicsICdCJywgJ0MnLCAnRCcsICdFJywgJ0YnLCAnRycsICdIJywgJ0knLCAnw44nLCAnSicsICdLJywgJ0wnLCAnTScsICdOJywgJ08nLCAnUCcsICdRJywgJ1InLCAnUycsICfImCcsICdUJywgJ8iaJywgJ1UnLCAnVicsICdXJywgJ1gnLCAnWScsICdaJ107CiAgICB2YXIgY3VycmVudEluZGV4ID0gMDsKICAgIHZhciBoaW50TGV2ZWwgPSAwOwogICAgdmFyIGhpbnRUaW1lb3V0ID0gbnVsbDsKICAgIHZhciB0aWxlc0J5TGV0dGVyID0gbmV3IE1hcCgpOwoKICAgIHZhciB0YXJnZXRHcmlkID0gcm9vdC5xdWVyeVNlbGVjdG9yKCcjdGFyZ2V0LWdyaWQnKTsKICAgIHZhciBsZXR0ZXJQb29sID0gcm9vdC5xdWVyeVNlbGVjdG9yKCcjbGV0dGVyLXBvb2wnKTsKICAgIHZhciB0ZWFjaGVyTXNnID0gcm9vdC5xdWVyeVNlbGVjdG9yKCcjdGVhY2hlci1tc2cnKTsKICAgIHZhciBpbnN0cnVjdGlvbnNQYW5lbCA9IHJvb3QucXVlcnlTZWxlY3RvcignI2luc3RydWN0aW9ucy1wYW5lbCcpOwogICAgdmFyIHZpY3RvcnlNb2RhbCA9IHJvb3QucXVlcnlTZWxlY3RvcignI3ZpY3RvcnktbW9kYWwnKTsKICAgIHZhciBtb2RhbENvbnRlbnQgPSByb290LnF1ZXJ5U2VsZWN0b3IoJyNtb2RhbC1jb250ZW50Jyk7CiAgICB2YXIgY3VycmVudExldHRlckNoaXAgPSByb290LnF1ZXJ5U2VsZWN0b3IoJyNjdXJyZW50LWxldHRlci1jaGlwJyk7CiAgICB2YXIgcHJvZ3Jlc3NUZXh0ID0gcm9vdC5xdWVyeVNlbGVjdG9yKCcjcHJvZ3Jlc3MtdGV4dCcpOwogICAgdmFyIHByb2dyZXNzRmlsbCA9IHJvb3QucXVlcnlTZWxlY3RvcignI3Byb2dyZXNzLWZpbGwnKTsKICAgIHZhciBndWlkZVZpc2libGUgPSB0cnVlOwogICAgdmFyIHRvcGJhciA9IHJvb3QucXVlcnlTZWxlY3RvcignLmFscGhhYmV0LWdhbWVfX3RvcGJhcicpOwogICAgdmFyIHN0YXR1c0JveCA9IHJvb3QucXVlcnlTZWxlY3RvcignLmFscGhhYmV0LWdhbWVfX3N0YXR1cycpOwogICAgdmFyIHRlYWNoZXJCb3ggPSByb290LnF1ZXJ5U2VsZWN0b3IoJy5hbHBoYWJldC1nYW1lX190ZWFjaGVyJyk7CiAgICB2YXIgdG9nZ2xlR3VpZGVCdXR0b24gPSByb290LnF1ZXJ5U2VsZWN0b3IoJ1tkYXRhLWFjdGlvbj0idG9nZ2xlLWd1aWRlIl0nKTsKCiAgICB2YXIgZW5jb3VyYWdlbWVudCA9IFsKICAgICAgJ0JyYXZvIScsCiAgICAgICdQZXJmZWN0IScsCiAgICAgICdByJlhIGVzdGUhJywKICAgICAgJ0ZvYXJ0ZSBiaW5lIScsCiAgICAgICdFeGNlbGVudCEnLAogICAgICAnTWludW5hdCEnCiAgICBdOwoKICAgIHZhciBrZXlib2FyZE1hcCA9IHsKICAgICAgJ0EnOiAnQScsCiAgICAgICfEgic6ICfEgicsCiAgICAgICfDgic6ICfDgicsCiAgICAgICdCJzogJ0InLAogICAgICAnQyc6ICdDJywKICAgICAgJ0QnOiAnRCcsCiAgICAgICdFJzogJ0UnLAogICAgICAnRic6ICdGJywKICAgICAgJ0cnOiAnRycsCiAgICAgICdIJzogJ0gnLAogICAgICAnSSc6ICdJJywKICAgICAgJ8OOJzogJ8OOJywKICAgICAgJ0onOiAnSicsCiAgICAgICdLJzogJ0snLAogICAgICAnTCc6ICdMJywKICAgICAgJ00nOiAnTScsCiAgICAgICdOJzogJ04nLAogICAgICAnTyc6ICdPJywKICAgICAgJ1AnOiAnUCcsCiAgICAgICdRJzogJ1EnLAogICAgICAnUic6ICdSJywKICAgICAgJ1MnOiAnUycsCiAgICAgICfImCc6ICfImCcsCiAgICAgICfFnic6ICfImCcsCiAgICAgICdUJzogJ1QnLAogICAgICAnyJonOiAnyJonLAogICAgICAnxaInOiAnyJonLAogICAgICAnVSc6ICdVJywKICAgICAgJ1YnOiAnVicsCiAgICAgICdXJzogJ1cnLAogICAgICAnWCc6ICdYJywKICAgICAgJ1knOiAnWScsCiAgICAgICdaJzogJ1onCiAgICB9OwoKICAgIGZ1bmN0aW9uIHNodWZmbGUobGlzdCkgewogICAgICB2YXIgYXJyYXkgPSBsaXN0LnNsaWNlKCk7CiAgICAgIGZvciAodmFyIGkgPSBhcnJheS5sZW5ndGggLSAxOyBpID4gMDsgaS0tKSB7CiAgICAgICAgdmFyIGogPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAoaSArIDEpKTsKICAgICAgICB2YXIgdGVtcCA9IGFycmF5W2ldOwogICAgICAgIGFycmF5W2ldID0gYXJyYXlbal07CiAgICAgICAgYXJyYXlbal0gPSB0ZW1wOwogICAgICB9CiAgICAgIHJldHVybiBhcnJheTsKICAgIH0KCiAgICBmdW5jdGlvbiBub3JtYWxpemVMZXR0ZXIodmFsdWUpIHsKICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuICcnOwogICAgICB2YXIgbm9ybWFsaXplZCA9IFN0cmluZyh2YWx1ZSkudHJpbSgpLnRvTG9jYWxlVXBwZXJDYXNlKCdyby1STycpOwogICAgICByZXR1cm4ga2V5Ym9hcmRNYXBbbm9ybWFsaXplZF0gfHwgbm9ybWFsaXplZDsKICAgIH0KCiAgICBmdW5jdGlvbiBzZXRUZWFjaGVyTWVzc2FnZShtZXNzYWdlKSB7CiAgICAgIHRlYWNoZXJNc2cudGV4dENvbnRlbnQgPSBtZXNzYWdlOwogICAgfQoKICAgIGZ1bmN0aW9uIHNldEd1aWRlVmlzaWJpbGl0eSh2aXNpYmxlKSB7CiAgICAgIGd1aWRlVmlzaWJsZSA9IHZpc2libGU7CgogICAgICBpZiAoc3RhdHVzQm94KSB7CiAgICAgICAgc3RhdHVzQm94LmNsYXNzTGlzdC50b2dnbGUoJ2lzLWd1aWRlLWhpZGRlbicsICF2aXNpYmxlKTsKICAgICAgfQoKICAgICAgaWYgKHRlYWNoZXJCb3gpIHsKICAgICAgICB0ZWFjaGVyQm94LmNsYXNzTGlzdC50b2dnbGUoJ2lzLWd1aWRlLWhpZGRlbicsICF2aXNpYmxlKTsKICAgICAgfQoKICAgICAgaWYgKHRvcGJhcikgewogICAgICAgIHRvcGJhci5jbGFzc0xpc3QudG9nZ2xlKCdpcy1ndWlkZS1oaWRkZW4nLCAhdmlzaWJsZSk7CiAgICAgIH0KCiAgICAgIGlmICh0b2dnbGVHdWlkZUJ1dHRvbikgewogICAgICAgIHRvZ2dsZUd1aWRlQnV0dG9uLnNldEF0dHJpYnV0ZSgnYXJpYS1wcmVzc2VkJywgdmlzaWJsZSA/ICd0cnVlJyA6ICdmYWxzZScpOwogICAgICAgIHRvZ2dsZUd1aWRlQnV0dG9uLmlubmVySFRNTCA9IHZpc2libGUKICAgICAgICAgID8gJzxzcGFuIGFyaWEtaGlkZGVuPSJ0cnVlIj7wn5mIPC9zcGFuPiBBc2N1bmRlIGdoaWRhanVsJwogICAgICAgICAgOiAnPHNwYW4gYXJpYS1oaWRkZW49InRydWUiPvCfkYHvuI88L3NwYW4+IEFyYXTEgyBnaGlkYWp1bCc7CiAgICAgIH0KICAgIH0KCiAgICBmdW5jdGlvbiB0b2dnbGVJbnN0cnVjdGlvbnMoKSB7CiAgICAgIGluc3RydWN0aW9uc1BhbmVsLmNsYXNzTGlzdC50b2dnbGUoJ2lzLWhpZGRlbicpOwogICAgfQoKICAgIGZ1bmN0aW9uIGluaXRHYW1lKCkgewogICAgICBjdXJyZW50SW5kZXggPSAwOwogICAgICBoaW50TGV2ZWwgPSAwOwogICAgICB0aWxlc0J5TGV0dGVyLmNsZWFyKCk7CiAgICAgIGNsZWFySGludCgpOwogICAgICB0YXJnZXRHcmlkLmlubmVySFRNTCA9ICcnOwogICAgICBsZXR0ZXJQb29sLmlubmVySFRNTCA9ICcnOwoKICAgICAgYWxwaGFiZXQuZm9yRWFjaChmdW5jdGlvbiAoXywgaW5kZXgpIHsKICAgICAgICB2YXIgc2xvdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICAgIHNsb3QuY2xhc3NOYW1lID0gJ2FscGhhYmV0LWdhbWVfX3Nsb3QnICsgKGluZGV4ID09PSAwID8gJyBpcy1hY3RpdmUnIDogJycpOwogICAgICAgIHNsb3QuZGF0YXNldC5pbmRleCA9IFN0cmluZyhpbmRleCk7CiAgICAgICAgc2xvdC5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCAnUG96acibaWEgJyArIChpbmRleCArIDEpKTsKCiAgICAgICAgc2xvdC5hZGRFdmVudExpc3RlbmVyKCdkcmFnb3ZlcicsIGZ1bmN0aW9uIChldmVudCkgewogICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICB9KTsKCiAgICAgICAgc2xvdC5hZGRFdmVudExpc3RlbmVyKCdkcm9wJywgZnVuY3Rpb24gKGV2ZW50KSB7CiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgdmFyIGxldHRlciA9IGV2ZW50LmRhdGFUcmFuc2Zlci5nZXREYXRhKCd0ZXh0L3BsYWluJyk7CiAgICAgICAgICBhdHRlbXB0UGxhY2VtZW50KGxldHRlciwgaW5kZXgsIHNsb3QpOwogICAgICAgIH0pOwoKICAgICAgICB0YXJnZXRHcmlkLmFwcGVuZENoaWxkKHNsb3QpOwogICAgICB9KTsKCiAgICAgIHNodWZmbGUoYWxwaGFiZXQpLmZvckVhY2goZnVuY3Rpb24gKGxldHRlcikgewogICAgICAgIGxldHRlclBvb2wuYXBwZW5kQ2hpbGQoY3JlYXRlVGlsZShsZXR0ZXIpKTsKICAgICAgfSk7CgogICAgICB1cGRhdGVQcm9ncmVzcygpOwogICAgICBzZXRHdWlkZVZpc2liaWxpdHkoZ3VpZGVWaXNpYmxlKTsKICAgICAgc2V0VGVhY2hlck1lc3NhZ2UoJ0J1bsSDISBIYWkgc8SDIHB1bmVtIGFsZmFiZXR1bCByb23Dom5lc2Mgw65uIG9yZGluZS4gw45uY2VwZW0gY3UgQSEnKTsKICAgICAgaGlkZVZpY3RvcnkoKTsKCiAgICAgIHRyeSB7CiAgICAgICAgcm9vdC5mb2N1cyh7IHByZXZlbnRTY3JvbGw6IHRydWUgfSk7CiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgcm9vdC5mb2N1cygpOwogICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gY3JlYXRlVGlsZShsZXR0ZXIpIHsKICAgICAgdmFyIHRpbGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdidXR0b24nKTsKICAgICAgdGlsZS50eXBlID0gJ2J1dHRvbic7CiAgICAgIHRpbGUuY2xhc3NOYW1lID0gJ2FscGhhYmV0LWdhbWVfX3RpbGUnOwogICAgICB0aWxlLnRleHRDb250ZW50ID0gbGV0dGVyOwogICAgICB0aWxlLmRyYWdnYWJsZSA9IHRydWU7CiAgICAgIHRpbGUuZGF0YXNldC5sZXR0ZXIgPSBsZXR0ZXI7CiAgICAgIHRpbGUuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgJ0xpdGVyYSAnICsgbGV0dGVyKTsKCiAgICAgIHRpbGVzQnlMZXR0ZXIuc2V0KGxldHRlciwgdGlsZSk7CgogICAgICB0aWxlLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWdzdGFydCcsIGZ1bmN0aW9uIChldmVudCkgewogICAgICAgIGNsZWFySGludCgpOwogICAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5zZXREYXRhKCd0ZXh0L3BsYWluJywgbGV0dGVyKTsKICAgICAgICBldmVudC5kYXRhVHJhbnNmZXIuZWZmZWN0QWxsb3dlZCA9ICdtb3ZlJzsKICAgICAgICB0aWxlLmNsYXNzTGlzdC5hZGQoJ2lzLWRyYWdnaW5nJyk7CiAgICAgIH0pOwoKICAgICAgdGlsZS5hZGRFdmVudExpc3RlbmVyKCdkcmFnZW5kJywgZnVuY3Rpb24gKCkgewogICAgICAgIHRpbGUuY2xhc3NMaXN0LnJlbW92ZSgnaXMtZHJhZ2dpbmcnKTsKICAgICAgfSk7CgogICAgICB0aWxlLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24gKCkgewogICAgICAgIHZhciBzbG90ID0gdGFyZ2V0R3JpZC5jaGlsZHJlbltjdXJyZW50SW5kZXhdOwogICAgICAgIGF0dGVtcHRQbGFjZW1lbnQobGV0dGVyLCBjdXJyZW50SW5kZXgsIHNsb3QpOwogICAgICB9KTsKCiAgICAgIHRpbGUuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hzdGFydCcsIGhhbmRsZVRvdWNoU3RhcnQsIHsgcGFzc2l2ZTogZmFsc2UgfSk7CgogICAgICByZXR1cm4gdGlsZTsKICAgIH0KCiAgICBmdW5jdGlvbiBhdHRlbXB0UGxhY2VtZW50KHZhbHVlLCB0YXJnZXRJbmRleCwgc2xvdCkgewogICAgICB2YXIgbGV0dGVyID0gbm9ybWFsaXplTGV0dGVyKHZhbHVlKTsKICAgICAgY2xlYXJIaW50KCk7CiAgICAgIGhpbnRMZXZlbCA9IDA7CgogICAgICBpZiAoIXNsb3QgfHwgY3VycmVudEluZGV4ID49IGFscGhhYmV0Lmxlbmd0aCkgcmV0dXJuOwoKICAgICAgaWYgKGxldHRlciA9PT0gYWxwaGFiZXRbY3VycmVudEluZGV4XSAmJiB0YXJnZXRJbmRleCA9PT0gY3VycmVudEluZGV4KSB7CiAgICAgICAgcGxhY2VMZXR0ZXIobGV0dGVyLCBzbG90KTsKICAgICAgICBjdXJyZW50SW5kZXgrKzsKICAgICAgICB1cGRhdGVBY3RpdmVTbG90KCk7CiAgICAgICAgdXBkYXRlUHJvZ3Jlc3MoKTsKCiAgICAgICAgaWYgKGN1cnJlbnRJbmRleCA8IGFscGhhYmV0Lmxlbmd0aCkgewogICAgICAgICAgdmFyIG5leHRMZXR0ZXIgPSBhbHBoYWJldFtjdXJyZW50SW5kZXhdOwogICAgICAgICAgdmFyIHByYWlzZSA9IGVuY291cmFnZW1lbnRbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogZW5jb3VyYWdlbWVudC5sZW5ndGgpXTsKICAgICAgICAgIHNldFRlYWNoZXJNZXNzYWdlKHByYWlzZSArICcgQWN1bSBjYXV0xIMgbGl0ZXJhICcgKyBuZXh0TGV0dGVyICsgJy4nKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgc2hvd1ZpY3RvcnkoKTsKICAgICAgICB9CgogICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgaWYgKGxldHRlciAhPT0gYWxwaGFiZXRbY3VycmVudEluZGV4XSkgewogICAgICAgIHNldFRlYWNoZXJNZXNzYWdlKCdBcHJvYXBlISBBY3VtIGF2ZW0gbmV2b2llIGRlIGxpdGVyYSAnICsgYWxwaGFiZXRbY3VycmVudEluZGV4XSArICcuJyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc2V0VGVhY2hlck1lc3NhZ2UoJ0xpdGVyYSBlc3RlIGNvcmVjdMSDLCBkYXIgbWVyZ2Ugw65uIGPEg3N1yJthIGFsYmFzdHLEgy4nKTsKICAgICAgfQoKICAgICAgbWFya1dyb25nKHNsb3QpOwogICAgfQoKICAgIGZ1bmN0aW9uIHBsYWNlTGV0dGVyKGxldHRlciwgc2xvdCkgewogICAgICB2YXIgdGlsZSA9IHRpbGVzQnlMZXR0ZXIuZ2V0KGxldHRlcik7CiAgICAgIGlmICh0aWxlKSB7CiAgICAgICAgdGlsZS5yZW1vdmUoKTsKICAgICAgICB0aWxlc0J5TGV0dGVyLmRlbGV0ZShsZXR0ZXIpOwogICAgICB9CgogICAgICBzbG90LnRleHRDb250ZW50ID0gbGV0dGVyOwogICAgICBzbG90LmNsYXNzTGlzdC5hZGQoJ2lzLWZpbGxlZCcsICdpcy1wb3AnKTsKICAgICAgc2xvdC5jbGFzc0xpc3QucmVtb3ZlKCdpcy1hY3RpdmUnKTsKICAgICAgc2xvdC5zZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnLCAnTGl0ZXJhICcgKyBsZXR0ZXIgKyAnIGVzdGUgYciZZXphdMSDIGNvcmVjdCcpOwoKICAgICAgd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgIHNsb3QuY2xhc3NMaXN0LnJlbW92ZSgnaXMtcG9wJyk7CiAgICAgIH0sIDMyMCk7CgogICAgICBjb25mZXR0aUVmZmVjdChzbG90KTsKICAgIH0KCiAgICBmdW5jdGlvbiB1cGRhdGVBY3RpdmVTbG90KCkgewogICAgICBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKHRhcmdldEdyaWQuY2hpbGRyZW4sIGZ1bmN0aW9uIChzbG90KSB7CiAgICAgICAgc2xvdC5jbGFzc0xpc3QucmVtb3ZlKCdpcy1hY3RpdmUnKTsKICAgICAgfSk7CgogICAgICBpZiAoY3VycmVudEluZGV4IDwgYWxwaGFiZXQubGVuZ3RoKSB7CiAgICAgICAgdmFyIGFjdGl2ZVNsb3QgPSB0YXJnZXRHcmlkLmNoaWxkcmVuW2N1cnJlbnRJbmRleF07CiAgICAgICAgYWN0aXZlU2xvdC5jbGFzc0xpc3QuYWRkKCdpcy1hY3RpdmUnKTsKICAgICAgICBhY3RpdmVTbG90LnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICdzbW9vdGgnLCBibG9jazogJ25lYXJlc3QnLCBpbmxpbmU6ICduZWFyZXN0JyB9KTsKICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIHVwZGF0ZVByb2dyZXNzKCkgewogICAgICB2YXIgdG90YWwgPSBhbHBoYWJldC5sZW5ndGg7CiAgICAgIHZhciBwZXJjZW50ID0gTWF0aC5yb3VuZCgoY3VycmVudEluZGV4IC8gdG90YWwpICogMTAwKTsKICAgICAgcHJvZ3Jlc3NUZXh0LnRleHRDb250ZW50ID0gY3VycmVudEluZGV4ICsgJyAvICcgKyB0b3RhbDsKICAgICAgcHJvZ3Jlc3NGaWxsLnN0eWxlLndpZHRoID0gcGVyY2VudCArICclJzsKICAgICAgY3VycmVudExldHRlckNoaXAudGV4dENvbnRlbnQgPSBjdXJyZW50SW5kZXggPCB0b3RhbCA/IGFscGhhYmV0W2N1cnJlbnRJbmRleF0gOiAn4pyTJzsKICAgIH0KCiAgICBmdW5jdGlvbiBtYXJrV3Jvbmcoc2xvdCkgewogICAgICBzbG90LmNsYXNzTGlzdC5hZGQoJ2lzLXdyb25nJyk7CiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICBzbG90LmNsYXNzTGlzdC5yZW1vdmUoJ2lzLXdyb25nJyk7CiAgICAgIH0sIDM2MCk7CiAgICB9CgogICAgZnVuY3Rpb24gc2hvd0hpbnQoKSB7CiAgICAgIGlmIChjdXJyZW50SW5kZXggPj0gYWxwaGFiZXQubGVuZ3RoKSByZXR1cm47CgogICAgICB2YXIgbmVlZGVkTGV0dGVyID0gYWxwaGFiZXRbY3VycmVudEluZGV4XTsKICAgICAgdmFyIHRpbGUgPSB0aWxlc0J5TGV0dGVyLmdldChuZWVkZWRMZXR0ZXIpOwogICAgICB2YXIgc2xvdCA9IHRhcmdldEdyaWQuY2hpbGRyZW5bY3VycmVudEluZGV4XTsKICAgICAgaWYgKCF0aWxlIHx8ICFzbG90KSByZXR1cm47CgogICAgICBoaW50TGV2ZWwrKzsKICAgICAgY2xlYXJIaW50KGZhbHNlKTsKCiAgICAgIGlmIChoaW50TGV2ZWwgPT09IDEpIHsKICAgICAgICB0aWxlLmNsYXNzTGlzdC5hZGQoJ2lzLWhpbnQnKTsKICAgICAgICBzbG90LmNsYXNzTGlzdC5hZGQoJ2lzLWhpbnQnKTsKICAgICAgICBzZXRUZWFjaGVyTWVzc2FnZSgnVWl0xIMtdGUgbGEgbGl0ZXJhIGNhcmUgbHVtaW5lYXrEgy4gQWNlZWEgZXN0ZSB1cm3Eg3RvYXJlYS4nKTsKICAgICAgICBoaW50VGltZW91dCA9IHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICAgIGNsZWFySGludChmYWxzZSk7CiAgICAgICAgfSwgMzAwMCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CgogICAgICBpZiAoaGludExldmVsID09PSAyKSB7CiAgICAgICAgdGlsZS5jbGFzc0xpc3QuYWRkKCdpcy1oaW50Jyk7CiAgICAgICAgc2xvdC5jbGFzc0xpc3QuYWRkKCdpcy1oaW50Jyk7CiAgICAgICAgc2V0VGVhY2hlck1lc3NhZ2UoJ0NhdXTEgyBsaXRlcmEgJyArIG5lZWRlZExldHRlciArICcgyJlpIHB1bmUtbyDDrm4gY8SDc3XIm2EgYWxiYXN0csSDLicpOwogICAgICAgIGhpbnRUaW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24gKCkgewogICAgICAgICAgY2xlYXJIaW50KGZhbHNlKTsKICAgICAgICB9LCAzMDAwKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KCiAgICAgIGhpbnRMZXZlbCA9IDA7CiAgICAgIGF0dGVtcHRQbGFjZW1lbnQobmVlZGVkTGV0dGVyLCBjdXJyZW50SW5kZXgsIHNsb3QpOwogICAgfQoKICAgIGZ1bmN0aW9uIGNsZWFySGludChyZXNldExldmVsKSB7CiAgICAgIGlmIChoaW50VGltZW91dCkgewogICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQoaGludFRpbWVvdXQpOwogICAgICAgIGhpbnRUaW1lb3V0ID0gbnVsbDsKICAgICAgfQoKICAgICAgQXJyYXkucHJvdG90eXBlLmZvckVhY2guY2FsbChyb290LnF1ZXJ5U2VsZWN0b3JBbGwoJy5pcy1oaW50JyksIGZ1bmN0aW9uIChlbGVtZW50KSB7CiAgICAgICAgZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKCdpcy1oaW50Jyk7CiAgICAgIH0pOwoKICAgICAgaWYgKHJlc2V0TGV2ZWwgIT09IGZhbHNlKSB7CiAgICAgICAgaGludExldmVsID0gMDsKICAgICAgfQogICAgfQoKICAgIGZ1bmN0aW9uIHNob3dWaWN0b3J5KCkgewogICAgICB1cGRhdGVQcm9ncmVzcygpOwogICAgICBzZXRUZWFjaGVyTWVzc2FnZSgnQWkgcmV1yJlpdCEgVG9hdGUgbGl0ZXJlbGUgc3VudCBsYSBsb2N1bCBsb3IuJyk7CiAgICAgIHZpY3RvcnlNb2RhbC5jbGFzc0xpc3QucmVtb3ZlKCdpcy1oaWRkZW4nKTsKCiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsKICAgICAgICBtb2RhbENvbnRlbnQuY2xhc3NMaXN0LmFkZCgnaXMtdmlzaWJsZScpOwogICAgICB9LCAyMCk7CiAgICB9CgogICAgZnVuY3Rpb24gaGlkZVZpY3RvcnkoKSB7CiAgICAgIHZpY3RvcnlNb2RhbC5jbGFzc0xpc3QuYWRkKCdpcy1oaWRkZW4nKTsKICAgICAgbW9kYWxDb250ZW50LmNsYXNzTGlzdC5yZW1vdmUoJ2lzLXZpc2libGUnKTsKICAgIH0KCiAgICBmdW5jdGlvbiBjb25mZXR0aUVmZmVjdChlbGVtZW50KSB7CiAgICAgIHZhciByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgdmFyIGNvbG9ycyA9IFsnI2VmNDQ0NCcsICcjMjU2M2ViJywgJyMxMGI5ODEnLCAnI2Y1OWUwYicsICcjZWM0ODk5J107CgogICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykgewogICAgICAgIHZhciBkb3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7CiAgICAgICAgdmFyIGFuZ2xlID0gTWF0aC5yYW5kb20oKSAqIE1hdGguUEkgKiAyOwogICAgICAgIHZhciBkaXN0YW5jZSA9IDM0ICsgTWF0aC5yYW5kb20oKSAqIDYyOwogICAgICAgIHZhciB4ID0gTWF0aC5jb3MoYW5nbGUpICogZGlzdGFuY2U7CiAgICAgICAgdmFyIHkgPSBNYXRoLnNpbihhbmdsZSkgKiBkaXN0YW5jZTsKCiAgICAgICAgZG90LmNsYXNzTmFtZSA9ICdhbHBoYWJldC1nYW1lX19jb25mZXR0aSc7CiAgICAgICAgZG90LnN0eWxlLmxlZnQgPSByZWN0LmxlZnQgKyByZWN0LndpZHRoIC8gMiArICdweCc7CiAgICAgICAgZG90LnN0eWxlLnRvcCA9IHJlY3QudG9wICsgcmVjdC5oZWlnaHQgLyAyICsgJ3B4JzsKICAgICAgICBkb3Quc3R5bGUuYmFja2dyb3VuZENvbG9yID0gY29sb3JzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIGNvbG9ycy5sZW5ndGgpXTsKICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvdCk7CgogICAgICAgIGRvdC5hbmltYXRlKFsKICAgICAgICAgIHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlKDAsIDApIHJvdGF0ZSgwZGVnKSBzY2FsZSgxKScsIG9wYWNpdHk6IDEgfSwKICAgICAgICAgIHsgdHJhbnNmb3JtOiAndHJhbnNsYXRlKCcgKyB4ICsgJ3B4LCAnICsgeSArICdweCkgcm90YXRlKDM2MGRlZykgc2NhbGUoMCknLCBvcGFjaXR5OiAwIH0KICAgICAgICBdLCB7CiAgICAgICAgICBkdXJhdGlvbjogNjUwLAogICAgICAgICAgZWFzaW5nOiAnZWFzZS1vdXQnCiAgICAgICAgfSkub25maW5pc2ggPSBmdW5jdGlvbiAoKSB7CiAgICAgICAgICBpZiAodGhpcy5lZmZlY3QgJiYgdGhpcy5lZmZlY3QudGFyZ2V0KSB7CiAgICAgICAgICAgIHRoaXMuZWZmZWN0LnRhcmdldC5yZW1vdmUoKTsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICB9CiAgICB9CgogICAgZnVuY3Rpb24gaGFuZGxlVG91Y2hTdGFydChldmVudCkgewogICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBjbGVhckhpbnQoKTsKCiAgICAgIHZhciB0aWxlID0gZXZlbnQuY3VycmVudFRhcmdldDsKICAgICAgdmFyIGxldHRlciA9IHRpbGUuZGF0YXNldC5sZXR0ZXI7CiAgICAgIHZhciBmaXJzdFRvdWNoID0gZXZlbnQudG91Y2hlc1swXTsKICAgICAgdmFyIGdob3N0ID0gdGlsZS5jbG9uZU5vZGUodHJ1ZSk7CiAgICAgIHZhciB0aWxlU2l6ZSA9IHRpbGUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggfHwgNDg7CiAgICAgIHZhciBvZmZzZXQgPSB0aWxlU2l6ZSAvIDI7CgogICAgICBnaG9zdC5zdHlsZS5wb3NpdGlvbiA9ICdmaXhlZCc7CiAgICAgIGdob3N0LnN0eWxlLmxlZnQgPSBmaXJzdFRvdWNoLmNsaWVudFggLSBvZmZzZXQgKyAncHgnOwogICAgICBnaG9zdC5zdHlsZS50b3AgPSBmaXJzdFRvdWNoLmNsaWVudFkgLSBvZmZzZXQgKyAncHgnOwogICAgICBnaG9zdC5zdHlsZS5wb2ludGVyRXZlbnRzID0gJ25vbmUnOwogICAgICBnaG9zdC5zdHlsZS5vcGFjaXR5ID0gJzAuOTInOwogICAgICBnaG9zdC5zdHlsZS50cmFuc2Zvcm0gPSAnc2NhbGUoMS4xMiknOwogICAgICBnaG9zdC5zdHlsZS56SW5kZXggPSAnMTAwMDAwMSc7CiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZ2hvc3QpOwogICAgICB0aWxlLmNsYXNzTGlzdC5hZGQoJ2lzLWRyYWdnaW5nJyk7CgogICAgICBmdW5jdGlvbiBtb3ZlR2hvc3QobW92ZUV2ZW50KSB7CiAgICAgICAgbW92ZUV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgdmFyIHRvdWNoID0gbW92ZUV2ZW50LnRvdWNoZXNbMF07CiAgICAgICAgZ2hvc3Quc3R5bGUubGVmdCA9IHRvdWNoLmNsaWVudFggLSBvZmZzZXQgKyAncHgnOwogICAgICAgIGdob3N0LnN0eWxlLnRvcCA9IHRvdWNoLmNsaWVudFkgLSBvZmZzZXQgKyAncHgnOwogICAgICB9CgogICAgICBmdW5jdGlvbiBmaW5pc2hUb3VjaChlbmRFdmVudCkgewogICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIG1vdmVHaG9zdCk7CiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCBmaW5pc2hUb3VjaCk7CiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigndG91Y2hjYW5jZWwnLCBmaW5pc2hUb3VjaCk7CiAgICAgICAgdGlsZS5jbGFzc0xpc3QucmVtb3ZlKCdpcy1kcmFnZ2luZycpOwogICAgICAgIGdob3N0LnJlbW92ZSgpOwoKICAgICAgICB2YXIgY2hhbmdlZFRvdWNoID0gZW5kRXZlbnQuY2hhbmdlZFRvdWNoZXNbMF07CiAgICAgICAgaWYgKCFjaGFuZ2VkVG91Y2gpIHJldHVybjsKCiAgICAgICAgdmFyIGVsZW1lbnRCZWxvdyA9IGRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQoY2hhbmdlZFRvdWNoLmNsaWVudFgsIGNoYW5nZWRUb3VjaC5jbGllbnRZKTsKICAgICAgICB2YXIgc2xvdCA9IGVsZW1lbnRCZWxvdyA/IGVsZW1lbnRCZWxvdy5jbG9zZXN0KCcuYWxwaGFiZXQtZ2FtZV9fc2xvdCcpIDogbnVsbDsKCiAgICAgICAgaWYgKHNsb3QgJiYgcm9vdC5jb250YWlucyhzbG90KSkgewogICAgICAgICAgYXR0ZW1wdFBsYWNlbWVudChsZXR0ZXIsIE51bWJlcihzbG90LmRhdGFzZXQuaW5kZXgpLCBzbG90KTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNobW92ZScsIG1vdmVHaG9zdCwgeyBwYXNzaXZlOiBmYWxzZSB9KTsKICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLCBmaW5pc2hUb3VjaCwgeyBwYXNzaXZlOiB0cnVlIH0pOwogICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCd0b3VjaGNhbmNlbCcsIGZpbmlzaFRvdWNoLCB7IHBhc3NpdmU6IHRydWUgfSk7CiAgICB9CgogICAgcm9vdC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIGZ1bmN0aW9uIChldmVudCkgewogICAgICB2YXIgYWN0aW9uQnV0dG9uID0gZXZlbnQudGFyZ2V0LmNsb3Nlc3QoJ1tkYXRhLWFjdGlvbl0nKTsKICAgICAgaWYgKCFhY3Rpb25CdXR0b24gfHwgIXJvb3QuY29udGFpbnMoYWN0aW9uQnV0dG9uKSkgcmV0dXJuOwoKICAgICAgdmFyIGFjdGlvbiA9IGFjdGlvbkJ1dHRvbi5kYXRhc2V0LmFjdGlvbjsKICAgICAgaWYgKGFjdGlvbiA9PT0gJ2luc3RydWN0aW9ucycpIHRvZ2dsZUluc3RydWN0aW9ucygpOwogICAgICBpZiAoYWN0aW9uID09PSAnaGludCcpIHNob3dIaW50KCk7CiAgICAgIGlmIChhY3Rpb24gPT09ICdyZXNldCcpIGluaXRHYW1lKCk7CiAgICAgIGlmIChhY3Rpb24gPT09ICd0b2dnbGUtZ3VpZGUnKSBzZXRHdWlkZVZpc2liaWxpdHkoIWd1aWRlVmlzaWJsZSk7CiAgICB9KTsKCiAgICByb290LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLCBmdW5jdGlvbiAoZXZlbnQpIHsKICAgICAgaWYgKCF2aWN0b3J5TW9kYWwuY2xhc3NMaXN0LmNvbnRhaW5zKCdpcy1oaWRkZW4nKSkgcmV0dXJuOwogICAgICBpZiAoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5IHx8IGV2ZW50LmFsdEtleSkgcmV0dXJuOwoKICAgICAgdmFyIGxldHRlciA9IG5vcm1hbGl6ZUxldHRlcihldmVudC5rZXkpOwogICAgICBpZiAoYWxwaGFiZXQuaW5kZXhPZihsZXR0ZXIpID09PSAtMSkgcmV0dXJuOwoKICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgdmFyIHNsb3QgPSB0YXJnZXRHcmlkLmNoaWxkcmVuW2N1cnJlbnRJbmRleF07CiAgICAgIGF0dGVtcHRQbGFjZW1lbnQobGV0dGVyLCBjdXJyZW50SW5kZXgsIHNsb3QpOwogICAgfSk7CgogICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdsb2FkaW5nJykgewogICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgaW5pdEdhbWUsIHsgb25jZTogdHJ1ZSB9KTsKICAgIH0gZWxzZSB7CiAgICAgIGluaXRHYW1lKCk7CiAgICB9CiAgfSkoKTsKPC9zY3JpcHQ+Cg==[/fusion_code][/fusion_builder_column][/fusion_builder_row][/fusion_builder_container]