| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- /*
- *
- * Copyright 2017, Google Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following disclaimer
- * in the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
- // GENERATED: DO NOT EDIT
- //
- // This file contains base64 encodings of templates used for Swift GRPC code generation.
- //
- func loadTemplates() -> [String:String] {
- var templates : [String:String] = [:]
- templates["client-call-bidistreaming.swift"] = "Ly8vIHt7IG1ldGhvZHxtZXRob2REZXNjcmlwdG9yTmFtZSB9fSAoQmlkaXJlY3Rpb25hbCBTdHJlYW1pbmcpCnt7IGFjY2VzcyB9fSBjbGFzcyB7eyAufGNhbGw6ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fSB7CiAgcHJpdmF0ZSB2YXIgY2FsbCA6IENhbGwKCiAgLy8vIENyZWF0ZSBhIGNhbGwuCiAgZmlsZXByaXZhdGUgaW5pdChfIGNoYW5uZWw6IENoYW5uZWwpIHsKICAgIHNlbGYuY2FsbCA9IGNoYW5uZWwubWFrZUNhbGwoInt7IC58cGF0aDpmaWxlLHNlcnZpY2UsbWV0aG9kIH19IikKICB9CgogIC8vLyBDYWxsIHRoaXMgdG8gc3RhcnQgYSBjYWxsLiBOb25ibG9ja2luZy4KICBmaWxlcHJpdmF0ZSBmdW5jIHN0YXJ0KG1ldGFkYXRhOk1ldGFkYXRhLCBjb21wbGV0aW9uOkBlc2NhcGluZyAoQ2FsbFJlc3VsdCktPigpKQogICAgdGhyb3dzIC0+IHt7IC58Y2FsbDpmaWxlLHNlcnZpY2UsbWV0aG9kIH19IHsKICAgICAgdHJ5IHNlbGYuY2FsbC5zdGFydCguYmlkaVN0cmVhbWluZywgbWV0YWRhdGE6bWV0YWRhdGEsIGNvbXBsZXRpb246Y29tcGxldGlvbikKICAgICAgcmV0dXJuIHNlbGYKICB9CgogIC8vLyBDYWxsIHRoaXMgdG8gd2FpdCBmb3IgYSByZXN1bHQuIEJsb2NraW5nLgogIHt7IGFjY2VzcyB9fSBmdW5jIHJlY2VpdmUoKSB0aHJvd3MgLT4ge3sgbWV0aG9kfG91dHB1dCB9fSB7CiAgICB2YXIgcmV0dXJuRXJyb3IgOiB7eyAufGNsaWVudGVycm9yOmZpbGUsc2VydmljZSB9fT8KICAgIHZhciByZXR1cm5NZXNzYWdlIDoge3sgbWV0aG9kfG91dHB1dCB9fSEKICAgIGxldCBzZW0gPSBEaXNwYXRjaFNlbWFwaG9yZSh2YWx1ZTogMCkKICAgIGRvIHsKICAgICAgdHJ5IHJlY2VpdmUoKSB7cmVzcG9uc2UsIGVycm9yIGluCiAgICAgICAgcmV0dXJuTWVzc2FnZSA9IHJlc3BvbnNlCiAgICAgICAgcmV0dXJuRXJyb3IgPSBlcnJvcgogICAgICAgIHNlbS5zaWduYWwoKQogICAgICB9CiAgICAgIF8gPSBzZW0ud2FpdCh0aW1lb3V0OiBEaXNwYXRjaFRpbWUuZGlzdGFudEZ1dHVyZSkKICAgIH0KICAgIGlmIGxldCByZXR1cm5FcnJvciA9IHJldHVybkVycm9yIHsKICAgICAgdGhyb3cgcmV0dXJuRXJyb3IKICAgIH0KICAgIHJldHVybiByZXR1cm5NZXNzYWdlCiAgfQoKICAvLy8gQ2FsbCB0aGlzIHRvIHdhaXQgZm9yIGEgcmVzdWx0LiBOb25ibG9ja2luZy4KICB7eyBhY2Nlc3MgfX0gZnVuYyByZWNlaXZlKGNvbXBsZXRpb246QGVzY2FwaW5nICh7eyBtZXRob2R8b3V0cHV0IH19Pywge3sgLnxjbGllbnRlcnJvcjpmaWxlLHNlcnZpY2UgfX0/KS0+KCkpIHRocm93cyB7CiAgICBkbyB7CiAgICAgIHRyeSBjYWxsLnJlY2VpdmVNZXNzYWdlKCkgeyhkYXRhKSBpbgogICAgICAgIGlmIGxldCBkYXRhID0gZGF0YSB7CiAgICAgICAgICBpZiBsZXQgcmV0dXJuTWVzc2FnZSA9IHRyeT8ge3sgbWV0aG9kfG91dHB1dCB9fShzZXJpYWxpemVkRGF0YTpkYXRhKSB7CiAgICAgICAgICAgIGNvbXBsZXRpb24ocmV0dXJuTWVzc2FnZSwgbmlsKQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29tcGxldGlvbihuaWwsIHt7IC58Y2xpZW50ZXJyb3I6ZmlsZSxzZXJ2aWNlIH19LmludmFsaWRNZXNzYWdlUmVjZWl2ZWQpCiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbXBsZXRpb24obmlsLCB7eyAufGNsaWVudGVycm9yOmZpbGUsc2VydmljZSB9fS5lbmRPZlN0cmVhbSkKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CgogIC8vLyBDYWxsIHRoaXMgdG8gc2VuZCBlYWNoIG1lc3NhZ2UgaW4gdGhlIHJlcXVlc3Qgc3RyZWFtLgogIHt7IGFjY2VzcyB9fSBmdW5jIHNlbmQoXyBtZXNzYWdlOnt7IG1ldGhvZHxpbnB1dCB9fSwgZXJyb3JIYW5kbGVyOkBlc2NhcGluZyAoRXJyb3IpLT4oKSkgdGhyb3dzIHsKICAgIGxldCBtZXNzYWdlRGF0YSA9IHRyeSBtZXNzYWdlLnNlcmlhbGl6ZWREYXRhKCkKICAgIHRyeSBjYWxsLnNlbmRNZXNzYWdlKGRhdGE6bWVzc2FnZURhdGEsIGVycm9ySGFuZGxlcjplcnJvckhhbmRsZXIpCiAgfQoKICAvLy8gQ2FsbCB0aGlzIHRvIGNsb3NlIHRoZSBzZW5kaW5nIGNvbm5lY3Rpb24uIEJsb2NraW5nLgogIHt7IGFjY2VzcyB9fSBmdW5jIGNsb3NlU2VuZCgpIHRocm93cyB7CiAgICBsZXQgc2VtID0gRGlzcGF0Y2hTZW1hcGhvcmUodmFsdWU6IDApCiAgICB0cnkgY2xvc2VTZW5kKCkgewogICAgICBzZW0uc2lnbmFsKCkKICAgIH0KICAgIF8gPSBzZW0ud2FpdCh0aW1lb3V0OiBEaXNwYXRjaFRpbWUuZGlzdGFudEZ1dHVyZSkKICB9CgogIC8vLyBDYWxsIHRoaXMgdG8gY2xvc2UgdGhlIHNlbmRpbmcgY29ubmVjdGlvbi4gTm9uYmxvY2tpbmcuCiAge3sgYWNjZXNzIH19IGZ1bmMgY2xvc2VTZW5kKGNvbXBsZXRpb246QGVzY2FwaW5nICgpLT4oKSkgdGhyb3dzIHsKICAgIHRyeSBjYWxsLmNsb3NlKCkgewogICAgICBjb21wbGV0aW9uKCkKICAgIH0KICB9CgogIC8vLyBDYW5jZWwgdGhlIGNhbGwuCiAge3sgYWNjZXNzIH19IGZ1bmMgY2FuY2VsKCkgewogICAgY2FsbC5jYW5jZWwoKQogIH0KfQo="
- templates["client-call-clientstreaming.swift"] = "Ly8vIHt7IG1ldGhvZHxtZXRob2REZXNjcmlwdG9yTmFtZSB9fSAoQ2xpZW50IFN0cmVhbWluZykKe3sgYWNjZXNzIH19IGNsYXNzIHt7IC58Y2FsbDpmaWxlLHNlcnZpY2UsbWV0aG9kIH19IHsKICBwcml2YXRlIHZhciBjYWxsIDogQ2FsbAoKICAvLy8gQ3JlYXRlIGEgY2FsbC4KICBmaWxlcHJpdmF0ZSBpbml0KF8gY2hhbm5lbDogQ2hhbm5lbCkgewogICAgc2VsZi5jYWxsID0gY2hhbm5lbC5tYWtlQ2FsbCgie3sgLnxwYXRoOmZpbGUsc2VydmljZSxtZXRob2QgfX0iKQogIH0KCiAgLy8vIENhbGwgdGhpcyB0byBzdGFydCBhIGNhbGwuIE5vbmJsb2NraW5nLgogIGZpbGVwcml2YXRlIGZ1bmMgc3RhcnQobWV0YWRhdGE6TWV0YWRhdGEsIGNvbXBsZXRpb246QGVzY2FwaW5nIChDYWxsUmVzdWx0KS0+KCkpCiAgICB0aHJvd3MgLT4ge3sgLnxjYWxsOmZpbGUsc2VydmljZSxtZXRob2QgfX0gewogICAgICB0cnkgc2VsZi5jYWxsLnN0YXJ0KC5jbGllbnRTdHJlYW1pbmcsIG1ldGFkYXRhOm1ldGFkYXRhLCBjb21wbGV0aW9uOmNvbXBsZXRpb24pCiAgICAgIHJldHVybiBzZWxmCiAgfQoKICAvLy8gQ2FsbCB0aGlzIHRvIHNlbmQgZWFjaCBtZXNzYWdlIGluIHRoZSByZXF1ZXN0IHN0cmVhbS4gTm9uYmxvY2tpbmcuCiAge3sgYWNjZXNzIH19IGZ1bmMgc2VuZChfIG1lc3NhZ2U6e3sgbWV0aG9kfGlucHV0IH19LCBlcnJvckhhbmRsZXI6QGVzY2FwaW5nIChFcnJvciktPigpKSB0aHJvd3MgewogICAgbGV0IG1lc3NhZ2VEYXRhID0gdHJ5IG1lc3NhZ2Uuc2VyaWFsaXplZERhdGEoKQogICAgdHJ5IGNhbGwuc2VuZE1lc3NhZ2UoZGF0YTptZXNzYWdlRGF0YSwgZXJyb3JIYW5kbGVyOmVycm9ySGFuZGxlcikKICB9CgogIC8vLyBDYWxsIHRoaXMgdG8gY2xvc2UgdGhlIGNvbm5lY3Rpb24gYW5kIHdhaXQgZm9yIGEgcmVzcG9uc2UuIEJsb2NraW5nLgogIHt7IGFjY2VzcyB9fSBmdW5jIGNsb3NlQW5kUmVjZWl2ZSgpIHRocm93cyAtPiB7eyBtZXRob2R8b3V0cHV0IH19IHsKICAgIHZhciByZXR1cm5FcnJvciA6IHt7IC58Y2xpZW50ZXJyb3I6ZmlsZSxzZXJ2aWNlIH19PwogICAgdmFyIHJldHVyblJlc3BvbnNlIDoge3sgbWV0aG9kfG91dHB1dCB9fSEKICAgIGxldCBzZW0gPSBEaXNwYXRjaFNlbWFwaG9yZSh2YWx1ZTogMCkKICAgIGRvIHsKICAgICAgdHJ5IGNsb3NlQW5kUmVjZWl2ZSgpIHtyZXNwb25zZSwgZXJyb3IgaW4KICAgICAgICByZXR1cm5SZXNwb25zZSA9IHJlc3BvbnNlCiAgICAgICAgcmV0dXJuRXJyb3IgPSBlcnJvcgogICAgICAgIHNlbS5zaWduYWwoKQogICAgICB9CiAgICAgIF8gPSBzZW0ud2FpdCh0aW1lb3V0OiBEaXNwYXRjaFRpbWUuZGlzdGFudEZ1dHVyZSkKICAgIH0gY2F0Y2ggKGxldCBlcnJvcikgewogICAgICB0aHJvdyBlcnJvcgogICAgfQogICAgaWYgbGV0IHJldHVybkVycm9yID0gcmV0dXJuRXJyb3IgewogICAgICB0aHJvdyByZXR1cm5FcnJvcgogICAgfQogICAgcmV0dXJuIHJldHVyblJlc3BvbnNlCiAgfQoKICAvLy8gQ2FsbCB0aGlzIHRvIGNsb3NlIHRoZSBjb25uZWN0aW9uIGFuZCB3YWl0IGZvciBhIHJlc3BvbnNlLiBOb25ibG9ja2luZy4KICB7eyBhY2Nlc3MgfX0gZnVuYyBjbG9zZUFuZFJlY2VpdmUoY29tcGxldGlvbjpAZXNjYXBpbmcgKHt7IG1ldGhvZHxvdXRwdXQgfX0/LCB7eyAufGNsaWVudGVycm9yOmZpbGUsc2VydmljZSB9fT8pLT4oKSkKICAgIHRocm93cyB7CiAgICAgIGRvIHsKICAgICAgICB0cnkgY2FsbC5yZWNlaXZlTWVzc2FnZSgpIHsocmVzcG9uc2VEYXRhKSBpbgogICAgICAgICAgaWYgbGV0IHJlc3BvbnNlRGF0YSA9IHJlc3BvbnNlRGF0YSwKICAgICAgICAgICAgbGV0IHJlc3BvbnNlID0gdHJ5PyB7eyBtZXRob2R8b3V0cHV0IH19KHNlcmlhbGl6ZWREYXRhOnJlc3BvbnNlRGF0YSkgewogICAgICAgICAgICBjb21wbGV0aW9uKHJlc3BvbnNlLCBuaWwpCiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb21wbGV0aW9uKG5pbCwge3sgLnxjbGllbnRlcnJvcjpmaWxlLHNlcnZpY2UgfX0uaW52YWxpZE1lc3NhZ2VSZWNlaXZlZCkKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdHJ5IGNhbGwuY2xvc2UoY29tcGxldGlvbjp7fSkKICAgICAgfSBjYXRjaCAobGV0IGVycm9yKSB7CiAgICAgICAgdGhyb3cgZXJyb3IKICAgICAgfQogIH0KCiAgLy8vIENhbmNlbCB0aGUgY2FsbC4KICB7eyBhY2Nlc3MgfX0gZnVuYyBjYW5jZWwoKSB7CiAgICBjYWxsLmNhbmNlbCgpCiAgfQp9Cg=="
- templates["client-call-serverstreaming.swift"] = "Ly8vIHt7IG1ldGhvZHxtZXRob2REZXNjcmlwdG9yTmFtZSB9fSAoU2VydmVyIFN0cmVhbWluZykKe3sgYWNjZXNzIH19IGNsYXNzIHt7IC58Y2FsbDpmaWxlLHNlcnZpY2UsbWV0aG9kIH19IHsKICBwcml2YXRlIHZhciBjYWxsIDogQ2FsbAoKICAvLy8gQ3JlYXRlIGEgY2FsbC4KICBmaWxlcHJpdmF0ZSBpbml0KF8gY2hhbm5lbDogQ2hhbm5lbCkgewogICAgc2VsZi5jYWxsID0gY2hhbm5lbC5tYWtlQ2FsbCgie3sgLnxwYXRoOmZpbGUsc2VydmljZSxtZXRob2QgfX0iKQogIH0KCiAgLy8vIENhbGwgdGhpcyBvbmNlIHdpdGggdGhlIG1lc3NhZ2UgdG8gc2VuZC4gTm9uYmxvY2tpbmcuCiAgZmlsZXByaXZhdGUgZnVuYyBzdGFydChyZXF1ZXN0OiB7eyBtZXRob2R8aW5wdXQgfX0sCiAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YTogTWV0YWRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9uOiBAZXNjYXBpbmcgKENhbGxSZXN1bHQpIC0+ICgpKQogICAgdGhyb3dzIC0+IHt7IC58Y2FsbDpmaWxlLHNlcnZpY2UsbWV0aG9kIH19IHsKICAgICAgbGV0IHJlcXVlc3REYXRhID0gdHJ5IHJlcXVlc3Quc2VyaWFsaXplZERhdGEoKQogICAgICB0cnkgY2FsbC5zdGFydCguc2VydmVyU3RyZWFtaW5nLAogICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YTptZXRhZGF0YSwKICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZTpyZXF1ZXN0RGF0YSwKICAgICAgICAgICAgICAgICAgICAgY29tcGxldGlvbjpjb21wbGV0aW9uKQogICAgICByZXR1cm4gc2VsZgogIH0KCiAgLy8vIENhbGwgdGhpcyB0byB3YWl0IGZvciBhIHJlc3VsdC4gQmxvY2tpbmcuCiAge3sgYWNjZXNzIH19IGZ1bmMgcmVjZWl2ZSgpIHRocm93cyAtPiB7eyBtZXRob2R8b3V0cHV0IH19IHsKICAgIHZhciByZXR1cm5FcnJvciA6IHt7IC58Y2xpZW50ZXJyb3I6ZmlsZSxzZXJ2aWNlIH19PwogICAgdmFyIHJldHVyblJlc3BvbnNlIDoge3sgbWV0aG9kfG91dHB1dCB9fSEKICAgIGxldCBzZW0gPSBEaXNwYXRjaFNlbWFwaG9yZSh2YWx1ZTogMCkKICAgIGRvIHsKICAgICAgdHJ5IHJlY2VpdmUoKSB7cmVzcG9uc2UsIGVycm9yIGluCiAgICAgICAgcmV0dXJuUmVzcG9uc2UgPSByZXNwb25zZQogICAgICAgIHJldHVybkVycm9yID0gZXJyb3IKICAgICAgICBzZW0uc2lnbmFsKCkKICAgICAgfQogICAgICBfID0gc2VtLndhaXQodGltZW91dDogRGlzcGF0Y2hUaW1lLmRpc3RhbnRGdXR1cmUpCiAgICB9CiAgICBpZiBsZXQgcmV0dXJuRXJyb3IgPSByZXR1cm5FcnJvciB7CiAgICAgIHRocm93IHJldHVybkVycm9yCiAgICB9CiAgICByZXR1cm4gcmV0dXJuUmVzcG9uc2UKICB9CgogIC8vLyBDYWxsIHRoaXMgdG8gd2FpdCBmb3IgYSByZXN1bHQuIE5vbmJsb2NraW5nLgogIHt7IGFjY2VzcyB9fSBmdW5jIHJlY2VpdmUoY29tcGxldGlvbjpAZXNjYXBpbmcgKHt7IG1ldGhvZHxvdXRwdXQgfX0/LCB7eyAufGNsaWVudGVycm9yOmZpbGUsc2VydmljZSB9fT8pLT4oKSkgdGhyb3dzIHsKICAgIGRvIHsKICAgICAgdHJ5IGNhbGwucmVjZWl2ZU1lc3NhZ2UoKSB7KHJlc3BvbnNlRGF0YSkgaW4KICAgICAgICBpZiBsZXQgcmVzcG9uc2VEYXRhID0gcmVzcG9uc2VEYXRhIHsKICAgICAgICAgIGlmIGxldCByZXNwb25zZSA9IHRyeT8ge3sgbWV0aG9kfG91dHB1dCB9fShzZXJpYWxpemVkRGF0YTpyZXNwb25zZURhdGEpIHsKICAgICAgICAgICAgY29tcGxldGlvbihyZXNwb25zZSwgbmlsKQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29tcGxldGlvbihuaWwsIHt7IC58Y2xpZW50ZXJyb3I6ZmlsZSxzZXJ2aWNlIH19LmludmFsaWRNZXNzYWdlUmVjZWl2ZWQpCiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbXBsZXRpb24obmlsLCB7eyAufGNsaWVudGVycm9yOmZpbGUsc2VydmljZSB9fS5lbmRPZlN0cmVhbSkKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CgogIC8vLyBDYW5jZWwgdGhlIGNhbGwuCiAge3sgYWNjZXNzIH19IGZ1bmMgY2FuY2VsKCkgewogICAgY2FsbC5jYW5jZWwoKQogIH0KfQo="
- templates["client-call-unary.swift"] = "Ly8vIHt7IG1ldGhvZHxtZXRob2REZXNjcmlwdG9yTmFtZSB9fSAoVW5hcnkpCnt7IGFjY2VzcyB9fSBjbGFzcyB7eyAufGNhbGw6ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fSB7CiAgcHJpdmF0ZSB2YXIgY2FsbCA6IENhbGwKCiAgLy8vIENyZWF0ZSBhIGNhbGwuCiAgZmlsZXByaXZhdGUgaW5pdChfIGNoYW5uZWw6IENoYW5uZWwpIHsKICAgIHNlbGYuY2FsbCA9IGNoYW5uZWwubWFrZUNhbGwoInt7IC58cGF0aDpmaWxlLHNlcnZpY2UsbWV0aG9kIH19IikKICB9CgogIC8vLyBSdW4gdGhlIGNhbGwuIEJsb2NrcyB1bnRpbCB0aGUgcmVwbHkgaXMgcmVjZWl2ZWQuCiAgZmlsZXByaXZhdGUgZnVuYyBydW4ocmVxdWVzdDoge3sgbWV0aG9kfGlucHV0IH19LAogICAgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhOiBNZXRhZGF0YSkgdGhyb3dzIC0+IHt7IG1ldGhvZHxvdXRwdXQgfX0gewogICAgbGV0IHNlbSA9IERpc3BhdGNoU2VtYXBob3JlKHZhbHVlOiAwKQogICAgdmFyIHJldHVybkNhbGxSZXN1bHQgOiBDYWxsUmVzdWx0IQogICAgdmFyIHJldHVyblJlc3BvbnNlIDoge3sgbWV0aG9kfG91dHB1dCB9fT8KICAgIF8gPSB0cnkgc3RhcnQocmVxdWVzdDpyZXF1ZXN0LCBtZXRhZGF0YTptZXRhZGF0YSkge3Jlc3BvbnNlLCBjYWxsUmVzdWx0IGluCiAgICAgIHJldHVyblJlc3BvbnNlID0gcmVzcG9uc2UKICAgICAgcmV0dXJuQ2FsbFJlc3VsdCA9IGNhbGxSZXN1bHQKICAgICAgc2VtLnNpZ25hbCgpCiAgICB9CiAgICBfID0gc2VtLndhaXQodGltZW91dDogRGlzcGF0Y2hUaW1lLmRpc3RhbnRGdXR1cmUpCiAgICBpZiBsZXQgcmV0dXJuUmVzcG9uc2UgPSByZXR1cm5SZXNwb25zZSB7CiAgICAgIHJldHVybiByZXR1cm5SZXNwb25zZQogICAgfSBlbHNlIHsKICAgICAgdGhyb3cge3sgLnxjbGllbnRlcnJvcjpmaWxlLHNlcnZpY2UgfX0uZXJyb3IoYzogcmV0dXJuQ2FsbFJlc3VsdCkKICAgIH0KICB9CgogIC8vLyBTdGFydCB0aGUgY2FsbC4gTm9uYmxvY2tpbmcuCiAgZmlsZXByaXZhdGUgZnVuYyBzdGFydChyZXF1ZXN0OiB7eyBtZXRob2R8aW5wdXQgfX0sCiAgICAgICAgICAgICAgICAgICAgICAgICBtZXRhZGF0YTogTWV0YWRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9uOiBAZXNjYXBpbmcgKHt7IG1ldGhvZHxvdXRwdXQgfX0/LCBDYWxsUmVzdWx0KS0+KCkpCiAgICB0aHJvd3MgLT4ge3sgLnxjYWxsOmZpbGUsc2VydmljZSxtZXRob2QgfX0gewoKICAgICAgbGV0IHJlcXVlc3REYXRhID0gdHJ5IHJlcXVlc3Quc2VyaWFsaXplZERhdGEoKQogICAgICB0cnkgY2FsbC5zdGFydCgudW5hcnksCiAgICAgICAgICAgICAgICAgICAgIG1ldGFkYXRhOm1ldGFkYXRhLAogICAgICAgICAgICAgICAgICAgICBtZXNzYWdlOnJlcXVlc3REYXRhKQogICAgICB7KGNhbGxSZXN1bHQpIGluCiAgICAgICAgaWYgbGV0IHJlc3BvbnNlRGF0YSA9IGNhbGxSZXN1bHQucmVzdWx0RGF0YSwKICAgICAgICAgIGxldCByZXNwb25zZSA9IHRyeT8ge3sgbWV0aG9kfG91dHB1dCB9fShzZXJpYWxpemVkRGF0YTpyZXNwb25zZURhdGEpIHsKICAgICAgICAgIGNvbXBsZXRpb24ocmVzcG9uc2UsIGNhbGxSZXN1bHQpCiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbXBsZXRpb24obmlsLCBjYWxsUmVzdWx0KQogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gc2VsZgogIH0KCiAgLy8vIENhbmNlbCB0aGUgY2FsbC4KICB7eyBhY2Nlc3MgfX0gZnVuYyBjYW5jZWwoKSB7CiAgICBjYWxsLmNhbmNlbCgpCiAgfQp9Cg=="
- templates["client.pb.swift"] = "LyoKICogRE8gTk9UIEVESVQuCiAqCiAqIEdlbmVyYXRlZCBieSB0aGUgcHJvdG9jb2wgYnVmZmVyIGNvbXBpbGVyLgogKiBTb3VyY2U6IHt7IGZpbGV8ZmlsZURlc2NyaXB0b3JOYW1lIH19CiAqCiAqLwoKLyoKICogQ29weXJpZ2h0IDIwMTcsIGdSUEMgQXV0aG9ycyBBbGwgcmlnaHRzIHJlc2VydmVkLgogKgogKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgogKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKICoKICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogKgogKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKi8KaW1wb3J0IEZvdW5kYXRpb24KaW1wb3J0IERpc3BhdGNoCmltcG9ydCBnUlBDCmltcG9ydCBTd2lmdFByb3RvYnVmCi8vLXslIGZvciBzZXJ2aWNlIGluIGZpbGUuc2VydmljZXMgJX0KCi8vLyBUeXBlIGZvciBlcnJvcnMgdGhyb3duIGZyb20gZ2VuZXJhdGVkIGNsaWVudCBjb2RlLgp7eyBhY2Nlc3MgfX0gZW51bSB7eyAufGNsaWVudGVycm9yOmZpbGUsc2VydmljZSB9fSA6IEVycm9yIHsKICBjYXNlIGVuZE9mU3RyZWFtCiAgY2FzZSBpbnZhbGlkTWVzc2FnZVJlY2VpdmVkCiAgY2FzZSBlcnJvcihjOiBDYWxsUmVzdWx0KQp9CgovLy17JSBmb3IgbWV0aG9kIGluIHNlcnZpY2UubWV0aG9kcyAlfQovLy17JSBpZiBtZXRob2R8bWV0aG9kSXNVbmFyeSAlfQovLy17JSBpbmNsdWRlICJjbGllbnQtY2FsbC11bmFyeS5zd2lmdCIgJX0KLy8teyUgZW5kaWYgJX0KLy8teyUgaWYgbWV0aG9kfG1ldGhvZElzU2VydmVyU3RyZWFtaW5nICV9Ci8vLXslIGluY2x1ZGUgImNsaWVudC1jYWxsLXNlcnZlcnN0cmVhbWluZy5zd2lmdCIgJX0KLy8teyUgZW5kaWYgJX0KLy8teyUgaWYgbWV0aG9kfG1ldGhvZElzQ2xpZW50U3RyZWFtaW5nICV9Ci8vLXslIGluY2x1ZGUgImNsaWVudC1jYWxsLWNsaWVudHN0cmVhbWluZy5zd2lmdCIgJX0KLy8teyUgZW5kaWYgJX0KLy8teyUgaWYgbWV0aG9kfG1ldGhvZElzQmlkaVN0cmVhbWluZyAlfQovLy17JSBpbmNsdWRlICJjbGllbnQtY2FsbC1iaWRpc3RyZWFtaW5nLnN3aWZ0IiAlfQovLy17JSBlbmRpZiAlfQovLy17JSBlbmRmb3IgJX0KLy8vIENhbGwgbWV0aG9kcyBvZiB0aGlzIGNsYXNzIHRvIG1ha2UgQVBJIGNhbGxzLgp7eyBhY2Nlc3MgfX0gY2xhc3Mge3sgLnxzZXJ2aWNlY2xhc3M6ZmlsZSxzZXJ2aWNlIH19IHsKICBwcml2YXRlIHZhciBjaGFubmVsOiBDaGFubmVsCgogIC8vLyBUaGlzIG1ldGFkYXRhIHdpbGwgYmUgc2VudCB3aXRoIGFsbCByZXF1ZXN0cy4KICB7eyBhY2Nlc3MgfX0gdmFyIG1ldGFkYXRhIDogTWV0YWRhdGEKCiAgLy8vIFRoaXMgcHJvcGVydHkgYWxsb3dzIHRoZSBzZXJ2aWNlIGhvc3QgbmFtZSB0byBiZSBvdmVycmlkZGVuLgogIC8vLyBGb3IgZXhhbXBsZSwgaXQgY2FuIGJlIHVzZWQgdG8gbWFrZSBjYWxscyB0byAibG9jYWxob3N0OjgwODAiCiAgLy8vIGFwcGVhciB0byBiZSB0byAiZXhhbXBsZS5jb20iLgogIHt7IGFjY2VzcyB9fSB2YXIgaG9zdCA6IFN0cmluZyB7CiAgICBnZXQgewogICAgICByZXR1cm4gc2VsZi5jaGFubmVsLmhvc3QKICAgIH0KICAgIHNldCB7CiAgICAgIHNlbGYuY2hhbm5lbC5ob3N0ID0gbmV3VmFsdWUKICAgIH0KICB9CgogIC8vLyBDcmVhdGUgYSBjbGllbnQuCiAge3sgYWNjZXNzIH19IGluaXQoYWRkcmVzczogU3RyaW5nLCBzZWN1cmU6IEJvb2wgPSB0cnVlKSB7CiAgICBnUlBDLmluaXRpYWxpemUoKQogICAgY2hhbm5lbCA9IENoYW5uZWwoYWRkcmVzczphZGRyZXNzLCBzZWN1cmU6c2VjdXJlKQogICAgbWV0YWRhdGEgPSBNZXRhZGF0YSgpCiAgfQoKICAvLy8gQ3JlYXRlIGEgY2xpZW50IHRoYXQgbWFrZXMgc2VjdXJlIGNvbm5lY3Rpb25zIHdpdGggYSBjdXN0b20gY2VydGlmaWNhdGUgYW5kIChvcHRpb25hbCkgaG9zdG5hbWUuCiAge3sgYWNjZXNzIH19IGluaXQoYWRkcmVzczogU3RyaW5nLCBjZXJ0aWZpY2F0ZXM6IFN0cmluZywgaG9zdDogU3RyaW5nPykgewogICAgZ1JQQy5pbml0aWFsaXplKCkKICAgIGNoYW5uZWwgPSBDaGFubmVsKGFkZHJlc3M6YWRkcmVzcywgY2VydGlmaWNhdGVzOmNlcnRpZmljYXRlcywgaG9zdDpob3N0KQogICAgbWV0YWRhdGEgPSBNZXRhZGF0YSgpCiAgfQoKICAvLy17JSBmb3IgbWV0aG9kIGluIHNlcnZpY2UubWV0aG9kcyAlfQogIC8vLXslIGlmIG1ldGhvZHxtZXRob2RJc1VuYXJ5ICV9CiAgLy8vIFN5bmNocm9ub3VzLiBVbmFyeS4KICB7eyBhY2Nlc3MgfX0gZnVuYyB7eyBtZXRob2R8bWV0aG9kRGVzY3JpcHRvck5hbWV8bG93ZXJjYXNlIH19KF8gcmVxdWVzdDoge3sgbWV0aG9kfGlucHV0IH19KQogICAgdGhyb3dzCiAgICAtPiB7eyBtZXRob2R8b3V0cHV0IH19IHsKICAgICAgcmV0dXJuIHRyeSB7eyAufGNhbGw6ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fShjaGFubmVsKS5ydW4ocmVxdWVzdDpyZXF1ZXN0LCBtZXRhZGF0YTptZXRhZGF0YSkKICB9CiAgLy8vIEFzeW5jaHJvbm91cy4gVW5hcnkuCiAge3sgYWNjZXNzIH19IGZ1bmMge3sgbWV0aG9kfG1ldGhvZERlc2NyaXB0b3JOYW1lfGxvd2VyY2FzZSB9fShfIHJlcXVlc3Q6IHt7IG1ldGhvZHxpbnB1dCB9fSwKICAgICAgICAgICAgICAgICAgY29tcGxldGlvbjogQGVzY2FwaW5nICh7eyBtZXRob2R8b3V0cHV0IH19PywgQ2FsbFJlc3VsdCktPigpKQogICAgdGhyb3dzCiAgICAtPiB7eyAufGNhbGw6ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fSB7CiAgICAgIHJldHVybiB0cnkge3sgLnxjYWxsOmZpbGUsc2VydmljZSxtZXRob2QgfX0oY2hhbm5lbCkuc3RhcnQocmVxdWVzdDpyZXF1ZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0YWRhdGE6bWV0YWRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9uOmNvbXBsZXRpb24pCiAgfQogIC8vLXslIGVuZGlmICV9CiAgLy8teyUgaWYgbWV0aG9kfG1ldGhvZElzU2VydmVyU3RyZWFtaW5nICV9CiAgLy8vIEFzeW5jaHJvbm91cy4gU2VydmVyLXN0cmVhbWluZy4KICAvLy8gU2VuZCB0aGUgaW5pdGlhbCBtZXNzYWdlLgogIC8vLyBVc2UgbWV0aG9kcyBvbiB0aGUgcmV0dXJuZWQgb2JqZWN0IHRvIGdldCBzdHJlYW1lZCByZXNwb25zZXMuCiAge3sgYWNjZXNzIH19IGZ1bmMge3sgbWV0aG9kfG1ldGhvZERlc2NyaXB0b3JOYW1lfGxvd2VyY2FzZSB9fShfIHJlcXVlc3Q6IHt7IG1ldGhvZHxpbnB1dCB9fSwgY29tcGxldGlvbjogQGVzY2FwaW5nIChDYWxsUmVzdWx0KS0+KCkpCiAgICB0aHJvd3MKICAgIC0+IHt7IC58Y2FsbDpmaWxlLHNlcnZpY2UsbWV0aG9kIH19IHsKICAgICAgcmV0dXJuIHRyeSB7eyAufGNhbGw6ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fShjaGFubmVsKS5zdGFydChyZXF1ZXN0OnJlcXVlc3QsIG1ldGFkYXRhOm1ldGFkYXRhLCBjb21wbGV0aW9uOmNvbXBsZXRpb24pCiAgfQogIC8vLXslIGVuZGlmICV9CiAgLy8teyUgaWYgbWV0aG9kfG1ldGhvZElzQ2xpZW50U3RyZWFtaW5nICV9CiAgLy8vIEFzeW5jaHJvbm91cy4gQ2xpZW50LXN0cmVhbWluZy4KICAvLy8gVXNlIG1ldGhvZHMgb24gdGhlIHJldHVybmVkIG9iamVjdCB0byBzdHJlYW0gbWVzc2FnZXMgYW5kCiAgLy8vIHRvIGNsb3NlIHRoZSBjb25uZWN0aW9uIGFuZCB3YWl0IGZvciBhIGZpbmFsIHJlc3BvbnNlLgogIHt7IGFjY2VzcyB9fSBmdW5jIHt7IG1ldGhvZHxtZXRob2REZXNjcmlwdG9yTmFtZXxsb3dlcmNhc2UgfX0oY29tcGxldGlvbjogQGVzY2FwaW5nIChDYWxsUmVzdWx0KS0+KCkpCiAgICB0aHJvd3MKICAgIC0+IHt7IC58Y2FsbDpmaWxlLHNlcnZpY2UsbWV0aG9kIH19IHsKICAgICAgcmV0dXJuIHRyeSB7eyAufGNhbGw6ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fShjaGFubmVsKS5zdGFydChtZXRhZGF0YTptZXRhZGF0YSwgY29tcGxldGlvbjpjb21wbGV0aW9uKQogIH0KICAvLy17JSBlbmRpZiAlfQogIC8vLXslIGlmIG1ldGhvZHxtZXRob2RJc0JpZGlTdHJlYW1pbmcgJX0KICAvLy8gQXN5bmNocm9ub3VzLiBCaWRpcmVjdGlvbmFsLXN0cmVhbWluZy4KICAvLy8gVXNlIG1ldGhvZHMgb24gdGhlIHJldHVybmVkIG9iamVjdCB0byBzdHJlYW0gbWVzc2FnZXMsCiAgLy8vIHRvIHdhaXQgZm9yIHJlcGxpZXMsIGFuZCB0byBjbG9zZSB0aGUgY29ubmVjdGlvbi4KICB7eyBhY2Nlc3MgfX0gZnVuYyB7eyBtZXRob2R8bWV0aG9kRGVzY3JpcHRvck5hbWV8bG93ZXJjYXNlIH19KGNvbXBsZXRpb246IEBlc2NhcGluZyAoQ2FsbFJlc3VsdCktPigpKQogICAgdGhyb3dzCiAgICAtPiB7eyAufGNhbGw6ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fSB7CiAgICAgIHJldHVybiB0cnkge3sgLnxjYWxsOmZpbGUsc2VydmljZSxtZXRob2QgfX0oY2hhbm5lbCkuc3RhcnQobWV0YWRhdGE6bWV0YWRhdGEsIGNvbXBsZXRpb246Y29tcGxldGlvbikKICB9CiAgLy8teyUgZW5kaWYgJX0KICAvLy17JSBlbmRmb3IgJX0KfQovLy17JSBlbmRmb3IgJX0K"
- templates["server-session-bidistreaming.swift"] = "Ly8ge3sgbWV0aG9kfG1ldGhvZERlc2NyaXB0b3JOYW1lIH19IChCaWRpcmVjdGlvbmFsIFN0cmVhbWluZykKe3sgYWNjZXNzIH19IGNsYXNzIHt7IC58c2Vzc2lvbjpmaWxlLHNlcnZpY2UsbWV0aG9kIH19IDoge3sgLnxzZXJ2aWNlOmZpbGUsc2VydmljZSB9fVNlc3Npb24gewogIHByaXZhdGUgdmFyIHByb3ZpZGVyIDoge3sgLnxwcm92aWRlcjpmaWxlLHNlcnZpY2UgfX0KCiAgLy8vIENyZWF0ZSBhIHNlc3Npb24uCiAgZmlsZXByaXZhdGUgaW5pdChoYW5kbGVyOmdSUEMuSGFuZGxlciwgcHJvdmlkZXI6IHt7IC58cHJvdmlkZXI6ZmlsZSxzZXJ2aWNlIH19KSB7CiAgICBzZWxmLnByb3ZpZGVyID0gcHJvdmlkZXIKICAgIHN1cGVyLmluaXQoaGFuZGxlcjpoYW5kbGVyKQogIH0KCiAgLy8vIFJlY2VpdmUgYSBtZXNzYWdlLiBCbG9ja3MgdW50aWwgYSBtZXNzYWdlIGlzIHJlY2VpdmVkIG9yIHRoZSBjbGllbnQgY2xvc2VzIHRoZSBjb25uZWN0aW9uLgogIHt7IGFjY2VzcyB9fSBmdW5jIHJlY2VpdmUoKSB0aHJvd3MgLT4ge3sgbWV0aG9kfGlucHV0IH19IHsKICAgIGxldCBzZW0gPSBEaXNwYXRjaFNlbWFwaG9yZSh2YWx1ZTogMCkKICAgIHZhciByZXF1ZXN0TWVzc2FnZSA6IHt7IG1ldGhvZHxpbnB1dCB9fT8KICAgIHRyeSBzZWxmLmhhbmRsZXIucmVjZWl2ZU1lc3NhZ2UoKSB7KHJlcXVlc3REYXRhKSBpbgogICAgICBpZiBsZXQgcmVxdWVzdERhdGEgPSByZXF1ZXN0RGF0YSB7CiAgICAgICAgZG8gewogICAgICAgICAgcmVxdWVzdE1lc3NhZ2UgPSB0cnkge3sgbWV0aG9kfGlucHV0IH19KHNlcmlhbGl6ZWREYXRhOnJlcXVlc3REYXRhKQogICAgICAgIH0gY2F0Y2ggKGxldCBlcnJvcikgewogICAgICAgICAgcHJpbnQoImVycm9yIFwoZXJyb3IpIikKICAgICAgICB9CiAgICAgIH0KICAgICAgc2VtLnNpZ25hbCgpCiAgICB9CiAgICBfID0gc2VtLndhaXQodGltZW91dDogRGlzcGF0Y2hUaW1lLmRpc3RhbnRGdXR1cmUpCiAgICBpZiBsZXQgcmVxdWVzdE1lc3NhZ2UgPSByZXF1ZXN0TWVzc2FnZSB7CiAgICAgIHJldHVybiByZXF1ZXN0TWVzc2FnZQogICAgfSBlbHNlIHsKICAgICAgdGhyb3cge3sgLnxzZXJ2ZXJlcnJvcjpmaWxlLHNlcnZpY2UgfX0uZW5kT2ZTdHJlYW0KICAgIH0KICB9CgogIC8vLyBTZW5kIGEgbWVzc2FnZS4gTm9uYmxvY2tpbmcuCiAge3sgYWNjZXNzIH19IGZ1bmMgc2VuZChfIHJlc3BvbnNlOiB7eyBtZXRob2R8b3V0cHV0IH19LCBjb21wbGV0aW9uOiBAZXNjYXBpbmcgKCktPigpKSB0aHJvd3MgewogICAgdHJ5IGhhbmRsZXIuc2VuZFJlc3BvbnNlKG1lc3NhZ2U6cmVzcG9uc2Uuc2VyaWFsaXplZERhdGEoKSkge2NvbXBsZXRpb24oKX0KICB9CgogIC8vLyBDbG9zZSBhIGNvbm5lY3Rpb24uIEJsb2NrcyB1bnRpbCB0aGUgY29ubmVjdGlvbiBpcyBjbG9zZWQuCiAge3sgYWNjZXNzIH19IGZ1bmMgY2xvc2UoKSB0aHJvd3MgewogICAgbGV0IHNlbSA9IERpc3BhdGNoU2VtYXBob3JlKHZhbHVlOiAwKQogICAgdHJ5IHNlbGYuaGFuZGxlci5zZW5kU3RhdHVzKHN0YXR1c0NvZGU6c2VsZi5zdGF0dXNDb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXR1c01lc3NhZ2U6c2VsZi5zdGF0dXNNZXNzYWdlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWlsaW5nTWV0YWRhdGE6c2VsZi50cmFpbGluZ01ldGFkYXRhKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW0uc2lnbmFsKCkKICAgIH0KICAgIF8gPSBzZW0ud2FpdCh0aW1lb3V0OiBEaXNwYXRjaFRpbWUuZGlzdGFudEZ1dHVyZSkKICB9CgogIC8vLyBSdW4gdGhlIHNlc3Npb24uIEludGVybmFsLgogIGZpbGVwcml2YXRlIGZ1bmMgcnVuKHF1ZXVlOkRpc3BhdGNoUXVldWUpIHRocm93cyB7CiAgICB0cnkgc2VsZi5oYW5kbGVyLnNlbmRNZXRhZGF0YShpbml0aWFsTWV0YWRhdGE6aW5pdGlhbE1ldGFkYXRhKSB7CiAgICAgIHF1ZXVlLmFzeW5jIHsKICAgICAgICBkbyB7CiAgICAgICAgICB0cnkgc2VsZi5wcm92aWRlci57eyBtZXRob2R8bWV0aG9kRGVzY3JpcHRvck5hbWV8bG93ZXJjYXNlIH19KHNlc3Npb246c2VsZikKICAgICAgICB9IGNhdGNoIChsZXQgZXJyb3IpIHsKICAgICAgICAgIHByaW50KCJlcnJvciBcKGVycm9yKSIpCiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQp9Cg=="
- templates["server-session-clientstreaming.swift"] = "Ly8ge3sgbWV0aG9kfG1ldGhvZERlc2NyaXB0b3JOYW1lIH19IChDbGllbnQgU3RyZWFtaW5nKQp7eyBhY2Nlc3MgfX0gY2xhc3Mge3sgLnxzZXNzaW9uOmZpbGUsc2VydmljZSxtZXRob2QgfX0gOiB7eyAufHNlcnZpY2U6ZmlsZSxzZXJ2aWNlIH19U2Vzc2lvbiB7CiAgcHJpdmF0ZSB2YXIgcHJvdmlkZXIgOiB7eyAufHByb3ZpZGVyOmZpbGUsc2VydmljZSB9fQoKICAvLy8gQ3JlYXRlIGEgc2Vzc2lvbi4KICBmaWxlcHJpdmF0ZSBpbml0KGhhbmRsZXI6Z1JQQy5IYW5kbGVyLCBwcm92aWRlcjoge3sgLnxwcm92aWRlcjpmaWxlLHNlcnZpY2UgfX0pIHsKICAgIHNlbGYucHJvdmlkZXIgPSBwcm92aWRlcgogICAgc3VwZXIuaW5pdChoYW5kbGVyOmhhbmRsZXIpCiAgfQoKICAvLy8gUmVjZWl2ZSBhIG1lc3NhZ2UuIEJsb2NrcyB1bnRpbCBhIG1lc3NhZ2UgaXMgcmVjZWl2ZWQgb3IgdGhlIGNsaWVudCBjbG9zZXMgdGhlIGNvbm5lY3Rpb24uCiAge3sgYWNjZXNzIH19IGZ1bmMgcmVjZWl2ZSgpIHRocm93cyAtPiB7eyBtZXRob2R8aW5wdXQgfX0gewogICAgbGV0IHNlbSA9IERpc3BhdGNoU2VtYXBob3JlKHZhbHVlOiAwKQogICAgdmFyIHJlcXVlc3RNZXNzYWdlIDoge3sgbWV0aG9kfGlucHV0IH19PwogICAgdHJ5IHNlbGYuaGFuZGxlci5yZWNlaXZlTWVzc2FnZSgpIHsocmVxdWVzdERhdGEpIGluCiAgICAgIGlmIGxldCByZXF1ZXN0RGF0YSA9IHJlcXVlc3REYXRhIHsKICAgICAgICByZXF1ZXN0TWVzc2FnZSA9IHRyeT8ge3sgbWV0aG9kfGlucHV0IH19KHNlcmlhbGl6ZWREYXRhOnJlcXVlc3REYXRhKQogICAgICB9CiAgICAgIHNlbS5zaWduYWwoKQogICAgfQogICAgXyA9IHNlbS53YWl0KHRpbWVvdXQ6IERpc3BhdGNoVGltZS5kaXN0YW50RnV0dXJlKQogICAgaWYgcmVxdWVzdE1lc3NhZ2UgPT0gbmlsIHsKICAgICAgdGhyb3cge3sgLnxzZXJ2ZXJlcnJvcjpmaWxlLHNlcnZpY2UgfX0uZW5kT2ZTdHJlYW0KICAgIH0KICAgIHJldHVybiByZXF1ZXN0TWVzc2FnZSEKICB9CgogIC8vLyBTZW5kIGEgcmVzcG9uc2UgYW5kIGNsb3NlIHRoZSBjb25uZWN0aW9uLgogIHt7IGFjY2VzcyB9fSBmdW5jIHNlbmRBbmRDbG9zZShfIHJlc3BvbnNlOiB7eyBtZXRob2R8b3V0cHV0IH19KSB0aHJvd3MgewogICAgdHJ5IHNlbGYuaGFuZGxlci5zZW5kUmVzcG9uc2UobWVzc2FnZTpyZXNwb25zZS5zZXJpYWxpemVkRGF0YSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdHVzQ29kZTpzZWxmLnN0YXR1c0NvZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNNZXNzYWdlOnNlbGYuc3RhdHVzTWVzc2FnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWlsaW5nTWV0YWRhdGE6c2VsZi50cmFpbGluZ01ldGFkYXRhKQogIH0KCiAgLy8vIFJ1biB0aGUgc2Vzc2lvbi4gSW50ZXJuYWwuCiAgZmlsZXByaXZhdGUgZnVuYyBydW4ocXVldWU6RGlzcGF0Y2hRdWV1ZSkgdGhyb3dzIHsKICAgIHRyeSBzZWxmLmhhbmRsZXIuc2VuZE1ldGFkYXRhKGluaXRpYWxNZXRhZGF0YTppbml0aWFsTWV0YWRhdGEpIHsKICAgICAgcXVldWUuYXN5bmMgewogICAgICAgIGRvIHsKICAgICAgICAgIHRyeSBzZWxmLnByb3ZpZGVyLnt7IG1ldGhvZHxtZXRob2REZXNjcmlwdG9yTmFtZXxsb3dlcmNhc2UgfX0oc2Vzc2lvbjpzZWxmKQogICAgICAgIH0gY2F0Y2ggKGxldCBlcnJvcikgewogICAgICAgICAgcHJpbnQoImVycm9yIFwoZXJyb3IpIikKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9Cn0K"
- templates["server-session-serverstreaming.swift"] = "Ly8ge3sgbWV0aG9kfG1ldGhvZERlc2NyaXB0b3JOYW1lIH19IChTZXJ2ZXIgU3RyZWFtaW5nKQp7eyBhY2Nlc3MgfX0gY2xhc3Mge3sgLnxzZXNzaW9uOmZpbGUsc2VydmljZSxtZXRob2QgfX0gOiB7eyAufHNlcnZpY2U6ZmlsZSxzZXJ2aWNlIH19U2Vzc2lvbiB7CiAgcHJpdmF0ZSB2YXIgcHJvdmlkZXIgOiB7eyAufHByb3ZpZGVyOmZpbGUsc2VydmljZSB9fQoKICAvLy8gQ3JlYXRlIGEgc2Vzc2lvbi4KICBmaWxlcHJpdmF0ZSBpbml0KGhhbmRsZXI6Z1JQQy5IYW5kbGVyLCBwcm92aWRlcjoge3sgLnxwcm92aWRlcjpmaWxlLHNlcnZpY2UgfX0pIHsKICAgIHNlbGYucHJvdmlkZXIgPSBwcm92aWRlcgogICAgc3VwZXIuaW5pdChoYW5kbGVyOmhhbmRsZXIpCiAgfQoKICAvLy8gU2VuZCBhIG1lc3NhZ2UuIE5vbmJsb2NraW5nLgogIHt7IGFjY2VzcyB9fSBmdW5jIHNlbmQoXyByZXNwb25zZToge3sgbWV0aG9kfG91dHB1dCB9fSwgY29tcGxldGlvbjogQGVzY2FwaW5nICgpLT4oKSkgdGhyb3dzIHsKICAgIHRyeSBoYW5kbGVyLnNlbmRSZXNwb25zZShtZXNzYWdlOnJlc3BvbnNlLnNlcmlhbGl6ZWREYXRhKCkpIHtjb21wbGV0aW9uKCl9CiAgfQoKICAvLy8gUnVuIHRoZSBzZXNzaW9uLiBJbnRlcm5hbC4KICBmaWxlcHJpdmF0ZSBmdW5jIHJ1bihxdWV1ZTpEaXNwYXRjaFF1ZXVlKSB0aHJvd3MgewogICAgdHJ5IHNlbGYuaGFuZGxlci5yZWNlaXZlTWVzc2FnZShpbml0aWFsTWV0YWRhdGE6aW5pdGlhbE1ldGFkYXRhKSB7KHJlcXVlc3REYXRhKSBpbgogICAgICBpZiBsZXQgcmVxdWVzdERhdGEgPSByZXF1ZXN0RGF0YSB7CiAgICAgICAgZG8gewogICAgICAgICAgbGV0IHJlcXVlc3RNZXNzYWdlID0gdHJ5IHt7IG1ldGhvZHxpbnB1dCB9fShzZXJpYWxpemVkRGF0YTpyZXF1ZXN0RGF0YSkKICAgICAgICAgIC8vIHRvIGtlZXAgcHJvdmlkZXJzIGZyb20gYmxvY2tpbmcgdGhlIHNlcnZlciB0aHJlYWQsCiAgICAgICAgICAvLyB3ZSBkaXNwYXRjaCB0aGVtIHRvIGFub3RoZXIgcXVldWUuCiAgICAgICAgICBxdWV1ZS5hc3luYyB7CiAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICB0cnkgc2VsZi5wcm92aWRlci57eyBtZXRob2R8bWV0aG9kRGVzY3JpcHRvck5hbWV8bG93ZXJjYXNlIH19KHJlcXVlc3Q6cmVxdWVzdE1lc3NhZ2UsIHNlc3Npb246IHNlbGYpCiAgICAgICAgICAgICAgdHJ5IHNlbGYuaGFuZGxlci5zZW5kU3RhdHVzKHN0YXR1c0NvZGU6c2VsZi5zdGF0dXNDb2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNNZXNzYWdlOnNlbGYuc3RhdHVzTWVzc2FnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhaWxpbmdNZXRhZGF0YTpzZWxmLnRyYWlsaW5nTWV0YWRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb246e30pCiAgICAgICAgICAgIH0gY2F0Y2ggKGxldCBlcnJvcikgewogICAgICAgICAgICAgIHByaW50KCJlcnJvcjogXChlcnJvcikiKQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSBjYXRjaCAobGV0IGVycm9yKSB7CiAgICAgICAgICBwcmludCgiZXJyb3I6IFwoZXJyb3IpIikKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9Cn0K"
- templates["server-session-unary.swift"] = "Ly8ge3sgbWV0aG9kfG1ldGhvZERlc2NyaXB0b3JOYW1lIH19IChVbmFyeSkKe3sgYWNjZXNzIH19IGNsYXNzIHt7IC58c2Vzc2lvbjpmaWxlLHNlcnZpY2UsbWV0aG9kIH19IDoge3sgLnxzZXJ2aWNlOmZpbGUsc2VydmljZSB9fVNlc3Npb24gewogIHByaXZhdGUgdmFyIHByb3ZpZGVyIDoge3sgLnxwcm92aWRlcjpmaWxlLHNlcnZpY2UgfX0KCiAgLy8vIENyZWF0ZSBhIHNlc3Npb24uCiAgZmlsZXByaXZhdGUgaW5pdChoYW5kbGVyOmdSUEMuSGFuZGxlciwgcHJvdmlkZXI6IHt7IC58cHJvdmlkZXI6ZmlsZSxzZXJ2aWNlIH19KSB7CiAgICBzZWxmLnByb3ZpZGVyID0gcHJvdmlkZXIKICAgIHN1cGVyLmluaXQoaGFuZGxlcjpoYW5kbGVyKQogIH0KCiAgLy8vIFJ1biB0aGUgc2Vzc2lvbi4gSW50ZXJuYWwuCiAgZmlsZXByaXZhdGUgZnVuYyBydW4ocXVldWU6RGlzcGF0Y2hRdWV1ZSkgdGhyb3dzIHsKICAgIHRyeSBoYW5kbGVyLnJlY2VpdmVNZXNzYWdlKGluaXRpYWxNZXRhZGF0YTppbml0aWFsTWV0YWRhdGEpIHsocmVxdWVzdERhdGEpIGluCiAgICAgIGlmIGxldCByZXF1ZXN0RGF0YSA9IHJlcXVlc3REYXRhIHsKICAgICAgICBsZXQgcmVxdWVzdE1lc3NhZ2UgPSB0cnkge3sgbWV0aG9kfGlucHV0IH19KHNlcmlhbGl6ZWREYXRhOnJlcXVlc3REYXRhKQogICAgICAgIGxldCByZXBseU1lc3NhZ2UgPSB0cnkgc2VsZi5wcm92aWRlci57eyBtZXRob2R8bWV0aG9kRGVzY3JpcHRvck5hbWV8bG93ZXJjYXNlIH19KHJlcXVlc3Q6cmVxdWVzdE1lc3NhZ2UsIHNlc3Npb246IHNlbGYpCiAgICAgICAgdHJ5IHNlbGYuaGFuZGxlci5zZW5kUmVzcG9uc2UobWVzc2FnZTpyZXBseU1lc3NhZ2Uuc2VyaWFsaXplZERhdGEoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNDb2RlOnNlbGYuc3RhdHVzQ29kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXNNZXNzYWdlOnNlbGYuc3RhdHVzTWVzc2FnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFpbGluZ01ldGFkYXRhOnNlbGYudHJhaWxpbmdNZXRhZGF0YSkKICAgICAgfQogICAgfQogIH0KfQo="
- templates["server.pb.swift"] = "LyoKICogRE8gTk9UIEVESVQuCiAqCiAqIEdlbmVyYXRlZCBieSB0aGUgcHJvdG9jb2wgYnVmZmVyIGNvbXBpbGVyLgogKiBTb3VyY2U6IHt7IGZpbGV8ZmlsZURlc2NyaXB0b3JOYW1lIH19CiAqCiAqLwoKLyoKICogQ29weXJpZ2h0IDIwMTcsIGdSUEMgQXV0aG9ycyBBbGwgcmlnaHRzIHJlc2VydmVkLgogKgogKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgogKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKICoKICogICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogKgogKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgogKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogKi8KaW1wb3J0IEZvdW5kYXRpb24KaW1wb3J0IERpc3BhdGNoCmltcG9ydCBnUlBDCmltcG9ydCBTd2lmdFByb3RvYnVmCi8vLXslIGZvciBzZXJ2aWNlIGluIGZpbGUuc2VydmljZXMgJX0KCi8vLyBUeXBlIGZvciBlcnJvcnMgdGhyb3duIGZyb20gZ2VuZXJhdGVkIHNlcnZlciBjb2RlLgp7eyBhY2Nlc3MgfX0gZW51bSB7eyAufHNlcnZlcmVycm9yOmZpbGUsc2VydmljZSB9fSA6IEVycm9yIHsKICBjYXNlIGVuZE9mU3RyZWFtCn0KCi8vLyBUbyBidWlsZCBhIHNlcnZlciwgaW1wbGVtZW50IGEgY2xhc3MgdGhhdCBjb25mb3JtcyB0byB0aGlzIHByb3RvY29sLgp7eyBhY2Nlc3MgfX0gcHJvdG9jb2wge3sgLnxwcm92aWRlcjpmaWxlLHNlcnZpY2UgfX0gewogIC8vLXslIGZvciBtZXRob2QgaW4gc2VydmljZS5tZXRob2RzICV9CiAgLy8teyUgaWYgbWV0aG9kfG1ldGhvZElzVW5hcnkgJX0KICBmdW5jIHt7IG1ldGhvZHxtZXRob2REZXNjcmlwdG9yTmFtZXxsb3dlcmNhc2UgfX0ocmVxdWVzdCA6IHt7IG1ldGhvZHxpbnB1dCB9fSwgc2Vzc2lvbiA6IHt7IC58c2Vzc2lvbjpmaWxlLHNlcnZpY2UsbWV0aG9kIH19KSB0aHJvd3MgLT4ge3sgbWV0aG9kfG91dHB1dCB9fQogIC8vLXslIGVuZGlmICV9CiAgLy8teyUgaWYgbWV0aG9kfG1ldGhvZElzU2VydmVyU3RyZWFtaW5nICV9CiAgZnVuYyB7eyBtZXRob2R8bWV0aG9kRGVzY3JpcHRvck5hbWV8bG93ZXJjYXNlIH19KHJlcXVlc3QgOiB7eyBtZXRob2R8aW5wdXQgfX0sIHNlc3Npb24gOiB7eyAufHNlc3Npb246ZmlsZSxzZXJ2aWNlLG1ldGhvZCB9fSkgdGhyb3dzCiAgLy8teyUgZW5kaWYgJX0KICAvLy17JSBpZiBtZXRob2R8bWV0aG9kSXNDbGllbnRTdHJlYW1pbmcgJX0KICBmdW5jIHt7IG1ldGhvZHxtZXRob2REZXNjcmlwdG9yTmFtZXxsb3dlcmNhc2UgfX0oc2Vzc2lvbiA6IHt7IC58c2Vzc2lvbjpmaWxlLHNlcnZpY2UsbWV0aG9kIH19KSB0aHJvd3MKICAvLy17JSBlbmRpZiAlfQogIC8vLXslIGlmIG1ldGhvZHxtZXRob2RJc0JpZGlTdHJlYW1pbmcgJX0KICBmdW5jIHt7IG1ldGhvZHxtZXRob2REZXNjcmlwdG9yTmFtZXxsb3dlcmNhc2UgfX0oc2Vzc2lvbiA6IHt7IC58c2Vzc2lvbjpmaWxlLHNlcnZpY2UsbWV0aG9kIH19KSB0aHJvd3MKICAvLy17JSBlbmRpZiAlfQogIC8vLXslIGVuZGZvciAlfQp9CgovLy8gQ29tbW9uIHByb3BlcnRpZXMgYXZhaWxhYmxlIGluIGVhY2ggc2VydmljZSBzZXNzaW9uLgp7eyBhY2Nlc3MgfX0gY2xhc3Mge3sgLnxzZXJ2aWNlOmZpbGUsc2VydmljZSB9fVNlc3Npb24gewogIGZpbGVwcml2YXRlIHZhciBoYW5kbGVyIDogZ1JQQy5IYW5kbGVyCiAge3sgYWNjZXNzIH19IHZhciByZXF1ZXN0TWV0YWRhdGEgOiBNZXRhZGF0YSB7IHJldHVybiBoYW5kbGVyLnJlcXVlc3RNZXRhZGF0YSB9CgogIHt7IGFjY2VzcyB9fSB2YXIgc3RhdHVzQ29kZSA6IEludCA9IDAKICB7eyBhY2Nlc3MgfX0gdmFyIHN0YXR1c01lc3NhZ2UgOiBTdHJpbmcgPSAiT0siCiAge3sgYWNjZXNzIH19IHZhciBpbml0aWFsTWV0YWRhdGEgOiBNZXRhZGF0YSA9IE1ldGFkYXRhKCkKICB7eyBhY2Nlc3MgfX0gdmFyIHRyYWlsaW5nTWV0YWRhdGEgOiBNZXRhZGF0YSA9IE1ldGFkYXRhKCkKCiAgZmlsZXByaXZhdGUgaW5pdChoYW5kbGVyOmdSUEMuSGFuZGxlcikgewogICAgc2VsZi5oYW5kbGVyID0gaGFuZGxlcgogIH0KfQoKLy8teyUgZm9yIG1ldGhvZCBpbiBzZXJ2aWNlLm1ldGhvZHMgJX0KLy8teyUgaWYgbWV0aG9kfG1ldGhvZElzVW5hcnkgJX0KLy8teyUgaW5jbHVkZSAic2VydmVyLXNlc3Npb24tdW5hcnkuc3dpZnQiICV9Ci8vLXslIGVuZGlmICV9Ci8vLXslIGlmIG1ldGhvZHxtZXRob2RJc1NlcnZlclN0cmVhbWluZyAlfQovLy17JSBpbmNsdWRlICJzZXJ2ZXItc2Vzc2lvbi1zZXJ2ZXJzdHJlYW1pbmcuc3dpZnQiICV9Ci8vLXslIGVuZGlmICV9Ci8vLXslIGlmIG1ldGhvZHxtZXRob2RJc0NsaWVudFN0cmVhbWluZyAlfQovLy17JSBpbmNsdWRlICJzZXJ2ZXItc2Vzc2lvbi1jbGllbnRzdHJlYW1pbmcuc3dpZnQiICV9Ci8vLXslIGVuZGlmICV9Ci8vLXslIGlmIG1ldGhvZHxtZXRob2RJc0JpZGlTdHJlYW1pbmcgJX0KLy8teyUgaW5jbHVkZSAic2VydmVyLXNlc3Npb24tYmlkaXN0cmVhbWluZy5zd2lmdCIgJX0KLy8teyUgZW5kaWYgJX0KLy8teyUgZW5kZm9yICV9CgovLy8gTWFpbiBzZXJ2ZXIgZm9yIGdlbmVyYXRlZCBzZXJ2aWNlCnt7IGFjY2VzcyB9fSBjbGFzcyB7eyAufHNlcnZlcjpmaWxlLHNlcnZpY2UgfX0gewogIHByaXZhdGUgdmFyIGFkZHJlc3M6IFN0cmluZwogIHByaXZhdGUgdmFyIHNlcnZlcjogZ1JQQy5TZXJ2ZXIKICBwcml2YXRlIHZhciBwcm92aWRlcjoge3sgLnxwcm92aWRlcjpmaWxlLHNlcnZpY2UgfX0/CgogIC8vLyBDcmVhdGUgYSBzZXJ2ZXIgdGhhdCBhY2NlcHRzIGluc2VjdXJlIGNvbm5lY3Rpb25zLgogIHt7IGFjY2VzcyB9fSBpbml0KGFkZHJlc3M6U3RyaW5nLAogICAgICAgICAgICAgIHByb3ZpZGVyOnt7IC58cHJvdmlkZXI6ZmlsZSxzZXJ2aWNlIH19KSB7CiAgICBnUlBDLmluaXRpYWxpemUoKQogICAgc2VsZi5hZGRyZXNzID0gYWRkcmVzcwogICAgc2VsZi5wcm92aWRlciA9IHByb3ZpZGVyCiAgICBzZWxmLnNlcnZlciA9IGdSUEMuU2VydmVyKGFkZHJlc3M6YWRkcmVzcykKICB9CgogIC8vLyBDcmVhdGUgYSBzZXJ2ZXIgdGhhdCBhY2NlcHRzIHNlY3VyZSBjb25uZWN0aW9ucy4KICB7eyBhY2Nlc3MgfX0gaW5pdD8oYWRkcmVzczpTdHJpbmcsCiAgICAgICAgICAgICAgIGNlcnRpZmljYXRlVVJMOlVSTCwKICAgICAgICAgICAgICAga2V5VVJMOlVSTCwKICAgICAgICAgICAgICAgcHJvdmlkZXI6e3sgLnxwcm92aWRlcjpmaWxlLHNlcnZpY2UgfX0pIHsKICAgIGdSUEMuaW5pdGlhbGl6ZSgpCiAgICBzZWxmLmFkZHJlc3MgPSBhZGRyZXNzCiAgICBzZWxmLnByb3ZpZGVyID0gcHJvdmlkZXIKICAgIGd1YXJkCiAgICAgIGxldCBjZXJ0aWZpY2F0ZSA9IHRyeT8gU3RyaW5nKGNvbnRlbnRzT2Y6IGNlcnRpZmljYXRlVVJMLCBlbmNvZGluZzogLnV0ZjgpLAogICAgICBsZXQga2V5ID0gdHJ5PyBTdHJpbmcoY29udGVudHNPZjoga2V5VVJMLCBlbmNvZGluZzogLnV0ZjgpCiAgICAgIGVsc2UgewogICAgICAgIHJldHVybiBuaWwKICAgIH0KICAgIHNlbGYuc2VydmVyID0gZ1JQQy5TZXJ2ZXIoYWRkcmVzczphZGRyZXNzLCBrZXk6a2V5LCBjZXJ0czpjZXJ0aWZpY2F0ZSkKICB9CgogIC8vLyBTdGFydCB0aGUgc2VydmVyLgogIHt7IGFjY2VzcyB9fSBmdW5jIHN0YXJ0KHF1ZXVlOkRpc3BhdGNoUXVldWUgPSBEaXNwYXRjaFF1ZXVlLmdsb2JhbCgpKSB7CiAgICBndWFyZCBsZXQgcHJvdmlkZXIgPSBzZWxmLnByb3ZpZGVyIGVsc2UgewogICAgICBmYXRhbEVycm9yKCkgLy8gdGhlIHNlcnZlciByZXF1aXJlcyBhIHByb3ZpZGVyCiAgICB9CiAgICBzZXJ2ZXIucnVuIHsoaGFuZGxlcikgaW4KICAgICAgcHJpbnQoIlNlcnZlciByZWNlaXZlZCByZXF1ZXN0IHRvICIgKyBoYW5kbGVyLmhvc3QKICAgICAgICArICIgY2FsbGluZyAiICsgaGFuZGxlci5tZXRob2QKICAgICAgICArICIgZnJvbSAiICsgaGFuZGxlci5jYWxsZXIKICAgICAgICArICIgd2l0aCAiICsgU3RyaW5nKGRlc2NyaWJpbmc6aGFuZGxlci5yZXF1ZXN0TWV0YWRhdGEpICkKCiAgICAgIGRvIHsKICAgICAgICBzd2l0Y2ggaGFuZGxlci5tZXRob2QgewogICAgICAgIC8vLXslIGZvciBtZXRob2QgaW4gc2VydmljZS5tZXRob2RzICV9CiAgICAgICAgY2FzZSAie3sgLnxwYXRoOmZpbGUsc2VydmljZSxtZXRob2QgfX0iOgogICAgICAgICAgdHJ5IHt7IC58c2Vzc2lvbjpmaWxlLHNlcnZpY2UsbWV0aG9kIH19KGhhbmRsZXI6aGFuZGxlciwgcHJvdmlkZXI6cHJvdmlkZXIpLnJ1bihxdWV1ZTpxdWV1ZSkKICAgICAgICAvLy17JSBlbmRmb3IgJX0KICAgICAgICBkZWZhdWx0OgogICAgICAgICAgYnJlYWsgLy8gaGFuZGxlIHVua25vd24gcmVxdWVzdHMKICAgICAgICB9CiAgICAgIH0gY2F0Y2ggKGxldCBlcnJvcikgewogICAgICAgIHByaW50KCJTZXJ2ZXIgZXJyb3I6IFwoZXJyb3IpIikKICAgICAgfQogICAgfQogIH0KfQovLy17JSBlbmRmb3IgJX0K"
- return templates
- }
|