www.meo.pt
Open in
urlscan Pro
194.65.61.30
Public Scan
URL:
https://www.meo.pt/fatura-interativa
Submission: On May 17 via manual from ES — Scanned from ES
Submission: On May 17 via manual from ES — Scanned from ES
Form analysis
1 forms found in the DOMPOST /fatura-interativa?TermStoreId=6530ff20-a0c0-45dd-8345-6e4bbe325044&TermSetId=ef320081-ab8f-4707-b5b3-eb82d079d381&TermId=9b961b32-2675-4bab-86bb-88f4e3e03c94
<form method="post" action="/fatura-interativa?TermStoreId=6530ff20-a0c0-45dd-8345-6e4bbe325044&TermSetId=ef320081-ab8f-4707-b5b3-eb82d079d381&TermId=9b961b32-2675-4bab-86bb-88f4e3e03c94" onsubmit="javascript:return WebForm_OnSubmit();"
id="aspnetForm">
<div class="aspNetHidden">
<input type="hidden" name="__SPSCEditMenu" id="__SPSCEditMenu" value="true">
<input type="hidden" name="_wpcmWpid" id="_wpcmWpid" value="">
<input type="hidden" name="wpcmVal" id="wpcmVal" value="">
<input type="hidden" name="MSOWebPartPage_PostbackSource" id="MSOWebPartPage_PostbackSource" value="">
<input type="hidden" name="MSOTlPn_SelectedWpId" id="MSOTlPn_SelectedWpId" value="">
<input type="hidden" name="MSOTlPn_View" id="MSOTlPn_View" value="0">
<input type="hidden" name="MSOTlPn_ShowSettings" id="MSOTlPn_ShowSettings" value="False">
<input type="hidden" name="MSOGallery_SelectedLibrary" id="MSOGallery_SelectedLibrary" value="">
<input type="hidden" name="MSOGallery_FilterString" id="MSOGallery_FilterString" value="">
<input type="hidden" name="MSOTlPn_Button" id="MSOTlPn_Button" value="none">
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="">
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="">
<input type="hidden" name="__REQUESTDIGEST" id="__REQUESTDIGEST" value="0x65BD1A3A5AD2B309615A7B970C35524F863A5238DF7FC1E755D7EE29EC928EBBBE789094DD95B0E00537E09B027D1974F7CF845D432228A9D43F1EF671E71DD7,17 May 2023 15:33:37 -0000">
<input type="hidden" name="MSOSPWebPartManager_DisplayModeName" id="MSOSPWebPartManager_DisplayModeName" value="Browse">
<input type="hidden" name="MSOSPWebPartManager_ExitingDesignMode" id="MSOSPWebPartManager_ExitingDesignMode" value="false">
<input type="hidden" name="MSOWebPartPage_Shared" id="MSOWebPartPage_Shared" value="">
<input type="hidden" name="MSOLayout_LayoutChanges" id="MSOLayout_LayoutChanges" value="">
<input type="hidden" name="MSOLayout_InDesignMode" id="MSOLayout_InDesignMode" value="">
<input type="hidden" name="_wpSelected" id="_wpSelected" value="">
<input type="hidden" name="_wzSelected" id="_wzSelected" value="">
<input type="hidden" name="MSOSPWebPartManager_OldDisplayModeName" id="MSOSPWebPartManager_OldDisplayModeName" value="Browse">
<input type="hidden" name="MSOSPWebPartManager_StartWebPartEditingName" id="MSOSPWebPartManager_StartWebPartEditingName" value="false">
<input type="hidden" name="MSOSPWebPartManager_EndWebPartEditing" id="MSOSPWebPartManager_EndWebPartEditing" value="false">
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE"
value="/wEPDwUBMA9kFgJmD2QWAgIBD2QWBAIBD2QWBgIQD2QWAmYPZBYCAgEPFgIeE1ByZXZpb3VzQ29udHJvbE1vZGULKYgBTWljcm9zb2Z0LlNoYXJlUG9pbnQuV2ViQ29udHJvbHMuU1BDb250cm9sTW9kZSwgTWljcm9zb2Z0LlNoYXJlUG9pbnQsIFZlcnNpb249MTYuMC4wLjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49NzFlOWJjZTExMWU5NDI5YwFkAh8PZBYIAgEPFgIeB1Zpc2libGVoZAIDDxYCHwFoZAIFDxYCHwFoZAIHDxYCHwFoZAIpD2QWAgIDD2QWAmYPZBYCZg88KwAGAGQCBQ9kFgwCAQ9kFgICAQ9kFgIFJmdfZDA3OWM4NDVfY2NmNF80ZjVjX2I2NzVfOTMyOWZiZWY2YTk1D2QWAmYPFgQeBWNsYXNzBR9tcy1ydGUtZW1iZWRjb2RlIG1zLXJ0ZS1lbWJlZHdwHglpbm5lcmh0bWwF56wIPCEtLSBJTklDSU8gRE8gQkxPQ08gREUgSFRNTCBMSVZSRSAtLT4NCiAgICA8IS0tIElOSUNJTyBETyBCTE9DTyBERSBIVE1MIExJVlJFIC0tPg0KICAgIDwhLS0gSU5JQ0lPIERPIEJMT0NPIERFIEhUTUwgTElWUkUgLS0+DQoNCiAgICA8c2VjdGlvbiBjbGFzcz0icHJlbG9hZCBoaWRkZW4iPg0KICAgICAgPGltZw0KICAgICAgICBjbGFzcz0iaGlkZGVuIg0KICAgICAgICBzcmM9Imh0dHBzOi8vd3d3Lm1lby5wdC9QdWJsaXNoaW5nSW1hZ2VzL3BhZ2luYXMvX2ZhdHVyYV9pbnRlcmF0aXZhLzFGYXR1cmFfRml4b19QYWdlXzEucG5nIg0KICAgICAgLz4NCiAgICAgIDxpbWcNCiAgICAgICAgY2xhc3M9ImhpZGRlbiINCiAgICAgICAgc3JjPSJodHRwczovL3d3dy5tZW8ucHQvUHVibGlzaGluZ0ltYWdlcy9wYWdpbmFzL19mYXR1cmFfaW50ZXJhdGl2YS8xRmF0dXJhX0ZpeG9fUGFnZV8yLnBuZyINCiAgICAgIC8+DQogICAgICA8aW1nDQogICAgICAgIGNsYXNzPSJoaWRkZW4iDQogICAgICAgIHNyYz0iaHR0cHM6Ly93d3cubWVvLnB0L1B1Ymxpc2hpbmdJbWFnZXMvcGFnaW5hcy9fZmF0dXJhX2ludGVyYXRpdmEvMUZhdHVyYV9GaXhvX1BhZ2VfMy5wbmciDQogICAgICAvPg0KICAgICAgPGltZw0KICAgICAgICBjbGFzcz0iaGlkZGVuIg0KICAgICAgICBzcmM9Imh0dHBzOi8vY29udGV1ZG9zLm1lby5wdC9TdHlsZSUyMExpYnJhcnkvY29uc3Vtby9pbWFnZXMvZmF0dXJhaW50ZXJhdGl2YS8xRmF0dXJhVGVsZW1vdmVsX3AxLmpwZyINCiAgICAgIC8+DQogICAgICA8aW1nDQogICAgICAgIGNsYXNzPSJoaWRkZW4iDQogICAgICAgIHNyYz0iaHR0cHM6Ly9jb250ZXVkb3MubWVvLnB0L1N0eWxlJTIwTGlicmFyeS9jb25zdW1vL2ltYWdlcy9mYXR1cmFpbnRlcmF0aXZhLzFGYXR1cmFUZWxlbW92ZWxfcDIuanBnIg0KICAgICAgLz4NCiAgICAgIDxpbWcNCiAgICAgICAgY2xhc3M9ImhpZGRlbiINCiAgICAgICAgc3JjPSJodHRwczovL2NvbnRldWRvcy5tZW8ucHQvU3R5bGUlMjBMaWJyYXJ5L2NvbnN1bW8vaW1hZ2VzL2ZhdHVyYWludGVyYXRpdmEvMkZhdHVyYVRlbGVtb3ZlbF9wMS5qcGciDQogICAgICAvPg0KICAgICAgPGltZw0KICAgICAgICBjbGFzcz0iaGlkZGVuIg0KICAgICAgICBzcmM9Imh0dHBzOi8vY29udGV1ZG9zLm1lby5wdC9TdHlsZSUyMExpYnJhcnkvY29uc3Vtby9pbWFnZXMvZmF0dXJhaW50ZXJhdGl2YS8yRmF0dXJhVGVsZW1vdmVsX3AyLmpwZyINCiAgICAgIC8+DQogICAgICA8aW1nDQogICAgICAgIGNsYXNzPSJoaWRkZW4iDQogICAgICAgIHNyYz0iaHR0cHM6Ly93d3cubWVvLnB0L1B1Ymxpc2hpbmdJbWFnZXMvcGFnaW5hcy9fZmF0dXJhX2ludGVyYXRpdmEvRmF0dXJhX2NvcnJlbnRlX0ZpeG9fUGFnZV8xLnBuZyINCiAgICAgIC8+DQogICAgICA8aW1nDQogICAgICAgIGNsYXNzPSJoaWRkZW4iDQogICAgICAgIHNyYz0iaHR0cHM6Ly93d3cubWVvLnB0L1B1Ymxpc2hpbmdJbWFnZXMvcGFnaW5hcy9fZmF0dXJhX2ludGVyYXRpdmEvRmF0dXJhX2NvcnJlbnRlX0ZpeG9fUGFnZV8yLnBuZyINCiAgICAgIC8+DQogICAgICA8aW1nDQogICAgICAgIGNsYXNzPSJoaWRkZW4iDQogICAgICAgIHNyYz0iaHR0cHM6Ly93d3cubWVvLnB0L1B1Ymxpc2hpbmdJbWFnZXMvcGFnaW5hcy9fZmF0dXJhX2ludGVyYXRpdmEvRmF0dXJhX2NvcnJlbnRlX0ZpeG9fUGFnZV8zLnBuZyINCiAgICAgIC8+DQogICAgPC9zZWN0aW9uPg0KDQogICAgPHN0eWxlPg0KICAgICAgI0xvYWRpZnkgew0KICAgICAgICBkaXNwbGF5OiBub25lOw0KICAgICAgICBoZWlnaHQ6IDMwMHB4Ow0KICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOw0KICAgICAgICBsaW5lLWhlaWdodDogMzAwcHg7DQogICAgICAgIG1hcmdpbi1ib3R0b206IDUwcHg7DQogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsNCiAgICAgIH0NCg0KICAgICAgI0xvYWRpZnkgaW1nIHsNCiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOw0KICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOw0KICAgICAgfQ0KDQogICAgICAuaXMtbG9hZGluZyAjTG9hZGlmeSB7DQogICAgICAgIGRpc3BsYXk6IGJsb2NrOw0KICAgICAgfQ0KDQogICAgICAuaXMtbG9hZGluZyAjVGFiaWZ5LA0KICAgICAgLmlzLWxvYWRpbmcgI0NvbnRlbnRpZnkgew0KICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7DQogICAgICB9DQoNCiAgICAgIC5ibG9jby1mYXR1cmEtaW50ZXJhdGl2YSB7DQogICAgICAgIC8qYmFja2dyb3VuZDojRkZGOyovDQogICAgICAgIHdpZHRoOiAxMDAlOw0KICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0Ow0KICAgICAgICBwYWRkaW5nOiAwOw0KICAgICAgfQ0KDQogICAgICAuYmxvY28tZmF0dXJhLWludGVyYXRpdmEgaDIgew0KICAgICAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsNCiAgICAgICAgcGFkZGluZy1sZWZ0OiAyMHB4Ow0KICAgICAgICBwYWRkaW5nLXJpZ2h0OiAyMHB4Ow0KICAgICAgICBwYWRkaW5nLXRvcDogMTBweDsNCiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsNCiAgICAgIH0NCg0KICAgICAgLmJsb2NvLWZhdHVyYS1pbnRlcmF0aXZhIGgzIHsNCiAgICAgICAgbWFyZ2luLXRvcDogMDsNCiAgICAgICAgZm9udC1zaXplOiAyNHB4Ow0KICAgICAgICBwYWRkaW5nLWJvdHRvbTogMHB4Ow0KICAgICAgfQ0KDQogICAgICAuYmxvY28tZmF0dXJhLWludGVyYXRpdmEgLmJveC10aXRsZSB7DQogICAgICAgIG1hcmdpbjogMjBweCBhdXRvIDMwcHg7DQogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsNCiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsNCiAgICAgICAgd2lkdGg6IDEwMCU7DQogICAgICAgIG1heC13aWR0aDogMTAwJTsNCiAgICAgICAgcGFkZGluZy1sZWZ0OiAyNjVweDsNCiAgICAgIH0NCg0KICAgICAgLmJsb2NvLWZhdHVyYS1pbnRlcmF0aXZhIC5ib3gtdGl0bGUgcCB7DQogICAgICAgIGZvbnQtc2l6ZTogMTBweDsNCiAgICAgICAgY29sb3I6ICMwMDA7DQogICAgICB9DQoNCiAgICAgIC8qLmJsb2NvLWZhdHVyYS1pbnRlcmF0aXZhIC5mZC1uYXYtdGFic3ttYXJnaW4tdG9wOjQwcHg7fSovDQogICAgICAuYmxvY28tZmF0dXJhLWludGVyYXRpdmEgdWwsDQogICAgICAuYmxvY28tZmF0dXJhLWludGVyYXRpdmEgbGkgew0KICAgICAgICBsaXN0LXN0eWxlOiBub25lOw0KICAgICAgICBtYXJnaW46IDA7DQogICAgICAgIHBhZGRpbmc6IDA7DQogICAgICB9DQoNCiAgICAgIC50b3AtaW50cm8gew0KICAgICAgICBwYWRkaW5nLWJvdHRvbTogNDBweDsNCiAgICAgICAgcGFkZGluZy1sZWZ0OiAyMHB4Ow0KICAgICAgICBwYWRkaW5nLXJpZ2h0OiAyMHB4Ow0KICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogICAgICB9DQoNCiAgICAgIC5ibC10YWJzIC50YWItY29udGVudCB7DQogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50Ow0KICAgICAgICBib3JkZXItY29sb3I6IHRyYW5zcGFyZW50Ow0KICAgICAgfQ0KDQogICAgICAuYmwtdGFicyAudGFiLWNvbnRlbnQgLnRhYi1wYW5lIHsNCiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOw0KICAgICAgICB3aWR0aDogYXV0bzsNCiAgICAgICAgZmxvYXQ6IG5vbmU7DQogICAgICAgIGRpc3BsYXk6IGlubGluZS10YWJsZTsNCiAgICAgICAgbWF4LXdpZHRoOiAxMTcwcHg7DQogICAgICAgIG1heC13aWR0aDogbm9uZTsNCiAgICAgICAgd2lkdGg6IDEwMCU7DQogICAgICAgIHBhZGRpbmc6IDA7DQogICAgICAgIHBhZGRpbmctbGVmdDogMjY1cHg7DQogICAgICB9DQoNCiAgICAgIC8qLmJsb2NvLWZhdHVyYS1pbnRlcmF0aXZhLmJsLXRhYnMgdWwubmF2LXRhYnN7d2lkdGg6MTAwJTtiYWNrZ3JvdW5kOiMzMzMzMzM7b3ZlcmZsb3c6IGhpZGRlbjtiYWNrZ3JvdW5kLWNsaXA6IGNvbnRlbnQtYm94O3BhZGRpbmctdG9wOiA2cHg7fQ0KICAuYmxvY28tZmF0dXJhLWludGVyYXRpdmEuYmwtdGFicyB1bC5uYXYtdGFicyBsaTpmaXJzdC1vZi10eXBle21hcmdpbi1sZWZ0OiAxNXB4O30NCiAgLmJsb2NvLWZhdHVyYS1pbnRlcmF0aXZhLmJsLXRhYnMgdWwubmF2LXRhYnMgbGk6bGFzdC1vZi10eXBle21hcmdpbi1yaWdodDoxNXB4O30NCiAgLmJsb2NvLWZhdHVyYS1pbnRlcmF0aXZhLmJsLXRhYnMgdWwubmF2LXRhYnMgbGk6bm90KC5hY3RpdmUpe2JhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7fQ0KICAuYmxvY28tZmF0dXJhLWludGVyYXRpdmEuYmwtdGFicyB1bC5uYXYtdGFicyBsaXtmb250LXNpemU6IDE0cHg7Y29sb3I6ICMwMDAwMDA7dmVydGljYWwtYWxpZ246IG1pZGRsZTtkaXNwbGF5OiBpbmxpbmUtYmxvY2s7bWFyZ2luLWJvdHRvbTogLTEycHg7dHJhbnNmb3JtOiB0cmFuc2xhdGVZKC02cHgpO30NCiAgLmJsb2NvLWZhdHVyYS1pbnRlcmF0aXZhLmJsLXRhYnMgdWwubmF2LXRhYnMgbGkgYXtmb250LWZhbWlseTogJ01vbnRzZXJyYXQnLEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7Zm9udC1zaXplOjE0cHg7Zm9udC13ZWlnaHQ6IDMwMDtwYWRkaW5nOjMwcHg7dGV4dC1kZWNvcmF0aW9uOm5vbmU7YmFja2dyb3VuZDpub25lO2NvbG9yOiNGRkY7Ym9yZGVyOjA7d2hpdGUtc3BhY2U6IG5vd3JhcDtwb3NpdGlvbjogcmVsYXRpdmU7bWluLWhlaWdodDoxMDRweDtkaXNwbGF5OiBmbGV4O2FsaWduLWl0ZW1zOiBjZW50ZXI7ZmxleC1kaXJlY3Rpb246IGNvbHVtbjtqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjt0cmFuc2l0aW9uOm5vbmU7bWFyZ2luOjA7fQ0KICAuYmxvY28tZmF0dXJhLWludGVyYXRpdmEuYmwtdGFicyB1bC5uYXYtdGFicyBsaSBhOmhvdmVye2NvbG9yOiAjMDA5OWFiO3RleHQtZGVjb3JhdGlvbjpub25lO30NCiAgLmJsb2NvLWZhdHVyYS1pbnRlcmF0aXZhLmJsLXRhYnMgdWwubmF2LXRhYnMgbGk6bm90KC5hY3RpdmUpIGE6YWZ0ZXJ7Y29udGVudDogJyc7YmFja2dyb3VuZDogIzAwMDAwMDtwb3NpdGlvbjogYWJzb2x1dGU7b3BhY2l0eTogMDt0b3A6IDZweDtoZWlnaHQ6IDEwMCU7bGVmdDogMDt3aWR0aDogMTAwJTt6LWluZGV4OiAtMTt9DQogIC5ibG9jby1mYXR1cmEtaW50ZXJhdGl2YS5ibC10YWJzIHVsLm5hdi10YWJzIGxpOm5vdCguYWN0aXZlKSBhOmhvdmVyOmFmdGVye29wYWNpdHk6MTt9DQogIC5ibG9jby1mYXR1cmEtaW50ZXJhdGl2YS5ibC10YWJzIHVsLm5hdi10YWJzIGxpOmhvdmVyIGE6YmVmb3JlLA0KICAuYmxvY28tZmF0dXJhLWludGVyYXRpdmEuYmwtdGFicyB1bC5uYXYtdGFicyBsaTpob3ZlciArIGxpIGE6YmVmb3JlLA0KICAuYmxvY28tZmF0dXJhLWludGVyYXRpdmEuYmwtdGFicyB1bC5uYXYtdGFicyBsaS5hY3RpdmUgYTpiZWZvcmUsDQogIC5ibG9jby1mYXR1cmEtaW50ZXJhdGl2YS5ibC10YWJzIHVsLm5hdi10YWJzIGxpLmFjdGl2ZSArIGxpIGE6YmVmb3Jle2JhY2tncm91bmQ6bm9uZTt9DQogIC5ibG9jby1mYXR1cmEtaW50ZXJhdGl2YS5ibC10YWJzIHVsLm5hdi10YWJzIGxpLmFjdGl2ZXtiYWNrZ3JvdW5kOiNGRkY7fQ0KICAuYmxvY28tZmF0dXJhLWludGVyYXRpdmEuYmwtdGFicyB1bC5uYXYtdGFicyBsaS5hY3RpdmUgYXtib3JkZXI6MDtwYWRkaW5nOjMwcHg7bWFyZ2luOjA7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOiMwMDA7Y3Vyc29yOnBvaW50ZXI7fQ0KICAuYmxvY28tZmF0dXJhLWludGVyYXRpdmEuYmwtdGFicyB1bC5uYXYtdGFicyBsaSArIGxpIGE6YmVmb3Jle2NvbnRlbnQ6ICcnO3dpZHRoOiAxcHg7cG9zaXRpb246IGFic29sdXRlO2xlZnQ6IDA7dG9wOiAzMHB4O2hlaWdodDogY2FsYygxMDAlIC0gNjBweCk7YmFja2dyb3VuZDogIzgwODA4MDt9Ki8NCg0KICAgICAgLmxlZnQtc2lkZSB7DQogICAgICAgIC8qZGlzcGxheTppbmxpbmUtYmxvY2s7dmVydGljYWwtYWxpZ246dG9wOyovDQogICAgICAgIHBhZGRpbmc6IDcwcHggMjBweCAyMHB4IDA7DQogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICAgICAgbGVmdDogMDsNCiAgICAgICAgdG9wOiBhdXRvOw0KICAgICAgfQ0KDQogICAgICAubGVmdC1zaWRlIC5jb2wtbmF2LWxlZnQgew0KICAgICAgICBwYWRkaW5nOiAyMHB4Ow0KICAgICAgICBwYWRkaW5nLXRvcDogMDsNCiAgICAgICAgZmxvYXQ6IHJpZ2h0Ow0KICAgICAgfQ0KDQogICAgICAuY29sLW5hdi1sZWZ0IC5zZWMtaGVscCB7DQogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjY2NjOw0KICAgICAgfQ0KDQogICAgICAuY29sLW5hdi1sZWZ0IHsNCiAgICAgICAgLypiYWNrZ3JvdW5kOiNmZmY7Ki8NCiAgICAgICAgd2lkdGg6IDI0NXB4Ow0KICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0Ow0KICAgICAgfQ0KDQogICAgICAuY29sLW5hdi1sZWZ0IGgzIHsNCiAgICAgICAgZm9udC1zaXplOiAxMnB4Ow0KICAgICAgICBsaW5lLWhlaWdodDogMjBweDsNCiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsNCiAgICAgICAgY29sb3I6ICMwMDAwMDA7DQogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7DQogICAgICB9DQoNCiAgICAgIC5jb2wtbmF2LWxlZnQgcCB7DQogICAgICAgIGZvbnQtc2l6ZTogMTJweDsNCiAgICAgICAgbGluZS1oZWlnaHQ6IDE1cHg7DQogICAgICAgIGNvbG9yOiAjMDAwMDAwOw0KICAgICAgfQ0KDQogICAgICAuY29sLW5hdi1sZWZ0IC5zZWMtbmF2IHsNCiAgICAgICAgcGFkZGluZzogMjBweCAwOw0KICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2NjYzsNCiAgICAgIH0NCg0KICAgICAgLmNvbC1uYXYtbGVmdCBoNCB7DQogICAgICAgIGZvbnQtc2l6ZTogMTJweDsNCiAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7DQogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7DQogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7DQogICAgICAgIG1hcmdpbi1ib3R0b206IDA7DQogICAgICB9DQoNCiAgICAgIC5jb2wtbmF2LWxlZnQgaDUgew0KICAgICAgICBmb250LXNpemU6IDEycHg7DQogICAgICAgIGxpbmUtaGVpZ2h0OiAxNXB4Ow0KICAgICAgICBmb250LXdlaWdodDogNjAwOw0KICAgICAgICBtYXJnaW4tdG9wOiAxOHB4Ow0KICAgICAgICBjdXJzb3I6IHBvaW50ZXI7DQogICAgICB9DQoNCiAgICAgIC5jb2wtbmF2LWxlZnQgaDUuYWN0aXZlLA0KICAgICAgLmNvbC1uYXYtbGVmdCBoNTpob3ZlciB7DQogICAgICAgIGNvbG9yOiAjMDA5OWFiOw0KICAgICAgfQ0KDQogICAgICAuY29sLW5hdi1sZWZ0IC5zZWMtbmF2IGxpLA0KICAgICAgLmNvbC1uYXYtbGVmdCAuc2VjLWhlbHAgbGkgew0KICAgICAgICBmb250LXNpemU6IDEycHg7DQogICAgICAgIGNvbG9yOiAjMDAwOw0KICAgICAgICBtYXJnaW4tYm90dG9tOiA1cHg7DQogICAgICB9DQoNCiAgICAgIC5jb2wtbmF2LWxlZnQgLnNlYy1uYXYgLmxpc3RhSXRlbXMgbGk6aG92ZXIgew0KICAgICAgICBjdXJzb3I6IHBvaW50ZXI7DQogICAgICAgIGNvbG9yOiAjNjY2Ow0KICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsNCiAgICAgIH0NCg0KICAgICAgLmNvbC1uYXYtbGVmdCAuc2VjLW5hdiAubGlzdGFJdGVtcyBsaS5hY3RpdmUgew0KICAgICAgICBjb2xvcjogIzAwOTlhYjsNCiAgICAgIH0NCg0KICAgICAgLmNvbC1uYXYtbGVmdCAuc2VjLWhlbHAgew0KICAgICAgICBwYWRkaW5nLWJvdHRvbTogMjBweDsNCiAgICAgIH0NCg0KICAgICAgLmNvbC1uYXYtbGVmdCAuc2VjLWhlbHAgLmJ0biB7DQogICAgICAgIG1hcmdpbi10b3A6IDI1cHg7DQogICAgICB9DQoNCiAgICAgIC5zZWMtaGVscC5saW5rcyB7DQogICAgICAgIGJvcmRlcjogbm9uZTsNCiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgICAgICBwYWRkaW5nLWJvdHRvbTogMDsNCiAgICAgIH0NCg0KICAgICAgLnNlYy1oZWxwLmxpbmtzIGgzIHsNCiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjBweDsNCiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgICAgICB3aWR0aDogMTAwJTsNCiAgICAgICAgZGlzcGxheTogYmxvY2s7DQogICAgICB9DQoNCiAgICAgIC5zZWMtaGVscC5saW5rcy5hY3RpdmUgaDMgew0KICAgICAgICBtYXJnaW4tYm90dG9tOiAwOw0KICAgICAgfQ0KDQogICAgICAuc2VjLWhlbHAubGlua3MuYWN0aXZlIGgzOmFmdGVyIHsNCiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGVYKDE4MGRlZyk7DQogICAgICAgIHRyYW5zaXRpb246IDAuMTVzIGFsbCBlYXNlOw0KICAgICAgICB0b3A6IDEwcHg7DQogICAgICB9DQoNCg0KICAgICAgLnNlYy1oZWxwLmxpbmtzIGgzOmFmdGVyLA0KICAgICAgLmZhdHVyYXMtaW4tdGFicyBoNDphZnRlciB7DQogICAgICAgIG1hcmdpbi10b3A6IDA7DQogICAgICAgIC8qY29udGVudDp1cmwoaHR0cHM6Ly93d3cubWVvLnB0L1B1Ymxpc2hpbmdJbWFnZXMvcGFnaW5hcy9fZmF0dXJhX2ludGVyYXRpdmEvaWNvX3NldGFfb3Blbi5zdmcpOyovDQogICAgICAgIHdpZHRoOiAyMHB4Ow0KICAgICAgICBoZWlnaHQ6IDEycHg7DQogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICAgICAgcmlnaHQ6IDA7DQogICAgICAgIHRvcDogMDsNCiAgICAgICAgdHJhbnNpdGlvbjogMC4xNXMgYWxsIGVhc2U7DQogICAgICAgIGNvbnRlbnQ6ICJcZTAzZiI7DQogICAgICAgIGZvbnQtZmFtaWx5OiAiaWNvbnMtbWVvIiAhaW1wb3J0YW50Ow0KICAgICAgICBmb250LXN0eWxlOiBub3JtYWwgIWltcG9ydGFudDsNCiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbCAhaW1wb3J0YW50Ow0KICAgICAgICBmb250LXZhcmlhbnQ6IG5vcm1hbCAhaW1wb3J0YW50Ow0KICAgICAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZSAhaW1wb3J0YW50Ow0KICAgICAgICBzcGVhazogbm9uZTsNCiAgICAgICAgbGluZS1oZWlnaHQ6IDE7DQogICAgICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOw0KICAgICAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlOw0KICAgICAgICBmb250LXNpemU6IDJlbTsNCiAgICAgIH0NCg0KICAgICAgLmZhdHVyYXMtaW4tdGFicyBoNC5hY3RpdmU6YWZ0ZXIgew0KICAgICAgICB0cmFuc2l0aW9uOiAwLjE1cyBhbGwgZWFzZTsNCiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGVYKDE4MGRlZyk7DQogICAgICAgIHRyYW5zaXRpb246IDAuMTVzIGFsbCBlYXNlOw0KICAgICAgICB0b3A6IDEwcHg7DQogICAgICB9DQoNCiAgICAgIC5mYXR1cmFzLWluLXRhYnMgaDQuYWN0aXZlICsgdWwjbGlzdGFQYWdpbmFzIHsNCiAgICAgICAgZGlzcGxheTogbm9uZTsNCiAgICAgIH0NCg0KICAgICAgLmZhdHVyYXMtaW4tdGFicyBoNCB7DQogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgICAgIH0NCg0KICAgICAgLnNlYy1oZWxwLmxpbmtzIGgzOmhvdmVyLA0KICAgICAgLmZhdHVyYXMtaW4tdGFicyBoNDpob3ZlciB7DQogICAgICAgIGN1cnNvcjogcG9pbnRlcjsNCiAgICAgICAgY29sb3I6ICMwMDk5YWI7DQogICAgICB9DQoNCiAgICAgIC5zZWMtaGVscC5saW5rcyB1bCB7DQogICAgICAgIHRyYW5zaXRpb246IDAuMTVzIGFsbCBlYXNlOw0KICAgICAgfQ0KDQogICAgICAuc2VjLWhlbHAubGlua3MgbGkgYSB7DQogICAgICAgIGxpbmUtaGVpZ2h0OiAxNXB4Ow0KICAgICAgICBkaXNwbGF5OiBibG9jazsNCiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTFweDsNCiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOw0KICAgICAgfQ0KDQogICAgICAuc2VjLWhlbHAubGlua3MuYWN0aXZlIHVsIHsNCiAgICAgICAgZGlzcGxheTogbm9uZTsNCiAgICAgIH0NCg0KICAgICAgLmRlc2t0b3Auc2VjLWhlbHAubGlua3Mgew0KICAgICAgICBkaXNwbGF5OiBibG9jazsNCiAgICAgIH0NCg0KICAgICAgLm1vYmlsZS5zZWMtaGVscC5saW5rcyB7DQogICAgICAgIGRpc3BsYXk6IG5vbmU7DQogICAgICB9DQoNCiAgICAgICNyaWdodC1zaWRlIHsNCiAgICAgICAgLyp3aWR0aDogY2FsYygxMDAlIC0gMjg5cHgpO2Rpc3BsYXk6aW5saW5lLWJsb2NrOyovDQogICAgICAgIGRpc3BsYXk6IGJsb2NrOw0KICAgICAgICAvKnBhZGRpbmc6MCAyMHB4IDMwcHg7Ki8NCiAgICAgIH0NCg0KICAgICAgLmJsb2NvLWZhdHVyYS1pbnRlcmF0aXZhIC5tZW51LWZhdHVyYSB7DQogICAgICB9DQoNCiAgICAgIC5ibG9jby1mYXR1cmEtaW50ZXJhdGl2YSAubWVudS1mYXR1cmEgLnNlYy1uYXYgew0KICAgICAgICBwYWRkaW5nOiAxMHB4IDA7DQogICAgICB9DQoNCiAgICAgIC5ibG9jby1mYXR1cmEtaW50ZXJhdGl2YSAubWVudS1mYXR1cmEgLnNlYy1oZWxwIHsNCiAgICAgICAgcGFkZGluZzogMjBweCAwIDVweDsNCiAgICAgIH0NCg0KICAgICAgI2NvbC1jb250LXJpZ2h0IHsNCiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgICAgfQ0KDQogICAgICAjY29sLWNvbnQtcmlnaHQgLmFyZWEtY29udGV1ZG8gew0KICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmOw0KICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7DQogICAgICAgIHBhZGRpbmc6IDAgNTBweDsNCiAgICAgIH0NCg0KICAgICAgZGl2I3ZpZGVvLWxpbmstYm94OmVtcHR5IHsNCiAgICAgICAgYm9yZGVyOiBub25lOw0KICAgICAgfQ0KDQogICAgICAjY29sLWNvbnQtcmlnaHQgLm5hdi1wYWcgew0KICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsNCiAgICAgICAgaGVpZ2h0OiA3MHB4Ow0KICAgICAgICBwYWRkaW5nLXRvcDogMTVweDsNCiAgICAgICAgbGlzdC1zdHlsZTogbm9uZTsNCiAgICAgICAgbWF4LXdpZHRoOiA5OTFweDsNCiAgICAgICAgbWFyZ2luOiAwIGF1dG87DQogICAgICB9DQoNCiAgICAgICNjb2wtY29udC1yaWdodCAubmF2LXBhZyBsaSB7DQogICAgICAgIGJhY2tncm91bmQ6IHVybChodHRwczovL3d3dy5tZW8ucHQvUHVibGlzaGluZ0ltYWdlcy9wYWdpbmFzL19mYXR1cmFfaW50ZXJhdGl2YS9wZGZfaWNvX2dyZXlfbmV3LnN2ZykNCiAgICAgICAgICBuby1yZXBlYXQgMCAwOw0KICAgICAgICB3aWR0aDogMzhweDsNCiAgICAgICAgaGVpZ2h0OiA0MHB4Ow0KICAgICAgICBsaW5lLWhlaWdodDogNDBweDsNCiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOw0KICAgICAgICBwYWRkaW5nOiAwcHg7DQogICAgICAgIGZvbnQtc2l6ZTogMTJweDsNCiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7DQogICAgICAgIG1hcmdpbjogMDsNCiAgICAgICAgY3Vyc29yOiBwb2ludGVyOw0KICAgICAgICBjb2xvcjogIzZlNmU2ZTsNCiAgICAgICAgLypvcGFjaXR5OjAuNTsqLw0KICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0Ow0KICAgICAgICBwYWRkaW5nLWxlZnQ6IDEzcHg7DQogICAgICB9DQoNCiAgICAgICNjb2wtY29udC1yaWdodCAubmF2LXBhZyBsaTpob3ZlciB7DQogICAgICAgIGNvbG9yOiAjMDA5OWFiOw0KICAgICAgICBiYWNrZ3JvdW5kOiB1cmwoaHR0cHM6Ly93d3cubWVvLnB0L1B1Ymxpc2hpbmdJbWFnZXMvcGFnaW5hcy9fZmF0dXJhX2ludGVyYXRpdmEvcGRmX2ljb19uZXdfaG92ZXIuc3ZnKQ0KICAgICAgICAgIG5vLXJlcGVhdCAwIDA7DQogICAgICB9DQoNCiAgICAgICNjb2wtY29udC1yaWdodCAubmF2LXBhZyBsaS5hY3RpdmUgew0KICAgICAgICBiYWNrZ3JvdW5kOiB1cmwoaHR0cHM6Ly93d3cubWVvLnB0L1B1Ymxpc2hpbmdJbWFnZXMvcGFnaW5hcy9fZmF0dXJhX2ludGVyYXRpdmEvcGRmX2ljb19uZXcuc3ZnKQ0KICAgICAgICAgIG5vLXJlcGVhdCAwIDA7DQogICAgICAgIGNvbG9yOiAjMDAwOw0KICAgICAgfQ0KDQogICAgICAjY29sLWNvbnQtcmlnaHQgLm5hdi1wYWcgbGkuYWN0aXZlIHsNCiAgICAgICAgb3BhY2l0eTogMTsNCiAgICAgIH0NCg0KICAgICAgI2NvbC1jb250LXJpZ2h0IC5uYXYtcGFnIGxpOmhvdmVyIHsNCiAgICAgIH0NCg0KICAgICAgLmFyZWEtY29udGV1ZG8gLmFyZWEtaW1nIHsNCiAgICAgICAgd2lkdGg6IDEwMCU7DQogICAgICAgIC8qbWF4LXdpZHRoOjEyMjBweDsqLw0KICAgICAgICBtYXgtd2lkdGg6IDg4MHB4Ow0KICAgICAgICBtYXJnaW46IDAgYXV0bzsNCiAgICAgIH0NCg0KICAgICAgLmFyZWEtY29udGV1ZG8gLmFyZWEtaW1nIGltZyB7DQogICAgICAgIHdpZHRoOiAxMDAlOw0KICAgICAgICBoZWlnaHQ6IGF1dG87DQogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsNCiAgICAgIH0NCg0KICAgICAgLmFyZWEtY29udGV1ZG8gLmFyZWEtaW1nIHsNCiAgICAgICAgYmFja2dyb3VuZDogIzIyMjIyMjsNCiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgICAgfQ0KDQogICAgICAvKiNhcmVhLWJvbGFzLXJlY3RzLmJvbGFzT24gKyAjaW1nLWZhdHVyYXtvcGFjaXR5Oi43fSovDQogICAgICAuYXJlYS1jb250ZXVkby5hZGQtbW9kYWwgLm1vZGFsLWZhdHVyYSB7DQogICAgICAgIGNvbnRlbnQ6ICIgIjsNCiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgICAgICB0b3A6IDA7DQogICAgICAgIGxlZnQ6IDA7DQogICAgICAgIHdpZHRoOiAxMDAlOw0KICAgICAgICBoZWlnaHQ6IDEwMCU7DQogICAgICAgIGJhY2tncm91bmQ6ICMwMDA7DQogICAgICAgIG9wYWNpdHk6IDAuNzsNCiAgICAgIH0NCg0KICAgICAgLmFyZWEtY29udGV1ZG8uYWRkLW1vZGFsIC5yaWdodC1idCwNCiAgICAgIC5hcmVhLWNvbnRldWRvLmFkZC1tb2RhbCAubGVmdC1idCB7DQogICAgICAgIG9wYWNpdHk6IDAuMTsNCiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7DQogICAgICB9DQoNCiAgICAgIC5hcmVhLWNvbnRldWRvIC5hcmVhLWltZyBpbWcgew0KICAgICAgICBvcGFjaXR5OiAxOw0KICAgICAgICBtaW4td2lkdGg6IDMyMHB4Ow0KICAgICAgICBtaW4taGVpZ2h0OiA1MDBweDsNCiAgICAgIH0NCg0KICAgICAgI2luZm8tYmFsbG9vbiB7DQogICAgICAgIHBhZGRpbmc6IDIwcHg7DQogICAgICAgIGZvbnQtc2l6ZTogMTZweDsNCiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgICAgICBtYXgtd2lkdGg6IDY1JTsNCiAgICAgICAgd2lkdGg6IDUwMHB4Ow0KICAgICAgICBoZWlnaHQ6IGF1dG87DQogICAgICAgIGJhY2tncm91bmQ6ICNmZmY7DQogICAgICAgIHotaW5kZXg6IDU1Ow0KICAgICAgICAvKnBhZGRpbmctYm90dG9tOiAyMHB4OyovDQogICAgICAgIG1hcmdpbi1ib3R0b206IDIycHg7DQogICAgICAgIHRleHQtYWxpZ246IGxlZnQ7DQogICAgICB9DQoNCiAgICAgICNpbmZvLWJhbGxvb246YWZ0ZXIgew0KICAgICAgICBjb250ZW50OiAiIjsNCiAgICAgICAgd2lkdGg6IDA7DQogICAgICAgIGhlaWdodDogMDsNCiAgICAgICAgYm9yZGVyLWxlZnQ6IDEwcHggc29saWQgdHJhbnNwYXJlbnQ7DQogICAgICAgIGJvcmRlci1yaWdodDogMTBweCBzb2xpZCB0cmFuc3BhcmVudDsNCiAgICAgICAgYm9yZGVyLXRvcDogMThweCBzb2xpZCAjZmZmOw0KICAgICAgICBib3R0b206IC0xOHB4Ow0KICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgICB9DQoNCiAgICAgICNpbmZvLWJhbGxvb24gYS5jbG9zZSB7DQogICAgICB9DQoNCiAgICAgICNpbmZvLWJhbGxvb24gLnRpdHVsbyB7DQogICAgICAgIGZvbnQtc2l6ZTogMTZweDsNCiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsNCiAgICAgICAgbWFyZ2luLXRvcDowOw0KICAgICAgfQ0KDQogICAgICAjaW5mby1iYWxsb29uIC5kZXNjcmljYW8gew0KICAgICAgICBmb250LXNpemU6IDEycHg7DQogICAgICAgIGNvbG9yOiAjMDAwOw0KICAgICAgICBsaW5lLWhlaWdodDogMTdweDsNCiAgICAgIH0NCg0KICAgICAgI2luZm8tYmFsbG9vbiB1bCB7DQogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsNCiAgICAgICAgcGFkZGluZy10b3A6IDBweDsNCiAgICAgIH0NCg0KICAgICAgI2luZm8tYmFsbG9vbiB1bCBsaSBhIHsNCiAgICAgICAgZm9udC1zaXplOiAxM3B4Ow0KICAgICAgICBsaW5lLWhlaWdodDogMThweDsNCiAgICAgICAgbGluZS1oZWlnaHQ6IDE1cHg7DQogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsNCiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7DQogICAgICB9DQoNCiAgICAgICNpbmZvLWJhbGxvb24gdWwgbGkgYTpob3ZlciB7DQogICAgICAgIGNvbG9yOiAjMDA5OWFiOw0KICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7DQogICAgICB9DQoNCiAgICAgICNpbmZvLWJhbGxvb24gew0KICAgICAgICAvKmJvdHRvbTpjYWxjKDEwMCUgLSAyNyUpO2xlZnQ6IGNhbGMoMTAwJSAtIDklLzIgLSA4OCUvMiAtIDE1MHB4KTsqLw0KICAgICAgfQ0KDQogICAgICAjaW5mby1iYWxsb29uLmJvdHRvbV9sZWZ0OmFmdGVyIHsNCiAgICAgICAgdG9wOiAwOw0KICAgICAgICBtYXJnaW4tdG9wOiAtMThweDsNCiAgICAgICAgbGVmdDogNTAlOw0KICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpOw0KICAgICAgfQ0KDQogICAgICAjaW5mby1iYWxsb29uLmJvdHRvbV9jZW50ZXI6YWZ0ZXIgew0KICAgICAgICB0b3A6IDA7DQogICAgICAgIG1hcmdpbi10b3A6IC0xOHB4Ow0KICAgICAgICBsZWZ0OiA1MCU7DQogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7DQogICAgICAgIG1hcmdpbi1sZWZ0OiAtNXB4Ow0KICAgICAgfQ0KDQogICAgICAjaW5mby1iYWxsb29uLmJvdHRvbV9yaWdodDphZnRlciB7DQogICAgICAgIG1hcmdpbi10b3A6IC0xOHB4Ow0KICAgICAgICB0b3A6IDA7DQogICAgICAgIHJpZ2h0OiAxMHB4Ow0KICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpOw0KICAgICAgfQ0KDQogICAgICAjaW5mby1iYWxsb29uLnRvcF9jZW50ZXI6YWZ0ZXIgew0KICAgICAgICBsZWZ0OiA1MCU7DQogICAgICAgIG1hcmdpbi1sZWZ0OiAtNHB4Ow0KICAgICAgfQ0KDQogICAgICAjaW5mby1iYWxsb29uLnRvcF9yaWdodDphZnRlciB7DQogICAgICAgIHJpZ2h0OiAxMHB4Ow0KICAgICAgfQ0KDQogICAgICAjaW5mby1iYWxsb29uLm1pZGRsZV9sZWZ0OmFmdGVyIHsNCiAgICAgICAgcmlnaHQ6IDA7DQogICAgICAgIHRvcDogNTAlOw0KICAgICAgICBtYXJnaW4tcmlnaHQ6IC0xOHB4Ow0KICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtOTBkZWcpOw0KICAgICAgfQ0KDQogICAgICAjaW5mby1iYWxsb29uLm1pZGRsZV9yaWdodDphZnRlciB7DQogICAgICAgIGxlZnQ6IDA7DQogICAgICAgIG1hcmdpbi1sZWZ0OiAtMThweDsNCiAgICAgICAgdG9wOiA1MCU7DQogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsNCiAgICAgIH0NCg0KICAgICAgLmNsb3NlYmFsbG9vbiB7DQogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICAgICAgcmlnaHQ6IDBweDsNCiAgICAgICAgLyogdG9wOiAtMjZweDsgKi8NCiAgICAgICAgdG9wOi0yOXB4Ow0KICAgICAgICBjdXJzb3I6IHBvaW50ZXI7DQogICAgICAgIC8qIHBhZGRpbmc6IDNweCA4cHggMHB4OyAqLw0KICAgICAgICBjb2xvcjogI2ZmZjsNCiAgICAgICAgLyogZm9udC1zaXplOiA5cHg7ICovDQogICAgICAgIGZvbnQtc2l6ZToxOHB4Ow0KICAgICAgICBsaW5lLWhlaWdodDoyMnB4Ow0KICAgICAgICB0ZXh0LWFsaWduOmNlbnRlcjsNCiAgICAgICAgd2lkdGg6MjRweDsNCiAgICAgICAgaGVpZ2h0OjI0cHg7DQogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGVhc2Utb3V0Ow0KICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7DQogICAgICB9DQoNCiAgICAgIC5jbG9zZWJhbGxvb246aG92ZXIgew0KICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDA5OWFiOw0KICAgICAgICBjb2xvcjogI2ZmZjsNCiAgICAgICAgLypib3JkZXItcmFkaXVzOiA1cHg7Ki8NCiAgICAgIH0NCg0KICAgICAgLmNsb3NlYmFsbG9vbjpiZWZvcmUgew0KICAgICAgICB6LWluZGV4OiA2MjsNCiAgICAgICAgY29udGVudDogIlw3OCI7DQogICAgICAgIGZvbnQtZmFtaWx5OiAiaWNvbnMtbWVvIiAhaW1wb3J0YW50Ow0KICAgICAgICBmb250LXN0eWxlOiBub3JtYWwgIWltcG9ydGFudDsNCiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbCAhaW1wb3J0YW50Ow0KICAgICAgICBmb250LXZhcmlhbnQ6IG5vcm1hbCAhaW1wb3J0YW50Ow0KICAgICAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZSAhaW1wb3J0YW50Ow0KICAgICAgICBzcGVhazogbm9uZTsNCiAgICAgICAgbGluZS1oZWlnaHQ6IDE7DQogICAgICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOw0KICAgICAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlOw0KICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOw0KICAgICAgICBtYXJnaW4tbGVmdDoxcHg7DQogICAgICB9DQoNCiAgICAgICNhcmVhLWJvbGFzLXJlY3RzIHsNCiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgICAgICBoZWlnaHQ6IDEwMCU7DQogICAgICAgIHdpZHRoOiAxMDAlOw0KICAgICAgICBib3R0b206IDA7DQogICAgICAgIHRvcDogMDsNCiAgICAgICAgbGVmdDogMDsNCiAgICAgICAgcmlnaHQ6IDA7DQoNCiAgICAgIH0NCg0KICAgICAgLmJvbGFzIHsNCiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgICAgICB6LWluZGV4OiAxOw0KICAgICAgICB3aWR0aDogMTAwJTsNCiAgICAgICAgaGVpZ2h0OiAxMDAlOw0KICAgICAgfQ0KDQogICAgICAuYm9sYXMgYSB7DQogICAgICAgIGhlaWdodDogMzZweDsNCiAgICAgICAgd2lkdGg6IDM2cHg7DQogICAgICAgIGJvcmRlci1yYWRpdXM6IDE4cHg7DQogICAgICAgIC8qYmFja2dyb3VuZDojMzMzMzMzOyovDQogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjA0LCAyMDQsIDIwNCwgMC41KTsNCiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgICAgICBjb2xvcjogIzAwMDsNCiAgICAgICAgLyp0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLC01MCUpOyovDQogICAgICAgIGZvbnQtc2l6ZTogMjhweDsNCiAgICAgICAgbGluZS1oZWlnaHQ6IDM0cHg7DQogICAgICAgIGN1cnNvcjogcG9pbnRlcjsNCiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOw0KICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogICAgICB9DQoNCiAgICAgIC5ib2xhcyBhOmJlZm9yZSwNCiAgICAgIC5ib2xhcyBhOmFmdGVyIHsNCiAgICAgICAgY29udGVudDogIiI7DQogICAgICAgIHdpZHRoOiAyNnB4Ow0KICAgICAgICBoZWlnaHQ6IDI2cHg7DQogICAgICAgIGRpc3BsYXk6IGJsb2NrOw0KICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7DQogICAgICAgIHotaW5kZXg6IC0yOw0KICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgICAgIGxlZnQ6IDVweDsNCiAgICAgICAgdG9wOiA1cHg7DQogICAgICAgIGFuaW1hdGlvbjogc29uYXJFZmZlY3QgMnMgZWFzZS1vdXQgaW5maW5pdGU7DQogICAgICAgIHRyYW5zaXRpb24tZGVsYXk6IGluaGVyaXQ7DQogICAgICB9DQoNCiAgICAgIEBrZXlmcmFtZXMgc29uYXJFZmZlY3Qgew0KICAgICAgICAwJSB7DQogICAgICAgICAgb3BhY2l0eTogMC4xOw0KICAgICAgICB9DQoNCiAgICAgICAgNTAlIHsNCiAgICAgICAgICBvcGFjaXR5OiAwLjU7DQogICAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgMnB4ICMzMzMzMzM1MCwgMCAwIDBweCA1cHggIzMzMzMzMzUwLA0KICAgICAgICAgICAgMCAwIDAgNXB4ICMzMzMzMzM1MDsNCiAgICAgICAgfQ0KDQogICAgICAgIDEwMCUgew0KICAgICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCAjMzMzMzMzNTAsIDAgMCAwcHggMTBweCAjMzMzMzMzNTAsDQogICAgICAgICAgICAwIDAgMCA1cHggIzMzMzMzMzUwOw0KICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4zKTsNCiAgICAgICAgICBvcGFjaXR5OiAwLjE7DQogICAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogY2VudGVyIGNlbnRlcjsNCiAgICAgICAgICB0cmFuc2Zvcm0tc3R5bGU6IHByZXNlcnZlLTNEOw0KICAgICAgICB9DQogICAgICB9DQoNCiAgICAgIC5ib2xhcyBhOmhvdmVyIHsNCiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOw0KICAgICAgICBiYWNrZ3JvdW5kOiAjMDA5OWFiOw0KICAgICAgfQ0KDQogICAgICAucmVjdGFuZ3VsbyB7DQogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsNCiAgICAgICAgb3V0bGluZTogM3B4IHNvbGlkICNmZmY7DQogICAgICAgIHotaW5kZXg6IDU1Ow0KICAgICAgICB3aWR0aDogODglOw0KICAgICAgICB0b3A6IDI3JTsNCiAgICAgICAgaGVpZ2h0OiA3JTsNCiAgICAgICAgbGVmdDogOSU7DQogICAgICB9DQoNCiAgICAgIC5jb2wtbmF2LWxlZnQgLnNlYy1oZWxwOmVtcHR5IHsNCiAgICAgICAgcGFkZGluZzogMDsNCiAgICAgIH0NCg0KICAgICAgLnNlYy1oZWxwLmxpbmtzIGxpIGE6aG92ZXIgew0KICAgICAgICBjb2xvcjogIzAwOTlhYjsNCiAgICAgIH0NCg0KICAgICAgLyoubGVmdC1idCwgLnJpZ2h0LWJ0IHtwb3NpdGlvbjogYWJzb2x1dGU7dG9wOiA1MCU7ei1pbmRleDogMTtoZWlnaHQ6IDMwcHg7IHdpZHRoOiAyMHB4O2NvbnRlbnQ6IHVybCgiaHR0cDovL3d3dy5tZW8ucHQvUHVibGlzaGluZ0ltYWdlcy9wYWdpbmFzL19mYXR1cmFfaW50ZXJhdGl2YS9pY29fc2V0YV9yX2xfbGlnaHQuc3ZnIik7dHJhbnNpdGlvbjogMC4xNXMgYWxsIGVhc2U7cGFkZGluZzogNXB4IDt9Ki8NCg0KICAgICAgLmxlZnQtYnQsDQogICAgICAucmlnaHQtYnQgew0KICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7DQogICAgICAgIHRvcDogNTAlOw0KICAgICAgICB6LWluZGV4OiA1Ow0KICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlLW91dDsNCiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOw0KICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjA0LCAyMDQsIDIwNCwgMC41KTsNCiAgICAgICAgd2lkdGg6IDUwcHg7DQogICAgICAgIHBhZGRpbmc6IDE1cHggMDsNCiAgICAgICAgY29sb3I6ICMwMDA7DQogICAgICAgIGZvbnQtc2l6ZTogMTRweDsNCiAgICAgICAgY3Vyc29yOiBwb2ludGVyOw0KICAgICAgfQ0KDQogICAgICAubGVmdC1idDpiZWZvcmUsDQogICAgICAucmlnaHQtYnQ6YmVmb3JlIHsNCiAgICAgICAgdmVydGljYWwtYWxpZ246IC0ycHg7DQogICAgICAgIGNvbnRlbnQ6ICJcZTAzZCI7DQogICAgICAgIGZvbnQtZmFtaWx5OiAiaWNvbnMtbWVvIiAhaW1wb3J0YW50Ow0KICAgICAgICBmb250LXN0eWxlOiBub3JtYWwgIWltcG9ydGFudDsNCiAgICAgICAgZm9udC13ZWlnaHQ6IG5vcm1hbCAhaW1wb3J0YW50Ow0KICAgICAgICBmb250LXZhcmlhbnQ6IG5vcm1hbCAhaW1wb3J0YW50Ow0KICAgICAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZSAhaW1wb3J0YW50Ow0KICAgICAgICBzcGVhazogbm9uZTsNCiAgICAgICAgbGluZS1oZWlnaHQ6IDJlbTsNCiAgICAgICAgZm9udC1zaXplOiAyZW07DQogICAgICAgIC13ZWJraXQtZm9udC1zbW9vdGhpbmc6IGFudGlhbGlhc2VkOw0KICAgICAgICAtbW96LW9zeC1mb250LXNtb290aGluZzogZ3JheXNjYWxlOw0KICAgICAgfQ0KDQogICAgICAucmlnaHQtYnQgew0KICAgICAgICByaWdodDogLTUwcHg7DQogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7DQogICAgICB9DQoNCiAgICAgIC5sZWZ0LWJ0IHsNCiAgICAgICAgbGVmdDogLTUwcHg7DQogICAgICB9DQoNCiAgICAgIC5yaWdodC1idDpob3ZlciwNCiAgICAgIC5sZWZ0LWJ0OmhvdmVyIHsNCiAgICAgICAgYmFja2dyb3VuZDogIzAwOTlhYjsNCiAgICAgICAgY29sb3I6ICMwMDA7DQogICAgICB9DQoNCiAgICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtaW4td2lkdGg6IDc2OXB4KSB7DQogICAgICAgIGRpdiN3cmFwZmxvYXRpbmdtZW51LmFmZml4ZWQgew0KICAgICAgICAgIHBvc2l0aW9uOiBmaXhlZDsNCiAgICAgICAgICB3aWR0aDogMjA1cHg7DQogICAgICAgICAgei1pbmRleDogNTsNCiAgICAgICAgICB0b3A6IDgwcHggIWltcG9ydGFudDsNCiAgICAgICAgfQ0KDQogICAgICAgIGRpdiN3cmFwZmxvYXRpbmdtZW51LmFmZml4ZWQtdG9wIHsNCiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7DQogICAgICAgIH0NCg0KICAgICAgICBkaXYjd3JhcGZsb2F0aW5nbWVudS5hZmZpeGVkLWJvdHRvbSB7DQogICAgICAgICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgICAgICAgIHRvcDogYXV0bzsNCiAgICAgICAgICB3aWR0aDogMjA1cHg7DQogICAgICAgICAgYm90dG9tOiAwOw0KICAgICAgICB9DQogICAgICB9DQoNCiAgICAgIEBtZWRpYSBzY3JlZW4gYW5kIChtYXgtd2lkdGg6IDk5MXB4KSB7DQogICAgICAgIC5ibG9jby1mYXR1cmEtaW50ZXJhdGl2YSB7DQogICAgICAgICAgcGFkZGluZy1sZWZ0OiAwcHg7DQogICAgICAgICAgcGFkZGluZy1yaWdodDogMHB4Ow0KICAgICAgICB9DQoNCiAgICAgICAgLmJvbGFzIGEgew0KICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC43KSB0cmFuc2xhdGVZKC03MCUpIHRyYW5zbGF0ZVgoLTcwJSk7DQogICAgICAgIH0NCiAgICAgIH0NCg0KICAgICAgQG1lZGlhIHNjcmVlbiBhbmQgKG1heC13aWR0aDogNzY4cHgpIHsNCiAgICAgICAgLmJsLXRhYnMgLnRhYi1jb250ZW50IC50YWItcGFuZSwNCiAgICAgICAgI2NvbC1jb250LXJpZ2h0IC5hcmVhLWNvbnRldWRvIHsNCiAgICAgICAgICBwYWRkaW5nOiAwOw0KICAgICAgICB9DQoNCiAgICAgICAgLnJpZ2h0LWJ0LA0KICAgICAgICAubGVmdC1idCB7DQogICAgICAgICAgZGlzcGxheTogbm9uZTsNCiAgICAgICAgfQ0KDQogICAgICAgIC5jbG9zZWJhbGxvb24gew0KICAgICAgICAgIHJpZ2h0OiAxNXB4Ow0KICAgICAgICAgIHRvcDogNXB4Ow0KICAgICAgICB9DQoNCiAgICAgICAgLmJvbGFzIHsNCiAgICAgICAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7DQogICAgICAgIH0NCg0KICAgICAgICAuY29sLW5hdi1sZWZ0IHsNCiAgICAgICAgICBtYXJnaW4tdG9wOiAzMHB4Ow0KICAgICAgICB9DQoNCiAgICAgICAgLmNvbC1uYXYtbGVmdCwNCiAgICAgICAgI3JpZ2h0LXNpZGUgew0KICAgICAgICAgIHdpZHRoOiAxMDAlOw0KICAgICAgICB9DQoNCiAgICAgICAgI2NvbC1jb250LXJpZ2h0IC5uYXYtcGFnIHsNCiAgICAgICAgICBkaXNwbGF5OiBub25lOw0KICAgICAgICB9DQoNCiAgICAgICAgLmxlZnQtc2lkZSB7DQogICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgICAgICB9DQoNCiAgICAgICAgLmxlZnQtc2lkZSAuY29sLW5hdi1sZWZ0IHsNCiAgICAgICAgICAvKnBhZGRpbmctbGVmdDowO3BhZGRpbmctcmlnaHQ6MDt0ZXh0LWFsaWduOiBjZW50ZXI7Ki8NCiAgICAgICAgfQ0KDQogICAgICAgIC5sZWZ0LXNpZGUgew0KICAgICAgICAgIHBhZGRpbmc6IDA7DQogICAgICAgIH0NCg0KICAgICAgICAuc2VjLWhlbHAgew0KICAgICAgICAgIGRpc3BsYXk6IG5vbmU7DQogICAgICAgIH0NCg0KICAgICAgICAuY29sLW5hdi1sZWZ0IC5zZWMtbmF2IHsNCiAgICAgICAgICBib3JkZXI6IG5vbmU7DQogICAgICAgICAgcGFkZGluZy10b3A6IDA7DQogICAgICAgIH0NCg0KICAgICAgICAuYXJlYS1jb250ZXVkbyAuYXJlYS1pbWcgaW1nIHsNCiAgICAgICAgICBtaW4td2lkdGg6IGluaGVyaXQ7DQogICAgICAgICAgbWluLWhlaWdodDogaW5oZXJpdDsNCiAgICAgICAgfQ0KDQogICAgICAgIC5ibG9jby1mYXR1cmEtaW50ZXJhdGl2YSB7DQogICAgICAgICAgcGFkZGluZy1sZWZ0OiAwOw0KICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDA7DQogICAgICAgIH0NCg0KICAgICAgICAuc2VjLWhlbHAubGlua3Mgew0KICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOw0KICAgICAgICB9DQoNCiAgICAgICAgLmNvbC1uYXYtbGVmdCB7DQogICAgICAgICAgbWFyZ2luLXRvcDogMjVweDsNCiAgICAgICAgfQ0KDQogICAgICAgIC5sZWZ0LXNpZGUgLmNvbC1uYXYtbGVmdCB7DQogICAgICAgICAgcGFkZGluZy1sZWZ0OiAwOw0KICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDA7DQogICAgICAgIH0NCg0KICAgICAgICAuYmxvY28tZmF0dXJhLWludGVyYXRpdmEgLm1lbnUtZmF0dXJhIHsNCiAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDIwcHg7DQogICAgICAgICAgcGFkZGluZy1yaWdodDogMjBweDsNCiAgICAgICAgfQ0KDQogICAgICAgIC5sZWZ0LXNpZGUgLmNvbC1uYXYtbGVmdCwNCiAgICAgICAgLmJsLXRhYnMgLnRhYi1jb250ZW50ID4gYS5hY3RpdmUsDQogICAgICAgIC5ibC10YWJzIC50YWItY29udGVudCBhOmFjdGl2ZSB7DQogICAgICAgICAgYmFja2dyb3VuZDogI2Y0ZjRmNDsNCiAgICAgICAgfQ0KDQogICAgICAgIC5ibC10YWJzIC50YWItY29udGVudCAudGFiLXBhbmUuYWN0aXZlIHsNCiAgICAgICAgICBiYWNrZ3JvdW5kOiAjZmZmOw0KICAgICAgICAgIGJvcmRlci10b3A6IG5vbmU7DQogICAgICAgIH0NCg0KICAgICAgICAuYmwtdGFicyAubmF2LXRhYnMgew0KICAgICAgICAgIHBhZGRpbmc6IDAgMHB4Ow0KICAgICAgICAgIHdpZHRoOiAxMDAlOw0KICAgICAgICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7DQogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMXB4Ow0KICAgICAgICB9DQoNCiAgICAgICAgLmJsLXRhYnMgLm5hdi10YWJzIGxpIHsNCiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZWVlICFpbXBvcnRhbnQ7DQogICAgICAgICAgYm9yZGVyLWJvdHRvbTogbm9uZTsNCiAgICAgICAgfQ0KDQogICAgICAgIC5ibC10YWJzIC5uYXYtdGFicyBsaSB7DQogICAgICAgICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7DQogICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrICFpbXBvcnRhbnQ7DQogICAgICAgICAgd2lkdGg6IDEwMCUgIWltcG9ydGFudDsNCiAgICAgICAgfQ0KDQogICAgICAgIC5ibC10YWJzIC5uYXYtdGFicyBsaTpsYXN0LWNoaWxkIHsNCiAgICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2VlZSAhaW1wb3J0YW50Ow0KICAgICAgICB9DQoNCiAgICAgICAgLmJsLXRhYnMgLm5hdi10YWJzIGxpIGEgew0KICAgICAgICAgIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50Ow0KICAgICAgICAgIG1hcmdpbjogMCAhaW1wb3J0YW50Ow0KICAgICAgICB9DQoNCiAgICAgICAgLmJsLXRhYnMgLm5hdi10YWJzIGxpIHsNCiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7DQogICAgICAgICAgZmxvYXQ6IG5vbmU7DQogICAgICAgICAgd2lkdGg6IDEwMCU7DQogICAgICAgICAgYm9yZGVyOiBub25lICFpbXBvcnRhbnQ7DQogICAgICAgICAgYm9yZGVyLXJhZGl1czogMDsNCiAgICAgICAgICBtYXJnaW46IDA7DQogICAgICAgICAgb3V0bGluZTogMXB4IHNvbGlkICNlZWUgIWltcG9ydGFudDsNCiAgICAgICAgfQ0KDQogICAgICAgIC5ibC10YWJzIC5uYXYtdGFicyBsaS5hY3RpdmUsDQogICAgICAgIC5ibC10YWJzIC5uYXYtdGFicyBsaSBhLA0KICAgICAgICAuYmwtdGFicyAubmF2LXRhYnMgbGkgYTpob3ZlciwNCiAgICAgICAgLmJsLXRhYnMgLm5hdi10YWJzIGxpIGE6Zm9jdXMgew0KICAgICAgICAgIGJvcmRlcjogbm9uZSAhaW1wb3J0YW50Ow0KICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7DQogICAgICAgICAgbWFyZ2luOiAwOw0KICAgICAgICB9DQoNCiAgICAgICAgLmNvbC1uYXYtbGVmdCAuc2VjLWhlbHAsDQogICAgICAgIC5jb2wtbmF2LWxlZnQgLnNlYy1uYXYgew0KICAgICAgICAgIHBhZGRpbmc6IDMwcHggMjBweDsNCiAgICAgICAgfQ0KDQogICAgICAgIC5ibG9jby1mYXR1cmEtaW50ZXJhdGl2YSAuYm94LXRpdGxlIHsNCiAgICAgICAgICBwYWRkaW5nOiAwIDIwcHg7DQogICAgICAgIH0NCg0KICAgICAgICAjaW5mby1iYWxsb29uIHsNCiAgICAgICAgICB3aWR0aDogMTAwJSAhaW1wb3J0YW50Ow0KICAgICAgICAgIG1heC13aWR0aDogMTAwJSAhaW1wb3J0YW50Ow0KICAgICAgICAgIGxlZnQ6IDAgIWltcG9ydGFudDsNCiAgICAgICAgICByaWdodDogMCAhaW1wb3J0YW50Ow0KICAgICAgICAgIC8qcG9zaXRpb246cmVsYXRpdmUhaW1wb3J0YW50OyovDQogICAgICAgICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7DQogICAgICAgICAgLyp0b3A6MCFpbXBvcnRhbnQ7Ym90dG9tOjAhaW1wb3J0YW50OyovDQogICAgICAgICAgdHJhbnNmb3JtOiBub25lICFpbXBvcnRhbnQ7DQogICAgICAgICAgLyoqLw0KICAgICAgICB9DQoNCiAgICAgICAgI2luZm8tYmFsbG9vbi5ib3R0b21fbGVmdDphZnRlciwNCiAgICAgICAgI2luZm8tYmFsbG9vbi5ib3R0b21fY2VudGVyOmFmdGVyLA0KICAgICAgICAjaW5mby1iYWxsb29uLmJvdHRvbV9yaWdodDphZnRlciwNCiAgICAgICAgI2luZm8tYmFsbG9vbi50b3BfY2VudGVyOmFmdGVyLA0KICAgICAgICAjaW5mby1iYWxsb29uLnRvcF9yaWdodDphZnRlciwNCiAgICAgICAgI2luZm8tYmFsbG9vbi5taWRkbGVfbGVmdDphZnRlciwNCiAgICAgICAgI2luZm8tYmFsbG9vbi5taWRkbGVfcmlnaHQ6YWZ0ZXIsDQogICAgICAgICNpbmZvLWJhbGxvb246YWZ0ZXIgew0KICAgICAgICAgIHRvcDogLTE1cHggIWltcG9ydGFudDsNCiAgICAgICAgICBsZWZ0OiA1MCUgIWltcG9ydGFudDsNCiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxODBkZWcpICFpbXBvcnRhbnQ7DQogICAgICAgICAgYm9yZGVyLWxlZnQ6IDEwcHggc29saWQgdHJhbnNwYXJlbnQ7DQogICAgICAgICAgYm9yZGVyLXJpZ2h0OiAxMHB4IHNvbGlkIHRyYW5zcGFyZW50Ow0KICAgICAgICAgIGJvcmRlci10b3A6IDE1cHggc29saWQgI2ZmZjsNCiAgICAgICAgICBtYXJnaW4tdG9wOiA1cHg7DQogICAgICAgIH0NCg0KICAgICAgICAuYmxvY28tZmF0dXJhLWludGVyYXRpdmEgaDIgew0KICAgICAgICAgIHBhZGRpbmctdG9wOiAwOw0KICAgICAgICAgIGZvbnQtc2l6ZTogMjJweDsNCiAgICAgICAgfQ0KDQogICAgICAgIC5ibG9jby1mYXR1cmEtaW50ZXJhdGl2YSBoMyB7DQogICAgICAgICAgcGFkZGluZy1ib3R0b206IDBweDsNCiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwOw0KICAgICAgICB9DQoNCiAgICAgICAgLyojVGFiaWZ5e3BhZGRpbmctdG9wOjMwcHg7fSovDQogICAgICAgIC5zZWMtaGVscC5saW5rcyBoMyB7DQogICAgICAgICAgcGFkZGluZy1ib3R0b206IDBweDsNCiAgICAgICAgfQ0KDQogICAgICAgIC5sZWZ0LXNpZGUgLmNvbC1uYXYtbGVmdCB7DQogICAgICAgICAgbWFyZ2luLXRvcDogMDsNCiAgICAgICAgfQ0KDQogICAgICAgIC5oZWFkZXItYm90IHsNCiAgICAgICAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgI2Y0ZjRmNCAhaW1wb3J0YW50Ow0KICAgICAgICB9DQoNCiAgICAgICAgI3JpZ2h0LXNpZGUgew0KICAgICAgICAgIGRpc3BsYXk6IG5vbmU7DQogICAgICAgIH0NCg0KICAgICAgICAjQ29udGVudGlmeSB7DQogICAgICAgICAgcGFkZGluZy1ib3R0b206IDA7DQogICAgICAgIH0NCg0KICAgICAgICAuY29sLW5hdi1sZWZ0IC5zZWMtaGVscCB7DQogICAgICAgICAgcGFkZGluZy1ib3R0b206IDA7DQogICAgICAgIH0NCg0KICAgICAgICAuYm94LXRpdGxlLnRleHQtbGVmdC5jb250YWluZXIgew0KICAgICAgICAgIG1hcmdpbi10b3A6IDIwcHg7DQogICAgICAgIH0NCg0KICAgICAgICAuZGVza3RvcC5zZWMtaGVscC5saW5rcyB7DQogICAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50Ow0KICAgICAgICB9DQoNCiAgICAgICAgLm1vYmlsZS5zZWMtaGVscC5saW5rcyB7DQogICAgICAgICAgZGlzcGxheTogYmxvY2sgIWltcG9ydGFudDsNCiAgICAgICAgfQ0KDQogICAgICAgIC5tb2JpbGUuc2VjLWhlbHAubGlua3MgaDM6YWZ0ZXIgew0KICAgICAgICAgIGNvbnRlbnQ6IG5vbmU7DQogICAgICAgIH0NCg0KICAgICAgICAubW9iaWxlLnNlYy1oZWxwLmxpbmtzIGgzIHsNCiAgICAgICAgICBwYWRkaW5nLWJvdHRvbTogMjBweDsNCiAgICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsNCiAgICAgICAgfQ0KDQogICAgICAgIC5tb2JpbGUuc2VjLWhlbHAubGlua3MgdWwgew0KICAgICAgICAgIGRpc3BsYXk6IGJsb2NrICFpbXBvcnRhbnQ7DQogICAgICAgIH0NCg0KICAgICAgICAuZmF0dXJhcy1pbi10YWJzIGg0LA0KICAgICAgICAuZmF0dXJhcy1pbi10YWJzIGg0OmhvdmVyIHsNCiAgICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsNCiAgICAgICAgfQ0KDQogICAgICAgIC5mYXR1cmFzLWluLXRhYnMgaDQ6YWZ0ZXIgew0KICAgICAgICAgIGNvbnRlbnQ6IG5vbmU7DQogICAgICAgIH0NCg0KICAgICAgICAuZmF0dXJhcy1pbi10YWJzIHVsIHsNCiAgICAgICAgICBkaXNwbGF5OiBibG9jayAhaW1wb3J0YW50Ow0KICAgICAgICB9DQoNCiAgICAgICAgZGl2I3dyYXBmbG9hdGluZ21lbnUuYWZmaXhlZCB7DQogICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOw0KICAgICAgICAgIHdpZHRoOiAxMDAlOw0KICAgICAgICB9DQogICAgICB9DQogICAgPC9zdHlsZT4NCg0KICAgIDxzZWN0aW9uIGNsYXNzPSJibG9jby1mYXR1cmEtaW50ZXJhdGl2YSBibC10YWJzIGlzLWxvYWRpbmciIHN0eWxlPSIiPg0KICAgICAgPGRpdiBjbGFzcz0idG9wLWludHJvIj4NCiAgICAgICAgPGgyPkNvbXByZWVuZGVyIGEgc3VhIGZhdHVyYTwvaDI+DQogICAgICAgIDxoND5Db25oZcOnYSBlbSBkZXRhbGhlIG8gY29udGXDumRvIGRhcyB2w6FyaWFzIHNlY8Onw7VlcyBkYSBzdWEgZmF0dXJhPC9oND4NCiAgICAgIDwvZGl2Pg0KDQogICAgICA8ZGl2IGlkPSJMb2FkaWZ5Ij4NCiAgICAgICAgPGltZyBzcmM9Imh0dHBzOi8vd3d3Lm1lby5wdC9QdWJsaXNoaW5nSW1hZ2VzL3BhZ2luYXMvX2ZhdHVyYV9pbnRlcmF0aXZhL2xvYWRpbmcuZ2lmIiBoZWlnaHQ9IjY0IiB3aWR0aD0iNjQiIGFsdD0ibG9hZGluZyIvPg0KICAgICAgPC9kaXY+DQoNCiAgICAgIDwhLS08ZGl2IGNsYXNzPSJmZC1uYXYtdGFicyI+PHVsIGNsYXNzPSJuYXYgbmF2LXRhYnMiIGlkPSJUYWJpZnkiPjwvdWw+PC9kaXY+LS0+DQogICAgICA8ZGl2IGNsYXNzPSJibG9jay10YWJzIGZha2UtdGFicyI+DQogICAgICAgIDxkaXYgY2xhc3M9InBhcnQiPg0KICAgICAgICAgIDxkaXYgY2xhc3M9InRhYi1tZW51Ij4NCiAgICAgICAgICAgIDx1bCBpZD0iVGFiaWZ5Ij48L3VsPg0KICAgICAgICAgIDwvZGl2Pg0KICAgICAgICA8L2Rpdj4NCiAgICAgIDwvZGl2Pg0KDQogICAgICA8ZGl2IGNsYXNzPSJ0YWItY29udGVudCIgaWQ9IkNvbnRlbnRpZnkiPg0KICAgICAgICA8IS0tIE1FTyA8YSBocmVmPSIjdGFiMTEiIGNsYXNzPSJhY3RpdmUiPk1FTzwvYT4tLT4NCg0KICAgICAgICA8ZGl2IGNsYXNzPSJ0YWItcGFuZSBhY3RpdmUiPg0KICAgICAgICAgIDxzcGFuIGNsYXNzPSJoaWRkZW4gYW5jb3JhcyI+PC9zcGFuPg0KICAgICAgICAgIDxkaXYgY2xhc3M9ImxlZnQtc2lkZSI+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2wtbmF2LWxlZnQiPg0KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWMtaGVscCIgaWQ9InZpZGVvLWxpbmstYm94Ij48L2Rpdj4NCg0KICAgICAgICAgICAgICA8ZGl2IGlkPSJ3cmFwZmxvYXRpbmdtZW51IiBjbGFzcz0ibWVudS1mYXR1cmEiPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNlYy1uYXYiIGlkPSJuYXYtZmF0dXJhcyI+PC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGVza3RvcCBzZWMtaGVscCBsaW5rcyBhY3RpdmUiPg0KICAgICAgICAgICAgICAgICAgPGgzPkFqdWRhIGUgU3Vwb3J0ZTwvaDM+DQogICAgICAgICAgICAgICAgICA8dWw+DQogICAgICAgICAgICAgICAgICAgIDxsaT4NCiAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL3Byb2R1dG9zLW1lby9nZXJpci1wcm9kdXRvcy9hcmVhLWRlLWNsaWVudGUiPsOBcmVhIGRlIENsaWVudGU8L2E+DQogICAgICAgICAgICAgICAgICAgIDwvbGk+DQogICAgICAgICAgICAgICAgICAgIDxsaT4NCiAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL2ZhdHVyYXMtcGFnYW1lbnRvcy1lLWNhcnJlZ2FtZW50b3MvZmF0dXJhcy9jb25zdWx0YXItYS1zdWEtZmF0dXJhIj5Db25zdWx0YXIgYSBzdWEgZmF0dXJhPC9hPg0KICAgICAgICAgICAgICAgICAgICA8L2xpPg0KICAgICAgICAgICAgICAgICAgICA8bGk+DQogICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9mYXR1cmFzLXBhZ2FtZW50b3MtZS1jYXJyZWdhbWVudG9zL2ZhdHVyYXMvYWx0ZXJhci1kYWRvcy1kZS1mYXR1cmEjZGV0YWxoZWRlY29tdW5pY2Fjb2VzIj5Db25zdWx0YXIgZGV0YWxoZSBkZSBjb211bmljYcOnw7VlczwvYT4NCiAgICAgICAgICAgICAgICAgICAgPC9saT4NCiAgICAgICAgICAgICAgICAgICAgPGxpPg0KICAgICAgICAgICAgICAgICAgICAgIDxhDQogICAgICAgICAgICAgICAgICAgICAgICBocmVmPSJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL2ZhdHVyYXMtcGFnYW1lbnRvcy1lLWNhcnJlZ2FtZW50b3MvZmF0dXJhcy9jb21wcmVlbmRlci1hLWZhdHVyYSNmYXR1cmF2YWxvcnN1cGVyaW9yYW9lc3BlcmFkbyI+Q29tcHJlZW5kZXIgdmFsb3IgZGUgZmF0dXJhIHN1cGVyaW9yIGFvIGVzcGVyYWRvPC9hPg0KICAgICAgICAgICAgICAgICAgICA8L2xpPg0KICAgICAgICAgICAgICAgICAgICA8bGk+DQogICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9mYXR1cmFzLXBhZ2FtZW50b3MtZS1jYXJyZWdhbWVudG9zL3BhZ2FtZW50b3MvcGFnYXItZmF0dXJhIj5QYWdhciBmYXR1cmE8L2E+DQogICAgICAgICAgICAgICAgICAgIDwvbGk+DQogICAgICAgICAgICAgICAgICA8L3VsPg0KICAgICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgICAgPGRpdiBpZD0ibGVmdC1zaWRlLWZhdC1tb2JpbGUiPjwvZGl2Pg0KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJtb2JpbGUgc2VjLWhlbHAgbGlua3MgYWN0aXZlIj4NCiAgICAgICAgICAgICAgICA8aDM+QWp1ZGEgZSBTdXBvcnRlPC9oMz4NCiAgICAgICAgICAgICAgICA8dWw+DQogICAgICAgICAgICAgICAgICA8bGk+DQogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvcHJvZHV0b3MtbWVvL2dlcmlyLXByb2R1dG9zL2FyZWEtZGUtY2xpZW50ZSI+w4FyZWEgZGUgQ2xpZW50ZTwvYT4NCiAgICAgICAgICAgICAgICAgIDwvbGk+DQogICAgICAgICAgICAgICAgICA8bGk+DQogICAgICAgICAgICAgICAgICAgIDxhDQogICAgICAgICAgICAgICAgICAgICAgaHJlZj0iaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9mYXR1cmFzLXBhZ2FtZW50b3MtZS1jYXJyZWdhbWVudG9zL2ZhdHVyYXMvY29uc3VsdGFyLWEtc3VhLWZhdHVyYSI+Q29uc3VsdGFyIGEgc3VhIGZhdHVyYTwvYT4NCiAgICAgICAgICAgICAgICAgIDwvbGk+DQogICAgICAgICAgICAgICAgICA8bGk+DQogICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9Imh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvZmF0dXJhcy1wYWdhbWVudG9zLWUtY2FycmVnYW1lbnRvcy9mYXR1cmFzL2FsdGVyYXItZGFkb3MtZGUtZmF0dXJhI2RldGFsaGVkZWNvbXVuaWNhY29lcyI+Q29uc3VsdGFyIGRldGFsaGUgZGUgY29tdW5pY2HDp8O1ZXM8L2E+DQogICAgICAgICAgICAgICAgICA8L2xpPg0KICAgICAgICAgICAgICAgICAgPGxpPg0KICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL2ZhdHVyYXMtcGFnYW1lbnRvcy1lLWNhcnJlZ2FtZW50b3MvZmF0dXJhcy9jb21wcmVlbmRlci1hLWZhdHVyYSNmYXR1cmF2YWxvcnN1cGVyaW9yYW9lc3BlcmFkbyI+Q29tcHJlZW5kZXIgdmFsb3IgZGUgZmF0dXJhIHN1cGVyaW9yIGFvIGVzcGVyYWRvPC9hPg0KICAgICAgICAgICAgICAgICAgPC9saT4NCiAgICAgICAgICAgICAgICAgIDxsaT4NCiAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9mYXR1cmFzLXBhZ2FtZW50b3MtZS1jYXJyZWdhbWVudG9zL3BhZ2FtZW50b3MvcGFnYXItZmF0dXJhIj5QYWdhciBmYXR1cmE8L2E+DQogICAgICAgICAgICAgICAgICA8L2xpPg0KICAgICAgICAgICAgICAgIDwvdWw+DQogICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgPC9kaXY+DQogICAgICAgICAgPGRpdiBpZD0icmlnaHQtc2lkZSI+DQogICAgICAgICAgICA8ZGl2IGlkPSJjb2wtY29udC1yaWdodCI+DQogICAgICAgICAgICAgIDx1bCBjbGFzcz0ibmF2LXBhZyIgaWQ9Im5hdi1wYWciPjwvdWw+DQogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFyZWEtY29udGV1ZG8iPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWZhdHVyYSI+PC9kaXY+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYXJlYS1pbWciPg0KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icmlnaHQtYnQiPjwvZGl2Pg0KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGVmdC1idCI+PC9kaXY+DQogICAgICAgICAgICAgICAgICA8ZGl2IGlkPSJhcmVhLWJvbGFzLXJlY3RzIj4NCiAgICAgICAgICAgICAgICAgICAgPHVsIGNsYXNzPSJib2xhcyI+PC91bD4NCiAgICAgICAgICAgICAgICAgICAgPGRpdg0KICAgICAgICAgICAgICAgICAgICAgIGlkPSJyZWN0LWJvcmRlciINCiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0icmVjdGFuZ3VsbyINCiAgICAgICAgICAgICAgICAgICAgICBzdHlsZT0iZGlzcGxheTogbm9uZSINCiAgICAgICAgICAgICAgICAgICAgPjwvZGl2Pg0KICAgICAgICAgICAgICAgICAgICA8IS0tIGJvbGluaGFzIGUgcmV0YW5ndWxvcy0tPg0KICAgICAgICAgICAgICAgICAgPC9kaXY+DQoNCiAgICAgICAgICAgICAgICAgIDxpbWcgaWQ9ImltZy1mYXR1cmEiIHNyYz0iaHR0cHM6Ly93d3cubWVvLnB0L1B1Ymxpc2hpbmdJbWFnZXMvcGFnaW5hcy9fZmF0dXJhX2ludGVyYXRpdmEvMUZhdHVyYV9GaXhvX1BhZ2VfMS5wbmciIGFsdD0iZmF0dXJhIi8+DQoNCiAgICAgICAgICAgICAgICAgIDxkaXYgaWQ9ImluZm8tYmFsbG9vbiIgc3R5bGU9ImRpc3BsYXk6IG5vbmUiPg0KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY2xvc2ViYWxsb29uIj48L3NwYW4+DQogICAgICAgICAgICAgICAgICAgIDxoNSBjbGFzcz0idGl0dWxvIj48L2g1Pg0KICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0iZGVzY3JpY2FvIj48L3A+DQogICAgICAgICAgICAgICAgICAgIDx1bD48L3VsPg0KICAgICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgPC9kaXY+DQogICAgICAgIDwvZGl2Pg0KICAgICAgPC9kaXY+DQoNCiAgICAgIDxkaXYgY2xhc3M9ImJveC10aXRsZSB0ZXh0LWxlZnQgY29udGFpbmVyIG5vdGFzIj4NCiAgICAgICAgPHA+DQogICAgICAgICAgPHN0cm9uZz5Ob3RhOiA8L3N0cm9uZz5BIGZhdHVyYSBhcHJlc2VudGFkYSDDqSBhcGVuYXMgdW0gZXhlbXBsby4gT3MgdmFsb3JlcyBhcHJlc2VudGFkb3Mgc8OjbyBleGVtcGxpZmljYXRpdm9zLg0KICAgICAgICA8L3A+DQogICAgICA8L2Rpdj4NCg0KICAgICAgPHNjcmlwdD4NCiAgICAgICAgLyogREFET1MgIERBIEZBVFVSQSAqLw0KDQogICAgICAgIHZhciBvYmpzID0gW107DQoNCiAgICAgICAgLyogVEFCUyAqLw0KICAgICAgICBmdW5jdGlvbiBBcmVhc1RhYnModGl0dWxvLCBmYXR1cmFzLCB0aXRWaWRlbywgbGlua1ZpZGVvLCBkZXNjVmlkZW8pIHsNCiAgICAgICAgICB0aGlzLmluaXQodGl0dWxvLCBmYXR1cmFzLCB0aXRWaWRlbywgbGlua1ZpZGVvLCBkZXNjVmlkZW8pOw0KICAgICAgICB9DQogICAgICAgIEFyZWFzVGFicy5wcm90b3R5cGUgPSB7DQogICAgICAgICAgaW5pdDogZnVuY3Rpb24gKHRpdHVsbywgZmF0dXJhcywgdGl0VmlkZW8sIGxpbmtWaWRlbywgZGVzY1ZpZGVvKSB7DQogICAgICAgICAgICB0aGlzLnRpdHVsbyA9IHRpdHVsbzsNCiAgICAgICAgICAgIHRoaXMuZmF0dXJhcyA9IGZhdHVyYXM7DQogICAgICAgICAgICB0aGlzLnRpdFZpZGVvID0gdGl0VmlkZW87DQogICAgICAgICAgICB0aGlzLmxpbmtWaWRlbyA9IGxpbmtWaWRlbzsNCiAgICAgICAgICAgIHRoaXMuZGVzY1ZpZGVvID0gZGVzY1ZpZGVvOw0KICAgICAgICAgIH0sDQogICAgICAgICAgY3JlYXRlOiBmdW5jdGlvbiAoKSB7fSwNCiAgICAgICAgfTsNCg0KICAgICAgICAvKiBGQVRVUkFTICovDQogICAgICAgIGZ1bmN0aW9uIEZhdHVyYSh0aXR1bG8sIHBhZ3MpIHsNCiAgICAgICAgICB0aGlzLmluaXQodGl0dWxvLCBwYWdzKTsNCiAgICAgICAgfQ0KICAgICAgICBGYXR1cmEucHJvdG90eXBlID0gew0KICAgICAgICAgIGluaXQ6IGZ1bmN0aW9uICh0aXR1bG8sIHBhZ3MpIHsNCiAgICAgICAgICAgIHRoaXMudGl0dWxvID0gdGl0dWxvOw0KICAgICAgICAgICAgdGhpcy5wYWdzID0gcGFnczsNCiAgICAgICAgICB9LA0KICAgICAgICB9Ow0KDQogICAgICAgIC8qIFBBR0lOQVMgZGEgRkFUVVJBICovDQogICAgICAgIGZ1bmN0aW9uIFBhZyh0aXR1bG8sIGl0ZW5zLCBpbWFnZW0pIHsNCiAgICAgICAgICB0aGlzLmluaXQodGl0dWxvLCBpdGVucywgaW1hZ2VtKTsNCiAgICAgICAgfQ0KICAgICAgICBQYWcucHJvdG90eXBlID0gew0KICAgICAgICAgIGluaXQ6IGZ1bmN0aW9uICh0aXR1bG8sIGl0ZW5zLCBpbWFnZW0pIHsNCiAgICAgICAgICAgIHRoaXMudGl0dWxvID0gdGl0dWxvOw0KICAgICAgICAgICAgdGhpcy5pdGVucyA9IGl0ZW5zOw0KICAgICAgICAgICAgdGhpcy5pbWFnZW0gPSBpbWFnZW07DQogICAgICAgICAgfSwNCiAgICAgICAgfTsNCg0KICAgICAgICAvKiBwcm9wcmllZGFkZXMgYm9sYSAvIHJlY3QgKi8NCiAgICAgICAgZnVuY3Rpb24gQXJlYVByb3BzKA0KICAgICAgICAgIHhCb2xhLA0KICAgICAgICAgIHlCb2xhLA0KICAgICAgICAgIHhSZWN0LA0KICAgICAgICAgIHlSZWN0LA0KICAgICAgICAgIHdSZWN0LA0KICAgICAgICAgIGhSZWN0LA0KICAgICAgICAgIHhQb3AsDQogICAgICAgICAgeVBvcA0KICAgICAgICApIHsNCiAgICAgICAgICB0aGlzLmluaXQoeEJvbGEsIHlCb2xhLCB4UmVjdCwgeVJlY3QsIHdSZWN0LCBoUmVjdCwgeFBvcCwgeVBvcCk7DQogICAgICAgIH0NCiAgICAgICAgQXJlYVByb3BzLnByb3RvdHlwZSA9IHsNCiAgICAgICAgICBpbml0OiBmdW5jdGlvbiAoDQogICAgICAgICAgICB4Qm9sYSwNCiAgICAgICAgICAgIHlCb2xhLA0KICAgICAgICAgICAgeFJlY3QsDQogICAgICAgICAgICB5UmVjdCwNCiAgICAgICAgICAgIHdSZWN0LA0KICAgICAgICAgICAgaFJlY3QsDQogICAgICAgICAgICB4UG9wLA0KICAgICAgICAgICAgeVBvcA0KICAgICAgICAgICkgew0KICAgICAgICAgICAgdGhpcy54Qm9sYSA9IHhCb2xhOw0KICAgICAgICAgICAgdGhpcy55Qm9sYSA9IHlCb2xhOw0KICAgICAgICAgICAgdGhpcy54UmVjdCA9IHhSZWN0Ow0KICAgICAgICAgICAgdGhpcy55UmVjdCA9IHlSZWN0Ow0KICAgICAgICAgICAgdGhpcy53UmVjdCA9IHdSZWN0Ow0KICAgICAgICAgICAgdGhpcy5oUmVjdCA9IGhSZWN0Ow0KICAgICAgICAgICAgdGhpcy54UG9wID0geFBvcDsNCiAgICAgICAgICAgIHRoaXMueVBvcCA9IHlQb3A7DQogICAgICAgICAgfSwNCiAgICAgICAgfTsNCg0KICAgICAgICAvKiBJVEVNUyAqLw0KICAgICAgICBmdW5jdGlvbiBJdGVtcyh0aXR1bG8sIHRpdHVsb0JhbGFvLCBkZXNjcmljYW8sIGFyZWFQcm9wcywgbGlua3MpIHsNCiAgICAgICAgICB0aGlzLmluaXQodGl0dWxvLCB0aXR1bG9CYWxhbywgZGVzY3JpY2FvLCBhcmVhUHJvcHMsIGxpbmtzKTsNCiAgICAgICAgfQ0KICAgICAgICBJdGVtcy5wcm90b3R5cGUgPSB7DQogICAgICAgICAgaW5pdDogZnVuY3Rpb24gKHRpdHVsbywgdGl0dWxvQmFsYW8sIGRlc2NyaWNhbywgYXJlYVByb3BzLCBsaW5rcykgew0KICAgICAgICAgICAgdGhpcy50aXR1bG8gPSB0aXR1bG87DQogICAgICAgICAgICB0aGlzLnRpdHVsb0JhbGFvID0gdGl0dWxvQmFsYW87DQogICAgICAgICAgICB0aGlzLmRlc2NyaWNhbyA9IGRlc2NyaWNhbzsNCiAgICAgICAgICAgIHRoaXMuYXJlYVByb3BzID0gYXJlYVByb3BzOw0KICAgICAgICAgICAgdGhpcy5saW5rcyA9IGxpbmtzOw0KICAgICAgICAgIH0sDQogICAgICAgIH07DQoNCiAgICAgICAgLyogTElOS1MgKi8NCiAgICAgICAgZnVuY3Rpb24gTGlua2UodHlwZSwgdGV4dG8sIGhyZWYpIHsNCiAgICAgICAgICB0aGlzLmluaXQodHlwZSwgdGV4dG8sIGhyZWYpOw0KICAgICAgICB9DQogICAgICAgIExpbmtlLnByb3RvdHlwZSA9IHsNCiAgICAgICAgICBpbml0OiBmdW5jdGlvbiAodHlwZSwgdGV4dG8sIGhyZWYpIHsNCiAgICAgICAgICAgIHRoaXMudHlwZSA9IHR5cGU7DQogICAgICAgICAgICB0aGlzLnRleHRvID0gdGV4dG87DQogICAgICAgICAgICB0aGlzLmhyZWYgPSBocmVmOw0KICAgICAgICAgIH0sDQogICAgICAgIH07DQoNCiAgICAgICAgLyogbGlua3MgKi8NCiAgICAgICAgdmFyIGl0ZW5zID0gW107DQogICAgICAgIHZhciBsaW5rZXMgPSBbXTsNCiAgICAgICAgdmFyIHBhZ3MgPSBbXTsNCiAgICAgICAgdmFyIGZhdHMgPSBbXTsNCiAgICAgICAgdmFyIHRhYnMgPSBbXTsNCiAgICAgICAgdmFyIHByb3BzOw0KDQogICAgICAgIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCiAgICAgICAgLyogSU5JQ0lPIERPUyAgREFET1MgKi8NCiAgICAgICAgLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KDQogICAgICAgIC8qICMjIyMjIyMjIyMjIyMjIyBGQVRVUkEgMcK6IEZBVFVSQSBQQUNPVEUgIyMjIyMjIyMjIyMjIyMjKi8NCiAgICAgICAgLyogIyMjIyMjIyMjIyMjIyMjIEZBVFVSQSAxwrogRkFUVVJBIFBBQ09URSAjIyMjIyMjIyMjIyMjIyMqLw0KICAgICAgICAvKiAjIyMjIyMjIyMjIyMjIyMgRkFUVVJBIDHCuiBGQVRVUkEgUEFDT1RFICMjIyMjIyMjIyMjIyMjIyovDQoNCiAgICAgICAgLy9odHRwczovL3JkMy52aWRlb3Muc2Fwby5wdC9wbGF5aHRtbD9maWxlPWh0dHBzOi8vcmQzLnZpZGVvcy5zYXBvLnB0L2tHak5UcnBPTE1ZcnpGeThDeVlaL21vdi8xJmFtcDtxdWFsaXR5PXNkDQoNCiAgICAgICAgLy8gMSDDgXJlYSBkZSBDbGllbnRlDQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIsOBcmVhIGRlIENsaWVudGUiLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvcHJvZHV0b3MtbWVvL2dlcmlyLXByb2R1dG9zL2FyZWEtZGUtY2xpZW50ZSINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIkNvbnN1bHRhciBmYXR1cmEgbm8gUEMiLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvZmF0dXJhcy1wYWdhbWVudG9zLWUtY2FycmVnYW1lbnRvcy9mYXR1cmFzL2NvbnN1bHRhci1hLXN1YS1mYXR1cmEjY29uc3VsdGFyZmF0dXJhYXJlYWRlY2xpZW50ZSINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIkNvbnN1bHRhciBmYXR1cmEgbmEgVFYiLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvZmF0dXJhcy1wYWdhbWVudG9zLWUtY2FycmVnYW1lbnRvcy9mYXR1cmFzL2NvbnN1bHRhci1hLXN1YS1mYXR1cmEjY29uc3VsdGFyZmF0dXJhdHYiDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJWYW50YWdlbnMgZGUgYWRlcmlyIMOgIMOBcmVhIGRlIENsaWVudGUiLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvcHJvZHV0b3MtbWVvL2dlcmlyLXByb2R1dG9zL2FyZWEtZGUtY2xpZW50ZSN2YW50YWdlbnNkZWFkZXJpcmFyZWFkZWNsaWVudGUiDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBwcm9wcyA9IG5ldyBBcmVhUHJvcHMoDQogICAgICAgICAgNDguNDYsDQogICAgICAgICAgNi44OCwNCiAgICAgICAgICA1Mi45LA0KICAgICAgICAgIDQuOTUsDQogICAgICAgICAgMjIuNywNCiAgICAgICAgICA3LjUsDQogICAgICAgICAgImNlbnRlciIsDQogICAgICAgICAgImJvdHRvbSINCiAgICAgICAgKTsNCiAgICAgICAgaXRlbnMucHVzaCgNCiAgICAgICAgICBuZXcgSXRlbXMoDQogICAgICAgICAgICAiw4FyZWEgZGUgQ2xpZW50ZSIsDQogICAgICAgICAgICAiw4FyZWEgZGUgQ2xpZW50ZSIsDQogICAgICAgICAgICAnQ29uc3VsdGUgbyBkZXRhbGhlIGRhIHN1YSBmYXR1cmEsIGF0aXZlIHNlcnZpw6dvcyBlIG11aXRvIG1haXMgZW0gPGEgaHJlZj0iaHR0cDovL3d3dy5tZW8ucHQiPm1lby5wdDwvYT4gb3Ugbm8gbWVudSBkYSBzdWEgdGVsZXZpc8OjbycsDQogICAgICAgICAgICBwcm9wcywNCiAgICAgICAgICAgIGxpbmtlcw0KICAgICAgICAgICkNCiAgICAgICAgKTsNCg0KICAgICAgICAvLyBMSU1QQSBEQURPUw0KICAgICAgICBsaW5rZXMgPSBbXTsNCiAgICAgICAgcHJvcHMgPSAiIjsNCiAgICAgICAgLy8gIyMjIyBBRElDSU9OQSBOT1ZBIEJPTEENCg0KICAgICAgICAvLyAyIGRhZG9zIGRvIGNsaWVudGUNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiQ29uc3VsdGFyIGRhZG9zIGRlIGNsaWVudGUiLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvcHJvZHV0b3MtbWVvL2dlcmlyLXByb2R1dG9zL2RhZG9zLWRlLWFjZXNzby1hLXNpdGVzLWUtYXBwcyN2ZXJucmRlY2xpZW50ZWVucmRlY29udGFuYWFyZWFkZWNsaWVudGUiDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJSZWdpc3RvIG5hIMOBcmVhIGRlIENsaWVudGUiLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvcHJvZHV0b3MtbWVvL2dlcmlyLXByb2R1dG9zL2FyZWEtZGUtY2xpZW50ZSNyZWdpc3RvbmFhcmVhZGVjbGllbnRlIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgcHJvcHMgPSBuZXcgQXJlYVByb3BzKDkuMTksIDEyLjUsIDExLCAxMSwgMzAsIDExLCAicmlnaHQiLCAibWlkZGxlIik7DQogICAgICAgIGl0ZW5zLnB1c2goDQogICAgICAgICAgbmV3IEl0ZW1zKA0KICAgICAgICAgICAgIkRhZG9zIGRlIENsaWVudGUiLA0KICAgICAgICAgICAgIkRhZG9zIGRlIENsaWVudGUiLA0KICAgICAgICAgICAgIlRlbmhhIG9zIHNldXMgPHN0cm9uZz5kYWRvcyBkZSBjbGllbnRlPC9zdHJvbmc+IMOgIG3Do28sIHNlbXByZSBxdWUgbm9zIGNvbnRhY3RhciIsDQogICAgICAgICAgICBwcm9wcywNCiAgICAgICAgICAgIGxpbmtlcw0KICAgICAgICAgICkNCiAgICAgICAgKTsNCg0KICAgICAgICAvLyBMSU1QQSBEQURPUw0KICAgICAgICBsaW5rZXMgPSBbXTsNCiAgICAgICAgcHJvcHMgPSAiIjsNCiAgICAgICAgLy8gIyMjIyBBRElDSU9OQSBOT1ZBIEJPTEENCg0KICAgICAgICAvLyAzIHJlc3VtbyBkYSBmYXR1cmENCiAgICAgICAgLy9saW5rZXMucHVzaChuZXcgTGlua2UoJ3VybCcsJ0NvbXByZWVuZGVyIGEgc3VhIDHCqiBmYXR1cmEgKHBhY290ZSBjb20gdGVsZW3Ds3ZlbCkgLSB2w61kZW8nLCdodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL2ZhdHVyYXMtcGFnYW1lbnRvcy1lLWNhcnJlZ2FtZW50b3MvZmF0dXJhcy9jb21wcmVlbmRlci1hLWZhdHVyYSN2aWRlb19jb21wcmVlbmRlcjFhZmF0dXJhcGFjb3RlY29tdGVsZW1vdmVsJykpOw0KICAgICAgICAvLyBFTSBNT0RBTCBuZXcgTGlua2UoJ3ZpZGVvJw0KICAgICAgICAvL2h0dHBzOi8vd3d3Lm1lby5wdC9QdWJsaXNoaW5nSW1hZ2VzL3ZpZGVvcy9hanVkYS9Db25oZWNhLW1lbGhvci1hLXN1YS0xYS1mYXR1cmEvQ29uaGVjYS1tZWxob3ItYS1zdWEtMWEtZmF0dXJhLm1wNCcpKTsNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiQ29tcHJlZW5kZXIgdmFsb3IgZGUgZmF0dXJhIHN1cGVyaW9yIGFvIGVzcGVyYWRvIiwNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL2ZhdHVyYXMtcGFnYW1lbnRvcy1lLWNhcnJlZ2FtZW50b3MvZmF0dXJhcy9jb21wcmVlbmRlci1hLWZhdHVyYSNmYXR1cmF2YWxvcnN1cGVyaW9yYW9lc3BlcmFkbyINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIC8vIEVNIE1PREFMDQogICAgICAgIC8vJ2h0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvZmF0dXJhcy1wYWdhbWVudG9zLWUtY2FycmVnYW1lbnRvcy9mYXR1cmFzL2NvbXByZWVuZGVyLWEtZmF0dXJhI2ZhdHVyYXZhbG9yc3VwZXJpb3Jhb2VzcGVyYWRvJykpOw0KICAgICAgICBwcm9wcyA9IG5ldyBBcmVhUHJvcHMoDQogICAgICAgICAgOS4xOSwNCiAgICAgICAgICAzMS4zNiwNCiAgICAgICAgICAxMC4wNywNCiAgICAgICAgICAyNy45OSwNCiAgICAgICAgICA4Ni4wMSwNCiAgICAgICAgICAyNC40NiwNCiAgICAgICAgICAiY2VudGVyIiwNCiAgICAgICAgICAidG9wIg0KICAgICAgICApOw0KICAgICAgICBpdGVucy5wdXNoKA0KICAgICAgICAgIG5ldyBJdGVtcygNCiAgICAgICAgICAgICJSZXN1bW8gZGEgRmF0dXJhIiwNCiAgICAgICAgICAgICJSZXN1bW8gZGEgRmF0dXJhIiwNCiAgICAgICAgICAgICJBcXVpIHBvZGUgdmVyIG8gcmVzdW1vIGRhIHN1YSBmYXR1cmEsIG8gbcOqcyBhIHF1ZSBjb3JyZXNwb25kZSwgZGF0YSBsaW1pdGUgcGFyYSBwYWdhbWVudG8gZSB2YWxvciBhIHBhZ2FyIiwNCiAgICAgICAgICAgIHByb3BzLA0KICAgICAgICAgICAgbGlua2VzDQogICAgICAgICAgKQ0KICAgICAgICApOw0KDQogICAgICAgIC8vIExJTVBBIERBRE9TDQogICAgICAgIGxpbmtlcyA9IFtdOw0KICAgICAgICBwcm9wcyA9ICIiOw0KICAgICAgICAvLyAjIyMjIEFESUNJT05BIE5PVkEgQk9MQQ0KDQogICAgICAgIC8qIG5ldyBpdGVtICovDQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIkNvbXByZWVuZGVyIHZhbG9yIGRlIGZhdHVyYSBzdXBlcmlvciBhbyBlc3BlcmFkbyIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9mYXR1cmFzLXBhZ2FtZW50b3MtZS1jYXJyZWdhbWVudG9zL2ZhdHVyYXMvY29tcHJlZW5kZXItYS1mYXR1cmEjZmF0dXJhdmFsb3JzdXBlcmlvcmFvZXNwZXJhZG8iDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICAvL2xpbmtlcy5wdXNoKG5ldyBMaW5rZSgndXJsJywnQ29tcHJlZW5kZXIgYSBzdWEgMcKqIGZhdHVyYSAocGFjb3RlIGNvbSB0ZWxlbcOzdmVsKSAtIHbDrWRlbycsJ2h0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvZmF0dXJhcy1wYWdhbWVudG9zLWUtY2FycmVnYW1lbnRvcy9mYXR1cmFzL2NvbXByZWVuZGVyLWEtZmF0dXJhI2ZhdHVyYXZhbG9yc3VwZXJpb3Jhb2VzcGVyYWRvJykpOw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJDb21vIHBhZ2FyIGEgc3VhIGZhdHVyYT8iLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvZmF0dXJhcy1wYWdhbWVudG9zLWUtY2FycmVnYW1lbnRvcy9wYWdhbWVudG9zL3BhZ2FyLWZhdHVyYSINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIC8vIEVNIE1PREFMDQogICAgICAgIC8vJ2h0dHBzOi8vd3d3Lm1lby5wdC9QdWJsaXNoaW5nSW1hZ2VzL3ZpZGVvcy9hanVkYS9Db25oZWNhLW1lbGhvci1hLXN1YS0xYS1mYXR1cmEvQ29uaGVjYS1tZWxob3ItYS1zdWEtMWEtZmF0dXJhLm1wNCcpKTsNCiAgICAgICAgcHJvcHMgPSBuZXcgQXJlYVByb3BzKA0KICAgICAgICAgIDkuMTksDQogICAgICAgICAgNTAuMiwNCiAgICAgICAgICAxMC4wNywNCiAgICAgICAgICA0OCwNCiAgICAgICAgICA4Ni4wMSwNCiAgICAgICAgICA0LjEsDQogICAgICAgICAgImNlbnRlciIsDQogICAgICAgICAgInRvcCINCiAgICAgICAgKTsNCiAgICAgICAgaXRlbnMucHVzaCgNCiAgICAgICAgICBuZXcgSXRlbXMoDQogICAgICAgICAgICAiVmFsb3IgYSBQYWdhciIsDQogICAgICAgICAgICAiVmFsb3IgYSBQYWdhciIsDQogICAgICAgICAgICAiQSBzdWEgMcKqIGZhdHVyYSBwb2RlIG7Do28gY29ycmVzcG9uZGVyIGEgdW0gbcOqcyBjb21wbGV0byBwb2lzIGNvbWXDp2Egbm8gZGlhIGRhIGluc3RhbGHDp8OjbyBlIHRlcm1pbmEgbm8gZmluYWwgZG8gcGVyw61vZG8gZGUgZmF0dXJhw6fDo28uIE5hcyBwcsOzeGltYXMgZmF0dXJhcyBpc3NvIGrDoSBuw6NvIGFjb250ZWNlcsOhISIsDQogICAgICAgICAgICBwcm9wcywNCiAgICAgICAgICAgIGxpbmtlcw0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgLy8gTElNUEEgREFET1MNCiAgICAgICAgbGlua2VzID0gW107DQogICAgICAgIHByb3BzID0gIiI7DQogICAgICAgIC8vICMjIyMgQURJQ0lPTkEgTk9WQSBCT0xBDQoNCiAgICAgICAgLy8gbmV3IGl0ZW0gIChyZW1vdmlkbyBwb2lzIG5hbyBhcGFyZWNlIG5vIHBkZi9pbWFnZW0gZGEgZmF0dXJhDQogICAgICAgIC8qCWxpbmtlcyA9IFtdOyAvLyBFU1RFIElURU0gTkFPIFRFTSBMSU5LUw0KICAgICAgICAgIHByb3BzID0gbmV3IEFyZWFQcm9wcyg2LjMxLCA3MC44MSwgMTAuMDcsIDY4LjY0LCA4Ni4wMSwgNS41NSwgJ2NlbnRlcicsJ3RvcCcpOw0KICAgICAgICAgIGl0ZW5zLnB1c2gobmV3IEl0ZW1zKCdQcm9tb8Onw7VlcyBlIE5vdmlkYWRlcycsJ1Byb21vw6fDtWVzIGUgTm92aWRhZGVzJywnRmlxdWUgYXRlbnRvIMOgcyBwcm9tb8Onw7VlcyBlIG5vdmlkYWRlcyBxdWUgdGVtb3MgcGFyYSBzaScscHJvcHMsbGlua2VzKSk7DQogICAgICAgICAgbGlua2VzID0gW107DQogICAgICAgICAgcHJvcHMgPSAiIjsNCiAgICAgICAgKi8NCg0KICAgICAgICAvKiBuZXcgaXRlbSAqLw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJQYWdhciBGYXR1cmFzIG5hIMOBcmVhIGRlIENsaWVudGUiLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvZmF0dXJhcy1wYWdhbWVudG9zLWUtY2FycmVnYW1lbnRvcy9wYWdhbWVudG9zL3BhZ2FyLWZhdHVyYSNwYWdhcmZhdHVyYXNhcmVhZGVjbGllbnRlIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiUGFnYXIgRmF0dXJhcyBwb3IgRMOpYml0byBEaXJldG8iLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvZmF0dXJhcy1wYWdhbWVudG9zLWUtY2FycmVnYW1lbnRvcy9wYWdhbWVudG9zL3BhZ2FyLWZhdHVyYSNwYWdhcmZhdHVyYXNwb3JkZWJpdG9kaXJldG8iDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJWYW50YWdlbnMgZG8gRMOpYml0byBEaXJldG8iLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvZmF0dXJhcy1wYWdhbWVudG9zLWUtY2FycmVnYW1lbnRvcy9wYWdhbWVudG9zL2RlYml0by1kaXJldG8jdmFudGFnZW5zZGViaXRvZGlyZXRvIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiUGFnYXIgRmF0dXJhcyBwb3IgTXVsdGliYW5jbyIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9mYXR1cmFzLXBhZ2FtZW50b3MtZS1jYXJyZWdhbWVudG9zL3BhZ2FtZW50b3MvcGFnYXItZmF0dXJhI3BhZ2FyZmF0dXJhc25vbXVsdGliYW5jbyINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIkZhdHVyYSBlbGV0csOzbmljYSIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9mYXR1cmFzLXBhZ2FtZW50b3MtZS1jYXJyZWdhbWVudG9zL2ZhdHVyYS1lbGV0cm9uaWNhL3ZhbnRhZ2Vucy1lLWFkZXNhbyINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIHByb3BzID0gbmV3IEFyZWFQcm9wcygNCiAgICAgICAgICA5LjE5LA0KICAgICAgICAgIDc2Ljc3LA0KICAgICAgICAgIDExLjUsDQogICAgICAgICAgNzQuNDMsDQogICAgICAgICAgODQsDQogICAgICAgICAgMTkuOSwNCiAgICAgICAgICAiY2VudGVyIiwNCiAgICAgICAgICAidG9wIg0KICAgICAgICApOw0KICAgICAgICBpdGVucy5wdXNoKA0KICAgICAgICAgIG5ldyBJdGVtcygNCiAgICAgICAgICAgICJNb2RhbGlkYWRlcyBkZSBQYWdhbWVudG8iLA0KICAgICAgICAgICAgIk1vZGFsaWRhZGVzIGRlIFBhZ2FtZW50byIsDQogICAgICAgICAgICAiVHVkbyBvIHF1ZSBwcmVjaXNhIHBhcmEgcGFnYXIgYSBzdWEgZmF0dXJhIGVzdMOhIGFxdWkhIFBhcmEgc3VhIGNvbnZlbmnDqm5jaWEsIDxzdHJvbmc+YXRpdmUgbyBEw6liaXRvIERpcmV0byBkZSBmb3JtYSBncmF0dWl0YTwvc3Ryb25nPiBuYSBzdWEgw4FyZWEgZGUgQ2xpZW50ZS4gU2UgcGFnYXIgcG9yIE1CLCA8c3Ryb25nPnNhaWJhIHF1ZSBhIGVudGlkYWRlIGUgcmVmZXLDqm5jaWEgc8OjbyBzZW1wcmUgaWd1YWlzPC9zdHJvbmc+IGVtIHRvZGFzIGFzIGZhdHVyYXMuIiwNCiAgICAgICAgICAgIHByb3BzLA0KICAgICAgICAgICAgbGlua2VzDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICAvLyBMSU1QQSBEQURPUw0KICAgICAgICBsaW5rZXMgPSBbXTsNCiAgICAgICAgcHJvcHMgPSAiIjsNCiAgICAgICAgLy8gIyMjIyBBRElDSU9OQSBOT1ZBIEJPTEENCg0KICAgICAgICAvKiBuZXcgaXRlbSAqLw0KICAgICAgICAvLyBmaW5hbG1lbnRlIGFkaWNpb25hciB0dWRvIGEgZXN0YSBww6FnaW5hDQogICAgICAgIHBhZ3MucHVzaCgNCiAgICAgICAgICBuZXcgUGFnKA0KICAgICAgICAgICAgIlDDoWdpbmEgMSIsDQogICAgICAgICAgICBpdGVucywNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvUHVibGlzaGluZ0ltYWdlcy9wYWdpbmFzL19mYXR1cmFfaW50ZXJhdGl2YS8xRmF0dXJhX0ZpeG9fUGFnZV8xLnBuZyINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGl0ZW5zID0gW107DQoNCiAgICAgICAgLy8gYWdvcmEgY3JpYXIgYSBvdXRyYSBww6FnaW5hLi4uOg0KICAgICAgICAvLyBhZ29yYSBjcmlhciBhIG91dHJhIHDDoWdpbmEuLi46DQogICAgICAgIC8vIGFnb3JhIGNyaWFyIGEgb3V0cmEgcMOhZ2luYS4uLjoNCiAgICAgICAgLy8gYWdvcmEgY3JpYXIgYSBvdXRyYSBww6FnaW5hLi4uOg0KDQogICAgICAgIC8qIG5ldyBpdGVtICovDQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIkNvbmhlY2VyIG9zIHBhY290ZXMgTUVPIiwNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL3Byb2R1dG9zLW1lby9wYWNvdGVzL3BhY290ZXMtbWVvI2NvbmhlY2Vyb3NwYWNvdGVzbWVvIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiQ29tcHJlZW5kZXIgdmFsb3IgZGUgZmF0dXJhIHN1cGVyaW9yIGFvIGVzcGVyYWRvIiwNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL2ZhdHVyYXMtcGFnYW1lbnRvcy1lLWNhcnJlZ2FtZW50b3MvZmF0dXJhcy9jb21wcmVlbmRlci1hLWZhdHVyYSNmYXR1cmF2YWxvcnN1cGVyaW9yYW9lc3BlcmFkbyINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIk9mZXJ0YXMgZGUgYWRlc8OjbyBhb3MgcGFjb3RlcyBNRU8iLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvcHJvZHV0b3MtbWVvL3BhY290ZXMvcGFjb3Rlcy1tZW8jb2ZlcnRhc2FkZXNhb3BhY290ZXNtZW8iDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBwcm9wcyA9IG5ldyBBcmVhUHJvcHMoDQogICAgICAgICAgOS4xOSwNCiAgICAgICAgICAyMC4zOSwNCiAgICAgICAgICAxMS41LA0KICAgICAgICAgIDE4LjU4LA0KICAgICAgICAgIDg0LjY0LA0KICAgICAgICAgIDE0LjM1LA0KICAgICAgICAgICJjZW50ZXIiLA0KICAgICAgICAgICJib3R0b20iDQogICAgICAgICk7DQogICAgICAgIGl0ZW5zLnB1c2goDQogICAgICAgICAgbmV3IEl0ZW1zKA0KICAgICAgICAgICAgIkFkZXPDtWVzIiwNCiAgICAgICAgICAgICJBZGVzw7VlcyIsDQogICAgICAgICAgICAiSW5zdGFsYcOnw6NvIGUgYXRpdmHDp8OjbyBkbyBzZXJ2acOnbywgYmVtIGNvbW8gb3MgcmVzdGFudGVzIHNlcnZpw6dvcyBhdGl2YWRvcyBlIGV2ZW50dWFpcyBvZmVydGFzIiwNCiAgICAgICAgICAgIHByb3BzLA0KICAgICAgICAgICAgbGlua2VzDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICAvLyBMSU1QQSBEQURPUw0KICAgICAgICBsaW5rZXMgPSBbXTsNCiAgICAgICAgcHJvcHMgPSAiIjsNCiAgICAgICAgLy8gIyMjIyBBRElDSU9OQSBOT1ZBIEJPTEENCg0KICAgICAgICAvKiBuZXcgaXRlbSAqLw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJDb25oZWNlciBvcyBwYWNvdGVzIE1FTyIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9wcm9kdXRvcy1tZW8vcGFjb3Rlcy9wYWNvdGVzLW1lbyNjb25oZWNlcm9zcGFjb3Rlc21lbyINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIkNvbXByZWVuZGVyIHZhbG9yIGRlIGZhdHVyYSBzdXBlcmlvciBhbyBlc3BlcmFkbyIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9mYXR1cmFzLXBhZ2FtZW50b3MtZS1jYXJyZWdhbWVudG9zL2ZhdHVyYXMvY29tcHJlZW5kZXItYS1mYXR1cmEjZmF0dXJhdmFsb3JzdXBlcmlvcmFvZXNwZXJhZG8iDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBwcm9wcyA9IG5ldyBBcmVhUHJvcHMoDQogICAgICAgICAgOS4xOSwNCiAgICAgICAgICAzNy42NCwNCiAgICAgICAgICAxMS41LA0KICAgICAgICAgIDMzLjMsDQogICAgICAgICAgODQuNjQsDQogICAgICAgICAgMTIuMywNCiAgICAgICAgICAiY2VudGVyIiwNCiAgICAgICAgICAidG9wIg0KICAgICAgICApOw0KICAgICAgICBpdGVucy5wdXNoKA0KICAgICAgICAgIG5ldyBJdGVtcygNCiAgICAgICAgICAgICJNZW5zYWxpZGFkZXMgZG8gU2VydmnDp28iLA0KICAgICAgICAgICAgIk1lbnNhbGlkYWRlcyBkbyBTZXJ2acOnbyIsDQogICAgICAgICAgICAiTWVuc2FsaWRhZGUgZG8gc2V1IHBhY290ZSBlIGRlc2NvbnRvcyBxdWUgcG9zc2EgdGVyIGF0cmlidcOtZG9zIiwNCiAgICAgICAgICAgIHByb3BzLA0KICAgICAgICAgICAgbGlua2VzDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICAvLyBMSU1QQSBEQURPUw0KICAgICAgICBsaW5rZXMgPSBbXTsNCiAgICAgICAgcHJvcHMgPSAiIjsNCiAgICAgICAgLy8gIyMjIyBBRElDSU9OQSBOT1ZBIEJPTEENCg0KICAgICAgICAvKiBuZXcgaXRlbSAqLw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJDb25oZWNlciBvcyBwYWNvdGVzIE1FTyIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9wcm9kdXRvcy1tZW8vcGFjb3Rlcy9wYWNvdGVzLW1lbyNjb25oZWNlcm9zcGFjb3Rlc21lbyINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIkNvbXByZWVuZGVyIHZhbG9yIGRlIGZhdHVyYSBzdXBlcmlvciBhbyBlc3BlcmFkbyIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9mYXR1cmFzLXBhZ2FtZW50b3MtZS1jYXJyZWdhbWVudG9zL2ZhdHVyYXMvY29tcHJlZW5kZXItYS1mYXR1cmEjZmF0dXJhdmFsb3JzdXBlcmlvcmFvZXNwZXJhZG8iDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBwcm9wcyA9IG5ldyBBcmVhUHJvcHMoDQogICAgICAgICAgOS4xOSwNCiAgICAgICAgICA0Ni41NiwNCiAgICAgICAgICAxMS41LA0KICAgICAgICAgIDQ1LjM2LA0KICAgICAgICAgIDg0LjY0LA0KICAgICAgICAgIDguNTUsDQogICAgICAgICAgImNlbnRlciIsDQogICAgICAgICAgInRvcCINCiAgICAgICAgKTsNCiAgICAgICAgaXRlbnMucHVzaCgNCiAgICAgICAgICBuZXcgSXRlbXMoDQogICAgICAgICAgICAiTWVuc2FsaWRhZGVzIFRlbGV2aXPDo28iLA0KICAgICAgICAgICAgIk1lbnNhbGlkYWRlcyBUZWxldmlzw6NvIiwNCiAgICAgICAgICAgICJNZW5zYWxpZGFkZSBkZSBjYW5haXMgYWRpY2lvbmFpcyBxdWUgdGVuaGEgc3Vic2NyaXRvIiwNCiAgICAgICAgICAgIHByb3BzLA0KICAgICAgICAgICAgbGlua2VzDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICAvLyBMSU1QQSBEQURPUw0KICAgICAgICBsaW5rZXMgPSBbXTsNCiAgICAgICAgcHJvcHMgPSAiIjsNCiAgICAgICAgLy8gIyMjIyBBRElDSU9OQSBOT1ZBIEJPTEENCg0KICAgICAgICAvKiBuZXcgaXRlbSAqLw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJDb25oZWNlciBvcyBwYWNvdGVzIE1FTyIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9wcm9kdXRvcy1tZW8vcGFjb3Rlcy9wYWNvdGVzLW1lbyNjb25oZWNlcm9zcGFjb3Rlc21lbyINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIkNvbXByZWVuZGVyIHZhbG9yIGRlIGZhdHVyYSBzdXBlcmlvciBhbyBlc3BlcmFkbyIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9mYXR1cmFzLXBhZ2FtZW50b3MtZS1jYXJyZWdhbWVudG9zL2ZhdHVyYXMvY29tcHJlZW5kZXItYS1mYXR1cmEjZmF0dXJhdmFsb3JzdXBlcmlvcmFvZXNwZXJhZG8iDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBwcm9wcyA9IG5ldyBBcmVhUHJvcHMoDQogICAgICAgICAgOS4xOSwNCiAgICAgICAgICA1NS45NywNCiAgICAgICAgICAxMS41LA0KICAgICAgICAgIDU0LjA0LA0KICAgICAgICAgIDg0LjY0LA0KICAgICAgICAgIDUuODUsDQogICAgICAgICAgImNlbnRlciIsDQogICAgICAgICAgInRvcCINCiAgICAgICAgKTsNCiAgICAgICAgaXRlbnMucHVzaCgNCiAgICAgICAgICBuZXcgSXRlbXMoDQogICAgICAgICAgICAiTWVuc2FsaWRhZGVzIFRlbGVtw7N2ZWwiLA0KICAgICAgICAgICAgIk1lbnNhbGlkYWRlcyBUZWxlbcOzdmVsIiwNCiAgICAgICAgICAgICJBcGVuYXMgcGFyYSBzZXJ2acOnb3MgY29tIHRlbGVtw7N2ZWlzOiBtZW5zYWxpZGFkZXMgZG8gM8K6IGUvb3UgNMK6IGNhcnTDtWVzIGUgZXZlbnR1YWlzIGRlc2NvbnRvcyIsDQogICAgICAgICAgICBwcm9wcywNCiAgICAgICAgICAgIGxpbmtlcw0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgLy8gTElNUEEgREFET1MNCiAgICAgICAgbGlua2VzID0gW107DQogICAgICAgIHByb3BzID0gIiI7DQogICAgICAgIC8vICMjIyMgQURJQ0lPTkEgTk9WQSBCT0xBDQoNCiAgICAgICAgLyogbmV3IGl0ZW0gKi8NCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiQ29uaGVjZXIgb3MgcGFjb3RlcyBNRU8iLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvcHJvZHV0b3MtbWVvL3BhY290ZXMvcGFjb3Rlcy1tZW8jY29uaGVjZXJvc3BhY290ZXNtZW8iDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJDb21wcmEgb3UgYWx1Z3VlciBkZSBlcXVpcGFtZW50b3MiLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvcHJvZHV0b3MtbWVvL3BhY290ZXMvYWRlc2FvLWUtaW5zdGFsYWNhbyNjb21wcmFvdWFsdWd1ZXJkZWVxdWlwYW1lbnRvc25vc3BhY290ZXNtZW8iDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJNRU9Cb3hlcyBGaWJyYSwgQURTTCBlIFNhdMOpbGl0ZSIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9wcm9kdXRvcy1tZW8vcGFjb3Rlcy9hZGVzYW8tZS1pbnN0YWxhY2FvI21lb2JveGVzZmlicmFhZHNsZXNhdGVsaXRlIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgLypsaW5rZXMucHVzaChuZXcgTGlua2UoJ3VybCcsJ0NvbXByZWVuZGVyIHZhbG9yIGRlIGZhdHVyYSBzdXBlcmlvciBhbyBlc3BlcmFkbycsJ2h0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvZmF0dXJhcy1wYWdhbWVudG9zLWUtY2FycmVnYW1lbnRvcy9mYXR1cmFzL2NvbXByZWVuZGVyLWEtZmF0dXJhI2ZhdHVyYXZhbG9yc3VwZXJpb3Jhb2VzcGVyYWRvJykpOyovDQogICAgICAgIHByb3BzID0gbmV3IEFyZWFQcm9wcygNCiAgICAgICAgICA5LjE5LA0KICAgICAgICAgIDYxLjI4LA0KICAgICAgICAgIDExLjUsDQogICAgICAgICAgNTkuOTUsDQogICAgICAgICAgODQuNjQsDQogICAgICAgICAgMTAuMjUsDQogICAgICAgICAgImNlbnRlciIsDQogICAgICAgICAgInRvcCINCiAgICAgICAgKTsNCiAgICAgICAgaXRlbnMucHVzaCgNCiAgICAgICAgICBuZXcgSXRlbXMoDQogICAgICAgICAgICAiTWVuc2FsaWRhZGVzIEVxdWlwYW1lbnRvcyIsDQogICAgICAgICAgICAiTWVuc2FsaWRhZGVzIEVxdWlwYW1lbnRvcyIsDQogICAgICAgICAgICAiQWx1Z3VlciBtZW5zYWwgZGUgTUVPYm94IGUgZGVzY29udG9zIGFzc29jaWFkb3MiLA0KICAgICAgICAgICAgcHJvcHMsDQogICAgICAgICAgICBsaW5rZXMNCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIC8vIExJTVBBIERBRE9TDQogICAgICAgIGxpbmtlcyA9IFtdOw0KICAgICAgICBwcm9wcyA9ICIiOw0KICAgICAgICAvLyAjIyMjIEFESUNJT05BIE5PVkEgQk9MQQ0KDQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIlZhbnRhZ2VucyBkYSBmYXR1cmEgZWxldHLDs25pY2EiLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvZmF0dXJhcy1wYWdhbWVudG9zLWUtY2FycmVnYW1lbnRvcy9mYXR1cmEtZWxldHJvbmljYS92YW50YWdlbnMtZS1hZGVzYW8jdmFudGFnZW5zZGFmYXR1cmFlbGV0cm9uaWNhIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiQWRlcmlyIMOgIGZhdHVyYSBlbGV0csOzbmljYSBuYSDDgXJlYSBkZSBDbGllbnRlIiwNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL2ZhdHVyYXMtcGFnYW1lbnRvcy1lLWNhcnJlZ2FtZW50b3MvZmF0dXJhLWVsZXRyb25pY2EvdmFudGFnZW5zLWUtYWRlc2FvI2FkZXJpcmZhdHVyYWVsZXRyb25pY2FuYWFyZWFkZWNsaWVudGUiDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJBZGVyaXIgw6AgZmF0dXJhIGVsZXRyw7NuaWNhIG5hIFRWIiwNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL2ZhdHVyYXMtcGFnYW1lbnRvcy1lLWNhcnJlZ2FtZW50b3MvZmF0dXJhLWVsZXRyb25pY2EvdmFudGFnZW5zLWUtYWRlc2FvI2FkZXJpcmZhdHVyYWVsZXRyb25pY2FuYXR2Ig0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiVmFudGFnZW5zIGRvIGTDqWJpdG8gZGlyZXRvIiwNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL2ZhdHVyYXMtcGFnYW1lbnRvcy1lLWNhcnJlZ2FtZW50b3MvcGFnYW1lbnRvcy9kZWJpdG8tZGlyZXRvI3ZhbnRhZ2Vuc2RlYml0b2RpcmV0byINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIHByb3BzID0gbmV3IEFyZWFQcm9wcygNCiAgICAgICAgICA5LjE5LA0KICAgICAgICAgIDc2Ljk5LA0KICAgICAgICAgIDkuNDksDQogICAgICAgICAgNzQuOTEsDQogICAgICAgICAgNjEuMjEsDQogICAgICAgICAgMTEuMSwNCiAgICAgICAgICAiY2VudGVyIiwNCiAgICAgICAgICAidG9wIg0KICAgICAgICApOw0KICAgICAgICBpdGVucy5wdXNoKA0KICAgICAgICAgIG5ldyBJdGVtcygNCiAgICAgICAgICAgICJGYXR1cmEgRWxlY3Ryw7NuaWNhIiwNCiAgICAgICAgICAgICJGYXR1cmEgRWxldHLDs25pY2EiLA0KICAgICAgICAgICAgIlNlIGFpbmRhIG7Do28gdGVtIGZhdHVyYSBlbGV0csOzbmljYSBlIGTDqWJpdG8gZGlyZXRvLCBhZGlyYSBqw6EgbmEgw4FyZWEgZGUgQ2xpZW50ZSBlbSBtZW8ucHQgb3UgbmEgc3VhIFRWLiBTaW1wbGlmaXF1ZSBhIHN1YSB2aWRhLCBhanVkZSBvIGFtYmllbnRlIGUgdXN1ZnJ1YSBkZSBvZmVydGFzIGVzcGVjaWFpcy4iLA0KICAgICAgICAgICAgcHJvcHMsDQogICAgICAgICAgICBsaW5rZXMNCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIC8vIExJTVBBIERBRE9TDQogICAgICAgIGxpbmtlcyA9IFtdOw0KICAgICAgICBwcm9wcyA9ICIiOw0KICAgICAgICAvLyAjIyMjIEFESUNJT05BIE5PVkEgQk9MQQ0KDQogICAgICAgIC8qIG5ldyBpdGVtICovDQoNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInZpZGVvIiwNCiAgICAgICAgICAgICJWZXIgdmlkZW8iLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9QdWJsaXNoaW5nSW1hZ2VzL3ZpZGVvcy9hanVkYS9Db25oZWNhLW1lbGhvci1hLXN1YS0xYS1mYXR1cmEvQ29uaGVjYS1tZWxob3ItYS1zdWEtMWEtZmF0dXJhLm1wNCINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIHByb3BzID0gbmV3IEFyZWFQcm9wcygNCiAgICAgICAgICA2OS4wNiwNCiAgICAgICAgICA3Ni44NCwNCiAgICAgICAgICA2OS4yOCwNCiAgICAgICAgICA3NC42NywNCiAgICAgICAgICAyNi40NSwNCiAgICAgICAgICAxMS43LA0KICAgICAgICAgICJsZWZ0IiwNCiAgICAgICAgICAibWlkZGxlIg0KICAgICAgICApOw0KICAgICAgICAvL2l0ZW5zLnB1c2gobmV3IEl0ZW1zKCdRUiBDb2RlJywnUVIgQ29kZScsJ1NhaWJhIG1haXMgc29icmUgYSBzdWEgZmF0dXJhIGF0cmF2w6lzIGRlc3RlIFFSIENvZGUuJyxwcm9wcyxsaW5rZXMpKTsNCiAgICAgICAgaXRlbnMucHVzaCgNCiAgICAgICAgICBuZXcgSXRlbXMoDQogICAgICAgICAgICAiUVIgQ29kZSIsDQogICAgICAgICAgICAiUVIgQ29kZSIsDQogICAgICAgICAgICAiU2FpYmEgbWFpcyBzb2JyZSBhIHN1YSBmYXR1cmEgYXRyYXbDqXMgZGVzdGUgUVIgQ29kZS4iLA0KICAgICAgICAgICAgcHJvcHMsDQogICAgICAgICAgICAiIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgLy8gTElNUEEgREFET1MNCiAgICAgICAgbGlua2VzID0gW107DQogICAgICAgIHByb3BzID0gIiI7DQogICAgICAgIC8vICMjIyMgQURJQ0lPTkEgTk9WQSBCT0xBDQoNCiAgICAgICAgLyogKi8NCiAgICAgICAgLy8gREVQT0lTIERPIFVMVElNQSBJVEVNIERBIGZhdHVyYQ0KICAgICAgICAvLyBmaW5hbG1lbnRlIGFkaWNpb25hciB0dWRvIGEgZXN0YSBww6FnaW5hDQogICAgICAgIHBhZ3MucHVzaCgNCiAgICAgICAgICBuZXcgUGFnKA0KICAgICAgICAgICAgIlDDoWdpbmEgMiIsDQogICAgICAgICAgICBpdGVucywNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvUHVibGlzaGluZ0ltYWdlcy9wYWdpbmFzL19mYXR1cmFfaW50ZXJhdGl2YS8xRmF0dXJhX0ZpeG9fUGFnZV8yLnBuZyINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGl0ZW5zID0gW107DQoNCiAgICAgICAgLy8gYWdvcmEgY3JpYXIgYSBvdXRyYSBww6FnaW5hLi4uOg0KICAgICAgICAvLyBhZ29yYSBjcmlhciBhIG91dHJhIHDDoWdpbmEuLi46DQogICAgICAgIC8vIGFnb3JhIGNyaWFyIGEgb3V0cmEgcMOhZ2luYS4uLjoNCiAgICAgICAgLy8gYWdvcmEgY3JpYXIgYSBvdXRyYSBww6FnaW5hLi4uOg0KDQogICAgICAgIC8qIG5ldyBpdGVtICovDQogICAgICAgIC8vbGlua2VzLnB1c2gobmV3IExpbmtlKCd1cmwnLCdDb250cm9sbyBkZSBjdXN0b3MgZGUgcGFjb3RlcyBNRU8nLCdodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL3Byb2R1dG9zLW1lby9wYWNvdGVzL3BhY290ZXMtbWVvI2NvbnRyb2xvZGVjdXN0b3NwYWNvdGVzbWVvJykpOw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJDb25zdWx0YXIgZGV0YWxoZSBkZSBjb211bmljYcOnw7VlcyIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9mYXR1cmFzLXBhZ2FtZW50b3MtZS1jYXJyZWdhbWVudG9zL2ZhdHVyYXMvYWx0ZXJhci1kYWRvcy1kZS1mYXR1cmEjZGV0YWxoZWRlY29tdW5pY2Fjb2VzIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiQ29uc3VsdGFyIGNvbnN1bW9zIG1hcmNhbmRvICojMTIzIyIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9mYXR1cmFzLXBhZ2FtZW50b3MtZS1jYXJyZWdhbWVudG9zL2NvbnN1bW9zLWUtY29udHJvbG8tZGUtY3VzdG9zL2NvbnN1bHRhci1jb25zdW1vcyNjb25zdWx0YXJjb25zdW1vc3VzZCINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIkNvbnN1bW9zIGRlIGV4dHJhbWVuc2FsaWRhZGUgZSBzYWxkbyByZWNhcmdhIiwNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL2ZhdHVyYXMtcGFnYW1lbnRvcy1lLWNhcnJlZ2FtZW50b3MvY29uc3Vtb3MtZS1jb250cm9sby1kZS1jdXN0b3MvZXh0cmFtZW5zYWxpZGFkZSNjb25zdWx0YXJleHRyYW1lbnNhbGlkYWRlc2FsZG9yZWNhcmdhIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgLy8naHR0cHM6Ly93d3cubWVvLnB0L1B1Ymxpc2hpbmdJbWFnZXMvdmlkZW9zL2FqdWRhL1VubGltaXRlZC1Db250cm9sby1kZS1jdXN0b3MvVW5saW1pdGVkLUNvbnRyb2xvLWRlLWN1c3Rvcy5tcDQnKSk7DQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIkRldGFsaGUgZSBkYWRvcyBkZSBmYXR1cmEiLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvZmF0dXJhcy1wYWdhbWVudG9zLWUtY2FycmVnYW1lbnRvcy9mYXR1cmFzL2FsdGVyYXItZGFkb3MtZGUtZmF0dXJhIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiQWxlcnRhcyBkZSBjb25zdW1vIG5vIHRlbGVtw7N2ZWwiLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvZmF0dXJhcy1wYWdhbWVudG9zLWUtY2FycmVnYW1lbnRvcy9jb25zdW1vcy1lLWNvbnRyb2xvLWRlLWN1c3Rvcy9hbGVydGFzI2FsZXJ0YXNkZWNvbnN1bW9zZG90ZWxlbW92ZWwiDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBwcm9wcyA9IG5ldyBBcmVhUHJvcHMoDQogICAgICAgICAgNC4xOSwNCiAgICAgICAgICAxMy41LA0KICAgICAgICAgIDYuMzksDQogICAgICAgICAgMTIuNDIsDQogICAgICAgICAgODIuNzEsDQogICAgICAgICAgMzYuOSwNCiAgICAgICAgICAiY2VudGVyIiwNCiAgICAgICAgICAiYm90dG9tIg0KICAgICAgICApOw0KICAgICAgICBpdGVucy5wdXNoKA0KICAgICAgICAgIG5ldyBJdGVtcygNCiAgICAgICAgICAgICJDb25zdW1vcyIsDQogICAgICAgICAgICAiQ29uc3Vtb3MiLA0KICAgICAgICAgICAgIk5hIHJ1YnJpY2EgY29uc3Vtb3MgcG9kZSBjb25zdWx0YXIgb3MgY29uc3Vtb3MgZXh0cmFtZW5zYWxpZGFkZSwgbm9tZWFkYW1lbnRlIGNoYW1hZGFzIHRlbGVmw7NuaWNhcyAoZml4YXMgZSBtw7N2ZWlzKSBwb3Igc2VydmnDp28gZSB0aXBvIGRlIGNvbXVuaWNhw6fDo28sIGJlbSBjb21vIGFsdWd1ZXJlcyBkbyBNRU8gVmlkZW9DbHViZS4iLA0KICAgICAgICAgICAgcHJvcHMsDQogICAgICAgICAgICBsaW5rZXMNCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIC8vIExJTVBBIERBRE9TDQogICAgICAgIGxpbmtlcyA9IFtdOw0KICAgICAgICBwcm9wcyA9ICIiOw0KICAgICAgICAvLyAjIyMjIEFESUNJT05BIE5PVkEgQk9MQQ0KDQogICAgICAgIC8vIGFkaWNpb25hIHR1ZG8gw6AgcGFnaW5hDQogICAgICAgIHBhZ3MucHVzaCgNCiAgICAgICAgICBuZXcgUGFnKA0KICAgICAgICAgICAgIlDDoWdpbmEgMyIsDQogICAgICAgICAgICBpdGVucywNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvUHVibGlzaGluZ0ltYWdlcy9wYWdpbmFzL19mYXR1cmFfaW50ZXJhdGl2YS8xRmF0dXJhX0ZpeG9fUGFnZV8zLnBuZyINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGl0ZW5zID0gW107DQogICAgICAgIC8vIGUgYWRpY2lvbmFyIMOhcyBmYXR1cmFzDQogICAgICAgIGZhdHMucHVzaChuZXcgRmF0dXJhKCIxwqogRmF0dXJhIC0gUGFjb3RlcyIsIHBhZ3MpKTsNCg0KICAgICAgICAvLyBlcmEgYSB1bHRpbWEgcGFnaW5hDQoNCiAgICAgICAgLy8gYWRpY2lvbmEgYSBmYXR1cmEgw6EgdGFiIGF0dWFsLS0tICAoNCB2YWxvciDDqSBvIGxpbmsgZG8gYm90w6NvKQ0KICAgICAgICAvLyBleGVtcGxvIGNvbSBib3TDo28gLS0tLSB0YWJzLnB1c2gobmV3IEFyZWFzVGFicygiMcKqIEZhdHVyYSAtIFBhY290ZXMiLGZhdHMsIkTDunZpZGFzIGNvbSBhIHN1YSBmYXR1cmE/IiwgImh0dHBzOi8vd3d3Lm1lby5wdC9QdWJsaXNoaW5nSW1hZ2VzL3ZpZGVvcy9hanVkYS9Db25oZWNhLW1lbGhvci1hLXN1YS0xYS1mYXR1cmEvQ29uaGVjYS1tZWxob3ItYS1zdWEtMWEtZmF0dXJhLm1wNCIsICJTYWliYSBjb21vIGludGVycHJldGFyIGEgc3VhIGZhdHVyYSBlIGNvbXByZWVuZGEgZmFjaWxtZW50ZSB0b2RhIGEgaW5mb3JtYcOnw6NvIHF1ZSBsaGUgZW52aWFtb3MuIikpDQoNCiAgICAgICAgdGFicy5wdXNoKA0KICAgICAgICAgIG5ldyBBcmVhc1RhYnMoDQogICAgICAgICAgICAiMcKqIEZhdHVyYSAtIFBhY290ZXMiLA0KICAgICAgICAgICAgZmF0cywNCiAgICAgICAgICAgICJEw7p2aWRhcyBuYSBmYXR1cmE/IiwNCiAgICAgICAgICAgICIiLA0KICAgICAgICAgICAgIlNhaWJhIGNvbW8gZXN0w6Egb3JnYW5pemFkYSBlIHZlamEgYXMgZXhwbGljYcOnw7VlcyBwYXNzbyBhIHBhc3NvLiINCiAgICAgICAgICApDQogICAgICAgICk7DQoNCiAgICAgICAgLy8gbGltcGFyIGZhdHVyYSBkZXBvaXMgZGUgYWRpY2lvbmFyIGEgdWx0aW1hIHDDoWdpbmEgZSBhZGljaW9uYXIgYSBmYXR1cmEgw6EgdGFiDQogICAgICAgIGZhdHMgPSBbXTsNCiAgICAgICAgLy8gYXBlbmFzIHBvcnF1ZSBzw7MgaMOhIHVtYSBmYXR1cmEgcG9yIHRhYiwgc2VuYW8gY29udGludWF2YSBhIGFkaWNpb25hciBwcm9wcyBlIGZhdHMgw6EgdGFiLg0KDQogICAgICAgIC8vIGxpbXBhICBhcyBwYWdpbmFzDQogICAgICAgIHBhZ3MgPSBbXTsNCg0KICAgICAgICAvKiAjIyMjIyMjIyMjIyMjIyMgRkFUVVJBIFBBQ09URVMgICMjIyMjIyMjIyMjIyMjIyovDQogICAgICAgIC8qICMjIyMjIyMjIyMjIyMjIyBGQVRVUkEgUEFDT1RFUyAgIyMjIyMjIyMjIyMjIyMjKi8NCiAgICAgICAgLyogIyMjIyMjIyMjIyMjIyMjIEZBVFVSQSBQQUNPVEVTICAjIyMjIyMjIyMjIyMjIyMqLw0KDQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIsOBcmVhIGRlIENsaWVudGUiLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvcHJvZHV0b3MtbWVvL2dlcmlyLXByb2R1dG9zL2FyZWEtZGUtY2xpZW50ZSINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIkNvbnN1bHRhciBmYXR1cmEgbm8gUEMgIiwNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL2ZhdHVyYXMtcGFnYW1lbnRvcy1lLWNhcnJlZ2FtZW50b3MvZmF0dXJhcy9jb25zdWx0YXItYS1zdWEtZmF0dXJhI2NvbnN1bHRhcmZhdHVyYWFyZWFkZWNsaWVudGUiDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJDb25zdWx0YXIgZmF0dXJhIG5hIFRWIiwNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL2ZhdHVyYXMtcGFnYW1lbnRvcy1lLWNhcnJlZ2FtZW50b3MvZmF0dXJhcy9jb25zdWx0YXItYS1zdWEtZmF0dXJhI2NvbnN1bHRhcmZhdHVyYXR2ICINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIlZhbnRhZ2VucyBkZSBhZGVyaXIgw6Agw4FyZWEgZGUgQ2xpZW50ZSIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9wcm9kdXRvcy1tZW8vZ2VyaXItcHJvZHV0b3MvYXJlYS1kZS1jbGllbnRlI3ZhbnRhZ2Vuc2RlYWRlcmlyYXJlYWRlY2xpZW50ZSINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIHByb3BzID0gbmV3IEFyZWFQcm9wcygNCiAgICAgICAgICA0OC40NiwNCiAgICAgICAgICA2Ljg4LA0KICAgICAgICAgIDUyLjksDQogICAgICAgICAgNC45NSwNCiAgICAgICAgICAyMi43LA0KICAgICAgICAgIDcuNSwNCiAgICAgICAgICAiY2VudGVyIiwNCiAgICAgICAgICAiYm90dG9tIg0KICAgICAgICApOw0KDQogICAgICAgIGl0ZW5zLnB1c2goDQogICAgICAgICAgbmV3IEl0ZW1zKA0KICAgICAgICAgICAgIsOBcmVhIGRlIENsaWVudGUiLA0KICAgICAgICAgICAgIsOBcmVhIGRlIENsaWVudGUiLA0KICAgICAgICAgICAgIkNvbnN1bHRlIG8gZGV0YWxoZSBkYSBzdWEgZmF0dXJhLCBhdGl2ZSBzZXJ2acOnb3MgZSBtdWl0byBtYWlzIGVtIG1lby5wdCBvdSBubyBtZW51IGRhIHN1YSB0ZWxldmlzw6NvIiwNCiAgICAgICAgICAgIHByb3BzLA0KICAgICAgICAgICAgbGlua2VzDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICAvLyBMSU1QQSBEQURPUw0KICAgICAgICBsaW5rZXMgPSBbXTsNCiAgICAgICAgcHJvcHMgPSAiIjsNCiAgICAgICAgLy8gIyMjIyBBRElDSU9OQSBOT1ZBIEJPTEENCg0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJDb25zdWx0YXIgZGFkb3MgZGUgY2xpZW50ZSIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9wcm9kdXRvcy1tZW8vZ2VyaXItcHJvZHV0b3MvZGFkb3MtZGUtYWNlc3NvLWEtc2l0ZXMtZS1hcHBzI3Zlcm5yZGVjbGllbnRlZW5yZGVjb250YW5hYXJlYWRlY2xpZW50ZSINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIlJlZ2lzdG8gbmEgw4FyZWEgZGUgQ2xpZW50ZSIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9wcm9kdXRvcy1tZW8vZ2VyaXItcHJvZHV0b3MvYXJlYS1kZS1jbGllbnRlI3JlZ2lzdG9uYWFyZWFkZWNsaWVudGUiDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBwcm9wcyA9IG5ldyBBcmVhUHJvcHMoOS4xOSwgMTIuNSwgMTEsIDExLCAzMCwgMTEsICJyaWdodCIsICJtaWRkbGUiKTsNCiAgICAgICAgaXRlbnMucHVzaCgNCiAgICAgICAgICBuZXcgSXRlbXMoDQogICAgICAgICAgICAiRGFkb3MgZGUgQ2xpZW50ZSIsDQogICAgICAgICAgICAiRGFkb3MgZGUgQ2xpZW50ZSIsDQogICAgICAgICAgICAiVGVuaGEgb3Mgc2V1cyA8c3Ryb25nPmRhZG9zIGRlIGNsaWVudGU8L3N0cm9uZz4gw6AgbcOjbywgc2VtcHJlIHF1ZSBub3MgY29udGFjdGFyIiwNCiAgICAgICAgICAgIHByb3BzLA0KICAgICAgICAgICAgbGlua2VzDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICAvLyBMSU1QQSBEQURPUw0KICAgICAgICBsaW5rZXMgPSBbXTsNCiAgICAgICAgcHJvcHMgPSAiIjsNCiAgICAgICAgLy8gIyMjIyBBRElDSU9OQSBOT1ZBIEJPTEENCg0KICAgICAgICAvL2xpbmtlcy5wdXNoKG5ldyBMaW5rZSgndXJsJywnQ29tcHJlZW5kZXIgYSBzdWEgMcKqIGZhdHVyYSAocGFjb3RlIGNvbSB0ZWxlbcOzdmVsKSAtIHbDrWRlbycsJ2h0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvZmF0dXJhcy1wYWdhbWVudG9zLWUtY2FycmVnYW1lbnRvcy9mYXR1cmFzL2NvbXByZWVuZGVyLWEtZmF0dXJhI3ZpZGVvX3ZpZGVvZmF0dXJhJykpOw0KICAgICAgICAvLydodHRwczovL3d3dy5tZW8ucHQvUHVibGlzaGluZ0ltYWdlcy92aWRlb3MvYWp1ZGEvQ29uaGVjYS1tZWxob3ItYS1zdWEtMWEtZmF0dXJhL0NvbmhlY2EtbWVsaG9yLWEtc3VhLTFhLWZhdHVyYS5tcDQnKSk7DQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIkNvbXByZWVuZGVyIHZhbG9yIGRlIGZhdHVyYSBzdXBlcmlvciBhbyBlc3BlcmFkbyIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9mYXR1cmFzLXBhZ2FtZW50b3MtZS1jYXJyZWdhbWVudG9zL2ZhdHVyYXMvY29tcHJlZW5kZXItYS1mYXR1cmEjZmF0dXJhdmFsb3JzdXBlcmlvcmFvZXNwZXJhZG8iDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBwcm9wcyA9IG5ldyBBcmVhUHJvcHMoDQogICAgICAgICAgOS4xOSwNCiAgICAgICAgICAzMS4zNiwNCiAgICAgICAgICAxMC4wNywNCiAgICAgICAgICAyNy45OSwNCiAgICAgICAgICA4Ni4wMSwNCiAgICAgICAgICAyNy40NiwNCiAgICAgICAgICAiY2VudGVyIiwNCiAgICAgICAgICAidG9wIg0KICAgICAgICApOw0KICAgICAgICBpdGVucy5wdXNoKA0KICAgICAgICAgIG5ldyBJdGVtcygNCiAgICAgICAgICAgICJSZXN1bW8gZGEgRmF0dXJhIiwNCiAgICAgICAgICAgICJSZXN1bW8gZGEgRmF0dXJhIiwNCiAgICAgICAgICAgICJBcXVpIHBvZGUgdmVyIG8gcmVzdW1vIGRhIHN1YSBmYXR1cmEsIG8gbcOqcyBhIHF1ZSBjb3JyZXNwb25kZSwgZGF0YSBsaW1pdGUgcGFyYSBwYWdhbWVudG8gZSB2YWxvciBhIHBhZ2FyIiwNCiAgICAgICAgICAgIHByb3BzLA0KICAgICAgICAgICAgbGlua2VzDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICAvLyBMSU1QQSBEQURPUw0KICAgICAgICBsaW5rZXMgPSBbXTsNCiAgICAgICAgcHJvcHMgPSAiIjsNCiAgICAgICAgLy8gIyMjIyBBRElDSU9OQSBOT1ZBIEJPTEENCg0KICAgICAgICBsaW5rZXMgPSBbXTsNCiAgICAgICAgLy9saW5rZXMucHVzaChuZXcgTGlua2UoJ3VybCcsJ1NhaWJhIG1haXMgc29icmUgYSBzdWEgZmF0dXJhIC0gdsOtZGVvJywnaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9mYXR1cmFzLXBhZ2FtZW50b3MtZS1jYXJyZWdhbWVudG9zL2ZhdHVyYXMvY29tcHJlZW5kZXItYS1mYXR1cmEjdmlkZW9fdmlkZW9mYXR1cmEnKSk7DQogICAgICAgIC8vJ2h0dHBzOi8vd3d3Lm1lby5wdC9QdWJsaXNoaW5nSW1hZ2VzL3ZpZGVvcy9hanVkYS9mYXR1cmEtZWxldHJvbmljYS1tZW8vZmF0dXJhLWVsZXRyb25pY2EtbWVvLm1wNCcpKTsNCiAgICAgICAgcHJvcHMgPSBuZXcgQXJlYVByb3BzKA0KICAgICAgICAgIDkuMTksDQogICAgICAgICAgNTYuNiwNCiAgICAgICAgICAxMC44LA0KICAgICAgICAgIDU1LjY3LA0KICAgICAgICAgIDg0LjEyLA0KICAgICAgICAgIDEwLjk4LA0KICAgICAgICAgICJjZW50ZXIiLA0KICAgICAgICAgICJ0b3AiDQogICAgICAgICk7DQogICAgICAgIGl0ZW5zLnB1c2goDQogICAgICAgICAgbmV3IEl0ZW1zKA0KICAgICAgICAgICAgIkV4dHJhdG8gZGUgQ29udGEiLA0KICAgICAgICAgICAgIkV4dHJhdG8gZGUgQ29udGEiLA0KICAgICAgICAgICAgJ05vIEV4dHJhdG8gZGUgQ29udGEgZW5jb250cmFtLXNlIHRvZG9zIG9zIG1vdmltZW50b3MgZGEgc3VhIGNvbnRhIGRlc2RlIGEgw7psdGltYSBmYXR1cmEuIENhc28gZXhpc3RhbSB2YWxvcmVzIGRlIGZhdHVyYXMgYW50ZXJpb3JlcyBxdWUgZXN0ZWphbSBwb3IgcGFnYXIgb3MgbWVzbW9zIGlyw6NvIHN1cmdpciBuZXN0YSBzZWPDp8OjbywgasOhIGVuZ2xvYmFkb3MgbmEgcnVicmljYSAiVmFsb3IgYSBQYWdhciInLA0KICAgICAgICAgICAgcHJvcHMsDQogICAgICAgICAgICBsaW5rZXMNCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIC8vIExJTVBBIERBRE9TDQogICAgICAgIGxpbmtlcyA9IFtdOw0KICAgICAgICBwcm9wcyA9ICIiOw0KICAgICAgICAvLyAjIyMjIEFESUNJT05BIE5PVkEgQk9MQQ0KDQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIlBhZ2FyIEZhdHVyYXMgbmEgw4FyZWEgZGUgQ2xpZW50ZSIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9mYXR1cmFzLXBhZ2FtZW50b3MtZS1jYXJyZWdhbWVudG9zL3BhZ2FtZW50b3MvcGFnYXItZmF0dXJhI3BhZ2FyZmF0dXJhc2FyZWFkZWNsaWVudGUiDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJQYWdhciBGYXR1cmFzIHBvciBEw6liaXRvIERpcmV0byIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9mYXR1cmFzLXBhZ2FtZW50b3MtZS1jYXJyZWdhbWVudG9zL3BhZ2FtZW50b3MvcGFnYXItZmF0dXJhI3BhZ2FyZmF0dXJhc3BvcmRlYml0b2RpcmV0byINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIlZhbnRhZ2VucyBkbyBEw6liaXRvIERpcmV0byIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9mYXR1cmFzLXBhZ2FtZW50b3MtZS1jYXJyZWdhbWVudG9zL3BhZ2FtZW50b3MvZGViaXRvLWRpcmV0byN2YW50YWdlbnNkZWJpdG9kaXJldG8iDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJQYWdhciBGYXR1cmFzIHBvciBNdWx0aWJhbmNvIiwNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL2ZhdHVyYXMtcGFnYW1lbnRvcy1lLWNhcnJlZ2FtZW50b3MvcGFnYW1lbnRvcy9wYWdhci1mYXR1cmEjcGFnYXJmYXR1cmFzbm9tdWx0aWJhbmNvIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiRmF0dXJhIGVsZXRyw7NuaWNhIiwNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL2ZhdHVyYXMtcGFnYW1lbnRvcy1lLWNhcnJlZ2FtZW50b3MvZmF0dXJhLWVsZXRyb25pY2EvdmFudGFnZW5zLWUtYWRlc2FvIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgcHJvcHMgPSBuZXcgQXJlYVByb3BzKA0KICAgICAgICAgIDkuMTksDQogICAgICAgICAgNzIuNDksDQogICAgICAgICAgMTAuOCwNCiAgICAgICAgICA3MC45OCwNCiAgICAgICAgICA4NC4xMiwNCiAgICAgICAgICAyNC41MSwNCiAgICAgICAgICAiY2VudGVyIiwNCiAgICAgICAgICAidG9wIg0KICAgICAgICApOw0KICAgICAgICBpdGVucy5wdXNoKA0KICAgICAgICAgIG5ldyBJdGVtcygNCiAgICAgICAgICAgICJNb2RhbGlkYWRlcyBkZSBQYWdhbWVudG8iLA0KICAgICAgICAgICAgIk1vZGFsaWRhZGVzIGRlIFBhZ2FtZW50byIsDQogICAgICAgICAgICAiVHVkbyBvIHF1ZSBwcmVjaXNhIHBhcmEgcGFnYXIgYSBzdWEgZmF0dXJhIGVzdMOhIGFxdWkhIFBhcmEgc3VhIGNvbnZlbmnDqm5jaWEsIDxzdHJvbmc+YXRpdmUgbyBEw6liaXRvIERpcmV0byBkZSBmb3JtYSBncmF0dWl0YTwvc3Ryb25nPiBuYSBzdWEgw4FyZWEgZGUgQ2xpZW50ZS4gU2UgcGFnYXIgcG9yIE1CLCA8c3Ryb25nPnNhaWJhIHF1ZSBhIGVudGlkYWRlIGUgcmVmZXLDqm5jaWEgc8OjbyBzZW1wcmUgaWd1YWlzPC9zdHJvbmc+IGVtIHRvZGFzIGFzIGZhdHVyYXMuIiwNCiAgICAgICAgICAgIHByb3BzLA0KICAgICAgICAgICAgbGlua2VzDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICAvLyBMSU1QQSBEQURPUw0KICAgICAgICBsaW5rZXMgPSBbXTsNCiAgICAgICAgcHJvcHMgPSAiIjsNCiAgICAgICAgLy8gIyMjIyBBRElDSU9OQSBOT1ZBIEJPTEENCg0KICAgICAgICAvLyBhZGljaW9uYSB0dWRvIMOgIHBhZ2luYQ0KICAgICAgICBwYWdzLnB1c2goDQogICAgICAgICAgbmV3IFBhZygNCiAgICAgICAgICAgICJQw6FnaW5hIDEiLA0KICAgICAgICAgICAgaXRlbnMsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L1B1Ymxpc2hpbmdJbWFnZXMvcGFnaW5hcy9fZmF0dXJhX2ludGVyYXRpdmEvRmF0dXJhX2NvcnJlbnRlX0ZpeG9fUGFnZV8xLnBuZyINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGl0ZW5zID0gW107DQoNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiT2ZlcnRhcyBkZSBhZGVzw6NvIGFvcyBwYWNvdGVzIE1FTyIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9wcm9kdXRvcy1tZW8vcGFjb3Rlcy9wYWNvdGVzLW1lbyNvZmVydGFzYWRlc2FvcGFjb3Rlc21lbyINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIkNvbmhlY2VyIG9zIHBhY290ZXMgTUVPIiwNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL3Byb2R1dG9zLW1lby9wYWNvdGVzL3BhY290ZXMtbWVvI2NvbmhlY2Vyb3NwYWNvdGVzbWVvIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiQ29tcHJlZW5kZXIgdmFsb3IgZGUgZmF0dXJhIHN1cGVyaW9yIGFvIGVzcGVyYWRvIiwNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL2ZhdHVyYXMtcGFnYW1lbnRvcy1lLWNhcnJlZ2FtZW50b3MvZmF0dXJhcy9jb21wcmVlbmRlci1hLWZhdHVyYSNmYXR1cmF2YWxvcnN1cGVyaW9yYW9lc3BlcmFkbyINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIC8vJ2h0dHBzOi8vd3d3Lm1lby5wdC9QdWJsaXNoaW5nSW1hZ2VzL3ZpZGVvcy9hanVkYS9Db25oZWNhLW1lbGhvci1hLXN1YS0xYS1mYXR1cmEvQ29uaGVjYS1tZWxob3ItYS1zdWEtMWEtZmF0dXJhLm1wNCcpKTsNCiAgICAgICAgcHJvcHMgPSBuZXcgQXJlYVByb3BzKA0KICAgICAgICAgIDkuMTksDQogICAgICAgICAgMTkuOTcsDQogICAgICAgICAgMTEuMjksDQogICAgICAgICAgMTguOTUsDQogICAgICAgICAgODQuNDUsDQogICAgICAgICAgMTMuNSwNCiAgICAgICAgICAiY2VudGVyIiwNCiAgICAgICAgICAiYm90dG9tIg0KICAgICAgICApOw0KICAgICAgICBpdGVucy5wdXNoKA0KICAgICAgICAgIG5ldyBJdGVtcygNCiAgICAgICAgICAgICJBZGVzw7VlcyIsDQogICAgICAgICAgICAiQWRlc8O1ZXMiLA0KICAgICAgICAgICAgJ0Nhc28gdGVuaGEgYWRlcmlkbyBhIGFsZ3VtIHNlcnZpw6dvIE1FTywgbyB2YWxvciByZWZlcmVudGUgw6Agc3VhIGFkZXPDo28gZXN0YXLDoSBuYSBydWJyaWNhICJBZGVzw7VlcyIsIGNvbSBvIGRldGFsaGUgZG8gc2VydmnDp28gYSBxdWUgc2UgcmVmZXJlLicsDQogICAgICAgICAgICBwcm9wcywNCiAgICAgICAgICAgIGxpbmtlcw0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgLy8gTElNUEEgREFET1MNCiAgICAgICAgbGlua2VzID0gW107DQogICAgICAgIHByb3BzID0gIiI7DQogICAgICAgIC8vICMjIyMgQURJQ0lPTkEgTk9WQSBCT0xBDQoNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiQ29uaGVjZXIgb3MgcGFjb3RlcyBNRU8iLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvcHJvZHV0b3MtbWVvL3BhY290ZXMvcGFjb3Rlcy1tZW8jY29uaGVjZXJvc3BhY290ZXNtZW8iDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJDb21wcmVlbmRlciB2YWxvciBkZSBmYXR1cmEgc3VwZXJpb3IgYW8gZXNwZXJhZG8iLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvZmF0dXJhcy1wYWdhbWVudG9zLWUtY2FycmVnYW1lbnRvcy9mYXR1cmFzL2NvbXByZWVuZGVyLWEtZmF0dXJhI2ZhdHVyYXZhbG9yc3VwZXJpb3Jhb2VzcGVyYWRvIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgcHJvcHMgPSBuZXcgQXJlYVByb3BzKA0KICAgICAgICAgIDkuMTksDQogICAgICAgICAgMzQuNTcsDQogICAgICAgICAgMTEuMjksDQogICAgICAgICAgMzIuNiwNCiAgICAgICAgICA4NC40NSwNCiAgICAgICAgICA0MC4zNSwNCiAgICAgICAgICAiY2VudGVyIiwNCiAgICAgICAgICAidG9wIg0KICAgICAgICApOw0KICAgICAgICBpdGVucy5wdXNoKA0KICAgICAgICAgIG5ldyBJdGVtcygNCiAgICAgICAgICAgICJNZW5zYWxpZGFkZXMiLA0KICAgICAgICAgICAgIk1lbnNhbGlkYWRlcyIsDQogICAgICAgICAgICAnTmEgc2Vjw6fDo28gIk1lbnNhbGlkYWRlcyIgZW5jb250cmFtLXNlIG9zIHZhbG9yZXMgbWVuc2FpcyBkYXMgc3VhcyBzdWJjcmnDp8O1ZXM6IHBhY290ZSBjb250cmF0YWRvLCBjYW5haXMgcHJlbWl1bSBlL291IGNhcnTDtWVzIG3Ds3ZlaXMgYWRpY2lvbmFpcy4gVGVtIGFpbmRhIGFzIG1lbnNhbGlkYWRlcyBkZSBlcXVpcGFtZW50b3MgcXVlIHBvc3NhIHRlciAoZXhlbXBsbzogYWx1Z3VlciBNRU9ib3gpJywNCiAgICAgICAgICAgIHByb3BzLA0KICAgICAgICAgICAgbGlua2VzDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICAvLyBMSU1QQSBEQURPUw0KICAgICAgICBsaW5rZXMgPSBbXTsNCiAgICAgICAgcHJvcHMgPSAiIjsNCiAgICAgICAgLy8gIyMjIyBBRElDSU9OQSBOT1ZBIEJPTEENCg0KICAgICAgICAvKiBBUVVJICovDQoNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiVmFudGFnZW5zIGRhIGZhdHVyYSBlbGV0csOzbmljYSIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9mYXR1cmFzLXBhZ2FtZW50b3MtZS1jYXJyZWdhbWVudG9zL2ZhdHVyYS1lbGV0cm9uaWNhL3ZhbnRhZ2Vucy1lLWFkZXNhbyN2YW50YWdlbnNkYWZhdHVyYWVsZXRyb25pY2EiDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJBZGVyaXIgw6AgZmF0dXJhIGVsZXRyw7NuaWNhIG5hIMOBcmVhIGRlIENsaWVudGUiLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvZmF0dXJhcy1wYWdhbWVudG9zLWUtY2FycmVnYW1lbnRvcy9mYXR1cmEtZWxldHJvbmljYS92YW50YWdlbnMtZS1hZGVzYW8jYWRlcmlyZmF0dXJhZWxldHJvbmljYW5hYXJlYWRlY2xpZW50ZSINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIkFkZXJpciDDoCBmYXR1cmEgZWxldHLDs25pY2EgbmEgVFYiLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvZmF0dXJhcy1wYWdhbWVudG9zLWUtY2FycmVnYW1lbnRvcy9mYXR1cmEtZWxldHJvbmljYS92YW50YWdlbnMtZS1hZGVzYW8jYWRlcmlyZmF0dXJhZWxldHJvbmljYW5hdHYiDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJWYW50YWdlbnMgZG8gZMOpYml0byBkaXJldG8iLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvZmF0dXJhcy1wYWdhbWVudG9zLWUtY2FycmVnYW1lbnRvcy9wYWdhbWVudG9zL2RlYml0by1kaXJldG8jdmFudGFnZW5zZGViaXRvZGlyZXRvIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgcHJvcHMgPSBuZXcgQXJlYVByb3BzKA0KICAgICAgICAgIDkuMTksDQogICAgICAgICAgNzYuOTksDQogICAgICAgICAgOS40OSwNCiAgICAgICAgICA3NC45MSwNCiAgICAgICAgICA2MS4yMSwNCiAgICAgICAgICAxMS4xLA0KICAgICAgICAgICJjZW50ZXIiLA0KICAgICAgICAgICJ0b3AiDQogICAgICAgICk7DQogICAgICAgIGl0ZW5zLnB1c2goDQogICAgICAgICAgbmV3IEl0ZW1zKA0KICAgICAgICAgICAgIkZhdHVyYSBFbGVjdHLDs25pY2EiLA0KICAgICAgICAgICAgIkZhdHVyYSBFbGV0csOzbmljYSIsDQogICAgICAgICAgICAiU2UgYWluZGEgbsOjbyB0ZW0gZmF0dXJhIGVsZXRyw7NuaWNhIGUgZMOpYml0byBkaXJldG8sIGFkaXJhIGrDoSBuYSDDgXJlYSBkZSBDbGllbnRlIGVtIG1lby5wdCBvdSBuYSBzdWEgVFYuIFNpbXBsaWZpcXVlIGEgc3VhIHZpZGEsIGFqdWRlIG8gYW1iaWVudGUgZSB1c3VmcnVhIGRlIG9mZXJ0YXMgZXNwZWNpYWlzLiIsDQogICAgICAgICAgICBwcm9wcywNCiAgICAgICAgICAgIGxpbmtlcw0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgLy8gTElNUEEgREFET1MNCiAgICAgICAgbGlua2VzID0gW107DQogICAgICAgIHByb3BzID0gIiI7DQogICAgICAgIC8vICMjIyMgQURJQ0lPTkEgTk9WQSBCT0xBDQoNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInZpZGVvIiwNCiAgICAgICAgICAgICJWZXIgdmlkZW8iLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9QdWJsaXNoaW5nSW1hZ2VzL3ZpZGVvcy9hanVkYS9Db25oZWNhLW1lbGhvci1hLXN1YS0xYS1mYXR1cmEvQ29uaGVjYS1tZWxob3ItYS1zdWEtMWEtZmF0dXJhLm1wNCINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIHByb3BzID0gbmV3IEFyZWFQcm9wcygNCiAgICAgICAgICA2OS4wNiwNCiAgICAgICAgICA3Ni44NCwNCiAgICAgICAgICA2OS4yOCwNCiAgICAgICAgICA3NC42NywNCiAgICAgICAgICAyNi40NSwNCiAgICAgICAgICAxMS43LA0KICAgICAgICAgICJsZWZ0IiwNCiAgICAgICAgICAibWlkZGxlIg0KICAgICAgICApOw0KDQogICAgICAgIC8vaXRlbnMucHVzaChuZXcgSXRlbXMoJ1FSIENvZGUnLCdRUiBDb2RlJywnU2FpYmEgbWFpcyBzb2JyZSBhIHN1YSBmYXR1cmEgYXRyYXbDqXMgZGVzdGUgUVIgQ29kZS4nLHByb3BzLGxpbmtlcykpOw0KICAgICAgICBpdGVucy5wdXNoKA0KICAgICAgICAgIG5ldyBJdGVtcygNCiAgICAgICAgICAgICJRUiBDb2RlIiwNCiAgICAgICAgICAgICJRUiBDb2RlIiwNCiAgICAgICAgICAgICJTYWliYSBtYWlzIHNvYnJlIGEgc3VhIGZhdHVyYSBhdHJhdsOpcyBkZXN0ZSBRUiBDb2RlLiIsDQogICAgICAgICAgICBwcm9wcywNCiAgICAgICAgICAgICIiDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICAvLyBMSU1QQSBEQURPUw0KICAgICAgICBsaW5rZXMgPSBbXTsNCiAgICAgICAgcHJvcHMgPSAiIjsNCiAgICAgICAgLy8gIyMjIyBBRElDSU9OQSBOT1ZBIEJPTEENCg0KICAgICAgICAvLyBhZGljaW9uYSB0dWRvIMOgIHBhZ2luYQ0KICAgICAgICBwYWdzLnB1c2goDQogICAgICAgICAgbmV3IFBhZygNCiAgICAgICAgICAgICJQw6FnaW5hIDIiLA0KICAgICAgICAgICAgaXRlbnMsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L1B1Ymxpc2hpbmdJbWFnZXMvcGFnaW5hcy9fZmF0dXJhX2ludGVyYXRpdmEvRmF0dXJhX2NvcnJlbnRlX0ZpeG9fUGFnZV8yLnBuZyINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGl0ZW5zID0gW107DQoNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiRGV0YWxoZSBlIGRhZG9zIGRlIGZhdHVyYSIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9mYXR1cmFzLXBhZ2FtZW50b3MtZS1jYXJyZWdhbWVudG9zL2ZhdHVyYXMvYWx0ZXJhci1kYWRvcy1kZS1mYXR1cmEiDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJDb25zdWx0YXIgZGV0YWxoZSBkZSBjb211bmljYcOnw7VlcyIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9mYXR1cmFzLXBhZ2FtZW50b3MtZS1jYXJyZWdhbWVudG9zL2ZhdHVyYXMvYWx0ZXJhci1kYWRvcy1kZS1mYXR1cmEjZGV0YWxoZWRlY29tdW5pY2Fjb2VzIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiQ29uc3VsdGFyIGNvbnN1bW9zIG1hcmNhbmRvICojMTIzIyIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9mYXR1cmFzLXBhZ2FtZW50b3MtZS1jYXJyZWdhbWVudG9zL2NvbnN1bW9zLWUtY29udHJvbG8tZGUtY3VzdG9zL2NvbnN1bHRhci1jb25zdW1vcyNjb25zdWx0YXJjb25zdW1vc3VzZCINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIkNvbnN1bHRhciBjb25zdW1vcyBkZSBleHRyYW1lbnNhbGlkYWRlIiwNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL2ZhdHVyYXMtcGFnYW1lbnRvcy1lLWNhcnJlZ2FtZW50b3MvY29uc3Vtb3MtZS1jb250cm9sby1kZS1jdXN0b3MvZXh0cmFtZW5zYWxpZGFkZSNjb25zdWx0YXJleHRyYW1lbnNhbGlkYWRlc2FsZG9yZWNhcmdhIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiQWxlcnRhcyBkZSBjb25zdW1vIG5vIHRlbGVtw7N2ZWwiLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvZmF0dXJhcy1wYWdhbWVudG9zLWUtY2FycmVnYW1lbnRvcy9jb25zdW1vcy1lLWNvbnRyb2xvLWRlLWN1c3Rvcy9hbGVydGFzI2FsZXJ0YXNkZWNvbnN1bW9zZG90ZWxlbW92ZWwiDQogICAgICAgICAgKQ0KICAgICAgICApOw0KDQogICAgICAgIC8vJ2h0dHBzOi8vd3d3Lm1lby5wdC9QdWJsaXNoaW5nSW1hZ2VzL3ZpZGVvcy9hanVkYS9VbmxpbWl0ZWQtQ29udHJvbG8tZGUtY3VzdG9zL1VubGltaXRlZC1Db250cm9sby1kZS1jdXN0b3MubXA0JykpOw0KICAgICAgICBwcm9wcyA9IG5ldyBBcmVhUHJvcHMoDQogICAgICAgICAgNC44MiwNCiAgICAgICAgICAxNC41MSwNCiAgICAgICAgICA1LjYyLA0KICAgICAgICAgIDEyLjAyLA0KICAgICAgICAgIDg0LjQzLA0KICAgICAgICAgIDQyLjQsDQogICAgICAgICAgImNlbnRlciIsDQogICAgICAgICAgImJvdHRvbSINCiAgICAgICAgKTsNCiAgICAgICAgaXRlbnMucHVzaCgNCiAgICAgICAgICBuZXcgSXRlbXMoDQogICAgICAgICAgICAiQ29uc3Vtb3MiLA0KICAgICAgICAgICAgIkNvbnN1bW9zIiwNCiAgICAgICAgICAgICJOYSBydWJyaWNhIGNvbnN1bW9zIHBvZGUgY29uc3VsdGFyIG9zIGNvbnN1bW9zIGV4dHJhbWVuc2FsaWRhZGUsIG5vbWVhZGFtZW50ZSBjaGFtYWRhcyB0ZWxlZsOzbmljYXMgKGZpeGFzIGUgbcOzdmVpcykgcG9yIHNlcnZpw6dvIGUgdGlwbyBkZSBjb211bmljYcOnw6NvLCBiZW0gY29tbyBhbHVndWVyZXMgZG8gTUVPIFZpZGVvQ2x1YmUuIiwNCiAgICAgICAgICAgIHByb3BzLA0KICAgICAgICAgICAgbGlua2VzDQogICAgICAgICAgKQ0KICAgICAgICApOw0KDQogICAgICAgIC8vIExJTVBBIERBRE9TDQogICAgICAgIGxpbmtlcyA9IFtdOw0KICAgICAgICBwcm9wcyA9ICIiOw0KICAgICAgICAvLyAjIyMjIEFESUNJT05BIE5PVkEgQk9MQQ0KDQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIkNvbXByZWVuZGVyIHZhbG9yIGRlIGZhdHVyYSBzdXBlcmlvciBhbyBlc3BlcmFkbyIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9mYXR1cmFzLXBhZ2FtZW50b3MtZS1jYXJyZWdhbWVudG9zL2ZhdHVyYXMvY29tcHJlZW5kZXItYS1mYXR1cmEjZmF0dXJhdmFsb3JzdXBlcmlvcmFvZXNwZXJhZG8iDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJQZW5hbGl6YcOnw6NvIG5vIGF0cmFzbyBubyBwYWdhbWVudG8gZGEgZmF0dXJhIiwNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL2ZhdHVyYXMtcGFnYW1lbnRvcy1lLWNhcnJlZ2FtZW50b3MvZmF0dXJhcy9jb21wcmVlbmRlci1hLWZhdHVyYSNhdHJhc29wYWdhbWVudG9mYXR1cmEiDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJWYW50YWdlbnMgZG8gZMOpYml0byBkaXJldG8iLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvZmF0dXJhcy1wYWdhbWVudG9zLWUtY2FycmVnYW1lbnRvcy9wYWdhbWVudG9zL2RlYml0by1kaXJldG8jdmFudGFnZW5zZGViaXRvZGlyZXRvIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiQ3VzdG8gZGUgcmVzdGFiZWxlY2ltZW50byBkbyBzZXJ2acOnbyIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9mYXR1cmFzLXBhZ2FtZW50b3MtZS1jYXJyZWdhbWVudG9zL2ZhdHVyYXMvY29tcHJlZW5kZXItYS1mYXR1cmEjY3VzdG9yZXN0YWJlbGVjaW1lbnRvIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgcHJvcHMgPSBuZXcgQXJlYVByb3BzKA0KICAgICAgICAgIDQuODIsDQogICAgICAgICAgNTYuNTEsDQogICAgICAgICAgNS42MiwNCiAgICAgICAgICA1NC42NSwNCiAgICAgICAgICA4NC40MywNCiAgICAgICAgICAxMC4wOSwNCiAgICAgICAgICAiY2VudGVyIiwNCiAgICAgICAgICAidG9wIg0KICAgICAgICApOw0KICAgICAgICBpdGVucy5wdXNoKA0KICAgICAgICAgIG5ldyBJdGVtcygNCiAgICAgICAgICAgICJTZXJ2acOnb3MgQWRtaW5pc3RyYXRpdm9zIiwNCiAgICAgICAgICAgICJTZXJ2acOnb3MgQWRtaW5pc3RyYXRpdm9zIiwNCiAgICAgICAgICAgICdOYSBzZWPDp8OjbyAiU2VydmnDp29zIEFkbWluaXN0cmF0aXZvcyIgcG9kZW0gY29uc3RhciBydWJyaWNhcyBjb21vLCBwb3IgZXhlbXBsbywgdGF4YXMgZGUgYXRyYXNvIGRlIHBhZ2FtZW50byBvdSBvdXRyb3MgaW1wb3N0b3MuIFBhcmEgbWFudGVyIG9zIHNldXMgcGFnYW1lbnRvcyBzZW1wcmUgZW0gZGlhIGUgZXZpdGFyIGV2ZW50dWFpcyB0YXhhcyBwb3IgYXRyYXNvIGRlIHBhZ2FtZW50bywgYXRpdmUgbyBEw6liaXRvIERpcmV0by4gUG9kZSBmYXrDqi1sbyBkZSBmb3JtYSBncmF0dWl0YSBuYSBzdWEgw6FyZWEgZGUgY2xpZW50ZSBubyBQQyBvdSBubyBUYWJsZXQgZW0gbWVvLnB0JywNCiAgICAgICAgICAgIHByb3BzLA0KICAgICAgICAgICAgbGlua2VzDQogICAgICAgICAgKQ0KICAgICAgICApOw0KDQogICAgICAgIC8vIExJTVBBIERBRE9TDQogICAgICAgIGxpbmtlcyA9IFtdOw0KICAgICAgICBwcm9wcyA9ICIiOw0KICAgICAgICAvLyAjIyMjIEFESUNJT05BIE5PVkEgQk9MQQ0KDQogICAgICAgIC8vIGFkaWNpb25hIHR1ZG8gw6AgcGFnaW5hDQogICAgICAgIHBhZ3MucHVzaCgNCiAgICAgICAgICBuZXcgUGFnKA0KICAgICAgICAgICAgIlDDoWdpbmEgMyIsDQogICAgICAgICAgICBpdGVucywNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvUHVibGlzaGluZ0ltYWdlcy9wYWdpbmFzL19mYXR1cmFfaW50ZXJhdGl2YS9GYXR1cmFfY29ycmVudGVfRml4b19QYWdlXzMucG5nIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgaXRlbnMgPSBbXTsNCg0KICAgICAgICAvLyBlIGFkaWNpb25hciDDoXMgZmF0dXJhcw0KICAgICAgICBmYXRzLnB1c2gobmV3IEZhdHVyYSgiRmF0dXJhIFBhY290ZXMiLCBwYWdzKSk7DQoNCiAgICAgICAgLy8gYWRpY2lvbmEgYSBmYXR1cmEgw6EgdGFiIGF0dWFsDQogICAgICAgIC8vdGFicy5wdXNoKG5ldyBBcmVhc1RhYnMoIkZhdHVyYSBQYWNvdGVzIixmYXRzLCJEw7p2aWRhcyBjb20gYSBzdWEgZmF0dXJhPyIsICJodHRwczovL3d3dy5tZW8ucHQvUHVibGlzaGluZ0ltYWdlcy92aWRlb3MvYWp1ZGEvZmF0dXJhLWVsZXRyb25pY2EtbWVvL2ZhdHVyYS1lbGV0cm9uaWNhLW1lby5tcDQiLCAiU2FpYmEgY29tbyBpbnRlcnByZXRhciBhIHN1YSBmYXR1cmEgZSBjb21wcmVlbmRhIGZhY2lsbWVudGUgdG9kYSBhIGluZm9ybWHDp8OjbyBxdWUgbGhlIGVudmlhbW9zLiIpKQ0KDQogICAgICAgIHRhYnMucHVzaCgNCiAgICAgICAgICBuZXcgQXJlYXNUYWJzKA0KICAgICAgICAgICAgIkZhdHVyYSBQYWNvdGVzIiwNCiAgICAgICAgICAgIGZhdHMsDQogICAgICAgICAgICAiRMO6dmlkYXMgbmEgZmF0dXJhPyIsDQogICAgICAgICAgICAiIiwNCiAgICAgICAgICAgICJTYWliYSBjb21vIGVzdMOhIG9yZ2FuaXphZGEgZSB2ZWphIGFzIGV4cGxpY2HDp8O1ZXMgcGFzc28gYSBwYXNzby4iDQogICAgICAgICAgKQ0KICAgICAgICApOw0KDQogICAgICAgIC8vIGxpbXBhciBmYXR1cmEgZGVwb2lzIGRlIGFkaWNpb25hciBhIHVsdGltYSBww6FnaW5hIGUgYWRpY2lvbmFyIGEgZmF0dXJhIMOhIHRhYiwgdW1hIHZleiBxdWUgw6kgc28gdW1hIGZhdHVyYSBwb3IgdGFiDQogICAgICAgIGZhdHMgPSBbXTsNCiAgICAgICAgLy8gbGltcGEgIGFzIHBhZ2luYXMNCiAgICAgICAgcGFncyA9IFtdOw0KDQogICAgICAgIC8qICMjIyMjIyMjIyMjIyMgRklNIEZBVFVSQSAjIyMjIyMjIyMjIyMjIyovDQoNCiAgICAgICAgLyogIyMjIyMjIyMjIyMjIyMjIDHCuiBmYXR1cmEgdGVsZW1vdmVsICMjIyMjIyMjIyMjIyMjIyovDQogICAgICAgIC8qICMjIyMjIyMjIyMjIyMjIyAxwrogZmF0dXJhIHRlbGVtb3ZlbCAjIyMjIyMjIyMjIyMjIyMqLw0KICAgICAgICAvKiAjIyMjIyMjIyMjIyMjIyMgMcK6IGZhdHVyYSB0ZWxlbW92ZWwgIyMjIyMjIyMjIyMjIyMjKi8NCg0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJTYWJlciBvIHF1ZSBwb2RlIGZhemVyIG5vIG15IE1FTy4iLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvcHJvZHV0b3MtbWVvL2dlcmlyLXByb2R1dG9zL2FyZWEtZGUtY2xpZW50ZSN2YW50YWdlbnNkZWFkZXJpcmFyZWFkZWNsaWVudGUiDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJDb21vIEluc3RhbGFyIGEgYXBwIG15IE1FTyIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9wcm9kdXRvcy1tZW8vZ2VyaXItcHJvZHV0b3MvYXJlYS1kZS1jbGllbnRlI2luc3RhbGFyYXBwbXltZW8iDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJDb21vIHZlciBvcyBzZXJ2acOnb3Mgbm8gbXkgTUVPIiwNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL3Byb2R1dG9zLW1lby9nZXJpci1wcm9kdXRvcy9hcmVhLWRlLWNsaWVudGUjcmVnaXN0b25hYXJlYWRlY2xpZW50ZSINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIkVudHJhciBubyBteSBNRU8iLA0KICAgICAgICAgICAgImh0dHBzOi8vbXltZW8ucGFnZS5saW5rL2hvbWUiDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJDb25zdWx0YXIgYXMgbGluaGFzIGRlIGFwb2lvIE1FTyIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2xpbmhhcy1hcG9pbyINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIHByb3BzID0gbmV3IEFyZWFQcm9wcygNCiAgICAgICAgICA0Ni43LA0KICAgICAgICAgIDQuNDksDQogICAgICAgICAgNTEuNDEsDQogICAgICAgICAgNS4wLA0KICAgICAgICAgIDIzLjA0LA0KICAgICAgICAgIDUuNTUsDQogICAgICAgICAgImNlbnRlciIsDQogICAgICAgICAgImJvdHRvbSINCiAgICAgICAgKTsNCiAgICAgICAgaXRlbnMucHVzaCgNCiAgICAgICAgICBuZXcgSXRlbXMoDQogICAgICAgICAgICAiw4FyZWEgZGUgQ2xpZW50ZSBteSBNRU8iLA0KICAgICAgICAgICAgIsOBcmVhIGRlIENsaWVudGUgPGEgaHJlZj0naHR0cHM6Ly93d3cubWVvLnB0L2NsaWVudGUnIHRhcmdldD0nX2JsYW5rJz5teSBNRU88L2E+IiwNCiAgICAgICAgICAgICJQZXJtaXRlIGdlcmlyIG9zIHNlcnZpw6dvcyBNRU8gc2VtIGN1c3RvcyAyNGgvZGlhLCBubyBjb21wdXRhZG9yLCB0YWJsZXQgb3UgdGVsZW3Ds3ZlbC4iLA0KICAgICAgICAgICAgcHJvcHMsDQogICAgICAgICAgICBsaW5rZXMNCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGxpbmtlcyA9IFtdOw0KDQogICAgICAgIHByb3BzID0gIiI7DQoNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiTyBxdWUgw6kgbyBDVlAiLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvcHJvZHV0b3MtbWVvL3RlbGVmb25lL3BvcnRhYmlsaWRhZGUjb3F1ZWVvY3ZwcGFjb3RlcyINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIkFjZXNzbyBhbyBteSBNRU8iLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvcHJvZHV0b3MtbWVvL2dlcmlyLXByb2R1dG9zL2FyZWEtZGUtY2xpZW50ZSNyZWdpc3RvbmFhcmVhZGVjbGllbnRlIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCg0KICAgICAgICBwcm9wcyA9IG5ldyBBcmVhUHJvcHMoDQogICAgICAgICAgOS4xOSwNCiAgICAgICAgICAxMi41NSwNCiAgICAgICAgICAxMC44NCwNCiAgICAgICAgICAxMS41LA0KICAgICAgICAgIDMwLjU3LA0KICAgICAgICAgIDE1Ljc3LA0KICAgICAgICAgICJyaWdodCIsDQogICAgICAgICAgIm1pZGRsZSINCiAgICAgICAgKTsNCiAgICAgICAgaXRlbnMucHVzaCgNCiAgICAgICAgICBuZXcgSXRlbXMoDQogICAgICAgICAgICAiRGFkb3MgZGUgQ2xpZW50ZSIsDQogICAgICAgICAgICAiRGFkb3MgZGUgQ2xpZW50ZSIsDQogICAgICAgICAgICAiRXN0ZXMgc8OjbyBvcyBuw7ptZXJvcyBxdWUgbyBpZGVudGlmaWNhbSBubyBNRU8uPGJyPkFxdWkgdGVtIG8gbsK6IGRlIGNvbnRhIGUgbyB0YXJpZsOhcmlvIHN1YnNjcml0by48YnI+VGVuaGEgZXN0ZXMgZGFkb3Mgw6AgbcOjbyBxdWFuZG8gbm9zIGNvbnRhY3RhciBvdSBxdWFuZG8gYXNzb2NpYXIgb3Mgc2VydmnDp29zIG5vIG15IE1FTy4iLA0KICAgICAgICAgICAgcHJvcHMsDQogICAgICAgICAgICBsaW5rZXMNCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIC8vIExJTVBBIERBRE9TDQogICAgICAgIGxpbmtlcyA9IFtdOw0KICAgICAgICBwcm9wcyA9ICIiOw0KICAgICAgICAvLyAjIyMjIEFESUNJT05BIE5PVkEgQk9MQQ0KDQogICAgICAgIC8vIEZBTFRBIFVNIElURU0gREUgQ09OVEVVRE8gIFZJREVPDQoNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiQ29tcHJlZW5kZXIgdmFsb3IgZGUgZmF0dXJhIHN1cGVyaW9yIGFvIGVzcGVyYWRvIiwNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL2ZhdHVyYXMtcGFnYW1lbnRvcy1lLWNhcnJlZ2FtZW50b3MvZmF0dXJhcy9jb21wcmVlbmRlci1hLWZhdHVyYSNmYXR1cmF2YWxvcnN1cGVyaW9yYW9lc3BlcmFkbyINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIHByb3BzID0gbmV3IEFyZWFQcm9wcygNCiAgICAgICAgICA5LjE5LA0KICAgICAgICAgIDMxLjA2LA0KICAgICAgICAgIDEwLjg0LA0KICAgICAgICAgIDI4LjA0LA0KICAgICAgICAgIDg2LjYsDQogICAgICAgICAgMTcuNzksDQogICAgICAgICAgImNlbnRlciIsDQogICAgICAgICAgImJvdHRvbSINCiAgICAgICAgKTsNCiAgICAgICAgaXRlbnMucHVzaCgNCiAgICAgICAgICBuZXcgSXRlbXMoDQogICAgICAgICAgICAiUmVzdW1vIGRhIEZhdHVyYSIsDQogICAgICAgICAgICAiUmVzdW1vIGRhIEZhdHVyYSIsDQogICAgICAgICAgICAiRXN0YSDDqSBhIMOhcmVhIGRhIGZhdHVyYSBvbmRlIHBvZGUgdmVyIG8gcmVzdW1vIGRhIGZhdHVyYSBkbyBtw6pzLCBhIGRhdGEgbGltaXRlIGRlIHBhZ2FtZW50byBlIG8gdmFsb3IgYSBwYWdhci48YnI+PGJyPkEgZmF0dXJhw6fDo28gZXN0w6Egb3JnYW5pemFkYSBlbSB0csOqcyDDoXJlYXM6PC9wPiIgKw0KICAgICAgICAgICAgICAiPHN0cm9uZz4tIEFkZXPDtWVzPC9zdHJvbmc+OiB2YWxvcmVzIHJlbGF0aXZvcyBhIGFkZXPDo28gYSBub3ZvcyBzZXJ2acOnb3M8YnI+IiArDQogICAgICAgICAgICAgICI8c3Ryb25nPi0gTWVuc2FsaWRhZGVzPC9zdHJvbmc+OiB2YWxvcmVzIHJlbGF0aXZvcyBhIG1lbnNhbGlkYWRlcyBkb3MgdGFyaWbDoXJpb3Mgc3Vic2NyaXRvczxicj4iICsNCiAgICAgICAgICAgICAgIjxzdHJvbmc+LSBDb25zdW1vczwvc3Ryb25nPjogdmFsb3JlcyBjb25zdW1pZG9zIG5vIG3DqnMgYW50ZXJpb3Igw6AgZmF0dXJhPGJyPjxicj4iICsNCiAgICAgICAgICAgICAgIjxwIGNsYXNzPSdkZXNjcmljYW8nPkEgMcKqIGZhdHVyYSBwb2RlIG7Do28gY29ycmVzcG9uZGVyIGEgdW0gbcOqcyBpbnRlaXJvIHBvcnF1ZSBhIGZhdHVyYcOnw6NvIHPDsyBpbmljaWEgbm8gZGlhIGRlIGFkZXPDo28iLA0KICAgICAgICAgICAgcHJvcHMsDQogICAgICAgICAgICBsaW5rZXMNCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIC8vIExJTVBBIERBRE9TDQogICAgICAgIGxpbmtlcyA9IFtdOw0KICAgICAgICBwcm9wcyA9ICIiOw0KICAgICAgICAvLyAjIyMjIEFESUNJT05BIE5PVkEgQk9MQQ0KDQogICAgICAgIC8vIHJlbW92aWRvIGVzdGUgZGVzdGFxdWUgZG8gdmFsb3IgYSBwYWdhcg0KICAgICAgICAvKg0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJDb21wcmVlbmRlciB2YWxvciBkZSBmYXR1cmEgc3VwZXJpb3IgYW8gZXNwZXJhZG8iLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvZmF0dXJhcy1wYWdhbWVudG9zLWUtY2FycmVnYW1lbnRvcy9mYXR1cmFzL2NvbXByZWVuZGVyLWEtZmF0dXJhI2ZhdHVyYXZhbG9yc3VwZXJpb3Jhb2VzcGVyYWRvIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgcHJvcHMgPSBuZXcgQXJlYVByb3BzKA0KICAgICAgICAgIDkuMTksDQogICAgICAgICAgNTYuNywNCiAgICAgICAgICAxMS4xNCwNCiAgICAgICAgICA1NS43NCwNCiAgICAgICAgICA4Ni42LA0KICAgICAgICAgIDMuNCwNCiAgICAgICAgICAiY2VudGVyIiwNCiAgICAgICAgICAidG9wIg0KICAgICAgICApOw0KICAgICAgICBpdGVucy5wdXNoKA0KICAgICAgICAgIG5ldyBJdGVtcygNCiAgICAgICAgICAgICJWYWxvciBhIFBhZ2FyIiwNCiAgICAgICAgICAgICJWYWxvciBhIFBhZ2FyIiwNCiAgICAgICAgICAgICJBIHN1YSAxwqogZmF0dXJhIHBvZGUgbsOjbyBjb3JyZXNwb25kZXIgYSB1bSBtw6pzIGNvbXBsZXRvLCBwb2lzIGNvbWXDp2Egbm8gZGlhIGVtIHF1ZSBhZGVyaXUuIEFzIG1lbnNhbGlkYWRlcyBlIGNvbnN1bW9zIHPDo28gcmVmZXJlbnRlcyBhbyBtw6pzIGFudGVyaW9yLiIsDQogICAgICAgICAgICBwcm9wcywNCiAgICAgICAgICAgIGxpbmtlcw0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgLy8gTElNUEEgREFET1MNCiAgICAgICAgbGlua2VzID0gW107DQogICAgICAgIHByb3BzID0gIiI7DQogICAgICAgIC8vICMjIyMgQURJQ0lPTkEgTk9WQSBCT0xBDQogICAgICAgICovDQoNCiAgICAgICAgLy8gcmVtb3ZpZG8gZXN0ZSBkZXN0YXF1ZSBkYXMgcHJvbW/Dp29lcyBlIG5vdmlkYWRlcw0KICAgICAgICAvKg0KICAgICAgICBsaW5rZXMgPSBbXTsNCiAgICAgICAgcHJvcHMgPSBuZXcgQXJlYVByb3BzKA0KICAgICAgICAgIDkuMTksDQogICAgICAgICAgNzAuMTEsDQogICAgICAgICAgMTEuMTQsDQogICAgICAgICAgNjcuOTgsDQogICAgICAgICAgODYuNiwNCiAgICAgICAgICA3LjM0LA0KICAgICAgICAgICJjZW50ZXIiLA0KICAgICAgICAgICJ0b3AiDQogICAgICAgICk7DQogICAgICAgIGl0ZW5zLnB1c2goDQogICAgICAgICAgbmV3IEl0ZW1zKA0KICAgICAgICAgICAgIlByb21vw6fDtWVzIGUgTm92aWRhZGVzIiwNCiAgICAgICAgICAgICJQcm9tb8Onw7VlcyBlIE5vdmlkYWRlcyIsDQogICAgICAgICAgICAiRmlxdWUgYXRlbnRvIMOgcyBwcm9tb8Onw7VlcyBlIG5vdmlkYWRlcyBxdWUgdGVtb3MgcGFyYSBzaSIsDQogICAgICAgICAgICBwcm9wcywNCiAgICAgICAgICAgIGxpbmtlcw0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgLy8gTElNUEEgREFET1MNCiAgICAgICAgbGlua2VzID0gW107DQogICAgICAgIHByb3BzID0gIiI7DQogICAgICAgIC8vICMjIyMgQURJQ0lPTkEgTk9WQSBCT0xBDQogICAgICAgICovDQoNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiQ29tbyBhdGl2YXIgbyBEw6liaXRvIERpcmV0byIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9mYXR1cmFzLXBhZ2FtZW50b3MtZS1jYXJyZWdhbWVudG9zL3BhZ2FtZW50b3MvZGViaXRvLWRpcmV0byNhZGVyaXJkZWJpdG9kaXJldG9wY3RhYmxldCINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIkNvbW8gcGFnYXIgYSBmYXR1cmEgbmEgw6FyZWEgZGUgY2xpZW50ZSBteSBNRU8iLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvZmF0dXJhcy1wYWdhbWVudG9zLWUtY2FycmVnYW1lbnRvcy9wYWdhbWVudG9zL3BhZ2FyLWZhdHVyYSNwYWdhcmZhdHVyYXNhcmVhZGVjbGllbnRlIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiQ29tbyBwYWdhciBmYXR1cmFzIHBvciBNdWx0aWJhbmNvIiwNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL2ZhdHVyYXMtcGFnYW1lbnRvcy1lLWNhcnJlZ2FtZW50b3MvcGFnYW1lbnRvcy9wYWdhci1mYXR1cmEjcGFnYXJmYXR1cmFzbm9tdWx0aWJhbmNvIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgcHJvcHMgPSBuZXcgQXJlYVByb3BzKA0KICAgICAgICAgIDkuMTksDQogICAgICAgICAgNzYuNywNCiAgICAgICAgICAxMC41NCwNCiAgICAgICAgICA3NC4yMSwNCiAgICAgICAgICA4Ni42LA0KICAgICAgICAgIDIwLjkxLA0KICAgICAgICAgICJjZW50ZXIiLA0KICAgICAgICAgICJ0b3AiDQogICAgICAgICk7DQogICAgICAgIGl0ZW5zLnB1c2goDQogICAgICAgICAgbmV3IEl0ZW1zKA0KICAgICAgICAgICAgIk1laW9zIGRlIFBhZ2FtZW50byIsDQogICAgICAgICAgICAiTWVpb3MgZGUgUGFnYW1lbnRvIiwNCiAgICAgICAgICAgICJUb2RhIGEgaW5mb3JtYcOnw6NvIHF1ZSBwcmVjaXNhIHBhcmEgcGFnYXIgYSBmYXR1cmEgZXN0w6EgYXF1aS48L3A+PHAgY2xhc3M9J2Rlc2NyaWNhbyc+U2FpYmEgY29tbyA8c3Ryb25nPmF0aXZhciBvIETDqWJpdG8gRGlyZXRvPC9zdHJvbmc+LCB1bWEgZm9ybWEgZ3JhdHVpdGEgZSBjw7Ntb2RhIGRlIHBhZ2FyIGEgc3VhIGZhdHVyYS48L3A+PHAgY2xhc3M9J2Rlc2NyaWNhbyc+U2Ugb3B0YXIgcG9yIDxzdHJvbmc+cGFnYXIgcG9yIE1CPC9zdHJvbmc+LCBzYWliYSBxdWUgYSBlbnRpZGFkZSBlIGEgcmVmZXLDqm5jaWEgc8OjbyBzZW1wcmUgYXMgbWVzbWFzLiBTw7MgbXVkYSBvIHZhbG9yLiIsDQogICAgICAgICAgICBwcm9wcywNCiAgICAgICAgICAgIGxpbmtlcw0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgLy8gTElNUEEgREFET1MNCiAgICAgICAgbGlua2VzID0gW107DQogICAgICAgIHByb3BzID0gIiI7DQogICAgICAgIC8vICMjIyMgQURJQ0lPTkEgTk9WQSBCT0xBDQoNCiAgICAgICAgLy8gYWRpY2lvbmEgdHVkbyDDoCBwYWdpbmENCiAgICAgICAgcGFncy5wdXNoKA0KICAgICAgICAgIG5ldyBQYWcoDQogICAgICAgICAgICAiUMOhZ2luYSAxIiwNCiAgICAgICAgICAgIGl0ZW5zLA0KICAgICAgICAgICAgLy8iaHR0cHM6Ly93d3cubWVvLnB0L1B1Ymxpc2hpbmdJbWFnZXMvcGFnaW5hcy9fZmF0dXJhX2ludGVyYXRpdmEvMUZhdHVyYV9VTkxfUGFnZV8xLnBuZyINCiAgICAgICAgICAgICJodHRwczovL2NvbnRldWRvcy5tZW8ucHQvU3R5bGUlMjBMaWJyYXJ5L2NvbnN1bW8vaW1hZ2VzL2ZhdHVyYWludGVyYXRpdmEvMUZhdHVyYVRlbGVtb3ZlbF9wMS5qcGciDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBpdGVucyA9IFtdOw0KDQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIlNhaWJhIG8gcXVlIMOpIG8gUHJvZ3JhbWEgTUVPUyIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9wcm9kdXRvcy1tZW8vbWVvcy9wcm9ncmFtYSNvcXVlZW9wcm9ncmFtYW1lb3MiDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJDb25oZcOnYSBhcyBzdWdlc3TDtWVzIGUgbyBjYXTDoWxvZ28iLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9tZW9zIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCg0KICAgICAgICBwcm9wcyA9IG5ldyBBcmVhUHJvcHMoDQogICAgICAgICAgNi4xOSwNCiAgICAgICAgICA2LjY2LA0KICAgICAgICAgIDUuNTQsDQogICAgICAgICAgNC44LA0KICAgICAgICAgIDg2LjYsDQogICAgICAgICAgOC41LA0KICAgICAgICAgICJjZW50ZXIiLA0KICAgICAgICAgICJib3R0b20iDQogICAgICAgICk7DQogICAgICAgIGl0ZW5zLnB1c2goDQogICAgICAgICAgbmV3IEl0ZW1zKA0KICAgICAgICAgICAgIlByb2dyYW1hIE1FT1MiLA0KICAgICAgICAgICAgIlByb2dyYW1hIE1FT1MiLA0KICAgICAgICAgICAgIk5lc3RhIMOhcmVhIHBvZGUgdmVyIG8gPHN0cm9uZz5zYWxkbyBNRU9TPC9zdHJvbmc+IGUgcHJpbmNpcGFpcyBtb3ZpbWVudG9zLiIsDQogICAgICAgICAgICBwcm9wcywNCiAgICAgICAgICAgIGxpbmtlcw0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgLy8gTElNUEEgREFET1MNCiAgICAgICAgbGlua2VzID0gW107DQogICAgICAgIHByb3BzID0gIiI7DQogICAgICAgIC8vICMjIyMgQURJQ0lPTkEgTk9WQSBCT0xBDQoNCiAgICAgICAgLy8gbmFvIHRlbSB1bCBkZSBsaW5rcw0KDQogICAgICAgIHByb3BzID0gbmV3IEFyZWFQcm9wcygNCiAgICAgICAgICA2LjE5LA0KICAgICAgICAgIDI2LjgzLA0KICAgICAgICAgIDcuNTQsDQogICAgICAgICAgMjcuMDYsDQogICAgICAgICAgODEuNiwNCiAgICAgICAgICA2LjUsDQogICAgICAgICAgImNlbnRlciIsDQogICAgICAgICAgImJvdHRvbSINCiAgICAgICAgKTsNCiAgICAgICAgaXRlbnMucHVzaCgNCiAgICAgICAgICBuZXcgSXRlbXMoDQogICAgICAgICAgICAiQWRlc8O1ZXMiLA0KICAgICAgICAgICAgIkFkZXPDtWVzIiwNCiAgICAgICAgICAgICJOZXN0YSDDoXJlYSwgcG9kZSB2ZXIgbm8gcGVyw61vZG8gaW5kaWNhZG8sIG8gdmFsb3IgZGUgYWRlc8OjbyBhbyB0YXJpZsOhcmlvIGUgcmVzcGV0aXZvcyBkZXNjb250b3MgY29tZXJjaWFpcy4iLA0KICAgICAgICAgICAgcHJvcHMsDQogICAgICAgICAgICBsaW5rZXMNCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIC8vIExJTVBBIERBRE9TDQogICAgICAgIGxpbmtlcyA9IFtdOw0KICAgICAgICBwcm9wcyA9ICIiOw0KICAgICAgICAvLyAjIyMjIEFESUNJT05BIE5PVkEgQk9MQQ0KDQogICAgICAgIC8vIG5hbyB0ZW0gdWwgZGUgbGlua3MNCg0KICAgICAgICBwcm9wcyA9IG5ldyBBcmVhUHJvcHMoDQogICAgICAgICAgNi4xOSwNCiAgICAgICAgICAzMi44MywNCiAgICAgICAgICA3LjU0LA0KICAgICAgICAgIDM0LjA2LA0KICAgICAgICAgIDgxLjYsDQogICAgICAgICAgOC41LA0KICAgICAgICAgICJjZW50ZXIiLA0KICAgICAgICAgICJib3R0b20iDQogICAgICAgICk7DQogICAgICAgIGl0ZW5zLnB1c2goDQogICAgICAgICAgbmV3IEl0ZW1zKA0KICAgICAgICAgICAgIk1lbnNhbGlkYWRlcyIsDQogICAgICAgICAgICAiTWVuc2FsaWRhZGVzIiwNCiAgICAgICAgICAgICJOZXN0YSDDoXJlYSBwb2RlIHZlciBubyBwZXLDrW9kbyBpbmRpY2FkbywgYSA8c3Ryb25nPm1lbnNhbGlkYWRlIGRvIHRhcmlmw6FyaW88L3N0cm9uZz4gZSBkb3MgPHN0cm9uZz5zZXJ2acOnb3MgYWRpY2lvbmFpczwvc3Ryb25nPiAoZXguIGV4dHJhIGRlIGludGVybmV0LCB3YWl0aW5nIHJpbmcpIGUgcmVzcGV0aXZvcyBkZXNjb250b3MsIGNvbW8gcG9yIGV4LiBvIGRlc2NvbnRvIG1lbnNhbCBkZSBhZGVzw6NvIMOgIEZhdHVyYSBFbGV0csOzbmljYS4iLA0KICAgICAgICAgICAgcHJvcHMsDQogICAgICAgICAgICBsaW5rZXMNCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIC8vIExJTVBBIERBRE9TDQogICAgICAgIGxpbmtlcyA9IFtdOw0KICAgICAgICBwcm9wcyA9ICIiOw0KICAgICAgICAvLyAjIyMjIEFESUNJT05BIE5PVkEgQk9MQQ0KDQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIlNhYmVyIG1haXMgc29icmUgZXh0cmFtZW5zYWxpZGFkZSIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9mYXR1cmFzLXBhZ2FtZW50b3MtZS1jYXJyZWdhbWVudG9zL2NvbnN1bW9zLWUtY29udHJvbG8tZGUtY3VzdG9zL2V4dHJhbWVuc2FsaWRhZGUjZXh0cmFtZW5zYWxpZGFkZWVzYWxkb3JlY2FyZ2EiDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICAvLydodHRwczovL3d3dy5tZW8ucHQvUHVibGlzaGluZ0ltYWdlcy92aWRlb3MvYWp1ZGEvVW5saW1pdGVkLUNvbnRyb2xvLWRlLWN1c3Rvcy9VbmxpbWl0ZWQtQ29udHJvbG8tZGUtY3VzdG9zLm1wNCcpKTsNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiQ29tbyBjb250cm9sYXIgY29uc3Vtb3MiLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvZmF0dXJhcy1wYWdhbWVudG9zLWUtY2FycmVnYW1lbnRvcy9jb25zdW1vcy1lLWNvbnRyb2xvLWRlLWN1c3Rvcy9jb25zdWx0YXItY29uc3Vtb3MjY29uc3VsdGFyY29uc3Vtb3N1c2QiDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJDb21vIGNvbnN1bHRhciBkZXRhbGhlIGRlIGNvbXVuaWNhw6fDtWVzIiwNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL2ZhdHVyYXMtcGFnYW1lbnRvcy1lLWNhcnJlZ2FtZW50b3MvZmF0dXJhcy9hbHRlcmFyLWRhZG9zLWRlLWZhdHVyYSNkZXRhbGhlZGVjb211bmljYWNvZXMiDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJBbGVydGFzIGRlIGNvbnN1bW8gbm8gdGVsZW3Ds3ZlbCIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9mYXR1cmFzLXBhZ2FtZW50b3MtZS1jYXJyZWdhbWVudG9zL2NvbnN1bW9zLWUtY29udHJvbG8tZGUtY3VzdG9zL2FsZXJ0YXMjYWxlcnRhc2RlY29uc3Vtb3Nkb3RlbGVtb3ZlbCINCiAgICAgICAgICApDQogICAgICAgICk7DQoNCiAgICAgICAgcHJvcHMgPSBuZXcgQXJlYVByb3BzKA0KICAgICAgICAgIDYuMTksDQogICAgICAgICAgNDIuODMsDQogICAgICAgICAgNi41NCwNCiAgICAgICAgICA0MywNCiAgICAgICAgICA4NC42LA0KICAgICAgICAgIDEzLjY4LA0KICAgICAgICAgICJjZW50ZXIiLA0KICAgICAgICAgICJ0b3AiDQogICAgICAgICk7DQogICAgICAgIGl0ZW5zLnB1c2goDQogICAgICAgICAgbmV3IEl0ZW1zKA0KICAgICAgICAgICAgIkNvbnN1bW9zIiwNCiAgICAgICAgICAgICJDb25zdW1vcyIsDQogICAgICAgICAgICAiQXF1aSBwb2RlIHZlciBhIDxzdHJvbmc+ZmF0dXJhw6fDo28gZG9zIGNvbnN1bW9zIHF1ZSByZWFsaXpvdSBubyBtw6pzIGFudGVyaW9yPC9zdHJvbmc+IGUgcXVlIHBvZGVtIHNlciBkZSB2b3osIGludGVybmV0IG91IHJvYW1pbmcuPC9wPjxwIGNsYXNzPSdkZXNjcmljYW8nPlBvZGUgY29uc3VsdGFyIG8gdmFsb3IgZGFzIGNvbXVuaWNhw6fDtWVzIHF1ZSBuw6NvIGVzdMOjbyBpbmNsdcOtZGFzIG5vIHRhcmlmw6FyaW8sIGFzc2ltIGNvbW8gbyBuwrogZGUgY29tdW5pY2HDp8O1ZXMgcXVlIGZvcmFtIHJlYWxpemFkYXMuPC9wPjxwIGNsYXNzPSdkZXNjcmljYW8nPkNhc28gbsOjbyBwcmV0ZW5kYSByZWFsaXphciBjaGFtYWRhcyBvdSBhY2Vzc29zIGNvbSBjdXN0bywgcG9kZSBhbHRlcmFyIG8gdmFsb3IgZGEgZXh0cmFtZW5zYWxpZGFkZSwgbWFzIGFsZXJ0YW1vcyBxdWUgw6kgaW1wb3J0YW50ZSB0ZXIgc2VtcHJlIGFsZ3VtIHZhbG9yIHBhcmEgY29tdW5pY2HDp8O1ZXMgdXJnZW50ZXMgZSBpbmVzcGVyYWRhcy4iLA0KICAgICAgICAgICAgcHJvcHMsDQogICAgICAgICAgICBsaW5rZXMNCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIC8vIExJTVBBIERBRE9TDQogICAgICAgIGxpbmtlcyA9IFtdOw0KICAgICAgICBwcm9wcyA9ICIiOw0KDQogICAgICAgIC8vIGFkaWNpb25hIHR1ZG8gw6AgcGFnaW5hDQogICAgICAgIHBhZ3MucHVzaCgNCiAgICAgICAgICBuZXcgUGFnKA0KICAgICAgICAgICAgIlDDoWdpbmEgMiIsDQogICAgICAgICAgICBpdGVucywNCiAgICAgICAgICAgIC8vImh0dHBzOi8vd3d3Lm1lby5wdC9QdWJsaXNoaW5nSW1hZ2VzL3BhZ2luYXMvX2ZhdHVyYV9pbnRlcmF0aXZhLzFGYXR1cmFfVU5MX1BhZ2VfMi5wbmciDQogICAgICAgICAgICAiaHR0cHM6Ly9jb250ZXVkb3MubWVvLnB0L1N0eWxlJTIwTGlicmFyeS9jb25zdW1vL2ltYWdlcy9mYXR1cmFpbnRlcmF0aXZhLzFGYXR1cmFUZWxlbW92ZWxfcDIuanBnIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgaXRlbnMgPSBbXTsNCg0KICAgICAgICAvLyBlIGFkaWNpb25hciDDoXMgZmF0dXJhcw0KICAgICAgICBmYXRzLnB1c2gobmV3IEZhdHVyYSgiMcKqIEZhdHVyYSAtIFRlbGVtw7N2ZWwiLCBwYWdzKSk7DQoNCiAgICAgICAgLy8gYWRpY2lvbmEgYSBmYXR1cmEgw6EgdGFiIGF0dWFsDQogICAgICAgIC8vaHR0cHM6Ly93d3cubWVvLnB0L1B1Ymxpc2hpbmdJbWFnZXMvdmlkZW9zL2FqdWRhL0NvbmhlY2EtbWVsaG9yLWEtc3VhLTFhLWZhdHVyYS9Db25oZWNhLW1lbGhvci1hLXN1YS0xYS1mYXR1cmEubXA0DQoNCiAgICAgICAgLy90YWJzLnB1c2gobmV3IEFyZWFzVGFicygiMcKqIEZhdHVyYSAtIFRlbGVtw7N2ZWwiLGZhdHMsIkTDunZpZGFzIGNvbSBhIHN1YSBmYXR1cmE/IiwgImh0dHBzOi8vd3d3Lm1lby5wdC9QdWJsaXNoaW5nSW1hZ2VzL3ZpZGVvcy9hanVkYS9GYXR1cmFfTW92ZWwubXA0IiwgIlNhaWJhIGNvbW8gaW50ZXJwcmV0YXIgYSBzdWEgZmF0dXJhIGUgY29tcHJlZW5kYSBmYWNpbG1lbnRlIHRvZGEgYSBpbmZvcm1hw6fDo28gcXVlIGxoZSBlbnZpYW1vcy4iKSkNCg0KICAgICAgICB0YWJzLnB1c2goDQogICAgICAgICAgbmV3IEFyZWFzVGFicygNCiAgICAgICAgICAgICIxwqogRmF0dXJhIC0gVGVsZW3Ds3ZlbCIsDQogICAgICAgICAgICBmYXRzLA0KICAgICAgICAgICAgIkTDunZpZGFzIG5hIGZhdHVyYT8iLA0KICAgICAgICAgICAgIiIsDQogICAgICAgICAgICAiU2FpYmEgY29tbyBlc3TDoSBvcmdhbml6YWRhIGUgdmVqYSBhcyBleHBsaWNhw6fDtWVzIHBhc3NvIGEgcGFzc28uIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCg0KICAgICAgICAvLyBsaW1wYXIgZmF0dXJhIGRlcG9pcyBkZSBhZGljaW9uYXIgYSB1bHRpbWEgcMOhZ2luYSBlIGFkaWNpb25hciBhIGZhdHVyYSDDoSB0YWIsIHVtYSB2ZXogcXVlIMOpIHNvIHVtYSBmYXR1cmEgcG9yIHRhYg0KICAgICAgICBmYXRzID0gW107DQogICAgICAgIC8vIGxpbXBhICBhcyBwYWdpbmFzDQogICAgICAgIHBhZ3MgPSBbXTsNCg0KICAgICAgICAvKiAjIyMjIyMjIyMjIyMjIEZJTSBGQVRVUkEgIyMjIyMjIyMjIyMjIyMqLw0KICAgICAgICAvKiAjIyMjIyMjIyMjIyMjIyMgRkFUVVJBIFRFTEVNT1ZFTCAgIyMjIyMjIyMjIyMjIyMjKi8NCiAgICAgICAgLyogIyMjIyMjIyMjIyMjIyMjIEZBVFVSQSBURUxFTU9WRUwgICMjIyMjIyMjIyMjIyMjIyovDQogICAgICAgIC8qICMjIyMjIyMjIyMjIyMjIyBGQVRVUkEgVEVMRU1PVkVMICAjIyMjIyMjIyMjIyMjIyMqLw0KDQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIlNhYmVyIG8gcXVlIHBvZGUgZmF6ZXIgbm8gbXkgTUVPIiwNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL3Byb2R1dG9zLW1lby9nZXJpci1wcm9kdXRvcy9hcmVhLWRlLWNsaWVudGUjdmFudGFnZW5zZGVhZGVyaXJhcmVhZGVjbGllbnRlIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiQ29tbyBpbnN0YWxhciBhIGFwcCBteSBNRU8iLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvcHJvZHV0b3MtbWVvL2dlcmlyLXByb2R1dG9zL2FyZWEtZGUtY2xpZW50ZSNpbnN0YWxhcmFwcG15bWVvIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCg0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJDb21vIHZlciBvcyBzZXJ2acOnb3Mgbm8gbXkgTUVPICIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9wcm9kdXRvcy1tZW8vZ2VyaXItcHJvZHV0b3MvYXJlYS1kZS1jbGllbnRlI3JlZ2lzdG9uYWFyZWFkZWNsaWVudGUiDQogICAgICAgICAgKQ0KICAgICAgICApOw0KDQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIkVudHJhciBubyBteSBNRU8iLA0KICAgICAgICAgICAgImh0dHBzOi8vbXltZW8ucGFnZS5saW5rL2hvbWUiDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJDb25zdWx0YXIgYXMgbGluaGFzIGRlIGFwb2lvIE1FTyIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2xpbmhhcy1hcG9pbyINCiAgICAgICAgICApDQogICAgICAgICk7DQoNCiAgICAgICAgcHJvcHMgPSBuZXcgQXJlYVByb3BzKA0KICAgICAgICAgIDUwLjAsDQogICAgICAgICAgNy4xMywNCiAgICAgICAgICA1Mi40MSwNCiAgICAgICAgICA1LjExLA0KICAgICAgICAgIDIyLjQ0LA0KICAgICAgICAgIDcuMjMsDQogICAgICAgICAgImNlbnRlciIsDQogICAgICAgICAgImJvdHRvbSINCiAgICAgICAgKTsNCg0KICAgICAgICBpdGVucy5wdXNoKA0KICAgICAgICAgIG5ldyBJdGVtcygNCiAgICAgICAgICAgICLDgXJlYSBkZSBDbGllbnRlIG15IE1FTyIsDQogICAgICAgICAgICAiw4FyZWEgZGUgQ2xpZW50ZSA8YSBocmVmPSdodHRwczovL3d3dy5tZW8ucHQvY2xpZW50ZScgdGFyZ2V0PSdfYmxhbmsnPm15IE1FTzwvYT4iLA0KICAgICAgICAgICAgIlBlcm1pdGUgZ2VyaXIgb3Mgc2VydmnDp29zIHNlbSBjdXN0b3MgMjRoL2RpYSwgZGlzcG9uw612ZWwgbm8gY29tcHV0YWRvciwgdGFibGV0IG91IHRlbGVtw7N2ZWwuIiwNCiAgICAgICAgICAgIHByb3BzLA0KICAgICAgICAgICAgbGlua2VzDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICAvLyBMSU1QQSBEQURPUw0KICAgICAgICBsaW5rZXMgPSBbXTsNCiAgICAgICAgcHJvcHMgPSAiIjsNCiAgICAgICAgLy8gIyMjIyBBRElDSU9OQSBOT1ZBIEJPTEENCg0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJPIHF1ZSDDqSBvIENWUCIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9wcm9kdXRvcy1tZW8vdGVsZWZvbmUvcG9ydGFiaWxpZGFkZSNvcXVlZW9jdnBwYWNvdGVzIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiQWNlc3NvIGFvIG15IE1FTyIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9wcm9kdXRvcy1tZW8vZ2VyaXItcHJvZHV0b3MvYXJlYS1kZS1jbGllbnRlI3JlZ2lzdG9uYWFyZWFkZWNsaWVudGUiDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBwcm9wcyA9IG5ldyBBcmVhUHJvcHMoDQogICAgICAgICAgOS4xOSwNCiAgICAgICAgICAxNC41NywNCiAgICAgICAgICAxMS4xNCwNCiAgICAgICAgICAxMy4zLA0KICAgICAgICAgIDMwLjU3LA0KICAgICAgICAgIDEwLjExLA0KICAgICAgICAgICJyaWdodCIsDQogICAgICAgICAgIm1pZGRsZSINCiAgICAgICAgKTsNCiAgICAgICAgaXRlbnMucHVzaCgNCiAgICAgICAgICBuZXcgSXRlbXMoDQogICAgICAgICAgICAiRGFkb3MgZGUgQ2xpZW50ZSIsDQogICAgICAgICAgICAiRGFkb3MgZGUgQ2xpZW50ZSIsDQogICAgICAgICAgICAiRXN0ZXMgc8OjbyBvcyBuw7ptZXJvcyBxdWUgbyBpZGVudGlmaWNhbSBubyBNRU8uPC9wPjxwIGNsYXNzPSdkZXNjcmljYW8nPkFxdWkgdGVtIG8gbsK6IGRlIGNvbnRhIGUgbyB0YXJpZsOhcmlvIHN1YnNjcml0by48cCBjbGFzcz0nZGVzY3JpY2FvJz5UZW5oYSBlc3RlcyBkYWRvcyDDoCBtw6NvIHF1YW5kbyBub3MgY29udGFjdGFyIG91IHF1YW5kbyBhc3NvY2lhciBvcyBzZXJ2acOnb3Mgbm8gbXkgTUVPLiIsDQogICAgICAgICAgICBwcm9wcywNCiAgICAgICAgICAgIGxpbmtlcw0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgLy8gTElNUEEgREFET1MNCiAgICAgICAgbGlua2VzID0gW107DQogICAgICAgIHByb3BzID0gIiI7DQogICAgICAgIC8vICMjIyMgQURJQ0lPTkEgTk9WQSBCT0xBDQoNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiQ29tcHJlZW5kZXIgdmFsb3IgZGUgZmF0dXJhIHN1cGVyaW9yIGFvIGVzcGVyYWRvIiwNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL2ZhdHVyYXMtcGFnYW1lbnRvcy1lLWNhcnJlZ2FtZW50b3MvZmF0dXJhcy9jb21wcmVlbmRlci1hLWZhdHVyYSNmYXR1cmF2YWxvcnN1cGVyaW9yYW9lc3BlcmFkbyINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIHByb3BzID0gbmV3IEFyZWFQcm9wcygNCiAgICAgICAgICA5LjE5LA0KICAgICAgICAgIDMxLjE3LA0KICAgICAgICAgIDExLjE0LA0KICAgICAgICAgIDI4LjcyLA0KICAgICAgICAgIDg2Ljc1LA0KICAgICAgICAgIDE2LjUzLA0KICAgICAgICAgICJjZW50ZXIiLA0KICAgICAgICAgICJ0b3AiDQogICAgICAgICk7DQogICAgICAgIGl0ZW5zLnB1c2goDQogICAgICAgICAgbmV3IEl0ZW1zKA0KICAgICAgICAgICAgIlJlc3VtbyBkYSBGYXR1cmEiLA0KICAgICAgICAgICAgIlJlc3VtbyBkYSBGYXR1cmEiLA0KICAgICAgICAgICAgIkFxdWkgcG9kZSB2ZXIgbyByZXN1bW8gZGEgZmF0dXJhIGRvIG3DqnMsIGEgZGF0YSBsaW1pdGUgZGUgcGFnYW1lbnRvIGRhIGZhdHVyYSBlIG8gdmFsb3IgYSBwYWdhci48YnI+PGJyPkEgZmF0dXJhw6fDo28gZXN0w6Egb3JnYW5pemFkYSBlbSB0csOqcyDDoXJlYXM6PC9wPiIgKw0KICAgICAgICAgICAgICAiPHN0cm9uZz4tIEFkZXPDtWVzPC9zdHJvbmc+OiB2YWxvcmVzIHJlbGF0aXZvcyBhIGFkZXPDo28gYSBub3ZvcyBzZXJ2acOnb3M8YnI+IiArDQogICAgICAgICAgICAgICI8c3Ryb25nPi0gTWVuc2FsaWRhZGVzPC9zdHJvbmc+OiB2YWxvcmVzIHJlbGF0aXZvcyBhIG1lbnNhbGlkYWRlcyBkb3MgdGFyaWbDoXJpb3Mgc3Vic2NyaXRvczxicj4iICsNCiAgICAgICAgICAgICAgIjxzdHJvbmc+LSBDb25zdW1vczwvc3Ryb25nPjogdmFsb3JlcyBjb25zdW1pZG9zIG5vIG3DqnMgYW50ZXJpb3Igw6AgZmF0dXJhPGJyPjxicj4iICsNCiAgICAgICAgICAgICAgIjxwIGNsYXNzPSdkZXNjcmljYW8nPkEgMcKqIGZhdHVyYSBwb2RlIG7Do28gY29ycmVzcG9uZGVyIGEgdW0gbcOqcyBpbnRlaXJvIHBvcnF1ZSBhIGZhdHVyYcOnw6NvIHPDsyBpbmljaWEgbm8gZGlhIGRlIGFkZXPDo28iLA0KICAgICAgICAgICAgcHJvcHMsDQogICAgICAgICAgICBsaW5rZXMNCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIC8vIExJTVBBIERBRE9TDQogICAgICAgIGxpbmtlcyA9IFtdOw0KICAgICAgICBwcm9wcyA9ICIiOw0KICAgICAgICAvLyAjIyMjIEFESUNJT05BIE5PVkEgQk9MQQ0KDQogICAgICAgIC8vIG5hbyB0ZW0gbGlua2VzDQoNCiAgICAgICAgbGlua2VzID0gW107DQogICAgICAgIHByb3BzID0gbmV3IEFyZWFQcm9wcygNCiAgICAgICAgICA5LjE5LA0KICAgICAgICAgIDQ2LjA2LA0KICAgICAgICAgIDExLjU0LA0KICAgICAgICAgIDQ5LjA0LA0KICAgICAgICAgIDg2LjYsDQogICAgICAgICAgMTAuMzIsDQogICAgICAgICAgImNlbnRlciIsDQogICAgICAgICAgInRvcCINCiAgICAgICAgKTsNCiAgICAgICAgaXRlbnMucHVzaCgNCiAgICAgICAgICBuZXcgSXRlbXMoDQogICAgICAgICAgICAiRXh0cmF0byBkZSBDb250YSIsDQogICAgICAgICAgICAiRXh0cmF0byBkZSBDb250YSIsDQogICAgICAgICAgICAnQXF1aSBlbmNvbnRyYSB0b2RvcyBvcyBtb3ZpbWVudG9zIG5hIGNvbnRhLCBkZXNkZSBhIMO6bHRpbWEgZmF0dXJhIGF0w6kgw6AgZGF0YSBkZSBlbWlzc8OjbyBkYSBmYXR1cmEgZG8gbcOqcy4gQ2FzbyBleGlzdGFtIHZhbG9yZXMgZGUgZmF0dXJhcyBhbnRlcmlvcmVzIHBvciBwYWdhciwgb3MgdmFsb3JlcyBzZXLDo28gaW5jbHXDrWRvcyBubyA8c3Ryb25nPlZhbG9yIGEgcGFnYXI8L3N0cm9uZz4uPC9wPjxwIGNsYXNzPSJkZXNjcmljYW8iPlRvZG9zIG9zIHZhbG9yZXMgcGFnb3MgYXDDs3MgYSBkYXRhIGRlIGVtaXNzw6NvIGRhIGZhdHVyYSwgc8OzIHNlcsOjbyB2aXPDrXZlaXMgbmEgcHLDs3hpbWEgZmF0dXJhLicsDQogICAgICAgICAgICBwcm9wcywNCiAgICAgICAgICAgIGxpbmtlcw0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgLy8gTElNUEEgREFET1MNCiAgICAgICAgbGlua2VzID0gW107DQogICAgICAgIHByb3BzID0gIiI7DQogICAgICAgIC8vICMjIyMgQURJQ0lPTkEgTk9WQSBCT0xBDQoNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiQ29tbyBhdGl2YXIgbyBEw6liaXRvIERpcmV0byIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9mYXR1cmFzLXBhZ2FtZW50b3MtZS1jYXJyZWdhbWVudG9zL3BhZ2FtZW50b3MvZGViaXRvLWRpcmV0byNhZGVyaXJkZWJpdG9kaXJldG9wY3RhYmxldCINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIkNvbW8gcGFnYXIgYSBmYXR1cmEgbmEgw6FyZWEgZGUgY2xpZW50ZSBteSBNRU8iLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvZmF0dXJhcy1wYWdhbWVudG9zLWUtY2FycmVnYW1lbnRvcy9wYWdhbWVudG9zL3BhZ2FyLWZhdHVyYSNwYWdhcmZhdHVyYXNhcmVhZGVjbGllbnRlIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiQ29tbyBwYWdhciBGYXR1cmFzIHBvciBNdWx0aWJhbmNvIiwNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL2ZhdHVyYXMtcGFnYW1lbnRvcy1lLWNhcnJlZ2FtZW50b3MvcGFnYW1lbnRvcy9wYWdhci1mYXR1cmEjcGFnYXJmYXR1cmFzbm9tdWx0aWJhbmNvIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgcHJvcHMgPSBuZXcgQXJlYVByb3BzKA0KICAgICAgICAgIDkuMTksDQogICAgICAgICAgNzYuNDksDQogICAgICAgICAgMTAuNTQsDQogICAgICAgICAgNzQuMCwNCiAgICAgICAgICA4Ni42LA0KICAgICAgICAgIDIxLjcsDQogICAgICAgICAgImNlbnRlciIsDQogICAgICAgICAgInRvcCINCiAgICAgICAgKTsNCiAgICAgICAgaXRlbnMucHVzaCgNCiAgICAgICAgICBuZXcgSXRlbXMoDQogICAgICAgICAgICAiTWVpb3MgZGUgUGFnYW1lbnRvIiwNCiAgICAgICAgICAgICJNZWlvcyBkZSBQYWdhbWVudG8iLA0KICAgICAgICAgICAgIlRvZGEgYSBpbmZvcm1hw6fDo28gcXVlIHByZWNpc2EgcGFyYSBwYWdhciBhIGZhdHVyYSBlc3TDoSBhcXVpLjwvcD48cCBjbGFzcz0nZGVzY3JpY2FvJz5TYWliYSBjb21vIDxzdHJvbmc+YXRpdmFyIG8gRMOpYml0byBEaXJldG88L3N0cm9uZz4sIHVtYSBmb3JtYSBncmF0dWl0YSBlIGPDs21vZGEgZGUgcGFnYXIgYSBzdWEgZmF0dXJhLjwvcD48cCBjbGFzcz0nZGVzY3JpY2FvJz5TZSBvcHRhciBwb3IgPHN0cm9uZz5wYWdhciBwb3IgTUI8L3N0cm9uZz4sIHNhaWJhIHF1ZSBhIGVudGlkYWRlIGUgYSByZWZlcsOqbmNpYSBzw6NvIHNlbXByZSBhcyBtZXNtYXMuIFPDsyBtdWRhIG8gdmFsb3IuIiwNCiAgICAgICAgICAgIHByb3BzLA0KICAgICAgICAgICAgbGlua2VzDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICAvLyBMSU1QQSBEQURPUw0KICAgICAgICBsaW5rZXMgPSBbXTsNCiAgICAgICAgcHJvcHMgPSAiIjsNCiAgICAgICAgLy8gIyMjIyBBRElDSU9OQSBOT1ZBIEJPTEENCg0KICAgICAgICAvLyBhZGljaW9uYSB0dWRvIMOgIHBhZ2luYQ0KICAgICAgICBwYWdzLnB1c2goDQogICAgICAgICAgbmV3IFBhZygNCiAgICAgICAgICAgICJQw6FnaW5hIDEiLA0KICAgICAgICAgICAgaXRlbnMsDQogICAgICAgICAgICAiaHR0cHM6Ly9jb250ZXVkb3MubWVvLnB0L1N0eWxlJTIwTGlicmFyeS9jb25zdW1vL2ltYWdlcy9mYXR1cmFpbnRlcmF0aXZhLzJGYXR1cmFUZWxlbW92ZWxfcDEuanBnIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgaXRlbnMgPSBbXTsNCg0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJDb21vIGFjdW11bGFyIE1FT1MuIiwNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL3Byb2R1dG9zLW1lby9tZW9zL3Byb2dyYW1hI29xdWVlb3Byb2dyYW1hbWVvcyINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIkNvbmhlY2VyIGFzIHN1Z2VzdMO1ZXMgZSBvIGNhdMOhbG9nbyIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L21lb3MiDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJDb21vIGNvbnN1bHRhciBvIHNhbGRvIE1FT1MiLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvcHJvZHV0b3MtbWVvL21lb3Mvc2FsZG8jY29tb2NvbnN1bHRhcnNhbGRvbWVvcyINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIk9uZGUgcG9zc28gdHJvY2FyIE1FT1MiLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvcHJvZHV0b3MtbWVvL21lb3MvdHJvY2FyI29uZGVwb3Nzb3Ryb2Nhcm1lb3MiDQogICAgICAgICAgKQ0KICAgICAgICApOw0KICAgICAgICBwcm9wcyA9IG5ldyBBcmVhUHJvcHMoDQogICAgICAgICAgOS4xOSwNCiAgICAgICAgICA2LjkxLA0KICAgICAgICAgIDUuMjQsDQogICAgICAgICAgNS41LA0KICAgICAgICAgIDg3LjY1LA0KICAgICAgICAgIDcuNSwNCiAgICAgICAgICAiY2VudGVyIiwNCiAgICAgICAgICAiYm90dG9tIg0KICAgICAgICApOw0KICAgICAgICBpdGVucy5wdXNoKA0KICAgICAgICAgIG5ldyBJdGVtcygNCiAgICAgICAgICAgICJQcm9ncmFtYSBNRU9TIiwNCiAgICAgICAgICAgICJQcm9ncmFtYSBNRU9TIiwNCiAgICAgICAgICAgICJOZXN0YSDDoXJlYSBwb2RlIHZlciBvIDxzdHJvbmc+c2FsZG8gTUVPUzwvc3Ryb25nPiBlIHByaW5jaXBhaXMgbW92aW1lbnRvcy4iLA0KICAgICAgICAgICAgcHJvcHMsDQogICAgICAgICAgICBsaW5rZXMNCiAgICAgICAgICApDQogICAgICAgICk7DQoNCiAgICAgICAgLy8gTElNUEEgREFET1MNCiAgICAgICAgbGlua2VzID0gW107DQogICAgICAgIHByb3BzID0gIiI7DQogICAgICAgIC8vICMjIyMgQURJQ0lPTkEgTk9WQSBCT0xBDQoNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiQ29tcHJlZW5kZXIgdmFsb3IgZGUgZmF0dXJhIHN1cGVyaW9yIGFvIGVzcGVyYWRvIiwNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL2ZhdHVyYXMtcGFnYW1lbnRvcy1lLWNhcnJlZ2FtZW50b3MvZmF0dXJhcy9jb21wcmVlbmRlci1hLWZhdHVyYSNmYXR1cmF2YWxvcnN1cGVyaW9yYW9lc3BlcmFkbyINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIHByb3BzID0gbmV3IEFyZWFQcm9wcygNCiAgICAgICAgICA0LjE5LA0KICAgICAgICAgIDI3LjIzLA0KICAgICAgICAgIDUuNTQsDQogICAgICAgICAgMjQuMDYsDQogICAgICAgICAgODcuNjUsDQogICAgICAgICAgMTEuMzYsDQogICAgICAgICAgImNlbnRlciIsDQogICAgICAgICAgInRvcCINCiAgICAgICAgKTsNCiAgICAgICAgaXRlbnMucHVzaCgNCiAgICAgICAgICBuZXcgSXRlbXMoDQogICAgICAgICAgICAiTWVuc2FsaWRhZGVzIiwNCiAgICAgICAgICAgICJNZW5zYWxpZGFkZXMiLA0KICAgICAgICAgICAgIk5lc3RhIMOhcmVhIHBvZGUgdmVyIG5vIHBlcsOtb2RvIGRlIGZhdHVyYcOnw6NvIGluZGljYWRvLCBvIHZhbG9yIGRhIG1lbnNhbGlkYWRlIGRvIHRhcmlmw6FyaW8gZSBkb3Mgc2VydmnDp29zIGFkaWNpb25haXMgKGV4LiBleHRyYSBkZSBpbnRlcm5ldCkgZSByZXNwZXRpdm9zIGRlc2NvbnRvcyBjb21lcmNpYWlzLiIsDQogICAgICAgICAgICBwcm9wcywNCiAgICAgICAgICAgIGxpbmtlcw0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgLy8gTElNUEEgREFET1MNCiAgICAgICAgbGlua2VzID0gW107DQogICAgICAgIHByb3BzID0gIiI7DQogICAgICAgIC8vICMjIyMgQURJQ0lPTkEgTk9WQSBCT0xBDQoNCiAgICAgICAgbGlua2VzLnB1c2goDQogICAgICAgICAgbmV3IExpbmtlKA0KICAgICAgICAgICAgInVybCIsDQogICAgICAgICAgICAiU2FiZXIgbWFpcyBzb2JyZSBleHRyYW1lbnNhbGlkYWRlIiwNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL2ZhdHVyYXMtcGFnYW1lbnRvcy1lLWNhcnJlZ2FtZW50b3MvY29uc3Vtb3MtZS1jb250cm9sby1kZS1jdXN0b3MvZXh0cmFtZW5zYWxpZGFkZSNleHRyYW1lbnNhbGlkYWRlZXNhbGRvcmVjYXJnYSINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIC8vJ2h0dHBzOi8vd3d3Lm1lby5wdC9QdWJsaXNoaW5nSW1hZ2VzL3ZpZGVvcy9hanVkYS9VbmxpbWl0ZWQtQ29udHJvbG8tZGUtY3VzdG9zL1VubGltaXRlZC1Db250cm9sby1kZS1jdXN0b3MubXA0JykpOw0KICAgICAgICBsaW5rZXMucHVzaCgNCiAgICAgICAgICBuZXcgTGlua2UoDQogICAgICAgICAgICAidXJsIiwNCiAgICAgICAgICAgICJDb21vIGNvbnRyb2xhciBjb25zdW1vcyIsDQogICAgICAgICAgICAiaHR0cHM6Ly93d3cubWVvLnB0L2FqdWRhLWUtc3Vwb3J0ZS9mYXR1cmFzLXBhZ2FtZW50b3MtZS1jYXJyZWdhbWVudG9zL2NvbnN1bW9zLWUtY29udHJvbG8tZGUtY3VzdG9zL2NvbnN1bHRhci1jb25zdW1vcyNjb25zdWx0YXJjb25zdW1vc3VzZCINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIkNvbW8gY29uc3VsdGFyIGRldGFsaGUgZGUgY29tdW5pY2HDp8O1ZXMiLA0KICAgICAgICAgICAgImh0dHBzOi8vd3d3Lm1lby5wdC9hanVkYS1lLXN1cG9ydGUvZmF0dXJhcy1wYWdhbWVudG9zLWUtY2FycmVnYW1lbnRvcy9mYXR1cmFzL2FsdGVyYXItZGFkb3MtZGUtZmF0dXJhI2RldGFsaGVkZWNvbXVuaWNhY29lcyINCiAgICAgICAgICApDQogICAgICAgICk7DQogICAgICAgIGxpbmtlcy5wdXNoKA0KICAgICAgICAgIG5ldyBMaW5rZSgNCiAgICAgICAgICAgICJ1cmwiLA0KICAgICAgICAgICAgIkFsZXJ0YXMgZGUgY29uc3VtbyBubyB0ZWxlbcOzdmVsIiwNCiAgICAgICAgICAgICJodHRwczovL3d3dy5tZW8ucHQvYWp1ZGEtZS1zdXBvcnRlL2ZhdHVyYXMtcGFnYW1lbnRvcy1lLWNhcnJlZ2FtZW50b3MvY29uc3Vtb3MtZS1jb250cm9sby1kZS1jdXN0b3MvYWxlcnRhcyNhbGVydGFzZGVjb25zdW1vc2RvdGVsZW1vdmVsIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCg0KICAgICAgICBwcm9wcyA9IG5ldyBBcmVhUHJvcHMoDQogICAgICAgICAgNC4xOSwNCiAgICAgICAgICAzNy4xMywNCiAgICAgICAgICA0LjU0LA0KICAgICAgICAgIDM0Ljc0LA0KICAgICAgICAgIDg3LjY1LA0KICAgICAgICAgIDExLjcsDQogICAgICAgICAgImNlbnRlciIsDQogICAgICAgICAgInRvcCINCiAgICAgICAgKTsNCiAgICAgICAgaXRlbnMucHVzaCgNCiAgICAgICAgICBuZXcgSXRlbXMoDQogICAgICAgICAgICAiQ29uc3Vtb3MiLA0KICAgICAgICAgICAgIkNvbnN1bW9zIiwNCiAgICAgICAgICAgICJBcXVpIHBvZGUgdmVyIGEgPHN0cm9uZz5mYXR1cmHDp8OjbyBkb3MgY29uc3Vtb3MgcXVlIHJlYWxpem91IG5vIG3DqnMgYW50ZXJpb3I8L3N0cm9uZz4gZSBxdWUgcG9kZW0gc2VyIGRlIHZveiwgaW50ZXJuZXQgb3Ugcm9hbWluZy48L3A+PHAgY2xhc3M9J2Rlc2NyaWNhbyc+UG9kZSBjb25zdWx0YXIgbyB2YWxvciBkYXMgY29tdW5pY2HDp8O1ZXMgcXVlIG7Do28gZXN0w6NvIGluY2x1w61kYXMgbm8gdGFyaWbDoXJpbywgYXNzaW0gY29tbyBvIG7CuiBkZSBjb211bmljYcOnw7VlcyBxdWUgZm9yYW0gcmVhbGl6YWRhcy48L3A+PHAgY2xhc3M9J2Rlc2NyaWNhbyc+Q2FzbyBuw6NvIHByZXRlbmRhIHJlYWxpemFyIGNoYW1hZGFzIG91IGFjZXNzb3MgY29tIGN1c3RvLCBwb2RlIGFsdGVyYXIgbyB2YWxvciBkYSBleHRyYW1lbnNhbGlkYWRlLCBtYXMgYWxlcnRhbW9zIHF1ZSDDqSBpbXBvcnRhbnRlIHRlciBzZW1wcmUgYWxndW0gdmFsb3IgcGFyYSBjb211bmljYcOnw7VlcyB1cmdlbnRlcyBlIGluZXNwZXJhZGFzLiIsDQogICAgICAgICAgICBwcm9wcywNCiAgICAgICAgICAgIGxpbmtlcw0KICAgICAgICAgICkNCiAgICAgICAgKTsNCg0KICAgICAgICAvLyBMSU1QQSBEQURPUw0KICAgICAgICBsaW5rZXMgPSBbXTsNCiAgICAgICAgcHJvcHMgPSAiIjsNCiAgICAgICAgLy8gIyMjIyBBRElDSU9OQSBOT1ZBIEJPTEENCg0KICAgICAgICAvLyBhZGljaW9uYSB0dWRvIMOgIHBhZ2luYQ0KICAgICAgICBwYWdzLnB1c2goDQogICAgICAgICAgbmV3IFBhZygNCiAgICAgICAgICAgICJQw6FnaW5hIDIiLA0KICAgICAgICAgICAgaXRlbnMsDQogICAgICAgICAgICAiaHR0cHM6Ly9jb250ZXVkb3MubWVvLnB0L1N0eWxlJTIwTGlicmFyeS9jb25zdW1vL2ltYWdlcy9mYXR1cmFpbnRlcmF0aXZhLzJGYXR1cmFUZWxlbW92ZWxfcDIuanBnIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCiAgICAgICAgaXRlbnMgPSBbXTsNCg0KICAgICAgICAvLyBlIGFkaWNpb25hciDDoXMgZmF0dXJhcw0KICAgICAgICBmYXRzLnB1c2gobmV3IEZhdHVyYSgiRmF0dXJhIC0gVGVsZW3Ds3ZlbCIsIHBhZ3MpKTsNCg0KICAgICAgICAvLyBhZGljaW9uYSBhIGZhdHVyYSDDoSB0YWIgYXR1YWwNCiAgICAgICAgLy90YWJzLnB1c2gobmV3IEFyZWFzVGFicygiRmF0dXJhIC0gVGVsZW3Ds3ZlbCIsZmF0cywiRMO6dmlkYXMgY29tIGEgc3VhIGZhdHVyYT8iLCAiaHR0cHM6Ly93d3cubWVvLnB0L1B1Ymxpc2hpbmdJbWFnZXMvdmlkZW9zL2FqdWRhL0ZhdHVyYV9Db3JyZW50ZV9Nb3ZlbC9GYXR1cmFfQ29ycmVudGVfTW92ZWwubXA0IiwgIlNhaWJhIGNvbW8gaW50ZXJwcmV0YXIgYSBzdWEgZmF0dXJhIGUgY29tcHJlZW5kYSBmYWNpbG1lbnRlIHRvZGEgYSBpbmZvcm1hw6fDo28gcXVlIGxoZSBlbnZpYW1vcy4iKSkNCiAgICAgICAgdGFicy5wdXNoKA0KICAgICAgICAgIG5ldyBBcmVhc1RhYnMoDQogICAgICAgICAgICAiRmF0dXJhIC0gVGVsZW3Ds3ZlbCIsDQogICAgICAgICAgICBmYXRzLA0KICAgICAgICAgICAgIkTDunZpZGFzIG5hIGZhdHVyYT8iLA0KICAgICAgICAgICAgIiIsDQogICAgICAgICAgICAiU2FpYmEgY29tbyBlc3TDoSBvcmdhbml6YWRhIGUgdmVqYSBhcyBleHBsaWNhw6fDtWVzIHBhc3NvIGEgcGFzc28uIg0KICAgICAgICAgICkNCiAgICAgICAgKTsNCg0KICAgICAgICAvLyBsaW1wYXIgZmF0dXJhIGRlcG9pcyBkZSBhZGljaW9uYXIgYSB1bHRpbWEgcMOhZ2luYSBlIGFkaWNpb25hciBhIGZhdHVyYSDDoSB0YWIsIHVtYSB2ZXogcXVlIMOpIHNvIHVtYSBmYXR1cmEgcG9yIHRhYg0KICAgICAgICBmYXRzID0gW107DQogICAgICAgIC8vIGxpbXBhICBhcyBwYWdpbmFzDQogICAgICAgIHBhZ3MgPSBbXTsNCg0KICAgICAgICAvKiAjIyMjIyMjIyMjIyMjIEZJTSBGQVRVUkEgIyMjIyMjIyMjIyMjIyMqLw0KDQogICAgICAgIC8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8NCg0KICAgICAgICAvKiBGSU0gRE9TIERBRE9TICovDQoNCiAgICAgICAgLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLw0KDQogICAgICAgIC8qIGN1cnJlbnQgaW5kZXhlcyAqLw0KDQogICAgICAgIHZhciBmaXJzdGltZSA9IHRydWU7DQogICAgICAgIHZhciBvcGVuVGFiID0gZmFsc2U7DQoNCiAgICAgICAgZnVuY3Rpb24gY3JlYXRlVGFicyhpVGFiLCBpRmF0LCBpUGFnLCBpVGVtLCBib3R0b21MZXZlbHNPbmx5KSB7DQogICAgICAgICAgdGFicy5mb3JFYWNoKGZ1bmN0aW9uIChlbGVtZW50LCBpbmRleCkgew0KICAgICAgICAgICAgaWYgKGZpcnN0aW1lKSB7DQogICAgICAgICAgICAgICQoIiNUYWJpZnkiKS5hcHBlbmQoDQogICAgICAgICAgICAgICAgJzxsaSBjbGFzcz0iJyArDQogICAgICAgICAgICAgICAgICAoaVRhYiA9PSBpbmRleCA/ICJhY3RpdmUiIDogIiIpICsNCiAgICAgICAgICAgICAgICAgICciPjxhIHRpdGxlPSInICsNCiAgICAgICAgICAgICAgICAgIGVsZW1lbnQudGl0dWxvICsNCiAgICAgICAgICAgICAgICAgICciIGhyZWY9IiN0YWIxJyArDQogICAgICAgICAgICAgICAgICBNYXRoLmFicyhpbmRleCArIDEpICsNCiAgICAgICAgICAgICAgICAgICciPicgKw0KICAgICAgICAgICAgICAgICAgZWxlbWVudC50aXR1bG8gKw0KICAgICAgICAgICAgICAgICAgIjwvYT48L2xpPiINCiAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgdGFiaSA9ICQoIiNUYWJpZnkgbGkiKS5lcShpbmRleCk7DQoNCiAgICAgICAgICAgIC8vY29uc29sZS5sb2coZWxlbWVudC5saW5rVmlkZW8gKyAiIDo6OiBlbGVtZW50LmxpbmtWaWRlbyIpOw0KDQogICAgICAgICAgICBpZiAoaVRhYiA9PSBpbmRleCkgew0KICAgICAgICAgICAgICAkKCIjdmlkZW8tbGluay1ib3ggKiIpLnJlbW92ZSgpOw0KICAgICAgICAgICAgICAkKCIjdmlkZW8tbGluay1ib3giKS5hcHBlbmQoIjxoMz4iICsgZWxlbWVudC50aXRWaWRlbyArICI8L2gzPiIpOw0KICAgICAgICAgICAgICAkKCIjdmlkZW8tbGluay1ib3giKS5hcHBlbmQoIjxwPiIgKyBlbGVtZW50LmRlc2NWaWRlbyArICI8L3A+Iik7DQogICAgICAgICAgICAgIGlmIChlbGVtZW50LmxpbmtWaWRlbyAhPSAiIikgew0KICAgICAgICAgICAgICAgIC8vJCgnI3ZpZGVvLWxpbmstYm94JykuYXBwZW5kKCc8YSBocmVmPSInKyBlbGVtZW50LmxpbmtWaWRlbyArJyIgY2xhc3M9ImJ0bi1maWxsIGJ0bi1ncmF5IGJ0bi10eHQtd2hpdGUgaWNvbi1zZXRhLXJpZ2h0IGJ0bi1pY29uLXJpZ2h0Ij52ZXIgdsOtZGVvPC9hPicpOw0KICAgICAgICAgICAgICAgIGhzdHIgPQ0KICAgICAgICAgICAgICAgICAgIjxhIGhyZWY9JyN2aWRlb19jb21wcmVlbmRlcjFhZmF0dXJhcGFjb3RlY29tdGVsZW1vdmVsJyBjbGFzcz0nYnRuLWZpbGwgYnRuLWdyYXkgYnRuLXR4dC13aGl0ZSBpY29uLXNldGEtcmlnaHQgYnRuLWljb24tcmlnaHQgdHItbW9kYWwtdmlkZW9zJyBkYXRhLXc9JzEwMCUnIGRhdGEtaD0nMzUwJyBkYXRhLWJpbmQ9J2F0dHI6IHsgaHJlZjogJyN2aWRlb18nICsgSVNpdGVDb2x1bW5Ub3BpY1JlZk9XU1RFWFQsICdkYXRhLWlmcmFtZSc6ICRwYXJlbnQuZ2V0VG9waWNWaWRlb1VybCgkZGF0YSkgfSc+VmVyIHbDrWRlbzwvYT4iOw0KICAgICAgICAgICAgICAgICQoIiN2aWRlby1saW5rLWJveCIpLmFwcGVuZChoc3RyKTsNCiAgICAgICAgICAgICAgICAkKCIjdmlkZW8tbGluay1ib3ggYSIpLmF0dHIoImRhdGEtaWZyYW1lIiwgZWxlbWVudC5saW5rVmlkZW8pOw0KICAgICAgICAgICAgICAgIGlmICgkKCIudHItbW9kYWwtdmlkZW9zIikubGVuZ3RoID4gMCkgew0KICAgICAgICAgICAgICAgICAgJCgiLnRyLW1vZGFsLXZpZGVvcyIpLm9mZigiY2xpY2siKTsNCiAgICAgICAgICAgICAgICAgIG5ldyBPdmVybGF5VmlkZW9BanVkYSh7DQogICAgICAgICAgICAgICAgICAgIHRyaWdnZXI6ICQoIi50ci1tb2RhbC12aWRlb3MiKSwNCiAgICAgICAgICAgICAgICAgICAgY2xfbW9kYWw6ICJtb2RhbCIsDQogICAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgLyoqLw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBpZiAoaVRhYiA9PSBpbmRleCkgew0KICAgICAgICAgICAgICAvKmxvb3AgbmFzIGZhdHVyYXMgKi8NCiAgICAgICAgICAgICAgZWxlbWVudC5mYXR1cmFzLmZvckVhY2goZnVuY3Rpb24gKGVsZW1lbnQsIGluZGV4KSB7DQogICAgICAgICAgICAgICAgLy8gMcK6LiBvIHRpdHVsbyBkYSBmYXR1cmENCiAgICAgICAgICAgICAgICAkKCIjbmF2LWZhdHVyYXMgKiIpLnJlbW92ZSgpOw0KICAgICAgICAgICAgICAgICQoIiNuYXYtZmF0dXJhcyIpLmFwcGVuZCgNCiAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJmYXR1cmFzLWluLXRhYnMiPjxoND4nICsNCiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC50aXR1bG8gKw0KICAgICAgICAgICAgICAgICAgICAiPC9oND48L2Rpdj4iDQogICAgICAgICAgICAgICAgKTsgLyp0YWJzW2lUYWJdLmZhdHVyYXNbMF0udGl0dWxvKi8NCiAgICAgICAgICAgICAgICAvLyBww6FnaW5hcyBlIGl0ZW5zDQoNCiAgICAgICAgICAgICAgICAkKCIjbmF2LWZhdHVyYXMgLmZhdHVyYXMtaW4tdGFicyIpLmFwcGVuZCgNCiAgICAgICAgICAgICAgICAgICc8dWwgaWQ9Imxpc3RhUGFnaW5hcyI+PC91bD4nDQogICAgICAgICAgICAgICAgKTsNCg0KICAgICAgICAgICAgICAgIGNGYXQgPSBpbmRleDsNCiAgICAgICAgICAgICAgICAvKiBsb29wIG5hIHBhZ2luYWNhbyAqLw0KICAgICAgICAgICAgICAgICQoIiNuYXYtcGFnIGxpIikucmVtb3ZlKCk7DQoNCiAgICAgICAgICAgICAgICBlbGVtZW50LnBhZ3MuZm9yRWFjaChmdW5jdGlvbiAoZWxlbWVudCwgaW5kZXgpIHsNCiAgICAgICAgICAgICAgICAgIC8qcGFnaW5hw6fDo28gdG9wbyBkaXJlaXRvKi8NCiAgICAgICAgICAgICAgICAgICQoIiNuYXYtcGFnIikuYXBwZW5kKA0KICAgICAgICAgICAgICAgICAgICAnPGxpIHRpdGxlPSInICsNCiAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnRpdHVsbyArDQogICAgICAgICAgICAgICAgICAgICAgJyIgY2xhc3M9IicgKw0KICAgICAgICAgICAgICAgICAgICAgIChpbmRleCA9PSBjdXJQYWcgPyAiYWN0aXZlIiA6ICIiKSArDQogICAgICAgICAgICAgICAgICAgICAgJyI+JyArDQogICAgICAgICAgICAgICAgICAgICAgcGFyc2VJbnQoaW5kZXggKyAxKSArDQogICAgICAgICAgICAgICAgICAgICAgIjwvbGk+Ig0KICAgICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgICAgICAgIC8qIGdydXBvIGRlIHBhZ2luYXMgZSB0aXR1bG8gKi8NCiAgICAgICAgICAgICAgICAgICQoIiNsaXN0YVBhZ2luYXMiKS5hcHBlbmQoDQogICAgICAgICAgICAgICAgICAgICc8ZGl2IGNsYXNzPSJwYWdlcy1ncm91cCI+PGg1PicgKw0KICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQudGl0dWxvICsNCiAgICAgICAgICAgICAgICAgICAgICAnPC9oNT48dWwgY2xhc3M9Imxpc3RhSXRlbXMiPjwvdWw+PC9kaXY+Jw0KICAgICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgICAgICAgIC8qIGNhcnJlZ2EgYSBpbWFnZW0gZGVzdGEgcGFnaW5hICovDQogICAgICAgICAgICAgICAgICBpZiAoaVBhZyA9PSBpbmRleCkgew0KICAgICAgICAgICAgICAgICAgICBsb2FkSW1hZ2UoKTsNCiAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgIC8qIGxvb3AgZGUgaXRlbnMgKi8NCiAgICAgICAgICAgICAgICAgIGNQYWcgPSBpbmRleDsNCg0KICAgICAgICAgICAgICAgICAgaWYgKGlQYWcgPT0gY1BhZyAmJiBpRmF0ID09IGNGYXQpIHsNCiAgICAgICAgICAgICAgICAgICAgJCgiI2FyZWEtYm9sYXMtcmVjdHMgLmJvbGFzIGEiKS5yZW1vdmUoKTsNCiAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgZWxlbWVudC5pdGVucy5mb3JFYWNoKGZ1bmN0aW9uIChlbGVtZW50LCBpbmRleCkgew0KICAgICAgICAgICAgICAgICAgICAvL2FkZCBpdGVtDQogICAgICAgICAgICAgICAgICAgICQoIiNsaXN0YVBhZ2luYXMgLnBhZ2VzLWdyb3VwIikNCiAgICAgICAgICAgICAgICAgICAgICAuZXEoY1BhZykNCiAgICAgICAgICAgICAgICAgICAgICAuZmluZCgiLmxpc3RhSXRlbXMiKQ0KICAgICAgICAgICAgICAgICAgICAgIC5hcHBlbmQoIjxsaT4iICsgZWxlbWVudC50aXR1bG8gKyAiPC9saT4iKTsNCiAgICAgICAgICAgICAgICAgICAgLy8gYWRkIGNsaWNrIHRvIHRoYXQgaXRlbQ0KDQogICAgICAgICAgICAgICAgICAgICQoIiNsaXN0YVBhZ2luYXMgLnBhZ2VzLWdyb3VwIikNCiAgICAgICAgICAgICAgICAgICAgICAuZXEoY1BhZykNCiAgICAgICAgICAgICAgICAgICAgICAuZmluZCgiLmxpc3RhSXRlbXMgbGk6bGFzdC1jaGlsZCIpDQogICAgICAgICAgICAgICAgICAgICAgLmNsaWNrKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIC8vJCh0aGlzKS5jbG9zZXN0KCcucGFnZXMtZ3JvdXAnKS5maW5kKCdoNSknLmNsaWNrKCkNCiAgICAgICAgICAgICAgICAgICAgICAgIC8vJCh0aGlzKS5jbG9zZXN0KCcucGFnZXMtZ3JvdXAnKS5maW5kKCdoNScpLmNsaWNrKCkNCg0KICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJBY3RpdmVzKCIubGlzdGFJdGVtcyBsaSIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5hZGRDbGFzcygiYWN0aXZlIik7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIGN1clBhZyA9ICQodGhpcykuY2xvc2VzdCgiLnBhZ2VzLWdyb3VwIikuaW5kZXgoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGdldE5ld1BhZ2UoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRJbWFnZSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0JhbG9vbigkKHRoaXMpLmluZGV4KCkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgYWN0aXZhdGVNZW51UGFyZW50SXRlbShjdXJQYWcpOw0KICAgICAgICAgICAgICAgICAgICAgICAgc2V0TmF2UG9zaXRpb24oKTsNCiAgICAgICAgICAgICAgICAgICAgICB9KTsNCg0KICAgICAgICAgICAgICAgICAgICAvLyBhZGQgYmFsbHMgYXBlbmFzIMOgcyBmYXR1cmEgZSBwYWdpbmEgYXR1YWwNCiAgICAgICAgICAgICAgICAgICAgaWYgKGlQYWcgPT0gY1BhZyAmJiBpRmF0ID09IGNGYXQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAvL2RhdGEtYXJlYVByb3BzPSInKyBlbGVtZW50LmFyZWFQcm9wcyArJyINCiAgICAgICAgICAgICAgICAgICAgICB2YXIgX2RlbGF5ID0gTWF0aC5yYW5kb20oKSAqIDI7DQogICAgICAgICAgICAgICAgICAgICAgJCgiI2FyZWEtYm9sYXMtcmVjdHMgLmJvbGFzIikuYXBwZW5kKA0KICAgICAgICAgICAgICAgICAgICAgICAgJzxhIHRpdGxlPSInICsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC50aXR1bG8gKw0KICAgICAgICAgICAgICAgICAgICAgICAgICAnIiBzdHlsZT0ibGVmdDonICsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5hcmVhUHJvcHMueEJvbGEgKw0KICAgICAgICAgICAgICAgICAgICAgICAgICAiJTt0b3A6IiArDQogICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuYXJlYVByb3BzLnlCb2xhICsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIiU7dHJhbnNpdGlvbi1kZWxheToiICsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgX2RlbGF5LnRvUHJlY2lzaW9uKDMpICsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgJ3M7Ij4rPC9hPicNCiAgICAgICAgICAgICAgICAgICAgICApOyAvLw0KICAgICAgICAgICAgICAgICAgICAgICQoIiNhcmVhLWJvbGFzLXJlY3RzIC5ib2xhcyBhOmxhc3QtY2hpbGQiKS5jbGljaygNCiAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgY3VySXRlbSA9ICQodGhpcykuaW5kZXgoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0JhbG9vbigkKHRoaXMpLmluZGV4KCkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmF0ZU1lbnVJdGVtKCQodGhpcykuaW5kZXgoKSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGl2YXRlTWVudVBhcmVudEl0ZW0oY3VyUGFnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0TmF2UG9zaXRpb24oKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICB9KTsNCg0KICAgICAgICAgICAgICAgICAgLyogQ0xJQ0sgTk8gTk9NRS9Qw4BHSU5BIERFIENBREEgRkFUVVJBIE1PU1RSQSBBIEhPTUUgREEgUEFHSU5BIENPTSBCT0xBUyovDQogICAgICAgICAgICAgICAgICAkKCIjbGlzdGFQYWdpbmFzIC5wYWdlcy1ncm91cCIpDQogICAgICAgICAgICAgICAgICAgIC5lcShpbmRleCkNCiAgICAgICAgICAgICAgICAgICAgLmZpbmQoImg1IikNCiAgICAgICAgICAgICAgICAgICAgLmNsaWNrKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgICBjdXJQYWcgPSAkKHRoaXMpLmNsb3Nlc3QoIi5wYWdlcy1ncm91cCIpLmluZGV4KCk7DQogICAgICAgICAgICAgICAgICAgICAgZ2V0TmV3UGFnZSgpOw0KICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZVRhYnMoY3VyVGFiLCBjdXJGYXQsIGN1clBhZywgbnVsbCwgdHJ1ZSk7DQogICAgICAgICAgICAgICAgICAgICAgYWN0aXZhdGVNZW51UGFyZW50SXRlbShjdXJQYWcpOw0KICAgICAgICAgICAgICAgICAgICAgIHNldE5hdlBvc2l0aW9uKCk7DQogICAgICAgICAgICAgICAgICAgIH0pOw0KDQogICAgICAgICAgICAgICAgICAkKCIjbmF2LXBhZyBsaSIpDQogICAgICAgICAgICAgICAgICAgIC5lcShpbmRleCkNCiAgICAgICAgICAgICAgICAgICAgLmNsaWNrKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKDIpDQogICAgICAgICAgICAgICAgICAgICAgaWYgKCEkKHRoaXMpLmhhc0NsYXNzKCJhY3RpdmUiKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgY3VyUGFnID0gJCh0aGlzKS5pbmRleCgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgY3VySXRlbSA9IDA7DQogICAgICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKGN1clBhZyk7DQogICAgICAgICAgICAgICAgICAgICAgICBnZXROZXdQYWdlKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKGN1clBhZyk7DQogICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVUYWJzKGN1clRhYiwgY3VyRmF0LCBjdXJQYWcsIG51bGwsIHRydWUpOw0KICAgICAgICAgICAgICAgICAgICAgICAgLy9hY3RpdmF0ZU1lbnVQYXJlbnRJdGVtKGN1clBhZyk7DQogICAgICAgICAgICAgICAgICAgICAgICBnZXROZXdQYWdlKCk7DQogICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgIHNldE5hdlBvc2l0aW9uKCk7DQogICAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgLyogYWRpY2lvbmEgZXZlbnRvIGNsaWNrIMOgcyB0YWJzIGFwZW5hcyB1bWEgdmV6Li4uICovDQogICAgICAgICAgICBpZiAoZmlyc3RpbWUpIHsNCiAgICAgICAgICAgICAgaWYgKG9wZW5JKSB7DQogICAgICAgICAgICAgICAgaWYgKGN1ckl0ZW0gPj0gMCkgew0KICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhjdXJJdGVtKQ0KDQogICAgICAgICAgICAgICAgICAvL3NldFRpbWVvdXQoZnVuY3Rpb24oKXsgc2hvd0JhbG9vbihjdXJJdGVtKTsgfSwgMjAwMCk7DQogICAgICAgICAgICAgICAgICBzaG93QmFsb29uKGN1ckl0ZW0pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICQodGFiaSkuY2xpY2soZnVuY3Rpb24gKGUpIHsNCiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7DQoNCiAgICAgICAgICAgICAgICBpZiAoISQodGhpcykuaGFzQ2xhc3MoImFjdGl2ZSIpKSB7DQogICAgICAgICAgICAgICAgICBjdXJUYWIgPSAkKHRoaXMpLmNsb3Nlc3QoImxpIikuaW5kZXgoKTsNCiAgICAgICAgICAgICAgICAgIGN1ckZhdCA9IDA7DQogICAgICAgICAgICAgICAgICBjdXJQYWcgPSAwOw0KDQogICAgICAgICAgICAgICAgICBnZXROZXdQYWdlKCk7DQoNCiAgICAgICAgICAgICAgICAgICQodGhpcykuY2xvc2VzdCgidWwiKS5maW5kKCJsaSIpLnJlbW92ZUNsYXNzKCJhY3RpdmUiKTsNCiAgICAgICAgICAgICAgICAgICQodGhpcykuYWRkQ2xhc3MoImFjdGl2ZSIpOw0KICAgICAgICAgICAgICAgICAgY3JlYXRlVGFicyhjdXJUYWIsIDAsIDAsIG51bGwsIHRydWUpOw0KICAgICAgICAgICAgICAgICAgLy9zY3JvbGxlVG9JdGVtKCcjVGFiaWZ5Jyk7DQoNCiAgICAgICAgICAgICAgICAgIC8qIFJFTU9WSURPIFBBUkEgTkFPIElSIFBBUkEgQkFJWE8gQSBQRURJRE8gREEgUklUQSBOT1ZBTUVOVEUgKi8NCiAgICAgICAgICAgICAgICAgIC8vc2Nyb2xsZVRvSXRlbSgnI2xpc3RhUGFnaW5hcycpOw0KDQogICAgICAgICAgICAgICAgICBnZXROZXdQYWdlKCk7DQoNCiAgICAgICAgICAgICAgICAgICQoIiN3cmFwZmxvYXRpbmdtZW51IC5zZWMtaGVscC5saW5rcyIpLmFkZENsYXNzKCJhY3RpdmUiKTsNCiAgICAgICAgICAgICAgICAgICQoIiN3cmFwZmxvYXRpbmdtZW51IC5mYXR1cmFzLWluLXRhYnMgaDQiKS5yZW1vdmVDbGFzcygNCiAgICAgICAgICAgICAgICAgICAgImFjdGl2ZSINCiAgICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIHNldE5hdlBvc2l0aW9uKCk7DQogICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgLy9nZXROZXdQYWdlKCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgfSk7DQoNCiAgICAgICAgICBpZiAoZmlyc3RpbWUpIHsNCiAgICAgICAgICAgICQod2luZG93KS5zY3JvbGwoZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgICBzZXROYXZQb3NpdGlvbigpOw0KICAgICAgICAgICAgfSk7DQoNCiAgICAgICAgICAgICQoIi5mYXR1cmFzLWluLXRhYnMgaDQiKS5jbGljayhmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgIC8vY29uc29sZS5sb2coImNsaWNrbyB1IikNCiAgICAgICAgICAgICAgaWYgKCQodGhpcykuaGFzQ2xhc3MoImFjdGl2ZSIpKSB7DQogICAgICAgICAgICAgICAgJCgiI3dyYXBmbG9hdGluZ21lbnUgLnNlYy1oZWxwLmxpbmtzIikuYWRkQ2xhc3MoImFjdGl2ZSIpOw0KICAgICAgICAgICAgICAgICQoIiN3cmFwZmxvYXRpbmdtZW51IC5mYXR1cmFzLWluLXRhYnMgaDQiKS5yZW1vdmVDbGFzcygNCiAgICAgICAgICAgICAgICAgICJhY3RpdmUiDQogICAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAkKCIjd3JhcGZsb2F0aW5nbWVudSAuc2VjLWhlbHAubGlua3MiKS5yZW1vdmVDbGFzcygiYWN0aXZlIik7DQogICAgICAgICAgICAgICAgJCgiI3dyYXBmbG9hdGluZ21lbnUgLmZhdHVyYXMtaW4tdGFicyBoNCIpLmFkZENsYXNzKCJhY3RpdmUiKTsNCiAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICBzZXROYXZQb3NpdGlvbigpOw0KICAgICAgICAgICAgfSk7DQoNCiAgICAgICAgICAgICQoIi5zZWMtaGVscC5saW5rcyBoMyIpLmNsaWNrKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygiY2xpY2tvdSIpDQogICAgICAgICAgICAgIGlmICgkKHRoaXMpLmNsb3Nlc3QoIi5saW5rcyIpLmhhc0NsYXNzKCJhY3RpdmUiKSkgew0KICAgICAgICAgICAgICAgICQoIiN3cmFwZmxvYXRpbmdtZW51IC5zZWMtaGVscC5saW5rcyIpLnJlbW92ZUNsYXNzKCJhY3RpdmUiKTsNCiAgICAgICAgICAgICAgICAkKCIjd3JhcGZsb2F0aW5nbWVudSAuZmF0dXJhcy1pbi10YWJzIGg0IikuYWRkQ2xhc3MoImFjdGl2ZSIpOw0KICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICQoIiN3cmFwZmxvYXRpbmdtZW51IC5zZWMtaGVscC5saW5rcyIpLmFkZENsYXNzKCJhY3RpdmUiKTsNCiAgICAgICAgICAgICAgICAkKCIjd3JhcGZsb2F0aW5nbWVudSAuZmF0dXJhcy1pbi10YWJzIGg0IikucmVtb3ZlQ2xhc3MoDQogICAgICAgICAgICAgICAgICAiYWN0aXZlIg0KICAgICAgICAgICAgICAgICk7DQogICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgc2V0TmF2UG9zaXRpb24oKTsNCiAgICAgICAgICAgIH0pOw0KICAgICAgICAgIH0NCg0KICAgICAgICAgIGZpcnN0aW1lID0gZmFsc2U7DQoNCiAgICAgICAgICAkKHdpbmRvdykub24oImhhc2hjaGFuZ2UiLCBmdW5jdGlvbiAoZSkgew0KICAgICAgICAgICAgd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKA0KICAgICAgICAgICAgICAiIiwNCiAgICAgICAgICAgICAgZG9jdW1lbnQudGl0bGUsDQogICAgICAgICAgICAgIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZQ0KICAgICAgICAgICAgKTsNCiAgICAgICAgICAgIC8vIGRvIHNvbWV0aGluZy4uLg0KICAgICAgICAgIH0pOw0KDQogICAgICAgICAgZ2V0SXRSaWdodCgpOw0KICAgICAgICB9DQoNCiAgICAgICAgc2V0TmF2UG9zaXRpb24gPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgc2Nyb2xsZWQgPSAkKHdpbmRvdykuc2Nyb2xsVG9wKCk7DQoNCiAgICAgICAgICB0b3BNaW4gPQ0KICAgICAgICAgICAgJCgiI0NvbnRlbnRpZnkiKS5vZmZzZXQoKS50b3AgKw0KICAgICAgICAgICAgKCQoIiN2aWRlby1saW5rLWJveCIpLm91dGVySGVpZ2h0KHRydWUpICsgMjAgKyA3MCk7DQogICAgICAgICAgdG9wTWF4ID0NCiAgICAgICAgICAgICQoIiNDb250ZW50aWZ5Iikub2Zmc2V0KCkudG9wICsgJCgiI0NvbnRlbnRpZnkiKS5vdXRlckhlaWdodCh0cnVlKTsNCiAgICAgICAgICBuYXZIID0NCiAgICAgICAgICAgICQoIiN3cmFwZmxvYXRpbmdtZW51IC5zZWMtaGVscCIpLm91dGVySGVpZ2h0KHRydWUpICsNCiAgICAgICAgICAgICQoIiN3cmFwZmxvYXRpbmdtZW51IC5zZWMtbmF2Iikub3V0ZXJIZWlnaHQodHJ1ZSk7DQoNCiAgICAgICAgICBpZiAoc2Nyb2xsZWQgKyA4MCA8PSB0b3BNYXgpIHsNCiAgICAgICAgICAgIGlmIChzY3JvbGxlZCArIDgwICsgbmF2SCA+PSB0b3BNYXgpIHsNCiAgICAgICAgICAgICAgY29uc29sZS5sb2coInZhaSBwYXJhIGJhaXhvIik7DQoNCiAgICAgICAgICAgICAgJCgiI3dyYXBmbG9hdGluZ21lbnUiKS5yZW1vdmVBdHRyKCJzdHlsZSIpOw0KICAgICAgICAgICAgICAkKCIjd3JhcGZsb2F0aW5nbWVudSIpDQogICAgICAgICAgICAgICAgLnJlbW92ZUNsYXNzKCJhZmZpeGVkIikNCiAgICAgICAgICAgICAgICAucmVtb3ZlQ2xhc3MoImFmZml4ZWQtdG9wIikNCiAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoImFmZml4ZWQtYm90dG9tIik7DQogICAgICAgICAgICAgICQoIiN3cmFwZmxvYXRpbmdtZW51IikuY3NzKA0KICAgICAgICAgICAgICAgICJ0b3AiLA0KICAgICAgICAgICAgICAgICQoIiNjb2wtY29udC1yaWdodCIpLm91dGVySGVpZ2h0KHRydWUpIC0NCiAgICAgICAgICAgICAgICAgICQoIiN3cmFwZmxvYXRpbmdtZW51Iikub3V0ZXJIZWlnaHQodHJ1ZSkNCiAgICAgICAgICAgICAgKTsNCiAgICAgICAgICAgIH0gZWxzZSBpZiAoc2Nyb2xsZWQgKyA4MCA+PSB0b3BNaW4pIHsNCiAgICAgICAgICAgICAgY29uc29sZS5sb2coInZhaSBmaXhhciIpOw0KDQogICAgICAgICAgICAgICQoIiN3cmFwZmxvYXRpbmdtZW51IikucmVtb3ZlQXR0cigic3R5bGUiKTsNCiAgICAgICAgICAgICAgJCgiI3dyYXBmbG9hdGluZ21lbnUiKQ0KICAgICAgICAgICAgICAgIC5yZW1vdmVDbGFzcygiYWZmaXhlZC1ib3R0b20iKQ0KICAgICAgICAgICAgICAgIC5yZW1vdmVDbGFzcygiYWZmaXhlZC10b3AiKQ0KICAgICAgICAgICAgICAgIC5hZGRDbGFzcygiYWZmaXhlZCIpOw0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgY29uc29sZS5sb2coIm1hbnRlbSBzZSBubyB0b3BvIik7DQoNCiAgICAgICAgICAgICAgJCgiI3dyYXBmbG9hdGluZ21lbnUiKS5yZW1vdmVBdHRyKCJzdHlsZSIpOw0KICAgICAgICAgICAgICAkKCIjd3JhcGZsb2F0aW5nbWVudSIpDQogICAgICAgICAgICAgICAgLnJlbW92ZUNsYXNzKCJhZmZpeGVkIikNCiAgICAgICAgICAgICAgICAucmVtb3ZlQ2xhc3MoImFmZml4ZWQtYm90dG9tIikNCiAgICAgICAgICAgICAgICAuYWRkQ2xhc3MoImFmZml4ZWQtdG9wIik7DQogICAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgICB9Ow0KDQogICAgICAgIGNsZWFyQWN0aXZlcyA9IGZ1bmN0aW9uIChlbGVtKSB7DQogICAgICAgICAgJChlbGVtKS5yZW1vdmVDbGFzcygiYWN0aXZlIik7DQogICAgICAgIH07DQoNCiAgICAgICAgYWN0aXZhdGVNZW51SXRlbSA9IGZ1bmN0aW9uIChpbmRleCkgew0KICAgICAgICAgIGNsZWFyQWN0aXZlcygiLmxpc3RhSXRlbXMgbGkiKTsNCg0KICAgICAgICAgICQoIiNsaXN0YVBhZ2luYXMgLnBhZ2VzLWdyb3VwIikNCiAgICAgICAgICAgIC5lcShjdXJQYWcpDQogICAgICAgICAgICAuZmluZCgiLmxpc3RhSXRlbXMgbGkiKQ0KICAgICAgICAgICAgLmVxKGluZGV4KQ0KICAgICAgICAgICAgLmFkZENsYXNzKCJhY3RpdmUiKTsNCiAgICAgICAgfTsNCiAgICAgICAgYWN0aXZhdGVNZW51UGFyZW50SXRlbSA9IGZ1bmN0aW9uIChpbmRleCkgew0KICAgICAgICAgIGNsZWFyQWN0aXZlcygiI2xpc3RhUGFnaW5hcyAucGFnZXMtZ3JvdXAgaDUiKTsNCiAgICAgICAgICAkKCIjbGlzdGFQYWdpbmFzIC5wYWdlcy1ncm91cCIpDQogICAgICAgICAgICAuZXEoaW5kZXgpDQogICAgICAgICAgICAuZmluZCgiaDUiKQ0KICAgICAgICAgICAgLmFkZENsYXNzKCJhY3RpdmUiKTsNCiAgICAgICAgICBnZXRJdFJpZ2h0KCk7DQogICAgICAgIH07DQoNCiAgICAgICAgJCgiI2ltZy1mYXR1cmEsIC5jbG9zZWJhbGxvb24sICNyZWN0LWJvcmRlciwgLm1vZGFsLWZhdHVyYSIpLmNsaWNrKA0KICAgICAgICAgIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIGJhbGxvb25Jc09wZW4gPSBmYWxzZTsNCiAgICAgICAgICAgIC8vY29uc29sZS5sb2coImNsb3NpbmciKQ0KICAgICAgICAgICAgY3JlYXRlVGFicyhjdXJUYWIsIGN1ckZhdCwgY3VyUGFnLCBjdXJJdGVtLCB0cnVlKTsNCiAgICAgICAgICAgIC8vaWYoJCh3aW5kb3cpLndpZHRoKCkgPCA3Njgpew0KDQogICAgICAgICAgICAvL3Njcm9sbCBwYXJhIG8gdG9wbyAtIHJpdGEgcGVkaXUgcGFyYSByZW1vdmVyDQogICAgICAgICAgICAvL3Njcm9sbGVUb0l0ZW0oJyNUYWJpZnknKTsNCg0KICAgICAgICAgICAgLy99DQoNCiAgICAgICAgICAgICQoIiNpbmZvLWJhbGxvb24iKS5oaWRlKCk7DQogICAgICAgICAgICAkKCIjYXJlYS1ib2xhcy1yZWN0cyAuYm9sYXMiKS5zaG93KCk7DQogICAgICAgICAgICAkKCIjYXJlYS1ib2xhcy1yZWN0cyIpLnJlbW92ZUNsYXNzKCJib2xhc09uIik7DQogICAgICAgICAgICAkKCIuYXJlYS1jb250ZXVkbyIpLnJlbW92ZUNsYXNzKCJhZGQtbW9kYWwiKTsNCiAgICAgICAgICAgICQoIiNhcmVhLWJvbGFzLXJlY3RzIC5yZWN0YW5ndWxvIikuaGlkZSgpOw0KICAgICAgICAgICAgJCgiI2ltZy1mYXR1cmEiKS5jc3MoIm9wYWNpdHkiLCAxKTsNCiAgICAgICAgICAgICQoIiNpbmZvLWJhbGxvb24iKS5yZW1vdmVDbGFzcygpOw0KDQogICAgICAgICAgICBjbGVhckFjdGl2ZXMoIi5saXN0YUl0ZW1zIGxpIik7DQogICAgICAgICAgICBhY3RpdmF0ZU1lbnVQYXJlbnRJdGVtKGN1clBhZyk7DQogICAgICAgICAgICBzZXROYXZQb3NpdGlvbigpOw0KICAgICAgICAgIH0NCiAgICAgICAgKTsNCg0KICAgICAgICBsb2FkSW1hZ2UgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgaW1nID0gdGFic1tjdXJUYWJdLmZhdHVyYXNbY3VyRmF0XS5wYWdzW2N1clBhZ10uaW1hZ2VtOw0KICAgICAgICAgIC8vJCgnI2ltZy1mYXR1cmEnKS5hdHRyKCdzcmMnLCBpbWcpOw0KDQogICAgICAgICAgLyoqLw0KICAgICAgICAgICQoIiNpbWctZmF0dXJhIikNCiAgICAgICAgICAgIC5vbigibG9hZCIsIGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygibG9hZGNvbXBsZXRlIik7DQoNCiAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7DQogICAgICAgICAgICAgICAgJCgiLmJsb2NvLWZhdHVyYS1pbnRlcmF0aXZhIikucmVtb3ZlQ2xhc3MoImlzLWxvYWRpbmciKTsNCiAgICAgICAgICAgICAgfSwgNTAwKTsNCiAgICAgICAgICAgIH0pDQogICAgICAgICAgICAuYXR0cigic3JjIiwgaW1nKTsNCg0KICAgICAgICAgICQoIi5ibG9jby1mYXR1cmEtaW50ZXJhdGl2YSIpLnJlbW92ZUNsYXNzKCJpcy1sb2FkaW5nIik7DQoNCiAgICAgICAgICAkKCIjaW1nLWZhdHVyYSIpLmNzcygib3BhY2l0eSIsIDEpOw0KICAgICAgICAgICQoIiNpbmZvLWJhbGxvb24iKS5yZW1vdmVDbGFzcygpOw0KICAgICAgICB9Ow0KDQogICAgICAgIGdldE5ld1BhZ2UgPSBmdW5jdGlvbiAoKSB7DQogICAgICAgICAgJCgiI2luZm8tYmFsbG9vbiIpLmhpZGUoKTsNCiAgICAgICAgICAkKCIjYXJlYS1ib2xhcy1yZWN0cyAuYm9sYXMiKS5zaG93KCk7DQogICAgICAgICAgJCgiI2FyZWEtYm9sYXMtcmVjdHMiKS5yZW1vdmVDbGFzcygiYm9sYXNPbiIpOw0KICAgICAgICAgICQoIi5hcmVhLWNvbnRldWRvIikucmVtb3ZlQ2xhc3MoImFkZC1tb2RhbCIpOw0KICAgICAgICAgICQoIiNhcmVhLWJvbGFzLXJlY3RzIC5yZWN0YW5ndWxvIikuaGlkZSgpOw0KICAgICAgICAgIGxvYWRJbWFnZSgpOw0KICAgICAgICAgICQoIiNpbWctZmF0dXJhIikuY3NzKCJvcGFjaXR5IiwgMSk7DQogICAgICAgICAgJCgiI2luZm8tYmFsbG9vbiIpLnJlbW92ZUNsYXNzKCk7DQoNCiAgICAgICAgICAvL2NvbnNvbGUubG9nKCJDUklBUiBDTElDS1MgIikNCiAgICAgICAgICAkKCIuZmF0dXJhcy1pbi10YWJzIGg0IikuY2xpY2soZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgLy9jb25zb2xlLmxvZygiY2xpY2tvIHUiKQ0KICAgICAgICAgICAgaWYgKCQodGhpcykuaGFzQ2xhc3MoImFjdGl2ZSIpKSB7DQogICAgICAgICAgICAgICQoIiN3cmFwZmxvYXRpbmdtZW51IC5zZWMtaGVscC5saW5rcyIpLmFkZENsYXNzKCJhY3RpdmUiKTsNCiAgICAgICAgICAgICAgJCgiI3dyYXBmbG9hdGluZ21lbnUgLmZhdHVyYXMtaW4tdGFicyBoNCIpLnJlbW92ZUNsYXNzKCJhY3RpdmUiKTsNCiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICQoIiN3cmFwZmxvYXRpbmdtZW51IC5zZWMtaGVscC5saW5rcyIpLnJlbW92ZUNsYXNzKCJhY3RpdmUiKTsNCiAgICAgICAgICAgICAgJCgiI3dyYXBmbG9hdGluZ21lbnUgLmZhdHVyYXMtaW4tdGFicyBoNCIpLmFkZENsYXNzKCJhY3RpdmUiKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHNldE5hdlBvc2l0aW9uKCk7DQogICAgICAgICAgfSk7DQogICAgICAgIH07DQoNCiAgICAgICAgc2hvd0JhbG9vbiA9IGZ1bmN0aW9uIChpbmRpY2UpIHsNCiAgICAgICAgICBiYWxsb29uSXNPcGVuID0gdHJ1ZTsNCg0KICAgICAgICAgIGN1cnJlbnRJdGVtID0gaW5kaWNlOw0KICAgICAgICAgIGN1ckl0ZW0gPSBjdXJyZW50SXRlbTsNCg0KICAgICAgICAgICQoIiNhcmVhLWJvbGFzLXJlY3RzIC5ib2xhcyIpLmhpZGUoKTsNCiAgICAgICAgICAkKCIjaW5mby1iYWxsb29uIHVsIikucmVtb3ZlKCk7DQogICAgICAgICAgJCgiI2luZm8tYmFsbG9vbiBoNSIpLmh0bWwoDQogICAgICAgICAgICB0YWJzW2N1clRhYl0uZmF0dXJhc1tjdXJGYXRdLnBhZ3NbY3VyUGFnXS5pdGVuc1tpbmRpY2VdLnRpdHVsb0JhbGFvDQogICAgICAgICAgKTsNCiAgICAgICAgICAkKCIjaW5mby1iYWxsb29uIC5kZXNjcmljYW8iKS5odG1sKA0KICAgICAgICAgICAgdGFic1tjdXJUYWJdLmZhdHVyYXNbY3VyRmF0XS5wYWdzW2N1clBhZ10uaXRlbnNbaW5kaWNlXS5kZXNjcmljYW8NCiAgICAgICAgICApOw0KDQogICAgICAgICAgLypwYWdpbmHDp8OjbyB0b3BvIGRpcmVpdG8qLw0KICAgICAgICAgICQoIiNuYXYtcGFnIGxpIikucmVtb3ZlQ2xhc3MoImFjdGl2ZSIpOw0KICAgICAgICAgICQoIiNuYXYtcGFnIGxpIikuZXEoY3VyUGFnKS5hZGRDbGFzcygiYWN0aXZlIik7DQoNCiAgICAgICAgICAvLyR0eXBlID0gdGFic1tjdXJUYWJdLmZhdHVyYXNbY3VyRmF0XS5wYWdzW2N1clBhZ10uaXRlbnNbaW5kaWNlXS50eXBlOw0KDQogICAgICAgICAgJGxpbmtzID0NCiAgICAgICAgICAgIHRhYnNbY3VyVGFiXS5mYXR1cmFzW2N1ckZhdF0ucGFnc1tjdXJQYWddLml0ZW5zW2luZGljZV0ubGlua3M7DQoNCiAgICAgICAgICAvL2NvbnNvbGUubG9nKCdURU1PUyBMSU5LUyA/ICcgKyAkbGlua3MubGVuZ3RoICsgIiAtICIgKyBjdXJGYXQgKyAiIC0gIiArIGN1clBhZyArICIgLSAiICsgaW5kaWNlKQ0KDQogICAgICAgICAgaWYgKCRsaW5rcy5sZW5ndGggIT0gMCkgew0KICAgICAgICAgICAgJCgiI2luZm8tYmFsbG9vbiIpLmFwcGVuZCgiPHVsPjwvdWw+Iik7DQoNCiAgICAgICAgICAgICRsaW5rcy5mb3JFYWNoKGZ1bmN0aW9uIChlbGVtZW50LCBpbmRleCkgew0KICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKGVsZW1lbnQudHlwZSArICIgJHR5cGUiKQ0KDQogICAgICAgICAgICAgIGlmIChlbGVtZW50LnR5cGUgPT0gInZpZGVvIikgew0KICAgICAgICAgICAgICAgIGhzdHIgPQ0KICAgICAgICAgICAgICAgICAgIjxsaT48YSBocmVmPScjdmlkZW9fZmF0dXJhJyBjbGFzcz0ndHItbW9kYWwtdmlkZW9zJyBkYXRhLXc9JzEwMCUnIGRhdGEtaD0nMzUwJyBkYXRhLWJpbmQ9J2F0dHI6IHsgaHJlZjogJyN2aWRlb19mYXR1cmEsICdkYXRhLWlmcmFtZSc6ICRwYXJlbnQuZ2V0VG9waWNWaWRlb1VybCgkZGF0YSkgfSc+IiArDQogICAgICAgICAgICAgICAgICBlbGVtZW50LnRleHRvICsNCiAgICAgICAgICAgICAgICAgICI8L2E+PC9saT4iOw0KDQogICAgICAgICAgICAgICAgJCgiI2luZm8tYmFsbG9vbiB1bCIpLmFwcGVuZChoc3RyKTsNCg0KICAgICAgICAgICAgICAgICQoIiNpbmZvLWJhbGxvb24gdWwgbGk6bGFzdC1jaGlsZCBhIikuYXR0cigNCiAgICAgICAgICAgICAgICAgICJkYXRhLWlmcmFtZSIsDQogICAgICAgICAgICAgICAgICBlbGVtZW50LmhyZWYNCiAgICAgICAgICAgICAgICApOw0KDQogICAgICAgICAgICAgICAgaWYgKCQoIi50ci1tb2RhbC12aWRlb3MiKS5sZW5ndGggPiAwKSB7DQogICAgICAgICAgICAgICAgICAkKCIudHItbW9kYWwtdmlkZW9zIikub2ZmKCJjbGljayIpOw0KICAgICAgICAgICAgICAgICAgbmV3IE92ZXJsYXlWaWRlb0FqdWRhKHsNCiAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcjogJCgiLnRyLW1vZGFsLXZpZGVvcyIpLA0KICAgICAgICAgICAgICAgICAgICBjbF9tb2RhbDogIm1vZGFsIiwNCiAgICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIC8vPGEgY2xhc3M9InRyLW1vZGFsLXZpZGVvcyIgaHJlZj0iI3ZpZGVvMSIgZGF0YS1pZnJhbWU9Imh0dHA6Ly9yZDMudmlkZW9zLnNhcG8ucHQvcGxheWh0bWw/ZmlsZT1odHRwOi8vcmQzLnZpZGVvcy5zYXBvLnB0L2tHak5UcnBPTE1ZcnpGeThDeVlaL21vdi8xJnF1YWxpdHk9c2QiIGRhdGEtdz0iMTAwJSIgZGF0YS1oPSIzNTAiPg0KICAgICAgICAgICAgICAgIC8vJCgnI2luZm8tYmFsbG9vbiB1bCcpLmFwcGVuZCgnPGxpPjxhIGNsYXNzPSJ0ci1tb2RhbC12aWRlb3MiIGhyZWY9IiN2aWRlbycgKyBpbmRleCArJyIgZGF0YS1pZnJhbWU9IicgKyBlbGVtZW50LmhyZWYgKyciIGRhdGEtdz0iMTAwJSIgZGF0YS1oPSIzNTAiPicrIGVsZW1lbnQudGV4dG8gKyc8L2E+PC9saT4nKTsNCiAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAkKCIjaW5mby1iYWxsb29uIHVsIikuYXBwZW5kKA0KICAgICAgICAgICAgICAgICAgJzxsaT48YSB0YXJnZXQ9Il9ibGFuayIgaHJlZj0iJyArDQogICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuaHJlZiArDQogICAgICAgICAgICAgICAgICAgICciPicgKw0KICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnRleHRvICsNCiAgICAgICAgICAgICAgICAgICAgIjwvYT48L2xpPiINCiAgICAgICAgICAgICAgICApOw0KICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgLy8kKCcjaW5mby1iYWxsb29uIHVsJykuYXBwZW5kKCc8bGk+PGEgaHJlZj0iJysgZWxlbWVudC5ocmVmICsnIj4nKyBlbGVtZW50LnRleHRvICsnPC9hPjwvbGk+Jyk7DQogICAgICAgICAgICB9KTsNCiAgICAgICAgICB9DQoNCiAgICAgICAgICBwb3NpdGlvbmF0ZUJhbGxvb24oY3VyVGFiLCBjdXJGYXQsIGN1clBhZywgY3VycmVudEl0ZW0pOw0KDQogICAgICAgICAgLyoNCiAgICAgICAgICAgIHZhciBpYiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbmZvLWJhbGxvb24nKTsNCiAgICAgICAgICB2YXIgb2Zmc2V0ID0ge3k6MH07DQogICAgICAgICAgd2hpbGUgKGliKQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgIG9mZnNldC55ICs9IGliLm9mZnNldFRvcDsNCiAgICAgICAgICAgIGliID0gaWIub2Zmc2V0UGFyZW50Ow0KICAgICAgICAgIH0NCg0KICAgICAgICAgIGlmIChkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiYgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3ApKQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgIG9mZnNldC55IC09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3A7DQogICAgICAgICAgfQ0KICAgICAgICAgIGVsc2UgaWYgKGRvY3VtZW50LmJvZHkgJiYgKGRvY3VtZW50LmJvZHkuc2Nyb2xsVG9wKSkNCiAgICAgICAgICB7DQogICAgICAgICAgICBvZmZzZXQueSAtPSBkb2N1bWVudC5ib2R5LnNjcm9sbFRvcDsNCiAgICAgICAgICB9DQogICAgICAgICAgZWxzZSBpZiAod2luZG93LnBhZ2VZT2Zmc2V0KQ0KICAgICAgICAgIHsNCiAgICAgICAgICAgIG9mZnNldC55IC09IHdpbmRvdy5wYWdlWU9mZnNldDsNCiAgICAgICAgICB9DQoNCiAgICAgICAgICAvL2NvbnNvbGUubG9nKG9mZnNldC55ICsiIGNlbmFzIik7DQogICAgICAgICAgKi8NCg0KICAgICAgICAgIGlmICgkKHdpbmRvdykud2lkdGgoKSA8IDc2OCkgew0KICAgICAgICAgICAgaWYgKA0KICAgICAgICAgICAgICAkKCIjaW5mby1iYWxsb29uIikuaGVpZ2h0KCkgKyAkKCIjcmVjdC1ib3JkZXIiKS5oZWlnaHQoKSA+PQ0KICAgICAgICAgICAgICAkKHdpbmRvdykuaGVpZ2h0KCkgKiAwLjcNCiAgICAgICAgICAgICkgew0KICAgICAgICAgICAgICBzY3JvbGxlVG9JdGVtKCIjaW5mby1iYWxsb29uIik7DQogICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICBzY3JvbGxlVG9JdGVtKCIjcmVjdC1ib3JkZXIiKTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgeUluZm8gPSAkKCIjaW5mby1iYWxsb29uIikub2Zmc2V0KCkudG9wOw0KICAgICAgICAgICAgeVJlYyA9ICQoIiNyZWN0LWJvcmRlciIpLm9mZnNldCgpLnRvcDsNCiAgICAgICAgICAgIC8vY29uc29sZS5sb2coeUluZm8gKyAiIC0gIiArIHlSZWMpDQoNCiAgICAgICAgICAgIGlmICh5SW5mbyA8IHlSZWMpIHsNCiAgICAgICAgICAgICAgc2Nyb2xsZVRvSXRlbSgiI2luZm8tYmFsbG9vbiIpOyAvLycjaW1nLWZhdHVyYScpOycjcmVjdC1ib3JkZXInKQ0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgc2Nyb2xsZVRvSXRlbSgiI3JlY3QtYm9yZGVyIik7IC8vJyNpbWctZmF0dXJhJyk7JyNyZWN0LWJvcmRlcicpDQogICAgICAgICAgICB9DQogICAgICAgICAgfQ0KICAgICAgICB9Ow0KDQogICAgICAgIHZhciBjdXJUYWIgPSAwOw0KICAgICAgICB2YXIgY3VyRmF0ID0gMDsgLy92YWkgc2VyIHNlbXByZSAwIHBvaXMgYXBlbmFzIGjDoSB1bWEgZmF0dXJhIHBvciBUYWINCiAgICAgICAgdmFyIGN1clBhZyA9IDA7DQoNCiAgICAgICAgdmFyIGN1ckl0ZW0gPSBudWxsOw0KICAgICAgICB2YXIgc2Nyb2xsVG9JbWFnOw0KDQogICAgICAgIHZhciBmbG9hdGluZ0lzT24gPSBmYWxzZTsNCiAgICAgICAgdmFyIG9wZW5UID0gZmFsc2U7DQogICAgICAgIHZhciBvcGVuRiA9IGZhbHNlOw0KICAgICAgICB2YXIgb3BlblAgPSBmYWxzZTsNCiAgICAgICAgdmFyIG9wZW5JID0gZmFsc2U7DQogICAgICAgIHZhciBiYWxsb29uSXNPcGVuID0gZmFsc2U7DQogICAgICAgIHZhciBxc3RyOw0KICAgICAgICB2YXIgcXVlcmllcyA9IHt9Ow0KDQogICAgICAgIHBvc2l0aW9uYXRlQmFsbG9vbiA9IGZ1bmN0aW9uIChjdXJUYWIsIGN1ckZhdCwgY3VyUGFnLCBpbmRpY2UpIHsNCiAgICAgICAgICAvKiBTSE9XIFJFQ1RBTkdVTE8gKi8NCiAgICAgICAgICAvL3hCb2xhLCB5Qm9sYSwgeFJlY3QseVJlY3Qsd1JlY3QsaFJlY3QsIHh5UG9wDQoNCiAgICAgICAgICB0b3BlID0NCiAgICAgICAgICAgIHRhYnNbY3VyVGFiXS5mYXR1cmFzW2N1ckZhdF0ucGFnc1tjdXJQYWddLml0ZW5zW2luZGljZV0uYXJlYVByb3BzDQogICAgICAgICAgICAgIC55UmVjdCArICIlIjsNCiAgICAgICAgICBsZWZ0ZSA9DQogICAgICAgICAgICB0YWJzW2N1clRhYl0uZmF0dXJhc1tjdXJGYXRdLnBhZ3NbY3VyUGFnXS5pdGVuc1tpbmRpY2VdLmFyZWFQcm9wcw0KICAgICAgICAgICAgICAueFJlY3QgKyAiJSI7DQogICAgICAgICAgd2lkdGhlID0NCiAgICAgICAgICAgIHRhYnNbY3VyVGFiXS5mYXR1cmFzW2N1ckZhdF0ucGFnc1tjdXJQYWddLml0ZW5zW2luZGljZV0uYXJlYVByb3BzDQogICAgICAgICAgICAgIC53UmVjdCArICIlIjsNCiAgICAgICAgICBoZWlnaHRlID0NCiAgICAgICAgICAgIHRhYnNbY3VyVGFiXS5mYXR1cmFzW2N1ckZhdF0ucGFnc1tjdXJQYWddLml0ZW5zW2luZGljZV0uYXJlYVByb3BzDQogICAgICAgICAgICAgIC5oUmVjdCArICIlIjsNCg0KICAgICAgICAgICQoIiNpbmZvLWJhbGxvb24iKS5yZW1vdmVBdHRyKCJzdHlsZSIpOw0KICAgICAgICAgIHZhciB0cmFuc2xhdGVZLCB0cmFuc2xhdGVYOw0KICAgICAgICAgICQoIiNpbmZvLWJhbGxvb24iKS5yZW1vdmVDbGFzcygibW9iaWxlIik7DQoNCiAgICAgICAgICBzd2l0Y2ggKA0KICAgICAgICAgICAgdGFic1tjdXJUYWJdLmZhdHVyYXNbY3VyRmF0XS5wYWdzW2N1clBhZ10uaXRlbnNbaW5kaWNlXS5hcmVhUHJvcHMNCiAgICAgICAgICAgICAgLnhQb3ANCiAgICAgICAgICApIHsNCiAgICAgICAgICAgIGNhc2UgImxlZnQiOg0KICAgICAgICAgICAgICBsZSA9DQogICAgICAgICAgICAgICAgdGFic1tjdXJUYWJdLmZhdHVyYXNbY3VyRmF0XS5wYWdzW2N1clBhZ10uaXRlbnNbaW5kaWNlXQ0KICAgICAgICAgICAgICAgICAgLmFyZWFQcm9wcy54UmVjdDsNCiAgICAgICAgICAgICAgJCgiI2luZm8tYmFsbG9vbiIpLmNzcyh7DQogICAgICAgICAgICAgICAgbGVmdDogbGUgKyAiJSIsDQogICAgICAgICAgICAgICAgcmlnaHQ6ICJhdXRvIiwNCiAgICAgICAgICAgICAgICAibWFyZ2luLWxlZnQiOiAwLA0KICAgICAgICAgICAgICAgICJtYXJnaW4tcmlnaHQiOiAiMjJweCIsDQogICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICB0cmFuc2xhdGVYID0gIjAiOw0KICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdsJykNCiAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICBjYXNlICJyaWdodCI6DQogICAgICAgICAgICAgIChyaSA9DQogICAgICAgICAgICAgICAgMTAwIC0NCiAgICAgICAgICAgICAgICAodGFic1tjdXJUYWJdLmZhdHVyYXNbY3VyRmF0XS5wYWdzW2N1clBhZ10uaXRlbnNbaW5kaWNlXQ0KICAgICAgICAgICAgICAgICAgLmFyZWFQcm9wcy54UmVjdCArDQogICAgICAgICAgICAgICAgICB0YWJzW2N1clRhYl0uZmF0dXJhc1tjdXJGYXRdLnBhZ3NbY3VyUGFnXS5pdGVuc1tpbmRpY2VdDQogICAgICAgICAgICAgICAgICAgIC5hcmVhUHJvcHMud1JlY3QpKSwNCiAgICAgICAgICAgICAgICAkKCIjaW5mby1iYWxsb29uIikuY3NzKHsNCiAgICAgICAgICAgICAgICAgIGxlZnQ6ICJhdXRvIiwNCiAgICAgICAgICAgICAgICAgIHJpZ2h0OiByaSArICIlIiwNCiAgICAgICAgICAgICAgICAgICJtYXJnaW4tbGVmdCI6ICIyMnB4IiwNCiAgICAgICAgICAgICAgICAgICJtYXJnaW4tcmlnaHQiOiAwLA0KICAgICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICB0cmFuc2xhdGVYID0gIjAiOw0KICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdyJykNCiAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICBjYXNlICJjZW50ZXIiOg0KICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgbGUgPQ0KICAgICAgICAgICAgICAgIHRhYnNbY3VyVGFiXS5mYXR1cmFzW2N1ckZhdF0ucGFnc1tjdXJQYWddLml0ZW5zW2luZGljZV0NCiAgICAgICAgICAgICAgICAgIC5hcmVhUHJvcHMueFJlY3QgKw0KICAgICAgICAgICAgICAgIHRhYnNbY3VyVGFiXS5mYXR1cmFzW2N1ckZhdF0ucGFnc1tjdXJQYWddLml0ZW5zW2luZGljZV0NCiAgICAgICAgICAgICAgICAgIC5hcmVhUHJvcHMud1JlY3QgLw0KICAgICAgICAgICAgICAgICAgMjsNCiAgICAgICAgICAgICAgJCgiI2luZm8tYmFsbG9vbiIpLmNzcyh7DQogICAgICAgICAgICAgICAgbGVmdDogbGUgKyAiJSIsDQogICAgICAgICAgICAgICAgcmlnaHQ6ICJhdXRvIiwNCiAgICAgICAgICAgICAgICAibWFyZ2luLWxlZnQiOiAwLA0KICAgICAgICAgICAgICAgICJtYXJnaW4tcmlnaHQiOiAwLA0KICAgICAgICAgICAgICB9KTsNCg0KICAgICAgICAgICAgICB0cmFuc2xhdGVYID0gIi01MCUiOw0KDQogICAgICAgICAgICAgIC8vY29uc29sZS5sb2coJ2MnKQ0KICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICB9DQoNCiAgICAgICAgICBzd2l0Y2ggKA0KICAgICAgICAgICAgdGFic1tjdXJUYWJdLmZhdHVyYXNbY3VyRmF0XS5wYWdzW2N1clBhZ10uaXRlbnNbaW5kaWNlXS5hcmVhUHJvcHMNCiAgICAgICAgICAgICAgLnlQb3ANCiAgICAgICAgICApIHsNCiAgICAgICAgICAgIGNhc2UgInRvcCI6DQogICAgICAgICAgICAgICQoIiNpbmZvLWJhbGxvb24iKS5jc3Moew0KICAgICAgICAgICAgICAgIHRvcDogImF1dG8iLA0KICAgICAgICAgICAgICAgIGJvdHRvbTogImNhbGMoIiArICIxMDAlIiArICIgLSAiICsgdG9wZSArICIpIiwNCiAgICAgICAgICAgICAgICBoZWlnaHQ6ICJhdXRvIiwNCiAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgICQoIiNpbmZvLWJhbGxvb24iKS5hZGRDbGFzcygiYm90dG9tLXNldGEiKTsNCg0KICAgICAgICAgICAgICB0cmFuc2xhdGVZID0gIjAiOw0KICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCd0JykNCiAgICAgICAgICAgICAgYnJlYWs7DQoNCiAgICAgICAgICAgIGNhc2UgImJvdHRvbSI6DQogICAgICAgICAgICAgICQoIiNpbmZvLWJhbGxvb24iKS5jc3Moew0KICAgICAgICAgICAgICAgIHRvcDoNCiAgICAgICAgICAgICAgICAgIHRhYnNbY3VyVGFiXS5mYXR1cmFzW2N1ckZhdF0ucGFnc1tjdXJQYWddLml0ZW5zW2luZGljZV0NCiAgICAgICAgICAgICAgICAgICAgLmFyZWFQcm9wcy55UmVjdCArDQogICAgICAgICAgICAgICAgICB0YWJzW2N1clRhYl0uZmF0dXJhc1tjdXJGYXRdLnBhZ3NbY3VyUGFnXS5pdGVuc1tpbmRpY2VdDQogICAgICAgICAgICAgICAgICAgIC5hcmVhUHJvcHMuaFJlY3QgKw0KICAgICAgICAgICAgICAgICAgIiUiLA0KICAgICAgICAgICAgICAgIGJvdHRvbTogImF1dG8iLA0KICAgICAgICAgICAgICAgICJtYXJnaW4tdG9wIjogIjIycHgiLA0KICAgICAgICAgICAgICAgIGhlaWdodDogImF1dG8iLA0KICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnYicpDQogICAgICAgICAgICAgIHRyYW5zbGF0ZVkgPSAiMCI7DQogICAgICAgICAgICAgIGJyZWFrOw0KDQogICAgICAgICAgICBjYXNlICJtaWRkbGUiOg0KICAgICAgICAgICAgZGVmYXVsdDoNCiAgICAgICAgICAgICAgaWYgKA0KICAgICAgICAgICAgICAgIHRhYnNbY3VyVGFiXS5mYXR1cmFzW2N1ckZhdF0ucGFnc1tjdXJQYWddLml0ZW5zW2luZGljZV0NCiAgICAgICAgICAgICAgICAgIC5hcmVhUHJvcHMueFBvcCA9PSAibGVmdCINCiAgICAgICAgICAgICAgKSB7DQogICAgICAgICAgICAgICAgJCgiI2luZm8tYmFsbG9vbiIpLmNzcyh7DQogICAgICAgICAgICAgICAgICBsZWZ0OiAiYXV0byIsDQogICAgICAgICAgICAgICAgICByaWdodDoNCiAgICAgICAgICAgICAgICAgICAgMTAwIC0NCiAgICAgICAgICAgICAgICAgICAgdGFic1tjdXJUYWJdLmZhdHVyYXNbY3VyRmF0XS5wYWdzW2N1clBhZ10uaXRlbnNbaW5kaWNlXQ0KICAgICAgICAgICAgICAgICAgICAgIC5hcmVhUHJvcHMueFJlY3QgKw0KICAgICAgICAgICAgICAgICAgICAiJSIsDQogICAgICAgICAgICAgICAgfSk7DQogICAgICAgICAgICAgIH0gZWxzZSBpZiAoDQogICAgICAgICAgICAgICAgdGFic1tjdXJUYWJdLmZhdHVyYXNbY3VyRmF0XS5wYWdzW2N1clBhZ10uaXRlbnNbaW5kaWNlXQ0KICAgICAgICAgICAgICAgICAgLmFyZWFQcm9wcy54UG9wID09ICJyaWdodCINCiAgICAgICAgICAgICAgKSB7DQogICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygiYSIpDQogICAgICAgICAgICAgICAgJCgiI2luZm8tYmFsbG9vbiIpLmNzcyh7DQogICAgICAgICAgICAgICAgICByaWdodDogImF1dG8iLA0KICAgICAgICAgICAgICAgICAgbGVmdDoNCiAgICAgICAgICAgICAgICAgICAgdGFic1tjdXJUYWJdLmZhdHVyYXNbY3VyRmF0XS5wYWdzW2N1clBhZ10uaXRlbnNbaW5kaWNlXQ0KICAgICAgICAgICAgICAgICAgICAgIC5hcmVhUHJvcHMueFJlY3QgKw0KICAgICAgICAgICAgICAgICAgICB0YWJzW2N1clRhYl0uZmF0dXJhc1tjdXJGYXRdLnBhZ3NbY3VyUGFnXS5pdGVuc1tpbmRpY2VdDQogICAgICAgICAgICAgICAgICAgICAgLmFyZWFQcm9wcy53UmVjdCArDQogICAgICAgICAgICAgICAgICAgICIlIiwNCiAgICAgICAgICAgICAgICB9KTsNCiAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICQoIiNpbmZvLWJhbGxvb24iKS5jc3Moew0KICAgICAgICAgICAgICAgIHRvcDoNCiAgICAgICAgICAgICAgICAgIHRhYnNbY3VyVGFiXS5mYXR1cmFzW2N1ckZhdF0ucGFnc1tjdXJQYWddLml0ZW5zW2luZGljZV0NCiAgICAgICAgICAgICAgICAgICAgLmFyZWFQcm9wcy55UmVjdCArDQogICAgICAgICAgICAgICAgICB0YWJzW2N1clRhYl0uZmF0dXJhc1tjdXJGYXRdLnBhZ3NbY3VyUGFnXS5pdGVuc1tpbmRpY2VdDQogICAgICAgICAgICAgICAgICAgIC5hcmVhUHJvcHMuaFJlY3QgLw0KICAgICAgICAgICAgICAgICAgICAyICsNCiAgICAgICAgICAgICAgICAgICIlIiwNCiAgICAgICAgICAgICAgICBib3R0b206ICJhdXRvIiwNCiAgICAgICAgICAgICAgICB3aWR0aDogIjUwJSIsDQogICAgICAgICAgICAgICAgaGVpZ2h0OiAiYXV0byIsDQogICAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgICB0cmFuc2xhdGVZID0gIi01MCUiOw0KICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKCdtJykNCiAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgfQ0KDQogICAgICAgICAgdHJhbnNsYXRlID0NCiAgICAgICAgICAgICJ0cmFuc2xhdGVZKCIgKyB0cmFuc2xhdGVZICsgIikgdHJhbnNsYXRlWCgiICsgdHJhbnNsYXRlWCArICIpIjsNCg0KICAgICAgICAgICQoIiNpbmZvLWJhbGxvb24iKS5jc3MoeyB0cmFuc2Zvcm06IHRyYW5zbGF0ZSB9KTsNCiAgICAgICAgICAkKCIjaW5mby1iYWxsb29uIikucmVtb3ZlQ2xhc3MoKTsNCiAgICAgICAgICAkKCIjaW5mby1iYWxsb29uIikuYWRkQ2xhc3MoDQogICAgICAgICAgICBTdHJpbmcoDQogICAgICAgICAgICAgIHRhYnNbY3VyVGFiXS5mYXR1cmFzW2N1ckZhdF0ucGFnc1tjdXJQYWddLml0ZW5zW2luZGljZV0uYXJlYVByb3BzDQogICAgICAgICAgICAgICAgLnlQb3AgKw0KICAgICAgICAgICAgICAgICJfIiArDQogICAgICAgICAgICAgICAgdGFic1tjdXJUYWJdLmZhdHVyYXNbY3VyRmF0XS5wYWdzW2N1clBhZ10uaXRlbnNbaW5kaWNlXQ0KICAgICAgICAgICAgICAgICAgLmFyZWFQcm9wcy54UG9wDQogICAgICAgICAgICApDQogICAgICAgICAgKTsNCg0KICAgICAgICAgIGlmICgkKHdpbmRvdykud2lkdGgoKSA8IDc2OCkgew0KICAgICAgICAgICAgJCgiI2luZm8tYmFsbG9vbiIpLmNzcyh7DQogICAgICAgICAgICAgIHRvcDoNCiAgICAgICAgICAgICAgICAiY2FsYygiICsNCiAgICAgICAgICAgICAgICAodGFic1tjdXJUYWJdLmZhdHVyYXNbY3VyRmF0XS5wYWdzW2N1clBhZ10uaXRlbnNbaW5kaWNlXQ0KICAgICAgICAgICAgICAgICAgLmFyZWFQcm9wcy55UmVjdCArDQogICAgICAgICAgICAgICAgICB0YWJzW2N1clRhYl0uZmF0dXJhc1tjdXJGYXRdLnBhZ3NbY3VyUGFnXS5pdGVuc1tpbmRpY2VdDQogICAgICAgICAgICAgICAgICAgIC5hcmVhUHJvcHMuaFJlY3QpICsNCiAgICAgICAgICAgICAgICAiJSArIDIycHgpIiwNCiAgICAgICAgICAgICAgYm90dG9tOiAiYXV0byIsDQogICAgICAgICAgICAgICJtYXJnaW4tdG9wIjogIjIycHgiLA0KICAgICAgICAgICAgICBoZWlnaHQ6ICJhdXRvIiwNCiAgICAgICAgICAgIH0pOw0KICAgICAgICAgIH0NCg0KICAgICAgICAgICQoIiNpbWctZmF0dXJhIikuY3NzKCJvcGFjaXR5IiwgMC4yKTsNCiAgICAgICAgICAkKCIjaW5mby1iYWxsb29uIikuc2hvdygpOw0KICAgICAgICAgICQoIiNhcmVhLWJvbGFzLXJlY3RzIikuYWRkQ2xhc3MoImJvbGFzT24iKTsNCiAgICAgICAgICAkKCIuYXJlYS1jb250ZXVkbyIpLmFkZENsYXNzKCJhZGQtbW9kYWwiKTsNCiAgICAgICAgICAkKCIjYXJlYS1ib2xhcy1yZWN0cyAucmVjdGFuZ3VsbyIpLnNob3coKTsNCg0KICAgICAgICAgIHJhdGlvID0gJCgiI2ltZy1mYXR1cmEiKS5oZWlnaHQoKSAvICQoIiNhcmVhLWJvbGFzLXJlY3RzIikuaGVpZ2h0KCk7DQoNCiAgICAgICAgICByYXRpbyA9PSAwID8gKHJhdGlvID0gMSkgOiAocmF0aW8gPSByYXRpbyk7DQoNCiAgICAgICAgICB2YXIgc3RyVG9wID0NCiAgICAgICAgICAgICJjYWxjKCIgKyB0b3BlLnRvU3RyaW5nKCkgKyAiICogIiArIHJhdGlvLnRvU3RyaW5nKCkgKyAiKSI7DQogICAgICAgICAgdmFyIHN0cmhlaSA9DQogICAgICAgICAgICAiY2FsYygiICsgaGVpZ2h0ZS50b1N0cmluZygpICsgIiAqICIgKyByYXRpby50b1N0cmluZygpICsgIikiOw0KDQogICAgICAgICAgLy9jb25zb2xlLmxvZyggICAiYm9sYXMgOiAiICsgJCgnI2FyZWEtYm9sYXMtcmVjdHMnKS5oZWlnaHQoKSArICIgfCByYXRpbyA6ICIgKyByYXRpby50b1N0cmluZygpICsgICIgfCBpbWFnZW0gOiAiICsgJCgnI2ltZy1mYXR1cmEnKS5oZWlnaHQoKSArICIgLSAiICsgc3RyVG9wKQ0KICAgICAgICAgIC8vY29uc29sZS5sb2coc3RyVG9wKTsNCg0KICAgICAgICAgICQoIiNhcmVhLWJvbGFzLXJlY3RzIC5yZWN0YW5ndWxvIikuY3NzKHsNCiAgICAgICAgICAgIHRvcDogc3RyVG9wLA0KICAgICAgICAgICAgbGVmdDogbGVmdGUsDQogICAgICAgICAgICB3aWR0aDogd2lkdGhlLA0KICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHRlLA0KICAgICAgICAgIH0pOw0KICAgICAgICB9Ow0KDQogICAgICAgICQoIi5yaWdodC1idCIpLmNsaWNrKGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICBjdXJQYWcgPCAkKCIjbmF2LXBhZyBsaSIpLmxlbmd0aCAtIDEgPyAoY3VyUGFnICs9IDEpIDogKGN1clBhZyA9IDApOw0KDQogICAgICAgICAgY3VySXRlbSA9IDA7DQogICAgICAgICAgLy9jb25zb2xlLmxvZyhjdXJQYWcpOw0KICAgICAgICAgIGdldE5ld1BhZ2UoKTsNCiAgICAgICAgICAvL2NvbnNvbGUubG9nKGN1clBhZyk7DQogICAgICAgICAgY3JlYXRlVGFicyhjdXJUYWIsIGN1ckZhdCwgY3VyUGFnLCBudWxsLCB0cnVlKTsNCg0KICAgICAgICAgIGFjdGl2YXRlTWVudVBhcmVudEl0ZW0oY3VyUGFnKTsNCiAgICAgICAgICBnZXROZXdQYWdlKCk7DQoNCiAgICAgICAgICAkKCIjd3JhcGZsb2F0aW5nbWVudSAuc2VjLWhlbHAubGlua3MiKS5hZGRDbGFzcygiYWN0aXZlIik7DQogICAgICAgICAgJCgiI3dyYXBmbG9hdGluZ21lbnUgLmZhdHVyYXMtaW4tdGFicyBoNCIpLnJlbW92ZUNsYXNzKCJhY3RpdmUiKTsNCiAgICAgICAgICBzY3JvbGxlVG9JdGVtKCIjVGFiaWZ5Iik7DQogICAgICAgICAgc2V0TmF2UG9zaXRpb24oKTsNCiAgICAgICAgfSk7DQoNCiAgICAgICAgJCgiLmxlZnQtYnQiKS5jbGljayhmdW5jdGlvbiAoKSB7DQogICAgICAgICAgY3VyUGFnID4gMCA/IChjdXJQYWcgLT0gMSkgOiAoY3VyUGFnID0gJCgiI25hdi1wYWcgbGkiKS5sZW5ndGggLSAxKTsNCg0KICAgICAgICAgIGN1ckl0ZW0gPSAwOw0KICAgICAgICAgIC8vY29uc29sZS5sb2coY3VyUGFnKTsNCiAgICAgICAgICBnZXROZXdQYWdlKCk7DQogICAgICAgICAgLy9jb25zb2xlLmxvZyhjdXJQYWcpOw0KICAgICAgICAgIGNyZWF0ZVRhYnMoY3VyVGFiLCBjdXJGYXQsIGN1clBhZywgbnVsbCwgdHJ1ZSk7DQoNCiAgICAgICAgICBhY3RpdmF0ZU1lbnVQYXJlbnRJdGVtKGN1clBhZyk7DQogICAgICAgICAgZ2V0TmV3UGFnZSgpOw0KDQogICAgICAgICAgJCgiI3dyYXBmbG9hdGluZ21lbnUgLnNlYy1oZWxwLmxpbmtzIikuYWRkQ2xhc3MoImFjdGl2ZSIpOw0KICAgICAgICAgICQoIiN3cmFwZmxvYXRpbmdtZW51IC5mYXR1cmFzLWluLXRhYnMgaDQiKS5yZW1vdmVDbGFzcygiYWN0aXZlIik7DQogICAgICAgICAgc2Nyb2xsZVRvSXRlbSgiI1RhYmlmeSIpOw0KICAgICAgICAgIHNldE5hdlBvc2l0aW9uKCk7DQogICAgICAgIH0pOw0KDQogICAgICAgIHNjcm9sbGVUb0l0ZW0gPSBmdW5jdGlvbiAoaVRlbSkgew0KICAgICAgICAgICRlbGVtID0gaVRlbTsNCiAgICAgICAgICAvL2lmKHNjcm9sbFRvSW1hZyl7DQogICAgICAgICAgJCgiaHRtbCwgYm9keSIpLmFuaW1hdGUoDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgIHNjcm9sbFRvcDogJCgkZWxlbSkub2Zmc2V0KCkudG9wIC0gMjAgLSA1MCAtIDMwLA0KICAgICAgICAgICAgfSwNCiAgICAgICAgICAgIDEwMDANCiAgICAgICAgICApOw0KICAgICAgICAgIC8vfQ0KICAgICAgICAgIC8vY29uc29sZS5sb2coJCggJGVsZW0gKS5vZmZzZXQoKS50b3AgLSAyMCAtIDUwICsgIiBzY3JvbGwgWSIpDQogICAgICAgIH07DQoNCiAgICAgICAgZ2V0SXRSaWdodCA9IGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICB2YXIgdGFyZ2V0Ow0KICAgICAgICAgIC8vY29uc29sZS5sb2coImdldCBpdCByaWdodCIpDQoNCiAgICAgICAgICAvLyQoIiNuYXYtZmF0dXJhcyIpLnJlbW92ZUNsYXNzKCdhZmZpeCBhZmZpeC10b3AgYWZmaXgtYm90dG9tJykucmVtb3ZlRGF0YSgnYnMuYWZmaXgnKQ0KDQogICAgICAgICAgaWYgKCQod2luZG93KS53aWR0aCgpID49IDc2OCkgew0KICAgICAgICAgICAgLy9jb25zb2xlLmxvZygiYWRkaW5nIik7DQogICAgICAgICAgICAvL3Njcm9sbFRvSW1hZyA9IGZhbHNlOw0KICAgICAgICAgICAgc2Nyb2xsVG9JbWFnID0gdHJ1ZTsNCiAgICAgICAgICAgIHRhcmdldCA9ICQoIiNyaWdodC1zaWRlIik7DQogICAgICAgICAgICAkKCIjY29sLWNvbnQtcmlnaHQiKS5hcHBlbmRUbyh0YXJnZXQpOw0KDQogICAgICAgICAgICAvLyAkKCIjbmF2LWZhdHVyYXMiKS5hZmZpeCh7b2Zmc2V0OiB7dG9wOiAkKCIjbmF2LWZhdHVyYXMiKS5vZmZzZXQoKS50b3AgfSB9KTsNCg0KICAgICAgICAgICAgaWYgKGZsb2F0aW5nSXNPbikgew0KICAgICAgICAgICAgICAvLy8vY29uc29sZS5sb2coImRvIG5vdGhpbmciKQ0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygiZG8gaXQiKQ0KDQogICAgICAgICAgICAgIGZsb2F0aW5nSXNPbiA9IHRydWU7DQogICAgICAgICAgICAvKg0KICAgICAgICAgICAgJCgiI3dyYXBmbG9hdGluZ21lbnUiKS5hZmZpeCh7DQoNCiAgICAgICAgICAgICAgICBvZmZzZXQ6IHsNCiAgICAgICAgICAgICAgICAgIHRvcDogJCgiI3dyYXBmbG9hdGluZ21lbnUiKS5vZmZzZXQoKS50b3AsDQogICAgICAgICAgICAgICAgICBib3R0b206ICQoIiNDb250ZW50aWZ5Iikub3V0ZXJIZWlnaHQodHJ1ZSkgLSAkKCIjd3JhcGZsb2F0aW5nbWVudSIpLmhlaWdodCgpIC8vKCQoIiNDb250ZW50aWZ5Iikub2Zmc2V0KCkudG9wICsgJCgiI0NvbnRlbnRpZnkiKS5oZWlnaHQoKSkgLSAkKCIjd3JhcGZsb2F0aW5nbWVudSIpLm9mZnNldCgpLnRvcA0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0pOw0KICAgICAgICAgICAgKi8NCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgLy9jb25zb2xlLmxvZygicmVtb3ZpbmciKTsNCg0KICAgICAgICAgICAgc2Nyb2xsVG9JbWFnID0gdHJ1ZTsNCiAgICAgICAgICAgIHRhcmdldCA9ICQoIiNsZWZ0LXNpZGUtZmF0LW1vYmlsZSIpOw0KICAgICAgICAgICAgJCgiI2NvbC1jb250LXJpZ2h0IikuYXBwZW5kVG8odGFyZ2V0KTsNCg0KICAgICAgICAgICAgLy8kKCIjbmF2LWZhdHVyYXMiKS5yZW1vdmVDbGFzcygnYWZmaXggYWZmaXgtdG9wIGFmZml4LWJvdHRvbScpLnJlbW92ZURhdGEoJ2JzLmFmZml4JykNCg0KICAgICAgICAgICAgaWYgKGZsb2F0aW5nSXNPbikgew0KICAgICAgICAgICAgICBmbG9hdGluZ0lzT24gPSBmYWxzZTsNCiAgICAgICAgICAgICAgLyoNCiAgICAgICAgICAgICAgJCh3aW5kb3cpLm9mZignLmFmZml4JykNCiAgICAgICAgICAgICAgJCgiI3dyYXBmbG9hdGluZ21lbnUiKS5yZW1vdmVDbGFzcygnYWZmaXggYWZmaXgtdG9wIGFmZml4LWJvdHRvbScpLnJlbW92ZURhdGEoJ2JzLmFmZml4JykNCiAgICAgICAgICAgICAgKi8NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICQoIiNpbmZvLWJhbGxvb24iKS5jc3MoDQogICAgICAgICAgICAgICJ0b3AiLA0KICAgICAgICAgICAgICBwYXJzZUludCgkKCIjcmVjdC1ib3JkZXIiKS5jc3MoImhlaWdodCIpKSArDQogICAgICAgICAgICAgICAgcGFyc2VJbnQoJCgiI3JlY3QtYm9yZGVyIikuY3NzKCJ0b3AiKSkNCiAgICAgICAgICAgICk7DQogICAgICAgICAgICAkKCIjaW5mby1iYWxsb29uIikuY3NzKCJtYXJnaW4tdG9wIiwgIjIycHghaW1wb3J0YW50Iik7DQogICAgICAgICAgfQ0KDQogICAgICAgICAgaWYgKGN1ckl0ZW0gIT0gbnVsbCAmJiBiYWxsb29uSXNPcGVuKSB7DQogICAgICAgICAgICBwb3NpdGlvbmF0ZUJhbGxvb24oY3VyVGFiLCBjdXJGYXQsIGN1clBhZywgY3VySXRlbSk7DQogICAgICAgICAgfQ0KICAgICAgICB9Ow0KDQogICAgICAgICQuZWFjaChkb2N1bWVudC5sb2NhdGlvbi5zZWFyY2guc3Vic3RyKDEpLnNwbGl0KCImIiksIGZ1bmN0aW9uIChjLCBxKSB7DQogICAgICAgICAgdmFyIGkgPSBxLnNwbGl0KCI9Iik7DQoNCiAgICAgICAgICB3aW5kb3cuaGlzdG9yeS5wdXNoU3RhdGUoDQogICAgICAgICAgICAiIiwNCiAgICAgICAgICAgIGRvY3VtZW50LnRpdGxlLA0KICAgICAgICAgICAgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lDQogICAgICAgICAgKTsNCg0KICAgICAgICAgIGlmIChpICE9ICIiKSB7DQogICAgICAgICAgICBxdWVyaWVzW2lbMF0udG9TdHJpbmcoKV0gPSBpWzFdLnRvU3RyaW5nKCk7DQoNCiAgICAgICAgICAgIGlmIChxdWVyaWVzLnQpIHsNCiAgICAgICAgICAgICAgb3BlblRhYiA9IHRydWU7DQogICAgICAgICAgICAgIGN1clRhYiA9IHF1ZXJpZXMudCAtIDE7DQogICAgICAgICAgICAgIG9wZW5UID0gdHJ1ZTsNCiAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKHF1ZXJpZXMuZikgew0KICAgICAgICAgICAgICBvcGVuVGFiID0gdHJ1ZTsNCiAgICAgICAgICAgICAgY3VyRmF0ID0gcXVlcmllcy5mIC0gMTsNCiAgICAgICAgICAgICAgb3BlbkYgPSB0cnVlOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKHF1ZXJpZXMucCkgew0KICAgICAgICAgICAgICBvcGVuVGFiID0gdHJ1ZTsNCiAgICAgICAgICAgICAgY3VyUGFnID0gcXVlcmllcy5wIC0gMTsNCiAgICAgICAgICAgICAgb3BlblAgPSB0cnVlOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKHF1ZXJpZXMuaSkgew0KICAgICAgICAgICAgICBvcGVuVGFiID0gdHJ1ZTsNCiAgICAgICAgICAgICAgY3VySXRlbSA9IHF1ZXJpZXMuaSAtIDE7DQogICAgICAgICAgICAgIG9wZW5JID0gdHJ1ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICB9DQogICAgICAgIH0pOw0KICAgICAgICAvKiovDQogICAgICAgICQod2luZG93KS5yZXNpemUoZnVuY3Rpb24gKCkgew0KICAgICAgICAgIGdldEl0UmlnaHQoKTsNCiAgICAgICAgfSk7DQoNCiAgICAgICAgJCh3aW5kb3cpLnJlYWR5KGZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAvL2dldEl0UmlnaHQoKQ0KICAgICAgICAgIGNyZWF0ZVRhYnMoY3VyVGFiLCBjdXJGYXQsIGN1clBhZywgY3VySXRlbSwgZmFsc2UpOw0KICAgICAgICAgIGdldEl0UmlnaHQoKTsNCiAgICAgICAgICAkKCJodG1sLCBib2R5IikuYW5pbWF0ZSgNCiAgICAgICAgICAgIHsNCiAgICAgICAgICAgICAgc2Nyb2xsVG9wOiA1LA0KICAgICAgICAgICAgfSwNCiAgICAgICAgICAgIDEwMDANCiAgICAgICAgICApOw0KICAgICAgICB9KTsNCiAgICAgIDwvc2NyaXB0Pg0KICAgIDwvc2VjdGlvbj4NCg0KICAgIDwhLS0gRklOQUwgRE8gQkxPQ08gREUgSFRNTCBMSVZSRSAtLT4NCiAgICA8IS0tIEZJTkFMIERPIEJMT0NPIERFIEhUTUwgTElWUkUgLS0+DQogICAgPCEtLSBGSU5BTCBETyBCTE9DTyBERSBIVE1MIExJVlJFIC0tPmQCBQ9kFgICAQ9kFgICAg9kFgICAQ9kFgICAw8WAh8BaBYCZg9kFgQCAw9kFgYCAQ8WAh8BaGQCAw8WAh8BaGQCBQ8WAh8BaGQCBA8PFgIeCUFjY2Vzc0tleQUBL2RkAgcPZBYCAgEPDxYCHwFoZGQCCw8PFgIeDElzRW50cmVwcmlzZWhkZAIND2QWAgICD2QWBAIFDxYCHwALKwQBZAINDxYCHwALKwQBZAI5D2QWAgIBD2QWAgIBDxYCHwALKwQBZGSfcMtDV2Lik5kfgTd/9+ZREXNvhA==">
</div>
<script type="text/javascript">
//<![CDATA[
var theForm = document.forms['aspnetForm'];
if (!theForm) {
theForm = document.aspnetForm;
}
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
//]]>
</script>
<script src="/WebResource.axd?d=ax2ekkvf1XVLkysz55fI5L-bAsXumDyhgpwMs1MkDe_V4uzaPC363mvJZG18wUoc42DkM38fxD9Jjr-U11gzm4tV35A1&t=637823365705833095" type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
var MSOWebPartPageFormName = 'aspnetForm';
var g_presenceEnabled = true;
var g_wsaEnabled = false;
var g_correlationId = '54c8b3a0-580f-e01e-12fa-40f52e20e09e';
var g_wsaQoSEnabled = false;
var g_wsaQoSDataPoints = [];
var g_wsaRUMEnabled = false;
var g_wsaLCID = 2070;
var g_wsaListTemplateId = 850;
var g_wsaSiteTemplateId = 'CMSPUBLISHING#0';
var _fV4UI = true;
var _spPageContextInfo = {
webServerRelativeUrl: "\u002fisites\u002fajuda-e-suporte",
webAbsoluteUrl: "https:\u002f\u002fwww.meo.pt\u002fisites\u002fajuda-e-suporte",
siteAbsoluteUrl: "https:\u002f\u002fwww.meo.pt",
serverRequestPath: "\u002fisites\u002fajuda-e-suporte\u002fPaginas\u002ffatura-interativa.aspx",
layoutsUrl: "_layouts\u002f15",
webTitle: "Ajuda e Suporte",
webTemplate: "39",
tenantAppVersion: "3222075475",
isAppWeb: false,
Has2019Era: true,
webLogoUrl: "\u002fSiteAssets\u002fsiteIcon16PRD.png",
webLanguage: 2070,
currentLanguage: 2070,
currentUICultureName: "pt-PT",
currentCultureName: "pt-PT",
clientServerTimeDelta: new Date("2023-05-17T15:33:37.1722380Z") - new Date(),
updateFormDigestPageLoaded: new Date("2023-05-17T15:33:37.1722380Z"),
siteClientTag: "20139$$16.0.5361.1002",
crossDomainPhotosEnabled: false,
webUIVersion: 15,
webPermMasks: {
High: 16,
Low: 196673
},
pageListId: "{a8317881-e08a-4755-9174-a0c5ca0e3c65}",
pageItemId: 122,
pagePersonalizationScope: 1,
alertsEnabled: true,
customMarkupInCalculatedFieldDisabled: true,
siteServerRelativeUrl: "\u002f",
allowSilverlightPrompt: 'True',
isSiteAdmin: false
};
var L_Menu_BaseUrl = "/isites/ajuda-e-suporte";
var L_Menu_LCID = "2070";
var L_Menu_SiteTheme = "null";
document.onreadystatechange = fnRemoveAllStatus;
function fnRemoveAllStatus() {
removeAllStatus(true)
};
Flighting.ExpFeatures = [480215056, 1880287568, 1561350208, 302071836, 3212816, 69472768, 4194310, -2113396707, 268502022, -872284160, 1049232, -2147421952, 65536, 65536, 2097472, 917504, -2147474174, 1372324107, 67108882, 0, 0, -2147483648,
2097152, 0, 0, 32768, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 32768
];
(function() {
if (typeof(window.SP) == "undefined") window.SP = {};
if (typeof(window.SP.YammerSwitch) == "undefined") window.SP.YammerSwitch = {};
var ysObj = window.SP.YammerSwitch;
ysObj.IsEnabled = false;
ysObj.TargetYammerHostName = "www.yammer.com";
})();
var _spWebPartComponents = new Object(); //]]>
</script>
<script src="/_layouts/15/blank.js?rev=5eU34nte%2Fbx2pM%2FG%2BAh98A%3D%3DTAG0" type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
(function() {
if (typeof(_spBodyOnLoadFunctions) === 'undefined' || _spBodyOnLoadFunctions === null) {
return;
}
_spBodyOnLoadFunctions.push(function() {
SP.SOD.executeFunc('core.js', 'FollowingDocument', function() {
FollowingDocument();
});
});
})();
(function() {
if (typeof(_spBodyOnLoadFunctions) === 'undefined' || _spBodyOnLoadFunctions === null) {
return;
}
_spBodyOnLoadFunctions.push(function() {
SP.SOD.executeFunc('core.js', 'FollowingCallout', function() {
FollowingCallout();
});
});
})();
if (typeof(DeferWebFormInitCallback) == 'function') DeferWebFormInitCallback();
function WebForm_OnSubmit() {
UpdateFormDigest('\u002fisites\u002fajuda-e-suporte', 1440000);
if (typeof(_spFormOnSubmitWrapper) != 'undefined') {
return _spFormOnSubmitWrapper();
} else {
return true;
};
return true;
}
//]]>
</script>
<div class="aspNetHidden">
<input type="hidden" name="__VIEWSTATEGENERATOR" id="__VIEWSTATEGENERATOR" value="FA3903EC">
</div>
<!-- ===== STARTER: SharePoint Reqs this for adding columns ===================================================== -->
<script type="text/javascript">
var submitHook = function() {
return false;
};
theForm._spOldSubmit = theForm.submit;
theForm.submit = function() {
if (!submitHook()) {
this._spOldSubmit();
}
};
</script>
<!-- ===== STARTER: Web Part Manager ============================================================================================= -->
<span id="DeltaSPWebPartManager">
</span>
<!-- ===== STARTER: ScriptManager ===================================================== -->
<script type="text/javascript">
//<![CDATA[
Sys.WebForms.PageRequestManager._initialize('ctl00$ScriptManager', 'aspnetForm', [], [], [], 90, 'ctl00');
//]]>
</script>
<!-- FIX 20180912 - missing pagestatus in SP16-->
<!-- ===== STARTER: Main Scrolling Body Starts Here =============================================================================== -->
<div id="s4-workspace" class="s4-nosetwidth">
<div id="s4-bodyContainer">
<noscript>
<div class="alert alert-warning alert-top">
<div class="noindex">Detetámos que tem o JavaScript desativado no seu browser. Para poder usar em pleno o site MEO é necessário ter o JavaScript ativado.</div>
</div>
</noscript>
<!-- TOP - BARRA TRANSVERSAL - INICIO -->
<div class="top-lnks" id="top-lnks">
<!-- topbottomlinks.js injects here-->
</div>
<div class="main" id="topo">
<!-- acessibilidade - removido
<div class="noindex">
<ul class="list-unstyled anchor">
<li><a href="#anchor" accesskey="c" class="skip" tabindex="1">Saltar para os conteúdos [Alt+C]</a></li>
</ul>
</div>-->
<header id="header" class="fixed" data-scroll-direction="down">
<mainmenu id="main-menu-v5">
<nav class="main-menu-v5 MEO">
<section class="top-nav-bar" id="top-nav-bar">
<section class="top-nav-bar-one"></section>
<section class="top-nav-bar-two">
<ul class="menu-hyperlinks">
<li class="is-active">
<a class="" href="https://www.meo.pt" target="_self" data-eventregion="M_TOPO" data-eventclick="M_M" data-eventtitle="Particulares" data-eventlink="https://www.meo.pt"><span class="hyperlinks-txt">Particulares</span></a></li>
<li class="">
<a class="" href="https://www.meo.pt/empresas" target="_self" data-eventregion="M_TOPO" data-eventclick="M_M" data-eventtitle="Empresas" data-eventlink="https://www.meo.pt/empresas"><span class="hyperlinks-txt">Empresas</span></a>
</li>
<li class=""><a class="" href="https://www.sapo.pt/" target="_blank" data-eventregion="M_TOPO" data-eventclick="M_M" data-eventtitle="SAPO" data-eventlink="https://www.sapo.pt/"><span class="hyperlinks-txt">SAPO</span></a></li>
<li class="">
<a class="" href="https://blueticket.meo.pt/?refer=MEO1090HP09df" target="_blank" data-eventregion="M_TOPO" data-eventclick="M_M" data-eventtitle="MEO Bluecticket" data-eventlink="https://blueticket.meo.pt/?refer=MEO1090HP09df"><span class="hyperlinks-txt">MEO Blueticket</span></a>
</li>
</ul>
</section>
<section class="top-nav-bar-three">
<ul class="menu-hyperlinks">
<li class="">
<a class="cos-link" href="https://conteudos.meo.pt/meo/Documentos/Condicoes-Oferta-Servicos/Mod-C1001276.pdf" target="_blank" data-eventregion="M_TOPO" data-eventclick="M_M" data-eventtitle="Condições de oferta dos serviços" data-eventlink="https://conteudos.meo.pt/meo/Documentos/Condicoes-Oferta-Servicos/Mod-C1001276.pdf"><span class="hyperlinks-txt">Condições de oferta dos serviços</span></a>
</li>
<li class=""><a class="" href="/ocorrencias" target="_blank" data-eventregion="M_TOPO" data-eventclick="M_M" data-eventtitle="Ocorrências" data-eventlink="/ocorrencias"><span class="hyperlinks-txt">Ocorrências</span></a></li>
</ul>
<ul class="language-selector-toggle">
<li class=""><a class="" href="/en" target="_self"><span class="hyperlinks-txt">English</span></a></li>
</ul>
</section>
</section>
<section class="nav-bar" id="nav-bar">
<section class="nav-bar-one"><a href="/" class="logo"><img src="https://conteudos.meo.pt/Style%20Library/consumo/images/logo-meo.svg" alt="MEO" width="144" height="50" loading="lazy"></a></section>
<section class="nav-bar-two">
<section class="main-nav">
<section class="level-1">
<ul class="level-1-entries">
<li class="level-1-entry "><button class="level-1-entry-link " data-eventregion="MEO_MENU" data-eventclick="M_M1" data-eventtitle="Sente o 5G" data-eventlink="sente-5g"><span
class="level-1-entry-link-title">5G</span></button>
<section class="level-2">
<div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">5G</span></div>
<ul class="level-2-entries">
<li class="level-2-entry no-submenu">
<a href="/5g" class="level-2-entry-link icon-5g" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M1.1" data-eventtitle="Sente que é real" data-eventlink="/5g"><span class="level-2-entry-link-title">Sente que é real</span></a>
</li>
<li class="level-2-entry no-submenu">
<a href="https://loja.meo.pt/Equipamentos/Telemoveis/?_ga=2.123430863.538160453.1640547250-1499281708.1589105636#!filter=modalidadecompra_Pronto%20pagamento%24tecnologia_5G" class="level-2-entry-link icon-telemoveis" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M1.2" data-eventtitle="Smartphones 5G" data-eventlink="https://loja.meo.pt/Equipamentos/Telemoveis/?_ga=2.123430863.538160453.1640547250-1499281708.1589105636#!filter=modalidadecompra_Pronto%20pagamento%24tecnologia_5G"><span class="level-2-entry-link-title">Smartphones 5G</span></a>
</li>
<li class="level-2-entry no-submenu">
<a href="/5g#add-velocidade-anchor" class="level-2-entry-link icon-m-meo" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M1.3" data-eventtitle="Máxima velocidade" data-eventlink="/5g#add-velocidade-anchor"><span class="level-2-entry-link-title">Máxima velocidade</span></a>
</li>
</ul>
</section>
</li>
<li class="level-1-entry "><button class="level-1-entry-link " data-eventregion="MEO_MENU" data-eventclick="M_M2" data-eventtitle="Serviços" data-eventlink="/servicos"><span
class="level-1-entry-link-title">Serviços</span></button>
<section class="level-2">
<div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">Serviços</span></div>
<ul class="level-2-entries">
<li class="level-2-entry "><button class="level-2-entry-link icon-emcasa" data-eventregion="MEO_MENU" data-eventclick="M_M2.1" data-eventtitle="Para casa" data-eventlink="/servicos/casa"><span
class="level-2-entry-link-title">Para casa</span></button>
<section class="level-3">
<div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">Para casa</span></div>
<ul class="level-3-entries">
<li class="level-3-entry no-submenu">
<a href="/servicos/casa/fibra/pacotes-tv-net-voz" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M2.1.1" data-eventtitle="TV+Net+Voz" data-eventlink="/servicos/casa/fibra/pacotes-tv-net-voz"><span class="level-3-entry-link-title">TV+Net+Voz</span></a>
</li>
<li class="level-3-entry no-submenu">
<a href="/servicos/casa/fibra/pacotes-com-telemovel" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M2.1.2" data-eventtitle="TV+Net+Voz+Móvel" data-eventlink="/servicos/casa/fibra/pacotes-com-telemovel"><span class="level-3-entry-link-title">TV+Net+Voz+Móvel</span></a>
</li>
<li class="level-3-entry no-submenu">
<a href="/servicos/casa/alterar-servicos/mudanca-de-casa" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M2.1.3" data-eventtitle="Mudar de Casa" data-eventlink="/servicos/casa/alterar-servicos/mudanca-de-casa"><span class="level-3-entry-link-title">Mudar de Casa</span></a>
</li>
<li class="level-3-entry no-submenu">
<a href="/servicos/casa/cobertura-fibra" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M2.1.4" data-eventtitle="Testar cobertura" data-eventlink="/servicos/casa/cobertura-fibra"><span class="level-3-entry-link-title">Testar cobertura</span></a>
</li>
<li class="level-3-entry "><button class="level-3-entry-link " data-eventregion="MEO_MENU" data-eventclick="M_M2.1.5" data-eventtitle="Adicionar serviços" data-eventlink="/servicos/casa/alterar-servicos"><span
class="level-3-entry-link-title">Adicionar serviços</span></button>
<section class="level-4">
<div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">Adicionar serviços</span></div>
<ul class="level-4-entries">
<li class="level-4-entry no-submenu">
<a href="/formulario-mais-cartoes-pacote-com-telemovel" class="level-4-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M2.1.5.1" data-eventtitle="Adicionar cartões telemóvel" data-eventlink="/formulario-mais-cartoes-pacote-com-telemovel"><span class="level-4-entry-link-title">Adicionar cartões telemóvel</span></a>
</li>
<li class="level-4-entry no-submenu">
<a href="/servicos/casa/alterar-servicos/mais-net-no-telemovel" class="level-4-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M2.1.5.2" data-eventtitle="Mais Net no telemóvel" data-eventlink="/servicos/casa/alterar-servicos/mais-net-no-telemovel"><span class="level-4-entry-link-title">Mais Net no telemóvel</span></a>
</li>
<li class="level-4-entry no-submenu">
<a href="/servicos/casa/alterar-servicos/segunda-casa" class="level-4-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M2.1.5.3" data-eventtitle="Segunda casa" data-eventlink="/servicos/casa/alterar-servicos/segunda-casa"><span class="level-4-entry-link-title">Segunda casa</span></a>
</li>
</ul>
</section>
</li>
<li class="level-3-entry "><button class="level-3-entry-link " data-eventregion="MEO_MENU" data-eventclick="M_M2.1.6" data-eventtitle="Internet Fibra" data-eventlink="/servicos/casa/internet-fibra"><span
class="level-3-entry-link-title">Internet Fibra</span></button>
<section class="level-4">
<div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">Internet Fibra</span></div>
<ul class="level-4-entries">
<li class="level-4-entry no-submenu">
<a href="/servicos/casa/internet-fibra/meo-smart-wifi" class="level-4-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M2.1.6.1" data-eventtitle="MEO Smart WiFi" data-eventlink="/servicos/casa/internet-fibra/meo-smart-wifi"><span class="level-4-entry-link-title">MEO Smart WiFi</span></a>
</li>
<li class="level-4-entry no-submenu">
<a href="/servicos/casa/internet-fibra/melhor-experiencia-net" class="level-4-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M2.1.6.2" data-eventtitle="Melhor experiência Net" data-eventlink="/servicos/casa/internet-fibra/melhor-experiencia-net"><span class="level-4-entry-link-title">Melhor experiência Net</span></a>
</li>
<li class="level-4-entry no-submenu">
<a href="/speedtest" class="level-4-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M2.1.6.3" data-eventtitle="Testar velocidade" data-eventlink="/speedtest"><span class="level-4-entry-link-title">Testar velocidade</span></a>
</li>
</ul>
</section>
</li>
<li class="level-3-entry "><button class="level-3-entry-link " data-eventregion="MEO_MENU" data-eventclick="M_M2.1.7" data-eventtitle="Telefone fixo" data-eventlink="/servicos/casa/telefone-fixo"><span
class="level-3-entry-link-title">Telefone fixo</span></button>
<section class="level-4">
<div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">Telefone fixo</span></div>
<ul class="level-4-entries">
<li class="level-4-entry no-submenu">
<a href="/servicos/casa/telefone-fixo/servico-telefonico" class="level-4-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M2.1.7.1" data-eventtitle="Serviço telefónico" data-eventlink="/servicos/casa/telefone-fixo/servico-telefonico"><span class="level-4-entry-link-title">Serviço telefónico</span></a>
</li>
<li class="level-4-entry no-submenu">
<a href="/servicos/casa/telefone-fixo/tarifarios" class="level-4-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M2.1.7.2" data-eventtitle="Tarifários" data-eventlink="/servicos/casa/telefone-fixo/tarifarios"><span class="level-4-entry-link-title">Tarifários</span></a>
</li>
<li class="level-4-entry no-submenu">
<a href="/servicos/casa/telefone-fixo/cartoes-hello" class="level-4-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M2.1.7.3" data-eventtitle="Cartões Hello" data-eventlink="/servicos/casa/telefone-fixo/cartoes-hello"><span class="level-4-entry-link-title">Cartões Hello</span></a>
</li>
</ul>
</section>
</li>
<li class="level-3-entry no-submenu">
<a href="/servicos/casa/tarifa-social-internet" class="level-3-entry-link " target="_self" data-eventregion="EventTrackingCategoria" data-eventclick="M_M2.1.8" data-eventtitle="Tarifa Social Internet" data-eventlink="/servicos/casa/tarifa-social-internet"><span class="level-3-entry-link-title">Tarifa Social Internet</span></a>
</li>
</ul>
</section>
</li>
<li class="level-2-entry "><button class="level-2-entry-link icon-net-movel" data-eventregion="MEO_MENU" data-eventclick="M_M2.2" data-eventtitle="Móvel" data-eventlink="/servicos/movel"><span
class="level-2-entry-link-title">Móvel</span></button>
<section class="level-3">
<div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">Móvel</span></div>
<ul class="level-3-entries">
<li class="level-3-entry "><button class="level-3-entry-link " data-eventregion="MEO_MENU" data-eventclick="M_M2.2.1" data-eventtitle="Tarifários telemóvel"
data-eventlink="/servicos/movel/tarifarios-telemovel"><span class="level-3-entry-link-title">Tarifários telemóvel</span></button>
<section class="level-4">
<div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">Tarifários telemóvel</span></div>
<ul class="level-4-entries">
<li class="level-4-entry no-submenu">
<a href="/servicos/movel/tarifarios-telemovel/pos-pago/m-movel" class="level-4-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M2.2.1.1" data-eventtitle="pós-pago telemóvel" data-eventlink="/servicos/movel/tarifarios-telemovel/pos-pago/m-movel"><span class="level-4-entry-link-title">Pós-pagos</span></a>
</li>
<li class="level-4-entry no-submenu">
<a href="/servicos/movel/tarifarios-telemovel/pre-pagos" class="level-4-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M2.2.1.2" data-eventtitle="pré-pagos telemóvel" data-eventlink="/servicos/movel/tarifarios-telemovel/pre-pagos"><span class="level-4-entry-link-title">Pré-pagos</span></a>
</li>
<li class="level-4-entry no-submenu">
<a href="/servicos/movel/tarifarios-telemovel/roaming" class="level-4-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M2.2.1.3" data-eventtitle="Roaming" data-eventlink="/servicos/movel/tarifarios-telemovel/roaming"><span class="level-4-entry-link-title">Roaming</span></a>
</li>
<li class="level-4-entry no-submenu">
<a href="/servicos/movel/tarifarios-telemovel/internacional/tarifa-base-internacional" class="level-4-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M2.2.1.4" data-eventtitle="Internacional" data-eventlink="/servicos/movel/tarifarios-telemovel/internacional/tarifa-base-internacional"><span class="level-4-entry-link-title">Internacional</span></a>
</li>
</ul>
</section>
</li>
<li class="level-3-entry "><button class="level-3-entry-link " data-eventregion="MEO_MENU" data-eventclick="M_M2.2.2" data-eventtitle="Mais net e serviços"
data-eventlink="/servicos/movel/mais-net-servicos/adicionar-net-movel"><span class="level-3-entry-link-title">Mais net e serviços</span></button>
<section class="level-4">
<div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">Mais net e serviços</span></div>
<ul class="level-4-entries">
<li class="level-4-entry no-submenu">
<a href="/servicos/movel/mais-net-servicos/apps-servicos/meo-net-segura" class="level-4-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M2.2.2.1" data-eventtitle="Net Segura" data-eventlink="/servicos/movel/mais-net-servicos/apps-servicos/meo-net-segura"><span class="level-4-entry-link-title">Net Segura</span></a>
</li>
<li class="level-4-entry no-submenu">
<a href="/servicos/movel/mais-net-servicos/adicionar-net-movel/pos-pagos" class="level-4-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M2.2.2.2" data-eventtitle="Adicionar Internet" data-eventlink="/servicos/movel/mais-net-servicos/adicionar-net-movel/pos-pagos"><span class="level-4-entry-link-title">Adicionar net telemóvel</span></a>
</li>
<li class="level-4-entry no-submenu">
<a href="/servicos/movel/mais-net-servicos/apps-servicos" class="level-4-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M2.2.2.3" data-eventtitle="Apps e Serviços" data-eventlink="/servicos/movel/mais-net-servicos/apps-servicos"><span class="level-4-entry-link-title">Apps e Serviços</span></a>
</li>
<li class="level-4-entry no-submenu">
<a href="https://waitingring.meo.pt/" class="level-4-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M2.2.2.4" data-eventtitle="Waiting Rings" data-eventlink="https://waitingring.meo.pt/"><span class="level-4-entry-link-title">Waiting Rings</span></a>
</li>
</ul>
</section>
</li>
<li class="level-3-entry "><button class="level-3-entry-link " data-eventregion="MEO_MENU" data-eventclick="M_M2.2.3" data-eventtitle="Net para PC/Tablet" data-eventlink="/servicos/movel/net-pc-router"><span
class="level-3-entry-link-title">Net para PC/Tablet</span></button>
<section class="level-4">
<div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">Net para PC/Tablet</span></div>
<ul class="level-4-entries">
<li class="level-4-entry no-submenu">
<a href="/servicos/movel/net-pc-router/pos-pagos" class="level-4-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M2.2.3.1" data-eventtitle="pós-pagos net" data-eventlink="/servicos/movel/net-pc-router/pos-pagos"><span class="level-4-entry-link-title">Pós-pagos</span></a>
</li>
<li class="level-4-entry no-submenu">
<a href="/servicos/movel/net-pc-router/pre-pagos" class="level-4-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M2.2.3.2" data-eventtitle="pré-pagos net" data-eventlink="/servicos/movel/net-pc-router/pre-pagos"><span class="level-4-entry-link-title">Pré-pagos</span></a>
</li>
</ul>
</section>
</li>
</ul>
</section>
</li>
<li class="level-2-entry no-submenu">
<a href="/home" class="level-2-entry-link icon-meo-home" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M2.3" data-eventtitle="MEO Home" data-eventlink="/home"><span class="level-2-entry-link-title">MEO Home</span></a>
</li>
<li class="level-2-entry no-submenu">
<a href="/servicos/smart-living" class="level-2-entry-link icon-smart-living" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M2.4" data-eventtitle="Smart Living" data-eventlink="/servicos/smart-living"><span class="level-2-entry-link-title">Smart Living</span></a>
</li>
<li class="level-2-entry no-submenu">
<a href="/servicos/casa/casa-digital" class="level-2-entry-link icon-smarthome" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M2.5" data-eventtitle="Casa Digital" data-eventlink="/servicos/casa/casa-digital"><span class="level-2-entry-link-title">Casa Digital</span></a>
</li>
<li class="level-2-entry no-submenu">
<a href="/energia" class="level-2-entry-link icon-energia" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M2.6" data-eventtitle="Eletricidade" data-eventlink="/energia"><span class="level-2-entry-link-title">Eletricidade</span></a>
</li>
</ul>
</section>
</li>
<li class="level-1-entry "><button class="level-1-entry-link " data-eventregion="MEO_MENU" data-eventclick="M_M3" data-eventtitle="MEO Care" data-eventlink="\meocare"><span class="level-1-entry-link-title">MEO
Care</span></button>
<section class="level-2">
<div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">MEO Care</span></div>
<ul class="level-2-entries">
<li class="level-2-entry no-submenu">
<a href="/care" class="level-2-entry-link icon-meo-care" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M3.1" data-eventtitle="Conhecer MEO Care" data-eventlink="/care"><span class="level-2-entry-link-title">Conhecer MEO Care</span></a>
</li>
<li class="level-2-entry no-submenu">
<a href="/care/saude" class="level-2-entry-link icon-meo-care-saude" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M3.2" data-eventtitle="Saúde" data-eventlink="/care/saude"><span class="level-2-entry-link-title">Saúde</span></a>
</li>
<li class="level-2-entry no-submenu">
<a href="/care/animais" class="level-2-entry-link icon-meo-care-animais" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M3.3" data-eventtitle="Animais" data-eventlink="/care/animais"><span class="level-2-entry-link-title">Animais</span></a>
</li>
<li class="level-2-entry no-submenu">
<a href="/care/casa" class="level-2-entry-link icon-meo-care-casa" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M3.4" data-eventtitle="Casa" data-eventlink="/care/casa"><span class="level-2-entry-link-title">Casa</span></a>
</li>
<li class="level-2-entry no-submenu">
<a href="/care/seniores" class="level-2-entry-link icon-meo-care-seniores" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M3.5" data-eventtitle="Seniores" data-eventlink="/care/seniores"><span class="level-2-entry-link-title">Seniores</span></a>
</li>
<li class="level-2-entry no-submenu">
<a href="/care/tecnologia" class="level-2-entry-link icon-meo-care-tecnologia" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M3.6" data-eventtitle="Tecnologia" data-eventlink="/care/tecnologia"><span class="level-2-entry-link-title">Tecnologia</span></a>
</li>
<li class="level-2-entry no-submenu">
<a href="/care#assistente-pessoal" class="level-2-entry-link icon-meo-care-assistente-pessoal" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M3.7" data-eventtitle="Assistente Pessoal" data-eventlink="/care#assistente-pessoal"><span class="level-2-entry-link-title">Assistente Pessoal</span></a>
</li>
</ul>
</section>
</li>
<li class="level-1-entry "><button class="level-1-entry-link " data-eventregion="MEO_MENU" data-eventclick="M_M4" data-eventtitle="Loja Online" data-eventlink="/loja"><span class="level-1-entry-link-title">Loja
Online</span></button>
<section class="level-2">
<div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">Loja Online</span></div>
<ul class="level-2-entries">
<li class="level-2-entry "><button class="level-2-entry-link icon-desconto-online" data-eventregion="MEO_MENU" data-eventclick="M_M4.1" data-eventtitle="Destaques e promoções"
data-eventlink="/loja/destaques-promocoes"><span class="level-2-entry-link-title">Destaques e promoções</span></button>
<section class="level-3">
<div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">Destaques e promoções</span></div>
<ul class="level-3-entries">
<li class="level-3-entry no-submenu">
<a href="/loja/destaques-promocoes" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M4.1.1" data-eventtitle="Promoções" data-eventlink="/loja/destaques-promocoes"><span class="level-3-entry-link-title">Promoções</span></a>
</li>
<li class="level-3-entry no-submenu">
<a href="/lpc/apple" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M4.1.2" data-eventtitle="Mundo Apple" data-eventlink="/lpc/apple"><span class="level-3-entry-link-title">Mundo Apple</span></a>
</li>
<li class="level-3-entry no-submenu">
<a href="/lpc/samsung" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M4.1.3" data-eventtitle="Universo Samsung Galaxy" data-eventlink="/lpc/samsung"><span class="level-3-entry-link-title">Universo Samsung Galaxy</span></a>
</li>
<li class="level-3-entry no-submenu">
<a href="/lpc/xiaomi" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M4.1.4" data-eventtitle="Mi Xiaomi" data-eventlink="/lpc/xiaomi"><span class="level-3-entry-link-title">Mi Xiaomi</span></a>
</li>
<li class="level-3-entry no-submenu">
<a href="/lpc/huawei" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M4.1.5" data-eventtitle="Huawei Series" data-eventlink="/lpc/huawei"><span class="level-3-entry-link-title">Huawei Series</span></a>
</li>
</ul>
</section>
</li>
<li class="level-2-entry "><button class="level-2-entry-link icon-telemoveis" data-eventregion="MEO_MENU" data-eventclick="M_M4.2" data-eventtitle="Telemóveis"
data-eventlink="https://loja.meo.pt/Equipamentos/Telemoveis#!filter=modalidadecompra_Todos"><span class="level-2-entry-link-title">Telemóveis</span></button>
<section class="level-3">
<div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">Telemóveis</span></div>
<ul class="level-3-entries">
<li class="level-3-entry no-submenu">
<a href="https://loja.meo.pt/Equipamentos/Telemoveis?menu=apple&utm_campaign=mundo-apple#!filter=marca_Apple%24modalidadecompra_Presta%C3%A7%C3%B5es" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M4.2.1" data-eventtitle="Apple" data-eventlink="https://loja.meo.pt/Equipamentos/Telemoveis?menu=apple&utm_campaign=mundo-apple#!filter=marca_Apple%24modalidadecompra_Presta%C3%A7%C3%B5es"><span class="level-3-entry-link-title">Apple</span></a>
</li>
<li class="level-3-entry no-submenu">
<a href="https://loja.meo.pt/Equipamentos/Telemoveis/#!filter=marca_OPPO%24modalidadecompra_Presta%C3%A7%C3%B5es" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M4.2.2" data-eventtitle="OPPO" data-eventlink="https://loja.meo.pt/Equipamentos/Telemoveis/#!filter=marca_OPPO%24modalidadecompra_Presta%C3%A7%C3%B5es"><span class="level-3-entry-link-title">OPPO</span></a>
</li>
<li class="level-3-entry no-submenu">
<a href="https://loja.meo.pt/Equipamentos/Telemoveis?menu=samsung&utm_campaign=universo-samsung#!filter=marca_Samsung$modalidadecompra_Prestações" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M4.2.3" data-eventtitle="Samsung" data-eventlink="https://loja.meo.pt/Equipamentos/Telemoveis?menu=samsung&utm_campaign=universo-samsung#!filter=marca_Samsung$modalidadecompra_Prestações"><span class="level-3-entry-link-title">Samsung</span></a>
</li>
<li class="level-3-entry no-submenu">
<a href="https://loja.meo.pt/Equipamentos/Telemoveis?menu=xiaomi#!filter=marca_Xiaomi%24modalidadecompra_Presta%C3%A7%C3%B5es" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M4.2.4" data-eventtitle="Xiaomi" data-eventlink="https://loja.meo.pt/Equipamentos/Telemoveis?menu=xiaomi#!filter=marca_Xiaomi%24modalidadecompra_Presta%C3%A7%C3%B5es"><span class="level-3-entry-link-title">Xiaomi</span></a>
</li>
<li class="level-3-entry no-submenu">
<a href="/lpc/recondicionados" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M4.2.5" data-eventtitle="Recondicionados iPhone" data-eventlink="/lpc/recondicionados"><span class="level-3-entry-link-title">Recondicionados iPhone</span></a>
</li>
<li class="level-3-entry no-submenu">
<a href="https://loja.meo.pt/Equipamentos/Telemoveis/#!filter=modalidadecompra_Presta%C3%A7%C3%B5es%24tecnologia_5G" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M4.2.6" data-eventtitle="Smartphones 5G" data-eventlink="https://loja.meo.pt/Equipamentos/Telemoveis/#!filter=modalidadecompra_Presta%C3%A7%C3%B5es%24tecnologia_5G"><span class="level-3-entry-link-title">Smartphones 5G</span></a>
</li>
<li class="level-3-entry no-submenu">
<a href="https://loja.meo.pt/Equipamentos/Telemoveis#!filter=modalidadecompra_Presta%C3%A7%C3%B5es" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M4.2.7" data-eventtitle="ver todos telemóveis" data-eventlink="https://loja.meo.pt/Equipamentos/Telemoveis#!filter=modalidadecompra_Presta%C3%A7%C3%B5es"><span class="level-3-entry-link-title">Ver todos</span></a>
</li>
<li class="level-3-entry "><button class="level-3-entry-link " data-eventregion="MEO_MENU" data-eventclick="M_M4.2.8" data-eventtitle="acessórios telemóveis"
data-eventlink="https://loja.meo.pt/Equipamentos/Acessorios#!filter=modalidadecompra_Todos"><span class="level-3-entry-link-title">Acessórios</span></button>
<section class="level-4">
<div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">Acessórios</span></div>
<ul class="level-4-entries">
<li class="level-4-entry no-submenu">
<a href="https://loja.meo.pt/Equipamentos/Acessorios/?menu=audio#!filter=tipodeacessorios_Audio%20e%20Música%24modalidadecompra_Todos" class="level-4-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M4.2.8.1" data-eventtitle="Audio e Música" data-eventlink="https://loja.meo.pt/Equipamentos/Acessorios/?menu=audio#!filter=tipodeacessorios_Audio%20e%20Música%24modalidadecompra_Todos"><span class="level-4-entry-link-title">Audio e Música</span></a>
</li>
<li class="level-4-entry no-submenu">
<a href="https://loja.meo.pt/Equipamentos/Acessorios/?menu=cabos#!filter=tipodeacessorios_Cabos%20e%20Carregadores%24modalidadecompra_Todos" class="level-4-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M4.2.8.2" data-eventtitle="Cabos e Carregadores" data-eventlink="https://loja.meo.pt/Equipamentos/Acessorios/?menu=cabos#!filter=tipodeacessorios_Cabos%20e%20Carregadores%24modalidadecompra_Todos"><span class="level-4-entry-link-title">Cabos e Carregadores</span></a>
</li>
<li class="level-4-entry no-submenu">
<a href="https://loja.meo.pt/Equipamentos/Acessorios/#!filter=tipodeacessorios_Capas%20e%20Pel%C3%ADculas%24modalidadecompra_Pronto%20pagamento" class="level-4-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M4.2.8.3" data-eventtitle="Capas e Películas" data-eventlink="https://loja.meo.pt/Equipamentos/Acessorios/#!filter=tipodeacessorios_Capas%20e%20Pel%C3%ADculas%24modalidadecompra_Pronto%20pagamento"><span class="level-4-entry-link-title">Capas e Películas</span></a>
</li>
</ul>
</section>
</li>
</ul>
</section>
</li>
<li class="level-2-entry "><button class="level-2-entry-link icon-prod-net" data-eventregion="MEO_MENU" data-eventclick="M_M4.3" data-eventtitle="Informática"
data-eventlink="https://loja.meo.pt/Equipamentos/pcs#!filter=modalidadecompra_Todos"><span class="level-2-entry-link-title">Informática</span></button>
<section class="level-3">
<div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">Informática</span></div>
<ul class="level-3-entries">
<li class="level-3-entry no-submenu">
<a href="https://loja.meo.pt/Equipamentos/pcs/#!filter=modalidadecompra_Todos$tipodeproduto_Impressoras_PC" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M4.3.1" data-eventtitle="PCs e Impressoras" data-eventlink="https://loja.meo.pt/Equipamentos/pcs/#!filter=modalidadecompra_Todos$tipodeproduto_Impressoras_PC"><span class="level-3-entry-link-title">PCs e Impressoras</span></a>
</li>
<li class="level-3-entry no-submenu">
<a href="https://loja.meo.pt/Equipamentos/pcs/?menu=acessorios#!filter=modalidadecompra_Todos%24tipodeproduto_Acess%C3%B3rios_Headsets_Mochilas%20para%20PC_Monitores_Ratos%20e%20tapetes_Teclados_Webcams" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M4.3.2" data-eventtitle="acessórios informática" data-eventlink="https://loja.meo.pt/Equipamentos/pcs/?menu=acessorios#!filter=modalidadecompra_Todos%24tipodeproduto_Acess%C3%B3rios_Headsets_Mochilas%20para%20PC_Monitores_Ratos%20e%20tapetes_Teclados_Webcams"><span class="level-3-entry-link-title">Acessórios</span></a>
</li>
</ul>
</section>
</li>
<li class="level-2-entry no-submenu">
<a href="https://loja.meo.pt/Equipamentos/tv#!filter=modalidadecompra_Todos" class="level-2-entry-link icon-tvs4k" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M4.4" data-eventtitle="Smart TVs e Box 4K" data-eventlink="https://loja.meo.pt/Equipamentos/tv#!filter=modalidadecompra_Todos"><span class="level-2-entry-link-title">Smart TVs e Box 4K</span></a>
</li>
<li class="level-2-entry no-submenu">
<a href="https://loja.meo.pt/Equipamentos/smartwatch#!filter=modalidadecompra_Todos" class="level-2-entry-link icon-smartwatch" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M4.5" data-eventtitle="Smartwatches" data-eventlink="https://loja.meo.pt/Equipamentos/smartwatch#!filter=modalidadecompra_Todos"><span class="level-2-entry-link-title">Smartwatches</span></a>
</li>
<li class="level-2-entry "><button class="level-2-entry-link icon-jogos" data-eventregion="MEO_MENU" data-eventclick="M_M4.6" data-eventtitle="Gaming"
data-eventlink="https://loja.meo.pt/Equipamentos/gaming#!filter=modalidadecompra_Todos"><span class="level-2-entry-link-title">Gaming</span></button>
<section class="level-3">
<div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">Gaming</span></div>
<ul class="level-3-entries">
<li class="level-3-entry no-submenu">
<a href="https://loja.meo.pt/Equipamentos/gaming/#!filter=modalidadecompra_Todos$tipodeproduto_Consolas de Jogos" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M4.6.1" data-eventtitle="Consolas" data-eventlink="https://loja.meo.pt/Equipamentos/gaming/#!filter=modalidadecompra_Todos$tipodeproduto_Consolas de Jogos"><span class="level-3-entry-link-title">Consolas</span></a>
</li>
<li class="level-3-entry no-submenu">
<a href="https://loja.meo.pt/Equipamentos/gaming/#!filter=modalidadecompra_Todos$tipodeproduto_Jogos Playstation" class="level-3-entry-link " target="_self" data-eventregion="MEO_Menu" data-eventclick="M_M4.6.2" data-eventtitle="jogos gaming" data-eventlink="https://loja.meo.pt/Equipamentos/gaming/#!filter=modalidadecompra_Todos$tipodeproduto_Jogos Playstation"><span class="level-3-entry-link-title">Jogos</span></a>
</li>
<li class="level-3-entry no-submenu">
<a href="https://loja.meo.pt/Equipamentos/gaming/#!filter=modalidadecompra_Todos%24tipodeproduto_Acess%C3%B3rios_Acess%C3%B3rios%20Playstation_Bundles%20gaming_Cadeiras%20gaming_Headsets_Ratos%20e%20tapetes_Secret%C3%A1rias%20Gaming_Tapetes%20para%20cadeiras_Teclados_Webcams" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M4.6.3" data-eventtitle="acessórios gaming" data-eventlink="https://loja.meo.pt/Equipamentos/gaming/#!filter=modalidadecompra_Todos%24tipodeproduto_Acess%C3%B3rios_Acess%C3%B3rios%20Playstation_Bundles%20gaming_Cadeiras%20gaming_Headsets_Ratos%20e%20tapetes_Secret%C3%A1rias%20Gaming_Tapetes%20para%20cadeiras_Teclados_Webcams"><span class="level-3-entry-link-title">Acessórios</span></a>
</li>
</ul>
</section>
</li>
<li class="level-2-entry "><button class="level-2-entry-link " data-eventregion="MEO_MENU" data-eventclick="M_M4.7" data-eventtitle="Mais produtos"
data-eventlink="https://loja.meo.pt/Equipamentos/Acessorios#!filter=modalidadecompra_Todos"><span class="level-2-entry-link-title">Mais produtos</span></button>
<section class="level-3">
<div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">Mais produtos</span></div>
<ul class="level-3-entries">
<li class="level-3-entry no-submenu">
<a href="https://loja.meo.pt/Equipamentos/Acessorios/#!filter=modalidadecompra_Todos" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M4.7.1" data-eventtitle="Acessorios" data-eventlink="https://loja.meo.pt/Equipamentos/Acessorios/#!filter=modalidadecompra_Todos"><span class="level-3-entry-link-title">Acessórios</span></a>
</li>
<li class="level-3-entry no-submenu">
<a href="https://loja.meo.pt/Equipamentos/Tablets/#!filter=modalidadecompra_Todos" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M4.7.2" data-eventtitle="Tablets" data-eventlink="https://loja.meo.pt/Equipamentos/Tablets/#!filter=modalidadecompra_Todos"><span class="level-3-entry-link-title">Tablets</span></a>
</li>
<li class="level-3-entry no-submenu">
<a href="https://loja.meo.pt/Equipamentos/eletrodomesticos/#!filter=modalidadecompra_Todos" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M4.7.3" data-eventtitle="Eletrodomesticos" data-eventlink="https://loja.meo.pt/Equipamentos/eletrodomesticos/#!filter=modalidadecompra_Todos"><span class="level-3-entry-link-title">Eletrodomésticos</span></a>
</li>
<li class="level-3-entry no-submenu">
<a href="https://loja.meo.pt/Equipamentos/smart-living/#!filter=modalidadecompra_Todos" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M4.7.4" data-eventtitle="Smart Living" data-eventlink="https://loja.meo.pt/Equipamentos/smart-living/#!filter=modalidadecompra_Todos"><span class="level-3-entry-link-title">Smart Living</span></a>
</li>
<li class="level-3-entry no-submenu">
<a href="https://loja.meo.pt/Equipamentos/routers-e-wifi/" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M4.7.5" data-eventtitle="Routers e WiFi" data-eventlink="https://loja.meo.pt/Equipamentos/routers-e-wifi/"><span class="level-3-entry-link-title">Routers e WiFi</span></a>
</li>
<li class="level-3-entry no-submenu">
<a href="/meo-blueticket" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M4.7.6" data-eventtitle="Bilhetes" data-eventlink="/meo-blueticket"><span class="level-3-entry-link-title">Bilhetes</span></a>
</li>
<li class="level-3-entry no-submenu">
<a href="https://loja.meo.pt/Equipamentos/oportunidades/" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M4.7.7" data-eventtitle="Oportunidades" data-eventlink="https://loja.meo.pt/Equipamentos/oportunidades/"><span class="level-3-entry-link-title">Oportunidades</span></a>
</li>
</ul>
</section>
</li>
</ul>
</section>
</li>
<li class="level-1-entry "><button class="level-1-entry-link " data-eventregion="MEO_MENU" data-eventclick="M_M5" data-eventtitle="TV e Entretenimento" data-eventlink="/tv"><span
class="level-1-entry-link-title">TV</span></button>
<section class="level-2">
<div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">TV</span></div>
<ul class="level-2-entries">
<li class="level-2-entry no-submenu">
<a href="https://meogo.meo.pt/" class="level-2-entry-link icon-go" target="_blank" data-eventregion="MEO_MENU" data-eventclick="M_M5.1" data-eventtitle="Ver TV agora" data-eventlink="https://meogo.meo.pt/"><span class="level-2-entry-link-title">Ver TV agora</span></a>
</li>
<li class="level-2-entry "><button class="level-2-entry-link icon-tv-canais" data-eventregion="MEO_MENU" data-eventclick="M_M5.2" data-eventtitle="Novidades" data-eventlink="/tv/novidades-canais"><span
class="level-2-entry-link-title">Novidades</span></button>
<section class="level-3">
<div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">Novidades</span></div>
<ul class="level-3-entries">
<li class="level-3-entry no-submenu">
<a href="/tv/novidades/destaque" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M5.2.1" data-eventtitle="Em destaque" data-eventlink="/tv/novidades/destaque"><span class="level-3-entry-link-title">Em destaque</span></a>
</li>
<li class="level-3-entry no-submenu">
<a href="/tv/novidades/melhor-experiencia-tv" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M5.2.2" data-eventtitle="Melhor experiência TV" data-eventlink="/tv/novidades/melhor-experiencia-tv"><span class="level-3-entry-link-title">Melhor experiência TV</span></a>
</li>
</ul>
</section>
</li>
<li class="level-2-entry "><button class="level-2-entry-link icon-lista" data-eventregion="MEO_MENU" data-eventclick="M_M5.3" data-eventtitle="Canais e Programação" data-eventlink="/tv/canais-programacao"><span
class="level-2-entry-link-title">Canais e Programação</span></button>
<section class="level-3">
<div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">Canais e Programação</span></div>
<ul class="level-3-entries">
<li class="level-3-entry no-submenu">
<a href="/tv/canais-programacao/lista-canais/fibra" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M5.3.1" data-eventtitle="Lista de canais" data-eventlink="/tv/canais-programacao/lista-canais/fibra"><span class="level-3-entry-link-title">Lista de canais</span></a>
</li>
<li class="level-3-entry no-submenu">
<a href="/tv/canais-programacao/guia-tv" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M5.3.2" data-eventtitle="Guia TV" data-eventlink="/tv/canais-programacao/guia-tv"><span class="level-3-entry-link-title">Guia TV</span></a>
</li>
</ul>
</section>
</li>
<li class="level-2-entry "><button class="level-2-entry-link icon-tv-tematicas" data-eventregion="MEO_MENU" data-eventclick="M_M5.4" data-eventtitle="Temáticas" data-eventlink="/tv/tematicas"><span
class="level-2-entry-link-title">Temáticas</span></button>
<section class="level-3">
<div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">Temáticas</span></div>
<ul class="level-3-entries">
<li class="level-3-entry no-submenu">
<a href="/tv/tematicas/filmes-series" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M5.4.1" data-eventtitle="Filmes e Séries" data-eventlink="/tv/tematicas/filmes-series"><span class="level-3-entry-link-title">Filmes e Séries</span></a>
</li>
<li class="level-3-entry no-submenu">
<a href="/tv/tematicas/desporto" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M5.4.2" data-eventtitle="Desporto" data-eventlink="/tv/tematicas/desporto"><span class="level-3-entry-link-title">Desporto</span></a>
</li>
<li class="level-3-entry no-submenu">
<a href="/tv/tematicas/infantil" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M5.4.3" data-eventtitle="Infantil" data-eventlink="/tv/tematicas/infantil"><span class="level-3-entry-link-title">Infantil</span></a>
</li>
<li class="level-3-entry no-submenu">
<a href="/tv/tematicas/entretenimento" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M5.4.4" data-eventtitle="Entretenimento" data-eventlink="/tv/tematicas/entretenimento"><span class="level-3-entry-link-title">Entretenimento</span></a>
</li>
<li class="level-3-entry no-submenu">
<a href="/tv/tematicas/musica" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M5.4.5" data-eventtitle="Música" data-eventlink="/tv/tematicas/musica"><span class="level-3-entry-link-title">Música</span></a>
</li>
<li class="level-3-entry no-submenu">
<a href="/tv/tematicas/internacional" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M5.4.6" data-eventtitle="Internacional" data-eventlink="/tv/tematicas/internacional"><span class="level-3-entry-link-title">Internacional</span></a>
</li>
<li class="level-3-entry no-submenu">
<a href="/tv/tematicas/informacao" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M5.4.7" data-eventtitle="Informação" data-eventlink="/tv/tematicas/informacao"><span class="level-3-entry-link-title">Informação</span></a>
</li>
</ul>
</section>
</li>
<li class="level-2-entry "><button class="level-2-entry-link icon-tvs" data-eventregion="MEO_MENU" data-eventclick="M_M5.5" data-eventtitle="TV Multiplataforma" data-eventlink="/tv/multiplataforma"><span
class="level-2-entry-link-title">TV Multiplataforma</span></button>
<section class="level-3">
<div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">TV Multiplataforma</span></div>
<ul class="level-3-entries">
<li class="level-3-entry no-submenu">
<a href="/tv/multiplataforma/meo-android-tv" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M5.5.1" data-eventtitle="Android TV" data-eventlink="/tv/multiplataforma/meo-android-tv"><span class="level-3-entry-link-title">Android TV</span></a>
</li>
<li class="level-3-entry no-submenu">
<a href="/tv/multiplataforma/meo-apple-tv" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M5.5.2" data-eventtitle="Apple TV" data-eventlink="/tv/multiplataforma/meo-apple-tv"><span class="level-3-entry-link-title">Apple TV</span></a>
</li>
<li class="level-3-entry no-submenu">
<a href="/tv/multiplataforma/meo-go" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M5.5.3" data-eventtitle="MEO Go" data-eventlink="/tv/multiplataforma/meo-go"><span class="level-3-entry-link-title">MEO Go</span></a>
</li>
</ul>
</section>
</li>
<li class="level-2-entry no-submenu">
<a href="https://mag.sapo.pt/tv" class="level-2-entry-link icon-sapo" target="_blank" data-eventregion="MEO_MENU" data-eventclick="M_M5.6" data-eventtitle="Sapo Mag" data-eventlink="https://mag.sapo.pt/tv"><span class="level-2-entry-link-title">Sapo Mag</span></a>
</li>
</ul>
</section>
</li>
<li class="level-1-entry "><button class="level-1-entry-link " data-eventregion="MEO_MENU" data-eventclick="M_M6" data-eventtitle="Suporte" data-eventlink="/ajuda-e-suporte"><span
class="level-1-entry-link-title">Suporte</span></button>
<section class="level-2">
<div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">Suporte</span></div>
<ul class="level-2-entries">
<li class="level-2-entry no-submenu">
<a href="/cliente" class="level-2-entry-link icon-user" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M6.1" data-eventtitle="my MEO" data-eventlink="/cliente"><span class="level-2-entry-link-title">my MEO</span></a>
</li>
<li class="level-2-entry "><button class="level-2-entry-link icon-suporte" data-eventregion="MEO_MENU" data-eventclick="M_M6.2" data-eventtitle="Ajuda" data-eventlink="/ajuda-e-suporte"><span
class="level-2-entry-link-title">Ajuda</span></button>
<section class="level-3">
<div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">Ajuda</span></div>
<ul class="level-3-entries">
<li class="level-3-entry no-submenu">
<a href="/ajuda-e-suporte#div-apoio-tecnico-e-configuracoes" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M6.2.1" data-eventtitle="Apoio Técnico" data-eventlink="/ajuda-e-suporte#div-apoio-tecnico-e-configuracoes"><span class="level-3-entry-link-title">Apoio técnico</span></a>
</li>
<li class="level-3-entry no-submenu">
<a href="/ajuda-e-suporte#div-faturas-pagamentos-e-carregamentos" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M6.2.2" data-eventtitle="Faturas e pagamentos" data-eventlink="/ajuda-e-suporte#div-faturas-pagamentos-e-carregamentos"><span class="level-3-entry-link-title">Faturas e Pagamentos</span></a>
</li>
<li class="level-3-entry no-submenu">
<a href="/ajuda-e-suporte#div-produtos-meo" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M6.2.3" data-eventtitle="Produtos MEO" data-eventlink="/ajuda-e-suporte#div-produtos-meo"><span class="level-3-entry-link-title">Produtos MEO</span></a>
</li>
<li class="level-3-entry no-submenu">
<a href="/ajuda-e-suporte#div-outros-servicos" class="level-3-entry-link " target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M6.2.4" data-eventtitle="Outros serviços" data-eventlink="/ajuda-e-suporte#div-outros-servicos"><span class="level-3-entry-link-title">Outros serviços</span></a>
</li>
</ul>
</section>
</li>
<li class="level-2-entry no-submenu">
<a href="https://forum.meo.pt" class="level-2-entry-link icon-meo-forum" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M6.3" data-eventtitle="MEO Fórum" data-eventlink="https://forum.meo.pt"><span class="level-2-entry-link-title">MEO Fórum</span></a>
</li>
</ul>
</section>
</li>
</ul>
</section>
</section>
</section>
<section class="nav-bar-three"><i class="icon-search" aria-hidden="true"></i><input placeholder="Pesquisar no MEO" type="search" value=""></section>
</section>
<section class="context-menu" id="menuToolbar">
<div class="context-menu-custom" id="context-menu-custom"></div>
<div class="context-menu-login" id="liUserMenu"><span class="icon off" id="hrefUser" data-eventregion="MEO_MENU" data-eventclick="M_M10" data-eventtitle="my MEO" data-eventlink="my MEO"><i class="icon-user"></i><span
class="menu-title">my MEO</span></span><span class="content off" style="height: 0px;"><span class="wrp">
<div>
<section class="user-box">
<p class="txt-semibold">my MEO</p><span>
<ul class="hyperlinks">
<li>
<a id="hrefEntrar" href="https://cliente.meo.pt/pag/Homepage" class="icon-id-meo btn-icon-left btn-tiny btn-secondary btn-color-3" data-eventregion="MEO_MENU" data-eventclick="M_M10.1" data-eventtitle="Entrar" data-eventlink="https://cliente.meo.pt/pag/Homepage">Entrar</a>
</li>
<li>
<a id="hrefRegistar" href="https://login.telecom.pt/Public/Register.aspx?appKey=Xa6qa5wG2b" class="btn-tiny btn-primary btn-color-3" data-eventregion="MEO_MENU" data-eventclick="M_M10.2" data-eventtitle="Registe-se" data-eventlink="https://login.telecom.pt/Public/Register.aspx?appKey=Xa6qa5wG2b">Registe-se</a>
</li>
</ul>
<div class="desambiguation">
<p>É cliente MEO
Empresas?<br><strong><a id="hrefDesambig" href="https://www.meo.pt/empresas/cliente" data-eventregion="MEO_MENU" data-eventclick="M_M10.5" data-eventtitle="Entrar" data-eventlink="https://www.meo.pt/empresas/cliente">Entrar</a></strong>
</p>
</div>
</span>
</section>
<section class="campaign">
<div class="image"><img src="https://www.meo.pt/PublishingImages/push-login/push_my_MEO.jpg" width="360px" height="120px" loading="lazy"></div><span class="campaign-text"><strong>A tua área de cliente onde e quando
quiseres</strong></span>
</section>
<ul class="login-hyperlinks">
<li class="">
<a class="icon-produtos" href="https://cliente.meo.pt/meus-produtos" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M10.3.1" data-eventtitle="Os meus produtos" data-eventlink="https://cliente.meo.pt/meus-produtos"><span class="hyperlinks-txt">Os meus produtos</span></a>
</li>
<li class="">
<a class="icon-cons-e-faturas" href="https://cliente.meo.pt/escolher/faturas" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M10.3.2" data-eventtitle="As minhas faturas" data-eventlink="https://cliente.meo.pt/escolher/faturas"><span class="hyperlinks-txt">As minhas faturas</span></a>
</li>
<li class="">
<a class="icon-entrega-loja" href="https://loja.meo.pt/encomendas" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M10.3.3" data-eventtitle="Consultar encomendas" data-eventlink="https://loja.meo.pt/encomendas"><span class="hyperlinks-txt">Consultar encomendas</span></a>
</li>
<li class="">
<a class="icon-meos" href="https://cliente.meo.pt/escolher/pontos" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M10.3.4" data-eventtitle="Os meus MEOS" data-eventlink="https://cliente.meo.pt/escolher/pontos"><span class="hyperlinks-txt">Os meus MEOS</span></a>
</li>
<li class="">
<a class="icon-saldo" href="https://cliente.meo.pt/ofertas" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M10.3.5" data-eventtitle="Ofertas" data-eventlink="https://cliente.meo.pt/ofertas"><span class="hyperlinks-txt">Ofertas</span></a>
</li>
<li class="">
<a class="icon-msg-envelope" href="https://cliente.meo.pt/perfil/mensagens" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M10.3.6" data-eventtitle="Pedidos e mensagens" data-eventlink="https://cliente.meo.pt/perfil/mensagens"><span class="hyperlinks-txt">Pedidos e mensagens</span></a>
</li>
</ul>
</div>
</span></span>
<div class="context-menu-overlay"></div>
</div>
<div class="context-menu-meos" id="meos-main-menu"><span class="icon off" data-notifications="" data-eventregion="MEO_MENU" data-eventclick="M_M11" data-eventtitle="MEOS" data-eventlink="MEOS"><i class="icon-m-meo"></i><span
class="menu-title">MEOS</span></span><span class="content off" style="height: 0px;"><span class="wrp">
<div><i class="icon-m-meo"></i>
<div>
<p class="tiny sub-title">MEOS</p>
<p class="note"><a href="https://mymeo.page.link/meos">Saber mais</a></p>
</div>
</div>
<ul class="meos-hyperlinks">
<li class="">
<a class="icon-chain-link" href="https://mymeo.page.link/AMEOS" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M11.1" data-eventtitle="Aderir ao programa MEOS" data-eventlink="https://mymeo.page.link/AMEOS"><span class="hyperlinks-txt">Aderir aos MEOS</span></a>
</li>
<li class="">
<a class="icon-desconto-online" href="/programa-meos" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M11.2" data-eventtitle="Em destaque" data-eventlink="/programa-meos"><span class="hyperlinks-txt">Em destaque</span></a>
</li>
<li class="">
<a class="icon-telemoveis" href="https://loja.meo.pt/Equipamentos/Telemoveis/?#!filter=modalidadecompra_MEOS" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M11.3" data-eventtitle="Telemoveis MEOS" data-eventlink="https://loja.meo.pt/Equipamentos/Telemoveis/?#!filter=modalidadecompra_MEOS"><span class="hyperlinks-txt">Telemóveis</span></a>
</li>
<li class="">
<a class="icon-experiencias" href="https://experiencias-meos.meo.pt/" target="_blank" data-eventregion="MEO_MENU" data-eventclick="M_M11.4" data-eventtitle="Experiencas" data-eventlink="https://experiencias-meos.meo.pt/"><span class="hyperlinks-txt">Experiências</span></a>
</li>
<li class="">
<a class="icon-espetaculos" href="https://loja.meo.pt/Equipamentos/sensacoes" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M11.5" data-eventtitle="Sensacoes" data-eventlink="https://loja.meo.pt/Equipamentos/sensacoes"><span class="hyperlinks-txt">Sensações</span></a>
</li>
<li class="">
<a class="icon-donativos" href="https://loja.meo.pt/Equipamentos/intervencao-social" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M11.6" data-eventtitle="Intervencao Social" data-eventlink="https://loja.meo.pt/Equipamentos/intervencao-social"><span class="hyperlinks-txt">Intervenção Social</span></a>
</li>
<li class="">
<a class="icon-tvs4k" href="https://loja.meo.pt/Equipamentos/tv#!filter=modalidadecompra_MEOS" target="_self" data-eventregion="MEO_MENU" data-eventclick="M_M11.7" data-eventtitle="Smart TVs e BOX 4K" data-eventlink="https://loja.meo.pt/Equipamentos/tv#!filter=modalidadecompra_MEOS"><span class="hyperlinks-txt">Smart TVs e BOX 4K</span></a>
</li>
<li class="">
<a class="icon-pdf" href="https://catalogomeos.meo.pt/" target="_blank" data-eventregion="MEO_MENU" data-eventclick="M_M11.8" data-eventtitle="Edição MEOS" data-eventlink="https://catalogomeos.meo.pt/"><span class="hyperlinks-txt">Edição MEOS</span></a>
</li>
</ul>
</span></span>
<div class="context-menu-overlay"></div>
</div>
<div class="context-menu-cart cart-button" id="ctl00_userMenu_shopBasket"><span class="icon" data-eventregion="MEO_MENU" data-eventclick="M_M12" data-eventtitle="Carrinho de compras"
data-eventlink="Carrinho de compras"><i id="cartCount" class="icon-cart"></i><span class="menu-title">Carrinho</span>
<div id="miniCartApp" class="cart-box"></div>
</span></div>
<div class="context-menu-click2call" id="liClick2Call"></div>
</section>
<section class="toggle-nav-bar" id="toggle-nav-bar"></section>
</nav>
</mainmenu>
<script type="text/javascript">
CreateFullHeader(false, false, '', '', '', '', '', '', '', false, false, '');
</script>
</header>
<!-- id="mso_contentdiv" required, helps SharePoint put the web part editing pane in the main body on the right, you can move the ID if needed -->
<div id="ctl00_MSO_ContentDiv" class="conteudo">
<div id="innerThirdlevelnavigation" class="sub-header context-bar" style="display: none;"></div>
<a id="anchor"></a>
<!-- ===== STARTER: Main Placeholder gets replaced with content of the page ======================================= -->
<h1 style="display:none !important;"> Ajuda e Suporte – Fatura Interativa | MEO </h1>
<div class="ms-webpart-zone ms-fullWidth">
<div id="MSOZoneCell_WebPartctl00_SPWebPartManager1_g_d079c845_ccf4_4f5c_b675_9329fbef6a95" class="s4-wpcell-plain ms-webpartzone-cell ms-webpart-cell-vertical ms-fullWidth ">
<div class="ms-webpart-chrome ms-webpart-chrome-vertical ms-webpart-chrome-fullWidth ">
<div webpartid="d079c845-ccf4-4f5c-b675-9329fbef6a95" haspers="false" id="WebPartctl00_SPWebPartManager1_g_d079c845_ccf4_4f5c_b675_9329fbef6a95" width="100%" class="ms-WPBody " allowdelete="false" allowexport="false" style="">
<div id="ctl00_SPWebPartManager1_g_d079c845_ccf4_4f5c_b675_9329fbef6a95">
<div class="ms-rte-embedcode ms-rte-embedwp"><!-- INICIO DO BLOCO DE HTML LIVRE -->
<!-- INICIO DO BLOCO DE HTML LIVRE -->
<!-- INICIO DO BLOCO DE HTML LIVRE -->
<section class="preload hidden">
<img class="hidden" src="https://www.meo.pt/PublishingImages/paginas/_fatura_interativa/1Fatura_Fixo_Page_1.png">
<img class="hidden" src="https://www.meo.pt/PublishingImages/paginas/_fatura_interativa/1Fatura_Fixo_Page_2.png">
<img class="hidden" src="https://www.meo.pt/PublishingImages/paginas/_fatura_interativa/1Fatura_Fixo_Page_3.png">
<img class="hidden" src="https://conteudos.meo.pt/Style%20Library/consumo/images/faturainterativa/1FaturaTelemovel_p1.jpg">
<img class="hidden" src="https://conteudos.meo.pt/Style%20Library/consumo/images/faturainterativa/1FaturaTelemovel_p2.jpg">
<img class="hidden" src="https://conteudos.meo.pt/Style%20Library/consumo/images/faturainterativa/2FaturaTelemovel_p1.jpg">
<img class="hidden" src="https://conteudos.meo.pt/Style%20Library/consumo/images/faturainterativa/2FaturaTelemovel_p2.jpg">
<img class="hidden" src="https://www.meo.pt/PublishingImages/paginas/_fatura_interativa/Fatura_corrente_Fixo_Page_1.png">
<img class="hidden" src="https://www.meo.pt/PublishingImages/paginas/_fatura_interativa/Fatura_corrente_Fixo_Page_2.png">
<img class="hidden" src="https://www.meo.pt/PublishingImages/paginas/_fatura_interativa/Fatura_corrente_Fixo_Page_3.png">
</section>
<style>
#Loadify {
display: none;
height: 300px;
vertical-align: middle;
line-height: 300px;
margin-bottom: 50px;
text-align: center;
}
#Loadify img {
display: inline-block;
vertical-align: middle;
}
.is-loading #Loadify {
display: block;
}
.is-loading #Tabify,
.is-loading #Contentify {
display: none !important;
}
.bloco-fatura-interativa {
/*background:#FFF;*/
width: 100%;
text-align: left;
padding: 0;
}
.bloco-fatura-interativa h2 {
text-transform: none;
padding-left: 20px;
padding-right: 20px;
padding-top: 10px;
margin-bottom: 0;
}
.bloco-fatura-interativa h3 {
margin-top: 0;
font-size: 24px;
padding-bottom: 0px;
}
.bloco-fatura-interativa .box-title {
margin: 20px auto 30px;
display: inline-block;
text-align: left;
width: 100%;
max-width: 100%;
padding-left: 265px;
}
.bloco-fatura-interativa .box-title p {
font-size: 10px;
color: #000;
}
/*.bloco-fatura-interativa .fd-nav-tabs{margin-top:40px;}*/
.bloco-fatura-interativa ul,
.bloco-fatura-interativa li {
list-style: none;
margin: 0;
padding: 0;
}
.top-intro {
padding-bottom: 40px;
padding-left: 20px;
padding-right: 20px;
text-align: center;
}
.bl-tabs .tab-content {
background: transparent;
border-color: transparent;
}
.bl-tabs .tab-content .tab-pane {
display: inline-block;
width: auto;
float: none;
display: inline-table;
max-width: 1170px;
max-width: none;
width: 100%;
padding: 0;
padding-left: 265px;
}
/*.bloco-fatura-interativa.bl-tabs ul.nav-tabs{width:100%;background:#333333;overflow: hidden;background-clip: content-box;padding-top: 6px;}
.bloco-fatura-interativa.bl-tabs ul.nav-tabs li:first-of-type{margin-left: 15px;}
.bloco-fatura-interativa.bl-tabs ul.nav-tabs li:last-of-type{margin-right:15px;}
.bloco-fatura-interativa.bl-tabs ul.nav-tabs li:not(.active){background: transparent !important;}
.bloco-fatura-interativa.bl-tabs ul.nav-tabs li{font-size: 14px;color: #000000;vertical-align: middle;display: inline-block;margin-bottom: -12px;transform: translateY(-6px);}
.bloco-fatura-interativa.bl-tabs ul.nav-tabs li a{font-family: 'Montserrat',Arial, Helvetica, sans-serif;font-size:14px;font-weight: 300;padding:30px;text-decoration:none;background:none;color:#FFF;border:0;white-space: nowrap;position: relative;min-height:104px;display: flex;align-items: center;flex-direction: column;justify-content: center;transition:none;margin:0;}
.bloco-fatura-interativa.bl-tabs ul.nav-tabs li a:hover{color: #0099ab;text-decoration:none;}
.bloco-fatura-interativa.bl-tabs ul.nav-tabs li:not(.active) a:after{content: '';background: #000000;position: absolute;opacity: 0;top: 6px;height: 100%;left: 0;width: 100%;z-index: -1;}
.bloco-fatura-interativa.bl-tabs ul.nav-tabs li:not(.active) a:hover:after{opacity:1;}
.bloco-fatura-interativa.bl-tabs ul.nav-tabs li:hover a:before,
.bloco-fatura-interativa.bl-tabs ul.nav-tabs li:hover + li a:before,
.bloco-fatura-interativa.bl-tabs ul.nav-tabs li.active a:before,
.bloco-fatura-interativa.bl-tabs ul.nav-tabs li.active + li a:before{background:none;}
.bloco-fatura-interativa.bl-tabs ul.nav-tabs li.active{background:#FFF;}
.bloco-fatura-interativa.bl-tabs ul.nav-tabs li.active a{border:0;padding:30px;margin:0;font-weight:600;color:#000;cursor:pointer;}
.bloco-fatura-interativa.bl-tabs ul.nav-tabs li + li a:before{content: '';width: 1px;position: absolute;left: 0;top: 30px;height: calc(100% - 60px);background: #808080;}*/
.left-side {
/*display:inline-block;vertical-align:top;*/
padding: 70px 20px 20px 0;
position: absolute;
left: 0;
top: auto;
}
.left-side .col-nav-left {
padding: 20px;
padding-top: 0;
float: right;
}
.col-nav-left .sec-help {
border-bottom: 1px solid #ccc;
}
.col-nav-left {
/*background:#fff;*/
width: 245px;
text-align: left;
}
.col-nav-left h3 {
font-size: 12px;
line-height: 20px;
font-weight: 600;
color: #000000;
text-transform: uppercase;
}
.col-nav-left p {
font-size: 12px;
line-height: 15px;
color: #000000;
}
.col-nav-left .sec-nav {
padding: 20px 0;
border-bottom: 1px solid #ccc;
}
.col-nav-left h4 {
font-size: 12px;
line-height: 20px;
font-weight: 600;
text-transform: uppercase;
margin-bottom: 0;
}
.col-nav-left h5 {
font-size: 12px;
line-height: 15px;
font-weight: 600;
margin-top: 18px;
cursor: pointer;
}
.col-nav-left h5.active,
.col-nav-left h5:hover {
color: #0099ab;
}
.col-nav-left .sec-nav li,
.col-nav-left .sec-help li {
font-size: 12px;
color: #000;
margin-bottom: 5px;
}
.col-nav-left .sec-nav .listaItems li:hover {
cursor: pointer;
color: #666;
text-decoration: underline;
}
.col-nav-left .sec-nav .listaItems li.active {
color: #0099ab;
}
.col-nav-left .sec-help {
padding-bottom: 20px;
}
.col-nav-left .sec-help .btn {
margin-top: 25px;
}
.sec-help.links {
border: none;
position: relative;
padding-bottom: 0;
}
.sec-help.links h3 {
margin-bottom: 20px;
position: relative;
width: 100%;
display: block;
}
.sec-help.links.active h3 {
margin-bottom: 0;
}
.sec-help.links.active h3:after {
transform: rotateX(180deg);
transition: 0.15s all ease;
top: 10px;
}
.sec-help.links h3:after,
.faturas-in-tabs h4:after {
margin-top: 0;
/*content:url(https://www.meo.pt/PublishingImages/paginas/_fatura_interativa/ico_seta_open.svg);*/
width: 20px;
height: 12px;
position: absolute;
right: 0;
top: 0;
transition: 0.15s all ease;
content: "\e03f";
font-family: "icons-meo" !important;
font-style: normal !important;
font-weight: normal !important;
font-variant: normal !important;
text-transform: none !important;
speak: none;
line-height: 1;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
font-size: 2em;
}
.faturas-in-tabs h4.active:after {
transition: 0.15s all ease;
transform: rotateX(180deg);
transition: 0.15s all ease;
top: 10px;
}
.faturas-in-tabs h4.active+ul#listaPaginas {
display: none;
}
.faturas-in-tabs h4 {
position: relative;
}
.sec-help.links h3:hover,
.faturas-in-tabs h4:hover {
cursor: pointer;
color: #0099ab;
}
.sec-help.links ul {
transition: 0.15s all ease;
}
.sec-help.links li a {
line-height: 15px;
display: block;
margin-bottom: 11px;
text-decoration: none;
}
.sec-help.links.active ul {
display: none;
}
.desktop.sec-help.links {
display: block;
}
.mobile.sec-help.links {
display: none;
}
#right-side {
/*width: calc(100% - 289px);display:inline-block;*/
display: block;
/*padding:0 20px 30px;*/
}
.bloco-fatura-interativa .menu-fatura {}
.bloco-fatura-interativa .menu-fatura .sec-nav {
padding: 10px 0;
}
.bloco-fatura-interativa .menu-fatura .sec-help {
padding: 20px 0 5px;
}
#col-cont-right {
position: relative;
}
#col-cont-right .area-conteudo {
background: #fff;
position: relative;
padding: 0 50px;
}
div#video-link-box:empty {
border: none;
}
#col-cont-right .nav-pag {
text-align: right;
height: 70px;
padding-top: 15px;
list-style: none;
max-width: 991px;
margin: 0 auto;
}
#col-cont-right .nav-pag li {
background: url(https://www.meo.pt/PublishingImages/paginas/_fatura_interativa/pdf_ico_grey_new.svg) no-repeat 0 0;
width: 38px;
height: 40px;
line-height: 40px;
display: inline-block;
padding: 0px;
font-size: 12px;
font-weight: bold;
margin: 0;
cursor: pointer;
color: #6e6e6e;
/*opacity:0.5;*/
text-align: left;
padding-left: 13px;
}
#col-cont-right .nav-pag li:hover {
color: #0099ab;
background: url(https://www.meo.pt/PublishingImages/paginas/_fatura_interativa/pdf_ico_new_hover.svg) no-repeat 0 0;
}
#col-cont-right .nav-pag li.active {
background: url(https://www.meo.pt/PublishingImages/paginas/_fatura_interativa/pdf_ico_new.svg) no-repeat 0 0;
color: #000;
}
#col-cont-right .nav-pag li.active {
opacity: 1;
}
#col-cont-right .nav-pag li:hover {}
.area-conteudo .area-img {
width: 100%;
/*max-width:1220px;*/
max-width: 880px;
margin: 0 auto;
}
.area-conteudo .area-img img {
width: 100%;
height: auto;
position: relative;
}
.area-conteudo .area-img {
background: #222222;
position: relative;
}
/*#area-bolas-rects.bolasOn + #img-fatura{opacity:.7}*/
.area-conteudo.add-modal .modal-fatura {
content: " ";
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: #000;
opacity: 0.7;
}
.area-conteudo.add-modal .right-bt,
.area-conteudo.add-modal .left-bt {
opacity: 0.1;
pointer-events: none;
}
.area-conteudo .area-img img {
opacity: 1;
min-width: 320px;
min-height: 500px;
}
#info-balloon {
padding: 20px;
font-size: 16px;
position: absolute;
max-width: 65%;
width: 500px;
height: auto;
background: #fff;
z-index: 55;
/*padding-bottom: 20px;*/
margin-bottom: 22px;
text-align: left;
}
#info-balloon:after {
content: "";
width: 0;
height: 0;
border-left: 10px solid transparent;
border-right: 10px solid transparent;
border-top: 18px solid #fff;
bottom: -18px;
position: absolute;
}
#info-balloon a.close {}
#info-balloon .titulo {
font-size: 16px;
font-weight: 600;
margin-top: 0;
}
#info-balloon .descricao {
font-size: 12px;
color: #000;
line-height: 17px;
}
#info-balloon ul {
border-top: 1px solid transparent;
padding-top: 0px;
}
#info-balloon ul li a {
font-size: 13px;
line-height: 18px;
line-height: 15px;
display: inline-block;
text-decoration: underline;
}
#info-balloon ul li a:hover {
color: #0099ab;
text-decoration: none;
}
#info-balloon {
/*bottom:calc(100% - 27%);left: calc(100% - 9%/2 - 88%/2 - 150px);*/
}
#info-balloon.bottom_left:after {
top: 0;
margin-top: -18px;
left: 50%;
transform: rotate(180deg);
}
#info-balloon.bottom_center:after {
top: 0;
margin-top: -18px;
left: 50%;
transform: rotate(180deg);
margin-left: -5px;
}
#info-balloon.bottom_right:after {
margin-top: -18px;
top: 0;
right: 10px;
transform: rotate(180deg);
}
#info-balloon.top_center:after {
left: 50%;
margin-left: -4px;
}
#info-balloon.top_right:after {
right: 10px;
}
#info-balloon.middle_left:after {
right: 0;
top: 50%;
margin-right: -18px;
transform: rotate(-90deg);
}
#info-balloon.middle_right:after {
left: 0;
margin-left: -18px;
top: 50%;
transform: rotate(90deg);
}
.closeballoon {
position: absolute;
right: 0px;
/* top: -26px; */
top: -29px;
cursor: pointer;
/* padding: 3px 8px 0px; */
color: #fff;
/* font-size: 9px; */
font-size: 18px;
line-height: 22px;
text-align: center;
width: 24px;
height: 24px;
transition: all 0.3s ease-out;
border-radius: 50%;
}
.closeballoon:hover {
background-color: #0099ab;
color: #fff;
/*border-radius: 5px;*/
}
.closeballoon:before {
z-index: 62;
content: "\78";
font-family: "icons-meo" !important;
font-style: normal !important;
font-weight: normal !important;
font-variant: normal !important;
text-transform: none !important;
speak: none;
line-height: 1;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
vertical-align: middle;
margin-left: 1px;
}
#area-bolas-rects {
position: absolute;
height: 100%;
width: 100%;
bottom: 0;
top: 0;
left: 0;
right: 0;
}
.bolas {
position: absolute;
z-index: 1;
width: 100%;
height: 100%;
}
.bolas a {
height: 36px;
width: 36px;
border-radius: 18px;
/*background:#333333;*/
background: rgba(204, 204, 204, 0.5);
position: absolute;
color: #000;
/*transform: translate(-50%,-50%);*/
font-size: 28px;
line-height: 34px;
cursor: pointer;
text-decoration: none;
text-align: center;
}
.bolas a:before,
.bolas a:after {
content: "";
width: 26px;
height: 26px;
display: block;
border-radius: 50%;
z-index: -2;
position: absolute;
left: 5px;
top: 5px;
animation: sonarEffect 2s ease-out infinite;
transition-delay: inherit;
}
@keyframes sonarEffect {
0% {
opacity: 0.1;
}
50% {
opacity: 0.5;
box-shadow: 0 0 0 2px #33333350, 0 0 0px 5px #33333350,
0 0 0 5px #33333350;
}
100% {
box-shadow: 0 0 0 2px #33333350, 0 0 0px 10px #33333350,
0 0 0 5px #33333350;
transform: scale(1.3);
opacity: 0.1;
transform-origin: center center;
transform-style: preserve-3D;
}
}
.bolas a:hover {
text-decoration: none;
background: #0099ab;
}
.rectangulo {
position: absolute;
outline: 3px solid #fff;
z-index: 55;
width: 88%;
top: 27%;
height: 7%;
left: 9%;
}
.col-nav-left .sec-help:empty {
padding: 0;
}
.sec-help.links li a:hover {
color: #0099ab;
}
/*.left-bt, .right-bt {position: absolute;top: 50%;z-index: 1;height: 30px; width: 20px;content: url("http://www.meo.pt/PublishingImages/paginas/_fatura_interativa/ico_seta_r_l_light.svg");transition: 0.15s all ease;padding: 5px ;}*/
.left-bt,
.right-bt {
position: absolute;
top: 50%;
z-index: 5;
transition: all 0.3s ease-out;
text-decoration: none;
text-align: center;
background: rgba(204, 204, 204, 0.5);
width: 50px;
padding: 15px 0;
color: #000;
font-size: 14px;
cursor: pointer;
}
.left-bt:before,
.right-bt:before {
vertical-align: -2px;
content: "\e03d";
font-family: "icons-meo" !important;
font-style: normal !important;
font-weight: normal !important;
font-variant: normal !important;
text-transform: none !important;
speak: none;
line-height: 2em;
font-size: 2em;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.right-bt {
right: -50px;
transform: rotate(180deg);
}
.left-bt {
left: -50px;
}
.right-bt:hover,
.left-bt:hover {
background: #0099ab;
color: #000;
}
@media screen and (min-width: 769px) {
div#wrapfloatingmenu.affixed {
position: fixed;
width: 205px;
z-index: 5;
top: 80px !important;
}
div#wrapfloatingmenu.affixed-top {
position: relative;
}
div#wrapfloatingmenu.affixed-bottom {
position: absolute;
top: auto;
width: 205px;
bottom: 0;
}
}
@media screen and (max-width: 991px) {
.bloco-fatura-interativa {
padding-left: 0px;
padding-right: 0px;
}
.bolas a {
transform: scale(0.7) translateY(-70%) translateX(-70%);
}
}
@media screen and (max-width: 768px) {
.bl-tabs .tab-content .tab-pane,
#col-cont-right .area-conteudo {
padding: 0;
}
.right-bt,
.left-bt {
display: none;
}
.closeballoon {
right: 15px;
top: 5px;
}
.bolas {
display: none !important;
}
.col-nav-left {
margin-top: 30px;
}
.col-nav-left,
#right-side {
width: 100%;
}
#col-cont-right .nav-pag {
display: none;
}
.left-side {
position: relative;
}
.left-side .col-nav-left {
/*padding-left:0;padding-right:0;text-align: center;*/
}
.left-side {
padding: 0;
}
.sec-help {
display: none;
}
.col-nav-left .sec-nav {
border: none;
padding-top: 0;
}
.area-conteudo .area-img img {
min-width: inherit;
min-height: inherit;
}
.bloco-fatura-interativa {
padding-left: 0;
padding-right: 0;
}
.sec-help.links {
display: block;
}
.col-nav-left {
margin-top: 25px;
}
.left-side .col-nav-left {
padding-left: 0;
padding-right: 0;
}
.bloco-fatura-interativa .menu-fatura {
padding-left: 20px;
padding-right: 20px;
}
.left-side .col-nav-left,
.bl-tabs .tab-content>a.active,
.bl-tabs .tab-content a:active {
background: #f4f4f4;
}
.bl-tabs .tab-content .tab-pane.active {
background: #fff;
border-top: none;
}
.bl-tabs .nav-tabs {
padding: 0 0px;
width: 100%;
display: block !important;
margin-bottom: 1px;
}
.bl-tabs .nav-tabs li {
border: 1px solid #eee !important;
border-bottom: none;
}
.bl-tabs .nav-tabs li {
margin: 0 !important;
display: inline-block !important;
width: 100% !important;
}
.bl-tabs .nav-tabs li:last-child {
border-bottom: 1px solid #eee !important;
}
.bl-tabs .nav-tabs li a {
border: none !important;
margin: 0 !important;
}
.bl-tabs .nav-tabs li {
display: inline-block;
float: none;
width: 100%;
border: none !important;
border-radius: 0;
margin: 0;
outline: 1px solid #eee !important;
}
.bl-tabs .nav-tabs li.active,
.bl-tabs .nav-tabs li a,
.bl-tabs .nav-tabs li a:hover,
.bl-tabs .nav-tabs li a:focus {
border: none !important;
border-radius: 0;
margin: 0;
}
.col-nav-left .sec-help,
.col-nav-left .sec-nav {
padding: 30px 20px;
}
.bloco-fatura-interativa .box-title {
padding: 0 20px;
}
#info-balloon {
width: 100% !important;
max-width: 100% !important;
left: 0 !important;
right: 0 !important;
/*position:relative!important;*/
margin: 0 !important;
/*top:0!important;bottom:0!important;*/
transform: none !important;
/**/
}
#info-balloon.bottom_left:after,
#info-balloon.bottom_center:after,
#info-balloon.bottom_right:after,
#info-balloon.top_center:after,
#info-balloon.top_right:after,
#info-balloon.middle_left:after,
#info-balloon.middle_right:after,
#info-balloon:after {
top: -15px !important;
left: 50% !important;
transform: rotate(180deg) !important;
border-left: 10px solid transparent;
border-right: 10px solid transparent;
border-top: 15px solid #fff;
margin-top: 5px;
}
.bloco-fatura-interativa h2 {
padding-top: 0;
font-size: 22px;
}
.bloco-fatura-interativa h3 {
padding-bottom: 0px;
margin-bottom: 0;
}
/*#Tabify{padding-top:30px;}*/
.sec-help.links h3 {
padding-bottom: 0px;
}
.left-side .col-nav-left {
margin-top: 0;
}
.header-bot {
border-bottom: 2px solid #f4f4f4 !important;
}
#right-side {
display: none;
}
#Contentify {
padding-bottom: 0;
}
.col-nav-left .sec-help {
padding-bottom: 0;
}
.box-title.text-left.container {
margin-top: 20px;
}
.desktop.sec-help.links {
display: none !important;
}
.mobile.sec-help.links {
display: block !important;
}
.mobile.sec-help.links h3:after {
content: none;
}
.mobile.sec-help.links h3 {
padding-bottom: 20px;
pointer-events: none;
}
.mobile.sec-help.links ul {
display: block !important;
}
.faturas-in-tabs h4,
.faturas-in-tabs h4:hover {
pointer-events: none;
}
.faturas-in-tabs h4:after {
content: none;
}
.faturas-in-tabs ul {
display: block !important;
}
div#wrapfloatingmenu.affixed {
position: relative;
width: 100%;
}
}
</style>
<section class="bloco-fatura-interativa bl-tabs" style="">
<div class="top-intro">
<h2>Compreender a sua fatura</h2>
<h4>Conheça em detalhe o conteúdo das várias secções da sua fatura</h4>
</div>
<div id="Loadify">
<img src="https://www.meo.pt/PublishingImages/paginas/_fatura_interativa/loading.gif" height="64" width="64" alt="loading">
</div>
<!--<div class="fd-nav-tabs"><ul class="nav nav-tabs" id="Tabify"></ul></div>-->
<div class="block-tabs fake-tabs" data-activetab="0">
<div class="part">
<div class="tab-menu">
<ul id="Tabify">
<li class="active"><a title="1ª Fatura - Pacotes" href="#tab11">1ª Fatura - Pacotes</a></li>
<li class=""><a title="Fatura Pacotes" href="#tab12">Fatura Pacotes</a></li>
<li class=""><a title="1ª Fatura - Telemóvel" href="#tab13">1ª Fatura - Telemóvel</a></li>
<li class=""><a title="Fatura - Telemóvel" href="#tab14">Fatura - Telemóvel</a></li>
</ul>
<div class="arrows limit"><a class="left-arrow"></a><a class="right-arrow"></a></div>
</div>
</div>
</div>
<div class="tab-content" id="Contentify">
<!-- MEO <a href="#tab11" class="active">MEO</a>-->
<div class="tab-pane active">
<span class="hidden ancoras"></span>
<div class="left-side">
<div class="col-nav-left">
<div class="sec-help" id="video-link-box">
<h3>Dúvidas na fatura?</h3>
<p>Saiba como está organizada e veja as explicações passo a passo.</p>
</div>
<div id="wrapfloatingmenu" class="menu-fatura affixed-top">
<div class="sec-nav" id="nav-faturas">
<div class="faturas-in-tabs">
<h4>1ª Fatura - Pacotes</h4>
<ul id="listaPaginas">
<div class="pages-group">
<h5>Página 1</h5>
<ul class="listaItems">
<li>Área de Cliente</li>
<li>Dados de Cliente</li>
<li>Resumo da Fatura</li>
<li>Valor a Pagar</li>
<li>Modalidades de Pagamento</li>
</ul>
</div>
<div class="pages-group">
<h5>Página 2</h5>
<ul class="listaItems">
<li>Adesões</li>
<li>Mensalidades do Serviço</li>
<li>Mensalidades Televisão</li>
<li>Mensalidades Telemóvel</li>
<li>Mensalidades Equipamentos</li>
<li>Fatura Electrónica</li>
<li>QR Code</li>
</ul>
</div>
<div class="pages-group">
<h5>Página 3</h5>
<ul class="listaItems">
<li>Consumos</li>
</ul>
</div>
</ul>
</div>
</div>
<div class="desktop sec-help links active">
<h3>Ajuda e Suporte</h3>
<ul>
<li>
<a href="https://www.meo.pt/ajuda-e-suporte/produtos-meo/gerir-produtos/area-de-cliente">Área de Cliente</a>
</li>
<li>
<a href="https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/consultar-a-sua-fatura">Consultar a sua fatura</a>
</li>
<li>
<a href="https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/alterar-dados-de-fatura#detalhedecomunicacoes">Consultar detalhe de comunicações</a>
</li>
<li>
<a href="https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/compreender-a-fatura#faturavalorsuperioraoesperado">Compreender valor de fatura superior ao esperado</a>
</li>
<li>
<a href="https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/pagamentos/pagar-fatura">Pagar fatura</a>
</li>
</ul>
</div>
</div>
<div id="left-side-fat-mobile"></div>
<div class="mobile sec-help links active">
<h3>Ajuda e Suporte</h3>
<ul>
<li>
<a href="https://www.meo.pt/ajuda-e-suporte/produtos-meo/gerir-produtos/area-de-cliente">Área de Cliente</a>
</li>
<li>
<a href="https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/consultar-a-sua-fatura">Consultar a sua fatura</a>
</li>
<li>
<a href="https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/alterar-dados-de-fatura#detalhedecomunicacoes">Consultar detalhe de comunicações</a>
</li>
<li>
<a href="https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/compreender-a-fatura#faturavalorsuperioraoesperado">Compreender valor de fatura superior ao esperado</a>
</li>
<li>
<a href="https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/pagamentos/pagar-fatura">Pagar fatura</a>
</li>
</ul>
</div>
</div>
</div>
<div id="right-side">
<div id="col-cont-right">
<ul class="nav-pag" id="nav-pag">
<li title="Página 1" class="active">1</li>
<li title="Página 2" class="">2</li>
<li title="Página 3" class="">3</li>
</ul>
<div class="area-conteudo">
<div class="modal-fatura"></div>
<div class="area-img">
<div class="right-bt"></div>
<div class="left-bt"></div>
<div id="area-bolas-rects">
<ul class="bolas">
<a title="Área de Cliente" style="left:48.46%;top:6.88%;transition-delay:0.959s;">+</a><a title="Dados de Cliente" style="left:9.19%;top:12.5%;transition-delay:0.344s;">+</a><a title="Resumo da Fatura" style="left:9.19%;top:31.36%;transition-delay:0.762s;">+</a><a title="Valor a Pagar" style="left:9.19%;top:50.2%;transition-delay:0.344s;">+</a><a title="Modalidades de Pagamento" style="left:9.19%;top:76.77%;transition-delay:0.691s;">+</a>
</ul>
<div id="rect-border" class="rectangulo" style="display: none"></div>
<!-- bolinhas e retangulos-->
</div>
<img id="img-fatura" src="https://www.meo.pt/PublishingImages/paginas/_fatura_interativa/1Fatura_Fixo_Page_1.png" alt="fatura" style="opacity: 1;">
<div id="info-balloon" style="display: none" class="">
<span class="closeballoon"></span>
<h5 class="titulo"></h5>
<p class="descricao"></p>
<ul></ul>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="box-title text-left container notas">
<p>
<strong>Nota: </strong>A fatura apresentada é apenas um exemplo. Os valores apresentados são exemplificativos.
</p>
</div>
<script>
/* DADOS DA FATURA */
var objs = [];
/* TABS */
function AreasTabs(titulo, faturas, titVideo, linkVideo, descVideo) {
this.init(titulo, faturas, titVideo, linkVideo, descVideo);
}
AreasTabs.prototype = {
init: function(titulo, faturas, titVideo, linkVideo, descVideo) {
this.titulo = titulo;
this.faturas = faturas;
this.titVideo = titVideo;
this.linkVideo = linkVideo;
this.descVideo = descVideo;
},
create: function() {},
};
/* FATURAS */
function Fatura(titulo, pags) {
this.init(titulo, pags);
}
Fatura.prototype = {
init: function(titulo, pags) {
this.titulo = titulo;
this.pags = pags;
},
};
/* PAGINAS da FATURA */
function Pag(titulo, itens, imagem) {
this.init(titulo, itens, imagem);
}
Pag.prototype = {
init: function(titulo, itens, imagem) {
this.titulo = titulo;
this.itens = itens;
this.imagem = imagem;
},
};
/* propriedades bola / rect */
function AreaProps(xBola, yBola, xRect, yRect, wRect, hRect, xPop, yPop) {
this.init(xBola, yBola, xRect, yRect, wRect, hRect, xPop, yPop);
}
AreaProps.prototype = {
init: function(xBola, yBola, xRect, yRect, wRect, hRect, xPop, yPop) {
this.xBola = xBola;
this.yBola = yBola;
this.xRect = xRect;
this.yRect = yRect;
this.wRect = wRect;
this.hRect = hRect;
this.xPop = xPop;
this.yPop = yPop;
},
};
/* ITEMS */
function Items(titulo, tituloBalao, descricao, areaProps, links) {
this.init(titulo, tituloBalao, descricao, areaProps, links);
}
Items.prototype = {
init: function(titulo, tituloBalao, descricao, areaProps, links) {
this.titulo = titulo;
this.tituloBalao = tituloBalao;
this.descricao = descricao;
this.areaProps = areaProps;
this.links = links;
},
};
/* LINKS */
function Linke(type, texto, href) {
this.init(type, texto, href);
}
Linke.prototype = {
init: function(type, texto, href) {
this.type = type;
this.texto = texto;
this.href = href;
},
};
/* links */
var itens = [];
var linkes = [];
var pags = [];
var fats = [];
var tabs = [];
var props;
/* **************************************************************************** */
/* INICIO DOS DADOS */
/* **************************************************************************** */
/* ############### FATURA 1º FATURA PACOTE ###############*/
/* ############### FATURA 1º FATURA PACOTE ###############*/
/* ############### FATURA 1º FATURA PACOTE ###############*/
//https://rd3.videos.sapo.pt/playhtml?file=https://rd3.videos.sapo.pt/kGjNTrpOLMYrzFy8CyYZ/mov/1&quality=sd
// 1 Área de Cliente
linkes.push(new Linke("url", "Área de Cliente", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/gerir-produtos/area-de-cliente"));
linkes.push(new Linke("url", "Consultar fatura no PC", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/consultar-a-sua-fatura#consultarfaturaareadecliente"));
linkes.push(new Linke("url", "Consultar fatura na TV", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/consultar-a-sua-fatura#consultarfaturatv"));
linkes.push(new Linke("url", "Vantagens de aderir à Área de Cliente", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/gerir-produtos/area-de-cliente#vantagensdeaderirareadecliente"));
props = new AreaProps(48.46, 6.88, 52.9, 4.95, 22.7, 7.5, "center", "bottom");
itens.push(new Items("Área de Cliente", "Área de Cliente", 'Consulte o detalhe da sua fatura, ative serviços e muito mais em <a href="http://www.meo.pt">meo.pt</a> ou no menu da sua televisão', props, linkes));
// LIMPA DADOS
linkes = [];
props = "";
// #### ADICIONA NOVA BOLA
// 2 dados do cliente
linkes.push(new Linke("url", "Consultar dados de cliente", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/gerir-produtos/dados-de-acesso-a-sites-e-apps#vernrdeclienteenrdecontanaareadecliente"));
linkes.push(new Linke("url", "Registo na Área de Cliente", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/gerir-produtos/area-de-cliente#registonaareadecliente"));
props = new AreaProps(9.19, 12.5, 11, 11, 30, 11, "right", "middle");
itens.push(new Items("Dados de Cliente", "Dados de Cliente", "Tenha os seus <strong>dados de cliente</strong> à mão, sempre que nos contactar", props, linkes));
// LIMPA DADOS
linkes = [];
props = "";
// #### ADICIONA NOVA BOLA
// 3 resumo da fatura
//linkes.push(new Linke('url','Compreender a sua 1ª fatura (pacote com telemóvel) - vídeo','https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/compreender-a-fatura#video_compreender1afaturapacotecomtelemovel'));
// EM MODAL new Linke('video'
//https://www.meo.pt/PublishingImages/videos/ajuda/Conheca-melhor-a-sua-1a-fatura/Conheca-melhor-a-sua-1a-fatura.mp4'));
linkes.push(new Linke("url", "Compreender valor de fatura superior ao esperado", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/compreender-a-fatura#faturavalorsuperioraoesperado"));
// EM MODAL
//'https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/compreender-a-fatura#faturavalorsuperioraoesperado'));
props = new AreaProps(9.19, 31.36, 10.07, 27.99, 86.01, 24.46, "center", "top");
itens.push(new Items("Resumo da Fatura", "Resumo da Fatura", "Aqui pode ver o resumo da sua fatura, o mês a que corresponde, data limite para pagamento e valor a pagar", props, linkes));
// LIMPA DADOS
linkes = [];
props = "";
// #### ADICIONA NOVA BOLA
/* new item */
linkes.push(new Linke("url", "Compreender valor de fatura superior ao esperado", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/compreender-a-fatura#faturavalorsuperioraoesperado"));
//linkes.push(new Linke('url','Compreender a sua 1ª fatura (pacote com telemóvel) - vídeo','https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/compreender-a-fatura#faturavalorsuperioraoesperado'));
linkes.push(new Linke("url", "Como pagar a sua fatura?", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/pagamentos/pagar-fatura"));
// EM MODAL
//'https://www.meo.pt/PublishingImages/videos/ajuda/Conheca-melhor-a-sua-1a-fatura/Conheca-melhor-a-sua-1a-fatura.mp4'));
props = new AreaProps(9.19, 50.2, 10.07, 48, 86.01, 4.1, "center", "top");
itens.push(new Items("Valor a Pagar", "Valor a Pagar",
"A sua 1ª fatura pode não corresponder a um mês completo pois começa no dia da instalação e termina no final do período de faturação. Nas próximas faturas isso já não acontecerá!", props, linkes));
// LIMPA DADOS
linkes = [];
props = "";
// #### ADICIONA NOVA BOLA
// new item (removido pois nao aparece no pdf/imagem da fatura
/* linkes = []; // ESTE ITEM NAO TEM LINKS
props = new AreaProps(6.31, 70.81, 10.07, 68.64, 86.01, 5.55, 'center','top');
itens.push(new Items('Promoções e Novidades','Promoções e Novidades','Fique atento às promoções e novidades que temos para si',props,linkes));
linkes = [];
props = "";
*/
/* new item */
linkes.push(new Linke("url", "Pagar Faturas na Área de Cliente", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/pagamentos/pagar-fatura#pagarfaturasareadecliente"));
linkes.push(new Linke("url", "Pagar Faturas por Débito Direto", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/pagamentos/pagar-fatura#pagarfaturaspordebitodireto"));
linkes.push(new Linke("url", "Vantagens do Débito Direto", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/pagamentos/debito-direto#vantagensdebitodireto"));
linkes.push(new Linke("url", "Pagar Faturas por Multibanco", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/pagamentos/pagar-fatura#pagarfaturasnomultibanco"));
linkes.push(new Linke("url", "Fatura eletrónica", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/fatura-eletronica/vantagens-e-adesao"));
props = new AreaProps(9.19, 76.77, 11.5, 74.43, 84, 19.9, "center", "top");
itens.push(new Items("Modalidades de Pagamento", "Modalidades de Pagamento",
"Tudo o que precisa para pagar a sua fatura está aqui! Para sua conveniência, <strong>ative o Débito Direto de forma gratuita</strong> na sua Área de Cliente. Se pagar por MB, <strong>saiba que a entidade e referência são sempre iguais</strong> em todas as faturas.",
props, linkes));
// LIMPA DADOS
linkes = [];
props = "";
// #### ADICIONA NOVA BOLA
/* new item */
// finalmente adicionar tudo a esta página
pags.push(new Pag("Página 1", itens, "https://www.meo.pt/PublishingImages/paginas/_fatura_interativa/1Fatura_Fixo_Page_1.png"));
itens = [];
// agora criar a outra página...:
// agora criar a outra página...:
// agora criar a outra página...:
// agora criar a outra página...:
/* new item */
linkes.push(new Linke("url", "Conhecer os pacotes MEO", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/pacotes/pacotes-meo#conhecerospacotesmeo"));
linkes.push(new Linke("url", "Compreender valor de fatura superior ao esperado", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/compreender-a-fatura#faturavalorsuperioraoesperado"));
linkes.push(new Linke("url", "Ofertas de adesão aos pacotes MEO", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/pacotes/pacotes-meo#ofertasadesaopacotesmeo"));
props = new AreaProps(9.19, 20.39, 11.5, 18.58, 84.64, 14.35, "center", "bottom");
itens.push(new Items("Adesões", "Adesões", "Instalação e ativação do serviço, bem como os restantes serviços ativados e eventuais ofertas", props, linkes));
// LIMPA DADOS
linkes = [];
props = "";
// #### ADICIONA NOVA BOLA
/* new item */
linkes.push(new Linke("url", "Conhecer os pacotes MEO", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/pacotes/pacotes-meo#conhecerospacotesmeo"));
linkes.push(new Linke("url", "Compreender valor de fatura superior ao esperado", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/compreender-a-fatura#faturavalorsuperioraoesperado"));
props = new AreaProps(9.19, 37.64, 11.5, 33.3, 84.64, 12.3, "center", "top");
itens.push(new Items("Mensalidades do Serviço", "Mensalidades do Serviço", "Mensalidade do seu pacote e descontos que possa ter atribuídos", props, linkes));
// LIMPA DADOS
linkes = [];
props = "";
// #### ADICIONA NOVA BOLA
/* new item */
linkes.push(new Linke("url", "Conhecer os pacotes MEO", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/pacotes/pacotes-meo#conhecerospacotesmeo"));
linkes.push(new Linke("url", "Compreender valor de fatura superior ao esperado", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/compreender-a-fatura#faturavalorsuperioraoesperado"));
props = new AreaProps(9.19, 46.56, 11.5, 45.36, 84.64, 8.55, "center", "top");
itens.push(new Items("Mensalidades Televisão", "Mensalidades Televisão", "Mensalidade de canais adicionais que tenha subscrito", props, linkes));
// LIMPA DADOS
linkes = [];
props = "";
// #### ADICIONA NOVA BOLA
/* new item */
linkes.push(new Linke("url", "Conhecer os pacotes MEO", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/pacotes/pacotes-meo#conhecerospacotesmeo"));
linkes.push(new Linke("url", "Compreender valor de fatura superior ao esperado", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/compreender-a-fatura#faturavalorsuperioraoesperado"));
props = new AreaProps(9.19, 55.97, 11.5, 54.04, 84.64, 5.85, "center", "top");
itens.push(new Items("Mensalidades Telemóvel", "Mensalidades Telemóvel", "Apenas para serviços com telemóveis: mensalidades do 3º e/ou 4º cartões e eventuais descontos", props, linkes));
// LIMPA DADOS
linkes = [];
props = "";
// #### ADICIONA NOVA BOLA
/* new item */
linkes.push(new Linke("url", "Conhecer os pacotes MEO", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/pacotes/pacotes-meo#conhecerospacotesmeo"));
linkes.push(new Linke("url", "Compra ou aluguer de equipamentos", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/pacotes/adesao-e-instalacao#compraoualuguerdeequipamentosnospacotesmeo"));
linkes.push(new Linke("url", "MEOBoxes Fibra, ADSL e Satélite", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/pacotes/adesao-e-instalacao#meoboxesfibraadslesatelite"));
/*linkes.push(new Linke('url','Compreender valor de fatura superior ao esperado','https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/compreender-a-fatura#faturavalorsuperioraoesperado'));*/
props = new AreaProps(9.19, 61.28, 11.5, 59.95, 84.64, 10.25, "center", "top");
itens.push(new Items("Mensalidades Equipamentos", "Mensalidades Equipamentos", "Aluguer mensal de MEObox e descontos associados", props, linkes));
// LIMPA DADOS
linkes = [];
props = "";
// #### ADICIONA NOVA BOLA
linkes.push(new Linke("url", "Vantagens da fatura eletrónica", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/fatura-eletronica/vantagens-e-adesao#vantagensdafaturaeletronica"));
linkes.push(new Linke("url", "Aderir à fatura eletrónica na Área de Cliente",
"https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/fatura-eletronica/vantagens-e-adesao#aderirfaturaeletronicanaareadecliente"));
linkes.push(new Linke("url", "Aderir à fatura eletrónica na TV", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/fatura-eletronica/vantagens-e-adesao#aderirfaturaeletronicanatv"));
linkes.push(new Linke("url", "Vantagens do débito direto", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/pagamentos/debito-direto#vantagensdebitodireto"));
props = new AreaProps(9.19, 76.99, 9.49, 74.91, 61.21, 11.1, "center", "top");
itens.push(new Items("Fatura Electrónica", "Fatura Eletrónica",
"Se ainda não tem fatura eletrónica e débito direto, adira já na Área de Cliente em meo.pt ou na sua TV. Simplifique a sua vida, ajude o ambiente e usufrua de ofertas especiais.", props, linkes));
// LIMPA DADOS
linkes = [];
props = "";
// #### ADICIONA NOVA BOLA
/* new item */
linkes.push(new Linke("video", "Ver video", "https://www.meo.pt/PublishingImages/videos/ajuda/Conheca-melhor-a-sua-1a-fatura/Conheca-melhor-a-sua-1a-fatura.mp4"));
props = new AreaProps(69.06, 76.84, 69.28, 74.67, 26.45, 11.7, "left", "middle");
//itens.push(new Items('QR Code','QR Code','Saiba mais sobre a sua fatura através deste QR Code.',props,linkes));
itens.push(new Items("QR Code", "QR Code", "Saiba mais sobre a sua fatura através deste QR Code.", props, ""));
// LIMPA DADOS
linkes = [];
props = "";
// #### ADICIONA NOVA BOLA
/* */
// DEPOIS DO ULTIMA ITEM DA fatura
// finalmente adicionar tudo a esta página
pags.push(new Pag("Página 2", itens, "https://www.meo.pt/PublishingImages/paginas/_fatura_interativa/1Fatura_Fixo_Page_2.png"));
itens = [];
// agora criar a outra página...:
// agora criar a outra página...:
// agora criar a outra página...:
// agora criar a outra página...:
/* new item */
//linkes.push(new Linke('url','Controlo de custos de pacotes MEO','https://www.meo.pt/ajuda-e-suporte/produtos-meo/pacotes/pacotes-meo#controlodecustospacotesmeo'));
linkes.push(new Linke("url", "Consultar detalhe de comunicações", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/alterar-dados-de-fatura#detalhedecomunicacoes"));
linkes.push(new Linke("url", "Consultar consumos marcando *#123#", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/consumos-e-controlo-de-custos/consultar-consumos#consultarconsumosusd"));
linkes.push(new Linke("url", "Consumos de extramensalidade e saldo recarga",
"https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/consumos-e-controlo-de-custos/extramensalidade#consultarextramensalidadesaldorecarga"));
//'https://www.meo.pt/PublishingImages/videos/ajuda/Unlimited-Controlo-de-custos/Unlimited-Controlo-de-custos.mp4'));
linkes.push(new Linke("url", "Detalhe e dados de fatura", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/alterar-dados-de-fatura"));
linkes.push(new Linke("url", "Alertas de consumo no telemóvel", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/consumos-e-controlo-de-custos/alertas#alertasdeconsumosdotelemovel"));
props = new AreaProps(4.19, 13.5, 6.39, 12.42, 82.71, 36.9, "center", "bottom");
itens.push(new Items("Consumos", "Consumos",
"Na rubrica consumos pode consultar os consumos extramensalidade, nomeadamente chamadas telefónicas (fixas e móveis) por serviço e tipo de comunicação, bem como alugueres do MEO VideoClube.", props, linkes));
// LIMPA DADOS
linkes = [];
props = "";
// #### ADICIONA NOVA BOLA
// adiciona tudo à pagina
pags.push(new Pag("Página 3", itens, "https://www.meo.pt/PublishingImages/paginas/_fatura_interativa/1Fatura_Fixo_Page_3.png"));
itens = [];
// e adicionar ás faturas
fats.push(new Fatura("1ª Fatura - Pacotes", pags));
// era a ultima pagina
// adiciona a fatura á tab atual--- (4 valor é o link do botão)
// exemplo com botão ---- tabs.push(new AreasTabs("1ª Fatura - Pacotes",fats,"Dúvidas com a sua fatura?", "https://www.meo.pt/PublishingImages/videos/ajuda/Conheca-melhor-a-sua-1a-fatura/Conheca-melhor-a-sua-1a-fatura.mp4", "Saiba como interpretar a sua fatura e compreenda facilmente toda a informação que lhe enviamos."))
tabs.push(new AreasTabs("1ª Fatura - Pacotes", fats, "Dúvidas na fatura?", "", "Saiba como está organizada e veja as explicações passo a passo."));
// limpar fatura depois de adicionar a ultima página e adicionar a fatura á tab
fats = [];
// apenas porque só há uma fatura por tab, senao continuava a adicionar props e fats á tab.
// limpa as paginas
pags = [];
/* ############### FATURA PACOTES ###############*/
/* ############### FATURA PACOTES ###############*/
/* ############### FATURA PACOTES ###############*/
linkes.push(new Linke("url", "Área de Cliente", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/gerir-produtos/area-de-cliente"));
linkes.push(new Linke("url", "Consultar fatura no PC ", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/consultar-a-sua-fatura#consultarfaturaareadecliente"));
linkes.push(new Linke("url", "Consultar fatura na TV", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/consultar-a-sua-fatura#consultarfaturatv "));
linkes.push(new Linke("url", "Vantagens de aderir à Área de Cliente", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/gerir-produtos/area-de-cliente#vantagensdeaderirareadecliente"));
props = new AreaProps(48.46, 6.88, 52.9, 4.95, 22.7, 7.5, "center", "bottom");
itens.push(new Items("Área de Cliente", "Área de Cliente", "Consulte o detalhe da sua fatura, ative serviços e muito mais em meo.pt ou no menu da sua televisão", props, linkes));
// LIMPA DADOS
linkes = [];
props = "";
// #### ADICIONA NOVA BOLA
linkes.push(new Linke("url", "Consultar dados de cliente", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/gerir-produtos/dados-de-acesso-a-sites-e-apps#vernrdeclienteenrdecontanaareadecliente"));
linkes.push(new Linke("url", "Registo na Área de Cliente", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/gerir-produtos/area-de-cliente#registonaareadecliente"));
props = new AreaProps(9.19, 12.5, 11, 11, 30, 11, "right", "middle");
itens.push(new Items("Dados de Cliente", "Dados de Cliente", "Tenha os seus <strong>dados de cliente</strong> à mão, sempre que nos contactar", props, linkes));
// LIMPA DADOS
linkes = [];
props = "";
// #### ADICIONA NOVA BOLA
//linkes.push(new Linke('url','Compreender a sua 1ª fatura (pacote com telemóvel) - vídeo','https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/compreender-a-fatura#video_videofatura'));
//'https://www.meo.pt/PublishingImages/videos/ajuda/Conheca-melhor-a-sua-1a-fatura/Conheca-melhor-a-sua-1a-fatura.mp4'));
linkes.push(new Linke("url", "Compreender valor de fatura superior ao esperado", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/compreender-a-fatura#faturavalorsuperioraoesperado"));
props = new AreaProps(9.19, 31.36, 10.07, 27.99, 86.01, 27.46, "center", "top");
itens.push(new Items("Resumo da Fatura", "Resumo da Fatura", "Aqui pode ver o resumo da sua fatura, o mês a que corresponde, data limite para pagamento e valor a pagar", props, linkes));
// LIMPA DADOS
linkes = [];
props = "";
// #### ADICIONA NOVA BOLA
linkes = [];
//linkes.push(new Linke('url','Saiba mais sobre a sua fatura - vídeo','https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/compreender-a-fatura#video_videofatura'));
//'https://www.meo.pt/PublishingImages/videos/ajuda/fatura-eletronica-meo/fatura-eletronica-meo.mp4'));
props = new AreaProps(9.19, 56.6, 10.8, 55.67, 84.12, 10.98, "center", "top");
itens.push(new Items("Extrato de Conta", "Extrato de Conta",
'No Extrato de Conta encontram-se todos os movimentos da sua conta desde a última fatura. Caso existam valores de faturas anteriores que estejam por pagar os mesmos irão surgir nesta secção, já englobados na rubrica "Valor a Pagar"',
props, linkes));
// LIMPA DADOS
linkes = [];
props = "";
// #### ADICIONA NOVA BOLA
linkes.push(new Linke("url", "Pagar Faturas na Área de Cliente", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/pagamentos/pagar-fatura#pagarfaturasareadecliente"));
linkes.push(new Linke("url", "Pagar Faturas por Débito Direto", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/pagamentos/pagar-fatura#pagarfaturaspordebitodireto"));
linkes.push(new Linke("url", "Vantagens do Débito Direto", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/pagamentos/debito-direto#vantagensdebitodireto"));
linkes.push(new Linke("url", "Pagar Faturas por Multibanco", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/pagamentos/pagar-fatura#pagarfaturasnomultibanco"));
linkes.push(new Linke("url", "Fatura eletrónica", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/fatura-eletronica/vantagens-e-adesao"));
props = new AreaProps(9.19, 72.49, 10.8, 70.98, 84.12, 24.51, "center", "top");
itens.push(new Items("Modalidades de Pagamento", "Modalidades de Pagamento",
"Tudo o que precisa para pagar a sua fatura está aqui! Para sua conveniência, <strong>ative o Débito Direto de forma gratuita</strong> na sua Área de Cliente. Se pagar por MB, <strong>saiba que a entidade e referência são sempre iguais</strong> em todas as faturas.",
props, linkes));
// LIMPA DADOS
linkes = [];
props = "";
// #### ADICIONA NOVA BOLA
// adiciona tudo à pagina
pags.push(new Pag("Página 1", itens, "https://www.meo.pt/PublishingImages/paginas/_fatura_interativa/Fatura_corrente_Fixo_Page_1.png"));
itens = [];
linkes.push(new Linke("url", "Ofertas de adesão aos pacotes MEO", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/pacotes/pacotes-meo#ofertasadesaopacotesmeo"));
linkes.push(new Linke("url", "Conhecer os pacotes MEO", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/pacotes/pacotes-meo#conhecerospacotesmeo"));
linkes.push(new Linke("url", "Compreender valor de fatura superior ao esperado", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/compreender-a-fatura#faturavalorsuperioraoesperado"));
//'https://www.meo.pt/PublishingImages/videos/ajuda/Conheca-melhor-a-sua-1a-fatura/Conheca-melhor-a-sua-1a-fatura.mp4'));
props = new AreaProps(9.19, 19.97, 11.29, 18.95, 84.45, 13.5, "center", "bottom");
itens.push(new Items("Adesões", "Adesões", 'Caso tenha aderido a algum serviço MEO, o valor referente à sua adesão estará na rubrica "Adesões", com o detalhe do serviço a que se refere.', props, linkes));
// LIMPA DADOS
linkes = [];
props = "";
// #### ADICIONA NOVA BOLA
linkes.push(new Linke("url", "Conhecer os pacotes MEO", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/pacotes/pacotes-meo#conhecerospacotesmeo"));
linkes.push(new Linke("url", "Compreender valor de fatura superior ao esperado", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/compreender-a-fatura#faturavalorsuperioraoesperado"));
props = new AreaProps(9.19, 34.57, 11.29, 32.6, 84.45, 40.35, "center", "top");
itens.push(new Items("Mensalidades", "Mensalidades",
'Na secção "Mensalidades" encontram-se os valores mensais das suas subcrições: pacote contratado, canais premium e/ou cartões móveis adicionais. Tem ainda as mensalidades de equipamentos que possa ter (exemplo: aluguer MEObox)',
props, linkes));
// LIMPA DADOS
linkes = [];
props = "";
// #### ADICIONA NOVA BOLA
/* AQUI */
linkes.push(new Linke("url", "Vantagens da fatura eletrónica", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/fatura-eletronica/vantagens-e-adesao#vantagensdafaturaeletronica"));
linkes.push(new Linke("url", "Aderir à fatura eletrónica na Área de Cliente",
"https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/fatura-eletronica/vantagens-e-adesao#aderirfaturaeletronicanaareadecliente"));
linkes.push(new Linke("url", "Aderir à fatura eletrónica na TV", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/fatura-eletronica/vantagens-e-adesao#aderirfaturaeletronicanatv"));
linkes.push(new Linke("url", "Vantagens do débito direto", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/pagamentos/debito-direto#vantagensdebitodireto"));
props = new AreaProps(9.19, 76.99, 9.49, 74.91, 61.21, 11.1, "center", "top");
itens.push(new Items("Fatura Electrónica", "Fatura Eletrónica",
"Se ainda não tem fatura eletrónica e débito direto, adira já na Área de Cliente em meo.pt ou na sua TV. Simplifique a sua vida, ajude o ambiente e usufrua de ofertas especiais.", props, linkes));
// LIMPA DADOS
linkes = [];
props = "";
// #### ADICIONA NOVA BOLA
linkes.push(new Linke("video", "Ver video", "https://www.meo.pt/PublishingImages/videos/ajuda/Conheca-melhor-a-sua-1a-fatura/Conheca-melhor-a-sua-1a-fatura.mp4"));
props = new AreaProps(69.06, 76.84, 69.28, 74.67, 26.45, 11.7, "left", "middle");
//itens.push(new Items('QR Code','QR Code','Saiba mais sobre a sua fatura através deste QR Code.',props,linkes));
itens.push(new Items("QR Code", "QR Code", "Saiba mais sobre a sua fatura através deste QR Code.", props, ""));
// LIMPA DADOS
linkes = [];
props = "";
// #### ADICIONA NOVA BOLA
// adiciona tudo à pagina
pags.push(new Pag("Página 2", itens, "https://www.meo.pt/PublishingImages/paginas/_fatura_interativa/Fatura_corrente_Fixo_Page_2.png"));
itens = [];
linkes.push(new Linke("url", "Detalhe e dados de fatura", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/alterar-dados-de-fatura"));
linkes.push(new Linke("url", "Consultar detalhe de comunicações", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/alterar-dados-de-fatura#detalhedecomunicacoes"));
linkes.push(new Linke("url", "Consultar consumos marcando *#123#", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/consumos-e-controlo-de-custos/consultar-consumos#consultarconsumosusd"));
linkes.push(new Linke("url", "Consultar consumos de extramensalidade",
"https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/consumos-e-controlo-de-custos/extramensalidade#consultarextramensalidadesaldorecarga"));
linkes.push(new Linke("url", "Alertas de consumo no telemóvel", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/consumos-e-controlo-de-custos/alertas#alertasdeconsumosdotelemovel"));
//'https://www.meo.pt/PublishingImages/videos/ajuda/Unlimited-Controlo-de-custos/Unlimited-Controlo-de-custos.mp4'));
props = new AreaProps(4.82, 14.51, 5.62, 12.02, 84.43, 42.4, "center", "bottom");
itens.push(new Items("Consumos", "Consumos",
"Na rubrica consumos pode consultar os consumos extramensalidade, nomeadamente chamadas telefónicas (fixas e móveis) por serviço e tipo de comunicação, bem como alugueres do MEO VideoClube.", props, linkes));
// LIMPA DADOS
linkes = [];
props = "";
// #### ADICIONA NOVA BOLA
linkes.push(new Linke("url", "Compreender valor de fatura superior ao esperado", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/compreender-a-fatura#faturavalorsuperioraoesperado"));
linkes.push(new Linke("url", "Penalização no atraso no pagamento da fatura", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/compreender-a-fatura#atrasopagamentofatura"));
linkes.push(new Linke("url", "Vantagens do débito direto", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/pagamentos/debito-direto#vantagensdebitodireto"));
linkes.push(new Linke("url", "Custo de restabelecimento do serviço", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/compreender-a-fatura#custorestabelecimento"));
props = new AreaProps(4.82, 56.51, 5.62, 54.65, 84.43, 10.09, "center", "top");
itens.push(new Items("Serviços Administrativos", "Serviços Administrativos",
'Na secção "Serviços Administrativos" podem constar rubricas como, por exemplo, taxas de atraso de pagamento ou outros impostos. Para manter os seus pagamentos sempre em dia e evitar eventuais taxas por atraso de pagamento, ative o Débito Direto. Pode fazê-lo de forma gratuita na sua área de cliente no PC ou no Tablet em meo.pt',
props, linkes));
// LIMPA DADOS
linkes = [];
props = "";
// #### ADICIONA NOVA BOLA
// adiciona tudo à pagina
pags.push(new Pag("Página 3", itens, "https://www.meo.pt/PublishingImages/paginas/_fatura_interativa/Fatura_corrente_Fixo_Page_3.png"));
itens = [];
// e adicionar ás faturas
fats.push(new Fatura("Fatura Pacotes", pags));
// adiciona a fatura á tab atual
//tabs.push(new AreasTabs("Fatura Pacotes",fats,"Dúvidas com a sua fatura?", "https://www.meo.pt/PublishingImages/videos/ajuda/fatura-eletronica-meo/fatura-eletronica-meo.mp4", "Saiba como interpretar a sua fatura e compreenda facilmente toda a informação que lhe enviamos."))
tabs.push(new AreasTabs("Fatura Pacotes", fats, "Dúvidas na fatura?", "", "Saiba como está organizada e veja as explicações passo a passo."));
// limpar fatura depois de adicionar a ultima página e adicionar a fatura á tab, uma vez que é so uma fatura por tab
fats = [];
// limpa as paginas
pags = [];
/* ############# FIM FATURA ##############*/
/* ############### 1º fatura telemovel ###############*/
/* ############### 1º fatura telemovel ###############*/
/* ############### 1º fatura telemovel ###############*/
linkes.push(new Linke("url", "Saber o que pode fazer no my MEO.", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/gerir-produtos/area-de-cliente#vantagensdeaderirareadecliente"));
linkes.push(new Linke("url", "Como Instalar a app my MEO", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/gerir-produtos/area-de-cliente#instalarappmymeo"));
linkes.push(new Linke("url", "Como ver os serviços no my MEO", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/gerir-produtos/area-de-cliente#registonaareadecliente"));
linkes.push(new Linke("url", "Entrar no my MEO", "https://mymeo.page.link/home"));
linkes.push(new Linke("url", "Consultar as linhas de apoio MEO", "https://www.meo.pt/linhas-apoio"));
props = new AreaProps(46.7, 4.49, 51.41, 5.0, 23.04, 5.55, "center", "bottom");
itens.push(new Items("Área de Cliente my MEO", "Área de Cliente <a href='https://www.meo.pt/cliente' target='_blank'>my MEO</a>", "Permite gerir os serviços MEO sem custos 24h/dia, no computador, tablet ou telemóvel.",
props, linkes));
linkes = [];
props = "";
linkes.push(new Linke("url", "O que é o CVP", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/telefone/portabilidade#oqueeocvppacotes"));
linkes.push(new Linke("url", "Acesso ao my MEO", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/gerir-produtos/area-de-cliente#registonaareadecliente"));
props = new AreaProps(9.19, 12.55, 10.84, 11.5, 30.57, 15.77, "right", "middle");
itens.push(new Items("Dados de Cliente", "Dados de Cliente",
"Estes são os números que o identificam no MEO.<br>Aqui tem o nº de conta e o tarifário subscrito.<br>Tenha estes dados à mão quando nos contactar ou quando associar os serviços no my MEO.", props, linkes));
// LIMPA DADOS
linkes = [];
props = "";
// #### ADICIONA NOVA BOLA
// FALTA UM ITEM DE CONTEUDO VIDEO
linkes.push(new Linke("url", "Compreender valor de fatura superior ao esperado", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/compreender-a-fatura#faturavalorsuperioraoesperado"));
props = new AreaProps(9.19, 31.06, 10.84, 28.04, 86.6, 17.79, "center", "bottom");
itens.push(new Items("Resumo da Fatura", "Resumo da Fatura",
"Esta é a área da fatura onde pode ver o resumo da fatura do mês, a data limite de pagamento e o valor a pagar.<br><br>A faturação está organizada em três áreas:</p>" +
"<strong>- Adesões</strong>: valores relativos a adesão a novos serviços<br>" + "<strong>- Mensalidades</strong>: valores relativos a mensalidades dos tarifários subscritos<br>" +
"<strong>- Consumos</strong>: valores consumidos no mês anterior à fatura<br><br>" + "<p class='descricao'>A 1ª fatura pode não corresponder a um mês inteiro porque a faturação só inicia no dia de adesão", props,
linkes));
// LIMPA DADOS
linkes = [];
props = "";
// #### ADICIONA NOVA BOLA
// removido este destaque do valor a pagar
/*
linkes.push(
new Linke(
"url",
"Compreender valor de fatura superior ao esperado",
"https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/compreender-a-fatura#faturavalorsuperioraoesperado"
)
);
props = new AreaProps(
9.19,
56.7,
11.14,
55.74,
86.6,
3.4,
"center",
"top"
);
itens.push(
new Items(
"Valor a Pagar",
"Valor a Pagar",
"A sua 1ª fatura pode não corresponder a um mês completo, pois começa no dia em que aderiu. As mensalidades e consumos são referentes ao mês anterior.",
props,
linkes
)
);
// LIMPA DADOS
linkes = [];
props = "";
// #### ADICIONA NOVA BOLA
*/
// removido este destaque das promoçoes e novidades
/*
linkes = [];
props = new AreaProps(
9.19,
70.11,
11.14,
67.98,
86.6,
7.34,
"center",
"top"
);
itens.push(
new Items(
"Promoções e Novidades",
"Promoções e Novidades",
"Fique atento às promoções e novidades que temos para si",
props,
linkes
)
);
// LIMPA DADOS
linkes = [];
props = "";
// #### ADICIONA NOVA BOLA
*/
linkes.push(new Linke("url", "Como ativar o Débito Direto", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/pagamentos/debito-direto#aderirdebitodiretopctablet"));
linkes.push(new Linke("url", "Como pagar a fatura na área de cliente my MEO", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/pagamentos/pagar-fatura#pagarfaturasareadecliente"));
linkes.push(new Linke("url", "Como pagar faturas por Multibanco", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/pagamentos/pagar-fatura#pagarfaturasnomultibanco"));
props = new AreaProps(9.19, 76.7, 10.54, 74.21, 86.6, 20.91, "center", "top");
itens.push(new Items("Meios de Pagamento", "Meios de Pagamento",
"Toda a informação que precisa para pagar a fatura está aqui.</p><p class='descricao'>Saiba como <strong>ativar o Débito Direto</strong>, uma forma gratuita e cómoda de pagar a sua fatura.</p><p class='descricao'>Se optar por <strong>pagar por MB</strong>, saiba que a entidade e a referência são sempre as mesmas. Só muda o valor.",
props, linkes));
// LIMPA DADOS
linkes = [];
props = "";
// #### ADICIONA NOVA BOLA
// adiciona tudo à pagina
pags.push(new Pag("Página 1", itens,
//"https://www.meo.pt/PublishingImages/paginas/_fatura_interativa/1Fatura_UNL_Page_1.png"
"https://conteudos.meo.pt/Style%20Library/consumo/images/faturainterativa/1FaturaTelemovel_p1.jpg"));
itens = [];
linkes.push(new Linke("url", "Saiba o que é o Programa MEOS", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/meos/programa#oqueeoprogramameos"));
linkes.push(new Linke("url", "Conheça as sugestões e o catálogo", "https://www.meo.pt/meos"));
props = new AreaProps(6.19, 6.66, 5.54, 4.8, 86.6, 8.5, "center", "bottom");
itens.push(new Items("Programa MEOS", "Programa MEOS", "Nesta área pode ver o <strong>saldo MEOS</strong> e principais movimentos.", props, linkes));
// LIMPA DADOS
linkes = [];
props = "";
// #### ADICIONA NOVA BOLA
// nao tem ul de links
props = new AreaProps(6.19, 26.83, 7.54, 27.06, 81.6, 6.5, "center", "bottom");
itens.push(new Items("Adesões", "Adesões", "Nesta área, pode ver no período indicado, o valor de adesão ao tarifário e respetivos descontos comerciais.", props, linkes));
// LIMPA DADOS
linkes = [];
props = "";
// #### ADICIONA NOVA BOLA
// nao tem ul de links
props = new AreaProps(6.19, 32.83, 7.54, 34.06, 81.6, 8.5, "center", "bottom");
itens.push(new Items("Mensalidades", "Mensalidades",
"Nesta área pode ver no período indicado, a <strong>mensalidade do tarifário</strong> e dos <strong>serviços adicionais</strong> (ex. extra de internet, waiting ring) e respetivos descontos, como por ex. o desconto mensal de adesão à Fatura Eletrónica.",
props, linkes));
// LIMPA DADOS
linkes = [];
props = "";
// #### ADICIONA NOVA BOLA
linkes.push(new Linke("url", "Saber mais sobre extramensalidade", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/consumos-e-controlo-de-custos/extramensalidade#extramensalidadeesaldorecarga"));
//'https://www.meo.pt/PublishingImages/videos/ajuda/Unlimited-Controlo-de-custos/Unlimited-Controlo-de-custos.mp4'));
linkes.push(new Linke("url", "Como controlar consumos", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/consumos-e-controlo-de-custos/consultar-consumos#consultarconsumosusd"));
linkes.push(new Linke("url", "Como consultar detalhe de comunicações", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/alterar-dados-de-fatura#detalhedecomunicacoes"));
linkes.push(new Linke("url", "Alertas de consumo no telemóvel", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/consumos-e-controlo-de-custos/alertas#alertasdeconsumosdotelemovel"));
props = new AreaProps(6.19, 42.83, 6.54, 43, 84.6, 13.68, "center", "top");
itens.push(new Items("Consumos", "Consumos",
"Aqui pode ver a <strong>faturação dos consumos que realizou no mês anterior</strong> e que podem ser de voz, internet ou roaming.</p><p class='descricao'>Pode consultar o valor das comunicações que não estão incluídas no tarifário, assim como o nº de comunicações que foram realizadas.</p><p class='descricao'>Caso não pretenda realizar chamadas ou acessos com custo, pode alterar o valor da extramensalidade, mas alertamos que é importante ter sempre algum valor para comunicações urgentes e inesperadas.",
props, linkes));
// LIMPA DADOS
linkes = [];
props = "";
// adiciona tudo à pagina
pags.push(new Pag("Página 2", itens,
//"https://www.meo.pt/PublishingImages/paginas/_fatura_interativa/1Fatura_UNL_Page_2.png"
"https://conteudos.meo.pt/Style%20Library/consumo/images/faturainterativa/1FaturaTelemovel_p2.jpg"));
itens = [];
// e adicionar ás faturas
fats.push(new Fatura("1ª Fatura - Telemóvel", pags));
// adiciona a fatura á tab atual
//https://www.meo.pt/PublishingImages/videos/ajuda/Conheca-melhor-a-sua-1a-fatura/Conheca-melhor-a-sua-1a-fatura.mp4
//tabs.push(new AreasTabs("1ª Fatura - Telemóvel",fats,"Dúvidas com a sua fatura?", "https://www.meo.pt/PublishingImages/videos/ajuda/Fatura_Movel.mp4", "Saiba como interpretar a sua fatura e compreenda facilmente toda a informação que lhe enviamos."))
tabs.push(new AreasTabs("1ª Fatura - Telemóvel", fats, "Dúvidas na fatura?", "", "Saiba como está organizada e veja as explicações passo a passo."));
// limpar fatura depois de adicionar a ultima página e adicionar a fatura á tab, uma vez que é so uma fatura por tab
fats = [];
// limpa as paginas
pags = [];
/* ############# FIM FATURA ##############*/
/* ############### FATURA TELEMOVEL ###############*/
/* ############### FATURA TELEMOVEL ###############*/
/* ############### FATURA TELEMOVEL ###############*/
linkes.push(new Linke("url", "Saber o que pode fazer no my MEO", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/gerir-produtos/area-de-cliente#vantagensdeaderirareadecliente"));
linkes.push(new Linke("url", "Como instalar a app my MEO", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/gerir-produtos/area-de-cliente#instalarappmymeo"));
linkes.push(new Linke("url", "Como ver os serviços no my MEO ", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/gerir-produtos/area-de-cliente#registonaareadecliente"));
linkes.push(new Linke("url", "Entrar no my MEO", "https://mymeo.page.link/home"));
linkes.push(new Linke("url", "Consultar as linhas de apoio MEO", "https://www.meo.pt/linhas-apoio"));
props = new AreaProps(50.0, 7.13, 52.41, 5.11, 22.44, 7.23, "center", "bottom");
itens.push(new Items("Área de Cliente my MEO", "Área de Cliente <a href='https://www.meo.pt/cliente' target='_blank'>my MEO</a>",
"Permite gerir os serviços sem custos 24h/dia, disponível no computador, tablet ou telemóvel.", props, linkes));
// LIMPA DADOS
linkes = [];
props = "";
// #### ADICIONA NOVA BOLA
linkes.push(new Linke("url", "O que é o CVP", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/telefone/portabilidade#oqueeocvppacotes"));
linkes.push(new Linke("url", "Acesso ao my MEO", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/gerir-produtos/area-de-cliente#registonaareadecliente"));
props = new AreaProps(9.19, 14.57, 11.14, 13.3, 30.57, 10.11, "right", "middle");
itens.push(new Items("Dados de Cliente", "Dados de Cliente",
"Estes são os números que o identificam no MEO.</p><p class='descricao'>Aqui tem o nº de conta e o tarifário subscrito.<p class='descricao'>Tenha estes dados à mão quando nos contactar ou quando associar os serviços no my MEO.",
props, linkes));
// LIMPA DADOS
linkes = [];
props = "";
// #### ADICIONA NOVA BOLA
linkes.push(new Linke("url", "Compreender valor de fatura superior ao esperado", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/compreender-a-fatura#faturavalorsuperioraoesperado"));
props = new AreaProps(9.19, 31.17, 11.14, 28.72, 86.75, 16.53, "center", "top");
itens.push(new Items("Resumo da Fatura", "Resumo da Fatura", "Aqui pode ver o resumo da fatura do mês, a data limite de pagamento da fatura e o valor a pagar.<br><br>A faturação está organizada em três áreas:</p>" +
"<strong>- Adesões</strong>: valores relativos a adesão a novos serviços<br>" + "<strong>- Mensalidades</strong>: valores relativos a mensalidades dos tarifários subscritos<br>" +
"<strong>- Consumos</strong>: valores consumidos no mês anterior à fatura<br><br>" + "<p class='descricao'>A 1ª fatura pode não corresponder a um mês inteiro porque a faturação só inicia no dia de adesão", props,
linkes));
// LIMPA DADOS
linkes = [];
props = "";
// #### ADICIONA NOVA BOLA
// nao tem linkes
linkes = [];
props = new AreaProps(9.19, 46.06, 11.54, 49.04, 86.6, 10.32, "center", "top");
itens.push(new Items("Extrato de Conta", "Extrato de Conta",
'Aqui encontra todos os movimentos na conta, desde a última fatura até à data de emissão da fatura do mês. Caso existam valores de faturas anteriores por pagar, os valores serão incluídos no <strong>Valor a pagar</strong>.</p><p class="descricao">Todos os valores pagos após a data de emissão da fatura, só serão visíveis na próxima fatura.',
props, linkes));
// LIMPA DADOS
linkes = [];
props = "";
// #### ADICIONA NOVA BOLA
linkes.push(new Linke("url", "Como ativar o Débito Direto", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/pagamentos/debito-direto#aderirdebitodiretopctablet"));
linkes.push(new Linke("url", "Como pagar a fatura na área de cliente my MEO", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/pagamentos/pagar-fatura#pagarfaturasareadecliente"));
linkes.push(new Linke("url", "Como pagar Faturas por Multibanco", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/pagamentos/pagar-fatura#pagarfaturasnomultibanco"));
props = new AreaProps(9.19, 76.49, 10.54, 74.0, 86.6, 21.7, "center", "top");
itens.push(new Items("Meios de Pagamento", "Meios de Pagamento",
"Toda a informação que precisa para pagar a fatura está aqui.</p><p class='descricao'>Saiba como <strong>ativar o Débito Direto</strong>, uma forma gratuita e cómoda de pagar a sua fatura.</p><p class='descricao'>Se optar por <strong>pagar por MB</strong>, saiba que a entidade e a referência são sempre as mesmas. Só muda o valor.",
props, linkes));
// LIMPA DADOS
linkes = [];
props = "";
// #### ADICIONA NOVA BOLA
// adiciona tudo à pagina
pags.push(new Pag("Página 1", itens, "https://conteudos.meo.pt/Style%20Library/consumo/images/faturainterativa/2FaturaTelemovel_p1.jpg"));
itens = [];
linkes.push(new Linke("url", "Como acumular MEOS.", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/meos/programa#oqueeoprogramameos"));
linkes.push(new Linke("url", "Conhecer as sugestões e o catálogo", "https://www.meo.pt/meos"));
linkes.push(new Linke("url", "Como consultar o saldo MEOS", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/meos/saldo#comoconsultarsaldomeos"));
linkes.push(new Linke("url", "Onde posso trocar MEOS", "https://www.meo.pt/ajuda-e-suporte/produtos-meo/meos/trocar#ondepossotrocarmeos"));
props = new AreaProps(9.19, 6.91, 5.24, 5.5, 87.65, 7.5, "center", "bottom");
itens.push(new Items("Programa MEOS", "Programa MEOS", "Nesta área pode ver o <strong>saldo MEOS</strong> e principais movimentos.", props, linkes));
// LIMPA DADOS
linkes = [];
props = "";
// #### ADICIONA NOVA BOLA
linkes.push(new Linke("url", "Compreender valor de fatura superior ao esperado", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/compreender-a-fatura#faturavalorsuperioraoesperado"));
props = new AreaProps(4.19, 27.23, 5.54, 24.06, 87.65, 11.36, "center", "top");
itens.push(new Items("Mensalidades", "Mensalidades",
"Nesta área pode ver no período de faturação indicado, o valor da mensalidade do tarifário e dos serviços adicionais (ex. extra de internet) e respetivos descontos comerciais.", props, linkes));
// LIMPA DADOS
linkes = [];
props = "";
// #### ADICIONA NOVA BOLA
linkes.push(new Linke("url", "Saber mais sobre extramensalidade", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/consumos-e-controlo-de-custos/extramensalidade#extramensalidadeesaldorecarga"));
//'https://www.meo.pt/PublishingImages/videos/ajuda/Unlimited-Controlo-de-custos/Unlimited-Controlo-de-custos.mp4'));
linkes.push(new Linke("url", "Como controlar consumos", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/consumos-e-controlo-de-custos/consultar-consumos#consultarconsumosusd"));
linkes.push(new Linke("url", "Como consultar detalhe de comunicações", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/faturas/alterar-dados-de-fatura#detalhedecomunicacoes"));
linkes.push(new Linke("url", "Alertas de consumo no telemóvel", "https://www.meo.pt/ajuda-e-suporte/faturas-pagamentos-e-carregamentos/consumos-e-controlo-de-custos/alertas#alertasdeconsumosdotelemovel"));
props = new AreaProps(4.19, 37.13, 4.54, 34.74, 87.65, 11.7, "center", "top");
itens.push(new Items("Consumos", "Consumos",
"Aqui pode ver a <strong>faturação dos consumos que realizou no mês anterior</strong> e que podem ser de voz, internet ou roaming.</p><p class='descricao'>Pode consultar o valor das comunicações que não estão incluídas no tarifário, assim como o nº de comunicações que foram realizadas.</p><p class='descricao'>Caso não pretenda realizar chamadas ou acessos com custo, pode alterar o valor da extramensalidade, mas alertamos que é importante ter sempre algum valor para comunicações urgentes e inesperadas.",
props, linkes));
// LIMPA DADOS
linkes = [];
props = "";
// #### ADICIONA NOVA BOLA
// adiciona tudo à pagina
pags.push(new Pag("Página 2", itens, "https://conteudos.meo.pt/Style%20Library/consumo/images/faturainterativa/2FaturaTelemovel_p2.jpg"));
itens = [];
// e adicionar ás faturas
fats.push(new Fatura("Fatura - Telemóvel", pags));
// adiciona a fatura á tab atual
//tabs.push(new AreasTabs("Fatura - Telemóvel",fats,"Dúvidas com a sua fatura?", "https://www.meo.pt/PublishingImages/videos/ajuda/Fatura_Corrente_Movel/Fatura_Corrente_Movel.mp4", "Saiba como interpretar a sua fatura e compreenda facilmente toda a informação que lhe enviamos."))
tabs.push(new AreasTabs("Fatura - Telemóvel", fats, "Dúvidas na fatura?", "", "Saiba como está organizada e veja as explicações passo a passo."));
// limpar fatura depois de adicionar a ultima página e adicionar a fatura á tab, uma vez que é so uma fatura por tab
fats = [];
// limpa as paginas
pags = [];
/* ############# FIM FATURA ##############*/
/* **************************************************************************** */
/* FIM DOS DADOS */
/* **************************************************************************** */
/* current indexes */
var firstime = true;
var openTab = false;
function createTabs(iTab, iFat, iPag, iTem, bottomLevelsOnly) {
tabs.forEach(function(element, index) {
if (firstime) {
$("#Tabify").append('<li class="' + (iTab == index ? "active" : "") + '"><a title="' + element.titulo + '" href="#tab1' + Math.abs(index + 1) + '">' + element.titulo + "</a></li>");
}
tabi = $("#Tabify li").eq(index);
//console.log(element.linkVideo + " ::: element.linkVideo");
if (iTab == index) {
$("#video-link-box *").remove();
$("#video-link-box").append("<h3>" + element.titVideo + "</h3>");
$("#video-link-box").append("<p>" + element.descVideo + "</p>");
if (element.linkVideo != "") {
//$('#video-link-box').append('<a href="'+ element.linkVideo +'" class="btn-fill btn-gray btn-txt-white icon-seta-right btn-icon-right">ver vídeo</a>');
hstr =
"<a href='#video_compreender1afaturapacotecomtelemovel' class='btn-fill btn-gray btn-txt-white icon-seta-right btn-icon-right tr-modal-videos' data-w='100%' data-h='350' data-bind='attr: { href: '#video_' + ISiteColumnTopicRefOWSTEXT, 'data-iframe': $parent.getTopicVideoUrl($data) }'>Ver vídeo</a>";
$("#video-link-box").append(hstr);
$("#video-link-box a").attr("data-iframe", element.linkVideo);
if ($(".tr-modal-videos").length > 0) {
$(".tr-modal-videos").off("click");
new OverlayVideoAjuda({
trigger: $(".tr-modal-videos"),
cl_modal: "modal",
});
}
}
/**/
}
if (iTab == index) {
/*loop nas faturas */
element.faturas.forEach(function(element, index) {
// 1º. o titulo da fatura
$("#nav-faturas *").remove();
$("#nav-faturas").append('<div class="faturas-in-tabs"><h4>' + element.titulo + "</h4></div>"); /*tabs[iTab].faturas[0].titulo*/
// páginas e itens
$("#nav-faturas .faturas-in-tabs").append('<ul id="listaPaginas"></ul>');
cFat = index;
/* loop na paginacao */
$("#nav-pag li").remove();
element.pags.forEach(function(element, index) {
/*paginação topo direito*/
$("#nav-pag").append('<li title="' + element.titulo + '" class="' + (index == curPag ? "active" : "") + '">' + parseInt(index + 1) + "</li>");
/* grupo de paginas e titulo */
$("#listaPaginas").append('<div class="pages-group"><h5>' + element.titulo + '</h5><ul class="listaItems"></ul></div>');
/* carrega a imagem desta pagina */
if (iPag == index) {
loadImage();
}
/* loop de itens */
cPag = index;
if (iPag == cPag && iFat == cFat) {
$("#area-bolas-rects .bolas a").remove();
}
element.itens.forEach(function(element, index) {
//add item
$("#listaPaginas .pages-group").eq(cPag).find(".listaItems").append("<li>" + element.titulo + "</li>");
// add click to that item
$("#listaPaginas .pages-group").eq(cPag).find(".listaItems li:last-child").click(function() {
//$(this).closest('.pages-group').find('h5)'.click()
//$(this).closest('.pages-group').find('h5').click()
clearActives(".listaItems li");
$(this).addClass("active");
curPag = $(this).closest(".pages-group").index();
getNewPage();
loadImage();
showBaloon($(this).index());
activateMenuParentItem(curPag);
setNavPosition();
});
// add balls apenas às fatura e pagina atual
if (iPag == cPag && iFat == cFat) {
//data-areaProps="'+ element.areaProps +'"
var _delay = Math.random() * 2;
$("#area-bolas-rects .bolas").append('<a title="' + element.titulo + '" style="left:' + element.areaProps.xBola + "%;top:" + element.areaProps.yBola + "%;transition-delay:" + _delay.toPrecision(
3) + 's;">+</a>'); //
$("#area-bolas-rects .bolas a:last-child").click(function() {
curItem = $(this).index();
showBaloon($(this).index());
activateMenuItem($(this).index());
activateMenuParentItem(curPag);
setNavPosition();
});
}
});
/* CLICK NO NOME/PÀGINA DE CADA FATURA MOSTRA A HOME DA PAGINA COM BOLAS*/
$("#listaPaginas .pages-group").eq(index).find("h5").click(function() {
curPag = $(this).closest(".pages-group").index();
getNewPage();
createTabs(curTab, curFat, curPag, null, true);
activateMenuParentItem(curPag);
setNavPosition();
});
$("#nav-pag li").eq(index).click(function() {
//console.log(2)
if (!$(this).hasClass("active")) {
curPag = $(this).index();
curItem = 0;
//console.log(curPag);
getNewPage();
//console.log(curPag);
createTabs(curTab, curFat, curPag, null, true);
//activateMenuParentItem(curPag);
getNewPage();
}
setNavPosition();
});
});
});
}
/* adiciona evento click às tabs apenas uma vez... */
if (firstime) {
if (openI) {
if (curItem >= 0) {
//console.log(curItem)
//setTimeout(function(){ showBaloon(curItem); }, 2000);
showBaloon(curItem);
}
}
$(tabi).click(function(e) {
e.preventDefault();
if (!$(this).hasClass("active")) {
curTab = $(this).closest("li").index();
curFat = 0;
curPag = 0;
getNewPage();
$(this).closest("ul").find("li").removeClass("active");
$(this).addClass("active");
createTabs(curTab, 0, 0, null, true);
//scrolleToItem('#Tabify');
/* REMOVIDO PARA NAO IR PARA BAIXO A PEDIDO DA RITA NOVAMENTE */
//scrolleToItem('#listaPaginas');
getNewPage();
$("#wrapfloatingmenu .sec-help.links").addClass("active");
$("#wrapfloatingmenu .faturas-in-tabs h4").removeClass("active");
}
setNavPosition();
});
} else {
//getNewPage();
}
});
if (firstime) {
$(window).scroll(function() {
setNavPosition();
});
$(".faturas-in-tabs h4").click(function() {
//console.log("clicko u")
if ($(this).hasClass("active")) {
$("#wrapfloatingmenu .sec-help.links").addClass("active");
$("#wrapfloatingmenu .faturas-in-tabs h4").removeClass("active");
} else {
$("#wrapfloatingmenu .sec-help.links").removeClass("active");
$("#wrapfloatingmenu .faturas-in-tabs h4").addClass("active");
}
setNavPosition();
});
$(".sec-help.links h3").click(function() {
//console.log("clickou")
if ($(this).closest(".links").hasClass("active")) {
$("#wrapfloatingmenu .sec-help.links").removeClass("active");
$("#wrapfloatingmenu .faturas-in-tabs h4").addClass("active");
} else {
$("#wrapfloatingmenu .sec-help.links").addClass("active");
$("#wrapfloatingmenu .faturas-in-tabs h4").removeClass("active");
}
setNavPosition();
});
}
firstime = false;
$(window).on("hashchange", function(e) {
window.history.pushState("", document.title, window.location.pathname);
// do something...
});
getItRight();
}
setNavPosition = function() {
scrolled = $(window).scrollTop();
topMin = $("#Contentify").offset().top + ($("#video-link-box").outerHeight(true) + 20 + 70);
topMax = $("#Contentify").offset().top + $("#Contentify").outerHeight(true);
navH = $("#wrapfloatingmenu .sec-help").outerHeight(true) + $("#wrapfloatingmenu .sec-nav").outerHeight(true);
if (scrolled + 80 <= topMax) {
if (scrolled + 80 + navH >= topMax) {
console.log("vai para baixo");
$("#wrapfloatingmenu").removeAttr("style");
$("#wrapfloatingmenu").removeClass("affixed").removeClass("affixed-top").addClass("affixed-bottom");
$("#wrapfloatingmenu").css("top", $("#col-cont-right").outerHeight(true) - $("#wrapfloatingmenu").outerHeight(true));
} else if (scrolled + 80 >= topMin) {
console.log("vai fixar");
$("#wrapfloatingmenu").removeAttr("style");
$("#wrapfloatingmenu").removeClass("affixed-bottom").removeClass("affixed-top").addClass("affixed");
} else {
console.log("mantem se no topo");
$("#wrapfloatingmenu").removeAttr("style");
$("#wrapfloatingmenu").removeClass("affixed").removeClass("affixed-bottom").addClass("affixed-top");
}
}
};
clearActives = function(elem) {
$(elem).removeClass("active");
};
activateMenuItem = function(index) {
clearActives(".listaItems li");
$("#listaPaginas .pages-group").eq(curPag).find(".listaItems li").eq(index).addClass("active");
};
activateMenuParentItem = function(index) {
clearActives("#listaPaginas .pages-group h5");
$("#listaPaginas .pages-group").eq(index).find("h5").addClass("active");
getItRight();
};
$("#img-fatura, .closeballoon, #rect-border, .modal-fatura").click(function() {
balloonIsOpen = false;
//console.log("closing")
createTabs(curTab, curFat, curPag, curItem, true);
//if($(window).width() < 768){
//scroll para o topo - rita pediu para remover
//scrolleToItem('#Tabify');
//}
$("#info-balloon").hide();
$("#area-bolas-rects .bolas").show();
$("#area-bolas-rects").removeClass("bolasOn");
$(".area-conteudo").removeClass("add-modal");
$("#area-bolas-rects .rectangulo").hide();
$("#img-fatura").css("opacity", 1);
$("#info-balloon").removeClass();
clearActives(".listaItems li");
activateMenuParentItem(curPag);
setNavPosition();
});
loadImage = function() {
img = tabs[curTab].faturas[curFat].pags[curPag].imagem;
//$('#img-fatura').attr('src', img);
/**/
$("#img-fatura").on("load", function() {
//console.log("loadcomplete");
setTimeout(function() {
$(".bloco-fatura-interativa").removeClass("is-loading");
}, 500);
}).attr("src", img);
$(".bloco-fatura-interativa").removeClass("is-loading");
$("#img-fatura").css("opacity", 1);
$("#info-balloon").removeClass();
};
getNewPage = function() {
$("#info-balloon").hide();
$("#area-bolas-rects .bolas").show();
$("#area-bolas-rects").removeClass("bolasOn");
$(".area-conteudo").removeClass("add-modal");
$("#area-bolas-rects .rectangulo").hide();
loadImage();
$("#img-fatura").css("opacity", 1);
$("#info-balloon").removeClass();
//console.log("CRIAR CLICKS ")
$(".faturas-in-tabs h4").click(function() {
//console.log("clicko u")
if ($(this).hasClass("active")) {
$("#wrapfloatingmenu .sec-help.links").addClass("active");
$("#wrapfloatingmenu .faturas-in-tabs h4").removeClass("active");
} else {
$("#wrapfloatingmenu .sec-help.links").removeClass("active");
$("#wrapfloatingmenu .faturas-in-tabs h4").addClass("active");
}
setNavPosition();
});
};
showBaloon = function(indice) {
balloonIsOpen = true;
currentItem = indice;
curItem = currentItem;
$("#area-bolas-rects .bolas").hide();
$("#info-balloon ul").remove();
$("#info-balloon h5").html(tabs[curTab].faturas[curFat].pags[curPag].itens[indice].tituloBalao);
$("#info-balloon .descricao").html(tabs[curTab].faturas[curFat].pags[curPag].itens[indice].descricao);
/*paginação topo direito*/
$("#nav-pag li").removeClass("active");
$("#nav-pag li").eq(curPag).addClass("active");
//$type = tabs[curTab].faturas[curFat].pags[curPag].itens[indice].type;
$links = tabs[curTab].faturas[curFat].pags[curPag].itens[indice].links;
//console.log('TEMOS LINKS ? ' + $links.length + " - " + curFat + " - " + curPag + " - " + indice)
if ($links.length != 0) {
$("#info-balloon").append("<ul></ul>");
$links.forEach(function(element, index) {
//console.log(element.type + " $type")
if (element.type == "video") {
hstr = "<li><a href='#video_fatura' class='tr-modal-videos' data-w='100%' data-h='350' data-bind='attr: { href: '#video_fatura, 'data-iframe': $parent.getTopicVideoUrl($data) }'>" + element.texto + "</a></li>";
$("#info-balloon ul").append(hstr);
$("#info-balloon ul li:last-child a").attr("data-iframe", element.href);
if ($(".tr-modal-videos").length > 0) {
$(".tr-modal-videos").off("click");
new OverlayVideoAjuda({
trigger: $(".tr-modal-videos"),
cl_modal: "modal",
});
}
//<a class="tr-modal-videos" href="#video1" data-iframe="http://rd3.videos.sapo.pt/playhtml?file=http://rd3.videos.sapo.pt/kGjNTrpOLMYrzFy8CyYZ/mov/1&quality=sd" data-w="100%" data-h="350">
//$('#info-balloon ul').append('<li><a class="tr-modal-videos" href="#video' + index +'" data-iframe="' + element.href +'" data-w="100%" data-h="350">'+ element.texto +'</a></li>');
} else {
$("#info-balloon ul").append('<li><a target="_blank" href="' + element.href + '">' + element.texto + "</a></li>");
}
//$('#info-balloon ul').append('<li><a href="'+ element.href +'">'+ element.texto +'</a></li>');
});
}
positionateBalloon(curTab, curFat, curPag, currentItem);
/*
var ib = document.getElementById('info-balloon');
var offset = {y:0};
while (ib)
{
offset.y += ib.offsetTop;
ib = ib.offsetParent;
}
if (document.documentElement && (document.documentElement.scrollTop))
{
offset.y -= document.documentElement.scrollTop;
}
else if (document.body && (document.body.scrollTop))
{
offset.y -= document.body.scrollTop;
}
else if (window.pageYOffset)
{
offset.y -= window.pageYOffset;
}
//console.log(offset.y +" cenas");
*/
if ($(window).width() < 768) {
if ($("#info-balloon").height() + $("#rect-border").height() >= $(window).height() * 0.7) {
scrolleToItem("#info-balloon");
} else {
scrolleToItem("#rect-border");
}
} else {
yInfo = $("#info-balloon").offset().top;
yRec = $("#rect-border").offset().top;
//console.log(yInfo + " - " + yRec)
if (yInfo < yRec) {
scrolleToItem("#info-balloon"); //'#img-fatura');'#rect-border')
} else {
scrolleToItem("#rect-border"); //'#img-fatura');'#rect-border')
}
}
};
var curTab = 0;
var curFat = 0; //vai ser sempre 0 pois apenas há uma fatura por Tab
var curPag = 0;
var curItem = null;
var scrollToImag;
var floatingIsOn = false;
var openT = false;
var openF = false;
var openP = false;
var openI = false;
var balloonIsOpen = false;
var qstr;
var queries = {};
positionateBalloon = function(curTab, curFat, curPag, indice) {
/* SHOW RECTANGULO */
//xBola, yBola, xRect,yRect,wRect,hRect, xyPop
tope = tabs[curTab].faturas[curFat].pags[curPag].itens[indice].areaProps.yRect + "%";
lefte = tabs[curTab].faturas[curFat].pags[curPag].itens[indice].areaProps.xRect + "%";
widthe = tabs[curTab].faturas[curFat].pags[curPag].itens[indice].areaProps.wRect + "%";
heighte = tabs[curTab].faturas[curFat].pags[curPag].itens[indice].areaProps.hRect + "%";
$("#info-balloon").removeAttr("style");
var translateY, translateX;
$("#info-balloon").removeClass("mobile");
switch (tabs[curTab].faturas[curFat].pags[curPag].itens[indice].areaProps.xPop) {
case "left":
le = tabs[curTab].faturas[curFat].pags[curPag].itens[indice].areaProps.xRect;
$("#info-balloon").css({
left: le + "%",
right: "auto",
"margin-left": 0,
"margin-right": "22px",
});
translateX = "0";
//console.log('l')
break;
case "right":
(ri = 100 - (tabs[curTab].faturas[curFat].pags[curPag].itens[indice].areaProps.xRect + tabs[curTab].faturas[curFat].pags[curPag].itens[indice].areaProps.wRect)),
$("#info-balloon").css({
left: "auto",
right: ri + "%",
"margin-left": "22px",
"margin-right": 0,
});
translateX = "0";
//console.log('r')
break;
case "center":
default:
le = tabs[curTab].faturas[curFat].pags[curPag].itens[indice].areaProps.xRect + tabs[curTab].faturas[curFat].pags[curPag].itens[indice].areaProps.wRect / 2;
$("#info-balloon").css({
left: le + "%",
right: "auto",
"margin-left": 0,
"margin-right": 0,
});
translateX = "-50%";
//console.log('c')
break;
}
switch (tabs[curTab].faturas[curFat].pags[curPag].itens[indice].areaProps.yPop) {
case "top":
$("#info-balloon").css({
top: "auto",
bottom: "calc(" + "100%" + " - " + tope + ")",
height: "auto",
});
$("#info-balloon").addClass("bottom-seta");
translateY = "0";
//console.log('t')
break;
case "bottom":
$("#info-balloon").css({
top: tabs[curTab].faturas[curFat].pags[curPag].itens[indice].areaProps.yRect + tabs[curTab].faturas[curFat].pags[curPag].itens[indice].areaProps.hRect + "%",
bottom: "auto",
"margin-top": "22px",
height: "auto",
});
//console.log('b')
translateY = "0";
break;
case "middle":
default:
if (tabs[curTab].faturas[curFat].pags[curPag].itens[indice].areaProps.xPop == "left") {
$("#info-balloon").css({
left: "auto",
right: 100 - tabs[curTab].faturas[curFat].pags[curPag].itens[indice].areaProps.xRect + "%",
});
} else if (tabs[curTab].faturas[curFat].pags[curPag].itens[indice].areaProps.xPop == "right") {
//console.log("a")
$("#info-balloon").css({
right: "auto",
left: tabs[curTab].faturas[curFat].pags[curPag].itens[indice].areaProps.xRect + tabs[curTab].faturas[curFat].pags[curPag].itens[indice].areaProps.wRect + "%",
});
}
$("#info-balloon").css({
top: tabs[curTab].faturas[curFat].pags[curPag].itens[indice].areaProps.yRect + tabs[curTab].faturas[curFat].pags[curPag].itens[indice].areaProps.hRect / 2 + "%",
bottom: "auto",
width: "50%",
height: "auto",
});
translateY = "-50%";
//console.log('m')
break;
}
translate = "translateY(" + translateY + ") translateX(" + translateX + ")";
$("#info-balloon").css({
transform: translate
});
$("#info-balloon").removeClass();
$("#info-balloon").addClass(String(tabs[curTab].faturas[curFat].pags[curPag].itens[indice].areaProps.yPop + "_" + tabs[curTab].faturas[curFat].pags[curPag].itens[indice].areaProps.xPop));
if ($(window).width() < 768) {
$("#info-balloon").css({
top: "calc(" + (tabs[curTab].faturas[curFat].pags[curPag].itens[indice].areaProps.yRect + tabs[curTab].faturas[curFat].pags[curPag].itens[indice].areaProps.hRect) + "% + 22px)",
bottom: "auto",
"margin-top": "22px",
height: "auto",
});
}
$("#img-fatura").css("opacity", 0.2);
$("#info-balloon").show();
$("#area-bolas-rects").addClass("bolasOn");
$(".area-conteudo").addClass("add-modal");
$("#area-bolas-rects .rectangulo").show();
ratio = $("#img-fatura").height() / $("#area-bolas-rects").height();
ratio == 0 ? (ratio = 1) : (ratio = ratio);
var strTop = "calc(" + tope.toString() + " * " + ratio.toString() + ")";
var strhei = "calc(" + heighte.toString() + " * " + ratio.toString() + ")";
//console.log( "bolas : " + $('#area-bolas-rects').height() + " | ratio : " + ratio.toString() + " | imagem : " + $('#img-fatura').height() + " - " + strTop)
//console.log(strTop);
$("#area-bolas-rects .rectangulo").css({
top: strTop,
left: lefte,
width: widthe,
height: heighte,
});
};
$(".right-bt").click(function() {
curPag < $("#nav-pag li").length - 1 ? (curPag += 1) : (curPag = 0);
curItem = 0;
//console.log(curPag);
getNewPage();
//console.log(curPag);
createTabs(curTab, curFat, curPag, null, true);
activateMenuParentItem(curPag);
getNewPage();
$("#wrapfloatingmenu .sec-help.links").addClass("active");
$("#wrapfloatingmenu .faturas-in-tabs h4").removeClass("active");
scrolleToItem("#Tabify");
setNavPosition();
});
$(".left-bt").click(function() {
curPag > 0 ? (curPag -= 1) : (curPag = $("#nav-pag li").length - 1);
curItem = 0;
//console.log(curPag);
getNewPage();
//console.log(curPag);
createTabs(curTab, curFat, curPag, null, true);
activateMenuParentItem(curPag);
getNewPage();
$("#wrapfloatingmenu .sec-help.links").addClass("active");
$("#wrapfloatingmenu .faturas-in-tabs h4").removeClass("active");
scrolleToItem("#Tabify");
setNavPosition();
});
scrolleToItem = function(iTem) {
$elem = iTem;
//if(scrollToImag){
$("html, body").animate({
scrollTop: $($elem).offset().top - 20 - 50 - 30,
}, 1000);
//}
//console.log($( $elem ).offset().top - 20 - 50 + " scroll Y")
};
getItRight = function() {
var target;
//console.log("get it right")
//$("#nav-faturas").removeClass('affix affix-top affix-bottom').removeData('bs.affix')
if ($(window).width() >= 768) {
//console.log("adding");
//scrollToImag = false;
scrollToImag = true;
target = $("#right-side");
$("#col-cont-right").appendTo(target);
// $("#nav-faturas").affix({offset: {top: $("#nav-faturas").offset().top } });
if (floatingIsOn) {
////console.log("do nothing")
} else {
//console.log("do it")
floatingIsOn = true;
/*
$("#wrapfloatingmenu").affix({
offset: {
top: $("#wrapfloatingmenu").offset().top,
bottom: $("#Contentify").outerHeight(true) - $("#wrapfloatingmenu").height() //($("#Contentify").offset().top + $("#Contentify").height()) - $("#wrapfloatingmenu").offset().top
}
});
*/
}
} else {
//console.log("removing");
scrollToImag = true;
target = $("#left-side-fat-mobile");
$("#col-cont-right").appendTo(target);
//$("#nav-faturas").removeClass('affix affix-top affix-bottom').removeData('bs.affix')
if (floatingIsOn) {
floatingIsOn = false;
/*
$(window).off('.affix')
$("#wrapfloatingmenu").removeClass('affix affix-top affix-bottom').removeData('bs.affix')
*/
}
$("#info-balloon").css("top", parseInt($("#rect-border").css("height")) + parseInt($("#rect-border").css("top")));
$("#info-balloon").css("margin-top", "22px!important");
}
if (curItem != null && balloonIsOpen) {
positionateBalloon(curTab, curFat, curPag, curItem);
}
};
$.each(document.location.search.substr(1).split("&"), function(c, q) {
var i = q.split("=");
window.history.pushState("", document.title, window.location.pathname);
if (i != "") {
queries[i[0].toString()] = i[1].toString();
if (queries.t) {
openTab = true;
curTab = queries.t - 1;
openT = true;
//console.log
}
if (queries.f) {
openTab = true;
curFat = queries.f - 1;
openF = true;
}
if (queries.p) {
openTab = true;
curPag = queries.p - 1;
openP = true;
}
if (queries.i) {
openTab = true;
curItem = queries.i - 1;
openI = true;
}
}
});
/**/
$(window).resize(function() {
getItRight();
});
$(window).ready(function() {
//getItRight()
createTabs(curTab, curFat, curPag, curItem, false);
getItRight();
$("html, body").animate({
scrollTop: 5,
}, 1000);
});
</script>
</section>
<!-- FINAL DO BLOCO DE HTML LIVRE -->
<!-- FINAL DO BLOCO DE HTML LIVRE -->
<!-- FINAL DO BLOCO DE HTML LIVRE -->
</div>
</div>
<div class="ms-clear"></div>
</div>
</div>
</div>
</div>
<script type="text/javascript">
// date received format: 'dd/MM/yyyy hh:mm'; example: '02/11/2013 00:00'
var dateString = '18/08/2022 11:01';
var dateOnly = dateString.split(" ")[0];
var finalDate = dateOnly.replace("//g", ".");
</script>
<div style="display:none" id="hidZone">
<menu class="ms-hide">
<ie:menuitem id="MSOMenu_Help" iconsrc="/_layouts/15/images/HelpIcon.gif" onmenuclick="MSOWebPartPage_SetNewWindowLocation(MenuWebPart.getAttribute('helpLink'), MenuWebPart.getAttribute('helpMode'))" text="Ajuda" type="option"
style="display:none">
</ie:menuitem>
</menu>
</div>
</div>
<footer id="footer">
<span id="footer-awards">
<section id="awards-row" class="footer-awards alt-premios alt-patrocinio txt-align-center background-c-gray" data-hover-color="">
<div id="divAwardsPart" class="part">
<div class="pp-holder background-c-white" id="divawards" data-numitems="5">
<h4>Prémios e distinções</h4>
<ul id="awards-lst" class="item-holder">
<li class="item">
<a class="" href="https://www.meo.pt/premios" target="_self" title="Prémio Cinco Estrelas 2023"><div class="image-holder"><img src="https://conteudos.meo.pt/meo/PublishingImages/Menu/premios-e-patrocinios/premio-cinco-estrelas-meo-2023-icon.webp" alt="Prémio Cinco Estrelas 2023" title="Prémio Cinco Estrelas 2023"></div></a>
</li>
<li class="item">
<a class="" href="https://www.meo.pt/premios" target="_self" title="Escolha do Consumidor 2023"><div class="image-holder"><img src="https://conteudos.meo.pt/meo/PublishingImages/Menu/premios-e-patrocinios/escolha-consumidor-2023-meo-icon.webp" alt="Escolha do Consumidor 2023" title="Escolha do Consumidor 2023"></div></a>
</li>
<li class="item">
<a class="" href="https://www.meo.pt/premios" target="_self" title="Marca de Confiança 2022"><div class="image-holder"><img src="https://conteudos.meo.pt/meo/PublishingImages/Menu/premios-e-patrocinios/marca-confianca-2022-meo-icone.png" alt="Marca de Confiança 2022" title="Marca de Confiança 2022"></div></a>
</li>
<li class="item">
<a class="" href="/premios" target="_self" title="Marca Recomendada 2023"><div class="image-holder"><img src="https://conteudos.meo.pt/meo/PublishingImages/Menu/premios-e-patrocinios/marca-recomendada-2023-meo-icon.webp" alt="Marca Recomendada 2023" title="Marca Recomendada 2023"></div></a>
</li>
<li class="item">
<a class="" href="https://www.meo.pt/premios" target="_self" title="Melhor Loja Portugal 2021-2022"><div class="image-holder"><img src="https://conteudos.meo.pt/meo/PublishingImages/Menu/premios-e-patrocinios/melhor-loja-portugal-2021-2022-meo-icon.png" alt="Melhor Loja Portugal 2021-2022" title="Melhor Loja Portugal 2021-2022"></div></a>
</li>
</ul>
<ul class="hyperlinks">
<li><a class="btn-text btn-color-1" href="https://www.meo.pt/premios" target="_self">ver todos</a></li>
</ul>
</div>
<div class="pp-holder background-c-white" id="divsponsors" data-numitems="5">
<h4>Patrocínios</h4>
<ul id="sponsors-lst" class="item-holder">
<li class="item">
<a class="" href="https://www.meo.pt/lpc/patrocinio-surf" target="_blank" title="Liga MEO Surf"><div class="image-holder"><img src="https://conteudos.meo.pt/meo/PublishingImages/Menu/premios-e-patrocinios/liga-meo-surf-parceiro-icon.png" alt="Liga MEO Surf" title="Liga MEO Surf"></div></a>
</li>
<li class="item">
<a class="" href="https://maresvivas.meo.pt/" target="_blank" title="MEO Marés Vivas"><div class="image-holder"><img src="https://conteudos.meo.pt/meo/PublishingImages/Menu/premios-e-patrocinios/mares-vivas-meo-2023-icon.webp" alt="MEO Marés Vivas" title="MEO Marés Vivas"></div></a>
</li>
<li class="item">
<a class="" href="https://sudoeste.meo.pt/" target="_blank" title="MEO Sudoeste"><div class="image-holder"><img src="https://conteudos.meo.pt/meo/PublishingImages/Menu/premios-e-patrocinios/msw-parceiro-icon.png" alt="MEO Sudoeste" title="MEO Sudoeste"></div></a>
</li>
<li class="item">
<a class="" href="https://meokalorama.pt/" target="_blank" title="MEO Kalorama"><div class="image-holder"><img src="https://conteudos.meo.pt/meo/PublishingImages/Menu/premios-e-patrocinios/festival-meo-kalorama-icon.webp" alt="MEO Kalorama" title="MEO Kalorama"></div></a>
</li>
<li class="item">
<a class="" href="https://www.meo.pt/lpc/patrocinio-selecao" target="_blank" title="Seleção Nacional"><div class="image-holder"><img src="https://conteudos.meo.pt/meo/PublishingImages/Menu/premios-e-patrocinios/fpf-selecao-icon.png" alt="Seleção Nacional" title="Seleção Nacional"></div></a>
</li>
</ul>
</div>
</div>
</section>
</span>
<div class="footer-wrp">
<section id="sitemap-w" class="footer-nav-bar">
<section class="footer-nav-bar-one">
<section class="main-nav">
<section class="level-1">
<ul class="level-1-entries">
<li class="level-1-entry ">
<a href="https://www.meo.pt/loja/destaques-promocoes" class="level-1-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M1" data-eventtitle="DESTAQUES" data-eventlink="https://www.meo.pt/loja/destaques-promocoes"><span class="level-1-entry-link-title">Destaques</span></a>
<section class="level-2">
<div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">Destaques</span></div>
<ul class="level-2-entries">
<li class="level-2-entry no-submenu">
<a href="/metaverso" class="level-2-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M1.1" data-eventtitle="MEO no Metaverso" data-eventlink="/metaverso"><span class="level-2-entry-link-title">MEO no Metaverso</span></a>
</li>
<li class="level-2-entry no-submenu">
<a href="https://www.meo.pt/care" class="level-2-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M1.2" data-eventtitle="MEO Care" data-eventlink="https://www.meo.pt/care"><span class="level-2-entry-link-title">MEO Care</span></a>
</li>
<li class="level-2-entry no-submenu">
<a href="https://www.meo.pt/5g" class="level-2-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M1.3" data-eventtitle="5G em Portugal" data-eventlink="https://www.meo.pt/5g"><span class="level-2-entry-link-title">5G em Portugal</span></a>
</li>
<li class="level-2-entry no-submenu">
<a href="https://www.meo.pt/lpc/apple" class="level-2-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M1.4" data-eventtitle="Mundo Apple no MEO" data-eventlink="https://www.meo.pt/lpc/apple"><span class="level-2-entry-link-title">Mundo Apple no MEO</span></a>
</li>
<li class="level-2-entry no-submenu">
<a href="https://www.meo.pt/lpc/samsung" class="level-2-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M1.5" data-eventtitle="Universo Samsung Galaxy" data-eventlink="https://www.meo.pt/lpc/samsung"><span class="level-2-entry-link-title">Universo Samsung Galaxy</span></a>
</li>
<li class="level-2-entry no-submenu">
<a href="https://www.meo.pt/energia" class="level-2-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M1.6" data-eventtitle="Eletricidade" data-eventlink="https://www.meo.pt/energia"><span class="level-2-entry-link-title">Eletricidade</span></a>
</li>
</ul>
</section>
</li>
<li class="level-1-entry ">
<a href="https://loja.meo.pt/Equipamentos/Telemoveis" class="level-1-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M2" data-eventtitle="MAIS PROCURADOS" data-eventlink="https://loja.meo.pt/Equipamentos/Telemoveis"><span class="level-1-entry-link-title">Mais procurados</span></a>
<section class="level-2">
<div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">Mais procurados</span></div>
<ul class="level-2-entries">
<li class="level-2-entry no-submenu">
<a href="https://www.meo.pt/servicos/casa/fibra/pacotes-com-telemovel" class="level-2-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M2.1" data-eventtitle="Pacotes com Telemóvel" data-eventlink="https://www.meo.pt/servicos/casa/fibra/pacotes-com-telemovel"><span class="level-2-entry-link-title">Pacotes com telemóvel</span></a>
</li>
<li class="level-2-entry no-submenu">
<a href="https://www.meo.pt/servicos/casa/fibra/pacotes-tv-net-voz" class="level-2-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M2.2" data-eventtitle="TV+Net+Voz" data-eventlink="https://www.meo.pt/servicos/casa/fibra/pacotes-tv-net-voz"><span class="level-2-entry-link-title">TV+Net+Voz</span></a>
</li>
<li class="level-2-entry no-submenu">
<a href="https://www.meo.pt/servicos/movel/tarifarios-telemovel/pos-pago/m-movel" class="level-2-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M2.3" data-eventtitle="Pós-pagos" data-eventlink="https://www.meo.pt/servicos/movel/tarifarios-telemovel/pos-pago/m-movel"><span class="level-2-entry-link-title">Pós-pagos</span></a>
</li>
<li class="level-2-entry no-submenu">
<a href="https://www.meo.pt/servicos/casa/alterar-servicos/mudanca-de-casa" class="level-2-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M2.4" data-eventtitle="Mudança de casa" data-eventlink="https://www.meo.pt/servicos/casa/alterar-servicos/mudanca-de-casa"><span class="level-2-entry-link-title">Mudança de casa</span></a>
</li>
<li class="level-2-entry no-submenu">
<a href="https://www.meo.pt/servicos/casa/alterar-servicos/segunda-casa" class="level-2-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M2.5" data-eventtitle="TV na 2a Casa" data-eventlink="https://www.meo.pt/servicos/casa/alterar-servicos/segunda-casa"><span class="level-2-entry-link-title">TV na 2ª Casa</span></a>
</li>
</ul>
</section>
</li>
<li class="level-1-entry ">
<a href="https://www.meo.pt/loja/destaques-promocoes" class="level-1-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M3" data-eventtitle="LOJA ONLINE" data-eventlink="https://www.meo.pt/loja/destaques-promocoes"><span class="level-1-entry-link-title">Loja Online</span></a>
<section class="level-2">
<div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">Loja Online</span></div>
<ul class="level-2-entries">
<li class="level-2-entry no-submenu">
<a href="https://loja.meo.pt/Equipamentos/telemoveis#!filter=destaquesepromocoes_iPhone%2014_iPhone%2014%20Plus_iPhone%2014%20Pro_iPhone%2014%20Pro%20Max%24modalidadecompra_Presta%C3%A7%C3%B5es" class="level-2-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M3.1" data-eventtitle="Apple iPhone 14 Pro Max" data-eventlink="https://loja.meo.pt/Equipamentos/telemoveis#!filter=destaquesepromocoes_iPhone%2014_iPhone%2014%20Plus_iPhone%2014%20Pro_iPhone%2014%20Pro%20Max%24modalidadecompra_Presta%C3%A7%C3%B5es"><span class="level-2-entry-link-title">Apple iPhone 14 Pro Max</span></a>
</li>
<li class="level-2-entry no-submenu">
<a href="https://www.meo.pt/lpc/samsung-galaxy-s23" class="level-2-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M3.2" data-eventtitle="Samsung Galaxy S23 Ultra" data-eventlink="https://www.meo.pt/lpc/samsung-galaxy-s23"><span class="level-2-entry-link-title">Samsung Galaxy S23 Ultra</span></a>
</li>
<li class="level-2-entry no-submenu">
<a href="https://loja.meo.pt/Equipamentos/gaming/#!filter=modalidadecompra_Todos%24tipodeproduto_Consolas%20de%20Jogos%24marca_Sony&sorting=Relevance&viewtype=grid" class="level-2-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M3.3" data-eventtitle="PS5" data-eventlink="https://loja.meo.pt/Equipamentos/gaming/#!filter=modalidadecompra_Todos%24tipodeproduto_Consolas%20de%20Jogos%24marca_Sony&sorting=Relevance&viewtype=grid"><span class="level-2-entry-link-title">PS5</span></a>
</li>
<li class="level-2-entry no-submenu">
<a href="https://www.meo.pt/lpc/smartphones-prestacoes" class="level-2-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M3.4" data-eventtitle="Comprar a prestações" data-eventlink="https://www.meo.pt/lpc/smartphones-prestacoes"><span class="level-2-entry-link-title">Comprar a prestações</span></a>
</li>
<li class="level-2-entry no-submenu">
<a href="https://www.meo.pt/programa-meos" class="level-2-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M3.5" data-eventtitle="Comprar com MEOS" data-eventlink="https://www.meo.pt/programa-meos"><span class="level-2-entry-link-title">Comprar com MEOS</span></a>
</li>
<li class="level-2-entry no-submenu">
<a href="https://www.meo.pt/lpc/entregas-loja-online" class="level-2-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M3.6" data-eventtitle="Entregas grátis" data-eventlink="https://www.meo.pt/lpc/entregas-loja-online"><span class="level-2-entry-link-title">Entregas grátis</span></a>
</li>
<li class="level-2-entry no-submenu">
<a href="https://www.meo.pt/ajuda-e-suporte/produtos-meo/comprar-online/devolucao-e-assistencia-tecnica#assistenciatecnicaequipamentoscompradosonline" class="level-2-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M3.7" data-eventtitle="Trocas e devoluções grátis" data-eventlink="https://www.meo.pt/ajuda-e-suporte/produtos-meo/comprar-online/devolucao-e-assistencia-tecnica#assistenciatecnicaequipamentoscompradosonline"><span class="level-2-entry-link-title">Trocas e devoluções grátis</span></a>
</li>
</ul>
</section>
</li>
<li class="level-1-entry ">
<a href="https://www.meo.pt/ajuda-e-suporte" class="level-1-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M4" data-eventtitle="AJUDA E SUPORTE" data-eventlink="https://www.meo.pt/ajuda-e-suporte"><span class="level-1-entry-link-title">Ajuda e Suporte</span></a>
<section class="level-2">
<div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">Ajuda e Suporte</span></div>
<ul class="level-2-entries">
<li class="level-2-entry no-submenu">
<a href="https://www.meo.pt/ajuda-e-suporte#faturas-pagamentos-e-carregamentos" class="level-2-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M4.1" data-eventtitle="Faturas, pagamentos e carregamentos" data-eventlink="https://www.meo.pt/ajuda-e-suporte#faturas-pagamentos-e-carregamentos"><span class="level-2-entry-link-title">Faturas, pagamentos e carregamentos</span></a>
</li>
<li class="level-2-entry no-submenu">
<a href="https://www.meo.pt/ajuda-e-suporte#apoio-tecnico-e-configuracoes" class="level-2-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M4.2" data-eventtitle="Apoio técnico e configurações" data-eventlink="https://www.meo.pt/ajuda-e-suporte#apoio-tecnico-e-configuracoes"><span class="level-2-entry-link-title">Apoio técnico e configurações</span></a>
</li>
<li class="level-2-entry no-submenu">
<a href="https://www.meo.pt/ajuda-e-suporte#div-produtos-meo" class="level-2-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M4.3" data-eventtitle="Produtos MEO" data-eventlink="https://www.meo.pt/ajuda-e-suporte#div-produtos-meo"><span class="level-2-entry-link-title">Produtos MEO</span></a>
</li>
<li class="level-2-entry no-submenu">
<a href="https://www.meo.pt/ajuda-e-suporte#div-outros-servicos" class="level-2-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M4.4" data-eventtitle="Outros serviços" data-eventlink="https://www.meo.pt/ajuda-e-suporte#div-outros-servicos"><span class="level-2-entry-link-title">Outros serviços</span></a>
</li>
<li class="level-2-entry no-submenu">
<a href="https://www.meo.pt/suporte/seguranca-online" class="level-2-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M4.5" data-eventtitle="Segurança Online" data-eventlink="https://www.meo.pt/suporte/seguranca-online"><span class="level-2-entry-link-title">Segurança Online</span></a>
</li>
</ul>
</section>
</li>
<li class="level-1-entry ">
<a href="https://www.meo.pt/cliente" class="level-1-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M5" data-eventtitle="my MEO" data-eventlink="https://www.meo.pt/cliente"><span class="level-1-entry-link-title">my MEO</span></a>
<section class="level-2">
<div class="go-back-wrp"><button class="go-back-btn" aria-label="voltar ao menu anterior"></button><span class="go-back-title">my MEO</span></div>
<ul class="level-2-entries">
<li class="level-2-entry no-submenu">
<a href="https://cliente.meo.pt" class="level-2-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M5.1" data-eventtitle="Entrar" data-eventlink="https://cliente.meo.pt"><span class="level-2-entry-link-title">Entrar</span></a>
</li>
<li class="level-2-entry no-submenu">
<a href="https://cliente.meo.pt/meus-produtos" class="level-2-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M5.2" data-eventtitle="Os meus produtos" data-eventlink="https://cliente.meo.pt/meus-produtos"><span class="level-2-entry-link-title">Os meus produtos</span></a>
</li>
<li class="level-2-entry no-submenu">
<a href="https://cliente.meo.pt/escolher/consumosmovel" class="level-2-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M5.3" data-eventtitle="Os meus consumos telemóvel" data-eventlink="https://cliente.meo.pt/escolher/consumosmovel"><span class="level-2-entry-link-title">Os meus consumos</span></a>
</li>
<li class="level-2-entry no-submenu">
<a href="https://cliente.meo.pt/escolher/faturas" class="level-2-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M5.4" data-eventtitle="Faturas e pagamentos" data-eventlink="https://cliente.meo.pt/escolher/faturas"><span class="level-2-entry-link-title">Faturas e pagamentos</span></a>
</li>
<li class="level-2-entry no-submenu">
<a href="https://login.telecom.pt/Public/Register.aspx?appKey=Xa6qa5wG2b" class="level-2-entry-link " target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M5.5" data-eventtitle="Criar conta" data-eventlink="https://login.telecom.pt/Public/Register.aspx?appKey=Xa6qa5wG2b"><span class="level-2-entry-link-title">Criar conta</span></a>
</li>
</ul>
</section>
</li>
</ul>
</section>
</section>
</section>
<section class="footer-nav-bar-two"></section>
<section class="footer-nav-bar-three">
<ul class="menu-hyperlinks">
<li class="">
<a class="icon-blog" href="https://blog.meo.pt/" target="_blank" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M" data-eventtitle="Blog MEO" data-eventlink="https://blog.meo.pt/"><span class="hyperlinks-txt">Blog MEO</span><span class="hyperlinks-desc">Conhece as tendências e novidades</span></a>
</li>
<li class="">
<a class="icon-meo-forum" href="https://forum.meo.pt/" target="_blank" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M" data-eventtitle="MEO Fórum" data-eventlink="https://forum.meo.pt/"><span class="hyperlinks-txt">MEO Fórum</span><span class="hyperlinks-desc">Pergunta, responde e contribui</span></a>
</li>
<li class="">
<a class="icon-gps" href="https://www.meo.pt/lojas" target="_self" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M" data-eventtitle="Lojas MEO" data-eventlink="https://www.meo.pt/lojas"><span class="hyperlinks-txt">Lojas MEO</span><span class="hyperlinks-desc">Encontra a loja mais próxima</span></a>
</li>
</ul>
</section>
</section>
<div id="footer-content" class="footer-content">
<section class="footer-top">
<section class="footer-top-one">
<ul class="menu-hyperlinks">
<li class="">
<a class="" href="https://www.altice.pt/pt/politica-privacidade" target="_blank" data-eventregion="M_LINKSRODAPE" data-eventclick="M_M" data-eventtitle="Politica de Privacidade" data-eventlink="https://www.altice.pt/pt/politica-privacidade"><span class="hyperlinks-txt">Política de Privacidade</span></a>
</li>
<li class="">
<a class="" href="https://www.altice.pt/pt/rgpd" target="_blank" data-eventregion="M_LINKSRODAPE" data-eventclick="M_M" data-eventtitle="RGPD" data-eventlink="https://www.altice.pt/pt/rgpd"><span class="hyperlinks-txt">RGPD</span></a>
</li>
<li class=""><a class="" href="#!" target="_self"><span class="hyperlinks-txt">Definições de Privacidade</span></a></li>
<li class="">
<a class="" href="https://conteudos.meo.pt/meo/Documentos/Qualidade-Servico/Qualidade-Servico-Telefonico.pdf" target="_blank" data-eventregion="M_LINKSRODAPE" data-eventclick="M_M" data-eventtitle="Qualidade do Serviço" data-eventlink="https://conteudos.meo.pt/meo/Documentos/Qualidade-Servico/Qualidade-Servico-Telefonico.pdf"><span class="hyperlinks-txt">Qualidade do Serviço</span></a>
</li>
<li class="">
<a class="" href="/condicoes-de-utilizacao" target="_self" data-eventregion="M_LINKSRODAPE" data-eventclick="M_M" data-eventtitle="Condições de Utilização" data-eventlink="/condicoes-de-utilizacao"><span class="hyperlinks-txt">Condições de Utilização</span></a>
</li>
<li class="">
<a class="" href="/condicoes-2023" target="_self" data-eventregion="M_LINKSRODAPE" data-eventclick="M_M" data-eventtitle="Preços 2023" data-eventlink="/condicoes-2023"><span class="hyperlinks-txt">Preços 2023</span></a></li>
<li class="">
<a class="" href="/intermediacao-credito" target="_self" data-eventregion="M_LINKSRODAPE" data-eventclick="M_M" data-eventtitle="Intermediação de Crédito" data-eventlink="/intermediacao-credito"><span class="hyperlinks-txt">Intermediação de Crédito</span></a>
</li>
<li class=""><a class="" href="/contactos" target="_self" data-eventregion="M_LINKSRODAPE" data-eventclick="M_M" data-eventtitle="Contactos" data-eventlink="/contactos"><span class="hyperlinks-txt">Contactos</span></a></li>
<li class=""><a class="" href="https://www.altice.pt/pt/contactos/provedoria-cliente" target="_blank"><span class="hyperlinks-txt">Provedoria do Cliente</span></a></li>
</ul>
</section>
<section class="footer-top-two"></section>
<section class="footer-top-three">
<ul class="menu-hyperlinks">
<li class="">
<a class="complaint-book" href="https://livroreclamacoes.pt/" target="_blank" data-eventregion="M_LINKSRODAPE" data-eventclick="M_M" data-eventtitle="Livro de Reclamações" data-eventlink="https://livroreclamacoes.pt/"><span class="hyperlinks-txt">Livro de Reclamações</span><span class="hyperlinks-desc">Livro de Reclamações</span></a>
</li>
<li>
<p id="pLastUpdate" class="last-updated">Atualizado<br>em 18 ago 2022</p>
</li>
</ul>
</section>
</section>
<section class="footer-bottom">
<section class="footer-bottom-one">
<ul class="menu-hyperlinks">
<li>
<div class="copyrights">
<p class="tiny">© Todos os direitos reservados.</p>
</div>
</li>
</ul>
<section class="social-networks ">
<p class="social-networks-title">Segue-nos</p>
<ul class="social-networks-list">
<li class="">
<a class="social-icon-instagram" href="http://instagram.com/meoinstagram" target="_blank" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M" data-eventtitle="Instagram" data-eventlink="http://instagram.com/meoinstagram"><span class="hyperlinks-txt">Instagram</span><span class="hyperlinks-desc">Instagram</span></a>
</li>
<li class="">
<a class="social-icon-linkedin" href="https://www.linkedin.com/company/altice-portugal/" target="_blank" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M" data-eventtitle="Linkedin" data-eventlink="https://www.linkedin.com/company/altice-portugal/"><span class="hyperlinks-txt">LinkedIn</span><span class="hyperlinks-desc">LinkedIn</span></a>
</li>
<li class="">
<a class="social-icon-facebook" href="http://www.facebook.com/meo" target="_blank" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M" data-eventtitle="Facebook" data-eventlink="http://www.facebook.com/meo"><span class="hyperlinks-txt">Facebook</span><span class="hyperlinks-desc">Facebook</span></a>
</li>
<li class="">
<a class="social-icon-twitter" href="http://twitter.com/meopt" target="_blank" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M" data-eventtitle="Twitter" data-eventlink="http://twitter.com/meopt"><span class="hyperlinks-txt">Twitter</span><span class="hyperlinks-desc">Twitter</span></a>
</li>
<li class="">
<a class="social-icon-youtube" href="http://www.youtube.com/meo" target="_blank" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M" data-eventtitle="YouTube" data-eventlink="http://www.youtube.com/meo"><span class="hyperlinks-txt">YouTube</span><span class="hyperlinks-desc">YouTube</span></a>
</li>
<li class="">
<a class="social-icon-tiktok" href="https://vm.tiktok.com/ZMLvvbFRD/" target="_blank" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M" data-eventtitle="TikTok" data-eventlink="https://vm.tiktok.com/ZMLvvbFRD/"><span class="hyperlinks-txt">TikTok</span><span class="hyperlinks-desc">TikTok</span></a>
</li>
<li class="">
<a class="social-icon-spotify" href="https://open.spotify.com/user/ad3st53yif6xeoyrkf00253z7" target="_blank" data-eventregion="M_FOOTERLINKS" data-eventclick="M_M" data-eventtitle="Spotify" data-eventlink="https://open.spotify.com/user/ad3st53yif6xeoyrkf00253z7"><span class="hyperlinks-txt">Spotify</span><span class="hyperlinks-desc">Spotify</span></a>
</li>
</ul>
</section>
</section>
<section class="footer-bottom-two"></section>
<section class="footer-bottom-three">
<ul class="menu-hyperlinks">
<li>
<div class="logo-footer"> <a href="http://altice.pt" target="_blank"> <img src="https://conteudos.meo.pt/Style%20Library/brand/resources/images/altice_logo_white_footer.png" alt=""> </a> </div>
</li>
</ul>
</section>
</section>
</div>
</div>
<!-- menuv2.js injects here -->
<script type="text/javascript">
CreateFullFooter(ISites.Configurations.AppId, true, true, true, true);
if (typeof finalDate != "undefined") {
var itemDateDisplayDiv = $('.data_rev').html('Última atualização: ');
itemDateDisplayDiv.append(finalDate);
}
</script>
</footer>
</div>
<!-- HTML AI -->
</div>
</div>
</form>
Text Content
DAMOS VALOR À SUA PRIVACIDADE Nós e os nossos parceiros armazenamos e/ou acedemos a informações dos dispositivos, tais como cookies, e processamos dados pessoais, tais como identificadores exclusivos e informações padrão enviadas pelos dispositivos, para fins relacionados com anúncios e conteúdos personalizados, medição de anúncios e conteúdos e perspetivas sobre o público, assim como para desenvolver e melhorar produtos. Com a sua permissão, nós e os nossos parceiros poderemos usar identificação e dados de geolocalização precisos através da procura de dispositivos. Poderá clicar para consentir o processamento por nossa parte e pela parte dos nossos parceiros, conforme descrito acima. Em alternativa, pode aceder a informações mais pormenorizadas e alterar as suas preferências antes de consentir ou recusar o consentimento. Tenha em atenção que algum processamento dos seus dados pessoais poderá não exigir o seu consentimento, mas que tem o direito de se opor a esse processamento. As suas preferências serão aplicadas a um grupo de websites. Poderá alterar as suas preferências em qualquer momento, regressando a este site ou acedendo à nossa política de privacidade. MAIS OPÇÕESCONCORDO Detetámos que tem o JavaScript desativado no seu browser. Para poder usar em pleno o site MEO é necessário ter o JavaScript ativado. * Particulares * Empresas * SAPO * MEO Blueticket * Condições de oferta dos serviços * Ocorrências * English * 5G 5G * Sente que é real * Smartphones 5G * Máxima velocidade * Serviços Serviços * Para casa Para casa * TV+Net+Voz * TV+Net+Voz+Móvel * Mudar de Casa * Testar cobertura * Adicionar serviços Adicionar serviços * Adicionar cartões telemóvel * Mais Net no telemóvel * Segunda casa * Internet Fibra Internet Fibra * MEO Smart WiFi * Melhor experiência Net * Testar velocidade * Telefone fixo Telefone fixo * Serviço telefónico * Tarifários * Cartões Hello * Tarifa Social Internet * Móvel Móvel * Tarifários telemóvel Tarifários telemóvel * Pós-pagos * Pré-pagos * Roaming * Internacional * Mais net e serviços Mais net e serviços * Net Segura * Adicionar net telemóvel * Apps e Serviços * Waiting Rings * Net para PC/Tablet Net para PC/Tablet * Pós-pagos * Pré-pagos * MEO Home * Smart Living * Casa Digital * Eletricidade * MEO Care MEO Care * Conhecer MEO Care * Saúde * Animais * Casa * Seniores * Tecnologia * Assistente Pessoal * Loja Online Loja Online * Destaques e promoções Destaques e promoções * Promoções * Mundo Apple * Universo Samsung Galaxy * Mi Xiaomi * Huawei Series * Telemóveis Telemóveis * Apple * OPPO * Samsung * Xiaomi * Recondicionados iPhone * Smartphones 5G * Ver todos * Acessórios Acessórios * Audio e Música * Cabos e Carregadores * Capas e Películas * Informática Informática * PCs e Impressoras * Acessórios * Smart TVs e Box 4K * Smartwatches * Gaming Gaming * Consolas * Jogos * Acessórios * Mais produtos Mais produtos * Acessórios * Tablets * Eletrodomésticos * Smart Living * Routers e WiFi * Bilhetes * Oportunidades * TV TV * Ver TV agora * Novidades Novidades * Em destaque * Melhor experiência TV * Canais e Programação Canais e Programação * Lista de canais * Guia TV * Temáticas Temáticas * Filmes e Séries * Desporto * Infantil * Entretenimento * Música * Internacional * Informação * TV Multiplataforma TV Multiplataforma * Android TV * Apple TV * MEO Go * Sapo Mag * Suporte Suporte * my MEO * Ajuda Ajuda * Apoio técnico * Faturas e Pagamentos * Produtos MEO * Outros serviços * MEO Fórum my MEO my MEO * Entrar * Registe-se É cliente MEO Empresas? Entrar A tua área de cliente onde e quando quiseres * Os meus produtos * As minhas faturas * Consultar encomendas * Os meus MEOS * Ofertas * Pedidos e mensagens MEOS MEOS Saber mais * Aderir aos MEOS * Em destaque * Telemóveis * Experiências * Sensações * Intervenção Social * Smart TVs e BOX 4K * Edição MEOS Carrinho AJUDA E SUPORTE – FATURA INTERATIVA | MEO COMPREENDER A SUA FATURA CONHEÇA EM DETALHE O CONTEÚDO DAS VÁRIAS SECÇÕES DA SUA FATURA * 1ª Fatura - Pacotes * Fatura Pacotes * 1ª Fatura - Telemóvel * Fatura - Telemóvel DÚVIDAS NA FATURA? Saiba como está organizada e veja as explicações passo a passo. 1ª FATURA - PACOTES PÁGINA 1 * Área de Cliente * Dados de Cliente * Resumo da Fatura * Valor a Pagar * Modalidades de Pagamento PÁGINA 2 * Adesões * Mensalidades do Serviço * Mensalidades Televisão * Mensalidades Telemóvel * Mensalidades Equipamentos * Fatura Electrónica * QR Code PÁGINA 3 * Consumos AJUDA E SUPORTE * Área de Cliente * Consultar a sua fatura * Consultar detalhe de comunicações * Compreender valor de fatura superior ao esperado * Pagar fatura AJUDA E SUPORTE * Área de Cliente * Consultar a sua fatura * Consultar detalhe de comunicações * Compreender valor de fatura superior ao esperado * Pagar fatura * 1 * 2 * 3 + + + + + Nota: A fatura apresentada é apenas um exemplo. Os valores apresentados são exemplificativos. PRÉMIOS E DISTINÇÕES * * * * * * ver todos PATROCÍNIOS * * * * * * Destaques Destaques * MEO no Metaverso * MEO Care * 5G em Portugal * Mundo Apple no MEO * Universo Samsung Galaxy * Eletricidade * Mais procurados Mais procurados * Pacotes com telemóvel * TV+Net+Voz * Pós-pagos * Mudança de casa * TV na 2ª Casa * Loja Online Loja Online * Apple iPhone 14 Pro Max * Samsung Galaxy S23 Ultra * PS5 * Comprar a prestações * Comprar com MEOS * Entregas grátis * Trocas e devoluções grátis * Ajuda e Suporte Ajuda e Suporte * Faturas, pagamentos e carregamentos * Apoio técnico e configurações * Produtos MEO * Outros serviços * Segurança Online * my MEO my MEO * Entrar * Os meus produtos * Os meus consumos * Faturas e pagamentos * Criar conta * Blog MEOConhece as tendências e novidades * MEO FórumPergunta, responde e contribui * Lojas MEOEncontra a loja mais próxima * Política de Privacidade * RGPD * Definições de Privacidade * Qualidade do Serviço * Condições de Utilização * Preços 2023 * Intermediação de Crédito * Contactos * Provedoria do Cliente * Livro de ReclamaçõesLivro de Reclamações * Atualizado em 18 ago 2022 * © Todos os direitos reservados. Segue-nos * InstagramInstagram * LinkedInLinkedIn * FacebookFacebook * TwitterTwitter * YouTubeYouTube * TikTokTikTok * SpotifySpotify * Queres ajuda? Mais info Close Joao do MEO Esclarece todas as questões com um especialista MEOSIM LIGUEM-ME Agora não Close Queres ajuda? Mais info Adere ao MEO Esclarece aqui todas as questões comerciais Telemóvel 131323334394041444647484955818486351352353380 Quando AgoraDaqui a 1 minutoDaqui a 3 minutosDaqui a 5 minutosDaqui a 10 minutosDaqui a 15 minutos17:0018:0019:0020:0021:0022:0023:00Amanhã 10:00Amanhã 11:00Amanhã 12:00Amanhã 13:00Amanhã 14:00Amanhã 15:00Amanhã 16:00Amanhã 17:00Amanhã 18:00Amanhã 19:00Amanhã 20:00Amanhã 21:00Amanhã 22:00Amanhã 23:00 Liguem-me Grátis Para apoio ao cliente acede aqui Estamos a ligar do número 220 432 060. Ligado Obrigado pelo contacto Como classificas esta experiência sendo 1 muito má e 10 muito boa? * 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10 Recomendarias a um amigo sendo 1 nunca e 10 com certeza? * 1 * 2 * 3 * 4 * 5 * 6 * 7 * 8 * 9 * 10 Escolhe uma opção Enviar Enviado Esperamos que voltes em breve Fechar Voltar