AgICAgICBlbGlmIHNlbGYubWFya2V0X3R5cGUgPT0g TWFya2V0VHlwZS5CRUFSOgogICAgICAgICAgICBpZiBkaXJlY3Rpb24gPT0gJ1NIT1JUJzoKICAg ICAgICAgICAgICAgICMgVHJlbmQtYWxpZ25lZCBzaG9ydCBpbiBiZWFyIG1hcmtldAogICAgICAg ICAgICAgICAgcGFyYW1zWydzaXplX211bHRpcGxpZXInXSAqPSAxLjIKICAgICAgICAgICAgICAg IHBhcmFtc1snbGV2ZXJhZ2UnXSA9IG1pbig1LCBwYXJhbXNbJ2xldmVyYWdlJ10gKyAxKQogICAg ICAgICAgICAgICAgcGFyYW1zWyd0cmFkZV9wYXR0ZXJuJ10gPSAndHJlbmRfcmlkZScKICAgICAg ICAgICAgICAgIHBhcmFtc1sncmVhc29uJ10gPSAnVHJlbmQtYWxpZ25lZCBpbiBiZWFyIG1hcmtl dCAtIHJpZGUgdGhlIHdhdmUnCiAgICAgICAgICAgIGVsc2U6CiAgICAgICAgICAgICAgICAjIENv dW50ZXItdHJlbmQgbG9uZyBpbiBiZWFyIC0gY2FyZWZ1bCBzaXppbmcKICAgICAgICAgICAgICAg IHBhcmFtc1snc2l6ZV9tdWx0aXBsaWVyJ10gKj0gMC41CiAgICAgICAgICAgICAgICBwYXJhbXNb J2xldmVyYWdlJ10gPSAyCiAgICAgICAgICAgICAgICBwYXJhbXNbJ3RyYWRlX3BhdHRlcm4nXSA9 ICdjb3VudGVyX3RyZW5kJwogICAgICAgICAgICAgICAgcGFyYW1zWydyZWFzb24nXSA9ICdDb3Vu dGVyLXRyZW5kIGluIGJlYXIgLSByZWR1Y2VkIHNpemUnCgogICAgICAgIGVsaWYgc2VsZi5tYXJr ZXRfdHlwZSA9PSBNYXJrZXRUeXBlLlNJREVXQVlTOgogICAgICAgICAgICAjIFNDQUxQSU5HIE1P REU6IFNpZGV3YXlzIG1hcmtldHMgYXJlIHBlcmZlY3QgZm9yIHNjYWxwaW5nCiAgICAgICAgICAg IHBhcmFtc1snc2l6ZV9tdWx0aXBsaWVyJ10gKj0gMC44ICAjIFNsaWdodGx5IHNtYWxsZXIgc2l6 ZQogICAgICAgICAgICBwYXJhbXNbJ2xldmVyYWdlJ10gPSAyICAjIExvd2VyIGxldmVyYWdlIGZv ciBxdWljayB0cmFkZXMKICAgICAgICAgICAgcGFyYW1zWyd0cmFkZV9wYXR0ZXJuJ10gPSAnc2Nh bHBfbW9kZScKICAgICAgICAgICAgcGFyYW1zWyd0YWtlX3Byb2ZpdF9zdHJhdGVneSddID0gJ3F1 aWNrX3NjYWxwJyAgIyBUYWtlIHF1aWNrIHByb2ZpdHMKICAgICAgICAgICAgcGFyYW1zWydzdG9w X3N0cmF0ZWd5J10gPSAndGlnaHQnICAjIFRpZ2h0IHN0b3BzIGZvciBxdWljayBleGl0CiAgICAg ICAgICAgIHBhcmFtc1snZW50cnlfdGltaW5nJ10gPSAndndhcF9yZXZlcnNpb24nICAjIEVudGVy IGF0IFZXQVAgZGV2aWF0aW9ucwogICAgICAgICAgICBwYXJhbXNbJ3JlYXNvbiddID0gJ1NDQUxQ IE1PREU6IFNpZGV3YXlzIG1hcmtldCAtIHF1aWNrIGluL291dCBhdCByYW5nZSBleHRyZW1lcycK ICAgICAgICAgICAgCiAgICAgICAgICAgICMgQ2hlY2sgZm9yIG1pY3JvLXN0cnVjdHVyZSByZXZl cnNhbCBzaWduYWxzCiAgICAgICAgICAgIHByaWNlcyA9IHNldHVwLmdldCgncHJpY2VzJywgW10p CiAgICAgICAgICAgIHZvbHVtZXMgPSBzZXR1cC5nZXQoJ3ZvbHVtZXMnLCBbXSkKICAgICAgICAg ICAgaWYgbGVuKHByaWNlcykgPj0gMTA6CiAgICAgICAgICAgICAgICBtaWNybyA9IGRldGVjdF9t aWNyb19zdHJ1Y3R1cmVfcmV2ZXJzYWwocHJpY2VzLCB2b2x1bWVzLCBsb29rYmFjaz01KQogICAg ICAgICAgICAgICAgaWYgbWljcm9bJ3JldmVyc2FsJ10gYW5kIG1pY3JvWydkaXJlY3Rpb24nXSA9 PSBkaXJlY3Rpb246CiAgICAgICAgICAgICAgICAgICAgcGFyYW1zWydjb25maWRlbmNlJ10gPSBt aW4oMC45LCBwYXJhbXNbJ2NvbmZpZGVuY2UnXSArIDAuMikKICAgICAgICAgICAgICAgICAgICBw YXJhbXNbJ3JlYXNvbiddICs9IGYiIHwgTWljcm8tcmV2ZXJzYWwgY29uZmlybWVkICh7JywgJy5q b2luKG1pY3JvWydzaWduYWxzJ11bOjJdKX0pIgoKICAgICAgICAjIFIvUiByYXRpbyBhZGp1c3Rt ZW50cwogICAgICAgIGlmIHNldHVwX3JyID49IDIuMDoKICAgICAgICAgICAgIyBIaWdoIFIvUiBz ZXR1cCAtIGNhbiBhZmZvcmQgbGFyZ2VyIHBvc2l0aW9uCiAgICAgICAgICAgIHBhcmFtc1snc2l6 ZV9tdWx0aXBsaWVyJ10gKj0gMS4xNQogICAgICAgICAgICBwYXJhbXNbJ3JlYXNvbiddICs9ICcg fCBIaWdoIFIvUiBib29zdCcKICAgICAgICBlbGlmIHNldHVwX3JyIDwgMS4wOgogICAgICAgICAg ICAjIExvdyBSL1IgLSByZWR1Y2Ugc2l6ZSBzaWduaWZpY2FudGx5CiAgICAgICAgICAgIHBhcmFt c1snc2l6ZV9tdWx0aXBsaWVyJ10gKj0gMC42CiAgICAgICAgICAgIHBhcmFtc1sncmVhc29uJ10g Kz0gJyB8IExvdyBSL1IgcGVuYWx0eScKCiAgICAgICAgIyBCcmVudC9PaWwgY29ycmVsYXRpb24g YWRqdXN0bWVudAogICAgICAgIGJyZW50X2NvcnIgPSBzZWxmLmdldF9icmVudF9jb3JyZWxhdGlv bihOb25lKQogICAgICAgIGlmIGJyZW50X2NvcnJbJ3NpZ25hbCddIGluIFsnc3Ryb25nX3Jpc2tf b24nLCAncmlza19vbiddIGFuZCBkaXJlY3Rpb24gPT0gJ0xPTkcnOgogICAgICAgICAgICBwYXJh bXNbJ3NpemVfbXVsdGlwbGllciddICo9IDEuMQogICAgICAgICAgICBwYXJhbXNbJ3JlYXNvbidd ICs9ICcgfCBPaWwgcmlzay1vbiBhbGlnbmVkJwogICAgICAgIGVsaWYgYnJlbnRfY29yclsnc2ln bmFsJ10gaW4gWydzdHJvbmdfcmlza19vZmYnLCAncmlza19vZmYnXSBhbmQgZGlyZWN0aW9uID09 ICdMT05HJzoKICAgICAgICAgICAgcGFyYW1zWydzaXplX211bHRpcGxpZXInXSAqPSAwLjg1CiAg ICAgICAgICAgIHBhcmFtc1sncmVhc29uJ10gKz0gJyB8IE9pbCByaXNrLW9mZiBjYXV0aW9uJwoK ICAgICAgICAjIEdyYWRlLWJhc2VkIHN0b3Agc3RyYXRlZ3kgLSBoaWdoIGdyYWRlcyBnZXQgbW9y ZSBicmVhdGhpbmcgcm9vbQogICAgICAgIGlmIHNldHVwX2dyYWRlIGluIFsnQSsnLCAnQScsICdB LSddOgogICAgICAgICAgICBwYXJhbXNbJ3N0b3Bfc3RyYXRlZ3knXSA9ICd3aWRlJyAgIyBXaWRl IHN0b3BzIGZvciBoaWdoIGNvbnZpY3Rpb24KICAgICAgICAgICAgcGFyYW1zWydyZWFzb24nXSAr PSAnIHwgV2lkZSBzdG9wIChoaWdoIGdyYWRlIGNvbmZpZGVuY2UpJwogICAgICAgIGVsaWYgc2V0 dXBfZ3JhZGUgaW4gWydCKycsICdCJywgJ0ItJ106CiAgICAgICAgICAgIHBhcmFtc1snc3RvcF9z dHJhdGVneSddID0gJ25vcm1hbCcgICMgTm9ybWFsIHN0b3BzCiAgICAgICAgZWxpZiBzZXR1cF9n cmFkZSBpbiBbJ0MrJywgJ0MnLCAnQy0nXToKICAgICAgICAgICAgcGFyYW1zWydzdG9wX3N0cmF0 ZWd5J10gPSAnbm9ybWFsJyAgIyBOb3JtYWwgc3RvcHMKCiAgICAgICAgIyBHcmFkZSBGL0Qgc3Bl Y2lhbCBoYW5kbGluZyAtIElNUFJPVkVEOiBsZXNzIGFnZ3Jlc3NpdmUgcmVkdWN0aW9uCiAgICAg ICAgaWYgc2V0dXBfZ3JhZGUgaW4gWydGJywgJ0QnLCAnRCsnXToKICAgICAgICAgICAgcGFyYW1z WydzaXplX211bHRpcGxpZXInXSAqPSAwLjcgICMgV2FzIDAuNCAtIGJldHRlciBzaXppbmcgZm9y IGxvdyBncmFkZXMKICAgICAgICAgICAgcGFyYW1zWydsZXZlcmFnZSddID0gMiAgIyBXYXMgMSAt IGFsbG93IHNvbWUgbGV2ZXJhZ2UKICAgICAgICAgICAgcGFyYW1zWyd0cmFkZV9wYXR0ZXJuJ10g PSAnc3RhbmRhcmQnICAjIFdhcyAnbG90dGVyeV90aWNrZXQnIC0gdXNlIHN0YW5kYXJkIHBhdHRl cm4KICAgICAgICAgICAgcGFyYW1zWydzdG9wX3N0cmF0ZWd5J10gPSAnbm9ybWFsJyAgIyBXYXMg J3RpZ2h0JyAtIG5vcm1hbCBzdG9wcwogICAgICAgICAgICBwYXJhbXNbJ3JlYXNvbiddID0gZidH cmFkZSB7c2V0dXBfZ3JhZGV9IHNldHVwIC0gcmVkdWNlZCBidXQgdHJhZGFibGUnCgogICAgICAg ICMgVm9sYXRpbGl0eSBjbHVzdGVyaW5nIGFkanVzdG1lbnQKICAgICAgICB2b2xfY2x1c3RlciA9 IHNlbGYuZGV0ZWN0X3ZvbGF0aWxpdHlfY2x1c3RlcmluZyhzZXR1cC5nZXQoJ3ByaWNlcycsIFtd KSkKICAgICAgICBpZiB2b2xfY2x1c3RlclsncmVnaW1lJ10gPT0gJ2hpZ2hfdm9sX2NsdXN0ZXJp bmcnOgogICAgICAgICAgICBwYXJhbXNbJ3NpemVfbXVsdGlwbGllciddICo9IDAuNwogICAgICAg ICAgICBwYXJhbXNbJ2xldmVyYWdlJ10gPSBtYXgoMSwgcGFyYW1zWydsZXZlcmFnZSddIC0gMSkK ICAgICAgICAgICAgcGFyYW1zWydyZWFzb24nXSArPSAnIHwgSGlnaCB2b2wgY2x1c3RlcmluZycK CiAgICAgICAgIyBGaW5hbCBjbGFtcAogICAgICAgIHBhcmFtc1snc2l6ZV9tdWx0aXBsaWVyJ10g PSBtYXgoMC4xLCBtaW4oMi4wLCBwYXJhbXNbJ3NpemVfbXVsdGlwbGllciddKSkKICAgICAgICBw YXJhbXNbJ2xldmVyYWdlJ10gPSBtYXgoMSwgbWluKDUsIHBhcmFtc1snbGV2ZXJhZ2UnXSkpCgog ICAgICAgIHJldHVybiBwYXJhbXMKCiAgICBkZWYgY2FsY3VsYXRlX3JlZ2ltZV90cmFuc2l0aW9u X3Byb2JhYmlsaXR5KHNlbGYpOgogICAgICAgICIiIgogICAgICAgIENhbGN1bGF0ZSBwcm9iYWJp bGl0eSBvZiBtYXJrZXQgcmVnaW1lIHRyYW5zaXRpb24gYmFzZWQgb24gaW5kaWNhdG9ycy4KICAg ICAgICBIaWdoIHByb2JhYmlsaXR5IG1lYW5zIHJlZ2ltZSBjaGFuZ2UgaXMgbGlrZWx5IC0gcmVk dWNlIGV4cG9zdXJlLgogICAgICAgICIiIgogICAgICAgIGlmIGxlbihzZWxmLnZvbGF0aWxpdHlf aGlzdG9yeSkgPCA1OgogICAgICAgICAgICByZXR1cm4gMC4wCgogICAgICAgICMgQ2FsY3VsYXRl IHZvbGF0aWxpdHkgb2Ygdm9sYXRpbGl0eQogICAgICAgIHZvbF9vZl92b2wgPSBzdGF0aXN0aWNz LnN0ZGV2KHNlbGYudm9sYXRpbGl0eV9oaXN0b3J5KSBpZiBsZW4oc2VsZi52b2xhdGlsaXR5X2hp c3RvcnkpID4gMSBlbHNlIDAKCiAgICAgICAgIyBIaWdoIHZvbCBvZiB2b2wgbWVhbnMgdW5zdGFi bGUgcmVnaW1lCiAgICAgICAgdHJhbnNpdGlvbl9wcm9iID0gbWluKDAuOSwgdm9sX29mX3ZvbCAv IDUpCgogICAgICAgICMgQWRqdXN0IGJ5IFZJWCBsZXZlbAogICAgICAgIHZpeCA9IHNlbGYuZ2V0 X3ZpeCgpCiAgICAgICAgaWYgdml4LmdldCgnbGV2ZWwnKSA9PSAnSElHSCc6CiAgICAgICAgICAg IHRyYW5zaXRpb25fcHJvYiA9IG1pbigwLjk1LCB0cmFuc2l0aW9uX3Byb2IgKyAwLjIpCgogICAg ICAgIHNlbGYucmVnaW1lX3RyYW5zaXRpb25fcHJvYmFiaWxpdHkgPSB0cmFuc2l0aW9uX3Byb2IK ICAgICAgICByZXR1cm4gdHJhbnNpdGlvbl9wcm9iCgogICAgIyA9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAg ICMgRU5IQU5DRUQgREFUQSBGRUVEUwogICAgIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgICBkZWYgYW5h bHl6ZShzZWxmLCBwcmljZXM9Tm9uZSwgY3VycmVudF9wbmw9MC4wKToKICAgICAgICAiIiIKICAg ICAgICBDb21wbGV0ZSBtYXJrZXQgYW5hbHlzaXMgZm9yIDI0LzcgdHJhZGluZwogICAgICAgICIi IgogICAgICAgIHNlbGYuZGFpbHlfcG5sID0gY3VycmVudF9wbmwKCiAgICAgICAgIyBHZXQgbWFj cm8gZGF0YQogICAgICAgIGR4eSA9IHNlbGYuZ2V0X2R4eSgpCiAgICAgICAgb2lsID0gc2VsZi5n ZXRfb2lsKCkKICAgICAgICB2aXggPSBzZWxmLmdldF92aXgoKQoKICAgICAgICAjIERldGVjdCBt YXJrZXQgdHlwZQogICAgICAgIGlmIHByaWNlcyBhbmQgbGVuKHByaWNlcykgPj0gNTA6CiAgICAg ICAgICAgIG1hcmtldF9pbmZvID0gc2VsZi5kZXRlY3RfbWFya2V0X3R5cGUocHJpY2VzKQogICAg ICAgIGVsc2U6CiAgICAgICAgICAgIG1hcmtldF9pbmZvID0geyd0eXBlJzogTWFya2V0VHlwZS5T SURFV0FZUywgJ2NvbmZpZGVuY2UnOiAwLjV9CgogICAgICAgIHNlbGYubWFya2V0X3R5cGUgPSBt YXJrZXRfaW5mb1sndHlwZSddCgogICAgICAgICMgU2VsZWN0IHN0cmF0ZWd5CiAgICAgICAgc3Ry YXRlZ3kgPSBzZWxmLnNlbGVjdF9zdHJhdGVneSgKICAgICAgICAgICAgbWFya2V0X2luZm9bJ3R5 cGUnXSwKICAgICAgICAgICAgbWFya2V0X2luZm8uZ2V0KCd2b2xhdGlsaXR5JywgMyksCiAgICAg ICAgICAgIG1hcmtldF9pbmZvLmdldCgndHJlbmRfc3RyZW5ndGgnLCAwLjUpCiAgICAgICAgKQoK ICAgICAgICBzZWxmLnByaW1hcnlfc3RyYXRlZ3kgPSBzdHJhdGVneVsncHJpbWFyeSddCiAgICAg ICAgc2VsZi5zZWNvbmRhcnlfc3RyYXRlZ3kgPSBzdHJhdGVneVsnc2Vjb25kYXJ5J10KICAgICAg ICBzZWxmLm1hcmtldF9iaWFzID0gc3RyYXRlZ3lbJ2JpYXMnXQoKICAgICAgICAjIENhbGN1bGF0 ZSBtYWNybyBzY29yZQogICAgICAgIG1hY3JvX3Njb3JlID0gMAoKICAgICAgICAjIERYWSBpbXBh Y3QKICAgICAgICBpZiBkeHlbJ2NoYW5nZV9wY3QnXSA+IDAuNTogbWFjcm9fc2NvcmUgLT0gMgog ICAgICAgIGVsaWYgZHh5WydjaGFuZ2VfcGN0J10gPCAtMC41OiBtYWNyb19zY29yZSArPSAyCgog ICAgICAgICMgT2lsIGltcGFjdAogICAgICAgIGlmIG9pbFsnY2hhbmdlX3BjdCddID4gMjogbWFj cm9fc2NvcmUgKz0gMQogICAgICAgIGVsaWYgb2lsWydjaGFuZ2VfcGN0J10gPCAtMjogbWFjcm9f c2NvcmUgLT0gMQoKICAgICAgICAjIFZJWCBpbXBhY3QKICAgICAgICBpZiB2aXhbJ2xldmVsJ10g PT0gJ0hJR0gnOiBtYWNyb19zY29yZSAtPSAxCiAgICAgICAgZWxpZiB2aXhbJ2xldmVsJ10gPT0g J0xPVyc6IG1hY3JvX3Njb3JlICs9IDEKCiAgICAgICAgIyBDb21iaW5lIHdpdGggbWFya2V0IHR5 cGUKICAgICAgICB0eXBlX3Njb3JlcyA9IHsKICAgICAgICAgICAgTWFya2V0VHlwZS5CVUxMOiAz LAogICAgICAgICAgICBNYXJrZXRUeXBlLkJFQVI6IC0zLAogICAgICAgICAgICBNYXJrZXRUeXBl LlNJREVXQVlTOiAwLAogICAgICAgICAgICBNYXJrZXRUeXBlLlZPTEFUSUxFOiAwCiAgICAgICAg fQoKICAgICAgICB0b3RhbF9zY29yZSA9IG1hY3JvX3Njb3JlICsgdHlwZV9zY29yZXMuZ2V0KHNl bGYubWFya2V0X3R5cGUsIDApCiAgICAgICAgc2VsZi5jb21iaW5lZF9zY29yZSA9IHRvdGFsX3Nj b3JlCgogICAgICAgICMgUmlzayBtb2RlCiAgICAgICAgaWYgb2lsWydjaGFuZ2VfcGN0J10gPiAx LjUgYW5kIGR4eVsnY2hhbmdlX3BjdCddIDwgMDoKICAgICAgICAgICAgc2VsZi5yaXNrX21vZGUg PSAnUklTS19PTicKICAgICAgICBlbGlmIG9pbFsnY2hhbmdlX3BjdCddIDwgLTIgb3Igdml4Wyds ZXZlbCddIGluIFsnSElHSCcsICdFWFRSRU1FJ106CiAgICAgICAgICAgIHNlbGYucmlza19tb2Rl ID0gJ1JJU0tfT0ZGJwogICAgICAgIGVsc2U6CiAgICAgICAgICAgIHNlbGYucmlza19tb2RlID0g J05FVVRSQUwnCgogICAgICAgICMgVm9sYXRpbGl0eSByZWdpbWUKICAgICAgICB2b2wgPSBtYXJr ZXRfaW5mby5nZXQoJ3ZvbGF0aWxpdHknLCAzKQogICAgICAgIGlmIHZvbCA8IDI6IHNlbGYudm9s YXRpbGl0eV9yZWdpbWUgPSAnTE9XJwogICAgICAgIGVsaWYgdm9sIDwgNTogc2VsZi52b2xhdGls aXR5X3JlZ2ltZSA9ICdOT1JNQUwnCiAgICAgICAgZWxpZiB2b2wgPCA4OiBzZWxmLnZvbGF0aWxp dHlfcmVnaW1lID0gJ0hJR0gnCiAgICAgICAgZWxzZTogc2VsZi52b2xhdGlsaXR5X3JlZ2ltZSA9 ICdFWFRSRU1FJwoKICAgICAgICAjIENvbmZpZGVuY2UKICAgICAgICBzZWxmLmNvbmZpZGVuY2Ug PSBtYXJrZXRfaW5mb1snY29uZmlkZW5jZSddCiAgICAgICAgc2VsZi5sYXN0X3VwZGF0ZSA9IGRh dGV0aW1lLm5vdygpCgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICdtYXJrZXRfdHlwZSc6 IHNlbGYubWFya2V0X3R5cGUudmFsdWUsCiAgICAgICAgICAgICdwcmltYXJ5X3N0cmF0ZWd5Jzog c2VsZi5wcmltYXJ5X3N0cmF0ZWd5LnZhbHVlLAogICAgICAgICAgICAnc2Vjb25kYXJ5X3N0cmF0 ZWd5Jzogc2VsZi5zZWNvbmRhcnlfc3RyYXRlZ3kudmFsdWUgaWYgc2VsZi5zZWNvbmRhcnlfc3Ry YXRlZ3kgZWxzZSBOb25lLAogICAgICAgICAgICAnYmlhcyc6IHNlbGYubWFya2V0X2JpYXMsCiAg ICAgICAgICAgICdyaXNrX21vZGUnOiBzZWxmLnJpc2tfbW9kZSwKICAgICAgICAgICAgJ3ZvbGF0 aWxpdHlfcmVnaW1lJzogc2VsZi52b2xhdGlsaXR5X3JlZ2ltZSwKICAgICAgICAgICAgJ3Njb3Jl JzogdG90YWxfc2NvcmUsCiAgICAgICAgICAgICdjb25maWRlbmNlJzogcm91bmQoc2VsZi5jb25m aWRlbmNlLCAyKSwKICAgICAgICAgICAgJ2R4eSc6IGR4eSwKICAgICAgICAgICAgJ29pbCc6IG9p bCwKICAgICAgICAgICAgJ3ZpeCc6IHZpeCwKICAgICAgICAgICAgJ3N1cHBvcnQnOiBtYXJrZXRf aW5mby5nZXQoJ3N1cHBvcnQnKSwKICAgICAgICAgICAgJ3Jlc2lzdGFuY2UnOiBtYXJrZXRfaW5m by5nZXQoJ3Jlc2lzdGFuY2UnKSwKICAgICAgICAgICAgJ3N0cmF0ZWd5X2NvbmZpZyc6IHN0cmF0 ZWd5CiAgICAgICAgfQoKICAgICMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAjIEVOSEFOQ0VEIFRSQURJ TkcgREVDSVNJT05TIC0gU1RSQVRFR0lTVCwgTk9UIEdBVEVLRUVQRVIKICAgICMgPT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09CgogICAgZGVmIHNob3VsZF90cmFkZV9zZXR1cChzZWxmLCBzZXR1cCwgb3Blbl9wb3Np dGlvbnM9Tm9uZSk6CiAgICAgICAgIiIiCiAgICAgICAgQW5hbHl6ZSBzZXR1cCBmb3Igb3B0aW1h bCB0cmFkaW5nIHBhcmFtZXRlcnMuCgogICAgICAgIFBISUxPU09QSFk6IE1hcmtldCBCcmFpbiBp cyBhIFNUUkFURUdJU1QsIG5vdCBhIGdhdGVrZWVwZXIuCiAgICAgICAgSXQgZGVjaWRlcyBIT1cg dG8gdHJhZGUsIG5vdCBJRiB0byB0cmFkZS4KCiAgICAgICAgQUxMIHNldHVwcyBwYXNzIHRocm91 Z2ggLSB3ZSBqdXN0IG9wdGltaXplIHRoZSB0cmFkZSBwYXR0ZXJuOgogICAgICAgIC0gUG9zaXRp b24gc2l6ZSAoS2VsbHkgQ3JpdGVyaW9uIGJhc2VkKQogICAgICAgIC0gTGV2ZXJhZ2UgKG1hcmtl dCByZWdpbWUgYWRqdXN0ZWQpCiAgICAgICAgLSBFbnRyeSB0aW1pbmcgKGltbWVkaWF0ZSB2cyBz dGFnZ2VyZWQpCiAgICAgICAgLSBTdG9wIHN0cmF0ZWd5IChub3JtYWwgdnMgdGlnaHQpCiAgICAg ICAgLSBUUCBzdHJhdGVneSAoc3RhbmRhcmQgdnMgYWdncmVzc2l2ZSkKCiAgICAgICAgUmV0dXJu czogKHNob3VsZF90cmFkZSwgcmVhc29uLCB0cmFkZV9wYXJhbXMpCiAgICAgICAgLSBzaG91bGRf dHJhZGU6IEFsd2F5cyBUcnVlICh1bmxlc3MgZGFpbHkgbG9zcyBsaW1pdCBoaXQpCiAgICAgICAg LSByZWFzb246IERldGFpbGVkIGV4cGxhbmF0aW9uIG9mIHRyYWRlIHBhdHRlcm4KICAgICAgICAt IHRyYWRlX3BhcmFtczogRGljdCB3aXRoIG9wdGltaXplZCB0cmFkaW5nIHBhcmFtZXRlcnMKICAg ICAgICAiIiIKICAgICAgICBvcGVuX3Bvc2l0aW9ucyA9IG9wZW5fcG9zaXRpb25zIG9yIFtdCgog ICAgICAgICMgR2V0IGJhc2UgdHJhZGVhYmlsaXR5IGFuYWx5c2lzCiAgICAgICAgdHJhZGVfcGFy YW1zID0gc2VsZi5hbmFseXplX3NldHVwX3RyYWRlYWJpbGl0eShzZXR1cCwgc2VsZi5nZXRfbWFy a2V0X3N0YXRlKCkpCgogICAgICAgICMgQ2hlY2sgZGFpbHkgbG9zcyBsaW1pdCAtIE9OTFkgaGFy ZCBmaWx0ZXIKICAgICAgICBpZiBzZWxmLmRhaWx5X3BubCA8IHNlbGYubWF4X2RhaWx5X2xvc3M6 CiAgICAgICAgICAgIHRyYWRlX3BhcmFtc1snc2hvdWxkX3RyYWRlJ10gPSBGYWxzZQogICAgICAg ICAgICB0cmFkZV9wYXJhbXNbJ3JlYXNvbiddID0gZiJEYWlseSBsb3NzIGxpbWl0OiB7c2VsZi5k YWlseV9wbmw6LjElfSIKICAgICAgICAgICAgcmV0dXJuIEZhbHNlLCAiRGFpbHkgbG9zcyBsaW1p dCByZWFjaGVkIiwgdHJhZGVfcGFyYW1zCgogICAgICAgICMgQnVpbGQgcmVhc29uIHN0cmluZyB3 aXRoIGtleSBkZXRhaWxzCiAgICAgICAgZGlyZWN0aW9uID0gc2V0dXAuZ2V0KCdkaXJlY3Rpb24n LCAnTE9ORycpCiAgICAgICAgZ3JhZGUgPSBzZXR1cC5nZXQoJ2dyYWRlJywgJ0MnKQogICAgICAg IHBhaXIgPSBzZXR1cC5nZXQoJ3BhaXInLCAnJykKCiAgICAgICAgcmVhc29uX3BhcnRzID0gWwog ICAgICAgICAgICBmIlt7cGFpcn1dIHtkaXJlY3Rpb259IEdyYWRlIHtncmFkZX0iLAogICAgICAg ICAgICBmIlNpemU6IHt0cmFkZV9wYXJhbXNbJ3NpemVfbXVsdGlwbGllciddOi4yZn14IiwKICAg ICAgICAgICAgZiJMZXY6IHt0cmFkZV9wYXJhbXNbJ2xldmVyYWdlJ119eCIsCiAgICAgICAgICAg IGYiUGF0dGVybjoge3RyYWRlX3BhcmFtc1sndHJhZGVfcGF0dGVybiddfSIKICAgICAgICBdCgog ICAgICAgICMgQWRkIHNwZWNpYWwgbm90ZXMKICAgICAgICBub3RlcyA9IFtdCiAgICAgICAgaWYg dHJhZGVfcGFyYW1zWyd0cmFkZV9wYXR0ZXJuJ10gPT0gJ2xvdHRlcnlfdGlja2V0JzoKICAgICAg ICAgICAgbm90ZXMuYXBwZW5kKCJMT1RURVJZIChsb3cgZ3JhZGUpIikKICAgICAgICBlbGlmIHRy YWRlX3BhcmFtc1sndHJhZGVfcGF0dGVybiddID09ICd0cmVuZF9yaWRlJzoKICAgICAgICAgICAg bm90ZXMuYXBwZW5kKCJUUkVORCBSSURFIikKICAgICAgICBlbGlmIHRyYWRlX3BhcmFtc1sndHJh ZGVfcGF0dGVybiddID09ICdjb3VudGVyX3RyZW5kJzoKICAgICAgICAgICAgbm90ZXMuYXBwZW5k KCJDT1VOVEVSLVRSRU5EIChjYXJlZnVsKSIpCgogICAgICAgIGlmIG5vdGVzOgogICAgICAgICAg ICByZWFzb25fcGFydHMuYXBwZW5kKCIgfCAiLmpvaW4obm90ZXMpKQoKICAgICAgICB0cmFkZV9w YXJhbXNbJ3JlYXNvbiddID0gIiB8ICIuam9pbihyZWFzb25fcGFydHMpCgogICAgICAgIHJldHVy biBUcnVlLCB0cmFkZV9wYXJhbXNbJ3JlYXNvbiddLCB0cmFkZV9wYXJhbXMKCiAgICBkZWYgZ2V0 X21hcmtldF9zdGF0ZShzZWxmKToKICAgICAgICAiIiJHZXQgY3VycmVudCBtYXJrZXQgc3RhdGUg Zm9yIGFuYWx5c2lzIiIiCiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgJ21hcmtldF90eXBl Jzogc2VsZi5tYXJrZXRfdHlwZSwKICAgICAgICAgICAgJ3ZvbGF0aWxpdHlfcmVnaW1lJzogc2Vs Zi52b2xhdGlsaXR5X3JlZ2ltZSwKICAgICAgICAgICAgJ3Jpc2tfbW9kZSc6IHNlbGYucmlza19t b2RlLAogICAgICAgICAgICAnYmlhcyc6IHNlbGYubWFya2V0X2JpYXMsCiAgICAgICAgICAgICdj b25maWRlbmNlJzogc2VsZi5jb25maWRlbmNlLAogICAgICAgICAgICAnZHh5Jzogc2VsZi5nZXRf ZHh5KCksCiAgICAgICAgICAgICdvaWwnOiBzZWxmLmdldF9vaWwoKSwKICAgICAgICAgICAgJ3Zp eCc6IHNlbGYuZ2V0X3ZpeCgpLAogICAgICAgICAgICAnYnJlbnRfY29ycic6IHNlbGYuZ2V0X2Jy ZW50X2NvcnJlbGF0aW9uKE5vbmUpLAogICAgICAgICAgICAncmVnaW1lX3RyYW5zaXRpb25fcHJv Yic6IHNlbGYuY2FsY3VsYXRlX3JlZ2ltZV90cmFuc2l0aW9uX3Byb2JhYmlsaXR5KCkKICAgICAg ICB9CgogICAgZGVmIGdldF9wb3NpdGlvbl9wYXJhbXMoc2VsZiwgYmFzZV9zaXplPTEuMCwgc2V0 dXA9Tm9uZSk6CiAgICAgICAgIiIiCiAgICAgICAgR2V0IHBvc2l0aW9uIHNpemluZyBhbmQgcmlz ayBwYXJhbWV0ZXJzIGZvciBhIHNwZWNpZmljIHRyYWRlLgogICAgICAgIElmIHNldHVwIHByb3Zp ZGVkLCB1c2VzIEtlbGx5IENyaXRlcmlvbiBzaXppbmcuCiAgICAgICAgIiIiCiAgICAgICAgaWYg c2V0dXA6CiAgICAgICAgICAgICMgVXNlIEtlbGx5LWJhc2VkIHNpemluZyBmb3IgdGhpcyBzcGVj aWZpYyBzZXR1cAogICAgICAgICAgICByZXR1cm4gc2VsZi5hbmFseXplX3NldHVwX3RyYWRlYWJp bGl0eShzZXR1cCwgc2VsZi5nZXRfbWFya2V0X3N0YXRlKCkpCgogICAgICAgICMgRmFsbGJhY2sg dG8gZ2VuZXJhbCBtYXJrZXQtYmFzZWQgc2l6aW5nCiAgICAgICAgc2l6ZV9tdWx0ID0gMS4wCgog ICAgICAgICMgTWFya2V0IHR5cGUgYWRqdXN0bWVudAogICAgICAgIGlmIHNlbGYubWFya2V0X3R5 cGUgaW4gW01hcmtldFR5cGUuQlVMTCwgTWFya2V0VHlwZS5CRUFSXToKICAgICAgICAgICAgc2l6 ZV9tdWx0ICo9IDEuMgogICAgICAgIGVsaWYgc2VsZi5tYXJrZXRfdHlwZSA9PSBNYXJrZXRUeXBl LlZPTEFUSUxFOgogICAgICAgICAgICBzaXplX211bHQgKj0gMC42CgogICAgICAgICMgUmlzayBt b2RlIGFkanVzdG1lbnQKICAgICAgICBpZiBzZWxmLnJpc2tfbW9kZSA9PSAnUklTS19PTic6CiAg ICAgICAgICAgIHNpemVfbXVsdCAqPSAxLjMKICAgICAgICBlbGlmIHNlbGYucmlza19tb2RlID09 ICdSSVNLX09GRic6CiAgICAgICAgICAgIHNpemVfbXVsdCAqPSAwLjYKCiAgICAgICAgIyBDb25m aWRlbmNlIGFkanVzdG1lbnQKICAgICAgICBpZiBzZWxmLmNvbmZpZGVuY2UgPiAwLjg6CiAgICAg ICAgICAgIHNpemVfbXVsdCAqPSAxLjE1CiAgICAgICAgZWxpZiBzZWxmLmNvbmZpZGVuY2UgPCAw LjU6CiAgICAgICAgICAgIHNpemVfbXVsdCAqPSAwLjgKCiAgICAgICAgIyBEYWlseSBQTkwgYWRq dXN0bWVudAogICAgICAgIGlmIHNlbGYuZGFpbHlfcG5sID4gMC4wNToKICAgICAgICAgICAgc2l6 ZV9tdWx0ICo9IDEuMQogICAgICAgIGVsaWYgc2VsZi5kYWlseV9wbmwgPCAtMC4wMjoKICAgICAg ICAgICAgc2l6ZV9tdWx0ICo9IDAuOAoKICAgICAgICAjIFJlZ2ltZSB0cmFuc2l0aW9uIGFkanVz dG1lbnQKICAgICAgICBpZiBzZWxmLnJlZ2ltZV90cmFuc2l0aW9uX3Byb2JhYmlsaXR5ID4gMC43 OgogICAgICAgICAgICBzaXplX211bHQgKj0gMC43ICAjIFJlZHVjZSBzaXplIGluIHVuc3RhYmxl IHJlZ2ltZXMKCiAgICAgICAgIyBMZXZlcmFnZSBzdWdnZXN0aW9uCiAgICAgICAgbGV2ZXJhZ2Ug PSB7CiAgICAgICAgICAgIE1hcmtldFR5cGUuQlVMTDogMywKICAgICAgICAgICAgTWFya2V0VHlw ZS5CRUFSOiAzLAogICAgICAgICAgICBNYXJrZXRUeXBlLlNJREVXQVlTOiAyLAogICAgICAgICAg ICBNYXJrZXRUeXBlLlZPTEFUSUxFOiAxCiAgICAgICAgfS5nZXQoc2VsZi5tYXJrZXRfdHlwZSwg MikKCiAgICAgICAgIyBBZGp1c3QgbGV2ZXJhZ2UgYnkgdm9sYXRpbGl0eQogICAgICAgIGlmIHNl bGYudm9sYXRpbGl0eV9yZWdpbWUgPT0gJ0hJR0gnOgogICAgICAgICAgICBsZXZlcmFnZSA9IG1h eCgxLCBsZXZlcmFnZSAtIDEpCiAgICAgICAgZWxpZiBzZWxmLnZvbGF0aWxpdHlfcmVnaW1lID09 ICdMT1cnOgogICAgICAgICAgICBsZXZlcmFnZSA9IG1pbig1LCBsZXZlcmFnZSArIDEpCgogICAg ICAgIGZpbmFsX3NpemUgPSBiYXNlX3NpemUgKiBzaXplX211bHQKCiAgICAgICAgcmV0dXJuIHsK ICAgICAgICAgICAgJ3NpemVfbXVsdGlwbGllcic6IHJvdW5kKHNpemVfbXVsdCwgMiksCiAgICAg ICAgICAgICdwb3NpdGlvbl9zaXplJzogcm91bmQoZmluYWxfc2l6ZSwgMiksCiAgICAgICAgICAg ICdsZXZlcmFnZSc6IGxldmVyYWdlLAogICAgICAgICAgICAnbWF4X2NvbmN1cnJlbnQnOiAzIGlm IHNlbGYubWFya2V0X3R5cGUgIT0gTWFya2V0VHlwZS5WT0xBVElMRSBlbHNlIDIsCiAgICAgICAg ICAgICdzdG9wX2xvc3NfcGN0JzogMC4wMiBpZiBzZWxmLnZvbGF0aWxpdHlfcmVnaW1lID09ICdO T1JNQUwnIGVsc2UgMC4wMTUgaWYgc2VsZi52b2xhdGlsaXR5X3JlZ2ltZSA9PSAnSElHSCcgZWxz ZSAwLjAyNSwKICAgICAgICAgICAgJ3RyYWRlX3BhdHRlcm4nOiAnc3RhbmRhcmQnLAogICAgICAg ICAgICAnZW50cnlfdGltaW5nJzogJ2ltbWVkaWF0ZScsCiAgICAgICAgICAgICdzdG9wX3N0cmF0 ZWd5JzogJ25vcm1hbCcsCiAgICAgICAgICAgICd0YWtlX3Byb2ZpdF9zdHJhdGVneSc6ICdzdGFu ZGFyZCcKICAgICAgICB9CgoKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyBJTlRFR1JBVElPTiBFWEFNUExF CiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09CiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKCgoKVFJBRElOR19EQVlT ID0gWydUdWVzZGF5JywgJ1RodXJzZGF5J10KRU5UUllfVElNRSA9ICgxNSwgMzApCkVYSVRfVElN RSA9ICgxNiwgMCkKQ1BJX0JVRkZFUl9IT1VSUyA9IDE4CgoKQklOQU5DRV9GQVBJID0gImh0dHBz Oi8vZmFwaS5iaW5hbmNlLmNvbSIKCgoKClRPUF9QQUlSUyA9IFsKICAgICMgPT09IFZBTElEIEJJ TkFOQ0UgRlVUVVJFUyBQQUlSUyAoVmVyaWZpZWQpID09PQogICAgJ0JUQ1VTREMnLCAnRVRIVVNE QycsICdCTkJVU0RDJywgJ1NPTFVTREMnLCAnWFJQVVNEQycsCiAgICAnQURBVVNEQycsICdET0dF VVNEQycsICdMSU5LVVNEQycsICdMVENVU0RDJywgJ1VOSVVTREMnLAogICAgJ0ZJTFVTREMnLCAn QVJCVVNEQycsICdBQVZFVVNEQycsICdBVkFYVVNEQycsICdGVE1VU0RDJywKICAgICdORU9VU0RD JywgJ0VUQ1VTREMnLCAnRU9TVVNEQycsICdYTE1VU0RDJywgJ1ZFVFVTREMnLAogICAgJ1hUWlVT REMnLCAnQUxHT1VTREMnLCAnU0FORFVTREMnLCAnTUFOQVVTREMnLCAnQVhTVVNEQycsCiAgICAn Q09NUFVTREMnLCAnQ1JWVVNEQycsICdTTlhVU0RDJywgJ01LUlVTREMnLCAnQ0haVVNEQycsCiAg ICAnR1JUVVNEQycsICdTSElCVVNEQycsICdQRVBFVVNEQycsICdGTE9LSVVTREMnLCAnQk9OS1VT REMnLAogICAgJ0RZRFhVU0RDJywgJ1NVU0hJVVNEQycsICdZRklVU0RDJywgJzFJTkNIVVNEQycs ICdMUkNVU0RDJywKICAgICdaUlhVU0RDJywgJ0tOQ1VTREMnLCAnQkFMVVNEQycsICdCQVRVU0RD JywgJ0VOSlVTREMnLAogICAgJ0dBTEFVU0RDJywgJ1dBWFBVU0RDJywgJ0FVRElPVVNEQycsICdE QVNIVVNEQycsICdaRU5VU0RDJywKICAgICdRVFVNVVNEQycsICdJT1NUVVNEQycsICdJT1RYVVNE QycsICdTS0xVU0RDJywgJ0NFTFJVU0RDJywKICAgICdPTlRVU0RDJywgJ0hPVFVTREMnLCAnQ09U SVVTREMnLCAnREdCVVNEQycsICdTVE9SSlVTREMnLAogICAgJ0FSVVNEQycsICdGRVRVU0RDJywg J1JORFJVU0RDJywgJ0lNWFVTREMnLCAnT1BVU0RDJywKICAgICdBUFRVU0RDJywgJ1NUWFVTREMn LCAnQVRPTVVTREMnLCAnRE9UVVNEQycsICdJQ1BVU0RDJywKICAgICdUUlhVU0RDJywgJ0JDSFVT REMnLCAnRkxPV1VTREMnLCAnRUdMRFVTREMnLCAnVEhFVEFVU0RDJywKICAgICdSVU5FVVNEQycs ICdQWVRIVVNEQycsICdTVFJLVVNEQycsICdXSUZVU0RDJywgJ1dMRFVTREMnLAogICAgJ0pVUFVT REMnLCAnSlRPVVNEQycsICdUSUFVU0RDJywgJ1NVSVVTREMnLCAnU0VJVVNEQycsCiAgICAnQkxV UlVTREMnLCAnTUFWSUFVU0RDJywgJ1BPUlRBTFVTREMnLCAnRFlNVVNEQycsICdBTFRVU0RDJywK ICAgICdKQVNNWVVTREMnLCAnQ0FLRVVTREMnLCAnSURVU0RDJywgJ0hPT0tVU0RDJywgJ0VEVVVT REMnLAogICAgJ0hGVFVTREMnLCAnQUdMRFVTREMnLCAnU1RHVVNEQycsICdTWU5VU0RDJywgJ0ZY U1VTREMnLAogICAgJ0NWWFVTREMnLCAnTERPVVNEQycsICdBQVZFVVNEQycsICdZR0dVU0RDJywg J0lMVlVTREMnLAogICAgJ0FMSUNFVVNEQycsICdUTE1VU0RDJywgJ0RBUlVTREMnLCAnUkFEVVNE QycsICdNSU5BVVNEQycsCiAgICAnQ0VMT1VTREMnLCAnT05FVVNEQycsICdaSUxVU0RDJywgJ1JP U0VVU0RDJywgJ0tBVkFVU0RDJywKICAgICdTWFBVU0RDJywgJ0NIUlVTREMnLCAnRFVTS1VTREMn LCAnQkVBTVVTREMnLCAnQ1RTSVVTREMnLAogICAgJ0xQVFVTREMnLCAnTk1SVVNEQycsICdVTUFV U0RDJywgJ1RSQlVTREMnLCAnQzk4VVNEQycsCiAgICAnQU5UVVNEQycsICdTUk1VU0RDJywgJ0lS SVNVU0RDJywgJ0JBTkRVU0RDJywgJ0FQSTNVU0RDJywKICAgICdSTENVU0RDJywgJ09DRUFOVVNE QycsICdBR0lYVVNEQycsICdBUktNVVNEQycsICdBU1RSVVNEQycsCiAgICAnR0xNUlVTREMnLCAn TU9WUlVTREMnLCAnSk9FVVNEQycsICdQRU5ETEVVU0RDJywgJ1BFTkdVVVNEQycsCiAgICAnQUlV U0RDJywgJ05GUFVTREMnLCAnVk9YRUxVU0RDJywgJ0JPTUVVU0RDJywgJ0JCU09MVVNEQycsCiAg ICAnTUFOVEFVU0RDJywgJ1pST1VTREMnLCAnRVRIRklVU0RDJywgJ01FVElTVVNEQycsICdBRVZP VVNEQycsCiAgICAnQVhMVVNEQycsICdFVEhXVVNEQycsICdUTlNSVVNEQycsICdTQUdBVVNEQycs ICdPTU5JVVNEQycsCiAgICAnUkVaVVNEQycsICdCQlVTREMnLCAnTk9UVVNEQycsICdJT1VTREMn LCAnWktVU0RDJywKICAgICdMSVNUQVVTREMnLCAnWlJDVVNEQycsICdCTlNPTFVTREMnLCAnQklP VVNEQycsICdUT05VU0RDJywKICAgICdTTFBVU0RDJywgJ1NPTFZVU0RDJywgJ1NDUlVTREMnLCAn R09BVFVTREMnLCAnU1VOVVNEQycsCiAgICAnVFJVTVBVU0RDJywgJ0FOSU1FVVNEQycsICdWQU5B VVNEQycsICdBQ1hVU0RDJywgJ0JFUkFVU0RDJywKXQoKVE9QX1BBSVJTX1VTRFQgPSBbCiAgICAn QlRDVVNEVCcsICdFVEhVU0RUJywgJ0JOQlVTRFQnLCAnU09MVVNEVCcsICdYUlBVU0RUJywKICAg ICdBREFVU0RUJywgJ0RPR0VVU0RUJywgJ0xJTktVU0RUJywgJ0xUQ1VTRFQnLCAnVU5JVVNEVCcs CiAgICAnRklMVVNEVCcsICdBUkJVU0RUJywgJ0FBVkVVU0RUJywgJ0FWQVhVU0RUJywgJ0ZUTVVT RFQnLAogICAgJ05FT1VTRFQnLCAnRVRDVVNEVCcsICdFT1NVU0RUJywgJ1hMTVVTRFQnLCAnVkVU VVNEVCcsCiAgICAnWFRaVVNEVCcsICdBTEdPVVNEVCcsICdTQU5EVVNEVCcsICdNQU5BVVNEVCcs ICdBWFNVU0RUJywKICAgICdDT01QVVNEVCcsICdDUlZVU0RUJywgJ1NOWFVTRFQnLCAnTUtSVVNE VCcsICdDSFpVU0RUJywKICAgICdHUlRVU0RUJywgJ1NISUJVU0RUJywgJ1BFUEVVU0RUJywgJ0ZM T0tJVVNEVCcsICdCT05LVVNEVCcsCiAgICAnRFlEWFVTRFQnLCAnU1VTSElVU0RUJywgJ1lGSVVT RFQnLCAnMUlOQ0hVU0RUJywgJ0xSQ1VTRFQnLAogICAgJ1pSWFVTRFQnLCAnS05DVVNEVCcsICdC QUxVU0RUJywgJ0JBVFVTRFQnLCAnRU5KVVNEVCcsCiAgICAnR0FMQVVTRFQnLCAnV0FYUFVTRFQn LCAnQVVESU9VU0RUJywgJ0RBU0hVU0RUJywgJ1pFTlVTRFQnLAogICAgJ1FUVU1VU0RUJywgJ0lP U1RVU0RUJywgJ0lPVFhVU0RUJywgJ1NLTFVTRFQnLCAnQ0VMUlVTRFQnLAogICAgJ09OVFVTRFQn LCAnSE9UVVNEVCcsICdDT1RJVVNEVCcsICdER0JVU0RUJywgJ1NUT1JKVVNEVCcsCl0KCiMgPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT0KIyBUSUVSRUQgUEFJUiBMSVNUUyAtIEZpbHRlcmVkIGJ5IEV4cGVjdGVkIFZvbHVt ZQojIFVzZSB0aGVzZSB0byBzY2FuIG9ubHkgaGlnaC9taWQgdm9sdW1lIHBhaXJzIGZvciBiZXR0 ZXIgZmlsbHMKIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQoKIyBUSUVSIDE6IEhJR0ggVk9MVU1FIC0gQWx3YXlzICQx ME0rIGRhaWx5IChyZWxpYWJsZSwgdGlnaHQgc3ByZWFkcykKVElFUl8xX1BBSVJTID0gWwogICAg J0JUQ1VTREMnLCAnRVRIVVNEQycsICdTT0xVU0RDJywgJ1hSUFVTREMnLCAnQURBVVNEQycsCiAg ICAnRE9HRVVTREMnLCAnQk5CVVNEQycsICdMSU5LVVNEQycsICdMVENVU0RDJywgJ0FWQVhVU0RD JywKICAgICdET1RVU0RDJywgJ1RSWFVTREMnLCAnQVRPTVVTREMnLCAnRVRDVVNEQycsICdVTklV U0RDJywKICAgICdCVENVU0RUJywgJ0VUSFVTRFQnLCAnU09MVVNEVCcsICdYUlBVU0RUJywgJ0FE QVVTRFQnLAogICAgJ0RPR0VVU0RUJywgJ0JOQlVTRFQnLCAnTElOS1VTRFQnLCAnTFRDVVNEVCcs ICdBVkFYVVNEVCcsCl0KCiMgVElFUiAyOiBNSUQgVk9MVU1FIC0gVXN1YWxseSAkMk0tMTBNIGRh aWx5IChnb29kIGxpcXVpZGl0eSkKVElFUl8yX1BBSVJTID0gWwogICAgJ0FBVkVVU0RDJywgJ0ZJ TFVTREMnLCAnQVJCVVNEQycsICdPUFVTREMnLCAnRlRNVVNEQycsCiAgICAnTkVPVVNEQycsICdY TE1VU0RDJywgJ1ZFVFVTREMnLCAnQUxHT1VTREMnLCAnSUNQVVNEQycsCiAgICAnR1JUVVNEQycs ICdTSElCVVNEQycsICdQRVBFVVNEQycsICdXSUZVU0RDJywgJ1dMRFVTREMnLAogICAgJ0ZFVFVT REMnLCAnUk5EUlVTREMnLCAnSU1YVVNEQycsICdBUFRVU0RDJywgJ1NUWFVTREMnLAogICAgJ1JV TkVVU0RDJywgJ1NVSVVTREMnLCAnU0VJVVNEQycsICdHQUxBVVNEQycsICdFR0xEVVNEQycsCiAg ICAnVEhFVEFVU0RDJywgJ0JDSFVTREMnLCAnRkxPV1VTREMnLCAnSlVQVVNEQycsICdQWVRIVVNE QycsCiAgICAnQUFWRVVTRFQnLCAnRklMVVNEVCcsICdBUkJVU0RUJywgJ0ZUTVVTRFQnLCAnTkVP VVNEVCcsCiAgICAnWExNVVNEVCcsICdWRVRVU0RUJywgJ0FMR09VU0RUJywgJ1NISUJVU0RUJywg J1BFUEVVU0RUJywKXQoKIyBUSUVSIDM6IFZBUklBQkxFIC0gJDc1MEstMk0gKG1heSBmYWlsIHZv bHVtZSBjaGVjayBkdXJpbmcgbG93IGFjdGl2aXR5KQpUSUVSXzNfUEFJUlMgPSBbCiAgICAnU0FO RFVTREMnLCAnTUFOQVVTREMnLCAnQVhTVVNEQycsICdDT01QVVNEQycsICdDUlZVU0RDJywKICAg ICdTTlhVU0RDJywgJ01LUlVTREMnLCAnRFlEWFVTREMnLCAnU1VTSElVU0RDJywgJ1lGSVVTREMn LAogICAgJ0NIWlVTREMnLCAnRU5KVVNEQycsICdCQVRVU0RDJywgJzFJTkNIVVNEQycsICdDQUtF VVNEQycsCiAgICAnTERPVVNEQycsICdDVlhVU0RDJywgJ1BFTkRMRVVTREMnLCAnQkxVUlVTREMn LCAnU1RSS1VTREMnLAogICAgJ1RJQVVTREMnLCAnSlRPVVNEQycsICdNSU5BVVNEQycsICdDRUxP VVNEQycsICdST1NFVVNEQycsCiAgICAnS0FWQVVTREMnLCAnRFVTS1VTREMnLCAnTFBUVVNEQycs ICdPQ0VBTlVTREMnLCAnQUdJWFVTREMnLAogICAgJ1NBTkRVU0RUJywgJ01BTkFVU0RUJywgJ0FY U1VTRFQnLCAnQ09NUFVTRFQnLCAnQ1JWVVNEVCcsCiAgICAnTUtSVVNEVCcsICdDSFpVU0RUJywg J0VOSlVTRFQnLCAnRFlEWFVTRFQnLCAnU1VTSElVU0RUJywKXQoKIyBUSUVSIDQ6IExPVy9ORVcg LSBPZnRlbiBiZWxvdyAkNzUwSyAoaGlnaCByZWplY3Rpb24gcmlzaykKVElFUl80X1BBSVJTID0g WwogICAgJ0ZMT0tJVVNEQycsICdCT05LVVNEQycsICdCT01FVVNEQycsICdHT0FUVVNEQycsICdN T09ERU5HVVNEQycsCiAgICAnVFJVTVBVU0RDJywgJ0FOSU1FVVNEQycsICdWQU5BVVNEQycsICdC RVJBVVNEQycsICdBQ1hVU0RDJywKICAgICdaUkNVU0RDJywgJ1NDUlVTREMnLCAnU1VOVVNEQycs ICdCSU9VU0RDJywgJ1NPTFZVU0RDJywKICAgICdaUk9VU0RDJywgJ0VUSEZJVVNEQycsICdTQUdB VVNEQycsICdPTU5JVVNEQycsICdMSVNUQVVTREMnLAogICAgJ1ROU1JVU0RDJywgJ0FYTFVTREMn LCAnQUVWT1VTREMnLCAnTUVUSVNVU0RDJywgJ01BTlRBVVNEQycsCiAgICAnUEVOR1VVU0RDJywg J1ZPWEVMVVNEQycsICdORlBVU0RDJywgJ0FJVVNEQycsICdKT0VVU0RDJywKICAgICdNT1ZSVVNE QycsICdHTE1SVVNEQycsICdBU1RSVVNEQycsICdBUktNVVNEQycsICdBUEkzVVNEQycsCiAgICAn UkxDVVNEQycsICdVTUFVU0RDJywgJ1RSQlVTREMnLCAnTk1SVVNEQycsICdGWFNVU0RDJywKICAg ICdTWU5VU0RDJywgJ1NUR1VTREMnLCAnQUdMRFVTREMnLCAnSEZUVVNEQycsICdIT09LVVNEQycs CiAgICAnRURVVVNEQycsICdJRFVTREMnLCAnSkFTTVlVU0RDJywgJ0FMVFVTREMnLCAnRFlNVVNE QycsCiAgICAnUE9SVEFMVVNEQycsICdNQVZJQVVTREMnLCAnV0FYUFVTREMnLCAnQVVESU9VU0RD JywgJ0RBU0hVU0RDJywKICAgICdaRU5VU0RDJywgJ1FUVU1VU0RDJywgJ0lPU1RVU0RDJywgJ0lP VFhVU0RDJywgJ1NLTFVTREMnLAogICAgJ0NFTFJVU0RDJywgJ09OVFVTREMnLCAnSE9UVVNEQycs ICdDT1RJVVNEQycsICdER0JVU0RDJywKICAgICdTVE9SSlVTREMnLCAnWlJYVVNEQycsICdLTkNV U0RDJywgJ0JBTFVTREMnLCAnTFJDVVNEQycsCiAgICAnWUdHVVNEQycsICdJTFZVU0RDJywgJ0FM SUNFVVNEQycsICdUTE1VU0RDJywgJ0RBUlVTREMnLAogICAgJ1JBRFVTREMnLCAnT05FVVNEQycs ICdaSUxVU0RDJywgJ1NYUFVTREMnLCAnQ0hSVVNEQycsCiAgICAnQkVBTVVTREMnLCAnQ1RTSVVT REMnLCAnQzk4VVNEQycsICdBTlRVU0RDJywgJ1NSTVVTREMnLAogICAgJ0lSSVNVU0RDJywgJ0JB TkRVU0RDJywgJ1JFWlVTREMnLCAnQkJVU0RDJywgJ05PVFVTREMnLAogICAgJ0lPVVNEQycsICda S1VTREMnLCAnQk5TT0xVU0RDJywgJ0JCU09MVVNEQycsICdFVEhXVVNEQycsCiAgICAnU0xQVVNE QycsICdUT05VU0RDJywgJ0VPU1VTREMnLCAnWFRaVVNEQycsICdFTkpVU0RUJywKICAgICdGTE9L SVVTRFQnLCAnQk9OS1VTRFQnLCAnR0FMQVVTRFQnLCAnTUFOQVVTRFQnLCAnU0FORFVTRFQnLApd CgojIFF1aWNrIHJlZmVyZW5jZTogVXNlIFRJRVJfMSArIFRJRVJfMiBmb3IgYWdncmVzc2l2ZSBz Y2FubmluZyB3aXRoIGhpZ2ggZmlsbCByYXRlcwojIFVzZSBUSUVSXzEgb25seSBmb3IgbWF4aW11 bSByZWxpYWJpbGl0eSAobGFyZ2UgYWNjb3VudHMpCgpJTUFHRVNfRElSID0gIi9zdG9yYWdlL2Vt dWxhdGVkLzAvX05ld2VzdCBDbGF3Ym90IG1haW4gc2NyaXB0IGFuZCBsb2cgcmVwb3J0cy9CYXJl Ym9uZS9pbWFnZXMiCgojIEljb24gbWFwcGluZyAtIG1hcHMgdGV4dCB0YWdzIHRvIGltYWdlIGZp bGVzCklDT05fTUFQID0gewogICAgJ0JPVCc6ICdyb2JvdC5wbmcnLAogICAgJ0NIQVJUJzogJ2No YXJ0LnBuZycsCiAgICAnU0VUJzogJ3NldHVwcy5wbmcnLAogICAgJ1RFU1QnOiAnYXV0by5wbmcn LAogICAgJ1JFRic6ICdyZWZyZXNoLnBuZycsCiAgICAnQlJBSU4nOiAnYnJhaW4ucG5nJywKICAg ICdQT1MnOiAncG9zaXRpb25zLnBuZycsCiAgICAnQVNTRVRTJzogJ2Fzc2V0cy5wbmcnLAogICAg J0FMRVJUJzogJ2FsZXJ0LnBuZycsCiAgICAnQkVMTCc6ICdiZWxsLnBuZycsCiAgICAnQ0FOQ0VM JzogJ2NhbmNlbC5wbmcnLAogICAgJ0NMRUFSJzogJ2NsZWFyLnBuZycsCiAgICAnRE9XTic6ICdk b3duLnBuZycsCiAgICAnT0snOiAnb2sucG5nJywKICAgICdST0NLRVQnOiAncm9ja2V0LnBuZycs CiAgICAnU0NBTic6ICdzY2FuLnBuZycsCiAgICAnU0VUVElOR1MnOiAnc2V0dGluZ3MucG5nJywK ICAgICdTSElFTEQnOiAnc2hpZWxkLnBuZycsCiAgICAnVVAnOiAndXAucG5nJywKICAgICdMSVNU JzogJ2xpc3QucG5nJywKICAgICdUQVJHRVQnOiAndGFyZ2V0LnBuZycsCiAgICAnRklSRSc6ICdm aXJlLnBuZycsCiAgICAnU0FGRSc6ICdzaGllbGQucG5nJywKICAgICdHQU1FJzogJ2F1dG8ucG5n JywKICAgICdCQUcnOiAncG9zaXRpb25zLnBuZycsCiAgICAnJCc6ICdhc3NldHMucG5nJywKICAg ICdSU1QnOiAncmVmcmVzaC5wbmcnLAogICAgJ1NQRCc6ICdyb2NrZXQucG5nJywKICAgICdSUFQn OiAnY2hhcnQucG5nJywKICAgICdPVVQnOiAnZXhwb3J0LnBuZycsCiAgICAnQ0xSJzogJ2NsZWFy LnBuZycsCiAgICAnTkVUJzogJ3NldHRpbmdzLnBuZycsCiAgICAnQksnOiAnc2V0dGluZ3MucG5n JywKICAgICdTWU5DJzogJ3N5bmMucG5nJywKICAgICdOTyc6ICdjYW5jZWwucG5nJywKfQoKZGVm IGdldF9pY29uX2ltYWdlKGljb25fbmFtZSwgc2l6ZT1kcCgyMCkpOgogICAgIiIiCiAgICBDcmVh dGUgYW4gSW1hZ2Ugd2lkZ2V0IGZvciBhbiBpY29uLgogICAgRmFsbHMgYmFjayB0byB0ZXh0IGxh YmVsIGlmIGltYWdlIG5vdCBmb3VuZC4KICAgICIiIgogICAgaW1hZ2VfZmlsZSA9IElDT05fTUFQ LmdldChpY29uX25hbWUsIGYie2ljb25fbmFtZS5sb3dlcigpfS5wbmciKQogICAgaW1hZ2VfcGF0 aCA9IG9zLnBhdGguam9pbihJTUFHRVNfRElSLCBpbWFnZV9maWxlKQoKICAgIGlmIG9zLnBhdGgu ZXhpc3RzKGltYWdlX3BhdGgpOgogICAgICAgIGltZyA9IEltYWdlKHNvdXJjZT1pbWFnZV9wYXRo LCBzaXplX2hpbnQ9KE5vbmUsIE5vbmUpLAogICAgICAgICAgICAgICAgICAgc2l6ZT0oc2l6ZSwg c2l6ZSksIGFsbG93X3N0cmV0Y2g9VHJ1ZSwga2VlcF9yYXRpbz1UcnVlKQogICAgICAgIGltZy5w b3NfaGludCA9IHsnY2VudGVyX3knOiAwLjV9ICAjIENlbnRlciB2ZXJ0aWNhbGx5CiAgICAgICAg cmV0dXJuIGltZwogICAgZWxzZToKICAgICAgICAjIFJldHVybiBOb25lIGlmIGltYWdlIG5vdCBm b3VuZCAtIGNhbGxlciBzaG91bGQgdXNlIHRleHQgZmFsbGJhY2sKICAgICAgICByZXR1cm4gTm9u ZQoKZGVmIGljb25fbGFiZWwodGV4dCwgaWNvbl9uYW1lPU5vbmUsIGNvbG9yPUdPTEQsIGZvbnRf c2l6ZT1zcCgxMiksICoqa3dhcmdzKToKICAgICIiIgogICAgQ3JlYXRlIGEgQm94TGF5b3V0IHdp dGggaWNvbiArIGxhYmVsLgogICAgVXNhZ2U6IGljb25fbGFiZWwoIiBST0ItQk9UIHY1MiIsICJC T1QiLCBjb2xvcj1HT0xELCBmb250X3NpemU9c3AoMTMpKQogICAgIiIiCiAgICBmcm9tIGtpdnku dWl4LmJveGxheW91dCBpbXBvcnQgQm94TGF5b3V0CgogICAgYm94ID0gQm94TGF5b3V0KG9yaWVu dGF0aW9uPSdob3Jpem9udGFsJywgc2l6ZV9oaW50X3k9Tm9uZSwgaGVpZ2h0PWRwKDI0KSwgKipr d2FyZ3MpCgogICAgIyBUcnkgdG8gYWRkIGljb24KICAgIGlmIGljb25fbmFtZToKICAgICAgICBp bWcgPSBnZXRfaWNvbl9pbWFnZShpY29uX25hbWUsIHNpemU9ZHAoZm9udF9zaXplICogMS41KSkK ICAgICAgICBpZiBpbWc6CiAgICAgICAgICAgIGJveC5hZGRfd2lkZ2V0KGltZykKCiAgICAjIEFk ZCB0ZXh0IGxhYmVsCiAgICBsYWJlbCA9IEVtb2ppTGFiZWwodGV4dD1mIltiXXt0ZXh0fVsvYl0i LCBtYXJrdXA9VHJ1ZSwgY29sb3I9Y29sb3IsCiAgICAgICAgICAgICAgICAgICAgICBmb250X3Np emU9Zm9udF9zaXplLCBoYWxpZ249J2xlZnQnLCB2YWxpZ249J2NlbnRlcicpCiAgICBsYWJlbC5w b3NfaGludCA9IHsnY2VudGVyX3knOiAwLjV9CiAgICBib3guYWRkX3dpZGdldChsYWJlbCkKCiAg ICByZXR1cm4gYm94CgoKCgoKREVCVUdfQlRDX09OTFkgPSBGYWxzZQoKT1JERVJfVFlQRVMgPSBb IkF1dG8iLCAiTWFya2V0IiwgIkxpbWl0IEJ1eSIsICJMaW1pdCBTZWxsIl0KVFJBREVfRElSRUNU SU9OUyA9IFsiQk9USCIsICJMT05HIiwgIlNIT1JUIl0KCgpEQVRBX0RJUiA9IG9zLnBhdGguam9p bihvcy5wYXRoLmRpcm5hbWUoX19maWxlX18pLCAnZGF0YScpCm9zLm1ha2VkaXJzKERBVEFfRElS LCBleGlzdF9vaz1UcnVlKQpTRVRUSU5HU19GSUxFID0gb3MucGF0aC5qb2luKERBVEFfRElSLCAi c2V0dGluZ3MuanNvbiIpClBOTF9MT0dfRklMRSA9IG9zLnBhdGguam9pbihEQVRBX0RJUiwgInBu bF9oaXN0b3J5Lmpzb24iKQoKCmRlZiBzYWZlX2pzb25fbG9hZChmaWxlcGF0aCwgZGVmYXVsdD1O b25lKToKICAgICIiIlNhZmVseSBsb2FkIEpTT04gZnJvbSBmaWxlLCByZXR1cm4gZGVmYXVsdCBp ZiBmaWxlIGRvZXNuJ3QgZXhpc3Qgb3IgaXMgaW52YWxpZC4iIiIKICAgIHRyeToKICAgICAgICBp ZiBvcy5wYXRoLmV4aXN0cyhmaWxlcGF0aCk6CiAgICAgICAgICAgIHdpdGggb3BlbihmaWxlcGF0 aCwgJ3InKSBhcyBmOgogICAgICAgICAgICAgICAgcmV0dXJuIGpzb24ubG9hZChmKQogICAgZXhj ZXB0IEV4Y2VwdGlvbiBhcyBlOgogICAgICAgIHByaW50KGYiW3NhZmVfanNvbl9sb2FkXSBFcnJv ciBsb2FkaW5nIHtmaWxlcGF0aH06IHtlfSIpCiAgICByZXR1cm4gZGVmYXVsdCBpZiBkZWZhdWx0 IGlzIG5vdCBOb25lIGVsc2Uge30KCgpkZWYgc2FmZV9qc29uX3NhdmUoZmlsZXBhdGgsIGRhdGEp OgogICAgIiIiU2FmZWx5IHNhdmUgZGF0YSBhcyBKU09OIHRvIGZpbGUuIiIiCiAgICB0cnk6CiAg ICAgICAgd2l0aCBvcGVuKGZpbGVwYXRoLCAndycpIGFzIGY6CiAgICAgICAgICAgIGpzb24uZHVt cChkYXRhLCBmLCBpbmRlbnQ9MikKICAgICAgICByZXR1cm4gVHJ1ZQogICAgZXhjZXB0IEV4Y2Vw dGlvbiBhcyBlOgogICAgICAgIHByaW50KGYiW3NhZmVfanNvbl9zYXZlXSBFcnJvciBzYXZpbmcg e2ZpbGVwYXRofToge2V9IikKICAgICAgICByZXR1cm4gRmFsc2UKCgojID09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0KIyBBRFZBTkNFRCBTRVRVUCBTRUxFQ1RPUiB2MS4wIC0gSU5URUdSQVRFRAojID09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0KCmRlZiByYW5rX2FuZF9zZWxlY3Rfc2V0dXBzKHNldHVwcywgb3Blbl9w b3NpdGlvbnMsIG1heF90cmFkZXM9MywgbWluX3Njb3JlPTc1KToKICAgICIiIgogICAgUmFuayBh bGwgc2V0dXBzIGJ5IHF1YWxpdHkgYW5kIHNlbGVjdCB0aGUgYmVzdCBvbmVzLgogICAgIiIiCiAg ICBpbXBvcnQgc3RhdGlzdGljcwoKICAgIGlmIG5vdCBzZXR1cHM6CiAgICAgICAgcmV0dXJuIFtd LCAiTm8gc2V0dXBzIGF2YWlsYWJsZSIKCiAgICBzY29yZWQgPSBbXQogICAgZm9yIHNldHVwIGlu IHNldHVwczoKICAgICAgICBzY29yZSA9IDAKCiAgICAgICAgIyBHcmFkZSBzY29yZSAoMzAlIHdl aWdodCkKICAgICAgICBncmFkZSA9IHNldHVwLmdldCgnZ3JhZGUnLCAnRicpCiAgICAgICAgZ3Jh ZGVfc2NvcmVzID0gewogICAgICAgICAgICAnQSsnOiA5NywgJ0EnOiA5MywgJ0EtJzogOTAsCiAg ICAgICAgICAgICdCKyc6IDg3LCAnQic6IDgzLCAnQi0nOiA4MCwKICAgICAgICAgICAgJ0MrJzog NzcsICdDJzogNzMsICdDLSc6IDcwLAogICAgICAgICAgICAnRCsnOiA2NywgJ0QnOiA2MywgJ0Qt JzogNjAsCiAgICAgICAgICAgICdGJzogMzAKICAgICAgICB9CiAgICAgICAgc2NvcmUgKz0gZ3Jh ZGVfc2NvcmVzLmdldChncmFkZSwgMzApICogMC4zMAoKICAgICAgICAjIFIvUiBzY29yZSAoMjUl IHdlaWdodCkKICAgICAgICByciA9IHNldHVwLmdldCgncnJfcmF0aW8nLCAwKQogICAgICAgIHNj b3JlICs9IG1pbigxMDAsIHJyICogMzApICogMC4yNQoKICAgICAgICAjIENvbmZsdWVuY2Ugc2Nv cmUgKDI1JSB3ZWlnaHQpCiAgICAgICAgY29uZmx1ZW5jZSA9IHNldHVwLmdldCgnY29uZmx1ZW5j ZV9zY29yZScsIDApCiAgICAgICAgc2NvcmUgKz0gbWluKDEwMCwgY29uZmx1ZW5jZSAqIDAuNSkg KiAwLjI1CgogICAgICAgICMgUmFuZ2UgcG9zaXRpb24gYm9udXMKICAgICAgICBpZiBzZXR1cC5n ZXQoJ2lzX3JhbmdlX2JvdW5kJyk6CiAgICAgICAgICAgIHBvcyA9IHNldHVwLmdldCgncG9zaXRp b25faW5fcmFuZ2UnLCAwLjUpCiAgICAgICAgICAgIGlmIHBvcyA8IDAuMjUgb3IgcG9zID4gMC43 NToKICAgICAgICAgICAgICAgIHNjb3JlICs9IDE1CiAgICAgICAgICAgIGVsaWYgcG9zIDwgMC40 IG9yIHBvcyA+IDAuNjoKICAgICAgICAgICAgICAgIHNjb3JlICs9IDUKCiAgICAgICAgIyBSZXZl cnNhbCBzaWduYWwgYm9udXMKICAgICAgICBpZiBzZXR1cC5nZXQoJ2Vhcmx5X3JldmVyc2FsX3Np Z25hbCcpID09IHNldHVwLmdldCgnZGlyZWN0aW9uJyk6CiAgICAgICAgICAgIHNjb3JlICs9IDEw CgogICAgICAgIHNjb3JlZC5hcHBlbmQoKHNjb3JlLCBzZXR1cCkpCgogICAgc2NvcmVkLnNvcnQo cmV2ZXJzZT1UcnVlLCBrZXk9bGFtYmRhIHg6IHhbMF0pCiAgICBwYXNzaW5nID0gWyhzLCBzZXR1 cCkgZm9yIHMsIHNldHVwIGluIHNjb3JlZCBpZiBzID49IG1pbl9zY29yZV0KCiAgICBpZiBub3Qg cGFzc2luZzoKICAgICAgICBhdmdfdG9wID0gc3RhdGlzdGljcy5tZWFuKFtzIGZvciBzLCBfIGlu IHNjb3JlZFs6MTBdXSkgaWYgbGVuKHNjb3JlZCkgPj0gMTAgZWxzZSBzY29yZWRbMF1bMF0KICAg ICAgICByZXR1cm4gW10sIGYiTm8gc2V0dXBzIG1lZXQgcXVhbGl0eSB0aHJlc2hvbGQgKG1pbjog e21pbl9zY29yZX0sIGJlc3Q6IHthdmdfdG9wOi4xZn0pIgoKICAgIG9wZW5fcGFpcnMgPSB7cFsn cGFpciddIGZvciBwIGluIG9wZW5fcG9zaXRpb25zIGlmIHAuZ2V0KCdzdGF0dXMnKSA9PSAnT1BF Tid9CiAgICAKICAgICMgRFlOQU1JQyBDT1JSRUxBVElPTiBUSFJFU0hPTEQgYmFzZWQgb24gbWF4 X3RyYWRlcwogICAgIyAyIHRyYWRlczogY2hlY2sgYXQgNTAlICgxIHBvc2l0aW9uKQogICAgIyAz IHRyYWRlczogY2hlY2sgYXQgNjYlICgyIHBvc2l0aW9ucykgIAogICAgIyA0IHRyYWRlczogY2hl Y2sgYXQgNzUlICgzIHBvc2l0aW9ucykKICAgICMgNSsgdHJhZGVzOiBjaGVjayBhdCA4MCUgKDQr IHBvc2l0aW9ucykKICAgIGlmIG1heF90cmFkZXMgPD0gMjoKICAgICAgICBjb3JyZWxhdGlvbl90 aHJlc2hvbGQgPSAwLjUgICMgNTAlIGZvciAyIHRyYWRlcwogICAgZWxpZiBtYXhfdHJhZGVzID09 IDM6CiAgICAgICAgY29ycmVsYXRpb25fdGhyZXNob2xkID0gMC42NiAgIyA2NiUgZm9yIDMgdHJh ZGVzCiAgICBlbGlmIG1heF90cmFkZXMgPT0gNDoKICAgICAgICBjb3JyZWxhdGlvbl90aHJlc2hv bGQgPSAwLjc1ICAjIDc1JSBmb3IgNCB0cmFkZXMKICAgIGVsc2U6CiAgICAgICAgY29ycmVsYXRp b25fdGhyZXNob2xkID0gMC44ICAjIDgwJSBmb3IgNSsgdHJhZGVzCiAgICAKICAgIG9wZW5fc2xv dHNfcGN0ID0gMS4wIC0gKGxlbihvcGVuX3BhaXJzKSAvIG1heF90cmFkZXMpCiAgICBza2lwX2Nv cnJlbGF0aW9uID0gb3Blbl9zbG90c19wY3QgPiBjb3JyZWxhdGlvbl90aHJlc2hvbGQgICMgU2tp cCBpZiBtb3JlIHJvb20gdGhhbiB0aHJlc2hvbGQKICAgIAogICAgcHJpbnQoZiJbQ09SUkVMQVRJ T05dIE1heCB0cmFkZXM6IHttYXhfdHJhZGVzfSwgT3Blbjoge2xlbihvcGVuX3BhaXJzKX0sIFRo cmVzaG9sZDoge2NvcnJlbGF0aW9uX3RocmVzaG9sZDouMCV9LCBTa2lwOiB7c2tpcF9jb3JyZWxh dGlvbn0iKQoKICAgIHNlbGVjdGVkID0gW10KICAgIGZvciBzY29yZSwgc2V0dXAgaW4gcGFzc2lu ZzoKICAgICAgICBpZiBsZW4oc2VsZWN0ZWQpID49IG1heF90cmFkZXMgb3Igc2V0dXBbJ3BhaXIn XSBpbiBvcGVuX3BhaXJzOgogICAgICAgICAgICBjb250aW51ZQoKICAgICAgICAjIENvcnJlbGF0 aW9uIGNoZWNrIChTS0lQIGlmIHBvcnRmb2xpbyBoYXMgcm9vbSkKICAgICAgICBpZiBub3Qgc2tp cF9jb3JyZWxhdGlvbjoKICAgICAgICAgICAgbmV3X2Jhc2UgPSBzZXR1cFsncGFpciddLnJlcGxh Y2UoJ1VTREMnLCAnJykucmVwbGFjZSgnVVNEVCcsICcnKQogICAgICAgICAgICBmYW1pbGllcyA9 IFsKICAgICAgICAgICAgICAgIHsnQlRDJywgJ0JDSCcsICdCU1YnfSwKICAgICAgICAgICAgICAg IHsnRVRIJywgJ0VUQyd9LAogICAgICAgICAgICAgICAgeydTT0wnLCAnUkFZJ30sCiAgICAgICAg ICAgICAgICB7J0FWQVgnLCAnSk9FJ30sCiAgICAgICAgICAgICAgICB7J01BVElDJywgJ0FSQics ICdPUCd9LAogICAgICAgICAgICAgICAgeydVTkknLCAnQUFWRScsICdDT01QJywgJ01LUid9LAog ICAgICAgICAgICBdCiAgICAgICAgICAgIG5ld19mYW1pbHkgPSBuZXh0KChmIGZvciBmIGluIGZh bWlsaWVzIGlmIG5ld19iYXNlIGluIGYpLCBOb25lKQogICAgICAgICAgICBpZiBuZXdfZmFtaWx5 IGFuZCBhbnkocy5nZXQoJ3BhaXInLCAnJykucmVwbGFjZSgnVVNEQycsICcnKS5yZXBsYWNlKCdV U0RUJywgJycpIGluIG5ld19mYW1pbHkgZm9yIHMgaW4gc2VsZWN0ZWQpOgogICAgICAgICAgICAg ICAgcHJpbnQoZiJbQ09SUkVMQVRJT04gU0tJUF0ge3NldHVwWydwYWlyJ119IGluIHNhbWUgZmFt aWx5IGFzIHNlbGVjdGVkLCBza2lwcGluZyIpCiAgICAgICAgICAgICAgICBjb250aW51ZQoKICAg ICAgICBzZWxlY3RlZC5hcHBlbmQoc2V0dXApCgogICAgaWYgbm90IHNlbGVjdGVkOgogICAgICAg IHJldHVybiBbXSwgIkFsbCBwYXNzaW5nIHNldHVwcyBhcmUgY29ycmVsYXRlZCBvciBhbHJlYWR5 IGluIHBvcnRmb2xpbyIKCiAgICBhdmdfc2NvcmUgPSBzdGF0aXN0aWNzLm1lYW4oW3MgZm9yIHMs IF8gaW4gcGFzc2luZ1s6bGVuKHNlbGVjdGVkKV1dKQogICAgcmV0dXJuIHNlbGVjdGVkLCBmIlNl bGVjdGVkIHtsZW4oc2VsZWN0ZWQpfSBiZXN0IHNldHVwcyAoYXZnIHNjb3JlOiB7YXZnX3Njb3Jl Oi4xZn0pIgoKCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojIEVORCBBRFZBTkNFRCBTRVRVUCBTRUxF Q1RPUgojID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0KCgpjbGFzcyBCYWNrdGVzdExvZ2dlcjoKICAgICIi IlN0dWIgZm9yIEJhY2t0ZXN0TG9nZ2VyIC0gZmVhdHVyZSByZW1vdmVkIGluIGxpdGUgdmVyc2lv bi4iIiIKCiAgICBkZWYgX19pbml0X18oc2VsZik6CiAgICAgICAgc2VsZi5zZXNzaW9uX2lkID0g ImxpdGVfbW9kZSIKICAgICAgICAjIEluaXRpYWxpemUgYXR0cmlidXRlcyB1c2VkIGJ5IHVwZGF0 ZV90cmFkZV9vdXRjb21lCiAgICAgICAgc2VsZi5kYWlseV9wbmwgPSAwLjAKICAgICAgICBzZWxm LmN1cnJlbnRfZHJhd2Rvd24gPSAwLjAKICAgICAgICBzZWxmLm1heF9kYWlseV9sb3NzID0gLTAu MDUgICMgLTUlIGRlZmF1bHQKICAgICAgICBzZWxmLndpbl9yYXRlXzI0aCA9IDAuNQogICAgICAg IHNlbGYua2VsbHlfd2luX3JhdGUgPSAwLjUKICAgICAgICBzZWxmLmtlbGx5X2F2Z193aW4gPSAw LjAyCiAgICAgICAgc2VsZi5rZWxseV9hdmdfbG9zcyA9IDAuMDEKICAgICAgICBzZWxmLnNldHVw X3BlcmZvcm1hbmNlX2hpc3RvcnkgPSB7fQogICAgICAgIHNlbGYuZ3JhZGVfcGVyZm9ybWFuY2Ug PSB7CiAgICAgICAgICAgICdBKyc6IDAuNjUsICdBJzogMC42MCwgJ0EtJzogMC41NSwKICAgICAg ICAgICAgJ0IrJzogMC41MCwgJ0InOiAwLjQ1LCAnQi0nOiAwLjQwLAogICAgICAgICAgICAnQysn OiAwLjM1LCAnQyc6IDAuMzAsICdDLSc6IDAuMjUsCiAgICAgICAgICAgICdEJzogMC4yMCwgJ0Yn OiAwLjEwCiAgICAgICAgfQogICAgICAgIHNlbGYucmlza19tb2RlID0gTm9uZSAgIyBXaWxsIGJl IHNldCBpZiBuZWVkZWQKCiAgICBkZWYgbG9nX3RyYWRlX2V4ZWN1dGlvbihzZWxmLCAqKmt3YXJn cyk6CiAgICAgICAgcGFzcwoKICAgIGRlZiBsb2dfYWN0aXZpdHkoc2VsZiwgbWVzc2FnZSwgbGV2 ZWw9IklORk8iKToKICAgICAgICAiIiJTdHViIGZvciBsb2dnaW5nIGFjdGl2aXR5LiIiIgogICAg ICAgIHBhc3MKCiAgICBkZWYgdXBkYXRlX3RyYWRlX291dGNvbWUoc2VsZiwgKiprd2FyZ3MpOgog ICAgICAgICIiIgogICAgICAgIFVwZGF0ZSBLZWxseSBDcml0ZXJpb24gYW5kIHBlcmZvcm1hbmNl IHRyYWNraW5nIGJhc2VkIG9uIHRyYWRlIG91dGNvbWUuCiAgICAgICAgQ2FsbGVkIHdoZW4gYSB0 cmFkZSBjbG9zZXMgdG8gaW1wcm92ZSBmdXR1cmUgc2l6aW5nIGRlY2lzaW9ucy4KCiAgICAgICAg QXJnczoKICAgICAgICAgICAgcmVzdWx0OiAnV0lOJyBvciAnTE9TUycKICAgICAgICAgICAgcG5s X3BjdDogUHJvZml0L2xvc3MgcGVyY2VudGFnZQogICAgICAgICAgICBncmFkZTogU2V0dXAgZ3Jh ZGUgKEErLCBBLCBCLCBldGMuKQogICAgICAgICAgICBzZXR1cF90eXBlOiBUeXBlIG9mIHNldHVw CiAgICAgICAgICAgIHRyYWRlX3BhdHRlcm46IFBhdHRlcm4gdXNlZCAobG90dGVyeV90aWNrZXQs IHRyZW5kX3JpZGUsIGV0Yy4pCiAgICAgICAgIiIiCiAgICAgICAgcmVzdWx0ID0ga3dhcmdzLmdl dCgncmVzdWx0JywgJ0xPU1MnKQogICAgICAgIHBubF9wY3QgPSBrd2FyZ3MuZ2V0KCdwbmxfcGN0 JywgMCkKICAgICAgICBncmFkZSA9IGt3YXJncy5nZXQoJ2dyYWRlJywgJ0MnKQogICAgICAgIHNl dHVwX3R5cGUgPSBrd2FyZ3MuZ2V0KCdzZXR1cF90eXBlJywgJ1VOS05PV04nKQogICAgICAgIHRy YWRlX3BhdHRlcm4gPSBrd2FyZ3MuZ2V0KCd0cmFkZV9wYXR0ZXJuJywgJ3N0YW5kYXJkJykKCiAg ICAgICAgIyBVcGRhdGUgZGFpbHkgUCZMIHRyYWNraW5nCiAgICAgICAgc2VsZi5kYWlseV9wbmwg Kz0gcG5sX3BjdCAvIDEwMCAgIyBDb252ZXJ0IHRvIGRlY2ltYWwKCiAgICAgICAgIyBVcGRhdGUg Z3JhZGUtc3BlY2lmaWMgcGVyZm9ybWFuY2UKICAgICAgICBpZiBncmFkZSBub3QgaW4gc2VsZi5z ZXR1cF9wZXJmb3JtYW5jZV9oaXN0b3J5OgogICAgICAgICAgICBzZWxmLnNldHVwX3BlcmZvcm1h bmNlX2hpc3RvcnlbZ3JhZGVdID0geyd3aW5zJzogMCwgJ2xvc3Nlcyc6IDAsICd0b3RhbF9wbmwn OiAwfQoKICAgICAgICBpZiByZXN1bHQgPT0gJ1dJTic6CiAgICAgICAgICAgIHNlbGYuc2V0dXBf cGVyZm9ybWFuY2VfaGlzdG9yeVtncmFkZV1bJ3dpbnMnXSArPSAxCiAgICAgICAgICAgIHNlbGYu d2luX3JhdGVfMjRoID0gbWluKDAuOSwgc2VsZi53aW5fcmF0ZV8yNGggKiAwLjkgKyAwLjEpICAj IEV4cG9uZW50aWFsIG1vdmluZyBhdmVyYWdlCiAgICAgICAgZWxzZToKICAgICAgICAgICAgc2Vs Zi5zZXR1cF9wZXJmb3JtYW5jZV9oaXN0b3J5W2dyYWRlXVsnbG9zc2VzJ10gKz0gMQogICAgICAg ICAgICBzZWxmLndpbl9yYXRlXzI0aCA9IG1heCgwLjEsIHNlbGYud2luX3JhdGVfMjRoICogMC45 KSAgIyBEZWNheQoKICAgICAgICBzZWxmLnNldHVwX3BlcmZvcm1hbmNlX2hpc3RvcnlbZ3JhZGVd Wyd0b3RhbF9wbmwnXSArPSBwbmxfcGN0CgogICAgICAgICMgVXBkYXRlIEtlbGx5IHBhcmFtZXRl cnMgYmFzZWQgb24gcmVjZW50IHBlcmZvcm1hbmNlCiAgICAgICAgdG90YWxfdHJhZGVzID0gc3Vt KGdbJ3dpbnMnXSArIGdbJ2xvc3NlcyddIGZvciBnIGluIHNlbGYuc2V0dXBfcGVyZm9ybWFuY2Vf aGlzdG9yeS52YWx1ZXMoKSkKICAgICAgICB0b3RhbF93aW5zID0gc3VtKGdbJ3dpbnMnXSBmb3Ig ZyBpbiBzZWxmLnNldHVwX3BlcmZvcm1hbmNlX2hpc3RvcnkudmFsdWVzKCkpCgogICAgICAgIGlm IHRvdGFsX3RyYWRlcyA+IDEwOiAgIyBOZWVkIG1pbmltdW0gc2FtcGxlIHNpemUKICAgICAgICAg ICAgc2VsZi5rZWxseV93aW5fcmF0ZSA9IHRvdGFsX3dpbnMgLyB0b3RhbF90cmFkZXMKCiAgICAg ICAgICAgICMgQ2FsY3VsYXRlIGF2ZXJhZ2Ugd2luL2xvc3MgcmF0aW9zCiAgICAgICAgICAgIHRv dGFsX3dpbl9wbmwgPSBzdW0oZ1sndG90YWxfcG5sJ10gZm9yIGcgaW4gc2VsZi5zZXR1cF9wZXJm b3JtYW5jZV9oaXN0b3J5LnZhbHVlcygpIGlmIGdbJ3RvdGFsX3BubCddID4gMCkKICAgICAgICAg ICAgdG90YWxfbG9zc19wbmwgPSBhYnMoc3VtKGdbJ3RvdGFsX3BubCddIGZvciBnIGluIHNlbGYu c2V0dXBfcGVyZm9ybWFuY2VfaGlzdG9yeS52YWx1ZXMoKSBpZiBnWyd0b3RhbF9wbmwnXSA8IDAp KQoKICAgICAgICAgICAgd2luX2NvdW50ID0gc3VtKDEgZm9yIGcgaW4gc2VsZi5zZXR1cF9wZXJm b3JtYW5jZV9oaXN0b3J5LnZhbHVlcygpIGlmIGdbJ3RvdGFsX3BubCddID4gMCkKICAgICAgICAg ICAgbG9zc19jb3VudCA9IHN1bSgxIGZvciBnIGluIHNlbGYuc2V0dXBfcGVyZm9ybWFuY2VfaGlz dG9yeS52YWx1ZXMoKSBpZiBnWyd0b3RhbF9wbmwnXSA8IDApCgogICAgICAgICAgICBpZiB3aW5f Y291bnQgPiAwOgogICAgICAgICAgICAgICAgc2VsZi5rZWxseV9hdmdfd2luID0gdG90YWxfd2lu X3BubCAvIHdpbl9jb3VudCAvIDEwMCAgIyBDb252ZXJ0IHRvIHJhdGlvCiAgICAgICAgICAgIGlm IGxvc3NfY291bnQgPiAwOgogICAgICAgICAgICAgICAgc2VsZi5rZWxseV9hdmdfbG9zcyA9IHRv dGFsX2xvc3NfcG5sIC8gbG9zc19jb3VudCAvIDEwMAoKICAgICAgICAjIFVwZGF0ZSBncmFkZSBw ZXJmb3JtYW5jZSB0YWJsZSBiYXNlZCBvbiBhY3R1YWwgcmVzdWx0cwogICAgICAgIGZvciBnLCBz dGF0cyBpbiBzZWxmLnNldHVwX3BlcmZvcm1hbmNlX2hpc3RvcnkuaXRlbXMoKToKICAgICAgICAg ICAgdG90YWwgPSBzdGF0c1snd2lucyddICsgc3RhdHNbJ2xvc3NlcyddCiAgICAgICAgICAgIGlm IHRvdGFsID49IDU6ICAjIE1pbmltdW0gc2FtcGxlIHNpemUgcGVyIGdyYWRlCiAgICAgICAgICAg ICAgICB3aW5fcmF0ZSA9IHN0YXRzWyd3aW5zJ10gLyB0b3RhbAogICAgICAgICAgICAgICAgIyBC bGVuZCB3aXRoIGRlZmF1bHQgdmFsdWVzCiAgICAgICAgICAgICAgICBkZWZhdWx0X3JhdGUgPSBz ZWxmLmdyYWRlX3BlcmZvcm1hbmNlLmdldChnLCAwLjMpCiAgICAgICAgICAgICAgICBzZWxmLmdy YWRlX3BlcmZvcm1hbmNlW2ddID0gKGRlZmF1bHRfcmF0ZSAqIDAuNSArIHdpbl9yYXRlICogMC41 KSAgIyA1MCUgaGlzdG9yaWNhbCwgNTAlIGFjdHVhbAoKICAgICAgICAjIFRyYWNrIGRyYXdkb3du CiAgICAgICAgaWYgc2VsZi5kYWlseV9wbmwgPCBzZWxmLmN1cnJlbnRfZHJhd2Rvd246CiAgICAg ICAgICAgIHNlbGYuY3VycmVudF9kcmF3ZG93biA9IHNlbGYuZGFpbHlfcG5sCgogICAgICAgICMg UmVzZXQgZGFpbHkgUCZMIGlmIG5ldyBkYXkgKHNpbXBsaWZpZWQgLSB3b3VsZCBuZWVkIGRhdGUg dHJhY2tpbmcgaW4gcHJvZHVjdGlvbikKICAgICAgICBpZiBzZWxmLmRhaWx5X3BubCA8IHNlbGYu bWF4X2RhaWx5X2xvc3M6CiAgICAgICAgICAgIHNlbGYubG9nX2FjdGl2aXR5KCJbQlJBSU46IEFM RVJUXSBEYWlseSBsb3NzIGxpbWl0IGhpdCAtIHJlZHVjaW5nIHNpemUiLCAiV0FSTiIpCiAgICAg ICAgICAgIHNlbGYucmlza19tb2RlID0gUmlza01vZGUuUklTS19PRkYKCiAgICBkZWYgZXhwb3J0 X2FuYWx5c2lzX3JlcG9ydChzZWxmKToKICAgICAgICByZXR1cm4gTm9uZQoKICAgIGRlZiBnZXRf dmFsaWRhdGlvbl9zdW1tYXJ5KHNlbGYpOgogICAgICAgIHJldHVybiB7InRvdGFsX3RyYWRlcyI6 IDAsICJ3aW5zIjogMCwgImxvc3NlcyI6IDB9CgogICAgZGVmIHNhdmVfc2Vzc2lvbihzZWxmKToK ICAgICAgICBwYXNzCgoKY2xhc3MgQ2lyY3VpdEJyZWFrZXI6CiAgICAiIiJTdHViIGZvciBDaXJj dWl0QnJlYWtlciAtIGZlYXR1cmUgcmVtb3ZlZCBpbiBsaXRlIHZlcnNpb24uIiIiCgogICAgZGVm IF9faW5pdF9fKHNlbGYpOgogICAgICAgIHNlbGYuZGFpbHlfc3RhcnRfcG5sID0gMAogICAgICAg IHNlbGYud2Vla2x5X3N0YXJ0X3BubCA9IDAKICAgICAgICBzZWxmLmNvbnNlY3V0aXZlX2xvc3Nl cyA9IDAKCiAgICBkZWYgdXBkYXRlKHNlbGYsIHRvdGFsX3BubCwgdHJhZGVfaW5mbz1Ob25lKToK ICAgICAgICAiIiJBbHdheXMgcmV0dXJucyBjYW5fdHJhZGU9VHJ1ZSwgbm9fcGF1c2VfcmVhc29u IiIiCiAgICAgICAgcmV0dXJuIFRydWUsIE5vbmUKCiAgICBkZWYgZ2V0X3N0YXR1cyhzZWxmKToK ICAgICAgICByZXR1cm4gIklOQUNUSVZFIiwgTm9uZQoKCmNsYXNzIFRyYWRlTG9nZ2VyOgogICAg IiIiCiAgICBDb21wcmVoZW5zaXZlIHRyYWRlIGxvZ2dpbmcgZm9yIGFsZ29yaXRobSBpbXByb3Zl bWVudC4KICAgIENhcHR1cmVzIHNldHVwIGZpbmdlcnByaW50cywgZW50cnkvZXhpdCBkYXRhLCBh bmQgb3V0Y29tZXMuCiAgICAiIiIKCiAgICBkZWYgX19pbml0X18oc2VsZiwgZGF0YV9kaXI9REFU QV9ESVIpOgogICAgICAgIHNlbGYuZGF0YV9kaXIgPSBkYXRhX2RpcgogICAgICAgIHNlbGYudHJh ZGVzX2ZpbGUgPSBvcy5wYXRoLmpvaW4oZGF0YV9kaXIsICJ0cmFkZXNfbG9nLmNzdiIpCiAgICAg ICAgc2VsZi5zZXR1cHNfZmlsZSA9IG9zLnBhdGguam9pbihkYXRhX2RpciwgInNldHVwc19sb2cu Y3N2IikKICAgICAgICBzZWxmLmVuc3VyZV9maWxlc19leGlzdCgpCiAgICAgICAgc2VsZi5hY3Rp dmVfdHJhZGVzID0ge30gICMgVHJhY2sgb3BlbiB0cmFkZXMgZm9yIG91dGNvbWUgbG9nZ2luZwoK ICAgIGRlZiBlbnN1cmVfZmlsZXNfZXhpc3Qoc2VsZik6CiAgICAgICAgIiIiQ3JlYXRlIENTViBm aWxlcyB3aXRoIGhlYWRlcnMgaWYgdGhleSBkb24ndCBleGlzdC4iIiIKICAgICAgICAjIFRyYWRl cyBmaWxlIC0gb25lIHJvdyBwZXIgY29tcGxldGVkIHRyYWRlCiAgICAgICAgaWYgbm90IG9zLnBh dGguZXhpc3RzKHNlbGYudHJhZGVzX2ZpbGUpOgogICAgICAgICAgICBoZWFkZXJzID0gWwogICAg ICAgICAgICAgICAgInRyYWRlX2lkIiwgInRpbWVzdGFtcF9lbnRyeSIsICJ0aW1lc3RhbXBfZXhp dCIsICJob2xkX3RpbWVfbWluIiwKICAgICAgICAgICAgICAgICJwYWlyIiwgImRpcmVjdGlvbiIs ICJzZXR1cF90eXBlIiwgImdyYWRlIiwgInRvdGFsX3Njb3JlIiwKICAgICAgICAgICAg