diff --git a/FLD-Schichtplanung/sync-bundle-04.txt b/FLD-Schichtplanung/sync-bundle-04.txt index 2f0f87c..93d3cc9 100644 --- a/FLD-Schichtplanung/sync-bundle-04.txt +++ b/FLD-Schichtplanung/sync-bundle-04.txt @@ -13583,7 +13583,7 @@ MTJhNSA1IDAgMCAxIDUtNWg2bDMgMy0zIDNoLTUiLz48Y2lyY2xlIGN4PSI4IiBjeT0iMTIiIHI9 IjMiLz48cGF0aCBkPSJNMTYgN2wzLTMiLz48cGF0aCBkPSJNNiAxN2wtMiAzIi8+Cjwvc3ZnPgo= ### FILE: VERSION | 6 MS4wLjAK -### FILE: app.js | 83838 +### FILE: app.js | 84474 LyogPT09IEZMRC1TY2hpY2h0cGxhbnVuZyDigJQgQW53ZW5kdW5nc2xvZ2lrIChFeGNlbC10cmV1 ZXMgTGF5b3V0KQogICAgICAgU2NoaWNodC0gdW5kIFd1bnNjaHBsYW51bmcgZnVlciBlaW5lIERp ZW5zdGdydXBwZSBkZXMgRnVlaHJ1bmdzLSB1bmQKICAgICAgIExhZ2VkaWVuc3Rlcy4gRWluZSBJ @@ -15049,12 +15049,23 @@ b24nKSBrb3BmUmVuZGVybigpOwogICAgICAgICAgICB9KS5jYXRjaChmdW5jdGlvbigpIHsgLyog bmljaHQga3JpdGlzY2ggKi8gfSk7CiAgICAgICAgICAgIC8vIFVudGVyYmVzZXR6dW5ncy1XYXJu dW5nIGZ1ZXIgUGxhbmVyL1NVIChldHdhcyB2ZXJ6b2VnZXJ0LCBkYW1pdAogICAgICAgICAgICAv LyBkZXIgQmVncnVlc3N1bmdzLVRvYXN0IHZvcmhlciBzaWNodGJhciBpc3QpCiAgICAgICAgICAg -IHNldFRpbWVvdXQodW50ZXJiZXNldHp1bmdXYXJudW5nWmVpZ2VuLCAxNTAwKTsKICAgICAgICB9 -KS5jYXRjaChmdW5jdGlvbihlcnIpIHsKICAgICAgICAgICAgdG9hc3QoJ0ZlaGxlciBiZWltIExh -ZGVuOiAnICsgZXJyLm1lc3NhZ2UsICdmZWhsZXInKTsKICAgICAgICAgICAgY29uc29sZS5lcnJv -cignTGFkZWZlaGxlcjonLCBlcnIpOwogICAgICAgIH0pOwogICAgfQoKICAgIGlmIChkb2N1bWVu -dC5yZWFkeVN0YXRlID09PSAnbG9hZGluZycpIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RP -TUNvbnRlbnRMb2FkZWQnLCBpbml0KTsKICAgIGVsc2UgaW5pdCgpOwoKfSkoKTsK +IHNldFRpbWVvdXQodW50ZXJiZXNldHp1bmdXYXJudW5nWmVpZ2VuLCAxNTAwKTsKICAgICAgICAg +ICAgLy8gVXBkYXRlLUJhbm5lciAodmVyem9lZ2VydCBkYW1pdCBCZWdyw7xzc3VuZ3MtVG9hc3Qg +enVlcnN0IGVyc2NoZWludCkKICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsKICAg +ICAgICAgICAgICAgIGZldGNoKCcvYXBpL2luZm8nKS50aGVuKGZ1bmN0aW9uKHIpIHsgcmV0dXJu +IHIuanNvbigpOyB9KS50aGVuKGZ1bmN0aW9uKGluZm8pIHsKICAgICAgICAgICAgICAgICAgICBp +ZiAoaW5mby51cGRhdGVBdmFpbGFibGUgJiYgIXdpbmRvdy5fZmxkVXBkYXRlVG9hc3RTaG93bikg +ewogICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3cuX2ZsZFVwZGF0ZVRvYXN0U2hvd24gPSB0 +cnVlOwogICAgICAgICAgICAgICAgICAgICAgICB0b2FzdCgnVXBkYXRlIHZlcmbDvGdiYXI6IHYn +ICsgKGluZm8ucmVtb3RlVmVyc2lvbiB8fCAnPycpICsKICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgJyDigJQgdXBkYXRlLmJhdCBhdXNmw7xocmVuIHVuZCBTZXJ2ZXIgbmV1IHN0YXJ0ZW4n +LCAnaW5mbycsIHsgZGF1ZXI6IDIwMDAwIH0pOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAg +ICAgICAgICAgIH0pLmNhdGNoKGZ1bmN0aW9uKCkge30pOwogICAgICAgICAgICB9LCAzMDAwKTsK +ICAgICAgICB9KS5jYXRjaChmdW5jdGlvbihlcnIpIHsKICAgICAgICAgICAgdG9hc3QoJ0ZlaGxl +ciBiZWltIExhZGVuOiAnICsgZXJyLm1lc3NhZ2UsICdmZWhsZXInKTsKICAgICAgICAgICAgY29u +c29sZS5lcnJvcignTGFkZWZlaGxlcjonLCBlcnIpOwogICAgICAgIH0pOwogICAgfQoKICAgIGlm +IChkb2N1bWVudC5yZWFkeVN0YXRlID09PSAnbG9hZGluZycpIGRvY3VtZW50LmFkZEV2ZW50TGlz +dGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLCBpbml0KTsKICAgIGVsc2UgaW5pdCgpOwoKfSkoKTsK ### FILE: heartbeat-worker.js | 848 Ly8gSGVhcnRiZWF0IFdlYiBXb3JrZXIg4oCUIGzDpHVmdCB1bmdlZHJvc3NlbHQgYXVjaCBpbiBC YWNrZ3JvdW5kLVRhYnMKdmFyIElOVEVSVkFMTCA9IDUwMDA7CnZhciBzaWNodGJhciA9IHRydWU7 diff --git a/FLD-Schichtplanung/sync-bundle-06.txt b/FLD-Schichtplanung/sync-bundle-06.txt index 4803a45..6413de3 100644 --- a/FLD-Schichtplanung/sync-bundle-06.txt +++ b/FLD-Schichtplanung/sync-bundle-06.txt @@ -1,6 +1,6 @@ ### SYNC-TRANSFER 6/7 -- mit sync-entpacken.bat entpacken ### Base64 -### FILE: server.ps1 | 251958 +### FILE: server.ps1 | 253352 77u/cGFyYW0oDQogICAgW2ludF0kUG9ydCA9IDgwODEsDQogICAgW3N0cmluZ10kUm9vdFBhdGgg PSAnJywNCiAgICBbc3dpdGNoXSREZWJ1ZywNCiAgICBbc3dpdGNoXSROb0Jyb3dzZXINCikNCg0K IyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 @@ -1696,2732 +1696,2756 @@ ZWFlbmRlcnRDb3VudCBQZXJzb24oZW4pIHdlZ2VuIGFiZ2VsYXVmZW5lciBCZWZyaXN0dW5nIGF1 dG9tYXRpc2NoIGRlYWt0aXZpZXJ0LiINCiAgICAgICAgfQ0KICAgIH0NCn0gY2F0Y2ggew0KICAg IFdyaXRlLVN0YXJ0dXBMb2cgIltJTklUXSBBdXRvLUluYWt0aXYtQ2hlY2sgdWViZXJzcHJ1bmdl bjogJF8iDQp9DQoNCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 -PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiMgSFRUUC1MSVNURU5FUiBTVEFS -VEVODQojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 -PT09PT09PT09PT09PT09PT09PT09PT09PT09DQoNCiRMaXN0ZW5lciA9ICRudWxsDQp0cnkgew0K -ICAgICRMaXN0ZW5lciA9IE5ldy1PYmplY3QgU3lzdGVtLk5ldC5IdHRwTGlzdGVuZXINCiAgICAk -TGlzdGVuZXIuUHJlZml4ZXMuQWRkKCJodHRwOi8vbG9jYWxob3N0OiRQb3J0LyIpDQogICAgJExp -c3RlbmVyLlN0YXJ0KCkNCiAgICBXcml0ZS1TdGFydHVwTG9nICJMaXN0ZW5lciBsYWV1ZnQgYXVm -IGh0dHA6Ly9sb2NhbGhvc3Q6JFBvcnQiDQp9IGNhdGNoIHsNCiAgICBXcml0ZS1TdGFydHVwTG9n -ICJGQVRBTDogTGlzdGVuZXIga29ubnRlIG5pY2h0IGdlc3RhcnRldCB3ZXJkZW46ICRfIg0KICAg -IFdyaXRlLVN0YXJ0dXBMb2cgIk3DtmdsaWNoZSBVcnNhY2hlbjogUG9ydCBiZWxlZ3QsIGZlaGxl -bmRlIFVSTC1BQ0wsIEZpcmV3YWxsLiINCiAgICBleGl0IDENCn0NCg0KV3JpdGUtSG9zdCAiRkxE -LVBsYW51bmcgU2VydmVyIGF1ZiBodHRwOi8vbG9jYWxob3N0OiRQb3J0Ig0KV3JpdGUtSG9zdCAi -Um9vdDogJFJvb3QiDQpXcml0ZS1Ib3N0ICJEYXRlbjogJERhdGFEaXIiDQoNCiMgLS0tIEJyb3dz -ZXIgb2VmZm5lbiAtLS0NCmlmICgtbm90ICROb0Jyb3dzZXIpIHsNCiAgICBTdGFydC1TbGVlcCAt -TWlsbGlzZWNvbmRzIDMwMA0KICAgIHRyeSB7IFN0YXJ0LVByb2Nlc3MgImh0dHA6Ly9sb2NhbGhv -c3Q6JFBvcnQiIH0gY2F0Y2ggeyBXcml0ZS1TdGFydHVwTG9nICJCcm93c2VyLVN0YXJ0IGZlaGxn -ZXNjaGxhZ2VuOiAkXyIgfQ0KfQ0KDQojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 -PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQojIFJFUVVFU1Qt -TE9PUA0KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 -PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KDQp0cnkgew0KICAgIHdoaWxlICgkTGlzdGVu -ZXIuSXNMaXN0ZW5pbmcpIHsNCiAgICAgICAgJEFzeW5jUmVzdWx0ID0gJExpc3RlbmVyLkJlZ2lu -R2V0Q29udGV4dCgkbnVsbCwgJG51bGwpDQogICAgICAgIHdoaWxlICgtbm90ICRBc3luY1Jlc3Vs -dC5Bc3luY1dhaXRIYW5kbGUuV2FpdE9uZSgyMDAwKSkgew0KICAgICAgICAgICAgIyBTZWxmLUtp -bGw6IDMwcyBvaG5lIEhlYXJ0YmVhdCA9IFRhYiBvZGVyIEJyb3dzZXIgenUgPSBTZXJ2ZXIgYmVl -bmRlbg0KICAgICAgICAgICAgJEVsYXBzZWQgPSAoKEdldC1EYXRlKSAtICRzY3JpcHQ6TGFzdEhl -YXJ0YmVhdCkuVG90YWxTZWNvbmRzDQogICAgICAgICAgICBpZiAoJEVsYXBzZWQgLWd0ICRzY3Jp -cHQ6SGVhcnRiZWF0VGltZW91dFNlYykgew0KICAgICAgICAgICAgICAgIFdyaXRlLUhvc3QgJycN -CiAgICAgICAgICAgICAgICBXcml0ZS1Ib3N0ICc9PT09PT09PT09PT09PT09PT09PT09PT09PT09 -PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0nDQogICAgICAgICAgICAgICAgV3JpdGUt -SG9zdCAiICBLZWluIEhlYXJ0YmVhdCBzZWl0ICQoW2ludF0kRWxhcHNlZClzIC0gU2VydmVyIHdp -cmQgYmVlbmRldC4iDQogICAgICAgICAgICAgICAgV3JpdGUtSG9zdCAnICAoQnJvd3Nlci1UYWIg -b2RlciBCcm93c2VyIHd1cmRlIGdlc2NobG9zc2VuKScNCiAgICAgICAgICAgICAgICBXcml0ZS1I -b3N0ICc9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 -PT09PT09PT0nDQogICAgICAgICAgICAgICAgV3JpdGUtU3RhcnR1cExvZyAiU2VsZi1LaWxsIG5h -Y2ggJChbaW50XSRFbGFwc2VkKXMgb2huZSBIZWFydGJlYXQiDQogICAgICAgICAgICAgICAgJExp -c3RlbmVyLlN0b3AoKQ0KICAgICAgICAgICAgICAgICRMaXN0ZW5lci5DbG9zZSgpDQogICAgICAg -ICAgICAgICAgZXhpdCAwDQogICAgICAgICAgICB9DQogICAgICAgIH0NCg0KICAgICAgICAkQ29u -dGV4dCA9ICRMaXN0ZW5lci5FbmRHZXRDb250ZXh0KCRBc3luY1Jlc3VsdCkNCiAgICAgICAgJFJl -cSA9ICRDb250ZXh0LlJlcXVlc3QNCiAgICAgICAgJFJlcyA9ICRDb250ZXh0LlJlc3BvbnNlDQog -ICAgICAgICRNZXRob2QgPSAkUmVxLkh0dHBNZXRob2QNCiAgICAgICAgJFJhd1BhdGggPSAkUmVx -LlVybC5BYnNvbHV0ZVBhdGgNCiAgICAgICAgJFBhdGggPSAkUmF3UGF0aCAgIyBRdWVyeSB3aXJk -IHZvbiBIdHRwTGlzdGVuZXIgc2VwYXJhdCBiZXJlaXRnZXN0ZWxsdA0KDQogICAgICAgICMgQXVk -aXQtSUktMiBGMzogZHluYW1pc2NoZSBBQ0FPLVF1ZWxsZSBwcm8gUmVxdWVzdCBzZXR6ZW4uIEFk -ZC1TZWN1cml0eUhlYWRlcnMNCiAgICAgICAgIyBsaWVzdCAkc2NyaXB0OkNvcnNPcmlnaW5EeW5h -bWljLiBXaGl0ZWxpc3QgcGFzc2VuZCB6dW0gQ1NSRi1GaWx0ZXIgdW50ZW4uDQogICAgICAgICRz -Y3JpcHQ6UmVxT3JpZ2luSGVhZGVyID0gJFJlcS5IZWFkZXJzWydPcmlnaW4nXQ0KICAgICAgICAk -T3JpZ2luV2hpdGVsaXN0ID0gQCgiaHR0cDovL2xvY2FsaG9zdDokUG9ydCIsICJodHRwOi8vMTI3 -LjAuMC4xOiRQb3J0IikNCiAgICAgICAgaWYgKCRzY3JpcHQ6UmVxT3JpZ2luSGVhZGVyIC1hbmQg -KCRPcmlnaW5XaGl0ZWxpc3QgLWNvbnRhaW5zICRzY3JpcHQ6UmVxT3JpZ2luSGVhZGVyKSkgew0K -ICAgICAgICAgICAgJHNjcmlwdDpDb3JzT3JpZ2luRHluYW1pYyA9ICRzY3JpcHQ6UmVxT3JpZ2lu -SGVhZGVyDQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAkc2NyaXB0OkNvcnNPcmlnaW5E -eW5hbWljID0gJHNjcmlwdDpDb3JzT3JpZ2luDQogICAgICAgIH0NCg0KICAgICAgICB0cnkgew0K -ICAgICAgICAgICAgIyA9PT09PT09PT09PT09PT09PT09PT0gQ09SUyBQUkVGTElHSFQgPT09PT09 -PT09PT09PT09PT09PT09DQogICAgICAgICAgICBpZiAoJE1ldGhvZCAtZXEgJ09QVElPTlMnKSB7 -DQogICAgICAgICAgICAgICAgQWRkLVNlY3VyaXR5SGVhZGVycyAkUmVzOyAkUmVzLlN0YXR1c0Nv -ZGUgPSAyMDQ7ICRSZXMuQ2xvc2UoKTsgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAg -ICAgICAgIyBDU1JGLVNjaHV0eiBmdWVyIHdyaXRpbmcgbWV0aG9kczogT3JpZ2luIG11c3MgbWF0 -Y2hlbiBvZGVyIGZlaGxlbi4NCiAgICAgICAgICAgICMgQnJvd3NlciBzZW5kZW4gT3JpZ2luIGJl -aSBDcm9zcy1TaXRlLVBPU1QgendpbmdlbmQ7IGJlaSBTYW1lLVNpdGUNCiAgICAgICAgICAgICMg -UmVxdWVzdHMgaXN0IGVyIGdsZWljaCBvZGVyIGZlaGx0IChDTEkvY3VybCkuIEFid2VpY2hlbmRl -ciBPcmlnaW4NCiAgICAgICAgICAgICMgPSBDcm9zcy1TaXRlLUFuZ3JpZmYgdm9uIGVpbmVtIGFu -ZGVyZW4gbG9rYWxlbiBTZXJ2aWNlIGFibGVobmVuLg0KICAgICAgICAgICAgIyBNaXJyb3IgenUg -c2VydmVyLnB5OjIyMTctMjIyOC4NCiAgICAgICAgICAgIGlmICgkTWV0aG9kIC1pbiBAKCdQT1NU -JywnUFVUJywnREVMRVRFJywnUEFUQ0gnKSkgew0KICAgICAgICAgICAgICAgICRPcmlnaW4gPSAk -UmVxLkhlYWRlcnNbJ09yaWdpbiddDQogICAgICAgICAgICAgICAgIyBUb2xlcmFudGVzIE1hdGNo -aW5nOiBsb2NhbGhvc3QgVU5EIDEyNy4wLjAuMSAoVXNlciBrb2VubmVuDQogICAgICAgICAgICAg -ICAgIyB2aWEgQm9va21hcmsgYXVmIGRpZSBMb29wYmFjay1JUCBnZWxhbmRldCBzZWluKS4gQmVp -ZGUNCiAgICAgICAgICAgICAgICAjIFZhcmlhbnRlbiB6ZWlnZW4gYXVmIGRlbnNlbGJlbiBMaXN0 -ZW5lciwga2VpbiBDU1JGLVJpc2lrby4NCiAgICAgICAgICAgICAgICAkT3JpZ2luRXJsYXVidCA9 -IEAoDQogICAgICAgICAgICAgICAgICAgICJodHRwOi8vbG9jYWxob3N0OiRQb3J0IiwNCiAgICAg -ICAgICAgICAgICAgICAgImh0dHA6Ly8xMjcuMC4wLjE6JFBvcnQiDQogICAgICAgICAgICAgICAg -KQ0KICAgICAgICAgICAgICAgIGlmICgkT3JpZ2luIC1hbmQgKCRPcmlnaW5FcmxhdWJ0IC1ub3Rj -b250YWlucyAkT3JpZ2luKSkgew0KICAgICAgICAgICAgICAgICAgICBEZWJ1Zy1Mb2cgJ1NFQycg -IkNTUkY6ICRNZXRob2QgJFBhdGggdm9uIE9yaWdpbj0kT3JpZ2luIGFiZ2VsZWhudCIgJ3JlZCcN -CiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzICdDcm9zcy1PcmlnaW4tUmVxdWVz -dCBhYmdlbGVobnQnIDQwMw0KICAgICAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAg -ICAgICAgIH0NCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyA9PT09PT09PT09PT09PT09 -PT09PT0gTElGRUNZQ0xFID09PT09PT09PT09PT09PT09PT09PQ0KICAgICAgICAgICAgaWYgKCRQ -YXRoIC1lcSAnL2FwaS9oZWFydGJlYXQnIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAg -ICAgICAgICAgICAgJHNjcmlwdDpMYXN0SGVhcnRiZWF0ID0gR2V0LURhdGUNCiAgICAgICAgICAg -ICAgICBTZW5kLUpzb24gJFJlcyBAeyBzdGF0dXMgPSAnb2snIH07IGNvbnRpbnVlDQogICAgICAg -ICAgICB9DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3NodXRkb3duJyAtYW5kICRN -ZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAgICAgICAgICMgQmVhY29uIHZvbSBCcm93c2Vy -IGJlaSBUYWIvV2luZG93LUNsb3NlLiBIZWFydGJlYXQtVWhyIDI1cw0KICAgICAgICAgICAgICAg -ICMgenVydWVja2RyZWhlbiAtPiBTZXJ2ZXIgc3RpcmJ0IGluIDw9NXMgKGt1cnplIFJlbG9hZC1U -b2xlcmFueikuDQogICAgICAgICAgICAgICAgJHNjcmlwdDpMYXN0SGVhcnRiZWF0ID0gKEdldC1E -YXRlKS5BZGRTZWNvbmRzKC0oJHNjcmlwdDpIZWFydGJlYXRUaW1lb3V0U2VjIC0gNSkpDQogICAg -ICAgICAgICAgICAgU2VuZC1Kc29uICRSZXMgQHsgc3RhdHVzID0gJ3NodXRkb3duIGVpbmdlbGVp -dGV0JyB9OyBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjID09PT09PT09 -PT09PT09PT09PT09PSBJTkZPID09PT09PT09PT09PT09PT09PT09PQ0KICAgICAgICAgICAgaWYg -KCRQYXRoIC1lcSAnL2FwaS9pbmZvJyAtYW5kICRNZXRob2QgLWVxICdHRVQnKSB7DQogICAgICAg -ICAgICAgICAgJFJvbGxlQWt0dWVsbCA9IEdldC1Vc2VyUm9sbGUNCiAgICAgICAgICAgICAgICBT -ZW5kLUpzb24gJFJlcyAoW29yZGVyZWRdQHsNCiAgICAgICAgICAgICAgICAgICAgYmVudXR6ZXIg -ICAgICAgICAgICA9IEdldC1Ba3R1ZWxsZXJCZW51dHplcg0KICAgICAgICAgICAgICAgICAgICBp -c3RBZG1pbiAgICAgICAgICAgID0gVGVzdC1Jc3RBZG1pbg0KICAgICAgICAgICAgICAgICAgICBp -c3RTdXBlclVzZXIgICAgICAgID0gVGVzdC1Jc3RTdXBlclVzZXINCiAgICAgICAgICAgICAgICAg -ICAgaXN0RmFjaGF1ZnNpY2h0ICAgICA9IFRlc3QtSXN0RmFjaGF1ZnNpY2h0DQogICAgICAgICAg -ICAgICAgICAgIHJvbGxlICAgICAgICAgICAgICAgPSAkUm9sbGVBa3R1ZWxsDQogICAgICAgICAg -ICAgICAgICAgIGRhcmZVZWJlcnNjaHJlaWJlbiAgPSBUZXN0LURhcmZVZWJlcnNjaHJlaWJlbiAk -Um9sbGVBa3R1ZWxsDQogICAgICAgICAgICAgICAgICAgIHNlcnZlciAgICAgICAgICAgICAgPSAi -aHR0cDovL2xvY2FsaG9zdDokUG9ydCINCiAgICAgICAgICAgICAgICB9KQ0KICAgICAgICAgICAg -ICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgPT09PT09PT09PT09 -PT09PT09PT09IEFETUlOLUNPTkZJRyA9PT09PT09PT09PT09PT09PT09PT0NCiAgICAgICAgICAg -IGlmICgkUGF0aCAtZXEgJy9hcGkvYWRtaW4nIC1hbmQgJE1ldGhvZCAtZXEgJ0dFVCcpIHsNCiAg -ICAgICAgICAgICAgICAkQWRtaW4gPSBSZWFkLUpzb25GaWxlICdhZG1pbi5qc29uJw0KICAgICAg -ICAgICAgICAgIGlmICgkbnVsbCAtZXEgJEFkbWluKSB7IFNlbmQtRXJyb3IgJFJlcyAnYWRtaW4u -anNvbiBuaWNodCBnZWZ1bmRlbicgNDA0IH0gZWxzZSB7IFNlbmQtSnNvbiAkUmVzICRBZG1pbiB9 -DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlm -ICgkUGF0aCAtZXEgJy9hcGkvYWRtaW4nIC1hbmQgJE1ldGhvZCAtZXEgJ1BVVCcpIHsNCiAgICAg -ICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RBZG1pbikpIHsgU2VuZC1FcnJvciAkUmVzICdL -ZWluZSBCZXJlY2h0aWd1bmcnIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRCb2R5 -ID0gUmVhZC1Cb2R5ICRSZXENCiAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRCb2R5KSB7 -IFNlbmQtRXJyb3IgJFJlcyAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAg -ICAgICAgICAgICAgJERhdGEgPSAkQm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAgICAgICAg -ICAgICBXcml0ZS1Kc29uRmlsZSAnYWRtaW4uanNvbicgJERhdGENCiAgICAgICAgICAgICAgICBX -cml0ZS1Mb2dFaW50cmFnICdhZG1pbi5jb25maWcuZ2VhZW5kZXJ0JyBAeyBiZXJlaWNoID0gJ2Fk -bWluLWtvbmZpZ3VyYXRpb24nIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb24gJFJlcyBAeyBz -dGF0dXMgPSAnZ2VzcGVpY2hlcnQnIH07IGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAg -ICAgICAgICMgPT09PT09PT09PT09PT09PT09PT09IFNVUEVSVVNFUi1WRVJXQUxUVU5HID09PT09 -PT09PT09PT09PT09PT09PQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9hZG1pbi9z -dXBlcnVzZXInIC1hbmQgJE1ldGhvZCAtZXEgJ1BVVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAo -LW5vdCAoVGVzdC1Jc3RTdXBlclVzZXIpKSB7IFNlbmQtRXJyb3IgJFJlcyAnTnVyIFN1cGVyVXNl -ciBkdWVyZmVuIFN1cGVyVXNlciB2ZXJ3YWx0ZW4nIDQwMzsgY29udGludWUgfQ0KICAgICAgICAg -ICAgICAgICRCb2R5ID0gUmVhZC1Cb2R5ICRSZXENCiAgICAgICAgICAgICAgICBpZiAoJG51bGwg -LWVxICRCb2R5KSB7IFNlbmQtRXJyb3IgJFJlcyAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250 -aW51ZSB9DQogICAgICAgICAgICAgICAgJERhdGVuID0gW29iamVjdFtdXUAoJEJvZHkgfCBDb252 -ZXJ0RnJvbS1Kc29uKSAgIyBBcnJheS1FcmhhbHQgdW50ZXIgUFMgNS4xIGF1Y2ggYmVpIDEgRWxl -bWVudA0KICAgICAgICAgICAgICAgICRBZG1pbiA9IFJlYWQtSnNvbkZpbGUgJ2FkbWluLmpzb24n -DQogICAgICAgICAgICAgICAgaWYgKCRBZG1pbi5QU09iamVjdC5Qcm9wZXJ0aWVzWydzdXBlclVz -ZXInXSkgew0KICAgICAgICAgICAgICAgICAgICAkQWRtaW4uc3VwZXJVc2VyID0gJERhdGVuDQog -ICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgJEFkbWluIHwgQWRk -LU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgJ3N1cGVyVXNlcicgLVZhbHVl -ICREYXRlbg0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBXcml0ZS1Kc29uRmls -ZSAnYWRtaW4uanNvbicgJEFkbWluDQogICAgICAgICAgICAgICAgJEFuemFobCA9IEAoJERhdGVu -KS5Db3VudA0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ3N1cGVydXNlci5nZWFl -bmRlcnQnIEB7IGFuemFobCA9ICRBbnphaGwgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbiAk -UmVzIEB7IHN0YXR1cyA9ICdnZXNwZWljaGVydCcgfTsgY29udGludWUNCiAgICAgICAgICAgIH0N -Cg0KICAgICAgICAgICAgIyA9PT09PT09PT09PT09PT09PT09PT0gRkFDSEFVRlNJQ0hURU4tVkVS -V0FMVFVORyAoUGhhc2UgQikgPT09PT09PT09PT09PT09PT09PT09DQogICAgICAgICAgICAjID09 -PT09PT09PT09PT09PT09PT09PSBXT0NIRU5OT1RJWiAoV29jaGVucGxhbi1BbnNpY2h0LCBwZXJz -aXN0ZW50IHBybyBLVykgPT09PT09PT09PT09PT09PT09PT09DQogICAgICAgICAgICBpZiAoJFBh -dGggLWVxICcvYXBpL3BsYW51bmcvd29jaGVubm90aXonIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1Qn -KSB7DQogICAgICAgICAgICAgICAgJEJvZHkgPSBSZWFkLUJvZHkgJFJlcQ0KICAgICAgICAgICAg +PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCiMgVVBEQVRFLUNIRUNLDQojID09 +PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 +PT09PT09PT09PT09PT09PT09DQoNCiRzY3JpcHQ6VXBkYXRlQXZhaWxhYmxlICAgID0gJGZhbHNl +DQokc2NyaXB0OlJlbW90ZVZlcnNpb24gICAgICA9ICcnDQokc2NyaXB0OlVwZGF0ZUxhc3RDaGVj +a1V0YyA9IFtkYXRldGltZV06Ok1pblZhbHVlDQoNCmZ1bmN0aW9uIFJlZnJlc2gtVXBkYXRlQ2hl +Y2sgew0KICAgIGlmICgoW2RhdGV0aW1lXTo6VXRjTm93IC0gJHNjcmlwdDpVcGRhdGVMYXN0Q2hl +Y2tVdGMpLlRvdGFsTWludXRlcyAtbHQgNjApIHsgcmV0dXJuIH0NCiAgICAkc2NyaXB0OlVwZGF0 +ZUxhc3RDaGVja1V0YyA9IFtkYXRldGltZV06OlV0Y05vdw0KICAgICRsb2NhbFZlciA9ICcwLjAu +MCcNCiAgICAkX3ZmID0gSm9pbi1QYXRoICRSb290ICdWRVJTSU9OJw0KICAgIGlmIChUZXN0LVBh +dGggLUxpdGVyYWxQYXRoICRfdmYpIHsgJGxvY2FsVmVyID0gKEdldC1Db250ZW50IC1MaXRlcmFs +UGF0aCAkX3ZmIC1SYXcpLlRyaW0oKSB9DQogICAgdHJ5IHsNCiAgICAgICAgJHJ2ID0gKEludm9r +ZS1XZWJSZXF1ZXN0IC1VcmkgJ2h0dHBzOi8vZ2l0ZWEucmhpbm8ubnJ3L1JoaW5vL1N0YXR1c1F1 +b19VcGRhdGVzL3Jhdy9icmFuY2gvbWFpbi9GTEQtU2NoaWNodHBsYW51bmcvVkVSU0lPTicgYA0K +ICAgICAgICAgICAgICAgLVVzZUJhc2ljUGFyc2luZyAtVGltZW91dFNlYyAzIC1FcnJvckFjdGlv +biBTdG9wKS5Db250ZW50LlRyaW0oKQ0KICAgICAgICAkc2NyaXB0OlJlbW90ZVZlcnNpb24gICA9 +ICRydg0KICAgICAgICAkc2NyaXB0OlVwZGF0ZUF2YWlsYWJsZSA9IChbU3lzdGVtLlZlcnNpb25d +JHJ2IC1ndCBbU3lzdGVtLlZlcnNpb25dJGxvY2FsVmVyKQ0KICAgICAgICBXcml0ZS1Ib3N0ICIg +IFtVUERBVEUtQ0hFQ0tdIGxva2FsPSRsb2NhbFZlciByZW1vdGU9JHJ2IGF2YWlsYWJsZT0kKCRz +Y3JpcHQ6VXBkYXRlQXZhaWxhYmxlKSINCiAgICB9IGNhdGNoIHsNCiAgICAgICAgV3JpdGUtSG9z +dCAiICBbVVBEQVRFLUNIRUNLXSBuaWNodCBlcnJlaWNoYmFyICgkKCRfLkV4Y2VwdGlvbi5NZXNz +YWdlKSkiDQogICAgfQ0KfQ0KUmVmcmVzaC1VcGRhdGVDaGVjaw0KDQojID09PT09PT09PT09PT09 +PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 +PT09PT09DQojIEhUVFAtTElTVEVORVIgU1RBUlRFTg0KIyA9PT09PT09PT09PT09PT09PT09PT09 +PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K +DQokTGlzdGVuZXIgPSAkbnVsbA0KdHJ5IHsNCiAgICAkTGlzdGVuZXIgPSBOZXctT2JqZWN0IFN5 +c3RlbS5OZXQuSHR0cExpc3RlbmVyDQogICAgJExpc3RlbmVyLlByZWZpeGVzLkFkZCgiaHR0cDov +L2xvY2FsaG9zdDokUG9ydC8iKQ0KICAgICRMaXN0ZW5lci5TdGFydCgpDQogICAgV3JpdGUtU3Rh +cnR1cExvZyAiTGlzdGVuZXIgbGFldWZ0IGF1ZiBodHRwOi8vbG9jYWxob3N0OiRQb3J0Ig0KfSBj +YXRjaCB7DQogICAgV3JpdGUtU3RhcnR1cExvZyAiRkFUQUw6IExpc3RlbmVyIGtvbm50ZSBuaWNo +dCBnZXN0YXJ0ZXQgd2VyZGVuOiAkXyINCiAgICBXcml0ZS1TdGFydHVwTG9nICJNw7ZnbGljaGUg +VXJzYWNoZW46IFBvcnQgYmVsZWd0LCBmZWhsZW5kZSBVUkwtQUNMLCBGaXJld2FsbC4iDQogICAg +ZXhpdCAxDQp9DQoNCldyaXRlLUhvc3QgIkZMRC1QbGFudW5nIFNlcnZlciBhdWYgaHR0cDovL2xv +Y2FsaG9zdDokUG9ydCINCldyaXRlLUhvc3QgIlJvb3Q6ICRSb290Ig0KV3JpdGUtSG9zdCAiRGF0 +ZW46ICREYXRhRGlyIg0KDQojIC0tLSBCcm93c2VyIG9lZmZuZW4gLS0tDQppZiAoLW5vdCAkTm9C +cm93c2VyKSB7DQogICAgU3RhcnQtU2xlZXAgLU1pbGxpc2Vjb25kcyAzMDANCiAgICB0cnkgeyBT +dGFydC1Qcm9jZXNzICJodHRwOi8vbG9jYWxob3N0OiRQb3J0IiB9IGNhdGNoIHsgV3JpdGUtU3Rh +cnR1cExvZyAiQnJvd3Nlci1TdGFydCBmZWhsZ2VzY2hsYWdlbjogJF8iIH0NCn0NCg0KIyA9PT09 +PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 +PT09PT09PT09PT09PT09PQ0KIyBSRVFVRVNULUxPT1ANCiMgPT09PT09PT09PT09PT09PT09PT09 +PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0N +Cg0KdHJ5IHsNCiAgICB3aGlsZSAoJExpc3RlbmVyLklzTGlzdGVuaW5nKSB7DQogICAgICAgICRB +c3luY1Jlc3VsdCA9ICRMaXN0ZW5lci5CZWdpbkdldENvbnRleHQoJG51bGwsICRudWxsKQ0KICAg +ICAgICB3aGlsZSAoLW5vdCAkQXN5bmNSZXN1bHQuQXN5bmNXYWl0SGFuZGxlLldhaXRPbmUoMjAw +MCkpIHsNCiAgICAgICAgICAgICMgU2VsZi1LaWxsOiAzMHMgb2huZSBIZWFydGJlYXQgPSBUYWIg +b2RlciBCcm93c2VyIHp1ID0gU2VydmVyIGJlZW5kZW4NCiAgICAgICAgICAgICRFbGFwc2VkID0g +KChHZXQtRGF0ZSkgLSAkc2NyaXB0Okxhc3RIZWFydGJlYXQpLlRvdGFsU2Vjb25kcw0KICAgICAg +ICAgICAgaWYgKCRFbGFwc2VkIC1ndCAkc2NyaXB0OkhlYXJ0YmVhdFRpbWVvdXRTZWMpIHsNCiAg +ICAgICAgICAgICAgICBXcml0ZS1Ib3N0ICcnDQogICAgICAgICAgICAgICAgV3JpdGUtSG9zdCAn +PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 +PT09Jw0KICAgICAgICAgICAgICAgIFdyaXRlLUhvc3QgIiAgS2VpbiBIZWFydGJlYXQgc2VpdCAk +KFtpbnRdJEVsYXBzZWQpcyAtIFNlcnZlciB3aXJkIGJlZW5kZXQuIg0KICAgICAgICAgICAgICAg +IFdyaXRlLUhvc3QgJyAgKEJyb3dzZXItVGFiIG9kZXIgQnJvd3NlciB3dXJkZSBnZXNjaGxvc3Nl +biknDQogICAgICAgICAgICAgICAgV3JpdGUtSG9zdCAnPT09PT09PT09PT09PT09PT09PT09PT09 +PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Jw0KICAgICAgICAgICAgICAgIFdy +aXRlLVN0YXJ0dXBMb2cgIlNlbGYtS2lsbCBuYWNoICQoW2ludF0kRWxhcHNlZClzIG9obmUgSGVh +cnRiZWF0Ig0KICAgICAgICAgICAgICAgICRMaXN0ZW5lci5TdG9wKCkNCiAgICAgICAgICAgICAg +ICAkTGlzdGVuZXIuQ2xvc2UoKQ0KICAgICAgICAgICAgICAgIGV4aXQgMA0KICAgICAgICAgICAg +fQ0KICAgICAgICB9DQoNCiAgICAgICAgJENvbnRleHQgPSAkTGlzdGVuZXIuRW5kR2V0Q29udGV4 +dCgkQXN5bmNSZXN1bHQpDQogICAgICAgICRSZXEgPSAkQ29udGV4dC5SZXF1ZXN0DQogICAgICAg +ICRSZXMgPSAkQ29udGV4dC5SZXNwb25zZQ0KICAgICAgICAkTWV0aG9kID0gJFJlcS5IdHRwTWV0 +aG9kDQogICAgICAgICRSYXdQYXRoID0gJFJlcS5VcmwuQWJzb2x1dGVQYXRoDQogICAgICAgICRQ +YXRoID0gJFJhd1BhdGggICMgUXVlcnkgd2lyZCB2b24gSHR0cExpc3RlbmVyIHNlcGFyYXQgYmVy +ZWl0Z2VzdGVsbHQNCg0KICAgICAgICAjIEF1ZGl0LUlJLTIgRjM6IGR5bmFtaXNjaGUgQUNBTy1R +dWVsbGUgcHJvIFJlcXVlc3Qgc2V0emVuLiBBZGQtU2VjdXJpdHlIZWFkZXJzDQogICAgICAgICMg +bGllc3QgJHNjcmlwdDpDb3JzT3JpZ2luRHluYW1pYy4gV2hpdGVsaXN0IHBhc3NlbmQgenVtIENT +UkYtRmlsdGVyIHVudGVuLg0KICAgICAgICAkc2NyaXB0OlJlcU9yaWdpbkhlYWRlciA9ICRSZXEu +SGVhZGVyc1snT3JpZ2luJ10NCiAgICAgICAgJE9yaWdpbldoaXRlbGlzdCA9IEAoImh0dHA6Ly9s +b2NhbGhvc3Q6JFBvcnQiLCAiaHR0cDovLzEyNy4wLjAuMTokUG9ydCIpDQogICAgICAgIGlmICgk +c2NyaXB0OlJlcU9yaWdpbkhlYWRlciAtYW5kICgkT3JpZ2luV2hpdGVsaXN0IC1jb250YWlucyAk +c2NyaXB0OlJlcU9yaWdpbkhlYWRlcikpIHsNCiAgICAgICAgICAgICRzY3JpcHQ6Q29yc09yaWdp +bkR5bmFtaWMgPSAkc2NyaXB0OlJlcU9yaWdpbkhlYWRlcg0KICAgICAgICB9IGVsc2Ugew0KICAg +ICAgICAgICAgJHNjcmlwdDpDb3JzT3JpZ2luRHluYW1pYyA9ICRzY3JpcHQ6Q29yc09yaWdpbg0K +ICAgICAgICB9DQoNCiAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICMgPT09PT09PT09PT09PT09 +PT09PT09IENPUlMgUFJFRkxJR0hUID09PT09PT09PT09PT09PT09PT09PQ0KICAgICAgICAgICAg +aWYgKCRNZXRob2QgLWVxICdPUFRJT05TJykgew0KICAgICAgICAgICAgICAgIEFkZC1TZWN1cml0 +eUhlYWRlcnMgJFJlczsgJFJlcy5TdGF0dXNDb2RlID0gMjA0OyAkUmVzLkNsb3NlKCk7IGNvbnRp +bnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgQ1NSRi1TY2h1dHogZnVlciB3cml0 +aW5nIG1ldGhvZHM6IE9yaWdpbiBtdXNzIG1hdGNoZW4gb2RlciBmZWhsZW4uDQogICAgICAgICAg +ICAjIEJyb3dzZXIgc2VuZGVuIE9yaWdpbiBiZWkgQ3Jvc3MtU2l0ZS1QT1NUIHp3aW5nZW5kOyBi +ZWkgU2FtZS1TaXRlDQogICAgICAgICAgICAjIFJlcXVlc3RzIGlzdCBlciBnbGVpY2ggb2RlciBm +ZWhsdCAoQ0xJL2N1cmwpLiBBYndlaWNoZW5kZXIgT3JpZ2luDQogICAgICAgICAgICAjID0gQ3Jv +c3MtU2l0ZS1BbmdyaWZmIHZvbiBlaW5lbSBhbmRlcmVuIGxva2FsZW4gU2VydmljZSBhYmxlaG5l +bi4NCiAgICAgICAgICAgICMgTWlycm9yIHp1IHNlcnZlci5weToyMjE3LTIyMjguDQogICAgICAg +ICAgICBpZiAoJE1ldGhvZCAtaW4gQCgnUE9TVCcsJ1BVVCcsJ0RFTEVURScsJ1BBVENIJykpIHsN +CiAgICAgICAgICAgICAgICAkT3JpZ2luID0gJFJlcS5IZWFkZXJzWydPcmlnaW4nXQ0KICAgICAg +ICAgICAgICAgICMgVG9sZXJhbnRlcyBNYXRjaGluZzogbG9jYWxob3N0IFVORCAxMjcuMC4wLjEg +KFVzZXIga29lbm5lbg0KICAgICAgICAgICAgICAgICMgdmlhIEJvb2ttYXJrIGF1ZiBkaWUgTG9v +cGJhY2stSVAgZ2VsYW5kZXQgc2VpbikuIEJlaWRlDQogICAgICAgICAgICAgICAgIyBWYXJpYW50 +ZW4gemVpZ2VuIGF1ZiBkZW5zZWxiZW4gTGlzdGVuZXIsIGtlaW4gQ1NSRi1SaXNpa28uDQogICAg +ICAgICAgICAgICAgJE9yaWdpbkVybGF1YnQgPSBAKA0KICAgICAgICAgICAgICAgICAgICAiaHR0 +cDovL2xvY2FsaG9zdDokUG9ydCIsDQogICAgICAgICAgICAgICAgICAgICJodHRwOi8vMTI3LjAu +MC4xOiRQb3J0Ig0KICAgICAgICAgICAgICAgICkNCiAgICAgICAgICAgICAgICBpZiAoJE9yaWdp +biAtYW5kICgkT3JpZ2luRXJsYXVidCAtbm90Y29udGFpbnMgJE9yaWdpbikpIHsNCiAgICAgICAg +ICAgICAgICAgICAgRGVidWctTG9nICdTRUMnICJDU1JGOiAkTWV0aG9kICRQYXRoIHZvbiBPcmln +aW49JE9yaWdpbiBhYmdlbGVobnQiICdyZWQnDQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJy +b3IgJFJlcyAnQ3Jvc3MtT3JpZ2luLVJlcXVlc3QgYWJnZWxlaG50JyA0MDMNCiAgICAgICAgICAg +ICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQoNCiAg +ICAgICAgICAgICMgPT09PT09PT09PT09PT09PT09PT09IExJRkVDWUNMRSA9PT09PT09PT09PT09 +PT09PT09PT0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvaGVhcnRiZWF0JyAtYW5k +ICRNZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAgICAgICAgICRzY3JpcHQ6TGFzdEhlYXJ0 +YmVhdCA9IEdldC1EYXRlDQogICAgICAgICAgICAgICAgU2VuZC1Kc29uICRSZXMgQHsgc3RhdHVz +ID0gJ29rJyB9OyBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCRQYXRo +IC1lcSAnL2FwaS9zaHV0ZG93bicgLWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAg +ICAgICAgICAjIEJlYWNvbiB2b20gQnJvd3NlciBiZWkgVGFiL1dpbmRvdy1DbG9zZS4gSGVhcnRi +ZWF0LVVociAyNXMNCiAgICAgICAgICAgICAgICAjIHp1cnVlY2tkcmVoZW4gLT4gU2VydmVyIHN0 +aXJidCBpbiA8PTVzIChrdXJ6ZSBSZWxvYWQtVG9sZXJhbnopLg0KICAgICAgICAgICAgICAgICRz +Y3JpcHQ6TGFzdEhlYXJ0YmVhdCA9IChHZXQtRGF0ZSkuQWRkU2Vjb25kcygtKCRzY3JpcHQ6SGVh +cnRiZWF0VGltZW91dFNlYyAtIDUpKQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbiAkUmVzIEB7 +IHN0YXR1cyA9ICdzaHV0ZG93biBlaW5nZWxlaXRldCcgfTsgY29udGludWUNCiAgICAgICAgICAg +IH0NCg0KICAgICAgICAgICAgIyA9PT09PT09PT09PT09PT09PT09PT0gSU5GTyA9PT09PT09PT09 +PT09PT09PT09PT0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvaW5mbycgLWFuZCAk +TWV0aG9kIC1lcSAnR0VUJykgew0KICAgICAgICAgICAgICAgIFJlZnJlc2gtVXBkYXRlQ2hlY2sN +CiAgICAgICAgICAgICAgICAkUm9sbGVBa3R1ZWxsID0gR2V0LVVzZXJSb2xsZQ0KICAgICAgICAg +ICAgICAgIFNlbmQtSnNvbiAkUmVzIChbb3JkZXJlZF1Aew0KICAgICAgICAgICAgICAgICAgICBi +ZW51dHplciAgICAgICAgICAgID0gR2V0LUFrdHVlbGxlckJlbnV0emVyDQogICAgICAgICAgICAg +ICAgICAgIGlzdEFkbWluICAgICAgICAgICAgPSBUZXN0LUlzdEFkbWluDQogICAgICAgICAgICAg +ICAgICAgIGlzdFN1cGVyVXNlciAgICAgICAgPSBUZXN0LUlzdFN1cGVyVXNlcg0KICAgICAgICAg +ICAgICAgICAgICBpc3RGYWNoYXVmc2ljaHQgICAgID0gVGVzdC1Jc3RGYWNoYXVmc2ljaHQNCiAg +ICAgICAgICAgICAgICAgICAgcm9sbGUgICAgICAgICAgICAgICA9ICRSb2xsZUFrdHVlbGwNCiAg +ICAgICAgICAgICAgICAgICAgZGFyZlVlYmVyc2NocmVpYmVuICA9IFRlc3QtRGFyZlVlYmVyc2No +cmVpYmVuICRSb2xsZUFrdHVlbGwNCiAgICAgICAgICAgICAgICAgICAgc2VydmVyICAgICAgICAg +ICAgICA9ICJodHRwOi8vbG9jYWxob3N0OiRQb3J0Ig0KICAgICAgICAgICAgICAgICAgICB1cGRh +dGVBdmFpbGFibGUgICAgID0gJHNjcmlwdDpVcGRhdGVBdmFpbGFibGUNCiAgICAgICAgICAgICAg +ICAgICAgcmVtb3RlVmVyc2lvbiAgICAgICA9ICRzY3JpcHQ6UmVtb3RlVmVyc2lvbg0KICAgICAg +ICAgICAgICAgIH0pDQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0K +ICAgICAgICAgICAgIyA9PT09PT09PT09PT09PT09PT09PT0gQURNSU4tQ09ORklHID09PT09PT09 +PT09PT09PT09PT09PQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9hZG1pbicgLWFu +ZCAkTWV0aG9kIC1lcSAnR0VUJykgew0KICAgICAgICAgICAgICAgICRBZG1pbiA9IFJlYWQtSnNv +bkZpbGUgJ2FkbWluLmpzb24nDQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkQWRtaW4p +IHsgU2VuZC1FcnJvciAkUmVzICdhZG1pbi5qc29uIG5pY2h0IGdlZnVuZGVuJyA0MDQgfSBlbHNl +IHsgU2VuZC1Kc29uICRSZXMgJEFkbWluIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAg +ICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9hZG1pbicgLWFuZCAk +TWV0aG9kIC1lcSAnUFVUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUlzdEFk +bWluKSkgeyBTZW5kLUVycm9yICRSZXMgJ0tlaW5lIEJlcmVjaHRpZ3VuZycgNDAzOyBjb250aW51 +ZSB9DQogICAgICAgICAgICAgICAgJEJvZHkgPSBSZWFkLUJvZHkgJFJlcQ0KICAgICAgICAgICAg ICAgIGlmICgkbnVsbCAtZXEgJEJvZHkpIHsgU2VuZC1FcnJvciAkUmVzICdBbmZyYWdlIHp1IGdy -b3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICB0cnkgeyAkQSA9ICRCb2R5IHwg -Q29udmVydEZyb20tSnNvbiB9IGNhdGNoIHsgU2VuZC1FcnJvciAkUmVzICdVbmd1ZWx0aWdlcyBK -U09OJyA0MDA7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkS3dLZXkgPSBpZiAoJEEuUFNP -YmplY3QuUHJvcGVydGllc1sna3dLZXknXSkgeyAoW3N0cmluZ10kQS5rd0tleSkuVHJpbSgpIH0g -ZWxzZSB7ICcnIH0NCiAgICAgICAgICAgICAgICAkVGV4dCA9IGlmICgkQS5QU09iamVjdC5Qcm9w -ZXJ0aWVzWyd0ZXh0J10pIHsgW3N0cmluZ10kQS50ZXh0IH0gZWxzZSB7ICcnIH0NCiAgICAgICAg -ICAgICAgICBpZiAoJEt3S2V5IC1ub3RtYXRjaCAnXlxkezR9LVdcZHsyfSQnKSB7IFNlbmQtRXJy -b3IgJFJlcyAna3dLZXkgdW5ndWVsdGlnIChlcndhcnRldDogWVlZWS1Xbm4pJyA0MDA7IGNvbnRp -bnVlIH0NCiAgICAgICAgICAgICAgICAjIFZlcmdhbmdlbmUgV29jaGVuIHNjaHJlaWJnZXNjaHVl -dHp0DQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgJEphaHIgPSBb -aW50XSRLd0tleS5TdWJzdHJpbmcoMCwgNCkNCiAgICAgICAgICAgICAgICAgICAgJEt3TiAgPSBb -aW50XSRLd0tleS5TdWJzdHJpbmcoNiwgMikNCiAgICAgICAgICAgICAgICAgICAgJEphbjQgPSBb -ZGF0ZXRpbWVdOjpuZXcoJEphaHIsIDEsIDQpDQogICAgICAgICAgICAgICAgICAgICRXMU1vID0g -JEphbjQuQWRkRGF5cygtKFtpbnRdJEphbjQuRGF5T2ZXZWVrIC0gMSkpDQogICAgICAgICAgICAg -ICAgICAgIGlmICgkSmFuNC5EYXlPZldlZWsgLWVxIFtTeXN0ZW0uRGF5T2ZXZWVrXTo6U3VuZGF5 -KSB7ICRXMU1vID0gJEphbjQuQWRkRGF5cygtNikgfQ0KICAgICAgICAgICAgICAgICAgICAkS3dT -byA9ICRXMU1vLkFkZERheXMoKCRLd04gLSAxKSAqIDcgKyA2KQ0KICAgICAgICAgICAgICAgIH0g -Y2F0Y2ggeyBTZW5kLUVycm9yICRSZXMgJ2t3S2V5IHVuZ3VlbHRpZycgNDAwOyBjb250aW51ZSB9 -DQogICAgICAgICAgICAgICAgaWYgKCRLd1NvLkRhdGUgLWx0IChHZXQtRGF0ZSkuRGF0ZSkgew0K -ICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXMgJ1dvY2hlIGJlcmVpdHMgYWJnZWxh -dWZlbiAtIE5vdGl6IG5pY2h0IGVkaXRpZXJiYXInIDQwMzsgY29udGludWUNCiAgICAgICAgICAg -ICAgICB9DQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgSW52b2tl -LVdpdGhGaWxlTG9jayAncGxhbnVuZy5qc29uJyB7DQogICAgICAgICAgICAgICAgICAgICAgICAk -UGxhbnVuZyA9IFJlYWQtSnNvbkZpbGUgJ3BsYW51bmcuanNvbicNCiAgICAgICAgICAgICAgICAg -ICAgICAgIGlmICgkbnVsbCAtZXEgJFBsYW51bmcpIHsgcmV0dXJuIEB7IHR5cCA9ICdlcnJvcic7 -IGNvZGUgPSA0MDQ7IG1zZyA9ICdwbGFudW5nLmpzb24gbmljaHQgZ2VmdW5kZW4nIH0gfQ0KICAg -ICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJFBsYW51bmcuUFNPYmplY3QuUHJvcGVydGll -c1snd29jaGVubm90aXplbiddKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51 -bmcgfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAtTmFtZSAnd29jaGVubm90 -aXplbicgLVZhbHVlIChOZXctT2JqZWN0IFBTT2JqZWN0KQ0KICAgICAgICAgICAgICAgICAgICAg -ICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFtzdHJpbmddOjpJc051bGxPckVtcHR5 -KCRUZXh0KSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkUGxhbnVuZy53b2No -ZW5ub3RpemVuLlBTT2JqZWN0LlByb3BlcnRpZXNbJEt3S2V5XSkgew0KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAkUGxhbnVuZy53b2NoZW5ub3RpemVuLlBTT2JqZWN0LlByb3BlcnRp -ZXMuUmVtb3ZlKCRLd0tleSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAg -ICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm -ICgkUGxhbnVuZy53b2NoZW5ub3RpemVuLlBTT2JqZWN0LlByb3BlcnRpZXNbJEt3S2V5XSkgew0K -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUGxhbnVuZy53b2NoZW5ub3RpemVuLiRL -d0tleSA9ICRUZXh0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51bmcud29jaGVubm90aXplbiB8IEFkZC1N -ZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1lICRLd0tleSAtVmFsdWUgJFRleHQN -CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9 -DQogICAgICAgICAgICAgICAgICAgICAgICAjIEF1ZGl0LUl0ZXItQzogSE1BQy1SZS1TaWduIC0g -c29uc3QgbG9lc3QgSW50ZWdyaXRhZXRzLUNoZWNrIEZlaGxhbGFybSBhdXMuDQogICAgICAgICAg -ICAgICAgICAgICAgICBXcml0ZS1QbGFudW5nTWl0SW50ZWdyaXRhZXQgJFBsYW51bmcgQCgpDQog -ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQHsgdHlwID0gJ29rJyB9DQogICAgICAgICAg -ICAgICAgICAgIH0gfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAg -ICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXMgIiRfIiA1MDM7IGNvbnRpbnVlDQogICAgICAg -ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ3dvY2hlbm5vdGl6 -LmdlYWVuZGVydCcgQHsga3dLZXkgPSAkS3dLZXk7IGxhZW5nZSA9ICRUZXh0Lkxlbmd0aCB9DQog +b3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkRGF0YSA9ICRCb2R5IHwgQ29u +dmVydEZyb20tSnNvbg0KICAgICAgICAgICAgICAgIFdyaXRlLUpzb25GaWxlICdhZG1pbi5qc29u +JyAkRGF0YQ0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ2FkbWluLmNvbmZpZy5n +ZWFlbmRlcnQnIEB7IGJlcmVpY2ggPSAnYWRtaW4ta29uZmlndXJhdGlvbicgfQ0KICAgICAgICAg +ICAgICAgIFNlbmQtSnNvbiAkUmVzIEB7IHN0YXR1cyA9ICdnZXNwZWljaGVydCcgfTsgY29udGlu +dWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyA9PT09PT09PT09PT09PT09PT09PT0g +U1VQRVJVU0VSLVZFUldBTFRVTkcgPT09PT09PT09PT09PT09PT09PT09DQogICAgICAgICAgICBp +ZiAoJFBhdGggLWVxICcvYXBpL2FkbWluL3N1cGVydXNlcicgLWFuZCAkTWV0aG9kIC1lcSAnUFVU +Jykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUlzdFN1cGVyVXNlcikpIHsgU2Vu +ZC1FcnJvciAkUmVzICdOdXIgU3VwZXJVc2VyIGR1ZXJmZW4gU3VwZXJVc2VyIHZlcndhbHRlbicg +NDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJEJvZHkgPSBSZWFkLUJvZHkgJFJlcQ0K +ICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJEJvZHkpIHsgU2VuZC1FcnJvciAkUmVzICdB +bmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkRGF0ZW4g +PSBbb2JqZWN0W11dQCgkQm9keSB8IENvbnZlcnRGcm9tLUpzb24pICAjIEFycmF5LUVyaGFsdCB1 +bnRlciBQUyA1LjEgYXVjaCBiZWkgMSBFbGVtZW50DQogICAgICAgICAgICAgICAgJEFkbWluID0g +UmVhZC1Kc29uRmlsZSAnYWRtaW4uanNvbicNCiAgICAgICAgICAgICAgICBpZiAoJEFkbWluLlBT +T2JqZWN0LlByb3BlcnRpZXNbJ3N1cGVyVXNlciddKSB7DQogICAgICAgICAgICAgICAgICAgICRB +ZG1pbi5zdXBlclVzZXIgPSAkRGF0ZW4NCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAg +ICAgICAgICAgICAgICAkQWRtaW4gfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0 +eSAtTmFtZSAnc3VwZXJVc2VyJyAtVmFsdWUgJERhdGVuDQogICAgICAgICAgICAgICAgfQ0KICAg +ICAgICAgICAgICAgIFdyaXRlLUpzb25GaWxlICdhZG1pbi5qc29uJyAkQWRtaW4NCiAgICAgICAg +ICAgICAgICAkQW56YWhsID0gQCgkRGF0ZW4pLkNvdW50DQogICAgICAgICAgICAgICAgV3JpdGUt +TG9nRWludHJhZyAnc3VwZXJ1c2VyLmdlYWVuZGVydCcgQHsgYW56YWhsID0gJEFuemFobCB9DQog ICAgICAgICAgICAgICAgU2VuZC1Kc29uICRSZXMgQHsgc3RhdHVzID0gJ2dlc3BlaWNoZXJ0JyB9 -DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAg -IyA9PT09PT09PT09PT09PT09PT09PT0gVEFHRVNEQVRFTi1PVkVSUklERSBGVUVSIEVJTkVOIFRB -RyAoQi4yIFNVLU92ZXJyaWRlKSA9PT09PT09PT09PT09PT09PT09PT0NCiAgICAgICAgICAgICMg -UE9TVCAvYXBpL3BsYW51bmcvdGFnZXNkYXRlbiB7IGRhdHVtLCBkYXRlbiB9DQogICAgICAgICAg -ICBpZiAoJFBhdGggLWVxICcvYXBpL3BsYW51bmcvdGFnZXNkYXRlbicgLWFuZCAkTWV0aG9kIC1l -cSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICAkUm9sbGUgPSBHZXQtVXNlclJvbGxlDQogICAg -ICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtRGFyZlVlYmVyc2NocmVpYmVuICRSb2xsZSkpIHsg -U2VuZC1FcnJvciAkUmVzICdOdXIgU1UvRmFjaGF1ZnNpY2h0IGRhcmYgVGFnZXNkYXRlbiBhbnBh -c3NlbicgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJEJvZHkgPSBSZWFkLUJvZHkg -JFJlcQ0KICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJEJvZHkpIHsgU2VuZC1FcnJvciAk -UmVzICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICB0 -cnkgeyAkQSA9ICRCb2R5IHwgQ29udmVydEZyb20tSnNvbiB9IGNhdGNoIHsgU2VuZC1FcnJvciAk -UmVzICdVbmd1ZWx0aWdlcyBKU09OJyA0MDA7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICBp -ZiAoLW5vdCAkQS5kYXR1bSAtb3IgJG51bGwgLWVxICRBLmRhdGVuKSB7IFNlbmQtRXJyb3IgJFJl -cyAnZGF0dW0vZGF0ZW4gZmVobHQnIDQwMDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRE -YXR1bSA9IFtzdHJpbmddJEEuZGF0dW0NCiAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAg -ICAgICAgICAgICBJbnZva2UtV2l0aEZpbGVMb2NrICdwbGFudW5nLmpzb24nIHsNCiAgICAgICAg -ICAgICAgICAgICAgICAgICRQbGFudW5nID0gUmVhZC1Kc29uRmlsZSAncGxhbnVuZy5qc29uJw0K -ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkUGxhbnVuZykgeyByZXR1cm4g -QHsgdHlwID0gJ2Vycm9yJzsgY29kZSA9IDQwNDsgbXNnID0gJ3BsYW51bmcuanNvbiBuaWNodCBn -ZWZ1bmRlbicgfSB9DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkUGxhbnVuZy5Q -U09iamVjdC5Qcm9wZXJ0aWVzWyd0YWdlc2RhdGVuJ10pIHsNCiAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAkUGxhbnVuZyB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1O -YW1lICd0YWdlc2RhdGVuJyAtVmFsdWUgKE5ldy1PYmplY3QgUFNPYmplY3QpDQogICAgICAgICAg -ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJFBsYW51bmcudGFn -ZXNkYXRlbi5QU09iamVjdC5Qcm9wZXJ0aWVzWyREYXR1bV0pIHsNCiAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAkUGxhbnVuZy50YWdlc2RhdGVuLiREYXR1bSA9ICRBLmRhdGVuDQogICAgICAg -ICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQ -bGFudW5nLnRhZ2VzZGF0ZW4gfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAt -TmFtZSAkRGF0dW0gLVZhbHVlICRBLmRhdGVuDQogICAgICAgICAgICAgICAgICAgICAgICB9DQog -ICAgICAgICAgICAgICAgICAgICAgICBXcml0ZS1QbGFudW5nTWl0SW50ZWdyaXRhZXQgJFBsYW51 -bmcgQCggQHsga2luZCA9ICd0YWdlc2RhdGVuJzsgZGF0dW0gPSAkRGF0dW0gfSApDQogICAgICAg -ICAgICAgICAgICAgICAgICByZXR1cm4gQHsgdHlwID0gJ29rJyB9DQogICAgICAgICAgICAgICAg -ICAgIH0gfCBPdXQtTnVsbA0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAg -ICAgICAgICBTZW5kLUVycm9yICRSZXMgIiRfIiA1MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAg -ICAgfQ0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ3RhZ2VzZGF0ZW4ub3ZlcnJp -ZGUnIEB7IGRhdHVtID0gJERhdHVtOyByb2xsZSA9ICRSb2xsZSB9DQogICAgICAgICAgICAgICAg -U2VuZC1Kc29uICRSZXMgQHsgc3RhdHVzID0gJ2dlc3BlaWNoZXJ0JyB9DQogICAgICAgICAgICAg -ICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyA9PT09PT09PT09PT09 -PT09PT09PT0gUk9UQVRJT04tU0xPVCAoQi4yOiBrdWVuZnRpZ2UgVGVybWluZSBpbSBaeWtsdXMp -ID09PT09PT09PT09PT09PT09PT09PQ0KICAgICAgICAgICAgIyBQT1NUIC9hcGkvYWRtaW4vcm90 -YXRpb24tc2xvdCB7IGRhdHVtLCBkYXRlbiB9DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcv -YXBpL2FkbWluL3JvdGF0aW9uLXNsb3QnIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAg -ICAgICAgICAgICAgJFJvbGxlID0gR2V0LVVzZXJSb2xsZQ0KICAgICAgICAgICAgICAgIGlmICgt -bm90IChUZXN0LURhcmZVZWJlcnNjaHJlaWJlbiAkUm9sbGUpKSB7IFNlbmQtRXJyb3IgJFJlcyAn -TnVyIFNVL0ZhY2hhdWZzaWNodCBkYXJmIFJvdGF0aW9uIGFlbmRlcm4nIDQwMzsgY29udGludWUg -fQ0KICAgICAgICAgICAgICAgICRCb2R5ID0gUmVhZC1Cb2R5ICRSZXENCiAgICAgICAgICAgICAg -ICBpZiAoJG51bGwgLWVxICRCb2R5KSB7IFNlbmQtRXJyb3IgJFJlcyAnQW5mcmFnZSB6dSBncm9z -cycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgdHJ5IHsgJEEgPSAkQm9keSB8IENv -bnZlcnRGcm9tLUpzb24gfSBjYXRjaCB7IFNlbmQtRXJyb3IgJFJlcyAnVW5ndWVsdGlnZXMgSlNP -TicgNDAwOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJEEuZGF0dW0gLW9y -ICRudWxsIC1lcSAkQS5kYXRlbikgeyBTZW5kLUVycm9yICRSZXMgJ2RhdHVtL2RhdGVuIGZlaGx0 -JyA0MDA7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkQWRtaW4gPSBSZWFkLUpzb25GaWxl -ICdhZG1pbi5qc29uJw0KICAgICAgICAgICAgICAgICRSb3QgPSAkbnVsbA0KICAgICAgICAgICAg -ICAgIGlmICgkQWRtaW4uUFNPYmplY3QuUHJvcGVydGllc1sndGFnZXNkYXRlblJvdGF0aW9uJ10p -IHsgJFJvdCA9ICRBZG1pbi50YWdlc2RhdGVuUm90YXRpb24gfQ0KICAgICAgICAgICAgICAgIGlm -ICgkbnVsbCAtZXEgJFJvdCAtb3IgLW5vdCAkUm90LlBTT2JqZWN0LlByb3BlcnRpZXNbJ3RhZ2Un -XSAtb3IgQCgkUm90LnRhZ2UpLkNvdW50IC1lcSAwKSB7DQogICAgICAgICAgICAgICAgICAgIFNl -bmQtRXJyb3IgJFJlcyAnUm90YXRpb24gaGF0IGtlaW5lIFRhZ2UnIDQwMDsgY29udGludWUNCiAg -ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJFdvY2hlbiA9IGlmICgkUm90LlBTT2Jq -ZWN0LlByb3BlcnRpZXNbJ3dvY2hlbkFuemFobCddKSB7IFtpbnRdJFJvdC53b2NoZW5BbnphaGwg -fSBlbHNlIHsgMyB9DQogICAgICAgICAgICAgICAgJFN0YXJ0U3RyID0gaWYgKCRSb3QuUFNPYmpl -Y3QuUHJvcGVydGllc1snc3RhcnREYXR1bSddKSB7IFtzdHJpbmddJFJvdC5zdGFydERhdHVtIH0g -ZWxzZSB7ICcyMDI2LTAxLTA1JyB9DQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAg -ICAgICAgICAgJFN0YXJ0RCA9IFtkYXRldGltZV06OlBhcnNlKCRTdGFydFN0cikNCiAgICAgICAg -ICAgICAgICAgICAgJFppZWxEID0gW2RhdGV0aW1lXTo6UGFyc2UoW3N0cmluZ10kQS5kYXR1bSkN -CiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJv -ciAkUmVzICdEYXR1bSB1bmd1ZWx0aWcnIDQwMDsgY29udGludWUNCiAgICAgICAgICAgICAgICB9 -DQogICAgICAgICAgICAgICAgJE1vZHVsdXMgPSAkV29jaGVuICogNw0KICAgICAgICAgICAgICAg -IGlmICgkTW9kdWx1cyAtbGUgMCkgeyBTZW5kLUVycm9yICRSZXMgJ1JvdGF0aW9uIGhhdCBrZWlu -ZSBUYWdlJyA0MDA7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkRGlmZiA9IFtpbnRdKFtt -YXRoXTo6Um91bmQoKCRaaWVsRCAtICRTdGFydEQpLlRvdGFsRGF5cykpDQogICAgICAgICAgICAg -ICAgJElkeCA9ICgoJERpZmYgJSAkTW9kdWx1cykgKyAkTW9kdWx1cykgJSAkTW9kdWx1cw0KICAg -ICAgICAgICAgICAgICRUYWdlID0gQCgkUm90LnRhZ2UpDQogICAgICAgICAgICAgICAgaWYgKCRJ -ZHggLWdlICRUYWdlLkNvdW50KSB7ICRJZHggPSAkSWR4ICUgJFRhZ2UuQ291bnQgfQ0KICAgICAg -ICAgICAgICAgICRUYWdlWyRJZHhdID0gJEEuZGF0ZW4NCiAgICAgICAgICAgICAgICAkUm90LnRh -Z2UgPSAkVGFnZQ0KICAgICAgICAgICAgICAgICRBZG1pbi50YWdlc2RhdGVuUm90YXRpb24gPSAk -Um90DQogICAgICAgICAgICAgICAgV3JpdGUtSnNvbkZpbGUgJ2FkbWluLmpzb24nICRBZG1pbg0K -ICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ3JvdGF0aW9uLnNsb3QuZ2VhZW5kZXJ0 -JyBAeyBkYXR1bSA9ICRBLmRhdHVtOyBpZHggPSAkSWR4OyByb2xsZSA9ICRSb2xsZSB9DQogICAg -ICAgICAgICAgICAgU2VuZC1Kc29uICRSZXMgQHsgc3RhdHVzID0gJ2dlc3BlaWNoZXJ0JzsgaWR4 -ID0gJElkeCB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAg -ICAgICAgICAgIyBOdXIgU3VwZXJVc2VyIGRhcmYgZGllIExpc3RlIGFlbmRlcm4gLSBzb25zdCBr -b2VubnRlbiBGYWNoYXVmc2ljaHRlbg0KICAgICAgICAgICAgIyBzaWNoIGdlZ2Vuc2VpdGlnIGhp -bnp1ZnVlZ2VuIG9obmUgU3VwZXJVc2VyLVp1c3RpbW11bmcuDQogICAgICAgICAgICBpZiAoJFBh -dGggLWVxICcvYXBpL2FkbWluL2ZhY2hhdWZzaWNodGVuJyAtYW5kICRNZXRob2QgLWVxICdQVVQn -KSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0U3VwZXJVc2VyKSkgeyBTZW5k -LUVycm9yICRSZXMgJ051ciBTdXBlclVzZXIgZHVlcmZlbiBGYWNoYXVmc2ljaHRlbiB2ZXJ3YWx0 -ZW4nIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRCb2R5ID0gUmVhZC1Cb2R5ICRS -ZXENCiAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRCb2R5KSB7IFNlbmQtRXJyb3IgJFJl -cyAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJERh -dGVuID0gW29iamVjdFtdXUAoJEJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uKQ0KICAgICAgICAgICAg +OyBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjID09PT09PT09PT09PT09 +PT09PT09PSBGQUNIQVVGU0lDSFRFTi1WRVJXQUxUVU5HIChQaGFzZSBCKSA9PT09PT09PT09PT09 +PT09PT09PT0NCiAgICAgICAgICAgICMgPT09PT09PT09PT09PT09PT09PT09IFdPQ0hFTk5PVEla +IChXb2NoZW5wbGFuLUFuc2ljaHQsIHBlcnNpc3RlbnQgcHJvIEtXKSA9PT09PT09PT09PT09PT09 +PT09PT0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvcGxhbnVuZy93b2NoZW5ub3Rp +eicgLWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICAkQm9keSA9IFJl +YWQtQm9keSAkUmVxDQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkQm9keSkgeyBTZW5k +LUVycm9yICRSZXMgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUgfQ0KICAgICAgICAg +ICAgICAgIHRyeSB7ICRBID0gJEJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uIH0gY2F0Y2ggeyBTZW5k +LUVycm9yICRSZXMgJ1VuZ3VlbHRpZ2VzIEpTT04nIDQwMDsgY29udGludWUgfQ0KICAgICAgICAg +ICAgICAgICRLd0tleSA9IGlmICgkQS5QU09iamVjdC5Qcm9wZXJ0aWVzWydrd0tleSddKSB7IChb +c3RyaW5nXSRBLmt3S2V5KS5UcmltKCkgfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgICRU +ZXh0ID0gaWYgKCRBLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3RleHQnXSkgeyBbc3RyaW5nXSRBLnRl +eHQgfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgIGlmICgkS3dLZXkgLW5vdG1hdGNoICde +XGR7NH0tV1xkezJ9JCcpIHsgU2VuZC1FcnJvciAkUmVzICdrd0tleSB1bmd1ZWx0aWcgKGVyd2Fy +dGV0OiBZWVlZLVdubiknIDQwMDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICMgVmVyZ2Fu +Z2VuZSBXb2NoZW4gc2NocmVpYmdlc2NodWV0enQNCiAgICAgICAgICAgICAgICB0cnkgew0KICAg +ICAgICAgICAgICAgICAgICAkSmFociA9IFtpbnRdJEt3S2V5LlN1YnN0cmluZygwLCA0KQ0KICAg +ICAgICAgICAgICAgICAgICAkS3dOICA9IFtpbnRdJEt3S2V5LlN1YnN0cmluZyg2LCAyKQ0KICAg +ICAgICAgICAgICAgICAgICAkSmFuNCA9IFtkYXRldGltZV06Om5ldygkSmFociwgMSwgNCkNCiAg +ICAgICAgICAgICAgICAgICAgJFcxTW8gPSAkSmFuNC5BZGREYXlzKC0oW2ludF0kSmFuNC5EYXlP +ZldlZWsgLSAxKSkNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRKYW40LkRheU9mV2VlayAtZXEg +W1N5c3RlbS5EYXlPZldlZWtdOjpTdW5kYXkpIHsgJFcxTW8gPSAkSmFuNC5BZGREYXlzKC02KSB9 +DQogICAgICAgICAgICAgICAgICAgICRLd1NvID0gJFcxTW8uQWRkRGF5cygoJEt3TiAtIDEpICog +NyArIDYpDQogICAgICAgICAgICAgICAgfSBjYXRjaCB7IFNlbmQtRXJyb3IgJFJlcyAna3dLZXkg +dW5ndWVsdGlnJyA0MDA7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICBpZiAoJEt3U28uRGF0 +ZSAtbHQgKEdldC1EYXRlKS5EYXRlKSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3Ig +JFJlcyAnV29jaGUgYmVyZWl0cyBhYmdlbGF1ZmVuIC0gTm90aXogbmljaHQgZWRpdGllcmJhcicg +NDAzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB0cnkgew0K +ICAgICAgICAgICAgICAgICAgICBJbnZva2UtV2l0aEZpbGVMb2NrICdwbGFudW5nLmpzb24nIHsN +CiAgICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5nID0gUmVhZC1Kc29uRmlsZSAncGxhbnVu +Zy5qc29uJw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkUGxhbnVuZykg +eyByZXR1cm4gQHsgdHlwID0gJ2Vycm9yJzsgY29kZSA9IDQwNDsgbXNnID0gJ3BsYW51bmcuanNv +biBuaWNodCBnZWZ1bmRlbicgfSB9DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAk +UGxhbnVuZy5QU09iamVjdC5Qcm9wZXJ0aWVzWyd3b2NoZW5ub3RpemVuJ10pIHsNCiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAkUGxhbnVuZyB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90 +ZVByb3BlcnR5IC1OYW1lICd3b2NoZW5ub3RpemVuJyAtVmFsdWUgKE5ldy1PYmplY3QgUFNPYmpl +Y3QpDQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBp +ZiAoW3N0cmluZ106OklzTnVsbE9yRW1wdHkoJFRleHQpKSB7DQogICAgICAgICAgICAgICAgICAg +ICAgICAgICAgaWYgKCRQbGFudW5nLndvY2hlbm5vdGl6ZW4uUFNPYmplY3QuUHJvcGVydGllc1sk +S3dLZXldKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5nLndvY2hl +bm5vdGl6ZW4uUFNPYmplY3QuUHJvcGVydGllcy5SZW1vdmUoJEt3S2V5KQ0KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRQbGFudW5nLndvY2hlbm5vdGl6ZW4uUFNPYmpl +Y3QuUHJvcGVydGllc1skS3dLZXldKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICRQbGFudW5nLndvY2hlbm5vdGl6ZW4uJEt3S2V5ID0gJFRleHQNCiAgICAgICAgICAgICAgICAg +ICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUGxh +bnVuZy53b2NoZW5ub3RpemVuIHwgQWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkg +LU5hbWUgJEt3S2V5IC1WYWx1ZSAkVGV4dA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0N +CiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICMgQXVk +aXQtSXRlci1DOiBITUFDLVJlLVNpZ24gLSBzb25zdCBsb2VzdCBJbnRlZ3JpdGFldHMtQ2hlY2sg +RmVobGFsYXJtIGF1cy4NCiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlLVBsYW51bmdNaXRJ +bnRlZ3JpdGFldCAkUGxhbnVuZyBAKCkNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBA +eyB0eXAgPSAnb2snIH0NCiAgICAgICAgICAgICAgICAgICAgfSB8IE91dC1OdWxsDQogICAgICAg +ICAgICAgICAgfSBjYXRjaCB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlcyAi +JF8iIDUwMzsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgV3Jp +dGUtTG9nRWludHJhZyAnd29jaGVubm90aXouZ2VhZW5kZXJ0JyBAeyBrd0tleSA9ICRLd0tleTsg +bGFlbmdlID0gJFRleHQuTGVuZ3RoIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb24gJFJlcyBA +eyBzdGF0dXMgPSAnZ2VzcGVpY2hlcnQnIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAg +ICAgICAgICAgfQ0KDQogICAgICAgICAgICAjID09PT09PT09PT09PT09PT09PT09PSBUQUdFU0RB +VEVOLU9WRVJSSURFIEZVRVIgRUlORU4gVEFHIChCLjIgU1UtT3ZlcnJpZGUpID09PT09PT09PT09 +PT09PT09PT09PQ0KICAgICAgICAgICAgIyBQT1NUIC9hcGkvcGxhbnVuZy90YWdlc2RhdGVuIHsg +ZGF0dW0sIGRhdGVuIH0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvcGxhbnVuZy90 +YWdlc2RhdGVuJyAtYW5kICRNZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAgICAgICAgICRS +b2xsZSA9IEdldC1Vc2VyUm9sbGUNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1EYXJm +VWViZXJzY2hyZWliZW4gJFJvbGxlKSkgeyBTZW5kLUVycm9yICRSZXMgJ051ciBTVS9GYWNoYXVm +c2ljaHQgZGFyZiBUYWdlc2RhdGVuIGFucGFzc2VuJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAg +ICAgICAgICAkQm9keSA9IFJlYWQtQm9keSAkUmVxDQogICAgICAgICAgICAgICAgaWYgKCRudWxs +IC1lcSAkQm9keSkgeyBTZW5kLUVycm9yICRSZXMgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29u +dGludWUgfQ0KICAgICAgICAgICAgICAgIHRyeSB7ICRBID0gJEJvZHkgfCBDb252ZXJ0RnJvbS1K +c29uIH0gY2F0Y2ggeyBTZW5kLUVycm9yICRSZXMgJ1VuZ3VlbHRpZ2VzIEpTT04nIDQwMDsgY29u +dGludWUgfQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRBLmRhdHVtIC1vciAkbnVsbCAtZXEg +JEEuZGF0ZW4pIHsgU2VuZC1FcnJvciAkUmVzICdkYXR1bS9kYXRlbiBmZWhsdCcgNDAwOyBjb250 +aW51ZSB9DQogICAgICAgICAgICAgICAgJERhdHVtID0gW3N0cmluZ10kQS5kYXR1bQ0KICAgICAg +ICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgIEludm9rZS1XaXRoRmlsZUxvY2sg +J3BsYW51bmcuanNvbicgew0KICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51bmcgPSBSZWFk +LUpzb25GaWxlICdwbGFudW5nLmpzb24nDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG51 +bGwgLWVxICRQbGFudW5nKSB7IHJldHVybiBAeyB0eXAgPSAnZXJyb3InOyBjb2RlID0gNDA0OyBt +c2cgPSAncGxhbnVuZy5qc29uIG5pY2h0IGdlZnVuZGVuJyB9IH0NCiAgICAgICAgICAgICAgICAg +ICAgICAgIGlmICgtbm90ICRQbGFudW5nLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3RhZ2VzZGF0ZW4n +XSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5nIHwgQWRkLU1lbWJlciAt +TWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgJ3RhZ2VzZGF0ZW4nIC1WYWx1ZSAoTmV3LU9i +amVjdCBQU09iamVjdCkNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg +ICAgICAgICAgIGlmICgkUGxhbnVuZy50YWdlc2RhdGVuLlBTT2JqZWN0LlByb3BlcnRpZXNbJERh +dHVtXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5nLnRhZ2VzZGF0ZW4u +JERhdHVtID0gJEEuZGF0ZW4NCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51bmcudGFnZXNkYXRlbiB8IEFkZC1NZW1iZXIg +LU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1lICREYXR1bSAtVmFsdWUgJEEuZGF0ZW4NCiAg +ICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlLVBs +YW51bmdNaXRJbnRlZ3JpdGFldCAkUGxhbnVuZyBAKCBAeyBraW5kID0gJ3RhZ2VzZGF0ZW4nOyBk +YXR1bSA9ICREYXR1bSB9ICkNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBAeyB0eXAg +PSAnb2snIH0NCiAgICAgICAgICAgICAgICAgICAgfSB8IE91dC1OdWxsDQogICAgICAgICAgICAg +ICAgfSBjYXRjaCB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlcyAiJF8iIDUw +MzsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgV3JpdGUtTG9n +RWludHJhZyAndGFnZXNkYXRlbi5vdmVycmlkZScgQHsgZGF0dW0gPSAkRGF0dW07IHJvbGxlID0g +JFJvbGxlIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb24gJFJlcyBAeyBzdGF0dXMgPSAnZ2Vz +cGVpY2hlcnQnIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQog +ICAgICAgICAgICAjID09PT09PT09PT09PT09PT09PT09PSBST1RBVElPTi1TTE9UIChCLjI6IGt1 +ZW5mdGlnZSBUZXJtaW5lIGltIFp5a2x1cykgPT09PT09PT09PT09PT09PT09PT09DQogICAgICAg +ICAgICAjIFBPU1QgL2FwaS9hZG1pbi9yb3RhdGlvbi1zbG90IHsgZGF0dW0sIGRhdGVuIH0NCiAg +ICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvYWRtaW4vcm90YXRpb24tc2xvdCcgLWFuZCAk +TWV0aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICAkUm9sbGUgPSBHZXQtVXNlclJv +bGxlDQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtRGFyZlVlYmVyc2NocmVpYmVuICRS +b2xsZSkpIHsgU2VuZC1FcnJvciAkUmVzICdOdXIgU1UvRmFjaGF1ZnNpY2h0IGRhcmYgUm90YXRp +b24gYWVuZGVybicgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJEJvZHkgPSBSZWFk +LUJvZHkgJFJlcQ0KICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJEJvZHkpIHsgU2VuZC1F +cnJvciAkUmVzICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAg +ICAgICB0cnkgeyAkQSA9ICRCb2R5IHwgQ29udmVydEZyb20tSnNvbiB9IGNhdGNoIHsgU2VuZC1F +cnJvciAkUmVzICdVbmd1ZWx0aWdlcyBKU09OJyA0MDA7IGNvbnRpbnVlIH0NCiAgICAgICAgICAg +ICAgICBpZiAoLW5vdCAkQS5kYXR1bSAtb3IgJG51bGwgLWVxICRBLmRhdGVuKSB7IFNlbmQtRXJy +b3IgJFJlcyAnZGF0dW0vZGF0ZW4gZmVobHQnIDQwMDsgY29udGludWUgfQ0KICAgICAgICAgICAg ICAgICRBZG1pbiA9IFJlYWQtSnNvbkZpbGUgJ2FkbWluLmpzb24nDQogICAgICAgICAgICAgICAg -aWYgKCRBZG1pbi5QU09iamVjdC5Qcm9wZXJ0aWVzWydmYWNoYXVmc2ljaHRlbiddKSB7DQogICAg -ICAgICAgICAgICAgICAgICRBZG1pbi5mYWNoYXVmc2ljaHRlbiA9ICREYXRlbg0KICAgICAgICAg -ICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICRBZG1pbiB8IEFkZC1NZW1iZXIg -LU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1lICdmYWNoYXVmc2ljaHRlbicgLVZhbHVlICRE -YXRlbg0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBXcml0ZS1Kc29uRmlsZSAn -YWRtaW4uanNvbicgJEFkbWluDQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnZmFj -aGF1ZnNpY2h0ZW4uZ2VhZW5kZXJ0JyBAeyBhbnphaGwgPSBAKCREYXRlbikuQ291bnQgfQ0KICAg -ICAgICAgICAgICAgIFNlbmQtSnNvbiAkUmVzIEB7IHN0YXR1cyA9ICdnZXNwZWljaGVydCcgfTsg -Y29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyA9PT09PT09PT09PT09PT09 -PT09PT0gRkVJRVJUQUdFIC8gRkVSSUVOIC8gU09OREVSVEVSTUlORSA9PT09PT09PT09PT09PT09 -PT09PT0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvYWRtaW4vZmVpZXJ0YWdlJyAt -YW5kICRNZXRob2QgLWVxICdQVVQnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3Qt -SXN0QWRtaW4pKSB7IFNlbmQtRXJyb3IgJFJlcyAnS2VpbmUgQmVyZWNodGlndW5nJyA0MDM7IGNv -bnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkQm9keSA9IFJlYWQtQm9keSAkUmVxDQogICAgICAg -ICAgICAgICAgaWYgKCRudWxsIC1lcSAkQm9keSkgeyBTZW5kLUVycm9yICRSZXMgJ0FuZnJhZ2Ug -enUgZ3Jvc3MnIDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICREYXRlbiA9IFtvYmpl -Y3RbXV1AKCRCb2R5IHwgQ29udmVydEZyb20tSnNvbikgICMgQXJyYXktRXJoYWx0IHVudGVyIFBT -IDUuMSBhdWNoIGJlaSAxIEVsZW1lbnQNCiAgICAgICAgICAgICAgICAkQWRtaW4gPSBSZWFkLUpz -b25GaWxlICdhZG1pbi5qc29uJw0KICAgICAgICAgICAgICAgICRBZG1pbi5mZWllcnRhZ2UgPSAk -RGF0ZW4NCiAgICAgICAgICAgICAgICBXcml0ZS1Kc29uRmlsZSAnYWRtaW4uanNvbicgJEFkbWlu -DQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnZmVpZXJ0YWdlLmdlYWVuZGVydCcg -QHt9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uICRSZXMgQHsgc3RhdHVzID0gJ2dlc3BlaWNo -ZXJ0JyB9OyBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1l -cSAnL2FwaS9hZG1pbi9mZXJpZW4nIC1hbmQgJE1ldGhvZCAtZXEgJ1BVVCcpIHsNCiAgICAgICAg -ICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RBZG1pbikpIHsgU2VuZC1FcnJvciAkUmVzICdLZWlu -ZSBCZXJlY2h0aWd1bmcnIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRCb2R5ID0g -UmVhZC1Cb2R5ICRSZXENCiAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRCb2R5KSB7IFNl -bmQtRXJyb3IgJFJlcyAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAg -ICAgICAgICAgJERhdGVuID0gW29iamVjdFtdXUAoJEJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uKSAg -IyBBcnJheS1FcmhhbHQgdW50ZXIgUFMgNS4xIGF1Y2ggYmVpIDEgRWxlbWVudA0KICAgICAgICAg -ICAgICAgICRBZG1pbiA9IFJlYWQtSnNvbkZpbGUgJ2FkbWluLmpzb24nDQogICAgICAgICAgICAg -ICAgJEFkbWluLmZlcmllbiA9ICREYXRlbg0KICAgICAgICAgICAgICAgIFdyaXRlLUpzb25GaWxl -ICdhZG1pbi5qc29uJyAkQWRtaW4NCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdm -ZXJpZW4uZ2VhZW5kZXJ0JyBAe30NCiAgICAgICAgICAgICAgICBTZW5kLUpzb24gJFJlcyBAeyBz -dGF0dXMgPSAnZ2VzcGVpY2hlcnQnIH07IGNvbnRpbnVlDQogICAgICAgICAgICB9DQogICAgICAg -ICAgICAjID09PT09PT09PT09PT09PT09PT09PSBCRVNQUkVDSFVOR1NWT1JMQUdFTiAoQi40KSA9 -PT09PT09PT09PT09PT09PT09PT0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvYWRt -aW4vYmVzcHJlY2h1bmdzdm9ybGFnZW4nIC1hbmQgJE1ldGhvZCAtZXEgJ1BVVCcpIHsNCiAgICAg +JFJvdCA9ICRudWxsDQogICAgICAgICAgICAgICAgaWYgKCRBZG1pbi5QU09iamVjdC5Qcm9wZXJ0 +aWVzWyd0YWdlc2RhdGVuUm90YXRpb24nXSkgeyAkUm90ID0gJEFkbWluLnRhZ2VzZGF0ZW5Sb3Rh +dGlvbiB9DQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkUm90IC1vciAtbm90ICRSb3Qu +UFNPYmplY3QuUHJvcGVydGllc1sndGFnZSddIC1vciBAKCRSb3QudGFnZSkuQ291bnQgLWVxIDAp +IHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzICdSb3RhdGlvbiBoYXQga2Vp +bmUgVGFnZScgNDAwOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg +ICAkV29jaGVuID0gaWYgKCRSb3QuUFNPYmplY3QuUHJvcGVydGllc1snd29jaGVuQW56YWhsJ10p +IHsgW2ludF0kUm90LndvY2hlbkFuemFobCB9IGVsc2UgeyAzIH0NCiAgICAgICAgICAgICAgICAk +U3RhcnRTdHIgPSBpZiAoJFJvdC5QU09iamVjdC5Qcm9wZXJ0aWVzWydzdGFydERhdHVtJ10pIHsg +W3N0cmluZ10kUm90LnN0YXJ0RGF0dW0gfSBlbHNlIHsgJzIwMjYtMDEtMDUnIH0NCiAgICAgICAg +ICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAkU3RhcnREID0gW2RhdGV0aW1lXTo6 +UGFyc2UoJFN0YXJ0U3RyKQ0KICAgICAgICAgICAgICAgICAgICAkWmllbEQgPSBbZGF0ZXRpbWVd +OjpQYXJzZShbc3RyaW5nXSRBLmRhdHVtKQ0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAg +ICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXMgJ0RhdHVtIHVuZ3VlbHRpZycgNDAwOyBj +b250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkTW9kdWx1cyA9ICRX +b2NoZW4gKiA3DQogICAgICAgICAgICAgICAgaWYgKCRNb2R1bHVzIC1sZSAwKSB7IFNlbmQtRXJy +b3IgJFJlcyAnUm90YXRpb24gaGF0IGtlaW5lIFRhZ2UnIDQwMDsgY29udGludWUgfQ0KICAgICAg +ICAgICAgICAgICREaWZmID0gW2ludF0oW21hdGhdOjpSb3VuZCgoJFppZWxEIC0gJFN0YXJ0RCku +VG90YWxEYXlzKSkNCiAgICAgICAgICAgICAgICAkSWR4ID0gKCgkRGlmZiAlICRNb2R1bHVzKSAr +ICRNb2R1bHVzKSAlICRNb2R1bHVzDQogICAgICAgICAgICAgICAgJFRhZ2UgPSBAKCRSb3QudGFn +ZSkNCiAgICAgICAgICAgICAgICBpZiAoJElkeCAtZ2UgJFRhZ2UuQ291bnQpIHsgJElkeCA9ICRJ +ZHggJSAkVGFnZS5Db3VudCB9DQogICAgICAgICAgICAgICAgJFRhZ2VbJElkeF0gPSAkQS5kYXRl +bg0KICAgICAgICAgICAgICAgICRSb3QudGFnZSA9ICRUYWdlDQogICAgICAgICAgICAgICAgJEFk +bWluLnRhZ2VzZGF0ZW5Sb3RhdGlvbiA9ICRSb3QNCiAgICAgICAgICAgICAgICBXcml0ZS1Kc29u +RmlsZSAnYWRtaW4uanNvbicgJEFkbWluDQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJh +ZyAncm90YXRpb24uc2xvdC5nZWFlbmRlcnQnIEB7IGRhdHVtID0gJEEuZGF0dW07IGlkeCA9ICRJ +ZHg7IHJvbGxlID0gJFJvbGxlIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb24gJFJlcyBAeyBz +dGF0dXMgPSAnZ2VzcGVpY2hlcnQnOyBpZHggPSAkSWR4IH0NCiAgICAgICAgICAgICAgICBjb250 +aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjIE51ciBTdXBlclVzZXIgZGFyZiBk +aWUgTGlzdGUgYWVuZGVybiAtIHNvbnN0IGtvZW5udGVuIEZhY2hhdWZzaWNodGVuDQogICAgICAg +ICAgICAjIHNpY2ggZ2VnZW5zZWl0aWcgaGluenVmdWVnZW4gb2huZSBTdXBlclVzZXItWnVzdGlt +bXVuZy4NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvYWRtaW4vZmFjaGF1ZnNpY2h0 +ZW4nIC1hbmQgJE1ldGhvZCAtZXEgJ1BVVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAo +VGVzdC1Jc3RTdXBlclVzZXIpKSB7IFNlbmQtRXJyb3IgJFJlcyAnTnVyIFN1cGVyVXNlciBkdWVy +ZmVuIEZhY2hhdWZzaWNodGVuIHZlcndhbHRlbicgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAg +ICAgICAgJEJvZHkgPSBSZWFkLUJvZHkgJFJlcQ0KICAgICAgICAgICAgICAgIGlmICgkbnVsbCAt +ZXEgJEJvZHkpIHsgU2VuZC1FcnJvciAkUmVzICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRp +bnVlIH0NCiAgICAgICAgICAgICAgICAkRGF0ZW4gPSBbb2JqZWN0W11dQCgkQm9keSB8IENvbnZl +cnRGcm9tLUpzb24pDQogICAgICAgICAgICAgICAgJEFkbWluID0gUmVhZC1Kc29uRmlsZSAnYWRt +aW4uanNvbicNCiAgICAgICAgICAgICAgICBpZiAoJEFkbWluLlBTT2JqZWN0LlByb3BlcnRpZXNb +J2ZhY2hhdWZzaWNodGVuJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgJEFkbWluLmZhY2hhdWZz +aWNodGVuID0gJERhdGVuDQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAg +ICAgICAgJEFkbWluIHwgQWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUg +J2ZhY2hhdWZzaWNodGVuJyAtVmFsdWUgJERhdGVuDQogICAgICAgICAgICAgICAgfQ0KICAgICAg +ICAgICAgICAgIFdyaXRlLUpzb25GaWxlICdhZG1pbi5qc29uJyAkQWRtaW4NCiAgICAgICAgICAg +ICAgICBXcml0ZS1Mb2dFaW50cmFnICdmYWNoYXVmc2ljaHRlbi5nZWFlbmRlcnQnIEB7IGFuemFo +bCA9IEAoJERhdGVuKS5Db3VudCB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uICRSZXMgQHsg +c3RhdHVzID0gJ2dlc3BlaWNoZXJ0JyB9OyBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAg +ICAgICAgICAjID09PT09PT09PT09PT09PT09PT09PSBGRUlFUlRBR0UgLyBGRVJJRU4gLyBTT05E +RVJURVJNSU5FID09PT09PT09PT09PT09PT09PT09PQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1l +cSAnL2FwaS9hZG1pbi9mZWllcnRhZ2UnIC1hbmQgJE1ldGhvZCAtZXEgJ1BVVCcpIHsNCiAgICAg ICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RBZG1pbikpIHsgU2VuZC1FcnJvciAkUmVzICdL ZWluZSBCZXJlY2h0aWd1bmcnIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRCb2R5 ID0gUmVhZC1Cb2R5ICRSZXENCiAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRCb2R5KSB7 IFNlbmQtRXJyb3IgJFJlcyAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAg ICAgICAgICAgICAgJERhdGVuID0gW29iamVjdFtdXUAoJEJvZHkgfCBDb252ZXJ0RnJvbS1Kc29u -KQ0KICAgICAgICAgICAgICAgICRBZG1pbiA9IFJlYWQtSnNvbkZpbGUgJ2FkbWluLmpzb24nDQog -ICAgICAgICAgICAgICAgaWYgKCRBZG1pbi5QU09iamVjdC5Qcm9wZXJ0aWVzWydiZXNwcmVjaHVu -Z3NWb3JsYWdlbiddKSB7DQogICAgICAgICAgICAgICAgICAgICRBZG1pbi5iZXNwcmVjaHVuZ3NW -b3JsYWdlbiA9ICREYXRlbg0KICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAg -ICAgICAgICRBZG1pbiB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1l -ICdiZXNwcmVjaHVuZ3NWb3JsYWdlbicgLVZhbHVlICREYXRlbg0KICAgICAgICAgICAgICAgIH0N -CiAgICAgICAgICAgICAgICBXcml0ZS1Kc29uRmlsZSAnYWRtaW4uanNvbicgJEFkbWluDQogICAg -ICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnYmVzcHJlY2h1bmdzdm9ybGFnZW4uZ2VhZW5k -ZXJ0JyBAeyBhbnphaGwgPSBAKCREYXRlbikuQ291bnQgfQ0KICAgICAgICAgICAgICAgIFNlbmQt -SnNvbiAkUmVzIEB7IHN0YXR1cyA9ICdnZXNwZWljaGVydCcgfTsgY29udGludWUNCiAgICAgICAg -ICAgIH0NCg0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9hZG1pbi9zb25kZXJ0ZXJt -aW5lJyAtYW5kICRNZXRob2QgLWVxICdQVVQnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3Qg -KFRlc3QtSXN0QWRtaW4pKSB7IFNlbmQtRXJyb3IgJFJlcyAnS2VpbmUgQmVyZWNodGlndW5nJyA0 -MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkQm9keSA9IFJlYWQtQm9keSAkUmVxDQog -ICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkQm9keSkgeyBTZW5kLUVycm9yICRSZXMgJ0Fu -ZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRSb2ggPSBb -b2JqZWN0W11dQCgkQm9keSB8IENvbnZlcnRGcm9tLUpzb24pICAjIEFycmF5LUVyaGFsdCB1bnRl -ciBQUyA1LjEgYXVjaCBiZWkgMSBFbGVtZW50DQogICAgICAgICAgICAgICAgIyBXaGl0ZWxpc3Qg -KEF1ZGl0LUl0ZXItQyk6IG51ciAxMSBlcmxhdWJ0ZSBGZWxkZXIgcHJvIEVpbnRyYWcgcGVyc2lz -dGllcmVuDQogICAgICAgICAgICAgICAgJEVybGF1YnQgPSBAKCdpZCcsJ2RhdHVtJywnZGF0dW1C -aXMnLCd0aXRlbCcsJ3RleHQnLCdpY29uJywndHlwJywnd2Fybk1vZHVzJywna2F0ZWdvcmllJywn -bG9nb3MnLCdsb2dvRGFyc3RlbGx1bmcnKQ0KICAgICAgICAgICAgICAgICREYXRlbiA9IEAoKQ0K -ICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRSb2gxIGluICRSb2gpIHsNCiAgICAgICAgICAgICAg -ICAgICAgaWYgKCRudWxsIC1lcSAkUm9oMSkgeyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAg -ICAgICRTYXViZXIgPSBbb3JkZXJlZF1Ae30NCiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAo -JEZlbGQgaW4gJEVybGF1YnQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkUm9oMS5Q -U09iamVjdC5Qcm9wZXJ0aWVzWyRGZWxkXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICRTYXViZXJbJEZlbGRdID0gJFJvaDEuJEZlbGQNCiAgICAgICAgICAgICAgICAgICAgICAgIH0N -CiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAkRGF0ZW4gKz0gW3Bz -Y3VzdG9tb2JqZWN0XSRTYXViZXINCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg -JERhdGVuID0gW29iamVjdFtdXSREYXRlbg0KICAgICAgICAgICAgICAgICRBZG1pbiA9IFJlYWQt -SnNvbkZpbGUgJ2FkbWluLmpzb24nDQogICAgICAgICAgICAgICAgaWYgKCRBZG1pbi5QU09iamVj -dC5Qcm9wZXJ0aWVzWydzb25kZXJ0ZXJtaW5lJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgJEFk -bWluLnNvbmRlcnRlcm1pbmUgPSAkRGF0ZW4NCiAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAg -ICAgICAgICAgICAgICAgICAkQWRtaW4gfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQcm9w -ZXJ0eSAtTmFtZSAnc29uZGVydGVybWluZScgLVZhbHVlICREYXRlbg0KICAgICAgICAgICAgICAg -IH0NCiAgICAgICAgICAgICAgICBXcml0ZS1Kc29uRmlsZSAnYWRtaW4uanNvbicgJEFkbWluDQog -ICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnc29uZGVydGVybWluZS5nZWFlbmRlcnQn -IEB7IGFuemFobCA9IEAoJERhdGVuKS5Db3VudCB9DQogICAgICAgICAgICAgICAgJFVzZXJuYW1l -ID0gJGVudjpVU0VSTkFNRQ0KICAgICAgICAgICAgICAgICRSb2xsZSA9IEdldC1Vc2VyUm9sbGUN -CiAgICAgICAgICAgICAgICBBZGQtQ2hhbmdlTG9nRW50cnkgJ3NvbmRlcnRlcm1pbmUnICRudWxs -ICRudWxsICRudWxsICRVc2VybmFtZSAkUm9sbGUgQHsgYW56YWhsID0gQCgkRGF0ZW4pLkNvdW50 -IH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb24gJFJlcyBAeyBzdGF0dXMgPSAnZ2VzcGVpY2hl -cnQnIH07IGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgPT09PT09PT09 -PT09PT09PT09PT09IFNUQU5ET1JURSA9PT09PT09PT09PT09PT09PT09PT0NCiAgICAgICAgICAg -IGlmICgkUGF0aCAtZXEgJy9hcGkvYWRtaW4vc3RhbmRvcnRlJyAtYW5kICRNZXRob2QgLWVxICdQ -VVQnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0QWRtaW4pKSB7IFNlbmQt -RXJyb3IgJFJlcyAnS2VpbmUgQmVyZWNodGlndW5nJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAg -ICAgICAgICAkQm9keSA9IFJlYWQtQm9keSAkUmVxDQogICAgICAgICAgICAgICAgaWYgKCRudWxs -IC1lcSAkQm9keSkgeyBTZW5kLUVycm9yICRSZXMgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29u -dGludWUgfQ0KICAgICAgICAgICAgICAgICREYXRlbiA9IFtvYmplY3RbXV1AKCRCb2R5IHwgQ29u -dmVydEZyb20tSnNvbikgICMgQXJyYXktRXJoYWx0IHVudGVyIFBTIDUuMSBhdWNoIGJlaSAxIEVs -ZW1lbnQNCiAgICAgICAgICAgICAgICAkQWRtaW4gPSBSZWFkLUpzb25GaWxlICdhZG1pbi5qc29u -Jw0KICAgICAgICAgICAgICAgIGlmICgkQWRtaW4uUFNPYmplY3QuUHJvcGVydGllc1snc3RhbmRv -cnRlJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgJEFkbWluLnN0YW5kb3J0ZSA9ICREYXRlbg0K -ICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICRBZG1pbiB8IEFk -ZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1lICdzdGFuZG9ydGUnIC1WYWx1 -ZSAkRGF0ZW4NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgV3JpdGUtSnNvbkZp -bGUgJ2FkbWluLmpzb24nICRBZG1pbg0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcg -J3N0YW5kb3J0ZS5nZWFlbmRlcnQnIEB7fQ0KICAgICAgICAgICAgICAgICRVc2VybmFtZSA9ICRl -bnY6VVNFUk5BTUUNCiAgICAgICAgICAgICAgICAkUm9sbGUgPSBHZXQtVXNlclJvbGxlDQogICAg -ICAgICAgICAgICAgQWRkLUNoYW5nZUxvZ0VudHJ5ICdzdGFuZG9ydGUnICRudWxsICRudWxsICRu -dWxsICRVc2VybmFtZSAkUm9sbGUgQHt9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uICRSZXMg -QHsgc3RhdHVzID0gJ2dlc3BlaWNoZXJ0JyB9OyBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQog -ICAgICAgICAgICAjID09PT09PT09PT09PT09PT09PT09PSBFSU5TVEVMTFVOR0VOID09PT09PT09 -PT09PT09PT09PT09PQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9hZG1pbi9laW5z -dGVsbHVuZ2VuJyAtYW5kICRNZXRob2QgLWVxICdQVVQnKSB7DQogICAgICAgICAgICAgICAgaWYg -KC1ub3QgKFRlc3QtSXN0QWRtaW4pKSB7IFNlbmQtRXJyb3IgJFJlcyAnS2VpbmUgQmVyZWNodGln -dW5nJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkQm9keSA9IFJlYWQtQm9keSAk -UmVxDQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkQm9keSkgeyBTZW5kLUVycm9yICRS -ZXMgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRE -YXRlbiA9ICRCb2R5IHwgQ29udmVydEZyb20tSnNvbg0KICAgICAgICAgICAgICAgICRBZG1pbiA9 -IFJlYWQtSnNvbkZpbGUgJ2FkbWluLmpzb24nDQogICAgICAgICAgICAgICAgIyBXaGl0ZWxpc3Qg -YW5hbG9nIHp1IHNlcnZlci5weToyNzYxIC0gSGVhZGVyLUtvbmZpZyArIGFsbGUNCiAgICAgICAg -ICAgICAgICAjIFRvcC1MZXZlbC1CcmFuZGluZy9FaW5zdGVsbHVuZ2VuLUZlbGRlci4NCiAgICAg -ICAgICAgICAgICBmb3JlYWNoICgkS2V5IGluIEAoJ2phaHInLCdpbmFrdGl2aXRhZXRNaW51dGVu -JywnaW5mb3RleHQnLCdzdXBwb3J0aW5mbycsJ3NjaGxpZXNzaW5mbycsDQogICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAncGxhbnVuZ3NOYW1lJywncGxhbnVuZ3NLdXJ6JywNCiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdlcmlubmVydW5nJywnY3VzdG9tTG9n -bycsJ2N1c3RvbUxvZ29Ib2VoZScsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAndmVyYmluZGxpY2hrZWl0c2ZlbnN0ZXInLCdhbGxnZW1laW5lSGlsZmUnLCdiZWRpZW51bmdz -SGlud2Vpc2UnLCd3b2NoZW5wbGFuS29wZicsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAnaGVhZGVyS29uZmlnJywnaGVhZGVyTGFiZWxzJywnY291bnRlcktvbmZpZycsJ21h -cmtlcktvbmZpZycsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndm9yZ2Fi -ZUFsc1BpbGxlJywnbWVkaWVuS2F0ZWdvcmllbicpKSB7DQogICAgICAgICAgICAgICAgICAgIGlm -ICgkRGF0ZW4uUFNPYmplY3QuUHJvcGVydGllc1skS2V5XSkgew0KICAgICAgICAgICAgICAgICAg -ICAgICAgaWYgKCRBZG1pbi5QU09iamVjdC5Qcm9wZXJ0aWVzWyRLZXldKSB7DQogICAgICAgICAg -ICAgICAgICAgICAgICAgICAgJEFkbWluLiRLZXkgPSAkRGF0ZW4uJEtleQ0KICAgICAgICAgICAg -ICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQWRtaW4g -fCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAtTmFtZSAkS2V5IC1WYWx1ZSAk -RGF0ZW4uJEtleQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAg -ICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIFdyaXRlLUpzb25GaWxlICdh -ZG1pbi5qc29uJyAkQWRtaW4NCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdlaW5z -dGVsbHVuZ2VuLmdlYWVuZGVydCcgQHt9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uICRSZXMg -QHsgc3RhdHVzID0gJ2dlc3BlaWNoZXJ0JyB9OyBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQog -ICAgICAgICAgICAjID09PT09PT09PT09PT09PT09PT09PSBQTEFOVU5HID09PT09PT09PT09PT09 -PT09PT09PQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9wbGFudW5nJyAtYW5kICRN -ZXRob2QgLWVxICdHRVQnKSB7DQogICAgICAgICAgICAgICAgJFBsYW51bmcgPSBSZWFkLUpzb25G -aWxlICdwbGFudW5nLmpzb24nDQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkUGxhbnVu -ZykgeyBTZW5kLUVycm9yICRSZXMgJ3BsYW51bmcuanNvbiBuaWNodCBnZWZ1bmRlbicgNDA0IH0g -ZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICMgSW50ZWdyaXRhZXRzLUNoZWNrIE5JQ0hUIGhp -ZXIgaW5saW5lIC0tIGRlciBGcm9udGVuZC1zeW5jLWNsaWVudA0KICAgICAgICAgICAgICAgICAg -ICAjIHBvbGx0IC9hcGkvaW50ZWdyaXRhZXQvc3RhdHVzIHNlcGFyYXQuIElubGluZS1DaGVjayB2 -ZXJkb3BwZWx0DQogICAgICAgICAgICAgICAgICAgICMgYmVpIGplZGVtIFBhZ2UtTG9hZCBkYXMg -UmVhZCtJdGVyYXRlLVZvbHVtZW4sIHdhcyBhdWYgU01CLQ0KICAgICAgICAgICAgICAgICAgICAj -IFNoYXJlIChROikgbWVya2xpY2ggYmxvY2tpZXJ0IHVuZCBpbSBXb3JzdC1DYXNlIGRlbg0KICAg -ICAgICAgICAgICAgICAgICAjIE91dHB1dFN0cmVhbS1Xcml0ZSB0aW1lb3V0ZXQgKEhUVFAuU1lT -IC8gQnJvd3Nlci1BYm9ydCkuDQogICAgICAgICAgICAgICAgICAgIFNlbmQtSnNvbiAkUmVzICRQ -bGFudW5nDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAg -ICAgICAgICB9DQoNCiAgICAgICAgICAgICMgPT09PT09PT09PT09PT09PT09PT09IElOVEVHUklU -QUVUIChQaGFzZSBHKSA9PT09PT09PT09PT09PT09PT09PT0NCiAgICAgICAgICAgIGlmICgkUGF0 -aCAtZXEgJy9hcGkvaW50ZWdyaXRhZXQvc3RhdHVzJyAtYW5kICRNZXRob2QgLWVxICdHRVQnKSB7 -DQogICAgICAgICAgICAgICAgJGVyZyA9ICRudWxsDQogICAgICAgICAgICAgICAgdHJ5IHsgJGVy -ZyA9IEludm9rZS1JbnRlZ3JpdGFldFBydWVmdW5nICRmYWxzZSB9IGNhdGNoIHsgJGVyZyA9IEB7 -IG9rID0gJGZhbHNlOyBmZWhsZXIgPSAiJF8iOyB2ZXJsZXR6dW5nZW4gPSBAKCkgfSB9DQogICAg -ICAgICAgICAgICAgU2VuZC1Kc29uICRSZXMgJGVyZw0KICAgICAgICAgICAgICAgIGNvbnRpbnVl -DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2ludGVncml0 -YWV0L25ldS1zaWduaWVyZW4nIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAg -ICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0U3VwZXJVc2VyKSkgeyBTZW5kLUVycm9yICRSZXMgJ051 -ciBTdXBlclVzZXIgZGFyZiBuZXUgc2lnbmllcmVuJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAg -ICAgICAgICAjIFZlcmlmeSBpc3QgUkVBRC1PTkxZIHVuZCBsYWV1ZnQgVk9SIGRlbSBMb2NrLCBk -YW1pdCBkZXIgTG9jaw0KICAgICAgICAgICAgICAgICMgc28ga3VyeiB3aWUgbW9lZ2xpY2ggZ2Vo -YWx0ZW4gd2lyZC4gUmVzdWx0YXQgYWxzDQogICAgICAgICAgICAgICAgIyB2ZXJsZXR6dW5nZW5a -dXZvciBpbiBSZXNwb25zZSDigJQgRnJvbnRlbmQgemVpZ3QgZGFzIGltIFRvYXN0DQogICAgICAg -ICAgICAgICAgIyAoc3luYy1jbGllbnQuanM6MjUyICJJbnRlZ3JpdGFldCBuZXUgc2lnbmllcnQg -KE4gVmVybGV0enVuZ2VuDQogICAgICAgICAgICAgICAgIyBhdWZnZWxvZXN0KSIpLiBNaXJyb3Ig -enUgc2VydmVyLnB5OjIyNjMtMjI4NS4NCiAgICAgICAgICAgICAgICAkUGxhbnVuZ1ByZSA9IFJl -YWQtSnNvbkZpbGUgJ3BsYW51bmcuanNvbicNCiAgICAgICAgICAgICAgICAkVmVybGV0enVuZ2Vu -WnV2b3IgPSBAKCkNCiAgICAgICAgICAgICAgICBpZiAoJG51bGwgLW5lICRQbGFudW5nUHJlKSB7 -DQogICAgICAgICAgICAgICAgICAgIHRyeSB7ICRWZXJsZXR6dW5nZW5adXZvciA9IFZlcmlmeS1Q -bGFudW5nSW50ZWdyaXRhZXQgJFBsYW51bmdQcmUgfSBjYXRjaCB7ICRWZXJsZXR6dW5nZW5adXZv -ciA9IEAoKSB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRTdGFydFRzID0g -R2V0LURhdGUNCiAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICBJbnZv -a2UtV2l0aEZpbGVMb2NrICdwbGFudW5nLmpzb24nIHsNCiAgICAgICAgICAgICAgICAgICAgICAg -ICRQID0gUmVhZC1Kc29uRmlsZSAncGxhbnVuZy5qc29uJw0KICAgICAgICAgICAgICAgICAgICAg -ICAgaWYgKCRudWxsIC1uZSAkUCkgeyBXcml0ZS1QbGFudW5nTWl0SW50ZWdyaXRhZXQgJFAgfQ0K -ICAgICAgICAgICAgICAgICAgICB9IDYwMDAwIHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICB9 -IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgV3JpdGUtU3RhcnR1cExvZyAiRkVITEVSIG5l -dS1zaWduaWVyZW46ICRfICgkKCRfLlNjcmlwdFN0YWNrVHJhY2UpKSINCiAgICAgICAgICAgICAg -ICAgICAgU2VuZC1FcnJvciAkUmVzICJOZXUtU2lnbmllcmVuIGZlaGxnZXNjaGxhZ2VuOiAkXyIg -NTAzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkRGF1ZXJN -cyA9IFtpbnRdKChHZXQtRGF0ZSkgLSAkU3RhcnRUcykuVG90YWxNaWxsaXNlY29uZHMNCiAgICAg -ICAgICAgICAgICAkc2NyaXB0OkludGVncml0eVZlcmlmeUNhY2hlID0gJG51bGwNCiAgICAgICAg -ICAgICAgICAkVnpDb3VudCA9IEAoJFZlcmxldHp1bmdlblp1dm9yKS5Db3VudA0KICAgICAgICAg -ICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ2ludGVncml0YWV0Lm5ldV9zaWduaWVydCcgQHsgcm9s -bGUgPSAoR2V0LVVzZXJSb2xsZSk7IGRhdWVyTXMgPSAkRGF1ZXJNczsgdmVybGV0enVuZ2VuWnV2 -b3IgPSAkVnpDb3VudCB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uICRSZXMgQHsgb2sgPSAk -dHJ1ZTsgZGF1ZXJNcyA9ICREYXVlck1zOyB2ZXJsZXR6dW5nZW5adXZvciA9ICRWekNvdW50IH0N -CiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAj -ID09PT09PT09PT09PT09PT09PT09PSBaRUxMLUxPQ0sgKFBoYXNlIEExKSA9PT09PT09PT09PT09 -PT09PT09PT0NCiAgICAgICAgICAgICMgUE9TVCAvYXBpL2xvY2svemVsbGUgIHsgZGF0dW0sIHBl -cnNvbklkIH0gLT4geyBvaywgdG9rZW4sIGV4cGlyZXNBdCB9IG9kZXIgNDIzIHsgc3BlcnJlciwg -c2VpdCwgcm9sbGUgfQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9sb2NrL3plbGxl -JyAtYW5kICRNZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAgICAgICAgICRCb2R5ID0gUmVh -ZC1Cb2R5ICRSZXENCiAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRCb2R5KSB7IFNlbmQt -RXJyb3IgJFJlcyAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAg -ICAgICAgJEEgPSAkQm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAgICAgICAgICAgICAkRGF0 -dW0gPSBbc3RyaW5nXSRBLmRhdHVtDQogICAgICAgICAgICAgICAgJFBlcnNvbklkID0gW3N0cmlu -Z10kQS5wZXJzb25JZA0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUxvY2tTYWZlRGF0 -dW0gJERhdHVtKSAtb3IgLW5vdCAoVGVzdC1Mb2NrU2FmZUlkICRQZXJzb25JZCkpIHsNCiAgICAg -ICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzICdVbmd1ZWx0aWdlIGRhdHVtL3BlcnNvbklk -JyA0MDA7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRVc2Vy -bmFtZSA9ICRlbnY6VVNFUk5BTUUNCiAgICAgICAgICAgICAgICAkUm9sbGUgPSBHZXQtVXNlclJv -bGxlDQogICAgICAgICAgICAgICAgJFJlc3VsdCA9IEFjcXVpcmUtQ2VsbExvY2sgJERhdHVtICRQ -ZXJzb25JZCAkVXNlcm5hbWUgJFJvbGxlICRmYWxzZQ0KICAgICAgICAgICAgICAgIGlmICgtbm90 -ICRSZXN1bHQub2spIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1Kc29uICRSZXMgQHsNCiAg -ICAgICAgICAgICAgICAgICAgICAgIGZlaGxlciAgID0gJ2dlc3BlcnJ0Jw0KICAgICAgICAgICAg -ICAgICAgICAgICAgbWVsZHVuZyAgPSAiV2lyZCBiZWFyYmVpdGV0IHZvbiAkKCRSZXN1bHQuZXhp -c3RpbmcudXNlcm5hbWUpIg0KICAgICAgICAgICAgICAgICAgICAgICAgc3BlcnJlciAgPSAkUmVz -dWx0LmV4aXN0aW5nLnVzZXJuYW1lDQogICAgICAgICAgICAgICAgICAgICAgICByb2xsZSAgICA9 -ICRSZXN1bHQuZXhpc3Rpbmcucm9sbGUNCiAgICAgICAgICAgICAgICAgICAgICAgIHNlaXQgICAg -ID0gJFJlc3VsdC5leGlzdGluZy5sb2NrZWRBdA0KICAgICAgICAgICAgICAgICAgICAgICAga2Fu -bkZvcmNlID0gKFRlc3QtRGFyZlVlYmVyc2NocmVpYmVuICRSb2xsZSkNCiAgICAgICAgICAgICAg -ICAgICAgfSA0MjMNCiAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAg -ICB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uICRSZXMgQHsNCiAgICAgICAgICAgICAgICAg -ICAgb2sgICAgICAgPSAkdHJ1ZQ0KICAgICAgICAgICAgICAgICAgICB0b2tlbiAgICA9ICRSZXN1 -bHQubG9jay50b2tlbg0KICAgICAgICAgICAgICAgICAgICBkYXR1bSAgICA9ICREYXR1bQ0KICAg -ICAgICAgICAgICAgICAgICBwZXJzb25JZCA9ICRQZXJzb25JZA0KICAgICAgICAgICAgICAgICAg -ICByb2xsZSAgICA9ICRSb2xsZQ0KICAgICAgICAgICAgICAgICAgICBsb2NrZWRBdCA9ICRSZXN1 -bHQubG9jay5sb2NrZWRBdA0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBjb250 -aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjIFBPU1QgL2FwaS9sb2NrL3plbGxl -L2ZvcmNlICB7IGRhdHVtLCBwZXJzb25JZCB9IC0+IHVlYmVyc2NocmVpYnQgZnJlbWRlbiBMb2Nr -DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2xvY2svemVsbGUvZm9yY2UnIC1hbmQg -JE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAgICAgJEJvZHkgPSBSZWFkLUJvZHkg -JFJlcQ0KICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJEJvZHkpIHsgU2VuZC1FcnJvciAk -UmVzICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAk -QSA9ICRCb2R5IHwgQ29udmVydEZyb20tSnNvbg0KICAgICAgICAgICAgICAgICREYXR1bSA9IFtz -dHJpbmddJEEuZGF0dW0NCiAgICAgICAgICAgICAgICAkUGVyc29uSWQgPSBbc3RyaW5nXSRBLnBl -cnNvbklkDQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtTG9ja1NhZmVEYXR1bSAkRGF0 -dW0pIC1vciAtbm90IChUZXN0LUxvY2tTYWZlSWQgJFBlcnNvbklkKSkgew0KICAgICAgICAgICAg -ICAgICAgICBTZW5kLUVycm9yICRSZXMgJ1VuZ3VlbHRpZ2UgZGF0dW0vcGVyc29uSWQnIDQwMDsg -Y29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJFVzZXJuYW1lID0g -JGVudjpVU0VSTkFNRQ0KICAgICAgICAgICAgICAgICRSb2xsZSA9IEdldC1Vc2VyUm9sbGUNCiAg -ICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1EYXJmVWViZXJzY2hyZWliZW4gJFJvbGxlKSkg -ew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXMgJ0ZvcmNlLUxvY2sgbnVyIGZ1 -ZXIgRmFjaGF1ZnNpY2h0L1N1cGVyVXNlcicgNDAzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAg -IH0NCiAgICAgICAgICAgICAgICAjIE9yaWdpbmFsLU93bmVyIHZvciBGb3JjZSBsZXNlbiAtLSBm -dWVyIEF1ZGl0LVRyYWlsIGltIExvZ2J1Y2guDQogICAgICAgICAgICAgICAgJEV4aXN0aW5nTG9j -a0Z1ZXJMb2cgPSBSZWFkLUNlbGxMb2NrICREYXR1bSAkUGVyc29uSWQNCiAgICAgICAgICAgICAg -ICAkT3JpZ2luYWxPd25lciA9IGlmICgkbnVsbCAtbmUgJEV4aXN0aW5nTG9ja0Z1ZXJMb2cpIHsg -JEV4aXN0aW5nTG9ja0Z1ZXJMb2cudXNlcm5hbWUgfSBlbHNlIHsgJG51bGwgfQ0KICAgICAgICAg -ICAgICAgICRSZXN1bHQgPSBBY3F1aXJlLUNlbGxMb2NrICREYXR1bSAkUGVyc29uSWQgJFVzZXJu -YW1lICRSb2xsZSAkdHJ1ZQ0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ2xvY2su -Zm9yY2UnIEB7DQogICAgICAgICAgICAgICAgICAgIGRhdHVtICAgICAgICAgPSAkRGF0dW0NCiAg -ICAgICAgICAgICAgICAgICAgcGVyc29uSWQgICAgICA9ICRQZXJzb25JZA0KICAgICAgICAgICAg -ICAgICAgICByb2xsZSAgICAgICAgID0gJFJvbGxlDQogICAgICAgICAgICAgICAgICAgIG9yaWdp -bmFsT3duZXIgPSAkT3JpZ2luYWxPd25lcg0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg -ICAgICBTZW5kLUpzb24gJFJlcyBAew0KICAgICAgICAgICAgICAgICAgICBvayAgICAgICA9ICR0 -cnVlDQogICAgICAgICAgICAgICAgICAgIHRva2VuICAgID0gJFJlc3VsdC5sb2NrLnRva2VuDQog -ICAgICAgICAgICAgICAgICAgIGRhdHVtICAgID0gJERhdHVtDQogICAgICAgICAgICAgICAgICAg -IHBlcnNvbklkID0gJFBlcnNvbklkDQogICAgICAgICAgICAgICAgICAgIHJvbGxlICAgID0gJFJv -bGxlDQogICAgICAgICAgICAgICAgICAgIGxvY2tlZEF0ID0gJFJlc3VsdC5sb2NrLmxvY2tlZEF0 -DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAg -ICB9DQoNCiAgICAgICAgICAgICMgUE9TVCAvYXBpL2xvY2svemVsbGUvaGVhcnRiZWF0ICB7IHRv -a2VuIH0gLT4gYWt0dWFsaXNpZXJ0IGxhc3RCZWF0DQogICAgICAgICAgICBpZiAoJFBhdGggLWVx -ICcvYXBpL2xvY2svemVsbGUvaGVhcnRiZWF0JyAtYW5kICRNZXRob2QgLWVxICdQT1NUJykgew0K -ICAgICAgICAgICAgICAgICRCb2R5ID0gUmVhZC1Cb2R5ICRSZXENCiAgICAgICAgICAgICAgICBp -ZiAoJG51bGwgLWVxICRCb2R5KSB7IFNlbmQtRXJyb3IgJFJlcyAnQW5mcmFnZSB6dSBncm9zcycg -NDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJEEgPSAkQm9keSB8IENvbnZlcnRGcm9t -LUpzb24NCiAgICAgICAgICAgICAgICAkVG9rZW4gPSBpZiAoJEEuUFNPYmplY3QuUHJvcGVydGll -c1sndG9rZW4nXSkgeyBbc3RyaW5nXSRBLnRva2VuIH0gZWxzZSB7ICcnIH0NCiAgICAgICAgICAg -ICAgICBpZiAoW3N0cmluZ106OklzTnVsbE9yV2hpdGVTcGFjZSgkVG9rZW4pKSB7IFNlbmQtRXJy -b3IgJFJlcyAnVG9rZW4gZmVobHQnIDQwMDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRS -ZXN1bHQgPSBSZWZyZXNoLUNlbGxMb2NrICRUb2tlbg0KICAgICAgICAgICAgICAgIGlmICgtbm90 -ICRSZXN1bHQub2spIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1Kc29uICRSZXMgQHsgZmVo -bGVyID0gJ3VuYmVrYW5udGVyX2xvY2snOyBtZWxkdW5nID0gJ0xvY2sgZXhpc3RpZXJ0IG5pY2h0 -IChtZWhyKS4nIH0gNDA0DQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAg -ICAgICAgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbiAkUmVzIEB7IG9rID0gJHRydWU7IGxh -c3RCZWF0ID0gJFJlc3VsdC5sb2NrLmxhc3RCZWF0IH0NCiAgICAgICAgICAgICAgICBjb250aW51 -ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjIERFTEVURSAvYXBpL2xvY2svemVsbGUg -IHsgdG9rZW4gfSAtPiBMb2NrIGZyZWlnZWJlbg0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAn -L2FwaS9sb2NrL3plbGxlJyAtYW5kICRNZXRob2QgLWVxICdERUxFVEUnKSB7DQogICAgICAgICAg -ICAgICAgIyBERUxFVEUtQm9keSBsZXNlbiAoSHR0cExpc3RlbmVyIHVudGVyc3R1ZXR6dCBkYXMp +KSAgIyBBcnJheS1FcmhhbHQgdW50ZXIgUFMgNS4xIGF1Y2ggYmVpIDEgRWxlbWVudA0KICAgICAg +ICAgICAgICAgICRBZG1pbiA9IFJlYWQtSnNvbkZpbGUgJ2FkbWluLmpzb24nDQogICAgICAgICAg +ICAgICAgJEFkbWluLmZlaWVydGFnZSA9ICREYXRlbg0KICAgICAgICAgICAgICAgIFdyaXRlLUpz +b25GaWxlICdhZG1pbi5qc29uJyAkQWRtaW4NCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50 +cmFnICdmZWllcnRhZ2UuZ2VhZW5kZXJ0JyBAe30NCiAgICAgICAgICAgICAgICBTZW5kLUpzb24g +JFJlcyBAeyBzdGF0dXMgPSAnZ2VzcGVpY2hlcnQnIH07IGNvbnRpbnVlDQogICAgICAgICAgICB9 +DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2FkbWluL2ZlcmllbicgLWFuZCAkTWV0 +aG9kIC1lcSAnUFVUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUlzdEFkbWlu +KSkgeyBTZW5kLUVycm9yICRSZXMgJ0tlaW5lIEJlcmVjaHRpZ3VuZycgNDAzOyBjb250aW51ZSB9 DQogICAgICAgICAgICAgICAgJEJvZHkgPSBSZWFkLUJvZHkgJFJlcQ0KICAgICAgICAgICAgICAg -ICRUb2tlbiA9ICRudWxsDQogICAgICAgICAgICAgICAgaWYgKCRCb2R5KSB7DQogICAgICAgICAg -ICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkQSA9ICRCb2R5IHwgQ29u -dmVydEZyb20tSnNvbg0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRBLlBTT2JqZWN0LlBy -b3BlcnRpZXNbJ3Rva2VuJ10pIHsgJFRva2VuID0gW3N0cmluZ10kQS50b2tlbiB9DQogICAgICAg -ICAgICAgICAgICAgIH0gY2F0Y2gge30NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg -ICAgIyBBdWNoIFF1ZXJ5LVN0cmluZyB1bnRlcnN0dWV0emVuLCBmdWVyIHNlbmRCZWFjb24tRmFl -bGxlDQogICAgICAgICAgICAgICAgaWYgKFtzdHJpbmddOjpJc051bGxPcldoaXRlU3BhY2UoJFRv -a2VuKSAtYW5kICRSZXEuVXJsLlF1ZXJ5KSB7DQogICAgICAgICAgICAgICAgICAgICRRID0gW1N5 -c3RlbS5XZWIuSHR0cFV0aWxpdHldOjpQYXJzZVF1ZXJ5U3RyaW5nKCRSZXEuVXJsLlF1ZXJ5KQ0K -ICAgICAgICAgICAgICAgICAgICAkVG9rZW4gPSBbc3RyaW5nXSRRWyd0b2tlbiddDQogICAgICAg -ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmIChbc3RyaW5nXTo6SXNOdWxsT3JXaGl0ZVNw -YWNlKCRUb2tlbikpIHsgU2VuZC1FcnJvciAkUmVzICdUb2tlbiBmZWhsdCcgNDAwOyBjb250aW51 -ZSB9DQogICAgICAgICAgICAgICAgJFJlc3VsdCA9IFJlbGVhc2UtQ2VsbExvY2sgJFRva2VuDQog -ICAgICAgICAgICAgICAgU2VuZC1Kc29uICRSZXMgQHsgb2sgPSAkUmVzdWx0Lm9rIH0NCiAgICAg -ICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjIEdFVCAv -YXBpL2xvY2svemVsbGVuIC0+IExpc3RlIGFsbGVyIGFrdGl2ZW4gTG9ja3MgKGZ1ZXIgTGl2ZS1J -bmRpY2F0b3ItUmVuZGVyKQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9sb2NrL3pl -bGxlbicgLWFuZCAkTWV0aG9kIC1lcSAnR0VUJykgew0KICAgICAgICAgICAgICAgICRMb2NrcyA9 -IEdldC1BbGxBY3RpdmVDZWxsTG9ja3MNCiAgICAgICAgICAgICAgICBTZW5kLUpzb24gJFJlcyBA -eyBsb2NrcyA9ICRMb2NrcyB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAg -IH0NCg0KICAgICAgICAgICAgIyBHRVQgL2FwaS9wbGFudW5nL2NoYW5nZXM/c2VpdD08aXNvLXRz -PiAtPiBEZWx0YS1MaXN0ZSBmdWVyIExpdmUtU3luYyAoUGhhc2UgQTQpDQogICAgICAgICAgICBp -ZiAoJFBhdGggLWVxICcvYXBpL3BsYW51bmcvY2hhbmdlcycgLWFuZCAkTWV0aG9kIC1lcSAnR0VU -Jykgew0KICAgICAgICAgICAgICAgICRRID0gW1N5c3RlbS5XZWIuSHR0cFV0aWxpdHldOjpQYXJz -ZVF1ZXJ5U3RyaW5nKCRSZXEuVXJsLlF1ZXJ5KQ0KICAgICAgICAgICAgICAgICRTZWl0ID0gW3N0 -cmluZ10kUVsnc2VpdCddDQogICAgICAgICAgICAgICAgJENoYW5nZXMgPSBHZXQtQ2hhbmdlc1Np -bmNlICRTZWl0DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uICRSZXMgQHsNCiAgICAgICAgICAg -ICAgICAgICAgc2VydmVyVHMgPSAoR2V0LURhdGUpLlRvVW5pdmVyc2FsVGltZSgpLlRvU3RyaW5n -KCdvJykNCiAgICAgICAgICAgICAgICAgICAgY2hhbmdlcyAgPSAkQ2hhbmdlcw0KICAgICAgICAg -ICAgICAgIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAg -ICAgICAgICAjIFplbGxlIGFlbmRlcm4NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkv -cGxhbnVuZy96ZWxsZScgLWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAg -ICAkQm9keSA9IFJlYWQtQm9keSAkUmVxDQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAk -Qm9keSkgeyBTZW5kLUVycm9yICRSZXMgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUg -fQ0KICAgICAgICAgICAgICAgICRBID0gJEJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAg -ICAgICAgICAgJERhdHVtID0gW3N0cmluZ10kQS5kYXR1bQ0KICAgICAgICAgICAgICAgICRQZXJz -b25JZCA9IFtzdHJpbmddJEEucGVyc29uSWQNCiAgICAgICAgICAgICAgICAkV2VydCA9IGlmICgk -QS53ZXJ0KSB7IFtzdHJpbmddJEEud2VydCB9IGVsc2UgeyAnJyB9DQogICAgICAgICAgICAgICAg -JEhhdFBmbGljaHQgPSAkQS5QU09iamVjdC5Qcm9wZXJ0aWVzWydwZmxpY2h0J10NCiAgICAgICAg -ICAgICAgICAkUGZsaWNodE5ldSA9IGlmICgkSGF0UGZsaWNodCkgeyBbYm9vbF0kQS5wZmxpY2h0 -IH0gZWxzZSB7ICRmYWxzZSB9DQogICAgICAgICAgICAgICAgJEhhdEVyd2FydGV0ID0gJEEuUFNP -YmplY3QuUHJvcGVydGllc1snZXJ3YXJ0ZXRlckFsdGVyV2VydCddDQogICAgICAgICAgICAgICAg -JEVyd2FydGV0ID0gaWYgKCRIYXRFcndhcnRldCkgeyBbc3RyaW5nXSRBLmVyd2FydGV0ZXJBbHRl -cldlcnQgfSBlbHNlIHsgJG51bGwgfQ0KICAgICAgICAgICAgICAgICRMb2NrVG9rZW4gPSBpZiAo -JEEuUFNPYmplY3QuUHJvcGVydGllc1snbG9ja1Rva2VuJ10pIHsgW3N0cmluZ10kQS5sb2NrVG9r -ZW4gfSBlbHNlIHsgJG51bGwgfQ0KICAgICAgICAgICAgICAgICRVc2VybmFtZSA9ICRlbnY6VVNF -Uk5BTUUNCiAgICAgICAgICAgICAgICAkUm9sbGUgPSBHZXQtVXNlclJvbGxlDQogICAgICAgICAg -ICAgICAgJERhcmZVZWJlcnNjaHJlaWJlbiA9IFRlc3QtRGFyZlVlYmVyc2NocmVpYmVuICRSb2xs -ZQ0KDQogICAgICAgICAgICAgICAgJEFkbWluRnVlclZGID0gUmVhZC1Kc29uRmlsZSAnYWRtaW4u -anNvbicNCg0KICAgICAgICAgICAgICAgICMgV2hpdGVsaXN0IGdlZ2VuIGFkbWluLnNjaGljaHRj -b2RlcyAtLSB2ZXJoaW5kZXJ0IE9ycGhhbi1Db2RlcyB3aWUNCiAgICAgICAgICAgICAgICAjIGRp -ZSAnZGZyVScvJ2Rmci9VJy8nYWJnJy1WYXJpYW50cywgZGllIGhpc3RvcmlzY2ggZHVyY2ggVGlw -cGZlaGxlcg0KICAgICAgICAgICAgICAgICMgaW4gZGllIERhdGVuIGdlbGFuZ3Qgd2FyZW4gKE1p -Z3JhdGlvbiBpbiBBdWRpdC1QaGFzZS0yKS4gTWlycm9yDQogICAgICAgICAgICAgICAgIyB6dSBz -ZXJ2ZXIucHk6Mjk0NC0yOTUyLg0KICAgICAgICAgICAgICAgICRWYWxpZENvZGVzID0gTmV3LU9i -amVjdCBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5IYXNoU2V0W3N0cmluZ10NCiAgICAgICAg -ICAgICAgICBbdm9pZF0kVmFsaWRDb2Rlcy5BZGQoJycpDQogICAgICAgICAgICAgICAgaWYgKCRu -dWxsIC1uZSAkQWRtaW5GdWVyVkYgLWFuZCAkQWRtaW5GdWVyVkYuUFNPYmplY3QuUHJvcGVydGll -c1snc2NoaWNodGNvZGVzJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJFNjIGlu -ICRBZG1pbkZ1ZXJWRi5zY2hpY2h0Y29kZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlm -ICgkbnVsbCAtbmUgJFNjIC1hbmQgJFNjLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2NvZGUnXSkgew0K -ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2b2lkXSRWYWxpZENvZGVzLkFkZChbc3RyaW5n -XSRTYy5jb2RlKQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAg -ICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRWYWxpZENv -ZGVzLkNvbnRhaW5zKCRXZXJ0KSkgew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRS -ZXMgIlVuYmVrYW5udGVyIFNjaGljaHRjb2RlOiAnJFdlcnQnIiA0MDANCiAgICAgICAgICAgICAg -ICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAjIFZl -cmJpbmRsaWNoa2VpdHNmZW5zdGVyIChELjEpOiByZWd1bGFlcmUgVXNlciBrb2VubmVuIFRhZ2Ug -ZGF2b3IgbmljaHQgZWRpdGllcmVuDQogICAgICAgICAgICAgICAgaWYgKCRSb2xsZSAtZXEgJ3Vz -ZXInKSB7DQogICAgICAgICAgICAgICAgICAgIGlmIChUZXN0LURhdHVtSW5WZXJiaW5kbGljaGtl -aXQgJERhdHVtICRBZG1pbkZ1ZXJWRikgew0KICAgICAgICAgICAgICAgICAgICAgICAgU2VuZC1K -c29uICRSZXMgQHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmZWhsZXIgICAgICAgICAg -PSAndmVyYmluZGxpY2hrZWl0c2ZlbnN0ZXInDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg -bWVsZHVuZyAgICAgICAgID0gJ0RhdHVtIGxpZWd0IGltIFZlcmJpbmRsaWNoa2VpdHNmZW5zdGVy -IC0gZnVlciByZWd1bGFlcmUgVXNlciBub2NoIGdlc3BlcnJ0LicNCiAgICAgICAgICAgICAgICAg -ICAgICAgICAgICBlcnN0ZXJGcmVpZXJUYWcgPSAoR2V0LUVyc3RlckZyZWllclRhZ0lzbyAkQWRt -aW5GdWVyVkYpDQogICAgICAgICAgICAgICAgICAgICAgICB9IDQwMw0KICAgICAgICAgICAgICAg -ICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg -IH0NCg0KICAgICAgICAgICAgICAgICMgUGVzc2ltaXN0aWMgQ2VsbC1Mb2NrIHBydWVmZW4gKFBo -YXNlIEEpDQogICAgICAgICAgICAgICAgJEV4aXN0aW5nTG9jayA9IFJlYWQtQ2VsbExvY2sgJERh -dHVtICRQZXJzb25JZA0KICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtbmUgJEV4aXN0aW5nTG9j -aykgew0KICAgICAgICAgICAgICAgICAgICAkVG9rZW5QYXNzdCA9ICgkTG9ja1Rva2VuIC1hbmQg -JEV4aXN0aW5nTG9jay50b2tlbiAtZXEgJExvY2tUb2tlbikNCiAgICAgICAgICAgICAgICAgICAg -JFNlbGJzdExvY2sgPSAoJEV4aXN0aW5nTG9jay51c2VybmFtZSAtaWVxICRVc2VybmFtZSkNCiAg -ICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJFRva2VuUGFzc3QgLWFuZCAtbm90ICRTZWxic3RM -b2NrIC1hbmQgLW5vdCAkRGFyZlVlYmVyc2NocmVpYmVuKSB7DQogICAgICAgICAgICAgICAgICAg -ICAgICBTZW5kLUpzb24gJFJlcyBAew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlaGxl -ciAgPSAnZ2VzcGVycnQnDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVsZHVuZyA9ICJE -aWVzZSBaZWxsZSB3aXJkIGdlcmFkZSB2b24gJCgkRXhpc3RpbmdMb2NrLnVzZXJuYW1lKSBiZWFy -YmVpdGV0LiINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVycmVyID0gJEV4aXN0aW5n -TG9jay51c2VybmFtZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGxlICAgPSAkRXhp -c3RpbmdMb2NrLnJvbGxlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VpdCAgICA9ICRF -eGlzdGluZ0xvY2subG9ja2VkQXQNCiAgICAgICAgICAgICAgICAgICAgICAgIH0gNDIzDQogICAg -ICAgICAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAg -ICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgJExvY2tSZXN1bHQgPSAkbnVsbA0KICAg -ICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICRMb2NrUmVzdWx0ID0gSW52 -b2tlLVdpdGhGaWxlTG9jayAncGxhbnVuZy5qc29uJyB7DQogICAgICAgICAgICAgICAgICAgICAg -ICAkUGxhbnVuZyA9IFJlYWQtSnNvbkZpbGUgJ3BsYW51bmcuanNvbicNCiAgICAgICAgICAgICAg -ICAgICAgICAgIGlmICgkbnVsbCAtZXEgJFBsYW51bmcpIHsgcmV0dXJuIEB7IHR5cCA9ICdlcnJv -cic7IGNvZGUgPSA0MDQ7IG1zZyA9ICdwbGFudW5nLmpzb24gbmljaHQgZ2VmdW5kZW4nIH0gfQ0K -DQogICAgICAgICAgICAgICAgICAgICAgICAkQWx0ZXJXZXJ0ID0gJycNCiAgICAgICAgICAgICAg -ICAgICAgICAgIGlmICgtbm90ICRQbGFudW5nLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2VpbnRyYWVn -ZSddKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51bmcgfCBBZGQtTWVtYmVy -IC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAtTmFtZSAnZWludHJhZWdlJyAtVmFsdWUgKE5ldy1P -YmplY3QgUFNPYmplY3QpDQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg -ICAgICAgICAgICBpZiAoLW5vdCAkUGxhbnVuZy5laW50cmFlZ2UuUFNPYmplY3QuUHJvcGVydGll -c1skRGF0dW1dKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51bmcuZWludHJh -ZWdlIHwgQWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgJERhdHVtIC1W -YWx1ZSAoTmV3LU9iamVjdCBQU09iamVjdCkNCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz -ZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRQbGFudW5nLmVpbnRyYWVnZS4k -RGF0dW0uUFNPYmplY3QuUHJvcGVydGllc1skUGVyc29uSWRdKSB7DQogICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICRBbHRlcldlcnQgPSBbc3RyaW5nXSRQbGFudW5nLmVpbnRyYWVnZS4k -RGF0dW0uJFBlcnNvbklkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAg -ICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICAjIE9wdGltaXN0aWMt -Q29uY3VycmVuY3kNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkSGF0RXJ3YXJ0ZXQgLWFu -ZCAkRXJ3YXJ0ZXQgLW5lICRBbHRlcldlcnQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg -ICByZXR1cm4gQHsgdHlwID0gJ2tvbmZsaWt0JzsgYWt0dWVsbCA9ICRBbHRlcldlcnQgfQ0KICAg -ICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICAjIFBmbGlj -aHQtT3ZlcnJpZGUtQ2hlY2sgKFBoYXNlIEIpOiBiZXN0ZWhlbmRlcyBwZmxpY2h0PXRydWUgbnVy -IFNVL0ZhY2hhdWZzaWNodA0KICAgICAgICAgICAgICAgICAgICAgICAgJEFsdGVyUGZsaWNodCA9 -ICRmYWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRQbGFudW5nLlBTT2JqZWN0LlBy -b3BlcnRpZXNbJ3BmbGljaHQnXSAtYW5kICRQbGFudW5nLnBmbGljaHQuUFNPYmplY3QuUHJvcGVy -dGllc1skRGF0dW1dKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRQbGFudW5n -LnBmbGljaHQuJERhdHVtLlBTT2JqZWN0LlByb3BlcnRpZXNbJFBlcnNvbklkXSkgew0KICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAkQWx0ZXJQZmxpY2h0ID0gW2Jvb2xdJFBsYW51bmcu -cGZsaWNodC4kRGF0dW0uJFBlcnNvbklkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0K -ICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRB -bHRlclBmbGljaHQgLWFuZCAtbm90ICREYXJmVWViZXJzY2hyZWliZW4pIHsNCiAgICAgICAgICAg -ICAgICAgICAgICAgICAgICByZXR1cm4gQHsgdHlwID0gJ3BmbGljaHRnZXNwZXJydCc7IGFsdGVy -V2VydCA9ICRBbHRlcldlcnQgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAg -ICAgICAgICAgICAgICAgIyBQZmxpY2h0LU5FVS1TZXR6ZW46IG51ciBTVS9GYWNoYXVmc2ljaHQN -CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkSGF0UGZsaWNodCAtYW5kICRQZmxpY2h0TmV1 -IC1hbmQgLW5vdCAkRGFyZlVlYmVyc2NocmVpYmVuKSB7DQogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgcmV0dXJuIEB7IHR5cCA9ICdwZmxpY2h0c2V0enVuZ1ZlcmJvdGVuJyB9DQogICAgICAg -ICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChbc3RyaW5n -XTo6SXNOdWxsT3JXaGl0ZVNwYWNlKCRXZXJ0KSkgew0KICAgICAgICAgICAgICAgICAgICAgICAg -ICAgIGlmICgkUGxhbnVuZy5laW50cmFlZ2UuJERhdHVtLlBTT2JqZWN0LlByb3BlcnRpZXNbJFBl -cnNvbklkXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUGxhbnVuZy5laW50 -cmFlZ2UuJERhdHVtLlBTT2JqZWN0LlByb3BlcnRpZXMuUmVtb3ZlKCRQZXJzb25JZCkNCiAgICAg -ICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ug -ew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkUGxhbnVuZy5laW50cmFlZ2UuJERh -dHVtLlBTT2JqZWN0LlByb3BlcnRpZXNbJFBlcnNvbklkXSkgew0KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAkUGxhbnVuZy5laW50cmFlZ2UuJERhdHVtLiRQZXJzb25JZCA9ICRXZXJ0 -DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgJFBsYW51bmcuZWludHJhZWdlLiREYXR1bSB8IEFkZC1NZW1iZXIgLU1l -bWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1lICRQZXJzb25JZCAtVmFsdWUgJFdlcnQNCiAgICAg -ICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAg -ICAgICAgICAgICAgICAgICAgICAgICMgUGZsaWNodC1GbGFnIHNlcGFyYXQgdmVyd2FsdGVuDQog -ICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkUGxhbnVuZy5QU09iamVjdC5Qcm9wZXJ0 -aWVzWydwZmxpY2h0J10pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUGxhbnVuZyB8 -IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1lICdwZmxpY2h0JyAtVmFs -dWUgKE5ldy1PYmplY3QgUFNPYmplY3QpDQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAg -ICAgICAgICAgICAgICAgICAgICAkV2VydFZvcmhhbmRlbiA9IC1ub3QgW3N0cmluZ106OklzTnVs -bE9yV2hpdGVTcGFjZSgkV2VydCkNCiAgICAgICAgICAgICAgICAgICAgICAgICRTb2xsU2V0emVu -ID0gJEhhdFBmbGljaHQgLWFuZCAkUGZsaWNodE5ldSAtYW5kICRXZXJ0Vm9yaGFuZGVuDQogICAg -ICAgICAgICAgICAgICAgICAgICBpZiAoJFNvbGxTZXR6ZW4pIHsNCiAgICAgICAgICAgICAgICAg -ICAgICAgICAgICBpZiAoLW5vdCAkUGxhbnVuZy5wZmxpY2h0LlBTT2JqZWN0LlByb3BlcnRpZXNb -JERhdHVtXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUGxhbnVuZy5wZmxp -Y2h0IHwgQWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgJERhdHVtIC1W -YWx1ZSAoTmV3LU9iamVjdCBQU09iamVjdCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 -DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRQbGFudW5nLnBmbGljaHQuJERhdHVt -LlBTT2JqZWN0LlByb3BlcnRpZXNbJFBlcnNvbklkXSkgew0KICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAkUGxhbnVuZy5wZmxpY2h0LiREYXR1bS4kUGVyc29uSWQgPSAkdHJ1ZQ0KICAg -ICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICRQbGFudW5nLnBmbGljaHQuJERhdHVtIHwgQWRkLU1lbWJlciAtTWVtYmVyVHlw -ZSBOb3RlUHJvcGVydHkgLU5hbWUgJFBlcnNvbklkIC1WYWx1ZSAkdHJ1ZQ0KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZWlmICgkSGF0 -UGZsaWNodCAtb3IgLW5vdCAkV2VydFZvcmhhbmRlbikgew0KICAgICAgICAgICAgICAgICAgICAg -ICAgICAgIGlmICgkUGxhbnVuZy5wZmxpY2h0LlBTT2JqZWN0LlByb3BlcnRpZXNbJERhdHVtXSkg -ew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJFBsYW51bmcucGZsaWNodC4k -RGF0dW0uUFNPYmplY3QuUHJvcGVydGllc1skUGVyc29uSWRdKSB7DQogICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAkUGxhbnVuZy5wZmxpY2h0LiREYXR1bS5QU09iamVjdC5Qcm9w -ZXJ0aWVzLlJlbW92ZSgkUGVyc29uSWQpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -IH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEAoJFBsYW51bmcucGZsaWNo -dC4kRGF0dW0uUFNPYmplY3QuUHJvcGVydGllcykuQ291bnQgLWVxIDApIHsNCiAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5nLnBmbGljaHQuUFNPYmplY3QuUHJvcGVy -dGllcy5SZW1vdmUoJERhdHVtKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0K -DQogICAgICAgICAgICAgICAgICAgICAgICBXcml0ZS1QbGFudW5nTWl0SW50ZWdyaXRhZXQgJFBs -YW51bmcgQCgNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAeyBraW5kID0gJ2VpbnRyYWVn -ZSc7IGRhdHVtID0gJERhdHVtOyBwZXJzb25JZCA9ICRQZXJzb25JZCB9LA0KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgIEB7IGtpbmQgPSAncGZsaWNodCc7ICAgZGF0dW0gPSAkRGF0dW07IHBl -cnNvbklkID0gJFBlcnNvbklkIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICkNCiAgICAgICAg -ICAgICAgICAgICAgICAgIHJldHVybiBAeyB0eXAgPSAnb2snOyBhbHRlcldlcnQgPSAkQWx0ZXJX -ZXJ0OyBhbHRlclBmbGljaHQgPSAkQWx0ZXJQZmxpY2h0OyBwbGFudW5nID0gJFBsYW51bmcgfQ0K -ICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAgICAg -ICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlcyAiJF8iIDUwMzsgY29udGludWUNCiAgICAgICAg -ICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICBpZiAoJExvY2tSZXN1bHQudHlwIC1lcSAnZXJy -b3InKSB7IFNlbmQtRXJyb3IgJFJlcyAkTG9ja1Jlc3VsdC5tc2cgJExvY2tSZXN1bHQuY29kZTsg -Y29udGludWUgfQ0KICAgICAgICAgICAgICAgIGlmICgkTG9ja1Jlc3VsdC50eXAgLWVxICdrb25m -bGlrdCcpIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1Kc29uICRSZXMgQHsNCiAgICAgICAg -ICAgICAgICAgICAgICAgIGZlaGxlciAgICAgICAgPSAna29uZmxpa3QnDQogICAgICAgICAgICAg -ICAgICAgICAgICBtZWxkdW5nICAgICAgID0gJ0RpZXNlIFplbGxlIHd1cmRlIGluendpc2NoZW4g -Z2VhZW5kZXJ0LicNCiAgICAgICAgICAgICAgICAgICAgICAgIGFrdHVlbGxlcldlcnQgPSAkTG9j -a1Jlc3VsdC5ha3R1ZWxsDQogICAgICAgICAgICAgICAgICAgIH0gNDA5DQogICAgICAgICAgICAg -ICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgk -TG9ja1Jlc3VsdC50eXAgLWVxICdwZmxpY2h0Z2VzcGVycnQnKSB7DQogICAgICAgICAgICAgICAg -ICAgIFNlbmQtSnNvbiAkUmVzIEB7DQogICAgICAgICAgICAgICAgICAgICAgICBmZWhsZXIgICAg -ICAgID0gJ3BmbGljaHRnZXNwZXJydCcNCiAgICAgICAgICAgICAgICAgICAgICAgIG1lbGR1bmcg -ICAgICAgPSAnRGllc2UgWmVsbGUgaXN0IGFscyBQZmxpY2h0LVNldHp1bmcgbWFya2llcnQuIE51 -ciBGYWNoYXVmc2ljaHQvU3VwZXJVc2VyIGRhcmYgc2llIGFlbmRlcm4uJw0KICAgICAgICAgICAg -ICAgICAgICAgICAgYWt0dWVsbGVyV2VydCA9ICRMb2NrUmVzdWx0LmFsdGVyV2VydA0KICAgICAg -ICAgICAgICAgICAgICB9IDQwMw0KICAgICAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAg -ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoJExvY2tSZXN1bHQudHlwIC1lcSAncGZs -aWNodHNldHp1bmdWZXJib3RlbicpIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1Kc29uICRS -ZXMgQHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZlaGxlciAgPSAncGZsaWNodHNldHp1bmdW -ZXJib3RlbicNCiAgICAgICAgICAgICAgICAgICAgICAgIG1lbGR1bmcgPSAnUGZsaWNodC1TZXR6 -dW5nZW4ga29lbm5lbiBudXIgRmFjaGF1ZnNpY2h0L1N1cGVyVXNlciB2b3JuZWhtZW4uJw0KICAg -ICAgICAgICAgICAgICAgICB9IDQwMw0KICAgICAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAg -ICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICRBbHRlcldlcnQgICAgPSAkTG9ja1Jl -c3VsdC5hbHRlcldlcnQNCiAgICAgICAgICAgICAgICAkQWx0ZXJQZmxpY2h0ID0gJExvY2tSZXN1 -bHQuYWx0ZXJQZmxpY2h0DQogICAgICAgICAgICAgICAgJFBsYW51bmcgICAgICA9ICRMb2NrUmVz -dWx0LnBsYW51bmcNCiAgICAgICAgICAgICAgICAkSXN0T3ZlcnJpZGUgID0gKCRBbHRlclBmbGlj -aHQgLWFuZCAkRGFyZlVlYmVyc2NocmVpYmVuKSAtb3IgYA0KICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAoJG51bGwgLW5lICRFeGlzdGluZ0xvY2sgLWFuZCAtbm90ICgkRXhpc3RpbmdM -b2NrLnVzZXJuYW1lIC1pZXEgJFVzZXJuYW1lKSAtYW5kICREYXJmVWViZXJzY2hyZWliZW4pDQog -ICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnemVsbGUuZ2VhZW5kZXJ0JyBAew0KICAg -ICAgICAgICAgICAgICAgICBkYXR1bSAgICAgPSAkRGF0dW0NCiAgICAgICAgICAgICAgICAgICAg -cGVyc29uSWQgID0gJFBlcnNvbklkDQogICAgICAgICAgICAgICAgICAgIGFsdGVyV2VydCA9ICRB -bHRlcldlcnQNCiAgICAgICAgICAgICAgICAgICAgbmV1ZXJXZXJ0ID0gJFdlcnQNCiAgICAgICAg -ICAgICAgICAgICAgcGZsaWNodCAgID0gaWYgKCRIYXRQZmxpY2h0KSB7ICRQZmxpY2h0TmV1IH0g -ZWxzZSB7ICRudWxsIH0NCiAgICAgICAgICAgICAgICAgICAgcm9sbGUgICAgID0gJFJvbGxlDQog -ICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlICA9ICRJc3RPdmVycmlkZQ0KICAgICAgICAgICAg -ICAgIH0NCiAgICAgICAgICAgICAgICBBZGQtQ2hhbmdlTG9nRW50cnkgJ3plbGxlJyAkRGF0dW0g -JFBlcnNvbklkICRXZXJ0ICRVc2VybmFtZSAkUm9sbGUgQHsNCiAgICAgICAgICAgICAgICAgICAg -YWx0ZXJXZXJ0ID0gJEFsdGVyV2VydA0KICAgICAgICAgICAgICAgICAgICBwZmxpY2h0ICAgPSBp -ZiAoJEhhdFBmbGljaHQpIHsgJFBmbGljaHROZXUgfSBlbHNlIHsgJG51bGwgfQ0KICAgICAgICAg -ICAgICAgICAgICBvdmVycmlkZSAgPSAkSXN0T3ZlcnJpZGUNCiAgICAgICAgICAgICAgICB9DQog -ICAgICAgICAgICAgICAgaWYgKCRBbHRlcldlcnQgLW5lICRXZXJ0KSB7DQogICAgICAgICAgICAg -ICAgICAgIHRyeSB7IE5vdGlmeS1BZW5kZXJ1bmcgJFBsYW51bmcgJFBlcnNvbklkICREYXR1bSAk -QWx0ZXJXZXJ0ICRXZXJ0IH0gY2F0Y2ggeyBEZWJ1Zy1Mb2cgJ01BSUwnICJGZWhsZXI6ICRfIiB9 -DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbiAkUmVzIEB7IHN0 -YXR1cyA9ICdnZXNwZWljaGVydCc7IGFsdGVyV2VydCA9ICRBbHRlcldlcnQ7IHJvbGxlID0gJFJv -bGxlOyBvdmVycmlkZSA9ICRJc3RPdmVycmlkZSB9DQogICAgICAgICAgICAgICAgY29udGludWUN -CiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyBGTEQ6IERTTS1Ub2dnbGUgKFBoYXNlIEE1 -OiBGaWxlLUxvY2sgKyBDaGFuZ2UtTG9nKQ0KICAgICAgICAgICAgIyBXYXIgaW4gc2VydmVyLnBz -MSBiaXNoZXIgZ2FyIG5pY2h0IHZvcmhhbmRlbiAtIG51ciBzZXJ2ZXIucHkgaGF0dGUgZXMuDQog -ICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3BsYW51bmcvZHNtJyAtYW5kICRNZXRob2Qg -LWVxICdQT1NUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUlzdEFkbWluKSkg -eyBTZW5kLUVycm9yICRSZXMgJ0tlaW5lIEJlcmVjaHRpZ3VuZycgNDAzOyBjb250aW51ZSB9DQog +IGlmICgkbnVsbCAtZXEgJEJvZHkpIHsgU2VuZC1FcnJvciAkUmVzICdBbmZyYWdlIHp1IGdyb3Nz +JyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkRGF0ZW4gPSBbb2JqZWN0W11dQCgk +Qm9keSB8IENvbnZlcnRGcm9tLUpzb24pICAjIEFycmF5LUVyaGFsdCB1bnRlciBQUyA1LjEgYXVj +aCBiZWkgMSBFbGVtZW50DQogICAgICAgICAgICAgICAgJEFkbWluID0gUmVhZC1Kc29uRmlsZSAn +YWRtaW4uanNvbicNCiAgICAgICAgICAgICAgICAkQWRtaW4uZmVyaWVuID0gJERhdGVuDQogICAg +ICAgICAgICAgICAgV3JpdGUtSnNvbkZpbGUgJ2FkbWluLmpzb24nICRBZG1pbg0KICAgICAgICAg +ICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ2Zlcmllbi5nZWFlbmRlcnQnIEB7fQ0KICAgICAgICAg +ICAgICAgIFNlbmQtSnNvbiAkUmVzIEB7IHN0YXR1cyA9ICdnZXNwZWljaGVydCcgfTsgY29udGlu +dWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgICMgPT09PT09PT09PT09PT09PT09PT09IEJF +U1BSRUNIVU5HU1ZPUkxBR0VOIChCLjQpID09PT09PT09PT09PT09PT09PT09PQ0KICAgICAgICAg +ICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9hZG1pbi9iZXNwcmVjaHVuZ3N2b3JsYWdlbicgLWFuZCAk +TWV0aG9kIC1lcSAnUFVUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUlzdEFk +bWluKSkgeyBTZW5kLUVycm9yICRSZXMgJ0tlaW5lIEJlcmVjaHRpZ3VuZycgNDAzOyBjb250aW51 +ZSB9DQogICAgICAgICAgICAgICAgJEJvZHkgPSBSZWFkLUJvZHkgJFJlcQ0KICAgICAgICAgICAg +ICAgIGlmICgkbnVsbCAtZXEgJEJvZHkpIHsgU2VuZC1FcnJvciAkUmVzICdBbmZyYWdlIHp1IGdy +b3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkRGF0ZW4gPSBbb2JqZWN0W11d +QCgkQm9keSB8IENvbnZlcnRGcm9tLUpzb24pDQogICAgICAgICAgICAgICAgJEFkbWluID0gUmVh +ZC1Kc29uRmlsZSAnYWRtaW4uanNvbicNCiAgICAgICAgICAgICAgICBpZiAoJEFkbWluLlBTT2Jq +ZWN0LlByb3BlcnRpZXNbJ2Jlc3ByZWNodW5nc1ZvcmxhZ2VuJ10pIHsNCiAgICAgICAgICAgICAg +ICAgICAgJEFkbWluLmJlc3ByZWNodW5nc1ZvcmxhZ2VuID0gJERhdGVuDQogICAgICAgICAgICAg +ICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgJEFkbWluIHwgQWRkLU1lbWJlciAtTWVt +YmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgJ2Jlc3ByZWNodW5nc1ZvcmxhZ2VuJyAtVmFsdWUg +JERhdGVuDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIFdyaXRlLUpzb25GaWxl +ICdhZG1pbi5qc29uJyAkQWRtaW4NCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdi +ZXNwcmVjaHVuZ3N2b3JsYWdlbi5nZWFlbmRlcnQnIEB7IGFuemFobCA9IEAoJERhdGVuKS5Db3Vu +dCB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uICRSZXMgQHsgc3RhdHVzID0gJ2dlc3BlaWNo +ZXJ0JyB9OyBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBpZiAoJFBhdGgg +LWVxICcvYXBpL2FkbWluL3NvbmRlcnRlcm1pbmUnIC1hbmQgJE1ldGhvZCAtZXEgJ1BVVCcpIHsN +CiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RBZG1pbikpIHsgU2VuZC1FcnJvciAk +UmVzICdLZWluZSBCZXJlY2h0aWd1bmcnIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAg +ICRCb2R5ID0gUmVhZC1Cb2R5ICRSZXENCiAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRC +b2R5KSB7IFNlbmQtRXJyb3IgJFJlcyAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9 +DQogICAgICAgICAgICAgICAgJFJvaCA9IFtvYmplY3RbXV1AKCRCb2R5IHwgQ29udmVydEZyb20t +SnNvbikgICMgQXJyYXktRXJoYWx0IHVudGVyIFBTIDUuMSBhdWNoIGJlaSAxIEVsZW1lbnQNCiAg +ICAgICAgICAgICAgICAjIFdoaXRlbGlzdCAoQXVkaXQtSXRlci1DKTogbnVyIDExIGVybGF1YnRl +IEZlbGRlciBwcm8gRWludHJhZyBwZXJzaXN0aWVyZW4NCiAgICAgICAgICAgICAgICAkRXJsYXVi +dCA9IEAoJ2lkJywnZGF0dW0nLCdkYXR1bUJpcycsJ3RpdGVsJywndGV4dCcsJ2ljb24nLCd0eXAn +LCd3YXJuTW9kdXMnLCdrYXRlZ29yaWUnLCdsb2dvcycsJ2xvZ29EYXJzdGVsbHVuZycpDQogICAg +ICAgICAgICAgICAgJERhdGVuID0gQCgpDQogICAgICAgICAgICAgICAgZm9yZWFjaCAoJFJvaDEg +aW4gJFJvaCkgew0KICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRSb2gxKSB7IGNv +bnRpbnVlIH0NCiAgICAgICAgICAgICAgICAgICAgJFNhdWJlciA9IFtvcmRlcmVkXUB7fQ0KICAg +ICAgICAgICAgICAgICAgICBmb3JlYWNoICgkRmVsZCBpbiAkRXJsYXVidCkgew0KICAgICAgICAg +ICAgICAgICAgICAgICAgaWYgKCRSb2gxLlBTT2JqZWN0LlByb3BlcnRpZXNbJEZlbGRdKSB7DQog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgJFNhdWJlclskRmVsZF0gPSAkUm9oMS4kRmVsZA0K +ICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAg +ICAgICAgICAgICAgICREYXRlbiArPSBbcHNjdXN0b21vYmplY3RdJFNhdWJlcg0KICAgICAgICAg +ICAgICAgIH0NCiAgICAgICAgICAgICAgICAkRGF0ZW4gPSBbb2JqZWN0W11dJERhdGVuDQogICAg +ICAgICAgICAgICAgJEFkbWluID0gUmVhZC1Kc29uRmlsZSAnYWRtaW4uanNvbicNCiAgICAgICAg +ICAgICAgICBpZiAoJEFkbWluLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3NvbmRlcnRlcm1pbmUnXSkg +ew0KICAgICAgICAgICAgICAgICAgICAkQWRtaW4uc29uZGVydGVybWluZSA9ICREYXRlbg0KICAg +ICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICRBZG1pbiB8IEFkZC1N +ZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1lICdzb25kZXJ0ZXJtaW5lJyAtVmFs +dWUgJERhdGVuDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIFdyaXRlLUpzb25G +aWxlICdhZG1pbi5qc29uJyAkQWRtaW4NCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFn +ICdzb25kZXJ0ZXJtaW5lLmdlYWVuZGVydCcgQHsgYW56YWhsID0gQCgkRGF0ZW4pLkNvdW50IH0N +CiAgICAgICAgICAgICAgICAkVXNlcm5hbWUgPSAkZW52OlVTRVJOQU1FDQogICAgICAgICAgICAg +ICAgJFJvbGxlID0gR2V0LVVzZXJSb2xsZQ0KICAgICAgICAgICAgICAgIEFkZC1DaGFuZ2VMb2dF +bnRyeSAnc29uZGVydGVybWluZScgJG51bGwgJG51bGwgJG51bGwgJFVzZXJuYW1lICRSb2xsZSBA +eyBhbnphaGwgPSBAKCREYXRlbikuQ291bnQgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbiAk +UmVzIEB7IHN0YXR1cyA9ICdnZXNwZWljaGVydCcgfTsgY29udGludWUNCiAgICAgICAgICAgIH0N +Cg0KICAgICAgICAgICAgIyA9PT09PT09PT09PT09PT09PT09PT0gU1RBTkRPUlRFID09PT09PT09 +PT09PT09PT09PT09PQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9hZG1pbi9zdGFu +ZG9ydGUnIC1hbmQgJE1ldGhvZCAtZXEgJ1BVVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5v +dCAoVGVzdC1Jc3RBZG1pbikpIHsgU2VuZC1FcnJvciAkUmVzICdLZWluZSBCZXJlY2h0aWd1bmcn +IDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRCb2R5ID0gUmVhZC1Cb2R5ICRSZXEN +CiAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRCb2R5KSB7IFNlbmQtRXJyb3IgJFJlcyAn +QW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJERhdGVu +ID0gW29iamVjdFtdXUAoJEJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uKSAgIyBBcnJheS1FcmhhbHQg +dW50ZXIgUFMgNS4xIGF1Y2ggYmVpIDEgRWxlbWVudA0KICAgICAgICAgICAgICAgICRBZG1pbiA9 +IFJlYWQtSnNvbkZpbGUgJ2FkbWluLmpzb24nDQogICAgICAgICAgICAgICAgaWYgKCRBZG1pbi5Q +U09iamVjdC5Qcm9wZXJ0aWVzWydzdGFuZG9ydGUnXSkgew0KICAgICAgICAgICAgICAgICAgICAk +QWRtaW4uc3RhbmRvcnRlID0gJERhdGVuDQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAg +ICAgICAgICAgICAgICAgJEFkbWluIHwgQWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVy +dHkgLU5hbWUgJ3N0YW5kb3J0ZScgLVZhbHVlICREYXRlbg0KICAgICAgICAgICAgICAgIH0NCiAg +ICAgICAgICAgICAgICBXcml0ZS1Kc29uRmlsZSAnYWRtaW4uanNvbicgJEFkbWluDQogICAgICAg +ICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnc3RhbmRvcnRlLmdlYWVuZGVydCcgQHt9DQogICAg +ICAgICAgICAgICAgJFVzZXJuYW1lID0gJGVudjpVU0VSTkFNRQ0KICAgICAgICAgICAgICAgICRS +b2xsZSA9IEdldC1Vc2VyUm9sbGUNCiAgICAgICAgICAgICAgICBBZGQtQ2hhbmdlTG9nRW50cnkg +J3N0YW5kb3J0ZScgJG51bGwgJG51bGwgJG51bGwgJFVzZXJuYW1lICRSb2xsZSBAe30NCiAgICAg +ICAgICAgICAgICBTZW5kLUpzb24gJFJlcyBAeyBzdGF0dXMgPSAnZ2VzcGVpY2hlcnQnIH07IGNv +bnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgPT09PT09PT09PT09PT09PT09 +PT09IEVJTlNURUxMVU5HRU4gPT09PT09PT09PT09PT09PT09PT09DQogICAgICAgICAgICBpZiAo +JFBhdGggLWVxICcvYXBpL2FkbWluL2VpbnN0ZWxsdW5nZW4nIC1hbmQgJE1ldGhvZCAtZXEgJ1BV +VCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RBZG1pbikpIHsgU2VuZC1F +cnJvciAkUmVzICdLZWluZSBCZXJlY2h0aWd1bmcnIDQwMzsgY29udGludWUgfQ0KICAgICAgICAg +ICAgICAgICRCb2R5ID0gUmVhZC1Cb2R5ICRSZXENCiAgICAgICAgICAgICAgICBpZiAoJG51bGwg +LWVxICRCb2R5KSB7IFNlbmQtRXJyb3IgJFJlcyAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250 +aW51ZSB9DQogICAgICAgICAgICAgICAgJERhdGVuID0gJEJvZHkgfCBDb252ZXJ0RnJvbS1Kc29u +DQogICAgICAgICAgICAgICAgJEFkbWluID0gUmVhZC1Kc29uRmlsZSAnYWRtaW4uanNvbicNCiAg +ICAgICAgICAgICAgICAjIFdoaXRlbGlzdCBhbmFsb2cgenUgc2VydmVyLnB5OjI3NjEgLSBIZWFk +ZXItS29uZmlnICsgYWxsZQ0KICAgICAgICAgICAgICAgICMgVG9wLUxldmVsLUJyYW5kaW5nL0Vp +bnN0ZWxsdW5nZW4tRmVsZGVyLg0KICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRLZXkgaW4gQCgn +amFocicsJ2luYWt0aXZpdGFldE1pbnV0ZW4nLCdpbmZvdGV4dCcsJ3N1cHBvcnRpbmZvJywnc2No +bGllc3NpbmZvJywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdwbGFudW5n +c05hbWUnLCdwbGFudW5nc0t1cnonLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgJ2VyaW5uZXJ1bmcnLCdjdXN0b21Mb2dvJywnY3VzdG9tTG9nb0hvZWhlJywNCiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICd2ZXJiaW5kbGljaGtlaXRzZmVuc3RlcicsJ2Fs +bGdlbWVpbmVIaWxmZScsJ2JlZGllbnVuZ3NIaW53ZWlzZScsJ3dvY2hlbnBsYW5Lb3BmJywNCiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdoZWFkZXJLb25maWcnLCdoZWFkZXJM +YWJlbHMnLCdjb3VudGVyS29uZmlnJywnbWFya2VyS29uZmlnJywNCiAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICd2b3JnYWJlQWxzUGlsbGUnLCdtZWRpZW5LYXRlZ29yaWVuJykp +IHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCREYXRlbi5QU09iamVjdC5Qcm9wZXJ0aWVzWyRL +ZXldKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJEFkbWluLlBTT2JqZWN0LlByb3Bl +cnRpZXNbJEtleV0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQWRtaW4uJEtleSA9 +ICREYXRlbi4kS2V5DQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICRBZG1pbiB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVBy +b3BlcnR5IC1OYW1lICRLZXkgLVZhbHVlICREYXRlbi4kS2V5DQogICAgICAgICAgICAgICAgICAg +ICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAg +ICAgICAgICAgV3JpdGUtSnNvbkZpbGUgJ2FkbWluLmpzb24nICRBZG1pbg0KICAgICAgICAgICAg +ICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ2VpbnN0ZWxsdW5nZW4uZ2VhZW5kZXJ0JyBAe30NCiAgICAg +ICAgICAgICAgICBTZW5kLUpzb24gJFJlcyBAeyBzdGF0dXMgPSAnZ2VzcGVpY2hlcnQnIH07IGNv +bnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgPT09PT09PT09PT09PT09PT09 +PT09IFBMQU5VTkcgPT09PT09PT09PT09PT09PT09PT09DQogICAgICAgICAgICBpZiAoJFBhdGgg +LWVxICcvYXBpL3BsYW51bmcnIC1hbmQgJE1ldGhvZCAtZXEgJ0dFVCcpIHsNCiAgICAgICAgICAg +ICAgICAkUGxhbnVuZyA9IFJlYWQtSnNvbkZpbGUgJ3BsYW51bmcuanNvbicNCiAgICAgICAgICAg +ICAgICBpZiAoJG51bGwgLWVxICRQbGFudW5nKSB7IFNlbmQtRXJyb3IgJFJlcyAncGxhbnVuZy5q +c29uIG5pY2h0IGdlZnVuZGVuJyA0MDQgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgIyBJ +bnRlZ3JpdGFldHMtQ2hlY2sgTklDSFQgaGllciBpbmxpbmUgLS0gZGVyIEZyb250ZW5kLXN5bmMt +Y2xpZW50DQogICAgICAgICAgICAgICAgICAgICMgcG9sbHQgL2FwaS9pbnRlZ3JpdGFldC9zdGF0 +dXMgc2VwYXJhdC4gSW5saW5lLUNoZWNrIHZlcmRvcHBlbHQNCiAgICAgICAgICAgICAgICAgICAg +IyBiZWkgamVkZW0gUGFnZS1Mb2FkIGRhcyBSZWFkK0l0ZXJhdGUtVm9sdW1lbiwgd2FzIGF1ZiBT +TUItDQogICAgICAgICAgICAgICAgICAgICMgU2hhcmUgKFE6KSBtZXJrbGljaCBibG9ja2llcnQg +dW5kIGltIFdvcnN0LUNhc2UgZGVuDQogICAgICAgICAgICAgICAgICAgICMgT3V0cHV0U3RyZWFt +LVdyaXRlIHRpbWVvdXRldCAoSFRUUC5TWVMgLyBCcm93c2VyLUFib3J0KS4NCiAgICAgICAgICAg +ICAgICAgICAgU2VuZC1Kc29uICRSZXMgJFBsYW51bmcNCiAgICAgICAgICAgICAgICB9DQogICAg +ICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyA9PT09 +PT09PT09PT09PT09PT09PT0gSU5URUdSSVRBRVQgKFBoYXNlIEcpID09PT09PT09PT09PT09PT09 +PT09PQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9pbnRlZ3JpdGFldC9zdGF0dXMn +IC1hbmQgJE1ldGhvZCAtZXEgJ0dFVCcpIHsNCiAgICAgICAgICAgICAgICAkZXJnID0gJG51bGwN +CiAgICAgICAgICAgICAgICB0cnkgeyAkZXJnID0gSW52b2tlLUludGVncml0YWV0UHJ1ZWZ1bmcg +JGZhbHNlIH0gY2F0Y2ggeyAkZXJnID0gQHsgb2sgPSAkZmFsc2U7IGZlaGxlciA9ICIkXyI7IHZl +cmxldHp1bmdlbiA9IEAoKSB9IH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb24gJFJlcyAkZXJn +DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlm +ICgkUGF0aCAtZXEgJy9hcGkvaW50ZWdyaXRhZXQvbmV1LXNpZ25pZXJlbicgLWFuZCAkTWV0aG9k +IC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RTdXBlclVz +ZXIpKSB7IFNlbmQtRXJyb3IgJFJlcyAnTnVyIFN1cGVyVXNlciBkYXJmIG5ldSBzaWduaWVyZW4n +IDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICMgVmVyaWZ5IGlzdCBSRUFELU9OTFkg +dW5kIGxhZXVmdCBWT1IgZGVtIExvY2ssIGRhbWl0IGRlciBMb2NrDQogICAgICAgICAgICAgICAg +IyBzbyBrdXJ6IHdpZSBtb2VnbGljaCBnZWhhbHRlbiB3aXJkLiBSZXN1bHRhdCBhbHMNCiAgICAg +ICAgICAgICAgICAjIHZlcmxldHp1bmdlblp1dm9yIGluIFJlc3BvbnNlIOKAlCBGcm9udGVuZCB6 +ZWlndCBkYXMgaW0gVG9hc3QNCiAgICAgICAgICAgICAgICAjIChzeW5jLWNsaWVudC5qczoyNTIg +IkludGVncml0YWV0IG5ldSBzaWduaWVydCAoTiBWZXJsZXR6dW5nZW4NCiAgICAgICAgICAgICAg +ICAjIGF1ZmdlbG9lc3QpIikuIE1pcnJvciB6dSBzZXJ2ZXIucHk6MjI2My0yMjg1Lg0KICAgICAg +ICAgICAgICAgICRQbGFudW5nUHJlID0gUmVhZC1Kc29uRmlsZSAncGxhbnVuZy5qc29uJw0KICAg +ICAgICAgICAgICAgICRWZXJsZXR6dW5nZW5adXZvciA9IEAoKQ0KICAgICAgICAgICAgICAgIGlm +ICgkbnVsbCAtbmUgJFBsYW51bmdQcmUpIHsNCiAgICAgICAgICAgICAgICAgICAgdHJ5IHsgJFZl +cmxldHp1bmdlblp1dm9yID0gVmVyaWZ5LVBsYW51bmdJbnRlZ3JpdGFldCAkUGxhbnVuZ1ByZSB9 +IGNhdGNoIHsgJFZlcmxldHp1bmdlblp1dm9yID0gQCgpIH0NCiAgICAgICAgICAgICAgICB9DQog +ICAgICAgICAgICAgICAgJFN0YXJ0VHMgPSBHZXQtRGF0ZQ0KICAgICAgICAgICAgICAgIHRyeSB7 +DQogICAgICAgICAgICAgICAgICAgIEludm9rZS1XaXRoRmlsZUxvY2sgJ3BsYW51bmcuanNvbicg +ew0KICAgICAgICAgICAgICAgICAgICAgICAgJFAgPSBSZWFkLUpzb25GaWxlICdwbGFudW5nLmpz +b24nDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLW5lICRQKSB7IFdyaXRlLVBs +YW51bmdNaXRJbnRlZ3JpdGFldCAkUCB9DQogICAgICAgICAgICAgICAgICAgIH0gNjAwMDAgfCBP +dXQtTnVsbA0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAgICAgICAgICBX +cml0ZS1TdGFydHVwTG9nICJGRUhMRVIgbmV1LXNpZ25pZXJlbjogJF8gKCQoJF8uU2NyaXB0U3Rh +Y2tUcmFjZSkpIg0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXMgIk5ldS1TaWdu +aWVyZW4gZmVobGdlc2NobGFnZW46ICRfIiA1MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAg +fQ0KICAgICAgICAgICAgICAgICREYXVlck1zID0gW2ludF0oKEdldC1EYXRlKSAtICRTdGFydFRz +KS5Ub3RhbE1pbGxpc2Vjb25kcw0KICAgICAgICAgICAgICAgICRzY3JpcHQ6SW50ZWdyaXR5VmVy +aWZ5Q2FjaGUgPSAkbnVsbA0KICAgICAgICAgICAgICAgICRWekNvdW50ID0gQCgkVmVybGV0enVu +Z2VuWnV2b3IpLkNvdW50DQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnaW50ZWdy +aXRhZXQubmV1X3NpZ25pZXJ0JyBAeyByb2xsZSA9IChHZXQtVXNlclJvbGxlKTsgZGF1ZXJNcyA9 +ICREYXVlck1zOyB2ZXJsZXR6dW5nZW5adXZvciA9ICRWekNvdW50IH0NCiAgICAgICAgICAgICAg +ICBTZW5kLUpzb24gJFJlcyBAeyBvayA9ICR0cnVlOyBkYXVlck1zID0gJERhdWVyTXM7IHZlcmxl +dHp1bmdlblp1dm9yID0gJFZ6Q291bnQgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAg +ICAgICAgICB9DQoNCiAgICAgICAgICAgICMgPT09PT09PT09PT09PT09PT09PT09IFpFTEwtTE9D +SyAoUGhhc2UgQTEpID09PT09PT09PT09PT09PT09PT09PQ0KICAgICAgICAgICAgIyBQT1NUIC9h +cGkvbG9jay96ZWxsZSAgeyBkYXR1bSwgcGVyc29uSWQgfSAtPiB7IG9rLCB0b2tlbiwgZXhwaXJl +c0F0IH0gb2RlciA0MjMgeyBzcGVycmVyLCBzZWl0LCByb2xsZSB9DQogICAgICAgICAgICBpZiAo +JFBhdGggLWVxICcvYXBpL2xvY2svemVsbGUnIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQog ICAgICAgICAgICAgICAgJEJvZHkgPSBSZWFkLUJvZHkgJFJlcQ0KICAgICAgICAgICAgICAgIGlm ICgkbnVsbCAtZXEgJEJvZHkpIHsgU2VuZC1FcnJvciAkUmVzICdBbmZyYWdlIHp1IGdyb3NzJyA0 MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkQSA9ICRCb2R5IHwgQ29udmVydEZyb20t SnNvbg0KICAgICAgICAgICAgICAgICREYXR1bSA9IFtzdHJpbmddJEEuZGF0dW0NCiAgICAgICAg -ICAgICAgICAkRmxhZyA9IFtib29sXSRBLmFrdGl2DQogICAgICAgICAgICAgICAgaWYgKFtzdHJp -bmddOjpJc051bGxPcldoaXRlU3BhY2UoJERhdHVtKSkgeyBTZW5kLUVycm9yICRSZXMgJ2RhdHVt -IGZlaGx0JyA0MDA7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkVXNlcm5hbWUgPSAkZW52 -OlVTRVJOQU1FDQogICAgICAgICAgICAgICAgJFJvbGxlID0gR2V0LVVzZXJSb2xsZQ0KICAgICAg -ICAgICAgICAgICRMb2NrUmVzdWx0ID0gJG51bGwNCiAgICAgICAgICAgICAgICB0cnkgew0KICAg -ICAgICAgICAgICAgICAgICAkTG9ja1Jlc3VsdCA9IEludm9rZS1XaXRoRmlsZUxvY2sgJ3BsYW51 -bmcuanNvbicgew0KICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51bmcgPSBSZWFkLUpzb25G -aWxlICdwbGFudW5nLmpzb24nDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVx -ICRQbGFudW5nKSB7IHJldHVybiBAeyB0eXAgPSAnZXJyb3InOyBjb2RlID0gNDA0OyBtc2cgPSAn -cGxhbnVuZy5qc29uIG5pY2h0IGdlZnVuZGVuJyB9IH0NCiAgICAgICAgICAgICAgICAgICAgICAg -IGlmICgtbm90ICRQbGFudW5nLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2RzbSddKSB7DQogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgJFBsYW51bmcgfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5v -dGVQcm9wZXJ0eSAtTmFtZSAnZHNtJyAtVmFsdWUgKE5ldy1PYmplY3QgUFNPYmplY3QpDQogICAg -ICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAkQWx0ID0gJGZh -bHNlDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJFBsYW51bmcuZHNtLlBTT2JqZWN0LlBy -b3BlcnRpZXNbJERhdHVtXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRBbHQgPSBb -Ym9vbF0kUGxhbnVuZy5kc20uJERhdHVtDQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAg -ICAgICAgICAgICAgICAgICAgICBpZiAoJEZsYWcpIHsNCiAgICAgICAgICAgICAgICAgICAgICAg -ICAgICBpZiAoJFBsYW51bmcuZHNtLlBTT2JqZWN0LlByb3BlcnRpZXNbJERhdHVtXSkgew0KICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUGxhbnVuZy5kc20uJERhdHVtID0gJHRydWUN -CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAkUGxhbnVuZy5kc20gfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQ -cm9wZXJ0eSAtTmFtZSAkRGF0dW0gLVZhbHVlICR0cnVlDQogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAg -ICAgICAgICAgICAgICBpZiAoJFBsYW51bmcuZHNtLlBTT2JqZWN0LlByb3BlcnRpZXNbJERhdHVt -XSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUGxhbnVuZy5kc20uUFNPYmpl -Y3QuUHJvcGVydGllcy5SZW1vdmUoJERhdHVtKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAg -IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIFdy -aXRlLVBsYW51bmdNaXRJbnRlZ3JpdGFldCAkUGxhbnVuZyBAKA0KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgIEB7IGtpbmQgPSAnZHNtJzsgZGF0dW0gPSAkRGF0dW0gfQ0KICAgICAgICAgICAg -ICAgICAgICAgICAgKQ0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEB7IHR5cCA9ICdv -ayc7IGFsdCA9ICRBbHQgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg -fSBjYXRjaCB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlcyAiJF8iIDUwMzsg -Y29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKCRMb2NrUmVz -dWx0LnR5cCAtZXEgJ2Vycm9yJykgeyBTZW5kLUVycm9yICRSZXMgJExvY2tSZXN1bHQubXNnICRM -b2NrUmVzdWx0LmNvZGU7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50 -cmFnICdkc20uZ2VhZW5kZXJ0JyBAeyBkYXR1bSA9ICREYXR1bTsgYWt0aXYgPSAkRmxhZzsgcm9s -bGUgPSAkUm9sbGUgfQ0KICAgICAgICAgICAgICAgIEFkZC1DaGFuZ2VMb2dFbnRyeSAnZHNtJyAk -RGF0dW0gJG51bGwgKFtzdHJpbmddJEZsYWcuVG9TdHJpbmcoKS5Ub0xvd2VyKCkpICRVc2VybmFt -ZSAkUm9sbGUgQHsNCiAgICAgICAgICAgICAgICAgICAgYWt0aXYgPSAkRmxhZw0KICAgICAgICAg -ICAgICAgICAgICBhbHQgICA9ICRMb2NrUmVzdWx0LmFsdA0KICAgICAgICAgICAgICAgIH0NCiAg -ICAgICAgICAgICAgICBTZW5kLUpzb24gJFJlcyBAeyBzdGF0dXMgPSAnZ2VzcGVpY2hlcnQnOyBk -YXR1bSA9ICREYXR1bTsgYWt0aXYgPSAkRmxhZyB9DQogICAgICAgICAgICAgICAgY29udGludWUN -CiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyA9PT09PT09PT09PT09PT09PT09PT0gWkVM -TEVOLUJVTEsgKFBoYXNlIEM6IEF1dG9GaWxsLURuRCkgPT09PT09PT09PT09PT09PT09PT09DQog -ICAgICAgICAgICAjIFBVVCAvYXBpL3BsYW51bmcvemVsbGVuLWJ1bGsgeyB6ZWxsZW46IFt7ZGF0 -dW0sIHBlcnNvbklkLCB3ZXJ0LCBlcndhcnRldCwgbG9ja1Rva2VuP30sIC4uLl0gfQ0KICAgICAg -ICAgICAgIyAyMDcgTXVsdGktU3RhdHVzOiB7IGVyZm9sZ3JlaWNoOltdLCBrb25mbGlrdGU6W10s -IGdlc3BlcnJ0OltdLCB2ZXJib3RlbjpbXSwgZmVobGVyOltdIH0NCiAgICAgICAgICAgIGlmICgk -UGF0aCAtZXEgJy9hcGkvcGxhbnVuZy96ZWxsZW4tYnVsaycgLWFuZCAkTWV0aG9kIC1lcSAnUFVU -Jykgew0KICAgICAgICAgICAgICAgICRCb2R5ID0gUmVhZC1Cb2R5ICRSZXENCiAgICAgICAgICAg -ICAgICBpZiAoJG51bGwgLWVxICRCb2R5KSB7IFNlbmQtRXJyb3IgJFJlcyAnQW5mcmFnZSB6dSBn -cm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJEEgPSAkQm9keSB8IENvbnZl -cnRGcm9tLUpzb24NCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAkQS56ZWxsZW4gLW9yIEAoJEEu -emVsbGVuKS5Db3VudCAtZXEgMCkgew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRS -ZXMgJ3plbGxlbi1BcnJheSBmZWhsdCBvZGVyIGxlZXInIDQwMDsgY29udGludWUNCiAgICAgICAg -ICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKEAoJEEuemVsbGVuKS5Db3VudCAtZ3QgNTAw -KSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlcyAnTWF4aW1hbCA1MDAgWmVs -bGVuIHBybyBCdWxrLVJlcXVlc3QnIDQxMzsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQog -ICAgICAgICAgICAgICAgJFVzZXJuYW1lID0gJGVudjpVU0VSTkFNRQ0KICAgICAgICAgICAgICAg -ICRSb2xsZSA9IEdldC1Vc2VyUm9sbGUNCiAgICAgICAgICAgICAgICAkRGFyZlVlYmVyID0gVGVz -dC1EYXJmVWViZXJzY2hyZWliZW4gJFJvbGxlDQoNCiAgICAgICAgICAgICAgICAjIFByZS1DaGVj -ayBDZWxsLUxvY2tzDQogICAgICAgICAgICAgICAgJEdlc3BlcnJ0ID0gTmV3LU9iamVjdCBTeXN0 -ZW0uQ29sbGVjdGlvbnMuQXJyYXlMaXN0DQogICAgICAgICAgICAgICAgZm9yZWFjaCAoJHogaW4g -JEEuemVsbGVuKSB7DQogICAgICAgICAgICAgICAgICAgICRkID0gW3N0cmluZ10kei5kYXR1bTsg -JHAgPSBbc3RyaW5nXSR6LnBlcnNvbklkDQogICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRk -IC1vciAtbm90ICRwKSB7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAgICAgJEwgPSBSZWFk -LUNlbGxMb2NrICRkICRwDQogICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtbmUgJEwpIHsN -CiAgICAgICAgICAgICAgICAgICAgICAgICRvd24gPSAoJEwudXNlcm5hbWUgLWllcSAkVXNlcm5h -bWUpDQogICAgICAgICAgICAgICAgICAgICAgICAkdG9rT2sgPSAkei5QU09iamVjdC5Qcm9wZXJ0 -aWVzWydsb2NrVG9rZW4nXSAtYW5kICRMLnRva2VuIC1lcSBbc3RyaW5nXSR6LmxvY2tUb2tlbg0K -ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJG93biAtYW5kIC1ub3QgJHRva09rIC1h -bmQgLW5vdCAkRGFyZlVlYmVyKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZvaWRd -JEdlc3BlcnJ0LkFkZChAeyBkYXR1bSA9ICRkOyBwZXJzb25JZCA9ICRwOyBzcGVycmVyID0gJEwu -dXNlcm5hbWUgfSkNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAg -ICAgfQ0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICRFcmZvbGdyZWljaCA9 -IE5ldy1PYmplY3QgU3lzdGVtLkNvbGxlY3Rpb25zLkFycmF5TGlzdA0KICAgICAgICAgICAgICAg -ICRLb25mbGlrdGUgICA9IE5ldy1PYmplY3QgU3lzdGVtLkNvbGxlY3Rpb25zLkFycmF5TGlzdA0K -ICAgICAgICAgICAgICAgICRWZXJib3RlbiAgICA9IE5ldy1PYmplY3QgU3lzdGVtLkNvbGxlY3Rp -b25zLkFycmF5TGlzdA0KICAgICAgICAgICAgICAgICRGZWhsZXIgICAgICA9IE5ldy1PYmplY3Qg -U3lzdGVtLkNvbGxlY3Rpb25zLkFycmF5TGlzdA0KDQogICAgICAgICAgICAgICAgJExvY2tSZXN1 -bHQgPSAkbnVsbA0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICRM -b2NrUmVzdWx0ID0gSW52b2tlLVdpdGhGaWxlTG9jayAncGxhbnVuZy5qc29uJyB7DQogICAgICAg -ICAgICAgICAgICAgICAgICAkUGxhbnVuZyA9IFJlYWQtSnNvbkZpbGUgJ3BsYW51bmcuanNvbicN -CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJFBsYW51bmcpIHsgcmV0dXJu -IEB7IHR5cCA9ICdlcnJvcic7IGNvZGUgPSA0MDQ7IG1zZyA9ICdwbGFudW5nLmpzb24gbmljaHQg -Z2VmdW5kZW4nIH0gfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJFBsYW51bmcu -UFNPYmplY3QuUHJvcGVydGllc1snZWludHJhZWdlJ10pIHsNCiAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAkUGxhbnVuZyB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1O -YW1lICdlaW50cmFlZ2UnIC1WYWx1ZSAoTmV3LU9iamVjdCBQU09iamVjdCkNCiAgICAgICAgICAg -ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICRBZG1pbkZ1ZXJWRiA9IFJl -YWQtSnNvbkZpbGUgJ2FkbWluLmpzb24nDQogICAgICAgICAgICAgICAgICAgICAgICAkUHJ1ZWZl -VmVyYiA9ICgkUm9sbGUgLWVxICd1c2VyJykNCiAgICAgICAgICAgICAgICAgICAgICAgICMgV2hp -dGVsaXN0IGdlZ2VuIGFkbWluLnNjaGljaHRjb2RlcyAoTWlycm9yIHNlcnZlci5weTozMTIwLTMx -MjIpDQogICAgICAgICAgICAgICAgICAgICAgICAkVmFsaWRDb2RlcyA9IE5ldy1PYmplY3QgU3lz -dGVtLkNvbGxlY3Rpb25zLkdlbmVyaWMuSGFzaFNldFtzdHJpbmddDQogICAgICAgICAgICAgICAg -ICAgICAgICBbdm9pZF0kVmFsaWRDb2Rlcy5BZGQoJycpDQogICAgICAgICAgICAgICAgICAgICAg -ICBpZiAoJG51bGwgLW5lICRBZG1pbkZ1ZXJWRiAtYW5kICRBZG1pbkZ1ZXJWRi5QU09iamVjdC5Q -cm9wZXJ0aWVzWydzY2hpY2h0Y29kZXMnXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAg -IGZvcmVhY2ggKCRTYyBpbiAkQWRtaW5GdWVyVkYuc2NoaWNodGNvZGVzKSB7DQogICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtbmUgJFNjIC1hbmQgJFNjLlBTT2JqZWN0 -LlByb3BlcnRpZXNbJ2NvZGUnXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgW3ZvaWRdJFZhbGlkQ29kZXMuQWRkKFtzdHJpbmddJFNjLmNvZGUpDQogICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAg -ICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAkQmV0cm9mZmVu -ZSA9IE5ldy1PYmplY3QgU3lzdGVtLkNvbGxlY3Rpb25zLkFycmF5TGlzdA0KICAgICAgICAgICAg -ICAgICAgICAgICAgJEdlc3BlcnJ0U2V0ID0gQHt9DQogICAgICAgICAgICAgICAgICAgICAgICBm -b3JlYWNoICgkZyBpbiAkR2VzcGVycnQpIHsgJEdlc3BlcnJ0U2V0WygkZy5kYXR1bSArICd8JyAr -ICRnLnBlcnNvbklkKV0gPSAkdHJ1ZSB9DQogICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNo -ICgkeiBpbiAkQS56ZWxsZW4pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZCA9IFtz -dHJpbmddJHouZGF0dW07ICRwID0gW3N0cmluZ10kei5wZXJzb25JZA0KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICR3ZXJ0ID0gaWYgKCR6LndlcnQpIHsgW3N0cmluZ10kei53ZXJ0IH0gZWxz -ZSB7ICcnIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXJ3YXJ0ZXQgPSBpZiAoJHou -UFNPYmplY3QuUHJvcGVydGllc1snZXJ3YXJ0ZXQnXSkgeyBbc3RyaW5nXSR6LmVyd2FydGV0IH0g -ZWxzZSB7ICRudWxsIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkZCAt -b3IgLW5vdCAkcCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdm9pZF0kRmVo -bGVyLkFkZChAeyBkYXR1bSA9ICRkOyBwZXJzb25JZCA9ICRwOyBmZWhsZXIgPSAnZGF0dW0vcGVy -c29uSWQgZmVobHQnIH0pOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0N -CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkVmFsaWRDb2Rlcy5Db250YWlu -cygkd2VydCkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZvaWRdJEZlaGxl -ci5BZGQoQHsgZGF0dW0gPSAkZDsgcGVyc29uSWQgPSAkcDsgZmVobGVyID0gIlVuYmVrYW5udGVy -IFNjaGljaHRjb2RlOiAnJHdlcnQnIiB9KTsgY29udGludWUNCiAgICAgICAgICAgICAgICAgICAg -ICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRHZXNwZXJydFNldFso -JGQgKyAnfCcgKyAkcCldKSB7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAg -ICBpZiAoJFBydWVmZVZlcmIgLWFuZCAoVGVzdC1EYXR1bUluVmVyYmluZGxpY2hrZWl0ICRkICRB -ZG1pbkZ1ZXJWRikpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZvaWRdJFZl -cmJvdGVuLkFkZChAeyBkYXR1bSA9ICRkOyBwZXJzb25JZCA9ICRwOyBncnVuZCA9ICd2ZXJiaW5k -bGljaGtlaXRzZmVuc3RlcicgfSk7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRQbGFudW5nLmVpbnRy -YWVnZS5QU09iamVjdC5Qcm9wZXJ0aWVzWyRkXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAkUGxhbnVuZy5laW50cmFlZ2UgfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQ -cm9wZXJ0eSAtTmFtZSAkZCAtVmFsdWUgKE5ldy1PYmplY3QgUFNPYmplY3QpDQogICAgICAgICAg -ICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhbHQgPSAn -Jw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkUGxhbnVuZy5laW50cmFlZ2UuJGQu -UFNPYmplY3QuUHJvcGVydGllc1skcF0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgJGFsdCA9IFtzdHJpbmddJFBsYW51bmcuZWludHJhZWdlLiRkLiRwDQogICAgICAgICAgICAg -ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAt -bmUgJGVyd2FydGV0IC1hbmQgJGVyd2FydGV0IC1uZSAkYWx0KSB7DQogICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgIFt2b2lkXSRLb25mbGlrdGUuQWRkKEB7IGRhdHVtID0gJGQ7IHBlcnNv -bklkID0gJHA7IGFrdHVlbGwgPSAkYWx0IH0pOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYWx0UGYgPSAkZmFsc2UN -CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJFBsYW51bmcuUFNPYmplY3QuUHJvcGVy -dGllc1sncGZsaWNodCddIC1hbmQgJFBsYW51bmcucGZsaWNodC5QU09iamVjdC5Qcm9wZXJ0aWVz -WyRkXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJFBsYW51bmcucGZs -aWNodC4kZC5QU09iamVjdC5Qcm9wZXJ0aWVzWyRwXSkgew0KICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgJGFsdFBmID0gW2Jvb2xdJFBsYW51bmcucGZsaWNodC4kZC4kcA0KICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkYWx0UGYgLWFuZCAtbm90ICRE -YXJmVWViZXIpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZvaWRdJFZlcmJv -dGVuLkFkZChAeyBkYXR1bSA9ICRkOyBwZXJzb25JZCA9ICRwOyBncnVuZCA9ICdwZmxpY2h0JyB9 -KTsgY29udGludWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg -ICAgICAgICAgICAgICAgaWYgKFtzdHJpbmddOjpJc051bGxPcldoaXRlU3BhY2UoJHdlcnQpKSB7 -DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkUGxhbnVuZy5laW50cmFlZ2Uu -JGQuUFNPYmplY3QuUHJvcGVydGllc1skcF0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICRQbGFudW5nLmVpbnRyYWVnZS4kZC5QU09iamVjdC5Qcm9wZXJ0aWVzLlJlbW92 -ZSgkcCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm -ICgkUGxhbnVuZy5laW50cmFlZ2UuJGQuUFNPYmplY3QuUHJvcGVydGllc1skcF0pIHsNCiAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5nLmVpbnRyYWVnZS4kZC4kcCA9 -ICR3ZXJ0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUGxhbnVuZy5laW50cmFlZ2UuJGQgfCBBZGQt -TWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAtTmFtZSAkcCAtVmFsdWUgJHdlcnQNCiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAg -ICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdm9pZF0kQmV0cm9mZmVuZS5BZGQo -QHsga2luZCA9ICdlaW50cmFlZ2UnOyBkYXR1bSA9ICRkOyBwZXJzb25JZCA9ICRwIH0pDQogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgW3ZvaWRdJEVyZm9sZ3JlaWNoLkFkZChAeyBkYXR1bSA9 -ICRkOyBwZXJzb25JZCA9ICRwOyB3ZXJ0ID0gJHdlcnQ7IGFsdGVyV2VydCA9ICRhbHQgfSkNCiAg -ICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChAKCRC -ZXRyb2ZmZW5lKS5Db3VudCAtZ3QgMCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdy -aXRlLVBsYW51bmdNaXRJbnRlZ3JpdGFldCAkUGxhbnVuZyBAKCRCZXRyb2ZmZW5lKQ0KICAgICAg -ICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEB7IHR5 -cCA9ICdvaycgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBjYXRj -aCB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlcyAiJF8iIDUwMzsgY29udGlu -dWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKCRMb2NrUmVzdWx0LnR5 -cCAtZXEgJ2Vycm9yJykgeyBTZW5kLUVycm9yICRSZXMgJExvY2tSZXN1bHQubXNnICRMb2NrUmVz -dWx0LmNvZGU7IGNvbnRpbnVlIH0NCg0KICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRvayBpbiAk -RXJmb2xncmVpY2gpIHsNCiAgICAgICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnemVs -bGUuZ2VhZW5kZXJ0JyBAew0KICAgICAgICAgICAgICAgICAgICAgICAgZGF0dW0gPSAkb2suZGF0 -dW07IHBlcnNvbklkID0gJG9rLnBlcnNvbklkDQogICAgICAgICAgICAgICAgICAgICAgICBhbHRl -cldlcnQgPSAkb2suYWx0ZXJXZXJ0OyBuZXVlcldlcnQgPSAkb2sud2VydA0KICAgICAgICAgICAg -ICAgICAgICAgICAgcm9sbGUgPSAkUm9sbGU7IG92ZXJyaWRlID0gJGZhbHNlOyBidWxrID0gJHRy -dWUNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBBZGQtQ2hhbmdl -TG9nRW50cnkgJ3plbGxlJyAkb2suZGF0dW0gJG9rLnBlcnNvbklkICRvay53ZXJ0ICRVc2VybmFt -ZSAkUm9sbGUgQHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGFsdGVyV2VydCA9ICRvay5hbHRl -cldlcnQ7IGJ1bGsgPSAkdHJ1ZQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg -ICAgfQ0KICAgICAgICAgICAgICAgICRzdGF0dXNDb2RlID0gaWYgKChAKCRLb25mbGlrdGUpLkNv -dW50ICsgQCgkVmVyYm90ZW4pLkNvdW50ICsgQCgkR2VzcGVycnQpLkNvdW50ICsgQCgkRmVobGVy -KS5Db3VudCkgLWd0IDApIHsgMjA3IH0gZWxzZSB7IDIwMCB9DQogICAgICAgICAgICAgICAgU2Vu -ZC1Kc29uICRSZXMgQHsNCiAgICAgICAgICAgICAgICAgICAgc3RhdHVzICAgICAgPSAndmVyYXJi -ZWl0ZXQnDQogICAgICAgICAgICAgICAgICAgIGVyZm9sZ3JlaWNoID0gQCgkRXJmb2xncmVpY2gp -DQogICAgICAgICAgICAgICAgICAgIGtvbmZsaWt0ZSAgID0gQCgkS29uZmxpa3RlKQ0KICAgICAg -ICAgICAgICAgICAgICBnZXNwZXJydCAgICA9IEAoJEdlc3BlcnJ0KQ0KICAgICAgICAgICAgICAg -ICAgICB2ZXJib3RlbiAgICA9IEAoJFZlcmJvdGVuKQ0KICAgICAgICAgICAgICAgICAgICBmZWhs -ZXIgICAgICA9IEAoJEZlaGxlcikNCiAgICAgICAgICAgICAgICAgICAgcm9sbGUgICAgICAgPSAk -Um9sbGUNCiAgICAgICAgICAgICAgICB9ICRzdGF0dXNDb2RlDQogICAgICAgICAgICAgICAgY29u -dGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyBLb21tZW50YXIgc2V0emVuL2xv -ZXNjaGVuIChQaGFzZSBBNTogRmlsZS1Mb2NrICsgT3B0aW1pc3RpYy1Db25jdXJyZW5jeSArIENo -YW5nZS1Mb2cpDQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3BsYW51bmcva29tbWVu -dGFyJyAtYW5kICRNZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAgICAgICAgICRCb2R5ID0g -UmVhZC1Cb2R5ICRSZXENCiAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRCb2R5KSB7IFNl -bmQtRXJyb3IgJFJlcyAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAg -ICAgICAgICAgJEEgPSAkQm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAgICAgICAgICAgICAk -RGF0dW0gPSBbc3RyaW5nXSRBLmRhdHVtDQogICAgICAgICAgICAgICAgJFBlcnNvbklkID0gW3N0 -cmluZ10kQS5wZXJzb25JZA0KICAgICAgICAgICAgICAgICRUZXh0ID0gaWYgKCRBLnRleHQpIHsg -KFtzdHJpbmddJEEudGV4dCkuVHJpbSgpIH0gZWxzZSB7ICcnIH0NCiAgICAgICAgICAgICAgICAk -SGF0RXJ3YXJ0ZXQgPSAkQS5QU09iamVjdC5Qcm9wZXJ0aWVzWydlcndhcnRldGVyQWx0ZXJUZXh0 -J10NCiAgICAgICAgICAgICAgICAkRXJ3YXJ0ZXQgPSBpZiAoJEhhdEVyd2FydGV0KSB7IFtzdHJp -bmddJEEuZXJ3YXJ0ZXRlckFsdGVyVGV4dCB9IGVsc2UgeyAkbnVsbCB9DQogICAgICAgICAgICAg -ICAgJFVzZXJuYW1lID0gJGVudjpVU0VSTkFNRQ0KICAgICAgICAgICAgICAgICRSb2xsZSA9IEdl -dC1Vc2VyUm9sbGUNCg0KICAgICAgICAgICAgICAgICRMb2NrUmVzdWx0ID0gJG51bGwNCiAgICAg -ICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAkTG9ja1Jlc3VsdCA9IEludm9r -ZS1XaXRoRmlsZUxvY2sgJ3BsYW51bmcuanNvbicgew0KICAgICAgICAgICAgICAgICAgICAgICAg -JFBsYW51bmcgPSBSZWFkLUpzb25GaWxlICdwbGFudW5nLmpzb24nDQogICAgICAgICAgICAgICAg -ICAgICAgICBpZiAoJG51bGwgLWVxICRQbGFudW5nKSB7IHJldHVybiBAeyB0eXAgPSAnZXJyb3In -OyBjb2RlID0gNDA0OyBtc2cgPSAncGxhbnVuZy5qc29uIG5pY2h0IGdlZnVuZGVuJyB9IH0NCg0K -ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJFBsYW51bmcuUFNPYmplY3QuUHJvcGVy -dGllc1sna29tbWVudGFyZSddKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51 -bmcgfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAtTmFtZSAna29tbWVudGFy -ZScgLVZhbHVlIChOZXctT2JqZWN0IFBTT2JqZWN0KQ0KICAgICAgICAgICAgICAgICAgICAgICAg -fQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJFBsYW51bmcua29tbWVudGFyZS5Q -U09iamVjdC5Qcm9wZXJ0aWVzWyREYXR1bV0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAkUGxhbnVuZy5rb21tZW50YXJlIHwgQWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVy -dHkgLU5hbWUgJERhdHVtIC1WYWx1ZSAoTmV3LU9iamVjdCBQU09iamVjdCkNCiAgICAgICAgICAg -ICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICAgICAgJEFsdGVyVGV4dCA9ICcn -DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJFBsYW51bmcua29tbWVudGFyZS4kRGF0dW0u -UFNPYmplY3QuUHJvcGVydGllc1skUGVyc29uSWRdKSB7DQogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgJEFsdGVyRWludHJhZyA9ICRQbGFudW5nLmtvbW1lbnRhcmUuJERhdHVtLiRQZXJzb25J -ZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQmFja3dhcmQtQ29tcGF0OiBhbHRlciBF -aW50cmFnIGthbm4gU3RyaW5nIE9ERVIge3RleHQsIGdlYWVuZGVydEFtLCBnZWFlbmRlcnRWb259 -IHNlaW4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJEFsdGVyRWludHJhZyAtaXMg -W3N0cmluZ10pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEFsdGVyVGV4dCA9 -ICRBbHRlckVpbnRyYWcNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJEFs -dGVyRWludHJhZy5QU09iamVjdC5Qcm9wZXJ0aWVzWyd0ZXh0J10pIHsNCiAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgJEFsdGVyVGV4dCA9IFtzdHJpbmddJEFsdGVyRWludHJhZy50ZXh0 -DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAg -fQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRIYXRFcndhcnRldCAtYW5kICRFcndhcnRl -dCAtbmUgJEFsdGVyVGV4dCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBA -eyB0eXAgPSAna29uZmxpa3QnOyBha3R1ZWxsID0gJEFsdGVyVGV4dCB9DQogICAgICAgICAgICAg -ICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkVGV4dCkgew0KICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICROZXVPYmogPSBbUFNDdXN0b21PYmplY3RdQHsNCiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dCAgICAgICAgID0gJFRleHQNCiAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VhZW5kZXJ0QW0gID0gKEdldC1EYXRlIC1Gb3Jt -YXQgJ3l5eXktTU0tZGQgSEg6bW06c3MnKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICBnZWFlbmRlcnRWb24gPSAoR2V0LUFrdHVlbGxlckJlbnV0emVyKQ0KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJFBsYW51bmcu -a29tbWVudGFyZS4kRGF0dW0uUFNPYmplY3QuUHJvcGVydGllc1skUGVyc29uSWRdKSB7DQogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5nLmtvbW1lbnRhcmUuJERhdHVtLiRQ -ZXJzb25JZCA9ICROZXVPYmoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0K -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUGxhbnVuZy5rb21tZW50YXJlLiREYXR1 -bSB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1lICRQZXJzb25JZCAt -VmFsdWUgJE5ldU9iag0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg -ICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRQ -bGFudW5nLmtvbW1lbnRhcmUuJERhdHVtLlBTT2JqZWN0LlByb3BlcnRpZXNbJFBlcnNvbklkXSkg -ew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUGxhbnVuZy5rb21tZW50YXJlLiRE -YXR1bS5QU09iamVjdC5Qcm9wZXJ0aWVzLlJlbW92ZSgkUGVyc29uSWQpDQogICAgICAgICAgICAg -ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChAKCRQbGFu -dW5nLmtvbW1lbnRhcmUuJERhdHVtLlBTT2JqZWN0LlByb3BlcnRpZXMpLkNvdW50IC1lcSAwKSB7 -DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5nLmtvbW1lbnRhcmUuUFNP -YmplY3QuUHJvcGVydGllcy5SZW1vdmUoJERhdHVtKQ0KICAgICAgICAgICAgICAgICAgICAgICAg -ICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAg -IFdyaXRlLVBsYW51bmdNaXRJbnRlZ3JpdGFldCAkUGxhbnVuZyBAKA0KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgIEB7IGtpbmQgPSAna29tbWVudGFyZSc7IGRhdHVtID0gJERhdHVtOyBwZXJz -b25JZCA9ICRQZXJzb25JZCB9DQogICAgICAgICAgICAgICAgICAgICAgICApDQogICAgICAgICAg -ICAgICAgICAgICAgICByZXR1cm4gQHsgdHlwID0gJ29rJzsgYWx0ZXJUZXh0ID0gJEFsdGVyVGV4 -dCB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAg -ICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzICIkXyIgNTAzOyBjb250aW51ZQ0KICAg -ICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIGlmICgkTG9ja1Jlc3VsdC50eXAgLWVx -ICdlcnJvcicpIHsgU2VuZC1FcnJvciAkUmVzICRMb2NrUmVzdWx0Lm1zZyAkTG9ja1Jlc3VsdC5j -b2RlOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgaWYgKCRMb2NrUmVzdWx0LnR5cCAtZXEg -J2tvbmZsaWt0Jykgew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUpzb24gJFJlcyBAew0KICAg -ICAgICAgICAgICAgICAgICAgICAgZmVobGVyICAgICAgICAgPSAna29uZmxpa3QnDQogICAgICAg -ICAgICAgICAgICAgICAgICBtZWxkdW5nICAgICAgICA9ICdLb21tZW50YXIgd3VyZGUgaW56d2lz -Y2hlbiBnZWFlbmRlcnQuJw0KICAgICAgICAgICAgICAgICAgICAgICAgYWt0dWVsbGVyVGV4dCAg -PSAkTG9ja1Jlc3VsdC5ha3R1ZWxsDQogICAgICAgICAgICAgICAgICAgIH0gNDA5DQogICAgICAg -ICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAg -ICAgJEt1cnogPSBpZiAoJFRleHQuTGVuZ3RoIC1ndCAxMDApIHsgJFRleHQuU3Vic3RyaW5nKDAs -IDEwMCkgfSBlbHNlIHsgJFRleHQgfQ0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcg -J2tvbW1lbnRhci5nZWFlbmRlcnQnIEB7DQogICAgICAgICAgICAgICAgICAgIGRhdHVtICAgID0g -JERhdHVtDQogICAgICAgICAgICAgICAgICAgIHBlcnNvbklkID0gJFBlcnNvbklkDQogICAgICAg -ICAgICAgICAgICAgIHRleHQgICAgID0gJEt1cnoNCiAgICAgICAgICAgICAgICAgICAgcm9sbGUg -ICAgPSAkUm9sbGUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgQWRkLUNoYW5n -ZUxvZ0VudHJ5ICdrb21tZW50YXInICREYXR1bSAkUGVyc29uSWQgJFRleHQgJFVzZXJuYW1lICRS -b2xsZSBAew0KICAgICAgICAgICAgICAgICAgICBhbHRlclRleHQgPSAkTG9ja1Jlc3VsdC5hbHRl -clRleHQNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uICRSZXMg -QHsgc3RhdHVzID0gJ2dlc3BlaWNoZXJ0JyB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAg -ICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyA9PT09PT09PT09PT09PT09PT09PT0gQkFDS1VQ -UyA9PT09PT09PT09PT09PT09PT09PT0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkv -cGxhbnVuZy9iYWNrdXBzJyAtYW5kICRNZXRob2QgLWVxICdHRVQnKSB7DQogICAgICAgICAgICAg -ICAgaWYgKC1ub3QgKFRlc3QtSXN0QWRtaW4pKSB7IFNlbmQtRXJyb3IgJFJlcyAnS2VpbmUgQmVy -ZWNodGlndW5nJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkRWludHJhZWdlID0g -TmV3LU9iamVjdCBTeXN0ZW0uQ29sbGVjdGlvbnMuQXJyYXlMaXN0DQogICAgICAgICAgICAgICAg -Zm9yZWFjaCAoJEYgaW4gR2V0LUNoaWxkSXRlbSAtUGF0aCAkRGF0YURpciAtRmlsdGVyICdwbGFu -dW5nX2JhY2t1cF8qLmpzb24nIC1GaWxlKSB7DQogICAgICAgICAgICAgICAgICAgICROYW1lID0g -JEYuTmFtZQ0KICAgICAgICAgICAgICAgICAgICAkVHlwID0gaWYgKCROYW1lIC1saWtlICcqYmFj -a3VwX3Zvcl9kdW1teV8qJykgeyAndm9yIER1bW15ZGF0ZW4nIH0NCiAgICAgICAgICAgICAgICAg -ICAgICAgICAgIGVsc2VpZiAoJE5hbWUgLWxpa2UgJypiYWNrdXBfdm9yX3Jlc2V0XyonKSB7ICd2 -b3IgUmVzZXQnIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VpZiAoJE5hbWUgLWxp -a2UgJypiYWNrdXBfdm9yX3dpZWRlcmhlcnN0ZWxsdW5nXyonKSB7ICd2b3IgV2llZGVyaGVyc3Rl -bGx1bmcnIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAnbWFudWVsbCcgfQ0K -ICAgICAgICAgICAgICAgICAgICBbdm9pZF0kRWludHJhZWdlLkFkZChbb3JkZXJlZF1Aew0KICAg -ICAgICAgICAgICAgICAgICAgICAgZGF0ZWluYW1lICA9ICROYW1lDQogICAgICAgICAgICAgICAg -ICAgICAgICBncm9lc3NlICAgID0gJEYuTGVuZ3RoDQogICAgICAgICAgICAgICAgICAgICAgICBl -cnN0ZWxsdEFtID0gJEYuTGFzdFdyaXRlVGltZS5Ub1N0cmluZygneXl5eS1NTS1kZFRISDptbTpz -cy5mZmZmZmZmJykNCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cCAgICAgICAgPSAkVHlwDQog -ICAgICAgICAgICAgICAgICAgIH0pDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg -ICRTb3J0aWVydCA9IEAoJEVpbnRyYWVnZSB8IFNvcnQtT2JqZWN0IC1Qcm9wZXJ0eSBlcnN0ZWxs -dEFtIC1EZXNjZW5kaW5nKQ0KICAgICAgICAgICAgICAgICRKc29uID0gQ29udmVydFRvLUpzb24g -LUlucHV0T2JqZWN0IEAoJFNvcnRpZXJ0KSAtRGVwdGggNSAtQ29tcHJlc3MNCiAgICAgICAgICAg -ICAgICBTZW5kLUpzb25SYXcgJFJlcyAkSnNvbg0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQog -ICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGlmICgkUGF0aCAtbGlrZSAnL2FwaS9wbGFudW5n -L2JhY2t1cC9kb3dubG9hZC8qJyAtYW5kICRNZXRob2QgLWVxICdHRVQnKSB7DQogICAgICAgICAg -ICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0QWRtaW4pKSB7IFNlbmQtRXJyb3IgJFJlcyAnS2VpbmUg -QmVyZWNodGlndW5nJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkTmFtZSA9IFtT -eXN0ZW0uV2ViLkh0dHBVdGlsaXR5XTo6VXJsRGVjb2RlKCRQYXRoLlN1YnN0cmluZygnL2FwaS9w -bGFudW5nL2JhY2t1cC9kb3dubG9hZC8nLkxlbmd0aCkpDQogICAgICAgICAgICAgICAgaWYgKC1u -b3QgKCROYW1lLlN0YXJ0c1dpdGgoJ3BsYW51bmdfYmFja3VwXycpIC1hbmQgJE5hbWUuRW5kc1dp -dGgoJy5qc29uJykpIC1vciAkTmFtZS5Db250YWlucygnLycpIC1vciAkTmFtZS5Db250YWlucygn -XCcpIC1vciAkTmFtZS5Db250YWlucygnLi4nKSkgew0KICAgICAgICAgICAgICAgICAgICBTZW5k -LUVycm9yICRSZXMgJ1VuZ3VlbHRpZ2VyIERhdGVpbmFtZScgNDAwOyBjb250aW51ZQ0KICAgICAg -ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkRlBhdGggPSBKb2luLVBhdGggJERhdGFEaXIg -JE5hbWUNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1QYXRoICRGUGF0aCkpIHsgU2Vu -ZC1FcnJvciAkUmVzICdCYWNrdXAgbmljaHQgZ2VmdW5kZW4nIDQwNDsgY29udGludWUgfQ0KICAg -ICAgICAgICAgICAgIFNlbmQtRmlsZUF0dGFjaG1lbnQgJFJlcyAkRlBhdGggJE5hbWUNCiAgICAg -ICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBpZiAoJFBh -dGggLWVxICcvYXBpL3BsYW51bmcvYmFja3VwJyAtYW5kICRNZXRob2QgLWVxICdQT1NUJykgew0K -ICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUlzdEFkbWluKSkgeyBTZW5kLUVycm9yICRS -ZXMgJ0tlaW5lIEJlcmVjaHRpZ3VuZycgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAg -JFBsYW51bmdQYXRoID0gSm9pbi1QYXRoICREYXRhRGlyICdwbGFudW5nLmpzb24nDQogICAgICAg -ICAgICAgICAgaWYgKC1ub3QgKFRlc3QtUGF0aCAkUGxhbnVuZ1BhdGgpKSB7IFNlbmQtRXJyb3Ig -JFJlcyAncGxhbnVuZy5qc29uIG5pY2h0IGdlZnVuZGVuJyA0MDQ7IGNvbnRpbnVlIH0NCiAgICAg -ICAgICAgICAgICAkVHMgPSBHZXQtRGF0ZSAtRm9ybWF0ICd5eXl5TU1kZF9ISG1tc3MnDQogICAg -ICAgICAgICAgICAgJEJhY2t1cE5hbWUgPSAicGxhbnVuZ19iYWNrdXBfJFRzLmpzb24iDQogICAg -ICAgICAgICAgICAgQ29weS1JdGVtIC1QYXRoICRQbGFudW5nUGF0aCAtRGVzdGluYXRpb24gKEpv -aW4tUGF0aCAkRGF0YURpciAkQmFja3VwTmFtZSkgLUZvcmNlDQogICAgICAgICAgICAgICAgSW52 -b2tlLUJhY2t1cFJvdGF0aW9uICdwbGFudW5nX2JhY2t1cF8qLmpzb24nIDIwICAjIFBoYXNlIEQz -OiBtYXggMjAgYmVoYWx0ZW4NCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdiYWNr -dXAuZXJzdGVsbHQnIEB7IGRhdGVpbmFtZSA9ICRCYWNrdXBOYW1lIH0NCiAgICAgICAgICAgICAg -ICBTZW5kLUpzb24gJFJlcyBAeyBzdGF0dXMgPSAnZXJzdGVsbHQnOyBkYXRlaW5hbWUgPSAkQmFj -a3VwTmFtZSB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAg -ICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9wbGFudW5nL2JhY2t1cC93aWVkZXJoZXJzdGVs -bGVuJyAtYW5kICRNZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90 -IChUZXN0LUlzdEFkbWluKSkgeyBTZW5kLUVycm9yICRSZXMgJ0tlaW5lIEJlcmVjaHRpZ3VuZycg -NDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJEJvZHkgPSBSZWFkLUJvZHkgJFJlcQ0K -ICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJEJvZHkpIHsgU2VuZC1FcnJvciAkUmVzICdB -bmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkRGF0ZW4g -PSAkQm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAgICAgICAgICAgICAkTmFtZSA9IFtzdHJp -bmddJERhdGVuLmRhdGVpbmFtZQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICgkTmFtZS5TdGFy -dHNXaXRoKCdwbGFudW5nX2JhY2t1cF8nKSAtYW5kICROYW1lLkVuZHNXaXRoKCcuanNvbicpKSAt -b3IgJE5hbWUuQ29udGFpbnMoJy8nKSAtb3IgJE5hbWUuQ29udGFpbnMoJ1wnKSAtb3IgJE5hbWUu -Q29udGFpbnMoJy4uJykpIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzICdV -bmd1ZWx0aWdlciBEYXRlaW5hbWUnIDQwMDsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQog -ICAgICAgICAgICAgICAgJFF1ZWxsUGF0aCA9IEpvaW4tUGF0aCAkRGF0YURpciAkTmFtZQ0KICAg -ICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LVBhdGggJFF1ZWxsUGF0aCkpIHsgU2VuZC1FcnJv -ciAkUmVzICdCYWNrdXAgbmljaHQgZ2VmdW5kZW4nIDQwNDsgY29udGludWUgfQ0KICAgICAgICAg -ICAgICAgICRQbGFudW5nUGF0aCA9IEpvaW4tUGF0aCAkRGF0YURpciAncGxhbnVuZy5qc29uJw0K -ICAgICAgICAgICAgICAgICRUcyA9IEdldC1EYXRlIC1Gb3JtYXQgJ3l5eXlNTWRkX0hIbW1zcycN -CiAgICAgICAgICAgICAgICAkU2ljaGVyTmFtZSA9ICJwbGFudW5nX2JhY2t1cF92b3Jfd2llZGVy -aGVyc3RlbGx1bmdfJFRzLmpzb24iDQogICAgICAgICAgICAgICAgaWYgKFRlc3QtUGF0aCAkUGxh -bnVuZ1BhdGgpIHsNCiAgICAgICAgICAgICAgICAgICAgQ29weS1JdGVtIC1QYXRoICRQbGFudW5n -UGF0aCAtRGVzdGluYXRpb24gKEpvaW4tUGF0aCAkRGF0YURpciAkU2ljaGVyTmFtZSkgLUZvcmNl -DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIENvcHktSXRlbSAtUGF0aCAkUXVl -bGxQYXRoIC1EZXN0aW5hdGlvbiAkUGxhbnVuZ1BhdGggLUZvcmNlDQogICAgICAgICAgICAgICAg -SW52b2tlLUJhY2t1cFJvdGF0aW9uICdwbGFudW5nX2JhY2t1cF8qLmpzb24nIDIwDQogICAgICAg -ICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnYmFja3VwLndpZWRlcmhlcmdlc3RlbGx0JyBAeyBx -dWVsbGUgPSAkTmFtZTsgc2ljaGVydW5nID0gJFNpY2hlck5hbWUgfQ0KICAgICAgICAgICAgICAg -IFNlbmQtSnNvbiAkUmVzIEB7IHN0YXR1cyA9ICd3aWVkZXJoZXJnZXN0ZWxsdCc7IHNpY2hlcnVu -ZyA9ICRTaWNoZXJOYW1lIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAg -fQ0KDQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3BsYW51bmcvYmFja3VwL2xvZXNj -aGVuJyAtYW5kICRNZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90 -IChUZXN0LUlzdEFkbWluKSkgeyBTZW5kLUVycm9yICRSZXMgJ0tlaW5lIEJlcmVjaHRpZ3VuZycg -NDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJEJvZHkgPSBSZWFkLUJvZHkgJFJlcQ0K -ICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJEJvZHkpIHsgU2VuZC1FcnJvciAkUmVzICdB -bmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkRGF0ZW4g -PSAkQm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAgICAgICAgICAgICAkTmFtZSA9IFtzdHJp -bmddJERhdGVuLmRhdGVpbmFtZQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICgkTmFtZS5TdGFy -dHNXaXRoKCdwbGFudW5nX2JhY2t1cF8nKSAtYW5kICROYW1lLkVuZHNXaXRoKCcuanNvbicpKSAt -b3IgJE5hbWUuQ29udGFpbnMoJy8nKSAtb3IgJE5hbWUuQ29udGFpbnMoJ1wnKSAtb3IgJE5hbWUu -Q29udGFpbnMoJy4uJykpIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzICdV -bmd1ZWx0aWdlciBEYXRlaW5hbWUnIDQwMDsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQog -ICAgICAgICAgICAgICAgJEZQYXRoID0gSm9pbi1QYXRoICREYXRhRGlyICROYW1lDQogICAgICAg -ICAgICAgICAgaWYgKC1ub3QgKFRlc3QtUGF0aCAkRlBhdGgpKSB7IFNlbmQtRXJyb3IgJFJlcyAn -QmFja3VwIG5pY2h0IGdlZnVuZGVuJyA0MDQ7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICBS -ZW1vdmUtSXRlbSAtUGF0aCAkRlBhdGggLUZvcmNlDQogICAgICAgICAgICAgICAgV3JpdGUtTG9n -RWludHJhZyAnYmFja3VwLmdlbG9lc2NodCcgQHsgZGF0ZWluYW1lID0gJE5hbWUgfQ0KICAgICAg -ICAgICAgICAgIFNlbmQtSnNvbiAkUmVzIEB7IHN0YXR1cyA9ICdnZWxvZXNjaHQnIH0NCiAgICAg -ICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjID09PT09 -PT09PT09PT09PT09PT09PSBQRVJTT05FTiA9PT09PT09PT09PT09PT09PT09PT0NCg0KICAgICAg -ICAgICAgIyBQZXJzb24gYW5sZWdlbg0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9w -ZXJzb25lbicgLWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAo -LW5vdCAoVGVzdC1Jc3RBZG1pbikpIHsgU2VuZC1FcnJvciAkUmVzICdLZWluZSBCZXJlY2h0aWd1 -bmcnIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRCb2R5ID0gUmVhZC1Cb2R5ICRS -ZXENCiAgICAgICAgICAgICAgICAkTmV1ID0gJEJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAg -ICAgICAgICAgICAgJFBsYW51bmcgPSBSZWFkLUpzb25GaWxlICdwbGFudW5nLmpzb24nDQoNCiAg -ICAgICAgICAgICAgICAkQWxsZSA9IEAoR2V0LVBlcnNvbmVuQXJyYXkgJFBsYW51bmcpDQogICAg -ICAgICAgICAgICAgJE1heElkID0gMA0KICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRQIGluICRB -bGxlKSB7IGlmIChbaW50XSRQLmlkIC1ndCAkTWF4SWQpIHsgJE1heElkID0gW2ludF0kUC5pZCB9 -IH0NCiAgICAgICAgICAgICAgICAkTmV1ZUlkID0gJE1heElkICsgMQ0KDQogICAgICAgICAgICAg -ICAgIyBFaW5yZWloZW46IHZvci9uYWNoL3VudGVuDQogICAgICAgICAgICAgICAgJEVpbnJlaWhl -biA9IGlmICgkTmV1LmVpbnJlaWhlbikgeyAoW3N0cmluZ10kTmV1LmVpbnJlaWhlbikuVG9Mb3dl -cigpIH0gZWxzZSB7ICd1bnRlbicgfQ0KICAgICAgICAgICAgICAgICRSZWZJZCA9ICROZXUucmVm -ZXJlbnpJZA0KICAgICAgICAgICAgICAgICRaaWVsUG9zID0gJG51bGwNCg0KICAgICAgICAgICAg -ICAgICRBbGxlU29ydGllcnQgPSBAKCRBbGxlIHwgU29ydC1PYmplY3QgLVByb3BlcnR5IEB7RXhw -cmVzc2lvbj17W2ludF0oJF8ucG9zaXRpb24pfTsgQXNjZW5kaW5nPSR0cnVlfSkNCg0KICAgICAg -ICAgICAgICAgIGlmICgoJEVpbnJlaWhlbiAtZXEgJ3ZvcicgLW9yICRFaW5yZWloZW4gLWVxICdu -YWNoJykgLWFuZCAkbnVsbCAtbmUgJFJlZklkKSB7DQogICAgICAgICAgICAgICAgICAgICRSZWZQ -b3MgPSAkbnVsbA0KICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkUCBpbiAkQWxsZVNvcnRp -ZXJ0KSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoW2ludF0kUC5pZCAtZXEgW2ludF0k -UmVmSWQpIHsgJFJlZlBvcyA9IFtpbnRdJFAucG9zaXRpb247IGJyZWFrIH0NCiAgICAgICAgICAg -ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLW5lICRSZWZQb3MpIHsN -CiAgICAgICAgICAgICAgICAgICAgICAgICRaaWVsUG9zID0gaWYgKCRFaW5yZWloZW4gLWVxICd2 -b3InKSB7ICRSZWZQb3MgfSBlbHNlIHsgJFJlZlBvcyArIDEgfQ0KICAgICAgICAgICAgICAgICAg -ICAgICAgZm9yZWFjaCAoJFAgaW4gJEFsbGVTb3J0aWVydCkgew0KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgIGlmIChbaW50XSRQLnBvc2l0aW9uIC1nZSAkWmllbFBvcykgew0KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAkUC5wb3NpdGlvbiA9IFtpbnRdJFAucG9zaXRpb24gKyAx -DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAg -fQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg -ICAgIGlmICgkbnVsbCAtZXEgJFppZWxQb3MpIHsNCiAgICAgICAgICAgICAgICAgICAgJE1heFBv -cyA9IDANCiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJFAgaW4gJEFsbGUpIHsgaWYgKFtp -bnRdJFAucG9zaXRpb24gLWd0ICRNYXhQb3MpIHsgJE1heFBvcyA9IFtpbnRdJFAucG9zaXRpb24g -fSB9DQogICAgICAgICAgICAgICAgICAgICRaaWVsUG9zID0gJE1heFBvcyArIDENCiAgICAgICAg -ICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAjIEF1ZGl0LUl0ZXItQjogbmFjaG5hbWUgaXN0 -IFNvdXJjZS1vZi1UcnV0aCwgbmFtZSBudXIgQmFja3dhcmQtQ29tcGF0LUZhbGxiYWNrLg0KICAg -ICAgICAgICAgICAgICROYWNobmFtZU5ldSA9IGlmICgkTmV1LlBTT2JqZWN0LlByb3BlcnRpZXNb -J25hY2huYW1lJ10gLWFuZCAtbm90IFtzdHJpbmddOjpJc051bGxPcldoaXRlU3BhY2UoW3N0cmlu -Z10kTmV1Lm5hY2huYW1lKSkgew0KICAgICAgICAgICAgICAgICAgICBbc3RyaW5nXSROZXUubmFj -aG5hbWUNCiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJE5ldS5QU09iamVjdC5Qcm9wZXJ0aWVz -WyduYW1lJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgW3N0cmluZ10kTmV1Lm5hbWUNCiAgICAg -ICAgICAgICAgICB9IGVsc2UgeyAnJyB9DQoNCiAgICAgICAgICAgICAgICAkUGVyc29uID0gW1BT -Q3VzdG9tT2JqZWN0XUB7DQogICAgICAgICAgICAgICAgICAgIGlkICAgICAgICAgICA9ICROZXVl -SWQNCiAgICAgICAgICAgICAgICAgICAgYWt0aXYgICAgICAgID0gaWYgKCRudWxsIC1uZSAkTmV1 -LmFrdGl2KSB7IFtib29sXSROZXUuYWt0aXYgfSBlbHNlIHsgJHRydWUgfQ0KICAgICAgICAgICAg -ICAgICAgICBuYWNobmFtZSAgICAgPSAkTmFjaG5hbWVOZXUNCiAgICAgICAgICAgICAgICAgICAg -dm9ybmFtZSAgICAgID0gaWYgKCROZXUudm9ybmFtZSkgeyBbc3RyaW5nXSROZXUudm9ybmFtZSB9 -IGVsc2UgeyAnJyB9DQogICAgICAgICAgICAgICAgICAgIGRpZW5zdGdyYWQgICA9IGlmICgkTmV1 -LmRpZW5zdGdyYWQpIHsgW3N0cmluZ10kTmV1LmRpZW5zdGdyYWQgfSBlbHNlIHsgJycgfQ0KICAg -ICAgICAgICAgICAgICAgICBmdW5rdGlvbiAgICAgPSBpZiAoJE5ldS5mdW5rdGlvbikgeyBbc3Ry -aW5nXSROZXUuZnVua3Rpb24gfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgICAgICBvZSAg -ICAgICAgICAgPSBpZiAoJE5ldS5vZSkgeyBbc3RyaW5nXSROZXUub2UgfSBlbHNlIHsgJycgfQ0K -ICAgICAgICAgICAgICAgICAgICBkaWVuc3RudW1tZXIgPSBpZiAoJE5ldS5kaWVuc3RudW1tZXIp -IHsgW3N0cmluZ10kTmV1LmRpZW5zdG51bW1lciB9IGVsc2UgeyAnJyB9DQogICAgICAgICAgICAg -ICAgICAgIHRlbGVmb24gICAgICA9IGlmICgkTmV1LnRlbGVmb24pIHsgW3N0cmluZ10kTmV1LnRl -bGVmb24gfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiAgICAgPSAk -WmllbFBvcw0KICAgICAgICAgICAgICAgICAgICBlbWFpbCAgICAgICAgPSBpZiAoJE5ldS5lbWFp -bCkgeyBbc3RyaW5nXSROZXUuZW1haWwgfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgICAg -ICBud0tlbm51bmcgICAgPSBpZiAoJE5ldS5ud0tlbm51bmcpIHsgW3N0cmluZ10kTmV1Lm53S2Vu -bnVuZyB9IGVsc2UgeyAnJyB9DQogICAgICAgICAgICAgICAgICAgICMgQXVkaXQtRmluZGluZyBE -MTogb3B0aW9uYWxlIEZlbGRlciBtaXQgbnVsbC1EZWZhdWx0DQogICAgICAgICAgICAgICAgICAg -ICMgc3RhdHQgIiIgKE1pcnJvciBzZXJ2ZXIucHk6MzQwMS0zNDA1KS4NCiAgICAgICAgICAgICAg -ICAgICAgZ2VidXJ0c2RhdHVtID0gaWYgKCROZXUuZ2VidXJ0c2RhdHVtKSB7IFtzdHJpbmddJE5l -dS5nZWJ1cnRzZGF0dW0gfSBlbHNlIHsgJG51bGwgfQ0KICAgICAgICAgICAgICAgIH0NCg0KICAg -ICAgICAgICAgICAgICRQbGFudW5nLnBlcnNvbmVuID0gQCgkQWxsZSArICRQZXJzb24pDQogICAg -ICAgICAgICAgICAgV3JpdGUtSnNvbkZpbGUgJ3BsYW51bmcuanNvbicgJFBsYW51bmcNCiAgICAg -ICAgICAgICAgICAjIEF1dG8tUm9sbGVuLVN5bmMgKERHTC8xLkVCIC0+IHN1cGVyVXNlciwgMS5F -QiBWLiAtPiBmYWNoYXVmc2ljaHRlbikNCiAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAg -ICAgICAgICAgICAkQWRtaW4gPSBSZWFkLUpzb25GaWxlICdhZG1pbi5qc29uJw0KICAgICAgICAg -ICAgICAgICAgICBpZiAoU3luYy1Sb2xsZW5BdXNQZXJzb25lbiAkUGxhbnVuZyAkQWRtaW4pIHsN -CiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlLUpzb25GaWxlICdhZG1pbi5qc29uJyAkQWRt -aW4NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggeyBXcml0 -ZS1XYXJuaW5nICJSb2xsZW4tU3luYyBuYWNoIFBlcnNvbi1BbmxhZ2UgZmVobGdlc2NobGFnZW46 -ICRfIiB9DQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAncGVyc29uLmFuZ2VsZWd0 -JyBAeyBwZXJzb25JZCA9ICROZXVlSWQ7IG5hY2huYW1lID0gIiQoJE5ldS52b3JuYW1lKSAkTmFj -aG5hbWVOZXUiLlRyaW0oKSB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uICRSZXMgQHsgc3Rh -dHVzID0gJ2FuZ2VsZWd0JzsgaWQgPSAkTmV1ZUlkOyBwb3NpdGlvbiA9ICRaaWVsUG9zIH0NCiAg -ICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjIFBl -cnNvbiBha3R1YWxpc2llcmVuDQogICAgICAgICAgICAkUGVyc29uTWF0Y2ggPSBbcmVnZXhdOjpN -YXRjaCgkUGF0aCwgJ14vYXBpL3BlcnNvbmVuLyhcZCspJCcpDQogICAgICAgICAgICBpZiAoJFBl -cnNvbk1hdGNoLlN1Y2Nlc3MgLWFuZCAkTWV0aG9kIC1lcSAnUFVUJykgew0KICAgICAgICAgICAg -ICAgIGlmICgtbm90IChUZXN0LUlzdEFkbWluKSkgeyBTZW5kLUVycm9yICRSZXMgJ0tlaW5lIEJl -cmVjaHRpZ3VuZycgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJElkID0gW2ludF0k -UGVyc29uTWF0Y2guR3JvdXBzWzFdLlZhbHVlDQogICAgICAgICAgICAgICAgJEJvZHkgPSBSZWFk -LUJvZHkgJFJlcQ0KICAgICAgICAgICAgICAgICRVcGRhdGUgPSAkQm9keSB8IENvbnZlcnRGcm9t -LUpzb24NCiAgICAgICAgICAgICAgICAkUGxhbnVuZyA9IFJlYWQtSnNvbkZpbGUgJ3BsYW51bmcu -anNvbicNCg0KICAgICAgICAgICAgICAgICMgQXVkaXQtSXRlci1COiBMZWdhY3ktbmFtZSAtPiBu -YWNobmFtZSBtYXBwZW4sIGRhbm4gbmFtZSBhdXMgVXBkYXRlIGVudGZlcm5lbg0KICAgICAgICAg -ICAgICAgIGlmICgkVXBkYXRlLlBTT2JqZWN0LlByb3BlcnRpZXNbJ25hbWUnXSAtYW5kIC1ub3Qg -JFVwZGF0ZS5QU09iamVjdC5Qcm9wZXJ0aWVzWyduYWNobmFtZSddKSB7DQogICAgICAgICAgICAg -ICAgICAgICRVcGRhdGUgfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAtTmFt -ZSAnbmFjaG5hbWUnIC1WYWx1ZSAoW3N0cmluZ10kVXBkYXRlLm5hbWUpDQogICAgICAgICAgICAg -ICAgfQ0KICAgICAgICAgICAgICAgIGlmICgkVXBkYXRlLlBTT2JqZWN0LlByb3BlcnRpZXNbJ25h -bWUnXSkgew0KICAgICAgICAgICAgICAgICAgICAkVXBkYXRlLlBTT2JqZWN0LlByb3BlcnRpZXMu -UmVtb3ZlKCduYW1lJykNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAjIEF1 -ZGl0LUZpbmRpbmcgRDE6IG9wdGlvbmFsZSBEYXR1bXMtL05vdGl6LUZlbGRlciBhdWYgbnVsbA0K -ICAgICAgICAgICAgICAgICMgbm9ybWFsaXNpZXJlbiAoTWlycm9yIHNlcnZlci5weTozNDM1LTM0 -MzgpLg0KICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRPcHRGZWxkIGluIEAoJ2dlYnVydHNkYXR1 -bScsJ2VuZERhdHVtJywnZXJpbm5lcnVuZ3NOb3RpeicpKSB7DQogICAgICAgICAgICAgICAgICAg -IGlmICgkVXBkYXRlLlBTT2JqZWN0LlByb3BlcnRpZXNbJE9wdEZlbGRdKSB7DQogICAgICAgICAg -ICAgICAgICAgICAgICAkViA9ICRVcGRhdGUuKCRPcHRGZWxkKQ0KICAgICAgICAgICAgICAgICAg -ICAgICAgaWYgKCRWIC1pcyBbc3RyaW5nXSAtYW5kIFtzdHJpbmddOjpJc051bGxPcldoaXRlU3Bh -Y2UoJFYpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFVwZGF0ZS4oJE9wdEZlbGQp -ID0gJG51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAg -fQ0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICRHZWZ1bmRlbiA9ICRmYWxz -ZQ0KICAgICAgICAgICAgICAgIGZvciAoJGkgPSAwOyAkaSAtbHQgJFBsYW51bmcucGVyc29uZW4u -Q291bnQ7ICRpKyspIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKFtpbnRdJFBsYW51bmcucGVy -c29uZW5bJGldLmlkIC1lcSAkSWQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2gg -KCRQcm9wIGluICRVcGRhdGUuUFNPYmplY3QuUHJvcGVydGllcykgew0KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgIGlmICgkUHJvcC5OYW1lIC1uZSAnaWQnKSB7DQogICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgIGlmICgkUGxhbnVuZy5wZXJzb25lblskaV0uUFNPYmplY3QuUHJvcGVy -dGllc1skUHJvcC5OYW1lXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -JFBsYW51bmcucGVyc29uZW5bJGldLigkUHJvcC5OYW1lKSA9ICRQcm9wLlZhbHVlDQogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAkUGxhbnVuZy5wZXJzb25lblskaV0gfCBBZGQtTWVtYmVyIC1NZW1iZXJU -eXBlIE5vdGVQcm9wZXJ0eSAtTmFtZSAkUHJvcC5OYW1lIC1WYWx1ZSAkUHJvcC5WYWx1ZQ0KICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAg -IyBMZWdhY3ktbmFtZS1GZWxkIGVuZGd1ZWx0aWcgYXVzIFBlcnNvbiBlbnRmZXJuZW4sIGZhbGxz -IG5vY2ggdm9yaGFuZGVuDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJFBsYW51bmcucGVy -c29uZW5bJGldLlBTT2JqZWN0LlByb3BlcnRpZXNbJ25hbWUnXSkgew0KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICRMZWdhY3lOYW1lID0gW3N0cmluZ10kUGxhbnVuZy5wZXJzb25lblskaV0u -bmFtZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtbm90IFtzdHJpbmddOjpJc051 -bGxPcldoaXRlU3BhY2UoJExlZ2FjeU5hbWUpIC1hbmQgYA0KICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAoW3N0cmluZ106OklzTnVsbE9yV2hpdGVTcGFjZShbc3RyaW5nXSRQbGFudW5n -LnBlcnNvbmVuWyRpXS5uYWNobmFtZSkpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgIGlmICgkUGxhbnVuZy5wZXJzb25lblskaV0uUFNPYmplY3QuUHJvcGVydGllc1snbmFjaG5h -bWUnXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51bmcucGVy -c29uZW5bJGldLm5hY2huYW1lID0gJExlZ2FjeU5hbWUNCiAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQ -bGFudW5nLnBlcnNvbmVuWyRpXSB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5 -IC1OYW1lICduYWNobmFtZScgLVZhbHVlICRMZWdhY3lOYW1lDQogICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAg -ICAgICAgICAgICAgICAgICAgJFBsYW51bmcucGVyc29uZW5bJGldLlBTT2JqZWN0LlByb3BlcnRp -ZXMuUmVtb3ZlKCduYW1lJykNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg -ICAgICAgICAgICAgICRHZWZ1bmRlbiA9ICR0cnVlOyBicmVhaw0KICAgICAgICAgICAgICAgICAg -ICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRHZWZ1bmRl -bikgeyBTZW5kLUVycm9yICRSZXMgIlBlcnNvbiAkSWQgbmljaHQgZ2VmdW5kZW4iIDQwNDsgY29u -dGludWUgfQ0KICAgICAgICAgICAgICAgIFdyaXRlLUpzb25GaWxlICdwbGFudW5nLmpzb24nICRQ -bGFudW5nDQogICAgICAgICAgICAgICAgIyBBdXRvLVJvbGxlbi1TeW5jIG5hY2ggRWRpdCAoRnVu -a3Rpb24ga2FubiBzaWNoIGdlYWVuZGVydCBoYWJlbikNCiAgICAgICAgICAgICAgICB0cnkgew0K -ICAgICAgICAgICAgICAgICAgICAkQWRtaW4gPSBSZWFkLUpzb25GaWxlICdhZG1pbi5qc29uJw0K -ICAgICAgICAgICAgICAgICAgICBpZiAoU3luYy1Sb2xsZW5BdXNQZXJzb25lbiAkUGxhbnVuZyAk -QWRtaW4pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlLUpzb25GaWxlICdhZG1pbi5q -c29uJyAkQWRtaW4NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gY2F0 -Y2ggeyBXcml0ZS1XYXJuaW5nICJSb2xsZW4tU3luYyBuYWNoIFBlcnNvbi1FZGl0IGZlaGxnZXNj -aGxhZ2VuOiAkXyIgfQ0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ3BlcnNvbi5n -ZWFlbmRlcnQnIEB7IHBlcnNvbklkID0gJElkIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb24g -JFJlcyBAeyBzdGF0dXMgPSAnYWt0dWFsaXNpZXJ0JyB9DQogICAgICAgICAgICAgICAgY29udGlu -dWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyBSZWloZW5mb2xnZSBhZW5kZXJuDQog -ICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3BlcnNvbmVuL3JlaWhlbmZvbGdlJyAtYW5k -ICRNZXRob2QgLWVxICdQVVQnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0 -QWRtaW4pKSB7IFNlbmQtRXJyb3IgJFJlcyAnS2VpbmUgQmVyZWNodGlndW5nJyA0MDM7IGNvbnRp -bnVlIH0NCiAgICAgICAgICAgICAgICAkQm9keSA9IFJlYWQtQm9keSAkUmVxDQogICAgICAgICAg -ICAgICAgJFJlaWhlbmZvbGdlID0gJEJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAg -ICAgICAgJFBsYW51bmcgPSBSZWFkLUpzb25GaWxlICdwbGFudW5nLmpzb24nDQogICAgICAgICAg -ICAgICAgZm9yZWFjaCAoJFIgaW4gJFJlaWhlbmZvbGdlKSB7DQogICAgICAgICAgICAgICAgICAg -IGZvciAoJGkgPSAwOyAkaSAtbHQgJFBsYW51bmcucGVyc29uZW4uQ291bnQ7ICRpKyspIHsNCiAg -ICAgICAgICAgICAgICAgICAgICAgIGlmIChbaW50XSRQbGFudW5nLnBlcnNvbmVuWyRpXS5pZCAt -ZXEgW2ludF0kUi5pZCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5nLnBl -cnNvbmVuWyRpXS5wb3NpdGlvbiA9IFtpbnRdJFIucG9zaXRpb24NCiAgICAgICAgICAgICAgICAg -ICAgICAgICAgICBicmVhaw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg -ICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIFdyaXRlLUpzb25G -aWxlICdwbGFudW5nLmpzb24nICRQbGFudW5nDQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWlu -dHJhZyAncGVyc29uZW4ucmVpaGVuZm9sZ2UuZ2VhZW5kZXJ0JyBAe30NCiAgICAgICAgICAgICAg -ICBTZW5kLUpzb24gJFJlcyBAeyBzdGF0dXMgPSAnYWt0dWFsaXNpZXJ0JyB9DQogICAgICAgICAg -ICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyA9PT09PT09PT09 -PT09PT09PT09PT0gU1RBVElTVElLID09PT09PT09PT09PT09PT09PT09PQ0KICAgICAgICAgICAg -aWYgKCRQYXRoIC1lcSAnL2FwaS9zdGF0aXN0aWsnIC1hbmQgJE1ldGhvZCAtZXEgJ0dFVCcpIHsN -CiAgICAgICAgICAgICAgICBIYW5kbGUtU3RhdGlzdGlrICRSZXMNCiAgICAgICAgICAgICAgICBj -b250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjID09PT09PT09PT09PT09PT09 -PT09PSBEVU1NWURBVEVOIC8gUkVTRVQgPT09PT09PT09PT09PT09PT09PT09DQogICAgICAgICAg -ICBpZiAoJFBhdGggLWVxICcvYXBpL3BsYW51bmcvZHVtbXlkYXRlbicgLWFuZCAkTWV0aG9kIC1l -cSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RBZG1pbikpIHsg -U2VuZC1FcnJvciAkUmVzICdLZWluZSBCZXJlY2h0aWd1bmcnIDQwMzsgY29udGludWUgfQ0KICAg -ICAgICAgICAgICAgIEhhbmRsZS1EdW1teWRhdGVuICRSZXMNCiAgICAgICAgICAgICAgICBjb250 -aW51ZQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9wbGFu -dW5nL3Jlc2V0JyAtYW5kICRNZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAgICAgICAgIGlm -ICgtbm90IChUZXN0LUlzdEFkbWluKSkgeyBTZW5kLUVycm9yICRSZXMgJ0tlaW5lIEJlcmVjaHRp -Z3VuZycgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgSGFuZGxlLVJlc2V0ICRSZXMN -CiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAj -ID09PT09PT09PT09PT09PT09PT09PSBGTEQ6IFNDSElDSFQtSU1QT1JUIChQYXN0ZS1iYXNpZXJ0 -KSA9PT09PT09PT09PT09PT09PT09PT0NCiAgICAgICAgICAgICMgU3BpZWdlbCB6dSBzZXJ2ZXIu -cHkgUE9TVCAvYXBpL2ltcG9ydC9zY2hpY2h0ZW4vdWViZXJuZWhtZW4uDQogICAgICAgICAgICAj -IENsaWVudCBwYXJzdCBkaWUgZ2VwYXN0ZXRlbiBFeGNlbC1EYXRlbiBjbGllbnRzZWl0aWcgdW5k -IHNjaGlja3QNCiAgICAgICAgICAgICMgZWludHJhZWdlICsgcGZsaWNodC1GbGFncyB6dW0gU2No -cmVpYmVuLg0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9pbXBvcnQvc2NoaWNodGVu -L3VlYmVybmVobWVuJyAtYW5kICRNZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAgICAgICAg -IGlmICgtbm90IChUZXN0LUlzdFN1cGVyVXNlcikpIHsgU2VuZC1FcnJvciAkUmVzICdOdXIgU3Vw -ZXJVc2VyIGR1ZXJmZW4gaW1wb3J0aWVyZW4nIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAg -ICAgICRCb2R5ID0gUmVhZC1Cb2R5ICRSZXENCiAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVx -ICRCb2R5KSB7IFNlbmQtRXJyb3IgJFJlcyAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51 -ZSB9DQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgJFBhcmFtID0g -JEJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAg -ICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlcyAnVW5ndWVsdGlnZXMgSlNPTicgNDAwOyBj -b250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICRMb2NrUmVzdWx0 -ID0gJG51bGwNCiAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAkTG9j -a1Jlc3VsdCA9IEludm9rZS1XaXRoRmlsZUxvY2sgJ3BsYW51bmcuanNvbicgew0KICAgICAgICAg -ICAgICAgICAgICAgICAgJFBsYW51bmcgPSBSZWFkLUpzb25GaWxlICdwbGFudW5nLmpzb24nDQog -ICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRQbGFudW5nKSB7IHJldHVybiBA -eyB0eXAgPSAnZXJyb3InOyBjb2RlID0gNDA0OyBtc2cgPSAncGxhbnVuZy5qc29uIG5pY2h0IGdl -ZnVuZGVuJyB9IH0NCg0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJFBsYW51bmcu -UFNPYmplY3QuUHJvcGVydGllc1snZWludHJhZWdlJ10pIHsNCiAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAkUGxhbnVuZyB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1O -YW1lICdlaW50cmFlZ2UnIC1WYWx1ZSAoTmV3LU9iamVjdCBQU09iamVjdCkNCiAgICAgICAgICAg -ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRQbGFudW5n -LlBTT2JqZWN0LlByb3BlcnRpZXNbJ3BmbGljaHQnXSkgew0KICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICRQbGFudW5nIHwgQWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5h -bWUgJ3BmbGljaHQnIC1WYWx1ZSAoTmV3LU9iamVjdCBQU09iamVjdCkNCiAgICAgICAgICAgICAg -ICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICAgICAgIyBBdWRpdC1JSS0xIEYxOiBT -Y2hpY2h0Y29kZS1XaGl0ZWxpc3QgYXVjaCBpbSBJbXBvcnQtUGZhZC4NCiAgICAgICAgICAgICAg -ICAgICAgICAgICMgTWlycm9yIHp1IHNlcnZlci5weTozNTY0LTM1NjguDQogICAgICAgICAgICAg -ICAgICAgICAgICAkQWRtaW5GdWVySW1wb3J0ID0gUmVhZC1Kc29uRmlsZSAnYWRtaW4uanNvbicN -CiAgICAgICAgICAgICAgICAgICAgICAgICRWYWxpZENvZGVzID0gTmV3LU9iamVjdCBTeXN0ZW0u -Q29sbGVjdGlvbnMuR2VuZXJpYy5IYXNoU2V0W3N0cmluZ10NCiAgICAgICAgICAgICAgICAgICAg -ICAgIFt2b2lkXSRWYWxpZENvZGVzLkFkZCgnJykNCiAgICAgICAgICAgICAgICAgICAgICAgIGlm -ICgkbnVsbCAtbmUgJEFkbWluRnVlckltcG9ydCAtYW5kICRBZG1pbkZ1ZXJJbXBvcnQuUFNPYmpl -Y3QuUHJvcGVydGllc1snc2NoaWNodGNvZGVzJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgICAg -ICAgICBmb3JlYWNoICgkU2MgaW4gJEFkbWluRnVlckltcG9ydC5zY2hpY2h0Y29kZXMpIHsNCiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1uZSAkU2MgLWFuZCAkU2Mu -UFNPYmplY3QuUHJvcGVydGllc1snY29kZSddKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICBbdm9pZF0kVmFsaWRDb2Rlcy5BZGQoW3N0cmluZ10kU2MuY29kZSkNCiAgICAg +ICAgICAgICAkUGVyc29uSWQgPSBbc3RyaW5nXSRBLnBlcnNvbklkDQogICAgICAgICAgICAgICAg +aWYgKC1ub3QgKFRlc3QtTG9ja1NhZmVEYXR1bSAkRGF0dW0pIC1vciAtbm90IChUZXN0LUxvY2tT +YWZlSWQgJFBlcnNvbklkKSkgew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXMg +J1VuZ3VlbHRpZ2UgZGF0dW0vcGVyc29uSWQnIDQwMDsgY29udGludWUNCiAgICAgICAgICAgICAg +ICB9DQogICAgICAgICAgICAgICAgJFVzZXJuYW1lID0gJGVudjpVU0VSTkFNRQ0KICAgICAgICAg +ICAgICAgICRSb2xsZSA9IEdldC1Vc2VyUm9sbGUNCiAgICAgICAgICAgICAgICAkUmVzdWx0ID0g +QWNxdWlyZS1DZWxsTG9jayAkRGF0dW0gJFBlcnNvbklkICRVc2VybmFtZSAkUm9sbGUgJGZhbHNl +DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJFJlc3VsdC5vaykgew0KICAgICAgICAgICAgICAg +ICAgICBTZW5kLUpzb24gJFJlcyBAew0KICAgICAgICAgICAgICAgICAgICAgICAgZmVobGVyICAg +PSAnZ2VzcGVycnQnDQogICAgICAgICAgICAgICAgICAgICAgICBtZWxkdW5nICA9ICJXaXJkIGJl +YXJiZWl0ZXQgdm9uICQoJFJlc3VsdC5leGlzdGluZy51c2VybmFtZSkiDQogICAgICAgICAgICAg +ICAgICAgICAgICBzcGVycmVyICA9ICRSZXN1bHQuZXhpc3RpbmcudXNlcm5hbWUNCiAgICAgICAg +ICAgICAgICAgICAgICAgIHJvbGxlICAgID0gJFJlc3VsdC5leGlzdGluZy5yb2xsZQ0KICAgICAg +ICAgICAgICAgICAgICAgICAgc2VpdCAgICAgPSAkUmVzdWx0LmV4aXN0aW5nLmxvY2tlZEF0DQog +ICAgICAgICAgICAgICAgICAgICAgICBrYW5uRm9yY2UgPSAoVGVzdC1EYXJmVWViZXJzY2hyZWli +ZW4gJFJvbGxlKQ0KICAgICAgICAgICAgICAgICAgICB9IDQyMw0KICAgICAgICAgICAgICAgICAg +ICBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb24g +JFJlcyBAew0KICAgICAgICAgICAgICAgICAgICBvayAgICAgICA9ICR0cnVlDQogICAgICAgICAg +ICAgICAgICAgIHRva2VuICAgID0gJFJlc3VsdC5sb2NrLnRva2VuDQogICAgICAgICAgICAgICAg +ICAgIGRhdHVtICAgID0gJERhdHVtDQogICAgICAgICAgICAgICAgICAgIHBlcnNvbklkID0gJFBl +cnNvbklkDQogICAgICAgICAgICAgICAgICAgIHJvbGxlICAgID0gJFJvbGxlDQogICAgICAgICAg +ICAgICAgICAgIGxvY2tlZEF0ID0gJFJlc3VsdC5sb2NrLmxvY2tlZEF0DQogICAgICAgICAgICAg +ICAgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAg +ICAgICMgUE9TVCAvYXBpL2xvY2svemVsbGUvZm9yY2UgIHsgZGF0dW0sIHBlcnNvbklkIH0gLT4g +dWViZXJzY2hyZWlidCBmcmVtZGVuIExvY2sNCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9h +cGkvbG9jay96ZWxsZS9mb3JjZScgLWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAg +ICAgICAgICAkQm9keSA9IFJlYWQtQm9keSAkUmVxDQogICAgICAgICAgICAgICAgaWYgKCRudWxs +IC1lcSAkQm9keSkgeyBTZW5kLUVycm9yICRSZXMgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29u +dGludWUgfQ0KICAgICAgICAgICAgICAgICRBID0gJEJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQog +ICAgICAgICAgICAgICAgJERhdHVtID0gW3N0cmluZ10kQS5kYXR1bQ0KICAgICAgICAgICAgICAg +ICRQZXJzb25JZCA9IFtzdHJpbmddJEEucGVyc29uSWQNCiAgICAgICAgICAgICAgICBpZiAoLW5v +dCAoVGVzdC1Mb2NrU2FmZURhdHVtICREYXR1bSkgLW9yIC1ub3QgKFRlc3QtTG9ja1NhZmVJZCAk +UGVyc29uSWQpKSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlcyAnVW5ndWVs +dGlnZSBkYXR1bS9wZXJzb25JZCcgNDAwOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAg +ICAgICAgICAgICAgICAkVXNlcm5hbWUgPSAkZW52OlVTRVJOQU1FDQogICAgICAgICAgICAgICAg +JFJvbGxlID0gR2V0LVVzZXJSb2xsZQ0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LURh +cmZVZWJlcnNjaHJlaWJlbiAkUm9sbGUpKSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJy +b3IgJFJlcyAnRm9yY2UtTG9jayBudXIgZnVlciBGYWNoYXVmc2ljaHQvU3VwZXJVc2VyJyA0MDM7 +IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICMgT3JpZ2luYWwt +T3duZXIgdm9yIEZvcmNlIGxlc2VuIC0tIGZ1ZXIgQXVkaXQtVHJhaWwgaW0gTG9nYnVjaC4NCiAg +ICAgICAgICAgICAgICAkRXhpc3RpbmdMb2NrRnVlckxvZyA9IFJlYWQtQ2VsbExvY2sgJERhdHVt +ICRQZXJzb25JZA0KICAgICAgICAgICAgICAgICRPcmlnaW5hbE93bmVyID0gaWYgKCRudWxsIC1u +ZSAkRXhpc3RpbmdMb2NrRnVlckxvZykgeyAkRXhpc3RpbmdMb2NrRnVlckxvZy51c2VybmFtZSB9 +IGVsc2UgeyAkbnVsbCB9DQogICAgICAgICAgICAgICAgJFJlc3VsdCA9IEFjcXVpcmUtQ2VsbExv +Y2sgJERhdHVtICRQZXJzb25JZCAkVXNlcm5hbWUgJFJvbGxlICR0cnVlDQogICAgICAgICAgICAg +ICAgV3JpdGUtTG9nRWludHJhZyAnbG9jay5mb3JjZScgQHsNCiAgICAgICAgICAgICAgICAgICAg +ZGF0dW0gICAgICAgICA9ICREYXR1bQ0KICAgICAgICAgICAgICAgICAgICBwZXJzb25JZCAgICAg +ID0gJFBlcnNvbklkDQogICAgICAgICAgICAgICAgICAgIHJvbGxlICAgICAgICAgPSAkUm9sbGUN +CiAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWxPd25lciA9ICRPcmlnaW5hbE93bmVyDQogICAg +ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbiAkUmVzIEB7DQogICAgICAg +ICAgICAgICAgICAgIG9rICAgICAgID0gJHRydWUNCiAgICAgICAgICAgICAgICAgICAgdG9rZW4g +ICAgPSAkUmVzdWx0LmxvY2sudG9rZW4NCiAgICAgICAgICAgICAgICAgICAgZGF0dW0gICAgPSAk +RGF0dW0NCiAgICAgICAgICAgICAgICAgICAgcGVyc29uSWQgPSAkUGVyc29uSWQNCiAgICAgICAg +ICAgICAgICAgICAgcm9sbGUgICAgPSAkUm9sbGUNCiAgICAgICAgICAgICAgICAgICAgbG9ja2Vk +QXQgPSAkUmVzdWx0LmxvY2subG9ja2VkQXQNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAg +ICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyBQT1NUIC9hcGkv +bG9jay96ZWxsZS9oZWFydGJlYXQgIHsgdG9rZW4gfSAtPiBha3R1YWxpc2llcnQgbGFzdEJlYXQN +CiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvbG9jay96ZWxsZS9oZWFydGJlYXQnIC1h +bmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAgICAgJEJvZHkgPSBSZWFkLUJv +ZHkgJFJlcQ0KICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJEJvZHkpIHsgU2VuZC1FcnJv +ciAkUmVzICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAg +ICAkQSA9ICRCb2R5IHwgQ29udmVydEZyb20tSnNvbg0KICAgICAgICAgICAgICAgICRUb2tlbiA9 +IGlmICgkQS5QU09iamVjdC5Qcm9wZXJ0aWVzWyd0b2tlbiddKSB7IFtzdHJpbmddJEEudG9rZW4g +fSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgIGlmIChbc3RyaW5nXTo6SXNOdWxsT3JXaGl0 +ZVNwYWNlKCRUb2tlbikpIHsgU2VuZC1FcnJvciAkUmVzICdUb2tlbiBmZWhsdCcgNDAwOyBjb250 +aW51ZSB9DQogICAgICAgICAgICAgICAgJFJlc3VsdCA9IFJlZnJlc2gtQ2VsbExvY2sgJFRva2Vu +DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJFJlc3VsdC5vaykgew0KICAgICAgICAgICAgICAg +ICAgICBTZW5kLUpzb24gJFJlcyBAeyBmZWhsZXIgPSAndW5iZWthbm50ZXJfbG9jayc7IG1lbGR1 +bmcgPSAnTG9jayBleGlzdGllcnQgbmljaHQgKG1laHIpLicgfSA0MDQNCiAgICAgICAgICAgICAg +ICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgU2VuZC1K +c29uICRSZXMgQHsgb2sgPSAkdHJ1ZTsgbGFzdEJlYXQgPSAkUmVzdWx0LmxvY2subGFzdEJlYXQg +fQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAg +ICMgREVMRVRFIC9hcGkvbG9jay96ZWxsZSAgeyB0b2tlbiB9IC0+IExvY2sgZnJlaWdlYmVuDQog +ICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2xvY2svemVsbGUnIC1hbmQgJE1ldGhvZCAt +ZXEgJ0RFTEVURScpIHsNCiAgICAgICAgICAgICAgICAjIERFTEVURS1Cb2R5IGxlc2VuIChIdHRw +TGlzdGVuZXIgdW50ZXJzdHVldHp0IGRhcykNCiAgICAgICAgICAgICAgICAkQm9keSA9IFJlYWQt +Qm9keSAkUmVxDQogICAgICAgICAgICAgICAgJFRva2VuID0gJG51bGwNCiAgICAgICAgICAgICAg +ICBpZiAoJEJvZHkpIHsNCiAgICAgICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAg +ICAgICAgICAgICRBID0gJEJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAg +ICAgICAgICBpZiAoJEEuUFNPYmplY3QuUHJvcGVydGllc1sndG9rZW4nXSkgeyAkVG9rZW4gPSBb +c3RyaW5nXSRBLnRva2VuIH0NCiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCB7fQ0KICAgICAg +ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAjIEF1Y2ggUXVlcnktU3RyaW5nIHVudGVyc3R1 +ZXR6ZW4sIGZ1ZXIgc2VuZEJlYWNvbi1GYWVsbGUNCiAgICAgICAgICAgICAgICBpZiAoW3N0cmlu +Z106OklzTnVsbE9yV2hpdGVTcGFjZSgkVG9rZW4pIC1hbmQgJFJlcS5VcmwuUXVlcnkpIHsNCiAg +ICAgICAgICAgICAgICAgICAgJFEgPSBbU3lzdGVtLldlYi5IdHRwVXRpbGl0eV06OlBhcnNlUXVl +cnlTdHJpbmcoJFJlcS5VcmwuUXVlcnkpDQogICAgICAgICAgICAgICAgICAgICRUb2tlbiA9IFtz +dHJpbmddJFFbJ3Rva2VuJ10NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYg +KFtzdHJpbmddOjpJc051bGxPcldoaXRlU3BhY2UoJFRva2VuKSkgeyBTZW5kLUVycm9yICRSZXMg +J1Rva2VuIGZlaGx0JyA0MDA7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkUmVzdWx0ID0g +UmVsZWFzZS1DZWxsTG9jayAkVG9rZW4NCiAgICAgICAgICAgICAgICBTZW5kLUpzb24gJFJlcyBA +eyBvayA9ICRSZXN1bHQub2sgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAg +ICB9DQoNCiAgICAgICAgICAgICMgR0VUIC9hcGkvbG9jay96ZWxsZW4gLT4gTGlzdGUgYWxsZXIg +YWt0aXZlbiBMb2NrcyAoZnVlciBMaXZlLUluZGljYXRvci1SZW5kZXIpDQogICAgICAgICAgICBp +ZiAoJFBhdGggLWVxICcvYXBpL2xvY2svemVsbGVuJyAtYW5kICRNZXRob2QgLWVxICdHRVQnKSB7 +DQogICAgICAgICAgICAgICAgJExvY2tzID0gR2V0LUFsbEFjdGl2ZUNlbGxMb2Nrcw0KICAgICAg +ICAgICAgICAgIFNlbmQtSnNvbiAkUmVzIEB7IGxvY2tzID0gJExvY2tzIH0NCiAgICAgICAgICAg +ICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjIEdFVCAvYXBpL3Bs +YW51bmcvY2hhbmdlcz9zZWl0PTxpc28tdHM+IC0+IERlbHRhLUxpc3RlIGZ1ZXIgTGl2ZS1TeW5j +IChQaGFzZSBBNCkNCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvcGxhbnVuZy9jaGFu +Z2VzJyAtYW5kICRNZXRob2QgLWVxICdHRVQnKSB7DQogICAgICAgICAgICAgICAgJFEgPSBbU3lz +dGVtLldlYi5IdHRwVXRpbGl0eV06OlBhcnNlUXVlcnlTdHJpbmcoJFJlcS5VcmwuUXVlcnkpDQog +ICAgICAgICAgICAgICAgJFNlaXQgPSBbc3RyaW5nXSRRWydzZWl0J10NCiAgICAgICAgICAgICAg +ICAkQ2hhbmdlcyA9IEdldC1DaGFuZ2VzU2luY2UgJFNlaXQNCiAgICAgICAgICAgICAgICBTZW5k +LUpzb24gJFJlcyBAew0KICAgICAgICAgICAgICAgICAgICBzZXJ2ZXJUcyA9IChHZXQtRGF0ZSku +VG9Vbml2ZXJzYWxUaW1lKCkuVG9TdHJpbmcoJ28nKQ0KICAgICAgICAgICAgICAgICAgICBjaGFu +Z2VzICA9ICRDaGFuZ2VzDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGNvbnRp +bnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgWmVsbGUgYWVuZGVybg0KICAgICAg +ICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9wbGFudW5nL3plbGxlJyAtYW5kICRNZXRob2QgLWVx +ICdQT1NUJykgew0KICAgICAgICAgICAgICAgICRCb2R5ID0gUmVhZC1Cb2R5ICRSZXENCiAgICAg +ICAgICAgICAgICBpZiAoJG51bGwgLWVxICRCb2R5KSB7IFNlbmQtRXJyb3IgJFJlcyAnQW5mcmFn +ZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJEEgPSAkQm9keSB8 +IENvbnZlcnRGcm9tLUpzb24NCiAgICAgICAgICAgICAgICAkRGF0dW0gPSBbc3RyaW5nXSRBLmRh +dHVtDQogICAgICAgICAgICAgICAgJFBlcnNvbklkID0gW3N0cmluZ10kQS5wZXJzb25JZA0KICAg +ICAgICAgICAgICAgICRXZXJ0ID0gaWYgKCRBLndlcnQpIHsgW3N0cmluZ10kQS53ZXJ0IH0gZWxz +ZSB7ICcnIH0NCiAgICAgICAgICAgICAgICAkSGF0UGZsaWNodCA9ICRBLlBTT2JqZWN0LlByb3Bl +cnRpZXNbJ3BmbGljaHQnXQ0KICAgICAgICAgICAgICAgICRQZmxpY2h0TmV1ID0gaWYgKCRIYXRQ +ZmxpY2h0KSB7IFtib29sXSRBLnBmbGljaHQgfSBlbHNlIHsgJGZhbHNlIH0NCiAgICAgICAgICAg +ICAgICAkSGF0RXJ3YXJ0ZXQgPSAkQS5QU09iamVjdC5Qcm9wZXJ0aWVzWydlcndhcnRldGVyQWx0 +ZXJXZXJ0J10NCiAgICAgICAgICAgICAgICAkRXJ3YXJ0ZXQgPSBpZiAoJEhhdEVyd2FydGV0KSB7 +IFtzdHJpbmddJEEuZXJ3YXJ0ZXRlckFsdGVyV2VydCB9IGVsc2UgeyAkbnVsbCB9DQogICAgICAg +ICAgICAgICAgJExvY2tUb2tlbiA9IGlmICgkQS5QU09iamVjdC5Qcm9wZXJ0aWVzWydsb2NrVG9r +ZW4nXSkgeyBbc3RyaW5nXSRBLmxvY2tUb2tlbiB9IGVsc2UgeyAkbnVsbCB9DQogICAgICAgICAg +ICAgICAgJFVzZXJuYW1lID0gJGVudjpVU0VSTkFNRQ0KICAgICAgICAgICAgICAgICRSb2xsZSA9 +IEdldC1Vc2VyUm9sbGUNCiAgICAgICAgICAgICAgICAkRGFyZlVlYmVyc2NocmVpYmVuID0gVGVz +dC1EYXJmVWViZXJzY2hyZWliZW4gJFJvbGxlDQoNCiAgICAgICAgICAgICAgICAkQWRtaW5GdWVy +VkYgPSBSZWFkLUpzb25GaWxlICdhZG1pbi5qc29uJw0KDQogICAgICAgICAgICAgICAgIyBXaGl0 +ZWxpc3QgZ2VnZW4gYWRtaW4uc2NoaWNodGNvZGVzIC0tIHZlcmhpbmRlcnQgT3JwaGFuLUNvZGVz +IHdpZQ0KICAgICAgICAgICAgICAgICMgZGllICdkZnJVJy8nZGZyL1UnLydhYmcnLVZhcmlhbnRz +LCBkaWUgaGlzdG9yaXNjaCBkdXJjaCBUaXBwZmVobGVyDQogICAgICAgICAgICAgICAgIyBpbiBk +aWUgRGF0ZW4gZ2VsYW5ndCB3YXJlbiAoTWlncmF0aW9uIGluIEF1ZGl0LVBoYXNlLTIpLiBNaXJy +b3INCiAgICAgICAgICAgICAgICAjIHp1IHNlcnZlci5weToyOTQ0LTI5NTIuDQogICAgICAgICAg +ICAgICAgJFZhbGlkQ29kZXMgPSBOZXctT2JqZWN0IFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmlj +Lkhhc2hTZXRbc3RyaW5nXQ0KICAgICAgICAgICAgICAgIFt2b2lkXSRWYWxpZENvZGVzLkFkZCgn +JykNCiAgICAgICAgICAgICAgICBpZiAoJG51bGwgLW5lICRBZG1pbkZ1ZXJWRiAtYW5kICRBZG1p +bkZ1ZXJWRi5QU09iamVjdC5Qcm9wZXJ0aWVzWydzY2hpY2h0Y29kZXMnXSkgew0KICAgICAgICAg +ICAgICAgICAgICBmb3JlYWNoICgkU2MgaW4gJEFkbWluRnVlclZGLnNjaGljaHRjb2Rlcykgew0K +ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1uZSAkU2MgLWFuZCAkU2MuUFNPYmpl +Y3QuUHJvcGVydGllc1snY29kZSddKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgW3Zv +aWRdJFZhbGlkQ29kZXMuQWRkKFtzdHJpbmddJFNjLmNvZGUpDQogICAgICAgICAgICAgICAgICAg +ICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAg +ICAgICAgICAgaWYgKC1ub3QgJFZhbGlkQ29kZXMuQ29udGFpbnMoJFdlcnQpKSB7DQogICAgICAg +ICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlcyAiVW5iZWthbm50ZXIgU2NoaWNodGNvZGU6ICck +V2VydCciIDQwMA0KICAgICAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgICAg +IH0NCg0KICAgICAgICAgICAgICAgICMgVmVyYmluZGxpY2hrZWl0c2ZlbnN0ZXIgKEQuMSk6IHJl +Z3VsYWVyZSBVc2VyIGtvZW5uZW4gVGFnZSBkYXZvciBuaWNodCBlZGl0aWVyZW4NCiAgICAgICAg +ICAgICAgICBpZiAoJFJvbGxlIC1lcSAndXNlcicpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYg +KFRlc3QtRGF0dW1JblZlcmJpbmRsaWNoa2VpdCAkRGF0dW0gJEFkbWluRnVlclZGKSB7DQogICAg +ICAgICAgICAgICAgICAgICAgICBTZW5kLUpzb24gJFJlcyBAew0KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgIGZlaGxlciAgICAgICAgICA9ICd2ZXJiaW5kbGljaGtlaXRzZmVuc3RlcicNCiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICBtZWxkdW5nICAgICAgICAgPSAnRGF0dW0gbGllZ3Qg +aW0gVmVyYmluZGxpY2hrZWl0c2ZlbnN0ZXIgLSBmdWVyIHJlZ3VsYWVyZSBVc2VyIG5vY2ggZ2Vz +cGVycnQuJw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVyc3RlckZyZWllclRhZyA9IChH +ZXQtRXJzdGVyRnJlaWVyVGFnSXNvICRBZG1pbkZ1ZXJWRikNCiAgICAgICAgICAgICAgICAgICAg +ICAgIH0gNDAzDQogICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAg +ICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgIyBQZXNzaW1p +c3RpYyBDZWxsLUxvY2sgcHJ1ZWZlbiAoUGhhc2UgQSkNCiAgICAgICAgICAgICAgICAkRXhpc3Rp +bmdMb2NrID0gUmVhZC1DZWxsTG9jayAkRGF0dW0gJFBlcnNvbklkDQogICAgICAgICAgICAgICAg +aWYgKCRudWxsIC1uZSAkRXhpc3RpbmdMb2NrKSB7DQogICAgICAgICAgICAgICAgICAgICRUb2tl +blBhc3N0ID0gKCRMb2NrVG9rZW4gLWFuZCAkRXhpc3RpbmdMb2NrLnRva2VuIC1lcSAkTG9ja1Rv +a2VuKQ0KICAgICAgICAgICAgICAgICAgICAkU2VsYnN0TG9jayA9ICgkRXhpc3RpbmdMb2NrLnVz +ZXJuYW1lIC1pZXEgJFVzZXJuYW1lKQ0KICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkVG9r +ZW5QYXNzdCAtYW5kIC1ub3QgJFNlbGJzdExvY2sgLWFuZCAtbm90ICREYXJmVWViZXJzY2hyZWli +ZW4pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIFNlbmQtSnNvbiAkUmVzIEB7DQogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgZmVobGVyICA9ICdnZXNwZXJydCcNCiAgICAgICAgICAgICAg +ICAgICAgICAgICAgICBtZWxkdW5nID0gIkRpZXNlIFplbGxlIHdpcmQgZ2VyYWRlIHZvbiAkKCRF +eGlzdGluZ0xvY2sudXNlcm5hbWUpIGJlYXJiZWl0ZXQuIg0KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgIHNwZXJyZXIgPSAkRXhpc3RpbmdMb2NrLnVzZXJuYW1lDQogICAgICAgICAgICAgICAg +ICAgICAgICAgICAgcm9sbGUgICA9ICRFeGlzdGluZ0xvY2sucm9sbGUNCiAgICAgICAgICAgICAg +ICAgICAgICAgICAgICBzZWl0ICAgID0gJEV4aXN0aW5nTG9jay5sb2NrZWRBdA0KICAgICAgICAg +ICAgICAgICAgICAgICAgfSA0MjMNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlDQog +ICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAg +ICAkTG9ja1Jlc3VsdCA9ICRudWxsDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAg +ICAgICAgICAgJExvY2tSZXN1bHQgPSBJbnZva2UtV2l0aEZpbGVMb2NrICdwbGFudW5nLmpzb24n +IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5nID0gUmVhZC1Kc29uRmlsZSAncGxh +bnVuZy5qc29uJw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkUGxhbnVu +ZykgeyByZXR1cm4gQHsgdHlwID0gJ2Vycm9yJzsgY29kZSA9IDQwNDsgbXNnID0gJ3BsYW51bmcu +anNvbiBuaWNodCBnZWZ1bmRlbicgfSB9DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICRBbHRl +cldlcnQgPSAnJw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJFBsYW51bmcuUFNP +YmplY3QuUHJvcGVydGllc1snZWludHJhZWdlJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAkUGxhbnVuZyB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1l +ICdlaW50cmFlZ2UnIC1WYWx1ZSAoTmV3LU9iamVjdCBQU09iamVjdCkNCiAgICAgICAgICAgICAg +ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRQbGFudW5nLmVp +bnRyYWVnZS5QU09iamVjdC5Qcm9wZXJ0aWVzWyREYXR1bV0pIHsNCiAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAkUGxhbnVuZy5laW50cmFlZ2UgfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5v +dGVQcm9wZXJ0eSAtTmFtZSAkRGF0dW0gLVZhbHVlIChOZXctT2JqZWN0IFBTT2JqZWN0KQ0KICAg +ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg +ICBpZiAoJFBsYW51bmcuZWludHJhZWdlLiREYXR1bS5QU09iamVjdC5Qcm9wZXJ0aWVzWyRQZXJz +b25JZF0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEFsdGVyV2VydCA9IFtz +dHJpbmddJFBsYW51bmcuZWludHJhZWdlLiREYXR1bS4kUGVyc29uSWQNCiAgICAgICAgICAgICAg +ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAg +ICAgICAgICAgICAgICMgT3B0aW1pc3RpYy1Db25jdXJyZW5jeQ0KICAgICAgICAgICAgICAgICAg +ICAgICAgaWYgKCRIYXRFcndhcnRldCAtYW5kICRFcndhcnRldCAtbmUgJEFsdGVyV2VydCkgew0K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBAeyB0eXAgPSAna29uZmxpa3QnOyBh +a3R1ZWxsID0gJEFsdGVyV2VydCB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAg +ICAgICAgICAgICAgICAgICAgICMgUGZsaWNodC1PdmVycmlkZS1DaGVjayAoUGhhc2UgQik6IGJl +c3RlaGVuZGVzIHBmbGljaHQ9dHJ1ZSBudXIgU1UvRmFjaGF1ZnNpY2h0DQogICAgICAgICAgICAg +ICAgICAgICAgICAkQWx0ZXJQZmxpY2h0ID0gJGZhbHNlDQogICAgICAgICAgICAgICAgICAgICAg +ICBpZiAoJFBsYW51bmcuUFNPYmplY3QuUHJvcGVydGllc1sncGZsaWNodCddIC1hbmQgJFBsYW51 +bmcucGZsaWNodC5QU09iamVjdC5Qcm9wZXJ0aWVzWyREYXR1bV0pIHsNCiAgICAgICAgICAgICAg +ICAgICAgICAgICAgICBpZiAoJFBsYW51bmcucGZsaWNodC4kRGF0dW0uUFNPYmplY3QuUHJvcGVy +dGllc1skUGVyc29uSWRdKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRBbHRl +clBmbGljaHQgPSBbYm9vbF0kUGxhbnVuZy5wZmxpY2h0LiREYXR1bS4kUGVyc29uSWQNCiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAg +ICAgICAgICAgICAgICAgICAgICBpZiAoJEFsdGVyUGZsaWNodCAtYW5kIC1ub3QgJERhcmZVZWJl +cnNjaHJlaWJlbikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBAeyB0eXAg +PSAncGZsaWNodGdlc3BlcnJ0JzsgYWx0ZXJXZXJ0ID0gJEFsdGVyV2VydCB9DQogICAgICAgICAg +ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAjIFBmbGljaHQtTkVVLVNl +dHplbjogbnVyIFNVL0ZhY2hhdWZzaWNodA0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRI +YXRQZmxpY2h0IC1hbmQgJFBmbGljaHROZXUgLWFuZCAtbm90ICREYXJmVWViZXJzY2hyZWliZW4p +IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQHsgdHlwID0gJ3BmbGljaHRz +ZXR6dW5nVmVyYm90ZW4nIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAg +ICAgICAgICAgICAgICAgaWYgKFtzdHJpbmddOjpJc051bGxPcldoaXRlU3BhY2UoJFdlcnQpKSB7 +DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRQbGFudW5nLmVpbnRyYWVnZS4kRGF0 +dW0uUFNPYmplY3QuUHJvcGVydGllc1skUGVyc29uSWRdKSB7DQogICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICRQbGFudW5nLmVpbnRyYWVnZS4kRGF0dW0uUFNPYmplY3QuUHJvcGVydGll +cy5SZW1vdmUoJFBlcnNvbklkKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAg +ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg +aWYgKCRQbGFudW5nLmVpbnRyYWVnZS4kRGF0dW0uUFNPYmplY3QuUHJvcGVydGllc1skUGVyc29u +SWRdKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5nLmVpbnRyYWVn +ZS4kRGF0dW0uJFBlcnNvbklkID0gJFdlcnQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 +IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUGxhbnVuZy5laW50cmFl +Z2UuJERhdHVtIHwgQWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgJFBl +cnNvbklkIC1WYWx1ZSAkV2VydA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAg +ICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICAgICAgIyBQZmxpY2h0 +LUZsYWcgc2VwYXJhdCB2ZXJ3YWx0ZW4NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtbm90 +ICRQbGFudW5nLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3BmbGljaHQnXSkgew0KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICRQbGFudW5nIHwgQWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJv +cGVydHkgLU5hbWUgJ3BmbGljaHQnIC1WYWx1ZSAoTmV3LU9iamVjdCBQU09iamVjdCkNCiAgICAg +ICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICRXZXJ0Vm9yaGFu +ZGVuID0gLW5vdCBbc3RyaW5nXTo6SXNOdWxsT3JXaGl0ZVNwYWNlKCRXZXJ0KQ0KICAgICAgICAg +ICAgICAgICAgICAgICAgJFNvbGxTZXR6ZW4gPSAkSGF0UGZsaWNodCAtYW5kICRQZmxpY2h0TmV1 +IC1hbmQgJFdlcnRWb3JoYW5kZW4NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkU29sbFNl +dHplbikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRQbGFudW5nLnBm +bGljaHQuUFNPYmplY3QuUHJvcGVydGllc1skRGF0dW1dKSB7DQogICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICRQbGFudW5nLnBmbGljaHQgfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5v +dGVQcm9wZXJ0eSAtTmFtZSAkRGF0dW0gLVZhbHVlIChOZXctT2JqZWN0IFBTT2JqZWN0KQ0KICAg +ICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBp +ZiAoJFBsYW51bmcucGZsaWNodC4kRGF0dW0uUFNPYmplY3QuUHJvcGVydGllc1skUGVyc29uSWRd +KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5nLnBmbGljaHQuJERh +dHVtLiRQZXJzb25JZCA9ICR0cnVlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl +IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51bmcucGZsaWNodC4kRGF0 +dW0gfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAtTmFtZSAkUGVyc29uSWQg +LVZhbHVlICR0cnVlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg +ICAgICAgICAgICAgfSBlbHNlaWYgKCRIYXRQZmxpY2h0IC1vciAtbm90ICRXZXJ0Vm9yaGFuZGVu +KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRQbGFudW5nLnBmbGljaHQuUFNP +YmplY3QuUHJvcGVydGllc1skRGF0dW1dKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgIGlmICgkUGxhbnVuZy5wZmxpY2h0LiREYXR1bS5QU09iamVjdC5Qcm9wZXJ0aWVzWyRQZXJz +b25JZF0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5nLnBm +bGljaHQuJERhdHVtLlBTT2JqZWN0LlByb3BlcnRpZXMuUmVtb3ZlKCRQZXJzb25JZCkNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAg -IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICAgICAg -JEFueiA9IDA7ICROT3JwaGFuID0gMA0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRQYXJh -bS5QU09iamVjdC5Qcm9wZXJ0aWVzWydlaW50cmFlZ2UnXSAtYW5kICRudWxsIC1uZSAkUGFyYW0u -ZWludHJhZWdlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJERhdHVt -UHJvcCBpbiAkUGFyYW0uZWludHJhZWdlLlBTT2JqZWN0LlByb3BlcnRpZXMpIHsNCiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgJERhdHVtID0gJERhdHVtUHJvcC5OYW1lDQogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICRQaWRNYXAgPSAkRGF0dW1Qcm9wLlZhbHVlDQogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRQbGFudW5nLmVpbnRyYWVnZS5Q -U09iamVjdC5Qcm9wZXJ0aWVzWyREYXR1bV0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICRQbGFudW5nLmVpbnRyYWVnZSB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90 -ZVByb3BlcnR5IC1OYW1lICREYXR1bSAtVmFsdWUgKE5ldy1PYmplY3QgUFNPYmplY3QpDQogICAg +ICAgICBpZiAoQCgkUGxhbnVuZy5wZmxpY2h0LiREYXR1bS5QU09iamVjdC5Qcm9wZXJ0aWVzKS5D +b3VudCAtZXEgMCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51 +bmcucGZsaWNodC5QU09iamVjdC5Qcm9wZXJ0aWVzLlJlbW92ZSgkRGF0dW0pDQogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQog +ICAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRl +LVBsYW51bmdNaXRJbnRlZ3JpdGFldCAkUGxhbnVuZyBAKA0KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgIEB7IGtpbmQgPSAnZWludHJhZWdlJzsgZGF0dW0gPSAkRGF0dW07IHBlcnNvbklkID0g +JFBlcnNvbklkIH0sDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgQHsga2luZCA9ICdwZmxp +Y2h0JzsgICBkYXR1bSA9ICREYXR1bTsgcGVyc29uSWQgPSAkUGVyc29uSWQgfQ0KICAgICAgICAg +ICAgICAgICAgICAgICAgKQ0KICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEB7IHR5cCA9 +ICdvayc7IGFsdGVyV2VydCA9ICRBbHRlcldlcnQ7IGFsdGVyUGZsaWNodCA9ICRBbHRlclBmbGlj +aHQ7IHBsYW51bmcgPSAkUGxhbnVuZyB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAg +ICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzICIk +XyIgNTAzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgIGlm +ICgkTG9ja1Jlc3VsdC50eXAgLWVxICdlcnJvcicpIHsgU2VuZC1FcnJvciAkUmVzICRMb2NrUmVz +dWx0Lm1zZyAkTG9ja1Jlc3VsdC5jb2RlOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgaWYg +KCRMb2NrUmVzdWx0LnR5cCAtZXEgJ2tvbmZsaWt0Jykgew0KICAgICAgICAgICAgICAgICAgICBT +ZW5kLUpzb24gJFJlcyBAew0KICAgICAgICAgICAgICAgICAgICAgICAgZmVobGVyICAgICAgICA9 +ICdrb25mbGlrdCcNCiAgICAgICAgICAgICAgICAgICAgICAgIG1lbGR1bmcgICAgICAgPSAnRGll +c2UgWmVsbGUgd3VyZGUgaW56d2lzY2hlbiBnZWFlbmRlcnQuJw0KICAgICAgICAgICAgICAgICAg +ICAgICAgYWt0dWVsbGVyV2VydCA9ICRMb2NrUmVzdWx0LmFrdHVlbGwNCiAgICAgICAgICAgICAg +ICAgICAgfSA0MDkNCiAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAg +ICB9DQogICAgICAgICAgICAgICAgaWYgKCRMb2NrUmVzdWx0LnR5cCAtZXEgJ3BmbGljaHRnZXNw +ZXJydCcpIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1Kc29uICRSZXMgQHsNCiAgICAgICAg +ICAgICAgICAgICAgICAgIGZlaGxlciAgICAgICAgPSAncGZsaWNodGdlc3BlcnJ0Jw0KICAgICAg +ICAgICAgICAgICAgICAgICAgbWVsZHVuZyAgICAgICA9ICdEaWVzZSBaZWxsZSBpc3QgYWxzIFBm +bGljaHQtU2V0enVuZyBtYXJraWVydC4gTnVyIEZhY2hhdWZzaWNodC9TdXBlclVzZXIgZGFyZiBz +aWUgYWVuZGVybi4nDQogICAgICAgICAgICAgICAgICAgICAgICBha3R1ZWxsZXJXZXJ0ID0gJExv +Y2tSZXN1bHQuYWx0ZXJXZXJ0DQogICAgICAgICAgICAgICAgICAgIH0gNDAzDQogICAgICAgICAg +ICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlm +ICgkTG9ja1Jlc3VsdC50eXAgLWVxICdwZmxpY2h0c2V0enVuZ1ZlcmJvdGVuJykgew0KICAgICAg +ICAgICAgICAgICAgICBTZW5kLUpzb24gJFJlcyBAew0KICAgICAgICAgICAgICAgICAgICAgICAg +ZmVobGVyICA9ICdwZmxpY2h0c2V0enVuZ1ZlcmJvdGVuJw0KICAgICAgICAgICAgICAgICAgICAg +ICAgbWVsZHVuZyA9ICdQZmxpY2h0LVNldHp1bmdlbiBrb2VubmVuIG51ciBGYWNoYXVmc2ljaHQv +U3VwZXJVc2VyIHZvcm5laG1lbi4nDQogICAgICAgICAgICAgICAgICAgIH0gNDAzDQogICAgICAg +ICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAg +ICAgJEFsdGVyV2VydCAgICA9ICRMb2NrUmVzdWx0LmFsdGVyV2VydA0KICAgICAgICAgICAgICAg +ICRBbHRlclBmbGljaHQgPSAkTG9ja1Jlc3VsdC5hbHRlclBmbGljaHQNCiAgICAgICAgICAgICAg +ICAkUGxhbnVuZyAgICAgID0gJExvY2tSZXN1bHQucGxhbnVuZw0KICAgICAgICAgICAgICAgICRJ +c3RPdmVycmlkZSAgPSAoJEFsdGVyUGZsaWNodCAtYW5kICREYXJmVWViZXJzY2hyZWliZW4pIC1v +ciBgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgkbnVsbCAtbmUgJEV4aXN0aW5n +TG9jayAtYW5kIC1ub3QgKCRFeGlzdGluZ0xvY2sudXNlcm5hbWUgLWllcSAkVXNlcm5hbWUpIC1h +bmQgJERhcmZVZWJlcnNjaHJlaWJlbikNCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFn +ICd6ZWxsZS5nZWFlbmRlcnQnIEB7DQogICAgICAgICAgICAgICAgICAgIGRhdHVtICAgICA9ICRE +YXR1bQ0KICAgICAgICAgICAgICAgICAgICBwZXJzb25JZCAgPSAkUGVyc29uSWQNCiAgICAgICAg +ICAgICAgICAgICAgYWx0ZXJXZXJ0ID0gJEFsdGVyV2VydA0KICAgICAgICAgICAgICAgICAgICBu +ZXVlcldlcnQgPSAkV2VydA0KICAgICAgICAgICAgICAgICAgICBwZmxpY2h0ICAgPSBpZiAoJEhh +dFBmbGljaHQpIHsgJFBmbGljaHROZXUgfSBlbHNlIHsgJG51bGwgfQ0KICAgICAgICAgICAgICAg +ICAgICByb2xsZSAgICAgPSAkUm9sbGUNCiAgICAgICAgICAgICAgICAgICAgb3ZlcnJpZGUgID0g +JElzdE92ZXJyaWRlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIEFkZC1DaGFu +Z2VMb2dFbnRyeSAnemVsbGUnICREYXR1bSAkUGVyc29uSWQgJFdlcnQgJFVzZXJuYW1lICRSb2xs +ZSBAew0KICAgICAgICAgICAgICAgICAgICBhbHRlcldlcnQgPSAkQWx0ZXJXZXJ0DQogICAgICAg +ICAgICAgICAgICAgIHBmbGljaHQgICA9IGlmICgkSGF0UGZsaWNodCkgeyAkUGZsaWNodE5ldSB9 +IGVsc2UgeyAkbnVsbCB9DQogICAgICAgICAgICAgICAgICAgIG92ZXJyaWRlICA9ICRJc3RPdmVy +cmlkZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoJEFsdGVyV2VydCAt +bmUgJFdlcnQpIHsNCiAgICAgICAgICAgICAgICAgICAgdHJ5IHsgTm90aWZ5LUFlbmRlcnVuZyAk +UGxhbnVuZyAkUGVyc29uSWQgJERhdHVtICRBbHRlcldlcnQgJFdlcnQgfSBjYXRjaCB7IERlYnVn +LUxvZyAnTUFJTCcgIkZlaGxlcjogJF8iIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAg +ICAgICAgU2VuZC1Kc29uICRSZXMgQHsgc3RhdHVzID0gJ2dlc3BlaWNoZXJ0JzsgYWx0ZXJXZXJ0 +ID0gJEFsdGVyV2VydDsgcm9sbGUgPSAkUm9sbGU7IG92ZXJyaWRlID0gJElzdE92ZXJyaWRlIH0N +CiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAj +IEZMRDogRFNNLVRvZ2dsZSAoUGhhc2UgQTU6IEZpbGUtTG9jayArIENoYW5nZS1Mb2cpDQogICAg +ICAgICAgICAjIFdhciBpbiBzZXJ2ZXIucHMxIGJpc2hlciBnYXIgbmljaHQgdm9yaGFuZGVuIC0g +bnVyIHNlcnZlci5weSBoYXR0ZSBlcy4NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkv +cGxhbnVuZy9kc20nIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAgICAg +aWYgKC1ub3QgKFRlc3QtSXN0QWRtaW4pKSB7IFNlbmQtRXJyb3IgJFJlcyAnS2VpbmUgQmVyZWNo +dGlndW5nJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkQm9keSA9IFJlYWQtQm9k +eSAkUmVxDQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkQm9keSkgeyBTZW5kLUVycm9y +ICRSZXMgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAg +ICRBID0gJEJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgJERhdHVtID0g +W3N0cmluZ10kQS5kYXR1bQ0KICAgICAgICAgICAgICAgICRGbGFnID0gW2Jvb2xdJEEuYWt0aXYN +CiAgICAgICAgICAgICAgICBpZiAoW3N0cmluZ106OklzTnVsbE9yV2hpdGVTcGFjZSgkRGF0dW0p +KSB7IFNlbmQtRXJyb3IgJFJlcyAnZGF0dW0gZmVobHQnIDQwMDsgY29udGludWUgfQ0KICAgICAg +ICAgICAgICAgICRVc2VybmFtZSA9ICRlbnY6VVNFUk5BTUUNCiAgICAgICAgICAgICAgICAkUm9s +bGUgPSBHZXQtVXNlclJvbGxlDQogICAgICAgICAgICAgICAgJExvY2tSZXN1bHQgPSAkbnVsbA0K +ICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICRMb2NrUmVzdWx0ID0g +SW52b2tlLVdpdGhGaWxlTG9jayAncGxhbnVuZy5qc29uJyB7DQogICAgICAgICAgICAgICAgICAg +ICAgICAkUGxhbnVuZyA9IFJlYWQtSnNvbkZpbGUgJ3BsYW51bmcuanNvbicNCiAgICAgICAgICAg +ICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJFBsYW51bmcpIHsgcmV0dXJuIEB7IHR5cCA9ICdl +cnJvcic7IGNvZGUgPSA0MDQ7IG1zZyA9ICdwbGFudW5nLmpzb24gbmljaHQgZ2VmdW5kZW4nIH0g +fQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJFBsYW51bmcuUFNPYmplY3QuUHJv +cGVydGllc1snZHNtJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUGxhbnVuZyB8 +IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1lICdkc20nIC1WYWx1ZSAo +TmV3LU9iamVjdCBQU09iamVjdCkNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAg +ICAgICAgICAgICAgICAgICRBbHQgPSAkZmFsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgIGlm +ICgkUGxhbnVuZy5kc20uUFNPYmplY3QuUHJvcGVydGllc1skRGF0dW1dKSB7DQogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgJEFsdCA9IFtib29sXSRQbGFudW5nLmRzbS4kRGF0dW0NCiAgICAg +ICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkRmxhZykg +ew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkUGxhbnVuZy5kc20uUFNPYmplY3Qu +UHJvcGVydGllc1skRGF0dW1dKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQ +bGFudW5nLmRzbS4kRGF0dW0gPSAkdHJ1ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0g +ZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5nLmRzbSB8IEFk +ZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1lICREYXR1bSAtVmFsdWUgJHRy +dWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAg +ICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkUGxhbnVuZy5kc20u +UFNPYmplY3QuUHJvcGVydGllc1skRGF0dW1dKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICRQbGFudW5nLmRzbS5QU09iamVjdC5Qcm9wZXJ0aWVzLlJlbW92ZSgkRGF0dW0pDQog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0K +ICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtUGxhbnVuZ01pdEludGVncml0YWV0ICRQbGFu +dW5nIEAoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgQHsga2luZCA9ICdkc20nOyBkYXR1 +bSA9ICREYXR1bSB9DQogICAgICAgICAgICAgICAgICAgICAgICApDQogICAgICAgICAgICAgICAg +ICAgICAgICByZXR1cm4gQHsgdHlwID0gJ29rJzsgYWx0ID0gJEFsdCB9DQogICAgICAgICAgICAg +ICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAg +U2VuZC1FcnJvciAkUmVzICIkXyIgNTAzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAg +ICAgICAgICAgICAgICBpZiAoJExvY2tSZXN1bHQudHlwIC1lcSAnZXJyb3InKSB7IFNlbmQtRXJy +b3IgJFJlcyAkTG9ja1Jlc3VsdC5tc2cgJExvY2tSZXN1bHQuY29kZTsgY29udGludWUgfQ0KICAg +ICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ2RzbS5nZWFlbmRlcnQnIEB7IGRhdHVtID0g +JERhdHVtOyBha3RpdiA9ICRGbGFnOyByb2xsZSA9ICRSb2xsZSB9DQogICAgICAgICAgICAgICAg +QWRkLUNoYW5nZUxvZ0VudHJ5ICdkc20nICREYXR1bSAkbnVsbCAoW3N0cmluZ10kRmxhZy5Ub1N0 +cmluZygpLlRvTG93ZXIoKSkgJFVzZXJuYW1lICRSb2xsZSBAew0KICAgICAgICAgICAgICAgICAg +ICBha3RpdiA9ICRGbGFnDQogICAgICAgICAgICAgICAgICAgIGFsdCAgID0gJExvY2tSZXN1bHQu +YWx0DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbiAkUmVzIEB7 +IHN0YXR1cyA9ICdnZXNwZWljaGVydCc7IGRhdHVtID0gJERhdHVtOyBha3RpdiA9ICRGbGFnIH0N +CiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAj +ID09PT09PT09PT09PT09PT09PT09PSBaRUxMRU4tQlVMSyAoUGhhc2UgQzogQXV0b0ZpbGwtRG5E +KSA9PT09PT09PT09PT09PT09PT09PT0NCiAgICAgICAgICAgICMgUFVUIC9hcGkvcGxhbnVuZy96 +ZWxsZW4tYnVsayB7IHplbGxlbjogW3tkYXR1bSwgcGVyc29uSWQsIHdlcnQsIGVyd2FydGV0LCBs +b2NrVG9rZW4/fSwgLi4uXSB9DQogICAgICAgICAgICAjIDIwNyBNdWx0aS1TdGF0dXM6IHsgZXJm +b2xncmVpY2g6W10sIGtvbmZsaWt0ZTpbXSwgZ2VzcGVycnQ6W10sIHZlcmJvdGVuOltdLCBmZWhs +ZXI6W10gfQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9wbGFudW5nL3plbGxlbi1i +dWxrJyAtYW5kICRNZXRob2QgLWVxICdQVVQnKSB7DQogICAgICAgICAgICAgICAgJEJvZHkgPSBS +ZWFkLUJvZHkgJFJlcQ0KICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJEJvZHkpIHsgU2Vu +ZC1FcnJvciAkUmVzICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAg +ICAgICAgICAkQSA9ICRCb2R5IHwgQ29udmVydEZyb20tSnNvbg0KICAgICAgICAgICAgICAgIGlm +ICgtbm90ICRBLnplbGxlbiAtb3IgQCgkQS56ZWxsZW4pLkNvdW50IC1lcSAwKSB7DQogICAgICAg +ICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlcyAnemVsbGVuLUFycmF5IGZlaGx0IG9kZXIgbGVl +cicgNDAwOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAo +QCgkQS56ZWxsZW4pLkNvdW50IC1ndCA1MDApIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1F +cnJvciAkUmVzICdNYXhpbWFsIDUwMCBaZWxsZW4gcHJvIEJ1bGstUmVxdWVzdCcgNDEzOyBjb250 +aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkVXNlcm5hbWUgPSAkZW52 +OlVTRVJOQU1FDQogICAgICAgICAgICAgICAgJFJvbGxlID0gR2V0LVVzZXJSb2xsZQ0KICAgICAg +ICAgICAgICAgICREYXJmVWViZXIgPSBUZXN0LURhcmZVZWJlcnNjaHJlaWJlbiAkUm9sbGUNCg0K +ICAgICAgICAgICAgICAgICMgUHJlLUNoZWNrIENlbGwtTG9ja3MNCiAgICAgICAgICAgICAgICAk +R2VzcGVycnQgPSBOZXctT2JqZWN0IFN5c3RlbS5Db2xsZWN0aW9ucy5BcnJheUxpc3QNCiAgICAg +ICAgICAgICAgICBmb3JlYWNoICgkeiBpbiAkQS56ZWxsZW4pIHsNCiAgICAgICAgICAgICAgICAg +ICAgJGQgPSBbc3RyaW5nXSR6LmRhdHVtOyAkcCA9IFtzdHJpbmddJHoucGVyc29uSWQNCiAgICAg +ICAgICAgICAgICAgICAgaWYgKC1ub3QgJGQgLW9yIC1ub3QgJHApIHsgY29udGludWUgfQ0KICAg +ICAgICAgICAgICAgICAgICAkTCA9IFJlYWQtQ2VsbExvY2sgJGQgJHANCiAgICAgICAgICAgICAg +ICAgICAgaWYgKCRudWxsIC1uZSAkTCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJG93biA9 +ICgkTC51c2VybmFtZSAtaWVxICRVc2VybmFtZSkNCiAgICAgICAgICAgICAgICAgICAgICAgICR0 +b2tPayA9ICR6LlBTT2JqZWN0LlByb3BlcnRpZXNbJ2xvY2tUb2tlbiddIC1hbmQgJEwudG9rZW4g +LWVxIFtzdHJpbmddJHoubG9ja1Rva2VuDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5v +dCAkb3duIC1hbmQgLW5vdCAkdG9rT2sgLWFuZCAtbm90ICREYXJmVWViZXIpIHsNCiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICBbdm9pZF0kR2VzcGVycnQuQWRkKEB7IGRhdHVtID0gJGQ7IHBl +cnNvbklkID0gJHA7IHNwZXJyZXIgPSAkTC51c2VybmFtZSB9KQ0KICAgICAgICAgICAgICAgICAg +ICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KDQogICAg +ICAgICAgICAgICAgJEVyZm9sZ3JlaWNoID0gTmV3LU9iamVjdCBTeXN0ZW0uQ29sbGVjdGlvbnMu +QXJyYXlMaXN0DQogICAgICAgICAgICAgICAgJEtvbmZsaWt0ZSAgID0gTmV3LU9iamVjdCBTeXN0 +ZW0uQ29sbGVjdGlvbnMuQXJyYXlMaXN0DQogICAgICAgICAgICAgICAgJFZlcmJvdGVuICAgID0g +TmV3LU9iamVjdCBTeXN0ZW0uQ29sbGVjdGlvbnMuQXJyYXlMaXN0DQogICAgICAgICAgICAgICAg +JEZlaGxlciAgICAgID0gTmV3LU9iamVjdCBTeXN0ZW0uQ29sbGVjdGlvbnMuQXJyYXlMaXN0DQoN +CiAgICAgICAgICAgICAgICAkTG9ja1Jlc3VsdCA9ICRudWxsDQogICAgICAgICAgICAgICAgdHJ5 +IHsNCiAgICAgICAgICAgICAgICAgICAgJExvY2tSZXN1bHQgPSBJbnZva2UtV2l0aEZpbGVMb2Nr +ICdwbGFudW5nLmpzb24nIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5nID0gUmVh +ZC1Kc29uRmlsZSAncGxhbnVuZy5qc29uJw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRu +dWxsIC1lcSAkUGxhbnVuZykgeyByZXR1cm4gQHsgdHlwID0gJ2Vycm9yJzsgY29kZSA9IDQwNDsg +bXNnID0gJ3BsYW51bmcuanNvbiBuaWNodCBnZWZ1bmRlbicgfSB9DQogICAgICAgICAgICAgICAg +ICAgICAgICBpZiAoLW5vdCAkUGxhbnVuZy5QU09iamVjdC5Qcm9wZXJ0aWVzWydlaW50cmFlZ2Un +XSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5nIHwgQWRkLU1lbWJlciAt +TWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgJ2VpbnRyYWVnZScgLVZhbHVlIChOZXctT2Jq +ZWN0IFBTT2JqZWN0KQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg +ICAgICAgICAgJEFkbWluRnVlclZGID0gUmVhZC1Kc29uRmlsZSAnYWRtaW4uanNvbicNCiAgICAg +ICAgICAgICAgICAgICAgICAgICRQcnVlZmVWZXJiID0gKCRSb2xsZSAtZXEgJ3VzZXInKQ0KICAg +ICAgICAgICAgICAgICAgICAgICAgIyBXaGl0ZWxpc3QgZ2VnZW4gYWRtaW4uc2NoaWNodGNvZGVz +IChNaXJyb3Igc2VydmVyLnB5OjMxMjAtMzEyMikNCiAgICAgICAgICAgICAgICAgICAgICAgICRW +YWxpZENvZGVzID0gTmV3LU9iamVjdCBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYy5IYXNoU2V0 +W3N0cmluZ10NCiAgICAgICAgICAgICAgICAgICAgICAgIFt2b2lkXSRWYWxpZENvZGVzLkFkZCgn +JykNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtbmUgJEFkbWluRnVlclZGIC1h +bmQgJEFkbWluRnVlclZGLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3NjaGljaHRjb2RlcyddKSB7DQog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJFNjIGluICRBZG1pbkZ1ZXJWRi5z +Y2hpY2h0Y29kZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxs +IC1uZSAkU2MgLWFuZCAkU2MuUFNPYmplY3QuUHJvcGVydGllc1snY29kZSddKSB7DQogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdm9pZF0kVmFsaWRDb2Rlcy5BZGQoW3N0cmlu +Z10kU2MuY29kZSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAg +ICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAg +ICAgICAgICAgICAgICAgICRCZXRyb2ZmZW5lID0gTmV3LU9iamVjdCBTeXN0ZW0uQ29sbGVjdGlv +bnMuQXJyYXlMaXN0DQogICAgICAgICAgICAgICAgICAgICAgICAkR2VzcGVycnRTZXQgPSBAe30N +CiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRnIGluICRHZXNwZXJydCkgeyAkR2Vz +cGVycnRTZXRbKCRnLmRhdHVtICsgJ3wnICsgJGcucGVyc29uSWQpXSA9ICR0cnVlIH0NCiAgICAg +ICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCR6IGluICRBLnplbGxlbikgew0KICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICRkID0gW3N0cmluZ10kei5kYXR1bTsgJHAgPSBbc3RyaW5nXSR6 +LnBlcnNvbklkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHdlcnQgPSBpZiAoJHoud2Vy +dCkgeyBbc3RyaW5nXSR6LndlcnQgfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICRlcndhcnRldCA9IGlmICgkei5QU09iamVjdC5Qcm9wZXJ0aWVzWydlcndhcnRldCdd +KSB7IFtzdHJpbmddJHouZXJ3YXJ0ZXQgfSBlbHNlIHsgJG51bGwgfQ0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgIGlmICgtbm90ICRkIC1vciAtbm90ICRwKSB7DQogICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgIFt2b2lkXSRGZWhsZXIuQWRkKEB7IGRhdHVtID0gJGQ7IHBlcnNvbklk +ID0gJHA7IGZlaGxlciA9ICdkYXR1bS9wZXJzb25JZCBmZWhsdCcgfSk7IGNvbnRpbnVlDQogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm +ICgtbm90ICRWYWxpZENvZGVzLkNvbnRhaW5zKCR3ZXJ0KSkgew0KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICBbdm9pZF0kRmVobGVyLkFkZChAeyBkYXR1bSA9ICRkOyBwZXJzb25JZCA9 +ICRwOyBmZWhsZXIgPSAiVW5iZWthbm50ZXIgU2NoaWNodGNvZGU6ICckd2VydCciIH0pOyBjb250 +aW51ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICBpZiAoJEdlc3BlcnJ0U2V0WygkZCArICd8JyArICRwKV0pIHsgY29udGludWUgfQ0K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkUHJ1ZWZlVmVyYiAtYW5kIChUZXN0LURh +dHVtSW5WZXJiaW5kbGljaGtlaXQgJGQgJEFkbWluRnVlclZGKSkgew0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICBbdm9pZF0kVmVyYm90ZW4uQWRkKEB7IGRhdHVtID0gJGQ7IHBlcnNv +bklkID0gJHA7IGdydW5kID0gJ3ZlcmJpbmRsaWNoa2VpdHNmZW5zdGVyJyB9KTsgY29udGludWUN +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAg +ICAgaWYgKC1ub3QgJFBsYW51bmcuZWludHJhZWdlLlBTT2JqZWN0LlByb3BlcnRpZXNbJGRdKSB7 +DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5nLmVpbnRyYWVnZSB8IEFk +ZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1lICRkIC1WYWx1ZSAoTmV3LU9i +amVjdCBQU09iamVjdCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgJGFsdCA9ICcnDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg +aWYgKCRQbGFudW5nLmVpbnRyYWVnZS4kZC5QU09iamVjdC5Qcm9wZXJ0aWVzWyRwXSkgew0KICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYWx0ID0gW3N0cmluZ10kUGxhbnVuZy5laW50 +cmFlZ2UuJGQuJHANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg +ICAgICAgICAgICAgICAgaWYgKCRudWxsIC1uZSAkZXJ3YXJ0ZXQgLWFuZCAkZXJ3YXJ0ZXQgLW5l +ICRhbHQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZvaWRdJEtvbmZsaWt0 +ZS5BZGQoQHsgZGF0dW0gPSAkZDsgcGVyc29uSWQgPSAkcDsgYWt0dWVsbCA9ICRhbHQgfSk7IGNv +bnRpbnVlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICRhbHRQZiA9ICRmYWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm +ICgkUGxhbnVuZy5QU09iamVjdC5Qcm9wZXJ0aWVzWydwZmxpY2h0J10gLWFuZCAkUGxhbnVuZy5w +ZmxpY2h0LlBTT2JqZWN0LlByb3BlcnRpZXNbJGRdKSB7DQogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgIGlmICgkUGxhbnVuZy5wZmxpY2h0LiRkLlBTT2JqZWN0LlByb3BlcnRpZXNbJHBd +KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYWx0UGYgPSBbYm9vbF0k +UGxhbnVuZy5wZmxpY2h0LiRkLiRwDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0N +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAg +ICAgaWYgKCRhbHRQZiAtYW5kIC1ub3QgJERhcmZVZWJlcikgew0KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICBbdm9pZF0kVmVyYm90ZW4uQWRkKEB7IGRhdHVtID0gJGQ7IHBlcnNvbklk +ID0gJHA7IGdydW5kID0gJ3BmbGljaHQnIH0pOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoW3N0cmluZ106Oklz +TnVsbE9yV2hpdGVTcGFjZSgkd2VydCkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgaWYgKCRQbGFudW5nLmVpbnRyYWVnZS4kZC5QU09iamVjdC5Qcm9wZXJ0aWVzWyRwXSkgew0K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51bmcuZWludHJhZWdlLiRk +LlBTT2JqZWN0LlByb3BlcnRpZXMuUmVtb3ZlKCRwKQ0KICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRQbGFudW5nLmVpbnRyYWVnZS4kZC5QU09iamVj +dC5Qcm9wZXJ0aWVzWyRwXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +JFBsYW51bmcuZWludHJhZWdlLiRkLiRwID0gJHdlcnQNCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQ +bGFudW5nLmVpbnRyYWVnZS4kZCB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5 +IC1OYW1lICRwIC1WYWx1ZSAkd2VydA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 +DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAg +ICAgIFt2b2lkXSRCZXRyb2ZmZW5lLkFkZChAeyBraW5kID0gJ2VpbnRyYWVnZSc7IGRhdHVtID0g +JGQ7IHBlcnNvbklkID0gJHAgfSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdm9pZF0k +RXJmb2xncmVpY2guQWRkKEB7IGRhdHVtID0gJGQ7IHBlcnNvbklkID0gJHA7IHdlcnQgPSAkd2Vy +dDsgYWx0ZXJXZXJ0ID0gJGFsdCB9KQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAg +ICAgICAgICAgICAgICAgICAgaWYgKEAoJEJldHJvZmZlbmUpLkNvdW50IC1ndCAwKSB7DQogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtUGxhbnVuZ01pdEludGVncml0YWV0ICRQbGFu +dW5nIEAoJEJldHJvZmZlbmUpDQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAg +ICAgICAgICAgICAgICByZXR1cm4gQHsgdHlwID0gJ29rJyB9DQogICAgICAgICAgICAgICAgICAg +IH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1F +cnJvciAkUmVzICIkXyIgNTAzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAg +ICAgICAgICBpZiAoJExvY2tSZXN1bHQudHlwIC1lcSAnZXJyb3InKSB7IFNlbmQtRXJyb3IgJFJl +cyAkTG9ja1Jlc3VsdC5tc2cgJExvY2tSZXN1bHQuY29kZTsgY29udGludWUgfQ0KDQogICAgICAg +ICAgICAgICAgZm9yZWFjaCAoJG9rIGluICRFcmZvbGdyZWljaCkgew0KICAgICAgICAgICAgICAg +ICAgICBXcml0ZS1Mb2dFaW50cmFnICd6ZWxsZS5nZWFlbmRlcnQnIEB7DQogICAgICAgICAgICAg +ICAgICAgICAgICBkYXR1bSA9ICRvay5kYXR1bTsgcGVyc29uSWQgPSAkb2sucGVyc29uSWQNCiAg +ICAgICAgICAgICAgICAgICAgICAgIGFsdGVyV2VydCA9ICRvay5hbHRlcldlcnQ7IG5ldWVyV2Vy +dCA9ICRvay53ZXJ0DQogICAgICAgICAgICAgICAgICAgICAgICByb2xsZSA9ICRSb2xsZTsgb3Zl +cnJpZGUgPSAkZmFsc2U7IGJ1bGsgPSAkdHJ1ZQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAg +ICAgICAgICAgICAgICAgIEFkZC1DaGFuZ2VMb2dFbnRyeSAnemVsbGUnICRvay5kYXR1bSAkb2su +cGVyc29uSWQgJG9rLndlcnQgJFVzZXJuYW1lICRSb2xsZSBAew0KICAgICAgICAgICAgICAgICAg +ICAgICAgYWx0ZXJXZXJ0ID0gJG9rLmFsdGVyV2VydDsgYnVsayA9ICR0cnVlDQogICAgICAgICAg +ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJHN0YXR1c0Nv +ZGUgPSBpZiAoKEAoJEtvbmZsaWt0ZSkuQ291bnQgKyBAKCRWZXJib3RlbikuQ291bnQgKyBAKCRH +ZXNwZXJydCkuQ291bnQgKyBAKCRGZWhsZXIpLkNvdW50KSAtZ3QgMCkgeyAyMDcgfSBlbHNlIHsg +MjAwIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb24gJFJlcyBAew0KICAgICAgICAgICAgICAg +ICAgICBzdGF0dXMgICAgICA9ICd2ZXJhcmJlaXRldCcNCiAgICAgICAgICAgICAgICAgICAgZXJm +b2xncmVpY2ggPSBAKCRFcmZvbGdyZWljaCkNCiAgICAgICAgICAgICAgICAgICAga29uZmxpa3Rl +ICAgPSBAKCRLb25mbGlrdGUpDQogICAgICAgICAgICAgICAgICAgIGdlc3BlcnJ0ICAgID0gQCgk +R2VzcGVycnQpDQogICAgICAgICAgICAgICAgICAgIHZlcmJvdGVuICAgID0gQCgkVmVyYm90ZW4p +DQogICAgICAgICAgICAgICAgICAgIGZlaGxlciAgICAgID0gQCgkRmVobGVyKQ0KICAgICAgICAg +ICAgICAgICAgICByb2xsZSAgICAgICA9ICRSb2xsZQ0KICAgICAgICAgICAgICAgIH0gJHN0YXR1 +c0NvZGUNCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAg +ICAgICAjIEtvbW1lbnRhciBzZXR6ZW4vbG9lc2NoZW4gKFBoYXNlIEE1OiBGaWxlLUxvY2sgKyBP +cHRpbWlzdGljLUNvbmN1cnJlbmN5ICsgQ2hhbmdlLUxvZykNCiAgICAgICAgICAgIGlmICgkUGF0 +aCAtZXEgJy9hcGkvcGxhbnVuZy9rb21tZW50YXInIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7 +DQogICAgICAgICAgICAgICAgJEJvZHkgPSBSZWFkLUJvZHkgJFJlcQ0KICAgICAgICAgICAgICAg +IGlmICgkbnVsbCAtZXEgJEJvZHkpIHsgU2VuZC1FcnJvciAkUmVzICdBbmZyYWdlIHp1IGdyb3Nz +JyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkQSA9ICRCb2R5IHwgQ29udmVydEZy +b20tSnNvbg0KICAgICAgICAgICAgICAgICREYXR1bSA9IFtzdHJpbmddJEEuZGF0dW0NCiAgICAg +ICAgICAgICAgICAkUGVyc29uSWQgPSBbc3RyaW5nXSRBLnBlcnNvbklkDQogICAgICAgICAgICAg +ICAgJFRleHQgPSBpZiAoJEEudGV4dCkgeyAoW3N0cmluZ10kQS50ZXh0KS5UcmltKCkgfSBlbHNl +IHsgJycgfQ0KICAgICAgICAgICAgICAgICRIYXRFcndhcnRldCA9ICRBLlBTT2JqZWN0LlByb3Bl +cnRpZXNbJ2Vyd2FydGV0ZXJBbHRlclRleHQnXQ0KICAgICAgICAgICAgICAgICRFcndhcnRldCA9 +IGlmICgkSGF0RXJ3YXJ0ZXQpIHsgW3N0cmluZ10kQS5lcndhcnRldGVyQWx0ZXJUZXh0IH0gZWxz +ZSB7ICRudWxsIH0NCiAgICAgICAgICAgICAgICAkVXNlcm5hbWUgPSAkZW52OlVTRVJOQU1FDQog +ICAgICAgICAgICAgICAgJFJvbGxlID0gR2V0LVVzZXJSb2xsZQ0KDQogICAgICAgICAgICAgICAg +JExvY2tSZXN1bHQgPSAkbnVsbA0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAg +ICAgICAgICRMb2NrUmVzdWx0ID0gSW52b2tlLVdpdGhGaWxlTG9jayAncGxhbnVuZy5qc29uJyB7 +DQogICAgICAgICAgICAgICAgICAgICAgICAkUGxhbnVuZyA9IFJlYWQtSnNvbkZpbGUgJ3BsYW51 +bmcuanNvbicNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJFBsYW51bmcp +IHsgcmV0dXJuIEB7IHR5cCA9ICdlcnJvcic7IGNvZGUgPSA0MDQ7IG1zZyA9ICdwbGFudW5nLmpz +b24gbmljaHQgZ2VmdW5kZW4nIH0gfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5v +dCAkUGxhbnVuZy5QU09iamVjdC5Qcm9wZXJ0aWVzWydrb21tZW50YXJlJ10pIHsNCiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAkUGxhbnVuZyB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90 +ZVByb3BlcnR5IC1OYW1lICdrb21tZW50YXJlJyAtVmFsdWUgKE5ldy1PYmplY3QgUFNPYmplY3Qp +DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAo +LW5vdCAkUGxhbnVuZy5rb21tZW50YXJlLlBTT2JqZWN0LlByb3BlcnRpZXNbJERhdHVtXSkgew0K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5nLmtvbW1lbnRhcmUgfCBBZGQtTWVt +YmVyIC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAtTmFtZSAkRGF0dW0gLVZhbHVlIChOZXctT2Jq +ZWN0IFBTT2JqZWN0KQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAg +ICAgICAgICAgICAkQWx0ZXJUZXh0ID0gJycNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgk +UGxhbnVuZy5rb21tZW50YXJlLiREYXR1bS5QU09iamVjdC5Qcm9wZXJ0aWVzWyRQZXJzb25JZF0p +IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQWx0ZXJFaW50cmFnID0gJFBsYW51bmcu +a29tbWVudGFyZS4kRGF0dW0uJFBlcnNvbklkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg +IyBCYWNrd2FyZC1Db21wYXQ6IGFsdGVyIEVpbnRyYWcga2FubiBTdHJpbmcgT0RFUiB7dGV4dCwg +Z2VhZW5kZXJ0QW0sIGdlYWVuZGVydFZvbn0gc2Vpbg0KICAgICAgICAgICAgICAgICAgICAgICAg +ICAgIGlmICgkQWx0ZXJFaW50cmFnIC1pcyBbc3RyaW5nXSkgew0KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAkQWx0ZXJUZXh0ID0gJEFsdGVyRWludHJhZw0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgIH0gZWxzZWlmICgkQWx0ZXJFaW50cmFnLlBTT2JqZWN0LlByb3BlcnRpZXNb +J3RleHQnXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQWx0ZXJUZXh0ID0g +W3N0cmluZ10kQWx0ZXJFaW50cmFnLnRleHQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 +DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAo +JEhhdEVyd2FydGV0IC1hbmQgJEVyd2FydGV0IC1uZSAkQWx0ZXJUZXh0KSB7DQogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgcmV0dXJuIEB7IHR5cCA9ICdrb25mbGlrdCc7IGFrdHVlbGwgPSAk +QWx0ZXJUZXh0IH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAg +ICAgICAgICAgaWYgKCRUZXh0KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJE5ldU9i +aiA9IFtQU0N1c3RvbU9iamVjdF1Aew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0 +ZXh0ICAgICAgICAgPSAkVGV4dA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZWFl +bmRlcnRBbSAgPSAoR2V0LURhdGUgLUZvcm1hdCAneXl5eS1NTS1kZCBISDptbTpzcycpDQogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdlYWVuZGVydFZvbiA9IChHZXQtQWt0dWVsbGVy +QmVudXR6ZXIpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgIGlmICgkUGxhbnVuZy5rb21tZW50YXJlLiREYXR1bS5QU09iamVjdC5Qcm9w +ZXJ0aWVzWyRQZXJzb25JZF0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBs +YW51bmcua29tbWVudGFyZS4kRGF0dW0uJFBlcnNvbklkID0gJE5ldU9iag0KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICRQbGFudW5nLmtvbW1lbnRhcmUuJERhdHVtIHwgQWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3Rl +UHJvcGVydHkgLU5hbWUgJFBlcnNvbklkIC1WYWx1ZSAkTmV1T2JqDQogICAgICAgICAgICAgICAg +ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICBpZiAoJFBsYW51bmcua29tbWVudGFyZS4kRGF0dW0uUFNPYmpl +Y3QuUHJvcGVydGllc1skUGVyc29uSWRdKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICRQbGFudW5nLmtvbW1lbnRhcmUuJERhdHVtLlBTT2JqZWN0LlByb3BlcnRpZXMuUmVtb3Zl +KCRQZXJzb25JZCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg +ICAgICAgICAgICAgICAgaWYgKEAoJFBsYW51bmcua29tbWVudGFyZS4kRGF0dW0uUFNPYmplY3Qu +UHJvcGVydGllcykuQ291bnQgLWVxIDApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgJFBsYW51bmcua29tbWVudGFyZS5QU09iamVjdC5Qcm9wZXJ0aWVzLlJlbW92ZSgkRGF0dW0p +DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAg +fQ0KICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtUGxhbnVuZ01pdEludGVncml0YWV0ICRQ +bGFudW5nIEAoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgQHsga2luZCA9ICdrb21tZW50 +YXJlJzsgZGF0dW0gPSAkRGF0dW07IHBlcnNvbklkID0gJFBlcnNvbklkIH0NCiAgICAgICAgICAg +ICAgICAgICAgICAgICkNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBAeyB0eXAgPSAn +b2snOyBhbHRlclRleHQgPSAkQWx0ZXJUZXh0IH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAg +ICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRS +ZXMgIiRfIiA1MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAg +ICAgaWYgKCRMb2NrUmVzdWx0LnR5cCAtZXEgJ2Vycm9yJykgeyBTZW5kLUVycm9yICRSZXMgJExv +Y2tSZXN1bHQubXNnICRMb2NrUmVzdWx0LmNvZGU7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAg +ICBpZiAoJExvY2tSZXN1bHQudHlwIC1lcSAna29uZmxpa3QnKSB7DQogICAgICAgICAgICAgICAg +ICAgIFNlbmQtSnNvbiAkUmVzIEB7DQogICAgICAgICAgICAgICAgICAgICAgICBmZWhsZXIgICAg +ICAgICA9ICdrb25mbGlrdCcNCiAgICAgICAgICAgICAgICAgICAgICAgIG1lbGR1bmcgICAgICAg +ID0gJ0tvbW1lbnRhciB3dXJkZSBpbnp3aXNjaGVuIGdlYWVuZGVydC4nDQogICAgICAgICAgICAg +ICAgICAgICAgICBha3R1ZWxsZXJUZXh0ICA9ICRMb2NrUmVzdWx0LmFrdHVlbGwNCiAgICAgICAg +ICAgICAgICAgICAgfSA0MDkNCiAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAg +ICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAkS3VyeiA9IGlmICgkVGV4dC5MZW5ndGggLWd0 +IDEwMCkgeyAkVGV4dC5TdWJzdHJpbmcoMCwgMTAwKSB9IGVsc2UgeyAkVGV4dCB9DQogICAgICAg +ICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAna29tbWVudGFyLmdlYWVuZGVydCcgQHsNCiAgICAg +ICAgICAgICAgICAgICAgZGF0dW0gICAgPSAkRGF0dW0NCiAgICAgICAgICAgICAgICAgICAgcGVy +c29uSWQgPSAkUGVyc29uSWQNCiAgICAgICAgICAgICAgICAgICAgdGV4dCAgICAgPSAkS3Vyeg0K +ICAgICAgICAgICAgICAgICAgICByb2xsZSAgICA9ICRSb2xsZQ0KICAgICAgICAgICAgICAgIH0N +CiAgICAgICAgICAgICAgICBBZGQtQ2hhbmdlTG9nRW50cnkgJ2tvbW1lbnRhcicgJERhdHVtICRQ +ZXJzb25JZCAkVGV4dCAkVXNlcm5hbWUgJFJvbGxlIEB7DQogICAgICAgICAgICAgICAgICAgIGFs +dGVyVGV4dCA9ICRMb2NrUmVzdWx0LmFsdGVyVGV4dA0KICAgICAgICAgICAgICAgIH0NCiAgICAg +ICAgICAgICAgICBTZW5kLUpzb24gJFJlcyBAeyBzdGF0dXMgPSAnZ2VzcGVpY2hlcnQnIH0NCiAg +ICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjID09 +PT09PT09PT09PT09PT09PT09PSBCQUNLVVBTID09PT09PT09PT09PT09PT09PT09PQ0KICAgICAg +ICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9wbGFudW5nL2JhY2t1cHMnIC1hbmQgJE1ldGhvZCAt +ZXEgJ0dFVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RBZG1pbikpIHsg +U2VuZC1FcnJvciAkUmVzICdLZWluZSBCZXJlY2h0aWd1bmcnIDQwMzsgY29udGludWUgfQ0KICAg +ICAgICAgICAgICAgICRFaW50cmFlZ2UgPSBOZXctT2JqZWN0IFN5c3RlbS5Db2xsZWN0aW9ucy5B +cnJheUxpc3QNCiAgICAgICAgICAgICAgICBmb3JlYWNoICgkRiBpbiBHZXQtQ2hpbGRJdGVtIC1Q +YXRoICREYXRhRGlyIC1GaWx0ZXIgJ3BsYW51bmdfYmFja3VwXyouanNvbicgLUZpbGUpIHsNCiAg +ICAgICAgICAgICAgICAgICAgJE5hbWUgPSAkRi5OYW1lDQogICAgICAgICAgICAgICAgICAgICRU +eXAgPSBpZiAoJE5hbWUgLWxpa2UgJypiYWNrdXBfdm9yX2R1bW15XyonKSB7ICd2b3IgRHVtbXlk +YXRlbicgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZWlmICgkTmFtZSAtbGlrZSAn +KmJhY2t1cF92b3JfcmVzZXRfKicpIHsgJ3ZvciBSZXNldCcgfQ0KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgZWxzZWlmICgkTmFtZSAtbGlrZSAnKmJhY2t1cF92b3Jfd2llZGVyaGVyc3RlbGx1 +bmdfKicpIHsgJ3ZvciBXaWVkZXJoZXJzdGVsbHVuZycgfQ0KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgZWxzZSB7ICdtYW51ZWxsJyB9DQogICAgICAgICAgICAgICAgICAgIFt2b2lkXSRFaW50 +cmFlZ2UuQWRkKFtvcmRlcmVkXUB7DQogICAgICAgICAgICAgICAgICAgICAgICBkYXRlaW5hbWUg +ID0gJE5hbWUNCiAgICAgICAgICAgICAgICAgICAgICAgIGdyb2Vzc2UgICAgPSAkRi5MZW5ndGgN +CiAgICAgICAgICAgICAgICAgICAgICAgIGVyc3RlbGx0QW0gPSAkRi5MYXN0V3JpdGVUaW1lLlRv +U3RyaW5nKCd5eXl5LU1NLWRkVEhIOm1tOnNzLmZmZmZmZmYnKQ0KICAgICAgICAgICAgICAgICAg +ICAgICAgdHlwICAgICAgICA9ICRUeXANCiAgICAgICAgICAgICAgICAgICAgfSkNCiAgICAgICAg +ICAgICAgICB9DQogICAgICAgICAgICAgICAgJFNvcnRpZXJ0ID0gQCgkRWludHJhZWdlIHwgU29y +dC1PYmplY3QgLVByb3BlcnR5IGVyc3RlbGx0QW0gLURlc2NlbmRpbmcpDQogICAgICAgICAgICAg +ICAgJEpzb24gPSBDb252ZXJ0VG8tSnNvbiAtSW5wdXRPYmplY3QgQCgkU29ydGllcnQpIC1EZXB0 +aCA1IC1Db21wcmVzcw0KICAgICAgICAgICAgICAgIFNlbmQtSnNvblJhdyAkUmVzICRKc29uDQog +ICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgaWYg +KCRQYXRoIC1saWtlICcvYXBpL3BsYW51bmcvYmFja3VwL2Rvd25sb2FkLyonIC1hbmQgJE1ldGhv +ZCAtZXEgJ0dFVCcpIHsNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RBZG1pbikp +IHsgU2VuZC1FcnJvciAkUmVzICdLZWluZSBCZXJlY2h0aWd1bmcnIDQwMzsgY29udGludWUgfQ0K +ICAgICAgICAgICAgICAgICROYW1lID0gW1N5c3RlbS5XZWIuSHR0cFV0aWxpdHldOjpVcmxEZWNv +ZGUoJFBhdGguU3Vic3RyaW5nKCcvYXBpL3BsYW51bmcvYmFja3VwL2Rvd25sb2FkLycuTGVuZ3Ro +KSkNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoJE5hbWUuU3RhcnRzV2l0aCgncGxhbnVuZ19i +YWNrdXBfJykgLWFuZCAkTmFtZS5FbmRzV2l0aCgnLmpzb24nKSkgLW9yICROYW1lLkNvbnRhaW5z +KCcvJykgLW9yICROYW1lLkNvbnRhaW5zKCdcJykgLW9yICROYW1lLkNvbnRhaW5zKCcuLicpKSB7 +DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlcyAnVW5ndWVsdGlnZXIgRGF0ZWlu +YW1lJyA0MDA7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRG +UGF0aCA9IEpvaW4tUGF0aCAkRGF0YURpciAkTmFtZQ0KICAgICAgICAgICAgICAgIGlmICgtbm90 +IChUZXN0LVBhdGggJEZQYXRoKSkgeyBTZW5kLUVycm9yICRSZXMgJ0JhY2t1cCBuaWNodCBnZWZ1 +bmRlbicgNDA0OyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgU2VuZC1GaWxlQXR0YWNobWVu +dCAkUmVzICRGUGF0aCAkTmFtZQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAg +ICB9DQoNCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvcGxhbnVuZy9iYWNrdXAnIC1h +bmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3Qt +SXN0QWRtaW4pKSB7IFNlbmQtRXJyb3IgJFJlcyAnS2VpbmUgQmVyZWNodGlndW5nJyA0MDM7IGNv +bnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkUGxhbnVuZ1BhdGggPSBKb2luLVBhdGggJERhdGFE +aXIgJ3BsYW51bmcuanNvbicNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1QYXRoICRQ +bGFudW5nUGF0aCkpIHsgU2VuZC1FcnJvciAkUmVzICdwbGFudW5nLmpzb24gbmljaHQgZ2VmdW5k +ZW4nIDQwNDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRUcyA9IEdldC1EYXRlIC1Gb3Jt +YXQgJ3l5eXlNTWRkX0hIbW1zcycNCiAgICAgICAgICAgICAgICAkQmFja3VwTmFtZSA9ICJwbGFu +dW5nX2JhY2t1cF8kVHMuanNvbiINCiAgICAgICAgICAgICAgICBDb3B5LUl0ZW0gLVBhdGggJFBs +YW51bmdQYXRoIC1EZXN0aW5hdGlvbiAoSm9pbi1QYXRoICREYXRhRGlyICRCYWNrdXBOYW1lKSAt +Rm9yY2UNCiAgICAgICAgICAgICAgICBJbnZva2UtQmFja3VwUm90YXRpb24gJ3BsYW51bmdfYmFj +a3VwXyouanNvbicgMjAgICMgUGhhc2UgRDM6IG1heCAyMCBiZWhhbHRlbg0KICAgICAgICAgICAg +ICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ2JhY2t1cC5lcnN0ZWxsdCcgQHsgZGF0ZWluYW1lID0gJEJh +Y2t1cE5hbWUgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbiAkUmVzIEB7IHN0YXR1cyA9ICdl +cnN0ZWxsdCc7IGRhdGVpbmFtZSA9ICRCYWNrdXBOYW1lIH0NCiAgICAgICAgICAgICAgICBjb250 +aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3Bs +YW51bmcvYmFja3VwL3dpZWRlcmhlcnN0ZWxsZW4nIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7 +DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0QWRtaW4pKSB7IFNlbmQtRXJyb3Ig +JFJlcyAnS2VpbmUgQmVyZWNodGlndW5nJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAg +ICAkQm9keSA9IFJlYWQtQm9keSAkUmVxDQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAk +Qm9keSkgeyBTZW5kLUVycm9yICRSZXMgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUg +fQ0KICAgICAgICAgICAgICAgICREYXRlbiA9ICRCb2R5IHwgQ29udmVydEZyb20tSnNvbg0KICAg +ICAgICAgICAgICAgICROYW1lID0gW3N0cmluZ10kRGF0ZW4uZGF0ZWluYW1lDQogICAgICAgICAg +ICAgICAgaWYgKC1ub3QgKCROYW1lLlN0YXJ0c1dpdGgoJ3BsYW51bmdfYmFja3VwXycpIC1hbmQg +JE5hbWUuRW5kc1dpdGgoJy5qc29uJykpIC1vciAkTmFtZS5Db250YWlucygnLycpIC1vciAkTmFt +ZS5Db250YWlucygnXCcpIC1vciAkTmFtZS5Db250YWlucygnLi4nKSkgew0KICAgICAgICAgICAg +ICAgICAgICBTZW5kLUVycm9yICRSZXMgJ1VuZ3VlbHRpZ2VyIERhdGVpbmFtZScgNDAwOyBjb250 +aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkUXVlbGxQYXRoID0gSm9p +bi1QYXRoICREYXRhRGlyICROYW1lDQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtUGF0 +aCAkUXVlbGxQYXRoKSkgeyBTZW5kLUVycm9yICRSZXMgJ0JhY2t1cCBuaWNodCBnZWZ1bmRlbicg +NDA0OyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJFBsYW51bmdQYXRoID0gSm9pbi1QYXRo +ICREYXRhRGlyICdwbGFudW5nLmpzb24nDQogICAgICAgICAgICAgICAgJFRzID0gR2V0LURhdGUg +LUZvcm1hdCAneXl5eU1NZGRfSEhtbXNzJw0KICAgICAgICAgICAgICAgICRTaWNoZXJOYW1lID0g +InBsYW51bmdfYmFja3VwX3Zvcl93aWVkZXJoZXJzdGVsbHVuZ18kVHMuanNvbiINCiAgICAgICAg +ICAgICAgICBpZiAoVGVzdC1QYXRoICRQbGFudW5nUGF0aCkgew0KICAgICAgICAgICAgICAgICAg +ICBDb3B5LUl0ZW0gLVBhdGggJFBsYW51bmdQYXRoIC1EZXN0aW5hdGlvbiAoSm9pbi1QYXRoICRE +YXRhRGlyICRTaWNoZXJOYW1lKSAtRm9yY2UNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAg +ICAgICAgQ29weS1JdGVtIC1QYXRoICRRdWVsbFBhdGggLURlc3RpbmF0aW9uICRQbGFudW5nUGF0 +aCAtRm9yY2UNCiAgICAgICAgICAgICAgICBJbnZva2UtQmFja3VwUm90YXRpb24gJ3BsYW51bmdf +YmFja3VwXyouanNvbicgMjANCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdiYWNr +dXAud2llZGVyaGVyZ2VzdGVsbHQnIEB7IHF1ZWxsZSA9ICROYW1lOyBzaWNoZXJ1bmcgPSAkU2lj +aGVyTmFtZSB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uICRSZXMgQHsgc3RhdHVzID0gJ3dp +ZWRlcmhlcmdlc3RlbGx0Jzsgc2ljaGVydW5nID0gJFNpY2hlck5hbWUgfQ0KICAgICAgICAgICAg +ICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEg +Jy9hcGkvcGxhbnVuZy9iYWNrdXAvbG9lc2NoZW4nIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7 +DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0QWRtaW4pKSB7IFNlbmQtRXJyb3Ig +JFJlcyAnS2VpbmUgQmVyZWNodGlndW5nJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAg +ICAkQm9keSA9IFJlYWQtQm9keSAkUmVxDQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAk +Qm9keSkgeyBTZW5kLUVycm9yICRSZXMgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUg +fQ0KICAgICAgICAgICAgICAgICREYXRlbiA9ICRCb2R5IHwgQ29udmVydEZyb20tSnNvbg0KICAg +ICAgICAgICAgICAgICROYW1lID0gW3N0cmluZ10kRGF0ZW4uZGF0ZWluYW1lDQogICAgICAgICAg +ICAgICAgaWYgKC1ub3QgKCROYW1lLlN0YXJ0c1dpdGgoJ3BsYW51bmdfYmFja3VwXycpIC1hbmQg +JE5hbWUuRW5kc1dpdGgoJy5qc29uJykpIC1vciAkTmFtZS5Db250YWlucygnLycpIC1vciAkTmFt +ZS5Db250YWlucygnXCcpIC1vciAkTmFtZS5Db250YWlucygnLi4nKSkgew0KICAgICAgICAgICAg +ICAgICAgICBTZW5kLUVycm9yICRSZXMgJ1VuZ3VlbHRpZ2VyIERhdGVpbmFtZScgNDAwOyBjb250 +aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkRlBhdGggPSBKb2luLVBh +dGggJERhdGFEaXIgJE5hbWUNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1QYXRoICRG +UGF0aCkpIHsgU2VuZC1FcnJvciAkUmVzICdCYWNrdXAgbmljaHQgZ2VmdW5kZW4nIDQwNDsgY29u +dGludWUgfQ0KICAgICAgICAgICAgICAgIFJlbW92ZS1JdGVtIC1QYXRoICRGUGF0aCAtRm9yY2UN +CiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdiYWNrdXAuZ2Vsb2VzY2h0JyBAeyBk +YXRlaW5hbWUgPSAkTmFtZSB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uICRSZXMgQHsgc3Rh +dHVzID0gJ2dlbG9lc2NodCcgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAg +ICB9DQoNCiAgICAgICAgICAgICMgPT09PT09PT09PT09PT09PT09PT09IFBFUlNPTkVOID09PT09 +PT09PT09PT09PT09PT09PQ0KDQogICAgICAgICAgICAjIFBlcnNvbiBhbmxlZ2VuDQogICAgICAg +ICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3BlcnNvbmVuJyAtYW5kICRNZXRob2QgLWVxICdQT1NU +Jykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUlzdEFkbWluKSkgeyBTZW5kLUVy +cm9yICRSZXMgJ0tlaW5lIEJlcmVjaHRpZ3VuZycgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAg +ICAgICAgJEJvZHkgPSBSZWFkLUJvZHkgJFJlcQ0KICAgICAgICAgICAgICAgICROZXUgPSAkQm9k +eSB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAgICAgICAgICAgICAkUGxhbnVuZyA9IFJlYWQtSnNv +bkZpbGUgJ3BsYW51bmcuanNvbicNCg0KICAgICAgICAgICAgICAgICRBbGxlID0gQChHZXQtUGVy +c29uZW5BcnJheSAkUGxhbnVuZykNCiAgICAgICAgICAgICAgICAkTWF4SWQgPSAwDQogICAgICAg +ICAgICAgICAgZm9yZWFjaCAoJFAgaW4gJEFsbGUpIHsgaWYgKFtpbnRdJFAuaWQgLWd0ICRNYXhJ +ZCkgeyAkTWF4SWQgPSBbaW50XSRQLmlkIH0gfQ0KICAgICAgICAgICAgICAgICROZXVlSWQgPSAk +TWF4SWQgKyAxDQoNCiAgICAgICAgICAgICAgICAjIEVpbnJlaWhlbjogdm9yL25hY2gvdW50ZW4N +CiAgICAgICAgICAgICAgICAkRWlucmVpaGVuID0gaWYgKCROZXUuZWlucmVpaGVuKSB7IChbc3Ry +aW5nXSROZXUuZWlucmVpaGVuKS5Ub0xvd2VyKCkgfSBlbHNlIHsgJ3VudGVuJyB9DQogICAgICAg +ICAgICAgICAgJFJlZklkID0gJE5ldS5yZWZlcmVueklkDQogICAgICAgICAgICAgICAgJFppZWxQ +b3MgPSAkbnVsbA0KDQogICAgICAgICAgICAgICAgJEFsbGVTb3J0aWVydCA9IEAoJEFsbGUgfCBT +b3J0LU9iamVjdCAtUHJvcGVydHkgQHtFeHByZXNzaW9uPXtbaW50XSgkXy5wb3NpdGlvbil9OyBB +c2NlbmRpbmc9JHRydWV9KQ0KDQogICAgICAgICAgICAgICAgaWYgKCgkRWlucmVpaGVuIC1lcSAn +dm9yJyAtb3IgJEVpbnJlaWhlbiAtZXEgJ25hY2gnKSAtYW5kICRudWxsIC1uZSAkUmVmSWQpIHsN +CiAgICAgICAgICAgICAgICAgICAgJFJlZlBvcyA9ICRudWxsDQogICAgICAgICAgICAgICAgICAg +IGZvcmVhY2ggKCRQIGluICRBbGxlU29ydGllcnQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAg +IGlmIChbaW50XSRQLmlkIC1lcSBbaW50XSRSZWZJZCkgeyAkUmVmUG9zID0gW2ludF0kUC5wb3Np +dGlvbjsgYnJlYWsgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAg +IGlmICgkbnVsbCAtbmUgJFJlZlBvcykgew0KICAgICAgICAgICAgICAgICAgICAgICAgJFppZWxQ +b3MgPSBpZiAoJEVpbnJlaWhlbiAtZXEgJ3ZvcicpIHsgJFJlZlBvcyB9IGVsc2UgeyAkUmVmUG9z +ICsgMSB9DQogICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkUCBpbiAkQWxsZVNvcnRp +ZXJ0KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFtpbnRdJFAucG9zaXRpb24g +LWdlICRaaWVsUG9zKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQLnBvc2l0 +aW9uID0gW2ludF0kUC5wb3NpdGlvbiArIDENCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 +DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAg +ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkWmllbFBvcykgew0K +ICAgICAgICAgICAgICAgICAgICAkTWF4UG9zID0gMA0KICAgICAgICAgICAgICAgICAgICBmb3Jl +YWNoICgkUCBpbiAkQWxsZSkgeyBpZiAoW2ludF0kUC5wb3NpdGlvbiAtZ3QgJE1heFBvcykgeyAk +TWF4UG9zID0gW2ludF0kUC5wb3NpdGlvbiB9IH0NCiAgICAgICAgICAgICAgICAgICAgJFppZWxQ +b3MgPSAkTWF4UG9zICsgMQ0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICMg +QXVkaXQtSXRlci1COiBuYWNobmFtZSBpc3QgU291cmNlLW9mLVRydXRoLCBuYW1lIG51ciBCYWNr +d2FyZC1Db21wYXQtRmFsbGJhY2suDQogICAgICAgICAgICAgICAgJE5hY2huYW1lTmV1ID0gaWYg +KCROZXUuUFNPYmplY3QuUHJvcGVydGllc1snbmFjaG5hbWUnXSAtYW5kIC1ub3QgW3N0cmluZ106 +OklzTnVsbE9yV2hpdGVTcGFjZShbc3RyaW5nXSROZXUubmFjaG5hbWUpKSB7DQogICAgICAgICAg +ICAgICAgICAgIFtzdHJpbmddJE5ldS5uYWNobmFtZQ0KICAgICAgICAgICAgICAgIH0gZWxzZWlm +ICgkTmV1LlBTT2JqZWN0LlByb3BlcnRpZXNbJ25hbWUnXSkgew0KICAgICAgICAgICAgICAgICAg +ICBbc3RyaW5nXSROZXUubmFtZQ0KICAgICAgICAgICAgICAgIH0gZWxzZSB7ICcnIH0NCg0KICAg +ICAgICAgICAgICAgICRQZXJzb24gPSBbUFNDdXN0b21PYmplY3RdQHsNCiAgICAgICAgICAgICAg +ICAgICAgaWQgICAgICAgICAgID0gJE5ldWVJZA0KICAgICAgICAgICAgICAgICAgICBha3RpdiAg +ICAgICAgPSBpZiAoJG51bGwgLW5lICROZXUuYWt0aXYpIHsgW2Jvb2xdJE5ldS5ha3RpdiB9IGVs +c2UgeyAkdHJ1ZSB9DQogICAgICAgICAgICAgICAgICAgIG5hY2huYW1lICAgICA9ICROYWNobmFt +ZU5ldQ0KICAgICAgICAgICAgICAgICAgICB2b3JuYW1lICAgICAgPSBpZiAoJE5ldS52b3JuYW1l +KSB7IFtzdHJpbmddJE5ldS52b3JuYW1lIH0gZWxzZSB7ICcnIH0NCiAgICAgICAgICAgICAgICAg +ICAgZGllbnN0Z3JhZCAgID0gaWYgKCROZXUuZGllbnN0Z3JhZCkgeyBbc3RyaW5nXSROZXUuZGll +bnN0Z3JhZCB9IGVsc2UgeyAnJyB9DQogICAgICAgICAgICAgICAgICAgIGZ1bmt0aW9uICAgICA9 +IGlmICgkTmV1LmZ1bmt0aW9uKSB7IFtzdHJpbmddJE5ldS5mdW5rdGlvbiB9IGVsc2UgeyAnJyB9 +DQogICAgICAgICAgICAgICAgICAgIG9lICAgICAgICAgICA9IGlmICgkTmV1Lm9lKSB7IFtzdHJp +bmddJE5ldS5vZSB9IGVsc2UgeyAnJyB9DQogICAgICAgICAgICAgICAgICAgIGRpZW5zdG51bW1l +ciA9IGlmICgkTmV1LmRpZW5zdG51bW1lcikgeyBbc3RyaW5nXSROZXUuZGllbnN0bnVtbWVyIH0g +ZWxzZSB7ICcnIH0NCiAgICAgICAgICAgICAgICAgICAgdGVsZWZvbiAgICAgID0gaWYgKCROZXUu +dGVsZWZvbikgeyBbc3RyaW5nXSROZXUudGVsZWZvbiB9IGVsc2UgeyAnJyB9DQogICAgICAgICAg +ICAgICAgICAgIHBvc2l0aW9uICAgICA9ICRaaWVsUG9zDQogICAgICAgICAgICAgICAgICAgIGVt +YWlsICAgICAgICA9IGlmICgkTmV1LmVtYWlsKSB7IFtzdHJpbmddJE5ldS5lbWFpbCB9IGVsc2Ug +eyAnJyB9DQogICAgICAgICAgICAgICAgICAgIG53S2VubnVuZyAgICA9IGlmICgkTmV1Lm53S2Vu +bnVuZykgeyBbc3RyaW5nXSROZXUubndLZW5udW5nIH0gZWxzZSB7ICcnIH0NCiAgICAgICAgICAg +ICAgICAgICAgIyBBdWRpdC1GaW5kaW5nIEQxOiBvcHRpb25hbGUgRmVsZGVyIG1pdCBudWxsLURl +ZmF1bHQNCiAgICAgICAgICAgICAgICAgICAgIyBzdGF0dCAiIiAoTWlycm9yIHNlcnZlci5weToz +NDAxLTM0MDUpLg0KICAgICAgICAgICAgICAgICAgICBnZWJ1cnRzZGF0dW0gPSBpZiAoJE5ldS5n +ZWJ1cnRzZGF0dW0pIHsgW3N0cmluZ10kTmV1LmdlYnVydHNkYXR1bSB9IGVsc2UgeyAkbnVsbCB9 +DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgJFBsYW51bmcucGVyc29uZW4g +PSBAKCRBbGxlICsgJFBlcnNvbikNCiAgICAgICAgICAgICAgICBXcml0ZS1Kc29uRmlsZSAncGxh +bnVuZy5qc29uJyAkUGxhbnVuZw0KICAgICAgICAgICAgICAgICMgQXV0by1Sb2xsZW4tU3luYyAo +REdMLzEuRUIgLT4gc3VwZXJVc2VyLCAxLkVCIFYuIC0+IGZhY2hhdWZzaWNodGVuKQ0KICAgICAg +ICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICRBZG1pbiA9IFJlYWQtSnNvbkZp +bGUgJ2FkbWluLmpzb24nDQogICAgICAgICAgICAgICAgICAgIGlmIChTeW5jLVJvbGxlbkF1c1Bl +cnNvbmVuICRQbGFudW5nICRBZG1pbikgew0KICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUt +SnNvbkZpbGUgJ2FkbWluLmpzb24nICRBZG1pbg0KICAgICAgICAgICAgICAgICAgICB9DQogICAg +ICAgICAgICAgICAgfSBjYXRjaCB7IFdyaXRlLVdhcm5pbmcgIlJvbGxlbi1TeW5jIG5hY2ggUGVy +c29uLUFubGFnZSBmZWhsZ2VzY2hsYWdlbjogJF8iIH0NCiAgICAgICAgICAgICAgICBXcml0ZS1M +b2dFaW50cmFnICdwZXJzb24uYW5nZWxlZ3QnIEB7IHBlcnNvbklkID0gJE5ldWVJZDsgbmFjaG5h +bWUgPSAiJCgkTmV1LnZvcm5hbWUpICROYWNobmFtZU5ldSIuVHJpbSgpIH0NCiAgICAgICAgICAg +ICAgICBTZW5kLUpzb24gJFJlcyBAeyBzdGF0dXMgPSAnYW5nZWxlZ3QnOyBpZCA9ICROZXVlSWQ7 +IHBvc2l0aW9uID0gJFppZWxQb3MgfQ0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAg +ICAgICB9DQoNCiAgICAgICAgICAgICMgUGVyc29uIGFrdHVhbGlzaWVyZW4NCiAgICAgICAgICAg +ICRQZXJzb25NYXRjaCA9IFtyZWdleF06Ok1hdGNoKCRQYXRoLCAnXi9hcGkvcGVyc29uZW4vKFxk +KykkJykNCiAgICAgICAgICAgIGlmICgkUGVyc29uTWF0Y2guU3VjY2VzcyAtYW5kICRNZXRob2Qg +LWVxICdQVVQnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0QWRtaW4pKSB7 +IFNlbmQtRXJyb3IgJFJlcyAnS2VpbmUgQmVyZWNodGlndW5nJyA0MDM7IGNvbnRpbnVlIH0NCiAg +ICAgICAgICAgICAgICAkSWQgPSBbaW50XSRQZXJzb25NYXRjaC5Hcm91cHNbMV0uVmFsdWUNCiAg +ICAgICAgICAgICAgICAkQm9keSA9IFJlYWQtQm9keSAkUmVxDQogICAgICAgICAgICAgICAgJFVw +ZGF0ZSA9ICRCb2R5IHwgQ29udmVydEZyb20tSnNvbg0KICAgICAgICAgICAgICAgICRQbGFudW5n +ID0gUmVhZC1Kc29uRmlsZSAncGxhbnVuZy5qc29uJw0KDQogICAgICAgICAgICAgICAgIyBBdWRp +dC1JdGVyLUI6IExlZ2FjeS1uYW1lIC0+IG5hY2huYW1lIG1hcHBlbiwgZGFubiBuYW1lIGF1cyBV +cGRhdGUgZW50ZmVybmVuDQogICAgICAgICAgICAgICAgaWYgKCRVcGRhdGUuUFNPYmplY3QuUHJv +cGVydGllc1snbmFtZSddIC1hbmQgLW5vdCAkVXBkYXRlLlBTT2JqZWN0LlByb3BlcnRpZXNbJ25h +Y2huYW1lJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgJFVwZGF0ZSB8IEFkZC1NZW1iZXIgLU1l +bWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1lICduYWNobmFtZScgLVZhbHVlIChbc3RyaW5nXSRV +cGRhdGUubmFtZSkNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKCRVcGRh +dGUuUFNPYmplY3QuUHJvcGVydGllc1snbmFtZSddKSB7DQogICAgICAgICAgICAgICAgICAgICRV +cGRhdGUuUFNPYmplY3QuUHJvcGVydGllcy5SZW1vdmUoJ25hbWUnKQ0KICAgICAgICAgICAgICAg +IH0NCg0KICAgICAgICAgICAgICAgICMgQXVkaXQtRmluZGluZyBEMTogb3B0aW9uYWxlIERhdHVt +cy0vTm90aXotRmVsZGVyIGF1ZiBudWxsDQogICAgICAgICAgICAgICAgIyBub3JtYWxpc2llcmVu +IChNaXJyb3Igc2VydmVyLnB5OjM0MzUtMzQzOCkuDQogICAgICAgICAgICAgICAgZm9yZWFjaCAo +JE9wdEZlbGQgaW4gQCgnZ2VidXJ0c2RhdHVtJywnZW5kRGF0dW0nLCdlcmlubmVydW5nc05vdGl6 +JykpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRVcGRhdGUuUFNPYmplY3QuUHJvcGVydGll +c1skT3B0RmVsZF0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRWID0gJFVwZGF0ZS4oJE9w +dEZlbGQpDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJFYgLWlzIFtzdHJpbmddIC1hbmQg +W3N0cmluZ106OklzTnVsbE9yV2hpdGVTcGFjZSgkVikpIHsNCiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAkVXBkYXRlLigkT3B0RmVsZCkgPSAkbnVsbA0KICAgICAgICAgICAgICAgICAgICAg +ICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAg +ICAgICAgICAgJEdlZnVuZGVuID0gJGZhbHNlDQogICAgICAgICAgICAgICAgZm9yICgkaSA9IDA7 +ICRpIC1sdCAkUGxhbnVuZy5wZXJzb25lbi5Db3VudDsgJGkrKykgew0KICAgICAgICAgICAgICAg +ICAgICBpZiAoW2ludF0kUGxhbnVuZy5wZXJzb25lblskaV0uaWQgLWVxICRJZCkgew0KICAgICAg +ICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJFByb3AgaW4gJFVwZGF0ZS5QU09iamVjdC5Qcm9w +ZXJ0aWVzKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRQcm9wLk5hbWUgLW5l +ICdpZCcpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRQbGFudW5nLnBl +cnNvbmVuWyRpXS5QU09iamVjdC5Qcm9wZXJ0aWVzWyRQcm9wLk5hbWVdKSB7DQogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAkUGxhbnVuZy5wZXJzb25lblskaV0uKCRQcm9wLk5h +bWUpID0gJFByb3AuVmFsdWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl +IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5nLnBlcnNvbmVu +WyRpXSB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1lICRQcm9wLk5h +bWUgLVZhbHVlICRQcm9wLlZhbHVlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0N +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9 +DQogICAgICAgICAgICAgICAgICAgICAgICAjIExlZ2FjeS1uYW1lLUZlbGQgZW5kZ3VlbHRpZyBh +dXMgUGVyc29uIGVudGZlcm5lbiwgZmFsbHMgbm9jaCB2b3JoYW5kZW4NCiAgICAgICAgICAgICAg +ICAgICAgICAgIGlmICgkUGxhbnVuZy5wZXJzb25lblskaV0uUFNPYmplY3QuUHJvcGVydGllc1sn +bmFtZSddKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJExlZ2FjeU5hbWUgPSBbc3Ry +aW5nXSRQbGFudW5nLnBlcnNvbmVuWyRpXS5uYW1lDQogICAgICAgICAgICAgICAgICAgICAgICAg +ICAgaWYgKC1ub3QgW3N0cmluZ106OklzTnVsbE9yV2hpdGVTcGFjZSgkTGVnYWN5TmFtZSkgLWFu +ZCBgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChbc3RyaW5nXTo6SXNOdWxsT3JX +aGl0ZVNwYWNlKFtzdHJpbmddJFBsYW51bmcucGVyc29uZW5bJGldLm5hY2huYW1lKSkpIHsNCiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRQbGFudW5nLnBlcnNvbmVuWyRpXS5Q +U09iamVjdC5Qcm9wZXJ0aWVzWyduYWNobmFtZSddKSB7DQogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAkUGxhbnVuZy5wZXJzb25lblskaV0ubmFjaG5hbWUgPSAkTGVnYWN5TmFt +ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51bmcucGVyc29uZW5bJGldIHwgQWRkLU1lbWJl +ciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgJ25hY2huYW1lJyAtVmFsdWUgJExlZ2Fj +eU5hbWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUGxhbnVuZy5wZXJz +b25lblskaV0uUFNPYmplY3QuUHJvcGVydGllcy5SZW1vdmUoJ25hbWUnKQ0KICAgICAgICAgICAg +ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgJEdlZnVuZGVuID0gJHRydWU7 +IGJyZWFrDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAg +ICAgICAgICAgaWYgKC1ub3QgJEdlZnVuZGVuKSB7IFNlbmQtRXJyb3IgJFJlcyAiUGVyc29uICRJ +ZCBuaWNodCBnZWZ1bmRlbiIgNDA0OyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgV3JpdGUt +SnNvbkZpbGUgJ3BsYW51bmcuanNvbicgJFBsYW51bmcNCiAgICAgICAgICAgICAgICAjIEF1dG8t +Um9sbGVuLVN5bmMgbmFjaCBFZGl0IChGdW5rdGlvbiBrYW5uIHNpY2ggZ2VhZW5kZXJ0IGhhYmVu +KQ0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICRBZG1pbiA9IFJl +YWQtSnNvbkZpbGUgJ2FkbWluLmpzb24nDQogICAgICAgICAgICAgICAgICAgIGlmIChTeW5jLVJv +bGxlbkF1c1BlcnNvbmVuICRQbGFudW5nICRBZG1pbikgew0KICAgICAgICAgICAgICAgICAgICAg +ICAgV3JpdGUtSnNvbkZpbGUgJ2FkbWluLmpzb24nICRBZG1pbg0KICAgICAgICAgICAgICAgICAg +ICB9DQogICAgICAgICAgICAgICAgfSBjYXRjaCB7IFdyaXRlLVdhcm5pbmcgIlJvbGxlbi1TeW5j +IG5hY2ggUGVyc29uLUVkaXQgZmVobGdlc2NobGFnZW46ICRfIiB9DQogICAgICAgICAgICAgICAg +V3JpdGUtTG9nRWludHJhZyAncGVyc29uLmdlYWVuZGVydCcgQHsgcGVyc29uSWQgPSAkSWQgfQ0K +ICAgICAgICAgICAgICAgIFNlbmQtSnNvbiAkUmVzIEB7IHN0YXR1cyA9ICdha3R1YWxpc2llcnQn +IH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAg +ICAjIFJlaWhlbmZvbGdlIGFlbmRlcm4NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkv +cGVyc29uZW4vcmVpaGVuZm9sZ2UnIC1hbmQgJE1ldGhvZCAtZXEgJ1BVVCcpIHsNCiAgICAgICAg +ICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RBZG1pbikpIHsgU2VuZC1FcnJvciAkUmVzICdLZWlu +ZSBCZXJlY2h0aWd1bmcnIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRCb2R5ID0g +UmVhZC1Cb2R5ICRSZXENCiAgICAgICAgICAgICAgICAkUmVpaGVuZm9sZ2UgPSAkQm9keSB8IENv +bnZlcnRGcm9tLUpzb24NCiAgICAgICAgICAgICAgICAkUGxhbnVuZyA9IFJlYWQtSnNvbkZpbGUg +J3BsYW51bmcuanNvbicNCiAgICAgICAgICAgICAgICBmb3JlYWNoICgkUiBpbiAkUmVpaGVuZm9s +Z2UpIHsNCiAgICAgICAgICAgICAgICAgICAgZm9yICgkaSA9IDA7ICRpIC1sdCAkUGxhbnVuZy5w +ZXJzb25lbi5Db3VudDsgJGkrKykgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFtpbnRd +JFBsYW51bmcucGVyc29uZW5bJGldLmlkIC1lcSBbaW50XSRSLmlkKSB7DQogICAgICAgICAgICAg +ICAgICAgICAgICAgICAgJFBsYW51bmcucGVyc29uZW5bJGldLnBvc2l0aW9uID0gW2ludF0kUi5w +b3NpdGlvbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrDQogICAgICAgICAgICAg +ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQog +ICAgICAgICAgICAgICAgV3JpdGUtSnNvbkZpbGUgJ3BsYW51bmcuanNvbicgJFBsYW51bmcNCiAg +ICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdwZXJzb25lbi5yZWloZW5mb2xnZS5nZWFl +bmRlcnQnIEB7fQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbiAkUmVzIEB7IHN0YXR1cyA9ICdh +a3R1YWxpc2llcnQnIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0K +DQogICAgICAgICAgICAjID09PT09PT09PT09PT09PT09PT09PSBTVEFUSVNUSUsgPT09PT09PT09 +PT09PT09PT09PT09DQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL3N0YXRpc3Rpaycg +LWFuZCAkTWV0aG9kIC1lcSAnR0VUJykgew0KICAgICAgICAgICAgICAgIEhhbmRsZS1TdGF0aXN0 +aWsgJFJlcw0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAg +ICAgICAgICMgPT09PT09PT09PT09PT09PT09PT09IERVTU1ZREFURU4gLyBSRVNFVCA9PT09PT09 +PT09PT09PT09PT09PT0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvcGxhbnVuZy9k +dW1teWRhdGVuJyAtYW5kICRNZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAgICAgICAgIGlm +ICgtbm90IChUZXN0LUlzdEFkbWluKSkgeyBTZW5kLUVycm9yICRSZXMgJ0tlaW5lIEJlcmVjaHRp +Z3VuZycgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgSGFuZGxlLUR1bW15ZGF0ZW4g +JFJlcw0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICB9DQogICAgICAgICAg +ICBpZiAoJFBhdGggLWVxICcvYXBpL3BsYW51bmcvcmVzZXQnIC1hbmQgJE1ldGhvZCAtZXEgJ1BP +U1QnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0QWRtaW4pKSB7IFNlbmQt +RXJyb3IgJFJlcyAnS2VpbmUgQmVyZWNodGlndW5nJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAg +ICAgICAgICBIYW5kbGUtUmVzZXQgJFJlcw0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAg +ICAgICAgICB9DQoNCiAgICAgICAgICAgICMgPT09PT09PT09PT09PT09PT09PT09IEZMRDogU0NI +SUNIVC1JTVBPUlQgKFBhc3RlLWJhc2llcnQpID09PT09PT09PT09PT09PT09PT09PQ0KICAgICAg +ICAgICAgIyBTcGllZ2VsIHp1IHNlcnZlci5weSBQT1NUIC9hcGkvaW1wb3J0L3NjaGljaHRlbi91 +ZWJlcm5laG1lbi4NCiAgICAgICAgICAgICMgQ2xpZW50IHBhcnN0IGRpZSBnZXBhc3RldGVuIEV4 +Y2VsLURhdGVuIGNsaWVudHNlaXRpZyB1bmQgc2NoaWNrdA0KICAgICAgICAgICAgIyBlaW50cmFl +Z2UgKyBwZmxpY2h0LUZsYWdzIHp1bSBTY2hyZWliZW4uDQogICAgICAgICAgICBpZiAoJFBhdGgg +LWVxICcvYXBpL2ltcG9ydC9zY2hpY2h0ZW4vdWViZXJuZWhtZW4nIC1hbmQgJE1ldGhvZCAtZXEg +J1BPU1QnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0U3VwZXJVc2VyKSkg +eyBTZW5kLUVycm9yICRSZXMgJ051ciBTdXBlclVzZXIgZHVlcmZlbiBpbXBvcnRpZXJlbicgNDAz +OyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJEJvZHkgPSBSZWFkLUJvZHkgJFJlcQ0KICAg +ICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJEJvZHkpIHsgU2VuZC1FcnJvciAkUmVzICdBbmZy +YWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICB0cnkgew0KICAg +ICAgICAgICAgICAgICAgICAkUGFyYW0gPSAkQm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAg +ICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVz +ICdVbmd1ZWx0aWdlcyBKU09OJyA0MDA7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KDQog +ICAgICAgICAgICAgICAgJExvY2tSZXN1bHQgPSAkbnVsbA0KICAgICAgICAgICAgICAgIHRyeSB7 +DQogICAgICAgICAgICAgICAgICAgICRMb2NrUmVzdWx0ID0gSW52b2tlLVdpdGhGaWxlTG9jayAn +cGxhbnVuZy5qc29uJyB7DQogICAgICAgICAgICAgICAgICAgICAgICAkUGxhbnVuZyA9IFJlYWQt +SnNvbkZpbGUgJ3BsYW51bmcuanNvbicNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbnVs +bCAtZXEgJFBsYW51bmcpIHsgcmV0dXJuIEB7IHR5cCA9ICdlcnJvcic7IGNvZGUgPSA0MDQ7IG1z +ZyA9ICdwbGFudW5nLmpzb24gbmljaHQgZ2VmdW5kZW4nIH0gfQ0KDQogICAgICAgICAgICAgICAg +ICAgICAgICBpZiAoLW5vdCAkUGxhbnVuZy5QU09iamVjdC5Qcm9wZXJ0aWVzWydlaW50cmFlZ2Un +XSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5nIHwgQWRkLU1lbWJlciAt +TWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgJ2VpbnRyYWVnZScgLVZhbHVlIChOZXctT2Jq +ZWN0IFBTT2JqZWN0KQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg +ICAgICAgICAgaWYgKC1ub3QgJFBsYW51bmcuUFNPYmplY3QuUHJvcGVydGllc1sncGZsaWNodCdd +KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51bmcgfCBBZGQtTWVtYmVyIC1N +ZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAtTmFtZSAncGZsaWNodCcgLVZhbHVlIChOZXctT2JqZWN0 +IFBTT2JqZWN0KQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAg +ICAgICAgICAjIEF1ZGl0LUlJLTEgRjE6IFNjaGljaHRjb2RlLVdoaXRlbGlzdCBhdWNoIGltIElt +cG9ydC1QZmFkLg0KICAgICAgICAgICAgICAgICAgICAgICAgIyBNaXJyb3IgenUgc2VydmVyLnB5 +OjM1NjQtMzU2OC4NCiAgICAgICAgICAgICAgICAgICAgICAgICRBZG1pbkZ1ZXJJbXBvcnQgPSBS +ZWFkLUpzb25GaWxlICdhZG1pbi5qc29uJw0KICAgICAgICAgICAgICAgICAgICAgICAgJFZhbGlk +Q29kZXMgPSBOZXctT2JqZWN0IFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkhhc2hTZXRbc3Ry +aW5nXQ0KICAgICAgICAgICAgICAgICAgICAgICAgW3ZvaWRdJFZhbGlkQ29kZXMuQWRkKCcnKQ0K +ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1uZSAkQWRtaW5GdWVySW1wb3J0IC1h +bmQgJEFkbWluRnVlckltcG9ydC5QU09iamVjdC5Qcm9wZXJ0aWVzWydzY2hpY2h0Y29kZXMnXSkg +ew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRTYyBpbiAkQWRtaW5GdWVy +SW1wb3J0LnNjaGljaHRjb2Rlcykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp +ZiAoJG51bGwgLW5lICRTYyAtYW5kICRTYy5QU09iamVjdC5Qcm9wZXJ0aWVzWydjb2RlJ10pIHsN +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2b2lkXSRWYWxpZENvZGVzLkFk +ZChbc3RyaW5nXSRTYy5jb2RlKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0K +DQogICAgICAgICAgICAgICAgICAgICAgICAkQW56ID0gMDsgJE5PcnBoYW4gPSAwDQogICAgICAg +ICAgICAgICAgICAgICAgICBpZiAoJFBhcmFtLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2VpbnRyYWVn +ZSddIC1hbmQgJG51bGwgLW5lICRQYXJhbS5laW50cmFlZ2UpIHsNCiAgICAgICAgICAgICAgICAg +ICAgICAgICAgICBmb3JlYWNoICgkRGF0dW1Qcm9wIGluICRQYXJhbS5laW50cmFlZ2UuUFNPYmpl +Y3QuUHJvcGVydGllcykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRGF0dW0g +PSAkRGF0dW1Qcm9wLk5hbWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBpZE1h +cCA9ICREYXR1bVByb3AuVmFsdWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg +KC1ub3QgJFBsYW51bmcuZWludHJhZWdlLlBTT2JqZWN0LlByb3BlcnRpZXNbJERhdHVtXSkgew0K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51bmcuZWludHJhZWdlIHwg +QWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgJERhdHVtIC1WYWx1ZSAo +TmV3LU9iamVjdCBQU09iamVjdCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkUGlkUHJvcCBpbiAkUGlk +TWFwLlBTT2JqZWN0LlByb3BlcnRpZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICRQZXJzb25JZCA9IFtzdHJpbmddJFBpZFByb3AuTmFtZQ0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgJFdlcnQgPSBbc3RyaW5nXSRQaWRQcm9wLlZhbHVlDQogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkVmFsaWRDb2Rlcy5Db250 +YWlucygkV2VydCkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAk +Tk9ycGhhbisrDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGlu +dWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgIGlmICgkUGxhbnVuZy5laW50cmFlZ2UuJERhdHVtLlBTT2Jq +ZWN0LlByb3BlcnRpZXNbJFBlcnNvbklkXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICRQbGFudW5nLmVpbnRyYWVnZS4kRGF0dW0uJFBlcnNvbklkID0gJFdlcnQN +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51bmcuZWludHJhZWdlLiREYXR1bSB8 +IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1lICRQZXJzb25JZCAtVmFs +dWUgJFdlcnQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICRBbnorKw0KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg +ICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJFBhcmFtLlBTT2Jq +ZWN0LlByb3BlcnRpZXNbJ3BmbGljaHQnXSAtYW5kICRudWxsIC1uZSAkUGFyYW0ucGZsaWNodCkg +ew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCREYXR1bVByb3AgaW4gJFBh +cmFtLnBmbGljaHQuUFNPYmplY3QuUHJvcGVydGllcykgew0KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAkRGF0dW0gPSAkRGF0dW1Qcm9wLk5hbWUNCiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgJFBpZE1hcCA9ICREYXR1bVByb3AuVmFsdWUNCiAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgaWYgKC1ub3QgJFBsYW51bmcucGZsaWNodC5QU09iamVjdC5Qcm9wZXJ0 +aWVzWyREYXR1bV0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQbGFu +dW5nLnBmbGljaHQgfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAtTmFtZSAk +RGF0dW0gLVZhbHVlIChOZXctT2JqZWN0IFBTT2JqZWN0KQ0KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRQ +aWRQcm9wIGluICRQaWRNYXAuUFNPYmplY3QuUHJvcGVydGllcykgew0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgJFBlcnNvbklkID0gW3N0cmluZ10kUGlkUHJvcC5OYW1lDQog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRmxhZyA9ICRQaWRQcm9wLlZhbHVl +DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJEZsYWcpIHsNCiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJFBsYW51bmcucGZsaWNodC4k +RGF0dW0uUFNPYmplY3QuUHJvcGVydGllc1skUGVyc29uSWRdKSB7DQogICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5nLnBmbGljaHQuJERhdHVtLiRQZXJz +b25JZCA9ICR0cnVlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBl +bHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51 +bmcucGZsaWNodC4kRGF0dW0gfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAt +TmFtZSAkUGVyc29uSWQgLVZhbHVlICR0cnVlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNl +IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJFBsYW51bmcu +cGZsaWNodC4kRGF0dW0uUFNPYmplY3QuUHJvcGVydGllc1skUGVyc29uSWRdKSB7DQogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5nLnBmbGljaHQuJERh +dHVtLlBTT2JqZWN0LlByb3BlcnRpZXMuUmVtb3ZlKCRQZXJzb25JZCkNCiAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg +ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAg +ICAgICAgICAgICAgICAgIFdyaXRlLVBsYW51bmdNaXRJbnRlZ3JpdGFldCAkUGxhbnVuZyAgICMg +QnVsay1PcDogYWxsZSBITUFDcyBuZXUNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBA +eyB0eXAgPSAnb2snOyBlaW50cmFlZ2UgPSAkQW56OyB1bmJla2FubnRlQ29kZXMgPSAkTk9ycGhh +biB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAg +ICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzICJVZWJlcm5haG1lLUZlaGxlcjogJF8i +IDUwMDsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICBpZiAo +JExvY2tSZXN1bHQudHlwIC1lcSAnZXJyb3InKSB7IFNlbmQtRXJyb3IgJFJlcyAkTG9ja1Jlc3Vs +dC5tc2cgJExvY2tSZXN1bHQuY29kZTsgY29udGludWUgfQ0KDQogICAgICAgICAgICAgICAgV3Jp +dGUtTG9nRWludHJhZyAnc2NoaWNodGVuLmltcG9ydGllcnQnIEB7IGVpbnRyYWVnZSA9ICRMb2Nr +UmVzdWx0LmVpbnRyYWVnZTsgdW5iZWthbm50ZUNvZGVzID0gJExvY2tSZXN1bHQudW5iZWthbm50 +ZUNvZGVzIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb24gJFJlcyBAeyBzdGF0dXMgPSAndWVi +ZXJub21tZW4nOyBlaW50cmFlZ2UgPSAkTG9ja1Jlc3VsdC5laW50cmFlZ2U7IHVuYmVrYW5udGVD +b2RlcyA9ICRMb2NrUmVzdWx0LnVuYmVrYW5udGVDb2RlcyB9DQogICAgICAgICAgICAgICAgRGVi +dWctTG9nICdBUEknICJQT1NUIC9hcGkvaW1wb3J0L3NjaGljaHRlbi91ZWJlcm5laG1lbiAtPiAk +KCRMb2NrUmVzdWx0LmVpbnRyYWVnZSkgRWludHJhZWdlIGdlc2NocmllYmVuLCAkKCRMb2NrUmVz +dWx0LnVuYmVrYW5udGVDb2RlcykgdW5iZWthbm50ZSBDb2RlcyB2ZXJ3b3JmZW4iDQogICAgICAg +ICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyA9PT09PT09 +PT09PT09PT09PT09PT0gRkxEOiBFWENFTC1JTVBPUlQgKFZvcnNjaGF1KSA9PT09PT09PT09PT09 +PT09PT09PT0NCiAgICAgICAgICAgICMgU3BpZWdlbCB6dSBzZXJ2ZXIucHkgUE9TVCAvYXBpL2lt +cG9ydC9leGNlbC92b3JzY2hhdS4NCiAgICAgICAgICAgICMgQ2xpZW50IChCcm93c2VyLCBtaXQg +eGxzeC5mdWxsLm1pbi5qcyAvIFNoZWV0SlMpIHBhcnN0IGRpZQ0KICAgICAgICAgICAgIyBFeGNl +bC1Wb3JsYWdlIHVuZCBzY2hpY2t0IGRhcyBmZXJ0aWctZ2VwYXJzdGUgU2NoZW1hLg0KICAgICAg +ICAgICAgIyBTZXJ2ZXIgbGllZmVydCBudXIgZGVuIFBlcnNvbmVuLURpZmYgenVyIGFrdHVlbGxl +biBwbGFudW5nLmpzb24uDQogICAgICAgICAgICBpZiAoJFBhdGggLWVxICcvYXBpL2ltcG9ydC9l +eGNlbC92b3JzY2hhdScgLWFuZCAkTWV0aG9kIC1lcSAnUE9TVCcpIHsNCiAgICAgICAgICAgICAg +ICBpZiAoLW5vdCAoVGVzdC1Jc3RTdXBlclVzZXIpKSB7IFNlbmQtRXJyb3IgJFJlcyAnTnVyIFN1 +cGVyVXNlciBkdWVyZmVuIGltcG9ydGllcmVuJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAg +ICAgICAkQm9keSA9IFJlYWQtQm9keSAkUmVxDQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1l +cSAkQm9keSkgeyBTZW5kLUVycm9yICRSZXMgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGlu +dWUgfQ0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICRQYXJhbSA9 +ICRCb2R5IHwgQ29udmVydEZyb20tSnNvbg0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAg +ICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXMgJ1VuZ3VlbHRpZ2VzIEpTT04nIDQwMDsg +Y29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJFBh +cmFtLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3BlcnNvbmVuRXhjZWwnXSAtb3IgJG51bGwgLWVxICRQ +YXJhbS5wZXJzb25lbkV4Y2VsKSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJl +cyAncGVyc29uZW5FeGNlbCAoQXJyYXkpIGZlaGx0JyA0MDA7IGNvbnRpbnVlDQogICAgICAgICAg +ICAgICAgfQ0KICAgICAgICAgICAgICAgICRQZXJzb25lbkV4Y2VsID0gQCgkUGFyYW0ucGVyc29u +ZW5FeGNlbCkNCg0KICAgICAgICAgICAgICAgICRQbGFudW5nID0gUmVhZC1Kc29uRmlsZSAncGxh +bnVuZy5qc29uJw0KICAgICAgICAgICAgICAgICRQZXJzb25lblBsYW51bmcgPSBAKCkNCiAgICAg +ICAgICAgICAgICBpZiAoJFBsYW51bmcgLWFuZCAkUGxhbnVuZy5QU09iamVjdC5Qcm9wZXJ0aWVz +WydwZXJzb25lbiddKSB7DQogICAgICAgICAgICAgICAgICAgICRQZXJzb25lblBsYW51bmcgPSBA +KCRQbGFudW5nLnBlcnNvbmVuKQ0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAg +ICMgTWF0Y2gtSGV1cmlzdGlrOiBOYWNobmFtZSB6dWVyc3QsIGRhbm4gVm9ybmFtZSwgbWl0IERp +ZW5zdGdyYWQgYWxzDQogICAgICAgICAgICAgICAgIyBUaWVicmVha2VyLiBIYXJkLUZhaWwgd2Vu +biBiZWlkZSBOYWNobmFtZW4gZ2VzZXR6dCBhYmVyIHVudGVyc2NoaWVkbGljaC4NCiAgICAgICAg +ICAgICAgICAjIEdyZWVkeS0xOjEtWnVvcmRudW5nICh2ZXJoaW5kZXJ0IGRhc3MgendlaSBFeGNl +bC0nTGVuYScgYmVpZGUgYXVmDQogICAgICAgICAgICAgICAgIyBkaWUgZ2xlaWNoZSBwbGFudW5n +LUxlbmEgbGFuZGVuKS4NCiAgICAgICAgICAgICAgICAjIEluYWt0aXZlIFBlcnNvbmVuIHdlcmRl +biBlYmVuZmFsbHMgYmVydWVja3NpY2h0aWd0LCBzb25zdCB3dWVyZGVuDQogICAgICAgICAgICAg +ICAgIyB6dXZvciBkZWFrdGl2aWVydGUgUGVyc29uZW4gYmVpIFJlLUltcG9ydCBhbHMgJ25ldScg +YW5nZWxlZ3Qgc3RhdHQNCiAgICAgICAgICAgICAgICAjIHJlYWt0aXZpZXJ0LiBBa3RpdmUgYmVr +b21tZW4gKzAuNSBTY29yZS1Cb251cy4NCiAgICAgICAgICAgICAgICAkQWxsZVBsYW51bmcgPSBA +KCRQZXJzb25lblBsYW51bmcpDQoNCiAgICAgICAgICAgICAgICBmdW5jdGlvbiBHZXQtTmFtZVRv +a2VucygkTmFtZSkgew0KICAgICAgICAgICAgICAgICAgICAjIFNwbGl0IGJlaSBCaW5kZXN0cmlj +aCArIFdoaXRlc3BhY2UsIGxvd2VyY2FzZSwgbGVlcmUgcmF1cy4NCiAgICAgICAgICAgICAgICAg +ICAgIyAnUmVtdXMtQXJ0aHVyJyAtPiBAKCdyZW11cycsICdhcnRodXInKQ0KICAgICAgICAgICAg +ICAgICAgICAjIFVtbGF1dGUgKyBzcy1Ob3JtOiAnTXVlbGxlcicgbWF0Y2hlZCAnTcO8bGxlcics +ICdNYXJpc3MnICdNYXJpw58nLg0KICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkTmFtZSkg +eyByZXR1cm4gQCgpIH0NCiAgICAgICAgICAgICAgICAgICAgJHMgPSAoW3N0cmluZ10kTmFtZSku +VHJpbSgpLlRvTG93ZXIoKQ0KICAgICAgICAgICAgICAgICAgICAkcyA9ICRzIC1yZXBsYWNlICfD +pCcsJ2FlJyAtcmVwbGFjZSAnw7YnLCdvZScgLXJlcGxhY2UgJ8O8JywndWUnIC1yZXBsYWNlICfD +nycsJ3NzJw0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gQCgkcyAtc3BsaXQgJ1stXHNdKycg +fCBXaGVyZS1PYmplY3QgeyAkXyB9KQ0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAg +ICAgIGZ1bmN0aW9uIFRlc3QtTmFtZXNNYXRjaCgkQSwgJEIpIHsNCiAgICAgICAgICAgICAgICAg +ICAgIyBUcnVlIHdlbm4gZGllIFRva2VuLVNldHMgc2ljaCB1ZWJlcmxhcHBlbi4NCiAgICAgICAg +ICAgICAgICAgICAgJHRhID0gR2V0LU5hbWVUb2tlbnMgJEENCiAgICAgICAgICAgICAgICAgICAg +JHRiID0gR2V0LU5hbWVUb2tlbnMgJEINCiAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJHRh +IC1vciAtbm90ICR0YikgeyByZXR1cm4gJGZhbHNlIH0NCiAgICAgICAgICAgICAgICAgICAgZm9y +ZWFjaCAoJHQgaW4gJHRhKSB7IGlmICgkdGIgLWNvbnRhaW5zICR0KSB7IHJldHVybiAkdHJ1ZSB9 +IH0NCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRmYWxzZQ0KICAgICAgICAgICAgICAgIH0N +Cg0KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEdldC1QZXJzb25TY29yZSgkRXhjZWwsICRQbGFu +dW5nKSB7DQogICAgICAgICAgICAgICAgICAgICRlTiA9IChbc3RyaW5nXSRFeGNlbC5uYWNobmFt +ZSkuVHJpbSgpDQogICAgICAgICAgICAgICAgICAgICRlViA9IChbc3RyaW5nXSRFeGNlbC52b3Ju +YW1lKS5UcmltKCkNCiAgICAgICAgICAgICAgICAgICAgJGVEID0gKFtzdHJpbmddJEV4Y2VsLmRp +ZW5zdGdyYWQpLlRyaW0oKS5Ub0xvd2VyKCkNCiAgICAgICAgICAgICAgICAgICAgJHBOID0gaWYg +KCRQbGFudW5nLlBTT2JqZWN0LlByb3BlcnRpZXNbJ25hY2huYW1lJ10pIHsgKFtzdHJpbmddJFBs +YW51bmcubmFjaG5hbWUpLlRyaW0oKSB9IGVsc2UgeyAnJyB9DQogICAgICAgICAgICAgICAgICAg +ICRwViA9IGlmICgkUGxhbnVuZy5QU09iamVjdC5Qcm9wZXJ0aWVzWyd2b3JuYW1lJ10pIHsgKFtz +dHJpbmddJFBsYW51bmcudm9ybmFtZSkuVHJpbSgpIH0gZWxzZSB7ICcnIH0NCiAgICAgICAgICAg +ICAgICAgICAgJHBEID0gaWYgKCRQbGFudW5nLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2RpZW5zdGdy +YWQnXSkgeyAoW3N0cmluZ10kUGxhbnVuZy5kaWVuc3RncmFkKS5UcmltKCkuVG9Mb3dlcigpIH0g +ZWxzZSB7ICcnIH0NCiAgICAgICAgICAgICAgICAgICAgIyBIYXJkLUZhaWw6IGJlaWRlIE5hY2hu +YW1lbiBnZXNldHp0LCBhYmVyIGtlaW5lIFRva2VuLVVlYmVybGFwcHVuZw0KICAgICAgICAgICAg +ICAgICAgICBpZiAoJGVOIC1hbmQgJHBOIC1hbmQgLW5vdCAoVGVzdC1OYW1lc01hdGNoICRlTiAk +cE4pKSB7IHJldHVybiAwIH0NCiAgICAgICAgICAgICAgICAgICAgJG5NID0gKFRlc3QtTmFtZXNN +YXRjaCAkZU4gJHBOKQ0KICAgICAgICAgICAgICAgICAgICAkdk0gPSAoVGVzdC1OYW1lc01hdGNo +ICRlViAkcFYpDQogICAgICAgICAgICAgICAgICAgICRkTSA9ICgkZUQgLWFuZCAkcEQgLWFuZCAk +ZUQgLWVxICRwRCkNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRuTSAtYW5kICR2TSAtYW5kICRk +TSkgeyByZXR1cm4gNSB9ICAgIyBwZXJmZWt0DQogICAgICAgICAgICAgICAgICAgIGlmICgkbk0g +LWFuZCAkdk0pIHsgcmV0dXJuIDQgfSAgICAgICAgICAgICMgc2VociBzdGFyaw0KICAgICAgICAg +ICAgICAgICAgICBpZiAoJG5NIC1hbmQgJGRNKSB7IHJldHVybiAzIH0NCiAgICAgICAgICAgICAg +ICAgICAgaWYgKCRuTSkgeyByZXR1cm4gMyB9DQogICAgICAgICAgICAgICAgICAgIGlmICgtbm90 +ICRwTiAtYW5kICR2TSAtYW5kICRkTSkgeyByZXR1cm4gMyB9DQogICAgICAgICAgICAgICAgICAg +IGlmICgtbm90ICRwTiAtYW5kICR2TSkgeyByZXR1cm4gMiB9DQogICAgICAgICAgICAgICAgICAg +IHJldHVybiAwDQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgZnVuY3Rpb24g +R2V0LVBlcnNvbktvbXBha3QoJFApIHsNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEB7DQog +ICAgICAgICAgICAgICAgICAgICAgICBpZCA9ICRQLmlkDQogICAgICAgICAgICAgICAgICAgICAg +ICB2b3JuYW1lID0gaWYgKCRQLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3Zvcm5hbWUnXSkgeyAkUC52 +b3JuYW1lIH0gZWxzZSB7ICcnIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIG5hY2huYW1lID0g +aWYgKCRQLlBTT2JqZWN0LlByb3BlcnRpZXNbJ25hY2huYW1lJ10pIHsgJFAubmFjaG5hbWUgfSBl +bHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZGllbnN0Z3JhZCA9IGlmICgkUC5Q +U09iamVjdC5Qcm9wZXJ0aWVzWydkaWVuc3RncmFkJ10pIHsgJFAuZGllbnN0Z3JhZCB9IGVsc2Ug +eyAnJyB9DQogICAgICAgICAgICAgICAgICAgICAgICBmdW5rdGlvbiA9IGlmICgkUC5QU09iamVj +dC5Qcm9wZXJ0aWVzWydmdW5rdGlvbiddKSB7ICRQLmZ1bmt0aW9uIH0gZWxzZSB7ICcnIH0NCiAg +ICAgICAgICAgICAgICAgICAgICAgIGFrdGl2ID0gaWYgKCRQLlBTT2JqZWN0LlByb3BlcnRpZXNb +J2FrdGl2J10pIHsgJFAuYWt0aXYgfSBlbHNlIHsgJHRydWUgfQ0KICAgICAgICAgICAgICAgICAg +ICB9DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgIyBQaGFzZSAxOiBhbGxl +IChzY29yZSwgZWksIHBpKS1QYWFyZS4gQWt0aXZlICswLjUgQm9udXMuDQogICAgICAgICAgICAg +ICAgJFBhYXJlID0gTmV3LU9iamVjdCBTeXN0ZW0uQ29sbGVjdGlvbnMuQXJyYXlMaXN0DQogICAg +ICAgICAgICAgICAgZm9yICgkZWkgPSAwOyAkZWkgLWx0ICRQZXJzb25lbkV4Y2VsLkNvdW50OyAk +ZWkrKykgew0KICAgICAgICAgICAgICAgICAgICBmb3IgKCRwaSA9IDA7ICRwaSAtbHQgJEFsbGVQ +bGFudW5nLkNvdW50OyAkcGkrKykgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHMgPSBHZXQt +UGVyc29uU2NvcmUgJFBlcnNvbmVuRXhjZWxbJGVpXSAkQWxsZVBsYW51bmdbJHBpXQ0KICAgICAg +ICAgICAgICAgICAgICAgICAgaWYgKCRzIC1ndCAwKSB7DQogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgJGlzdEFrdGl2ID0gLW5vdCAkQWxsZVBsYW51bmdbJHBpXS5QU09iamVjdC5Qcm9wZXJ0 +aWVzWydha3RpdiddIC1vciAkQWxsZVBsYW51bmdbJHBpXS5ha3RpdiAtZXEgJHRydWUNCiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGlzdEFrdGl2KSB7ICRzICs9IDAuNSB9DQogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgW3ZvaWRdJFBhYXJlLkFkZChAeyBzPSRzOyBlaT0kZWk7 +IHBpPSRwaSB9KQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAg +ICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICMgUGhhc2UgMjogZ3JlZWR5 +IG5hY2ggU2NvcmUgYWJzdGVpZ2VuZA0KICAgICAgICAgICAgICAgICRTb3J0ZWQgPSBAKCRQYWFy +ZSB8IFNvcnQtT2JqZWN0IC1Qcm9wZXJ0eSBAe0V4cHJlc3Npb249eyAtJF8ucyB9fSkNCiAgICAg +ICAgICAgICAgICAkRXhjZWxadVBsYW51bmcgPSBAe30NCiAgICAgICAgICAgICAgICAkUGxhbnVu +Z1VzZWQgPSBAe30NCiAgICAgICAgICAgICAgICBmb3JlYWNoICgkcHAgaW4gJFNvcnRlZCkgew0K +ICAgICAgICAgICAgICAgICAgICBpZiAoJEV4Y2VsWnVQbGFudW5nLkNvbnRhaW5zS2V5KCRwcC5l +aSkpIHsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICAgICBpZiAoJFBsYW51bmdVc2VkLkNv +bnRhaW5zS2V5KCRwcC5waSkpIHsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICAgICAkRXhj +ZWxadVBsYW51bmdbJHBwLmVpXSA9IEB7IHBpID0gJHBwLnBpOyBzID0gJHBwLnMgfQ0KICAgICAg +ICAgICAgICAgICAgICAkUGxhbnVuZ1VzZWRbJHBwLnBpXSA9ICR0cnVlDQogICAgICAgICAgICAg +ICAgfQ0KDQogICAgICAgICAgICAgICAgJE1hdGNoID0gTmV3LU9iamVjdCBTeXN0ZW0uQ29sbGVj +dGlvbnMuQXJyYXlMaXN0DQogICAgICAgICAgICAgICAgJE5ldSA9IE5ldy1PYmplY3QgU3lzdGVt +LkNvbGxlY3Rpb25zLkFycmF5TGlzdA0KICAgICAgICAgICAgICAgICRVbnNpY2hlciA9IE5ldy1P +YmplY3QgU3lzdGVtLkNvbGxlY3Rpb25zLkFycmF5TGlzdA0KICAgICAgICAgICAgICAgICRFbnRm +ZXJudCA9IE5ldy1PYmplY3QgU3lzdGVtLkNvbGxlY3Rpb25zLkFycmF5TGlzdA0KDQogICAgICAg +ICAgICAgICAgIyBQaGFzZSAzOiBNZWhyZGV1dGlna2VpdHMtQ2hlY2sNCiAgICAgICAgICAgICAg +ICBmb3IgKCRlaSA9IDA7ICRlaSAtbHQgJFBlcnNvbmVuRXhjZWwuQ291bnQ7ICRlaSsrKSB7DQog +ICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRFeGNlbFp1UGxhbnVuZy5Db250YWluc0tleSgk +ZWkpKSB7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAgICAgJGcgPSAkRXhjZWxadVBsYW51 +bmdbJGVpXQ0KICAgICAgICAgICAgICAgICAgICBpZiAoJGcucyAtbGUgMykgew0KICAgICAgICAg +ICAgICAgICAgICAgICAgJEFuZGVyZSA9IEAoKQ0KICAgICAgICAgICAgICAgICAgICAgICAgZm9y +ICgkcGkgPSAwOyAkcGkgLWx0ICRBbGxlUGxhbnVuZy5Db3VudDsgJHBpKyspIHsNCiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICBpZiAoJHBpIC1lcSAkZy5waSkgeyBjb250aW51ZSB9DQogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRQbGFudW5nVXNlZC5Db250YWluc0tleSgkcGkp +KSB7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2sgPSBHZXQtUGVy +c29uU2NvcmUgJFBlcnNvbmVuRXhjZWxbJGVpXSAkQWxsZVBsYW51bmdbJHBpXQ0KICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICRpc3RBID0gLW5vdCAkQWxsZVBsYW51bmdbJHBpXS5QU09iamVj +dC5Qcm9wZXJ0aWVzWydha3RpdiddIC1vciAkQWxsZVBsYW51bmdbJHBpXS5ha3RpdiAtZXEgJHRy +dWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHNrIC1ndCAwIC1hbmQgJGlzdEEp +IHsgJHNrICs9IDAuNSB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRzayAtZXEg +JGcucykgeyAkQW5kZXJlICs9ICRwaSB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAg +ICAgICAgICAgICAgICAgICAgICBpZiAoJEFuZGVyZS5Db3VudCAtZ3QgMCkgew0KICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICRLYW5kSWR4ID0gQCgkZy5waSkgKyAkQW5kZXJlDQogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgJEthbmRPYmogPSBAKCkNCiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICBmb3JlYWNoICgkcGkgaW4gJEthbmRJZHgpIHsgJEthbmRPYmogKz0gKEdldC1QZXJz +b25Lb21wYWt0ICRBbGxlUGxhbnVuZ1skcGldKSB9DQogICAgICAgICAgICAgICAgICAgICAgICAg +ICAgW3ZvaWRdJFVuc2ljaGVyLkFkZChAeyBleGNlbCA9ICRQZXJzb25lbkV4Y2VsWyRlaV07IGth +bmRpZGF0ZW4gPSAkS2FuZE9iaiB9KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRFeGNl +bFp1UGxhbnVuZy5SZW1vdmUoJGVpKSB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgICAgICAg +ICB9DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAg +ICAgICAgICAjIFBoYXNlIDQ6IG1hdGNoICsgbmV1IGtsYXNzaWZpemllcmVuDQogICAgICAgICAg +ICAgICAgZm9yICgkZWkgPSAwOyAkZWkgLWx0ICRQZXJzb25lbkV4Y2VsLkNvdW50OyAkZWkrKykg +ew0KICAgICAgICAgICAgICAgICAgICBpZiAoJEV4Y2VsWnVQbGFudW5nLkNvbnRhaW5zS2V5KCRl +aSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRnID0gJEV4Y2VsWnVQbGFudW5nWyRlaV0N +CiAgICAgICAgICAgICAgICAgICAgICAgICRjb25maWRlbmNlID0gaWYgKCRnLnMgLWdlIDQpIHsg +J2hvY2gnIH0gZWxzZSB7ICdtaXR0ZWwnIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIFt2b2lk +XSRNYXRjaC5BZGQoQHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGNlbCA9ICRQZXJz +b25lbkV4Y2VsWyRlaV0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFudW5nID0gKEdl +dC1QZXJzb25Lb21wYWt0ICRBbGxlUGxhbnVuZ1skZy5waV0pDQogICAgICAgICAgICAgICAgICAg +ICAgICAgICAgY29uZmlkZW5jZSA9ICRjb25maWRlbmNlDQogICAgICAgICAgICAgICAgICAgICAg +ICB9KQ0KICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoLW5vdCAoJFVuc2ljaGVyIHwgV2hl +cmUtT2JqZWN0IHsgJF8uZXhjZWwgLWVxICRQZXJzb25lbkV4Y2VsWyRlaV0gfSkpIHsNCiAgICAg +ICAgICAgICAgICAgICAgICAgIFt2b2lkXSROZXUuQWRkKEB7IGV4Y2VsID0gJFBlcnNvbmVuRXhj +ZWxbJGVpXSB9KQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KDQog +ICAgICAgICAgICAgICAgIyBQaGFzZSA1OiBlbnRmZXJudCA9IEFLVElWRSBwbGFudW5nIG9obmUg +TWF0Y2ggKGluYWt0aXZlIGJsZWliZW4gZWluZmFjaCBpbmFrdGl2KQ0KICAgICAgICAgICAgICAg +IGZvciAoJHBpID0gMDsgJHBpIC1sdCAkQWxsZVBsYW51bmcuQ291bnQ7ICRwaSsrKSB7DQogICAg +ICAgICAgICAgICAgICAgIGlmICgtbm90ICRQbGFudW5nVXNlZC5Db250YWluc0tleSgkcGkpKSB7 +DQogICAgICAgICAgICAgICAgICAgICAgICAkaXN0QWt0aXYgPSAtbm90ICRBbGxlUGxhbnVuZ1sk +cGldLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2FrdGl2J10gLW9yICRBbGxlUGxhbnVuZ1skcGldLmFr +dGl2IC1lcSAkdHJ1ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRpc3RBa3Rpdikgew0K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2b2lkXSRFbnRmZXJudC5BZGQoQHsgcGxhbnVu +ZyA9IChHZXQtUGVyc29uS29tcGFrdCAkQWxsZVBsYW51bmdbJHBpXSkgfSkNCiAgICAgICAgICAg +ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0N +Cg0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbiAkUmVzIEB7DQogICAgICAgICAgICAgICAgICAg +IGphaHIgPSBpZiAoJFBhcmFtLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2phaHInXSkgeyAkUGFyYW0u +amFociB9IGVsc2UgeyAkbnVsbCB9DQogICAgICAgICAgICAgICAgICAgIHBlcnNvbmVuID0gQHsN +CiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoID0gQCgkTWF0Y2gpDQogICAgICAgICAgICAg +ICAgICAgICAgICBuZXUgPSBAKCROZXUpDQogICAgICAgICAgICAgICAgICAgICAgICBlbnRmZXJu +dCA9IEAoJEVudGZlcm50KQ0KICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWNoZXIgPSBAKCRV +bnNpY2hlcikNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBhbnph +aGwgPSBAew0KICAgICAgICAgICAgICAgICAgICAgICAgcGVyc29uZW5FeGNlbCA9ICRQZXJzb25l +bkV4Y2VsLkNvdW50DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQog +ICAgICAgICAgICAgICAgRGVidWctTG9nICdBUEknICJQT1NUIC9hcGkvaW1wb3J0L2V4Y2VsL3Zv +cnNjaGF1IC0+ICQoJFBlcnNvbmVuRXhjZWwuQ291bnQpIFBlcnNvbmVuLCBtYXRjaD0kKCRNYXRj +aC5Db3VudCkgbmV1PSQoJE5ldS5Db3VudCkgZW50ZmVybnQ9JCgkRW50ZmVybnQuQ291bnQpIHVu +c2ljaGVyPSQoJFVuc2ljaGVyLkNvdW50KSINCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAg +ICAgICAgICAgfQ0KDQogICAgICAgICAgICAjID09PT09PT09PT09PT09PT09PT09PSBGTEQ6IEVY +Q0VMLUlNUE9SVCAoVWViZXJuYWhtZSkgPT09PT09PT09PT09PT09PT09PT09DQogICAgICAgICAg +ICAjIFNwaWVnZWwgenUgc2VydmVyLnB5IFBPU1QgL2FwaS9pbXBvcnQvZXhjZWwvdWViZXJuZWht +ZW4uDQogICAgICAgICAgICAjIEJvZHkgZW50aGFlbHQgZ2VwYXJzdGUgRXhjZWwtRGF0ZW4gKyBV +c2VyLUFrdGlvbmVuIGF1cyBkZW0gV2l6YXJkLg0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAn +L2FwaS9pbXBvcnQvZXhjZWwvdWViZXJuZWhtZW4nIC1hbmQgJE1ldGhvZCAtZXEgJ1BPU1QnKSB7 +DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0U3VwZXJVc2VyKSkgeyBTZW5kLUVy +cm9yICRSZXMgJ051ciBTdXBlclVzZXIgZHVlcmZlbiBpbXBvcnRpZXJlbicgNDAzOyBjb250aW51 +ZSB9DQogICAgICAgICAgICAgICAgJEJvZHkgPSBSZWFkLUJvZHkgJFJlcQ0KICAgICAgICAgICAg +ICAgIGlmICgkbnVsbCAtZXEgJEJvZHkpIHsgU2VuZC1FcnJvciAkUmVzICdBbmZyYWdlIHp1IGdy +b3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAg +ICAgICAgICAkUGFyYW0gPSAkQm9keSB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAgICAgICAgICAg +ICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzICdVbmd1ZWx0 +aWdlcyBKU09OJyA0MDA7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAg +ICAgICAgJFBhcnNlZCA9ICRQYXJhbS5wYXJzZWREYXRlbg0KICAgICAgICAgICAgICAgICRBa3Rp +b25lbiA9IEAoJFBhcmFtLnBlcnNvbmVuQWt0aW9uZW4pDQogICAgICAgICAgICAgICAgJE9wdHMg +PSAkUGFyYW0udWViZXJuZWhtZW4NCiAgICAgICAgICAgICAgICAkT3B0U2NoaWNodGVuID0gaWYg +KCRPcHRzLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3NjaGljaHRlbiddKSB7IFtib29sXSRPcHRzLnNj +aGljaHRlbiB9IGVsc2UgeyAkdHJ1ZSB9DQogICAgICAgICAgICAgICAgJE9wdEtvbW1lbnRhcmUg +PSBpZiAoJE9wdHMuUFNPYmplY3QuUHJvcGVydGllc1sna29tbWVudGFyZSddKSB7IFtib29sXSRP +cHRzLmtvbW1lbnRhcmUgfSBlbHNlIHsgJHRydWUgfQ0KICAgICAgICAgICAgICAgICRPcHRTb25k +ZXJ0ZXJtaW5lID0gaWYgKCRPcHRzLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3NvbmRlcnRlcm1pbmUn +XSkgeyBbYm9vbF0kT3B0cy5zb25kZXJ0ZXJtaW5lIH0gZWxzZSB7ICR0cnVlIH0NCiAgICAgICAg +ICAgICAgICAkT3B0VGFnZXNkYXRlbiA9IGlmICgkT3B0cy5QU09iamVjdC5Qcm9wZXJ0aWVzWyd0 +YWdlc2RhdGVuJ10pIHsgW2Jvb2xdJE9wdHMudGFnZXNkYXRlbiB9IGVsc2UgeyAkdHJ1ZSB9DQog +ICAgICAgICAgICAgICAgJE9wdFJlaWhlbmZvbGdlID0gaWYgKCRPcHRzLlBTT2JqZWN0LlByb3Bl +cnRpZXNbJ3JlaWhlbmZvbGdlJ10pIHsgW2Jvb2xdJE9wdHMucmVpaGVuZm9sZ2UgfSBlbHNlIHsg +JHRydWUgfQ0KDQogICAgICAgICAgICAgICAgJEV4Y2VsUGVyc29uZW4gPSBpZiAoJFBhcnNlZC5Q +U09iamVjdC5Qcm9wZXJ0aWVzWydwZXJzb25lbiddKSB7IEAoJFBhcnNlZC5wZXJzb25lbikgfSBl +bHNlIHsgQCgpIH0NCiAgICAgICAgICAgICAgICAkRXhjZWxFaW50cmFlZ2UgPSBpZiAoJFBhcnNl +ZC5QU09iamVjdC5Qcm9wZXJ0aWVzWydlaW50cmFlZ2UnXSkgeyAkUGFyc2VkLmVpbnRyYWVnZSB9 +IGVsc2UgeyAkbnVsbCB9DQogICAgICAgICAgICAgICAgJEV4Y2VsUGZsaWNodCA9IGlmICgkUGFy +c2VkLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3BmbGljaHQnXSkgeyAkUGFyc2VkLnBmbGljaHQgfSBl +bHNlIHsgJG51bGwgfQ0KICAgICAgICAgICAgICAgICRFeGNlbEtvbW1lbnRhcmUgPSBpZiAoJFBh +cnNlZC5QU09iamVjdC5Qcm9wZXJ0aWVzWydrb21tZW50YXJlJ10pIHsgJFBhcnNlZC5rb21tZW50 +YXJlIH0gZWxzZSB7ICRudWxsIH0NCiAgICAgICAgICAgICAgICAkRXhjZWxUZXJtaW5lID0gaWYg +KCRQYXJzZWQuUFNPYmplY3QuUHJvcGVydGllc1sndGVybWluZSddKSB7ICRQYXJzZWQudGVybWlu +ZSB9IGVsc2UgeyAkbnVsbCB9DQogICAgICAgICAgICAgICAgJEV4Y2VsVGFnZXNkYXRlbiA9IGlm +ICgkUGFyc2VkLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3RhZ2VzZGF0ZW4nXSkgeyAkUGFyc2VkLnRh +Z2VzZGF0ZW4gfSBlbHNlIHsgJG51bGwgfQ0KDQogICAgICAgICAgICAgICAgIyBFeGNlbC1Sb3cg +LT4gRXhjZWwtUGVyc29uIEhhc2htYXANCiAgICAgICAgICAgICAgICAkRXhjZWxCeVJvdyA9IEB7 +fQ0KICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwIGluICRFeGNlbFBlcnNvbmVuKSB7DQogICAg +ICAgICAgICAgICAgICAgIGlmICgkcC5QU09iamVjdC5Qcm9wZXJ0aWVzWydleGNlbFJvdyddKSB7 +DQogICAgICAgICAgICAgICAgICAgICAgICAkRXhjZWxCeVJvd1tbaW50XSRwLmV4Y2VsUm93XSA9 +ICRwDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAg +ICAgICAgICAkSmV0enQgPSBHZXQtRGF0ZSAtRm9ybWF0ICd5eXl5LU1NLWRkIEhIOm1tOnNzJw0K +ICAgICAgICAgICAgICAgICRUcyA9IEdldC1EYXRlIC1Gb3JtYXQgJ3l5eXlNTWRkX0hIbW1zcycN +CiAgICAgICAgICAgICAgICAkQmFja3VwTmFtZSA9ICJwbGFudW5nX2JhY2t1cF92b3JfZXhjZWxf +aW1wb3J0XyRUcy5qc29uIg0KDQogICAgICAgICAgICAgICAgJExvY2tSZXN1bHQgPSAkbnVsbA0K +ICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICRMb2NrUmVzdWx0ID0g +SW52b2tlLVdpdGhGaWxlTG9jayAncGxhbnVuZy5qc29uJyB7DQogICAgICAgICAgICAgICAgICAg +ICAgICAkUGxhbnVuZyA9IFJlYWQtSnNvbkZpbGUgJ3BsYW51bmcuanNvbicNCiAgICAgICAgICAg +ICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJFBsYW51bmcpIHsgcmV0dXJuIEB7IHR5cCA9ICdl +cnJvcic7IGNvZGUgPSA0MDQ7IG1zZyA9ICdwbGFudW5nLmpzb24gbmljaHQgZ2VmdW5kZW4nIH0g +fQ0KICAgICAgICAgICAgICAgICAgICAgICAgIyBCYWNrdXAgdW50ZXIgZGVtIExvY2sNCiAgICAg +ICAgICAgICAgICAgICAgICAgICRQbGFudW5nUGF0aCA9IEpvaW4tUGF0aCAkRGF0YURpciAncGxh +bnVuZy5qc29uJw0KICAgICAgICAgICAgICAgICAgICAgICAgQ29weS1JdGVtIC1QYXRoICRQbGFu +dW5nUGF0aCAtRGVzdGluYXRpb24gKEpvaW4tUGF0aCAkRGF0YURpciAkQmFja3VwTmFtZSkgLUZv +cmNlDQogICAgICAgICAgICAgICAgICAgICAgICBJbnZva2UtQmFja3VwUm90YXRpb24gJ3BsYW51 +bmdfYmFja3VwXyouanNvbicgMjANCg0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3Qg +JFBsYW51bmcuUFNPYmplY3QuUHJvcGVydGllc1sncGVyc29uZW4nXSkgeyAkUGxhbnVuZyB8IEFk +ZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1lICdwZXJzb25lbicgLVZhbHVl +IEAoKSB9DQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkUGxhbnVuZy5QU09iamVj +dC5Qcm9wZXJ0aWVzWydlaW50cmFlZ2UnXSkgeyAkUGxhbnVuZyB8IEFkZC1NZW1iZXIgLU1lbWJl +clR5cGUgTm90ZVByb3BlcnR5IC1OYW1lICdlaW50cmFlZ2UnIC1WYWx1ZSAoTmV3LU9iamVjdCBQ +U09iamVjdCkgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJFBsYW51bmcuUFNP +YmplY3QuUHJvcGVydGllc1sncGZsaWNodCddKSB7ICRQbGFudW5nIHwgQWRkLU1lbWJlciAtTWVt +YmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgJ3BmbGljaHQnIC1WYWx1ZSAoTmV3LU9iamVjdCBQ +U09iamVjdCkgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJFBsYW51bmcuUFNP +YmplY3QuUHJvcGVydGllc1sna29tbWVudGFyZSddKSB7ICRQbGFudW5nIHwgQWRkLU1lbWJlciAt +TWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgJ2tvbW1lbnRhcmUnIC1WYWx1ZSAoTmV3LU9i +amVjdCBQU09iamVjdCkgfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICAjIFBlcnNvbmVuLUxp +c3RlIG11dGllcmVuDQogICAgICAgICAgICAgICAgICAgICAgICAkUGVyc29uZW5MaXN0ZSA9IE5l +dy1PYmplY3QgU3lzdGVtLkNvbGxlY3Rpb25zLkFycmF5TGlzdA0KICAgICAgICAgICAgICAgICAg +ICAgICAgZm9yZWFjaCAoJHAgaW4gQCgkUGxhbnVuZy5wZXJzb25lbikpIHsgW3ZvaWRdJFBlcnNv +bmVuTGlzdGUuQWRkKCRwKSB9DQogICAgICAgICAgICAgICAgICAgICAgICAkTmV4dElkID0gMQ0K +ICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHAgaW4gJFBlcnNvbmVuTGlzdGUpIHsN +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHAuUFNPYmplY3QuUHJvcGVydGllc1sn +aWQnXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaSA9IFtpbnRdJHAuaWQN +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRpIC1nZSAkTmV4dElkKSB7ICRO +ZXh0SWQgPSAkaSArIDEgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAg +ICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICAgICAgJEV4Y2VsUm93VG9Q +aWQgPSBAe30NCiAgICAgICAgICAgICAgICAgICAgICAgICROUGVyc29uZW5OZXUgPSAwOyAkTlBl +cnNvbmVuRGVha3QgPSAwOyAkTlBlcnNvbmVuQWt0dWFsaXNpZXJ0ID0gMA0KICAgICAgICAgICAg +ICAgICAgICAgICAgIyBwbGFudW5nLVBlcnNvbmVuLUxvb2t1cCBuYWNoIGlkIChmdWVyIG1hdGNo +LVVwZGF0ZXMpDQogICAgICAgICAgICAgICAgICAgICAgICAkUGxhbnVuZ0J5SWQgPSBAe30NCiAg +ICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwIGluICRQZXJzb25lbkxpc3RlKSB7DQog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRwLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2lk +J10pIHsgJFBsYW51bmdCeUlkW1tpbnRdJHAuaWRdID0gJHAgfQ0KICAgICAgICAgICAgICAgICAg +ICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJGEgaW4gJEFrdGlvbmVu +KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFrdCA9IFtzdHJpbmddJGEuYWt0aW9u +DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRha3QgLWVxICdtYXRjaCcpIHsNCiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGVyID0gW2ludF0kYS5leGNlbFJvdw0KICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbWF0Y2hQaWQgPSBbaW50XSRhLnBsYW51bmdz +SWQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBTY2hpY2h0ZW4gKyBLb21tZW50 +YXJlIHdlcmRlbiBJTU1FUiBpbXBvcnRpZXJ0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICMgKGF1Y2ggZnVlciBpbmFrdGl2ZSBQZXJzb25lbiAtIERhdGVuIHZlcmZ1ZWdiYXINCiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBmYWxscyBkaWUgUGVyc29uIHNwYWV0ZXIg +cmVha3RpdmllcnQgd2lyZCkuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyZWFr +dCA9ICRmYWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGEuUFNPYmpl +Y3QuUHJvcGVydGllc1sncmVha3RpdmllcmVuJ10pIHsgJHJlYWt0ID0gW2Jvb2xdJGEucmVha3Rp +dmllcmVuIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEV4Y2VsUm93VG9QaWRb +JGVyXSA9ICRtYXRjaFBpZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEV4Y2Vs +LUZlbGRlciBzcGllZ2VsbiwgYWJlciBOVVIgbGVlcmUgRmVsZGVyIHVlYmVyc2NocmVpYmVuDQog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkRXhjZWxCeVJvdy5Db250YWluc0tl +eSgkZXIpIC1hbmQgJFBsYW51bmdCeUlkLkNvbnRhaW5zS2V5KCRtYXRjaFBpZCkpIHsNCiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRlcCA9ICRFeGNlbEJ5Um93WyRlcl0NCiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0YXJnZXQgPSAkUGxhbnVuZ0J5SWRb +JG1hdGNoUGlkXQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGdlYWVuZGVy +dCA9ICRmYWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBSZWFrdGl2 +aWVyZW4gTlVSIHdlbm4gVXNlciBleHBsaXppdCBhbmdlZm9yZGVydA0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgJGlzdEFrdGl2ID0gLW5vdCAkdGFyZ2V0LlBTT2JqZWN0LlBy +b3BlcnRpZXNbJ2FrdGl2J10gLW9yICR0YXJnZXQuYWt0aXYgLWVxICR0cnVlDQogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkaXN0QWt0aXYgLWFuZCAkcmVha3Qp +IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHRhcmdldC5Q +U09iamVjdC5Qcm9wZXJ0aWVzWydha3RpdiddKSB7ICR0YXJnZXQuYWt0aXYgPSAkdHJ1ZSB9DQog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7ICR0YXJnZXQgfCBB +ZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAtTmFtZSAnYWt0aXYnIC1WYWx1ZSAk +dHJ1ZSB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGdlYWVuZGVy +dCA9ICR0cnVlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkZmVsZCBpbiBAKCduYWNobmFt +ZScsICdkaWVuc3RncmFkJywgJ2Z1bmt0aW9uJykpIHsNCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAkbmV1ID0gaWYgKCRlcC5QU09iamVjdC5Qcm9wZXJ0aWVzWyRmZWxk +XSkgeyAoW3N0cmluZ10kZXAuJGZlbGQpLlRyaW0oKSB9IGVsc2UgeyAnJyB9DQogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFsdCA9IGlmICgkdGFyZ2V0LlBTT2JqZWN0 +LlByb3BlcnRpZXNbJGZlbGRdKSB7IChbc3RyaW5nXSR0YXJnZXQuJGZlbGQpLlRyaW0oKSB9IGVs +c2UgeyAnJyB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRu +ZXUgLWFuZCAtbm90ICRhbHQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgaWYgKCR0YXJnZXQuUFNPYmplY3QuUHJvcGVydGllc1skZmVsZF0pIHsgJHRhcmdl +dC4kZmVsZCA9ICRuZXUgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICBlbHNlIHsgJHRhcmdldCB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5 +IC1OYW1lICRmZWxkIC1WYWx1ZSAkbmV1IH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgJGdlYWVuZGVydCA9ICR0cnVlDQogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +fQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBMZWdhY3ktRmVsZCAnbmFt +ZScgYXVzIGFsdGVuIERhdGVuc3RhZW5kZW4gZW50ZmVybmVuIChBdWRpdC1JdGVyLUIpDQogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHRhcmdldC5QU09iamVjdC5Qcm9w +ZXJ0aWVzWyduYW1lJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAkdGFyZ2V0LlBTT2JqZWN0LlByb3BlcnRpZXMuUmVtb3ZlKCduYW1lJykNCiAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZ2VhZW5kZXJ0ID0gJHRydWUNCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgZm9yZWFjaCAoJFBpZFByb3AgaW4gJFBpZE1hcC5QU09iamVjdC5Qcm9wZXJ0aWVzKSB7 -DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUGVyc29uSWQgPSBbc3RyaW5n -XSRQaWRQcm9wLk5hbWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRXZXJ0 -ID0gW3N0cmluZ10kUGlkUHJvcC5WYWx1ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgaWYgKC1ub3QgJFZhbGlkQ29kZXMuQ29udGFpbnMoJFdlcnQpKSB7DQogICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJE5PcnBoYW4rKw0KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo -JFBsYW51bmcuZWludHJhZWdlLiREYXR1bS5QU09iamVjdC5Qcm9wZXJ0aWVzWyRQZXJzb25JZF0p -IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUGxhbnVuZy5laW50 -cmFlZ2UuJERhdHVtLiRQZXJzb25JZCA9ICRXZXJ0DQogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICRQbGFudW5nLmVpbnRyYWVnZS4kRGF0dW0gfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5v -dGVQcm9wZXJ0eSAtTmFtZSAkUGVyc29uSWQgLVZhbHVlICRXZXJ0DQogICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAkQW56KysNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAg -ICAgICAgICAgICAgICAgaWYgKCRQYXJhbS5QU09iamVjdC5Qcm9wZXJ0aWVzWydwZmxpY2h0J10g -LWFuZCAkbnVsbCAtbmUgJFBhcmFtLnBmbGljaHQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAg -ICAgICBmb3JlYWNoICgkRGF0dW1Qcm9wIGluICRQYXJhbS5wZmxpY2h0LlBTT2JqZWN0LlByb3Bl -cnRpZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJERhdHVtID0gJERhdHVt -UHJvcC5OYW1lDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQaWRNYXAgPSAkRGF0 -dW1Qcm9wLlZhbHVlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRQ -bGFudW5nLnBmbGljaHQuUFNPYmplY3QuUHJvcGVydGllc1skRGF0dW1dKSB7DQogICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAkUGxhbnVuZy5wZmxpY2h0IHwgQWRkLU1lbWJlciAt +ICAgICAgICAgIGlmICgkZ2VhZW5kZXJ0KSB7ICROUGVyc29uZW5Ba3R1YWxpc2llcnQrKyB9DQog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICB9IGVsc2VpZiAoJGFrdCAtZXEgJ25ldScpIHsNCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgJGVyID0gW2ludF0kYS5leGNlbFJvdw0KICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICBpZiAoLW5vdCAkRXhjZWxCeVJvdy5Db250YWluc0tleSgkZXIpKSB7IGNvbnRpbnVl +IH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGVwID0gJEV4Y2VsQnlSb3dbJGVy +XQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXhOYWNoID0gaWYgKCRlcC5QU09i +amVjdC5Qcm9wZXJ0aWVzWyduYWNobmFtZSddKSB7ICRlcC5uYWNobmFtZSB9IGVsc2UgeyAnJyB9 +DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgV2l6YXJkLVJhZGlvICJpbmFrdGl2 +IGltcG9ydGllcmVuIiByZXNwZWt0aWVyZW4gKEF1ZGl0LUl0ZXItQikNCiAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgJEFrdGl2RmxhZyA9ICR0cnVlDQogICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgIGlmICgkYS5QU09iamVjdC5Qcm9wZXJ0aWVzWydha3RpdiddIC1hbmQgJG51 +bGwgLW5lICRhLmFrdGl2KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAk +QWt0aXZGbGFnID0gW2Jvb2xdJGEuYWt0aXYNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTmV1UGVyc29uID0gW1BTQ3Vz +dG9tT2JqZWN0XUB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCA9ICRO +ZXh0SWQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFrdGl2ID0gJEFrdGl2 +RmxhZw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9ybmFtZSA9IGlmICgk +ZXAuUFNPYmplY3QuUHJvcGVydGllc1sndm9ybmFtZSddKSB7ICRlcC52b3JuYW1lIH0gZWxzZSB7 +ICcnIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hY2huYW1lID0gJGV4 +TmFjaA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGllbnN0Z3JhZCA9IGlm +ICgkZXAuUFNPYmplY3QuUHJvcGVydGllc1snZGllbnN0Z3JhZCddKSB7ICRlcC5kaWVuc3RncmFk +IH0gZWxzZSB7ICcnIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmt0 +aW9uID0gaWYgKCRlcC5QU09iamVjdC5Qcm9wZXJ0aWVzWydmdW5rdGlvbiddKSB7ICRlcC5mdW5r +dGlvbiB9IGVsc2UgeyAnJyB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3ZvaWRdJFBlcnNvbmVuTGlzdGUuQWRkKCRO +ZXVQZXJzb24pDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5nQnlJZFsk +TmV4dElkXSA9ICROZXVQZXJzb24NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEV4 +Y2VsUm93VG9QaWRbJGVyXSA9ICROZXh0SWQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgJE5leHRJZCsrDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICROUGVyc29uZW5O +ZXUrKw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZWlmICgkYWt0IC1lcSAnZGVh +a3RpdmllcmVuJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGVha3RJZCA9 +IFtpbnRdJGEucGxhbnVuZ3NJZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Jl +YWNoICgkcCBpbiAkUGVyc29uZW5MaXN0ZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgaWYgKCRwLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2lkJ10gLWFuZCBbaW50XSRwLmlk +IC1lcSAkZGVha3RJZCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +IGlmICgkcC5QU09iamVjdC5Qcm9wZXJ0aWVzWydha3RpdiddKSB7ICRwLmFrdGl2ID0gJGZhbHNl +IH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsgJHAgfCBB +ZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAtTmFtZSAnYWt0aXYnIC1WYWx1ZSAk +ZmFsc2UgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICROUGVyc29u +ZW5EZWFrdCsrDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsN +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAg +ICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICAgICAgICAgIyBTY2hpY2h0ZW4g +KyBQZmxpY2h0DQogICAgICAgICAgICAgICAgICAgICAgICAkTkVpbnRyYWVnZSA9IDA7ICROUGZs +aWNodCA9IDA7ICROT3JwaGFuID0gMA0KICAgICAgICAgICAgICAgICAgICAgICAgIyBBdWRpdC1J +SS0xIEYxOiBTY2hpY2h0Y29kZS1XaGl0ZWxpc3QgYXVjaCBpbSBFeGNlbC1JbXBvcnQuDQogICAg +ICAgICAgICAgICAgICAgICAgICAjIE1pcnJvciB6dSBzZXJ2ZXIucHk6Mzc2Ni0zNzcwLg0KICAg +ICAgICAgICAgICAgICAgICAgICAgJEV4Y2VsVmFsaWRDb2RlcyA9IE5ldy1PYmplY3QgU3lzdGVt +LkNvbGxlY3Rpb25zLkdlbmVyaWMuSGFzaFNldFtzdHJpbmddDQogICAgICAgICAgICAgICAgICAg +ICAgICBbdm9pZF0kRXhjZWxWYWxpZENvZGVzLkFkZCgnJykNCiAgICAgICAgICAgICAgICAgICAg +ICAgIGlmICgkbnVsbCAtbmUgJEFkbWluIC1hbmQgJEFkbWluLlBTT2JqZWN0LlByb3BlcnRpZXNb +J3NjaGljaHRjb2RlcyddKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAo +JFNjIGluICRBZG1pbi5zY2hpY2h0Y29kZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgaWYgKCRudWxsIC1uZSAkU2MgLWFuZCAkU2MuUFNPYmplY3QuUHJvcGVydGllc1snY29k +ZSddKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdm9pZF0kRXhjZWxW +YWxpZENvZGVzLkFkZChbc3RyaW5nXSRTYy5jb2RlKQ0KICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg +ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRPcHRTY2hpY2h0ZW4gLWFu +ZCAkbnVsbCAtbmUgJEV4Y2VsRWludHJhZWdlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAg +ICAgZm9yZWFjaCAoJERhdHVtUHJvcCBpbiAkRXhjZWxFaW50cmFlZ2UuUFNPYmplY3QuUHJvcGVy +dGllcykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRGF0dW0gPSAkRGF0dW1Q +cm9wLk5hbWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJFBsYW51 +bmcuZWludHJhZWdlLlBTT2JqZWN0LlByb3BlcnRpZXNbJERhdHVtXSkgew0KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51bmcuZWludHJhZWdlIHwgQWRkLU1lbWJlciAt TWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgJERhdHVtIC1WYWx1ZSAoTmV3LU9iamVjdCBQ U09iamVjdCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkUGlkUHJvcCBpbiAkUGlkTWFwLlBTT2JqZWN0 -LlByb3BlcnRpZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQZXJz -b25JZCA9IFtzdHJpbmddJFBpZFByb3AuTmFtZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgJEZsYWcgPSAkUGlkUHJvcC5WYWx1ZQ0KICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgaWYgKCRGbGFnKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgaWYgKCRQbGFudW5nLnBmbGljaHQuJERhdHVtLlBTT2JqZWN0LlByb3BlcnRpZXNb -JFBlcnNvbklkXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAkUGxhbnVuZy5wZmxpY2h0LiREYXR1bS4kUGVyc29uSWQgPSAkdHJ1ZQ0KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5nLnBmbGljaHQuJERhdHVtIHwgQWRkLU1l -bWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgJFBlcnNvbklkIC1WYWx1ZSAkdHJ1 -ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgaWYgKCRQbGFudW5nLnBmbGljaHQuJERhdHVtLlBTT2JqZWN0LlBy -b3BlcnRpZXNbJFBlcnNvbklkXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAkUGxhbnVuZy5wZmxpY2h0LiREYXR1bS5QU09iamVjdC5Qcm9wZXJ0aWVzLlJl -bW92ZSgkUGVyc29uSWQpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -fQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAg -ICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICBXcml0ZS1QbGFu -dW5nTWl0SW50ZWdyaXRhZXQgJFBsYW51bmcgICAjIEJ1bGstT3A6IGFsbGUgSE1BQ3MgbmV1DQog -ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQHsgdHlwID0gJ29rJzsgZWludHJhZWdlID0g -JEFuejsgdW5iZWthbm50ZUNvZGVzID0gJE5PcnBoYW4gfQ0KICAgICAgICAgICAgICAgICAgICB9 -DQogICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJy -b3IgJFJlcyAiVWViZXJuYWhtZS1GZWhsZXI6ICRfIiA1MDA7IGNvbnRpbnVlDQogICAgICAgICAg -ICAgICAgfQ0KDQogICAgICAgICAgICAgICAgaWYgKCRMb2NrUmVzdWx0LnR5cCAtZXEgJ2Vycm9y -JykgeyBTZW5kLUVycm9yICRSZXMgJExvY2tSZXN1bHQubXNnICRMb2NrUmVzdWx0LmNvZGU7IGNv -bnRpbnVlIH0NCg0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ3NjaGljaHRlbi5p -bXBvcnRpZXJ0JyBAeyBlaW50cmFlZ2UgPSAkTG9ja1Jlc3VsdC5laW50cmFlZ2U7IHVuYmVrYW5u -dGVDb2RlcyA9ICRMb2NrUmVzdWx0LnVuYmVrYW5udGVDb2RlcyB9DQogICAgICAgICAgICAgICAg -U2VuZC1Kc29uICRSZXMgQHsgc3RhdHVzID0gJ3VlYmVybm9tbWVuJzsgZWludHJhZWdlID0gJExv -Y2tSZXN1bHQuZWludHJhZWdlOyB1bmJla2FubnRlQ29kZXMgPSAkTG9ja1Jlc3VsdC51bmJla2Fu -bnRlQ29kZXMgfQ0KICAgICAgICAgICAgICAgIERlYnVnLUxvZyAnQVBJJyAiUE9TVCAvYXBpL2lt -cG9ydC9zY2hpY2h0ZW4vdWViZXJuZWhtZW4gLT4gJCgkTG9ja1Jlc3VsdC5laW50cmFlZ2UpIEVp -bnRyYWVnZSBnZXNjaHJpZWJlbiwgJCgkTG9ja1Jlc3VsdC51bmJla2FubnRlQ29kZXMpIHVuYmVr -YW5udGUgQ29kZXMgdmVyd29yZmVuIg0KICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAg -ICAgICB9DQoNCiAgICAgICAgICAgICMgPT09PT09PT09PT09PT09PT09PT09IEZMRDogRVhDRUwt -SU1QT1JUIChWb3JzY2hhdSkgPT09PT09PT09PT09PT09PT09PT09DQogICAgICAgICAgICAjIFNw -aWVnZWwgenUgc2VydmVyLnB5IFBPU1QgL2FwaS9pbXBvcnQvZXhjZWwvdm9yc2NoYXUuDQogICAg -ICAgICAgICAjIENsaWVudCAoQnJvd3NlciwgbWl0IHhsc3guZnVsbC5taW4uanMgLyBTaGVldEpT -KSBwYXJzdCBkaWUNCiAgICAgICAgICAgICMgRXhjZWwtVm9ybGFnZSB1bmQgc2NoaWNrdCBkYXMg -ZmVydGlnLWdlcGFyc3RlIFNjaGVtYS4NCiAgICAgICAgICAgICMgU2VydmVyIGxpZWZlcnQgbnVy -IGRlbiBQZXJzb25lbi1EaWZmIHp1ciBha3R1ZWxsZW4gcGxhbnVuZy5qc29uLg0KICAgICAgICAg -ICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9pbXBvcnQvZXhjZWwvdm9yc2NoYXUnIC1hbmQgJE1ldGhv -ZCAtZXEgJ1BPU1QnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0U3VwZXJV -c2VyKSkgeyBTZW5kLUVycm9yICRSZXMgJ051ciBTdXBlclVzZXIgZHVlcmZlbiBpbXBvcnRpZXJl -bicgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJEJvZHkgPSBSZWFkLUJvZHkgJFJl -cQ0KICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtZXEgJEJvZHkpIHsgU2VuZC1FcnJvciAkUmVz -ICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICB0cnkg -ew0KICAgICAgICAgICAgICAgICAgICAkUGFyYW0gPSAkQm9keSB8IENvbnZlcnRGcm9tLUpzb24N -CiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJv -ciAkUmVzICdVbmd1ZWx0aWdlcyBKU09OJyA0MDA7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAg -fQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRQYXJhbS5QU09iamVjdC5Qcm9wZXJ0aWVzWydw -ZXJzb25lbkV4Y2VsJ10gLW9yICRudWxsIC1lcSAkUGFyYW0ucGVyc29uZW5FeGNlbCkgew0KICAg -ICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXMgJ3BlcnNvbmVuRXhjZWwgKEFycmF5KSBm -ZWhsdCcgNDAwOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAk -UGVyc29uZW5FeGNlbCA9IEAoJFBhcmFtLnBlcnNvbmVuRXhjZWwpDQoNCiAgICAgICAgICAgICAg -ICAkUGxhbnVuZyA9IFJlYWQtSnNvbkZpbGUgJ3BsYW51bmcuanNvbicNCiAgICAgICAgICAgICAg -ICAkUGVyc29uZW5QbGFudW5nID0gQCgpDQogICAgICAgICAgICAgICAgaWYgKCRQbGFudW5nIC1h -bmQgJFBsYW51bmcuUFNPYmplY3QuUHJvcGVydGllc1sncGVyc29uZW4nXSkgew0KICAgICAgICAg -ICAgICAgICAgICAkUGVyc29uZW5QbGFudW5nID0gQCgkUGxhbnVuZy5wZXJzb25lbikNCiAgICAg -ICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAjIE1hdGNoLUhldXJpc3RpazogTmFjaG5h -bWUgenVlcnN0LCBkYW5uIFZvcm5hbWUsIG1pdCBEaWVuc3RncmFkIGFscw0KICAgICAgICAgICAg -ICAgICMgVGllYnJlYWtlci4gSGFyZC1GYWlsIHdlbm4gYmVpZGUgTmFjaG5hbWVuIGdlc2V0enQg -YWJlciB1bnRlcnNjaGllZGxpY2guDQogICAgICAgICAgICAgICAgIyBHcmVlZHktMToxLVp1b3Jk -bnVuZyAodmVyaGluZGVydCBkYXNzIHp3ZWkgRXhjZWwtJ0xlbmEnIGJlaWRlIGF1Zg0KICAgICAg -ICAgICAgICAgICMgZGllIGdsZWljaGUgcGxhbnVuZy1MZW5hIGxhbmRlbikuDQogICAgICAgICAg -ICAgICAgIyBJbmFrdGl2ZSBQZXJzb25lbiB3ZXJkZW4gZWJlbmZhbGxzIGJlcnVlY2tzaWNodGln -dCwgc29uc3Qgd3VlcmRlbg0KICAgICAgICAgICAgICAgICMgenV2b3IgZGVha3RpdmllcnRlIFBl -cnNvbmVuIGJlaSBSZS1JbXBvcnQgYWxzICduZXUnIGFuZ2VsZWd0IHN0YXR0DQogICAgICAgICAg -ICAgICAgIyByZWFrdGl2aWVydC4gQWt0aXZlIGJla29tbWVuICswLjUgU2NvcmUtQm9udXMuDQog -ICAgICAgICAgICAgICAgJEFsbGVQbGFudW5nID0gQCgkUGVyc29uZW5QbGFudW5nKQ0KDQogICAg -ICAgICAgICAgICAgZnVuY3Rpb24gR2V0LU5hbWVUb2tlbnMoJE5hbWUpIHsNCiAgICAgICAgICAg -ICAgICAgICAgIyBTcGxpdCBiZWkgQmluZGVzdHJpY2ggKyBXaGl0ZXNwYWNlLCBsb3dlcmNhc2Us -IGxlZXJlIHJhdXMuDQogICAgICAgICAgICAgICAgICAgICMgJ1JlbXVzLUFydGh1cicgLT4gQCgn -cmVtdXMnLCAnYXJ0aHVyJykNCiAgICAgICAgICAgICAgICAgICAgIyBVbWxhdXRlICsgc3MtTm9y -bTogJ011ZWxsZXInIG1hdGNoZWQgJ03DvGxsZXInLCAnTWFyaXNzJyAnTWFyacOfJy4NCiAgICAg -ICAgICAgICAgICAgICAgaWYgKC1ub3QgJE5hbWUpIHsgcmV0dXJuIEAoKSB9DQogICAgICAgICAg -ICAgICAgICAgICRzID0gKFtzdHJpbmddJE5hbWUpLlRyaW0oKS5Ub0xvd2VyKCkNCiAgICAgICAg -ICAgICAgICAgICAgJHMgPSAkcyAtcmVwbGFjZSAnw6QnLCdhZScgLXJlcGxhY2UgJ8O2Jywnb2Un -IC1yZXBsYWNlICfDvCcsJ3VlJyAtcmVwbGFjZSAnw58nLCdzcycNCiAgICAgICAgICAgICAgICAg -ICAgcmV0dXJuIEAoJHMgLXNwbGl0ICdbLVxzXSsnIHwgV2hlcmUtT2JqZWN0IHsgJF8gfSkNCiAg -ICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICBmdW5jdGlvbiBUZXN0LU5hbWVzTWF0 -Y2goJEEsICRCKSB7DQogICAgICAgICAgICAgICAgICAgICMgVHJ1ZSB3ZW5uIGRpZSBUb2tlbi1T -ZXRzIHNpY2ggdWViZXJsYXBwZW4uDQogICAgICAgICAgICAgICAgICAgICR0YSA9IEdldC1OYW1l -VG9rZW5zICRBDQogICAgICAgICAgICAgICAgICAgICR0YiA9IEdldC1OYW1lVG9rZW5zICRCDQog -ICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICR0YSAtb3IgLW5vdCAkdGIpIHsgcmV0dXJuICRm -YWxzZSB9DQogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCR0IGluICR0YSkgeyBpZiAoJHRi -IC1jb250YWlucyAkdCkgeyByZXR1cm4gJHRydWUgfSB9DQogICAgICAgICAgICAgICAgICAgIHJl -dHVybiAkZmFsc2UNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICBmdW5jdGlv -biBHZXQtUGVyc29uU2NvcmUoJEV4Y2VsLCAkUGxhbnVuZykgew0KICAgICAgICAgICAgICAgICAg -ICAkZU4gPSAoW3N0cmluZ10kRXhjZWwubmFjaG5hbWUpLlRyaW0oKQ0KICAgICAgICAgICAgICAg -ICAgICAkZVYgPSAoW3N0cmluZ10kRXhjZWwudm9ybmFtZSkuVHJpbSgpDQogICAgICAgICAgICAg -ICAgICAgICRlRCA9IChbc3RyaW5nXSRFeGNlbC5kaWVuc3RncmFkKS5UcmltKCkuVG9Mb3dlcigp -DQogICAgICAgICAgICAgICAgICAgICRwTiA9IGlmICgkUGxhbnVuZy5QU09iamVjdC5Qcm9wZXJ0 -aWVzWyduYWNobmFtZSddKSB7IChbc3RyaW5nXSRQbGFudW5nLm5hY2huYW1lKS5UcmltKCkgfSBl -bHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgICAgICAkcFYgPSBpZiAoJFBsYW51bmcuUFNPYmpl -Y3QuUHJvcGVydGllc1sndm9ybmFtZSddKSB7IChbc3RyaW5nXSRQbGFudW5nLnZvcm5hbWUpLlRy -aW0oKSB9IGVsc2UgeyAnJyB9DQogICAgICAgICAgICAgICAgICAgICRwRCA9IGlmICgkUGxhbnVu -Zy5QU09iamVjdC5Qcm9wZXJ0aWVzWydkaWVuc3RncmFkJ10pIHsgKFtzdHJpbmddJFBsYW51bmcu -ZGllbnN0Z3JhZCkuVHJpbSgpLlRvTG93ZXIoKSB9IGVsc2UgeyAnJyB9DQogICAgICAgICAgICAg -ICAgICAgICMgSGFyZC1GYWlsOiBiZWlkZSBOYWNobmFtZW4gZ2VzZXR6dCwgYWJlciBrZWluZSBU -b2tlbi1VZWJlcmxhcHB1bmcNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRlTiAtYW5kICRwTiAt -YW5kIC1ub3QgKFRlc3QtTmFtZXNNYXRjaCAkZU4gJHBOKSkgeyByZXR1cm4gMCB9DQogICAgICAg -ICAgICAgICAgICAgICRuTSA9IChUZXN0LU5hbWVzTWF0Y2ggJGVOICRwTikNCiAgICAgICAgICAg -ICAgICAgICAgJHZNID0gKFRlc3QtTmFtZXNNYXRjaCAkZVYgJHBWKQ0KICAgICAgICAgICAgICAg -ICAgICAkZE0gPSAoJGVEIC1hbmQgJHBEIC1hbmQgJGVEIC1lcSAkcEQpDQogICAgICAgICAgICAg -ICAgICAgIGlmICgkbk0gLWFuZCAkdk0gLWFuZCAkZE0pIHsgcmV0dXJuIDUgfSAgICMgcGVyZmVr -dA0KICAgICAgICAgICAgICAgICAgICBpZiAoJG5NIC1hbmQgJHZNKSB7IHJldHVybiA0IH0gICAg -ICAgICAgICAjIHNlaHIgc3RhcmsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRuTSAtYW5kICRk -TSkgeyByZXR1cm4gMyB9DQogICAgICAgICAgICAgICAgICAgIGlmICgkbk0pIHsgcmV0dXJuIDMg -fQ0KICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkcE4gLWFuZCAkdk0gLWFuZCAkZE0pIHsg -cmV0dXJuIDMgfQ0KICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkcE4gLWFuZCAkdk0pIHsg -cmV0dXJuIDIgfQ0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gMA0KICAgICAgICAgICAgICAg -IH0NCg0KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIEdldC1QZXJzb25Lb21wYWt0KCRQKSB7DQog -ICAgICAgICAgICAgICAgICAgIHJldHVybiBAew0KICAgICAgICAgICAgICAgICAgICAgICAgaWQg -PSAkUC5pZA0KICAgICAgICAgICAgICAgICAgICAgICAgdm9ybmFtZSA9IGlmICgkUC5QU09iamVj -dC5Qcm9wZXJ0aWVzWyd2b3JuYW1lJ10pIHsgJFAudm9ybmFtZSB9IGVsc2UgeyAnJyB9DQogICAg -ICAgICAgICAgICAgICAgICAgICBuYWNobmFtZSA9IGlmICgkUC5QU09iamVjdC5Qcm9wZXJ0aWVz -WyduYWNobmFtZSddKSB7ICRQLm5hY2huYW1lIH0gZWxzZSB7ICcnIH0NCiAgICAgICAgICAgICAg -ICAgICAgICAgIGRpZW5zdGdyYWQgPSBpZiAoJFAuUFNPYmplY3QuUHJvcGVydGllc1snZGllbnN0 -Z3JhZCddKSB7ICRQLmRpZW5zdGdyYWQgfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgICAg -ICAgICAgZnVua3Rpb24gPSBpZiAoJFAuUFNPYmplY3QuUHJvcGVydGllc1snZnVua3Rpb24nXSkg -eyAkUC5mdW5rdGlvbiB9IGVsc2UgeyAnJyB9DQogICAgICAgICAgICAgICAgICAgICAgICBha3Rp -diA9IGlmICgkUC5QU09iamVjdC5Qcm9wZXJ0aWVzWydha3RpdiddKSB7ICRQLmFrdGl2IH0gZWxz -ZSB7ICR0cnVlIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCg0K -ICAgICAgICAgICAgICAgICMgUGhhc2UgMTogYWxsZSAoc2NvcmUsIGVpLCBwaSktUGFhcmUuIEFr -dGl2ZSArMC41IEJvbnVzLg0KICAgICAgICAgICAgICAgICRQYWFyZSA9IE5ldy1PYmplY3QgU3lz -dGVtLkNvbGxlY3Rpb25zLkFycmF5TGlzdA0KICAgICAgICAgICAgICAgIGZvciAoJGVpID0gMDsg -JGVpIC1sdCAkUGVyc29uZW5FeGNlbC5Db3VudDsgJGVpKyspIHsNCiAgICAgICAgICAgICAgICAg -ICAgZm9yICgkcGkgPSAwOyAkcGkgLWx0ICRBbGxlUGxhbnVuZy5Db3VudDsgJHBpKyspIHsNCiAg -ICAgICAgICAgICAgICAgICAgICAgICRzID0gR2V0LVBlcnNvblNjb3JlICRQZXJzb25lbkV4Y2Vs -WyRlaV0gJEFsbGVQbGFudW5nWyRwaV0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkcyAt -Z3QgMCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpc3RBa3RpdiA9IC1ub3QgJEFs -bGVQbGFudW5nWyRwaV0uUFNPYmplY3QuUHJvcGVydGllc1snYWt0aXYnXSAtb3IgJEFsbGVQbGFu -dW5nWyRwaV0uYWt0aXYgLWVxICR0cnVlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg -KCRpc3RBa3RpdikgeyAkcyArPSAwLjUgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2 -b2lkXSRQYWFyZS5BZGQoQHsgcz0kczsgZWk9JGVpOyBwaT0kcGkgfSkNCiAgICAgICAgICAgICAg -ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAg -ICAgICAgICAgICAgICAjIFBoYXNlIDI6IGdyZWVkeSBuYWNoIFNjb3JlIGFic3RlaWdlbmQNCiAg -ICAgICAgICAgICAgICAkU29ydGVkID0gQCgkUGFhcmUgfCBTb3J0LU9iamVjdCAtUHJvcGVydHkg -QHtFeHByZXNzaW9uPXsgLSRfLnMgfX0pDQogICAgICAgICAgICAgICAgJEV4Y2VsWnVQbGFudW5n -ID0gQHt9DQogICAgICAgICAgICAgICAgJFBsYW51bmdVc2VkID0gQHt9DQogICAgICAgICAgICAg -ICAgZm9yZWFjaCAoJHBwIGluICRTb3J0ZWQpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRF -eGNlbFp1UGxhbnVuZy5Db250YWluc0tleSgkcHAuZWkpKSB7IGNvbnRpbnVlIH0NCiAgICAgICAg -ICAgICAgICAgICAgaWYgKCRQbGFudW5nVXNlZC5Db250YWluc0tleSgkcHAucGkpKSB7IGNvbnRp -bnVlIH0NCiAgICAgICAgICAgICAgICAgICAgJEV4Y2VsWnVQbGFudW5nWyRwcC5laV0gPSBAeyBw -aSA9ICRwcC5waTsgcyA9ICRwcC5zIH0NCiAgICAgICAgICAgICAgICAgICAgJFBsYW51bmdVc2Vk -WyRwcC5waV0gPSAkdHJ1ZQ0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICRN -YXRjaCA9IE5ldy1PYmplY3QgU3lzdGVtLkNvbGxlY3Rpb25zLkFycmF5TGlzdA0KICAgICAgICAg -ICAgICAgICROZXUgPSBOZXctT2JqZWN0IFN5c3RlbS5Db2xsZWN0aW9ucy5BcnJheUxpc3QNCiAg -ICAgICAgICAgICAgICAkVW5zaWNoZXIgPSBOZXctT2JqZWN0IFN5c3RlbS5Db2xsZWN0aW9ucy5B -cnJheUxpc3QNCiAgICAgICAgICAgICAgICAkRW50ZmVybnQgPSBOZXctT2JqZWN0IFN5c3RlbS5D -b2xsZWN0aW9ucy5BcnJheUxpc3QNCg0KICAgICAgICAgICAgICAgICMgUGhhc2UgMzogTWVocmRl -dXRpZ2tlaXRzLUNoZWNrDQogICAgICAgICAgICAgICAgZm9yICgkZWkgPSAwOyAkZWkgLWx0ICRQ -ZXJzb25lbkV4Y2VsLkNvdW50OyAkZWkrKykgew0KICAgICAgICAgICAgICAgICAgICBpZiAoLW5v -dCAkRXhjZWxadVBsYW51bmcuQ29udGFpbnNLZXkoJGVpKSkgeyBjb250aW51ZSB9DQogICAgICAg -ICAgICAgICAgICAgICRnID0gJEV4Y2VsWnVQbGFudW5nWyRlaV0NCiAgICAgICAgICAgICAgICAg -ICAgaWYgKCRnLnMgLWxlIDMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRBbmRlcmUgPSBA -KCkNCiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoJHBpID0gMDsgJHBpIC1sdCAkQWxsZVBs -YW51bmcuQ291bnQ7ICRwaSsrKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRw -aSAtZXEgJGcucGkpIHsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm -ICgkUGxhbnVuZ1VzZWQuQ29udGFpbnNLZXkoJHBpKSkgeyBjb250aW51ZSB9DQogICAgICAgICAg -ICAgICAgICAgICAgICAgICAgJHNrID0gR2V0LVBlcnNvblNjb3JlICRQZXJzb25lbkV4Y2VsWyRl -aV0gJEFsbGVQbGFudW5nWyRwaV0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaXN0QSA9 -IC1ub3QgJEFsbGVQbGFudW5nWyRwaV0uUFNPYmplY3QuUHJvcGVydGllc1snYWt0aXYnXSAtb3Ig -JEFsbGVQbGFudW5nWyRwaV0uYWt0aXYgLWVxICR0cnVlDQogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgaWYgKCRzayAtZ3QgMCAtYW5kICRpc3RBKSB7ICRzayArPSAwLjUgfQ0KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgIGlmICgkc2sgLWVxICRnLnMpIHsgJEFuZGVyZSArPSAkcGkgfQ0K -ICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRB -bmRlcmUuQ291bnQgLWd0IDApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkS2FuZElk -eCA9IEAoJGcucGkpICsgJEFuZGVyZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRLYW5k -T2JqID0gQCgpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHBpIGluICRL -YW5kSWR4KSB7ICRLYW5kT2JqICs9IChHZXQtUGVyc29uS29tcGFrdCAkQWxsZVBsYW51bmdbJHBp -XSkgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2b2lkXSRVbnNpY2hlci5BZGQoQHsg -ZXhjZWwgPSAkUGVyc29uZW5FeGNlbFskZWldOyBrYW5kaWRhdGVuID0gJEthbmRPYmogfSkNCiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAkRXhjZWxadVBsYW51bmcuUmVtb3ZlKCRlaSkgfCBP -dXQtTnVsbA0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9 -DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgIyBQaGFzZSA0OiBtYXRjaCAr -IG5ldSBrbGFzc2lmaXppZXJlbg0KICAgICAgICAgICAgICAgIGZvciAoJGVpID0gMDsgJGVpIC1s -dCAkUGVyc29uZW5FeGNlbC5Db3VudDsgJGVpKyspIHsNCiAgICAgICAgICAgICAgICAgICAgaWYg -KCRFeGNlbFp1UGxhbnVuZy5Db250YWluc0tleSgkZWkpKSB7DQogICAgICAgICAgICAgICAgICAg -ICAgICAkZyA9ICRFeGNlbFp1UGxhbnVuZ1skZWldDQogICAgICAgICAgICAgICAgICAgICAgICAk -Y29uZmlkZW5jZSA9IGlmICgkZy5zIC1nZSA0KSB7ICdob2NoJyB9IGVsc2UgeyAnbWl0dGVsJyB9 -DQogICAgICAgICAgICAgICAgICAgICAgICBbdm9pZF0kTWF0Y2guQWRkKEB7DQogICAgICAgICAg -ICAgICAgICAgICAgICAgICAgZXhjZWwgPSAkUGVyc29uZW5FeGNlbFskZWldDQogICAgICAgICAg -ICAgICAgICAgICAgICAgICAgcGxhbnVuZyA9IChHZXQtUGVyc29uS29tcGFrdCAkQWxsZVBsYW51 -bmdbJGcucGldKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZGVuY2UgPSAkY29u -ZmlkZW5jZQ0KICAgICAgICAgICAgICAgICAgICAgICAgfSkNCiAgICAgICAgICAgICAgICAgICAg -fSBlbHNlaWYgKC1ub3QgKCRVbnNpY2hlciB8IFdoZXJlLU9iamVjdCB7ICRfLmV4Y2VsIC1lcSAk -UGVyc29uZW5FeGNlbFskZWldIH0pKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBbdm9pZF0k -TmV1LkFkZChAeyBleGNlbCA9ICRQZXJzb25lbkV4Y2VsWyRlaV0gfSkNCiAgICAgICAgICAgICAg -ICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICMgUGhhc2UgNTog -ZW50ZmVybnQgPSBBS1RJVkUgcGxhbnVuZyBvaG5lIE1hdGNoIChpbmFrdGl2ZSBibGVpYmVuIGVp -bmZhY2ggaW5ha3RpdikNCiAgICAgICAgICAgICAgICBmb3IgKCRwaSA9IDA7ICRwaSAtbHQgJEFs -bGVQbGFudW5nLkNvdW50OyAkcGkrKykgew0KICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAk -UGxhbnVuZ1VzZWQuQ29udGFpbnNLZXkoJHBpKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAg -JGlzdEFrdGl2ID0gLW5vdCAkQWxsZVBsYW51bmdbJHBpXS5QU09iamVjdC5Qcm9wZXJ0aWVzWydh -a3RpdiddIC1vciAkQWxsZVBsYW51bmdbJHBpXS5ha3RpdiAtZXEgJHRydWUNCiAgICAgICAgICAg -ICAgICAgICAgICAgIGlmICgkaXN0QWt0aXYpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg -ICBbdm9pZF0kRW50ZmVybnQuQWRkKEB7IHBsYW51bmcgPSAoR2V0LVBlcnNvbktvbXBha3QgJEFs -bGVQbGFudW5nWyRwaV0pIH0pDQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAg -ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICBTZW5kLUpz -b24gJFJlcyBAew0KICAgICAgICAgICAgICAgICAgICBqYWhyID0gaWYgKCRQYXJhbS5QU09iamVj -dC5Qcm9wZXJ0aWVzWydqYWhyJ10pIHsgJFBhcmFtLmphaHIgfSBlbHNlIHsgJG51bGwgfQ0KICAg -ICAgICAgICAgICAgICAgICBwZXJzb25lbiA9IEB7DQogICAgICAgICAgICAgICAgICAgICAgICBt -YXRjaCA9IEAoJE1hdGNoKQ0KICAgICAgICAgICAgICAgICAgICAgICAgbmV1ID0gQCgkTmV1KQ0K -ICAgICAgICAgICAgICAgICAgICAgICAgZW50ZmVybnQgPSBAKCRFbnRmZXJudCkNCiAgICAgICAg -ICAgICAgICAgICAgICAgIHVuc2ljaGVyID0gQCgkVW5zaWNoZXIpDQogICAgICAgICAgICAgICAg -ICAgIH0NCiAgICAgICAgICAgICAgICAgICAgYW56YWhsID0gQHsNCiAgICAgICAgICAgICAgICAg -ICAgICAgIHBlcnNvbmVuRXhjZWwgPSAkUGVyc29uZW5FeGNlbC5Db3VudA0KICAgICAgICAgICAg -ICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIERlYnVnLUxvZyAn -QVBJJyAiUE9TVCAvYXBpL2ltcG9ydC9leGNlbC92b3JzY2hhdSAtPiAkKCRQZXJzb25lbkV4Y2Vs -LkNvdW50KSBQZXJzb25lbiwgbWF0Y2g9JCgkTWF0Y2guQ291bnQpIG5ldT0kKCROZXUuQ291bnQp -IGVudGZlcm50PSQoJEVudGZlcm50LkNvdW50KSB1bnNpY2hlcj0kKCRVbnNpY2hlci5Db3VudCki -DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAg -IyA9PT09PT09PT09PT09PT09PT09PT0gRkxEOiBFWENFTC1JTVBPUlQgKFVlYmVybmFobWUpID09 -PT09PT09PT09PT09PT09PT09PQ0KICAgICAgICAgICAgIyBTcGllZ2VsIHp1IHNlcnZlci5weSBQ -T1NUIC9hcGkvaW1wb3J0L2V4Y2VsL3VlYmVybmVobWVuLg0KICAgICAgICAgICAgIyBCb2R5IGVu -dGhhZWx0IGdlcGFyc3RlIEV4Y2VsLURhdGVuICsgVXNlci1Ba3Rpb25lbiBhdXMgZGVtIFdpemFy -ZC4NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEgJy9hcGkvaW1wb3J0L2V4Y2VsL3VlYmVybmVo -bWVuJyAtYW5kICRNZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAgICAgICAgIGlmICgtbm90 -IChUZXN0LUlzdFN1cGVyVXNlcikpIHsgU2VuZC1FcnJvciAkUmVzICdOdXIgU3VwZXJVc2VyIGR1 -ZXJmZW4gaW1wb3J0aWVyZW4nIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRCb2R5 -ID0gUmVhZC1Cb2R5ICRSZXENCiAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVxICRCb2R5KSB7 -IFNlbmQtRXJyb3IgJFJlcyAnQW5mcmFnZSB6dSBncm9zcycgNDEzOyBjb250aW51ZSB9DQogICAg -ICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgJFBhcmFtID0gJEJvZHkgfCBD -b252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAgICAgICAgICAg -ICAgICAgIFNlbmQtRXJyb3IgJFJlcyAnVW5ndWVsdGlnZXMgSlNPTicgNDAwOyBjb250aW51ZQ0K -ICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICRQYXJzZWQgPSAkUGFyYW0ucGFy -c2VkRGF0ZW4NCiAgICAgICAgICAgICAgICAkQWt0aW9uZW4gPSBAKCRQYXJhbS5wZXJzb25lbkFr -dGlvbmVuKQ0KICAgICAgICAgICAgICAgICRPcHRzID0gJFBhcmFtLnVlYmVybmVobWVuDQogICAg -ICAgICAgICAgICAgJE9wdFNjaGljaHRlbiA9IGlmICgkT3B0cy5QU09iamVjdC5Qcm9wZXJ0aWVz -WydzY2hpY2h0ZW4nXSkgeyBbYm9vbF0kT3B0cy5zY2hpY2h0ZW4gfSBlbHNlIHsgJHRydWUgfQ0K -ICAgICAgICAgICAgICAgICRPcHRLb21tZW50YXJlID0gaWYgKCRPcHRzLlBTT2JqZWN0LlByb3Bl -cnRpZXNbJ2tvbW1lbnRhcmUnXSkgeyBbYm9vbF0kT3B0cy5rb21tZW50YXJlIH0gZWxzZSB7ICR0 -cnVlIH0NCiAgICAgICAgICAgICAgICAkT3B0U29uZGVydGVybWluZSA9IGlmICgkT3B0cy5QU09i -amVjdC5Qcm9wZXJ0aWVzWydzb25kZXJ0ZXJtaW5lJ10pIHsgW2Jvb2xdJE9wdHMuc29uZGVydGVy -bWluZSB9IGVsc2UgeyAkdHJ1ZSB9DQogICAgICAgICAgICAgICAgJE9wdFRhZ2VzZGF0ZW4gPSBp -ZiAoJE9wdHMuUFNPYmplY3QuUHJvcGVydGllc1sndGFnZXNkYXRlbiddKSB7IFtib29sXSRPcHRz -LnRhZ2VzZGF0ZW4gfSBlbHNlIHsgJHRydWUgfQ0KICAgICAgICAgICAgICAgICRPcHRSZWloZW5m -b2xnZSA9IGlmICgkT3B0cy5QU09iamVjdC5Qcm9wZXJ0aWVzWydyZWloZW5mb2xnZSddKSB7IFti -b29sXSRPcHRzLnJlaWhlbmZvbGdlIH0gZWxzZSB7ICR0cnVlIH0NCg0KICAgICAgICAgICAgICAg -ICRFeGNlbFBlcnNvbmVuID0gaWYgKCRQYXJzZWQuUFNPYmplY3QuUHJvcGVydGllc1sncGVyc29u -ZW4nXSkgeyBAKCRQYXJzZWQucGVyc29uZW4pIH0gZWxzZSB7IEAoKSB9DQogICAgICAgICAgICAg -ICAgJEV4Y2VsRWludHJhZWdlID0gaWYgKCRQYXJzZWQuUFNPYmplY3QuUHJvcGVydGllc1snZWlu -dHJhZWdlJ10pIHsgJFBhcnNlZC5laW50cmFlZ2UgfSBlbHNlIHsgJG51bGwgfQ0KICAgICAgICAg -ICAgICAgICRFeGNlbFBmbGljaHQgPSBpZiAoJFBhcnNlZC5QU09iamVjdC5Qcm9wZXJ0aWVzWydw -ZmxpY2h0J10pIHsgJFBhcnNlZC5wZmxpY2h0IH0gZWxzZSB7ICRudWxsIH0NCiAgICAgICAgICAg -ICAgICAkRXhjZWxLb21tZW50YXJlID0gaWYgKCRQYXJzZWQuUFNPYmplY3QuUHJvcGVydGllc1sn -a29tbWVudGFyZSddKSB7ICRQYXJzZWQua29tbWVudGFyZSB9IGVsc2UgeyAkbnVsbCB9DQogICAg -ICAgICAgICAgICAgJEV4Y2VsVGVybWluZSA9IGlmICgkUGFyc2VkLlBTT2JqZWN0LlByb3BlcnRp -ZXNbJ3Rlcm1pbmUnXSkgeyAkUGFyc2VkLnRlcm1pbmUgfSBlbHNlIHsgJG51bGwgfQ0KICAgICAg -ICAgICAgICAgICRFeGNlbFRhZ2VzZGF0ZW4gPSBpZiAoJFBhcnNlZC5QU09iamVjdC5Qcm9wZXJ0 -aWVzWyd0YWdlc2RhdGVuJ10pIHsgJFBhcnNlZC50YWdlc2RhdGVuIH0gZWxzZSB7ICRudWxsIH0N -Cg0KICAgICAgICAgICAgICAgICMgRXhjZWwtUm93IC0+IEV4Y2VsLVBlcnNvbiBIYXNobWFwDQog -ICAgICAgICAgICAgICAgJEV4Y2VsQnlSb3cgPSBAe30NCiAgICAgICAgICAgICAgICBmb3JlYWNo -ICgkcCBpbiAkRXhjZWxQZXJzb25lbikgew0KICAgICAgICAgICAgICAgICAgICBpZiAoJHAuUFNP -YmplY3QuUHJvcGVydGllc1snZXhjZWxSb3cnXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAg -JEV4Y2VsQnlSb3dbW2ludF0kcC5leGNlbFJvd10gPSAkcA0KICAgICAgICAgICAgICAgICAgICB9 -DQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgJEpldHp0ID0gR2V0LURhdGUg -LUZvcm1hdCAneXl5eS1NTS1kZCBISDptbTpzcycNCiAgICAgICAgICAgICAgICAkVHMgPSBHZXQt -RGF0ZSAtRm9ybWF0ICd5eXl5TU1kZF9ISG1tc3MnDQogICAgICAgICAgICAgICAgJEJhY2t1cE5h -bWUgPSAicGxhbnVuZ19iYWNrdXBfdm9yX2V4Y2VsX2ltcG9ydF8kVHMuanNvbiINCg0KICAgICAg -ICAgICAgICAgICRMb2NrUmVzdWx0ID0gJG51bGwNCiAgICAgICAgICAgICAgICB0cnkgew0KICAg -ICAgICAgICAgICAgICAgICAkTG9ja1Jlc3VsdCA9IEludm9rZS1XaXRoRmlsZUxvY2sgJ3BsYW51 -bmcuanNvbicgew0KICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51bmcgPSBSZWFkLUpzb25G -aWxlICdwbGFudW5nLmpzb24nDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLWVx -ICRQbGFudW5nKSB7IHJldHVybiBAeyB0eXAgPSAnZXJyb3InOyBjb2RlID0gNDA0OyBtc2cgPSAn -cGxhbnVuZy5qc29uIG5pY2h0IGdlZnVuZGVuJyB9IH0NCiAgICAgICAgICAgICAgICAgICAgICAg -ICMgQmFja3VwIHVudGVyIGRlbSBMb2NrDQogICAgICAgICAgICAgICAgICAgICAgICAkUGxhbnVu -Z1BhdGggPSBKb2luLVBhdGggJERhdGFEaXIgJ3BsYW51bmcuanNvbicNCiAgICAgICAgICAgICAg -ICAgICAgICAgIENvcHktSXRlbSAtUGF0aCAkUGxhbnVuZ1BhdGggLURlc3RpbmF0aW9uIChKb2lu -LVBhdGggJERhdGFEaXIgJEJhY2t1cE5hbWUpIC1Gb3JjZQ0KICAgICAgICAgICAgICAgICAgICAg -ICAgSW52b2tlLUJhY2t1cFJvdGF0aW9uICdwbGFudW5nX2JhY2t1cF8qLmpzb24nIDIwDQoNCiAg -ICAgICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRQbGFudW5nLlBTT2JqZWN0LlByb3BlcnRp -ZXNbJ3BlcnNvbmVuJ10pIHsgJFBsYW51bmcgfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQ -cm9wZXJ0eSAtTmFtZSAncGVyc29uZW4nIC1WYWx1ZSBAKCkgfQ0KICAgICAgICAgICAgICAgICAg -ICAgICAgaWYgKC1ub3QgJFBsYW51bmcuUFNPYmplY3QuUHJvcGVydGllc1snZWludHJhZWdlJ10p -IHsgJFBsYW51bmcgfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAtTmFtZSAn -ZWludHJhZWdlJyAtVmFsdWUgKE5ldy1PYmplY3QgUFNPYmplY3QpIH0NCiAgICAgICAgICAgICAg -ICAgICAgICAgIGlmICgtbm90ICRQbGFudW5nLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3BmbGljaHQn -XSkgeyAkUGxhbnVuZyB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1l -ICdwZmxpY2h0JyAtVmFsdWUgKE5ldy1PYmplY3QgUFNPYmplY3QpIH0NCiAgICAgICAgICAgICAg -ICAgICAgICAgIGlmICgtbm90ICRQbGFudW5nLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2tvbW1lbnRh -cmUnXSkgeyAkUGxhbnVuZyB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1O -YW1lICdrb21tZW50YXJlJyAtVmFsdWUgKE5ldy1PYmplY3QgUFNPYmplY3QpIH0NCg0KICAgICAg -ICAgICAgICAgICAgICAgICAgIyBQZXJzb25lbi1MaXN0ZSBtdXRpZXJlbg0KICAgICAgICAgICAg -ICAgICAgICAgICAgJFBlcnNvbmVuTGlzdGUgPSBOZXctT2JqZWN0IFN5c3RlbS5Db2xsZWN0aW9u -cy5BcnJheUxpc3QNCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwIGluIEAoJFBs -YW51bmcucGVyc29uZW4pKSB7IFt2b2lkXSRQZXJzb25lbkxpc3RlLkFkZCgkcCkgfQ0KICAgICAg -ICAgICAgICAgICAgICAgICAgJE5leHRJZCA9IDENCiAgICAgICAgICAgICAgICAgICAgICAgIGZv -cmVhY2ggKCRwIGluICRQZXJzb25lbkxpc3RlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgaWYgKCRwLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2lkJ10pIHsNCiAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgJGkgPSBbaW50XSRwLmlkDQogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgIGlmICgkaSAtZ2UgJE5leHRJZCkgeyAkTmV4dElkID0gJGkgKyAxIH0NCiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAg -ICAgICAgICAgICAgICAgICAgICRFeGNlbFJvd1RvUGlkID0gQHt9DQogICAgICAgICAgICAgICAg -ICAgICAgICAkTlBlcnNvbmVuTmV1ID0gMDsgJE5QZXJzb25lbkRlYWt0ID0gMDsgJE5QZXJzb25l -bkFrdHVhbGlzaWVydCA9IDANCiAgICAgICAgICAgICAgICAgICAgICAgICMgcGxhbnVuZy1QZXJz -b25lbi1Mb29rdXAgbmFjaCBpZCAoZnVlciBtYXRjaC1VcGRhdGVzKQ0KICAgICAgICAgICAgICAg -ICAgICAgICAgJFBsYW51bmdCeUlkID0gQHt9DQogICAgICAgICAgICAgICAgICAgICAgICBmb3Jl -YWNoICgkcCBpbiAkUGVyc29uZW5MaXN0ZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAg -IGlmICgkcC5QU09iamVjdC5Qcm9wZXJ0aWVzWydpZCddKSB7ICRQbGFudW5nQnlJZFtbaW50XSRw -LmlkXSA9ICRwIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAg -ICAgICAgIGZvcmVhY2ggKCRhIGluICRBa3Rpb25lbikgew0KICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICRha3QgPSBbc3RyaW5nXSRhLmFrdGlvbg0KICAgICAgICAgICAgICAgICAgICAgICAg -ICAgIGlmICgkYWt0IC1lcSAnbWF0Y2gnKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICRlciA9IFtpbnRdJGEuZXhjZWxSb3cNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgJG1hdGNoUGlkID0gW2ludF0kYS5wbGFudW5nc0lkDQogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICMgU2NoaWNodGVuICsgS29tbWVudGFyZSB3ZXJkZW4gSU1NRVIgaW1wb3J0aWVy -dA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIChhdWNoIGZ1ZXIgaW5ha3RpdmUg -UGVyc29uZW4gLSBEYXRlbiB2ZXJmdWVnYmFyDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICMgZmFsbHMgZGllIFBlcnNvbiBzcGFldGVyIHJlYWt0aXZpZXJ0IHdpcmQpLg0KICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAkcmVha3QgPSAkZmFsc2UNCiAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgaWYgKCRhLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3JlYWt0aXZpZXJl -biddKSB7ICRyZWFrdCA9IFtib29sXSRhLnJlYWt0aXZpZXJlbiB9DQogICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICRFeGNlbFJvd1RvUGlkWyRlcl0gPSAkbWF0Y2hQaWQNCiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgIyBFeGNlbC1GZWxkZXIgc3BpZWdlbG4sIGFiZXIgTlVS -IGxlZXJlIEZlbGRlciB1ZWJlcnNjaHJlaWJlbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICBpZiAoJEV4Y2VsQnlSb3cuQ29udGFpbnNLZXkoJGVyKSAtYW5kICRQbGFudW5nQnlJZC5D -b250YWluc0tleSgkbWF0Y2hQaWQpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAkZXAgPSAkRXhjZWxCeVJvd1skZXJdDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAkdGFyZ2V0ID0gJFBsYW51bmdCeUlkWyRtYXRjaFBpZF0NCiAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICRnZWFlbmRlcnQgPSAkZmFsc2UNCiAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICMgUmVha3RpdmllcmVuIE5VUiB3ZW5uIFVzZXIgZXhwbGl6 -aXQgYW5nZWZvcmRlcnQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpc3RB -a3RpdiA9IC1ub3QgJHRhcmdldC5QU09iamVjdC5Qcm9wZXJ0aWVzWydha3RpdiddIC1vciAkdGFy -Z2V0LmFrdGl2IC1lcSAkdHJ1ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -aWYgKC1ub3QgJGlzdEFrdGl2IC1hbmQgJHJlYWt0KSB7DQogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgaWYgKCR0YXJnZXQuUFNPYmplY3QuUHJvcGVydGllc1snYWt0aXYn -XSkgeyAkdGFyZ2V0LmFrdGl2ID0gJHRydWUgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgIGVsc2UgeyAkdGFyZ2V0IHwgQWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3Rl -UHJvcGVydHkgLU5hbWUgJ2FrdGl2JyAtVmFsdWUgJHRydWUgfQ0KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICRnZWFlbmRlcnQgPSAkdHJ1ZQ0KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgZm9yZWFjaCAoJGZlbGQgaW4gQCgnbmFjaG5hbWUnLCAnZGllbnN0Z3JhZCcsICdmdW5rdGlv -bicpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG5ldSA9IGlm -ICgkZXAuUFNPYmplY3QuUHJvcGVydGllc1skZmVsZF0pIHsgKFtzdHJpbmddJGVwLiRmZWxkKS5U -cmltKCkgfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICRhbHQgPSBpZiAoJHRhcmdldC5QU09iamVjdC5Qcm9wZXJ0aWVzWyRmZWxkXSkgeyAoW3N0 -cmluZ10kdGFyZ2V0LiRmZWxkKS5UcmltKCkgfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbmV1IC1hbmQgLW5vdCAkYWx0KSB7DQogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdGFyZ2V0LlBTT2Jq -ZWN0LlByb3BlcnRpZXNbJGZlbGRdKSB7ICR0YXJnZXQuJGZlbGQgPSAkbmV1IH0NCiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7ICR0YXJnZXQgfCBBZGQt -TWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAtTmFtZSAkZmVsZCAtVmFsdWUgJG5ldSB9 -DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRnZWFlbmRlcnQg -PSAkdHJ1ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICMgTGVnYWN5LUZlbGQgJ25hbWUnIGF1cyBhbHRlbiBEYXRlbnN0YWVuZGVu -IGVudGZlcm5lbiAoQXVkaXQtSXRlci1CKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgaWYgKCR0YXJnZXQuUFNPYmplY3QuUHJvcGVydGllc1snbmFtZSddKSB7DQogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRhcmdldC5QU09iamVjdC5Qcm9wZXJ0 -aWVzLlJlbW92ZSgnbmFtZScpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgJGdlYWVuZGVydCA9ICR0cnVlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGdlYWVuZGVydCkg -eyAkTlBlcnNvbmVuQWt0dWFsaXNpZXJ0KysgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKCRha3QgLWVxICdu -ZXUnKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRlciA9IFtpbnRdJGEuZXhj -ZWxSb3cNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJEV4Y2VsQnlS -b3cuQ29udGFpbnNLZXkoJGVyKSkgeyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICRlcCA9ICRFeGNlbEJ5Um93WyRlcl0NCiAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgJGV4TmFjaCA9IGlmICgkZXAuUFNPYmplY3QuUHJvcGVydGllc1snbmFjaG5hbWUn -XSkgeyAkZXAubmFjaG5hbWUgfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAjIFdpemFyZC1SYWRpbyAiaW5ha3RpdiBpbXBvcnRpZXJlbiIgcmVzcGVrdGllcmVu -IChBdWRpdC1JdGVyLUIpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRBa3RpdkZs -YWcgPSAkdHJ1ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGEuUFNPYmpl -Y3QuUHJvcGVydGllc1snYWt0aXYnXSAtYW5kICRudWxsIC1uZSAkYS5ha3Rpdikgew0KICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEFrdGl2RmxhZyA9IFtib29sXSRhLmFrdGl2 -DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgJE5ldVBlcnNvbiA9IFtQU0N1c3RvbU9iamVjdF1Aew0KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgaWQgPSAkTmV4dElkDQogICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICBha3RpdiA9ICRBa3RpdkZsYWcNCiAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgIHZvcm5hbWUgPSBpZiAoJGVwLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3Zv -cm5hbWUnXSkgeyAkZXAudm9ybmFtZSB9IGVsc2UgeyAnJyB9DQogICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICBuYWNobmFtZSA9ICRleE5hY2gNCiAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgIGRpZW5zdGdyYWQgPSBpZiAoJGVwLlBTT2JqZWN0LlByb3BlcnRpZXNb -J2RpZW5zdGdyYWQnXSkgeyAkZXAuZGllbnN0Z3JhZCB9IGVsc2UgeyAnJyB9DQogICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5rdGlvbiA9IGlmICgkZXAuUFNPYmplY3QuUHJv -cGVydGllc1snZnVua3Rpb24nXSkgeyAkZXAuZnVua3Rpb24gfSBlbHNlIHsgJycgfQ0KICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgIFt2b2lkXSRQZXJzb25lbkxpc3RlLkFkZCgkTmV1UGVyc29uKQ0KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAkUGxhbnVuZ0J5SWRbJE5leHRJZF0gPSAkTmV1UGVyc29uDQogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICRFeGNlbFJvd1RvUGlkWyRlcl0gPSAkTmV4dElk -DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICROZXh0SWQrKw0KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAkTlBlcnNvbmVuTmV1KysNCiAgICAgICAgICAgICAgICAgICAg -ICAgICAgICB9IGVsc2VpZiAoJGFrdCAtZXEgJ2RlYWt0aXZpZXJlbicpIHsNCiAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgJGRlYWt0SWQgPSBbaW50XSRhLnBsYW51bmdzSWQNCiAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHAgaW4gJFBlcnNvbmVuTGlzdGUp -IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkcC5QU09iamVjdC5Q -cm9wZXJ0aWVzWydpZCddIC1hbmQgW2ludF0kcC5pZCAtZXEgJGRlYWt0SWQpIHsNCiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHAuUFNPYmplY3QuUHJvcGVydGll -c1snYWt0aXYnXSkgeyAkcC5ha3RpdiA9ICRmYWxzZSB9DQogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgZWxzZSB7ICRwIHwgQWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3Rl -UHJvcGVydHkgLU5hbWUgJ2FrdGl2JyAtVmFsdWUgJGZhbHNlIH0NCiAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAkTlBlcnNvbmVuRGVha3QrKw0KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrDQogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAg -ICAgICAgICAgICAgICAgICAgICMgU2NoaWNodGVuICsgUGZsaWNodA0KICAgICAgICAgICAgICAg -ICAgICAgICAgJE5FaW50cmFlZ2UgPSAwOyAkTlBmbGljaHQgPSAwOyAkTk9ycGhhbiA9IDANCiAg -ICAgICAgICAgICAgICAgICAgICAgICMgQXVkaXQtSUktMSBGMTogU2NoaWNodGNvZGUtV2hpdGVs -aXN0IGF1Y2ggaW0gRXhjZWwtSW1wb3J0Lg0KICAgICAgICAgICAgICAgICAgICAgICAgIyBNaXJy -b3IgenUgc2VydmVyLnB5OjM3NjYtMzc3MC4NCiAgICAgICAgICAgICAgICAgICAgICAgICRFeGNl -bFZhbGlkQ29kZXMgPSBOZXctT2JqZWN0IFN5c3RlbS5Db2xsZWN0aW9ucy5HZW5lcmljLkhhc2hT -ZXRbc3RyaW5nXQ0KICAgICAgICAgICAgICAgICAgICAgICAgW3ZvaWRdJEV4Y2VsVmFsaWRDb2Rl -cy5BZGQoJycpDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLW5lICRBZG1pbiAt -YW5kICRBZG1pbi5QU09iamVjdC5Qcm9wZXJ0aWVzWydzY2hpY2h0Y29kZXMnXSkgew0KICAgICAg -ICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRTYyBpbiAkQWRtaW4uc2NoaWNodGNvZGVz -KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtbmUgJFNjIC1h -bmQgJFNjLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2NvZGUnXSkgew0KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgW3ZvaWRdJEV4Y2VsVmFsaWRDb2Rlcy5BZGQoW3N0cmluZ10kU2Mu -Y29kZSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg -ICAgICAgICAgIGlmICgkT3B0U2NoaWNodGVuIC1hbmQgJG51bGwgLW5lICRFeGNlbEVpbnRyYWVn -ZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCREYXR1bVByb3AgaW4g -JEV4Y2VsRWludHJhZWdlLlBTT2JqZWN0LlByb3BlcnRpZXMpIHsNCiAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgJERhdHVtID0gJERhdHVtUHJvcC5OYW1lDQogICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgIGlmICgtbm90ICRQbGFudW5nLmVpbnRyYWVnZS5QU09iamVjdC5Qcm9w -ZXJ0aWVzWyREYXR1bV0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQ -bGFudW5nLmVpbnRyYWVnZSB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1O -YW1lICREYXR1bSAtVmFsdWUgKE5ldy1PYmplY3QgUFNPYmplY3QpDQogICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFj -aCAoJFBpZFByb3AgaW4gJERhdHVtUHJvcC5WYWx1ZS5QU09iamVjdC5Qcm9wZXJ0aWVzKSB7DQog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXIgPSBbaW50XSRQaWRQcm9wLk5h -bWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRFeGNlbFJv -d1RvUGlkLkNvbnRhaW5zS2V5KCRlcikpIHsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgJHBpZFN0ciA9IFtzdHJpbmddJEV4Y2VsUm93VG9QaWRbJGVyXQ0K -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHdlcnQgPSBbc3RyaW5nXSRQaWRQ -cm9wLlZhbHVlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAk -RXhjZWxWYWxpZENvZGVzLkNvbnRhaW5zKCR3ZXJ0KSkgew0KICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICROT3JwaGFuKysNCiAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRQbGFudW5nLmVp -bnRyYWVnZS4kRGF0dW0uUFNPYmplY3QuUHJvcGVydGllc1skcGlkU3RyXSkgew0KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5nLmVpbnRyYWVnZS4kRGF0dW0u -JHBpZFN0ciA9ICR3ZXJ0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVs -c2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5nLmVp -bnRyYWVnZS4kRGF0dW0gfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAtTmFt -ZSAkcGlkU3RyIC1WYWx1ZSAkd2VydA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJE5FaW50cmFlZ2UrKw0K -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtbmUgJEV4Y2Vs -UGZsaWNodCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkRGF0 -dW1Qcm9wIGluICRFeGNlbFBmbGljaHQuUFNPYmplY3QuUHJvcGVydGllcykgew0KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgJERhdHVtID0gJERhdHVtUHJvcC5OYW1lDQogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkUGxhbnVuZy5wZmxpY2h0 -LlBTT2JqZWN0LlByb3BlcnRpZXNbJERhdHVtXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICRQbGFudW5nLnBmbGljaHQgfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBl -IE5vdGVQcm9wZXJ0eSAtTmFtZSAkRGF0dW0gLVZhbHVlIChOZXctT2JqZWN0IFBTT2JqZWN0KQ0K -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJFBpZFByb3AgaW4gJERhdHVtUHJvcC5WYWx1ZS5Q -U09iamVjdC5Qcm9wZXJ0aWVzKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgJGVyID0gW2ludF0kUGlkUHJvcC5OYW1lDQogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgaWYgKC1ub3QgJEV4Y2VsUm93VG9QaWQuQ29udGFpbnNLZXkoJGVyKSkg -eyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBp -ZFN0ciA9IFtzdHJpbmddJEV4Y2VsUm93VG9QaWRbJGVyXQ0KICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgIGlmICgkUGlkUHJvcC5WYWx1ZSkgew0KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJFBsYW51bmcucGZsaWNodC4kRGF0dW0u -UFNPYmplY3QuUHJvcGVydGllc1skcGlkU3RyXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51bmcucGZsaWNodC4kRGF0dW0uJHBpZFN0ciA9 -ICR0cnVlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxz -ZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUGxh -bnVuZy5wZmxpY2h0LiREYXR1bSB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5 -IC1OYW1lICRwaWRTdHIgLVZhbHVlICR0cnVlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgJE5QZmxpY2h0KysNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAg -ICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICMgS29tbWVu -dGFyZQ0KICAgICAgICAgICAgICAgICAgICAgICAgJE5Lb21tZW50YXJlID0gMA0KICAgICAgICAg -ICAgICAgICAgICAgICAgaWYgKCRPcHRLb21tZW50YXJlIC1hbmQgJG51bGwgLW5lICRFeGNlbEtv -bW1lbnRhcmUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkRGF0dW1Q -cm9wIGluICRFeGNlbEtvbW1lbnRhcmUuUFNPYmplY3QuUHJvcGVydGllcykgew0KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAkRGF0dW0gPSAkRGF0dW1Qcm9wLk5hbWUNCiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJFBsYW51bmcua29tbWVudGFyZS5QU09i -amVjdC5Qcm9wZXJ0aWVzWyREYXR1bV0pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICRQbGFudW5nLmtvbW1lbnRhcmUgfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQ -cm9wZXJ0eSAtTmFtZSAkRGF0dW0gLVZhbHVlIChOZXctT2JqZWN0IFBTT2JqZWN0KQ0KICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgIGZvcmVhY2ggKCRQaWRQcm9wIGluICREYXR1bVByb3AuVmFsdWUuUFNPYmplY3QuUHJvcGVy -dGllcykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGVyID0gW2ludF0k -UGlkUHJvcC5OYW1lDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5v -dCAkRXhjZWxSb3dUb1BpZC5Db250YWluc0tleSgkZXIpKSB7IGNvbnRpbnVlIH0NCiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwaWRTdHIgPSBbc3RyaW5nXSRFeGNlbFJvd1Rv -UGlkWyRlcl0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRLb21PYmogPSBb -UFNDdXN0b21PYmplY3RdQHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICB0ZXh0ID0gW3N0cmluZ10kUGlkUHJvcC5WYWx1ZQ0KICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgIGdlYWVuZGVydEFtID0gJEpldHp0DQogICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgZ2VhZW5kZXJ0Vm9uID0gKEdldC1Ba3R1ZWxsZXJCZW51dHpl -cikNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgIGlmICgkUGxhbnVuZy5rb21tZW50YXJlLiREYXR1bS5QU09i -amVjdC5Qcm9wZXJ0aWVzWyRwaWRTdHJdKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgJFBsYW51bmcua29tbWVudGFyZS4kRGF0dW0uJHBpZFN0ciA9ICRLb21PYmoN -CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51bmcua29tbWVudGFyZS4kRGF0dW0g -fCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAtTmFtZSAkcGlkU3RyIC1WYWx1 -ZSAkS29tT2JqDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTktvbW1lbnRhcmUrKw0KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAg -ICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICAjIFJlaWhl -bmZvbGdlDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJE9wdFJlaWhlbmZvbGdlKSB7DQog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgJEV4Y2VsT3JkZXJSb3dzID0gQCgkQWt0aW9uZW4g -fCBXaGVyZS1PYmplY3QgeyBAKCdtYXRjaCcsJ25ldScpIC1jb250YWlucyAkXy5ha3Rpb24gLWFu -ZCAkXy5QU09iamVjdC5Qcm9wZXJ0aWVzWydleGNlbFJvdyddIH0gfCBTb3J0LU9iamVjdCB7IFtp -bnRdJF8uZXhjZWxSb3cgfSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkU29ydFBpZHMg -PSBOZXctT2JqZWN0IFN5c3RlbS5Db2xsZWN0aW9ucy5BcnJheUxpc3QNCiAgICAgICAgICAgICAg -ICAgICAgICAgICAgICBmb3JlYWNoICgkYSBpbiAkRXhjZWxPcmRlclJvd3MpIHsNCiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgJGVyID0gW2ludF0kYS5leGNlbFJvdw0KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICBpZiAoJEV4Y2VsUm93VG9QaWQuQ29udGFpbnNLZXkoJGVy -KSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNvcnRJZCA9ICRFeGNl -bFJvd1RvUGlkWyRlcl0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgt -bm90ICRTb3J0UGlkcy5Db250YWlucygkc29ydElkKSkgeyBbdm9pZF0kU29ydFBpZHMuQWRkKCRz -b3J0SWQpIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQnlJZCA9IEB7 -fQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwIGluICRQZXJzb25lbkxp -c3RlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkcC5QU09iamVjdC5Q -cm9wZXJ0aWVzWydpZCddKSB7ICRCeUlkW1tpbnRdJHAuaWRdID0gJHAgfQ0KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTmV1ZUxpc3Rl -ID0gTmV3LU9iamVjdCBTeXN0ZW0uQ29sbGVjdGlvbnMuQXJyYXlMaXN0DQogICAgICAgICAgICAg -ICAgICAgICAgICAgICAgZm9yZWFjaCAoJHBlcnNJZCBpbiAkU29ydFBpZHMpIHsNCiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRCeUlkLkNvbnRhaW5zS2V5KCRwZXJzSWQpKSB7 -DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbdm9pZF0kTmV1ZUxpc3RlLkFk -ZCgkQnlJZFskcGVyc0lkXSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRC -eUlkLlJlbW92ZSgkcGVyc0lkKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICMgUmVzdGxpY2hlIFBlcnNvbmVuOiBha3RpdmUgenVlcnN0DQogICAgICAgICAgICAgICAgICAg -ICAgICAgICAgJFJlc3RBa3RpdmUgPSBAKCRCeUlkLlZhbHVlcyB8IFdoZXJlLU9iamVjdCB7IC1u -b3QgJF8uUFNPYmplY3QuUHJvcGVydGllc1snYWt0aXYnXSAtb3IgJF8uYWt0aXYgLWVxICR0cnVl -IH0pDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFJlc3RJbmFrdGl2ZSA9IEAoJEJ5SWQu -VmFsdWVzIHwgV2hlcmUtT2JqZWN0IHsgJF8uUFNPYmplY3QuUHJvcGVydGllc1snYWt0aXYnXSAt -YW5kICRfLmFrdGl2IC1lcSAkZmFsc2UgfSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBm -b3JlYWNoICgkcCBpbiAkUmVzdEFrdGl2ZSkgeyBbdm9pZF0kTmV1ZUxpc3RlLkFkZCgkcCkgfQ0K -ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwIGluICRSZXN0SW5ha3RpdmUp -IHsgW3ZvaWRdJE5ldWVMaXN0ZS5BZGQoJHApIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAjICdwb3NpdGlvbicgZm9ydGxhdWZlbmQgbmV1IHZlcmdlYmVuIChGcm9udGVuZCBzb3J0aWVy -dA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgbmFjaCBwLnBvc2l0aW9uLCBOSUNIVCBu -YWNoIEFycmF5LVJlaWhlbmZvbGdlKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwb3ND -b3VudGVyID0gMQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwIGluICRO -ZXVlTGlzdGUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRwLlBTT2Jq -ZWN0LlByb3BlcnRpZXNbJ3Bvc2l0aW9uJ10pIHsgJHAucG9zaXRpb24gPSAkcG9zQ291bnRlciB9 -DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgeyAkcCB8IEFkZC1NZW1iZXIg -LU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1lICdwb3NpdGlvbicgLVZhbHVlICRwb3NDb3Vu -dGVyIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBvc0NvdW50ZXIrKw0KICAg -ICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAk -UGxhbnVuZy5wZXJzb25lbiA9IEAoJE5ldWVMaXN0ZSkNCiAgICAgICAgICAgICAgICAgICAgICAg -IH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBdWNoIG9obmUgUmVpaGVu -Zm9sZ2UtVXBkYXRlOiBuZXVlIFBlcnNvbmVuIGJyYXVjaGVuICdwb3NpdGlvbicNCiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAkbWF4UG9zID0gMA0KICAgICAgICAgICAgICAgICAgICAgICAg -ICAgIGZvcmVhY2ggKCRwIGluICRQZXJzb25lbkxpc3RlKSB7DQogICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgIGlmICgkcC5QU09iamVjdC5Qcm9wZXJ0aWVzWydwb3NpdGlvbiddKSB7DQog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcHAgPSBbaW50XSgkcC5wb3NpdGlv -biB8IEZvckVhY2gtT2JqZWN0IHsgaWYgKCRfKSB7ICRfIH0gZWxzZSB7IDAgfSB9KQ0KICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRwcCAtZ3QgJG1heFBvcykgeyAkbWF4 -UG9zID0gJHBwIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNo -ICgkcCBpbiAkUGVyc29uZW5MaXN0ZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAkaGF0UG9zID0gJGZhbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgk -cC5QU09iamVjdC5Qcm9wZXJ0aWVzWydwb3NpdGlvbiddIC1hbmQgJHAucG9zaXRpb24pIHsgJGhh -dFBvcyA9ICR0cnVlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3Qg -JGhhdFBvcykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG1heFBvcysr -DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHAuUFNPYmplY3QuUHJv -cGVydGllc1sncG9zaXRpb24nXSkgeyAkcC5wb3NpdGlvbiA9ICRtYXhQb3MgfQ0KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7ICRwIHwgQWRkLU1lbWJlciAtTWVtYmVy -VHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgJ3Bvc2l0aW9uJyAtVmFsdWUgJG1heFBvcyB9DQogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAg -ICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51bmcucGVyc29uZW4gPSBAKCRQ -ZXJzb25lbkxpc3RlKQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAg -ICAgICAgICAgICAjIC0tLS0gVGFnZXNkYXRlbiAvIFNjaGljaHRyb3RhdGlvbiBhdXMgRXhjZWwt -UjQtUjkgLS0tLQ0KICAgICAgICAgICAgICAgICAgICAgICAgJE5Sb3RhdGlvblNsb3RzID0gMA0K -ICAgICAgICAgICAgICAgICAgICAgICAgJE5UYWdlc2RhdGVuT3ZlcnJpZGVzID0gMA0KICAgICAg -ICAgICAgICAgICAgICAgICAgJEFkbWluTXV0YXRlZCA9ICRudWxsDQogICAgICAgICAgICAgICAg -ICAgICAgICBpZiAoJE9wdFRhZ2VzZGF0ZW4gLWFuZCAkbnVsbCAtbmUgJEV4Y2VsVGFnZXNkYXRl -bikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0ZFByb3BzID0gQCgkRXhjZWxUYWdl -c2RhdGVuLlBTT2JqZWN0LlByb3BlcnRpZXMpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg -aWYgKCR0ZFByb3BzLkNvdW50IC1ndCAwKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICRzb3J0ZWREYXRlcyA9IEAoJHRkUHJvcHMgfCBGb3JFYWNoLU9iamVjdCB7ICRfLk5hbWUg -fSB8IFNvcnQtT2JqZWN0KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXJzdGVz -RCA9IFtkYXRldGltZV06OlBhcnNlRXhhY3QoJHNvcnRlZERhdGVzWzBdLCAneXl5eS1NTS1kZCcs -ICRudWxsKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZG93ID0gW2ludF0kZXJz -dGVzRC5EYXlPZldlZWsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRkb3cg -LWVxIDApIHsgJG9mZnNldE1vID0gMSB9IGVsc2UgeyAkb2Zmc2V0TW8gPSAoOCAtICRkb3cpICUg -NyB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtb0lkeCA9ICRvZmZzZXRNbw0K -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkd29jaGVuQW56YWhsID0gMw0KICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAkc2xvdENvdW50ID0gJHdvY2hlbkFuemFobCAqIDcN -CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRtb0lkeCArICRzbG90Q291bnQg -LWxlICRzb3J0ZWREYXRlcy5Db3VudCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgJHJvdGF0aW9uc1RhZ2UgPSBAKCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgIGZvciAoJGkgPSAwOyAkaSAtbHQgJHNsb3RDb3VudDsgJGkrKykgew0KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRyb3RhdGlvbnNUYWdlICs9ICRFeGNlbFRh -Z2VzZGF0ZW4uKCRzb3J0ZWREYXRlc1skbW9JZHggKyAkaV0pDQogICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAk -QWRtaW5NdXRhdGVkID0gUmVhZC1Kc29uRmlsZSAnYWRtaW4uanNvbicNCiAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtbmUgJEFkbWluTXV0YXRlZCkgew0KICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRBZG1pbk11dGF0 -ZWQuUFNPYmplY3QuUHJvcGVydGllc1sndGFnZXNkYXRlblJvdGF0aW9uJ10pIHsNCiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEFkbWluTXV0YXRlZCB8IEFkZC1N -ZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1lICd0YWdlc2RhdGVuUm90YXRpb24n -IC1WYWx1ZSAoTmV3LU9iamVjdCBQU09iamVjdCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -JHJvdCA9ICRBZG1pbk11dGF0ZWQudGFnZXNkYXRlblJvdGF0aW9uDQogICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgJHJvdFN0YXJ0SXNvID0gJHNvcnRlZERhdGVzWyRtb0lk -eF0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHJvdC5QU09i -amVjdC5Qcm9wZXJ0aWVzWyd3b2NoZW5BbnphaGwnXSkgeyAkcm90LndvY2hlbkFuemFobCA9ICR3 -b2NoZW5BbnphaGwgfSBlbHNlIHsgJHJvdCB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVBy -b3BlcnR5IC1OYW1lICd3b2NoZW5BbnphaGwnIC1WYWx1ZSAkd29jaGVuQW56YWhsIH0NCiAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHJvdC5QU09iamVjdC5Qcm9w -ZXJ0aWVzWydzdGFydERhdHVtJ10pIHsgJHJvdC5zdGFydERhdHVtID0gJHJvdFN0YXJ0SXNvIH0g -ZWxzZSB7ICRyb3QgfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAtTmFtZSAn -c3RhcnREYXR1bScgLVZhbHVlICRyb3RTdGFydElzbyB9DQogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgaWYgKCRyb3QuUFNPYmplY3QuUHJvcGVydGllc1sndGFnZSddKSB7 -ICRyb3QudGFnZSA9IEAoJHJvdGF0aW9uc1RhZ2UpIH0gZWxzZSB7ICRyb3QgfCBBZGQtTWVtYmVy -IC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAtTmFtZSAndGFnZScgLVZhbHVlIEAoJHJvdGF0aW9u -c1RhZ2UpIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTlJvdGF0 -aW9uU2xvdHMgPSAkc2xvdENvdW50DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAjIE92ZXJyaWRlLVBydWVmdW5nDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgaWYgKC1ub3QgJFBsYW51bmcuUFNPYmplY3QuUHJvcGVydGllc1sndGFnZXNk -YXRlbiddKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRQ -bGFudW5nIHwgQWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgJ3RhZ2Vz -ZGF0ZW4nIC1WYWx1ZSAoTmV3LU9iamVjdCBQU09iamVjdCkNCiAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgJGFsdGVQcm9wcyA9IEAoJFBsYW51bmcudGFnZXNkYXRlbi5QU09iamVjdC5Qcm9wZXJ0 -aWVzIHwgV2hlcmUtT2JqZWN0IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgJF8uVmFsdWUuUFNPYmplY3QuUHJvcGVydGllc1snX3NyYyddIC1hbmQgJF8uVmFs -dWUuX3NyYyAtZXEgJ2V4Y2VsJw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgIH0pDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAo -JHByIGluICRhbHRlUHJvcHMpIHsgJFBsYW51bmcudGFnZXNkYXRlbi5QU09iamVjdC5Qcm9wZXJ0 -aWVzLlJlbW92ZSgkcHIuTmFtZSkgfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgJHJvdFN0YXJ0RCA9IFtkYXRldGltZV06OlBhcnNlRXhhY3QoJHJvdFN0YXJ0SXNv -LCAneXl5eS1NTS1kZCcsICRudWxsKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgIGZvcmVhY2ggKCRwcm9wIGluICR0ZFByb3BzKSB7DQogICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICRkYXR1bUlzbyA9ICRwcm9wLk5hbWUNCiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRkID0gJHByb3AuVmFsdWUNCiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRhdHVtRCA9IFtkYXRl -dGltZV06OlBhcnNlRXhhY3QoJGRhdHVtSXNvLCAneXl5eS1NTS1kZCcsICRudWxsKQ0KICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGlmZkRheXMgPSAoJGRhdHVt -RCAtICRyb3RTdGFydEQpLkRheXMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgJGlzdE92ZXJyaWRlID0gJGZhbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgIGlmICgkZGlmZkRheXMgLWx0IDApIHsNCiAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpc3RPdmVycmlkZSA9ICR0cnVlDQog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2xvdElkeCA9ICRk -aWZmRGF5cyAlICRzbG90Q291bnQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICRzbG90VGQgPSAkcm90YXRpb25zVGFnZVskc2xvdElkeF0NCiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRqc29uVGQgPSAkdGQgfCBD -b252ZXJ0VG8tSnNvbiAtQ29tcHJlc3MgLURlcHRoIDYNCiAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICRqc29uU2xvdCA9ICRzbG90VGQgfCBDb252ZXJ0VG8t -SnNvbiAtQ29tcHJlc3MgLURlcHRoIDYNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgIGlmICgkanNvblRkIC1uZSAkanNvblNsb3QpIHsgJGlzdE92ZXJyaWRl -ID0gJHRydWUgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 -DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkaXN0T3Zl -cnJpZGUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICR0ZE1hcmtlZCA9ICR0ZCB8IENvbnZlcnRUby1Kc29uIC1EZXB0aCA2IHwgQ29udmVydEZyb20t -SnNvbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRk -TWFya2VkIHwgQWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgJ19zcmMn -IC1WYWx1ZSAnZXhjZWwnIC1Gb3JjZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgaWYgKCRQbGFudW5nLnRhZ2VzZGF0ZW4uUFNPYmplY3QuUHJvcGVydGll -c1skZGF0dW1Jc29dKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgJFBsYW51bmcudGFnZXNkYXRlbi4kZGF0dW1Jc28gPSAkdGRNYXJrZWQNCiAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51 -bmcudGFnZXNkYXRlbiB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1l -ICRkYXR1bUlzbyAtVmFsdWUgJHRkTWFya2VkDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAkTlRhZ2VzZGF0ZW5PdmVycmlkZXMrKw0KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAg +ICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkUGlkUHJvcCBpbiAkRGF0dW1Qcm9wLlZhbHVl +LlBTT2JqZWN0LlByb3BlcnRpZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICRlciA9IFtpbnRdJFBpZFByb3AuTmFtZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgaWYgKC1ub3QgJEV4Y2VsUm93VG9QaWQuQ29udGFpbnNLZXkoJGVyKSkgeyBjb250 +aW51ZSB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGlkU3RyID0gW3N0 +cmluZ10kRXhjZWxSb3dUb1BpZFskZXJdDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAkd2VydCA9IFtzdHJpbmddJFBpZFByb3AuVmFsdWUNCiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgIGlmICgtbm90ICRFeGNlbFZhbGlkQ29kZXMuQ29udGFpbnMoJHdlcnQp +KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJE5PcnBoYW4rKw0K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlDQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgICAg -ICBXcml0ZS1QbGFudW5nTWl0SW50ZWdyaXRhZXQgJFBsYW51bmcgICAjIEJ1bGstT3A6IGFsbGUg -SE1BQ3MgbmV1DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBAew0KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgIHR5cCA9ICdvaycNCiAgICAgICAgICAgICAgICAgICAgICAgICAg -ICBiYWNrdXAgPSAkQmFja3VwTmFtZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnNv -bmVuTmV1ID0gJE5QZXJzb25lbk5ldQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnNv -bmVuQWt0dWFsaXNpZXJ0ID0gJE5QZXJzb25lbkFrdHVhbGlzaWVydA0KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgIHBlcnNvbmVuRGVha3RpdmllcnQgPSAkTlBlcnNvbmVuRGVha3QNCiAgICAg -ICAgICAgICAgICAgICAgICAgICAgICBlaW50cmFlZ2UgPSAkTkVpbnRyYWVnZQ0KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgIHBmbGljaHQgPSAkTlBmbGljaHQNCiAgICAgICAgICAgICAgICAg -ICAgICAgICAgICBrb21tZW50YXJlID0gJE5Lb21tZW50YXJlDQogICAgICAgICAgICAgICAgICAg -ICAgICAgICAgdW5iZWthbm50ZUNvZGVzID0gJE5PcnBoYW4NCiAgICAgICAgICAgICAgICAgICAg -ICAgICAgICByb3RhdGlvblNsb3RzID0gJE5Sb3RhdGlvblNsb3RzDQogICAgICAgICAgICAgICAg -ICAgICAgICAgICAgdGFnZXNkYXRlbk92ZXJyaWRlcyA9ICROVGFnZXNkYXRlbk92ZXJyaWRlcw0K -ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkbWluTXV0YXRlZCA9ICRBZG1pbk11dGF0ZWQN -CiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAg -ICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXMg -IlVlYmVybmFobWUtRmVobGVyOiAkXyIgNTAwOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0N -Cg0KICAgICAgICAgICAgICAgIGlmICgkTG9ja1Jlc3VsdC50eXAgLWVxICdlcnJvcicpIHsgU2Vu -ZC1FcnJvciAkUmVzICRMb2NrUmVzdWx0Lm1zZyAkTG9ja1Jlc3VsdC5jb2RlOyBjb250aW51ZSB9 -DQoNCiAgICAgICAgICAgICAgICAjIFNvbmRlcnRlcm1pbmUgc2VwYXJhdCBpbiBhZG1pbi5qc29u -IHNjaHJlaWJlbiAoa2VpbiBITUFDKS4NCiAgICAgICAgICAgICAgICAjIEVyc3QgYWxsZSB2b3Jo -YW5kZW5lbiAnc3RfZXhjZWxfJy1FaW50cmFlZ2UgbG9lc2NoZW4sIGRhbm4gbmV1ZQ0KICAgICAg -ICAgICAgICAgICMgYW5sZWdlbiAtIHNvZGFzcyBSZS1JbXBvcnQgaWRlbXBvdGVudCBpc3QgdW5k -IG5pY2h0IGRvcHBlbHQuDQogICAgICAgICAgICAgICAgIyBVc2VyLVZvcmdhYmUgKEF1ZGl0LUl0 -ZXItRCwgc3luYyBtaXQgc2VydmVyLnB5OjM4MjcpOiBFeGNlbC1aZWlsZQ0KICAgICAgICAgICAg -ICAgICMgKDI1LTI5KSB3aXJkIE5JQ0hUIG1laHIgYWxzIEthdGVnb3JpZSBhdXNnZXdlcnRldCAt -IGFsbGUgVGVybWluZQ0KICAgICAgICAgICAgICAgICMgc2luZCAnaGlud2VpcycgbWl0IEljb24g -J2luZm8nLCBVc2VyIGtsYXNzaWZpemllcnQgc3BhZXRlciBtYW51ZWxsDQogICAgICAgICAgICAg -ICAgIyBpbSBUZXJtaW5lLVRhYi4gUmUtSW1wb3J0IGJsZWlidCBkYW1pdCBzdHJ1a3R1ci1zdGFi -aWwuDQogICAgICAgICAgICAgICAgJE5UZXJtaW5lID0gMA0KICAgICAgICAgICAgICAgIGlmICgk -T3B0U29uZGVydGVybWluZSkgew0KICAgICAgICAgICAgICAgICAgICAkQWRtaW4gPSBpZiAoJG51 -bGwgLW5lICRMb2NrUmVzdWx0LmFkbWluTXV0YXRlZCkgeyAkTG9ja1Jlc3VsdC5hZG1pbk11dGF0 -ZWQgfSBlbHNlIHsgUmVhZC1Kc29uRmlsZSAnYWRtaW4uanNvbicgfQ0KICAgICAgICAgICAgICAg -ICAgICBpZiAoJG51bGwgLW5lICRBZG1pbikgew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYg -KC1ub3QgJEFkbWluLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3NvbmRlcnRlcm1pbmUnXSkgew0KICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICRBZG1pbiB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUg -Tm90ZVByb3BlcnR5IC1OYW1lICdzb25kZXJ0ZXJtaW5lJyAtVmFsdWUgQCgpDQogICAgICAgICAg -ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAjIEFsdGUgRXhjZWwtSW1w -b3J0ZSBmaWx0ZXJuDQogICAgICAgICAgICAgICAgICAgICAgICAkU3RMaXN0ZSA9IE5ldy1PYmpl -Y3QgU3lzdGVtLkNvbGxlY3Rpb25zLkFycmF5TGlzdA0KICAgICAgICAgICAgICAgICAgICAgICAg -Zm9yZWFjaCAoJHMgaW4gQCgkQWRtaW4uc29uZGVydGVybWluZSkpIHsNCiAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAkc2lkID0gaWYgKCRzLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2lkJ10pIHsg -W3N0cmluZ10kcy5pZCB9IGVsc2UgeyAnJyB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg -aWYgKC1ub3QgJHNpZC5TdGFydHNXaXRoKCdzdF9leGNlbF8nKSkgeyBbdm9pZF0kU3RMaXN0ZS5B -ZGQoJHMpIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAg -ICAgIGlmICgkbnVsbCAtbmUgJEV4Y2VsVGVybWluZSkgew0KICAgICAgICAgICAgICAgICAgICAg -ICAgICAgIGZvcmVhY2ggKCREYXR1bVByb3AgaW4gJEV4Y2VsVGVybWluZS5QU09iamVjdC5Qcm9w -ZXJ0aWVzKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICREYXR1bSA9ICREYXR1 -bVByb3AuTmFtZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkdCBp -biBAKCREYXR1bVByb3AuVmFsdWUpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAkaXN0U2tpcCA9ICRmYWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgaWYgKCR0LlBTT2JqZWN0LlByb3BlcnRpZXNbJ3NraXAnXSkgeyAkaXN0U2tpcCA9IFtib29s -XSR0LnNraXAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRpc3RT -a2lwKSB7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0 -aXRlbCA9IGlmICgkdC5QU09iamVjdC5Qcm9wZXJ0aWVzWyd0aXRlbCddKSB7IChbc3RyaW5nXSR0 -LnRpdGVsKS5UcmltKCkgfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgJHRleHQgPSBpZiAoJHQuUFNPYmplY3QuUHJvcGVydGllc1sndGV4dCddKSB7IChb -c3RyaW5nXSR0LnRleHQpLlRyaW0oKSB9IGVsc2UgeyAnJyB9DQogICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkdGl0ZWwgLWFuZCAtbm90ICR0ZXh0KSB7IGNvbnRp -bnVlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICR0aXRl -bCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRlcnN0ZSA9ICgk -dGV4dCAtc3BsaXQgImBuIiwgMilbMF0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAkdGl0ZWwgPSBpZiAoJGVyc3RlLkxlbmd0aCAtZ3QgNjApIHsgJGVyc3RlLlN1YnN0 -cmluZygwLCA2MCkgfSBlbHNlIHsgJGVyc3RlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgUmFuZG9t -LUhleC1JRCBhbmFsb2cgenUgUHl0aG9uIHNlY3JldHMudG9rZW5faGV4KDYpIC0gMTIgSGV4LVpl -aWNoZW4uDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUmFuZEhleCA9IFtn -dWlkXTo6TmV3R3VpZCgpLlRvU3RyaW5nKCdOJykuU3Vic3RyaW5nKDAsIDEyKQ0KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgJE5ldSA9IFtQU0N1c3RvbU9iamVjdF1Aew0KICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gJ3N0X2V4Y2VsXycgKyAk -UmFuZEhleA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdHVtID0g -JERhdHVtDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0ZWwgPSAk -dGl0ZWwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gJHRl -eHQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uID0gJ2luZm8n -ICAgICAgICAjIGdlbmVyaXNjaGVzIEhpbndlaXMtSWNvbiwgS0VJTiBFbW9qaQ0KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cCA9ICdoaW53ZWlzJw0KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgS0VJTiAna2F0ZWdvcmllJy1GZWxkIC0g -RXhjZWwtWmVpbGVuLU1hcHBpbmcgd2lyZCBpZ25vcmllcnQNCiAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt2 -b2lkXSRTdExpc3RlLkFkZCgkTmV1KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgJE5UZXJtaW5lKysNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAg -ICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAg -ICAgICAgICAgICAgICAgICAgICRBZG1pbi5zb25kZXJ0ZXJtaW5lID0gQCgkU3RMaXN0ZSkNCiAg -ICAgICAgICAgICAgICAgICAgICAgIFdyaXRlLUpzb25GaWxlICdhZG1pbi5qc29uJyAkQWRtaW4N -CiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gZWxzZWlmICgkbnVsbCAt -bmUgJExvY2tSZXN1bHQuYWRtaW5NdXRhdGVkIC1hbmQgJExvY2tSZXN1bHQucm90YXRpb25TbG90 -cyAtZ3QgMCkgew0KICAgICAgICAgICAgICAgICAgICAjIFRhZ2VzZGF0ZW4gaGF0IEFkbWluIG11 -dGllcnQsIGFiZXIga2VpbiBTb25kZXJ0ZXJtaW5lLUJsb2NrIGhhdCBnZXNjaHJpZWJlbi4NCiAg -ICAgICAgICAgICAgICAgICAgV3JpdGUtSnNvbkZpbGUgJ2FkbWluLmpzb24nICRMb2NrUmVzdWx0 -LmFkbWluTXV0YXRlZA0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgICAgICMgQXV0 -by1Sb2xsZW4tU3luYyBuYWNoIEV4Y2VsLUltcG9ydCAobmV1ZSBQZXJzb25lbiBtaXQgREdMLzEu -RUIvMS5FQiBWLiAtPiBMaXN0ZW4pDQogICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAg -ICAgICAgICAgJFBsYW51bmdGdWVyU3luYyA9IFJlYWQtSnNvbkZpbGUgJ3BsYW51bmcuanNvbicN -CiAgICAgICAgICAgICAgICAgICAgJEFkbWluRnVlclN5bmMgPSBSZWFkLUpzb25GaWxlICdhZG1p -bi5qc29uJw0KICAgICAgICAgICAgICAgICAgICBpZiAoU3luYy1Sb2xsZW5BdXNQZXJzb25lbiAk -UGxhbnVuZ0Z1ZXJTeW5jICRBZG1pbkZ1ZXJTeW5jKSB7DQogICAgICAgICAgICAgICAgICAgICAg -ICBXcml0ZS1Kc29uRmlsZSAnYWRtaW4uanNvbicgJEFkbWluRnVlclN5bmMNCiAgICAgICAgICAg -ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggeyBXcml0ZS1XYXJuaW5nICJSb2xs -ZW4tU3luYyBuYWNoIEV4Y2VsLUltcG9ydCBmZWhsZ2VzY2hsYWdlbjogJF8iIH0NCg0KICAgICAg -ICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ2V4Y2VsLmltcG9ydGllcnQnIEB7DQogICAgICAg -ICAgICAgICAgICAgIGJhY2t1cCA9ICRMb2NrUmVzdWx0LmJhY2t1cA0KICAgICAgICAgICAgICAg -ICAgICBwZXJzb25lbk5ldSA9ICRMb2NrUmVzdWx0LnBlcnNvbmVuTmV1DQogICAgICAgICAgICAg -ICAgICAgIHBlcnNvbmVuQWt0dWFsaXNpZXJ0ID0gJExvY2tSZXN1bHQucGVyc29uZW5Ba3R1YWxp -c2llcnQNCiAgICAgICAgICAgICAgICAgICAgcGVyc29uZW5EZWFrdGl2aWVydCA9ICRMb2NrUmVz -dWx0LnBlcnNvbmVuRGVha3RpdmllcnQNCiAgICAgICAgICAgICAgICAgICAgZWludHJhZWdlID0g -JExvY2tSZXN1bHQuZWludHJhZWdlDQogICAgICAgICAgICAgICAgICAgIHBmbGljaHQgPSAkTG9j -a1Jlc3VsdC5wZmxpY2h0DQogICAgICAgICAgICAgICAgICAgIGtvbW1lbnRhcmUgPSAkTG9ja1Jl -c3VsdC5rb21tZW50YXJlDQogICAgICAgICAgICAgICAgICAgIHVuYmVrYW5udGVDb2RlcyA9ICRM -b2NrUmVzdWx0LnVuYmVrYW5udGVDb2Rlcw0KICAgICAgICAgICAgICAgICAgICBzb25kZXJ0ZXJt -aW5lID0gJE5UZXJtaW5lDQogICAgICAgICAgICAgICAgICAgIHJvdGF0aW9uU2xvdHMgPSAkTG9j -a1Jlc3VsdC5yb3RhdGlvblNsb3RzDQogICAgICAgICAgICAgICAgICAgIHRhZ2VzZGF0ZW5PdmVy -cmlkZXMgPSAkTG9ja1Jlc3VsdC50YWdlc2RhdGVuT3ZlcnJpZGVzDQogICAgICAgICAgICAgICAg -fQ0KDQogICAgICAgICAgICAgICAgU2VuZC1Kc29uICRSZXMgQHsNCiAgICAgICAgICAgICAgICAg -ICAgc3RhdHVzID0gJ29rJw0KICAgICAgICAgICAgICAgICAgICBiYWNrdXAgPSAkTG9ja1Jlc3Vs -dC5iYWNrdXANCiAgICAgICAgICAgICAgICAgICAgYW56YWhsID0gQHsNCiAgICAgICAgICAgICAg -ICAgICAgICAgIHBlcnNvbmVuTmV1ID0gJExvY2tSZXN1bHQucGVyc29uZW5OZXUNCiAgICAgICAg -ICAgICAgICAgICAgICAgIHBlcnNvbmVuQWt0dWFsaXNpZXJ0ID0gJExvY2tSZXN1bHQucGVyc29u -ZW5Ba3R1YWxpc2llcnQNCiAgICAgICAgICAgICAgICAgICAgICAgIHBlcnNvbmVuRGVha3Rpdmll -cnQgPSAkTG9ja1Jlc3VsdC5wZXJzb25lbkRlYWt0aXZpZXJ0DQogICAgICAgICAgICAgICAgICAg -ICAgICBlaW50cmFlZ2UgPSAkTG9ja1Jlc3VsdC5laW50cmFlZ2UNCiAgICAgICAgICAgICAgICAg -ICAgICAgIHBmbGljaHQgPSAkTG9ja1Jlc3VsdC5wZmxpY2h0DQogICAgICAgICAgICAgICAgICAg -ICAgICBrb21tZW50YXJlID0gJExvY2tSZXN1bHQua29tbWVudGFyZQ0KICAgICAgICAgICAgICAg -ICAgICAgICAgdW5iZWthbm50ZUNvZGVzID0gJExvY2tSZXN1bHQudW5iZWthbm50ZUNvZGVzDQog -ICAgICAgICAgICAgICAgICAgICAgICBzb25kZXJ0ZXJtaW5lID0gJE5UZXJtaW5lDQogICAgICAg -ICAgICAgICAgICAgICAgICByb3RhdGlvblNsb3RzID0gJExvY2tSZXN1bHQucm90YXRpb25TbG90 -cw0KICAgICAgICAgICAgICAgICAgICAgICAgdGFnZXNkYXRlbk92ZXJyaWRlcyA9ICRMb2NrUmVz -dWx0LnRhZ2VzZGF0ZW5PdmVycmlkZXMNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAg -ICAgICAgIH0NCiAgICAgICAgICAgICAgICBEZWJ1Zy1Mb2cgJ0FQSScgIlBPU1QgL2FwaS9pbXBv -cnQvZXhjZWwvdWViZXJuZWhtZW4gLT4gJCgkTG9ja1Jlc3VsdC5laW50cmFlZ2UpIEVpbnRyYWVn -ZSwgJCgkTG9ja1Jlc3VsdC5rb21tZW50YXJlKSBLb21tZW50YXJlLCAkTlRlcm1pbmUgVGVybWlu -ZSwgQmFja3VwOiAkKCRMb2NrUmVzdWx0LmJhY2t1cCkiDQogICAgICAgICAgICAgICAgY29udGlu -dWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyA9PT09PT09PT09PT09PT09PT09PT0g -TE9HQlVDSCA9PT09PT09PT09PT09PT09PT09PT0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEg -Jy9hcGkvbG9nYnVjaCcgLWFuZCAkTWV0aG9kIC1lcSAnR0VUJykgew0KICAgICAgICAgICAgICAg -ICMgQWRtaW4tR3VhcmQ6IExvZ2J1Y2ggZW50aGFlbHQgcGVyc29uZW5iZXpvZ2VuZSBEYXRlbg0K -ICAgICAgICAgICAgICAgICMgKFNjaGljaHRhZW5kZXJ1bmdlbiBwcm8gVXNlciBtaXQgYWx0ZW0v -bmV1ZW0gV2VydCkuIEltDQogICAgICAgICAgICAgICAgIyBGcm9udGVuZCBudXIgZnVlciBTdXBl -clVzZXIgb2RlciBBZG1pbiBzaWNodGJhcg0KICAgICAgICAgICAgICAgICMgKGRhcmZMb2didWNo -VGFiKCkgaW4ganMvY29yZS9wZXJtaXNzaW9ucy5qczoyNTMpLiBNaXJyb3INCiAgICAgICAgICAg -ICAgICAjIHp1IHNlcnZlci5weToyMTM0LTIxMzkuDQogICAgICAgICAgICAgICAgaWYgKC1ub3Qg -KFRlc3QtSXN0QWRtaW4pKSB7IFNlbmQtRXJyb3IgJFJlcyAnS2VpbmUgQmVyZWNodGlndW5nJyA0 -MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkTG9nUGF0aCA9IEpvaW4tUGF0aCAkRGF0 -YURpciAnbG9nYnVjaC5qc29uJw0KICAgICAgICAgICAgICAgICRFaW50cmFlZ2UgPSBAKCkNCiAg -ICAgICAgICAgICAgICBpZiAoVGVzdC1QYXRoICRMb2dQYXRoKSB7DQogICAgICAgICAgICAgICAg -ICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkTG9nQ29udGVudCA9IFtTeXN0ZW0u -SU8uRmlsZV06OlJlYWRBbGxUZXh0KCRMb2dQYXRoLCBbU3lzdGVtLlRleHQuRW5jb2RpbmddOjpV -VEY4KS5UcmltKCkNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkTG9nQ29udGVudC5MZW5n -dGggLWd0IDEpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUGFyc2VkID0gJExvZ0Nv -bnRlbnQgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg -KCRudWxsIC1uZSAkUGFyc2VkKSB7ICRFaW50cmFlZ2UgPSBAKCRQYXJzZWQpIH0NCiAgICAgICAg -ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAgICAg -ICAgICAgICAgICAgICAgICBXcml0ZS1TdGFydHVwTG9nICJMb2didWNoLVJlYWQtRmVobGVyOiAk -XyAtLSBsaWVmZXJlIGxlZXJlIExpc3RlIg0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAg -ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICMgUFMgNS4xIHVud3JhcHBlZCBAKCkgdW5kIFNp -bmdsZS1FbGVtZW50LUFycmF5cyBpbiBDb252ZXJ0VG8tSnNvbiAtLQ0KICAgICAgICAgICAgICAg -ICMgZGFoZXIgU29uZGVycGZhZGUuIEZyb250ZW5kIGVyd2FydGV0IGltbWVyIGVpbiBKU09OLUFy -cmF5Lg0KICAgICAgICAgICAgICAgIGlmICgkRWludHJhZWdlLkNvdW50IC1lcSAwKSB7DQogICAg -ICAgICAgICAgICAgICAgIFNlbmQtSnNvblJhdyAkUmVzICdbXScNCiAgICAgICAgICAgICAgICB9 -IGVsc2VpZiAoJEVpbnRyYWVnZS5Db3VudCAtZXEgMSkgew0KICAgICAgICAgICAgICAgICAgICBT -ZW5kLUpzb25SYXcgJFJlcyAoJ1snICsgKENvbnZlcnRUby1Kc29uIC1JbnB1dE9iamVjdCAkRWlu -dHJhZWdlWzBdIC1EZXB0aCAyNSAtQ29tcHJlc3MpICsgJ10nKQ0KICAgICAgICAgICAgICAgIH0g -ZWxzZSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtSnNvblJhdyAkUmVzIChDb252ZXJ0VG8t -SnNvbiAtSW5wdXRPYmplY3QgJEVpbnRyYWVnZSAtRGVwdGggMjUgLUNvbXByZXNzKQ0KICAgICAg -ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQog -ICAgICAgICAgICAjID09PT09PT09PT09PT09PT09PT09PSBNRURJRU46IExpc3RlID09PT09PT09 -PT09PT09PT09PT09PQ0KICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9tZWRpZW4nIC1h -bmQgJE1ldGhvZCAtZXEgJ0dFVCcpIHsNCiAgICAgICAgICAgICAgICAjIEJlaW0gZXJzdGVuIEF1 -ZnJ1ZiBTeXN0ZW0tTWVkaWVuIGF1cyAvaW1hZ2VzLyBlaW5tYWxpZyBpbXBvcnRpZXJlbi4NCiAg -ICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICBJbnZva2UtV2l0aEZpbGVM -b2NrICdtZWRpZW4uanNvbicgeyBJbnZva2UtTWVkaWVuU3lzdGVtSW1wb3J0RmFsbHNOb2V0aWcg -fCBPdXQtTnVsbCB9IHwgT3V0LU51bGwNCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAg -ICAgICAgICAgICAgICAgRGVidWctTG9nICdBUEknICJzeXN0ZW0taW1wb3J0IHNraXBwZWQ6ICRf -Ig0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAkTWV0YSA9IFJlYWQtTWVkaWVu -TWV0YQ0KICAgICAgICAgICAgICAgICRNZWRpZW5MaXN0ZSA9IGlmICgkTWV0YS5tZWRpZW4pIHsg -QCgkTWV0YS5tZWRpZW4pIH0gZWxzZSB7IEAoKSB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29u -ICRSZXMgQHsgbWVkaWVuID0gJE1lZGllbkxpc3RlOyBrYXRlZ29yaWVuID0gKEdldC1NZWRpZW5L -YXRlZ29yaWVLZXlzKSB9DQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0N -Cg0KICAgICAgICAgICAgIyA9PT09PT09PT09PT09PT09PT09PT0gTUVESUVOOiBEYXRlaSBhdXNs -aWVmZXJuID09PT09PT09PT09PT09PT09PT09PQ0KICAgICAgICAgICAgaWYgKCRQYXRoLlN0YXJ0 -c1dpdGgoJy9hcGkvbWVkaWVuL2RhdGVpLycpIC1hbmQgJE1ldGhvZCAtZXEgJ0dFVCcpIHsNCiAg -ICAgICAgICAgICAgICAkTWlkID0gJFBhdGguU3Vic3RyaW5nKCRQYXRoLkxhc3RJbmRleE9mKCcv -JykgKyAxKQ0KICAgICAgICAgICAgICAgICRNZXRhID0gUmVhZC1NZWRpZW5NZXRhDQogICAgICAg -ICAgICAgICAgJEVpbnRyYWcgPSAkbnVsbA0KICAgICAgICAgICAgICAgIGlmICgkTWV0YS5tZWRp -ZW4pIHsNCiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJG0gaW4gQCgkTWV0YS5tZWRpZW4p -KSB7IGlmICgkbS5pZCAtZXEgJE1pZCkgeyAkRWludHJhZyA9ICRtOyBicmVhayB9IH0NCiAgICAg -ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkRWludHJhZykgeyBT -ZW5kLUVycm9yICRSZXMgJ05pY2h0IGdlZnVuZGVuJyA0MDQ7IGNvbnRpbnVlIH0NCiAgICAgICAg -ICAgICAgICAkRGF0ZWkgPSBHZXQtTWVkaWVuUGZhZCAkRWludHJhZw0KICAgICAgICAgICAgICAg -IGlmICgtbm90IChUZXN0LVBhdGggJERhdGVpKSkgeyBTZW5kLUVycm9yICRSZXMgJ0RhdGVpIG5p -Y2h0IHZvcmhhbmRlbicgNDA0OyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgU2VuZC1GaWxl -ICRSZXMgJERhdGVpDQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0K -ICAgICAgICAgICAgIyA9PT09PT09PT09PT09PT09PT09PT0gTUVESUVOOiBVcGxvYWQgKEJhc2U2 -NC1KU09OKSA9PT09PT09PT09PT09PT09PT09PT0NCiAgICAgICAgICAgIGlmICgkUGF0aCAtZXEg -Jy9hcGkvbWVkaWVuJyAtYW5kICRNZXRob2QgLWVxICdQT1NUJykgew0KICAgICAgICAgICAgICAg -IGlmICgtbm90IChUZXN0LUlzdFN1cGVyVXNlcikpIHsgU2VuZC1FcnJvciAkUmVzICdOdXIgU3Vw -ZXJVc2VyIGRhcmYgTWVkaWVuIGhvY2hsYWRlbicgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAg -ICAgICAgJEJvZHkgPSBSZWFkLUJvZHkgJFJlcQ0KICAgICAgICAgICAgICAgIGlmICgkbnVsbCAt -ZXEgJEJvZHkpIHsgU2VuZC1FcnJvciAkUmVzICdBbmZyYWdlIHp1IGdyb3NzJyA0MTM7IGNvbnRp -bnVlIH0NCiAgICAgICAgICAgICAgICB0cnkgeyAkQSA9ICRCb2R5IHwgQ29udmVydEZyb20tSnNv -biB9IGNhdGNoIHsgU2VuZC1FcnJvciAkUmVzICdVbmd1ZWx0aWdlcyBKU09OJyA0MDA7IGNvbnRp -bnVlIH0NCiAgICAgICAgICAgICAgICAkS2F0ZWdvcmllID0gKFtzdHJpbmddJEEua2F0ZWdvcmll -KS5Ub0xvd2VyKCkuVHJpbSgpDQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKChHZXQtTWVkaWVu -S2F0ZWdvcmllS2V5cykgLWNvbnRhaW5zICRLYXRlZ29yaWUpKSB7IFNlbmQtRXJyb3IgJFJlcyAn -VW5ndWVsdGlnZSBLYXRlZ29yaWUnIDQwMDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRN -aW1lID0gKFtzdHJpbmddJEEubWltZVR5cGUpLlRvTG93ZXIoKS5UcmltKCkNCiAgICAgICAgICAg -ICAgICBpZiAoLW5vdCAkc2NyaXB0Ok1lZGllbkVybGF1YnRlTWltZXMuQ29udGFpbnNLZXkoJE1p -bWUpKSB7IFNlbmQtRXJyb3IgJFJlcyAnRGF0ZWl0eXAgbmljaHQgZXJsYXVidCcgNDAwOyBjb250 -aW51ZSB9DQogICAgICAgICAgICAgICAgJEJlemVpY2hudW5nID0gKFtzdHJpbmddJEEuYmV6ZWlj -aG51bmcpLlRyaW0oKQ0KICAgICAgICAgICAgICAgIGlmIChbc3RyaW5nXTo6SXNOdWxsT3JXaGl0 -ZVNwYWNlKCRCZXplaWNobnVuZykpIHsgU2VuZC1FcnJvciAkUmVzICdCZXplaWNobnVuZyBmZWhs -dCcgNDAwOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJERhdGFCNjQgPSBpZiAoJEEuZGF0 -YSkgeyBbc3RyaW5nXSRBLmRhdGEgfSBlbHNlIHsgJycgfQ0KICAgICAgICAgICAgICAgIGlmICgk -RGF0YUI2NC5TdGFydHNXaXRoKCdkYXRhOicpKSB7DQogICAgICAgICAgICAgICAgICAgICRpZHgg -PSAkRGF0YUI2NC5JbmRleE9mKCcsJykNCiAgICAgICAgICAgICAgICAgICAgaWYgKCRpZHggLWdl -IDApIHsgJERhdGFCNjQgPSAkRGF0YUI2NC5TdWJzdHJpbmcoJGlkeCArIDEpIH0NCiAgICAgICAg -ICAgICAgICB9DQogICAgICAgICAgICAgICAgdHJ5IHsgJFJvaEJ5dGVzID0gW1N5c3RlbS5Db252 -ZXJ0XTo6RnJvbUJhc2U2NFN0cmluZygkRGF0YUI2NCkgfSBjYXRjaCB7IFNlbmQtRXJyb3IgJFJl -cyAnQmFzZTY0IHVuZ3VlbHRpZycgNDAwOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgaWYg -KCRSb2hCeXRlcy5MZW5ndGggLWd0ICRzY3JpcHQ6TWVkaWVuTWF4Qnl0ZXMpIHsNCiAgICAgICAg -ICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzICJEYXRlaSB6dSBncm9zcyAobWF4ICQoW01hdGhd -OjpGbG9vcigkc2NyaXB0Ok1lZGllbk1heEJ5dGVzIC8gMU1CKSkgTUIpIiA0MTM7IGNvbnRpbnVl -DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRFeHQgPSAkc2NyaXB0Ok1lZGll -bkVybGF1YnRlTWltZXNbJE1pbWVdDQogICAgICAgICAgICAgICAgJE1pZCA9IE5ldy1NZWRpZW5J -ZA0KICAgICAgICAgICAgICAgICMgUm91dGluZzogV2VubiBJbWFnZXMvPGthdD4vIGFscyBEaXNr -LU9yZG5lciBleGlzdGllcnQgLT4gZG9ydCBoaW5zY2hyZWliZW4NCiAgICAgICAgICAgICAgICAj -IG1pdCBzYW5pdGlzaWVydGVtIE9yaWdpbmFsLURhdGVpbmFtZW4gKyBgcGZhZGAgaW0gRWludHJh -ZyBzZXR6ZW4uDQogICAgICAgICAgICAgICAgIyBTb25zdCBGYWxsYmFjayBhdWYgZGF0YS9tZWRp -ZW4vPGthdD4vPGlkPi48ZXh0Pi4NCiAgICAgICAgICAgICAgICAkSW1hZ2VzRGlyID0gR2V0LU1l -ZGllbkltYWdlc09yZG5lciAkS2F0ZWdvcmllDQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1u -ZSAkSW1hZ2VzRGlyKSB7DQogICAgICAgICAgICAgICAgICAgICRVcGxvYWROYW1lID0gaWYgKCRB -LmRhdGVpbmFtZSkgeyBbc3RyaW5nXSRBLmRhdGVpbmFtZSB9IGVsc2UgeyAkQmV6ZWljaG51bmcg -fQ0KICAgICAgICAgICAgICAgICAgICAkQmFzZSA9IEdldC1NZWRpZW5CYXNlbmFtZUF1c1VwbG9h -ZCAkVXBsb2FkTmFtZQ0KICAgICAgICAgICAgICAgICAgICAkWmllbCA9IEdldC1NZWRpZW5GcmVp -ZXJEYXRlaW5hbWUgJEltYWdlc0RpciAkQmFzZSAkRXh0DQogICAgICAgICAgICAgICAgICAgIFtT -eXN0ZW0uSU8uRmlsZV06OldyaXRlQWxsQnl0ZXMoJFppZWwsICRSb2hCeXRlcykNCiAgICAgICAg -ICAgICAgICAgICAgJFppZWxOYW1lID0gW1N5c3RlbS5JTy5QYXRoXTo6R2V0RmlsZU5hbWUoJFpp -ZWwpDQogICAgICAgICAgICAgICAgICAgICRFaW50cmFnID0gW29yZGVyZWRdQHsNCiAgICAgICAg -ICAgICAgICAgICAgICAgIGlkID0gJE1pZA0KICAgICAgICAgICAgICAgICAgICAgICAga2F0ZWdv -cmllID0gJEthdGVnb3JpZQ0KICAgICAgICAgICAgICAgICAgICAgICAgYmV6ZWljaG51bmcgPSAk -QmV6ZWljaG51bmcNCiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGVpbmFtZSA9ICRaaWVsTmFt -ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgbWltZVR5cGUgPSAkTWltZQ0KICAgICAgICAgICAg -ICAgICAgICAgICAgZ3JvZXNzZSA9ICRSb2hCeXRlcy5MZW5ndGgNCiAgICAgICAgICAgICAgICAg -ICAgICAgIHBmYWQgPSAnL2ltYWdlcy8nICsgJEthdGVnb3JpZSArICcvJyArICRaaWVsTmFtZQ0K -ICAgICAgICAgICAgICAgICAgICAgICAgaG9jaGdlbGFkZW5BbSA9IChHZXQtRGF0ZSAtRm9ybWF0 -ICd5eXl5LU1NLWRkIEhIOm1tOnNzJykNCiAgICAgICAgICAgICAgICAgICAgICAgIGhvY2hnZWxh -ZGVuVm9uID0gKEdldC1Ba3R1ZWxsZXJCZW51dHplcikNCiAgICAgICAgICAgICAgICAgICAgfQ0K -ICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICRLYXREaXIgPSBK -b2luLVBhdGggKEdldC1NZWRpZW5EaXIpICRLYXRlZ29yaWUNCiAgICAgICAgICAgICAgICAgICAg -aWYgKC1ub3QgKFRlc3QtUGF0aCAkS2F0RGlyKSkgeyBOZXctSXRlbSAtSXRlbVR5cGUgRGlyZWN0 -b3J5IC1QYXRoICRLYXREaXIgLUZvcmNlIHwgT3V0LU51bGwgfQ0KICAgICAgICAgICAgICAgICAg -ICAkWmllbCA9IEpvaW4tUGF0aCAkS2F0RGlyICgkTWlkICsgJEV4dCkNCiAgICAgICAgICAgICAg -ICAgICAgW1N5c3RlbS5JTy5GaWxlXTo6V3JpdGVBbGxCeXRlcygkWmllbCwgJFJvaEJ5dGVzKQ0K -ICAgICAgICAgICAgICAgICAgICAkRWludHJhZyA9IFtvcmRlcmVkXUB7DQogICAgICAgICAgICAg -ICAgICAgICAgICBpZCA9ICRNaWQNCiAgICAgICAgICAgICAgICAgICAgICAgIGthdGVnb3JpZSA9 -ICRLYXRlZ29yaWUNCiAgICAgICAgICAgICAgICAgICAgICAgIGJlemVpY2hudW5nID0gJEJlemVp -Y2hudW5nDQogICAgICAgICAgICAgICAgICAgICAgICBkYXRlaW5hbWUgPSBpZiAoJEEuZGF0ZWlu -YW1lKSB7IChbc3RyaW5nXSRBLmRhdGVpbmFtZSkuVHJpbSgpLlN1YnN0cmluZygwLCBbTWF0aF06 -Ok1pbigoW3N0cmluZ10kQS5kYXRlaW5hbWUpLkxlbmd0aCwgMjAwKSkgfSBlbHNlIHsgKCRNaWQg -KyAkRXh0KSB9DQogICAgICAgICAgICAgICAgICAgICAgICBtaW1lVHlwZSA9ICRNaW1lDQogICAg -ICAgICAgICAgICAgICAgICAgICBncm9lc3NlID0gJFJvaEJ5dGVzLkxlbmd0aA0KICAgICAgICAg -ICAgICAgICAgICAgICAgaG9jaGdlbGFkZW5BbSA9IChHZXQtRGF0ZSAtRm9ybWF0ICd5eXl5LU1N -LWRkIEhIOm1tOnNzJykNCiAgICAgICAgICAgICAgICAgICAgICAgIGhvY2hnZWxhZGVuVm9uID0g -KEdldC1Ba3R1ZWxsZXJCZW51dHplcikNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAg -ICAgICAgIH0NCiAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICBJbnZv -a2UtV2l0aEZpbGVMb2NrICdtZWRpZW4uanNvbicgew0KICAgICAgICAgICAgICAgICAgICAgICAg -JE1ldGEgPSBSZWFkLU1lZGllbk1ldGENCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtbm90 -ICRNZXRhLm1lZGllbikgeyAkTWV0YSA9IFtQU0N1c3RvbU9iamVjdF1AeyBtZWRpZW4gPSBAKCkg -fSB9DQogICAgICAgICAgICAgICAgICAgICAgICAkTGlzdGUgPSBAKCRNZXRhLm1lZGllbikgKyBb -UFNDdXN0b21PYmplY3RdJEVpbnRyYWcNCiAgICAgICAgICAgICAgICAgICAgICAgICRNZXRhID0g -W1BTQ3VzdG9tT2JqZWN0XUB7IG1lZGllbiA9ICRMaXN0ZSB9DQogICAgICAgICAgICAgICAgICAg -ICAgICBXcml0ZS1NZWRpZW5NZXRhICRNZXRhDQogICAgICAgICAgICAgICAgICAgIH0gfCBPdXQt -TnVsbA0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAgICAgICAgICBpZiAo -VGVzdC1QYXRoICRaaWVsKSB7IFJlbW92ZS1JdGVtICRaaWVsIC1FcnJvckFjdGlvbiBTaWxlbnRs -eUNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzICIkXyIgNTAz -OyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dF -aW50cmFnICdtZWRpZW4uaG9jaGdlbGFkZW4nIEB7IGlkID0gJE1pZDsga2F0ZWdvcmllID0gJEth -dGVnb3JpZTsgYmV6ZWljaG51bmcgPSAkQmV6ZWljaG51bmc7IGdyb2Vzc2UgPSAkUm9oQnl0ZXMu -TGVuZ3RoOyBtaW1lVHlwZSA9ICRNaW1lIH0NCiAgICAgICAgICAgICAgICAkVXNlcm5hbWUgPSAk -ZW52OlVTRVJOQU1FDQogICAgICAgICAgICAgICAgJFJvbGxlID0gR2V0LVVzZXJSb2xsZQ0KICAg -ICAgICAgICAgICAgIEFkZC1DaGFuZ2VMb2dFbnRyeSAnbWVkaWVuJyAkbnVsbCAkbnVsbCAkbnVs -bCAkVXNlcm5hbWUgJFJvbGxlIEB7IGFrdGlvbiA9ICdob2NoZ2VsYWRlbic7IGlkID0gJE1pZDsg -a2F0ZWdvcmllID0gJEthdGVnb3JpZTsgYmV6ZWljaG51bmcgPSAkQmV6ZWljaG51bmcgfQ0KICAg -ICAgICAgICAgICAgIFNlbmQtSnNvbiAkUmVzIEB7IHN0YXR1cyA9ICdnZXNwZWljaGVydCc7IG1l -ZGl1bSA9ICRFaW50cmFnIH0gMjAxDQogICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAg -ICAgIH0NCg0KICAgICAgICAgICAgIyA9PT09PT09PT09PT09PT09PT09PT0gTUVESUVOOiBVbWJl -bmVubmVuIC8gVmVyc2NoaWViZW4gLyBEYXRlaSBlcnNldHplbiA9PT09PT09PT09PT09PT09PT09 -PT0NCiAgICAgICAgICAgIGlmICgkUGF0aC5TdGFydHNXaXRoKCcvYXBpL21lZGllbi8nKSAtYW5k -ICRNZXRob2QgLWVxICdQQVRDSCcgLWFuZCAtbm90ICRQYXRoLlN0YXJ0c1dpdGgoJy9hcGkvbWVk -aWVuL2RhdGVpLycpKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0U3VwZXJV -c2VyKSkgeyBTZW5kLUVycm9yICRSZXMgJ051ciBTdXBlclVzZXIgZGFyZiBNZWRpZW4gYWVuZGVy -bicgNDAzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJE1pZCA9ICRQYXRoLlN1YnN0cmlu -ZygkUGF0aC5MYXN0SW5kZXhPZignLycpICsgMSkNCiAgICAgICAgICAgICAgICAkQm9keSA9IFJl -YWQtQm9keSAkUmVxDQogICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkQm9keSkgeyBTZW5k -LUVycm9yICRSZXMgJ0FuZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUgfQ0KICAgICAgICAg -ICAgICAgIHRyeSB7ICRBID0gJEJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uIH0gY2F0Y2ggeyBTZW5k -LUVycm9yICRSZXMgJ1VuZ3VlbHRpZ2VzIEpTT04nIDQwMDsgY29udGludWUgfQ0KICAgICAgICAg -ICAgICAgICROZXVlQmV6ID0gaWYgKCRBLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2JlemVpY2hudW5n -J10pIHsgW3N0cmluZ10kQS5iZXplaWNobnVuZyB9IGVsc2UgeyAkbnVsbCB9DQogICAgICAgICAg -ICAgICAgJE5ldWVLYXQgPSBpZiAoJEEuUFNPYmplY3QuUHJvcGVydGllc1sna2F0ZWdvcmllJ10p -IHsgKFtzdHJpbmddJEEua2F0ZWdvcmllKS5Ub0xvd2VyKCkuVHJpbSgpIH0gZWxzZSB7ICRudWxs -IH0NCiAgICAgICAgICAgICAgICBpZiAoJG51bGwgLW5lICROZXVlS2F0IC1hbmQgLW5vdCAoKEdl -dC1NZWRpZW5LYXRlZ29yaWVLZXlzKSAtY29udGFpbnMgJE5ldWVLYXQpKSB7DQogICAgICAgICAg -ICAgICAgICAgIFNlbmQtRXJyb3IgJFJlcyAnVW5ndWVsdGlnZSBLYXRlZ29yaWUnIDQwMDsgY29u -dGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgIyBPcHRpb25hbDogRGF0 -ZWktSW5oYWx0IGF1c3RhdXNjaGVuICgiRGF0ZWkgZXJzZXR6ZW4iLUFrdGlvbikNCiAgICAgICAg -ICAgICAgICAkTmV1ZURhdGFCNjQgPSBpZiAoJEEuUFNPYmplY3QuUHJvcGVydGllc1snZGF0YSdd -KSB7IFtzdHJpbmddJEEuZGF0YSB9IGVsc2UgeyAkbnVsbCB9DQogICAgICAgICAgICAgICAgJE5l -dWVNaW1lICAgID0gaWYgKCRBLlBTT2JqZWN0LlByb3BlcnRpZXNbJ21pbWVUeXBlJ10pIHsgKFtz -dHJpbmddJEEubWltZVR5cGUpLlRvTG93ZXIoKS5UcmltKCkgfSBlbHNlIHsgJG51bGwgfQ0KICAg -ICAgICAgICAgICAgICROZXVlckRhdGVpbmFtZSA9IGlmICgkQS5QU09iamVjdC5Qcm9wZXJ0aWVz -WydkYXRlaW5hbWUnXSkgeyAoW3N0cmluZ10kQS5kYXRlaW5hbWUpLlRyaW0oKSB9IGVsc2UgeyAk -bnVsbCB9DQogICAgICAgICAgICAgICAgJE5ldWVCeXRlcyA9ICRudWxsDQogICAgICAgICAgICAg -ICAgaWYgKC1ub3QgW3N0cmluZ106OklzTnVsbE9yV2hpdGVTcGFjZSgkTmV1ZURhdGFCNjQpKSB7 -DQogICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICROZXVlTWltZSkgeyBTZW5kLUVycm9yICRS -ZXMgJ21pbWVUeXBlIGZlaGx0IHp1bSBEYXRlaS1FcnNldHplbicgNDAwOyBjb250aW51ZSB9DQog -ICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRzY3JpcHQ6TWVkaWVuRXJsYXVidGVNaW1lcy5D -b250YWluc0tleSgkTmV1ZU1pbWUpKSB7IFNlbmQtRXJyb3IgJFJlcyAnRGF0ZWl0eXAgbmljaHQg -ZXJsYXVidCcgNDAwOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgICAgIGlmICgkTmV1ZURh -dGFCNjQuU3RhcnRzV2l0aCgnZGF0YTonKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGlk -eCA9ICROZXVlRGF0YUI2NC5JbmRleE9mKCcsJykNCiAgICAgICAgICAgICAgICAgICAgICAgIGlm -ICgkaWR4IC1nZSAwKSB7ICROZXVlRGF0YUI2NCA9ICROZXVlRGF0YUI2NC5TdWJzdHJpbmcoJGlk -eCArIDEpIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB0cnkg -eyAkTmV1ZUJ5dGVzID0gW1N5c3RlbS5Db252ZXJ0XTo6RnJvbUJhc2U2NFN0cmluZygkTmV1ZURh -dGFCNjQpIH0gY2F0Y2ggeyBTZW5kLUVycm9yICRSZXMgJ0Jhc2U2NCB1bmd1ZWx0aWcnIDQwMDsg -Y29udGludWUgfQ0KICAgICAgICAgICAgICAgICAgICBpZiAoJE5ldWVCeXRlcy5MZW5ndGggLWd0 -ICRzY3JpcHQ6TWVkaWVuTWF4Qnl0ZXMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIFNlbmQt -RXJyb3IgJFJlcyAiRGF0ZWkgenUgZ3Jvc3MgKG1heCAkKFtNYXRoXTo6Rmxvb3IoJHNjcmlwdDpN -ZWRpZW5NYXhCeXRlcyAvIDFNQikpIE1CKSIgNDEzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAg -ICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICRzY3JpcHQ6VXBkYXRl -ZEVpbnRyYWcgPSAkbnVsbDsgJHNjcmlwdDpGb3VuZCA9ICRmYWxzZTsgJHNjcmlwdDpBZW5kZXJ1 -bmdlbiA9IEB7fQ0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgIElu +ICAgICAgICAgICBpZiAoJFBsYW51bmcuZWludHJhZWdlLiREYXR1bS5QU09iamVjdC5Qcm9wZXJ0 +aWVzWyRwaWRTdHJdKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +JFBsYW51bmcuZWludHJhZWdlLiREYXR1bS4kcGlkU3RyID0gJHdlcnQNCiAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgJFBsYW51bmcuZWludHJhZWdlLiREYXR1bSB8IEFkZC1NZW1iZXIgLU1l +bWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1lICRwaWRTdHIgLVZhbHVlICR3ZXJ0DQogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAkTkVpbnRyYWVnZSsrDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +IH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgaWYgKCRudWxsIC1uZSAkRXhjZWxQZmxpY2h0KSB7DQogICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgIGZvcmVhY2ggKCREYXR1bVByb3AgaW4gJEV4Y2VsUGZsaWNodC5QU09iamVj +dC5Qcm9wZXJ0aWVzKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRGF0 +dW0gPSAkRGF0dW1Qcm9wLk5hbWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +IGlmICgtbm90ICRQbGFudW5nLnBmbGljaHQuUFNPYmplY3QuUHJvcGVydGllc1skRGF0dW1dKSB7 +DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51bmcucGZsaWNo +dCB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1lICREYXR1bSAtVmFs +dWUgKE5ldy1PYmplY3QgUFNPYmplY3QpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkUGlk +UHJvcCBpbiAkRGF0dW1Qcm9wLlZhbHVlLlBTT2JqZWN0LlByb3BlcnRpZXMpIHsNCiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXIgPSBbaW50XSRQaWRQcm9wLk5hbWUN +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkRXhjZWxS +b3dUb1BpZC5Db250YWluc0tleSgkZXIpKSB7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAkcGlkU3RyID0gW3N0cmluZ10kRXhjZWxSb3dUb1BpZFsk +ZXJdDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRQaWRQcm9w +LlZhbHVlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm +ICgkUGxhbnVuZy5wZmxpY2h0LiREYXR1bS5QU09iamVjdC5Qcm9wZXJ0aWVzWyRwaWRTdHJdKSB7 +DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUGxhbnVu +Zy5wZmxpY2h0LiREYXR1bS4kcGlkU3RyID0gJHRydWUNCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5nLnBmbGljaHQuJERhdHVtIHwgQWRkLU1lbWJl +ciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgJHBpZFN0ciAtVmFsdWUgJHRydWUNCiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTlBmbGljaHQrKw0KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAg +ICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCg0KICAgICAg +ICAgICAgICAgICAgICAgICAgIyBLb21tZW50YXJlDQogICAgICAgICAgICAgICAgICAgICAgICAk +TktvbW1lbnRhcmUgPSAwDQogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJE9wdEtvbW1lbnRh +cmUgLWFuZCAkbnVsbCAtbmUgJEV4Y2VsS29tbWVudGFyZSkgew0KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgIGZvcmVhY2ggKCREYXR1bVByb3AgaW4gJEV4Y2VsS29tbWVudGFyZS5QU09iamVj +dC5Qcm9wZXJ0aWVzKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICREYXR1bSA9 +ICREYXR1bVByb3AuTmFtZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5v +dCAkUGxhbnVuZy5rb21tZW50YXJlLlBTT2JqZWN0LlByb3BlcnRpZXNbJERhdHVtXSkgew0KICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51bmcua29tbWVudGFyZSB8IEFk +ZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1lICREYXR1bSAtVmFsdWUgKE5l +dy1PYmplY3QgUFNPYmplY3QpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJFBpZFByb3AgaW4gJERhdHVt +UHJvcC5WYWx1ZS5QU09iamVjdC5Qcm9wZXJ0aWVzKSB7DQogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAkZXIgPSBbaW50XSRQaWRQcm9wLk5hbWUNCiAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICRFeGNlbFJvd1RvUGlkLkNvbnRhaW5zS2V5KCRl +cikpIHsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBp +ZFN0ciA9IFtzdHJpbmddJEV4Y2VsUm93VG9QaWRbJGVyXQ0KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgJEtvbU9iaiA9IFtQU0N1c3RvbU9iamVjdF1Aew0KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHQgPSBbc3RyaW5nXSRQaWRQcm9wLlZhbHVl +DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2VhZW5kZXJ0QW0gPSAk +SmV0enQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZWFlbmRlcnRW +b24gPSAoR2V0LUFrdHVlbGxlckJlbnV0emVyKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRQbGFu +dW5nLmtvbW1lbnRhcmUuJERhdHVtLlBTT2JqZWN0LlByb3BlcnRpZXNbJHBpZFN0cl0pIHsNCiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUGxhbnVuZy5rb21tZW50YXJl +LiREYXR1bS4kcGlkU3RyID0gJEtvbU9iag0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAk +UGxhbnVuZy5rb21tZW50YXJlLiREYXR1bSB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVBy +b3BlcnR5IC1OYW1lICRwaWRTdHIgLVZhbHVlICRLb21PYmoNCiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRO +S29tbWVudGFyZSsrDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9DQoNCiAgICAg +ICAgICAgICAgICAgICAgICAgICMgUmVpaGVuZm9sZ2UNCiAgICAgICAgICAgICAgICAgICAgICAg +IGlmICgkT3B0UmVpaGVuZm9sZ2UpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRXhj +ZWxPcmRlclJvd3MgPSBAKCRBa3Rpb25lbiB8IFdoZXJlLU9iamVjdCB7IEAoJ21hdGNoJywnbmV1 +JykgLWNvbnRhaW5zICRfLmFrdGlvbiAtYW5kICRfLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2V4Y2Vs +Um93J10gfSB8IFNvcnQtT2JqZWN0IHsgW2ludF0kXy5leGNlbFJvdyB9KQ0KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICRTb3J0UGlkcyA9IE5ldy1PYmplY3QgU3lzdGVtLkNvbGxlY3Rpb25z +LkFycmF5TGlzdA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRhIGluICRF +eGNlbE9yZGVyUm93cykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZXIgPSBb +aW50XSRhLmV4Y2VsUm93DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkRXhj +ZWxSb3dUb1BpZC5Db250YWluc0tleSgkZXIpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAkc29ydElkID0gJEV4Y2VsUm93VG9QaWRbJGVyXQ0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJFNvcnRQaWRzLkNvbnRhaW5zKCRzb3J0SWQp +KSB7IFt2b2lkXSRTb3J0UGlkcy5BZGQoJHNvcnRJZCkgfQ0KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICRCeUlkID0gQHt9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg +Zm9yZWFjaCAoJHAgaW4gJFBlcnNvbmVuTGlzdGUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgaWYgKCRwLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2lkJ10pIHsgJEJ5SWRbW2ludF0k +cC5pZF0gPSAkcCB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICROZXVlTGlzdGUgPSBOZXctT2JqZWN0IFN5c3RlbS5Db2xsZWN0aW9u +cy5BcnJheUxpc3QNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkcGVyc0lk +IGluICRTb3J0UGlkcykgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJEJ5 +SWQuQ29udGFpbnNLZXkoJHBlcnNJZCkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgIFt2b2lkXSROZXVlTGlzdGUuQWRkKCRCeUlkWyRwZXJzSWRdKQ0KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgJEJ5SWQuUmVtb3ZlKCRwZXJzSWQpDQogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBSZXN0bGljaGUgUGVyc29uZW46IGFrdGl2ZSB6 +dWVyc3QNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUmVzdEFrdGl2ZSA9IEAoJEJ5SWQu +VmFsdWVzIHwgV2hlcmUtT2JqZWN0IHsgLW5vdCAkXy5QU09iamVjdC5Qcm9wZXJ0aWVzWydha3Rp +diddIC1vciAkXy5ha3RpdiAtZXEgJHRydWUgfSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAkUmVzdEluYWt0aXZlID0gQCgkQnlJZC5WYWx1ZXMgfCBXaGVyZS1PYmplY3QgeyAkXy5QU09i +amVjdC5Qcm9wZXJ0aWVzWydha3RpdiddIC1hbmQgJF8uYWt0aXYgLWVxICRmYWxzZSB9KQ0KICAg +ICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwIGluICRSZXN0QWt0aXZlKSB7IFt2 +b2lkXSROZXVlTGlzdGUuQWRkKCRwKSB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9y +ZWFjaCAoJHAgaW4gJFJlc3RJbmFrdGl2ZSkgeyBbdm9pZF0kTmV1ZUxpc3RlLkFkZCgkcCkgfQ0K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgJ3Bvc2l0aW9uJyBmb3J0bGF1ZmVuZCBuZXUg +dmVyZ2ViZW4gKEZyb250ZW5kIHNvcnRpZXJ0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg +IyBuYWNoIHAucG9zaXRpb24sIE5JQ0hUIG5hY2ggQXJyYXktUmVpaGVuZm9sZ2UpDQogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgJHBvc0NvdW50ZXIgPSAxDQogICAgICAgICAgICAgICAgICAg +ICAgICAgICAgZm9yZWFjaCAoJHAgaW4gJE5ldWVMaXN0ZSkgew0KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICBpZiAoJHAuUFNPYmplY3QuUHJvcGVydGllc1sncG9zaXRpb24nXSkgeyAk +cC5wb3NpdGlvbiA9ICRwb3NDb3VudGVyIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgZWxzZSB7ICRwIHwgQWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUg +J3Bvc2l0aW9uJyAtVmFsdWUgJHBvc0NvdW50ZXIgfQ0KICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAkcG9zQ291bnRlcisrDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICRQbGFudW5nLnBlcnNvbmVuID0gQCgkTmV1ZUxpc3Rl +KQ0KICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAjIEF1Y2ggb2huZSBSZWloZW5mb2xnZS1VcGRhdGU6IG5ldWUgUGVyc29uZW4gYnJh +dWNoZW4gJ3Bvc2l0aW9uJw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtYXhQb3MgPSAw +DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHAgaW4gJFBlcnNvbmVuTGlz +dGUpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRwLlBTT2JqZWN0LlBy +b3BlcnRpZXNbJ3Bvc2l0aW9uJ10pIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICRwcCA9IFtpbnRdKCRwLnBvc2l0aW9uIHwgRm9yRWFjaC1PYmplY3QgeyBpZiAoJF8pIHsg +JF8gfSBlbHNlIHsgMCB9IH0pDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp +ZiAoJHBwIC1ndCAkbWF4UG9zKSB7ICRtYXhQb3MgPSAkcHAgfQ0KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAg +ICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRwIGluICRQZXJzb25lbkxpc3RlKSB7DQogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICRoYXRQb3MgPSAkZmFsc2UNCiAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgaWYgKCRwLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3Bvc2l0aW9u +J10gLWFuZCAkcC5wb3NpdGlvbikgeyAkaGF0UG9zID0gJHRydWUgfQ0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkaGF0UG9zKSB7DQogICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAkbWF4UG9zKysNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgIGlmICgkcC5QU09iamVjdC5Qcm9wZXJ0aWVzWydwb3NpdGlvbiddKSB7ICRwLnBvc2l0 +aW9uID0gJG1heFBvcyB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNl +IHsgJHAgfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAtTmFtZSAncG9zaXRp +b24nIC1WYWx1ZSAkbWF4UG9zIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAkUGxhbnVuZy5wZXJzb25lbiA9IEAoJFBlcnNvbmVuTGlzdGUpDQogICAgICAgICAgICAgICAg +ICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICMgLS0tLSBUYWdlc2RhdGVuIC8g +U2NoaWNodHJvdGF0aW9uIGF1cyBFeGNlbC1SNC1SOSAtLS0tDQogICAgICAgICAgICAgICAgICAg +ICAgICAkTlJvdGF0aW9uU2xvdHMgPSAwDQogICAgICAgICAgICAgICAgICAgICAgICAkTlRhZ2Vz +ZGF0ZW5PdmVycmlkZXMgPSAwDQogICAgICAgICAgICAgICAgICAgICAgICAkQWRtaW5NdXRhdGVk +ID0gJG51bGwNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkT3B0VGFnZXNkYXRlbiAtYW5k +ICRudWxsIC1uZSAkRXhjZWxUYWdlc2RhdGVuKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAg +ICAgJHRkUHJvcHMgPSBAKCRFeGNlbFRhZ2VzZGF0ZW4uUFNPYmplY3QuUHJvcGVydGllcykNCiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHRkUHJvcHMuQ291bnQgLWd0IDApIHsNCiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNvcnRlZERhdGVzID0gQCgkdGRQcm9wcyB8 +IEZvckVhY2gtT2JqZWN0IHsgJF8uTmFtZSB9IHwgU29ydC1PYmplY3QpDQogICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICRlcnN0ZXNEID0gW2RhdGV0aW1lXTo6UGFyc2VFeGFjdCgkc29y +dGVkRGF0ZXNbMF0sICd5eXl5LU1NLWRkJywgJG51bGwpDQogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICRkb3cgPSBbaW50XSRlcnN0ZXNELkRheU9mV2Vlaw0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICBpZiAoJGRvdyAtZXEgMCkgeyAkb2Zmc2V0TW8gPSAxIH0gZWxzZSB7 +ICRvZmZzZXRNbyA9ICg4IC0gJGRvdykgJSA3IH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgJG1vSWR4ID0gJG9mZnNldE1vDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICR3b2NoZW5BbnphaGwgPSAzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzbG90 +Q291bnQgPSAkd29jaGVuQW56YWhsICogNw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICBpZiAoJG1vSWR4ICsgJHNsb3RDb3VudCAtbGUgJHNvcnRlZERhdGVzLkNvdW50KSB7DQogICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm90YXRpb25zVGFnZSA9IEAoKQ0KICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICgkaSA9IDA7ICRpIC1sdCAkc2xv +dENvdW50OyAkaSsrKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +JHJvdGF0aW9uc1RhZ2UgKz0gJEV4Y2VsVGFnZXNkYXRlbi4oJHNvcnRlZERhdGVzWyRtb0lkeCAr +ICRpXSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICRBZG1pbk11dGF0ZWQgPSBSZWFkLUpzb25GaWxlICdh +ZG1pbi5qc29uJw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxs +IC1uZSAkQWRtaW5NdXRhdGVkKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgaWYgKC1ub3QgJEFkbWluTXV0YXRlZC5QU09iamVjdC5Qcm9wZXJ0aWVzWyd0YWdlc2Rh +dGVuUm90YXRpb24nXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAkQWRtaW5NdXRhdGVkIHwgQWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkg +LU5hbWUgJ3RhZ2VzZGF0ZW5Sb3RhdGlvbicgLVZhbHVlIChOZXctT2JqZWN0IFBTT2JqZWN0KQ0K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAkcm90ID0gJEFkbWluTXV0YXRlZC50YWdlc2RhdGVu +Um90YXRpb24NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm90U3Rh +cnRJc28gPSAkc29ydGVkRGF0ZXNbJG1vSWR4XQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgIGlmICgkcm90LlBTT2JqZWN0LlByb3BlcnRpZXNbJ3dvY2hlbkFuemFobCdd +KSB7ICRyb3Qud29jaGVuQW56YWhsID0gJHdvY2hlbkFuemFobCB9IGVsc2UgeyAkcm90IHwgQWRk +LU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgJ3dvY2hlbkFuemFobCcgLVZh +bHVlICR3b2NoZW5BbnphaGwgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgIGlmICgkcm90LlBTT2JqZWN0LlByb3BlcnRpZXNbJ3N0YXJ0RGF0dW0nXSkgeyAkcm90LnN0 +YXJ0RGF0dW0gPSAkcm90U3RhcnRJc28gfSBlbHNlIHsgJHJvdCB8IEFkZC1NZW1iZXIgLU1lbWJl +clR5cGUgTm90ZVByb3BlcnR5IC1OYW1lICdzdGFydERhdHVtJyAtVmFsdWUgJHJvdFN0YXJ0SXNv +IH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHJvdC5QU09i +amVjdC5Qcm9wZXJ0aWVzWyd0YWdlJ10pIHsgJHJvdC50YWdlID0gQCgkcm90YXRpb25zVGFnZSkg +fSBlbHNlIHsgJHJvdCB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1l +ICd0YWdlJyAtVmFsdWUgQCgkcm90YXRpb25zVGFnZSkgfQ0KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICROUm90YXRpb25TbG90cyA9ICRzbG90Q291bnQNCg0KICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgT3ZlcnJpZGUtUHJ1ZWZ1bmcNCiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkUGxhbnVuZy5Q +U09iamVjdC5Qcm9wZXJ0aWVzWyd0YWdlc2RhdGVuJ10pIHsNCiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgJFBsYW51bmcgfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBl +IE5vdGVQcm9wZXJ0eSAtTmFtZSAndGFnZXNkYXRlbicgLVZhbHVlIChOZXctT2JqZWN0IFBTT2Jq +ZWN0KQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYWx0ZVByb3BzID0gQCgkUGxhbnVuZy50 +YWdlc2RhdGVuLlBTT2JqZWN0LlByb3BlcnRpZXMgfCBXaGVyZS1PYmplY3Qgew0KICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkXy5WYWx1ZS5QU09iamVjdC5Qcm9w +ZXJ0aWVzWydfc3JjJ10gLWFuZCAkXy5WYWx1ZS5fc3JjIC1lcSAnZXhjZWwnDQogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkNCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICBmb3JlYWNoICgkcHIgaW4gJGFsdGVQcm9wcykgeyAkUGxhbnVuZy50 +YWdlc2RhdGVuLlBTT2JqZWN0LlByb3BlcnRpZXMuUmVtb3ZlKCRwci5OYW1lKSB9DQoNCiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcm90U3RhcnREID0gW2RhdGV0aW1l +XTo6UGFyc2VFeGFjdCgkcm90U3RhcnRJc28sICd5eXl5LU1NLWRkJywgJG51bGwpDQogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHByb3AgaW4gJHRkUHJv +cHMpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRhdHVt +SXNvID0gJHByb3AuTmFtZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAkdGQgPSAkcHJvcC5WYWx1ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAkZGF0dW1EID0gW2RhdGV0aW1lXTo6UGFyc2VFeGFjdCgkZGF0dW1Jc28sICd5 +eXl5LU1NLWRkJywgJG51bGwpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICRkaWZmRGF5cyA9ICgkZGF0dW1EIC0gJHJvdFN0YXJ0RCkuRGF5cw0KICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaXN0T3ZlcnJpZGUgPSAkZmFsc2UN +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRkaWZmRGF5 +cyAtbHQgMCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgJGlzdE92ZXJyaWRlID0gJHRydWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICRzbG90SWR4ID0gJGRpZmZEYXlzICUgJHNsb3RDb3VudA0KICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNsb3RUZCA9ICRyb3RhdGlv +bnNUYWdlWyRzbG90SWR4XQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgJGpzb25UZCA9ICR0ZCB8IENvbnZlcnRUby1Kc29uIC1Db21wcmVzcyAtRGVwdGgg +Ng0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGpzb25T +bG90ID0gJHNsb3RUZCB8IENvbnZlcnRUby1Kc29uIC1Db21wcmVzcyAtRGVwdGggNg0KICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRqc29uVGQgLW5l +ICRqc29uU2xvdCkgeyAkaXN0T3ZlcnJpZGUgPSAkdHJ1ZSB9DQogICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgaWYgKCRpc3RPdmVycmlkZSkgew0KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRkTWFya2VkID0gJHRkIHwgQ29udmVydFRvLUpz +b24gLURlcHRoIDYgfCBDb252ZXJ0RnJvbS1Kc29uDQogICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAkdGRNYXJrZWQgfCBBZGQtTWVtYmVyIC1NZW1iZXJUeXBl +IE5vdGVQcm9wZXJ0eSAtTmFtZSAnX3NyYycgLVZhbHVlICdleGNlbCcgLUZvcmNlDQogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJFBsYW51bmcudGFn +ZXNkYXRlbi5QU09iamVjdC5Qcm9wZXJ0aWVzWyRkYXR1bUlzb10pIHsNCiAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkUGxhbnVuZy50YWdlc2RhdGVu +LiRkYXR1bUlzbyA9ICR0ZE1hcmtlZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAkUGxhbnVuZy50YWdlc2RhdGVuIHwgQWRkLU1lbWJlciAtTWVt +YmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgJGRhdHVtSXNvIC1WYWx1ZSAkdGRNYXJrZWQNCiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICROVGFnZXNkYXRlbk92ZXJy +aWRlcysrDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0N +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICB9 +DQoNCiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlLVBsYW51bmdNaXRJbnRlZ3JpdGFldCAk +UGxhbnVuZyAgICMgQnVsay1PcDogYWxsZSBITUFDcyBuZXUNCg0KICAgICAgICAgICAgICAgICAg +ICAgICAgcmV0dXJuIEB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwID0gJ29rJw0K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2t1cCA9ICRCYWNrdXBOYW1lDQogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgcGVyc29uZW5OZXUgPSAkTlBlcnNvbmVuTmV1DQogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgcGVyc29uZW5Ba3R1YWxpc2llcnQgPSAkTlBlcnNvbmVuQWt0 +dWFsaXNpZXJ0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVyc29uZW5EZWFrdGl2aWVy +dCA9ICROUGVyc29uZW5EZWFrdA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVpbnRyYWVn +ZSA9ICRORWludHJhZWdlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgcGZsaWNodCA9ICRO +UGZsaWNodA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtvbW1lbnRhcmUgPSAkTktvbW1l +bnRhcmUNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmJla2FubnRlQ29kZXMgPSAkTk9y +cGhhbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0aW9uU2xvdHMgPSAkTlJvdGF0 +aW9uU2xvdHMNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWdlc2RhdGVuT3ZlcnJpZGVz +ID0gJE5UYWdlc2RhdGVuT3ZlcnJpZGVzDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRt +aW5NdXRhdGVkID0gJEFkbWluTXV0YXRlZA0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAg +ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAgICAgICAg +ICAgICAgICAgIFNlbmQtRXJyb3IgJFJlcyAiVWViZXJuYWhtZS1GZWhsZXI6ICRfIiA1MDA7IGNv +bnRpbnVlDQogICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgaWYgKCRMb2NrUmVz +dWx0LnR5cCAtZXEgJ2Vycm9yJykgeyBTZW5kLUVycm9yICRSZXMgJExvY2tSZXN1bHQubXNnICRM +b2NrUmVzdWx0LmNvZGU7IGNvbnRpbnVlIH0NCg0KICAgICAgICAgICAgICAgICMgU29uZGVydGVy +bWluZSBzZXBhcmF0IGluIGFkbWluLmpzb24gc2NocmVpYmVuIChrZWluIEhNQUMpLg0KICAgICAg +ICAgICAgICAgICMgRXJzdCBhbGxlIHZvcmhhbmRlbmVuICdzdF9leGNlbF8nLUVpbnRyYWVnZSBs +b2VzY2hlbiwgZGFubiBuZXVlDQogICAgICAgICAgICAgICAgIyBhbmxlZ2VuIC0gc29kYXNzIFJl +LUltcG9ydCBpZGVtcG90ZW50IGlzdCB1bmQgbmljaHQgZG9wcGVsdC4NCiAgICAgICAgICAgICAg +ICAjIFVzZXItVm9yZ2FiZSAoQXVkaXQtSXRlci1ELCBzeW5jIG1pdCBzZXJ2ZXIucHk6MzgyNyk6 +IEV4Y2VsLVplaWxlDQogICAgICAgICAgICAgICAgIyAoMjUtMjkpIHdpcmQgTklDSFQgbWVociBh +bHMgS2F0ZWdvcmllIGF1c2dld2VydGV0IC0gYWxsZSBUZXJtaW5lDQogICAgICAgICAgICAgICAg +IyBzaW5kICdoaW53ZWlzJyBtaXQgSWNvbiAnaW5mbycsIFVzZXIga2xhc3NpZml6aWVydCBzcGFl +dGVyIG1hbnVlbGwNCiAgICAgICAgICAgICAgICAjIGltIFRlcm1pbmUtVGFiLiBSZS1JbXBvcnQg +YmxlaWJ0IGRhbWl0IHN0cnVrdHVyLXN0YWJpbC4NCiAgICAgICAgICAgICAgICAkTlRlcm1pbmUg +PSAwDQogICAgICAgICAgICAgICAgaWYgKCRPcHRTb25kZXJ0ZXJtaW5lKSB7DQogICAgICAgICAg +ICAgICAgICAgICRBZG1pbiA9IGlmICgkbnVsbCAtbmUgJExvY2tSZXN1bHQuYWRtaW5NdXRhdGVk +KSB7ICRMb2NrUmVzdWx0LmFkbWluTXV0YXRlZCB9IGVsc2UgeyBSZWFkLUpzb25GaWxlICdhZG1p +bi5qc29uJyB9DQogICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtbmUgJEFkbWluKSB7DQog +ICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkQWRtaW4uUFNPYmplY3QuUHJvcGVydGll +c1snc29uZGVydGVybWluZSddKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJEFkbWlu +IHwgQWRkLU1lbWJlciAtTWVtYmVyVHlwZSBOb3RlUHJvcGVydHkgLU5hbWUgJ3NvbmRlcnRlcm1p +bmUnIC1WYWx1ZSBAKCkNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg +ICAgICAgICAgICMgQWx0ZSBFeGNlbC1JbXBvcnRlIGZpbHRlcm4NCiAgICAgICAgICAgICAgICAg +ICAgICAgICRTdExpc3RlID0gTmV3LU9iamVjdCBTeXN0ZW0uQ29sbGVjdGlvbnMuQXJyYXlMaXN0 +DQogICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkcyBpbiBAKCRBZG1pbi5zb25kZXJ0 +ZXJtaW5lKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzaWQgPSBpZiAoJHMuUFNP +YmplY3QuUHJvcGVydGllc1snaWQnXSkgeyBbc3RyaW5nXSRzLmlkIH0gZWxzZSB7ICcnIH0NCiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkc2lkLlN0YXJ0c1dpdGgoJ3N0X2V4 +Y2VsXycpKSB7IFt2b2lkXSRTdExpc3RlLkFkZCgkcykgfQ0KICAgICAgICAgICAgICAgICAgICAg +ICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRudWxsIC1uZSAkRXhjZWxUZXJtaW5l +KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJERhdHVtUHJvcCBpbiAk +RXhjZWxUZXJtaW5lLlBTT2JqZWN0LlByb3BlcnRpZXMpIHsNCiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgJERhdHVtID0gJERhdHVtUHJvcC5OYW1lDQogICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgIGZvcmVhY2ggKCR0IGluIEAoJERhdHVtUHJvcC5WYWx1ZSkpIHsNCiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpc3RTa2lwID0gJGZhbHNlDQogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJHQuUFNPYmplY3QuUHJvcGVydGllc1sn +c2tpcCddKSB7ICRpc3RTa2lwID0gW2Jvb2xdJHQuc2tpcCB9DQogICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICBpZiAoJGlzdFNraXApIHsgY29udGludWUgfQ0KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgJHRpdGVsID0gaWYgKCR0LlBTT2JqZWN0LlByb3BlcnRp +ZXNbJ3RpdGVsJ10pIHsgKFtzdHJpbmddJHQudGl0ZWwpLlRyaW0oKSB9IGVsc2UgeyAnJyB9DQog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGV4dCA9IGlmICgkdC5QU09iamVj +dC5Qcm9wZXJ0aWVzWyd0ZXh0J10pIHsgKFtzdHJpbmddJHQudGV4dCkuVHJpbSgpIH0gZWxzZSB7 +ICcnIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgtbm90ICR0aXRl +bCAtYW5kIC1ub3QgJHRleHQpIHsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgaWYgKC1ub3QgJHRpdGVsKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgJGVyc3RlID0gKCR0ZXh0IC1zcGxpdCAiYG4iLCAyKVswXQ0KICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aXRlbCA9IGlmICgkZXJzdGUuTGVu +Z3RoIC1ndCA2MCkgeyAkZXJzdGUuU3Vic3RyaW5nKDAsIDYwKSB9IGVsc2UgeyAkZXJzdGUgfQ0K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgIyBSYW5kb20tSGV4LUlEIGFuYWxvZyB6dSBQeXRob24gc2VjcmV0 +cy50b2tlbl9oZXgoNikgLSAxMiBIZXgtWmVpY2hlbi4NCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICRSYW5kSGV4ID0gW2d1aWRdOjpOZXdHdWlkKCkuVG9TdHJpbmcoJ04nKS5T +dWJzdHJpbmcoMCwgMTIpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTmV1 +ID0gW1BTQ3VzdG9tT2JqZWN0XUB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgaWQgPSAnc3RfZXhjZWxfJyArICRSYW5kSGV4DQogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgZGF0dW0gPSAkRGF0dW0NCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICB0aXRlbCA9ICR0aXRlbA0KICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgIHRleHQgPSAkdGV4dA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgIGljb24gPSAnaW5mbycgICAgICAgICMgZ2VuZXJpc2NoZXMgSGlud2Vpcy1J +Y29uLCBLRUlOIEVtb2ppDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +dHlwID0gJ2hpbndlaXMnDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +IyBLRUlOICdrYXRlZ29yaWUnLUZlbGQgLSBFeGNlbC1aZWlsZW4tTWFwcGluZyB3aXJkIGlnbm9y +aWVydA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgW3ZvaWRdJFN0TGlzdGUuQWRkKCROZXUpDQogICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkTlRlcm1pbmUrKw0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAg +ICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgJEFkbWluLnNvbmRl +cnRlcm1pbmUgPSBAKCRTdExpc3RlKQ0KICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtSnNv +bkZpbGUgJ2FkbWluLmpzb24nICRBZG1pbg0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAg +ICAgICAgICAgfSBlbHNlaWYgKCRudWxsIC1uZSAkTG9ja1Jlc3VsdC5hZG1pbk11dGF0ZWQgLWFu +ZCAkTG9ja1Jlc3VsdC5yb3RhdGlvblNsb3RzIC1ndCAwKSB7DQogICAgICAgICAgICAgICAgICAg +ICMgVGFnZXNkYXRlbiBoYXQgQWRtaW4gbXV0aWVydCwgYWJlciBrZWluIFNvbmRlcnRlcm1pbmUt +QmxvY2sgaGF0IGdlc2NocmllYmVuLg0KICAgICAgICAgICAgICAgICAgICBXcml0ZS1Kc29uRmls +ZSAnYWRtaW4uanNvbicgJExvY2tSZXN1bHQuYWRtaW5NdXRhdGVkDQogICAgICAgICAgICAgICAg +fQ0KDQogICAgICAgICAgICAgICAgIyBBdXRvLVJvbGxlbi1TeW5jIG5hY2ggRXhjZWwtSW1wb3J0 +IChuZXVlIFBlcnNvbmVuIG1pdCBER0wvMS5FQi8xLkVCIFYuIC0+IExpc3RlbikNCiAgICAgICAg +ICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgICAgICAkUGxhbnVuZ0Z1ZXJTeW5jID0gUmVh +ZC1Kc29uRmlsZSAncGxhbnVuZy5qc29uJw0KICAgICAgICAgICAgICAgICAgICAkQWRtaW5GdWVy +U3luYyA9IFJlYWQtSnNvbkZpbGUgJ2FkbWluLmpzb24nDQogICAgICAgICAgICAgICAgICAgIGlm +IChTeW5jLVJvbGxlbkF1c1BlcnNvbmVuICRQbGFudW5nRnVlclN5bmMgJEFkbWluRnVlclN5bmMp +IHsNCiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlLUpzb25GaWxlICdhZG1pbi5qc29uJyAk +QWRtaW5GdWVyU3luYw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBj +YXRjaCB7IFdyaXRlLVdhcm5pbmcgIlJvbGxlbi1TeW5jIG5hY2ggRXhjZWwtSW1wb3J0IGZlaGxn +ZXNjaGxhZ2VuOiAkXyIgfQ0KDQogICAgICAgICAgICAgICAgV3JpdGUtTG9nRWludHJhZyAnZXhj +ZWwuaW1wb3J0aWVydCcgQHsNCiAgICAgICAgICAgICAgICAgICAgYmFja3VwID0gJExvY2tSZXN1 +bHQuYmFja3VwDQogICAgICAgICAgICAgICAgICAgIHBlcnNvbmVuTmV1ID0gJExvY2tSZXN1bHQu +cGVyc29uZW5OZXUNCiAgICAgICAgICAgICAgICAgICAgcGVyc29uZW5Ba3R1YWxpc2llcnQgPSAk +TG9ja1Jlc3VsdC5wZXJzb25lbkFrdHVhbGlzaWVydA0KICAgICAgICAgICAgICAgICAgICBwZXJz +b25lbkRlYWt0aXZpZXJ0ID0gJExvY2tSZXN1bHQucGVyc29uZW5EZWFrdGl2aWVydA0KICAgICAg +ICAgICAgICAgICAgICBlaW50cmFlZ2UgPSAkTG9ja1Jlc3VsdC5laW50cmFlZ2UNCiAgICAgICAg +ICAgICAgICAgICAgcGZsaWNodCA9ICRMb2NrUmVzdWx0LnBmbGljaHQNCiAgICAgICAgICAgICAg +ICAgICAga29tbWVudGFyZSA9ICRMb2NrUmVzdWx0LmtvbW1lbnRhcmUNCiAgICAgICAgICAgICAg +ICAgICAgdW5iZWthbm50ZUNvZGVzID0gJExvY2tSZXN1bHQudW5iZWthbm50ZUNvZGVzDQogICAg +ICAgICAgICAgICAgICAgIHNvbmRlcnRlcm1pbmUgPSAkTlRlcm1pbmUNCiAgICAgICAgICAgICAg +ICAgICAgcm90YXRpb25TbG90cyA9ICRMb2NrUmVzdWx0LnJvdGF0aW9uU2xvdHMNCiAgICAgICAg +ICAgICAgICAgICAgdGFnZXNkYXRlbk92ZXJyaWRlcyA9ICRMb2NrUmVzdWx0LnRhZ2VzZGF0ZW5P +dmVycmlkZXMNCiAgICAgICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICAgICBTZW5kLUpzb24g +JFJlcyBAew0KICAgICAgICAgICAgICAgICAgICBzdGF0dXMgPSAnb2snDQogICAgICAgICAgICAg +ICAgICAgIGJhY2t1cCA9ICRMb2NrUmVzdWx0LmJhY2t1cA0KICAgICAgICAgICAgICAgICAgICBh +bnphaGwgPSBAew0KICAgICAgICAgICAgICAgICAgICAgICAgcGVyc29uZW5OZXUgPSAkTG9ja1Jl +c3VsdC5wZXJzb25lbk5ldQ0KICAgICAgICAgICAgICAgICAgICAgICAgcGVyc29uZW5Ba3R1YWxp +c2llcnQgPSAkTG9ja1Jlc3VsdC5wZXJzb25lbkFrdHVhbGlzaWVydA0KICAgICAgICAgICAgICAg +ICAgICAgICAgcGVyc29uZW5EZWFrdGl2aWVydCA9ICRMb2NrUmVzdWx0LnBlcnNvbmVuRGVha3Rp +dmllcnQNCiAgICAgICAgICAgICAgICAgICAgICAgIGVpbnRyYWVnZSA9ICRMb2NrUmVzdWx0LmVp +bnRyYWVnZQ0KICAgICAgICAgICAgICAgICAgICAgICAgcGZsaWNodCA9ICRMb2NrUmVzdWx0LnBm +bGljaHQNCiAgICAgICAgICAgICAgICAgICAgICAgIGtvbW1lbnRhcmUgPSAkTG9ja1Jlc3VsdC5r +b21tZW50YXJlDQogICAgICAgICAgICAgICAgICAgICAgICB1bmJla2FubnRlQ29kZXMgPSAkTG9j +a1Jlc3VsdC51bmJla2FubnRlQ29kZXMNCiAgICAgICAgICAgICAgICAgICAgICAgIHNvbmRlcnRl +cm1pbmUgPSAkTlRlcm1pbmUNCiAgICAgICAgICAgICAgICAgICAgICAgIHJvdGF0aW9uU2xvdHMg +PSAkTG9ja1Jlc3VsdC5yb3RhdGlvblNsb3RzDQogICAgICAgICAgICAgICAgICAgICAgICB0YWdl +c2RhdGVuT3ZlcnJpZGVzID0gJExvY2tSZXN1bHQudGFnZXNkYXRlbk92ZXJyaWRlcw0KICAgICAg +ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIERlYnVn +LUxvZyAnQVBJJyAiUE9TVCAvYXBpL2ltcG9ydC9leGNlbC91ZWJlcm5laG1lbiAtPiAkKCRMb2Nr +UmVzdWx0LmVpbnRyYWVnZSkgRWludHJhZWdlLCAkKCRMb2NrUmVzdWx0LmtvbW1lbnRhcmUpIEtv +bW1lbnRhcmUsICROVGVybWluZSBUZXJtaW5lLCBCYWNrdXA6ICQoJExvY2tSZXN1bHQuYmFja3Vw +KSINCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAg +ICAjID09PT09PT09PT09PT09PT09PT09PSBMT0dCVUNIID09PT09PT09PT09PT09PT09PT09PQ0K +ICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9sb2didWNoJyAtYW5kICRNZXRob2QgLWVx +ICdHRVQnKSB7DQogICAgICAgICAgICAgICAgIyBBZG1pbi1HdWFyZDogTG9nYnVjaCBlbnRoYWVs +dCBwZXJzb25lbmJlem9nZW5lIERhdGVuDQogICAgICAgICAgICAgICAgIyAoU2NoaWNodGFlbmRl +cnVuZ2VuIHBybyBVc2VyIG1pdCBhbHRlbS9uZXVlbSBXZXJ0KS4gSW0NCiAgICAgICAgICAgICAg +ICAjIEZyb250ZW5kIG51ciBmdWVyIFN1cGVyVXNlciBvZGVyIEFkbWluIHNpY2h0YmFyDQogICAg +ICAgICAgICAgICAgIyAoZGFyZkxvZ2J1Y2hUYWIoKSBpbiBqcy9jb3JlL3Blcm1pc3Npb25zLmpz +OjI1MykuIE1pcnJvcg0KICAgICAgICAgICAgICAgICMgenUgc2VydmVyLnB5OjIxMzQtMjEzOS4N +CiAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1Jc3RBZG1pbikpIHsgU2VuZC1FcnJvciAk +UmVzICdLZWluZSBCZXJlY2h0aWd1bmcnIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAg +ICRMb2dQYXRoID0gSm9pbi1QYXRoICREYXRhRGlyICdsb2didWNoLmpzb24nDQogICAgICAgICAg +ICAgICAgJEVpbnRyYWVnZSA9IEAoKQ0KICAgICAgICAgICAgICAgIGlmIChUZXN0LVBhdGggJExv +Z1BhdGgpIHsNCiAgICAgICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAg +ICAgICRMb2dDb250ZW50ID0gW1N5c3RlbS5JTy5GaWxlXTo6UmVhZEFsbFRleHQoJExvZ1BhdGgs +IFtTeXN0ZW0uVGV4dC5FbmNvZGluZ106OlVURjgpLlRyaW0oKQ0KICAgICAgICAgICAgICAgICAg +ICAgICAgaWYgKCRMb2dDb250ZW50Lkxlbmd0aCAtZ3QgMSkgew0KICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICRQYXJzZWQgPSAkTG9nQ29udGVudCB8IENvbnZlcnRGcm9tLUpzb24NCiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLW5lICRQYXJzZWQpIHsgJEVpbnRyYWVn +ZSA9IEAoJFBhcnNlZCkgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAg +ICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlLVN0YXJ0dXBM +b2cgIkxvZ2J1Y2gtUmVhZC1GZWhsZXI6ICRfIC0tIGxpZWZlcmUgbGVlcmUgTGlzdGUiDQogICAg +ICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgIyBQ +UyA1LjEgdW53cmFwcGVkIEAoKSB1bmQgU2luZ2xlLUVsZW1lbnQtQXJyYXlzIGluIENvbnZlcnRU +by1Kc29uIC0tDQogICAgICAgICAgICAgICAgIyBkYWhlciBTb25kZXJwZmFkZS4gRnJvbnRlbmQg +ZXJ3YXJ0ZXQgaW1tZXIgZWluIEpTT04tQXJyYXkuDQogICAgICAgICAgICAgICAgaWYgKCRFaW50 +cmFlZ2UuQ291bnQgLWVxIDApIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1Kc29uUmF3ICRS +ZXMgJ1tdJw0KICAgICAgICAgICAgICAgIH0gZWxzZWlmICgkRWludHJhZWdlLkNvdW50IC1lcSAx +KSB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtSnNvblJhdyAkUmVzICgnWycgKyAoQ29udmVy +dFRvLUpzb24gLUlucHV0T2JqZWN0ICRFaW50cmFlZ2VbMF0gLURlcHRoIDI1IC1Db21wcmVzcykg +KyAnXScpDQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgU2Vu +ZC1Kc29uUmF3ICRSZXMgKENvbnZlcnRUby1Kc29uIC1JbnB1dE9iamVjdCAkRWludHJhZWdlIC1E +ZXB0aCAyNSAtQ29tcHJlc3MpDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGNv +bnRpbnVlDQogICAgICAgICAgICB9DQoNCiAgICAgICAgICAgICMgPT09PT09PT09PT09PT09PT09 +PT09IE1FRElFTjogTGlzdGUgPT09PT09PT09PT09PT09PT09PT09DQogICAgICAgICAgICBpZiAo +JFBhdGggLWVxICcvYXBpL21lZGllbicgLWFuZCAkTWV0aG9kIC1lcSAnR0VUJykgew0KICAgICAg +ICAgICAgICAgICMgQmVpbSBlcnN0ZW4gQXVmcnVmIFN5c3RlbS1NZWRpZW4gYXVzIC9pbWFnZXMv +IGVpbm1hbGlnIGltcG9ydGllcmVuLg0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAg +ICAgICAgICAgIEludm9rZS1XaXRoRmlsZUxvY2sgJ21lZGllbi5qc29uJyB7IEludm9rZS1NZWRp +ZW5TeXN0ZW1JbXBvcnRGYWxsc05vZXRpZyB8IE91dC1OdWxsIH0gfCBPdXQtTnVsbA0KICAgICAg +ICAgICAgICAgIH0gY2F0Y2ggew0KICAgICAgICAgICAgICAgICAgICBEZWJ1Zy1Mb2cgJ0FQSScg +InN5c3RlbS1pbXBvcnQgc2tpcHBlZDogJF8iDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAg +ICAgICAgICRNZXRhID0gUmVhZC1NZWRpZW5NZXRhDQogICAgICAgICAgICAgICAgJE1lZGllbkxp +c3RlID0gaWYgKCRNZXRhLm1lZGllbikgeyBAKCRNZXRhLm1lZGllbikgfSBlbHNlIHsgQCgpIH0N +CiAgICAgICAgICAgICAgICBTZW5kLUpzb24gJFJlcyBAeyBtZWRpZW4gPSAkTWVkaWVuTGlzdGU7 +IGthdGVnb3JpZW4gPSAoR2V0LU1lZGllbkthdGVnb3JpZUtleXMpIH0NCiAgICAgICAgICAgICAg +ICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjID09PT09PT09PT09PT09 +PT09PT09PSBNRURJRU46IERhdGVpIGF1c2xpZWZlcm4gPT09PT09PT09PT09PT09PT09PT09DQog +ICAgICAgICAgICBpZiAoJFBhdGguU3RhcnRzV2l0aCgnL2FwaS9tZWRpZW4vZGF0ZWkvJykgLWFu +ZCAkTWV0aG9kIC1lcSAnR0VUJykgew0KICAgICAgICAgICAgICAgICRNaWQgPSAkUGF0aC5TdWJz +dHJpbmcoJFBhdGguTGFzdEluZGV4T2YoJy8nKSArIDEpDQogICAgICAgICAgICAgICAgJE1ldGEg +PSBSZWFkLU1lZGllbk1ldGENCiAgICAgICAgICAgICAgICAkRWludHJhZyA9ICRudWxsDQogICAg +ICAgICAgICAgICAgaWYgKCRNZXRhLm1lZGllbikgew0KICAgICAgICAgICAgICAgICAgICBmb3Jl +YWNoICgkbSBpbiBAKCRNZXRhLm1lZGllbikpIHsgaWYgKCRtLmlkIC1lcSAkTWlkKSB7ICRFaW50 +cmFnID0gJG07IGJyZWFrIH0gfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBp +ZiAoJG51bGwgLWVxICRFaW50cmFnKSB7IFNlbmQtRXJyb3IgJFJlcyAnTmljaHQgZ2VmdW5kZW4n +IDQwNDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICREYXRlaSA9IEdldC1NZWRpZW5QZmFk +ICRFaW50cmFnDQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtUGF0aCAkRGF0ZWkpKSB7 +IFNlbmQtRXJyb3IgJFJlcyAnRGF0ZWkgbmljaHQgdm9yaGFuZGVuJyA0MDQ7IGNvbnRpbnVlIH0N +CiAgICAgICAgICAgICAgICBTZW5kLUZpbGUgJFJlcyAkRGF0ZWkNCiAgICAgICAgICAgICAgICBj +b250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjID09PT09PT09PT09PT09PT09 +PT09PSBNRURJRU46IFVwbG9hZCAoQmFzZTY0LUpTT04pID09PT09PT09PT09PT09PT09PT09PQ0K +ICAgICAgICAgICAgaWYgKCRQYXRoIC1lcSAnL2FwaS9tZWRpZW4nIC1hbmQgJE1ldGhvZCAtZXEg +J1BPU1QnKSB7DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtSXN0U3VwZXJVc2VyKSkg +eyBTZW5kLUVycm9yICRSZXMgJ051ciBTdXBlclVzZXIgZGFyZiBNZWRpZW4gaG9jaGxhZGVuJyA0 +MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkQm9keSA9IFJlYWQtQm9keSAkUmVxDQog +ICAgICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkQm9keSkgeyBTZW5kLUVycm9yICRSZXMgJ0Fu +ZnJhZ2UgenUgZ3Jvc3MnIDQxMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgIHRyeSB7ICRB +ID0gJEJvZHkgfCBDb252ZXJ0RnJvbS1Kc29uIH0gY2F0Y2ggeyBTZW5kLUVycm9yICRSZXMgJ1Vu +Z3VlbHRpZ2VzIEpTT04nIDQwMDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRLYXRlZ29y +aWUgPSAoW3N0cmluZ10kQS5rYXRlZ29yaWUpLlRvTG93ZXIoKS5UcmltKCkNCiAgICAgICAgICAg +ICAgICBpZiAoLW5vdCAoKEdldC1NZWRpZW5LYXRlZ29yaWVLZXlzKSAtY29udGFpbnMgJEthdGVn +b3JpZSkpIHsgU2VuZC1FcnJvciAkUmVzICdVbmd1ZWx0aWdlIEthdGVnb3JpZScgNDAwOyBjb250 +aW51ZSB9DQogICAgICAgICAgICAgICAgJE1pbWUgPSAoW3N0cmluZ10kQS5taW1lVHlwZSkuVG9M +b3dlcigpLlRyaW0oKQ0KICAgICAgICAgICAgICAgIGlmICgtbm90ICRzY3JpcHQ6TWVkaWVuRXJs +YXVidGVNaW1lcy5Db250YWluc0tleSgkTWltZSkpIHsgU2VuZC1FcnJvciAkUmVzICdEYXRlaXR5 +cCBuaWNodCBlcmxhdWJ0JyA0MDA7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkQmV6ZWlj +aG51bmcgPSAoW3N0cmluZ10kQS5iZXplaWNobnVuZykuVHJpbSgpDQogICAgICAgICAgICAgICAg +aWYgKFtzdHJpbmddOjpJc051bGxPcldoaXRlU3BhY2UoJEJlemVpY2hudW5nKSkgeyBTZW5kLUVy +cm9yICRSZXMgJ0JlemVpY2hudW5nIGZlaGx0JyA0MDA7IGNvbnRpbnVlIH0NCiAgICAgICAgICAg +ICAgICAkRGF0YUI2NCA9IGlmICgkQS5kYXRhKSB7IFtzdHJpbmddJEEuZGF0YSB9IGVsc2UgeyAn +JyB9DQogICAgICAgICAgICAgICAgaWYgKCREYXRhQjY0LlN0YXJ0c1dpdGgoJ2RhdGE6JykpIHsN +CiAgICAgICAgICAgICAgICAgICAgJGlkeCA9ICREYXRhQjY0LkluZGV4T2YoJywnKQ0KICAgICAg +ICAgICAgICAgICAgICBpZiAoJGlkeCAtZ2UgMCkgeyAkRGF0YUI2NCA9ICREYXRhQjY0LlN1YnN0 +cmluZygkaWR4ICsgMSkgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB0cnkg +eyAkUm9oQnl0ZXMgPSBbU3lzdGVtLkNvbnZlcnRdOjpGcm9tQmFzZTY0U3RyaW5nKCREYXRhQjY0 +KSB9IGNhdGNoIHsgU2VuZC1FcnJvciAkUmVzICdCYXNlNjQgdW5ndWVsdGlnJyA0MDA7IGNvbnRp +bnVlIH0NCiAgICAgICAgICAgICAgICBpZiAoJFJvaEJ5dGVzLkxlbmd0aCAtZ3QgJHNjcmlwdDpN +ZWRpZW5NYXhCeXRlcykgew0KICAgICAgICAgICAgICAgICAgICBTZW5kLUVycm9yICRSZXMgIkRh +dGVpIHp1IGdyb3NzIChtYXggJChbTWF0aF06OkZsb29yKCRzY3JpcHQ6TWVkaWVuTWF4Qnl0ZXMg +LyAxTUIpKSBNQikiIDQxMzsgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAg +ICAgICAgJEV4dCA9ICRzY3JpcHQ6TWVkaWVuRXJsYXVidGVNaW1lc1skTWltZV0NCiAgICAgICAg +ICAgICAgICAkTWlkID0gTmV3LU1lZGllbklkDQogICAgICAgICAgICAgICAgIyBSb3V0aW5nOiBX +ZW5uIEltYWdlcy88a2F0Pi8gYWxzIERpc2stT3JkbmVyIGV4aXN0aWVydCAtPiBkb3J0IGhpbnNj +aHJlaWJlbg0KICAgICAgICAgICAgICAgICMgbWl0IHNhbml0aXNpZXJ0ZW0gT3JpZ2luYWwtRGF0 +ZWluYW1lbiArIGBwZmFkYCBpbSBFaW50cmFnIHNldHplbi4NCiAgICAgICAgICAgICAgICAjIFNv +bnN0IEZhbGxiYWNrIGF1ZiBkYXRhL21lZGllbi88a2F0Pi88aWQ+LjxleHQ+Lg0KICAgICAgICAg +ICAgICAgICRJbWFnZXNEaXIgPSBHZXQtTWVkaWVuSW1hZ2VzT3JkbmVyICRLYXRlZ29yaWUNCiAg +ICAgICAgICAgICAgICBpZiAoJG51bGwgLW5lICRJbWFnZXNEaXIpIHsNCiAgICAgICAgICAgICAg +ICAgICAgJFVwbG9hZE5hbWUgPSBpZiAoJEEuZGF0ZWluYW1lKSB7IFtzdHJpbmddJEEuZGF0ZWlu +YW1lIH0gZWxzZSB7ICRCZXplaWNobnVuZyB9DQogICAgICAgICAgICAgICAgICAgICRCYXNlID0g +R2V0LU1lZGllbkJhc2VuYW1lQXVzVXBsb2FkICRVcGxvYWROYW1lDQogICAgICAgICAgICAgICAg +ICAgICRaaWVsID0gR2V0LU1lZGllbkZyZWllckRhdGVpbmFtZSAkSW1hZ2VzRGlyICRCYXNlICRF +eHQNCiAgICAgICAgICAgICAgICAgICAgW1N5c3RlbS5JTy5GaWxlXTo6V3JpdGVBbGxCeXRlcygk +WmllbCwgJFJvaEJ5dGVzKQ0KICAgICAgICAgICAgICAgICAgICAkWmllbE5hbWUgPSBbU3lzdGVt +LklPLlBhdGhdOjpHZXRGaWxlTmFtZSgkWmllbCkNCiAgICAgICAgICAgICAgICAgICAgJEVpbnRy +YWcgPSBbb3JkZXJlZF1Aew0KICAgICAgICAgICAgICAgICAgICAgICAgaWQgPSAkTWlkDQogICAg +ICAgICAgICAgICAgICAgICAgICBrYXRlZ29yaWUgPSAkS2F0ZWdvcmllDQogICAgICAgICAgICAg +ICAgICAgICAgICBiZXplaWNobnVuZyA9ICRCZXplaWNobnVuZw0KICAgICAgICAgICAgICAgICAg +ICAgICAgZGF0ZWluYW1lID0gJFppZWxOYW1lDQogICAgICAgICAgICAgICAgICAgICAgICBtaW1l +VHlwZSA9ICRNaW1lDQogICAgICAgICAgICAgICAgICAgICAgICBncm9lc3NlID0gJFJvaEJ5dGVz +Lkxlbmd0aA0KICAgICAgICAgICAgICAgICAgICAgICAgcGZhZCA9ICcvaW1hZ2VzLycgKyAkS2F0 +ZWdvcmllICsgJy8nICsgJFppZWxOYW1lDQogICAgICAgICAgICAgICAgICAgICAgICBob2NoZ2Vs +YWRlbkFtID0gKEdldC1EYXRlIC1Gb3JtYXQgJ3l5eXktTU0tZGQgSEg6bW06c3MnKQ0KICAgICAg +ICAgICAgICAgICAgICAgICAgaG9jaGdlbGFkZW5Wb24gPSAoR2V0LUFrdHVlbGxlckJlbnV0emVy +KQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAg +ICAgICAgICAgICAgICAgJEthdERpciA9IEpvaW4tUGF0aCAoR2V0LU1lZGllbkRpcikgJEthdGVn +b3JpZQ0KICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAoVGVzdC1QYXRoICRLYXREaXIpKSB7 +IE5ldy1JdGVtIC1JdGVtVHlwZSBEaXJlY3RvcnkgLVBhdGggJEthdERpciAtRm9yY2UgfCBPdXQt +TnVsbCB9DQogICAgICAgICAgICAgICAgICAgICRaaWVsID0gSm9pbi1QYXRoICRLYXREaXIgKCRN +aWQgKyAkRXh0KQ0KICAgICAgICAgICAgICAgICAgICBbU3lzdGVtLklPLkZpbGVdOjpXcml0ZUFs +bEJ5dGVzKCRaaWVsLCAkUm9oQnl0ZXMpDQogICAgICAgICAgICAgICAgICAgICRFaW50cmFnID0g +W29yZGVyZWRdQHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlkID0gJE1pZA0KICAgICAgICAg +ICAgICAgICAgICAgICAga2F0ZWdvcmllID0gJEthdGVnb3JpZQ0KICAgICAgICAgICAgICAgICAg +ICAgICAgYmV6ZWljaG51bmcgPSAkQmV6ZWljaG51bmcNCiAgICAgICAgICAgICAgICAgICAgICAg +IGRhdGVpbmFtZSA9IGlmICgkQS5kYXRlaW5hbWUpIHsgKFtzdHJpbmddJEEuZGF0ZWluYW1lKS5U +cmltKCkuU3Vic3RyaW5nKDAsIFtNYXRoXTo6TWluKChbc3RyaW5nXSRBLmRhdGVpbmFtZSkuTGVu +Z3RoLCAyMDApKSB9IGVsc2UgeyAoJE1pZCArICRFeHQpIH0NCiAgICAgICAgICAgICAgICAgICAg +ICAgIG1pbWVUeXBlID0gJE1pbWUNCiAgICAgICAgICAgICAgICAgICAgICAgIGdyb2Vzc2UgPSAk +Um9oQnl0ZXMuTGVuZ3RoDQogICAgICAgICAgICAgICAgICAgICAgICBob2NoZ2VsYWRlbkFtID0g +KEdldC1EYXRlIC1Gb3JtYXQgJ3l5eXktTU0tZGQgSEg6bW06c3MnKQ0KICAgICAgICAgICAgICAg +ICAgICAgICAgaG9jaGdlbGFkZW5Wb24gPSAoR2V0LUFrdHVlbGxlckJlbnV0emVyKQ0KICAgICAg +ICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIHRyeSB7 +DQogICAgICAgICAgICAgICAgICAgIEludm9rZS1XaXRoRmlsZUxvY2sgJ21lZGllbi5qc29uJyB7 +DQogICAgICAgICAgICAgICAgICAgICAgICAkTWV0YSA9IFJlYWQtTWVkaWVuTWV0YQ0KICAgICAg +ICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJE1ldGEubWVkaWVuKSB7ICRNZXRhID0gW1BTQ3Vz +dG9tT2JqZWN0XUB7IG1lZGllbiA9IEAoKSB9IH0NCiAgICAgICAgICAgICAgICAgICAgICAgICRM +aXN0ZSA9IEAoJE1ldGEubWVkaWVuKSArIFtQU0N1c3RvbU9iamVjdF0kRWludHJhZw0KICAgICAg +ICAgICAgICAgICAgICAgICAgJE1ldGEgPSBbUFNDdXN0b21PYmplY3RdQHsgbWVkaWVuID0gJExp +c3RlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIFdyaXRlLU1lZGllbk1ldGEgJE1ldGENCiAg +ICAgICAgICAgICAgICAgICAgfSB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgfSBjYXRjaCB7 +DQogICAgICAgICAgICAgICAgICAgIGlmIChUZXN0LVBhdGggJFppZWwpIHsgUmVtb3ZlLUl0ZW0g +JFppZWwgLUVycm9yQWN0aW9uIFNpbGVudGx5Q29udGludWUgfQ0KICAgICAgICAgICAgICAgICAg +ICBTZW5kLUVycm9yICRSZXMgIiRfIiA1MDM7IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgfQ0K +ICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ21lZGllbi5ob2NoZ2VsYWRlbicgQHsg +aWQgPSAkTWlkOyBrYXRlZ29yaWUgPSAkS2F0ZWdvcmllOyBiZXplaWNobnVuZyA9ICRCZXplaWNo +bnVuZzsgZ3JvZXNzZSA9ICRSb2hCeXRlcy5MZW5ndGg7IG1pbWVUeXBlID0gJE1pbWUgfQ0KICAg +ICAgICAgICAgICAgICRVc2VybmFtZSA9ICRlbnY6VVNFUk5BTUUNCiAgICAgICAgICAgICAgICAk +Um9sbGUgPSBHZXQtVXNlclJvbGxlDQogICAgICAgICAgICAgICAgQWRkLUNoYW5nZUxvZ0VudHJ5 +ICdtZWRpZW4nICRudWxsICRudWxsICRudWxsICRVc2VybmFtZSAkUm9sbGUgQHsgYWt0aW9uID0g +J2hvY2hnZWxhZGVuJzsgaWQgPSAkTWlkOyBrYXRlZ29yaWUgPSAkS2F0ZWdvcmllOyBiZXplaWNo +bnVuZyA9ICRCZXplaWNobnVuZyB9DQogICAgICAgICAgICAgICAgU2VuZC1Kc29uICRSZXMgQHsg +c3RhdHVzID0gJ2dlc3BlaWNoZXJ0JzsgbWVkaXVtID0gJEVpbnRyYWcgfSAyMDENCiAgICAgICAg +ICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAjID09PT09PT09 +PT09PT09PT09PT09PSBNRURJRU46IFVtYmVuZW5uZW4gLyBWZXJzY2hpZWJlbiAvIERhdGVpIGVy +c2V0emVuID09PT09PT09PT09PT09PT09PT09PQ0KICAgICAgICAgICAgaWYgKCRQYXRoLlN0YXJ0 +c1dpdGgoJy9hcGkvbWVkaWVuLycpIC1hbmQgJE1ldGhvZCAtZXEgJ1BBVENIJyAtYW5kIC1ub3Qg +JFBhdGguU3RhcnRzV2l0aCgnL2FwaS9tZWRpZW4vZGF0ZWkvJykpIHsNCiAgICAgICAgICAgICAg +ICBpZiAoLW5vdCAoVGVzdC1Jc3RTdXBlclVzZXIpKSB7IFNlbmQtRXJyb3IgJFJlcyAnTnVyIFN1 +cGVyVXNlciBkYXJmIE1lZGllbiBhZW5kZXJuJyA0MDM7IGNvbnRpbnVlIH0NCiAgICAgICAgICAg +ICAgICAkTWlkID0gJFBhdGguU3Vic3RyaW5nKCRQYXRoLkxhc3RJbmRleE9mKCcvJykgKyAxKQ0K +ICAgICAgICAgICAgICAgICRCb2R5ID0gUmVhZC1Cb2R5ICRSZXENCiAgICAgICAgICAgICAgICBp +ZiAoJG51bGwgLWVxICRCb2R5KSB7IFNlbmQtRXJyb3IgJFJlcyAnQW5mcmFnZSB6dSBncm9zcycg +NDEzOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgdHJ5IHsgJEEgPSAkQm9keSB8IENvbnZl +cnRGcm9tLUpzb24gfSBjYXRjaCB7IFNlbmQtRXJyb3IgJFJlcyAnVW5ndWVsdGlnZXMgSlNPTicg +NDAwOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgJE5ldWVCZXogPSBpZiAoJEEuUFNPYmpl +Y3QuUHJvcGVydGllc1snYmV6ZWljaG51bmcnXSkgeyBbc3RyaW5nXSRBLmJlemVpY2hudW5nIH0g +ZWxzZSB7ICRudWxsIH0NCiAgICAgICAgICAgICAgICAkTmV1ZUthdCA9IGlmICgkQS5QU09iamVj +dC5Qcm9wZXJ0aWVzWydrYXRlZ29yaWUnXSkgeyAoW3N0cmluZ10kQS5rYXRlZ29yaWUpLlRvTG93 +ZXIoKS5UcmltKCkgfSBlbHNlIHsgJG51bGwgfQ0KICAgICAgICAgICAgICAgIGlmICgkbnVsbCAt +bmUgJE5ldWVLYXQgLWFuZCAtbm90ICgoR2V0LU1lZGllbkthdGVnb3JpZUtleXMpIC1jb250YWlu +cyAkTmV1ZUthdCkpIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzICdVbmd1 +ZWx0aWdlIEthdGVnb3JpZScgNDAwOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAg +ICAgICAgICAgICAjIE9wdGlvbmFsOiBEYXRlaS1JbmhhbHQgYXVzdGF1c2NoZW4gKCJEYXRlaSBl +cnNldHplbiItQWt0aW9uKQ0KICAgICAgICAgICAgICAgICROZXVlRGF0YUI2NCA9IGlmICgkQS5Q +U09iamVjdC5Qcm9wZXJ0aWVzWydkYXRhJ10pIHsgW3N0cmluZ10kQS5kYXRhIH0gZWxzZSB7ICRu +dWxsIH0NCiAgICAgICAgICAgICAgICAkTmV1ZU1pbWUgICAgPSBpZiAoJEEuUFNPYmplY3QuUHJv +cGVydGllc1snbWltZVR5cGUnXSkgeyAoW3N0cmluZ10kQS5taW1lVHlwZSkuVG9Mb3dlcigpLlRy +aW0oKSB9IGVsc2UgeyAkbnVsbCB9DQogICAgICAgICAgICAgICAgJE5ldWVyRGF0ZWluYW1lID0g +aWYgKCRBLlBTT2JqZWN0LlByb3BlcnRpZXNbJ2RhdGVpbmFtZSddKSB7IChbc3RyaW5nXSRBLmRh +dGVpbmFtZSkuVHJpbSgpIH0gZWxzZSB7ICRudWxsIH0NCiAgICAgICAgICAgICAgICAkTmV1ZUJ5 +dGVzID0gJG51bGwNCiAgICAgICAgICAgICAgICBpZiAoLW5vdCBbc3RyaW5nXTo6SXNOdWxsT3JX +aGl0ZVNwYWNlKCROZXVlRGF0YUI2NCkpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3Qg +JE5ldWVNaW1lKSB7IFNlbmQtRXJyb3IgJFJlcyAnbWltZVR5cGUgZmVobHQgenVtIERhdGVpLUVy +c2V0emVuJyA0MDA7IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJHNj +cmlwdDpNZWRpZW5FcmxhdWJ0ZU1pbWVzLkNvbnRhaW5zS2V5KCROZXVlTWltZSkpIHsgU2VuZC1F +cnJvciAkUmVzICdEYXRlaXR5cCBuaWNodCBlcmxhdWJ0JyA0MDA7IGNvbnRpbnVlIH0NCiAgICAg +ICAgICAgICAgICAgICAgaWYgKCROZXVlRGF0YUI2NC5TdGFydHNXaXRoKCdkYXRhOicpKSB7DQog +ICAgICAgICAgICAgICAgICAgICAgICAkaWR4ID0gJE5ldWVEYXRhQjY0LkluZGV4T2YoJywnKQ0K +ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRpZHggLWdlIDApIHsgJE5ldWVEYXRhQjY0ID0g +JE5ldWVEYXRhQjY0LlN1YnN0cmluZygkaWR4ICsgMSkgfQ0KICAgICAgICAgICAgICAgICAgICB9 +DQogICAgICAgICAgICAgICAgICAgIHRyeSB7ICROZXVlQnl0ZXMgPSBbU3lzdGVtLkNvbnZlcnRd +OjpGcm9tQmFzZTY0U3RyaW5nKCROZXVlRGF0YUI2NCkgfSBjYXRjaCB7IFNlbmQtRXJyb3IgJFJl +cyAnQmFzZTY0IHVuZ3VlbHRpZycgNDAwOyBjb250aW51ZSB9DQogICAgICAgICAgICAgICAgICAg +IGlmICgkTmV1ZUJ5dGVzLkxlbmd0aCAtZ3QgJHNjcmlwdDpNZWRpZW5NYXhCeXRlcykgew0KICAg +ICAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzICJEYXRlaSB6dSBncm9zcyAobWF4 +ICQoW01hdGhdOjpGbG9vcigkc2NyaXB0Ok1lZGllbk1heEJ5dGVzIC8gMU1CKSkgTUIpIiA0MTM7 +IGNvbnRpbnVlDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAg +ICAgICAgICAgICAgJHNjcmlwdDpVcGRhdGVkRWludHJhZyA9ICRudWxsOyAkc2NyaXB0OkZvdW5k +ID0gJGZhbHNlOyAkc2NyaXB0OkFlbmRlcnVuZ2VuID0gQHt9DQogICAgICAgICAgICAgICAgdHJ5 +IHsNCiAgICAgICAgICAgICAgICAgICAgSW52b2tlLVdpdGhGaWxlTG9jayAnbWVkaWVuLmpzb24n +IHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRNZXRhID0gUmVhZC1NZWRpZW5NZXRhDQogICAg +ICAgICAgICAgICAgICAgICAgICAkTmV1ZUxpc3RlID0gQCgpDQogICAgICAgICAgICAgICAgICAg +ICAgICBmb3JlYWNoICgkbSBpbiBAKCRNZXRhLm1lZGllbikpIHsNCiAgICAgICAgICAgICAgICAg +ICAgICAgICAgICBpZiAoJG0uaWQgLWVxICRNaWQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgJHNjcmlwdDpGb3VuZCA9ICR0cnVlDQogICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICRBbHRLYXQgPSAkbS5rYXRlZ29yaWUNCiAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgaWYgKCRudWxsIC1uZSAkTmV1ZUJleiAtYW5kICROZXVlQmV6LlRyaW0oKSAtbmUgJG0u +YmV6ZWljaG51bmcpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRiZXog +PSAkTmV1ZUJlei5UcmltKCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm +ICgkYmV6Lkxlbmd0aCAtZ3QgMjAwKSB7ICRiZXogPSAkYmV6LlN1YnN0cmluZygwLCAyMDApIH0N +CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtLmJlemVpY2hudW5nID0gJGJl +eg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjcmlwdDpBZW5kZXJ1bmdl +blsnYmV6ZWljaG51bmcnXSA9ICRiZXoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +fQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG51bGwgLW5lICROZXVlS2F0 +IC1hbmQgJE5ldWVLYXQgLW5lICRBbHRLYXQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICRJc3RTeXN0ZW0gPSAkbS5QU09iamVjdC5Qcm9wZXJ0aWVzWydwZmFkJ10gLWFu +ZCAtbm90IFtzdHJpbmddOjpJc051bGxPcldoaXRlU3BhY2UoW3N0cmluZ10kbS5wZmFkKQ0KICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRJc3RTeXN0ZW0pIHsNCiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIFN5c3RlbS1NZWRpdW06IG51ciBN +ZXRhLUthdGVnb3JpZSB3ZWNoc2VsbiwgRGF0ZWkgYmxlaWJ0IGltIC9pbWFnZXMvLU9yZG5lcg0K +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtLmthdGVnb3JpZSA9ICRO +ZXVlS2F0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRBbHQgPSBHZXQtTWVkaWVuUGZh +ZCAkbQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtLmthdGVnb3Jp +ZSA9ICROZXVlS2F0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJE5l +dSA9IEdldC1NZWRpZW5QZmFkICRtDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgJE5ldURpciA9IFNwbGl0LVBhdGggLVBhcmVudCAkTmV1DQogICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGgg +JE5ldURpcikpIHsgTmV3LUl0ZW0gLUl0ZW1UeXBlIERpcmVjdG9yeSAtUGF0aCAkTmV1RGlyIC1G +b3JjZSB8IE91dC1OdWxsIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICBpZiAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkQWx0KSB7IE1vdmUtSXRlbSAtTGl0ZXJhbFBh +dGggJEFsdCAtRGVzdGluYXRpb24gJE5ldSAtRm9yY2UgfQ0KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNj +cmlwdDpBZW5kZXJ1bmdlblsna2F0ZWdvcmllJ10gPSAiJEFsdEthdCAtPiAkTmV1ZUthdCINCiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAjIERhdGVpLVJlcGxhY2UNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +aWYgKCRudWxsIC1uZSAkTmV1ZUJ5dGVzKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAkTmV1ZXJFeHQgPSAkc2NyaXB0Ok1lZGllbkVybGF1YnRlTWltZXNbJE5ldWVNaW1l +XQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEthdCA9IGlmICgkbS5rYXRl +Z29yaWUpIHsgW3N0cmluZ10kbS5rYXRlZ29yaWUgfSBlbHNlIHsgJ3NvbnN0aWdlcycgfQ0KICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEltYWdlc0RpcjIgPSBHZXQtTWVkaWVu +SW1hZ2VzT3JkbmVyICRLYXQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRI +YXRQZmFkID0gJG0uUFNPYmplY3QuUHJvcGVydGllc1sncGZhZCddIC1hbmQgLW5vdCBbc3RyaW5n +XTo6SXNOdWxsT3JXaGl0ZVNwYWNlKFtzdHJpbmddJG0ucGZhZCkNCiAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICRaaWVsSW5JbWFnZXMgPSAkSGF0UGZhZCAtb3IgKCRudWxsIC1u +ZSAkSW1hZ2VzRGlyMikNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgk +WmllbEluSW1hZ2VzIC1hbmQgJG51bGwgLW5lICRJbWFnZXNEaXIyKSB7DQogICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBbHRlIERhdGVpIGJlc2VpdGlnZW4NCiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJEhhdFBmYWQpIHsNCiAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJEFsdEQgPSBKb2luLVBhdGgg +JHNjcmlwdDpSb290ICgoW3N0cmluZ10kbS5wZmFkKS5UcmltU3RhcnQoJy8nKSkNCiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQWx0RCA9IEdldC1NZWRpZW5QZmFkICRtDQog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgIGlmIChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICRBbHREIC1QYXRo +VHlwZSBMZWFmKSB7IFJlbW92ZS1JdGVtIC1MaXRlcmFsUGF0aCAkQWx0RCAtRm9yY2UgLUVycm9y +QWN0aW9uIFNpbGVudGx5Q29udGludWUgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgIH0gY2F0Y2gge30NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAjIE5ldWVuIFppZWxuYW1lbiB3w6RobGVuDQogICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgaWYgKCRIYXRQZmFkKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICRTdGVtID0gW1N5c3RlbS5JTy5QYXRoXTo6R2V0RmlsZU5hbWVX +aXRob3V0RXh0ZW5zaW9uKFtzdHJpbmddJG0ucGZhZCkNCiAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgJFppZWxEID0gSm9pbi1QYXRoICRJbWFnZXNEaXIyICgkU3Rl +bSArICROZXVlckV4dCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 +IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkVXBs +b2FkTmFtZTIgPSBpZiAoJE5ldWVyRGF0ZWluYW1lKSB7ICROZXVlckRhdGVpbmFtZSB9IGVsc2Ug +eyBbc3RyaW5nXSRtLmJlemVpY2hudW5nIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgJEJhc2UyID0gR2V0LU1lZGllbkJhc2VuYW1lQXVzVXBsb2FkICRVcGxv +YWROYW1lMg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkWmll +bEQgPSBHZXQtTWVkaWVuRnJlaWVyRGF0ZWluYW1lICRJbWFnZXNEaXIyICRCYXNlMiAkTmV1ZXJF +eHQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW1N5c3RlbS5JTy5GaWxlXTo6V3JpdGVBbGxC +eXRlcygkWmllbEQsICROZXVlQnl0ZXMpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgJFppZWxOYW1lMiA9IFtTeXN0ZW0uSU8uUGF0aF06OkdldEZpbGVOYW1lKCRaaWVs +RCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG0uUFNPYmpl +Y3QuUHJvcGVydGllc1sncGZhZCddKSB7ICRtLnBmYWQgPSAnL2ltYWdlcy8nICsgJEthdCArICcv +JyArICRaaWVsTmFtZTIgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +IGVsc2UgeyAkbSB8IEFkZC1NZW1iZXIgLU1lbWJlclR5cGUgTm90ZVByb3BlcnR5IC1OYW1lICdw +ZmFkJyAtVmFsdWUgKCcvaW1hZ2VzLycgKyAkS2F0ICsgJy8nICsgJFppZWxOYW1lMikgfQ0KICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtLmRhdGVpbmFtZSA9IGlmICgk +TmV1ZXJEYXRlaW5hbWUpIHsgJE5ldWVyRGF0ZWluYW1lLlN1YnN0cmluZygwLCBbTWF0aF06Ok1p +bigkTmV1ZXJEYXRlaW5hbWUuTGVuZ3RoLCAyMDApKSB9IGVsc2UgeyAkWmllbE5hbWUyIH0NCiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbS5taW1lVHlwZSA9ICROZXVl +TWltZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtLmdyb2Vzc2Ug +PSAkTmV1ZUJ5dGVzLkxlbmd0aA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgIGlmICgkbS5QU09iamVjdC5Qcm9wZXJ0aWVzWydzeXN0ZW0nXSkgeyAkbS5QU09iamVjdC5Q +cm9wZXJ0aWVzLlJlbW92ZSgnc3lzdGVtJykgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICRtLmhvY2hnZWxhZGVuQW0gPSAoR2V0LURhdGUgLUZvcm1hdCAneXl5eS1N +TS1kZCBISDptbTpzcycpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +JG0uaG9jaGdlbGFkZW5Wb24gPSAoR2V0LUFrdHVlbGxlckJlbnV0emVyKQ0KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY3JpcHQ6QWVuZGVydW5nZW5bJ2RhdGVpJ10g +PSAiJE5ldWVNaW1lICQoJE5ldWVCeXRlcy5MZW5ndGgpIEIiDQogICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICMgZGF0YS9tZWRpZW4tUGZhZA0KICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgIGlmICgtbm90ICRIYXRQZmFkKSB7DQogICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICRBbHREID0gR2V0LU1lZGllblBmYWQgJG0NCiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChUZXN0LVBhdGggLUxpdGVyYWxQ +YXRoICRBbHREIC1QYXRoVHlwZSBMZWFmKSB7IFJlbW92ZS1JdGVtIC1MaXRlcmFsUGF0aCAkQWx0 +RCAtRm9yY2UgLUVycm9yQWN0aW9uIFNpbGVudGx5Q29udGludWUgfQ0KICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIHt9DQogICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgIGlmICgkbS5QU09iamVjdC5Qcm9wZXJ0aWVzWydwZmFkJ10pIHsgJG0uUFNPYmpl +Y3QuUHJvcGVydGllcy5SZW1vdmUoJ3BmYWQnKSB9DQogICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgaWYgKCRtLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3N5c3RlbSddKSB7ICRt +LlBTT2JqZWN0LlByb3BlcnRpZXMuUmVtb3ZlKCdzeXN0ZW0nKSB9DQogICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgJG0ubWltZVR5cGUgPSAkTmV1ZU1pbWUNCiAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJE5ldWVyRGF0ZWluYW1lKSB7DQog +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtLmRhdGVpbmFtZSA9 +ICROZXVlckRhdGVpbmFtZS5TdWJzdHJpbmcoMCwgW01hdGhdOjpNaW4oJE5ldWVyRGF0ZWluYW1l +Lkxlbmd0aCwgMjAwKSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9 +DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJG0uZ3JvZXNzZSA9ICRO +ZXVlQnl0ZXMuTGVuZ3RoDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +JG0uaG9jaGdlbGFkZW5BbSA9IChHZXQtRGF0ZSAtRm9ybWF0ICd5eXl5LU1NLWRkIEhIOm1tOnNz +JykNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbS5ob2NoZ2VsYWRl +blZvbiA9IChHZXQtQWt0dWVsbGVyQmVudXR6ZXIpDQogICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgJFppZWxEID0gR2V0LU1lZGllblBmYWQgJG0NCiAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAkWmllbERpciA9IFNwbGl0LVBhdGggLVBhcmVudCAk +WmllbEQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAo +VGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkWmllbERpcikpIHsgTmV3LUl0ZW0gLUl0ZW1UeXBlIERp +cmVjdG9yeSAtUGF0aCAkWmllbERpciAtRm9yY2UgfCBPdXQtTnVsbCB9DQogICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgW1N5c3RlbS5JTy5GaWxlXTo6V3JpdGVBbGxCeXRl +cygkWmllbEQsICROZXVlQnl0ZXMpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgJHNjcmlwdDpBZW5kZXJ1bmdlblsnZGF0ZWknXSA9ICIkTmV1ZU1pbWUgJCgkTmV1ZUJ5 +dGVzLkxlbmd0aCkgQiINCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAg +ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAkc2NyaXB0OlVwZGF0ZWRFaW50cmFnID0gJG0NCiAgICAgICAgICAgICAgICAgICAg +ICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJE5ldWVMaXN0ZSArPSAkbQ0K +ICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRz +Y3JpcHQ6Rm91bmQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBXcml0ZS1NZWRpZW5N +ZXRhIChbUFNDdXN0b21PYmplY3RdQHsgbWVkaWVuID0gJE5ldWVMaXN0ZSB9KQ0KICAgICAgICAg +ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9IHwgT3V0LU51bGwNCiAgICAg +ICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVz +ICIkXyIgNTAzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBp +ZiAoLW5vdCAkc2NyaXB0OkZvdW5kKSB7IFNlbmQtRXJyb3IgJFJlcyAnTmljaHQgZ2VmdW5kZW4n +IDQwNDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0VpbnRyYWcgJ21lZGll +bi5nZWFlbmRlcnQnIEB7IGlkID0gJE1pZDsgYmV6ZWljaG51bmcgPSAkc2NyaXB0OlVwZGF0ZWRF +aW50cmFnLmJlemVpY2hudW5nOyBrYXRlZ29yaWUgPSAkc2NyaXB0OlVwZGF0ZWRFaW50cmFnLmth +dGVnb3JpZSB9DQogICAgICAgICAgICAgICAgJFVzZXJuYW1lID0gJGVudjpVU0VSTkFNRQ0KICAg +ICAgICAgICAgICAgICRSb2xsZSA9IEdldC1Vc2VyUm9sbGUNCiAgICAgICAgICAgICAgICBBZGQt +Q2hhbmdlTG9nRW50cnkgJ21lZGllbicgJG51bGwgJG51bGwgJG51bGwgJFVzZXJuYW1lICRSb2xs +ZSBAeyBha3Rpb24gPSAnZ2VhZW5kZXJ0JzsgaWQgPSAkTWlkOyBiZXplaWNobnVuZyA9ICRzY3Jp +cHQ6VXBkYXRlZEVpbnRyYWcuYmV6ZWljaG51bmc7IGthdGVnb3JpZSA9ICRzY3JpcHQ6VXBkYXRl +ZEVpbnRyYWcua2F0ZWdvcmllIH0NCiAgICAgICAgICAgICAgICBTZW5kLUpzb24gJFJlcyBAeyBz +dGF0dXMgPSAnZ2VzcGVpY2hlcnQnOyBtZWRpdW0gPSAkc2NyaXB0OlVwZGF0ZWRFaW50cmFnIH0N +CiAgICAgICAgICAgICAgICAkc2NyaXB0OkZvdW5kID0gJGZhbHNlOyAkc2NyaXB0OlVwZGF0ZWRF +aW50cmFnID0gJG51bGwNCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0K +DQogICAgICAgICAgICAjID09PT09PT09PT09PT09PT09PT09PSBNRURJRU46IExvZXNjaGVuID09 +PT09PT09PT09PT09PT09PT09PQ0KICAgICAgICAgICAgaWYgKCRQYXRoLlN0YXJ0c1dpdGgoJy9h +cGkvbWVkaWVuLycpIC1hbmQgJE1ldGhvZCAtZXEgJ0RFTEVURScgLWFuZCAtbm90ICRQYXRoLlN0 +YXJ0c1dpdGgoJy9hcGkvbWVkaWVuL2RhdGVpLycpKSB7DQogICAgICAgICAgICAgICAgaWYgKC1u +b3QgKFRlc3QtSXN0U3VwZXJVc2VyKSkgeyBTZW5kLUVycm9yICRSZXMgJ051ciBTdXBlclVzZXIg +ZGFyZiBNZWRpZW4gbG9lc2NoZW4nIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgICRN +aWQgPSAkUGF0aC5TdWJzdHJpbmcoJFBhdGguTGFzdEluZGV4T2YoJy8nKSArIDEpDQogICAgICAg +ICAgICAgICAgJHNjcmlwdDpGb3VuZCA9ICRmYWxzZTsgJHNjcmlwdDpHZWxvZXNjaHRlckVpbnRy +YWcgPSAkbnVsbA0KICAgICAgICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgIElu dm9rZS1XaXRoRmlsZUxvY2sgJ21lZGllbi5qc29uJyB7DQogICAgICAgICAgICAgICAgICAgICAg ICAkTWV0YSA9IFJlYWQtTWVkaWVuTWV0YQ0KICAgICAgICAgICAgICAgICAgICAgICAgJE5ldWVM aXN0ZSA9IEAoKQ0KICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJG0gaW4gQCgkTWV0 YS5tZWRpZW4pKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRtLmlkIC1lcSAk TWlkKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY3JpcHQ6Rm91bmQgPSAk -dHJ1ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQWx0S2F0ID0gJG0ua2F0ZWdv -cmllDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtbmUgJE5ldWVC -ZXogLWFuZCAkTmV1ZUJlei5UcmltKCkgLW5lICRtLmJlemVpY2hudW5nKSB7DQogICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAkYmV6ID0gJE5ldWVCZXouVHJpbSgpDQogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGJlei5MZW5ndGggLWd0IDIwMCkgeyAk -YmV6ID0gJGJlei5TdWJzdHJpbmcoMCwgMjAwKSB9DQogICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAkbS5iZXplaWNobnVuZyA9ICRiZXoNCiAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICRzY3JpcHQ6QWVuZGVydW5nZW5bJ2JlemVpY2hudW5nJ10gPSAkYmV6DQog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgaWYgKCRudWxsIC1uZSAkTmV1ZUthdCAtYW5kICROZXVlS2F0IC1uZSAkQWx0S2F0 -KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSXN0U3lzdGVtID0gJG0u -UFNPYmplY3QuUHJvcGVydGllc1sncGZhZCddIC1hbmQgLW5vdCBbc3RyaW5nXTo6SXNOdWxsT3JX -aGl0ZVNwYWNlKFtzdHJpbmddJG0ucGZhZCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgIGlmICgkSXN0U3lzdGVtKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgIyBTeXN0ZW0tTWVkaXVtOiBudXIgTWV0YS1LYXRlZ29yaWUgd2VjaHNlbG4sIERh -dGVpIGJsZWlidCBpbSAvaW1hZ2VzLy1PcmRuZXINCiAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAkbS5rYXRlZ29yaWUgPSAkTmV1ZUthdA0KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAkQWx0ID0gR2V0LU1lZGllblBmYWQgJG0NCiAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAkbS5rYXRlZ29yaWUgPSAkTmV1ZUthdA0KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICROZXUgPSBHZXQtTWVkaWVuUGZhZCAkbQ0KICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICROZXVEaXIgPSBTcGxpdC1QYXRo -IC1QYXJlbnQgJE5ldQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm -ICgtbm90IChUZXN0LVBhdGggLUxpdGVyYWxQYXRoICROZXVEaXIpKSB7IE5ldy1JdGVtIC1JdGVt -VHlwZSBEaXJlY3RvcnkgLVBhdGggJE5ldURpciAtRm9yY2UgfCBPdXQtTnVsbCB9DQogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFRlc3QtUGF0aCAtTGl0ZXJhbFBh -dGggJEFsdCkgeyBNb3ZlLUl0ZW0gLUxpdGVyYWxQYXRoICRBbHQgLURlc3RpbmF0aW9uICROZXUg -LUZvcmNlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY3JpcHQ6QWVuZGVydW5nZW5bJ2thdGVnb3Jp -ZSddID0gIiRBbHRLYXQgLT4gJE5ldWVLYXQiDQogICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBEYXRlaS1SZXBsYWNlDQog -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbnVsbCAtbmUgJE5ldWVCeXRlcykg -ew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJE5ldWVyRXh0ID0gJHNjcmlw -dDpNZWRpZW5FcmxhdWJ0ZU1pbWVzWyROZXVlTWltZV0NCiAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICRLYXQgPSBpZiAoJG0ua2F0ZWdvcmllKSB7IFtzdHJpbmddJG0ua2F0ZWdv -cmllIH0gZWxzZSB7ICdzb25zdGlnZXMnIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICRJbWFnZXNEaXIyID0gR2V0LU1lZGllbkltYWdlc09yZG5lciAkS2F0DQogICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkSGF0UGZhZCA9ICRtLlBTT2JqZWN0LlByb3Bl -cnRpZXNbJ3BmYWQnXSAtYW5kIC1ub3QgW3N0cmluZ106OklzTnVsbE9yV2hpdGVTcGFjZShbc3Ry -aW5nXSRtLnBmYWQpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkWmllbElu -SW1hZ2VzID0gJEhhdFBmYWQgLW9yICgkbnVsbCAtbmUgJEltYWdlc0RpcjIpDQogICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJFppZWxJbkltYWdlcyAtYW5kICRudWxsIC1u -ZSAkSW1hZ2VzRGlyMikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICMgQWx0ZSBEYXRlaSBiZXNlaXRpZ2VuDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgaWYgKCRIYXRQZmFkKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICRBbHREID0gSm9pbi1QYXRoICRzY3JpcHQ6Um9vdCAoKFtzdHJpbmddJG0u -cGZhZCkuVHJpbVN0YXJ0KCcvJykpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgJEFsdEQgPSBHZXQtTWVkaWVuUGZhZCAkbQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0 -cnkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoVGVz -dC1QYXRoIC1MaXRlcmFsUGF0aCAkQWx0RCAtUGF0aFR5cGUgTGVhZikgeyBSZW1vdmUtSXRlbSAt -TGl0ZXJhbFBhdGggJEFsdEQgLUZvcmNlIC1FcnJvckFjdGlvbiBTaWxlbnRseUNvbnRpbnVlIH0N -CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIHt9DQogICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBOZXVlbiBaaWVsbmFtZW4gd8Ok -aGxlbg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkSGF0UGZh -ZCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkU3RlbSA9 -IFtTeXN0ZW0uSU8uUGF0aF06OkdldEZpbGVOYW1lV2l0aG91dEV4dGVuc2lvbihbc3RyaW5nXSRt -LnBmYWQpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRaaWVs -RCA9IEpvaW4tUGF0aCAkSW1hZ2VzRGlyMiAoJFN0ZW0gKyAkTmV1ZXJFeHQpDQogICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgJFVwbG9hZE5hbWUyID0gaWYgKCROZXVlckRhdGVp -bmFtZSkgeyAkTmV1ZXJEYXRlaW5hbWUgfSBlbHNlIHsgW3N0cmluZ10kbS5iZXplaWNobnVuZyB9 -DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRCYXNlMiA9IEdl -dC1NZWRpZW5CYXNlbmFtZUF1c1VwbG9hZCAkVXBsb2FkTmFtZTINCiAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgJFppZWxEID0gR2V0LU1lZGllbkZyZWllckRhdGVp -bmFtZSAkSW1hZ2VzRGlyMiAkQmFzZTIgJE5ldWVyRXh0DQogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgIFtTeXN0ZW0uSU8uRmlsZV06OldyaXRlQWxsQnl0ZXMoJFppZWxELCAkTmV1ZUJ5dGVzKQ0K -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRaaWVsTmFtZTIgPSBbU3lz -dGVtLklPLlBhdGhdOjpHZXRGaWxlTmFtZSgkWmllbEQpDQogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgaWYgKCRtLlBTT2JqZWN0LlByb3BlcnRpZXNbJ3BmYWQnXSkgeyAk -bS5wZmFkID0gJy9pbWFnZXMvJyArICRLYXQgKyAnLycgKyAkWmllbE5hbWUyIH0NCiAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHsgJG0gfCBBZGQtTWVtYmVyIC1N -ZW1iZXJUeXBlIE5vdGVQcm9wZXJ0eSAtTmFtZSAncGZhZCcgLVZhbHVlICgnL2ltYWdlcy8nICsg -JEthdCArICcvJyArICRaaWVsTmFtZTIpIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAkbS5kYXRlaW5hbWUgPSBpZiAoJE5ldWVyRGF0ZWluYW1lKSB7ICROZXVlckRh -dGVpbmFtZS5TdWJzdHJpbmcoMCwgW01hdGhdOjpNaW4oJE5ldWVyRGF0ZWluYW1lLkxlbmd0aCwg -MjAwKSkgfSBlbHNlIHsgJFppZWxOYW1lMiB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgJG0ubWltZVR5cGUgPSAkTmV1ZU1pbWUNCiAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAkbS5ncm9lc3NlID0gJE5ldWVCeXRlcy5MZW5ndGgNCiAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG0uUFNPYmplY3QuUHJvcGVy -dGllc1snc3lzdGVtJ10pIHsgJG0uUFNPYmplY3QuUHJvcGVydGllcy5SZW1vdmUoJ3N5c3RlbScp -IH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkbS5ob2NoZ2VsYWRl -bkFtID0gKEdldC1EYXRlIC1Gb3JtYXQgJ3l5eXktTU0tZGQgSEg6bW06c3MnKQ0KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtLmhvY2hnZWxhZGVuVm9uID0gKEdldC1B -a3R1ZWxsZXJCZW51dHplcikNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAkc2NyaXB0OkFlbmRlcnVuZ2VuWydkYXRlaSddID0gIiROZXVlTWltZSAkKCROZXVlQnl0ZXMu -TGVuZ3RoKSBCIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsN -CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGRhdGEvbWVkaWVuLVBm -YWQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoLW5vdCAkSGF0 -UGZhZCkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkQWx0 -RCA9IEdldC1NZWRpZW5QZmFkICRtDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgIHRyeSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICBpZiAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkQWx0RCAtUGF0aFR5cGUgTGVhZikg -eyBSZW1vdmUtSXRlbSAtTGl0ZXJhbFBhdGggJEFsdEQgLUZvcmNlIC1FcnJvckFjdGlvbiBTaWxl -bnRseUNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgfSBjYXRjaCB7fQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0N -CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJG0uUFNPYmplY3Qu -UHJvcGVydGllc1sncGZhZCddKSB7ICRtLlBTT2JqZWN0LlByb3BlcnRpZXMuUmVtb3ZlKCdwZmFk -JykgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkbS5QU09i -amVjdC5Qcm9wZXJ0aWVzWydzeXN0ZW0nXSkgeyAkbS5QU09iamVjdC5Qcm9wZXJ0aWVzLlJlbW92 -ZSgnc3lzdGVtJykgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRt -Lm1pbWVUeXBlID0gJE5ldWVNaW1lDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgaWYgKCROZXVlckRhdGVpbmFtZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAkbS5kYXRlaW5hbWUgPSAkTmV1ZXJEYXRlaW5hbWUuU3Vic3RyaW5n -KDAsIFtNYXRoXTo6TWluKCROZXVlckRhdGVpbmFtZS5MZW5ndGgsIDIwMCkpDQogICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICRtLmdyb2Vzc2UgPSAkTmV1ZUJ5dGVzLkxlbmd0aA0KICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtLmhvY2hnZWxhZGVuQW0gPSAoR2V0LURh -dGUgLUZvcm1hdCAneXl5eS1NTS1kZCBISDptbTpzcycpDQogICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgJG0uaG9jaGdlbGFkZW5Wb24gPSAoR2V0LUFrdHVlbGxlckJlbnV0 -emVyKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRaaWVsRCA9IEdl -dC1NZWRpZW5QZmFkICRtDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -JFppZWxEaXIgPSBTcGxpdC1QYXRoIC1QYXJlbnQgJFppZWxEDQogICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJFpp -ZWxEaXIpKSB7IE5ldy1JdGVtIC1JdGVtVHlwZSBEaXJlY3RvcnkgLVBhdGggJFppZWxEaXIgLUZv -cmNlIHwgT3V0LU51bGwgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -IFtTeXN0ZW0uSU8uRmlsZV06OldyaXRlQWxsQnl0ZXMoJFppZWxELCAkTmV1ZUJ5dGVzKQ0KICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzY3JpcHQ6QWVuZGVydW5nZW5b -J2RhdGVpJ10gPSAiJE5ldWVNaW1lICQoJE5ldWVCeXRlcy5MZW5ndGgpIEIiDQogICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg -ICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNjcmlwdDpVcGRhdGVkRWlu -dHJhZyA9ICRtDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICROZXVlTGlzdGUgKz0gJG0NCiAgICAgICAgICAgICAgICAgICAgICAgIH0N -CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkc2NyaXB0OkZvdW5kKSB7DQogICAgICAgICAg -ICAgICAgICAgICAgICAgICAgV3JpdGUtTWVkaWVuTWV0YSAoW1BTQ3VzdG9tT2JqZWN0XUB7IG1l -ZGllbiA9ICROZXVlTGlzdGUgfSkNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAg -ICAgICAgICAgICAgfSB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgfSBjYXRjaCB7DQogICAg -ICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlcyAiJF8iIDUwMzsgY29udGludWUNCiAgICAg -ICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJHNjcmlwdDpGb3VuZCkgeyBT -ZW5kLUVycm9yICRSZXMgJ05pY2h0IGdlZnVuZGVuJyA0MDQ7IGNvbnRpbnVlIH0NCiAgICAgICAg -ICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdtZWRpZW4uZ2VhZW5kZXJ0JyBAeyBpZCA9ICRNaWQ7 -IGJlemVpY2hudW5nID0gJHNjcmlwdDpVcGRhdGVkRWludHJhZy5iZXplaWNobnVuZzsga2F0ZWdv -cmllID0gJHNjcmlwdDpVcGRhdGVkRWludHJhZy5rYXRlZ29yaWUgfQ0KICAgICAgICAgICAgICAg -ICRVc2VybmFtZSA9ICRlbnY6VVNFUk5BTUUNCiAgICAgICAgICAgICAgICAkUm9sbGUgPSBHZXQt -VXNlclJvbGxlDQogICAgICAgICAgICAgICAgQWRkLUNoYW5nZUxvZ0VudHJ5ICdtZWRpZW4nICRu -dWxsICRudWxsICRudWxsICRVc2VybmFtZSAkUm9sbGUgQHsgYWt0aW9uID0gJ2dlYWVuZGVydCc7 -IGlkID0gJE1pZDsgYmV6ZWljaG51bmcgPSAkc2NyaXB0OlVwZGF0ZWRFaW50cmFnLmJlemVpY2hu -dW5nOyBrYXRlZ29yaWUgPSAkc2NyaXB0OlVwZGF0ZWRFaW50cmFnLmthdGVnb3JpZSB9DQogICAg -ICAgICAgICAgICAgU2VuZC1Kc29uICRSZXMgQHsgc3RhdHVzID0gJ2dlc3BlaWNoZXJ0JzsgbWVk -aXVtID0gJHNjcmlwdDpVcGRhdGVkRWludHJhZyB9DQogICAgICAgICAgICAgICAgJHNjcmlwdDpG -b3VuZCA9ICRmYWxzZTsgJHNjcmlwdDpVcGRhdGVkRWludHJhZyA9ICRudWxsDQogICAgICAgICAg -ICAgICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyA9PT09PT09PT09 -PT09PT09PT09PT0gTUVESUVOOiBMb2VzY2hlbiA9PT09PT09PT09PT09PT09PT09PT0NCiAgICAg -ICAgICAgIGlmICgkUGF0aC5TdGFydHNXaXRoKCcvYXBpL21lZGllbi8nKSAtYW5kICRNZXRob2Qg -LWVxICdERUxFVEUnIC1hbmQgLW5vdCAkUGF0aC5TdGFydHNXaXRoKCcvYXBpL21lZGllbi9kYXRl -aS8nKSkgew0KICAgICAgICAgICAgICAgIGlmICgtbm90IChUZXN0LUlzdFN1cGVyVXNlcikpIHsg -U2VuZC1FcnJvciAkUmVzICdOdXIgU3VwZXJVc2VyIGRhcmYgTWVkaWVuIGxvZXNjaGVuJyA0MDM7 -IGNvbnRpbnVlIH0NCiAgICAgICAgICAgICAgICAkTWlkID0gJFBhdGguU3Vic3RyaW5nKCRQYXRo -Lkxhc3RJbmRleE9mKCcvJykgKyAxKQ0KICAgICAgICAgICAgICAgICRzY3JpcHQ6Rm91bmQgPSAk -ZmFsc2U7ICRzY3JpcHQ6R2Vsb2VzY2h0ZXJFaW50cmFnID0gJG51bGwNCiAgICAgICAgICAgICAg -ICB0cnkgew0KICAgICAgICAgICAgICAgICAgICBJbnZva2UtV2l0aEZpbGVMb2NrICdtZWRpZW4u -anNvbicgew0KICAgICAgICAgICAgICAgICAgICAgICAgJE1ldGEgPSBSZWFkLU1lZGllbk1ldGEN -CiAgICAgICAgICAgICAgICAgICAgICAgICROZXVlTGlzdGUgPSBAKCkNCiAgICAgICAgICAgICAg -ICAgICAgICAgIGZvcmVhY2ggKCRtIGluIEAoJE1ldGEubWVkaWVuKSkgew0KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgIGlmICgkbS5pZCAtZXEgJE1pZCkgew0KICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgICAkc2NyaXB0OkZvdW5kID0gJHRydWUNCiAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAgICAgJHNjcmlwdDpHZWxvZXNjaHRlckVpbnRyYWcgPSAkbQ0KICAgICAgICAgICAg -ICAgICAgICAgICAgICAgICAgICAjIERpc2stRGF0ZWkgbnVyIHNjaG9uZW4sIHdlbm4gT3JpZ2lu -YWwtU3lzdGVtLUFzc2V0IChzeXN0ZW09JHRydWUpLg0KICAgICAgICAgICAgICAgICAgICAgICAg -ICAgICAgICAjIFVzZXItVXBsb2FkcyBtaXQgYHBmYWRgIChpbiBJbWFnZXMvPGthdD4vKSB3ZXJk -ZW4gbWl0IGdlbG9lc2NodC4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJElzdFN5 -c3RlbUFzc2V0ID0gJG0uUFNPYmplY3QuUHJvcGVydGllc1snc3lzdGVtJ10gLWFuZCBbYm9vbF0k -bS5zeXN0ZW0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC1ub3QgJElzdFN5 -c3RlbUFzc2V0KSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkRGF0ZWkg -PSBHZXQtTWVkaWVuUGZhZCAkbQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg -aWYgKFRlc3QtUGF0aCAtTGl0ZXJhbFBhdGggJERhdGVpIC1QYXRoVHlwZSBMZWFmKSB7IFJlbW92 -ZS1JdGVtIC1MaXRlcmFsUGF0aCAkRGF0ZWkgLUVycm9yQWN0aW9uIFNpbGVudGx5Q29udGludWUg -fQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAg -ICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJE5ldWVM -aXN0ZSArPSAkbQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAg -ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkc2NyaXB0OkZvdW5kKSB7 -DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGUtTWVkaWVuTWV0YSAoW1BTQ3VzdG9t -T2JqZWN0XUB7IG1lZGllbiA9ICROZXVlTGlzdGUgfSkNCiAgICAgICAgICAgICAgICAgICAgICAg -IH0NCiAgICAgICAgICAgICAgICAgICAgfSB8IE91dC1OdWxsDQogICAgICAgICAgICAgICAgfSBj -YXRjaCB7DQogICAgICAgICAgICAgICAgICAgIFNlbmQtRXJyb3IgJFJlcyAiJF8iIDUwMzsgY29u -dGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKC1ub3QgJHNjcmlw -dDpGb3VuZCkgeyBTZW5kLUVycm9yICRSZXMgJ05pY2h0IGdlZnVuZGVuJyA0MDQ7IGNvbnRpbnVl -IH0NCiAgICAgICAgICAgICAgICBXcml0ZS1Mb2dFaW50cmFnICdtZWRpZW4uZ2Vsb2VzY2h0JyBA -eyBpZCA9ICRNaWQ7IGthdGVnb3JpZSA9ICRzY3JpcHQ6R2Vsb2VzY2h0ZXJFaW50cmFnLmthdGVn -b3JpZTsgYmV6ZWljaG51bmcgPSAkc2NyaXB0OkdlbG9lc2NodGVyRWludHJhZy5iZXplaWNobnVu -ZyB9DQogICAgICAgICAgICAgICAgJFVzZXJuYW1lID0gJGVudjpVU0VSTkFNRQ0KICAgICAgICAg -ICAgICAgICRSb2xsZSA9IEdldC1Vc2VyUm9sbGUNCiAgICAgICAgICAgICAgICBBZGQtQ2hhbmdl -TG9nRW50cnkgJ21lZGllbicgJG51bGwgJG51bGwgJG51bGwgJFVzZXJuYW1lICRSb2xsZSBAeyBh -a3Rpb24gPSAnZ2Vsb2VzY2h0JzsgaWQgPSAkTWlkOyBrYXRlZ29yaWUgPSAkc2NyaXB0OkdlbG9l -c2NodGVyRWludHJhZy5rYXRlZ29yaWU7IGJlemVpY2hudW5nID0gJHNjcmlwdDpHZWxvZXNjaHRl -ckVpbnRyYWcuYmV6ZWljaG51bmcgfQ0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbiAkUmVzIEB7 -IHN0YXR1cyA9ICdnZWxvZXNjaHQnIH0NCiAgICAgICAgICAgICAgICAkc2NyaXB0OkZvdW5kID0g -JGZhbHNlOyAkc2NyaXB0OkdlbG9lc2NodGVyRWludHJhZyA9ICRudWxsDQogICAgICAgICAgICAg -ICAgY29udGludWUNCiAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgIyA9PT09PT09PT09PT09 -PT09PT09PT0gU1RBVElTQ0hFIERBVEVJRU4gPT09PT09PT09PT09PT09PT09PT09DQogICAgICAg -ICAgICAkUmVsUGF0aCA9ICRQYXRoLlRyaW1TdGFydCgnLycpDQogICAgICAgICAgICBpZiAoW3N0 -cmluZ106OklzTnVsbE9yV2hpdGVTcGFjZSgkUmVsUGF0aCkpIHsgJFJlbFBhdGggPSAnaW5kZXgu -aHRtbCcgfQ0KICAgICAgICAgICAgJFNhZmVQYXRoID0gUmVzb2x2ZS1TYWZlUGF0aCAkUmVsUGF0 -aA0KICAgICAgICAgICAgaWYgKCRudWxsIC1lcSAkU2FmZVBhdGgpIHsgU2VuZC1FcnJvciAkUmVz -ICdadWdyaWZmIHZlcndlaWdlcnQnIDQwMzsgY29udGludWUgfQ0KICAgICAgICAgICAgaWYgKChU -ZXN0LVBhdGggJFNhZmVQYXRoKSAtYW5kIC1ub3QgKEdldC1JdGVtICRTYWZlUGF0aCkuUFNJc0Nv -bnRhaW5lcikgew0KICAgICAgICAgICAgICAgIFNlbmQtRmlsZSAkUmVzICRTYWZlUGF0aA0KICAg -ICAgICAgICAgfSBlbHNlaWYgKCRSZWxQYXRoIC1lcSAnaW5kZXguaHRtbCcpIHsNCiAgICAgICAg -ICAgICAgICAjIERpYWdub3NlLVNlaXRlIHN0YXR0IDQwNCAtIHplaWd0IGRpcmVrdCBpbSBCcm93 -c2VyLCB3YXMgbG9zIGlzdA0KICAgICAgICAgICAgICAgICRfZGlhZ0luaGFsdCA9ICcnDQogICAg -ICAgICAgICAgICAgdHJ5IHsNCiAgICAgICAgICAgICAgICAgICAgJF9kaWFnRmlsZXMgPSBHZXQt -Q2hpbGRJdGVtIC1QYXRoICRSb290IC1Gb3JjZSAtRXJyb3JBY3Rpb24gU2lsZW50bHlDb250aW51 -ZSB8IFNlbGVjdC1PYmplY3QgLUZpcnN0IDMwIHwgRm9yRWFjaC1PYmplY3QgeyAnPGxpPicgKyBb -U3lzdGVtLldlYi5IdHRwVXRpbGl0eV06Okh0bWxFbmNvZGUoJF8uTmFtZSkgKyAnPC9saT4nIH0N -CiAgICAgICAgICAgICAgICAgICAgJF9kaWFnSW5oYWx0ID0gJF9kaWFnRmlsZXMgLWpvaW4gImBu -Ig0KICAgICAgICAgICAgICAgIH0gY2F0Y2ggeyAkX2RpYWdJbmhhbHQgPSAnPGxpPihWZXJ6ZWlj -aG5pcyBuaWNodCBsZXNiYXIpPC9saT4nIH0NCiAgICAgICAgICAgICAgICAkX2RpYWdIdG1sID0g -QCINCjwhZG9jdHlwZSBodG1sPjxodG1sPjxoZWFkPjxtZXRhIGNoYXJzZXQ9InV0Zi04Ij48dGl0 -bGU+RkxELVNlcnZlcjogaW5kZXguaHRtbCBuaWNodCBnZWZ1bmRlbjwvdGl0bGU+DQo8c3R5bGU+ -Ym9keXtmb250LWZhbWlseTpTZWdvZSBVSSxzYW5zLXNlcmlmO2JhY2tncm91bmQ6I2ZhZmFmYTtj -b2xvcjojMjIyO3BhZGRpbmc6MzJweDttYXgtd2lkdGg6NzgwcHg7bWFyZ2luOmF1dG99DQpoMXtj -b2xvcjojYjcxYzFjfWNvZGV7YmFja2dyb3VuZDojZWVlO3BhZGRpbmc6MnB4IDZweDtib3JkZXIt -cmFkaXVzOjNweH0NCi5ib3h7YmFja2dyb3VuZDojZmZmO2JvcmRlcjoxcHggc29saWQgI2NjYztw -YWRkaW5nOjE2cHggMjBweDtib3JkZXItcmFkaXVzOjRweDttYXJnaW46MTRweCAwfQ0KLmxhYmVs -e2ZvbnQtd2VpZ2h0OjYwMDtjb2xvcjojNTU1fXVse2ZvbnQtc2l6ZToxM3B4fTwvc3R5bGU+PC9o -ZWFkPjxib2R5Pg0KPGgxPkZMRC1TZXJ2ZXI6IGluZGV4Lmh0bWwgbmljaHQgZ2VmdW5kZW48L2gx -Pg0KPHA+RGVyIFNlcnZlciBsYWV1ZnQsIGthbm4gYWJlciB1bnRlciBkZW0ga29uZmlndXJpZXJ0 -ZW4gQXBwLVJvb3Qga2VpbmUgPGNvZGU+aW5kZXguaHRtbDwvY29kZT4gZmluZGVuLjwvcD4NCjxk -aXYgY2xhc3M9ImJveCI+DQogIDxkaXY+PHNwYW4gY2xhc3M9ImxhYmVsIj5Ba3R1ZWxsIGdlbnV0 -enRlciBSb290LVBmYWQ6PC9zcGFuPjxicj48Y29kZT4kUm9vdDwvY29kZT48L2Rpdj4NCiAgPGRp -diBzdHlsZT0ibWFyZ2luLXRvcDo4cHgiPjxzcGFuIGNsYXNzPSJsYWJlbCI+UXVlbGxlOjwvc3Bh -bj4gJF9yb290U3JjPC9kaXY+DQogIDxkaXYgc3R5bGU9Im1hcmdpbi10b3A6OHB4Ij48c3BhbiBj -bGFzcz0ibGFiZWwiPlJvb3RQYXRoLVBhcmFtOjwvc3Bhbj4gPGNvZGU+JChbU3lzdGVtLldlYi5I -dHRwVXRpbGl0eV06Okh0bWxFbmNvZGUoJFJvb3RQYXRoKSk8L2NvZGU+PC9kaXY+DQogIDxkaXYg -c3R5bGU9Im1hcmdpbi10b3A6OHB4Ij48c3BhbiBjbGFzcz0ibGFiZWwiPlBTU2NyaXB0Um9vdDo8 -L3NwYW4+IDxjb2RlPiQoW1N5c3RlbS5XZWIuSHR0cFV0aWxpdHldOjpIdG1sRW5jb2RlKCRQU1Nj -cmlwdFJvb3QpKTwvY29kZT48L2Rpdj4NCjwvZGl2Pg0KPGRpdiBjbGFzcz0iYm94Ij4NCiAgPGRp -diBjbGFzcz0ibGFiZWwiPkluaGFsdCBkZXMgUm9vdC1QZmFkcyAobWF4IDMwIEVpbnRyYWVnZSk6 -PC9kaXY+DQogIDx1bD4kX2RpYWdJbmhhbHQ8L3VsPg0KPC9kaXY+DQo8ZGl2IGNsYXNzPSJib3gi -Pg0KICA8ZGl2IGNsYXNzPSJsYWJlbCI+TmFlY2hzdGUgU2Nocml0dGU6PC9kaXY+DQogIDxvbD4N -CiAgICA8bGk+UHJ1ZWZlLCBvYiBpbSBnZW5hbm50ZW4gUm9vdC1QZmFkIGRpZSBEYXRlaSA8Y29k -ZT5pbmRleC5odG1sPC9jb2RlPiBsaWVndC48L2xpPg0KICAgIDxsaT5GYWxscyBuaWNodDogQmF0 -IGF1cyBkZW0ga29ycmVrdGVuIEFwcC1PcmRuZXIgc3RhcnRlbiAobmljaHQgYXVzIGRlbSBOVy1I -b21lKS48L2xpPg0KICAgIDxsaT5GYWxscyBkaWUgQmF0IGltIHJpY2h0aWdlbiBPcmRuZXIgbGll -Z3Q6IFNpZGVjYXItRGF0ZWkgPGNvZGU+YXBwX3Jvb3QudHh0PC9jb2RlPiBuZWJlbiBkZW0gbG9r -YWxlbiA8Y29kZT5zZXJ2ZXIucHMxPC9jb2RlPiBwcnVlZmVuLjwvbGk+DQogICAgPGxpPlZvbGxz -dGFlbmRpZ2VyIFRyYWNlOiA8Y29kZT4lVEVNUCVcRkxEX3NlcnZlci5sb2c8L2NvZGU+IGJ6dy4g -PGNvZGU+JVVTRVJQUk9GSUxFJVxEZXNrdG9wXEZMRF9GRUhMRVIubG9nPC9jb2RlPi48L2xpPg0K -ICA8L29sPg0KPC9kaXY+DQo8L2JvZHk+PC9odG1sPg0KIkANCiAgICAgICAgICAgICAgICAkX2J5 -dGVzID0gW1N5c3RlbS5UZXh0LkVuY29kaW5nXTo6VVRGOC5HZXRCeXRlcygkX2RpYWdIdG1sKQ0K -ICAgICAgICAgICAgICAgIEFkZC1TZWN1cml0eUhlYWRlcnMgJFJlcw0KICAgICAgICAgICAgICAg -ICRSZXMuQ29udGVudFR5cGUgPSAndGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04Jw0KICAgICAgICAg -ICAgICAgICRSZXMuU3RhdHVzQ29kZSA9IDUwMw0KICAgICAgICAgICAgICAgICRSZXMuQ29udGVu -dExlbmd0aDY0ID0gJF9ieXRlcy5MZW5ndGgNCiAgICAgICAgICAgICAgICBXcml0ZS1SZXNwb25z -ZUJ1ZmZlciAkUmVzICRfYnl0ZXMNCiAgICAgICAgICAgICAgICBXcml0ZS1TdGFydHVwTG9nICJE -SUFHLVNlaXRlIGF1c2dlbGllZmVydCAoaW5kZXguaHRtbCB1bnRlciAnJFJvb3QnIGZlaGx0KSIN -CiAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgU2VuZC1FcnJvciAkUmVzICJO -aWNodCBnZWZ1bmRlbjogJFJlbFBhdGgiIDQwNA0KICAgICAgICAgICAgfQ0KDQogICAgICAgIH0g -Y2F0Y2ggew0KICAgICAgICAgICAgIyBQaGFzZSBENTogZXJyb3JJZC1VVUlEICsgU3RhY2t0cmFj -ZSBpbnMgTG9nLCBOSUNIVCBpbiBSZXNwb25zZQ0KICAgICAgICAgICAgJGVycm9ySWQgPSBOZXct -RXJyb3JJZA0KICAgICAgICAgICAgJGRldGFpbCAgPSAiJF8gfCBaZWlsZSAkKCRfLkludm9jYXRp -b25JbmZvLlNjcmlwdExpbmVOdW1iZXIpIHwgJCgkXy5JbnZvY2F0aW9uSW5mby5MaW5lLlRyaW0o -KSkiDQogICAgICAgICAgICBXcml0ZS1TdGFydHVwTG9nICJSRVFVRVNULUZFSExFUiAkTWV0aG9k -ICRQYXRoIGVycm9ySWQ9JGVycm9ySWQgOiAkZGV0YWlsIg0KICAgICAgICAgICAgdHJ5IHsNCiAg -ICAgICAgICAgICAgICBTZW5kLUpzb24gJFJlcyBAew0KICAgICAgICAgICAgICAgICAgICBmZWhs -ZXIgID0gJ2ludGVybmVyX3NlcnZlcmZlaGxlcicNCiAgICAgICAgICAgICAgICAgICAgbWVsZHVu -ZyA9ICdJbnRlcm5lciBTZXJ2ZXJmZWhsZXIgLSBiaXR0ZSBtaXQgZGVyIGVycm9ySWQgYW4gU3Vw -ZXJVc2VyIG1lbGRlbi4nDQogICAgICAgICAgICAgICAgICAgIGVycm9ySWQgPSAkZXJyb3JJZA0K -ICAgICAgICAgICAgICAgIH0gNTAwDQogICAgICAgICAgICB9IGNhdGNoIHt9DQogICAgICAgIH0N -CiAgICB9DQp9IGZpbmFsbHkgew0KICAgIGlmICgkTGlzdGVuZXIgLWFuZCAkTGlzdGVuZXIuSXNM -aXN0ZW5pbmcpIHsgJExpc3RlbmVyLlN0b3AoKSB9DQogICAgV3JpdGUtU3RhcnR1cExvZyAnU2Vy -dmVyIGJlZW5kZXQuJw0KfQ0K +dHJ1ZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc2NyaXB0OkdlbG9lc2NodGVy +RWludHJhZyA9ICRtDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgRGlzay1EYXRl +aSBudXIgc2Nob25lbiwgd2VubiBPcmlnaW5hbC1TeXN0ZW0tQXNzZXQgKHN5c3RlbT0kdHJ1ZSku +DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMgVXNlci1VcGxvYWRzIG1pdCBgcGZh +ZGAgKGluIEltYWdlcy88a2F0Pi8pIHdlcmRlbiBtaXQgZ2Vsb2VzY2h0Lg0KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAkSXN0U3lzdGVtQXNzZXQgPSAkbS5QU09iamVjdC5Qcm9wZXJ0 +aWVzWydzeXN0ZW0nXSAtYW5kIFtib29sXSRtLnN5c3RlbQ0KICAgICAgICAgICAgICAgICAgICAg +ICAgICAgICAgICBpZiAoLW5vdCAkSXN0U3lzdGVtQXNzZXQpIHsNCiAgICAgICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICREYXRlaSA9IEdldC1NZWRpZW5QZmFkICRtDQogICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoVGVzdC1QYXRoIC1MaXRlcmFsUGF0aCAkRGF0 +ZWkgLVBhdGhUeXBlIExlYWYpIHsgUmVtb3ZlLUl0ZW0gLUxpdGVyYWxQYXRoICREYXRlaSAtRXJy +b3JBY3Rpb24gU2lsZW50bHlDb250aW51ZSB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAg +ICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAg +ICAgICAgICAgICAgICAgICAgICAkTmV1ZUxpc3RlICs9ICRtDQogICAgICAgICAgICAgICAgICAg +ICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAg +ICAgICAgaWYgKCRzY3JpcHQ6Rm91bmQpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBX +cml0ZS1NZWRpZW5NZXRhIChbUFNDdXN0b21PYmplY3RdQHsgbWVkaWVuID0gJE5ldWVMaXN0ZSB9 +KQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9IHwgT3V0 +LU51bGwNCiAgICAgICAgICAgICAgICB9IGNhdGNoIHsNCiAgICAgICAgICAgICAgICAgICAgU2Vu +ZC1FcnJvciAkUmVzICIkXyIgNTAzOyBjb250aW51ZQ0KICAgICAgICAgICAgICAgIH0NCiAgICAg +ICAgICAgICAgICBpZiAoLW5vdCAkc2NyaXB0OkZvdW5kKSB7IFNlbmQtRXJyb3IgJFJlcyAnTmlj +aHQgZ2VmdW5kZW4nIDQwNDsgY29udGludWUgfQ0KICAgICAgICAgICAgICAgIFdyaXRlLUxvZ0Vp +bnRyYWcgJ21lZGllbi5nZWxvZXNjaHQnIEB7IGlkID0gJE1pZDsga2F0ZWdvcmllID0gJHNjcmlw +dDpHZWxvZXNjaHRlckVpbnRyYWcua2F0ZWdvcmllOyBiZXplaWNobnVuZyA9ICRzY3JpcHQ6R2Vs +b2VzY2h0ZXJFaW50cmFnLmJlemVpY2hudW5nIH0NCiAgICAgICAgICAgICAgICAkVXNlcm5hbWUg +PSAkZW52OlVTRVJOQU1FDQogICAgICAgICAgICAgICAgJFJvbGxlID0gR2V0LVVzZXJSb2xsZQ0K +ICAgICAgICAgICAgICAgIEFkZC1DaGFuZ2VMb2dFbnRyeSAnbWVkaWVuJyAkbnVsbCAkbnVsbCAk +bnVsbCAkVXNlcm5hbWUgJFJvbGxlIEB7IGFrdGlvbiA9ICdnZWxvZXNjaHQnOyBpZCA9ICRNaWQ7 +IGthdGVnb3JpZSA9ICRzY3JpcHQ6R2Vsb2VzY2h0ZXJFaW50cmFnLmthdGVnb3JpZTsgYmV6ZWlj +aG51bmcgPSAkc2NyaXB0OkdlbG9lc2NodGVyRWludHJhZy5iZXplaWNobnVuZyB9DQogICAgICAg +ICAgICAgICAgU2VuZC1Kc29uICRSZXMgQHsgc3RhdHVzID0gJ2dlbG9lc2NodCcgfQ0KICAgICAg +ICAgICAgICAgICRzY3JpcHQ6Rm91bmQgPSAkZmFsc2U7ICRzY3JpcHQ6R2Vsb2VzY2h0ZXJFaW50 +cmFnID0gJG51bGwNCiAgICAgICAgICAgICAgICBjb250aW51ZQ0KICAgICAgICAgICAgfQ0KDQog +ICAgICAgICAgICAjID09PT09PT09PT09PT09PT09PT09PSBTVEFUSVNDSEUgREFURUlFTiA9PT09 +PT09PT09PT09PT09PT09PT0NCiAgICAgICAgICAgICRSZWxQYXRoID0gJFBhdGguVHJpbVN0YXJ0 +KCcvJykNCiAgICAgICAgICAgIGlmIChbc3RyaW5nXTo6SXNOdWxsT3JXaGl0ZVNwYWNlKCRSZWxQ +YXRoKSkgeyAkUmVsUGF0aCA9ICdpbmRleC5odG1sJyB9DQogICAgICAgICAgICAkU2FmZVBhdGgg +PSBSZXNvbHZlLVNhZmVQYXRoICRSZWxQYXRoDQogICAgICAgICAgICBpZiAoJG51bGwgLWVxICRT +YWZlUGF0aCkgeyBTZW5kLUVycm9yICRSZXMgJ1p1Z3JpZmYgdmVyd2VpZ2VydCcgNDAzOyBjb250 +aW51ZSB9DQogICAgICAgICAgICBpZiAoKFRlc3QtUGF0aCAkU2FmZVBhdGgpIC1hbmQgLW5vdCAo +R2V0LUl0ZW0gJFNhZmVQYXRoKS5QU0lzQ29udGFpbmVyKSB7DQogICAgICAgICAgICAgICAgU2Vu +ZC1GaWxlICRSZXMgJFNhZmVQYXRoDQogICAgICAgICAgICB9IGVsc2VpZiAoJFJlbFBhdGggLWVx +ICdpbmRleC5odG1sJykgew0KICAgICAgICAgICAgICAgICMgRGlhZ25vc2UtU2VpdGUgc3RhdHQg +NDA0IC0gemVpZ3QgZGlyZWt0IGltIEJyb3dzZXIsIHdhcyBsb3MgaXN0DQogICAgICAgICAgICAg +ICAgJF9kaWFnSW5oYWx0ID0gJycNCiAgICAgICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAg +ICAgICAgICAkX2RpYWdGaWxlcyA9IEdldC1DaGlsZEl0ZW0gLVBhdGggJFJvb3QgLUZvcmNlIC1F +cnJvckFjdGlvbiBTaWxlbnRseUNvbnRpbnVlIHwgU2VsZWN0LU9iamVjdCAtRmlyc3QgMzAgfCBG +b3JFYWNoLU9iamVjdCB7ICc8bGk+JyArIFtTeXN0ZW0uV2ViLkh0dHBVdGlsaXR5XTo6SHRtbEVu +Y29kZSgkXy5OYW1lKSArICc8L2xpPicgfQ0KICAgICAgICAgICAgICAgICAgICAkX2RpYWdJbmhh +bHQgPSAkX2RpYWdGaWxlcyAtam9pbiAiYG4iDQogICAgICAgICAgICAgICAgfSBjYXRjaCB7ICRf +ZGlhZ0luaGFsdCA9ICc8bGk+KFZlcnplaWNobmlzIG5pY2h0IGxlc2Jhcik8L2xpPicgfQ0KICAg +ICAgICAgICAgICAgICRfZGlhZ0h0bWwgPSBAIg0KPCFkb2N0eXBlIGh0bWw+PGh0bWw+PGhlYWQ+ +PG1ldGEgY2hhcnNldD0idXRmLTgiPjx0aXRsZT5GTEQtU2VydmVyOiBpbmRleC5odG1sIG5pY2h0 +IGdlZnVuZGVuPC90aXRsZT4NCjxzdHlsZT5ib2R5e2ZvbnQtZmFtaWx5OlNlZ29lIFVJLHNhbnMt +c2VyaWY7YmFja2dyb3VuZDojZmFmYWZhO2NvbG9yOiMyMjI7cGFkZGluZzozMnB4O21heC13aWR0 +aDo3ODBweDttYXJnaW46YXV0b30NCmgxe2NvbG9yOiNiNzFjMWN9Y29kZXtiYWNrZ3JvdW5kOiNl +ZWU7cGFkZGluZzoycHggNnB4O2JvcmRlci1yYWRpdXM6M3B4fQ0KLmJveHtiYWNrZ3JvdW5kOiNm +ZmY7Ym9yZGVyOjFweCBzb2xpZCAjY2NjO3BhZGRpbmc6MTZweCAyMHB4O2JvcmRlci1yYWRpdXM6 +NHB4O21hcmdpbjoxNHB4IDB9DQoubGFiZWx7Zm9udC13ZWlnaHQ6NjAwO2NvbG9yOiM1NTV9dWx7 +Zm9udC1zaXplOjEzcHh9PC9zdHlsZT48L2hlYWQ+PGJvZHk+DQo8aDE+RkxELVNlcnZlcjogaW5k +ZXguaHRtbCBuaWNodCBnZWZ1bmRlbjwvaDE+DQo8cD5EZXIgU2VydmVyIGxhZXVmdCwga2FubiBh +YmVyIHVudGVyIGRlbSBrb25maWd1cmllcnRlbiBBcHAtUm9vdCBrZWluZSA8Y29kZT5pbmRleC5o +dG1sPC9jb2RlPiBmaW5kZW4uPC9wPg0KPGRpdiBjbGFzcz0iYm94Ij4NCiAgPGRpdj48c3BhbiBj +bGFzcz0ibGFiZWwiPkFrdHVlbGwgZ2VudXR6dGVyIFJvb3QtUGZhZDo8L3NwYW4+PGJyPjxjb2Rl +PiRSb290PC9jb2RlPjwvZGl2Pg0KICA8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOjhweCI+PHNwYW4g +Y2xhc3M9ImxhYmVsIj5RdWVsbGU6PC9zcGFuPiAkX3Jvb3RTcmM8L2Rpdj4NCiAgPGRpdiBzdHls +ZT0ibWFyZ2luLXRvcDo4cHgiPjxzcGFuIGNsYXNzPSJsYWJlbCI+Um9vdFBhdGgtUGFyYW06PC9z +cGFuPiA8Y29kZT4kKFtTeXN0ZW0uV2ViLkh0dHBVdGlsaXR5XTo6SHRtbEVuY29kZSgkUm9vdFBh +dGgpKTwvY29kZT48L2Rpdj4NCiAgPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDo4cHgiPjxzcGFuIGNs +YXNzPSJsYWJlbCI+UFNTY3JpcHRSb290Ojwvc3Bhbj4gPGNvZGU+JChbU3lzdGVtLldlYi5IdHRw +VXRpbGl0eV06Okh0bWxFbmNvZGUoJFBTU2NyaXB0Um9vdCkpPC9jb2RlPjwvZGl2Pg0KPC9kaXY+ +DQo8ZGl2IGNsYXNzPSJib3giPg0KICA8ZGl2IGNsYXNzPSJsYWJlbCI+SW5oYWx0IGRlcyBSb290 +LVBmYWRzIChtYXggMzAgRWludHJhZWdlKTo8L2Rpdj4NCiAgPHVsPiRfZGlhZ0luaGFsdDwvdWw+ +DQo8L2Rpdj4NCjxkaXYgY2xhc3M9ImJveCI+DQogIDxkaXYgY2xhc3M9ImxhYmVsIj5OYWVjaHN0 +ZSBTY2hyaXR0ZTo8L2Rpdj4NCiAgPG9sPg0KICAgIDxsaT5QcnVlZmUsIG9iIGltIGdlbmFubnRl +biBSb290LVBmYWQgZGllIERhdGVpIDxjb2RlPmluZGV4Lmh0bWw8L2NvZGU+IGxpZWd0LjwvbGk+ +DQogICAgPGxpPkZhbGxzIG5pY2h0OiBCYXQgYXVzIGRlbSBrb3JyZWt0ZW4gQXBwLU9yZG5lciBz +dGFydGVuIChuaWNodCBhdXMgZGVtIE5XLUhvbWUpLjwvbGk+DQogICAgPGxpPkZhbGxzIGRpZSBC +YXQgaW0gcmljaHRpZ2VuIE9yZG5lciBsaWVndDogU2lkZWNhci1EYXRlaSA8Y29kZT5hcHBfcm9v +dC50eHQ8L2NvZGU+IG5lYmVuIGRlbSBsb2thbGVuIDxjb2RlPnNlcnZlci5wczE8L2NvZGU+IHBy +dWVmZW4uPC9saT4NCiAgICA8bGk+Vm9sbHN0YWVuZGlnZXIgVHJhY2U6IDxjb2RlPiVURU1QJVxG +TERfc2VydmVyLmxvZzwvY29kZT4gYnp3LiA8Y29kZT4lVVNFUlBST0ZJTEUlXERlc2t0b3BcRkxE +X0ZFSExFUi5sb2c8L2NvZGU+LjwvbGk+DQogIDwvb2w+DQo8L2Rpdj4NCjwvYm9keT48L2h0bWw+ +DQoiQA0KICAgICAgICAgICAgICAgICRfYnl0ZXMgPSBbU3lzdGVtLlRleHQuRW5jb2RpbmddOjpV +VEY4LkdldEJ5dGVzKCRfZGlhZ0h0bWwpDQogICAgICAgICAgICAgICAgQWRkLVNlY3VyaXR5SGVh +ZGVycyAkUmVzDQogICAgICAgICAgICAgICAgJFJlcy5Db250ZW50VHlwZSA9ICd0ZXh0L2h0bWw7 +IGNoYXJzZXQ9dXRmLTgnDQogICAgICAgICAgICAgICAgJFJlcy5TdGF0dXNDb2RlID0gNTAzDQog +ICAgICAgICAgICAgICAgJFJlcy5Db250ZW50TGVuZ3RoNjQgPSAkX2J5dGVzLkxlbmd0aA0KICAg +ICAgICAgICAgICAgIFdyaXRlLVJlc3BvbnNlQnVmZmVyICRSZXMgJF9ieXRlcw0KICAgICAgICAg +ICAgICAgIFdyaXRlLVN0YXJ0dXBMb2cgIkRJQUctU2VpdGUgYXVzZ2VsaWVmZXJ0IChpbmRleC5o +dG1sIHVudGVyICckUm9vdCcgZmVobHQpIg0KICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAg +ICAgICAgICBTZW5kLUVycm9yICRSZXMgIk5pY2h0IGdlZnVuZGVuOiAkUmVsUGF0aCIgNDA0DQog +ICAgICAgICAgICB9DQoNCiAgICAgICAgfSBjYXRjaCB7DQogICAgICAgICAgICAjIFBoYXNlIEQ1 +OiBlcnJvcklkLVVVSUQgKyBTdGFja3RyYWNlIGlucyBMb2csIE5JQ0hUIGluIFJlc3BvbnNlDQog +ICAgICAgICAgICAkZXJyb3JJZCA9IE5ldy1FcnJvcklkDQogICAgICAgICAgICAkZGV0YWlsICA9 +ICIkXyB8IFplaWxlICQoJF8uSW52b2NhdGlvbkluZm8uU2NyaXB0TGluZU51bWJlcikgfCAkKCRf +Lkludm9jYXRpb25JbmZvLkxpbmUuVHJpbSgpKSINCiAgICAgICAgICAgIFdyaXRlLVN0YXJ0dXBM +b2cgIlJFUVVFU1QtRkVITEVSICRNZXRob2QgJFBhdGggZXJyb3JJZD0kZXJyb3JJZCA6ICRkZXRh +aWwiDQogICAgICAgICAgICB0cnkgew0KICAgICAgICAgICAgICAgIFNlbmQtSnNvbiAkUmVzIEB7 +DQogICAgICAgICAgICAgICAgICAgIGZlaGxlciAgPSAnaW50ZXJuZXJfc2VydmVyZmVobGVyJw0K +ICAgICAgICAgICAgICAgICAgICBtZWxkdW5nID0gJ0ludGVybmVyIFNlcnZlcmZlaGxlciAtIGJp +dHRlIG1pdCBkZXIgZXJyb3JJZCBhbiBTdXBlclVzZXIgbWVsZGVuLicNCiAgICAgICAgICAgICAg +ICAgICAgZXJyb3JJZCA9ICRlcnJvcklkDQogICAgICAgICAgICAgICAgfSA1MDANCiAgICAgICAg +ICAgIH0gY2F0Y2gge30NCiAgICAgICAgfQ0KICAgIH0NCn0gZmluYWxseSB7DQogICAgaWYgKCRM +aXN0ZW5lciAtYW5kICRMaXN0ZW5lci5Jc0xpc3RlbmluZykgeyAkTGlzdGVuZXIuU3RvcCgpIH0N +CiAgICBXcml0ZS1TdGFydHVwTG9nICdTZXJ2ZXIgYmVlbmRldC4nDQp9DQo= ### FILE: style.css | 163105 LyogPT09IFZJMyBER0wtUGxhbnVuZyDigJQgU3R5bGVzaGVldCAoRXhjZWwtdHJldWVzIExheW91 dCkgPT09ICovCgoqLCAqOjpiZWZvcmUsICo6OmFmdGVyIHsgYm94LXNpemluZzogYm9yZGVyLWJv