RlVOS1RJT046CiAgICAgcHJvdGVjdGVkIDxpbnR8PHN0cmluZ3xjbG9zdXJlPiogPiogR3VhcmRFeGl0KG9iamVjdCByb29tLCBpbnQgaG9va2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3RyaW5nfGNsb3N1cmU+KiBoZGF0YSk7CgpERUZJTklFUlQgSU46CiAgICAgL3N0ZC9ucGMvbW92aW5nLmMKCkFSR1VNRU5URToKICAgICByb29tCiAgICAgICAgICBEZXIgZGVuIEhvb2sgYXVzbG9lc2VuZGUgUmF1bSAoZW52aXJvbm1lbnQoKSkKICAgICBob29raWQKICAgICAgICAgIERpZSBJRCBkZXMgSG9va3MgKEhfSE9PS19FWElUX1VTRSkKICAgICBoZGF0YQogICAgICAgICAgRWluIEFycmF5IG1pdCAzIEVsZW1lbnRlbjoKICAgICAgICAgICh7CiAgICAgICAgICAgICAgdmVyYiAtIERhcyBLb21tYW5kb3ZlcmIvQXVzZ2FuZ3NuYW1lIChzdHJpbmcpCiAgICAgICAgICAgICAgZGVzdCAtIFppZWxyYXVtIChzdHJpbmcpIG9kZXIgY2xvc3VyZSAoc3BlY2lhbCBleGl0cykKICAgICAgICAgICAgICBtc2cgIC0gQmV3ZWd1bmdzcmljaHR1bmcgKHN0cmluZykgb2RlciAwCiAgICAgICAgICB9KQoKQkVTQ0hSRUlCVU5HOgogICAgIElzdCBkaWVzZSBGdW5rdGlvbiBpbiBlaW5lbSBOUEMgZGVmaW5pZXJ0LCB0cmFlZ3Qgc2ljaCBkZXIgTlBDIGJlaSBqZWRlcgogICAgIEJld2VndW5nIGF1dG9tYXRpc2NoIGFscyBLb25zdW1lbnQgdm9uIEhfSE9PS19FWElUX1VTRSBlaW4gdW5kIGRpZXNlCiAgICAgRnVua3Rpb24gd2lyZCBpbW1lciBnZXJ1ZmVuLCB3ZW5uIGVpbiBMZWJld2VzZW4gaW0gZ2xlaWNoZW4gRW52aXJvbm1lbnQKICAgICB3aWUgZGVyIE5QQyB2ZXJzdWNodCwgZWluZW4gQXVzZ2FuZyB6dSBiZW51dHplbi4KICAgICBEZXIgTlBDIGthbm4gZGFubiBkaWUgQmV3ZWd1bmcgYWJicmVjaGVuICh1bmQgc28gZGVuIEF1c2dhbmcKICAgICBibG9ja2llcmVuKSwgWmllbCBvZGVyIEJld2VndW5nc21lbGR1bmcgYWVuZGVybiBvZGVyIGtlaW5lIFZlcmFlbmRlcnVuZwogICAgIHZvcm5laG1lbi4KICAgICBEaWUgS29uc3RhbnRlbiBmdWVyIEhvb2tpZCB1bmQgSG9va3N0YXR1cyAocy4gUnVlY2tnYWJld2VydCkgc2luZCBpbgogICAgIDxob29rLmg+IGRlZmluaWVydC4KClJVZUNLR0FCRVdFUlQ6CiAgICAgQXJyYXkgbWl0IHp3ZWkgRWxlbWVudGVuOgogICAgICh7CiAgICAgICAgIEhfTk9fTU9EIC8gSF9BTFRFUkVEIC8gSF9DQU5DRUxMRUQsCiAgICAgICAgIGhkYXRhCiAgICAgfSkKICAgICBoZGF0YSBpc3QgZ2dmLiBkYXMgZ2VhZW5kZXJ0ZSBBcnJheSwgd2VsY2hlcyBkaWUgRnVua3Rpb24gdWViZXJnZWJlbgogICAgIHdpcmQuIFdlaXRlcmUgRGV0YWlscyBzLiBhdWNoIC9kb2Mvc3RkL2hvb2tzCgpCRU1FUktVTkdFTjoKICAgICBEaWUgQW56YWhsIGFuIEtvbnN1bWVudGVuIGVpbmVzIEhvb2tzIGlzdCBiZWdyZW56dC4gRXMgaXN0IGRhaGVyCiAgICAgbW9lZ2xpY2gsIGRhc3MgZGllIFJlZ2lzdHJpZXJ1bmcgbmljaHQga2xhcHB0LCB3ZW5uIHp1dmllbGUgKD41KSBXYWVjaHRlcgogICAgIGltIFJhdW0gc2luZC4gV2lsbCBtYW4gZGFyYXVmIHJlYWdpZXJlbiwgbXVlc3N0ZSBtYW4gZGllIFJlZ2lzdHJpZXJ1bmcKICAgICBwcnVlZmVuLgogICAgIEVpbiBOUEMsIHdlbGNoZXIgR3VhcmRFeGl0KCkgZGVmaW5pZXJ0LCBhYmVyIGltIGFrdHVlbGxlbiBFbnZpcm9ubWVudAogICAgIGtlaW5lIFdhY2hlIGhhbHRlbiB3aWxsLCBr9m5udGUgc2ljaCBzZWxiZXIgZGUtcmVnaXN0cmllcmVuLgoKQkVJU1BJRUxFOgogICAgIDxpbnR8PHN0cmluZ3xjbG9zdXJlPiogPiogR3VhcmRFeGl0KG9iamVjdCByb29tLCBpbnQgaG9va2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdHJpbmd8Y2xvc3VyZT4qIGhkYXRhKQogICAgIHsKICAgICAgIC8vIE51ciBpbiBHZWZhZW5nbmlzcmFldW1lbiBXYWNoZSBoYWx0ZW4KICAgICAgIGlmIChzdHJzdHIob2JqZWN0X25hbWUoZW52aXJvbm1lbnQoKSksICIvcm9vbS9qYWlsIik9PTApCiAgICAgICB7CiAgICAgICAgIC8vIEhpZXIgZ2VodHMgbmljaHQgcmF1cy4gOy0pCiAgICAgICAgIGlmIChoZGF0YVswXSA9PSAicmF1cyIpIHsKICAgICAgICAgICAgIHRlbGxfb2JqZWN0KHRoaXNfcGxheWVyKCksIC4uLik7CiAgICAgICAgICAgICByZXR1cm4gKHtIX0NBTkNFTExFRCwgaGRhdGF9KTsKICAgICAgICAgfQogICAgICAgICAvLyBTcGVjaWFsIGV4aXRzIGVyc2V0emVuIHdpciBkdXJjaCBlaW5lbiBlaWdlbmVuCiAgICAgICAgIGVsc2UgaWYgKGNsb3N1cmVwKGhkYXRhWzFdKSkgewogICAgICAgICAgIGhkYXRhWzFdID0gIydteV9zcGVjaWFsX2V4aXQ7CiAgICAgICAgICAgcmV0dXJuICh7SF9BTFRFUkVELCBoZGF0YX0pOwogICAgICAgICB9CiAgICAgICAgIC8vIGFsbGUgYW5kZXJlbiBBdXNnYWVuZ2UgaW4gZGllIHBlcnNvZW5saWNoZSBaZWxsZQogICAgICAgICBlbHNlIHsKICAgICAgICAgICB0ZWxsX29iamVjdCh0aGlzX3BsYXllcigpLCAuLi4pOwogICAgICAgICAgIGhkYXRhWzFdID0gIi9yb29tL2phaWxfIitnZXR1aWQodGhpc19wbGF5ZXIoKSk7CiAgICAgICAgICAgaGRhdGFbMl0gPSAiU3VlZGVuIjsKICAgICAgICAgICByZXR1cm4gKHtIX0FMVEVSRUQsIGhkYXRhfSk7CiAgICAgICAgIH0KICAgICAgfQogICAgICAvLyBpbiBhbGxlbiBhbmRlcmVuIFJhZXVtZW4gbmljaHQgZWluZ3JlaWZlbgogICAgICByZXR1cm4gKHtIX05PX01PRCwgaGRhdGF9KTsKICAgIH0KCgpTSUVIRSBBVUNIOgogICAgIEFkZEV4aXQsIEFkZFNwZWNpYWxFeGl0LCBSZW1vdmVFeGl0CiAgICAgSFJlZ2lzdGVyVG9Ib29rLCBIUmVnaXN0ZXJNb2RpZmllciwgSFVucmVnaXN0ZXJGcm9tSG9vawogICAgIC9kb2Mvc3RkL2hvb2tzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KMjAuMDIuMjAxNiwgWmVzc3RyYQoyMi4wNS4yMDE2LCBNdXBmZWwgKEJlaXNwaWVsIGtvcnJpZ2llcnQpCg==