{"ok":true,"data":null,"error":null,"modules":{"TAccountSupport":"PG1vZHVsZSBuYW1lPSJUQWNjb3VudFN1cHBvcnQiPg0KDQoNCg0KDQoNCjx0ZW1wbGF0ZSBuYW1lPSJUQWNjb3VudFN1cHBvcnQiICA+CjxtZXRhIGNoYXJzZXQ9IlVURi04IiAvPgo8c2VjdGlvbiBjbGFzcz0ic3B0IiBwbGFudGlsbGE9IlRBY2NvdW50U3VwcG9ydCI+CgogICAgPGRpdiBjbGFzcz0ic3B0LXJlaiI+CgogICAgICAgIDwhLS0g4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQIENPTFVNTkEgSVpRVUlFUkRBOiBFTCBFWFBFRElFTlRFIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAtLT4KICAgICAgICA8ZGl2IGNsYXNzPSJzcHQtY3VlcnBvIj4KCiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwdC1qcy1jYWIiPjwvZGl2PgoKICAgICAgICAgICAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9InNwdC1heXVkYSI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3B0LWF5dWRhLWljb25vIj48aWNvbmlmeS1pY29uIGljb249Imx1Y2lkZTpoZWFkcGhvbmVzIj48L2ljb25pZnktaWNvbj48L3NwYW4+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcHQtYXl1ZGEtdHh0Ij4KICAgICAgICAgICAgICAgICAgICA8Yj7Cv05lY2VzaXRhcyBheXVkYT88L2I+CiAgICAgICAgICAgICAgICAgICAgPHA+TnVlc3RybyBlcXVpcG8gdGUgYXRpZW5kZSBjb24gY3VhbHF1aWVyIGR1ZGEsIGluY2lkZW5jaWEgbyBjb25zdWx0YSBzb2JyZSB0dXMgcGVkaWRvcy48L3A+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwdC1heXVkYS1hY2Npb25lcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic3B0LWJ0biBzcHQtYnRuLXByaW1hcmlvIHNwdC1qcy1hYnJpciIgaHJlZj0iamF2YXNjcmlwdDo7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGljb25pZnktaWNvbiBpY29uPSJsdWNpZGU6Y2lyY2xlLXBsdXMiPjwvaWNvbmlmeS1pY29uPiBBYnJpciBleHBlZGllbnRlCiAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJzcHQtYnRuIHNwdC1idG4tc2VjdW5kYXJpbyBzcHQtanMtY2hhdCIgaHJlZj0iamF2YXNjcmlwdDo7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGljb25pZnktaWNvbiBpY29uPSJsdWNpZGU6bWVzc2FnZS1jaXJjbGUiPjwvaWNvbmlmeS1pY29uPiBJbmljaWFyIGNoYXQKICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNwdC1idG4gc3B0LWJ0bi1wbGFubyIgaHJlZj0iL2F5dWRhIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGljb25pZnktaWNvbiBpY29uPSJsdWNpZGU6Ym9vay1vcGVuIj48L2ljb25pZnktaWNvbj4gQ2VudHJvIGRlIGF5dWRhCiAgICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvc2VjdGlvbj4KCiAgICAgICAgICAgIDwhLS0g4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQIFZJU1RBIDE6IEVMIExJU1RBRE8g4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQIC0tPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcHQtanMtbGlzdGFkbyI+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwdC1jaWZyYXMiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwdC1jaWZyYSI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzcHQtY2lmcmEtaWNvbm8gc3B0LXQtYXp1bCI+PGljb25pZnktaWNvbiBpY29uPSJsdWNpZGU6Y2xvY2siPjwvaWNvbmlmeS1pY29uPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNwdC1jaWZyYS10eHQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGIgY2xhc3M9InNwdC1qcy1jLWFiaWVydGFzIj7igJQ8L2I+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c21hbGw+QWJpZXJ0YXM8L3NtYWxsPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+Q29uIHJlc3B1ZXN0YSBwZW5kaWVudGU8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcHQtY2lmcmEiPgogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3B0LWNpZnJhLWljb25vIHNwdC10LXZlcmRlIj48aWNvbmlmeS1pY29uIGljb249Imx1Y2lkZTpjaXJjbGUtY2hlY2siPjwvaWNvbmlmeS1pY29uPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNwdC1jaWZyYS10eHQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGIgY2xhc3M9InNwdC1qcy1jLXJlc3VlbHRhcyI+4oCUPC9iPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNtYWxsPlJlc3VlbHRhczwvc21hbGw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5FeHBlZGllbnRlcyBjZXJyYWRvcyBjb24gc29sdWNpw7NuPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3B0LWNpZnJhIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNwdC1jaWZyYS1pY29ubyBzcHQtdC1hbWJhciI+PGljb25pZnktaWNvbiBpY29uPSJsdWNpZGU6bWVzc2FnZS1zcXVhcmUiPjwvaWNvbmlmeS1pY29uPjwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNwdC1jaWZyYS10eHQiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGIgY2xhc3M9InNwdC1qcy1jLXNpbmxlZXIiPuKAlDwvYj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbD5TaW4gbGVlcjwvc21hbGw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5NZW5zYWplcyBkZSBzb3BvcnRlPC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3B0LWNpZnJhIj4KICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNwdC1jaWZyYS1pY29ubyBzcHQtdC1ncmlzIj48aWNvbmlmeS1pY29uIGljb249Imx1Y2lkZTppbmJveCI+PC9pY29uaWZ5LWljb24+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3B0LWNpZnJhLXR4dCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YiBjbGFzcz0ic3B0LWpzLWMtdG90YWwiPuKAlDwvYj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzbWFsbD5FeHBlZGllbnRlczwvc21hbGw+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3Bhbj5EZXNkZSBxdWUgdGllbmVzIGN1ZW50YTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3B0LXBlc3RhbmFzIj4KICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIHR5cGU9ImJ1dHRvbiIgY2xhc3M9InNwdC1wZXN0YW5hIG9uIHNwdC1qcy1wZXN0YW5hIiBkYXRhLXBhbmVsPSJhYmllcnRhcyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpY29uaWZ5LWljb24gaWNvbj0ibHVjaWRlOmluYm94Ij48L2ljb25pZnktaWNvbj4gQWJpZXJ0YXMKICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNwdC1jdWVudGEgc3B0LWpzLW4tYWJpZXJ0YXMiPjA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJzcHQtcGVzdGFuYSBzcHQtanMtcGVzdGFuYSIgZGF0YS1wYW5lbD0iY2VycmFkYXMiPgogICAgICAgICAgICAgICAgICAgICAgICA8aWNvbmlmeS1pY29uIGljb249Imx1Y2lkZTphcmNoaXZlIj48L2ljb25pZnktaWNvbj4gQ2VycmFkYXMKICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNwdC1jdWVudGEgc3B0LWpzLW4tY2VycmFkYXMiPjA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJzcHQtcGVzdGFuYSBzcHQtanMtcGVzdGFuYSIgZGF0YS1wYW5lbD0idG9kYXMiPgogICAgICAgICAgICAgICAgICAgICAgICA8aWNvbmlmeS1pY29uIGljb249Imx1Y2lkZTpsYXllcnMiPjwvaWNvbmlmeS1pY29uPiBUb2RhcwogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3B0LWN1ZW50YSBzcHQtanMtbi10b2RhcyI+MDwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwdC1maWx0cm9zIGFjLWZpbHRyb3MiPgogICAgICAgICAgICAgICAgICAgIDxsYWJlbCBjbGFzcz0iYWMtYnVzY2FyIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGljb25pZnktaWNvbiBpY29uPSJsdWNpZGU6c2VhcmNoIj48L2ljb25pZnktaWNvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InNlYXJjaCIgY2xhc3M9InNwdC1qcy1idXNjYXIiIHBsYWNlaG9sZGVyPSJCdXNjYXIgcG9yIGFzdW50bywgbsK6IGRlIGV4cGVkaWVudGUgbyBwZWRpZG/igKYiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPSJCdXNjYXIgZW4gdHVzIGNvbnN1bHRhcyI+CiAgICAgICAgICAgICAgICAgICAgPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGNsYXNzPSJhYy1zZWxlY3Qgc3B0LWpzLXRpcG8iIGFyaWEtbGFiZWw9IlRpcG8iPgogICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSIiPlRvZG9zIGxvcyB0aXBvczwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJpbmNpZGVuY2lhIj5JbmNpZGVuY2lhczwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJjb25zdWx0YSI+Q29uc3VsdGFzPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgICAgICAgICAgICAgPHNlbGVjdCBjbGFzcz0iYWMtc2VsZWN0IHNwdC1qcy1lc3RhZG8iIGFyaWEtbGFiZWw9IkVzdGFkbyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9IiI+VG9kb3MgbG9zIGVzdGFkb3M8L29wdGlvbj4KICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0id2FpdGluZyI+RW4gZXNwZXJhPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImF0dGVuZGVkIj5FbiBjdXJzbzwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJzb2x2ZWQiPlJlc3VlbHRhczwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHZhbHVlPSJjbG9zZWQiPkNlcnJhZGFzPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdmFsdWU9ImV4cGlyZWQiPkNhZHVjYWRhczwvb3B0aW9uPgogICAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9InNwdC1jYXJkIHNwdC1qcy1saXN0YS1jYXJkIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcHQtY2FyZC1jYWIiPgogICAgICAgICAgICAgICAgICAgICAgICA8ZGl2PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPGgzPk1pcyBleHBlZGllbnRlczwvaDM+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cD5JbmNpZGVuY2lhcyBhYmllcnRhcyBkZXNkZSB1biBwZWRpZG8geSBjb25zdWx0YXMgZ2VuZXJhbGVzLjwvcD4KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3B0LXRhYmxhLWNhamEgc3B0LWpzLXRhYmxhIj48L2Rpdj4KCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3B0LXBpZSBzcHQtanMtcGllIiBoaWRkZW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzcHQtanMtY3VlbnRhIj48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3NlY3Rpb24+CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJzcHQtY2FyZCBzcHQtanMtdmFjaW8iIGhpZGRlbj4KICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcHQtdmFjaW8iPgogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3B0LXZhY2lvLWljb25vIj48aWNvbmlmeS1pY29uIGljb249Imx1Y2lkZTppbmJveCI+PC9pY29uaWZ5LWljb24+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICA8YiBjbGFzcz0ic3B0LWpzLXZhY2lvLXRpdHVsbyI+Tm8gdGllbmVzIG5pbmd1bmEgaW5jaWRlbmNpYSBhYmllcnRhPC9iPgogICAgICAgICAgICAgICAgICAgICAgICA8cCBjbGFzcz0ic3B0LWpzLXZhY2lvLXRleHRvIj5DdWFuZG8gYWJyYXMgdW5hIGluY2lkZW5jaWEgc29icmUgdW4gcGVkaWRvIG8gbm9zIGhhZ2FzIHVuYSBjb25zdWx0YSwgYXBhcmVjZXLDoSBhcXXDrSBjb24gc3UgZXN0YWRvIHkgc3VzIHJlc3B1ZXN0YXMuPC9wPgogICAgICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz0ic3B0LWJ0biBzcHQtYnRuLXByaW1hcmlvIHNwdC1qcy1hYnJpciIgaHJlZj0iamF2YXNjcmlwdDo7Ij4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpY29uaWZ5LWljb24gaWNvbj0ibHVjaWRlOmNpcmNsZS1wbHVzIj48L2ljb25pZnktaWNvbj4gQWJyaXIgZXhwZWRpZW50ZQogICAgICAgICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L3NlY3Rpb24+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPCEtLSDilZDilZDilZDilZDilZDilZDilZDilZDilZAgVklTVEEgMjogTEEgRklDSEEg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQIC0tPgogICAgICAgICAgICA8YXJ0aWNsZSBjbGFzcz0ic3B0LWNhcmQgc3B0LWZpY2hhIHNwdC1qcy1maWNoYSIgaGlkZGVuPgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcHQtbnVtIj4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3B0LXRpcG8gc3B0LWpzLWYtdGlwbyI+PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzcHQtanMtZi1jb2RlIj48L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0ic3B0LWNvcGlhciBzcHQtanMtY29waWFyIiB0eXBlPSJidXR0b24iIHRpdGxlPSJDb3BpYXIgZWwgbsO6bWVybyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxpY29uaWZ5LWljb24gaWNvbj0ibHVjaWRlOmNvcHkiPjwvaWNvbmlmeS1pY29uPgogICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3B0LWRhdG9zIHNwdC1qcy1mLWRhdG9zIj48L2Rpdj4KCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcHQtaGlsbyBzcHQtanMtaGlsbyI+PC9kaXY+CiAgICAgICAgICAgIDwvYXJ0aWNsZT4KCiAgICAgICAgPC9kaXY+CgogICAgICAgIDwhLS0g4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQIENPTFVNTkEgREVSRUNIQTogTEEgT1BFUkFUSVZBIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAtLT4KICAgICAgICA8YXNpZGUgY2xhc3M9InNwdC1sYWRvIj4KCiAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJzcHQtY2FyZCBzcHQtanMtcGVkaWRvLWNhcmQiIGhpZGRlbj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwdC1sYWRvLWNhYiI+CiAgICAgICAgICAgICAgICAgICAgPGgzPlBlZGlkbyByZWxhY2lvbmFkbzwvaDM+CiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9InNwdC1lbmxhY2Ugc3B0LWpzLXAtdmVyIiBocmVmPSIjIj5WZXIgcGVkaWRvPC9hPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcHQtanMtcC1hcnRpY3Vsb3MiPjwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3B0LWpzLXAtZmlsYXMiPjwvZGl2PgogICAgICAgICAgICAgICAgPGEgY2xhc3M9InNwdC1idG4gc3B0LWJ0bi1zZWN1bmRhcmlvIHNwdC1qcy1wLXNlZ3VpbWllbnRvIiBocmVmPSIjIj4KICAgICAgICAgICAgICAgICAgICA8aWNvbmlmeS1pY29uIGljb249Imx1Y2lkZTp0cnVjayI+PC9pY29uaWZ5LWljb24+IFZlciBzZWd1aW1pZW50byBkZWwgZW52w61vCiAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgIDwvc2VjdGlvbj4KCiAgICAgICAgICAgIDxzZWN0aW9uIGNsYXNzPSJzcHQtY2FyZCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcHQtbGFkby1jYWIiPjxoMz5DYW5hbGVzIGRlIGF0ZW5jacOzbjwvaDM+PC9kaXY+CiAgICAgICAgICAgICAgICA8cCBjbGFzcz0ic3B0LWxhZG8tbm90YSI+RWxpZ2UgZWwgcXVlIG1lam9yIHNlIGFkYXB0ZSBhIHRpLjwvcD4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwdC1qcy1jYW5hbGVzIj48L2Rpdj4KICAgICAgICAgICAgPC9zZWN0aW9uPgoKICAgICAgICAgICAgPHNlY3Rpb24gY2xhc3M9InNwdC1jYXJkIHNwdC1qcy1mYXEtY2FyZCIgaGlkZGVuPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3B0LWxhZG8tY2FiIj4KICAgICAgICAgICAgICAgICAgICA8aDM+UHJlZ3VudGFzIGZyZWN1ZW50ZXM8L2gzPgogICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPSJzcHQtZW5sYWNlIiBocmVmPSIvYXl1ZGEiPlZlciB0b2RhczwvYT4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3B0LWZhcSBzcHQtanMtZmFxIj48L2Rpdj4KICAgICAgICAgICAgPC9zZWN0aW9uPgoKICAgICAgICA8L2FzaWRlPgoKICAgIDwvZGl2PgoKICAgIAogICAgICAgIDx0ZW1wbGF0ZSBjbGFzcz0ic3B0LXRwbC1kYXRvIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzcHQtZGF0byI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzcHQtZGF0by1pY29ubyI+PGljb25pZnktaWNvbj48L2ljb25pZnktaWNvbj48L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzcHQtZGF0by10eHQiPgogICAgICAgICAgICAgICAgPHNtYWxsPjwvc21hbGw+CiAgICAgICAgICAgICAgICA8Yj48L2I+CiAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgIDwvdGVtcGxhdGU+CgogICAgICAgIDx0ZW1wbGF0ZSBjbGFzcz0ic3B0LXRwbC1wLWZpbGEiPgogICAgICAgIDxkaXYgY2xhc3M9InNwdC1maWxhIj4KICAgICAgICAgICAgPHNwYW4+PC9zcGFuPgogICAgICAgICAgICA8Yj48L2I+CiAgICAgICAgPC9kaXY+CiAgICA8L3RlbXBsYXRlPgoKICAgICAgICA8dGVtcGxhdGUgY2xhc3M9InNwdC10cGwtcC1hcnRpY3VsbyI+CiAgICAgICAgPGRpdiBjbGFzcz0ic3B0LXByb2QiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcHQtcHJvZC10eHQiPgogICAgICAgICAgICAgICAgPGI+PC9iPgogICAgICAgICAgICAgICAgPHNtYWxsPjwvc21hbGw+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgPHRlbXBsYXRlIGNsYXNzPSJzcHQtdHBsLWNhbmFsIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzcHQtY2FuYWwiPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3B0LWNhbmFsLWljb25vIj48aWNvbmlmeS1pY29uPjwvaWNvbmlmeS1pY29uPjwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNwdC1jYW5hbC10eHQiPgogICAgICAgICAgICAgICAgPGI+PC9iPgogICAgICAgICAgICAgICAgPHNtYWxsPjwvc21hbGw+CiAgICAgICAgICAgICAgICA8ZW0+PC9lbT4KICAgICAgICAgICAgPC9zcGFuPgogICAgICAgIDwvZGl2PgogICAgPC90ZW1wbGF0ZT4KCiAgICAgICAgPHRlbXBsYXRlIGNsYXNzPSJzcHQtdHBsLWZhcSI+CiAgICAgICAgPGEgaHJlZj0iamF2YXNjcmlwdDo7Ij4KICAgICAgICAgICAgPGljb25pZnktaWNvbiBjbGFzcz0ic3B0LWZhcS1pIiBpY29uPSJsdWNpZGU6ZmlsZS10ZXh0Ij48L2ljb25pZnktaWNvbj4KICAgICAgICAgICAgPHNwYW4+PC9zcGFuPgogICAgICAgICAgICA8aWNvbmlmeS1pY29uIGNsYXNzPSJzcHQtZmFxLXgiIGljb249Imx1Y2lkZTpjaGV2cm9uLXJpZ2h0Ij48L2ljb25pZnktaWNvbj4KICAgICAgICA8L2E+CiAgICA8L3RlbXBsYXRlPgoKPC9zZWN0aW9uPgoNCg0KCjwvdGVtcGxhdGU+DQoNCjxzdHlsZSBuYW1lPSJUQWNjb3VudFN1cHBvcnQiPi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkAogICBTT1BPUlRFIOKAlCBlbCDDoXJlYSBkZSBjbGllbnRlCiAgIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAogICBTYWxlIGRlIGxhIG1hcXVldGEgYXByb2JhZGEgKGBEb2N1bWVudGFjaW9uL1BlbmRpbmdXb3Jrcy9tYXF1ZXRhcy9zb3BvcnRlLWNsaWVudGUqYCkuCgogICBMT1MgQ09MT1JFUyBTT04gTE9TIERFTCBFU0NBUEFSQVRFIChgLS1zZC0qYCksIE5PIExPUyBERUwgUEFORUwgVklFSk86CiAgIGVzdGEgcGFudGFsbGEgbGEgdmUgdW4gY29tcHJhZG9yLCB5IHVuIHNhbHRvIGRlIHZlcmRlIGEgYXp1bCBqdXN0byBhbAogICBlbnRyYXIgZW4gbGEgY3VlbnRhIHNlIG5vdGEuIFZhbiBDT04gUkVTUEFMRE8gZW4gZWwgcHVudG8gZGUgdXNvCiAgIC0tYHZhcigtLXNkLXRleHRvLCAjNDY1MTRhKWAtLSBwb3JxdWUgbG9zIGAtLXNkLSpgIGxvcyBzaXJ2ZQogICBgVFNlbGxlcnNVSWAgeSBlc3RhIHBhbnRhbGxhIHB1ZWRlIG1vbnRhcnNlIGVuIHVuIHBhbmVsIHF1ZSBubyBsYQogICBjYXJndWUuCgogICBUT0RPIENVRUxHQSBERSBgLnNwdGAuIEVuIGVsIHBhbmVsIGRlIGN1ZW50YSBjb252aXZlbiB2YXJpYXMgZmljaGFzCiAgIGFiaWVydGFzIGEgbGEgdmV6IGVuIGVsIG1pc21vIERPTTogdW5hIHJlZ2xhIHN1ZWx0YSAtLWBoMmAsIGAuY2FyZGAsCiAgIGBzZWxlY3RgLS0gZGVzY29sb2NhIGEgbGFzIHZlY2luYXMsIHkgZXNvIHlhIHNlIGhhIHBhZ2FkbyBlbgogICBgVE9yZGVyRGV0YWlsYCB5IGVuIGBUUmV0dXJuT3JkZXJgLiBBZGVtw6FzIGxhIHRpZW5kYSB0aWVuZSByZWdsYXMKICAgZ2xvYmFsZXMgYWdyZXNpdmFzIC0tdW5hIGZpamEgYGZvbnQ6IDEycHhgIGNvbiBsYSBmb3JtYSBjb3J0YSwgcXVlCiAgIGFycmFzYSBlbCB0YW1hw7FvIGhlcmVkYWRvIGRlIGN1YWxxdWllciBgc3BhbmAtLSB5IHNpbiBlbCBwcmVmaWpvIHNlCiAgIGN1ZWxhbi4KICAg4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQICovCgouc3B0ICp7Ym94LXNpemluZzpib3JkZXItYm94fQoKLyogYGNvbnRhaW5lci10eXBlYCBFTiBMQSBSQcONWjogbG9zIGNvcnRlcyBkZSBsYSBjYWJlY2VyYSBjb23Dum4gc29uCiAgIGBAY29udGFpbmVyYCB5IG5vIGBAbWVkaWFgIC0tbGEgcGFudGFsbGEgdml2ZSBkZW50cm8gZGVsIHBhbmVsLCBjb24gc3UgbWVuw7oKICAgZGUgfjIyMHB4IHkgdW4gY2FycmlsIGNvbmZpZ3VyYWJsZSBlbiBBcGFyaWVuY2lhLCBhc8OtIHF1ZSBlbCBhbmNobyBkZSBsYQogICBWRU5UQU5BIG5vIGRpY2UgbmFkYSBkZWwgcXVlIGxlIHF1ZWRhLS0uIFNpbiBlc3RvLCBsYSBjYWJlY2VyYSBubyBzZQogICByZW9yZGVuYSBudW5jYSBhbCBlc3RyZWNoYXJzZS4gKi8KLnNwdHtmb250LXNpemU6MTMuNXB4O2xpbmUtaGVpZ2h0OjEuNTtjb250YWluZXItdHlwZTppbmxpbmUtc2l6ZX0KLnNwdC1yZWp7ZGlzcGxheTpncmlkO2dyaWQtdGVtcGxhdGUtY29sdW1uczptaW5tYXgoMCwxZnIpIDMzMHB4O2dhcDoyMnB4O2FsaWduLWl0ZW1zOnN0YXJ0fQouc3B0LWN1ZXJwb3ttaW4td2lkdGg6MDtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2dhcDoyMnB4fQouc3B0LWxhZG97ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MThweDtwb3NpdGlvbjpzdGlja3k7dG9wOjIwcHh9CgovKiDilIDilIAgTEFTIE1JR0FTIFkgTEEgQ0FCRUNFUkEgWUEgTk8gU0UgUElOVEFOIEFRVcONIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAogICBFc3RhYmFuIGVuIGVzdGEgaG9qYSAtLWBzcHQtbWlnYXNgIGNvbiBzdSBtaWdhIGNvbm11dGFibGUgeSBgc3B0LWNhYmAgY29uIHVuCiAgIHTDrXR1bG8gZGUgMzBweC0tIHkgZXJhbiBlbCBmb3JtYXRvIGRlIEVTVEEgcGFudGFsbGEsIGRpc3RpbnRvIGRlbCBkZSBsYXMKICAgZGVtw6FzIHNlY2Npb25lcyBkZWwgcGFuZWwuIEFob3JhIGxhcyBwaW50YSBgQWNjb3VudEhlYWRlcmAgKGVsIGdlbWVsbyBKUywKICAgYHdpbmRvdy5BY2NvdW50SGVhZGVyYCkgY29uIGxhcyBjbGFzZXMgYGFjLSpgLCBjdXlhIGhvamEgdmlhamEgZW4KICAgYFRBY2NvdW50VUlgIChgVEFjY291bnRVSS9jc3MvVEFjY291bnRVSS5jc3NgKS4KCiAgIExvIMO6bmljbyBxdWUgaGFjZSBmYWx0YSBhcXXDrSBlcyBRVUlUQVJMRSBTVSBNQVJHRU4gSU5GRVJJT1I6IGxhIGNvbHVtbmEgZXMKICAgdW4gZmxleCBjb24gYGdhcDoyMnB4YCwgeSBjb24gbG9zIDE4cHggcXVlIHRyYWUgbGEgY2FiZWNlcmEgZGUgZsOhYnJpY2EKICAgcXVlZGFiYSBjYXNpIGVsIGRvYmxlIGRlIGh1ZWNvIGJham8gZWwgdMOtdHVsbyBxdWUgZW50cmUgY3VhbHF1aWVyIG90cm8gcGFyCiAgIGRlIGJsb3F1ZXMuICovCi5zcHQgLmFjLWNhYnttYXJnaW4tYm90dG9tOjB9CgovKiBFbCBgZm9udDppbmhlcml0YCBkZWwgcsOzdHVsbyAtLXVuIGA8c3Bhbj5gIGRlbnRybyBkZWwgYGgxYCBzYWxlIGEgMTJweCBwb3IgbGEKICAgcmVnbGEgZ2xvYmFsIGNvbiBzaG9ydGhhbmQtLSBTVUJJw5MgYSBsYSBob2phIGNvbcO6biwgcXVlIGVzIGRvbmRlIHZhbGUgcGFyYQogICB0b2RhcyBsYXMgZmljaGFzOiB2ZXIgbGEgbm90YSBlbiBgVEFjY291bnRVSS5jc3NgLiAqLwoKLyog4pSA4pSAIExhIHRhcmpldGEgZGUgYXl1ZGEuIFZhIEFSUklCQSwgbm8gYWwgcGllOiBlcyBsYSBwYXJ0ZSBkZSBsYQogICAgICBwYW50YWxsYSBxdWUgZXZpdGEgdW5hIGxsYW1hZGEuIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAogICBDb24gbWFyY28gYmxhbmNvLCBwZWRpZG8gcG9yIGVsIHVzdWFyaW8gZWwgMTAvMDkvMjAyNjogc2VwYXJhIGVsIGJsb3F1ZQogICB2ZXJkZSBkZWwgZm9uZG8gZGUgbGEgcGFudGFsbGEgc2luIGNhcmdhcmxvIGNvbiBvdHJhIGzDrW5lYSBkZSBjb2xvci4gKi8KLnNwdC1heXVkYXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDoxNnB4O3BhZGRpbmc6MjBweCAyMnB4OwogIGJvcmRlcjo1cHggc29saWQgI2ZmZjtib3JkZXItcmFkaXVzOnZhcigtLXNkLXJhZGlvLDE0cHgpOwogIGJhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KDE4MGRlZywjZjNmOWYzLCNlZWY2ZWUpfQouc3B0LWF5dWRhLWljb25ve2ZsZXg6MCAwIGF1dG87d2lkdGg6NTJweDtoZWlnaHQ6NTJweDtib3JkZXItcmFkaXVzOjUwJTtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7CiAgYmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgdmFyKC0tc2QtdmVyZGUtYm9yZGUsI2NmZTNkMik7Y29sb3I6dmFyKC0tc2QtdmVyZGUsIzA0NzEzYSk7Zm9udC1zaXplOjI1cHh9Ci5zcHQtYXl1ZGEtdHh0e2ZsZXg6MTttaW4td2lkdGg6MH0KLnNwdC1heXVkYS10eHQgYntkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxNS41cHg7Y29sb3I6dmFyKC0tc2QtdmVyZGUtb3NjdXJvLCMwMDVjMmQpfQouc3B0LWF5dWRhLXR4dCBwe21hcmdpbjozcHggMCAwO2ZvbnQtc2l6ZToxM3B4O2NvbG9yOnZhcigtLXNkLXRleHRvLCM0NjUxNGEpO21heC13aWR0aDo1MmNofQouc3B0LWF5dWRhLWFjY2lvbmVze2ZsZXg6MCAwIGF1dG87ZGlzcGxheTpmbGV4O2dhcDo5cHg7ZmxleC13cmFwOndyYXB9CgovKiBCb3RvbmVzLiBgPGRpdj5gL2A8YT5gIHkgbm8gYDxidXR0b24+YCBkb25kZSBzZWEgdGFyamV0YTogbGEgaG9qYQogICBnbG9iYWwgbGxldmEgYC5UQ29tcG9uZW50RVM2IGJ1dHRvbntoZWlnaHQ6MjVweDtkaXNwbGF5OmZsZXh9YC4gKi8KLnNwdC1idG57ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjdweDtwYWRkaW5nOjlweCAxNHB4O2JvcmRlci1yYWRpdXM6MTBweDsKICBmb250LXNpemU6MTNweDtmb250LXdlaWdodDo2MDA7Y3Vyc29yOnBvaW50ZXI7dGV4dC1kZWNvcmF0aW9uOm5vbmU7Ym9yZGVyOjFweCBzb2xpZCB0cmFuc3BhcmVudDt3aGl0ZS1zcGFjZTpub3dyYXB9Ci5zcHQtYnRuIGljb25pZnktaWNvbntmb250LXNpemU6MTZweH0KLnNwdC1idG4tcHJpbWFyaW97YmFja2dyb3VuZDp2YXIoLS1zZC12ZXJkZSwjMDQ3MTNhKTtjb2xvcjojZmZmfQouc3B0LWJ0bi1wcmltYXJpbzpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLXNkLXZlcmRlLW9zY3VybywjMDA1YzJkKX0KLnNwdC1idG4tc2VjdW5kYXJpb3tiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6dmFyKC0tc2QtdmVyZGUtb3NjdXJvLCMwMDVjMmQpO2JvcmRlci1jb2xvcjp2YXIoLS1zZC12ZXJkZS1ib3JkZSwjY2ZlM2QyKX0KLnNwdC1idG4tc2VjdW5kYXJpbzpob3ZlcntiYWNrZ3JvdW5kOnZhcigtLXNkLXZlcmRlLWNsYXJvLCNlZWY2ZWUpfQouc3B0LWJ0bi1wbGFub3tiYWNrZ3JvdW5kOiNmZmY7Y29sb3I6dmFyKC0tc2QtdGV4dG8sIzQ2NTE0YSk7Ym9yZGVyLWNvbG9yOnZhcigtLXNkLWJvcmRlLCNlNGVhZTQpfQouc3B0LWJ0bi1wbGFubzpob3Zlcntib3JkZXItY29sb3I6dmFyKC0tc2QtdmVyZGUtYm9yZGUsI2NmZTNkMik7Y29sb3I6dmFyKC0tc2QtdmVyZGUtb3NjdXJvLCMwMDVjMmQpfQoKLyogVGFyamV0YSBnZW7DqXJpY2EgKi8KLnNwdC1jYXJke2JvcmRlcjoxcHggc29saWQgdmFyKC0tc2QtYm9yZGUsI2U0ZWFlNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1zZC1yYWRpbywxNHB4KTtiYWNrZ3JvdW5kOiNmZmY7CiAgYm94LXNoYWRvdzp2YXIoLS1zZC1zb21icmEsMCAycHggMTBweCByZ2JhKDIwLDQwLDI1LC4wNikpfQouc3B0LWNhcmQtY2Fie2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47Z2FwOjEwcHg7cGFkZGluZzoxN3B4IDE4cHggNHB4fQouc3B0LWNhcmQtY2FiICsgLnNwdC10YWJsYS1jYWphe21hcmdpbi10b3A6MTBweH0KLnNwdC1jYXJkLWNhYiBoM3ttYXJnaW46MDtmb250LXNpemU6MTVweDtmb250LXdlaWdodDo3MDA7Y29sb3I6dmFyKC0tc2QtdmVyZGUtb3NjdXJvLCMwMDVjMmQpfQouc3B0LWNhcmQtY2FiIHB7bWFyZ2luOjNweCAwIDA7Zm9udC1zaXplOjEyLjVweDtjb2xvcjp2YXIoLS1zZC1zdWF2ZSwjNmI3YTcwKX0KLnNwdC1lbmxhY2V7Zm9udC1zaXplOjEyLjVweDtjb2xvcjp2YXIoLS1zZC12ZXJkZSwjMDQ3MTNhKTt0ZXh0LWRlY29yYXRpb246bm9uZTtmb250LXdlaWdodDo2MDA7d2hpdGUtc3BhY2U6bm93cmFwfQouc3B0LWVubGFjZTpob3Zlcnt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lfQoKLyogUMOtbGRvcmFzIGRlIGVzdGFkby4KICAgQ09OIEVMIFBSRUZJSk8gYC5zcHRgLCB5IG5vIHBvciBndXN0bzogbGEgZGUgbGEgZmljaGEgc2UgcGludGEgREVOVFJPIGRlbAogICB0w610dWxvIGRlIGxhIGNhYmVjZXJhIGNvbcO6biwgcXVlIGxlIHBvbmUgc3UgcHJvcGlvIHRhbWHDsW8gY29uCiAgIGAuYWMtY2FiLWVzdGFkb2AgLS11bmEgY2xhc2UsIGlndWFsIHF1ZSBlc3RhLS0sIGFzw60gcXVlIGEgaWd1YWwgZXNwZWNpZmljaWRhZAogICBnYW5hcsOtYSBsYSBob2phIHF1ZSBzZSBjYXJndWUgZGVzcHXDqXMuIENvbiBgLnNwdCAuc3B0LXBpbGRvcmFgICgwLDIsMCkgbWFuZGEKICAgZXN0YSwgcXVlIGVzIGxhIHF1ZSBzYWJlIGRlIHF1w6kgY29sb3IgdmEgY2FkYSBlc3RhZG8uICovCi5zcHQgLnNwdC1waWxkb3Jhe2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo2cHg7cGFkZGluZzo1cHggMTFweDtib3JkZXItcmFkaXVzOjk5OXB4OwogIGZvbnQtc2l6ZToxMnB4O2ZvbnQtd2VpZ2h0OjYwMDt3aGl0ZS1zcGFjZTpub3dyYXB9Ci5zcHQtcC1lc3BlcmF7YmFja2dyb3VuZDojZWZmNmZmO2NvbG9yOiMxZDRlZDh9Ci5zcHQtcC1jdXJzb3tiYWNrZ3JvdW5kOiNlZmY2ZmY7Y29sb3I6IzFkNGVkOH0KLnNwdC1wLW9re2JhY2tncm91bmQ6dmFyKC0tc2QtdmVyZGUtY2xhcm8sI2VlZjZlZSk7Y29sb3I6dmFyKC0tc2QtdmVyZGUtb3NjdXJvLCMwMDVjMmQpfQouc3B0LXAtZ3Jpc3tiYWNrZ3JvdW5kOiNmMWYzZjI7Y29sb3I6dmFyKC0tc2Qtc3VhdmUsIzZiN2E3MCl9CgovKiDilIDilIAgTEEgRklDSEEg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCi5zcHQtZmljaGF7cGFkZGluZzoxOHB4IDIwcHggMjBweH0KLyogYHNwdC1maWNoYS10b3BgIC0tbGEgZmlsYSBkZSDCq1ZvbHZlciBhIHNvcG9ydGXCuyB5IGxhIHDDrWxkb3JhIGRlIGVzdGFkby0tIHkgZWwKICAgYGgyYCBkZWwgYXN1bnRvIHNlIGZ1ZXJvbiBhIGxhIGNhYmVjZXJhIGNvbcO6biAoYEFjY291bnRIZWFkZXJgLCBob2phIGVuCiAgIGBUQWNjb3VudFVJYCk6IGVsIGFzdW50byBlcyBlbCB0w610dWxvIGRlIGxhIHBhbnRhbGxhIHkgbGEgcMOtbGRvcmEgdmEgZGVudHJvCiAgIGRlIMOpbCwgY29tbyBlbiBsYSBmaWNoYSBkZSBwZWRpZG8uIEFxdcOtIGxhIGZpY2hhIGVtcGllemEgcG9yIHN1IG7Dum1lcm8uICovCi5zcHQtbnVte2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDttYXJnaW4tdG9wOjA7Zm9udC1zaXplOjEzcHg7Y29sb3I6dmFyKC0tc2Qtc3VhdmUsIzZiN2E3MCl9Ci5zcHQtY29waWFye2JvcmRlcjowO2JhY2tncm91bmQ6bm9uZTtwYWRkaW5nOjJweDtjdXJzb3I6cG9pbnRlcjtjb2xvcjp2YXIoLS1zZC10ZW51ZSwjOTNhMzk5KTtkaXNwbGF5OmlubGluZS1mbGV4fQouc3B0LWNvcGlhcjpob3Zlcntjb2xvcjp2YXIoLS1zZC12ZXJkZSwjMDQ3MTNhKX0KCi8qIExvcyBjdWF0cm8gZGF0b3MuIEljb25vIGVuIHN1IGNvbHVtbmEgeSBUT0RPIGVsIHRleHRvIGVuIGxhIHNlZ3VuZGE6CiAgIGFzw60gZWwgcsOzdHVsbyB5IGVsIHZhbG9yIGFycmFuY2FuIGVuIGxhIG1pc21hIHZlcnRpY2FsLiAqLwouc3B0LWRhdG9ze2Rpc3BsYXk6Z3JpZDtncmlkLXRlbXBsYXRlLWNvbHVtbnM6cmVwZWF0KDQsbWlubWF4KDAsMWZyKSk7Z2FwOjE0cHg7CiAgbWFyZ2luOjE2cHggMCA0cHg7cGFkZGluZzoxNHB4IDA7Ym9yZGVyLXRvcDoxcHggc29saWQgdmFyKC0tc2QtYm9yZGUsI2U0ZWFlNCk7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgdmFyKC0tc2QtYm9yZGUsI2U0ZWFlNCl9Ci5zcHQtZGF0b3tkaXNwbGF5OmZsZXg7Z2FwOjEwcHg7bWluLXdpZHRoOjB9Ci5zcHQtZGF0by1pY29ub3tmbGV4OjAgMCBhdXRvO3dpZHRoOjM0cHg7aGVpZ2h0OjM0cHg7Ym9yZGVyLXJhZGl1czo1MCU7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZvbnQtc2l6ZToxN3B4fQouc3B0LWRhdG8tdHh0e2ZsZXg6MTttaW4td2lkdGg6MH0KLnNwdC1kYXRvLXR4dCBzbWFsbHtkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxMS41cHg7Y29sb3I6dmFyKC0tc2Qtc3VhdmUsIzZiN2E3MCl9Ci5zcHQtZGF0by10eHQgYntkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxMy41cHg7Y29sb3I6dmFyKC0tc2QtdGludGEsIzE2MjExYSk7Zm9udC13ZWlnaHQ6NzAwO292ZXJmbG93OmhpZGRlbjt0ZXh0LW92ZXJmbG93OmVsbGlwc2lzO3doaXRlLXNwYWNlOm5vd3JhcH0KLnNwdC10LXZlcmRle2JhY2tncm91bmQ6dmFyKC0tc2QtdmVyZGUtY2xhcm8sI2VlZjZlZSk7Y29sb3I6dmFyKC0tc2QtdmVyZGUsIzA0NzEzYSl9Ci5zcHQtdC1henVse2JhY2tncm91bmQ6I2VmZjZmZjtjb2xvcjojMWQ0ZWQ4fQouc3B0LXQtYW1iYXJ7YmFja2dyb3VuZDojZmVmNmU3O2NvbG9yOiNjOThhMDZ9Ci5zcHQtdC1ncmlze2JhY2tncm91bmQ6I2YxZjNmMjtjb2xvcjp2YXIoLS1zZC1zdWF2ZSwjNmI3YTcwKX0KCi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkAogICBFTCBISUxPOiBgVENoYXRgIFJFVkVTVElETywgTk8gVU4gQ0hBVCBOVUVWTwogICDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKICAgRWwgbWFyY2FkbyBkZSBhYmFqbyBlcyBFTCBRVUUgUElOVEEgYFRDaGF0YCAoYF9lc3F1ZWxldG9CdXJidWphcygpYCB5CiAgIGBfbWVzc2FnZSgpYCksIGNvcGlhZG8gdGFsIGN1YWwuIEFxdcOtIHNvbG8gc2UgbGUgY2FtYmlhIGVsIGNvbG9yOgogICB2aWVuZSBlbiBhenVsICgjM2I4MmY2IGVuIGVudmlhciwgZm9jbyB5IGJvcmRlcykgeSBlc3RhIHBhbnRhbGxhIGVzCiAgIHZlcmRlLgoKICAgVG9kbyB2YSBlc2NvcGFkbyBiYWpvIGAuc3B0YC4gVG9jYXIgYFRDaGF0LmNzc2AgZW4gc3Ugc2l0aW8gcmVwaW50YXLDrWEKICAgdGFtYmnDqW4gZWwgY2hhdCBkZSBsb3MgcGVkaWRvcywgZWwgZGUgbGFzIGRldm9sdWNpb25lcywgZWwgZGUgbG9zCiAgIHZhbGVzIHkgbGFzIG5vdGFzIGRlIEFETUlOLgogICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi8KLnNwdC1oaWxve21hcmdpbi10b3A6MTZweH0KLnNwdCAuVENoYXR7d2lkdGg6MTAwJX0KLnNwdCAuVENoYXQudGNoYXQtLWJ1YmJsZXMgLnRjaGF0LWNhamF7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MTJweH0KLnNwdCAuVENoYXQudGNoYXQtLWJ1YmJsZXMgLnRjaGF0LWxpc3R7ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjtnYXA6MTZweDtwYWRkaW5nOjRweCA2cHggNHB4IDA7bWF4LWhlaWdodDpub25lfQoKLyog4pSA4pSAIEVMIEJMT1FVRSBERUwgTUVOU0FKRSBOTyBMTEVWQSBGT05ETyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKICAgRWwgZm9uZG8gZXMgZGUgbGEgQlVSQlVKQSwgbm8gZGVsIGJsb3F1ZTogcGludMOhbmRvbG8gYXF1w60sIGVsIGNvbG9yIHNlCiAgIGV4dGVuZMOtYSBwb3IgZGV0csOhcyBkZWwgbm9tYnJlIGRlbCBhdXRvciB5IGRlbCBhdmF0YXIsIHkgdW4gbWVuc2FqZQogICBjb3J0byBxdWVkYWJhIGNvbiB1biByZWN0w6FuZ3VsbyBhenVsIGVub3JtZSBhbHJlZGVkb3IgZGUgZG9zIHBhbGFicmFzLgoKICAgSGF5IHF1ZSBub21icmFyIGAuaXMtbWluZWAgeSBgLmVzLWRlLWdydXBvYCBleHBsw61jaXRhbWVudGU6IGxhIGhvamEgZGUKICAgYFRDaGF0YCBsb3MgcGludGEgY29uIGAuVENoYXQudGNoYXQtLWJ1YmJsZXMgLnRjaGF0LW1zZy5pcy1taW5lYCwgcXVlCiAgIEVNUEFUQSBlbiBlc3BlY2lmaWNpZGFkIGNvbiBlbCBzZWxlY3RvciBkZSBhcXXDrSAoY3VhdHJvIGNsYXNlcyBjYWRhCiAgIHVubykgeSBnYW5hIHBvciBpciBkZXNwdcOpcyBlbiBlbCBvcmRlbiBkZSBob2phcy4gTWVkaWRvOiBlbCBibG9xdWUKICAgc2Fsw61hIGByZ2IoMjM5LDI0NiwyNTUpYCBwZXNlIGEgdGVuZXIgYGJhY2tncm91bmQ6bm9uZWAuCgogICBFbCBhdmF0YXIgZXMgREVDT1JBVElWTyB5IHNhbGUgZGVsIENTUyAtLW5vIGRlIHVuIGRhdG8tLSBwYXJhIG5vIHRlbmVyCiAgIHF1ZSB0b2NhciBlbCBtYXJjYWRvIGRlbCBjb250cm9sLiAqLwouc3B0IC5UQ2hhdC50Y2hhdC0tYnViYmxlcyAudGNoYXQtbXNnLAouc3B0IC5UQ2hhdC50Y2hhdC0tYnViYmxlcyAudGNoYXQtbXNnLmlzLW1pbmUsCi5zcHQgLlRDaGF0LnRjaGF0LS1idWJibGVzIC50Y2hhdC1tc2cuZXMtZGUtZ3J1cG97CiAgICBwb3NpdGlvbjpyZWxhdGl2ZTttYXgtd2lkdGg6NzQlO21hcmdpbjowO3BhZGRpbmc6MCAwIDAgNDZweDsKICAgIGJhY2tncm91bmQ6bm9uZTtib3JkZXI6MDtib3gtc2hhZG93Om5vbmU7Cn0KLnNwdCAuVENoYXQudGNoYXQtLWJ1YmJsZXMgLnRjaGF0LW1zZzo6YmVmb3Jle2NvbnRlbnQ6IiI7cG9zaXRpb246YWJzb2x1dGU7bGVmdDowO3RvcDoyMnB4O3dpZHRoOjM0cHg7aGVpZ2h0OjM0cHg7Ym9yZGVyLXJhZGl1czo1MCU7CiAgYmFja2dyb3VuZDp2YXIoLS1zZC12ZXJkZS1jbGFybywjZWVmNmVlKSBjZW50ZXIvMThweCBuby1yZXBlYXQ7Ym9yZGVyOjFweCBzb2xpZCB2YXIoLS1zZC12ZXJkZS1ib3JkZSwjY2ZlM2QyKTsKICBiYWNrZ3JvdW5kLWltYWdlOnVybCgnZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIlMjMwNDcxM2EiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIj48cGF0aCBkPSJNMTEgMjBBNyA3IDAgMCAxIDkuOCA2LjFDMTUuNSA1IDE3IDQuNDggMTkgMmMxIDIgMiA0LjE4IDIgOCAwIDUuNS00Ljc4IDEwLTEwIDEwWiIvPjxwYXRoIGQ9Ik0yIDIxYzAtMyAxLjg1LTUuMzYgNS4wOC02QzkuNSAxNC41MiAxMiAxMyAxMyAxMiIvPjwvc3ZnPicpfQouc3B0IC5UQ2hhdC50Y2hhdC0tYnViYmxlcyAudGNoYXQtbXNnLmlzLW1pbmV7bWFyZ2luLWxlZnQ6YXV0bztwYWRkaW5nOjAgNDZweCAwIDA7dGV4dC1hbGlnbjpyaWdodH0KLnNwdCAuVENoYXQudGNoYXQtLWJ1YmJsZXMgLnRjaGF0LW1zZy5pcy1taW5lOjpiZWZvcmV7bGVmdDphdXRvO3JpZ2h0OjA7YmFja2dyb3VuZC1jb2xvcjojZjFmM2YyO2JvcmRlci1jb2xvcjp2YXIoLS1zZC1ib3JkZSwjZTRlYWU0KTsKICBiYWNrZ3JvdW5kLWltYWdlOnVybCgnZGF0YTppbWFnZS9zdmcreG1sO3V0ZjgsPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIlMjM2YjdhNzAiIHN0cm9rZS13aWR0aD0iMiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIj48Y2lyY2xlIGN4PSIxMiIgY3k9IjgiIHI9IjQiLz48cGF0aCBkPSJNNCAyMWE4IDggMCAwIDEgMTYgMCIvPjwvc3ZnPicpfQoKLnNwdCAuVENoYXQudGNoYXQtLWJ1YmJsZXMgLnRjaGF0LW1ldGF7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OXB4O21hcmdpbi1ib3R0b206NnB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOnZhcigtLXNkLXRlbnVlLCM5M2EzOTkpfQoKLyog4pSA4pSAIEVOIE1JUyBQUk9QSU9TIE1FTlNBSkVTLCBFTCBOT01CUkUgU09CUkEg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACiAgIEVzIGVsIGRlbCBxdWUgZXN0w6EgbWlyYW5kbyBsYSBwYW50YWxsYTogcmVwZXRpcmxvIGVuIGNhZGEgbMOtbmVhIG5vCiAgIGRpY2UgbmFkYSwgeSBoYWNlIGxhIGNhYmVjZXJhIE3DgVMgQU5DSEEgUVVFIExBIEJVUkJVSkEgLS0gZW4gdW4KICAgwqtob2xhwrsgc29icmVzYWzDrWEgMTUycHggcG9yIGxhIGl6cXVpZXJkYSB5IGVsIG5vbWJyZSBwYXJlY8OtYSBmbG90YXIKICAgZnVlcmEgZGUgc3UgbWVuc2FqZS4gQ29uIHNvbG8gbGEgaG9yYSwgbGEgY2FiZWNlcmEgY2FiZSB5IHF1ZWRhIGVuIGxhCiAgIHZlcnRpY2FsIGRlIGxhIGJ1cmJ1amEuCgogICBEZWwgbGFkbyBkZSBzb3BvcnRlIGVsIG5vbWJyZSBTw40gc2UgcXVlZGE6IHNhYmVyIHF1acOpbiB0ZSBhdGllbmRlIGVzCiAgIGp1c3RvIGxvIHF1ZSBzZSBxdWllcmUgbGVlciBhaMOtLiAqLwouc3B0IC5UQ2hhdC50Y2hhdC0tYnViYmxlcyAudGNoYXQtbXNnLmlzLW1pbmUgLnRjaGF0LW1ldGEgc3Ryb25ne2Rpc3BsYXk6bm9uZX0KCi8qIFkgdW4gYW5jaG8gbcOtbmltbywgcGFyYSBxdWUgdW4gbWVuc2FqZSBkZSBkb3MgbGV0cmFzIG5vIHF1ZWRlIG3DoXMKICAgZXN0cmVjaG8gcXVlIHN1IHByb3BpYSBob3JhLiAqLwouc3B0IC5UQ2hhdC50Y2hhdC0tYnViYmxlcyAudGNoYXQtYm9keXttaW4td2lkdGg6MTA0cHh9CgovKiDilIDilIAgRUwgTk9NQlJFLCBFTiBMQSBWRVJUSUNBTCBERSBTVSBNRU5TQUpFIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAogICBMYSBjYWJlY2VyYSB0cmFlIHRyZXMgaHVlY29zIC0tYXV0b3IsIGZlY2hhIHkgYWNjaW9uZXMtLSB5IGxvcyBkb3MKICAgw7psdGltb3MgcHVlZGVuIHZlbmlyIFZBQ8ONT1MuIENvbiBganVzdGlmeS1jb250ZW50OmZsZXgtZW5kYCwgZXNvcwogICBodWVjb3MgdmFjw61vcyBzaWd1ZW4gY29udGFuZG8gY29uIHN1IGBnYXBgLCBhc8OtIHF1ZSBlbXB1amFiYW4gZWwKICAgbm9tYnJlIDE5cHggYSBsYSBpenF1aWVyZGEgZGVsIGJvcmRlIGRlIGxhIGJ1cmJ1amEgKG1lZGlkbyBlbiB1bgogICDCq2hvbGHCuyk6IGVsIG5vbWJyZSBxdWVkYWJhIGZsb3RhbmRvIGZ1ZXJhIGRlIHN1IG1lbnNhamUuCgogICBTZSBlc2NvbmRlbiBsb3MgdmFjw61vcyB5IGVsIG5vbWJyZSBjYWUgZG9uZGUgZGViZS4gTm8gc2UgdG9jYSBlbAogICBtYXJjYWRvIGRlbCBjb250cm9sOiBsb3MgcGludGEgw6lsIHkgcHVlZGUgcmVsbGVuYXJsb3MgZGVzcHXDqXMuICovCi5zcHQgLlRDaGF0LnRjaGF0LS1idWJibGVzIC50Y2hhdC1tZXRhIHNwYW46ZW1wdHl7ZGlzcGxheTpub25lfQouc3B0IC5UQ2hhdC50Y2hhdC0tYnViYmxlcyAudGNoYXQtbXNnLmlzLW1pbmUgLnRjaGF0LW1ldGF7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfQouc3B0IC5UQ2hhdC50Y2hhdC0tYnViYmxlcyAudGNoYXQtbWV0YSBzdHJvbmd7Zm9udC1zaXplOjEzcHg7Zm9udC13ZWlnaHQ6NzAwO2NvbG9yOnZhcigtLXNkLXZlcmRlLW9zY3VybywjMDA1YzJkKX0KLnNwdCAuVENoYXQudGNoYXQtLWJ1YmJsZXMgLnRjaGF0LW1zZy5pcy1taW5lIC50Y2hhdC1tZXRhIHN0cm9uZ3tjb2xvcjp2YXIoLS1zZC10aW50YSwjMTYyMTFhKX0KCi5zcHQgLlRDaGF0LnRjaGF0LS1idWJibGVzIC50Y2hhdC1ib2R5e2Rpc3BsYXk6aW5saW5lLWJsb2NrO3RleHQtYWxpZ246bGVmdDtwYWRkaW5nOjEycHggMTVweDtib3JkZXItcmFkaXVzOjE0cHg7CiAgZm9udC1zaXplOjEzLjVweDtsaW5lLWhlaWdodDoxLjY1O2NvbG9yOnZhcigtLXNkLXRleHRvLCM0NjUxNGEpOwogIGJhY2tncm91bmQ6I2Y0ZjZmYjtib3JkZXI6MXB4IHNvbGlkICNlNmViZjQ7Ym9yZGVyLXRvcC1sZWZ0LXJhZGl1czo0cHg7d2hpdGUtc3BhY2U6cHJlLWxpbmV9Ci5zcHQgLlRDaGF0LnRjaGF0LS1idWJibGVzIC50Y2hhdC1tc2cuaXMtbWluZSAudGNoYXQtYm9keXtiYWNrZ3JvdW5kOnZhcigtLXNkLXZlcmRlLWNsYXJvLCNlZWY2ZWUpOwogIGJvcmRlci1jb2xvcjp2YXIoLS1zZC12ZXJkZS1ib3JkZSwjY2ZlM2QyKTtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjE0cHg7Ym9yZGVyLXRvcC1yaWdodC1yYWRpdXM6NHB4O2NvbG9yOnZhcigtLXNkLXRpbnRhLCMxNjIxMWEpfQoKLyogQWRqdW50b3M6IGxvcyBtaXNtb3MgYC5hZGp1bnRvYCAvIGAuYWRqdW50by1pbWdgIGRlIFRDaGF0LiAqLwouc3B0IC5UQ2hhdC50Y2hhdC0tYnViYmxlcyAuYWRqdW50b3N7ZGlzcGxheTpmbGV4O2dhcDo4cHg7bWFyZ2luLXRvcDo4cHg7anVzdGlmeS1jb250ZW50OmZsZXgtZW5kfQouc3B0IC5UQ2hhdC50Y2hhdC0tYnViYmxlcyAuYWRqdW50b3tkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6OXB4O3BhZGRpbmc6N3B4IDExcHg7Ym9yZGVyLXJhZGl1czoxMHB4OwogIGJhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkIHZhcigtLXNkLWJvcmRlLCNlNGVhZTQpO3RleHQtZGVjb3JhdGlvbjpub25lO2NvbG9yOnZhcigtLXNkLXRleHRvLCM0NjUxNGEpO2ZvbnQtc2l6ZToxMi41cHh9Ci5zcHQgLlRDaGF0LnRjaGF0LS1idWJibGVzIC5hZGp1bnRvOmhvdmVye2JvcmRlci1jb2xvcjp2YXIoLS1zZC12ZXJkZS1ib3JkZSwjY2ZlM2QyKX0KLnNwdCAuVENoYXQudGNoYXQtLWJ1YmJsZXMgLmFkanVudG8gYntkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxMi41cHg7Y29sb3I6dmFyKC0tc2QtdGludGEsIzE2MjExYSk7Zm9udC13ZWlnaHQ6NjAwfQouc3B0IC5UQ2hhdC50Y2hhdC0tYnViYmxlcyAuYWRqdW50byBzbWFsbHtjb2xvcjp2YXIoLS1zZC10ZW51ZSwjOTNhMzk5KTtmb250LXNpemU6MTEuNXB4fQouc3B0IC5UQ2hhdC50Y2hhdC0tYnViYmxlcyAuYWRqdW50b3N7YWxpZ24taXRlbXM6Y2VudGVyO2ZsZXgtd3JhcDp3cmFwfQouc3B0IC5UQ2hhdC50Y2hhdC0tYnViYmxlcyAuYWRqdW50by1pbWd7ZGlzcGxheTppbmxpbmUtZmxleH0KLnNwdCAuVENoYXQudGNoYXQtLWJ1YmJsZXMgLmFkanVudG8taW1nIGltZ3tkaXNwbGF5OmJsb2NrO3dpZHRoOjY0cHg7aGVpZ2h0OjQ4cHg7b2JqZWN0LWZpdDpjb3Zlcjtib3JkZXItcmFkaXVzOjhweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLXNkLWJvcmRlLCNlNGVhZTQpfQouc3B0IC5UQ2hhdC50Y2hhdC0tYnViYmxlcyAuYWRqdW50by1pbWc6aG92ZXIgaW1ne2JvcmRlci1jb2xvcjp2YXIoLS1zZC12ZXJkZSwjMDQ3MTNhKX0KCi8qIExhIGNhamEgZGUgZXNjcmliaXIuIENvbiBlbCBoaWxvIGRlbnRybyBkZSBzdSBwcm9waWEgY2FqYSwgZWwgcGllIHNlIHNlcGFyYQogICBjb24gdW5hIGzDrW5lYTogc2kgbm8sIGVsIMO6bHRpbW8gbWVuc2FqZSB5IGVsIGNhbXBvIGRlIGVzY3JpYmlyIHBhcmVjZW4gbG8KICAgbWlzbW8uICovCi5zcHQgLlRDaGF0LnRjaGF0LS1idWJibGVzIC50Y2hhdC1mb3Jte2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW47Z2FwOjEwcHg7cGFkZGluZy10b3A6MTRweDsKICBib3JkZXItdG9wOjFweCBzb2xpZCB2YXIoLS1zZC1ib3JkZSwjZTRlYWU0KX0KLyog4pSA4pSAIEVMIENBTVBPIERFIEVTQ1JJQklSOiAzMHB4LCBZIENSRUNFIEFMIEVTQ1JJQklSIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAogICBDb24gbG9zIDc4cHggZGUgb3JpZ2VuIHNlIGxsZXZhYmEgbcOhcyBhbHRvIHF1ZSBsYSBwcm9waWEgY29udmVyc2FjacOzbgogICAoMjIzIGNvbnRyYSAxOTgsIG1lZGlkbykuIEFycmFuY2EgZW4gdW5hIGzDrW5lYSB5IGxvIGVzdGlyYQogICBgX2F1dG9BbHRvKClgIGRlbCBjb250cm9sIHNlZ8O6biBzZSB0ZWNsZWEsIHF1ZSBlcyBsbyBxdWUgaGFjZSBxdWUgZWwKICAgaGlsbyB0ZW5nYSBzaXRpbyBjdWFuZG8gbm8gc2UgZXN0w6EgZXNjcmliaWVuZG8uCgogICBgaGVpZ2h0OjMwcHhgIGFkZW3DoXMgZGVsIG3DrW5pbW86IHVuIGA8dGV4dGFyZWE+YCBtaWRlIHBvciBzdSBhdHJpYnV0bwogICBgcm93c2AgLS1lbCBjb250cm9sIGxvIHBpbnRhIGNvbiAyLS0geSBzb2xvIGNvbiBgbWluLWhlaWdodGAgc2UgcXVlZGEKICAgZW4gZG9zIGzDrW5lYXMuIGByZXNpemU6bm9uZWAgcG9ycXVlIHF1aWVuIG1hbmRhIGVuIGVsIGFsdG8gZXMgZWwKICAgY29udGVuaWRvLCBubyB1biB0aXJhZG9yIHF1ZSBkZXNjdWFkcmEgbGEgZmljaGEgYWNvdGFkYS4gKi8KLyogYGZsZXg6MCAwIGF1dG9gIE5PIEVTIERFIEFET1JOTzogZWwgY2FtcG8gdmVuw61hIGNvbiBgZmxleDoxIDEgMjIwcHhgCiAgIC0tbWVkaWRvLS0geSBkZW50cm8gZGUgdW4gZmxleCBlbiBjb2x1bW5hIGVsIGBmbGV4LWJhc2lzYCBtYW5kYSBzb2JyZQogICBsYSBBTFRVUkEsIGFzw60gcXVlIHNlIHBsYW50YWJhIGVuIDE2MHB4IHBvciBtdWNobyBgaGVpZ2h0OjMwcHhgIHF1ZQogICBzZSBsZSBwdXNpZXJhLiBDb24gbGEgYmFzZSBlbiBgYXV0b2AsIHF1aWVuIGRlY2lkZSBlcyBgaGVpZ2h0YCwgeQogICBgX2F1dG9BbHRvKClgIGxvIHZhIHN1YmllbmRvIGFsIGVzY3JpYmlyLiAqLwouc3B0IC5UQ2hhdC50Y2hhdC0tYnViYmxlcyAudGNoYXQtaW5wdXR7ZmxleDowIDAgYXV0bzt3aWR0aDoxMDAlO21pbi1oZWlnaHQ6MzBweDtoZWlnaHQ6MzBweDtyZXNpemU6bm9uZTtwYWRkaW5nOjZweCAxMnB4O2JvcmRlci1yYWRpdXM6MTBweDsKICBib3JkZXI6MXB4IHNvbGlkIHZhcigtLXNkLWJvcmRlLCNlNGVhZTQpO2JhY2tncm91bmQ6I2ZmZjtmb250OmluaGVyaXQ7Zm9udC1zaXplOjEzLjVweDtjb2xvcjp2YXIoLS1zZC10ZXh0bywjNDY1MTRhKTtvdXRsaW5lOjB9Ci5zcHQgLlRDaGF0LnRjaGF0LS1idWJibGVzIC50Y2hhdC1pbnB1dDo6cGxhY2Vob2xkZXJ7Y29sb3I6dmFyKC0tc2QtdGVudWUsIzkzYTM5OSl9Ci5zcHQgLlRDaGF0LnRjaGF0LS1idWJibGVzIC50Y2hhdC1pbnB1dDpmb2N1c3tib3JkZXItY29sb3I6dmFyKC0tc2QtdmVyZGUsIzA0NzEzYSk7Ym94LXNoYWRvdzowIDAgMCAzcHggcmdiYSg0LDExMyw1OCwuMTApfQouc3B0IC5UQ2hhdC50Y2hhdC0tYnViYmxlcyAudGNoYXQtYWNjaW9uZXN7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtnYXA6MTJweDtoZWlnaHQ6YXV0b30KLnNwdCAuVENoYXQudGNoYXQtLWJ1YmJsZXMgLnRjaGF0LWNsaXB7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtoZWlnaHQ6YXV0bztwYWRkaW5nOjA7Ym9yZGVyOjA7YmFja2dyb3VuZDpub25lOwogIGNvbG9yOnZhcigtLXNkLXN1YXZlLCM2YjdhNzApO2ZvbnQtc2l6ZToxMi41cHg7Y3Vyc29yOnBvaW50ZXJ9Ci5zcHQgLlRDaGF0LnRjaGF0LS1idWJibGVzIC50Y2hhdC1jbGlwOmhvdmVye2NvbG9yOnZhcigtLXNkLXZlcmRlLCMwNDcxM2EpO2JhY2tncm91bmQ6bm9uZX0KLnNwdCAuVENoYXQudGNoYXQtLWJ1YmJsZXMgLnRjaGF0LXNlbmR7ZGlzcGxheTppbmxpbmUtZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjhweDtoZWlnaHQ6YXV0bztwYWRkaW5nOjExcHggMjBweDtib3JkZXI6MDtib3JkZXItcmFkaXVzOjEwcHg7CiAgYmFja2dyb3VuZDp2YXIoLS1zZC12ZXJkZSwjMDQ3MTNhKTtjb2xvcjojZmZmO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjYwMDtjdXJzb3I6cG9pbnRlcn0KLnNwdCAuVENoYXQudGNoYXQtLWJ1YmJsZXMgLnRjaGF0LXNlbmQ6aG92ZXJ7YmFja2dyb3VuZDp2YXIoLS1zZC12ZXJkZS1vc2N1cm8sIzAwNWMyZCl9CgovKiDilIDilIAgSElTVE9SSUFMIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwovKiBMYSBsaXN0YSBkZSBleHBlZGllbnRlcyBlcyB1bmEgYFREYXRhVGFibGVgICgxMy8xMC8yMDI2KTogc3UgYXNwZWN0byBlcyBlbAogICBkZSBsYSB0YWJsYSBkZWwgc2l0aW8sIHNpbiBzY3JvbGwgaG9yaXpvbnRhbDsgZWwgdGlwbyB2YSBjb21vIHDDrWxkb3JhIGp1bnRvCiAgIGFsIG7Dum1lcm8geSBsYSBmaWxhIHNpbiBsZWVyLCByZXNhbHRhZGEgKGAuc3B0LW51ZXZhYCkuICovCi5zcHQtdGlwb3tkaXNwbGF5OmlubGluZS1mbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtnYXA6NXB4O2ZvbnQtc2l6ZToxMXB4O2ZvbnQtd2VpZ2h0OjYwMDtwYWRkaW5nOjNweCA4cHg7Ym9yZGVyLXJhZGl1czo2cHh9Ci5zcHQtdGlwby1pbmN7YmFja2dyb3VuZDojZmVmNmU3O2NvbG9yOiM5NjY5MGF9Ci5zcHQtdGlwby1jb257YmFja2dyb3VuZDojZWVmNmVlO2NvbG9yOnZhcigtLXNkLXZlcmRlLW9zY3VybywjMDA1YzJkKX0KCi8qIOKUgOKUgCBDT0xVTU5BIERFUkVDSEEg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAICovCi5zcHQtbGFkbyAuc3B0LWNhcmR7cGFkZGluZzoxN3B4IDE4cHggMThweH0KLnNwdC1sYWRvIGgze21hcmdpbjowO2ZvbnQtc2l6ZToxNXB4O2ZvbnQtd2VpZ2h0OjcwMDtjb2xvcjp2YXIoLS1zZC12ZXJkZS1vc2N1cm8sIzAwNWMyZCl9Ci5zcHQtbGFkby1jYWJ7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6c3BhY2UtYmV0d2VlbjtnYXA6MTBweDttYXJnaW4tYm90dG9tOjEycHh9Ci5zcHQtcHJvZHtkaXNwbGF5OmZsZXg7Z2FwOjEycHg7bWFyZ2luLWJvdHRvbToxNHB4fQouc3B0LXByb2QtdHh0e2ZsZXg6MTttaW4td2lkdGg6MH0KLnNwdC1wcm9kLXR4dCBie2Rpc3BsYXk6YmxvY2s7Zm9udC1zaXplOjEzLjVweDtjb2xvcjp2YXIoLS1zZC10aW50YSwjMTYyMTFhKTtmb250LXdlaWdodDo3MDB9Ci5zcHQtcHJvZC10eHQgc21hbGx7ZGlzcGxheTpibG9jaztmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1zZC1zdWF2ZSwjNmI3YTcwKX0KLnNwdC1maWxhe2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OnNwYWNlLWJldHdlZW47Z2FwOjEwcHg7cGFkZGluZzo4cHggMDtib3JkZXItdG9wOjFweCBzb2xpZCB2YXIoLS1zZC1ib3JkZSwjZTRlYWU0KTtmb250LXNpemU6MTIuNXB4fQouc3B0LWZpbGEgc3Bhbntjb2xvcjp2YXIoLS1zZC1zdWF2ZSwjNmI3YTcwKX0KLnNwdC1maWxhIGJ7Y29sb3I6dmFyKC0tc2QtdGludGEsIzE2MjExYSk7Zm9udC13ZWlnaHQ6NjAwO3RleHQtYWxpZ246cmlnaHR9Ci5zcHQtbGFkbyAuc3B0LWJ0bnt3aWR0aDoxMDAlO2p1c3RpZnktY29udGVudDpjZW50ZXI7bWFyZ2luLXRvcDoxMnB4fQoKLyogQ2FuYWxlczogaWNvbm8gZW4gc3UgY29sdW1uYSwgdG9kbyBlbCB0ZXh0byBlbiBsYSBzZWd1bmRhLiAqLwouc3B0LWNhbmFse2Rpc3BsYXk6ZmxleDtnYXA6MTJweDthbGlnbi1pdGVtczpmbGV4LXN0YXJ0O3BhZGRpbmc6MTFweCAwO2JvcmRlci10b3A6MXB4IHNvbGlkIHZhcigtLXNkLWJvcmRlLCNlNGVhZTQpfQouc3B0LWNhbmFsOmZpcnN0LW9mLXR5cGV7Ym9yZGVyLXRvcDowfQouc3B0LWNhbmFsLWljb25ve2ZsZXg6MCAwIGF1dG87d2lkdGg6MzZweDtoZWlnaHQ6MzZweDtib3JkZXItcmFkaXVzOjlweDtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpjZW50ZXI7Zm9udC1zaXplOjE4cHh9Ci5zcHQtY2FuYWwtdHh0e2ZsZXg6MTttaW4td2lkdGg6MH0KLnNwdC1jYW5hbC10eHQgYntkaXNwbGF5OmJsb2NrO2ZvbnQtc2l6ZToxM3B4O2NvbG9yOnZhcigtLXNkLXRpbnRhLCMxNjIxMWEpO2ZvbnQtd2VpZ2h0OjcwMH0KLnNwdC1jYW5hbC10eHQgc21hbGx7ZGlzcGxheTpibG9jaztmb250LXNpemU6MTJweDtjb2xvcjp2YXIoLS1zZC10ZXh0bywjNDY1MTRhKTt3b3JkLWJyZWFrOmJyZWFrLXdvcmR9Ci5zcHQtY2FuYWwtdHh0IGVte2Rpc3BsYXk6YmxvY2s7Zm9udC1zdHlsZTpub3JtYWw7Zm9udC1zaXplOjExLjVweDtjb2xvcjp2YXIoLS1zZC10ZW51ZSwjOTNhMzk5KTttYXJnaW4tdG9wOjFweH0KLnNwdC1jYW5hbCAuc3B0LWJ0bnt3aWR0aDphdXRvO21hcmdpbjoycHggMCAwO3BhZGRpbmc6NnB4IDEycHg7Zm9udC1zaXplOjEycHh9Cgouc3B0LWZhcXtkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufQouc3B0LWZhcSBhe2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7Z2FwOjEwcHg7cGFkZGluZzoxMXB4IDA7Ym9yZGVyLXRvcDoxcHggc29saWQgdmFyKC0tc2QtYm9yZGUsI2U0ZWFlNCk7CiAgdGV4dC1kZWNvcmF0aW9uOm5vbmU7Y29sb3I6dmFyKC0tc2QtdGV4dG8sIzQ2NTE0YSk7Zm9udC1zaXplOjEyLjVweH0KLnNwdC1mYXEgYTpmaXJzdC1jaGlsZHtib3JkZXItdG9wOjB9Ci5zcHQtZmFxIGEgLnNwdC1mYXEtaXtjb2xvcjp2YXIoLS1zZC10ZW51ZSwjOTNhMzk5KTtmb250LXNpemU6MTZweDtmbGV4OjAgMCBhdXRvfQouc3B0LWZhcSBhIHNwYW57ZmxleDoxO21pbi13aWR0aDowfQouc3B0LWZhcSBhIC5zcHQtZmFxLXh7Y29sb3I6dmFyKC0tc2QtdGVudWUsIzkzYTM5OSk7Zm9udC1zaXplOjE1cHg7ZmxleDowIDAgYXV0b30KCkBtZWRpYSAobWF4LXdpZHRoOjExMDBweCl7CiAgLnNwdC1yZWp7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOm1pbm1heCgwLDFmcil9CiAgLnNwdC1sYWRve3Bvc2l0aW9uOnN0YXRpY30KICAuc3B0LWRhdG9ze2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoMixtaW5tYXgoMCwxZnIpKX0KfQoKLyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCiAgIEVMIExJU1RBRE8gICgvYWNjb3VudC9zdXBwb3J0KQogICDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi8KCi8qIOKUgOKUgCBMYXMgY3VhdHJvIGNpZnJhcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKICAgU29uIGA8ZGl2PmAgeSBubyBgPGJ1dHRvbj5gOiBubyBzZSBwdWxzYW4gLS1kaWNlbiBjw7NtbyBlc3TDoSBsYQogICBjdWVudGEgZGUgdW4gdmlzdGF6byB5IHBhcmEgZmlsdHJhciBlc3TDoSBsYSBiYXJyYSBkZSBhYmFqby0tIHkKICAgYWRlbcOhcyBsYSBob2phIGdsb2JhbCBhcGxhc3RhIGN1YWxxdWllciBgPGJ1dHRvbj5gIGEgMjVweCBkZSBhbHRvLgogICBJY29ubyBlbiBzdSBjb2x1bW5hIHkgdG9kbyBlbCB0ZXh0byBlbiBsYSBzZWd1bmRhLiAqLwouc3B0LWNpZnJhc3tkaXNwbGF5OmdyaWQ7Z3JpZC10ZW1wbGF0ZS1jb2x1bW5zOnJlcGVhdCg0LG1pbm1heCgwLDFmcikpO2dhcDoxMnB4fQouc3B0LWNpZnJhe2Rpc3BsYXk6ZmxleDtnYXA6MTJweDtwYWRkaW5nOjE2cHggMTdweDtib3JkZXI6MXB4IHNvbGlkIHZhcigtLXNkLWJvcmRlLCNlNGVhZTQpOwogIGJvcmRlci1yYWRpdXM6dmFyKC0tc2QtcmFkaW8sMTRweCk7YmFja2dyb3VuZDojZmZmO2JveC1zaGFkb3c6dmFyKC0tc2Qtc29tYnJhLDAgMnB4IDEwcHggcmdiYSgyMCw0MCwyNSwuMDYpKX0KLnNwdC1jaWZyYS1pY29ub3tmbGV4OjAgMCBhdXRvO3dpZHRoOjQwcHg7aGVpZ2h0OjQwcHg7Ym9yZGVyLXJhZGl1czo1MCU7ZGlzcGxheTpmbGV4O2FsaWduLWl0ZW1zOmNlbnRlcjtqdXN0aWZ5LWNvbnRlbnQ6Y2VudGVyO2ZvbnQtc2l6ZToyMHB4fQouc3B0LWNpZnJhLXR4dHtmbGV4OjE7bWluLXdpZHRoOjB9Ci5zcHQtY2lmcmEtdHh0IGJ7ZGlzcGxheTpibG9jaztmb250LXNpemU6MjJweDtmb250LXdlaWdodDo4MDA7Y29sb3I6dmFyKC0tc2QtdGludGEsIzE2MjExYSk7bGluZS1oZWlnaHQ6MS4xNX0KLnNwdC1jaWZyYS10eHQgc21hbGx7ZGlzcGxheTpibG9jazttYXJnaW4tdG9wOjJweDtmb250LXNpemU6MTIuNXB4O2NvbG9yOnZhcigtLXNkLXRleHRvLCM0NjUxNGEpO2ZvbnQtd2VpZ2h0OjYwMH0KLnNwdC1jaWZyYS10eHQgc3BhbntkaXNwbGF5OmJsb2NrO21hcmdpbi10b3A6M3B4O2ZvbnQtc2l6ZToxMS41cHg7bGluZS1oZWlnaHQ6MS4zNTtjb2xvcjp2YXIoLS1zZC10ZW51ZSwjOTNhMzk5KX0KCi8qIOKUgOKUgCBMYSBiYXJyYSBkZSBmaWx0cm9zIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwovKiBMYSBiYXJyYSBlcyBgLmFjLWZpbHRyb3NgIChUQWNjb3VudFVJKTogYXF1w60gc29sbyBsYSBjYWphIHF1ZSBsYSBlbnZ1ZWx2ZS4gKi8KLnNwdC1maWx0cm9ze3BhZGRpbmc6MTBweCAxMnB4OwogIGJvcmRlcjoxcHggc29saWQgdmFyKC0tc2QtYm9yZGUsI2U0ZWFlNCk7Ym9yZGVyLXJhZGl1czp2YXIoLS1zZC1yYWRpbywxNHB4KTtiYWNrZ3JvdW5kOiNmZmZ9CgovKiDilIDilIAgTGFzIHBlc3Rhw7FhczogYWJpZXJ0YXMgLyBjZXJyYWRhcyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KLnNwdC1wZXN0YW5hc3tkaXNwbGF5OmZsZXg7Z2FwOjhweDtmbGV4LXdyYXA6d3JhcH0KLnNwdC1wZXN0YW5he2Rpc3BsYXk6aW5saW5lLWZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2dhcDo4cHg7aGVpZ2h0OmF1dG87cGFkZGluZzoxMHB4IDE2cHg7Ym9yZGVyLXJhZGl1czoxMHB4OwogIGJvcmRlcjoxcHggc29saWQgdmFyKC0tc2QtYm9yZGUsI2U0ZWFlNCk7YmFja2dyb3VuZDojZmZmO2ZvbnQtc2l6ZToxM3B4O2ZvbnQtd2VpZ2h0OjYwMDsKICBjb2xvcjp2YXIoLS1zZC10ZXh0bywjNDY1MTRhKTtjdXJzb3I6cG9pbnRlcn0KLnNwdC1wZXN0YW5hIGljb25pZnktaWNvbntmb250LXNpemU6MTZweH0KLnNwdC1wZXN0YW5hOmhvdmVye2JvcmRlci1jb2xvcjp2YXIoLS1zZC12ZXJkZS1ib3JkZSwjY2ZlM2QyKX0KLnNwdC1wZXN0YW5hLm9ue2JhY2tncm91bmQ6dmFyKC0tc2QtdmVyZGUtY2xhcm8sI2VlZjZlZSk7Ym9yZGVyLWNvbG9yOnZhcigtLXNkLXZlcmRlLWJvcmRlLCNjZmUzZDIpO2NvbG9yOnZhcigtLXNkLXZlcmRlLW9zY3VybywjMDA1YzJkKX0KLnNwdC1wZXN0YW5hIC5zcHQtY3VlbnRhe3BhZGRpbmc6MXB4IDdweDtib3JkZXItcmFkaXVzOjk5OXB4O2JhY2tncm91bmQ6I2ZmZjtib3JkZXI6MXB4IHNvbGlkIHZhcigtLXNkLWJvcmRlLCNlNGVhZTQpO2ZvbnQtc2l6ZToxMS41cHh9Ci5zcHQtcGVzdGFuYS5vbiAuc3B0LWN1ZW50YXtiYWNrZ3JvdW5kOiNmZmY7Ym9yZGVyLWNvbG9yOnZhcigtLXNkLXZlcmRlLWJvcmRlLCNjZmUzZDIpfQoKLyog4pSA4pSAIExhIGZpbGEgZGVsIGxpc3RhZG8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACiAgIExhIMO6bHRpbWEgcmVzcHVlc3RhIHZhIGVuIGxhIGZpbGEsIG5vIGVzY29uZGlkYSBlbiBsYSBmaWNoYTogZXMgbG8KICAgw7puaWNvIHF1ZSBxdWllcmUgc2FiZXIgcXVpZW4gZW50cmEgYXF1w60gLS1zaSBhbGd1aWVuIGVzdMOhIG1pcmFuZG8KICAgbG8gc3V5by0tLiAqLwovKiDilIDilIAgUGllIGRlIGxhIGxpc3RhIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgCAqLwouc3B0LXBpZXtkaXNwbGF5OmZsZXg7YWxpZ24taXRlbXM6Y2VudGVyO2p1c3RpZnktY29udGVudDpzcGFjZS1iZXR3ZWVuO2dhcDoxMnB4O3BhZGRpbmc6MTNweCAxNnB4OwogIGJvcmRlci10b3A6MXB4IHNvbGlkIHZhcigtLXNkLWJvcmRlLCNlNGVhZTQpO2ZvbnQtc2l6ZToxMi41cHg7Y29sb3I6dmFyKC0tc2Qtc3VhdmUsIzZiN2E3MCl9CgovKiDilIDilIAgU2luIG5hZGEgcXVlIGVuc2XDsWFyIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAogICBObyBlcyB1biBjYXJ0ZWwgZGUgZXJyb3I6IGVzIGxhIHBhbnRhbGxhIHF1ZSBtw6FzIHNlIHZlLCBwb3JxdWUgbG8KICAgbm9ybWFsIGVzIE5PIHRlbmVyIGluY2lkZW5jaWFzLiBBc8OtIHF1ZSBkaWNlIHF1w6kgc2UgcHVlZGUgaGFjZXIuICovCi5zcHQtdmFjaW97ZGlzcGxheTpmbGV4O2ZsZXgtZGlyZWN0aW9uOmNvbHVtbjthbGlnbi1pdGVtczpjZW50ZXI7dGV4dC1hbGlnbjpjZW50ZXI7Z2FwOjlweDtwYWRkaW5nOjQ0cHggMjRweH0KLnNwdC12YWNpby1pY29ub3t3aWR0aDo2MnB4O2hlaWdodDo2MnB4O2JvcmRlci1yYWRpdXM6NTAlO2Rpc3BsYXk6ZmxleDthbGlnbi1pdGVtczpjZW50ZXI7anVzdGlmeS1jb250ZW50OmNlbnRlcjsKICBiYWNrZ3JvdW5kOnZhcigtLXNkLXZlcmRlLWNsYXJvLCNlZWY2ZWUpO2NvbG9yOnZhcigtLXNkLXZlcmRlLCMwNDcxM2EpO2ZvbnQtc2l6ZToyOXB4fQouc3B0LXZhY2lvIGJ7Zm9udC1zaXplOjE2cHg7Y29sb3I6dmFyKC0tc2QtdmVyZGUtb3NjdXJvLCMwMDVjMmQpfQouc3B0LXZhY2lvIHB7bWFyZ2luOjA7Zm9udC1zaXplOjEzcHg7Y29sb3I6dmFyKC0tc2Qtc3VhdmUsIzZiN2E3MCk7bWF4LXdpZHRoOjQ2Y2h9Ci5zcHQtdmFjaW8gLnNwdC1idG57bWFyZ2luLXRvcDo2cHh9CgpAbWVkaWEgKG1heC13aWR0aDoxMTAwcHgpewogIC5zcHQtY2lmcmFze2dyaWQtdGVtcGxhdGUtY29sdW1uczpyZXBlYXQoMixtaW5tYXgoMCwxZnIpKX0KfQoKCi8qIOKUgOKUgCBMbyBxdWUgZWwgY29tcG9uZW50ZSB1c2EgeSBsYSBtYXF1ZXRhIG5vIHRlbsOtYSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAgKi8KCi5zcHQtbGFkby1ub3Rhe21hcmdpbjotNnB4IDAgMTBweDtmb250LXNpemU6MTIuNXB4O2NvbG9yOnZhcigtLXNkLXN1YXZlLCM2YjdhNzApfQoKCi8qIExhIGZpbGEgZGVsIGxpc3RhZG8sIGN1YW5kbyBlbCBjbGllbnRlIHRpZW5lIGFsZ28gc2luIGxlZXIuICovCi5zcHQtanMtdGFibGEgdHIuc3B0LW51ZXZhIHRke2JhY2tncm91bmQ6dmFyKC0tc2QtdmVyZGUtY2xhcm8sI2VlZjZlZSl9Ci5zcHQtanMtdGFibGEgdHIuc3B0LW51ZXZhOmhvdmVyIHRke2JhY2tncm91bmQ6I2U2ZjFlNn0KCgovKiDilIDilIAgRUwgQUlSRSBFTlRSRSBCTE9RVUVTIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAogICBFbiBsYSBtYXF1ZXRhIGxhcyBjaWZyYXMsIGxhcyBwZXN0YcOxYXMsIGxvcyBmaWx0cm9zIHkgbGEgbGlzdGEgZXJhbgogICBoaWpvcyBESVJFQ1RPUyBkZSBgLnNwdC1jdWVycG9gLCBxdWUgbG9zIHNlcGFyYSBjb24gc3UgYGdhcGAuIEFxdcOtIHZhbgogICBlbnZ1ZWx0b3MgZW4gYC5zcHQtanMtbGlzdGFkb2AgcGFyYSBwb2RlciBjYW1iaWFyIGRlIHZpc3RhLCB5IGVzZQogICBlbnZvbHRvcmlvIGVzIFVOIHNvbG8gaGlqbyBkZWwgZmxleDogZGVudHJvIG5vIGhhYsOtYSBgZ2FwYCBuaW5ndW5vIHkKICAgdG9kbyBzYWzDrWEgcGVnYWRvLCBzaW4gdW4gc29sbyBtYXJnZW4uCgogICBTZSBsZSBkYSBlbCBtaXNtbyByZXBhcnRvIGVuIHZleiBkZSByZXBhcnRpciBtw6FyZ2VuZXMgcG9yIGJsb3F1ZToKICAgY29uIGBtYXJnaW4tYm90dG9tYCBlbiBjYWRhIHVubywgZWwgw7psdGltbyBkZWphIHVuIGh1ZWNvIHNvYnJhbnRlIGFsCiAgIGZpbmFsIGRlIGxhIGNvbHVtbmEgeSBoYXkgcXVlIGlyIHF1aXTDoW5kb2xvIGEgbWFuby4gKi8KLnNwdC1qcy1saXN0YWRvLAouc3B0LWpzLWZpY2hhe2Rpc3BsYXk6ZmxleDtmbGV4LWRpcmVjdGlvbjpjb2x1bW59Ci5zcHQtanMtbGlzdGFkb3tnYXA6MjJweH0KCi8qIExhIGZpY2hhIGVzIHVuYSB0YXJqZXRhOiBzdSBgZ2FwYCBlcyBlbCBkZSBkZW50cm8sIG3DoXMgYXByZXRhZG8uICovCi5zcHQtanMtZmljaGF7Z2FwOjB9CgovKiBZIGxhIGNvbHVtbmEgZW50ZXJhIHJlc3BpcmEgcG9yIGRlYmFqbzogcGVnYWRhIGFsIHBpZSBkZWwgc2l0aW8gc2UKICAgbGVlIGNvbW8gc2kgZmFsdGFyYSBjb250ZW5pZG8uICovCi5zcHR7cGFkZGluZy1ib3R0b206MjhweH0KCi8qIOKUgOKUgCBFTCBCT1TDk04gwqtDRU5UUk8gREUgQVlVREHCuyBTQUzDjUEgTU9SQURPIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAogICBFcyB1biBgPGEgaHJlZj0iL2F5dWRhIj5gIGRlIHZlcmRhZCAtLXRpZW5lIHF1ZSBzZXJsbzogc2UgYWJyZSBlbiBvdHJhCiAgIHBlc3Rhw7FhIGNvbiBlbCBib3TDs24gZGVyZWNoby0tIHkgbGEgaG9qYSBnbG9iYWwgcGludGEgYGE6dmlzaXRlZGAgZW4KICAgbW9yYWRvLCBib3JkZSBpbmNsdWlkby4gYGdldENvbXB1dGVkU3R5bGVgIHNvYnJlIGVsIGVubGFjZSBzaW4gdmlzaXRhcgogICBubyBsbyBlbnNlw7FhLCBhc8OtIHF1ZSBzb2xvIHNlIHZlIGVuIGxhIHBhbnRhbGxhIGRlIHF1aWVuIHlhIGVudHLDsy4KICAgRXMgbGEgbWlzbWEgcmVnbGEgcXVlIHlhIG1vcmRpw7MgZW4gbGFzIHRhcmpldGFzLWVubGFjZS4gKi8KLnNwdCBhLnNwdC1idG4sCi5zcHQgYS5zcHQtYnRuOnZpc2l0ZWR7Y29sb3I6dmFyKC0tc2QtdmVyZGUtb3NjdXJvLCMwMDVjMmQpO2JvcmRlci1jb2xvcjp2YXIoLS1zZC1ib3JkZSwjZTRlYWU0KX0KLnNwdCBhLnNwdC1idG4tcHJpbWFyaW8sCi5zcHQgYS5zcHQtYnRuLXByaW1hcmlvOnZpc2l0ZWR7Y29sb3I6I2ZmZjtib3JkZXItY29sb3I6dHJhbnNwYXJlbnR9Ci5zcHQgYS5zcHQtYnRuLXNlY3VuZGFyaW8sCi5zcHQgYS5zcHQtYnRuLXNlY3VuZGFyaW86dmlzaXRlZHtib3JkZXItY29sb3I6dmFyKC0tc2QtdmVyZGUtYm9yZGUsI2NmZTNkMil9CgovKiDilIDilIAgTE9TIEVOTEFDRVMgREUgTEEgQ09MVU1OQSwgRU4gTUFHRU5UQSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKICAgTGFzIHByZWd1bnRhcyBmcmVjdWVudGVzIHNhbMOtYW4gcm9zYXM6IGVsIHBhbmVsIGRlIGN1ZW50YSBwaW50YQogICBgYTp2aXNpdGVkYCBjb24gc3UgcHJvcGlvIGNvbG9yLCB5IGNvbW8gc29uIGA8YT5gIGRlIHZlcmRhZCAtLXkgaGF5CiAgIHF1ZSBkZWphcmxvcyBhc8OtLS0gaGFiw61hIHF1ZSBkZWNpcmxvIGFxdcOtLCBlbiBsYXMgZG9zIGZvcm1hcy4gRXMgbGEKICAgbWlzbWEgcmVnbGEgcXVlIHlhIG1vcmRpw7MgZW4gbGFzIHRhcmpldGFzLWVubGFjZSBkZWwgY2F0w6Fsb2dvLCB5IG5vCiAgIHNlIHZlIGNvbiBgZ2V0Q29tcHV0ZWRTdHlsZWAgc29icmUgdW4gZW5sYWNlIHNpbiB2aXNpdGFyLiAqLwouc3B0IC5zcHQtZmFxIGEsCi5zcHQgLnNwdC1mYXEgYTp2aXNpdGVke2NvbG9yOnZhcigtLXNkLXRleHRvLCM0NjUxNGEpfQouc3B0IC5zcHQtZmFxIGE6aG92ZXJ7Y29sb3I6dmFyKC0tc2QtdmVyZGUtb3NjdXJvLCMwMDVjMmQpfQouc3B0IC5zcHQtZW5sYWNlLAouc3B0IC5zcHQtZW5sYWNlOnZpc2l0ZWR7Y29sb3I6dmFyKC0tc2QtdmVyZGUsIzA0NzEzYSl9CgovKiBMYSByZXNwdWVzdGEgZGUgdW5hIHByZWd1bnRhLCBkZW50cm8gZGVsIG92ZXJsYXkuICovCi5zcHQtZmFxLXJlc3B1ZXN0YXtwYWRkaW5nOjRweCAycHg7Zm9udC1zaXplOjEzLjVweDtsaW5lLWhlaWdodDoxLjY1OwogIGNvbG9yOnZhcigtLXNkLXRleHRvLCM0NjUxNGEpO3doaXRlLXNwYWNlOnByZS1saW5lO21heC13aWR0aDo3MGNofQoKLyog4pSA4pSAIEVMIEhJTE8sIENPTiBBTFRVUkEgRklKQSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKICAgU2luIGVsbGEsIGxhIGNvbnZlcnNhY2nDs24gY3JlY2UgY29uIGNhZGEgbWVuc2FqZSB5IGxhIGNhamEgZGUgZXNjcmliaXIKICAgc2UgdmEgYWwgZm9uZG8gZGUgbGEgcMOhZ2luYTogYWwgdmlnw6lzaW1vIG1lbnNhamUgaGF5IHF1ZSBiYWphciBoYXN0YQogICBhYmFqbyBwYXJhIGNvbnRlc3RhciwgeSBlbCB0w610dWxvIGRlbCBleHBlZGllbnRlIHlhIG5vIHNlIHZlLgoKICAgQ29uIGFsdG8gZmlqbywgZWwgcXVlIHNjcm9sbGVhIGVzIGVsIGhpbG86IGxhIGNhYmVjZXJhIGRlbCBleHBlZGllbnRlCiAgIHkgbGEgY2FqYSBkZSBlc2NyaWJpciBzZSBxdWVkYW4gc2llbXByZSBhIGxhIHZpc3RhLCBxdWUgZXMgY29tbyBzZSBsZWUKICAgdW4gY2hhdC4gRWwgZGVzcGxhemFtaWVudG8gdmEgZW4gYC50Y2hhdC1saXN0YCAtLWVsIGN1ZXJwby0tIHkgbm8gZW4KICAgbGEgY2FqYSwgcG9ycXVlIGVsIHBpZSBjb24gZWwgY29tcG9zZXIgbm8gZGViZSBtb3ZlcnNlLiAqLwouc3B0IC5UQ2hhdC50Y2hhdC0tYnViYmxlcyAudGNoYXQtbGlzdHsKICAgIG92ZXJmbG93LXk6YXV0bzsKICAgIHNjcm9sbC1iZWhhdmlvcjpzbW9vdGg7Cn0KCi8qIOKUgOKUgCBFTCBDSEFULCAzMDBweCBGSUpPUyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKICAgQWx0dXJhIGZpamEgeSBwdW50bzogbmkgY2FsY3VsYWRhLCBuaSBtZWRpZGEsIG5pIGRlcGVuZGllbnRlIGRlIGxhCiAgIHZlbnRhbmEuIExvIHF1ZSBjcmVjZSBlcyBlbCBuw7ptZXJvIGRlIG1lbnNhamVzLCB5IHBhcmEgZXNvIGVzdMOhIGVsCiAgIGRlc3BsYXphbWllbnRvIGRlbCBwcm9waW8gaGlsby4KCiAgIExvcyAzMDBweCBzb24gZGVsIENPTVBPTkVOVEU6IGRlbnRybywgZWwgcGllIGRlIGVzY3JpYmlyIHNlIHF1ZWRhIGNvbgogICBsbyBzdXlvIHkgZWwgcmVzdG8gZXMgY29udmVyc2FjacOzbi4gQXPDrSBsYSBmaWNoYSBtaWRlIHNpZW1wcmUgbG8KICAgbWlzbW8sIHNlIGFicmEgY29uIGRvcyBtZW5zYWplcyBvIGNvbiBjdWFyZW50YS4KCiAgIGBtaW4taGVpZ2h0OjBgIGVuIHRvZGEgbGEgY2FkZW5hOiB1biBoaWpvIGZsZXggbm8gYmFqYSBkZSBzdSBjb250ZW5pZG8KICAgcG9yIGRlZmVjdG8gKGBtaW4taGVpZ2h0OmF1dG9gKSwgeSBiYXN0YSBjb24gcXVlIHVubyBzZSBvbHZpZGUgcGFyYQogICBxdWUgZWwgaGlsbyBzZSBuaWVndWUgYSBlbmNvZ2VyIHkgbG9zIDMwMHB4IHNlIGRlc2JvcmRlbiBwb3IgYWJham8uICovCi5zcHQtaGlsb3tkaXNwbGF5OmZsZXg7ZmxleC1kaXJlY3Rpb246Y29sdW1ufQoKLnNwdC1oaWxvIC5UQ2hhdHsKICAgIGhlaWdodDozMDBweDsKICAgIG1pbi1oZWlnaHQ6MDsKICAgIGRpc3BsYXk6ZmxleDsKICAgIGZsZXgtZGlyZWN0aW9uOmNvbHVtbjsKfQoKLnNwdC1oaWxvIC5UQ2hhdC50Y2hhdC0tYnViYmxlcyAudGNoYXQtY2FqYXtmbGV4OjEgMSBhdXRvO21pbi1oZWlnaHQ6MDttYXgtaGVpZ2h0Om5vbmV9CgovKiBMYSBjb252ZXJzYWNpw7NuIGVzIGxhIHF1ZSBjZWRlOyBlbCBwaWUgZGUgZXNjcmliaXIsIG5vOiBlcyBsbyBxdWUgc2UKICAgZXN0w6EgdXNhbmRvLiAqLwouc3B0LWhpbG8gLlRDaGF0LnRjaGF0LS1idWJibGVzIC50Y2hhdC1saXN0e2ZsZXg6MSAxIGF1dG87bWluLWhlaWdodDowfQouc3B0LWhpbG8gLlRDaGF0LnRjaGF0LS1idWJibGVzIC50Y2hhdC1mb3Jte2ZsZXg6MCAwIGF1dG99CgovKiBMQSBGSUNIQSBOTyBMTEVWQSBBTFRVUkE6IGxhIMO6bmljYSBtZWRpZGEgZmlqYSBlcyBsYSBkZWwgY2hhdCwgeSBsbyBkZW3DoXMKICAgY3JlY2UgY29uIHN1IGNvbnRlbmlkby4gSHVibyB1bmEgYWx0dXJhIGNhbGN1bGFkYSBlbiBKUyBwYXJhIHF1ZSBsYSBmaWNoYQogICBjdXBpZXJhIGVuIGxhIHZlbnRhbmEsIHkgc2UgcmV0aXLDsyBwb3JxdWUgc2UgcGlkacOzIGZpamEuICovCgovKiBZIGxhIGJhcnJhIGRlIGRlc3BsYXphbWllbnRvLCBkaXNjcmV0YTogbGEgZGVsIHNpc3RlbWEgc29icmUgZm9uZG8KICAgY2xhcm8gY29ydGEgbGEgY29sdW1uYSBlbiBkb3MuICovCi5zcHQgLlRDaGF0LnRjaGF0LS1idWJibGVzIC50Y2hhdC1saXN0Ojotd2Via2l0LXNjcm9sbGJhcnt3aWR0aDo4cHh9Ci5zcHQgLlRDaGF0LnRjaGF0LS1idWJibGVzIC50Y2hhdC1saXN0Ojotd2Via2l0LXNjcm9sbGJhci10aHVtYnsKICAgIGJhY2tncm91bmQ6dmFyKC0tc2QtYm9yZGUsI2U0ZWFlNCk7Ym9yZGVyLXJhZGl1czo0cHh9Ci5zcHQgLlRDaGF0LnRjaGF0LS1idWJibGVzIC50Y2hhdC1saXN0Ojotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlcnsKICAgIGJhY2tncm91bmQ6dmFyKC0tc2QtdmVyZGUtYm9yZGUsI2NmZTNkMil9CgovKiDilIDilIAgRUwgTUFHRU5UQSBERSBgYSBzcGFuYCDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKICAgTWVkaWRvIGVuIGxhIHBhbnRhbGxhLCBubyBkZWR1Y2lkbzogbGEgaG9qYSBnbG9iYWwgbGxldmEKCiAgICAgICBhLCAubGluaywgYTphY3RpdmUsIGE6Zm9jdXMsIGE6dmlzaXRlZCwgYSBzcGFuIOKGkiAjOTEwYzg4CgogICB5IHBpbnRhIGVsIFNQQU4sIG5vIHNvbG8gZWwgZW5sYWNlLiBQb3IgZXNvIGxhcyBwcmVndW50YXMgZnJlY3VlbnRlcwogICBzYWzDrWFuIG1vcmFkYXMgYXVucXVlIGBnZXRDb21wdXRlZFN0eWxlYCBzb2JyZSBlbCBgPGE+YCBkaWVyYSBlbCBncmlzCiAgIGNvcnJlY3RvOiBlbCBjb2xvciBubyBsbyBoZXJlZGFiYW4sIGxvIHRlbsOtYW4gcHVlc3RvLgoKICAgU2UgYXJyZWdsYSBlbiB1biBzaXRpbyB5IHBhcmEgdG9kYSBsYSBwYW50YWxsYTogZGVudHJvIGRlIGAuc3B0YCwgZWwKICAgdGV4dG8gZGUgdW4gZW5sYWNlIGhlcmVkYSBkZSBzdSBlbmxhY2UuIFZhbGUgcGFyYSBsYXMgbWlnYXMsIGxvcwogICBib3RvbmVzIC0tcXVlIGxsZXZhbiBpY29ubyB5IHRleHRvIGVuIHNwYW5zLS0geSBsYXMgcHJlZ3VudGFzLiAqLwouc3B0IGEgc3BhbiwKLnNwdCBhOnZpc2l0ZWQgc3BhbiwKLnNwdCBhOmhvdmVyIHNwYW4sCi5zcHQgYTpmb2N1cyBzcGFue2NvbG9yOmluaGVyaXR9CgovKiDilIDilIAgRUwgT1ZFUkxBWSBERSDCq0FCUklSIEVYUEVESUVOVEXCuyBOTyBTRSBQSU5UQSBBUVXDjSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKICAgRXN0YWJhIGVuIGVzdGEgaG9qYSwgeSBhc8OtIHNvbG8gdmFsw61hIGN1YW5kbyBlbCBmb3JtdWxhcmlvIHNlIGFicsOtYQogICBkZXNkZSBlc3RhIHBhbnRhbGxhOiBlbCBtaXNtbyBvdmVybGF5IGFiaWVydG8gZGVzZGUgbGEgZmljaGEgZGUgdW4KICAgcGVkaWRvIHNhbMOtYSBjb24gZWwgYm90w7NuIG5lZ3JvIGRlbCBzaXRpby4gVml2ZSBlbgogICBgVFN1cHBvcnRUaWNrZXRGb3JtL2Nzc2AsIHF1ZSBlcyBlbCBjb21wb25lbnRlIHF1ZSBtb250YSBlbCBvdmVybGF5IHkKICAgdmlhamEgY29uIGxhcyB0cmVzIHBhbnRhbGxhcyBxdWUgbG8gYWJyZW4uICovCgovKiBFTiBFTCBURUzDiUZPTk8gKDI0LzA5LzIwMjYpLiBFbCBhdmlzbyDCq8K/TmVjZXNpdGFzIGF5dWRhP8K7IGVyYSB1bmEgZmlsYSAtLWljb25vLAogICB0ZXh0byB5IGRvcyBib3RvbmVzLS0gcXVlIGEgMzYwcHggZGVqYWJhIGVsIHRleHRvIGVuIHVuYSBwYWxhYnJhIHBvciBsw61uZWEgeQogICBzYWNhYmEgbG9zIGJvdG9uZXMgZGUgbGEgcGFudGFsbGEgKGxhIHDDoWdpbmEgbWVkw61hIDYxMXB4KS4gRWwgdGV4dG8gcmVzcGlyYQogICBqdW50byBhbCBpY29ubyB5IGxvcyBib3RvbmVzIGJhamFuLCBjYWRhIHVubyBhIHN1IGFuY2hvLiAqLwpAbWVkaWEgKG1heC13aWR0aDogNjAwcHgpIHsKICAgIC5zcHQtYXl1ZGEgeyBmbGV4LXdyYXA6IHdyYXA7IHBhZGRpbmc6IDE2cHg7IGdhcDogMTJweDsgfQogICAgLnNwdC1heXVkYS10eHQgeyBmbGV4OiAxIDEgMTgwcHg7IH0KICAgIC5zcHQtYXl1ZGEtYWNjaW9uZXMgeyBmbGV4OiAxIDEgMTAwJTsgfQogICAgLnNwdC1heXVkYS1hY2Npb25lcyA+ICogeyBmbGV4OiAxIDEgYXV0bzsganVzdGlmeS1jb250ZW50OiBjZW50ZXI7IH0KfQoNCg0KPC9zdHlsZT4NCg0KPHNjcmlwdCBuYW1lPSJUQWNjb3VudFN1cHBvcnQiID4vKioKICog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCiAqICBTT1BPUlRFIOKAlCBlbCDDoXJlYSBkZSBjbGllbnRlCiAqIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkAogKgogKiBQaWRlIGAvYWNjb3VudC9zdXBwb3J0L2RhdGFgIHkgcGludGEuIExhIGZpY2hhIGRlIHVuIGV4cGVkaWVudGUgZXMgbGEgTUlTTUEKICogcGFudGFsbGEgZW4gb3RyYSB2aXN0YSwgbm8gb3RybyBjb21wb25lbnRlLgogKgogKiBFTCBNQVJDQURPIE5PIEVTVMOBIEFRVcONOiB2aXZlIGVuIGVsIGAucGhwYCwgZW4gYDx0ZW1wbGF0ZT5gLCB5IGFxdcOtIHNvbG8gc2UKICogY2xvbmEgeSBzZSByZWxsZW5hLiBOaSB1bmEgY2FkZW5hIGRlIHBsYW50aWxsYSBjb24gSFRNTCBkZW50cm8gLS0gZXMgbGEgcmVnbGEKICogZGVsIHByb3llY3RvLCB5IGVzIGxvIHF1ZSBwZXJtaXRlIGxlZXIgbGEgcGFudGFsbGEgc2luIGVqZWN1dGFybGEuCiAqCiAqIOKUgOKUgCBFTCBISUxPIEVTIGBUQ2hhdGAsIE5PIFVOIENIQVQgREUgRVNUQSBQQU5UQUxMQSDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKICoKICogRWwgY29udHJvbCB5YSB0cmFlIGJ1cmJ1amFzLCBhZGp1bnRvcyBjb24gYmFuZGVqYSwgbWluaWF0dXJhcywgdmlzb3IgeQogKiBlZGljacOzbiwgeSBoYWJsYSBjb24gYC9jaGF0L3t0aXBvfS97aWR9YCwgcXVlIGVzIGVsIGVuZHBvaW50IHVuaXZlcnNhbC4gQXF1w60KICogc29sbyBzZSBpbnN0YW5jaWEgeSBzZSBsZSBjYW1iaWEgZWwgY29sb3IgZGVzZGUgZWwgQ1NTLCBlc2NvcGFkbyBiYWpvIGAuc3B0YC4KICoKICog4pSA4pSAIEVMIEZJTFRSQURPIEVTIERFIEVTVEUgTEFETyDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIAKICoKICogTG9zIGV4cGVkaWVudGVzIGRlIFVOQSBwZXJzb25hIGNhYmVuIGVudGVyb3MgZW4gdW5hIHJlc3B1ZXN0YSwgYXPDrSBxdWUKICogZXNjcmliaXIgZW4gZWwgYnVzY2Fkb3IgcmVzcG9uZGUgYWwgaW5zdGFudGUgZW4gdmV6IGRlIGVzcGVyYXIgdW5hIHZ1ZWx0YSBhbAogKiBzZXJ2aWRvciBwb3IgY2FkYSB0ZWNsYS4gRWwgZMOtYSBxdWUgYWxndWllbiBhY3VtdWxlIGNpZW50b3MgaGFicsOhIHF1ZQogKiBwYWdpbmFyOyBoYXN0YSBhaMOtLCBlc3RvIGVzIGxvIGNvcnJlY3RvLgogKgogKiDilIDilIAgalF1ZXJ5IDMuNy4xIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAogKgogKiBFbCBwcm95ZWN0byBwYXPDsyBhIDMuNy4xIHkgcXVpdMOzIGBqcXVlcnktbWlncmF0ZWAgKDEwLzA5LzIwMjYpLCBhc8OtIHF1ZSBhcXXDrQogKiBTw40gaGF5IGAucHJvcCgpYCwgYGUua2V5YCB5IGRlbGVnYWNpw7NuIGRlIGBjaGFuZ2VgIHF1ZSBmdW5jaW9uYSAtLSBsbyBxdWUKICogZHVyYW50ZSBhw7FvcyBubyBzZSBwb2TDrWEgdXNhciB5IHNpZ3VlIGVzY3JpdG8gZW4gYENMQVVERS5tZGAgeSBlbiBtdWNob3MKICogY29tZW50YXJpb3MgZGUgY29tcG9uZW50ZXMgdmllam9zLiBMbyBxdWUgc2UgZnVlIGNvbiBlbCBjYW1iaW8gZXMKICogYCQuZXZlbnQucHJvcHNgLCBxdWUgdHVtYmFiYSBgVFVwbG9hZGVyYCAtLXkgY29uIMOpbCBDVUFMUVVJRVIgcGFudGFsbGEgY29uCiAqIGhpbG8tLSBhbCBjb25zdHJ1aXJzZS4KICovCmNsYXNzIFRBY2NvdW50U3VwcG9ydCBleHRlbmRzIFRDb21wb25lbnRFUzYgewoKICAgIGNvbnN0cnVjdG9yKHBhcmFtcyA9IHt9KSB7CgogICAgICAgIHN1cGVyKHsgdGl0bGU6ICdTb3BvcnRlJywgLi4ucGFyYW1zIH0pOwoKICAgICAgICB0aGlzLl9leHBlZGllbnRlcyA9IFtdOwogICAgICAgIHRoaXMuX3BhbmVsICAgICAgID0gJ2FiaWVydGFzJzsKICAgICAgICB0aGlzLl9maWx0cm9zICAgICA9IHsgdGV4dG86ICcnLCB0aXBvOiAnJywgZXN0YWRvOiAnJyB9OwogICAgICAgIHRoaXMuX2NoYXQgICAgICAgID0gbnVsbDsKICAgICAgICB0aGlzLl9maWNoYSAgICAgICA9IG51bGw7CgogICAgICAgIHRoaXMuX2VuZ2FuY2hhcigpOwoKICAgICAgICAvKiBMQSBDQUJFQ0VSQSwgQU5URVMgREUgUEVESVIgTkFEQTogZXMgbWFyY2FkbyBmaWpvIC0tY2FtaW5vLCB0w610dWxvIHkKICAgICAgICAgICBlbCBib3TDs24gZGUgYWJyaXIgZXhwZWRpZW50ZS0tIHkgYXPDrSBsYSBwYW50YWxsYSBubyBhcnJhbmNhIHNpbgogICAgICAgICAgIHTDrXR1bG8gbWllbnRyYXMgbGxlZ2EgbGEgcmVzcHVlc3RhLiBTaSBzZSBlbnRyYSBkaXJlY3RvIGEgdW5hIGZpY2hhLAogICAgICAgICAgIGBfZGVMYVVybCgpYCBsYSByZXBpbnRhIGFsIHJlY2liaXIgbG9zIGRhdG9zLiAqLwogICAgICAgIHRoaXMuX2NhYmVjZXJhTGlzdGFkbygpOwoKICAgICAgICB0aGlzLmNhcmdhcigpOwoKCiAgICAgICAgLyogWSBzaSBzZSBoYSBlbnRyYWRvIHBvciBlbCBlbmxhY2UgZGUgdW4gY29ycmVvIG8gZGUgdW5hIG5vdGlmaWNhY2nDs24KICAgICAgICAgICAtLWAvYWNjb3VudC9zdXBwb3J0L2luY2lkZW5jaWEvMTJgLCBxdWUgZWwgY29udHJvbGFkb3IgY29udmllcnRlIGVuCiAgICAgICAgICAgYD9yb3V0ZT1zdXBwb3J0JmlkPWluY2lkZW5jaWEtMTJgLS0sIHNlIGFicmUgZXNhIGZpY2hhLiAqLwogICAgICAgIHRoaXMuX2RlTGFVcmwoKTsKICAgIH0KCiAgICAvKiogQ2xvbmEgdW4gYDx0ZW1wbGF0ZT5gIGRlbCBgLnBocGA6IHN1IGNvbnRlbmlkbyB2aXZlIGVuIGAuY29udGVudGAuICovCiAgICBfcGxhbnRpbGxhKGNsYXNlKSB7CiAgICAgICAgY29uc3QgdCA9IHRoaXMuaHRtbC5maW5kKCd0ZW1wbGF0ZS4nICsgY2xhc2UpLmdldCgwKTsKICAgICAgICByZXR1cm4gdCA/ICQodC5jb250ZW50LmNsb25lTm9kZSh0cnVlKS5maXJzdEVsZW1lbnRDaGlsZCkgOiAkKCk7CiAgICB9CgogICAgLyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCiAgICAgKiAgRU5HQU5DSEVTCiAgICAgKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi8KCiAgICBfZW5nYW5jaGFyKCkgewoKICAgICAgICBjb25zdCB5byA9IHRoaXM7CgogICAgICAgIHRoaXMuaHRtbC5vbignY2xpY2snLCAnLnNwdC1qcy1wZXN0YW5hJywgZnVuY3Rpb24gKCkgewogICAgICAgICAgICB5by5fcGFuZWwgPSAkKHRoaXMpLmF0dHIoJ2RhdGEtcGFuZWwnKSB8fCAnYWJpZXJ0YXMnOwogICAgICAgICAgICB5by5odG1sLmZpbmQoJy5zcHQtanMtcGVzdGFuYScpLnJlbW92ZUNsYXNzKCdvbicpOwogICAgICAgICAgICAkKHRoaXMpLmFkZENsYXNzKCdvbicpOwogICAgICAgICAgICB5by5fcGludGFyRmlsYXMoKTsKICAgICAgICB9KTsKCiAgICAgICAgLyogYGtleXVwYCB5IG5vIGBjaGFuZ2VgOiBlbCBidXNjYWRvciB0aWVuZSBxdWUgcmVzcG9uZGVyIHNlZ8O6biBzZQogICAgICAgICAgIGVzY3JpYmUsIHF1ZSBlcyBkZSBsbyBxdWUgc2lydmUgdGVuZXJsbyBlbiBlbCBjbGllbnRlLiAqLwogICAgICAgIHRoaXMuaHRtbC5vbigna2V5dXAnLCAnLnNwdC1qcy1idXNjYXInLCBmdW5jdGlvbiAoKSB7CiAgICAgICAgICAgIHlvLl9maWx0cm9zLnRleHRvID0gKCQodGhpcykudmFsKCkgfHwgJycpLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgeW8uX3BpbnRhckZpbGFzKCk7CiAgICAgICAgfSk7CgogICAgICAgIHRoaXMuaHRtbC5vbignY2hhbmdlJywgJy5zcHQtanMtdGlwbycsICAgZnVuY3Rpb24gKCkgeyB5by5fZmlsdHJvcy50aXBvICAgPSAkKHRoaXMpLnZhbCgpIHx8ICcnOyB5by5fcGludGFyRmlsYXMoKTsgfSk7CiAgICAgICAgdGhpcy5odG1sLm9uKCdjaGFuZ2UnLCAnLnNwdC1qcy1lc3RhZG8nLCBmdW5jdGlvbiAoKSB7IHlvLl9maWx0cm9zLmVzdGFkbyA9ICQodGhpcykudmFsKCkgfHwgJyc7IHlvLl9waW50YXJGaWxhcygpOyB9KTsKCiAgICAgICAgdGhpcy5odG1sLm9uKCdjbGljaycsICcuc3B0LWpzLXZvbHZlcicsICgpID0+IHRoaXMudmVyTGlzdGFkbygpKTsKICAgICAgICB0aGlzLmh0bWwub24oJ2NsaWNrJywgJy5zcHQtanMtYWJyaXInLCAgKCkgPT4gdGhpcy5hYnJpck51ZXZhKCkpOwogICAgICAgIHRoaXMuaHRtbC5vbignY2xpY2snLCAnLnNwdC1qcy1jaGF0JywgICAoKSA9PiB0aGlzLmFicmlyQ2hhdCgpKTsKICAgICAgICB0aGlzLmh0bWwub24oJ2NsaWNrJywgJy5zcHQtanMtY29waWFyJywgKCkgPT4gdGhpcy5fY29waWFyKCkpOwogICAgfQoKICAgIC8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkAogICAgICogIExPUyBEQVRPUwogICAgICog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQICovCgogICAgY2FyZ2FyKCkgewoKICAgICAgICBjb25zdCB5byA9IHRoaXM7CgogICAgICAgIHRoaXMuX3RhYmxhKCkuc2V0RW1wdHkoJ0NhcmdhbmRvIHR1cyBleHBlZGllbnRlc+KApicpLmRhdGEoW10pOwoKICAgICAgICBUTmV0Q29tLkdFVCgnL2FjY291bnQvc3VwcG9ydC9kYXRhJywge30sIGZ1bmN0aW9uIChyZXNwKSB7CgogICAgICAgICAgICBjb25zdCBkID0gKHJlc3AgJiYgcmVzcC5kYXRhKSA/IHJlc3AuZGF0YSA6IHJlc3A7CgogICAgICAgICAgICBpZiAoIWQgfHwgIWQuZXhwZWRpZW50ZXMpIHsKICAgICAgICAgICAgICAgIHlvLl90YWJsYSgpLnNldEVtcHR5KCdObyBoZW1vcyBwb2RpZG8gY2FyZ2FyIHR1cyBleHBlZGllbnRlcy4nKS5kYXRhKFtdKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgeW8uX2V4cGVkaWVudGVzID0gZC5leHBlZGllbnRlcyB8fCBbXTsKCiAgICAgICAgICAgIHlvLl9waW50YXJDaWZyYXMoZC5jaWZyYXMgfHwge30pOwogICAgICAgICAgICB5by5fcGludGFyQ2FuYWxlcyhkLmNhbmFsZXMgfHwge30pOwogICAgICAgICAgICB5by5fcGludGFyRmFxKGQuZmFxIHx8IFtdKTsKICAgICAgICAgICAgeW8uX3BpbnRhckZpbGFzKCk7CiAgICAgICAgfSk7CiAgICB9CgogICAgLyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCiAgICAgKiAgRUwgTElTVEFETwogICAgICog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQICovCgogICAgX3BpbnRhckNpZnJhcyhjKSB7CiAgICAgICAgdGhpcy5odG1sLmZpbmQoJy5zcHQtanMtYy1hYmllcnRhcycpLnRleHQoYy5hYmllcnRhcyB8fCAwKTsKICAgICAgICB0aGlzLmh0bWwuZmluZCgnLnNwdC1qcy1jLXJlc3VlbHRhcycpLnRleHQoYy5yZXN1ZWx0YXMgfHwgMCk7CiAgICAgICAgdGhpcy5odG1sLmZpbmQoJy5zcHQtanMtYy1zaW5sZWVyJykudGV4dChjLnNpbkxlZXIgfHwgMCk7CiAgICAgICAgdGhpcy5odG1sLmZpbmQoJy5zcHQtanMtYy10b3RhbCcpLnRleHQoYy50b3RhbCB8fCAwKTsKCiAgICAgICAgdGhpcy5odG1sLmZpbmQoJy5zcHQtanMtbi1hYmllcnRhcycpLnRleHQoYy5hYmllcnRhcyB8fCAwKTsKICAgICAgICB0aGlzLmh0bWwuZmluZCgnLnNwdC1qcy1uLWNlcnJhZGFzJykudGV4dChjLmNlcnJhZGFzIHx8IDApOwogICAgICAgIHRoaXMuaHRtbC5maW5kKCcuc3B0LWpzLW4tdG9kYXMnKS50ZXh0KGMudG90YWwgfHwgMCk7CiAgICB9CgogICAgLyoqIExvIHF1ZSBwYXNhIGxvcyBmaWx0cm9zIHkgbGEgcGVzdGHDsWEgcHVlc3RhLiAqLwogICAgX3Zpc2libGVzKCkgewoKICAgICAgICBjb25zdCBmID0gdGhpcy5fZmlsdHJvczsKICAgICAgICBjb25zdCBwID0gdGhpcy5fcGFuZWw7CgogICAgICAgIHJldHVybiB0aGlzLl9leHBlZGllbnRlcy5maWx0ZXIoZnVuY3Rpb24gKGUpIHsKCiAgICAgICAgICAgIGNvbnN0IGFiaWVydG8gPSBlLmVzdGFkby5jb2RlID09PSAnd2FpdGluZycgfHwgZS5lc3RhZG8uY29kZSA9PT0gJ2F0dGVuZGVkJzsKCiAgICAgICAgICAgIGlmIChwID09PSAnYWJpZXJ0YXMnICYmICFhYmllcnRvKSByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIGlmIChwID09PSAnY2VycmFkYXMnICYmIGFiaWVydG8pICByZXR1cm4gZmFsc2U7CgogICAgICAgICAgICBpZiAoZi50aXBvICAgJiYgZS50aXBvICE9PSBmLnRpcG8pICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgaWYgKGYuZXN0YWRvICYmIGUuZXN0YWRvLmNvZGUgIT09IGYuZXN0YWRvKSByZXR1cm4gZmFsc2U7CgogICAgICAgICAgICBpZiAoZi50ZXh0bykgewogICAgICAgICAgICAgICAgY29uc3Qgc2FjbyA9IFtlLmNvZGUsIGUuYXN1bnRvLCAoZS5wZWRpZG8gPyBlLnBlZGlkby5yZWYgOiAnJyksIChlLnZlbmRlZG9yIHx8ICcnKV0KICAgICAgICAgICAgICAgICAgICAuam9pbignICcpLnRvTG93ZXJDYXNlKCk7CgogICAgICAgICAgICAgICAgaWYgKHNhY28uaW5kZXhPZihmLnRleHRvKSA9PT0gLTEpIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBMQSBUQUJMQSBERSBFWFBFRElFTlRFUywgdW5hIGBURGF0YVRhYmxlYCAoMTMvMTAvMjAyNiwgRjQgZGUKICAgICAqIFREQVRBVEFCTEUubWQpIG1vbnRhZGEgVU5BIHZleiBlbiBzdSBodWVjbzogZmlsdHJvcyB5IHBlc3Rhw7FhcyBzb2xvIGxlCiAgICAgKiBwYXNhbiBgZGF0YSgpYC4gTGEgZmlsYSBlbnRlcmEgZXMgZWwgZW5sYWNlOiBwb3IgZXNvIG5vIGhheSBjb2x1bW5hIGRlCiAgICAgKiDCq1ZlcsK7LgogICAgICovCiAgICBfdGFibGEoKSB7CgogICAgICAgIGNvbnN0ICRoID0gdGhpcy5odG1sLmZpbmQoJy5zcHQtanMtdGFibGEnKTsKICAgICAgICBjb25zdCBlbCA9ICRoWzBdOwoKICAgICAgICBpZiAoIXRoaXMuX3RkdCB8fCAoZWwgJiYgIWVsLmNvbnRhaW5zKHRoaXMuX3RkdC5odG1sWzBdKSkpIHsKICAgICAgICAgICAgdGhpcy5fdGR0ID0gVENvbXBvbmVudC5jcmVhdGUoJ1REYXRhVGFibGUnLCB7CiAgICAgICAgICAgICAgICBrZXlGaWVsZDogJ2snLAogICAgICAgICAgICAgICAgY2FwdGlvbjogJ01pcyBleHBlZGllbnRlcycsCiAgICAgICAgICAgICAgICBjbGlja2FibGU6IHRydWUsCiAgICAgICAgICAgICAgICByb3dDbGFzczogJ2NsYXNlJywKICAgICAgICAgICAgICAgIGNvbHVtbnM6IFsKICAgICAgICAgICAgICAgICAgICB7IGtleTogJ2NvZGUnLCBsYWJlbDogJ07CuiBkZSBleHBlZGllbnRlJywgYm9sZDogdHJ1ZSwgbm93cmFwOiB0cnVlLCBwaWxsczogJ3RpcG8nIH0sCiAgICAgICAgICAgICAgICAgICAgeyBrZXk6ICdhc3VudG8nLCBsYWJlbDogJ0FzdW50bycsIGJvbGQ6IHRydWUsIHN1YjogJ3VsdGltbycsIHBpbGxzOiAnbWFyY2EnLCBjbGFzczogJ3RkdC1yZWNvcnRlJyB9LAogICAgICAgICAgICAgICAgICAgIHsga2V5OiAncGVkaWRvJywgbGFiZWw6ICdQZWRpZG8nLCBub3dyYXA6IHRydWUgfSwKICAgICAgICAgICAgICAgICAgICB7IGtleTogJ2ZlY2hhJywgbGFiZWw6ICfDmmx0aW1hIHJlc3B1ZXN0YScsIG5vd3JhcDogdHJ1ZSwgbXV0ZWQ6IHRydWUgfSwKICAgICAgICAgICAgICAgICAgICB7IGtleTogJ2VzdGFkbycsIGxhYmVsOiAnRXN0YWRvJywgdHlwZTogJ3BpbGwnLCB0b25lOiAnZXN0YWRvX3Rvbm8nIH0sCiAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICB9KTsKICAgICAgICAgICAgdGhpcy5fdmFjaW9UYWJsYSA9ICdObyBoYXkgZXhwZWRpZW50ZXMuJzsKICAgICAgICAgICAgdGhpcy5fdGR0Lm9uKCdyb3dDbGljaycsIChlLCBkKSA9PiB7CiAgICAgICAgICAgICAgICBjb25zdCBmID0gZCAmJiBkLmZpbGE7CiAgICAgICAgICAgICAgICBpZiAoZiAmJiBmLnRpcG9faWQgJiYgZi5pZCkgdGhpcy5hYnJpckZpY2hhKGYudGlwb19pZCwgZi5pZCk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICAkaC5lbXB0eSgpLmFwcGVuZCh0aGlzLl90ZHQuaHRtbCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gdGhpcy5fdGR0OwogICAgfQoKICAgIF9waW50YXJGaWxhcygpIHsKCiAgICAgICAgY29uc3QgZmlsYXMgPSB0aGlzLl92aXNpYmxlcygpOwoKICAgICAgICB0aGlzLmh0bWwuZmluZCgnLnNwdC1qcy12YWNpbycpLmdldCgwKS5oaWRkZW4gICAgICA9IGZpbGFzLmxlbmd0aCA+IDA7CiAgICAgICAgdGhpcy5odG1sLmZpbmQoJy5zcHQtanMtbGlzdGEtY2FyZCcpLmdldCgwKS5oaWRkZW4gPSBmaWxhcy5sZW5ndGggPT09IDA7CgogICAgICAgIGlmICghZmlsYXMubGVuZ3RoKSB7CiAgICAgICAgICAgIHRoaXMuX3RleHRvRGVsVmFjaW8oKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgdGhpcy5fdGFibGEoKS5zZXRFbXB0eSh0aGlzLl92YWNpb1RhYmxhKS5kYXRhKGZpbGFzLm1hcChlID0+IHRoaXMuX2ZpbGEoZSkpKTsKCiAgICAgICAgY29uc3QgJHBpZSA9IHRoaXMuaHRtbC5maW5kKCcuc3B0LWpzLXBpZScpOwogICAgICAgICRwaWUuZ2V0KDApLmhpZGRlbiA9IGZhbHNlOwogICAgICAgICRwaWUuZmluZCgnLnNwdC1qcy1jdWVudGEnKS50ZXh0KAogICAgICAgICAgICBmaWxhcy5sZW5ndGggPT09IHRoaXMuX2V4cGVkaWVudGVzLmxlbmd0aAogICAgICAgICAgICAgICAgPyBmaWxhcy5sZW5ndGggKyAoZmlsYXMubGVuZ3RoID09PSAxID8gJyBleHBlZGllbnRlJyA6ICcgZXhwZWRpZW50ZXMnKQogICAgICAgICAgICAgICAgOiBmaWxhcy5sZW5ndGggKyAnIGRlICcgKyB0aGlzLl9leHBlZGllbnRlcy5sZW5ndGggKyAnIGV4cGVkaWVudGVzJwogICAgICAgICk7CiAgICB9CgogICAgLyoqCiAgICAgKiBFTCBWQUPDjU8gRElDRSBQT1IgUVXDiSBFU1TDgSBWQUPDjU8uCiAgICAgKgogICAgICogTm8gZXMgbG8gbWlzbW8gbm8gdGVuZXIgbmFkYSBxdWUgaGFiZXIgZmlsdHJhZG8gaGFzdGEgcXVlZGFyc2Ugc2luCiAgICAgKiBuYWRhOiBjb24gZWwgbWlzbW8gdGV4dG8gcGFyYSBsb3MgZG9zIGNhc29zLCBxdWllbiBhY2FiYSBkZSBlc2NyaWJpciBlbgogICAgICogZWwgYnVzY2Fkb3IgY3JlZSBxdWUgaGEgcGVyZGlkbyBzdXMgZXhwZWRpZW50ZXMuCiAgICAgKi8KICAgIF90ZXh0b0RlbFZhY2lvKCkgewoKICAgICAgICBjb25zdCBmaWx0cmFuZG8gPSB0aGlzLl9maWx0cm9zLnRleHRvIHx8IHRoaXMuX2ZpbHRyb3MudGlwbyB8fCB0aGlzLl9maWx0cm9zLmVzdGFkbzsKCiAgICAgICAgdGhpcy5odG1sLmZpbmQoJy5zcHQtanMtdmFjaW8tdGl0dWxvJykudGV4dCgKICAgICAgICAgICAgZmlsdHJhbmRvID8gJ05pbmfDum4gZXhwZWRpZW50ZSBjb2luY2lkZSBjb24gbGEgYsO6c3F1ZWRhJwogICAgICAgICAgICAgICAgICAgICAgOiAodGhpcy5fcGFuZWwgPT09ICdjZXJyYWRhcycgPyAnTm8gdGllbmVzIGV4cGVkaWVudGVzIGNlcnJhZG9zJwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAnTm8gdGllbmVzIG5pbmd1bmEgaW5jaWRlbmNpYSBhYmllcnRhJykKICAgICAgICApOwoKICAgICAgICB0aGlzLmh0bWwuZmluZCgnLnNwdC1qcy12YWNpby10ZXh0bycpLnRleHQoCiAgICAgICAgICAgIGZpbHRyYW5kbyA/ICdQcnVlYmEgY29uIG90cm8gdGV4dG8sIG8gcXVpdGEgbG9zIGZpbHRyb3MgcGFyYSB2ZXJsb3MgdG9kb3MuJwogICAgICAgICAgICAgICAgICAgICAgOiAnQ3VhbmRvIGFicmFzIHVuYSBpbmNpZGVuY2lhIHNvYnJlIHVuIHBlZGlkbyBvIG5vcyBoYWdhcyB1bmEgY29uc3VsdGEsIGFwYXJlY2Vyw6EgYXF1w60gY29uIHN1IGVzdGFkbyB5IHN1cyByZXNwdWVzdGFzLicKICAgICAgICApOwogICAgfQoKICAgIC8qKiBVbmEgZmlsYSBkZSBsYSB0YWJsYTogbG8gcXVlIHNlIGVuc2XDsWEsIHlhIGVzY3JpdG8uICovCiAgICBfZmlsYShlKSB7CgogICAgICAgIGNvbnN0IGVzdGFkbyA9IGUuZXN0YWRvIHx8IHt9OwoKICAgICAgICByZXR1cm4gewogICAgICAgICAgICBrOiBlLnRpcG8gKyAnLScgKyBlLmlkLAogICAgICAgICAgICBpZDogZS5pZCwKICAgICAgICAgICAgdGlwb19pZDogZS50aXBvLAogICAgICAgICAgICBjbGFzZTogZS5zaW5MZWVyID8gJ3NwdC1udWV2YScgOiAnJywKICAgICAgICAgICAgY29kZTogZS5jb2RlLAogICAgICAgICAgICB0aXBvOiBbZS50aXBvID09PSAnaW5jaWRlbmNpYScKICAgICAgICAgICAgICAgID8geyB0ZXh0bzogJ0luY2lkZW5jaWEnLCB0b25vOiAnYW1iYXInIH0KICAgICAgICAgICAgICAgIDogeyB0ZXh0bzogJ0NvbnN1bHRhJywgdG9ubzogJ3ZlcmRlJyB9XSwKICAgICAgICAgICAgYXN1bnRvOiBlLmFzdW50bywKICAgICAgICAgICAgbWFyY2E6IGUuc2luTGVlciA/IFt7IHRleHRvOiAnbnVldm8nLCB0b25vOiAndmVyZGUnIH1dIDogW10sCiAgICAgICAgICAgIHVsdGltbzogKGUudWx0aW1vICYmIGUudWx0aW1vLnRleHRvKSB8fCAnJywKICAgICAgICAgICAgcGVkaWRvOiBlLnBlZGlkbyA/IGUucGVkaWRvLnJlZiA6ICfigJQnLAogICAgICAgICAgICBmZWNoYTogKGUudWx0aW1vICYmIGUudWx0aW1vLmZlY2hhKSB8fCAn4oCUJywKICAgICAgICAgICAgZXN0YWRvOiBlc3RhZG8ubGFiZWwgfHwgJycsCiAgICAgICAgICAgIGVzdGFkb190b25vOiB7IGVzcGVyYTogJ2F6dWwnLCBjdXJzbzogJ2F6dWwnLCBvazogJ3ZlcmRlJywgZ3JpczogJ2dyaXMnIH1bZXN0YWRvLnRvbm9dIHx8ICdncmlzJywKICAgICAgICB9OwogICAgfQoKICAgIF9waWxkb3JhKGVzdGFkbykgewogICAgICAgIHJldHVybiAkKCc8c3BhbiBjbGFzcz0ic3B0LXBpbGRvcmEiPjwvc3Bhbj4nKQogICAgICAgICAgICAuYWRkQ2xhc3MoJ3NwdC1wLScgKyAoZXN0YWRvLnRvbm8gfHwgJ2dyaXMnKSkKICAgICAgICAgICAgLnRleHQoZXN0YWRvLmxhYmVsKTsKICAgIH0KCiAgICAvKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAKICAgICAqICBMQSBDT0xVTU5BIERFUkVDSEEKICAgICAqIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqLwoKICAgIC8qKgogICAgICogTE9TIENBTkFMRVMgREUgTEEgUExBVEFGT1JNQSwgbm8gbG9zIGRlbCBhZ3JpY3VsdG9yLgogICAgICoKICAgICAqIFNhbGVuIGRlIGxhIGZpY2hhIGRlIGxhIGNhc2EgKGBDb3JlXEVudGVycHJpc2VgKSwgYXPDrSBxdWUgZWwgZMOtYSBxdWUKICAgICAqIGNhbWJpZSBlbCBob3JhcmlvIG8gZWwgdGVsw6lmb25vIG5vIGhheSBxdWUgYnVzY2FybG9zIHBvciBsYXMgcGFudGFsbGFzLgogICAgICogWSBzZSBwaW50YSBzb2xvIGxvIHF1ZSBoYXk6IHVuIGNhbmFsIGNvbiBlbCBodWVjbyB2YWPDrW8gZXMgcGVvciBxdWUgbm8KICAgICAqIG9mcmVjZXJsbywgcG9ycXVlIGFsZ3VpZW4gbG8gaW50ZW50YS4KICAgICAqLwogICAgX3BpbnRhckNhbmFsZXMoYykgewoKICAgICAgICBjb25zdCAkZG9uZGUgPSB0aGlzLmh0bWwuZmluZCgnLnNwdC1qcy1jYW5hbGVzJykuZW1wdHkoKTsKICAgICAgICBjb25zdCBmaWxhcyAgPSBbXTsKCiAgICAgICAgaWYgKGMuY2hhdCAmJiBjLmNoYXQuYWN0aXZvKSB7CiAgICAgICAgICAgIGZpbGFzLnB1c2goWydsdWNpZGU6bWVzc2FnZS1zcXVhcmUnLCAnc3B0LXQtdmVyZGUnLCAnQ2hhdCBlbiBsw61uZWEnLCAnJywgYy5jaGF0LmRldGFsbGUgfHwgJycsIHRydWVdKTsKICAgICAgICB9CgogICAgICAgIGNvbnN0IGhvcmFzQ29ycmVvID0gcGFyc2VJbnQoYy5lbWFpbF9ob3JhcyB8fCAwLCAxMCk7CiAgICAgICAgaWYgKGMuZW1haWwpICAgIGZpbGFzLnB1c2goWydsdWNpZGU6bWFpbCcsICAnc3B0LXQtYXp1bCcsICdDb3JyZW8gZWxlY3Ryw7NuaWNvJywgYy5lbWFpbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9yYXNDb3JyZW8gPiAwID8gJ1RlIGNvbnRlc3RhbW9zIGVuICcgKyBob3Jhc0NvcnJlbyArICcgaCcgOiAnJywgZmFsc2VdKTsKICAgICAgICBpZiAoYy50ZWxlZm9ubykgZmlsYXMucHVzaChbJ2x1Y2lkZTpwaG9uZScsICdzcHQtdC1ncmlzJywgJ1RlbMOpZm9ubycsIGMudGVsZWZvbm8sIGMuaG9yYXJpbyB8fCAnJywgZmFsc2VdKTsKCiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWxhcy5sZW5ndGg7IGkrKykgewoKICAgICAgICAgICAgY29uc3QgZiAgPSBmaWxhc1tpXTsKICAgICAgICAgICAgY29uc3QgJGMgPSB0aGlzLl9wbGFudGlsbGEoJ3NwdC10cGwtY2FuYWwnKTsKCiAgICAgICAgICAgICRjLmZpbmQoJy5zcHQtY2FuYWwtaWNvbm8nKS5hZGRDbGFzcyhmWzFdKS5maW5kKCdpY29uaWZ5LWljb24nKS5hdHRyKCdpY29uJywgZlswXSk7CiAgICAgICAgICAgICRjLmZpbmQoJ2InKS50ZXh0KGZbMl0pOwoKICAgICAgICAgICAgaWYgKGZbM10pICRjLmZpbmQoJ3NtYWxsJykudGV4dChmWzNdKTsgZWxzZSAkYy5maW5kKCdzbWFsbCcpLnJlbW92ZSgpOwogICAgICAgICAgICBpZiAoZls0XSkgJGMuZmluZCgnZW0nKS50ZXh0KGZbNF0pOyAgICBlbHNlICRjLmZpbmQoJ2VtJykucmVtb3ZlKCk7CgogICAgICAgICAgICAvKiBFbCBjaGF0IGxsZXZhIHN1IGJvdMOzbjogZXMgZWwgw7puaWNvIGNhbmFsIHF1ZSBzZSBhYnJlIGRlc2RlIGFxdcOtCiAgICAgICAgICAgICAgIG1pc21vLCB5IHNpbiDDqWwgbGEgZmlsYSBzb2xvIGRpY2UgcXVlIGV4aXN0ZS4gKi8KICAgICAgICAgICAgaWYgKGZbNV0pIHsKICAgICAgICAgICAgICAgICRjLmZpbmQoJy5zcHQtY2FuYWwtdHh0JykuYXBwZW5kKAogICAgICAgICAgICAgICAgICAgICQoJzxhIGNsYXNzPSJzcHQtYnRuIHNwdC1idG4tc2VjdW5kYXJpbyBzcHQtanMtY2hhdCIgaHJlZj0iamF2YXNjcmlwdDo7Ij48L2E+JykudGV4dCgnSW5pY2lhciBjaGF0JykKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRkb25kZS5hcHBlbmQoJGMpOwogICAgICAgIH0KCiAgICAgICAgdGhpcy5odG1sLmZpbmQoJy5zcHQtanMtY2FuYWxlcycpLmdldCgwKS5oaWRkZW4gPSBmaWxhcy5sZW5ndGggPT09IDA7CiAgICB9CgogICAgLyoqCiAgICAgKiBMQVMgUFJFR1VOVEFTIEZSRUNVRU5URVMsIGRlIGxhIGF5dWRhIHB1YmxpY2FkYS4KICAgICAqCiAgICAgKiBMYSB0YXJqZXRhIG5hY2Ugb2N1bHRhIHkgc29sbyBzZSBlbnNlw7FhIHNpIGhheSBhbGd1bmE6IHVuIGJsb3F1ZQogICAgICogwqtQcmVndW50YXMgZnJlY3VlbnRlc8K7IHZhY8OtbyBvY3VwYSBlbCBzaXRpbyBkZSBsYSBjb2x1bW5hIHNpbiBkZWNpcgogICAgICogbmFkYSwgeSBlbiB1bmEgaW5zdGFsYWNpw7NuIHJlY2nDqW4gcHVlc3RhIGVzIGxvIG5vcm1hbC4KICAgICAqLwogICAgX3BpbnRhckZhcShsaXN0YSkgewoKICAgICAgICBjb25zdCAkY2FyZCA9IHRoaXMuaHRtbC5maW5kKCcuc3B0LWpzLWZhcS1jYXJkJyk7CgogICAgICAgICRjYXJkLmdldCgwKS5oaWRkZW4gPSAhbGlzdGEubGVuZ3RoOwoKICAgICAgICBpZiAoIWxpc3RhLmxlbmd0aCkgcmV0dXJuOwoKICAgICAgICBjb25zdCAkZG9uZGUgPSB0aGlzLmh0bWwuZmluZCgnLnNwdC1qcy1mYXEnKS5lbXB0eSgpOwogICAgICAgIGNvbnN0IHlvICAgICA9IHRoaXM7CgogICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdGEubGVuZ3RoOyBpKyspIHsKCiAgICAgICAgICAgIGNvbnN0ICRmID0gdGhpcy5fcGxhbnRpbGxhKCdzcHQtdHBsLWZhcScpOwoKICAgICAgICAgICAgJGYuZmluZCgnc3BhbicpLnRleHQobGlzdGFbaV0ucSk7CgogICAgICAgICAgICAvKiBMYSByZXNwdWVzdGEgeWEgdmllbmUgY29uIGxhIHByZWd1bnRhOiBlbnNlw7FhcmxhIGFxdcOtIGFob3JyYSBlbAogICAgICAgICAgICAgICB2aWFqZSBhIGAvYXl1ZGFgIHBhcmEgbGFzIGNpbmNvIHF1ZSBtw6FzIHNlIHByZWd1bnRhbi4gKi8KICAgICAgICAgICAgJGYub24oJ2NsaWNrJywgKGZ1bmN0aW9uIChpdGVtKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKCkgeyB5by5fdmVyUmVzcHVlc3RhKGl0ZW0pOyB9OwogICAgICAgICAgICB9KShsaXN0YVtpXSkpOwoKICAgICAgICAgICAgJGRvbmRlLmFwcGVuZCgkZik7CiAgICAgICAgfQogICAgfQoKICAgIC8qKiBMYSByZXNwdWVzdGEsIGVuIGVsIG92ZXJsYXkgZGVsIHByb3llY3RvLiAqLwogICAgX3ZlclJlc3B1ZXN0YShpdGVtKSB7CgogICAgICAgIGlmICh0eXBlb2YgVE92ZXJsYXlXaW4gIT09ICdmdW5jdGlvbicpIHJldHVybjsKCiAgICAgICAgY29uc3QgY3VlcnBvID0gJCgnPGRpdiBjbGFzcz0ic3B0LWZhcS1yZXNwdWVzdGEiPjwvZGl2PicpLnRleHQoaXRlbS5hKTsKCiAgICAgICAgVE92ZXJsYXlXaW4uY3JlYXRlKHsKICAgICAgICAgICAgdGl0bGU6IFRPdmVybGF5V2luLmNhYmVjZXJhKHsKICAgICAgICAgICAgICAgIGljb246ICdsdWNpZGU6Y2lyY2xlLWhlbHAnLAogICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0ucSwKICAgICAgICAgICAgICAgIHN1YnRpdGxlOiAnRGUgbGFzIHByZWd1bnRhcyBmcmVjdWVudGVzIGRlIEFncm9DYWxpYScKICAgICAgICAgICAgfSksCiAgICAgICAgICAgIGNvbnRlbnQ6IGN1ZXJwbywKICAgICAgICAgICAgY2xvc2VJY29uOiB0cnVlCiAgICAgICAgfSkuc2hvdygpOwogICAgfQoKICAgIC8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkAogICAgICogIExBIEZJQ0hBCiAgICAgKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi8KCiAgICBhYnJpckZpY2hhKHRpcG8sIGlkKSB7CgogICAgICAgIGNvbnN0IHlvID0gdGhpczsKCiAgICAgICAgVE5ldENvbS5HRVQoJy9hY2NvdW50L3N1cHBvcnQvJyArIHRpcG8gKyAnLycgKyBpZCArICcvZGF0YScsIHt9LCBmdW5jdGlvbiAocmVzcCkgewoKICAgICAgICAgICAgY29uc3QgZCA9IChyZXNwICYmIHJlc3AuZGF0YSkgPyByZXNwLmRhdGEgOiByZXNwOwoKICAgICAgICAgICAgaWYgKCFkIHx8ICFkLmlkKSB7CiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIFROb3RpZnkgPT09ICdmdW5jdGlvbicpIFROb3RpZnkudG9hc3QoJ05vIGhlbW9zIGVuY29udHJhZG8gZXNlIGV4cGVkaWVudGUnKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgeW8uX2ZpY2hhID0gZDsKICAgICAgICAgICAgeW8uX3BpbnRhckZpY2hhKGQpOwogICAgICAgICAgICB5by5fdmVyRmljaGEoKTsKCiAgICAgICAgICAgIC8qIExhIFVSTCBhY29tcGHDsWEgYSBsbyBxdWUgc2UgZXN0w6EgdmllbmRvLCBwYXJhIHF1ZSByZWNhcmdhciBvCiAgICAgICAgICAgICAgIGNvbXBhcnRpciBlbCBlbmxhY2UgbGxldmUgYWwgbWlzbW8gc2l0aW8uICovCiAgICAgICAgICAgIC8qIFNpbiBhcGlsYXIgbGEgbWlzbWEgZGlyZWNjacOzbiBkb3MgdmVjZXM6IGFsIGVudHJhciBwb3IgZWxsYSwgZWwKICAgICAgICAgICAgICAgbWVuw7ogeWEgbGEgaGEgZXNjcml0by4gKi8KICAgICAgICAgICAgY29uc3QgZGVzdGlubyA9ICcvYWNjb3VudC9zdXBwb3J0LycgKyB0aXBvICsgJy8nICsgaWQ7CgogICAgICAgICAgICBpZiAod2luZG93Lmhpc3RvcnkgJiYgaGlzdG9yeS5wdXNoU3RhdGUgJiYgbG9jYXRpb24ucGF0aG5hbWUgIT09IGRlc3Rpbm8pIHsKICAgICAgICAgICAgICAgIGhpc3RvcnkucHVzaFN0YXRlKHsgaXNNZW51OiB0cnVlIH0sICcnLCBkZXN0aW5vKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfQoKICAgIF9waW50YXJGaWNoYShkKSB7CgogICAgICAgIC8qIFBSSU1FUk8gTEEgQ0FCRUNFUkE6IGVsIGFzdW50byB5IGxhIHDDrWxkb3JhIGRlIGVzdGFkbyB2aXZlbiBERU5UUk8gZGUKICAgICAgICAgICBlbGxhIC0tc3VzIGh1ZWNvcyBsb3MgbW9udGEgYF9jYWJlY2VyYUZpY2hhKClgLS0gYXPDrSBxdWUgZXNjcmliaXIKICAgICAgICAgICBhbnRlcyBubyBwaW50YXLDrWEgbmFkYS4gKi8KICAgICAgICB0aGlzLl9jYWJlY2VyYUZpY2hhKGQpOwoKICAgICAgICB0aGlzLmh0bWwuZmluZCgnLnNwdC1qcy1mLWFzdW50bycpLnRleHQoZC5hc3VudG8pOwogICAgICAgIHRoaXMuaHRtbC5maW5kKCcuc3B0LWpzLWYtY29kZScpLnRleHQoZC5jb2RlKTsKCiAgICAgICAgdGhpcy5odG1sLmZpbmQoJy5zcHQtanMtZi10aXBvJykKICAgICAgICAgICAgLnRleHQoZC50aXBvID09PSAnaW5jaWRlbmNpYScgPyAnSW5jaWRlbmNpYScgOiAnQ29uc3VsdGEnKQogICAgICAgICAgICAucmVtb3ZlQ2xhc3MoJ3NwdC10aXBvLWluYyBzcHQtdGlwby1jb24nKQogICAgICAgICAgICAuYWRkQ2xhc3MoZC50aXBvID09PSAnaW5jaWRlbmNpYScgPyAnc3B0LXRpcG8taW5jJyA6ICdzcHQtdGlwby1jb24nKTsKCiAgICAgICAgdGhpcy5odG1sLmZpbmQoJy5zcHQtanMtZi1lc3RhZG8nKQogICAgICAgICAgICAuYXR0cignY2xhc3MnLCAnc3B0LXBpbGRvcmEgc3B0LWpzLWYtZXN0YWRvIHNwdC1wLScgKyAoZC5lc3RhZG8udG9ubyB8fCAnZ3JpcycpKQogICAgICAgICAgICAudGV4dChkLmVzdGFkby5sYXJnbyB8fCBkLmVzdGFkby5sYWJlbCk7CgogICAgICAgIHRoaXMuX3BpbnRhckRhdG9zKGQpOwogICAgICAgIHRoaXMuX3BpbnRhclBlZGlkbyhkLnBlZGlkbyk7CiAgICAgICAgdGhpcy5fbW9udGFyQ2hhdChkLmNhbmFsKTsKICAgIH0KCiAgICBfcGludGFyRGF0b3MoZCkgewoKICAgICAgICBjb25zdCAkZG9uZGUgPSB0aGlzLmh0bWwuZmluZCgnLnNwdC1qcy1mLWRhdG9zJykuZW1wdHkoKTsKCiAgICAgICAgY29uc3QgZGF0b3MgPSBbXTsKCiAgICAgICAgaWYgKGQucGVkaWRvKSBkYXRvcy5wdXNoKFsnbHVjaWRlOnBhY2thZ2UnLCAnc3B0LXQtdmVyZGUnLCAnUGVkaWRvJywgZC5wZWRpZG8ucmVmXSk7CgogICAgICAgIGRhdG9zLnB1c2goWydsdWNpZGU6Y2FsZW5kYXItZGF5cycsICdzcHQtdC1henVsJywgJ0ZlY2hhIGRlIGFwZXJ0dXJhJywgZC5hYmllcnRhXSk7CgogICAgICAgIGlmIChkLnByaW9yaWRhZCkgZGF0b3MucHVzaChbJ2x1Y2lkZTpjaXJjbGUtYWxlcnQnLCAnc3B0LXQtYW1iYXInLCAnUHJpb3JpZGFkJywgZC5wcmlvcmlkYWRdKTsKICAgICAgICBpZiAoZC52ZW5kZWRvcikgIGRhdG9zLnB1c2goWydsdWNpZGU6YnVpbGRpbmctMicsICAgJ3NwdC10LWdyaXMnLCAgJ1ZlbmRlZG9yJywgIGQudmVuZGVkb3JdKTsKCiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRvcy5sZW5ndGg7IGkrKykgewoKICAgICAgICAgICAgY29uc3QgJGQgPSB0aGlzLl9wbGFudGlsbGEoJ3NwdC10cGwtZGF0bycpOwoKICAgICAgICAgICAgJGQuZmluZCgnLnNwdC1kYXRvLWljb25vJykuYWRkQ2xhc3MoZGF0b3NbaV1bMV0pLmZpbmQoJ2ljb25pZnktaWNvbicpLmF0dHIoJ2ljb24nLCBkYXRvc1tpXVswXSk7CiAgICAgICAgICAgICRkLmZpbmQoJ3NtYWxsJykudGV4dChkYXRvc1tpXVsyXSk7CiAgICAgICAgICAgICRkLmZpbmQoJ2InKS50ZXh0KGRhdG9zW2ldWzNdKTsKCiAgICAgICAgICAgICRkb25kZS5hcHBlbmQoJGQpOwogICAgICAgIH0KICAgIH0KCiAgICBfcGludGFyUGVkaWRvKHApIHsKCiAgICAgICAgY29uc3QgJGNhcmQgPSB0aGlzLmh0bWwuZmluZCgnLnNwdC1qcy1wZWRpZG8tY2FyZCcpOwoKICAgICAgICBpZiAoIXApIHsgJGNhcmQuZ2V0KDApLmhpZGRlbiA9IHRydWU7IHJldHVybjsgfQoKICAgICAgICAkY2FyZC5nZXQoMCkuaGlkZGVuID0gZmFsc2U7CiAgICAgICAgJGNhcmQuZmluZCgnLnNwdC1qcy1wLXZlcicpLmF0dHIoJ2hyZWYnLCBwLmVubGFjZSk7CiAgICAgICAgJGNhcmQuZmluZCgnLnNwdC1qcy1wLXNlZ3VpbWllbnRvJykuYXR0cignaHJlZicsIHAuc2VndWltaWVudG8gfHwgcC5lbmxhY2UpOwoKICAgICAgICBjb25zdCAkYXJ0cyA9ICRjYXJkLmZpbmQoJy5zcHQtanMtcC1hcnRpY3Vsb3MnKS5lbXB0eSgpOwoKICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IChwLmFydGljdWxvcyB8fCBbXSkubGVuZ3RoOyBpKyspIHsKCiAgICAgICAgICAgIGNvbnN0ICRhID0gdGhpcy5fcGxhbnRpbGxhKCdzcHQtdHBsLXAtYXJ0aWN1bG8nKTsKCiAgICAgICAgICAgICRhLmZpbmQoJ2InKS50ZXh0KHAuYXJ0aWN1bG9zW2ldLm5vbWJyZSk7CiAgICAgICAgICAgICRhLmZpbmQoJ3NtYWxsJykudGV4dChwLmFydGljdWxvc1tpXS5jYW50aWRhZCArIChwLmFydGljdWxvc1tpXS5jYW50aWRhZCA9PT0gMSA/ICcgdW5pZGFkJyA6ICcgdW5pZGFkZXMnKSk7CgogICAgICAgICAgICAkYXJ0cy5hcHBlbmQoJGEpOwogICAgICAgIH0KCiAgICAgICAgY29uc3QgJGZpbGFzID0gJGNhcmQuZmluZCgnLnNwdC1qcy1wLWZpbGFzJykuZW1wdHkoKTsKICAgICAgICBjb25zdCBmaWxhcyAgPSBbCiAgICAgICAgICAgIFsnUGVkaWRvJywgcC5yZWZdLAogICAgICAgICAgICBbJ0ZlY2hhJywgcC5mZWNoYV0sCiAgICAgICAgICAgIFsnSW1wb3J0ZScsIHAudG90YWxdLAogICAgICAgICAgICBbJ0VzdGFkbycsIHAuZXN0YWRvXQogICAgICAgIF07CgogICAgICAgIGlmIChwLnZlbmRlZG9yKSBmaWxhcy5zcGxpY2UoMSwgMCwgWydWZW5kZWRvcicsIHAudmVuZGVkb3JdKTsKCiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWxhcy5sZW5ndGg7IGkrKykgewoKICAgICAgICAgICAgY29uc3QgJGYgPSB0aGlzLl9wbGFudGlsbGEoJ3NwdC10cGwtcC1maWxhJyk7CgogICAgICAgICAgICAkZi5maW5kKCdzcGFuJykudGV4dChmaWxhc1tpXVswXSk7CiAgICAgICAgICAgICRmLmZpbmQoJ2InKS50ZXh0KGZpbGFzW2ldWzFdKTsKCiAgICAgICAgICAgICRmaWxhcy5hcHBlbmQoJGYpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEVMIEhJTE8uCiAgICAgKgogICAgICogYFRDaGF0YCBjb24gZWwgY2FuYWwgZGVsIGV4cGVkaWVudGUuIGBzaWRlOiAnbWluZSdgIHBvcnF1ZSBlc3RvIGVzIGVsCiAgICAgKiBwYW5lbCBkZWwgQ0xJRU5URSAtLWNvbiBgJ3N0YWZmJ2Agc3VzIHByb3Bpb3MgbWVuc2FqZXMgc2FsZHLDrWFuIGVuIGVsCiAgICAgKiBsYWRvIGRlIHNvcG9ydGUtLSwgeSBgYWxsb3dHcm91cDogZmFsc2VgIHBhcmEgcXVlIHVuIHNlZ3VuZG8gYWdlbnRlIG5vCiAgICAgKiByb21wYSBsb3MgZG9zIGJhbmRvcyBkZSBsYSBjb252ZXJzYWNpw7NuLgogICAgICovCiAgICBfbW9udGFyQ2hhdChjYW5hbCkgewoKICAgICAgICBpZiAodHlwZW9mIFRDaGF0ICE9PSAnZnVuY3Rpb24nIHx8ICFjYW5hbCkgcmV0dXJuOwoKICAgICAgICBjb25zdCAkaHVlY28gPSB0aGlzLmh0bWwuZmluZCgnLnNwdC1qcy1oaWxvJykuZW1wdHkoKTsKCiAgICAgICAgdGhpcy5fY2hhdCA9IFRDaGF0LmNyZWF0ZSh7CiAgICAgICAgICAgIGVuZHBvaW50OiAnL2NoYXQnLAogICAgICAgICAgICBjaGFubmVsOiBjYW5hbCwKICAgICAgICAgICAgc2lkZTogJ21pbmUnLAogICAgICAgICAgICBhbGxvd0dyb3VwOiBmYWxzZSwKICAgICAgICAgICAgcGxhY2Vob2xkZXI6ICdFc2NyaWJlIHR1IG1lbnNhamUgYXF1w63igKYnLAogICAgICAgICAgICBlbXB0eU1lc3NhZ2U6ICdUb2RhdsOtYSBubyBoYXkgbWVuc2FqZXMgZW4gZXN0ZSBleHBlZGllbnRlLicsCiAgICAgICAgICAgIHNlbmRMYWJlbDogJ0VudmlhciBtZW5zYWplJwogICAgICAgIH0pOwoKICAgICAgICAkaHVlY28uYXBwZW5kKHRoaXMuX2NoYXQuaHRtbCk7CiAgICB9CgogICAgLyog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCiAgICAgKiAgTEEgQ0FCRUNFUkEg4oCUIFVOQSBQQVJBIExBUyBET1MgVklTVEFTCiAgICAgKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAgKi8KCiAgICAvKioKICAgICAqIEVMIExJU1RBRE86IMKrTWkgY3VlbnRhIOKAuiBTb3BvcnRlwrsuCiAgICAgKgogICAgICogTGEgcGludGEgYHdpbmRvdy5BY2NvdW50SGVhZGVyYCwgcXVlIGVzIGVsIGZvcm1hdG8gZGUgVE9EQVMgbGFzIGZpY2hhcyBkZQogICAgICogbGEgY3VlbnRhIChob2phIGVuIGBUQWNjb3VudFVJYCwgcXVlIHZpYWphIGNvbiBlbCBwYW5lbCkuIFNlIHJlcGludGEKICAgICAqIGVudGVyYSBhbCBjYW1iaWFyIGRlIHZpc3RhIGVuIHZleiBkZSBlc2NvbmRlcnNlOiBlbCBjYW1pbm8gZXMgZGlzdGludG8gZW4KICAgICAqIGNhZGEgdW5hLCB5IGVzY29uZGVyIGRvcyBjYWJlY2VyYXMgZXMgdGVuZXIgZG9zLgogICAgICoKICAgICAqIEVsIGJvdMOzbiBwcmluY2lwYWwgZXMgZWwgZGUgc2llbXByZSAtLWFicmlyIHVuIGV4cGVkaWVudGUtLSB5IGNvbnNlcnZhIHN1CiAgICAgKiBnYW5jaG8gYHNwdC1qcy1hYnJpcmA6IGVsIGNsaWMgc2UgZXNjdWNoYSBwb3IgZGVsZWdhY2nDs24gc29icmUKICAgICAqIGB0aGlzLmh0bWxgLCBhc8OtIHF1ZSBzaWd1ZSByZXNwb25kaWVuZG8gcmVjacOpbiBwaW50YWRvLgogICAgICovCiAgICBfY2FiZWNlcmFMaXN0YWRvKCkgewoKICAgICAgICBpZiAoIXdpbmRvdy5BY2NvdW50SGVhZGVyKSByZXR1cm47CgogICAgICAgIGNvbnN0IGFjY2lvbmVzID0gJzxidXR0b24gdHlwZT0iYnV0dG9uIiBjbGFzcz0iYWMtYnRuIGFjLWJ0bi0tcHJpbmNpcGFsIHNwdC1qcy1hYnJpciI+JwogICAgICAgICAgICAgICAgICAgICAgICsgJzxpY29uaWZ5LWljb24gaWNvbj0ibHVjaWRlOmNpcmNsZS1wbHVzIj48L2ljb25pZnktaWNvbj4gQWJyaXIgZXhwZWRpZW50ZScKICAgICAgICAgICAgICAgICAgICAgICArICc8L2J1dHRvbj4nOwoKICAgICAgICBBY2NvdW50SGVhZGVyLm1vdW50KHRoaXMuaHRtbC5maW5kKCcuc3B0LWpzLWNhYicpLCB7CiAgICAgICAgICAgIHBhdGg6IFtbJ1NvcG9ydGUnXV0sCiAgICAgICAgICAgIHRpdGxlOiAnU29wb3J0ZScsCiAgICAgICAgICAgIHN1YnRpdGxlOiAnQ29uc3VsdGEgZWwgZXN0YWRvIGRlIHR1cyBpbmNpZGVuY2lhcywgaGFibGEgY29uIG51ZXN0cm8gZXF1aXBvIHkgZW5jdWVudHJhIHJlc3B1ZXN0YXMuJywKICAgICAgICAgICAgYWN0aW9uczogYWNjaW9uZXMsCiAgICAgICAgfSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBMQSBGSUNIQTogwqtNaSBjdWVudGEg4oC6IFNvcG9ydGUg4oC6IFNQLTIwMjYtMDE0wrsuCiAgICAgKgogICAgICogRWwgVMONVFVMTyBFUyBFTCBBU1VOVE8gLS1sbyBxdWUgZWwgY2xpZW50ZSBlc2NyaWJpw7MsIHF1ZSBlcyBjb21vIGxsYW1hIGEKICAgICAqIHN1IHByb2JsZW1hLS0geSBlbCBuw7ptZXJvIHZhIGVuIGVsIGNhbWlubywgcXVlIGVzIGRvbmRlIHNlIGJ1c2NhLiBEZW50cm8KICAgICAqIHZhbiBsb3MgaHVlY29zIGRlIHNpZW1wcmUsIHZhY8Otb3M6IGBzcHQtanMtZi1hc3VudG9gIHBhcmEgZWwgYXN1bnRvIHkKICAgICAqIGBzcHQtanMtZi1lc3RhZG9gIHBhcmEgbGEgcMOtbGRvcmEsIHF1ZSByZWxsZW5hIGBfcGludGFyRmljaGEoKWAganVzdG8KICAgICAqIGRlc3B1w6lzIGNvbiBlbCB0b25vIHF1ZSB0cmFpZ2EgZWwgZXN0YWRvLgogICAgICovCiAgICBfY2FiZWNlcmFGaWNoYShkKSB7CgogICAgICAgIGlmICghd2luZG93LkFjY291bnRIZWFkZXIpIHJldHVybjsKCiAgICAgICAgY29uc3QgYWNjaW9uZXMgPSAnPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJhYy1idG4gc3B0LWpzLXZvbHZlciI+JwogICAgICAgICAgICAgICAgICAgICAgICsgJzxpY29uaWZ5LWljb24gaWNvbj0ibHVjaWRlOmFycm93LWxlZnQiPjwvaWNvbmlmeS1pY29uPiBWb2x2ZXIgYSBzb3BvcnRlJwogICAgICAgICAgICAgICAgICAgICAgICsgJzwvYnV0dG9uPic7CgogICAgICAgIGNvbnN0IHRpcG8gPSBkLnRpcG8gPT09ICdpbmNpZGVuY2lhJyA/ICdJbmNpZGVuY2lhJyA6ICdDb25zdWx0YSc7CgogICAgICAgIEFjY291bnRIZWFkZXIubW91bnQodGhpcy5odG1sLmZpbmQoJy5zcHQtanMtY2FiJyksIHsKICAgICAgICAgICAgcGF0aDogWwogICAgICAgICAgICAgICAgWydTb3BvcnRlJywgJ3N1cHBvcnQnXSwKICAgICAgICAgICAgICAgIFtkLmNvZGUgfHwgdGlwb10sCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgIHRpdGxlSHRtbDogJzxzcGFuIGNsYXNzPSJzcHQtanMtZi1hc3VudG8iPjwvc3Bhbj4nLAogICAgICAgICAgICBzdWJ0aXRsZTogZC5hYmllcnRhID8gKHRpcG8gKyAnIGFiaWVydGEgZWwgJyArIGQuYWJpZXJ0YSkgOiB0aXBvLAogICAgICAgICAgICBiYWRnZTogJzxzcGFuIGNsYXNzPSJzcHQtcGlsZG9yYSBzcHQtanMtZi1lc3RhZG8iPjwvc3Bhbj4nLAogICAgICAgICAgICBhY3Rpb25zOiBhY2Npb25lcywKICAgICAgICB9KTsKICAgIH0KCiAgICAvKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAKICAgICAqICBMQVMgRE9TIFZJU1RBUwogICAgICog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQICovCgogICAgLyoqCiAgICAgKiBMQSBGSUNIQSBTRSBRVUVEQSBTT0xBLgogICAgICoKICAgICAqIERlbnRybyBkZSB1biBleHBlZGllbnRlIHNvYnJhIGxhIHRhcmpldGEgwqvCv05lY2VzaXRhcyBheXVkYT/CuzogeWEgc2UgZXN0w6EKICAgICAqIEVOIGVsIHNvcG9ydGUsIGhhYmxhbmRvIGNvbiBlbCBlcXVpcG8uIExvIHF1ZSBoYWNlIGZhbHRhIGVzIGVsIGFzdW50byBkZWwKICAgICAqIGV4cGVkaWVudGUgeSBsYSBzYWxpZGEgaGFjaWEgYXRyw6FzOyBsbyBkZW3DoXMgZXMgcnVpZG8gcXVlIGVtcHVqYSBsYQogICAgICogY29udmVyc2FjacOzbiBoYWNpYSBhYmFqby4KICAgICAqCiAgICAgKiBMQSBDQUJFQ0VSQSBOTyBTRSBPQ1VMVEEsIFNFIFJFUElOVEE6IGVzIGxhIG1pc21hIGRlIGxhcyBkb3MgdmlzdGFzLCB5IGVuCiAgICAgKiBsYSBmaWNoYSBkaWNlIGVsIGFzdW50byB5IGVsIGNhbWlubyBkZSB2dWVsdGEuIExvIGhhY2UgYF9waW50YXJGaWNoYSgpYCwKICAgICAqIHF1ZSBlcyBxdWllbiB0aWVuZSBsb3MgZGF0b3MuCiAgICAgKi8KICAgIF92ZXJGaWNoYSgpIHsKICAgICAgICB0aGlzLmh0bWwuZmluZCgnLnNwdC1qcy1saXN0YWRvJykuZ2V0KDApLmhpZGRlbiA9IHRydWU7CiAgICAgICAgdGhpcy5odG1sLmZpbmQoJy5zcHQtanMtZmljaGEnKS5nZXQoMCkuaGlkZGVuICAgPSBmYWxzZTsKICAgICAgICB0aGlzLmh0bWwuZmluZCgnLnNwdC1heXVkYScpLmdldCgwKS5oaWRkZW4gICAgICA9IHRydWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBFbCBjb250cmF0byBkZSBgVE1lbnVgOiBwZWRpciBgL2FjY291bnQvc3VwcG9ydGAgY29uIGxhIHBhbnRhbGxhIHlhCiAgICAgKiBtb250YWRhIC0tZWwgY2FtaW5vIGRlIG1pZ2FzIGRlc2RlIHVuIGV4cGVkaWVudGUsIG8gwqthdHLDoXPCuy0tIGVzIHBlZGlyIGVsCiAgICAgKiBsaXN0YWRvLiBTaSB5YSBzZSBlc3TDoSBlbiDDqWwsIG5vIHNlIHJlY2FyZ2EgbmFkYS4KICAgICAqLwogICAgc2hvd1Jvb3QoKSB7CgogICAgICAgIGlmICh0aGlzLmh0bWwuZmluZCgnLnNwdC1qcy1maWNoYScpLmdldCgwKS5oaWRkZW4pIHJldHVybjsKCiAgICAgICAgdGhpcy52ZXJMaXN0YWRvKCk7CiAgICB9CgogICAgdmVyTGlzdGFkbygpIHsKCiAgICAgICAgdGhpcy5odG1sLmZpbmQoJy5zcHQtanMtZmljaGEnKS5nZXQoMCkuaGlkZGVuICAgPSB0cnVlOwogICAgICAgIHRoaXMuaHRtbC5maW5kKCcuc3B0LWpzLWxpc3RhZG8nKS5nZXQoMCkuaGlkZGVuID0gZmFsc2U7CiAgICAgICAgdGhpcy5odG1sLmZpbmQoJy5zcHQtYXl1ZGEnKS5nZXQoMCkuaGlkZGVuICAgICAgPSBmYWxzZTsKCiAgICAgICAgLyogWSBsYSBjYWJlY2VyYSB2dWVsdmUgYSBzZXIgbGEgZGVsIGxpc3RhZG86IGNhbWlubyBzaW4gZWwgZXhwZWRpZW50ZSwKICAgICAgICAgICB0w610dWxvIMKrU29wb3J0ZcK7IHkgZWwgYm90w7NuIGRlIGFicmlyIHVubyBudWV2by4gKi8KICAgICAgICB0aGlzLl9jYWJlY2VyYUxpc3RhZG8oKTsKCiAgICAgICAgLyogTGEgdGFyamV0YSBkZWwgcGVkaWRvIGVzIGRlIGxhIGZpY2hhOiBkZWphcmxhIHB1ZXN0YSBlbiBlbCBsaXN0YWRvCiAgICAgICAgICAgZW5zZcOxYXLDrWEgZWwgcGVkaWRvIGRlIGxhIMO6bHRpbWEgaW5jaWRlbmNpYSBtaXJhZGEgYWwgbGFkbyBkZSB1bmEKICAgICAgICAgICBsaXN0YSBxdWUgaGFibGEgZGUgdG9kYXMuICovCiAgICAgICAgdGhpcy5odG1sLmZpbmQoJy5zcHQtanMtcGVkaWRvLWNhcmQnKS5nZXQoMCkuaGlkZGVuID0gdHJ1ZTsKCiAgICAgICAgaWYgKHdpbmRvdy5oaXN0b3J5ICYmIGhpc3RvcnkucHVzaFN0YXRlICYmIGxvY2F0aW9uLnBhdGhuYW1lICE9PSAnL2FjY291bnQvc3VwcG9ydCcpIHsKICAgICAgICAgICAgaGlzdG9yeS5wdXNoU3RhdGUoeyBpc01lbnU6IHRydWUgfSwgJycsICcvYWNjb3VudC9zdXBwb3J0Jyk7CiAgICAgICAgfQoKICAgICAgICAvKiBMbyBsZcOtZG8gY2FtYmlhIGFsIGFicmlyIHVuIGV4cGVkaWVudGUsIGFzw60gcXVlIGxhIGxpc3RhIHZ1ZWx2ZQogICAgICAgICAgIGZyZXNjYTogc2kgbm8sIGVsIGRpc3RpbnRpdm8gZGUgwqtudWV2b8K7IHNlZ3VpcsOtYSBwdWVzdG8uICovCiAgICAgICAgdGhpcy5jYXJnYXIoKTsKICAgIH0KCiAgICAvKiDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZDilZAKICAgICAqICBQSUVaQVMKICAgICAqIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkCAqLwoKICAgIC8qKgogICAgICogTE8gUVVFIFZFTkdBIEVOIExBIFVSTC4KICAgICAqCiAgICAgKiBEb3MgY2Fzb3MsIHkgbG9zIGRvcyBsbGVnYW4gZGUgZnVlcmEgZGUgZXN0YSBwYW50YWxsYToKICAgICAqCiAgICAgKiAgIMK3IGA/aWQ9aW5jaWRlbmNpYS0xMmAg4oCUIGVsIGVubGFjZSBkZSB1biBjb3JyZW8gbyBkZSB1bmEgbm90aWZpY2FjacOzbiwKICAgICAqICAgICBxdWUgZWwgY29udHJvbGFkb3IgY29udmllcnRlIGRlc2RlIGAvYWNjb3VudC9zdXBwb3J0L2luY2lkZW5jaWEvMTJgLgogICAgICogICDCtyBgP29yZGVyPTEwOTc0N2Ag4oCUIMKrQ29udGFjdGFyIHNvcG9ydGXCuyBkZXNkZSB1biBwZWRpZG8uIEFicmUgZWwKICAgICAqICAgICBmb3JtdWxhcmlvIENPTiBlc2UgcGVkaWRvIHB1ZXN0bywgcXVlIGVzIGxvIHF1ZSBsbyBjb252aWVydGUgZW4gdW5hCiAgICAgKiAgICAgaW5jaWRlbmNpYSB5IG5vIGVuIHVuYSBjb25zdWx0YSBzdWVsdGEuIFNpbiBlc3RvLCBlbCBjbGllbnRlIHRlbmRyw61hCiAgICAgKiAgICAgcXVlIGJ1c2NhciBlbnRyZSBsb3Mgc3V5b3MgZWwgcGVkaWRvIGRlbCBxdWUgdmllbmUgZGUgaGFibGFyLgogICAgICovCiAgICBfZGVMYVVybCgpIHsKCiAgICAgICAgY29uc3QgYnVzY2EgPSBsb2NhdGlvbi5zZWFyY2ggfHwgJyc7CgogICAgICAgIC8qIExBIERJUkVDQ0nDk04gQ09NUExFVEE6IGAvYWNjb3VudC9zdXBwb3J0L2luY2lkZW5jaWEvMTJgLiBFbCBwYW5lbCB5YQogICAgICAgICAgIG5hdmVnYSBhc8OtIChgVE1lbnVgIGNvbiBgYmFzZVBhdGhgKTsgZWwgYD9pZD1pbmNpZGVuY2lhLTEyYCBkZSBhbnRlcwogICAgICAgICAgIHNlIHNpZ3VlIGVudGVuZGllbmRvIHBvciBsb3MgZW5sYWNlcyBxdWUgeWEgZXN0w6luIGVudmlhZG9zLiAqLwogICAgICAgIGNvbnN0IG0gPSBsb2NhdGlvbi5wYXRobmFtZS5tYXRjaCgvXC9hY2NvdW50XC9zdXBwb3J0XC8oaW5jaWRlbmNpYXxjb25zdWx0YSlcLyhcZCspLykKICAgICAgICAgICAgICAgfHwgYnVzY2EubWF0Y2goL1s/Jl1pZD0oaW5jaWRlbmNpYXxjb25zdWx0YSktKFxkKykvKTsKCiAgICAgICAgaWYgKG0pIHsKCiAgICAgICAgICAgIC8qIFNFIEFSUkFOQ0EgRU4gTEEgRklDSEEsIHNpbiBlbnNlw7FhciBlbCBsaXN0YWRvIG1pZW50cmFzIGxsZWdhbiBzdXMKICAgICAgICAgICAgICAgZGF0b3M6IHNlIHZlw61hIGxhIGxpc3RhIHVuIGluc3RhbnRlIHkgbHVlZ28gZWwgZXhwZWRpZW50ZSBlbmNpbWEsCiAgICAgICAgICAgICAgIGVsIG1pc21vIHBlc3Rhw7FlbyBxdWUgdGVuw61hbiBsYXMgZGVtw6FzIGZpY2hhcyBkZWwgcGFuZWwuICovCiAgICAgICAgICAgIHRoaXMuaHRtbC5maW5kKCcuc3B0LWpzLWxpc3RhZG8nKS5nZXQoMCkuaGlkZGVuID0gdHJ1ZTsKICAgICAgICAgICAgdGhpcy5odG1sLmZpbmQoJy5zcHQtYXl1ZGEnKS5nZXQoMCkuaGlkZGVuID0gdHJ1ZTsKCiAgICAgICAgICAgIHRoaXMuYWJyaXJGaWNoYShtWzFdLCBwYXJzZUludChtWzJdLCAxMCkpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQoKICAgICAgICBjb25zdCBwID0gYnVzY2EubWF0Y2goL1s/Jl1vcmRlcj0oXGQrKS8pOwoKICAgICAgICBpZiAocCkgeyB0aGlzLmFicmlyTnVldmEocGFyc2VJbnQocFsxXSwgMTApKTsgcmV0dXJuOyB9CgogICAgICAgIC8qIGA/YXN1bnRvPeKApmA6IMKrUmVjbGFtYXLCuyB1biByZWNoYXpvIGRlbCBjYXTDoWxvZ28gZGVzZGUgZWwgcG9ydGFsIGRlbAogICAgICAgICAgIHZlbmRlZG9yICgxMy8xMC8yMDI2KS4gU2UgYWJyZSBsYSBjb25zdWx0YSBjb24gZWwgYXN1bnRvIGVzY3JpdG8uICovCiAgICAgICAgY29uc3QgYSA9IGJ1c2NhLm1hdGNoKC9bPyZdYXN1bnRvPShbXiZdKikvKTsKCiAgICAgICAgaWYgKGEpIHsKICAgICAgICAgICAgbGV0IGFzdW50byA9ICcnOwogICAgICAgICAgICB0cnkgeyBhc3VudG8gPSBkZWNvZGVVUklDb21wb25lbnQoYVsxXS5yZXBsYWNlKC9cKy9nLCAnICcpKTsgfSBjYXRjaCAoZSkgeyBhc3VudG8gPSAnJzsgfQogICAgICAgICAgICBpZiAoYXN1bnRvKSB0aGlzLmFicmlyTnVldmEoMCwgYXN1bnRvKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBBQlJJUiBVTiBFWFBFRElFTlRFLgogICAgICoKICAgICAqIEVMIE9WRVJMQVkgTk8gU0UgTU9OVEEgQVFVw406IGxvIG1vbnRhIGBTdXBwb3J0VGlja2V0Rm9ybWAsIGVsIGFicmlkb3IKICAgICAqIGNvbcO6biBxdWUgdHJhZSBgVFN1cHBvcnRUaWNrZXRGb3JtYC4gRWwgbWlzbW8gZm9ybXVsYXJpbyBzYWxlIGRlc2RlIGxhCiAgICAgKiBmaWNoYSBkZSB1biBwZWRpZG8geSBkZXNkZSDCq01pcyBwZWRpZG9zwrssIHkgY29uIHRyZXMgY29waWFzIGRlbCBtb250YWplCiAgICAgKiBoYWJyw61hIHRyZXMgaWRlYXMgZGUgcXXDqSBwYXNhIGFsIGNyZWFyIHVuYSBpbmNpZGVuY2lhLgogICAgICoKICAgICAqIExvIMO6bmljbyBwcm9waW8gZGUgZXN0YSBwYW50YWxsYSBlcyBlbCBERVNQVcOJUzogYXF1w60geWEgZXN0YW1vcyBlbgogICAgICogU29wb3J0ZSwgYXPDrSBxdWUgc2UgcmVmcmVzY2EgZWwgbGlzdGFkbyB5IHNlIGVudHJhIGVuIGxvIHJlY2nDqW4gYWJpZXJ0bwogICAgICogc2luIHJlY2FyZ2FyIGxhIHDDoWdpbmEgLS1kZWphcmxlIGVuIGVsIGxpc3RhZG8gbGUgb2JsaWdhcsOtYSBhIGJ1c2NhciBzdQogICAgICogcHJvcGlvIGV4cGVkaWVudGUgZW50cmUgbG9zIGRlbcOhcyBqdXN0byBkZXNwdcOpcyBkZSBjcmVhcmxvLS0uCiAgICAgKi8KICAgIGFicmlyTnVldmEoaWRQZWRpZG8sIGFzdW50byA9ICcnKSB7CgogICAgICAgIGNvbnN0IHlvID0gdGhpczsKCiAgICAgICAgaWYgKCF3aW5kb3cuU3VwcG9ydFRpY2tldEZvcm0pIHsKICAgICAgICAgICAgaWYgKHR5cGVvZiBUTm90aWZ5ID09PSAnZnVuY3Rpb24nICYmIFROb3RpZnkudG9hc3QpIFROb3RpZnkudG9hc3QoJ05vIGhlbW9zIHBvZGlkbyBhYnJpciBlbCBmb3JtdWxhcmlvJyk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIHdpbmRvdy5TdXBwb3J0VGlja2V0Rm9ybS5vcGVuKHsKICAgICAgICAgICAgb3JkZXJJZDogaWRQZWRpZG8gfHwgMCwKICAgICAgICAgICAgc3ViamVjdDogYXN1bnRvIHx8ICcnLAogICAgICAgICAgICBvbkNyZWF0ZWQ6IGZ1bmN0aW9uIChyKSB7CiAgICAgICAgICAgICAgICB5by5jYXJnYXIoKTsKICAgICAgICAgICAgICAgIGlmIChyLnRpcG8pIHlvLmFicmlyRmljaGEoci50aXBvLCByLmlkKTsKICAgICAgICAgICAgfQogICAgICAgIH0pOwogICAgfQoKICAgIC8qKgogICAgICogRUwgQ0hBVCBERSBTSUVNUFJFLCBubyB1bm8gbnVldm8uCiAgICAgKgogICAgICogRWwgYmFkZ2UgZmxvdGFudGUgeWEgZXN0w6EgbW9udGFkbyBlbiB0b2RhIGxhIHRpZW5kYSB5IHNlIGRlamEgYSBtYW5vIGVuCiAgICAgKiBgd2luZG93Ll9fc29wQ2hhdGAuIEFicmlyIGFxdcOtIHVuIHNlZ3VuZG8gY2hhdCBkZWphcsOtYSBhbCBjbGllbnRlIGNvbgogICAgICogZG9zIGNvbnZlcnNhY2lvbmVzIGRpc3RpbnRhcyBjb24gZWwgbWlzbW8gc29wb3J0ZS4KICAgICAqLwogICAgYWJyaXJDaGF0KCkgewoKICAgICAgICBpZiAod2luZG93Ll9fc29wQ2hhdCAmJiB0eXBlb2Ygd2luZG93Ll9fc29wQ2hhdC5hYnJpciA9PT0gJ2Z1bmN0aW9uJykgewogICAgICAgICAgICB3aW5kb3cuX19zb3BDaGF0LmFicmlyKCk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgIGlmICh0eXBlb2YgVE5vdGlmeSA9PT0gJ2Z1bmN0aW9uJykgewogICAgICAgICAgICBUTm90aWZ5LnRvYXN0KCdFbCBjaGF0IG5vIGVzdMOhIGRpc3BvbmlibGUgYWhvcmEgbWlzbW8uIEFicmUgdW5hIGluY2lkZW5jaWEgeSB0ZSBjb250ZXN0YW1vcy4nKTsKICAgICAgICB9CiAgICB9CgogICAgX2NvcGlhcigpIHsKCiAgICAgICAgY29uc3QgdGV4dG8gPSB0aGlzLmh0bWwuZmluZCgnLnNwdC1qcy1mLWNvZGUnKS50ZXh0KCk7CgogICAgICAgIGlmICghdGV4dG8pIHJldHVybjsKCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgaWYgKG5hdmlnYXRvci5jbGlwYm9hcmQpIG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRleHRvKTsKCiAgICAgICAgICAgIGlmICh0eXBlb2YgVE5vdGlmeSA9PT0gJ2Z1bmN0aW9uJykgVE5vdGlmeS50b2FzdCgnTsO6bWVybyBjb3BpYWRvOiAnICsgdGV4dG8pOwoKICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgIC8qIFNpbiBwb3J0YXBhcGVsZXMgbm8gc2UgaGFjZSBuYWRhOiBlbCBuw7ptZXJvIGVzdMOhIGEgbGEgdmlzdGEgeSBzZQogICAgICAgICAgICAgICBwdWVkZSBzZWxlY2Npb25hci4gTG8gcXVlIG5vIHB1ZWRlIGVzIHRpcmFyIGxhIHBhbnRhbGxhLiAqLwogICAgICAgIH0KICAgIH0KfQoKLyogU2luIGVzdG8gbGEgcGFudGFsbGEgc2FsZSBFTiBCTEFOQ08geSBzaW4gZXJyb3IgZGUgc2Vydmlkb3I6IGVsIGNhcmdhZG9yCiAgIGRldGVjdGEgbGFzIGNsYXNlcyBwb3IgbGFzIGNsYXZlcyBudWV2YXMgZGUgYHdpbmRvd2AsIHkgdW5hIGNsYXNlIGRlY2xhcmFkYQogICBkZW50cm8gZGUgdW4gbcOzZHVsbyBubyBjdWVsZ2EgZGUgYHdpbmRvd2Agc29sYS4gKi8Kd2luZG93LlRBY2NvdW50U3VwcG9ydCA9IFRBY2NvdW50U3VwcG9ydDsKDQoNCjwvc2NyaXB0Pg0KDQo8L21vZHVsZT4NCg0K","TSupportTicketForm":"PG1vZHVsZSBuYW1lPSJUU3VwcG9ydFRpY2tldEZvcm0iPg0KDQoNCg0KDQoNCjx0ZW1wbGF0ZSBuYW1lPSJUU3VwcG9ydFRpY2tldEZvcm0iICA+CjxtZXRhIGNoYXJzZXQ9IlVURi04IiAvPgoNCg0KCjwvdGVtcGxhdGU+DQoNCjxzdHlsZSBuYW1lPSJUU3VwcG9ydFRpY2tldEZvcm0iPi8qIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkAogKiAgRUwgT1ZFUkxBWSBERSDCq0FCUklSIEVYUEVESUVOVEXCuywgRU4gVkVSREUKICog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCiAqCiAqIFZpdsOtYSBlbiBgVEFjY291bnRTdXBwb3J0LmNzc2AsIHkgYWjDrSBzb2xvIHNlcnbDrWEgY3VhbmRvIGVsIG92ZXJsYXkgc2UgYWJyw61hCiAqIGRlc2RlIGxhIHNlY2Npw7NuIGRlIFNvcG9ydGU6IGVsIG1pc21vIGZvcm11bGFyaW8gYWJpZXJ0byBkZXNkZSB1biBwZWRpZG8KICogc2Fsw61hIGNvbiBlbCBib3TDs24gbmVncm8gZGVsIHNpdGlvLiBWaWFqYSBjb24gZWwgY29tcG9uZW50ZSBxdWUgbW9udGEgZWwKICogb3ZlcmxheSwgcXVlIGVzIGRvbmRlIHRpZW5lIHF1ZSBlc3Rhci4KICoKICogTGFzIGNsYXNlcyBOTyBzZSBjYW1iaWFuIC0tYGJ0bi1zZWNvbmRhcnlgIGVsIHF1ZSBjaWVycmEgeSBgYnRuLXByaW1hcnlgIGVsCiAqIHF1ZSBlc2NyaWJlLCBxdWUgZXMgbGEgcmVnbGEgZGVsIHByb3llY3RvLS06IGxvIHF1ZSBjYW1iaWEgZXMgY8OzbW8gc2UgcGludGFuCiAqIGFxdcOtLiBZIHNlIGVzY29wYSBiYWpvIGAuc3Atb3ZlcmxheWAsIHF1ZSBlcyBsYSBjbGFzZSBxdWUgbGUgcG9uZSBlbCBhYnJpZG9yOgogKiBlbCBvdmVybGF5IGN1ZWxnYSBkZWwgYm9keSwgYXPDrSBxdWUgc2luIGVsbGEgZXN0byBwaW50YXLDrWEgZGUgdmVyZGUgbG9zCiAqIGJvdG9uZXMgZGUgdG9kYSBsYSBww6FnaW5hLgogKgogKiDilIDilIAgWSBFTCBGT05ETyBWQSBDT04gYCFpbXBvcnRhbnRgLCBRVUUgTk8gRVMgVU4gREVTQ1VJRE8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACiAqCiAqIEVsIGJ1bmRsZSBkZWwgc2l0aW8gKGBib290LSouY3NzYCkgZGVjbGFyYQogKiBgLmJ0bi1wcmltYXJ5e2JhY2tncm91bmQ6IzFlMjkzYiAhaW1wb3J0YW50fWAuIFVuIGAhaW1wb3J0YW50YCBnYW5hIGEKICogY3VhbHF1aWVyIGVzcGVjaWZpY2lkYWQsIGFzw60gcXVlIGVzdGEgcmVnbGEgLS10YWwgY29tbyBlc3RhYmEgZXNjcml0YSBlbgogKiBgVEFjY291bnRTdXBwb3J0LmNzc2AtLSBhcGxpY2FiYSBlbCBCT1JERSB2ZXJkZSB5IG5vIGVsIGZvbmRvOiBlbCBib3TDs24KICogc2Fsw61hIGF6dWwgcGl6YXJyYSBjb24gdW4gZmlsbyB2ZXJkZSwgbWVkaWRvIGNvbiBgZ2V0Q29tcHV0ZWRTdHlsZWAgZWwKICogMTIvMDkvMjAyNiwgeSBlbCBjb21lbnRhcmlvIGRlIGFxdWVsbGEgaG9qYSBkZWPDrWEgcXVlIGVyYSB2ZXJkZSBkZXNkZSBlbAogKiBkw61hIHF1ZSBzZSBlc2NyaWJpw7MuIFNlIGNvbXBlbnNhIGFxdcOtLCBhY290YWRvIGFsIG92ZXJsYXk7IGxvIHF1ZSBoYXkgcXVlCiAqIHF1aXRhciBhbGfDum4gZMOtYSBlcyBlbCBgIWltcG9ydGFudGAgZGVsIGJ1bmRsZSwgbm8gZXN0YSBsw61uZWEuICovCi5zcC1vdmVybGF5IC5idG4tcHJpbWFyeXsKICAgIGJhY2tncm91bmQ6dmFyKC0tc2QtdmVyZGUsIzA0NzEzYSkgIWltcG9ydGFudDsKICAgIGJvcmRlci1jb2xvcjp2YXIoLS1zZC12ZXJkZSwjMDQ3MTNhKTsKICAgIGNvbG9yOiNmZmY7Cn0KLnNwLW92ZXJsYXkgLmJ0bi1wcmltYXJ5OmhvdmVyewogICAgYmFja2dyb3VuZDp2YXIoLS1zZC12ZXJkZS1vc2N1cm8sIzAwNWMyZCkgIWltcG9ydGFudDsKICAgIGJvcmRlci1jb2xvcjp2YXIoLS1zZC12ZXJkZS1vc2N1cm8sIzAwNWMyZCk7Cn0KLnNwLW92ZXJsYXkgLlRGb3JtIGlucHV0OmZvY3VzLAouc3Atb3ZlcmxheSAuVEZvcm0gdGV4dGFyZWE6Zm9jdXN7CiAgICBib3JkZXItY29sb3I6dmFyKC0tc2QtdmVyZGUsIzA0NzEzYSk7CiAgICBib3gtc2hhZG93OjAgMCAwIDNweCByZ2JhKDQsMTEzLDU4LC4xMCk7Cn0KDQoNCjwvc3R5bGU+DQoNCjxzY3JpcHQgbmFtZT0iVFN1cHBvcnRUaWNrZXRGb3JtIiA+LyoqCiAqIOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkOKVkAogKiAgQUJSSVIgVU4gRVhQRURJRU5URSBERSBTT1BPUlRFIOKAlCB1biBzb2xvIGFicmlkb3IgcGFyYSBsb3MgdHJlcyBzaXRpb3MKICog4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQ4pWQCiAqCiAqIMKrU29saWNpdGFyIGF5dWRhwrsgZXN0w6EgZW4gbGEgZmljaGEgZGUgdW4gcGVkaWRvLCBlbiBlbCBsaXN0YWRvIGRlIMKrTWlzCiAqIHBlZGlkb3PCuyB5IGVuIGxhIHNlY2Npw7NuIGRlIFNvcG9ydGUuIEVuIGxvcyB0cmVzIGhhY2UgbG8gbWlzbW8sIHkgbG8gaGFjZQogKiBBUVXDjS4KICoKICog4pSA4pSAIEVMIE9WRVJMQVkgU0UgQUJSRSBET05ERSBFU1TDgSBFTCBVU1VBUklPIOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgAogKgogKiBBbnRlcyBsYSBmaWNoYSB5IGVsIGxpc3RhZG8gbmF2ZWdhYmFuIGEgYD9yb3V0ZT1zdXBwb3J0Jm9yZGVyPXtpZH1gIHkgZXJhIGxhCiAqIHNlY2Npw7NuIGRlIFNvcG9ydGUgbGEgcXVlIGFicsOtYSBlbCBmb3JtdWxhcmlvIGFsIG1vbnRhcnNlLiBFbCBjbGllbnRlIHB1bHNhYmEKICogwqtTb2xpY2l0YXIgYXl1ZGHCuyB5IGxhIHBhbnRhbGxhIHNlIGxlIGliYTogcGVyZMOtYSBkZSB2aXN0YSBlbCBwZWRpZG8gLS1sYXMKICogbMOtbmVhcywgZWwgZW52w61vLCBlbCBuw7ptZXJvLS0ganVzdG8gY3VhbmRvIHRlbsOtYSBxdWUgY29udGFyIHF1w6kgaGFiw61hIHBhc2FkbwogKiBjb24gw6lsLiBBaG9yYSBlbCBmb3JtdWxhcmlvIHNhbGUgZW5jaW1hIGRlbCBwZWRpZG8sIHkgYSBsYSBzZWNjacOzbiBkZSBTb3BvcnRlCiAqIHNlIHZhIERFU1BVw4lTLCBjb24gZWwgZXhwZWRpZW50ZSB5YSBhYmllcnRvIHkgc3UgaGlsbyBkZWxhbnRlLgogKgogKiDilIDilIAgTk8gSEFZIE1BUkNBRE8sIFkgTk8gRVMgVU4gREVTQ1VJRE8g4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACiAqCiAqIEVsIGZvcm11bGFyaW8gbG8gZGVjbGFyYSBlbCBzZXJ2aWRvciBjb24gZWwgRFNMIChgL2FjY291bnQvc3VwcG9ydC9mb3JtYCk6CiAqIGFzdW50bywgZWwgcGVkaWRvIC0tcXVlIGRlY2lkZSBlbCB0aXBvOiBjb24gcGVkaWRvIGVzIHVuYSBJTkNJREVOQ0lBLCBzaW4gw6lsCiAqIHVuYSBDT05TVUxUQS0tIHkgZWwgbWVuc2FqZS4gQXPDrSBoZXJlZGEgdmFsaWRhY2nDs24sIGVycm9yZXMgcG9yIGNhbXBvIHkgZWwKICogZ3VhcmRhZG8gZGUgYFRGb3JtYCBzaW4gZXNjcmliaXIgbmkgdW4gYDxpbnB1dD5gLiBMbyDDum5pY28gcXVlIHZpdmUgYXF1w60gZXMKICogZWwgY29tcG9ydGFtaWVudG8uCiAqLwp3aW5kb3cuU3VwcG9ydFRpY2tldEZvcm0gPSB7CgogICAgLyoqCiAgICAgKiBFTlNFw5FBIEVMIEZPUk1VTEFSSU8gRU4gVU4gT1ZFUkxBWS4KICAgICAqCiAgICAgKiAgIG9yZGVySWQgICAgZWwgcGVkaWRvIGRlbCBxdWUgc2UgaGFibGE7IHNpbiDDqWwgc2FsZSB1bmEgY29uc3VsdGEgZ2VuZXJhbAogICAgICogICBzdWJqZWN0ICAgIGVsIGFzdW50byB5YSBlc2NyaXRvICh1bmEgcmVjbGFtYWNpw7NuLCBjb24gc3UgcmVmZXJlbmNpYSkKICAgICAqICAgc3VidGl0bGUgICBlbCBzdWJ0w610dWxvIGRlIGxhIGNhYmVjZXJhOyBoYXkgdW4gZGVmZWN0byByYXpvbmFibGUKICAgICAqICAgb25DcmVhdGVkICBxdcOpIGhhY2VyIGNvbiBlbCBleHBlZGllbnRlIHJlY2nDqW4gYWJpZXJ0by4gU2luIGVzdG8gc2UgdmEgYQogICAgICogICAgICAgICAgICAgIGxhIHNlY2Npw7NuIGRlIFNvcG9ydGUsIHF1ZSBlcyBsbyBxdWUgZXNwZXJhIHF1aWVuIGxvIGFicmnDswogICAgICogICAgICAgICAgICAgIGRlc2RlIHVuIHBlZGlkbwogICAgICovCiAgICBvcGVuOiBmdW5jdGlvbiAob3BjaW9uZXMpIHsKCiAgICAgICAgY29uc3QgbyAgID0gb3BjaW9uZXMgfHwge307CiAgICAgICAgY29uc3QgeW8gID0gdGhpczsKICAgICAgICAvKiBgc3ViamVjdGA6IGVsIGFzdW50byB5YSBlc2NyaXRvICh1bmEgcmVjbGFtYWNpw7NuIGRlbCBjYXTDoWxvZ28gbGxlZ2EKICAgICAgICAgICBjb24gc3UgcmVmZXJlbmNpYSwgMTMvMTAvMjAyNikuICovCiAgICAgICAgY29uc3QgcXMgID0gW107CiAgICAgICAgaWYgKG8ub3JkZXJJZCkgcXMucHVzaCgnb3JkZXI9JyArIGVuY29kZVVSSUNvbXBvbmVudChvLm9yZGVySWQpKTsKICAgICAgICBpZiAoby5zdWJqZWN0KSBxcy5wdXNoKCdzdWJqZWN0PScgKyBlbmNvZGVVUklDb21wb25lbnQoby5zdWJqZWN0KSk7CiAgICAgICAgY29uc3QgdXJsID0gJy9hY2NvdW50L3N1cHBvcnQvZm9ybScgKyAocXMubGVuZ3RoID8gJz8nICsgcXMuam9pbignJicpIDogJycpOwoKICAgICAgICBUTmV0Q29tLkdFVCh1cmwsIHt9LCBmdW5jdGlvbiAocmVzcCkgewoKICAgICAgICAgICAgY29uc3QgZCA9IChyZXNwICYmIHJlc3AuZGF0YSkgPyByZXNwLmRhdGEgOiByZXNwOwoKICAgICAgICAgICAgaWYgKCFkIHx8ICFkLnR5cGUpIHsKICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgVE5vdGlmeSA9PT0gJ2Z1bmN0aW9uJyAmJiBUTm90aWZ5LnRvYXN0KSBUTm90aWZ5LnRvYXN0KCdObyBoZW1vcyBwb2RpZG8gYWJyaXIgZWwgZm9ybXVsYXJpbycpOwogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CgogICAgICAgICAgICBjb25zdCBmb3JtID0gVEZvcm0uY3JlYXRlKGQpOwoKICAgICAgICAgICAgLyogTGEgY2FiZWNlcmEgdmEgY29uIGVsIGhlbHBlciBkZWwgcHJveWVjdG8gLS1pY29ubywgdMOtdHVsbyB5CiAgICAgICAgICAgICAgIHN1YnTDrXR1bG8sIFRPRE8gYSBsYSBpenF1aWVyZGEtLSwgeSBlbCBzdWJ0w610dWxvIGRpY2UgZGUgcXXDqSB2YQogICAgICAgICAgICAgICBsYSB2ZW50YW5hIGNvbiBkYXRvcyByZWFsZXMgZW4gdmV6IGRlIHJlcGV0aXIgZWwgdMOtdHVsby4gKi8KICAgICAgICAgICAgY29uc3Qgb3ZlcmxheSA9IFRPdmVybGF5V2luLmNyZWF0ZSh7CiAgICAgICAgICAgICAgICB0aXRsZTogVE92ZXJsYXlXaW4uY2FiZWNlcmEoewogICAgICAgICAgICAgICAgICAgIGljb246ICdsdWNpZGU6aGVhZHBob25lcycsCiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICdBYnJpciBleHBlZGllbnRlIGRlIHNvcG9ydGUnLAogICAgICAgICAgICAgICAgICAgIHN1YnRpdGxlOiBvLnN1YnRpdGxlIHx8ICdDb24gdW4gcGVkaWRvIGVzIHVuYSBpbmNpZGVuY2lhOyBzaW4gw6lsLCB1bmEgY29uc3VsdGEgZ2VuZXJhbC4nCiAgICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICAgIGNvbnRlbnQ6IGZvcm0sCiAgICAgICAgICAgICAgICBjbG9zZUljb246IHRydWUKICAgICAgICAgICAgfSk7CgogICAgICAgICAgICAvKiBFbCBvdmVybGF5IHNlIG1vbnRhIEZVRVJBIGRlIGxhIHBhbnRhbGxhIHF1ZSBsbyBhYnJlIC0tY3VlbGdhIGRlbAogICAgICAgICAgICAgICBib2R5LS0sIGFzw60gcXVlIGVsIENTUyBkZSBlc2EgcGFudGFsbGEgbm8gbGUgYWxjYW56YS4gQ29uIHN1CiAgICAgICAgICAgICAgIHByb3BpYSBjbGFzZSBzw606IGVzIGxvIHF1ZSBkZWphIHBvbmVyIGVsIGJvdMOzbiBwcmluY2lwYWwgZW4KICAgICAgICAgICAgICAgdmVyZGUsIHBvcnF1ZSBlbCBgYnRuLXByaW1hcnlgIGRlbCBzaXRpbyBlcyBuZWdybyB5IGFxdcOtCiAgICAgICAgICAgICAgIGRlc2VudG9uYS4gTGEgaG9qYSB2aWFqYSBjb24gRVNURSBjb21wb25lbnRlLCBubyBjb24gbGEgc2VjY2nDs24KICAgICAgICAgICAgICAgZGUgU29wb3J0ZTogc2kgbm8sIGVsIG92ZXJsYXkgYWJpZXJ0byBkZXNkZSB1biBwZWRpZG8gc2FsZHLDrWEgY29uCiAgICAgICAgICAgICAgIG90cm8gY29sb3IgcXVlIGVsIG1pc21vIG92ZXJsYXkgYWJpZXJ0byBkZXNkZSBTb3BvcnRlLiAqLwogICAgICAgICAgICBvdmVybGF5Lmh0bWwuYWRkQ2xhc3MoJ3NwLW92ZXJsYXknKTsKCiAgICAgICAgICAgIC8qIOKUgOKUgCBFTCBFVkVOVE8gRVMgYG9uU3VibWl0YCwgTk8gYHN1Ym1pdHRlZGAg4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSACiAgICAgICAgICAgICAgIENvbXByb2JhZG8gZW4gYFRGb3JtLmpzYDogYWwgZ3VhcmRhciBlbWl0ZSBgb25TYXZlYCAoY29uIGVsCiAgICAgICAgICAgICAgIHBheWxvYWQgcXVlIHNlIG1hbmTDsykgeSBkZXNwdcOpcyBgb25TdWJtaXRgIChjb24gbGEgUkVTUFVFU1RBIGRlbAogICAgICAgICAgICAgICBzZXJ2aWRvcikuIE5vIGV4aXN0ZSBuaW5nw7puIGBzdWJtaXR0ZWRgIC0tIGVuZ2FuY2hhZG8gYWjDrSwgZWwKICAgICAgICAgICAgICAgZm9ybXVsYXJpbyBndWFyZGFiYSwgZGVjw61hIMKrRGF0b3MgZW52aWFkb3MgY29ycmVjdGFtZW50ZcK7IHkgbGEKICAgICAgICAgICAgICAgdmVudGFuYSBzZSBxdWVkYWJhIGFiaWVydGEgY29tbyBzaSBubyBodWJpZXJhIHBhc2FkbyBuYWRhLgoKICAgICAgICAgICAgICAgYG9uU3VibWl0YCBzZSBkaXNwYXJhIFRBTUJJw4lOIGN1YW5kbyBlbCBndWFyZGFkbyBmYWxsYSwgYXPDrSBxdWUKICAgICAgICAgICAgICAgaGF5IHF1ZSBtaXJhciBsYSByZXNwdWVzdGEgYW50ZXMgZGUgY2VycmFyOiBjZXJyYW5kbyBhIGNpZWdhcyBzZQogICAgICAgICAgICAgICB0aXJhIGVsIGZvcm11bGFyaW8gLS15IGxvIGVzY3JpdG8tLSBqdXN0byBjdWFuZG8gZWwgY2xpZW50ZQogICAgICAgICAgICAgICBuZWNlc2l0YSBjb3JyZWdpciB1biBjYW1wby4gKi8KICAgICAgICAgICAgZm9ybS5vbignb25TdWJtaXQnLCBmdW5jdGlvbiAoZXYsIHJlc3B1ZXN0YSkgewoKICAgICAgICAgICAgICAgIGNvbnN0IHIgPSAocmVzcHVlc3RhICYmIHJlc3B1ZXN0YS5kYXRhKSA/IHJlc3B1ZXN0YS5kYXRhIDogcmVzcHVlc3RhOwoKICAgICAgICAgICAgICAgIGlmICghcmVzcHVlc3RhIHx8IHJlc3B1ZXN0YS5vayA9PT0gZmFsc2UgfHwgIXIgfHwgIXIuaWQpIHJldHVybjsKCiAgICAgICAgICAgICAgICBvdmVybGF5LmNsb3NlKCk7CgogICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBUTm90aWZ5ID09PSAnZnVuY3Rpb24nICYmIFROb3RpZnkudG9hc3QpIHsKICAgICAgICAgICAgICAgICAgICBUTm90aWZ5LnRvYXN0KCdFeHBlZGllbnRlIGFiaWVydG86ICcgKyAoci5jb2RlIHx8ICcnKSk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvLm9uQ3JlYXRlZCA9PT0gJ2Z1bmN0aW9uJykgeyBvLm9uQ3JlYXRlZChyKTsgcmV0dXJuOyB9CgogICAgICAgICAgICAgICAgeW8udG9TZWN0aW9uKHIpOwogICAgICAgICAgICB9KTsKCiAgICAgICAgICAgIG92ZXJsYXkuc2hvdygpOwogICAgICAgIH0pOwogICAgfSwKCiAgICAvKioKICAgICAqIEEgTEEgU0VDQ0nDk04gREUgU09QT1JURSwgQ09OIEVMIEVYUEVESUVOVEUgQUJJRVJUTy4KICAgICAqCiAgICAgKiBMYSBVUkwgbGEgY29tcG9uZSBlbCBTRVJWSURPUiAoYGVubGFjZWAsIHF1ZSBlcwogICAgICogYC9hY2NvdW50L3N1cHBvcnQve3RpcG99L3tpZH1gKSB5IGVzYSBydXRhIHJlZGlyaWdlIGFsIHBhbmVsIGNvbgogICAgICogYD9yb3V0ZT1zdXBwb3J0JmlkPXt0aXBvfS17aWR9YDogdW4gc29sbyBzaXRpbyBkZWNpZGUgY8OzbW8gc2UgZW5sYXphIHVuCiAgICAgKiBleHBlZGllbnRlLCB5IGVzIGVsIG1pc21vIHF1ZSB1c2FuIGxvcyBjb3JyZW9zIHkgbGFzIG5vdGlmaWNhY2lvbmVzLgogICAgICovCiAgICB0b1NlY3Rpb246IGZ1bmN0aW9uIChyKSB7CiAgICAgICAgLyogUG9yIGVsIG1lbsO6LCBzaW4gcmVjYXJnYXIgZWwgcGFuZWwgKHZlciBgQWNjb3VudE5hdmApLiAqLwogICAgICAgIEFjY291bnROYXYuZ28oKHIgJiYgci5lbmxhY2UpID8gci5lbmxhY2UgOiAnL2FjY291bnQvc3VwcG9ydCcpOwogICAgfQp9OwoNCg0KPC9zY3JpcHQ+DQoNCjwvbW9kdWxlPg0KDQo="},"moduleProps":{"TAccountSupport":[],"TSupportTicketForm":[]},"meta":{"component":"TAccountSupport","execution_time_ms":0,"performance":[],"timestamp":1792427305,"is_initial_load":true}}                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                