[
  {
    "path": ".github/workflows/main.yml",
    "content": "name: Common Test\n\non:\n  pull_request:\n    branches:\n      - 'main'\n  push:\n    branches:\n      - 'main'\n\njobs:\n  build:\n    name: Test on OTP ${{ matrix.otp_version }} and ${{ matrix.os }}\n    runs-on: ${{ matrix.os }}\n    strategy:\n      matrix:\n        otp_version: ['26.0', '25.2.3', '24.1.2', '23.3']\n        rebar3_version: ['3.20.0']\n        os: [ubuntu-20.04]\n    env:\n      OTP_VERSION: ${{ matrix.otp_version }}\n\n    steps:\n    - uses: actions/checkout@v2\n\n    - uses: erlef/setup-beam@v1\n      with:\n        otp-version: ${{ matrix.otp_version }}\n        rebar3-version: ${{ matrix.rebar3_version }}\n\n    - name: Compile\n      run: rebar3 compile\n    - name: Tests\n      run: rebar3 ct --cover\n    - name: Covertool\n      run: rebar3 covertool generate\n    - uses: codecov/codecov-action@v2\n      if: ${{ always() }}\n      with:\n        file: _build/test/covertool/grpcbox.covertool.xml\n        env_vars: OTP_VERSION\n\n    - name: Setup Go 1.21.4\n      uses: actions/setup-go@v4\n      with:\n        # Semantic version range syntax or exact version of Go\n        go-version: '1.21.4'\n\n    - uses: actions/checkout@v4\n      with:\n        repository: 'grpc/grpc-go'\n        path: 'grpc-go'\n\n    - name: Install grpc-go interop client\n      run: |\n        cd grpc-go\n        go build -o ./go-grpc-interop-client ./interop/client\n\n    - name: Run interop tests\n      run: |\n        rebar3 as interop release\n        _build/interop/rel/grpc_interop/bin/grpc_interop daemon\n\n        PATH=grpc-go/:$PATH interop/run_server_tests.sh\n\n  dialyzer:\n    name: Dialyze on OTP ${{ matrix.otp_version }} and ${{ matrix.os }}\n    runs-on: ${{ matrix.os }}\n    strategy:\n      matrix:\n        otp_version: ['26.0']\n        rebar3_version: ['3.22.1']\n        os: [ubuntu-20.04]\n    steps:\n    - uses: actions/checkout@v2\n    - uses: erlef/setup-beam@v1\n      with:\n        otp-version: ${{ matrix.otp_version }}\n        rebar3-version: ${{ matrix.rebar3_version }}\n        version-type: 'strict'\n    - uses: actions/cache@v2\n      name: Cache\n      with:\n        path: |\n          _build\n        key: ${{ runner.os }}-build-${{ matrix.otp_version }}-${{ hashFiles('rebar.lock') }}-5\n        restore-keys: |\n          ${{ runner.os }}-dialyzer-${{ matrix.otp_version }}-5-\n    - name: Compile\n      run: rebar3 compile\n    - name: Dialyzer\n      run: rebar3 as dialyzer dialyzer\n"
  },
  {
    "path": ".gitignore",
    "content": ".rebar3\n_*\n.eunit\n*.o\n*.beam\n*.plt\n*.swp\n*.swo\n.erlang.cookie\nebin\nlog\nerl_crash.dump\n.rebar\nlogs\n_build\n.idea\n*.iml\nrebar3.crashdump\n"
  },
  {
    "path": "LICENSE",
    "content": "                                 Apache License\n                           Version 2.0, January 2004\n                        http://www.apache.org/licenses/\n\n   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\n\n   1. Definitions.\n\n      \"License\" shall mean the terms and conditions for use, reproduction,\n      and distribution as defined by Sections 1 through 9 of this document.\n\n      \"Licensor\" shall mean the copyright owner or entity authorized by\n      the copyright owner that is granting the License.\n\n      \"Legal Entity\" shall mean the union of the acting entity and all\n      other entities that control, are controlled by, or are under common\n      control with that entity. For the purposes of this definition,\n      \"control\" means (i) the power, direct or indirect, to cause the\n      direction or management of such entity, whether by contract or\n      otherwise, or (ii) ownership of fifty percent (50%) or more of the\n      outstanding shares, or (iii) beneficial ownership of such entity.\n\n      \"You\" (or \"Your\") shall mean an individual or Legal Entity\n      exercising permissions granted by this License.\n\n      \"Source\" form shall mean the preferred form for making modifications,\n      including but not limited to software source code, documentation\n      source, and configuration files.\n\n      \"Object\" form shall mean any form resulting from mechanical\n      transformation or translation of a Source form, including but\n      not limited to compiled object code, generated documentation,\n      and conversions to other media types.\n\n      \"Work\" shall mean the work of authorship, whether in Source or\n      Object form, made available under the License, as indicated by a\n      copyright notice that is included in or attached to the work\n      (an example is provided in the Appendix below).\n\n      \"Derivative Works\" shall mean any work, whether in Source or Object\n      form, that is based on (or derived from) the Work and for which the\n      editorial revisions, annotations, elaborations, or other modifications\n      represent, as a whole, an original work of authorship. For the purposes\n      of this License, Derivative Works shall not include works that remain\n      separable from, or merely link (or bind by name) to the interfaces of,\n      the Work and Derivative Works thereof.\n\n      \"Contribution\" shall mean any work of authorship, including\n      the original version of the Work and any modifications or additions\n      to that Work or Derivative Works thereof, that is intentionally\n      submitted to Licensor for inclusion in the Work by the copyright owner\n      or by an individual or Legal Entity authorized to submit on behalf of\n      the copyright owner. For the purposes of this definition, \"submitted\"\n      means any form of electronic, verbal, or written communication sent\n      to the Licensor or its representatives, including but not limited to\n      communication on electronic mailing lists, source code control systems,\n      and issue tracking systems that are managed by, or on behalf of, the\n      Licensor for the purpose of discussing and improving the Work, but\n      excluding communication that is conspicuously marked or otherwise\n      designated in writing by the copyright owner as \"Not a Contribution.\"\n\n      \"Contributor\" shall mean Licensor and any individual or Legal Entity\n      on behalf of whom a Contribution has been received by Licensor and\n      subsequently incorporated within the Work.\n\n   2. Grant of Copyright License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      copyright license to reproduce, prepare Derivative Works of,\n      publicly display, publicly perform, sublicense, and distribute the\n      Work and such Derivative Works in Source or Object form.\n\n   3. Grant of Patent License. Subject to the terms and conditions of\n      this License, each Contributor hereby grants to You a perpetual,\n      worldwide, non-exclusive, no-charge, royalty-free, irrevocable\n      (except as stated in this section) patent license to make, have made,\n      use, offer to sell, sell, import, and otherwise transfer the Work,\n      where such license applies only to those patent claims licensable\n      by such Contributor that are necessarily infringed by their\n      Contribution(s) alone or by combination of their Contribution(s)\n      with the Work to which such Contribution(s) was submitted. If You\n      institute patent litigation against any entity (including a\n      cross-claim or counterclaim in a lawsuit) alleging that the Work\n      or a Contribution incorporated within the Work constitutes direct\n      or contributory patent infringement, then any patent licenses\n      granted to You under this License for that Work shall terminate\n      as of the date such litigation is filed.\n\n   4. Redistribution. You may reproduce and distribute copies of the\n      Work or Derivative Works thereof in any medium, with or without\n      modifications, and in Source or Object form, provided that You\n      meet the following conditions:\n\n      (a) You must give any other recipients of the Work or\n          Derivative Works a copy of this License; and\n\n      (b) You must cause any modified files to carry prominent notices\n          stating that You changed the files; and\n\n      (c) You must retain, in the Source form of any Derivative Works\n          that You distribute, all copyright, patent, trademark, and\n          attribution notices from the Source form of the Work,\n          excluding those notices that do not pertain to any part of\n          the Derivative Works; and\n\n      (d) If the Work includes a \"NOTICE\" text file as part of its\n          distribution, then any Derivative Works that You distribute must\n          include a readable copy of the attribution notices contained\n          within such NOTICE file, excluding those notices that do not\n          pertain to any part of the Derivative Works, in at least one\n          of the following places: within a NOTICE text file distributed\n          as part of the Derivative Works; within the Source form or\n          documentation, if provided along with the Derivative Works; or,\n          within a display generated by the Derivative Works, if and\n          wherever such third-party notices normally appear. The contents\n          of the NOTICE file are for informational purposes only and\n          do not modify the License. You may add Your own attribution\n          notices within Derivative Works that You distribute, alongside\n          or as an addendum to the NOTICE text from the Work, provided\n          that such additional attribution notices cannot be construed\n          as modifying the License.\n\n      You may add Your own copyright statement to Your modifications and\n      may provide additional or different license terms and conditions\n      for use, reproduction, or distribution of Your modifications, or\n      for any such Derivative Works as a whole, provided Your use,\n      reproduction, and distribution of the Work otherwise complies with\n      the conditions stated in this License.\n\n   5. Submission of Contributions. Unless You explicitly state otherwise,\n      any Contribution intentionally submitted for inclusion in the Work\n      by You to the Licensor shall be under the terms and conditions of\n      this License, without any additional terms or conditions.\n      Notwithstanding the above, nothing herein shall supersede or modify\n      the terms of any separate license agreement you may have executed\n      with Licensor regarding such Contributions.\n\n   6. Trademarks. This License does not grant permission to use the trade\n      names, trademarks, service marks, or product names of the Licensor,\n      except as required for reasonable and customary use in describing the\n      origin of the Work and reproducing the content of the NOTICE file.\n\n   7. Disclaimer of Warranty. Unless required by applicable law or\n      agreed to in writing, Licensor provides the Work (and each\n      Contributor provides its Contributions) on an \"AS IS\" BASIS,\n      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or\n      implied, including, without limitation, any warranties or conditions\n      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A\n      PARTICULAR PURPOSE. You are solely responsible for determining the\n      appropriateness of using or redistributing the Work and assume any\n      risks associated with Your exercise of permissions under this License.\n\n   8. Limitation of Liability. In no event and under no legal theory,\n      whether in tort (including negligence), contract, or otherwise,\n      unless required by applicable law (such as deliberate and grossly\n      negligent acts) or agreed to in writing, shall any Contributor be\n      liable to You for damages, including any direct, indirect, special,\n      incidental, or consequential damages of any character arising as a\n      result of this License or out of the use or inability to use the\n      Work (including but not limited to damages for loss of goodwill,\n      work stoppage, computer failure or malfunction, or any and all\n      other commercial damages or losses), even if such Contributor\n      has been advised of the possibility of such damages.\n\n   9. Accepting Warranty or Additional Liability. While redistributing\n      the Work or Derivative Works thereof, You may choose to offer,\n      and charge a fee for, acceptance of support, warranty, indemnity,\n      or other liability obligations and/or rights consistent with this\n      License. However, in accepting such obligations, You may act only\n      on Your own behalf and on Your sole responsibility, not on behalf\n      of any other Contributor, and only if You agree to indemnify,\n      defend, and hold each Contributor harmless for any liability\n      incurred by, or claims asserted against, such Contributor by reason\n      of your accepting any such warranty or additional liability.\n\n   END OF TERMS AND CONDITIONS\n\n   Copyright 2017, Tristan Sloughter <t@crashfast.com>.\n\n   Licensed under the Apache License, Version 2.0 (the \"License\");\n   you may not use this file except in compliance with the License.\n   You may obtain a copy of the License at\n\n       http://www.apache.org/licenses/LICENSE-2.0\n\n   Unless required by applicable law or agreed to in writing, software\n   distributed under the License is distributed on an \"AS IS\" BASIS,\n   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n   See the License for the specific language governing permissions and\n   limitations under the License.\n\n"
  },
  {
    "path": "README.md",
    "content": "grpcbox\n=====\n\n\n![Tests](https://github.com/tsloughter/grpcbox/workflows/Common%20Test/badge.svg)\n[![codecov](https://codecov.io/gh/tsloughter/grpcbox/branch/main/graph/badge.svg)](https://codecov.io/gh/tsloughter/grpcbox)\n[![Hex.pm](https://img.shields.io/hexpm/v/grpcbox.svg?maxAge=2592000)](https://hex.pm/packages/grpcbox)\n[![Hex.pm](https://img.shields.io/hexpm/dt/grpcbox.svg?maxAge=2592000)](https://hex.pm/packages/grpcbox)\n\nLibrary for creating [grpc](https://grpc.io) services (client and server) in Erlang, based on the [chatterbox](https://github.com/joedevivo/chatterbox) http2 library.\n\nFeatures\n---\n\n* Unary, client stream, server stream and bidirectional rpcs\n* Client load balancing\n* Interceptors\n* Health check service\n* Reflection service\n* [OpenCensus](https://opencensus.io) interceptors for stats and tracing\n* [Plugin](https://github.com/tsloughter/grpcbox_plugin) for generating clients and behaviour type specs for service server implementation\n\nImplementing a Service Server\n----\n\nThe quickest way to play around is with the test service and client that is used by `grpcbox`. Simply pull up a shell with, `rebar3 as test shell` and the route guide service will start on port 8080 and you'll have the client, `routeguide_route_guide_client`, in the path.\n\nThe easiest way to get started on your own project is using the plugin, [grpcbox_plugin](https://github.com/tsloughter/grpcbox_plugin):\n\n```erlang\n{deps, [grpcbox]}.\n\n{grpc, [{protos, \"protos\"},\n        {gpb_opts, [{module_name_suffix, \"_pb\"}]}]}.\n\n{plugins, [grpcbox_plugin]}.\n```\n\nCurrently `grpcbox` and the plugin are a bit picky and the `gpb` options will always include `[use_packages, maps, {i, \".\"}, {o, \"src\"}]`.\n\nAssuming the `protos` directory of your application has the `route_guide.proto` found in this repo, `protos/route_guide.proto`, the output from running the plugin will be:\n\n```shell\n$ rebar3 grpc gen\n===> Writing src/route_guide_pb.erl\n===> Writing src/grpcbox_route_guide_bhvr.erl\n```\n\nA behaviour is used because it provides a way to generate the interface and types without being where the actual implementation is also done. This way if a change happens to the proto you can regenerate the interface without any issues with the implementation of the service, simply then update the implementation callbacks to match the changed interface.\n\nRuntime configuration for `grpcbox` can be done in `sys.config`, specifying the compiled proto modules to use for finding the services available, which services to actually enable for requests and what module implements them, acceptor pool and http server settings. See `interop/config/sys.config` for a working example.\n\nIn the interop config the portion for defining services to handle requests for is:\n\n``` erlrang\n{grpcbox, [{servers, [#{grpc_opts => #{service_protos => [test_pb],\n                                       services => #{'grpc.testing.TestService' => grpc_testing_test_service}}}]},\n...\n```\n\n`test_pb` is the `gpb` generated module that exports `get_service_names/0`. The results of that function are used to construct the metadata needed for handling requests. The `services` map gives the module to call for handling methods of a service. If a service is not defined in that map it will result in the grpc error code 12, `Unimplemented`.\n\nThe services will be started when the application starts assuming the services are all configured in the `sys.config` and it is loaded. To manually start a service use either `grpcbox:start_server/1` which will start a `grpcbox_service_sup` supervisor under the `grpcbox_services_simple_sup` simple one for one supervisor, or get a child spec `grpcbox:server_child_spec(ServerOpts, GrpcOpts, ListenOpts, PoolOpts, TransportOpts)` to include the service supervisor in your own supervision tree.\n\n#### Unary RPC\n\nUnary RPCs receive a single request and return a single response. The RPC `GetFeature` takes a single `Point` and returns the `Feature` at that point:\n\n```protobuf\nrpc GetFeature(Point) returns (Feature) {}\n```\n\nThe callback generated by the `grpcbox_plugin` will look like:\n\n```erlang\n-callback get_feature(ctx:ctx(), route_guide_pb:point()) ->\n    {ok, route_guide_pb:feature(), ctx:ctx(} | grpcbox_stream:grpc_error_response().\n```\n\nAnd the implementation is as simple as an Erlang function that takes the arguments `Ctx`, the context of this current request, and a `Point` map, returning a `Feature` map:\n\n```erlang\nget_feature(Ctx, Point) ->\n    Feature = #{name => find_point(Point, data()),\n                location => Point},\n    {ok, Feature, Ctx}.\n```\n\n#### Streaming Output\n\nInstead of returning a single feature the server can stream a response of multiple features by defining the RPC to have a `stream Feature` return:\n\n```protobuf\nrpc ListFeatures(Rectangle) returns (stream Feature) {}\n```\n\nIn this case the callback still receives a map argument but also a `grpcbox_stream` argument:\n\n```erlang\n-callback list_features(route_guide_pb:rectangle(), grpcbox_stream:t()) ->\n    ok | {error, term()}.\n```\n\nThe `GrpcStream` variable is passed to `grpcbox_stream:send/2` for returning an individual feature over the stream to the client. The stream is ended by the server when the function completes.\n\n```erlang\nlist_features(_Message, GrpcStream) ->\n    grpcbox_stream:send(#{name => <<\"Tour Eiffel\">>,\n                                        location => #{latitude => 3,\n                                                      longitude => 5}}, GrpcStream),\n    grpcbox_stream:send(#{name => <<\"Louvre\">>,\n                          location => #{latitude => 4,\n                                        longitude => 5}}, GrpcStream),\n    ok.\n```\n\n#### Streaming Input\n\nThe client can also stream a sequence of messages:\n\n```protobuf\nrpc RecordRoute(stream Point) returns (RouteSummary) {}\n```\n\nIn this case the callback receives a `reference()` instead of a direct value from the client:\n\n```erlang\n-callback record_route(reference(), grpcbox_stream:t()) ->\n    {ok, route_guide_pb:route_summary()} | {error, term()}.\n```\n\nThe process the callback is running in will receive the individual messages on the stream as tuples `{reference(), route_guide_pb:point()}`. The end of the stream is sent as the message `{reference(), eos}` at which point the function can return the response:\n\n```erlang\nrecord_route(Ref, GrpcStream) ->\n    record_route(Ref, #{t_start => erlang:system_time(1),\n                            acc => []}, GrpcStream).\n\nrecord_route(Ref, Data=#{t_start := T0, acc := Points}, GrpcStream) ->\n    receive\n        {Ref, eos} ->\n            {ok, #{elapsed_time => erlang:system_time(1) - T0,\n                   point_count => length(Points),\n                   feature_count => count_features(Points),\n                   distance => distance(Points)}, GrpcStream};\n        {Ref, Point} ->\n            record_route(Ref, Data#{acc => [Point | Points]}, GrpcStream)\n    end.\n```\n\n#### Streaming In and Out\n\nA bidrectional streaming RPC is defined when both input and output are streams:\n \n```protobuf\nrpc RouteChat(stream RouteNote) returns (stream RouteNote) {}\n```\n\n```erlang\n-callback route_chat(reference(), grpcbox_stream:t()) ->\n    ok | {error, term()}.\n```\n\nThe sequence of input messages will again be sent to the callback's process as Erlang messages and any output messages are sent to the client with `grpcbox_stream`:\n\n```erlang\nroute_chat(Ref, GrpcStream) ->\n    route_chat(Ref, [], GrpcStream).\n\nroute_chat(Ref, Data, GrpcStream) ->\n    receive\n        {Ref, eos} ->\n            ok;\n        {Ref, #{location := Location} = P} ->\n            Messages = proplists:get_all_values(Location, Data),\n            [grpcbox_stream:send(Message, GrpcStream) || Message <- Messages],\n            route_chat(Ref, [{Location, P} | Data], GrpcStream)\n    end.\n```\n\n#### Interceptors\n\n##### Unary Interceptor\n\nA unary interceptor can be any function that accepts a context, decoded request body, server info map and the method function:\n\n```erlang\nsome_unary_interceptor(Ctx, Request, ServerInfo, Fun) ->\n    %% do some interception stuff\n    Fun(Ctx, Request).\n```\n\nThe interceptor is configured in the `grpc_opts` set in the environment or passed to the supervisor `start_child` function. An example from the test suite sets `grpc_opts` in the application environment:\n\n```erlang\n#{service_protos => [route_guide_pb],\n  unary_interceptor => fun(Ctx, Req, _, Method) ->\n                         Method(Ctx, #{latitude => 30,\n                                       longitude => 90})\n                       end}\n```\n\n##### Streaming Interceptor\n\n##### Middleware\n\nThere is a provided interceptor `grpcbox_chain_interceptor` which accepts a list of interceptors to apply in order, with the final interceptor calling the method handler. An example from the test suite adds a trailer in each interceptor to show the chain working:\n\n```erlang\n#{service_protos => [route_guide_pb],\n  unary_interceptor =>\n    grpcbox_chain_interceptor:unary([fun ?MODULE:one/4,\n                                     fun ?MODULE:two/4,\n                                     fun ?MODULE:three/4])}\n```\n\n#### Tracing\n\nThe provided interceptor `grpcbox_trace` supports the [OpenCensus](http://opencensus.io/) wire protocol using [opencensus-erlang](https://github.com/census-instrumentation/opencensus-erlang). It will use the `trace_id`, `span_id` and any options or tags from the trace context.\n\nConfigure as an interceptor:\n\n```erlang\n#{service_protos => [route_guide_pb],\n  unary_interceptor => {grpcbox_trace, unary}}\n```\n\nOr as a middleware in the chain interceptor:\n\n```erlang\n#{service_protos => [route_guide_pb],\n  unary_interceptor =>\n    grpcbox_chain_interceptor:unary([..., \n                                     fun grpcbox_trace:unary/4, \n                                     ...])}\n```\n\nSee [opencensus-erlang](https://github.com/census-instrumentation/opencensus-erlang) for details on configuring reporters.\n\n#### Statistics\n\nStatistics are collected by implementing a stats handler module. A handler for OpenCensus stats (be sure to include [OpenCensus](https://hex.pm/packages/opencensus) as a dependency and make sure it starts on boot) is provided and can be enabled for the server with a config option:\n\n``` erlang\n{grpcbox, [{servers, [#{grpc_opts => #{stats_handler => grpcbox_oc_stats_handler\n                                       ...}}]}]}\n```\n\nFor the client the stats handler is a per-channel configuration, see the Defining Channels section below.\n\nYou can verify it is working by enabling the stdout exporter:\n\n``` erlang\n {opencensus, [{stat, [{exporters, [{oc_stat_exporter_stdout, []}]}]}]}\n```\n\nFor actual use, an [exporter for Prometheus](https://github.com/opencensus-beam/prometheus) is available.\n\nDetails on all the metrics that are collected can be found in the [OpenCensus gRPC Stats specification](https://github.com/census-instrumentation/opencensus-specs/blob/master/stats/gRPC.md).\n\n#### Metadata\n\nMetadata is sent in headers and trailers.\n\nUsing a Service Client\n----\n\nFor each service in the protos passed to `rebar3 gprc gen` it will generate a `<service>_client` module containing a function for each method in the service.\n\n#### Defining Channels\n\nChannels maintain connections to grpc servers and offer client side load balancing between servers with various methods, round robin, random, hash.\n\nIf no channel is specified in the options to a rpc call the `default_channel` is used. Setting the default to connect to localhost on port 8080 in your `sys.config` would look like:\n\n```\n{client, #{channels => [{default_channel, [{http, \"localhost\", 8080, []}], #{}}]}}\n```\n\nUnix sockets (UDS) may also be used with the same notation that is defined in `gen_tcp`. Considerations:\n* for UDS, only the `http` scheme is permitted\n* the port must strictly be `0`\n* only available on POSIX operating systems\n* abstract UDS are only available on Linux, and such sockets' names must start with a zero byte\n```\n{client, #{channels => [{default_channel, [{http, {local, \"/path/to/unix/socket_name\"}, 0, []}], #{}}]}}\n%% or to use an abstract Unix socket:\n%% {client, #{channels => [{default_channel, [{http, {local,  [0 | \"socket_name\"]}, 0, []}], #{}}]}}\n```\n\nThe empty map at the end can contain configuration for the load balancing algorithm, interceptors, statistics handling and compression:\n\n```\n#{balancer => round_robin | random | hash | direct | claim,\n  encoding => identity | gzip | deflate | snappy | atom(),\n  stats_handler => grpcbox_oc_stats_handler,\n  unary_interceptor => term(),\n  stream_interceptor => term()} \n```\n\nThe default balancer is round robin and encoding is identity (no compression). Encoding can also be passed in the options map to individual requests.\n\n#### Calling Unary Client RPC\n\nThe `RouteGuide` service has a single unary method, `GetFeature`, in the client we have a function `get_feature/2`:\n\n```erlang\nPoint = #{latitude => 409146138, longitude => -746188906},\n{ok, Feature, HeadersAndTrailers} = routeguide_route_guide_client:get_feature(Point).\n```\n\n#### Client Streaming RPC\n\n```erlang\n{ok, S} = routeguide_route_guide_client:record_route(),\nok = grpcbox_client:send(S, #{latitude => 409146138, longitude => -746188906}),\nok = grpcbox_client:send(S, #{latitude => 234818903, longitude => -823423910}),\nok = grpcbox_client:close_send(S),\n{ok, #{point_count := 2} = grpcbox_client:recv_data(S)).\n```\n\n#### Client with Server Streaming RPC\n\n```erlang\nRectangle = #{hi => #{latitude => 1, longitude => 2},\n              lo => #{latitude => 3, longitude => 5}},\n{ok, S} = routeguide_route_guide_client:list_features(Rectangle),\n{ok, #{<<\":status\">> := <<\"200\">>}} = grpcbox_client:recv_headers(S),\n{ok, #{name := _} = grpcbox_client:recv_data(S),\n{ok, #{name := _}} = grpcbox_client:recv_data(S),\n{ok, _} = grpcbox_client:recv_trailers(S).\n```\n\n#### Bidirectional RPC\n\n```erlrang\n{ok, S} = routeguide_route_guide_client:route_chat(),\nok = grpcbox_client:send(S, #{location => #{latitude => 1, longitude => 1}, message => <<\"hello there\">>}),\nok = grpcbox_client:send(S, #{location => #{latitude => 1, longitude => 1}, message => <<\"hello there\">>}),\n{ok, #{message := <<\"hello there\">>}} = grpcbox_client:recv_data(S)),\nok = grpcbox_client:send(S, #{location => #{latitude => 1, longitude => 1}, message => <<\"hello there\">>}),\n{ok, #{message := <<\"hello there\">>}}, grpcbox_client:close_and_recv(S)).\n```\n\n#### Context\n\nClient calls optionally accept a [context](https://hex.pm/packages/ctx) as the first argument. Contexts are used to set and propagate deadlines and [OpenCensus](https://hex.pm/packages/opencensus) tags.\n\n```erlang\nCtx = ctx:with_deadline_after(300, seconds),\nPoint = #{latitude => 409146138, longitude => -746188906},\n{ok, Feature, HeadersAndTrailers} = routeguide_route_guide_client:get_feature(Ctx, Point).\n```\n\n\nCT Tests\n---\n\nTo run the Common Test suite:\n\n```\n$ rebar3 ct\n```\n\nInterop Tests\n---\n\nThe `interop` rebar3 profile builds with an implementation of the `test.proto` for grpc interop testing:\n\n\nFor testing grpcbox's server:\n\n```\n$ rebar3 as interop shell\n```\n\nWith the shell running the tests can then be run from a script:\n\n```\n$ interop/run_server_tests.sh\n```\n\nThe script by default uses the Go test client that can be installed with the following:\n\n```\n$ go get -u github.com/grpc/grpc-go/interop\n$ go build -o $GOPATH/bin/go-grpc-interop-client github.com/grpc/grpc-go/interop/client\n```\n\nFor testing the grpcbox client you can use the Go test server. But first, add `_ \"google.golang.org/grpc/encoding/gzip\"` to `server.go` imports or else the gzip tests will fail. Then simply build and run it:\n\n```\n$ go build -o $GOPATH/bin/go-grpc-interop-server github.com/grpc/grpc-go/interop/server\n$ $GOPATH/bin/go-grpc-interop-server -port 8080\n```\n\nAnd run the interop client test suite:\n\n```\nrebar3 as interop ct\n```\n"
  },
  {
    "path": "benchmark/README.md",
    "content": "Benchmark\n=========\nUtilities for benchmarking grpcbox. The used protocol is compatible with the one defined in [grpc](https://github.com/grpc/grpc/blob/master/src/proto/grpc/testing/benchmark_service.proto) and for example the Go benchmark client and server can be used against grpcbox.\n\nGrpcbox benchmark server\n------------------------\nTo run the grpcbox benchmark server:\n\n```\n$ rebar3 as benchmark shell\n```\n\nServer options can be changed in `benchmark/config/sys.config`\n\nGrpcbox benchmark client\n------------------------\nThe benchmark client is implemented as a Common Test. First set test parameters in `benchmark/config/test.config`. The available parameters are described in the file. Also the chatterbox client options can be set. After setting test parameters and starting a server to test against, run the grpcbox benchmark client:\n\n```\n$ rebar3 as benchmark ct --verbose\n```\n\nThe --verbose option needs to be set for the measurements to be printed out.\n\nGo benchmark client and server\n------------------------------\nGrpcbox benchmark is compatible with the Go benchmark client and server.\n\nTo build the Go client and server:\n\n```\n$ go build -o $GOPATH/bin/go-grpc-benchmark-client <path-to-grpc-go>/benchmark/client\n$ go build -o $GOPATH/bin/go-grpc-benchmark-server <path-to-grpc-go>/benchmark/server\n```\n\nExample of running the Go benchmark server:\n\n```\n$ go-grpc-benchmark-server -port 8080 -test_name mytest\n```\n\nExample of running the Go benchmark client:\n\n```\n$ go-grpc-benchmark-client -port 8080 -test_name mytest -d 10 -w 1 -r 100 -c 1 -rpc_type unary -req 1 -resp 1\n```\n"
  },
  {
    "path": "benchmark/config/sys.config",
    "content": "[\n {grpcbox, [%% {client, #{channels => [{default_channel, [{http, \"localhost\", 8080, []}], #{}}]}},\n            {servers,\n             [#{grpc_opts => #{service_protos => [benchmark_service_pb],\n                               services => #{'grpc.testing.BenchmarkService' => grpc_testing_benchmark_service},\n                               client_cert_dir => \"test/grpcbox_SUITE_data/certificates/\"},\n\n                transport_opts => #{ssl => false,\n                                    keyfile => \"test/grpcbox_SUITE_data/certificates/server1.key\",\n                                    certfile => \"test/grpcbox_SUITE_data/certificates/server1.pem\",\n                                    cacertfile => \"test/grpcbox_SUITE_data/certificates/ca.pem\"},\n\n                listen_opts => #{port => 8080,\n                                 ip => {0,0,0,0}},\n\n                pool_opts => #{size => 10},\n\n                server_opts => #{server_header_table_size => 4096,\n                                 server_enable_push => 1,\n                                 server_max_concurrent_streams => unlimited,\n                                 server_initial_window_size => 100000000,\n                                 server_max_frame_size => 16384,\n                                 server_max_header_list_size => unlimited}}]}]},\n\n {opencensus, [{sampler, {oc_sampler_always, []}},\n               {reporters, [{oc_reporter_stdout, []}]},\n\n               {stat, [{exporters, [{oc_stat_exporter_stdout, []}]}]}]},\n\n {kernel,\n  [\n   {logger,\n    [\n     {handler, default, logger_std_h,\n      #{filters => [{progress, {fun logger_filters:progress/2, stop}}],\n        formatter => {logger_formatter, #{single_line => true}}}}]}]}\n].\n"
  },
  {
    "path": "benchmark/config/test.config",
    "content": "%% Test options\n{server_addr, \"localhost\"}. %% Server address to connect to\n{server_port, 8080}.        %% Server port to connect to\n{num_rpc, 100}.             %% The number of concurrent RPCs on each connection\n{num_conn, 1}.              %% The number of parallel connections\n{warmup_dur, 1}.            %% Warm-up duration in seconds\n{duration, 10}.             %% Benchmark duration in seconds\n{rq_size, 1}.               %% Request message size in bytes\n{rsp_size, 1}.              %% Response message size in bytes\n{rpc_type, unary}.          %% RPC type, unary or streaming\n\n%% Client options\n{chatterbox,\n  [\n    {client_header_table_size,4096},\n    {client_enable_push,1},\n    {client_max_concurrent_streams,unlimited},\n    {client_initial_window_size,100000000},\n    {client_max_frame_size,16384},\n    {client_max_header_list_size,unlimited},\n    {client_flow_control,auto}\n  ]\n}.\n"
  },
  {
    "path": "benchmark/proto/benchmark_service.proto",
    "content": "// Copyright 2015 gRPC authors.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// An integration test service that covers all the method signature permutations\n// of unary/streaming requests/responses.\nsyntax = \"proto3\";\n\nimport \"interop/proto/messages.proto\";\n\npackage grpc.testing;\n\nservice BenchmarkService {\n  // One request followed by one response.\n  // The server returns the client payload as-is.\n  rpc UnaryCall(SimpleRequest) returns (SimpleResponse);\n\n  // Repeated sequence of one request followed by one response.\n  // Should be called streaming ping-pong\n  // The server returns the client payload as-is on each response\n  rpc StreamingCall(stream SimpleRequest) returns (stream SimpleResponse);\n\n  // Single-sided unbounded streaming from client to server\n  // The server returns the client payload as-is once the client does WritesDone\n  rpc StreamingFromClient(stream SimpleRequest) returns (SimpleResponse);\n\n  // Single-sided unbounded streaming from server to client\n  // The server repeatedly returns the client payload as-is\n  rpc StreamingFromServer(SimpleRequest) returns (stream SimpleResponse);\n\n  // Two-sided unbounded streaming between server to client\n  // Both sides send the content of their own choice to the other\n  rpc StreamingBothWays(stream SimpleRequest) returns (stream SimpleResponse);\n}\n"
  },
  {
    "path": "benchmark/src/benchmark_service_pb.erl",
    "content": "%% -*- coding: utf-8 -*-\n%% @private\n%% Automatically generated, do not edit\n%% Generated by gpb_compile version 4.7.3\n-module(benchmark_service_pb).\n\n-export([encode_msg/2, encode_msg/3]).\n-export([decode_msg/2, decode_msg/3]).\n-export([merge_msgs/3, merge_msgs/4]).\n-export([verify_msg/2, verify_msg/3]).\n-export([get_msg_defs/0]).\n-export([get_msg_names/0]).\n-export([get_group_names/0]).\n-export([get_msg_or_group_names/0]).\n-export([get_enum_names/0]).\n-export([find_msg_def/1, fetch_msg_def/1]).\n-export([find_enum_def/1, fetch_enum_def/1]).\n-export([enum_symbol_by_value/2, enum_value_by_symbol/2]).\n-export(['enum_symbol_by_value_grpc.testing.PayloadType'/1, 'enum_value_by_symbol_grpc.testing.PayloadType'/1]).\n-export([get_service_names/0]).\n-export([get_service_def/1]).\n-export([get_rpc_names/1]).\n-export([find_rpc_def/2, fetch_rpc_def/2]).\n-export([fqbin_to_service_name/1]).\n-export([service_name_to_fqbin/1]).\n-export([fqbins_to_service_and_rpc_name/2]).\n-export([service_and_rpc_name_to_fqbins/2]).\n-export([fqbin_to_msg_name/1]).\n-export([msg_name_to_fqbin/1]).\n-export([fqbin_to_enum_name/1]).\n-export([enum_name_to_fqbin/1]).\n-export([get_package_name/0]).\n-export([uses_packages/0]).\n-export([source_basename/0]).\n-export([get_all_source_basenames/0]).\n-export([get_all_proto_names/0]).\n-export([get_msg_containment/1]).\n-export([get_pkg_containment/1]).\n-export([get_service_containment/1]).\n-export([get_rpc_containment/1]).\n-export([get_enum_containment/1]).\n-export([get_proto_by_msg_name_as_fqbin/1]).\n-export([get_proto_by_service_name_as_fqbin/1]).\n-export([get_proto_by_enum_name_as_fqbin/1]).\n-export([get_protos_by_pkg_name_as_fqbin/1]).\n-export([descriptor/0, descriptor/1]).\n-export([gpb_version_as_string/0, gpb_version_as_list/0]).\n\n\n%% enumerated types\n-type 'grpc.testing.PayloadType'() :: 'COMPRESSABLE'.\n-export_type(['grpc.testing.PayloadType'/0]).\n\n%% message types\n-type bool_value() ::\n      #{value                   => boolean() | 0 | 1 % = 1\n       }.\n\n-type payload() ::\n      #{type                    => 'COMPRESSABLE' | integer(), % = 1, enum grpc.testing.PayloadType\n        body                    => iodata()         % = 2\n       }.\n\n-type echo_status() ::\n      #{code                    => integer(),       % = 1, 32 bits\n        message                 => iodata()         % = 2\n       }.\n\n-type simple_request() ::\n      #{response_type           => 'COMPRESSABLE' | integer(), % = 1, enum grpc.testing.PayloadType\n        response_size           => integer(),       % = 2, 32 bits\n        payload                 => payload(),       % = 3\n        fill_username           => boolean() | 0 | 1, % = 4\n        fill_oauth_scope        => boolean() | 0 | 1, % = 5\n        response_compressed     => bool_value(),    % = 6\n        response_status         => echo_status(),   % = 7\n        expect_compressed       => bool_value()     % = 8\n       }.\n\n-type simple_response() ::\n      #{payload                 => payload(),       % = 1\n        username                => iodata(),        % = 2\n        oauth_scope             => iodata()         % = 3\n       }.\n\n-type streaming_input_call_request() ::\n      #{payload                 => payload(),       % = 1\n        expect_compressed       => bool_value()     % = 2\n       }.\n\n-type streaming_input_call_response() ::\n      #{aggregated_payload_size => integer()        % = 1, 32 bits\n       }.\n\n-type response_parameters() ::\n      #{size                    => integer(),       % = 1, 32 bits\n        interval_us             => integer(),       % = 2, 32 bits\n        compressed              => bool_value()     % = 3\n       }.\n\n-type streaming_output_call_request() ::\n      #{response_type           => 'COMPRESSABLE' | integer(), % = 1, enum grpc.testing.PayloadType\n        response_parameters     => [response_parameters()], % = 2\n        payload                 => payload(),       % = 3\n        response_status         => echo_status()    % = 7\n       }.\n\n-type streaming_output_call_response() ::\n      #{payload                 => payload()        % = 1\n       }.\n\n-type reconnect_params() ::\n      #{max_reconnect_backoff_ms => integer()       % = 1, 32 bits\n       }.\n\n-type reconnect_info() ::\n      #{passed                  => boolean() | 0 | 1, % = 1\n        backoff_ms              => [integer()]      % = 2, 32 bits\n       }.\n\n-export_type(['bool_value'/0, 'payload'/0, 'echo_status'/0, 'simple_request'/0, 'simple_response'/0, 'streaming_input_call_request'/0, 'streaming_input_call_response'/0, 'response_parameters'/0, 'streaming_output_call_request'/0, 'streaming_output_call_response'/0, 'reconnect_params'/0, 'reconnect_info'/0]).\n\n-spec encode_msg(bool_value() | payload() | echo_status() | simple_request() | simple_response() | streaming_input_call_request() | streaming_input_call_response() | response_parameters() | streaming_output_call_request() | streaming_output_call_response() | reconnect_params() | reconnect_info(), atom()) -> binary().\nencode_msg(Msg, MsgName) when is_atom(MsgName) ->\n    encode_msg(Msg, MsgName, []).\n\n-spec encode_msg(bool_value() | payload() | echo_status() | simple_request() | simple_response() | streaming_input_call_request() | streaming_input_call_response() | response_parameters() | streaming_output_call_request() | streaming_output_call_response() | reconnect_params() | reconnect_info(), atom(), list()) -> binary().\nencode_msg(Msg, MsgName, Opts) ->\n    case proplists:get_bool(verify, Opts) of\n      true -> verify_msg(Msg, MsgName, Opts);\n      false -> ok\n    end,\n    TrUserData = proplists:get_value(user_data, Opts),\n    case MsgName of\n      bool_value ->\n\t  encode_msg_bool_value(id(Msg, TrUserData), TrUserData);\n      payload ->\n\t  encode_msg_payload(id(Msg, TrUserData), TrUserData);\n      echo_status ->\n\t  encode_msg_echo_status(id(Msg, TrUserData), TrUserData);\n      simple_request ->\n\t  encode_msg_simple_request(id(Msg, TrUserData),\n\t\t\t\t    TrUserData);\n      simple_response ->\n\t  encode_msg_simple_response(id(Msg, TrUserData),\n\t\t\t\t     TrUserData);\n      streaming_input_call_request ->\n\t  encode_msg_streaming_input_call_request(id(Msg,\n\t\t\t\t\t\t     TrUserData),\n\t\t\t\t\t\t  TrUserData);\n      streaming_input_call_response ->\n\t  encode_msg_streaming_input_call_response(id(Msg,\n\t\t\t\t\t\t      TrUserData),\n\t\t\t\t\t\t   TrUserData);\n      response_parameters ->\n\t  encode_msg_response_parameters(id(Msg, TrUserData),\n\t\t\t\t\t TrUserData);\n      streaming_output_call_request ->\n\t  encode_msg_streaming_output_call_request(id(Msg,\n\t\t\t\t\t\t      TrUserData),\n\t\t\t\t\t\t   TrUserData);\n      streaming_output_call_response ->\n\t  encode_msg_streaming_output_call_response(id(Msg,\n\t\t\t\t\t\t       TrUserData),\n\t\t\t\t\t\t    TrUserData);\n      reconnect_params ->\n\t  encode_msg_reconnect_params(id(Msg, TrUserData),\n\t\t\t\t      TrUserData);\n      reconnect_info ->\n\t  encode_msg_reconnect_info(id(Msg, TrUserData),\n\t\t\t\t    TrUserData)\n    end.\n\n\nencode_msg_bool_value(Msg, TrUserData) ->\n    encode_msg_bool_value(Msg, <<>>, TrUserData).\n\n\nencode_msg_bool_value(#{} = M, Bin, TrUserData) ->\n    case M of\n      #{value := F1} ->\n\t  begin\n\t    TrF1 = id(F1, TrUserData),\n\t    if TrF1 =:= false -> Bin;\n\t       true -> e_type_bool(TrF1, <<Bin/binary, 8>>, TrUserData)\n\t    end\n\t  end;\n      _ -> Bin\n    end.\n\nencode_msg_payload(Msg, TrUserData) ->\n    encode_msg_payload(Msg, <<>>, TrUserData).\n\n\nencode_msg_payload(#{} = M, Bin, TrUserData) ->\n    B1 = case M of\n\t   #{type := F1} ->\n\t       begin\n\t\t TrF1 = id(F1, TrUserData),\n\t\t if TrF1 =:= 'COMPRESSABLE'; TrF1 =:= 0 -> Bin;\n\t\t    true ->\n\t\t\t'e_enum_grpc.testing.PayloadType'(TrF1,\n\t\t\t\t\t\t\t  <<Bin/binary, 8>>,\n\t\t\t\t\t\t\t  TrUserData)\n\t\t end\n\t       end;\n\t   _ -> Bin\n\t end,\n    case M of\n      #{body := F2} ->\n\t  begin\n\t    TrF2 = id(F2, TrUserData),\n\t    case iolist_size(TrF2) of\n\t      0 -> B1;\n\t      _ -> e_type_bytes(TrF2, <<B1/binary, 18>>, TrUserData)\n\t    end\n\t  end;\n      _ -> B1\n    end.\n\nencode_msg_echo_status(Msg, TrUserData) ->\n    encode_msg_echo_status(Msg, <<>>, TrUserData).\n\n\nencode_msg_echo_status(#{} = M, Bin, TrUserData) ->\n    B1 = case M of\n\t   #{code := F1} ->\n\t       begin\n\t\t TrF1 = id(F1, TrUserData),\n\t\t if TrF1 =:= 0 -> Bin;\n\t\t    true ->\n\t\t\te_type_int32(TrF1, <<Bin/binary, 8>>, TrUserData)\n\t\t end\n\t       end;\n\t   _ -> Bin\n\t end,\n    case M of\n      #{message := F2} ->\n\t  begin\n\t    TrF2 = id(F2, TrUserData),\n\t    case is_empty_string(TrF2) of\n\t      true -> B1;\n\t      false ->\n\t\t  e_type_string(TrF2, <<B1/binary, 18>>, TrUserData)\n\t    end\n\t  end;\n      _ -> B1\n    end.\n\nencode_msg_simple_request(Msg, TrUserData) ->\n    encode_msg_simple_request(Msg, <<>>, TrUserData).\n\n\nencode_msg_simple_request(#{} = M, Bin, TrUserData) ->\n    B1 = case M of\n\t   #{response_type := F1} ->\n\t       begin\n\t\t TrF1 = id(F1, TrUserData),\n\t\t if TrF1 =:= 'COMPRESSABLE'; TrF1 =:= 0 -> Bin;\n\t\t    true ->\n\t\t\t'e_enum_grpc.testing.PayloadType'(TrF1,\n\t\t\t\t\t\t\t  <<Bin/binary, 8>>,\n\t\t\t\t\t\t\t  TrUserData)\n\t\t end\n\t       end;\n\t   _ -> Bin\n\t end,\n    B2 = case M of\n\t   #{response_size := F2} ->\n\t       begin\n\t\t TrF2 = id(F2, TrUserData),\n\t\t if TrF2 =:= 0 -> B1;\n\t\t    true ->\n\t\t\te_type_int32(TrF2, <<B1/binary, 16>>, TrUserData)\n\t\t end\n\t       end;\n\t   _ -> B1\n\t end,\n    B3 = case M of\n\t   #{payload := F3} ->\n\t       begin\n\t\t TrF3 = id(F3, TrUserData),\n\t\t if TrF3 =:= undefined -> B2;\n\t\t    true ->\n\t\t\te_mfield_simple_request_payload(TrF3, <<B2/binary, 26>>,\n\t\t\t\t\t\t\tTrUserData)\n\t\t end\n\t       end;\n\t   _ -> B2\n\t end,\n    B4 = case M of\n\t   #{fill_username := F4} ->\n\t       begin\n\t\t TrF4 = id(F4, TrUserData),\n\t\t if TrF4 =:= false -> B3;\n\t\t    true -> e_type_bool(TrF4, <<B3/binary, 32>>, TrUserData)\n\t\t end\n\t       end;\n\t   _ -> B3\n\t end,\n    B5 = case M of\n\t   #{fill_oauth_scope := F5} ->\n\t       begin\n\t\t TrF5 = id(F5, TrUserData),\n\t\t if TrF5 =:= false -> B4;\n\t\t    true -> e_type_bool(TrF5, <<B4/binary, 40>>, TrUserData)\n\t\t end\n\t       end;\n\t   _ -> B4\n\t end,\n    B6 = case M of\n\t   #{response_compressed := F6} ->\n\t       begin\n\t\t TrF6 = id(F6, TrUserData),\n\t\t if TrF6 =:= undefined -> B5;\n\t\t    true ->\n\t\t\te_mfield_simple_request_response_compressed(TrF6,\n\t\t\t\t\t\t\t\t    <<B5/binary,\n\t\t\t\t\t\t\t\t      50>>,\n\t\t\t\t\t\t\t\t    TrUserData)\n\t\t end\n\t       end;\n\t   _ -> B5\n\t end,\n    B7 = case M of\n\t   #{response_status := F7} ->\n\t       begin\n\t\t TrF7 = id(F7, TrUserData),\n\t\t if TrF7 =:= undefined -> B6;\n\t\t    true ->\n\t\t\te_mfield_simple_request_response_status(TrF7,\n\t\t\t\t\t\t\t\t<<B6/binary,\n\t\t\t\t\t\t\t\t  58>>,\n\t\t\t\t\t\t\t\tTrUserData)\n\t\t end\n\t       end;\n\t   _ -> B6\n\t end,\n    case M of\n      #{expect_compressed := F8} ->\n\t  begin\n\t    TrF8 = id(F8, TrUserData),\n\t    if TrF8 =:= undefined -> B7;\n\t       true ->\n\t\t   e_mfield_simple_request_expect_compressed(TrF8,\n\t\t\t\t\t\t\t     <<B7/binary, 66>>,\n\t\t\t\t\t\t\t     TrUserData)\n\t    end\n\t  end;\n      _ -> B7\n    end.\n\nencode_msg_simple_response(Msg, TrUserData) ->\n    encode_msg_simple_response(Msg, <<>>, TrUserData).\n\n\nencode_msg_simple_response(#{} = M, Bin, TrUserData) ->\n    B1 = case M of\n\t   #{payload := F1} ->\n\t       begin\n\t\t TrF1 = id(F1, TrUserData),\n\t\t if TrF1 =:= undefined -> Bin;\n\t\t    true ->\n\t\t\te_mfield_simple_response_payload(TrF1,\n\t\t\t\t\t\t\t <<Bin/binary, 10>>,\n\t\t\t\t\t\t\t TrUserData)\n\t\t end\n\t       end;\n\t   _ -> Bin\n\t end,\n    B2 = case M of\n\t   #{username := F2} ->\n\t       begin\n\t\t TrF2 = id(F2, TrUserData),\n\t\t case is_empty_string(TrF2) of\n\t\t   true -> B1;\n\t\t   false ->\n\t\t       e_type_string(TrF2, <<B1/binary, 18>>, TrUserData)\n\t\t end\n\t       end;\n\t   _ -> B1\n\t end,\n    case M of\n      #{oauth_scope := F3} ->\n\t  begin\n\t    TrF3 = id(F3, TrUserData),\n\t    case is_empty_string(TrF3) of\n\t      true -> B2;\n\t      false ->\n\t\t  e_type_string(TrF3, <<B2/binary, 26>>, TrUserData)\n\t    end\n\t  end;\n      _ -> B2\n    end.\n\nencode_msg_streaming_input_call_request(Msg,\n\t\t\t\t\tTrUserData) ->\n    encode_msg_streaming_input_call_request(Msg, <<>>,\n\t\t\t\t\t    TrUserData).\n\n\nencode_msg_streaming_input_call_request(#{} = M, Bin,\n\t\t\t\t\tTrUserData) ->\n    B1 = case M of\n\t   #{payload := F1} ->\n\t       begin\n\t\t TrF1 = id(F1, TrUserData),\n\t\t if TrF1 =:= undefined -> Bin;\n\t\t    true ->\n\t\t\te_mfield_streaming_input_call_request_payload(TrF1,\n\t\t\t\t\t\t\t\t      <<Bin/binary,\n\t\t\t\t\t\t\t\t\t10>>,\n\t\t\t\t\t\t\t\t      TrUserData)\n\t\t end\n\t       end;\n\t   _ -> Bin\n\t end,\n    case M of\n      #{expect_compressed := F2} ->\n\t  begin\n\t    TrF2 = id(F2, TrUserData),\n\t    if TrF2 =:= undefined -> B1;\n\t       true ->\n\t\t   e_mfield_streaming_input_call_request_expect_compressed(TrF2,\n\t\t\t\t\t\t\t\t\t   <<B1/binary,\n\t\t\t\t\t\t\t\t\t     18>>,\n\t\t\t\t\t\t\t\t\t   TrUserData)\n\t    end\n\t  end;\n      _ -> B1\n    end.\n\nencode_msg_streaming_input_call_response(Msg,\n\t\t\t\t\t TrUserData) ->\n    encode_msg_streaming_input_call_response(Msg, <<>>,\n\t\t\t\t\t     TrUserData).\n\n\nencode_msg_streaming_input_call_response(#{} = M, Bin,\n\t\t\t\t\t TrUserData) ->\n    case M of\n      #{aggregated_payload_size := F1} ->\n\t  begin\n\t    TrF1 = id(F1, TrUserData),\n\t    if TrF1 =:= 0 -> Bin;\n\t       true ->\n\t\t   e_type_int32(TrF1, <<Bin/binary, 8>>, TrUserData)\n\t    end\n\t  end;\n      _ -> Bin\n    end.\n\nencode_msg_response_parameters(Msg, TrUserData) ->\n    encode_msg_response_parameters(Msg, <<>>, TrUserData).\n\n\nencode_msg_response_parameters(#{} = M, Bin,\n\t\t\t       TrUserData) ->\n    B1 = case M of\n\t   #{size := F1} ->\n\t       begin\n\t\t TrF1 = id(F1, TrUserData),\n\t\t if TrF1 =:= 0 -> Bin;\n\t\t    true ->\n\t\t\te_type_int32(TrF1, <<Bin/binary, 8>>, TrUserData)\n\t\t end\n\t       end;\n\t   _ -> Bin\n\t end,\n    B2 = case M of\n\t   #{interval_us := F2} ->\n\t       begin\n\t\t TrF2 = id(F2, TrUserData),\n\t\t if TrF2 =:= 0 -> B1;\n\t\t    true ->\n\t\t\te_type_int32(TrF2, <<B1/binary, 16>>, TrUserData)\n\t\t end\n\t       end;\n\t   _ -> B1\n\t end,\n    case M of\n      #{compressed := F3} ->\n\t  begin\n\t    TrF3 = id(F3, TrUserData),\n\t    if TrF3 =:= undefined -> B2;\n\t       true ->\n\t\t   e_mfield_response_parameters_compressed(TrF3,\n\t\t\t\t\t\t\t   <<B2/binary, 26>>,\n\t\t\t\t\t\t\t   TrUserData)\n\t    end\n\t  end;\n      _ -> B2\n    end.\n\nencode_msg_streaming_output_call_request(Msg,\n\t\t\t\t\t TrUserData) ->\n    encode_msg_streaming_output_call_request(Msg, <<>>,\n\t\t\t\t\t     TrUserData).\n\n\nencode_msg_streaming_output_call_request(#{} = M, Bin,\n\t\t\t\t\t TrUserData) ->\n    B1 = case M of\n\t   #{response_type := F1} ->\n\t       begin\n\t\t TrF1 = id(F1, TrUserData),\n\t\t if TrF1 =:= 'COMPRESSABLE'; TrF1 =:= 0 -> Bin;\n\t\t    true ->\n\t\t\t'e_enum_grpc.testing.PayloadType'(TrF1,\n\t\t\t\t\t\t\t  <<Bin/binary, 8>>,\n\t\t\t\t\t\t\t  TrUserData)\n\t\t end\n\t       end;\n\t   _ -> Bin\n\t end,\n    B2 = case M of\n\t   #{response_parameters := F2} ->\n\t       TrF2 = id(F2, TrUserData),\n\t       if TrF2 == [] -> B1;\n\t\t  true ->\n\t\t      e_field_streaming_output_call_request_response_parameters(TrF2,\n\t\t\t\t\t\t\t\t\t\tB1,\n\t\t\t\t\t\t\t\t\t\tTrUserData)\n\t       end;\n\t   _ -> B1\n\t end,\n    B3 = case M of\n\t   #{payload := F3} ->\n\t       begin\n\t\t TrF3 = id(F3, TrUserData),\n\t\t if TrF3 =:= undefined -> B2;\n\t\t    true ->\n\t\t\te_mfield_streaming_output_call_request_payload(TrF3,\n\t\t\t\t\t\t\t\t       <<B2/binary,\n\t\t\t\t\t\t\t\t\t 26>>,\n\t\t\t\t\t\t\t\t       TrUserData)\n\t\t end\n\t       end;\n\t   _ -> B2\n\t end,\n    case M of\n      #{response_status := F4} ->\n\t  begin\n\t    TrF4 = id(F4, TrUserData),\n\t    if TrF4 =:= undefined -> B3;\n\t       true ->\n\t\t   e_mfield_streaming_output_call_request_response_status(TrF4,\n\t\t\t\t\t\t\t\t\t  <<B3/binary,\n\t\t\t\t\t\t\t\t\t    58>>,\n\t\t\t\t\t\t\t\t\t  TrUserData)\n\t    end\n\t  end;\n      _ -> B3\n    end.\n\nencode_msg_streaming_output_call_response(Msg,\n\t\t\t\t\t  TrUserData) ->\n    encode_msg_streaming_output_call_response(Msg, <<>>,\n\t\t\t\t\t      TrUserData).\n\n\nencode_msg_streaming_output_call_response(#{} = M, Bin,\n\t\t\t\t\t  TrUserData) ->\n    case M of\n      #{payload := F1} ->\n\t  begin\n\t    TrF1 = id(F1, TrUserData),\n\t    if TrF1 =:= undefined -> Bin;\n\t       true ->\n\t\t   e_mfield_streaming_output_call_response_payload(TrF1,\n\t\t\t\t\t\t\t\t   <<Bin/binary,\n\t\t\t\t\t\t\t\t     10>>,\n\t\t\t\t\t\t\t\t   TrUserData)\n\t    end\n\t  end;\n      _ -> Bin\n    end.\n\nencode_msg_reconnect_params(Msg, TrUserData) ->\n    encode_msg_reconnect_params(Msg, <<>>, TrUserData).\n\n\nencode_msg_reconnect_params(#{} = M, Bin, TrUserData) ->\n    case M of\n      #{max_reconnect_backoff_ms := F1} ->\n\t  begin\n\t    TrF1 = id(F1, TrUserData),\n\t    if TrF1 =:= 0 -> Bin;\n\t       true ->\n\t\t   e_type_int32(TrF1, <<Bin/binary, 8>>, TrUserData)\n\t    end\n\t  end;\n      _ -> Bin\n    end.\n\nencode_msg_reconnect_info(Msg, TrUserData) ->\n    encode_msg_reconnect_info(Msg, <<>>, TrUserData).\n\n\nencode_msg_reconnect_info(#{} = M, Bin, TrUserData) ->\n    B1 = case M of\n\t   #{passed := F1} ->\n\t       begin\n\t\t TrF1 = id(F1, TrUserData),\n\t\t if TrF1 =:= false -> Bin;\n\t\t    true -> e_type_bool(TrF1, <<Bin/binary, 8>>, TrUserData)\n\t\t end\n\t       end;\n\t   _ -> Bin\n\t end,\n    case M of\n      #{backoff_ms := F2} ->\n\t  TrF2 = id(F2, TrUserData),\n\t  if TrF2 == [] -> B1;\n\t     true ->\n\t\t e_field_reconnect_info_backoff_ms(TrF2, B1, TrUserData)\n\t  end;\n      _ -> B1\n    end.\n\ne_mfield_simple_request_payload(Msg, Bin, TrUserData) ->\n    SubBin = encode_msg_payload(Msg, <<>>, TrUserData),\n    Bin2 = e_varint(byte_size(SubBin), Bin),\n    <<Bin2/binary, SubBin/binary>>.\n\ne_mfield_simple_request_response_compressed(Msg, Bin,\n\t\t\t\t\t    TrUserData) ->\n    SubBin = encode_msg_bool_value(Msg, <<>>, TrUserData),\n    Bin2 = e_varint(byte_size(SubBin), Bin),\n    <<Bin2/binary, SubBin/binary>>.\n\ne_mfield_simple_request_response_status(Msg, Bin,\n\t\t\t\t\tTrUserData) ->\n    SubBin = encode_msg_echo_status(Msg, <<>>, TrUserData),\n    Bin2 = e_varint(byte_size(SubBin), Bin),\n    <<Bin2/binary, SubBin/binary>>.\n\ne_mfield_simple_request_expect_compressed(Msg, Bin,\n\t\t\t\t\t  TrUserData) ->\n    SubBin = encode_msg_bool_value(Msg, <<>>, TrUserData),\n    Bin2 = e_varint(byte_size(SubBin), Bin),\n    <<Bin2/binary, SubBin/binary>>.\n\ne_mfield_simple_response_payload(Msg, Bin,\n\t\t\t\t TrUserData) ->\n    SubBin = encode_msg_payload(Msg, <<>>, TrUserData),\n    Bin2 = e_varint(byte_size(SubBin), Bin),\n    <<Bin2/binary, SubBin/binary>>.\n\ne_mfield_streaming_input_call_request_payload(Msg, Bin,\n\t\t\t\t\t      TrUserData) ->\n    SubBin = encode_msg_payload(Msg, <<>>, TrUserData),\n    Bin2 = e_varint(byte_size(SubBin), Bin),\n    <<Bin2/binary, SubBin/binary>>.\n\ne_mfield_streaming_input_call_request_expect_compressed(Msg,\n\t\t\t\t\t\t\tBin, TrUserData) ->\n    SubBin = encode_msg_bool_value(Msg, <<>>, TrUserData),\n    Bin2 = e_varint(byte_size(SubBin), Bin),\n    <<Bin2/binary, SubBin/binary>>.\n\ne_mfield_response_parameters_compressed(Msg, Bin,\n\t\t\t\t\tTrUserData) ->\n    SubBin = encode_msg_bool_value(Msg, <<>>, TrUserData),\n    Bin2 = e_varint(byte_size(SubBin), Bin),\n    <<Bin2/binary, SubBin/binary>>.\n\ne_mfield_streaming_output_call_request_response_parameters(Msg,\n\t\t\t\t\t\t\t   Bin, TrUserData) ->\n    SubBin = encode_msg_response_parameters(Msg, <<>>,\n\t\t\t\t\t    TrUserData),\n    Bin2 = e_varint(byte_size(SubBin), Bin),\n    <<Bin2/binary, SubBin/binary>>.\n\ne_field_streaming_output_call_request_response_parameters([Elem\n\t\t\t\t\t\t\t   | Rest],\n\t\t\t\t\t\t\t  Bin, TrUserData) ->\n    Bin2 = <<Bin/binary, 18>>,\n    Bin3 =\n\te_mfield_streaming_output_call_request_response_parameters(id(Elem,\n\t\t\t\t\t\t\t\t      TrUserData),\n\t\t\t\t\t\t\t\t   Bin2,\n\t\t\t\t\t\t\t\t   TrUserData),\n    e_field_streaming_output_call_request_response_parameters(Rest,\n\t\t\t\t\t\t\t      Bin3, TrUserData);\ne_field_streaming_output_call_request_response_parameters([],\n\t\t\t\t\t\t\t  Bin, _TrUserData) ->\n    Bin.\n\ne_mfield_streaming_output_call_request_payload(Msg, Bin,\n\t\t\t\t\t       TrUserData) ->\n    SubBin = encode_msg_payload(Msg, <<>>, TrUserData),\n    Bin2 = e_varint(byte_size(SubBin), Bin),\n    <<Bin2/binary, SubBin/binary>>.\n\ne_mfield_streaming_output_call_request_response_status(Msg,\n\t\t\t\t\t\t       Bin, TrUserData) ->\n    SubBin = encode_msg_echo_status(Msg, <<>>, TrUserData),\n    Bin2 = e_varint(byte_size(SubBin), Bin),\n    <<Bin2/binary, SubBin/binary>>.\n\ne_mfield_streaming_output_call_response_payload(Msg,\n\t\t\t\t\t\tBin, TrUserData) ->\n    SubBin = encode_msg_payload(Msg, <<>>, TrUserData),\n    Bin2 = e_varint(byte_size(SubBin), Bin),\n    <<Bin2/binary, SubBin/binary>>.\n\ne_field_reconnect_info_backoff_ms(Elems, Bin,\n\t\t\t\t  TrUserData)\n    when Elems =/= [] ->\n    SubBin = e_pfield_reconnect_info_backoff_ms(Elems, <<>>,\n\t\t\t\t\t\tTrUserData),\n    Bin2 = <<Bin/binary, 18>>,\n    Bin3 = e_varint(byte_size(SubBin), Bin2),\n    <<Bin3/binary, SubBin/binary>>;\ne_field_reconnect_info_backoff_ms([], Bin,\n\t\t\t\t  _TrUserData) ->\n    Bin.\n\ne_pfield_reconnect_info_backoff_ms([Value | Rest], Bin,\n\t\t\t\t   TrUserData) ->\n    Bin2 = e_type_int32(id(Value, TrUserData), Bin,\n\t\t\tTrUserData),\n    e_pfield_reconnect_info_backoff_ms(Rest, Bin2,\n\t\t\t\t       TrUserData);\ne_pfield_reconnect_info_backoff_ms([], Bin,\n\t\t\t\t   _TrUserData) ->\n    Bin.\n\n'e_enum_grpc.testing.PayloadType'('COMPRESSABLE', Bin,\n\t\t\t\t  _TrUserData) ->\n    <<Bin/binary, 0>>;\n'e_enum_grpc.testing.PayloadType'(V, Bin,\n\t\t\t\t  _TrUserData) ->\n    e_varint(V, Bin).\n\n-compile({nowarn_unused_function,e_type_sint/3}).\ne_type_sint(Value, Bin, _TrUserData) when Value >= 0 ->\n    e_varint(Value * 2, Bin);\ne_type_sint(Value, Bin, _TrUserData) ->\n    e_varint(Value * -2 - 1, Bin).\n\n-compile({nowarn_unused_function,e_type_int32/3}).\ne_type_int32(Value, Bin, _TrUserData)\n    when 0 =< Value, Value =< 127 ->\n    <<Bin/binary, Value>>;\ne_type_int32(Value, Bin, _TrUserData) ->\n    <<N:64/unsigned-native>> = <<Value:64/signed-native>>,\n    e_varint(N, Bin).\n\n-compile({nowarn_unused_function,e_type_int64/3}).\ne_type_int64(Value, Bin, _TrUserData)\n    when 0 =< Value, Value =< 127 ->\n    <<Bin/binary, Value>>;\ne_type_int64(Value, Bin, _TrUserData) ->\n    <<N:64/unsigned-native>> = <<Value:64/signed-native>>,\n    e_varint(N, Bin).\n\n-compile({nowarn_unused_function,e_type_bool/3}).\ne_type_bool(true, Bin, _TrUserData) ->\n    <<Bin/binary, 1>>;\ne_type_bool(false, Bin, _TrUserData) ->\n    <<Bin/binary, 0>>;\ne_type_bool(1, Bin, _TrUserData) -> <<Bin/binary, 1>>;\ne_type_bool(0, Bin, _TrUserData) -> <<Bin/binary, 0>>.\n\n-compile({nowarn_unused_function,e_type_string/3}).\ne_type_string(S, Bin, _TrUserData) ->\n    Utf8 = unicode:characters_to_binary(S),\n    Bin2 = e_varint(byte_size(Utf8), Bin),\n    <<Bin2/binary, Utf8/binary>>.\n\n-compile({nowarn_unused_function,e_type_bytes/3}).\ne_type_bytes(Bytes, Bin, _TrUserData)\n    when is_binary(Bytes) ->\n    Bin2 = e_varint(byte_size(Bytes), Bin),\n    <<Bin2/binary, Bytes/binary>>;\ne_type_bytes(Bytes, Bin, _TrUserData)\n    when is_list(Bytes) ->\n    BytesBin = iolist_to_binary(Bytes),\n    Bin2 = e_varint(byte_size(BytesBin), Bin),\n    <<Bin2/binary, BytesBin/binary>>.\n\n-compile({nowarn_unused_function,e_type_fixed32/3}).\ne_type_fixed32(Value, Bin, _TrUserData) ->\n    <<Bin/binary, Value:32/little>>.\n\n-compile({nowarn_unused_function,e_type_sfixed32/3}).\ne_type_sfixed32(Value, Bin, _TrUserData) ->\n    <<Bin/binary, Value:32/little-signed>>.\n\n-compile({nowarn_unused_function,e_type_fixed64/3}).\ne_type_fixed64(Value, Bin, _TrUserData) ->\n    <<Bin/binary, Value:64/little>>.\n\n-compile({nowarn_unused_function,e_type_sfixed64/3}).\ne_type_sfixed64(Value, Bin, _TrUserData) ->\n    <<Bin/binary, Value:64/little-signed>>.\n\n-compile({nowarn_unused_function,e_type_float/3}).\ne_type_float(V, Bin, _) when is_number(V) ->\n    <<Bin/binary, V:32/little-float>>;\ne_type_float(infinity, Bin, _) ->\n    <<Bin/binary, 0:16, 128, 127>>;\ne_type_float('-infinity', Bin, _) ->\n    <<Bin/binary, 0:16, 128, 255>>;\ne_type_float(nan, Bin, _) ->\n    <<Bin/binary, 0:16, 192, 127>>.\n\n-compile({nowarn_unused_function,e_type_double/3}).\ne_type_double(V, Bin, _) when is_number(V) ->\n    <<Bin/binary, V:64/little-float>>;\ne_type_double(infinity, Bin, _) ->\n    <<Bin/binary, 0:48, 240, 127>>;\ne_type_double('-infinity', Bin, _) ->\n    <<Bin/binary, 0:48, 240, 255>>;\ne_type_double(nan, Bin, _) ->\n    <<Bin/binary, 0:48, 248, 127>>.\n\n-compile({nowarn_unused_function,e_varint/3}).\ne_varint(N, Bin, _TrUserData) -> e_varint(N, Bin).\n\n-compile({nowarn_unused_function,e_varint/2}).\ne_varint(N, Bin) when N =< 127 -> <<Bin/binary, N>>;\ne_varint(N, Bin) ->\n    Bin2 = <<Bin/binary, (N band 127 bor 128)>>,\n    e_varint(N bsr 7, Bin2).\n\nis_empty_string(\"\") -> true;\nis_empty_string(<<>>) -> true;\nis_empty_string(L) when is_list(L) ->\n    not string_has_chars(L);\nis_empty_string(B) when is_binary(B) -> false.\n\nstring_has_chars([C | _]) when is_integer(C) -> true;\nstring_has_chars([H | T]) ->\n    case string_has_chars(H) of\n      true -> true;\n      false -> string_has_chars(T)\n    end;\nstring_has_chars(B)\n    when is_binary(B), byte_size(B) =/= 0 ->\n    true;\nstring_has_chars(C) when is_integer(C) -> true;\nstring_has_chars(<<>>) -> false;\nstring_has_chars([]) -> false.\n\n\ndecode_msg(Bin, MsgName) when is_binary(Bin) ->\n    decode_msg(Bin, MsgName, []).\n\ndecode_msg(Bin, MsgName, Opts) when is_binary(Bin) ->\n    TrUserData = proplists:get_value(user_data, Opts),\n    decode_msg_1_catch(Bin, MsgName, TrUserData).\n\n-ifdef('OTP_RELEASE').\ndecode_msg_1_catch(Bin, MsgName, TrUserData) ->\n    try decode_msg_2_doit(MsgName, Bin, TrUserData)\n    catch Class:Reason:StackTrace -> error({gpb_error,{decoding_failure, {Bin, MsgName, {Class, Reason, StackTrace}}}})\n    end.\n-else.\ndecode_msg_1_catch(Bin, MsgName, TrUserData) ->\n    try decode_msg_2_doit(MsgName, Bin, TrUserData)\n    catch Class:Reason ->\n        StackTrace = erlang:get_stacktrace(),\n        error({gpb_error,{decoding_failure, {Bin, MsgName, {Class, Reason, StackTrace}}}})\n    end.\n-endif.\n\ndecode_msg_2_doit(bool_value, Bin, TrUserData) ->\n    id(decode_msg_bool_value(Bin, TrUserData), TrUserData);\ndecode_msg_2_doit(payload, Bin, TrUserData) ->\n    id(decode_msg_payload(Bin, TrUserData), TrUserData);\ndecode_msg_2_doit(echo_status, Bin, TrUserData) ->\n    id(decode_msg_echo_status(Bin, TrUserData), TrUserData);\ndecode_msg_2_doit(simple_request, Bin, TrUserData) ->\n    id(decode_msg_simple_request(Bin, TrUserData),\n       TrUserData);\ndecode_msg_2_doit(simple_response, Bin, TrUserData) ->\n    id(decode_msg_simple_response(Bin, TrUserData),\n       TrUserData);\ndecode_msg_2_doit(streaming_input_call_request, Bin,\n\t\t  TrUserData) ->\n    id(decode_msg_streaming_input_call_request(Bin,\n\t\t\t\t\t       TrUserData),\n       TrUserData);\ndecode_msg_2_doit(streaming_input_call_response, Bin,\n\t\t  TrUserData) ->\n    id(decode_msg_streaming_input_call_response(Bin,\n\t\t\t\t\t\tTrUserData),\n       TrUserData);\ndecode_msg_2_doit(response_parameters, Bin,\n\t\t  TrUserData) ->\n    id(decode_msg_response_parameters(Bin, TrUserData),\n       TrUserData);\ndecode_msg_2_doit(streaming_output_call_request, Bin,\n\t\t  TrUserData) ->\n    id(decode_msg_streaming_output_call_request(Bin,\n\t\t\t\t\t\tTrUserData),\n       TrUserData);\ndecode_msg_2_doit(streaming_output_call_response, Bin,\n\t\t  TrUserData) ->\n    id(decode_msg_streaming_output_call_response(Bin,\n\t\t\t\t\t\t TrUserData),\n       TrUserData);\ndecode_msg_2_doit(reconnect_params, Bin, TrUserData) ->\n    id(decode_msg_reconnect_params(Bin, TrUserData),\n       TrUserData);\ndecode_msg_2_doit(reconnect_info, Bin, TrUserData) ->\n    id(decode_msg_reconnect_info(Bin, TrUserData),\n       TrUserData).\n\n\n\ndecode_msg_bool_value(Bin, TrUserData) ->\n    dfp_read_field_def_bool_value(Bin, 0, 0,\n\t\t\t\t  id(false, TrUserData), TrUserData).\n\ndfp_read_field_def_bool_value(<<8, Rest/binary>>, Z1,\n\t\t\t      Z2, F@_1, TrUserData) ->\n    d_field_bool_value_value(Rest, Z1, Z2, F@_1,\n\t\t\t     TrUserData);\ndfp_read_field_def_bool_value(<<>>, 0, 0, F@_1, _) ->\n    #{value => F@_1};\ndfp_read_field_def_bool_value(Other, Z1, Z2, F@_1,\n\t\t\t      TrUserData) ->\n    dg_read_field_def_bool_value(Other, Z1, Z2, F@_1,\n\t\t\t\t TrUserData).\n\ndg_read_field_def_bool_value(<<1:1, X:7, Rest/binary>>,\n\t\t\t     N, Acc, F@_1, TrUserData)\n    when N < 32 - 7 ->\n    dg_read_field_def_bool_value(Rest, N + 7, X bsl N + Acc,\n\t\t\t\t F@_1, TrUserData);\ndg_read_field_def_bool_value(<<0:1, X:7, Rest/binary>>,\n\t\t\t     N, Acc, F@_1, TrUserData) ->\n    Key = X bsl N + Acc,\n    case Key of\n      8 ->\n\t  d_field_bool_value_value(Rest, 0, 0, F@_1, TrUserData);\n      _ ->\n\t  case Key band 7 of\n\t    0 ->\n\t\tskip_varint_bool_value(Rest, 0, 0, F@_1, TrUserData);\n\t    1 -> skip_64_bool_value(Rest, 0, 0, F@_1, TrUserData);\n\t    2 ->\n\t\tskip_length_delimited_bool_value(Rest, 0, 0, F@_1,\n\t\t\t\t\t\t TrUserData);\n\t    3 ->\n\t\tskip_group_bool_value(Rest, Key bsr 3, 0, F@_1,\n\t\t\t\t      TrUserData);\n\t    5 -> skip_32_bool_value(Rest, 0, 0, F@_1, TrUserData)\n\t  end\n    end;\ndg_read_field_def_bool_value(<<>>, 0, 0, F@_1, _) ->\n    #{value => F@_1}.\n\nd_field_bool_value_value(<<1:1, X:7, Rest/binary>>, N,\n\t\t\t Acc, F@_1, TrUserData)\n    when N < 57 ->\n    d_field_bool_value_value(Rest, N + 7, X bsl N + Acc,\n\t\t\t     F@_1, TrUserData);\nd_field_bool_value_value(<<0:1, X:7, Rest/binary>>, N,\n\t\t\t Acc, _, TrUserData) ->\n    {NewFValue, RestF} = {id(X bsl N + Acc =/= 0,\n\t\t\t     TrUserData),\n\t\t\t  Rest},\n    dfp_read_field_def_bool_value(RestF, 0, 0, NewFValue,\n\t\t\t\t  TrUserData).\n\nskip_varint_bool_value(<<1:1, _:7, Rest/binary>>, Z1,\n\t\t       Z2, F@_1, TrUserData) ->\n    skip_varint_bool_value(Rest, Z1, Z2, F@_1, TrUserData);\nskip_varint_bool_value(<<0:1, _:7, Rest/binary>>, Z1,\n\t\t       Z2, F@_1, TrUserData) ->\n    dfp_read_field_def_bool_value(Rest, Z1, Z2, F@_1,\n\t\t\t\t  TrUserData).\n\nskip_length_delimited_bool_value(<<1:1, X:7,\n\t\t\t\t   Rest/binary>>,\n\t\t\t\t N, Acc, F@_1, TrUserData)\n    when N < 57 ->\n    skip_length_delimited_bool_value(Rest, N + 7,\n\t\t\t\t     X bsl N + Acc, F@_1, TrUserData);\nskip_length_delimited_bool_value(<<0:1, X:7,\n\t\t\t\t   Rest/binary>>,\n\t\t\t\t N, Acc, F@_1, TrUserData) ->\n    Length = X bsl N + Acc,\n    <<_:Length/binary, Rest2/binary>> = Rest,\n    dfp_read_field_def_bool_value(Rest2, 0, 0, F@_1,\n\t\t\t\t  TrUserData).\n\nskip_group_bool_value(Bin, FNum, Z2, F@_1,\n\t\t      TrUserData) ->\n    {_, Rest} = read_group(Bin, FNum),\n    dfp_read_field_def_bool_value(Rest, 0, Z2, F@_1,\n\t\t\t\t  TrUserData).\n\nskip_32_bool_value(<<_:32, Rest/binary>>, Z1, Z2, F@_1,\n\t\t   TrUserData) ->\n    dfp_read_field_def_bool_value(Rest, Z1, Z2, F@_1,\n\t\t\t\t  TrUserData).\n\nskip_64_bool_value(<<_:64, Rest/binary>>, Z1, Z2, F@_1,\n\t\t   TrUserData) ->\n    dfp_read_field_def_bool_value(Rest, Z1, Z2, F@_1,\n\t\t\t\t  TrUserData).\n\ndecode_msg_payload(Bin, TrUserData) ->\n    dfp_read_field_def_payload(Bin, 0, 0,\n\t\t\t       id('COMPRESSABLE', TrUserData),\n\t\t\t       id(<<>>, TrUserData), TrUserData).\n\ndfp_read_field_def_payload(<<8, Rest/binary>>, Z1, Z2,\n\t\t\t   F@_1, F@_2, TrUserData) ->\n    d_field_payload_type(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t TrUserData);\ndfp_read_field_def_payload(<<18, Rest/binary>>, Z1, Z2,\n\t\t\t   F@_1, F@_2, TrUserData) ->\n    d_field_payload_body(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t TrUserData);\ndfp_read_field_def_payload(<<>>, 0, 0, F@_1, F@_2, _) ->\n    #{type => F@_1, body => F@_2};\ndfp_read_field_def_payload(Other, Z1, Z2, F@_1, F@_2,\n\t\t\t   TrUserData) ->\n    dg_read_field_def_payload(Other, Z1, Z2, F@_1, F@_2,\n\t\t\t      TrUserData).\n\ndg_read_field_def_payload(<<1:1, X:7, Rest/binary>>, N,\n\t\t\t  Acc, F@_1, F@_2, TrUserData)\n    when N < 32 - 7 ->\n    dg_read_field_def_payload(Rest, N + 7, X bsl N + Acc,\n\t\t\t      F@_1, F@_2, TrUserData);\ndg_read_field_def_payload(<<0:1, X:7, Rest/binary>>, N,\n\t\t\t  Acc, F@_1, F@_2, TrUserData) ->\n    Key = X bsl N + Acc,\n    case Key of\n      8 ->\n\t  d_field_payload_type(Rest, 0, 0, F@_1, F@_2,\n\t\t\t       TrUserData);\n      18 ->\n\t  d_field_payload_body(Rest, 0, 0, F@_1, F@_2,\n\t\t\t       TrUserData);\n      _ ->\n\t  case Key band 7 of\n\t    0 ->\n\t\tskip_varint_payload(Rest, 0, 0, F@_1, F@_2, TrUserData);\n\t    1 ->\n\t\tskip_64_payload(Rest, 0, 0, F@_1, F@_2, TrUserData);\n\t    2 ->\n\t\tskip_length_delimited_payload(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t\t      TrUserData);\n\t    3 ->\n\t\tskip_group_payload(Rest, Key bsr 3, 0, F@_1, F@_2,\n\t\t\t\t   TrUserData);\n\t    5 -> skip_32_payload(Rest, 0, 0, F@_1, F@_2, TrUserData)\n\t  end\n    end;\ndg_read_field_def_payload(<<>>, 0, 0, F@_1, F@_2, _) ->\n    #{type => F@_1, body => F@_2}.\n\nd_field_payload_type(<<1:1, X:7, Rest/binary>>, N, Acc,\n\t\t     F@_1, F@_2, TrUserData)\n    when N < 57 ->\n    d_field_payload_type(Rest, N + 7, X bsl N + Acc, F@_1,\n\t\t\t F@_2, TrUserData);\nd_field_payload_type(<<0:1, X:7, Rest/binary>>, N, Acc,\n\t\t     _, F@_2, TrUserData) ->\n    {NewFValue, RestF} =\n\t{id('d_enum_grpc.testing.PayloadType'(begin\n\t\t\t\t\t\t<<Res:32/signed-native>> = <<(X\n\t\t\t\t\t\t\t\t\t\tbsl\n\t\t\t\t\t\t\t\t\t\tN\n\t\t\t\t\t\t\t\t\t\t+\n\t\t\t\t\t\t\t\t\t\tAcc):32/unsigned-native>>,\n\t\t\t\t\t\tid(Res, TrUserData)\n\t\t\t\t\t      end),\n\t    TrUserData),\n\t Rest},\n    dfp_read_field_def_payload(RestF, 0, 0, NewFValue, F@_2,\n\t\t\t       TrUserData).\n\nd_field_payload_body(<<1:1, X:7, Rest/binary>>, N, Acc,\n\t\t     F@_1, F@_2, TrUserData)\n    when N < 57 ->\n    d_field_payload_body(Rest, N + 7, X bsl N + Acc, F@_1,\n\t\t\t F@_2, TrUserData);\nd_field_payload_body(<<0:1, X:7, Rest/binary>>, N, Acc,\n\t\t     F@_1, _, TrUserData) ->\n    {NewFValue, RestF} = begin\n\t\t\t   Len = X bsl N + Acc,\n\t\t\t   <<Bytes:Len/binary, Rest2/binary>> = Rest,\n\t\t\t   {id(binary:copy(Bytes), TrUserData), Rest2}\n\t\t\t end,\n    dfp_read_field_def_payload(RestF, 0, 0, F@_1, NewFValue,\n\t\t\t       TrUserData).\n\nskip_varint_payload(<<1:1, _:7, Rest/binary>>, Z1, Z2,\n\t\t    F@_1, F@_2, TrUserData) ->\n    skip_varint_payload(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\tTrUserData);\nskip_varint_payload(<<0:1, _:7, Rest/binary>>, Z1, Z2,\n\t\t    F@_1, F@_2, TrUserData) ->\n    dfp_read_field_def_payload(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t       TrUserData).\n\nskip_length_delimited_payload(<<1:1, X:7, Rest/binary>>,\n\t\t\t      N, Acc, F@_1, F@_2, TrUserData)\n    when N < 57 ->\n    skip_length_delimited_payload(Rest, N + 7,\n\t\t\t\t  X bsl N + Acc, F@_1, F@_2, TrUserData);\nskip_length_delimited_payload(<<0:1, X:7, Rest/binary>>,\n\t\t\t      N, Acc, F@_1, F@_2, TrUserData) ->\n    Length = X bsl N + Acc,\n    <<_:Length/binary, Rest2/binary>> = Rest,\n    dfp_read_field_def_payload(Rest2, 0, 0, F@_1, F@_2,\n\t\t\t       TrUserData).\n\nskip_group_payload(Bin, FNum, Z2, F@_1, F@_2,\n\t\t   TrUserData) ->\n    {_, Rest} = read_group(Bin, FNum),\n    dfp_read_field_def_payload(Rest, 0, Z2, F@_1, F@_2,\n\t\t\t       TrUserData).\n\nskip_32_payload(<<_:32, Rest/binary>>, Z1, Z2, F@_1,\n\t\tF@_2, TrUserData) ->\n    dfp_read_field_def_payload(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t       TrUserData).\n\nskip_64_payload(<<_:64, Rest/binary>>, Z1, Z2, F@_1,\n\t\tF@_2, TrUserData) ->\n    dfp_read_field_def_payload(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t       TrUserData).\n\ndecode_msg_echo_status(Bin, TrUserData) ->\n    dfp_read_field_def_echo_status(Bin, 0, 0,\n\t\t\t\t   id(0, TrUserData), id(<<>>, TrUserData),\n\t\t\t\t   TrUserData).\n\ndfp_read_field_def_echo_status(<<8, Rest/binary>>, Z1,\n\t\t\t       Z2, F@_1, F@_2, TrUserData) ->\n    d_field_echo_status_code(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t     TrUserData);\ndfp_read_field_def_echo_status(<<18, Rest/binary>>, Z1,\n\t\t\t       Z2, F@_1, F@_2, TrUserData) ->\n    d_field_echo_status_message(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t\tTrUserData);\ndfp_read_field_def_echo_status(<<>>, 0, 0, F@_1, F@_2,\n\t\t\t       _) ->\n    #{code => F@_1, message => F@_2};\ndfp_read_field_def_echo_status(Other, Z1, Z2, F@_1,\n\t\t\t       F@_2, TrUserData) ->\n    dg_read_field_def_echo_status(Other, Z1, Z2, F@_1, F@_2,\n\t\t\t\t  TrUserData).\n\ndg_read_field_def_echo_status(<<1:1, X:7, Rest/binary>>,\n\t\t\t      N, Acc, F@_1, F@_2, TrUserData)\n    when N < 32 - 7 ->\n    dg_read_field_def_echo_status(Rest, N + 7,\n\t\t\t\t  X bsl N + Acc, F@_1, F@_2, TrUserData);\ndg_read_field_def_echo_status(<<0:1, X:7, Rest/binary>>,\n\t\t\t      N, Acc, F@_1, F@_2, TrUserData) ->\n    Key = X bsl N + Acc,\n    case Key of\n      8 ->\n\t  d_field_echo_status_code(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t   TrUserData);\n      18 ->\n\t  d_field_echo_status_message(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t      TrUserData);\n      _ ->\n\t  case Key band 7 of\n\t    0 ->\n\t\tskip_varint_echo_status(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t\tTrUserData);\n\t    1 ->\n\t\tskip_64_echo_status(Rest, 0, 0, F@_1, F@_2, TrUserData);\n\t    2 ->\n\t\tskip_length_delimited_echo_status(Rest, 0, 0, F@_1,\n\t\t\t\t\t\t  F@_2, TrUserData);\n\t    3 ->\n\t\tskip_group_echo_status(Rest, Key bsr 3, 0, F@_1, F@_2,\n\t\t\t\t       TrUserData);\n\t    5 ->\n\t\tskip_32_echo_status(Rest, 0, 0, F@_1, F@_2, TrUserData)\n\t  end\n    end;\ndg_read_field_def_echo_status(<<>>, 0, 0, F@_1, F@_2,\n\t\t\t      _) ->\n    #{code => F@_1, message => F@_2}.\n\nd_field_echo_status_code(<<1:1, X:7, Rest/binary>>, N,\n\t\t\t Acc, F@_1, F@_2, TrUserData)\n    when N < 57 ->\n    d_field_echo_status_code(Rest, N + 7, X bsl N + Acc,\n\t\t\t     F@_1, F@_2, TrUserData);\nd_field_echo_status_code(<<0:1, X:7, Rest/binary>>, N,\n\t\t\t Acc, _, F@_2, TrUserData) ->\n    {NewFValue, RestF} = {begin\n\t\t\t    <<Res:32/signed-native>> = <<(X bsl N +\n\t\t\t\t\t\t\t    Acc):32/unsigned-native>>,\n\t\t\t    id(Res, TrUserData)\n\t\t\t  end,\n\t\t\t  Rest},\n    dfp_read_field_def_echo_status(RestF, 0, 0, NewFValue,\n\t\t\t\t   F@_2, TrUserData).\n\nd_field_echo_status_message(<<1:1, X:7, Rest/binary>>,\n\t\t\t    N, Acc, F@_1, F@_2, TrUserData)\n    when N < 57 ->\n    d_field_echo_status_message(Rest, N + 7, X bsl N + Acc,\n\t\t\t\tF@_1, F@_2, TrUserData);\nd_field_echo_status_message(<<0:1, X:7, Rest/binary>>,\n\t\t\t    N, Acc, F@_1, _, TrUserData) ->\n    {NewFValue, RestF} = begin\n\t\t\t   Len = X bsl N + Acc,\n\t\t\t   <<Bytes:Len/binary, Rest2/binary>> = Rest,\n\t\t\t   {id(binary:copy(Bytes), TrUserData), Rest2}\n\t\t\t end,\n    dfp_read_field_def_echo_status(RestF, 0, 0, F@_1,\n\t\t\t\t   NewFValue, TrUserData).\n\nskip_varint_echo_status(<<1:1, _:7, Rest/binary>>, Z1,\n\t\t\tZ2, F@_1, F@_2, TrUserData) ->\n    skip_varint_echo_status(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t    TrUserData);\nskip_varint_echo_status(<<0:1, _:7, Rest/binary>>, Z1,\n\t\t\tZ2, F@_1, F@_2, TrUserData) ->\n    dfp_read_field_def_echo_status(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t\t   TrUserData).\n\nskip_length_delimited_echo_status(<<1:1, X:7,\n\t\t\t\t    Rest/binary>>,\n\t\t\t\t  N, Acc, F@_1, F@_2, TrUserData)\n    when N < 57 ->\n    skip_length_delimited_echo_status(Rest, N + 7,\n\t\t\t\t      X bsl N + Acc, F@_1, F@_2, TrUserData);\nskip_length_delimited_echo_status(<<0:1, X:7,\n\t\t\t\t    Rest/binary>>,\n\t\t\t\t  N, Acc, F@_1, F@_2, TrUserData) ->\n    Length = X bsl N + Acc,\n    <<_:Length/binary, Rest2/binary>> = Rest,\n    dfp_read_field_def_echo_status(Rest2, 0, 0, F@_1, F@_2,\n\t\t\t\t   TrUserData).\n\nskip_group_echo_status(Bin, FNum, Z2, F@_1, F@_2,\n\t\t       TrUserData) ->\n    {_, Rest} = read_group(Bin, FNum),\n    dfp_read_field_def_echo_status(Rest, 0, Z2, F@_1, F@_2,\n\t\t\t\t   TrUserData).\n\nskip_32_echo_status(<<_:32, Rest/binary>>, Z1, Z2, F@_1,\n\t\t    F@_2, TrUserData) ->\n    dfp_read_field_def_echo_status(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t\t   TrUserData).\n\nskip_64_echo_status(<<_:64, Rest/binary>>, Z1, Z2, F@_1,\n\t\t    F@_2, TrUserData) ->\n    dfp_read_field_def_echo_status(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t\t   TrUserData).\n\ndecode_msg_simple_request(Bin, TrUserData) ->\n    dfp_read_field_def_simple_request(Bin, 0, 0,\n\t\t\t\t      id('COMPRESSABLE', TrUserData),\n\t\t\t\t      id(0, TrUserData),\n\t\t\t\t      id('$undef', TrUserData),\n\t\t\t\t      id(false, TrUserData),\n\t\t\t\t      id(false, TrUserData),\n\t\t\t\t      id('$undef', TrUserData),\n\t\t\t\t      id('$undef', TrUserData),\n\t\t\t\t      id('$undef', TrUserData), TrUserData).\n\ndfp_read_field_def_simple_request(<<8, Rest/binary>>,\n\t\t\t\t  Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t  F@_7, F@_8, TrUserData) ->\n    d_field_simple_request_response_type(Rest, Z1, Z2, F@_1,\n\t\t\t\t\t F@_2, F@_3, F@_4, F@_5, F@_6, F@_7,\n\t\t\t\t\t F@_8, TrUserData);\ndfp_read_field_def_simple_request(<<16, Rest/binary>>,\n\t\t\t\t  Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t  F@_7, F@_8, TrUserData) ->\n    d_field_simple_request_response_size(Rest, Z1, Z2, F@_1,\n\t\t\t\t\t F@_2, F@_3, F@_4, F@_5, F@_6, F@_7,\n\t\t\t\t\t F@_8, TrUserData);\ndfp_read_field_def_simple_request(<<26, Rest/binary>>,\n\t\t\t\t  Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t  F@_7, F@_8, TrUserData) ->\n    d_field_simple_request_payload(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t\t   F@_3, F@_4, F@_5, F@_6, F@_7, F@_8,\n\t\t\t\t   TrUserData);\ndfp_read_field_def_simple_request(<<32, Rest/binary>>,\n\t\t\t\t  Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t  F@_7, F@_8, TrUserData) ->\n    d_field_simple_request_fill_username(Rest, Z1, Z2, F@_1,\n\t\t\t\t\t F@_2, F@_3, F@_4, F@_5, F@_6, F@_7,\n\t\t\t\t\t F@_8, TrUserData);\ndfp_read_field_def_simple_request(<<40, Rest/binary>>,\n\t\t\t\t  Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t  F@_7, F@_8, TrUserData) ->\n    d_field_simple_request_fill_oauth_scope(Rest, Z1, Z2,\n\t\t\t\t\t    F@_1, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t\t    F@_7, F@_8, TrUserData);\ndfp_read_field_def_simple_request(<<50, Rest/binary>>,\n\t\t\t\t  Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t  F@_7, F@_8, TrUserData) ->\n    d_field_simple_request_response_compressed(Rest, Z1, Z2,\n\t\t\t\t\t       F@_1, F@_2, F@_3, F@_4, F@_5,\n\t\t\t\t\t       F@_6, F@_7, F@_8, TrUserData);\ndfp_read_field_def_simple_request(<<58, Rest/binary>>,\n\t\t\t\t  Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t  F@_7, F@_8, TrUserData) ->\n    d_field_simple_request_response_status(Rest, Z1, Z2,\n\t\t\t\t\t   F@_1, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t\t   F@_7, F@_8, TrUserData);\ndfp_read_field_def_simple_request(<<66, Rest/binary>>,\n\t\t\t\t  Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t  F@_7, F@_8, TrUserData) ->\n    d_field_simple_request_expect_compressed(Rest, Z1, Z2,\n\t\t\t\t\t     F@_1, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t\t     F@_7, F@_8, TrUserData);\ndfp_read_field_def_simple_request(<<>>, 0, 0, F@_1,\n\t\t\t\t  F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8,\n\t\t\t\t  _) ->\n    S1 = #{response_type => F@_1, response_size => F@_2,\n\t   fill_username => F@_4, fill_oauth_scope => F@_5},\n    S2 = if F@_3 == '$undef' -> S1;\n\t    true -> S1#{payload => F@_3}\n\t end,\n    S3 = if F@_6 == '$undef' -> S2;\n\t    true -> S2#{response_compressed => F@_6}\n\t end,\n    S4 = if F@_7 == '$undef' -> S3;\n\t    true -> S3#{response_status => F@_7}\n\t end,\n    if F@_8 == '$undef' -> S4;\n       true -> S4#{expect_compressed => F@_8}\n    end;\ndfp_read_field_def_simple_request(Other, Z1, Z2, F@_1,\n\t\t\t\t  F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8,\n\t\t\t\t  TrUserData) ->\n    dg_read_field_def_simple_request(Other, Z1, Z2, F@_1,\n\t\t\t\t     F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8,\n\t\t\t\t     TrUserData).\n\ndg_read_field_def_simple_request(<<1:1, X:7,\n\t\t\t\t   Rest/binary>>,\n\t\t\t\t N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t F@_7, F@_8, TrUserData)\n    when N < 32 - 7 ->\n    dg_read_field_def_simple_request(Rest, N + 7,\n\t\t\t\t     X bsl N + Acc, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t     F@_5, F@_6, F@_7, F@_8, TrUserData);\ndg_read_field_def_simple_request(<<0:1, X:7,\n\t\t\t\t   Rest/binary>>,\n\t\t\t\t N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t F@_7, F@_8, TrUserData) ->\n    Key = X bsl N + Acc,\n    case Key of\n      8 ->\n\t  d_field_simple_request_response_type(Rest, 0, 0, F@_1,\n\t\t\t\t\t       F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t\t       F@_7, F@_8, TrUserData);\n      16 ->\n\t  d_field_simple_request_response_size(Rest, 0, 0, F@_1,\n\t\t\t\t\t       F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t\t       F@_7, F@_8, TrUserData);\n      26 ->\n\t  d_field_simple_request_payload(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t\t F@_3, F@_4, F@_5, F@_6, F@_7, F@_8,\n\t\t\t\t\t TrUserData);\n      32 ->\n\t  d_field_simple_request_fill_username(Rest, 0, 0, F@_1,\n\t\t\t\t\t       F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t\t       F@_7, F@_8, TrUserData);\n      40 ->\n\t  d_field_simple_request_fill_oauth_scope(Rest, 0, 0,\n\t\t\t\t\t\t  F@_1, F@_2, F@_3, F@_4, F@_5,\n\t\t\t\t\t\t  F@_6, F@_7, F@_8, TrUserData);\n      50 ->\n\t  d_field_simple_request_response_compressed(Rest, 0, 0,\n\t\t\t\t\t\t     F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\t\t     F@_5, F@_6, F@_7, F@_8,\n\t\t\t\t\t\t     TrUserData);\n      58 ->\n\t  d_field_simple_request_response_status(Rest, 0, 0, F@_1,\n\t\t\t\t\t\t F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t\t\t F@_7, F@_8, TrUserData);\n      66 ->\n\t  d_field_simple_request_expect_compressed(Rest, 0, 0,\n\t\t\t\t\t\t   F@_1, F@_2, F@_3, F@_4, F@_5,\n\t\t\t\t\t\t   F@_6, F@_7, F@_8,\n\t\t\t\t\t\t   TrUserData);\n      _ ->\n\t  case Key band 7 of\n\t    0 ->\n\t\tskip_varint_simple_request(Rest, 0, 0, F@_1, F@_2, F@_3,\n\t\t\t\t\t   F@_4, F@_5, F@_6, F@_7, F@_8,\n\t\t\t\t\t   TrUserData);\n\t    1 ->\n\t\tskip_64_simple_request(Rest, 0, 0, F@_1, F@_2, F@_3,\n\t\t\t\t       F@_4, F@_5, F@_6, F@_7, F@_8,\n\t\t\t\t       TrUserData);\n\t    2 ->\n\t\tskip_length_delimited_simple_request(Rest, 0, 0, F@_1,\n\t\t\t\t\t\t     F@_2, F@_3, F@_4, F@_5,\n\t\t\t\t\t\t     F@_6, F@_7, F@_8,\n\t\t\t\t\t\t     TrUserData);\n\t    3 ->\n\t\tskip_group_simple_request(Rest, Key bsr 3, 0, F@_1,\n\t\t\t\t\t  F@_2, F@_3, F@_4, F@_5, F@_6, F@_7,\n\t\t\t\t\t  F@_8, TrUserData);\n\t    5 ->\n\t\tskip_32_simple_request(Rest, 0, 0, F@_1, F@_2, F@_3,\n\t\t\t\t       F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData)\n\t  end\n    end;\ndg_read_field_def_simple_request(<<>>, 0, 0, F@_1, F@_2,\n\t\t\t\t F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, _) ->\n    S1 = #{response_type => F@_1, response_size => F@_2,\n\t   fill_username => F@_4, fill_oauth_scope => F@_5},\n    S2 = if F@_3 == '$undef' -> S1;\n\t    true -> S1#{payload => F@_3}\n\t end,\n    S3 = if F@_6 == '$undef' -> S2;\n\t    true -> S2#{response_compressed => F@_6}\n\t end,\n    S4 = if F@_7 == '$undef' -> S3;\n\t    true -> S3#{response_status => F@_7}\n\t end,\n    if F@_8 == '$undef' -> S4;\n       true -> S4#{expect_compressed => F@_8}\n    end.\n\nd_field_simple_request_response_type(<<1:1, X:7,\n\t\t\t\t       Rest/binary>>,\n\t\t\t\t     N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t     F@_7, F@_8, TrUserData)\n    when N < 57 ->\n    d_field_simple_request_response_type(Rest, N + 7,\n\t\t\t\t\t X bsl N + Acc, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\t F@_5, F@_6, F@_7, F@_8, TrUserData);\nd_field_simple_request_response_type(<<0:1, X:7,\n\t\t\t\t       Rest/binary>>,\n\t\t\t\t     N, Acc, _, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t     F@_7, F@_8, TrUserData) ->\n    {NewFValue, RestF} =\n\t{id('d_enum_grpc.testing.PayloadType'(begin\n\t\t\t\t\t\t<<Res:32/signed-native>> = <<(X\n\t\t\t\t\t\t\t\t\t\tbsl\n\t\t\t\t\t\t\t\t\t\tN\n\t\t\t\t\t\t\t\t\t\t+\n\t\t\t\t\t\t\t\t\t\tAcc):32/unsigned-native>>,\n\t\t\t\t\t\tid(Res, TrUserData)\n\t\t\t\t\t      end),\n\t    TrUserData),\n\t Rest},\n    dfp_read_field_def_simple_request(RestF, 0, 0,\n\t\t\t\t      NewFValue, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t      F@_7, F@_8, TrUserData).\n\nd_field_simple_request_response_size(<<1:1, X:7,\n\t\t\t\t       Rest/binary>>,\n\t\t\t\t     N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t     F@_7, F@_8, TrUserData)\n    when N < 57 ->\n    d_field_simple_request_response_size(Rest, N + 7,\n\t\t\t\t\t X bsl N + Acc, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\t F@_5, F@_6, F@_7, F@_8, TrUserData);\nd_field_simple_request_response_size(<<0:1, X:7,\n\t\t\t\t       Rest/binary>>,\n\t\t\t\t     N, Acc, F@_1, _, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t     F@_7, F@_8, TrUserData) ->\n    {NewFValue, RestF} = {begin\n\t\t\t    <<Res:32/signed-native>> = <<(X bsl N +\n\t\t\t\t\t\t\t    Acc):32/unsigned-native>>,\n\t\t\t    id(Res, TrUserData)\n\t\t\t  end,\n\t\t\t  Rest},\n    dfp_read_field_def_simple_request(RestF, 0, 0, F@_1,\n\t\t\t\t      NewFValue, F@_3, F@_4, F@_5, F@_6, F@_7,\n\t\t\t\t      F@_8, TrUserData).\n\nd_field_simple_request_payload(<<1:1, X:7,\n\t\t\t\t Rest/binary>>,\n\t\t\t       N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7,\n\t\t\t       F@_8, TrUserData)\n    when N < 57 ->\n    d_field_simple_request_payload(Rest, N + 7,\n\t\t\t\t   X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, F@_5,\n\t\t\t\t   F@_6, F@_7, F@_8, TrUserData);\nd_field_simple_request_payload(<<0:1, X:7,\n\t\t\t\t Rest/binary>>,\n\t\t\t       N, Acc, F@_1, F@_2, Prev, F@_4, F@_5, F@_6, F@_7,\n\t\t\t       F@_8, TrUserData) ->\n    {NewFValue, RestF} = begin\n\t\t\t   Len = X bsl N + Acc,\n\t\t\t   <<Bs:Len/binary, Rest2/binary>> = Rest,\n\t\t\t   {id(decode_msg_payload(Bs, TrUserData), TrUserData),\n\t\t\t    Rest2}\n\t\t\t end,\n    dfp_read_field_def_simple_request(RestF, 0, 0, F@_1,\n\t\t\t\t      F@_2,\n\t\t\t\t      if Prev == '$undef' -> NewFValue;\n\t\t\t\t\t true ->\n\t\t\t\t\t     merge_msg_payload(Prev, NewFValue,\n\t\t\t\t\t\t\t       TrUserData)\n\t\t\t\t      end,\n\t\t\t\t      F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData).\n\nd_field_simple_request_fill_username(<<1:1, X:7,\n\t\t\t\t       Rest/binary>>,\n\t\t\t\t     N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t     F@_7, F@_8, TrUserData)\n    when N < 57 ->\n    d_field_simple_request_fill_username(Rest, N + 7,\n\t\t\t\t\t X bsl N + Acc, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\t F@_5, F@_6, F@_7, F@_8, TrUserData);\nd_field_simple_request_fill_username(<<0:1, X:7,\n\t\t\t\t       Rest/binary>>,\n\t\t\t\t     N, Acc, F@_1, F@_2, F@_3, _, F@_5, F@_6,\n\t\t\t\t     F@_7, F@_8, TrUserData) ->\n    {NewFValue, RestF} = {id(X bsl N + Acc =/= 0,\n\t\t\t     TrUserData),\n\t\t\t  Rest},\n    dfp_read_field_def_simple_request(RestF, 0, 0, F@_1,\n\t\t\t\t      F@_2, F@_3, NewFValue, F@_5, F@_6, F@_7,\n\t\t\t\t      F@_8, TrUserData).\n\nd_field_simple_request_fill_oauth_scope(<<1:1, X:7,\n\t\t\t\t\t  Rest/binary>>,\n\t\t\t\t\tN, Acc, F@_1, F@_2, F@_3, F@_4, F@_5,\n\t\t\t\t\tF@_6, F@_7, F@_8, TrUserData)\n    when N < 57 ->\n    d_field_simple_request_fill_oauth_scope(Rest, N + 7,\n\t\t\t\t\t    X bsl N + Acc, F@_1, F@_2, F@_3,\n\t\t\t\t\t    F@_4, F@_5, F@_6, F@_7, F@_8,\n\t\t\t\t\t    TrUserData);\nd_field_simple_request_fill_oauth_scope(<<0:1, X:7,\n\t\t\t\t\t  Rest/binary>>,\n\t\t\t\t\tN, Acc, F@_1, F@_2, F@_3, F@_4, _, F@_6,\n\t\t\t\t\tF@_7, F@_8, TrUserData) ->\n    {NewFValue, RestF} = {id(X bsl N + Acc =/= 0,\n\t\t\t     TrUserData),\n\t\t\t  Rest},\n    dfp_read_field_def_simple_request(RestF, 0, 0, F@_1,\n\t\t\t\t      F@_2, F@_3, F@_4, NewFValue, F@_6, F@_7,\n\t\t\t\t      F@_8, TrUserData).\n\nd_field_simple_request_response_compressed(<<1:1, X:7,\n\t\t\t\t\t     Rest/binary>>,\n\t\t\t\t\t   N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5,\n\t\t\t\t\t   F@_6, F@_7, F@_8, TrUserData)\n    when N < 57 ->\n    d_field_simple_request_response_compressed(Rest, N + 7,\n\t\t\t\t\t       X bsl N + Acc, F@_1, F@_2, F@_3,\n\t\t\t\t\t       F@_4, F@_5, F@_6, F@_7, F@_8,\n\t\t\t\t\t       TrUserData);\nd_field_simple_request_response_compressed(<<0:1, X:7,\n\t\t\t\t\t     Rest/binary>>,\n\t\t\t\t\t   N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5,\n\t\t\t\t\t   Prev, F@_7, F@_8, TrUserData) ->\n    {NewFValue, RestF} = begin\n\t\t\t   Len = X bsl N + Acc,\n\t\t\t   <<Bs:Len/binary, Rest2/binary>> = Rest,\n\t\t\t   {id(decode_msg_bool_value(Bs, TrUserData),\n\t\t\t       TrUserData),\n\t\t\t    Rest2}\n\t\t\t end,\n    dfp_read_field_def_simple_request(RestF, 0, 0, F@_1,\n\t\t\t\t      F@_2, F@_3, F@_4, F@_5,\n\t\t\t\t      if Prev == '$undef' -> NewFValue;\n\t\t\t\t\t true ->\n\t\t\t\t\t     merge_msg_bool_value(Prev,\n\t\t\t\t\t\t\t\t  NewFValue,\n\t\t\t\t\t\t\t\t  TrUserData)\n\t\t\t\t      end,\n\t\t\t\t      F@_7, F@_8, TrUserData).\n\nd_field_simple_request_response_status(<<1:1, X:7,\n\t\t\t\t\t Rest/binary>>,\n\t\t\t\t       N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5,\n\t\t\t\t       F@_6, F@_7, F@_8, TrUserData)\n    when N < 57 ->\n    d_field_simple_request_response_status(Rest, N + 7,\n\t\t\t\t\t   X bsl N + Acc, F@_1, F@_2, F@_3,\n\t\t\t\t\t   F@_4, F@_5, F@_6, F@_7, F@_8,\n\t\t\t\t\t   TrUserData);\nd_field_simple_request_response_status(<<0:1, X:7,\n\t\t\t\t\t Rest/binary>>,\n\t\t\t\t       N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5,\n\t\t\t\t       F@_6, Prev, F@_8, TrUserData) ->\n    {NewFValue, RestF} = begin\n\t\t\t   Len = X bsl N + Acc,\n\t\t\t   <<Bs:Len/binary, Rest2/binary>> = Rest,\n\t\t\t   {id(decode_msg_echo_status(Bs, TrUserData),\n\t\t\t       TrUserData),\n\t\t\t    Rest2}\n\t\t\t end,\n    dfp_read_field_def_simple_request(RestF, 0, 0, F@_1,\n\t\t\t\t      F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t      if Prev == '$undef' -> NewFValue;\n\t\t\t\t\t true ->\n\t\t\t\t\t     merge_msg_echo_status(Prev,\n\t\t\t\t\t\t\t\t   NewFValue,\n\t\t\t\t\t\t\t\t   TrUserData)\n\t\t\t\t      end,\n\t\t\t\t      F@_8, TrUserData).\n\nd_field_simple_request_expect_compressed(<<1:1, X:7,\n\t\t\t\t\t   Rest/binary>>,\n\t\t\t\t\t N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5,\n\t\t\t\t\t F@_6, F@_7, F@_8, TrUserData)\n    when N < 57 ->\n    d_field_simple_request_expect_compressed(Rest, N + 7,\n\t\t\t\t\t     X bsl N + Acc, F@_1, F@_2, F@_3,\n\t\t\t\t\t     F@_4, F@_5, F@_6, F@_7, F@_8,\n\t\t\t\t\t     TrUserData);\nd_field_simple_request_expect_compressed(<<0:1, X:7,\n\t\t\t\t\t   Rest/binary>>,\n\t\t\t\t\t N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5,\n\t\t\t\t\t F@_6, F@_7, Prev, TrUserData) ->\n    {NewFValue, RestF} = begin\n\t\t\t   Len = X bsl N + Acc,\n\t\t\t   <<Bs:Len/binary, Rest2/binary>> = Rest,\n\t\t\t   {id(decode_msg_bool_value(Bs, TrUserData),\n\t\t\t       TrUserData),\n\t\t\t    Rest2}\n\t\t\t end,\n    dfp_read_field_def_simple_request(RestF, 0, 0, F@_1,\n\t\t\t\t      F@_2, F@_3, F@_4, F@_5, F@_6, F@_7,\n\t\t\t\t      if Prev == '$undef' -> NewFValue;\n\t\t\t\t\t true ->\n\t\t\t\t\t     merge_msg_bool_value(Prev,\n\t\t\t\t\t\t\t\t  NewFValue,\n\t\t\t\t\t\t\t\t  TrUserData)\n\t\t\t\t      end,\n\t\t\t\t      TrUserData).\n\nskip_varint_simple_request(<<1:1, _:7, Rest/binary>>,\n\t\t\t   Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7,\n\t\t\t   F@_8, TrUserData) ->\n    skip_varint_simple_request(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t       F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData);\nskip_varint_simple_request(<<0:1, _:7, Rest/binary>>,\n\t\t\t   Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7,\n\t\t\t   F@_8, TrUserData) ->\n    dfp_read_field_def_simple_request(Rest, Z1, Z2, F@_1,\n\t\t\t\t      F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8,\n\t\t\t\t      TrUserData).\n\nskip_length_delimited_simple_request(<<1:1, X:7,\n\t\t\t\t       Rest/binary>>,\n\t\t\t\t     N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t     F@_7, F@_8, TrUserData)\n    when N < 57 ->\n    skip_length_delimited_simple_request(Rest, N + 7,\n\t\t\t\t\t X bsl N + Acc, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\t F@_5, F@_6, F@_7, F@_8, TrUserData);\nskip_length_delimited_simple_request(<<0:1, X:7,\n\t\t\t\t       Rest/binary>>,\n\t\t\t\t     N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t     F@_7, F@_8, TrUserData) ->\n    Length = X bsl N + Acc,\n    <<_:Length/binary, Rest2/binary>> = Rest,\n    dfp_read_field_def_simple_request(Rest2, 0, 0, F@_1,\n\t\t\t\t      F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8,\n\t\t\t\t      TrUserData).\n\nskip_group_simple_request(Bin, FNum, Z2, F@_1, F@_2,\n\t\t\t  F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) ->\n    {_, Rest} = read_group(Bin, FNum),\n    dfp_read_field_def_simple_request(Rest, 0, Z2, F@_1,\n\t\t\t\t      F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8,\n\t\t\t\t      TrUserData).\n\nskip_32_simple_request(<<_:32, Rest/binary>>, Z1, Z2,\n\t\t       F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8,\n\t\t       TrUserData) ->\n    dfp_read_field_def_simple_request(Rest, Z1, Z2, F@_1,\n\t\t\t\t      F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8,\n\t\t\t\t      TrUserData).\n\nskip_64_simple_request(<<_:64, Rest/binary>>, Z1, Z2,\n\t\t       F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8,\n\t\t       TrUserData) ->\n    dfp_read_field_def_simple_request(Rest, Z1, Z2, F@_1,\n\t\t\t\t      F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8,\n\t\t\t\t      TrUserData).\n\ndecode_msg_simple_response(Bin, TrUserData) ->\n    dfp_read_field_def_simple_response(Bin, 0, 0,\n\t\t\t\t       id('$undef', TrUserData),\n\t\t\t\t       id(<<>>, TrUserData),\n\t\t\t\t       id(<<>>, TrUserData), TrUserData).\n\ndfp_read_field_def_simple_response(<<10, Rest/binary>>,\n\t\t\t\t   Z1, Z2, F@_1, F@_2, F@_3, TrUserData) ->\n    d_field_simple_response_payload(Rest, Z1, Z2, F@_1,\n\t\t\t\t    F@_2, F@_3, TrUserData);\ndfp_read_field_def_simple_response(<<18, Rest/binary>>,\n\t\t\t\t   Z1, Z2, F@_1, F@_2, F@_3, TrUserData) ->\n    d_field_simple_response_username(Rest, Z1, Z2, F@_1,\n\t\t\t\t     F@_2, F@_3, TrUserData);\ndfp_read_field_def_simple_response(<<26, Rest/binary>>,\n\t\t\t\t   Z1, Z2, F@_1, F@_2, F@_3, TrUserData) ->\n    d_field_simple_response_oauth_scope(Rest, Z1, Z2, F@_1,\n\t\t\t\t\tF@_2, F@_3, TrUserData);\ndfp_read_field_def_simple_response(<<>>, 0, 0, F@_1,\n\t\t\t\t   F@_2, F@_3, _) ->\n    S1 = #{username => F@_2, oauth_scope => F@_3},\n    if F@_1 == '$undef' -> S1;\n       true -> S1#{payload => F@_1}\n    end;\ndfp_read_field_def_simple_response(Other, Z1, Z2, F@_1,\n\t\t\t\t   F@_2, F@_3, TrUserData) ->\n    dg_read_field_def_simple_response(Other, Z1, Z2, F@_1,\n\t\t\t\t      F@_2, F@_3, TrUserData).\n\ndg_read_field_def_simple_response(<<1:1, X:7,\n\t\t\t\t    Rest/binary>>,\n\t\t\t\t  N, Acc, F@_1, F@_2, F@_3, TrUserData)\n    when N < 32 - 7 ->\n    dg_read_field_def_simple_response(Rest, N + 7,\n\t\t\t\t      X bsl N + Acc, F@_1, F@_2, F@_3,\n\t\t\t\t      TrUserData);\ndg_read_field_def_simple_response(<<0:1, X:7,\n\t\t\t\t    Rest/binary>>,\n\t\t\t\t  N, Acc, F@_1, F@_2, F@_3, TrUserData) ->\n    Key = X bsl N + Acc,\n    case Key of\n      10 ->\n\t  d_field_simple_response_payload(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t\t  F@_3, TrUserData);\n      18 ->\n\t  d_field_simple_response_username(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t\t   F@_3, TrUserData);\n      26 ->\n\t  d_field_simple_response_oauth_scope(Rest, 0, 0, F@_1,\n\t\t\t\t\t      F@_2, F@_3, TrUserData);\n      _ ->\n\t  case Key band 7 of\n\t    0 ->\n\t\tskip_varint_simple_response(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t\t    F@_3, TrUserData);\n\t    1 ->\n\t\tskip_64_simple_response(Rest, 0, 0, F@_1, F@_2, F@_3,\n\t\t\t\t\tTrUserData);\n\t    2 ->\n\t\tskip_length_delimited_simple_response(Rest, 0, 0, F@_1,\n\t\t\t\t\t\t      F@_2, F@_3, TrUserData);\n\t    3 ->\n\t\tskip_group_simple_response(Rest, Key bsr 3, 0, F@_1,\n\t\t\t\t\t   F@_2, F@_3, TrUserData);\n\t    5 ->\n\t\tskip_32_simple_response(Rest, 0, 0, F@_1, F@_2, F@_3,\n\t\t\t\t\tTrUserData)\n\t  end\n    end;\ndg_read_field_def_simple_response(<<>>, 0, 0, F@_1,\n\t\t\t\t  F@_2, F@_3, _) ->\n    S1 = #{username => F@_2, oauth_scope => F@_3},\n    if F@_1 == '$undef' -> S1;\n       true -> S1#{payload => F@_1}\n    end.\n\nd_field_simple_response_payload(<<1:1, X:7,\n\t\t\t\t  Rest/binary>>,\n\t\t\t\tN, Acc, F@_1, F@_2, F@_3, TrUserData)\n    when N < 57 ->\n    d_field_simple_response_payload(Rest, N + 7,\n\t\t\t\t    X bsl N + Acc, F@_1, F@_2, F@_3,\n\t\t\t\t    TrUserData);\nd_field_simple_response_payload(<<0:1, X:7,\n\t\t\t\t  Rest/binary>>,\n\t\t\t\tN, Acc, Prev, F@_2, F@_3, TrUserData) ->\n    {NewFValue, RestF} = begin\n\t\t\t   Len = X bsl N + Acc,\n\t\t\t   <<Bs:Len/binary, Rest2/binary>> = Rest,\n\t\t\t   {id(decode_msg_payload(Bs, TrUserData), TrUserData),\n\t\t\t    Rest2}\n\t\t\t end,\n    dfp_read_field_def_simple_response(RestF, 0, 0,\n\t\t\t\t       if Prev == '$undef' -> NewFValue;\n\t\t\t\t\t  true ->\n\t\t\t\t\t      merge_msg_payload(Prev, NewFValue,\n\t\t\t\t\t\t\t\tTrUserData)\n\t\t\t\t       end,\n\t\t\t\t       F@_2, F@_3, TrUserData).\n\nd_field_simple_response_username(<<1:1, X:7,\n\t\t\t\t   Rest/binary>>,\n\t\t\t\t N, Acc, F@_1, F@_2, F@_3, TrUserData)\n    when N < 57 ->\n    d_field_simple_response_username(Rest, N + 7,\n\t\t\t\t     X bsl N + Acc, F@_1, F@_2, F@_3,\n\t\t\t\t     TrUserData);\nd_field_simple_response_username(<<0:1, X:7,\n\t\t\t\t   Rest/binary>>,\n\t\t\t\t N, Acc, F@_1, _, F@_3, TrUserData) ->\n    {NewFValue, RestF} = begin\n\t\t\t   Len = X bsl N + Acc,\n\t\t\t   <<Bytes:Len/binary, Rest2/binary>> = Rest,\n\t\t\t   {id(binary:copy(Bytes), TrUserData), Rest2}\n\t\t\t end,\n    dfp_read_field_def_simple_response(RestF, 0, 0, F@_1,\n\t\t\t\t       NewFValue, F@_3, TrUserData).\n\nd_field_simple_response_oauth_scope(<<1:1, X:7,\n\t\t\t\t      Rest/binary>>,\n\t\t\t\t    N, Acc, F@_1, F@_2, F@_3, TrUserData)\n    when N < 57 ->\n    d_field_simple_response_oauth_scope(Rest, N + 7,\n\t\t\t\t\tX bsl N + Acc, F@_1, F@_2, F@_3,\n\t\t\t\t\tTrUserData);\nd_field_simple_response_oauth_scope(<<0:1, X:7,\n\t\t\t\t      Rest/binary>>,\n\t\t\t\t    N, Acc, F@_1, F@_2, _, TrUserData) ->\n    {NewFValue, RestF} = begin\n\t\t\t   Len = X bsl N + Acc,\n\t\t\t   <<Bytes:Len/binary, Rest2/binary>> = Rest,\n\t\t\t   {id(binary:copy(Bytes), TrUserData), Rest2}\n\t\t\t end,\n    dfp_read_field_def_simple_response(RestF, 0, 0, F@_1,\n\t\t\t\t       F@_2, NewFValue, TrUserData).\n\nskip_varint_simple_response(<<1:1, _:7, Rest/binary>>,\n\t\t\t    Z1, Z2, F@_1, F@_2, F@_3, TrUserData) ->\n    skip_varint_simple_response(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t\tF@_3, TrUserData);\nskip_varint_simple_response(<<0:1, _:7, Rest/binary>>,\n\t\t\t    Z1, Z2, F@_1, F@_2, F@_3, TrUserData) ->\n    dfp_read_field_def_simple_response(Rest, Z1, Z2, F@_1,\n\t\t\t\t       F@_2, F@_3, TrUserData).\n\nskip_length_delimited_simple_response(<<1:1, X:7,\n\t\t\t\t\tRest/binary>>,\n\t\t\t\t      N, Acc, F@_1, F@_2, F@_3, TrUserData)\n    when N < 57 ->\n    skip_length_delimited_simple_response(Rest, N + 7,\n\t\t\t\t\t  X bsl N + Acc, F@_1, F@_2, F@_3,\n\t\t\t\t\t  TrUserData);\nskip_length_delimited_simple_response(<<0:1, X:7,\n\t\t\t\t\tRest/binary>>,\n\t\t\t\t      N, Acc, F@_1, F@_2, F@_3, TrUserData) ->\n    Length = X bsl N + Acc,\n    <<_:Length/binary, Rest2/binary>> = Rest,\n    dfp_read_field_def_simple_response(Rest2, 0, 0, F@_1,\n\t\t\t\t       F@_2, F@_3, TrUserData).\n\nskip_group_simple_response(Bin, FNum, Z2, F@_1, F@_2,\n\t\t\t   F@_3, TrUserData) ->\n    {_, Rest} = read_group(Bin, FNum),\n    dfp_read_field_def_simple_response(Rest, 0, Z2, F@_1,\n\t\t\t\t       F@_2, F@_3, TrUserData).\n\nskip_32_simple_response(<<_:32, Rest/binary>>, Z1, Z2,\n\t\t\tF@_1, F@_2, F@_3, TrUserData) ->\n    dfp_read_field_def_simple_response(Rest, Z1, Z2, F@_1,\n\t\t\t\t       F@_2, F@_3, TrUserData).\n\nskip_64_simple_response(<<_:64, Rest/binary>>, Z1, Z2,\n\t\t\tF@_1, F@_2, F@_3, TrUserData) ->\n    dfp_read_field_def_simple_response(Rest, Z1, Z2, F@_1,\n\t\t\t\t       F@_2, F@_3, TrUserData).\n\ndecode_msg_streaming_input_call_request(Bin,\n\t\t\t\t\tTrUserData) ->\n    dfp_read_field_def_streaming_input_call_request(Bin, 0,\n\t\t\t\t\t\t    0, id('$undef', TrUserData),\n\t\t\t\t\t\t    id('$undef', TrUserData),\n\t\t\t\t\t\t    TrUserData).\n\ndfp_read_field_def_streaming_input_call_request(<<10,\n\t\t\t\t\t\t  Rest/binary>>,\n\t\t\t\t\t\tZ1, Z2, F@_1, F@_2,\n\t\t\t\t\t\tTrUserData) ->\n    d_field_streaming_input_call_request_payload(Rest, Z1,\n\t\t\t\t\t\t Z2, F@_1, F@_2, TrUserData);\ndfp_read_field_def_streaming_input_call_request(<<18,\n\t\t\t\t\t\t  Rest/binary>>,\n\t\t\t\t\t\tZ1, Z2, F@_1, F@_2,\n\t\t\t\t\t\tTrUserData) ->\n    d_field_streaming_input_call_request_expect_compressed(Rest,\n\t\t\t\t\t\t\t   Z1, Z2, F@_1, F@_2,\n\t\t\t\t\t\t\t   TrUserData);\ndfp_read_field_def_streaming_input_call_request(<<>>, 0,\n\t\t\t\t\t\t0, F@_1, F@_2, _) ->\n    S1 = #{},\n    S2 = if F@_1 == '$undef' -> S1;\n\t    true -> S1#{payload => F@_1}\n\t end,\n    if F@_2 == '$undef' -> S2;\n       true -> S2#{expect_compressed => F@_2}\n    end;\ndfp_read_field_def_streaming_input_call_request(Other,\n\t\t\t\t\t\tZ1, Z2, F@_1, F@_2,\n\t\t\t\t\t\tTrUserData) ->\n    dg_read_field_def_streaming_input_call_request(Other,\n\t\t\t\t\t\t   Z1, Z2, F@_1, F@_2,\n\t\t\t\t\t\t   TrUserData).\n\ndg_read_field_def_streaming_input_call_request(<<1:1,\n\t\t\t\t\t\t X:7, Rest/binary>>,\n\t\t\t\t\t       N, Acc, F@_1, F@_2, TrUserData)\n    when N < 32 - 7 ->\n    dg_read_field_def_streaming_input_call_request(Rest,\n\t\t\t\t\t\t   N + 7, X bsl N + Acc, F@_1,\n\t\t\t\t\t\t   F@_2, TrUserData);\ndg_read_field_def_streaming_input_call_request(<<0:1,\n\t\t\t\t\t\t X:7, Rest/binary>>,\n\t\t\t\t\t       N, Acc, F@_1, F@_2,\n\t\t\t\t\t       TrUserData) ->\n    Key = X bsl N + Acc,\n    case Key of\n      10 ->\n\t  d_field_streaming_input_call_request_payload(Rest, 0, 0,\n\t\t\t\t\t\t       F@_1, F@_2, TrUserData);\n      18 ->\n\t  d_field_streaming_input_call_request_expect_compressed(Rest,\n\t\t\t\t\t\t\t\t 0, 0, F@_1,\n\t\t\t\t\t\t\t\t F@_2,\n\t\t\t\t\t\t\t\t TrUserData);\n      _ ->\n\t  case Key band 7 of\n\t    0 ->\n\t\tskip_varint_streaming_input_call_request(Rest, 0, 0,\n\t\t\t\t\t\t\t F@_1, F@_2,\n\t\t\t\t\t\t\t TrUserData);\n\t    1 ->\n\t\tskip_64_streaming_input_call_request(Rest, 0, 0, F@_1,\n\t\t\t\t\t\t     F@_2, TrUserData);\n\t    2 ->\n\t\tskip_length_delimited_streaming_input_call_request(Rest,\n\t\t\t\t\t\t\t\t   0, 0, F@_1,\n\t\t\t\t\t\t\t\t   F@_2,\n\t\t\t\t\t\t\t\t   TrUserData);\n\t    3 ->\n\t\tskip_group_streaming_input_call_request(Rest, Key bsr 3,\n\t\t\t\t\t\t\t0, F@_1, F@_2,\n\t\t\t\t\t\t\tTrUserData);\n\t    5 ->\n\t\tskip_32_streaming_input_call_request(Rest, 0, 0, F@_1,\n\t\t\t\t\t\t     F@_2, TrUserData)\n\t  end\n    end;\ndg_read_field_def_streaming_input_call_request(<<>>, 0,\n\t\t\t\t\t       0, F@_1, F@_2, _) ->\n    S1 = #{},\n    S2 = if F@_1 == '$undef' -> S1;\n\t    true -> S1#{payload => F@_1}\n\t end,\n    if F@_2 == '$undef' -> S2;\n       true -> S2#{expect_compressed => F@_2}\n    end.\n\nd_field_streaming_input_call_request_payload(<<1:1, X:7,\n\t\t\t\t\t       Rest/binary>>,\n\t\t\t\t\t     N, Acc, F@_1, F@_2, TrUserData)\n    when N < 57 ->\n    d_field_streaming_input_call_request_payload(Rest,\n\t\t\t\t\t\t N + 7, X bsl N + Acc, F@_1,\n\t\t\t\t\t\t F@_2, TrUserData);\nd_field_streaming_input_call_request_payload(<<0:1, X:7,\n\t\t\t\t\t       Rest/binary>>,\n\t\t\t\t\t     N, Acc, Prev, F@_2, TrUserData) ->\n    {NewFValue, RestF} = begin\n\t\t\t   Len = X bsl N + Acc,\n\t\t\t   <<Bs:Len/binary, Rest2/binary>> = Rest,\n\t\t\t   {id(decode_msg_payload(Bs, TrUserData), TrUserData),\n\t\t\t    Rest2}\n\t\t\t end,\n    dfp_read_field_def_streaming_input_call_request(RestF,\n\t\t\t\t\t\t    0, 0,\n\t\t\t\t\t\t    if Prev == '$undef' ->\n\t\t\t\t\t\t\t   NewFValue;\n\t\t\t\t\t\t       true ->\n\t\t\t\t\t\t\t   merge_msg_payload(Prev,\n\t\t\t\t\t\t\t\t\t     NewFValue,\n\t\t\t\t\t\t\t\t\t     TrUserData)\n\t\t\t\t\t\t    end,\n\t\t\t\t\t\t    F@_2, TrUserData).\n\nd_field_streaming_input_call_request_expect_compressed(<<1:1,\n\t\t\t\t\t\t\t X:7, Rest/binary>>,\n\t\t\t\t\t\t       N, Acc, F@_1, F@_2,\n\t\t\t\t\t\t       TrUserData)\n    when N < 57 ->\n    d_field_streaming_input_call_request_expect_compressed(Rest,\n\t\t\t\t\t\t\t   N + 7, X bsl N + Acc,\n\t\t\t\t\t\t\t   F@_1, F@_2,\n\t\t\t\t\t\t\t   TrUserData);\nd_field_streaming_input_call_request_expect_compressed(<<0:1,\n\t\t\t\t\t\t\t X:7, Rest/binary>>,\n\t\t\t\t\t\t       N, Acc, F@_1, Prev,\n\t\t\t\t\t\t       TrUserData) ->\n    {NewFValue, RestF} = begin\n\t\t\t   Len = X bsl N + Acc,\n\t\t\t   <<Bs:Len/binary, Rest2/binary>> = Rest,\n\t\t\t   {id(decode_msg_bool_value(Bs, TrUserData),\n\t\t\t       TrUserData),\n\t\t\t    Rest2}\n\t\t\t end,\n    dfp_read_field_def_streaming_input_call_request(RestF,\n\t\t\t\t\t\t    0, 0, F@_1,\n\t\t\t\t\t\t    if Prev == '$undef' ->\n\t\t\t\t\t\t\t   NewFValue;\n\t\t\t\t\t\t       true ->\n\t\t\t\t\t\t\t   merge_msg_bool_value(Prev,\n\t\t\t\t\t\t\t\t\t\tNewFValue,\n\t\t\t\t\t\t\t\t\t\tTrUserData)\n\t\t\t\t\t\t    end,\n\t\t\t\t\t\t    TrUserData).\n\nskip_varint_streaming_input_call_request(<<1:1, _:7,\n\t\t\t\t\t   Rest/binary>>,\n\t\t\t\t\t Z1, Z2, F@_1, F@_2, TrUserData) ->\n    skip_varint_streaming_input_call_request(Rest, Z1, Z2,\n\t\t\t\t\t     F@_1, F@_2, TrUserData);\nskip_varint_streaming_input_call_request(<<0:1, _:7,\n\t\t\t\t\t   Rest/binary>>,\n\t\t\t\t\t Z1, Z2, F@_1, F@_2, TrUserData) ->\n    dfp_read_field_def_streaming_input_call_request(Rest,\n\t\t\t\t\t\t    Z1, Z2, F@_1, F@_2,\n\t\t\t\t\t\t    TrUserData).\n\nskip_length_delimited_streaming_input_call_request(<<1:1,\n\t\t\t\t\t\t     X:7, Rest/binary>>,\n\t\t\t\t\t\t   N, Acc, F@_1, F@_2,\n\t\t\t\t\t\t   TrUserData)\n    when N < 57 ->\n    skip_length_delimited_streaming_input_call_request(Rest,\n\t\t\t\t\t\t       N + 7, X bsl N + Acc,\n\t\t\t\t\t\t       F@_1, F@_2, TrUserData);\nskip_length_delimited_streaming_input_call_request(<<0:1,\n\t\t\t\t\t\t     X:7, Rest/binary>>,\n\t\t\t\t\t\t   N, Acc, F@_1, F@_2,\n\t\t\t\t\t\t   TrUserData) ->\n    Length = X bsl N + Acc,\n    <<_:Length/binary, Rest2/binary>> = Rest,\n    dfp_read_field_def_streaming_input_call_request(Rest2,\n\t\t\t\t\t\t    0, 0, F@_1, F@_2,\n\t\t\t\t\t\t    TrUserData).\n\nskip_group_streaming_input_call_request(Bin, FNum, Z2,\n\t\t\t\t\tF@_1, F@_2, TrUserData) ->\n    {_, Rest} = read_group(Bin, FNum),\n    dfp_read_field_def_streaming_input_call_request(Rest, 0,\n\t\t\t\t\t\t    Z2, F@_1, F@_2, TrUserData).\n\nskip_32_streaming_input_call_request(<<_:32,\n\t\t\t\t       Rest/binary>>,\n\t\t\t\t     Z1, Z2, F@_1, F@_2, TrUserData) ->\n    dfp_read_field_def_streaming_input_call_request(Rest,\n\t\t\t\t\t\t    Z1, Z2, F@_1, F@_2,\n\t\t\t\t\t\t    TrUserData).\n\nskip_64_streaming_input_call_request(<<_:64,\n\t\t\t\t       Rest/binary>>,\n\t\t\t\t     Z1, Z2, F@_1, F@_2, TrUserData) ->\n    dfp_read_field_def_streaming_input_call_request(Rest,\n\t\t\t\t\t\t    Z1, Z2, F@_1, F@_2,\n\t\t\t\t\t\t    TrUserData).\n\ndecode_msg_streaming_input_call_response(Bin,\n\t\t\t\t\t TrUserData) ->\n    dfp_read_field_def_streaming_input_call_response(Bin, 0,\n\t\t\t\t\t\t     0, id(0, TrUserData),\n\t\t\t\t\t\t     TrUserData).\n\ndfp_read_field_def_streaming_input_call_response(<<8,\n\t\t\t\t\t\t   Rest/binary>>,\n\t\t\t\t\t\t Z1, Z2, F@_1, TrUserData) ->\n    d_field_streaming_input_call_response_aggregated_payload_size(Rest,\n\t\t\t\t\t\t\t\t  Z1, Z2, F@_1,\n\t\t\t\t\t\t\t\t  TrUserData);\ndfp_read_field_def_streaming_input_call_response(<<>>,\n\t\t\t\t\t\t 0, 0, F@_1, _) ->\n    #{aggregated_payload_size => F@_1};\ndfp_read_field_def_streaming_input_call_response(Other,\n\t\t\t\t\t\t Z1, Z2, F@_1, TrUserData) ->\n    dg_read_field_def_streaming_input_call_response(Other,\n\t\t\t\t\t\t    Z1, Z2, F@_1, TrUserData).\n\ndg_read_field_def_streaming_input_call_response(<<1:1,\n\t\t\t\t\t\t  X:7, Rest/binary>>,\n\t\t\t\t\t\tN, Acc, F@_1, TrUserData)\n    when N < 32 - 7 ->\n    dg_read_field_def_streaming_input_call_response(Rest,\n\t\t\t\t\t\t    N + 7, X bsl N + Acc, F@_1,\n\t\t\t\t\t\t    TrUserData);\ndg_read_field_def_streaming_input_call_response(<<0:1,\n\t\t\t\t\t\t  X:7, Rest/binary>>,\n\t\t\t\t\t\tN, Acc, F@_1, TrUserData) ->\n    Key = X bsl N + Acc,\n    case Key of\n      8 ->\n\t  d_field_streaming_input_call_response_aggregated_payload_size(Rest,\n\t\t\t\t\t\t\t\t\t0, 0,\n\t\t\t\t\t\t\t\t\tF@_1,\n\t\t\t\t\t\t\t\t\tTrUserData);\n      _ ->\n\t  case Key band 7 of\n\t    0 ->\n\t\tskip_varint_streaming_input_call_response(Rest, 0, 0,\n\t\t\t\t\t\t\t  F@_1, TrUserData);\n\t    1 ->\n\t\tskip_64_streaming_input_call_response(Rest, 0, 0, F@_1,\n\t\t\t\t\t\t      TrUserData);\n\t    2 ->\n\t\tskip_length_delimited_streaming_input_call_response(Rest,\n\t\t\t\t\t\t\t\t    0, 0, F@_1,\n\t\t\t\t\t\t\t\t    TrUserData);\n\t    3 ->\n\t\tskip_group_streaming_input_call_response(Rest,\n\t\t\t\t\t\t\t Key bsr 3, 0, F@_1,\n\t\t\t\t\t\t\t TrUserData);\n\t    5 ->\n\t\tskip_32_streaming_input_call_response(Rest, 0, 0, F@_1,\n\t\t\t\t\t\t      TrUserData)\n\t  end\n    end;\ndg_read_field_def_streaming_input_call_response(<<>>, 0,\n\t\t\t\t\t\t0, F@_1, _) ->\n    #{aggregated_payload_size => F@_1}.\n\nd_field_streaming_input_call_response_aggregated_payload_size(<<1:1,\n\t\t\t\t\t\t\t\tX:7,\n\t\t\t\t\t\t\t\tRest/binary>>,\n\t\t\t\t\t\t\t      N, Acc, F@_1,\n\t\t\t\t\t\t\t      TrUserData)\n    when N < 57 ->\n    d_field_streaming_input_call_response_aggregated_payload_size(Rest,\n\t\t\t\t\t\t\t\t  N + 7,\n\t\t\t\t\t\t\t\t  X bsl N + Acc,\n\t\t\t\t\t\t\t\t  F@_1,\n\t\t\t\t\t\t\t\t  TrUserData);\nd_field_streaming_input_call_response_aggregated_payload_size(<<0:1,\n\t\t\t\t\t\t\t\tX:7,\n\t\t\t\t\t\t\t\tRest/binary>>,\n\t\t\t\t\t\t\t      N, Acc, _,\n\t\t\t\t\t\t\t      TrUserData) ->\n    {NewFValue, RestF} = {begin\n\t\t\t    <<Res:32/signed-native>> = <<(X bsl N +\n\t\t\t\t\t\t\t    Acc):32/unsigned-native>>,\n\t\t\t    id(Res, TrUserData)\n\t\t\t  end,\n\t\t\t  Rest},\n    dfp_read_field_def_streaming_input_call_response(RestF,\n\t\t\t\t\t\t     0, 0, NewFValue,\n\t\t\t\t\t\t     TrUserData).\n\nskip_varint_streaming_input_call_response(<<1:1, _:7,\n\t\t\t\t\t    Rest/binary>>,\n\t\t\t\t\t  Z1, Z2, F@_1, TrUserData) ->\n    skip_varint_streaming_input_call_response(Rest, Z1, Z2,\n\t\t\t\t\t      F@_1, TrUserData);\nskip_varint_streaming_input_call_response(<<0:1, _:7,\n\t\t\t\t\t    Rest/binary>>,\n\t\t\t\t\t  Z1, Z2, F@_1, TrUserData) ->\n    dfp_read_field_def_streaming_input_call_response(Rest,\n\t\t\t\t\t\t     Z1, Z2, F@_1, TrUserData).\n\nskip_length_delimited_streaming_input_call_response(<<1:1,\n\t\t\t\t\t\t      X:7, Rest/binary>>,\n\t\t\t\t\t\t    N, Acc, F@_1, TrUserData)\n    when N < 57 ->\n    skip_length_delimited_streaming_input_call_response(Rest,\n\t\t\t\t\t\t\tN + 7, X bsl N + Acc,\n\t\t\t\t\t\t\tF@_1, TrUserData);\nskip_length_delimited_streaming_input_call_response(<<0:1,\n\t\t\t\t\t\t      X:7, Rest/binary>>,\n\t\t\t\t\t\t    N, Acc, F@_1, TrUserData) ->\n    Length = X bsl N + Acc,\n    <<_:Length/binary, Rest2/binary>> = Rest,\n    dfp_read_field_def_streaming_input_call_response(Rest2,\n\t\t\t\t\t\t     0, 0, F@_1, TrUserData).\n\nskip_group_streaming_input_call_response(Bin, FNum, Z2,\n\t\t\t\t\t F@_1, TrUserData) ->\n    {_, Rest} = read_group(Bin, FNum),\n    dfp_read_field_def_streaming_input_call_response(Rest,\n\t\t\t\t\t\t     0, Z2, F@_1, TrUserData).\n\nskip_32_streaming_input_call_response(<<_:32,\n\t\t\t\t\tRest/binary>>,\n\t\t\t\t      Z1, Z2, F@_1, TrUserData) ->\n    dfp_read_field_def_streaming_input_call_response(Rest,\n\t\t\t\t\t\t     Z1, Z2, F@_1, TrUserData).\n\nskip_64_streaming_input_call_response(<<_:64,\n\t\t\t\t\tRest/binary>>,\n\t\t\t\t      Z1, Z2, F@_1, TrUserData) ->\n    dfp_read_field_def_streaming_input_call_response(Rest,\n\t\t\t\t\t\t     Z1, Z2, F@_1, TrUserData).\n\ndecode_msg_response_parameters(Bin, TrUserData) ->\n    dfp_read_field_def_response_parameters(Bin, 0, 0,\n\t\t\t\t\t   id(0, TrUserData), id(0, TrUserData),\n\t\t\t\t\t   id('$undef', TrUserData),\n\t\t\t\t\t   TrUserData).\n\ndfp_read_field_def_response_parameters(<<8,\n\t\t\t\t\t Rest/binary>>,\n\t\t\t\t       Z1, Z2, F@_1, F@_2, F@_3, TrUserData) ->\n    d_field_response_parameters_size(Rest, Z1, Z2, F@_1,\n\t\t\t\t     F@_2, F@_3, TrUserData);\ndfp_read_field_def_response_parameters(<<16,\n\t\t\t\t\t Rest/binary>>,\n\t\t\t\t       Z1, Z2, F@_1, F@_2, F@_3, TrUserData) ->\n    d_field_response_parameters_interval_us(Rest, Z1, Z2,\n\t\t\t\t\t    F@_1, F@_2, F@_3, TrUserData);\ndfp_read_field_def_response_parameters(<<26,\n\t\t\t\t\t Rest/binary>>,\n\t\t\t\t       Z1, Z2, F@_1, F@_2, F@_3, TrUserData) ->\n    d_field_response_parameters_compressed(Rest, Z1, Z2,\n\t\t\t\t\t   F@_1, F@_2, F@_3, TrUserData);\ndfp_read_field_def_response_parameters(<<>>, 0, 0, F@_1,\n\t\t\t\t       F@_2, F@_3, _) ->\n    S1 = #{size => F@_1, interval_us => F@_2},\n    if F@_3 == '$undef' -> S1;\n       true -> S1#{compressed => F@_3}\n    end;\ndfp_read_field_def_response_parameters(Other, Z1, Z2,\n\t\t\t\t       F@_1, F@_2, F@_3, TrUserData) ->\n    dg_read_field_def_response_parameters(Other, Z1, Z2,\n\t\t\t\t\t  F@_1, F@_2, F@_3, TrUserData).\n\ndg_read_field_def_response_parameters(<<1:1, X:7,\n\t\t\t\t\tRest/binary>>,\n\t\t\t\t      N, Acc, F@_1, F@_2, F@_3, TrUserData)\n    when N < 32 - 7 ->\n    dg_read_field_def_response_parameters(Rest, N + 7,\n\t\t\t\t\t  X bsl N + Acc, F@_1, F@_2, F@_3,\n\t\t\t\t\t  TrUserData);\ndg_read_field_def_response_parameters(<<0:1, X:7,\n\t\t\t\t\tRest/binary>>,\n\t\t\t\t      N, Acc, F@_1, F@_2, F@_3, TrUserData) ->\n    Key = X bsl N + Acc,\n    case Key of\n      8 ->\n\t  d_field_response_parameters_size(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t\t   F@_3, TrUserData);\n      16 ->\n\t  d_field_response_parameters_interval_us(Rest, 0, 0,\n\t\t\t\t\t\t  F@_1, F@_2, F@_3, TrUserData);\n      26 ->\n\t  d_field_response_parameters_compressed(Rest, 0, 0, F@_1,\n\t\t\t\t\t\t F@_2, F@_3, TrUserData);\n      _ ->\n\t  case Key band 7 of\n\t    0 ->\n\t\tskip_varint_response_parameters(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t\t\tF@_3, TrUserData);\n\t    1 ->\n\t\tskip_64_response_parameters(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t\t    F@_3, TrUserData);\n\t    2 ->\n\t\tskip_length_delimited_response_parameters(Rest, 0, 0,\n\t\t\t\t\t\t\t  F@_1, F@_2, F@_3,\n\t\t\t\t\t\t\t  TrUserData);\n\t    3 ->\n\t\tskip_group_response_parameters(Rest, Key bsr 3, 0, F@_1,\n\t\t\t\t\t       F@_2, F@_3, TrUserData);\n\t    5 ->\n\t\tskip_32_response_parameters(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t\t    F@_3, TrUserData)\n\t  end\n    end;\ndg_read_field_def_response_parameters(<<>>, 0, 0, F@_1,\n\t\t\t\t      F@_2, F@_3, _) ->\n    S1 = #{size => F@_1, interval_us => F@_2},\n    if F@_3 == '$undef' -> S1;\n       true -> S1#{compressed => F@_3}\n    end.\n\nd_field_response_parameters_size(<<1:1, X:7,\n\t\t\t\t   Rest/binary>>,\n\t\t\t\t N, Acc, F@_1, F@_2, F@_3, TrUserData)\n    when N < 57 ->\n    d_field_response_parameters_size(Rest, N + 7,\n\t\t\t\t     X bsl N + Acc, F@_1, F@_2, F@_3,\n\t\t\t\t     TrUserData);\nd_field_response_parameters_size(<<0:1, X:7,\n\t\t\t\t   Rest/binary>>,\n\t\t\t\t N, Acc, _, F@_2, F@_3, TrUserData) ->\n    {NewFValue, RestF} = {begin\n\t\t\t    <<Res:32/signed-native>> = <<(X bsl N +\n\t\t\t\t\t\t\t    Acc):32/unsigned-native>>,\n\t\t\t    id(Res, TrUserData)\n\t\t\t  end,\n\t\t\t  Rest},\n    dfp_read_field_def_response_parameters(RestF, 0, 0,\n\t\t\t\t\t   NewFValue, F@_2, F@_3, TrUserData).\n\nd_field_response_parameters_interval_us(<<1:1, X:7,\n\t\t\t\t\t  Rest/binary>>,\n\t\t\t\t\tN, Acc, F@_1, F@_2, F@_3, TrUserData)\n    when N < 57 ->\n    d_field_response_parameters_interval_us(Rest, N + 7,\n\t\t\t\t\t    X bsl N + Acc, F@_1, F@_2, F@_3,\n\t\t\t\t\t    TrUserData);\nd_field_response_parameters_interval_us(<<0:1, X:7,\n\t\t\t\t\t  Rest/binary>>,\n\t\t\t\t\tN, Acc, F@_1, _, F@_3, TrUserData) ->\n    {NewFValue, RestF} = {begin\n\t\t\t    <<Res:32/signed-native>> = <<(X bsl N +\n\t\t\t\t\t\t\t    Acc):32/unsigned-native>>,\n\t\t\t    id(Res, TrUserData)\n\t\t\t  end,\n\t\t\t  Rest},\n    dfp_read_field_def_response_parameters(RestF, 0, 0,\n\t\t\t\t\t   F@_1, NewFValue, F@_3, TrUserData).\n\nd_field_response_parameters_compressed(<<1:1, X:7,\n\t\t\t\t\t Rest/binary>>,\n\t\t\t\t       N, Acc, F@_1, F@_2, F@_3, TrUserData)\n    when N < 57 ->\n    d_field_response_parameters_compressed(Rest, N + 7,\n\t\t\t\t\t   X bsl N + Acc, F@_1, F@_2, F@_3,\n\t\t\t\t\t   TrUserData);\nd_field_response_parameters_compressed(<<0:1, X:7,\n\t\t\t\t\t Rest/binary>>,\n\t\t\t\t       N, Acc, F@_1, F@_2, Prev, TrUserData) ->\n    {NewFValue, RestF} = begin\n\t\t\t   Len = X bsl N + Acc,\n\t\t\t   <<Bs:Len/binary, Rest2/binary>> = Rest,\n\t\t\t   {id(decode_msg_bool_value(Bs, TrUserData),\n\t\t\t       TrUserData),\n\t\t\t    Rest2}\n\t\t\t end,\n    dfp_read_field_def_response_parameters(RestF, 0, 0,\n\t\t\t\t\t   F@_1, F@_2,\n\t\t\t\t\t   if Prev == '$undef' -> NewFValue;\n\t\t\t\t\t      true ->\n\t\t\t\t\t\t  merge_msg_bool_value(Prev,\n\t\t\t\t\t\t\t\t       NewFValue,\n\t\t\t\t\t\t\t\t       TrUserData)\n\t\t\t\t\t   end,\n\t\t\t\t\t   TrUserData).\n\nskip_varint_response_parameters(<<1:1, _:7,\n\t\t\t\t  Rest/binary>>,\n\t\t\t\tZ1, Z2, F@_1, F@_2, F@_3, TrUserData) ->\n    skip_varint_response_parameters(Rest, Z1, Z2, F@_1,\n\t\t\t\t    F@_2, F@_3, TrUserData);\nskip_varint_response_parameters(<<0:1, _:7,\n\t\t\t\t  Rest/binary>>,\n\t\t\t\tZ1, Z2, F@_1, F@_2, F@_3, TrUserData) ->\n    dfp_read_field_def_response_parameters(Rest, Z1, Z2,\n\t\t\t\t\t   F@_1, F@_2, F@_3, TrUserData).\n\nskip_length_delimited_response_parameters(<<1:1, X:7,\n\t\t\t\t\t    Rest/binary>>,\n\t\t\t\t\t  N, Acc, F@_1, F@_2, F@_3, TrUserData)\n    when N < 57 ->\n    skip_length_delimited_response_parameters(Rest, N + 7,\n\t\t\t\t\t      X bsl N + Acc, F@_1, F@_2, F@_3,\n\t\t\t\t\t      TrUserData);\nskip_length_delimited_response_parameters(<<0:1, X:7,\n\t\t\t\t\t    Rest/binary>>,\n\t\t\t\t\t  N, Acc, F@_1, F@_2, F@_3,\n\t\t\t\t\t  TrUserData) ->\n    Length = X bsl N + Acc,\n    <<_:Length/binary, Rest2/binary>> = Rest,\n    dfp_read_field_def_response_parameters(Rest2, 0, 0,\n\t\t\t\t\t   F@_1, F@_2, F@_3, TrUserData).\n\nskip_group_response_parameters(Bin, FNum, Z2, F@_1,\n\t\t\t       F@_2, F@_3, TrUserData) ->\n    {_, Rest} = read_group(Bin, FNum),\n    dfp_read_field_def_response_parameters(Rest, 0, Z2,\n\t\t\t\t\t   F@_1, F@_2, F@_3, TrUserData).\n\nskip_32_response_parameters(<<_:32, Rest/binary>>, Z1,\n\t\t\t    Z2, F@_1, F@_2, F@_3, TrUserData) ->\n    dfp_read_field_def_response_parameters(Rest, Z1, Z2,\n\t\t\t\t\t   F@_1, F@_2, F@_3, TrUserData).\n\nskip_64_response_parameters(<<_:64, Rest/binary>>, Z1,\n\t\t\t    Z2, F@_1, F@_2, F@_3, TrUserData) ->\n    dfp_read_field_def_response_parameters(Rest, Z1, Z2,\n\t\t\t\t\t   F@_1, F@_2, F@_3, TrUserData).\n\ndecode_msg_streaming_output_call_request(Bin,\n\t\t\t\t\t TrUserData) ->\n    dfp_read_field_def_streaming_output_call_request(Bin, 0,\n\t\t\t\t\t\t     0,\n\t\t\t\t\t\t     id('COMPRESSABLE',\n\t\t\t\t\t\t\tTrUserData),\n\t\t\t\t\t\t     id([], TrUserData),\n\t\t\t\t\t\t     id('$undef', TrUserData),\n\t\t\t\t\t\t     id('$undef', TrUserData),\n\t\t\t\t\t\t     TrUserData).\n\ndfp_read_field_def_streaming_output_call_request(<<8,\n\t\t\t\t\t\t   Rest/binary>>,\n\t\t\t\t\t\t Z1, Z2, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\t\t TrUserData) ->\n    d_field_streaming_output_call_request_response_type(Rest,\n\t\t\t\t\t\t\tZ1, Z2, F@_1, F@_2,\n\t\t\t\t\t\t\tF@_3, F@_4, TrUserData);\ndfp_read_field_def_streaming_output_call_request(<<18,\n\t\t\t\t\t\t   Rest/binary>>,\n\t\t\t\t\t\t Z1, Z2, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\t\t TrUserData) ->\n    d_field_streaming_output_call_request_response_parameters(Rest,\n\t\t\t\t\t\t\t      Z1, Z2, F@_1,\n\t\t\t\t\t\t\t      F@_2, F@_3, F@_4,\n\t\t\t\t\t\t\t      TrUserData);\ndfp_read_field_def_streaming_output_call_request(<<26,\n\t\t\t\t\t\t   Rest/binary>>,\n\t\t\t\t\t\t Z1, Z2, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\t\t TrUserData) ->\n    d_field_streaming_output_call_request_payload(Rest, Z1,\n\t\t\t\t\t\t  Z2, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\t\t  TrUserData);\ndfp_read_field_def_streaming_output_call_request(<<58,\n\t\t\t\t\t\t   Rest/binary>>,\n\t\t\t\t\t\t Z1, Z2, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\t\t TrUserData) ->\n    d_field_streaming_output_call_request_response_status(Rest,\n\t\t\t\t\t\t\t  Z1, Z2, F@_1, F@_2,\n\t\t\t\t\t\t\t  F@_3, F@_4,\n\t\t\t\t\t\t\t  TrUserData);\ndfp_read_field_def_streaming_output_call_request(<<>>,\n\t\t\t\t\t\t 0, 0, F@_1, R1, F@_3, F@_4,\n\t\t\t\t\t\t TrUserData) ->\n    S1 = #{response_type => F@_1},\n    S2 = if R1 == '$undef' -> S1;\n\t    true ->\n\t\tS1#{response_parameters =>\n\t\t\tlists_reverse(R1, TrUserData)}\n\t end,\n    S3 = if F@_3 == '$undef' -> S2;\n\t    true -> S2#{payload => F@_3}\n\t end,\n    if F@_4 == '$undef' -> S3;\n       true -> S3#{response_status => F@_4}\n    end;\ndfp_read_field_def_streaming_output_call_request(Other,\n\t\t\t\t\t\t Z1, Z2, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\t\t TrUserData) ->\n    dg_read_field_def_streaming_output_call_request(Other,\n\t\t\t\t\t\t    Z1, Z2, F@_1, F@_2, F@_3,\n\t\t\t\t\t\t    F@_4, TrUserData).\n\ndg_read_field_def_streaming_output_call_request(<<1:1,\n\t\t\t\t\t\t  X:7, Rest/binary>>,\n\t\t\t\t\t\tN, Acc, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\t\tTrUserData)\n    when N < 32 - 7 ->\n    dg_read_field_def_streaming_output_call_request(Rest,\n\t\t\t\t\t\t    N + 7, X bsl N + Acc, F@_1,\n\t\t\t\t\t\t    F@_2, F@_3, F@_4,\n\t\t\t\t\t\t    TrUserData);\ndg_read_field_def_streaming_output_call_request(<<0:1,\n\t\t\t\t\t\t  X:7, Rest/binary>>,\n\t\t\t\t\t\tN, Acc, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\t\tTrUserData) ->\n    Key = X bsl N + Acc,\n    case Key of\n      8 ->\n\t  d_field_streaming_output_call_request_response_type(Rest,\n\t\t\t\t\t\t\t      0, 0, F@_1, F@_2,\n\t\t\t\t\t\t\t      F@_3, F@_4,\n\t\t\t\t\t\t\t      TrUserData);\n      18 ->\n\t  d_field_streaming_output_call_request_response_parameters(Rest,\n\t\t\t\t\t\t\t\t    0, 0, F@_1,\n\t\t\t\t\t\t\t\t    F@_2, F@_3,\n\t\t\t\t\t\t\t\t    F@_4,\n\t\t\t\t\t\t\t\t    TrUserData);\n      26 ->\n\t  d_field_streaming_output_call_request_payload(Rest, 0,\n\t\t\t\t\t\t\t0, F@_1, F@_2, F@_3,\n\t\t\t\t\t\t\tF@_4, TrUserData);\n      58 ->\n\t  d_field_streaming_output_call_request_response_status(Rest,\n\t\t\t\t\t\t\t\t0, 0, F@_1,\n\t\t\t\t\t\t\t\tF@_2, F@_3,\n\t\t\t\t\t\t\t\tF@_4,\n\t\t\t\t\t\t\t\tTrUserData);\n      _ ->\n\t  case Key band 7 of\n\t    0 ->\n\t\tskip_varint_streaming_output_call_request(Rest, 0, 0,\n\t\t\t\t\t\t\t  F@_1, F@_2, F@_3,\n\t\t\t\t\t\t\t  F@_4, TrUserData);\n\t    1 ->\n\t\tskip_64_streaming_output_call_request(Rest, 0, 0, F@_1,\n\t\t\t\t\t\t      F@_2, F@_3, F@_4,\n\t\t\t\t\t\t      TrUserData);\n\t    2 ->\n\t\tskip_length_delimited_streaming_output_call_request(Rest,\n\t\t\t\t\t\t\t\t    0, 0, F@_1,\n\t\t\t\t\t\t\t\t    F@_2, F@_3,\n\t\t\t\t\t\t\t\t    F@_4,\n\t\t\t\t\t\t\t\t    TrUserData);\n\t    3 ->\n\t\tskip_group_streaming_output_call_request(Rest,\n\t\t\t\t\t\t\t Key bsr 3, 0, F@_1,\n\t\t\t\t\t\t\t F@_2, F@_3, F@_4,\n\t\t\t\t\t\t\t TrUserData);\n\t    5 ->\n\t\tskip_32_streaming_output_call_request(Rest, 0, 0, F@_1,\n\t\t\t\t\t\t      F@_2, F@_3, F@_4,\n\t\t\t\t\t\t      TrUserData)\n\t  end\n    end;\ndg_read_field_def_streaming_output_call_request(<<>>, 0,\n\t\t\t\t\t\t0, F@_1, R1, F@_3, F@_4,\n\t\t\t\t\t\tTrUserData) ->\n    S1 = #{response_type => F@_1},\n    S2 = if R1 == '$undef' -> S1;\n\t    true ->\n\t\tS1#{response_parameters =>\n\t\t\tlists_reverse(R1, TrUserData)}\n\t end,\n    S3 = if F@_3 == '$undef' -> S2;\n\t    true -> S2#{payload => F@_3}\n\t end,\n    if F@_4 == '$undef' -> S3;\n       true -> S3#{response_status => F@_4}\n    end.\n\nd_field_streaming_output_call_request_response_type(<<1:1,\n\t\t\t\t\t\t      X:7, Rest/binary>>,\n\t\t\t\t\t\t    N, Acc, F@_1, F@_2, F@_3,\n\t\t\t\t\t\t    F@_4, TrUserData)\n    when N < 57 ->\n    d_field_streaming_output_call_request_response_type(Rest,\n\t\t\t\t\t\t\tN + 7, X bsl N + Acc,\n\t\t\t\t\t\t\tF@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\t\t\tTrUserData);\nd_field_streaming_output_call_request_response_type(<<0:1,\n\t\t\t\t\t\t      X:7, Rest/binary>>,\n\t\t\t\t\t\t    N, Acc, _, F@_2, F@_3, F@_4,\n\t\t\t\t\t\t    TrUserData) ->\n    {NewFValue, RestF} =\n\t{id('d_enum_grpc.testing.PayloadType'(begin\n\t\t\t\t\t\t<<Res:32/signed-native>> = <<(X\n\t\t\t\t\t\t\t\t\t\tbsl\n\t\t\t\t\t\t\t\t\t\tN\n\t\t\t\t\t\t\t\t\t\t+\n\t\t\t\t\t\t\t\t\t\tAcc):32/unsigned-native>>,\n\t\t\t\t\t\tid(Res, TrUserData)\n\t\t\t\t\t      end),\n\t    TrUserData),\n\t Rest},\n    dfp_read_field_def_streaming_output_call_request(RestF,\n\t\t\t\t\t\t     0, 0, NewFValue, F@_2,\n\t\t\t\t\t\t     F@_3, F@_4, TrUserData).\n\nd_field_streaming_output_call_request_response_parameters(<<1:1,\n\t\t\t\t\t\t\t    X:7, Rest/binary>>,\n\t\t\t\t\t\t\t  N, Acc, F@_1, F@_2,\n\t\t\t\t\t\t\t  F@_3, F@_4,\n\t\t\t\t\t\t\t  TrUserData)\n    when N < 57 ->\n    d_field_streaming_output_call_request_response_parameters(Rest,\n\t\t\t\t\t\t\t      N + 7,\n\t\t\t\t\t\t\t      X bsl N + Acc,\n\t\t\t\t\t\t\t      F@_1, F@_2, F@_3,\n\t\t\t\t\t\t\t      F@_4, TrUserData);\nd_field_streaming_output_call_request_response_parameters(<<0:1,\n\t\t\t\t\t\t\t    X:7, Rest/binary>>,\n\t\t\t\t\t\t\t  N, Acc, F@_1, Prev,\n\t\t\t\t\t\t\t  F@_3, F@_4,\n\t\t\t\t\t\t\t  TrUserData) ->\n    {NewFValue, RestF} = begin\n\t\t\t   Len = X bsl N + Acc,\n\t\t\t   <<Bs:Len/binary, Rest2/binary>> = Rest,\n\t\t\t   {id(decode_msg_response_parameters(Bs, TrUserData),\n\t\t\t       TrUserData),\n\t\t\t    Rest2}\n\t\t\t end,\n    dfp_read_field_def_streaming_output_call_request(RestF,\n\t\t\t\t\t\t     0, 0, F@_1,\n\t\t\t\t\t\t     cons(NewFValue, Prev,\n\t\t\t\t\t\t\t  TrUserData),\n\t\t\t\t\t\t     F@_3, F@_4, TrUserData).\n\nd_field_streaming_output_call_request_payload(<<1:1,\n\t\t\t\t\t\tX:7, Rest/binary>>,\n\t\t\t\t\t      N, Acc, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\t      TrUserData)\n    when N < 57 ->\n    d_field_streaming_output_call_request_payload(Rest,\n\t\t\t\t\t\t  N + 7, X bsl N + Acc, F@_1,\n\t\t\t\t\t\t  F@_2, F@_3, F@_4, TrUserData);\nd_field_streaming_output_call_request_payload(<<0:1,\n\t\t\t\t\t\tX:7, Rest/binary>>,\n\t\t\t\t\t      N, Acc, F@_1, F@_2, Prev, F@_4,\n\t\t\t\t\t      TrUserData) ->\n    {NewFValue, RestF} = begin\n\t\t\t   Len = X bsl N + Acc,\n\t\t\t   <<Bs:Len/binary, Rest2/binary>> = Rest,\n\t\t\t   {id(decode_msg_payload(Bs, TrUserData), TrUserData),\n\t\t\t    Rest2}\n\t\t\t end,\n    dfp_read_field_def_streaming_output_call_request(RestF,\n\t\t\t\t\t\t     0, 0, F@_1, F@_2,\n\t\t\t\t\t\t     if Prev == '$undef' ->\n\t\t\t\t\t\t\t    NewFValue;\n\t\t\t\t\t\t\ttrue ->\n\t\t\t\t\t\t\t    merge_msg_payload(Prev,\n\t\t\t\t\t\t\t\t\t      NewFValue,\n\t\t\t\t\t\t\t\t\t      TrUserData)\n\t\t\t\t\t\t     end,\n\t\t\t\t\t\t     F@_4, TrUserData).\n\nd_field_streaming_output_call_request_response_status(<<1:1,\n\t\t\t\t\t\t\tX:7, Rest/binary>>,\n\t\t\t\t\t\t      N, Acc, F@_1, F@_2, F@_3,\n\t\t\t\t\t\t      F@_4, TrUserData)\n    when N < 57 ->\n    d_field_streaming_output_call_request_response_status(Rest,\n\t\t\t\t\t\t\t  N + 7, X bsl N + Acc,\n\t\t\t\t\t\t\t  F@_1, F@_2, F@_3,\n\t\t\t\t\t\t\t  F@_4, TrUserData);\nd_field_streaming_output_call_request_response_status(<<0:1,\n\t\t\t\t\t\t\tX:7, Rest/binary>>,\n\t\t\t\t\t\t      N, Acc, F@_1, F@_2, F@_3,\n\t\t\t\t\t\t      Prev, TrUserData) ->\n    {NewFValue, RestF} = begin\n\t\t\t   Len = X bsl N + Acc,\n\t\t\t   <<Bs:Len/binary, Rest2/binary>> = Rest,\n\t\t\t   {id(decode_msg_echo_status(Bs, TrUserData),\n\t\t\t       TrUserData),\n\t\t\t    Rest2}\n\t\t\t end,\n    dfp_read_field_def_streaming_output_call_request(RestF,\n\t\t\t\t\t\t     0, 0, F@_1, F@_2, F@_3,\n\t\t\t\t\t\t     if Prev == '$undef' ->\n\t\t\t\t\t\t\t    NewFValue;\n\t\t\t\t\t\t\ttrue ->\n\t\t\t\t\t\t\t    merge_msg_echo_status(Prev,\n\t\t\t\t\t\t\t\t\t\t  NewFValue,\n\t\t\t\t\t\t\t\t\t\t  TrUserData)\n\t\t\t\t\t\t     end,\n\t\t\t\t\t\t     TrUserData).\n\nskip_varint_streaming_output_call_request(<<1:1, _:7,\n\t\t\t\t\t    Rest/binary>>,\n\t\t\t\t\t  Z1, Z2, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\t  TrUserData) ->\n    skip_varint_streaming_output_call_request(Rest, Z1, Z2,\n\t\t\t\t\t      F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\t      TrUserData);\nskip_varint_streaming_output_call_request(<<0:1, _:7,\n\t\t\t\t\t    Rest/binary>>,\n\t\t\t\t\t  Z1, Z2, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\t  TrUserData) ->\n    dfp_read_field_def_streaming_output_call_request(Rest,\n\t\t\t\t\t\t     Z1, Z2, F@_1, F@_2, F@_3,\n\t\t\t\t\t\t     F@_4, TrUserData).\n\nskip_length_delimited_streaming_output_call_request(<<1:1,\n\t\t\t\t\t\t      X:7, Rest/binary>>,\n\t\t\t\t\t\t    N, Acc, F@_1, F@_2, F@_3,\n\t\t\t\t\t\t    F@_4, TrUserData)\n    when N < 57 ->\n    skip_length_delimited_streaming_output_call_request(Rest,\n\t\t\t\t\t\t\tN + 7, X bsl N + Acc,\n\t\t\t\t\t\t\tF@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\t\t\tTrUserData);\nskip_length_delimited_streaming_output_call_request(<<0:1,\n\t\t\t\t\t\t      X:7, Rest/binary>>,\n\t\t\t\t\t\t    N, Acc, F@_1, F@_2, F@_3,\n\t\t\t\t\t\t    F@_4, TrUserData) ->\n    Length = X bsl N + Acc,\n    <<_:Length/binary, Rest2/binary>> = Rest,\n    dfp_read_field_def_streaming_output_call_request(Rest2,\n\t\t\t\t\t\t     0, 0, F@_1, F@_2, F@_3,\n\t\t\t\t\t\t     F@_4, TrUserData).\n\nskip_group_streaming_output_call_request(Bin, FNum, Z2,\n\t\t\t\t\t F@_1, F@_2, F@_3, F@_4, TrUserData) ->\n    {_, Rest} = read_group(Bin, FNum),\n    dfp_read_field_def_streaming_output_call_request(Rest,\n\t\t\t\t\t\t     0, Z2, F@_1, F@_2, F@_3,\n\t\t\t\t\t\t     F@_4, TrUserData).\n\nskip_32_streaming_output_call_request(<<_:32,\n\t\t\t\t\tRest/binary>>,\n\t\t\t\t      Z1, Z2, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t      TrUserData) ->\n    dfp_read_field_def_streaming_output_call_request(Rest,\n\t\t\t\t\t\t     Z1, Z2, F@_1, F@_2, F@_3,\n\t\t\t\t\t\t     F@_4, TrUserData).\n\nskip_64_streaming_output_call_request(<<_:64,\n\t\t\t\t\tRest/binary>>,\n\t\t\t\t      Z1, Z2, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t      TrUserData) ->\n    dfp_read_field_def_streaming_output_call_request(Rest,\n\t\t\t\t\t\t     Z1, Z2, F@_1, F@_2, F@_3,\n\t\t\t\t\t\t     F@_4, TrUserData).\n\ndecode_msg_streaming_output_call_response(Bin,\n\t\t\t\t\t  TrUserData) ->\n    dfp_read_field_def_streaming_output_call_response(Bin,\n\t\t\t\t\t\t      0, 0,\n\t\t\t\t\t\t      id('$undef', TrUserData),\n\t\t\t\t\t\t      TrUserData).\n\ndfp_read_field_def_streaming_output_call_response(<<10,\n\t\t\t\t\t\t    Rest/binary>>,\n\t\t\t\t\t\t  Z1, Z2, F@_1, TrUserData) ->\n    d_field_streaming_output_call_response_payload(Rest, Z1,\n\t\t\t\t\t\t   Z2, F@_1, TrUserData);\ndfp_read_field_def_streaming_output_call_response(<<>>,\n\t\t\t\t\t\t  0, 0, F@_1, _) ->\n    S1 = #{},\n    if F@_1 == '$undef' -> S1;\n       true -> S1#{payload => F@_1}\n    end;\ndfp_read_field_def_streaming_output_call_response(Other,\n\t\t\t\t\t\t  Z1, Z2, F@_1, TrUserData) ->\n    dg_read_field_def_streaming_output_call_response(Other,\n\t\t\t\t\t\t     Z1, Z2, F@_1, TrUserData).\n\ndg_read_field_def_streaming_output_call_response(<<1:1,\n\t\t\t\t\t\t   X:7, Rest/binary>>,\n\t\t\t\t\t\t N, Acc, F@_1, TrUserData)\n    when N < 32 - 7 ->\n    dg_read_field_def_streaming_output_call_response(Rest,\n\t\t\t\t\t\t     N + 7, X bsl N + Acc, F@_1,\n\t\t\t\t\t\t     TrUserData);\ndg_read_field_def_streaming_output_call_response(<<0:1,\n\t\t\t\t\t\t   X:7, Rest/binary>>,\n\t\t\t\t\t\t N, Acc, F@_1, TrUserData) ->\n    Key = X bsl N + Acc,\n    case Key of\n      10 ->\n\t  d_field_streaming_output_call_response_payload(Rest, 0,\n\t\t\t\t\t\t\t 0, F@_1, TrUserData);\n      _ ->\n\t  case Key band 7 of\n\t    0 ->\n\t\tskip_varint_streaming_output_call_response(Rest, 0, 0,\n\t\t\t\t\t\t\t   F@_1, TrUserData);\n\t    1 ->\n\t\tskip_64_streaming_output_call_response(Rest, 0, 0, F@_1,\n\t\t\t\t\t\t       TrUserData);\n\t    2 ->\n\t\tskip_length_delimited_streaming_output_call_response(Rest,\n\t\t\t\t\t\t\t\t     0, 0, F@_1,\n\t\t\t\t\t\t\t\t     TrUserData);\n\t    3 ->\n\t\tskip_group_streaming_output_call_response(Rest,\n\t\t\t\t\t\t\t  Key bsr 3, 0, F@_1,\n\t\t\t\t\t\t\t  TrUserData);\n\t    5 ->\n\t\tskip_32_streaming_output_call_response(Rest, 0, 0, F@_1,\n\t\t\t\t\t\t       TrUserData)\n\t  end\n    end;\ndg_read_field_def_streaming_output_call_response(<<>>,\n\t\t\t\t\t\t 0, 0, F@_1, _) ->\n    S1 = #{},\n    if F@_1 == '$undef' -> S1;\n       true -> S1#{payload => F@_1}\n    end.\n\nd_field_streaming_output_call_response_payload(<<1:1,\n\t\t\t\t\t\t X:7, Rest/binary>>,\n\t\t\t\t\t       N, Acc, F@_1, TrUserData)\n    when N < 57 ->\n    d_field_streaming_output_call_response_payload(Rest,\n\t\t\t\t\t\t   N + 7, X bsl N + Acc, F@_1,\n\t\t\t\t\t\t   TrUserData);\nd_field_streaming_output_call_response_payload(<<0:1,\n\t\t\t\t\t\t X:7, Rest/binary>>,\n\t\t\t\t\t       N, Acc, Prev, TrUserData) ->\n    {NewFValue, RestF} = begin\n\t\t\t   Len = X bsl N + Acc,\n\t\t\t   <<Bs:Len/binary, Rest2/binary>> = Rest,\n\t\t\t   {id(decode_msg_payload(Bs, TrUserData), TrUserData),\n\t\t\t    Rest2}\n\t\t\t end,\n    dfp_read_field_def_streaming_output_call_response(RestF,\n\t\t\t\t\t\t      0, 0,\n\t\t\t\t\t\t      if Prev == '$undef' ->\n\t\t\t\t\t\t\t     NewFValue;\n\t\t\t\t\t\t\t true ->\n\t\t\t\t\t\t\t     merge_msg_payload(Prev,\n\t\t\t\t\t\t\t\t\t       NewFValue,\n\t\t\t\t\t\t\t\t\t       TrUserData)\n\t\t\t\t\t\t      end,\n\t\t\t\t\t\t      TrUserData).\n\nskip_varint_streaming_output_call_response(<<1:1, _:7,\n\t\t\t\t\t     Rest/binary>>,\n\t\t\t\t\t   Z1, Z2, F@_1, TrUserData) ->\n    skip_varint_streaming_output_call_response(Rest, Z1, Z2,\n\t\t\t\t\t       F@_1, TrUserData);\nskip_varint_streaming_output_call_response(<<0:1, _:7,\n\t\t\t\t\t     Rest/binary>>,\n\t\t\t\t\t   Z1, Z2, F@_1, TrUserData) ->\n    dfp_read_field_def_streaming_output_call_response(Rest,\n\t\t\t\t\t\t      Z1, Z2, F@_1, TrUserData).\n\nskip_length_delimited_streaming_output_call_response(<<1:1,\n\t\t\t\t\t\t       X:7, Rest/binary>>,\n\t\t\t\t\t\t     N, Acc, F@_1, TrUserData)\n    when N < 57 ->\n    skip_length_delimited_streaming_output_call_response(Rest,\n\t\t\t\t\t\t\t N + 7, X bsl N + Acc,\n\t\t\t\t\t\t\t F@_1, TrUserData);\nskip_length_delimited_streaming_output_call_response(<<0:1,\n\t\t\t\t\t\t       X:7, Rest/binary>>,\n\t\t\t\t\t\t     N, Acc, F@_1,\n\t\t\t\t\t\t     TrUserData) ->\n    Length = X bsl N + Acc,\n    <<_:Length/binary, Rest2/binary>> = Rest,\n    dfp_read_field_def_streaming_output_call_response(Rest2,\n\t\t\t\t\t\t      0, 0, F@_1, TrUserData).\n\nskip_group_streaming_output_call_response(Bin, FNum, Z2,\n\t\t\t\t\t  F@_1, TrUserData) ->\n    {_, Rest} = read_group(Bin, FNum),\n    dfp_read_field_def_streaming_output_call_response(Rest,\n\t\t\t\t\t\t      0, Z2, F@_1, TrUserData).\n\nskip_32_streaming_output_call_response(<<_:32,\n\t\t\t\t\t Rest/binary>>,\n\t\t\t\t       Z1, Z2, F@_1, TrUserData) ->\n    dfp_read_field_def_streaming_output_call_response(Rest,\n\t\t\t\t\t\t      Z1, Z2, F@_1, TrUserData).\n\nskip_64_streaming_output_call_response(<<_:64,\n\t\t\t\t\t Rest/binary>>,\n\t\t\t\t       Z1, Z2, F@_1, TrUserData) ->\n    dfp_read_field_def_streaming_output_call_response(Rest,\n\t\t\t\t\t\t      Z1, Z2, F@_1, TrUserData).\n\ndecode_msg_reconnect_params(Bin, TrUserData) ->\n    dfp_read_field_def_reconnect_params(Bin, 0, 0,\n\t\t\t\t\tid(0, TrUserData), TrUserData).\n\ndfp_read_field_def_reconnect_params(<<8, Rest/binary>>,\n\t\t\t\t    Z1, Z2, F@_1, TrUserData) ->\n    d_field_reconnect_params_max_reconnect_backoff_ms(Rest,\n\t\t\t\t\t\t      Z1, Z2, F@_1, TrUserData);\ndfp_read_field_def_reconnect_params(<<>>, 0, 0, F@_1,\n\t\t\t\t    _) ->\n    #{max_reconnect_backoff_ms => F@_1};\ndfp_read_field_def_reconnect_params(Other, Z1, Z2, F@_1,\n\t\t\t\t    TrUserData) ->\n    dg_read_field_def_reconnect_params(Other, Z1, Z2, F@_1,\n\t\t\t\t       TrUserData).\n\ndg_read_field_def_reconnect_params(<<1:1, X:7,\n\t\t\t\t     Rest/binary>>,\n\t\t\t\t   N, Acc, F@_1, TrUserData)\n    when N < 32 - 7 ->\n    dg_read_field_def_reconnect_params(Rest, N + 7,\n\t\t\t\t       X bsl N + Acc, F@_1, TrUserData);\ndg_read_field_def_reconnect_params(<<0:1, X:7,\n\t\t\t\t     Rest/binary>>,\n\t\t\t\t   N, Acc, F@_1, TrUserData) ->\n    Key = X bsl N + Acc,\n    case Key of\n      8 ->\n\t  d_field_reconnect_params_max_reconnect_backoff_ms(Rest,\n\t\t\t\t\t\t\t    0, 0, F@_1,\n\t\t\t\t\t\t\t    TrUserData);\n      _ ->\n\t  case Key band 7 of\n\t    0 ->\n\t\tskip_varint_reconnect_params(Rest, 0, 0, F@_1,\n\t\t\t\t\t     TrUserData);\n\t    1 ->\n\t\tskip_64_reconnect_params(Rest, 0, 0, F@_1, TrUserData);\n\t    2 ->\n\t\tskip_length_delimited_reconnect_params(Rest, 0, 0, F@_1,\n\t\t\t\t\t\t       TrUserData);\n\t    3 ->\n\t\tskip_group_reconnect_params(Rest, Key bsr 3, 0, F@_1,\n\t\t\t\t\t    TrUserData);\n\t    5 ->\n\t\tskip_32_reconnect_params(Rest, 0, 0, F@_1, TrUserData)\n\t  end\n    end;\ndg_read_field_def_reconnect_params(<<>>, 0, 0, F@_1,\n\t\t\t\t   _) ->\n    #{max_reconnect_backoff_ms => F@_1}.\n\nd_field_reconnect_params_max_reconnect_backoff_ms(<<1:1,\n\t\t\t\t\t\t    X:7, Rest/binary>>,\n\t\t\t\t\t\t  N, Acc, F@_1, TrUserData)\n    when N < 57 ->\n    d_field_reconnect_params_max_reconnect_backoff_ms(Rest,\n\t\t\t\t\t\t      N + 7, X bsl N + Acc,\n\t\t\t\t\t\t      F@_1, TrUserData);\nd_field_reconnect_params_max_reconnect_backoff_ms(<<0:1,\n\t\t\t\t\t\t    X:7, Rest/binary>>,\n\t\t\t\t\t\t  N, Acc, _, TrUserData) ->\n    {NewFValue, RestF} = {begin\n\t\t\t    <<Res:32/signed-native>> = <<(X bsl N +\n\t\t\t\t\t\t\t    Acc):32/unsigned-native>>,\n\t\t\t    id(Res, TrUserData)\n\t\t\t  end,\n\t\t\t  Rest},\n    dfp_read_field_def_reconnect_params(RestF, 0, 0,\n\t\t\t\t\tNewFValue, TrUserData).\n\nskip_varint_reconnect_params(<<1:1, _:7, Rest/binary>>,\n\t\t\t     Z1, Z2, F@_1, TrUserData) ->\n    skip_varint_reconnect_params(Rest, Z1, Z2, F@_1,\n\t\t\t\t TrUserData);\nskip_varint_reconnect_params(<<0:1, _:7, Rest/binary>>,\n\t\t\t     Z1, Z2, F@_1, TrUserData) ->\n    dfp_read_field_def_reconnect_params(Rest, Z1, Z2, F@_1,\n\t\t\t\t\tTrUserData).\n\nskip_length_delimited_reconnect_params(<<1:1, X:7,\n\t\t\t\t\t Rest/binary>>,\n\t\t\t\t       N, Acc, F@_1, TrUserData)\n    when N < 57 ->\n    skip_length_delimited_reconnect_params(Rest, N + 7,\n\t\t\t\t\t   X bsl N + Acc, F@_1, TrUserData);\nskip_length_delimited_reconnect_params(<<0:1, X:7,\n\t\t\t\t\t Rest/binary>>,\n\t\t\t\t       N, Acc, F@_1, TrUserData) ->\n    Length = X bsl N + Acc,\n    <<_:Length/binary, Rest2/binary>> = Rest,\n    dfp_read_field_def_reconnect_params(Rest2, 0, 0, F@_1,\n\t\t\t\t\tTrUserData).\n\nskip_group_reconnect_params(Bin, FNum, Z2, F@_1,\n\t\t\t    TrUserData) ->\n    {_, Rest} = read_group(Bin, FNum),\n    dfp_read_field_def_reconnect_params(Rest, 0, Z2, F@_1,\n\t\t\t\t\tTrUserData).\n\nskip_32_reconnect_params(<<_:32, Rest/binary>>, Z1, Z2,\n\t\t\t F@_1, TrUserData) ->\n    dfp_read_field_def_reconnect_params(Rest, Z1, Z2, F@_1,\n\t\t\t\t\tTrUserData).\n\nskip_64_reconnect_params(<<_:64, Rest/binary>>, Z1, Z2,\n\t\t\t F@_1, TrUserData) ->\n    dfp_read_field_def_reconnect_params(Rest, Z1, Z2, F@_1,\n\t\t\t\t\tTrUserData).\n\ndecode_msg_reconnect_info(Bin, TrUserData) ->\n    dfp_read_field_def_reconnect_info(Bin, 0, 0,\n\t\t\t\t      id(false, TrUserData), id([], TrUserData),\n\t\t\t\t      TrUserData).\n\ndfp_read_field_def_reconnect_info(<<8, Rest/binary>>,\n\t\t\t\t  Z1, Z2, F@_1, F@_2, TrUserData) ->\n    d_field_reconnect_info_passed(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t\t  TrUserData);\ndfp_read_field_def_reconnect_info(<<18, Rest/binary>>,\n\t\t\t\t  Z1, Z2, F@_1, F@_2, TrUserData) ->\n    d_pfield_reconnect_info_backoff_ms(Rest, Z1, Z2, F@_1,\n\t\t\t\t       F@_2, TrUserData);\ndfp_read_field_def_reconnect_info(<<16, Rest/binary>>,\n\t\t\t\t  Z1, Z2, F@_1, F@_2, TrUserData) ->\n    d_field_reconnect_info_backoff_ms(Rest, Z1, Z2, F@_1,\n\t\t\t\t      F@_2, TrUserData);\ndfp_read_field_def_reconnect_info(<<>>, 0, 0, F@_1, R1,\n\t\t\t\t  TrUserData) ->\n    #{passed => F@_1,\n      backoff_ms => lists_reverse(R1, TrUserData)};\ndfp_read_field_def_reconnect_info(Other, Z1, Z2, F@_1,\n\t\t\t\t  F@_2, TrUserData) ->\n    dg_read_field_def_reconnect_info(Other, Z1, Z2, F@_1,\n\t\t\t\t     F@_2, TrUserData).\n\ndg_read_field_def_reconnect_info(<<1:1, X:7,\n\t\t\t\t   Rest/binary>>,\n\t\t\t\t N, Acc, F@_1, F@_2, TrUserData)\n    when N < 32 - 7 ->\n    dg_read_field_def_reconnect_info(Rest, N + 7,\n\t\t\t\t     X bsl N + Acc, F@_1, F@_2, TrUserData);\ndg_read_field_def_reconnect_info(<<0:1, X:7,\n\t\t\t\t   Rest/binary>>,\n\t\t\t\t N, Acc, F@_1, F@_2, TrUserData) ->\n    Key = X bsl N + Acc,\n    case Key of\n      8 ->\n\t  d_field_reconnect_info_passed(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t\tTrUserData);\n      18 ->\n\t  d_pfield_reconnect_info_backoff_ms(Rest, 0, 0, F@_1,\n\t\t\t\t\t     F@_2, TrUserData);\n      16 ->\n\t  d_field_reconnect_info_backoff_ms(Rest, 0, 0, F@_1,\n\t\t\t\t\t    F@_2, TrUserData);\n      _ ->\n\t  case Key band 7 of\n\t    0 ->\n\t\tskip_varint_reconnect_info(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t\t   TrUserData);\n\t    1 ->\n\t\tskip_64_reconnect_info(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t       TrUserData);\n\t    2 ->\n\t\tskip_length_delimited_reconnect_info(Rest, 0, 0, F@_1,\n\t\t\t\t\t\t     F@_2, TrUserData);\n\t    3 ->\n\t\tskip_group_reconnect_info(Rest, Key bsr 3, 0, F@_1,\n\t\t\t\t\t  F@_2, TrUserData);\n\t    5 ->\n\t\tskip_32_reconnect_info(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t       TrUserData)\n\t  end\n    end;\ndg_read_field_def_reconnect_info(<<>>, 0, 0, F@_1, R1,\n\t\t\t\t TrUserData) ->\n    #{passed => F@_1,\n      backoff_ms => lists_reverse(R1, TrUserData)}.\n\nd_field_reconnect_info_passed(<<1:1, X:7, Rest/binary>>,\n\t\t\t      N, Acc, F@_1, F@_2, TrUserData)\n    when N < 57 ->\n    d_field_reconnect_info_passed(Rest, N + 7,\n\t\t\t\t  X bsl N + Acc, F@_1, F@_2, TrUserData);\nd_field_reconnect_info_passed(<<0:1, X:7, Rest/binary>>,\n\t\t\t      N, Acc, _, F@_2, TrUserData) ->\n    {NewFValue, RestF} = {id(X bsl N + Acc =/= 0,\n\t\t\t     TrUserData),\n\t\t\t  Rest},\n    dfp_read_field_def_reconnect_info(RestF, 0, 0,\n\t\t\t\t      NewFValue, F@_2, TrUserData).\n\nd_field_reconnect_info_backoff_ms(<<1:1, X:7,\n\t\t\t\t    Rest/binary>>,\n\t\t\t\t  N, Acc, F@_1, F@_2, TrUserData)\n    when N < 57 ->\n    d_field_reconnect_info_backoff_ms(Rest, N + 7,\n\t\t\t\t      X bsl N + Acc, F@_1, F@_2, TrUserData);\nd_field_reconnect_info_backoff_ms(<<0:1, X:7,\n\t\t\t\t    Rest/binary>>,\n\t\t\t\t  N, Acc, F@_1, Prev, TrUserData) ->\n    {NewFValue, RestF} = {begin\n\t\t\t    <<Res:32/signed-native>> = <<(X bsl N +\n\t\t\t\t\t\t\t    Acc):32/unsigned-native>>,\n\t\t\t    id(Res, TrUserData)\n\t\t\t  end,\n\t\t\t  Rest},\n    dfp_read_field_def_reconnect_info(RestF, 0, 0, F@_1,\n\t\t\t\t      cons(NewFValue, Prev, TrUserData),\n\t\t\t\t      TrUserData).\n\nd_pfield_reconnect_info_backoff_ms(<<1:1, X:7,\n\t\t\t\t     Rest/binary>>,\n\t\t\t\t   N, Acc, F@_1, F@_2, TrUserData)\n    when N < 57 ->\n    d_pfield_reconnect_info_backoff_ms(Rest, N + 7,\n\t\t\t\t       X bsl N + Acc, F@_1, F@_2, TrUserData);\nd_pfield_reconnect_info_backoff_ms(<<0:1, X:7,\n\t\t\t\t     Rest/binary>>,\n\t\t\t\t   N, Acc, F@_1, E, TrUserData) ->\n    Len = X bsl N + Acc,\n    <<PackedBytes:Len/binary, Rest2/binary>> = Rest,\n    NewSeq =\n\td_packed_field_reconnect_info_backoff_ms(PackedBytes, 0,\n\t\t\t\t\t\t 0, E, TrUserData),\n    dfp_read_field_def_reconnect_info(Rest2, 0, 0, F@_1,\n\t\t\t\t      NewSeq, TrUserData).\n\nd_packed_field_reconnect_info_backoff_ms(<<1:1, X:7,\n\t\t\t\t\t   Rest/binary>>,\n\t\t\t\t\t N, Acc, AccSeq, TrUserData)\n    when N < 57 ->\n    d_packed_field_reconnect_info_backoff_ms(Rest, N + 7,\n\t\t\t\t\t     X bsl N + Acc, AccSeq, TrUserData);\nd_packed_field_reconnect_info_backoff_ms(<<0:1, X:7,\n\t\t\t\t\t   Rest/binary>>,\n\t\t\t\t\t N, Acc, AccSeq, TrUserData) ->\n    {NewFValue, RestF} = {begin\n\t\t\t    <<Res:32/signed-native>> = <<(X bsl N +\n\t\t\t\t\t\t\t    Acc):32/unsigned-native>>,\n\t\t\t    id(Res, TrUserData)\n\t\t\t  end,\n\t\t\t  Rest},\n    d_packed_field_reconnect_info_backoff_ms(RestF, 0, 0,\n\t\t\t\t\t     [NewFValue | AccSeq], TrUserData);\nd_packed_field_reconnect_info_backoff_ms(<<>>, 0, 0,\n\t\t\t\t\t AccSeq, _) ->\n    AccSeq.\n\nskip_varint_reconnect_info(<<1:1, _:7, Rest/binary>>,\n\t\t\t   Z1, Z2, F@_1, F@_2, TrUserData) ->\n    skip_varint_reconnect_info(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t       TrUserData);\nskip_varint_reconnect_info(<<0:1, _:7, Rest/binary>>,\n\t\t\t   Z1, Z2, F@_1, F@_2, TrUserData) ->\n    dfp_read_field_def_reconnect_info(Rest, Z1, Z2, F@_1,\n\t\t\t\t      F@_2, TrUserData).\n\nskip_length_delimited_reconnect_info(<<1:1, X:7,\n\t\t\t\t       Rest/binary>>,\n\t\t\t\t     N, Acc, F@_1, F@_2, TrUserData)\n    when N < 57 ->\n    skip_length_delimited_reconnect_info(Rest, N + 7,\n\t\t\t\t\t X bsl N + Acc, F@_1, F@_2, TrUserData);\nskip_length_delimited_reconnect_info(<<0:1, X:7,\n\t\t\t\t       Rest/binary>>,\n\t\t\t\t     N, Acc, F@_1, F@_2, TrUserData) ->\n    Length = X bsl N + Acc,\n    <<_:Length/binary, Rest2/binary>> = Rest,\n    dfp_read_field_def_reconnect_info(Rest2, 0, 0, F@_1,\n\t\t\t\t      F@_2, TrUserData).\n\nskip_group_reconnect_info(Bin, FNum, Z2, F@_1, F@_2,\n\t\t\t  TrUserData) ->\n    {_, Rest} = read_group(Bin, FNum),\n    dfp_read_field_def_reconnect_info(Rest, 0, Z2, F@_1,\n\t\t\t\t      F@_2, TrUserData).\n\nskip_32_reconnect_info(<<_:32, Rest/binary>>, Z1, Z2,\n\t\t       F@_1, F@_2, TrUserData) ->\n    dfp_read_field_def_reconnect_info(Rest, Z1, Z2, F@_1,\n\t\t\t\t      F@_2, TrUserData).\n\nskip_64_reconnect_info(<<_:64, Rest/binary>>, Z1, Z2,\n\t\t       F@_1, F@_2, TrUserData) ->\n    dfp_read_field_def_reconnect_info(Rest, Z1, Z2, F@_1,\n\t\t\t\t      F@_2, TrUserData).\n\n'd_enum_grpc.testing.PayloadType'(0) -> 'COMPRESSABLE';\n'd_enum_grpc.testing.PayloadType'(V) -> V.\n\nread_group(Bin, FieldNum) ->\n    {NumBytes, EndTagLen} = read_gr_b(Bin, 0, 0, 0, 0, FieldNum),\n    <<Group:NumBytes/binary, _:EndTagLen/binary, Rest/binary>> = Bin,\n    {Group, Rest}.\n\n%% Like skipping over fields, but record the total length,\n%% Each field is <(FieldNum bsl 3) bor FieldType> ++ <FieldValue>\n%% Record the length because varints may be non-optimally encoded.\n%%\n%% Groups can be nested, but assume the same FieldNum cannot be nested\n%% because group field numbers are shared with the rest of the fields\n%% numbers. Thus we can search just for an group-end with the same\n%% field number.\n%%\n%% (The only time the same group field number could occur would\n%% be in a nested sub message, but then it would be inside a\n%% length-delimited entry, which we skip-read by length.)\nread_gr_b(<<1:1, X:7, Tl/binary>>, N, Acc, NumBytes, TagLen, FieldNum)\n  when N < (32-7) ->\n    read_gr_b(Tl, N+7, X bsl N + Acc, NumBytes, TagLen+1, FieldNum);\nread_gr_b(<<0:1, X:7, Tl/binary>>, N, Acc, NumBytes, TagLen,\n          FieldNum) ->\n    Key = X bsl N + Acc,\n    TagLen1 = TagLen + 1,\n    case {Key bsr 3, Key band 7} of\n        {FieldNum, 4} -> % 4 = group_end\n            {NumBytes, TagLen1};\n        {_, 0} -> % 0 = varint\n            read_gr_vi(Tl, 0, NumBytes + TagLen1, FieldNum);\n        {_, 1} -> % 1 = bits64\n            <<_:64, Tl2/binary>> = Tl,\n            read_gr_b(Tl2, 0, 0, NumBytes + TagLen1 + 8, 0, FieldNum);\n        {_, 2} -> % 2 = length_delimited\n            read_gr_ld(Tl, 0, 0, NumBytes + TagLen1, FieldNum);\n        {_, 3} -> % 3 = group_start\n            read_gr_b(Tl, 0, 0, NumBytes + TagLen1, 0, FieldNum);\n        {_, 4} -> % 4 = group_end\n            read_gr_b(Tl, 0, 0, NumBytes + TagLen1, 0, FieldNum);\n        {_, 5} -> % 5 = bits32\n            <<_:32, Tl2/binary>> = Tl,\n            read_gr_b(Tl2, 0, 0, NumBytes + TagLen1 + 4, 0, FieldNum)\n    end.\n\nread_gr_vi(<<1:1, _:7, Tl/binary>>, N, NumBytes, FieldNum)\n  when N < (64-7) ->\n    read_gr_vi(Tl, N+7, NumBytes+1, FieldNum);\nread_gr_vi(<<0:1, _:7, Tl/binary>>, _, NumBytes, FieldNum) ->\n    read_gr_b(Tl, 0, 0, NumBytes+1, 0, FieldNum).\n\nread_gr_ld(<<1:1, X:7, Tl/binary>>, N, Acc, NumBytes, FieldNum)\n  when N < (64-7) ->\n    read_gr_ld(Tl, N+7, X bsl N + Acc, NumBytes+1, FieldNum);\nread_gr_ld(<<0:1, X:7, Tl/binary>>, N, Acc, NumBytes, FieldNum) ->\n    Len = X bsl N + Acc,\n    NumBytes1 = NumBytes + 1,\n    <<_:Len/binary, Tl2/binary>> = Tl,\n    read_gr_b(Tl2, 0, 0, NumBytes1 + Len, 0, FieldNum).\n\nmerge_msgs(Prev, New, MsgName) when is_atom(MsgName) ->\n    merge_msgs(Prev, New, MsgName, []).\n\nmerge_msgs(Prev, New, MsgName, Opts) ->\n    TrUserData = proplists:get_value(user_data, Opts),\n    case MsgName of\n      bool_value ->\n\t  merge_msg_bool_value(Prev, New, TrUserData);\n      payload -> merge_msg_payload(Prev, New, TrUserData);\n      echo_status ->\n\t  merge_msg_echo_status(Prev, New, TrUserData);\n      simple_request ->\n\t  merge_msg_simple_request(Prev, New, TrUserData);\n      simple_response ->\n\t  merge_msg_simple_response(Prev, New, TrUserData);\n      streaming_input_call_request ->\n\t  merge_msg_streaming_input_call_request(Prev, New,\n\t\t\t\t\t\t TrUserData);\n      streaming_input_call_response ->\n\t  merge_msg_streaming_input_call_response(Prev, New,\n\t\t\t\t\t\t  TrUserData);\n      response_parameters ->\n\t  merge_msg_response_parameters(Prev, New, TrUserData);\n      streaming_output_call_request ->\n\t  merge_msg_streaming_output_call_request(Prev, New,\n\t\t\t\t\t\t  TrUserData);\n      streaming_output_call_response ->\n\t  merge_msg_streaming_output_call_response(Prev, New,\n\t\t\t\t\t\t   TrUserData);\n      reconnect_params ->\n\t  merge_msg_reconnect_params(Prev, New, TrUserData);\n      reconnect_info ->\n\t  merge_msg_reconnect_info(Prev, New, TrUserData)\n    end.\n\n-compile({nowarn_unused_function,merge_msg_bool_value/3}).\nmerge_msg_bool_value(PMsg, NMsg, _) ->\n    S1 = #{},\n    case {PMsg, NMsg} of\n      {_, #{value := NFvalue}} -> S1#{value => NFvalue};\n      {#{value := PFvalue}, _} -> S1#{value => PFvalue};\n      _ -> S1\n    end.\n\n-compile({nowarn_unused_function,merge_msg_payload/3}).\nmerge_msg_payload(PMsg, NMsg, _) ->\n    S1 = #{},\n    S2 = case {PMsg, NMsg} of\n\t   {_, #{type := NFtype}} -> S1#{type => NFtype};\n\t   {#{type := PFtype}, _} -> S1#{type => PFtype};\n\t   _ -> S1\n\t end,\n    case {PMsg, NMsg} of\n      {_, #{body := NFbody}} -> S2#{body => NFbody};\n      {#{body := PFbody}, _} -> S2#{body => PFbody};\n      _ -> S2\n    end.\n\n-compile({nowarn_unused_function,merge_msg_echo_status/3}).\nmerge_msg_echo_status(PMsg, NMsg, _) ->\n    S1 = #{},\n    S2 = case {PMsg, NMsg} of\n\t   {_, #{code := NFcode}} -> S1#{code => NFcode};\n\t   {#{code := PFcode}, _} -> S1#{code => PFcode};\n\t   _ -> S1\n\t end,\n    case {PMsg, NMsg} of\n      {_, #{message := NFmessage}} ->\n\t  S2#{message => NFmessage};\n      {#{message := PFmessage}, _} ->\n\t  S2#{message => PFmessage};\n      _ -> S2\n    end.\n\n-compile({nowarn_unused_function,merge_msg_simple_request/3}).\nmerge_msg_simple_request(PMsg, NMsg, TrUserData) ->\n    S1 = #{},\n    S2 = case {PMsg, NMsg} of\n\t   {_, #{response_type := NFresponse_type}} ->\n\t       S1#{response_type => NFresponse_type};\n\t   {#{response_type := PFresponse_type}, _} ->\n\t       S1#{response_type => PFresponse_type};\n\t   _ -> S1\n\t end,\n    S3 = case {PMsg, NMsg} of\n\t   {_, #{response_size := NFresponse_size}} ->\n\t       S2#{response_size => NFresponse_size};\n\t   {#{response_size := PFresponse_size}, _} ->\n\t       S2#{response_size => PFresponse_size};\n\t   _ -> S2\n\t end,\n    S4 = case {PMsg, NMsg} of\n\t   {#{payload := PFpayload}, #{payload := NFpayload}} ->\n\t       S3#{payload =>\n\t\t       merge_msg_payload(PFpayload, NFpayload, TrUserData)};\n\t   {_, #{payload := NFpayload}} ->\n\t       S3#{payload => NFpayload};\n\t   {#{payload := PFpayload}, _} ->\n\t       S3#{payload => PFpayload};\n\t   {_, _} -> S3\n\t end,\n    S5 = case {PMsg, NMsg} of\n\t   {_, #{fill_username := NFfill_username}} ->\n\t       S4#{fill_username => NFfill_username};\n\t   {#{fill_username := PFfill_username}, _} ->\n\t       S4#{fill_username => PFfill_username};\n\t   _ -> S4\n\t end,\n    S6 = case {PMsg, NMsg} of\n\t   {_, #{fill_oauth_scope := NFfill_oauth_scope}} ->\n\t       S5#{fill_oauth_scope => NFfill_oauth_scope};\n\t   {#{fill_oauth_scope := PFfill_oauth_scope}, _} ->\n\t       S5#{fill_oauth_scope => PFfill_oauth_scope};\n\t   _ -> S5\n\t end,\n    S7 = case {PMsg, NMsg} of\n\t   {#{response_compressed := PFresponse_compressed},\n\t    #{response_compressed := NFresponse_compressed}} ->\n\t       S6#{response_compressed =>\n\t\t       merge_msg_bool_value(PFresponse_compressed,\n\t\t\t\t\t    NFresponse_compressed, TrUserData)};\n\t   {_, #{response_compressed := NFresponse_compressed}} ->\n\t       S6#{response_compressed => NFresponse_compressed};\n\t   {#{response_compressed := PFresponse_compressed}, _} ->\n\t       S6#{response_compressed => PFresponse_compressed};\n\t   {_, _} -> S6\n\t end,\n    S8 = case {PMsg, NMsg} of\n\t   {#{response_status := PFresponse_status},\n\t    #{response_status := NFresponse_status}} ->\n\t       S7#{response_status =>\n\t\t       merge_msg_echo_status(PFresponse_status,\n\t\t\t\t\t     NFresponse_status, TrUserData)};\n\t   {_, #{response_status := NFresponse_status}} ->\n\t       S7#{response_status => NFresponse_status};\n\t   {#{response_status := PFresponse_status}, _} ->\n\t       S7#{response_status => PFresponse_status};\n\t   {_, _} -> S7\n\t end,\n    case {PMsg, NMsg} of\n      {#{expect_compressed := PFexpect_compressed},\n       #{expect_compressed := NFexpect_compressed}} ->\n\t  S8#{expect_compressed =>\n\t\t  merge_msg_bool_value(PFexpect_compressed,\n\t\t\t\t       NFexpect_compressed, TrUserData)};\n      {_, #{expect_compressed := NFexpect_compressed}} ->\n\t  S8#{expect_compressed => NFexpect_compressed};\n      {#{expect_compressed := PFexpect_compressed}, _} ->\n\t  S8#{expect_compressed => PFexpect_compressed};\n      {_, _} -> S8\n    end.\n\n-compile({nowarn_unused_function,merge_msg_simple_response/3}).\nmerge_msg_simple_response(PMsg, NMsg, TrUserData) ->\n    S1 = #{},\n    S2 = case {PMsg, NMsg} of\n\t   {#{payload := PFpayload}, #{payload := NFpayload}} ->\n\t       S1#{payload =>\n\t\t       merge_msg_payload(PFpayload, NFpayload, TrUserData)};\n\t   {_, #{payload := NFpayload}} ->\n\t       S1#{payload => NFpayload};\n\t   {#{payload := PFpayload}, _} ->\n\t       S1#{payload => PFpayload};\n\t   {_, _} -> S1\n\t end,\n    S3 = case {PMsg, NMsg} of\n\t   {_, #{username := NFusername}} ->\n\t       S2#{username => NFusername};\n\t   {#{username := PFusername}, _} ->\n\t       S2#{username => PFusername};\n\t   _ -> S2\n\t end,\n    case {PMsg, NMsg} of\n      {_, #{oauth_scope := NFoauth_scope}} ->\n\t  S3#{oauth_scope => NFoauth_scope};\n      {#{oauth_scope := PFoauth_scope}, _} ->\n\t  S3#{oauth_scope => PFoauth_scope};\n      _ -> S3\n    end.\n\n-compile({nowarn_unused_function,merge_msg_streaming_input_call_request/3}).\nmerge_msg_streaming_input_call_request(PMsg, NMsg,\n\t\t\t\t       TrUserData) ->\n    S1 = #{},\n    S2 = case {PMsg, NMsg} of\n\t   {#{payload := PFpayload}, #{payload := NFpayload}} ->\n\t       S1#{payload =>\n\t\t       merge_msg_payload(PFpayload, NFpayload, TrUserData)};\n\t   {_, #{payload := NFpayload}} ->\n\t       S1#{payload => NFpayload};\n\t   {#{payload := PFpayload}, _} ->\n\t       S1#{payload => PFpayload};\n\t   {_, _} -> S1\n\t end,\n    case {PMsg, NMsg} of\n      {#{expect_compressed := PFexpect_compressed},\n       #{expect_compressed := NFexpect_compressed}} ->\n\t  S2#{expect_compressed =>\n\t\t  merge_msg_bool_value(PFexpect_compressed,\n\t\t\t\t       NFexpect_compressed, TrUserData)};\n      {_, #{expect_compressed := NFexpect_compressed}} ->\n\t  S2#{expect_compressed => NFexpect_compressed};\n      {#{expect_compressed := PFexpect_compressed}, _} ->\n\t  S2#{expect_compressed => PFexpect_compressed};\n      {_, _} -> S2\n    end.\n\n-compile({nowarn_unused_function,merge_msg_streaming_input_call_response/3}).\nmerge_msg_streaming_input_call_response(PMsg, NMsg,\n\t\t\t\t\t_) ->\n    S1 = #{},\n    case {PMsg, NMsg} of\n      {_,\n       #{aggregated_payload_size :=\n\t     NFaggregated_payload_size}} ->\n\t  S1#{aggregated_payload_size =>\n\t\t  NFaggregated_payload_size};\n      {#{aggregated_payload_size :=\n\t     PFaggregated_payload_size},\n       _} ->\n\t  S1#{aggregated_payload_size =>\n\t\t  PFaggregated_payload_size};\n      _ -> S1\n    end.\n\n-compile({nowarn_unused_function,merge_msg_response_parameters/3}).\nmerge_msg_response_parameters(PMsg, NMsg, TrUserData) ->\n    S1 = #{},\n    S2 = case {PMsg, NMsg} of\n\t   {_, #{size := NFsize}} -> S1#{size => NFsize};\n\t   {#{size := PFsize}, _} -> S1#{size => PFsize};\n\t   _ -> S1\n\t end,\n    S3 = case {PMsg, NMsg} of\n\t   {_, #{interval_us := NFinterval_us}} ->\n\t       S2#{interval_us => NFinterval_us};\n\t   {#{interval_us := PFinterval_us}, _} ->\n\t       S2#{interval_us => PFinterval_us};\n\t   _ -> S2\n\t end,\n    case {PMsg, NMsg} of\n      {#{compressed := PFcompressed},\n       #{compressed := NFcompressed}} ->\n\t  S3#{compressed =>\n\t\t  merge_msg_bool_value(PFcompressed, NFcompressed,\n\t\t\t\t       TrUserData)};\n      {_, #{compressed := NFcompressed}} ->\n\t  S3#{compressed => NFcompressed};\n      {#{compressed := PFcompressed}, _} ->\n\t  S3#{compressed => PFcompressed};\n      {_, _} -> S3\n    end.\n\n-compile({nowarn_unused_function,merge_msg_streaming_output_call_request/3}).\nmerge_msg_streaming_output_call_request(PMsg, NMsg,\n\t\t\t\t\tTrUserData) ->\n    S1 = #{},\n    S2 = case {PMsg, NMsg} of\n\t   {_, #{response_type := NFresponse_type}} ->\n\t       S1#{response_type => NFresponse_type};\n\t   {#{response_type := PFresponse_type}, _} ->\n\t       S1#{response_type => PFresponse_type};\n\t   _ -> S1\n\t end,\n    S3 = case {PMsg, NMsg} of\n\t   {#{response_parameters := PFresponse_parameters},\n\t    #{response_parameters := NFresponse_parameters}} ->\n\t       S2#{response_parameters =>\n\t\t       'erlang_++'(PFresponse_parameters,\n\t\t\t\t   NFresponse_parameters, TrUserData)};\n\t   {_, #{response_parameters := NFresponse_parameters}} ->\n\t       S2#{response_parameters => NFresponse_parameters};\n\t   {#{response_parameters := PFresponse_parameters}, _} ->\n\t       S2#{response_parameters => PFresponse_parameters};\n\t   {_, _} -> S2\n\t end,\n    S4 = case {PMsg, NMsg} of\n\t   {#{payload := PFpayload}, #{payload := NFpayload}} ->\n\t       S3#{payload =>\n\t\t       merge_msg_payload(PFpayload, NFpayload, TrUserData)};\n\t   {_, #{payload := NFpayload}} ->\n\t       S3#{payload => NFpayload};\n\t   {#{payload := PFpayload}, _} ->\n\t       S3#{payload => PFpayload};\n\t   {_, _} -> S3\n\t end,\n    case {PMsg, NMsg} of\n      {#{response_status := PFresponse_status},\n       #{response_status := NFresponse_status}} ->\n\t  S4#{response_status =>\n\t\t  merge_msg_echo_status(PFresponse_status,\n\t\t\t\t\tNFresponse_status, TrUserData)};\n      {_, #{response_status := NFresponse_status}} ->\n\t  S4#{response_status => NFresponse_status};\n      {#{response_status := PFresponse_status}, _} ->\n\t  S4#{response_status => PFresponse_status};\n      {_, _} -> S4\n    end.\n\n-compile({nowarn_unused_function,merge_msg_streaming_output_call_response/3}).\nmerge_msg_streaming_output_call_response(PMsg, NMsg,\n\t\t\t\t\t TrUserData) ->\n    S1 = #{},\n    case {PMsg, NMsg} of\n      {#{payload := PFpayload}, #{payload := NFpayload}} ->\n\t  S1#{payload =>\n\t\t  merge_msg_payload(PFpayload, NFpayload, TrUserData)};\n      {_, #{payload := NFpayload}} ->\n\t  S1#{payload => NFpayload};\n      {#{payload := PFpayload}, _} ->\n\t  S1#{payload => PFpayload};\n      {_, _} -> S1\n    end.\n\n-compile({nowarn_unused_function,merge_msg_reconnect_params/3}).\nmerge_msg_reconnect_params(PMsg, NMsg, _) ->\n    S1 = #{},\n    case {PMsg, NMsg} of\n      {_,\n       #{max_reconnect_backoff_ms :=\n\t     NFmax_reconnect_backoff_ms}} ->\n\t  S1#{max_reconnect_backoff_ms =>\n\t\t  NFmax_reconnect_backoff_ms};\n      {#{max_reconnect_backoff_ms :=\n\t     PFmax_reconnect_backoff_ms},\n       _} ->\n\t  S1#{max_reconnect_backoff_ms =>\n\t\t  PFmax_reconnect_backoff_ms};\n      _ -> S1\n    end.\n\n-compile({nowarn_unused_function,merge_msg_reconnect_info/3}).\nmerge_msg_reconnect_info(PMsg, NMsg, TrUserData) ->\n    S1 = #{},\n    S2 = case {PMsg, NMsg} of\n\t   {_, #{passed := NFpassed}} -> S1#{passed => NFpassed};\n\t   {#{passed := PFpassed}, _} -> S1#{passed => PFpassed};\n\t   _ -> S1\n\t end,\n    case {PMsg, NMsg} of\n      {#{backoff_ms := PFbackoff_ms},\n       #{backoff_ms := NFbackoff_ms}} ->\n\t  S2#{backoff_ms =>\n\t\t  'erlang_++'(PFbackoff_ms, NFbackoff_ms, TrUserData)};\n      {_, #{backoff_ms := NFbackoff_ms}} ->\n\t  S2#{backoff_ms => NFbackoff_ms};\n      {#{backoff_ms := PFbackoff_ms}, _} ->\n\t  S2#{backoff_ms => PFbackoff_ms};\n      {_, _} -> S2\n    end.\n\n\nverify_msg(Msg, MsgName) when is_atom(MsgName) ->\n    verify_msg(Msg, MsgName, []).\n\nverify_msg(Msg, MsgName, Opts) ->\n    TrUserData = proplists:get_value(user_data, Opts),\n    case MsgName of\n      bool_value ->\n\t  v_msg_bool_value(Msg, [MsgName], TrUserData);\n      payload -> v_msg_payload(Msg, [MsgName], TrUserData);\n      echo_status ->\n\t  v_msg_echo_status(Msg, [MsgName], TrUserData);\n      simple_request ->\n\t  v_msg_simple_request(Msg, [MsgName], TrUserData);\n      simple_response ->\n\t  v_msg_simple_response(Msg, [MsgName], TrUserData);\n      streaming_input_call_request ->\n\t  v_msg_streaming_input_call_request(Msg, [MsgName],\n\t\t\t\t\t     TrUserData);\n      streaming_input_call_response ->\n\t  v_msg_streaming_input_call_response(Msg, [MsgName],\n\t\t\t\t\t      TrUserData);\n      response_parameters ->\n\t  v_msg_response_parameters(Msg, [MsgName], TrUserData);\n      streaming_output_call_request ->\n\t  v_msg_streaming_output_call_request(Msg, [MsgName],\n\t\t\t\t\t      TrUserData);\n      streaming_output_call_response ->\n\t  v_msg_streaming_output_call_response(Msg, [MsgName],\n\t\t\t\t\t       TrUserData);\n      reconnect_params ->\n\t  v_msg_reconnect_params(Msg, [MsgName], TrUserData);\n      reconnect_info ->\n\t  v_msg_reconnect_info(Msg, [MsgName], TrUserData);\n      _ -> mk_type_error(not_a_known_message, Msg, [])\n    end.\n\n\n-compile({nowarn_unused_function,v_msg_bool_value/3}).\n-dialyzer({nowarn_function,v_msg_bool_value/3}).\nv_msg_bool_value(#{} = M, Path, TrUserData) ->\n    case M of\n      #{value := F1} ->\n\t  v_type_bool(F1, [value | Path], TrUserData);\n      _ -> ok\n    end,\n    lists:foreach(fun (value) -> ok;\n\t\t      (OtherKey) ->\n\t\t\t  mk_type_error({extraneous_key, OtherKey}, M, Path)\n\t\t  end,\n\t\t  maps:keys(M)),\n    ok;\nv_msg_bool_value(M, Path, _TrUserData) when is_map(M) ->\n    mk_type_error({missing_fields, [] -- maps:keys(M),\n\t\t   bool_value},\n\t\t  M, Path);\nv_msg_bool_value(X, Path, _TrUserData) ->\n    mk_type_error({expected_msg, bool_value}, X, Path).\n\n-compile({nowarn_unused_function,v_msg_payload/3}).\n-dialyzer({nowarn_function,v_msg_payload/3}).\nv_msg_payload(#{} = M, Path, TrUserData) ->\n    case M of\n      #{type := F1} ->\n\t  'v_enum_grpc.testing.PayloadType'(F1, [type | Path],\n\t\t\t\t\t    TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{body := F2} ->\n\t  v_type_bytes(F2, [body | Path], TrUserData);\n      _ -> ok\n    end,\n    lists:foreach(fun (type) -> ok;\n\t\t      (body) -> ok;\n\t\t      (OtherKey) ->\n\t\t\t  mk_type_error({extraneous_key, OtherKey}, M, Path)\n\t\t  end,\n\t\t  maps:keys(M)),\n    ok;\nv_msg_payload(M, Path, _TrUserData) when is_map(M) ->\n    mk_type_error({missing_fields, [] -- maps:keys(M),\n\t\t   payload},\n\t\t  M, Path);\nv_msg_payload(X, Path, _TrUserData) ->\n    mk_type_error({expected_msg, payload}, X, Path).\n\n-compile({nowarn_unused_function,v_msg_echo_status/3}).\n-dialyzer({nowarn_function,v_msg_echo_status/3}).\nv_msg_echo_status(#{} = M, Path, TrUserData) ->\n    case M of\n      #{code := F1} ->\n\t  v_type_int32(F1, [code | Path], TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{message := F2} ->\n\t  v_type_string(F2, [message | Path], TrUserData);\n      _ -> ok\n    end,\n    lists:foreach(fun (code) -> ok;\n\t\t      (message) -> ok;\n\t\t      (OtherKey) ->\n\t\t\t  mk_type_error({extraneous_key, OtherKey}, M, Path)\n\t\t  end,\n\t\t  maps:keys(M)),\n    ok;\nv_msg_echo_status(M, Path, _TrUserData)\n    when is_map(M) ->\n    mk_type_error({missing_fields, [] -- maps:keys(M),\n\t\t   echo_status},\n\t\t  M, Path);\nv_msg_echo_status(X, Path, _TrUserData) ->\n    mk_type_error({expected_msg, echo_status}, X, Path).\n\n-compile({nowarn_unused_function,v_msg_simple_request/3}).\n-dialyzer({nowarn_function,v_msg_simple_request/3}).\nv_msg_simple_request(#{} = M, Path, TrUserData) ->\n    case M of\n      #{response_type := F1} ->\n\t  'v_enum_grpc.testing.PayloadType'(F1,\n\t\t\t\t\t    [response_type | Path], TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{response_size := F2} ->\n\t  v_type_int32(F2, [response_size | Path], TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{payload := F3} ->\n\t  v_msg_payload(F3, [payload | Path], TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{fill_username := F4} ->\n\t  v_type_bool(F4, [fill_username | Path], TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{fill_oauth_scope := F5} ->\n\t  v_type_bool(F5, [fill_oauth_scope | Path], TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{response_compressed := F6} ->\n\t  v_msg_bool_value(F6, [response_compressed | Path],\n\t\t\t   TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{response_status := F7} ->\n\t  v_msg_echo_status(F7, [response_status | Path],\n\t\t\t    TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{expect_compressed := F8} ->\n\t  v_msg_bool_value(F8, [expect_compressed | Path],\n\t\t\t   TrUserData);\n      _ -> ok\n    end,\n    lists:foreach(fun (response_type) -> ok;\n\t\t      (response_size) -> ok;\n\t\t      (payload) -> ok;\n\t\t      (fill_username) -> ok;\n\t\t      (fill_oauth_scope) -> ok;\n\t\t      (response_compressed) -> ok;\n\t\t      (response_status) -> ok;\n\t\t      (expect_compressed) -> ok;\n\t\t      (OtherKey) ->\n\t\t\t  mk_type_error({extraneous_key, OtherKey}, M, Path)\n\t\t  end,\n\t\t  maps:keys(M)),\n    ok;\nv_msg_simple_request(M, Path, _TrUserData)\n    when is_map(M) ->\n    mk_type_error({missing_fields, [] -- maps:keys(M),\n\t\t   simple_request},\n\t\t  M, Path);\nv_msg_simple_request(X, Path, _TrUserData) ->\n    mk_type_error({expected_msg, simple_request}, X, Path).\n\n-compile({nowarn_unused_function,v_msg_simple_response/3}).\n-dialyzer({nowarn_function,v_msg_simple_response/3}).\nv_msg_simple_response(#{} = M, Path, TrUserData) ->\n    case M of\n      #{payload := F1} ->\n\t  v_msg_payload(F1, [payload | Path], TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{username := F2} ->\n\t  v_type_string(F2, [username | Path], TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{oauth_scope := F3} ->\n\t  v_type_string(F3, [oauth_scope | Path], TrUserData);\n      _ -> ok\n    end,\n    lists:foreach(fun (payload) -> ok;\n\t\t      (username) -> ok;\n\t\t      (oauth_scope) -> ok;\n\t\t      (OtherKey) ->\n\t\t\t  mk_type_error({extraneous_key, OtherKey}, M, Path)\n\t\t  end,\n\t\t  maps:keys(M)),\n    ok;\nv_msg_simple_response(M, Path, _TrUserData)\n    when is_map(M) ->\n    mk_type_error({missing_fields, [] -- maps:keys(M),\n\t\t   simple_response},\n\t\t  M, Path);\nv_msg_simple_response(X, Path, _TrUserData) ->\n    mk_type_error({expected_msg, simple_response}, X, Path).\n\n-compile({nowarn_unused_function,v_msg_streaming_input_call_request/3}).\n-dialyzer({nowarn_function,v_msg_streaming_input_call_request/3}).\nv_msg_streaming_input_call_request(#{} = M, Path,\n\t\t\t\t   TrUserData) ->\n    case M of\n      #{payload := F1} ->\n\t  v_msg_payload(F1, [payload | Path], TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{expect_compressed := F2} ->\n\t  v_msg_bool_value(F2, [expect_compressed | Path],\n\t\t\t   TrUserData);\n      _ -> ok\n    end,\n    lists:foreach(fun (payload) -> ok;\n\t\t      (expect_compressed) -> ok;\n\t\t      (OtherKey) ->\n\t\t\t  mk_type_error({extraneous_key, OtherKey}, M, Path)\n\t\t  end,\n\t\t  maps:keys(M)),\n    ok;\nv_msg_streaming_input_call_request(M, Path, _TrUserData)\n    when is_map(M) ->\n    mk_type_error({missing_fields, [] -- maps:keys(M),\n\t\t   streaming_input_call_request},\n\t\t  M, Path);\nv_msg_streaming_input_call_request(X, Path,\n\t\t\t\t   _TrUserData) ->\n    mk_type_error({expected_msg,\n\t\t   streaming_input_call_request},\n\t\t  X, Path).\n\n-compile({nowarn_unused_function,v_msg_streaming_input_call_response/3}).\n-dialyzer({nowarn_function,v_msg_streaming_input_call_response/3}).\nv_msg_streaming_input_call_response(#{} = M, Path,\n\t\t\t\t    TrUserData) ->\n    case M of\n      #{aggregated_payload_size := F1} ->\n\t  v_type_int32(F1, [aggregated_payload_size | Path],\n\t\t       TrUserData);\n      _ -> ok\n    end,\n    lists:foreach(fun (aggregated_payload_size) -> ok;\n\t\t      (OtherKey) ->\n\t\t\t  mk_type_error({extraneous_key, OtherKey}, M, Path)\n\t\t  end,\n\t\t  maps:keys(M)),\n    ok;\nv_msg_streaming_input_call_response(M, Path,\n\t\t\t\t    _TrUserData)\n    when is_map(M) ->\n    mk_type_error({missing_fields, [] -- maps:keys(M),\n\t\t   streaming_input_call_response},\n\t\t  M, Path);\nv_msg_streaming_input_call_response(X, Path,\n\t\t\t\t    _TrUserData) ->\n    mk_type_error({expected_msg,\n\t\t   streaming_input_call_response},\n\t\t  X, Path).\n\n-compile({nowarn_unused_function,v_msg_response_parameters/3}).\n-dialyzer({nowarn_function,v_msg_response_parameters/3}).\nv_msg_response_parameters(#{} = M, Path, TrUserData) ->\n    case M of\n      #{size := F1} ->\n\t  v_type_int32(F1, [size | Path], TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{interval_us := F2} ->\n\t  v_type_int32(F2, [interval_us | Path], TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{compressed := F3} ->\n\t  v_msg_bool_value(F3, [compressed | Path], TrUserData);\n      _ -> ok\n    end,\n    lists:foreach(fun (size) -> ok;\n\t\t      (interval_us) -> ok;\n\t\t      (compressed) -> ok;\n\t\t      (OtherKey) ->\n\t\t\t  mk_type_error({extraneous_key, OtherKey}, M, Path)\n\t\t  end,\n\t\t  maps:keys(M)),\n    ok;\nv_msg_response_parameters(M, Path, _TrUserData)\n    when is_map(M) ->\n    mk_type_error({missing_fields, [] -- maps:keys(M),\n\t\t   response_parameters},\n\t\t  M, Path);\nv_msg_response_parameters(X, Path, _TrUserData) ->\n    mk_type_error({expected_msg, response_parameters}, X,\n\t\t  Path).\n\n-compile({nowarn_unused_function,v_msg_streaming_output_call_request/3}).\n-dialyzer({nowarn_function,v_msg_streaming_output_call_request/3}).\nv_msg_streaming_output_call_request(#{} = M, Path,\n\t\t\t\t    TrUserData) ->\n    case M of\n      #{response_type := F1} ->\n\t  'v_enum_grpc.testing.PayloadType'(F1,\n\t\t\t\t\t    [response_type | Path], TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{response_parameters := F2} ->\n\t  if is_list(F2) ->\n\t\t _ = [v_msg_response_parameters(Elem,\n\t\t\t\t\t\t[response_parameters | Path],\n\t\t\t\t\t\tTrUserData)\n\t\t      || Elem <- F2],\n\t\t ok;\n\t     true ->\n\t\t mk_type_error({invalid_list_of,\n\t\t\t\t{msg, response_parameters}},\n\t\t\t       F2, [response_parameters | Path])\n\t  end;\n      _ -> ok\n    end,\n    case M of\n      #{payload := F3} ->\n\t  v_msg_payload(F3, [payload | Path], TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{response_status := F4} ->\n\t  v_msg_echo_status(F4, [response_status | Path],\n\t\t\t    TrUserData);\n      _ -> ok\n    end,\n    lists:foreach(fun (response_type) -> ok;\n\t\t      (response_parameters) -> ok;\n\t\t      (payload) -> ok;\n\t\t      (response_status) -> ok;\n\t\t      (OtherKey) ->\n\t\t\t  mk_type_error({extraneous_key, OtherKey}, M, Path)\n\t\t  end,\n\t\t  maps:keys(M)),\n    ok;\nv_msg_streaming_output_call_request(M, Path,\n\t\t\t\t    _TrUserData)\n    when is_map(M) ->\n    mk_type_error({missing_fields, [] -- maps:keys(M),\n\t\t   streaming_output_call_request},\n\t\t  M, Path);\nv_msg_streaming_output_call_request(X, Path,\n\t\t\t\t    _TrUserData) ->\n    mk_type_error({expected_msg,\n\t\t   streaming_output_call_request},\n\t\t  X, Path).\n\n-compile({nowarn_unused_function,v_msg_streaming_output_call_response/3}).\n-dialyzer({nowarn_function,v_msg_streaming_output_call_response/3}).\nv_msg_streaming_output_call_response(#{} = M, Path,\n\t\t\t\t     TrUserData) ->\n    case M of\n      #{payload := F1} ->\n\t  v_msg_payload(F1, [payload | Path], TrUserData);\n      _ -> ok\n    end,\n    lists:foreach(fun (payload) -> ok;\n\t\t      (OtherKey) ->\n\t\t\t  mk_type_error({extraneous_key, OtherKey}, M, Path)\n\t\t  end,\n\t\t  maps:keys(M)),\n    ok;\nv_msg_streaming_output_call_response(M, Path,\n\t\t\t\t     _TrUserData)\n    when is_map(M) ->\n    mk_type_error({missing_fields, [] -- maps:keys(M),\n\t\t   streaming_output_call_response},\n\t\t  M, Path);\nv_msg_streaming_output_call_response(X, Path,\n\t\t\t\t     _TrUserData) ->\n    mk_type_error({expected_msg,\n\t\t   streaming_output_call_response},\n\t\t  X, Path).\n\n-compile({nowarn_unused_function,v_msg_reconnect_params/3}).\n-dialyzer({nowarn_function,v_msg_reconnect_params/3}).\nv_msg_reconnect_params(#{} = M, Path, TrUserData) ->\n    case M of\n      #{max_reconnect_backoff_ms := F1} ->\n\t  v_type_int32(F1, [max_reconnect_backoff_ms | Path],\n\t\t       TrUserData);\n      _ -> ok\n    end,\n    lists:foreach(fun (max_reconnect_backoff_ms) -> ok;\n\t\t      (OtherKey) ->\n\t\t\t  mk_type_error({extraneous_key, OtherKey}, M, Path)\n\t\t  end,\n\t\t  maps:keys(M)),\n    ok;\nv_msg_reconnect_params(M, Path, _TrUserData)\n    when is_map(M) ->\n    mk_type_error({missing_fields, [] -- maps:keys(M),\n\t\t   reconnect_params},\n\t\t  M, Path);\nv_msg_reconnect_params(X, Path, _TrUserData) ->\n    mk_type_error({expected_msg, reconnect_params}, X,\n\t\t  Path).\n\n-compile({nowarn_unused_function,v_msg_reconnect_info/3}).\n-dialyzer({nowarn_function,v_msg_reconnect_info/3}).\nv_msg_reconnect_info(#{} = M, Path, TrUserData) ->\n    case M of\n      #{passed := F1} ->\n\t  v_type_bool(F1, [passed | Path], TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{backoff_ms := F2} ->\n\t  if is_list(F2) ->\n\t\t _ = [v_type_int32(Elem, [backoff_ms | Path], TrUserData)\n\t\t      || Elem <- F2],\n\t\t ok;\n\t     true ->\n\t\t mk_type_error({invalid_list_of, int32}, F2,\n\t\t\t       [backoff_ms | Path])\n\t  end;\n      _ -> ok\n    end,\n    lists:foreach(fun (passed) -> ok;\n\t\t      (backoff_ms) -> ok;\n\t\t      (OtherKey) ->\n\t\t\t  mk_type_error({extraneous_key, OtherKey}, M, Path)\n\t\t  end,\n\t\t  maps:keys(M)),\n    ok;\nv_msg_reconnect_info(M, Path, _TrUserData)\n    when is_map(M) ->\n    mk_type_error({missing_fields, [] -- maps:keys(M),\n\t\t   reconnect_info},\n\t\t  M, Path);\nv_msg_reconnect_info(X, Path, _TrUserData) ->\n    mk_type_error({expected_msg, reconnect_info}, X, Path).\n\n-compile({nowarn_unused_function,'v_enum_grpc.testing.PayloadType'/3}).\n-dialyzer({nowarn_function,'v_enum_grpc.testing.PayloadType'/3}).\n'v_enum_grpc.testing.PayloadType'('COMPRESSABLE', _Path,\n\t\t\t\t  _TrUserData) ->\n    ok;\n'v_enum_grpc.testing.PayloadType'(V, Path, TrUserData)\n    when is_integer(V) ->\n    v_type_sint32(V, Path, TrUserData);\n'v_enum_grpc.testing.PayloadType'(X, Path,\n\t\t\t\t  _TrUserData) ->\n    mk_type_error({invalid_enum,\n\t\t   'grpc.testing.PayloadType'},\n\t\t  X, Path).\n\n-compile({nowarn_unused_function,v_type_sint32/3}).\n-dialyzer({nowarn_function,v_type_sint32/3}).\nv_type_sint32(N, _Path, _TrUserData)\n    when -2147483648 =< N, N =< 2147483647 ->\n    ok;\nv_type_sint32(N, Path, _TrUserData)\n    when is_integer(N) ->\n    mk_type_error({value_out_of_range, sint32, signed, 32},\n\t\t  N, Path);\nv_type_sint32(X, Path, _TrUserData) ->\n    mk_type_error({bad_integer, sint32, signed, 32}, X,\n\t\t  Path).\n\n-compile({nowarn_unused_function,v_type_int32/3}).\n-dialyzer({nowarn_function,v_type_int32/3}).\nv_type_int32(N, _Path, _TrUserData)\n    when -2147483648 =< N, N =< 2147483647 ->\n    ok;\nv_type_int32(N, Path, _TrUserData) when is_integer(N) ->\n    mk_type_error({value_out_of_range, int32, signed, 32},\n\t\t  N, Path);\nv_type_int32(X, Path, _TrUserData) ->\n    mk_type_error({bad_integer, int32, signed, 32}, X,\n\t\t  Path).\n\n-compile({nowarn_unused_function,v_type_bool/3}).\n-dialyzer({nowarn_function,v_type_bool/3}).\nv_type_bool(false, _Path, _TrUserData) -> ok;\nv_type_bool(true, _Path, _TrUserData) -> ok;\nv_type_bool(0, _Path, _TrUserData) -> ok;\nv_type_bool(1, _Path, _TrUserData) -> ok;\nv_type_bool(X, Path, _TrUserData) ->\n    mk_type_error(bad_boolean_value, X, Path).\n\n-compile({nowarn_unused_function,v_type_string/3}).\n-dialyzer({nowarn_function,v_type_string/3}).\nv_type_string(S, Path, _TrUserData)\n    when is_list(S); is_binary(S) ->\n    try unicode:characters_to_binary(S) of\n      B when is_binary(B) -> ok;\n      {error, _, _} ->\n\t  mk_type_error(bad_unicode_string, S, Path)\n    catch\n      error:badarg ->\n\t  mk_type_error(bad_unicode_string, S, Path)\n    end;\nv_type_string(X, Path, _TrUserData) ->\n    mk_type_error(bad_unicode_string, X, Path).\n\n-compile({nowarn_unused_function,v_type_bytes/3}).\n-dialyzer({nowarn_function,v_type_bytes/3}).\nv_type_bytes(B, _Path, _TrUserData) when is_binary(B) ->\n    ok;\nv_type_bytes(B, _Path, _TrUserData) when is_list(B) ->\n    ok;\nv_type_bytes(X, Path, _TrUserData) ->\n    mk_type_error(bad_binary_value, X, Path).\n\n-compile({nowarn_unused_function,mk_type_error/3}).\n-spec mk_type_error(_, _, list()) -> no_return().\nmk_type_error(Error, ValueSeen, Path) ->\n    Path2 = prettify_path(Path),\n    erlang:error({gpb_type_error,\n\t\t  {Error, [{value, ValueSeen}, {path, Path2}]}}).\n\n\n-compile({nowarn_unused_function,prettify_path/1}).\n-dialyzer({nowarn_function,prettify_path/1}).\nprettify_path([]) -> top_level;\nprettify_path(PathR) ->\n    list_to_atom(lists:append(lists:join(\".\",\n\t\t\t\t\t lists:map(fun atom_to_list/1,\n\t\t\t\t\t\t   lists:reverse(PathR))))).\n\n\n-compile({nowarn_unused_function,id/2}).\n-compile({inline,id/2}).\nid(X, _TrUserData) -> X.\n\n-compile({nowarn_unused_function,v_ok/3}).\n-compile({inline,v_ok/3}).\nv_ok(_Value, _Path, _TrUserData) -> ok.\n\n-compile({nowarn_unused_function,m_overwrite/3}).\n-compile({inline,m_overwrite/3}).\nm_overwrite(_Prev, New, _TrUserData) -> New.\n\n-compile({nowarn_unused_function,cons/3}).\n-compile({inline,cons/3}).\ncons(Elem, Acc, _TrUserData) -> [Elem | Acc].\n\n-compile({nowarn_unused_function,lists_reverse/2}).\n-compile({inline,lists_reverse/2}).\n'lists_reverse'(L, _TrUserData) -> lists:reverse(L).\n-compile({nowarn_unused_function,'erlang_++'/3}).\n-compile({inline,'erlang_++'/3}).\n'erlang_++'(A, B, _TrUserData) -> A ++ B.\n\nget_msg_defs() ->\n    [{{enum, 'grpc.testing.PayloadType'},\n      [{'COMPRESSABLE', 0}]},\n     {{msg, bool_value},\n      [#{name => value, fnum => 1, rnum => 2, type => bool,\n\t occurrence => optional, opts => []}]},\n     {{msg, payload},\n      [#{name => type, fnum => 1, rnum => 2,\n\t type => {enum, 'grpc.testing.PayloadType'},\n\t occurrence => optional, opts => []},\n       #{name => body, fnum => 2, rnum => 3, type => bytes,\n\t occurrence => optional, opts => []}]},\n     {{msg, echo_status},\n      [#{name => code, fnum => 1, rnum => 2, type => int32,\n\t occurrence => optional, opts => []},\n       #{name => message, fnum => 2, rnum => 3, type => string,\n\t occurrence => optional, opts => []}]},\n     {{msg, simple_request},\n      [#{name => response_type, fnum => 1, rnum => 2,\n\t type => {enum, 'grpc.testing.PayloadType'},\n\t occurrence => optional, opts => []},\n       #{name => response_size, fnum => 2, rnum => 3,\n\t type => int32, occurrence => optional, opts => []},\n       #{name => payload, fnum => 3, rnum => 4,\n\t type => {msg, payload}, occurrence => optional,\n\t opts => []},\n       #{name => fill_username, fnum => 4, rnum => 5,\n\t type => bool, occurrence => optional, opts => []},\n       #{name => fill_oauth_scope, fnum => 5, rnum => 6,\n\t type => bool, occurrence => optional, opts => []},\n       #{name => response_compressed, fnum => 6, rnum => 7,\n\t type => {msg, bool_value}, occurrence => optional,\n\t opts => []},\n       #{name => response_status, fnum => 7, rnum => 8,\n\t type => {msg, echo_status}, occurrence => optional,\n\t opts => []},\n       #{name => expect_compressed, fnum => 8, rnum => 9,\n\t type => {msg, bool_value}, occurrence => optional,\n\t opts => []}]},\n     {{msg, simple_response},\n      [#{name => payload, fnum => 1, rnum => 2,\n\t type => {msg, payload}, occurrence => optional,\n\t opts => []},\n       #{name => username, fnum => 2, rnum => 3,\n\t type => string, occurrence => optional, opts => []},\n       #{name => oauth_scope, fnum => 3, rnum => 4,\n\t type => string, occurrence => optional, opts => []}]},\n     {{msg, streaming_input_call_request},\n      [#{name => payload, fnum => 1, rnum => 2,\n\t type => {msg, payload}, occurrence => optional,\n\t opts => []},\n       #{name => expect_compressed, fnum => 2, rnum => 3,\n\t type => {msg, bool_value}, occurrence => optional,\n\t opts => []}]},\n     {{msg, streaming_input_call_response},\n      [#{name => aggregated_payload_size, fnum => 1,\n\t rnum => 2, type => int32, occurrence => optional,\n\t opts => []}]},\n     {{msg, response_parameters},\n      [#{name => size, fnum => 1, rnum => 2, type => int32,\n\t occurrence => optional, opts => []},\n       #{name => interval_us, fnum => 2, rnum => 3,\n\t type => int32, occurrence => optional, opts => []},\n       #{name => compressed, fnum => 3, rnum => 4,\n\t type => {msg, bool_value}, occurrence => optional,\n\t opts => []}]},\n     {{msg, streaming_output_call_request},\n      [#{name => response_type, fnum => 1, rnum => 2,\n\t type => {enum, 'grpc.testing.PayloadType'},\n\t occurrence => optional, opts => []},\n       #{name => response_parameters, fnum => 2, rnum => 3,\n\t type => {msg, response_parameters},\n\t occurrence => repeated, opts => []},\n       #{name => payload, fnum => 3, rnum => 4,\n\t type => {msg, payload}, occurrence => optional,\n\t opts => []},\n       #{name => response_status, fnum => 7, rnum => 5,\n\t type => {msg, echo_status}, occurrence => optional,\n\t opts => []}]},\n     {{msg, streaming_output_call_response},\n      [#{name => payload, fnum => 1, rnum => 2,\n\t type => {msg, payload}, occurrence => optional,\n\t opts => []}]},\n     {{msg, reconnect_params},\n      [#{name => max_reconnect_backoff_ms, fnum => 1,\n\t rnum => 2, type => int32, occurrence => optional,\n\t opts => []}]},\n     {{msg, reconnect_info},\n      [#{name => passed, fnum => 1, rnum => 2, type => bool,\n\t occurrence => optional, opts => []},\n       #{name => backoff_ms, fnum => 2, rnum => 3,\n\t type => int32, occurrence => repeated,\n\t opts => [packed]}]}].\n\n\nget_msg_names() ->\n    [bool_value, payload, echo_status, simple_request,\n     simple_response, streaming_input_call_request,\n     streaming_input_call_response, response_parameters,\n     streaming_output_call_request,\n     streaming_output_call_response, reconnect_params,\n     reconnect_info].\n\n\nget_group_names() -> [].\n\n\nget_msg_or_group_names() ->\n    [bool_value, payload, echo_status, simple_request,\n     simple_response, streaming_input_call_request,\n     streaming_input_call_response, response_parameters,\n     streaming_output_call_request,\n     streaming_output_call_response, reconnect_params,\n     reconnect_info].\n\n\nget_enum_names() -> ['grpc.testing.PayloadType'].\n\n\nfetch_msg_def(MsgName) ->\n    case find_msg_def(MsgName) of\n      Fs when is_list(Fs) -> Fs;\n      error -> erlang:error({no_such_msg, MsgName})\n    end.\n\n\nfetch_enum_def(EnumName) ->\n    case find_enum_def(EnumName) of\n      Es when is_list(Es) -> Es;\n      error -> erlang:error({no_such_enum, EnumName})\n    end.\n\n\nfind_msg_def(bool_value) ->\n    [#{name => value, fnum => 1, rnum => 2, type => bool,\n       occurrence => optional, opts => []}];\nfind_msg_def(payload) ->\n    [#{name => type, fnum => 1, rnum => 2,\n       type => {enum, 'grpc.testing.PayloadType'},\n       occurrence => optional, opts => []},\n     #{name => body, fnum => 2, rnum => 3, type => bytes,\n       occurrence => optional, opts => []}];\nfind_msg_def(echo_status) ->\n    [#{name => code, fnum => 1, rnum => 2, type => int32,\n       occurrence => optional, opts => []},\n     #{name => message, fnum => 2, rnum => 3, type => string,\n       occurrence => optional, opts => []}];\nfind_msg_def(simple_request) ->\n    [#{name => response_type, fnum => 1, rnum => 2,\n       type => {enum, 'grpc.testing.PayloadType'},\n       occurrence => optional, opts => []},\n     #{name => response_size, fnum => 2, rnum => 3,\n       type => int32, occurrence => optional, opts => []},\n     #{name => payload, fnum => 3, rnum => 4,\n       type => {msg, payload}, occurrence => optional,\n       opts => []},\n     #{name => fill_username, fnum => 4, rnum => 5,\n       type => bool, occurrence => optional, opts => []},\n     #{name => fill_oauth_scope, fnum => 5, rnum => 6,\n       type => bool, occurrence => optional, opts => []},\n     #{name => response_compressed, fnum => 6, rnum => 7,\n       type => {msg, bool_value}, occurrence => optional,\n       opts => []},\n     #{name => response_status, fnum => 7, rnum => 8,\n       type => {msg, echo_status}, occurrence => optional,\n       opts => []},\n     #{name => expect_compressed, fnum => 8, rnum => 9,\n       type => {msg, bool_value}, occurrence => optional,\n       opts => []}];\nfind_msg_def(simple_response) ->\n    [#{name => payload, fnum => 1, rnum => 2,\n       type => {msg, payload}, occurrence => optional,\n       opts => []},\n     #{name => username, fnum => 2, rnum => 3,\n       type => string, occurrence => optional, opts => []},\n     #{name => oauth_scope, fnum => 3, rnum => 4,\n       type => string, occurrence => optional, opts => []}];\nfind_msg_def(streaming_input_call_request) ->\n    [#{name => payload, fnum => 1, rnum => 2,\n       type => {msg, payload}, occurrence => optional,\n       opts => []},\n     #{name => expect_compressed, fnum => 2, rnum => 3,\n       type => {msg, bool_value}, occurrence => optional,\n       opts => []}];\nfind_msg_def(streaming_input_call_response) ->\n    [#{name => aggregated_payload_size, fnum => 1,\n       rnum => 2, type => int32, occurrence => optional,\n       opts => []}];\nfind_msg_def(response_parameters) ->\n    [#{name => size, fnum => 1, rnum => 2, type => int32,\n       occurrence => optional, opts => []},\n     #{name => interval_us, fnum => 2, rnum => 3,\n       type => int32, occurrence => optional, opts => []},\n     #{name => compressed, fnum => 3, rnum => 4,\n       type => {msg, bool_value}, occurrence => optional,\n       opts => []}];\nfind_msg_def(streaming_output_call_request) ->\n    [#{name => response_type, fnum => 1, rnum => 2,\n       type => {enum, 'grpc.testing.PayloadType'},\n       occurrence => optional, opts => []},\n     #{name => response_parameters, fnum => 2, rnum => 3,\n       type => {msg, response_parameters},\n       occurrence => repeated, opts => []},\n     #{name => payload, fnum => 3, rnum => 4,\n       type => {msg, payload}, occurrence => optional,\n       opts => []},\n     #{name => response_status, fnum => 7, rnum => 5,\n       type => {msg, echo_status}, occurrence => optional,\n       opts => []}];\nfind_msg_def(streaming_output_call_response) ->\n    [#{name => payload, fnum => 1, rnum => 2,\n       type => {msg, payload}, occurrence => optional,\n       opts => []}];\nfind_msg_def(reconnect_params) ->\n    [#{name => max_reconnect_backoff_ms, fnum => 1,\n       rnum => 2, type => int32, occurrence => optional,\n       opts => []}];\nfind_msg_def(reconnect_info) ->\n    [#{name => passed, fnum => 1, rnum => 2, type => bool,\n       occurrence => optional, opts => []},\n     #{name => backoff_ms, fnum => 2, rnum => 3,\n       type => int32, occurrence => repeated,\n       opts => [packed]}];\nfind_msg_def(_) -> error.\n\n\nfind_enum_def('grpc.testing.PayloadType') ->\n    [{'COMPRESSABLE', 0}];\nfind_enum_def(_) -> error.\n\n\nenum_symbol_by_value('grpc.testing.PayloadType',\n\t\t     Value) ->\n    'enum_symbol_by_value_grpc.testing.PayloadType'(Value).\n\n\nenum_value_by_symbol('grpc.testing.PayloadType', Sym) ->\n    'enum_value_by_symbol_grpc.testing.PayloadType'(Sym).\n\n\n'enum_symbol_by_value_grpc.testing.PayloadType'(0) ->\n    'COMPRESSABLE'.\n\n\n'enum_value_by_symbol_grpc.testing.PayloadType'('COMPRESSABLE') ->\n    0.\n\n\nget_service_names() ->\n    ['grpc.testing.BenchmarkService'].\n\n\nget_service_def('grpc.testing.BenchmarkService') ->\n    {{service, 'grpc.testing.BenchmarkService'},\n     [#{name => 'UnaryCall', input => simple_request,\n\toutput => simple_response, input_stream => false,\n\toutput_stream => false, opts => []},\n      #{name => 'StreamingCall', input => simple_request,\n\toutput => simple_response, input_stream => true,\n\toutput_stream => true, opts => []},\n      #{name => 'StreamingFromClient',\n\tinput => simple_request, output => simple_response,\n\tinput_stream => true, output_stream => false,\n\topts => []},\n      #{name => 'StreamingFromServer',\n\tinput => simple_request, output => simple_response,\n\tinput_stream => false, output_stream => true,\n\topts => []},\n      #{name => 'StreamingBothWays', input => simple_request,\n\toutput => simple_response, input_stream => true,\n\toutput_stream => true, opts => []}]};\nget_service_def(_) -> error.\n\n\nget_rpc_names('grpc.testing.BenchmarkService') ->\n    ['UnaryCall', 'StreamingCall', 'StreamingFromClient',\n     'StreamingFromServer', 'StreamingBothWays'];\nget_rpc_names(_) -> error.\n\n\nfind_rpc_def('grpc.testing.BenchmarkService',\n\t     RpcName) ->\n    'find_rpc_def_grpc.testing.BenchmarkService'(RpcName);\nfind_rpc_def(_, _) -> error.\n\n\n'find_rpc_def_grpc.testing.BenchmarkService'('UnaryCall') ->\n    #{name => 'UnaryCall', input => simple_request,\n      output => simple_response, input_stream => false,\n      output_stream => false, opts => []};\n'find_rpc_def_grpc.testing.BenchmarkService'('StreamingCall') ->\n    #{name => 'StreamingCall', input => simple_request,\n      output => simple_response, input_stream => true,\n      output_stream => true, opts => []};\n'find_rpc_def_grpc.testing.BenchmarkService'('StreamingFromClient') ->\n    #{name => 'StreamingFromClient',\n      input => simple_request, output => simple_response,\n      input_stream => true, output_stream => false,\n      opts => []};\n'find_rpc_def_grpc.testing.BenchmarkService'('StreamingFromServer') ->\n    #{name => 'StreamingFromServer',\n      input => simple_request, output => simple_response,\n      input_stream => false, output_stream => true,\n      opts => []};\n'find_rpc_def_grpc.testing.BenchmarkService'('StreamingBothWays') ->\n    #{name => 'StreamingBothWays', input => simple_request,\n      output => simple_response, input_stream => true,\n      output_stream => true, opts => []};\n'find_rpc_def_grpc.testing.BenchmarkService'(_) ->\n    error.\n\n\nfetch_rpc_def(ServiceName, RpcName) ->\n    case find_rpc_def(ServiceName, RpcName) of\n      Def when is_map(Def) -> Def;\n      error ->\n\t  erlang:error({no_such_rpc, ServiceName, RpcName})\n    end.\n\n\n%% Convert a a fully qualified (ie with package name) service name\n%% as a binary to a service name as an atom.\nfqbin_to_service_name(<<\"grpc.testing.BenchmarkService\">>) ->\n    'grpc.testing.BenchmarkService';\nfqbin_to_service_name(X) ->\n    error({gpb_error, {badservice, X}}).\n\n\n%% Convert a service name as an atom to a fully qualified\n%% (ie with package name) name as a binary.\nservice_name_to_fqbin('grpc.testing.BenchmarkService') ->\n    <<\"grpc.testing.BenchmarkService\">>;\nservice_name_to_fqbin(X) ->\n    error({gpb_error, {badservice, X}}).\n\n\n%% Convert a a fully qualified (ie with package name) service name\n%% and an rpc name, both as binaries to a service name and an rpc\n%% name, as atoms.\nfqbins_to_service_and_rpc_name(<<\"grpc.testing.BenchmarkService\">>, <<\"UnaryCall\">>) ->\n    {'grpc.testing.BenchmarkService', 'UnaryCall'};\nfqbins_to_service_and_rpc_name(<<\"grpc.testing.BenchmarkService\">>, <<\"StreamingCall\">>) ->\n    {'grpc.testing.BenchmarkService', 'StreamingCall'};\nfqbins_to_service_and_rpc_name(<<\"grpc.testing.BenchmarkService\">>, <<\"StreamingFromClient\">>) ->\n    {'grpc.testing.BenchmarkService',\n     'StreamingFromClient'};\nfqbins_to_service_and_rpc_name(<<\"grpc.testing.BenchmarkService\">>, <<\"StreamingFromServer\">>) ->\n    {'grpc.testing.BenchmarkService',\n     'StreamingFromServer'};\nfqbins_to_service_and_rpc_name(<<\"grpc.testing.BenchmarkService\">>, <<\"StreamingBothWays\">>) ->\n    {'grpc.testing.BenchmarkService', 'StreamingBothWays'};\nfqbins_to_service_and_rpc_name(S, R) ->\n    error({gpb_error, {badservice_or_rpc, {S, R}}}).\n\n\n%% Convert a service name and an rpc name, both as atoms,\n%% to a fully qualified (ie with package name) service name and\n%% an rpc name as binaries.\nservice_and_rpc_name_to_fqbins('grpc.testing.BenchmarkService',\n\t\t\t       'UnaryCall') ->\n    {<<\"grpc.testing.BenchmarkService\">>, <<\"UnaryCall\">>};\nservice_and_rpc_name_to_fqbins('grpc.testing.BenchmarkService',\n\t\t\t       'StreamingCall') ->\n    {<<\"grpc.testing.BenchmarkService\">>, <<\"StreamingCall\">>};\nservice_and_rpc_name_to_fqbins('grpc.testing.BenchmarkService',\n\t\t\t       'StreamingFromClient') ->\n    {<<\"grpc.testing.BenchmarkService\">>, <<\"StreamingFromClient\">>};\nservice_and_rpc_name_to_fqbins('grpc.testing.BenchmarkService',\n\t\t\t       'StreamingFromServer') ->\n    {<<\"grpc.testing.BenchmarkService\">>, <<\"StreamingFromServer\">>};\nservice_and_rpc_name_to_fqbins('grpc.testing.BenchmarkService',\n\t\t\t       'StreamingBothWays') ->\n    {<<\"grpc.testing.BenchmarkService\">>, <<\"StreamingBothWays\">>};\nservice_and_rpc_name_to_fqbins(S, R) ->\n    error({gpb_error, {badservice_or_rpc, {S, R}}}).\n\n\nfqbin_to_msg_name(<<\"grpc.testing.BoolValue\">>) -> bool_value;\nfqbin_to_msg_name(<<\"grpc.testing.Payload\">>) -> payload;\nfqbin_to_msg_name(<<\"grpc.testing.EchoStatus\">>) -> echo_status;\nfqbin_to_msg_name(<<\"grpc.testing.SimpleRequest\">>) -> simple_request;\nfqbin_to_msg_name(<<\"grpc.testing.SimpleResponse\">>) -> simple_response;\nfqbin_to_msg_name(<<\"grpc.testing.StreamingInputCallRequest\">>) ->\n    streaming_input_call_request;\nfqbin_to_msg_name(<<\"grpc.testing.StreamingInputCallResponse\">>) ->\n    streaming_input_call_response;\nfqbin_to_msg_name(<<\"grpc.testing.ResponseParameters\">>) -> response_parameters;\nfqbin_to_msg_name(<<\"grpc.testing.StreamingOutputCallRequest\">>) ->\n    streaming_output_call_request;\nfqbin_to_msg_name(<<\"grpc.testing.StreamingOutputCallResponse\">>) ->\n    streaming_output_call_response;\nfqbin_to_msg_name(<<\"grpc.testing.ReconnectParams\">>) -> reconnect_params;\nfqbin_to_msg_name(<<\"grpc.testing.ReconnectInfo\">>) -> reconnect_info;\nfqbin_to_msg_name(E) -> error({gpb_error, {badmsg, E}}).\n\n\nmsg_name_to_fqbin(bool_value) -> <<\"grpc.testing.BoolValue\">>;\nmsg_name_to_fqbin(payload) -> <<\"grpc.testing.Payload\">>;\nmsg_name_to_fqbin(echo_status) -> <<\"grpc.testing.EchoStatus\">>;\nmsg_name_to_fqbin(simple_request) -> <<\"grpc.testing.SimpleRequest\">>;\nmsg_name_to_fqbin(simple_response) -> <<\"grpc.testing.SimpleResponse\">>;\nmsg_name_to_fqbin(streaming_input_call_request) ->\n    <<\"grpc.testing.StreamingInputCallRequest\">>;\nmsg_name_to_fqbin(streaming_input_call_response) ->\n    <<\"grpc.testing.StreamingInputCallResponse\">>;\nmsg_name_to_fqbin(response_parameters) -> <<\"grpc.testing.ResponseParameters\">>;\nmsg_name_to_fqbin(streaming_output_call_request) ->\n    <<\"grpc.testing.StreamingOutputCallRequest\">>;\nmsg_name_to_fqbin(streaming_output_call_response) ->\n    <<\"grpc.testing.StreamingOutputCallResponse\">>;\nmsg_name_to_fqbin(reconnect_params) -> <<\"grpc.testing.ReconnectParams\">>;\nmsg_name_to_fqbin(reconnect_info) -> <<\"grpc.testing.ReconnectInfo\">>;\nmsg_name_to_fqbin(E) -> error({gpb_error, {badmsg, E}}).\n\n\nfqbin_to_enum_name(<<\"grpc.testing.PayloadType\">>) ->\n    'grpc.testing.PayloadType';\nfqbin_to_enum_name(E) ->\n    error({gpb_error, {badenum, E}}).\n\n\nenum_name_to_fqbin('grpc.testing.PayloadType') ->\n    <<\"grpc.testing.PayloadType\">>;\nenum_name_to_fqbin(E) ->\n    error({gpb_error, {badenum, E}}).\n\n\nget_package_name() -> 'grpc.testing'.\n\n\n%% Whether or not the message names\n%% are prepended with package name or not.\nuses_packages() -> true.\n\n\nsource_basename() -> \"benchmark_service.proto\".\n\n\n%% Retrieve all proto file names, also imported ones.\n%% The order is top-down. The first element is always the main\n%% source file. The files are returned with extension,\n%% see get_all_proto_names/0 for a version that returns\n%% the basenames sans extension\nget_all_source_basenames() ->\n    [\"benchmark_service.proto\", \"messages.proto\"].\n\n\n%% Retrieve all proto file names, also imported ones.\n%% The order is top-down. The first element is always the main\n%% source file. The files are returned sans .proto extension,\n%% to make it easier to use them with the various get_xyz_containment\n%% functions.\nget_all_proto_names() ->\n    [\"benchmark_service\", \"messages\"].\n\n\nget_msg_containment(\"benchmark_service\") -> [];\nget_msg_containment(\"messages\") ->\n    [bool_value, echo_status, payload, reconnect_info,\n     reconnect_params, response_parameters, simple_request,\n     simple_response, streaming_input_call_request,\n     streaming_input_call_response,\n     streaming_output_call_request,\n     streaming_output_call_response];\nget_msg_containment(P) ->\n    error({gpb_error, {badproto, P}}).\n\n\nget_pkg_containment(\"benchmark_service\") ->\n    'grpc.testing';\nget_pkg_containment(\"messages\") -> 'grpc.testing';\nget_pkg_containment(P) ->\n    error({gpb_error, {badproto, P}}).\n\n\nget_service_containment(\"benchmark_service\") ->\n    ['grpc.testing.BenchmarkService'];\nget_service_containment(\"messages\") -> [];\nget_service_containment(P) ->\n    error({gpb_error, {badproto, P}}).\n\n\nget_rpc_containment(\"benchmark_service\") ->\n    [{'grpc.testing.BenchmarkService', 'UnaryCall'},\n     {'grpc.testing.BenchmarkService', 'StreamingCall'},\n     {'grpc.testing.BenchmarkService',\n      'StreamingFromClient'},\n     {'grpc.testing.BenchmarkService',\n      'StreamingFromServer'},\n     {'grpc.testing.BenchmarkService', 'StreamingBothWays'}];\nget_rpc_containment(\"messages\") -> [];\nget_rpc_containment(P) ->\n    error({gpb_error, {badproto, P}}).\n\n\nget_enum_containment(\"benchmark_service\") -> [];\nget_enum_containment(\"messages\") ->\n    ['grpc.testing.PayloadType'];\nget_enum_containment(P) ->\n    error({gpb_error, {badproto, P}}).\n\n\nget_proto_by_msg_name_as_fqbin(<<\"grpc.testing.ResponseParameters\">>) -> \"messages\";\nget_proto_by_msg_name_as_fqbin(<<\"grpc.testing.ReconnectParams\">>) -> \"messages\";\nget_proto_by_msg_name_as_fqbin(<<\"grpc.testing.EchoStatus\">>) -> \"messages\";\nget_proto_by_msg_name_as_fqbin(<<\"grpc.testing.StreamingOutputCallRequest\">>) -> \"messages\";\nget_proto_by_msg_name_as_fqbin(<<\"grpc.testing.StreamingInputCallRequest\">>) -> \"messages\";\nget_proto_by_msg_name_as_fqbin(<<\"grpc.testing.SimpleRequest\">>) -> \"messages\";\nget_proto_by_msg_name_as_fqbin(<<\"grpc.testing.Payload\">>) -> \"messages\";\nget_proto_by_msg_name_as_fqbin(<<\"grpc.testing.StreamingOutputCallResponse\">>) -> \"messages\";\nget_proto_by_msg_name_as_fqbin(<<\"grpc.testing.StreamingInputCallResponse\">>) -> \"messages\";\nget_proto_by_msg_name_as_fqbin(<<\"grpc.testing.SimpleResponse\">>) -> \"messages\";\nget_proto_by_msg_name_as_fqbin(<<\"grpc.testing.BoolValue\">>) -> \"messages\";\nget_proto_by_msg_name_as_fqbin(<<\"grpc.testing.ReconnectInfo\">>) -> \"messages\";\nget_proto_by_msg_name_as_fqbin(E) ->\n    error({gpb_error, {badmsg, E}}).\n\n\nget_proto_by_service_name_as_fqbin(<<\"grpc.testing.BenchmarkService\">>) ->\n    \"benchmark_service\";\nget_proto_by_service_name_as_fqbin(E) ->\n    error({gpb_error, {badservice, E}}).\n\n\nget_proto_by_enum_name_as_fqbin(<<\"grpc.testing.PayloadType\">>) -> \"messages\";\nget_proto_by_enum_name_as_fqbin(E) ->\n    error({gpb_error, {badenum, E}}).\n\n\nget_protos_by_pkg_name_as_fqbin(<<\"grpc.testing\">>) ->\n    [\"benchmark_service\", \"messages\"];\nget_protos_by_pkg_name_as_fqbin(E) ->\n    error({gpb_error, {badpkg, E}}).\n\n\ndescriptor() ->\n    <<10, 237, 3, 10, 36, 103, 114, 112, 99, 47, 116, 101,\n      115, 116, 105, 110, 103, 47, 98, 101, 110, 99, 104, 109,\n      97, 114, 107, 95, 115, 101, 114, 118, 105, 99, 101, 46,\n      112, 114, 111, 116, 111, 18, 12, 103, 114, 112, 99, 46,\n      116, 101, 115, 116, 105, 110, 103, 50, 174, 3, 10, 16,\n      66, 101, 110, 99, 104, 109, 97, 114, 107, 83, 101, 114,\n      118, 105, 99, 101, 18, 74, 10, 9, 85, 110, 97, 114, 121,\n      67, 97, 108, 108, 18, 27, 46, 103, 114, 112, 99, 46,\n      116, 101, 115, 116, 105, 110, 103, 46, 83, 105, 109,\n      112, 108, 101, 82, 101, 113, 117, 101, 115, 116, 26, 28,\n      46, 103, 114, 112, 99, 46, 116, 101, 115, 116, 105, 110,\n      103, 46, 83, 105, 109, 112, 108, 101, 82, 101, 115, 112,\n      111, 110, 115, 101, 40, 0, 48, 0, 18, 78, 10, 13, 83,\n      116, 114, 101, 97, 109, 105, 110, 103, 67, 97, 108, 108,\n      18, 27, 46, 103, 114, 112, 99, 46, 116, 101, 115, 116,\n      105, 110, 103, 46, 83, 105, 109, 112, 108, 101, 82, 101,\n      113, 117, 101, 115, 116, 26, 28, 46, 103, 114, 112, 99,\n      46, 116, 101, 115, 116, 105, 110, 103, 46, 83, 105, 109,\n      112, 108, 101, 82, 101, 115, 112, 111, 110, 115, 101,\n      40, 0, 48, 0, 18, 84, 10, 19, 83, 116, 114, 101, 97,\n      109, 105, 110, 103, 70, 114, 111, 109, 67, 108, 105,\n      101, 110, 116, 18, 27, 46, 103, 114, 112, 99, 46, 116,\n      101, 115, 116, 105, 110, 103, 46, 83, 105, 109, 112,\n      108, 101, 82, 101, 113, 117, 101, 115, 116, 26, 28, 46,\n      103, 114, 112, 99, 46, 116, 101, 115, 116, 105, 110,\n      103, 46, 83, 105, 109, 112, 108, 101, 82, 101, 115, 112,\n      111, 110, 115, 101, 40, 0, 48, 0, 18, 84, 10, 19, 83,\n      116, 114, 101, 97, 109, 105, 110, 103, 70, 114, 111,\n      109, 83, 101, 114, 118, 101, 114, 18, 27, 46, 103, 114,\n      112, 99, 46, 116, 101, 115, 116, 105, 110, 103, 46, 83,\n      105, 109, 112, 108, 101, 82, 101, 113, 117, 101, 115,\n      116, 26, 28, 46, 103, 114, 112, 99, 46, 116, 101, 115,\n      116, 105, 110, 103, 46, 83, 105, 109, 112, 108, 101, 82,\n      101, 115, 112, 111, 110, 115, 101, 40, 0, 48, 0, 18, 82,\n      10, 17, 83, 116, 114, 101, 97, 109, 105, 110, 103, 66,\n      111, 116, 104, 87, 97, 121, 115, 18, 27, 46, 103, 114,\n      112, 99, 46, 116, 101, 115, 116, 105, 110, 103, 46, 83,\n      105, 109, 112, 108, 101, 82, 101, 113, 117, 101, 115,\n      116, 26, 28, 46, 103, 114, 112, 99, 46, 116, 101, 115,\n      116, 105, 110, 103, 46, 83, 105, 109, 112, 108, 101, 82,\n      101, 115, 112, 111, 110, 115, 101, 40, 0, 48, 0, 98, 6,\n      112, 114, 111, 116, 111, 51, 10, 215, 10, 10, 27, 103,\n      114, 112, 99, 47, 116, 101, 115, 116, 105, 110, 103, 47,\n      109, 101, 115, 115, 97, 103, 101, 115, 46, 112, 114,\n      111, 116, 111, 18, 12, 103, 114, 112, 99, 46, 116, 101,\n      115, 116, 105, 110, 103, 34, 26, 10, 9, 66, 111, 111,\n      108, 86, 97, 108, 117, 101, 18, 13, 10, 5, 118, 97, 108,\n      117, 101, 24, 1, 32, 1, 40, 8, 34, 43, 10, 10, 69, 99,\n      104, 111, 83, 116, 97, 116, 117, 115, 18, 12, 10, 4, 99,\n      111, 100, 101, 24, 1, 32, 1, 40, 5, 18, 15, 10, 7, 109,\n      101, 115, 115, 97, 103, 101, 24, 2, 32, 1, 40, 9, 34,\n      64, 10, 7, 80, 97, 121, 108, 111, 97, 100, 18, 39, 10,\n      4, 116, 121, 112, 101, 24, 1, 32, 1, 40, 14, 50, 25, 46,\n      103, 114, 112, 99, 46, 116, 101, 115, 116, 105, 110,\n      103, 46, 80, 97, 121, 108, 111, 97, 100, 84, 121, 112,\n      101, 18, 12, 10, 4, 98, 111, 100, 121, 24, 2, 32, 1, 40,\n      12, 34, 63, 10, 13, 82, 101, 99, 111, 110, 110, 101, 99,\n      116, 73, 110, 102, 111, 18, 14, 10, 6, 112, 97, 115,\n      115, 101, 100, 24, 1, 32, 1, 40, 8, 18, 30, 10, 10, 98,\n      97, 99, 107, 111, 102, 102, 95, 109, 115, 24, 2, 32, 3,\n      40, 5, 66, 10, 8, 0, 16, 1, 48, 0, 40, 0, 80, 0, 34, 51,\n      10, 15, 82, 101, 99, 111, 110, 110, 101, 99, 116, 80,\n      97, 114, 97, 109, 115, 18, 32, 10, 24, 109, 97, 120, 95,\n      114, 101, 99, 111, 110, 110, 101, 99, 116, 95, 98, 97,\n      99, 107, 111, 102, 102, 95, 109, 115, 24, 1, 32, 1, 40,\n      5, 34, 100, 10, 18, 82, 101, 115, 112, 111, 110, 115,\n      101, 80, 97, 114, 97, 109, 101, 116, 101, 114, 115, 18,\n      12, 10, 4, 115, 105, 122, 101, 24, 1, 32, 1, 40, 5, 18,\n      19, 10, 11, 105, 110, 116, 101, 114, 118, 97, 108, 95,\n      117, 115, 24, 2, 32, 1, 40, 5, 18, 43, 10, 10, 99, 111,\n      109, 112, 114, 101, 115, 115, 101, 100, 24, 3, 32, 1,\n      40, 11, 50, 23, 46, 103, 114, 112, 99, 46, 116, 101,\n      115, 116, 105, 110, 103, 46, 66, 111, 111, 108, 86, 97,\n      108, 117, 101, 34, 206, 2, 10, 13, 83, 105, 109, 112,\n      108, 101, 82, 101, 113, 117, 101, 115, 116, 18, 48, 10,\n      13, 114, 101, 115, 112, 111, 110, 115, 101, 95, 116,\n      121, 112, 101, 24, 1, 32, 1, 40, 14, 50, 25, 46, 103,\n      114, 112, 99, 46, 116, 101, 115, 116, 105, 110, 103, 46,\n      80, 97, 121, 108, 111, 97, 100, 84, 121, 112, 101, 18,\n      21, 10, 13, 114, 101, 115, 112, 111, 110, 115, 101, 95,\n      115, 105, 122, 101, 24, 2, 32, 1, 40, 5, 18, 38, 10, 7,\n      112, 97, 121, 108, 111, 97, 100, 24, 3, 32, 1, 40, 11,\n      50, 21, 46, 103, 114, 112, 99, 46, 116, 101, 115, 116,\n      105, 110, 103, 46, 80, 97, 121, 108, 111, 97, 100, 18,\n      21, 10, 13, 102, 105, 108, 108, 95, 117, 115, 101, 114,\n      110, 97, 109, 101, 24, 4, 32, 1, 40, 8, 18, 24, 10, 16,\n      102, 105, 108, 108, 95, 111, 97, 117, 116, 104, 95, 115,\n      99, 111, 112, 101, 24, 5, 32, 1, 40, 8, 18, 52, 10, 19,\n      114, 101, 115, 112, 111, 110, 115, 101, 95, 99, 111,\n      109, 112, 114, 101, 115, 115, 101, 100, 24, 6, 32, 1,\n      40, 11, 50, 23, 46, 103, 114, 112, 99, 46, 116, 101,\n      115, 116, 105, 110, 103, 46, 66, 111, 111, 108, 86, 97,\n      108, 117, 101, 18, 49, 10, 15, 114, 101, 115, 112, 111,\n      110, 115, 101, 95, 115, 116, 97, 116, 117, 115, 24, 7,\n      32, 1, 40, 11, 50, 24, 46, 103, 114, 112, 99, 46, 116,\n      101, 115, 116, 105, 110, 103, 46, 69, 99, 104, 111, 83,\n      116, 97, 116, 117, 115, 18, 50, 10, 17, 101, 120, 112,\n      101, 99, 116, 95, 99, 111, 109, 112, 114, 101, 115, 115,\n      101, 100, 24, 8, 32, 1, 40, 11, 50, 23, 46, 103, 114,\n      112, 99, 46, 116, 101, 115, 116, 105, 110, 103, 46, 66,\n      111, 111, 108, 86, 97, 108, 117, 101, 34, 95, 10, 14,\n      83, 105, 109, 112, 108, 101, 82, 101, 115, 112, 111,\n      110, 115, 101, 18, 38, 10, 7, 112, 97, 121, 108, 111,\n      97, 100, 24, 1, 32, 1, 40, 11, 50, 21, 46, 103, 114,\n      112, 99, 46, 116, 101, 115, 116, 105, 110, 103, 46, 80,\n      97, 121, 108, 111, 97, 100, 18, 16, 10, 8, 117, 115,\n      101, 114, 110, 97, 109, 101, 24, 2, 32, 1, 40, 9, 18,\n      19, 10, 11, 111, 97, 117, 116, 104, 95, 115, 99, 111,\n      112, 101, 24, 3, 32, 1, 40, 9, 34, 119, 10, 25, 83, 116,\n      114, 101, 97, 109, 105, 110, 103, 73, 110, 112, 117,\n      116, 67, 97, 108, 108, 82, 101, 113, 117, 101, 115, 116,\n      18, 38, 10, 7, 112, 97, 121, 108, 111, 97, 100, 24, 1,\n      32, 1, 40, 11, 50, 21, 46, 103, 114, 112, 99, 46, 116,\n      101, 115, 116, 105, 110, 103, 46, 80, 97, 121, 108, 111,\n      97, 100, 18, 50, 10, 17, 101, 120, 112, 101, 99, 116,\n      95, 99, 111, 109, 112, 114, 101, 115, 115, 101, 100, 24,\n      2, 32, 1, 40, 11, 50, 23, 46, 103, 114, 112, 99, 46,\n      116, 101, 115, 116, 105, 110, 103, 46, 66, 111, 111,\n      108, 86, 97, 108, 117, 101, 34, 61, 10, 26, 83, 116,\n      114, 101, 97, 109, 105, 110, 103, 73, 110, 112, 117,\n      116, 67, 97, 108, 108, 82, 101, 115, 112, 111, 110, 115,\n      101, 18, 31, 10, 23, 97, 103, 103, 114, 101, 103, 97,\n      116, 101, 100, 95, 112, 97, 121, 108, 111, 97, 100, 95,\n      115, 105, 122, 101, 24, 1, 32, 1, 40, 5, 34, 232, 1, 10,\n      26, 83, 116, 114, 101, 97, 109, 105, 110, 103, 79, 117,\n      116, 112, 117, 116, 67, 97, 108, 108, 82, 101, 113, 117,\n      101, 115, 116, 18, 48, 10, 13, 114, 101, 115, 112, 111,\n      110, 115, 101, 95, 116, 121, 112, 101, 24, 1, 32, 1, 40,\n      14, 50, 25, 46, 103, 114, 112, 99, 46, 116, 101, 115,\n      116, 105, 110, 103, 46, 80, 97, 121, 108, 111, 97, 100,\n      84, 121, 112, 101, 18, 61, 10, 19, 114, 101, 115, 112,\n      111, 110, 115, 101, 95, 112, 97, 114, 97, 109, 101, 116,\n      101, 114, 115, 24, 2, 32, 3, 40, 11, 50, 32, 46, 103,\n      114, 112, 99, 46, 116, 101, 115, 116, 105, 110, 103, 46,\n      82, 101, 115, 112, 111, 110, 115, 101, 80, 97, 114, 97,\n      109, 101, 116, 101, 114, 115, 18, 38, 10, 7, 112, 97,\n      121, 108, 111, 97, 100, 24, 3, 32, 1, 40, 11, 50, 21,\n      46, 103, 114, 112, 99, 46, 116, 101, 115, 116, 105, 110,\n      103, 46, 80, 97, 121, 108, 111, 97, 100, 18, 49, 10, 15,\n      114, 101, 115, 112, 111, 110, 115, 101, 95, 115, 116,\n      97, 116, 117, 115, 24, 7, 32, 1, 40, 11, 50, 24, 46,\n      103, 114, 112, 99, 46, 116, 101, 115, 116, 105, 110,\n      103, 46, 69, 99, 104, 111, 83, 116, 97, 116, 117, 115,\n      34, 69, 10, 27, 83, 116, 114, 101, 97, 109, 105, 110,\n      103, 79, 117, 116, 112, 117, 116, 67, 97, 108, 108, 82,\n      101, 115, 112, 111, 110, 115, 101, 18, 38, 10, 7, 112,\n      97, 121, 108, 111, 97, 100, 24, 1, 32, 1, 40, 11, 50,\n      21, 46, 103, 114, 112, 99, 46, 116, 101, 115, 116, 105,\n      110, 103, 46, 80, 97, 121, 108, 111, 97, 100, 42, 31,\n      10, 11, 80, 97, 121, 108, 111, 97, 100, 84, 121, 112,\n      101, 18, 16, 10, 12, 67, 79, 77, 80, 82, 69, 83, 83, 65,\n      66, 76, 69, 16, 0, 98, 6, 112, 114, 111, 116, 111, 51>>.\n\ndescriptor(\"benchmark_service\") ->\n    <<10, 36, 103, 114, 112, 99, 47, 116, 101, 115, 116,\n      105, 110, 103, 47, 98, 101, 110, 99, 104, 109, 97, 114,\n      107, 95, 115, 101, 114, 118, 105, 99, 101, 46, 112, 114,\n      111, 116, 111, 18, 12, 103, 114, 112, 99, 46, 116, 101,\n      115, 116, 105, 110, 103, 50, 174, 3, 10, 16, 66, 101,\n      110, 99, 104, 109, 97, 114, 107, 83, 101, 114, 118, 105,\n      99, 101, 18, 74, 10, 9, 85, 110, 97, 114, 121, 67, 97,\n      108, 108, 18, 27, 46, 103, 114, 112, 99, 46, 116, 101,\n      115, 116, 105, 110, 103, 46, 83, 105, 109, 112, 108,\n      101, 82, 101, 113, 117, 101, 115, 116, 26, 28, 46, 103,\n      114, 112, 99, 46, 116, 101, 115, 116, 105, 110, 103, 46,\n      83, 105, 109, 112, 108, 101, 82, 101, 115, 112, 111,\n      110, 115, 101, 40, 0, 48, 0, 18, 78, 10, 13, 83, 116,\n      114, 101, 97, 109, 105, 110, 103, 67, 97, 108, 108, 18,\n      27, 46, 103, 114, 112, 99, 46, 116, 101, 115, 116, 105,\n      110, 103, 46, 83, 105, 109, 112, 108, 101, 82, 101, 113,\n      117, 101, 115, 116, 26, 28, 46, 103, 114, 112, 99, 46,\n      116, 101, 115, 116, 105, 110, 103, 46, 83, 105, 109,\n      112, 108, 101, 82, 101, 115, 112, 111, 110, 115, 101,\n      40, 0, 48, 0, 18, 84, 10, 19, 83, 116, 114, 101, 97,\n      109, 105, 110, 103, 70, 114, 111, 109, 67, 108, 105,\n      101, 110, 116, 18, 27, 46, 103, 114, 112, 99, 46, 116,\n      101, 115, 116, 105, 110, 103, 46, 83, 105, 109, 112,\n      108, 101, 82, 101, 113, 117, 101, 115, 116, 26, 28, 46,\n      103, 114, 112, 99, 46, 116, 101, 115, 116, 105, 110,\n      103, 46, 83, 105, 109, 112, 108, 101, 82, 101, 115, 112,\n      111, 110, 115, 101, 40, 0, 48, 0, 18, 84, 10, 19, 83,\n      116, 114, 101, 97, 109, 105, 110, 103, 70, 114, 111,\n      109, 83, 101, 114, 118, 101, 114, 18, 27, 46, 103, 114,\n      112, 99, 46, 116, 101, 115, 116, 105, 110, 103, 46, 83,\n      105, 109, 112, 108, 101, 82, 101, 113, 117, 101, 115,\n      116, 26, 28, 46, 103, 114, 112, 99, 46, 116, 101, 115,\n      116, 105, 110, 103, 46, 83, 105, 109, 112, 108, 101, 82,\n      101, 115, 112, 111, 110, 115, 101, 40, 0, 48, 0, 18, 82,\n      10, 17, 83, 116, 114, 101, 97, 109, 105, 110, 103, 66,\n      111, 116, 104, 87, 97, 121, 115, 18, 27, 46, 103, 114,\n      112, 99, 46, 116, 101, 115, 116, 105, 110, 103, 46, 83,\n      105, 109, 112, 108, 101, 82, 101, 113, 117, 101, 115,\n      116, 26, 28, 46, 103, 114, 112, 99, 46, 116, 101, 115,\n      116, 105, 110, 103, 46, 83, 105, 109, 112, 108, 101, 82,\n      101, 115, 112, 111, 110, 115, 101, 40, 0, 48, 0, 98, 6,\n      112, 114, 111, 116, 111, 51>>;\ndescriptor(\"messages\") ->\n    <<10, 27, 103, 114, 112, 99, 47, 116, 101, 115, 116,\n      105, 110, 103, 47, 109, 101, 115, 115, 97, 103, 101,\n      115, 46, 112, 114, 111, 116, 111, 18, 12, 103, 114, 112,\n      99, 46, 116, 101, 115, 116, 105, 110, 103, 34, 26, 10,\n      9, 66, 111, 111, 108, 86, 97, 108, 117, 101, 18, 13, 10,\n      5, 118, 97, 108, 117, 101, 24, 1, 32, 1, 40, 8, 34, 43,\n      10, 10, 69, 99, 104, 111, 83, 116, 97, 116, 117, 115,\n      18, 12, 10, 4, 99, 111, 100, 101, 24, 1, 32, 1, 40, 5,\n      18, 15, 10, 7, 109, 101, 115, 115, 97, 103, 101, 24, 2,\n      32, 1, 40, 9, 34, 64, 10, 7, 80, 97, 121, 108, 111, 97,\n      100, 18, 39, 10, 4, 116, 121, 112, 101, 24, 1, 32, 1,\n      40, 14, 50, 25, 46, 103, 114, 112, 99, 46, 116, 101,\n      115, 116, 105, 110, 103, 46, 80, 97, 121, 108, 111, 97,\n      100, 84, 121, 112, 101, 18, 12, 10, 4, 98, 111, 100,\n      121, 24, 2, 32, 1, 40, 12, 34, 63, 10, 13, 82, 101, 99,\n      111, 110, 110, 101, 99, 116, 73, 110, 102, 111, 18, 14,\n      10, 6, 112, 97, 115, 115, 101, 100, 24, 1, 32, 1, 40, 8,\n      18, 30, 10, 10, 98, 97, 99, 107, 111, 102, 102, 95, 109,\n      115, 24, 2, 32, 3, 40, 5, 66, 10, 8, 0, 16, 1, 48, 0,\n      40, 0, 80, 0, 34, 51, 10, 15, 82, 101, 99, 111, 110,\n      110, 101, 99, 116, 80, 97, 114, 97, 109, 115, 18, 32,\n      10, 24, 109, 97, 120, 95, 114, 101, 99, 111, 110, 110,\n      101, 99, 116, 95, 98, 97, 99, 107, 111, 102, 102, 95,\n      109, 115, 24, 1, 32, 1, 40, 5, 34, 100, 10, 18, 82, 101,\n      115, 112, 111, 110, 115, 101, 80, 97, 114, 97, 109, 101,\n      116, 101, 114, 115, 18, 12, 10, 4, 115, 105, 122, 101,\n      24, 1, 32, 1, 40, 5, 18, 19, 10, 11, 105, 110, 116, 101,\n      114, 118, 97, 108, 95, 117, 115, 24, 2, 32, 1, 40, 5,\n      18, 43, 10, 10, 99, 111, 109, 112, 114, 101, 115, 115,\n      101, 100, 24, 3, 32, 1, 40, 11, 50, 23, 46, 103, 114,\n      112, 99, 46, 116, 101, 115, 116, 105, 110, 103, 46, 66,\n      111, 111, 108, 86, 97, 108, 117, 101, 34, 206, 2, 10,\n      13, 83, 105, 109, 112, 108, 101, 82, 101, 113, 117, 101,\n      115, 116, 18, 48, 10, 13, 114, 101, 115, 112, 111, 110,\n      115, 101, 95, 116, 121, 112, 101, 24, 1, 32, 1, 40, 14,\n      50, 25, 46, 103, 114, 112, 99, 46, 116, 101, 115, 116,\n      105, 110, 103, 46, 80, 97, 121, 108, 111, 97, 100, 84,\n      121, 112, 101, 18, 21, 10, 13, 114, 101, 115, 112, 111,\n      110, 115, 101, 95, 115, 105, 122, 101, 24, 2, 32, 1, 40,\n      5, 18, 38, 10, 7, 112, 97, 121, 108, 111, 97, 100, 24,\n      3, 32, 1, 40, 11, 50, 21, 46, 103, 114, 112, 99, 46,\n      116, 101, 115, 116, 105, 110, 103, 46, 80, 97, 121, 108,\n      111, 97, 100, 18, 21, 10, 13, 102, 105, 108, 108, 95,\n      117, 115, 101, 114, 110, 97, 109, 101, 24, 4, 32, 1, 40,\n      8, 18, 24, 10, 16, 102, 105, 108, 108, 95, 111, 97, 117,\n      116, 104, 95, 115, 99, 111, 112, 101, 24, 5, 32, 1, 40,\n      8, 18, 52, 10, 19, 114, 101, 115, 112, 111, 110, 115,\n      101, 95, 99, 111, 109, 112, 114, 101, 115, 115, 101,\n      100, 24, 6, 32, 1, 40, 11, 50, 23, 46, 103, 114, 112,\n      99, 46, 116, 101, 115, 116, 105, 110, 103, 46, 66, 111,\n      111, 108, 86, 97, 108, 117, 101, 18, 49, 10, 15, 114,\n      101, 115, 112, 111, 110, 115, 101, 95, 115, 116, 97,\n      116, 117, 115, 24, 7, 32, 1, 40, 11, 50, 24, 46, 103,\n      114, 112, 99, 46, 116, 101, 115, 116, 105, 110, 103, 46,\n      69, 99, 104, 111, 83, 116, 97, 116, 117, 115, 18, 50,\n      10, 17, 101, 120, 112, 101, 99, 116, 95, 99, 111, 109,\n      112, 114, 101, 115, 115, 101, 100, 24, 8, 32, 1, 40, 11,\n      50, 23, 46, 103, 114, 112, 99, 46, 116, 101, 115, 116,\n      105, 110, 103, 46, 66, 111, 111, 108, 86, 97, 108, 117,\n      101, 34, 95, 10, 14, 83, 105, 109, 112, 108, 101, 82,\n      101, 115, 112, 111, 110, 115, 101, 18, 38, 10, 7, 112,\n      97, 121, 108, 111, 97, 100, 24, 1, 32, 1, 40, 11, 50,\n      21, 46, 103, 114, 112, 99, 46, 116, 101, 115, 116, 105,\n      110, 103, 46, 80, 97, 121, 108, 111, 97, 100, 18, 16,\n      10, 8, 117, 115, 101, 114, 110, 97, 109, 101, 24, 2, 32,\n      1, 40, 9, 18, 19, 10, 11, 111, 97, 117, 116, 104, 95,\n      115, 99, 111, 112, 101, 24, 3, 32, 1, 40, 9, 34, 119,\n      10, 25, 83, 116, 114, 101, 97, 109, 105, 110, 103, 73,\n      110, 112, 117, 116, 67, 97, 108, 108, 82, 101, 113, 117,\n      101, 115, 116, 18, 38, 10, 7, 112, 97, 121, 108, 111,\n      97, 100, 24, 1, 32, 1, 40, 11, 50, 21, 46, 103, 114,\n      112, 99, 46, 116, 101, 115, 116, 105, 110, 103, 46, 80,\n      97, 121, 108, 111, 97, 100, 18, 50, 10, 17, 101, 120,\n      112, 101, 99, 116, 95, 99, 111, 109, 112, 114, 101, 115,\n      115, 101, 100, 24, 2, 32, 1, 40, 11, 50, 23, 46, 103,\n      114, 112, 99, 46, 116, 101, 115, 116, 105, 110, 103, 46,\n      66, 111, 111, 108, 86, 97, 108, 117, 101, 34, 61, 10,\n      26, 83, 116, 114, 101, 97, 109, 105, 110, 103, 73, 110,\n      112, 117, 116, 67, 97, 108, 108, 82, 101, 115, 112, 111,\n      110, 115, 101, 18, 31, 10, 23, 97, 103, 103, 114, 101,\n      103, 97, 116, 101, 100, 95, 112, 97, 121, 108, 111, 97,\n      100, 95, 115, 105, 122, 101, 24, 1, 32, 1, 40, 5, 34,\n      232, 1, 10, 26, 83, 116, 114, 101, 97, 109, 105, 110,\n      103, 79, 117, 116, 112, 117, 116, 67, 97, 108, 108, 82,\n      101, 113, 117, 101, 115, 116, 18, 48, 10, 13, 114, 101,\n      115, 112, 111, 110, 115, 101, 95, 116, 121, 112, 101,\n      24, 1, 32, 1, 40, 14, 50, 25, 46, 103, 114, 112, 99, 46,\n      116, 101, 115, 116, 105, 110, 103, 46, 80, 97, 121, 108,\n      111, 97, 100, 84, 121, 112, 101, 18, 61, 10, 19, 114,\n      101, 115, 112, 111, 110, 115, 101, 95, 112, 97, 114, 97,\n      109, 101, 116, 101, 114, 115, 24, 2, 32, 3, 40, 11, 50,\n      32, 46, 103, 114, 112, 99, 46, 116, 101, 115, 116, 105,\n      110, 103, 46, 82, 101, 115, 112, 111, 110, 115, 101, 80,\n      97, 114, 97, 109, 101, 116, 101, 114, 115, 18, 38, 10,\n      7, 112, 97, 121, 108, 111, 97, 100, 24, 3, 32, 1, 40,\n      11, 50, 21, 46, 103, 114, 112, 99, 46, 116, 101, 115,\n      116, 105, 110, 103, 46, 80, 97, 121, 108, 111, 97, 100,\n      18, 49, 10, 15, 114, 101, 115, 112, 111, 110, 115, 101,\n      95, 115, 116, 97, 116, 117, 115, 24, 7, 32, 1, 40, 11,\n      50, 24, 46, 103, 114, 112, 99, 46, 116, 101, 115, 116,\n      105, 110, 103, 46, 69, 99, 104, 111, 83, 116, 97, 116,\n      117, 115, 34, 69, 10, 27, 83, 116, 114, 101, 97, 109,\n      105, 110, 103, 79, 117, 116, 112, 117, 116, 67, 97, 108,\n      108, 82, 101, 115, 112, 111, 110, 115, 101, 18, 38, 10,\n      7, 112, 97, 121, 108, 111, 97, 100, 24, 1, 32, 1, 40,\n      11, 50, 21, 46, 103, 114, 112, 99, 46, 116, 101, 115,\n      116, 105, 110, 103, 46, 80, 97, 121, 108, 111, 97, 100,\n      42, 31, 10, 11, 80, 97, 121, 108, 111, 97, 100, 84, 121,\n      112, 101, 18, 16, 10, 12, 67, 79, 77, 80, 82, 69, 83,\n      83, 65, 66, 76, 69, 16, 0, 98, 6, 112, 114, 111, 116,\n      111, 51>>;\ndescriptor(X) -> error({gpb_error, {badname, X}}).\n\n\ngpb_version_as_string() ->\n    \"4.7.3\".\n\ngpb_version_as_list() ->\n    [4,7,3].\n"
  },
  {
    "path": "benchmark/src/grpc_testing_benchmark_service.erl",
    "content": "-module(grpc_testing_benchmark_service).\n\n-behaviour(grpc_testing_benchmark_service_bhvr).\n\n-export([unary_call/2,\n         streaming_call/2,\n         streaming_from_client/2,\n         streaming_from_server/2,\n         streaming_both_ways/2]).\n\n-spec unary_call(ctx:ctx(), benchmark_service_pb:simple_request()) ->\n                        {ok, benchmark_service_pb:simple_response()} | grpcbox_stream:grpc_error_response().\nunary_call(Ctx, #{response_size := Size}) ->\n    Body = << <<0>> || _ <- lists:seq(1, Size) >>,\n    {ok, #{payload => #{type => 'COMPRESSABLE',\n                        body => Body\n                       }\n          }, Ctx}.\n\n-spec streaming_call(reference(), grpcbox_stream:t()) ->\n          ok | grpcbox_stream:grpc_error_response().\nstreaming_call(Ref, Stream) ->\n    receive\n        {Ref, eos} ->\n            ok;\n        {Ref, #{response_status := #{code := Code,\n                                     message := Message}}} ->\n            grpcbox_stream:error(grpcbox_stream:code_to_status(Code), Message);\n        {Ref, #{response_type := ResponseType,\n                response_size := ResponseSize\n               }} ->\n            Body = << <<0>> || _ <- lists:seq(1, ResponseSize) >>,\n            grpcbox_stream:send(#{payload => #{type => ResponseType,\n                                               body => Body}}, Stream),\n            streaming_call(Ref, Stream)\n    end.\n\n-spec streaming_from_client(reference(), grpcbox_stream:t()) ->\n    {ok, benchmark_service_pb:simple_response(), ctx:ctx()} | grpcbox_stream:grpc_error_response().\nstreaming_from_client(_Ref, _Stream) ->\n    ok.\n\n-spec streaming_from_server(benchmark_service_pb:simple_request(), grpcbox_stream:t()) ->\n    ok | grpcbox_stream:grpc_error_response().\nstreaming_from_server(_Ref, _Stream) ->\n    ok.\n\n-spec streaming_both_ways(reference(), grpcbox_stream:t()) ->\n    ok | grpcbox_stream:grpc_error_response().\nstreaming_both_ways(_Ref, _Stream) ->\n    ok.\n"
  },
  {
    "path": "benchmark/src/grpc_testing_benchmark_service_bhvr.erl",
    "content": "%%%-------------------------------------------------------------------\n%% @doc Behaviour to implement for grpc service grpc.testing.BenchmarkService.\n%% @end\n%%%-------------------------------------------------------------------\n\n%% this module was generated on 2021-12-29T09:28:22+00:00 and should not be modified manually\n\n-module(grpc_testing_benchmark_service_bhvr).\n\n%% @doc Unary RPC\n-callback unary_call(ctx:ctx(), benchmark_service_pb:simple_request()) ->\n    {ok, benchmark_service_pb:simple_response(), ctx:ctx()} | grpcbox_stream:grpc_error_response().\n\n%% @doc \n-callback streaming_call(reference(), grpcbox_stream:t()) ->\n    ok | grpcbox_stream:grpc_error_response().\n\n%% @doc \n-callback streaming_from_client(reference(), grpcbox_stream:t()) ->\n    {ok, benchmark_service_pb:simple_response(), ctx:ctx()} | grpcbox_stream:grpc_error_response().\n\n%% @doc \n-callback streaming_from_server(benchmark_service_pb:simple_request(), grpcbox_stream:t()) ->\n    ok | grpcbox_stream:grpc_error_response().\n\n%% @doc \n-callback streaming_both_ways(reference(), grpcbox_stream:t()) ->\n    ok | grpcbox_stream:grpc_error_response().\n\n"
  },
  {
    "path": "benchmark/src/grpc_testing_benchmark_service_client.erl",
    "content": "%%%-------------------------------------------------------------------\n%% @doc Client module for grpc service grpc.testing.BenchmarkService.\n%% @end\n%%%-------------------------------------------------------------------\n\n%% this module was generated on 2021-12-29T09:28:22+00:00 and should not be modified manually\n\n-module(grpc_testing_benchmark_service_client).\n\n-compile(export_all).\n-compile(nowarn_export_all).\n\n-include_lib(\"grpcbox/include/grpcbox.hrl\").\n\n-define(is_ctx(Ctx), is_tuple(Ctx) andalso element(1, Ctx) =:= ctx).\n\n-define(SERVICE, 'grpc.testing.BenchmarkService').\n-define(PROTO_MODULE, 'benchmark_service_pb').\n-define(MARSHAL_FUN(T), fun(I) -> ?PROTO_MODULE:encode_msg(I, T) end).\n-define(UNMARSHAL_FUN(T), fun(I) -> ?PROTO_MODULE:decode_msg(I, T) end).\n-define(DEF(Input, Output, MessageType), #grpcbox_def{service=?SERVICE,\n                                                      message_type=MessageType,\n                                                      marshal_fun=?MARSHAL_FUN(Input),\n                                                      unmarshal_fun=?UNMARSHAL_FUN(Output)}).\n\n%% @doc Unary RPC\n-spec unary_call(benchmark_service_pb:simple_request()) ->\n    {ok, benchmark_service_pb:simple_response(), grpcbox:metadata()} | grpcbox_stream:grpc_error_response().\nunary_call(Input) ->\n    unary_call(ctx:new(), Input, #{}).\n\n-spec unary_call(ctx:t() | benchmark_service_pb:simple_request(), benchmark_service_pb:simple_request() | grpcbox_client:options()) ->\n    {ok, benchmark_service_pb:simple_response(), grpcbox:metadata()} | grpcbox_stream:grpc_error_response().\nunary_call(Ctx, Input) when ?is_ctx(Ctx) ->\n    unary_call(Ctx, Input, #{});\nunary_call(Input, Options) ->\n    unary_call(ctx:new(), Input, Options).\n\n-spec unary_call(ctx:t(), benchmark_service_pb:simple_request(), grpcbox_client:options()) ->\n    {ok, benchmark_service_pb:simple_response(), grpcbox:metadata()} | grpcbox_stream:grpc_error_response().\nunary_call(Ctx, Input, Options) ->\n    grpcbox_client:unary(Ctx, <<\"/grpc.testing.BenchmarkService/UnaryCall\">>, Input, ?DEF(simple_request, simple_response, <<\"grpc.testing.SimpleRequest\">>), Options).\n\n%% @doc \n-spec streaming_call() ->\n    {ok, grpcbox_client:stream()} | grpcbox_stream:grpc_error_response().\nstreaming_call() ->\n    streaming_call(ctx:new(), #{}).\n\n-spec streaming_call(ctx:t() | grpcbox_client:options()) ->\n    {ok, grpcbox_client:stream()} | grpcbox_stream:grpc_error_response().\nstreaming_call(Ctx) when ?is_ctx(Ctx) ->\n    streaming_call(Ctx, #{});\nstreaming_call(Options) ->\n    streaming_call(ctx:new(), Options).\n\n-spec streaming_call(ctx:t(), grpcbox_client:options()) ->\n    {ok, grpcbox_client:stream()} | grpcbox_stream:grpc_error_response().\nstreaming_call(Ctx, Options) ->\n    grpcbox_client:stream(Ctx, <<\"/grpc.testing.BenchmarkService/StreamingCall\">>, ?DEF(simple_request, simple_response, <<\"grpc.testing.SimpleRequest\">>), Options).\n\n%% @doc \n-spec streaming_from_client() ->\n    {ok, grpcbox_client:stream()} | grpcbox_stream:grpc_error_response().\nstreaming_from_client() ->\n    streaming_from_client(ctx:new(), #{}).\n\n-spec streaming_from_client(ctx:t() | grpcbox_client:options()) ->\n    {ok, grpcbox_client:stream()} | grpcbox_stream:grpc_error_response().\nstreaming_from_client(Ctx) when ?is_ctx(Ctx) ->\n    streaming_from_client(Ctx, #{});\nstreaming_from_client(Options) ->\n    streaming_from_client(ctx:new(), Options).\n\n-spec streaming_from_client(ctx:t(), grpcbox_client:options()) ->\n    {ok, grpcbox_client:stream()} | grpcbox_stream:grpc_error_response().\nstreaming_from_client(Ctx, Options) ->\n    grpcbox_client:stream(Ctx, <<\"/grpc.testing.BenchmarkService/StreamingFromClient\">>, ?DEF(simple_request, simple_response, <<\"grpc.testing.SimpleRequest\">>), Options).\n\n%% @doc \n-spec streaming_from_server(benchmark_service_pb:simple_request()) ->\n    {ok, grpcbox_client:stream()} | grpcbox_stream:grpc_error_response().\nstreaming_from_server(Input) ->\n    streaming_from_server(ctx:new(), Input, #{}).\n\n-spec streaming_from_server(ctx:t() | benchmark_service_pb:simple_request(), benchmark_service_pb:simple_request() | grpcbox_client:options()) ->\n    {ok, grpcbox_client:stream()} | grpcbox_stream:grpc_error_response().\nstreaming_from_server(Ctx, Input) when ?is_ctx(Ctx) ->\n    streaming_from_server(Ctx, Input, #{});\nstreaming_from_server(Input, Options) ->\n    streaming_from_server(ctx:new(), Input, Options).\n\n-spec streaming_from_server(ctx:t(), benchmark_service_pb:simple_request(), grpcbox_client:options()) ->\n    {ok, grpcbox_client:stream()} | grpcbox_stream:grpc_error_response().\nstreaming_from_server(Ctx, Input, Options) ->\n    grpcbox_client:stream(Ctx, <<\"/grpc.testing.BenchmarkService/StreamingFromServer\">>, Input, ?DEF(simple_request, simple_response, <<\"grpc.testing.SimpleRequest\">>), Options).\n\n%% @doc \n-spec streaming_both_ways() ->\n    {ok, grpcbox_client:stream()} | grpcbox_stream:grpc_error_response().\nstreaming_both_ways() ->\n    streaming_both_ways(ctx:new(), #{}).\n\n-spec streaming_both_ways(ctx:t() | grpcbox_client:options()) ->\n    {ok, grpcbox_client:stream()} | grpcbox_stream:grpc_error_response().\nstreaming_both_ways(Ctx) when ?is_ctx(Ctx) ->\n    streaming_both_ways(Ctx, #{});\nstreaming_both_ways(Options) ->\n    streaming_both_ways(ctx:new(), Options).\n\n-spec streaming_both_ways(ctx:t(), grpcbox_client:options()) ->\n    {ok, grpcbox_client:stream()} | grpcbox_stream:grpc_error_response().\nstreaming_both_ways(Ctx, Options) ->\n    grpcbox_client:stream(Ctx, <<\"/grpc.testing.BenchmarkService/StreamingBothWays\">>, ?DEF(simple_request, simple_response, <<\"grpc.testing.SimpleRequest\">>), Options).\n\n"
  },
  {
    "path": "benchmark/test/grpcbox_benchmark_client_SUITE.erl",
    "content": "-module(grpcbox_benchmark_client_SUITE).\n\n-compile([export_all]).\n\n-include_lib(\"eunit/include/eunit.hrl\").\n-include_lib(\"common_test/include/ct.hrl\").\n\n-include(\"grpcbox.hrl\").\n\n-define(COUNTER_SUM_REQS, 1).\n-define(COUNTER_SUM_LATENCY, 2).\n\nall() ->\n    [{group, identity}\n%     {group, gzip}\n    ].\n\ngroups() ->\n    Cases =\n        case ct:get_config(rpc_type, unary) of\n            unary -> [unary_call];\n            stream -> [streaming_call]\n        end,\n\n    [{identity, Cases}\n%     {gzip, Cases}\n    ].\n\ninit_per_group(Encoding, Config) ->\n    application:load(grpcbox),\n\n    NrConns = lists:seq(1, ct:get_config(num_conn, 1)),\n    ChannelEndpoints = [{http,\n                         ct:get_config(server_addr, \"localhost\"),\n                         ct:get_config(server_port, 8080),\n                         [{nr, Nr}]} || Nr <- NrConns],\n    application:set_env(grpcbox, client, #{channels => [{default_channel, ChannelEndpoints,\n                                                         #{encoding => Encoding}}]}),\n    {ok, _} = application:ensure_all_started(grpcbox),\n    application:set_env([{chatterbox, ct:get_config(chatterbox)}]),\n    Config.\n\nend_per_group(_Encoding, _Config) ->\n    application:stop(grpcbox),\n    ok.\n\nunary_call(_Config) ->\n    start_calls(unary).\n\nstreaming_call(_Config) ->\n    start_calls(streaming).\n\nstart_calls(CallType) ->\n    log_settings(),\n    NumRpc = lists:seq(1, ct:get_config(num_rpc, 1)),\n    Payload = client_payload(ct:get_config(rq_size, 1)),\n    SimpleRequest = #{payload => Payload, response_size => ct:get_config(rsp_size, 1)},\n    CounterRefs = [counters:new(2, [atomics]) || _ <- NumRpc],\n    StartTime = erlang:system_time(millisecond),\n    WarmupEndTime = StartTime + (ct:get_config(warmup_dur, 10) * 1000),\n    EndTime = WarmupEndTime + (ct:get_config(duration, 60) * 1000),\n    ParentPid = self(),\n\n    Pids = [spawn_link(fun() ->\n                               {ok, Stream} = get_stream(CallType),\n                               run_calls(Nr, Stream, SimpleRequest, lists:nth(Nr, CounterRefs), StartTime, WarmupEndTime, EndTime),\n                               ParentPid ! self()\n                       end) || Nr <- NumRpc],\n\n    wait_for_processes(Pids),\n    aggregate_counters(CounterRefs, WarmupEndTime, EndTime),\n    ok.\n\nwait_for_processes([]) ->\n    ok;\nwait_for_processes(Pids) ->\n    receive\n        Pid ->\n            NewPids = lists:delete(Pid, Pids),\n            wait_for_processes(NewPids)\n    end.\n\nget_stream(unary) ->\n    {ok, undefined};\nget_stream(streaming) ->\n    grpc_testing_benchmark_service_client:streaming_call(ctx:new()).\n\nrun_calls(ProcNr, Stream, SimpleRequest, CounterRef, StartTime, WarmupEndTime, EndTime) ->\n    CallStart = erlang:system_time(millisecond),\n    case CallStart > EndTime of\n        true ->\n            ok;\n        false ->\n            run_call(Stream, SimpleRequest),\n            CallEnd = erlang:system_time(millisecond),\n            case CallStart >= WarmupEndTime of\n                true ->\n                    update_counters(CounterRef, CallEnd - CallStart);\n                false ->\n                    ok\n            end,\n            run_calls(ProcNr, Stream, SimpleRequest, CounterRef, StartTime, WarmupEndTime, EndTime)\n    end.\n\nrun_call(undefined, SimpleRequest) ->\n    grpc_testing_benchmark_service_client:unary_call(ctx:new(), SimpleRequest);\nrun_call(Stream, SimpleRequest) ->\n    ok = grpcbox_client:send(Stream, SimpleRequest),\n    {ok, _} = grpcbox_client:recv_data(Stream).\n\nupdate_counters(CounterRef, Latency) ->\n    counters:add(CounterRef, ?COUNTER_SUM_REQS, 1),\n    counters:add(CounterRef, ?COUNTER_SUM_LATENCY, Latency).\n\nlog_counter(ProcNr, CounterRef, StartTime, CurrTime) ->\n    Reqs = counters:get(CounterRef, ?COUNTER_SUM_REQS),\n    SumLatency = counters:get(CounterRef, ?COUNTER_SUM_LATENCY),\n    ct:log(\"ProcNr: ~p, Total reqs: ~p, Reqs/s: ~p, Avg latency: ~p\", [ProcNr, Reqs, Reqs/((CurrTime-StartTime)/1000.0), SumLatency/Reqs]).\n\naggregate_counters(CounterRefs, StartTime, EndTime) ->\n    lists:foldl(fun(CounterRef, Ix) -> log_counter(Ix, CounterRef, StartTime, EndTime), Ix+1 end, 1, CounterRefs),\n    Reqs = lists:foldl(fun(CounterRef, Sum) ->\n                               counters:get(CounterRef, ?COUNTER_SUM_REQS) + Sum end,\n                       0,\n                       CounterRefs),\n    SumLatency = lists:foldl(fun(CounterRef, Sum) ->\n                                     counters:get(CounterRef, ?COUNTER_SUM_LATENCY) + Sum end,\n                             0,\n                             CounterRefs),\n    ct:log(\"Total reqs: ~p, Reqs/s: ~p, Avg latency: ~p\", [Reqs, Reqs/((EndTime-StartTime)/1000.0), SumLatency/Reqs]),\n    ct:print(\"Total reqs: ~p, Reqs/s: ~p, Avg latency: ~p\", [Reqs, Reqs/((EndTime-StartTime)/1000.0), SumLatency/Reqs]).\n\nclient_payload(NumBytes) ->\n    Body = << <<0:8>> || _ <- lists:seq(1, NumBytes)>>,\n    #{type => 0,\n      body => Body}.\n\nlog_settings() ->\n    log_ct_parameter(server_addr),\n    log_ct_parameter(server_port),\n    log_ct_parameter(num_rpc),\n    log_ct_parameter(num_conn),\n    log_ct_parameter(warmup_dur),\n    log_ct_parameter(duration),\n    log_ct_parameter(rq_size),\n    log_ct_parameter(rsp_size),\n    log_ct_parameter(rpc_type),\n    log_ct_parameter(chatterbox).\n\nlog_ct_parameter(Param) ->\n    ct:log(\"~p: ~p\" , [Param, ct:get_config(Param)]).\n"
  },
  {
    "path": "config/test.config",
    "content": "[\n {grpcbox, [{client, #{channels => [{default_channel, [{http, \"localhost\", 8080, []}],\n                                     #{%% stats_handler => grpcbox_oc_stats_handler\n                                      }}]}},\n            {servers,\n             [#{grpc_opts => #{service_protos => [route_guide_pb, grpcbox_health_pb, grpcbox_reflection_pb],\n                               services => #{'routeguide.RouteGuide' => routeguide_route_guide,\n                                             'grpc.health.v1.Health' => grpcbox_health_service,\n                                             'grpc.reflection.v1alpha.ServerReflection' =>\n                                                 grpcbox_reflection_service},\n                               %% stats_handler => grpcbox_oc_stats_handler,\n                               client_cert_dir => \"test/grpcbox_SUITE_data/certificates/\"},\n\n                transport_opts => #{ssl => false,\n                                    keyfile => \"test/grpcbox_SUITE_data/certificates/server1.key\",\n                                    certfile => \"test/grpcbox_SUITE_data/certificates/server1.pem\",\n                                    cacertfile => \"test/grpcbox_SUITE_data/certificates/ca.pem\"},\n\n                listen_opts => #{port => 8080,\n                                 ip => {0,0,0,0}},\n\n                pool_opts => #{size => 10},\n\n                server_opts => #{header_table_size => 4096,\n                                 enable_push => 1,\n                                 max_concurrent_streams => unlimited,\n                                 initial_window_size => 65535,\n                                 max_frame_size => 16384,\n                                 max_header_list_size => unlimited}}]}]\n },\n\n {opencensus, [{sampler, {oc_sampler_always, []}},\n               {reporters, [{oc_reporter_stdout, []}]},\n\n               {stat, [{exporters, [{oc_stat_exporter_stdout, []}]}]}]}\n].\n"
  },
  {
    "path": "elvis.config",
    "content": "[\n {\n   elvis,\n   [\n    {config,\n     [#{dirs => [\"src\"],\n        filter => \"*.erl\",\n        ignore => [],\n        rules => [{elvis_style, god_modules, #{ignore => []}},\n                  {elvis_style, no_debug_call, #{ignore => []}},\n                  {elvis_style, nesting_level, #{ignore => []}},\n                  {elvis_style, dont_repeat_yourself, #{min_complexity => 20}},\n                  {elvis_style, line_length, #{limit => 120}},\n                  {elvis_style, state_record_and_type, disable},\n                  {elvis_style, macro_names, disable},\n                  {elvis_style, function_naming_convention, #{regex => \"^_{0,2}([a-z][a-z0-9]*_?)*_{0,2}$\"}},\n                  {elvis_style, invalid_dynamic_call, #{ignore => [grpcbox_stream,\n                                                                   grpcbox_chain_interceptor,\n                                                                   grpcbox_services_sup]}}],\n        ruleset => erl_files\n       },\n      #{dirs => [\".\"],\n        filter => \"rebar.config\",\n        rules => [{elvis_project, no_deps_master_rebar, disable}],\n        ruleset => rebar_config\n       },\n      #{dirs => [\".\"],\n        filter => \"elvis.config\",\n        ruleset => elvis_config\n       }\n     ]\n    }\n   ]\n }\n].\n"
  },
  {
    "path": "include/grpcbox.hrl",
    "content": "-record(method, {key      :: {unicode:chardata() | '$1', unicode:chardata() | '_'} | '_',\n                 proto    :: module() | '$1' | '_',\n                 module   :: module() | '_',\n                 function :: atom() | '_',\n                 input    :: {term(), boolean()} | '_',\n                 output   :: {term(), boolean()} | '_',\n                 opts     :: [term()] | '_'}).\n\n%% service definition\n-record(grpcbox_def, {service :: atom(),\n                      message_type = <<>> :: binary(),\n                      marshal_fun :: fun((map()) -> binary()),\n                      unmarshal_fun :: fun((binary()) -> map())}).\n\n-define(CHANNELS_TAB, channels_table).\n\n-define(GRPC_STATUS_OK, <<\"0\">>).\n-define(GRPC_STATUS_CANCELLED, <<\"1\">>).\n-define(GRPC_STATUS_UNKNOWN, <<\"2\">>).\n-define(GRPC_STATUS_INVALID_ARGUMENT, <<\"3\">>).\n-define(GRPC_STATUS_DEADLINE_EXCEEDED, <<\"4\">>).\n-define(GRPC_STATUS_NOT_FOUND, <<\"5\">>).\n-define(GRPC_STATUS_ALREADY_EXISTS , <<\"6\">>).\n-define(GRPC_STATUS_PERMISSION_DENIED, <<\"7\">>).\n-define(GRPC_STATUS_RESOURCE_EXHAUSTED, <<\"8\">>).\n-define(GRPC_STATUS_FAILED_PRECONDITION, <<\"9\">>).\n-define(GRPC_STATUS_ABORTED, <<\"10\">>).\n-define(GRPC_STATUS_OUT_OF_RANGE, <<\"11\">>).\n-define(GRPC_STATUS_UNIMPLEMENTED, <<\"12\">>).\n-define(GRPC_STATUS_INTERNAL, <<\"13\">>).\n-define(GRPC_STATUS_UNAVAILABLE, <<\"14\">>).\n-define(GRPC_STATUS_DATA_LOSS, <<\"15\">>).\n-define(GRPC_STATUS_UNAUTHENTICATED, <<\"16\">>).\n\n-define(GRPC_ERROR(Status, Message), {grpc_error, {Status, Message}}).\n-define(THROW(Status, Message), throw(?GRPC_ERROR(Status, Message))).\n"
  },
  {
    "path": "interop/config/sys.config",
    "content": "[\n {grpcbox, [%% {client, #{channels => [{default_channel, [{http, \"localhost\", 8080, []}], #{}}]}},\n            {servers,\n             [#{grpc_opts => #{service_protos => [test_pb, grpcbox_health_pb, grpcbox_reflection_pb],\n                               services => #{'grpc.testing.TestService' => grpc_testing_test_service,\n                                             'grpc.health.v1.Health' => grpcbox_health_service,\n                                             'grpc.reflection.v1alpha.ServerReflection' =>\n                                                 grpcbox_reflection_service},\n                               client_cert_dir => \"test/grpcbox_SUITE_data/certificates/\"},\n\n                transport_opts => #{ssl => false,\n                                    keyfile => \"test/grpcbox_SUITE_data/certificates/server1.key\",\n                                    certfile => \"test/grpcbox_SUITE_data/certificates/server1.pem\",\n                                    cacertfile => \"test/grpcbox_SUITE_data/certificates/ca.pem\"},\n\n                listen_opts => #{port => 8080,\n                                 ip => {0,0,0,0}},\n\n                pool_opts => #{size => 10},\n\n                server_opts => #{header_table_size => 4096,\n                                 enable_push => 1,\n                                 max_concurrent_streams => unlimited,\n                                 initial_window_size => 65535,\n                                 max_frame_size => 16384,\n                                 max_header_list_size => unlimited}}]}]},\n\n {opencensus, [{sampler, {oc_sampler_always, []}},\n               {reporters, [{oc_reporter_stdout, []}]},\n\n               {stat, [{exporters, [{oc_stat_exporter_stdout, []}]}]}]},\n\n {kernel,\n  [\n   {logger,\n    [\n     {handler, default, logger_std_h,\n      #{filters => [{progress, {fun logger_filters:progress/2, stop}}],\n        formatter => {logger_formatter, #{single_line => true}}}}]}]}\n].\n"
  },
  {
    "path": "interop/include/grpcbox_interop_tests.hrl",
    "content": "-define(INITIAL_METADATA_KEY, <<\"x-grpc-test-echo-initial\">>).\n-define(TRAILING_METADATA_KEY, <<\"x-grpc-test-echo-trailing-bin\">>).\n-define(INITIAL_METADATA_VALUE, <<\"test_initial_metadata_value\">>).\n-define(TRAILING_METADATA_VALUE, <<\"\\x0a\\x0b\\x0a\\x0b\\x0a\\x0b\">>).\n"
  },
  {
    "path": "interop/proto/empty.proto",
    "content": "\n// Copyright 2015 gRPC authors.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nsyntax = \"proto3\";\n\npackage grpc.testing;\n\n// An empty message that you can re-use to avoid defining duplicated empty\n// messages in your project. A typical example is to use it as argument or the\n// return value of a service API. For instance:\n//\n//   service Foo {\n//     rpc Bar (grpc.testing.Empty) returns (grpc.testing.Empty) { };\n//   };\n//\nmessage Empty {}\n"
  },
  {
    "path": "interop/proto/messages.proto",
    "content": "\n// Copyright 2015-2016 gRPC authors.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// Message definitions to be used by integration test service definitions.\n\nsyntax = \"proto3\";\n\npackage grpc.testing;\n\n// TODO(dgq): Go back to using well-known types once\n// https://github.com/grpc/grpc/issues/6980 has been fixed.\n// import \"google/protobuf/wrappers.proto\";\nmessage BoolValue {\n  // The bool value.\n  bool value = 1;\n}\n\n// DEPRECATED, don't use. To be removed shortly.\n// The type of payload that should be returned.\nenum PayloadType {\n  // Compressible text format.\n  COMPRESSABLE = 0;\n}\n\n// A block of data, to simply increase gRPC message size.\nmessage Payload {\n  // DEPRECATED, don't use. To be removed shortly.\n  // The type of data in body.\n  PayloadType type = 1;\n  // Primary contents of payload.\n  bytes body = 2;\n}\n\n// A protobuf representation for grpc status. This is used by test\n// clients to specify a status that the server should attempt to return.\nmessage EchoStatus {\n  int32 code = 1;\n  string message = 2;\n}\n\n// Unary request.\nmessage SimpleRequest {\n  // DEPRECATED, don't use. To be removed shortly.\n  // Desired payload type in the response from the server.\n  // If response_type is RANDOM, server randomly chooses one from other formats.\n  PayloadType response_type = 1;\n\n  // Desired payload size in the response from the server.\n  int32 response_size = 2;\n\n  // Optional input payload sent along with the request.\n  Payload payload = 3;\n\n  // Whether SimpleResponse should include username.\n  bool fill_username = 4;\n\n  // Whether SimpleResponse should include OAuth scope.\n  bool fill_oauth_scope = 5;\n\n  // Whether to request the server to compress the response. This field is\n  // \"nullable\" in order to interoperate seamlessly with clients not able to\n  // implement the full compression tests by introspecting the call to verify\n  // the response's compression status.\n  BoolValue response_compressed = 6;\n\n  // Whether server should return a given status\n  EchoStatus response_status = 7;\n\n  // Whether the server should expect this request to be compressed.\n  BoolValue expect_compressed = 8;\n}\n\n// Unary response, as configured by the request.\nmessage SimpleResponse {\n  // Payload to increase message size.\n  Payload payload = 1;\n  // The user the request came from, for verifying authentication was\n  // successful when the client expected it.\n  string username = 2;\n  // OAuth scope.\n  string oauth_scope = 3;\n}\n\n// Client-streaming request.\nmessage StreamingInputCallRequest {\n  // Optional input payload sent along with the request.\n  Payload payload = 1;\n\n  // Whether the server should expect this request to be compressed. This field\n  // is \"nullable\" in order to interoperate seamlessly with servers not able to\n  // implement the full compression tests by introspecting the call to verify\n  // the request's compression status.\n  BoolValue expect_compressed = 2;\n\n  // Not expecting any payload from the response.\n}\n\n// Client-streaming response.\nmessage StreamingInputCallResponse {\n  // Aggregated size of payloads received from the client.\n  int32 aggregated_payload_size = 1;\n}\n\n// Configuration for a particular response.\nmessage ResponseParameters {\n  // Desired payload sizes in responses from the server.\n  int32 size = 1;\n\n  // Desired interval between consecutive responses in the response stream in\n  // microseconds.\n  int32 interval_us = 2;\n\n  // Whether to request the server to compress the response. This field is\n  // \"nullable\" in order to interoperate seamlessly with clients not able to\n  // implement the full compression tests by introspecting the call to verify\n  // the response's compression status.\n  BoolValue compressed = 3;\n}\n\n// Server-streaming request.\nmessage StreamingOutputCallRequest {\n  // DEPRECATED, don't use. To be removed shortly.\n  // Desired payload type in the response from the server.\n  // If response_type is RANDOM, the payload from each response in the stream\n  // might be of different types. This is to simulate a mixed type of payload\n  // stream.\n  PayloadType response_type = 1;\n\n  // Configuration for each expected response message.\n  repeated ResponseParameters response_parameters = 2;\n\n  // Optional input payload sent along with the request.\n  Payload payload = 3;\n\n  // Whether server should return a given status\n  EchoStatus response_status = 7;\n}\n\n// Server-streaming response, as configured by the request and parameters.\nmessage StreamingOutputCallResponse {\n  // Payload to increase response size.\n  Payload payload = 1;\n}\n\n// For reconnect interop test only.\n// Client tells server what reconnection parameters it used.\nmessage ReconnectParams {\n  int32 max_reconnect_backoff_ms = 1;\n}\n\n// For reconnect interop test only.\n// Server tells client whether its reconnects are following the spec and the\n// reconnect backoffs it saw.\nmessage ReconnectInfo {\n  bool passed = 1;\n  repeated int32 backoff_ms = 2;\n}\n"
  },
  {
    "path": "interop/proto/test.proto",
    "content": "\n// Copyright 2015-2016 gRPC authors.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// An integration test service that covers all the method signature permutations\n// of unary/streaming requests/responses.\n\nsyntax = \"proto3\";\n\nimport \"interop/proto/empty.proto\";\nimport \"interop/proto/messages.proto\";\n\npackage grpc.testing;\n\n// A simple service to test the various types of RPCs and experiment with\n// performance with various types of payload.\nservice TestService {\n  // One empty request followed by one empty response.\n  rpc EmptyCall(grpc.testing.Empty) returns (grpc.testing.Empty);\n\n  // One request followed by one response.\n  rpc UnaryCall(SimpleRequest) returns (SimpleResponse);\n\n  // One request followed by one response. Response has cache control\n  // headers set such that a caching HTTP proxy (such as GFE) can\n  // satisfy subsequent requests.\n  rpc CacheableUnaryCall(SimpleRequest) returns (SimpleResponse);\n\n  // One request followed by a sequence of responses (streamed download).\n  // The server returns the payload with client desired type and sizes.\n  rpc StreamingOutputCall(StreamingOutputCallRequest)\n      returns (stream StreamingOutputCallResponse);\n\n  // A sequence of requests followed by one response (streamed upload).\n  // The server returns the aggregated size of client payload as the result.\n  rpc StreamingInputCall(stream StreamingInputCallRequest)\n      returns (StreamingInputCallResponse);\n\n  // A sequence of requests with each request served by the server immediately.\n  // As one request could lead to multiple responses, this interface\n  // demonstrates the idea of full duplexing.\n  rpc FullDuplexCall(stream StreamingOutputCallRequest)\n      returns (stream StreamingOutputCallResponse);\n\n  // A sequence of requests followed by a sequence of responses.\n  // The server buffers all the client requests and then serves them in order. A\n  // stream of responses are returned to the client when the server starts with\n  // first request.\n  rpc HalfDuplexCall(stream StreamingOutputCallRequest)\n      returns (stream StreamingOutputCallResponse);\n\n  // The test server will not implement this method. It will be used\n  // to test the behavior when clients call unimplemented methods.\n  rpc UnimplementedCall(grpc.testing.Empty) returns (grpc.testing.Empty);\n}\n\n// A simple service NOT implemented at servers so clients can test for\n// that case.\nservice UnimplementedService {\n  // A call that no server should implement\n  rpc UnimplementedCall(grpc.testing.Empty) returns (grpc.testing.Empty);\n}\n\n// A service used to control reconnect server.\nservice ReconnectService {\n  rpc Start(grpc.testing.ReconnectParams) returns (grpc.testing.Empty);\n  rpc Stop(grpc.testing.Empty) returns (grpc.testing.ReconnectInfo);\n}\n"
  },
  {
    "path": "interop/run_server_tests.sh",
    "content": "#!/bin/bash\n\nPORT=8080\nTLS=false\n\ntests=(\n    empty_unary\n    large_unary\n    client_streaming\n    server_streaming\n    ping_pong\n    empty_stream\n    status_code_and_message\n    custom_metadata\n    unimplemented_method\n    unimplemented_service\n\n    ## TODO\n    # compute_engine_creds\n    # service_account_creds\n    # jwt_token_creds\n    # per_rpc_creds\n    # oauth2_auth_token\n\n    ## tests that do pass but shouldn't ##\n    # timeout_on_sleeping_server\n    # cancel_after_begin\n    # cancel_after_first_response\n)\n\nfor test in \"${tests[@]}\"; do\n    echo -n \"Running ${test}... \"\n    go-grpc-interop-client -use_tls=$TLS -test_case=$test -server_port=$PORT\n    if [[ $? -ne 0 ]]; then\n        echo \"Failed!\"\n        exit 1\n    fi\n    echo \"Passed\"\ndone\n\necho \"----\"\necho \"YAY! All enabled tests passed.\"\n"
  },
  {
    "path": "interop/src/empty_pb.erl",
    "content": "%% -*- coding: utf-8 -*-\n%% @private\n%% Automatically generated, do not edit\n%% Generated by gpb_compile version 4.7.1\n-module(empty_pb).\n\n-export([encode_msg/2, encode_msg/3]).\n-export([decode_msg/2, decode_msg/3]).\n-export([merge_msgs/3, merge_msgs/4]).\n-export([verify_msg/2, verify_msg/3]).\n-export([get_msg_defs/0]).\n-export([get_msg_names/0]).\n-export([get_group_names/0]).\n-export([get_msg_or_group_names/0]).\n-export([get_enum_names/0]).\n-export([find_msg_def/1, fetch_msg_def/1]).\n-export([find_enum_def/1, fetch_enum_def/1]).\n-export([enum_symbol_by_value/2, enum_value_by_symbol/2]).\n-export([get_service_names/0]).\n-export([get_service_def/1]).\n-export([get_rpc_names/1]).\n-export([find_rpc_def/2, fetch_rpc_def/2]).\n-export([fqbin_to_service_name/1]).\n-export([service_name_to_fqbin/1]).\n-export([fqbins_to_service_and_rpc_name/2]).\n-export([service_and_rpc_name_to_fqbins/2]).\n-export([fqbin_to_msg_name/1]).\n-export([msg_name_to_fqbin/1]).\n-export([fqbin_to_enum_name/1]).\n-export([enum_name_to_fqbin/1]).\n-export([get_package_name/0]).\n-export([uses_packages/0]).\n-export([source_basename/0]).\n-export([get_all_source_basenames/0]).\n-export([get_all_proto_names/0]).\n-export([get_msg_containment/1]).\n-export([get_pkg_containment/1]).\n-export([get_service_containment/1]).\n-export([get_rpc_containment/1]).\n-export([get_enum_containment/1]).\n-export([get_proto_by_msg_name_as_fqbin/1]).\n-export([get_proto_by_service_name_as_fqbin/1]).\n-export([get_proto_by_enum_name_as_fqbin/1]).\n-export([get_protos_by_pkg_name_as_fqbin/1]).\n-export([descriptor/0, descriptor/1]).\n-export([gpb_version_as_string/0, gpb_version_as_list/0]).\n\n\n%% enumerated types\n\n-export_type([]).\n\n%% message types\n-type empty() ::\n      #{\n       }.\n\n-export_type(['empty'/0]).\n\n-spec encode_msg(empty(), atom()) -> binary().\nencode_msg(Msg, MsgName) when is_atom(MsgName) ->\n    encode_msg(Msg, MsgName, []).\n\n-spec encode_msg(empty(), atom(), list()) -> binary().\nencode_msg(Msg, MsgName, Opts) ->\n    case proplists:get_bool(verify, Opts) of\n      true -> verify_msg(Msg, MsgName, Opts);\n      false -> ok\n    end,\n    TrUserData = proplists:get_value(user_data, Opts),\n    case MsgName of\n      empty ->\n\t  encode_msg_empty(id(Msg, TrUserData), TrUserData)\n    end.\n\n\nencode_msg_empty(_Msg, _TrUserData) -> <<>>.\n\n-compile({nowarn_unused_function,e_type_sint/3}).\ne_type_sint(Value, Bin, _TrUserData) when Value >= 0 ->\n    e_varint(Value * 2, Bin);\ne_type_sint(Value, Bin, _TrUserData) ->\n    e_varint(Value * -2 - 1, Bin).\n\n-compile({nowarn_unused_function,e_type_int32/3}).\ne_type_int32(Value, Bin, _TrUserData)\n    when 0 =< Value, Value =< 127 ->\n    <<Bin/binary, Value>>;\ne_type_int32(Value, Bin, _TrUserData) ->\n    <<N:64/unsigned-native>> = <<Value:64/signed-native>>,\n    e_varint(N, Bin).\n\n-compile({nowarn_unused_function,e_type_int64/3}).\ne_type_int64(Value, Bin, _TrUserData)\n    when 0 =< Value, Value =< 127 ->\n    <<Bin/binary, Value>>;\ne_type_int64(Value, Bin, _TrUserData) ->\n    <<N:64/unsigned-native>> = <<Value:64/signed-native>>,\n    e_varint(N, Bin).\n\n-compile({nowarn_unused_function,e_type_bool/3}).\ne_type_bool(true, Bin, _TrUserData) ->\n    <<Bin/binary, 1>>;\ne_type_bool(false, Bin, _TrUserData) ->\n    <<Bin/binary, 0>>;\ne_type_bool(1, Bin, _TrUserData) -> <<Bin/binary, 1>>;\ne_type_bool(0, Bin, _TrUserData) -> <<Bin/binary, 0>>.\n\n-compile({nowarn_unused_function,e_type_string/3}).\ne_type_string(S, Bin, _TrUserData) ->\n    Utf8 = unicode:characters_to_binary(S),\n    Bin2 = e_varint(byte_size(Utf8), Bin),\n    <<Bin2/binary, Utf8/binary>>.\n\n-compile({nowarn_unused_function,e_type_bytes/3}).\ne_type_bytes(Bytes, Bin, _TrUserData)\n    when is_binary(Bytes) ->\n    Bin2 = e_varint(byte_size(Bytes), Bin),\n    <<Bin2/binary, Bytes/binary>>;\ne_type_bytes(Bytes, Bin, _TrUserData)\n    when is_list(Bytes) ->\n    BytesBin = iolist_to_binary(Bytes),\n    Bin2 = e_varint(byte_size(BytesBin), Bin),\n    <<Bin2/binary, BytesBin/binary>>.\n\n-compile({nowarn_unused_function,e_type_fixed32/3}).\ne_type_fixed32(Value, Bin, _TrUserData) ->\n    <<Bin/binary, Value:32/little>>.\n\n-compile({nowarn_unused_function,e_type_sfixed32/3}).\ne_type_sfixed32(Value, Bin, _TrUserData) ->\n    <<Bin/binary, Value:32/little-signed>>.\n\n-compile({nowarn_unused_function,e_type_fixed64/3}).\ne_type_fixed64(Value, Bin, _TrUserData) ->\n    <<Bin/binary, Value:64/little>>.\n\n-compile({nowarn_unused_function,e_type_sfixed64/3}).\ne_type_sfixed64(Value, Bin, _TrUserData) ->\n    <<Bin/binary, Value:64/little-signed>>.\n\n-compile({nowarn_unused_function,e_type_float/3}).\ne_type_float(V, Bin, _) when is_number(V) ->\n    <<Bin/binary, V:32/little-float>>;\ne_type_float(infinity, Bin, _) ->\n    <<Bin/binary, 0:16, 128, 127>>;\ne_type_float('-infinity', Bin, _) ->\n    <<Bin/binary, 0:16, 128, 255>>;\ne_type_float(nan, Bin, _) ->\n    <<Bin/binary, 0:16, 192, 127>>.\n\n-compile({nowarn_unused_function,e_type_double/3}).\ne_type_double(V, Bin, _) when is_number(V) ->\n    <<Bin/binary, V:64/little-float>>;\ne_type_double(infinity, Bin, _) ->\n    <<Bin/binary, 0:48, 240, 127>>;\ne_type_double('-infinity', Bin, _) ->\n    <<Bin/binary, 0:48, 240, 255>>;\ne_type_double(nan, Bin, _) ->\n    <<Bin/binary, 0:48, 248, 127>>.\n\n-compile({nowarn_unused_function,e_varint/3}).\ne_varint(N, Bin, _TrUserData) -> e_varint(N, Bin).\n\n-compile({nowarn_unused_function,e_varint/2}).\ne_varint(N, Bin) when N =< 127 -> <<Bin/binary, N>>;\ne_varint(N, Bin) ->\n    Bin2 = <<Bin/binary, (N band 127 bor 128)>>,\n    e_varint(N bsr 7, Bin2).\n\n\ndecode_msg(Bin, MsgName) when is_binary(Bin) ->\n    decode_msg(Bin, MsgName, []).\n\ndecode_msg(Bin, MsgName, Opts) when is_binary(Bin) ->\n    TrUserData = proplists:get_value(user_data, Opts),\n    decode_msg_1_catch(Bin, MsgName, TrUserData).\n\n-ifdef('OTP_RELEASE').\ndecode_msg_1_catch(Bin, MsgName, TrUserData) ->\n    try decode_msg_2_doit(MsgName, Bin, TrUserData)\n    catch Class:Reason:StackTrace -> error({gpb_error,{decoding_failure, {Bin, MsgName, {Class, Reason, StackTrace}}}})\n    end.\n-else.\ndecode_msg_1_catch(Bin, MsgName, TrUserData) ->\n    try decode_msg_2_doit(MsgName, Bin, TrUserData)\n    catch Class:Reason ->\n        StackTrace = erlang:get_stacktrace(),\n        error({gpb_error,{decoding_failure, {Bin, MsgName, {Class, Reason, StackTrace}}}})\n    end.\n-endif.\n\ndecode_msg_2_doit(empty, Bin, TrUserData) ->\n    id(decode_msg_empty(Bin, TrUserData), TrUserData).\n\n\n\ndecode_msg_empty(Bin, TrUserData) ->\n    dfp_read_field_def_empty(Bin, 0, 0, TrUserData).\n\ndfp_read_field_def_empty(<<>>, 0, 0, _) -> #{};\ndfp_read_field_def_empty(Other, Z1, Z2, TrUserData) ->\n    dg_read_field_def_empty(Other, Z1, Z2, TrUserData).\n\ndg_read_field_def_empty(<<1:1, X:7, Rest/binary>>, N,\n\t\t\tAcc, TrUserData)\n    when N < 32 - 7 ->\n    dg_read_field_def_empty(Rest, N + 7, X bsl N + Acc,\n\t\t\t    TrUserData);\ndg_read_field_def_empty(<<0:1, X:7, Rest/binary>>, N,\n\t\t\tAcc, TrUserData) ->\n    Key = X bsl N + Acc,\n    case Key band 7 of\n      0 -> skip_varint_empty(Rest, 0, 0, TrUserData);\n      1 -> skip_64_empty(Rest, 0, 0, TrUserData);\n      2 ->\n\t  skip_length_delimited_empty(Rest, 0, 0, TrUserData);\n      3 -> skip_group_empty(Rest, Key bsr 3, 0, TrUserData);\n      5 -> skip_32_empty(Rest, 0, 0, TrUserData)\n    end;\ndg_read_field_def_empty(<<>>, 0, 0, _) -> #{}.\n\nskip_varint_empty(<<1:1, _:7, Rest/binary>>, Z1, Z2,\n\t\t  TrUserData) ->\n    skip_varint_empty(Rest, Z1, Z2, TrUserData);\nskip_varint_empty(<<0:1, _:7, Rest/binary>>, Z1, Z2,\n\t\t  TrUserData) ->\n    dfp_read_field_def_empty(Rest, Z1, Z2, TrUserData).\n\nskip_length_delimited_empty(<<1:1, X:7, Rest/binary>>,\n\t\t\t    N, Acc, TrUserData)\n    when N < 57 ->\n    skip_length_delimited_empty(Rest, N + 7, X bsl N + Acc,\n\t\t\t\tTrUserData);\nskip_length_delimited_empty(<<0:1, X:7, Rest/binary>>,\n\t\t\t    N, Acc, TrUserData) ->\n    Length = X bsl N + Acc,\n    <<_:Length/binary, Rest2/binary>> = Rest,\n    dfp_read_field_def_empty(Rest2, 0, 0, TrUserData).\n\nskip_group_empty(Bin, FNum, Z2, TrUserData) ->\n    {_, Rest} = read_group(Bin, FNum),\n    dfp_read_field_def_empty(Rest, 0, Z2, TrUserData).\n\nskip_32_empty(<<_:32, Rest/binary>>, Z1, Z2,\n\t      TrUserData) ->\n    dfp_read_field_def_empty(Rest, Z1, Z2, TrUserData).\n\nskip_64_empty(<<_:64, Rest/binary>>, Z1, Z2,\n\t      TrUserData) ->\n    dfp_read_field_def_empty(Rest, Z1, Z2, TrUserData).\n\nread_group(Bin, FieldNum) ->\n    {NumBytes, EndTagLen} = read_gr_b(Bin, 0, 0, 0, 0, FieldNum),\n    <<Group:NumBytes/binary, _:EndTagLen/binary, Rest/binary>> = Bin,\n    {Group, Rest}.\n\n%% Like skipping over fields, but record the total length,\n%% Each field is <(FieldNum bsl 3) bor FieldType> ++ <FieldValue>\n%% Record the length because varints may be non-optimally encoded.\n%%\n%% Groups can be nested, but assume the same FieldNum cannot be nested\n%% because group field numbers are shared with the rest of the fields\n%% numbers. Thus we can search just for an group-end with the same\n%% field number.\n%%\n%% (The only time the same group field number could occur would\n%% be in a nested sub message, but then it would be inside a\n%% length-delimited entry, which we skip-read by length.)\nread_gr_b(<<1:1, X:7, Tl/binary>>, N, Acc, NumBytes, TagLen, FieldNum)\n  when N < (32-7) ->\n    read_gr_b(Tl, N+7, X bsl N + Acc, NumBytes, TagLen+1, FieldNum);\nread_gr_b(<<0:1, X:7, Tl/binary>>, N, Acc, NumBytes, TagLen,\n          FieldNum) ->\n    Key = X bsl N + Acc,\n    TagLen1 = TagLen + 1,\n    case {Key bsr 3, Key band 7} of\n        {FieldNum, 4} -> % 4 = group_end\n            {NumBytes, TagLen1};\n        {_, 0} -> % 0 = varint\n            read_gr_vi(Tl, 0, NumBytes + TagLen1, FieldNum);\n        {_, 1} -> % 1 = bits64\n            <<_:64, Tl2/binary>> = Tl,\n            read_gr_b(Tl2, 0, 0, NumBytes + TagLen1 + 8, 0, FieldNum);\n        {_, 2} -> % 2 = length_delimited\n            read_gr_ld(Tl, 0, 0, NumBytes + TagLen1, FieldNum);\n        {_, 3} -> % 3 = group_start\n            read_gr_b(Tl, 0, 0, NumBytes + TagLen1, 0, FieldNum);\n        {_, 4} -> % 4 = group_end\n            read_gr_b(Tl, 0, 0, NumBytes + TagLen1, 0, FieldNum);\n        {_, 5} -> % 5 = bits32\n            <<_:32, Tl2/binary>> = Tl,\n            read_gr_b(Tl2, 0, 0, NumBytes + TagLen1 + 4, 0, FieldNum)\n    end.\n\nread_gr_vi(<<1:1, _:7, Tl/binary>>, N, NumBytes, FieldNum)\n  when N < (64-7) ->\n    read_gr_vi(Tl, N+7, NumBytes+1, FieldNum);\nread_gr_vi(<<0:1, _:7, Tl/binary>>, _, NumBytes, FieldNum) ->\n    read_gr_b(Tl, 0, 0, NumBytes+1, 0, FieldNum).\n\nread_gr_ld(<<1:1, X:7, Tl/binary>>, N, Acc, NumBytes, FieldNum)\n  when N < (64-7) ->\n    read_gr_ld(Tl, N+7, X bsl N + Acc, NumBytes+1, FieldNum);\nread_gr_ld(<<0:1, X:7, Tl/binary>>, N, Acc, NumBytes, FieldNum) ->\n    Len = X bsl N + Acc,\n    NumBytes1 = NumBytes + 1,\n    <<_:Len/binary, Tl2/binary>> = Tl,\n    read_gr_b(Tl2, 0, 0, NumBytes1 + Len, 0, FieldNum).\n\nmerge_msgs(Prev, New, MsgName) when is_atom(MsgName) ->\n    merge_msgs(Prev, New, MsgName, []).\n\nmerge_msgs(Prev, New, MsgName, Opts) ->\n    TrUserData = proplists:get_value(user_data, Opts),\n    case MsgName of\n      empty -> merge_msg_empty(Prev, New, TrUserData)\n    end.\n\n-compile({nowarn_unused_function,merge_msg_empty/3}).\nmerge_msg_empty(_Prev, New, _TrUserData) -> New.\n\n\nverify_msg(Msg, MsgName) when is_atom(MsgName) ->\n    verify_msg(Msg, MsgName, []).\n\nverify_msg(Msg, MsgName, Opts) ->\n    TrUserData = proplists:get_value(user_data, Opts),\n    case MsgName of\n      empty -> v_msg_empty(Msg, [MsgName], TrUserData);\n      _ -> mk_type_error(not_a_known_message, Msg, [])\n    end.\n\n\n-compile({nowarn_unused_function,v_msg_empty/3}).\n-dialyzer({nowarn_function,v_msg_empty/3}).\nv_msg_empty(#{} = M, Path, _) ->\n    lists:foreach(fun (OtherKey) ->\n\t\t\t  mk_type_error({extraneous_key, OtherKey}, M, Path)\n\t\t  end,\n\t\t  maps:keys(M)),\n    ok;\nv_msg_empty(M, Path, _TrUserData) when is_map(M) ->\n    mk_type_error({missing_fields, [] -- maps:keys(M),\n\t\t   empty},\n\t\t  M, Path);\nv_msg_empty(X, Path, _TrUserData) ->\n    mk_type_error({expected_msg, empty}, X, Path).\n\n-compile({nowarn_unused_function,mk_type_error/3}).\n-spec mk_type_error(_, _, list()) -> no_return().\nmk_type_error(Error, ValueSeen, Path) ->\n    Path2 = prettify_path(Path),\n    erlang:error({gpb_type_error,\n\t\t  {Error, [{value, ValueSeen}, {path, Path2}]}}).\n\n\n-compile({nowarn_unused_function,prettify_path/1}).\n-dialyzer({nowarn_function,prettify_path/1}).\nprettify_path([]) -> top_level;\nprettify_path(PathR) ->\n    list_to_atom(lists:append(lists:join(\".\",\n\t\t\t\t\t lists:map(fun atom_to_list/1,\n\t\t\t\t\t\t   lists:reverse(PathR))))).\n\n\n-compile({nowarn_unused_function,id/2}).\n-compile({inline,id/2}).\nid(X, _TrUserData) -> X.\n\n-compile({nowarn_unused_function,v_ok/3}).\n-compile({inline,v_ok/3}).\nv_ok(_Value, _Path, _TrUserData) -> ok.\n\n-compile({nowarn_unused_function,m_overwrite/3}).\n-compile({inline,m_overwrite/3}).\nm_overwrite(_Prev, New, _TrUserData) -> New.\n\n-compile({nowarn_unused_function,cons/3}).\n-compile({inline,cons/3}).\ncons(Elem, Acc, _TrUserData) -> [Elem | Acc].\n\n-compile({nowarn_unused_function,lists_reverse/2}).\n-compile({inline,lists_reverse/2}).\n'lists_reverse'(L, _TrUserData) -> lists:reverse(L).\n-compile({nowarn_unused_function,'erlang_++'/3}).\n-compile({inline,'erlang_++'/3}).\n'erlang_++'(A, B, _TrUserData) -> A ++ B.\n\nget_msg_defs() -> [{{msg, empty}, []}].\n\n\nget_msg_names() -> [empty].\n\n\nget_group_names() -> [].\n\n\nget_msg_or_group_names() -> [empty].\n\n\nget_enum_names() -> [].\n\n\nfetch_msg_def(MsgName) ->\n    case find_msg_def(MsgName) of\n      Fs when is_list(Fs) -> Fs;\n      error -> erlang:error({no_such_msg, MsgName})\n    end.\n\n\n-spec fetch_enum_def(_) -> no_return().\nfetch_enum_def(EnumName) ->\n    erlang:error({no_such_enum, EnumName}).\n\n\nfind_msg_def(empty) -> [];\nfind_msg_def(_) -> error.\n\n\nfind_enum_def(_) -> error.\n\n\n-spec enum_symbol_by_value(_, _) -> no_return().\nenum_symbol_by_value(E, V) ->\n    erlang:error({no_enum_defs, E, V}).\n\n\n-spec enum_value_by_symbol(_, _) -> no_return().\nenum_value_by_symbol(E, V) ->\n    erlang:error({no_enum_defs, E, V}).\n\n\n\nget_service_names() -> [].\n\n\nget_service_def(_) -> error.\n\n\nget_rpc_names(_) -> error.\n\n\nfind_rpc_def(_, _) -> error.\n\n\n\n-spec fetch_rpc_def(_, _) -> no_return().\nfetch_rpc_def(ServiceName, RpcName) ->\n    erlang:error({no_such_rpc, ServiceName, RpcName}).\n\n\n%% Convert a a fully qualified (ie with package name) service name\n%% as a binary to a service name as an atom.\n-spec fqbin_to_service_name(_) -> no_return().\nfqbin_to_service_name(X) ->\n    error({gpb_error, {badservice, X}}).\n\n\n%% Convert a service name as an atom to a fully qualified\n%% (ie with package name) name as a binary.\n-spec service_name_to_fqbin(_) -> no_return().\nservice_name_to_fqbin(X) ->\n    error({gpb_error, {badservice, X}}).\n\n\n%% Convert a a fully qualified (ie with package name) service name\n%% and an rpc name, both as binaries to a service name and an rpc\n%% name, as atoms.\n-spec fqbins_to_service_and_rpc_name(_, _) -> no_return().\nfqbins_to_service_and_rpc_name(S, R) ->\n    error({gpb_error, {badservice_or_rpc, {S, R}}}).\n\n\n%% Convert a service name and an rpc name, both as atoms,\n%% to a fully qualified (ie with package name) service name and\n%% an rpc name as binaries.\n-spec service_and_rpc_name_to_fqbins(_, _) -> no_return().\nservice_and_rpc_name_to_fqbins(S, R) ->\n    error({gpb_error, {badservice_or_rpc, {S, R}}}).\n\n\nfqbin_to_msg_name(<<\"grpc.testing.Empty\">>) -> empty;\nfqbin_to_msg_name(E) -> error({gpb_error, {badmsg, E}}).\n\n\nmsg_name_to_fqbin(empty) -> <<\"grpc.testing.Empty\">>;\nmsg_name_to_fqbin(E) -> error({gpb_error, {badmsg, E}}).\n\n\n-spec enum_name_to_fqbin(_) -> no_return().\nfqbin_to_enum_name(E) ->\n    error({gpb_error, {badenum, E}}).\n\n\n-spec fqbin_to_enum_name(_) -> no_return().\nenum_name_to_fqbin(E) ->\n    error({gpb_error, {badenum, E}}).\n\n\nget_package_name() -> 'grpc.testing'.\n\n\n%% Whether or not the message names\n%% are prepended with package name or not.\nuses_packages() -> true.\n\n\nsource_basename() -> \"empty.proto\".\n\n\n%% Retrieve all proto file names, also imported ones.\n%% The order is top-down. The first element is always the main\n%% source file. The files are returned with extension,\n%% see get_all_proto_names/0 for a version that returns\n%% the basenames sans extension\nget_all_source_basenames() -> [\"empty.proto\"].\n\n\n%% Retrieve all proto file names, also imported ones.\n%% The order is top-down. The first element is always the main\n%% source file. The files are returned sans .proto extension,\n%% to make it easier to use them with the various get_xyz_containment\n%% functions.\nget_all_proto_names() -> [\"empty\"].\n\n\nget_msg_containment(\"empty\") -> [empty];\nget_msg_containment(P) ->\n    error({gpb_error, {badproto, P}}).\n\n\nget_pkg_containment(\"empty\") -> 'grpc.testing';\nget_pkg_containment(P) ->\n    error({gpb_error, {badproto, P}}).\n\n\nget_service_containment(\"empty\") -> [];\nget_service_containment(P) ->\n    error({gpb_error, {badproto, P}}).\n\n\nget_rpc_containment(\"empty\") -> [];\nget_rpc_containment(P) ->\n    error({gpb_error, {badproto, P}}).\n\n\nget_enum_containment(\"empty\") -> [];\nget_enum_containment(P) ->\n    error({gpb_error, {badproto, P}}).\n\n\nget_proto_by_msg_name_as_fqbin(<<\"grpc.testing.Empty\">>) -> \"empty\";\nget_proto_by_msg_name_as_fqbin(E) ->\n    error({gpb_error, {badmsg, E}}).\n\n\n-spec get_proto_by_service_name_as_fqbin(_) -> no_return().\nget_proto_by_service_name_as_fqbin(E) ->\n    error({gpb_error, {badservice, E}}).\n\n\n-spec get_proto_by_enum_name_as_fqbin(_) -> no_return().\nget_proto_by_enum_name_as_fqbin(E) ->\n    error({gpb_error, {badenum, E}}).\n\n\nget_protos_by_pkg_name_as_fqbin(<<\"grpc.testing\">>) -> [\"empty\"];\nget_protos_by_pkg_name_as_fqbin(E) ->\n    error({gpb_error, {badpkg, E}}).\n\n\ndescriptor() ->\n    <<10, 57, 10, 24, 103, 114, 112, 99, 47, 116, 101, 115,\n      116, 105, 110, 103, 47, 101, 109, 112, 116, 121, 46,\n      112, 114, 111, 116, 111, 18, 12, 103, 114, 112, 99, 46,\n      116, 101, 115, 116, 105, 110, 103, 34, 7, 10, 5, 69,\n      109, 112, 116, 121, 98, 6, 112, 114, 111, 116, 111,\n      51>>.\n\ndescriptor(\"empty\") ->\n    <<10, 24, 103, 114, 112, 99, 47, 116, 101, 115, 116,\n      105, 110, 103, 47, 101, 109, 112, 116, 121, 46, 112,\n      114, 111, 116, 111, 18, 12, 103, 114, 112, 99, 46, 116,\n      101, 115, 116, 105, 110, 103, 34, 7, 10, 5, 69, 109,\n      112, 116, 121, 98, 6, 112, 114, 111, 116, 111, 51>>;\ndescriptor(X) -> error({gpb_error, {badname, X}}).\n\n\ngpb_version_as_string() ->\n    \"4.7.1\".\n\ngpb_version_as_list() ->\n    [4,7,1].\n"
  },
  {
    "path": "interop/src/grpc_testing_reconnect_service_bhvr.erl",
    "content": "%%%-------------------------------------------------------------------\n%% @doc Behaviour to implement for grpc service grpc.testing.ReconnectService.\n%% @end\n%%%-------------------------------------------------------------------\n\n%% this module was generated on 2019-03-09T00:28:54+00:00 and should not be modified manually\n\n-module(grpc_testing_reconnect_service_bhvr).\n\n%% @doc Unary RPC\n-callback start(ctx:t(), test_pb:reconnect_params()) ->\n    {ok, test_pb:empty(), ctx:t()} | grpcbox_stream:grpc_error_response().\n\n%% @doc Unary RPC\n-callback stop(ctx:t(), test_pb:empty()) ->\n    {ok, test_pb:reconnect_info(), ctx:t()} | grpcbox_stream:grpc_error_response().\n\n"
  },
  {
    "path": "interop/src/grpc_testing_reconnect_service_client.erl",
    "content": "%%%-------------------------------------------------------------------\n%% @doc Client module for grpc service grpc.testing.ReconnectService.\n%% @end\n%%%-------------------------------------------------------------------\n\n%% this module was generated on 2019-03-09T00:28:54+00:00 and should not be modified manually\n\n-module(grpc_testing_reconnect_service_client).\n\n-compile(export_all).\n-compile(nowarn_export_all).\n\n-include_lib(\"grpcbox/include/grpcbox.hrl\").\n\n-define(is_ctx(Ctx), is_tuple(Ctx) andalso element(1, Ctx) =:= ctx).\n\n-define(SERVICE, 'grpc.testing.ReconnectService').\n-define(PROTO_MODULE, 'test_pb').\n-define(MARSHAL_FUN(T), fun(I) -> ?PROTO_MODULE:encode_msg(I, T) end).\n-define(UNMARSHAL_FUN(T), fun(I) -> ?PROTO_MODULE:decode_msg(I, T) end).\n-define(DEF(Input, Output, MessageType), #grpcbox_def{service=?SERVICE,\n                                                      message_type=MessageType,\n                                                      marshal_fun=?MARSHAL_FUN(Input),\n                                                      unmarshal_fun=?UNMARSHAL_FUN(Output)}).\n\n%% @doc Unary RPC\n-spec start(test_pb:reconnect_params()) ->\n    {ok, test_pb:empty(), grpcbox:metadata()} | grpcbox_stream:grpc_error_response().\nstart(Input) ->\n    start(ctx:new(), Input, #{}).\n\n-spec start(ctx:t() | test_pb:reconnect_params(), test_pb:reconnect_params() | grpcbox_client:options()) ->\n    {ok, test_pb:empty(), grpcbox:metadata()} | grpcbox_stream:grpc_error_response().\nstart(Ctx, Input) when ?is_ctx(Ctx) ->\n    start(Ctx, Input, #{});\nstart(Input, Options) ->\n    start(ctx:new(), Input, Options).\n\n-spec start(ctx:t(), test_pb:reconnect_params(), grpcbox_client:options()) ->\n    {ok, test_pb:empty(), grpcbox:metadata()} | grpcbox_stream:grpc_error_response().\nstart(Ctx, Input, Options) ->\n    grpcbox_client:unary(Ctx, <<\"/grpc.testing.ReconnectService/Start\">>, Input, ?DEF(reconnect_params, empty, <<\"grpc.testing.ReconnectParams\">>), Options).\n\n%% @doc Unary RPC\n-spec stop(test_pb:empty()) ->\n    {ok, test_pb:reconnect_info(), grpcbox:metadata()} | grpcbox_stream:grpc_error_response().\nstop(Input) ->\n    stop(ctx:new(), Input, #{}).\n\n-spec stop(ctx:t() | test_pb:empty(), test_pb:empty() | grpcbox_client:options()) ->\n    {ok, test_pb:reconnect_info(), grpcbox:metadata()} | grpcbox_stream:grpc_error_response().\nstop(Ctx, Input) when ?is_ctx(Ctx) ->\n    stop(Ctx, Input, #{});\nstop(Input, Options) ->\n    stop(ctx:new(), Input, Options).\n\n-spec stop(ctx:t(), test_pb:empty(), grpcbox_client:options()) ->\n    {ok, test_pb:reconnect_info(), grpcbox:metadata()} | grpcbox_stream:grpc_error_response().\nstop(Ctx, Input, Options) ->\n    grpcbox_client:unary(Ctx, <<\"/grpc.testing.ReconnectService/Stop\">>, Input, ?DEF(empty, reconnect_info, <<\"grpc.testing.Empty\">>), Options).\n\n"
  },
  {
    "path": "interop/src/grpc_testing_test_service.erl",
    "content": "-module(grpc_testing_test_service).\n\n-behaviour(grpc_testing_test_service_bhvr).\n\n-export([empty_call/2,\n         unary_call/2,\n         cacheable_unary_call/2,\n         streaming_output_call/2,\n         streaming_input_call/2,\n         full_duplex_call/2,\n         half_duplex_call/2]).\n\n-include(\"grpcbox_interop_tests.hrl\").\n\n-spec empty_call(ctx:t(), test_pb:empty()) ->\n                        {ok, test_pb:empty()} | grpcbox_stream:grpc_error_response().\nempty_call(Ctx, _Empty) ->\n    {ok, #{}, Ctx}.\n\n-spec unary_call(ctx:t(), test_pb:simple_request()) ->\n                        {ok, test_pb:simple_response()} | grpcbox_stream:grpc_error_response().\nunary_call(Ctx, Request=#{response_size := Size}) ->\n    case maps:get(response_status, Request, #{}) of\n        #{code := Code,\n          message := Message} ->\n            {grpc_error, {grpcbox_stream:code_to_status(Code), Message}};\n        _ ->\n            Metadata = grpcbox_metadata:from_incoming_ctx(Ctx),\n            EchoValue = maps:get(?INITIAL_METADATA_KEY, Metadata, <<>>),\n            EchoTrailer = maps:get(?TRAILING_METADATA_KEY, Metadata, <<>>),\n            Header = grpcbox_metadata:pairs([{?INITIAL_METADATA_KEY, EchoValue}]),\n            Ctx1 = ctx:set(Ctx, ctx_stream_key, grpcbox_stream:send_headers(Ctx, Header)),\n            Trailer = grpcbox_metadata:pairs([{?TRAILING_METADATA_KEY, EchoTrailer}]),\n            Ctx2 = grpcbox_stream:set_trailers(Ctx1, Trailer),\n            Body = << <<0>> || _ <- lists:seq(1, Size) >>,\n            {ok, #{payload => #{type => 'COMPRESSABLE',\n                                body => Body\n                               },\n                   username => <<\"tsloughter\">>,\n                   oauth_scope => <<\"some-scope\">>\n                  }, Ctx2}\n    end.\n\n-spec cacheable_unary_call(ctx:t(), test_pb:simple_request()) ->\n    {ok, test_pb:simple_response()} | grpcbox_stream:grpc_error_response().\ncacheable_unary_call(Ctx, _SimpleRequest) ->\n    {ok, #{}, Ctx}.\n\n-spec streaming_output_call(test_pb:streaming_output_call_request(), grpcbox_stream:t()) ->\n                                   ok | grpcbox_stream:grpc_error_response().\nstreaming_output_call(#{response_type := ResponseType,\n                        response_parameters := ResponseParameters\n                       }, Stream) ->\n    lists:foreach(fun(#{size := Size,\n                        interval_us := Interval}) ->\n                          timer:sleep(erlang:convert_time_unit(Interval, microsecond, millisecond)),\n                          Body = << <<0>> || _ <- lists:seq(1, Size) >>,\n                          grpcbox_stream:send(#{payload => #{type => ResponseType,\n                                                             body => Body}}, Stream)\n                  end, ResponseParameters),\n    ok.\n\n-spec streaming_input_call(reference(), grpcbox_stream:t()) ->\n                                  {ok, test_pb:streaming_input_call_response()} |\n                                  grpcbox_stream:grpc_error_response().\nstreaming_input_call(Ref, GrpcStream) ->\n    streaming_input_call(Ref, #{aggregated_payload_size => 0}, GrpcStream).\n\nstreaming_input_call(Ref, Data=#{aggregated_payload_size := Size}, GrpcStream) ->\n    receive\n        {Ref, eos} ->\n            {ok, #{aggregated_payload_size => Size}, GrpcStream};\n        {Ref, #{payload := #{type := _Type,\n                             body := Body}}} ->\n            streaming_input_call(Ref, Data#{aggregated_payload_size => Size + size(Body)}, GrpcStream)\n    end.\n\n-spec full_duplex_call(reference(), grpcbox_stream:t()) ->\n                              ok | grpcbox_stream:grpc_error_response().\nfull_duplex_call(Ref, Stream) ->\n    grpcbox_stream:add_headers([{?INITIAL_METADATA_KEY, ?INITIAL_METADATA_VALUE}], Stream),\n    full_duplex_call_(Ref, Stream).\n\nfull_duplex_call_(Ref, Stream) ->\n    receive\n        {Ref, eos} ->\n            grpcbox_stream:add_trailers([{?TRAILING_METADATA_KEY, ?TRAILING_METADATA_VALUE}], Stream),\n            ok;\n        {Ref, #{response_status := #{code := Code,\n                                     message := Message}}} ->\n            grpcbox_stream:error(grpcbox_stream:code_to_status(Code), Message);\n        {Ref, #{response_type := ResponseType,\n                response_parameters := ResponseParameters\n               }} ->\n            lists:foreach(fun(#{size := Size,\n                                interval_us := Interval}) ->\n                                  timer:sleep(erlang:convert_time_unit(Interval, microsecond, millisecond)),\n                                  Body = << <<0>> || _ <- lists:seq(1, Size) >>,\n                                  grpcbox_stream:send(#{payload => #{type => ResponseType,\n                                                                     body => Body}}, Stream)\n                          end, ResponseParameters),\n            full_duplex_call_(Ref, Stream)\n    end.\n\n-spec half_duplex_call(reference(), grpcbox_stream:t()) ->\n    ok | grpcbox_stream:grpc_error_response().\nhalf_duplex_call(_Ref, _Stream) ->\n    ok.\n\n"
  },
  {
    "path": "interop/src/grpc_testing_test_service_bhvr.erl",
    "content": "%%%-------------------------------------------------------------------\n%% @doc Behaviour to implement for grpc service grpc.testing.TestService.\n%% @end\n%%%-------------------------------------------------------------------\n\n%% this module was generated on 2019-03-09T00:28:54+00:00 and should not be modified manually\n\n-module(grpc_testing_test_service_bhvr).\n\n%% @doc Unary RPC\n-callback empty_call(ctx:t(), test_pb:empty()) ->\n    {ok, test_pb:empty(), ctx:t()} | grpcbox_stream:grpc_error_response().\n\n%% @doc Unary RPC\n-callback unary_call(ctx:t(), test_pb:simple_request()) ->\n    {ok, test_pb:simple_response(), ctx:t()} | grpcbox_stream:grpc_error_response().\n\n%% @doc Unary RPC\n-callback cacheable_unary_call(ctx:t(), test_pb:simple_request()) ->\n    {ok, test_pb:simple_response(), ctx:t()} | grpcbox_stream:grpc_error_response().\n\n%% @doc \n-callback streaming_output_call(test_pb:streaming_output_call_request(), grpcbox_stream:t()) ->\n    ok | grpcbox_stream:grpc_error_response().\n\n%% @doc \n-callback streaming_input_call(reference(), grpcbox_stream:t()) ->\n    {ok, test_pb:streaming_input_call_response(), ctx:t()} | grpcbox_stream:grpc_error_response().\n\n%% @doc \n-callback full_duplex_call(reference(), grpcbox_stream:t()) ->\n    ok | grpcbox_stream:grpc_error_response().\n\n%% @doc \n-callback half_duplex_call(reference(), grpcbox_stream:t()) ->\n    ok | grpcbox_stream:grpc_error_response().\n\n%% @doc Unary RPC\n-callback unimplemented_call(ctx:t(), test_pb:empty()) ->\n    {ok, test_pb:empty(), ctx:t()} | grpcbox_stream:grpc_error_response().\n\n"
  },
  {
    "path": "interop/src/grpc_testing_test_service_client.erl",
    "content": "%%%-------------------------------------------------------------------\n%% @doc Client module for grpc service grpc.testing.TestService.\n%% @end\n%%%-------------------------------------------------------------------\n\n%% this module was generated on 2019-03-09T00:28:54+00:00 and should not be modified manually\n\n-module(grpc_testing_test_service_client).\n\n-compile(export_all).\n-compile(nowarn_export_all).\n\n-include_lib(\"grpcbox/include/grpcbox.hrl\").\n\n-define(is_ctx(Ctx), is_tuple(Ctx) andalso element(1, Ctx) =:= ctx).\n\n-define(SERVICE, 'grpc.testing.TestService').\n-define(PROTO_MODULE, 'test_pb').\n-define(MARSHAL_FUN(T), fun(I) -> ?PROTO_MODULE:encode_msg(I, T) end).\n-define(UNMARSHAL_FUN(T), fun(I) -> ?PROTO_MODULE:decode_msg(I, T) end).\n-define(DEF(Input, Output, MessageType), #grpcbox_def{service=?SERVICE,\n                                                      message_type=MessageType,\n                                                      marshal_fun=?MARSHAL_FUN(Input),\n                                                      unmarshal_fun=?UNMARSHAL_FUN(Output)}).\n\n%% @doc Unary RPC\n-spec empty_call(test_pb:empty()) ->\n    {ok, test_pb:empty(), grpcbox:metadata()} | grpcbox_stream:grpc_error_response().\nempty_call(Input) ->\n    empty_call(ctx:new(), Input, #{}).\n\n-spec empty_call(ctx:t() | test_pb:empty(), test_pb:empty() | grpcbox_client:options()) ->\n    {ok, test_pb:empty(), grpcbox:metadata()} | grpcbox_stream:grpc_error_response().\nempty_call(Ctx, Input) when ?is_ctx(Ctx) ->\n    empty_call(Ctx, Input, #{});\nempty_call(Input, Options) ->\n    empty_call(ctx:new(), Input, Options).\n\n-spec empty_call(ctx:t(), test_pb:empty(), grpcbox_client:options()) ->\n    {ok, test_pb:empty(), grpcbox:metadata()} | grpcbox_stream:grpc_error_response().\nempty_call(Ctx, Input, Options) ->\n    grpcbox_client:unary(Ctx, <<\"/grpc.testing.TestService/EmptyCall\">>, Input, ?DEF(empty, empty, <<\"grpc.testing.Empty\">>), Options).\n\n%% @doc Unary RPC\n-spec unary_call(test_pb:simple_request()) ->\n    {ok, test_pb:simple_response(), grpcbox:metadata()} | grpcbox_stream:grpc_error_response().\nunary_call(Input) ->\n    unary_call(ctx:new(), Input, #{}).\n\n-spec unary_call(ctx:t() | test_pb:simple_request(), test_pb:simple_request() | grpcbox_client:options()) ->\n    {ok, test_pb:simple_response(), grpcbox:metadata()} | grpcbox_stream:grpc_error_response().\nunary_call(Ctx, Input) when ?is_ctx(Ctx) ->\n    unary_call(Ctx, Input, #{});\nunary_call(Input, Options) ->\n    unary_call(ctx:new(), Input, Options).\n\n-spec unary_call(ctx:t(), test_pb:simple_request(), grpcbox_client:options()) ->\n    {ok, test_pb:simple_response(), grpcbox:metadata()} | grpcbox_stream:grpc_error_response().\nunary_call(Ctx, Input, Options) ->\n    grpcbox_client:unary(Ctx, <<\"/grpc.testing.TestService/UnaryCall\">>, Input, ?DEF(simple_request, simple_response, <<\"grpc.testing.SimpleRequest\">>), Options).\n\n%% @doc Unary RPC\n-spec cacheable_unary_call(test_pb:simple_request()) ->\n    {ok, test_pb:simple_response(), grpcbox:metadata()} | grpcbox_stream:grpc_error_response().\ncacheable_unary_call(Input) ->\n    cacheable_unary_call(ctx:new(), Input, #{}).\n\n-spec cacheable_unary_call(ctx:t() | test_pb:simple_request(), test_pb:simple_request() | grpcbox_client:options()) ->\n    {ok, test_pb:simple_response(), grpcbox:metadata()} | grpcbox_stream:grpc_error_response().\ncacheable_unary_call(Ctx, Input) when ?is_ctx(Ctx) ->\n    cacheable_unary_call(Ctx, Input, #{});\ncacheable_unary_call(Input, Options) ->\n    cacheable_unary_call(ctx:new(), Input, Options).\n\n-spec cacheable_unary_call(ctx:t(), test_pb:simple_request(), grpcbox_client:options()) ->\n    {ok, test_pb:simple_response(), grpcbox:metadata()} | grpcbox_stream:grpc_error_response().\ncacheable_unary_call(Ctx, Input, Options) ->\n    grpcbox_client:unary(Ctx, <<\"/grpc.testing.TestService/CacheableUnaryCall\">>, Input, ?DEF(simple_request, simple_response, <<\"grpc.testing.SimpleRequest\">>), Options).\n\n%% @doc \n-spec streaming_output_call(test_pb:streaming_output_call_request()) ->\n    {ok, grpcbox_client:stream()} | grpcbox_stream:grpc_error_response().\nstreaming_output_call(Input) ->\n    streaming_output_call(ctx:new(), Input, #{}).\n\n-spec streaming_output_call(ctx:t() | test_pb:streaming_output_call_request(), test_pb:streaming_output_call_request() | grpcbox_client:options()) ->\n    {ok, grpcbox_client:stream()} | grpcbox_stream:grpc_error_response().\nstreaming_output_call(Ctx, Input) when ?is_ctx(Ctx) ->\n    streaming_output_call(Ctx, Input, #{});\nstreaming_output_call(Input, Options) ->\n    streaming_output_call(ctx:new(), Input, Options).\n\n-spec streaming_output_call(ctx:t(), test_pb:streaming_output_call_request(), grpcbox_client:options()) ->\n    {ok, grpcbox_client:stream()} | grpcbox_stream:grpc_error_response().\nstreaming_output_call(Ctx, Input, Options) ->\n    grpcbox_client:stream(Ctx, <<\"/grpc.testing.TestService/StreamingOutputCall\">>, Input, ?DEF(streaming_output_call_request, streaming_output_call_response, <<\"grpc.testing.StreamingOutputCallRequest\">>), Options).\n\n%% @doc \n-spec streaming_input_call() ->\n    {ok, grpcbox_client:stream()} | grpcbox_stream:grpc_error_response().\nstreaming_input_call() ->\n    streaming_input_call(ctx:new(), #{}).\n\n-spec streaming_input_call(ctx:t() | grpcbox_client:options()) ->\n    {ok, grpcbox_client:stream()} | grpcbox_stream:grpc_error_response().\nstreaming_input_call(Ctx) when ?is_ctx(Ctx) ->\n    streaming_input_call(Ctx, #{});\nstreaming_input_call(Options) ->\n    streaming_input_call(ctx:new(), Options).\n\n-spec streaming_input_call(ctx:t(), grpcbox_client:options()) ->\n    {ok, grpcbox_client:stream()} | grpcbox_stream:grpc_error_response().\nstreaming_input_call(Ctx, Options) ->\n    grpcbox_client:stream(Ctx, <<\"/grpc.testing.TestService/StreamingInputCall\">>, ?DEF(streaming_input_call_request, streaming_input_call_response, <<\"grpc.testing.StreamingInputCallRequest\">>), Options).\n\n%% @doc \n-spec full_duplex_call() ->\n    {ok, grpcbox_client:stream()} | grpcbox_stream:grpc_error_response().\nfull_duplex_call() ->\n    full_duplex_call(ctx:new(), #{}).\n\n-spec full_duplex_call(ctx:t() | grpcbox_client:options()) ->\n    {ok, grpcbox_client:stream()} | grpcbox_stream:grpc_error_response().\nfull_duplex_call(Ctx) when ?is_ctx(Ctx) ->\n    full_duplex_call(Ctx, #{});\nfull_duplex_call(Options) ->\n    full_duplex_call(ctx:new(), Options).\n\n-spec full_duplex_call(ctx:t(), grpcbox_client:options()) ->\n    {ok, grpcbox_client:stream()} | grpcbox_stream:grpc_error_response().\nfull_duplex_call(Ctx, Options) ->\n    grpcbox_client:stream(Ctx, <<\"/grpc.testing.TestService/FullDuplexCall\">>, ?DEF(streaming_output_call_request, streaming_output_call_response, <<\"grpc.testing.StreamingOutputCallRequest\">>), Options).\n\n%% @doc \n-spec half_duplex_call() ->\n    {ok, grpcbox_client:stream()} | grpcbox_stream:grpc_error_response().\nhalf_duplex_call() ->\n    half_duplex_call(ctx:new(), #{}).\n\n-spec half_duplex_call(ctx:t() | grpcbox_client:options()) ->\n    {ok, grpcbox_client:stream()} | grpcbox_stream:grpc_error_response().\nhalf_duplex_call(Ctx) when ?is_ctx(Ctx) ->\n    half_duplex_call(Ctx, #{});\nhalf_duplex_call(Options) ->\n    half_duplex_call(ctx:new(), Options).\n\n-spec half_duplex_call(ctx:t(), grpcbox_client:options()) ->\n    {ok, grpcbox_client:stream()} | grpcbox_stream:grpc_error_response().\nhalf_duplex_call(Ctx, Options) ->\n    grpcbox_client:stream(Ctx, <<\"/grpc.testing.TestService/HalfDuplexCall\">>, ?DEF(streaming_output_call_request, streaming_output_call_response, <<\"grpc.testing.StreamingOutputCallRequest\">>), Options).\n\n%% @doc Unary RPC\n-spec unimplemented_call(test_pb:empty()) ->\n    {ok, test_pb:empty(), grpcbox:metadata()} | grpcbox_stream:grpc_error_response().\nunimplemented_call(Input) ->\n    unimplemented_call(ctx:new(), Input, #{}).\n\n-spec unimplemented_call(ctx:t() | test_pb:empty(), test_pb:empty() | grpcbox_client:options()) ->\n    {ok, test_pb:empty(), grpcbox:metadata()} | grpcbox_stream:grpc_error_response().\nunimplemented_call(Ctx, Input) when ?is_ctx(Ctx) ->\n    unimplemented_call(Ctx, Input, #{});\nunimplemented_call(Input, Options) ->\n    unimplemented_call(ctx:new(), Input, Options).\n\n-spec unimplemented_call(ctx:t(), test_pb:empty(), grpcbox_client:options()) ->\n    {ok, test_pb:empty(), grpcbox:metadata()} | grpcbox_stream:grpc_error_response().\nunimplemented_call(Ctx, Input, Options) ->\n    grpcbox_client:unary(Ctx, <<\"/grpc.testing.TestService/UnimplementedCall\">>, Input, ?DEF(empty, empty, <<\"grpc.testing.Empty\">>), Options).\n\n"
  },
  {
    "path": "interop/src/grpc_testing_unimplemented_service_bhvr.erl",
    "content": "%%%-------------------------------------------------------------------\n%% @doc Behaviour to implement for grpc service grpc.testing.UnimplementedService.\n%% @end\n%%%-------------------------------------------------------------------\n\n%% this module was generated on 2019-03-09T00:28:54+00:00 and should not be modified manually\n\n-module(grpc_testing_unimplemented_service_bhvr).\n\n%% @doc Unary RPC\n-callback unimplemented_call(ctx:t(), test_pb:empty()) ->\n    {ok, test_pb:empty(), ctx:t()} | grpcbox_stream:grpc_error_response().\n\n"
  },
  {
    "path": "interop/src/grpc_testing_unimplemented_service_client.erl",
    "content": "%%%-------------------------------------------------------------------\n%% @doc Client module for grpc service grpc.testing.UnimplementedService.\n%% @end\n%%%-------------------------------------------------------------------\n\n%% this module was generated on 2019-03-09T00:28:54+00:00 and should not be modified manually\n\n-module(grpc_testing_unimplemented_service_client).\n\n-compile(export_all).\n-compile(nowarn_export_all).\n\n-include_lib(\"grpcbox/include/grpcbox.hrl\").\n\n-define(is_ctx(Ctx), is_tuple(Ctx) andalso element(1, Ctx) =:= ctx).\n\n-define(SERVICE, 'grpc.testing.UnimplementedService').\n-define(PROTO_MODULE, 'test_pb').\n-define(MARSHAL_FUN(T), fun(I) -> ?PROTO_MODULE:encode_msg(I, T) end).\n-define(UNMARSHAL_FUN(T), fun(I) -> ?PROTO_MODULE:decode_msg(I, T) end).\n-define(DEF(Input, Output, MessageType), #grpcbox_def{service=?SERVICE,\n                                                      message_type=MessageType,\n                                                      marshal_fun=?MARSHAL_FUN(Input),\n                                                      unmarshal_fun=?UNMARSHAL_FUN(Output)}).\n\n%% @doc Unary RPC\n-spec unimplemented_call(test_pb:empty()) ->\n    {ok, test_pb:empty(), grpcbox:metadata()} | grpcbox_stream:grpc_error_response().\nunimplemented_call(Input) ->\n    unimplemented_call(ctx:new(), Input, #{}).\n\n-spec unimplemented_call(ctx:t() | test_pb:empty(), test_pb:empty() | grpcbox_client:options()) ->\n    {ok, test_pb:empty(), grpcbox:metadata()} | grpcbox_stream:grpc_error_response().\nunimplemented_call(Ctx, Input) when ?is_ctx(Ctx) ->\n    unimplemented_call(Ctx, Input, #{});\nunimplemented_call(Input, Options) ->\n    unimplemented_call(ctx:new(), Input, Options).\n\n-spec unimplemented_call(ctx:t(), test_pb:empty(), grpcbox_client:options()) ->\n    {ok, test_pb:empty(), grpcbox:metadata()} | grpcbox_stream:grpc_error_response().\nunimplemented_call(Ctx, Input, Options) ->\n    grpcbox_client:unary(Ctx, <<\"/grpc.testing.UnimplementedService/UnimplementedCall\">>, Input, ?DEF(empty, empty, <<\"grpc.testing.Empty\">>), Options).\n\n"
  },
  {
    "path": "interop/src/messages_pb.erl",
    "content": "%% -*- coding: utf-8 -*-\n%% @private\n%% Automatically generated, do not edit\n%% Generated by gpb_compile version 4.7.1\n-module(messages_pb).\n\n-export([encode_msg/2, encode_msg/3]).\n-export([decode_msg/2, decode_msg/3]).\n-export([merge_msgs/3, merge_msgs/4]).\n-export([verify_msg/2, verify_msg/3]).\n-export([get_msg_defs/0]).\n-export([get_msg_names/0]).\n-export([get_group_names/0]).\n-export([get_msg_or_group_names/0]).\n-export([get_enum_names/0]).\n-export([find_msg_def/1, fetch_msg_def/1]).\n-export([find_enum_def/1, fetch_enum_def/1]).\n-export([enum_symbol_by_value/2, enum_value_by_symbol/2]).\n-export(['enum_symbol_by_value_grpc.testing.PayloadType'/1, 'enum_value_by_symbol_grpc.testing.PayloadType'/1]).\n-export([get_service_names/0]).\n-export([get_service_def/1]).\n-export([get_rpc_names/1]).\n-export([find_rpc_def/2, fetch_rpc_def/2]).\n-export([fqbin_to_service_name/1]).\n-export([service_name_to_fqbin/1]).\n-export([fqbins_to_service_and_rpc_name/2]).\n-export([service_and_rpc_name_to_fqbins/2]).\n-export([fqbin_to_msg_name/1]).\n-export([msg_name_to_fqbin/1]).\n-export([fqbin_to_enum_name/1]).\n-export([enum_name_to_fqbin/1]).\n-export([get_package_name/0]).\n-export([uses_packages/0]).\n-export([source_basename/0]).\n-export([get_all_source_basenames/0]).\n-export([get_all_proto_names/0]).\n-export([get_msg_containment/1]).\n-export([get_pkg_containment/1]).\n-export([get_service_containment/1]).\n-export([get_rpc_containment/1]).\n-export([get_enum_containment/1]).\n-export([get_proto_by_msg_name_as_fqbin/1]).\n-export([get_proto_by_service_name_as_fqbin/1]).\n-export([get_proto_by_enum_name_as_fqbin/1]).\n-export([get_protos_by_pkg_name_as_fqbin/1]).\n-export([descriptor/0, descriptor/1]).\n-export([gpb_version_as_string/0, gpb_version_as_list/0]).\n\n\n%% enumerated types\n-type 'grpc.testing.PayloadType'() :: 'COMPRESSABLE'.\n-export_type(['grpc.testing.PayloadType'/0]).\n\n%% message types\n-type bool_value() ::\n      #{value                   => boolean() | 0 | 1 % = 1\n       }.\n\n-type payload() ::\n      #{type                    => 'COMPRESSABLE' | integer(), % = 1, enum grpc.testing.PayloadType\n        body                    => iodata()         % = 2\n       }.\n\n-type echo_status() ::\n      #{code                    => integer(),       % = 1, 32 bits\n        message                 => iodata()         % = 2\n       }.\n\n-type simple_request() ::\n      #{response_type           => 'COMPRESSABLE' | integer(), % = 1, enum grpc.testing.PayloadType\n        response_size           => integer(),       % = 2, 32 bits\n        payload                 => payload(),       % = 3\n        fill_username           => boolean() | 0 | 1, % = 4\n        fill_oauth_scope        => boolean() | 0 | 1, % = 5\n        response_compressed     => bool_value(),    % = 6\n        response_status         => echo_status(),   % = 7\n        expect_compressed       => bool_value()     % = 8\n       }.\n\n-type simple_response() ::\n      #{payload                 => payload(),       % = 1\n        username                => iodata(),        % = 2\n        oauth_scope             => iodata()         % = 3\n       }.\n\n-type streaming_input_call_request() ::\n      #{payload                 => payload(),       % = 1\n        expect_compressed       => bool_value()     % = 2\n       }.\n\n-type streaming_input_call_response() ::\n      #{aggregated_payload_size => integer()        % = 1, 32 bits\n       }.\n\n-type response_parameters() ::\n      #{size                    => integer(),       % = 1, 32 bits\n        interval_us             => integer(),       % = 2, 32 bits\n        compressed              => bool_value()     % = 3\n       }.\n\n-type streaming_output_call_request() ::\n      #{response_type           => 'COMPRESSABLE' | integer(), % = 1, enum grpc.testing.PayloadType\n        response_parameters     => [response_parameters()], % = 2\n        payload                 => payload(),       % = 3\n        response_status         => echo_status()    % = 7\n       }.\n\n-type streaming_output_call_response() ::\n      #{payload                 => payload()        % = 1\n       }.\n\n-type reconnect_params() ::\n      #{max_reconnect_backoff_ms => integer()       % = 1, 32 bits\n       }.\n\n-type reconnect_info() ::\n      #{passed                  => boolean() | 0 | 1, % = 1\n        backoff_ms              => [integer()]      % = 2, 32 bits\n       }.\n\n-export_type(['bool_value'/0, 'payload'/0, 'echo_status'/0, 'simple_request'/0, 'simple_response'/0, 'streaming_input_call_request'/0, 'streaming_input_call_response'/0, 'response_parameters'/0, 'streaming_output_call_request'/0, 'streaming_output_call_response'/0, 'reconnect_params'/0, 'reconnect_info'/0]).\n\n-spec encode_msg(bool_value() | payload() | echo_status() | simple_request() | simple_response() | streaming_input_call_request() | streaming_input_call_response() | response_parameters() | streaming_output_call_request() | streaming_output_call_response() | reconnect_params() | reconnect_info(), atom()) -> binary().\nencode_msg(Msg, MsgName) when is_atom(MsgName) ->\n    encode_msg(Msg, MsgName, []).\n\n-spec encode_msg(bool_value() | payload() | echo_status() | simple_request() | simple_response() | streaming_input_call_request() | streaming_input_call_response() | response_parameters() | streaming_output_call_request() | streaming_output_call_response() | reconnect_params() | reconnect_info(), atom(), list()) -> binary().\nencode_msg(Msg, MsgName, Opts) ->\n    case proplists:get_bool(verify, Opts) of\n      true -> verify_msg(Msg, MsgName, Opts);\n      false -> ok\n    end,\n    TrUserData = proplists:get_value(user_data, Opts),\n    case MsgName of\n      bool_value ->\n\t  encode_msg_bool_value(id(Msg, TrUserData), TrUserData);\n      payload ->\n\t  encode_msg_payload(id(Msg, TrUserData), TrUserData);\n      echo_status ->\n\t  encode_msg_echo_status(id(Msg, TrUserData), TrUserData);\n      simple_request ->\n\t  encode_msg_simple_request(id(Msg, TrUserData),\n\t\t\t\t    TrUserData);\n      simple_response ->\n\t  encode_msg_simple_response(id(Msg, TrUserData),\n\t\t\t\t     TrUserData);\n      streaming_input_call_request ->\n\t  encode_msg_streaming_input_call_request(id(Msg,\n\t\t\t\t\t\t     TrUserData),\n\t\t\t\t\t\t  TrUserData);\n      streaming_input_call_response ->\n\t  encode_msg_streaming_input_call_response(id(Msg,\n\t\t\t\t\t\t      TrUserData),\n\t\t\t\t\t\t   TrUserData);\n      response_parameters ->\n\t  encode_msg_response_parameters(id(Msg, TrUserData),\n\t\t\t\t\t TrUserData);\n      streaming_output_call_request ->\n\t  encode_msg_streaming_output_call_request(id(Msg,\n\t\t\t\t\t\t      TrUserData),\n\t\t\t\t\t\t   TrUserData);\n      streaming_output_call_response ->\n\t  encode_msg_streaming_output_call_response(id(Msg,\n\t\t\t\t\t\t       TrUserData),\n\t\t\t\t\t\t    TrUserData);\n      reconnect_params ->\n\t  encode_msg_reconnect_params(id(Msg, TrUserData),\n\t\t\t\t      TrUserData);\n      reconnect_info ->\n\t  encode_msg_reconnect_info(id(Msg, TrUserData),\n\t\t\t\t    TrUserData)\n    end.\n\n\nencode_msg_bool_value(Msg, TrUserData) ->\n    encode_msg_bool_value(Msg, <<>>, TrUserData).\n\n\nencode_msg_bool_value(#{} = M, Bin, TrUserData) ->\n    case M of\n      #{value := F1} ->\n\t  begin\n\t    TrF1 = id(F1, TrUserData),\n\t    if TrF1 =:= false -> Bin;\n\t       true -> e_type_bool(TrF1, <<Bin/binary, 8>>, TrUserData)\n\t    end\n\t  end;\n      _ -> Bin\n    end.\n\nencode_msg_payload(Msg, TrUserData) ->\n    encode_msg_payload(Msg, <<>>, TrUserData).\n\n\nencode_msg_payload(#{} = M, Bin, TrUserData) ->\n    B1 = case M of\n\t   #{type := F1} ->\n\t       begin\n\t\t TrF1 = id(F1, TrUserData),\n\t\t if TrF1 =:= 'COMPRESSABLE'; TrF1 =:= 0 -> Bin;\n\t\t    true ->\n\t\t\t'e_enum_grpc.testing.PayloadType'(TrF1,\n\t\t\t\t\t\t\t  <<Bin/binary, 8>>,\n\t\t\t\t\t\t\t  'MaybeTrUserData')\n\t\t end\n\t       end;\n\t   _ -> Bin\n\t end,\n    case M of\n      #{body := F2} ->\n\t  begin\n\t    TrF2 = id(F2, TrUserData),\n\t    case iolist_size(TrF2) of\n\t      0 -> B1;\n\t      _ -> e_type_bytes(TrF2, <<B1/binary, 18>>, TrUserData)\n\t    end\n\t  end;\n      _ -> B1\n    end.\n\nencode_msg_echo_status(Msg, TrUserData) ->\n    encode_msg_echo_status(Msg, <<>>, TrUserData).\n\n\nencode_msg_echo_status(#{} = M, Bin, TrUserData) ->\n    B1 = case M of\n\t   #{code := F1} ->\n\t       begin\n\t\t TrF1 = id(F1, TrUserData),\n\t\t if TrF1 =:= 0 -> Bin;\n\t\t    true ->\n\t\t\te_type_int32(TrF1, <<Bin/binary, 8>>, TrUserData)\n\t\t end\n\t       end;\n\t   _ -> Bin\n\t end,\n    case M of\n      #{message := F2} ->\n\t  begin\n\t    TrF2 = id(F2, TrUserData),\n\t    case is_empty_string(TrF2) of\n\t      true -> B1;\n\t      false ->\n\t\t  e_type_string(TrF2, <<B1/binary, 18>>, TrUserData)\n\t    end\n\t  end;\n      _ -> B1\n    end.\n\nencode_msg_simple_request(Msg, TrUserData) ->\n    encode_msg_simple_request(Msg, <<>>, TrUserData).\n\n\nencode_msg_simple_request(#{} = M, Bin, TrUserData) ->\n    B1 = case M of\n\t   #{response_type := F1} ->\n\t       begin\n\t\t TrF1 = id(F1, TrUserData),\n\t\t if TrF1 =:= 'COMPRESSABLE'; TrF1 =:= 0 -> Bin;\n\t\t    true ->\n\t\t\t'e_enum_grpc.testing.PayloadType'(TrF1,\n\t\t\t\t\t\t\t  <<Bin/binary, 8>>,\n\t\t\t\t\t\t\t  'MaybeTrUserData')\n\t\t end\n\t       end;\n\t   _ -> Bin\n\t end,\n    B2 = case M of\n\t   #{response_size := F2} ->\n\t       begin\n\t\t TrF2 = id(F2, TrUserData),\n\t\t if TrF2 =:= 0 -> B1;\n\t\t    true ->\n\t\t\te_type_int32(TrF2, <<B1/binary, 16>>, TrUserData)\n\t\t end\n\t       end;\n\t   _ -> B1\n\t end,\n    B3 = case M of\n\t   #{payload := F3} ->\n\t       begin\n\t\t TrF3 = id(F3, TrUserData),\n\t\t if TrF3 =:= undefined -> B2;\n\t\t    true ->\n\t\t\te_mfield_simple_request_payload(TrF3, <<B2/binary, 26>>,\n\t\t\t\t\t\t\tTrUserData)\n\t\t end\n\t       end;\n\t   _ -> B2\n\t end,\n    B4 = case M of\n\t   #{fill_username := F4} ->\n\t       begin\n\t\t TrF4 = id(F4, TrUserData),\n\t\t if TrF4 =:= false -> B3;\n\t\t    true -> e_type_bool(TrF4, <<B3/binary, 32>>, TrUserData)\n\t\t end\n\t       end;\n\t   _ -> B3\n\t end,\n    B5 = case M of\n\t   #{fill_oauth_scope := F5} ->\n\t       begin\n\t\t TrF5 = id(F5, TrUserData),\n\t\t if TrF5 =:= false -> B4;\n\t\t    true -> e_type_bool(TrF5, <<B4/binary, 40>>, TrUserData)\n\t\t end\n\t       end;\n\t   _ -> B4\n\t end,\n    B6 = case M of\n\t   #{response_compressed := F6} ->\n\t       begin\n\t\t TrF6 = id(F6, TrUserData),\n\t\t if TrF6 =:= undefined -> B5;\n\t\t    true ->\n\t\t\te_mfield_simple_request_response_compressed(TrF6,\n\t\t\t\t\t\t\t\t    <<B5/binary,\n\t\t\t\t\t\t\t\t      50>>,\n\t\t\t\t\t\t\t\t    TrUserData)\n\t\t end\n\t       end;\n\t   _ -> B5\n\t end,\n    B7 = case M of\n\t   #{response_status := F7} ->\n\t       begin\n\t\t TrF7 = id(F7, TrUserData),\n\t\t if TrF7 =:= undefined -> B6;\n\t\t    true ->\n\t\t\te_mfield_simple_request_response_status(TrF7,\n\t\t\t\t\t\t\t\t<<B6/binary,\n\t\t\t\t\t\t\t\t  58>>,\n\t\t\t\t\t\t\t\tTrUserData)\n\t\t end\n\t       end;\n\t   _ -> B6\n\t end,\n    case M of\n      #{expect_compressed := F8} ->\n\t  begin\n\t    TrF8 = id(F8, TrUserData),\n\t    if TrF8 =:= undefined -> B7;\n\t       true ->\n\t\t   e_mfield_simple_request_expect_compressed(TrF8,\n\t\t\t\t\t\t\t     <<B7/binary, 66>>,\n\t\t\t\t\t\t\t     TrUserData)\n\t    end\n\t  end;\n      _ -> B7\n    end.\n\nencode_msg_simple_response(Msg, TrUserData) ->\n    encode_msg_simple_response(Msg, <<>>, TrUserData).\n\n\nencode_msg_simple_response(#{} = M, Bin, TrUserData) ->\n    B1 = case M of\n\t   #{payload := F1} ->\n\t       begin\n\t\t TrF1 = id(F1, TrUserData),\n\t\t if TrF1 =:= undefined -> Bin;\n\t\t    true ->\n\t\t\te_mfield_simple_response_payload(TrF1,\n\t\t\t\t\t\t\t <<Bin/binary, 10>>,\n\t\t\t\t\t\t\t TrUserData)\n\t\t end\n\t       end;\n\t   _ -> Bin\n\t end,\n    B2 = case M of\n\t   #{username := F2} ->\n\t       begin\n\t\t TrF2 = id(F2, TrUserData),\n\t\t case is_empty_string(TrF2) of\n\t\t   true -> B1;\n\t\t   false ->\n\t\t       e_type_string(TrF2, <<B1/binary, 18>>, TrUserData)\n\t\t end\n\t       end;\n\t   _ -> B1\n\t end,\n    case M of\n      #{oauth_scope := F3} ->\n\t  begin\n\t    TrF3 = id(F3, TrUserData),\n\t    case is_empty_string(TrF3) of\n\t      true -> B2;\n\t      false ->\n\t\t  e_type_string(TrF3, <<B2/binary, 26>>, TrUserData)\n\t    end\n\t  end;\n      _ -> B2\n    end.\n\nencode_msg_streaming_input_call_request(Msg,\n\t\t\t\t\tTrUserData) ->\n    encode_msg_streaming_input_call_request(Msg, <<>>,\n\t\t\t\t\t    TrUserData).\n\n\nencode_msg_streaming_input_call_request(#{} = M, Bin,\n\t\t\t\t\tTrUserData) ->\n    B1 = case M of\n\t   #{payload := F1} ->\n\t       begin\n\t\t TrF1 = id(F1, TrUserData),\n\t\t if TrF1 =:= undefined -> Bin;\n\t\t    true ->\n\t\t\te_mfield_streaming_input_call_request_payload(TrF1,\n\t\t\t\t\t\t\t\t      <<Bin/binary,\n\t\t\t\t\t\t\t\t\t10>>,\n\t\t\t\t\t\t\t\t      TrUserData)\n\t\t end\n\t       end;\n\t   _ -> Bin\n\t end,\n    case M of\n      #{expect_compressed := F2} ->\n\t  begin\n\t    TrF2 = id(F2, TrUserData),\n\t    if TrF2 =:= undefined -> B1;\n\t       true ->\n\t\t   e_mfield_streaming_input_call_request_expect_compressed(TrF2,\n\t\t\t\t\t\t\t\t\t   <<B1/binary,\n\t\t\t\t\t\t\t\t\t     18>>,\n\t\t\t\t\t\t\t\t\t   TrUserData)\n\t    end\n\t  end;\n      _ -> B1\n    end.\n\nencode_msg_streaming_input_call_response(Msg,\n\t\t\t\t\t TrUserData) ->\n    encode_msg_streaming_input_call_response(Msg, <<>>,\n\t\t\t\t\t     TrUserData).\n\n\nencode_msg_streaming_input_call_response(#{} = M, Bin,\n\t\t\t\t\t TrUserData) ->\n    case M of\n      #{aggregated_payload_size := F1} ->\n\t  begin\n\t    TrF1 = id(F1, TrUserData),\n\t    if TrF1 =:= 0 -> Bin;\n\t       true ->\n\t\t   e_type_int32(TrF1, <<Bin/binary, 8>>, TrUserData)\n\t    end\n\t  end;\n      _ -> Bin\n    end.\n\nencode_msg_response_parameters(Msg, TrUserData) ->\n    encode_msg_response_parameters(Msg, <<>>, TrUserData).\n\n\nencode_msg_response_parameters(#{} = M, Bin,\n\t\t\t       TrUserData) ->\n    B1 = case M of\n\t   #{size := F1} ->\n\t       begin\n\t\t TrF1 = id(F1, TrUserData),\n\t\t if TrF1 =:= 0 -> Bin;\n\t\t    true ->\n\t\t\te_type_int32(TrF1, <<Bin/binary, 8>>, TrUserData)\n\t\t end\n\t       end;\n\t   _ -> Bin\n\t end,\n    B2 = case M of\n\t   #{interval_us := F2} ->\n\t       begin\n\t\t TrF2 = id(F2, TrUserData),\n\t\t if TrF2 =:= 0 -> B1;\n\t\t    true ->\n\t\t\te_type_int32(TrF2, <<B1/binary, 16>>, TrUserData)\n\t\t end\n\t       end;\n\t   _ -> B1\n\t end,\n    case M of\n      #{compressed := F3} ->\n\t  begin\n\t    TrF3 = id(F3, TrUserData),\n\t    if TrF3 =:= undefined -> B2;\n\t       true ->\n\t\t   e_mfield_response_parameters_compressed(TrF3,\n\t\t\t\t\t\t\t   <<B2/binary, 26>>,\n\t\t\t\t\t\t\t   TrUserData)\n\t    end\n\t  end;\n      _ -> B2\n    end.\n\nencode_msg_streaming_output_call_request(Msg,\n\t\t\t\t\t TrUserData) ->\n    encode_msg_streaming_output_call_request(Msg, <<>>,\n\t\t\t\t\t     TrUserData).\n\n\nencode_msg_streaming_output_call_request(#{} = M, Bin,\n\t\t\t\t\t TrUserData) ->\n    B1 = case M of\n\t   #{response_type := F1} ->\n\t       begin\n\t\t TrF1 = id(F1, TrUserData),\n\t\t if TrF1 =:= 'COMPRESSABLE'; TrF1 =:= 0 -> Bin;\n\t\t    true ->\n\t\t\t'e_enum_grpc.testing.PayloadType'(TrF1,\n\t\t\t\t\t\t\t  <<Bin/binary, 8>>,\n\t\t\t\t\t\t\t  'MaybeTrUserData')\n\t\t end\n\t       end;\n\t   _ -> Bin\n\t end,\n    B2 = case M of\n\t   #{response_parameters := F2} ->\n\t       TrF2 = id(F2, TrUserData),\n\t       if TrF2 == [] -> B1;\n\t\t  true ->\n\t\t      e_field_streaming_output_call_request_response_parameters(TrF2,\n\t\t\t\t\t\t\t\t\t\tB1,\n\t\t\t\t\t\t\t\t\t\tTrUserData)\n\t       end;\n\t   _ -> B1\n\t end,\n    B3 = case M of\n\t   #{payload := F3} ->\n\t       begin\n\t\t TrF3 = id(F3, TrUserData),\n\t\t if TrF3 =:= undefined -> B2;\n\t\t    true ->\n\t\t\te_mfield_streaming_output_call_request_payload(TrF3,\n\t\t\t\t\t\t\t\t       <<B2/binary,\n\t\t\t\t\t\t\t\t\t 26>>,\n\t\t\t\t\t\t\t\t       TrUserData)\n\t\t end\n\t       end;\n\t   _ -> B2\n\t end,\n    case M of\n      #{response_status := F4} ->\n\t  begin\n\t    TrF4 = id(F4, TrUserData),\n\t    if TrF4 =:= undefined -> B3;\n\t       true ->\n\t\t   e_mfield_streaming_output_call_request_response_status(TrF4,\n\t\t\t\t\t\t\t\t\t  <<B3/binary,\n\t\t\t\t\t\t\t\t\t    58>>,\n\t\t\t\t\t\t\t\t\t  TrUserData)\n\t    end\n\t  end;\n      _ -> B3\n    end.\n\nencode_msg_streaming_output_call_response(Msg,\n\t\t\t\t\t  TrUserData) ->\n    encode_msg_streaming_output_call_response(Msg, <<>>,\n\t\t\t\t\t      TrUserData).\n\n\nencode_msg_streaming_output_call_response(#{} = M, Bin,\n\t\t\t\t\t  TrUserData) ->\n    case M of\n      #{payload := F1} ->\n\t  begin\n\t    TrF1 = id(F1, TrUserData),\n\t    if TrF1 =:= undefined -> Bin;\n\t       true ->\n\t\t   e_mfield_streaming_output_call_response_payload(TrF1,\n\t\t\t\t\t\t\t\t   <<Bin/binary,\n\t\t\t\t\t\t\t\t     10>>,\n\t\t\t\t\t\t\t\t   TrUserData)\n\t    end\n\t  end;\n      _ -> Bin\n    end.\n\nencode_msg_reconnect_params(Msg, TrUserData) ->\n    encode_msg_reconnect_params(Msg, <<>>, TrUserData).\n\n\nencode_msg_reconnect_params(#{} = M, Bin, TrUserData) ->\n    case M of\n      #{max_reconnect_backoff_ms := F1} ->\n\t  begin\n\t    TrF1 = id(F1, TrUserData),\n\t    if TrF1 =:= 0 -> Bin;\n\t       true ->\n\t\t   e_type_int32(TrF1, <<Bin/binary, 8>>, TrUserData)\n\t    end\n\t  end;\n      _ -> Bin\n    end.\n\nencode_msg_reconnect_info(Msg, TrUserData) ->\n    encode_msg_reconnect_info(Msg, <<>>, TrUserData).\n\n\nencode_msg_reconnect_info(#{} = M, Bin, TrUserData) ->\n    B1 = case M of\n\t   #{passed := F1} ->\n\t       begin\n\t\t TrF1 = id(F1, TrUserData),\n\t\t if TrF1 =:= false -> Bin;\n\t\t    true -> e_type_bool(TrF1, <<Bin/binary, 8>>, TrUserData)\n\t\t end\n\t       end;\n\t   _ -> Bin\n\t end,\n    case M of\n      #{backoff_ms := F2} ->\n\t  TrF2 = id(F2, TrUserData),\n\t  if TrF2 == [] -> B1;\n\t     true ->\n\t\t e_field_reconnect_info_backoff_ms(TrF2, B1, TrUserData)\n\t  end;\n      _ -> B1\n    end.\n\ne_mfield_simple_request_payload(Msg, Bin, TrUserData) ->\n    SubBin = encode_msg_payload(Msg, <<>>, TrUserData),\n    Bin2 = e_varint(byte_size(SubBin), Bin),\n    <<Bin2/binary, SubBin/binary>>.\n\ne_mfield_simple_request_response_compressed(Msg, Bin,\n\t\t\t\t\t    TrUserData) ->\n    SubBin = encode_msg_bool_value(Msg, <<>>, TrUserData),\n    Bin2 = e_varint(byte_size(SubBin), Bin),\n    <<Bin2/binary, SubBin/binary>>.\n\ne_mfield_simple_request_response_status(Msg, Bin,\n\t\t\t\t\tTrUserData) ->\n    SubBin = encode_msg_echo_status(Msg, <<>>, TrUserData),\n    Bin2 = e_varint(byte_size(SubBin), Bin),\n    <<Bin2/binary, SubBin/binary>>.\n\ne_mfield_simple_request_expect_compressed(Msg, Bin,\n\t\t\t\t\t  TrUserData) ->\n    SubBin = encode_msg_bool_value(Msg, <<>>, TrUserData),\n    Bin2 = e_varint(byte_size(SubBin), Bin),\n    <<Bin2/binary, SubBin/binary>>.\n\ne_mfield_simple_response_payload(Msg, Bin,\n\t\t\t\t TrUserData) ->\n    SubBin = encode_msg_payload(Msg, <<>>, TrUserData),\n    Bin2 = e_varint(byte_size(SubBin), Bin),\n    <<Bin2/binary, SubBin/binary>>.\n\ne_mfield_streaming_input_call_request_payload(Msg, Bin,\n\t\t\t\t\t      TrUserData) ->\n    SubBin = encode_msg_payload(Msg, <<>>, TrUserData),\n    Bin2 = e_varint(byte_size(SubBin), Bin),\n    <<Bin2/binary, SubBin/binary>>.\n\ne_mfield_streaming_input_call_request_expect_compressed(Msg,\n\t\t\t\t\t\t\tBin, TrUserData) ->\n    SubBin = encode_msg_bool_value(Msg, <<>>, TrUserData),\n    Bin2 = e_varint(byte_size(SubBin), Bin),\n    <<Bin2/binary, SubBin/binary>>.\n\ne_mfield_response_parameters_compressed(Msg, Bin,\n\t\t\t\t\tTrUserData) ->\n    SubBin = encode_msg_bool_value(Msg, <<>>, TrUserData),\n    Bin2 = e_varint(byte_size(SubBin), Bin),\n    <<Bin2/binary, SubBin/binary>>.\n\ne_mfield_streaming_output_call_request_response_parameters(Msg,\n\t\t\t\t\t\t\t   Bin, TrUserData) ->\n    SubBin = encode_msg_response_parameters(Msg, <<>>,\n\t\t\t\t\t    TrUserData),\n    Bin2 = e_varint(byte_size(SubBin), Bin),\n    <<Bin2/binary, SubBin/binary>>.\n\ne_field_streaming_output_call_request_response_parameters([Elem\n\t\t\t\t\t\t\t   | Rest],\n\t\t\t\t\t\t\t  Bin, TrUserData) ->\n    Bin2 = <<Bin/binary, 18>>,\n    Bin3 =\n\te_mfield_streaming_output_call_request_response_parameters(id(Elem,\n\t\t\t\t\t\t\t\t      TrUserData),\n\t\t\t\t\t\t\t\t   Bin2,\n\t\t\t\t\t\t\t\t   TrUserData),\n    e_field_streaming_output_call_request_response_parameters(Rest,\n\t\t\t\t\t\t\t      Bin3, TrUserData);\ne_field_streaming_output_call_request_response_parameters([],\n\t\t\t\t\t\t\t  Bin, _TrUserData) ->\n    Bin.\n\ne_mfield_streaming_output_call_request_payload(Msg, Bin,\n\t\t\t\t\t       TrUserData) ->\n    SubBin = encode_msg_payload(Msg, <<>>, TrUserData),\n    Bin2 = e_varint(byte_size(SubBin), Bin),\n    <<Bin2/binary, SubBin/binary>>.\n\ne_mfield_streaming_output_call_request_response_status(Msg,\n\t\t\t\t\t\t       Bin, TrUserData) ->\n    SubBin = encode_msg_echo_status(Msg, <<>>, TrUserData),\n    Bin2 = e_varint(byte_size(SubBin), Bin),\n    <<Bin2/binary, SubBin/binary>>.\n\ne_mfield_streaming_output_call_response_payload(Msg,\n\t\t\t\t\t\tBin, TrUserData) ->\n    SubBin = encode_msg_payload(Msg, <<>>, TrUserData),\n    Bin2 = e_varint(byte_size(SubBin), Bin),\n    <<Bin2/binary, SubBin/binary>>.\n\ne_field_reconnect_info_backoff_ms(Elems, Bin,\n\t\t\t\t  TrUserData)\n    when Elems =/= [] ->\n    SubBin = e_pfield_reconnect_info_backoff_ms(Elems, <<>>,\n\t\t\t\t\t\tTrUserData),\n    Bin2 = <<Bin/binary, 18>>,\n    Bin3 = e_varint(byte_size(SubBin), Bin2),\n    <<Bin3/binary, SubBin/binary>>;\ne_field_reconnect_info_backoff_ms([], Bin,\n\t\t\t\t  _TrUserData) ->\n    Bin.\n\ne_pfield_reconnect_info_backoff_ms([Value | Rest], Bin,\n\t\t\t\t   TrUserData) ->\n    Bin2 = e_type_int32(id(Value, TrUserData), Bin,\n\t\t\tTrUserData),\n    e_pfield_reconnect_info_backoff_ms(Rest, Bin2,\n\t\t\t\t       TrUserData);\ne_pfield_reconnect_info_backoff_ms([], Bin,\n\t\t\t\t   _TrUserData) ->\n    Bin.\n\n'e_enum_grpc.testing.PayloadType'('COMPRESSABLE', Bin,\n\t\t\t\t  _TrUserData) ->\n    <<Bin/binary, 0>>;\n'e_enum_grpc.testing.PayloadType'(V, Bin,\n\t\t\t\t  _TrUserData) ->\n    e_varint(V, Bin).\n\n-compile({nowarn_unused_function,e_type_sint/3}).\ne_type_sint(Value, Bin, _TrUserData) when Value >= 0 ->\n    e_varint(Value * 2, Bin);\ne_type_sint(Value, Bin, _TrUserData) ->\n    e_varint(Value * -2 - 1, Bin).\n\n-compile({nowarn_unused_function,e_type_int32/3}).\ne_type_int32(Value, Bin, _TrUserData)\n    when 0 =< Value, Value =< 127 ->\n    <<Bin/binary, Value>>;\ne_type_int32(Value, Bin, _TrUserData) ->\n    <<N:64/unsigned-native>> = <<Value:64/signed-native>>,\n    e_varint(N, Bin).\n\n-compile({nowarn_unused_function,e_type_int64/3}).\ne_type_int64(Value, Bin, _TrUserData)\n    when 0 =< Value, Value =< 127 ->\n    <<Bin/binary, Value>>;\ne_type_int64(Value, Bin, _TrUserData) ->\n    <<N:64/unsigned-native>> = <<Value:64/signed-native>>,\n    e_varint(N, Bin).\n\n-compile({nowarn_unused_function,e_type_bool/3}).\ne_type_bool(true, Bin, _TrUserData) ->\n    <<Bin/binary, 1>>;\ne_type_bool(false, Bin, _TrUserData) ->\n    <<Bin/binary, 0>>;\ne_type_bool(1, Bin, _TrUserData) -> <<Bin/binary, 1>>;\ne_type_bool(0, Bin, _TrUserData) -> <<Bin/binary, 0>>.\n\n-compile({nowarn_unused_function,e_type_string/3}).\ne_type_string(S, Bin, _TrUserData) ->\n    Utf8 = unicode:characters_to_binary(S),\n    Bin2 = e_varint(byte_size(Utf8), Bin),\n    <<Bin2/binary, Utf8/binary>>.\n\n-compile({nowarn_unused_function,e_type_bytes/3}).\ne_type_bytes(Bytes, Bin, _TrUserData)\n    when is_binary(Bytes) ->\n    Bin2 = e_varint(byte_size(Bytes), Bin),\n    <<Bin2/binary, Bytes/binary>>;\ne_type_bytes(Bytes, Bin, _TrUserData)\n    when is_list(Bytes) ->\n    BytesBin = iolist_to_binary(Bytes),\n    Bin2 = e_varint(byte_size(BytesBin), Bin),\n    <<Bin2/binary, BytesBin/binary>>.\n\n-compile({nowarn_unused_function,e_type_fixed32/3}).\ne_type_fixed32(Value, Bin, _TrUserData) ->\n    <<Bin/binary, Value:32/little>>.\n\n-compile({nowarn_unused_function,e_type_sfixed32/3}).\ne_type_sfixed32(Value, Bin, _TrUserData) ->\n    <<Bin/binary, Value:32/little-signed>>.\n\n-compile({nowarn_unused_function,e_type_fixed64/3}).\ne_type_fixed64(Value, Bin, _TrUserData) ->\n    <<Bin/binary, Value:64/little>>.\n\n-compile({nowarn_unused_function,e_type_sfixed64/3}).\ne_type_sfixed64(Value, Bin, _TrUserData) ->\n    <<Bin/binary, Value:64/little-signed>>.\n\n-compile({nowarn_unused_function,e_type_float/3}).\ne_type_float(V, Bin, _) when is_number(V) ->\n    <<Bin/binary, V:32/little-float>>;\ne_type_float(infinity, Bin, _) ->\n    <<Bin/binary, 0:16, 128, 127>>;\ne_type_float('-infinity', Bin, _) ->\n    <<Bin/binary, 0:16, 128, 255>>;\ne_type_float(nan, Bin, _) ->\n    <<Bin/binary, 0:16, 192, 127>>.\n\n-compile({nowarn_unused_function,e_type_double/3}).\ne_type_double(V, Bin, _) when is_number(V) ->\n    <<Bin/binary, V:64/little-float>>;\ne_type_double(infinity, Bin, _) ->\n    <<Bin/binary, 0:48, 240, 127>>;\ne_type_double('-infinity', Bin, _) ->\n    <<Bin/binary, 0:48, 240, 255>>;\ne_type_double(nan, Bin, _) ->\n    <<Bin/binary, 0:48, 248, 127>>.\n\n-compile({nowarn_unused_function,e_varint/3}).\ne_varint(N, Bin, _TrUserData) -> e_varint(N, Bin).\n\n-compile({nowarn_unused_function,e_varint/2}).\ne_varint(N, Bin) when N =< 127 -> <<Bin/binary, N>>;\ne_varint(N, Bin) ->\n    Bin2 = <<Bin/binary, (N band 127 bor 128)>>,\n    e_varint(N bsr 7, Bin2).\n\nis_empty_string(\"\") -> true;\nis_empty_string(<<>>) -> true;\nis_empty_string(L) when is_list(L) ->\n    not string_has_chars(L);\nis_empty_string(B) when is_binary(B) -> false.\n\nstring_has_chars([C | _]) when is_integer(C) -> true;\nstring_has_chars([H | T]) ->\n    case string_has_chars(H) of\n      true -> true;\n      false -> string_has_chars(T)\n    end;\nstring_has_chars(B)\n    when is_binary(B), byte_size(B) =/= 0 ->\n    true;\nstring_has_chars(C) when is_integer(C) -> true;\nstring_has_chars(<<>>) -> false;\nstring_has_chars([]) -> false.\n\n\ndecode_msg(Bin, MsgName) when is_binary(Bin) ->\n    decode_msg(Bin, MsgName, []).\n\ndecode_msg(Bin, MsgName, Opts) when is_binary(Bin) ->\n    TrUserData = proplists:get_value(user_data, Opts),\n    decode_msg_1_catch(Bin, MsgName, TrUserData).\n\n-ifdef('OTP_RELEASE').\ndecode_msg_1_catch(Bin, MsgName, TrUserData) ->\n    try decode_msg_2_doit(MsgName, Bin, TrUserData)\n    catch Class:Reason:StackTrace -> error({gpb_error,{decoding_failure, {Bin, MsgName, {Class, Reason, StackTrace}}}})\n    end.\n-else.\ndecode_msg_1_catch(Bin, MsgName, TrUserData) ->\n    try decode_msg_2_doit(MsgName, Bin, TrUserData)\n    catch Class:Reason ->\n        StackTrace = erlang:get_stacktrace(),\n        error({gpb_error,{decoding_failure, {Bin, MsgName, {Class, Reason, StackTrace}}}})\n    end.\n-endif.\n\ndecode_msg_2_doit(bool_value, Bin, TrUserData) ->\n    id(decode_msg_bool_value(Bin, TrUserData), TrUserData);\ndecode_msg_2_doit(payload, Bin, TrUserData) ->\n    id(decode_msg_payload(Bin, TrUserData), TrUserData);\ndecode_msg_2_doit(echo_status, Bin, TrUserData) ->\n    id(decode_msg_echo_status(Bin, TrUserData), TrUserData);\ndecode_msg_2_doit(simple_request, Bin, TrUserData) ->\n    id(decode_msg_simple_request(Bin, TrUserData),\n       TrUserData);\ndecode_msg_2_doit(simple_response, Bin, TrUserData) ->\n    id(decode_msg_simple_response(Bin, TrUserData),\n       TrUserData);\ndecode_msg_2_doit(streaming_input_call_request, Bin,\n\t\t  TrUserData) ->\n    id(decode_msg_streaming_input_call_request(Bin,\n\t\t\t\t\t       TrUserData),\n       TrUserData);\ndecode_msg_2_doit(streaming_input_call_response, Bin,\n\t\t  TrUserData) ->\n    id(decode_msg_streaming_input_call_response(Bin,\n\t\t\t\t\t\tTrUserData),\n       TrUserData);\ndecode_msg_2_doit(response_parameters, Bin,\n\t\t  TrUserData) ->\n    id(decode_msg_response_parameters(Bin, TrUserData),\n       TrUserData);\ndecode_msg_2_doit(streaming_output_call_request, Bin,\n\t\t  TrUserData) ->\n    id(decode_msg_streaming_output_call_request(Bin,\n\t\t\t\t\t\tTrUserData),\n       TrUserData);\ndecode_msg_2_doit(streaming_output_call_response, Bin,\n\t\t  TrUserData) ->\n    id(decode_msg_streaming_output_call_response(Bin,\n\t\t\t\t\t\t TrUserData),\n       TrUserData);\ndecode_msg_2_doit(reconnect_params, Bin, TrUserData) ->\n    id(decode_msg_reconnect_params(Bin, TrUserData),\n       TrUserData);\ndecode_msg_2_doit(reconnect_info, Bin, TrUserData) ->\n    id(decode_msg_reconnect_info(Bin, TrUserData),\n       TrUserData).\n\n\n\ndecode_msg_bool_value(Bin, TrUserData) ->\n    dfp_read_field_def_bool_value(Bin, 0, 0,\n\t\t\t\t  id(false, TrUserData), TrUserData).\n\ndfp_read_field_def_bool_value(<<8, Rest/binary>>, Z1,\n\t\t\t      Z2, F@_1, TrUserData) ->\n    d_field_bool_value_value(Rest, Z1, Z2, F@_1,\n\t\t\t     TrUserData);\ndfp_read_field_def_bool_value(<<>>, 0, 0, F@_1, _) ->\n    #{value => F@_1};\ndfp_read_field_def_bool_value(Other, Z1, Z2, F@_1,\n\t\t\t      TrUserData) ->\n    dg_read_field_def_bool_value(Other, Z1, Z2, F@_1,\n\t\t\t\t TrUserData).\n\ndg_read_field_def_bool_value(<<1:1, X:7, Rest/binary>>,\n\t\t\t     N, Acc, F@_1, TrUserData)\n    when N < 32 - 7 ->\n    dg_read_field_def_bool_value(Rest, N + 7, X bsl N + Acc,\n\t\t\t\t F@_1, TrUserData);\ndg_read_field_def_bool_value(<<0:1, X:7, Rest/binary>>,\n\t\t\t     N, Acc, F@_1, TrUserData) ->\n    Key = X bsl N + Acc,\n    case Key of\n      8 ->\n\t  d_field_bool_value_value(Rest, 0, 0, F@_1, TrUserData);\n      _ ->\n\t  case Key band 7 of\n\t    0 ->\n\t\tskip_varint_bool_value(Rest, 0, 0, F@_1, TrUserData);\n\t    1 -> skip_64_bool_value(Rest, 0, 0, F@_1, TrUserData);\n\t    2 ->\n\t\tskip_length_delimited_bool_value(Rest, 0, 0, F@_1,\n\t\t\t\t\t\t TrUserData);\n\t    3 ->\n\t\tskip_group_bool_value(Rest, Key bsr 3, 0, F@_1,\n\t\t\t\t      TrUserData);\n\t    5 -> skip_32_bool_value(Rest, 0, 0, F@_1, TrUserData)\n\t  end\n    end;\ndg_read_field_def_bool_value(<<>>, 0, 0, F@_1, _) ->\n    #{value => F@_1}.\n\nd_field_bool_value_value(<<1:1, X:7, Rest/binary>>, N,\n\t\t\t Acc, F@_1, TrUserData)\n    when N < 57 ->\n    d_field_bool_value_value(Rest, N + 7, X bsl N + Acc,\n\t\t\t     F@_1, TrUserData);\nd_field_bool_value_value(<<0:1, X:7, Rest/binary>>, N,\n\t\t\t Acc, _, TrUserData) ->\n    {NewFValue, RestF} = {id(X bsl N + Acc =/= 0,\n\t\t\t     TrUserData),\n\t\t\t  Rest},\n    dfp_read_field_def_bool_value(RestF, 0, 0, NewFValue,\n\t\t\t\t  TrUserData).\n\nskip_varint_bool_value(<<1:1, _:7, Rest/binary>>, Z1,\n\t\t       Z2, F@_1, TrUserData) ->\n    skip_varint_bool_value(Rest, Z1, Z2, F@_1, TrUserData);\nskip_varint_bool_value(<<0:1, _:7, Rest/binary>>, Z1,\n\t\t       Z2, F@_1, TrUserData) ->\n    dfp_read_field_def_bool_value(Rest, Z1, Z2, F@_1,\n\t\t\t\t  TrUserData).\n\nskip_length_delimited_bool_value(<<1:1, X:7,\n\t\t\t\t   Rest/binary>>,\n\t\t\t\t N, Acc, F@_1, TrUserData)\n    when N < 57 ->\n    skip_length_delimited_bool_value(Rest, N + 7,\n\t\t\t\t     X bsl N + Acc, F@_1, TrUserData);\nskip_length_delimited_bool_value(<<0:1, X:7,\n\t\t\t\t   Rest/binary>>,\n\t\t\t\t N, Acc, F@_1, TrUserData) ->\n    Length = X bsl N + Acc,\n    <<_:Length/binary, Rest2/binary>> = Rest,\n    dfp_read_field_def_bool_value(Rest2, 0, 0, F@_1,\n\t\t\t\t  TrUserData).\n\nskip_group_bool_value(Bin, FNum, Z2, F@_1,\n\t\t      TrUserData) ->\n    {_, Rest} = read_group(Bin, FNum),\n    dfp_read_field_def_bool_value(Rest, 0, Z2, F@_1,\n\t\t\t\t  TrUserData).\n\nskip_32_bool_value(<<_:32, Rest/binary>>, Z1, Z2, F@_1,\n\t\t   TrUserData) ->\n    dfp_read_field_def_bool_value(Rest, Z1, Z2, F@_1,\n\t\t\t\t  TrUserData).\n\nskip_64_bool_value(<<_:64, Rest/binary>>, Z1, Z2, F@_1,\n\t\t   TrUserData) ->\n    dfp_read_field_def_bool_value(Rest, Z1, Z2, F@_1,\n\t\t\t\t  TrUserData).\n\ndecode_msg_payload(Bin, TrUserData) ->\n    dfp_read_field_def_payload(Bin, 0, 0,\n\t\t\t       id('COMPRESSABLE', TrUserData),\n\t\t\t       id(<<>>, TrUserData), TrUserData).\n\ndfp_read_field_def_payload(<<8, Rest/binary>>, Z1, Z2,\n\t\t\t   F@_1, F@_2, TrUserData) ->\n    d_field_payload_type(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t TrUserData);\ndfp_read_field_def_payload(<<18, Rest/binary>>, Z1, Z2,\n\t\t\t   F@_1, F@_2, TrUserData) ->\n    d_field_payload_body(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t TrUserData);\ndfp_read_field_def_payload(<<>>, 0, 0, F@_1, F@_2, _) ->\n    #{type => F@_1, body => F@_2};\ndfp_read_field_def_payload(Other, Z1, Z2, F@_1, F@_2,\n\t\t\t   TrUserData) ->\n    dg_read_field_def_payload(Other, Z1, Z2, F@_1, F@_2,\n\t\t\t      TrUserData).\n\ndg_read_field_def_payload(<<1:1, X:7, Rest/binary>>, N,\n\t\t\t  Acc, F@_1, F@_2, TrUserData)\n    when N < 32 - 7 ->\n    dg_read_field_def_payload(Rest, N + 7, X bsl N + Acc,\n\t\t\t      F@_1, F@_2, TrUserData);\ndg_read_field_def_payload(<<0:1, X:7, Rest/binary>>, N,\n\t\t\t  Acc, F@_1, F@_2, TrUserData) ->\n    Key = X bsl N + Acc,\n    case Key of\n      8 ->\n\t  d_field_payload_type(Rest, 0, 0, F@_1, F@_2,\n\t\t\t       TrUserData);\n      18 ->\n\t  d_field_payload_body(Rest, 0, 0, F@_1, F@_2,\n\t\t\t       TrUserData);\n      _ ->\n\t  case Key band 7 of\n\t    0 ->\n\t\tskip_varint_payload(Rest, 0, 0, F@_1, F@_2, TrUserData);\n\t    1 ->\n\t\tskip_64_payload(Rest, 0, 0, F@_1, F@_2, TrUserData);\n\t    2 ->\n\t\tskip_length_delimited_payload(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t\t      TrUserData);\n\t    3 ->\n\t\tskip_group_payload(Rest, Key bsr 3, 0, F@_1, F@_2,\n\t\t\t\t   TrUserData);\n\t    5 -> skip_32_payload(Rest, 0, 0, F@_1, F@_2, TrUserData)\n\t  end\n    end;\ndg_read_field_def_payload(<<>>, 0, 0, F@_1, F@_2, _) ->\n    #{type => F@_1, body => F@_2}.\n\nd_field_payload_type(<<1:1, X:7, Rest/binary>>, N, Acc,\n\t\t     F@_1, F@_2, TrUserData)\n    when N < 57 ->\n    d_field_payload_type(Rest, N + 7, X bsl N + Acc, F@_1,\n\t\t\t F@_2, TrUserData);\nd_field_payload_type(<<0:1, X:7, Rest/binary>>, N, Acc,\n\t\t     _, F@_2, TrUserData) ->\n    {NewFValue, RestF} =\n\t{id('d_enum_grpc.testing.PayloadType'(begin\n\t\t\t\t\t\t<<Res:32/signed-native>> = <<(X\n\t\t\t\t\t\t\t\t\t\tbsl\n\t\t\t\t\t\t\t\t\t\tN\n\t\t\t\t\t\t\t\t\t\t+\n\t\t\t\t\t\t\t\t\t\tAcc):32/unsigned-native>>,\n\t\t\t\t\t\tid(Res, TrUserData)\n\t\t\t\t\t      end),\n\t    TrUserData),\n\t Rest},\n    dfp_read_field_def_payload(RestF, 0, 0, NewFValue, F@_2,\n\t\t\t       TrUserData).\n\nd_field_payload_body(<<1:1, X:7, Rest/binary>>, N, Acc,\n\t\t     F@_1, F@_2, TrUserData)\n    when N < 57 ->\n    d_field_payload_body(Rest, N + 7, X bsl N + Acc, F@_1,\n\t\t\t F@_2, TrUserData);\nd_field_payload_body(<<0:1, X:7, Rest/binary>>, N, Acc,\n\t\t     F@_1, _, TrUserData) ->\n    {NewFValue, RestF} = begin\n\t\t\t   Len = X bsl N + Acc,\n\t\t\t   <<Bytes:Len/binary, Rest2/binary>> = Rest,\n\t\t\t   {id(binary:copy(Bytes), TrUserData), Rest2}\n\t\t\t end,\n    dfp_read_field_def_payload(RestF, 0, 0, F@_1, NewFValue,\n\t\t\t       TrUserData).\n\nskip_varint_payload(<<1:1, _:7, Rest/binary>>, Z1, Z2,\n\t\t    F@_1, F@_2, TrUserData) ->\n    skip_varint_payload(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\tTrUserData);\nskip_varint_payload(<<0:1, _:7, Rest/binary>>, Z1, Z2,\n\t\t    F@_1, F@_2, TrUserData) ->\n    dfp_read_field_def_payload(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t       TrUserData).\n\nskip_length_delimited_payload(<<1:1, X:7, Rest/binary>>,\n\t\t\t      N, Acc, F@_1, F@_2, TrUserData)\n    when N < 57 ->\n    skip_length_delimited_payload(Rest, N + 7,\n\t\t\t\t  X bsl N + Acc, F@_1, F@_2, TrUserData);\nskip_length_delimited_payload(<<0:1, X:7, Rest/binary>>,\n\t\t\t      N, Acc, F@_1, F@_2, TrUserData) ->\n    Length = X bsl N + Acc,\n    <<_:Length/binary, Rest2/binary>> = Rest,\n    dfp_read_field_def_payload(Rest2, 0, 0, F@_1, F@_2,\n\t\t\t       TrUserData).\n\nskip_group_payload(Bin, FNum, Z2, F@_1, F@_2,\n\t\t   TrUserData) ->\n    {_, Rest} = read_group(Bin, FNum),\n    dfp_read_field_def_payload(Rest, 0, Z2, F@_1, F@_2,\n\t\t\t       TrUserData).\n\nskip_32_payload(<<_:32, Rest/binary>>, Z1, Z2, F@_1,\n\t\tF@_2, TrUserData) ->\n    dfp_read_field_def_payload(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t       TrUserData).\n\nskip_64_payload(<<_:64, Rest/binary>>, Z1, Z2, F@_1,\n\t\tF@_2, TrUserData) ->\n    dfp_read_field_def_payload(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t       TrUserData).\n\ndecode_msg_echo_status(Bin, TrUserData) ->\n    dfp_read_field_def_echo_status(Bin, 0, 0,\n\t\t\t\t   id(0, TrUserData), id(<<>>, TrUserData),\n\t\t\t\t   TrUserData).\n\ndfp_read_field_def_echo_status(<<8, Rest/binary>>, Z1,\n\t\t\t       Z2, F@_1, F@_2, TrUserData) ->\n    d_field_echo_status_code(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t     TrUserData);\ndfp_read_field_def_echo_status(<<18, Rest/binary>>, Z1,\n\t\t\t       Z2, F@_1, F@_2, TrUserData) ->\n    d_field_echo_status_message(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t\tTrUserData);\ndfp_read_field_def_echo_status(<<>>, 0, 0, F@_1, F@_2,\n\t\t\t       _) ->\n    #{code => F@_1, message => F@_2};\ndfp_read_field_def_echo_status(Other, Z1, Z2, F@_1,\n\t\t\t       F@_2, TrUserData) ->\n    dg_read_field_def_echo_status(Other, Z1, Z2, F@_1, F@_2,\n\t\t\t\t  TrUserData).\n\ndg_read_field_def_echo_status(<<1:1, X:7, Rest/binary>>,\n\t\t\t      N, Acc, F@_1, F@_2, TrUserData)\n    when N < 32 - 7 ->\n    dg_read_field_def_echo_status(Rest, N + 7,\n\t\t\t\t  X bsl N + Acc, F@_1, F@_2, TrUserData);\ndg_read_field_def_echo_status(<<0:1, X:7, Rest/binary>>,\n\t\t\t      N, Acc, F@_1, F@_2, TrUserData) ->\n    Key = X bsl N + Acc,\n    case Key of\n      8 ->\n\t  d_field_echo_status_code(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t   TrUserData);\n      18 ->\n\t  d_field_echo_status_message(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t      TrUserData);\n      _ ->\n\t  case Key band 7 of\n\t    0 ->\n\t\tskip_varint_echo_status(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t\tTrUserData);\n\t    1 ->\n\t\tskip_64_echo_status(Rest, 0, 0, F@_1, F@_2, TrUserData);\n\t    2 ->\n\t\tskip_length_delimited_echo_status(Rest, 0, 0, F@_1,\n\t\t\t\t\t\t  F@_2, TrUserData);\n\t    3 ->\n\t\tskip_group_echo_status(Rest, Key bsr 3, 0, F@_1, F@_2,\n\t\t\t\t       TrUserData);\n\t    5 ->\n\t\tskip_32_echo_status(Rest, 0, 0, F@_1, F@_2, TrUserData)\n\t  end\n    end;\ndg_read_field_def_echo_status(<<>>, 0, 0, F@_1, F@_2,\n\t\t\t      _) ->\n    #{code => F@_1, message => F@_2}.\n\nd_field_echo_status_code(<<1:1, X:7, Rest/binary>>, N,\n\t\t\t Acc, F@_1, F@_2, TrUserData)\n    when N < 57 ->\n    d_field_echo_status_code(Rest, N + 7, X bsl N + Acc,\n\t\t\t     F@_1, F@_2, TrUserData);\nd_field_echo_status_code(<<0:1, X:7, Rest/binary>>, N,\n\t\t\t Acc, _, F@_2, TrUserData) ->\n    {NewFValue, RestF} = {begin\n\t\t\t    <<Res:32/signed-native>> = <<(X bsl N +\n\t\t\t\t\t\t\t    Acc):32/unsigned-native>>,\n\t\t\t    id(Res, TrUserData)\n\t\t\t  end,\n\t\t\t  Rest},\n    dfp_read_field_def_echo_status(RestF, 0, 0, NewFValue,\n\t\t\t\t   F@_2, TrUserData).\n\nd_field_echo_status_message(<<1:1, X:7, Rest/binary>>,\n\t\t\t    N, Acc, F@_1, F@_2, TrUserData)\n    when N < 57 ->\n    d_field_echo_status_message(Rest, N + 7, X bsl N + Acc,\n\t\t\t\tF@_1, F@_2, TrUserData);\nd_field_echo_status_message(<<0:1, X:7, Rest/binary>>,\n\t\t\t    N, Acc, F@_1, _, TrUserData) ->\n    {NewFValue, RestF} = begin\n\t\t\t   Len = X bsl N + Acc,\n\t\t\t   <<Bytes:Len/binary, Rest2/binary>> = Rest,\n\t\t\t   {id(binary:copy(Bytes), TrUserData), Rest2}\n\t\t\t end,\n    dfp_read_field_def_echo_status(RestF, 0, 0, F@_1,\n\t\t\t\t   NewFValue, TrUserData).\n\nskip_varint_echo_status(<<1:1, _:7, Rest/binary>>, Z1,\n\t\t\tZ2, F@_1, F@_2, TrUserData) ->\n    skip_varint_echo_status(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t    TrUserData);\nskip_varint_echo_status(<<0:1, _:7, Rest/binary>>, Z1,\n\t\t\tZ2, F@_1, F@_2, TrUserData) ->\n    dfp_read_field_def_echo_status(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t\t   TrUserData).\n\nskip_length_delimited_echo_status(<<1:1, X:7,\n\t\t\t\t    Rest/binary>>,\n\t\t\t\t  N, Acc, F@_1, F@_2, TrUserData)\n    when N < 57 ->\n    skip_length_delimited_echo_status(Rest, N + 7,\n\t\t\t\t      X bsl N + Acc, F@_1, F@_2, TrUserData);\nskip_length_delimited_echo_status(<<0:1, X:7,\n\t\t\t\t    Rest/binary>>,\n\t\t\t\t  N, Acc, F@_1, F@_2, TrUserData) ->\n    Length = X bsl N + Acc,\n    <<_:Length/binary, Rest2/binary>> = Rest,\n    dfp_read_field_def_echo_status(Rest2, 0, 0, F@_1, F@_2,\n\t\t\t\t   TrUserData).\n\nskip_group_echo_status(Bin, FNum, Z2, F@_1, F@_2,\n\t\t       TrUserData) ->\n    {_, Rest} = read_group(Bin, FNum),\n    dfp_read_field_def_echo_status(Rest, 0, Z2, F@_1, F@_2,\n\t\t\t\t   TrUserData).\n\nskip_32_echo_status(<<_:32, Rest/binary>>, Z1, Z2, F@_1,\n\t\t    F@_2, TrUserData) ->\n    dfp_read_field_def_echo_status(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t\t   TrUserData).\n\nskip_64_echo_status(<<_:64, Rest/binary>>, Z1, Z2, F@_1,\n\t\t    F@_2, TrUserData) ->\n    dfp_read_field_def_echo_status(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t\t   TrUserData).\n\ndecode_msg_simple_request(Bin, TrUserData) ->\n    dfp_read_field_def_simple_request(Bin, 0, 0,\n\t\t\t\t      id('COMPRESSABLE', TrUserData),\n\t\t\t\t      id(0, TrUserData),\n\t\t\t\t      id('$undef', TrUserData),\n\t\t\t\t      id(false, TrUserData),\n\t\t\t\t      id(false, TrUserData),\n\t\t\t\t      id('$undef', TrUserData),\n\t\t\t\t      id('$undef', TrUserData),\n\t\t\t\t      id('$undef', TrUserData), TrUserData).\n\ndfp_read_field_def_simple_request(<<8, Rest/binary>>,\n\t\t\t\t  Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t  F@_7, F@_8, TrUserData) ->\n    d_field_simple_request_response_type(Rest, Z1, Z2, F@_1,\n\t\t\t\t\t F@_2, F@_3, F@_4, F@_5, F@_6, F@_7,\n\t\t\t\t\t F@_8, TrUserData);\ndfp_read_field_def_simple_request(<<16, Rest/binary>>,\n\t\t\t\t  Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t  F@_7, F@_8, TrUserData) ->\n    d_field_simple_request_response_size(Rest, Z1, Z2, F@_1,\n\t\t\t\t\t F@_2, F@_3, F@_4, F@_5, F@_6, F@_7,\n\t\t\t\t\t F@_8, TrUserData);\ndfp_read_field_def_simple_request(<<26, Rest/binary>>,\n\t\t\t\t  Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t  F@_7, F@_8, TrUserData) ->\n    d_field_simple_request_payload(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t\t   F@_3, F@_4, F@_5, F@_6, F@_7, F@_8,\n\t\t\t\t   TrUserData);\ndfp_read_field_def_simple_request(<<32, Rest/binary>>,\n\t\t\t\t  Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t  F@_7, F@_8, TrUserData) ->\n    d_field_simple_request_fill_username(Rest, Z1, Z2, F@_1,\n\t\t\t\t\t F@_2, F@_3, F@_4, F@_5, F@_6, F@_7,\n\t\t\t\t\t F@_8, TrUserData);\ndfp_read_field_def_simple_request(<<40, Rest/binary>>,\n\t\t\t\t  Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t  F@_7, F@_8, TrUserData) ->\n    d_field_simple_request_fill_oauth_scope(Rest, Z1, Z2,\n\t\t\t\t\t    F@_1, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t\t    F@_7, F@_8, TrUserData);\ndfp_read_field_def_simple_request(<<50, Rest/binary>>,\n\t\t\t\t  Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t  F@_7, F@_8, TrUserData) ->\n    d_field_simple_request_response_compressed(Rest, Z1, Z2,\n\t\t\t\t\t       F@_1, F@_2, F@_3, F@_4, F@_5,\n\t\t\t\t\t       F@_6, F@_7, F@_8, TrUserData);\ndfp_read_field_def_simple_request(<<58, Rest/binary>>,\n\t\t\t\t  Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t  F@_7, F@_8, TrUserData) ->\n    d_field_simple_request_response_status(Rest, Z1, Z2,\n\t\t\t\t\t   F@_1, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t\t   F@_7, F@_8, TrUserData);\ndfp_read_field_def_simple_request(<<66, Rest/binary>>,\n\t\t\t\t  Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t  F@_7, F@_8, TrUserData) ->\n    d_field_simple_request_expect_compressed(Rest, Z1, Z2,\n\t\t\t\t\t     F@_1, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t\t     F@_7, F@_8, TrUserData);\ndfp_read_field_def_simple_request(<<>>, 0, 0, F@_1,\n\t\t\t\t  F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8,\n\t\t\t\t  _) ->\n    S1 = #{response_type => F@_1, response_size => F@_2,\n\t   fill_username => F@_4, fill_oauth_scope => F@_5},\n    S2 = if F@_3 == '$undef' -> S1;\n\t    true -> S1#{payload => F@_3}\n\t end,\n    S3 = if F@_6 == '$undef' -> S2;\n\t    true -> S2#{response_compressed => F@_6}\n\t end,\n    S4 = if F@_7 == '$undef' -> S3;\n\t    true -> S3#{response_status => F@_7}\n\t end,\n    if F@_8 == '$undef' -> S4;\n       true -> S4#{expect_compressed => F@_8}\n    end;\ndfp_read_field_def_simple_request(Other, Z1, Z2, F@_1,\n\t\t\t\t  F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8,\n\t\t\t\t  TrUserData) ->\n    dg_read_field_def_simple_request(Other, Z1, Z2, F@_1,\n\t\t\t\t     F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8,\n\t\t\t\t     TrUserData).\n\ndg_read_field_def_simple_request(<<1:1, X:7,\n\t\t\t\t   Rest/binary>>,\n\t\t\t\t N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t F@_7, F@_8, TrUserData)\n    when N < 32 - 7 ->\n    dg_read_field_def_simple_request(Rest, N + 7,\n\t\t\t\t     X bsl N + Acc, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t     F@_5, F@_6, F@_7, F@_8, TrUserData);\ndg_read_field_def_simple_request(<<0:1, X:7,\n\t\t\t\t   Rest/binary>>,\n\t\t\t\t N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t F@_7, F@_8, TrUserData) ->\n    Key = X bsl N + Acc,\n    case Key of\n      8 ->\n\t  d_field_simple_request_response_type(Rest, 0, 0, F@_1,\n\t\t\t\t\t       F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t\t       F@_7, F@_8, TrUserData);\n      16 ->\n\t  d_field_simple_request_response_size(Rest, 0, 0, F@_1,\n\t\t\t\t\t       F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t\t       F@_7, F@_8, TrUserData);\n      26 ->\n\t  d_field_simple_request_payload(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t\t F@_3, F@_4, F@_5, F@_6, F@_7, F@_8,\n\t\t\t\t\t TrUserData);\n      32 ->\n\t  d_field_simple_request_fill_username(Rest, 0, 0, F@_1,\n\t\t\t\t\t       F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t\t       F@_7, F@_8, TrUserData);\n      40 ->\n\t  d_field_simple_request_fill_oauth_scope(Rest, 0, 0,\n\t\t\t\t\t\t  F@_1, F@_2, F@_3, F@_4, F@_5,\n\t\t\t\t\t\t  F@_6, F@_7, F@_8, TrUserData);\n      50 ->\n\t  d_field_simple_request_response_compressed(Rest, 0, 0,\n\t\t\t\t\t\t     F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\t\t     F@_5, F@_6, F@_7, F@_8,\n\t\t\t\t\t\t     TrUserData);\n      58 ->\n\t  d_field_simple_request_response_status(Rest, 0, 0, F@_1,\n\t\t\t\t\t\t F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t\t\t F@_7, F@_8, TrUserData);\n      66 ->\n\t  d_field_simple_request_expect_compressed(Rest, 0, 0,\n\t\t\t\t\t\t   F@_1, F@_2, F@_3, F@_4, F@_5,\n\t\t\t\t\t\t   F@_6, F@_7, F@_8,\n\t\t\t\t\t\t   TrUserData);\n      _ ->\n\t  case Key band 7 of\n\t    0 ->\n\t\tskip_varint_simple_request(Rest, 0, 0, F@_1, F@_2, F@_3,\n\t\t\t\t\t   F@_4, F@_5, F@_6, F@_7, F@_8,\n\t\t\t\t\t   TrUserData);\n\t    1 ->\n\t\tskip_64_simple_request(Rest, 0, 0, F@_1, F@_2, F@_3,\n\t\t\t\t       F@_4, F@_5, F@_6, F@_7, F@_8,\n\t\t\t\t       TrUserData);\n\t    2 ->\n\t\tskip_length_delimited_simple_request(Rest, 0, 0, F@_1,\n\t\t\t\t\t\t     F@_2, F@_3, F@_4, F@_5,\n\t\t\t\t\t\t     F@_6, F@_7, F@_8,\n\t\t\t\t\t\t     TrUserData);\n\t    3 ->\n\t\tskip_group_simple_request(Rest, Key bsr 3, 0, F@_1,\n\t\t\t\t\t  F@_2, F@_3, F@_4, F@_5, F@_6, F@_7,\n\t\t\t\t\t  F@_8, TrUserData);\n\t    5 ->\n\t\tskip_32_simple_request(Rest, 0, 0, F@_1, F@_2, F@_3,\n\t\t\t\t       F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData)\n\t  end\n    end;\ndg_read_field_def_simple_request(<<>>, 0, 0, F@_1, F@_2,\n\t\t\t\t F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, _) ->\n    S1 = #{response_type => F@_1, response_size => F@_2,\n\t   fill_username => F@_4, fill_oauth_scope => F@_5},\n    S2 = if F@_3 == '$undef' -> S1;\n\t    true -> S1#{payload => F@_3}\n\t end,\n    S3 = if F@_6 == '$undef' -> S2;\n\t    true -> S2#{response_compressed => F@_6}\n\t end,\n    S4 = if F@_7 == '$undef' -> S3;\n\t    true -> S3#{response_status => F@_7}\n\t end,\n    if F@_8 == '$undef' -> S4;\n       true -> S4#{expect_compressed => F@_8}\n    end.\n\nd_field_simple_request_response_type(<<1:1, X:7,\n\t\t\t\t       Rest/binary>>,\n\t\t\t\t     N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t     F@_7, F@_8, TrUserData)\n    when N < 57 ->\n    d_field_simple_request_response_type(Rest, N + 7,\n\t\t\t\t\t X bsl N + Acc, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\t F@_5, F@_6, F@_7, F@_8, TrUserData);\nd_field_simple_request_response_type(<<0:1, X:7,\n\t\t\t\t       Rest/binary>>,\n\t\t\t\t     N, Acc, _, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t     F@_7, F@_8, TrUserData) ->\n    {NewFValue, RestF} =\n\t{id('d_enum_grpc.testing.PayloadType'(begin\n\t\t\t\t\t\t<<Res:32/signed-native>> = <<(X\n\t\t\t\t\t\t\t\t\t\tbsl\n\t\t\t\t\t\t\t\t\t\tN\n\t\t\t\t\t\t\t\t\t\t+\n\t\t\t\t\t\t\t\t\t\tAcc):32/unsigned-native>>,\n\t\t\t\t\t\tid(Res, TrUserData)\n\t\t\t\t\t      end),\n\t    TrUserData),\n\t Rest},\n    dfp_read_field_def_simple_request(RestF, 0, 0,\n\t\t\t\t      NewFValue, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t      F@_7, F@_8, TrUserData).\n\nd_field_simple_request_response_size(<<1:1, X:7,\n\t\t\t\t       Rest/binary>>,\n\t\t\t\t     N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t     F@_7, F@_8, TrUserData)\n    when N < 57 ->\n    d_field_simple_request_response_size(Rest, N + 7,\n\t\t\t\t\t X bsl N + Acc, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\t F@_5, F@_6, F@_7, F@_8, TrUserData);\nd_field_simple_request_response_size(<<0:1, X:7,\n\t\t\t\t       Rest/binary>>,\n\t\t\t\t     N, Acc, F@_1, _, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t     F@_7, F@_8, TrUserData) ->\n    {NewFValue, RestF} = {begin\n\t\t\t    <<Res:32/signed-native>> = <<(X bsl N +\n\t\t\t\t\t\t\t    Acc):32/unsigned-native>>,\n\t\t\t    id(Res, TrUserData)\n\t\t\t  end,\n\t\t\t  Rest},\n    dfp_read_field_def_simple_request(RestF, 0, 0, F@_1,\n\t\t\t\t      NewFValue, F@_3, F@_4, F@_5, F@_6, F@_7,\n\t\t\t\t      F@_8, TrUserData).\n\nd_field_simple_request_payload(<<1:1, X:7,\n\t\t\t\t Rest/binary>>,\n\t\t\t       N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7,\n\t\t\t       F@_8, TrUserData)\n    when N < 57 ->\n    d_field_simple_request_payload(Rest, N + 7,\n\t\t\t\t   X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, F@_5,\n\t\t\t\t   F@_6, F@_7, F@_8, TrUserData);\nd_field_simple_request_payload(<<0:1, X:7,\n\t\t\t\t Rest/binary>>,\n\t\t\t       N, Acc, F@_1, F@_2, Prev, F@_4, F@_5, F@_6, F@_7,\n\t\t\t       F@_8, TrUserData) ->\n    {NewFValue, RestF} = begin\n\t\t\t   Len = X bsl N + Acc,\n\t\t\t   <<Bs:Len/binary, Rest2/binary>> = Rest,\n\t\t\t   {id(decode_msg_payload(Bs, TrUserData), TrUserData),\n\t\t\t    Rest2}\n\t\t\t end,\n    dfp_read_field_def_simple_request(RestF, 0, 0, F@_1,\n\t\t\t\t      F@_2,\n\t\t\t\t      if Prev == '$undef' -> NewFValue;\n\t\t\t\t\t true ->\n\t\t\t\t\t     merge_msg_payload(Prev, NewFValue,\n\t\t\t\t\t\t\t       TrUserData)\n\t\t\t\t      end,\n\t\t\t\t      F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData).\n\nd_field_simple_request_fill_username(<<1:1, X:7,\n\t\t\t\t       Rest/binary>>,\n\t\t\t\t     N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t     F@_7, F@_8, TrUserData)\n    when N < 57 ->\n    d_field_simple_request_fill_username(Rest, N + 7,\n\t\t\t\t\t X bsl N + Acc, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\t F@_5, F@_6, F@_7, F@_8, TrUserData);\nd_field_simple_request_fill_username(<<0:1, X:7,\n\t\t\t\t       Rest/binary>>,\n\t\t\t\t     N, Acc, F@_1, F@_2, F@_3, _, F@_5, F@_6,\n\t\t\t\t     F@_7, F@_8, TrUserData) ->\n    {NewFValue, RestF} = {id(X bsl N + Acc =/= 0,\n\t\t\t     TrUserData),\n\t\t\t  Rest},\n    dfp_read_field_def_simple_request(RestF, 0, 0, F@_1,\n\t\t\t\t      F@_2, F@_3, NewFValue, F@_5, F@_6, F@_7,\n\t\t\t\t      F@_8, TrUserData).\n\nd_field_simple_request_fill_oauth_scope(<<1:1, X:7,\n\t\t\t\t\t  Rest/binary>>,\n\t\t\t\t\tN, Acc, F@_1, F@_2, F@_3, F@_4, F@_5,\n\t\t\t\t\tF@_6, F@_7, F@_8, TrUserData)\n    when N < 57 ->\n    d_field_simple_request_fill_oauth_scope(Rest, N + 7,\n\t\t\t\t\t    X bsl N + Acc, F@_1, F@_2, F@_3,\n\t\t\t\t\t    F@_4, F@_5, F@_6, F@_7, F@_8,\n\t\t\t\t\t    TrUserData);\nd_field_simple_request_fill_oauth_scope(<<0:1, X:7,\n\t\t\t\t\t  Rest/binary>>,\n\t\t\t\t\tN, Acc, F@_1, F@_2, F@_3, F@_4, _, F@_6,\n\t\t\t\t\tF@_7, F@_8, TrUserData) ->\n    {NewFValue, RestF} = {id(X bsl N + Acc =/= 0,\n\t\t\t     TrUserData),\n\t\t\t  Rest},\n    dfp_read_field_def_simple_request(RestF, 0, 0, F@_1,\n\t\t\t\t      F@_2, F@_3, F@_4, NewFValue, F@_6, F@_7,\n\t\t\t\t      F@_8, TrUserData).\n\nd_field_simple_request_response_compressed(<<1:1, X:7,\n\t\t\t\t\t     Rest/binary>>,\n\t\t\t\t\t   N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5,\n\t\t\t\t\t   F@_6, F@_7, F@_8, TrUserData)\n    when N < 57 ->\n    d_field_simple_request_response_compressed(Rest, N + 7,\n\t\t\t\t\t       X bsl N + Acc, F@_1, F@_2, F@_3,\n\t\t\t\t\t       F@_4, F@_5, F@_6, F@_7, F@_8,\n\t\t\t\t\t       TrUserData);\nd_field_simple_request_response_compressed(<<0:1, X:7,\n\t\t\t\t\t     Rest/binary>>,\n\t\t\t\t\t   N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5,\n\t\t\t\t\t   Prev, F@_7, F@_8, TrUserData) ->\n    {NewFValue, RestF} = begin\n\t\t\t   Len = X bsl N + Acc,\n\t\t\t   <<Bs:Len/binary, Rest2/binary>> = Rest,\n\t\t\t   {id(decode_msg_bool_value(Bs, TrUserData),\n\t\t\t       TrUserData),\n\t\t\t    Rest2}\n\t\t\t end,\n    dfp_read_field_def_simple_request(RestF, 0, 0, F@_1,\n\t\t\t\t      F@_2, F@_3, F@_4, F@_5,\n\t\t\t\t      if Prev == '$undef' -> NewFValue;\n\t\t\t\t\t true ->\n\t\t\t\t\t     merge_msg_bool_value(Prev,\n\t\t\t\t\t\t\t\t  NewFValue,\n\t\t\t\t\t\t\t\t  TrUserData)\n\t\t\t\t      end,\n\t\t\t\t      F@_7, F@_8, TrUserData).\n\nd_field_simple_request_response_status(<<1:1, X:7,\n\t\t\t\t\t Rest/binary>>,\n\t\t\t\t       N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5,\n\t\t\t\t       F@_6, F@_7, F@_8, TrUserData)\n    when N < 57 ->\n    d_field_simple_request_response_status(Rest, N + 7,\n\t\t\t\t\t   X bsl N + Acc, F@_1, F@_2, F@_3,\n\t\t\t\t\t   F@_4, F@_5, F@_6, F@_7, F@_8,\n\t\t\t\t\t   TrUserData);\nd_field_simple_request_response_status(<<0:1, X:7,\n\t\t\t\t\t Rest/binary>>,\n\t\t\t\t       N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5,\n\t\t\t\t       F@_6, Prev, F@_8, TrUserData) ->\n    {NewFValue, RestF} = begin\n\t\t\t   Len = X bsl N + Acc,\n\t\t\t   <<Bs:Len/binary, Rest2/binary>> = Rest,\n\t\t\t   {id(decode_msg_echo_status(Bs, TrUserData),\n\t\t\t       TrUserData),\n\t\t\t    Rest2}\n\t\t\t end,\n    dfp_read_field_def_simple_request(RestF, 0, 0, F@_1,\n\t\t\t\t      F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t      if Prev == '$undef' -> NewFValue;\n\t\t\t\t\t true ->\n\t\t\t\t\t     merge_msg_echo_status(Prev,\n\t\t\t\t\t\t\t\t   NewFValue,\n\t\t\t\t\t\t\t\t   TrUserData)\n\t\t\t\t      end,\n\t\t\t\t      F@_8, TrUserData).\n\nd_field_simple_request_expect_compressed(<<1:1, X:7,\n\t\t\t\t\t   Rest/binary>>,\n\t\t\t\t\t N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5,\n\t\t\t\t\t F@_6, F@_7, F@_8, TrUserData)\n    when N < 57 ->\n    d_field_simple_request_expect_compressed(Rest, N + 7,\n\t\t\t\t\t     X bsl N + Acc, F@_1, F@_2, F@_3,\n\t\t\t\t\t     F@_4, F@_5, F@_6, F@_7, F@_8,\n\t\t\t\t\t     TrUserData);\nd_field_simple_request_expect_compressed(<<0:1, X:7,\n\t\t\t\t\t   Rest/binary>>,\n\t\t\t\t\t N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5,\n\t\t\t\t\t F@_6, F@_7, Prev, TrUserData) ->\n    {NewFValue, RestF} = begin\n\t\t\t   Len = X bsl N + Acc,\n\t\t\t   <<Bs:Len/binary, Rest2/binary>> = Rest,\n\t\t\t   {id(decode_msg_bool_value(Bs, TrUserData),\n\t\t\t       TrUserData),\n\t\t\t    Rest2}\n\t\t\t end,\n    dfp_read_field_def_simple_request(RestF, 0, 0, F@_1,\n\t\t\t\t      F@_2, F@_3, F@_4, F@_5, F@_6, F@_7,\n\t\t\t\t      if Prev == '$undef' -> NewFValue;\n\t\t\t\t\t true ->\n\t\t\t\t\t     merge_msg_bool_value(Prev,\n\t\t\t\t\t\t\t\t  NewFValue,\n\t\t\t\t\t\t\t\t  TrUserData)\n\t\t\t\t      end,\n\t\t\t\t      TrUserData).\n\nskip_varint_simple_request(<<1:1, _:7, Rest/binary>>,\n\t\t\t   Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7,\n\t\t\t   F@_8, TrUserData) ->\n    skip_varint_simple_request(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t       F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData);\nskip_varint_simple_request(<<0:1, _:7, Rest/binary>>,\n\t\t\t   Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7,\n\t\t\t   F@_8, TrUserData) ->\n    dfp_read_field_def_simple_request(Rest, Z1, Z2, F@_1,\n\t\t\t\t      F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8,\n\t\t\t\t      TrUserData).\n\nskip_length_delimited_simple_request(<<1:1, X:7,\n\t\t\t\t       Rest/binary>>,\n\t\t\t\t     N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t     F@_7, F@_8, TrUserData)\n    when N < 57 ->\n    skip_length_delimited_simple_request(Rest, N + 7,\n\t\t\t\t\t X bsl N + Acc, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\t F@_5, F@_6, F@_7, F@_8, TrUserData);\nskip_length_delimited_simple_request(<<0:1, X:7,\n\t\t\t\t       Rest/binary>>,\n\t\t\t\t     N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t     F@_7, F@_8, TrUserData) ->\n    Length = X bsl N + Acc,\n    <<_:Length/binary, Rest2/binary>> = Rest,\n    dfp_read_field_def_simple_request(Rest2, 0, 0, F@_1,\n\t\t\t\t      F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8,\n\t\t\t\t      TrUserData).\n\nskip_group_simple_request(Bin, FNum, Z2, F@_1, F@_2,\n\t\t\t  F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) ->\n    {_, Rest} = read_group(Bin, FNum),\n    dfp_read_field_def_simple_request(Rest, 0, Z2, F@_1,\n\t\t\t\t      F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8,\n\t\t\t\t      TrUserData).\n\nskip_32_simple_request(<<_:32, Rest/binary>>, Z1, Z2,\n\t\t       F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8,\n\t\t       TrUserData) ->\n    dfp_read_field_def_simple_request(Rest, Z1, Z2, F@_1,\n\t\t\t\t      F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8,\n\t\t\t\t      TrUserData).\n\nskip_64_simple_request(<<_:64, Rest/binary>>, Z1, Z2,\n\t\t       F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8,\n\t\t       TrUserData) ->\n    dfp_read_field_def_simple_request(Rest, Z1, Z2, F@_1,\n\t\t\t\t      F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8,\n\t\t\t\t      TrUserData).\n\ndecode_msg_simple_response(Bin, TrUserData) ->\n    dfp_read_field_def_simple_response(Bin, 0, 0,\n\t\t\t\t       id('$undef', TrUserData),\n\t\t\t\t       id(<<>>, TrUserData),\n\t\t\t\t       id(<<>>, TrUserData), TrUserData).\n\ndfp_read_field_def_simple_response(<<10, Rest/binary>>,\n\t\t\t\t   Z1, Z2, F@_1, F@_2, F@_3, TrUserData) ->\n    d_field_simple_response_payload(Rest, Z1, Z2, F@_1,\n\t\t\t\t    F@_2, F@_3, TrUserData);\ndfp_read_field_def_simple_response(<<18, Rest/binary>>,\n\t\t\t\t   Z1, Z2, F@_1, F@_2, F@_3, TrUserData) ->\n    d_field_simple_response_username(Rest, Z1, Z2, F@_1,\n\t\t\t\t     F@_2, F@_3, TrUserData);\ndfp_read_field_def_simple_response(<<26, Rest/binary>>,\n\t\t\t\t   Z1, Z2, F@_1, F@_2, F@_3, TrUserData) ->\n    d_field_simple_response_oauth_scope(Rest, Z1, Z2, F@_1,\n\t\t\t\t\tF@_2, F@_3, TrUserData);\ndfp_read_field_def_simple_response(<<>>, 0, 0, F@_1,\n\t\t\t\t   F@_2, F@_3, _) ->\n    S1 = #{username => F@_2, oauth_scope => F@_3},\n    if F@_1 == '$undef' -> S1;\n       true -> S1#{payload => F@_1}\n    end;\ndfp_read_field_def_simple_response(Other, Z1, Z2, F@_1,\n\t\t\t\t   F@_2, F@_3, TrUserData) ->\n    dg_read_field_def_simple_response(Other, Z1, Z2, F@_1,\n\t\t\t\t      F@_2, F@_3, TrUserData).\n\ndg_read_field_def_simple_response(<<1:1, X:7,\n\t\t\t\t    Rest/binary>>,\n\t\t\t\t  N, Acc, F@_1, F@_2, F@_3, TrUserData)\n    when N < 32 - 7 ->\n    dg_read_field_def_simple_response(Rest, N + 7,\n\t\t\t\t      X bsl N + Acc, F@_1, F@_2, F@_3,\n\t\t\t\t      TrUserData);\ndg_read_field_def_simple_response(<<0:1, X:7,\n\t\t\t\t    Rest/binary>>,\n\t\t\t\t  N, Acc, F@_1, F@_2, F@_3, TrUserData) ->\n    Key = X bsl N + Acc,\n    case Key of\n      10 ->\n\t  d_field_simple_response_payload(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t\t  F@_3, TrUserData);\n      18 ->\n\t  d_field_simple_response_username(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t\t   F@_3, TrUserData);\n      26 ->\n\t  d_field_simple_response_oauth_scope(Rest, 0, 0, F@_1,\n\t\t\t\t\t      F@_2, F@_3, TrUserData);\n      _ ->\n\t  case Key band 7 of\n\t    0 ->\n\t\tskip_varint_simple_response(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t\t    F@_3, TrUserData);\n\t    1 ->\n\t\tskip_64_simple_response(Rest, 0, 0, F@_1, F@_2, F@_3,\n\t\t\t\t\tTrUserData);\n\t    2 ->\n\t\tskip_length_delimited_simple_response(Rest, 0, 0, F@_1,\n\t\t\t\t\t\t      F@_2, F@_3, TrUserData);\n\t    3 ->\n\t\tskip_group_simple_response(Rest, Key bsr 3, 0, F@_1,\n\t\t\t\t\t   F@_2, F@_3, TrUserData);\n\t    5 ->\n\t\tskip_32_simple_response(Rest, 0, 0, F@_1, F@_2, F@_3,\n\t\t\t\t\tTrUserData)\n\t  end\n    end;\ndg_read_field_def_simple_response(<<>>, 0, 0, F@_1,\n\t\t\t\t  F@_2, F@_3, _) ->\n    S1 = #{username => F@_2, oauth_scope => F@_3},\n    if F@_1 == '$undef' -> S1;\n       true -> S1#{payload => F@_1}\n    end.\n\nd_field_simple_response_payload(<<1:1, X:7,\n\t\t\t\t  Rest/binary>>,\n\t\t\t\tN, Acc, F@_1, F@_2, F@_3, TrUserData)\n    when N < 57 ->\n    d_field_simple_response_payload(Rest, N + 7,\n\t\t\t\t    X bsl N + Acc, F@_1, F@_2, F@_3,\n\t\t\t\t    TrUserData);\nd_field_simple_response_payload(<<0:1, X:7,\n\t\t\t\t  Rest/binary>>,\n\t\t\t\tN, Acc, Prev, F@_2, F@_3, TrUserData) ->\n    {NewFValue, RestF} = begin\n\t\t\t   Len = X bsl N + Acc,\n\t\t\t   <<Bs:Len/binary, Rest2/binary>> = Rest,\n\t\t\t   {id(decode_msg_payload(Bs, TrUserData), TrUserData),\n\t\t\t    Rest2}\n\t\t\t end,\n    dfp_read_field_def_simple_response(RestF, 0, 0,\n\t\t\t\t       if Prev == '$undef' -> NewFValue;\n\t\t\t\t\t  true ->\n\t\t\t\t\t      merge_msg_payload(Prev, NewFValue,\n\t\t\t\t\t\t\t\tTrUserData)\n\t\t\t\t       end,\n\t\t\t\t       F@_2, F@_3, TrUserData).\n\nd_field_simple_response_username(<<1:1, X:7,\n\t\t\t\t   Rest/binary>>,\n\t\t\t\t N, Acc, F@_1, F@_2, F@_3, TrUserData)\n    when N < 57 ->\n    d_field_simple_response_username(Rest, N + 7,\n\t\t\t\t     X bsl N + Acc, F@_1, F@_2, F@_3,\n\t\t\t\t     TrUserData);\nd_field_simple_response_username(<<0:1, X:7,\n\t\t\t\t   Rest/binary>>,\n\t\t\t\t N, Acc, F@_1, _, F@_3, TrUserData) ->\n    {NewFValue, RestF} = begin\n\t\t\t   Len = X bsl N + Acc,\n\t\t\t   <<Bytes:Len/binary, Rest2/binary>> = Rest,\n\t\t\t   {id(binary:copy(Bytes), TrUserData), Rest2}\n\t\t\t end,\n    dfp_read_field_def_simple_response(RestF, 0, 0, F@_1,\n\t\t\t\t       NewFValue, F@_3, TrUserData).\n\nd_field_simple_response_oauth_scope(<<1:1, X:7,\n\t\t\t\t      Rest/binary>>,\n\t\t\t\t    N, Acc, F@_1, F@_2, F@_3, TrUserData)\n    when N < 57 ->\n    d_field_simple_response_oauth_scope(Rest, N + 7,\n\t\t\t\t\tX bsl N + Acc, F@_1, F@_2, F@_3,\n\t\t\t\t\tTrUserData);\nd_field_simple_response_oauth_scope(<<0:1, X:7,\n\t\t\t\t      Rest/binary>>,\n\t\t\t\t    N, Acc, F@_1, F@_2, _, TrUserData) ->\n    {NewFValue, RestF} = begin\n\t\t\t   Len = X bsl N + Acc,\n\t\t\t   <<Bytes:Len/binary, Rest2/binary>> = Rest,\n\t\t\t   {id(binary:copy(Bytes), TrUserData), Rest2}\n\t\t\t end,\n    dfp_read_field_def_simple_response(RestF, 0, 0, F@_1,\n\t\t\t\t       F@_2, NewFValue, TrUserData).\n\nskip_varint_simple_response(<<1:1, _:7, Rest/binary>>,\n\t\t\t    Z1, Z2, F@_1, F@_2, F@_3, TrUserData) ->\n    skip_varint_simple_response(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t\tF@_3, TrUserData);\nskip_varint_simple_response(<<0:1, _:7, Rest/binary>>,\n\t\t\t    Z1, Z2, F@_1, F@_2, F@_3, TrUserData) ->\n    dfp_read_field_def_simple_response(Rest, Z1, Z2, F@_1,\n\t\t\t\t       F@_2, F@_3, TrUserData).\n\nskip_length_delimited_simple_response(<<1:1, X:7,\n\t\t\t\t\tRest/binary>>,\n\t\t\t\t      N, Acc, F@_1, F@_2, F@_3, TrUserData)\n    when N < 57 ->\n    skip_length_delimited_simple_response(Rest, N + 7,\n\t\t\t\t\t  X bsl N + Acc, F@_1, F@_2, F@_3,\n\t\t\t\t\t  TrUserData);\nskip_length_delimited_simple_response(<<0:1, X:7,\n\t\t\t\t\tRest/binary>>,\n\t\t\t\t      N, Acc, F@_1, F@_2, F@_3, TrUserData) ->\n    Length = X bsl N + Acc,\n    <<_:Length/binary, Rest2/binary>> = Rest,\n    dfp_read_field_def_simple_response(Rest2, 0, 0, F@_1,\n\t\t\t\t       F@_2, F@_3, TrUserData).\n\nskip_group_simple_response(Bin, FNum, Z2, F@_1, F@_2,\n\t\t\t   F@_3, TrUserData) ->\n    {_, Rest} = read_group(Bin, FNum),\n    dfp_read_field_def_simple_response(Rest, 0, Z2, F@_1,\n\t\t\t\t       F@_2, F@_3, TrUserData).\n\nskip_32_simple_response(<<_:32, Rest/binary>>, Z1, Z2,\n\t\t\tF@_1, F@_2, F@_3, TrUserData) ->\n    dfp_read_field_def_simple_response(Rest, Z1, Z2, F@_1,\n\t\t\t\t       F@_2, F@_3, TrUserData).\n\nskip_64_simple_response(<<_:64, Rest/binary>>, Z1, Z2,\n\t\t\tF@_1, F@_2, F@_3, TrUserData) ->\n    dfp_read_field_def_simple_response(Rest, Z1, Z2, F@_1,\n\t\t\t\t       F@_2, F@_3, TrUserData).\n\ndecode_msg_streaming_input_call_request(Bin,\n\t\t\t\t\tTrUserData) ->\n    dfp_read_field_def_streaming_input_call_request(Bin, 0,\n\t\t\t\t\t\t    0, id('$undef', TrUserData),\n\t\t\t\t\t\t    id('$undef', TrUserData),\n\t\t\t\t\t\t    TrUserData).\n\ndfp_read_field_def_streaming_input_call_request(<<10,\n\t\t\t\t\t\t  Rest/binary>>,\n\t\t\t\t\t\tZ1, Z2, F@_1, F@_2,\n\t\t\t\t\t\tTrUserData) ->\n    d_field_streaming_input_call_request_payload(Rest, Z1,\n\t\t\t\t\t\t Z2, F@_1, F@_2, TrUserData);\ndfp_read_field_def_streaming_input_call_request(<<18,\n\t\t\t\t\t\t  Rest/binary>>,\n\t\t\t\t\t\tZ1, Z2, F@_1, F@_2,\n\t\t\t\t\t\tTrUserData) ->\n    d_field_streaming_input_call_request_expect_compressed(Rest,\n\t\t\t\t\t\t\t   Z1, Z2, F@_1, F@_2,\n\t\t\t\t\t\t\t   TrUserData);\ndfp_read_field_def_streaming_input_call_request(<<>>, 0,\n\t\t\t\t\t\t0, F@_1, F@_2, _) ->\n    S1 = #{},\n    S2 = if F@_1 == '$undef' -> S1;\n\t    true -> S1#{payload => F@_1}\n\t end,\n    if F@_2 == '$undef' -> S2;\n       true -> S2#{expect_compressed => F@_2}\n    end;\ndfp_read_field_def_streaming_input_call_request(Other,\n\t\t\t\t\t\tZ1, Z2, F@_1, F@_2,\n\t\t\t\t\t\tTrUserData) ->\n    dg_read_field_def_streaming_input_call_request(Other,\n\t\t\t\t\t\t   Z1, Z2, F@_1, F@_2,\n\t\t\t\t\t\t   TrUserData).\n\ndg_read_field_def_streaming_input_call_request(<<1:1,\n\t\t\t\t\t\t X:7, Rest/binary>>,\n\t\t\t\t\t       N, Acc, F@_1, F@_2, TrUserData)\n    when N < 32 - 7 ->\n    dg_read_field_def_streaming_input_call_request(Rest,\n\t\t\t\t\t\t   N + 7, X bsl N + Acc, F@_1,\n\t\t\t\t\t\t   F@_2, TrUserData);\ndg_read_field_def_streaming_input_call_request(<<0:1,\n\t\t\t\t\t\t X:7, Rest/binary>>,\n\t\t\t\t\t       N, Acc, F@_1, F@_2,\n\t\t\t\t\t       TrUserData) ->\n    Key = X bsl N + Acc,\n    case Key of\n      10 ->\n\t  d_field_streaming_input_call_request_payload(Rest, 0, 0,\n\t\t\t\t\t\t       F@_1, F@_2, TrUserData);\n      18 ->\n\t  d_field_streaming_input_call_request_expect_compressed(Rest,\n\t\t\t\t\t\t\t\t 0, 0, F@_1,\n\t\t\t\t\t\t\t\t F@_2,\n\t\t\t\t\t\t\t\t TrUserData);\n      _ ->\n\t  case Key band 7 of\n\t    0 ->\n\t\tskip_varint_streaming_input_call_request(Rest, 0, 0,\n\t\t\t\t\t\t\t F@_1, F@_2,\n\t\t\t\t\t\t\t TrUserData);\n\t    1 ->\n\t\tskip_64_streaming_input_call_request(Rest, 0, 0, F@_1,\n\t\t\t\t\t\t     F@_2, TrUserData);\n\t    2 ->\n\t\tskip_length_delimited_streaming_input_call_request(Rest,\n\t\t\t\t\t\t\t\t   0, 0, F@_1,\n\t\t\t\t\t\t\t\t   F@_2,\n\t\t\t\t\t\t\t\t   TrUserData);\n\t    3 ->\n\t\tskip_group_streaming_input_call_request(Rest, Key bsr 3,\n\t\t\t\t\t\t\t0, F@_1, F@_2,\n\t\t\t\t\t\t\tTrUserData);\n\t    5 ->\n\t\tskip_32_streaming_input_call_request(Rest, 0, 0, F@_1,\n\t\t\t\t\t\t     F@_2, TrUserData)\n\t  end\n    end;\ndg_read_field_def_streaming_input_call_request(<<>>, 0,\n\t\t\t\t\t       0, F@_1, F@_2, _) ->\n    S1 = #{},\n    S2 = if F@_1 == '$undef' -> S1;\n\t    true -> S1#{payload => F@_1}\n\t end,\n    if F@_2 == '$undef' -> S2;\n       true -> S2#{expect_compressed => F@_2}\n    end.\n\nd_field_streaming_input_call_request_payload(<<1:1, X:7,\n\t\t\t\t\t       Rest/binary>>,\n\t\t\t\t\t     N, Acc, F@_1, F@_2, TrUserData)\n    when N < 57 ->\n    d_field_streaming_input_call_request_payload(Rest,\n\t\t\t\t\t\t N + 7, X bsl N + Acc, F@_1,\n\t\t\t\t\t\t F@_2, TrUserData);\nd_field_streaming_input_call_request_payload(<<0:1, X:7,\n\t\t\t\t\t       Rest/binary>>,\n\t\t\t\t\t     N, Acc, Prev, F@_2, TrUserData) ->\n    {NewFValue, RestF} = begin\n\t\t\t   Len = X bsl N + Acc,\n\t\t\t   <<Bs:Len/binary, Rest2/binary>> = Rest,\n\t\t\t   {id(decode_msg_payload(Bs, TrUserData), TrUserData),\n\t\t\t    Rest2}\n\t\t\t end,\n    dfp_read_field_def_streaming_input_call_request(RestF,\n\t\t\t\t\t\t    0, 0,\n\t\t\t\t\t\t    if Prev == '$undef' ->\n\t\t\t\t\t\t\t   NewFValue;\n\t\t\t\t\t\t       true ->\n\t\t\t\t\t\t\t   merge_msg_payload(Prev,\n\t\t\t\t\t\t\t\t\t     NewFValue,\n\t\t\t\t\t\t\t\t\t     TrUserData)\n\t\t\t\t\t\t    end,\n\t\t\t\t\t\t    F@_2, TrUserData).\n\nd_field_streaming_input_call_request_expect_compressed(<<1:1,\n\t\t\t\t\t\t\t X:7, Rest/binary>>,\n\t\t\t\t\t\t       N, Acc, F@_1, F@_2,\n\t\t\t\t\t\t       TrUserData)\n    when N < 57 ->\n    d_field_streaming_input_call_request_expect_compressed(Rest,\n\t\t\t\t\t\t\t   N + 7, X bsl N + Acc,\n\t\t\t\t\t\t\t   F@_1, F@_2,\n\t\t\t\t\t\t\t   TrUserData);\nd_field_streaming_input_call_request_expect_compressed(<<0:1,\n\t\t\t\t\t\t\t X:7, Rest/binary>>,\n\t\t\t\t\t\t       N, Acc, F@_1, Prev,\n\t\t\t\t\t\t       TrUserData) ->\n    {NewFValue, RestF} = begin\n\t\t\t   Len = X bsl N + Acc,\n\t\t\t   <<Bs:Len/binary, Rest2/binary>> = Rest,\n\t\t\t   {id(decode_msg_bool_value(Bs, TrUserData),\n\t\t\t       TrUserData),\n\t\t\t    Rest2}\n\t\t\t end,\n    dfp_read_field_def_streaming_input_call_request(RestF,\n\t\t\t\t\t\t    0, 0, F@_1,\n\t\t\t\t\t\t    if Prev == '$undef' ->\n\t\t\t\t\t\t\t   NewFValue;\n\t\t\t\t\t\t       true ->\n\t\t\t\t\t\t\t   merge_msg_bool_value(Prev,\n\t\t\t\t\t\t\t\t\t\tNewFValue,\n\t\t\t\t\t\t\t\t\t\tTrUserData)\n\t\t\t\t\t\t    end,\n\t\t\t\t\t\t    TrUserData).\n\nskip_varint_streaming_input_call_request(<<1:1, _:7,\n\t\t\t\t\t   Rest/binary>>,\n\t\t\t\t\t Z1, Z2, F@_1, F@_2, TrUserData) ->\n    skip_varint_streaming_input_call_request(Rest, Z1, Z2,\n\t\t\t\t\t     F@_1, F@_2, TrUserData);\nskip_varint_streaming_input_call_request(<<0:1, _:7,\n\t\t\t\t\t   Rest/binary>>,\n\t\t\t\t\t Z1, Z2, F@_1, F@_2, TrUserData) ->\n    dfp_read_field_def_streaming_input_call_request(Rest,\n\t\t\t\t\t\t    Z1, Z2, F@_1, F@_2,\n\t\t\t\t\t\t    TrUserData).\n\nskip_length_delimited_streaming_input_call_request(<<1:1,\n\t\t\t\t\t\t     X:7, Rest/binary>>,\n\t\t\t\t\t\t   N, Acc, F@_1, F@_2,\n\t\t\t\t\t\t   TrUserData)\n    when N < 57 ->\n    skip_length_delimited_streaming_input_call_request(Rest,\n\t\t\t\t\t\t       N + 7, X bsl N + Acc,\n\t\t\t\t\t\t       F@_1, F@_2, TrUserData);\nskip_length_delimited_streaming_input_call_request(<<0:1,\n\t\t\t\t\t\t     X:7, Rest/binary>>,\n\t\t\t\t\t\t   N, Acc, F@_1, F@_2,\n\t\t\t\t\t\t   TrUserData) ->\n    Length = X bsl N + Acc,\n    <<_:Length/binary, Rest2/binary>> = Rest,\n    dfp_read_field_def_streaming_input_call_request(Rest2,\n\t\t\t\t\t\t    0, 0, F@_1, F@_2,\n\t\t\t\t\t\t    TrUserData).\n\nskip_group_streaming_input_call_request(Bin, FNum, Z2,\n\t\t\t\t\tF@_1, F@_2, TrUserData) ->\n    {_, Rest} = read_group(Bin, FNum),\n    dfp_read_field_def_streaming_input_call_request(Rest, 0,\n\t\t\t\t\t\t    Z2, F@_1, F@_2, TrUserData).\n\nskip_32_streaming_input_call_request(<<_:32,\n\t\t\t\t       Rest/binary>>,\n\t\t\t\t     Z1, Z2, F@_1, F@_2, TrUserData) ->\n    dfp_read_field_def_streaming_input_call_request(Rest,\n\t\t\t\t\t\t    Z1, Z2, F@_1, F@_2,\n\t\t\t\t\t\t    TrUserData).\n\nskip_64_streaming_input_call_request(<<_:64,\n\t\t\t\t       Rest/binary>>,\n\t\t\t\t     Z1, Z2, F@_1, F@_2, TrUserData) ->\n    dfp_read_field_def_streaming_input_call_request(Rest,\n\t\t\t\t\t\t    Z1, Z2, F@_1, F@_2,\n\t\t\t\t\t\t    TrUserData).\n\ndecode_msg_streaming_input_call_response(Bin,\n\t\t\t\t\t TrUserData) ->\n    dfp_read_field_def_streaming_input_call_response(Bin, 0,\n\t\t\t\t\t\t     0, id(0, TrUserData),\n\t\t\t\t\t\t     TrUserData).\n\ndfp_read_field_def_streaming_input_call_response(<<8,\n\t\t\t\t\t\t   Rest/binary>>,\n\t\t\t\t\t\t Z1, Z2, F@_1, TrUserData) ->\n    d_field_streaming_input_call_response_aggregated_payload_size(Rest,\n\t\t\t\t\t\t\t\t  Z1, Z2, F@_1,\n\t\t\t\t\t\t\t\t  TrUserData);\ndfp_read_field_def_streaming_input_call_response(<<>>,\n\t\t\t\t\t\t 0, 0, F@_1, _) ->\n    #{aggregated_payload_size => F@_1};\ndfp_read_field_def_streaming_input_call_response(Other,\n\t\t\t\t\t\t Z1, Z2, F@_1, TrUserData) ->\n    dg_read_field_def_streaming_input_call_response(Other,\n\t\t\t\t\t\t    Z1, Z2, F@_1, TrUserData).\n\ndg_read_field_def_streaming_input_call_response(<<1:1,\n\t\t\t\t\t\t  X:7, Rest/binary>>,\n\t\t\t\t\t\tN, Acc, F@_1, TrUserData)\n    when N < 32 - 7 ->\n    dg_read_field_def_streaming_input_call_response(Rest,\n\t\t\t\t\t\t    N + 7, X bsl N + Acc, F@_1,\n\t\t\t\t\t\t    TrUserData);\ndg_read_field_def_streaming_input_call_response(<<0:1,\n\t\t\t\t\t\t  X:7, Rest/binary>>,\n\t\t\t\t\t\tN, Acc, F@_1, TrUserData) ->\n    Key = X bsl N + Acc,\n    case Key of\n      8 ->\n\t  d_field_streaming_input_call_response_aggregated_payload_size(Rest,\n\t\t\t\t\t\t\t\t\t0, 0,\n\t\t\t\t\t\t\t\t\tF@_1,\n\t\t\t\t\t\t\t\t\tTrUserData);\n      _ ->\n\t  case Key band 7 of\n\t    0 ->\n\t\tskip_varint_streaming_input_call_response(Rest, 0, 0,\n\t\t\t\t\t\t\t  F@_1, TrUserData);\n\t    1 ->\n\t\tskip_64_streaming_input_call_response(Rest, 0, 0, F@_1,\n\t\t\t\t\t\t      TrUserData);\n\t    2 ->\n\t\tskip_length_delimited_streaming_input_call_response(Rest,\n\t\t\t\t\t\t\t\t    0, 0, F@_1,\n\t\t\t\t\t\t\t\t    TrUserData);\n\t    3 ->\n\t\tskip_group_streaming_input_call_response(Rest,\n\t\t\t\t\t\t\t Key bsr 3, 0, F@_1,\n\t\t\t\t\t\t\t TrUserData);\n\t    5 ->\n\t\tskip_32_streaming_input_call_response(Rest, 0, 0, F@_1,\n\t\t\t\t\t\t      TrUserData)\n\t  end\n    end;\ndg_read_field_def_streaming_input_call_response(<<>>, 0,\n\t\t\t\t\t\t0, F@_1, _) ->\n    #{aggregated_payload_size => F@_1}.\n\nd_field_streaming_input_call_response_aggregated_payload_size(<<1:1,\n\t\t\t\t\t\t\t\tX:7,\n\t\t\t\t\t\t\t\tRest/binary>>,\n\t\t\t\t\t\t\t      N, Acc, F@_1,\n\t\t\t\t\t\t\t      TrUserData)\n    when N < 57 ->\n    d_field_streaming_input_call_response_aggregated_payload_size(Rest,\n\t\t\t\t\t\t\t\t  N + 7,\n\t\t\t\t\t\t\t\t  X bsl N + Acc,\n\t\t\t\t\t\t\t\t  F@_1,\n\t\t\t\t\t\t\t\t  TrUserData);\nd_field_streaming_input_call_response_aggregated_payload_size(<<0:1,\n\t\t\t\t\t\t\t\tX:7,\n\t\t\t\t\t\t\t\tRest/binary>>,\n\t\t\t\t\t\t\t      N, Acc, _,\n\t\t\t\t\t\t\t      TrUserData) ->\n    {NewFValue, RestF} = {begin\n\t\t\t    <<Res:32/signed-native>> = <<(X bsl N +\n\t\t\t\t\t\t\t    Acc):32/unsigned-native>>,\n\t\t\t    id(Res, TrUserData)\n\t\t\t  end,\n\t\t\t  Rest},\n    dfp_read_field_def_streaming_input_call_response(RestF,\n\t\t\t\t\t\t     0, 0, NewFValue,\n\t\t\t\t\t\t     TrUserData).\n\nskip_varint_streaming_input_call_response(<<1:1, _:7,\n\t\t\t\t\t    Rest/binary>>,\n\t\t\t\t\t  Z1, Z2, F@_1, TrUserData) ->\n    skip_varint_streaming_input_call_response(Rest, Z1, Z2,\n\t\t\t\t\t      F@_1, TrUserData);\nskip_varint_streaming_input_call_response(<<0:1, _:7,\n\t\t\t\t\t    Rest/binary>>,\n\t\t\t\t\t  Z1, Z2, F@_1, TrUserData) ->\n    dfp_read_field_def_streaming_input_call_response(Rest,\n\t\t\t\t\t\t     Z1, Z2, F@_1, TrUserData).\n\nskip_length_delimited_streaming_input_call_response(<<1:1,\n\t\t\t\t\t\t      X:7, Rest/binary>>,\n\t\t\t\t\t\t    N, Acc, F@_1, TrUserData)\n    when N < 57 ->\n    skip_length_delimited_streaming_input_call_response(Rest,\n\t\t\t\t\t\t\tN + 7, X bsl N + Acc,\n\t\t\t\t\t\t\tF@_1, TrUserData);\nskip_length_delimited_streaming_input_call_response(<<0:1,\n\t\t\t\t\t\t      X:7, Rest/binary>>,\n\t\t\t\t\t\t    N, Acc, F@_1, TrUserData) ->\n    Length = X bsl N + Acc,\n    <<_:Length/binary, Rest2/binary>> = Rest,\n    dfp_read_field_def_streaming_input_call_response(Rest2,\n\t\t\t\t\t\t     0, 0, F@_1, TrUserData).\n\nskip_group_streaming_input_call_response(Bin, FNum, Z2,\n\t\t\t\t\t F@_1, TrUserData) ->\n    {_, Rest} = read_group(Bin, FNum),\n    dfp_read_field_def_streaming_input_call_response(Rest,\n\t\t\t\t\t\t     0, Z2, F@_1, TrUserData).\n\nskip_32_streaming_input_call_response(<<_:32,\n\t\t\t\t\tRest/binary>>,\n\t\t\t\t      Z1, Z2, F@_1, TrUserData) ->\n    dfp_read_field_def_streaming_input_call_response(Rest,\n\t\t\t\t\t\t     Z1, Z2, F@_1, TrUserData).\n\nskip_64_streaming_input_call_response(<<_:64,\n\t\t\t\t\tRest/binary>>,\n\t\t\t\t      Z1, Z2, F@_1, TrUserData) ->\n    dfp_read_field_def_streaming_input_call_response(Rest,\n\t\t\t\t\t\t     Z1, Z2, F@_1, TrUserData).\n\ndecode_msg_response_parameters(Bin, TrUserData) ->\n    dfp_read_field_def_response_parameters(Bin, 0, 0,\n\t\t\t\t\t   id(0, TrUserData), id(0, TrUserData),\n\t\t\t\t\t   id('$undef', TrUserData),\n\t\t\t\t\t   TrUserData).\n\ndfp_read_field_def_response_parameters(<<8,\n\t\t\t\t\t Rest/binary>>,\n\t\t\t\t       Z1, Z2, F@_1, F@_2, F@_3, TrUserData) ->\n    d_field_response_parameters_size(Rest, Z1, Z2, F@_1,\n\t\t\t\t     F@_2, F@_3, TrUserData);\ndfp_read_field_def_response_parameters(<<16,\n\t\t\t\t\t Rest/binary>>,\n\t\t\t\t       Z1, Z2, F@_1, F@_2, F@_3, TrUserData) ->\n    d_field_response_parameters_interval_us(Rest, Z1, Z2,\n\t\t\t\t\t    F@_1, F@_2, F@_3, TrUserData);\ndfp_read_field_def_response_parameters(<<26,\n\t\t\t\t\t Rest/binary>>,\n\t\t\t\t       Z1, Z2, F@_1, F@_2, F@_3, TrUserData) ->\n    d_field_response_parameters_compressed(Rest, Z1, Z2,\n\t\t\t\t\t   F@_1, F@_2, F@_3, TrUserData);\ndfp_read_field_def_response_parameters(<<>>, 0, 0, F@_1,\n\t\t\t\t       F@_2, F@_3, _) ->\n    S1 = #{size => F@_1, interval_us => F@_2},\n    if F@_3 == '$undef' -> S1;\n       true -> S1#{compressed => F@_3}\n    end;\ndfp_read_field_def_response_parameters(Other, Z1, Z2,\n\t\t\t\t       F@_1, F@_2, F@_3, TrUserData) ->\n    dg_read_field_def_response_parameters(Other, Z1, Z2,\n\t\t\t\t\t  F@_1, F@_2, F@_3, TrUserData).\n\ndg_read_field_def_response_parameters(<<1:1, X:7,\n\t\t\t\t\tRest/binary>>,\n\t\t\t\t      N, Acc, F@_1, F@_2, F@_3, TrUserData)\n    when N < 32 - 7 ->\n    dg_read_field_def_response_parameters(Rest, N + 7,\n\t\t\t\t\t  X bsl N + Acc, F@_1, F@_2, F@_3,\n\t\t\t\t\t  TrUserData);\ndg_read_field_def_response_parameters(<<0:1, X:7,\n\t\t\t\t\tRest/binary>>,\n\t\t\t\t      N, Acc, F@_1, F@_2, F@_3, TrUserData) ->\n    Key = X bsl N + Acc,\n    case Key of\n      8 ->\n\t  d_field_response_parameters_size(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t\t   F@_3, TrUserData);\n      16 ->\n\t  d_field_response_parameters_interval_us(Rest, 0, 0,\n\t\t\t\t\t\t  F@_1, F@_2, F@_3, TrUserData);\n      26 ->\n\t  d_field_response_parameters_compressed(Rest, 0, 0, F@_1,\n\t\t\t\t\t\t F@_2, F@_3, TrUserData);\n      _ ->\n\t  case Key band 7 of\n\t    0 ->\n\t\tskip_varint_response_parameters(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t\t\tF@_3, TrUserData);\n\t    1 ->\n\t\tskip_64_response_parameters(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t\t    F@_3, TrUserData);\n\t    2 ->\n\t\tskip_length_delimited_response_parameters(Rest, 0, 0,\n\t\t\t\t\t\t\t  F@_1, F@_2, F@_3,\n\t\t\t\t\t\t\t  TrUserData);\n\t    3 ->\n\t\tskip_group_response_parameters(Rest, Key bsr 3, 0, F@_1,\n\t\t\t\t\t       F@_2, F@_3, TrUserData);\n\t    5 ->\n\t\tskip_32_response_parameters(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t\t    F@_3, TrUserData)\n\t  end\n    end;\ndg_read_field_def_response_parameters(<<>>, 0, 0, F@_1,\n\t\t\t\t      F@_2, F@_3, _) ->\n    S1 = #{size => F@_1, interval_us => F@_2},\n    if F@_3 == '$undef' -> S1;\n       true -> S1#{compressed => F@_3}\n    end.\n\nd_field_response_parameters_size(<<1:1, X:7,\n\t\t\t\t   Rest/binary>>,\n\t\t\t\t N, Acc, F@_1, F@_2, F@_3, TrUserData)\n    when N < 57 ->\n    d_field_response_parameters_size(Rest, N + 7,\n\t\t\t\t     X bsl N + Acc, F@_1, F@_2, F@_3,\n\t\t\t\t     TrUserData);\nd_field_response_parameters_size(<<0:1, X:7,\n\t\t\t\t   Rest/binary>>,\n\t\t\t\t N, Acc, _, F@_2, F@_3, TrUserData) ->\n    {NewFValue, RestF} = {begin\n\t\t\t    <<Res:32/signed-native>> = <<(X bsl N +\n\t\t\t\t\t\t\t    Acc):32/unsigned-native>>,\n\t\t\t    id(Res, TrUserData)\n\t\t\t  end,\n\t\t\t  Rest},\n    dfp_read_field_def_response_parameters(RestF, 0, 0,\n\t\t\t\t\t   NewFValue, F@_2, F@_3, TrUserData).\n\nd_field_response_parameters_interval_us(<<1:1, X:7,\n\t\t\t\t\t  Rest/binary>>,\n\t\t\t\t\tN, Acc, F@_1, F@_2, F@_3, TrUserData)\n    when N < 57 ->\n    d_field_response_parameters_interval_us(Rest, N + 7,\n\t\t\t\t\t    X bsl N + Acc, F@_1, F@_2, F@_3,\n\t\t\t\t\t    TrUserData);\nd_field_response_parameters_interval_us(<<0:1, X:7,\n\t\t\t\t\t  Rest/binary>>,\n\t\t\t\t\tN, Acc, F@_1, _, F@_3, TrUserData) ->\n    {NewFValue, RestF} = {begin\n\t\t\t    <<Res:32/signed-native>> = <<(X bsl N +\n\t\t\t\t\t\t\t    Acc):32/unsigned-native>>,\n\t\t\t    id(Res, TrUserData)\n\t\t\t  end,\n\t\t\t  Rest},\n    dfp_read_field_def_response_parameters(RestF, 0, 0,\n\t\t\t\t\t   F@_1, NewFValue, F@_3, TrUserData).\n\nd_field_response_parameters_compressed(<<1:1, X:7,\n\t\t\t\t\t Rest/binary>>,\n\t\t\t\t       N, Acc, F@_1, F@_2, F@_3, TrUserData)\n    when N < 57 ->\n    d_field_response_parameters_compressed(Rest, N + 7,\n\t\t\t\t\t   X bsl N + Acc, F@_1, F@_2, F@_3,\n\t\t\t\t\t   TrUserData);\nd_field_response_parameters_compressed(<<0:1, X:7,\n\t\t\t\t\t Rest/binary>>,\n\t\t\t\t       N, Acc, F@_1, F@_2, Prev, TrUserData) ->\n    {NewFValue, RestF} = begin\n\t\t\t   Len = X bsl N + Acc,\n\t\t\t   <<Bs:Len/binary, Rest2/binary>> = Rest,\n\t\t\t   {id(decode_msg_bool_value(Bs, TrUserData),\n\t\t\t       TrUserData),\n\t\t\t    Rest2}\n\t\t\t end,\n    dfp_read_field_def_response_parameters(RestF, 0, 0,\n\t\t\t\t\t   F@_1, F@_2,\n\t\t\t\t\t   if Prev == '$undef' -> NewFValue;\n\t\t\t\t\t      true ->\n\t\t\t\t\t\t  merge_msg_bool_value(Prev,\n\t\t\t\t\t\t\t\t       NewFValue,\n\t\t\t\t\t\t\t\t       TrUserData)\n\t\t\t\t\t   end,\n\t\t\t\t\t   TrUserData).\n\nskip_varint_response_parameters(<<1:1, _:7,\n\t\t\t\t  Rest/binary>>,\n\t\t\t\tZ1, Z2, F@_1, F@_2, F@_3, TrUserData) ->\n    skip_varint_response_parameters(Rest, Z1, Z2, F@_1,\n\t\t\t\t    F@_2, F@_3, TrUserData);\nskip_varint_response_parameters(<<0:1, _:7,\n\t\t\t\t  Rest/binary>>,\n\t\t\t\tZ1, Z2, F@_1, F@_2, F@_3, TrUserData) ->\n    dfp_read_field_def_response_parameters(Rest, Z1, Z2,\n\t\t\t\t\t   F@_1, F@_2, F@_3, TrUserData).\n\nskip_length_delimited_response_parameters(<<1:1, X:7,\n\t\t\t\t\t    Rest/binary>>,\n\t\t\t\t\t  N, Acc, F@_1, F@_2, F@_3, TrUserData)\n    when N < 57 ->\n    skip_length_delimited_response_parameters(Rest, N + 7,\n\t\t\t\t\t      X bsl N + Acc, F@_1, F@_2, F@_3,\n\t\t\t\t\t      TrUserData);\nskip_length_delimited_response_parameters(<<0:1, X:7,\n\t\t\t\t\t    Rest/binary>>,\n\t\t\t\t\t  N, Acc, F@_1, F@_2, F@_3,\n\t\t\t\t\t  TrUserData) ->\n    Length = X bsl N + Acc,\n    <<_:Length/binary, Rest2/binary>> = Rest,\n    dfp_read_field_def_response_parameters(Rest2, 0, 0,\n\t\t\t\t\t   F@_1, F@_2, F@_3, TrUserData).\n\nskip_group_response_parameters(Bin, FNum, Z2, F@_1,\n\t\t\t       F@_2, F@_3, TrUserData) ->\n    {_, Rest} = read_group(Bin, FNum),\n    dfp_read_field_def_response_parameters(Rest, 0, Z2,\n\t\t\t\t\t   F@_1, F@_2, F@_3, TrUserData).\n\nskip_32_response_parameters(<<_:32, Rest/binary>>, Z1,\n\t\t\t    Z2, F@_1, F@_2, F@_3, TrUserData) ->\n    dfp_read_field_def_response_parameters(Rest, Z1, Z2,\n\t\t\t\t\t   F@_1, F@_2, F@_3, TrUserData).\n\nskip_64_response_parameters(<<_:64, Rest/binary>>, Z1,\n\t\t\t    Z2, F@_1, F@_2, F@_3, TrUserData) ->\n    dfp_read_field_def_response_parameters(Rest, Z1, Z2,\n\t\t\t\t\t   F@_1, F@_2, F@_3, TrUserData).\n\ndecode_msg_streaming_output_call_request(Bin,\n\t\t\t\t\t TrUserData) ->\n    dfp_read_field_def_streaming_output_call_request(Bin, 0,\n\t\t\t\t\t\t     0,\n\t\t\t\t\t\t     id('COMPRESSABLE',\n\t\t\t\t\t\t\tTrUserData),\n\t\t\t\t\t\t     id([], TrUserData),\n\t\t\t\t\t\t     id('$undef', TrUserData),\n\t\t\t\t\t\t     id('$undef', TrUserData),\n\t\t\t\t\t\t     TrUserData).\n\ndfp_read_field_def_streaming_output_call_request(<<8,\n\t\t\t\t\t\t   Rest/binary>>,\n\t\t\t\t\t\t Z1, Z2, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\t\t TrUserData) ->\n    d_field_streaming_output_call_request_response_type(Rest,\n\t\t\t\t\t\t\tZ1, Z2, F@_1, F@_2,\n\t\t\t\t\t\t\tF@_3, F@_4, TrUserData);\ndfp_read_field_def_streaming_output_call_request(<<18,\n\t\t\t\t\t\t   Rest/binary>>,\n\t\t\t\t\t\t Z1, Z2, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\t\t TrUserData) ->\n    d_field_streaming_output_call_request_response_parameters(Rest,\n\t\t\t\t\t\t\t      Z1, Z2, F@_1,\n\t\t\t\t\t\t\t      F@_2, F@_3, F@_4,\n\t\t\t\t\t\t\t      TrUserData);\ndfp_read_field_def_streaming_output_call_request(<<26,\n\t\t\t\t\t\t   Rest/binary>>,\n\t\t\t\t\t\t Z1, Z2, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\t\t TrUserData) ->\n    d_field_streaming_output_call_request_payload(Rest, Z1,\n\t\t\t\t\t\t  Z2, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\t\t  TrUserData);\ndfp_read_field_def_streaming_output_call_request(<<58,\n\t\t\t\t\t\t   Rest/binary>>,\n\t\t\t\t\t\t Z1, Z2, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\t\t TrUserData) ->\n    d_field_streaming_output_call_request_response_status(Rest,\n\t\t\t\t\t\t\t  Z1, Z2, F@_1, F@_2,\n\t\t\t\t\t\t\t  F@_3, F@_4,\n\t\t\t\t\t\t\t  TrUserData);\ndfp_read_field_def_streaming_output_call_request(<<>>,\n\t\t\t\t\t\t 0, 0, F@_1, R1, F@_3, F@_4,\n\t\t\t\t\t\t TrUserData) ->\n    S1 = #{response_type => F@_1},\n    S2 = if R1 == '$undef' -> S1;\n\t    true ->\n\t\tS1#{response_parameters =>\n\t\t\tlists_reverse(R1, TrUserData)}\n\t end,\n    S3 = if F@_3 == '$undef' -> S2;\n\t    true -> S2#{payload => F@_3}\n\t end,\n    if F@_4 == '$undef' -> S3;\n       true -> S3#{response_status => F@_4}\n    end;\ndfp_read_field_def_streaming_output_call_request(Other,\n\t\t\t\t\t\t Z1, Z2, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\t\t TrUserData) ->\n    dg_read_field_def_streaming_output_call_request(Other,\n\t\t\t\t\t\t    Z1, Z2, F@_1, F@_2, F@_3,\n\t\t\t\t\t\t    F@_4, TrUserData).\n\ndg_read_field_def_streaming_output_call_request(<<1:1,\n\t\t\t\t\t\t  X:7, Rest/binary>>,\n\t\t\t\t\t\tN, Acc, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\t\tTrUserData)\n    when N < 32 - 7 ->\n    dg_read_field_def_streaming_output_call_request(Rest,\n\t\t\t\t\t\t    N + 7, X bsl N + Acc, F@_1,\n\t\t\t\t\t\t    F@_2, F@_3, F@_4,\n\t\t\t\t\t\t    TrUserData);\ndg_read_field_def_streaming_output_call_request(<<0:1,\n\t\t\t\t\t\t  X:7, Rest/binary>>,\n\t\t\t\t\t\tN, Acc, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\t\tTrUserData) ->\n    Key = X bsl N + Acc,\n    case Key of\n      8 ->\n\t  d_field_streaming_output_call_request_response_type(Rest,\n\t\t\t\t\t\t\t      0, 0, F@_1, F@_2,\n\t\t\t\t\t\t\t      F@_3, F@_4,\n\t\t\t\t\t\t\t      TrUserData);\n      18 ->\n\t  d_field_streaming_output_call_request_response_parameters(Rest,\n\t\t\t\t\t\t\t\t    0, 0, F@_1,\n\t\t\t\t\t\t\t\t    F@_2, F@_3,\n\t\t\t\t\t\t\t\t    F@_4,\n\t\t\t\t\t\t\t\t    TrUserData);\n      26 ->\n\t  d_field_streaming_output_call_request_payload(Rest, 0,\n\t\t\t\t\t\t\t0, F@_1, F@_2, F@_3,\n\t\t\t\t\t\t\tF@_4, TrUserData);\n      58 ->\n\t  d_field_streaming_output_call_request_response_status(Rest,\n\t\t\t\t\t\t\t\t0, 0, F@_1,\n\t\t\t\t\t\t\t\tF@_2, F@_3,\n\t\t\t\t\t\t\t\tF@_4,\n\t\t\t\t\t\t\t\tTrUserData);\n      _ ->\n\t  case Key band 7 of\n\t    0 ->\n\t\tskip_varint_streaming_output_call_request(Rest, 0, 0,\n\t\t\t\t\t\t\t  F@_1, F@_2, F@_3,\n\t\t\t\t\t\t\t  F@_4, TrUserData);\n\t    1 ->\n\t\tskip_64_streaming_output_call_request(Rest, 0, 0, F@_1,\n\t\t\t\t\t\t      F@_2, F@_3, F@_4,\n\t\t\t\t\t\t      TrUserData);\n\t    2 ->\n\t\tskip_length_delimited_streaming_output_call_request(Rest,\n\t\t\t\t\t\t\t\t    0, 0, F@_1,\n\t\t\t\t\t\t\t\t    F@_2, F@_3,\n\t\t\t\t\t\t\t\t    F@_4,\n\t\t\t\t\t\t\t\t    TrUserData);\n\t    3 ->\n\t\tskip_group_streaming_output_call_request(Rest,\n\t\t\t\t\t\t\t Key bsr 3, 0, F@_1,\n\t\t\t\t\t\t\t F@_2, F@_3, F@_4,\n\t\t\t\t\t\t\t TrUserData);\n\t    5 ->\n\t\tskip_32_streaming_output_call_request(Rest, 0, 0, F@_1,\n\t\t\t\t\t\t      F@_2, F@_3, F@_4,\n\t\t\t\t\t\t      TrUserData)\n\t  end\n    end;\ndg_read_field_def_streaming_output_call_request(<<>>, 0,\n\t\t\t\t\t\t0, F@_1, R1, F@_3, F@_4,\n\t\t\t\t\t\tTrUserData) ->\n    S1 = #{response_type => F@_1},\n    S2 = if R1 == '$undef' -> S1;\n\t    true ->\n\t\tS1#{response_parameters =>\n\t\t\tlists_reverse(R1, TrUserData)}\n\t end,\n    S3 = if F@_3 == '$undef' -> S2;\n\t    true -> S2#{payload => F@_3}\n\t end,\n    if F@_4 == '$undef' -> S3;\n       true -> S3#{response_status => F@_4}\n    end.\n\nd_field_streaming_output_call_request_response_type(<<1:1,\n\t\t\t\t\t\t      X:7, Rest/binary>>,\n\t\t\t\t\t\t    N, Acc, F@_1, F@_2, F@_3,\n\t\t\t\t\t\t    F@_4, TrUserData)\n    when N < 57 ->\n    d_field_streaming_output_call_request_response_type(Rest,\n\t\t\t\t\t\t\tN + 7, X bsl N + Acc,\n\t\t\t\t\t\t\tF@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\t\t\tTrUserData);\nd_field_streaming_output_call_request_response_type(<<0:1,\n\t\t\t\t\t\t      X:7, Rest/binary>>,\n\t\t\t\t\t\t    N, Acc, _, F@_2, F@_3, F@_4,\n\t\t\t\t\t\t    TrUserData) ->\n    {NewFValue, RestF} =\n\t{id('d_enum_grpc.testing.PayloadType'(begin\n\t\t\t\t\t\t<<Res:32/signed-native>> = <<(X\n\t\t\t\t\t\t\t\t\t\tbsl\n\t\t\t\t\t\t\t\t\t\tN\n\t\t\t\t\t\t\t\t\t\t+\n\t\t\t\t\t\t\t\t\t\tAcc):32/unsigned-native>>,\n\t\t\t\t\t\tid(Res, TrUserData)\n\t\t\t\t\t      end),\n\t    TrUserData),\n\t Rest},\n    dfp_read_field_def_streaming_output_call_request(RestF,\n\t\t\t\t\t\t     0, 0, NewFValue, F@_2,\n\t\t\t\t\t\t     F@_3, F@_4, TrUserData).\n\nd_field_streaming_output_call_request_response_parameters(<<1:1,\n\t\t\t\t\t\t\t    X:7, Rest/binary>>,\n\t\t\t\t\t\t\t  N, Acc, F@_1, F@_2,\n\t\t\t\t\t\t\t  F@_3, F@_4,\n\t\t\t\t\t\t\t  TrUserData)\n    when N < 57 ->\n    d_field_streaming_output_call_request_response_parameters(Rest,\n\t\t\t\t\t\t\t      N + 7,\n\t\t\t\t\t\t\t      X bsl N + Acc,\n\t\t\t\t\t\t\t      F@_1, F@_2, F@_3,\n\t\t\t\t\t\t\t      F@_4, TrUserData);\nd_field_streaming_output_call_request_response_parameters(<<0:1,\n\t\t\t\t\t\t\t    X:7, Rest/binary>>,\n\t\t\t\t\t\t\t  N, Acc, F@_1, Prev,\n\t\t\t\t\t\t\t  F@_3, F@_4,\n\t\t\t\t\t\t\t  TrUserData) ->\n    {NewFValue, RestF} = begin\n\t\t\t   Len = X bsl N + Acc,\n\t\t\t   <<Bs:Len/binary, Rest2/binary>> = Rest,\n\t\t\t   {id(decode_msg_response_parameters(Bs, TrUserData),\n\t\t\t       TrUserData),\n\t\t\t    Rest2}\n\t\t\t end,\n    dfp_read_field_def_streaming_output_call_request(RestF,\n\t\t\t\t\t\t     0, 0, F@_1,\n\t\t\t\t\t\t     cons(NewFValue, Prev,\n\t\t\t\t\t\t\t  TrUserData),\n\t\t\t\t\t\t     F@_3, F@_4, TrUserData).\n\nd_field_streaming_output_call_request_payload(<<1:1,\n\t\t\t\t\t\tX:7, Rest/binary>>,\n\t\t\t\t\t      N, Acc, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\t      TrUserData)\n    when N < 57 ->\n    d_field_streaming_output_call_request_payload(Rest,\n\t\t\t\t\t\t  N + 7, X bsl N + Acc, F@_1,\n\t\t\t\t\t\t  F@_2, F@_3, F@_4, TrUserData);\nd_field_streaming_output_call_request_payload(<<0:1,\n\t\t\t\t\t\tX:7, Rest/binary>>,\n\t\t\t\t\t      N, Acc, F@_1, F@_2, Prev, F@_4,\n\t\t\t\t\t      TrUserData) ->\n    {NewFValue, RestF} = begin\n\t\t\t   Len = X bsl N + Acc,\n\t\t\t   <<Bs:Len/binary, Rest2/binary>> = Rest,\n\t\t\t   {id(decode_msg_payload(Bs, TrUserData), TrUserData),\n\t\t\t    Rest2}\n\t\t\t end,\n    dfp_read_field_def_streaming_output_call_request(RestF,\n\t\t\t\t\t\t     0, 0, F@_1, F@_2,\n\t\t\t\t\t\t     if Prev == '$undef' ->\n\t\t\t\t\t\t\t    NewFValue;\n\t\t\t\t\t\t\ttrue ->\n\t\t\t\t\t\t\t    merge_msg_payload(Prev,\n\t\t\t\t\t\t\t\t\t      NewFValue,\n\t\t\t\t\t\t\t\t\t      TrUserData)\n\t\t\t\t\t\t     end,\n\t\t\t\t\t\t     F@_4, TrUserData).\n\nd_field_streaming_output_call_request_response_status(<<1:1,\n\t\t\t\t\t\t\tX:7, Rest/binary>>,\n\t\t\t\t\t\t      N, Acc, F@_1, F@_2, F@_3,\n\t\t\t\t\t\t      F@_4, TrUserData)\n    when N < 57 ->\n    d_field_streaming_output_call_request_response_status(Rest,\n\t\t\t\t\t\t\t  N + 7, X bsl N + Acc,\n\t\t\t\t\t\t\t  F@_1, F@_2, F@_3,\n\t\t\t\t\t\t\t  F@_4, TrUserData);\nd_field_streaming_output_call_request_response_status(<<0:1,\n\t\t\t\t\t\t\tX:7, Rest/binary>>,\n\t\t\t\t\t\t      N, Acc, F@_1, F@_2, F@_3,\n\t\t\t\t\t\t      Prev, TrUserData) ->\n    {NewFValue, RestF} = begin\n\t\t\t   Len = X bsl N + Acc,\n\t\t\t   <<Bs:Len/binary, Rest2/binary>> = Rest,\n\t\t\t   {id(decode_msg_echo_status(Bs, TrUserData),\n\t\t\t       TrUserData),\n\t\t\t    Rest2}\n\t\t\t end,\n    dfp_read_field_def_streaming_output_call_request(RestF,\n\t\t\t\t\t\t     0, 0, F@_1, F@_2, F@_3,\n\t\t\t\t\t\t     if Prev == '$undef' ->\n\t\t\t\t\t\t\t    NewFValue;\n\t\t\t\t\t\t\ttrue ->\n\t\t\t\t\t\t\t    merge_msg_echo_status(Prev,\n\t\t\t\t\t\t\t\t\t\t  NewFValue,\n\t\t\t\t\t\t\t\t\t\t  TrUserData)\n\t\t\t\t\t\t     end,\n\t\t\t\t\t\t     TrUserData).\n\nskip_varint_streaming_output_call_request(<<1:1, _:7,\n\t\t\t\t\t    Rest/binary>>,\n\t\t\t\t\t  Z1, Z2, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\t  TrUserData) ->\n    skip_varint_streaming_output_call_request(Rest, Z1, Z2,\n\t\t\t\t\t      F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\t      TrUserData);\nskip_varint_streaming_output_call_request(<<0:1, _:7,\n\t\t\t\t\t    Rest/binary>>,\n\t\t\t\t\t  Z1, Z2, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\t  TrUserData) ->\n    dfp_read_field_def_streaming_output_call_request(Rest,\n\t\t\t\t\t\t     Z1, Z2, F@_1, F@_2, F@_3,\n\t\t\t\t\t\t     F@_4, TrUserData).\n\nskip_length_delimited_streaming_output_call_request(<<1:1,\n\t\t\t\t\t\t      X:7, Rest/binary>>,\n\t\t\t\t\t\t    N, Acc, F@_1, F@_2, F@_3,\n\t\t\t\t\t\t    F@_4, TrUserData)\n    when N < 57 ->\n    skip_length_delimited_streaming_output_call_request(Rest,\n\t\t\t\t\t\t\tN + 7, X bsl N + Acc,\n\t\t\t\t\t\t\tF@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\t\t\tTrUserData);\nskip_length_delimited_streaming_output_call_request(<<0:1,\n\t\t\t\t\t\t      X:7, Rest/binary>>,\n\t\t\t\t\t\t    N, Acc, F@_1, F@_2, F@_3,\n\t\t\t\t\t\t    F@_4, TrUserData) ->\n    Length = X bsl N + Acc,\n    <<_:Length/binary, Rest2/binary>> = Rest,\n    dfp_read_field_def_streaming_output_call_request(Rest2,\n\t\t\t\t\t\t     0, 0, F@_1, F@_2, F@_3,\n\t\t\t\t\t\t     F@_4, TrUserData).\n\nskip_group_streaming_output_call_request(Bin, FNum, Z2,\n\t\t\t\t\t F@_1, F@_2, F@_3, F@_4, TrUserData) ->\n    {_, Rest} = read_group(Bin, FNum),\n    dfp_read_field_def_streaming_output_call_request(Rest,\n\t\t\t\t\t\t     0, Z2, F@_1, F@_2, F@_3,\n\t\t\t\t\t\t     F@_4, TrUserData).\n\nskip_32_streaming_output_call_request(<<_:32,\n\t\t\t\t\tRest/binary>>,\n\t\t\t\t      Z1, Z2, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t      TrUserData) ->\n    dfp_read_field_def_streaming_output_call_request(Rest,\n\t\t\t\t\t\t     Z1, Z2, F@_1, F@_2, F@_3,\n\t\t\t\t\t\t     F@_4, TrUserData).\n\nskip_64_streaming_output_call_request(<<_:64,\n\t\t\t\t\tRest/binary>>,\n\t\t\t\t      Z1, Z2, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t      TrUserData) ->\n    dfp_read_field_def_streaming_output_call_request(Rest,\n\t\t\t\t\t\t     Z1, Z2, F@_1, F@_2, F@_3,\n\t\t\t\t\t\t     F@_4, TrUserData).\n\ndecode_msg_streaming_output_call_response(Bin,\n\t\t\t\t\t  TrUserData) ->\n    dfp_read_field_def_streaming_output_call_response(Bin,\n\t\t\t\t\t\t      0, 0,\n\t\t\t\t\t\t      id('$undef', TrUserData),\n\t\t\t\t\t\t      TrUserData).\n\ndfp_read_field_def_streaming_output_call_response(<<10,\n\t\t\t\t\t\t    Rest/binary>>,\n\t\t\t\t\t\t  Z1, Z2, F@_1, TrUserData) ->\n    d_field_streaming_output_call_response_payload(Rest, Z1,\n\t\t\t\t\t\t   Z2, F@_1, TrUserData);\ndfp_read_field_def_streaming_output_call_response(<<>>,\n\t\t\t\t\t\t  0, 0, F@_1, _) ->\n    S1 = #{},\n    if F@_1 == '$undef' -> S1;\n       true -> S1#{payload => F@_1}\n    end;\ndfp_read_field_def_streaming_output_call_response(Other,\n\t\t\t\t\t\t  Z1, Z2, F@_1, TrUserData) ->\n    dg_read_field_def_streaming_output_call_response(Other,\n\t\t\t\t\t\t     Z1, Z2, F@_1, TrUserData).\n\ndg_read_field_def_streaming_output_call_response(<<1:1,\n\t\t\t\t\t\t   X:7, Rest/binary>>,\n\t\t\t\t\t\t N, Acc, F@_1, TrUserData)\n    when N < 32 - 7 ->\n    dg_read_field_def_streaming_output_call_response(Rest,\n\t\t\t\t\t\t     N + 7, X bsl N + Acc, F@_1,\n\t\t\t\t\t\t     TrUserData);\ndg_read_field_def_streaming_output_call_response(<<0:1,\n\t\t\t\t\t\t   X:7, Rest/binary>>,\n\t\t\t\t\t\t N, Acc, F@_1, TrUserData) ->\n    Key = X bsl N + Acc,\n    case Key of\n      10 ->\n\t  d_field_streaming_output_call_response_payload(Rest, 0,\n\t\t\t\t\t\t\t 0, F@_1, TrUserData);\n      _ ->\n\t  case Key band 7 of\n\t    0 ->\n\t\tskip_varint_streaming_output_call_response(Rest, 0, 0,\n\t\t\t\t\t\t\t   F@_1, TrUserData);\n\t    1 ->\n\t\tskip_64_streaming_output_call_response(Rest, 0, 0, F@_1,\n\t\t\t\t\t\t       TrUserData);\n\t    2 ->\n\t\tskip_length_delimited_streaming_output_call_response(Rest,\n\t\t\t\t\t\t\t\t     0, 0, F@_1,\n\t\t\t\t\t\t\t\t     TrUserData);\n\t    3 ->\n\t\tskip_group_streaming_output_call_response(Rest,\n\t\t\t\t\t\t\t  Key bsr 3, 0, F@_1,\n\t\t\t\t\t\t\t  TrUserData);\n\t    5 ->\n\t\tskip_32_streaming_output_call_response(Rest, 0, 0, F@_1,\n\t\t\t\t\t\t       TrUserData)\n\t  end\n    end;\ndg_read_field_def_streaming_output_call_response(<<>>,\n\t\t\t\t\t\t 0, 0, F@_1, _) ->\n    S1 = #{},\n    if F@_1 == '$undef' -> S1;\n       true -> S1#{payload => F@_1}\n    end.\n\nd_field_streaming_output_call_response_payload(<<1:1,\n\t\t\t\t\t\t X:7, Rest/binary>>,\n\t\t\t\t\t       N, Acc, F@_1, TrUserData)\n    when N < 57 ->\n    d_field_streaming_output_call_response_payload(Rest,\n\t\t\t\t\t\t   N + 7, X bsl N + Acc, F@_1,\n\t\t\t\t\t\t   TrUserData);\nd_field_streaming_output_call_response_payload(<<0:1,\n\t\t\t\t\t\t X:7, Rest/binary>>,\n\t\t\t\t\t       N, Acc, Prev, TrUserData) ->\n    {NewFValue, RestF} = begin\n\t\t\t   Len = X bsl N + Acc,\n\t\t\t   <<Bs:Len/binary, Rest2/binary>> = Rest,\n\t\t\t   {id(decode_msg_payload(Bs, TrUserData), TrUserData),\n\t\t\t    Rest2}\n\t\t\t end,\n    dfp_read_field_def_streaming_output_call_response(RestF,\n\t\t\t\t\t\t      0, 0,\n\t\t\t\t\t\t      if Prev == '$undef' ->\n\t\t\t\t\t\t\t     NewFValue;\n\t\t\t\t\t\t\t true ->\n\t\t\t\t\t\t\t     merge_msg_payload(Prev,\n\t\t\t\t\t\t\t\t\t       NewFValue,\n\t\t\t\t\t\t\t\t\t       TrUserData)\n\t\t\t\t\t\t      end,\n\t\t\t\t\t\t      TrUserData).\n\nskip_varint_streaming_output_call_response(<<1:1, _:7,\n\t\t\t\t\t     Rest/binary>>,\n\t\t\t\t\t   Z1, Z2, F@_1, TrUserData) ->\n    skip_varint_streaming_output_call_response(Rest, Z1, Z2,\n\t\t\t\t\t       F@_1, TrUserData);\nskip_varint_streaming_output_call_response(<<0:1, _:7,\n\t\t\t\t\t     Rest/binary>>,\n\t\t\t\t\t   Z1, Z2, F@_1, TrUserData) ->\n    dfp_read_field_def_streaming_output_call_response(Rest,\n\t\t\t\t\t\t      Z1, Z2, F@_1, TrUserData).\n\nskip_length_delimited_streaming_output_call_response(<<1:1,\n\t\t\t\t\t\t       X:7, Rest/binary>>,\n\t\t\t\t\t\t     N, Acc, F@_1, TrUserData)\n    when N < 57 ->\n    skip_length_delimited_streaming_output_call_response(Rest,\n\t\t\t\t\t\t\t N + 7, X bsl N + Acc,\n\t\t\t\t\t\t\t F@_1, TrUserData);\nskip_length_delimited_streaming_output_call_response(<<0:1,\n\t\t\t\t\t\t       X:7, Rest/binary>>,\n\t\t\t\t\t\t     N, Acc, F@_1,\n\t\t\t\t\t\t     TrUserData) ->\n    Length = X bsl N + Acc,\n    <<_:Length/binary, Rest2/binary>> = Rest,\n    dfp_read_field_def_streaming_output_call_response(Rest2,\n\t\t\t\t\t\t      0, 0, F@_1, TrUserData).\n\nskip_group_streaming_output_call_response(Bin, FNum, Z2,\n\t\t\t\t\t  F@_1, TrUserData) ->\n    {_, Rest} = read_group(Bin, FNum),\n    dfp_read_field_def_streaming_output_call_response(Rest,\n\t\t\t\t\t\t      0, Z2, F@_1, TrUserData).\n\nskip_32_streaming_output_call_response(<<_:32,\n\t\t\t\t\t Rest/binary>>,\n\t\t\t\t       Z1, Z2, F@_1, TrUserData) ->\n    dfp_read_field_def_streaming_output_call_response(Rest,\n\t\t\t\t\t\t      Z1, Z2, F@_1, TrUserData).\n\nskip_64_streaming_output_call_response(<<_:64,\n\t\t\t\t\t Rest/binary>>,\n\t\t\t\t       Z1, Z2, F@_1, TrUserData) ->\n    dfp_read_field_def_streaming_output_call_response(Rest,\n\t\t\t\t\t\t      Z1, Z2, F@_1, TrUserData).\n\ndecode_msg_reconnect_params(Bin, TrUserData) ->\n    dfp_read_field_def_reconnect_params(Bin, 0, 0,\n\t\t\t\t\tid(0, TrUserData), TrUserData).\n\ndfp_read_field_def_reconnect_params(<<8, Rest/binary>>,\n\t\t\t\t    Z1, Z2, F@_1, TrUserData) ->\n    d_field_reconnect_params_max_reconnect_backoff_ms(Rest,\n\t\t\t\t\t\t      Z1, Z2, F@_1, TrUserData);\ndfp_read_field_def_reconnect_params(<<>>, 0, 0, F@_1,\n\t\t\t\t    _) ->\n    #{max_reconnect_backoff_ms => F@_1};\ndfp_read_field_def_reconnect_params(Other, Z1, Z2, F@_1,\n\t\t\t\t    TrUserData) ->\n    dg_read_field_def_reconnect_params(Other, Z1, Z2, F@_1,\n\t\t\t\t       TrUserData).\n\ndg_read_field_def_reconnect_params(<<1:1, X:7,\n\t\t\t\t     Rest/binary>>,\n\t\t\t\t   N, Acc, F@_1, TrUserData)\n    when N < 32 - 7 ->\n    dg_read_field_def_reconnect_params(Rest, N + 7,\n\t\t\t\t       X bsl N + Acc, F@_1, TrUserData);\ndg_read_field_def_reconnect_params(<<0:1, X:7,\n\t\t\t\t     Rest/binary>>,\n\t\t\t\t   N, Acc, F@_1, TrUserData) ->\n    Key = X bsl N + Acc,\n    case Key of\n      8 ->\n\t  d_field_reconnect_params_max_reconnect_backoff_ms(Rest,\n\t\t\t\t\t\t\t    0, 0, F@_1,\n\t\t\t\t\t\t\t    TrUserData);\n      _ ->\n\t  case Key band 7 of\n\t    0 ->\n\t\tskip_varint_reconnect_params(Rest, 0, 0, F@_1,\n\t\t\t\t\t     TrUserData);\n\t    1 ->\n\t\tskip_64_reconnect_params(Rest, 0, 0, F@_1, TrUserData);\n\t    2 ->\n\t\tskip_length_delimited_reconnect_params(Rest, 0, 0, F@_1,\n\t\t\t\t\t\t       TrUserData);\n\t    3 ->\n\t\tskip_group_reconnect_params(Rest, Key bsr 3, 0, F@_1,\n\t\t\t\t\t    TrUserData);\n\t    5 ->\n\t\tskip_32_reconnect_params(Rest, 0, 0, F@_1, TrUserData)\n\t  end\n    end;\ndg_read_field_def_reconnect_params(<<>>, 0, 0, F@_1,\n\t\t\t\t   _) ->\n    #{max_reconnect_backoff_ms => F@_1}.\n\nd_field_reconnect_params_max_reconnect_backoff_ms(<<1:1,\n\t\t\t\t\t\t    X:7, Rest/binary>>,\n\t\t\t\t\t\t  N, Acc, F@_1, TrUserData)\n    when N < 57 ->\n    d_field_reconnect_params_max_reconnect_backoff_ms(Rest,\n\t\t\t\t\t\t      N + 7, X bsl N + Acc,\n\t\t\t\t\t\t      F@_1, TrUserData);\nd_field_reconnect_params_max_reconnect_backoff_ms(<<0:1,\n\t\t\t\t\t\t    X:7, Rest/binary>>,\n\t\t\t\t\t\t  N, Acc, _, TrUserData) ->\n    {NewFValue, RestF} = {begin\n\t\t\t    <<Res:32/signed-native>> = <<(X bsl N +\n\t\t\t\t\t\t\t    Acc):32/unsigned-native>>,\n\t\t\t    id(Res, TrUserData)\n\t\t\t  end,\n\t\t\t  Rest},\n    dfp_read_field_def_reconnect_params(RestF, 0, 0,\n\t\t\t\t\tNewFValue, TrUserData).\n\nskip_varint_reconnect_params(<<1:1, _:7, Rest/binary>>,\n\t\t\t     Z1, Z2, F@_1, TrUserData) ->\n    skip_varint_reconnect_params(Rest, Z1, Z2, F@_1,\n\t\t\t\t TrUserData);\nskip_varint_reconnect_params(<<0:1, _:7, Rest/binary>>,\n\t\t\t     Z1, Z2, F@_1, TrUserData) ->\n    dfp_read_field_def_reconnect_params(Rest, Z1, Z2, F@_1,\n\t\t\t\t\tTrUserData).\n\nskip_length_delimited_reconnect_params(<<1:1, X:7,\n\t\t\t\t\t Rest/binary>>,\n\t\t\t\t       N, Acc, F@_1, TrUserData)\n    when N < 57 ->\n    skip_length_delimited_reconnect_params(Rest, N + 7,\n\t\t\t\t\t   X bsl N + Acc, F@_1, TrUserData);\nskip_length_delimited_reconnect_params(<<0:1, X:7,\n\t\t\t\t\t Rest/binary>>,\n\t\t\t\t       N, Acc, F@_1, TrUserData) ->\n    Length = X bsl N + Acc,\n    <<_:Length/binary, Rest2/binary>> = Rest,\n    dfp_read_field_def_reconnect_params(Rest2, 0, 0, F@_1,\n\t\t\t\t\tTrUserData).\n\nskip_group_reconnect_params(Bin, FNum, Z2, F@_1,\n\t\t\t    TrUserData) ->\n    {_, Rest} = read_group(Bin, FNum),\n    dfp_read_field_def_reconnect_params(Rest, 0, Z2, F@_1,\n\t\t\t\t\tTrUserData).\n\nskip_32_reconnect_params(<<_:32, Rest/binary>>, Z1, Z2,\n\t\t\t F@_1, TrUserData) ->\n    dfp_read_field_def_reconnect_params(Rest, Z1, Z2, F@_1,\n\t\t\t\t\tTrUserData).\n\nskip_64_reconnect_params(<<_:64, Rest/binary>>, Z1, Z2,\n\t\t\t F@_1, TrUserData) ->\n    dfp_read_field_def_reconnect_params(Rest, Z1, Z2, F@_1,\n\t\t\t\t\tTrUserData).\n\ndecode_msg_reconnect_info(Bin, TrUserData) ->\n    dfp_read_field_def_reconnect_info(Bin, 0, 0,\n\t\t\t\t      id(false, TrUserData), id([], TrUserData),\n\t\t\t\t      TrUserData).\n\ndfp_read_field_def_reconnect_info(<<8, Rest/binary>>,\n\t\t\t\t  Z1, Z2, F@_1, F@_2, TrUserData) ->\n    d_field_reconnect_info_passed(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t\t  TrUserData);\ndfp_read_field_def_reconnect_info(<<18, Rest/binary>>,\n\t\t\t\t  Z1, Z2, F@_1, F@_2, TrUserData) ->\n    d_pfield_reconnect_info_backoff_ms(Rest, Z1, Z2, F@_1,\n\t\t\t\t       F@_2, TrUserData);\ndfp_read_field_def_reconnect_info(<<16, Rest/binary>>,\n\t\t\t\t  Z1, Z2, F@_1, F@_2, TrUserData) ->\n    d_field_reconnect_info_backoff_ms(Rest, Z1, Z2, F@_1,\n\t\t\t\t      F@_2, TrUserData);\ndfp_read_field_def_reconnect_info(<<>>, 0, 0, F@_1, R1,\n\t\t\t\t  TrUserData) ->\n    #{passed => F@_1,\n      backoff_ms => lists_reverse(R1, TrUserData)};\ndfp_read_field_def_reconnect_info(Other, Z1, Z2, F@_1,\n\t\t\t\t  F@_2, TrUserData) ->\n    dg_read_field_def_reconnect_info(Other, Z1, Z2, F@_1,\n\t\t\t\t     F@_2, TrUserData).\n\ndg_read_field_def_reconnect_info(<<1:1, X:7,\n\t\t\t\t   Rest/binary>>,\n\t\t\t\t N, Acc, F@_1, F@_2, TrUserData)\n    when N < 32 - 7 ->\n    dg_read_field_def_reconnect_info(Rest, N + 7,\n\t\t\t\t     X bsl N + Acc, F@_1, F@_2, TrUserData);\ndg_read_field_def_reconnect_info(<<0:1, X:7,\n\t\t\t\t   Rest/binary>>,\n\t\t\t\t N, Acc, F@_1, F@_2, TrUserData) ->\n    Key = X bsl N + Acc,\n    case Key of\n      8 ->\n\t  d_field_reconnect_info_passed(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t\tTrUserData);\n      18 ->\n\t  d_pfield_reconnect_info_backoff_ms(Rest, 0, 0, F@_1,\n\t\t\t\t\t     F@_2, TrUserData);\n      16 ->\n\t  d_field_reconnect_info_backoff_ms(Rest, 0, 0, F@_1,\n\t\t\t\t\t    F@_2, TrUserData);\n      _ ->\n\t  case Key band 7 of\n\t    0 ->\n\t\tskip_varint_reconnect_info(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t\t   TrUserData);\n\t    1 ->\n\t\tskip_64_reconnect_info(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t       TrUserData);\n\t    2 ->\n\t\tskip_length_delimited_reconnect_info(Rest, 0, 0, F@_1,\n\t\t\t\t\t\t     F@_2, TrUserData);\n\t    3 ->\n\t\tskip_group_reconnect_info(Rest, Key bsr 3, 0, F@_1,\n\t\t\t\t\t  F@_2, TrUserData);\n\t    5 ->\n\t\tskip_32_reconnect_info(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t       TrUserData)\n\t  end\n    end;\ndg_read_field_def_reconnect_info(<<>>, 0, 0, F@_1, R1,\n\t\t\t\t TrUserData) ->\n    #{passed => F@_1,\n      backoff_ms => lists_reverse(R1, TrUserData)}.\n\nd_field_reconnect_info_passed(<<1:1, X:7, Rest/binary>>,\n\t\t\t      N, Acc, F@_1, F@_2, TrUserData)\n    when N < 57 ->\n    d_field_reconnect_info_passed(Rest, N + 7,\n\t\t\t\t  X bsl N + Acc, F@_1, F@_2, TrUserData);\nd_field_reconnect_info_passed(<<0:1, X:7, Rest/binary>>,\n\t\t\t      N, Acc, _, F@_2, TrUserData) ->\n    {NewFValue, RestF} = {id(X bsl N + Acc =/= 0,\n\t\t\t     TrUserData),\n\t\t\t  Rest},\n    dfp_read_field_def_reconnect_info(RestF, 0, 0,\n\t\t\t\t      NewFValue, F@_2, TrUserData).\n\nd_field_reconnect_info_backoff_ms(<<1:1, X:7,\n\t\t\t\t    Rest/binary>>,\n\t\t\t\t  N, Acc, F@_1, F@_2, TrUserData)\n    when N < 57 ->\n    d_field_reconnect_info_backoff_ms(Rest, N + 7,\n\t\t\t\t      X bsl N + Acc, F@_1, F@_2, TrUserData);\nd_field_reconnect_info_backoff_ms(<<0:1, X:7,\n\t\t\t\t    Rest/binary>>,\n\t\t\t\t  N, Acc, F@_1, Prev, TrUserData) ->\n    {NewFValue, RestF} = {begin\n\t\t\t    <<Res:32/signed-native>> = <<(X bsl N +\n\t\t\t\t\t\t\t    Acc):32/unsigned-native>>,\n\t\t\t    id(Res, TrUserData)\n\t\t\t  end,\n\t\t\t  Rest},\n    dfp_read_field_def_reconnect_info(RestF, 0, 0, F@_1,\n\t\t\t\t      cons(NewFValue, Prev, TrUserData),\n\t\t\t\t      TrUserData).\n\nd_pfield_reconnect_info_backoff_ms(<<1:1, X:7,\n\t\t\t\t     Rest/binary>>,\n\t\t\t\t   N, Acc, F@_1, F@_2, TrUserData)\n    when N < 57 ->\n    d_pfield_reconnect_info_backoff_ms(Rest, N + 7,\n\t\t\t\t       X bsl N + Acc, F@_1, F@_2, TrUserData);\nd_pfield_reconnect_info_backoff_ms(<<0:1, X:7,\n\t\t\t\t     Rest/binary>>,\n\t\t\t\t   N, Acc, F@_1, E, TrUserData) ->\n    Len = X bsl N + Acc,\n    <<PackedBytes:Len/binary, Rest2/binary>> = Rest,\n    NewSeq =\n\td_packed_field_reconnect_info_backoff_ms(PackedBytes, 0,\n\t\t\t\t\t\t 0, E, TrUserData),\n    dfp_read_field_def_reconnect_info(Rest2, 0, 0, F@_1,\n\t\t\t\t      NewSeq, TrUserData).\n\nd_packed_field_reconnect_info_backoff_ms(<<1:1, X:7,\n\t\t\t\t\t   Rest/binary>>,\n\t\t\t\t\t N, Acc, AccSeq, TrUserData)\n    when N < 57 ->\n    d_packed_field_reconnect_info_backoff_ms(Rest, N + 7,\n\t\t\t\t\t     X bsl N + Acc, AccSeq, TrUserData);\nd_packed_field_reconnect_info_backoff_ms(<<0:1, X:7,\n\t\t\t\t\t   Rest/binary>>,\n\t\t\t\t\t N, Acc, AccSeq, TrUserData) ->\n    {NewFValue, RestF} = {begin\n\t\t\t    <<Res:32/signed-native>> = <<(X bsl N +\n\t\t\t\t\t\t\t    Acc):32/unsigned-native>>,\n\t\t\t    id(Res, TrUserData)\n\t\t\t  end,\n\t\t\t  Rest},\n    d_packed_field_reconnect_info_backoff_ms(RestF, 0, 0,\n\t\t\t\t\t     [NewFValue | AccSeq], TrUserData);\nd_packed_field_reconnect_info_backoff_ms(<<>>, 0, 0,\n\t\t\t\t\t AccSeq, _) ->\n    AccSeq.\n\nskip_varint_reconnect_info(<<1:1, _:7, Rest/binary>>,\n\t\t\t   Z1, Z2, F@_1, F@_2, TrUserData) ->\n    skip_varint_reconnect_info(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t       TrUserData);\nskip_varint_reconnect_info(<<0:1, _:7, Rest/binary>>,\n\t\t\t   Z1, Z2, F@_1, F@_2, TrUserData) ->\n    dfp_read_field_def_reconnect_info(Rest, Z1, Z2, F@_1,\n\t\t\t\t      F@_2, TrUserData).\n\nskip_length_delimited_reconnect_info(<<1:1, X:7,\n\t\t\t\t       Rest/binary>>,\n\t\t\t\t     N, Acc, F@_1, F@_2, TrUserData)\n    when N < 57 ->\n    skip_length_delimited_reconnect_info(Rest, N + 7,\n\t\t\t\t\t X bsl N + Acc, F@_1, F@_2, TrUserData);\nskip_length_delimited_reconnect_info(<<0:1, X:7,\n\t\t\t\t       Rest/binary>>,\n\t\t\t\t     N, Acc, F@_1, F@_2, TrUserData) ->\n    Length = X bsl N + Acc,\n    <<_:Length/binary, Rest2/binary>> = Rest,\n    dfp_read_field_def_reconnect_info(Rest2, 0, 0, F@_1,\n\t\t\t\t      F@_2, TrUserData).\n\nskip_group_reconnect_info(Bin, FNum, Z2, F@_1, F@_2,\n\t\t\t  TrUserData) ->\n    {_, Rest} = read_group(Bin, FNum),\n    dfp_read_field_def_reconnect_info(Rest, 0, Z2, F@_1,\n\t\t\t\t      F@_2, TrUserData).\n\nskip_32_reconnect_info(<<_:32, Rest/binary>>, Z1, Z2,\n\t\t       F@_1, F@_2, TrUserData) ->\n    dfp_read_field_def_reconnect_info(Rest, Z1, Z2, F@_1,\n\t\t\t\t      F@_2, TrUserData).\n\nskip_64_reconnect_info(<<_:64, Rest/binary>>, Z1, Z2,\n\t\t       F@_1, F@_2, TrUserData) ->\n    dfp_read_field_def_reconnect_info(Rest, Z1, Z2, F@_1,\n\t\t\t\t      F@_2, TrUserData).\n\n'd_enum_grpc.testing.PayloadType'(0) -> 'COMPRESSABLE';\n'd_enum_grpc.testing.PayloadType'(V) -> V.\n\nread_group(Bin, FieldNum) ->\n    {NumBytes, EndTagLen} = read_gr_b(Bin, 0, 0, 0, 0, FieldNum),\n    <<Group:NumBytes/binary, _:EndTagLen/binary, Rest/binary>> = Bin,\n    {Group, Rest}.\n\n%% Like skipping over fields, but record the total length,\n%% Each field is <(FieldNum bsl 3) bor FieldType> ++ <FieldValue>\n%% Record the length because varints may be non-optimally encoded.\n%%\n%% Groups can be nested, but assume the same FieldNum cannot be nested\n%% because group field numbers are shared with the rest of the fields\n%% numbers. Thus we can search just for an group-end with the same\n%% field number.\n%%\n%% (The only time the same group field number could occur would\n%% be in a nested sub message, but then it would be inside a\n%% length-delimited entry, which we skip-read by length.)\nread_gr_b(<<1:1, X:7, Tl/binary>>, N, Acc, NumBytes, TagLen, FieldNum)\n  when N < (32-7) ->\n    read_gr_b(Tl, N+7, X bsl N + Acc, NumBytes, TagLen+1, FieldNum);\nread_gr_b(<<0:1, X:7, Tl/binary>>, N, Acc, NumBytes, TagLen,\n          FieldNum) ->\n    Key = X bsl N + Acc,\n    TagLen1 = TagLen + 1,\n    case {Key bsr 3, Key band 7} of\n        {FieldNum, 4} -> % 4 = group_end\n            {NumBytes, TagLen1};\n        {_, 0} -> % 0 = varint\n            read_gr_vi(Tl, 0, NumBytes + TagLen1, FieldNum);\n        {_, 1} -> % 1 = bits64\n            <<_:64, Tl2/binary>> = Tl,\n            read_gr_b(Tl2, 0, 0, NumBytes + TagLen1 + 8, 0, FieldNum);\n        {_, 2} -> % 2 = length_delimited\n            read_gr_ld(Tl, 0, 0, NumBytes + TagLen1, FieldNum);\n        {_, 3} -> % 3 = group_start\n            read_gr_b(Tl, 0, 0, NumBytes + TagLen1, 0, FieldNum);\n        {_, 4} -> % 4 = group_end\n            read_gr_b(Tl, 0, 0, NumBytes + TagLen1, 0, FieldNum);\n        {_, 5} -> % 5 = bits32\n            <<_:32, Tl2/binary>> = Tl,\n            read_gr_b(Tl2, 0, 0, NumBytes + TagLen1 + 4, 0, FieldNum)\n    end.\n\nread_gr_vi(<<1:1, _:7, Tl/binary>>, N, NumBytes, FieldNum)\n  when N < (64-7) ->\n    read_gr_vi(Tl, N+7, NumBytes+1, FieldNum);\nread_gr_vi(<<0:1, _:7, Tl/binary>>, _, NumBytes, FieldNum) ->\n    read_gr_b(Tl, 0, 0, NumBytes+1, 0, FieldNum).\n\nread_gr_ld(<<1:1, X:7, Tl/binary>>, N, Acc, NumBytes, FieldNum)\n  when N < (64-7) ->\n    read_gr_ld(Tl, N+7, X bsl N + Acc, NumBytes+1, FieldNum);\nread_gr_ld(<<0:1, X:7, Tl/binary>>, N, Acc, NumBytes, FieldNum) ->\n    Len = X bsl N + Acc,\n    NumBytes1 = NumBytes + 1,\n    <<_:Len/binary, Tl2/binary>> = Tl,\n    read_gr_b(Tl2, 0, 0, NumBytes1 + Len, 0, FieldNum).\n\nmerge_msgs(Prev, New, MsgName) when is_atom(MsgName) ->\n    merge_msgs(Prev, New, MsgName, []).\n\nmerge_msgs(Prev, New, MsgName, Opts) ->\n    TrUserData = proplists:get_value(user_data, Opts),\n    case MsgName of\n      bool_value ->\n\t  merge_msg_bool_value(Prev, New, TrUserData);\n      payload -> merge_msg_payload(Prev, New, TrUserData);\n      echo_status ->\n\t  merge_msg_echo_status(Prev, New, TrUserData);\n      simple_request ->\n\t  merge_msg_simple_request(Prev, New, TrUserData);\n      simple_response ->\n\t  merge_msg_simple_response(Prev, New, TrUserData);\n      streaming_input_call_request ->\n\t  merge_msg_streaming_input_call_request(Prev, New,\n\t\t\t\t\t\t TrUserData);\n      streaming_input_call_response ->\n\t  merge_msg_streaming_input_call_response(Prev, New,\n\t\t\t\t\t\t  TrUserData);\n      response_parameters ->\n\t  merge_msg_response_parameters(Prev, New, TrUserData);\n      streaming_output_call_request ->\n\t  merge_msg_streaming_output_call_request(Prev, New,\n\t\t\t\t\t\t  TrUserData);\n      streaming_output_call_response ->\n\t  merge_msg_streaming_output_call_response(Prev, New,\n\t\t\t\t\t\t   TrUserData);\n      reconnect_params ->\n\t  merge_msg_reconnect_params(Prev, New, TrUserData);\n      reconnect_info ->\n\t  merge_msg_reconnect_info(Prev, New, TrUserData)\n    end.\n\n-compile({nowarn_unused_function,merge_msg_bool_value/3}).\nmerge_msg_bool_value(PMsg, NMsg, _) ->\n    S1 = #{},\n    case {PMsg, NMsg} of\n      {_, #{value := NFvalue}} -> S1#{value => NFvalue};\n      {#{value := PFvalue}, _} -> S1#{value => PFvalue};\n      _ -> S1\n    end.\n\n-compile({nowarn_unused_function,merge_msg_payload/3}).\nmerge_msg_payload(PMsg, NMsg, _) ->\n    S1 = #{},\n    S2 = case {PMsg, NMsg} of\n\t   {_, #{type := NFtype}} -> S1#{type => NFtype};\n\t   {#{type := PFtype}, _} -> S1#{type => PFtype};\n\t   _ -> S1\n\t end,\n    case {PMsg, NMsg} of\n      {_, #{body := NFbody}} -> S2#{body => NFbody};\n      {#{body := PFbody}, _} -> S2#{body => PFbody};\n      _ -> S2\n    end.\n\n-compile({nowarn_unused_function,merge_msg_echo_status/3}).\nmerge_msg_echo_status(PMsg, NMsg, _) ->\n    S1 = #{},\n    S2 = case {PMsg, NMsg} of\n\t   {_, #{code := NFcode}} -> S1#{code => NFcode};\n\t   {#{code := PFcode}, _} -> S1#{code => PFcode};\n\t   _ -> S1\n\t end,\n    case {PMsg, NMsg} of\n      {_, #{message := NFmessage}} ->\n\t  S2#{message => NFmessage};\n      {#{message := PFmessage}, _} ->\n\t  S2#{message => PFmessage};\n      _ -> S2\n    end.\n\n-compile({nowarn_unused_function,merge_msg_simple_request/3}).\nmerge_msg_simple_request(PMsg, NMsg, TrUserData) ->\n    S1 = #{},\n    S2 = case {PMsg, NMsg} of\n\t   {_, #{response_type := NFresponse_type}} ->\n\t       S1#{response_type => NFresponse_type};\n\t   {#{response_type := PFresponse_type}, _} ->\n\t       S1#{response_type => PFresponse_type};\n\t   _ -> S1\n\t end,\n    S3 = case {PMsg, NMsg} of\n\t   {_, #{response_size := NFresponse_size}} ->\n\t       S2#{response_size => NFresponse_size};\n\t   {#{response_size := PFresponse_size}, _} ->\n\t       S2#{response_size => PFresponse_size};\n\t   _ -> S2\n\t end,\n    S4 = case {PMsg, NMsg} of\n\t   {#{payload := PFpayload}, #{payload := NFpayload}} ->\n\t       S3#{payload =>\n\t\t       merge_msg_payload(PFpayload, NFpayload, TrUserData)};\n\t   {_, #{payload := NFpayload}} ->\n\t       S3#{payload => NFpayload};\n\t   {#{payload := PFpayload}, _} ->\n\t       S3#{payload => PFpayload};\n\t   {_, _} -> S3\n\t end,\n    S5 = case {PMsg, NMsg} of\n\t   {_, #{fill_username := NFfill_username}} ->\n\t       S4#{fill_username => NFfill_username};\n\t   {#{fill_username := PFfill_username}, _} ->\n\t       S4#{fill_username => PFfill_username};\n\t   _ -> S4\n\t end,\n    S6 = case {PMsg, NMsg} of\n\t   {_, #{fill_oauth_scope := NFfill_oauth_scope}} ->\n\t       S5#{fill_oauth_scope => NFfill_oauth_scope};\n\t   {#{fill_oauth_scope := PFfill_oauth_scope}, _} ->\n\t       S5#{fill_oauth_scope => PFfill_oauth_scope};\n\t   _ -> S5\n\t end,\n    S7 = case {PMsg, NMsg} of\n\t   {#{response_compressed := PFresponse_compressed},\n\t    #{response_compressed := NFresponse_compressed}} ->\n\t       S6#{response_compressed =>\n\t\t       merge_msg_bool_value(PFresponse_compressed,\n\t\t\t\t\t    NFresponse_compressed, TrUserData)};\n\t   {_, #{response_compressed := NFresponse_compressed}} ->\n\t       S6#{response_compressed => NFresponse_compressed};\n\t   {#{response_compressed := PFresponse_compressed}, _} ->\n\t       S6#{response_compressed => PFresponse_compressed};\n\t   {_, _} -> S6\n\t end,\n    S8 = case {PMsg, NMsg} of\n\t   {#{response_status := PFresponse_status},\n\t    #{response_status := NFresponse_status}} ->\n\t       S7#{response_status =>\n\t\t       merge_msg_echo_status(PFresponse_status,\n\t\t\t\t\t     NFresponse_status, TrUserData)};\n\t   {_, #{response_status := NFresponse_status}} ->\n\t       S7#{response_status => NFresponse_status};\n\t   {#{response_status := PFresponse_status}, _} ->\n\t       S7#{response_status => PFresponse_status};\n\t   {_, _} -> S7\n\t end,\n    case {PMsg, NMsg} of\n      {#{expect_compressed := PFexpect_compressed},\n       #{expect_compressed := NFexpect_compressed}} ->\n\t  S8#{expect_compressed =>\n\t\t  merge_msg_bool_value(PFexpect_compressed,\n\t\t\t\t       NFexpect_compressed, TrUserData)};\n      {_, #{expect_compressed := NFexpect_compressed}} ->\n\t  S8#{expect_compressed => NFexpect_compressed};\n      {#{expect_compressed := PFexpect_compressed}, _} ->\n\t  S8#{expect_compressed => PFexpect_compressed};\n      {_, _} -> S8\n    end.\n\n-compile({nowarn_unused_function,merge_msg_simple_response/3}).\nmerge_msg_simple_response(PMsg, NMsg, TrUserData) ->\n    S1 = #{},\n    S2 = case {PMsg, NMsg} of\n\t   {#{payload := PFpayload}, #{payload := NFpayload}} ->\n\t       S1#{payload =>\n\t\t       merge_msg_payload(PFpayload, NFpayload, TrUserData)};\n\t   {_, #{payload := NFpayload}} ->\n\t       S1#{payload => NFpayload};\n\t   {#{payload := PFpayload}, _} ->\n\t       S1#{payload => PFpayload};\n\t   {_, _} -> S1\n\t end,\n    S3 = case {PMsg, NMsg} of\n\t   {_, #{username := NFusername}} ->\n\t       S2#{username => NFusername};\n\t   {#{username := PFusername}, _} ->\n\t       S2#{username => PFusername};\n\t   _ -> S2\n\t end,\n    case {PMsg, NMsg} of\n      {_, #{oauth_scope := NFoauth_scope}} ->\n\t  S3#{oauth_scope => NFoauth_scope};\n      {#{oauth_scope := PFoauth_scope}, _} ->\n\t  S3#{oauth_scope => PFoauth_scope};\n      _ -> S3\n    end.\n\n-compile({nowarn_unused_function,merge_msg_streaming_input_call_request/3}).\nmerge_msg_streaming_input_call_request(PMsg, NMsg,\n\t\t\t\t       TrUserData) ->\n    S1 = #{},\n    S2 = case {PMsg, NMsg} of\n\t   {#{payload := PFpayload}, #{payload := NFpayload}} ->\n\t       S1#{payload =>\n\t\t       merge_msg_payload(PFpayload, NFpayload, TrUserData)};\n\t   {_, #{payload := NFpayload}} ->\n\t       S1#{payload => NFpayload};\n\t   {#{payload := PFpayload}, _} ->\n\t       S1#{payload => PFpayload};\n\t   {_, _} -> S1\n\t end,\n    case {PMsg, NMsg} of\n      {#{expect_compressed := PFexpect_compressed},\n       #{expect_compressed := NFexpect_compressed}} ->\n\t  S2#{expect_compressed =>\n\t\t  merge_msg_bool_value(PFexpect_compressed,\n\t\t\t\t       NFexpect_compressed, TrUserData)};\n      {_, #{expect_compressed := NFexpect_compressed}} ->\n\t  S2#{expect_compressed => NFexpect_compressed};\n      {#{expect_compressed := PFexpect_compressed}, _} ->\n\t  S2#{expect_compressed => PFexpect_compressed};\n      {_, _} -> S2\n    end.\n\n-compile({nowarn_unused_function,merge_msg_streaming_input_call_response/3}).\nmerge_msg_streaming_input_call_response(PMsg, NMsg,\n\t\t\t\t\t_) ->\n    S1 = #{},\n    case {PMsg, NMsg} of\n      {_,\n       #{aggregated_payload_size :=\n\t     NFaggregated_payload_size}} ->\n\t  S1#{aggregated_payload_size =>\n\t\t  NFaggregated_payload_size};\n      {#{aggregated_payload_size :=\n\t     PFaggregated_payload_size},\n       _} ->\n\t  S1#{aggregated_payload_size =>\n\t\t  PFaggregated_payload_size};\n      _ -> S1\n    end.\n\n-compile({nowarn_unused_function,merge_msg_response_parameters/3}).\nmerge_msg_response_parameters(PMsg, NMsg, TrUserData) ->\n    S1 = #{},\n    S2 = case {PMsg, NMsg} of\n\t   {_, #{size := NFsize}} -> S1#{size => NFsize};\n\t   {#{size := PFsize}, _} -> S1#{size => PFsize};\n\t   _ -> S1\n\t end,\n    S3 = case {PMsg, NMsg} of\n\t   {_, #{interval_us := NFinterval_us}} ->\n\t       S2#{interval_us => NFinterval_us};\n\t   {#{interval_us := PFinterval_us}, _} ->\n\t       S2#{interval_us => PFinterval_us};\n\t   _ -> S2\n\t end,\n    case {PMsg, NMsg} of\n      {#{compressed := PFcompressed},\n       #{compressed := NFcompressed}} ->\n\t  S3#{compressed =>\n\t\t  merge_msg_bool_value(PFcompressed, NFcompressed,\n\t\t\t\t       TrUserData)};\n      {_, #{compressed := NFcompressed}} ->\n\t  S3#{compressed => NFcompressed};\n      {#{compressed := PFcompressed}, _} ->\n\t  S3#{compressed => PFcompressed};\n      {_, _} -> S3\n    end.\n\n-compile({nowarn_unused_function,merge_msg_streaming_output_call_request/3}).\nmerge_msg_streaming_output_call_request(PMsg, NMsg,\n\t\t\t\t\tTrUserData) ->\n    S1 = #{},\n    S2 = case {PMsg, NMsg} of\n\t   {_, #{response_type := NFresponse_type}} ->\n\t       S1#{response_type => NFresponse_type};\n\t   {#{response_type := PFresponse_type}, _} ->\n\t       S1#{response_type => PFresponse_type};\n\t   _ -> S1\n\t end,\n    S3 = case {PMsg, NMsg} of\n\t   {#{response_parameters := PFresponse_parameters},\n\t    #{response_parameters := NFresponse_parameters}} ->\n\t       S2#{response_parameters =>\n\t\t       'erlang_++'(PFresponse_parameters,\n\t\t\t\t   NFresponse_parameters, TrUserData)};\n\t   {_, #{response_parameters := NFresponse_parameters}} ->\n\t       S2#{response_parameters => NFresponse_parameters};\n\t   {#{response_parameters := PFresponse_parameters}, _} ->\n\t       S2#{response_parameters => PFresponse_parameters};\n\t   {_, _} -> S2\n\t end,\n    S4 = case {PMsg, NMsg} of\n\t   {#{payload := PFpayload}, #{payload := NFpayload}} ->\n\t       S3#{payload =>\n\t\t       merge_msg_payload(PFpayload, NFpayload, TrUserData)};\n\t   {_, #{payload := NFpayload}} ->\n\t       S3#{payload => NFpayload};\n\t   {#{payload := PFpayload}, _} ->\n\t       S3#{payload => PFpayload};\n\t   {_, _} -> S3\n\t end,\n    case {PMsg, NMsg} of\n      {#{response_status := PFresponse_status},\n       #{response_status := NFresponse_status}} ->\n\t  S4#{response_status =>\n\t\t  merge_msg_echo_status(PFresponse_status,\n\t\t\t\t\tNFresponse_status, TrUserData)};\n      {_, #{response_status := NFresponse_status}} ->\n\t  S4#{response_status => NFresponse_status};\n      {#{response_status := PFresponse_status}, _} ->\n\t  S4#{response_status => PFresponse_status};\n      {_, _} -> S4\n    end.\n\n-compile({nowarn_unused_function,merge_msg_streaming_output_call_response/3}).\nmerge_msg_streaming_output_call_response(PMsg, NMsg,\n\t\t\t\t\t TrUserData) ->\n    S1 = #{},\n    case {PMsg, NMsg} of\n      {#{payload := PFpayload}, #{payload := NFpayload}} ->\n\t  S1#{payload =>\n\t\t  merge_msg_payload(PFpayload, NFpayload, TrUserData)};\n      {_, #{payload := NFpayload}} ->\n\t  S1#{payload => NFpayload};\n      {#{payload := PFpayload}, _} ->\n\t  S1#{payload => PFpayload};\n      {_, _} -> S1\n    end.\n\n-compile({nowarn_unused_function,merge_msg_reconnect_params/3}).\nmerge_msg_reconnect_params(PMsg, NMsg, _) ->\n    S1 = #{},\n    case {PMsg, NMsg} of\n      {_,\n       #{max_reconnect_backoff_ms :=\n\t     NFmax_reconnect_backoff_ms}} ->\n\t  S1#{max_reconnect_backoff_ms =>\n\t\t  NFmax_reconnect_backoff_ms};\n      {#{max_reconnect_backoff_ms :=\n\t     PFmax_reconnect_backoff_ms},\n       _} ->\n\t  S1#{max_reconnect_backoff_ms =>\n\t\t  PFmax_reconnect_backoff_ms};\n      _ -> S1\n    end.\n\n-compile({nowarn_unused_function,merge_msg_reconnect_info/3}).\nmerge_msg_reconnect_info(PMsg, NMsg, TrUserData) ->\n    S1 = #{},\n    S2 = case {PMsg, NMsg} of\n\t   {_, #{passed := NFpassed}} -> S1#{passed => NFpassed};\n\t   {#{passed := PFpassed}, _} -> S1#{passed => PFpassed};\n\t   _ -> S1\n\t end,\n    case {PMsg, NMsg} of\n      {#{backoff_ms := PFbackoff_ms},\n       #{backoff_ms := NFbackoff_ms}} ->\n\t  S2#{backoff_ms =>\n\t\t  'erlang_++'(PFbackoff_ms, NFbackoff_ms, TrUserData)};\n      {_, #{backoff_ms := NFbackoff_ms}} ->\n\t  S2#{backoff_ms => NFbackoff_ms};\n      {#{backoff_ms := PFbackoff_ms}, _} ->\n\t  S2#{backoff_ms => PFbackoff_ms};\n      {_, _} -> S2\n    end.\n\n\nverify_msg(Msg, MsgName) when is_atom(MsgName) ->\n    verify_msg(Msg, MsgName, []).\n\nverify_msg(Msg, MsgName, Opts) ->\n    TrUserData = proplists:get_value(user_data, Opts),\n    case MsgName of\n      bool_value ->\n\t  v_msg_bool_value(Msg, [MsgName], TrUserData);\n      payload -> v_msg_payload(Msg, [MsgName], TrUserData);\n      echo_status ->\n\t  v_msg_echo_status(Msg, [MsgName], TrUserData);\n      simple_request ->\n\t  v_msg_simple_request(Msg, [MsgName], TrUserData);\n      simple_response ->\n\t  v_msg_simple_response(Msg, [MsgName], TrUserData);\n      streaming_input_call_request ->\n\t  v_msg_streaming_input_call_request(Msg, [MsgName],\n\t\t\t\t\t     TrUserData);\n      streaming_input_call_response ->\n\t  v_msg_streaming_input_call_response(Msg, [MsgName],\n\t\t\t\t\t      TrUserData);\n      response_parameters ->\n\t  v_msg_response_parameters(Msg, [MsgName], TrUserData);\n      streaming_output_call_request ->\n\t  v_msg_streaming_output_call_request(Msg, [MsgName],\n\t\t\t\t\t      TrUserData);\n      streaming_output_call_response ->\n\t  v_msg_streaming_output_call_response(Msg, [MsgName],\n\t\t\t\t\t       TrUserData);\n      reconnect_params ->\n\t  v_msg_reconnect_params(Msg, [MsgName], TrUserData);\n      reconnect_info ->\n\t  v_msg_reconnect_info(Msg, [MsgName], TrUserData);\n      _ -> mk_type_error(not_a_known_message, Msg, [])\n    end.\n\n\n-compile({nowarn_unused_function,v_msg_bool_value/3}).\n-dialyzer({nowarn_function,v_msg_bool_value/3}).\nv_msg_bool_value(#{} = M, Path, TrUserData) ->\n    case M of\n      #{value := F1} ->\n\t  v_type_bool(F1, [value | Path], TrUserData);\n      _ -> ok\n    end,\n    lists:foreach(fun (value) -> ok;\n\t\t      (OtherKey) ->\n\t\t\t  mk_type_error({extraneous_key, OtherKey}, M, Path)\n\t\t  end,\n\t\t  maps:keys(M)),\n    ok;\nv_msg_bool_value(M, Path, _TrUserData) when is_map(M) ->\n    mk_type_error({missing_fields, [] -- maps:keys(M),\n\t\t   bool_value},\n\t\t  M, Path);\nv_msg_bool_value(X, Path, _TrUserData) ->\n    mk_type_error({expected_msg, bool_value}, X, Path).\n\n-compile({nowarn_unused_function,v_msg_payload/3}).\n-dialyzer({nowarn_function,v_msg_payload/3}).\nv_msg_payload(#{} = M, Path, TrUserData) ->\n    case M of\n      #{type := F1} ->\n\t  'v_enum_grpc.testing.PayloadType'(F1, [type | Path],\n\t\t\t\t\t    TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{body := F2} ->\n\t  v_type_bytes(F2, [body | Path], TrUserData);\n      _ -> ok\n    end,\n    lists:foreach(fun (type) -> ok;\n\t\t      (body) -> ok;\n\t\t      (OtherKey) ->\n\t\t\t  mk_type_error({extraneous_key, OtherKey}, M, Path)\n\t\t  end,\n\t\t  maps:keys(M)),\n    ok;\nv_msg_payload(M, Path, _TrUserData) when is_map(M) ->\n    mk_type_error({missing_fields, [] -- maps:keys(M),\n\t\t   payload},\n\t\t  M, Path);\nv_msg_payload(X, Path, _TrUserData) ->\n    mk_type_error({expected_msg, payload}, X, Path).\n\n-compile({nowarn_unused_function,v_msg_echo_status/3}).\n-dialyzer({nowarn_function,v_msg_echo_status/3}).\nv_msg_echo_status(#{} = M, Path, TrUserData) ->\n    case M of\n      #{code := F1} ->\n\t  v_type_int32(F1, [code | Path], TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{message := F2} ->\n\t  v_type_string(F2, [message | Path], TrUserData);\n      _ -> ok\n    end,\n    lists:foreach(fun (code) -> ok;\n\t\t      (message) -> ok;\n\t\t      (OtherKey) ->\n\t\t\t  mk_type_error({extraneous_key, OtherKey}, M, Path)\n\t\t  end,\n\t\t  maps:keys(M)),\n    ok;\nv_msg_echo_status(M, Path, _TrUserData)\n    when is_map(M) ->\n    mk_type_error({missing_fields, [] -- maps:keys(M),\n\t\t   echo_status},\n\t\t  M, Path);\nv_msg_echo_status(X, Path, _TrUserData) ->\n    mk_type_error({expected_msg, echo_status}, X, Path).\n\n-compile({nowarn_unused_function,v_msg_simple_request/3}).\n-dialyzer({nowarn_function,v_msg_simple_request/3}).\nv_msg_simple_request(#{} = M, Path, TrUserData) ->\n    case M of\n      #{response_type := F1} ->\n\t  'v_enum_grpc.testing.PayloadType'(F1,\n\t\t\t\t\t    [response_type | Path], TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{response_size := F2} ->\n\t  v_type_int32(F2, [response_size | Path], TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{payload := F3} ->\n\t  v_msg_payload(F3, [payload | Path], TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{fill_username := F4} ->\n\t  v_type_bool(F4, [fill_username | Path], TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{fill_oauth_scope := F5} ->\n\t  v_type_bool(F5, [fill_oauth_scope | Path], TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{response_compressed := F6} ->\n\t  v_msg_bool_value(F6, [response_compressed | Path],\n\t\t\t   TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{response_status := F7} ->\n\t  v_msg_echo_status(F7, [response_status | Path],\n\t\t\t    TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{expect_compressed := F8} ->\n\t  v_msg_bool_value(F8, [expect_compressed | Path],\n\t\t\t   TrUserData);\n      _ -> ok\n    end,\n    lists:foreach(fun (response_type) -> ok;\n\t\t      (response_size) -> ok;\n\t\t      (payload) -> ok;\n\t\t      (fill_username) -> ok;\n\t\t      (fill_oauth_scope) -> ok;\n\t\t      (response_compressed) -> ok;\n\t\t      (response_status) -> ok;\n\t\t      (expect_compressed) -> ok;\n\t\t      (OtherKey) ->\n\t\t\t  mk_type_error({extraneous_key, OtherKey}, M, Path)\n\t\t  end,\n\t\t  maps:keys(M)),\n    ok;\nv_msg_simple_request(M, Path, _TrUserData)\n    when is_map(M) ->\n    mk_type_error({missing_fields, [] -- maps:keys(M),\n\t\t   simple_request},\n\t\t  M, Path);\nv_msg_simple_request(X, Path, _TrUserData) ->\n    mk_type_error({expected_msg, simple_request}, X, Path).\n\n-compile({nowarn_unused_function,v_msg_simple_response/3}).\n-dialyzer({nowarn_function,v_msg_simple_response/3}).\nv_msg_simple_response(#{} = M, Path, TrUserData) ->\n    case M of\n      #{payload := F1} ->\n\t  v_msg_payload(F1, [payload | Path], TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{username := F2} ->\n\t  v_type_string(F2, [username | Path], TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{oauth_scope := F3} ->\n\t  v_type_string(F3, [oauth_scope | Path], TrUserData);\n      _ -> ok\n    end,\n    lists:foreach(fun (payload) -> ok;\n\t\t      (username) -> ok;\n\t\t      (oauth_scope) -> ok;\n\t\t      (OtherKey) ->\n\t\t\t  mk_type_error({extraneous_key, OtherKey}, M, Path)\n\t\t  end,\n\t\t  maps:keys(M)),\n    ok;\nv_msg_simple_response(M, Path, _TrUserData)\n    when is_map(M) ->\n    mk_type_error({missing_fields, [] -- maps:keys(M),\n\t\t   simple_response},\n\t\t  M, Path);\nv_msg_simple_response(X, Path, _TrUserData) ->\n    mk_type_error({expected_msg, simple_response}, X, Path).\n\n-compile({nowarn_unused_function,v_msg_streaming_input_call_request/3}).\n-dialyzer({nowarn_function,v_msg_streaming_input_call_request/3}).\nv_msg_streaming_input_call_request(#{} = M, Path,\n\t\t\t\t   TrUserData) ->\n    case M of\n      #{payload := F1} ->\n\t  v_msg_payload(F1, [payload | Path], TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{expect_compressed := F2} ->\n\t  v_msg_bool_value(F2, [expect_compressed | Path],\n\t\t\t   TrUserData);\n      _ -> ok\n    end,\n    lists:foreach(fun (payload) -> ok;\n\t\t      (expect_compressed) -> ok;\n\t\t      (OtherKey) ->\n\t\t\t  mk_type_error({extraneous_key, OtherKey}, M, Path)\n\t\t  end,\n\t\t  maps:keys(M)),\n    ok;\nv_msg_streaming_input_call_request(M, Path, _TrUserData)\n    when is_map(M) ->\n    mk_type_error({missing_fields, [] -- maps:keys(M),\n\t\t   streaming_input_call_request},\n\t\t  M, Path);\nv_msg_streaming_input_call_request(X, Path,\n\t\t\t\t   _TrUserData) ->\n    mk_type_error({expected_msg,\n\t\t   streaming_input_call_request},\n\t\t  X, Path).\n\n-compile({nowarn_unused_function,v_msg_streaming_input_call_response/3}).\n-dialyzer({nowarn_function,v_msg_streaming_input_call_response/3}).\nv_msg_streaming_input_call_response(#{} = M, Path,\n\t\t\t\t    TrUserData) ->\n    case M of\n      #{aggregated_payload_size := F1} ->\n\t  v_type_int32(F1, [aggregated_payload_size | Path],\n\t\t       TrUserData);\n      _ -> ok\n    end,\n    lists:foreach(fun (aggregated_payload_size) -> ok;\n\t\t      (OtherKey) ->\n\t\t\t  mk_type_error({extraneous_key, OtherKey}, M, Path)\n\t\t  end,\n\t\t  maps:keys(M)),\n    ok;\nv_msg_streaming_input_call_response(M, Path,\n\t\t\t\t    _TrUserData)\n    when is_map(M) ->\n    mk_type_error({missing_fields, [] -- maps:keys(M),\n\t\t   streaming_input_call_response},\n\t\t  M, Path);\nv_msg_streaming_input_call_response(X, Path,\n\t\t\t\t    _TrUserData) ->\n    mk_type_error({expected_msg,\n\t\t   streaming_input_call_response},\n\t\t  X, Path).\n\n-compile({nowarn_unused_function,v_msg_response_parameters/3}).\n-dialyzer({nowarn_function,v_msg_response_parameters/3}).\nv_msg_response_parameters(#{} = M, Path, TrUserData) ->\n    case M of\n      #{size := F1} ->\n\t  v_type_int32(F1, [size | Path], TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{interval_us := F2} ->\n\t  v_type_int32(F2, [interval_us | Path], TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{compressed := F3} ->\n\t  v_msg_bool_value(F3, [compressed | Path], TrUserData);\n      _ -> ok\n    end,\n    lists:foreach(fun (size) -> ok;\n\t\t      (interval_us) -> ok;\n\t\t      (compressed) -> ok;\n\t\t      (OtherKey) ->\n\t\t\t  mk_type_error({extraneous_key, OtherKey}, M, Path)\n\t\t  end,\n\t\t  maps:keys(M)),\n    ok;\nv_msg_response_parameters(M, Path, _TrUserData)\n    when is_map(M) ->\n    mk_type_error({missing_fields, [] -- maps:keys(M),\n\t\t   response_parameters},\n\t\t  M, Path);\nv_msg_response_parameters(X, Path, _TrUserData) ->\n    mk_type_error({expected_msg, response_parameters}, X,\n\t\t  Path).\n\n-compile({nowarn_unused_function,v_msg_streaming_output_call_request/3}).\n-dialyzer({nowarn_function,v_msg_streaming_output_call_request/3}).\nv_msg_streaming_output_call_request(#{} = M, Path,\n\t\t\t\t    TrUserData) ->\n    case M of\n      #{response_type := F1} ->\n\t  'v_enum_grpc.testing.PayloadType'(F1,\n\t\t\t\t\t    [response_type | Path], TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{response_parameters := F2} ->\n\t  if is_list(F2) ->\n\t\t _ = [v_msg_response_parameters(Elem,\n\t\t\t\t\t\t[response_parameters | Path],\n\t\t\t\t\t\tTrUserData)\n\t\t      || Elem <- F2],\n\t\t ok;\n\t     true ->\n\t\t mk_type_error({invalid_list_of,\n\t\t\t\t{msg, response_parameters}},\n\t\t\t       F2, [response_parameters | Path])\n\t  end;\n      _ -> ok\n    end,\n    case M of\n      #{payload := F3} ->\n\t  v_msg_payload(F3, [payload | Path], TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{response_status := F4} ->\n\t  v_msg_echo_status(F4, [response_status | Path],\n\t\t\t    TrUserData);\n      _ -> ok\n    end,\n    lists:foreach(fun (response_type) -> ok;\n\t\t      (response_parameters) -> ok;\n\t\t      (payload) -> ok;\n\t\t      (response_status) -> ok;\n\t\t      (OtherKey) ->\n\t\t\t  mk_type_error({extraneous_key, OtherKey}, M, Path)\n\t\t  end,\n\t\t  maps:keys(M)),\n    ok;\nv_msg_streaming_output_call_request(M, Path,\n\t\t\t\t    _TrUserData)\n    when is_map(M) ->\n    mk_type_error({missing_fields, [] -- maps:keys(M),\n\t\t   streaming_output_call_request},\n\t\t  M, Path);\nv_msg_streaming_output_call_request(X, Path,\n\t\t\t\t    _TrUserData) ->\n    mk_type_error({expected_msg,\n\t\t   streaming_output_call_request},\n\t\t  X, Path).\n\n-compile({nowarn_unused_function,v_msg_streaming_output_call_response/3}).\n-dialyzer({nowarn_function,v_msg_streaming_output_call_response/3}).\nv_msg_streaming_output_call_response(#{} = M, Path,\n\t\t\t\t     TrUserData) ->\n    case M of\n      #{payload := F1} ->\n\t  v_msg_payload(F1, [payload | Path], TrUserData);\n      _ -> ok\n    end,\n    lists:foreach(fun (payload) -> ok;\n\t\t      (OtherKey) ->\n\t\t\t  mk_type_error({extraneous_key, OtherKey}, M, Path)\n\t\t  end,\n\t\t  maps:keys(M)),\n    ok;\nv_msg_streaming_output_call_response(M, Path,\n\t\t\t\t     _TrUserData)\n    when is_map(M) ->\n    mk_type_error({missing_fields, [] -- maps:keys(M),\n\t\t   streaming_output_call_response},\n\t\t  M, Path);\nv_msg_streaming_output_call_response(X, Path,\n\t\t\t\t     _TrUserData) ->\n    mk_type_error({expected_msg,\n\t\t   streaming_output_call_response},\n\t\t  X, Path).\n\n-compile({nowarn_unused_function,v_msg_reconnect_params/3}).\n-dialyzer({nowarn_function,v_msg_reconnect_params/3}).\nv_msg_reconnect_params(#{} = M, Path, TrUserData) ->\n    case M of\n      #{max_reconnect_backoff_ms := F1} ->\n\t  v_type_int32(F1, [max_reconnect_backoff_ms | Path],\n\t\t       TrUserData);\n      _ -> ok\n    end,\n    lists:foreach(fun (max_reconnect_backoff_ms) -> ok;\n\t\t      (OtherKey) ->\n\t\t\t  mk_type_error({extraneous_key, OtherKey}, M, Path)\n\t\t  end,\n\t\t  maps:keys(M)),\n    ok;\nv_msg_reconnect_params(M, Path, _TrUserData)\n    when is_map(M) ->\n    mk_type_error({missing_fields, [] -- maps:keys(M),\n\t\t   reconnect_params},\n\t\t  M, Path);\nv_msg_reconnect_params(X, Path, _TrUserData) ->\n    mk_type_error({expected_msg, reconnect_params}, X,\n\t\t  Path).\n\n-compile({nowarn_unused_function,v_msg_reconnect_info/3}).\n-dialyzer({nowarn_function,v_msg_reconnect_info/3}).\nv_msg_reconnect_info(#{} = M, Path, TrUserData) ->\n    case M of\n      #{passed := F1} ->\n\t  v_type_bool(F1, [passed | Path], TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{backoff_ms := F2} ->\n\t  if is_list(F2) ->\n\t\t _ = [v_type_int32(Elem, [backoff_ms | Path], TrUserData)\n\t\t      || Elem <- F2],\n\t\t ok;\n\t     true ->\n\t\t mk_type_error({invalid_list_of, int32}, F2,\n\t\t\t       [backoff_ms | Path])\n\t  end;\n      _ -> ok\n    end,\n    lists:foreach(fun (passed) -> ok;\n\t\t      (backoff_ms) -> ok;\n\t\t      (OtherKey) ->\n\t\t\t  mk_type_error({extraneous_key, OtherKey}, M, Path)\n\t\t  end,\n\t\t  maps:keys(M)),\n    ok;\nv_msg_reconnect_info(M, Path, _TrUserData)\n    when is_map(M) ->\n    mk_type_error({missing_fields, [] -- maps:keys(M),\n\t\t   reconnect_info},\n\t\t  M, Path);\nv_msg_reconnect_info(X, Path, _TrUserData) ->\n    mk_type_error({expected_msg, reconnect_info}, X, Path).\n\n-compile({nowarn_unused_function,'v_enum_grpc.testing.PayloadType'/3}).\n-dialyzer({nowarn_function,'v_enum_grpc.testing.PayloadType'/3}).\n'v_enum_grpc.testing.PayloadType'('COMPRESSABLE', _Path,\n\t\t\t\t  _TrUserData) ->\n    ok;\n'v_enum_grpc.testing.PayloadType'(V, Path, TrUserData)\n    when is_integer(V) ->\n    v_type_sint32(V, Path, TrUserData);\n'v_enum_grpc.testing.PayloadType'(X, Path,\n\t\t\t\t  _TrUserData) ->\n    mk_type_error({invalid_enum,\n\t\t   'grpc.testing.PayloadType'},\n\t\t  X, Path).\n\n-compile({nowarn_unused_function,v_type_sint32/3}).\n-dialyzer({nowarn_function,v_type_sint32/3}).\nv_type_sint32(N, _Path, _TrUserData)\n    when -2147483648 =< N, N =< 2147483647 ->\n    ok;\nv_type_sint32(N, Path, _TrUserData)\n    when is_integer(N) ->\n    mk_type_error({value_out_of_range, sint32, signed, 32},\n\t\t  N, Path);\nv_type_sint32(X, Path, _TrUserData) ->\n    mk_type_error({bad_integer, sint32, signed, 32}, X,\n\t\t  Path).\n\n-compile({nowarn_unused_function,v_type_int32/3}).\n-dialyzer({nowarn_function,v_type_int32/3}).\nv_type_int32(N, _Path, _TrUserData)\n    when -2147483648 =< N, N =< 2147483647 ->\n    ok;\nv_type_int32(N, Path, _TrUserData) when is_integer(N) ->\n    mk_type_error({value_out_of_range, int32, signed, 32},\n\t\t  N, Path);\nv_type_int32(X, Path, _TrUserData) ->\n    mk_type_error({bad_integer, int32, signed, 32}, X,\n\t\t  Path).\n\n-compile({nowarn_unused_function,v_type_bool/3}).\n-dialyzer({nowarn_function,v_type_bool/3}).\nv_type_bool(false, _Path, _TrUserData) -> ok;\nv_type_bool(true, _Path, _TrUserData) -> ok;\nv_type_bool(0, _Path, _TrUserData) -> ok;\nv_type_bool(1, _Path, _TrUserData) -> ok;\nv_type_bool(X, Path, _TrUserData) ->\n    mk_type_error(bad_boolean_value, X, Path).\n\n-compile({nowarn_unused_function,v_type_string/3}).\n-dialyzer({nowarn_function,v_type_string/3}).\nv_type_string(S, Path, _TrUserData)\n    when is_list(S); is_binary(S) ->\n    try unicode:characters_to_binary(S) of\n      B when is_binary(B) -> ok;\n      {error, _, _} ->\n\t  mk_type_error(bad_unicode_string, S, Path)\n    catch\n      error:badarg ->\n\t  mk_type_error(bad_unicode_string, S, Path)\n    end;\nv_type_string(X, Path, _TrUserData) ->\n    mk_type_error(bad_unicode_string, X, Path).\n\n-compile({nowarn_unused_function,v_type_bytes/3}).\n-dialyzer({nowarn_function,v_type_bytes/3}).\nv_type_bytes(B, _Path, _TrUserData) when is_binary(B) ->\n    ok;\nv_type_bytes(B, _Path, _TrUserData) when is_list(B) ->\n    ok;\nv_type_bytes(X, Path, _TrUserData) ->\n    mk_type_error(bad_binary_value, X, Path).\n\n-compile({nowarn_unused_function,mk_type_error/3}).\n-spec mk_type_error(_, _, list()) -> no_return().\nmk_type_error(Error, ValueSeen, Path) ->\n    Path2 = prettify_path(Path),\n    erlang:error({gpb_type_error,\n\t\t  {Error, [{value, ValueSeen}, {path, Path2}]}}).\n\n\n-compile({nowarn_unused_function,prettify_path/1}).\n-dialyzer({nowarn_function,prettify_path/1}).\nprettify_path([]) -> top_level;\nprettify_path(PathR) ->\n    list_to_atom(lists:append(lists:join(\".\",\n\t\t\t\t\t lists:map(fun atom_to_list/1,\n\t\t\t\t\t\t   lists:reverse(PathR))))).\n\n\n-compile({nowarn_unused_function,id/2}).\n-compile({inline,id/2}).\nid(X, _TrUserData) -> X.\n\n-compile({nowarn_unused_function,v_ok/3}).\n-compile({inline,v_ok/3}).\nv_ok(_Value, _Path, _TrUserData) -> ok.\n\n-compile({nowarn_unused_function,m_overwrite/3}).\n-compile({inline,m_overwrite/3}).\nm_overwrite(_Prev, New, _TrUserData) -> New.\n\n-compile({nowarn_unused_function,cons/3}).\n-compile({inline,cons/3}).\ncons(Elem, Acc, _TrUserData) -> [Elem | Acc].\n\n-compile({nowarn_unused_function,lists_reverse/2}).\n-compile({inline,lists_reverse/2}).\n'lists_reverse'(L, _TrUserData) -> lists:reverse(L).\n-compile({nowarn_unused_function,'erlang_++'/3}).\n-compile({inline,'erlang_++'/3}).\n'erlang_++'(A, B, _TrUserData) -> A ++ B.\n\nget_msg_defs() ->\n    [{{enum, 'grpc.testing.PayloadType'},\n      [{'COMPRESSABLE', 0}]},\n     {{msg, bool_value},\n      [#{name => value, fnum => 1, rnum => 2, type => bool,\n\t occurrence => optional, opts => []}]},\n     {{msg, payload},\n      [#{name => type, fnum => 1, rnum => 2,\n\t type => {enum, 'grpc.testing.PayloadType'},\n\t occurrence => optional, opts => []},\n       #{name => body, fnum => 2, rnum => 3, type => bytes,\n\t occurrence => optional, opts => []}]},\n     {{msg, echo_status},\n      [#{name => code, fnum => 1, rnum => 2, type => int32,\n\t occurrence => optional, opts => []},\n       #{name => message, fnum => 2, rnum => 3, type => string,\n\t occurrence => optional, opts => []}]},\n     {{msg, simple_request},\n      [#{name => response_type, fnum => 1, rnum => 2,\n\t type => {enum, 'grpc.testing.PayloadType'},\n\t occurrence => optional, opts => []},\n       #{name => response_size, fnum => 2, rnum => 3,\n\t type => int32, occurrence => optional, opts => []},\n       #{name => payload, fnum => 3, rnum => 4,\n\t type => {msg, payload}, occurrence => optional,\n\t opts => []},\n       #{name => fill_username, fnum => 4, rnum => 5,\n\t type => bool, occurrence => optional, opts => []},\n       #{name => fill_oauth_scope, fnum => 5, rnum => 6,\n\t type => bool, occurrence => optional, opts => []},\n       #{name => response_compressed, fnum => 6, rnum => 7,\n\t type => {msg, bool_value}, occurrence => optional,\n\t opts => []},\n       #{name => response_status, fnum => 7, rnum => 8,\n\t type => {msg, echo_status}, occurrence => optional,\n\t opts => []},\n       #{name => expect_compressed, fnum => 8, rnum => 9,\n\t type => {msg, bool_value}, occurrence => optional,\n\t opts => []}]},\n     {{msg, simple_response},\n      [#{name => payload, fnum => 1, rnum => 2,\n\t type => {msg, payload}, occurrence => optional,\n\t opts => []},\n       #{name => username, fnum => 2, rnum => 3,\n\t type => string, occurrence => optional, opts => []},\n       #{name => oauth_scope, fnum => 3, rnum => 4,\n\t type => string, occurrence => optional, opts => []}]},\n     {{msg, streaming_input_call_request},\n      [#{name => payload, fnum => 1, rnum => 2,\n\t type => {msg, payload}, occurrence => optional,\n\t opts => []},\n       #{name => expect_compressed, fnum => 2, rnum => 3,\n\t type => {msg, bool_value}, occurrence => optional,\n\t opts => []}]},\n     {{msg, streaming_input_call_response},\n      [#{name => aggregated_payload_size, fnum => 1,\n\t rnum => 2, type => int32, occurrence => optional,\n\t opts => []}]},\n     {{msg, response_parameters},\n      [#{name => size, fnum => 1, rnum => 2, type => int32,\n\t occurrence => optional, opts => []},\n       #{name => interval_us, fnum => 2, rnum => 3,\n\t type => int32, occurrence => optional, opts => []},\n       #{name => compressed, fnum => 3, rnum => 4,\n\t type => {msg, bool_value}, occurrence => optional,\n\t opts => []}]},\n     {{msg, streaming_output_call_request},\n      [#{name => response_type, fnum => 1, rnum => 2,\n\t type => {enum, 'grpc.testing.PayloadType'},\n\t occurrence => optional, opts => []},\n       #{name => response_parameters, fnum => 2, rnum => 3,\n\t type => {msg, response_parameters},\n\t occurrence => repeated, opts => []},\n       #{name => payload, fnum => 3, rnum => 4,\n\t type => {msg, payload}, occurrence => optional,\n\t opts => []},\n       #{name => response_status, fnum => 7, rnum => 5,\n\t type => {msg, echo_status}, occurrence => optional,\n\t opts => []}]},\n     {{msg, streaming_output_call_response},\n      [#{name => payload, fnum => 1, rnum => 2,\n\t type => {msg, payload}, occurrence => optional,\n\t opts => []}]},\n     {{msg, reconnect_params},\n      [#{name => max_reconnect_backoff_ms, fnum => 1,\n\t rnum => 2, type => int32, occurrence => optional,\n\t opts => []}]},\n     {{msg, reconnect_info},\n      [#{name => passed, fnum => 1, rnum => 2, type => bool,\n\t occurrence => optional, opts => []},\n       #{name => backoff_ms, fnum => 2, rnum => 3,\n\t type => int32, occurrence => repeated,\n\t opts => [packed]}]}].\n\n\nget_msg_names() ->\n    [bool_value, payload, echo_status, simple_request,\n     simple_response, streaming_input_call_request,\n     streaming_input_call_response, response_parameters,\n     streaming_output_call_request,\n     streaming_output_call_response, reconnect_params,\n     reconnect_info].\n\n\nget_group_names() -> [].\n\n\nget_msg_or_group_names() ->\n    [bool_value, payload, echo_status, simple_request,\n     simple_response, streaming_input_call_request,\n     streaming_input_call_response, response_parameters,\n     streaming_output_call_request,\n     streaming_output_call_response, reconnect_params,\n     reconnect_info].\n\n\nget_enum_names() -> ['grpc.testing.PayloadType'].\n\n\nfetch_msg_def(MsgName) ->\n    case find_msg_def(MsgName) of\n      Fs when is_list(Fs) -> Fs;\n      error -> erlang:error({no_such_msg, MsgName})\n    end.\n\n\nfetch_enum_def(EnumName) ->\n    case find_enum_def(EnumName) of\n      Es when is_list(Es) -> Es;\n      error -> erlang:error({no_such_enum, EnumName})\n    end.\n\n\nfind_msg_def(bool_value) ->\n    [#{name => value, fnum => 1, rnum => 2, type => bool,\n       occurrence => optional, opts => []}];\nfind_msg_def(payload) ->\n    [#{name => type, fnum => 1, rnum => 2,\n       type => {enum, 'grpc.testing.PayloadType'},\n       occurrence => optional, opts => []},\n     #{name => body, fnum => 2, rnum => 3, type => bytes,\n       occurrence => optional, opts => []}];\nfind_msg_def(echo_status) ->\n    [#{name => code, fnum => 1, rnum => 2, type => int32,\n       occurrence => optional, opts => []},\n     #{name => message, fnum => 2, rnum => 3, type => string,\n       occurrence => optional, opts => []}];\nfind_msg_def(simple_request) ->\n    [#{name => response_type, fnum => 1, rnum => 2,\n       type => {enum, 'grpc.testing.PayloadType'},\n       occurrence => optional, opts => []},\n     #{name => response_size, fnum => 2, rnum => 3,\n       type => int32, occurrence => optional, opts => []},\n     #{name => payload, fnum => 3, rnum => 4,\n       type => {msg, payload}, occurrence => optional,\n       opts => []},\n     #{name => fill_username, fnum => 4, rnum => 5,\n       type => bool, occurrence => optional, opts => []},\n     #{name => fill_oauth_scope, fnum => 5, rnum => 6,\n       type => bool, occurrence => optional, opts => []},\n     #{name => response_compressed, fnum => 6, rnum => 7,\n       type => {msg, bool_value}, occurrence => optional,\n       opts => []},\n     #{name => response_status, fnum => 7, rnum => 8,\n       type => {msg, echo_status}, occurrence => optional,\n       opts => []},\n     #{name => expect_compressed, fnum => 8, rnum => 9,\n       type => {msg, bool_value}, occurrence => optional,\n       opts => []}];\nfind_msg_def(simple_response) ->\n    [#{name => payload, fnum => 1, rnum => 2,\n       type => {msg, payload}, occurrence => optional,\n       opts => []},\n     #{name => username, fnum => 2, rnum => 3,\n       type => string, occurrence => optional, opts => []},\n     #{name => oauth_scope, fnum => 3, rnum => 4,\n       type => string, occurrence => optional, opts => []}];\nfind_msg_def(streaming_input_call_request) ->\n    [#{name => payload, fnum => 1, rnum => 2,\n       type => {msg, payload}, occurrence => optional,\n       opts => []},\n     #{name => expect_compressed, fnum => 2, rnum => 3,\n       type => {msg, bool_value}, occurrence => optional,\n       opts => []}];\nfind_msg_def(streaming_input_call_response) ->\n    [#{name => aggregated_payload_size, fnum => 1,\n       rnum => 2, type => int32, occurrence => optional,\n       opts => []}];\nfind_msg_def(response_parameters) ->\n    [#{name => size, fnum => 1, rnum => 2, type => int32,\n       occurrence => optional, opts => []},\n     #{name => interval_us, fnum => 2, rnum => 3,\n       type => int32, occurrence => optional, opts => []},\n     #{name => compressed, fnum => 3, rnum => 4,\n       type => {msg, bool_value}, occurrence => optional,\n       opts => []}];\nfind_msg_def(streaming_output_call_request) ->\n    [#{name => response_type, fnum => 1, rnum => 2,\n       type => {enum, 'grpc.testing.PayloadType'},\n       occurrence => optional, opts => []},\n     #{name => response_parameters, fnum => 2, rnum => 3,\n       type => {msg, response_parameters},\n       occurrence => repeated, opts => []},\n     #{name => payload, fnum => 3, rnum => 4,\n       type => {msg, payload}, occurrence => optional,\n       opts => []},\n     #{name => response_status, fnum => 7, rnum => 5,\n       type => {msg, echo_status}, occurrence => optional,\n       opts => []}];\nfind_msg_def(streaming_output_call_response) ->\n    [#{name => payload, fnum => 1, rnum => 2,\n       type => {msg, payload}, occurrence => optional,\n       opts => []}];\nfind_msg_def(reconnect_params) ->\n    [#{name => max_reconnect_backoff_ms, fnum => 1,\n       rnum => 2, type => int32, occurrence => optional,\n       opts => []}];\nfind_msg_def(reconnect_info) ->\n    [#{name => passed, fnum => 1, rnum => 2, type => bool,\n       occurrence => optional, opts => []},\n     #{name => backoff_ms, fnum => 2, rnum => 3,\n       type => int32, occurrence => repeated,\n       opts => [packed]}];\nfind_msg_def(_) -> error.\n\n\nfind_enum_def('grpc.testing.PayloadType') ->\n    [{'COMPRESSABLE', 0}];\nfind_enum_def(_) -> error.\n\n\nenum_symbol_by_value('grpc.testing.PayloadType',\n\t\t     Value) ->\n    'enum_symbol_by_value_grpc.testing.PayloadType'(Value).\n\n\nenum_value_by_symbol('grpc.testing.PayloadType', Sym) ->\n    'enum_value_by_symbol_grpc.testing.PayloadType'(Sym).\n\n\n'enum_symbol_by_value_grpc.testing.PayloadType'(0) ->\n    'COMPRESSABLE'.\n\n\n'enum_value_by_symbol_grpc.testing.PayloadType'('COMPRESSABLE') ->\n    0.\n\n\nget_service_names() -> [].\n\n\nget_service_def(_) -> error.\n\n\nget_rpc_names(_) -> error.\n\n\nfind_rpc_def(_, _) -> error.\n\n\n\n-spec fetch_rpc_def(_, _) -> no_return().\nfetch_rpc_def(ServiceName, RpcName) ->\n    erlang:error({no_such_rpc, ServiceName, RpcName}).\n\n\n%% Convert a a fully qualified (ie with package name) service name\n%% as a binary to a service name as an atom.\n-spec fqbin_to_service_name(_) -> no_return().\nfqbin_to_service_name(X) ->\n    error({gpb_error, {badservice, X}}).\n\n\n%% Convert a service name as an atom to a fully qualified\n%% (ie with package name) name as a binary.\n-spec service_name_to_fqbin(_) -> no_return().\nservice_name_to_fqbin(X) ->\n    error({gpb_error, {badservice, X}}).\n\n\n%% Convert a a fully qualified (ie with package name) service name\n%% and an rpc name, both as binaries to a service name and an rpc\n%% name, as atoms.\n-spec fqbins_to_service_and_rpc_name(_, _) -> no_return().\nfqbins_to_service_and_rpc_name(S, R) ->\n    error({gpb_error, {badservice_or_rpc, {S, R}}}).\n\n\n%% Convert a service name and an rpc name, both as atoms,\n%% to a fully qualified (ie with package name) service name and\n%% an rpc name as binaries.\n-spec service_and_rpc_name_to_fqbins(_, _) -> no_return().\nservice_and_rpc_name_to_fqbins(S, R) ->\n    error({gpb_error, {badservice_or_rpc, {S, R}}}).\n\n\nfqbin_to_msg_name(<<\"grpc.testing.BoolValue\">>) -> bool_value;\nfqbin_to_msg_name(<<\"grpc.testing.Payload\">>) -> payload;\nfqbin_to_msg_name(<<\"grpc.testing.EchoStatus\">>) -> echo_status;\nfqbin_to_msg_name(<<\"grpc.testing.SimpleRequest\">>) -> simple_request;\nfqbin_to_msg_name(<<\"grpc.testing.SimpleResponse\">>) -> simple_response;\nfqbin_to_msg_name(<<\"grpc.testing.StreamingInputCallRequest\">>) ->\n    streaming_input_call_request;\nfqbin_to_msg_name(<<\"grpc.testing.StreamingInputCallResponse\">>) ->\n    streaming_input_call_response;\nfqbin_to_msg_name(<<\"grpc.testing.ResponseParameters\">>) -> response_parameters;\nfqbin_to_msg_name(<<\"grpc.testing.StreamingOutputCallRequest\">>) ->\n    streaming_output_call_request;\nfqbin_to_msg_name(<<\"grpc.testing.StreamingOutputCallResponse\">>) ->\n    streaming_output_call_response;\nfqbin_to_msg_name(<<\"grpc.testing.ReconnectParams\">>) -> reconnect_params;\nfqbin_to_msg_name(<<\"grpc.testing.ReconnectInfo\">>) -> reconnect_info;\nfqbin_to_msg_name(E) -> error({gpb_error, {badmsg, E}}).\n\n\nmsg_name_to_fqbin(bool_value) -> <<\"grpc.testing.BoolValue\">>;\nmsg_name_to_fqbin(payload) -> <<\"grpc.testing.Payload\">>;\nmsg_name_to_fqbin(echo_status) -> <<\"grpc.testing.EchoStatus\">>;\nmsg_name_to_fqbin(simple_request) -> <<\"grpc.testing.SimpleRequest\">>;\nmsg_name_to_fqbin(simple_response) -> <<\"grpc.testing.SimpleResponse\">>;\nmsg_name_to_fqbin(streaming_input_call_request) ->\n    <<\"grpc.testing.StreamingInputCallRequest\">>;\nmsg_name_to_fqbin(streaming_input_call_response) ->\n    <<\"grpc.testing.StreamingInputCallResponse\">>;\nmsg_name_to_fqbin(response_parameters) -> <<\"grpc.testing.ResponseParameters\">>;\nmsg_name_to_fqbin(streaming_output_call_request) ->\n    <<\"grpc.testing.StreamingOutputCallRequest\">>;\nmsg_name_to_fqbin(streaming_output_call_response) ->\n    <<\"grpc.testing.StreamingOutputCallResponse\">>;\nmsg_name_to_fqbin(reconnect_params) -> <<\"grpc.testing.ReconnectParams\">>;\nmsg_name_to_fqbin(reconnect_info) -> <<\"grpc.testing.ReconnectInfo\">>;\nmsg_name_to_fqbin(E) -> error({gpb_error, {badmsg, E}}).\n\n\nfqbin_to_enum_name(<<\"grpc.testing.PayloadType\">>) ->\n    'grpc.testing.PayloadType';\nfqbin_to_enum_name(E) ->\n    error({gpb_error, {badenum, E}}).\n\n\nenum_name_to_fqbin('grpc.testing.PayloadType') ->\n    <<\"grpc.testing.PayloadType\">>;\nenum_name_to_fqbin(E) ->\n    error({gpb_error, {badenum, E}}).\n\n\nget_package_name() -> 'grpc.testing'.\n\n\n%% Whether or not the message names\n%% are prepended with package name or not.\nuses_packages() -> true.\n\n\nsource_basename() -> \"messages.proto\".\n\n\n%% Retrieve all proto file names, also imported ones.\n%% The order is top-down. The first element is always the main\n%% source file. The files are returned with extension,\n%% see get_all_proto_names/0 for a version that returns\n%% the basenames sans extension\nget_all_source_basenames() -> [\"messages.proto\"].\n\n\n%% Retrieve all proto file names, also imported ones.\n%% The order is top-down. The first element is always the main\n%% source file. The files are returned sans .proto extension,\n%% to make it easier to use them with the various get_xyz_containment\n%% functions.\nget_all_proto_names() -> [\"messages\"].\n\n\nget_msg_containment(\"messages\") ->\n    [bool_value, echo_status, payload, reconnect_info,\n     reconnect_params, response_parameters, simple_request,\n     simple_response, streaming_input_call_request,\n     streaming_input_call_response,\n     streaming_output_call_request,\n     streaming_output_call_response];\nget_msg_containment(P) ->\n    error({gpb_error, {badproto, P}}).\n\n\nget_pkg_containment(\"messages\") -> 'grpc.testing';\nget_pkg_containment(P) ->\n    error({gpb_error, {badproto, P}}).\n\n\nget_service_containment(\"messages\") -> [];\nget_service_containment(P) ->\n    error({gpb_error, {badproto, P}}).\n\n\nget_rpc_containment(\"messages\") -> [];\nget_rpc_containment(P) ->\n    error({gpb_error, {badproto, P}}).\n\n\nget_enum_containment(\"messages\") ->\n    ['grpc.testing.PayloadType'];\nget_enum_containment(P) ->\n    error({gpb_error, {badproto, P}}).\n\n\nget_proto_by_msg_name_as_fqbin(<<\"grpc.testing.ResponseParameters\">>) -> \"messages\";\nget_proto_by_msg_name_as_fqbin(<<\"grpc.testing.ReconnectParams\">>) -> \"messages\";\nget_proto_by_msg_name_as_fqbin(<<\"grpc.testing.EchoStatus\">>) -> \"messages\";\nget_proto_by_msg_name_as_fqbin(<<\"grpc.testing.StreamingOutputCallRequest\">>) -> \"messages\";\nget_proto_by_msg_name_as_fqbin(<<\"grpc.testing.StreamingInputCallRequest\">>) -> \"messages\";\nget_proto_by_msg_name_as_fqbin(<<\"grpc.testing.SimpleRequest\">>) -> \"messages\";\nget_proto_by_msg_name_as_fqbin(<<\"grpc.testing.Payload\">>) -> \"messages\";\nget_proto_by_msg_name_as_fqbin(<<\"grpc.testing.StreamingOutputCallResponse\">>) -> \"messages\";\nget_proto_by_msg_name_as_fqbin(<<\"grpc.testing.StreamingInputCallResponse\">>) -> \"messages\";\nget_proto_by_msg_name_as_fqbin(<<\"grpc.testing.SimpleResponse\">>) -> \"messages\";\nget_proto_by_msg_name_as_fqbin(<<\"grpc.testing.BoolValue\">>) -> \"messages\";\nget_proto_by_msg_name_as_fqbin(<<\"grpc.testing.ReconnectInfo\">>) -> \"messages\";\nget_proto_by_msg_name_as_fqbin(E) ->\n    error({gpb_error, {badmsg, E}}).\n\n\n-spec get_proto_by_service_name_as_fqbin(_) -> no_return().\nget_proto_by_service_name_as_fqbin(E) ->\n    error({gpb_error, {badservice, E}}).\n\n\nget_proto_by_enum_name_as_fqbin(<<\"grpc.testing.PayloadType\">>) -> \"messages\";\nget_proto_by_enum_name_as_fqbin(E) ->\n    error({gpb_error, {badenum, E}}).\n\n\nget_protos_by_pkg_name_as_fqbin(<<\"grpc.testing\">>) ->\n    [\"messages\"];\nget_protos_by_pkg_name_as_fqbin(E) ->\n    error({gpb_error, {badpkg, E}}).\n\n\ndescriptor() ->\n    <<10, 215, 10, 10, 27, 103, 114, 112, 99, 47, 116, 101,\n      115, 116, 105, 110, 103, 47, 109, 101, 115, 115, 97,\n      103, 101, 115, 46, 112, 114, 111, 116, 111, 18, 12, 103,\n      114, 112, 99, 46, 116, 101, 115, 116, 105, 110, 103, 34,\n      26, 10, 9, 66, 111, 111, 108, 86, 97, 108, 117, 101, 18,\n      13, 10, 5, 118, 97, 108, 117, 101, 24, 1, 32, 1, 40, 8,\n      34, 43, 10, 10, 69, 99, 104, 111, 83, 116, 97, 116, 117,\n      115, 18, 12, 10, 4, 99, 111, 100, 101, 24, 1, 32, 1, 40,\n      5, 18, 15, 10, 7, 109, 101, 115, 115, 97, 103, 101, 24,\n      2, 32, 1, 40, 9, 34, 64, 10, 7, 80, 97, 121, 108, 111,\n      97, 100, 18, 39, 10, 4, 116, 121, 112, 101, 24, 1, 32,\n      1, 40, 14, 50, 25, 46, 103, 114, 112, 99, 46, 116, 101,\n      115, 116, 105, 110, 103, 46, 80, 97, 121, 108, 111, 97,\n      100, 84, 121, 112, 101, 18, 12, 10, 4, 98, 111, 100,\n      121, 24, 2, 32, 1, 40, 12, 34, 63, 10, 13, 82, 101, 99,\n      111, 110, 110, 101, 99, 116, 73, 110, 102, 111, 18, 14,\n      10, 6, 112, 97, 115, 115, 101, 100, 24, 1, 32, 1, 40, 8,\n      18, 30, 10, 10, 98, 97, 99, 107, 111, 102, 102, 95, 109,\n      115, 24, 2, 32, 3, 40, 5, 66, 10, 8, 0, 16, 1, 48, 0,\n      40, 0, 80, 0, 34, 51, 10, 15, 82, 101, 99, 111, 110,\n      110, 101, 99, 116, 80, 97, 114, 97, 109, 115, 18, 32,\n      10, 24, 109, 97, 120, 95, 114, 101, 99, 111, 110, 110,\n      101, 99, 116, 95, 98, 97, 99, 107, 111, 102, 102, 95,\n      109, 115, 24, 1, 32, 1, 40, 5, 34, 100, 10, 18, 82, 101,\n      115, 112, 111, 110, 115, 101, 80, 97, 114, 97, 109, 101,\n      116, 101, 114, 115, 18, 12, 10, 4, 115, 105, 122, 101,\n      24, 1, 32, 1, 40, 5, 18, 19, 10, 11, 105, 110, 116, 101,\n      114, 118, 97, 108, 95, 117, 115, 24, 2, 32, 1, 40, 5,\n      18, 43, 10, 10, 99, 111, 109, 112, 114, 101, 115, 115,\n      101, 100, 24, 3, 32, 1, 40, 11, 50, 23, 46, 103, 114,\n      112, 99, 46, 116, 101, 115, 116, 105, 110, 103, 46, 66,\n      111, 111, 108, 86, 97, 108, 117, 101, 34, 206, 2, 10,\n      13, 83, 105, 109, 112, 108, 101, 82, 101, 113, 117, 101,\n      115, 116, 18, 48, 10, 13, 114, 101, 115, 112, 111, 110,\n      115, 101, 95, 116, 121, 112, 101, 24, 1, 32, 1, 40, 14,\n      50, 25, 46, 103, 114, 112, 99, 46, 116, 101, 115, 116,\n      105, 110, 103, 46, 80, 97, 121, 108, 111, 97, 100, 84,\n      121, 112, 101, 18, 21, 10, 13, 114, 101, 115, 112, 111,\n      110, 115, 101, 95, 115, 105, 122, 101, 24, 2, 32, 1, 40,\n      5, 18, 38, 10, 7, 112, 97, 121, 108, 111, 97, 100, 24,\n      3, 32, 1, 40, 11, 50, 21, 46, 103, 114, 112, 99, 46,\n      116, 101, 115, 116, 105, 110, 103, 46, 80, 97, 121, 108,\n      111, 97, 100, 18, 21, 10, 13, 102, 105, 108, 108, 95,\n      117, 115, 101, 114, 110, 97, 109, 101, 24, 4, 32, 1, 40,\n      8, 18, 24, 10, 16, 102, 105, 108, 108, 95, 111, 97, 117,\n      116, 104, 95, 115, 99, 111, 112, 101, 24, 5, 32, 1, 40,\n      8, 18, 52, 10, 19, 114, 101, 115, 112, 111, 110, 115,\n      101, 95, 99, 111, 109, 112, 114, 101, 115, 115, 101,\n      100, 24, 6, 32, 1, 40, 11, 50, 23, 46, 103, 114, 112,\n      99, 46, 116, 101, 115, 116, 105, 110, 103, 46, 66, 111,\n      111, 108, 86, 97, 108, 117, 101, 18, 49, 10, 15, 114,\n      101, 115, 112, 111, 110, 115, 101, 95, 115, 116, 97,\n      116, 117, 115, 24, 7, 32, 1, 40, 11, 50, 24, 46, 103,\n      114, 112, 99, 46, 116, 101, 115, 116, 105, 110, 103, 46,\n      69, 99, 104, 111, 83, 116, 97, 116, 117, 115, 18, 50,\n      10, 17, 101, 120, 112, 101, 99, 116, 95, 99, 111, 109,\n      112, 114, 101, 115, 115, 101, 100, 24, 8, 32, 1, 40, 11,\n      50, 23, 46, 103, 114, 112, 99, 46, 116, 101, 115, 116,\n      105, 110, 103, 46, 66, 111, 111, 108, 86, 97, 108, 117,\n      101, 34, 95, 10, 14, 83, 105, 109, 112, 108, 101, 82,\n      101, 115, 112, 111, 110, 115, 101, 18, 38, 10, 7, 112,\n      97, 121, 108, 111, 97, 100, 24, 1, 32, 1, 40, 11, 50,\n      21, 46, 103, 114, 112, 99, 46, 116, 101, 115, 116, 105,\n      110, 103, 46, 80, 97, 121, 108, 111, 97, 100, 18, 16,\n      10, 8, 117, 115, 101, 114, 110, 97, 109, 101, 24, 2, 32,\n      1, 40, 9, 18, 19, 10, 11, 111, 97, 117, 116, 104, 95,\n      115, 99, 111, 112, 101, 24, 3, 32, 1, 40, 9, 34, 119,\n      10, 25, 83, 116, 114, 101, 97, 109, 105, 110, 103, 73,\n      110, 112, 117, 116, 67, 97, 108, 108, 82, 101, 113, 117,\n      101, 115, 116, 18, 38, 10, 7, 112, 97, 121, 108, 111,\n      97, 100, 24, 1, 32, 1, 40, 11, 50, 21, 46, 103, 114,\n      112, 99, 46, 116, 101, 115, 116, 105, 110, 103, 46, 80,\n      97, 121, 108, 111, 97, 100, 18, 50, 10, 17, 101, 120,\n      112, 101, 99, 116, 95, 99, 111, 109, 112, 114, 101, 115,\n      115, 101, 100, 24, 2, 32, 1, 40, 11, 50, 23, 46, 103,\n      114, 112, 99, 46, 116, 101, 115, 116, 105, 110, 103, 46,\n      66, 111, 111, 108, 86, 97, 108, 117, 101, 34, 61, 10,\n      26, 83, 116, 114, 101, 97, 109, 105, 110, 103, 73, 110,\n      112, 117, 116, 67, 97, 108, 108, 82, 101, 115, 112, 111,\n      110, 115, 101, 18, 31, 10, 23, 97, 103, 103, 114, 101,\n      103, 97, 116, 101, 100, 95, 112, 97, 121, 108, 111, 97,\n      100, 95, 115, 105, 122, 101, 24, 1, 32, 1, 40, 5, 34,\n      232, 1, 10, 26, 83, 116, 114, 101, 97, 109, 105, 110,\n      103, 79, 117, 116, 112, 117, 116, 67, 97, 108, 108, 82,\n      101, 113, 117, 101, 115, 116, 18, 48, 10, 13, 114, 101,\n      115, 112, 111, 110, 115, 101, 95, 116, 121, 112, 101,\n      24, 1, 32, 1, 40, 14, 50, 25, 46, 103, 114, 112, 99, 46,\n      116, 101, 115, 116, 105, 110, 103, 46, 80, 97, 121, 108,\n      111, 97, 100, 84, 121, 112, 101, 18, 61, 10, 19, 114,\n      101, 115, 112, 111, 110, 115, 101, 95, 112, 97, 114, 97,\n      109, 101, 116, 101, 114, 115, 24, 2, 32, 3, 40, 11, 50,\n      32, 46, 103, 114, 112, 99, 46, 116, 101, 115, 116, 105,\n      110, 103, 46, 82, 101, 115, 112, 111, 110, 115, 101, 80,\n      97, 114, 97, 109, 101, 116, 101, 114, 115, 18, 38, 10,\n      7, 112, 97, 121, 108, 111, 97, 100, 24, 3, 32, 1, 40,\n      11, 50, 21, 46, 103, 114, 112, 99, 46, 116, 101, 115,\n      116, 105, 110, 103, 46, 80, 97, 121, 108, 111, 97, 100,\n      18, 49, 10, 15, 114, 101, 115, 112, 111, 110, 115, 101,\n      95, 115, 116, 97, 116, 117, 115, 24, 7, 32, 1, 40, 11,\n      50, 24, 46, 103, 114, 112, 99, 46, 116, 101, 115, 116,\n      105, 110, 103, 46, 69, 99, 104, 111, 83, 116, 97, 116,\n      117, 115, 34, 69, 10, 27, 83, 116, 114, 101, 97, 109,\n      105, 110, 103, 79, 117, 116, 112, 117, 116, 67, 97, 108,\n      108, 82, 101, 115, 112, 111, 110, 115, 101, 18, 38, 10,\n      7, 112, 97, 121, 108, 111, 97, 100, 24, 1, 32, 1, 40,\n      11, 50, 21, 46, 103, 114, 112, 99, 46, 116, 101, 115,\n      116, 105, 110, 103, 46, 80, 97, 121, 108, 111, 97, 100,\n      42, 31, 10, 11, 80, 97, 121, 108, 111, 97, 100, 84, 121,\n      112, 101, 18, 16, 10, 12, 67, 79, 77, 80, 82, 69, 83,\n      83, 65, 66, 76, 69, 16, 0, 98, 6, 112, 114, 111, 116,\n      111, 51>>.\n\ndescriptor(\"messages\") ->\n    <<10, 27, 103, 114, 112, 99, 47, 116, 101, 115, 116,\n      105, 110, 103, 47, 109, 101, 115, 115, 97, 103, 101,\n      115, 46, 112, 114, 111, 116, 111, 18, 12, 103, 114, 112,\n      99, 46, 116, 101, 115, 116, 105, 110, 103, 34, 26, 10,\n      9, 66, 111, 111, 108, 86, 97, 108, 117, 101, 18, 13, 10,\n      5, 118, 97, 108, 117, 101, 24, 1, 32, 1, 40, 8, 34, 43,\n      10, 10, 69, 99, 104, 111, 83, 116, 97, 116, 117, 115,\n      18, 12, 10, 4, 99, 111, 100, 101, 24, 1, 32, 1, 40, 5,\n      18, 15, 10, 7, 109, 101, 115, 115, 97, 103, 101, 24, 2,\n      32, 1, 40, 9, 34, 64, 10, 7, 80, 97, 121, 108, 111, 97,\n      100, 18, 39, 10, 4, 116, 121, 112, 101, 24, 1, 32, 1,\n      40, 14, 50, 25, 46, 103, 114, 112, 99, 46, 116, 101,\n      115, 116, 105, 110, 103, 46, 80, 97, 121, 108, 111, 97,\n      100, 84, 121, 112, 101, 18, 12, 10, 4, 98, 111, 100,\n      121, 24, 2, 32, 1, 40, 12, 34, 63, 10, 13, 82, 101, 99,\n      111, 110, 110, 101, 99, 116, 73, 110, 102, 111, 18, 14,\n      10, 6, 112, 97, 115, 115, 101, 100, 24, 1, 32, 1, 40, 8,\n      18, 30, 10, 10, 98, 97, 99, 107, 111, 102, 102, 95, 109,\n      115, 24, 2, 32, 3, 40, 5, 66, 10, 8, 0, 16, 1, 48, 0,\n      40, 0, 80, 0, 34, 51, 10, 15, 82, 101, 99, 111, 110,\n      110, 101, 99, 116, 80, 97, 114, 97, 109, 115, 18, 32,\n      10, 24, 109, 97, 120, 95, 114, 101, 99, 111, 110, 110,\n      101, 99, 116, 95, 98, 97, 99, 107, 111, 102, 102, 95,\n      109, 115, 24, 1, 32, 1, 40, 5, 34, 100, 10, 18, 82, 101,\n      115, 112, 111, 110, 115, 101, 80, 97, 114, 97, 109, 101,\n      116, 101, 114, 115, 18, 12, 10, 4, 115, 105, 122, 101,\n      24, 1, 32, 1, 40, 5, 18, 19, 10, 11, 105, 110, 116, 101,\n      114, 118, 97, 108, 95, 117, 115, 24, 2, 32, 1, 40, 5,\n      18, 43, 10, 10, 99, 111, 109, 112, 114, 101, 115, 115,\n      101, 100, 24, 3, 32, 1, 40, 11, 50, 23, 46, 103, 114,\n      112, 99, 46, 116, 101, 115, 116, 105, 110, 103, 46, 66,\n      111, 111, 108, 86, 97, 108, 117, 101, 34, 206, 2, 10,\n      13, 83, 105, 109, 112, 108, 101, 82, 101, 113, 117, 101,\n      115, 116, 18, 48, 10, 13, 114, 101, 115, 112, 111, 110,\n      115, 101, 95, 116, 121, 112, 101, 24, 1, 32, 1, 40, 14,\n      50, 25, 46, 103, 114, 112, 99, 46, 116, 101, 115, 116,\n      105, 110, 103, 46, 80, 97, 121, 108, 111, 97, 100, 84,\n      121, 112, 101, 18, 21, 10, 13, 114, 101, 115, 112, 111,\n      110, 115, 101, 95, 115, 105, 122, 101, 24, 2, 32, 1, 40,\n      5, 18, 38, 10, 7, 112, 97, 121, 108, 111, 97, 100, 24,\n      3, 32, 1, 40, 11, 50, 21, 46, 103, 114, 112, 99, 46,\n      116, 101, 115, 116, 105, 110, 103, 46, 80, 97, 121, 108,\n      111, 97, 100, 18, 21, 10, 13, 102, 105, 108, 108, 95,\n      117, 115, 101, 114, 110, 97, 109, 101, 24, 4, 32, 1, 40,\n      8, 18, 24, 10, 16, 102, 105, 108, 108, 95, 111, 97, 117,\n      116, 104, 95, 115, 99, 111, 112, 101, 24, 5, 32, 1, 40,\n      8, 18, 52, 10, 19, 114, 101, 115, 112, 111, 110, 115,\n      101, 95, 99, 111, 109, 112, 114, 101, 115, 115, 101,\n      100, 24, 6, 32, 1, 40, 11, 50, 23, 46, 103, 114, 112,\n      99, 46, 116, 101, 115, 116, 105, 110, 103, 46, 66, 111,\n      111, 108, 86, 97, 108, 117, 101, 18, 49, 10, 15, 114,\n      101, 115, 112, 111, 110, 115, 101, 95, 115, 116, 97,\n      116, 117, 115, 24, 7, 32, 1, 40, 11, 50, 24, 46, 103,\n      114, 112, 99, 46, 116, 101, 115, 116, 105, 110, 103, 46,\n      69, 99, 104, 111, 83, 116, 97, 116, 117, 115, 18, 50,\n      10, 17, 101, 120, 112, 101, 99, 116, 95, 99, 111, 109,\n      112, 114, 101, 115, 115, 101, 100, 24, 8, 32, 1, 40, 11,\n      50, 23, 46, 103, 114, 112, 99, 46, 116, 101, 115, 116,\n      105, 110, 103, 46, 66, 111, 111, 108, 86, 97, 108, 117,\n      101, 34, 95, 10, 14, 83, 105, 109, 112, 108, 101, 82,\n      101, 115, 112, 111, 110, 115, 101, 18, 38, 10, 7, 112,\n      97, 121, 108, 111, 97, 100, 24, 1, 32, 1, 40, 11, 50,\n      21, 46, 103, 114, 112, 99, 46, 116, 101, 115, 116, 105,\n      110, 103, 46, 80, 97, 121, 108, 111, 97, 100, 18, 16,\n      10, 8, 117, 115, 101, 114, 110, 97, 109, 101, 24, 2, 32,\n      1, 40, 9, 18, 19, 10, 11, 111, 97, 117, 116, 104, 95,\n      115, 99, 111, 112, 101, 24, 3, 32, 1, 40, 9, 34, 119,\n      10, 25, 83, 116, 114, 101, 97, 109, 105, 110, 103, 73,\n      110, 112, 117, 116, 67, 97, 108, 108, 82, 101, 113, 117,\n      101, 115, 116, 18, 38, 10, 7, 112, 97, 121, 108, 111,\n      97, 100, 24, 1, 32, 1, 40, 11, 50, 21, 46, 103, 114,\n      112, 99, 46, 116, 101, 115, 116, 105, 110, 103, 46, 80,\n      97, 121, 108, 111, 97, 100, 18, 50, 10, 17, 101, 120,\n      112, 101, 99, 116, 95, 99, 111, 109, 112, 114, 101, 115,\n      115, 101, 100, 24, 2, 32, 1, 40, 11, 50, 23, 46, 103,\n      114, 112, 99, 46, 116, 101, 115, 116, 105, 110, 103, 46,\n      66, 111, 111, 108, 86, 97, 108, 117, 101, 34, 61, 10,\n      26, 83, 116, 114, 101, 97, 109, 105, 110, 103, 73, 110,\n      112, 117, 116, 67, 97, 108, 108, 82, 101, 115, 112, 111,\n      110, 115, 101, 18, 31, 10, 23, 97, 103, 103, 114, 101,\n      103, 97, 116, 101, 100, 95, 112, 97, 121, 108, 111, 97,\n      100, 95, 115, 105, 122, 101, 24, 1, 32, 1, 40, 5, 34,\n      232, 1, 10, 26, 83, 116, 114, 101, 97, 109, 105, 110,\n      103, 79, 117, 116, 112, 117, 116, 67, 97, 108, 108, 82,\n      101, 113, 117, 101, 115, 116, 18, 48, 10, 13, 114, 101,\n      115, 112, 111, 110, 115, 101, 95, 116, 121, 112, 101,\n      24, 1, 32, 1, 40, 14, 50, 25, 46, 103, 114, 112, 99, 46,\n      116, 101, 115, 116, 105, 110, 103, 46, 80, 97, 121, 108,\n      111, 97, 100, 84, 121, 112, 101, 18, 61, 10, 19, 114,\n      101, 115, 112, 111, 110, 115, 101, 95, 112, 97, 114, 97,\n      109, 101, 116, 101, 114, 115, 24, 2, 32, 3, 40, 11, 50,\n      32, 46, 103, 114, 112, 99, 46, 116, 101, 115, 116, 105,\n      110, 103, 46, 82, 101, 115, 112, 111, 110, 115, 101, 80,\n      97, 114, 97, 109, 101, 116, 101, 114, 115, 18, 38, 10,\n      7, 112, 97, 121, 108, 111, 97, 100, 24, 3, 32, 1, 40,\n      11, 50, 21, 46, 103, 114, 112, 99, 46, 116, 101, 115,\n      116, 105, 110, 103, 46, 80, 97, 121, 108, 111, 97, 100,\n      18, 49, 10, 15, 114, 101, 115, 112, 111, 110, 115, 101,\n      95, 115, 116, 97, 116, 117, 115, 24, 7, 32, 1, 40, 11,\n      50, 24, 46, 103, 114, 112, 99, 46, 116, 101, 115, 116,\n      105, 110, 103, 46, 69, 99, 104, 111, 83, 116, 97, 116,\n      117, 115, 34, 69, 10, 27, 83, 116, 114, 101, 97, 109,\n      105, 110, 103, 79, 117, 116, 112, 117, 116, 67, 97, 108,\n      108, 82, 101, 115, 112, 111, 110, 115, 101, 18, 38, 10,\n      7, 112, 97, 121, 108, 111, 97, 100, 24, 1, 32, 1, 40,\n      11, 50, 21, 46, 103, 114, 112, 99, 46, 116, 101, 115,\n      116, 105, 110, 103, 46, 80, 97, 121, 108, 111, 97, 100,\n      42, 31, 10, 11, 80, 97, 121, 108, 111, 97, 100, 84, 121,\n      112, 101, 18, 16, 10, 12, 67, 79, 77, 80, 82, 69, 83,\n      83, 65, 66, 76, 69, 16, 0, 98, 6, 112, 114, 111, 116,\n      111, 51>>;\ndescriptor(X) -> error({gpb_error, {badname, X}}).\n\n\ngpb_version_as_string() ->\n    \"4.7.1\".\n\ngpb_version_as_list() ->\n    [4,7,1].\n"
  },
  {
    "path": "interop/src/test_pb.erl",
    "content": "%% -*- coding: utf-8 -*-\n%% @private\n%% Automatically generated, do not edit\n%% Generated by gpb_compile version 4.7.1\n-module(test_pb).\n\n-export([encode_msg/2, encode_msg/3]).\n-export([decode_msg/2, decode_msg/3]).\n-export([merge_msgs/3, merge_msgs/4]).\n-export([verify_msg/2, verify_msg/3]).\n-export([get_msg_defs/0]).\n-export([get_msg_names/0]).\n-export([get_group_names/0]).\n-export([get_msg_or_group_names/0]).\n-export([get_enum_names/0]).\n-export([find_msg_def/1, fetch_msg_def/1]).\n-export([find_enum_def/1, fetch_enum_def/1]).\n-export([enum_symbol_by_value/2, enum_value_by_symbol/2]).\n-export(['enum_symbol_by_value_grpc.testing.PayloadType'/1, 'enum_value_by_symbol_grpc.testing.PayloadType'/1]).\n-export([get_service_names/0]).\n-export([get_service_def/1]).\n-export([get_rpc_names/1]).\n-export([find_rpc_def/2, fetch_rpc_def/2]).\n-export([fqbin_to_service_name/1]).\n-export([service_name_to_fqbin/1]).\n-export([fqbins_to_service_and_rpc_name/2]).\n-export([service_and_rpc_name_to_fqbins/2]).\n-export([fqbin_to_msg_name/1]).\n-export([msg_name_to_fqbin/1]).\n-export([fqbin_to_enum_name/1]).\n-export([enum_name_to_fqbin/1]).\n-export([get_package_name/0]).\n-export([uses_packages/0]).\n-export([source_basename/0]).\n-export([get_all_source_basenames/0]).\n-export([get_all_proto_names/0]).\n-export([get_msg_containment/1]).\n-export([get_pkg_containment/1]).\n-export([get_service_containment/1]).\n-export([get_rpc_containment/1]).\n-export([get_enum_containment/1]).\n-export([get_proto_by_msg_name_as_fqbin/1]).\n-export([get_proto_by_service_name_as_fqbin/1]).\n-export([get_proto_by_enum_name_as_fqbin/1]).\n-export([get_protos_by_pkg_name_as_fqbin/1]).\n-export([descriptor/0, descriptor/1]).\n-export([gpb_version_as_string/0, gpb_version_as_list/0]).\n\n\n%% enumerated types\n-type 'grpc.testing.PayloadType'() :: 'COMPRESSABLE'.\n-export_type(['grpc.testing.PayloadType'/0]).\n\n%% message types\n-type empty() ::\n      #{\n       }.\n\n-type bool_value() ::\n      #{value                   => boolean() | 0 | 1 % = 1\n       }.\n\n-type payload() ::\n      #{type                    => 'COMPRESSABLE' | integer(), % = 1, enum grpc.testing.PayloadType\n        body                    => iodata()         % = 2\n       }.\n\n-type echo_status() ::\n      #{code                    => integer(),       % = 1, 32 bits\n        message                 => iodata()         % = 2\n       }.\n\n-type simple_request() ::\n      #{response_type           => 'COMPRESSABLE' | integer(), % = 1, enum grpc.testing.PayloadType\n        response_size           => integer(),       % = 2, 32 bits\n        payload                 => payload(),       % = 3\n        fill_username           => boolean() | 0 | 1, % = 4\n        fill_oauth_scope        => boolean() | 0 | 1, % = 5\n        response_compressed     => bool_value(),    % = 6\n        response_status         => echo_status(),   % = 7\n        expect_compressed       => bool_value()     % = 8\n       }.\n\n-type simple_response() ::\n      #{payload                 => payload(),       % = 1\n        username                => iodata(),        % = 2\n        oauth_scope             => iodata()         % = 3\n       }.\n\n-type streaming_input_call_request() ::\n      #{payload                 => payload(),       % = 1\n        expect_compressed       => bool_value()     % = 2\n       }.\n\n-type streaming_input_call_response() ::\n      #{aggregated_payload_size => integer()        % = 1, 32 bits\n       }.\n\n-type response_parameters() ::\n      #{size                    => integer(),       % = 1, 32 bits\n        interval_us             => integer(),       % = 2, 32 bits\n        compressed              => bool_value()     % = 3\n       }.\n\n-type streaming_output_call_request() ::\n      #{response_type           => 'COMPRESSABLE' | integer(), % = 1, enum grpc.testing.PayloadType\n        response_parameters     => [response_parameters()], % = 2\n        payload                 => payload(),       % = 3\n        response_status         => echo_status()    % = 7\n       }.\n\n-type streaming_output_call_response() ::\n      #{payload                 => payload()        % = 1\n       }.\n\n-type reconnect_params() ::\n      #{max_reconnect_backoff_ms => integer()       % = 1, 32 bits\n       }.\n\n-type reconnect_info() ::\n      #{passed                  => boolean() | 0 | 1, % = 1\n        backoff_ms              => [integer()]      % = 2, 32 bits\n       }.\n\n-export_type(['empty'/0, 'bool_value'/0, 'payload'/0, 'echo_status'/0, 'simple_request'/0, 'simple_response'/0, 'streaming_input_call_request'/0, 'streaming_input_call_response'/0, 'response_parameters'/0, 'streaming_output_call_request'/0, 'streaming_output_call_response'/0, 'reconnect_params'/0, 'reconnect_info'/0]).\n\n-spec encode_msg(empty() | bool_value() | payload() | echo_status() | simple_request() | simple_response() | streaming_input_call_request() | streaming_input_call_response() | response_parameters() | streaming_output_call_request() | streaming_output_call_response() | reconnect_params() | reconnect_info(), atom()) -> binary().\nencode_msg(Msg, MsgName) when is_atom(MsgName) ->\n    encode_msg(Msg, MsgName, []).\n\n-spec encode_msg(empty() | bool_value() | payload() | echo_status() | simple_request() | simple_response() | streaming_input_call_request() | streaming_input_call_response() | response_parameters() | streaming_output_call_request() | streaming_output_call_response() | reconnect_params() | reconnect_info(), atom(), list()) -> binary().\nencode_msg(Msg, MsgName, Opts) ->\n    case proplists:get_bool(verify, Opts) of\n      true -> verify_msg(Msg, MsgName, Opts);\n      false -> ok\n    end,\n    TrUserData = proplists:get_value(user_data, Opts),\n    case MsgName of\n      empty ->\n\t  encode_msg_empty(id(Msg, TrUserData), TrUserData);\n      bool_value ->\n\t  encode_msg_bool_value(id(Msg, TrUserData), TrUserData);\n      payload ->\n\t  encode_msg_payload(id(Msg, TrUserData), TrUserData);\n      echo_status ->\n\t  encode_msg_echo_status(id(Msg, TrUserData), TrUserData);\n      simple_request ->\n\t  encode_msg_simple_request(id(Msg, TrUserData),\n\t\t\t\t    TrUserData);\n      simple_response ->\n\t  encode_msg_simple_response(id(Msg, TrUserData),\n\t\t\t\t     TrUserData);\n      streaming_input_call_request ->\n\t  encode_msg_streaming_input_call_request(id(Msg,\n\t\t\t\t\t\t     TrUserData),\n\t\t\t\t\t\t  TrUserData);\n      streaming_input_call_response ->\n\t  encode_msg_streaming_input_call_response(id(Msg,\n\t\t\t\t\t\t      TrUserData),\n\t\t\t\t\t\t   TrUserData);\n      response_parameters ->\n\t  encode_msg_response_parameters(id(Msg, TrUserData),\n\t\t\t\t\t TrUserData);\n      streaming_output_call_request ->\n\t  encode_msg_streaming_output_call_request(id(Msg,\n\t\t\t\t\t\t      TrUserData),\n\t\t\t\t\t\t   TrUserData);\n      streaming_output_call_response ->\n\t  encode_msg_streaming_output_call_response(id(Msg,\n\t\t\t\t\t\t       TrUserData),\n\t\t\t\t\t\t    TrUserData);\n      reconnect_params ->\n\t  encode_msg_reconnect_params(id(Msg, TrUserData),\n\t\t\t\t      TrUserData);\n      reconnect_info ->\n\t  encode_msg_reconnect_info(id(Msg, TrUserData),\n\t\t\t\t    TrUserData)\n    end.\n\n\nencode_msg_empty(_Msg, _TrUserData) -> <<>>.\n\nencode_msg_bool_value(Msg, TrUserData) ->\n    encode_msg_bool_value(Msg, <<>>, TrUserData).\n\n\nencode_msg_bool_value(#{} = M, Bin, TrUserData) ->\n    case M of\n      #{value := F1} ->\n\t  begin\n\t    TrF1 = id(F1, TrUserData),\n\t    if TrF1 =:= false -> Bin;\n\t       true -> e_type_bool(TrF1, <<Bin/binary, 8>>, TrUserData)\n\t    end\n\t  end;\n      _ -> Bin\n    end.\n\nencode_msg_payload(Msg, TrUserData) ->\n    encode_msg_payload(Msg, <<>>, TrUserData).\n\n\nencode_msg_payload(#{} = M, Bin, TrUserData) ->\n    B1 = case M of\n\t   #{type := F1} ->\n\t       begin\n\t\t TrF1 = id(F1, TrUserData),\n\t\t if TrF1 =:= 'COMPRESSABLE'; TrF1 =:= 0 -> Bin;\n\t\t    true ->\n\t\t\t'e_enum_grpc.testing.PayloadType'(TrF1,\n\t\t\t\t\t\t\t  <<Bin/binary, 8>>,\n\t\t\t\t\t\t\t  'MaybeTrUserData')\n\t\t end\n\t       end;\n\t   _ -> Bin\n\t end,\n    case M of\n      #{body := F2} ->\n\t  begin\n\t    TrF2 = id(F2, TrUserData),\n\t    case iolist_size(TrF2) of\n\t      0 -> B1;\n\t      _ -> e_type_bytes(TrF2, <<B1/binary, 18>>, TrUserData)\n\t    end\n\t  end;\n      _ -> B1\n    end.\n\nencode_msg_echo_status(Msg, TrUserData) ->\n    encode_msg_echo_status(Msg, <<>>, TrUserData).\n\n\nencode_msg_echo_status(#{} = M, Bin, TrUserData) ->\n    B1 = case M of\n\t   #{code := F1} ->\n\t       begin\n\t\t TrF1 = id(F1, TrUserData),\n\t\t if TrF1 =:= 0 -> Bin;\n\t\t    true ->\n\t\t\te_type_int32(TrF1, <<Bin/binary, 8>>, TrUserData)\n\t\t end\n\t       end;\n\t   _ -> Bin\n\t end,\n    case M of\n      #{message := F2} ->\n\t  begin\n\t    TrF2 = id(F2, TrUserData),\n\t    case is_empty_string(TrF2) of\n\t      true -> B1;\n\t      false ->\n\t\t  e_type_string(TrF2, <<B1/binary, 18>>, TrUserData)\n\t    end\n\t  end;\n      _ -> B1\n    end.\n\nencode_msg_simple_request(Msg, TrUserData) ->\n    encode_msg_simple_request(Msg, <<>>, TrUserData).\n\n\nencode_msg_simple_request(#{} = M, Bin, TrUserData) ->\n    B1 = case M of\n\t   #{response_type := F1} ->\n\t       begin\n\t\t TrF1 = id(F1, TrUserData),\n\t\t if TrF1 =:= 'COMPRESSABLE'; TrF1 =:= 0 -> Bin;\n\t\t    true ->\n\t\t\t'e_enum_grpc.testing.PayloadType'(TrF1,\n\t\t\t\t\t\t\t  <<Bin/binary, 8>>,\n\t\t\t\t\t\t\t  'MaybeTrUserData')\n\t\t end\n\t       end;\n\t   _ -> Bin\n\t end,\n    B2 = case M of\n\t   #{response_size := F2} ->\n\t       begin\n\t\t TrF2 = id(F2, TrUserData),\n\t\t if TrF2 =:= 0 -> B1;\n\t\t    true ->\n\t\t\te_type_int32(TrF2, <<B1/binary, 16>>, TrUserData)\n\t\t end\n\t       end;\n\t   _ -> B1\n\t end,\n    B3 = case M of\n\t   #{payload := F3} ->\n\t       begin\n\t\t TrF3 = id(F3, TrUserData),\n\t\t if TrF3 =:= undefined -> B2;\n\t\t    true ->\n\t\t\te_mfield_simple_request_payload(TrF3, <<B2/binary, 26>>,\n\t\t\t\t\t\t\tTrUserData)\n\t\t end\n\t       end;\n\t   _ -> B2\n\t end,\n    B4 = case M of\n\t   #{fill_username := F4} ->\n\t       begin\n\t\t TrF4 = id(F4, TrUserData),\n\t\t if TrF4 =:= false -> B3;\n\t\t    true -> e_type_bool(TrF4, <<B3/binary, 32>>, TrUserData)\n\t\t end\n\t       end;\n\t   _ -> B3\n\t end,\n    B5 = case M of\n\t   #{fill_oauth_scope := F5} ->\n\t       begin\n\t\t TrF5 = id(F5, TrUserData),\n\t\t if TrF5 =:= false -> B4;\n\t\t    true -> e_type_bool(TrF5, <<B4/binary, 40>>, TrUserData)\n\t\t end\n\t       end;\n\t   _ -> B4\n\t end,\n    B6 = case M of\n\t   #{response_compressed := F6} ->\n\t       begin\n\t\t TrF6 = id(F6, TrUserData),\n\t\t if TrF6 =:= undefined -> B5;\n\t\t    true ->\n\t\t\te_mfield_simple_request_response_compressed(TrF6,\n\t\t\t\t\t\t\t\t    <<B5/binary,\n\t\t\t\t\t\t\t\t      50>>,\n\t\t\t\t\t\t\t\t    TrUserData)\n\t\t end\n\t       end;\n\t   _ -> B5\n\t end,\n    B7 = case M of\n\t   #{response_status := F7} ->\n\t       begin\n\t\t TrF7 = id(F7, TrUserData),\n\t\t if TrF7 =:= undefined -> B6;\n\t\t    true ->\n\t\t\te_mfield_simple_request_response_status(TrF7,\n\t\t\t\t\t\t\t\t<<B6/binary,\n\t\t\t\t\t\t\t\t  58>>,\n\t\t\t\t\t\t\t\tTrUserData)\n\t\t end\n\t       end;\n\t   _ -> B6\n\t end,\n    case M of\n      #{expect_compressed := F8} ->\n\t  begin\n\t    TrF8 = id(F8, TrUserData),\n\t    if TrF8 =:= undefined -> B7;\n\t       true ->\n\t\t   e_mfield_simple_request_expect_compressed(TrF8,\n\t\t\t\t\t\t\t     <<B7/binary, 66>>,\n\t\t\t\t\t\t\t     TrUserData)\n\t    end\n\t  end;\n      _ -> B7\n    end.\n\nencode_msg_simple_response(Msg, TrUserData) ->\n    encode_msg_simple_response(Msg, <<>>, TrUserData).\n\n\nencode_msg_simple_response(#{} = M, Bin, TrUserData) ->\n    B1 = case M of\n\t   #{payload := F1} ->\n\t       begin\n\t\t TrF1 = id(F1, TrUserData),\n\t\t if TrF1 =:= undefined -> Bin;\n\t\t    true ->\n\t\t\te_mfield_simple_response_payload(TrF1,\n\t\t\t\t\t\t\t <<Bin/binary, 10>>,\n\t\t\t\t\t\t\t TrUserData)\n\t\t end\n\t       end;\n\t   _ -> Bin\n\t end,\n    B2 = case M of\n\t   #{username := F2} ->\n\t       begin\n\t\t TrF2 = id(F2, TrUserData),\n\t\t case is_empty_string(TrF2) of\n\t\t   true -> B1;\n\t\t   false ->\n\t\t       e_type_string(TrF2, <<B1/binary, 18>>, TrUserData)\n\t\t end\n\t       end;\n\t   _ -> B1\n\t end,\n    case M of\n      #{oauth_scope := F3} ->\n\t  begin\n\t    TrF3 = id(F3, TrUserData),\n\t    case is_empty_string(TrF3) of\n\t      true -> B2;\n\t      false ->\n\t\t  e_type_string(TrF3, <<B2/binary, 26>>, TrUserData)\n\t    end\n\t  end;\n      _ -> B2\n    end.\n\nencode_msg_streaming_input_call_request(Msg,\n\t\t\t\t\tTrUserData) ->\n    encode_msg_streaming_input_call_request(Msg, <<>>,\n\t\t\t\t\t    TrUserData).\n\n\nencode_msg_streaming_input_call_request(#{} = M, Bin,\n\t\t\t\t\tTrUserData) ->\n    B1 = case M of\n\t   #{payload := F1} ->\n\t       begin\n\t\t TrF1 = id(F1, TrUserData),\n\t\t if TrF1 =:= undefined -> Bin;\n\t\t    true ->\n\t\t\te_mfield_streaming_input_call_request_payload(TrF1,\n\t\t\t\t\t\t\t\t      <<Bin/binary,\n\t\t\t\t\t\t\t\t\t10>>,\n\t\t\t\t\t\t\t\t      TrUserData)\n\t\t end\n\t       end;\n\t   _ -> Bin\n\t end,\n    case M of\n      #{expect_compressed := F2} ->\n\t  begin\n\t    TrF2 = id(F2, TrUserData),\n\t    if TrF2 =:= undefined -> B1;\n\t       true ->\n\t\t   e_mfield_streaming_input_call_request_expect_compressed(TrF2,\n\t\t\t\t\t\t\t\t\t   <<B1/binary,\n\t\t\t\t\t\t\t\t\t     18>>,\n\t\t\t\t\t\t\t\t\t   TrUserData)\n\t    end\n\t  end;\n      _ -> B1\n    end.\n\nencode_msg_streaming_input_call_response(Msg,\n\t\t\t\t\t TrUserData) ->\n    encode_msg_streaming_input_call_response(Msg, <<>>,\n\t\t\t\t\t     TrUserData).\n\n\nencode_msg_streaming_input_call_response(#{} = M, Bin,\n\t\t\t\t\t TrUserData) ->\n    case M of\n      #{aggregated_payload_size := F1} ->\n\t  begin\n\t    TrF1 = id(F1, TrUserData),\n\t    if TrF1 =:= 0 -> Bin;\n\t       true ->\n\t\t   e_type_int32(TrF1, <<Bin/binary, 8>>, TrUserData)\n\t    end\n\t  end;\n      _ -> Bin\n    end.\n\nencode_msg_response_parameters(Msg, TrUserData) ->\n    encode_msg_response_parameters(Msg, <<>>, TrUserData).\n\n\nencode_msg_response_parameters(#{} = M, Bin,\n\t\t\t       TrUserData) ->\n    B1 = case M of\n\t   #{size := F1} ->\n\t       begin\n\t\t TrF1 = id(F1, TrUserData),\n\t\t if TrF1 =:= 0 -> Bin;\n\t\t    true ->\n\t\t\te_type_int32(TrF1, <<Bin/binary, 8>>, TrUserData)\n\t\t end\n\t       end;\n\t   _ -> Bin\n\t end,\n    B2 = case M of\n\t   #{interval_us := F2} ->\n\t       begin\n\t\t TrF2 = id(F2, TrUserData),\n\t\t if TrF2 =:= 0 -> B1;\n\t\t    true ->\n\t\t\te_type_int32(TrF2, <<B1/binary, 16>>, TrUserData)\n\t\t end\n\t       end;\n\t   _ -> B1\n\t end,\n    case M of\n      #{compressed := F3} ->\n\t  begin\n\t    TrF3 = id(F3, TrUserData),\n\t    if TrF3 =:= undefined -> B2;\n\t       true ->\n\t\t   e_mfield_response_parameters_compressed(TrF3,\n\t\t\t\t\t\t\t   <<B2/binary, 26>>,\n\t\t\t\t\t\t\t   TrUserData)\n\t    end\n\t  end;\n      _ -> B2\n    end.\n\nencode_msg_streaming_output_call_request(Msg,\n\t\t\t\t\t TrUserData) ->\n    encode_msg_streaming_output_call_request(Msg, <<>>,\n\t\t\t\t\t     TrUserData).\n\n\nencode_msg_streaming_output_call_request(#{} = M, Bin,\n\t\t\t\t\t TrUserData) ->\n    B1 = case M of\n\t   #{response_type := F1} ->\n\t       begin\n\t\t TrF1 = id(F1, TrUserData),\n\t\t if TrF1 =:= 'COMPRESSABLE'; TrF1 =:= 0 -> Bin;\n\t\t    true ->\n\t\t\t'e_enum_grpc.testing.PayloadType'(TrF1,\n\t\t\t\t\t\t\t  <<Bin/binary, 8>>,\n\t\t\t\t\t\t\t  'MaybeTrUserData')\n\t\t end\n\t       end;\n\t   _ -> Bin\n\t end,\n    B2 = case M of\n\t   #{response_parameters := F2} ->\n\t       TrF2 = id(F2, TrUserData),\n\t       if TrF2 == [] -> B1;\n\t\t  true ->\n\t\t      e_field_streaming_output_call_request_response_parameters(TrF2,\n\t\t\t\t\t\t\t\t\t\tB1,\n\t\t\t\t\t\t\t\t\t\tTrUserData)\n\t       end;\n\t   _ -> B1\n\t end,\n    B3 = case M of\n\t   #{payload := F3} ->\n\t       begin\n\t\t TrF3 = id(F3, TrUserData),\n\t\t if TrF3 =:= undefined -> B2;\n\t\t    true ->\n\t\t\te_mfield_streaming_output_call_request_payload(TrF3,\n\t\t\t\t\t\t\t\t       <<B2/binary,\n\t\t\t\t\t\t\t\t\t 26>>,\n\t\t\t\t\t\t\t\t       TrUserData)\n\t\t end\n\t       end;\n\t   _ -> B2\n\t end,\n    case M of\n      #{response_status := F4} ->\n\t  begin\n\t    TrF4 = id(F4, TrUserData),\n\t    if TrF4 =:= undefined -> B3;\n\t       true ->\n\t\t   e_mfield_streaming_output_call_request_response_status(TrF4,\n\t\t\t\t\t\t\t\t\t  <<B3/binary,\n\t\t\t\t\t\t\t\t\t    58>>,\n\t\t\t\t\t\t\t\t\t  TrUserData)\n\t    end\n\t  end;\n      _ -> B3\n    end.\n\nencode_msg_streaming_output_call_response(Msg,\n\t\t\t\t\t  TrUserData) ->\n    encode_msg_streaming_output_call_response(Msg, <<>>,\n\t\t\t\t\t      TrUserData).\n\n\nencode_msg_streaming_output_call_response(#{} = M, Bin,\n\t\t\t\t\t  TrUserData) ->\n    case M of\n      #{payload := F1} ->\n\t  begin\n\t    TrF1 = id(F1, TrUserData),\n\t    if TrF1 =:= undefined -> Bin;\n\t       true ->\n\t\t   e_mfield_streaming_output_call_response_payload(TrF1,\n\t\t\t\t\t\t\t\t   <<Bin/binary,\n\t\t\t\t\t\t\t\t     10>>,\n\t\t\t\t\t\t\t\t   TrUserData)\n\t    end\n\t  end;\n      _ -> Bin\n    end.\n\nencode_msg_reconnect_params(Msg, TrUserData) ->\n    encode_msg_reconnect_params(Msg, <<>>, TrUserData).\n\n\nencode_msg_reconnect_params(#{} = M, Bin, TrUserData) ->\n    case M of\n      #{max_reconnect_backoff_ms := F1} ->\n\t  begin\n\t    TrF1 = id(F1, TrUserData),\n\t    if TrF1 =:= 0 -> Bin;\n\t       true ->\n\t\t   e_type_int32(TrF1, <<Bin/binary, 8>>, TrUserData)\n\t    end\n\t  end;\n      _ -> Bin\n    end.\n\nencode_msg_reconnect_info(Msg, TrUserData) ->\n    encode_msg_reconnect_info(Msg, <<>>, TrUserData).\n\n\nencode_msg_reconnect_info(#{} = M, Bin, TrUserData) ->\n    B1 = case M of\n\t   #{passed := F1} ->\n\t       begin\n\t\t TrF1 = id(F1, TrUserData),\n\t\t if TrF1 =:= false -> Bin;\n\t\t    true -> e_type_bool(TrF1, <<Bin/binary, 8>>, TrUserData)\n\t\t end\n\t       end;\n\t   _ -> Bin\n\t end,\n    case M of\n      #{backoff_ms := F2} ->\n\t  TrF2 = id(F2, TrUserData),\n\t  if TrF2 == [] -> B1;\n\t     true ->\n\t\t e_field_reconnect_info_backoff_ms(TrF2, B1, TrUserData)\n\t  end;\n      _ -> B1\n    end.\n\ne_mfield_simple_request_payload(Msg, Bin, TrUserData) ->\n    SubBin = encode_msg_payload(Msg, <<>>, TrUserData),\n    Bin2 = e_varint(byte_size(SubBin), Bin),\n    <<Bin2/binary, SubBin/binary>>.\n\ne_mfield_simple_request_response_compressed(Msg, Bin,\n\t\t\t\t\t    TrUserData) ->\n    SubBin = encode_msg_bool_value(Msg, <<>>, TrUserData),\n    Bin2 = e_varint(byte_size(SubBin), Bin),\n    <<Bin2/binary, SubBin/binary>>.\n\ne_mfield_simple_request_response_status(Msg, Bin,\n\t\t\t\t\tTrUserData) ->\n    SubBin = encode_msg_echo_status(Msg, <<>>, TrUserData),\n    Bin2 = e_varint(byte_size(SubBin), Bin),\n    <<Bin2/binary, SubBin/binary>>.\n\ne_mfield_simple_request_expect_compressed(Msg, Bin,\n\t\t\t\t\t  TrUserData) ->\n    SubBin = encode_msg_bool_value(Msg, <<>>, TrUserData),\n    Bin2 = e_varint(byte_size(SubBin), Bin),\n    <<Bin2/binary, SubBin/binary>>.\n\ne_mfield_simple_response_payload(Msg, Bin,\n\t\t\t\t TrUserData) ->\n    SubBin = encode_msg_payload(Msg, <<>>, TrUserData),\n    Bin2 = e_varint(byte_size(SubBin), Bin),\n    <<Bin2/binary, SubBin/binary>>.\n\ne_mfield_streaming_input_call_request_payload(Msg, Bin,\n\t\t\t\t\t      TrUserData) ->\n    SubBin = encode_msg_payload(Msg, <<>>, TrUserData),\n    Bin2 = e_varint(byte_size(SubBin), Bin),\n    <<Bin2/binary, SubBin/binary>>.\n\ne_mfield_streaming_input_call_request_expect_compressed(Msg,\n\t\t\t\t\t\t\tBin, TrUserData) ->\n    SubBin = encode_msg_bool_value(Msg, <<>>, TrUserData),\n    Bin2 = e_varint(byte_size(SubBin), Bin),\n    <<Bin2/binary, SubBin/binary>>.\n\ne_mfield_response_parameters_compressed(Msg, Bin,\n\t\t\t\t\tTrUserData) ->\n    SubBin = encode_msg_bool_value(Msg, <<>>, TrUserData),\n    Bin2 = e_varint(byte_size(SubBin), Bin),\n    <<Bin2/binary, SubBin/binary>>.\n\ne_mfield_streaming_output_call_request_response_parameters(Msg,\n\t\t\t\t\t\t\t   Bin, TrUserData) ->\n    SubBin = encode_msg_response_parameters(Msg, <<>>,\n\t\t\t\t\t    TrUserData),\n    Bin2 = e_varint(byte_size(SubBin), Bin),\n    <<Bin2/binary, SubBin/binary>>.\n\ne_field_streaming_output_call_request_response_parameters([Elem\n\t\t\t\t\t\t\t   | Rest],\n\t\t\t\t\t\t\t  Bin, TrUserData) ->\n    Bin2 = <<Bin/binary, 18>>,\n    Bin3 =\n\te_mfield_streaming_output_call_request_response_parameters(id(Elem,\n\t\t\t\t\t\t\t\t      TrUserData),\n\t\t\t\t\t\t\t\t   Bin2,\n\t\t\t\t\t\t\t\t   TrUserData),\n    e_field_streaming_output_call_request_response_parameters(Rest,\n\t\t\t\t\t\t\t      Bin3, TrUserData);\ne_field_streaming_output_call_request_response_parameters([],\n\t\t\t\t\t\t\t  Bin, _TrUserData) ->\n    Bin.\n\ne_mfield_streaming_output_call_request_payload(Msg, Bin,\n\t\t\t\t\t       TrUserData) ->\n    SubBin = encode_msg_payload(Msg, <<>>, TrUserData),\n    Bin2 = e_varint(byte_size(SubBin), Bin),\n    <<Bin2/binary, SubBin/binary>>.\n\ne_mfield_streaming_output_call_request_response_status(Msg,\n\t\t\t\t\t\t       Bin, TrUserData) ->\n    SubBin = encode_msg_echo_status(Msg, <<>>, TrUserData),\n    Bin2 = e_varint(byte_size(SubBin), Bin),\n    <<Bin2/binary, SubBin/binary>>.\n\ne_mfield_streaming_output_call_response_payload(Msg,\n\t\t\t\t\t\tBin, TrUserData) ->\n    SubBin = encode_msg_payload(Msg, <<>>, TrUserData),\n    Bin2 = e_varint(byte_size(SubBin), Bin),\n    <<Bin2/binary, SubBin/binary>>.\n\ne_field_reconnect_info_backoff_ms(Elems, Bin,\n\t\t\t\t  TrUserData)\n    when Elems =/= [] ->\n    SubBin = e_pfield_reconnect_info_backoff_ms(Elems, <<>>,\n\t\t\t\t\t\tTrUserData),\n    Bin2 = <<Bin/binary, 18>>,\n    Bin3 = e_varint(byte_size(SubBin), Bin2),\n    <<Bin3/binary, SubBin/binary>>;\ne_field_reconnect_info_backoff_ms([], Bin,\n\t\t\t\t  _TrUserData) ->\n    Bin.\n\ne_pfield_reconnect_info_backoff_ms([Value | Rest], Bin,\n\t\t\t\t   TrUserData) ->\n    Bin2 = e_type_int32(id(Value, TrUserData), Bin,\n\t\t\tTrUserData),\n    e_pfield_reconnect_info_backoff_ms(Rest, Bin2,\n\t\t\t\t       TrUserData);\ne_pfield_reconnect_info_backoff_ms([], Bin,\n\t\t\t\t   _TrUserData) ->\n    Bin.\n\n'e_enum_grpc.testing.PayloadType'('COMPRESSABLE', Bin,\n\t\t\t\t  _TrUserData) ->\n    <<Bin/binary, 0>>;\n'e_enum_grpc.testing.PayloadType'(V, Bin,\n\t\t\t\t  _TrUserData) ->\n    e_varint(V, Bin).\n\n-compile({nowarn_unused_function,e_type_sint/3}).\ne_type_sint(Value, Bin, _TrUserData) when Value >= 0 ->\n    e_varint(Value * 2, Bin);\ne_type_sint(Value, Bin, _TrUserData) ->\n    e_varint(Value * -2 - 1, Bin).\n\n-compile({nowarn_unused_function,e_type_int32/3}).\ne_type_int32(Value, Bin, _TrUserData)\n    when 0 =< Value, Value =< 127 ->\n    <<Bin/binary, Value>>;\ne_type_int32(Value, Bin, _TrUserData) ->\n    <<N:64/unsigned-native>> = <<Value:64/signed-native>>,\n    e_varint(N, Bin).\n\n-compile({nowarn_unused_function,e_type_int64/3}).\ne_type_int64(Value, Bin, _TrUserData)\n    when 0 =< Value, Value =< 127 ->\n    <<Bin/binary, Value>>;\ne_type_int64(Value, Bin, _TrUserData) ->\n    <<N:64/unsigned-native>> = <<Value:64/signed-native>>,\n    e_varint(N, Bin).\n\n-compile({nowarn_unused_function,e_type_bool/3}).\ne_type_bool(true, Bin, _TrUserData) ->\n    <<Bin/binary, 1>>;\ne_type_bool(false, Bin, _TrUserData) ->\n    <<Bin/binary, 0>>;\ne_type_bool(1, Bin, _TrUserData) -> <<Bin/binary, 1>>;\ne_type_bool(0, Bin, _TrUserData) -> <<Bin/binary, 0>>.\n\n-compile({nowarn_unused_function,e_type_string/3}).\ne_type_string(S, Bin, _TrUserData) ->\n    Utf8 = unicode:characters_to_binary(S),\n    Bin2 = e_varint(byte_size(Utf8), Bin),\n    <<Bin2/binary, Utf8/binary>>.\n\n-compile({nowarn_unused_function,e_type_bytes/3}).\ne_type_bytes(Bytes, Bin, _TrUserData)\n    when is_binary(Bytes) ->\n    Bin2 = e_varint(byte_size(Bytes), Bin),\n    <<Bin2/binary, Bytes/binary>>;\ne_type_bytes(Bytes, Bin, _TrUserData)\n    when is_list(Bytes) ->\n    BytesBin = iolist_to_binary(Bytes),\n    Bin2 = e_varint(byte_size(BytesBin), Bin),\n    <<Bin2/binary, BytesBin/binary>>.\n\n-compile({nowarn_unused_function,e_type_fixed32/3}).\ne_type_fixed32(Value, Bin, _TrUserData) ->\n    <<Bin/binary, Value:32/little>>.\n\n-compile({nowarn_unused_function,e_type_sfixed32/3}).\ne_type_sfixed32(Value, Bin, _TrUserData) ->\n    <<Bin/binary, Value:32/little-signed>>.\n\n-compile({nowarn_unused_function,e_type_fixed64/3}).\ne_type_fixed64(Value, Bin, _TrUserData) ->\n    <<Bin/binary, Value:64/little>>.\n\n-compile({nowarn_unused_function,e_type_sfixed64/3}).\ne_type_sfixed64(Value, Bin, _TrUserData) ->\n    <<Bin/binary, Value:64/little-signed>>.\n\n-compile({nowarn_unused_function,e_type_float/3}).\ne_type_float(V, Bin, _) when is_number(V) ->\n    <<Bin/binary, V:32/little-float>>;\ne_type_float(infinity, Bin, _) ->\n    <<Bin/binary, 0:16, 128, 127>>;\ne_type_float('-infinity', Bin, _) ->\n    <<Bin/binary, 0:16, 128, 255>>;\ne_type_float(nan, Bin, _) ->\n    <<Bin/binary, 0:16, 192, 127>>.\n\n-compile({nowarn_unused_function,e_type_double/3}).\ne_type_double(V, Bin, _) when is_number(V) ->\n    <<Bin/binary, V:64/little-float>>;\ne_type_double(infinity, Bin, _) ->\n    <<Bin/binary, 0:48, 240, 127>>;\ne_type_double('-infinity', Bin, _) ->\n    <<Bin/binary, 0:48, 240, 255>>;\ne_type_double(nan, Bin, _) ->\n    <<Bin/binary, 0:48, 248, 127>>.\n\n-compile({nowarn_unused_function,e_varint/3}).\ne_varint(N, Bin, _TrUserData) -> e_varint(N, Bin).\n\n-compile({nowarn_unused_function,e_varint/2}).\ne_varint(N, Bin) when N =< 127 -> <<Bin/binary, N>>;\ne_varint(N, Bin) ->\n    Bin2 = <<Bin/binary, (N band 127 bor 128)>>,\n    e_varint(N bsr 7, Bin2).\n\nis_empty_string(\"\") -> true;\nis_empty_string(<<>>) -> true;\nis_empty_string(L) when is_list(L) ->\n    not string_has_chars(L);\nis_empty_string(B) when is_binary(B) -> false.\n\nstring_has_chars([C | _]) when is_integer(C) -> true;\nstring_has_chars([H | T]) ->\n    case string_has_chars(H) of\n      true -> true;\n      false -> string_has_chars(T)\n    end;\nstring_has_chars(B)\n    when is_binary(B), byte_size(B) =/= 0 ->\n    true;\nstring_has_chars(C) when is_integer(C) -> true;\nstring_has_chars(<<>>) -> false;\nstring_has_chars([]) -> false.\n\n\ndecode_msg(Bin, MsgName) when is_binary(Bin) ->\n    decode_msg(Bin, MsgName, []).\n\ndecode_msg(Bin, MsgName, Opts) when is_binary(Bin) ->\n    TrUserData = proplists:get_value(user_data, Opts),\n    decode_msg_1_catch(Bin, MsgName, TrUserData).\n\n-ifdef('OTP_RELEASE').\ndecode_msg_1_catch(Bin, MsgName, TrUserData) ->\n    try decode_msg_2_doit(MsgName, Bin, TrUserData)\n    catch Class:Reason:StackTrace -> error({gpb_error,{decoding_failure, {Bin, MsgName, {Class, Reason, StackTrace}}}})\n    end.\n-else.\ndecode_msg_1_catch(Bin, MsgName, TrUserData) ->\n    try decode_msg_2_doit(MsgName, Bin, TrUserData)\n    catch Class:Reason ->\n        StackTrace = erlang:get_stacktrace(),\n        error({gpb_error,{decoding_failure, {Bin, MsgName, {Class, Reason, StackTrace}}}})\n    end.\n-endif.\n\ndecode_msg_2_doit(empty, Bin, TrUserData) ->\n    id(decode_msg_empty(Bin, TrUserData), TrUserData);\ndecode_msg_2_doit(bool_value, Bin, TrUserData) ->\n    id(decode_msg_bool_value(Bin, TrUserData), TrUserData);\ndecode_msg_2_doit(payload, Bin, TrUserData) ->\n    id(decode_msg_payload(Bin, TrUserData), TrUserData);\ndecode_msg_2_doit(echo_status, Bin, TrUserData) ->\n    id(decode_msg_echo_status(Bin, TrUserData), TrUserData);\ndecode_msg_2_doit(simple_request, Bin, TrUserData) ->\n    id(decode_msg_simple_request(Bin, TrUserData),\n       TrUserData);\ndecode_msg_2_doit(simple_response, Bin, TrUserData) ->\n    id(decode_msg_simple_response(Bin, TrUserData),\n       TrUserData);\ndecode_msg_2_doit(streaming_input_call_request, Bin,\n\t\t  TrUserData) ->\n    id(decode_msg_streaming_input_call_request(Bin,\n\t\t\t\t\t       TrUserData),\n       TrUserData);\ndecode_msg_2_doit(streaming_input_call_response, Bin,\n\t\t  TrUserData) ->\n    id(decode_msg_streaming_input_call_response(Bin,\n\t\t\t\t\t\tTrUserData),\n       TrUserData);\ndecode_msg_2_doit(response_parameters, Bin,\n\t\t  TrUserData) ->\n    id(decode_msg_response_parameters(Bin, TrUserData),\n       TrUserData);\ndecode_msg_2_doit(streaming_output_call_request, Bin,\n\t\t  TrUserData) ->\n    id(decode_msg_streaming_output_call_request(Bin,\n\t\t\t\t\t\tTrUserData),\n       TrUserData);\ndecode_msg_2_doit(streaming_output_call_response, Bin,\n\t\t  TrUserData) ->\n    id(decode_msg_streaming_output_call_response(Bin,\n\t\t\t\t\t\t TrUserData),\n       TrUserData);\ndecode_msg_2_doit(reconnect_params, Bin, TrUserData) ->\n    id(decode_msg_reconnect_params(Bin, TrUserData),\n       TrUserData);\ndecode_msg_2_doit(reconnect_info, Bin, TrUserData) ->\n    id(decode_msg_reconnect_info(Bin, TrUserData),\n       TrUserData).\n\n\n\ndecode_msg_empty(Bin, TrUserData) ->\n    dfp_read_field_def_empty(Bin, 0, 0, TrUserData).\n\ndfp_read_field_def_empty(<<>>, 0, 0, _) -> #{};\ndfp_read_field_def_empty(Other, Z1, Z2, TrUserData) ->\n    dg_read_field_def_empty(Other, Z1, Z2, TrUserData).\n\ndg_read_field_def_empty(<<1:1, X:7, Rest/binary>>, N,\n\t\t\tAcc, TrUserData)\n    when N < 32 - 7 ->\n    dg_read_field_def_empty(Rest, N + 7, X bsl N + Acc,\n\t\t\t    TrUserData);\ndg_read_field_def_empty(<<0:1, X:7, Rest/binary>>, N,\n\t\t\tAcc, TrUserData) ->\n    Key = X bsl N + Acc,\n    case Key band 7 of\n      0 -> skip_varint_empty(Rest, 0, 0, TrUserData);\n      1 -> skip_64_empty(Rest, 0, 0, TrUserData);\n      2 ->\n\t  skip_length_delimited_empty(Rest, 0, 0, TrUserData);\n      3 -> skip_group_empty(Rest, Key bsr 3, 0, TrUserData);\n      5 -> skip_32_empty(Rest, 0, 0, TrUserData)\n    end;\ndg_read_field_def_empty(<<>>, 0, 0, _) -> #{}.\n\nskip_varint_empty(<<1:1, _:7, Rest/binary>>, Z1, Z2,\n\t\t  TrUserData) ->\n    skip_varint_empty(Rest, Z1, Z2, TrUserData);\nskip_varint_empty(<<0:1, _:7, Rest/binary>>, Z1, Z2,\n\t\t  TrUserData) ->\n    dfp_read_field_def_empty(Rest, Z1, Z2, TrUserData).\n\nskip_length_delimited_empty(<<1:1, X:7, Rest/binary>>,\n\t\t\t    N, Acc, TrUserData)\n    when N < 57 ->\n    skip_length_delimited_empty(Rest, N + 7, X bsl N + Acc,\n\t\t\t\tTrUserData);\nskip_length_delimited_empty(<<0:1, X:7, Rest/binary>>,\n\t\t\t    N, Acc, TrUserData) ->\n    Length = X bsl N + Acc,\n    <<_:Length/binary, Rest2/binary>> = Rest,\n    dfp_read_field_def_empty(Rest2, 0, 0, TrUserData).\n\nskip_group_empty(Bin, FNum, Z2, TrUserData) ->\n    {_, Rest} = read_group(Bin, FNum),\n    dfp_read_field_def_empty(Rest, 0, Z2, TrUserData).\n\nskip_32_empty(<<_:32, Rest/binary>>, Z1, Z2,\n\t      TrUserData) ->\n    dfp_read_field_def_empty(Rest, Z1, Z2, TrUserData).\n\nskip_64_empty(<<_:64, Rest/binary>>, Z1, Z2,\n\t      TrUserData) ->\n    dfp_read_field_def_empty(Rest, Z1, Z2, TrUserData).\n\ndecode_msg_bool_value(Bin, TrUserData) ->\n    dfp_read_field_def_bool_value(Bin, 0, 0,\n\t\t\t\t  id(false, TrUserData), TrUserData).\n\ndfp_read_field_def_bool_value(<<8, Rest/binary>>, Z1,\n\t\t\t      Z2, F@_1, TrUserData) ->\n    d_field_bool_value_value(Rest, Z1, Z2, F@_1,\n\t\t\t     TrUserData);\ndfp_read_field_def_bool_value(<<>>, 0, 0, F@_1, _) ->\n    #{value => F@_1};\ndfp_read_field_def_bool_value(Other, Z1, Z2, F@_1,\n\t\t\t      TrUserData) ->\n    dg_read_field_def_bool_value(Other, Z1, Z2, F@_1,\n\t\t\t\t TrUserData).\n\ndg_read_field_def_bool_value(<<1:1, X:7, Rest/binary>>,\n\t\t\t     N, Acc, F@_1, TrUserData)\n    when N < 32 - 7 ->\n    dg_read_field_def_bool_value(Rest, N + 7, X bsl N + Acc,\n\t\t\t\t F@_1, TrUserData);\ndg_read_field_def_bool_value(<<0:1, X:7, Rest/binary>>,\n\t\t\t     N, Acc, F@_1, TrUserData) ->\n    Key = X bsl N + Acc,\n    case Key of\n      8 ->\n\t  d_field_bool_value_value(Rest, 0, 0, F@_1, TrUserData);\n      _ ->\n\t  case Key band 7 of\n\t    0 ->\n\t\tskip_varint_bool_value(Rest, 0, 0, F@_1, TrUserData);\n\t    1 -> skip_64_bool_value(Rest, 0, 0, F@_1, TrUserData);\n\t    2 ->\n\t\tskip_length_delimited_bool_value(Rest, 0, 0, F@_1,\n\t\t\t\t\t\t TrUserData);\n\t    3 ->\n\t\tskip_group_bool_value(Rest, Key bsr 3, 0, F@_1,\n\t\t\t\t      TrUserData);\n\t    5 -> skip_32_bool_value(Rest, 0, 0, F@_1, TrUserData)\n\t  end\n    end;\ndg_read_field_def_bool_value(<<>>, 0, 0, F@_1, _) ->\n    #{value => F@_1}.\n\nd_field_bool_value_value(<<1:1, X:7, Rest/binary>>, N,\n\t\t\t Acc, F@_1, TrUserData)\n    when N < 57 ->\n    d_field_bool_value_value(Rest, N + 7, X bsl N + Acc,\n\t\t\t     F@_1, TrUserData);\nd_field_bool_value_value(<<0:1, X:7, Rest/binary>>, N,\n\t\t\t Acc, _, TrUserData) ->\n    {NewFValue, RestF} = {id(X bsl N + Acc =/= 0,\n\t\t\t     TrUserData),\n\t\t\t  Rest},\n    dfp_read_field_def_bool_value(RestF, 0, 0, NewFValue,\n\t\t\t\t  TrUserData).\n\nskip_varint_bool_value(<<1:1, _:7, Rest/binary>>, Z1,\n\t\t       Z2, F@_1, TrUserData) ->\n    skip_varint_bool_value(Rest, Z1, Z2, F@_1, TrUserData);\nskip_varint_bool_value(<<0:1, _:7, Rest/binary>>, Z1,\n\t\t       Z2, F@_1, TrUserData) ->\n    dfp_read_field_def_bool_value(Rest, Z1, Z2, F@_1,\n\t\t\t\t  TrUserData).\n\nskip_length_delimited_bool_value(<<1:1, X:7,\n\t\t\t\t   Rest/binary>>,\n\t\t\t\t N, Acc, F@_1, TrUserData)\n    when N < 57 ->\n    skip_length_delimited_bool_value(Rest, N + 7,\n\t\t\t\t     X bsl N + Acc, F@_1, TrUserData);\nskip_length_delimited_bool_value(<<0:1, X:7,\n\t\t\t\t   Rest/binary>>,\n\t\t\t\t N, Acc, F@_1, TrUserData) ->\n    Length = X bsl N + Acc,\n    <<_:Length/binary, Rest2/binary>> = Rest,\n    dfp_read_field_def_bool_value(Rest2, 0, 0, F@_1,\n\t\t\t\t  TrUserData).\n\nskip_group_bool_value(Bin, FNum, Z2, F@_1,\n\t\t      TrUserData) ->\n    {_, Rest} = read_group(Bin, FNum),\n    dfp_read_field_def_bool_value(Rest, 0, Z2, F@_1,\n\t\t\t\t  TrUserData).\n\nskip_32_bool_value(<<_:32, Rest/binary>>, Z1, Z2, F@_1,\n\t\t   TrUserData) ->\n    dfp_read_field_def_bool_value(Rest, Z1, Z2, F@_1,\n\t\t\t\t  TrUserData).\n\nskip_64_bool_value(<<_:64, Rest/binary>>, Z1, Z2, F@_1,\n\t\t   TrUserData) ->\n    dfp_read_field_def_bool_value(Rest, Z1, Z2, F@_1,\n\t\t\t\t  TrUserData).\n\ndecode_msg_payload(Bin, TrUserData) ->\n    dfp_read_field_def_payload(Bin, 0, 0,\n\t\t\t       id('COMPRESSABLE', TrUserData),\n\t\t\t       id(<<>>, TrUserData), TrUserData).\n\ndfp_read_field_def_payload(<<8, Rest/binary>>, Z1, Z2,\n\t\t\t   F@_1, F@_2, TrUserData) ->\n    d_field_payload_type(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t TrUserData);\ndfp_read_field_def_payload(<<18, Rest/binary>>, Z1, Z2,\n\t\t\t   F@_1, F@_2, TrUserData) ->\n    d_field_payload_body(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t TrUserData);\ndfp_read_field_def_payload(<<>>, 0, 0, F@_1, F@_2, _) ->\n    #{type => F@_1, body => F@_2};\ndfp_read_field_def_payload(Other, Z1, Z2, F@_1, F@_2,\n\t\t\t   TrUserData) ->\n    dg_read_field_def_payload(Other, Z1, Z2, F@_1, F@_2,\n\t\t\t      TrUserData).\n\ndg_read_field_def_payload(<<1:1, X:7, Rest/binary>>, N,\n\t\t\t  Acc, F@_1, F@_2, TrUserData)\n    when N < 32 - 7 ->\n    dg_read_field_def_payload(Rest, N + 7, X bsl N + Acc,\n\t\t\t      F@_1, F@_2, TrUserData);\ndg_read_field_def_payload(<<0:1, X:7, Rest/binary>>, N,\n\t\t\t  Acc, F@_1, F@_2, TrUserData) ->\n    Key = X bsl N + Acc,\n    case Key of\n      8 ->\n\t  d_field_payload_type(Rest, 0, 0, F@_1, F@_2,\n\t\t\t       TrUserData);\n      18 ->\n\t  d_field_payload_body(Rest, 0, 0, F@_1, F@_2,\n\t\t\t       TrUserData);\n      _ ->\n\t  case Key band 7 of\n\t    0 ->\n\t\tskip_varint_payload(Rest, 0, 0, F@_1, F@_2, TrUserData);\n\t    1 ->\n\t\tskip_64_payload(Rest, 0, 0, F@_1, F@_2, TrUserData);\n\t    2 ->\n\t\tskip_length_delimited_payload(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t\t      TrUserData);\n\t    3 ->\n\t\tskip_group_payload(Rest, Key bsr 3, 0, F@_1, F@_2,\n\t\t\t\t   TrUserData);\n\t    5 -> skip_32_payload(Rest, 0, 0, F@_1, F@_2, TrUserData)\n\t  end\n    end;\ndg_read_field_def_payload(<<>>, 0, 0, F@_1, F@_2, _) ->\n    #{type => F@_1, body => F@_2}.\n\nd_field_payload_type(<<1:1, X:7, Rest/binary>>, N, Acc,\n\t\t     F@_1, F@_2, TrUserData)\n    when N < 57 ->\n    d_field_payload_type(Rest, N + 7, X bsl N + Acc, F@_1,\n\t\t\t F@_2, TrUserData);\nd_field_payload_type(<<0:1, X:7, Rest/binary>>, N, Acc,\n\t\t     _, F@_2, TrUserData) ->\n    {NewFValue, RestF} =\n\t{id('d_enum_grpc.testing.PayloadType'(begin\n\t\t\t\t\t\t<<Res:32/signed-native>> = <<(X\n\t\t\t\t\t\t\t\t\t\tbsl\n\t\t\t\t\t\t\t\t\t\tN\n\t\t\t\t\t\t\t\t\t\t+\n\t\t\t\t\t\t\t\t\t\tAcc):32/unsigned-native>>,\n\t\t\t\t\t\tid(Res, TrUserData)\n\t\t\t\t\t      end),\n\t    TrUserData),\n\t Rest},\n    dfp_read_field_def_payload(RestF, 0, 0, NewFValue, F@_2,\n\t\t\t       TrUserData).\n\nd_field_payload_body(<<1:1, X:7, Rest/binary>>, N, Acc,\n\t\t     F@_1, F@_2, TrUserData)\n    when N < 57 ->\n    d_field_payload_body(Rest, N + 7, X bsl N + Acc, F@_1,\n\t\t\t F@_2, TrUserData);\nd_field_payload_body(<<0:1, X:7, Rest/binary>>, N, Acc,\n\t\t     F@_1, _, TrUserData) ->\n    {NewFValue, RestF} = begin\n\t\t\t   Len = X bsl N + Acc,\n\t\t\t   <<Bytes:Len/binary, Rest2/binary>> = Rest,\n\t\t\t   {id(binary:copy(Bytes), TrUserData), Rest2}\n\t\t\t end,\n    dfp_read_field_def_payload(RestF, 0, 0, F@_1, NewFValue,\n\t\t\t       TrUserData).\n\nskip_varint_payload(<<1:1, _:7, Rest/binary>>, Z1, Z2,\n\t\t    F@_1, F@_2, TrUserData) ->\n    skip_varint_payload(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\tTrUserData);\nskip_varint_payload(<<0:1, _:7, Rest/binary>>, Z1, Z2,\n\t\t    F@_1, F@_2, TrUserData) ->\n    dfp_read_field_def_payload(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t       TrUserData).\n\nskip_length_delimited_payload(<<1:1, X:7, Rest/binary>>,\n\t\t\t      N, Acc, F@_1, F@_2, TrUserData)\n    when N < 57 ->\n    skip_length_delimited_payload(Rest, N + 7,\n\t\t\t\t  X bsl N + Acc, F@_1, F@_2, TrUserData);\nskip_length_delimited_payload(<<0:1, X:7, Rest/binary>>,\n\t\t\t      N, Acc, F@_1, F@_2, TrUserData) ->\n    Length = X bsl N + Acc,\n    <<_:Length/binary, Rest2/binary>> = Rest,\n    dfp_read_field_def_payload(Rest2, 0, 0, F@_1, F@_2,\n\t\t\t       TrUserData).\n\nskip_group_payload(Bin, FNum, Z2, F@_1, F@_2,\n\t\t   TrUserData) ->\n    {_, Rest} = read_group(Bin, FNum),\n    dfp_read_field_def_payload(Rest, 0, Z2, F@_1, F@_2,\n\t\t\t       TrUserData).\n\nskip_32_payload(<<_:32, Rest/binary>>, Z1, Z2, F@_1,\n\t\tF@_2, TrUserData) ->\n    dfp_read_field_def_payload(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t       TrUserData).\n\nskip_64_payload(<<_:64, Rest/binary>>, Z1, Z2, F@_1,\n\t\tF@_2, TrUserData) ->\n    dfp_read_field_def_payload(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t       TrUserData).\n\ndecode_msg_echo_status(Bin, TrUserData) ->\n    dfp_read_field_def_echo_status(Bin, 0, 0,\n\t\t\t\t   id(0, TrUserData), id(<<>>, TrUserData),\n\t\t\t\t   TrUserData).\n\ndfp_read_field_def_echo_status(<<8, Rest/binary>>, Z1,\n\t\t\t       Z2, F@_1, F@_2, TrUserData) ->\n    d_field_echo_status_code(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t     TrUserData);\ndfp_read_field_def_echo_status(<<18, Rest/binary>>, Z1,\n\t\t\t       Z2, F@_1, F@_2, TrUserData) ->\n    d_field_echo_status_message(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t\tTrUserData);\ndfp_read_field_def_echo_status(<<>>, 0, 0, F@_1, F@_2,\n\t\t\t       _) ->\n    #{code => F@_1, message => F@_2};\ndfp_read_field_def_echo_status(Other, Z1, Z2, F@_1,\n\t\t\t       F@_2, TrUserData) ->\n    dg_read_field_def_echo_status(Other, Z1, Z2, F@_1, F@_2,\n\t\t\t\t  TrUserData).\n\ndg_read_field_def_echo_status(<<1:1, X:7, Rest/binary>>,\n\t\t\t      N, Acc, F@_1, F@_2, TrUserData)\n    when N < 32 - 7 ->\n    dg_read_field_def_echo_status(Rest, N + 7,\n\t\t\t\t  X bsl N + Acc, F@_1, F@_2, TrUserData);\ndg_read_field_def_echo_status(<<0:1, X:7, Rest/binary>>,\n\t\t\t      N, Acc, F@_1, F@_2, TrUserData) ->\n    Key = X bsl N + Acc,\n    case Key of\n      8 ->\n\t  d_field_echo_status_code(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t   TrUserData);\n      18 ->\n\t  d_field_echo_status_message(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t      TrUserData);\n      _ ->\n\t  case Key band 7 of\n\t    0 ->\n\t\tskip_varint_echo_status(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t\tTrUserData);\n\t    1 ->\n\t\tskip_64_echo_status(Rest, 0, 0, F@_1, F@_2, TrUserData);\n\t    2 ->\n\t\tskip_length_delimited_echo_status(Rest, 0, 0, F@_1,\n\t\t\t\t\t\t  F@_2, TrUserData);\n\t    3 ->\n\t\tskip_group_echo_status(Rest, Key bsr 3, 0, F@_1, F@_2,\n\t\t\t\t       TrUserData);\n\t    5 ->\n\t\tskip_32_echo_status(Rest, 0, 0, F@_1, F@_2, TrUserData)\n\t  end\n    end;\ndg_read_field_def_echo_status(<<>>, 0, 0, F@_1, F@_2,\n\t\t\t      _) ->\n    #{code => F@_1, message => F@_2}.\n\nd_field_echo_status_code(<<1:1, X:7, Rest/binary>>, N,\n\t\t\t Acc, F@_1, F@_2, TrUserData)\n    when N < 57 ->\n    d_field_echo_status_code(Rest, N + 7, X bsl N + Acc,\n\t\t\t     F@_1, F@_2, TrUserData);\nd_field_echo_status_code(<<0:1, X:7, Rest/binary>>, N,\n\t\t\t Acc, _, F@_2, TrUserData) ->\n    {NewFValue, RestF} = {begin\n\t\t\t    <<Res:32/signed-native>> = <<(X bsl N +\n\t\t\t\t\t\t\t    Acc):32/unsigned-native>>,\n\t\t\t    id(Res, TrUserData)\n\t\t\t  end,\n\t\t\t  Rest},\n    dfp_read_field_def_echo_status(RestF, 0, 0, NewFValue,\n\t\t\t\t   F@_2, TrUserData).\n\nd_field_echo_status_message(<<1:1, X:7, Rest/binary>>,\n\t\t\t    N, Acc, F@_1, F@_2, TrUserData)\n    when N < 57 ->\n    d_field_echo_status_message(Rest, N + 7, X bsl N + Acc,\n\t\t\t\tF@_1, F@_2, TrUserData);\nd_field_echo_status_message(<<0:1, X:7, Rest/binary>>,\n\t\t\t    N, Acc, F@_1, _, TrUserData) ->\n    {NewFValue, RestF} = begin\n\t\t\t   Len = X bsl N + Acc,\n\t\t\t   <<Bytes:Len/binary, Rest2/binary>> = Rest,\n\t\t\t   {id(binary:copy(Bytes), TrUserData), Rest2}\n\t\t\t end,\n    dfp_read_field_def_echo_status(RestF, 0, 0, F@_1,\n\t\t\t\t   NewFValue, TrUserData).\n\nskip_varint_echo_status(<<1:1, _:7, Rest/binary>>, Z1,\n\t\t\tZ2, F@_1, F@_2, TrUserData) ->\n    skip_varint_echo_status(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t    TrUserData);\nskip_varint_echo_status(<<0:1, _:7, Rest/binary>>, Z1,\n\t\t\tZ2, F@_1, F@_2, TrUserData) ->\n    dfp_read_field_def_echo_status(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t\t   TrUserData).\n\nskip_length_delimited_echo_status(<<1:1, X:7,\n\t\t\t\t    Rest/binary>>,\n\t\t\t\t  N, Acc, F@_1, F@_2, TrUserData)\n    when N < 57 ->\n    skip_length_delimited_echo_status(Rest, N + 7,\n\t\t\t\t      X bsl N + Acc, F@_1, F@_2, TrUserData);\nskip_length_delimited_echo_status(<<0:1, X:7,\n\t\t\t\t    Rest/binary>>,\n\t\t\t\t  N, Acc, F@_1, F@_2, TrUserData) ->\n    Length = X bsl N + Acc,\n    <<_:Length/binary, Rest2/binary>> = Rest,\n    dfp_read_field_def_echo_status(Rest2, 0, 0, F@_1, F@_2,\n\t\t\t\t   TrUserData).\n\nskip_group_echo_status(Bin, FNum, Z2, F@_1, F@_2,\n\t\t       TrUserData) ->\n    {_, Rest} = read_group(Bin, FNum),\n    dfp_read_field_def_echo_status(Rest, 0, Z2, F@_1, F@_2,\n\t\t\t\t   TrUserData).\n\nskip_32_echo_status(<<_:32, Rest/binary>>, Z1, Z2, F@_1,\n\t\t    F@_2, TrUserData) ->\n    dfp_read_field_def_echo_status(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t\t   TrUserData).\n\nskip_64_echo_status(<<_:64, Rest/binary>>, Z1, Z2, F@_1,\n\t\t    F@_2, TrUserData) ->\n    dfp_read_field_def_echo_status(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t\t   TrUserData).\n\ndecode_msg_simple_request(Bin, TrUserData) ->\n    dfp_read_field_def_simple_request(Bin, 0, 0,\n\t\t\t\t      id('COMPRESSABLE', TrUserData),\n\t\t\t\t      id(0, TrUserData),\n\t\t\t\t      id('$undef', TrUserData),\n\t\t\t\t      id(false, TrUserData),\n\t\t\t\t      id(false, TrUserData),\n\t\t\t\t      id('$undef', TrUserData),\n\t\t\t\t      id('$undef', TrUserData),\n\t\t\t\t      id('$undef', TrUserData), TrUserData).\n\ndfp_read_field_def_simple_request(<<8, Rest/binary>>,\n\t\t\t\t  Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t  F@_7, F@_8, TrUserData) ->\n    d_field_simple_request_response_type(Rest, Z1, Z2, F@_1,\n\t\t\t\t\t F@_2, F@_3, F@_4, F@_5, F@_6, F@_7,\n\t\t\t\t\t F@_8, TrUserData);\ndfp_read_field_def_simple_request(<<16, Rest/binary>>,\n\t\t\t\t  Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t  F@_7, F@_8, TrUserData) ->\n    d_field_simple_request_response_size(Rest, Z1, Z2, F@_1,\n\t\t\t\t\t F@_2, F@_3, F@_4, F@_5, F@_6, F@_7,\n\t\t\t\t\t F@_8, TrUserData);\ndfp_read_field_def_simple_request(<<26, Rest/binary>>,\n\t\t\t\t  Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t  F@_7, F@_8, TrUserData) ->\n    d_field_simple_request_payload(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t\t   F@_3, F@_4, F@_5, F@_6, F@_7, F@_8,\n\t\t\t\t   TrUserData);\ndfp_read_field_def_simple_request(<<32, Rest/binary>>,\n\t\t\t\t  Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t  F@_7, F@_8, TrUserData) ->\n    d_field_simple_request_fill_username(Rest, Z1, Z2, F@_1,\n\t\t\t\t\t F@_2, F@_3, F@_4, F@_5, F@_6, F@_7,\n\t\t\t\t\t F@_8, TrUserData);\ndfp_read_field_def_simple_request(<<40, Rest/binary>>,\n\t\t\t\t  Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t  F@_7, F@_8, TrUserData) ->\n    d_field_simple_request_fill_oauth_scope(Rest, Z1, Z2,\n\t\t\t\t\t    F@_1, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t\t    F@_7, F@_8, TrUserData);\ndfp_read_field_def_simple_request(<<50, Rest/binary>>,\n\t\t\t\t  Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t  F@_7, F@_8, TrUserData) ->\n    d_field_simple_request_response_compressed(Rest, Z1, Z2,\n\t\t\t\t\t       F@_1, F@_2, F@_3, F@_4, F@_5,\n\t\t\t\t\t       F@_6, F@_7, F@_8, TrUserData);\ndfp_read_field_def_simple_request(<<58, Rest/binary>>,\n\t\t\t\t  Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t  F@_7, F@_8, TrUserData) ->\n    d_field_simple_request_response_status(Rest, Z1, Z2,\n\t\t\t\t\t   F@_1, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t\t   F@_7, F@_8, TrUserData);\ndfp_read_field_def_simple_request(<<66, Rest/binary>>,\n\t\t\t\t  Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t  F@_7, F@_8, TrUserData) ->\n    d_field_simple_request_expect_compressed(Rest, Z1, Z2,\n\t\t\t\t\t     F@_1, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t\t     F@_7, F@_8, TrUserData);\ndfp_read_field_def_simple_request(<<>>, 0, 0, F@_1,\n\t\t\t\t  F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8,\n\t\t\t\t  _) ->\n    S1 = #{response_type => F@_1, response_size => F@_2,\n\t   fill_username => F@_4, fill_oauth_scope => F@_5},\n    S2 = if F@_3 == '$undef' -> S1;\n\t    true -> S1#{payload => F@_3}\n\t end,\n    S3 = if F@_6 == '$undef' -> S2;\n\t    true -> S2#{response_compressed => F@_6}\n\t end,\n    S4 = if F@_7 == '$undef' -> S3;\n\t    true -> S3#{response_status => F@_7}\n\t end,\n    if F@_8 == '$undef' -> S4;\n       true -> S4#{expect_compressed => F@_8}\n    end;\ndfp_read_field_def_simple_request(Other, Z1, Z2, F@_1,\n\t\t\t\t  F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8,\n\t\t\t\t  TrUserData) ->\n    dg_read_field_def_simple_request(Other, Z1, Z2, F@_1,\n\t\t\t\t     F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8,\n\t\t\t\t     TrUserData).\n\ndg_read_field_def_simple_request(<<1:1, X:7,\n\t\t\t\t   Rest/binary>>,\n\t\t\t\t N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t F@_7, F@_8, TrUserData)\n    when N < 32 - 7 ->\n    dg_read_field_def_simple_request(Rest, N + 7,\n\t\t\t\t     X bsl N + Acc, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t     F@_5, F@_6, F@_7, F@_8, TrUserData);\ndg_read_field_def_simple_request(<<0:1, X:7,\n\t\t\t\t   Rest/binary>>,\n\t\t\t\t N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t F@_7, F@_8, TrUserData) ->\n    Key = X bsl N + Acc,\n    case Key of\n      8 ->\n\t  d_field_simple_request_response_type(Rest, 0, 0, F@_1,\n\t\t\t\t\t       F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t\t       F@_7, F@_8, TrUserData);\n      16 ->\n\t  d_field_simple_request_response_size(Rest, 0, 0, F@_1,\n\t\t\t\t\t       F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t\t       F@_7, F@_8, TrUserData);\n      26 ->\n\t  d_field_simple_request_payload(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t\t F@_3, F@_4, F@_5, F@_6, F@_7, F@_8,\n\t\t\t\t\t TrUserData);\n      32 ->\n\t  d_field_simple_request_fill_username(Rest, 0, 0, F@_1,\n\t\t\t\t\t       F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t\t       F@_7, F@_8, TrUserData);\n      40 ->\n\t  d_field_simple_request_fill_oauth_scope(Rest, 0, 0,\n\t\t\t\t\t\t  F@_1, F@_2, F@_3, F@_4, F@_5,\n\t\t\t\t\t\t  F@_6, F@_7, F@_8, TrUserData);\n      50 ->\n\t  d_field_simple_request_response_compressed(Rest, 0, 0,\n\t\t\t\t\t\t     F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\t\t     F@_5, F@_6, F@_7, F@_8,\n\t\t\t\t\t\t     TrUserData);\n      58 ->\n\t  d_field_simple_request_response_status(Rest, 0, 0, F@_1,\n\t\t\t\t\t\t F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t\t\t F@_7, F@_8, TrUserData);\n      66 ->\n\t  d_field_simple_request_expect_compressed(Rest, 0, 0,\n\t\t\t\t\t\t   F@_1, F@_2, F@_3, F@_4, F@_5,\n\t\t\t\t\t\t   F@_6, F@_7, F@_8,\n\t\t\t\t\t\t   TrUserData);\n      _ ->\n\t  case Key band 7 of\n\t    0 ->\n\t\tskip_varint_simple_request(Rest, 0, 0, F@_1, F@_2, F@_3,\n\t\t\t\t\t   F@_4, F@_5, F@_6, F@_7, F@_8,\n\t\t\t\t\t   TrUserData);\n\t    1 ->\n\t\tskip_64_simple_request(Rest, 0, 0, F@_1, F@_2, F@_3,\n\t\t\t\t       F@_4, F@_5, F@_6, F@_7, F@_8,\n\t\t\t\t       TrUserData);\n\t    2 ->\n\t\tskip_length_delimited_simple_request(Rest, 0, 0, F@_1,\n\t\t\t\t\t\t     F@_2, F@_3, F@_4, F@_5,\n\t\t\t\t\t\t     F@_6, F@_7, F@_8,\n\t\t\t\t\t\t     TrUserData);\n\t    3 ->\n\t\tskip_group_simple_request(Rest, Key bsr 3, 0, F@_1,\n\t\t\t\t\t  F@_2, F@_3, F@_4, F@_5, F@_6, F@_7,\n\t\t\t\t\t  F@_8, TrUserData);\n\t    5 ->\n\t\tskip_32_simple_request(Rest, 0, 0, F@_1, F@_2, F@_3,\n\t\t\t\t       F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData)\n\t  end\n    end;\ndg_read_field_def_simple_request(<<>>, 0, 0, F@_1, F@_2,\n\t\t\t\t F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, _) ->\n    S1 = #{response_type => F@_1, response_size => F@_2,\n\t   fill_username => F@_4, fill_oauth_scope => F@_5},\n    S2 = if F@_3 == '$undef' -> S1;\n\t    true -> S1#{payload => F@_3}\n\t end,\n    S3 = if F@_6 == '$undef' -> S2;\n\t    true -> S2#{response_compressed => F@_6}\n\t end,\n    S4 = if F@_7 == '$undef' -> S3;\n\t    true -> S3#{response_status => F@_7}\n\t end,\n    if F@_8 == '$undef' -> S4;\n       true -> S4#{expect_compressed => F@_8}\n    end.\n\nd_field_simple_request_response_type(<<1:1, X:7,\n\t\t\t\t       Rest/binary>>,\n\t\t\t\t     N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t     F@_7, F@_8, TrUserData)\n    when N < 57 ->\n    d_field_simple_request_response_type(Rest, N + 7,\n\t\t\t\t\t X bsl N + Acc, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\t F@_5, F@_6, F@_7, F@_8, TrUserData);\nd_field_simple_request_response_type(<<0:1, X:7,\n\t\t\t\t       Rest/binary>>,\n\t\t\t\t     N, Acc, _, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t     F@_7, F@_8, TrUserData) ->\n    {NewFValue, RestF} =\n\t{id('d_enum_grpc.testing.PayloadType'(begin\n\t\t\t\t\t\t<<Res:32/signed-native>> = <<(X\n\t\t\t\t\t\t\t\t\t\tbsl\n\t\t\t\t\t\t\t\t\t\tN\n\t\t\t\t\t\t\t\t\t\t+\n\t\t\t\t\t\t\t\t\t\tAcc):32/unsigned-native>>,\n\t\t\t\t\t\tid(Res, TrUserData)\n\t\t\t\t\t      end),\n\t    TrUserData),\n\t Rest},\n    dfp_read_field_def_simple_request(RestF, 0, 0,\n\t\t\t\t      NewFValue, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t      F@_7, F@_8, TrUserData).\n\nd_field_simple_request_response_size(<<1:1, X:7,\n\t\t\t\t       Rest/binary>>,\n\t\t\t\t     N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t     F@_7, F@_8, TrUserData)\n    when N < 57 ->\n    d_field_simple_request_response_size(Rest, N + 7,\n\t\t\t\t\t X bsl N + Acc, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\t F@_5, F@_6, F@_7, F@_8, TrUserData);\nd_field_simple_request_response_size(<<0:1, X:7,\n\t\t\t\t       Rest/binary>>,\n\t\t\t\t     N, Acc, F@_1, _, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t     F@_7, F@_8, TrUserData) ->\n    {NewFValue, RestF} = {begin\n\t\t\t    <<Res:32/signed-native>> = <<(X bsl N +\n\t\t\t\t\t\t\t    Acc):32/unsigned-native>>,\n\t\t\t    id(Res, TrUserData)\n\t\t\t  end,\n\t\t\t  Rest},\n    dfp_read_field_def_simple_request(RestF, 0, 0, F@_1,\n\t\t\t\t      NewFValue, F@_3, F@_4, F@_5, F@_6, F@_7,\n\t\t\t\t      F@_8, TrUserData).\n\nd_field_simple_request_payload(<<1:1, X:7,\n\t\t\t\t Rest/binary>>,\n\t\t\t       N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7,\n\t\t\t       F@_8, TrUserData)\n    when N < 57 ->\n    d_field_simple_request_payload(Rest, N + 7,\n\t\t\t\t   X bsl N + Acc, F@_1, F@_2, F@_3, F@_4, F@_5,\n\t\t\t\t   F@_6, F@_7, F@_8, TrUserData);\nd_field_simple_request_payload(<<0:1, X:7,\n\t\t\t\t Rest/binary>>,\n\t\t\t       N, Acc, F@_1, F@_2, Prev, F@_4, F@_5, F@_6, F@_7,\n\t\t\t       F@_8, TrUserData) ->\n    {NewFValue, RestF} = begin\n\t\t\t   Len = X bsl N + Acc,\n\t\t\t   <<Bs:Len/binary, Rest2/binary>> = Rest,\n\t\t\t   {id(decode_msg_payload(Bs, TrUserData), TrUserData),\n\t\t\t    Rest2}\n\t\t\t end,\n    dfp_read_field_def_simple_request(RestF, 0, 0, F@_1,\n\t\t\t\t      F@_2,\n\t\t\t\t      if Prev == '$undef' -> NewFValue;\n\t\t\t\t\t true ->\n\t\t\t\t\t     merge_msg_payload(Prev, NewFValue,\n\t\t\t\t\t\t\t       TrUserData)\n\t\t\t\t      end,\n\t\t\t\t      F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData).\n\nd_field_simple_request_fill_username(<<1:1, X:7,\n\t\t\t\t       Rest/binary>>,\n\t\t\t\t     N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t     F@_7, F@_8, TrUserData)\n    when N < 57 ->\n    d_field_simple_request_fill_username(Rest, N + 7,\n\t\t\t\t\t X bsl N + Acc, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\t F@_5, F@_6, F@_7, F@_8, TrUserData);\nd_field_simple_request_fill_username(<<0:1, X:7,\n\t\t\t\t       Rest/binary>>,\n\t\t\t\t     N, Acc, F@_1, F@_2, F@_3, _, F@_5, F@_6,\n\t\t\t\t     F@_7, F@_8, TrUserData) ->\n    {NewFValue, RestF} = {id(X bsl N + Acc =/= 0,\n\t\t\t     TrUserData),\n\t\t\t  Rest},\n    dfp_read_field_def_simple_request(RestF, 0, 0, F@_1,\n\t\t\t\t      F@_2, F@_3, NewFValue, F@_5, F@_6, F@_7,\n\t\t\t\t      F@_8, TrUserData).\n\nd_field_simple_request_fill_oauth_scope(<<1:1, X:7,\n\t\t\t\t\t  Rest/binary>>,\n\t\t\t\t\tN, Acc, F@_1, F@_2, F@_3, F@_4, F@_5,\n\t\t\t\t\tF@_6, F@_7, F@_8, TrUserData)\n    when N < 57 ->\n    d_field_simple_request_fill_oauth_scope(Rest, N + 7,\n\t\t\t\t\t    X bsl N + Acc, F@_1, F@_2, F@_3,\n\t\t\t\t\t    F@_4, F@_5, F@_6, F@_7, F@_8,\n\t\t\t\t\t    TrUserData);\nd_field_simple_request_fill_oauth_scope(<<0:1, X:7,\n\t\t\t\t\t  Rest/binary>>,\n\t\t\t\t\tN, Acc, F@_1, F@_2, F@_3, F@_4, _, F@_6,\n\t\t\t\t\tF@_7, F@_8, TrUserData) ->\n    {NewFValue, RestF} = {id(X bsl N + Acc =/= 0,\n\t\t\t     TrUserData),\n\t\t\t  Rest},\n    dfp_read_field_def_simple_request(RestF, 0, 0, F@_1,\n\t\t\t\t      F@_2, F@_3, F@_4, NewFValue, F@_6, F@_7,\n\t\t\t\t      F@_8, TrUserData).\n\nd_field_simple_request_response_compressed(<<1:1, X:7,\n\t\t\t\t\t     Rest/binary>>,\n\t\t\t\t\t   N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5,\n\t\t\t\t\t   F@_6, F@_7, F@_8, TrUserData)\n    when N < 57 ->\n    d_field_simple_request_response_compressed(Rest, N + 7,\n\t\t\t\t\t       X bsl N + Acc, F@_1, F@_2, F@_3,\n\t\t\t\t\t       F@_4, F@_5, F@_6, F@_7, F@_8,\n\t\t\t\t\t       TrUserData);\nd_field_simple_request_response_compressed(<<0:1, X:7,\n\t\t\t\t\t     Rest/binary>>,\n\t\t\t\t\t   N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5,\n\t\t\t\t\t   Prev, F@_7, F@_8, TrUserData) ->\n    {NewFValue, RestF} = begin\n\t\t\t   Len = X bsl N + Acc,\n\t\t\t   <<Bs:Len/binary, Rest2/binary>> = Rest,\n\t\t\t   {id(decode_msg_bool_value(Bs, TrUserData),\n\t\t\t       TrUserData),\n\t\t\t    Rest2}\n\t\t\t end,\n    dfp_read_field_def_simple_request(RestF, 0, 0, F@_1,\n\t\t\t\t      F@_2, F@_3, F@_4, F@_5,\n\t\t\t\t      if Prev == '$undef' -> NewFValue;\n\t\t\t\t\t true ->\n\t\t\t\t\t     merge_msg_bool_value(Prev,\n\t\t\t\t\t\t\t\t  NewFValue,\n\t\t\t\t\t\t\t\t  TrUserData)\n\t\t\t\t      end,\n\t\t\t\t      F@_7, F@_8, TrUserData).\n\nd_field_simple_request_response_status(<<1:1, X:7,\n\t\t\t\t\t Rest/binary>>,\n\t\t\t\t       N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5,\n\t\t\t\t       F@_6, F@_7, F@_8, TrUserData)\n    when N < 57 ->\n    d_field_simple_request_response_status(Rest, N + 7,\n\t\t\t\t\t   X bsl N + Acc, F@_1, F@_2, F@_3,\n\t\t\t\t\t   F@_4, F@_5, F@_6, F@_7, F@_8,\n\t\t\t\t\t   TrUserData);\nd_field_simple_request_response_status(<<0:1, X:7,\n\t\t\t\t\t Rest/binary>>,\n\t\t\t\t       N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5,\n\t\t\t\t       F@_6, Prev, F@_8, TrUserData) ->\n    {NewFValue, RestF} = begin\n\t\t\t   Len = X bsl N + Acc,\n\t\t\t   <<Bs:Len/binary, Rest2/binary>> = Rest,\n\t\t\t   {id(decode_msg_echo_status(Bs, TrUserData),\n\t\t\t       TrUserData),\n\t\t\t    Rest2}\n\t\t\t end,\n    dfp_read_field_def_simple_request(RestF, 0, 0, F@_1,\n\t\t\t\t      F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t      if Prev == '$undef' -> NewFValue;\n\t\t\t\t\t true ->\n\t\t\t\t\t     merge_msg_echo_status(Prev,\n\t\t\t\t\t\t\t\t   NewFValue,\n\t\t\t\t\t\t\t\t   TrUserData)\n\t\t\t\t      end,\n\t\t\t\t      F@_8, TrUserData).\n\nd_field_simple_request_expect_compressed(<<1:1, X:7,\n\t\t\t\t\t   Rest/binary>>,\n\t\t\t\t\t N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5,\n\t\t\t\t\t F@_6, F@_7, F@_8, TrUserData)\n    when N < 57 ->\n    d_field_simple_request_expect_compressed(Rest, N + 7,\n\t\t\t\t\t     X bsl N + Acc, F@_1, F@_2, F@_3,\n\t\t\t\t\t     F@_4, F@_5, F@_6, F@_7, F@_8,\n\t\t\t\t\t     TrUserData);\nd_field_simple_request_expect_compressed(<<0:1, X:7,\n\t\t\t\t\t   Rest/binary>>,\n\t\t\t\t\t N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5,\n\t\t\t\t\t F@_6, F@_7, Prev, TrUserData) ->\n    {NewFValue, RestF} = begin\n\t\t\t   Len = X bsl N + Acc,\n\t\t\t   <<Bs:Len/binary, Rest2/binary>> = Rest,\n\t\t\t   {id(decode_msg_bool_value(Bs, TrUserData),\n\t\t\t       TrUserData),\n\t\t\t    Rest2}\n\t\t\t end,\n    dfp_read_field_def_simple_request(RestF, 0, 0, F@_1,\n\t\t\t\t      F@_2, F@_3, F@_4, F@_5, F@_6, F@_7,\n\t\t\t\t      if Prev == '$undef' -> NewFValue;\n\t\t\t\t\t true ->\n\t\t\t\t\t     merge_msg_bool_value(Prev,\n\t\t\t\t\t\t\t\t  NewFValue,\n\t\t\t\t\t\t\t\t  TrUserData)\n\t\t\t\t      end,\n\t\t\t\t      TrUserData).\n\nskip_varint_simple_request(<<1:1, _:7, Rest/binary>>,\n\t\t\t   Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7,\n\t\t\t   F@_8, TrUserData) ->\n    skip_varint_simple_request(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t       F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData);\nskip_varint_simple_request(<<0:1, _:7, Rest/binary>>,\n\t\t\t   Z1, Z2, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7,\n\t\t\t   F@_8, TrUserData) ->\n    dfp_read_field_def_simple_request(Rest, Z1, Z2, F@_1,\n\t\t\t\t      F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8,\n\t\t\t\t      TrUserData).\n\nskip_length_delimited_simple_request(<<1:1, X:7,\n\t\t\t\t       Rest/binary>>,\n\t\t\t\t     N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t     F@_7, F@_8, TrUserData)\n    when N < 57 ->\n    skip_length_delimited_simple_request(Rest, N + 7,\n\t\t\t\t\t X bsl N + Acc, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\t F@_5, F@_6, F@_7, F@_8, TrUserData);\nskip_length_delimited_simple_request(<<0:1, X:7,\n\t\t\t\t       Rest/binary>>,\n\t\t\t\t     N, Acc, F@_1, F@_2, F@_3, F@_4, F@_5, F@_6,\n\t\t\t\t     F@_7, F@_8, TrUserData) ->\n    Length = X bsl N + Acc,\n    <<_:Length/binary, Rest2/binary>> = Rest,\n    dfp_read_field_def_simple_request(Rest2, 0, 0, F@_1,\n\t\t\t\t      F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8,\n\t\t\t\t      TrUserData).\n\nskip_group_simple_request(Bin, FNum, Z2, F@_1, F@_2,\n\t\t\t  F@_3, F@_4, F@_5, F@_6, F@_7, F@_8, TrUserData) ->\n    {_, Rest} = read_group(Bin, FNum),\n    dfp_read_field_def_simple_request(Rest, 0, Z2, F@_1,\n\t\t\t\t      F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8,\n\t\t\t\t      TrUserData).\n\nskip_32_simple_request(<<_:32, Rest/binary>>, Z1, Z2,\n\t\t       F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8,\n\t\t       TrUserData) ->\n    dfp_read_field_def_simple_request(Rest, Z1, Z2, F@_1,\n\t\t\t\t      F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8,\n\t\t\t\t      TrUserData).\n\nskip_64_simple_request(<<_:64, Rest/binary>>, Z1, Z2,\n\t\t       F@_1, F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8,\n\t\t       TrUserData) ->\n    dfp_read_field_def_simple_request(Rest, Z1, Z2, F@_1,\n\t\t\t\t      F@_2, F@_3, F@_4, F@_5, F@_6, F@_7, F@_8,\n\t\t\t\t      TrUserData).\n\ndecode_msg_simple_response(Bin, TrUserData) ->\n    dfp_read_field_def_simple_response(Bin, 0, 0,\n\t\t\t\t       id('$undef', TrUserData),\n\t\t\t\t       id(<<>>, TrUserData),\n\t\t\t\t       id(<<>>, TrUserData), TrUserData).\n\ndfp_read_field_def_simple_response(<<10, Rest/binary>>,\n\t\t\t\t   Z1, Z2, F@_1, F@_2, F@_3, TrUserData) ->\n    d_field_simple_response_payload(Rest, Z1, Z2, F@_1,\n\t\t\t\t    F@_2, F@_3, TrUserData);\ndfp_read_field_def_simple_response(<<18, Rest/binary>>,\n\t\t\t\t   Z1, Z2, F@_1, F@_2, F@_3, TrUserData) ->\n    d_field_simple_response_username(Rest, Z1, Z2, F@_1,\n\t\t\t\t     F@_2, F@_3, TrUserData);\ndfp_read_field_def_simple_response(<<26, Rest/binary>>,\n\t\t\t\t   Z1, Z2, F@_1, F@_2, F@_3, TrUserData) ->\n    d_field_simple_response_oauth_scope(Rest, Z1, Z2, F@_1,\n\t\t\t\t\tF@_2, F@_3, TrUserData);\ndfp_read_field_def_simple_response(<<>>, 0, 0, F@_1,\n\t\t\t\t   F@_2, F@_3, _) ->\n    S1 = #{username => F@_2, oauth_scope => F@_3},\n    if F@_1 == '$undef' -> S1;\n       true -> S1#{payload => F@_1}\n    end;\ndfp_read_field_def_simple_response(Other, Z1, Z2, F@_1,\n\t\t\t\t   F@_2, F@_3, TrUserData) ->\n    dg_read_field_def_simple_response(Other, Z1, Z2, F@_1,\n\t\t\t\t      F@_2, F@_3, TrUserData).\n\ndg_read_field_def_simple_response(<<1:1, X:7,\n\t\t\t\t    Rest/binary>>,\n\t\t\t\t  N, Acc, F@_1, F@_2, F@_3, TrUserData)\n    when N < 32 - 7 ->\n    dg_read_field_def_simple_response(Rest, N + 7,\n\t\t\t\t      X bsl N + Acc, F@_1, F@_2, F@_3,\n\t\t\t\t      TrUserData);\ndg_read_field_def_simple_response(<<0:1, X:7,\n\t\t\t\t    Rest/binary>>,\n\t\t\t\t  N, Acc, F@_1, F@_2, F@_3, TrUserData) ->\n    Key = X bsl N + Acc,\n    case Key of\n      10 ->\n\t  d_field_simple_response_payload(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t\t  F@_3, TrUserData);\n      18 ->\n\t  d_field_simple_response_username(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t\t   F@_3, TrUserData);\n      26 ->\n\t  d_field_simple_response_oauth_scope(Rest, 0, 0, F@_1,\n\t\t\t\t\t      F@_2, F@_3, TrUserData);\n      _ ->\n\t  case Key band 7 of\n\t    0 ->\n\t\tskip_varint_simple_response(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t\t    F@_3, TrUserData);\n\t    1 ->\n\t\tskip_64_simple_response(Rest, 0, 0, F@_1, F@_2, F@_3,\n\t\t\t\t\tTrUserData);\n\t    2 ->\n\t\tskip_length_delimited_simple_response(Rest, 0, 0, F@_1,\n\t\t\t\t\t\t      F@_2, F@_3, TrUserData);\n\t    3 ->\n\t\tskip_group_simple_response(Rest, Key bsr 3, 0, F@_1,\n\t\t\t\t\t   F@_2, F@_3, TrUserData);\n\t    5 ->\n\t\tskip_32_simple_response(Rest, 0, 0, F@_1, F@_2, F@_3,\n\t\t\t\t\tTrUserData)\n\t  end\n    end;\ndg_read_field_def_simple_response(<<>>, 0, 0, F@_1,\n\t\t\t\t  F@_2, F@_3, _) ->\n    S1 = #{username => F@_2, oauth_scope => F@_3},\n    if F@_1 == '$undef' -> S1;\n       true -> S1#{payload => F@_1}\n    end.\n\nd_field_simple_response_payload(<<1:1, X:7,\n\t\t\t\t  Rest/binary>>,\n\t\t\t\tN, Acc, F@_1, F@_2, F@_3, TrUserData)\n    when N < 57 ->\n    d_field_simple_response_payload(Rest, N + 7,\n\t\t\t\t    X bsl N + Acc, F@_1, F@_2, F@_3,\n\t\t\t\t    TrUserData);\nd_field_simple_response_payload(<<0:1, X:7,\n\t\t\t\t  Rest/binary>>,\n\t\t\t\tN, Acc, Prev, F@_2, F@_3, TrUserData) ->\n    {NewFValue, RestF} = begin\n\t\t\t   Len = X bsl N + Acc,\n\t\t\t   <<Bs:Len/binary, Rest2/binary>> = Rest,\n\t\t\t   {id(decode_msg_payload(Bs, TrUserData), TrUserData),\n\t\t\t    Rest2}\n\t\t\t end,\n    dfp_read_field_def_simple_response(RestF, 0, 0,\n\t\t\t\t       if Prev == '$undef' -> NewFValue;\n\t\t\t\t\t  true ->\n\t\t\t\t\t      merge_msg_payload(Prev, NewFValue,\n\t\t\t\t\t\t\t\tTrUserData)\n\t\t\t\t       end,\n\t\t\t\t       F@_2, F@_3, TrUserData).\n\nd_field_simple_response_username(<<1:1, X:7,\n\t\t\t\t   Rest/binary>>,\n\t\t\t\t N, Acc, F@_1, F@_2, F@_3, TrUserData)\n    when N < 57 ->\n    d_field_simple_response_username(Rest, N + 7,\n\t\t\t\t     X bsl N + Acc, F@_1, F@_2, F@_3,\n\t\t\t\t     TrUserData);\nd_field_simple_response_username(<<0:1, X:7,\n\t\t\t\t   Rest/binary>>,\n\t\t\t\t N, Acc, F@_1, _, F@_3, TrUserData) ->\n    {NewFValue, RestF} = begin\n\t\t\t   Len = X bsl N + Acc,\n\t\t\t   <<Bytes:Len/binary, Rest2/binary>> = Rest,\n\t\t\t   {id(binary:copy(Bytes), TrUserData), Rest2}\n\t\t\t end,\n    dfp_read_field_def_simple_response(RestF, 0, 0, F@_1,\n\t\t\t\t       NewFValue, F@_3, TrUserData).\n\nd_field_simple_response_oauth_scope(<<1:1, X:7,\n\t\t\t\t      Rest/binary>>,\n\t\t\t\t    N, Acc, F@_1, F@_2, F@_3, TrUserData)\n    when N < 57 ->\n    d_field_simple_response_oauth_scope(Rest, N + 7,\n\t\t\t\t\tX bsl N + Acc, F@_1, F@_2, F@_3,\n\t\t\t\t\tTrUserData);\nd_field_simple_response_oauth_scope(<<0:1, X:7,\n\t\t\t\t      Rest/binary>>,\n\t\t\t\t    N, Acc, F@_1, F@_2, _, TrUserData) ->\n    {NewFValue, RestF} = begin\n\t\t\t   Len = X bsl N + Acc,\n\t\t\t   <<Bytes:Len/binary, Rest2/binary>> = Rest,\n\t\t\t   {id(binary:copy(Bytes), TrUserData), Rest2}\n\t\t\t end,\n    dfp_read_field_def_simple_response(RestF, 0, 0, F@_1,\n\t\t\t\t       F@_2, NewFValue, TrUserData).\n\nskip_varint_simple_response(<<1:1, _:7, Rest/binary>>,\n\t\t\t    Z1, Z2, F@_1, F@_2, F@_3, TrUserData) ->\n    skip_varint_simple_response(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t\tF@_3, TrUserData);\nskip_varint_simple_response(<<0:1, _:7, Rest/binary>>,\n\t\t\t    Z1, Z2, F@_1, F@_2, F@_3, TrUserData) ->\n    dfp_read_field_def_simple_response(Rest, Z1, Z2, F@_1,\n\t\t\t\t       F@_2, F@_3, TrUserData).\n\nskip_length_delimited_simple_response(<<1:1, X:7,\n\t\t\t\t\tRest/binary>>,\n\t\t\t\t      N, Acc, F@_1, F@_2, F@_3, TrUserData)\n    when N < 57 ->\n    skip_length_delimited_simple_response(Rest, N + 7,\n\t\t\t\t\t  X bsl N + Acc, F@_1, F@_2, F@_3,\n\t\t\t\t\t  TrUserData);\nskip_length_delimited_simple_response(<<0:1, X:7,\n\t\t\t\t\tRest/binary>>,\n\t\t\t\t      N, Acc, F@_1, F@_2, F@_3, TrUserData) ->\n    Length = X bsl N + Acc,\n    <<_:Length/binary, Rest2/binary>> = Rest,\n    dfp_read_field_def_simple_response(Rest2, 0, 0, F@_1,\n\t\t\t\t       F@_2, F@_3, TrUserData).\n\nskip_group_simple_response(Bin, FNum, Z2, F@_1, F@_2,\n\t\t\t   F@_3, TrUserData) ->\n    {_, Rest} = read_group(Bin, FNum),\n    dfp_read_field_def_simple_response(Rest, 0, Z2, F@_1,\n\t\t\t\t       F@_2, F@_3, TrUserData).\n\nskip_32_simple_response(<<_:32, Rest/binary>>, Z1, Z2,\n\t\t\tF@_1, F@_2, F@_3, TrUserData) ->\n    dfp_read_field_def_simple_response(Rest, Z1, Z2, F@_1,\n\t\t\t\t       F@_2, F@_3, TrUserData).\n\nskip_64_simple_response(<<_:64, Rest/binary>>, Z1, Z2,\n\t\t\tF@_1, F@_2, F@_3, TrUserData) ->\n    dfp_read_field_def_simple_response(Rest, Z1, Z2, F@_1,\n\t\t\t\t       F@_2, F@_3, TrUserData).\n\ndecode_msg_streaming_input_call_request(Bin,\n\t\t\t\t\tTrUserData) ->\n    dfp_read_field_def_streaming_input_call_request(Bin, 0,\n\t\t\t\t\t\t    0, id('$undef', TrUserData),\n\t\t\t\t\t\t    id('$undef', TrUserData),\n\t\t\t\t\t\t    TrUserData).\n\ndfp_read_field_def_streaming_input_call_request(<<10,\n\t\t\t\t\t\t  Rest/binary>>,\n\t\t\t\t\t\tZ1, Z2, F@_1, F@_2,\n\t\t\t\t\t\tTrUserData) ->\n    d_field_streaming_input_call_request_payload(Rest, Z1,\n\t\t\t\t\t\t Z2, F@_1, F@_2, TrUserData);\ndfp_read_field_def_streaming_input_call_request(<<18,\n\t\t\t\t\t\t  Rest/binary>>,\n\t\t\t\t\t\tZ1, Z2, F@_1, F@_2,\n\t\t\t\t\t\tTrUserData) ->\n    d_field_streaming_input_call_request_expect_compressed(Rest,\n\t\t\t\t\t\t\t   Z1, Z2, F@_1, F@_2,\n\t\t\t\t\t\t\t   TrUserData);\ndfp_read_field_def_streaming_input_call_request(<<>>, 0,\n\t\t\t\t\t\t0, F@_1, F@_2, _) ->\n    S1 = #{},\n    S2 = if F@_1 == '$undef' -> S1;\n\t    true -> S1#{payload => F@_1}\n\t end,\n    if F@_2 == '$undef' -> S2;\n       true -> S2#{expect_compressed => F@_2}\n    end;\ndfp_read_field_def_streaming_input_call_request(Other,\n\t\t\t\t\t\tZ1, Z2, F@_1, F@_2,\n\t\t\t\t\t\tTrUserData) ->\n    dg_read_field_def_streaming_input_call_request(Other,\n\t\t\t\t\t\t   Z1, Z2, F@_1, F@_2,\n\t\t\t\t\t\t   TrUserData).\n\ndg_read_field_def_streaming_input_call_request(<<1:1,\n\t\t\t\t\t\t X:7, Rest/binary>>,\n\t\t\t\t\t       N, Acc, F@_1, F@_2, TrUserData)\n    when N < 32 - 7 ->\n    dg_read_field_def_streaming_input_call_request(Rest,\n\t\t\t\t\t\t   N + 7, X bsl N + Acc, F@_1,\n\t\t\t\t\t\t   F@_2, TrUserData);\ndg_read_field_def_streaming_input_call_request(<<0:1,\n\t\t\t\t\t\t X:7, Rest/binary>>,\n\t\t\t\t\t       N, Acc, F@_1, F@_2,\n\t\t\t\t\t       TrUserData) ->\n    Key = X bsl N + Acc,\n    case Key of\n      10 ->\n\t  d_field_streaming_input_call_request_payload(Rest, 0, 0,\n\t\t\t\t\t\t       F@_1, F@_2, TrUserData);\n      18 ->\n\t  d_field_streaming_input_call_request_expect_compressed(Rest,\n\t\t\t\t\t\t\t\t 0, 0, F@_1,\n\t\t\t\t\t\t\t\t F@_2,\n\t\t\t\t\t\t\t\t TrUserData);\n      _ ->\n\t  case Key band 7 of\n\t    0 ->\n\t\tskip_varint_streaming_input_call_request(Rest, 0, 0,\n\t\t\t\t\t\t\t F@_1, F@_2,\n\t\t\t\t\t\t\t TrUserData);\n\t    1 ->\n\t\tskip_64_streaming_input_call_request(Rest, 0, 0, F@_1,\n\t\t\t\t\t\t     F@_2, TrUserData);\n\t    2 ->\n\t\tskip_length_delimited_streaming_input_call_request(Rest,\n\t\t\t\t\t\t\t\t   0, 0, F@_1,\n\t\t\t\t\t\t\t\t   F@_2,\n\t\t\t\t\t\t\t\t   TrUserData);\n\t    3 ->\n\t\tskip_group_streaming_input_call_request(Rest, Key bsr 3,\n\t\t\t\t\t\t\t0, F@_1, F@_2,\n\t\t\t\t\t\t\tTrUserData);\n\t    5 ->\n\t\tskip_32_streaming_input_call_request(Rest, 0, 0, F@_1,\n\t\t\t\t\t\t     F@_2, TrUserData)\n\t  end\n    end;\ndg_read_field_def_streaming_input_call_request(<<>>, 0,\n\t\t\t\t\t       0, F@_1, F@_2, _) ->\n    S1 = #{},\n    S2 = if F@_1 == '$undef' -> S1;\n\t    true -> S1#{payload => F@_1}\n\t end,\n    if F@_2 == '$undef' -> S2;\n       true -> S2#{expect_compressed => F@_2}\n    end.\n\nd_field_streaming_input_call_request_payload(<<1:1, X:7,\n\t\t\t\t\t       Rest/binary>>,\n\t\t\t\t\t     N, Acc, F@_1, F@_2, TrUserData)\n    when N < 57 ->\n    d_field_streaming_input_call_request_payload(Rest,\n\t\t\t\t\t\t N + 7, X bsl N + Acc, F@_1,\n\t\t\t\t\t\t F@_2, TrUserData);\nd_field_streaming_input_call_request_payload(<<0:1, X:7,\n\t\t\t\t\t       Rest/binary>>,\n\t\t\t\t\t     N, Acc, Prev, F@_2, TrUserData) ->\n    {NewFValue, RestF} = begin\n\t\t\t   Len = X bsl N + Acc,\n\t\t\t   <<Bs:Len/binary, Rest2/binary>> = Rest,\n\t\t\t   {id(decode_msg_payload(Bs, TrUserData), TrUserData),\n\t\t\t    Rest2}\n\t\t\t end,\n    dfp_read_field_def_streaming_input_call_request(RestF,\n\t\t\t\t\t\t    0, 0,\n\t\t\t\t\t\t    if Prev == '$undef' ->\n\t\t\t\t\t\t\t   NewFValue;\n\t\t\t\t\t\t       true ->\n\t\t\t\t\t\t\t   merge_msg_payload(Prev,\n\t\t\t\t\t\t\t\t\t     NewFValue,\n\t\t\t\t\t\t\t\t\t     TrUserData)\n\t\t\t\t\t\t    end,\n\t\t\t\t\t\t    F@_2, TrUserData).\n\nd_field_streaming_input_call_request_expect_compressed(<<1:1,\n\t\t\t\t\t\t\t X:7, Rest/binary>>,\n\t\t\t\t\t\t       N, Acc, F@_1, F@_2,\n\t\t\t\t\t\t       TrUserData)\n    when N < 57 ->\n    d_field_streaming_input_call_request_expect_compressed(Rest,\n\t\t\t\t\t\t\t   N + 7, X bsl N + Acc,\n\t\t\t\t\t\t\t   F@_1, F@_2,\n\t\t\t\t\t\t\t   TrUserData);\nd_field_streaming_input_call_request_expect_compressed(<<0:1,\n\t\t\t\t\t\t\t X:7, Rest/binary>>,\n\t\t\t\t\t\t       N, Acc, F@_1, Prev,\n\t\t\t\t\t\t       TrUserData) ->\n    {NewFValue, RestF} = begin\n\t\t\t   Len = X bsl N + Acc,\n\t\t\t   <<Bs:Len/binary, Rest2/binary>> = Rest,\n\t\t\t   {id(decode_msg_bool_value(Bs, TrUserData),\n\t\t\t       TrUserData),\n\t\t\t    Rest2}\n\t\t\t end,\n    dfp_read_field_def_streaming_input_call_request(RestF,\n\t\t\t\t\t\t    0, 0, F@_1,\n\t\t\t\t\t\t    if Prev == '$undef' ->\n\t\t\t\t\t\t\t   NewFValue;\n\t\t\t\t\t\t       true ->\n\t\t\t\t\t\t\t   merge_msg_bool_value(Prev,\n\t\t\t\t\t\t\t\t\t\tNewFValue,\n\t\t\t\t\t\t\t\t\t\tTrUserData)\n\t\t\t\t\t\t    end,\n\t\t\t\t\t\t    TrUserData).\n\nskip_varint_streaming_input_call_request(<<1:1, _:7,\n\t\t\t\t\t   Rest/binary>>,\n\t\t\t\t\t Z1, Z2, F@_1, F@_2, TrUserData) ->\n    skip_varint_streaming_input_call_request(Rest, Z1, Z2,\n\t\t\t\t\t     F@_1, F@_2, TrUserData);\nskip_varint_streaming_input_call_request(<<0:1, _:7,\n\t\t\t\t\t   Rest/binary>>,\n\t\t\t\t\t Z1, Z2, F@_1, F@_2, TrUserData) ->\n    dfp_read_field_def_streaming_input_call_request(Rest,\n\t\t\t\t\t\t    Z1, Z2, F@_1, F@_2,\n\t\t\t\t\t\t    TrUserData).\n\nskip_length_delimited_streaming_input_call_request(<<1:1,\n\t\t\t\t\t\t     X:7, Rest/binary>>,\n\t\t\t\t\t\t   N, Acc, F@_1, F@_2,\n\t\t\t\t\t\t   TrUserData)\n    when N < 57 ->\n    skip_length_delimited_streaming_input_call_request(Rest,\n\t\t\t\t\t\t       N + 7, X bsl N + Acc,\n\t\t\t\t\t\t       F@_1, F@_2, TrUserData);\nskip_length_delimited_streaming_input_call_request(<<0:1,\n\t\t\t\t\t\t     X:7, Rest/binary>>,\n\t\t\t\t\t\t   N, Acc, F@_1, F@_2,\n\t\t\t\t\t\t   TrUserData) ->\n    Length = X bsl N + Acc,\n    <<_:Length/binary, Rest2/binary>> = Rest,\n    dfp_read_field_def_streaming_input_call_request(Rest2,\n\t\t\t\t\t\t    0, 0, F@_1, F@_2,\n\t\t\t\t\t\t    TrUserData).\n\nskip_group_streaming_input_call_request(Bin, FNum, Z2,\n\t\t\t\t\tF@_1, F@_2, TrUserData) ->\n    {_, Rest} = read_group(Bin, FNum),\n    dfp_read_field_def_streaming_input_call_request(Rest, 0,\n\t\t\t\t\t\t    Z2, F@_1, F@_2, TrUserData).\n\nskip_32_streaming_input_call_request(<<_:32,\n\t\t\t\t       Rest/binary>>,\n\t\t\t\t     Z1, Z2, F@_1, F@_2, TrUserData) ->\n    dfp_read_field_def_streaming_input_call_request(Rest,\n\t\t\t\t\t\t    Z1, Z2, F@_1, F@_2,\n\t\t\t\t\t\t    TrUserData).\n\nskip_64_streaming_input_call_request(<<_:64,\n\t\t\t\t       Rest/binary>>,\n\t\t\t\t     Z1, Z2, F@_1, F@_2, TrUserData) ->\n    dfp_read_field_def_streaming_input_call_request(Rest,\n\t\t\t\t\t\t    Z1, Z2, F@_1, F@_2,\n\t\t\t\t\t\t    TrUserData).\n\ndecode_msg_streaming_input_call_response(Bin,\n\t\t\t\t\t TrUserData) ->\n    dfp_read_field_def_streaming_input_call_response(Bin, 0,\n\t\t\t\t\t\t     0, id(0, TrUserData),\n\t\t\t\t\t\t     TrUserData).\n\ndfp_read_field_def_streaming_input_call_response(<<8,\n\t\t\t\t\t\t   Rest/binary>>,\n\t\t\t\t\t\t Z1, Z2, F@_1, TrUserData) ->\n    d_field_streaming_input_call_response_aggregated_payload_size(Rest,\n\t\t\t\t\t\t\t\t  Z1, Z2, F@_1,\n\t\t\t\t\t\t\t\t  TrUserData);\ndfp_read_field_def_streaming_input_call_response(<<>>,\n\t\t\t\t\t\t 0, 0, F@_1, _) ->\n    #{aggregated_payload_size => F@_1};\ndfp_read_field_def_streaming_input_call_response(Other,\n\t\t\t\t\t\t Z1, Z2, F@_1, TrUserData) ->\n    dg_read_field_def_streaming_input_call_response(Other,\n\t\t\t\t\t\t    Z1, Z2, F@_1, TrUserData).\n\ndg_read_field_def_streaming_input_call_response(<<1:1,\n\t\t\t\t\t\t  X:7, Rest/binary>>,\n\t\t\t\t\t\tN, Acc, F@_1, TrUserData)\n    when N < 32 - 7 ->\n    dg_read_field_def_streaming_input_call_response(Rest,\n\t\t\t\t\t\t    N + 7, X bsl N + Acc, F@_1,\n\t\t\t\t\t\t    TrUserData);\ndg_read_field_def_streaming_input_call_response(<<0:1,\n\t\t\t\t\t\t  X:7, Rest/binary>>,\n\t\t\t\t\t\tN, Acc, F@_1, TrUserData) ->\n    Key = X bsl N + Acc,\n    case Key of\n      8 ->\n\t  d_field_streaming_input_call_response_aggregated_payload_size(Rest,\n\t\t\t\t\t\t\t\t\t0, 0,\n\t\t\t\t\t\t\t\t\tF@_1,\n\t\t\t\t\t\t\t\t\tTrUserData);\n      _ ->\n\t  case Key band 7 of\n\t    0 ->\n\t\tskip_varint_streaming_input_call_response(Rest, 0, 0,\n\t\t\t\t\t\t\t  F@_1, TrUserData);\n\t    1 ->\n\t\tskip_64_streaming_input_call_response(Rest, 0, 0, F@_1,\n\t\t\t\t\t\t      TrUserData);\n\t    2 ->\n\t\tskip_length_delimited_streaming_input_call_response(Rest,\n\t\t\t\t\t\t\t\t    0, 0, F@_1,\n\t\t\t\t\t\t\t\t    TrUserData);\n\t    3 ->\n\t\tskip_group_streaming_input_call_response(Rest,\n\t\t\t\t\t\t\t Key bsr 3, 0, F@_1,\n\t\t\t\t\t\t\t TrUserData);\n\t    5 ->\n\t\tskip_32_streaming_input_call_response(Rest, 0, 0, F@_1,\n\t\t\t\t\t\t      TrUserData)\n\t  end\n    end;\ndg_read_field_def_streaming_input_call_response(<<>>, 0,\n\t\t\t\t\t\t0, F@_1, _) ->\n    #{aggregated_payload_size => F@_1}.\n\nd_field_streaming_input_call_response_aggregated_payload_size(<<1:1,\n\t\t\t\t\t\t\t\tX:7,\n\t\t\t\t\t\t\t\tRest/binary>>,\n\t\t\t\t\t\t\t      N, Acc, F@_1,\n\t\t\t\t\t\t\t      TrUserData)\n    when N < 57 ->\n    d_field_streaming_input_call_response_aggregated_payload_size(Rest,\n\t\t\t\t\t\t\t\t  N + 7,\n\t\t\t\t\t\t\t\t  X bsl N + Acc,\n\t\t\t\t\t\t\t\t  F@_1,\n\t\t\t\t\t\t\t\t  TrUserData);\nd_field_streaming_input_call_response_aggregated_payload_size(<<0:1,\n\t\t\t\t\t\t\t\tX:7,\n\t\t\t\t\t\t\t\tRest/binary>>,\n\t\t\t\t\t\t\t      N, Acc, _,\n\t\t\t\t\t\t\t      TrUserData) ->\n    {NewFValue, RestF} = {begin\n\t\t\t    <<Res:32/signed-native>> = <<(X bsl N +\n\t\t\t\t\t\t\t    Acc):32/unsigned-native>>,\n\t\t\t    id(Res, TrUserData)\n\t\t\t  end,\n\t\t\t  Rest},\n    dfp_read_field_def_streaming_input_call_response(RestF,\n\t\t\t\t\t\t     0, 0, NewFValue,\n\t\t\t\t\t\t     TrUserData).\n\nskip_varint_streaming_input_call_response(<<1:1, _:7,\n\t\t\t\t\t    Rest/binary>>,\n\t\t\t\t\t  Z1, Z2, F@_1, TrUserData) ->\n    skip_varint_streaming_input_call_response(Rest, Z1, Z2,\n\t\t\t\t\t      F@_1, TrUserData);\nskip_varint_streaming_input_call_response(<<0:1, _:7,\n\t\t\t\t\t    Rest/binary>>,\n\t\t\t\t\t  Z1, Z2, F@_1, TrUserData) ->\n    dfp_read_field_def_streaming_input_call_response(Rest,\n\t\t\t\t\t\t     Z1, Z2, F@_1, TrUserData).\n\nskip_length_delimited_streaming_input_call_response(<<1:1,\n\t\t\t\t\t\t      X:7, Rest/binary>>,\n\t\t\t\t\t\t    N, Acc, F@_1, TrUserData)\n    when N < 57 ->\n    skip_length_delimited_streaming_input_call_response(Rest,\n\t\t\t\t\t\t\tN + 7, X bsl N + Acc,\n\t\t\t\t\t\t\tF@_1, TrUserData);\nskip_length_delimited_streaming_input_call_response(<<0:1,\n\t\t\t\t\t\t      X:7, Rest/binary>>,\n\t\t\t\t\t\t    N, Acc, F@_1, TrUserData) ->\n    Length = X bsl N + Acc,\n    <<_:Length/binary, Rest2/binary>> = Rest,\n    dfp_read_field_def_streaming_input_call_response(Rest2,\n\t\t\t\t\t\t     0, 0, F@_1, TrUserData).\n\nskip_group_streaming_input_call_response(Bin, FNum, Z2,\n\t\t\t\t\t F@_1, TrUserData) ->\n    {_, Rest} = read_group(Bin, FNum),\n    dfp_read_field_def_streaming_input_call_response(Rest,\n\t\t\t\t\t\t     0, Z2, F@_1, TrUserData).\n\nskip_32_streaming_input_call_response(<<_:32,\n\t\t\t\t\tRest/binary>>,\n\t\t\t\t      Z1, Z2, F@_1, TrUserData) ->\n    dfp_read_field_def_streaming_input_call_response(Rest,\n\t\t\t\t\t\t     Z1, Z2, F@_1, TrUserData).\n\nskip_64_streaming_input_call_response(<<_:64,\n\t\t\t\t\tRest/binary>>,\n\t\t\t\t      Z1, Z2, F@_1, TrUserData) ->\n    dfp_read_field_def_streaming_input_call_response(Rest,\n\t\t\t\t\t\t     Z1, Z2, F@_1, TrUserData).\n\ndecode_msg_response_parameters(Bin, TrUserData) ->\n    dfp_read_field_def_response_parameters(Bin, 0, 0,\n\t\t\t\t\t   id(0, TrUserData), id(0, TrUserData),\n\t\t\t\t\t   id('$undef', TrUserData),\n\t\t\t\t\t   TrUserData).\n\ndfp_read_field_def_response_parameters(<<8,\n\t\t\t\t\t Rest/binary>>,\n\t\t\t\t       Z1, Z2, F@_1, F@_2, F@_3, TrUserData) ->\n    d_field_response_parameters_size(Rest, Z1, Z2, F@_1,\n\t\t\t\t     F@_2, F@_3, TrUserData);\ndfp_read_field_def_response_parameters(<<16,\n\t\t\t\t\t Rest/binary>>,\n\t\t\t\t       Z1, Z2, F@_1, F@_2, F@_3, TrUserData) ->\n    d_field_response_parameters_interval_us(Rest, Z1, Z2,\n\t\t\t\t\t    F@_1, F@_2, F@_3, TrUserData);\ndfp_read_field_def_response_parameters(<<26,\n\t\t\t\t\t Rest/binary>>,\n\t\t\t\t       Z1, Z2, F@_1, F@_2, F@_3, TrUserData) ->\n    d_field_response_parameters_compressed(Rest, Z1, Z2,\n\t\t\t\t\t   F@_1, F@_2, F@_3, TrUserData);\ndfp_read_field_def_response_parameters(<<>>, 0, 0, F@_1,\n\t\t\t\t       F@_2, F@_3, _) ->\n    S1 = #{size => F@_1, interval_us => F@_2},\n    if F@_3 == '$undef' -> S1;\n       true -> S1#{compressed => F@_3}\n    end;\ndfp_read_field_def_response_parameters(Other, Z1, Z2,\n\t\t\t\t       F@_1, F@_2, F@_3, TrUserData) ->\n    dg_read_field_def_response_parameters(Other, Z1, Z2,\n\t\t\t\t\t  F@_1, F@_2, F@_3, TrUserData).\n\ndg_read_field_def_response_parameters(<<1:1, X:7,\n\t\t\t\t\tRest/binary>>,\n\t\t\t\t      N, Acc, F@_1, F@_2, F@_3, TrUserData)\n    when N < 32 - 7 ->\n    dg_read_field_def_response_parameters(Rest, N + 7,\n\t\t\t\t\t  X bsl N + Acc, F@_1, F@_2, F@_3,\n\t\t\t\t\t  TrUserData);\ndg_read_field_def_response_parameters(<<0:1, X:7,\n\t\t\t\t\tRest/binary>>,\n\t\t\t\t      N, Acc, F@_1, F@_2, F@_3, TrUserData) ->\n    Key = X bsl N + Acc,\n    case Key of\n      8 ->\n\t  d_field_response_parameters_size(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t\t   F@_3, TrUserData);\n      16 ->\n\t  d_field_response_parameters_interval_us(Rest, 0, 0,\n\t\t\t\t\t\t  F@_1, F@_2, F@_3, TrUserData);\n      26 ->\n\t  d_field_response_parameters_compressed(Rest, 0, 0, F@_1,\n\t\t\t\t\t\t F@_2, F@_3, TrUserData);\n      _ ->\n\t  case Key band 7 of\n\t    0 ->\n\t\tskip_varint_response_parameters(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t\t\tF@_3, TrUserData);\n\t    1 ->\n\t\tskip_64_response_parameters(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t\t    F@_3, TrUserData);\n\t    2 ->\n\t\tskip_length_delimited_response_parameters(Rest, 0, 0,\n\t\t\t\t\t\t\t  F@_1, F@_2, F@_3,\n\t\t\t\t\t\t\t  TrUserData);\n\t    3 ->\n\t\tskip_group_response_parameters(Rest, Key bsr 3, 0, F@_1,\n\t\t\t\t\t       F@_2, F@_3, TrUserData);\n\t    5 ->\n\t\tskip_32_response_parameters(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t\t    F@_3, TrUserData)\n\t  end\n    end;\ndg_read_field_def_response_parameters(<<>>, 0, 0, F@_1,\n\t\t\t\t      F@_2, F@_3, _) ->\n    S1 = #{size => F@_1, interval_us => F@_2},\n    if F@_3 == '$undef' -> S1;\n       true -> S1#{compressed => F@_3}\n    end.\n\nd_field_response_parameters_size(<<1:1, X:7,\n\t\t\t\t   Rest/binary>>,\n\t\t\t\t N, Acc, F@_1, F@_2, F@_3, TrUserData)\n    when N < 57 ->\n    d_field_response_parameters_size(Rest, N + 7,\n\t\t\t\t     X bsl N + Acc, F@_1, F@_2, F@_3,\n\t\t\t\t     TrUserData);\nd_field_response_parameters_size(<<0:1, X:7,\n\t\t\t\t   Rest/binary>>,\n\t\t\t\t N, Acc, _, F@_2, F@_3, TrUserData) ->\n    {NewFValue, RestF} = {begin\n\t\t\t    <<Res:32/signed-native>> = <<(X bsl N +\n\t\t\t\t\t\t\t    Acc):32/unsigned-native>>,\n\t\t\t    id(Res, TrUserData)\n\t\t\t  end,\n\t\t\t  Rest},\n    dfp_read_field_def_response_parameters(RestF, 0, 0,\n\t\t\t\t\t   NewFValue, F@_2, F@_3, TrUserData).\n\nd_field_response_parameters_interval_us(<<1:1, X:7,\n\t\t\t\t\t  Rest/binary>>,\n\t\t\t\t\tN, Acc, F@_1, F@_2, F@_3, TrUserData)\n    when N < 57 ->\n    d_field_response_parameters_interval_us(Rest, N + 7,\n\t\t\t\t\t    X bsl N + Acc, F@_1, F@_2, F@_3,\n\t\t\t\t\t    TrUserData);\nd_field_response_parameters_interval_us(<<0:1, X:7,\n\t\t\t\t\t  Rest/binary>>,\n\t\t\t\t\tN, Acc, F@_1, _, F@_3, TrUserData) ->\n    {NewFValue, RestF} = {begin\n\t\t\t    <<Res:32/signed-native>> = <<(X bsl N +\n\t\t\t\t\t\t\t    Acc):32/unsigned-native>>,\n\t\t\t    id(Res, TrUserData)\n\t\t\t  end,\n\t\t\t  Rest},\n    dfp_read_field_def_response_parameters(RestF, 0, 0,\n\t\t\t\t\t   F@_1, NewFValue, F@_3, TrUserData).\n\nd_field_response_parameters_compressed(<<1:1, X:7,\n\t\t\t\t\t Rest/binary>>,\n\t\t\t\t       N, Acc, F@_1, F@_2, F@_3, TrUserData)\n    when N < 57 ->\n    d_field_response_parameters_compressed(Rest, N + 7,\n\t\t\t\t\t   X bsl N + Acc, F@_1, F@_2, F@_3,\n\t\t\t\t\t   TrUserData);\nd_field_response_parameters_compressed(<<0:1, X:7,\n\t\t\t\t\t Rest/binary>>,\n\t\t\t\t       N, Acc, F@_1, F@_2, Prev, TrUserData) ->\n    {NewFValue, RestF} = begin\n\t\t\t   Len = X bsl N + Acc,\n\t\t\t   <<Bs:Len/binary, Rest2/binary>> = Rest,\n\t\t\t   {id(decode_msg_bool_value(Bs, TrUserData),\n\t\t\t       TrUserData),\n\t\t\t    Rest2}\n\t\t\t end,\n    dfp_read_field_def_response_parameters(RestF, 0, 0,\n\t\t\t\t\t   F@_1, F@_2,\n\t\t\t\t\t   if Prev == '$undef' -> NewFValue;\n\t\t\t\t\t      true ->\n\t\t\t\t\t\t  merge_msg_bool_value(Prev,\n\t\t\t\t\t\t\t\t       NewFValue,\n\t\t\t\t\t\t\t\t       TrUserData)\n\t\t\t\t\t   end,\n\t\t\t\t\t   TrUserData).\n\nskip_varint_response_parameters(<<1:1, _:7,\n\t\t\t\t  Rest/binary>>,\n\t\t\t\tZ1, Z2, F@_1, F@_2, F@_3, TrUserData) ->\n    skip_varint_response_parameters(Rest, Z1, Z2, F@_1,\n\t\t\t\t    F@_2, F@_3, TrUserData);\nskip_varint_response_parameters(<<0:1, _:7,\n\t\t\t\t  Rest/binary>>,\n\t\t\t\tZ1, Z2, F@_1, F@_2, F@_3, TrUserData) ->\n    dfp_read_field_def_response_parameters(Rest, Z1, Z2,\n\t\t\t\t\t   F@_1, F@_2, F@_3, TrUserData).\n\nskip_length_delimited_response_parameters(<<1:1, X:7,\n\t\t\t\t\t    Rest/binary>>,\n\t\t\t\t\t  N, Acc, F@_1, F@_2, F@_3, TrUserData)\n    when N < 57 ->\n    skip_length_delimited_response_parameters(Rest, N + 7,\n\t\t\t\t\t      X bsl N + Acc, F@_1, F@_2, F@_3,\n\t\t\t\t\t      TrUserData);\nskip_length_delimited_response_parameters(<<0:1, X:7,\n\t\t\t\t\t    Rest/binary>>,\n\t\t\t\t\t  N, Acc, F@_1, F@_2, F@_3,\n\t\t\t\t\t  TrUserData) ->\n    Length = X bsl N + Acc,\n    <<_:Length/binary, Rest2/binary>> = Rest,\n    dfp_read_field_def_response_parameters(Rest2, 0, 0,\n\t\t\t\t\t   F@_1, F@_2, F@_3, TrUserData).\n\nskip_group_response_parameters(Bin, FNum, Z2, F@_1,\n\t\t\t       F@_2, F@_3, TrUserData) ->\n    {_, Rest} = read_group(Bin, FNum),\n    dfp_read_field_def_response_parameters(Rest, 0, Z2,\n\t\t\t\t\t   F@_1, F@_2, F@_3, TrUserData).\n\nskip_32_response_parameters(<<_:32, Rest/binary>>, Z1,\n\t\t\t    Z2, F@_1, F@_2, F@_3, TrUserData) ->\n    dfp_read_field_def_response_parameters(Rest, Z1, Z2,\n\t\t\t\t\t   F@_1, F@_2, F@_3, TrUserData).\n\nskip_64_response_parameters(<<_:64, Rest/binary>>, Z1,\n\t\t\t    Z2, F@_1, F@_2, F@_3, TrUserData) ->\n    dfp_read_field_def_response_parameters(Rest, Z1, Z2,\n\t\t\t\t\t   F@_1, F@_2, F@_3, TrUserData).\n\ndecode_msg_streaming_output_call_request(Bin,\n\t\t\t\t\t TrUserData) ->\n    dfp_read_field_def_streaming_output_call_request(Bin, 0,\n\t\t\t\t\t\t     0,\n\t\t\t\t\t\t     id('COMPRESSABLE',\n\t\t\t\t\t\t\tTrUserData),\n\t\t\t\t\t\t     id([], TrUserData),\n\t\t\t\t\t\t     id('$undef', TrUserData),\n\t\t\t\t\t\t     id('$undef', TrUserData),\n\t\t\t\t\t\t     TrUserData).\n\ndfp_read_field_def_streaming_output_call_request(<<8,\n\t\t\t\t\t\t   Rest/binary>>,\n\t\t\t\t\t\t Z1, Z2, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\t\t TrUserData) ->\n    d_field_streaming_output_call_request_response_type(Rest,\n\t\t\t\t\t\t\tZ1, Z2, F@_1, F@_2,\n\t\t\t\t\t\t\tF@_3, F@_4, TrUserData);\ndfp_read_field_def_streaming_output_call_request(<<18,\n\t\t\t\t\t\t   Rest/binary>>,\n\t\t\t\t\t\t Z1, Z2, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\t\t TrUserData) ->\n    d_field_streaming_output_call_request_response_parameters(Rest,\n\t\t\t\t\t\t\t      Z1, Z2, F@_1,\n\t\t\t\t\t\t\t      F@_2, F@_3, F@_4,\n\t\t\t\t\t\t\t      TrUserData);\ndfp_read_field_def_streaming_output_call_request(<<26,\n\t\t\t\t\t\t   Rest/binary>>,\n\t\t\t\t\t\t Z1, Z2, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\t\t TrUserData) ->\n    d_field_streaming_output_call_request_payload(Rest, Z1,\n\t\t\t\t\t\t  Z2, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\t\t  TrUserData);\ndfp_read_field_def_streaming_output_call_request(<<58,\n\t\t\t\t\t\t   Rest/binary>>,\n\t\t\t\t\t\t Z1, Z2, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\t\t TrUserData) ->\n    d_field_streaming_output_call_request_response_status(Rest,\n\t\t\t\t\t\t\t  Z1, Z2, F@_1, F@_2,\n\t\t\t\t\t\t\t  F@_3, F@_4,\n\t\t\t\t\t\t\t  TrUserData);\ndfp_read_field_def_streaming_output_call_request(<<>>,\n\t\t\t\t\t\t 0, 0, F@_1, R1, F@_3, F@_4,\n\t\t\t\t\t\t TrUserData) ->\n    S1 = #{response_type => F@_1},\n    S2 = if R1 == '$undef' -> S1;\n\t    true ->\n\t\tS1#{response_parameters =>\n\t\t\tlists_reverse(R1, TrUserData)}\n\t end,\n    S3 = if F@_3 == '$undef' -> S2;\n\t    true -> S2#{payload => F@_3}\n\t end,\n    if F@_4 == '$undef' -> S3;\n       true -> S3#{response_status => F@_4}\n    end;\ndfp_read_field_def_streaming_output_call_request(Other,\n\t\t\t\t\t\t Z1, Z2, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\t\t TrUserData) ->\n    dg_read_field_def_streaming_output_call_request(Other,\n\t\t\t\t\t\t    Z1, Z2, F@_1, F@_2, F@_3,\n\t\t\t\t\t\t    F@_4, TrUserData).\n\ndg_read_field_def_streaming_output_call_request(<<1:1,\n\t\t\t\t\t\t  X:7, Rest/binary>>,\n\t\t\t\t\t\tN, Acc, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\t\tTrUserData)\n    when N < 32 - 7 ->\n    dg_read_field_def_streaming_output_call_request(Rest,\n\t\t\t\t\t\t    N + 7, X bsl N + Acc, F@_1,\n\t\t\t\t\t\t    F@_2, F@_3, F@_4,\n\t\t\t\t\t\t    TrUserData);\ndg_read_field_def_streaming_output_call_request(<<0:1,\n\t\t\t\t\t\t  X:7, Rest/binary>>,\n\t\t\t\t\t\tN, Acc, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\t\tTrUserData) ->\n    Key = X bsl N + Acc,\n    case Key of\n      8 ->\n\t  d_field_streaming_output_call_request_response_type(Rest,\n\t\t\t\t\t\t\t      0, 0, F@_1, F@_2,\n\t\t\t\t\t\t\t      F@_3, F@_4,\n\t\t\t\t\t\t\t      TrUserData);\n      18 ->\n\t  d_field_streaming_output_call_request_response_parameters(Rest,\n\t\t\t\t\t\t\t\t    0, 0, F@_1,\n\t\t\t\t\t\t\t\t    F@_2, F@_3,\n\t\t\t\t\t\t\t\t    F@_4,\n\t\t\t\t\t\t\t\t    TrUserData);\n      26 ->\n\t  d_field_streaming_output_call_request_payload(Rest, 0,\n\t\t\t\t\t\t\t0, F@_1, F@_2, F@_3,\n\t\t\t\t\t\t\tF@_4, TrUserData);\n      58 ->\n\t  d_field_streaming_output_call_request_response_status(Rest,\n\t\t\t\t\t\t\t\t0, 0, F@_1,\n\t\t\t\t\t\t\t\tF@_2, F@_3,\n\t\t\t\t\t\t\t\tF@_4,\n\t\t\t\t\t\t\t\tTrUserData);\n      _ ->\n\t  case Key band 7 of\n\t    0 ->\n\t\tskip_varint_streaming_output_call_request(Rest, 0, 0,\n\t\t\t\t\t\t\t  F@_1, F@_2, F@_3,\n\t\t\t\t\t\t\t  F@_4, TrUserData);\n\t    1 ->\n\t\tskip_64_streaming_output_call_request(Rest, 0, 0, F@_1,\n\t\t\t\t\t\t      F@_2, F@_3, F@_4,\n\t\t\t\t\t\t      TrUserData);\n\t    2 ->\n\t\tskip_length_delimited_streaming_output_call_request(Rest,\n\t\t\t\t\t\t\t\t    0, 0, F@_1,\n\t\t\t\t\t\t\t\t    F@_2, F@_3,\n\t\t\t\t\t\t\t\t    F@_4,\n\t\t\t\t\t\t\t\t    TrUserData);\n\t    3 ->\n\t\tskip_group_streaming_output_call_request(Rest,\n\t\t\t\t\t\t\t Key bsr 3, 0, F@_1,\n\t\t\t\t\t\t\t F@_2, F@_3, F@_4,\n\t\t\t\t\t\t\t TrUserData);\n\t    5 ->\n\t\tskip_32_streaming_output_call_request(Rest, 0, 0, F@_1,\n\t\t\t\t\t\t      F@_2, F@_3, F@_4,\n\t\t\t\t\t\t      TrUserData)\n\t  end\n    end;\ndg_read_field_def_streaming_output_call_request(<<>>, 0,\n\t\t\t\t\t\t0, F@_1, R1, F@_3, F@_4,\n\t\t\t\t\t\tTrUserData) ->\n    S1 = #{response_type => F@_1},\n    S2 = if R1 == '$undef' -> S1;\n\t    true ->\n\t\tS1#{response_parameters =>\n\t\t\tlists_reverse(R1, TrUserData)}\n\t end,\n    S3 = if F@_3 == '$undef' -> S2;\n\t    true -> S2#{payload => F@_3}\n\t end,\n    if F@_4 == '$undef' -> S3;\n       true -> S3#{response_status => F@_4}\n    end.\n\nd_field_streaming_output_call_request_response_type(<<1:1,\n\t\t\t\t\t\t      X:7, Rest/binary>>,\n\t\t\t\t\t\t    N, Acc, F@_1, F@_2, F@_3,\n\t\t\t\t\t\t    F@_4, TrUserData)\n    when N < 57 ->\n    d_field_streaming_output_call_request_response_type(Rest,\n\t\t\t\t\t\t\tN + 7, X bsl N + Acc,\n\t\t\t\t\t\t\tF@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\t\t\tTrUserData);\nd_field_streaming_output_call_request_response_type(<<0:1,\n\t\t\t\t\t\t      X:7, Rest/binary>>,\n\t\t\t\t\t\t    N, Acc, _, F@_2, F@_3, F@_4,\n\t\t\t\t\t\t    TrUserData) ->\n    {NewFValue, RestF} =\n\t{id('d_enum_grpc.testing.PayloadType'(begin\n\t\t\t\t\t\t<<Res:32/signed-native>> = <<(X\n\t\t\t\t\t\t\t\t\t\tbsl\n\t\t\t\t\t\t\t\t\t\tN\n\t\t\t\t\t\t\t\t\t\t+\n\t\t\t\t\t\t\t\t\t\tAcc):32/unsigned-native>>,\n\t\t\t\t\t\tid(Res, TrUserData)\n\t\t\t\t\t      end),\n\t    TrUserData),\n\t Rest},\n    dfp_read_field_def_streaming_output_call_request(RestF,\n\t\t\t\t\t\t     0, 0, NewFValue, F@_2,\n\t\t\t\t\t\t     F@_3, F@_4, TrUserData).\n\nd_field_streaming_output_call_request_response_parameters(<<1:1,\n\t\t\t\t\t\t\t    X:7, Rest/binary>>,\n\t\t\t\t\t\t\t  N, Acc, F@_1, F@_2,\n\t\t\t\t\t\t\t  F@_3, F@_4,\n\t\t\t\t\t\t\t  TrUserData)\n    when N < 57 ->\n    d_field_streaming_output_call_request_response_parameters(Rest,\n\t\t\t\t\t\t\t      N + 7,\n\t\t\t\t\t\t\t      X bsl N + Acc,\n\t\t\t\t\t\t\t      F@_1, F@_2, F@_3,\n\t\t\t\t\t\t\t      F@_4, TrUserData);\nd_field_streaming_output_call_request_response_parameters(<<0:1,\n\t\t\t\t\t\t\t    X:7, Rest/binary>>,\n\t\t\t\t\t\t\t  N, Acc, F@_1, Prev,\n\t\t\t\t\t\t\t  F@_3, F@_4,\n\t\t\t\t\t\t\t  TrUserData) ->\n    {NewFValue, RestF} = begin\n\t\t\t   Len = X bsl N + Acc,\n\t\t\t   <<Bs:Len/binary, Rest2/binary>> = Rest,\n\t\t\t   {id(decode_msg_response_parameters(Bs, TrUserData),\n\t\t\t       TrUserData),\n\t\t\t    Rest2}\n\t\t\t end,\n    dfp_read_field_def_streaming_output_call_request(RestF,\n\t\t\t\t\t\t     0, 0, F@_1,\n\t\t\t\t\t\t     cons(NewFValue, Prev,\n\t\t\t\t\t\t\t  TrUserData),\n\t\t\t\t\t\t     F@_3, F@_4, TrUserData).\n\nd_field_streaming_output_call_request_payload(<<1:1,\n\t\t\t\t\t\tX:7, Rest/binary>>,\n\t\t\t\t\t      N, Acc, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\t      TrUserData)\n    when N < 57 ->\n    d_field_streaming_output_call_request_payload(Rest,\n\t\t\t\t\t\t  N + 7, X bsl N + Acc, F@_1,\n\t\t\t\t\t\t  F@_2, F@_3, F@_4, TrUserData);\nd_field_streaming_output_call_request_payload(<<0:1,\n\t\t\t\t\t\tX:7, Rest/binary>>,\n\t\t\t\t\t      N, Acc, F@_1, F@_2, Prev, F@_4,\n\t\t\t\t\t      TrUserData) ->\n    {NewFValue, RestF} = begin\n\t\t\t   Len = X bsl N + Acc,\n\t\t\t   <<Bs:Len/binary, Rest2/binary>> = Rest,\n\t\t\t   {id(decode_msg_payload(Bs, TrUserData), TrUserData),\n\t\t\t    Rest2}\n\t\t\t end,\n    dfp_read_field_def_streaming_output_call_request(RestF,\n\t\t\t\t\t\t     0, 0, F@_1, F@_2,\n\t\t\t\t\t\t     if Prev == '$undef' ->\n\t\t\t\t\t\t\t    NewFValue;\n\t\t\t\t\t\t\ttrue ->\n\t\t\t\t\t\t\t    merge_msg_payload(Prev,\n\t\t\t\t\t\t\t\t\t      NewFValue,\n\t\t\t\t\t\t\t\t\t      TrUserData)\n\t\t\t\t\t\t     end,\n\t\t\t\t\t\t     F@_4, TrUserData).\n\nd_field_streaming_output_call_request_response_status(<<1:1,\n\t\t\t\t\t\t\tX:7, Rest/binary>>,\n\t\t\t\t\t\t      N, Acc, F@_1, F@_2, F@_3,\n\t\t\t\t\t\t      F@_4, TrUserData)\n    when N < 57 ->\n    d_field_streaming_output_call_request_response_status(Rest,\n\t\t\t\t\t\t\t  N + 7, X bsl N + Acc,\n\t\t\t\t\t\t\t  F@_1, F@_2, F@_3,\n\t\t\t\t\t\t\t  F@_4, TrUserData);\nd_field_streaming_output_call_request_response_status(<<0:1,\n\t\t\t\t\t\t\tX:7, Rest/binary>>,\n\t\t\t\t\t\t      N, Acc, F@_1, F@_2, F@_3,\n\t\t\t\t\t\t      Prev, TrUserData) ->\n    {NewFValue, RestF} = begin\n\t\t\t   Len = X bsl N + Acc,\n\t\t\t   <<Bs:Len/binary, Rest2/binary>> = Rest,\n\t\t\t   {id(decode_msg_echo_status(Bs, TrUserData),\n\t\t\t       TrUserData),\n\t\t\t    Rest2}\n\t\t\t end,\n    dfp_read_field_def_streaming_output_call_request(RestF,\n\t\t\t\t\t\t     0, 0, F@_1, F@_2, F@_3,\n\t\t\t\t\t\t     if Prev == '$undef' ->\n\t\t\t\t\t\t\t    NewFValue;\n\t\t\t\t\t\t\ttrue ->\n\t\t\t\t\t\t\t    merge_msg_echo_status(Prev,\n\t\t\t\t\t\t\t\t\t\t  NewFValue,\n\t\t\t\t\t\t\t\t\t\t  TrUserData)\n\t\t\t\t\t\t     end,\n\t\t\t\t\t\t     TrUserData).\n\nskip_varint_streaming_output_call_request(<<1:1, _:7,\n\t\t\t\t\t    Rest/binary>>,\n\t\t\t\t\t  Z1, Z2, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\t  TrUserData) ->\n    skip_varint_streaming_output_call_request(Rest, Z1, Z2,\n\t\t\t\t\t      F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\t      TrUserData);\nskip_varint_streaming_output_call_request(<<0:1, _:7,\n\t\t\t\t\t    Rest/binary>>,\n\t\t\t\t\t  Z1, Z2, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\t  TrUserData) ->\n    dfp_read_field_def_streaming_output_call_request(Rest,\n\t\t\t\t\t\t     Z1, Z2, F@_1, F@_2, F@_3,\n\t\t\t\t\t\t     F@_4, TrUserData).\n\nskip_length_delimited_streaming_output_call_request(<<1:1,\n\t\t\t\t\t\t      X:7, Rest/binary>>,\n\t\t\t\t\t\t    N, Acc, F@_1, F@_2, F@_3,\n\t\t\t\t\t\t    F@_4, TrUserData)\n    when N < 57 ->\n    skip_length_delimited_streaming_output_call_request(Rest,\n\t\t\t\t\t\t\tN + 7, X bsl N + Acc,\n\t\t\t\t\t\t\tF@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\t\t\tTrUserData);\nskip_length_delimited_streaming_output_call_request(<<0:1,\n\t\t\t\t\t\t      X:7, Rest/binary>>,\n\t\t\t\t\t\t    N, Acc, F@_1, F@_2, F@_3,\n\t\t\t\t\t\t    F@_4, TrUserData) ->\n    Length = X bsl N + Acc,\n    <<_:Length/binary, Rest2/binary>> = Rest,\n    dfp_read_field_def_streaming_output_call_request(Rest2,\n\t\t\t\t\t\t     0, 0, F@_1, F@_2, F@_3,\n\t\t\t\t\t\t     F@_4, TrUserData).\n\nskip_group_streaming_output_call_request(Bin, FNum, Z2,\n\t\t\t\t\t F@_1, F@_2, F@_3, F@_4, TrUserData) ->\n    {_, Rest} = read_group(Bin, FNum),\n    dfp_read_field_def_streaming_output_call_request(Rest,\n\t\t\t\t\t\t     0, Z2, F@_1, F@_2, F@_3,\n\t\t\t\t\t\t     F@_4, TrUserData).\n\nskip_32_streaming_output_call_request(<<_:32,\n\t\t\t\t\tRest/binary>>,\n\t\t\t\t      Z1, Z2, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t      TrUserData) ->\n    dfp_read_field_def_streaming_output_call_request(Rest,\n\t\t\t\t\t\t     Z1, Z2, F@_1, F@_2, F@_3,\n\t\t\t\t\t\t     F@_4, TrUserData).\n\nskip_64_streaming_output_call_request(<<_:64,\n\t\t\t\t\tRest/binary>>,\n\t\t\t\t      Z1, Z2, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t      TrUserData) ->\n    dfp_read_field_def_streaming_output_call_request(Rest,\n\t\t\t\t\t\t     Z1, Z2, F@_1, F@_2, F@_3,\n\t\t\t\t\t\t     F@_4, TrUserData).\n\ndecode_msg_streaming_output_call_response(Bin,\n\t\t\t\t\t  TrUserData) ->\n    dfp_read_field_def_streaming_output_call_response(Bin,\n\t\t\t\t\t\t      0, 0,\n\t\t\t\t\t\t      id('$undef', TrUserData),\n\t\t\t\t\t\t      TrUserData).\n\ndfp_read_field_def_streaming_output_call_response(<<10,\n\t\t\t\t\t\t    Rest/binary>>,\n\t\t\t\t\t\t  Z1, Z2, F@_1, TrUserData) ->\n    d_field_streaming_output_call_response_payload(Rest, Z1,\n\t\t\t\t\t\t   Z2, F@_1, TrUserData);\ndfp_read_field_def_streaming_output_call_response(<<>>,\n\t\t\t\t\t\t  0, 0, F@_1, _) ->\n    S1 = #{},\n    if F@_1 == '$undef' -> S1;\n       true -> S1#{payload => F@_1}\n    end;\ndfp_read_field_def_streaming_output_call_response(Other,\n\t\t\t\t\t\t  Z1, Z2, F@_1, TrUserData) ->\n    dg_read_field_def_streaming_output_call_response(Other,\n\t\t\t\t\t\t     Z1, Z2, F@_1, TrUserData).\n\ndg_read_field_def_streaming_output_call_response(<<1:1,\n\t\t\t\t\t\t   X:7, Rest/binary>>,\n\t\t\t\t\t\t N, Acc, F@_1, TrUserData)\n    when N < 32 - 7 ->\n    dg_read_field_def_streaming_output_call_response(Rest,\n\t\t\t\t\t\t     N + 7, X bsl N + Acc, F@_1,\n\t\t\t\t\t\t     TrUserData);\ndg_read_field_def_streaming_output_call_response(<<0:1,\n\t\t\t\t\t\t   X:7, Rest/binary>>,\n\t\t\t\t\t\t N, Acc, F@_1, TrUserData) ->\n    Key = X bsl N + Acc,\n    case Key of\n      10 ->\n\t  d_field_streaming_output_call_response_payload(Rest, 0,\n\t\t\t\t\t\t\t 0, F@_1, TrUserData);\n      _ ->\n\t  case Key band 7 of\n\t    0 ->\n\t\tskip_varint_streaming_output_call_response(Rest, 0, 0,\n\t\t\t\t\t\t\t   F@_1, TrUserData);\n\t    1 ->\n\t\tskip_64_streaming_output_call_response(Rest, 0, 0, F@_1,\n\t\t\t\t\t\t       TrUserData);\n\t    2 ->\n\t\tskip_length_delimited_streaming_output_call_response(Rest,\n\t\t\t\t\t\t\t\t     0, 0, F@_1,\n\t\t\t\t\t\t\t\t     TrUserData);\n\t    3 ->\n\t\tskip_group_streaming_output_call_response(Rest,\n\t\t\t\t\t\t\t  Key bsr 3, 0, F@_1,\n\t\t\t\t\t\t\t  TrUserData);\n\t    5 ->\n\t\tskip_32_streaming_output_call_response(Rest, 0, 0, F@_1,\n\t\t\t\t\t\t       TrUserData)\n\t  end\n    end;\ndg_read_field_def_streaming_output_call_response(<<>>,\n\t\t\t\t\t\t 0, 0, F@_1, _) ->\n    S1 = #{},\n    if F@_1 == '$undef' -> S1;\n       true -> S1#{payload => F@_1}\n    end.\n\nd_field_streaming_output_call_response_payload(<<1:1,\n\t\t\t\t\t\t X:7, Rest/binary>>,\n\t\t\t\t\t       N, Acc, F@_1, TrUserData)\n    when N < 57 ->\n    d_field_streaming_output_call_response_payload(Rest,\n\t\t\t\t\t\t   N + 7, X bsl N + Acc, F@_1,\n\t\t\t\t\t\t   TrUserData);\nd_field_streaming_output_call_response_payload(<<0:1,\n\t\t\t\t\t\t X:7, Rest/binary>>,\n\t\t\t\t\t       N, Acc, Prev, TrUserData) ->\n    {NewFValue, RestF} = begin\n\t\t\t   Len = X bsl N + Acc,\n\t\t\t   <<Bs:Len/binary, Rest2/binary>> = Rest,\n\t\t\t   {id(decode_msg_payload(Bs, TrUserData), TrUserData),\n\t\t\t    Rest2}\n\t\t\t end,\n    dfp_read_field_def_streaming_output_call_response(RestF,\n\t\t\t\t\t\t      0, 0,\n\t\t\t\t\t\t      if Prev == '$undef' ->\n\t\t\t\t\t\t\t     NewFValue;\n\t\t\t\t\t\t\t true ->\n\t\t\t\t\t\t\t     merge_msg_payload(Prev,\n\t\t\t\t\t\t\t\t\t       NewFValue,\n\t\t\t\t\t\t\t\t\t       TrUserData)\n\t\t\t\t\t\t      end,\n\t\t\t\t\t\t      TrUserData).\n\nskip_varint_streaming_output_call_response(<<1:1, _:7,\n\t\t\t\t\t     Rest/binary>>,\n\t\t\t\t\t   Z1, Z2, F@_1, TrUserData) ->\n    skip_varint_streaming_output_call_response(Rest, Z1, Z2,\n\t\t\t\t\t       F@_1, TrUserData);\nskip_varint_streaming_output_call_response(<<0:1, _:7,\n\t\t\t\t\t     Rest/binary>>,\n\t\t\t\t\t   Z1, Z2, F@_1, TrUserData) ->\n    dfp_read_field_def_streaming_output_call_response(Rest,\n\t\t\t\t\t\t      Z1, Z2, F@_1, TrUserData).\n\nskip_length_delimited_streaming_output_call_response(<<1:1,\n\t\t\t\t\t\t       X:7, Rest/binary>>,\n\t\t\t\t\t\t     N, Acc, F@_1, TrUserData)\n    when N < 57 ->\n    skip_length_delimited_streaming_output_call_response(Rest,\n\t\t\t\t\t\t\t N + 7, X bsl N + Acc,\n\t\t\t\t\t\t\t F@_1, TrUserData);\nskip_length_delimited_streaming_output_call_response(<<0:1,\n\t\t\t\t\t\t       X:7, Rest/binary>>,\n\t\t\t\t\t\t     N, Acc, F@_1,\n\t\t\t\t\t\t     TrUserData) ->\n    Length = X bsl N + Acc,\n    <<_:Length/binary, Rest2/binary>> = Rest,\n    dfp_read_field_def_streaming_output_call_response(Rest2,\n\t\t\t\t\t\t      0, 0, F@_1, TrUserData).\n\nskip_group_streaming_output_call_response(Bin, FNum, Z2,\n\t\t\t\t\t  F@_1, TrUserData) ->\n    {_, Rest} = read_group(Bin, FNum),\n    dfp_read_field_def_streaming_output_call_response(Rest,\n\t\t\t\t\t\t      0, Z2, F@_1, TrUserData).\n\nskip_32_streaming_output_call_response(<<_:32,\n\t\t\t\t\t Rest/binary>>,\n\t\t\t\t       Z1, Z2, F@_1, TrUserData) ->\n    dfp_read_field_def_streaming_output_call_response(Rest,\n\t\t\t\t\t\t      Z1, Z2, F@_1, TrUserData).\n\nskip_64_streaming_output_call_response(<<_:64,\n\t\t\t\t\t Rest/binary>>,\n\t\t\t\t       Z1, Z2, F@_1, TrUserData) ->\n    dfp_read_field_def_streaming_output_call_response(Rest,\n\t\t\t\t\t\t      Z1, Z2, F@_1, TrUserData).\n\ndecode_msg_reconnect_params(Bin, TrUserData) ->\n    dfp_read_field_def_reconnect_params(Bin, 0, 0,\n\t\t\t\t\tid(0, TrUserData), TrUserData).\n\ndfp_read_field_def_reconnect_params(<<8, Rest/binary>>,\n\t\t\t\t    Z1, Z2, F@_1, TrUserData) ->\n    d_field_reconnect_params_max_reconnect_backoff_ms(Rest,\n\t\t\t\t\t\t      Z1, Z2, F@_1, TrUserData);\ndfp_read_field_def_reconnect_params(<<>>, 0, 0, F@_1,\n\t\t\t\t    _) ->\n    #{max_reconnect_backoff_ms => F@_1};\ndfp_read_field_def_reconnect_params(Other, Z1, Z2, F@_1,\n\t\t\t\t    TrUserData) ->\n    dg_read_field_def_reconnect_params(Other, Z1, Z2, F@_1,\n\t\t\t\t       TrUserData).\n\ndg_read_field_def_reconnect_params(<<1:1, X:7,\n\t\t\t\t     Rest/binary>>,\n\t\t\t\t   N, Acc, F@_1, TrUserData)\n    when N < 32 - 7 ->\n    dg_read_field_def_reconnect_params(Rest, N + 7,\n\t\t\t\t       X bsl N + Acc, F@_1, TrUserData);\ndg_read_field_def_reconnect_params(<<0:1, X:7,\n\t\t\t\t     Rest/binary>>,\n\t\t\t\t   N, Acc, F@_1, TrUserData) ->\n    Key = X bsl N + Acc,\n    case Key of\n      8 ->\n\t  d_field_reconnect_params_max_reconnect_backoff_ms(Rest,\n\t\t\t\t\t\t\t    0, 0, F@_1,\n\t\t\t\t\t\t\t    TrUserData);\n      _ ->\n\t  case Key band 7 of\n\t    0 ->\n\t\tskip_varint_reconnect_params(Rest, 0, 0, F@_1,\n\t\t\t\t\t     TrUserData);\n\t    1 ->\n\t\tskip_64_reconnect_params(Rest, 0, 0, F@_1, TrUserData);\n\t    2 ->\n\t\tskip_length_delimited_reconnect_params(Rest, 0, 0, F@_1,\n\t\t\t\t\t\t       TrUserData);\n\t    3 ->\n\t\tskip_group_reconnect_params(Rest, Key bsr 3, 0, F@_1,\n\t\t\t\t\t    TrUserData);\n\t    5 ->\n\t\tskip_32_reconnect_params(Rest, 0, 0, F@_1, TrUserData)\n\t  end\n    end;\ndg_read_field_def_reconnect_params(<<>>, 0, 0, F@_1,\n\t\t\t\t   _) ->\n    #{max_reconnect_backoff_ms => F@_1}.\n\nd_field_reconnect_params_max_reconnect_backoff_ms(<<1:1,\n\t\t\t\t\t\t    X:7, Rest/binary>>,\n\t\t\t\t\t\t  N, Acc, F@_1, TrUserData)\n    when N < 57 ->\n    d_field_reconnect_params_max_reconnect_backoff_ms(Rest,\n\t\t\t\t\t\t      N + 7, X bsl N + Acc,\n\t\t\t\t\t\t      F@_1, TrUserData);\nd_field_reconnect_params_max_reconnect_backoff_ms(<<0:1,\n\t\t\t\t\t\t    X:7, Rest/binary>>,\n\t\t\t\t\t\t  N, Acc, _, TrUserData) ->\n    {NewFValue, RestF} = {begin\n\t\t\t    <<Res:32/signed-native>> = <<(X bsl N +\n\t\t\t\t\t\t\t    Acc):32/unsigned-native>>,\n\t\t\t    id(Res, TrUserData)\n\t\t\t  end,\n\t\t\t  Rest},\n    dfp_read_field_def_reconnect_params(RestF, 0, 0,\n\t\t\t\t\tNewFValue, TrUserData).\n\nskip_varint_reconnect_params(<<1:1, _:7, Rest/binary>>,\n\t\t\t     Z1, Z2, F@_1, TrUserData) ->\n    skip_varint_reconnect_params(Rest, Z1, Z2, F@_1,\n\t\t\t\t TrUserData);\nskip_varint_reconnect_params(<<0:1, _:7, Rest/binary>>,\n\t\t\t     Z1, Z2, F@_1, TrUserData) ->\n    dfp_read_field_def_reconnect_params(Rest, Z1, Z2, F@_1,\n\t\t\t\t\tTrUserData).\n\nskip_length_delimited_reconnect_params(<<1:1, X:7,\n\t\t\t\t\t Rest/binary>>,\n\t\t\t\t       N, Acc, F@_1, TrUserData)\n    when N < 57 ->\n    skip_length_delimited_reconnect_params(Rest, N + 7,\n\t\t\t\t\t   X bsl N + Acc, F@_1, TrUserData);\nskip_length_delimited_reconnect_params(<<0:1, X:7,\n\t\t\t\t\t Rest/binary>>,\n\t\t\t\t       N, Acc, F@_1, TrUserData) ->\n    Length = X bsl N + Acc,\n    <<_:Length/binary, Rest2/binary>> = Rest,\n    dfp_read_field_def_reconnect_params(Rest2, 0, 0, F@_1,\n\t\t\t\t\tTrUserData).\n\nskip_group_reconnect_params(Bin, FNum, Z2, F@_1,\n\t\t\t    TrUserData) ->\n    {_, Rest} = read_group(Bin, FNum),\n    dfp_read_field_def_reconnect_params(Rest, 0, Z2, F@_1,\n\t\t\t\t\tTrUserData).\n\nskip_32_reconnect_params(<<_:32, Rest/binary>>, Z1, Z2,\n\t\t\t F@_1, TrUserData) ->\n    dfp_read_field_def_reconnect_params(Rest, Z1, Z2, F@_1,\n\t\t\t\t\tTrUserData).\n\nskip_64_reconnect_params(<<_:64, Rest/binary>>, Z1, Z2,\n\t\t\t F@_1, TrUserData) ->\n    dfp_read_field_def_reconnect_params(Rest, Z1, Z2, F@_1,\n\t\t\t\t\tTrUserData).\n\ndecode_msg_reconnect_info(Bin, TrUserData) ->\n    dfp_read_field_def_reconnect_info(Bin, 0, 0,\n\t\t\t\t      id(false, TrUserData), id([], TrUserData),\n\t\t\t\t      TrUserData).\n\ndfp_read_field_def_reconnect_info(<<8, Rest/binary>>,\n\t\t\t\t  Z1, Z2, F@_1, F@_2, TrUserData) ->\n    d_field_reconnect_info_passed(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t\t  TrUserData);\ndfp_read_field_def_reconnect_info(<<18, Rest/binary>>,\n\t\t\t\t  Z1, Z2, F@_1, F@_2, TrUserData) ->\n    d_pfield_reconnect_info_backoff_ms(Rest, Z1, Z2, F@_1,\n\t\t\t\t       F@_2, TrUserData);\ndfp_read_field_def_reconnect_info(<<16, Rest/binary>>,\n\t\t\t\t  Z1, Z2, F@_1, F@_2, TrUserData) ->\n    d_field_reconnect_info_backoff_ms(Rest, Z1, Z2, F@_1,\n\t\t\t\t      F@_2, TrUserData);\ndfp_read_field_def_reconnect_info(<<>>, 0, 0, F@_1, R1,\n\t\t\t\t  TrUserData) ->\n    #{passed => F@_1,\n      backoff_ms => lists_reverse(R1, TrUserData)};\ndfp_read_field_def_reconnect_info(Other, Z1, Z2, F@_1,\n\t\t\t\t  F@_2, TrUserData) ->\n    dg_read_field_def_reconnect_info(Other, Z1, Z2, F@_1,\n\t\t\t\t     F@_2, TrUserData).\n\ndg_read_field_def_reconnect_info(<<1:1, X:7,\n\t\t\t\t   Rest/binary>>,\n\t\t\t\t N, Acc, F@_1, F@_2, TrUserData)\n    when N < 32 - 7 ->\n    dg_read_field_def_reconnect_info(Rest, N + 7,\n\t\t\t\t     X bsl N + Acc, F@_1, F@_2, TrUserData);\ndg_read_field_def_reconnect_info(<<0:1, X:7,\n\t\t\t\t   Rest/binary>>,\n\t\t\t\t N, Acc, F@_1, F@_2, TrUserData) ->\n    Key = X bsl N + Acc,\n    case Key of\n      8 ->\n\t  d_field_reconnect_info_passed(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t\tTrUserData);\n      18 ->\n\t  d_pfield_reconnect_info_backoff_ms(Rest, 0, 0, F@_1,\n\t\t\t\t\t     F@_2, TrUserData);\n      16 ->\n\t  d_field_reconnect_info_backoff_ms(Rest, 0, 0, F@_1,\n\t\t\t\t\t    F@_2, TrUserData);\n      _ ->\n\t  case Key band 7 of\n\t    0 ->\n\t\tskip_varint_reconnect_info(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t\t   TrUserData);\n\t    1 ->\n\t\tskip_64_reconnect_info(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t       TrUserData);\n\t    2 ->\n\t\tskip_length_delimited_reconnect_info(Rest, 0, 0, F@_1,\n\t\t\t\t\t\t     F@_2, TrUserData);\n\t    3 ->\n\t\tskip_group_reconnect_info(Rest, Key bsr 3, 0, F@_1,\n\t\t\t\t\t  F@_2, TrUserData);\n\t    5 ->\n\t\tskip_32_reconnect_info(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t       TrUserData)\n\t  end\n    end;\ndg_read_field_def_reconnect_info(<<>>, 0, 0, F@_1, R1,\n\t\t\t\t TrUserData) ->\n    #{passed => F@_1,\n      backoff_ms => lists_reverse(R1, TrUserData)}.\n\nd_field_reconnect_info_passed(<<1:1, X:7, Rest/binary>>,\n\t\t\t      N, Acc, F@_1, F@_2, TrUserData)\n    when N < 57 ->\n    d_field_reconnect_info_passed(Rest, N + 7,\n\t\t\t\t  X bsl N + Acc, F@_1, F@_2, TrUserData);\nd_field_reconnect_info_passed(<<0:1, X:7, Rest/binary>>,\n\t\t\t      N, Acc, _, F@_2, TrUserData) ->\n    {NewFValue, RestF} = {id(X bsl N + Acc =/= 0,\n\t\t\t     TrUserData),\n\t\t\t  Rest},\n    dfp_read_field_def_reconnect_info(RestF, 0, 0,\n\t\t\t\t      NewFValue, F@_2, TrUserData).\n\nd_field_reconnect_info_backoff_ms(<<1:1, X:7,\n\t\t\t\t    Rest/binary>>,\n\t\t\t\t  N, Acc, F@_1, F@_2, TrUserData)\n    when N < 57 ->\n    d_field_reconnect_info_backoff_ms(Rest, N + 7,\n\t\t\t\t      X bsl N + Acc, F@_1, F@_2, TrUserData);\nd_field_reconnect_info_backoff_ms(<<0:1, X:7,\n\t\t\t\t    Rest/binary>>,\n\t\t\t\t  N, Acc, F@_1, Prev, TrUserData) ->\n    {NewFValue, RestF} = {begin\n\t\t\t    <<Res:32/signed-native>> = <<(X bsl N +\n\t\t\t\t\t\t\t    Acc):32/unsigned-native>>,\n\t\t\t    id(Res, TrUserData)\n\t\t\t  end,\n\t\t\t  Rest},\n    dfp_read_field_def_reconnect_info(RestF, 0, 0, F@_1,\n\t\t\t\t      cons(NewFValue, Prev, TrUserData),\n\t\t\t\t      TrUserData).\n\nd_pfield_reconnect_info_backoff_ms(<<1:1, X:7,\n\t\t\t\t     Rest/binary>>,\n\t\t\t\t   N, Acc, F@_1, F@_2, TrUserData)\n    when N < 57 ->\n    d_pfield_reconnect_info_backoff_ms(Rest, N + 7,\n\t\t\t\t       X bsl N + Acc, F@_1, F@_2, TrUserData);\nd_pfield_reconnect_info_backoff_ms(<<0:1, X:7,\n\t\t\t\t     Rest/binary>>,\n\t\t\t\t   N, Acc, F@_1, E, TrUserData) ->\n    Len = X bsl N + Acc,\n    <<PackedBytes:Len/binary, Rest2/binary>> = Rest,\n    NewSeq =\n\td_packed_field_reconnect_info_backoff_ms(PackedBytes, 0,\n\t\t\t\t\t\t 0, E, TrUserData),\n    dfp_read_field_def_reconnect_info(Rest2, 0, 0, F@_1,\n\t\t\t\t      NewSeq, TrUserData).\n\nd_packed_field_reconnect_info_backoff_ms(<<1:1, X:7,\n\t\t\t\t\t   Rest/binary>>,\n\t\t\t\t\t N, Acc, AccSeq, TrUserData)\n    when N < 57 ->\n    d_packed_field_reconnect_info_backoff_ms(Rest, N + 7,\n\t\t\t\t\t     X bsl N + Acc, AccSeq, TrUserData);\nd_packed_field_reconnect_info_backoff_ms(<<0:1, X:7,\n\t\t\t\t\t   Rest/binary>>,\n\t\t\t\t\t N, Acc, AccSeq, TrUserData) ->\n    {NewFValue, RestF} = {begin\n\t\t\t    <<Res:32/signed-native>> = <<(X bsl N +\n\t\t\t\t\t\t\t    Acc):32/unsigned-native>>,\n\t\t\t    id(Res, TrUserData)\n\t\t\t  end,\n\t\t\t  Rest},\n    d_packed_field_reconnect_info_backoff_ms(RestF, 0, 0,\n\t\t\t\t\t     [NewFValue | AccSeq], TrUserData);\nd_packed_field_reconnect_info_backoff_ms(<<>>, 0, 0,\n\t\t\t\t\t AccSeq, _) ->\n    AccSeq.\n\nskip_varint_reconnect_info(<<1:1, _:7, Rest/binary>>,\n\t\t\t   Z1, Z2, F@_1, F@_2, TrUserData) ->\n    skip_varint_reconnect_info(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t       TrUserData);\nskip_varint_reconnect_info(<<0:1, _:7, Rest/binary>>,\n\t\t\t   Z1, Z2, F@_1, F@_2, TrUserData) ->\n    dfp_read_field_def_reconnect_info(Rest, Z1, Z2, F@_1,\n\t\t\t\t      F@_2, TrUserData).\n\nskip_length_delimited_reconnect_info(<<1:1, X:7,\n\t\t\t\t       Rest/binary>>,\n\t\t\t\t     N, Acc, F@_1, F@_2, TrUserData)\n    when N < 57 ->\n    skip_length_delimited_reconnect_info(Rest, N + 7,\n\t\t\t\t\t X bsl N + Acc, F@_1, F@_2, TrUserData);\nskip_length_delimited_reconnect_info(<<0:1, X:7,\n\t\t\t\t       Rest/binary>>,\n\t\t\t\t     N, Acc, F@_1, F@_2, TrUserData) ->\n    Length = X bsl N + Acc,\n    <<_:Length/binary, Rest2/binary>> = Rest,\n    dfp_read_field_def_reconnect_info(Rest2, 0, 0, F@_1,\n\t\t\t\t      F@_2, TrUserData).\n\nskip_group_reconnect_info(Bin, FNum, Z2, F@_1, F@_2,\n\t\t\t  TrUserData) ->\n    {_, Rest} = read_group(Bin, FNum),\n    dfp_read_field_def_reconnect_info(Rest, 0, Z2, F@_1,\n\t\t\t\t      F@_2, TrUserData).\n\nskip_32_reconnect_info(<<_:32, Rest/binary>>, Z1, Z2,\n\t\t       F@_1, F@_2, TrUserData) ->\n    dfp_read_field_def_reconnect_info(Rest, Z1, Z2, F@_1,\n\t\t\t\t      F@_2, TrUserData).\n\nskip_64_reconnect_info(<<_:64, Rest/binary>>, Z1, Z2,\n\t\t       F@_1, F@_2, TrUserData) ->\n    dfp_read_field_def_reconnect_info(Rest, Z1, Z2, F@_1,\n\t\t\t\t      F@_2, TrUserData).\n\n'd_enum_grpc.testing.PayloadType'(0) -> 'COMPRESSABLE';\n'd_enum_grpc.testing.PayloadType'(V) -> V.\n\nread_group(Bin, FieldNum) ->\n    {NumBytes, EndTagLen} = read_gr_b(Bin, 0, 0, 0, 0, FieldNum),\n    <<Group:NumBytes/binary, _:EndTagLen/binary, Rest/binary>> = Bin,\n    {Group, Rest}.\n\n%% Like skipping over fields, but record the total length,\n%% Each field is <(FieldNum bsl 3) bor FieldType> ++ <FieldValue>\n%% Record the length because varints may be non-optimally encoded.\n%%\n%% Groups can be nested, but assume the same FieldNum cannot be nested\n%% because group field numbers are shared with the rest of the fields\n%% numbers. Thus we can search just for an group-end with the same\n%% field number.\n%%\n%% (The only time the same group field number could occur would\n%% be in a nested sub message, but then it would be inside a\n%% length-delimited entry, which we skip-read by length.)\nread_gr_b(<<1:1, X:7, Tl/binary>>, N, Acc, NumBytes, TagLen, FieldNum)\n  when N < (32-7) ->\n    read_gr_b(Tl, N+7, X bsl N + Acc, NumBytes, TagLen+1, FieldNum);\nread_gr_b(<<0:1, X:7, Tl/binary>>, N, Acc, NumBytes, TagLen,\n          FieldNum) ->\n    Key = X bsl N + Acc,\n    TagLen1 = TagLen + 1,\n    case {Key bsr 3, Key band 7} of\n        {FieldNum, 4} -> % 4 = group_end\n            {NumBytes, TagLen1};\n        {_, 0} -> % 0 = varint\n            read_gr_vi(Tl, 0, NumBytes + TagLen1, FieldNum);\n        {_, 1} -> % 1 = bits64\n            <<_:64, Tl2/binary>> = Tl,\n            read_gr_b(Tl2, 0, 0, NumBytes + TagLen1 + 8, 0, FieldNum);\n        {_, 2} -> % 2 = length_delimited\n            read_gr_ld(Tl, 0, 0, NumBytes + TagLen1, FieldNum);\n        {_, 3} -> % 3 = group_start\n            read_gr_b(Tl, 0, 0, NumBytes + TagLen1, 0, FieldNum);\n        {_, 4} -> % 4 = group_end\n            read_gr_b(Tl, 0, 0, NumBytes + TagLen1, 0, FieldNum);\n        {_, 5} -> % 5 = bits32\n            <<_:32, Tl2/binary>> = Tl,\n            read_gr_b(Tl2, 0, 0, NumBytes + TagLen1 + 4, 0, FieldNum)\n    end.\n\nread_gr_vi(<<1:1, _:7, Tl/binary>>, N, NumBytes, FieldNum)\n  when N < (64-7) ->\n    read_gr_vi(Tl, N+7, NumBytes+1, FieldNum);\nread_gr_vi(<<0:1, _:7, Tl/binary>>, _, NumBytes, FieldNum) ->\n    read_gr_b(Tl, 0, 0, NumBytes+1, 0, FieldNum).\n\nread_gr_ld(<<1:1, X:7, Tl/binary>>, N, Acc, NumBytes, FieldNum)\n  when N < (64-7) ->\n    read_gr_ld(Tl, N+7, X bsl N + Acc, NumBytes+1, FieldNum);\nread_gr_ld(<<0:1, X:7, Tl/binary>>, N, Acc, NumBytes, FieldNum) ->\n    Len = X bsl N + Acc,\n    NumBytes1 = NumBytes + 1,\n    <<_:Len/binary, Tl2/binary>> = Tl,\n    read_gr_b(Tl2, 0, 0, NumBytes1 + Len, 0, FieldNum).\n\nmerge_msgs(Prev, New, MsgName) when is_atom(MsgName) ->\n    merge_msgs(Prev, New, MsgName, []).\n\nmerge_msgs(Prev, New, MsgName, Opts) ->\n    TrUserData = proplists:get_value(user_data, Opts),\n    case MsgName of\n      empty -> merge_msg_empty(Prev, New, TrUserData);\n      bool_value ->\n\t  merge_msg_bool_value(Prev, New, TrUserData);\n      payload -> merge_msg_payload(Prev, New, TrUserData);\n      echo_status ->\n\t  merge_msg_echo_status(Prev, New, TrUserData);\n      simple_request ->\n\t  merge_msg_simple_request(Prev, New, TrUserData);\n      simple_response ->\n\t  merge_msg_simple_response(Prev, New, TrUserData);\n      streaming_input_call_request ->\n\t  merge_msg_streaming_input_call_request(Prev, New,\n\t\t\t\t\t\t TrUserData);\n      streaming_input_call_response ->\n\t  merge_msg_streaming_input_call_response(Prev, New,\n\t\t\t\t\t\t  TrUserData);\n      response_parameters ->\n\t  merge_msg_response_parameters(Prev, New, TrUserData);\n      streaming_output_call_request ->\n\t  merge_msg_streaming_output_call_request(Prev, New,\n\t\t\t\t\t\t  TrUserData);\n      streaming_output_call_response ->\n\t  merge_msg_streaming_output_call_response(Prev, New,\n\t\t\t\t\t\t   TrUserData);\n      reconnect_params ->\n\t  merge_msg_reconnect_params(Prev, New, TrUserData);\n      reconnect_info ->\n\t  merge_msg_reconnect_info(Prev, New, TrUserData)\n    end.\n\n-compile({nowarn_unused_function,merge_msg_empty/3}).\nmerge_msg_empty(_Prev, New, _TrUserData) -> New.\n\n-compile({nowarn_unused_function,merge_msg_bool_value/3}).\nmerge_msg_bool_value(PMsg, NMsg, _) ->\n    S1 = #{},\n    case {PMsg, NMsg} of\n      {_, #{value := NFvalue}} -> S1#{value => NFvalue};\n      {#{value := PFvalue}, _} -> S1#{value => PFvalue};\n      _ -> S1\n    end.\n\n-compile({nowarn_unused_function,merge_msg_payload/3}).\nmerge_msg_payload(PMsg, NMsg, _) ->\n    S1 = #{},\n    S2 = case {PMsg, NMsg} of\n\t   {_, #{type := NFtype}} -> S1#{type => NFtype};\n\t   {#{type := PFtype}, _} -> S1#{type => PFtype};\n\t   _ -> S1\n\t end,\n    case {PMsg, NMsg} of\n      {_, #{body := NFbody}} -> S2#{body => NFbody};\n      {#{body := PFbody}, _} -> S2#{body => PFbody};\n      _ -> S2\n    end.\n\n-compile({nowarn_unused_function,merge_msg_echo_status/3}).\nmerge_msg_echo_status(PMsg, NMsg, _) ->\n    S1 = #{},\n    S2 = case {PMsg, NMsg} of\n\t   {_, #{code := NFcode}} -> S1#{code => NFcode};\n\t   {#{code := PFcode}, _} -> S1#{code => PFcode};\n\t   _ -> S1\n\t end,\n    case {PMsg, NMsg} of\n      {_, #{message := NFmessage}} ->\n\t  S2#{message => NFmessage};\n      {#{message := PFmessage}, _} ->\n\t  S2#{message => PFmessage};\n      _ -> S2\n    end.\n\n-compile({nowarn_unused_function,merge_msg_simple_request/3}).\nmerge_msg_simple_request(PMsg, NMsg, TrUserData) ->\n    S1 = #{},\n    S2 = case {PMsg, NMsg} of\n\t   {_, #{response_type := NFresponse_type}} ->\n\t       S1#{response_type => NFresponse_type};\n\t   {#{response_type := PFresponse_type}, _} ->\n\t       S1#{response_type => PFresponse_type};\n\t   _ -> S1\n\t end,\n    S3 = case {PMsg, NMsg} of\n\t   {_, #{response_size := NFresponse_size}} ->\n\t       S2#{response_size => NFresponse_size};\n\t   {#{response_size := PFresponse_size}, _} ->\n\t       S2#{response_size => PFresponse_size};\n\t   _ -> S2\n\t end,\n    S4 = case {PMsg, NMsg} of\n\t   {#{payload := PFpayload}, #{payload := NFpayload}} ->\n\t       S3#{payload =>\n\t\t       merge_msg_payload(PFpayload, NFpayload, TrUserData)};\n\t   {_, #{payload := NFpayload}} ->\n\t       S3#{payload => NFpayload};\n\t   {#{payload := PFpayload}, _} ->\n\t       S3#{payload => PFpayload};\n\t   {_, _} -> S3\n\t end,\n    S5 = case {PMsg, NMsg} of\n\t   {_, #{fill_username := NFfill_username}} ->\n\t       S4#{fill_username => NFfill_username};\n\t   {#{fill_username := PFfill_username}, _} ->\n\t       S4#{fill_username => PFfill_username};\n\t   _ -> S4\n\t end,\n    S6 = case {PMsg, NMsg} of\n\t   {_, #{fill_oauth_scope := NFfill_oauth_scope}} ->\n\t       S5#{fill_oauth_scope => NFfill_oauth_scope};\n\t   {#{fill_oauth_scope := PFfill_oauth_scope}, _} ->\n\t       S5#{fill_oauth_scope => PFfill_oauth_scope};\n\t   _ -> S5\n\t end,\n    S7 = case {PMsg, NMsg} of\n\t   {#{response_compressed := PFresponse_compressed},\n\t    #{response_compressed := NFresponse_compressed}} ->\n\t       S6#{response_compressed =>\n\t\t       merge_msg_bool_value(PFresponse_compressed,\n\t\t\t\t\t    NFresponse_compressed, TrUserData)};\n\t   {_, #{response_compressed := NFresponse_compressed}} ->\n\t       S6#{response_compressed => NFresponse_compressed};\n\t   {#{response_compressed := PFresponse_compressed}, _} ->\n\t       S6#{response_compressed => PFresponse_compressed};\n\t   {_, _} -> S6\n\t end,\n    S8 = case {PMsg, NMsg} of\n\t   {#{response_status := PFresponse_status},\n\t    #{response_status := NFresponse_status}} ->\n\t       S7#{response_status =>\n\t\t       merge_msg_echo_status(PFresponse_status,\n\t\t\t\t\t     NFresponse_status, TrUserData)};\n\t   {_, #{response_status := NFresponse_status}} ->\n\t       S7#{response_status => NFresponse_status};\n\t   {#{response_status := PFresponse_status}, _} ->\n\t       S7#{response_status => PFresponse_status};\n\t   {_, _} -> S7\n\t end,\n    case {PMsg, NMsg} of\n      {#{expect_compressed := PFexpect_compressed},\n       #{expect_compressed := NFexpect_compressed}} ->\n\t  S8#{expect_compressed =>\n\t\t  merge_msg_bool_value(PFexpect_compressed,\n\t\t\t\t       NFexpect_compressed, TrUserData)};\n      {_, #{expect_compressed := NFexpect_compressed}} ->\n\t  S8#{expect_compressed => NFexpect_compressed};\n      {#{expect_compressed := PFexpect_compressed}, _} ->\n\t  S8#{expect_compressed => PFexpect_compressed};\n      {_, _} -> S8\n    end.\n\n-compile({nowarn_unused_function,merge_msg_simple_response/3}).\nmerge_msg_simple_response(PMsg, NMsg, TrUserData) ->\n    S1 = #{},\n    S2 = case {PMsg, NMsg} of\n\t   {#{payload := PFpayload}, #{payload := NFpayload}} ->\n\t       S1#{payload =>\n\t\t       merge_msg_payload(PFpayload, NFpayload, TrUserData)};\n\t   {_, #{payload := NFpayload}} ->\n\t       S1#{payload => NFpayload};\n\t   {#{payload := PFpayload}, _} ->\n\t       S1#{payload => PFpayload};\n\t   {_, _} -> S1\n\t end,\n    S3 = case {PMsg, NMsg} of\n\t   {_, #{username := NFusername}} ->\n\t       S2#{username => NFusername};\n\t   {#{username := PFusername}, _} ->\n\t       S2#{username => PFusername};\n\t   _ -> S2\n\t end,\n    case {PMsg, NMsg} of\n      {_, #{oauth_scope := NFoauth_scope}} ->\n\t  S3#{oauth_scope => NFoauth_scope};\n      {#{oauth_scope := PFoauth_scope}, _} ->\n\t  S3#{oauth_scope => PFoauth_scope};\n      _ -> S3\n    end.\n\n-compile({nowarn_unused_function,merge_msg_streaming_input_call_request/3}).\nmerge_msg_streaming_input_call_request(PMsg, NMsg,\n\t\t\t\t       TrUserData) ->\n    S1 = #{},\n    S2 = case {PMsg, NMsg} of\n\t   {#{payload := PFpayload}, #{payload := NFpayload}} ->\n\t       S1#{payload =>\n\t\t       merge_msg_payload(PFpayload, NFpayload, TrUserData)};\n\t   {_, #{payload := NFpayload}} ->\n\t       S1#{payload => NFpayload};\n\t   {#{payload := PFpayload}, _} ->\n\t       S1#{payload => PFpayload};\n\t   {_, _} -> S1\n\t end,\n    case {PMsg, NMsg} of\n      {#{expect_compressed := PFexpect_compressed},\n       #{expect_compressed := NFexpect_compressed}} ->\n\t  S2#{expect_compressed =>\n\t\t  merge_msg_bool_value(PFexpect_compressed,\n\t\t\t\t       NFexpect_compressed, TrUserData)};\n      {_, #{expect_compressed := NFexpect_compressed}} ->\n\t  S2#{expect_compressed => NFexpect_compressed};\n      {#{expect_compressed := PFexpect_compressed}, _} ->\n\t  S2#{expect_compressed => PFexpect_compressed};\n      {_, _} -> S2\n    end.\n\n-compile({nowarn_unused_function,merge_msg_streaming_input_call_response/3}).\nmerge_msg_streaming_input_call_response(PMsg, NMsg,\n\t\t\t\t\t_) ->\n    S1 = #{},\n    case {PMsg, NMsg} of\n      {_,\n       #{aggregated_payload_size :=\n\t     NFaggregated_payload_size}} ->\n\t  S1#{aggregated_payload_size =>\n\t\t  NFaggregated_payload_size};\n      {#{aggregated_payload_size :=\n\t     PFaggregated_payload_size},\n       _} ->\n\t  S1#{aggregated_payload_size =>\n\t\t  PFaggregated_payload_size};\n      _ -> S1\n    end.\n\n-compile({nowarn_unused_function,merge_msg_response_parameters/3}).\nmerge_msg_response_parameters(PMsg, NMsg, TrUserData) ->\n    S1 = #{},\n    S2 = case {PMsg, NMsg} of\n\t   {_, #{size := NFsize}} -> S1#{size => NFsize};\n\t   {#{size := PFsize}, _} -> S1#{size => PFsize};\n\t   _ -> S1\n\t end,\n    S3 = case {PMsg, NMsg} of\n\t   {_, #{interval_us := NFinterval_us}} ->\n\t       S2#{interval_us => NFinterval_us};\n\t   {#{interval_us := PFinterval_us}, _} ->\n\t       S2#{interval_us => PFinterval_us};\n\t   _ -> S2\n\t end,\n    case {PMsg, NMsg} of\n      {#{compressed := PFcompressed},\n       #{compressed := NFcompressed}} ->\n\t  S3#{compressed =>\n\t\t  merge_msg_bool_value(PFcompressed, NFcompressed,\n\t\t\t\t       TrUserData)};\n      {_, #{compressed := NFcompressed}} ->\n\t  S3#{compressed => NFcompressed};\n      {#{compressed := PFcompressed}, _} ->\n\t  S3#{compressed => PFcompressed};\n      {_, _} -> S3\n    end.\n\n-compile({nowarn_unused_function,merge_msg_streaming_output_call_request/3}).\nmerge_msg_streaming_output_call_request(PMsg, NMsg,\n\t\t\t\t\tTrUserData) ->\n    S1 = #{},\n    S2 = case {PMsg, NMsg} of\n\t   {_, #{response_type := NFresponse_type}} ->\n\t       S1#{response_type => NFresponse_type};\n\t   {#{response_type := PFresponse_type}, _} ->\n\t       S1#{response_type => PFresponse_type};\n\t   _ -> S1\n\t end,\n    S3 = case {PMsg, NMsg} of\n\t   {#{response_parameters := PFresponse_parameters},\n\t    #{response_parameters := NFresponse_parameters}} ->\n\t       S2#{response_parameters =>\n\t\t       'erlang_++'(PFresponse_parameters,\n\t\t\t\t   NFresponse_parameters, TrUserData)};\n\t   {_, #{response_parameters := NFresponse_parameters}} ->\n\t       S2#{response_parameters => NFresponse_parameters};\n\t   {#{response_parameters := PFresponse_parameters}, _} ->\n\t       S2#{response_parameters => PFresponse_parameters};\n\t   {_, _} -> S2\n\t end,\n    S4 = case {PMsg, NMsg} of\n\t   {#{payload := PFpayload}, #{payload := NFpayload}} ->\n\t       S3#{payload =>\n\t\t       merge_msg_payload(PFpayload, NFpayload, TrUserData)};\n\t   {_, #{payload := NFpayload}} ->\n\t       S3#{payload => NFpayload};\n\t   {#{payload := PFpayload}, _} ->\n\t       S3#{payload => PFpayload};\n\t   {_, _} -> S3\n\t end,\n    case {PMsg, NMsg} of\n      {#{response_status := PFresponse_status},\n       #{response_status := NFresponse_status}} ->\n\t  S4#{response_status =>\n\t\t  merge_msg_echo_status(PFresponse_status,\n\t\t\t\t\tNFresponse_status, TrUserData)};\n      {_, #{response_status := NFresponse_status}} ->\n\t  S4#{response_status => NFresponse_status};\n      {#{response_status := PFresponse_status}, _} ->\n\t  S4#{response_status => PFresponse_status};\n      {_, _} -> S4\n    end.\n\n-compile({nowarn_unused_function,merge_msg_streaming_output_call_response/3}).\nmerge_msg_streaming_output_call_response(PMsg, NMsg,\n\t\t\t\t\t TrUserData) ->\n    S1 = #{},\n    case {PMsg, NMsg} of\n      {#{payload := PFpayload}, #{payload := NFpayload}} ->\n\t  S1#{payload =>\n\t\t  merge_msg_payload(PFpayload, NFpayload, TrUserData)};\n      {_, #{payload := NFpayload}} ->\n\t  S1#{payload => NFpayload};\n      {#{payload := PFpayload}, _} ->\n\t  S1#{payload => PFpayload};\n      {_, _} -> S1\n    end.\n\n-compile({nowarn_unused_function,merge_msg_reconnect_params/3}).\nmerge_msg_reconnect_params(PMsg, NMsg, _) ->\n    S1 = #{},\n    case {PMsg, NMsg} of\n      {_,\n       #{max_reconnect_backoff_ms :=\n\t     NFmax_reconnect_backoff_ms}} ->\n\t  S1#{max_reconnect_backoff_ms =>\n\t\t  NFmax_reconnect_backoff_ms};\n      {#{max_reconnect_backoff_ms :=\n\t     PFmax_reconnect_backoff_ms},\n       _} ->\n\t  S1#{max_reconnect_backoff_ms =>\n\t\t  PFmax_reconnect_backoff_ms};\n      _ -> S1\n    end.\n\n-compile({nowarn_unused_function,merge_msg_reconnect_info/3}).\nmerge_msg_reconnect_info(PMsg, NMsg, TrUserData) ->\n    S1 = #{},\n    S2 = case {PMsg, NMsg} of\n\t   {_, #{passed := NFpassed}} -> S1#{passed => NFpassed};\n\t   {#{passed := PFpassed}, _} -> S1#{passed => PFpassed};\n\t   _ -> S1\n\t end,\n    case {PMsg, NMsg} of\n      {#{backoff_ms := PFbackoff_ms},\n       #{backoff_ms := NFbackoff_ms}} ->\n\t  S2#{backoff_ms =>\n\t\t  'erlang_++'(PFbackoff_ms, NFbackoff_ms, TrUserData)};\n      {_, #{backoff_ms := NFbackoff_ms}} ->\n\t  S2#{backoff_ms => NFbackoff_ms};\n      {#{backoff_ms := PFbackoff_ms}, _} ->\n\t  S2#{backoff_ms => PFbackoff_ms};\n      {_, _} -> S2\n    end.\n\n\nverify_msg(Msg, MsgName) when is_atom(MsgName) ->\n    verify_msg(Msg, MsgName, []).\n\nverify_msg(Msg, MsgName, Opts) ->\n    TrUserData = proplists:get_value(user_data, Opts),\n    case MsgName of\n      empty -> v_msg_empty(Msg, [MsgName], TrUserData);\n      bool_value ->\n\t  v_msg_bool_value(Msg, [MsgName], TrUserData);\n      payload -> v_msg_payload(Msg, [MsgName], TrUserData);\n      echo_status ->\n\t  v_msg_echo_status(Msg, [MsgName], TrUserData);\n      simple_request ->\n\t  v_msg_simple_request(Msg, [MsgName], TrUserData);\n      simple_response ->\n\t  v_msg_simple_response(Msg, [MsgName], TrUserData);\n      streaming_input_call_request ->\n\t  v_msg_streaming_input_call_request(Msg, [MsgName],\n\t\t\t\t\t     TrUserData);\n      streaming_input_call_response ->\n\t  v_msg_streaming_input_call_response(Msg, [MsgName],\n\t\t\t\t\t      TrUserData);\n      response_parameters ->\n\t  v_msg_response_parameters(Msg, [MsgName], TrUserData);\n      streaming_output_call_request ->\n\t  v_msg_streaming_output_call_request(Msg, [MsgName],\n\t\t\t\t\t      TrUserData);\n      streaming_output_call_response ->\n\t  v_msg_streaming_output_call_response(Msg, [MsgName],\n\t\t\t\t\t       TrUserData);\n      reconnect_params ->\n\t  v_msg_reconnect_params(Msg, [MsgName], TrUserData);\n      reconnect_info ->\n\t  v_msg_reconnect_info(Msg, [MsgName], TrUserData);\n      _ -> mk_type_error(not_a_known_message, Msg, [])\n    end.\n\n\n-compile({nowarn_unused_function,v_msg_empty/3}).\n-dialyzer({nowarn_function,v_msg_empty/3}).\nv_msg_empty(#{} = M, Path, _) ->\n    lists:foreach(fun (OtherKey) ->\n\t\t\t  mk_type_error({extraneous_key, OtherKey}, M, Path)\n\t\t  end,\n\t\t  maps:keys(M)),\n    ok;\nv_msg_empty(M, Path, _TrUserData) when is_map(M) ->\n    mk_type_error({missing_fields, [] -- maps:keys(M),\n\t\t   empty},\n\t\t  M, Path);\nv_msg_empty(X, Path, _TrUserData) ->\n    mk_type_error({expected_msg, empty}, X, Path).\n\n-compile({nowarn_unused_function,v_msg_bool_value/3}).\n-dialyzer({nowarn_function,v_msg_bool_value/3}).\nv_msg_bool_value(#{} = M, Path, TrUserData) ->\n    case M of\n      #{value := F1} ->\n\t  v_type_bool(F1, [value | Path], TrUserData);\n      _ -> ok\n    end,\n    lists:foreach(fun (value) -> ok;\n\t\t      (OtherKey) ->\n\t\t\t  mk_type_error({extraneous_key, OtherKey}, M, Path)\n\t\t  end,\n\t\t  maps:keys(M)),\n    ok;\nv_msg_bool_value(M, Path, _TrUserData) when is_map(M) ->\n    mk_type_error({missing_fields, [] -- maps:keys(M),\n\t\t   bool_value},\n\t\t  M, Path);\nv_msg_bool_value(X, Path, _TrUserData) ->\n    mk_type_error({expected_msg, bool_value}, X, Path).\n\n-compile({nowarn_unused_function,v_msg_payload/3}).\n-dialyzer({nowarn_function,v_msg_payload/3}).\nv_msg_payload(#{} = M, Path, TrUserData) ->\n    case M of\n      #{type := F1} ->\n\t  'v_enum_grpc.testing.PayloadType'(F1, [type | Path],\n\t\t\t\t\t    TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{body := F2} ->\n\t  v_type_bytes(F2, [body | Path], TrUserData);\n      _ -> ok\n    end,\n    lists:foreach(fun (type) -> ok;\n\t\t      (body) -> ok;\n\t\t      (OtherKey) ->\n\t\t\t  mk_type_error({extraneous_key, OtherKey}, M, Path)\n\t\t  end,\n\t\t  maps:keys(M)),\n    ok;\nv_msg_payload(M, Path, _TrUserData) when is_map(M) ->\n    mk_type_error({missing_fields, [] -- maps:keys(M),\n\t\t   payload},\n\t\t  M, Path);\nv_msg_payload(X, Path, _TrUserData) ->\n    mk_type_error({expected_msg, payload}, X, Path).\n\n-compile({nowarn_unused_function,v_msg_echo_status/3}).\n-dialyzer({nowarn_function,v_msg_echo_status/3}).\nv_msg_echo_status(#{} = M, Path, TrUserData) ->\n    case M of\n      #{code := F1} ->\n\t  v_type_int32(F1, [code | Path], TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{message := F2} ->\n\t  v_type_string(F2, [message | Path], TrUserData);\n      _ -> ok\n    end,\n    lists:foreach(fun (code) -> ok;\n\t\t      (message) -> ok;\n\t\t      (OtherKey) ->\n\t\t\t  mk_type_error({extraneous_key, OtherKey}, M, Path)\n\t\t  end,\n\t\t  maps:keys(M)),\n    ok;\nv_msg_echo_status(M, Path, _TrUserData)\n    when is_map(M) ->\n    mk_type_error({missing_fields, [] -- maps:keys(M),\n\t\t   echo_status},\n\t\t  M, Path);\nv_msg_echo_status(X, Path, _TrUserData) ->\n    mk_type_error({expected_msg, echo_status}, X, Path).\n\n-compile({nowarn_unused_function,v_msg_simple_request/3}).\n-dialyzer({nowarn_function,v_msg_simple_request/3}).\nv_msg_simple_request(#{} = M, Path, TrUserData) ->\n    case M of\n      #{response_type := F1} ->\n\t  'v_enum_grpc.testing.PayloadType'(F1,\n\t\t\t\t\t    [response_type | Path], TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{response_size := F2} ->\n\t  v_type_int32(F2, [response_size | Path], TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{payload := F3} ->\n\t  v_msg_payload(F3, [payload | Path], TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{fill_username := F4} ->\n\t  v_type_bool(F4, [fill_username | Path], TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{fill_oauth_scope := F5} ->\n\t  v_type_bool(F5, [fill_oauth_scope | Path], TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{response_compressed := F6} ->\n\t  v_msg_bool_value(F6, [response_compressed | Path],\n\t\t\t   TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{response_status := F7} ->\n\t  v_msg_echo_status(F7, [response_status | Path],\n\t\t\t    TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{expect_compressed := F8} ->\n\t  v_msg_bool_value(F8, [expect_compressed | Path],\n\t\t\t   TrUserData);\n      _ -> ok\n    end,\n    lists:foreach(fun (response_type) -> ok;\n\t\t      (response_size) -> ok;\n\t\t      (payload) -> ok;\n\t\t      (fill_username) -> ok;\n\t\t      (fill_oauth_scope) -> ok;\n\t\t      (response_compressed) -> ok;\n\t\t      (response_status) -> ok;\n\t\t      (expect_compressed) -> ok;\n\t\t      (OtherKey) ->\n\t\t\t  mk_type_error({extraneous_key, OtherKey}, M, Path)\n\t\t  end,\n\t\t  maps:keys(M)),\n    ok;\nv_msg_simple_request(M, Path, _TrUserData)\n    when is_map(M) ->\n    mk_type_error({missing_fields, [] -- maps:keys(M),\n\t\t   simple_request},\n\t\t  M, Path);\nv_msg_simple_request(X, Path, _TrUserData) ->\n    mk_type_error({expected_msg, simple_request}, X, Path).\n\n-compile({nowarn_unused_function,v_msg_simple_response/3}).\n-dialyzer({nowarn_function,v_msg_simple_response/3}).\nv_msg_simple_response(#{} = M, Path, TrUserData) ->\n    case M of\n      #{payload := F1} ->\n\t  v_msg_payload(F1, [payload | Path], TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{username := F2} ->\n\t  v_type_string(F2, [username | Path], TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{oauth_scope := F3} ->\n\t  v_type_string(F3, [oauth_scope | Path], TrUserData);\n      _ -> ok\n    end,\n    lists:foreach(fun (payload) -> ok;\n\t\t      (username) -> ok;\n\t\t      (oauth_scope) -> ok;\n\t\t      (OtherKey) ->\n\t\t\t  mk_type_error({extraneous_key, OtherKey}, M, Path)\n\t\t  end,\n\t\t  maps:keys(M)),\n    ok;\nv_msg_simple_response(M, Path, _TrUserData)\n    when is_map(M) ->\n    mk_type_error({missing_fields, [] -- maps:keys(M),\n\t\t   simple_response},\n\t\t  M, Path);\nv_msg_simple_response(X, Path, _TrUserData) ->\n    mk_type_error({expected_msg, simple_response}, X, Path).\n\n-compile({nowarn_unused_function,v_msg_streaming_input_call_request/3}).\n-dialyzer({nowarn_function,v_msg_streaming_input_call_request/3}).\nv_msg_streaming_input_call_request(#{} = M, Path,\n\t\t\t\t   TrUserData) ->\n    case M of\n      #{payload := F1} ->\n\t  v_msg_payload(F1, [payload | Path], TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{expect_compressed := F2} ->\n\t  v_msg_bool_value(F2, [expect_compressed | Path],\n\t\t\t   TrUserData);\n      _ -> ok\n    end,\n    lists:foreach(fun (payload) -> ok;\n\t\t      (expect_compressed) -> ok;\n\t\t      (OtherKey) ->\n\t\t\t  mk_type_error({extraneous_key, OtherKey}, M, Path)\n\t\t  end,\n\t\t  maps:keys(M)),\n    ok;\nv_msg_streaming_input_call_request(M, Path, _TrUserData)\n    when is_map(M) ->\n    mk_type_error({missing_fields, [] -- maps:keys(M),\n\t\t   streaming_input_call_request},\n\t\t  M, Path);\nv_msg_streaming_input_call_request(X, Path,\n\t\t\t\t   _TrUserData) ->\n    mk_type_error({expected_msg,\n\t\t   streaming_input_call_request},\n\t\t  X, Path).\n\n-compile({nowarn_unused_function,v_msg_streaming_input_call_response/3}).\n-dialyzer({nowarn_function,v_msg_streaming_input_call_response/3}).\nv_msg_streaming_input_call_response(#{} = M, Path,\n\t\t\t\t    TrUserData) ->\n    case M of\n      #{aggregated_payload_size := F1} ->\n\t  v_type_int32(F1, [aggregated_payload_size | Path],\n\t\t       TrUserData);\n      _ -> ok\n    end,\n    lists:foreach(fun (aggregated_payload_size) -> ok;\n\t\t      (OtherKey) ->\n\t\t\t  mk_type_error({extraneous_key, OtherKey}, M, Path)\n\t\t  end,\n\t\t  maps:keys(M)),\n    ok;\nv_msg_streaming_input_call_response(M, Path,\n\t\t\t\t    _TrUserData)\n    when is_map(M) ->\n    mk_type_error({missing_fields, [] -- maps:keys(M),\n\t\t   streaming_input_call_response},\n\t\t  M, Path);\nv_msg_streaming_input_call_response(X, Path,\n\t\t\t\t    _TrUserData) ->\n    mk_type_error({expected_msg,\n\t\t   streaming_input_call_response},\n\t\t  X, Path).\n\n-compile({nowarn_unused_function,v_msg_response_parameters/3}).\n-dialyzer({nowarn_function,v_msg_response_parameters/3}).\nv_msg_response_parameters(#{} = M, Path, TrUserData) ->\n    case M of\n      #{size := F1} ->\n\t  v_type_int32(F1, [size | Path], TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{interval_us := F2} ->\n\t  v_type_int32(F2, [interval_us | Path], TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{compressed := F3} ->\n\t  v_msg_bool_value(F3, [compressed | Path], TrUserData);\n      _ -> ok\n    end,\n    lists:foreach(fun (size) -> ok;\n\t\t      (interval_us) -> ok;\n\t\t      (compressed) -> ok;\n\t\t      (OtherKey) ->\n\t\t\t  mk_type_error({extraneous_key, OtherKey}, M, Path)\n\t\t  end,\n\t\t  maps:keys(M)),\n    ok;\nv_msg_response_parameters(M, Path, _TrUserData)\n    when is_map(M) ->\n    mk_type_error({missing_fields, [] -- maps:keys(M),\n\t\t   response_parameters},\n\t\t  M, Path);\nv_msg_response_parameters(X, Path, _TrUserData) ->\n    mk_type_error({expected_msg, response_parameters}, X,\n\t\t  Path).\n\n-compile({nowarn_unused_function,v_msg_streaming_output_call_request/3}).\n-dialyzer({nowarn_function,v_msg_streaming_output_call_request/3}).\nv_msg_streaming_output_call_request(#{} = M, Path,\n\t\t\t\t    TrUserData) ->\n    case M of\n      #{response_type := F1} ->\n\t  'v_enum_grpc.testing.PayloadType'(F1,\n\t\t\t\t\t    [response_type | Path], TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{response_parameters := F2} ->\n\t  if is_list(F2) ->\n\t\t _ = [v_msg_response_parameters(Elem,\n\t\t\t\t\t\t[response_parameters | Path],\n\t\t\t\t\t\tTrUserData)\n\t\t      || Elem <- F2],\n\t\t ok;\n\t     true ->\n\t\t mk_type_error({invalid_list_of,\n\t\t\t\t{msg, response_parameters}},\n\t\t\t       F2, [response_parameters | Path])\n\t  end;\n      _ -> ok\n    end,\n    case M of\n      #{payload := F3} ->\n\t  v_msg_payload(F3, [payload | Path], TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{response_status := F4} ->\n\t  v_msg_echo_status(F4, [response_status | Path],\n\t\t\t    TrUserData);\n      _ -> ok\n    end,\n    lists:foreach(fun (response_type) -> ok;\n\t\t      (response_parameters) -> ok;\n\t\t      (payload) -> ok;\n\t\t      (response_status) -> ok;\n\t\t      (OtherKey) ->\n\t\t\t  mk_type_error({extraneous_key, OtherKey}, M, Path)\n\t\t  end,\n\t\t  maps:keys(M)),\n    ok;\nv_msg_streaming_output_call_request(M, Path,\n\t\t\t\t    _TrUserData)\n    when is_map(M) ->\n    mk_type_error({missing_fields, [] -- maps:keys(M),\n\t\t   streaming_output_call_request},\n\t\t  M, Path);\nv_msg_streaming_output_call_request(X, Path,\n\t\t\t\t    _TrUserData) ->\n    mk_type_error({expected_msg,\n\t\t   streaming_output_call_request},\n\t\t  X, Path).\n\n-compile({nowarn_unused_function,v_msg_streaming_output_call_response/3}).\n-dialyzer({nowarn_function,v_msg_streaming_output_call_response/3}).\nv_msg_streaming_output_call_response(#{} = M, Path,\n\t\t\t\t     TrUserData) ->\n    case M of\n      #{payload := F1} ->\n\t  v_msg_payload(F1, [payload | Path], TrUserData);\n      _ -> ok\n    end,\n    lists:foreach(fun (payload) -> ok;\n\t\t      (OtherKey) ->\n\t\t\t  mk_type_error({extraneous_key, OtherKey}, M, Path)\n\t\t  end,\n\t\t  maps:keys(M)),\n    ok;\nv_msg_streaming_output_call_response(M, Path,\n\t\t\t\t     _TrUserData)\n    when is_map(M) ->\n    mk_type_error({missing_fields, [] -- maps:keys(M),\n\t\t   streaming_output_call_response},\n\t\t  M, Path);\nv_msg_streaming_output_call_response(X, Path,\n\t\t\t\t     _TrUserData) ->\n    mk_type_error({expected_msg,\n\t\t   streaming_output_call_response},\n\t\t  X, Path).\n\n-compile({nowarn_unused_function,v_msg_reconnect_params/3}).\n-dialyzer({nowarn_function,v_msg_reconnect_params/3}).\nv_msg_reconnect_params(#{} = M, Path, TrUserData) ->\n    case M of\n      #{max_reconnect_backoff_ms := F1} ->\n\t  v_type_int32(F1, [max_reconnect_backoff_ms | Path],\n\t\t       TrUserData);\n      _ -> ok\n    end,\n    lists:foreach(fun (max_reconnect_backoff_ms) -> ok;\n\t\t      (OtherKey) ->\n\t\t\t  mk_type_error({extraneous_key, OtherKey}, M, Path)\n\t\t  end,\n\t\t  maps:keys(M)),\n    ok;\nv_msg_reconnect_params(M, Path, _TrUserData)\n    when is_map(M) ->\n    mk_type_error({missing_fields, [] -- maps:keys(M),\n\t\t   reconnect_params},\n\t\t  M, Path);\nv_msg_reconnect_params(X, Path, _TrUserData) ->\n    mk_type_error({expected_msg, reconnect_params}, X,\n\t\t  Path).\n\n-compile({nowarn_unused_function,v_msg_reconnect_info/3}).\n-dialyzer({nowarn_function,v_msg_reconnect_info/3}).\nv_msg_reconnect_info(#{} = M, Path, TrUserData) ->\n    case M of\n      #{passed := F1} ->\n\t  v_type_bool(F1, [passed | Path], TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{backoff_ms := F2} ->\n\t  if is_list(F2) ->\n\t\t _ = [v_type_int32(Elem, [backoff_ms | Path], TrUserData)\n\t\t      || Elem <- F2],\n\t\t ok;\n\t     true ->\n\t\t mk_type_error({invalid_list_of, int32}, F2,\n\t\t\t       [backoff_ms | Path])\n\t  end;\n      _ -> ok\n    end,\n    lists:foreach(fun (passed) -> ok;\n\t\t      (backoff_ms) -> ok;\n\t\t      (OtherKey) ->\n\t\t\t  mk_type_error({extraneous_key, OtherKey}, M, Path)\n\t\t  end,\n\t\t  maps:keys(M)),\n    ok;\nv_msg_reconnect_info(M, Path, _TrUserData)\n    when is_map(M) ->\n    mk_type_error({missing_fields, [] -- maps:keys(M),\n\t\t   reconnect_info},\n\t\t  M, Path);\nv_msg_reconnect_info(X, Path, _TrUserData) ->\n    mk_type_error({expected_msg, reconnect_info}, X, Path).\n\n-compile({nowarn_unused_function,'v_enum_grpc.testing.PayloadType'/3}).\n-dialyzer({nowarn_function,'v_enum_grpc.testing.PayloadType'/3}).\n'v_enum_grpc.testing.PayloadType'('COMPRESSABLE', _Path,\n\t\t\t\t  _TrUserData) ->\n    ok;\n'v_enum_grpc.testing.PayloadType'(V, Path, TrUserData)\n    when is_integer(V) ->\n    v_type_sint32(V, Path, TrUserData);\n'v_enum_grpc.testing.PayloadType'(X, Path,\n\t\t\t\t  _TrUserData) ->\n    mk_type_error({invalid_enum,\n\t\t   'grpc.testing.PayloadType'},\n\t\t  X, Path).\n\n-compile({nowarn_unused_function,v_type_sint32/3}).\n-dialyzer({nowarn_function,v_type_sint32/3}).\nv_type_sint32(N, _Path, _TrUserData)\n    when -2147483648 =< N, N =< 2147483647 ->\n    ok;\nv_type_sint32(N, Path, _TrUserData)\n    when is_integer(N) ->\n    mk_type_error({value_out_of_range, sint32, signed, 32},\n\t\t  N, Path);\nv_type_sint32(X, Path, _TrUserData) ->\n    mk_type_error({bad_integer, sint32, signed, 32}, X,\n\t\t  Path).\n\n-compile({nowarn_unused_function,v_type_int32/3}).\n-dialyzer({nowarn_function,v_type_int32/3}).\nv_type_int32(N, _Path, _TrUserData)\n    when -2147483648 =< N, N =< 2147483647 ->\n    ok;\nv_type_int32(N, Path, _TrUserData) when is_integer(N) ->\n    mk_type_error({value_out_of_range, int32, signed, 32},\n\t\t  N, Path);\nv_type_int32(X, Path, _TrUserData) ->\n    mk_type_error({bad_integer, int32, signed, 32}, X,\n\t\t  Path).\n\n-compile({nowarn_unused_function,v_type_bool/3}).\n-dialyzer({nowarn_function,v_type_bool/3}).\nv_type_bool(false, _Path, _TrUserData) -> ok;\nv_type_bool(true, _Path, _TrUserData) -> ok;\nv_type_bool(0, _Path, _TrUserData) -> ok;\nv_type_bool(1, _Path, _TrUserData) -> ok;\nv_type_bool(X, Path, _TrUserData) ->\n    mk_type_error(bad_boolean_value, X, Path).\n\n-compile({nowarn_unused_function,v_type_string/3}).\n-dialyzer({nowarn_function,v_type_string/3}).\nv_type_string(S, Path, _TrUserData)\n    when is_list(S); is_binary(S) ->\n    try unicode:characters_to_binary(S) of\n      B when is_binary(B) -> ok;\n      {error, _, _} ->\n\t  mk_type_error(bad_unicode_string, S, Path)\n    catch\n      error:badarg ->\n\t  mk_type_error(bad_unicode_string, S, Path)\n    end;\nv_type_string(X, Path, _TrUserData) ->\n    mk_type_error(bad_unicode_string, X, Path).\n\n-compile({nowarn_unused_function,v_type_bytes/3}).\n-dialyzer({nowarn_function,v_type_bytes/3}).\nv_type_bytes(B, _Path, _TrUserData) when is_binary(B) ->\n    ok;\nv_type_bytes(B, _Path, _TrUserData) when is_list(B) ->\n    ok;\nv_type_bytes(X, Path, _TrUserData) ->\n    mk_type_error(bad_binary_value, X, Path).\n\n-compile({nowarn_unused_function,mk_type_error/3}).\n-spec mk_type_error(_, _, list()) -> no_return().\nmk_type_error(Error, ValueSeen, Path) ->\n    Path2 = prettify_path(Path),\n    erlang:error({gpb_type_error,\n\t\t  {Error, [{value, ValueSeen}, {path, Path2}]}}).\n\n\n-compile({nowarn_unused_function,prettify_path/1}).\n-dialyzer({nowarn_function,prettify_path/1}).\nprettify_path([]) -> top_level;\nprettify_path(PathR) ->\n    list_to_atom(lists:append(lists:join(\".\",\n\t\t\t\t\t lists:map(fun atom_to_list/1,\n\t\t\t\t\t\t   lists:reverse(PathR))))).\n\n\n-compile({nowarn_unused_function,id/2}).\n-compile({inline,id/2}).\nid(X, _TrUserData) -> X.\n\n-compile({nowarn_unused_function,v_ok/3}).\n-compile({inline,v_ok/3}).\nv_ok(_Value, _Path, _TrUserData) -> ok.\n\n-compile({nowarn_unused_function,m_overwrite/3}).\n-compile({inline,m_overwrite/3}).\nm_overwrite(_Prev, New, _TrUserData) -> New.\n\n-compile({nowarn_unused_function,cons/3}).\n-compile({inline,cons/3}).\ncons(Elem, Acc, _TrUserData) -> [Elem | Acc].\n\n-compile({nowarn_unused_function,lists_reverse/2}).\n-compile({inline,lists_reverse/2}).\n'lists_reverse'(L, _TrUserData) -> lists:reverse(L).\n-compile({nowarn_unused_function,'erlang_++'/3}).\n-compile({inline,'erlang_++'/3}).\n'erlang_++'(A, B, _TrUserData) -> A ++ B.\n\nget_msg_defs() ->\n    [{{enum, 'grpc.testing.PayloadType'},\n      [{'COMPRESSABLE', 0}]},\n     {{msg, empty}, []},\n     {{msg, bool_value},\n      [#{name => value, fnum => 1, rnum => 2, type => bool,\n\t occurrence => optional, opts => []}]},\n     {{msg, payload},\n      [#{name => type, fnum => 1, rnum => 2,\n\t type => {enum, 'grpc.testing.PayloadType'},\n\t occurrence => optional, opts => []},\n       #{name => body, fnum => 2, rnum => 3, type => bytes,\n\t occurrence => optional, opts => []}]},\n     {{msg, echo_status},\n      [#{name => code, fnum => 1, rnum => 2, type => int32,\n\t occurrence => optional, opts => []},\n       #{name => message, fnum => 2, rnum => 3, type => string,\n\t occurrence => optional, opts => []}]},\n     {{msg, simple_request},\n      [#{name => response_type, fnum => 1, rnum => 2,\n\t type => {enum, 'grpc.testing.PayloadType'},\n\t occurrence => optional, opts => []},\n       #{name => response_size, fnum => 2, rnum => 3,\n\t type => int32, occurrence => optional, opts => []},\n       #{name => payload, fnum => 3, rnum => 4,\n\t type => {msg, payload}, occurrence => optional,\n\t opts => []},\n       #{name => fill_username, fnum => 4, rnum => 5,\n\t type => bool, occurrence => optional, opts => []},\n       #{name => fill_oauth_scope, fnum => 5, rnum => 6,\n\t type => bool, occurrence => optional, opts => []},\n       #{name => response_compressed, fnum => 6, rnum => 7,\n\t type => {msg, bool_value}, occurrence => optional,\n\t opts => []},\n       #{name => response_status, fnum => 7, rnum => 8,\n\t type => {msg, echo_status}, occurrence => optional,\n\t opts => []},\n       #{name => expect_compressed, fnum => 8, rnum => 9,\n\t type => {msg, bool_value}, occurrence => optional,\n\t opts => []}]},\n     {{msg, simple_response},\n      [#{name => payload, fnum => 1, rnum => 2,\n\t type => {msg, payload}, occurrence => optional,\n\t opts => []},\n       #{name => username, fnum => 2, rnum => 3,\n\t type => string, occurrence => optional, opts => []},\n       #{name => oauth_scope, fnum => 3, rnum => 4,\n\t type => string, occurrence => optional, opts => []}]},\n     {{msg, streaming_input_call_request},\n      [#{name => payload, fnum => 1, rnum => 2,\n\t type => {msg, payload}, occurrence => optional,\n\t opts => []},\n       #{name => expect_compressed, fnum => 2, rnum => 3,\n\t type => {msg, bool_value}, occurrence => optional,\n\t opts => []}]},\n     {{msg, streaming_input_call_response},\n      [#{name => aggregated_payload_size, fnum => 1,\n\t rnum => 2, type => int32, occurrence => optional,\n\t opts => []}]},\n     {{msg, response_parameters},\n      [#{name => size, fnum => 1, rnum => 2, type => int32,\n\t occurrence => optional, opts => []},\n       #{name => interval_us, fnum => 2, rnum => 3,\n\t type => int32, occurrence => optional, opts => []},\n       #{name => compressed, fnum => 3, rnum => 4,\n\t type => {msg, bool_value}, occurrence => optional,\n\t opts => []}]},\n     {{msg, streaming_output_call_request},\n      [#{name => response_type, fnum => 1, rnum => 2,\n\t type => {enum, 'grpc.testing.PayloadType'},\n\t occurrence => optional, opts => []},\n       #{name => response_parameters, fnum => 2, rnum => 3,\n\t type => {msg, response_parameters},\n\t occurrence => repeated, opts => []},\n       #{name => payload, fnum => 3, rnum => 4,\n\t type => {msg, payload}, occurrence => optional,\n\t opts => []},\n       #{name => response_status, fnum => 7, rnum => 5,\n\t type => {msg, echo_status}, occurrence => optional,\n\t opts => []}]},\n     {{msg, streaming_output_call_response},\n      [#{name => payload, fnum => 1, rnum => 2,\n\t type => {msg, payload}, occurrence => optional,\n\t opts => []}]},\n     {{msg, reconnect_params},\n      [#{name => max_reconnect_backoff_ms, fnum => 1,\n\t rnum => 2, type => int32, occurrence => optional,\n\t opts => []}]},\n     {{msg, reconnect_info},\n      [#{name => passed, fnum => 1, rnum => 2, type => bool,\n\t occurrence => optional, opts => []},\n       #{name => backoff_ms, fnum => 2, rnum => 3,\n\t type => int32, occurrence => repeated,\n\t opts => [packed]}]}].\n\n\nget_msg_names() ->\n    [empty, bool_value, payload, echo_status,\n     simple_request, simple_response,\n     streaming_input_call_request,\n     streaming_input_call_response, response_parameters,\n     streaming_output_call_request,\n     streaming_output_call_response, reconnect_params,\n     reconnect_info].\n\n\nget_group_names() -> [].\n\n\nget_msg_or_group_names() ->\n    [empty, bool_value, payload, echo_status,\n     simple_request, simple_response,\n     streaming_input_call_request,\n     streaming_input_call_response, response_parameters,\n     streaming_output_call_request,\n     streaming_output_call_response, reconnect_params,\n     reconnect_info].\n\n\nget_enum_names() -> ['grpc.testing.PayloadType'].\n\n\nfetch_msg_def(MsgName) ->\n    case find_msg_def(MsgName) of\n      Fs when is_list(Fs) -> Fs;\n      error -> erlang:error({no_such_msg, MsgName})\n    end.\n\n\nfetch_enum_def(EnumName) ->\n    case find_enum_def(EnumName) of\n      Es when is_list(Es) -> Es;\n      error -> erlang:error({no_such_enum, EnumName})\n    end.\n\n\nfind_msg_def(empty) -> [];\nfind_msg_def(bool_value) ->\n    [#{name => value, fnum => 1, rnum => 2, type => bool,\n       occurrence => optional, opts => []}];\nfind_msg_def(payload) ->\n    [#{name => type, fnum => 1, rnum => 2,\n       type => {enum, 'grpc.testing.PayloadType'},\n       occurrence => optional, opts => []},\n     #{name => body, fnum => 2, rnum => 3, type => bytes,\n       occurrence => optional, opts => []}];\nfind_msg_def(echo_status) ->\n    [#{name => code, fnum => 1, rnum => 2, type => int32,\n       occurrence => optional, opts => []},\n     #{name => message, fnum => 2, rnum => 3, type => string,\n       occurrence => optional, opts => []}];\nfind_msg_def(simple_request) ->\n    [#{name => response_type, fnum => 1, rnum => 2,\n       type => {enum, 'grpc.testing.PayloadType'},\n       occurrence => optional, opts => []},\n     #{name => response_size, fnum => 2, rnum => 3,\n       type => int32, occurrence => optional, opts => []},\n     #{name => payload, fnum => 3, rnum => 4,\n       type => {msg, payload}, occurrence => optional,\n       opts => []},\n     #{name => fill_username, fnum => 4, rnum => 5,\n       type => bool, occurrence => optional, opts => []},\n     #{name => fill_oauth_scope, fnum => 5, rnum => 6,\n       type => bool, occurrence => optional, opts => []},\n     #{name => response_compressed, fnum => 6, rnum => 7,\n       type => {msg, bool_value}, occurrence => optional,\n       opts => []},\n     #{name => response_status, fnum => 7, rnum => 8,\n       type => {msg, echo_status}, occurrence => optional,\n       opts => []},\n     #{name => expect_compressed, fnum => 8, rnum => 9,\n       type => {msg, bool_value}, occurrence => optional,\n       opts => []}];\nfind_msg_def(simple_response) ->\n    [#{name => payload, fnum => 1, rnum => 2,\n       type => {msg, payload}, occurrence => optional,\n       opts => []},\n     #{name => username, fnum => 2, rnum => 3,\n       type => string, occurrence => optional, opts => []},\n     #{name => oauth_scope, fnum => 3, rnum => 4,\n       type => string, occurrence => optional, opts => []}];\nfind_msg_def(streaming_input_call_request) ->\n    [#{name => payload, fnum => 1, rnum => 2,\n       type => {msg, payload}, occurrence => optional,\n       opts => []},\n     #{name => expect_compressed, fnum => 2, rnum => 3,\n       type => {msg, bool_value}, occurrence => optional,\n       opts => []}];\nfind_msg_def(streaming_input_call_response) ->\n    [#{name => aggregated_payload_size, fnum => 1,\n       rnum => 2, type => int32, occurrence => optional,\n       opts => []}];\nfind_msg_def(response_parameters) ->\n    [#{name => size, fnum => 1, rnum => 2, type => int32,\n       occurrence => optional, opts => []},\n     #{name => interval_us, fnum => 2, rnum => 3,\n       type => int32, occurrence => optional, opts => []},\n     #{name => compressed, fnum => 3, rnum => 4,\n       type => {msg, bool_value}, occurrence => optional,\n       opts => []}];\nfind_msg_def(streaming_output_call_request) ->\n    [#{name => response_type, fnum => 1, rnum => 2,\n       type => {enum, 'grpc.testing.PayloadType'},\n       occurrence => optional, opts => []},\n     #{name => response_parameters, fnum => 2, rnum => 3,\n       type => {msg, response_parameters},\n       occurrence => repeated, opts => []},\n     #{name => payload, fnum => 3, rnum => 4,\n       type => {msg, payload}, occurrence => optional,\n       opts => []},\n     #{name => response_status, fnum => 7, rnum => 5,\n       type => {msg, echo_status}, occurrence => optional,\n       opts => []}];\nfind_msg_def(streaming_output_call_response) ->\n    [#{name => payload, fnum => 1, rnum => 2,\n       type => {msg, payload}, occurrence => optional,\n       opts => []}];\nfind_msg_def(reconnect_params) ->\n    [#{name => max_reconnect_backoff_ms, fnum => 1,\n       rnum => 2, type => int32, occurrence => optional,\n       opts => []}];\nfind_msg_def(reconnect_info) ->\n    [#{name => passed, fnum => 1, rnum => 2, type => bool,\n       occurrence => optional, opts => []},\n     #{name => backoff_ms, fnum => 2, rnum => 3,\n       type => int32, occurrence => repeated,\n       opts => [packed]}];\nfind_msg_def(_) -> error.\n\n\nfind_enum_def('grpc.testing.PayloadType') ->\n    [{'COMPRESSABLE', 0}];\nfind_enum_def(_) -> error.\n\n\nenum_symbol_by_value('grpc.testing.PayloadType',\n\t\t     Value) ->\n    'enum_symbol_by_value_grpc.testing.PayloadType'(Value).\n\n\nenum_value_by_symbol('grpc.testing.PayloadType', Sym) ->\n    'enum_value_by_symbol_grpc.testing.PayloadType'(Sym).\n\n\n'enum_symbol_by_value_grpc.testing.PayloadType'(0) ->\n    'COMPRESSABLE'.\n\n\n'enum_value_by_symbol_grpc.testing.PayloadType'('COMPRESSABLE') ->\n    0.\n\n\nget_service_names() ->\n    ['grpc.testing.TestService',\n     'grpc.testing.UnimplementedService',\n     'grpc.testing.ReconnectService'].\n\n\nget_service_def('grpc.testing.TestService') ->\n    {{service, 'grpc.testing.TestService'},\n     [#{name => 'EmptyCall', input => empty, output => empty,\n\tinput_stream => false, output_stream => false,\n\topts => []},\n      #{name => 'UnaryCall', input => simple_request,\n\toutput => simple_response, input_stream => false,\n\toutput_stream => false, opts => []},\n      #{name => 'CacheableUnaryCall', input => simple_request,\n\toutput => simple_response, input_stream => false,\n\toutput_stream => false, opts => []},\n      #{name => 'StreamingOutputCall',\n\tinput => streaming_output_call_request,\n\toutput => streaming_output_call_response,\n\tinput_stream => false, output_stream => true,\n\topts => []},\n      #{name => 'StreamingInputCall',\n\tinput => streaming_input_call_request,\n\toutput => streaming_input_call_response,\n\tinput_stream => true, output_stream => false,\n\topts => []},\n      #{name => 'FullDuplexCall',\n\tinput => streaming_output_call_request,\n\toutput => streaming_output_call_response,\n\tinput_stream => true, output_stream => true,\n\topts => []},\n      #{name => 'HalfDuplexCall',\n\tinput => streaming_output_call_request,\n\toutput => streaming_output_call_response,\n\tinput_stream => true, output_stream => true,\n\topts => []},\n      #{name => 'UnimplementedCall', input => empty,\n\toutput => empty, input_stream => false,\n\toutput_stream => false, opts => []}]};\nget_service_def('grpc.testing.UnimplementedService') ->\n    {{service, 'grpc.testing.UnimplementedService'},\n     [#{name => 'UnimplementedCall', input => empty,\n\toutput => empty, input_stream => false,\n\toutput_stream => false, opts => []}]};\nget_service_def('grpc.testing.ReconnectService') ->\n    {{service, 'grpc.testing.ReconnectService'},\n     [#{name => 'Start', input => reconnect_params,\n\toutput => empty, input_stream => false,\n\toutput_stream => false, opts => []},\n      #{name => 'Stop', input => empty,\n\toutput => reconnect_info, input_stream => false,\n\toutput_stream => false, opts => []}]};\nget_service_def(_) -> error.\n\n\nget_rpc_names('grpc.testing.TestService') ->\n    ['EmptyCall', 'UnaryCall', 'CacheableUnaryCall',\n     'StreamingOutputCall', 'StreamingInputCall',\n     'FullDuplexCall', 'HalfDuplexCall',\n     'UnimplementedCall'];\nget_rpc_names('grpc.testing.UnimplementedService') ->\n    ['UnimplementedCall'];\nget_rpc_names('grpc.testing.ReconnectService') ->\n    ['Start', 'Stop'];\nget_rpc_names(_) -> error.\n\n\nfind_rpc_def('grpc.testing.TestService', RpcName) ->\n    'find_rpc_def_grpc.testing.TestService'(RpcName);\nfind_rpc_def('grpc.testing.UnimplementedService',\n\t     RpcName) ->\n    'find_rpc_def_grpc.testing.UnimplementedService'(RpcName);\nfind_rpc_def('grpc.testing.ReconnectService',\n\t     RpcName) ->\n    'find_rpc_def_grpc.testing.ReconnectService'(RpcName);\nfind_rpc_def(_, _) -> error.\n\n\n'find_rpc_def_grpc.testing.TestService'('EmptyCall') ->\n    #{name => 'EmptyCall', input => empty, output => empty,\n      input_stream => false, output_stream => false,\n      opts => []};\n'find_rpc_def_grpc.testing.TestService'('UnaryCall') ->\n    #{name => 'UnaryCall', input => simple_request,\n      output => simple_response, input_stream => false,\n      output_stream => false, opts => []};\n'find_rpc_def_grpc.testing.TestService'('CacheableUnaryCall') ->\n    #{name => 'CacheableUnaryCall', input => simple_request,\n      output => simple_response, input_stream => false,\n      output_stream => false, opts => []};\n'find_rpc_def_grpc.testing.TestService'('StreamingOutputCall') ->\n    #{name => 'StreamingOutputCall',\n      input => streaming_output_call_request,\n      output => streaming_output_call_response,\n      input_stream => false, output_stream => true,\n      opts => []};\n'find_rpc_def_grpc.testing.TestService'('StreamingInputCall') ->\n    #{name => 'StreamingInputCall',\n      input => streaming_input_call_request,\n      output => streaming_input_call_response,\n      input_stream => true, output_stream => false,\n      opts => []};\n'find_rpc_def_grpc.testing.TestService'('FullDuplexCall') ->\n    #{name => 'FullDuplexCall',\n      input => streaming_output_call_request,\n      output => streaming_output_call_response,\n      input_stream => true, output_stream => true,\n      opts => []};\n'find_rpc_def_grpc.testing.TestService'('HalfDuplexCall') ->\n    #{name => 'HalfDuplexCall',\n      input => streaming_output_call_request,\n      output => streaming_output_call_response,\n      input_stream => true, output_stream => true,\n      opts => []};\n'find_rpc_def_grpc.testing.TestService'('UnimplementedCall') ->\n    #{name => 'UnimplementedCall', input => empty,\n      output => empty, input_stream => false,\n      output_stream => false, opts => []};\n'find_rpc_def_grpc.testing.TestService'(_) -> error.\n\n'find_rpc_def_grpc.testing.UnimplementedService'('UnimplementedCall') ->\n    #{name => 'UnimplementedCall', input => empty,\n      output => empty, input_stream => false,\n      output_stream => false, opts => []};\n'find_rpc_def_grpc.testing.UnimplementedService'(_) ->\n    error.\n\n'find_rpc_def_grpc.testing.ReconnectService'('Start') ->\n    #{name => 'Start', input => reconnect_params,\n      output => empty, input_stream => false,\n      output_stream => false, opts => []};\n'find_rpc_def_grpc.testing.ReconnectService'('Stop') ->\n    #{name => 'Stop', input => empty,\n      output => reconnect_info, input_stream => false,\n      output_stream => false, opts => []};\n'find_rpc_def_grpc.testing.ReconnectService'(_) ->\n    error.\n\n\nfetch_rpc_def(ServiceName, RpcName) ->\n    case find_rpc_def(ServiceName, RpcName) of\n      Def when is_map(Def) -> Def;\n      error ->\n\t  erlang:error({no_such_rpc, ServiceName, RpcName})\n    end.\n\n\n%% Convert a a fully qualified (ie with package name) service name\n%% as a binary to a service name as an atom.\nfqbin_to_service_name(<<\"grpc.testing.TestService\">>) ->\n    'grpc.testing.TestService';\nfqbin_to_service_name(<<\"grpc.testing.UnimplementedService\">>) ->\n    'grpc.testing.UnimplementedService';\nfqbin_to_service_name(<<\"grpc.testing.ReconnectService\">>) ->\n    'grpc.testing.ReconnectService';\nfqbin_to_service_name(X) ->\n    error({gpb_error, {badservice, X}}).\n\n\n%% Convert a service name as an atom to a fully qualified\n%% (ie with package name) name as a binary.\nservice_name_to_fqbin('grpc.testing.TestService') ->\n    <<\"grpc.testing.TestService\">>;\nservice_name_to_fqbin('grpc.testing.UnimplementedService') ->\n    <<\"grpc.testing.UnimplementedService\">>;\nservice_name_to_fqbin('grpc.testing.ReconnectService') ->\n    <<\"grpc.testing.ReconnectService\">>;\nservice_name_to_fqbin(X) ->\n    error({gpb_error, {badservice, X}}).\n\n\n%% Convert a a fully qualified (ie with package name) service name\n%% and an rpc name, both as binaries to a service name and an rpc\n%% name, as atoms.\nfqbins_to_service_and_rpc_name(<<\"grpc.testing.TestService\">>, <<\"EmptyCall\">>) ->\n    {'grpc.testing.TestService', 'EmptyCall'};\nfqbins_to_service_and_rpc_name(<<\"grpc.testing.TestService\">>, <<\"UnaryCall\">>) ->\n    {'grpc.testing.TestService', 'UnaryCall'};\nfqbins_to_service_and_rpc_name(<<\"grpc.testing.TestService\">>, <<\"CacheableUnaryCall\">>) ->\n    {'grpc.testing.TestService', 'CacheableUnaryCall'};\nfqbins_to_service_and_rpc_name(<<\"grpc.testing.TestService\">>, <<\"StreamingOutputCall\">>) ->\n    {'grpc.testing.TestService', 'StreamingOutputCall'};\nfqbins_to_service_and_rpc_name(<<\"grpc.testing.TestService\">>, <<\"StreamingInputCall\">>) ->\n    {'grpc.testing.TestService', 'StreamingInputCall'};\nfqbins_to_service_and_rpc_name(<<\"grpc.testing.TestService\">>, <<\"FullDuplexCall\">>) ->\n    {'grpc.testing.TestService', 'FullDuplexCall'};\nfqbins_to_service_and_rpc_name(<<\"grpc.testing.TestService\">>, <<\"HalfDuplexCall\">>) ->\n    {'grpc.testing.TestService', 'HalfDuplexCall'};\nfqbins_to_service_and_rpc_name(<<\"grpc.testing.TestService\">>, <<\"UnimplementedCall\">>) ->\n    {'grpc.testing.TestService', 'UnimplementedCall'};\nfqbins_to_service_and_rpc_name(<<\"grpc.testing.UnimplementedService\">>, <<\"UnimplementedCall\">>) ->\n    {'grpc.testing.UnimplementedService',\n     'UnimplementedCall'};\nfqbins_to_service_and_rpc_name(<<\"grpc.testing.ReconnectService\">>, <<\"Start\">>) ->\n    {'grpc.testing.ReconnectService', 'Start'};\nfqbins_to_service_and_rpc_name(<<\"grpc.testing.ReconnectService\">>, <<\"Stop\">>) ->\n    {'grpc.testing.ReconnectService', 'Stop'};\nfqbins_to_service_and_rpc_name(S, R) ->\n    error({gpb_error, {badservice_or_rpc, {S, R}}}).\n\n\n%% Convert a service name and an rpc name, both as atoms,\n%% to a fully qualified (ie with package name) service name and\n%% an rpc name as binaries.\nservice_and_rpc_name_to_fqbins('grpc.testing.TestService',\n\t\t\t       'EmptyCall') ->\n    {<<\"grpc.testing.TestService\">>, <<\"EmptyCall\">>};\nservice_and_rpc_name_to_fqbins('grpc.testing.TestService',\n\t\t\t       'UnaryCall') ->\n    {<<\"grpc.testing.TestService\">>, <<\"UnaryCall\">>};\nservice_and_rpc_name_to_fqbins('grpc.testing.TestService',\n\t\t\t       'CacheableUnaryCall') ->\n    {<<\"grpc.testing.TestService\">>, <<\"CacheableUnaryCall\">>};\nservice_and_rpc_name_to_fqbins('grpc.testing.TestService',\n\t\t\t       'StreamingOutputCall') ->\n    {<<\"grpc.testing.TestService\">>, <<\"StreamingOutputCall\">>};\nservice_and_rpc_name_to_fqbins('grpc.testing.TestService',\n\t\t\t       'StreamingInputCall') ->\n    {<<\"grpc.testing.TestService\">>, <<\"StreamingInputCall\">>};\nservice_and_rpc_name_to_fqbins('grpc.testing.TestService',\n\t\t\t       'FullDuplexCall') ->\n    {<<\"grpc.testing.TestService\">>, <<\"FullDuplexCall\">>};\nservice_and_rpc_name_to_fqbins('grpc.testing.TestService',\n\t\t\t       'HalfDuplexCall') ->\n    {<<\"grpc.testing.TestService\">>, <<\"HalfDuplexCall\">>};\nservice_and_rpc_name_to_fqbins('grpc.testing.TestService',\n\t\t\t       'UnimplementedCall') ->\n    {<<\"grpc.testing.TestService\">>, <<\"UnimplementedCall\">>};\nservice_and_rpc_name_to_fqbins('grpc.testing.UnimplementedService',\n\t\t\t       'UnimplementedCall') ->\n    {<<\"grpc.testing.UnimplementedService\">>, <<\"UnimplementedCall\">>};\nservice_and_rpc_name_to_fqbins('grpc.testing.ReconnectService',\n\t\t\t       'Start') ->\n    {<<\"grpc.testing.ReconnectService\">>, <<\"Start\">>};\nservice_and_rpc_name_to_fqbins('grpc.testing.ReconnectService',\n\t\t\t       'Stop') ->\n    {<<\"grpc.testing.ReconnectService\">>, <<\"Stop\">>};\nservice_and_rpc_name_to_fqbins(S, R) ->\n    error({gpb_error, {badservice_or_rpc, {S, R}}}).\n\n\nfqbin_to_msg_name(<<\"grpc.testing.Empty\">>) -> empty;\nfqbin_to_msg_name(<<\"grpc.testing.BoolValue\">>) -> bool_value;\nfqbin_to_msg_name(<<\"grpc.testing.Payload\">>) -> payload;\nfqbin_to_msg_name(<<\"grpc.testing.EchoStatus\">>) -> echo_status;\nfqbin_to_msg_name(<<\"grpc.testing.SimpleRequest\">>) -> simple_request;\nfqbin_to_msg_name(<<\"grpc.testing.SimpleResponse\">>) -> simple_response;\nfqbin_to_msg_name(<<\"grpc.testing.StreamingInputCallRequest\">>) ->\n    streaming_input_call_request;\nfqbin_to_msg_name(<<\"grpc.testing.StreamingInputCallResponse\">>) ->\n    streaming_input_call_response;\nfqbin_to_msg_name(<<\"grpc.testing.ResponseParameters\">>) -> response_parameters;\nfqbin_to_msg_name(<<\"grpc.testing.StreamingOutputCallRequest\">>) ->\n    streaming_output_call_request;\nfqbin_to_msg_name(<<\"grpc.testing.StreamingOutputCallResponse\">>) ->\n    streaming_output_call_response;\nfqbin_to_msg_name(<<\"grpc.testing.ReconnectParams\">>) -> reconnect_params;\nfqbin_to_msg_name(<<\"grpc.testing.ReconnectInfo\">>) -> reconnect_info;\nfqbin_to_msg_name(E) -> error({gpb_error, {badmsg, E}}).\n\n\nmsg_name_to_fqbin(empty) -> <<\"grpc.testing.Empty\">>;\nmsg_name_to_fqbin(bool_value) -> <<\"grpc.testing.BoolValue\">>;\nmsg_name_to_fqbin(payload) -> <<\"grpc.testing.Payload\">>;\nmsg_name_to_fqbin(echo_status) -> <<\"grpc.testing.EchoStatus\">>;\nmsg_name_to_fqbin(simple_request) -> <<\"grpc.testing.SimpleRequest\">>;\nmsg_name_to_fqbin(simple_response) -> <<\"grpc.testing.SimpleResponse\">>;\nmsg_name_to_fqbin(streaming_input_call_request) ->\n    <<\"grpc.testing.StreamingInputCallRequest\">>;\nmsg_name_to_fqbin(streaming_input_call_response) ->\n    <<\"grpc.testing.StreamingInputCallResponse\">>;\nmsg_name_to_fqbin(response_parameters) -> <<\"grpc.testing.ResponseParameters\">>;\nmsg_name_to_fqbin(streaming_output_call_request) ->\n    <<\"grpc.testing.StreamingOutputCallRequest\">>;\nmsg_name_to_fqbin(streaming_output_call_response) ->\n    <<\"grpc.testing.StreamingOutputCallResponse\">>;\nmsg_name_to_fqbin(reconnect_params) -> <<\"grpc.testing.ReconnectParams\">>;\nmsg_name_to_fqbin(reconnect_info) -> <<\"grpc.testing.ReconnectInfo\">>;\nmsg_name_to_fqbin(E) -> error({gpb_error, {badmsg, E}}).\n\n\nfqbin_to_enum_name(<<\"grpc.testing.PayloadType\">>) ->\n    'grpc.testing.PayloadType';\nfqbin_to_enum_name(E) ->\n    error({gpb_error, {badenum, E}}).\n\n\nenum_name_to_fqbin('grpc.testing.PayloadType') ->\n    <<\"grpc.testing.PayloadType\">>;\nenum_name_to_fqbin(E) ->\n    error({gpb_error, {badenum, E}}).\n\n\nget_package_name() -> 'grpc.testing'.\n\n\n%% Whether or not the message names\n%% are prepended with package name or not.\nuses_packages() -> true.\n\n\nsource_basename() -> \"test.proto\".\n\n\n%% Retrieve all proto file names, also imported ones.\n%% The order is top-down. The first element is always the main\n%% source file. The files are returned with extension,\n%% see get_all_proto_names/0 for a version that returns\n%% the basenames sans extension\nget_all_source_basenames() ->\n    [\"test.proto\", \"empty.proto\", \"messages.proto\"].\n\n\n%% Retrieve all proto file names, also imported ones.\n%% The order is top-down. The first element is always the main\n%% source file. The files are returned sans .proto extension,\n%% to make it easier to use them with the various get_xyz_containment\n%% functions.\nget_all_proto_names() -> [\"test\", \"empty\", \"messages\"].\n\n\nget_msg_containment(\"test\") -> [];\nget_msg_containment(\"empty\") -> [empty];\nget_msg_containment(\"messages\") ->\n    [bool_value, echo_status, payload, reconnect_info,\n     reconnect_params, response_parameters, simple_request,\n     simple_response, streaming_input_call_request,\n     streaming_input_call_response,\n     streaming_output_call_request,\n     streaming_output_call_response];\nget_msg_containment(P) ->\n    error({gpb_error, {badproto, P}}).\n\n\nget_pkg_containment(\"test\") -> 'grpc.testing';\nget_pkg_containment(\"empty\") -> 'grpc.testing';\nget_pkg_containment(\"messages\") -> 'grpc.testing';\nget_pkg_containment(P) ->\n    error({gpb_error, {badproto, P}}).\n\n\nget_service_containment(\"test\") ->\n    ['grpc.testing.ReconnectService',\n     'grpc.testing.TestService',\n     'grpc.testing.UnimplementedService'];\nget_service_containment(\"empty\") -> [];\nget_service_containment(\"messages\") -> [];\nget_service_containment(P) ->\n    error({gpb_error, {badproto, P}}).\n\n\nget_rpc_containment(\"test\") ->\n    [{'grpc.testing.TestService', 'EmptyCall'},\n     {'grpc.testing.TestService', 'UnaryCall'},\n     {'grpc.testing.TestService', 'CacheableUnaryCall'},\n     {'grpc.testing.TestService', 'StreamingOutputCall'},\n     {'grpc.testing.TestService', 'StreamingInputCall'},\n     {'grpc.testing.TestService', 'FullDuplexCall'},\n     {'grpc.testing.TestService', 'HalfDuplexCall'},\n     {'grpc.testing.TestService', 'UnimplementedCall'},\n     {'grpc.testing.UnimplementedService',\n      'UnimplementedCall'},\n     {'grpc.testing.ReconnectService', 'Start'},\n     {'grpc.testing.ReconnectService', 'Stop'}];\nget_rpc_containment(\"empty\") -> [];\nget_rpc_containment(\"messages\") -> [];\nget_rpc_containment(P) ->\n    error({gpb_error, {badproto, P}}).\n\n\nget_enum_containment(\"test\") -> [];\nget_enum_containment(\"empty\") -> [];\nget_enum_containment(\"messages\") ->\n    ['grpc.testing.PayloadType'];\nget_enum_containment(P) ->\n    error({gpb_error, {badproto, P}}).\n\n\nget_proto_by_msg_name_as_fqbin(<<\"grpc.testing.ResponseParameters\">>) -> \"messages\";\nget_proto_by_msg_name_as_fqbin(<<\"grpc.testing.ReconnectParams\">>) -> \"messages\";\nget_proto_by_msg_name_as_fqbin(<<\"grpc.testing.EchoStatus\">>) -> \"messages\";\nget_proto_by_msg_name_as_fqbin(<<\"grpc.testing.StreamingOutputCallRequest\">>) -> \"messages\";\nget_proto_by_msg_name_as_fqbin(<<\"grpc.testing.StreamingInputCallRequest\">>) -> \"messages\";\nget_proto_by_msg_name_as_fqbin(<<\"grpc.testing.SimpleRequest\">>) -> \"messages\";\nget_proto_by_msg_name_as_fqbin(<<\"grpc.testing.Payload\">>) -> \"messages\";\nget_proto_by_msg_name_as_fqbin(<<\"grpc.testing.StreamingOutputCallResponse\">>) -> \"messages\";\nget_proto_by_msg_name_as_fqbin(<<\"grpc.testing.StreamingInputCallResponse\">>) -> \"messages\";\nget_proto_by_msg_name_as_fqbin(<<\"grpc.testing.SimpleResponse\">>) -> \"messages\";\nget_proto_by_msg_name_as_fqbin(<<\"grpc.testing.BoolValue\">>) -> \"messages\";\nget_proto_by_msg_name_as_fqbin(<<\"grpc.testing.Empty\">>) -> \"empty\";\nget_proto_by_msg_name_as_fqbin(<<\"grpc.testing.ReconnectInfo\">>) -> \"messages\";\nget_proto_by_msg_name_as_fqbin(E) ->\n    error({gpb_error, {badmsg, E}}).\n\n\nget_proto_by_service_name_as_fqbin(<<\"grpc.testing.UnimplementedService\">>) -> \"test\";\nget_proto_by_service_name_as_fqbin(<<\"grpc.testing.TestService\">>) -> \"test\";\nget_proto_by_service_name_as_fqbin(<<\"grpc.testing.ReconnectService\">>) -> \"test\";\nget_proto_by_service_name_as_fqbin(E) ->\n    error({gpb_error, {badservice, E}}).\n\n\nget_proto_by_enum_name_as_fqbin(<<\"grpc.testing.PayloadType\">>) -> \"messages\";\nget_proto_by_enum_name_as_fqbin(E) ->\n    error({gpb_error, {badenum, E}}).\n\n\nget_protos_by_pkg_name_as_fqbin(<<\"grpc.testing\">>) ->\n    [\"empty\", \"messages\", \"test\"];\nget_protos_by_pkg_name_as_fqbin(E) ->\n    error({gpb_error, {badpkg, E}}).\n\n\ndescriptor() ->\n    <<10, 128, 8, 10, 23, 103, 114, 112, 99, 47, 116, 101,\n      115, 116, 105, 110, 103, 47, 116, 101, 115, 116, 46,\n      112, 114, 111, 116, 111, 18, 12, 103, 114, 112, 99, 46,\n      116, 101, 115, 116, 105, 110, 103, 50, 223, 5, 10, 11,\n      84, 101, 115, 116, 83, 101, 114, 118, 105, 99, 101, 18,\n      57, 10, 9, 69, 109, 112, 116, 121, 67, 97, 108, 108, 18,\n      19, 46, 103, 114, 112, 99, 46, 116, 101, 115, 116, 105,\n      110, 103, 46, 69, 109, 112, 116, 121, 26, 19, 46, 103,\n      114, 112, 99, 46, 116, 101, 115, 116, 105, 110, 103, 46,\n      69, 109, 112, 116, 121, 40, 0, 48, 0, 18, 74, 10, 9, 85,\n      110, 97, 114, 121, 67, 97, 108, 108, 18, 27, 46, 103,\n      114, 112, 99, 46, 116, 101, 115, 116, 105, 110, 103, 46,\n      83, 105, 109, 112, 108, 101, 82, 101, 113, 117, 101,\n      115, 116, 26, 28, 46, 103, 114, 112, 99, 46, 116, 101,\n      115, 116, 105, 110, 103, 46, 83, 105, 109, 112, 108,\n      101, 82, 101, 115, 112, 111, 110, 115, 101, 40, 0, 48,\n      0, 18, 83, 10, 18, 67, 97, 99, 104, 101, 97, 98, 108,\n      101, 85, 110, 97, 114, 121, 67, 97, 108, 108, 18, 27,\n      46, 103, 114, 112, 99, 46, 116, 101, 115, 116, 105, 110,\n      103, 46, 83, 105, 109, 112, 108, 101, 82, 101, 113, 117,\n      101, 115, 116, 26, 28, 46, 103, 114, 112, 99, 46, 116,\n      101, 115, 116, 105, 110, 103, 46, 83, 105, 109, 112,\n      108, 101, 82, 101, 115, 112, 111, 110, 115, 101, 40, 0,\n      48, 0, 18, 110, 10, 19, 83, 116, 114, 101, 97, 109, 105,\n      110, 103, 79, 117, 116, 112, 117, 116, 67, 97, 108, 108,\n      18, 40, 46, 103, 114, 112, 99, 46, 116, 101, 115, 116,\n      105, 110, 103, 46, 83, 116, 114, 101, 97, 109, 105, 110,\n      103, 79, 117, 116, 112, 117, 116, 67, 97, 108, 108, 82,\n      101, 113, 117, 101, 115, 116, 26, 41, 46, 103, 114, 112,\n      99, 46, 116, 101, 115, 116, 105, 110, 103, 46, 83, 116,\n      114, 101, 97, 109, 105, 110, 103, 79, 117, 116, 112,\n      117, 116, 67, 97, 108, 108, 82, 101, 115, 112, 111, 110,\n      115, 101, 40, 0, 48, 0, 18, 107, 10, 18, 83, 116, 114,\n      101, 97, 109, 105, 110, 103, 73, 110, 112, 117, 116, 67,\n      97, 108, 108, 18, 39, 46, 103, 114, 112, 99, 46, 116,\n      101, 115, 116, 105, 110, 103, 46, 83, 116, 114, 101, 97,\n      109, 105, 110, 103, 73, 110, 112, 117, 116, 67, 97, 108,\n      108, 82, 101, 113, 117, 101, 115, 116, 26, 40, 46, 103,\n      114, 112, 99, 46, 116, 101, 115, 116, 105, 110, 103, 46,\n      83, 116, 114, 101, 97, 109, 105, 110, 103, 73, 110, 112,\n      117, 116, 67, 97, 108, 108, 82, 101, 115, 112, 111, 110,\n      115, 101, 40, 0, 48, 0, 18, 105, 10, 14, 70, 117, 108,\n      108, 68, 117, 112, 108, 101, 120, 67, 97, 108, 108, 18,\n      40, 46, 103, 114, 112, 99, 46, 116, 101, 115, 116, 105,\n      110, 103, 46, 83, 116, 114, 101, 97, 109, 105, 110, 103,\n      79, 117, 116, 112, 117, 116, 67, 97, 108, 108, 82, 101,\n      113, 117, 101, 115, 116, 26, 41, 46, 103, 114, 112, 99,\n      46, 116, 101, 115, 116, 105, 110, 103, 46, 83, 116, 114,\n      101, 97, 109, 105, 110, 103, 79, 117, 116, 112, 117,\n      116, 67, 97, 108, 108, 82, 101, 115, 112, 111, 110, 115,\n      101, 40, 0, 48, 0, 18, 105, 10, 14, 72, 97, 108, 102,\n      68, 117, 112, 108, 101, 120, 67, 97, 108, 108, 18, 40,\n      46, 103, 114, 112, 99, 46, 116, 101, 115, 116, 105, 110,\n      103, 46, 83, 116, 114, 101, 97, 109, 105, 110, 103, 79,\n      117, 116, 112, 117, 116, 67, 97, 108, 108, 82, 101, 113,\n      117, 101, 115, 116, 26, 41, 46, 103, 114, 112, 99, 46,\n      116, 101, 115, 116, 105, 110, 103, 46, 83, 116, 114,\n      101, 97, 109, 105, 110, 103, 79, 117, 116, 112, 117,\n      116, 67, 97, 108, 108, 82, 101, 115, 112, 111, 110, 115,\n      101, 40, 0, 48, 0, 18, 65, 10, 17, 85, 110, 105, 109,\n      112, 108, 101, 109, 101, 110, 116, 101, 100, 67, 97,\n      108, 108, 18, 19, 46, 103, 114, 112, 99, 46, 116, 101,\n      115, 116, 105, 110, 103, 46, 69, 109, 112, 116, 121, 26,\n      19, 46, 103, 114, 112, 99, 46, 116, 101, 115, 116, 105,\n      110, 103, 46, 69, 109, 112, 116, 121, 40, 0, 48, 0, 50,\n      89, 10, 20, 85, 110, 105, 109, 112, 108, 101, 109, 101,\n      110, 116, 101, 100, 83, 101, 114, 118, 105, 99, 101, 18,\n      65, 10, 17, 85, 110, 105, 109, 112, 108, 101, 109, 101,\n      110, 116, 101, 100, 67, 97, 108, 108, 18, 19, 46, 103,\n      114, 112, 99, 46, 116, 101, 115, 116, 105, 110, 103, 46,\n      69, 109, 112, 116, 121, 26, 19, 46, 103, 114, 112, 99,\n      46, 116, 101, 115, 116, 105, 110, 103, 46, 69, 109, 112,\n      116, 121, 40, 0, 48, 0, 50, 145, 1, 10, 16, 82, 101, 99,\n      111, 110, 110, 101, 99, 116, 83, 101, 114, 118, 105, 99,\n      101, 18, 63, 10, 5, 83, 116, 97, 114, 116, 18, 29, 46,\n      103, 114, 112, 99, 46, 116, 101, 115, 116, 105, 110,\n      103, 46, 82, 101, 99, 111, 110, 110, 101, 99, 116, 80,\n      97, 114, 97, 109, 115, 26, 19, 46, 103, 114, 112, 99,\n      46, 116, 101, 115, 116, 105, 110, 103, 46, 69, 109, 112,\n      116, 121, 40, 0, 48, 0, 18, 60, 10, 4, 83, 116, 111,\n      112, 18, 19, 46, 103, 114, 112, 99, 46, 116, 101, 115,\n      116, 105, 110, 103, 46, 69, 109, 112, 116, 121, 26, 27,\n      46, 103, 114, 112, 99, 46, 116, 101, 115, 116, 105, 110,\n      103, 46, 82, 101, 99, 111, 110, 110, 101, 99, 116, 73,\n      110, 102, 111, 40, 0, 48, 0, 98, 6, 112, 114, 111, 116,\n      111, 51, 10, 57, 10, 24, 103, 114, 112, 99, 47, 116,\n      101, 115, 116, 105, 110, 103, 47, 101, 109, 112, 116,\n      121, 46, 112, 114, 111, 116, 111, 18, 12, 103, 114, 112,\n      99, 46, 116, 101, 115, 116, 105, 110, 103, 34, 7, 10, 5,\n      69, 109, 112, 116, 121, 98, 6, 112, 114, 111, 116, 111,\n      51, 10, 215, 10, 10, 27, 103, 114, 112, 99, 47, 116,\n      101, 115, 116, 105, 110, 103, 47, 109, 101, 115, 115,\n      97, 103, 101, 115, 46, 112, 114, 111, 116, 111, 18, 12,\n      103, 114, 112, 99, 46, 116, 101, 115, 116, 105, 110,\n      103, 34, 26, 10, 9, 66, 111, 111, 108, 86, 97, 108, 117,\n      101, 18, 13, 10, 5, 118, 97, 108, 117, 101, 24, 1, 32,\n      1, 40, 8, 34, 43, 10, 10, 69, 99, 104, 111, 83, 116, 97,\n      116, 117, 115, 18, 12, 10, 4, 99, 111, 100, 101, 24, 1,\n      32, 1, 40, 5, 18, 15, 10, 7, 109, 101, 115, 115, 97,\n      103, 101, 24, 2, 32, 1, 40, 9, 34, 64, 10, 7, 80, 97,\n      121, 108, 111, 97, 100, 18, 39, 10, 4, 116, 121, 112,\n      101, 24, 1, 32, 1, 40, 14, 50, 25, 46, 103, 114, 112,\n      99, 46, 116, 101, 115, 116, 105, 110, 103, 46, 80, 97,\n      121, 108, 111, 97, 100, 84, 121, 112, 101, 18, 12, 10,\n      4, 98, 111, 100, 121, 24, 2, 32, 1, 40, 12, 34, 63, 10,\n      13, 82, 101, 99, 111, 110, 110, 101, 99, 116, 73, 110,\n      102, 111, 18, 14, 10, 6, 112, 97, 115, 115, 101, 100,\n      24, 1, 32, 1, 40, 8, 18, 30, 10, 10, 98, 97, 99, 107,\n      111, 102, 102, 95, 109, 115, 24, 2, 32, 3, 40, 5, 66,\n      10, 8, 0, 16, 1, 48, 0, 40, 0, 80, 0, 34, 51, 10, 15,\n      82, 101, 99, 111, 110, 110, 101, 99, 116, 80, 97, 114,\n      97, 109, 115, 18, 32, 10, 24, 109, 97, 120, 95, 114,\n      101, 99, 111, 110, 110, 101, 99, 116, 95, 98, 97, 99,\n      107, 111, 102, 102, 95, 109, 115, 24, 1, 32, 1, 40, 5,\n      34, 100, 10, 18, 82, 101, 115, 112, 111, 110, 115, 101,\n      80, 97, 114, 97, 109, 101, 116, 101, 114, 115, 18, 12,\n      10, 4, 115, 105, 122, 101, 24, 1, 32, 1, 40, 5, 18, 19,\n      10, 11, 105, 110, 116, 101, 114, 118, 97, 108, 95, 117,\n      115, 24, 2, 32, 1, 40, 5, 18, 43, 10, 10, 99, 111, 109,\n      112, 114, 101, 115, 115, 101, 100, 24, 3, 32, 1, 40, 11,\n      50, 23, 46, 103, 114, 112, 99, 46, 116, 101, 115, 116,\n      105, 110, 103, 46, 66, 111, 111, 108, 86, 97, 108, 117,\n      101, 34, 206, 2, 10, 13, 83, 105, 109, 112, 108, 101,\n      82, 101, 113, 117, 101, 115, 116, 18, 48, 10, 13, 114,\n      101, 115, 112, 111, 110, 115, 101, 95, 116, 121, 112,\n      101, 24, 1, 32, 1, 40, 14, 50, 25, 46, 103, 114, 112,\n      99, 46, 116, 101, 115, 116, 105, 110, 103, 46, 80, 97,\n      121, 108, 111, 97, 100, 84, 121, 112, 101, 18, 21, 10,\n      13, 114, 101, 115, 112, 111, 110, 115, 101, 95, 115,\n      105, 122, 101, 24, 2, 32, 1, 40, 5, 18, 38, 10, 7, 112,\n      97, 121, 108, 111, 97, 100, 24, 3, 32, 1, 40, 11, 50,\n      21, 46, 103, 114, 112, 99, 46, 116, 101, 115, 116, 105,\n      110, 103, 46, 80, 97, 121, 108, 111, 97, 100, 18, 21,\n      10, 13, 102, 105, 108, 108, 95, 117, 115, 101, 114, 110,\n      97, 109, 101, 24, 4, 32, 1, 40, 8, 18, 24, 10, 16, 102,\n      105, 108, 108, 95, 111, 97, 117, 116, 104, 95, 115, 99,\n      111, 112, 101, 24, 5, 32, 1, 40, 8, 18, 52, 10, 19, 114,\n      101, 115, 112, 111, 110, 115, 101, 95, 99, 111, 109,\n      112, 114, 101, 115, 115, 101, 100, 24, 6, 32, 1, 40, 11,\n      50, 23, 46, 103, 114, 112, 99, 46, 116, 101, 115, 116,\n      105, 110, 103, 46, 66, 111, 111, 108, 86, 97, 108, 117,\n      101, 18, 49, 10, 15, 114, 101, 115, 112, 111, 110, 115,\n      101, 95, 115, 116, 97, 116, 117, 115, 24, 7, 32, 1, 40,\n      11, 50, 24, 46, 103, 114, 112, 99, 46, 116, 101, 115,\n      116, 105, 110, 103, 46, 69, 99, 104, 111, 83, 116, 97,\n      116, 117, 115, 18, 50, 10, 17, 101, 120, 112, 101, 99,\n      116, 95, 99, 111, 109, 112, 114, 101, 115, 115, 101,\n      100, 24, 8, 32, 1, 40, 11, 50, 23, 46, 103, 114, 112,\n      99, 46, 116, 101, 115, 116, 105, 110, 103, 46, 66, 111,\n      111, 108, 86, 97, 108, 117, 101, 34, 95, 10, 14, 83,\n      105, 109, 112, 108, 101, 82, 101, 115, 112, 111, 110,\n      115, 101, 18, 38, 10, 7, 112, 97, 121, 108, 111, 97,\n      100, 24, 1, 32, 1, 40, 11, 50, 21, 46, 103, 114, 112,\n      99, 46, 116, 101, 115, 116, 105, 110, 103, 46, 80, 97,\n      121, 108, 111, 97, 100, 18, 16, 10, 8, 117, 115, 101,\n      114, 110, 97, 109, 101, 24, 2, 32, 1, 40, 9, 18, 19, 10,\n      11, 111, 97, 117, 116, 104, 95, 115, 99, 111, 112, 101,\n      24, 3, 32, 1, 40, 9, 34, 119, 10, 25, 83, 116, 114, 101,\n      97, 109, 105, 110, 103, 73, 110, 112, 117, 116, 67, 97,\n      108, 108, 82, 101, 113, 117, 101, 115, 116, 18, 38, 10,\n      7, 112, 97, 121, 108, 111, 97, 100, 24, 1, 32, 1, 40,\n      11, 50, 21, 46, 103, 114, 112, 99, 46, 116, 101, 115,\n      116, 105, 110, 103, 46, 80, 97, 121, 108, 111, 97, 100,\n      18, 50, 10, 17, 101, 120, 112, 101, 99, 116, 95, 99,\n      111, 109, 112, 114, 101, 115, 115, 101, 100, 24, 2, 32,\n      1, 40, 11, 50, 23, 46, 103, 114, 112, 99, 46, 116, 101,\n      115, 116, 105, 110, 103, 46, 66, 111, 111, 108, 86, 97,\n      108, 117, 101, 34, 61, 10, 26, 83, 116, 114, 101, 97,\n      109, 105, 110, 103, 73, 110, 112, 117, 116, 67, 97, 108,\n      108, 82, 101, 115, 112, 111, 110, 115, 101, 18, 31, 10,\n      23, 97, 103, 103, 114, 101, 103, 97, 116, 101, 100, 95,\n      112, 97, 121, 108, 111, 97, 100, 95, 115, 105, 122, 101,\n      24, 1, 32, 1, 40, 5, 34, 232, 1, 10, 26, 83, 116, 114,\n      101, 97, 109, 105, 110, 103, 79, 117, 116, 112, 117,\n      116, 67, 97, 108, 108, 82, 101, 113, 117, 101, 115, 116,\n      18, 48, 10, 13, 114, 101, 115, 112, 111, 110, 115, 101,\n      95, 116, 121, 112, 101, 24, 1, 32, 1, 40, 14, 50, 25,\n      46, 103, 114, 112, 99, 46, 116, 101, 115, 116, 105, 110,\n      103, 46, 80, 97, 121, 108, 111, 97, 100, 84, 121, 112,\n      101, 18, 61, 10, 19, 114, 101, 115, 112, 111, 110, 115,\n      101, 95, 112, 97, 114, 97, 109, 101, 116, 101, 114, 115,\n      24, 2, 32, 3, 40, 11, 50, 32, 46, 103, 114, 112, 99, 46,\n      116, 101, 115, 116, 105, 110, 103, 46, 82, 101, 115,\n      112, 111, 110, 115, 101, 80, 97, 114, 97, 109, 101, 116,\n      101, 114, 115, 18, 38, 10, 7, 112, 97, 121, 108, 111,\n      97, 100, 24, 3, 32, 1, 40, 11, 50, 21, 46, 103, 114,\n      112, 99, 46, 116, 101, 115, 116, 105, 110, 103, 46, 80,\n      97, 121, 108, 111, 97, 100, 18, 49, 10, 15, 114, 101,\n      115, 112, 111, 110, 115, 101, 95, 115, 116, 97, 116,\n      117, 115, 24, 7, 32, 1, 40, 11, 50, 24, 46, 103, 114,\n      112, 99, 46, 116, 101, 115, 116, 105, 110, 103, 46, 69,\n      99, 104, 111, 83, 116, 97, 116, 117, 115, 34, 69, 10,\n      27, 83, 116, 114, 101, 97, 109, 105, 110, 103, 79, 117,\n      116, 112, 117, 116, 67, 97, 108, 108, 82, 101, 115, 112,\n      111, 110, 115, 101, 18, 38, 10, 7, 112, 97, 121, 108,\n      111, 97, 100, 24, 1, 32, 1, 40, 11, 50, 21, 46, 103,\n      114, 112, 99, 46, 116, 101, 115, 116, 105, 110, 103, 46,\n      80, 97, 121, 108, 111, 97, 100, 42, 31, 10, 11, 80, 97,\n      121, 108, 111, 97, 100, 84, 121, 112, 101, 18, 16, 10,\n      12, 67, 79, 77, 80, 82, 69, 83, 83, 65, 66, 76, 69, 16,\n      0, 98, 6, 112, 114, 111, 116, 111, 51>>.\n\ndescriptor(\"test\") ->\n    <<10, 23, 103, 114, 112, 99, 47, 116, 101, 115, 116,\n      105, 110, 103, 47, 116, 101, 115, 116, 46, 112, 114,\n      111, 116, 111, 18, 12, 103, 114, 112, 99, 46, 116, 101,\n      115, 116, 105, 110, 103, 50, 223, 5, 10, 11, 84, 101,\n      115, 116, 83, 101, 114, 118, 105, 99, 101, 18, 57, 10,\n      9, 69, 109, 112, 116, 121, 67, 97, 108, 108, 18, 19, 46,\n      103, 114, 112, 99, 46, 116, 101, 115, 116, 105, 110,\n      103, 46, 69, 109, 112, 116, 121, 26, 19, 46, 103, 114,\n      112, 99, 46, 116, 101, 115, 116, 105, 110, 103, 46, 69,\n      109, 112, 116, 121, 40, 0, 48, 0, 18, 74, 10, 9, 85,\n      110, 97, 114, 121, 67, 97, 108, 108, 18, 27, 46, 103,\n      114, 112, 99, 46, 116, 101, 115, 116, 105, 110, 103, 46,\n      83, 105, 109, 112, 108, 101, 82, 101, 113, 117, 101,\n      115, 116, 26, 28, 46, 103, 114, 112, 99, 46, 116, 101,\n      115, 116, 105, 110, 103, 46, 83, 105, 109, 112, 108,\n      101, 82, 101, 115, 112, 111, 110, 115, 101, 40, 0, 48,\n      0, 18, 83, 10, 18, 67, 97, 99, 104, 101, 97, 98, 108,\n      101, 85, 110, 97, 114, 121, 67, 97, 108, 108, 18, 27,\n      46, 103, 114, 112, 99, 46, 116, 101, 115, 116, 105, 110,\n      103, 46, 83, 105, 109, 112, 108, 101, 82, 101, 113, 117,\n      101, 115, 116, 26, 28, 46, 103, 114, 112, 99, 46, 116,\n      101, 115, 116, 105, 110, 103, 46, 83, 105, 109, 112,\n      108, 101, 82, 101, 115, 112, 111, 110, 115, 101, 40, 0,\n      48, 0, 18, 110, 10, 19, 83, 116, 114, 101, 97, 109, 105,\n      110, 103, 79, 117, 116, 112, 117, 116, 67, 97, 108, 108,\n      18, 40, 46, 103, 114, 112, 99, 46, 116, 101, 115, 116,\n      105, 110, 103, 46, 83, 116, 114, 101, 97, 109, 105, 110,\n      103, 79, 117, 116, 112, 117, 116, 67, 97, 108, 108, 82,\n      101, 113, 117, 101, 115, 116, 26, 41, 46, 103, 114, 112,\n      99, 46, 116, 101, 115, 116, 105, 110, 103, 46, 83, 116,\n      114, 101, 97, 109, 105, 110, 103, 79, 117, 116, 112,\n      117, 116, 67, 97, 108, 108, 82, 101, 115, 112, 111, 110,\n      115, 101, 40, 0, 48, 0, 18, 107, 10, 18, 83, 116, 114,\n      101, 97, 109, 105, 110, 103, 73, 110, 112, 117, 116, 67,\n      97, 108, 108, 18, 39, 46, 103, 114, 112, 99, 46, 116,\n      101, 115, 116, 105, 110, 103, 46, 83, 116, 114, 101, 97,\n      109, 105, 110, 103, 73, 110, 112, 117, 116, 67, 97, 108,\n      108, 82, 101, 113, 117, 101, 115, 116, 26, 40, 46, 103,\n      114, 112, 99, 46, 116, 101, 115, 116, 105, 110, 103, 46,\n      83, 116, 114, 101, 97, 109, 105, 110, 103, 73, 110, 112,\n      117, 116, 67, 97, 108, 108, 82, 101, 115, 112, 111, 110,\n      115, 101, 40, 0, 48, 0, 18, 105, 10, 14, 70, 117, 108,\n      108, 68, 117, 112, 108, 101, 120, 67, 97, 108, 108, 18,\n      40, 46, 103, 114, 112, 99, 46, 116, 101, 115, 116, 105,\n      110, 103, 46, 83, 116, 114, 101, 97, 109, 105, 110, 103,\n      79, 117, 116, 112, 117, 116, 67, 97, 108, 108, 82, 101,\n      113, 117, 101, 115, 116, 26, 41, 46, 103, 114, 112, 99,\n      46, 116, 101, 115, 116, 105, 110, 103, 46, 83, 116, 114,\n      101, 97, 109, 105, 110, 103, 79, 117, 116, 112, 117,\n      116, 67, 97, 108, 108, 82, 101, 115, 112, 111, 110, 115,\n      101, 40, 0, 48, 0, 18, 105, 10, 14, 72, 97, 108, 102,\n      68, 117, 112, 108, 101, 120, 67, 97, 108, 108, 18, 40,\n      46, 103, 114, 112, 99, 46, 116, 101, 115, 116, 105, 110,\n      103, 46, 83, 116, 114, 101, 97, 109, 105, 110, 103, 79,\n      117, 116, 112, 117, 116, 67, 97, 108, 108, 82, 101, 113,\n      117, 101, 115, 116, 26, 41, 46, 103, 114, 112, 99, 46,\n      116, 101, 115, 116, 105, 110, 103, 46, 83, 116, 114,\n      101, 97, 109, 105, 110, 103, 79, 117, 116, 112, 117,\n      116, 67, 97, 108, 108, 82, 101, 115, 112, 111, 110, 115,\n      101, 40, 0, 48, 0, 18, 65, 10, 17, 85, 110, 105, 109,\n      112, 108, 101, 109, 101, 110, 116, 101, 100, 67, 97,\n      108, 108, 18, 19, 46, 103, 114, 112, 99, 46, 116, 101,\n      115, 116, 105, 110, 103, 46, 69, 109, 112, 116, 121, 26,\n      19, 46, 103, 114, 112, 99, 46, 116, 101, 115, 116, 105,\n      110, 103, 46, 69, 109, 112, 116, 121, 40, 0, 48, 0, 50,\n      89, 10, 20, 85, 110, 105, 109, 112, 108, 101, 109, 101,\n      110, 116, 101, 100, 83, 101, 114, 118, 105, 99, 101, 18,\n      65, 10, 17, 85, 110, 105, 109, 112, 108, 101, 109, 101,\n      110, 116, 101, 100, 67, 97, 108, 108, 18, 19, 46, 103,\n      114, 112, 99, 46, 116, 101, 115, 116, 105, 110, 103, 46,\n      69, 109, 112, 116, 121, 26, 19, 46, 103, 114, 112, 99,\n      46, 116, 101, 115, 116, 105, 110, 103, 46, 69, 109, 112,\n      116, 121, 40, 0, 48, 0, 50, 145, 1, 10, 16, 82, 101, 99,\n      111, 110, 110, 101, 99, 116, 83, 101, 114, 118, 105, 99,\n      101, 18, 63, 10, 5, 83, 116, 97, 114, 116, 18, 29, 46,\n      103, 114, 112, 99, 46, 116, 101, 115, 116, 105, 110,\n      103, 46, 82, 101, 99, 111, 110, 110, 101, 99, 116, 80,\n      97, 114, 97, 109, 115, 26, 19, 46, 103, 114, 112, 99,\n      46, 116, 101, 115, 116, 105, 110, 103, 46, 69, 109, 112,\n      116, 121, 40, 0, 48, 0, 18, 60, 10, 4, 83, 116, 111,\n      112, 18, 19, 46, 103, 114, 112, 99, 46, 116, 101, 115,\n      116, 105, 110, 103, 46, 69, 109, 112, 116, 121, 26, 27,\n      46, 103, 114, 112, 99, 46, 116, 101, 115, 116, 105, 110,\n      103, 46, 82, 101, 99, 111, 110, 110, 101, 99, 116, 73,\n      110, 102, 111, 40, 0, 48, 0, 98, 6, 112, 114, 111, 116,\n      111, 51>>;\ndescriptor(\"empty\") ->\n    <<10, 24, 103, 114, 112, 99, 47, 116, 101, 115, 116,\n      105, 110, 103, 47, 101, 109, 112, 116, 121, 46, 112,\n      114, 111, 116, 111, 18, 12, 103, 114, 112, 99, 46, 116,\n      101, 115, 116, 105, 110, 103, 34, 7, 10, 5, 69, 109,\n      112, 116, 121, 98, 6, 112, 114, 111, 116, 111, 51>>;\ndescriptor(\"messages\") ->\n    <<10, 27, 103, 114, 112, 99, 47, 116, 101, 115, 116,\n      105, 110, 103, 47, 109, 101, 115, 115, 97, 103, 101,\n      115, 46, 112, 114, 111, 116, 111, 18, 12, 103, 114, 112,\n      99, 46, 116, 101, 115, 116, 105, 110, 103, 34, 26, 10,\n      9, 66, 111, 111, 108, 86, 97, 108, 117, 101, 18, 13, 10,\n      5, 118, 97, 108, 117, 101, 24, 1, 32, 1, 40, 8, 34, 43,\n      10, 10, 69, 99, 104, 111, 83, 116, 97, 116, 117, 115,\n      18, 12, 10, 4, 99, 111, 100, 101, 24, 1, 32, 1, 40, 5,\n      18, 15, 10, 7, 109, 101, 115, 115, 97, 103, 101, 24, 2,\n      32, 1, 40, 9, 34, 64, 10, 7, 80, 97, 121, 108, 111, 97,\n      100, 18, 39, 10, 4, 116, 121, 112, 101, 24, 1, 32, 1,\n      40, 14, 50, 25, 46, 103, 114, 112, 99, 46, 116, 101,\n      115, 116, 105, 110, 103, 46, 80, 97, 121, 108, 111, 97,\n      100, 84, 121, 112, 101, 18, 12, 10, 4, 98, 111, 100,\n      121, 24, 2, 32, 1, 40, 12, 34, 63, 10, 13, 82, 101, 99,\n      111, 110, 110, 101, 99, 116, 73, 110, 102, 111, 18, 14,\n      10, 6, 112, 97, 115, 115, 101, 100, 24, 1, 32, 1, 40, 8,\n      18, 30, 10, 10, 98, 97, 99, 107, 111, 102, 102, 95, 109,\n      115, 24, 2, 32, 3, 40, 5, 66, 10, 8, 0, 16, 1, 48, 0,\n      40, 0, 80, 0, 34, 51, 10, 15, 82, 101, 99, 111, 110,\n      110, 101, 99, 116, 80, 97, 114, 97, 109, 115, 18, 32,\n      10, 24, 109, 97, 120, 95, 114, 101, 99, 111, 110, 110,\n      101, 99, 116, 95, 98, 97, 99, 107, 111, 102, 102, 95,\n      109, 115, 24, 1, 32, 1, 40, 5, 34, 100, 10, 18, 82, 101,\n      115, 112, 111, 110, 115, 101, 80, 97, 114, 97, 109, 101,\n      116, 101, 114, 115, 18, 12, 10, 4, 115, 105, 122, 101,\n      24, 1, 32, 1, 40, 5, 18, 19, 10, 11, 105, 110, 116, 101,\n      114, 118, 97, 108, 95, 117, 115, 24, 2, 32, 1, 40, 5,\n      18, 43, 10, 10, 99, 111, 109, 112, 114, 101, 115, 115,\n      101, 100, 24, 3, 32, 1, 40, 11, 50, 23, 46, 103, 114,\n      112, 99, 46, 116, 101, 115, 116, 105, 110, 103, 46, 66,\n      111, 111, 108, 86, 97, 108, 117, 101, 34, 206, 2, 10,\n      13, 83, 105, 109, 112, 108, 101, 82, 101, 113, 117, 101,\n      115, 116, 18, 48, 10, 13, 114, 101, 115, 112, 111, 110,\n      115, 101, 95, 116, 121, 112, 101, 24, 1, 32, 1, 40, 14,\n      50, 25, 46, 103, 114, 112, 99, 46, 116, 101, 115, 116,\n      105, 110, 103, 46, 80, 97, 121, 108, 111, 97, 100, 84,\n      121, 112, 101, 18, 21, 10, 13, 114, 101, 115, 112, 111,\n      110, 115, 101, 95, 115, 105, 122, 101, 24, 2, 32, 1, 40,\n      5, 18, 38, 10, 7, 112, 97, 121, 108, 111, 97, 100, 24,\n      3, 32, 1, 40, 11, 50, 21, 46, 103, 114, 112, 99, 46,\n      116, 101, 115, 116, 105, 110, 103, 46, 80, 97, 121, 108,\n      111, 97, 100, 18, 21, 10, 13, 102, 105, 108, 108, 95,\n      117, 115, 101, 114, 110, 97, 109, 101, 24, 4, 32, 1, 40,\n      8, 18, 24, 10, 16, 102, 105, 108, 108, 95, 111, 97, 117,\n      116, 104, 95, 115, 99, 111, 112, 101, 24, 5, 32, 1, 40,\n      8, 18, 52, 10, 19, 114, 101, 115, 112, 111, 110, 115,\n      101, 95, 99, 111, 109, 112, 114, 101, 115, 115, 101,\n      100, 24, 6, 32, 1, 40, 11, 50, 23, 46, 103, 114, 112,\n      99, 46, 116, 101, 115, 116, 105, 110, 103, 46, 66, 111,\n      111, 108, 86, 97, 108, 117, 101, 18, 49, 10, 15, 114,\n      101, 115, 112, 111, 110, 115, 101, 95, 115, 116, 97,\n      116, 117, 115, 24, 7, 32, 1, 40, 11, 50, 24, 46, 103,\n      114, 112, 99, 46, 116, 101, 115, 116, 105, 110, 103, 46,\n      69, 99, 104, 111, 83, 116, 97, 116, 117, 115, 18, 50,\n      10, 17, 101, 120, 112, 101, 99, 116, 95, 99, 111, 109,\n      112, 114, 101, 115, 115, 101, 100, 24, 8, 32, 1, 40, 11,\n      50, 23, 46, 103, 114, 112, 99, 46, 116, 101, 115, 116,\n      105, 110, 103, 46, 66, 111, 111, 108, 86, 97, 108, 117,\n      101, 34, 95, 10, 14, 83, 105, 109, 112, 108, 101, 82,\n      101, 115, 112, 111, 110, 115, 101, 18, 38, 10, 7, 112,\n      97, 121, 108, 111, 97, 100, 24, 1, 32, 1, 40, 11, 50,\n      21, 46, 103, 114, 112, 99, 46, 116, 101, 115, 116, 105,\n      110, 103, 46, 80, 97, 121, 108, 111, 97, 100, 18, 16,\n      10, 8, 117, 115, 101, 114, 110, 97, 109, 101, 24, 2, 32,\n      1, 40, 9, 18, 19, 10, 11, 111, 97, 117, 116, 104, 95,\n      115, 99, 111, 112, 101, 24, 3, 32, 1, 40, 9, 34, 119,\n      10, 25, 83, 116, 114, 101, 97, 109, 105, 110, 103, 73,\n      110, 112, 117, 116, 67, 97, 108, 108, 82, 101, 113, 117,\n      101, 115, 116, 18, 38, 10, 7, 112, 97, 121, 108, 111,\n      97, 100, 24, 1, 32, 1, 40, 11, 50, 21, 46, 103, 114,\n      112, 99, 46, 116, 101, 115, 116, 105, 110, 103, 46, 80,\n      97, 121, 108, 111, 97, 100, 18, 50, 10, 17, 101, 120,\n      112, 101, 99, 116, 95, 99, 111, 109, 112, 114, 101, 115,\n      115, 101, 100, 24, 2, 32, 1, 40, 11, 50, 23, 46, 103,\n      114, 112, 99, 46, 116, 101, 115, 116, 105, 110, 103, 46,\n      66, 111, 111, 108, 86, 97, 108, 117, 101, 34, 61, 10,\n      26, 83, 116, 114, 101, 97, 109, 105, 110, 103, 73, 110,\n      112, 117, 116, 67, 97, 108, 108, 82, 101, 115, 112, 111,\n      110, 115, 101, 18, 31, 10, 23, 97, 103, 103, 114, 101,\n      103, 97, 116, 101, 100, 95, 112, 97, 121, 108, 111, 97,\n      100, 95, 115, 105, 122, 101, 24, 1, 32, 1, 40, 5, 34,\n      232, 1, 10, 26, 83, 116, 114, 101, 97, 109, 105, 110,\n      103, 79, 117, 116, 112, 117, 116, 67, 97, 108, 108, 82,\n      101, 113, 117, 101, 115, 116, 18, 48, 10, 13, 114, 101,\n      115, 112, 111, 110, 115, 101, 95, 116, 121, 112, 101,\n      24, 1, 32, 1, 40, 14, 50, 25, 46, 103, 114, 112, 99, 46,\n      116, 101, 115, 116, 105, 110, 103, 46, 80, 97, 121, 108,\n      111, 97, 100, 84, 121, 112, 101, 18, 61, 10, 19, 114,\n      101, 115, 112, 111, 110, 115, 101, 95, 112, 97, 114, 97,\n      109, 101, 116, 101, 114, 115, 24, 2, 32, 3, 40, 11, 50,\n      32, 46, 103, 114, 112, 99, 46, 116, 101, 115, 116, 105,\n      110, 103, 46, 82, 101, 115, 112, 111, 110, 115, 101, 80,\n      97, 114, 97, 109, 101, 116, 101, 114, 115, 18, 38, 10,\n      7, 112, 97, 121, 108, 111, 97, 100, 24, 3, 32, 1, 40,\n      11, 50, 21, 46, 103, 114, 112, 99, 46, 116, 101, 115,\n      116, 105, 110, 103, 46, 80, 97, 121, 108, 111, 97, 100,\n      18, 49, 10, 15, 114, 101, 115, 112, 111, 110, 115, 101,\n      95, 115, 116, 97, 116, 117, 115, 24, 7, 32, 1, 40, 11,\n      50, 24, 46, 103, 114, 112, 99, 46, 116, 101, 115, 116,\n      105, 110, 103, 46, 69, 99, 104, 111, 83, 116, 97, 116,\n      117, 115, 34, 69, 10, 27, 83, 116, 114, 101, 97, 109,\n      105, 110, 103, 79, 117, 116, 112, 117, 116, 67, 97, 108,\n      108, 82, 101, 115, 112, 111, 110, 115, 101, 18, 38, 10,\n      7, 112, 97, 121, 108, 111, 97, 100, 24, 1, 32, 1, 40,\n      11, 50, 21, 46, 103, 114, 112, 99, 46, 116, 101, 115,\n      116, 105, 110, 103, 46, 80, 97, 121, 108, 111, 97, 100,\n      42, 31, 10, 11, 80, 97, 121, 108, 111, 97, 100, 84, 121,\n      112, 101, 18, 16, 10, 12, 67, 79, 77, 80, 82, 69, 83,\n      83, 65, 66, 76, 69, 16, 0, 98, 6, 112, 114, 111, 116,\n      111, 51>>;\ndescriptor(X) -> error({gpb_error, {badname, X}}).\n\n\ngpb_version_as_string() ->\n    \"4.7.1\".\n\ngpb_version_as_list() ->\n    [4,7,1].\n"
  },
  {
    "path": "interop/test/grpcbox_interop_client_SUITE.erl",
    "content": "-module(grpcbox_interop_client_SUITE).\n\n-compile([export_all]).\n\n-include_lib(\"eunit/include/eunit.hrl\").\n-include_lib(\"common_test/include/ct.hrl\").\n-include(\"grpcbox_interop_tests.hrl\").\n\n-include(\"grpcbox.hrl\").\n\n-define(REQ_SIZES, [27182, 8, 1828, 45904]).\n-define(RESP_SIZES, [31415, 9, 2653, 58979]).\n\nall() ->\n    [{group, identity},\n     {group, gzip}\n    ].\n\ngroups() ->\n    Cases = [empty_unary, large_unary, client_streaming, server_streaming,\n             ping_pong, empty_stream, status_code_and_message, custom_metadata,\n             unimplemented_method, unimplemented_service\n            ],\n    [{identity, Cases},\n     {gzip, Cases}\n    ].\n\ninit_per_group(Encoding, Config) ->\n    application:load(grpcbox),\n    application:set_env(grpcbox, client, #{channels => [{default_channel, [{http, \"localhost\", 8080, []}],\n                                                         #{encoding => Encoding}}]}),\n    {ok, _} = application:ensure_all_started(grpcbox),\n    Config.\n\nend_per_group(_Encoding, _Config) ->\n    application:stop(grpcbox),\n    ok.\n\nempty_unary(_Config) ->\n    ?assertMatch({ok, _, _}, grpc_testing_test_service_client:empty_call(ctx:new(), #{})).\n\nlarge_unary(_Config) ->\n    Payload = client_payload(271828),\n    SimpleRequest = #{payload => Payload},\n    ?assertMatch({ok, _, _}, grpc_testing_test_service_client:unary_call(ctx:new(), SimpleRequest)).\n\nclient_streaming(_Config) ->\n    TotalSize = lists:sum(?REQ_SIZES),\n\n    {ok, S} = grpc_testing_test_service_client:streaming_input_call(ctx:new()),\n    lists:foreach(fun(Size) ->\n                          ReqPayload = client_payload(Size),\n                          ok = grpcbox_client:send(S, #{payload => ReqPayload})\n                  end, ?REQ_SIZES),\n\n    %% server returns the total aggregated payload size\n    ?assertMatch({ok, #{aggregated_payload_size := TotalSize}}, grpcbox_client:close_and_recv(S)).\n\nserver_streaming(_Config) ->\n    RespSizes = [31415, 9, 2653, 58979],\n    Payload = #{response_parameters => [#{size => S} || S <- RespSizes]},\n    {ok, S} = grpc_testing_test_service_client:streaming_output_call(ctx:new(), Payload),\n\n    lists:foreach(fun(Size) ->\n                          {ok, #{payload := #{body := Body1}}} = grpcbox_client:recv_data(S),\n                          ?assertMatch(Size, erlang:byte_size(Body1))\n                  end, RespSizes).\n\nping_pong(_Config) ->\n    Sizes = lists:zip(?REQ_SIZES, ?RESP_SIZES),\n    {ok, S} = grpc_testing_test_service_client:full_duplex_call(ctx:new()),\n    lists:foreach(fun({ReqSize, RespSize}) ->\n                          Payload = client_payload(ReqSize),\n                          Req = #{response_parameters => [#{size => RespSize}],\n                                  payload => Payload},\n                          ok = grpcbox_client:send(S, Req),\n\n                          {ok, #{payload := #{body := Body1}}} = grpcbox_client:recv_data(S),\n                          ?assertMatch(RespSize, erlang:byte_size(Body1))\n                  end, Sizes).\n\nempty_stream(_Config) ->\n    {ok, S} = grpc_testing_test_service_client:full_duplex_call(ctx:new()),\n    ok = grpcbox_client:close_send(S),\n    ?assertMatch(stream_finished, grpcbox_client:recv_data(S)).\n\nstatus_code_and_message(_Config) ->\n    Msg = <<\"test status message\">>,\n    RespStatus = #{code => 2,\n                   message => Msg},\n    Req = #{response_status => RespStatus},\n\n    ?assertMatch({error, {<<\"2\">>, Msg}, _}, grpc_testing_test_service_client:unary_call(ctx:new(), Req)).\n\ncustom_metadata(_Config) ->\n    Payload = client_payload(1),\n    SimpleRequest = #{response_size => 1,\n                      payload => Payload},\n\n    Metadata = grpcbox_metadata:pairs([{?INITIAL_METADATA_KEY, ?INITIAL_METADATA_VALUE},\n                                       {?TRAILING_METADATA_KEY, ?TRAILING_METADATA_VALUE}]),\n    Ctx = grpcbox_metadata:append_to_outgoing_ctx(ctx:new(), Metadata),\n    {ok, _, #{headers := Headers,\n              trailers := Trailers}} = grpc_testing_test_service_client:unary_call(Ctx, SimpleRequest),\n\n    ?assertEqual(?INITIAL_METADATA_VALUE, maps:get(?INITIAL_METADATA_KEY, Headers)),\n    ?assertEqual(?TRAILING_METADATA_VALUE, maps:get(?TRAILING_METADATA_KEY, Trailers)),\n\n    %% test also with full duplex\n\n    {ok, S} = grpc_testing_test_service_client:full_duplex_call(Ctx),\n    Req = #{response_parameters => [#{size => 1}],\n            payload => Payload},\n    ok = grpcbox_client:send(S, Req),\n\n    {ok, #{payload := #{body := Body1}}} = grpcbox_client:recv_data(S),\n    ?assertMatch(1, erlang:byte_size(Body1)),\n\n    grpcbox_client:close_send(S),\n    {ok, Headers1} = grpcbox_client:recv_headers(S),\n    {ok, {_, _, Trailers1}} = grpcbox_client:recv_trailers(S),\n    ?assertEqual(?INITIAL_METADATA_VALUE, maps:get(?INITIAL_METADATA_KEY, Headers1)),\n    ?assertEqual(?TRAILING_METADATA_VALUE, maps:get(?TRAILING_METADATA_KEY, Trailers1)).\n\nunimplemented_method(_Config) ->\n    Def = #grpcbox_def{service = 'grpc.testing.TestService',\n                       marshal_fun = fun(I) -> test_pb:encode_msg(I, simple_request) end,\n                       unmarshal_fun = fun(I) -> test_pb:encode_msg(I, simple_response) end},\n    ?assertMatch({error, {?GRPC_STATUS_UNIMPLEMENTED, _}, _},\n                 grpcbox_client:unary(ctx:new(), <<\"/grpc.testing.TestService/NotReal\">>, #{}, Def, #{})).\n\nunimplemented_service(_Config) ->\n    Def = #grpcbox_def{service = 'grpc.testing.Unimplemented',\n                       marshal_fun = fun(I) -> test_pb:encode_msg(I, simple_request) end,\n                       unmarshal_fun = fun(I) -> test_pb:encode_msg(I, simple_response) end},\n    ?assertMatch({error, {?GRPC_STATUS_UNIMPLEMENTED, _}, _},\n                 grpcbox_client:unary(ctx:new(), <<\"/grpc.testing.Unimplemented/NotReal\">>, #{}, Def, #{})).\n\nclient_payload(NumBytes) ->\n    Body = << <<0:8>> || _ <- lists:seq(1, NumBytes)>>,\n    #{type => 0,\n      body => Body}.\n"
  },
  {
    "path": "proto/health.proto",
    "content": "// Copyright 2015 The gRPC Authors\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// The canonical version of this proto can be found at\n// https://github.com/grpc/grpc-proto/blob/master/grpc/health/v1/health.proto\n\nsyntax = \"proto3\";\n\npackage grpc.health.v1;\n\noption csharp_namespace = \"Grpc.Health.V1\";\noption go_package = \"google.golang.org/grpc/health/grpc_health_v1\";\noption java_multiple_files = true;\noption java_outer_classname = \"HealthProto\";\noption java_package = \"io.grpc.health.v1\";\n\nmessage HealthCheckRequest {\n  string service = 1;\n}\n\nmessage HealthCheckResponse {\n  enum ServingStatus {\n    UNKNOWN = 0;\n    SERVING = 1;\n    NOT_SERVING = 2;\n    SERVICE_UNKNOWN = 3;  // Used only by the Watch method.\n  }\n  ServingStatus status = 1;\n}\n\nservice Health {\n  // If the requested service is unknown, the call will fail with status\n  // NOT_FOUND.\n  rpc Check(HealthCheckRequest) returns (HealthCheckResponse);\n\n  // Performs a watch for the serving status of the requested service.\n  // The server will immediately send back a message indicating the current\n  // serving status.  It will then subsequently send a new message whenever\n  // the service's serving status changes.\n  //\n  // If the requested service is unknown when the call is received, the\n  // server will send a message setting the serving status to\n  // SERVICE_UNKNOWN but will *not* terminate the call.  If at some\n  // future point, the serving status of the service becomes known, the\n  // server will send a new message with the service's serving status.\n  //\n  // If the call terminates with status UNIMPLEMENTED, then clients\n  // should assume this method is not supported and should not retry the\n  // call.  If the call terminates with any other status (including OK),\n  // clients should retry the call with appropriate exponential backoff.\n  rpc Watch(HealthCheckRequest) returns (stream HealthCheckResponse);\n}\n"
  },
  {
    "path": "proto/reflection.proto",
    "content": "// Copyright 2016 gRPC authors.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\n// Service exported by server reflection\n\nsyntax = \"proto3\";\n\npackage grpc.reflection.v1alpha;\n\nservice ServerReflection {\n  // The reflection service is structured as a bidirectional stream, ensuring\n  // all related requests go to a single server.\n  rpc ServerReflectionInfo(stream ServerReflectionRequest)\n      returns (stream ServerReflectionResponse);\n}\n\n// The message sent by the client when calling ServerReflectionInfo method.\nmessage ServerReflectionRequest {\n  string host = 1;\n  // To use reflection service, the client should set one of the following\n  // fields in message_request. The server distinguishes requests by their\n  // defined field and then handles them using corresponding methods.\n  oneof message_request {\n    // Find a proto file by the file name.\n    string file_by_filename = 3;\n\n    // Find the proto file that declares the given fully-qualified symbol name.\n    // This field should be a fully-qualified symbol name\n    // (e.g. <package>.<service>[.<method>] or <package>.<type>).\n    string file_containing_symbol = 4;\n\n    // Find the proto file which defines an extension extending the given\n    // message type with the given field number.\n    ExtensionRequest file_containing_extension = 5;\n\n    // Finds the tag numbers used by all known extensions of the given message\n    // type, and appends them to ExtensionNumberResponse in an undefined order.\n    // Its corresponding method is best-effort: it's not guaranteed that the\n    // reflection service will implement this method, and it's not guaranteed\n    // that this method will provide all extensions. Returns\n    // StatusCode::UNIMPLEMENTED if it's not implemented.\n    // This field should be a fully-qualified type name. The format is\n    // <package>.<type>\n    string all_extension_numbers_of_type = 6;\n\n    // List the full names of registered services. The content will not be\n    // checked.\n    string list_services = 7;\n  }\n}\n\n// The type name and extension number sent by the client when requesting\n// file_containing_extension.\nmessage ExtensionRequest {\n  // Fully-qualified type name. The format should be <package>.<type>\n  string containing_type = 1;\n  int32 extension_number = 2;\n}\n\n// The message sent by the server to answer ServerReflectionInfo method.\nmessage ServerReflectionResponse {\n  string valid_host = 1;\n  ServerReflectionRequest original_request = 2;\n  // The server set one of the following fields according to the message_request\n  // in the request.\n  oneof message_response {\n    // This message is used to answer file_by_filename, file_containing_symbol,\n    // file_containing_extension requests with transitive dependencies. As\n    // the repeated label is not allowed in oneof fields, we use a\n    // FileDescriptorResponse message to encapsulate the repeated fields.\n    // The reflection service is allowed to avoid sending FileDescriptorProtos\n    // that were previously sent in response to earlier requests in the stream.\n    FileDescriptorResponse file_descriptor_response = 4;\n\n    // This message is used to answer all_extension_numbers_of_type request.\n    ExtensionNumberResponse all_extension_numbers_response = 5;\n\n    // This message is used to answer list_services request.\n    ListServiceResponse list_services_response = 6;\n\n    // This message is used when an error occurs.\n    ErrorResponse error_response = 7;\n  }\n}\n\n// Serialized FileDescriptorProto messages sent by the server answering\n// a file_by_filename, file_containing_symbol, or file_containing_extension\n// request.\nmessage FileDescriptorResponse {\n  // Serialized FileDescriptorProto messages. We avoid taking a dependency on\n  // descriptor.proto, which uses proto2 only features, by making them opaque\n  // bytes instead.\n  repeated bytes file_descriptor_proto = 1;\n}\n\n// A list of extension numbers sent by the server answering\n// all_extension_numbers_of_type request.\nmessage ExtensionNumberResponse {\n  // Full name of the base type, including the package name. The format\n  // is <package>.<type>\n  string base_type_name = 1;\n  repeated int32 extension_number = 2;\n}\n\n// A list of ServiceResponse sent by the server answering list_services request.\nmessage ListServiceResponse {\n  // The information of each service may be expanded in the future, so we use\n  // ServiceResponse message to encapsulate it.\n  repeated ServiceResponse service = 1;\n}\n\n// The information of a single service used by ListServiceResponse to answer\n// list_services request.\nmessage ServiceResponse {\n  // Full name of a registered service, including its package name. The format\n  // is <package>.<service>\n  string name = 1;\n}\n\n// The error code and error message sent by the server when an error occurs.\nmessage ErrorResponse {\n  // This field uses the error codes defined in grpc::StatusCode.\n  int32 error_code = 1;\n  string error_message = 2;\n}\n"
  },
  {
    "path": "rebar.config",
    "content": "{erl_opts, [debug_info]}.\n\n{deps, [{chatterbox, {pkg, ts_chatterbox}},\n        ctx,\n        acceptor_pool,\n        gproc]}.\n\n{grpc, [{protos, [\"proto\"]},\n        {service_modules, [{'grpc.health.v1.Health', \"grpcbox_health\"},\n                           {'grpc.reflection.v1alpha.ServerReflection', \"grpcbox_reflection\"}]},\n        {gpb_opts, [{descriptor, true},\n                    {module_name_prefix, \"grpcbox_\"},\n                    {module_name_suffix, \"_pb\"}]}]}.\n\n{profiles,\n [{test, [{erl_opts, [nowarn_export_all]},\n\n          {shell, [{config, \"config/test.config\"}]},\n\n          {grpc, [{protos, \"test/grpcbox_SUITE_data\"},\n                  {out_dir, \"test\"},\n                  {gpb_opts, [{o, \"test\"},\n                              {descriptor, true},\n                              {module_name_suffix, \"_pb\"}]}]},\n          {overrides, [{override, opencensus, [{erl_opts, []}]}]},\n          {deps, [opencensus, jsx]}]},\n\n  {interop, [{deps, [recon]},\n\n             {grpc, [{protos, \"interop/proto\"},\n                     {out_dir, \"interop/src\"},\n                     {gpb_opts, [{o, \"interop/src\"},\n                                 {descriptor, true},\n                                 {module_name_suffix, \"_pb\"}]}]},\n\n             {relx, [{release, {grpc_interop, \"0.1.0\"}, [grpcbox]},\n\n                     {sys_config, \"interop/config/sys.config\"}]},\n\n             {erl_opts, [{i, \"interop/include\"}]},\n\n             %% use src_dirs so the modules are in the release for testing\n             {src_dirs, [\"src\", \"interop\"]},\n\n             {ct_opts, [{config, \"interop/config/sys.config\"},\n                        {dir, \"interop/test\"}]},\n\n             {shell, [{apps, [grpcbox]},\n                      {config, \"interop/config/sys.config\"}]}]},\n\n  {benchmark, [{grpc, [{protos, \"benchmark/proto\"},\n                       {out_dir, \"benchmark/src\"},\n                       {gpb_opts, [{o, \"benchmark/src\"},\n                                   {descriptor, true},\n                                   {module_name_suffix, \"_pb\"}]}]},\n\n             {extra_src_dirs, [\"benchmark\"]},\n\n             {ct_opts, [{config, \"benchmark/config/test.config\"},\n                        {dir, \"benchmark/test\"}]},\n\n             {shell, [{apps, [grpcbox]},\n                      {config, \"benchmark/config/sys.config\"}]}]}\n]}.\n\n{shell, [{apps, [grpcbox]}]}.\n\n{xref_checks, [undefined_function_calls, undefined_functions,\n               deprecated_function_calls, deprecated_functions]}.\n\n{project_plugins, [covertool,\n                   {grpcbox_plugin, \"~> 0.9.0\"},\n                   rebar3_lint]}.\n\n{cover_enabled, true}.\n{cover_opts, [verbose]}.\n{cover_export_enabled, true}.\n{covertool, [{coverdata_files, [\"ct.coverdata\"]}]}.\n\n%% create junit xml for circleci\n{ct_opts, [{ct_hooks, [cth_surefire]}]}.\n\n{dialyzer, [{warnings, [no_unknown]}]}.\n"
  },
  {
    "path": "src/grpcbox.app.src",
    "content": "{application, grpcbox,\n [{description,\"Erlang grpc library based on chatterbox\"},\n  {vsn,\"git\"},\n  {registered,[]},\n  {mod,{grpcbox_app,[]}},\n  {applications,[kernel,\n                 stdlib,\n                 chatterbox,\n                 acceptor_pool,\n                 gproc,\n                 ctx]},\n  {env, [{client, #{channels => [%% {default_channel, [{http, \"localhost\", 8080, []}], #{}}\n                                ]}},\n\n         {grpc_opts, #{service_protos => [],\n                       client_cert_dir => \"\"}},\n\n         {transport_opts, #{ssl => false,\n                            keyfile => \"\",\n                            certfile => \"\",\n                            cacertfile => \"\"}},\n\n         {listen_opts, #{port => 8080,\n                         ip => {0,0,0,0}}},\n\n         %% server acceptors\n         {pool_opts, #{size => 10}},\n\n         %% chatterbox options\n         {server_opts, #{header_table_size => 4096,\n                         enable_push => 1,\n                         max_concurrent_streams => unlimited,\n                         initial_window_size => 65535,\n                         max_frame_size => 16384,\n                         max_header_list_size => unlimited}}]},\n  {modules,[]},\n  {licenses,[\"Apache 2.0\"]},\n  {links,[{\"Github\",\"https://github.com/tsloughter/grpcbox\"}]}]}.\n"
  },
  {
    "path": "src/grpcbox.erl",
    "content": "%%%-------------------------------------------------------------------\n%% @doc grpc client\n%% @end\n%%%-------------------------------------------------------------------\n\n-module(grpcbox).\n\n-export([start_server/1,\n         server_child_spec/5]).\n\n-include_lib(\"chatterbox/include/http2.hrl\").\n\n-type encoding() :: identity | gzip | deflate | snappy | atom().\n-type metadata() :: #{headers := grpcbox_metadata:t(),\n                      trailers := grpcbox_metadata:t()}.\n\n-type server_opts() :: #{server_opts => settings(), %% TODO: change this in chatterbox to be under a module\n                         grpc_opts => #{service_protos := [module()]},\n                         listen_opts => #{port => inet:port_number(),\n                                          ip => inet:ip_address(),\n                                          socket_options => [gen_tcp:option()]},\n                         pool_opts => #{size => integer()},\n                         transport_opts => #{ssl => boolean(),\n                                             keyfile => file:filename_all(),\n                                             certfile => file:filename_all(),\n                                             cacertfile => file:filename_all()}}.\n\n-export_type([metadata/0,\n              server_opts/0,\n              encoding/0]).\n\n-spec start_server(server_opts()) -> supervisor:startchild_ret().\nstart_server(Opts) ->\n    grpcbox_services_simple_sup:start_child(Opts).\n\nserver_child_spec(ServerOpts, GrpcOpts, ListenOpts, PoolOpts, TransportOpts) ->\n    #{id => grpcbox_services_sup,\n      start => {grpcbox_services_sup, start_link, [ServerOpts, GrpcOpts, ListenOpts,\n                                                   PoolOpts, TransportOpts]},\n      type => supervisor,\n      restart => permanent,\n      shutdown => 1000}.\n"
  },
  {
    "path": "src/grpcbox_acceptor.erl",
    "content": "-module(grpcbox_acceptor).\n\n-behaviour(acceptor).\n\n-export([acceptor_init/3,\n         acceptor_continue/3,\n         acceptor_terminate/2]).\n\nacceptor_init(_, LSocket, {Transport, ServerOpts, ChatterboxOpts, SslOpts}) ->\n    % monitor listen socket to gracefully close when it closes\n    MRef = monitor(port, LSocket),\n    {ok, {Transport, MRef, ServerOpts, ChatterboxOpts, SslOpts}}.\n\nacceptor_continue(_PeerName, Socket, {ssl, _MRef, ServerOpts, ChatterboxOpts, SslOpts}) ->\n    {ok, AcceptSocket} = ssl:handshake(Socket, SslOpts),\n    case ssl:negotiated_protocol(AcceptSocket) of\n        {ok, <<\"h2\">>} ->\n            h2_connection:become({ssl, AcceptSocket}, ServerOpts, ChatterboxOpts);\n        _ ->\n            exit(bad_negotiated_protocol)\n    end;\nacceptor_continue(_PeerName, Socket, {gen_tcp, _MRef, ServerOpts, ChatterboxOpts, _SslOpts}) ->\n    h2_connection:become({gen_tcp, Socket}, ServerOpts, ChatterboxOpts).\n\nacceptor_terminate(Reason, _) ->\n    % Something went wrong. Either the acceptor_pool is terminating or the\n    % accept failed.\n    exit(Reason).\n"
  },
  {
    "path": "src/grpcbox_app.erl",
    "content": "%%%-------------------------------------------------------------------\n%% @doc grpcbox public API\n%% @end\n%%%-------------------------------------------------------------------\n\n-module(grpcbox_app).\n\n-behaviour(application).\n\n-export([start/2, stop/1]).\n\n-include(\"grpcbox.hrl\").\n\nstart(_StartType, _StartArgs) ->\n    {ok, Pid} = grpcbox_sup:start_link(),\n    case application:get_env(grpcbox, client) of\n        {ok, #{channels := Channels}} ->\n            [grpcbox_channel_sup:start_child(Name, Endpoints, Options)\n             || {Name, Endpoints, Options} <- Channels];\n        _ ->\n            ok\n    end,\n\n    ServerOpts = application:get_env(grpcbox, servers, []),\n    maybe_start_server(ServerOpts),\n\n    {ok, Pid}.\n\nstop(_State) ->\n    ok.\n\n%%\n\nmaybe_start_server([]) ->\n    ok;\nmaybe_start_server([ServerOpts | Tail]) ->\n    grpcbox_services_simple_sup:start_child(ServerOpts),\n    maybe_start_server(Tail).\n"
  },
  {
    "path": "src/grpcbox_chain_interceptor.erl",
    "content": "-module(grpcbox_chain_interceptor).\n\n-export([stream_chain/1,\n         unary_client/1,\n         new_stream_client/1,\n         send_client/1,\n         recv_client/1,\n         unary/1,\n         stream/1]).\n\nstream_chain(L) ->\n    #{new_stream => new_stream_client(L),\n      send_msg => send_client(L),\n      recv_msg => recv_client(L)}.\n\nnew_stream_client([I]) ->\n    fun(Ctx, Channel, Path, Def, Handler, Options) ->\n            I:new_stream(Ctx, Channel, Path, Def, Handler, Options)\n    end;\nnew_stream_client([I | Rest]) ->\n    fun(Ctx, Channel, Path, Def, Handler, Options) ->\n            I:new_stream(Ctx, Channel, Path, Def, create_new_stream_fun(Rest, Handler), Options)\n    end.\n\ncreate_new_stream_fun([I], Handler) ->\n    fun(Ctx, Channel, Path, Def, Options) ->\n            I:new_stream(Ctx, Channel, Path, Def, Handler, Options)\n    end;\ncreate_new_stream_fun([I | Rest], Handler) ->\n    fun(Ctx, Channel, Path, Def, Options) ->\n            I:new_stream(Ctx, Channel, Path, Def, create_new_stream_fun(Rest, Handler), Options)\n    end.\n\nsend_client([I]) ->\n    fun(Stream, Handler, Input) ->\n            I:send_msg(Stream, Handler, Input)\n    end;\nsend_client([I | Rest]) ->\n    fun(Stream, Handler, Input) ->\n            I:send_msg(Stream, create_send_fun(Rest, Handler), Input)\n    end.\n\ncreate_send_fun([I], Handler) ->\n    fun(Stream, Input) ->\n            I:send_msg(Stream, Handler, Input)\n    end;\ncreate_send_fun([I | Rest], Handler) ->\n    fun(Stream, Input) ->\n            I:send_msg(Stream, create_new_stream_fun(Rest, Handler), Input)\n    end.\n\nrecv_client([I]) ->\n    fun(Stream, Handler, Timeout) ->\n            I:recv_msg(Stream, Handler, Timeout)\n    end;\nrecv_client([I | Rest]) ->\n    fun(Stream, Handler, Timeout) ->\n            I:recv_msg(Stream, create_recv_fun(Rest, Handler), Timeout)\n    end.\n\ncreate_recv_fun([I], Handler) ->\n    fun(Stream, Timeout) ->\n            I:recv_msg(Stream, Handler, Timeout)\n    end;\ncreate_recv_fun([I | Rest], Handler) ->\n    fun(Stream, Timeout) ->\n            I:recv_msg(Stream, create_new_stream_fun(Rest, Handler), Timeout)\n    end.\n\nunary_client(InterceptorList) ->\n    create_client_interceptor_fun(InterceptorList).\n\ncreate_client_interceptor_fun([I]) ->\n    fun(Ctx, Channel, Handler, Path, Input, Def, Options) ->\n            I(Ctx, Channel, Handler, Path, Input, Def, Options)\n    end;\ncreate_client_interceptor_fun([I | Rest]) ->\n    fun(Ctx, Channel, Handler, Path, Input, Def, Options) ->\n            I(Ctx, Channel, create_client_handler_fun(Rest, Channel, Handler, Path, Def, Options),\n              Path, Input, Def, Options)\n    end.\n\ncreate_client_handler_fun([I], Channel, Handler, Path, Def, Options) ->\n    fun(Ctx, Input) ->\n            I(Ctx, Channel, Handler, Path, Input, Def, Options)\n    end;\ncreate_client_handler_fun([I | Rest], Channel, Handler, Path, Def, Options) ->\n    fun(Ctx, Input) ->\n            I(Ctx, Channel, create_client_handler_fun(Rest, Channel, Handler, Path, Def, Options),\n              Path, Input, Def, Options)\n    end.\n\nunary(InterceptorList) ->\n    create_interceptor_fun(InterceptorList).\n\n%% right now stream and unary have the same arity and ServerInfo argument so we build them the same\n%% this may change in the future\nstream(InterceptorList) ->\n    create_interceptor_fun(InterceptorList).\n\n%% the chain interceptor creates an interceptor which for the handler receives a fun/2 that\n%% calls the next interceptor, which has a handler fun/2 that has the interceptor after that,\n%% and so on until the last which has the service method handler as usual.\n\ncreate_interceptor_fun([I]) ->\n    fun(Arg1, Arg2, ServerInfo, Handler) ->\n            I(Arg1, Arg2, ServerInfo, Handler)\n    end;\ncreate_interceptor_fun([I | Rest]) ->\n    fun(Arg1, Arg2, ServerInfo, Handler) ->\n            I(Arg1, Arg2, ServerInfo, create_handler_fun(Rest, ServerInfo, Handler))\n    end.\n\ncreate_handler_fun([I], ServerInfo, Handler) ->\n    fun(Arg1, Arg2) ->\n            I(Arg1, Arg2, ServerInfo, Handler)\n    end;\ncreate_handler_fun([I | Rest], ServerInfo, Handler) ->\n    fun(Arg1, Arg2) ->\n            I(Arg1, Arg2, ServerInfo, create_handler_fun(Rest, ServerInfo, Handler))\n    end.\n"
  },
  {
    "path": "src/grpcbox_channel.erl",
    "content": "-module(grpcbox_channel).\n\n-behaviour(gen_statem).\n\n-export([start_link/3,\n         is_ready/1,\n         pick/2,\n         stop/1,\n         stop/2]).\n-export([init/1,\n         callback_mode/0,\n         terminate/3,\n         connected/3,\n         idle/3]).\n\n-include(\"grpcbox.hrl\").\n\n-define(CHANNEL(Name), {via, gproc, {n, l, {?MODULE, Name}}}).\n\n-type t() :: any().\n-type name() :: t().\n-type transport() :: http | https.\n-type host() :: inet:ip_address() | inet:hostname().\n-type connection_settings() :: map().\n-type endpoint() :: {transport(), host(), inet:port_number(), [ssl:ssl_options()]} |\n                    {transport(), host(), inet:port_number(), [ssl:ssl_options()], connection_settings()}.\n\n-type options() :: #{balancer => load_balancer(),\n                     encoding => gprcbox:encoding(),\n                     unary_interceptor => grpcbox_client:unary_interceptor(),\n                     stream_interceptor => grpcbox_client:stream_interceptor(),\n                     stats_handler => module(),\n                     sync_start => boolean()}.\n-type load_balancer() :: round_robin | random | hash | direct | claim.\n-export_type([t/0,\n              name/0,\n              options/0,\n              endpoint/0]).\n\n-record(data, {endpoints :: [endpoint()],\n               pool :: atom(),\n               resolver :: module(),\n               balancer :: grpcbox:balancer(),\n               encoding :: grpcbox:encoding(),\n               interceptors :: #{unary_interceptor => grpcbox_client:unary_interceptor(),\n                                 stream_interceptor => grpcbox_client:stream_interceptor()}\n                             | undefined,\n               stats_handler :: module() | undefined,\n               refresh_interval :: timer:time()}).\n\n-spec start_link(name(), [endpoint()], options()) -> {ok, pid()} | ignore | {error, term()}.\nstart_link(Name, Endpoints, Options) ->\n    gen_statem:start_link(?CHANNEL(Name), ?MODULE, [Name, Endpoints, Options], []).\n\n-spec is_ready(name()) -> boolean().\nis_ready(Name) ->\n    gen_statem:call(?CHANNEL(Name), is_ready).\n\n%% @doc Picks a subchannel from a pool using the configured strategy.\n-spec pick(name(), unary | stream) -> {ok, {pid(), grpcbox_client:interceptor() | undefined}} |\n                                   {error, undefined_channel | no_endpoints}.\npick(Name, CallType) ->\n    try\n        case gproc_pool:pick_worker(Name) of\n            false -> {error, no_endpoints};\n            Pid when is_pid(Pid) ->\n                {ok, {Pid, interceptor(Name, CallType)}}\n        end\n    catch\n        error:badarg ->\n            {error, undefined_channel}\n    end.\n\n-spec interceptor(name(), unary | stream) -> grpcbox_client:interceptor() | undefined.\ninterceptor(Name, CallType) ->\n    case ets:lookup(?CHANNELS_TAB, {Name, CallType}) of\n        [] ->\n            undefined;\n        [{_, I}] ->\n            I\n    end.\n\nstop(Name) ->\n    stop(Name, {shutdown, force_delete}).\nstop(Name, Reason) ->\n    gen_statem:stop(?CHANNEL(Name), Reason, infinity).\n\ninit([Name, Endpoints, Options]) ->\n    process_flag(trap_exit, true),\n\n    Endpoints1 = normalize_endpoints(Endpoints),\n\n    BalancerType = maps:get(balancer, Options, round_robin),\n    Encoding = maps:get(encoding, Options, identity),\n    StatsHandler = maps:get(stats_handler, Options, undefined),\n\n    insert_interceptors(Name, Options),\n\n    gproc_pool:new(Name, BalancerType, [{size, length(Endpoints)},\n                                        {auto_size, true}]),\n    Data = #data{\n        pool = Name,\n        encoding = Encoding,\n        stats_handler = StatsHandler,\n        endpoints = Endpoints1\n    },\n\n    case maps:get(sync_start, Options, false) of\n        false ->\n            {ok, idle, Data, [{next_event, internal, connect}]};\n        true ->\n            _ = start_workers(Name, StatsHandler, Encoding, Endpoints1),\n            {ok, connected, Data}\n    end.\n\ncallback_mode() ->\n    state_functions.\n\nconnected({call, From}, is_ready, _Data) ->\n    {keep_state_and_data, [{reply, From, true}]};\nconnected(EventType, EventContent, Data) ->\n    handle_event(EventType, EventContent, Data).\n\nidle(internal, connect, Data=#data{pool=Pool,\n                                   stats_handler=StatsHandler,\n                                   encoding=Encoding,\n                                   endpoints=Endpoints}) ->\n    _ = start_workers(Pool, StatsHandler, Encoding, Endpoints),\n    {next_state, connected, Data};\nidle({call, From}, is_ready, _Data) ->\n    {keep_state_and_data, [{reply, From, false}]};\nidle(EventType, EventContent, Data) ->\n    handle_event(EventType, EventContent, Data).\n\nhandle_event(_, _, Data) ->\n    {keep_state, Data}.\n\nterminate({shutdown, force_delete}, _State, #data{pool=Name}) ->\n    gproc_pool:force_delete(Name);\nterminate(Reason, _State, #data{pool=Name}) ->\n    [grpcbox_subchannel:stop(Pid, Reason) || {_Channel, Pid} <- gproc_pool:active_workers(Name)],\n    gproc_pool:delete(Name),\n    ok.\n\ninsert_interceptors(Name, Interceptors) ->\n    insert_unary_interceptor(Name, Interceptors),\n    insert_stream_interceptor(Name, stream_interceptor, Interceptors).\n\ninsert_unary_interceptor(Name, Interceptors) ->\n    case maps:get(unary_interceptor, Interceptors, undefined) of\n        undefined ->\n            ok;\n        {Interceptor, Arg} ->\n            ets:insert(?CHANNELS_TAB, {{Name, unary}, Interceptor(Arg)});\n        Interceptor ->\n            ets:insert(?CHANNELS_TAB, {{Name, unary}, Interceptor})\n    end.\n\ninsert_stream_interceptor(Name, _Type, Interceptors) ->\n    case maps:get(stream_interceptor, Interceptors, undefined) of\n        undefined ->\n            ok;\n        {Interceptor, Arg} ->\n            ets:insert(?CHANNELS_TAB, {{Name, stream}, Interceptor(Arg)});\n        Interceptor when is_atom(Interceptor) ->\n            ets:insert(?CHANNELS_TAB, {{Name, stream}, #{new_stream => fun Interceptor:new_stream/6,\n                                                         send_msg => fun Interceptor:send_msg/3,\n                                                         recv_msg => fun Interceptor:recv_msg/3}});\n        Interceptor=#{new_stream := _,\n                      send_msg := _,\n                      recv_msg := _} ->\n            ets:insert(?CHANNELS_TAB, {{Name, stream}, Interceptor})\n    end.\n\nstart_workers(Pool, StatsHandler, Encoding, Endpoints) ->\n    [begin\n         gproc_pool:add_worker(Pool, Endpoint),\n         {ok, Pid} = grpcbox_subchannel:start_link(Endpoint, Pool, {Transport, Host, Port, SSLOptions, ConnectionSettings},\n                                                   Encoding, StatsHandler),\n         Pid\n     end || Endpoint={Transport, Host, Port, SSLOptions, ConnectionSettings} <- Endpoints].\n\n%% add the chatterbox connection settings map to the endpoint if it isn't there already\nnormalize_endpoints(Endpoints) ->\n    lists:map(fun({Transport, Host, Port, SSLOptions}) ->\n                      {Transport, Host, Port, SSLOptions, #{}};\n                 ({Transport, Host, Port, SSLOptions, ConnectionSettings}) ->\n                      {Transport, Host, Port, SSLOptions, ConnectionSettings}\n              end, Endpoints).\n"
  },
  {
    "path": "src/grpcbox_channel_sup.erl",
    "content": "%%%-------------------------------------------------------------------\n%% @doc grpcbox client connection supervisor.\n%% @end\n%%%-------------------------------------------------------------------\n\n-module(grpcbox_channel_sup).\n\n-behaviour(supervisor).\n\n-export([start_link/0,\n         channel_spec/3,\n         start_child/3]).\n-export([init/1]).\n\n-include(\"grpcbox.hrl\").\n\n-define(SERVER, ?MODULE).\n\nstart_link() ->\n    supervisor:start_link({local, ?SERVER}, ?MODULE, []).\n\n%% @doc Start a channel under the grpcbox channel supervisor.\n-spec start_child(grpcbox_channel:name(), [grpcbox_channel:endpoint()], grpcbox_channel:options()) -> supervisor:startchild_ret().\nstart_child(Name, Endpoints, Options) ->\n    supervisor:start_child(?SERVER, [Name, Endpoints, Options]).\n\n%% @doc Create a default child spec for starting a channel\n-spec channel_spec(grpcbox_channel:name(), [grpcbox_channel:endpoint()], grpcbox_channel:options()) -> supervisor:child_spec().\nchannel_spec(Name, Endpoints, Options) ->\n    #{id => grpcbox_channel,\n      start => {grpcbox_channel, start_link, [Name, Endpoints, Options]},\n      type => worker}.\n\ninit(_Args) ->\n    ets:new(?CHANNELS_TAB, [named_table, set, public, {read_concurrency, true}]),\n\n    SupFlags = #{strategy => simple_one_for_one,\n                 intensity => 5,\n                 period => 10},\n    ChildSpecs = [#{id => grpcbox_channel,\n                    start => {grpcbox_channel, start_link, []},\n                    type => worker,\n                    restart => transient,\n                    shutdown => 1000}\n                 ],\n    {ok, {SupFlags, ChildSpecs}}.\n"
  },
  {
    "path": "src/grpcbox_client.erl",
    "content": "%%%-------------------------------------------------------------------\n%% @doc grpc client\n%% @end\n%%%-------------------------------------------------------------------\n\n-module(grpcbox_client).\n\n-export([unary/6,\n         unary/5,\n         stream/4,\n         stream/5,\n\n         send/2,\n         recv_headers/1,\n         recv_headers/2,\n         recv_data/1,\n         recv_data/2,\n         recv_trailers/1,\n         recv_trailers/2,\n\n         close_and_recv/1,\n         close_send/1]).\n\n-include_lib(\"chatterbox/include/http2.hrl\").\n-include(\"grpcbox.hrl\").\n\n-type options() :: #{channel => grpcbox_channel:t(),\n                     encoding => grpcbox:encoding(),\n                     atom() => any()}.\n\n-type unary_interceptor() :: term().\n-type stream_interceptor() :: term().\n-type interceptor() :: unary_interceptor() | stream_interceptor().\n\n-type stream() :: #{channel => pid(),\n                    stream_id => stream_id(),\n                    stream_pid => pid(),\n                    monitor_ref => reference(),\n                    service_def => #grpcbox_def{},\n                    encoding => grpcbox:encoding()}.\n\n-export_type([stream/0,\n              options/0,\n              unary_interceptor/0,\n              stream_interceptor/0,\n              interceptor/0]).\n\nget_channel(Options, Type) ->\n    Channel = maps:get(channel, Options, default_channel),\n    grpcbox_channel:pick(Channel, Type).\n\nunary(Ctx, Service, Method, Input, Def, Options) ->\n    unary(Ctx, filename:join([<<>>, Service, Method]), Input, Def, Options).\n\nunary(Ctx, Path, Input, Def, Options) ->\n    case get_channel(Options, unary) of\n        {ok, {Channel, Interceptor}} ->\n            Handler = fun(Ctx1, Input1) ->\n                              unary_handler(Ctx1, Channel, Path, Input1, Def, Options)\n                      end,\n\n            case Interceptor of\n                undefined ->\n                    Handler(Ctx, Input);\n                _ ->\n                    Interceptor(Ctx, Channel, Handler, Path, Input, Def, Options)\n            end;\n        {error, _Reason}=Error ->\n            Error\n    end.\n\nunary_handler(Ctx, Channel, Path, Input, Def, Options) ->\n    try\n        case grpcbox_client_stream:send_request(Ctx, Channel, Path, Input, Def, Options) of\n            {ok, _Conn, Stream, Pid} ->\n                Ref = erlang:monitor(process, Pid),\n                S = #{channel => Channel,\n                      stream_id => Stream,\n                      stream_pid => Pid,\n                      monitor_ref => Ref,\n                      service_def => Def},\n                case recv_end(S, grpcbox_utils:get_timeout_from_ctx(Ctx, 5000)) of\n                    eos ->\n                        case recv_headers(S, 0) of\n                            {ok, Headers} ->\n                                case recv_trailers(S) of\n                                    {ok, {<<\"0\">>, _, Metadata}} ->\n                                        case recv_data(S, 0) of\n                                            {ok, Data} ->\n                                                {ok, Data, #{headers => Headers,\n                                                             trailers => Metadata}};\n                                            stream_finished ->\n                                                {ok, <<>>, #{headers => Headers,\n                                                             trailers => Metadata}}\n                                        end;\n                                    {ok, {Status, Message, Trailers}} ->\n                                        {error, {Status, Message}, #{headers => Headers,\n                                                                     trailers => Trailers}};\n                                    {error, _}=Error ->\n                                        Error\n                                end;\n                            {http_error, Status, Headers} ->\n                                %% different from an `error' in that it isn't from the grpc layer\n                                {http_error, {Status, <<>>}, #{headers => Headers,\n                                                               trailers => #{}}};\n                            {error, _}=Error ->\n                                Error\n                        end;\n                    {error, _}=Error ->\n                        Error\n                end;\n            {error, {shutdown, econnrefused}} ->\n                {error, econnrefused};\n            {error, _}=Error ->\n                Error\n        end\n    catch\n        error:{badmatch, {error, {shutdown,econnrefused}}} ->\n            {error, econnrefused};\n        throw:{error, _}=E ->\n            E\n    end.\n\n%% no input: bidrectional\nstream(Ctx, Path, Def, Options) ->\n    case get_channel(Options, stream) of\n        {ok, {Channel, Interceptor}} ->\n            case Interceptor of\n                undefined ->\n                    grpcbox_client_stream:new_stream(Ctx, Channel, Path, Def, Options);\n                #{new_stream := NewStream} ->\n                    case NewStream(Ctx, Channel, Path, Def, fun grpcbox_client_stream:new_stream/5, Options) of\n                        {ok, S} ->\n                            {ok, S#{stream_interceptor => Interceptor}};\n                        {error, _}=Error ->\n                            Error\n                    end;\n                _ ->\n                    grpcbox_client_stream:new_stream(Ctx, Channel, Path, Def, Options)\n            end;\n        {error, _Reason}=Error ->\n            Error\n    end.\n\nclose_and_recv(Stream) ->\n    close_send(Stream),\n    case recv_end(Stream, 5000) of\n        eos ->\n            recv_data(Stream, 0);\n        {error, _}=Error ->\n            Error\n    end.\n\nclose_send(#{channel := Conn,\n             stream_id := StreamId}) ->\n    ok = h2_connection:send_body(Conn, StreamId, <<>>, [{send_end_stream, true}]).\n    %% h2_connection:send_trailers(Conn, StreamId, [], [{send_end_stream, true}]).\n\nsend(Stream=#{stream_interceptor := #{send_msg := SendMsg}}, Input) ->\n    SendMsg(Stream, fun grpcbox_client_stream:send_msg/2, Input);\nsend(Stream, Input) ->\n    grpcbox_client_stream:send_msg(Stream, Input).\n\n%% input given, stream response\nstream(Ctx, Path, Input, Def, Options) ->\n    case get_channel(Options, stream) of\n        {ok, {Channel, _Interceptor}} ->\n            case\n                grpcbox_client_stream:send_request(Ctx, Channel, Path,\n                                                   Input, Def, Options)\n            of\n                {ok, Conn, Stream, Pid} ->\n                    Ref = erlang:monitor(process, Pid),\n                    {ok, #{channel => Conn,\n                        stream_id => Stream,\n                        stream_pid => Pid,\n                        monitor_ref => Ref,\n                        service_def => Def}};\n                {error, _Reason} = Error ->\n                    Error\n            end;\n        {error, _Reason} = Error ->\n            Error\n    end.\n\nrecv_data(Stream) ->\n    recv_data(Stream, 500).\nrecv_data(Stream=#{stream_interceptor := #{recv_msg := RecvMsg}}, Timeout) ->\n    RecvMsg(Stream, fun grpcbox_client_stream:recv_msg/2, Timeout);\nrecv_data(Stream, Timeout) ->\n    grpcbox_client_stream:recv_msg(Stream, Timeout).\n\nrecv_headers(S) ->\n    recv_headers(S, 500).\nrecv_headers(S, Timeout) ->\n    case recv(headers, S, Timeout) of\n        {ok, Headers} ->\n            case maps:get(<<\":status\">>, Headers, undefined) of\n                <<\"200\">> ->\n                    {ok, Headers};\n                ErrorStatus ->\n                    {http_error, ErrorStatus, Headers}\n            end;\n        {error, _Reason}=Error ->\n            Error\n    end.\n\n\nrecv_trailers(S) ->\n    recv_trailers(S, 500).\nrecv_trailers(S, Timeout) ->\n    recv(trailers, S, Timeout).\n\nrecv(Type, #{stream_id := Id,\n             monitor_ref := Ref,\n             stream_pid := Pid}, Timeout) ->\n    receive\n        {Type, Id, V} ->\n            {ok, V};\n        {'DOWN', Ref, process, Pid, _Reason} ->\n            receive\n                {trailers, Id, {Status, Message, Metadata}} ->\n                    {ok, {Status, Message, Metadata}}\n            after 0 ->\n                    {error, unknown}\n            end\n    after Timeout ->\n            {error, timeout}\n    end.\n\nrecv_end(#{stream_id := StreamId,\n            stream_pid := Pid,\n            monitor_ref := Ref}, Timeout) ->\n    receive\n        {eos, StreamId} ->\n            erlang:demonitor(Ref, [flush]),\n            receive\n                {'END_STREAM', StreamId} ->\n                    eos\n            after Timeout -> %% actually, this Timeout will never happen because of outer receive Timeout\n                {error, eos}\n            end;\n        {'DOWN', Ref, process, Pid, normal} ->\n            %% this is sent by h2_connection after the stream process has ended\n            receive\n                {'END_STREAM', StreamId} ->\n                    eos\n            after Timeout ->\n                {error, {stream_down, normal}}\n            end;\n        {'DOWN', Ref, process, Pid, Reason} ->\n            {error, {stream_down, Reason}}\n    after Timeout ->\n            {error, timeout}\n    end.\n\n"
  },
  {
    "path": "src/grpcbox_client_stream.erl",
    "content": "-module(grpcbox_client_stream).\n\n-export([new_stream/5,\n         send_request/6,\n         send_msg/2,\n         recv_msg/2,\n\n         init/3,\n         on_receive_headers/2,\n         on_receive_data/2,\n         on_end_stream/1,\n         handle_info/2]).\n\n-include(\"grpcbox.hrl\").\n\nnew_stream(Ctx, Channel, Path, Def=#grpcbox_def{service=Service,\n                                                message_type=MessageType,\n                                                marshal_fun=MarshalFun,\n                                                unmarshal_fun=UnMarshalFun}, Options) ->\n    case grpcbox_subchannel:conn(Channel, grpcbox_utils:get_timeout_from_ctx(Ctx, infinity)) of\n        {ok, Conn, #{scheme := Scheme,\n                     authority := Authority,\n                     encoding := DefaultEncoding,\n                     stats_handler := StatsHandler}} ->\n            Encoding = maps:get(encoding, Options, DefaultEncoding),\n            RequestHeaders = headers(Scheme, Authority, Path, encoding_to_binary(Encoding),\n                                      MessageType, metadata_headers(Ctx)),\n            case h2_connection:new_stream(Conn, ?MODULE, [#{service => Service,\n                                                            marshal_fun => MarshalFun,\n                                                            unmarshal_fun => UnMarshalFun,\n                                                            path => Path,\n                                                            buffer => <<>>,\n                                                            stats_handler => StatsHandler,\n                                                            stats => #{},\n                                                            client_pid => self()}], RequestHeaders, [], self()) of\n                {error, _Code} = Err ->\n                    Err;\n                {StreamId, Pid} ->\n                    Ref = erlang:monitor(process, Pid),\n                    {ok, #{channel => Conn,\n                           stream_id => StreamId,\n                           stream_pid => Pid,\n                           monitor_ref => Ref,\n                           service_def => Def,\n                           encoding => Encoding}}\n            end;\n        {error, _}=Error ->\n            Error\n    end.\n\nsend_request(Ctx, Channel, Path, Input, #grpcbox_def{service=Service,\n                                                     message_type=MessageType,\n                                                     marshal_fun=MarshalFun,\n                                                     unmarshal_fun=UnMarshalFun}, Options) ->\n    case grpcbox_subchannel:conn(Channel, grpcbox_utils:get_timeout_from_ctx(Ctx, infinity)) of\n        {ok, Conn, #{scheme := Scheme,\n                     authority := Authority,\n                     encoding := DefaultEncoding,\n                     stats_handler := StatsHandler}} ->\n            Encoding = maps:get(encoding, Options, DefaultEncoding),\n            Body = grpcbox_frame:encode(Encoding, MarshalFun(Input)),\n            Headers = headers(Scheme, Authority, Path, encoding_to_binary(Encoding), MessageType, metadata_headers(Ctx)),\n\n            %% headers are sent in the same request as creating a new stream to ensure\n            %% concurrent calls can't end up interleaving the sending of headers in such\n            %% a way that a lower stream id's headers are sent after another's, which results\n            %% in the server closing the connection when it gets them out of order\n            case h2_connection:new_stream(Conn, grpcbox_client_stream, [#{service => Service,\n                                                                          marshal_fun => MarshalFun,\n                                                                          unmarshal_fun => UnMarshalFun,\n                                                                          path => Path,\n                                                                          buffer => <<>>,\n                                                                          stats_handler => StatsHandler,\n                                                                          stats => #{},\n                                                                          client_pid => self()}], Headers, Body, [], self()) of\n                {error, _Code} = Err ->\n                    Err;\n                {StreamId, Pid} ->\n                    {ok, Conn, StreamId, Pid}\n            end;\n        {error, _}=Error ->\n            Error\n    end.\n\nsend_msg(#{channel := Conn,\n           stream_id := StreamId,\n           encoding := Encoding,\n           service_def := #grpcbox_def{marshal_fun=MarshalFun}}, Input) ->\n    OutFrame = grpcbox_frame:encode(Encoding, MarshalFun(Input)),\n    h2_connection:send_body(Conn, StreamId, OutFrame, [{send_end_stream, false}]).\n\nrecv_msg(S=#{stream_id := Id,\n             stream_pid := Pid,\n             monitor_ref := Ref}, Timeout) ->\n    receive\n        {data, Id, V} ->\n            {ok, V};\n        {'DOWN', Ref, process, Pid, _Reason} ->\n            case grpcbox_client:recv_trailers(S, 0) of\n                {ok, {<<\"0\">> = _Status, _Message, _Metadata}} ->\n                    stream_finished;\n                {ok, {Status, Message, Metadata}} ->\n                    {error, {Status, Message}, #{trailers => Metadata}};\n                {error, _} ->\n                    stream_finished\n            end\n    after Timeout ->\n            case erlang:is_process_alive(Pid) of\n                true ->\n                    timeout;\n                false ->\n                    stream_finished\n            end\n    end.\n\nmetadata_headers(Ctx) ->\n    case ctx:deadline(Ctx) of\n        D when D =:= undefined ; D =:= infinity ->\n            grpcbox_utils:encode_headers(maps:to_list(grpcbox_metadata:from_outgoing_ctx(Ctx)));\n        {T, _} ->\n            TimeMs = erlang:convert_time_unit(T - erlang:monotonic_time(), native, millisecond),\n            Timeout = {<<\"grpc-timeout\">>, <<(integer_to_binary(TimeMs))/binary, \"m\">>},\n            grpcbox_utils:encode_headers([Timeout | maps:to_list(grpcbox_metadata:from_outgoing_ctx(Ctx))])\n    end.\n\n%% callbacks\n\ninit(_ConnectionPid, StreamId, [_, State=#{path := Path}]) ->\n    _ = process_flag(trap_exit, true),\n    Ctx1 = ctx:with_value(ctx:new(), grpc_client_method, Path),\n    State1 = stats_handler(Ctx1, rpc_begin, {}, State),\n    {ok, State1#{stream_id => StreamId}};\ninit(_, _, State) ->\n    {ok, State}.\n\n%% trailers\non_receive_headers(H, State=#{resp_headers := _,\n                              ctx := Ctx,\n                              stream_id := StreamId,\n                              client_pid := Pid}) ->\n    Status = proplists:get_value(<<\"grpc-status\">>, H, undefined),\n    Message = proplists:get_value(<<\"grpc-message\">>, H, undefined),\n    Metadata = grpcbox_utils:headers_to_metadata(H),\n    Pid ! {trailers, StreamId, {Status, Message, Metadata}},\n    Ctx1 = ctx:with_value(Ctx, grpc_client_status, grpcbox_utils:status_to_string(Status)),\n    {ok, State#{ctx => Ctx1,\n                resp_trailers => H}};\n%% headers\non_receive_headers(H, State=#{stream_id := StreamId,\n                              ctx := Ctx,\n                              client_pid := Pid}) ->\n    Encoding = proplists:get_value(<<\"grpc-encoding\">>, H, identity),\n    Metadata = grpcbox_utils:headers_to_metadata(H),\n    Pid ! {headers, StreamId, Metadata},\n    %% TODO: better way to know if it is a Trailers-Only response?\n    %% maybe chatterbox should include information about the end of the stream\n    case proplists:get_value(<<\"grpc-status\">>, H, undefined) of\n        undefined ->\n            {ok, State#{resp_headers => H,\n                        encoding => encoding_to_atom(Encoding)}};\n        Status ->\n            Message = proplists:get_value(<<\"grpc-message\">>, H, undefined),\n            Pid ! {trailers, StreamId, {Status, Message, Metadata}},\n            Ctx1 = ctx:with_value(Ctx, grpc_client_status, grpcbox_utils:status_to_string(Status)),\n            {ok, State#{resp_headers => H,\n                        ctx => Ctx1,\n                        status => Status,\n                        encoding => encoding_to_atom(Encoding)}}\n    end.\n\non_receive_data(Data, State=#{stream_id := StreamId,\n                              client_pid := Pid,\n                              buffer := Buffer,\n                              encoding := Encoding,\n                              unmarshal_fun := UnmarshalFun}) ->\n    {Remaining, Messages} = grpcbox_frame:split(<<Buffer/binary, Data/binary>>, Encoding),\n    [Pid ! {data, StreamId, UnmarshalFun(Message)} || Message <- Messages],\n    {ok, State#{buffer => Remaining}};\non_receive_data(_Data, State) ->\n    {ok, State}.\n\non_end_stream(State=#{stream_id := StreamId,\n                      ctx := Ctx,\n                      client_pid := Pid}) ->\n    Pid ! {eos, StreamId},\n    State1 = stats_handler(Ctx, rpc_end, {}, State),\n    {ok, State1}.\n\nhandle_info(_, State) ->\n    State.\n\n%%\n\nstats_handler(Ctx, _, _, State=#{stats_handler := undefined}) ->\n    State#{ctx => Ctx};\nstats_handler(Ctx, Event, Stats, State=#{stats_handler := StatsHandler,\n                                         stats := StatsState}) ->\n    {Ctx1, StatsState1} = StatsHandler:handle(Ctx, client, Event, Stats, StatsState),\n    State#{ctx => Ctx1,\n           stats => StatsState1}.\n\nencoding_to_atom(identity) -> identity;\nencoding_to_atom(<<\"identity\">>) -> identity;\nencoding_to_atom(<<\"gzip\">>) -> gzip;\nencoding_to_atom(<<\"deflate\">>) -> deflate;\nencoding_to_atom(<<\"snappy\">>) -> snappy;\nencoding_to_atom(Custom) -> binary_to_atom(Custom, latin1).\n\nencoding_to_binary(identity) -> <<\"identity\">>;\nencoding_to_binary(gzip) -> <<\"gzip\">>;\nencoding_to_binary(deflate) -> <<\"deflate\">>;\nencoding_to_binary(snappy) -> <<\"snappy\">>;\nencoding_to_binary(Custom) -> atom_to_binary(Custom, latin1).\n\nheaders(Scheme, Host, Path, Encoding, MessageType, MD) ->\n    {UserAgent, FilteredMD} = case lists:keytake(<<\"user-agent\">>, 1, MD) of\n        {value, {<<\"user-agent\">>, MDUserAgent}, MD1} -> {MDUserAgent, MD1};\n        false -> {<<\"grpc-erlang/0.9.2\">>, MD}\n    end,\n\n    [\n        {<<\":method\">>, <<\"POST\">>},\n        {<<\":path\">>, Path},\n        {<<\":scheme\">>, Scheme},\n        {<<\":authority\">>, Host},\n        {<<\"grpc-encoding\">>, Encoding},\n        {<<\"grpc-message-type\">>, MessageType},\n        {<<\"content-type\">>, <<\"application/grpc+proto\">>},\n        {<<\"user-agent\">>, UserAgent},\n        {<<\"te\">>, <<\"trailers\">>}\n    | FilteredMD].\n"
  },
  {
    "path": "src/grpcbox_frame.erl",
    "content": "-module(grpcbox_frame).\n\n-export([encode/2,\n         split/2]).\n\n-include(\"grpcbox.hrl\").\n\nencode(gzip, Bin) ->\n    CompressedBin = zlib:gzip(Bin),\n    Length = byte_size(CompressedBin),\n    <<1, Length:32, CompressedBin/binary>>;\nencode(identity, Bin) ->\n    Length = byte_size(Bin),\n    <<0, Length:32, Bin/binary>>;\nencode(Encoding, _) ->\n    throw({error, {unknown_encoding, Encoding}}).\n\nsplit(Frame, Encoding) ->\n    split(Frame, Encoding, []).\n\nsplit(<<>>, _Encoding, Acc) ->\n    {<<>>, lists:reverse(Acc)};\nsplit(<<0, Length:32, Encoded:Length/binary, Rest/binary>>, Encoding, Acc) ->\n    split(Rest, Encoding, [Encoded | Acc]);\nsplit(<<1, Length:32, Compressed:Length/binary, Rest/binary>>, Encoding, Acc) ->\n    Encoded = case Encoding of\n                  gzip ->\n                      try zlib:gunzip(Compressed)\n                      catch\n                          error:data_error ->\n                              ?THROW(?GRPC_STATUS_INTERNAL,\n                                     <<\"Could not decompress but compression algorithm \",\n                                       (atom_to_binary(Encoding, utf8))/binary, \" is supported\">>)\n                      end;\n                  _ ->\n                      ?THROW(?GRPC_STATUS_UNIMPLEMENTED,\n                             <<\"Compression mechanism \", (atom_to_binary(Encoding, utf8))/binary,\n                               \" used for received frame not supported\">>)\n              end,\n    split(Rest, Encoding, [Encoded | Acc]);\nsplit(Bin, _Encoding, Acc) ->\n    {Bin, lists:reverse(Acc)}.\n"
  },
  {
    "path": "src/grpcbox_health_bhvr.erl",
    "content": "%%%-------------------------------------------------------------------\n%% @doc Behaviour to implement for grpc service grpc.health.v1.Health.\n%% @end\n%%%-------------------------------------------------------------------\n\n%% this module was generated and should not be modified manually\n\n-module(grpcbox_health_bhvr).\n\n%% Unary RPC\n-callback check(ctx:t(), grpcbox_health_pb:health_check_request()) ->\n    {ok, grpcbox_health_pb:health_check_response(), ctx:t()} | grpcbox_stream:grpc_error_response().\n\n%% \n-callback watch(grpcbox_health_pb:health_check_request(), grpcbox_stream:t()) ->\n    ok | grpcbox_stream:grpc_error_response().\n\n"
  },
  {
    "path": "src/grpcbox_health_client.erl",
    "content": "%%%-------------------------------------------------------------------\n%% @doc Client module for grpc service grpc.health.v1.Health.\n%% @end\n%%%-------------------------------------------------------------------\n\n%% this module was generated and should not be modified manually\n\n-module(grpcbox_health_client).\n\n-compile(export_all).\n-compile(nowarn_export_all).\n\n-include_lib(\"grpcbox/include/grpcbox.hrl\").\n\n-define(is_ctx(Ctx), is_tuple(Ctx) andalso element(1, Ctx) =:= ctx).\n\n-define(SERVICE, 'grpc.health.v1.Health').\n-define(PROTO_MODULE, 'grpcbox_health_pb').\n-define(MARSHAL_FUN(T), fun(I) -> ?PROTO_MODULE:encode_msg(I, T) end).\n-define(UNMARSHAL_FUN(T), fun(I) -> ?PROTO_MODULE:decode_msg(I, T) end).\n-define(DEF(Input, Output, MessageType), #grpcbox_def{service=?SERVICE,\n                                                      message_type=MessageType,\n                                                      marshal_fun=?MARSHAL_FUN(Input),\n                                                      unmarshal_fun=?UNMARSHAL_FUN(Output)}).\n\n%% @doc Unary RPC\n-spec check(grpcbox_health_pb:health_check_request()) ->\n    {ok, grpcbox_health_pb:health_check_response(), grpcbox:metadata()} | grpcbox_stream:grpc_error_response() | {error, any()}.\ncheck(Input) ->\n    check(ctx:new(), Input, #{}).\n\n-spec check(ctx:t() | grpcbox_health_pb:health_check_request(), grpcbox_health_pb:health_check_request() | grpcbox_client:options()) ->\n    {ok, grpcbox_health_pb:health_check_response(), grpcbox:metadata()} | grpcbox_stream:grpc_error_response() | {error, any()}.\ncheck(Ctx, Input) when ?is_ctx(Ctx) ->\n    check(Ctx, Input, #{});\ncheck(Input, Options) ->\n    check(ctx:new(), Input, Options).\n\n-spec check(ctx:t(), grpcbox_health_pb:health_check_request(), grpcbox_client:options()) ->\n    {ok, grpcbox_health_pb:health_check_response(), grpcbox:metadata()} | grpcbox_stream:grpc_error_response() | {error, any()}.\ncheck(Ctx, Input, Options) ->\n    grpcbox_client:unary(Ctx, <<\"/grpc.health.v1.Health/Check\">>, Input, ?DEF(health_check_request, health_check_response, <<\"grpc.health.v1.HealthCheckRequest\">>), Options).\n\n%% @doc \n-spec watch(grpcbox_health_pb:health_check_request()) ->\n    {ok, grpcbox_client:stream()} | grpcbox_stream:grpc_error_response() | {error, any()}.\nwatch(Input) ->\n    watch(ctx:new(), Input, #{}).\n\n-spec watch(ctx:t() | grpcbox_health_pb:health_check_request(), grpcbox_health_pb:health_check_request() | grpcbox_client:options()) ->\n    {ok, grpcbox_client:stream()} | grpcbox_stream:grpc_error_response() | {error, any()}.\nwatch(Ctx, Input) when ?is_ctx(Ctx) ->\n    watch(Ctx, Input, #{});\nwatch(Input, Options) ->\n    watch(ctx:new(), Input, Options).\n\n-spec watch(ctx:t(), grpcbox_health_pb:health_check_request(), grpcbox_client:options()) ->\n    {ok, grpcbox_client:stream()} | grpcbox_stream:grpc_error_response() | {error, any()}.\nwatch(Ctx, Input, Options) ->\n    grpcbox_client:stream(Ctx, <<\"/grpc.health.v1.Health/Watch\">>, Input, ?DEF(health_check_request, health_check_response, <<\"grpc.health.v1.HealthCheckRequest\">>), Options).\n\n"
  },
  {
    "path": "src/grpcbox_health_pb.erl",
    "content": "%% -*- coding: utf-8 -*-\n%% @private\n%% Automatically generated, do not edit\n%% Generated by gpb_compile version 4.7.3\n-module(grpcbox_health_pb).\n\n-export([encode_msg/2, encode_msg/3]).\n-export([decode_msg/2, decode_msg/3]).\n-export([merge_msgs/3, merge_msgs/4]).\n-export([verify_msg/2, verify_msg/3]).\n-export([get_msg_defs/0]).\n-export([get_msg_names/0]).\n-export([get_group_names/0]).\n-export([get_msg_or_group_names/0]).\n-export([get_enum_names/0]).\n-export([find_msg_def/1, fetch_msg_def/1]).\n-export([find_enum_def/1, fetch_enum_def/1]).\n-export([enum_symbol_by_value/2, enum_value_by_symbol/2]).\n-export(['enum_symbol_by_value_health_check_response.ServingStatus'/1, 'enum_value_by_symbol_health_check_response.ServingStatus'/1]).\n-export([get_service_names/0]).\n-export([get_service_def/1]).\n-export([get_rpc_names/1]).\n-export([find_rpc_def/2, fetch_rpc_def/2]).\n-export([fqbin_to_service_name/1]).\n-export([service_name_to_fqbin/1]).\n-export([fqbins_to_service_and_rpc_name/2]).\n-export([service_and_rpc_name_to_fqbins/2]).\n-export([fqbin_to_msg_name/1]).\n-export([msg_name_to_fqbin/1]).\n-export([fqbin_to_enum_name/1]).\n-export([enum_name_to_fqbin/1]).\n-export([get_package_name/0]).\n-export([uses_packages/0]).\n-export([source_basename/0]).\n-export([get_all_source_basenames/0]).\n-export([get_all_proto_names/0]).\n-export([get_msg_containment/1]).\n-export([get_pkg_containment/1]).\n-export([get_service_containment/1]).\n-export([get_rpc_containment/1]).\n-export([get_enum_containment/1]).\n-export([get_proto_by_msg_name_as_fqbin/1]).\n-export([get_proto_by_service_name_as_fqbin/1]).\n-export([get_proto_by_enum_name_as_fqbin/1]).\n-export([get_protos_by_pkg_name_as_fqbin/1]).\n-export([descriptor/0, descriptor/1]).\n-export([gpb_version_as_string/0, gpb_version_as_list/0]).\n\n\n%% enumerated types\n-type 'health_check_response.ServingStatus'() :: 'UNKNOWN' | 'SERVING' | 'NOT_SERVING' | 'SERVICE_UNKNOWN'.\n-export_type(['health_check_response.ServingStatus'/0]).\n\n%% message types\n-type health_check_request() ::\n      #{service                 => iodata()         % = 1\n       }.\n\n-type health_check_response() ::\n      #{status                  => 'UNKNOWN' | 'SERVING' | 'NOT_SERVING' | 'SERVICE_UNKNOWN' | integer() % = 1, enum health_check_response.ServingStatus\n       }.\n\n-export_type(['health_check_request'/0, 'health_check_response'/0]).\n\n-spec encode_msg(health_check_request() | health_check_response(), atom()) -> binary().\nencode_msg(Msg, MsgName) when is_atom(MsgName) ->\n    encode_msg(Msg, MsgName, []).\n\n-spec encode_msg(health_check_request() | health_check_response(), atom(), list()) -> binary().\nencode_msg(Msg, MsgName, Opts) ->\n    case proplists:get_bool(verify, Opts) of\n        true -> verify_msg(Msg, MsgName, Opts);\n        false -> ok\n    end,\n    TrUserData = proplists:get_value(user_data, Opts),\n    case MsgName of\n        health_check_request ->\n            encode_msg_health_check_request(id(Msg, TrUserData),\n                                            TrUserData);\n        health_check_response ->\n            encode_msg_health_check_response(id(Msg, TrUserData),\n                                             TrUserData)\n    end.\n\n\nencode_msg_health_check_request(Msg, TrUserData) ->\n    encode_msg_health_check_request(Msg, <<>>, TrUserData).\n\n\nencode_msg_health_check_request(#{} = M, Bin,\n                                TrUserData) ->\n    case M of\n        #{service := F1} ->\n            begin\n                TrF1 = id(F1, TrUserData),\n                case is_empty_string(TrF1) of\n                    true -> Bin;\n                    false ->\n                        e_type_string(TrF1, <<Bin/binary, 10>>, TrUserData)\n                end\n            end;\n        _ -> Bin\n    end.\n\nencode_msg_health_check_response(Msg, TrUserData) ->\n    encode_msg_health_check_response(Msg, <<>>, TrUserData).\n\n\nencode_msg_health_check_response(#{} = M, Bin,\n                                 TrUserData) ->\n    case M of\n        #{status := F1} ->\n            begin\n                TrF1 = id(F1, TrUserData),\n                if TrF1 =:= 'UNKNOWN'; TrF1 =:= 0 -> Bin;\n                   true ->\n                       'e_enum_health_check_response.ServingStatus'(TrF1,\n                                                                    <<Bin/binary,\n                                                                      8>>,\n                                                                    TrUserData)\n                end\n            end;\n        _ -> Bin\n    end.\n\n'e_enum_health_check_response.ServingStatus'('UNKNOWN',\n                                             Bin, _TrUserData) ->\n    <<Bin/binary, 0>>;\n'e_enum_health_check_response.ServingStatus'('SERVING',\n                                             Bin, _TrUserData) ->\n    <<Bin/binary, 1>>;\n'e_enum_health_check_response.ServingStatus'('NOT_SERVING',\n                                             Bin, _TrUserData) ->\n    <<Bin/binary, 2>>;\n'e_enum_health_check_response.ServingStatus'('SERVICE_UNKNOWN',\n                                             Bin, _TrUserData) ->\n    <<Bin/binary, 3>>;\n'e_enum_health_check_response.ServingStatus'(V, Bin,\n                                             _TrUserData) ->\n    e_varint(V, Bin).\n\n-compile({nowarn_unused_function,e_type_sint/3}).\ne_type_sint(Value, Bin, _TrUserData) when Value >= 0 ->\n    e_varint(Value * 2, Bin);\ne_type_sint(Value, Bin, _TrUserData) ->\n    e_varint(Value * -2 - 1, Bin).\n\n-compile({nowarn_unused_function,e_type_int32/3}).\ne_type_int32(Value, Bin, _TrUserData)\n    when 0 =< Value, Value =< 127 ->\n    <<Bin/binary, Value>>;\ne_type_int32(Value, Bin, _TrUserData) ->\n    <<N:64/unsigned-native>> = <<Value:64/signed-native>>,\n    e_varint(N, Bin).\n\n-compile({nowarn_unused_function,e_type_int64/3}).\ne_type_int64(Value, Bin, _TrUserData)\n    when 0 =< Value, Value =< 127 ->\n    <<Bin/binary, Value>>;\ne_type_int64(Value, Bin, _TrUserData) ->\n    <<N:64/unsigned-native>> = <<Value:64/signed-native>>,\n    e_varint(N, Bin).\n\n-compile({nowarn_unused_function,e_type_bool/3}).\ne_type_bool(true, Bin, _TrUserData) ->\n    <<Bin/binary, 1>>;\ne_type_bool(false, Bin, _TrUserData) ->\n    <<Bin/binary, 0>>;\ne_type_bool(1, Bin, _TrUserData) -> <<Bin/binary, 1>>;\ne_type_bool(0, Bin, _TrUserData) -> <<Bin/binary, 0>>.\n\n-compile({nowarn_unused_function,e_type_string/3}).\ne_type_string(S, Bin, _TrUserData) ->\n    Utf8 = unicode:characters_to_binary(S),\n    Bin2 = e_varint(byte_size(Utf8), Bin),\n    <<Bin2/binary, Utf8/binary>>.\n\n-compile({nowarn_unused_function,e_type_bytes/3}).\ne_type_bytes(Bytes, Bin, _TrUserData)\n    when is_binary(Bytes) ->\n    Bin2 = e_varint(byte_size(Bytes), Bin),\n    <<Bin2/binary, Bytes/binary>>;\ne_type_bytes(Bytes, Bin, _TrUserData)\n    when is_list(Bytes) ->\n    BytesBin = iolist_to_binary(Bytes),\n    Bin2 = e_varint(byte_size(BytesBin), Bin),\n    <<Bin2/binary, BytesBin/binary>>.\n\n-compile({nowarn_unused_function,e_type_fixed32/3}).\ne_type_fixed32(Value, Bin, _TrUserData) ->\n    <<Bin/binary, Value:32/little>>.\n\n-compile({nowarn_unused_function,e_type_sfixed32/3}).\ne_type_sfixed32(Value, Bin, _TrUserData) ->\n    <<Bin/binary, Value:32/little-signed>>.\n\n-compile({nowarn_unused_function,e_type_fixed64/3}).\ne_type_fixed64(Value, Bin, _TrUserData) ->\n    <<Bin/binary, Value:64/little>>.\n\n-compile({nowarn_unused_function,e_type_sfixed64/3}).\ne_type_sfixed64(Value, Bin, _TrUserData) ->\n    <<Bin/binary, Value:64/little-signed>>.\n\n-compile({nowarn_unused_function,e_type_float/3}).\ne_type_float(V, Bin, _) when is_number(V) ->\n    <<Bin/binary, V:32/little-float>>;\ne_type_float(infinity, Bin, _) ->\n    <<Bin/binary, 0:16, 128, 127>>;\ne_type_float('-infinity', Bin, _) ->\n    <<Bin/binary, 0:16, 128, 255>>;\ne_type_float(nan, Bin, _) ->\n    <<Bin/binary, 0:16, 192, 127>>.\n\n-compile({nowarn_unused_function,e_type_double/3}).\ne_type_double(V, Bin, _) when is_number(V) ->\n    <<Bin/binary, V:64/little-float>>;\ne_type_double(infinity, Bin, _) ->\n    <<Bin/binary, 0:48, 240, 127>>;\ne_type_double('-infinity', Bin, _) ->\n    <<Bin/binary, 0:48, 240, 255>>;\ne_type_double(nan, Bin, _) ->\n    <<Bin/binary, 0:48, 248, 127>>.\n\n-compile({nowarn_unused_function,e_varint/3}).\ne_varint(N, Bin, _TrUserData) -> e_varint(N, Bin).\n\n-compile({nowarn_unused_function,e_varint/2}).\ne_varint(N, Bin) when N =< 127 -> <<Bin/binary, N>>;\ne_varint(N, Bin) ->\n    Bin2 = <<Bin/binary, (N band 127 bor 128)>>,\n    e_varint(N bsr 7, Bin2).\n\nis_empty_string(\"\") -> true;\nis_empty_string(<<>>) -> true;\nis_empty_string(L) when is_list(L) ->\n    not string_has_chars(L);\nis_empty_string(B) when is_binary(B) -> false.\n\nstring_has_chars([C | _]) when is_integer(C) -> true;\nstring_has_chars([H | T]) ->\n    case string_has_chars(H) of\n        true -> true;\n        false -> string_has_chars(T)\n    end;\nstring_has_chars(B)\n    when is_binary(B), byte_size(B) =/= 0 ->\n    true;\nstring_has_chars(C) when is_integer(C) -> true;\nstring_has_chars(<<>>) -> false;\nstring_has_chars([]) -> false.\n\n\ndecode_msg(Bin, MsgName) when is_binary(Bin) ->\n    decode_msg(Bin, MsgName, []).\n\ndecode_msg(Bin, MsgName, Opts) when is_binary(Bin) ->\n    TrUserData = proplists:get_value(user_data, Opts),\n    decode_msg_1_catch(Bin, MsgName, TrUserData).\n\n-ifdef('OTP_RELEASE').\ndecode_msg_1_catch(Bin, MsgName, TrUserData) ->\n    try decode_msg_2_doit(MsgName, Bin, TrUserData)\n    catch Class:Reason:StackTrace -> error({gpb_error,{decoding_failure, {Bin, MsgName, {Class, Reason, StackTrace}}}})\n    end.\n-else.\ndecode_msg_1_catch(Bin, MsgName, TrUserData) ->\n    try decode_msg_2_doit(MsgName, Bin, TrUserData)\n    catch Class:Reason ->\n        StackTrace = erlang:get_stacktrace(),\n        error({gpb_error,{decoding_failure, {Bin, MsgName, {Class, Reason, StackTrace}}}})\n    end.\n-endif.\n\ndecode_msg_2_doit(health_check_request, Bin,\n                  TrUserData) ->\n    id(decode_msg_health_check_request(Bin, TrUserData),\n       TrUserData);\ndecode_msg_2_doit(health_check_response, Bin,\n                  TrUserData) ->\n    id(decode_msg_health_check_response(Bin, TrUserData),\n       TrUserData).\n\n\n\ndecode_msg_health_check_request(Bin, TrUserData) ->\n    dfp_read_field_def_health_check_request(Bin,\n                                            0,\n                                            0,\n                                            id(<<>>, TrUserData),\n                                            TrUserData).\n\ndfp_read_field_def_health_check_request(<<10,\n                                          Rest/binary>>,\n                                        Z1, Z2, F@_1, TrUserData) ->\n    d_field_health_check_request_service(Rest,\n                                         Z1,\n                                         Z2,\n                                         F@_1,\n                                         TrUserData);\ndfp_read_field_def_health_check_request(<<>>, 0, 0,\n                                        F@_1, _) ->\n    #{service => F@_1};\ndfp_read_field_def_health_check_request(Other, Z1, Z2,\n                                        F@_1, TrUserData) ->\n    dg_read_field_def_health_check_request(Other,\n                                           Z1,\n                                           Z2,\n                                           F@_1,\n                                           TrUserData).\n\ndg_read_field_def_health_check_request(<<1:1, X:7,\n                                         Rest/binary>>,\n                                       N, Acc, F@_1, TrUserData)\n    when N < 32 - 7 ->\n    dg_read_field_def_health_check_request(Rest,\n                                           N + 7,\n                                           X bsl N + Acc,\n                                           F@_1,\n                                           TrUserData);\ndg_read_field_def_health_check_request(<<0:1, X:7,\n                                         Rest/binary>>,\n                                       N, Acc, F@_1, TrUserData) ->\n    Key = X bsl N + Acc,\n    case Key of\n        10 ->\n            d_field_health_check_request_service(Rest,\n                                                 0,\n                                                 0,\n                                                 F@_1,\n                                                 TrUserData);\n        _ ->\n            case Key band 7 of\n                0 ->\n                    skip_varint_health_check_request(Rest,\n                                                     0,\n                                                     0,\n                                                     F@_1,\n                                                     TrUserData);\n                1 ->\n                    skip_64_health_check_request(Rest,\n                                                 0,\n                                                 0,\n                                                 F@_1,\n                                                 TrUserData);\n                2 ->\n                    skip_length_delimited_health_check_request(Rest,\n                                                               0,\n                                                               0,\n                                                               F@_1,\n                                                               TrUserData);\n                3 ->\n                    skip_group_health_check_request(Rest,\n                                                    Key bsr 3,\n                                                    0,\n                                                    F@_1,\n                                                    TrUserData);\n                5 ->\n                    skip_32_health_check_request(Rest,\n                                                 0,\n                                                 0,\n                                                 F@_1,\n                                                 TrUserData)\n            end\n    end;\ndg_read_field_def_health_check_request(<<>>, 0, 0, F@_1,\n                                       _) ->\n    #{service => F@_1}.\n\nd_field_health_check_request_service(<<1:1, X:7,\n                                       Rest/binary>>,\n                                     N, Acc, F@_1, TrUserData)\n    when N < 57 ->\n    d_field_health_check_request_service(Rest,\n                                         N + 7,\n                                         X bsl N + Acc,\n                                         F@_1,\n                                         TrUserData);\nd_field_health_check_request_service(<<0:1, X:7,\n                                       Rest/binary>>,\n                                     N, Acc, _, TrUserData) ->\n    {NewFValue, RestF} = begin\n                             Len = X bsl N + Acc,\n                             <<Bytes:Len/binary, Rest2/binary>> = Rest,\n                             {id(binary:copy(Bytes), TrUserData), Rest2}\n                         end,\n    dfp_read_field_def_health_check_request(RestF,\n                                            0,\n                                            0,\n                                            NewFValue,\n                                            TrUserData).\n\nskip_varint_health_check_request(<<1:1, _:7,\n                                   Rest/binary>>,\n                                 Z1, Z2, F@_1, TrUserData) ->\n    skip_varint_health_check_request(Rest,\n                                     Z1,\n                                     Z2,\n                                     F@_1,\n                                     TrUserData);\nskip_varint_health_check_request(<<0:1, _:7,\n                                   Rest/binary>>,\n                                 Z1, Z2, F@_1, TrUserData) ->\n    dfp_read_field_def_health_check_request(Rest,\n                                            Z1,\n                                            Z2,\n                                            F@_1,\n                                            TrUserData).\n\nskip_length_delimited_health_check_request(<<1:1, X:7,\n                                             Rest/binary>>,\n                                           N, Acc, F@_1, TrUserData)\n    when N < 57 ->\n    skip_length_delimited_health_check_request(Rest,\n                                               N + 7,\n                                               X bsl N + Acc,\n                                               F@_1,\n                                               TrUserData);\nskip_length_delimited_health_check_request(<<0:1, X:7,\n                                             Rest/binary>>,\n                                           N, Acc, F@_1, TrUserData) ->\n    Length = X bsl N + Acc,\n    <<_:Length/binary, Rest2/binary>> = Rest,\n    dfp_read_field_def_health_check_request(Rest2,\n                                            0,\n                                            0,\n                                            F@_1,\n                                            TrUserData).\n\nskip_group_health_check_request(Bin, FNum, Z2, F@_1,\n                                TrUserData) ->\n    {_, Rest} = read_group(Bin, FNum),\n    dfp_read_field_def_health_check_request(Rest,\n                                            0,\n                                            Z2,\n                                            F@_1,\n                                            TrUserData).\n\nskip_32_health_check_request(<<_:32, Rest/binary>>, Z1,\n                             Z2, F@_1, TrUserData) ->\n    dfp_read_field_def_health_check_request(Rest,\n                                            Z1,\n                                            Z2,\n                                            F@_1,\n                                            TrUserData).\n\nskip_64_health_check_request(<<_:64, Rest/binary>>, Z1,\n                             Z2, F@_1, TrUserData) ->\n    dfp_read_field_def_health_check_request(Rest,\n                                            Z1,\n                                            Z2,\n                                            F@_1,\n                                            TrUserData).\n\ndecode_msg_health_check_response(Bin, TrUserData) ->\n    dfp_read_field_def_health_check_response(Bin,\n                                             0,\n                                             0,\n                                             id('UNKNOWN', TrUserData),\n                                             TrUserData).\n\ndfp_read_field_def_health_check_response(<<8,\n                                           Rest/binary>>,\n                                         Z1, Z2, F@_1, TrUserData) ->\n    d_field_health_check_response_status(Rest,\n                                         Z1,\n                                         Z2,\n                                         F@_1,\n                                         TrUserData);\ndfp_read_field_def_health_check_response(<<>>, 0, 0,\n                                         F@_1, _) ->\n    #{status => F@_1};\ndfp_read_field_def_health_check_response(Other, Z1, Z2,\n                                         F@_1, TrUserData) ->\n    dg_read_field_def_health_check_response(Other,\n                                            Z1,\n                                            Z2,\n                                            F@_1,\n                                            TrUserData).\n\ndg_read_field_def_health_check_response(<<1:1, X:7,\n                                          Rest/binary>>,\n                                        N, Acc, F@_1, TrUserData)\n    when N < 32 - 7 ->\n    dg_read_field_def_health_check_response(Rest,\n                                            N + 7,\n                                            X bsl N + Acc,\n                                            F@_1,\n                                            TrUserData);\ndg_read_field_def_health_check_response(<<0:1, X:7,\n                                          Rest/binary>>,\n                                        N, Acc, F@_1, TrUserData) ->\n    Key = X bsl N + Acc,\n    case Key of\n        8 ->\n            d_field_health_check_response_status(Rest,\n                                                 0,\n                                                 0,\n                                                 F@_1,\n                                                 TrUserData);\n        _ ->\n            case Key band 7 of\n                0 ->\n                    skip_varint_health_check_response(Rest,\n                                                      0,\n                                                      0,\n                                                      F@_1,\n                                                      TrUserData);\n                1 ->\n                    skip_64_health_check_response(Rest,\n                                                  0,\n                                                  0,\n                                                  F@_1,\n                                                  TrUserData);\n                2 ->\n                    skip_length_delimited_health_check_response(Rest,\n                                                                0,\n                                                                0,\n                                                                F@_1,\n                                                                TrUserData);\n                3 ->\n                    skip_group_health_check_response(Rest,\n                                                     Key bsr 3,\n                                                     0,\n                                                     F@_1,\n                                                     TrUserData);\n                5 ->\n                    skip_32_health_check_response(Rest,\n                                                  0,\n                                                  0,\n                                                  F@_1,\n                                                  TrUserData)\n            end\n    end;\ndg_read_field_def_health_check_response(<<>>, 0, 0,\n                                        F@_1, _) ->\n    #{status => F@_1}.\n\nd_field_health_check_response_status(<<1:1, X:7,\n                                       Rest/binary>>,\n                                     N, Acc, F@_1, TrUserData)\n    when N < 57 ->\n    d_field_health_check_response_status(Rest,\n                                         N + 7,\n                                         X bsl N + Acc,\n                                         F@_1,\n                                         TrUserData);\nd_field_health_check_response_status(<<0:1, X:7,\n                                       Rest/binary>>,\n                                     N, Acc, _, TrUserData) ->\n    {NewFValue, RestF} =\n        {id('d_enum_health_check_response.ServingStatus'(begin\n                                                             <<Res:32/signed-native>> =\n                                                                 <<(X bsl N +\n                                                                        Acc):32/unsigned-native>>,\n                                                             id(Res, TrUserData)\n                                                         end),\n            TrUserData),\n         Rest},\n    dfp_read_field_def_health_check_response(RestF,\n                                             0,\n                                             0,\n                                             NewFValue,\n                                             TrUserData).\n\nskip_varint_health_check_response(<<1:1, _:7,\n                                    Rest/binary>>,\n                                  Z1, Z2, F@_1, TrUserData) ->\n    skip_varint_health_check_response(Rest,\n                                      Z1,\n                                      Z2,\n                                      F@_1,\n                                      TrUserData);\nskip_varint_health_check_response(<<0:1, _:7,\n                                    Rest/binary>>,\n                                  Z1, Z2, F@_1, TrUserData) ->\n    dfp_read_field_def_health_check_response(Rest,\n                                             Z1,\n                                             Z2,\n                                             F@_1,\n                                             TrUserData).\n\nskip_length_delimited_health_check_response(<<1:1, X:7,\n                                              Rest/binary>>,\n                                            N, Acc, F@_1, TrUserData)\n    when N < 57 ->\n    skip_length_delimited_health_check_response(Rest,\n                                                N + 7,\n                                                X bsl N + Acc,\n                                                F@_1,\n                                                TrUserData);\nskip_length_delimited_health_check_response(<<0:1, X:7,\n                                              Rest/binary>>,\n                                            N, Acc, F@_1, TrUserData) ->\n    Length = X bsl N + Acc,\n    <<_:Length/binary, Rest2/binary>> = Rest,\n    dfp_read_field_def_health_check_response(Rest2,\n                                             0,\n                                             0,\n                                             F@_1,\n                                             TrUserData).\n\nskip_group_health_check_response(Bin, FNum, Z2, F@_1,\n                                 TrUserData) ->\n    {_, Rest} = read_group(Bin, FNum),\n    dfp_read_field_def_health_check_response(Rest,\n                                             0,\n                                             Z2,\n                                             F@_1,\n                                             TrUserData).\n\nskip_32_health_check_response(<<_:32, Rest/binary>>, Z1,\n                              Z2, F@_1, TrUserData) ->\n    dfp_read_field_def_health_check_response(Rest,\n                                             Z1,\n                                             Z2,\n                                             F@_1,\n                                             TrUserData).\n\nskip_64_health_check_response(<<_:64, Rest/binary>>, Z1,\n                              Z2, F@_1, TrUserData) ->\n    dfp_read_field_def_health_check_response(Rest,\n                                             Z1,\n                                             Z2,\n                                             F@_1,\n                                             TrUserData).\n\n'd_enum_health_check_response.ServingStatus'(0) ->\n    'UNKNOWN';\n'd_enum_health_check_response.ServingStatus'(1) ->\n    'SERVING';\n'd_enum_health_check_response.ServingStatus'(2) ->\n    'NOT_SERVING';\n'd_enum_health_check_response.ServingStatus'(3) ->\n    'SERVICE_UNKNOWN';\n'd_enum_health_check_response.ServingStatus'(V) -> V.\n\nread_group(Bin, FieldNum) ->\n    {NumBytes, EndTagLen} = read_gr_b(Bin, 0, 0, 0, 0, FieldNum),\n    <<Group:NumBytes/binary, _:EndTagLen/binary, Rest/binary>> = Bin,\n    {Group, Rest}.\n\n%% Like skipping over fields, but record the total length,\n%% Each field is <(FieldNum bsl 3) bor FieldType> ++ <FieldValue>\n%% Record the length because varints may be non-optimally encoded.\n%%\n%% Groups can be nested, but assume the same FieldNum cannot be nested\n%% because group field numbers are shared with the rest of the fields\n%% numbers. Thus we can search just for an group-end with the same\n%% field number.\n%%\n%% (The only time the same group field number could occur would\n%% be in a nested sub message, but then it would be inside a\n%% length-delimited entry, which we skip-read by length.)\nread_gr_b(<<1:1, X:7, Tl/binary>>, N, Acc, NumBytes, TagLen, FieldNum)\n  when N < (32-7) ->\n    read_gr_b(Tl, N+7, X bsl N + Acc, NumBytes, TagLen+1, FieldNum);\nread_gr_b(<<0:1, X:7, Tl/binary>>, N, Acc, NumBytes, TagLen,\n          FieldNum) ->\n    Key = X bsl N + Acc,\n    TagLen1 = TagLen + 1,\n    case {Key bsr 3, Key band 7} of\n        {FieldNum, 4} -> % 4 = group_end\n            {NumBytes, TagLen1};\n        {_, 0} -> % 0 = varint\n            read_gr_vi(Tl, 0, NumBytes + TagLen1, FieldNum);\n        {_, 1} -> % 1 = bits64\n            <<_:64, Tl2/binary>> = Tl,\n            read_gr_b(Tl2, 0, 0, NumBytes + TagLen1 + 8, 0, FieldNum);\n        {_, 2} -> % 2 = length_delimited\n            read_gr_ld(Tl, 0, 0, NumBytes + TagLen1, FieldNum);\n        {_, 3} -> % 3 = group_start\n            read_gr_b(Tl, 0, 0, NumBytes + TagLen1, 0, FieldNum);\n        {_, 4} -> % 4 = group_end\n            read_gr_b(Tl, 0, 0, NumBytes + TagLen1, 0, FieldNum);\n        {_, 5} -> % 5 = bits32\n            <<_:32, Tl2/binary>> = Tl,\n            read_gr_b(Tl2, 0, 0, NumBytes + TagLen1 + 4, 0, FieldNum)\n    end.\n\nread_gr_vi(<<1:1, _:7, Tl/binary>>, N, NumBytes, FieldNum)\n  when N < (64-7) ->\n    read_gr_vi(Tl, N+7, NumBytes+1, FieldNum);\nread_gr_vi(<<0:1, _:7, Tl/binary>>, _, NumBytes, FieldNum) ->\n    read_gr_b(Tl, 0, 0, NumBytes+1, 0, FieldNum).\n\nread_gr_ld(<<1:1, X:7, Tl/binary>>, N, Acc, NumBytes, FieldNum)\n  when N < (64-7) ->\n    read_gr_ld(Tl, N+7, X bsl N + Acc, NumBytes+1, FieldNum);\nread_gr_ld(<<0:1, X:7, Tl/binary>>, N, Acc, NumBytes, FieldNum) ->\n    Len = X bsl N + Acc,\n    NumBytes1 = NumBytes + 1,\n    <<_:Len/binary, Tl2/binary>> = Tl,\n    read_gr_b(Tl2, 0, 0, NumBytes1 + Len, 0, FieldNum).\n\nmerge_msgs(Prev, New, MsgName) when is_atom(MsgName) ->\n    merge_msgs(Prev, New, MsgName, []).\n\nmerge_msgs(Prev, New, MsgName, Opts) ->\n    TrUserData = proplists:get_value(user_data, Opts),\n    case MsgName of\n        health_check_request ->\n            merge_msg_health_check_request(Prev, New, TrUserData);\n        health_check_response ->\n            merge_msg_health_check_response(Prev, New, TrUserData)\n    end.\n\n-compile({nowarn_unused_function,merge_msg_health_check_request/3}).\nmerge_msg_health_check_request(PMsg, NMsg, _) ->\n    S1 = #{},\n    case {PMsg, NMsg} of\n        {_, #{service := NFservice}} ->\n            S1#{service => NFservice};\n        {#{service := PFservice}, _} ->\n            S1#{service => PFservice};\n        _ -> S1\n    end.\n\n-compile({nowarn_unused_function,merge_msg_health_check_response/3}).\nmerge_msg_health_check_response(PMsg, NMsg, _) ->\n    S1 = #{},\n    case {PMsg, NMsg} of\n        {_, #{status := NFstatus}} -> S1#{status => NFstatus};\n        {#{status := PFstatus}, _} -> S1#{status => PFstatus};\n        _ -> S1\n    end.\n\n\nverify_msg(Msg, MsgName) when is_atom(MsgName) ->\n    verify_msg(Msg, MsgName, []).\n\nverify_msg(Msg, MsgName, Opts) ->\n    TrUserData = proplists:get_value(user_data, Opts),\n    case MsgName of\n        health_check_request ->\n            v_msg_health_check_request(Msg, [MsgName], TrUserData);\n        health_check_response ->\n            v_msg_health_check_response(Msg, [MsgName], TrUserData);\n        _ -> mk_type_error(not_a_known_message, Msg, [])\n    end.\n\n\n-compile({nowarn_unused_function,v_msg_health_check_request/3}).\n-dialyzer({nowarn_function,v_msg_health_check_request/3}).\nv_msg_health_check_request(#{} = M, Path, TrUserData) ->\n    case M of\n        #{service := F1} ->\n            v_type_string(F1, [service | Path], TrUserData);\n        _ -> ok\n    end,\n    lists:foreach(fun (service) -> ok;\n                      (OtherKey) ->\n                          mk_type_error({extraneous_key, OtherKey}, M, Path)\n                  end,\n                  maps:keys(M)),\n    ok;\nv_msg_health_check_request(M, Path, _TrUserData)\n    when is_map(M) ->\n    mk_type_error({missing_fields,\n                   [] -- maps:keys(M),\n                   health_check_request},\n                  M,\n                  Path);\nv_msg_health_check_request(X, Path, _TrUserData) ->\n    mk_type_error({expected_msg, health_check_request},\n                  X,\n                  Path).\n\n-compile({nowarn_unused_function,v_msg_health_check_response/3}).\n-dialyzer({nowarn_function,v_msg_health_check_response/3}).\nv_msg_health_check_response(#{} = M, Path,\n                            TrUserData) ->\n    case M of\n        #{status := F1} ->\n            'v_enum_health_check_response.ServingStatus'(F1,\n                                                         [status | Path],\n                                                         TrUserData);\n        _ -> ok\n    end,\n    lists:foreach(fun (status) -> ok;\n                      (OtherKey) ->\n                          mk_type_error({extraneous_key, OtherKey}, M, Path)\n                  end,\n                  maps:keys(M)),\n    ok;\nv_msg_health_check_response(M, Path, _TrUserData)\n    when is_map(M) ->\n    mk_type_error({missing_fields,\n                   [] -- maps:keys(M),\n                   health_check_response},\n                  M,\n                  Path);\nv_msg_health_check_response(X, Path, _TrUserData) ->\n    mk_type_error({expected_msg, health_check_response},\n                  X,\n                  Path).\n\n-compile({nowarn_unused_function,'v_enum_health_check_response.ServingStatus'/3}).\n-dialyzer({nowarn_function,'v_enum_health_check_response.ServingStatus'/3}).\n'v_enum_health_check_response.ServingStatus'('UNKNOWN',\n                                             _Path, _TrUserData) ->\n    ok;\n'v_enum_health_check_response.ServingStatus'('SERVING',\n                                             _Path, _TrUserData) ->\n    ok;\n'v_enum_health_check_response.ServingStatus'('NOT_SERVING',\n                                             _Path, _TrUserData) ->\n    ok;\n'v_enum_health_check_response.ServingStatus'('SERVICE_UNKNOWN',\n                                             _Path, _TrUserData) ->\n    ok;\n'v_enum_health_check_response.ServingStatus'(V, Path,\n                                             TrUserData)\n    when is_integer(V) ->\n    v_type_sint32(V, Path, TrUserData);\n'v_enum_health_check_response.ServingStatus'(X, Path,\n                                             _TrUserData) ->\n    mk_type_error({invalid_enum,\n                   'health_check_response.ServingStatus'},\n                  X,\n                  Path).\n\n-compile({nowarn_unused_function,v_type_sint32/3}).\n-dialyzer({nowarn_function,v_type_sint32/3}).\nv_type_sint32(N, _Path, _TrUserData)\n    when -2147483648 =< N, N =< 2147483647 ->\n    ok;\nv_type_sint32(N, Path, _TrUserData)\n    when is_integer(N) ->\n    mk_type_error({value_out_of_range, sint32, signed, 32},\n                  N,\n                  Path);\nv_type_sint32(X, Path, _TrUserData) ->\n    mk_type_error({bad_integer, sint32, signed, 32},\n                  X,\n                  Path).\n\n-compile({nowarn_unused_function,v_type_string/3}).\n-dialyzer({nowarn_function,v_type_string/3}).\nv_type_string(S, Path, _TrUserData)\n    when is_list(S); is_binary(S) ->\n    try unicode:characters_to_binary(S) of\n        B when is_binary(B) -> ok;\n        {error, _, _} ->\n            mk_type_error(bad_unicode_string, S, Path)\n    catch\n        error:badarg ->\n            mk_type_error(bad_unicode_string, S, Path)\n    end;\nv_type_string(X, Path, _TrUserData) ->\n    mk_type_error(bad_unicode_string, X, Path).\n\n-compile({nowarn_unused_function,mk_type_error/3}).\n-spec mk_type_error(_, _, list()) -> no_return().\nmk_type_error(Error, ValueSeen, Path) ->\n    Path2 = prettify_path(Path),\n    erlang:error({gpb_type_error,\n                  {Error, [{value, ValueSeen}, {path, Path2}]}}).\n\n\n-compile({nowarn_unused_function,prettify_path/1}).\n-dialyzer({nowarn_function,prettify_path/1}).\nprettify_path([]) -> top_level;\nprettify_path(PathR) ->\n    list_to_atom(lists:append(lists:join(\".\",\n                                         lists:map(fun atom_to_list/1,\n                                                   lists:reverse(PathR))))).\n\n\n-compile({nowarn_unused_function,id/2}).\n-compile({inline,id/2}).\nid(X, _TrUserData) -> X.\n\n-compile({nowarn_unused_function,v_ok/3}).\n-compile({inline,v_ok/3}).\nv_ok(_Value, _Path, _TrUserData) -> ok.\n\n-compile({nowarn_unused_function,m_overwrite/3}).\n-compile({inline,m_overwrite/3}).\nm_overwrite(_Prev, New, _TrUserData) -> New.\n\n-compile({nowarn_unused_function,cons/3}).\n-compile({inline,cons/3}).\ncons(Elem, Acc, _TrUserData) -> [Elem | Acc].\n\n-compile({nowarn_unused_function,lists_reverse/2}).\n-compile({inline,lists_reverse/2}).\n'lists_reverse'(L, _TrUserData) -> lists:reverse(L).\n-compile({nowarn_unused_function,'erlang_++'/3}).\n-compile({inline,'erlang_++'/3}).\n'erlang_++'(A, B, _TrUserData) -> A ++ B.\n\nget_msg_defs() ->\n    [{{enum, 'health_check_response.ServingStatus'},\n      [{'UNKNOWN', 0},\n       {'SERVING', 1},\n       {'NOT_SERVING', 2},\n       {'SERVICE_UNKNOWN', 3}]},\n     {{msg, health_check_request},\n      [#{name => service, fnum => 1, rnum => 2,\n         type => string, occurrence => optional, opts => []}]},\n     {{msg, health_check_response},\n      [#{name => status, fnum => 1, rnum => 2,\n         type => {enum, 'health_check_response.ServingStatus'},\n         occurrence => optional, opts => []}]}].\n\n\nget_msg_names() ->\n    [health_check_request, health_check_response].\n\n\nget_group_names() -> [].\n\n\nget_msg_or_group_names() ->\n    [health_check_request, health_check_response].\n\n\nget_enum_names() ->\n    ['health_check_response.ServingStatus'].\n\n\nfetch_msg_def(MsgName) ->\n    case find_msg_def(MsgName) of\n        Fs when is_list(Fs) -> Fs;\n        error -> erlang:error({no_such_msg, MsgName})\n    end.\n\n\nfetch_enum_def(EnumName) ->\n    case find_enum_def(EnumName) of\n        Es when is_list(Es) -> Es;\n        error -> erlang:error({no_such_enum, EnumName})\n    end.\n\n\nfind_msg_def(health_check_request) ->\n    [#{name => service, fnum => 1, rnum => 2,\n       type => string, occurrence => optional, opts => []}];\nfind_msg_def(health_check_response) ->\n    [#{name => status, fnum => 1, rnum => 2,\n       type => {enum, 'health_check_response.ServingStatus'},\n       occurrence => optional, opts => []}];\nfind_msg_def(_) -> error.\n\n\nfind_enum_def('health_check_response.ServingStatus') ->\n    [{'UNKNOWN', 0},\n     {'SERVING', 1},\n     {'NOT_SERVING', 2},\n     {'SERVICE_UNKNOWN', 3}];\nfind_enum_def(_) -> error.\n\n\nenum_symbol_by_value('health_check_response.ServingStatus',\n                     Value) ->\n    'enum_symbol_by_value_health_check_response.ServingStatus'(Value).\n\n\nenum_value_by_symbol('health_check_response.ServingStatus',\n                     Sym) ->\n    'enum_value_by_symbol_health_check_response.ServingStatus'(Sym).\n\n\n'enum_symbol_by_value_health_check_response.ServingStatus'(0) ->\n    'UNKNOWN';\n'enum_symbol_by_value_health_check_response.ServingStatus'(1) ->\n    'SERVING';\n'enum_symbol_by_value_health_check_response.ServingStatus'(2) ->\n    'NOT_SERVING';\n'enum_symbol_by_value_health_check_response.ServingStatus'(3) ->\n    'SERVICE_UNKNOWN'.\n\n\n'enum_value_by_symbol_health_check_response.ServingStatus'('UNKNOWN') ->\n    0;\n'enum_value_by_symbol_health_check_response.ServingStatus'('SERVING') ->\n    1;\n'enum_value_by_symbol_health_check_response.ServingStatus'('NOT_SERVING') ->\n    2;\n'enum_value_by_symbol_health_check_response.ServingStatus'('SERVICE_UNKNOWN') ->\n    3.\n\n\nget_service_names() -> ['grpc.health.v1.Health'].\n\n\nget_service_def('grpc.health.v1.Health') ->\n    {{service, 'grpc.health.v1.Health'},\n     [#{name => 'Check', input => health_check_request,\n        output => health_check_response, input_stream => false,\n        output_stream => false, opts => []},\n      #{name => 'Watch', input => health_check_request,\n        output => health_check_response, input_stream => false,\n        output_stream => true, opts => []}]};\nget_service_def(_) -> error.\n\n\nget_rpc_names('grpc.health.v1.Health') ->\n    ['Check', 'Watch'];\nget_rpc_names(_) -> error.\n\n\nfind_rpc_def('grpc.health.v1.Health', RpcName) ->\n    'find_rpc_def_grpc.health.v1.Health'(RpcName);\nfind_rpc_def(_, _) -> error.\n\n\n'find_rpc_def_grpc.health.v1.Health'('Check') ->\n    #{name => 'Check', input => health_check_request,\n      output => health_check_response, input_stream => false,\n      output_stream => false, opts => []};\n'find_rpc_def_grpc.health.v1.Health'('Watch') ->\n    #{name => 'Watch', input => health_check_request,\n      output => health_check_response, input_stream => false,\n      output_stream => true, opts => []};\n'find_rpc_def_grpc.health.v1.Health'(_) -> error.\n\n\nfetch_rpc_def(ServiceName, RpcName) ->\n    case find_rpc_def(ServiceName, RpcName) of\n        Def when is_map(Def) -> Def;\n        error ->\n            erlang:error({no_such_rpc, ServiceName, RpcName})\n    end.\n\n\n%% Convert a a fully qualified (ie with package name) service name\n%% as a binary to a service name as an atom.\nfqbin_to_service_name(<<\"grpc.health.v1.Health\">>) ->\n    'grpc.health.v1.Health';\nfqbin_to_service_name(X) ->\n    error({gpb_error, {badservice, X}}).\n\n\n%% Convert a service name as an atom to a fully qualified\n%% (ie with package name) name as a binary.\nservice_name_to_fqbin('grpc.health.v1.Health') ->\n    <<\"grpc.health.v1.Health\">>;\nservice_name_to_fqbin(X) ->\n    error({gpb_error, {badservice, X}}).\n\n\n%% Convert a a fully qualified (ie with package name) service name\n%% and an rpc name, both as binaries to a service name and an rpc\n%% name, as atoms.\nfqbins_to_service_and_rpc_name(<<\"grpc.health.v1.Health\">>, <<\"Check\">>) ->\n    {'grpc.health.v1.Health', 'Check'};\nfqbins_to_service_and_rpc_name(<<\"grpc.health.v1.Health\">>, <<\"Watch\">>) ->\n    {'grpc.health.v1.Health', 'Watch'};\nfqbins_to_service_and_rpc_name(S, R) ->\n    error({gpb_error, {badservice_or_rpc, {S, R}}}).\n\n\n%% Convert a service name and an rpc name, both as atoms,\n%% to a fully qualified (ie with package name) service name and\n%% an rpc name as binaries.\nservice_and_rpc_name_to_fqbins('grpc.health.v1.Health',\n                               'Check') ->\n    {<<\"grpc.health.v1.Health\">>, <<\"Check\">>};\nservice_and_rpc_name_to_fqbins('grpc.health.v1.Health',\n                               'Watch') ->\n    {<<\"grpc.health.v1.Health\">>, <<\"Watch\">>};\nservice_and_rpc_name_to_fqbins(S, R) ->\n    error({gpb_error, {badservice_or_rpc, {S, R}}}).\n\n\nfqbin_to_msg_name(<<\"grpc.health.v1.HealthCheckRequest\">>) -> health_check_request;\nfqbin_to_msg_name(<<\"grpc.health.v1.HealthCheckResponse\">>) -> health_check_response;\nfqbin_to_msg_name(E) -> error({gpb_error, {badmsg, E}}).\n\n\nmsg_name_to_fqbin(health_check_request) -> <<\"grpc.health.v1.HealthCheckRequest\">>;\nmsg_name_to_fqbin(health_check_response) -> <<\"grpc.health.v1.HealthCheckResponse\">>;\nmsg_name_to_fqbin(E) -> error({gpb_error, {badmsg, E}}).\n\n\nfqbin_to_enum_name(<<\"grpc.health.v1.HealthCheckResponse.ServingStatus\">>) ->\n    'health_check_response.ServingStatus';\nfqbin_to_enum_name(E) ->\n    error({gpb_error, {badenum, E}}).\n\n\nenum_name_to_fqbin('health_check_response.ServingStatus') ->\n    <<\"grpc.health.v1.HealthCheckResponse.ServingStatus\">>;\nenum_name_to_fqbin(E) ->\n    error({gpb_error, {badenum, E}}).\n\n\nget_package_name() -> 'grpc.health.v1'.\n\n\n%% Whether or not the message names\n%% are prepended with package name or not.\nuses_packages() -> true.\n\n\nsource_basename() -> \"health.proto\".\n\n\n%% Retrieve all proto file names, also imported ones.\n%% The order is top-down. The first element is always the main\n%% source file. The files are returned with extension,\n%% see get_all_proto_names/0 for a version that returns\n%% the basenames sans extension\nget_all_source_basenames() -> [\"health.proto\"].\n\n\n%% Retrieve all proto file names, also imported ones.\n%% The order is top-down. The first element is always the main\n%% source file. The files are returned sans .proto extension,\n%% to make it easier to use them with the various get_xyz_containment\n%% functions.\nget_all_proto_names() -> [\"health\"].\n\n\nget_msg_containment(\"health\") ->\n    [health_check_request, health_check_response];\nget_msg_containment(P) ->\n    error({gpb_error, {badproto, P}}).\n\n\nget_pkg_containment(\"health\") -> 'grpc.health.v1';\nget_pkg_containment(P) ->\n    error({gpb_error, {badproto, P}}).\n\n\nget_service_containment(\"health\") ->\n    ['grpc.health.v1.Health'];\nget_service_containment(P) ->\n    error({gpb_error, {badproto, P}}).\n\n\nget_rpc_containment(\"health\") ->\n    [{'grpc.health.v1.Health', 'Check'},\n     {'grpc.health.v1.Health', 'Watch'}];\nget_rpc_containment(P) ->\n    error({gpb_error, {badproto, P}}).\n\n\nget_enum_containment(\"health\") ->\n    ['health_check_response.ServingStatus'];\nget_enum_containment(P) ->\n    error({gpb_error, {badproto, P}}).\n\n\nget_proto_by_msg_name_as_fqbin(<<\"grpc.health.v1.HealthCheckRequest\">>) -> \"health\";\nget_proto_by_msg_name_as_fqbin(<<\"grpc.health.v1.HealthCheckResponse\">>) -> \"health\";\nget_proto_by_msg_name_as_fqbin(E) ->\n    error({gpb_error, {badmsg, E}}).\n\n\nget_proto_by_service_name_as_fqbin(<<\"grpc.health.v1.Health\">>) -> \"health\";\nget_proto_by_service_name_as_fqbin(E) ->\n    error({gpb_error, {badservice, E}}).\n\n\nget_proto_by_enum_name_as_fqbin(<<\"grpc.health.v1.HealthCheckResponse.ServingStatus\">>) -> \"health\";\nget_proto_by_enum_name_as_fqbin(E) ->\n    error({gpb_error, {badenum, E}}).\n\n\nget_protos_by_pkg_name_as_fqbin(<<\"grpc.health.v1\">>) -> [\"health\"];\nget_protos_by_pkg_name_as_fqbin(E) ->\n    error({gpb_error, {badpkg, E}}).\n\n\ndescriptor() ->\n    <<10, 191, 3, 10, 27, 103, 114, 112, 99, 47, 104, 101,\n      97, 108, 116, 104, 47, 118, 49, 47, 104, 101, 97, 108,\n      116, 104, 46, 112, 114, 111, 116, 111, 18, 14, 103, 114,\n      112, 99, 46, 104, 101, 97, 108, 116, 104, 46, 118, 49,\n      34, 37, 10, 18, 72, 101, 97, 108, 116, 104, 67, 104,\n      101, 99, 107, 82, 101, 113, 117, 101, 115, 116, 18, 15,\n      10, 7, 115, 101, 114, 118, 105, 99, 101, 24, 1, 32, 1,\n      40, 9, 34, 169, 1, 10, 19, 72, 101, 97, 108, 116, 104,\n      67, 104, 101, 99, 107, 82, 101, 115, 112, 111, 110, 115,\n      101, 18, 65, 10, 6, 115, 116, 97, 116, 117, 115, 24, 1,\n      32, 1, 40, 14, 50, 49, 46, 103, 114, 112, 99, 46, 104,\n      101, 97, 108, 116, 104, 46, 118, 49, 46, 72, 101, 97,\n      108, 116, 104, 67, 104, 101, 99, 107, 82, 101, 115, 112,\n      111, 110, 115, 101, 46, 83, 101, 114, 118, 105, 110,\n      103, 83, 116, 97, 116, 117, 115, 34, 79, 10, 13, 83,\n      101, 114, 118, 105, 110, 103, 83, 116, 97, 116, 117,\n      115, 18, 11, 10, 7, 85, 78, 75, 78, 79, 87, 78, 16, 0,\n      18, 11, 10, 7, 83, 69, 82, 86, 73, 78, 71, 16, 1, 18,\n      15, 10, 11, 78, 79, 84, 95, 83, 69, 82, 86, 73, 78, 71,\n      16, 2, 18, 19, 10, 15, 83, 69, 82, 86, 73, 67, 69, 95,\n      85, 78, 75, 78, 79, 87, 78, 16, 3, 50, 180, 1, 10, 6,\n      72, 101, 97, 108, 116, 104, 18, 84, 10, 5, 67, 104, 101,\n      99, 107, 18, 34, 46, 103, 114, 112, 99, 46, 104, 101,\n      97, 108, 116, 104, 46, 118, 49, 46, 72, 101, 97, 108,\n      116, 104, 67, 104, 101, 99, 107, 82, 101, 113, 117, 101,\n      115, 116, 26, 35, 46, 103, 114, 112, 99, 46, 104, 101,\n      97, 108, 116, 104, 46, 118, 49, 46, 72, 101, 97, 108,\n      116, 104, 67, 104, 101, 99, 107, 82, 101, 115, 112, 111,\n      110, 115, 101, 40, 0, 48, 0, 18, 84, 10, 5, 87, 97, 116,\n      99, 104, 18, 34, 46, 103, 114, 112, 99, 46, 104, 101,\n      97, 108, 116, 104, 46, 118, 49, 46, 72, 101, 97, 108,\n      116, 104, 67, 104, 101, 99, 107, 82, 101, 113, 117, 101,\n      115, 116, 26, 35, 46, 103, 114, 112, 99, 46, 104, 101,\n      97, 108, 116, 104, 46, 118, 49, 46, 72, 101, 97, 108,\n      116, 104, 67, 104, 101, 99, 107, 82, 101, 115, 112, 111,\n      110, 115, 101, 40, 0, 48, 0, 98, 6, 112, 114, 111, 116,\n      111, 51>>.\n\ndescriptor(\"health\") ->\n    <<10, 27, 103, 114, 112, 99, 47, 104, 101, 97, 108, 116,\n      104, 47, 118, 49, 47, 104, 101, 97, 108, 116, 104, 46,\n      112, 114, 111, 116, 111, 18, 14, 103, 114, 112, 99, 46,\n      104, 101, 97, 108, 116, 104, 46, 118, 49, 34, 37, 10,\n      18, 72, 101, 97, 108, 116, 104, 67, 104, 101, 99, 107,\n      82, 101, 113, 117, 101, 115, 116, 18, 15, 10, 7, 115,\n      101, 114, 118, 105, 99, 101, 24, 1, 32, 1, 40, 9, 34,\n      169, 1, 10, 19, 72, 101, 97, 108, 116, 104, 67, 104,\n      101, 99, 107, 82, 101, 115, 112, 111, 110, 115, 101, 18,\n      65, 10, 6, 115, 116, 97, 116, 117, 115, 24, 1, 32, 1,\n      40, 14, 50, 49, 46, 103, 114, 112, 99, 46, 104, 101, 97,\n      108, 116, 104, 46, 118, 49, 46, 72, 101, 97, 108, 116,\n      104, 67, 104, 101, 99, 107, 82, 101, 115, 112, 111, 110,\n      115, 101, 46, 83, 101, 114, 118, 105, 110, 103, 83, 116,\n      97, 116, 117, 115, 34, 79, 10, 13, 83, 101, 114, 118,\n      105, 110, 103, 83, 116, 97, 116, 117, 115, 18, 11, 10,\n      7, 85, 78, 75, 78, 79, 87, 78, 16, 0, 18, 11, 10, 7, 83,\n      69, 82, 86, 73, 78, 71, 16, 1, 18, 15, 10, 11, 78, 79,\n      84, 95, 83, 69, 82, 86, 73, 78, 71, 16, 2, 18, 19, 10,\n      15, 83, 69, 82, 86, 73, 67, 69, 95, 85, 78, 75, 78, 79,\n      87, 78, 16, 3, 50, 180, 1, 10, 6, 72, 101, 97, 108, 116,\n      104, 18, 84, 10, 5, 67, 104, 101, 99, 107, 18, 34, 46,\n      103, 114, 112, 99, 46, 104, 101, 97, 108, 116, 104, 46,\n      118, 49, 46, 72, 101, 97, 108, 116, 104, 67, 104, 101,\n      99, 107, 82, 101, 113, 117, 101, 115, 116, 26, 35, 46,\n      103, 114, 112, 99, 46, 104, 101, 97, 108, 116, 104, 46,\n      118, 49, 46, 72, 101, 97, 108, 116, 104, 67, 104, 101,\n      99, 107, 82, 101, 115, 112, 111, 110, 115, 101, 40, 0,\n      48, 0, 18, 84, 10, 5, 87, 97, 116, 99, 104, 18, 34, 46,\n      103, 114, 112, 99, 46, 104, 101, 97, 108, 116, 104, 46,\n      118, 49, 46, 72, 101, 97, 108, 116, 104, 67, 104, 101,\n      99, 107, 82, 101, 113, 117, 101, 115, 116, 26, 35, 46,\n      103, 114, 112, 99, 46, 104, 101, 97, 108, 116, 104, 46,\n      118, 49, 46, 72, 101, 97, 108, 116, 104, 67, 104, 101,\n      99, 107, 82, 101, 115, 112, 111, 110, 115, 101, 40, 0,\n      48, 0, 98, 6, 112, 114, 111, 116, 111, 51>>;\ndescriptor(X) -> error({gpb_error, {badname, X}}).\n\n\ngpb_version_as_string() ->\n    \"4.7.3\".\n\ngpb_version_as_list() ->\n    [4,7,3].\n"
  },
  {
    "path": "src/grpcbox_health_service.erl",
    "content": "-module(grpcbox_health_service).\n\n-export([check/2,\n         watch/2]).\n\ncheck(Ctx, #{service := <<>>}) ->\n    {ok, #{status => 'SERVING'}, Ctx};\ncheck(Ctx, #{service := _Service}) ->\n    %% TODO: lookup if we are serving this service\n    {ok, #{status => 'UNKNOWN'}, Ctx}.\n\nwatch(_Request, _Stream) ->\n    ok.\n"
  },
  {
    "path": "src/grpcbox_metadata.erl",
    "content": "-module(grpcbox_metadata).\n\n-export([new/1,\n         new_incoming_ctx/1,\n         append_to_outgoing_ctx/2,\n         pairs/1,\n         join/1,\n         from_incoming_ctx/1,\n         from_outgoing_ctx/1]).\n\n-export_type([t/0,\n              key/0,\n              value/0]).\n\n-type key() :: unicode:chardata(). %% but only ASCII allowed?\n-type value() :: unicode:chardata().\n\n-type t() :: #{key() => value()}.\n\n%% New creates an MD from a given key-value map.\n%%\n%% Only the following ASCII characters are allowed in keys:\n%%  - digits: 0-9\n%%  - uppercase letters: A-Z (normalized to lower)\n%%  - lowercase letters: a-z\n%%  - special characters: -_.\n%% Uppercase letters are automatically converted to lowercase.\n%%\n%% Keys beginning with \"grpc-\" are reserved for grpc-internal use only and may\n%% result in errors if set in metadata.\n-spec new(#{unicode:chardata() => unicode:chardata()}) -> t().\nnew(Map) ->\n    maps:fold(fun(K, V, Acc) ->\n                  maps:put(string:lowercase(K), V, Acc)\n              end, #{}, Map).\n\nnew_incoming_ctx(Map) ->\n    ctx:with_value(md_incoming_key, new(Map)).\n\nappend_to_outgoing_ctx(Ctx, Map) ->\n    ctx:with_value(Ctx, md_outgoing_key, join([from_outgoing_ctx(Ctx), new(Map)])).\n\n-spec pairs([{key(), value()}]) -> t().\npairs(List) ->\n    lists:foldl(fun({Key, Value}, Map) ->\n                        update(Key, Value, Map)\n                end, #{}, List).\n\n-spec join([t()]) -> t().\njoin(Metadatas) ->\n    lists:foldl(fun(Map, Acc) ->\n                    maps:fold(fun(Key, Value, Acc1) ->\n                                  update(Key, Value, Acc1)\n                              end, Acc, Map)\n                end, #{}, Metadatas).\n\n-spec from_incoming_ctx(ctx:t()) -> t().\nfrom_incoming_ctx(Ctx) ->\n    ctx:get(Ctx, md_incoming_key, #{}).\n\n-spec from_outgoing_ctx(ctx:t()) -> t().\nfrom_outgoing_ctx(Ctx) ->\n    ctx:get(Ctx, md_outgoing_key, #{}).\n\n%% internal\n\nupdate(Key, Value, Map) ->\n    maps:update_with(Key, fun(V) when is_list(V) ->\n                                  [Value | V ];\n                             (V) ->\n                                  [Value, V]\n                          end, Value, Map).\n"
  },
  {
    "path": "src/grpcbox_name_resolver.erl",
    "content": "-module(grpcbox_name_resolver).\n\n-export([resolve/1]).\n\n%% dns:///localhost\n%% ipv4:///127.0.0.1\n\nresolve(Name) ->\n    case uri_string:parse(Name) of\n        #{scheme := _Scheme,\n          host := _Authority,\n          port := Port,\n          path := Endpoint} ->\n            {Endpoint, Port};\n        _ ->\n            {\"127.0.0.1\", 8080}\n    end.\n"
  },
  {
    "path": "src/grpcbox_oc_stats.erl",
    "content": "-module(grpcbox_oc_stats).\n\n-export([register_measures/0,\n         register_measures/1,\n         subscribe_views/0,\n         default_views/0,\n         default_views/1,\n         extra_views/0,\n         extra_views/1]).\n\n%% grpc_client_method \tFull gRPC method name, including package, service and method,\n%%                      e.g. google.bigtable.v2.Bigtable/CheckAndMutateRow\n%% grpc_client_status \tgRPC server status code received, e.g. OK, CANCELLED, DEADLINE_EXCEEDED\n\n%% grpc_server_method \tFull gRPC method name, including package, service and method,\n%%                       e.g. com.exampleapi.v4.BookshelfService/Checkout\n%% grpc_server_status \tgRPC server status code returned, e.g. OK, CANCELLED, DEADLINE_EXCEEDED\n\nregister_measures() ->\n    register_measures(client),\n    register_measures(server).\n\n-spec register_measures(client | server) -> ok.\nregister_measures(Type) ->\n    [oc_stat_measure:new(Name, Desc, Unit) || {Name, Desc, Unit} <- register_measures_(Type)],\n    ok.\n\nregister_measures_(client) ->\n    [{'grpc.io/client/sent_messages_per_rpc',\n      \"Number of messages sent in each RPC (always 1 for non-streaming RPCs).\",\n      none},\n     {'grpc.io/client/sent_bytes_per_rpc',\n      \"Total bytes sent in across all request messages per RPC.\",\n      bytes},\n     {'grpc.io/client/received_messages_per_rpc',\n      \"Number of response messages received per RPC (always 1 for non-streaming RPCs).\",\n      none},\n     {'grpc.io/client/received_bytes_per_rpc',\n      \"Total bytes received across all response messages per RPC.\",\n      bytes},\n     {'grpc.io/client/roundtrip_latency',\n      \"Time between first byte of request sent to last byte of response received, or terminal error.\",\n      microsecond},\n     {'grpc.io/client/server_latency',\n      \"Propagated from the server and should have the same value as grpc.io/server/latency.\",\n      microsecond},\n     {'grpc.io/client/started_rpcs',\n      \"The total number of client RPCs ever opened, including those that have not completed.\",\n      none}];\nregister_measures_(server) ->\n    [{'grpc.io/server/received_messages_per_rpc',\n      \"Number of messages received in each RPC. Has value 1 for non-streaming RPCs.\",\n      none},\n     {'grpc.io/server/received_bytes_per_rpc',\n      \"Total bytes received across all messages per RPC.\",\n      bytes},\n     {'grpc.io/server/sent_messages_per_rpc',\n      \"Number of messages sent in each RPC. Has value 1 for non-streaming RPCs.\",\n      none},\n     {'grpc.io/server/sent_bytes_per_rpc',\n      \"Total bytes sent in across all response messages per RPC.\",\n      bytes},\n     {'grpc.io/server/server_latency',\n      \"Time between first byte of request received to last byte of response sent, or terminal error.\",\n      microsecond},\n     {'grpc.io/server/started_rpcs',\n      \"The total number of server RPCs ever opened, including those that have not completed.\",\n      none}].\n\nsubscribe_views() ->\n    [oc_stat_view:subscribe(V) || V <- default_views()].\n\ndefault_views() ->\n    default_views(client) ++ default_views(server).\n\ndefault_views(client) ->\n    [#{name => \"grpc.io/client/sent_bytes_per_rpc\",\n       description => \"Distribution of total bytes sent per RPC\",\n       tags => [grpc_client_method],\n       measure => 'grpc.io/client/sent_bytes_per_rpc',\n       aggregation => default_size_distribution()},\n     #{name => \"grpc.io/client/received_bytes_per_rpc\",\n       description => \"Distribution of total bytes received per RPC\",\n       tags => [grpc_client_method],\n       measure => 'grpc.io/client/received_bytes_per_rpc',\n       aggregation => default_size_distribution()},\n     #{name => \"grpc.io/client/roundtrip_latency\",\n       description => \"Distribution of time taken by request.\",\n       tags => [grpc_client_method],\n       measure => 'grpc.io/client/roundtrip_latency',\n       unit => microsecond,\n       aggregation => default_latency_distribution()},\n     #{name => \"grpc.io/client/completed_rpcs\",\n       description => \"Total count of completed rpcs\",\n       tags => [grpc_client_method, grpc_client_status],\n       measure => 'grpc.io/client/roundtrip_latency',\n       aggregation => oc_stat_aggregation_count},\n     #{name => \"grpc.io/client/started_rpcs\",\n       description => \"The total number of client RPCs ever opened, including those that have not completed.\",\n       tags => [grpc_client_method],\n       measure => 'grpc.io/client/started_rpcs',\n       aggregation => oc_stat_aggregation_count}];\ndefault_views(server) ->\n    [#{name => \"grpc.io/server/received_bytes_per_rpc\",\n       description => \"Distribution of total bytes received per RPC\",\n       tags => [grpc_server_method],\n       measure => 'grpc.io/server/received_bytes_per_rpc',\n       aggregation => default_size_distribution()},\n     #{name => \"grpc.io/server/sent_bytes_per_rpc\",\n       description => \"Distribution of total bytes sent per RPC\",\n       tags => [grpc_server_method],\n       measure => 'grpc.io/server/sent_bytes_per_rpc',\n       aggregation => default_size_distribution()},\n     #{name => \"grpc.io/server/server_latency\",\n       description => \"Distribution of time taken by request.\",\n       tags => [grpc_server_method],\n       measure => 'grpc.io/server/server_latency',\n       unit => microsecond,\n       aggregation => default_latency_distribution()},\n     #{name => \"grpc.io/server/completed_rpcs\",\n       description => \"Total count of completed rpcs\",\n       tags => [grpc_server_method, grpc_server_status],\n       measure => 'grpc.io/server/server_latency',\n       aggregation => oc_stat_aggregation_count},\n     #{name => \"grpc.io/server/started_rpcs\",\n       description => \"The total number of server RPCs ever opened, including those that have not completed.\",\n       tags => [grpc_server_method],\n       measure => 'grpc.io/server/started_rpcs',\n       aggregation => oc_stat_aggregation_count}].\n\nextra_views() ->\n    extra_views(client),\n    extra_views(server).\n\nextra_views(client) ->\n    [#{name => \"grpc.io/client/received_messages_per_rpc\",\n       description => \"Distribution of messages received per RPC\",\n       tags => [grpc_client_method],\n       measure => 'grpc.io/client/received_messages_per_rpc',\n       unit => microsecond,\n       aggregation => default_latency_distribution()},\n     #{name => \"grpc.io/client/sent_messages_per_rpc\",\n       description => \"Distribution of messages sent per RPC\",\n       tags => [grpc_client_method],\n       measure => 'grpc.io/client/sent_messages_per_rpc',\n       aggregation => default_size_distribution()},\n     #{name => \"grpc.io/client/server_latency\",\n       description => \"Distribution of latency value propagated from the server.\",\n       tags => [grpc_client_method],\n       measure => 'grpc.io/client/server_latency',\n       unit => microsecond,\n       aggregation => default_latency_distribution()}];\nextra_views(server) ->\n    [#{name => \"grpc.io/server/received_messages_per_rpc\",\n       description => \"Distribution of messages received per RPC\",\n       tags => [grpc_server_method],\n       measure => 'grpc.io/server/received_messages_per_rpc',\n       unit => microsecond,\n       aggregation => default_latency_distribution()},\n     #{name => \"grpc.io/server/sent_messages_per_rpc\",\n       description => \"Distribution of messages sent per RPC\",\n       tags => [grpc_server_method],\n       measure => 'grpc.io/server/sent_messages_per_rpc',\n       aggregation => default_size_distribution()}].\n\ndefault_size_distribution() ->\n    {oc_stat_aggregation_distribution, [{buckets, [0, 1024, 2048, 4096, 16384, 65536,\n                                                   262144, 1048576, 4194304, 16777216,\n                                                   67108864, 268435456, 1073741824,\n                                                   4294967296]}]}.\n\ndefault_latency_distribution() ->\n    {oc_stat_aggregation_distribution,\n     [{buckets, [0, 1000, 2000, 3000, 4000, 5000, 6000, 8000,\n                 10000, 13000, 16000, 20000, 25000, 30000, 40000, 50000, 65000, 80000,\n                 100000, 130000, 160000, 200000, 250000, 300000, 400000, 500000, 650000, 800000,\n                 1000000, 2000000, 5000000, 10000000, 20000000, 50000000,\n                 100000000]}]}.\n"
  },
  {
    "path": "src/grpcbox_oc_stats_handler.erl",
    "content": "-module(grpcbox_oc_stats_handler).\n\n-export([init/0,\n         init/1,\n         handle/5]).\n\n-record(stats, {recv_bytes    = 0 :: integer(),\n                sent_bytes    = 0 :: integer(),\n                recv_count    = 0 :: integer(),\n                sent_count    = 0 :: integer(),\n                start_time        :: integer() | undefined,\n                end_time          :: integer() | undefined}).\n\ninit() ->\n    init(client),\n    init(server).\n\n-spec init(server | client) -> ok.\ninit(Type) ->\n    grpcbox_oc_stats:register_measures(Type).\n\nhandle(Ctx, server, rpc_begin, _, _) ->\n    Method = ctx:get(Ctx, grpc_server_method),\n    Tags = #{grpc_server_method => Method},\n    oc_stat:record(Tags, [{'grpc.io/server/started_rpcs', 1}]),\n    {oc_tags:new(Ctx, Tags), #stats{start_time=erlang:monotonic_time(microsecond)}};\nhandle(Ctx, client, rpc_begin, _, _) ->\n    Method = ctx:get(Ctx, grpc_client_method),\n    Tags = #{grpc_client_method => Method},\n    oc_stat:record(Tags, 'grpc.io/client/started_rpcs', 1),\n    {oc_tags:new(Ctx, Tags), #stats{start_time=erlang:monotonic_time(microsecond)}};\nhandle(Ctx, _, out_payload, #{uncompressed_size := USize,\n                              compressed_size := _CSize}, Stats=#stats{sent_count=SentCount,\n                                                                       sent_bytes=SentBytes}) ->\n    %% set span message event\n    {Ctx, Stats#stats{sent_count=SentCount+1,\n                      sent_bytes=SentBytes+USize}};\nhandle(Ctx, _, in_payload, #{uncompressed_size := USize,\n                             compressed_size := _CSize}, Stats=#stats{recv_count=SentCount,\n                                                                      recv_bytes=SentBytes}) ->\n    %% set span message event\n    {Ctx, Stats#stats{recv_count=SentCount+1,\n                      recv_bytes=SentBytes+USize}};\nhandle(Ctx, server, rpc_end, _, Stats=#stats{start_time=StartTime,\n                                             sent_count=SentCount,\n                                             sent_bytes=SentBytes,\n                                             recv_count=RecvCount,\n                                             recv_bytes=RecvBytes}) ->\n    EndTime = erlang:monotonic_time(microsecond),\n    Status = ctx:get(Ctx, grpc_server_status),\n    Ctx1 = oc_tags:new(Ctx, #{grpc_server_status => Status}),\n    oc_stat:record(Ctx1, [{'grpc.io/server/server_latency', EndTime - StartTime},\n                          {'grpc.io/server/sent_bytes_per_rpc', SentBytes},\n                          {'grpc.io/server/received_bytes_per_rpc', RecvBytes},\n                          {'grpc.io/server/received_messages_per_rpc', RecvCount},\n                          {'grpc.io/server/sent_messages_per_rpc', SentCount}]),\n\n    {Ctx1, Stats#stats{end_time=EndTime}};\nhandle(Ctx, client, rpc_end, _, Stats=#stats{start_time=StartTime,\n                                             sent_count=SentCount,\n                                             sent_bytes=SentBytes,\n                                             recv_count=RecvCount,\n                                             recv_bytes=RecvBytes}) ->\n    EndTime = erlang:monotonic_time(microsecond),\n    Status = ctx:get(Ctx, grpc_client_status),\n    Ctx1 = oc_tags:new(Ctx, #{grpc_client_status => Status}),\n    oc_stat:record(Ctx1, [{'grpc.io/client/roundtrip_latency', EndTime - StartTime},\n                          {'grpc.io/client/sent_bytes_per_rpc', SentBytes},\n                          {'grpc.io/client/received_bytes_per_rpc', RecvBytes},\n                          {'grpc.io/client/received_messages_per_rpc', RecvCount},\n                          {'grpc.io/client/sent_messages_per_rpc', SentCount}]),\n\n    {Ctx1, Stats#stats{end_time=EndTime}};\nhandle(Ctx, _, _, _, Stats=#stats{}) ->\n    {Ctx, Stats}.\n"
  },
  {
    "path": "src/grpcbox_pool.erl",
    "content": "-module(grpcbox_pool).\n\n-behaviour(acceptor_pool).\n\n-export([start_link/4,\n         accept_socket/3]).\n\n-export([init/1]).\n\nstart_link(Name, ServerOpts, ChatterboxOpts, TransportOpts) ->\n    acceptor_pool:start_link({local, Name}, ?MODULE, [ServerOpts, ChatterboxOpts, TransportOpts]).\n\naccept_socket(Pool, Socket, Acceptors) ->\n    acceptor_pool:accept_socket(Pool, Socket, Acceptors).\n\ninit([ServerOpts, ChatterboxOpts, TransportOpts]) ->\n    {Transport, SslOpts} = case TransportOpts of\n                               #{ssl := true,\n                                 keyfile := KeyFile,\n                                 certfile := CertFile,\n                                 cacertfile := CACertFile} ->\n                                   {ssl, [{keyfile, KeyFile},\n                                          {certfile, CertFile},\n                                          {honor_cipher_order, false},\n                                          {cacertfile, CACertFile},\n                                          {fail_if_no_peer_cert, true},\n                                          {verify, verify_peer},\n                                          {versions, ['tlsv1.2']},\n                                          {next_protocols_advertised, [<<\"h2\">>]}]};\n                               _ ->\n                                   {gen_tcp, []}\n                           end,\n\n    Conn = #{id => grpcbox_acceptor,\n             start => {grpcbox_acceptor, {Transport, ServerOpts, ChatterboxOpts, SslOpts}, []},\n             grace => 5000},\n    {ok, {#{}, [Conn]}}.\n"
  },
  {
    "path": "src/grpcbox_reflection_bhvr.erl",
    "content": "%%%-------------------------------------------------------------------\n%% @doc Behaviour to implement for grpc service grpc.reflection.v1alpha.ServerReflection.\n%% @end\n%%%-------------------------------------------------------------------\n\n%% this module was generated and should not be modified manually\n\n-module(grpcbox_reflection_bhvr).\n\n%% \n-callback server_reflection_info(reference(), grpcbox_stream:t()) ->\n    ok | grpcbox_stream:grpc_error_response().\n\n"
  },
  {
    "path": "src/grpcbox_reflection_client.erl",
    "content": "%%%-------------------------------------------------------------------\n%% @doc Client module for grpc service grpc.reflection.v1alpha.ServerReflection.\n%% @end\n%%%-------------------------------------------------------------------\n\n%% this module was generated and should not be modified manually\n\n-module(grpcbox_reflection_client).\n\n-compile(export_all).\n-compile(nowarn_export_all).\n\n-include_lib(\"grpcbox/include/grpcbox.hrl\").\n\n-define(is_ctx(Ctx), is_tuple(Ctx) andalso element(1, Ctx) =:= ctx).\n\n-define(SERVICE, 'grpc.reflection.v1alpha.ServerReflection').\n-define(PROTO_MODULE, 'grpcbox_reflection_pb').\n-define(MARSHAL_FUN(T), fun(I) -> ?PROTO_MODULE:encode_msg(I, T) end).\n-define(UNMARSHAL_FUN(T), fun(I) -> ?PROTO_MODULE:decode_msg(I, T) end).\n-define(DEF(Input, Output, MessageType), #grpcbox_def{service=?SERVICE,\n                                                      message_type=MessageType,\n                                                      marshal_fun=?MARSHAL_FUN(Input),\n                                                      unmarshal_fun=?UNMARSHAL_FUN(Output)}).\n\n%% @doc \n-spec server_reflection_info() ->\n    {ok, grpcbox_client:stream()} | grpcbox_stream:grpc_error_response() | {error, any()}.\nserver_reflection_info() ->\n    server_reflection_info(ctx:new(), #{}).\n\n-spec server_reflection_info(ctx:t() | grpcbox_client:options()) ->\n    {ok, grpcbox_client:stream()} | grpcbox_stream:grpc_error_response() | {error, any()}.\nserver_reflection_info(Ctx) when ?is_ctx(Ctx) ->\n    server_reflection_info(Ctx, #{});\nserver_reflection_info(Options) ->\n    server_reflection_info(ctx:new(), Options).\n\n-spec server_reflection_info(ctx:t(), grpcbox_client:options()) ->\n    {ok, grpcbox_client:stream()} | grpcbox_stream:grpc_error_response() | {error, any()}.\nserver_reflection_info(Ctx, Options) ->\n    grpcbox_client:stream(Ctx, <<\"/grpc.reflection.v1alpha.ServerReflection/ServerReflectionInfo\">>, ?DEF(server_reflection_request, server_reflection_response, <<\"grpc.reflection.v1alpha.ServerReflectionRequest\">>), Options).\n\n"
  },
  {
    "path": "src/grpcbox_reflection_pb.erl",
    "content": "%% -*- coding: utf-8 -*-\n%% @private\n%% Automatically generated, do not edit\n%% Generated by gpb_compile version 4.7.3\n-module(grpcbox_reflection_pb).\n\n-export([encode_msg/2, encode_msg/3]).\n-export([decode_msg/2, decode_msg/3]).\n-export([merge_msgs/3, merge_msgs/4]).\n-export([verify_msg/2, verify_msg/3]).\n-export([get_msg_defs/0]).\n-export([get_msg_names/0]).\n-export([get_group_names/0]).\n-export([get_msg_or_group_names/0]).\n-export([get_enum_names/0]).\n-export([find_msg_def/1, fetch_msg_def/1]).\n-export([find_enum_def/1, fetch_enum_def/1]).\n-export([enum_symbol_by_value/2, enum_value_by_symbol/2]).\n-export([get_service_names/0]).\n-export([get_service_def/1]).\n-export([get_rpc_names/1]).\n-export([find_rpc_def/2, fetch_rpc_def/2]).\n-export([fqbin_to_service_name/1]).\n-export([service_name_to_fqbin/1]).\n-export([fqbins_to_service_and_rpc_name/2]).\n-export([service_and_rpc_name_to_fqbins/2]).\n-export([fqbin_to_msg_name/1]).\n-export([msg_name_to_fqbin/1]).\n-export([fqbin_to_enum_name/1]).\n-export([enum_name_to_fqbin/1]).\n-export([get_package_name/0]).\n-export([uses_packages/0]).\n-export([source_basename/0]).\n-export([get_all_source_basenames/0]).\n-export([get_all_proto_names/0]).\n-export([get_msg_containment/1]).\n-export([get_pkg_containment/1]).\n-export([get_service_containment/1]).\n-export([get_rpc_containment/1]).\n-export([get_enum_containment/1]).\n-export([get_proto_by_msg_name_as_fqbin/1]).\n-export([get_proto_by_service_name_as_fqbin/1]).\n-export([get_proto_by_enum_name_as_fqbin/1]).\n-export([get_protos_by_pkg_name_as_fqbin/1]).\n-export([descriptor/0, descriptor/1]).\n-export([gpb_version_as_string/0, gpb_version_as_list/0]).\n\n\n%% enumerated types\n\n-export_type([]).\n\n%% message types\n-type server_reflection_request() ::\n      #{host                    => iodata(),        % = 1\n        message_request         => {file_by_filename, iodata()} | {file_containing_symbol, iodata()} | {file_containing_extension, extension_request()} | {all_extension_numbers_of_type, iodata()} | {list_services, iodata()} % oneof\n       }.\n\n-type extension_request() ::\n      #{containing_type         => iodata(),        % = 1\n        extension_number        => integer()        % = 2, 32 bits\n       }.\n\n-type server_reflection_response() ::\n      #{valid_host              => iodata(),        % = 1\n        original_request        => server_reflection_request(), % = 2\n        message_response        => {file_descriptor_response, file_descriptor_response()} | {all_extension_numbers_response, extension_number_response()} | {list_services_response, list_service_response()} | {error_response, error_response()} % oneof\n       }.\n\n-type file_descriptor_response() ::\n      #{file_descriptor_proto   => [iodata()]       % = 1\n       }.\n\n-type extension_number_response() ::\n      #{base_type_name          => iodata(),        % = 1\n        extension_number        => [integer()]      % = 2, 32 bits\n       }.\n\n-type list_service_response() ::\n      #{service                 => [service_response()] % = 1\n       }.\n\n-type service_response() ::\n      #{name                    => iodata()         % = 1\n       }.\n\n-type error_response() ::\n      #{error_code              => integer(),       % = 1, 32 bits\n        error_message           => iodata()         % = 2\n       }.\n\n-export_type(['server_reflection_request'/0, 'extension_request'/0, 'server_reflection_response'/0, 'file_descriptor_response'/0, 'extension_number_response'/0, 'list_service_response'/0, 'service_response'/0, 'error_response'/0]).\n\n-spec encode_msg(server_reflection_request() | extension_request() | server_reflection_response() | file_descriptor_response() | extension_number_response() | list_service_response() | service_response() | error_response(), atom()) -> binary().\nencode_msg(Msg, MsgName) when is_atom(MsgName) ->\n    encode_msg(Msg, MsgName, []).\n\n-spec encode_msg(server_reflection_request() | extension_request() | server_reflection_response() | file_descriptor_response() | extension_number_response() | list_service_response() | service_response() | error_response(), atom(), list()) -> binary().\nencode_msg(Msg, MsgName, Opts) ->\n    case proplists:get_bool(verify, Opts) of\n        true -> verify_msg(Msg, MsgName, Opts);\n        false -> ok\n    end,\n    TrUserData = proplists:get_value(user_data, Opts),\n    case MsgName of\n        server_reflection_request ->\n            encode_msg_server_reflection_request(id(Msg,\n                                                    TrUserData),\n                                                 TrUserData);\n        extension_request ->\n            encode_msg_extension_request(id(Msg, TrUserData),\n                                         TrUserData);\n        server_reflection_response ->\n            encode_msg_server_reflection_response(id(Msg,\n                                                     TrUserData),\n                                                  TrUserData);\n        file_descriptor_response ->\n            encode_msg_file_descriptor_response(id(Msg, TrUserData),\n                                                TrUserData);\n        extension_number_response ->\n            encode_msg_extension_number_response(id(Msg,\n                                                    TrUserData),\n                                                 TrUserData);\n        list_service_response ->\n            encode_msg_list_service_response(id(Msg, TrUserData),\n                                             TrUserData);\n        service_response ->\n            encode_msg_service_response(id(Msg, TrUserData),\n                                        TrUserData);\n        error_response ->\n            encode_msg_error_response(id(Msg, TrUserData),\n                                      TrUserData)\n    end.\n\n\nencode_msg_server_reflection_request(Msg, TrUserData) ->\n    encode_msg_server_reflection_request(Msg,\n                                         <<>>,\n                                         TrUserData).\n\n\nencode_msg_server_reflection_request(#{} = M, Bin,\n                                     TrUserData) ->\n    B1 = case M of\n             #{host := F1} ->\n                 begin\n                     TrF1 = id(F1, TrUserData),\n                     case is_empty_string(TrF1) of\n                         true -> Bin;\n                         false ->\n                             e_type_string(TrF1, <<Bin/binary, 10>>, TrUserData)\n                     end\n                 end;\n             _ -> Bin\n         end,\n    case M of\n        #{message_request := F2} ->\n            case id(F2, TrUserData) of\n                {file_by_filename, TF2} ->\n                    begin\n                        TrTF2 = id(TF2, TrUserData),\n                        e_type_string(TrTF2, <<B1/binary, 26>>, TrUserData)\n                    end;\n                {file_containing_symbol, TF2} ->\n                    begin\n                        TrTF2 = id(TF2, TrUserData),\n                        e_type_string(TrTF2, <<B1/binary, 34>>, TrUserData)\n                    end;\n                {file_containing_extension, TF2} ->\n                    begin\n                        TrTF2 = id(TF2, TrUserData),\n                        e_mfield_server_reflection_request_file_containing_extension(TrTF2,\n                                                                                     <<B1/binary,\n                                                                                       42>>,\n                                                                                     TrUserData)\n                    end;\n                {all_extension_numbers_of_type, TF2} ->\n                    begin\n                        TrTF2 = id(TF2, TrUserData),\n                        e_type_string(TrTF2, <<B1/binary, 50>>, TrUserData)\n                    end;\n                {list_services, TF2} ->\n                    begin\n                        TrTF2 = id(TF2, TrUserData),\n                        e_type_string(TrTF2, <<B1/binary, 58>>, TrUserData)\n                    end\n            end;\n        _ -> B1\n    end.\n\nencode_msg_extension_request(Msg, TrUserData) ->\n    encode_msg_extension_request(Msg, <<>>, TrUserData).\n\n\nencode_msg_extension_request(#{} = M, Bin,\n                             TrUserData) ->\n    B1 = case M of\n             #{containing_type := F1} ->\n                 begin\n                     TrF1 = id(F1, TrUserData),\n                     case is_empty_string(TrF1) of\n                         true -> Bin;\n                         false ->\n                             e_type_string(TrF1, <<Bin/binary, 10>>, TrUserData)\n                     end\n                 end;\n             _ -> Bin\n         end,\n    case M of\n        #{extension_number := F2} ->\n            begin\n                TrF2 = id(F2, TrUserData),\n                if TrF2 =:= 0 -> B1;\n                   true ->\n                       e_type_int32(TrF2, <<B1/binary, 16>>, TrUserData)\n                end\n            end;\n        _ -> B1\n    end.\n\nencode_msg_server_reflection_response(Msg,\n                                      TrUserData) ->\n    encode_msg_server_reflection_response(Msg,\n                                          <<>>,\n                                          TrUserData).\n\n\nencode_msg_server_reflection_response(#{} = M, Bin,\n                                      TrUserData) ->\n    B1 = case M of\n             #{valid_host := F1} ->\n                 begin\n                     TrF1 = id(F1, TrUserData),\n                     case is_empty_string(TrF1) of\n                         true -> Bin;\n                         false ->\n                             e_type_string(TrF1, <<Bin/binary, 10>>, TrUserData)\n                     end\n                 end;\n             _ -> Bin\n         end,\n    B2 = case M of\n             #{original_request := F2} ->\n                 begin\n                     TrF2 = id(F2, TrUserData),\n                     if TrF2 =:= undefined -> B1;\n                        true ->\n                            e_mfield_server_reflection_response_original_request(TrF2,\n                                                                                 <<B1/binary,\n                                                                                   18>>,\n                                                                                 TrUserData)\n                     end\n                 end;\n             _ -> B1\n         end,\n    case M of\n        #{message_response := F3} ->\n            case id(F3, TrUserData) of\n                {file_descriptor_response, TF3} ->\n                    begin\n                        TrTF3 = id(TF3, TrUserData),\n                        e_mfield_server_reflection_response_file_descriptor_response(TrTF3,\n                                                                                     <<B2/binary,\n                                                                                       34>>,\n                                                                                     TrUserData)\n                    end;\n                {all_extension_numbers_response, TF3} ->\n                    begin\n                        TrTF3 = id(TF3, TrUserData),\n                        e_mfield_server_reflection_response_all_extension_numbers_response(TrTF3,\n                                                                                           <<B2/binary,\n                                                                                             42>>,\n                                                                                           TrUserData)\n                    end;\n                {list_services_response, TF3} ->\n                    begin\n                        TrTF3 = id(TF3, TrUserData),\n                        e_mfield_server_reflection_response_list_services_response(TrTF3,\n                                                                                   <<B2/binary,\n                                                                                     50>>,\n                                                                                   TrUserData)\n                    end;\n                {error_response, TF3} ->\n                    begin\n                        TrTF3 = id(TF3, TrUserData),\n                        e_mfield_server_reflection_response_error_response(TrTF3,\n                                                                           <<B2/binary,\n                                                                             58>>,\n                                                                           TrUserData)\n                    end\n            end;\n        _ -> B2\n    end.\n\nencode_msg_file_descriptor_response(Msg, TrUserData) ->\n    encode_msg_file_descriptor_response(Msg,\n                                        <<>>,\n                                        TrUserData).\n\n\nencode_msg_file_descriptor_response(#{} = M, Bin,\n                                    TrUserData) ->\n    case M of\n        #{file_descriptor_proto := F1} ->\n            TrF1 = id(F1, TrUserData),\n            if TrF1 == [] -> Bin;\n               true ->\n                   e_field_file_descriptor_response_file_descriptor_proto(TrF1,\n                                                                          Bin,\n                                                                          TrUserData)\n            end;\n        _ -> Bin\n    end.\n\nencode_msg_extension_number_response(Msg, TrUserData) ->\n    encode_msg_extension_number_response(Msg,\n                                         <<>>,\n                                         TrUserData).\n\n\nencode_msg_extension_number_response(#{} = M, Bin,\n                                     TrUserData) ->\n    B1 = case M of\n             #{base_type_name := F1} ->\n                 begin\n                     TrF1 = id(F1, TrUserData),\n                     case is_empty_string(TrF1) of\n                         true -> Bin;\n                         false ->\n                             e_type_string(TrF1, <<Bin/binary, 10>>, TrUserData)\n                     end\n                 end;\n             _ -> Bin\n         end,\n    case M of\n        #{extension_number := F2} ->\n            TrF2 = id(F2, TrUserData),\n            if TrF2 == [] -> B1;\n               true ->\n                   e_field_extension_number_response_extension_number(TrF2,\n                                                                      B1,\n                                                                      TrUserData)\n            end;\n        _ -> B1\n    end.\n\nencode_msg_list_service_response(Msg, TrUserData) ->\n    encode_msg_list_service_response(Msg, <<>>, TrUserData).\n\n\nencode_msg_list_service_response(#{} = M, Bin,\n                                 TrUserData) ->\n    case M of\n        #{service := F1} ->\n            TrF1 = id(F1, TrUserData),\n            if TrF1 == [] -> Bin;\n               true ->\n                   e_field_list_service_response_service(TrF1,\n                                                         Bin,\n                                                         TrUserData)\n            end;\n        _ -> Bin\n    end.\n\nencode_msg_service_response(Msg, TrUserData) ->\n    encode_msg_service_response(Msg, <<>>, TrUserData).\n\n\nencode_msg_service_response(#{} = M, Bin, TrUserData) ->\n    case M of\n        #{name := F1} ->\n            begin\n                TrF1 = id(F1, TrUserData),\n                case is_empty_string(TrF1) of\n                    true -> Bin;\n                    false ->\n                        e_type_string(TrF1, <<Bin/binary, 10>>, TrUserData)\n                end\n            end;\n        _ -> Bin\n    end.\n\nencode_msg_error_response(Msg, TrUserData) ->\n    encode_msg_error_response(Msg, <<>>, TrUserData).\n\n\nencode_msg_error_response(#{} = M, Bin, TrUserData) ->\n    B1 = case M of\n             #{error_code := F1} ->\n                 begin\n                     TrF1 = id(F1, TrUserData),\n                     if TrF1 =:= 0 -> Bin;\n                        true ->\n                            e_type_int32(TrF1, <<Bin/binary, 8>>, TrUserData)\n                     end\n                 end;\n             _ -> Bin\n         end,\n    case M of\n        #{error_message := F2} ->\n            begin\n                TrF2 = id(F2, TrUserData),\n                case is_empty_string(TrF2) of\n                    true -> B1;\n                    false ->\n                        e_type_string(TrF2, <<B1/binary, 18>>, TrUserData)\n                end\n            end;\n        _ -> B1\n    end.\n\ne_mfield_server_reflection_request_file_containing_extension(Msg,\n                                                             Bin, TrUserData) ->\n    SubBin = encode_msg_extension_request(Msg,\n                                          <<>>,\n                                          TrUserData),\n    Bin2 = e_varint(byte_size(SubBin), Bin),\n    <<Bin2/binary, SubBin/binary>>.\n\ne_mfield_server_reflection_response_original_request(Msg,\n                                                     Bin, TrUserData) ->\n    SubBin = encode_msg_server_reflection_request(Msg,\n                                                  <<>>,\n                                                  TrUserData),\n    Bin2 = e_varint(byte_size(SubBin), Bin),\n    <<Bin2/binary, SubBin/binary>>.\n\ne_mfield_server_reflection_response_file_descriptor_response(Msg,\n                                                             Bin, TrUserData) ->\n    SubBin = encode_msg_file_descriptor_response(Msg,\n                                                 <<>>,\n                                                 TrUserData),\n    Bin2 = e_varint(byte_size(SubBin), Bin),\n    <<Bin2/binary, SubBin/binary>>.\n\ne_mfield_server_reflection_response_all_extension_numbers_response(Msg,\n                                                                   Bin,\n                                                                   TrUserData) ->\n    SubBin = encode_msg_extension_number_response(Msg,\n                                                  <<>>,\n                                                  TrUserData),\n    Bin2 = e_varint(byte_size(SubBin), Bin),\n    <<Bin2/binary, SubBin/binary>>.\n\ne_mfield_server_reflection_response_list_services_response(Msg,\n                                                           Bin, TrUserData) ->\n    SubBin = encode_msg_list_service_response(Msg,\n                                              <<>>,\n                                              TrUserData),\n    Bin2 = e_varint(byte_size(SubBin), Bin),\n    <<Bin2/binary, SubBin/binary>>.\n\ne_mfield_server_reflection_response_error_response(Msg,\n                                                   Bin, TrUserData) ->\n    SubBin = encode_msg_error_response(Msg,\n                                       <<>>,\n                                       TrUserData),\n    Bin2 = e_varint(byte_size(SubBin), Bin),\n    <<Bin2/binary, SubBin/binary>>.\n\ne_field_file_descriptor_response_file_descriptor_proto([Elem\n                                                        | Rest],\n                                                       Bin, TrUserData) ->\n    Bin2 = <<Bin/binary, 10>>,\n    Bin3 = e_type_bytes(id(Elem, TrUserData),\n                        Bin2,\n                        TrUserData),\n    e_field_file_descriptor_response_file_descriptor_proto(Rest,\n                                                           Bin3,\n                                                           TrUserData);\ne_field_file_descriptor_response_file_descriptor_proto([],\n                                                       Bin, _TrUserData) ->\n    Bin.\n\ne_field_extension_number_response_extension_number(Elems,\n                                                   Bin, TrUserData)\n    when Elems =/= [] ->\n    SubBin =\n        e_pfield_extension_number_response_extension_number(Elems,\n                                                            <<>>,\n                                                            TrUserData),\n    Bin2 = <<Bin/binary, 18>>,\n    Bin3 = e_varint(byte_size(SubBin), Bin2),\n    <<Bin3/binary, SubBin/binary>>;\ne_field_extension_number_response_extension_number([],\n                                                   Bin, _TrUserData) ->\n    Bin.\n\ne_pfield_extension_number_response_extension_number([Value\n                                                     | Rest],\n                                                    Bin, TrUserData) ->\n    Bin2 = e_type_int32(id(Value, TrUserData),\n                        Bin,\n                        TrUserData),\n    e_pfield_extension_number_response_extension_number(Rest,\n                                                        Bin2,\n                                                        TrUserData);\ne_pfield_extension_number_response_extension_number([],\n                                                    Bin, _TrUserData) ->\n    Bin.\n\ne_mfield_list_service_response_service(Msg, Bin,\n                                       TrUserData) ->\n    SubBin = encode_msg_service_response(Msg,\n                                         <<>>,\n                                         TrUserData),\n    Bin2 = e_varint(byte_size(SubBin), Bin),\n    <<Bin2/binary, SubBin/binary>>.\n\ne_field_list_service_response_service([Elem | Rest],\n                                      Bin, TrUserData) ->\n    Bin2 = <<Bin/binary, 10>>,\n    Bin3 = e_mfield_list_service_response_service(id(Elem,\n                                                     TrUserData),\n                                                  Bin2,\n                                                  TrUserData),\n    e_field_list_service_response_service(Rest,\n                                          Bin3,\n                                          TrUserData);\ne_field_list_service_response_service([], Bin,\n                                      _TrUserData) ->\n    Bin.\n\n-compile({nowarn_unused_function,e_type_sint/3}).\ne_type_sint(Value, Bin, _TrUserData) when Value >= 0 ->\n    e_varint(Value * 2, Bin);\ne_type_sint(Value, Bin, _TrUserData) ->\n    e_varint(Value * -2 - 1, Bin).\n\n-compile({nowarn_unused_function,e_type_int32/3}).\ne_type_int32(Value, Bin, _TrUserData)\n    when 0 =< Value, Value =< 127 ->\n    <<Bin/binary, Value>>;\ne_type_int32(Value, Bin, _TrUserData) ->\n    <<N:64/unsigned-native>> = <<Value:64/signed-native>>,\n    e_varint(N, Bin).\n\n-compile({nowarn_unused_function,e_type_int64/3}).\ne_type_int64(Value, Bin, _TrUserData)\n    when 0 =< Value, Value =< 127 ->\n    <<Bin/binary, Value>>;\ne_type_int64(Value, Bin, _TrUserData) ->\n    <<N:64/unsigned-native>> = <<Value:64/signed-native>>,\n    e_varint(N, Bin).\n\n-compile({nowarn_unused_function,e_type_bool/3}).\ne_type_bool(true, Bin, _TrUserData) ->\n    <<Bin/binary, 1>>;\ne_type_bool(false, Bin, _TrUserData) ->\n    <<Bin/binary, 0>>;\ne_type_bool(1, Bin, _TrUserData) -> <<Bin/binary, 1>>;\ne_type_bool(0, Bin, _TrUserData) -> <<Bin/binary, 0>>.\n\n-compile({nowarn_unused_function,e_type_string/3}).\ne_type_string(S, Bin, _TrUserData) ->\n    Utf8 = unicode:characters_to_binary(S),\n    Bin2 = e_varint(byte_size(Utf8), Bin),\n    <<Bin2/binary, Utf8/binary>>.\n\n-compile({nowarn_unused_function,e_type_bytes/3}).\ne_type_bytes(Bytes, Bin, _TrUserData)\n    when is_binary(Bytes) ->\n    Bin2 = e_varint(byte_size(Bytes), Bin),\n    <<Bin2/binary, Bytes/binary>>;\ne_type_bytes(Bytes, Bin, _TrUserData)\n    when is_list(Bytes) ->\n    BytesBin = iolist_to_binary(Bytes),\n    Bin2 = e_varint(byte_size(BytesBin), Bin),\n    <<Bin2/binary, BytesBin/binary>>.\n\n-compile({nowarn_unused_function,e_type_fixed32/3}).\ne_type_fixed32(Value, Bin, _TrUserData) ->\n    <<Bin/binary, Value:32/little>>.\n\n-compile({nowarn_unused_function,e_type_sfixed32/3}).\ne_type_sfixed32(Value, Bin, _TrUserData) ->\n    <<Bin/binary, Value:32/little-signed>>.\n\n-compile({nowarn_unused_function,e_type_fixed64/3}).\ne_type_fixed64(Value, Bin, _TrUserData) ->\n    <<Bin/binary, Value:64/little>>.\n\n-compile({nowarn_unused_function,e_type_sfixed64/3}).\ne_type_sfixed64(Value, Bin, _TrUserData) ->\n    <<Bin/binary, Value:64/little-signed>>.\n\n-compile({nowarn_unused_function,e_type_float/3}).\ne_type_float(V, Bin, _) when is_number(V) ->\n    <<Bin/binary, V:32/little-float>>;\ne_type_float(infinity, Bin, _) ->\n    <<Bin/binary, 0:16, 128, 127>>;\ne_type_float('-infinity', Bin, _) ->\n    <<Bin/binary, 0:16, 128, 255>>;\ne_type_float(nan, Bin, _) ->\n    <<Bin/binary, 0:16, 192, 127>>.\n\n-compile({nowarn_unused_function,e_type_double/3}).\ne_type_double(V, Bin, _) when is_number(V) ->\n    <<Bin/binary, V:64/little-float>>;\ne_type_double(infinity, Bin, _) ->\n    <<Bin/binary, 0:48, 240, 127>>;\ne_type_double('-infinity', Bin, _) ->\n    <<Bin/binary, 0:48, 240, 255>>;\ne_type_double(nan, Bin, _) ->\n    <<Bin/binary, 0:48, 248, 127>>.\n\n-compile({nowarn_unused_function,e_varint/3}).\ne_varint(N, Bin, _TrUserData) -> e_varint(N, Bin).\n\n-compile({nowarn_unused_function,e_varint/2}).\ne_varint(N, Bin) when N =< 127 -> <<Bin/binary, N>>;\ne_varint(N, Bin) ->\n    Bin2 = <<Bin/binary, (N band 127 bor 128)>>,\n    e_varint(N bsr 7, Bin2).\n\nis_empty_string(\"\") -> true;\nis_empty_string(<<>>) -> true;\nis_empty_string(L) when is_list(L) ->\n    not string_has_chars(L);\nis_empty_string(B) when is_binary(B) -> false.\n\nstring_has_chars([C | _]) when is_integer(C) -> true;\nstring_has_chars([H | T]) ->\n    case string_has_chars(H) of\n        true -> true;\n        false -> string_has_chars(T)\n    end;\nstring_has_chars(B)\n    when is_binary(B), byte_size(B) =/= 0 ->\n    true;\nstring_has_chars(C) when is_integer(C) -> true;\nstring_has_chars(<<>>) -> false;\nstring_has_chars([]) -> false.\n\n\ndecode_msg(Bin, MsgName) when is_binary(Bin) ->\n    decode_msg(Bin, MsgName, []).\n\ndecode_msg(Bin, MsgName, Opts) when is_binary(Bin) ->\n    TrUserData = proplists:get_value(user_data, Opts),\n    decode_msg_1_catch(Bin, MsgName, TrUserData).\n\n-ifdef('OTP_RELEASE').\ndecode_msg_1_catch(Bin, MsgName, TrUserData) ->\n    try decode_msg_2_doit(MsgName, Bin, TrUserData)\n    catch Class:Reason:StackTrace -> error({gpb_error,{decoding_failure, {Bin, MsgName, {Class, Reason, StackTrace}}}})\n    end.\n-else.\ndecode_msg_1_catch(Bin, MsgName, TrUserData) ->\n    try decode_msg_2_doit(MsgName, Bin, TrUserData)\n    catch Class:Reason ->\n        StackTrace = erlang:get_stacktrace(),\n        error({gpb_error,{decoding_failure, {Bin, MsgName, {Class, Reason, StackTrace}}}})\n    end.\n-endif.\n\ndecode_msg_2_doit(server_reflection_request, Bin,\n                  TrUserData) ->\n    id(decode_msg_server_reflection_request(Bin,\n                                            TrUserData),\n       TrUserData);\ndecode_msg_2_doit(extension_request, Bin, TrUserData) ->\n    id(decode_msg_extension_request(Bin, TrUserData),\n       TrUserData);\ndecode_msg_2_doit(server_reflection_response, Bin,\n                  TrUserData) ->\n    id(decode_msg_server_reflection_response(Bin,\n                                             TrUserData),\n       TrUserData);\ndecode_msg_2_doit(file_descriptor_response, Bin,\n                  TrUserData) ->\n    id(decode_msg_file_descriptor_response(Bin, TrUserData),\n       TrUserData);\ndecode_msg_2_doit(extension_number_response, Bin,\n                  TrUserData) ->\n    id(decode_msg_extension_number_response(Bin,\n                                            TrUserData),\n       TrUserData);\ndecode_msg_2_doit(list_service_response, Bin,\n                  TrUserData) ->\n    id(decode_msg_list_service_response(Bin, TrUserData),\n       TrUserData);\ndecode_msg_2_doit(service_response, Bin, TrUserData) ->\n    id(decode_msg_service_response(Bin, TrUserData),\n       TrUserData);\ndecode_msg_2_doit(error_response, Bin, TrUserData) ->\n    id(decode_msg_error_response(Bin, TrUserData),\n       TrUserData).\n\n\n\ndecode_msg_server_reflection_request(Bin, TrUserData) ->\n    dfp_read_field_def_server_reflection_request(Bin,\n                                                 0,\n                                                 0,\n                                                 id(<<>>, TrUserData),\n                                                 id('$undef', TrUserData),\n                                                 TrUserData).\n\ndfp_read_field_def_server_reflection_request(<<10,\n                                               Rest/binary>>,\n                                             Z1, Z2, F@_1, F@_2, TrUserData) ->\n    d_field_server_reflection_request_host(Rest,\n                                           Z1,\n                                           Z2,\n                                           F@_1,\n                                           F@_2,\n                                           TrUserData);\ndfp_read_field_def_server_reflection_request(<<26,\n                                               Rest/binary>>,\n                                             Z1, Z2, F@_1, F@_2, TrUserData) ->\n    d_field_server_reflection_request_file_by_filename(Rest,\n                                                       Z1,\n                                                       Z2,\n                                                       F@_1,\n                                                       F@_2,\n                                                       TrUserData);\ndfp_read_field_def_server_reflection_request(<<34,\n                                               Rest/binary>>,\n                                             Z1, Z2, F@_1, F@_2, TrUserData) ->\n    d_field_server_reflection_request_file_containing_symbol(Rest,\n                                                             Z1,\n                                                             Z2,\n                                                             F@_1,\n                                                             F@_2,\n                                                             TrUserData);\ndfp_read_field_def_server_reflection_request(<<42,\n                                               Rest/binary>>,\n                                             Z1, Z2, F@_1, F@_2, TrUserData) ->\n    d_field_server_reflection_request_file_containing_extension(Rest,\n                                                                Z1,\n                                                                Z2,\n                                                                F@_1,\n                                                                F@_2,\n                                                                TrUserData);\ndfp_read_field_def_server_reflection_request(<<50,\n                                               Rest/binary>>,\n                                             Z1, Z2, F@_1, F@_2, TrUserData) ->\n    d_field_server_reflection_request_all_extension_numbers_of_type(Rest,\n                                                                    Z1,\n                                                                    Z2,\n                                                                    F@_1,\n                                                                    F@_2,\n                                                                    TrUserData);\ndfp_read_field_def_server_reflection_request(<<58,\n                                               Rest/binary>>,\n                                             Z1, Z2, F@_1, F@_2, TrUserData) ->\n    d_field_server_reflection_request_list_services(Rest,\n                                                    Z1,\n                                                    Z2,\n                                                    F@_1,\n                                                    F@_2,\n                                                    TrUserData);\ndfp_read_field_def_server_reflection_request(<<>>, 0, 0,\n                                             F@_1, F@_2, _) ->\n    S1 = #{host => F@_1},\n    if F@_2 == '$undef' -> S1;\n       true -> S1#{message_request => F@_2}\n    end;\ndfp_read_field_def_server_reflection_request(Other, Z1,\n                                             Z2, F@_1, F@_2, TrUserData) ->\n    dg_read_field_def_server_reflection_request(Other,\n                                                Z1,\n                                                Z2,\n                                                F@_1,\n                                                F@_2,\n                                                TrUserData).\n\ndg_read_field_def_server_reflection_request(<<1:1, X:7,\n                                              Rest/binary>>,\n                                            N, Acc, F@_1, F@_2, TrUserData)\n    when N < 32 - 7 ->\n    dg_read_field_def_server_reflection_request(Rest,\n                                                N + 7,\n                                                X bsl N + Acc,\n                                                F@_1,\n                                                F@_2,\n                                                TrUserData);\ndg_read_field_def_server_reflection_request(<<0:1, X:7,\n                                              Rest/binary>>,\n                                            N, Acc, F@_1, F@_2, TrUserData) ->\n    Key = X bsl N + Acc,\n    case Key of\n        10 ->\n            d_field_server_reflection_request_host(Rest,\n                                                   0,\n                                                   0,\n                                                   F@_1,\n                                                   F@_2,\n                                                   TrUserData);\n        26 ->\n            d_field_server_reflection_request_file_by_filename(Rest,\n                                                               0,\n                                                               0,\n                                                               F@_1,\n                                                               F@_2,\n                                                               TrUserData);\n        34 ->\n            d_field_server_reflection_request_file_containing_symbol(Rest,\n                                                                     0,\n                                                                     0,\n                                                                     F@_1,\n                                                                     F@_2,\n                                                                     TrUserData);\n        42 ->\n            d_field_server_reflection_request_file_containing_extension(Rest,\n                                                                        0,\n                                                                        0,\n                                                                        F@_1,\n                                                                        F@_2,\n                                                                        TrUserData);\n        50 ->\n            d_field_server_reflection_request_all_extension_numbers_of_type(Rest,\n                                                                            0,\n                                                                            0,\n                                                                            F@_1,\n                                                                            F@_2,\n                                                                            TrUserData);\n        58 ->\n            d_field_server_reflection_request_list_services(Rest,\n                                                            0,\n                                                            0,\n                                                            F@_1,\n                                                            F@_2,\n                                                            TrUserData);\n        _ ->\n            case Key band 7 of\n                0 ->\n                    skip_varint_server_reflection_request(Rest,\n                                                          0,\n                                                          0,\n                                                          F@_1,\n                                                          F@_2,\n                                                          TrUserData);\n                1 ->\n                    skip_64_server_reflection_request(Rest,\n                                                      0,\n                                                      0,\n                                                      F@_1,\n                                                      F@_2,\n                                                      TrUserData);\n                2 ->\n                    skip_length_delimited_server_reflection_request(Rest,\n                                                                    0,\n                                                                    0,\n                                                                    F@_1,\n                                                                    F@_2,\n                                                                    TrUserData);\n                3 ->\n                    skip_group_server_reflection_request(Rest,\n                                                         Key bsr 3,\n                                                         0,\n                                                         F@_1,\n                                                         F@_2,\n                                                         TrUserData);\n                5 ->\n                    skip_32_server_reflection_request(Rest,\n                                                      0,\n                                                      0,\n                                                      F@_1,\n                                                      F@_2,\n                                                      TrUserData)\n            end\n    end;\ndg_read_field_def_server_reflection_request(<<>>, 0, 0,\n                                            F@_1, F@_2, _) ->\n    S1 = #{host => F@_1},\n    if F@_2 == '$undef' -> S1;\n       true -> S1#{message_request => F@_2}\n    end.\n\nd_field_server_reflection_request_host(<<1:1, X:7,\n                                         Rest/binary>>,\n                                       N, Acc, F@_1, F@_2, TrUserData)\n    when N < 57 ->\n    d_field_server_reflection_request_host(Rest,\n                                           N + 7,\n                                           X bsl N + Acc,\n                                           F@_1,\n                                           F@_2,\n                                           TrUserData);\nd_field_server_reflection_request_host(<<0:1, X:7,\n                                         Rest/binary>>,\n                                       N, Acc, _, F@_2, TrUserData) ->\n    {NewFValue, RestF} = begin\n                             Len = X bsl N + Acc,\n                             <<Bytes:Len/binary, Rest2/binary>> = Rest,\n                             {id(binary:copy(Bytes), TrUserData), Rest2}\n                         end,\n    dfp_read_field_def_server_reflection_request(RestF,\n                                                 0,\n                                                 0,\n                                                 NewFValue,\n                                                 F@_2,\n                                                 TrUserData).\n\nd_field_server_reflection_request_file_by_filename(<<1:1,\n                                                     X:7, Rest/binary>>,\n                                                   N, Acc, F@_1, F@_2,\n                                                   TrUserData)\n    when N < 57 ->\n    d_field_server_reflection_request_file_by_filename(Rest,\n                                                       N + 7,\n                                                       X bsl N + Acc,\n                                                       F@_1,\n                                                       F@_2,\n                                                       TrUserData);\nd_field_server_reflection_request_file_by_filename(<<0:1,\n                                                     X:7, Rest/binary>>,\n                                                   N, Acc, F@_1, _,\n                                                   TrUserData) ->\n    {NewFValue, RestF} = begin\n                             Len = X bsl N + Acc,\n                             <<Bytes:Len/binary, Rest2/binary>> = Rest,\n                             {id(binary:copy(Bytes), TrUserData), Rest2}\n                         end,\n    dfp_read_field_def_server_reflection_request(RestF,\n                                                 0,\n                                                 0,\n                                                 F@_1,\n                                                 id({file_by_filename,\n                                                     NewFValue},\n                                                    TrUserData),\n                                                 TrUserData).\n\nd_field_server_reflection_request_file_containing_symbol(<<1:1,\n                                                           X:7, Rest/binary>>,\n                                                         N, Acc, F@_1, F@_2,\n                                                         TrUserData)\n    when N < 57 ->\n    d_field_server_reflection_request_file_containing_symbol(Rest,\n                                                             N + 7,\n                                                             X bsl N + Acc,\n                                                             F@_1,\n                                                             F@_2,\n                                                             TrUserData);\nd_field_server_reflection_request_file_containing_symbol(<<0:1,\n                                                           X:7, Rest/binary>>,\n                                                         N, Acc, F@_1, _,\n                                                         TrUserData) ->\n    {NewFValue, RestF} = begin\n                             Len = X bsl N + Acc,\n                             <<Bytes:Len/binary, Rest2/binary>> = Rest,\n                             {id(binary:copy(Bytes), TrUserData), Rest2}\n                         end,\n    dfp_read_field_def_server_reflection_request(RestF,\n                                                 0,\n                                                 0,\n                                                 F@_1,\n                                                 id({file_containing_symbol,\n                                                     NewFValue},\n                                                    TrUserData),\n                                                 TrUserData).\n\nd_field_server_reflection_request_file_containing_extension(<<1:1,\n                                                              X:7,\n                                                              Rest/binary>>,\n                                                            N, Acc, F@_1, F@_2,\n                                                            TrUserData)\n    when N < 57 ->\n    d_field_server_reflection_request_file_containing_extension(Rest,\n                                                                N + 7,\n                                                                X bsl N + Acc,\n                                                                F@_1,\n                                                                F@_2,\n                                                                TrUserData);\nd_field_server_reflection_request_file_containing_extension(<<0:1,\n                                                              X:7,\n                                                              Rest/binary>>,\n                                                            N, Acc, F@_1, Prev,\n                                                            TrUserData) ->\n    {NewFValue, RestF} = begin\n                             Len = X bsl N + Acc,\n                             <<Bs:Len/binary, Rest2/binary>> = Rest,\n                             {id(decode_msg_extension_request(Bs, TrUserData),\n                                 TrUserData),\n                              Rest2}\n                         end,\n    dfp_read_field_def_server_reflection_request(RestF,\n                                                 0,\n                                                 0,\n                                                 F@_1,\n                                                 case Prev of\n                                                     '$undef' ->\n                                                         id({file_containing_extension,\n                                                             NewFValue},\n                                                            TrUserData);\n                                                     {file_containing_extension,\n                                                      MVPrev} ->\n                                                         id({file_containing_extension,\n                                                             merge_msg_extension_request(MVPrev,\n                                                                                         NewFValue,\n                                                                                         TrUserData)},\n                                                            TrUserData);\n                                                     _ ->\n                                                         id({file_containing_extension,\n                                                             NewFValue},\n                                                            TrUserData)\n                                                 end,\n                                                 TrUserData).\n\nd_field_server_reflection_request_all_extension_numbers_of_type(<<1:1,\n                                                                  X:7,\n                                                                  Rest/binary>>,\n                                                                N, Acc, F@_1,\n                                                                F@_2,\n                                                                TrUserData)\n    when N < 57 ->\n    d_field_server_reflection_request_all_extension_numbers_of_type(Rest,\n                                                                    N + 7,\n                                                                    X bsl N +\n                                                                        Acc,\n                                                                    F@_1,\n                                                                    F@_2,\n                                                                    TrUserData);\nd_field_server_reflection_request_all_extension_numbers_of_type(<<0:1,\n                                                                  X:7,\n                                                                  Rest/binary>>,\n                                                                N, Acc, F@_1, _,\n                                                                TrUserData) ->\n    {NewFValue, RestF} = begin\n                             Len = X bsl N + Acc,\n                             <<Bytes:Len/binary, Rest2/binary>> = Rest,\n                             {id(binary:copy(Bytes), TrUserData), Rest2}\n                         end,\n    dfp_read_field_def_server_reflection_request(RestF,\n                                                 0,\n                                                 0,\n                                                 F@_1,\n                                                 id({all_extension_numbers_of_type,\n                                                     NewFValue},\n                                                    TrUserData),\n                                                 TrUserData).\n\nd_field_server_reflection_request_list_services(<<1:1,\n                                                  X:7, Rest/binary>>,\n                                                N, Acc, F@_1, F@_2, TrUserData)\n    when N < 57 ->\n    d_field_server_reflection_request_list_services(Rest,\n                                                    N + 7,\n                                                    X bsl N + Acc,\n                                                    F@_1,\n                                                    F@_2,\n                                                    TrUserData);\nd_field_server_reflection_request_list_services(<<0:1,\n                                                  X:7, Rest/binary>>,\n                                                N, Acc, F@_1, _, TrUserData) ->\n    {NewFValue, RestF} = begin\n                             Len = X bsl N + Acc,\n                             <<Bytes:Len/binary, Rest2/binary>> = Rest,\n                             {id(binary:copy(Bytes), TrUserData), Rest2}\n                         end,\n    dfp_read_field_def_server_reflection_request(RestF,\n                                                 0,\n                                                 0,\n                                                 F@_1,\n                                                 id({list_services, NewFValue},\n                                                    TrUserData),\n                                                 TrUserData).\n\nskip_varint_server_reflection_request(<<1:1, _:7,\n                                        Rest/binary>>,\n                                      Z1, Z2, F@_1, F@_2, TrUserData) ->\n    skip_varint_server_reflection_request(Rest,\n                                          Z1,\n                                          Z2,\n                                          F@_1,\n                                          F@_2,\n                                          TrUserData);\nskip_varint_server_reflection_request(<<0:1, _:7,\n                                        Rest/binary>>,\n                                      Z1, Z2, F@_1, F@_2, TrUserData) ->\n    dfp_read_field_def_server_reflection_request(Rest,\n                                                 Z1,\n                                                 Z2,\n                                                 F@_1,\n                                                 F@_2,\n                                                 TrUserData).\n\nskip_length_delimited_server_reflection_request(<<1:1,\n                                                  X:7, Rest/binary>>,\n                                                N, Acc, F@_1, F@_2, TrUserData)\n    when N < 57 ->\n    skip_length_delimited_server_reflection_request(Rest,\n                                                    N + 7,\n                                                    X bsl N + Acc,\n                                                    F@_1,\n                                                    F@_2,\n                                                    TrUserData);\nskip_length_delimited_server_reflection_request(<<0:1,\n                                                  X:7, Rest/binary>>,\n                                                N, Acc, F@_1, F@_2,\n                                                TrUserData) ->\n    Length = X bsl N + Acc,\n    <<_:Length/binary, Rest2/binary>> = Rest,\n    dfp_read_field_def_server_reflection_request(Rest2,\n                                                 0,\n                                                 0,\n                                                 F@_1,\n                                                 F@_2,\n                                                 TrUserData).\n\nskip_group_server_reflection_request(Bin, FNum, Z2,\n                                     F@_1, F@_2, TrUserData) ->\n    {_, Rest} = read_group(Bin, FNum),\n    dfp_read_field_def_server_reflection_request(Rest,\n                                                 0,\n                                                 Z2,\n                                                 F@_1,\n                                                 F@_2,\n                                                 TrUserData).\n\nskip_32_server_reflection_request(<<_:32, Rest/binary>>,\n                                  Z1, Z2, F@_1, F@_2, TrUserData) ->\n    dfp_read_field_def_server_reflection_request(Rest,\n                                                 Z1,\n                                                 Z2,\n                                                 F@_1,\n                                                 F@_2,\n                                                 TrUserData).\n\nskip_64_server_reflection_request(<<_:64, Rest/binary>>,\n                                  Z1, Z2, F@_1, F@_2, TrUserData) ->\n    dfp_read_field_def_server_reflection_request(Rest,\n                                                 Z1,\n                                                 Z2,\n                                                 F@_1,\n                                                 F@_2,\n                                                 TrUserData).\n\ndecode_msg_extension_request(Bin, TrUserData) ->\n    dfp_read_field_def_extension_request(Bin,\n                                         0,\n                                         0,\n                                         id(<<>>, TrUserData),\n                                         id(0, TrUserData),\n                                         TrUserData).\n\ndfp_read_field_def_extension_request(<<10,\n                                       Rest/binary>>,\n                                     Z1, Z2, F@_1, F@_2, TrUserData) ->\n    d_field_extension_request_containing_type(Rest,\n                                              Z1,\n                                              Z2,\n                                              F@_1,\n                                              F@_2,\n                                              TrUserData);\ndfp_read_field_def_extension_request(<<16,\n                                       Rest/binary>>,\n                                     Z1, Z2, F@_1, F@_2, TrUserData) ->\n    d_field_extension_request_extension_number(Rest,\n                                               Z1,\n                                               Z2,\n                                               F@_1,\n                                               F@_2,\n                                               TrUserData);\ndfp_read_field_def_extension_request(<<>>, 0, 0, F@_1,\n                                     F@_2, _) ->\n    #{containing_type => F@_1, extension_number => F@_2};\ndfp_read_field_def_extension_request(Other, Z1, Z2,\n                                     F@_1, F@_2, TrUserData) ->\n    dg_read_field_def_extension_request(Other,\n                                        Z1,\n                                        Z2,\n                                        F@_1,\n                                        F@_2,\n                                        TrUserData).\n\ndg_read_field_def_extension_request(<<1:1, X:7,\n                                      Rest/binary>>,\n                                    N, Acc, F@_1, F@_2, TrUserData)\n    when N < 32 - 7 ->\n    dg_read_field_def_extension_request(Rest,\n                                        N + 7,\n                                        X bsl N + Acc,\n                                        F@_1,\n                                        F@_2,\n                                        TrUserData);\ndg_read_field_def_extension_request(<<0:1, X:7,\n                                      Rest/binary>>,\n                                    N, Acc, F@_1, F@_2, TrUserData) ->\n    Key = X bsl N + Acc,\n    case Key of\n        10 ->\n            d_field_extension_request_containing_type(Rest,\n                                                      0,\n                                                      0,\n                                                      F@_1,\n                                                      F@_2,\n                                                      TrUserData);\n        16 ->\n            d_field_extension_request_extension_number(Rest,\n                                                       0,\n                                                       0,\n                                                       F@_1,\n                                                       F@_2,\n                                                       TrUserData);\n        _ ->\n            case Key band 7 of\n                0 ->\n                    skip_varint_extension_request(Rest,\n                                                  0,\n                                                  0,\n                                                  F@_1,\n                                                  F@_2,\n                                                  TrUserData);\n                1 ->\n                    skip_64_extension_request(Rest,\n                                              0,\n                                              0,\n                                              F@_1,\n                                              F@_2,\n                                              TrUserData);\n                2 ->\n                    skip_length_delimited_extension_request(Rest,\n                                                            0,\n                                                            0,\n                                                            F@_1,\n                                                            F@_2,\n                                                            TrUserData);\n                3 ->\n                    skip_group_extension_request(Rest,\n                                                 Key bsr 3,\n                                                 0,\n                                                 F@_1,\n                                                 F@_2,\n                                                 TrUserData);\n                5 ->\n                    skip_32_extension_request(Rest,\n                                              0,\n                                              0,\n                                              F@_1,\n                                              F@_2,\n                                              TrUserData)\n            end\n    end;\ndg_read_field_def_extension_request(<<>>, 0, 0, F@_1,\n                                    F@_2, _) ->\n    #{containing_type => F@_1, extension_number => F@_2}.\n\nd_field_extension_request_containing_type(<<1:1, X:7,\n                                            Rest/binary>>,\n                                          N, Acc, F@_1, F@_2, TrUserData)\n    when N < 57 ->\n    d_field_extension_request_containing_type(Rest,\n                                              N + 7,\n                                              X bsl N + Acc,\n                                              F@_1,\n                                              F@_2,\n                                              TrUserData);\nd_field_extension_request_containing_type(<<0:1, X:7,\n                                            Rest/binary>>,\n                                          N, Acc, _, F@_2, TrUserData) ->\n    {NewFValue, RestF} = begin\n                             Len = X bsl N + Acc,\n                             <<Bytes:Len/binary, Rest2/binary>> = Rest,\n                             {id(binary:copy(Bytes), TrUserData), Rest2}\n                         end,\n    dfp_read_field_def_extension_request(RestF,\n                                         0,\n                                         0,\n                                         NewFValue,\n                                         F@_2,\n                                         TrUserData).\n\nd_field_extension_request_extension_number(<<1:1, X:7,\n                                             Rest/binary>>,\n                                           N, Acc, F@_1, F@_2, TrUserData)\n    when N < 57 ->\n    d_field_extension_request_extension_number(Rest,\n                                               N + 7,\n                                               X bsl N + Acc,\n                                               F@_1,\n                                               F@_2,\n                                               TrUserData);\nd_field_extension_request_extension_number(<<0:1, X:7,\n                                             Rest/binary>>,\n                                           N, Acc, F@_1, _, TrUserData) ->\n    {NewFValue, RestF} = {begin\n                              <<Res:32/signed-native>> = <<(X bsl N +\n                                                                Acc):32/unsigned-native>>,\n                              id(Res, TrUserData)\n                          end,\n                          Rest},\n    dfp_read_field_def_extension_request(RestF,\n                                         0,\n                                         0,\n                                         F@_1,\n                                         NewFValue,\n                                         TrUserData).\n\nskip_varint_extension_request(<<1:1, _:7, Rest/binary>>,\n                              Z1, Z2, F@_1, F@_2, TrUserData) ->\n    skip_varint_extension_request(Rest,\n                                  Z1,\n                                  Z2,\n                                  F@_1,\n                                  F@_2,\n                                  TrUserData);\nskip_varint_extension_request(<<0:1, _:7, Rest/binary>>,\n                              Z1, Z2, F@_1, F@_2, TrUserData) ->\n    dfp_read_field_def_extension_request(Rest,\n                                         Z1,\n                                         Z2,\n                                         F@_1,\n                                         F@_2,\n                                         TrUserData).\n\nskip_length_delimited_extension_request(<<1:1, X:7,\n                                          Rest/binary>>,\n                                        N, Acc, F@_1, F@_2, TrUserData)\n    when N < 57 ->\n    skip_length_delimited_extension_request(Rest,\n                                            N + 7,\n                                            X bsl N + Acc,\n                                            F@_1,\n                                            F@_2,\n                                            TrUserData);\nskip_length_delimited_extension_request(<<0:1, X:7,\n                                          Rest/binary>>,\n                                        N, Acc, F@_1, F@_2, TrUserData) ->\n    Length = X bsl N + Acc,\n    <<_:Length/binary, Rest2/binary>> = Rest,\n    dfp_read_field_def_extension_request(Rest2,\n                                         0,\n                                         0,\n                                         F@_1,\n                                         F@_2,\n                                         TrUserData).\n\nskip_group_extension_request(Bin, FNum, Z2, F@_1, F@_2,\n                             TrUserData) ->\n    {_, Rest} = read_group(Bin, FNum),\n    dfp_read_field_def_extension_request(Rest,\n                                         0,\n                                         Z2,\n                                         F@_1,\n                                         F@_2,\n                                         TrUserData).\n\nskip_32_extension_request(<<_:32, Rest/binary>>, Z1, Z2,\n                          F@_1, F@_2, TrUserData) ->\n    dfp_read_field_def_extension_request(Rest,\n                                         Z1,\n                                         Z2,\n                                         F@_1,\n                                         F@_2,\n                                         TrUserData).\n\nskip_64_extension_request(<<_:64, Rest/binary>>, Z1, Z2,\n                          F@_1, F@_2, TrUserData) ->\n    dfp_read_field_def_extension_request(Rest,\n                                         Z1,\n                                         Z2,\n                                         F@_1,\n                                         F@_2,\n                                         TrUserData).\n\ndecode_msg_server_reflection_response(Bin,\n                                      TrUserData) ->\n    dfp_read_field_def_server_reflection_response(Bin,\n                                                  0,\n                                                  0,\n                                                  id(<<>>, TrUserData),\n                                                  id('$undef', TrUserData),\n                                                  id('$undef', TrUserData),\n                                                  TrUserData).\n\ndfp_read_field_def_server_reflection_response(<<10,\n                                                Rest/binary>>,\n                                              Z1, Z2, F@_1, F@_2, F@_3,\n                                              TrUserData) ->\n    d_field_server_reflection_response_valid_host(Rest,\n                                                  Z1,\n                                                  Z2,\n                                                  F@_1,\n                                                  F@_2,\n                                                  F@_3,\n                                                  TrUserData);\ndfp_read_field_def_server_reflection_response(<<18,\n                                                Rest/binary>>,\n                                              Z1, Z2, F@_1, F@_2, F@_3,\n                                              TrUserData) ->\n    d_field_server_reflection_response_original_request(Rest,\n                                                        Z1,\n                                                        Z2,\n                                                        F@_1,\n                                                        F@_2,\n                                                        F@_3,\n                                                        TrUserData);\ndfp_read_field_def_server_reflection_response(<<34,\n                                                Rest/binary>>,\n                                              Z1, Z2, F@_1, F@_2, F@_3,\n                                              TrUserData) ->\n    d_field_server_reflection_response_file_descriptor_response(Rest,\n                                                                Z1,\n                                                                Z2,\n                                                                F@_1,\n                                                                F@_2,\n                                                                F@_3,\n                                                                TrUserData);\ndfp_read_field_def_server_reflection_response(<<42,\n                                                Rest/binary>>,\n                                              Z1, Z2, F@_1, F@_2, F@_3,\n                                              TrUserData) ->\n    d_field_server_reflection_response_all_extension_numbers_response(Rest,\n                                                                      Z1,\n                                                                      Z2,\n                                                                      F@_1,\n                                                                      F@_2,\n                                                                      F@_3,\n                                                                      TrUserData);\ndfp_read_field_def_server_reflection_response(<<50,\n                                                Rest/binary>>,\n                                              Z1, Z2, F@_1, F@_2, F@_3,\n                                              TrUserData) ->\n    d_field_server_reflection_response_list_services_response(Rest,\n                                                              Z1,\n                                                              Z2,\n                                                              F@_1,\n                                                              F@_2,\n                                                              F@_3,\n                                                              TrUserData);\ndfp_read_field_def_server_reflection_response(<<58,\n                                                Rest/binary>>,\n                                              Z1, Z2, F@_1, F@_2, F@_3,\n                                              TrUserData) ->\n    d_field_server_reflection_response_error_response(Rest,\n                                                      Z1,\n                                                      Z2,\n                                                      F@_1,\n                                                      F@_2,\n                                                      F@_3,\n                                                      TrUserData);\ndfp_read_field_def_server_reflection_response(<<>>, 0,\n                                              0, F@_1, F@_2, F@_3, _) ->\n    S1 = #{valid_host => F@_1},\n    S2 = if F@_2 == '$undef' -> S1;\n            true -> S1#{original_request => F@_2}\n         end,\n    if F@_3 == '$undef' -> S2;\n       true -> S2#{message_response => F@_3}\n    end;\ndfp_read_field_def_server_reflection_response(Other, Z1,\n                                              Z2, F@_1, F@_2, F@_3,\n                                              TrUserData) ->\n    dg_read_field_def_server_reflection_response(Other,\n                                                 Z1,\n                                                 Z2,\n                                                 F@_1,\n                                                 F@_2,\n                                                 F@_3,\n                                                 TrUserData).\n\ndg_read_field_def_server_reflection_response(<<1:1, X:7,\n                                               Rest/binary>>,\n                                             N, Acc, F@_1, F@_2, F@_3,\n                                             TrUserData)\n    when N < 32 - 7 ->\n    dg_read_field_def_server_reflection_response(Rest,\n                                                 N + 7,\n                                                 X bsl N + Acc,\n                                                 F@_1,\n                                                 F@_2,\n                                                 F@_3,\n                                                 TrUserData);\ndg_read_field_def_server_reflection_response(<<0:1, X:7,\n                                               Rest/binary>>,\n                                             N, Acc, F@_1, F@_2, F@_3,\n                                             TrUserData) ->\n    Key = X bsl N + Acc,\n    case Key of\n        10 ->\n            d_field_server_reflection_response_valid_host(Rest,\n                                                          0,\n                                                          0,\n                                                          F@_1,\n                                                          F@_2,\n                                                          F@_3,\n                                                          TrUserData);\n        18 ->\n            d_field_server_reflection_response_original_request(Rest,\n                                                                0,\n                                                                0,\n                                                                F@_1,\n                                                                F@_2,\n                                                                F@_3,\n                                                                TrUserData);\n        34 ->\n            d_field_server_reflection_response_file_descriptor_response(Rest,\n                                                                        0,\n                                                                        0,\n                                                                        F@_1,\n                                                                        F@_2,\n                                                                        F@_3,\n                                                                        TrUserData);\n        42 ->\n            d_field_server_reflection_response_all_extension_numbers_response(Rest,\n                                                                              0,\n                                                                              0,\n                                                                              F@_1,\n                                                                              F@_2,\n                                                                              F@_3,\n                                                                              TrUserData);\n        50 ->\n            d_field_server_reflection_response_list_services_response(Rest,\n                                                                      0,\n                                                                      0,\n                                                                      F@_1,\n                                                                      F@_2,\n                                                                      F@_3,\n                                                                      TrUserData);\n        58 ->\n            d_field_server_reflection_response_error_response(Rest,\n                                                              0,\n                                                              0,\n                                                              F@_1,\n                                                              F@_2,\n                                                              F@_3,\n                                                              TrUserData);\n        _ ->\n            case Key band 7 of\n                0 ->\n                    skip_varint_server_reflection_response(Rest,\n                                                           0,\n                                                           0,\n                                                           F@_1,\n                                                           F@_2,\n                                                           F@_3,\n                                                           TrUserData);\n                1 ->\n                    skip_64_server_reflection_response(Rest,\n                                                       0,\n                                                       0,\n                                                       F@_1,\n                                                       F@_2,\n                                                       F@_3,\n                                                       TrUserData);\n                2 ->\n                    skip_length_delimited_server_reflection_response(Rest,\n                                                                     0,\n                                                                     0,\n                                                                     F@_1,\n                                                                     F@_2,\n                                                                     F@_3,\n                                                                     TrUserData);\n                3 ->\n                    skip_group_server_reflection_response(Rest,\n                                                          Key bsr 3,\n                                                          0,\n                                                          F@_1,\n                                                          F@_2,\n                                                          F@_3,\n                                                          TrUserData);\n                5 ->\n                    skip_32_server_reflection_response(Rest,\n                                                       0,\n                                                       0,\n                                                       F@_1,\n                                                       F@_2,\n                                                       F@_3,\n                                                       TrUserData)\n            end\n    end;\ndg_read_field_def_server_reflection_response(<<>>, 0, 0,\n                                             F@_1, F@_2, F@_3, _) ->\n    S1 = #{valid_host => F@_1},\n    S2 = if F@_2 == '$undef' -> S1;\n            true -> S1#{original_request => F@_2}\n         end,\n    if F@_3 == '$undef' -> S2;\n       true -> S2#{message_response => F@_3}\n    end.\n\nd_field_server_reflection_response_valid_host(<<1:1,\n                                                X:7, Rest/binary>>,\n                                              N, Acc, F@_1, F@_2, F@_3,\n                                              TrUserData)\n    when N < 57 ->\n    d_field_server_reflection_response_valid_host(Rest,\n                                                  N + 7,\n                                                  X bsl N + Acc,\n                                                  F@_1,\n                                                  F@_2,\n                                                  F@_3,\n                                                  TrUserData);\nd_field_server_reflection_response_valid_host(<<0:1,\n                                                X:7, Rest/binary>>,\n                                              N, Acc, _, F@_2, F@_3,\n                                              TrUserData) ->\n    {NewFValue, RestF} = begin\n                             Len = X bsl N + Acc,\n                             <<Bytes:Len/binary, Rest2/binary>> = Rest,\n                             {id(binary:copy(Bytes), TrUserData), Rest2}\n                         end,\n    dfp_read_field_def_server_reflection_response(RestF,\n                                                  0,\n                                                  0,\n                                                  NewFValue,\n                                                  F@_2,\n                                                  F@_3,\n                                                  TrUserData).\n\nd_field_server_reflection_response_original_request(<<1:1,\n                                                      X:7, Rest/binary>>,\n                                                    N, Acc, F@_1, F@_2, F@_3,\n                                                    TrUserData)\n    when N < 57 ->\n    d_field_server_reflection_response_original_request(Rest,\n                                                        N + 7,\n                                                        X bsl N + Acc,\n                                                        F@_1,\n                                                        F@_2,\n                                                        F@_3,\n                                                        TrUserData);\nd_field_server_reflection_response_original_request(<<0:1,\n                                                      X:7, Rest/binary>>,\n                                                    N, Acc, F@_1, Prev, F@_3,\n                                                    TrUserData) ->\n    {NewFValue, RestF} = begin\n                             Len = X bsl N + Acc,\n                             <<Bs:Len/binary, Rest2/binary>> = Rest,\n                             {id(decode_msg_server_reflection_request(Bs,\n                                                                      TrUserData),\n                                 TrUserData),\n                              Rest2}\n                         end,\n    dfp_read_field_def_server_reflection_response(RestF,\n                                                  0,\n                                                  0,\n                                                  F@_1,\n                                                  if Prev == '$undef' ->\n                                                         NewFValue;\n                                                     true ->\n                                                         merge_msg_server_reflection_request(Prev,\n                                                                                             NewFValue,\n                                                                                             TrUserData)\n                                                  end,\n                                                  F@_3,\n                                                  TrUserData).\n\nd_field_server_reflection_response_file_descriptor_response(<<1:1,\n                                                              X:7,\n                                                              Rest/binary>>,\n                                                            N, Acc, F@_1, F@_2,\n                                                            F@_3, TrUserData)\n    when N < 57 ->\n    d_field_server_reflection_response_file_descriptor_response(Rest,\n                                                                N + 7,\n                                                                X bsl N + Acc,\n                                                                F@_1,\n                                                                F@_2,\n                                                                F@_3,\n                                                                TrUserData);\nd_field_server_reflection_response_file_descriptor_response(<<0:1,\n                                                              X:7,\n                                                              Rest/binary>>,\n                                                            N, Acc, F@_1, F@_2,\n                                                            Prev, TrUserData) ->\n    {NewFValue, RestF} = begin\n                             Len = X bsl N + Acc,\n                             <<Bs:Len/binary, Rest2/binary>> = Rest,\n                             {id(decode_msg_file_descriptor_response(Bs,\n                                                                     TrUserData),\n                                 TrUserData),\n                              Rest2}\n                         end,\n    dfp_read_field_def_server_reflection_response(RestF,\n                                                  0,\n                                                  0,\n                                                  F@_1,\n                                                  F@_2,\n                                                  case Prev of\n                                                      '$undef' ->\n                                                          id({file_descriptor_response,\n                                                              NewFValue},\n                                                             TrUserData);\n                                                      {file_descriptor_response,\n                                                       MVPrev} ->\n                                                          id({file_descriptor_response,\n                                                              merge_msg_file_descriptor_response(MVPrev,\n                                                                                                 NewFValue,\n                                                                                                 TrUserData)},\n                                                             TrUserData);\n                                                      _ ->\n                                                          id({file_descriptor_response,\n                                                              NewFValue},\n                                                             TrUserData)\n                                                  end,\n                                                  TrUserData).\n\nd_field_server_reflection_response_all_extension_numbers_response(<<1:1,\n                                                                    X:7,\n                                                                    Rest/binary>>,\n                                                                  N, Acc, F@_1,\n                                                                  F@_2, F@_3,\n                                                                  TrUserData)\n    when N < 57 ->\n    d_field_server_reflection_response_all_extension_numbers_response(Rest,\n                                                                      N + 7,\n                                                                      X bsl N +\n                                                                          Acc,\n                                                                      F@_1,\n                                                                      F@_2,\n                                                                      F@_3,\n                                                                      TrUserData);\nd_field_server_reflection_response_all_extension_numbers_response(<<0:1,\n                                                                    X:7,\n                                                                    Rest/binary>>,\n                                                                  N, Acc, F@_1,\n                                                                  F@_2, Prev,\n                                                                  TrUserData) ->\n    {NewFValue, RestF} = begin\n                             Len = X bsl N + Acc,\n                             <<Bs:Len/binary, Rest2/binary>> = Rest,\n                             {id(decode_msg_extension_number_response(Bs,\n                                                                      TrUserData),\n                                 TrUserData),\n                              Rest2}\n                         end,\n    dfp_read_field_def_server_reflection_response(RestF,\n                                                  0,\n                                                  0,\n                                                  F@_1,\n                                                  F@_2,\n                                                  case Prev of\n                                                      '$undef' ->\n                                                          id({all_extension_numbers_response,\n                                                              NewFValue},\n                                                             TrUserData);\n                                                      {all_extension_numbers_response,\n                                                       MVPrev} ->\n                                                          id({all_extension_numbers_response,\n                                                              merge_msg_extension_number_response(MVPrev,\n                                                                                                  NewFValue,\n                                                                                                  TrUserData)},\n                                                             TrUserData);\n                                                      _ ->\n                                                          id({all_extension_numbers_response,\n                                                              NewFValue},\n                                                             TrUserData)\n                                                  end,\n                                                  TrUserData).\n\nd_field_server_reflection_response_list_services_response(<<1:1,\n                                                            X:7, Rest/binary>>,\n                                                          N, Acc, F@_1, F@_2,\n                                                          F@_3, TrUserData)\n    when N < 57 ->\n    d_field_server_reflection_response_list_services_response(Rest,\n                                                              N + 7,\n                                                              X bsl N + Acc,\n                                                              F@_1,\n                                                              F@_2,\n                                                              F@_3,\n                                                              TrUserData);\nd_field_server_reflection_response_list_services_response(<<0:1,\n                                                            X:7, Rest/binary>>,\n                                                          N, Acc, F@_1, F@_2,\n                                                          Prev, TrUserData) ->\n    {NewFValue, RestF} = begin\n                             Len = X bsl N + Acc,\n                             <<Bs:Len/binary, Rest2/binary>> = Rest,\n                             {id(decode_msg_list_service_response(Bs,\n                                                                  TrUserData),\n                                 TrUserData),\n                              Rest2}\n                         end,\n    dfp_read_field_def_server_reflection_response(RestF,\n                                                  0,\n                                                  0,\n                                                  F@_1,\n                                                  F@_2,\n                                                  case Prev of\n                                                      '$undef' ->\n                                                          id({list_services_response,\n                                                              NewFValue},\n                                                             TrUserData);\n                                                      {list_services_response,\n                                                       MVPrev} ->\n                                                          id({list_services_response,\n                                                              merge_msg_list_service_response(MVPrev,\n                                                                                              NewFValue,\n                                                                                              TrUserData)},\n                                                             TrUserData);\n                                                      _ ->\n                                                          id({list_services_response,\n                                                              NewFValue},\n                                                             TrUserData)\n                                                  end,\n                                                  TrUserData).\n\nd_field_server_reflection_response_error_response(<<1:1,\n                                                    X:7, Rest/binary>>,\n                                                  N, Acc, F@_1, F@_2, F@_3,\n                                                  TrUserData)\n    when N < 57 ->\n    d_field_server_reflection_response_error_response(Rest,\n                                                      N + 7,\n                                                      X bsl N + Acc,\n                                                      F@_1,\n                                                      F@_2,\n                                                      F@_3,\n                                                      TrUserData);\nd_field_server_reflection_response_error_response(<<0:1,\n                                                    X:7, Rest/binary>>,\n                                                  N, Acc, F@_1, F@_2, Prev,\n                                                  TrUserData) ->\n    {NewFValue, RestF} = begin\n                             Len = X bsl N + Acc,\n                             <<Bs:Len/binary, Rest2/binary>> = Rest,\n                             {id(decode_msg_error_response(Bs, TrUserData),\n                                 TrUserData),\n                              Rest2}\n                         end,\n    dfp_read_field_def_server_reflection_response(RestF,\n                                                  0,\n                                                  0,\n                                                  F@_1,\n                                                  F@_2,\n                                                  case Prev of\n                                                      '$undef' ->\n                                                          id({error_response,\n                                                              NewFValue},\n                                                             TrUserData);\n                                                      {error_response,\n                                                       MVPrev} ->\n                                                          id({error_response,\n                                                              merge_msg_error_response(MVPrev,\n                                                                                       NewFValue,\n                                                                                       TrUserData)},\n                                                             TrUserData);\n                                                      _ ->\n                                                          id({error_response,\n                                                              NewFValue},\n                                                             TrUserData)\n                                                  end,\n                                                  TrUserData).\n\nskip_varint_server_reflection_response(<<1:1, _:7,\n                                         Rest/binary>>,\n                                       Z1, Z2, F@_1, F@_2, F@_3, TrUserData) ->\n    skip_varint_server_reflection_response(Rest,\n                                           Z1,\n                                           Z2,\n                                           F@_1,\n                                           F@_2,\n                                           F@_3,\n                                           TrUserData);\nskip_varint_server_reflection_response(<<0:1, _:7,\n                                         Rest/binary>>,\n                                       Z1, Z2, F@_1, F@_2, F@_3, TrUserData) ->\n    dfp_read_field_def_server_reflection_response(Rest,\n                                                  Z1,\n                                                  Z2,\n                                                  F@_1,\n                                                  F@_2,\n                                                  F@_3,\n                                                  TrUserData).\n\nskip_length_delimited_server_reflection_response(<<1:1,\n                                                   X:7, Rest/binary>>,\n                                                 N, Acc, F@_1, F@_2, F@_3,\n                                                 TrUserData)\n    when N < 57 ->\n    skip_length_delimited_server_reflection_response(Rest,\n                                                     N + 7,\n                                                     X bsl N + Acc,\n                                                     F@_1,\n                                                     F@_2,\n                                                     F@_3,\n                                                     TrUserData);\nskip_length_delimited_server_reflection_response(<<0:1,\n                                                   X:7, Rest/binary>>,\n                                                 N, Acc, F@_1, F@_2, F@_3,\n                                                 TrUserData) ->\n    Length = X bsl N + Acc,\n    <<_:Length/binary, Rest2/binary>> = Rest,\n    dfp_read_field_def_server_reflection_response(Rest2,\n                                                  0,\n                                                  0,\n                                                  F@_1,\n                                                  F@_2,\n                                                  F@_3,\n                                                  TrUserData).\n\nskip_group_server_reflection_response(Bin, FNum, Z2,\n                                      F@_1, F@_2, F@_3, TrUserData) ->\n    {_, Rest} = read_group(Bin, FNum),\n    dfp_read_field_def_server_reflection_response(Rest,\n                                                  0,\n                                                  Z2,\n                                                  F@_1,\n                                                  F@_2,\n                                                  F@_3,\n                                                  TrUserData).\n\nskip_32_server_reflection_response(<<_:32,\n                                     Rest/binary>>,\n                                   Z1, Z2, F@_1, F@_2, F@_3, TrUserData) ->\n    dfp_read_field_def_server_reflection_response(Rest,\n                                                  Z1,\n                                                  Z2,\n                                                  F@_1,\n                                                  F@_2,\n                                                  F@_3,\n                                                  TrUserData).\n\nskip_64_server_reflection_response(<<_:64,\n                                     Rest/binary>>,\n                                   Z1, Z2, F@_1, F@_2, F@_3, TrUserData) ->\n    dfp_read_field_def_server_reflection_response(Rest,\n                                                  Z1,\n                                                  Z2,\n                                                  F@_1,\n                                                  F@_2,\n                                                  F@_3,\n                                                  TrUserData).\n\ndecode_msg_file_descriptor_response(Bin, TrUserData) ->\n    dfp_read_field_def_file_descriptor_response(Bin,\n                                                0,\n                                                0,\n                                                id([], TrUserData),\n                                                TrUserData).\n\ndfp_read_field_def_file_descriptor_response(<<10,\n                                              Rest/binary>>,\n                                            Z1, Z2, F@_1, TrUserData) ->\n    d_field_file_descriptor_response_file_descriptor_proto(Rest,\n                                                           Z1,\n                                                           Z2,\n                                                           F@_1,\n                                                           TrUserData);\ndfp_read_field_def_file_descriptor_response(<<>>, 0, 0,\n                                            R1, TrUserData) ->\n    #{file_descriptor_proto =>\n          lists_reverse(R1, TrUserData)};\ndfp_read_field_def_file_descriptor_response(Other, Z1,\n                                            Z2, F@_1, TrUserData) ->\n    dg_read_field_def_file_descriptor_response(Other,\n                                               Z1,\n                                               Z2,\n                                               F@_1,\n                                               TrUserData).\n\ndg_read_field_def_file_descriptor_response(<<1:1, X:7,\n                                             Rest/binary>>,\n                                           N, Acc, F@_1, TrUserData)\n    when N < 32 - 7 ->\n    dg_read_field_def_file_descriptor_response(Rest,\n                                               N + 7,\n                                               X bsl N + Acc,\n                                               F@_1,\n                                               TrUserData);\ndg_read_field_def_file_descriptor_response(<<0:1, X:7,\n                                             Rest/binary>>,\n                                           N, Acc, F@_1, TrUserData) ->\n    Key = X bsl N + Acc,\n    case Key of\n        10 ->\n            d_field_file_descriptor_response_file_descriptor_proto(Rest,\n                                                                   0,\n                                                                   0,\n                                                                   F@_1,\n                                                                   TrUserData);\n        _ ->\n            case Key band 7 of\n                0 ->\n                    skip_varint_file_descriptor_response(Rest,\n                                                         0,\n                                                         0,\n                                                         F@_1,\n                                                         TrUserData);\n                1 ->\n                    skip_64_file_descriptor_response(Rest,\n                                                     0,\n                                                     0,\n                                                     F@_1,\n                                                     TrUserData);\n                2 ->\n                    skip_length_delimited_file_descriptor_response(Rest,\n                                                                   0,\n                                                                   0,\n                                                                   F@_1,\n                                                                   TrUserData);\n                3 ->\n                    skip_group_file_descriptor_response(Rest,\n                                                        Key bsr 3,\n                                                        0,\n                                                        F@_1,\n                                                        TrUserData);\n                5 ->\n                    skip_32_file_descriptor_response(Rest,\n                                                     0,\n                                                     0,\n                                                     F@_1,\n                                                     TrUserData)\n            end\n    end;\ndg_read_field_def_file_descriptor_response(<<>>, 0, 0,\n                                           R1, TrUserData) ->\n    #{file_descriptor_proto =>\n          lists_reverse(R1, TrUserData)}.\n\nd_field_file_descriptor_response_file_descriptor_proto(<<1:1,\n                                                         X:7, Rest/binary>>,\n                                                       N, Acc, F@_1, TrUserData)\n    when N < 57 ->\n    d_field_file_descriptor_response_file_descriptor_proto(Rest,\n                                                           N + 7,\n                                                           X bsl N + Acc,\n                                                           F@_1,\n                                                           TrUserData);\nd_field_file_descriptor_response_file_descriptor_proto(<<0:1,\n                                                         X:7, Rest/binary>>,\n                                                       N, Acc, Prev,\n                                                       TrUserData) ->\n    {NewFValue, RestF} = begin\n                             Len = X bsl N + Acc,\n                             <<Bytes:Len/binary, Rest2/binary>> = Rest,\n                             {id(binary:copy(Bytes), TrUserData), Rest2}\n                         end,\n    dfp_read_field_def_file_descriptor_response(RestF,\n                                                0,\n                                                0,\n                                                cons(NewFValue,\n                                                     Prev,\n                                                     TrUserData),\n                                                TrUserData).\n\nskip_varint_file_descriptor_response(<<1:1, _:7,\n                                       Rest/binary>>,\n                                     Z1, Z2, F@_1, TrUserData) ->\n    skip_varint_file_descriptor_response(Rest,\n                                         Z1,\n                                         Z2,\n                                         F@_1,\n                                         TrUserData);\nskip_varint_file_descriptor_response(<<0:1, _:7,\n                                       Rest/binary>>,\n                                     Z1, Z2, F@_1, TrUserData) ->\n    dfp_read_field_def_file_descriptor_response(Rest,\n                                                Z1,\n                                                Z2,\n                                                F@_1,\n                                                TrUserData).\n\nskip_length_delimited_file_descriptor_response(<<1:1,\n                                                 X:7, Rest/binary>>,\n                                               N, Acc, F@_1, TrUserData)\n    when N < 57 ->\n    skip_length_delimited_file_descriptor_response(Rest,\n                                                   N + 7,\n                                                   X bsl N + Acc,\n                                                   F@_1,\n                                                   TrUserData);\nskip_length_delimited_file_descriptor_response(<<0:1,\n                                                 X:7, Rest/binary>>,\n                                               N, Acc, F@_1, TrUserData) ->\n    Length = X bsl N + Acc,\n    <<_:Length/binary, Rest2/binary>> = Rest,\n    dfp_read_field_def_file_descriptor_response(Rest2,\n                                                0,\n                                                0,\n                                                F@_1,\n                                                TrUserData).\n\nskip_group_file_descriptor_response(Bin, FNum, Z2, F@_1,\n                                    TrUserData) ->\n    {_, Rest} = read_group(Bin, FNum),\n    dfp_read_field_def_file_descriptor_response(Rest,\n                                                0,\n                                                Z2,\n                                                F@_1,\n                                                TrUserData).\n\nskip_32_file_descriptor_response(<<_:32, Rest/binary>>,\n                                 Z1, Z2, F@_1, TrUserData) ->\n    dfp_read_field_def_file_descriptor_response(Rest,\n                                                Z1,\n                                                Z2,\n                                                F@_1,\n                                                TrUserData).\n\nskip_64_file_descriptor_response(<<_:64, Rest/binary>>,\n                                 Z1, Z2, F@_1, TrUserData) ->\n    dfp_read_field_def_file_descriptor_response(Rest,\n                                                Z1,\n                                                Z2,\n                                                F@_1,\n                                                TrUserData).\n\ndecode_msg_extension_number_response(Bin, TrUserData) ->\n    dfp_read_field_def_extension_number_response(Bin,\n                                                 0,\n                                                 0,\n                                                 id(<<>>, TrUserData),\n                                                 id([], TrUserData),\n                                                 TrUserData).\n\ndfp_read_field_def_extension_number_response(<<10,\n                                               Rest/binary>>,\n                                             Z1, Z2, F@_1, F@_2, TrUserData) ->\n    d_field_extension_number_response_base_type_name(Rest,\n                                                     Z1,\n                                                     Z2,\n                                                     F@_1,\n                                                     F@_2,\n                                                     TrUserData);\ndfp_read_field_def_extension_number_response(<<18,\n                                               Rest/binary>>,\n                                             Z1, Z2, F@_1, F@_2, TrUserData) ->\n    d_pfield_extension_number_response_extension_number(Rest,\n                                                        Z1,\n                                                        Z2,\n                                                        F@_1,\n                                                        F@_2,\n                                                        TrUserData);\ndfp_read_field_def_extension_number_response(<<16,\n                                               Rest/binary>>,\n                                             Z1, Z2, F@_1, F@_2, TrUserData) ->\n    d_field_extension_number_response_extension_number(Rest,\n                                                       Z1,\n                                                       Z2,\n                                                       F@_1,\n                                                       F@_2,\n                                                       TrUserData);\ndfp_read_field_def_extension_number_response(<<>>, 0, 0,\n                                             F@_1, R1, TrUserData) ->\n    #{base_type_name => F@_1,\n      extension_number => lists_reverse(R1, TrUserData)};\ndfp_read_field_def_extension_number_response(Other, Z1,\n                                             Z2, F@_1, F@_2, TrUserData) ->\n    dg_read_field_def_extension_number_response(Other,\n                                                Z1,\n                                                Z2,\n                                                F@_1,\n                                                F@_2,\n                                                TrUserData).\n\ndg_read_field_def_extension_number_response(<<1:1, X:7,\n                                              Rest/binary>>,\n                                            N, Acc, F@_1, F@_2, TrUserData)\n    when N < 32 - 7 ->\n    dg_read_field_def_extension_number_response(Rest,\n                                                N + 7,\n                                                X bsl N + Acc,\n                                                F@_1,\n                                                F@_2,\n                                                TrUserData);\ndg_read_field_def_extension_number_response(<<0:1, X:7,\n                                              Rest/binary>>,\n                                            N, Acc, F@_1, F@_2, TrUserData) ->\n    Key = X bsl N + Acc,\n    case Key of\n        10 ->\n            d_field_extension_number_response_base_type_name(Rest,\n                                                             0,\n                                                             0,\n                                                             F@_1,\n                                                             F@_2,\n                                                             TrUserData);\n        18 ->\n            d_pfield_extension_number_response_extension_number(Rest,\n                                                                0,\n                                                                0,\n                                                                F@_1,\n                                                                F@_2,\n                                                                TrUserData);\n        16 ->\n            d_field_extension_number_response_extension_number(Rest,\n                                                               0,\n                                                               0,\n                                                               F@_1,\n                                                               F@_2,\n                                                               TrUserData);\n        _ ->\n            case Key band 7 of\n                0 ->\n                    skip_varint_extension_number_response(Rest,\n                                                          0,\n                                                          0,\n                                                          F@_1,\n                                                          F@_2,\n                                                          TrUserData);\n                1 ->\n                    skip_64_extension_number_response(Rest,\n                                                      0,\n                                                      0,\n                                                      F@_1,\n                                                      F@_2,\n                                                      TrUserData);\n                2 ->\n                    skip_length_delimited_extension_number_response(Rest,\n                                                                    0,\n                                                                    0,\n                                                                    F@_1,\n                                                                    F@_2,\n                                                                    TrUserData);\n                3 ->\n                    skip_group_extension_number_response(Rest,\n                                                         Key bsr 3,\n                                                         0,\n                                                         F@_1,\n                                                         F@_2,\n                                                         TrUserData);\n                5 ->\n                    skip_32_extension_number_response(Rest,\n                                                      0,\n                                                      0,\n                                                      F@_1,\n                                                      F@_2,\n                                                      TrUserData)\n            end\n    end;\ndg_read_field_def_extension_number_response(<<>>, 0, 0,\n                                            F@_1, R1, TrUserData) ->\n    #{base_type_name => F@_1,\n      extension_number => lists_reverse(R1, TrUserData)}.\n\nd_field_extension_number_response_base_type_name(<<1:1,\n                                                   X:7, Rest/binary>>,\n                                                 N, Acc, F@_1, F@_2, TrUserData)\n    when N < 57 ->\n    d_field_extension_number_response_base_type_name(Rest,\n                                                     N + 7,\n                                                     X bsl N + Acc,\n                                                     F@_1,\n                                                     F@_2,\n                                                     TrUserData);\nd_field_extension_number_response_base_type_name(<<0:1,\n                                                   X:7, Rest/binary>>,\n                                                 N, Acc, _, F@_2, TrUserData) ->\n    {NewFValue, RestF} = begin\n                             Len = X bsl N + Acc,\n                             <<Bytes:Len/binary, Rest2/binary>> = Rest,\n                             {id(binary:copy(Bytes), TrUserData), Rest2}\n                         end,\n    dfp_read_field_def_extension_number_response(RestF,\n                                                 0,\n                                                 0,\n                                                 NewFValue,\n                                                 F@_2,\n                                                 TrUserData).\n\nd_field_extension_number_response_extension_number(<<1:1,\n                                                     X:7, Rest/binary>>,\n                                                   N, Acc, F@_1, F@_2,\n                                                   TrUserData)\n    when N < 57 ->\n    d_field_extension_number_response_extension_number(Rest,\n                                                       N + 7,\n                                                       X bsl N + Acc,\n                                                       F@_1,\n                                                       F@_2,\n                                                       TrUserData);\nd_field_extension_number_response_extension_number(<<0:1,\n                                                     X:7, Rest/binary>>,\n                                                   N, Acc, F@_1, Prev,\n                                                   TrUserData) ->\n    {NewFValue, RestF} = {begin\n                              <<Res:32/signed-native>> = <<(X bsl N +\n                                                                Acc):32/unsigned-native>>,\n                              id(Res, TrUserData)\n                          end,\n                          Rest},\n    dfp_read_field_def_extension_number_response(RestF,\n                                                 0,\n                                                 0,\n                                                 F@_1,\n                                                 cons(NewFValue,\n                                                      Prev,\n                                                      TrUserData),\n                                                 TrUserData).\n\nd_pfield_extension_number_response_extension_number(<<1:1,\n                                                      X:7, Rest/binary>>,\n                                                    N, Acc, F@_1, F@_2,\n                                                    TrUserData)\n    when N < 57 ->\n    d_pfield_extension_number_response_extension_number(Rest,\n                                                        N + 7,\n                                                        X bsl N + Acc,\n                                                        F@_1,\n                                                        F@_2,\n                                                        TrUserData);\nd_pfield_extension_number_response_extension_number(<<0:1,\n                                                      X:7, Rest/binary>>,\n                                                    N, Acc, F@_1, E,\n                                                    TrUserData) ->\n    Len = X bsl N + Acc,\n    <<PackedBytes:Len/binary, Rest2/binary>> = Rest,\n    NewSeq =\n        d_packed_field_extension_number_response_extension_number(PackedBytes,\n                                                                  0,\n                                                                  0,\n                                                                  E,\n                                                                  TrUserData),\n    dfp_read_field_def_extension_number_response(Rest2,\n                                                 0,\n                                                 0,\n                                                 F@_1,\n                                                 NewSeq,\n                                                 TrUserData).\n\nd_packed_field_extension_number_response_extension_number(<<1:1,\n                                                            X:7, Rest/binary>>,\n                                                          N, Acc, AccSeq,\n                                                          TrUserData)\n    when N < 57 ->\n    d_packed_field_extension_number_response_extension_number(Rest,\n                                                              N + 7,\n                                                              X bsl N + Acc,\n                                                              AccSeq,\n                                                              TrUserData);\nd_packed_field_extension_number_response_extension_number(<<0:1,\n                                                            X:7, Rest/binary>>,\n                                                          N, Acc, AccSeq,\n                                                          TrUserData) ->\n    {NewFValue, RestF} = {begin\n                              <<Res:32/signed-native>> = <<(X bsl N +\n                                                                Acc):32/unsigned-native>>,\n                              id(Res, TrUserData)\n                          end,\n                          Rest},\n    d_packed_field_extension_number_response_extension_number(RestF,\n                                                              0,\n                                                              0,\n                                                              [NewFValue\n                                                               | AccSeq],\n                                                              TrUserData);\nd_packed_field_extension_number_response_extension_number(<<>>,\n                                                          0, 0, AccSeq, _) ->\n    AccSeq.\n\nskip_varint_extension_number_response(<<1:1, _:7,\n                                        Rest/binary>>,\n                                      Z1, Z2, F@_1, F@_2, TrUserData) ->\n    skip_varint_extension_number_response(Rest,\n                                          Z1,\n                                          Z2,\n                                          F@_1,\n                                          F@_2,\n                                          TrUserData);\nskip_varint_extension_number_response(<<0:1, _:7,\n                                        Rest/binary>>,\n                                      Z1, Z2, F@_1, F@_2, TrUserData) ->\n    dfp_read_field_def_extension_number_response(Rest,\n                                                 Z1,\n                                                 Z2,\n                                                 F@_1,\n                                                 F@_2,\n                                                 TrUserData).\n\nskip_length_delimited_extension_number_response(<<1:1,\n                                                  X:7, Rest/binary>>,\n                                                N, Acc, F@_1, F@_2, TrUserData)\n    when N < 57 ->\n    skip_length_delimited_extension_number_response(Rest,\n                                                    N + 7,\n                                                    X bsl N + Acc,\n                                                    F@_1,\n                                                    F@_2,\n                                                    TrUserData);\nskip_length_delimited_extension_number_response(<<0:1,\n                                                  X:7, Rest/binary>>,\n                                                N, Acc, F@_1, F@_2,\n                                                TrUserData) ->\n    Length = X bsl N + Acc,\n    <<_:Length/binary, Rest2/binary>> = Rest,\n    dfp_read_field_def_extension_number_response(Rest2,\n                                                 0,\n                                                 0,\n                                                 F@_1,\n                                                 F@_2,\n                                                 TrUserData).\n\nskip_group_extension_number_response(Bin, FNum, Z2,\n                                     F@_1, F@_2, TrUserData) ->\n    {_, Rest} = read_group(Bin, FNum),\n    dfp_read_field_def_extension_number_response(Rest,\n                                                 0,\n                                                 Z2,\n                                                 F@_1,\n                                                 F@_2,\n                                                 TrUserData).\n\nskip_32_extension_number_response(<<_:32, Rest/binary>>,\n                                  Z1, Z2, F@_1, F@_2, TrUserData) ->\n    dfp_read_field_def_extension_number_response(Rest,\n                                                 Z1,\n                                                 Z2,\n                                                 F@_1,\n                                                 F@_2,\n                                                 TrUserData).\n\nskip_64_extension_number_response(<<_:64, Rest/binary>>,\n                                  Z1, Z2, F@_1, F@_2, TrUserData) ->\n    dfp_read_field_def_extension_number_response(Rest,\n                                                 Z1,\n                                                 Z2,\n                                                 F@_1,\n                                                 F@_2,\n                                                 TrUserData).\n\ndecode_msg_list_service_response(Bin, TrUserData) ->\n    dfp_read_field_def_list_service_response(Bin,\n                                             0,\n                                             0,\n                                             id([], TrUserData),\n                                             TrUserData).\n\ndfp_read_field_def_list_service_response(<<10,\n                                           Rest/binary>>,\n                                         Z1, Z2, F@_1, TrUserData) ->\n    d_field_list_service_response_service(Rest,\n                                          Z1,\n                                          Z2,\n                                          F@_1,\n                                          TrUserData);\ndfp_read_field_def_list_service_response(<<>>, 0, 0, R1,\n                                         TrUserData) ->\n    S1 = #{},\n    if R1 == '$undef' -> S1;\n       true -> S1#{service => lists_reverse(R1, TrUserData)}\n    end;\ndfp_read_field_def_list_service_response(Other, Z1, Z2,\n                                         F@_1, TrUserData) ->\n    dg_read_field_def_list_service_response(Other,\n                                            Z1,\n                                            Z2,\n                                            F@_1,\n                                            TrUserData).\n\ndg_read_field_def_list_service_response(<<1:1, X:7,\n                                          Rest/binary>>,\n                                        N, Acc, F@_1, TrUserData)\n    when N < 32 - 7 ->\n    dg_read_field_def_list_service_response(Rest,\n                                            N + 7,\n                                            X bsl N + Acc,\n                                            F@_1,\n                                            TrUserData);\ndg_read_field_def_list_service_response(<<0:1, X:7,\n                                          Rest/binary>>,\n                                        N, Acc, F@_1, TrUserData) ->\n    Key = X bsl N + Acc,\n    case Key of\n        10 ->\n            d_field_list_service_response_service(Rest,\n                                                  0,\n                                                  0,\n                                                  F@_1,\n                                                  TrUserData);\n        _ ->\n            case Key band 7 of\n                0 ->\n                    skip_varint_list_service_response(Rest,\n                                                      0,\n                                                      0,\n                                                      F@_1,\n                                                      TrUserData);\n                1 ->\n                    skip_64_list_service_response(Rest,\n                                                  0,\n                                                  0,\n                                                  F@_1,\n                                                  TrUserData);\n                2 ->\n                    skip_length_delimited_list_service_response(Rest,\n                                                                0,\n                                                                0,\n                                                                F@_1,\n                                                                TrUserData);\n                3 ->\n                    skip_group_list_service_response(Rest,\n                                                     Key bsr 3,\n                                                     0,\n                                                     F@_1,\n                                                     TrUserData);\n                5 ->\n                    skip_32_list_service_response(Rest,\n                                                  0,\n                                                  0,\n                                                  F@_1,\n                                                  TrUserData)\n            end\n    end;\ndg_read_field_def_list_service_response(<<>>, 0, 0, R1,\n                                        TrUserData) ->\n    S1 = #{},\n    if R1 == '$undef' -> S1;\n       true -> S1#{service => lists_reverse(R1, TrUserData)}\n    end.\n\nd_field_list_service_response_service(<<1:1, X:7,\n                                        Rest/binary>>,\n                                      N, Acc, F@_1, TrUserData)\n    when N < 57 ->\n    d_field_list_service_response_service(Rest,\n                                          N + 7,\n                                          X bsl N + Acc,\n                                          F@_1,\n                                          TrUserData);\nd_field_list_service_response_service(<<0:1, X:7,\n                                        Rest/binary>>,\n                                      N, Acc, Prev, TrUserData) ->\n    {NewFValue, RestF} = begin\n                             Len = X bsl N + Acc,\n                             <<Bs:Len/binary, Rest2/binary>> = Rest,\n                             {id(decode_msg_service_response(Bs, TrUserData),\n                                 TrUserData),\n                              Rest2}\n                         end,\n    dfp_read_field_def_list_service_response(RestF,\n                                             0,\n                                             0,\n                                             cons(NewFValue, Prev, TrUserData),\n                                             TrUserData).\n\nskip_varint_list_service_response(<<1:1, _:7,\n                                    Rest/binary>>,\n                                  Z1, Z2, F@_1, TrUserData) ->\n    skip_varint_list_service_response(Rest,\n                                      Z1,\n                                      Z2,\n                                      F@_1,\n                                      TrUserData);\nskip_varint_list_service_response(<<0:1, _:7,\n                                    Rest/binary>>,\n                                  Z1, Z2, F@_1, TrUserData) ->\n    dfp_read_field_def_list_service_response(Rest,\n                                             Z1,\n                                             Z2,\n                                             F@_1,\n                                             TrUserData).\n\nskip_length_delimited_list_service_response(<<1:1, X:7,\n                                              Rest/binary>>,\n                                            N, Acc, F@_1, TrUserData)\n    when N < 57 ->\n    skip_length_delimited_list_service_response(Rest,\n                                                N + 7,\n                                                X bsl N + Acc,\n                                                F@_1,\n                                                TrUserData);\nskip_length_delimited_list_service_response(<<0:1, X:7,\n                                              Rest/binary>>,\n                                            N, Acc, F@_1, TrUserData) ->\n    Length = X bsl N + Acc,\n    <<_:Length/binary, Rest2/binary>> = Rest,\n    dfp_read_field_def_list_service_response(Rest2,\n                                             0,\n                                             0,\n                                             F@_1,\n                                             TrUserData).\n\nskip_group_list_service_response(Bin, FNum, Z2, F@_1,\n                                 TrUserData) ->\n    {_, Rest} = read_group(Bin, FNum),\n    dfp_read_field_def_list_service_response(Rest,\n                                             0,\n                                             Z2,\n                                             F@_1,\n                                             TrUserData).\n\nskip_32_list_service_response(<<_:32, Rest/binary>>, Z1,\n                              Z2, F@_1, TrUserData) ->\n    dfp_read_field_def_list_service_response(Rest,\n                                             Z1,\n                                             Z2,\n                                             F@_1,\n                                             TrUserData).\n\nskip_64_list_service_response(<<_:64, Rest/binary>>, Z1,\n                              Z2, F@_1, TrUserData) ->\n    dfp_read_field_def_list_service_response(Rest,\n                                             Z1,\n                                             Z2,\n                                             F@_1,\n                                             TrUserData).\n\ndecode_msg_service_response(Bin, TrUserData) ->\n    dfp_read_field_def_service_response(Bin,\n                                        0,\n                                        0,\n                                        id(<<>>, TrUserData),\n                                        TrUserData).\n\ndfp_read_field_def_service_response(<<10, Rest/binary>>,\n                                    Z1, Z2, F@_1, TrUserData) ->\n    d_field_service_response_name(Rest,\n                                  Z1,\n                                  Z2,\n                                  F@_1,\n                                  TrUserData);\ndfp_read_field_def_service_response(<<>>, 0, 0, F@_1,\n                                    _) ->\n    #{name => F@_1};\ndfp_read_field_def_service_response(Other, Z1, Z2, F@_1,\n                                    TrUserData) ->\n    dg_read_field_def_service_response(Other,\n                                       Z1,\n                                       Z2,\n                                       F@_1,\n                                       TrUserData).\n\ndg_read_field_def_service_response(<<1:1, X:7,\n                                     Rest/binary>>,\n                                   N, Acc, F@_1, TrUserData)\n    when N < 32 - 7 ->\n    dg_read_field_def_service_response(Rest,\n                                       N + 7,\n                                       X bsl N + Acc,\n                                       F@_1,\n                                       TrUserData);\ndg_read_field_def_service_response(<<0:1, X:7,\n                                     Rest/binary>>,\n                                   N, Acc, F@_1, TrUserData) ->\n    Key = X bsl N + Acc,\n    case Key of\n        10 ->\n            d_field_service_response_name(Rest,\n                                          0,\n                                          0,\n                                          F@_1,\n                                          TrUserData);\n        _ ->\n            case Key band 7 of\n                0 ->\n                    skip_varint_service_response(Rest,\n                                                 0,\n                                                 0,\n                                                 F@_1,\n                                                 TrUserData);\n                1 ->\n                    skip_64_service_response(Rest, 0, 0, F@_1, TrUserData);\n                2 ->\n                    skip_length_delimited_service_response(Rest,\n                                                           0,\n                                                           0,\n                                                           F@_1,\n                                                           TrUserData);\n                3 ->\n                    skip_group_service_response(Rest,\n                                                Key bsr 3,\n                                                0,\n                                                F@_1,\n                                                TrUserData);\n                5 ->\n                    skip_32_service_response(Rest, 0, 0, F@_1, TrUserData)\n            end\n    end;\ndg_read_field_def_service_response(<<>>, 0, 0, F@_1,\n                                   _) ->\n    #{name => F@_1}.\n\nd_field_service_response_name(<<1:1, X:7, Rest/binary>>,\n                              N, Acc, F@_1, TrUserData)\n    when N < 57 ->\n    d_field_service_response_name(Rest,\n                                  N + 7,\n                                  X bsl N + Acc,\n                                  F@_1,\n                                  TrUserData);\nd_field_service_response_name(<<0:1, X:7, Rest/binary>>,\n                              N, Acc, _, TrUserData) ->\n    {NewFValue, RestF} = begin\n                             Len = X bsl N + Acc,\n                             <<Bytes:Len/binary, Rest2/binary>> = Rest,\n                             {id(binary:copy(Bytes), TrUserData), Rest2}\n                         end,\n    dfp_read_field_def_service_response(RestF,\n                                        0,\n                                        0,\n                                        NewFValue,\n                                        TrUserData).\n\nskip_varint_service_response(<<1:1, _:7, Rest/binary>>,\n                             Z1, Z2, F@_1, TrUserData) ->\n    skip_varint_service_response(Rest,\n                                 Z1,\n                                 Z2,\n                                 F@_1,\n                                 TrUserData);\nskip_varint_service_response(<<0:1, _:7, Rest/binary>>,\n                             Z1, Z2, F@_1, TrUserData) ->\n    dfp_read_field_def_service_response(Rest,\n                                        Z1,\n                                        Z2,\n                                        F@_1,\n                                        TrUserData).\n\nskip_length_delimited_service_response(<<1:1, X:7,\n                                         Rest/binary>>,\n                                       N, Acc, F@_1, TrUserData)\n    when N < 57 ->\n    skip_length_delimited_service_response(Rest,\n                                           N + 7,\n                                           X bsl N + Acc,\n                                           F@_1,\n                                           TrUserData);\nskip_length_delimited_service_response(<<0:1, X:7,\n                                         Rest/binary>>,\n                                       N, Acc, F@_1, TrUserData) ->\n    Length = X bsl N + Acc,\n    <<_:Length/binary, Rest2/binary>> = Rest,\n    dfp_read_field_def_service_response(Rest2,\n                                        0,\n                                        0,\n                                        F@_1,\n                                        TrUserData).\n\nskip_group_service_response(Bin, FNum, Z2, F@_1,\n                            TrUserData) ->\n    {_, Rest} = read_group(Bin, FNum),\n    dfp_read_field_def_service_response(Rest,\n                                        0,\n                                        Z2,\n                                        F@_1,\n                                        TrUserData).\n\nskip_32_service_response(<<_:32, Rest/binary>>, Z1, Z2,\n                         F@_1, TrUserData) ->\n    dfp_read_field_def_service_response(Rest,\n                                        Z1,\n                                        Z2,\n                                        F@_1,\n                                        TrUserData).\n\nskip_64_service_response(<<_:64, Rest/binary>>, Z1, Z2,\n                         F@_1, TrUserData) ->\n    dfp_read_field_def_service_response(Rest,\n                                        Z1,\n                                        Z2,\n                                        F@_1,\n                                        TrUserData).\n\ndecode_msg_error_response(Bin, TrUserData) ->\n    dfp_read_field_def_error_response(Bin,\n                                      0,\n                                      0,\n                                      id(0, TrUserData),\n                                      id(<<>>, TrUserData),\n                                      TrUserData).\n\ndfp_read_field_def_error_response(<<8, Rest/binary>>,\n                                  Z1, Z2, F@_1, F@_2, TrUserData) ->\n    d_field_error_response_error_code(Rest,\n                                      Z1,\n                                      Z2,\n                                      F@_1,\n                                      F@_2,\n                                      TrUserData);\ndfp_read_field_def_error_response(<<18, Rest/binary>>,\n                                  Z1, Z2, F@_1, F@_2, TrUserData) ->\n    d_field_error_response_error_message(Rest,\n                                         Z1,\n                                         Z2,\n                                         F@_1,\n                                         F@_2,\n                                         TrUserData);\ndfp_read_field_def_error_response(<<>>, 0, 0, F@_1,\n                                  F@_2, _) ->\n    #{error_code => F@_1, error_message => F@_2};\ndfp_read_field_def_error_response(Other, Z1, Z2, F@_1,\n                                  F@_2, TrUserData) ->\n    dg_read_field_def_error_response(Other,\n                                     Z1,\n                                     Z2,\n                                     F@_1,\n                                     F@_2,\n                                     TrUserData).\n\ndg_read_field_def_error_response(<<1:1, X:7,\n                                   Rest/binary>>,\n                                 N, Acc, F@_1, F@_2, TrUserData)\n    when N < 32 - 7 ->\n    dg_read_field_def_error_response(Rest,\n                                     N + 7,\n                                     X bsl N + Acc,\n                                     F@_1,\n                                     F@_2,\n                                     TrUserData);\ndg_read_field_def_error_response(<<0:1, X:7,\n                                   Rest/binary>>,\n                                 N, Acc, F@_1, F@_2, TrUserData) ->\n    Key = X bsl N + Acc,\n    case Key of\n        8 ->\n            d_field_error_response_error_code(Rest,\n                                              0,\n                                              0,\n                                              F@_1,\n                                              F@_2,\n                                              TrUserData);\n        18 ->\n            d_field_error_response_error_message(Rest,\n                                                 0,\n                                                 0,\n                                                 F@_1,\n                                                 F@_2,\n                                                 TrUserData);\n        _ ->\n            case Key band 7 of\n                0 ->\n                    skip_varint_error_response(Rest,\n                                               0,\n                                               0,\n                                               F@_1,\n                                               F@_2,\n                                               TrUserData);\n                1 ->\n                    skip_64_error_response(Rest,\n                                           0,\n                                           0,\n                                           F@_1,\n                                           F@_2,\n                                           TrUserData);\n                2 ->\n                    skip_length_delimited_error_response(Rest,\n                                                         0,\n                                                         0,\n                                                         F@_1,\n                                                         F@_2,\n                                                         TrUserData);\n                3 ->\n                    skip_group_error_response(Rest,\n                                              Key bsr 3,\n                                              0,\n                                              F@_1,\n                                              F@_2,\n                                              TrUserData);\n                5 ->\n                    skip_32_error_response(Rest,\n                                           0,\n                                           0,\n                                           F@_1,\n                                           F@_2,\n                                           TrUserData)\n            end\n    end;\ndg_read_field_def_error_response(<<>>, 0, 0, F@_1, F@_2,\n                                 _) ->\n    #{error_code => F@_1, error_message => F@_2}.\n\nd_field_error_response_error_code(<<1:1, X:7,\n                                    Rest/binary>>,\n                                  N, Acc, F@_1, F@_2, TrUserData)\n    when N < 57 ->\n    d_field_error_response_error_code(Rest,\n                                      N + 7,\n                                      X bsl N + Acc,\n                                      F@_1,\n                                      F@_2,\n                                      TrUserData);\nd_field_error_response_error_code(<<0:1, X:7,\n                                    Rest/binary>>,\n                                  N, Acc, _, F@_2, TrUserData) ->\n    {NewFValue, RestF} = {begin\n                              <<Res:32/signed-native>> = <<(X bsl N +\n                                                                Acc):32/unsigned-native>>,\n                              id(Res, TrUserData)\n                          end,\n                          Rest},\n    dfp_read_field_def_error_response(RestF,\n                                      0,\n                                      0,\n                                      NewFValue,\n                                      F@_2,\n                                      TrUserData).\n\nd_field_error_response_error_message(<<1:1, X:7,\n                                       Rest/binary>>,\n                                     N, Acc, F@_1, F@_2, TrUserData)\n    when N < 57 ->\n    d_field_error_response_error_message(Rest,\n                                         N + 7,\n                                         X bsl N + Acc,\n                                         F@_1,\n                                         F@_2,\n                                         TrUserData);\nd_field_error_response_error_message(<<0:1, X:7,\n                                       Rest/binary>>,\n                                     N, Acc, F@_1, _, TrUserData) ->\n    {NewFValue, RestF} = begin\n                             Len = X bsl N + Acc,\n                             <<Bytes:Len/binary, Rest2/binary>> = Rest,\n                             {id(binary:copy(Bytes), TrUserData), Rest2}\n                         end,\n    dfp_read_field_def_error_response(RestF,\n                                      0,\n                                      0,\n                                      F@_1,\n                                      NewFValue,\n                                      TrUserData).\n\nskip_varint_error_response(<<1:1, _:7, Rest/binary>>,\n                           Z1, Z2, F@_1, F@_2, TrUserData) ->\n    skip_varint_error_response(Rest,\n                               Z1,\n                               Z2,\n                               F@_1,\n                               F@_2,\n                               TrUserData);\nskip_varint_error_response(<<0:1, _:7, Rest/binary>>,\n                           Z1, Z2, F@_1, F@_2, TrUserData) ->\n    dfp_read_field_def_error_response(Rest,\n                                      Z1,\n                                      Z2,\n                                      F@_1,\n                                      F@_2,\n                                      TrUserData).\n\nskip_length_delimited_error_response(<<1:1, X:7,\n                                       Rest/binary>>,\n                                     N, Acc, F@_1, F@_2, TrUserData)\n    when N < 57 ->\n    skip_length_delimited_error_response(Rest,\n                                         N + 7,\n                                         X bsl N + Acc,\n                                         F@_1,\n                                         F@_2,\n                                         TrUserData);\nskip_length_delimited_error_response(<<0:1, X:7,\n                                       Rest/binary>>,\n                                     N, Acc, F@_1, F@_2, TrUserData) ->\n    Length = X bsl N + Acc,\n    <<_:Length/binary, Rest2/binary>> = Rest,\n    dfp_read_field_def_error_response(Rest2,\n                                      0,\n                                      0,\n                                      F@_1,\n                                      F@_2,\n                                      TrUserData).\n\nskip_group_error_response(Bin, FNum, Z2, F@_1, F@_2,\n                          TrUserData) ->\n    {_, Rest} = read_group(Bin, FNum),\n    dfp_read_field_def_error_response(Rest,\n                                      0,\n                                      Z2,\n                                      F@_1,\n                                      F@_2,\n                                      TrUserData).\n\nskip_32_error_response(<<_:32, Rest/binary>>, Z1, Z2,\n                       F@_1, F@_2, TrUserData) ->\n    dfp_read_field_def_error_response(Rest,\n                                      Z1,\n                                      Z2,\n                                      F@_1,\n                                      F@_2,\n                                      TrUserData).\n\nskip_64_error_response(<<_:64, Rest/binary>>, Z1, Z2,\n                       F@_1, F@_2, TrUserData) ->\n    dfp_read_field_def_error_response(Rest,\n                                      Z1,\n                                      Z2,\n                                      F@_1,\n                                      F@_2,\n                                      TrUserData).\n\nread_group(Bin, FieldNum) ->\n    {NumBytes, EndTagLen} = read_gr_b(Bin, 0, 0, 0, 0, FieldNum),\n    <<Group:NumBytes/binary, _:EndTagLen/binary, Rest/binary>> = Bin,\n    {Group, Rest}.\n\n%% Like skipping over fields, but record the total length,\n%% Each field is <(FieldNum bsl 3) bor FieldType> ++ <FieldValue>\n%% Record the length because varints may be non-optimally encoded.\n%%\n%% Groups can be nested, but assume the same FieldNum cannot be nested\n%% because group field numbers are shared with the rest of the fields\n%% numbers. Thus we can search just for an group-end with the same\n%% field number.\n%%\n%% (The only time the same group field number could occur would\n%% be in a nested sub message, but then it would be inside a\n%% length-delimited entry, which we skip-read by length.)\nread_gr_b(<<1:1, X:7, Tl/binary>>, N, Acc, NumBytes, TagLen, FieldNum)\n  when N < (32-7) ->\n    read_gr_b(Tl, N+7, X bsl N + Acc, NumBytes, TagLen+1, FieldNum);\nread_gr_b(<<0:1, X:7, Tl/binary>>, N, Acc, NumBytes, TagLen,\n          FieldNum) ->\n    Key = X bsl N + Acc,\n    TagLen1 = TagLen + 1,\n    case {Key bsr 3, Key band 7} of\n        {FieldNum, 4} -> % 4 = group_end\n            {NumBytes, TagLen1};\n        {_, 0} -> % 0 = varint\n            read_gr_vi(Tl, 0, NumBytes + TagLen1, FieldNum);\n        {_, 1} -> % 1 = bits64\n            <<_:64, Tl2/binary>> = Tl,\n            read_gr_b(Tl2, 0, 0, NumBytes + TagLen1 + 8, 0, FieldNum);\n        {_, 2} -> % 2 = length_delimited\n            read_gr_ld(Tl, 0, 0, NumBytes + TagLen1, FieldNum);\n        {_, 3} -> % 3 = group_start\n            read_gr_b(Tl, 0, 0, NumBytes + TagLen1, 0, FieldNum);\n        {_, 4} -> % 4 = group_end\n            read_gr_b(Tl, 0, 0, NumBytes + TagLen1, 0, FieldNum);\n        {_, 5} -> % 5 = bits32\n            <<_:32, Tl2/binary>> = Tl,\n            read_gr_b(Tl2, 0, 0, NumBytes + TagLen1 + 4, 0, FieldNum)\n    end.\n\nread_gr_vi(<<1:1, _:7, Tl/binary>>, N, NumBytes, FieldNum)\n  when N < (64-7) ->\n    read_gr_vi(Tl, N+7, NumBytes+1, FieldNum);\nread_gr_vi(<<0:1, _:7, Tl/binary>>, _, NumBytes, FieldNum) ->\n    read_gr_b(Tl, 0, 0, NumBytes+1, 0, FieldNum).\n\nread_gr_ld(<<1:1, X:7, Tl/binary>>, N, Acc, NumBytes, FieldNum)\n  when N < (64-7) ->\n    read_gr_ld(Tl, N+7, X bsl N + Acc, NumBytes+1, FieldNum);\nread_gr_ld(<<0:1, X:7, Tl/binary>>, N, Acc, NumBytes, FieldNum) ->\n    Len = X bsl N + Acc,\n    NumBytes1 = NumBytes + 1,\n    <<_:Len/binary, Tl2/binary>> = Tl,\n    read_gr_b(Tl2, 0, 0, NumBytes1 + Len, 0, FieldNum).\n\nmerge_msgs(Prev, New, MsgName) when is_atom(MsgName) ->\n    merge_msgs(Prev, New, MsgName, []).\n\nmerge_msgs(Prev, New, MsgName, Opts) ->\n    TrUserData = proplists:get_value(user_data, Opts),\n    case MsgName of\n        server_reflection_request ->\n            merge_msg_server_reflection_request(Prev,\n                                                New,\n                                                TrUserData);\n        extension_request ->\n            merge_msg_extension_request(Prev, New, TrUserData);\n        server_reflection_response ->\n            merge_msg_server_reflection_response(Prev,\n                                                 New,\n                                                 TrUserData);\n        file_descriptor_response ->\n            merge_msg_file_descriptor_response(Prev,\n                                               New,\n                                               TrUserData);\n        extension_number_response ->\n            merge_msg_extension_number_response(Prev,\n                                                New,\n                                                TrUserData);\n        list_service_response ->\n            merge_msg_list_service_response(Prev, New, TrUserData);\n        service_response ->\n            merge_msg_service_response(Prev, New, TrUserData);\n        error_response ->\n            merge_msg_error_response(Prev, New, TrUserData)\n    end.\n\n-compile({nowarn_unused_function,merge_msg_server_reflection_request/3}).\nmerge_msg_server_reflection_request(PMsg, NMsg,\n                                    TrUserData) ->\n    S1 = #{},\n    S2 = case {PMsg, NMsg} of\n             {_, #{host := NFhost}} -> S1#{host => NFhost};\n             {#{host := PFhost}, _} -> S1#{host => PFhost};\n             _ -> S1\n         end,\n    case {PMsg, NMsg} of\n        {#{message_request :=\n               {file_containing_extension, OPFmessage_request}},\n         #{message_request :=\n               {file_containing_extension, ONFmessage_request}}} ->\n            S2#{message_request =>\n                    {file_containing_extension,\n                     merge_msg_extension_request(OPFmessage_request,\n                                                 ONFmessage_request,\n                                                 TrUserData)}};\n        {_, #{message_request := NFmessage_request}} ->\n            S2#{message_request => NFmessage_request};\n        {#{message_request := PFmessage_request}, _} ->\n            S2#{message_request => PFmessage_request};\n        {_, _} -> S2\n    end.\n\n-compile({nowarn_unused_function,merge_msg_extension_request/3}).\nmerge_msg_extension_request(PMsg, NMsg, _) ->\n    S1 = #{},\n    S2 = case {PMsg, NMsg} of\n             {_, #{containing_type := NFcontaining_type}} ->\n                 S1#{containing_type => NFcontaining_type};\n             {#{containing_type := PFcontaining_type}, _} ->\n                 S1#{containing_type => PFcontaining_type};\n             _ -> S1\n         end,\n    case {PMsg, NMsg} of\n        {_, #{extension_number := NFextension_number}} ->\n            S2#{extension_number => NFextension_number};\n        {#{extension_number := PFextension_number}, _} ->\n            S2#{extension_number => PFextension_number};\n        _ -> S2\n    end.\n\n-compile({nowarn_unused_function,merge_msg_server_reflection_response/3}).\nmerge_msg_server_reflection_response(PMsg, NMsg,\n                                     TrUserData) ->\n    S1 = #{},\n    S2 = case {PMsg, NMsg} of\n             {_, #{valid_host := NFvalid_host}} ->\n                 S1#{valid_host => NFvalid_host};\n             {#{valid_host := PFvalid_host}, _} ->\n                 S1#{valid_host => PFvalid_host};\n             _ -> S1\n         end,\n    S3 = case {PMsg, NMsg} of\n             {#{original_request := PForiginal_request},\n              #{original_request := NForiginal_request}} ->\n                 S2#{original_request =>\n                         merge_msg_server_reflection_request(PForiginal_request,\n                                                             NForiginal_request,\n                                                             TrUserData)};\n             {_, #{original_request := NForiginal_request}} ->\n                 S2#{original_request => NForiginal_request};\n             {#{original_request := PForiginal_request}, _} ->\n                 S2#{original_request => PForiginal_request};\n             {_, _} -> S2\n         end,\n    case {PMsg, NMsg} of\n        {#{message_response :=\n               {file_descriptor_response, OPFmessage_response}},\n         #{message_response :=\n               {file_descriptor_response, ONFmessage_response}}} ->\n            S3#{message_response =>\n                    {file_descriptor_response,\n                     merge_msg_file_descriptor_response(OPFmessage_response,\n                                                        ONFmessage_response,\n                                                        TrUserData)}};\n        {#{message_response :=\n               {all_extension_numbers_response, OPFmessage_response}},\n         #{message_response :=\n               {all_extension_numbers_response,\n                ONFmessage_response}}} ->\n            S3#{message_response =>\n                    {all_extension_numbers_response,\n                     merge_msg_extension_number_response(OPFmessage_response,\n                                                         ONFmessage_response,\n                                                         TrUserData)}};\n        {#{message_response :=\n               {list_services_response, OPFmessage_response}},\n         #{message_response :=\n               {list_services_response, ONFmessage_response}}} ->\n            S3#{message_response =>\n                    {list_services_response,\n                     merge_msg_list_service_response(OPFmessage_response,\n                                                     ONFmessage_response,\n                                                     TrUserData)}};\n        {#{message_response :=\n               {error_response, OPFmessage_response}},\n         #{message_response :=\n               {error_response, ONFmessage_response}}} ->\n            S3#{message_response =>\n                    {error_response,\n                     merge_msg_error_response(OPFmessage_response,\n                                              ONFmessage_response,\n                                              TrUserData)}};\n        {_, #{message_response := NFmessage_response}} ->\n            S3#{message_response => NFmessage_response};\n        {#{message_response := PFmessage_response}, _} ->\n            S3#{message_response => PFmessage_response};\n        {_, _} -> S3\n    end.\n\n-compile({nowarn_unused_function,merge_msg_file_descriptor_response/3}).\nmerge_msg_file_descriptor_response(PMsg, NMsg,\n                                   TrUserData) ->\n    S1 = #{},\n    case {PMsg, NMsg} of\n        {#{file_descriptor_proto := PFfile_descriptor_proto},\n         #{file_descriptor_proto := NFfile_descriptor_proto}} ->\n            S1#{file_descriptor_proto =>\n                    'erlang_++'(PFfile_descriptor_proto,\n                                NFfile_descriptor_proto,\n                                TrUserData)};\n        {_,\n         #{file_descriptor_proto := NFfile_descriptor_proto}} ->\n            S1#{file_descriptor_proto => NFfile_descriptor_proto};\n        {#{file_descriptor_proto := PFfile_descriptor_proto},\n         _} ->\n            S1#{file_descriptor_proto => PFfile_descriptor_proto};\n        {_, _} -> S1\n    end.\n\n-compile({nowarn_unused_function,merge_msg_extension_number_response/3}).\nmerge_msg_extension_number_response(PMsg, NMsg,\n                                    TrUserData) ->\n    S1 = #{},\n    S2 = case {PMsg, NMsg} of\n             {_, #{base_type_name := NFbase_type_name}} ->\n                 S1#{base_type_name => NFbase_type_name};\n             {#{base_type_name := PFbase_type_name}, _} ->\n                 S1#{base_type_name => PFbase_type_name};\n             _ -> S1\n         end,\n    case {PMsg, NMsg} of\n        {#{extension_number := PFextension_number},\n         #{extension_number := NFextension_number}} ->\n            S2#{extension_number =>\n                    'erlang_++'(PFextension_number,\n                                NFextension_number,\n                                TrUserData)};\n        {_, #{extension_number := NFextension_number}} ->\n            S2#{extension_number => NFextension_number};\n        {#{extension_number := PFextension_number}, _} ->\n            S2#{extension_number => PFextension_number};\n        {_, _} -> S2\n    end.\n\n-compile({nowarn_unused_function,merge_msg_list_service_response/3}).\nmerge_msg_list_service_response(PMsg, NMsg,\n                                TrUserData) ->\n    S1 = #{},\n    case {PMsg, NMsg} of\n        {#{service := PFservice}, #{service := NFservice}} ->\n            S1#{service =>\n                    'erlang_++'(PFservice, NFservice, TrUserData)};\n        {_, #{service := NFservice}} ->\n            S1#{service => NFservice};\n        {#{service := PFservice}, _} ->\n            S1#{service => PFservice};\n        {_, _} -> S1\n    end.\n\n-compile({nowarn_unused_function,merge_msg_service_response/3}).\nmerge_msg_service_response(PMsg, NMsg, _) ->\n    S1 = #{},\n    case {PMsg, NMsg} of\n        {_, #{name := NFname}} -> S1#{name => NFname};\n        {#{name := PFname}, _} -> S1#{name => PFname};\n        _ -> S1\n    end.\n\n-compile({nowarn_unused_function,merge_msg_error_response/3}).\nmerge_msg_error_response(PMsg, NMsg, _) ->\n    S1 = #{},\n    S2 = case {PMsg, NMsg} of\n             {_, #{error_code := NFerror_code}} ->\n                 S1#{error_code => NFerror_code};\n             {#{error_code := PFerror_code}, _} ->\n                 S1#{error_code => PFerror_code};\n             _ -> S1\n         end,\n    case {PMsg, NMsg} of\n        {_, #{error_message := NFerror_message}} ->\n            S2#{error_message => NFerror_message};\n        {#{error_message := PFerror_message}, _} ->\n            S2#{error_message => PFerror_message};\n        _ -> S2\n    end.\n\n\nverify_msg(Msg, MsgName) when is_atom(MsgName) ->\n    verify_msg(Msg, MsgName, []).\n\nverify_msg(Msg, MsgName, Opts) ->\n    TrUserData = proplists:get_value(user_data, Opts),\n    case MsgName of\n        server_reflection_request ->\n            v_msg_server_reflection_request(Msg,\n                                            [MsgName],\n                                            TrUserData);\n        extension_request ->\n            v_msg_extension_request(Msg, [MsgName], TrUserData);\n        server_reflection_response ->\n            v_msg_server_reflection_response(Msg,\n                                             [MsgName],\n                                             TrUserData);\n        file_descriptor_response ->\n            v_msg_file_descriptor_response(Msg,\n                                           [MsgName],\n                                           TrUserData);\n        extension_number_response ->\n            v_msg_extension_number_response(Msg,\n                                            [MsgName],\n                                            TrUserData);\n        list_service_response ->\n            v_msg_list_service_response(Msg, [MsgName], TrUserData);\n        service_response ->\n            v_msg_service_response(Msg, [MsgName], TrUserData);\n        error_response ->\n            v_msg_error_response(Msg, [MsgName], TrUserData);\n        _ -> mk_type_error(not_a_known_message, Msg, [])\n    end.\n\n\n-compile({nowarn_unused_function,v_msg_server_reflection_request/3}).\n-dialyzer({nowarn_function,v_msg_server_reflection_request/3}).\nv_msg_server_reflection_request(#{} = M, Path,\n                                TrUserData) ->\n    case M of\n        #{host := F1} ->\n            v_type_string(F1, [host | Path], TrUserData);\n        _ -> ok\n    end,\n    case M of\n        #{message_request := {file_by_filename, OF2}} ->\n            v_type_string(OF2,\n                          [file_by_filename, message_request | Path],\n                          TrUserData);\n        #{message_request := {file_containing_symbol, OF2}} ->\n            v_type_string(OF2,\n                          [file_containing_symbol, message_request | Path],\n                          TrUserData);\n        #{message_request :=\n              {file_containing_extension, OF2}} ->\n            v_msg_extension_request(OF2,\n                                    [file_containing_extension, message_request\n                                     | Path],\n                                    TrUserData);\n        #{message_request :=\n              {all_extension_numbers_of_type, OF2}} ->\n            v_type_string(OF2,\n                          [all_extension_numbers_of_type, message_request\n                           | Path],\n                          TrUserData);\n        #{message_request := {list_services, OF2}} ->\n            v_type_string(OF2,\n                          [list_services, message_request | Path],\n                          TrUserData);\n        #{message_request := F2} ->\n            mk_type_error(invalid_oneof,\n                          F2,\n                          [message_request | Path]);\n        _ -> ok\n    end,\n    lists:foreach(fun (host) -> ok;\n                      (message_request) -> ok;\n                      (OtherKey) ->\n                          mk_type_error({extraneous_key, OtherKey}, M, Path)\n                  end,\n                  maps:keys(M)),\n    ok;\nv_msg_server_reflection_request(M, Path, _TrUserData)\n    when is_map(M) ->\n    mk_type_error({missing_fields,\n                   [] -- maps:keys(M),\n                   server_reflection_request},\n                  M,\n                  Path);\nv_msg_server_reflection_request(X, Path, _TrUserData) ->\n    mk_type_error({expected_msg, server_reflection_request},\n                  X,\n                  Path).\n\n-compile({nowarn_unused_function,v_msg_extension_request/3}).\n-dialyzer({nowarn_function,v_msg_extension_request/3}).\nv_msg_extension_request(#{} = M, Path, TrUserData) ->\n    case M of\n        #{containing_type := F1} ->\n            v_type_string(F1, [containing_type | Path], TrUserData);\n        _ -> ok\n    end,\n    case M of\n        #{extension_number := F2} ->\n            v_type_int32(F2, [extension_number | Path], TrUserData);\n        _ -> ok\n    end,\n    lists:foreach(fun (containing_type) -> ok;\n                      (extension_number) -> ok;\n                      (OtherKey) ->\n                          mk_type_error({extraneous_key, OtherKey}, M, Path)\n                  end,\n                  maps:keys(M)),\n    ok;\nv_msg_extension_request(M, Path, _TrUserData)\n    when is_map(M) ->\n    mk_type_error({missing_fields,\n                   [] -- maps:keys(M),\n                   extension_request},\n                  M,\n                  Path);\nv_msg_extension_request(X, Path, _TrUserData) ->\n    mk_type_error({expected_msg, extension_request},\n                  X,\n                  Path).\n\n-compile({nowarn_unused_function,v_msg_server_reflection_response/3}).\n-dialyzer({nowarn_function,v_msg_server_reflection_response/3}).\nv_msg_server_reflection_response(#{} = M, Path,\n                                 TrUserData) ->\n    case M of\n        #{valid_host := F1} ->\n            v_type_string(F1, [valid_host | Path], TrUserData);\n        _ -> ok\n    end,\n    case M of\n        #{original_request := F2} ->\n            v_msg_server_reflection_request(F2,\n                                            [original_request | Path],\n                                            TrUserData);\n        _ -> ok\n    end,\n    case M of\n        #{message_response :=\n              {file_descriptor_response, OF3}} ->\n            v_msg_file_descriptor_response(OF3,\n                                           [file_descriptor_response,\n                                            message_response\n                                            | Path],\n                                           TrUserData);\n        #{message_response :=\n              {all_extension_numbers_response, OF3}} ->\n            v_msg_extension_number_response(OF3,\n                                            [all_extension_numbers_response,\n                                             message_response\n                                             | Path],\n                                            TrUserData);\n        #{message_response := {list_services_response, OF3}} ->\n            v_msg_list_service_response(OF3,\n                                        [list_services_response,\n                                         message_response\n                                         | Path],\n                                        TrUserData);\n        #{message_response := {error_response, OF3}} ->\n            v_msg_error_response(OF3,\n                                 [error_response, message_response | Path],\n                                 TrUserData);\n        #{message_response := F3} ->\n            mk_type_error(invalid_oneof,\n                          F3,\n                          [message_response | Path]);\n        _ -> ok\n    end,\n    lists:foreach(fun (valid_host) -> ok;\n                      (original_request) -> ok;\n                      (message_response) -> ok;\n                      (OtherKey) ->\n                          mk_type_error({extraneous_key, OtherKey}, M, Path)\n                  end,\n                  maps:keys(M)),\n    ok;\nv_msg_server_reflection_response(M, Path, _TrUserData)\n    when is_map(M) ->\n    mk_type_error({missing_fields,\n                   [] -- maps:keys(M),\n                   server_reflection_response},\n                  M,\n                  Path);\nv_msg_server_reflection_response(X, Path,\n                                 _TrUserData) ->\n    mk_type_error({expected_msg,\n                   server_reflection_response},\n                  X,\n                  Path).\n\n-compile({nowarn_unused_function,v_msg_file_descriptor_response/3}).\n-dialyzer({nowarn_function,v_msg_file_descriptor_response/3}).\nv_msg_file_descriptor_response(#{} = M, Path,\n                               TrUserData) ->\n    case M of\n        #{file_descriptor_proto := F1} ->\n            if is_list(F1) ->\n                   _ = [v_type_bytes(Elem,\n                                     [file_descriptor_proto | Path],\n                                     TrUserData)\n                        || Elem <- F1],\n                   ok;\n               true ->\n                   mk_type_error({invalid_list_of, bytes},\n                                 F1,\n                                 [file_descriptor_proto | Path])\n            end;\n        _ -> ok\n    end,\n    lists:foreach(fun (file_descriptor_proto) -> ok;\n                      (OtherKey) ->\n                          mk_type_error({extraneous_key, OtherKey}, M, Path)\n                  end,\n                  maps:keys(M)),\n    ok;\nv_msg_file_descriptor_response(M, Path, _TrUserData)\n    when is_map(M) ->\n    mk_type_error({missing_fields,\n                   [] -- maps:keys(M),\n                   file_descriptor_response},\n                  M,\n                  Path);\nv_msg_file_descriptor_response(X, Path, _TrUserData) ->\n    mk_type_error({expected_msg, file_descriptor_response},\n                  X,\n                  Path).\n\n-compile({nowarn_unused_function,v_msg_extension_number_response/3}).\n-dialyzer({nowarn_function,v_msg_extension_number_response/3}).\nv_msg_extension_number_response(#{} = M, Path,\n                                TrUserData) ->\n    case M of\n        #{base_type_name := F1} ->\n            v_type_string(F1, [base_type_name | Path], TrUserData);\n        _ -> ok\n    end,\n    case M of\n        #{extension_number := F2} ->\n            if is_list(F2) ->\n                   _ = [v_type_int32(Elem,\n                                     [extension_number | Path],\n                                     TrUserData)\n                        || Elem <- F2],\n                   ok;\n               true ->\n                   mk_type_error({invalid_list_of, int32},\n                                 F2,\n                                 [extension_number | Path])\n            end;\n        _ -> ok\n    end,\n    lists:foreach(fun (base_type_name) -> ok;\n                      (extension_number) -> ok;\n                      (OtherKey) ->\n                          mk_type_error({extraneous_key, OtherKey}, M, Path)\n                  end,\n                  maps:keys(M)),\n    ok;\nv_msg_extension_number_response(M, Path, _TrUserData)\n    when is_map(M) ->\n    mk_type_error({missing_fields,\n                   [] -- maps:keys(M),\n                   extension_number_response},\n                  M,\n                  Path);\nv_msg_extension_number_response(X, Path, _TrUserData) ->\n    mk_type_error({expected_msg, extension_number_response},\n                  X,\n                  Path).\n\n-compile({nowarn_unused_function,v_msg_list_service_response/3}).\n-dialyzer({nowarn_function,v_msg_list_service_response/3}).\nv_msg_list_service_response(#{} = M, Path,\n                            TrUserData) ->\n    case M of\n        #{service := F1} ->\n            if is_list(F1) ->\n                   _ = [v_msg_service_response(Elem,\n                                               [service | Path],\n                                               TrUserData)\n                        || Elem <- F1],\n                   ok;\n               true ->\n                   mk_type_error({invalid_list_of,\n                                  {msg, service_response}},\n                                 F1,\n                                 [service | Path])\n            end;\n        _ -> ok\n    end,\n    lists:foreach(fun (service) -> ok;\n                      (OtherKey) ->\n                          mk_type_error({extraneous_key, OtherKey}, M, Path)\n                  end,\n                  maps:keys(M)),\n    ok;\nv_msg_list_service_response(M, Path, _TrUserData)\n    when is_map(M) ->\n    mk_type_error({missing_fields,\n                   [] -- maps:keys(M),\n                   list_service_response},\n                  M,\n                  Path);\nv_msg_list_service_response(X, Path, _TrUserData) ->\n    mk_type_error({expected_msg, list_service_response},\n                  X,\n                  Path).\n\n-compile({nowarn_unused_function,v_msg_service_response/3}).\n-dialyzer({nowarn_function,v_msg_service_response/3}).\nv_msg_service_response(#{} = M, Path, TrUserData) ->\n    case M of\n        #{name := F1} ->\n            v_type_string(F1, [name | Path], TrUserData);\n        _ -> ok\n    end,\n    lists:foreach(fun (name) -> ok;\n                      (OtherKey) ->\n                          mk_type_error({extraneous_key, OtherKey}, M, Path)\n                  end,\n                  maps:keys(M)),\n    ok;\nv_msg_service_response(M, Path, _TrUserData)\n    when is_map(M) ->\n    mk_type_error({missing_fields,\n                   [] -- maps:keys(M),\n                   service_response},\n                  M,\n                  Path);\nv_msg_service_response(X, Path, _TrUserData) ->\n    mk_type_error({expected_msg, service_response},\n                  X,\n                  Path).\n\n-compile({nowarn_unused_function,v_msg_error_response/3}).\n-dialyzer({nowarn_function,v_msg_error_response/3}).\nv_msg_error_response(#{} = M, Path, TrUserData) ->\n    case M of\n        #{error_code := F1} ->\n            v_type_int32(F1, [error_code | Path], TrUserData);\n        _ -> ok\n    end,\n    case M of\n        #{error_message := F2} ->\n            v_type_string(F2, [error_message | Path], TrUserData);\n        _ -> ok\n    end,\n    lists:foreach(fun (error_code) -> ok;\n                      (error_message) -> ok;\n                      (OtherKey) ->\n                          mk_type_error({extraneous_key, OtherKey}, M, Path)\n                  end,\n                  maps:keys(M)),\n    ok;\nv_msg_error_response(M, Path, _TrUserData)\n    when is_map(M) ->\n    mk_type_error({missing_fields,\n                   [] -- maps:keys(M),\n                   error_response},\n                  M,\n                  Path);\nv_msg_error_response(X, Path, _TrUserData) ->\n    mk_type_error({expected_msg, error_response}, X, Path).\n\n-compile({nowarn_unused_function,v_type_int32/3}).\n-dialyzer({nowarn_function,v_type_int32/3}).\nv_type_int32(N, _Path, _TrUserData)\n    when -2147483648 =< N, N =< 2147483647 ->\n    ok;\nv_type_int32(N, Path, _TrUserData) when is_integer(N) ->\n    mk_type_error({value_out_of_range, int32, signed, 32},\n                  N,\n                  Path);\nv_type_int32(X, Path, _TrUserData) ->\n    mk_type_error({bad_integer, int32, signed, 32},\n                  X,\n                  Path).\n\n-compile({nowarn_unused_function,v_type_string/3}).\n-dialyzer({nowarn_function,v_type_string/3}).\nv_type_string(S, Path, _TrUserData)\n    when is_list(S); is_binary(S) ->\n    try unicode:characters_to_binary(S) of\n        B when is_binary(B) -> ok;\n        {error, _, _} ->\n            mk_type_error(bad_unicode_string, S, Path)\n    catch\n        error:badarg ->\n            mk_type_error(bad_unicode_string, S, Path)\n    end;\nv_type_string(X, Path, _TrUserData) ->\n    mk_type_error(bad_unicode_string, X, Path).\n\n-compile({nowarn_unused_function,v_type_bytes/3}).\n-dialyzer({nowarn_function,v_type_bytes/3}).\nv_type_bytes(B, _Path, _TrUserData) when is_binary(B) ->\n    ok;\nv_type_bytes(B, _Path, _TrUserData) when is_list(B) ->\n    ok;\nv_type_bytes(X, Path, _TrUserData) ->\n    mk_type_error(bad_binary_value, X, Path).\n\n-compile({nowarn_unused_function,mk_type_error/3}).\n-spec mk_type_error(_, _, list()) -> no_return().\nmk_type_error(Error, ValueSeen, Path) ->\n    Path2 = prettify_path(Path),\n    erlang:error({gpb_type_error,\n                  {Error, [{value, ValueSeen}, {path, Path2}]}}).\n\n\n-compile({nowarn_unused_function,prettify_path/1}).\n-dialyzer({nowarn_function,prettify_path/1}).\nprettify_path([]) -> top_level;\nprettify_path(PathR) ->\n    list_to_atom(lists:append(lists:join(\".\",\n                                         lists:map(fun atom_to_list/1,\n                                                   lists:reverse(PathR))))).\n\n\n-compile({nowarn_unused_function,id/2}).\n-compile({inline,id/2}).\nid(X, _TrUserData) -> X.\n\n-compile({nowarn_unused_function,v_ok/3}).\n-compile({inline,v_ok/3}).\nv_ok(_Value, _Path, _TrUserData) -> ok.\n\n-compile({nowarn_unused_function,m_overwrite/3}).\n-compile({inline,m_overwrite/3}).\nm_overwrite(_Prev, New, _TrUserData) -> New.\n\n-compile({nowarn_unused_function,cons/3}).\n-compile({inline,cons/3}).\ncons(Elem, Acc, _TrUserData) -> [Elem | Acc].\n\n-compile({nowarn_unused_function,lists_reverse/2}).\n-compile({inline,lists_reverse/2}).\n'lists_reverse'(L, _TrUserData) -> lists:reverse(L).\n-compile({nowarn_unused_function,'erlang_++'/3}).\n-compile({inline,'erlang_++'/3}).\n'erlang_++'(A, B, _TrUserData) -> A ++ B.\n\nget_msg_defs() ->\n    [{{msg, server_reflection_request},\n      [#{name => host, fnum => 1, rnum => 2, type => string,\n         occurrence => optional, opts => []},\n       #{name => message_request, rnum => 3,\n         fields =>\n             [#{name => file_by_filename, fnum => 3, rnum => 3,\n                type => string, occurrence => optional, opts => []},\n              #{name => file_containing_symbol, fnum => 4, rnum => 3,\n                type => string, occurrence => optional, opts => []},\n              #{name => file_containing_extension, fnum => 5,\n                rnum => 3, type => {msg, extension_request},\n                occurrence => optional, opts => []},\n              #{name => all_extension_numbers_of_type, fnum => 6,\n                rnum => 3, type => string, occurrence => optional,\n                opts => []},\n              #{name => list_services, fnum => 7, rnum => 3,\n                type => string, occurrence => optional, opts => []}]}]},\n     {{msg, extension_request},\n      [#{name => containing_type, fnum => 1, rnum => 2,\n         type => string, occurrence => optional, opts => []},\n       #{name => extension_number, fnum => 2, rnum => 3,\n         type => int32, occurrence => optional, opts => []}]},\n     {{msg, server_reflection_response},\n      [#{name => valid_host, fnum => 1, rnum => 2,\n         type => string, occurrence => optional, opts => []},\n       #{name => original_request, fnum => 2, rnum => 3,\n         type => {msg, server_reflection_request},\n         occurrence => optional, opts => []},\n       #{name => message_response, rnum => 4,\n         fields =>\n             [#{name => file_descriptor_response, fnum => 4,\n                rnum => 4, type => {msg, file_descriptor_response},\n                occurrence => optional, opts => []},\n              #{name => all_extension_numbers_response, fnum => 5,\n                rnum => 4, type => {msg, extension_number_response},\n                occurrence => optional, opts => []},\n              #{name => list_services_response, fnum => 6, rnum => 4,\n                type => {msg, list_service_response},\n                occurrence => optional, opts => []},\n              #{name => error_response, fnum => 7, rnum => 4,\n                type => {msg, error_response}, occurrence => optional,\n                opts => []}]}]},\n     {{msg, file_descriptor_response},\n      [#{name => file_descriptor_proto, fnum => 1, rnum => 2,\n         type => bytes, occurrence => repeated, opts => []}]},\n     {{msg, extension_number_response},\n      [#{name => base_type_name, fnum => 1, rnum => 2,\n         type => string, occurrence => optional, opts => []},\n       #{name => extension_number, fnum => 2, rnum => 3,\n         type => int32, occurrence => repeated,\n         opts => [packed]}]},\n     {{msg, list_service_response},\n      [#{name => service, fnum => 1, rnum => 2,\n         type => {msg, service_response}, occurrence => repeated,\n         opts => []}]},\n     {{msg, service_response},\n      [#{name => name, fnum => 1, rnum => 2, type => string,\n         occurrence => optional, opts => []}]},\n     {{msg, error_response},\n      [#{name => error_code, fnum => 1, rnum => 2,\n         type => int32, occurrence => optional, opts => []},\n       #{name => error_message, fnum => 2, rnum => 3,\n         type => string, occurrence => optional, opts => []}]}].\n\n\nget_msg_names() ->\n    [server_reflection_request,\n     extension_request,\n     server_reflection_response,\n     file_descriptor_response,\n     extension_number_response,\n     list_service_response,\n     service_response,\n     error_response].\n\n\nget_group_names() -> [].\n\n\nget_msg_or_group_names() ->\n    [server_reflection_request,\n     extension_request,\n     server_reflection_response,\n     file_descriptor_response,\n     extension_number_response,\n     list_service_response,\n     service_response,\n     error_response].\n\n\nget_enum_names() -> [].\n\n\nfetch_msg_def(MsgName) ->\n    case find_msg_def(MsgName) of\n        Fs when is_list(Fs) -> Fs;\n        error -> erlang:error({no_such_msg, MsgName})\n    end.\n\n\n-spec fetch_enum_def(_) -> no_return().\nfetch_enum_def(EnumName) ->\n    erlang:error({no_such_enum, EnumName}).\n\n\nfind_msg_def(server_reflection_request) ->\n    [#{name => host, fnum => 1, rnum => 2, type => string,\n       occurrence => optional, opts => []},\n     #{name => message_request, rnum => 3,\n       fields =>\n           [#{name => file_by_filename, fnum => 3, rnum => 3,\n              type => string, occurrence => optional, opts => []},\n            #{name => file_containing_symbol, fnum => 4, rnum => 3,\n              type => string, occurrence => optional, opts => []},\n            #{name => file_containing_extension, fnum => 5,\n              rnum => 3, type => {msg, extension_request},\n              occurrence => optional, opts => []},\n            #{name => all_extension_numbers_of_type, fnum => 6,\n              rnum => 3, type => string, occurrence => optional,\n              opts => []},\n            #{name => list_services, fnum => 7, rnum => 3,\n              type => string, occurrence => optional, opts => []}]}];\nfind_msg_def(extension_request) ->\n    [#{name => containing_type, fnum => 1, rnum => 2,\n       type => string, occurrence => optional, opts => []},\n     #{name => extension_number, fnum => 2, rnum => 3,\n       type => int32, occurrence => optional, opts => []}];\nfind_msg_def(server_reflection_response) ->\n    [#{name => valid_host, fnum => 1, rnum => 2,\n       type => string, occurrence => optional, opts => []},\n     #{name => original_request, fnum => 2, rnum => 3,\n       type => {msg, server_reflection_request},\n       occurrence => optional, opts => []},\n     #{name => message_response, rnum => 4,\n       fields =>\n           [#{name => file_descriptor_response, fnum => 4,\n              rnum => 4, type => {msg, file_descriptor_response},\n              occurrence => optional, opts => []},\n            #{name => all_extension_numbers_response, fnum => 5,\n              rnum => 4, type => {msg, extension_number_response},\n              occurrence => optional, opts => []},\n            #{name => list_services_response, fnum => 6, rnum => 4,\n              type => {msg, list_service_response},\n              occurrence => optional, opts => []},\n            #{name => error_response, fnum => 7, rnum => 4,\n              type => {msg, error_response}, occurrence => optional,\n              opts => []}]}];\nfind_msg_def(file_descriptor_response) ->\n    [#{name => file_descriptor_proto, fnum => 1, rnum => 2,\n       type => bytes, occurrence => repeated, opts => []}];\nfind_msg_def(extension_number_response) ->\n    [#{name => base_type_name, fnum => 1, rnum => 2,\n       type => string, occurrence => optional, opts => []},\n     #{name => extension_number, fnum => 2, rnum => 3,\n       type => int32, occurrence => repeated,\n       opts => [packed]}];\nfind_msg_def(list_service_response) ->\n    [#{name => service, fnum => 1, rnum => 2,\n       type => {msg, service_response}, occurrence => repeated,\n       opts => []}];\nfind_msg_def(service_response) ->\n    [#{name => name, fnum => 1, rnum => 2, type => string,\n       occurrence => optional, opts => []}];\nfind_msg_def(error_response) ->\n    [#{name => error_code, fnum => 1, rnum => 2,\n       type => int32, occurrence => optional, opts => []},\n     #{name => error_message, fnum => 2, rnum => 3,\n       type => string, occurrence => optional, opts => []}];\nfind_msg_def(_) -> error.\n\n\nfind_enum_def(_) -> error.\n\n\n-spec enum_symbol_by_value(_, _) -> no_return().\nenum_symbol_by_value(E, V) ->\n    erlang:error({no_enum_defs, E, V}).\n\n\n-spec enum_value_by_symbol(_, _) -> no_return().\nenum_value_by_symbol(E, V) ->\n    erlang:error({no_enum_defs, E, V}).\n\n\n\nget_service_names() ->\n    ['grpc.reflection.v1alpha.ServerReflection'].\n\n\nget_service_def('grpc.reflection.v1alpha.ServerReflection') ->\n    {{service, 'grpc.reflection.v1alpha.ServerReflection'},\n     [#{name => 'ServerReflectionInfo',\n        input => server_reflection_request,\n        output => server_reflection_response,\n        input_stream => true, output_stream => true,\n        opts => []}]};\nget_service_def(_) -> error.\n\n\nget_rpc_names('grpc.reflection.v1alpha.ServerReflection') ->\n    ['ServerReflectionInfo'];\nget_rpc_names(_) -> error.\n\n\nfind_rpc_def('grpc.reflection.v1alpha.ServerReflection',\n             RpcName) ->\n    'find_rpc_def_grpc.reflection.v1alpha.ServerReflection'(RpcName);\nfind_rpc_def(_, _) -> error.\n\n\n'find_rpc_def_grpc.reflection.v1alpha.ServerReflection'('ServerReflectionInfo') ->\n    #{name => 'ServerReflectionInfo',\n      input => server_reflection_request,\n      output => server_reflection_response,\n      input_stream => true, output_stream => true,\n      opts => []};\n'find_rpc_def_grpc.reflection.v1alpha.ServerReflection'(_) ->\n    error.\n\n\nfetch_rpc_def(ServiceName, RpcName) ->\n    case find_rpc_def(ServiceName, RpcName) of\n        Def when is_map(Def) -> Def;\n        error ->\n            erlang:error({no_such_rpc, ServiceName, RpcName})\n    end.\n\n\n%% Convert a a fully qualified (ie with package name) service name\n%% as a binary to a service name as an atom.\nfqbin_to_service_name(<<\"grpc.reflection.v1alpha.ServerReflection\">>) ->\n    'grpc.reflection.v1alpha.ServerReflection';\nfqbin_to_service_name(X) ->\n    error({gpb_error, {badservice, X}}).\n\n\n%% Convert a service name as an atom to a fully qualified\n%% (ie with package name) name as a binary.\nservice_name_to_fqbin('grpc.reflection.v1alpha.ServerReflection') ->\n    <<\"grpc.reflection.v1alpha.ServerReflection\">>;\nservice_name_to_fqbin(X) ->\n    error({gpb_error, {badservice, X}}).\n\n\n%% Convert a a fully qualified (ie with package name) service name\n%% and an rpc name, both as binaries to a service name and an rpc\n%% name, as atoms.\nfqbins_to_service_and_rpc_name(<<\"grpc.reflection.v1alpha.ServerReflection\">>, <<\"ServerReflectionInfo\">>) ->\n    {'grpc.reflection.v1alpha.ServerReflection',\n     'ServerReflectionInfo'};\nfqbins_to_service_and_rpc_name(S, R) ->\n    error({gpb_error, {badservice_or_rpc, {S, R}}}).\n\n\n%% Convert a service name and an rpc name, both as atoms,\n%% to a fully qualified (ie with package name) service name and\n%% an rpc name as binaries.\nservice_and_rpc_name_to_fqbins('grpc.reflection.v1alpha.ServerReflection',\n                               'ServerReflectionInfo') ->\n    {<<\"grpc.reflection.v1alpha.ServerReflection\">>, <<\"ServerReflectionInfo\">>};\nservice_and_rpc_name_to_fqbins(S, R) ->\n    error({gpb_error, {badservice_or_rpc, {S, R}}}).\n\n\nfqbin_to_msg_name(<<\"grpc.reflection.v1alpha.ServerReflectionRequest\">>) -> server_reflection_request;\nfqbin_to_msg_name(<<\"grpc.reflection.v1alpha.ExtensionRequest\">>) -> extension_request;\nfqbin_to_msg_name(<<\"grpc.reflection.v1alpha.ServerReflectionResponse\">>) ->\n    server_reflection_response;\nfqbin_to_msg_name(<<\"grpc.reflection.v1alpha.FileDescriptorResponse\">>) -> file_descriptor_response;\nfqbin_to_msg_name(<<\"grpc.reflection.v1alpha.ExtensionNumberResponse\">>) -> extension_number_response;\nfqbin_to_msg_name(<<\"grpc.reflection.v1alpha.ListServiceResponse\">>) -> list_service_response;\nfqbin_to_msg_name(<<\"grpc.reflection.v1alpha.ServiceResponse\">>) -> service_response;\nfqbin_to_msg_name(<<\"grpc.reflection.v1alpha.ErrorResponse\">>) -> error_response;\nfqbin_to_msg_name(E) -> error({gpb_error, {badmsg, E}}).\n\n\nmsg_name_to_fqbin(server_reflection_request) -> <<\"grpc.reflection.v1alpha.ServerReflectionRequest\">>;\nmsg_name_to_fqbin(extension_request) -> <<\"grpc.reflection.v1alpha.ExtensionRequest\">>;\nmsg_name_to_fqbin(server_reflection_response) ->\n    <<\"grpc.reflection.v1alpha.ServerReflectionResponse\">>;\nmsg_name_to_fqbin(file_descriptor_response) -> <<\"grpc.reflection.v1alpha.FileDescriptorResponse\">>;\nmsg_name_to_fqbin(extension_number_response) -> <<\"grpc.reflection.v1alpha.ExtensionNumberResponse\">>;\nmsg_name_to_fqbin(list_service_response) -> <<\"grpc.reflection.v1alpha.ListServiceResponse\">>;\nmsg_name_to_fqbin(service_response) -> <<\"grpc.reflection.v1alpha.ServiceResponse\">>;\nmsg_name_to_fqbin(error_response) -> <<\"grpc.reflection.v1alpha.ErrorResponse\">>;\nmsg_name_to_fqbin(E) -> error({gpb_error, {badmsg, E}}).\n\n\n-spec fqbin_to_enum_name(_) -> no_return().\nfqbin_to_enum_name(E) ->\n    error({gpb_error, {badenum, E}}).\n\n\n-spec enum_name_to_fqbin(_) -> no_return().\nenum_name_to_fqbin(E) ->\n    error({gpb_error, {badenum, E}}).\n\n\nget_package_name() -> 'grpc.reflection.v1alpha'.\n\n\n%% Whether or not the message names\n%% are prepended with package name or not.\nuses_packages() -> true.\n\n\nsource_basename() -> \"reflection.proto\".\n\n\n%% Retrieve all proto file names, also imported ones.\n%% The order is top-down. The first element is always the main\n%% source file. The files are returned with extension,\n%% see get_all_proto_names/0 for a version that returns\n%% the basenames sans extension\nget_all_source_basenames() -> [\"reflection.proto\"].\n\n\n%% Retrieve all proto file names, also imported ones.\n%% The order is top-down. The first element is always the main\n%% source file. The files are returned sans .proto extension,\n%% to make it easier to use them with the various get_xyz_containment\n%% functions.\nget_all_proto_names() -> [\"reflection\"].\n\n\nget_msg_containment(\"reflection\") ->\n    [error_response,\n     extension_number_response,\n     extension_request,\n     file_descriptor_response,\n     list_service_response,\n     server_reflection_request,\n     server_reflection_response,\n     service_response];\nget_msg_containment(P) ->\n    error({gpb_error, {badproto, P}}).\n\n\nget_pkg_containment(\"reflection\") ->\n    'grpc.reflection.v1alpha';\nget_pkg_containment(P) ->\n    error({gpb_error, {badproto, P}}).\n\n\nget_service_containment(\"reflection\") ->\n    ['grpc.reflection.v1alpha.ServerReflection'];\nget_service_containment(P) ->\n    error({gpb_error, {badproto, P}}).\n\n\nget_rpc_containment(\"reflection\") ->\n    [{'grpc.reflection.v1alpha.ServerReflection',\n      'ServerReflectionInfo'}];\nget_rpc_containment(P) ->\n    error({gpb_error, {badproto, P}}).\n\n\nget_enum_containment(\"reflection\") -> [];\nget_enum_containment(P) ->\n    error({gpb_error, {badproto, P}}).\n\n\nget_proto_by_msg_name_as_fqbin(<<\"grpc.reflection.v1alpha.ServerReflectionRequest\">>) -> \"reflection\";\nget_proto_by_msg_name_as_fqbin(<<\"grpc.reflection.v1alpha.ExtensionRequest\">>) -> \"reflection\";\nget_proto_by_msg_name_as_fqbin(<<\"grpc.reflection.v1alpha.ServiceResponse\">>) -> \"reflection\";\nget_proto_by_msg_name_as_fqbin(<<\"grpc.reflection.v1alpha.ServerReflectionResponse\">>) -> \"reflection\";\nget_proto_by_msg_name_as_fqbin(<<\"grpc.reflection.v1alpha.ListServiceResponse\">>) -> \"reflection\";\nget_proto_by_msg_name_as_fqbin(<<\"grpc.reflection.v1alpha.FileDescriptorResponse\">>) -> \"reflection\";\nget_proto_by_msg_name_as_fqbin(<<\"grpc.reflection.v1alpha.ExtensionNumberResponse\">>) -> \"reflection\";\nget_proto_by_msg_name_as_fqbin(<<\"grpc.reflection.v1alpha.ErrorResponse\">>) -> \"reflection\";\nget_proto_by_msg_name_as_fqbin(E) ->\n    error({gpb_error, {badmsg, E}}).\n\n\nget_proto_by_service_name_as_fqbin(<<\"grpc.reflection.v1alpha.ServerReflection\">>) ->\n    \"reflection\";\nget_proto_by_service_name_as_fqbin(E) ->\n    error({gpb_error, {badservice, E}}).\n\n\n-spec get_proto_by_enum_name_as_fqbin(_) -> no_return().\nget_proto_by_enum_name_as_fqbin(E) ->\n    error({gpb_error, {badenum, E}}).\n\n\nget_protos_by_pkg_name_as_fqbin(<<\"grpc.reflection.v1alpha\">>) ->\n    [\"reflection\"];\nget_protos_by_pkg_name_as_fqbin(E) ->\n    error({gpb_error, {badpkg, E}}).\n\n\ndescriptor() ->\n    <<10, 202, 10, 10, 40, 103, 114, 112, 99, 47, 114, 101,\n      102, 108, 101, 99, 116, 105, 111, 110, 47, 118, 49, 97,\n      108, 112, 104, 97, 47, 114, 101, 102, 108, 101, 99, 116,\n      105, 111, 110, 46, 112, 114, 111, 116, 111, 18, 23, 103,\n      114, 112, 99, 46, 114, 101, 102, 108, 101, 99, 116, 105,\n      111, 110, 46, 118, 49, 97, 108, 112, 104, 97, 34, 58,\n      10, 13, 69, 114, 114, 111, 114, 82, 101, 115, 112, 111,\n      110, 115, 101, 18, 18, 10, 10, 101, 114, 114, 111, 114,\n      95, 99, 111, 100, 101, 24, 1, 32, 1, 40, 5, 18, 21, 10,\n      13, 101, 114, 114, 111, 114, 95, 109, 101, 115, 115, 97,\n      103, 101, 24, 2, 32, 1, 40, 9, 34, 87, 10, 23, 69, 120,\n      116, 101, 110, 115, 105, 111, 110, 78, 117, 109, 98,\n      101, 114, 82, 101, 115, 112, 111, 110, 115, 101, 18, 22,\n      10, 14, 98, 97, 115, 101, 95, 116, 121, 112, 101, 95,\n      110, 97, 109, 101, 24, 1, 32, 1, 40, 9, 18, 36, 10, 16,\n      101, 120, 116, 101, 110, 115, 105, 111, 110, 95, 110,\n      117, 109, 98, 101, 114, 24, 2, 32, 3, 40, 5, 66, 10, 8,\n      0, 16, 1, 48, 0, 40, 0, 80, 0, 34, 69, 10, 16, 69, 120,\n      116, 101, 110, 115, 105, 111, 110, 82, 101, 113, 117,\n      101, 115, 116, 18, 23, 10, 15, 99, 111, 110, 116, 97,\n      105, 110, 105, 110, 103, 95, 116, 121, 112, 101, 24, 1,\n      32, 1, 40, 9, 18, 24, 10, 16, 101, 120, 116, 101, 110,\n      115, 105, 111, 110, 95, 110, 117, 109, 98, 101, 114, 24,\n      2, 32, 1, 40, 5, 34, 55, 10, 22, 70, 105, 108, 101, 68,\n      101, 115, 99, 114, 105, 112, 116, 111, 114, 82, 101,\n      115, 112, 111, 110, 115, 101, 18, 29, 10, 21, 102, 105,\n      108, 101, 95, 100, 101, 115, 99, 114, 105, 112, 116,\n      111, 114, 95, 112, 114, 111, 116, 111, 24, 1, 32, 3, 40,\n      12, 34, 80, 10, 19, 76, 105, 115, 116, 83, 101, 114,\n      118, 105, 99, 101, 82, 101, 115, 112, 111, 110, 115,\n      101, 18, 57, 10, 7, 115, 101, 114, 118, 105, 99, 101,\n      24, 1, 32, 3, 40, 11, 50, 40, 46, 103, 114, 112, 99, 46,\n      114, 101, 102, 108, 101, 99, 116, 105, 111, 110, 46,\n      118, 49, 97, 108, 112, 104, 97, 46, 83, 101, 114, 118,\n      105, 99, 101, 82, 101, 115, 112, 111, 110, 115, 101, 34,\n      138, 2, 10, 23, 83, 101, 114, 118, 101, 114, 82, 101,\n      102, 108, 101, 99, 116, 105, 111, 110, 82, 101, 113,\n      117, 101, 115, 116, 18, 12, 10, 4, 104, 111, 115, 116,\n      24, 1, 32, 1, 40, 9, 18, 26, 10, 16, 102, 105, 108, 101,\n      95, 98, 121, 95, 102, 105, 108, 101, 110, 97, 109, 101,\n      24, 3, 32, 1, 40, 9, 72, 0, 18, 32, 10, 22, 102, 105,\n      108, 101, 95, 99, 111, 110, 116, 97, 105, 110, 105, 110,\n      103, 95, 115, 121, 109, 98, 111, 108, 24, 4, 32, 1, 40,\n      9, 72, 0, 18, 78, 10, 25, 102, 105, 108, 101, 95, 99,\n      111, 110, 116, 97, 105, 110, 105, 110, 103, 95, 101,\n      120, 116, 101, 110, 115, 105, 111, 110, 24, 5, 32, 1,\n      40, 11, 50, 41, 46, 103, 114, 112, 99, 46, 114, 101,\n      102, 108, 101, 99, 116, 105, 111, 110, 46, 118, 49, 97,\n      108, 112, 104, 97, 46, 69, 120, 116, 101, 110, 115, 105,\n      111, 110, 82, 101, 113, 117, 101, 115, 116, 72, 0, 18,\n      39, 10, 29, 97, 108, 108, 95, 101, 120, 116, 101, 110,\n      115, 105, 111, 110, 95, 110, 117, 109, 98, 101, 114,\n      115, 95, 111, 102, 95, 116, 121, 112, 101, 24, 6, 32, 1,\n      40, 9, 72, 0, 18, 23, 10, 13, 108, 105, 115, 116, 95,\n      115, 101, 114, 118, 105, 99, 101, 115, 24, 7, 32, 1, 40,\n      9, 72, 0, 66, 17, 10, 15, 109, 101, 115, 115, 97, 103,\n      101, 95, 114, 101, 113, 117, 101, 115, 116, 34, 209, 3,\n      10, 24, 83, 101, 114, 118, 101, 114, 82, 101, 102, 108,\n      101, 99, 116, 105, 111, 110, 82, 101, 115, 112, 111,\n      110, 115, 101, 18, 18, 10, 10, 118, 97, 108, 105, 100,\n      95, 104, 111, 115, 116, 24, 1, 32, 1, 40, 9, 18, 74, 10,\n      16, 111, 114, 105, 103, 105, 110, 97, 108, 95, 114, 101,\n      113, 117, 101, 115, 116, 24, 2, 32, 1, 40, 11, 50, 48,\n      46, 103, 114, 112, 99, 46, 114, 101, 102, 108, 101, 99,\n      116, 105, 111, 110, 46, 118, 49, 97, 108, 112, 104, 97,\n      46, 83, 101, 114, 118, 101, 114, 82, 101, 102, 108, 101,\n      99, 116, 105, 111, 110, 82, 101, 113, 117, 101, 115,\n      116, 18, 83, 10, 24, 102, 105, 108, 101, 95, 100, 101,\n      115, 99, 114, 105, 112, 116, 111, 114, 95, 114, 101,\n      115, 112, 111, 110, 115, 101, 24, 4, 32, 1, 40, 11, 50,\n      47, 46, 103, 114, 112, 99, 46, 114, 101, 102, 108, 101,\n      99, 116, 105, 111, 110, 46, 118, 49, 97, 108, 112, 104,\n      97, 46, 70, 105, 108, 101, 68, 101, 115, 99, 114, 105,\n      112, 116, 111, 114, 82, 101, 115, 112, 111, 110, 115,\n      101, 72, 0, 18, 90, 10, 30, 97, 108, 108, 95, 101, 120,\n      116, 101, 110, 115, 105, 111, 110, 95, 110, 117, 109,\n      98, 101, 114, 115, 95, 114, 101, 115, 112, 111, 110,\n      115, 101, 24, 5, 32, 1, 40, 11, 50, 48, 46, 103, 114,\n      112, 99, 46, 114, 101, 102, 108, 101, 99, 116, 105, 111,\n      110, 46, 118, 49, 97, 108, 112, 104, 97, 46, 69, 120,\n      116, 101, 110, 115, 105, 111, 110, 78, 117, 109, 98,\n      101, 114, 82, 101, 115, 112, 111, 110, 115, 101, 72, 0,\n      18, 78, 10, 22, 108, 105, 115, 116, 95, 115, 101, 114,\n      118, 105, 99, 101, 115, 95, 114, 101, 115, 112, 111,\n      110, 115, 101, 24, 6, 32, 1, 40, 11, 50, 44, 46, 103,\n      114, 112, 99, 46, 114, 101, 102, 108, 101, 99, 116, 105,\n      111, 110, 46, 118, 49, 97, 108, 112, 104, 97, 46, 76,\n      105, 115, 116, 83, 101, 114, 118, 105, 99, 101, 82, 101,\n      115, 112, 111, 110, 115, 101, 72, 0, 18, 64, 10, 14,\n      101, 114, 114, 111, 114, 95, 114, 101, 115, 112, 111,\n      110, 115, 101, 24, 7, 32, 1, 40, 11, 50, 38, 46, 103,\n      114, 112, 99, 46, 114, 101, 102, 108, 101, 99, 116, 105,\n      111, 110, 46, 118, 49, 97, 108, 112, 104, 97, 46, 69,\n      114, 114, 111, 114, 82, 101, 115, 112, 111, 110, 115,\n      101, 72, 0, 66, 18, 10, 16, 109, 101, 115, 115, 97, 103,\n      101, 95, 114, 101, 115, 112, 111, 110, 115, 101, 34, 31,\n      10, 15, 83, 101, 114, 118, 105, 99, 101, 82, 101, 115,\n      112, 111, 110, 115, 101, 18, 12, 10, 4, 110, 97, 109,\n      101, 24, 1, 32, 1, 40, 9, 50, 147, 1, 10, 16, 83, 101,\n      114, 118, 101, 114, 82, 101, 102, 108, 101, 99, 116,\n      105, 111, 110, 18, 127, 10, 20, 83, 101, 114, 118, 101,\n      114, 82, 101, 102, 108, 101, 99, 116, 105, 111, 110, 73,\n      110, 102, 111, 18, 48, 46, 103, 114, 112, 99, 46, 114,\n      101, 102, 108, 101, 99, 116, 105, 111, 110, 46, 118, 49,\n      97, 108, 112, 104, 97, 46, 83, 101, 114, 118, 101, 114,\n      82, 101, 102, 108, 101, 99, 116, 105, 111, 110, 82, 101,\n      113, 117, 101, 115, 116, 26, 49, 46, 103, 114, 112, 99,\n      46, 114, 101, 102, 108, 101, 99, 116, 105, 111, 110, 46,\n      118, 49, 97, 108, 112, 104, 97, 46, 83, 101, 114, 118,\n      101, 114, 82, 101, 102, 108, 101, 99, 116, 105, 111,\n      110, 82, 101, 115, 112, 111, 110, 115, 101, 40, 0, 48,\n      0, 98, 6, 112, 114, 111, 116, 111, 51>>.\n\ndescriptor(\"reflection\") ->\n    <<10, 40, 103, 114, 112, 99, 47, 114, 101, 102, 108,\n      101, 99, 116, 105, 111, 110, 47, 118, 49, 97, 108, 112,\n      104, 97, 47, 114, 101, 102, 108, 101, 99, 116, 105, 111,\n      110, 46, 112, 114, 111, 116, 111, 18, 23, 103, 114, 112,\n      99, 46, 114, 101, 102, 108, 101, 99, 116, 105, 111, 110,\n      46, 118, 49, 97, 108, 112, 104, 97, 34, 58, 10, 13, 69,\n      114, 114, 111, 114, 82, 101, 115, 112, 111, 110, 115,\n      101, 18, 18, 10, 10, 101, 114, 114, 111, 114, 95, 99,\n      111, 100, 101, 24, 1, 32, 1, 40, 5, 18, 21, 10, 13, 101,\n      114, 114, 111, 114, 95, 109, 101, 115, 115, 97, 103,\n      101, 24, 2, 32, 1, 40, 9, 34, 87, 10, 23, 69, 120, 116,\n      101, 110, 115, 105, 111, 110, 78, 117, 109, 98, 101,\n      114, 82, 101, 115, 112, 111, 110, 115, 101, 18, 22, 10,\n      14, 98, 97, 115, 101, 95, 116, 121, 112, 101, 95, 110,\n      97, 109, 101, 24, 1, 32, 1, 40, 9, 18, 36, 10, 16, 101,\n      120, 116, 101, 110, 115, 105, 111, 110, 95, 110, 117,\n      109, 98, 101, 114, 24, 2, 32, 3, 40, 5, 66, 10, 8, 0,\n      16, 1, 48, 0, 40, 0, 80, 0, 34, 69, 10, 16, 69, 120,\n      116, 101, 110, 115, 105, 111, 110, 82, 101, 113, 117,\n      101, 115, 116, 18, 23, 10, 15, 99, 111, 110, 116, 97,\n      105, 110, 105, 110, 103, 95, 116, 121, 112, 101, 24, 1,\n      32, 1, 40, 9, 18, 24, 10, 16, 101, 120, 116, 101, 110,\n      115, 105, 111, 110, 95, 110, 117, 109, 98, 101, 114, 24,\n      2, 32, 1, 40, 5, 34, 55, 10, 22, 70, 105, 108, 101, 68,\n      101, 115, 99, 114, 105, 112, 116, 111, 114, 82, 101,\n      115, 112, 111, 110, 115, 101, 18, 29, 10, 21, 102, 105,\n      108, 101, 95, 100, 101, 115, 99, 114, 105, 112, 116,\n      111, 114, 95, 112, 114, 111, 116, 111, 24, 1, 32, 3, 40,\n      12, 34, 80, 10, 19, 76, 105, 115, 116, 83, 101, 114,\n      118, 105, 99, 101, 82, 101, 115, 112, 111, 110, 115,\n      101, 18, 57, 10, 7, 115, 101, 114, 118, 105, 99, 101,\n      24, 1, 32, 3, 40, 11, 50, 40, 46, 103, 114, 112, 99, 46,\n      114, 101, 102, 108, 101, 99, 116, 105, 111, 110, 46,\n      118, 49, 97, 108, 112, 104, 97, 46, 83, 101, 114, 118,\n      105, 99, 101, 82, 101, 115, 112, 111, 110, 115, 101, 34,\n      138, 2, 10, 23, 83, 101, 114, 118, 101, 114, 82, 101,\n      102, 108, 101, 99, 116, 105, 111, 110, 82, 101, 113,\n      117, 101, 115, 116, 18, 12, 10, 4, 104, 111, 115, 116,\n      24, 1, 32, 1, 40, 9, 18, 26, 10, 16, 102, 105, 108, 101,\n      95, 98, 121, 95, 102, 105, 108, 101, 110, 97, 109, 101,\n      24, 3, 32, 1, 40, 9, 72, 0, 18, 32, 10, 22, 102, 105,\n      108, 101, 95, 99, 111, 110, 116, 97, 105, 110, 105, 110,\n      103, 95, 115, 121, 109, 98, 111, 108, 24, 4, 32, 1, 40,\n      9, 72, 0, 18, 78, 10, 25, 102, 105, 108, 101, 95, 99,\n      111, 110, 116, 97, 105, 110, 105, 110, 103, 95, 101,\n      120, 116, 101, 110, 115, 105, 111, 110, 24, 5, 32, 1,\n      40, 11, 50, 41, 46, 103, 114, 112, 99, 46, 114, 101,\n      102, 108, 101, 99, 116, 105, 111, 110, 46, 118, 49, 97,\n      108, 112, 104, 97, 46, 69, 120, 116, 101, 110, 115, 105,\n      111, 110, 82, 101, 113, 117, 101, 115, 116, 72, 0, 18,\n      39, 10, 29, 97, 108, 108, 95, 101, 120, 116, 101, 110,\n      115, 105, 111, 110, 95, 110, 117, 109, 98, 101, 114,\n      115, 95, 111, 102, 95, 116, 121, 112, 101, 24, 6, 32, 1,\n      40, 9, 72, 0, 18, 23, 10, 13, 108, 105, 115, 116, 95,\n      115, 101, 114, 118, 105, 99, 101, 115, 24, 7, 32, 1, 40,\n      9, 72, 0, 66, 17, 10, 15, 109, 101, 115, 115, 97, 103,\n      101, 95, 114, 101, 113, 117, 101, 115, 116, 34, 209, 3,\n      10, 24, 83, 101, 114, 118, 101, 114, 82, 101, 102, 108,\n      101, 99, 116, 105, 111, 110, 82, 101, 115, 112, 111,\n      110, 115, 101, 18, 18, 10, 10, 118, 97, 108, 105, 100,\n      95, 104, 111, 115, 116, 24, 1, 32, 1, 40, 9, 18, 74, 10,\n      16, 111, 114, 105, 103, 105, 110, 97, 108, 95, 114, 101,\n      113, 117, 101, 115, 116, 24, 2, 32, 1, 40, 11, 50, 48,\n      46, 103, 114, 112, 99, 46, 114, 101, 102, 108, 101, 99,\n      116, 105, 111, 110, 46, 118, 49, 97, 108, 112, 104, 97,\n      46, 83, 101, 114, 118, 101, 114, 82, 101, 102, 108, 101,\n      99, 116, 105, 111, 110, 82, 101, 113, 117, 101, 115,\n      116, 18, 83, 10, 24, 102, 105, 108, 101, 95, 100, 101,\n      115, 99, 114, 105, 112, 116, 111, 114, 95, 114, 101,\n      115, 112, 111, 110, 115, 101, 24, 4, 32, 1, 40, 11, 50,\n      47, 46, 103, 114, 112, 99, 46, 114, 101, 102, 108, 101,\n      99, 116, 105, 111, 110, 46, 118, 49, 97, 108, 112, 104,\n      97, 46, 70, 105, 108, 101, 68, 101, 115, 99, 114, 105,\n      112, 116, 111, 114, 82, 101, 115, 112, 111, 110, 115,\n      101, 72, 0, 18, 90, 10, 30, 97, 108, 108, 95, 101, 120,\n      116, 101, 110, 115, 105, 111, 110, 95, 110, 117, 109,\n      98, 101, 114, 115, 95, 114, 101, 115, 112, 111, 110,\n      115, 101, 24, 5, 32, 1, 40, 11, 50, 48, 46, 103, 114,\n      112, 99, 46, 114, 101, 102, 108, 101, 99, 116, 105, 111,\n      110, 46, 118, 49, 97, 108, 112, 104, 97, 46, 69, 120,\n      116, 101, 110, 115, 105, 111, 110, 78, 117, 109, 98,\n      101, 114, 82, 101, 115, 112, 111, 110, 115, 101, 72, 0,\n      18, 78, 10, 22, 108, 105, 115, 116, 95, 115, 101, 114,\n      118, 105, 99, 101, 115, 95, 114, 101, 115, 112, 111,\n      110, 115, 101, 24, 6, 32, 1, 40, 11, 50, 44, 46, 103,\n      114, 112, 99, 46, 114, 101, 102, 108, 101, 99, 116, 105,\n      111, 110, 46, 118, 49, 97, 108, 112, 104, 97, 46, 76,\n      105, 115, 116, 83, 101, 114, 118, 105, 99, 101, 82, 101,\n      115, 112, 111, 110, 115, 101, 72, 0, 18, 64, 10, 14,\n      101, 114, 114, 111, 114, 95, 114, 101, 115, 112, 111,\n      110, 115, 101, 24, 7, 32, 1, 40, 11, 50, 38, 46, 103,\n      114, 112, 99, 46, 114, 101, 102, 108, 101, 99, 116, 105,\n      111, 110, 46, 118, 49, 97, 108, 112, 104, 97, 46, 69,\n      114, 114, 111, 114, 82, 101, 115, 112, 111, 110, 115,\n      101, 72, 0, 66, 18, 10, 16, 109, 101, 115, 115, 97, 103,\n      101, 95, 114, 101, 115, 112, 111, 110, 115, 101, 34, 31,\n      10, 15, 83, 101, 114, 118, 105, 99, 101, 82, 101, 115,\n      112, 111, 110, 115, 101, 18, 12, 10, 4, 110, 97, 109,\n      101, 24, 1, 32, 1, 40, 9, 50, 147, 1, 10, 16, 83, 101,\n      114, 118, 101, 114, 82, 101, 102, 108, 101, 99, 116,\n      105, 111, 110, 18, 127, 10, 20, 83, 101, 114, 118, 101,\n      114, 82, 101, 102, 108, 101, 99, 116, 105, 111, 110, 73,\n      110, 102, 111, 18, 48, 46, 103, 114, 112, 99, 46, 114,\n      101, 102, 108, 101, 99, 116, 105, 111, 110, 46, 118, 49,\n      97, 108, 112, 104, 97, 46, 83, 101, 114, 118, 101, 114,\n      82, 101, 102, 108, 101, 99, 116, 105, 111, 110, 82, 101,\n      113, 117, 101, 115, 116, 26, 49, 46, 103, 114, 112, 99,\n      46, 114, 101, 102, 108, 101, 99, 116, 105, 111, 110, 46,\n      118, 49, 97, 108, 112, 104, 97, 46, 83, 101, 114, 118,\n      101, 114, 82, 101, 102, 108, 101, 99, 116, 105, 111,\n      110, 82, 101, 115, 112, 111, 110, 115, 101, 40, 0, 48,\n      0, 98, 6, 112, 114, 111, 116, 111, 51>>;\ndescriptor(X) -> error({gpb_error, {badname, X}}).\n\n\ngpb_version_as_string() ->\n    \"4.7.3\".\n\ngpb_version_as_list() ->\n    [4,7,3].\n"
  },
  {
    "path": "src/grpcbox_reflection_service.erl",
    "content": "-module(grpcbox_reflection_service).\n\n-export([server_reflection_info/2]).\n\n-include(\"grpcbox.hrl\").\n\n-define(UNIMPLEMENTED_RESPONSE,\n        {error_response,\n         #{error_code => 12,\n           error_message => \"unimplemented method since extensions removed in proto3\"}}).\n\nserver_reflection_info(Ref, Stream) ->\n    receive\n        {Ref, eos} ->\n            ok;\n        {Ref, Message} ->\n            handle_message(Message, Stream),\n            server_reflection_info(Ref, Stream)\n    end.\n\nhandle_message(#{message_request := {list_services, _}}=OriginalRequest, Stream) ->\n    Services = list_services(),\n    grpcbox_stream:send(#{original_request => OriginalRequest,\n                          message_response => {list_services_response,\n                                               #{service => Services}}}, Stream);\nhandle_message(#{message_request := {file_by_filename, Filename}}=OriginalRequest, Stream) ->\n    Response = file_by_filename(Filename),\n    grpcbox_stream:send(#{original_request => OriginalRequest,\n                          message_response => Response}, Stream);\nhandle_message(#{message_request := {file_containing_symbol, Symbol}}=OriginalRequest, Stream) ->\n    Response = file_containing_symbol(Symbol),\n    grpcbox_stream:send(#{original_request => OriginalRequest,\n                          message_response => Response}, Stream);\n\n%% proto3 dropped extensions so we'll just return an empty result\n\nhandle_message(#{message_request := {all_extension_numbers_of_type, _}}=OriginalRequest, Stream) ->\n    grpcbox_stream:send(#{original_request => OriginalRequest,\n                          message_response => ?UNIMPLEMENTED_RESPONSE},\n                        Stream);\nhandle_message(#{message_request := {file_containing_extension, _}}=OriginalRequest, Stream) ->\n    grpcbox_stream:send(#{original_request => OriginalRequest,\n                          message_response => ?UNIMPLEMENTED_RESPONSE}, Stream).\n\n%%\n\nlist_services() ->\n    ServiceSups = supervisor:which_children(grpcbox_services_simple_sup),\n    lists:usort(lists:flatmap(fun services/1, ServiceSups)).\n\n%% Find the name of the services for a service supervisor\nservices({_, Pid, _, _}) ->\n    {registered_name, Name} = erlang:process_info(Pid, registered_name),\n    [#{name => Service} || Service <- ets:select(Name, [{#method{key={'$1', '_'},\n                                                                 _='_'}, [], ['$1']}])].\n\nfile_by_filename(Filename) ->\n    FilenameList = binary_to_list(Filename),\n    {file_descriptor_response, #{file_descriptor_proto => [grpcbox_health_pb:descriptor(FilenameList)]}}.\n\nfile_containing_symbol(Symbol) ->\n    ServiceSups = supervisor:which_children(grpcbox_services_simple_sup),\n    ServicePbModules = lists:usort(lists:flatmap(fun proto_modules/1, ServiceSups)),\n    find(ServicePbModules, Symbol).\n\n%% looks up all protobuf modules generated by gpb related to a service supervisor\nproto_modules({_, Pid, _, _}) ->\n    {registered_name, Name} = erlang:process_info(Pid, registered_name),\n    [Module || Module <- ets:select(Name, [{#method{proto='$1',\n                                                    _='_'}, [], ['$1']}])].\n\n%% check all the fqbin lookup functions for the provided symbol\nfind([], _) ->\n    {error_response, #{error_code => 5,\n                       error_message => \"symbol not found\"}};\nfind([M | T], Symbol) ->\n    case find_all(fun(F) -> find_symbol(M, F, Symbol) end, [get_proto_by_msg_name_as_fqbin,\n                                                            get_proto_by_service_name_as_fqbin,\n                                                            get_proto_by_enum_name_as_fqbin,\n                                                            get_protos_by_pkg_name_as_fqbin]) of\n        [P | _] ->\n            {file_descriptor_response,\n             #{file_descriptor_proto => [M:descriptor(P)]}};\n        [] ->\n            find(T, Symbol)\n    end.\n\nfind_symbol(M, F, Symbol) ->\n    try M:F(Symbol) of\n        Proto ->\n            Proto\n    catch\n        _:_ ->\n            false\n    end.\n\nfind_all(F, L) ->\n    find_all(F, L, []).\n\nfind_all(_, [], Acc) ->\n    Acc;\nfind_all(F, [H | T], Acc) ->\n    case F(H) of\n        false ->\n            find_all(F, T, Acc);\n        Proto ->\n            find_all(F, T, [Proto | Acc])\n    end.\n"
  },
  {
    "path": "src/grpcbox_services_simple_sup.erl",
    "content": "%%%-------------------------------------------------------------------\n%% @doc grpcbox services simple one for one supervisor.\n%% @end\n%%%-------------------------------------------------------------------\n\n-module(grpcbox_services_simple_sup).\n\n-behaviour(supervisor).\n\n-export([start_link/0,\n         start_child/1,\n         terminate_child/1]).\n-export([init/1]).\n\n-include(\"grpcbox.hrl\").\n\n-define(SERVER, ?MODULE).\n\nstart_link() ->\n    supervisor:start_link({local, ?SERVER}, ?MODULE, []).\n\nstart_child(Opts) ->\n    GrpcOpts = maps:get(grpc_opts, Opts, #{}),\n    ServerOpts = maps:get(server_opts, Opts, #{}),\n    ListenOpts = maps:get(listen_opts, Opts, #{}),\n    PoolOpts = maps:get(pool_opts, Opts, #{}),\n    TransportOpts = maps:get(transport_opts, Opts, #{}),\n    supervisor:start_child(?SERVER, [ServerOpts, GrpcOpts, ListenOpts, PoolOpts, TransportOpts]).\n\nterminate_child(ListenOpts) ->\n    case whereis(grpcbox_services_sup:services_sup_name(ListenOpts)) of\n        undefined ->\n            ok;\n        Pid ->\n            supervisor:terminate_child(?SERVER, Pid)\n    end.\n\ninit(_Args) ->\n    SupFlags = #{strategy => simple_one_for_one,\n                 intensity => 5,\n                 period => 10},\n    ChildSpecs = [#{id => grpcbox_services_sup,\n                    start => {grpcbox_services_sup, start_link, []},\n                    type => supervisor,\n                    restart => transient,\n                    shutdown => 1000}],\n    {ok, {SupFlags, ChildSpecs}}.\n"
  },
  {
    "path": "src/grpcbox_services_sup.erl",
    "content": "%%%-------------------------------------------------------------------\n%% @doc grpcbox supervisor for set of services on a port.\n%% @end\n%%%-------------------------------------------------------------------\n\n-module(grpcbox_services_sup).\n\n-behaviour(supervisor).\n\n-export([start_link/5,\n         services_sup_name/1,\n         pool_name/1,\n         name/2]).\n-export([init/1]).\n\n-include(\"grpcbox.hrl\").\n\nstart_link(ServerOpts, GrpcOpts, ListenOpts, PoolOpts, TransportOpts) ->\n    %% give the services_sup a name because in the future we might want to reference it easily for\n    %% debugging purposes or live configuration changes\n    ServicesSupName = services_sup_name(ListenOpts),\n    supervisor:start_link({local, ServicesSupName}, ?MODULE, [ServerOpts, GrpcOpts, ListenOpts,\n                                                              PoolOpts, TransportOpts, ServicesSupName]).\ninterceptor(Type, Opts) ->\n    case maps:get(Type, Opts, undefined) of\n        {Module, Function} ->\n            fun Module:Function/4;\n        Fun when is_function(Fun, 4) ->\n            Fun;\n        undefined ->\n            undefined\n    end.\n\ninit([ServerOpts, GrpcOpts, ListenOpts, PoolOpts, TransportOpts, ServiceSupName]) ->\n    Tid = ets:new(ServiceSupName, [protected, named_table, set,\n                                   {read_concurrency, true}, {keypos, 2}]),\n    ServicePbModules = maps:get(service_protos, GrpcOpts),\n    Services = maps:get(services, GrpcOpts, #{}),\n    load_services(ServicePbModules, Services, Tid),\n\n    AuthFun = get_authfun(maps:get(ssl, TransportOpts, false), GrpcOpts),\n    UnaryInterceptor = interceptor(unary_interceptor, GrpcOpts),\n    StreamInterceptor = interceptor(stream_interceptor, GrpcOpts),\n    StatsHandler = maps:get(stats_handler, GrpcOpts, undefined),\n    ChatterboxOpts = #{stream_callback_mod => grpcbox_stream,\n                       stream_callback_opts => [Tid, AuthFun, UnaryInterceptor,\n                                                StreamInterceptor, StatsHandler]},\n\n    %% unique name for pool based on the ip and port it will listen on\n    Name = pool_name(ListenOpts),\n\n    RestartStrategy = #{strategy => rest_for_one},\n    Pool = #{id => grpcbox_pool,\n             start => {grpcbox_pool, start_link, [Name, chatterbox:settings(server, ServerOpts),\n                                                  ChatterboxOpts, TransportOpts]}},\n    Socket = #{id => grpcbox_socket,\n               start => {grpcbox_socket, start_link, [Name, ListenOpts, PoolOpts]}},\n    {ok, {RestartStrategy, [Pool, Socket]}}.\n\n%%\n\nservices_sup_name(ListenOpts) ->\n    name(\"grpcbox_services_sup\", ListenOpts).\n\npool_name(ListenOpts) ->\n    name(\"grpcbox_pool\", ListenOpts).\n\nname(Prefix, ListenOpts) ->\n    Port = maps:get(port, ListenOpts, 8080),\n    IPAddress = maps:get(ip, ListenOpts, {0, 0, 0, 0}),\n    list_to_atom(Prefix ++ \"_\" ++ inet_parse:ntoa(IPAddress) ++ \"_\" ++ integer_to_list(Port)).\n\nget_authfun(true, Options) ->\n    case maps:get(auth_fun, Options, undefined) of\n        undefined ->\n            case maps:get(client_cert_dir, Options, undefined) of\n                undefined ->\n                    undefined;\n                Dir ->\n                    auth_fun(Dir)\n            end;\n        Fun ->\n            Fun\n    end;\nget_authfun(_, _) ->\n    undefined.\n\n-spec auth_fun(Directory::string()) -> fun(((public_key:der_encoded())) -> {true, string()} | false).\nauth_fun(Directory) ->\n    Ids = issuer_ids_from_directory(Directory),\n    fun(Cert) ->\n            {ok, IssuerID} = public_key:pkix_issuer_id(Cert, self),\n            case maps:find(IssuerID, Ids) of\n                {ok, Identity} ->\n                    {true, Identity};\n                error ->\n                    false\n            end\n    end.\n\nissuer_ids_from_directory(Dir) ->\n    {ok, Filenames} = file:list_dir(Dir),\n    Keyfiles = lists:filter(fun(N) ->\n                                case filename:extension(N) of\n                                    \".pem\" -> true;\n                                    \".crt\" -> true;\n                                    _ -> false\n                                end\n                            end, Filenames),\n    maps:from_list([issuer_id_from_file(filename:join([Dir, F]))\n                    || F <- Keyfiles]).\n\nissuer_id_from_file(Filename) ->\n    {certfile_to_issuer_id(Filename),\n     filename:rootname(filename:basename(Filename))}.\n\ncertfile_to_issuer_id(Filename) ->\n    {ok, Data} = file:read_file(Filename),\n    [{'Certificate', Cert, not_encrypted}] = public_key:pem_decode(Data),\n    {ok, IssuerID} = public_key:pkix_issuer_id(Cert, self),\nIssuerID.\n\n%% grpc requests are of the form `<pkg>.<Service>/<Method>` in camelcase. For this reason we\n%% have gpb keep the service definitions in their original form and convert to snake case here\n%% to know what module:function to call for each.\nload_services([], _, _) ->\n    ok;\nload_services([ServicePbModule | Rest], Services, ServicesTable) ->\n    ServiceNames = ServicePbModule:get_service_names(),\n    [begin\n         {{service, _}, Methods} = ServicePbModule:get_service_def(ServiceName),\n         %% throws exception if ServiceName isn't in the map or doesn't exist\n         try ServiceModule = maps:get(ServiceName, Services),\n              {ServiceModule, ServiceModule:module_info(exports)} of\n             {ServiceModule1, Exports} ->\n                 [begin\n                      SnakedMethodName = atom_snake_case(Name),\n                      case lists:member({SnakedMethodName, 2}, Exports) of\n                          true ->\n                              ets:insert(ServicesTable, #method{key={atom_to_binary(ServiceName, utf8),\n                                                                     atom_to_binary(Name, utf8)},\n                                                                module=ServiceModule1,\n                                                                function=SnakedMethodName,\n                                                                proto=ServicePbModule,\n                                                                input={Input, InputStream},\n                                                                output={Output, OutputStream},\n                                                                opts=Opts});\n                          false ->\n                              %% TODO: error? log? insert into ets as unimplemented?\n                              unimplemented_method\n                      end\n                  end || #{name := Name,\n                           input := Input,\n                           output := Output,\n                           input_stream := InputStream,\n                           output_stream := OutputStream,\n                           opts := Opts} <- Methods]\n         catch\n             _:_ ->\n                 %% TODO: error? log? insert into ets as unimplemented?\n                 unimplemented_service\n         end\n     end || ServiceName <- ServiceNames],\n\n    load_services(Rest, Services, ServicesTable).\n\natom_snake_case(Name) ->\n    NameString = atom_to_list(Name),\n    Snaked = lists:foldl(fun(RE, Snaking) ->\n                                 re:replace(Snaking, RE, \"\\\\1_\\\\2\", [{return, list},\n                                                                     global])\n                         end, NameString, [%% uppercase followed by lowercase\n                                           \"(.)([A-Z][a-z]+)\",\n                                           %% any consecutive digits\n                                           \"(.)([0-9]+)\",\n                                           %% uppercase with lowercase\n                                           %% or digit before it\n                                           \"([a-z0-9])([A-Z])\"]),\n    Snaked1 = string:replace(Snaked, \".\", \"_\", all),\n    Snaked2 = string:replace(Snaked1, \"__\", \"_\", all),\n    list_to_atom(string:to_lower(unicode:characters_to_list(Snaked2))).\n"
  },
  {
    "path": "src/grpcbox_socket.erl",
    "content": "-module(grpcbox_socket).\n\n-behaviour(gen_server).\n\n-export([start_link/3]).\n\n-export([init/1,\n         handle_call/3,\n         handle_cast/2,\n         handle_info/2,\n         code_change/3,\n         terminate/2]).\n\n%% public api\n\nstart_link(Pool, ListenOpts, AcceptorOpts) ->\n    gen_server:start_link(?MODULE, [Pool, ListenOpts, AcceptorOpts], []).\n\n%% gen_server api\n\ninit([Pool, ListenOpts, PoolOpts]) ->\n    Port = maps:get(port, ListenOpts, 8080),\n    IPAddress = maps:get(ip, ListenOpts, {0, 0, 0, 0}),\n    AcceptorPoolSize = maps:get(size, PoolOpts, 10),\n    SocketOpts = maps:get(socket_options, ListenOpts, [{reuseaddr, true},\n                                                       {nodelay, true},\n                                                       {reuseaddr, true},\n                                                       {backlog, 32768},\n                                                       {keepalive, true}]),\n    %% Trapping exit so can close socket in terminate/2\n    _ = process_flag(trap_exit, true),\n    Opts = [{active, false}, {mode, binary}, {packet, raw}, {ip, IPAddress} | SocketOpts],\n    {LPort, LOpts} = maybe_adjust_port_opts_for_fdopt(Port, Opts),\n    case gen_tcp:listen(LPort, LOpts) of\n        {ok, Socket} ->\n            %% acceptor could close the socket if there is a problem\n            MRef = monitor(port, Socket),\n            grpcbox_pool:accept_socket(Pool, Socket, AcceptorPoolSize),\n            {ok, {Socket, MRef}};\n        {error, Reason} ->\n            {stop, Reason}\n    end.\n\nmaybe_adjust_port_opts_for_fdopt(Port, Opts) ->\n    case lists:keymember(fd, 1, Opts) of\n        true ->\n            %% If an already opened (bound) file descriptor is passed,\n            %% we must not set port or ip, or there will be an error\n            %% when it would have gotten bound again.\n            {0, lists:keydelete(ip, 1, Opts)};\n        false ->\n            {Port, Opts}\n    end.\n\nhandle_call(Req, _, State) ->\n    {stop, {bad_call, Req}, State}.\n\nhandle_cast(Req, State) ->\n    {stop, {bad_cast, Req}, State}.\n\nhandle_info({'DOWN', MRef, port, Socket, Reason}, {Socket, MRef} = State) ->\n    {stop, Reason, State};\nhandle_info(_, State) ->\n    {noreply, State}.\n\ncode_change(_, State, _) ->\n    {ok, State}.\n\nterminate(_, {Socket, MRef}) ->\n    %% Socket may already be down but need to ensure it is closed to avoid\n    %% eaddrinuse error on restart\n    case demonitor(MRef, [flush, info]) of\n        true  -> gen_tcp:close(Socket);\n        false -> ok\n    end.\n"
  },
  {
    "path": "src/grpcbox_stream.erl",
    "content": "-module(grpcbox_stream).\n\n-include_lib(\"chatterbox/include/http2.hrl\").\n-include_lib(\"kernel/include/logger.hrl\").\n-include(\"grpcbox.hrl\").\n\n-behaviour(h2_stream).\n\n-export([send/2,\n         send/3,\n         send_headers/2,\n         add_headers/2,\n         add_trailers/2,\n         set_trailers/2,\n         code_to_status/1,\n         error/2,\n         ctx/1,\n         ctx/2,\n         handle_streams/2,\n         handle_call/2,\n         handle_info/2]).\n\n-export([init/3,\n         on_receive_headers/2,\n         on_send_push_promise/2,\n         on_receive_data/2,\n         on_end_stream/1,\n         terminate/1]).\n\n-export_type([t/0,\n              grpc_status/0,\n              grpc_status_message/0,\n              grpc_error/0,\n              grpc_error_response/0,\n              grpc_callback_error/0,\n              grpc_error_data/0,\n              grpc_extended_error_response/0]).\n\n-record(state, {handler             :: pid(),\n                socket,\n                auth_fun,\n                buffer              :: binary(),\n                ctx                 :: ctx:t() | undefined,\n                services_table      :: ets:tid(),\n                req_headers=[]      :: list(),\n                full_method         :: binary() | undefined,\n                input_ref           :: reference() | undefined,\n                callback_pid        :: pid() | undefined,\n                connection          :: h2_stream_set:stream_set(),\n                request_encoding    :: gzip | identity | undefined,\n                response_encoding   :: gzip | identity | undefined,\n                content_type        :: proto | json | undefined,\n                resp_headers=[]     :: list(),\n                resp_trailers=[]    :: list(),\n                headers_sent=false  :: boolean(),\n                trailers_sent=false :: boolean(),\n                unary_interceptor   :: fun() | undefined,\n                stream_interceptor  :: fun() | undefined,\n                stream_id           :: stream_id(),\n                method              :: #method{} | undefined,\n                stats_handler       :: module() | undefined,\n                stats               :: term() | undefined}).\n\n-type t() :: #state{}.\n\n-type grpc_status_message() :: unicode:chardata() | undefined.\n-type grpc_status() :: binary() | undefined.\n-type http_status() :: integer().\n-type grpc_error() :: {unicode:unicode_binary(), % containing a grpc_status() value as text\n                       grpc_status_message()}.\n-type grpc_error_response() :: {error, grpc_error(), #{headers => map(),\n                                                       trailers => #{}}} |\n                               {http_error, {http_status(), unicode:chardata()}, #{headers => map(),\n                                                                                   trailers => #{}}} |\n                               {error, term()}.\n-type grpc_callback_error() :: {error, grpc_error(), #{headers => map(),\n                                                       trailers => #{}}}.\n\n-type grpc_error_data() :: #{\n    status := grpc_status(),\n    message := grpc_status_message(),\n    trailers => map()\n}.\n-type grpc_extended_error_response() :: {grpc_extended_error, grpc_error_data()}.\n\ninit(Conn, StreamId, [Socket, ServicesTable, AuthFun, UnaryInterceptor,\n                         StreamInterceptor, StatsHandler]) ->\n    process_flag(trap_exit, true),\n    State = #state{connection=Conn,\n                   stream_id=StreamId,\n                   services_table=ServicesTable,\n                   buffer = <<>>,\n                   auth_fun=AuthFun,\n                   unary_interceptor=UnaryInterceptor,\n                   stream_interceptor=StreamInterceptor,\n                   socket=Socket,\n                   handler=self(),\n                   stats_handler=StatsHandler},\n    {ok, State}.\n\non_receive_headers(Headers, State=#state{ctx=_Ctx}) ->\n    %% proplists:get_value(<<\":method\">>, Headers) =:= <<\"POST\">>,\n    Metadata = grpcbox_utils:headers_to_metadata(Headers),\n    Ctx = case parse_options(<<\"grpc-timeout\">>, Headers) of\n              infinity ->\n                  grpcbox_metadata:new_incoming_ctx(Metadata);\n              D ->\n                  Deadline = max(0, erlang:convert_time_unit(D, nanosecond, millisecond)),\n                  erlang:start_timer(Deadline, self(), <<\"grpc-timeout\">>),\n                  ctx:with_deadline_after(grpcbox_metadata:new_incoming_ctx(Metadata), D, nanosecond)\n          end,\n\n    FullPath = proplists:get_value(<<\":path\">>, Headers),\n    %% wait to rpc_begin here since we need to know the method\n    Ctx1 = ctx:with_value(Ctx, grpc_server_method, FullPath),\n    State1=#state{ctx=Ctx2} = stats_handler(Ctx1, rpc_begin, {}, State#state{full_method=FullPath}),\n\n    RequestEncoding = parse_options(<<\"grpc-encoding\">>, Headers),\n    ResponseEncoding = parse_options(<<\"grpc-accept-encoding\">>, Headers),\n    ContentType = parse_options(<<\"content-type\">>, Headers),\n\n    RespHeaders = [{<<\":status\">>, <<\"200\">>},\n                   {<<\"user-agent\">>, <<\"grpc-erlang/0.1.0\">>},\n                   {<<\"content-type\">>, content_type(ContentType)}\n                   | response_encoding(ResponseEncoding)],\n\n    handle_service_lookup(Ctx2, string:lexemes(FullPath, \"/\"),\n                          State1#state{resp_headers=RespHeaders,\n                                       req_headers=Headers,\n                                       request_encoding=RequestEncoding,\n                                       response_encoding=ResponseEncoding,\n                                       content_type=ContentType}).\n\nhandle_service_lookup(Ctx, [Service, Method], State=#state{services_table=ServicesTable}) ->\n    case ets:lookup(ServicesTable, {Service, Method}) of\n        [M=#method{}] ->\n            State1 = State#state{ctx=Ctx,\n                                 method=M},\n            handle_auth(Ctx, State1);\n        _ ->\n            end_stream(?GRPC_STATUS_UNIMPLEMENTED, <<\"Method not found on server\">>, State)\n    end;\nhandle_service_lookup(_, _, State) ->\n    State1 = State#state{resp_headers=[{<<\":status\">>, <<\"200\">>},\n                                       {<<\"user-agent\">>, <<\"grpc-erlang/0.1.0\">>}]},\n    end_stream(?GRPC_STATUS_UNIMPLEMENTED, <<\"failed parsing path\">>, State1),\n    {ok, State1}.\n\nhandle_auth(_Ctx, State=#state{auth_fun=AuthFun,\n                               socket=Socket,\n                               method=#method{input={_, InputStreaming}}}) ->\n    case authenticate(sock:peercert(Socket), AuthFun) of\n        {true, _Identity} ->\n            case InputStreaming of\n                true ->\n                    Ref = make_ref(),\n                    Pid = proc_lib:spawn_link(?MODULE, handle_streams,\n                                              [Ref, State#state{handler=self()}]),\n                    {ok, State#state{input_ref=Ref,\n                                     callback_pid=Pid}};\n                _ ->\n                    {ok, State}\n            end;\n        _ ->\n            end_stream(?GRPC_STATUS_UNAUTHENTICATED, <<\"\">>, State)\n    end.\n\nauthenticate(_, undefined) ->\n    {true, undefined};\nauthenticate({ok, Cert}, Fun) ->\n    Fun(Cert);\nauthenticate(_, _) ->\n    false.\n\nhandle_streams(Ref, State=#state{full_method=FullMethod,\n                                 stream_interceptor=StreamInterceptor,\n                                 method=#method{module=Module,\n                                                function=Function,\n                                                output={_, false}}}) ->\n    case (case StreamInterceptor of\n              undefined -> Module:Function(Ref, State);\n              _ ->\n                  ServerInfo = #{full_method => FullMethod,\n                                 service => Module,\n                                 input_stream => true,\n                                 output_stream => false},\n                  StreamInterceptor(Ref, State, ServerInfo, fun Module:Function/2)\n          end) of\n        {ok, Response, State2} ->\n            send(Response, State2);\n        E={grpc_error, _} ->\n            throw(E);\n        E={grpc_extended_error, _} ->\n            throw(E)\n    end;\nhandle_streams(Ref, State=#state{full_method=FullMethod,\n                                 stream_interceptor=StreamInterceptor,\n                                 method=#method{module=Module,\n                                                function=Function,\n                                                output={_, true}}}) ->\n    case StreamInterceptor of\n        undefined ->\n            Module:Function(Ref, State);\n        _ ->\n            ServerInfo = #{full_method => FullMethod,\n                           service => Module,\n                           input_stream => true,\n                           output_stream => true},\n            StreamInterceptor(Ref, State, ServerInfo, fun Module:Function/2)\n    end.\n\non_send_push_promise(_, State) ->\n    {ok, State}.\n\nctx_with_stream(Ctx, Stream) ->\n    ctx:set(Ctx, ctx_stream_key, Stream).\n\nfrom_ctx(Ctx) ->\n    ctx:get(Ctx, ctx_stream_key).\n\non_receive_data(_, State=#state{method=undefined}) ->\n    {ok, State};\non_receive_data(Bin, State=#state{request_encoding=Encoding,\n                                  buffer=Buffer}) ->\n    try\n        {NewBuffer, Messages} = grpcbox_frame:split(<<Buffer/binary, Bin/binary>>, Encoding),\n        State1 = lists:foldl(fun(EncodedMessage, StateAcc=#state{}) ->\n                                     StateAcc1 = handle_message(EncodedMessage, StateAcc),\n                                     StateAcc1\n                             end, State, Messages),\n        {ok, State1#state{buffer=NewBuffer}}\n    catch\n        throw:{grpc_error, {Status, Message}} ->\n            end_stream(Status, Message, State);\n        throw:{grpc_extended_error, #{status := Status, message := Message} = ErrorData} ->\n            State2 = add_trailers_from_error_data(ErrorData, State),\n            end_stream(Status, Message, State2);\n        C:E:S ->\n            ?LOG_INFO(\"crash: class=~p exception=~p stacktrace=~p\", [C, E, S]),\n            end_stream(?GRPC_STATUS_UNKNOWN, <<>>, State)\n    end.\n\nhandle_message(EncodedMessage, State=#state{input_ref=Ref,\n                                            ctx=Ctx,\n                                            callback_pid=Pid,\n                                            method=#method{proto=Proto,\n                                                           input={Input, InputStream},\n                                                           output={_Output, OutputStream}}}) ->\n    try Proto:decode_msg(EncodedMessage, Input) of\n        Message ->\n            State1=#state{ctx=Ctx1} =\n                stats_handler(Ctx, in_payload, #{uncompressed_size => erlang:external_size(Message),\n                                                 compressed_size => size(EncodedMessage)}, State),\n            case {InputStream, OutputStream} of\n                {true, _} ->\n                    Pid ! {Ref, Message},\n                    State1;\n                {false, true} ->\n                    _ = proc_lib:spawn_link(?MODULE, handle_streams,\n                                            [Message, State1#state{handler=self()}]),\n                    State1;\n                {false, false} ->\n                    handle_unary(Ctx1, Message, State1)\n            end\n    catch\n        error:{gpb_error, _} ->\n            ?THROW(?GRPC_STATUS_INTERNAL, <<\"Error parsing request protocol buffer\">>)\n    end.\n\nhandle_unary(Ctx, Message, State=#state{unary_interceptor=UnaryInterceptor,\n                                        full_method=FullMethod,\n                                        method=#method{module=Module,\n                                                       function=Function,\n                                                       proto=_Proto,\n                                                       input={_Input, _InputStream},\n                                                       output={_Output, _OutputStream}}}) ->\n    Ctx1 = ctx_with_stream(Ctx, State),\n    case (case UnaryInterceptor of\n              undefined -> Module:Function(Ctx1, Message);\n              _ ->\n                  ServerInfo = #{full_method => FullMethod,\n                                 service => Module},\n                  UnaryInterceptor(Ctx1, Message, ServerInfo,\n                                   fun Module:Function/2)\n          end) of\n        {ok, Response, Ctx2} ->\n            State1 = from_ctx(Ctx2),\n            send(false, Response, State1);\n        E={grpc_error, _} ->\n            throw(E);\n        E={grpc_extended_error, _} ->\n            throw(E)\n    end.\n\non_end_stream(State) ->\n    on_end_stream_(State).\n\non_end_stream_(State=#state{input_ref=Ref,\n                            callback_pid=Pid,\n                            method=#method{input={_Input, true},\n                                           output={_Output, false}}}) ->\n    Pid ! {Ref, eos},\n    {ok, State};\non_end_stream_(State=#state{input_ref=Ref,\n                            callback_pid=Pid,\n                            method=#method{input={_Input, true},\n                                           output={_Output, true}}}) ->\n    Pid ! {Ref, eos},\n    {ok, State};\non_end_stream_(State=#state{input_ref=_Ref,\n                            callback_pid=_Pid,\n                            method=#method{input={_Input, false},\n                                           output={_Output, true}}}) ->\n    {ok, State};\non_end_stream_(State=#state{method=#method{output={_Output, false}}}) ->\n    end_stream(State);\non_end_stream_(State) ->\n    end_stream(State).\n\nterminate(State) ->\n    on_end_stream(State).\n\n%% Internal\n\nstats_handler(Ctx, _, _, State=#state{stats_handler=undefined}) ->\n    State#state{ctx=Ctx};\nstats_handler(Ctx, Event, Stats, State=#state{stats_handler=StatsHandler,\n                                              stats=StatsState}) ->\n    {Ctx1, StatsState1} = StatsHandler:handle(Ctx, server, Event, Stats, StatsState),\n    State#state{ctx=Ctx1,\n                stats=StatsState1}.\n\nend_stream(State) ->\n    end_stream(?GRPC_STATUS_OK, <<>>, State).\n\nend_stream(Status, Message, State=#state{headers_sent=false}) ->\n    end_stream(Status, Message, send_headers(State));\nend_stream(_Status, _Message, State=#state{trailers_sent=true}) ->\n    {ok, State};\nend_stream(Status, Message, State=#state{connection=Conn,\n                                         stream_id=StreamId,\n                                         ctx=Ctx,\n                                         resp_trailers=Trailers}) ->\n    EncodedTrailers = grpcbox_utils:encode_headers(Trailers),\n    h2_connection:send_trailers(Conn, StreamId, [{<<\"grpc-status\">>, Status},\n                                                    {<<\"grpc-message\">>, Message} | EncodedTrailers],\n                                [{send_end_stream, true}]),\n    Ctx1 = ctx:with_value(Ctx, grpc_server_status, grpcbox_utils:status_to_string(Status)),\n    State1 = stats_handler(Ctx1, rpc_end, {}, State),\n    {ok, State1#state{trailers_sent=true}}.\n\nset_trailers(Ctx, Trailers) ->\n    State = from_ctx(Ctx),\n    ctx_with_stream(Ctx, State#state{resp_trailers=maps:to_list(Trailers)}).\n\nsend_headers(State) ->\n    send_headers([], State).\n\nsend_headers(Ctx, Headers) when is_map(Headers) ->\n    State = from_ctx(Ctx),\n    send_headers(maps:to_list(maybe_encode_headers(Headers)), State);\n\nsend_headers(_Metadata, State=#state{headers_sent=true}) ->\n    State;\nsend_headers(Metadata, State=#state{connection=Conn,\n                                    stream_id=StreamId,\n                                    resp_headers=Headers,\n                                    headers_sent=false}) ->\n    MdHeaders = grpcbox_utils:encode_headers(Metadata),\n    h2_connection:send_headers(Conn, StreamId, Headers ++ MdHeaders, [{send_end_stream, false}]),\n    State#state{headers_sent=true}.\n\ncode_to_status(0) -> ?GRPC_STATUS_OK;\ncode_to_status(1) -> ?GRPC_STATUS_CANCELLED;\ncode_to_status(2) -> ?GRPC_STATUS_UNKNOWN;\ncode_to_status(3) -> ?GRPC_STATUS_INVALID_ARGUMENT;\ncode_to_status(4) -> ?GRPC_STATUS_DEADLINE_EXCEEDED;\ncode_to_status(5) -> ?GRPC_STATUS_NOT_FOUND;\ncode_to_status(6) -> ?GRPC_STATUS_ALREADY_EXISTS;\ncode_to_status(7) -> ?GRPC_STATUS_PERMISSION_DENIED;\ncode_to_status(8) -> ?GRPC_STATUS_RESOURCE_EXHAUSTED;\ncode_to_status(9) -> ?GRPC_STATUS_FAILED_PRECONDITION;\ncode_to_status(10) -> ?GRPC_STATUS_ABORTED;\ncode_to_status(11) -> ?GRPC_STATUS_OUT_OF_RANGE;\ncode_to_status(12) -> ?GRPC_STATUS_UNIMPLEMENTED;\ncode_to_status(13) -> ?GRPC_STATUS_INTERNAL;\ncode_to_status(14) -> ?GRPC_STATUS_UNAVAILABLE;\ncode_to_status(15) -> ?GRPC_STATUS_DATA_LOSS;\ncode_to_status(16) -> ?GRPC_STATUS_UNAUTHENTICATED.\n\nerror(Status, Message) ->\n    exit(?GRPC_ERROR(Status, Message)).\n\nctx(#state{handler=Pid}) ->\n    h2_stream:call(Pid, ctx).\n\nctx(#state{handler=Pid}, Ctx) ->\n    h2_stream:call(Pid, {ctx, Ctx}).\n\nhandle_call(ctx, State=#state{ctx=Ctx}) ->\n    {ok, Ctx, State};\nhandle_call({ctx, Ctx}, State) ->\n    {ok, ok, State#state{ctx=Ctx}}.\n\nhandle_info({add_headers, Headers}, State) ->\n    update_headers(Headers, State);\nhandle_info({add_trailers, Trailers}, State) ->\n    update_trailers(Trailers, State);\nhandle_info({send_proto, Message}, State) ->\n    send(false, Message, State);\nhandle_info({'EXIT', _, normal}, State) ->\n    end_stream(State),\n    State;\nhandle_info({'EXIT', _, {grpc_error, {Status, Message}}}, State) ->\n    end_stream(Status, Message, State),\n    State;\nhandle_info({'EXIT', _, {grpc_extended_error, #{status := Status, message := Message} = ErrorData}}, State) ->\n    State1 = add_trailers_from_error_data(ErrorData, State),\n    end_stream(Status, Message, State1),\n    State1;\nhandle_info({'EXIT', _, _Other}, State) ->\n    end_stream(?GRPC_STATUS_UNKNOWN, <<\"process exited without reason\">>, State),\n    State;\nhandle_info({timeout,_Ref,<<\"grpc-timeout\">>}, State) ->\n    end_stream(?GRPC_STATUS_DEADLINE_EXCEEDED, <<\"Deadline expired\">>, State),\n    State;\nhandle_info(_, State) ->\n    State.\n\nadd_headers(Headers, #state{handler=Pid}) ->\n    Pid ! {add_headers, Headers}.\n\nadd_trailers(Ctx, Trailers=#{}) ->\n    State=#state{resp_trailers=RespTrailers} = from_ctx(Ctx),\n    ctx_with_stream(Ctx, State#state{resp_trailers=maps:to_list(Trailers) ++ RespTrailers});\nadd_trailers(Headers, #state{handler=Pid}) ->\n    Pid ! {add_trailers, Headers}.\n\nupdate_headers(Headers, State=#state{resp_headers=RespHeaders}) ->\n    State#state{resp_headers=RespHeaders ++ Headers}.\n\nupdate_trailers(Trailers, State=#state{resp_trailers=RespTrailers}) ->\n    State#state{resp_trailers=RespTrailers ++ Trailers}.\n\nsend(Message, #state{handler=Pid}) ->\n    Pid ! {send_proto, Message}.\n\nsend(End, Message, State=#state{headers_sent=false}) ->\n    State1 = send_headers(State),\n    send(End, Message, State1);\nsend(End, Message, State=#state{ctx=Ctx,\n                                connection=Conn,\n                                stream_id=StreamId,\n                                response_encoding=Encoding,\n                                method=#method{proto=Proto,\n                                               input={_Input, _},\n                                               output={Output, _}}}) ->\n    BodyToSend = Proto:encode_msg(Message, Output),\n    OutFrame = grpcbox_frame:encode(Encoding, BodyToSend),\n    ok = h2_connection:send_body(Conn, StreamId, OutFrame, [{send_end_stream, End}]),\n    stats_handler(Ctx, out_payload, #{uncompressed_size => erlang:external_size(Message),\n                                      compressed_size => size(BodyToSend)}, State).\n\nresponse_encoding(gzip) ->\n    [{<<\"grpc-encoding\">>, <<\"gzip\">>}];\nresponse_encoding(snappy) ->\n    [{<<\"grpc-encoding\">>, <<\"snappy\">>}];\nresponse_encoding(deflate) ->\n    [{<<\"grpc-encoding\">>, <<\"deflate\">>}];\nresponse_encoding(identity) ->\n    [{<<\"grpc-encoding\">>, <<\"identity\">>}].\n\ncontent_type(json) ->\n    <<\"application/grpc+json\">>;\ncontent_type(_) ->\n    <<\"application/grpc+proto\">>.\n\ntimeout_to_duration(T, <<\"H\">>) ->\n    erlang:convert_time_unit(timer:hours(T), millisecond, nanosecond);\ntimeout_to_duration(T, <<\"M\">>) ->\n    erlang:convert_time_unit(timer:minutes(T), millisecond, nanosecond);\ntimeout_to_duration(T, <<\"S\">>) ->\n    erlang:convert_time_unit(T, second, nanosecond);\ntimeout_to_duration(T, <<\"m\">>) ->\n    erlang:convert_time_unit(T, millisecond, nanosecond);\ntimeout_to_duration(T, <<\"u\">>) ->\n    erlang:convert_time_unit(T, microsecond, nanosecond);\ntimeout_to_duration(T, <<\"n\">>) ->\n    T.\n\nparse_options(<<\"grpc-timeout\">>, Headers) ->\n    case proplists:get_value(<<\"grpc-timeout\">>, Headers, infinity) of\n        infinity ->\n            infinity;\n        T ->\n            {I, U} = string:to_integer(T),\n            timeout_to_duration(I, U)\n    end;\nparse_options(<<\"content-type\">>, Headers) ->\n    case proplists:get_value(<<\"content-type\">>, Headers, undefined) of\n        undefined ->\n            proto;\n        <<\"application/grpc\">> ->\n            proto;\n        <<\"application/grpc+proto\">> ->\n            proto;\n        <<\"application/grpc+json\">> ->\n            json;\n        <<\"application/grpc+\", _>> ->\n            ?THROW(?GRPC_STATUS_UNIMPLEMENTED, <<\"unknown content-type\">>)\n    end;\nparse_options(<<\"grpc-encoding\">>, Headers) ->\n    parse_encoding(<<\"grpc-encoding\">>, Headers);\nparse_options(<<\"grpc-accept-encoding\">>, Headers) ->\n    parse_encoding(<<\"grpc-accept-encoding\">>, Headers).\n\nparse_encoding(EncodingType, Headers) ->\n    case proplists:get_value(EncodingType, Headers, undefined) of\n        undefined ->\n            identity;\n        <<\"gzip\", _/binary>> ->\n            gzip;\n        <<\"snappy\", _/binary>> ->\n            snappy;\n        <<\"deflate\", _/binary>> ->\n            deflate;\n        <<\"identity\", _/binary>> ->\n            identity;\n        _ ->\n            ?THROW(?GRPC_STATUS_UNIMPLEMENTED, <<\"unknown encoding\">>)\n    end.\n\nmaybe_encode_headers(Headers) ->\n    maps:map(fun(K, V) ->\n                     maybe_encode_header_value(K, V)\n             end, Headers).\n\nmaybe_encode_header_value(K, V) ->\n    case binary:longest_common_suffix([K, <<\"-bin\">>]) == 4 of\n        true ->\n            base64:encode(V);\n        false ->\n            V\n    end.\n\nadd_trailers_from_error_data(ErrorData, State) ->\n    Trailers = maps:get(trailers, ErrorData, #{}),\n    update_trailers(maps:to_list(Trailers), State).\n"
  },
  {
    "path": "src/grpcbox_subchannel.erl",
    "content": "-module(grpcbox_subchannel).\n\n-behaviour(gen_statem).\n\n-export([start_link/5,\n         conn/1,\n         conn/2,\n         stop/2]).\n-export([init/1,\n         callback_mode/0,\n         terminate/3,\n\n         %% states\n         ready/3,\n         disconnected/3]).\n\n-record(data, {endpoint :: grpcbox_channel:endpoint(),\n               channel :: grpcbox_channel:t(),\n               info :: #{authority := binary(),\n                         scheme := binary(),\n                         encoding := grpcbox:encoding(),\n                         stats_handler := module() | undefined\n                        },\n               conn :: h2_stream_set:stream_set() | undefined,\n               conn_pid :: pid() | undefined,\n               idle_interval :: timer:time()}).\n\nstart_link(Name, Channel, Endpoint, Encoding, StatsHandler) ->\n    gen_statem:start_link(?MODULE, [Name, Channel, Endpoint, Encoding, StatsHandler], []).\n\nconn(Pid) ->\n    conn(Pid, infinity).\nconn(Pid, Timeout) ->\n    try\n        gen_statem:call(Pid, conn, Timeout)\n    catch\n        exit:{timeout, _} -> {error, timeout}\n    end.\n\nstop(Pid, Reason) ->\n    gen_statem:stop(Pid, Reason, infinity).\n\ninit([Name, Channel, Endpoint, Encoding, StatsHandler]) ->\n    process_flag(trap_exit, true),\n    gproc_pool:connect_worker(Channel, Name),\n    {ok, disconnected, #data{conn=undefined,\n                             info=info_map(Endpoint, Encoding, StatsHandler),\n                             endpoint=Endpoint,\n                             channel=Channel}}.\n\n%% In case of unix socket transport\n%% (defined as tuple {local, _UnixPath} in gen_tcp),\n%% there is no standard on what the authority field value\n%% should be, as HTTP/2 over UDS is not formally specified.\n%% To follow other gRPC implementations' behavior,\n%% the \"localhost\" value is used.\ninfo_map({Scheme, {local, _UnixPath} = Host, Port, _, _}, Encoding, StatsHandler) ->\n    case {Scheme, Port} of\n        %% The ssl layer is not functional over unix sockets currently,\n        %% and the port is strictly required to be 0 by gen_tcp.\n        {http, 0} ->\n            #{authority => <<\"localhost\">>,\n              scheme => <<\"http\">>,\n              encoding => Encoding,\n              stats_handler => StatsHandler};\n        _ ->\n            error({badarg, [Scheme, Host, Port]})\n    end;\ninfo_map({http, Host, 80, _, _}, Encoding, StatsHandler) ->\n    #{authority => list_to_binary(Host),\n      scheme => <<\"http\">>,\n      encoding => Encoding,\n      stats_handler => StatsHandler};\ninfo_map({https, Host, 443, _, _}, Encoding, StatsHandler) ->\n    #{authority => list_to_binary(Host),\n      scheme => <<\"https\">>,\n      encoding => Encoding,\n      stats_handler => StatsHandler};\ninfo_map({Scheme, Host, Port, _, _}, Encoding, StatsHandler) ->\n    #{authority => list_to_binary(Host ++ \":\" ++ integer_to_list(Port)),\n      scheme => atom_to_binary(Scheme, utf8),\n      encoding => Encoding,\n      stats_handler => StatsHandler}.\n\ncallback_mode() ->\n    state_functions.\n\nready({call, From}, conn, #data{conn=Conn,\n                                info=Info}) ->\n    {keep_state_and_data, [{reply, From, {ok, Conn, Info}}]};\nready(EventType, EventContent, Data) ->\n    handle_event(EventType, EventContent, Data).\n\ndisconnected({call, From}, conn, Data) ->\n    connect(Data, From, [postpone]);\ndisconnected(EventType, EventContent, Data) ->\n    handle_event(EventType, EventContent, Data).\n\nhandle_event({call, From}, info, #data{info=Info}) ->\n    {keep_state_and_data, [{reply, From, Info}]};\nhandle_event(info, {'EXIT', Pid, _}, Data=#data{conn_pid=Pid}) ->\n    {next_state, disconnected, Data#data{conn=undefined, conn_pid=undefined}};\nhandle_event(info, {'EXIT', _, econnrefused}, #data{conn=undefined, conn_pid=undefined}) ->\n    keep_state_and_data;\nhandle_event({call, From}, shutdown, _) ->\n    {stop_and_reply, normal, {reply, From, ok}};\nhandle_event(_, _, _) ->\n    keep_state_and_data.\n\nterminate(_Reason, _State, #data{conn=undefined,\n                                 endpoint=Endpoint,\n                                 channel=Channel}) ->\n    gproc_pool:disconnect_worker(Channel, Endpoint),\n    gproc_pool:remove_worker(Channel, Endpoint),\n    ok;\nterminate(normal, _State, #data{conn=Pid,\n                                 endpoint=Endpoint,\n                                 channel=Channel}) ->\n    h2_connection:stop(Pid),\n    gproc_pool:disconnect_worker(Channel, Endpoint),\n    gproc_pool:remove_worker(Channel, Endpoint),\n    ok;\nterminate(Reason, _State, #data{conn_pid=Pid,\n                                 endpoint=Endpoint,\n                                 channel=Channel}) ->\n    exit(Pid, Reason),\n    gproc_pool:disconnect_worker(Channel, Endpoint),\n    gproc_pool:remove_worker(Channel, Endpoint),\n    ok.\n\nconnect(Data=#data{conn=undefined,\n                   endpoint={Transport, Host, Port, SSLOptions, ConnectionSettings}}, From, Actions) ->\n    case h2_client:start_link(Transport, Host, Port, options(Transport, SSLOptions),\n                              ConnectionSettings#{garbage_on_end => true,\n                                                  stream_callback_mod => grpcbox_client_stream}) of\n        {ok, Conn} ->\n            Pid = h2_stream_set:connection(Conn),\n            {next_state, ready, Data#data{conn=Conn, conn_pid=Pid}, Actions};\n        {error, _}=Error ->\n            {next_state, disconnected, Data#data{conn=undefined}, [{reply, From, Error}]}\n    end;\nconnect(Data=#data{conn=Conn, conn_pid=Pid}, From, Actions) when is_pid(Pid) ->\n    h2_connection:stop(Conn),\n    connect(Data#data{conn=undefined, conn_pid=undefined}, From, Actions).\n\noptions(https, Options) ->\n    [{client_preferred_next_protocols, {client, [<<\"h2\">>]}} | Options];\noptions(http, Options) ->\n    Options.\n"
  },
  {
    "path": "src/grpcbox_sup.erl",
    "content": "%%%-------------------------------------------------------------------\n%% @doc grpcbox top level supervisor.\n%% @end\n%%%-------------------------------------------------------------------\n\n-module(grpcbox_sup).\n\n-behaviour(supervisor).\n\n-export([start_link/0]).\n-export([init/1]).\n\n-include(\"grpcbox.hrl\").\n\n-define(SERVER, ?MODULE).\n\nstart_link() ->\n    supervisor:start_link({local, ?SERVER}, ?MODULE, []).\n\ninit(_Args) ->\n    SupFlags = #{strategy => one_for_one,\n                 intensity => 5,\n                 period => 10},\n    ChildSpecs = [#{id => grpcbox_services_simple_sup,\n                    start => {grpcbox_services_simple_sup, start_link, []},\n                    type => supervisor,\n                    restart => permanent,\n                    shutdown => 5000},\n                  #{id => grpcbox_channel_sup,\n                    start => {grpcbox_channel_sup, start_link, []},\n                    type => supervisor,\n                    restart => permanent,\n                    shutdown => 5000}],\n    {ok, {SupFlags, ChildSpecs}}.\n"
  },
  {
    "path": "src/grpcbox_trace.erl",
    "content": "%% interceptors for opencensus tracing and stats\n-module(grpcbox_trace).\n\n-export([%% server side\n         unary/4,\n         stream/4,\n\n         %% unary client interceptor\n         unary_client/7,\n\n         %% client streaminig interceptors\n         new_stream/6,\n         send_msg/3,\n         recv_msg/3]).\n\nunary_client(Ctx, _Channel, Handler, FullMethod, Input, _Def, _Options) ->\n    Ctx1 = oc_trace:with_child_span(Ctx,\n                                    FullMethod,\n                                    #{}),\n    try\n        Handler(Ctx1, Input)\n    after\n        oc_trace:finish_span(oc_trace:from_ctx(Ctx1))\n    end.\n\nnew_stream(Ctx, Channel, Path, Def, Streamer, Options) ->\n    {ok, S} = Streamer(Ctx, Channel, Path, Def, Options),\n    {ok, #{client_stream => S}}.\n\nsend_msg(#{client_stream := ClientStream}, Streamer, Input) ->\n    Streamer(ClientStream, Input).\n\nrecv_msg(#{client_stream := ClientStream}, Streamer, Input) ->\n    Streamer(ClientStream, Input).\n\nunary(Ctx, Message, _ServerInfo=#{full_method := FullMethod}, Handler) ->\n    Ctx1 = trace_context_from_ctx(Ctx),\n    Ctx2 = oc_trace:with_child_span(Ctx1,\n                                    FullMethod,\n                                    #{remote_parent => true}),\n    try\n        Handler(Ctx2, Message)\n    after\n        oc_trace:finish_span(oc_trace:from_ctx(Ctx2))\n    end.\n\nstream(Ref, Stream, _ServerInfo=#{full_method := FullMethod}, Handler) ->\n    Ctx = grpcbox_stream:ctx(Stream),\n    Ctx1 = trace_context_from_ctx(Ctx),\n    Ctx2 = oc_trace:with_child_span(Ctx1,\n                                    FullMethod,\n                                    #{remote_parent => true}),\n    try\n        grpcbox_stream:ctx(Stream, Ctx2),\n        Handler(Ref, Stream)\n    after\n        oc_trace:finish_span(oc_trace:from_ctx(Ctx2))\n    end.\n\n%%\n\ntrace_context_from_ctx(Ctx) ->\n    Metadata = grpcbox_metadata:from_incoming_ctx(Ctx),\n    case maps:get(<<\"grpc-trace-bin\">>, Metadata, undefined) of\n        undefined ->\n            Ctx;\n        Bin ->\n            try\n                oc_trace:with_span_ctx(Ctx, oc_propagation_binary:decode(Bin))\n            catch\n                _:_ ->\n                    Ctx\n            end\n    end.\n"
  },
  {
    "path": "src/grpcbox_utils.erl",
    "content": "-module(grpcbox_utils).\n\n-export([headers_to_metadata/1,\n         maybe_decode_header/2,\n         decode_header/1,\n         encode_headers/1,\n         is_reserved_header/1,\n         status_to_string/1,\n         get_timeout_from_ctx/2]).\n\n-include(\"grpcbox.hrl\").\n\nheaders_to_metadata(H) ->\n    lists:foldl(fun({K, V}, Acc) ->\n                        case is_reserved_header(K) of\n                            true ->\n                                Acc;\n                            false ->\n                                maps:put(K, maybe_decode_header(K, V), Acc)\n                        end\n                end, #{}, H).\n\n%% TODO: consolidate with grpc_lib. But have to update their header map to support\n%% a list of values for a key.\n\nmaybe_decode_header(Key, Value) ->\n    case binary:longest_common_suffix([Key, <<\"-bin\">>]) == 4 of\n        true ->\n            decode_header(Value);\n        false ->\n            Value\n    end.\n\n%% golang gRPC implementation does not add the padding that the Erlang\n%% decoder needs...\ndecode_header(Base64) when byte_size(Base64) rem 4 == 3 ->\n    base64:decode(<<Base64/bytes, \"=\">>);\ndecode_header(Base64) when byte_size(Base64) rem 4 == 2 ->\n    base64:decode(<<Base64/bytes, \"==\">>);\ndecode_header(Base64) ->\n    base64:decode(Base64).\n\nencode_headers([]) ->\n    [];\nencode_headers([{Key, Value} | Rest]) ->\n     case binary:longest_common_suffix([Key, <<\"-bin\">>]) == 4 of\n         true ->\n             [{Key, base64:encode(Value)} | encode_headers(Rest)];\n         false ->\n             [{Key, Value} | encode_headers(Rest)]\n     end.\n\nis_reserved_header(<<\"content-type\">>) -> true;\nis_reserved_header(<<\"grpc-message-type\">>) -> true;\nis_reserved_header(<<\"grpc-encoding\">>) -> true;\nis_reserved_header(<<\"grpc-message\">>) -> true;\nis_reserved_header(<<\"grpc-status\">>) -> true;\nis_reserved_header(<<\"grpc-timeout\">>) -> true;\nis_reserved_header(<<\"grpc-status-details-bin\">>) -> true;\nis_reserved_header(<<\"te\">>) -> true;\nis_reserved_header(_) -> false.\n\n-spec status_to_string(binary()) -> binary().\nstatus_to_string(?GRPC_STATUS_OK) ->\n    <<\"OK\">>;\nstatus_to_string(?GRPC_STATUS_CANCELLED) ->\n    <<\"CANCELLED\">>;\nstatus_to_string(?GRPC_STATUS_UNKNOWN) ->\n    <<\"UNKNOWN\">>;\nstatus_to_string(?GRPC_STATUS_INVALID_ARGUMENT) ->\n    <<\"INVALID_ARGUMENT\">>;\nstatus_to_string(?GRPC_STATUS_DEADLINE_EXCEEDED) ->\n    <<\"DEADLINE_EXCEEDED\">>;\nstatus_to_string(?GRPC_STATUS_NOT_FOUND) ->\n    <<\"NOT_FOUND\">>;\nstatus_to_string(?GRPC_STATUS_ALREADY_EXISTS) ->\n    <<\"ALREADY_EXISTS\">>;\nstatus_to_string(?GRPC_STATUS_PERMISSION_DENIED) ->\n    <<\"PERMISSION_DENIED\">>;\nstatus_to_string(?GRPC_STATUS_RESOURCE_EXHAUSTED) ->\n    <<\"RESOURCE_EXHAUSTED\">>;\nstatus_to_string(?GRPC_STATUS_FAILED_PRECONDITION) ->\n    <<\"FAILED_PRECONDITION\">>;\nstatus_to_string(?GRPC_STATUS_ABORTED) ->\n    <<\"ABORTED\">>;\nstatus_to_string(?GRPC_STATUS_OUT_OF_RANGE) ->\n    <<\"OUT_OF_RANGE\">>;\nstatus_to_string(?GRPC_STATUS_UNIMPLEMENTED) ->\n    <<\"UNIMPLEMENTED\">>;\nstatus_to_string(?GRPC_STATUS_INTERNAL) ->\n    <<\"INTERNAL\">>;\nstatus_to_string(?GRPC_STATUS_UNAVAILABLE) ->\n    <<\"UNAVAILABLE\">>;\nstatus_to_string(?GRPC_STATUS_DATA_LOSS) ->\n    <<\"DATA_LOSS\">>;\nstatus_to_string(?GRPC_STATUS_UNAUTHENTICATED) ->\n    <<\"UNAUTHENTICATED\">>;\nstatus_to_string(Code) ->\n    <<\"CODE_\", Code/binary>>.\n\nget_timeout_from_ctx(Ctx, DefaultTimeout) ->\n    case ctx:deadline(Ctx) of\n        undefined ->\n            DefaultTimeout;\n        infinity ->\n            infinity;\n        {Deadline, _} ->\n            Timeout = erlang:convert_time_unit(Deadline - erlang:monotonic_time(), native, millisecond),\n            case Timeout < 0 of\n                true -> 0;\n                false -> Timeout\n            end\n    end.\n\n"
  },
  {
    "path": "test/grpcbox_SUITE.erl",
    "content": "-module(grpcbox_SUITE).\n\n-compile(export_all).\n\n-include_lib(\"common_test/include/ct.hrl\").\n-include_lib(\"eunit/include/eunit.hrl\").\n\n-include_lib(\"opencensus/include/opencensus.hrl\").\n\n-include(\"grpcbox.hrl\").\n\ngroups() ->\n    [{ssl, [], [unary_authenticated]},\n     {tcp, [], [unary_no_auth, multiple_servers,\n                unary_garbage_collect_streams]},\n     {socket_options, [], [fd_socket_option]},\n     {concurrent, [{repeat_until_any_fail, 5}], [unary_concurrent]},\n     {negative_tests, [], [unimplemented, closed_stream, generate_error, streaming_generate_error]},\n     {negative_ssl, [], [unauthorized]},\n     {context, [], [%% deadline\n                   ]}].\n\nall() ->\n    [{group, ssl},\n     {group, tcp},\n     {group, socket_options},\n     {group, concurrent},\n     {group, negative_tests},\n     {group, negative_ssl},\n     initially_down_service,\n     unary_interceptor,\n     unary_client_interceptor,\n     chain_interceptor,\n     stream_interceptor,\n     bidirectional,\n     client_stream,\n     client_stream_garbage_collect_streams,\n     compression,\n     stats_handler,\n     server_latency_stats,\n     health_service,\n     reflection_service\n     %% TODO: rst stream error handling\n     %% %% trace_interceptor\n    ].\n\ninit_per_suite(Config) ->\n    application:load(grpcbox),\n    Config.\n\nend_per_suite(_Config) ->\n    ok.\n\ninit_per_group(ssl, Config) ->\n    ClientCerts = cert_dir(Config),\n    Options = [{certfile, cert(Config, \"server1.pem\")},\n               {keyfile, cert(Config, \"server1.key\")},\n               {cacertfile, cert(Config, \"ca.pem\")}\n              ],\n    application:set_env(grpcbox, client, #{channels => [{default_channel, [{https, \"localhost\", 8080, Options}], #{}}]}),\n    Servers = [#{grpc_opts => #{service_protos => [route_guide_pb],\n                                services => #{'routeguide.RouteGuide' => routeguide_route_guide},\n                                client_cert_dir => ClientCerts},\n                 transport_opts => #{ssl => true,\n                                     keyfile => cert(Config, \"server1.key\"),\n                                     certfile => cert(Config, \"server1.pem\"),\n                                     cacertfile => cert(Config, \"ca.pem\")}}],\n    application:set_env(grpcbox, servers, Servers),\n    application:ensure_all_started(grpcbox),\n    Config;\ninit_per_group(tcp, Config) ->\n    application:set_env(grpcbox, client, #{channels => [{default_channel, [{http, \"localhost\", 8080, []}],\n                                                         #{}}]}),\n    application:set_env(grpcbox, servers, [#{grpc_opts => #{service_protos => [route_guide_pb],\n                                                            services => #{'routeguide.RouteGuide' =>\n                                                                              routeguide_route_guide}},\n                                             transport_opts => #{}}]),\n    application:ensure_all_started(grpcbox),\n    Config;\ninit_per_group(socket_options, Config) ->\n    application:set_env(grpcbox, client, #{channels => [{default_channel, [{http, \"localhost\", 8080, []}],\n                                                         #{}}]}),\n    application:set_env(grpcbox, servers, [#{grpc_opts => #{service_protos => [route_guide_pb],\n                                                            services => #{'routeguide.RouteGuide' =>\n                                                                              routeguide_route_guide}},\n                                             transport_opts => #{}}]),\n    Config;\ninit_per_group(concurrent, Config) ->\n    application:set_env(grpcbox, client, #{channels => [{default_channel, [{http, \"localhost\", 8080, []}],\n                                                         #{}}]}),\n    application:set_env(grpcbox, servers, [#{grpc_opts => #{service_protos => [route_guide_pb],\n                                                            services => #{'routeguide.RouteGuide' =>\n                                                                              routeguide_route_guide}},\n                                             transport_opts => #{}}]),\n    application:ensure_all_started(grpcbox),\n    Config;\ninit_per_group(negative_tests, Config) ->\n    application:set_env(grpcbox, client, #{channels => [{default_channel, [{http, \"localhost\", 8080, []}], #{}}]}),\n    application:set_env(grpcbox, servers, [#{grpc_opts => #{service_protos => [route_guide_pb],\n                                                            services => #{'routeguide.RouteGuide' =>\n                                                                              routeguide_route_guide}},\n                                             transport_opts => #{}}]),\n    application:ensure_all_started(grpcbox),\n    Config;\ninit_per_group(negative_ssl, Config) ->\n    ClientCerts = cert_dir(Config),\n    Options = [{certfile, cert(Config, \"server1.pem\")},\n               {keyfile, cert(Config, \"server1.key\")},\n               {cacertfile, cert(Config, \"ca.pem\")}],\n    application:set_env(grpcbox, client, #{channels => [{default_channel, [{https, \"localhost\", 8080, Options}], #{}}]}),\n\n    Servers = [#{grpc_opts => #{service_protos => [route_guide_pb],\n                                services => #{'routeguide.RouteGuide' => routeguide_route_guide},\n                                client_cert_dir => ClientCerts,\n                                auth_fun => fun(_) -> false end\n                               },\n                 transport_opts => #{ssl => true,\n                                     keyfile => cert(Config, \"server1.key\"),\n                                     certfile => cert(Config, \"server1.pem\"),\n                                     cacertfile => cert(Config, \"ca.pem\")}}],\n    application:set_env(grpcbox, servers, Servers),\n    application:ensure_all_started(grpcbox),\n    Config.\n\nend_per_group(_, _Config) ->\n    ?assertMatch(ok, grpcbox_services_simple_sup:terminate_child(#{ip => {0, 0, 0, 0},\n                                                                   port => 8080})),\n    application:stop(grpcbox),\n    ok.\n\ninit_per_testcase(initially_down_service, Config) ->\n    application:set_env(grpcbox, client, #{channels => [{default_channel,\n                                                         [{http, \"localhost\", 8080, []}], #{}}]}),\n    application:set_env(grpcbox, servers, []),\n    application:ensure_all_started(grpcbox),\n    Config;\ninit_per_testcase(unary_client_interceptor, Config) ->\n    application:set_env(grpcbox, client, #{channels => [{default_channel,\n                                                         [{http, \"localhost\", 8080, []}],\n                                                         #{unary_interceptor => fun(Ctx, _Channel, Handler, _Path, _Input, _Def, _Options) ->\n                                                                                        Handler(Ctx, #{latitude => 30,\n                                                                                                       longitude => 90})\n                                                                                end}}]}),\n    application:set_env(grpcbox, servers, [#{grpc_opts => #{service_protos => [route_guide_pb],\n                                                            services => #{'routeguide.RouteGuide' =>\n                                                                              routeguide_route_guide}},\n                                             transport_opts => #{}}]),\n    application:ensure_all_started(grpcbox),\n    Config;\ninit_per_testcase(unary_interceptor, Config) ->\n    application:set_env(grpcbox, client, #{channels => [{default_channel,\n                                                         [{http, \"localhost\", 8080, []}], #{}}]}),\n    application:set_env(grpcbox, servers,\n                        [#{grpc_opts => #{service_protos => [route_guide_pb],\n                                          services => #{'routeguide.RouteGuide' =>\n                                                            routeguide_route_guide},\n                                          unary_interceptor => fun(Ctx, _Req, _, Method) ->\n                                                                       Method(Ctx, #{latitude => 30,\n                                                                                     longitude => 90})\n                                                               end},\n                           transport_opts => #{}}]),\n    application:ensure_all_started(grpcbox),\n\n    Config;\ninit_per_testcase(chain_interceptor, Config) ->\n    application:set_env(grpcbox, client, #{channels => [{default_channel,\n                                                         [{http, \"localhost\", 8080, []}], #{}}]}),\n    application:set_env(grpcbox, servers,\n                        [#{grpc_opts => #{service_protos => [route_guide_pb],\n                                          services => #{'routeguide.RouteGuide' => routeguide_route_guide},\n                                          unary_interceptor =>\n                                              grpcbox_chain_interceptor:unary([fun ?MODULE:one/4,\n                                                                               fun ?MODULE:two/4,\n                                                                               fun ?MODULE:three/4])},\n                           transport_opts => #{}}]),\n    application:ensure_all_started(grpcbox),\n    Config;\ninit_per_testcase(trace_interceptor, Config) ->\n    application:set_env(grpcbox, client, #{channels => [{default_channel,\n                                                         [{http, \"localhost\", 8080, []}], #{}}]}),\n    application:ensure_all_started(opencensus),\n    application:set_env(grpcbox, servers,\n                        [#{grpc_opts => #{service_protos => [route_guide_pb],\n                                          services => #{'routeguide.RouteGuide' => routeguide_route_guide},\n                                          unary_interceptor =>\n                                              grpcbox_chain_interceptor:unary([fun grpcbox_trace:unary/4,\n                                                                               fun ?MODULE:trace_to_trailer/4])},\n                           transport_opts => #{}}]),\n    application:ensure_all_started(grpcbox),\n    Config;\ninit_per_testcase(stream_interceptor, Config) ->\n    application:set_env(grpcbox, client, #{channels => [{default_channel,\n                                                         [{http, \"localhost\", 8080, []}], #{}}]}),\n    application:set_env(grpcbox, servers,\n                        [#{grpc_opts => #{service_protos => [route_guide_pb],\n                                          services => #{'routeguide.RouteGuide' => routeguide_route_guide},\n                                          stream_interceptor =>\n                                              fun(Ref, Stream, _ServerInfo, Handler) ->\n                                                      grpcbox_stream:add_trailers([{<<\"x-grpc-stream-interceptor\">>,\n                                                                                    <<\"true\">>}],\n                                                                                  Stream),\n                                                      Handler(Ref, Stream)\n                                              end},\n                           transport_opts => #{}}]),\n    application:ensure_all_started(grpcbox),\n    Config;\ninit_per_testcase(bidirectional, Config) ->\n    application:load(grpcbox),\n    application:set_env(grpcbox, client, #{channels => [{default_channel,\n                                                         [{http, \"localhost\", 8080, []}], #{}}]}),\n    application:set_env(grpcbox, servers,\n                        [#{grpc_opts => #{service_protos => [route_guide_pb],\n                                          services => #{'routeguide.RouteGuide' => routeguide_route_guide}}}]),\n    application:ensure_all_started(grpcbox),\n    Config;\ninit_per_testcase(client_stream, Config) ->\n    application:set_env(grpcbox, client, #{channels => [{default_channel,\n                                                         [{http, \"localhost\", 8080, []}], #{}}]}),\n    application:set_env(grpcbox, servers,\n                        [#{grpc_opts => #{service_protos => [route_guide_pb],\n                                          services => #{'routeguide.RouteGuide' => routeguide_route_guide}}}]),\n    application:ensure_all_started(grpcbox),\n    Config;\ninit_per_testcase(client_stream_garbage_collect_streams, Config) ->\n    application:set_env(grpcbox, client, #{channels => [{default_channel,\n                                                         [{http, \"localhost\", 8080, []}], #{}}]}),\n    application:set_env(grpcbox, servers,\n                        [#{grpc_opts => #{service_protos => [route_guide_pb],\n                                          services => #{'routeguide.RouteGuide' => routeguide_route_guide}}}]),\n    application:ensure_all_started(grpcbox),\n    Config;\ninit_per_testcase(compression, Config) ->\n    application:set_env(grpcbox, client, #{channels => [{default_channel,\n                                                         [{http, \"localhost\", 8080, []}], #{}}]}),\n    application:set_env(grpcbox, servers,\n                        [#{grpc_opts => #{service_protos => [route_guide_pb],\n                                          services => #{'routeguide.RouteGuide' => routeguide_route_guide}}}]),\n    application:ensure_all_started(grpcbox),\n    Config;\ninit_per_testcase(stats_handler, Config) ->\n    application:set_env(grpcbox, client, #{channels => [{default_channel,\n                                                         [{http, \"localhost\", 8080, []}], #{}}]}),\n    application:set_env(grpcbox, servers,\n                        [#{grpc_opts => #{service_protos => [route_guide_pb],\n                                          services => #{'routeguide.RouteGuide' => routeguide_route_guide},\n                                          stats_handler => test_stats_handler}}]),\n    application:ensure_all_started(grpcbox),\n    Config;\ninit_per_testcase(server_latency_stats, Config) ->\n    application:set_env(grpcbox, client, #{channels => [{default_channel,\n                                                         [{http, \"localhost\", 8080, []}], #{}}]}),\n    application:set_env(grpcbox, servers,\n                        [#{grpc_opts => #{service_protos => [route_guide_pb],\n                                          services => #{'routeguide.RouteGuide' => routeguide_route_guide},\n                                          stats_handler => grpcbox_oc_stats_handler}}]),\n    {ok, _} = application:ensure_all_started(opencensus),\n    application:ensure_all_started(grpcbox),\n    Config;\ninit_per_testcase(health_service, Config) ->\n    application:set_env(grpcbox, client, #{channels => [{default_channel,\n                                                         [{http, \"localhost\", 8080, []}],\n                                                         #{}}]}),\n    application:set_env(grpcbox, servers,\n                        [#{grpc_opts => #{service_protos => [grpcbox_health_pb],\n                                          services => #{'grpc.health.v1.Health' => grpcbox_health_service}}}]),\n    application:ensure_all_started(grpcbox),\n    Config;\ninit_per_testcase(reflection_service, Config) ->\n    application:load(grpcbox),\n    application:set_env(grpcbox, client, #{channels => [{default_channel,\n                                                         [{http, \"localhost\", 8080, []}], #{}}]}),\n    application:set_env(grpcbox, servers,\n                        [#{grpc_opts => #{service_protos => [route_guide_pb,\n                                                             grpcbox_reflection_pb,\n                                                             grpcbox_health_pb],\n                                          services => #{'grpc.reflection.v1alpha.ServerReflection'\n                                                        => grpcbox_reflection_service,\n                                                        'routeguide.RouteGuide' => routeguide_route_guide,\n                                                        'grpc.health.v1.Health' => grpcbox_health_service}}}]),\n    application:ensure_all_started(grpcbox),\n    Config;\ninit_per_testcase(_, Config) ->\n    Config.\n\nend_per_testcase(unary_interceptor, _Config) ->\n    ?assertMatch(ok, grpcbox_services_simple_sup:terminate_child(#{ip => {0, 0, 0, 0},\n                                                                   port => 8080})),\n    application:stop(grpcbox),\n    ok;\nend_per_testcase(unary_client_interceptor, _Config) ->\n    ?assertMatch(ok, grpcbox_services_simple_sup:terminate_child(#{ip => {0, 0, 0, 0},\n                                                                   port => 8080})),\n    application:stop(grpcbox),\n    ok;\nend_per_testcase(chain_interceptor, _Config) ->\n    ?assertMatch(ok, grpcbox_services_simple_sup:terminate_child(#{ip => {0, 0, 0, 0},\n                                                                   port => 8080})),\n    application:stop(grpcbox),\n    ok;\nend_per_testcase(trace_interceptor, _Config) ->\n    application:stop(opencensus),\n    ?assertMatch(ok, grpcbox_services_simple_sup:terminate_child(#{ip => {0, 0, 0, 0},\n                                                                   port => 8080})),\n    application:stop(grpcbox),\n    ok;\nend_per_testcase(server_latency_stats, _Config) ->\n    application:stop(opencensus),\n    ?assertMatch(ok, grpcbox_services_simple_sup:terminate_child(#{ip => {0, 0, 0, 0},\n                                                                   port => 8080})),\n    application:stop(grpcbox),\n    ok;\nend_per_testcase(health_service, _Config) ->\n    ?assertMatch(ok, grpcbox_services_simple_sup:terminate_child(#{ip => {0, 0, 0, 0},\n                                                                   port => 8080})),\n    application:stop(grpcbox),\n    ok;\nend_per_testcase(unary_authenticated, _Config) ->\n    ok;\nend_per_testcase(unary_no_auth, _Config) ->\n    ok;\nend_per_testcase(multiple_servers, _Config) ->\n    ok;\nend_per_testcase(unary_garbage_collect_streams, _Config) ->\n    ok;\nend_per_testcase(fd_socket_option, _Config) ->\n    ok;\nend_per_testcase(unary_concurrent, _Config) ->\n    ok;\nend_per_testcase(unimplemented, _Config) ->\n    ok;\nend_per_testcase(unauthorized, _Config) ->\n    ok;\nend_per_testcase(generate_error, _Config) ->\n    ok;\nend_per_testcase(streaming_generate_error, _Config) ->\n    ok;\nend_per_testcase(closed_stream, _Config) ->\n    ok;\nend_per_testcase(_, _Config) ->\n    application:stop(grpcbox),\n    ok.\n\ninitially_down_service(_Config) ->\n    Point = #{latitude => 409146138, longitude => -746188906},\n    Ctx = ctx:with_deadline_after(ctx:new(), 5, second),\n    ?assertMatch({error, econnrefused}, routeguide_route_guide_client:get_feature(Ctx, Point)),\n\n    grpcbox:start_server(#{grpc_opts => #{service_protos => [route_guide_pb],\n                                          services => #{'routeguide.RouteGuide' =>\n                                                            routeguide_route_guide}}}),\n\n    {ok, _Feature, _} = routeguide_route_guide_client:get_feature(Ctx, Point).\n\nunimplemented(_Config) ->\n    Def = #grpcbox_def{service = 'routeguide.RouteGuide',\n                       marshal_fun = fun(I) -> route_guide_pb:encode_msg(I, point) end,\n                       unmarshal_fun = fun(I) -> route_guide_pb:encode_msg(I, feature) end},\n    ?assertMatch({error, {?GRPC_STATUS_UNIMPLEMENTED, _}, #{headers := #{}, trailers := #{}}},\n                 grpcbox_client:unary(ctx:new(), <<\"/routeguide.RouteGuide/NotReal\">>, #{}, Def, #{})),\n\n    {ok, S} = grpcbox_client:stream(ctx:new(), <<\"/routeguide.RouteGuide/NotReal\">>, #{}, Def, #{}),\n    ?assertMatch({error, {?GRPC_STATUS_UNIMPLEMENTED, _}, #{trailers := #{}}},\n                 grpcbox_client:recv_data(S)).\n\nunauthorized(_Config) ->\n    Point = #{latitude => 409146138, longitude => -746188906},\n    Ctx = ctx:new(),\n    {error, {?GRPC_STATUS_UNAUTHENTICATED, _}, #{headers := #{}, trailers := #{}}}\n        = routeguide_route_guide_client:get_feature(Ctx, Point).\n\ngenerate_error(_Config) ->\n    Response = routeguide_route_guide_client:generate_error(#{}),\n    ?assertMatch({error, {?GRPC_STATUS_INTERNAL, <<\"error_message\">>}, _}, Response),\n    {error, _, #{trailers := Trailers}} = Response,\n    ?assertEqual(<<\"error_trailer\">>, maps:get(<<\"generate_error_trailer\">>, Trailers, undefined)).\n\nstreaming_generate_error(_Config) ->\n    {ok, Stream} = routeguide_route_guide_client:streaming_generate_error(#{}),\n    ?assertMatch({ok, #{<<\":status\">> := <<\"200\">>}}, grpcbox_client:recv_headers(Stream)),\n    Response = grpcbox_client:recv_data(Stream),\n    ?assertMatch({error, {?GRPC_STATUS_INTERNAL, <<\"error_message\">>}, _}, Response),\n    {error, _, #{trailers := Trailers}} = Response,\n    ?assertEqual(<<\"error_trailer\">>, maps:get(<<\"generate_error_trailer\">>, Trailers, undefined)).\n\nclosed_stream(_Config) ->\n    {ok, S} = routeguide_route_guide_client:record_route(ctx:new()),\n    ok = grpcbox_client:send(S, #{latitude => 409146138, longitude => -746188906}),\n    ok = grpcbox_client:send(S, #{latitude => 234818903, longitude => -823423910}),\n    ?assertMatch(ok, grpcbox_client:close_send(S)),\n\n    %% TODO: should this error? does send need to be a call?\n    %% ?assertMatch(ok, grpcbox_client:send(S, #{latitude => 234818903, longitude => -823423910})),\n\n    ?assertMatch({ok, #{point_count := 2}}, grpcbox_client:recv_data(S)),\n    ?assertMatch({ok, _}, grpcbox_client:recv_trailers(S)),\n    ?assertMatch(stream_finished, grpcbox_client:recv_data(S)),\n\n    %% verify you get stream finished also when not having received the trailers\n    {ok, S1} = routeguide_route_guide_client:record_route(ctx:new()),\n    ok = grpcbox_client:send(S1, #{latitude => 409146138, longitude => -746188906}),\n    ok = grpcbox_client:send(S1, #{latitude => 234818903, longitude => -823423910}),\n    ?assertMatch(ok, grpcbox_client:close_send(S1)),\n    ?assertMatch({ok, #{point_count := 2}}, grpcbox_client:recv_data(S1)),\n    ?assertMatch(stream_finished, grpcbox_client:recv_data(S1)).\n\ncompression(_Config) ->\n    Point = #{latitude => 409146138, longitude => -746188906},\n    Ctx = ctx:new(),\n    ?assertMatch({error, {unknown_encoding, something}},\n                 routeguide_route_guide_client:get_feature(Ctx, Point, #{encoding => something})),\n\n    {ok, Feature, _} = routeguide_route_guide_client:get_feature(Point, #{encoding => gzip}),\n    ?assertEqual(#{location =>\n                       #{latitude => 409146138, longitude => -746188906},\n                   name =>\n                       <<\"Berkshire Valley Management Area Trail, Jefferson, NJ, USA\">>}, Feature).\n\nhealth_service(_Config) ->\n    Ctx = ctx:new(),\n    ?assertMatch({ok, #{status := 'SERVING'}, _}, grpcbox_health_client:check(Ctx, #{})),\n    ?assertMatch({ok, #{status := 'UNKNOWN'}, _},\n                 grpcbox_health_client:check(Ctx, #{service => <<\"grpc.health.v1.Health\">>})),\n    ?assertMatch({ok, #{status := 'UNKNOWN'}, _},\n                 grpcbox_health_client:check(Ctx, #{service => <<\"something else\">>})).\n\nreflection_service(_Config) ->\n    {ok, S} = grpcbox_reflection_client:server_reflection_info(),\n\n    ok = grpcbox_client:send(S, #{message_request => {list_services, <<>>}}),\n    ?assertMatch({ok, #{message_response :=\n                            {list_services_response,\n                             #{service := [#{name := <<\"grpc.health.v1.Health\">>},\n                                           #{name := <<\"grpc.reflection.v1alpha.ServerReflection\">>},\n                                           #{name := <<\"routeguide.RouteGuide\">>}]}}}},\n                 grpcbox_client:recv_data(S)),\n\n    ok = grpcbox_client:send(S, #{message_request => {all_extension_numbers_of_type, <<>>}}),\n    ?assertMatch({ok, #{message_response :=\n                            {error_response,#{error_code := 12,\n                                              error_message :=\n                                                  <<\"unimplemented method since extensions removed in proto3\">>}}}},\n                 grpcbox_client:recv_data(S)),\n\n    ok = grpcbox_client:send(S, #{message_request => {file_containing_extension, #{}}}),\n    ?assertMatch({ok, #{message_response :=\n                            {error_response,#{error_code := 12,\n                                              error_message :=\n                                                  <<\"unimplemented method since extensions removed in proto3\">>}}}},\n                 grpcbox_client:recv_data(S)),\n\n    ok = grpcbox_client:send(S, #{message_request => {file_by_filename, <<\"health\">>}}),\n    ?assertMatch({ok, #{message_response :=\n                            {file_descriptor_response,\n                             #{file_descriptor_proto := [_]}}}},\n                 grpcbox_client:recv_data(S)),\n\n    ok = grpcbox_client:send(S, #{message_request => {file_containing_symbol, <<\"routeguide.RouteGuide\">>}}),\n    ?assertMatch({ok, #{message_response :=\n                            {file_descriptor_response,\n                             #{file_descriptor_proto := [_]}}}},\n                 grpcbox_client:recv_data(S)),\n\n    ok = grpcbox_client:send(S, #{message_request => {file_containing_symbol, <<\"grpc.health.v1.HealthCheckResponse.ServingStatus\">>}}),\n    ?assertMatch({ok, #{message_response :=\n                            {file_descriptor_response,\n                             #{file_descriptor_proto := [_]}}}},\n                 grpcbox_client:recv_data(S)),\n\n    check_stream_state(S),\n\n    %% closes the stream, waits for an 'end of stream' message and then returns the received data\n    ?assertMatch(ok, grpcbox_client:close_send(S)).\n\nstats_handler(_Config) ->\n    register(stats_pid, self()),\n\n    Point = #{latitude => 409146138, longitude => -746188906},\n    Ctx = ctx:new(),\n    {ok, Feature, _} = routeguide_route_guide_client:get_feature(Ctx, Point, #{encoding => gzip}),\n    ?assertEqual(#{location =>\n                       #{latitude => 409146138, longitude => -746188906},\n                   name =>\n                       <<\"Berkshire Valley Management Area Trail, Jefferson, NJ, USA\">>}, Feature),\n\n    F = fun L(Stats) ->\n                receive\n                    {rpc_begin, T} ->\n                        L(Stats#{rpc_begin => T});\n                    {out_payload, USize, CSize} ->\n                        L(Stats#{out_payload => {USize, CSize}});\n                    {in_payload, USize, CSize} ->\n                        L(Stats#{in_payload => {USize, CSize}});\n                    {rpc_end, T} ->\n                        Stats#{rpc_end => T}\n                after\n                    2000 ->\n                        exit(1)\n                end\n        end,\n    Stats = F(#{}),\n\n    {OutUSize, OutCSize} = maps:get(out_payload, Stats),\n    ?assert(is_integer(OutUSize) andalso is_integer(OutCSize)),\n\n    {InUSize, InCSize} = maps:get(in_payload, Stats),\n    ?assert(is_integer(InUSize) andalso is_integer(InCSize)),\n\n    ?assert(maps:get(rpc_end, Stats) > maps:get(rpc_begin, Stats)).\n\n-define(server_latency_view(View),\n        {ok, {view, \"grpc.io/server/server_latency\", _Measure, _, _B, _Help, _M, _Methods, oc_stat_aggregation_distribution, _Buckets} = View}).\n\nserver_latency_stats(_Config) ->\n    Registered = grpcbox_oc_stats_handler:init(),\n    Subscribed = grpcbox_oc_stats:subscribe_views(),\n\n    ?assertEqual(ok, Registered),\n    ?assertEqual([], lists:filter(fun ({Ok, _}) -> ok =/= Ok end, Subscribed)),\n\n    [SrvLatencyView] = [View || ?server_latency_view(View) <- Subscribed],\n\n    Args = [ctx:new(), #{latitude => 409146138, longitude => -746188906}, #{encoding => gzip}],\n    {MeasuredTime, {ok, Feature, _}} =\n        timer:tc(routeguide_route_guide_client, get_feature, Args),\n\n    ?assertEqual(#{location =>\n                       #{latitude => 409146138, longitude => -746188906},\n                   name =>\n                       <<\"Berkshire Valley Management Area Trail, Jefferson, NJ, USA\">>}, Feature),\n\n    #{data := #{rows :=  [#{value := #{buckets := Bs,\n                            count := Count,\n                            mean := Mean,\n                            sum := Sum}}]}} = oc_stat_view:export(SrvLatencyView),\n\n    {H, T} = lists:splitwith(fun ({_, C}) -> C =:= 0 end, Bs),\n\n    ?assert(element(1, lists:last(H)) =< MeasuredTime), %% Bucket size > Reported time\n    ?assertEqual(element(2, hd(T)), Count), %% Count = 1 = In bucket\n    ?assert(element(1, lists:last(H)) =< Sum), %% Lower bucket < Reported time\n    ?assert(Sum =< MeasuredTime), %% Reported time < Measured time\n    ?assert(element(1, hd(T)) > Sum), %% Higher bucket > Reported time\n    ?assertEqual(Mean*Count, Sum),\n\n    ok.\n\nunary_no_auth(_Config) ->\n    unary(_Config).\n\nunary_authenticated(Config) ->\n    unary(Config).\n\n%% checks that no closed streams are left around after unary requests\nunary_garbage_collect_streams(Config) ->\n    unary(Config),\n\n    ConnectionStreamSet = connection_stream_set(),\n\n    ?assertEqual([], h2_stream_set:my_active_streams(ConnectionStreamSet)).\n\nclient_stream_garbage_collect_streams(Config) ->\n    client_stream(Config),\n\n    timer:sleep(100),\n    ConnectionStreamSet = connection_stream_set(),\n\n    ?assertEqual([], h2_stream_set:my_active_streams(ConnectionStreamSet)).\n\nmultiple_servers(_Config) ->\n    application:set_env(grpcbox, client, #{channels => [{default_channel, [{http, \"localhost\", 8080, []},\n                                                                           {http, \"localhost\", 8081, []}]},\n                                                        #{balancer => round_robin}]}),\n    ?assertMatch({ok, _}, grpcbox:start_server(#{grpc_opts => #{service_protos => [route_guide_pb],\n                                                                services => #{'routeguide.RouteGuide' => routeguide_route_guide}},\n                                                 listen_opts => #{port => 8081}})),\n    unary(_Config),\n    unary(_Config).\n\nfd_socket_option(_Config) ->\n    %% Use the fd option to dynamically select a free port\n    {ok, Ip} = inet:getaddr(\"localhost\", inet),\n    {ok, Sock} = gen_tcp:listen(0, [{ip, Ip}, inet]),\n    {ok, Fd} = inet:getfd(Sock),\n    {ok, {_ListenIp, ListenPort}} = inet:sockname(Sock),\n    application:set_env(grpcbox, client, #{channels => [{default_channel,\n                                                         [{http, \"localhost\", ListenPort, []}], #{}}]}),\n\n    application:set_env(grpcbox, servers, [#{grpc_opts => #{service_protos => [route_guide_pb],\n                                                            services => #{'routeguide.RouteGuide' =>\n                                                                              routeguide_route_guide}},\n                                             listen_opts => #{socket_options => [{fd, Fd}]}}]),\n    {ok, _} = application:ensure_all_started(grpcbox),\n    unary(_Config),\n    application:stop(grpcbox),\n    gen_tcp:close(Sock).\n\nunary_concurrent(Config) ->\n    Nrs = lists:seq(1,100),\n    ParentPid = self(),\n    Pids = [spawn_link(fun() ->\n                               unary(Config),\n                               ParentPid ! self()\n                       end) || _ <- Nrs],\n    unary_concurrent_wait_for_processes(Pids).\n\nunary_concurrent_wait_for_processes([]) ->\n    ok;\nunary_concurrent_wait_for_processes(Pids) ->\n    receive\n        Pid ->\n            NewPids = lists:delete(Pid, Pids),\n            unary_concurrent_wait_for_processes(NewPids)\n    after 5000 ->\n            ?assertMatch([], Pids, \"Unary concurrency test timed out without receiving all responses\")\n    end.\n\nbidirectional(_Config) ->\n    {ok, S} = routeguide_route_guide_client:route_chat(ctx:new()),\n    %% send 2 before receiving since the server only sends what it already had in its list of messages for the\n    %% location of your last send.\n    ok = grpcbox_client:send(S, #{location => #{latitude => 1, longitude => 1}, message => <<\"hello there\">>}),\n    ok = grpcbox_client:send(S, #{location => #{latitude => 1, longitude => 1}, message => <<\"hello there\">>}),\n    ?assertMatch({ok, #{message := <<\"hello there\">>}}, grpcbox_client:recv_data(S)),\n    ok = grpcbox_client:send(S, #{location => #{latitude => 1, longitude => 1}, message => <<\"hello there\">>}),\n\n    check_stream_state(S),\n\n    %% closes the stream, waits for an 'end of stream' message and then returns the received data\n    ?assertMatch(ok, grpcbox_client:close_send(S)).\n%% TODO: add tests to ensure stream pids are gone and that accidental recvs and such after a close don't hang\n\nclient_stream(_Config) ->\n    {ok, S} = routeguide_route_guide_client:record_route(ctx:new()),\n    ok = grpcbox_client:send(S, #{latitude => 409146138, longitude => -746188906}),\n    ok = grpcbox_client:send(S, #{latitude => 234818903, longitude => -823423910}),\n    ?assertMatch(ok, grpcbox_client:close_send(S)),\n    ?assertMatch({ok, #{point_count := 2}}, grpcbox_client:recv_data(S)).\n%% TODO: add tests to ensure stream pids are gone and that accidental recvs and such after a close don't hang\n\nunary(_Channel) ->\n    Point = #{latitude => 409146138, longitude => -746188906},\n    {ok, Feature, _} = routeguide_route_guide_client:get_feature(Point),\n    ?assertEqual(#{location =>\n                       #{latitude => 409146138, longitude => -746188906},\n                   name =>\n                       <<\"Berkshire Valley Management Area Trail, Jefferson, NJ, USA\">>}, Feature).\n\nunary_client_interceptor(_Config) ->\n    %% client side interceptor replaces the point with lat 30 and long 90\n    Point = #{latitude => 409146138, longitude => -746188906},\n    {ok, Feature, _} = routeguide_route_guide_client:get_feature(Point),\n    ?assertEqual(#{location =>\n                       #{latitude => 30, longitude => 90},\n                   name => <<\"\">>}, Feature).\n\nunary_interceptor(_Config) ->\n    %% our test interceptor replaces the point with lat 30 and long 90\n    Point = #{latitude => 409146138, longitude => -746188906},\n    {ok, Feature, _} = routeguide_route_guide_client:get_feature(Point),\n    ?assertEqual(#{location =>\n                       #{latitude => 30, longitude => 90},\n                   name => <<\"\">>}, Feature).\n\nchain_interceptor(_Config) ->\n    Point = #{latitude => 409146138, longitude => -746188906},\n    {ok, _Feature, #{trailers := Trailers}} = routeguide_route_guide_client:get_feature(ctx:background(), Point),\n    ?assertMatch(#{<<\"x-grpc-interceptor-one\">> := <<\"one\">>,\n                   <<\"x-grpc-interceptor-three\">> := <<\"three\">>,\n                   <<\"x-grpc-interceptor-two\">> := <<\"two\">>}, Trailers).\n\n%% include a trace context and test that it works by having a second interceptor add\n%% the trace id from the context as a response trailer.\ntrace_interceptor(_Config) ->\n    Point = #{latitude => 409146138, longitude => -746188906},\n    Ctx = oc_trace:with_child_span(ctx:background(), <<\"grpc-client-call\">>),\n    Context = oc_propagation_binary:encode(oc_trace:from_ctx(Ctx)),\n    Metadata = #{<<\"grpc-trace-bin\">> => Context},\n    Ctx1 = grpcbox_metadata:append_to_outgoing_ctx(Ctx, Metadata),\n    {_, _Feature, #{trailers := Trailers}} = routeguide_route_guide_client:get_feature(Ctx1, Point),\n    BinTraceId = integer_to_binary((oc_trace:from_ctx(Ctx))#span_ctx.trace_id),\n    ?assertMatch(BinTraceId, maps:get(<<\"x-grpc-trace-id\">>, Trailers)).\n\nstream_interceptor(_Config) ->\n    {ok, Stream} =\n        routeguide_route_guide_client:list_features(ctx:background(), #{hi => #{latitude => 1, longitude => 2},\n                                                                        lo => #{latitude => 3, longitude => 5}}),\n    ?assertMatch({ok, #{<<\":status\">> := <<\"200\">>}}, grpcbox_client:recv_headers(Stream)),\n    ?assertMatch({ok, #{name := <<\"Tour Eiffel\">>}}, grpcbox_client:recv_data(Stream)),\n    ?assertMatch({ok, #{name := <<\"Louvre\">>}}, grpcbox_client:recv_data(Stream)),\n    ?assertMatch({ok, {_, _, #{<<\"x-grpc-stream-interceptor\">> := <<\"true\">>}}}, grpcbox_client:recv_trailers(Stream)).\n\n%%\n\n%% verify that the chatterbox stream isn't storing frame data\ncheck_stream_state(S) ->\n    {_, StreamState} = sys:get_state(maps:get(stream_pid, S)),\n    FrameQueue = element(7, StreamState),\n    ?assert(queue:is_empty(FrameQueue)).\n\n%% return the stream_set of a connection in the channel\nconnection_stream_set() ->\n    {ok, {Channel, _}} = grpcbox_channel:pick(default_channel, unary),\n    {ok, Conn, _} = grpcbox_subchannel:conn(Channel),\n    Conn.\n\ncert_dir(Config) ->\n    DataDir = ?config(data_dir, Config),\n    filename:join(DataDir, \"certificates\").\n\ncert(Config, FileName) ->\n    R = filename:join([cert_dir(Config), FileName]),\n    true = filelib:is_file(R),\n    R.\n\none(Ctx, Message, _ServerInfo, Handler) ->\n    Trailer = grpcbox_metadata:pairs([{<<\"x-grpc-interceptor-one\">>, <<\"one\">>}]),\n    Ctx1 = grpcbox_stream:add_trailers(Ctx, Trailer),\n    Handler(Ctx1, Message).\n\ntwo(Ctx, Message, _ServerInfo, Handler) ->\n    Trailer = grpcbox_metadata:pairs([{<<\"x-grpc-interceptor-two\">>, <<\"two\">>}]),\n    Ctx1 = grpcbox_stream:add_trailers(Ctx, Trailer),\n    Handler(Ctx1, Message).\n\nthree(Ctx, Message, _ServerInfo, Handler) ->\n    Trailer = grpcbox_metadata:pairs([{<<\"x-grpc-interceptor-three\">>, <<\"three\">>}]),\n    Ctx1 = grpcbox_stream:add_trailers(Ctx, Trailer),\n    Handler(Ctx1, Message).\n\ntrace_to_trailer(Ctx, Message, _ServerInfo, Handler) ->\n    SpanCtx = oc_trace:from_ctx(Ctx),\n    BinTraceId = integer_to_binary(SpanCtx#span_ctx.trace_id),\n    Trailer = grpcbox_metadata:pairs([{<<\"x-grpc-trace-id\">>, BinTraceId}]),\n    Ctx1 = grpcbox_stream:add_trailers(Ctx, Trailer),\n    Handler(Ctx1, Message).\n"
  },
  {
    "path": "test/grpcbox_SUITE_data/certificates/ca.pem",
    "content": "-----BEGIN CERTIFICATE-----\nMIIDwDCCAqigAwIBAgIUXMlP8/6iUkU3Rem9PhcISuywVVQwDQYJKoZIhvcNAQEL\nBQAwOzESMBAGA1UEAwwJbG9jYWxob3N0MSUwIwYDVQQuExxSdTFrMUdmbEtyakJ5\ncVBMdlNIWlZCaW1ERnc9MB4XDTIzMTEwOTE0MjU1NVoXDTMzMTEwNjE0MjU1NVow\nOzESMBAGA1UEAwwJbG9jYWxob3N0MSUwIwYDVQQuExxSdTFrMUdmbEtyakJ5cVBM\ndlNIWlZCaW1ERnc9MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAu7UP\nlnxd9Zz7BtAY/l4JJAOIsbv0dQjepp3GQAzilUDTlVStl8jPLbP69VVFhH/oELyE\n3pWA030Hd+xJvJ8P/yMlH+OU48j9dtGLFCkt7DQmr9zedkT8iZjF67yxEC0H9uf6\neIM162U5OdPWANiYn6XLcyKAwHE8D5op1CQo5zJj+UFdqxXi0zGgpAgOKgavqzf6\nVSUCB+0VxVAUXrZGyojasYJTHOVFrT3whMv4GrIy2YAxnixZoDrC/rECKVoUNTjX\n543VWA78rq/EEmpzHXFjZ/JiDMw6Ijf3QxzsXWCyLR5J/AwbyD6E459Ld4X05o/F\nTboWA1GCQkbzJnC6dwIDAQABo4G7MIG4MA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O\nBBYEFEbtZNRn5Sq4wcqjy70h2VQYpgxcMA4GA1UdDwEB/wQEAwIBhjB2BgNVHSME\nbzBtgBRG7WTUZ+UquMHKo8u9IdlUGKYMXKE/pD0wOzESMBAGA1UEAwwJbG9jYWxo\nb3N0MSUwIwYDVQQuExxSdTFrMUdmbEtyakJ5cVBMdlNIWlZCaW1ERnc9ghRcyU/z\n/qJSRTdF6b0+FwhK7LBVVDANBgkqhkiG9w0BAQsFAAOCAQEAro4qY76Pst+Ffmy+\n2jQ3iBPAOVmR6Yb6Ybyxkr5f4aYQ2b2Kf17qe2bKsu1eqqHXMUF1ALfAfgL8tCM3\nC4ievxKv8PcekMqp54XF+6ad70sWg4i+MmjbhpCPBNq/7g1W/lG9v3cpCxTEoeC0\n+kQIlGyxDOZfaGd+OB/Q9fV1sMcH2pV+4YJE6uvOxkvDIpX5HJa9dTTu8Ozm2k7w\nwD84j3zlg9TNyW0r62ONbwK+vym1QdjuXos7glxoX7raRkdW/RsIfYqa25m756Sc\nv+pzjnN8NmzyKK+kkPRQ7ScUFC2lKXryyXX7Als5YFw0nxNZ4Ye1vuUJujJhGMfe\nqBXAeg==\n-----END CERTIFICATE-----\n"
  },
  {
    "path": "test/grpcbox_SUITE_data/certificates/server1.key",
    "content": "-----BEGIN PRIVATE KEY-----\nMIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDLxtcJStNPpCB9\nIv+QwXMTLaErCnjPzC+2K2wgU7EC1sif76q22ZdSHzMaI92h2eusrOnAuWXQNTOo\nffIfIMZZvt25aYAZKj+Xad6nrWJ7FSvo5fEChIIcPj8Iq72R0zcnbYhQNzMTedE1\nSlBbadmlw1RbN6cDnFgmWvGUrU1ZyEbq2yjONZLE3yyEKLfyhsQAaVqq3cdjhXAM\nComPFg+vRoOiXLUidiJtC+8leCkI9V0QnxuLsPA3A/4MMfKxdGMk7vPLremAndXN\nxuCoDMgNScxUlhQec+W6GXMVZ9WlvZjsTM/AWQq2DkWrNJ+gZJj+Srwvea/LFHB1\nQwlWD00hAgMBAAECggEAY/vgLrMEE6OYPU4az0/bwqE03wV4WZz6HAwaNZJa2+W+\n8pqJzMXetXCRhlXqvStLs6Hz35gYGJzCB/4j+pn+OLKp3/uf2rkcEpLjqKouE+5D\naTbJlk6l+G2iSALcNNzJxxK7O4CaEwhGWjtoSjIZlHfOwCMCU4c2yTr+JdESjuYR\nZ6ynCCa6sGEPXVwtFHFUto1S+aWkdd8+1KY5a2Tgpx7xPxcKhLPaPhIPQQ8gHXz0\ns+WAPSFpboi/0XKgeqXmyRcpbcKZlPqUh1vtD3/c+wkR5G8xy5G7oMlgE5aS8etk\nczixy9kBLQEXWQrC4/jk27nniDIKZPn/fiUZkpFMMQKBgQDvDcIrZ9pckydSMqWG\nVDtJO80H1ynyFly9QZZfK0sqvK2w/P7qn3BLfG4eJEbq6uaiFHbEbzN959quD7Mg\nG6B7EaSnmBc5YY+K6I9Q1A/TGEo25/npDbkJ5HUsAbEMJl0edYmICvIcFjFhRGc4\nqOyIftxqePQKHLB8SCaVFph8owKBgQDaOOPBditLaPBhGRZUOomx7I9BSefBVq7S\nqxQKqNh1tsOOOiy0msq+f+pcVR2+itzP7psjuYkEgklkqvw2P8vOeu3thQwa1iFK\nuIDdeF0HVxiCwFI9IZRdZAshHEJXrjOvj2bLelbwGuy/giPkotv0cAcl6ONQWFfA\n569TCVZHawKBgBu6qtVCHLA0WZFNUqn8R0w9ZZENQk5UjbleTEUJzpRMgpFPJ3qr\nt+jprBRO/PLvAIW4ffZXN8/Y/yLFq2+EBN+BsmnGWJtNV8szIryrfJJt9N3dlr2T\n2+zr1TOflpvkL1UDKUrgiij74gp4VsjZv2Yt4P9wvE4X+djQvbj5gAKlAoGACvOZ\n8oaUq6crkSPqK/X4HRbLJbKoz9oi0e3GBrbsjhPLAqNGxRWToTXYNCQNZxee90x5\nOrS//JrxRf0SxUI0XztqH2Zy8hHW/+H8jaDRwmGLmFxAhFLgGEPCDzpU1gOnEmN2\n/DU6kbg4M3A7jujhcwYARdXHOqwEU2kNMnSggNsCgYBx6UYAj9z2m2PNtsHOmE4p\ntdFUzS2ELEkHaEGwLhG359MVVPl3+Sdh1cSmDSeh6DHUWWXPt04lWIrU7BN7Qasj\n4kXG1vOy6LM5qpCwrJuVH3Z7LneB4pue0VT+x3Q5QVoSLHYiJJdHAqLoPbqcKfV1\nq2png2Z97Dnrt6jMUwRhNA==\n-----END PRIVATE KEY-----\n"
  },
  {
    "path": "test/grpcbox_SUITE_data/certificates/server1.pem",
    "content": "-----BEGIN CERTIFICATE-----\nMIIEIDCCAwigAwIBAgIUE+a3wRyVr9Ou3L5yhlagUfs+eRwwDQYJKoZIhvcNAQEL\nBQAwOzESMBAGA1UEAwwJbG9jYWxob3N0MSUwIwYDVQQuExxSdTFrMUdmbEtyakJ5\ncVBMdlNIWlZCaW1ERnc9MB4XDTIzMTEwOTE0MjYzN1oXDTI2MDIxMTE0MjYzN1ow\naTELMAkGA1UEBhMCREUxDzANBgNVBAgMBkJlcmxpbjEPMA0GA1UEBwwGQmVybGlu\nMREwDwYDVQQKDAhEZXZpbGJveDERMA8GA1UECwwIRGV2aWxib3gxEjAQBgNVBAMM\nCWxvY2FsaG9zdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMvG1wlK\n00+kIH0i/5DBcxMtoSsKeM/ML7YrbCBTsQLWyJ/vqrbZl1IfMxoj3aHZ66ys6cC5\nZdA1M6h98h8gxlm+3blpgBkqP5dp3qetYnsVK+jl8QKEghw+PwirvZHTNydtiFA3\nMxN50TVKUFtp2aXDVFs3pwOcWCZa8ZStTVnIRurbKM41ksTfLIQot/KGxABpWqrd\nx2OFcAwKiY8WD69Gg6JctSJ2Im0L7yV4KQj1XRCfG4uw8DcD/gwx8rF0YyTu88ut\n6YCd1c3G4KgMyA1JzFSWFB5z5boZcxVn1aW9mOxMz8BZCrYORas0n6BkmP5KvC95\nr8sUcHVDCVYPTSECAwEAAaOB7TCB6jAMBgNVHRMBAf8EAjAAMB0GA1UdDgQWBBRp\nHwRXxTec9ZDHMDmwIarvck470DAOBgNVHQ8BAf8EBAMCBaAwdgYDVR0jBG8wbYAU\nRu1k1GflKrjByqPLvSHZVBimDFyhP6Q9MDsxEjAQBgNVBAMMCWxvY2FsaG9zdDEl\nMCMGA1UELhMcUnUxazFHZmxLcmpCeXFQTHZTSFpWQmltREZ3PYIUXMlP8/6iUkU3\nRem9PhcISuywVVQwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMBQGA1Ud\nEQQNMAuCCWxvY2FsaG9zdDANBgkqhkiG9w0BAQsFAAOCAQEAro8WsxoPlr5WNNtQ\norr7POP01m640UwO2ZFe/QDYug1Eo4foHiqa66OLrAETMtr+2ChAC+7qN763z3E8\nt9Lu/Ij4pRnyxeOur6eoyfvMZoIrhY3zWQSTg7aRrY73w/BN3+hXNCpj3TGPvEEV\nrpwOptOWlZ8LxPHkbjunGQD0+MXlkPHf4faehpDAtFWrcPGt1fbKgVXivBv2woZu\nuEFTYoPHc+YXZKI2S53pqLCnev2RKhe846gBSiBsGIOSrlVEjVYtMciCdYeME3sH\nnchs4pH8deqlgHMmQA3H08eaUn0peNDiM7ZVPF4QTgm+egUCyN/NhhmAbzBCBXbN\nmSww1w==\n-----END CERTIFICATE-----\n"
  },
  {
    "path": "test/grpcbox_SUITE_data/route_guide.proto",
    "content": "// Copyright 2015 gRPC authors.\n//\n// Licensed under the Apache License, Version 2.0 (the \"License\");\n// you may not use this file except in compliance with the License.\n// You may obtain a copy of the License at\n//\n//     http://www.apache.org/licenses/LICENSE-2.0\n//\n// Unless required by applicable law or agreed to in writing, software\n// distributed under the License is distributed on an \"AS IS\" BASIS,\n// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n// See the License for the specific language governing permissions and\n// limitations under the License.\n\nsyntax = \"proto3\";\n\noption java_multiple_files = true;\noption java_package = \"io.grpc.examples.routeguide\";\noption java_outer_classname = \"RouteGuideProto\";\n\npackage routeguide;\n\n// Interface exported by the server.\nservice RouteGuide {\n  // A simple RPC.\n  //\n  // Obtains the feature at a given position.\n  //\n  // A feature with an empty name is returned if there's no feature at the given\n  // position.\n  rpc GetFeature(Point) returns (Feature) {}\n\n  // A server-to-client streaming RPC.\n  //\n  // Obtains the Features available within the given Rectangle.  Results are\n  // streamed rather than returned at once (e.g. in a response message with a\n  // repeated field), as the rectangle may cover a large area and contain a\n  // huge number of features.\n  rpc ListFeatures(Rectangle) returns (stream Feature) {}\n\n  // A client-to-server streaming RPC.\n  //\n  // Accepts a stream of Points on a route being traversed, returning a\n  // RouteSummary when traversal is completed.\n  rpc RecordRoute(stream Point) returns (RouteSummary) {}\n\n  // A Bidirectional streaming RPC.\n  //\n  // Accepts a stream of RouteNotes sent while a route is being traversed,\n  // while receiving other RouteNotes (e.g. from other users).\n  rpc RouteChat(stream RouteNote) returns (stream RouteNote) {}\n\n  // A simple RPC, which always generates error response.\n  rpc GenerateError(Empty) returns (Empty) {}\n\n  // A simple RPC, which always generates error response.\n  rpc StreamingGenerateError(Empty) returns (stream Empty) {}\n}\n\n// Empty message - use for RPCs without input or output.\nmessage Empty {\n}\n\n// Points are represented as latitude-longitude pairs in the E7 representation\n// (degrees multiplied by 10**7 and rounded to the nearest integer).\n// Latitudes should be in the range +/- 90 degrees and longitude should be in\n// the range +/- 180 degrees (inclusive).\nmessage Point {\n  int32 latitude = 1;\n  int32 longitude = 2;\n}\n\n// A latitude-longitude rectangle, represented as two diagonally opposite\n// points \"lo\" and \"hi\".\nmessage Rectangle {\n  // One corner of the rectangle.\n  Point lo = 1;\n\n  // The other corner of the rectangle.\n  Point hi = 2;\n}\n\n// A feature names something at a given point.\n//\n// If a feature could not be named, the name is empty.\nmessage Feature {\n  // The name of the feature.\n  string name = 1;\n\n  // The point where the feature is detected.\n  Point location = 2;\n}\n\n// A RouteNote is a message sent while at a given point.\nmessage RouteNote {\n  // The location from which the message is sent.\n  Point location = 1;\n\n  // The message to be sent.\n  string message = 2;\n}\n\n// A RouteSummary is received in response to a RecordRoute rpc.\n//\n// It contains the number of individual points received, the number of\n// detected features, and the total distance covered as the cumulative sum of\n// the distance between each point.\nmessage RouteSummary {\n  // The number of points received.\n  int32 point_count = 1;\n\n  // The number of known features passed while traversing the route.\n  int32 feature_count = 2;\n\n  // The distance covered in metres.\n  int32 distance = 3;\n\n  // The duration of the traversal in seconds.\n  int32 elapsed_time = 4;\n}\n"
  },
  {
    "path": "test/grpcbox_SUITE_data/route_guide_db.json",
    "content": "[{\n    \"location\": {\n        \"latitude\": 407838351,\n        \"longitude\": -746143763\n    },\n    \"name\": \"Patriots Path, Mendham, NJ 07945, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 408122808,\n        \"longitude\": -743999179\n    },\n    \"name\": \"101 New Jersey 10, Whippany, NJ 07981, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 413628156,\n        \"longitude\": -749015468\n    },\n    \"name\": \"U.S. 6, Shohola, PA 18458, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 419999544,\n        \"longitude\": -740371136\n    },\n    \"name\": \"5 Conners Road, Kingston, NY 12401, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 414008389,\n        \"longitude\": -743951297\n    },\n    \"name\": \"Mid Hudson Psychiatric Center, New Hampton, NY 10958, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 419611318,\n        \"longitude\": -746524769\n    },\n    \"name\": \"287 Flugertown Road, Livingston Manor, NY 12758, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 406109563,\n        \"longitude\": -742186778\n    },\n    \"name\": \"4001 Tremley Point Road, Linden, NJ 07036, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 416802456,\n        \"longitude\": -742370183\n    },\n    \"name\": \"352 South Mountain Road, Wallkill, NY 12589, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 412950425,\n        \"longitude\": -741077389\n    },\n    \"name\": \"Bailey Turn Road, Harriman, NY 10926, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 412144655,\n        \"longitude\": -743949739\n    },\n    \"name\": \"193-199 Wawayanda Road, Hewitt, NJ 07421, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 415736605,\n        \"longitude\": -742847522\n    },\n    \"name\": \"406-496 Ward Avenue, Pine Bush, NY 12566, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 413843930,\n        \"longitude\": -740501726\n    },\n    \"name\": \"162 Merrill Road, Highland Mills, NY 10930, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 410873075,\n        \"longitude\": -744459023\n    },\n    \"name\": \"Clinton Road, West Milford, NJ 07480, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 412346009,\n        \"longitude\": -744026814\n    },\n    \"name\": \"16 Old Brook Lane, Warwick, NY 10990, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 402948455,\n        \"longitude\": -747903913\n    },\n    \"name\": \"3 Drake Lane, Pennington, NJ 08534, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 406337092,\n        \"longitude\": -740122226\n    },\n    \"name\": \"6324 8th Avenue, Brooklyn, NY 11220, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 406421967,\n        \"longitude\": -747727624\n    },\n    \"name\": \"1 Merck Access Road, Whitehouse Station, NJ 08889, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 416318082,\n        \"longitude\": -749677716\n    },\n    \"name\": \"78-98 Schalck Road, Narrowsburg, NY 12764, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 415301720,\n        \"longitude\": -748416257\n    },\n    \"name\": \"282 Lakeview Drive Road, Highland Lake, NY 12743, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 402647019,\n        \"longitude\": -747071791\n    },\n    \"name\": \"330 Evelyn Avenue, Hamilton Township, NJ 08619, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 412567807,\n        \"longitude\": -741058078\n    },\n    \"name\": \"New York State Reference Route 987E, Southfields, NY 10975, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 416855156,\n        \"longitude\": -744420597\n    },\n    \"name\": \"103-271 Tempaloni Road, Ellenville, NY 12428, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 404663628,\n        \"longitude\": -744820157\n    },\n    \"name\": \"1300 Airport Road, North Brunswick Township, NJ 08902, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 407113723,\n        \"longitude\": -749746483\n    },\n    \"name\": \"\"\n}, {\n    \"location\": {\n        \"latitude\": 402133926,\n        \"longitude\": -743613249\n    },\n    \"name\": \"\"\n}, {\n    \"location\": {\n        \"latitude\": 400273442,\n        \"longitude\": -741220915\n    },\n    \"name\": \"\"\n}, {\n    \"location\": {\n        \"latitude\": 411236786,\n        \"longitude\": -744070769\n    },\n    \"name\": \"\"\n}, {\n    \"location\": {\n        \"latitude\": 411633782,\n        \"longitude\": -746784970\n    },\n    \"name\": \"211-225 Plains Road, Augusta, NJ 07822, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 415830701,\n        \"longitude\": -742952812\n    },\n    \"name\": \"\"\n}, {\n    \"location\": {\n        \"latitude\": 413447164,\n        \"longitude\": -748712898\n    },\n    \"name\": \"165 Pedersen Ridge Road, Milford, PA 18337, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 405047245,\n        \"longitude\": -749800722\n    },\n    \"name\": \"100-122 Locktown Road, Frenchtown, NJ 08825, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 418858923,\n        \"longitude\": -746156790\n    },\n    \"name\": \"\"\n}, {\n    \"location\": {\n        \"latitude\": 417951888,\n        \"longitude\": -748484944\n    },\n    \"name\": \"650-652 Willi Hill Road, Swan Lake, NY 12783, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 407033786,\n        \"longitude\": -743977337\n    },\n    \"name\": \"26 East 3rd Street, New Providence, NJ 07974, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 417548014,\n        \"longitude\": -740075041\n    },\n    \"name\": \"\"\n}, {\n    \"location\": {\n        \"latitude\": 410395868,\n        \"longitude\": -744972325\n    },\n    \"name\": \"\"\n}, {\n    \"location\": {\n        \"latitude\": 404615353,\n        \"longitude\": -745129803\n    },\n    \"name\": \"\"\n}, {\n    \"location\": {\n        \"latitude\": 406589790,\n        \"longitude\": -743560121\n    },\n    \"name\": \"611 Lawrence Avenue, Westfield, NJ 07090, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 414653148,\n        \"longitude\": -740477477\n    },\n    \"name\": \"18 Lannis Avenue, New Windsor, NY 12553, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 405957808,\n        \"longitude\": -743255336\n    },\n    \"name\": \"82-104 Amherst Avenue, Colonia, NJ 07067, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 411733589,\n        \"longitude\": -741648093\n    },\n    \"name\": \"170 Seven Lakes Drive, Sloatsburg, NY 10974, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 412676291,\n        \"longitude\": -742606606\n    },\n    \"name\": \"1270 Lakes Road, Monroe, NY 10950, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 409224445,\n        \"longitude\": -748286738\n    },\n    \"name\": \"509-535 Alphano Road, Great Meadows, NJ 07838, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 406523420,\n        \"longitude\": -742135517\n    },\n    \"name\": \"652 Garden Street, Elizabeth, NJ 07202, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 401827388,\n        \"longitude\": -740294537\n    },\n    \"name\": \"349 Sea Spray Court, Neptune City, NJ 07753, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 410564152,\n        \"longitude\": -743685054\n    },\n    \"name\": \"13-17 Stanley Street, West Milford, NJ 07480, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 408472324,\n        \"longitude\": -740726046\n    },\n    \"name\": \"47 Industrial Avenue, Teterboro, NJ 07608, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 412452168,\n        \"longitude\": -740214052\n    },\n    \"name\": \"5 White Oak Lane, Stony Point, NY 10980, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 409146138,\n        \"longitude\": -746188906\n    },\n    \"name\": \"Berkshire Valley Management Area Trail, Jefferson, NJ, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 404701380,\n        \"longitude\": -744781745\n    },\n    \"name\": \"1007 Jersey Avenue, New Brunswick, NJ 08901, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 409642566,\n        \"longitude\": -746017679\n    },\n    \"name\": \"6 East Emerald Isle Drive, Lake Hopatcong, NJ 07849, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 408031728,\n        \"longitude\": -748645385\n    },\n    \"name\": \"1358-1474 New Jersey 57, Port Murray, NJ 07865, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 413700272,\n        \"longitude\": -742135189\n    },\n    \"name\": \"367 Prospect Road, Chester, NY 10918, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 404310607,\n        \"longitude\": -740282632\n    },\n    \"name\": \"10 Simon Lake Drive, Atlantic Highlands, NJ 07716, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 409319800,\n        \"longitude\": -746201391\n    },\n    \"name\": \"11 Ward Street, Mount Arlington, NJ 07856, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 406685311,\n        \"longitude\": -742108603\n    },\n    \"name\": \"300-398 Jefferson Avenue, Elizabeth, NJ 07201, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 419018117,\n        \"longitude\": -749142781\n    },\n    \"name\": \"43 Dreher Road, Roscoe, NY 12776, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 412856162,\n        \"longitude\": -745148837\n    },\n    \"name\": \"Swan Street, Pine Island, NY 10969, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 416560744,\n        \"longitude\": -746721964\n    },\n    \"name\": \"66 Pleasantview Avenue, Monticello, NY 12701, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 405314270,\n        \"longitude\": -749836354\n    },\n    \"name\": \"\"\n}, {\n    \"location\": {\n        \"latitude\": 414219548,\n        \"longitude\": -743327440\n    },\n    \"name\": \"\"\n}, {\n    \"location\": {\n        \"latitude\": 415534177,\n        \"longitude\": -742900616\n    },\n    \"name\": \"565 Winding Hills Road, Montgomery, NY 12549, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 406898530,\n        \"longitude\": -749127080\n    },\n    \"name\": \"231 Rocky Run Road, Glen Gardner, NJ 08826, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 407586880,\n        \"longitude\": -741670168\n    },\n    \"name\": \"100 Mount Pleasant Avenue, Newark, NJ 07104, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 400106455,\n        \"longitude\": -742870190\n    },\n    \"name\": \"517-521 Huntington Drive, Manchester Township, NJ 08759, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 400066188,\n        \"longitude\": -746793294\n    },\n    \"name\": \"\"\n}, {\n    \"location\": {\n        \"latitude\": 418803880,\n        \"longitude\": -744102673\n    },\n    \"name\": \"40 Mountain Road, Napanoch, NY 12458, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 414204288,\n        \"longitude\": -747895140\n    },\n    \"name\": \"\"\n}, {\n    \"location\": {\n        \"latitude\": 414777405,\n        \"longitude\": -740615601\n    },\n    \"name\": \"\"\n}, {\n    \"location\": {\n        \"latitude\": 415464475,\n        \"longitude\": -747175374\n    },\n    \"name\": \"48 North Road, Forestburgh, NY 12777, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 404062378,\n        \"longitude\": -746376177\n    },\n    \"name\": \"\"\n}, {\n    \"location\": {\n        \"latitude\": 405688272,\n        \"longitude\": -749285130\n    },\n    \"name\": \"\"\n}, {\n    \"location\": {\n        \"latitude\": 400342070,\n        \"longitude\": -748788996\n    },\n    \"name\": \"\"\n}, {\n    \"location\": {\n        \"latitude\": 401809022,\n        \"longitude\": -744157964\n    },\n    \"name\": \"\"\n}, {\n    \"location\": {\n        \"latitude\": 404226644,\n        \"longitude\": -740517141\n    },\n    \"name\": \"9 Thompson Avenue, Leonardo, NJ 07737, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 410322033,\n        \"longitude\": -747871659\n    },\n    \"name\": \"\"\n}, {\n    \"location\": {\n        \"latitude\": 407100674,\n        \"longitude\": -747742727\n    },\n    \"name\": \"\"\n}, {\n    \"location\": {\n        \"latitude\": 418811433,\n        \"longitude\": -741718005\n    },\n    \"name\": \"213 Bush Road, Stone Ridge, NY 12484, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 415034302,\n        \"longitude\": -743850945\n    },\n    \"name\": \"\"\n}, {\n    \"location\": {\n        \"latitude\": 411349992,\n        \"longitude\": -743694161\n    },\n    \"name\": \"\"\n}, {\n    \"location\": {\n        \"latitude\": 404839914,\n        \"longitude\": -744759616\n    },\n    \"name\": \"1-17 Bergen Court, New Brunswick, NJ 08901, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 414638017,\n        \"longitude\": -745957854\n    },\n    \"name\": \"35 Oakland Valley Road, Cuddebackville, NY 12729, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 412127800,\n        \"longitude\": -740173578\n    },\n    \"name\": \"\"\n}, {\n    \"location\": {\n        \"latitude\": 401263460,\n        \"longitude\": -747964303\n    },\n    \"name\": \"\"\n}, {\n    \"location\": {\n        \"latitude\": 412843391,\n        \"longitude\": -749086026\n    },\n    \"name\": \"\"\n}, {\n    \"location\": {\n        \"latitude\": 418512773,\n        \"longitude\": -743067823\n    },\n    \"name\": \"\"\n}, {\n    \"location\": {\n        \"latitude\": 404318328,\n        \"longitude\": -740835638\n    },\n    \"name\": \"42-102 Main Street, Belford, NJ 07718, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 419020746,\n        \"longitude\": -741172328\n    },\n    \"name\": \"\"\n}, {\n    \"location\": {\n        \"latitude\": 404080723,\n        \"longitude\": -746119569\n    },\n    \"name\": \"\"\n}, {\n    \"location\": {\n        \"latitude\": 401012643,\n        \"longitude\": -744035134\n    },\n    \"name\": \"\"\n}, {\n    \"location\": {\n        \"latitude\": 404306372,\n        \"longitude\": -741079661\n    },\n    \"name\": \"\"\n}, {\n    \"location\": {\n        \"latitude\": 403966326,\n        \"longitude\": -748519297\n    },\n    \"name\": \"\"\n}, {\n    \"location\": {\n        \"latitude\": 405002031,\n        \"longitude\": -748407866\n    },\n    \"name\": \"\"\n}, {\n    \"location\": {\n        \"latitude\": 409532885,\n        \"longitude\": -742200683\n    },\n    \"name\": \"\"\n}, {\n    \"location\": {\n        \"latitude\": 416851321,\n        \"longitude\": -742674555\n    },\n    \"name\": \"\"\n}, {\n    \"location\": {\n        \"latitude\": 406411633,\n        \"longitude\": -741722051\n    },\n    \"name\": \"3387 Richmond Terrace, Staten Island, NY 10303, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 413069058,\n        \"longitude\": -744597778\n    },\n    \"name\": \"261 Van Sickle Road, Goshen, NY 10924, USA\"\n}, {\n    \"location\": {\n        \"latitude\": 418465462,\n        \"longitude\": -746859398\n    },\n    \"name\": \"\"\n}, {\n    \"location\": {\n        \"latitude\": 411733222,\n        \"longitude\": -744228360\n    },\n    \"name\": \"\"\n}, {\n    \"location\": {\n        \"latitude\": 410248224,\n        \"longitude\": -747127767\n    },\n    \"name\": \"3 Hasta Way, Newton, NJ 07860, USA\"\n}]\n"
  },
  {
    "path": "test/route_guide_pb.erl",
    "content": "%% -*- coding: utf-8 -*-\n%% @private\n%% Automatically generated, do not edit\n%% Generated by gpb_compile version 4.7.3\n-module(route_guide_pb).\n\n-export([encode_msg/2, encode_msg/3]).\n-export([decode_msg/2, decode_msg/3]).\n-export([merge_msgs/3, merge_msgs/4]).\n-export([verify_msg/2, verify_msg/3]).\n-export([get_msg_defs/0]).\n-export([get_msg_names/0]).\n-export([get_group_names/0]).\n-export([get_msg_or_group_names/0]).\n-export([get_enum_names/0]).\n-export([find_msg_def/1, fetch_msg_def/1]).\n-export([find_enum_def/1, fetch_enum_def/1]).\n-export([enum_symbol_by_value/2, enum_value_by_symbol/2]).\n-export([get_service_names/0]).\n-export([get_service_def/1]).\n-export([get_rpc_names/1]).\n-export([find_rpc_def/2, fetch_rpc_def/2]).\n-export([fqbin_to_service_name/1]).\n-export([service_name_to_fqbin/1]).\n-export([fqbins_to_service_and_rpc_name/2]).\n-export([service_and_rpc_name_to_fqbins/2]).\n-export([fqbin_to_msg_name/1]).\n-export([msg_name_to_fqbin/1]).\n-export([fqbin_to_enum_name/1]).\n-export([enum_name_to_fqbin/1]).\n-export([get_package_name/0]).\n-export([uses_packages/0]).\n-export([source_basename/0]).\n-export([get_all_source_basenames/0]).\n-export([get_all_proto_names/0]).\n-export([get_msg_containment/1]).\n-export([get_pkg_containment/1]).\n-export([get_service_containment/1]).\n-export([get_rpc_containment/1]).\n-export([get_enum_containment/1]).\n-export([get_proto_by_msg_name_as_fqbin/1]).\n-export([get_proto_by_service_name_as_fqbin/1]).\n-export([get_proto_by_enum_name_as_fqbin/1]).\n-export([get_protos_by_pkg_name_as_fqbin/1]).\n-export([descriptor/0, descriptor/1]).\n-export([gpb_version_as_string/0, gpb_version_as_list/0]).\n\n\n%% enumerated types\n\n-export_type([]).\n\n%% message types\n-type empty() ::\n      #{\n       }.\n\n-type point() ::\n      #{latitude                => integer(),       % = 1, 32 bits\n        longitude               => integer()        % = 2, 32 bits\n       }.\n\n-type rectangle() ::\n      #{lo                      => point(),         % = 1\n        hi                      => point()          % = 2\n       }.\n\n-type feature() ::\n      #{name                    => iodata(),        % = 1\n        location                => point()          % = 2\n       }.\n\n-type route_note() ::\n      #{location                => point(),         % = 1\n        message                 => iodata()         % = 2\n       }.\n\n-type route_summary() ::\n      #{point_count             => integer(),       % = 1, 32 bits\n        feature_count           => integer(),       % = 2, 32 bits\n        distance                => integer(),       % = 3, 32 bits\n        elapsed_time            => integer()        % = 4, 32 bits\n       }.\n\n-export_type(['empty'/0, 'point'/0, 'rectangle'/0, 'feature'/0, 'route_note'/0, 'route_summary'/0]).\n\n-spec encode_msg(empty() | point() | rectangle() | feature() | route_note() | route_summary(), atom()) -> binary().\nencode_msg(Msg, MsgName) when is_atom(MsgName) ->\n    encode_msg(Msg, MsgName, []).\n\n-spec encode_msg(empty() | point() | rectangle() | feature() | route_note() | route_summary(), atom(), list()) -> binary().\nencode_msg(Msg, MsgName, Opts) ->\n    case proplists:get_bool(verify, Opts) of\n      true -> verify_msg(Msg, MsgName, Opts);\n      false -> ok\n    end,\n    TrUserData = proplists:get_value(user_data, Opts),\n    case MsgName of\n      empty ->\n\t  encode_msg_empty(id(Msg, TrUserData), TrUserData);\n      point ->\n\t  encode_msg_point(id(Msg, TrUserData), TrUserData);\n      rectangle ->\n\t  encode_msg_rectangle(id(Msg, TrUserData), TrUserData);\n      feature ->\n\t  encode_msg_feature(id(Msg, TrUserData), TrUserData);\n      route_note ->\n\t  encode_msg_route_note(id(Msg, TrUserData), TrUserData);\n      route_summary ->\n\t  encode_msg_route_summary(id(Msg, TrUserData),\n\t\t\t\t   TrUserData)\n    end.\n\n\nencode_msg_empty(_Msg, _TrUserData) -> <<>>.\n\nencode_msg_point(Msg, TrUserData) ->\n    encode_msg_point(Msg, <<>>, TrUserData).\n\n\nencode_msg_point(#{} = M, Bin, TrUserData) ->\n    B1 = case M of\n\t   #{latitude := F1} ->\n\t       begin\n\t\t TrF1 = id(F1, TrUserData),\n\t\t if TrF1 =:= 0 -> Bin;\n\t\t    true ->\n\t\t\te_type_int32(TrF1, <<Bin/binary, 8>>, TrUserData)\n\t\t end\n\t       end;\n\t   _ -> Bin\n\t end,\n    case M of\n      #{longitude := F2} ->\n\t  begin\n\t    TrF2 = id(F2, TrUserData),\n\t    if TrF2 =:= 0 -> B1;\n\t       true ->\n\t\t   e_type_int32(TrF2, <<B1/binary, 16>>, TrUserData)\n\t    end\n\t  end;\n      _ -> B1\n    end.\n\nencode_msg_rectangle(Msg, TrUserData) ->\n    encode_msg_rectangle(Msg, <<>>, TrUserData).\n\n\nencode_msg_rectangle(#{} = M, Bin, TrUserData) ->\n    B1 = case M of\n\t   #{lo := F1} ->\n\t       begin\n\t\t TrF1 = id(F1, TrUserData),\n\t\t if TrF1 =:= undefined -> Bin;\n\t\t    true ->\n\t\t\te_mfield_rectangle_lo(TrF1, <<Bin/binary, 10>>,\n\t\t\t\t\t      TrUserData)\n\t\t end\n\t       end;\n\t   _ -> Bin\n\t end,\n    case M of\n      #{hi := F2} ->\n\t  begin\n\t    TrF2 = id(F2, TrUserData),\n\t    if TrF2 =:= undefined -> B1;\n\t       true ->\n\t\t   e_mfield_rectangle_hi(TrF2, <<B1/binary, 18>>,\n\t\t\t\t\t TrUserData)\n\t    end\n\t  end;\n      _ -> B1\n    end.\n\nencode_msg_feature(Msg, TrUserData) ->\n    encode_msg_feature(Msg, <<>>, TrUserData).\n\n\nencode_msg_feature(#{} = M, Bin, TrUserData) ->\n    B1 = case M of\n\t   #{name := F1} ->\n\t       begin\n\t\t TrF1 = id(F1, TrUserData),\n\t\t case is_empty_string(TrF1) of\n\t\t   true -> Bin;\n\t\t   false ->\n\t\t       e_type_string(TrF1, <<Bin/binary, 10>>, TrUserData)\n\t\t end\n\t       end;\n\t   _ -> Bin\n\t end,\n    case M of\n      #{location := F2} ->\n\t  begin\n\t    TrF2 = id(F2, TrUserData),\n\t    if TrF2 =:= undefined -> B1;\n\t       true ->\n\t\t   e_mfield_feature_location(TrF2, <<B1/binary, 18>>,\n\t\t\t\t\t     TrUserData)\n\t    end\n\t  end;\n      _ -> B1\n    end.\n\nencode_msg_route_note(Msg, TrUserData) ->\n    encode_msg_route_note(Msg, <<>>, TrUserData).\n\n\nencode_msg_route_note(#{} = M, Bin, TrUserData) ->\n    B1 = case M of\n\t   #{location := F1} ->\n\t       begin\n\t\t TrF1 = id(F1, TrUserData),\n\t\t if TrF1 =:= undefined -> Bin;\n\t\t    true ->\n\t\t\te_mfield_route_note_location(TrF1, <<Bin/binary, 10>>,\n\t\t\t\t\t\t     TrUserData)\n\t\t end\n\t       end;\n\t   _ -> Bin\n\t end,\n    case M of\n      #{message := F2} ->\n\t  begin\n\t    TrF2 = id(F2, TrUserData),\n\t    case is_empty_string(TrF2) of\n\t      true -> B1;\n\t      false ->\n\t\t  e_type_string(TrF2, <<B1/binary, 18>>, TrUserData)\n\t    end\n\t  end;\n      _ -> B1\n    end.\n\nencode_msg_route_summary(Msg, TrUserData) ->\n    encode_msg_route_summary(Msg, <<>>, TrUserData).\n\n\nencode_msg_route_summary(#{} = M, Bin, TrUserData) ->\n    B1 = case M of\n\t   #{point_count := F1} ->\n\t       begin\n\t\t TrF1 = id(F1, TrUserData),\n\t\t if TrF1 =:= 0 -> Bin;\n\t\t    true ->\n\t\t\te_type_int32(TrF1, <<Bin/binary, 8>>, TrUserData)\n\t\t end\n\t       end;\n\t   _ -> Bin\n\t end,\n    B2 = case M of\n\t   #{feature_count := F2} ->\n\t       begin\n\t\t TrF2 = id(F2, TrUserData),\n\t\t if TrF2 =:= 0 -> B1;\n\t\t    true ->\n\t\t\te_type_int32(TrF2, <<B1/binary, 16>>, TrUserData)\n\t\t end\n\t       end;\n\t   _ -> B1\n\t end,\n    B3 = case M of\n\t   #{distance := F3} ->\n\t       begin\n\t\t TrF3 = id(F3, TrUserData),\n\t\t if TrF3 =:= 0 -> B2;\n\t\t    true ->\n\t\t\te_type_int32(TrF3, <<B2/binary, 24>>, TrUserData)\n\t\t end\n\t       end;\n\t   _ -> B2\n\t end,\n    case M of\n      #{elapsed_time := F4} ->\n\t  begin\n\t    TrF4 = id(F4, TrUserData),\n\t    if TrF4 =:= 0 -> B3;\n\t       true ->\n\t\t   e_type_int32(TrF4, <<B3/binary, 32>>, TrUserData)\n\t    end\n\t  end;\n      _ -> B3\n    end.\n\ne_mfield_rectangle_lo(Msg, Bin, TrUserData) ->\n    SubBin = encode_msg_point(Msg, <<>>, TrUserData),\n    Bin2 = e_varint(byte_size(SubBin), Bin),\n    <<Bin2/binary, SubBin/binary>>.\n\ne_mfield_rectangle_hi(Msg, Bin, TrUserData) ->\n    SubBin = encode_msg_point(Msg, <<>>, TrUserData),\n    Bin2 = e_varint(byte_size(SubBin), Bin),\n    <<Bin2/binary, SubBin/binary>>.\n\ne_mfield_feature_location(Msg, Bin, TrUserData) ->\n    SubBin = encode_msg_point(Msg, <<>>, TrUserData),\n    Bin2 = e_varint(byte_size(SubBin), Bin),\n    <<Bin2/binary, SubBin/binary>>.\n\ne_mfield_route_note_location(Msg, Bin, TrUserData) ->\n    SubBin = encode_msg_point(Msg, <<>>, TrUserData),\n    Bin2 = e_varint(byte_size(SubBin), Bin),\n    <<Bin2/binary, SubBin/binary>>.\n\n-compile({nowarn_unused_function,e_type_sint/3}).\ne_type_sint(Value, Bin, _TrUserData) when Value >= 0 ->\n    e_varint(Value * 2, Bin);\ne_type_sint(Value, Bin, _TrUserData) ->\n    e_varint(Value * -2 - 1, Bin).\n\n-compile({nowarn_unused_function,e_type_int32/3}).\ne_type_int32(Value, Bin, _TrUserData)\n    when 0 =< Value, Value =< 127 ->\n    <<Bin/binary, Value>>;\ne_type_int32(Value, Bin, _TrUserData) ->\n    <<N:64/unsigned-native>> = <<Value:64/signed-native>>,\n    e_varint(N, Bin).\n\n-compile({nowarn_unused_function,e_type_int64/3}).\ne_type_int64(Value, Bin, _TrUserData)\n    when 0 =< Value, Value =< 127 ->\n    <<Bin/binary, Value>>;\ne_type_int64(Value, Bin, _TrUserData) ->\n    <<N:64/unsigned-native>> = <<Value:64/signed-native>>,\n    e_varint(N, Bin).\n\n-compile({nowarn_unused_function,e_type_bool/3}).\ne_type_bool(true, Bin, _TrUserData) ->\n    <<Bin/binary, 1>>;\ne_type_bool(false, Bin, _TrUserData) ->\n    <<Bin/binary, 0>>;\ne_type_bool(1, Bin, _TrUserData) -> <<Bin/binary, 1>>;\ne_type_bool(0, Bin, _TrUserData) -> <<Bin/binary, 0>>.\n\n-compile({nowarn_unused_function,e_type_string/3}).\ne_type_string(S, Bin, _TrUserData) ->\n    Utf8 = unicode:characters_to_binary(S),\n    Bin2 = e_varint(byte_size(Utf8), Bin),\n    <<Bin2/binary, Utf8/binary>>.\n\n-compile({nowarn_unused_function,e_type_bytes/3}).\ne_type_bytes(Bytes, Bin, _TrUserData)\n    when is_binary(Bytes) ->\n    Bin2 = e_varint(byte_size(Bytes), Bin),\n    <<Bin2/binary, Bytes/binary>>;\ne_type_bytes(Bytes, Bin, _TrUserData)\n    when is_list(Bytes) ->\n    BytesBin = iolist_to_binary(Bytes),\n    Bin2 = e_varint(byte_size(BytesBin), Bin),\n    <<Bin2/binary, BytesBin/binary>>.\n\n-compile({nowarn_unused_function,e_type_fixed32/3}).\ne_type_fixed32(Value, Bin, _TrUserData) ->\n    <<Bin/binary, Value:32/little>>.\n\n-compile({nowarn_unused_function,e_type_sfixed32/3}).\ne_type_sfixed32(Value, Bin, _TrUserData) ->\n    <<Bin/binary, Value:32/little-signed>>.\n\n-compile({nowarn_unused_function,e_type_fixed64/3}).\ne_type_fixed64(Value, Bin, _TrUserData) ->\n    <<Bin/binary, Value:64/little>>.\n\n-compile({nowarn_unused_function,e_type_sfixed64/3}).\ne_type_sfixed64(Value, Bin, _TrUserData) ->\n    <<Bin/binary, Value:64/little-signed>>.\n\n-compile({nowarn_unused_function,e_type_float/3}).\ne_type_float(V, Bin, _) when is_number(V) ->\n    <<Bin/binary, V:32/little-float>>;\ne_type_float(infinity, Bin, _) ->\n    <<Bin/binary, 0:16, 128, 127>>;\ne_type_float('-infinity', Bin, _) ->\n    <<Bin/binary, 0:16, 128, 255>>;\ne_type_float(nan, Bin, _) ->\n    <<Bin/binary, 0:16, 192, 127>>.\n\n-compile({nowarn_unused_function,e_type_double/3}).\ne_type_double(V, Bin, _) when is_number(V) ->\n    <<Bin/binary, V:64/little-float>>;\ne_type_double(infinity, Bin, _) ->\n    <<Bin/binary, 0:48, 240, 127>>;\ne_type_double('-infinity', Bin, _) ->\n    <<Bin/binary, 0:48, 240, 255>>;\ne_type_double(nan, Bin, _) ->\n    <<Bin/binary, 0:48, 248, 127>>.\n\n-compile({nowarn_unused_function,e_varint/3}).\ne_varint(N, Bin, _TrUserData) -> e_varint(N, Bin).\n\n-compile({nowarn_unused_function,e_varint/2}).\ne_varint(N, Bin) when N =< 127 -> <<Bin/binary, N>>;\ne_varint(N, Bin) ->\n    Bin2 = <<Bin/binary, (N band 127 bor 128)>>,\n    e_varint(N bsr 7, Bin2).\n\nis_empty_string(\"\") -> true;\nis_empty_string(<<>>) -> true;\nis_empty_string(L) when is_list(L) ->\n    not string_has_chars(L);\nis_empty_string(B) when is_binary(B) -> false.\n\nstring_has_chars([C | _]) when is_integer(C) -> true;\nstring_has_chars([H | T]) ->\n    case string_has_chars(H) of\n      true -> true;\n      false -> string_has_chars(T)\n    end;\nstring_has_chars(B)\n    when is_binary(B), byte_size(B) =/= 0 ->\n    true;\nstring_has_chars(C) when is_integer(C) -> true;\nstring_has_chars(<<>>) -> false;\nstring_has_chars([]) -> false.\n\n\ndecode_msg(Bin, MsgName) when is_binary(Bin) ->\n    decode_msg(Bin, MsgName, []).\n\ndecode_msg(Bin, MsgName, Opts) when is_binary(Bin) ->\n    TrUserData = proplists:get_value(user_data, Opts),\n    decode_msg_1_catch(Bin, MsgName, TrUserData).\n\n-ifdef('OTP_RELEASE').\ndecode_msg_1_catch(Bin, MsgName, TrUserData) ->\n    try decode_msg_2_doit(MsgName, Bin, TrUserData)\n    catch Class:Reason:StackTrace -> error({gpb_error,{decoding_failure, {Bin, MsgName, {Class, Reason, StackTrace}}}})\n    end.\n-else.\ndecode_msg_1_catch(Bin, MsgName, TrUserData) ->\n    try decode_msg_2_doit(MsgName, Bin, TrUserData)\n    catch Class:Reason ->\n        StackTrace = erlang:get_stacktrace(),\n        error({gpb_error,{decoding_failure, {Bin, MsgName, {Class, Reason, StackTrace}}}})\n    end.\n-endif.\n\ndecode_msg_2_doit(empty, Bin, TrUserData) ->\n    id(decode_msg_empty(Bin, TrUserData), TrUserData);\ndecode_msg_2_doit(point, Bin, TrUserData) ->\n    id(decode_msg_point(Bin, TrUserData), TrUserData);\ndecode_msg_2_doit(rectangle, Bin, TrUserData) ->\n    id(decode_msg_rectangle(Bin, TrUserData), TrUserData);\ndecode_msg_2_doit(feature, Bin, TrUserData) ->\n    id(decode_msg_feature(Bin, TrUserData), TrUserData);\ndecode_msg_2_doit(route_note, Bin, TrUserData) ->\n    id(decode_msg_route_note(Bin, TrUserData), TrUserData);\ndecode_msg_2_doit(route_summary, Bin, TrUserData) ->\n    id(decode_msg_route_summary(Bin, TrUserData),\n       TrUserData).\n\n\n\ndecode_msg_empty(Bin, TrUserData) ->\n    dfp_read_field_def_empty(Bin, 0, 0, TrUserData).\n\ndfp_read_field_def_empty(<<>>, 0, 0, _) -> #{};\ndfp_read_field_def_empty(Other, Z1, Z2, TrUserData) ->\n    dg_read_field_def_empty(Other, Z1, Z2, TrUserData).\n\ndg_read_field_def_empty(<<1:1, X:7, Rest/binary>>, N,\n\t\t\tAcc, TrUserData)\n    when N < 32 - 7 ->\n    dg_read_field_def_empty(Rest, N + 7, X bsl N + Acc,\n\t\t\t    TrUserData);\ndg_read_field_def_empty(<<0:1, X:7, Rest/binary>>, N,\n\t\t\tAcc, TrUserData) ->\n    Key = X bsl N + Acc,\n    case Key band 7 of\n      0 -> skip_varint_empty(Rest, 0, 0, TrUserData);\n      1 -> skip_64_empty(Rest, 0, 0, TrUserData);\n      2 ->\n\t  skip_length_delimited_empty(Rest, 0, 0, TrUserData);\n      3 -> skip_group_empty(Rest, Key bsr 3, 0, TrUserData);\n      5 -> skip_32_empty(Rest, 0, 0, TrUserData)\n    end;\ndg_read_field_def_empty(<<>>, 0, 0, _) -> #{}.\n\nskip_varint_empty(<<1:1, _:7, Rest/binary>>, Z1, Z2,\n\t\t  TrUserData) ->\n    skip_varint_empty(Rest, Z1, Z2, TrUserData);\nskip_varint_empty(<<0:1, _:7, Rest/binary>>, Z1, Z2,\n\t\t  TrUserData) ->\n    dfp_read_field_def_empty(Rest, Z1, Z2, TrUserData).\n\nskip_length_delimited_empty(<<1:1, X:7, Rest/binary>>,\n\t\t\t    N, Acc, TrUserData)\n    when N < 57 ->\n    skip_length_delimited_empty(Rest, N + 7, X bsl N + Acc,\n\t\t\t\tTrUserData);\nskip_length_delimited_empty(<<0:1, X:7, Rest/binary>>,\n\t\t\t    N, Acc, TrUserData) ->\n    Length = X bsl N + Acc,\n    <<_:Length/binary, Rest2/binary>> = Rest,\n    dfp_read_field_def_empty(Rest2, 0, 0, TrUserData).\n\nskip_group_empty(Bin, FNum, Z2, TrUserData) ->\n    {_, Rest} = read_group(Bin, FNum),\n    dfp_read_field_def_empty(Rest, 0, Z2, TrUserData).\n\nskip_32_empty(<<_:32, Rest/binary>>, Z1, Z2,\n\t      TrUserData) ->\n    dfp_read_field_def_empty(Rest, Z1, Z2, TrUserData).\n\nskip_64_empty(<<_:64, Rest/binary>>, Z1, Z2,\n\t      TrUserData) ->\n    dfp_read_field_def_empty(Rest, Z1, Z2, TrUserData).\n\ndecode_msg_point(Bin, TrUserData) ->\n    dfp_read_field_def_point(Bin, 0, 0, id(0, TrUserData),\n\t\t\t     id(0, TrUserData), TrUserData).\n\ndfp_read_field_def_point(<<8, Rest/binary>>, Z1, Z2,\n\t\t\t F@_1, F@_2, TrUserData) ->\n    d_field_point_latitude(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t   TrUserData);\ndfp_read_field_def_point(<<16, Rest/binary>>, Z1, Z2,\n\t\t\t F@_1, F@_2, TrUserData) ->\n    d_field_point_longitude(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t    TrUserData);\ndfp_read_field_def_point(<<>>, 0, 0, F@_1, F@_2, _) ->\n    #{latitude => F@_1, longitude => F@_2};\ndfp_read_field_def_point(Other, Z1, Z2, F@_1, F@_2,\n\t\t\t TrUserData) ->\n    dg_read_field_def_point(Other, Z1, Z2, F@_1, F@_2,\n\t\t\t    TrUserData).\n\ndg_read_field_def_point(<<1:1, X:7, Rest/binary>>, N,\n\t\t\tAcc, F@_1, F@_2, TrUserData)\n    when N < 32 - 7 ->\n    dg_read_field_def_point(Rest, N + 7, X bsl N + Acc,\n\t\t\t    F@_1, F@_2, TrUserData);\ndg_read_field_def_point(<<0:1, X:7, Rest/binary>>, N,\n\t\t\tAcc, F@_1, F@_2, TrUserData) ->\n    Key = X bsl N + Acc,\n    case Key of\n      8 ->\n\t  d_field_point_latitude(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t TrUserData);\n      16 ->\n\t  d_field_point_longitude(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t  TrUserData);\n      _ ->\n\t  case Key band 7 of\n\t    0 ->\n\t\tskip_varint_point(Rest, 0, 0, F@_1, F@_2, TrUserData);\n\t    1 -> skip_64_point(Rest, 0, 0, F@_1, F@_2, TrUserData);\n\t    2 ->\n\t\tskip_length_delimited_point(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t\t    TrUserData);\n\t    3 ->\n\t\tskip_group_point(Rest, Key bsr 3, 0, F@_1, F@_2,\n\t\t\t\t TrUserData);\n\t    5 -> skip_32_point(Rest, 0, 0, F@_1, F@_2, TrUserData)\n\t  end\n    end;\ndg_read_field_def_point(<<>>, 0, 0, F@_1, F@_2, _) ->\n    #{latitude => F@_1, longitude => F@_2}.\n\nd_field_point_latitude(<<1:1, X:7, Rest/binary>>, N,\n\t\t       Acc, F@_1, F@_2, TrUserData)\n    when N < 57 ->\n    d_field_point_latitude(Rest, N + 7, X bsl N + Acc, F@_1,\n\t\t\t   F@_2, TrUserData);\nd_field_point_latitude(<<0:1, X:7, Rest/binary>>, N,\n\t\t       Acc, _, F@_2, TrUserData) ->\n    {NewFValue, RestF} = {begin\n\t\t\t    <<Res:32/signed-native>> = <<(X bsl N +\n\t\t\t\t\t\t\t    Acc):32/unsigned-native>>,\n\t\t\t    id(Res, TrUserData)\n\t\t\t  end,\n\t\t\t  Rest},\n    dfp_read_field_def_point(RestF, 0, 0, NewFValue, F@_2,\n\t\t\t     TrUserData).\n\nd_field_point_longitude(<<1:1, X:7, Rest/binary>>, N,\n\t\t\tAcc, F@_1, F@_2, TrUserData)\n    when N < 57 ->\n    d_field_point_longitude(Rest, N + 7, X bsl N + Acc,\n\t\t\t    F@_1, F@_2, TrUserData);\nd_field_point_longitude(<<0:1, X:7, Rest/binary>>, N,\n\t\t\tAcc, F@_1, _, TrUserData) ->\n    {NewFValue, RestF} = {begin\n\t\t\t    <<Res:32/signed-native>> = <<(X bsl N +\n\t\t\t\t\t\t\t    Acc):32/unsigned-native>>,\n\t\t\t    id(Res, TrUserData)\n\t\t\t  end,\n\t\t\t  Rest},\n    dfp_read_field_def_point(RestF, 0, 0, F@_1, NewFValue,\n\t\t\t     TrUserData).\n\nskip_varint_point(<<1:1, _:7, Rest/binary>>, Z1, Z2,\n\t\t  F@_1, F@_2, TrUserData) ->\n    skip_varint_point(Rest, Z1, Z2, F@_1, F@_2, TrUserData);\nskip_varint_point(<<0:1, _:7, Rest/binary>>, Z1, Z2,\n\t\t  F@_1, F@_2, TrUserData) ->\n    dfp_read_field_def_point(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t     TrUserData).\n\nskip_length_delimited_point(<<1:1, X:7, Rest/binary>>,\n\t\t\t    N, Acc, F@_1, F@_2, TrUserData)\n    when N < 57 ->\n    skip_length_delimited_point(Rest, N + 7, X bsl N + Acc,\n\t\t\t\tF@_1, F@_2, TrUserData);\nskip_length_delimited_point(<<0:1, X:7, Rest/binary>>,\n\t\t\t    N, Acc, F@_1, F@_2, TrUserData) ->\n    Length = X bsl N + Acc,\n    <<_:Length/binary, Rest2/binary>> = Rest,\n    dfp_read_field_def_point(Rest2, 0, 0, F@_1, F@_2,\n\t\t\t     TrUserData).\n\nskip_group_point(Bin, FNum, Z2, F@_1, F@_2,\n\t\t TrUserData) ->\n    {_, Rest} = read_group(Bin, FNum),\n    dfp_read_field_def_point(Rest, 0, Z2, F@_1, F@_2,\n\t\t\t     TrUserData).\n\nskip_32_point(<<_:32, Rest/binary>>, Z1, Z2, F@_1, F@_2,\n\t      TrUserData) ->\n    dfp_read_field_def_point(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t     TrUserData).\n\nskip_64_point(<<_:64, Rest/binary>>, Z1, Z2, F@_1, F@_2,\n\t      TrUserData) ->\n    dfp_read_field_def_point(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t     TrUserData).\n\ndecode_msg_rectangle(Bin, TrUserData) ->\n    dfp_read_field_def_rectangle(Bin, 0, 0,\n\t\t\t\t id('$undef', TrUserData),\n\t\t\t\t id('$undef', TrUserData), TrUserData).\n\ndfp_read_field_def_rectangle(<<10, Rest/binary>>, Z1,\n\t\t\t     Z2, F@_1, F@_2, TrUserData) ->\n    d_field_rectangle_lo(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t TrUserData);\ndfp_read_field_def_rectangle(<<18, Rest/binary>>, Z1,\n\t\t\t     Z2, F@_1, F@_2, TrUserData) ->\n    d_field_rectangle_hi(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t TrUserData);\ndfp_read_field_def_rectangle(<<>>, 0, 0, F@_1, F@_2,\n\t\t\t     _) ->\n    S1 = #{},\n    S2 = if F@_1 == '$undef' -> S1;\n\t    true -> S1#{lo => F@_1}\n\t end,\n    if F@_2 == '$undef' -> S2;\n       true -> S2#{hi => F@_2}\n    end;\ndfp_read_field_def_rectangle(Other, Z1, Z2, F@_1, F@_2,\n\t\t\t     TrUserData) ->\n    dg_read_field_def_rectangle(Other, Z1, Z2, F@_1, F@_2,\n\t\t\t\tTrUserData).\n\ndg_read_field_def_rectangle(<<1:1, X:7, Rest/binary>>,\n\t\t\t    N, Acc, F@_1, F@_2, TrUserData)\n    when N < 32 - 7 ->\n    dg_read_field_def_rectangle(Rest, N + 7, X bsl N + Acc,\n\t\t\t\tF@_1, F@_2, TrUserData);\ndg_read_field_def_rectangle(<<0:1, X:7, Rest/binary>>,\n\t\t\t    N, Acc, F@_1, F@_2, TrUserData) ->\n    Key = X bsl N + Acc,\n    case Key of\n      10 ->\n\t  d_field_rectangle_lo(Rest, 0, 0, F@_1, F@_2,\n\t\t\t       TrUserData);\n      18 ->\n\t  d_field_rectangle_hi(Rest, 0, 0, F@_1, F@_2,\n\t\t\t       TrUserData);\n      _ ->\n\t  case Key band 7 of\n\t    0 ->\n\t\tskip_varint_rectangle(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t      TrUserData);\n\t    1 ->\n\t\tskip_64_rectangle(Rest, 0, 0, F@_1, F@_2, TrUserData);\n\t    2 ->\n\t\tskip_length_delimited_rectangle(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t\t\tTrUserData);\n\t    3 ->\n\t\tskip_group_rectangle(Rest, Key bsr 3, 0, F@_1, F@_2,\n\t\t\t\t     TrUserData);\n\t    5 ->\n\t\tskip_32_rectangle(Rest, 0, 0, F@_1, F@_2, TrUserData)\n\t  end\n    end;\ndg_read_field_def_rectangle(<<>>, 0, 0, F@_1, F@_2,\n\t\t\t    _) ->\n    S1 = #{},\n    S2 = if F@_1 == '$undef' -> S1;\n\t    true -> S1#{lo => F@_1}\n\t end,\n    if F@_2 == '$undef' -> S2;\n       true -> S2#{hi => F@_2}\n    end.\n\nd_field_rectangle_lo(<<1:1, X:7, Rest/binary>>, N, Acc,\n\t\t     F@_1, F@_2, TrUserData)\n    when N < 57 ->\n    d_field_rectangle_lo(Rest, N + 7, X bsl N + Acc, F@_1,\n\t\t\t F@_2, TrUserData);\nd_field_rectangle_lo(<<0:1, X:7, Rest/binary>>, N, Acc,\n\t\t     Prev, F@_2, TrUserData) ->\n    {NewFValue, RestF} = begin\n\t\t\t   Len = X bsl N + Acc,\n\t\t\t   <<Bs:Len/binary, Rest2/binary>> = Rest,\n\t\t\t   {id(decode_msg_point(Bs, TrUserData), TrUserData),\n\t\t\t    Rest2}\n\t\t\t end,\n    dfp_read_field_def_rectangle(RestF, 0, 0,\n\t\t\t\t if Prev == '$undef' -> NewFValue;\n\t\t\t\t    true ->\n\t\t\t\t\tmerge_msg_point(Prev, NewFValue,\n\t\t\t\t\t\t\tTrUserData)\n\t\t\t\t end,\n\t\t\t\t F@_2, TrUserData).\n\nd_field_rectangle_hi(<<1:1, X:7, Rest/binary>>, N, Acc,\n\t\t     F@_1, F@_2, TrUserData)\n    when N < 57 ->\n    d_field_rectangle_hi(Rest, N + 7, X bsl N + Acc, F@_1,\n\t\t\t F@_2, TrUserData);\nd_field_rectangle_hi(<<0:1, X:7, Rest/binary>>, N, Acc,\n\t\t     F@_1, Prev, TrUserData) ->\n    {NewFValue, RestF} = begin\n\t\t\t   Len = X bsl N + Acc,\n\t\t\t   <<Bs:Len/binary, Rest2/binary>> = Rest,\n\t\t\t   {id(decode_msg_point(Bs, TrUserData), TrUserData),\n\t\t\t    Rest2}\n\t\t\t end,\n    dfp_read_field_def_rectangle(RestF, 0, 0, F@_1,\n\t\t\t\t if Prev == '$undef' -> NewFValue;\n\t\t\t\t    true ->\n\t\t\t\t\tmerge_msg_point(Prev, NewFValue,\n\t\t\t\t\t\t\tTrUserData)\n\t\t\t\t end,\n\t\t\t\t TrUserData).\n\nskip_varint_rectangle(<<1:1, _:7, Rest/binary>>, Z1, Z2,\n\t\t      F@_1, F@_2, TrUserData) ->\n    skip_varint_rectangle(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t  TrUserData);\nskip_varint_rectangle(<<0:1, _:7, Rest/binary>>, Z1, Z2,\n\t\t      F@_1, F@_2, TrUserData) ->\n    dfp_read_field_def_rectangle(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t\t TrUserData).\n\nskip_length_delimited_rectangle(<<1:1, X:7,\n\t\t\t\t  Rest/binary>>,\n\t\t\t\tN, Acc, F@_1, F@_2, TrUserData)\n    when N < 57 ->\n    skip_length_delimited_rectangle(Rest, N + 7,\n\t\t\t\t    X bsl N + Acc, F@_1, F@_2, TrUserData);\nskip_length_delimited_rectangle(<<0:1, X:7,\n\t\t\t\t  Rest/binary>>,\n\t\t\t\tN, Acc, F@_1, F@_2, TrUserData) ->\n    Length = X bsl N + Acc,\n    <<_:Length/binary, Rest2/binary>> = Rest,\n    dfp_read_field_def_rectangle(Rest2, 0, 0, F@_1, F@_2,\n\t\t\t\t TrUserData).\n\nskip_group_rectangle(Bin, FNum, Z2, F@_1, F@_2,\n\t\t     TrUserData) ->\n    {_, Rest} = read_group(Bin, FNum),\n    dfp_read_field_def_rectangle(Rest, 0, Z2, F@_1, F@_2,\n\t\t\t\t TrUserData).\n\nskip_32_rectangle(<<_:32, Rest/binary>>, Z1, Z2, F@_1,\n\t\t  F@_2, TrUserData) ->\n    dfp_read_field_def_rectangle(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t\t TrUserData).\n\nskip_64_rectangle(<<_:64, Rest/binary>>, Z1, Z2, F@_1,\n\t\t  F@_2, TrUserData) ->\n    dfp_read_field_def_rectangle(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t\t TrUserData).\n\ndecode_msg_feature(Bin, TrUserData) ->\n    dfp_read_field_def_feature(Bin, 0, 0,\n\t\t\t       id(<<>>, TrUserData), id('$undef', TrUserData),\n\t\t\t       TrUserData).\n\ndfp_read_field_def_feature(<<10, Rest/binary>>, Z1, Z2,\n\t\t\t   F@_1, F@_2, TrUserData) ->\n    d_field_feature_name(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t TrUserData);\ndfp_read_field_def_feature(<<18, Rest/binary>>, Z1, Z2,\n\t\t\t   F@_1, F@_2, TrUserData) ->\n    d_field_feature_location(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t     TrUserData);\ndfp_read_field_def_feature(<<>>, 0, 0, F@_1, F@_2, _) ->\n    S1 = #{name => F@_1},\n    if F@_2 == '$undef' -> S1;\n       true -> S1#{location => F@_2}\n    end;\ndfp_read_field_def_feature(Other, Z1, Z2, F@_1, F@_2,\n\t\t\t   TrUserData) ->\n    dg_read_field_def_feature(Other, Z1, Z2, F@_1, F@_2,\n\t\t\t      TrUserData).\n\ndg_read_field_def_feature(<<1:1, X:7, Rest/binary>>, N,\n\t\t\t  Acc, F@_1, F@_2, TrUserData)\n    when N < 32 - 7 ->\n    dg_read_field_def_feature(Rest, N + 7, X bsl N + Acc,\n\t\t\t      F@_1, F@_2, TrUserData);\ndg_read_field_def_feature(<<0:1, X:7, Rest/binary>>, N,\n\t\t\t  Acc, F@_1, F@_2, TrUserData) ->\n    Key = X bsl N + Acc,\n    case Key of\n      10 ->\n\t  d_field_feature_name(Rest, 0, 0, F@_1, F@_2,\n\t\t\t       TrUserData);\n      18 ->\n\t  d_field_feature_location(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t   TrUserData);\n      _ ->\n\t  case Key band 7 of\n\t    0 ->\n\t\tskip_varint_feature(Rest, 0, 0, F@_1, F@_2, TrUserData);\n\t    1 ->\n\t\tskip_64_feature(Rest, 0, 0, F@_1, F@_2, TrUserData);\n\t    2 ->\n\t\tskip_length_delimited_feature(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t\t      TrUserData);\n\t    3 ->\n\t\tskip_group_feature(Rest, Key bsr 3, 0, F@_1, F@_2,\n\t\t\t\t   TrUserData);\n\t    5 -> skip_32_feature(Rest, 0, 0, F@_1, F@_2, TrUserData)\n\t  end\n    end;\ndg_read_field_def_feature(<<>>, 0, 0, F@_1, F@_2, _) ->\n    S1 = #{name => F@_1},\n    if F@_2 == '$undef' -> S1;\n       true -> S1#{location => F@_2}\n    end.\n\nd_field_feature_name(<<1:1, X:7, Rest/binary>>, N, Acc,\n\t\t     F@_1, F@_2, TrUserData)\n    when N < 57 ->\n    d_field_feature_name(Rest, N + 7, X bsl N + Acc, F@_1,\n\t\t\t F@_2, TrUserData);\nd_field_feature_name(<<0:1, X:7, Rest/binary>>, N, Acc,\n\t\t     _, F@_2, TrUserData) ->\n    {NewFValue, RestF} = begin\n\t\t\t   Len = X bsl N + Acc,\n\t\t\t   <<Bytes:Len/binary, Rest2/binary>> = Rest,\n\t\t\t   {id(binary:copy(Bytes), TrUserData), Rest2}\n\t\t\t end,\n    dfp_read_field_def_feature(RestF, 0, 0, NewFValue, F@_2,\n\t\t\t       TrUserData).\n\nd_field_feature_location(<<1:1, X:7, Rest/binary>>, N,\n\t\t\t Acc, F@_1, F@_2, TrUserData)\n    when N < 57 ->\n    d_field_feature_location(Rest, N + 7, X bsl N + Acc,\n\t\t\t     F@_1, F@_2, TrUserData);\nd_field_feature_location(<<0:1, X:7, Rest/binary>>, N,\n\t\t\t Acc, F@_1, Prev, TrUserData) ->\n    {NewFValue, RestF} = begin\n\t\t\t   Len = X bsl N + Acc,\n\t\t\t   <<Bs:Len/binary, Rest2/binary>> = Rest,\n\t\t\t   {id(decode_msg_point(Bs, TrUserData), TrUserData),\n\t\t\t    Rest2}\n\t\t\t end,\n    dfp_read_field_def_feature(RestF, 0, 0, F@_1,\n\t\t\t       if Prev == '$undef' -> NewFValue;\n\t\t\t\t  true ->\n\t\t\t\t      merge_msg_point(Prev, NewFValue,\n\t\t\t\t\t\t      TrUserData)\n\t\t\t       end,\n\t\t\t       TrUserData).\n\nskip_varint_feature(<<1:1, _:7, Rest/binary>>, Z1, Z2,\n\t\t    F@_1, F@_2, TrUserData) ->\n    skip_varint_feature(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\tTrUserData);\nskip_varint_feature(<<0:1, _:7, Rest/binary>>, Z1, Z2,\n\t\t    F@_1, F@_2, TrUserData) ->\n    dfp_read_field_def_feature(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t       TrUserData).\n\nskip_length_delimited_feature(<<1:1, X:7, Rest/binary>>,\n\t\t\t      N, Acc, F@_1, F@_2, TrUserData)\n    when N < 57 ->\n    skip_length_delimited_feature(Rest, N + 7,\n\t\t\t\t  X bsl N + Acc, F@_1, F@_2, TrUserData);\nskip_length_delimited_feature(<<0:1, X:7, Rest/binary>>,\n\t\t\t      N, Acc, F@_1, F@_2, TrUserData) ->\n    Length = X bsl N + Acc,\n    <<_:Length/binary, Rest2/binary>> = Rest,\n    dfp_read_field_def_feature(Rest2, 0, 0, F@_1, F@_2,\n\t\t\t       TrUserData).\n\nskip_group_feature(Bin, FNum, Z2, F@_1, F@_2,\n\t\t   TrUserData) ->\n    {_, Rest} = read_group(Bin, FNum),\n    dfp_read_field_def_feature(Rest, 0, Z2, F@_1, F@_2,\n\t\t\t       TrUserData).\n\nskip_32_feature(<<_:32, Rest/binary>>, Z1, Z2, F@_1,\n\t\tF@_2, TrUserData) ->\n    dfp_read_field_def_feature(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t       TrUserData).\n\nskip_64_feature(<<_:64, Rest/binary>>, Z1, Z2, F@_1,\n\t\tF@_2, TrUserData) ->\n    dfp_read_field_def_feature(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t       TrUserData).\n\ndecode_msg_route_note(Bin, TrUserData) ->\n    dfp_read_field_def_route_note(Bin, 0, 0,\n\t\t\t\t  id('$undef', TrUserData),\n\t\t\t\t  id(<<>>, TrUserData), TrUserData).\n\ndfp_read_field_def_route_note(<<10, Rest/binary>>, Z1,\n\t\t\t      Z2, F@_1, F@_2, TrUserData) ->\n    d_field_route_note_location(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t\tTrUserData);\ndfp_read_field_def_route_note(<<18, Rest/binary>>, Z1,\n\t\t\t      Z2, F@_1, F@_2, TrUserData) ->\n    d_field_route_note_message(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t       TrUserData);\ndfp_read_field_def_route_note(<<>>, 0, 0, F@_1, F@_2,\n\t\t\t      _) ->\n    S1 = #{message => F@_2},\n    if F@_1 == '$undef' -> S1;\n       true -> S1#{location => F@_1}\n    end;\ndfp_read_field_def_route_note(Other, Z1, Z2, F@_1, F@_2,\n\t\t\t      TrUserData) ->\n    dg_read_field_def_route_note(Other, Z1, Z2, F@_1, F@_2,\n\t\t\t\t TrUserData).\n\ndg_read_field_def_route_note(<<1:1, X:7, Rest/binary>>,\n\t\t\t     N, Acc, F@_1, F@_2, TrUserData)\n    when N < 32 - 7 ->\n    dg_read_field_def_route_note(Rest, N + 7, X bsl N + Acc,\n\t\t\t\t F@_1, F@_2, TrUserData);\ndg_read_field_def_route_note(<<0:1, X:7, Rest/binary>>,\n\t\t\t     N, Acc, F@_1, F@_2, TrUserData) ->\n    Key = X bsl N + Acc,\n    case Key of\n      10 ->\n\t  d_field_route_note_location(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t      TrUserData);\n      18 ->\n\t  d_field_route_note_message(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t     TrUserData);\n      _ ->\n\t  case Key band 7 of\n\t    0 ->\n\t\tskip_varint_route_note(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t       TrUserData);\n\t    1 ->\n\t\tskip_64_route_note(Rest, 0, 0, F@_1, F@_2, TrUserData);\n\t    2 ->\n\t\tskip_length_delimited_route_note(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t\t\t TrUserData);\n\t    3 ->\n\t\tskip_group_route_note(Rest, Key bsr 3, 0, F@_1, F@_2,\n\t\t\t\t      TrUserData);\n\t    5 ->\n\t\tskip_32_route_note(Rest, 0, 0, F@_1, F@_2, TrUserData)\n\t  end\n    end;\ndg_read_field_def_route_note(<<>>, 0, 0, F@_1, F@_2,\n\t\t\t     _) ->\n    S1 = #{message => F@_2},\n    if F@_1 == '$undef' -> S1;\n       true -> S1#{location => F@_1}\n    end.\n\nd_field_route_note_location(<<1:1, X:7, Rest/binary>>,\n\t\t\t    N, Acc, F@_1, F@_2, TrUserData)\n    when N < 57 ->\n    d_field_route_note_location(Rest, N + 7, X bsl N + Acc,\n\t\t\t\tF@_1, F@_2, TrUserData);\nd_field_route_note_location(<<0:1, X:7, Rest/binary>>,\n\t\t\t    N, Acc, Prev, F@_2, TrUserData) ->\n    {NewFValue, RestF} = begin\n\t\t\t   Len = X bsl N + Acc,\n\t\t\t   <<Bs:Len/binary, Rest2/binary>> = Rest,\n\t\t\t   {id(decode_msg_point(Bs, TrUserData), TrUserData),\n\t\t\t    Rest2}\n\t\t\t end,\n    dfp_read_field_def_route_note(RestF, 0, 0,\n\t\t\t\t  if Prev == '$undef' -> NewFValue;\n\t\t\t\t     true ->\n\t\t\t\t\t merge_msg_point(Prev, NewFValue,\n\t\t\t\t\t\t\t TrUserData)\n\t\t\t\t  end,\n\t\t\t\t  F@_2, TrUserData).\n\nd_field_route_note_message(<<1:1, X:7, Rest/binary>>, N,\n\t\t\t   Acc, F@_1, F@_2, TrUserData)\n    when N < 57 ->\n    d_field_route_note_message(Rest, N + 7, X bsl N + Acc,\n\t\t\t       F@_1, F@_2, TrUserData);\nd_field_route_note_message(<<0:1, X:7, Rest/binary>>, N,\n\t\t\t   Acc, F@_1, _, TrUserData) ->\n    {NewFValue, RestF} = begin\n\t\t\t   Len = X bsl N + Acc,\n\t\t\t   <<Bytes:Len/binary, Rest2/binary>> = Rest,\n\t\t\t   {id(binary:copy(Bytes), TrUserData), Rest2}\n\t\t\t end,\n    dfp_read_field_def_route_note(RestF, 0, 0, F@_1,\n\t\t\t\t  NewFValue, TrUserData).\n\nskip_varint_route_note(<<1:1, _:7, Rest/binary>>, Z1,\n\t\t       Z2, F@_1, F@_2, TrUserData) ->\n    skip_varint_route_note(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t   TrUserData);\nskip_varint_route_note(<<0:1, _:7, Rest/binary>>, Z1,\n\t\t       Z2, F@_1, F@_2, TrUserData) ->\n    dfp_read_field_def_route_note(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t\t  TrUserData).\n\nskip_length_delimited_route_note(<<1:1, X:7,\n\t\t\t\t   Rest/binary>>,\n\t\t\t\t N, Acc, F@_1, F@_2, TrUserData)\n    when N < 57 ->\n    skip_length_delimited_route_note(Rest, N + 7,\n\t\t\t\t     X bsl N + Acc, F@_1, F@_2, TrUserData);\nskip_length_delimited_route_note(<<0:1, X:7,\n\t\t\t\t   Rest/binary>>,\n\t\t\t\t N, Acc, F@_1, F@_2, TrUserData) ->\n    Length = X bsl N + Acc,\n    <<_:Length/binary, Rest2/binary>> = Rest,\n    dfp_read_field_def_route_note(Rest2, 0, 0, F@_1, F@_2,\n\t\t\t\t  TrUserData).\n\nskip_group_route_note(Bin, FNum, Z2, F@_1, F@_2,\n\t\t      TrUserData) ->\n    {_, Rest} = read_group(Bin, FNum),\n    dfp_read_field_def_route_note(Rest, 0, Z2, F@_1, F@_2,\n\t\t\t\t  TrUserData).\n\nskip_32_route_note(<<_:32, Rest/binary>>, Z1, Z2, F@_1,\n\t\t   F@_2, TrUserData) ->\n    dfp_read_field_def_route_note(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t\t  TrUserData).\n\nskip_64_route_note(<<_:64, Rest/binary>>, Z1, Z2, F@_1,\n\t\t   F@_2, TrUserData) ->\n    dfp_read_field_def_route_note(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t\t  TrUserData).\n\ndecode_msg_route_summary(Bin, TrUserData) ->\n    dfp_read_field_def_route_summary(Bin, 0, 0,\n\t\t\t\t     id(0, TrUserData), id(0, TrUserData),\n\t\t\t\t     id(0, TrUserData), id(0, TrUserData),\n\t\t\t\t     TrUserData).\n\ndfp_read_field_def_route_summary(<<8, Rest/binary>>, Z1,\n\t\t\t\t Z2, F@_1, F@_2, F@_3, F@_4, TrUserData) ->\n    d_field_route_summary_point_count(Rest, Z1, Z2, F@_1,\n\t\t\t\t      F@_2, F@_3, F@_4, TrUserData);\ndfp_read_field_def_route_summary(<<16, Rest/binary>>,\n\t\t\t\t Z1, Z2, F@_1, F@_2, F@_3, F@_4, TrUserData) ->\n    d_field_route_summary_feature_count(Rest, Z1, Z2, F@_1,\n\t\t\t\t\tF@_2, F@_3, F@_4, TrUserData);\ndfp_read_field_def_route_summary(<<24, Rest/binary>>,\n\t\t\t\t Z1, Z2, F@_1, F@_2, F@_3, F@_4, TrUserData) ->\n    d_field_route_summary_distance(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t\t   F@_3, F@_4, TrUserData);\ndfp_read_field_def_route_summary(<<32, Rest/binary>>,\n\t\t\t\t Z1, Z2, F@_1, F@_2, F@_3, F@_4, TrUserData) ->\n    d_field_route_summary_elapsed_time(Rest, Z1, Z2, F@_1,\n\t\t\t\t       F@_2, F@_3, F@_4, TrUserData);\ndfp_read_field_def_route_summary(<<>>, 0, 0, F@_1, F@_2,\n\t\t\t\t F@_3, F@_4, _) ->\n    #{point_count => F@_1, feature_count => F@_2,\n      distance => F@_3, elapsed_time => F@_4};\ndfp_read_field_def_route_summary(Other, Z1, Z2, F@_1,\n\t\t\t\t F@_2, F@_3, F@_4, TrUserData) ->\n    dg_read_field_def_route_summary(Other, Z1, Z2, F@_1,\n\t\t\t\t    F@_2, F@_3, F@_4, TrUserData).\n\ndg_read_field_def_route_summary(<<1:1, X:7,\n\t\t\t\t  Rest/binary>>,\n\t\t\t\tN, Acc, F@_1, F@_2, F@_3, F@_4, TrUserData)\n    when N < 32 - 7 ->\n    dg_read_field_def_route_summary(Rest, N + 7,\n\t\t\t\t    X bsl N + Acc, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t    TrUserData);\ndg_read_field_def_route_summary(<<0:1, X:7,\n\t\t\t\t  Rest/binary>>,\n\t\t\t\tN, Acc, F@_1, F@_2, F@_3, F@_4, TrUserData) ->\n    Key = X bsl N + Acc,\n    case Key of\n      8 ->\n\t  d_field_route_summary_point_count(Rest, 0, 0, F@_1,\n\t\t\t\t\t    F@_2, F@_3, F@_4, TrUserData);\n      16 ->\n\t  d_field_route_summary_feature_count(Rest, 0, 0, F@_1,\n\t\t\t\t\t      F@_2, F@_3, F@_4, TrUserData);\n      24 ->\n\t  d_field_route_summary_distance(Rest, 0, 0, F@_1, F@_2,\n\t\t\t\t\t F@_3, F@_4, TrUserData);\n      32 ->\n\t  d_field_route_summary_elapsed_time(Rest, 0, 0, F@_1,\n\t\t\t\t\t     F@_2, F@_3, F@_4, TrUserData);\n      _ ->\n\t  case Key band 7 of\n\t    0 ->\n\t\tskip_varint_route_summary(Rest, 0, 0, F@_1, F@_2, F@_3,\n\t\t\t\t\t  F@_4, TrUserData);\n\t    1 ->\n\t\tskip_64_route_summary(Rest, 0, 0, F@_1, F@_2, F@_3,\n\t\t\t\t      F@_4, TrUserData);\n\t    2 ->\n\t\tskip_length_delimited_route_summary(Rest, 0, 0, F@_1,\n\t\t\t\t\t\t    F@_2, F@_3, F@_4,\n\t\t\t\t\t\t    TrUserData);\n\t    3 ->\n\t\tskip_group_route_summary(Rest, Key bsr 3, 0, F@_1, F@_2,\n\t\t\t\t\t F@_3, F@_4, TrUserData);\n\t    5 ->\n\t\tskip_32_route_summary(Rest, 0, 0, F@_1, F@_2, F@_3,\n\t\t\t\t      F@_4, TrUserData)\n\t  end\n    end;\ndg_read_field_def_route_summary(<<>>, 0, 0, F@_1, F@_2,\n\t\t\t\tF@_3, F@_4, _) ->\n    #{point_count => F@_1, feature_count => F@_2,\n      distance => F@_3, elapsed_time => F@_4}.\n\nd_field_route_summary_point_count(<<1:1, X:7,\n\t\t\t\t    Rest/binary>>,\n\t\t\t\t  N, Acc, F@_1, F@_2, F@_3, F@_4, TrUserData)\n    when N < 57 ->\n    d_field_route_summary_point_count(Rest, N + 7,\n\t\t\t\t      X bsl N + Acc, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t      TrUserData);\nd_field_route_summary_point_count(<<0:1, X:7,\n\t\t\t\t    Rest/binary>>,\n\t\t\t\t  N, Acc, _, F@_2, F@_3, F@_4, TrUserData) ->\n    {NewFValue, RestF} = {begin\n\t\t\t    <<Res:32/signed-native>> = <<(X bsl N +\n\t\t\t\t\t\t\t    Acc):32/unsigned-native>>,\n\t\t\t    id(Res, TrUserData)\n\t\t\t  end,\n\t\t\t  Rest},\n    dfp_read_field_def_route_summary(RestF, 0, 0, NewFValue,\n\t\t\t\t     F@_2, F@_3, F@_4, TrUserData).\n\nd_field_route_summary_feature_count(<<1:1, X:7,\n\t\t\t\t      Rest/binary>>,\n\t\t\t\t    N, Acc, F@_1, F@_2, F@_3, F@_4, TrUserData)\n    when N < 57 ->\n    d_field_route_summary_feature_count(Rest, N + 7,\n\t\t\t\t\tX bsl N + Acc, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\tTrUserData);\nd_field_route_summary_feature_count(<<0:1, X:7,\n\t\t\t\t      Rest/binary>>,\n\t\t\t\t    N, Acc, F@_1, _, F@_3, F@_4, TrUserData) ->\n    {NewFValue, RestF} = {begin\n\t\t\t    <<Res:32/signed-native>> = <<(X bsl N +\n\t\t\t\t\t\t\t    Acc):32/unsigned-native>>,\n\t\t\t    id(Res, TrUserData)\n\t\t\t  end,\n\t\t\t  Rest},\n    dfp_read_field_def_route_summary(RestF, 0, 0, F@_1,\n\t\t\t\t     NewFValue, F@_3, F@_4, TrUserData).\n\nd_field_route_summary_distance(<<1:1, X:7,\n\t\t\t\t Rest/binary>>,\n\t\t\t       N, Acc, F@_1, F@_2, F@_3, F@_4, TrUserData)\n    when N < 57 ->\n    d_field_route_summary_distance(Rest, N + 7,\n\t\t\t\t   X bsl N + Acc, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t   TrUserData);\nd_field_route_summary_distance(<<0:1, X:7,\n\t\t\t\t Rest/binary>>,\n\t\t\t       N, Acc, F@_1, F@_2, _, F@_4, TrUserData) ->\n    {NewFValue, RestF} = {begin\n\t\t\t    <<Res:32/signed-native>> = <<(X bsl N +\n\t\t\t\t\t\t\t    Acc):32/unsigned-native>>,\n\t\t\t    id(Res, TrUserData)\n\t\t\t  end,\n\t\t\t  Rest},\n    dfp_read_field_def_route_summary(RestF, 0, 0, F@_1,\n\t\t\t\t     F@_2, NewFValue, F@_4, TrUserData).\n\nd_field_route_summary_elapsed_time(<<1:1, X:7,\n\t\t\t\t     Rest/binary>>,\n\t\t\t\t   N, Acc, F@_1, F@_2, F@_3, F@_4, TrUserData)\n    when N < 57 ->\n    d_field_route_summary_elapsed_time(Rest, N + 7,\n\t\t\t\t       X bsl N + Acc, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t       TrUserData);\nd_field_route_summary_elapsed_time(<<0:1, X:7,\n\t\t\t\t     Rest/binary>>,\n\t\t\t\t   N, Acc, F@_1, F@_2, F@_3, _, TrUserData) ->\n    {NewFValue, RestF} = {begin\n\t\t\t    <<Res:32/signed-native>> = <<(X bsl N +\n\t\t\t\t\t\t\t    Acc):32/unsigned-native>>,\n\t\t\t    id(Res, TrUserData)\n\t\t\t  end,\n\t\t\t  Rest},\n    dfp_read_field_def_route_summary(RestF, 0, 0, F@_1,\n\t\t\t\t     F@_2, F@_3, NewFValue, TrUserData).\n\nskip_varint_route_summary(<<1:1, _:7, Rest/binary>>, Z1,\n\t\t\t  Z2, F@_1, F@_2, F@_3, F@_4, TrUserData) ->\n    skip_varint_route_summary(Rest, Z1, Z2, F@_1, F@_2,\n\t\t\t      F@_3, F@_4, TrUserData);\nskip_varint_route_summary(<<0:1, _:7, Rest/binary>>, Z1,\n\t\t\t  Z2, F@_1, F@_2, F@_3, F@_4, TrUserData) ->\n    dfp_read_field_def_route_summary(Rest, Z1, Z2, F@_1,\n\t\t\t\t     F@_2, F@_3, F@_4, TrUserData).\n\nskip_length_delimited_route_summary(<<1:1, X:7,\n\t\t\t\t      Rest/binary>>,\n\t\t\t\t    N, Acc, F@_1, F@_2, F@_3, F@_4, TrUserData)\n    when N < 57 ->\n    skip_length_delimited_route_summary(Rest, N + 7,\n\t\t\t\t\tX bsl N + Acc, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t\tTrUserData);\nskip_length_delimited_route_summary(<<0:1, X:7,\n\t\t\t\t      Rest/binary>>,\n\t\t\t\t    N, Acc, F@_1, F@_2, F@_3, F@_4,\n\t\t\t\t    TrUserData) ->\n    Length = X bsl N + Acc,\n    <<_:Length/binary, Rest2/binary>> = Rest,\n    dfp_read_field_def_route_summary(Rest2, 0, 0, F@_1,\n\t\t\t\t     F@_2, F@_3, F@_4, TrUserData).\n\nskip_group_route_summary(Bin, FNum, Z2, F@_1, F@_2,\n\t\t\t F@_3, F@_4, TrUserData) ->\n    {_, Rest} = read_group(Bin, FNum),\n    dfp_read_field_def_route_summary(Rest, 0, Z2, F@_1,\n\t\t\t\t     F@_2, F@_3, F@_4, TrUserData).\n\nskip_32_route_summary(<<_:32, Rest/binary>>, Z1, Z2,\n\t\t      F@_1, F@_2, F@_3, F@_4, TrUserData) ->\n    dfp_read_field_def_route_summary(Rest, Z1, Z2, F@_1,\n\t\t\t\t     F@_2, F@_3, F@_4, TrUserData).\n\nskip_64_route_summary(<<_:64, Rest/binary>>, Z1, Z2,\n\t\t      F@_1, F@_2, F@_3, F@_4, TrUserData) ->\n    dfp_read_field_def_route_summary(Rest, Z1, Z2, F@_1,\n\t\t\t\t     F@_2, F@_3, F@_4, TrUserData).\n\nread_group(Bin, FieldNum) ->\n    {NumBytes, EndTagLen} = read_gr_b(Bin, 0, 0, 0, 0, FieldNum),\n    <<Group:NumBytes/binary, _:EndTagLen/binary, Rest/binary>> = Bin,\n    {Group, Rest}.\n\n%% Like skipping over fields, but record the total length,\n%% Each field is <(FieldNum bsl 3) bor FieldType> ++ <FieldValue>\n%% Record the length because varints may be non-optimally encoded.\n%%\n%% Groups can be nested, but assume the same FieldNum cannot be nested\n%% because group field numbers are shared with the rest of the fields\n%% numbers. Thus we can search just for an group-end with the same\n%% field number.\n%%\n%% (The only time the same group field number could occur would\n%% be in a nested sub message, but then it would be inside a\n%% length-delimited entry, which we skip-read by length.)\nread_gr_b(<<1:1, X:7, Tl/binary>>, N, Acc, NumBytes, TagLen, FieldNum)\n  when N < (32-7) ->\n    read_gr_b(Tl, N+7, X bsl N + Acc, NumBytes, TagLen+1, FieldNum);\nread_gr_b(<<0:1, X:7, Tl/binary>>, N, Acc, NumBytes, TagLen,\n          FieldNum) ->\n    Key = X bsl N + Acc,\n    TagLen1 = TagLen + 1,\n    case {Key bsr 3, Key band 7} of\n        {FieldNum, 4} -> % 4 = group_end\n            {NumBytes, TagLen1};\n        {_, 0} -> % 0 = varint\n            read_gr_vi(Tl, 0, NumBytes + TagLen1, FieldNum);\n        {_, 1} -> % 1 = bits64\n            <<_:64, Tl2/binary>> = Tl,\n            read_gr_b(Tl2, 0, 0, NumBytes + TagLen1 + 8, 0, FieldNum);\n        {_, 2} -> % 2 = length_delimited\n            read_gr_ld(Tl, 0, 0, NumBytes + TagLen1, FieldNum);\n        {_, 3} -> % 3 = group_start\n            read_gr_b(Tl, 0, 0, NumBytes + TagLen1, 0, FieldNum);\n        {_, 4} -> % 4 = group_end\n            read_gr_b(Tl, 0, 0, NumBytes + TagLen1, 0, FieldNum);\n        {_, 5} -> % 5 = bits32\n            <<_:32, Tl2/binary>> = Tl,\n            read_gr_b(Tl2, 0, 0, NumBytes + TagLen1 + 4, 0, FieldNum)\n    end.\n\nread_gr_vi(<<1:1, _:7, Tl/binary>>, N, NumBytes, FieldNum)\n  when N < (64-7) ->\n    read_gr_vi(Tl, N+7, NumBytes+1, FieldNum);\nread_gr_vi(<<0:1, _:7, Tl/binary>>, _, NumBytes, FieldNum) ->\n    read_gr_b(Tl, 0, 0, NumBytes+1, 0, FieldNum).\n\nread_gr_ld(<<1:1, X:7, Tl/binary>>, N, Acc, NumBytes, FieldNum)\n  when N < (64-7) ->\n    read_gr_ld(Tl, N+7, X bsl N + Acc, NumBytes+1, FieldNum);\nread_gr_ld(<<0:1, X:7, Tl/binary>>, N, Acc, NumBytes, FieldNum) ->\n    Len = X bsl N + Acc,\n    NumBytes1 = NumBytes + 1,\n    <<_:Len/binary, Tl2/binary>> = Tl,\n    read_gr_b(Tl2, 0, 0, NumBytes1 + Len, 0, FieldNum).\n\nmerge_msgs(Prev, New, MsgName) when is_atom(MsgName) ->\n    merge_msgs(Prev, New, MsgName, []).\n\nmerge_msgs(Prev, New, MsgName, Opts) ->\n    TrUserData = proplists:get_value(user_data, Opts),\n    case MsgName of\n      empty -> merge_msg_empty(Prev, New, TrUserData);\n      point -> merge_msg_point(Prev, New, TrUserData);\n      rectangle -> merge_msg_rectangle(Prev, New, TrUserData);\n      feature -> merge_msg_feature(Prev, New, TrUserData);\n      route_note ->\n\t  merge_msg_route_note(Prev, New, TrUserData);\n      route_summary ->\n\t  merge_msg_route_summary(Prev, New, TrUserData)\n    end.\n\n-compile({nowarn_unused_function,merge_msg_empty/3}).\nmerge_msg_empty(_Prev, New, _TrUserData) -> New.\n\n-compile({nowarn_unused_function,merge_msg_point/3}).\nmerge_msg_point(PMsg, NMsg, _) ->\n    S1 = #{},\n    S2 = case {PMsg, NMsg} of\n\t   {_, #{latitude := NFlatitude}} ->\n\t       S1#{latitude => NFlatitude};\n\t   {#{latitude := PFlatitude}, _} ->\n\t       S1#{latitude => PFlatitude};\n\t   _ -> S1\n\t end,\n    case {PMsg, NMsg} of\n      {_, #{longitude := NFlongitude}} ->\n\t  S2#{longitude => NFlongitude};\n      {#{longitude := PFlongitude}, _} ->\n\t  S2#{longitude => PFlongitude};\n      _ -> S2\n    end.\n\n-compile({nowarn_unused_function,merge_msg_rectangle/3}).\nmerge_msg_rectangle(PMsg, NMsg, TrUserData) ->\n    S1 = #{},\n    S2 = case {PMsg, NMsg} of\n\t   {#{lo := PFlo}, #{lo := NFlo}} ->\n\t       S1#{lo => merge_msg_point(PFlo, NFlo, TrUserData)};\n\t   {_, #{lo := NFlo}} -> S1#{lo => NFlo};\n\t   {#{lo := PFlo}, _} -> S1#{lo => PFlo};\n\t   {_, _} -> S1\n\t end,\n    case {PMsg, NMsg} of\n      {#{hi := PFhi}, #{hi := NFhi}} ->\n\t  S2#{hi => merge_msg_point(PFhi, NFhi, TrUserData)};\n      {_, #{hi := NFhi}} -> S2#{hi => NFhi};\n      {#{hi := PFhi}, _} -> S2#{hi => PFhi};\n      {_, _} -> S2\n    end.\n\n-compile({nowarn_unused_function,merge_msg_feature/3}).\nmerge_msg_feature(PMsg, NMsg, TrUserData) ->\n    S1 = #{},\n    S2 = case {PMsg, NMsg} of\n\t   {_, #{name := NFname}} -> S1#{name => NFname};\n\t   {#{name := PFname}, _} -> S1#{name => PFname};\n\t   _ -> S1\n\t end,\n    case {PMsg, NMsg} of\n      {#{location := PFlocation},\n       #{location := NFlocation}} ->\n\t  S2#{location =>\n\t\t  merge_msg_point(PFlocation, NFlocation, TrUserData)};\n      {_, #{location := NFlocation}} ->\n\t  S2#{location => NFlocation};\n      {#{location := PFlocation}, _} ->\n\t  S2#{location => PFlocation};\n      {_, _} -> S2\n    end.\n\n-compile({nowarn_unused_function,merge_msg_route_note/3}).\nmerge_msg_route_note(PMsg, NMsg, TrUserData) ->\n    S1 = #{},\n    S2 = case {PMsg, NMsg} of\n\t   {#{location := PFlocation},\n\t    #{location := NFlocation}} ->\n\t       S1#{location =>\n\t\t       merge_msg_point(PFlocation, NFlocation, TrUserData)};\n\t   {_, #{location := NFlocation}} ->\n\t       S1#{location => NFlocation};\n\t   {#{location := PFlocation}, _} ->\n\t       S1#{location => PFlocation};\n\t   {_, _} -> S1\n\t end,\n    case {PMsg, NMsg} of\n      {_, #{message := NFmessage}} ->\n\t  S2#{message => NFmessage};\n      {#{message := PFmessage}, _} ->\n\t  S2#{message => PFmessage};\n      _ -> S2\n    end.\n\n-compile({nowarn_unused_function,merge_msg_route_summary/3}).\nmerge_msg_route_summary(PMsg, NMsg, _) ->\n    S1 = #{},\n    S2 = case {PMsg, NMsg} of\n\t   {_, #{point_count := NFpoint_count}} ->\n\t       S1#{point_count => NFpoint_count};\n\t   {#{point_count := PFpoint_count}, _} ->\n\t       S1#{point_count => PFpoint_count};\n\t   _ -> S1\n\t end,\n    S3 = case {PMsg, NMsg} of\n\t   {_, #{feature_count := NFfeature_count}} ->\n\t       S2#{feature_count => NFfeature_count};\n\t   {#{feature_count := PFfeature_count}, _} ->\n\t       S2#{feature_count => PFfeature_count};\n\t   _ -> S2\n\t end,\n    S4 = case {PMsg, NMsg} of\n\t   {_, #{distance := NFdistance}} ->\n\t       S3#{distance => NFdistance};\n\t   {#{distance := PFdistance}, _} ->\n\t       S3#{distance => PFdistance};\n\t   _ -> S3\n\t end,\n    case {PMsg, NMsg} of\n      {_, #{elapsed_time := NFelapsed_time}} ->\n\t  S4#{elapsed_time => NFelapsed_time};\n      {#{elapsed_time := PFelapsed_time}, _} ->\n\t  S4#{elapsed_time => PFelapsed_time};\n      _ -> S4\n    end.\n\n\nverify_msg(Msg, MsgName) when is_atom(MsgName) ->\n    verify_msg(Msg, MsgName, []).\n\nverify_msg(Msg, MsgName, Opts) ->\n    TrUserData = proplists:get_value(user_data, Opts),\n    case MsgName of\n      empty -> v_msg_empty(Msg, [MsgName], TrUserData);\n      point -> v_msg_point(Msg, [MsgName], TrUserData);\n      rectangle ->\n\t  v_msg_rectangle(Msg, [MsgName], TrUserData);\n      feature -> v_msg_feature(Msg, [MsgName], TrUserData);\n      route_note ->\n\t  v_msg_route_note(Msg, [MsgName], TrUserData);\n      route_summary ->\n\t  v_msg_route_summary(Msg, [MsgName], TrUserData);\n      _ -> mk_type_error(not_a_known_message, Msg, [])\n    end.\n\n\n-compile({nowarn_unused_function,v_msg_empty/3}).\n-dialyzer({nowarn_function,v_msg_empty/3}).\nv_msg_empty(#{} = M, Path, _) ->\n    lists:foreach(fun (OtherKey) ->\n\t\t\t  mk_type_error({extraneous_key, OtherKey}, M, Path)\n\t\t  end,\n\t\t  maps:keys(M)),\n    ok;\nv_msg_empty(M, Path, _TrUserData) when is_map(M) ->\n    mk_type_error({missing_fields, [] -- maps:keys(M),\n\t\t   empty},\n\t\t  M, Path);\nv_msg_empty(X, Path, _TrUserData) ->\n    mk_type_error({expected_msg, empty}, X, Path).\n\n-compile({nowarn_unused_function,v_msg_point/3}).\n-dialyzer({nowarn_function,v_msg_point/3}).\nv_msg_point(#{} = M, Path, TrUserData) ->\n    case M of\n      #{latitude := F1} ->\n\t  v_type_int32(F1, [latitude | Path], TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{longitude := F2} ->\n\t  v_type_int32(F2, [longitude | Path], TrUserData);\n      _ -> ok\n    end,\n    lists:foreach(fun (latitude) -> ok;\n\t\t      (longitude) -> ok;\n\t\t      (OtherKey) ->\n\t\t\t  mk_type_error({extraneous_key, OtherKey}, M, Path)\n\t\t  end,\n\t\t  maps:keys(M)),\n    ok;\nv_msg_point(M, Path, _TrUserData) when is_map(M) ->\n    mk_type_error({missing_fields, [] -- maps:keys(M),\n\t\t   point},\n\t\t  M, Path);\nv_msg_point(X, Path, _TrUserData) ->\n    mk_type_error({expected_msg, point}, X, Path).\n\n-compile({nowarn_unused_function,v_msg_rectangle/3}).\n-dialyzer({nowarn_function,v_msg_rectangle/3}).\nv_msg_rectangle(#{} = M, Path, TrUserData) ->\n    case M of\n      #{lo := F1} -> v_msg_point(F1, [lo | Path], TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{hi := F2} -> v_msg_point(F2, [hi | Path], TrUserData);\n      _ -> ok\n    end,\n    lists:foreach(fun (lo) -> ok;\n\t\t      (hi) -> ok;\n\t\t      (OtherKey) ->\n\t\t\t  mk_type_error({extraneous_key, OtherKey}, M, Path)\n\t\t  end,\n\t\t  maps:keys(M)),\n    ok;\nv_msg_rectangle(M, Path, _TrUserData) when is_map(M) ->\n    mk_type_error({missing_fields, [] -- maps:keys(M),\n\t\t   rectangle},\n\t\t  M, Path);\nv_msg_rectangle(X, Path, _TrUserData) ->\n    mk_type_error({expected_msg, rectangle}, X, Path).\n\n-compile({nowarn_unused_function,v_msg_feature/3}).\n-dialyzer({nowarn_function,v_msg_feature/3}).\nv_msg_feature(#{} = M, Path, TrUserData) ->\n    case M of\n      #{name := F1} ->\n\t  v_type_string(F1, [name | Path], TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{location := F2} ->\n\t  v_msg_point(F2, [location | Path], TrUserData);\n      _ -> ok\n    end,\n    lists:foreach(fun (name) -> ok;\n\t\t      (location) -> ok;\n\t\t      (OtherKey) ->\n\t\t\t  mk_type_error({extraneous_key, OtherKey}, M, Path)\n\t\t  end,\n\t\t  maps:keys(M)),\n    ok;\nv_msg_feature(M, Path, _TrUserData) when is_map(M) ->\n    mk_type_error({missing_fields, [] -- maps:keys(M),\n\t\t   feature},\n\t\t  M, Path);\nv_msg_feature(X, Path, _TrUserData) ->\n    mk_type_error({expected_msg, feature}, X, Path).\n\n-compile({nowarn_unused_function,v_msg_route_note/3}).\n-dialyzer({nowarn_function,v_msg_route_note/3}).\nv_msg_route_note(#{} = M, Path, TrUserData) ->\n    case M of\n      #{location := F1} ->\n\t  v_msg_point(F1, [location | Path], TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{message := F2} ->\n\t  v_type_string(F2, [message | Path], TrUserData);\n      _ -> ok\n    end,\n    lists:foreach(fun (location) -> ok;\n\t\t      (message) -> ok;\n\t\t      (OtherKey) ->\n\t\t\t  mk_type_error({extraneous_key, OtherKey}, M, Path)\n\t\t  end,\n\t\t  maps:keys(M)),\n    ok;\nv_msg_route_note(M, Path, _TrUserData) when is_map(M) ->\n    mk_type_error({missing_fields, [] -- maps:keys(M),\n\t\t   route_note},\n\t\t  M, Path);\nv_msg_route_note(X, Path, _TrUserData) ->\n    mk_type_error({expected_msg, route_note}, X, Path).\n\n-compile({nowarn_unused_function,v_msg_route_summary/3}).\n-dialyzer({nowarn_function,v_msg_route_summary/3}).\nv_msg_route_summary(#{} = M, Path, TrUserData) ->\n    case M of\n      #{point_count := F1} ->\n\t  v_type_int32(F1, [point_count | Path], TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{feature_count := F2} ->\n\t  v_type_int32(F2, [feature_count | Path], TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{distance := F3} ->\n\t  v_type_int32(F3, [distance | Path], TrUserData);\n      _ -> ok\n    end,\n    case M of\n      #{elapsed_time := F4} ->\n\t  v_type_int32(F4, [elapsed_time | Path], TrUserData);\n      _ -> ok\n    end,\n    lists:foreach(fun (point_count) -> ok;\n\t\t      (feature_count) -> ok;\n\t\t      (distance) -> ok;\n\t\t      (elapsed_time) -> ok;\n\t\t      (OtherKey) ->\n\t\t\t  mk_type_error({extraneous_key, OtherKey}, M, Path)\n\t\t  end,\n\t\t  maps:keys(M)),\n    ok;\nv_msg_route_summary(M, Path, _TrUserData)\n    when is_map(M) ->\n    mk_type_error({missing_fields, [] -- maps:keys(M),\n\t\t   route_summary},\n\t\t  M, Path);\nv_msg_route_summary(X, Path, _TrUserData) ->\n    mk_type_error({expected_msg, route_summary}, X, Path).\n\n-compile({nowarn_unused_function,v_type_int32/3}).\n-dialyzer({nowarn_function,v_type_int32/3}).\nv_type_int32(N, _Path, _TrUserData)\n    when -2147483648 =< N, N =< 2147483647 ->\n    ok;\nv_type_int32(N, Path, _TrUserData) when is_integer(N) ->\n    mk_type_error({value_out_of_range, int32, signed, 32},\n\t\t  N, Path);\nv_type_int32(X, Path, _TrUserData) ->\n    mk_type_error({bad_integer, int32, signed, 32}, X,\n\t\t  Path).\n\n-compile({nowarn_unused_function,v_type_string/3}).\n-dialyzer({nowarn_function,v_type_string/3}).\nv_type_string(S, Path, _TrUserData)\n    when is_list(S); is_binary(S) ->\n    try unicode:characters_to_binary(S) of\n      B when is_binary(B) -> ok;\n      {error, _, _} ->\n\t  mk_type_error(bad_unicode_string, S, Path)\n    catch\n      error:badarg ->\n\t  mk_type_error(bad_unicode_string, S, Path)\n    end;\nv_type_string(X, Path, _TrUserData) ->\n    mk_type_error(bad_unicode_string, X, Path).\n\n-compile({nowarn_unused_function,mk_type_error/3}).\n-spec mk_type_error(_, _, list()) -> no_return().\nmk_type_error(Error, ValueSeen, Path) ->\n    Path2 = prettify_path(Path),\n    erlang:error({gpb_type_error,\n\t\t  {Error, [{value, ValueSeen}, {path, Path2}]}}).\n\n\n-compile({nowarn_unused_function,prettify_path/1}).\n-dialyzer({nowarn_function,prettify_path/1}).\nprettify_path([]) -> top_level;\nprettify_path(PathR) ->\n    list_to_atom(lists:append(lists:join(\".\",\n\t\t\t\t\t lists:map(fun atom_to_list/1,\n\t\t\t\t\t\t   lists:reverse(PathR))))).\n\n\n-compile({nowarn_unused_function,id/2}).\n-compile({inline,id/2}).\nid(X, _TrUserData) -> X.\n\n-compile({nowarn_unused_function,v_ok/3}).\n-compile({inline,v_ok/3}).\nv_ok(_Value, _Path, _TrUserData) -> ok.\n\n-compile({nowarn_unused_function,m_overwrite/3}).\n-compile({inline,m_overwrite/3}).\nm_overwrite(_Prev, New, _TrUserData) -> New.\n\n-compile({nowarn_unused_function,cons/3}).\n-compile({inline,cons/3}).\ncons(Elem, Acc, _TrUserData) -> [Elem | Acc].\n\n-compile({nowarn_unused_function,lists_reverse/2}).\n-compile({inline,lists_reverse/2}).\n'lists_reverse'(L, _TrUserData) -> lists:reverse(L).\n-compile({nowarn_unused_function,'erlang_++'/3}).\n-compile({inline,'erlang_++'/3}).\n'erlang_++'(A, B, _TrUserData) -> A ++ B.\n\nget_msg_defs() ->\n    [{{msg, empty}, []},\n     {{msg, point},\n      [#{name => latitude, fnum => 1, rnum => 2,\n\t type => int32, occurrence => optional, opts => []},\n       #{name => longitude, fnum => 2, rnum => 3,\n\t type => int32, occurrence => optional, opts => []}]},\n     {{msg, rectangle},\n      [#{name => lo, fnum => 1, rnum => 2,\n\t type => {msg, point}, occurrence => optional,\n\t opts => []},\n       #{name => hi, fnum => 2, rnum => 3,\n\t type => {msg, point}, occurrence => optional,\n\t opts => []}]},\n     {{msg, feature},\n      [#{name => name, fnum => 1, rnum => 2, type => string,\n\t occurrence => optional, opts => []},\n       #{name => location, fnum => 2, rnum => 3,\n\t type => {msg, point}, occurrence => optional,\n\t opts => []}]},\n     {{msg, route_note},\n      [#{name => location, fnum => 1, rnum => 2,\n\t type => {msg, point}, occurrence => optional,\n\t opts => []},\n       #{name => message, fnum => 2, rnum => 3, type => string,\n\t occurrence => optional, opts => []}]},\n     {{msg, route_summary},\n      [#{name => point_count, fnum => 1, rnum => 2,\n\t type => int32, occurrence => optional, opts => []},\n       #{name => feature_count, fnum => 2, rnum => 3,\n\t type => int32, occurrence => optional, opts => []},\n       #{name => distance, fnum => 3, rnum => 4, type => int32,\n\t occurrence => optional, opts => []},\n       #{name => elapsed_time, fnum => 4, rnum => 5,\n\t type => int32, occurrence => optional, opts => []}]}].\n\n\nget_msg_names() ->\n    [empty, point, rectangle, feature, route_note,\n     route_summary].\n\n\nget_group_names() -> [].\n\n\nget_msg_or_group_names() ->\n    [empty, point, rectangle, feature, route_note,\n     route_summary].\n\n\nget_enum_names() -> [].\n\n\nfetch_msg_def(MsgName) ->\n    case find_msg_def(MsgName) of\n      Fs when is_list(Fs) -> Fs;\n      error -> erlang:error({no_such_msg, MsgName})\n    end.\n\n\n-spec fetch_enum_def(_) -> no_return().\nfetch_enum_def(EnumName) ->\n    erlang:error({no_such_enum, EnumName}).\n\n\nfind_msg_def(empty) -> [];\nfind_msg_def(point) ->\n    [#{name => latitude, fnum => 1, rnum => 2,\n       type => int32, occurrence => optional, opts => []},\n     #{name => longitude, fnum => 2, rnum => 3,\n       type => int32, occurrence => optional, opts => []}];\nfind_msg_def(rectangle) ->\n    [#{name => lo, fnum => 1, rnum => 2,\n       type => {msg, point}, occurrence => optional,\n       opts => []},\n     #{name => hi, fnum => 2, rnum => 3,\n       type => {msg, point}, occurrence => optional,\n       opts => []}];\nfind_msg_def(feature) ->\n    [#{name => name, fnum => 1, rnum => 2, type => string,\n       occurrence => optional, opts => []},\n     #{name => location, fnum => 2, rnum => 3,\n       type => {msg, point}, occurrence => optional,\n       opts => []}];\nfind_msg_def(route_note) ->\n    [#{name => location, fnum => 1, rnum => 2,\n       type => {msg, point}, occurrence => optional,\n       opts => []},\n     #{name => message, fnum => 2, rnum => 3, type => string,\n       occurrence => optional, opts => []}];\nfind_msg_def(route_summary) ->\n    [#{name => point_count, fnum => 1, rnum => 2,\n       type => int32, occurrence => optional, opts => []},\n     #{name => feature_count, fnum => 2, rnum => 3,\n       type => int32, occurrence => optional, opts => []},\n     #{name => distance, fnum => 3, rnum => 4, type => int32,\n       occurrence => optional, opts => []},\n     #{name => elapsed_time, fnum => 4, rnum => 5,\n       type => int32, occurrence => optional, opts => []}];\nfind_msg_def(_) -> error.\n\n\nfind_enum_def(_) -> error.\n\n\n-spec enum_symbol_by_value(_, _) -> no_return().\nenum_symbol_by_value(E, V) ->\n    erlang:error({no_enum_defs, E, V}).\n\n\n-spec enum_value_by_symbol(_, _) -> no_return().\nenum_value_by_symbol(E, V) ->\n    erlang:error({no_enum_defs, E, V}).\n\n\n\nget_service_names() -> ['routeguide.RouteGuide'].\n\n\nget_service_def('routeguide.RouteGuide') ->\n    {{service, 'routeguide.RouteGuide'},\n     [#{name => 'GetFeature', input => point,\n\toutput => feature, input_stream => false,\n\toutput_stream => false, opts => []},\n      #{name => 'ListFeatures', input => rectangle,\n\toutput => feature, input_stream => false,\n\toutput_stream => true, opts => []},\n      #{name => 'RecordRoute', input => point,\n\toutput => route_summary, input_stream => true,\n\toutput_stream => false, opts => []},\n      #{name => 'RouteChat', input => route_note,\n\toutput => route_note, input_stream => true,\n\toutput_stream => true, opts => []},\n      #{name => 'GenerateError', input => empty,\n\toutput => empty, input_stream => false,\n\toutput_stream => false, opts => []},\n      #{name => 'StreamingGenerateError', input => empty,\n\toutput => empty, input_stream => false,\n\toutput_stream => true, opts => []}]};\nget_service_def(_) -> error.\n\n\nget_rpc_names('routeguide.RouteGuide') ->\n    ['GetFeature', 'ListFeatures', 'RecordRoute',\n     'RouteChat', 'GenerateError', 'StreamingGenerateError'];\nget_rpc_names(_) -> error.\n\n\nfind_rpc_def('routeguide.RouteGuide', RpcName) ->\n    'find_rpc_def_routeguide.RouteGuide'(RpcName);\nfind_rpc_def(_, _) -> error.\n\n\n'find_rpc_def_routeguide.RouteGuide'('GetFeature') ->\n    #{name => 'GetFeature', input => point,\n      output => feature, input_stream => false,\n      output_stream => false, opts => []};\n'find_rpc_def_routeguide.RouteGuide'('ListFeatures') ->\n    #{name => 'ListFeatures', input => rectangle,\n      output => feature, input_stream => false,\n      output_stream => true, opts => []};\n'find_rpc_def_routeguide.RouteGuide'('RecordRoute') ->\n    #{name => 'RecordRoute', input => point,\n      output => route_summary, input_stream => true,\n      output_stream => false, opts => []};\n'find_rpc_def_routeguide.RouteGuide'('RouteChat') ->\n    #{name => 'RouteChat', input => route_note,\n      output => route_note, input_stream => true,\n      output_stream => true, opts => []};\n'find_rpc_def_routeguide.RouteGuide'('GenerateError') ->\n    #{name => 'GenerateError', input => empty,\n      output => empty, input_stream => false,\n      output_stream => false, opts => []};\n'find_rpc_def_routeguide.RouteGuide'('StreamingGenerateError') ->\n    #{name => 'StreamingGenerateError', input => empty,\n      output => empty, input_stream => false,\n      output_stream => true, opts => []};\n'find_rpc_def_routeguide.RouteGuide'(_) -> error.\n\n\nfetch_rpc_def(ServiceName, RpcName) ->\n    case find_rpc_def(ServiceName, RpcName) of\n      Def when is_map(Def) -> Def;\n      error ->\n\t  erlang:error({no_such_rpc, ServiceName, RpcName})\n    end.\n\n\n%% Convert a a fully qualified (ie with package name) service name\n%% as a binary to a service name as an atom.\nfqbin_to_service_name(<<\"routeguide.RouteGuide\">>) ->\n    'routeguide.RouteGuide';\nfqbin_to_service_name(X) ->\n    error({gpb_error, {badservice, X}}).\n\n\n%% Convert a service name as an atom to a fully qualified\n%% (ie with package name) name as a binary.\nservice_name_to_fqbin('routeguide.RouteGuide') ->\n    <<\"routeguide.RouteGuide\">>;\nservice_name_to_fqbin(X) ->\n    error({gpb_error, {badservice, X}}).\n\n\n%% Convert a a fully qualified (ie with package name) service name\n%% and an rpc name, both as binaries to a service name and an rpc\n%% name, as atoms.\nfqbins_to_service_and_rpc_name(<<\"routeguide.RouteGuide\">>, <<\"GetFeature\">>) ->\n    {'routeguide.RouteGuide', 'GetFeature'};\nfqbins_to_service_and_rpc_name(<<\"routeguide.RouteGuide\">>, <<\"ListFeatures\">>) ->\n    {'routeguide.RouteGuide', 'ListFeatures'};\nfqbins_to_service_and_rpc_name(<<\"routeguide.RouteGuide\">>, <<\"RecordRoute\">>) ->\n    {'routeguide.RouteGuide', 'RecordRoute'};\nfqbins_to_service_and_rpc_name(<<\"routeguide.RouteGuide\">>, <<\"RouteChat\">>) ->\n    {'routeguide.RouteGuide', 'RouteChat'};\nfqbins_to_service_and_rpc_name(<<\"routeguide.RouteGuide\">>, <<\"GenerateError\">>) ->\n    {'routeguide.RouteGuide', 'GenerateError'};\nfqbins_to_service_and_rpc_name(<<\"routeguide.RouteGuide\">>, <<\"StreamingGenerateError\">>) ->\n    {'routeguide.RouteGuide', 'StreamingGenerateError'};\nfqbins_to_service_and_rpc_name(S, R) ->\n    error({gpb_error, {badservice_or_rpc, {S, R}}}).\n\n\n%% Convert a service name and an rpc name, both as atoms,\n%% to a fully qualified (ie with package name) service name and\n%% an rpc name as binaries.\nservice_and_rpc_name_to_fqbins('routeguide.RouteGuide',\n\t\t\t       'GetFeature') ->\n    {<<\"routeguide.RouteGuide\">>, <<\"GetFeature\">>};\nservice_and_rpc_name_to_fqbins('routeguide.RouteGuide',\n\t\t\t       'ListFeatures') ->\n    {<<\"routeguide.RouteGuide\">>, <<\"ListFeatures\">>};\nservice_and_rpc_name_to_fqbins('routeguide.RouteGuide',\n\t\t\t       'RecordRoute') ->\n    {<<\"routeguide.RouteGuide\">>, <<\"RecordRoute\">>};\nservice_and_rpc_name_to_fqbins('routeguide.RouteGuide',\n\t\t\t       'RouteChat') ->\n    {<<\"routeguide.RouteGuide\">>, <<\"RouteChat\">>};\nservice_and_rpc_name_to_fqbins('routeguide.RouteGuide',\n\t\t\t       'GenerateError') ->\n    {<<\"routeguide.RouteGuide\">>, <<\"GenerateError\">>};\nservice_and_rpc_name_to_fqbins('routeguide.RouteGuide',\n\t\t\t       'StreamingGenerateError') ->\n    {<<\"routeguide.RouteGuide\">>, <<\"StreamingGenerateError\">>};\nservice_and_rpc_name_to_fqbins(S, R) ->\n    error({gpb_error, {badservice_or_rpc, {S, R}}}).\n\n\nfqbin_to_msg_name(<<\"routeguide.Empty\">>) -> empty;\nfqbin_to_msg_name(<<\"routeguide.Point\">>) -> point;\nfqbin_to_msg_name(<<\"routeguide.Rectangle\">>) -> rectangle;\nfqbin_to_msg_name(<<\"routeguide.Feature\">>) -> feature;\nfqbin_to_msg_name(<<\"routeguide.RouteNote\">>) -> route_note;\nfqbin_to_msg_name(<<\"routeguide.RouteSummary\">>) -> route_summary;\nfqbin_to_msg_name(E) -> error({gpb_error, {badmsg, E}}).\n\n\nmsg_name_to_fqbin(empty) -> <<\"routeguide.Empty\">>;\nmsg_name_to_fqbin(point) -> <<\"routeguide.Point\">>;\nmsg_name_to_fqbin(rectangle) -> <<\"routeguide.Rectangle\">>;\nmsg_name_to_fqbin(feature) -> <<\"routeguide.Feature\">>;\nmsg_name_to_fqbin(route_note) -> <<\"routeguide.RouteNote\">>;\nmsg_name_to_fqbin(route_summary) -> <<\"routeguide.RouteSummary\">>;\nmsg_name_to_fqbin(E) -> error({gpb_error, {badmsg, E}}).\n\n\n-spec fqbin_to_enum_name(_) -> no_return().\nfqbin_to_enum_name(E) ->\n    error({gpb_error, {badenum, E}}).\n\n\n-spec enum_name_to_fqbin(_) -> no_return().\nenum_name_to_fqbin(E) ->\n    error({gpb_error, {badenum, E}}).\n\n\nget_package_name() -> routeguide.\n\n\n%% Whether or not the message names\n%% are prepended with package name or not.\nuses_packages() -> true.\n\n\nsource_basename() -> \"route_guide.proto\".\n\n\n%% Retrieve all proto file names, also imported ones.\n%% The order is top-down. The first element is always the main\n%% source file. The files are returned with extension,\n%% see get_all_proto_names/0 for a version that returns\n%% the basenames sans extension\nget_all_source_basenames() -> [\"route_guide.proto\"].\n\n\n%% Retrieve all proto file names, also imported ones.\n%% The order is top-down. The first element is always the main\n%% source file. The files are returned sans .proto extension,\n%% to make it easier to use them with the various get_xyz_containment\n%% functions.\nget_all_proto_names() -> [\"route_guide\"].\n\n\nget_msg_containment(\"route_guide\") ->\n    [empty, feature, point, rectangle, route_note,\n     route_summary];\nget_msg_containment(P) ->\n    error({gpb_error, {badproto, P}}).\n\n\nget_pkg_containment(\"route_guide\") -> routeguide;\nget_pkg_containment(P) ->\n    error({gpb_error, {badproto, P}}).\n\n\nget_service_containment(\"route_guide\") ->\n    ['routeguide.RouteGuide'];\nget_service_containment(P) ->\n    error({gpb_error, {badproto, P}}).\n\n\nget_rpc_containment(\"route_guide\") ->\n    [{'routeguide.RouteGuide', 'GetFeature'},\n     {'routeguide.RouteGuide', 'ListFeatures'},\n     {'routeguide.RouteGuide', 'RecordRoute'},\n     {'routeguide.RouteGuide', 'RouteChat'},\n     {'routeguide.RouteGuide', 'GenerateError'},\n     {'routeguide.RouteGuide', 'StreamingGenerateError'}];\nget_rpc_containment(P) ->\n    error({gpb_error, {badproto, P}}).\n\n\nget_enum_containment(\"route_guide\") -> [];\nget_enum_containment(P) ->\n    error({gpb_error, {badproto, P}}).\n\n\nget_proto_by_msg_name_as_fqbin(<<\"routeguide.Point\">>) ->\n    \"route_guide\";\nget_proto_by_msg_name_as_fqbin(<<\"routeguide.RouteNote\">>) ->\n    \"route_guide\";\nget_proto_by_msg_name_as_fqbin(<<\"routeguide.Rectangle\">>) ->\n    \"route_guide\";\nget_proto_by_msg_name_as_fqbin(<<\"routeguide.Feature\">>) ->\n    \"route_guide\";\nget_proto_by_msg_name_as_fqbin(<<\"routeguide.RouteSummary\">>) ->\n    \"route_guide\";\nget_proto_by_msg_name_as_fqbin(<<\"routeguide.Empty\">>) ->\n    \"route_guide\";\nget_proto_by_msg_name_as_fqbin(E) ->\n    error({gpb_error, {badmsg, E}}).\n\n\nget_proto_by_service_name_as_fqbin(<<\"routeguide.RouteGuide\">>) ->\n    \"route_guide\";\nget_proto_by_service_name_as_fqbin(E) ->\n    error({gpb_error, {badservice, E}}).\n\n\n-spec get_proto_by_enum_name_as_fqbin(_) -> no_return().\nget_proto_by_enum_name_as_fqbin(E) ->\n    error({gpb_error, {badenum, E}}).\n\n\nget_protos_by_pkg_name_as_fqbin(<<\"routeguide\">>) ->\n    [\"route_guide\"];\nget_protos_by_pkg_name_as_fqbin(E) ->\n    error({gpb_error, {badpkg, E}}).\n\n\ndescriptor() ->\n    <<10, 160, 6, 10, 28, 114, 111, 117, 116, 101, 103, 117,\n      105, 100, 101, 47, 114, 111, 117, 116, 101, 95, 103,\n      117, 105, 100, 101, 46, 112, 114, 111, 116, 111, 18, 10,\n      114, 111, 117, 116, 101, 103, 117, 105, 100, 101, 34, 7,\n      10, 5, 69, 109, 112, 116, 121, 34, 60, 10, 7, 70, 101,\n      97, 116, 117, 114, 101, 18, 12, 10, 4, 110, 97, 109,\n      101, 24, 1, 32, 1, 40, 9, 18, 35, 10, 8, 108, 111, 99,\n      97, 116, 105, 111, 110, 24, 2, 32, 1, 40, 11, 50, 17,\n      46, 114, 111, 117, 116, 101, 103, 117, 105, 100, 101,\n      46, 80, 111, 105, 110, 116, 34, 44, 10, 5, 80, 111, 105,\n      110, 116, 18, 16, 10, 8, 108, 97, 116, 105, 116, 117,\n      100, 101, 24, 1, 32, 1, 40, 5, 18, 17, 10, 9, 108, 111,\n      110, 103, 105, 116, 117, 100, 101, 24, 2, 32, 1, 40, 5,\n      34, 73, 10, 9, 82, 101, 99, 116, 97, 110, 103, 108, 101,\n      18, 29, 10, 2, 108, 111, 24, 1, 32, 1, 40, 11, 50, 17,\n      46, 114, 111, 117, 116, 101, 103, 117, 105, 100, 101,\n      46, 80, 111, 105, 110, 116, 18, 29, 10, 2, 104, 105, 24,\n      2, 32, 1, 40, 11, 50, 17, 46, 114, 111, 117, 116, 101,\n      103, 117, 105, 100, 101, 46, 80, 111, 105, 110, 116, 34,\n      65, 10, 9, 82, 111, 117, 116, 101, 78, 111, 116, 101,\n      18, 35, 10, 8, 108, 111, 99, 97, 116, 105, 111, 110, 24,\n      1, 32, 1, 40, 11, 50, 17, 46, 114, 111, 117, 116, 101,\n      103, 117, 105, 100, 101, 46, 80, 111, 105, 110, 116, 18,\n      15, 10, 7, 109, 101, 115, 115, 97, 103, 101, 24, 2, 32,\n      1, 40, 9, 34, 98, 10, 12, 82, 111, 117, 116, 101, 83,\n      117, 109, 109, 97, 114, 121, 18, 19, 10, 11, 112, 111,\n      105, 110, 116, 95, 99, 111, 117, 110, 116, 24, 1, 32, 1,\n      40, 5, 18, 21, 10, 13, 102, 101, 97, 116, 117, 114, 101,\n      95, 99, 111, 117, 110, 116, 24, 2, 32, 1, 40, 5, 18, 16,\n      10, 8, 100, 105, 115, 116, 97, 110, 99, 101, 24, 3, 32,\n      1, 40, 5, 18, 20, 10, 12, 101, 108, 97, 112, 115, 101,\n      100, 95, 116, 105, 109, 101, 24, 4, 32, 1, 40, 5, 50,\n      132, 3, 10, 10, 82, 111, 117, 116, 101, 71, 117, 105,\n      100, 101, 18, 56, 10, 10, 71, 101, 116, 70, 101, 97,\n      116, 117, 114, 101, 18, 17, 46, 114, 111, 117, 116, 101,\n      103, 117, 105, 100, 101, 46, 80, 111, 105, 110, 116, 26,\n      19, 46, 114, 111, 117, 116, 101, 103, 117, 105, 100,\n      101, 46, 70, 101, 97, 116, 117, 114, 101, 40, 0, 48, 0,\n      18, 62, 10, 12, 76, 105, 115, 116, 70, 101, 97, 116,\n      117, 114, 101, 115, 18, 21, 46, 114, 111, 117, 116, 101,\n      103, 117, 105, 100, 101, 46, 82, 101, 99, 116, 97, 110,\n      103, 108, 101, 26, 19, 46, 114, 111, 117, 116, 101, 103,\n      117, 105, 100, 101, 46, 70, 101, 97, 116, 117, 114, 101,\n      40, 0, 48, 0, 18, 62, 10, 11, 82, 101, 99, 111, 114,\n      100, 82, 111, 117, 116, 101, 18, 17, 46, 114, 111, 117,\n      116, 101, 103, 117, 105, 100, 101, 46, 80, 111, 105,\n      110, 116, 26, 24, 46, 114, 111, 117, 116, 101, 103, 117,\n      105, 100, 101, 46, 82, 111, 117, 116, 101, 83, 117, 109,\n      109, 97, 114, 121, 40, 0, 48, 0, 18, 61, 10, 9, 82, 111,\n      117, 116, 101, 67, 104, 97, 116, 18, 21, 46, 114, 111,\n      117, 116, 101, 103, 117, 105, 100, 101, 46, 82, 111,\n      117, 116, 101, 78, 111, 116, 101, 26, 21, 46, 114, 111,\n      117, 116, 101, 103, 117, 105, 100, 101, 46, 82, 111,\n      117, 116, 101, 78, 111, 116, 101, 40, 0, 48, 0, 18, 57,\n      10, 13, 71, 101, 110, 101, 114, 97, 116, 101, 69, 114,\n      114, 111, 114, 18, 17, 46, 114, 111, 117, 116, 101, 103,\n      117, 105, 100, 101, 46, 69, 109, 112, 116, 121, 26, 17,\n      46, 114, 111, 117, 116, 101, 103, 117, 105, 100, 101,\n      46, 69, 109, 112, 116, 121, 40, 0, 48, 0, 18, 66, 10,\n      22, 83, 116, 114, 101, 97, 109, 105, 110, 103, 71, 101,\n      110, 101, 114, 97, 116, 101, 69, 114, 114, 111, 114, 18,\n      17, 46, 114, 111, 117, 116, 101, 103, 117, 105, 100,\n      101, 46, 69, 109, 112, 116, 121, 26, 17, 46, 114, 111,\n      117, 116, 101, 103, 117, 105, 100, 101, 46, 69, 109,\n      112, 116, 121, 40, 0, 48, 0, 98, 6, 112, 114, 111, 116,\n      111, 51>>.\n\ndescriptor(\"route_guide\") ->\n    <<10, 28, 114, 111, 117, 116, 101, 103, 117, 105, 100,\n      101, 47, 114, 111, 117, 116, 101, 95, 103, 117, 105,\n      100, 101, 46, 112, 114, 111, 116, 111, 18, 10, 114, 111,\n      117, 116, 101, 103, 117, 105, 100, 101, 34, 7, 10, 5,\n      69, 109, 112, 116, 121, 34, 60, 10, 7, 70, 101, 97, 116,\n      117, 114, 101, 18, 12, 10, 4, 110, 97, 109, 101, 24, 1,\n      32, 1, 40, 9, 18, 35, 10, 8, 108, 111, 99, 97, 116, 105,\n      111, 110, 24, 2, 32, 1, 40, 11, 50, 17, 46, 114, 111,\n      117, 116, 101, 103, 117, 105, 100, 101, 46, 80, 111,\n      105, 110, 116, 34, 44, 10, 5, 80, 111, 105, 110, 116,\n      18, 16, 10, 8, 108, 97, 116, 105, 116, 117, 100, 101,\n      24, 1, 32, 1, 40, 5, 18, 17, 10, 9, 108, 111, 110, 103,\n      105, 116, 117, 100, 101, 24, 2, 32, 1, 40, 5, 34, 73,\n      10, 9, 82, 101, 99, 116, 97, 110, 103, 108, 101, 18, 29,\n      10, 2, 108, 111, 24, 1, 32, 1, 40, 11, 50, 17, 46, 114,\n      111, 117, 116, 101, 103, 117, 105, 100, 101, 46, 80,\n      111, 105, 110, 116, 18, 29, 10, 2, 104, 105, 24, 2, 32,\n      1, 40, 11, 50, 17, 46, 114, 111, 117, 116, 101, 103,\n      117, 105, 100, 101, 46, 80, 111, 105, 110, 116, 34, 65,\n      10, 9, 82, 111, 117, 116, 101, 78, 111, 116, 101, 18,\n      35, 10, 8, 108, 111, 99, 97, 116, 105, 111, 110, 24, 1,\n      32, 1, 40, 11, 50, 17, 46, 114, 111, 117, 116, 101, 103,\n      117, 105, 100, 101, 46, 80, 111, 105, 110, 116, 18, 15,\n      10, 7, 109, 101, 115, 115, 97, 103, 101, 24, 2, 32, 1,\n      40, 9, 34, 98, 10, 12, 82, 111, 117, 116, 101, 83, 117,\n      109, 109, 97, 114, 121, 18, 19, 10, 11, 112, 111, 105,\n      110, 116, 95, 99, 111, 117, 110, 116, 24, 1, 32, 1, 40,\n      5, 18, 21, 10, 13, 102, 101, 97, 116, 117, 114, 101, 95,\n      99, 111, 117, 110, 116, 24, 2, 32, 1, 40, 5, 18, 16, 10,\n      8, 100, 105, 115, 116, 97, 110, 99, 101, 24, 3, 32, 1,\n      40, 5, 18, 20, 10, 12, 101, 108, 97, 112, 115, 101, 100,\n      95, 116, 105, 109, 101, 24, 4, 32, 1, 40, 5, 50, 132, 3,\n      10, 10, 82, 111, 117, 116, 101, 71, 117, 105, 100, 101,\n      18, 56, 10, 10, 71, 101, 116, 70, 101, 97, 116, 117,\n      114, 101, 18, 17, 46, 114, 111, 117, 116, 101, 103, 117,\n      105, 100, 101, 46, 80, 111, 105, 110, 116, 26, 19, 46,\n      114, 111, 117, 116, 101, 103, 117, 105, 100, 101, 46,\n      70, 101, 97, 116, 117, 114, 101, 40, 0, 48, 0, 18, 62,\n      10, 12, 76, 105, 115, 116, 70, 101, 97, 116, 117, 114,\n      101, 115, 18, 21, 46, 114, 111, 117, 116, 101, 103, 117,\n      105, 100, 101, 46, 82, 101, 99, 116, 97, 110, 103, 108,\n      101, 26, 19, 46, 114, 111, 117, 116, 101, 103, 117, 105,\n      100, 101, 46, 70, 101, 97, 116, 117, 114, 101, 40, 0,\n      48, 0, 18, 62, 10, 11, 82, 101, 99, 111, 114, 100, 82,\n      111, 117, 116, 101, 18, 17, 46, 114, 111, 117, 116, 101,\n      103, 117, 105, 100, 101, 46, 80, 111, 105, 110, 116, 26,\n      24, 46, 114, 111, 117, 116, 101, 103, 117, 105, 100,\n      101, 46, 82, 111, 117, 116, 101, 83, 117, 109, 109, 97,\n      114, 121, 40, 0, 48, 0, 18, 61, 10, 9, 82, 111, 117,\n      116, 101, 67, 104, 97, 116, 18, 21, 46, 114, 111, 117,\n      116, 101, 103, 117, 105, 100, 101, 46, 82, 111, 117,\n      116, 101, 78, 111, 116, 101, 26, 21, 46, 114, 111, 117,\n      116, 101, 103, 117, 105, 100, 101, 46, 82, 111, 117,\n      116, 101, 78, 111, 116, 101, 40, 0, 48, 0, 18, 57, 10,\n      13, 71, 101, 110, 101, 114, 97, 116, 101, 69, 114, 114,\n      111, 114, 18, 17, 46, 114, 111, 117, 116, 101, 103, 117,\n      105, 100, 101, 46, 69, 109, 112, 116, 121, 26, 17, 46,\n      114, 111, 117, 116, 101, 103, 117, 105, 100, 101, 46,\n      69, 109, 112, 116, 121, 40, 0, 48, 0, 18, 66, 10, 22,\n      83, 116, 114, 101, 97, 109, 105, 110, 103, 71, 101, 110,\n      101, 114, 97, 116, 101, 69, 114, 114, 111, 114, 18, 17,\n      46, 114, 111, 117, 116, 101, 103, 117, 105, 100, 101,\n      46, 69, 109, 112, 116, 121, 26, 17, 46, 114, 111, 117,\n      116, 101, 103, 117, 105, 100, 101, 46, 69, 109, 112,\n      116, 121, 40, 0, 48, 0, 98, 6, 112, 114, 111, 116, 111,\n      51>>;\ndescriptor(X) -> error({gpb_error, {badname, X}}).\n\n\ngpb_version_as_string() ->\n    \"4.7.3\".\n\ngpb_version_as_list() ->\n    [4,7,3].\n"
  },
  {
    "path": "test/routeguide_route_guide.erl",
    "content": "-module(routeguide_route_guide).\n\n-include(\"grpcbox.hrl\").\n\n-export([get_feature/2,\n         list_features/2,\n         record_route/2,\n         route_chat/2,\n         generate_error/2,\n         streaming_generate_error/2]).\n\n-type route_summary() ::\n    #{point_count => integer(),\n      feature_count => integer(),\n      distance => integer(),\n      elapsed_time => integer()}.\n\n-type point() ::\n    #{latitude => integer(),\n      longitude => integer()}.\n\n-type rectangle() ::\n    #{lo => point(),\n      hi => point()}.\n\n-type route_note() ::\n    #{location => point(),\n      message => string()}.\n\n-type feature() ::\n    #{name => string(),\n      location => point()}.\n\n-spec get_feature(Ctx :: ctx:t(), Message :: point()) -> {ok, feature(), ctx:t()}.\nget_feature(Ctx, Message) ->\n    Feature = #{name => find_point(Message, data()),\n                location => Message},\n    {ok, Feature, Ctx}.\n\n-spec list_features(Message::rectangle(), GrpcStream :: grpcbox_stream:t()) -> ok.\nlist_features(_Message, GrpcStream) ->\n    grpcbox_stream:add_headers([{<<\"info\">>, <<\"this is a test-implementation\">>}], GrpcStream),\n    grpcbox_stream:send(#{name => <<\"Tour Eiffel\">>,\n                                        location => #{latitude => 3,\n                                                      longitude => 5}}, GrpcStream),\n    grpcbox_stream:send(#{name => <<\"Louvre\">>,\n                          location => #{latitude => 4,\n                                        longitude => 5}}, GrpcStream),\n\n    grpcbox_stream:add_trailers([{<<\"nr_of_points_sent\">>, <<\"2\">>}], GrpcStream),\n    ok.\n\n-spec record_route(reference(), GrpcStream :: grpcbox_stream:t()) -> {ok, route_summary(), grpcbox_stream:t()}.\nrecord_route(Ref, GrpcStream) ->\n    record_route(Ref, #{t_start => erlang:system_time(1),\n                        acc => []}, GrpcStream).\n\nrecord_route(Ref, Data=#{t_start := T0, acc := Points}, GrpcStream) ->\n    receive\n        {Ref, eos} ->\n            %% receiving 'eos' tells us that we need to return a result.\n            {ok, #{elapsed_time => erlang:system_time(1) - T0,\n                   point_count => length(Points),\n                   feature_count => count_features(Points),\n                   distance => distance(Points)}, GrpcStream};\n        {Ref, Point} ->\n            record_route(Ref, Data#{acc => [Point | Points]}, GrpcStream)\n    end.\n\n-spec route_chat(reference(), GrpcStream :: grpcbox_stream:t()) -> ok.\nroute_chat(Ref, GrpcStream) ->\n    route_chat(Ref, [], GrpcStream).\n\nroute_chat(Ref, Data, GrpcStream) ->\n    receive\n        {Ref, eos} ->\n            ok;\n        {Ref, #{location := Location} = P} ->\n            Messages = proplists:get_all_values(Location, Data),\n            [grpcbox_stream:send(Message, GrpcStream) || Message <- Messages],\n            route_chat(Ref, [{Location, P} | Data], GrpcStream)\n    end.\n\n-spec generate_error(Ctx :: ctx:t(), Message :: map()) -> grpcbox_stream:grpc_extended_error_response().\ngenerate_error(_Ctx, _Message) ->\n    {\n        grpc_extended_error, #{\n            status => ?GRPC_STATUS_INTERNAL,\n            message => <<\"error_message\">>,\n            trailers => #{\n                <<\"generate_error_trailer\">> => <<\"error_trailer\">>\n            }\n        }\n    }.\n\n-spec streaming_generate_error(Message :: map(), GrpcStream :: grpcbox_stream:t()) -> no_return().\nstreaming_generate_error(_Message, _GrpcStream) ->\n    exit(\n        {\n            grpc_extended_error, #{\n                status => ?GRPC_STATUS_INTERNAL,\n                message => <<\"error_message\">>,\n                trailers => #{\n                    <<\"generate_error_trailer\">> => <<\"error_trailer\">>\n                }\n            }\n        }\n    ).\n\n%% Supporting functions\n\ndata() ->\n    case file:read_file(\"test/grpcbox_SUITE_data/route_guide_db.json\") of\n        {ok, Json} ->\n            jsx:decode(Json, [return_maps, {labels, atom}]);\n        {error, enoent} ->\n            {ok, Json} = file:read_file(\"../../../../test/grpcbox_SUITE_data/route_guide_db.json\"),\n            jsx:decode(Json, [return_maps, {labels, atom}])\n    end.\n\nfind_point(_Location, []) ->\n    \"\";\nfind_point(Location, [#{location := Location, name := Name} | _]) ->\n    Name;\nfind_point(Location, [_ | T]) ->\n    find_point(Location, T).\n\ncount_features(_) -> 42.\ndistance(_) -> 42.\n"
  },
  {
    "path": "test/routeguide_route_guide_bhvr.erl",
    "content": "%%%-------------------------------------------------------------------\n%% @doc Behaviour to implement for grpc service routeguide.RouteGuide.\n%% @end\n%%%-------------------------------------------------------------------\n\n%% this module was generated on 2020-10-19T05:10:58+00:00 and should not be modified manually\n\n-module(routeguide_route_guide_bhvr).\n\n%% @doc Unary RPC\n-callback get_feature(ctx:t(), route_guide_pb:point()) ->\n    {ok, route_guide_pb:feature(), ctx:t()} | grpcbox_stream:grpc_error_response().\n\n%% @doc \n-callback list_features(route_guide_pb:rectangle(), grpcbox_stream:t()) ->\n    ok | grpcbox_stream:grpc_error_response().\n\n%% @doc \n-callback record_route(reference(), grpcbox_stream:t()) ->\n    {ok, route_guide_pb:route_summary(), ctx:t()} | grpcbox_stream:grpc_error_response().\n\n%% @doc \n-callback route_chat(reference(), grpcbox_stream:t()) ->\n    ok | grpcbox_stream:grpc_error_response().\n\n%% @doc Unary RPC\n-callback generate_error(ctx:t(), route_guide_pb:empty()) ->\n    {ok, route_guide_pb:empty(), ctx:t()} | grpcbox_stream:grpc_error_response().\n\n%% @doc \n-callback streaming_generate_error(route_guide_pb:empty(), grpcbox_stream:t()) ->\n    ok | grpcbox_stream:grpc_error_response().\n\n"
  },
  {
    "path": "test/routeguide_route_guide_client.erl",
    "content": "%%%-------------------------------------------------------------------\n%% @doc Client module for grpc service routeguide.RouteGuide.\n%% @end\n%%%-------------------------------------------------------------------\n\n%% this module was generated on 2020-10-19T05:10:58+00:00 and should not be modified manually\n\n-module(routeguide_route_guide_client).\n\n-compile(export_all).\n-compile(nowarn_export_all).\n\n-include_lib(\"grpcbox/include/grpcbox.hrl\").\n\n-define(is_ctx(Ctx), is_tuple(Ctx) andalso element(1, Ctx) =:= ctx).\n\n-define(SERVICE, 'routeguide.RouteGuide').\n-define(PROTO_MODULE, 'route_guide_pb').\n-define(MARSHAL_FUN(T), fun(I) -> ?PROTO_MODULE:encode_msg(I, T) end).\n-define(UNMARSHAL_FUN(T), fun(I) -> ?PROTO_MODULE:decode_msg(I, T) end).\n-define(DEF(Input, Output, MessageType), #grpcbox_def{service=?SERVICE,\n                                                      message_type=MessageType,\n                                                      marshal_fun=?MARSHAL_FUN(Input),\n                                                      unmarshal_fun=?UNMARSHAL_FUN(Output)}).\n\n%% @doc Unary RPC\n-spec get_feature(route_guide_pb:point()) ->\n    {ok, route_guide_pb:feature(), grpcbox:metadata()} | grpcbox_stream:grpc_error_response().\nget_feature(Input) ->\n    get_feature(ctx:new(), Input, #{}).\n\n-spec get_feature(ctx:t() | route_guide_pb:point(), route_guide_pb:point() | grpcbox_client:options()) ->\n    {ok, route_guide_pb:feature(), grpcbox:metadata()} | grpcbox_stream:grpc_error_response().\nget_feature(Ctx, Input) when ?is_ctx(Ctx) ->\n    get_feature(Ctx, Input, #{});\nget_feature(Input, Options) ->\n    get_feature(ctx:new(), Input, Options).\n\n-spec get_feature(ctx:t(), route_guide_pb:point(), grpcbox_client:options()) ->\n    {ok, route_guide_pb:feature(), grpcbox:metadata()} | grpcbox_stream:grpc_error_response().\nget_feature(Ctx, Input, Options) ->\n    grpcbox_client:unary(Ctx, <<\"/routeguide.RouteGuide/GetFeature\">>, Input, ?DEF(point, feature, <<\"routeguide.Point\">>), Options).\n\n%% @doc \n-spec list_features(route_guide_pb:rectangle()) ->\n    {ok, grpcbox_client:stream()} | grpcbox_stream:grpc_error_response().\nlist_features(Input) ->\n    list_features(ctx:new(), Input, #{}).\n\n-spec list_features(ctx:t() | route_guide_pb:rectangle(), route_guide_pb:rectangle() | grpcbox_client:options()) ->\n    {ok, grpcbox_client:stream()} | grpcbox_stream:grpc_error_response().\nlist_features(Ctx, Input) when ?is_ctx(Ctx) ->\n    list_features(Ctx, Input, #{});\nlist_features(Input, Options) ->\n    list_features(ctx:new(), Input, Options).\n\n-spec list_features(ctx:t(), route_guide_pb:rectangle(), grpcbox_client:options()) ->\n    {ok, grpcbox_client:stream()} | grpcbox_stream:grpc_error_response().\nlist_features(Ctx, Input, Options) ->\n    grpcbox_client:stream(Ctx, <<\"/routeguide.RouteGuide/ListFeatures\">>, Input, ?DEF(rectangle, feature, <<\"routeguide.Rectangle\">>), Options).\n\n%% @doc \n-spec record_route() ->\n    {ok, grpcbox_client:stream()} | grpcbox_stream:grpc_error_response().\nrecord_route() ->\n    record_route(ctx:new(), #{}).\n\n-spec record_route(ctx:t() | grpcbox_client:options()) ->\n    {ok, grpcbox_client:stream()} | grpcbox_stream:grpc_error_response().\nrecord_route(Ctx) when ?is_ctx(Ctx) ->\n    record_route(Ctx, #{});\nrecord_route(Options) ->\n    record_route(ctx:new(), Options).\n\n-spec record_route(ctx:t(), grpcbox_client:options()) ->\n    {ok, grpcbox_client:stream()} | grpcbox_stream:grpc_error_response().\nrecord_route(Ctx, Options) ->\n    grpcbox_client:stream(Ctx, <<\"/routeguide.RouteGuide/RecordRoute\">>, ?DEF(point, route_summary, <<\"routeguide.Point\">>), Options).\n\n%% @doc \n-spec route_chat() ->\n    {ok, grpcbox_client:stream()} | grpcbox_stream:grpc_error_response().\nroute_chat() ->\n    route_chat(ctx:new(), #{}).\n\n-spec route_chat(ctx:t() | grpcbox_client:options()) ->\n    {ok, grpcbox_client:stream()} | grpcbox_stream:grpc_error_response().\nroute_chat(Ctx) when ?is_ctx(Ctx) ->\n    route_chat(Ctx, #{});\nroute_chat(Options) ->\n    route_chat(ctx:new(), Options).\n\n-spec route_chat(ctx:t(), grpcbox_client:options()) ->\n    {ok, grpcbox_client:stream()} | grpcbox_stream:grpc_error_response().\nroute_chat(Ctx, Options) ->\n    grpcbox_client:stream(Ctx, <<\"/routeguide.RouteGuide/RouteChat\">>, ?DEF(route_note, route_note, <<\"routeguide.RouteNote\">>), Options).\n\n%% @doc Unary RPC\n-spec generate_error(route_guide_pb:empty()) ->\n    {ok, route_guide_pb:empty(), grpcbox:metadata()} | grpcbox_stream:grpc_error_response().\ngenerate_error(Input) ->\n    generate_error(ctx:new(), Input, #{}).\n\n-spec generate_error(ctx:t() | route_guide_pb:empty(), route_guide_pb:empty() | grpcbox_client:options()) ->\n    {ok, route_guide_pb:empty(), grpcbox:metadata()} | grpcbox_stream:grpc_error_response().\ngenerate_error(Ctx, Input) when ?is_ctx(Ctx) ->\n    generate_error(Ctx, Input, #{});\ngenerate_error(Input, Options) ->\n    generate_error(ctx:new(), Input, Options).\n\n-spec generate_error(ctx:t(), route_guide_pb:empty(), grpcbox_client:options()) ->\n    {ok, route_guide_pb:empty(), grpcbox:metadata()} | grpcbox_stream:grpc_error_response().\ngenerate_error(Ctx, Input, Options) ->\n    grpcbox_client:unary(Ctx, <<\"/routeguide.RouteGuide/GenerateError\">>, Input, ?DEF(empty, empty, <<\"routeguide.Empty\">>), Options).\n\n%% @doc \n-spec streaming_generate_error(route_guide_pb:empty()) ->\n    {ok, grpcbox_client:stream()} | grpcbox_stream:grpc_error_response().\nstreaming_generate_error(Input) ->\n    streaming_generate_error(ctx:new(), Input, #{}).\n\n-spec streaming_generate_error(ctx:t() | route_guide_pb:empty(), route_guide_pb:empty() | grpcbox_client:options()) ->\n    {ok, grpcbox_client:stream()} | grpcbox_stream:grpc_error_response().\nstreaming_generate_error(Ctx, Input) when ?is_ctx(Ctx) ->\n    streaming_generate_error(Ctx, Input, #{});\nstreaming_generate_error(Input, Options) ->\n    streaming_generate_error(ctx:new(), Input, Options).\n\n-spec streaming_generate_error(ctx:t(), route_guide_pb:empty(), grpcbox_client:options()) ->\n    {ok, grpcbox_client:stream()} | grpcbox_stream:grpc_error_response().\nstreaming_generate_error(Ctx, Input, Options) ->\n    grpcbox_client:stream(Ctx, <<\"/routeguide.RouteGuide/StreamingGenerateError\">>, Input, ?DEF(empty, empty, <<\"routeguide.Empty\">>), Options).\n\n"
  },
  {
    "path": "test/test_stats_handler.erl",
    "content": "-module(test_stats_handler).\n\n-export([handle/5]).\n\nhandle(Ctx, _, rpc_begin, _, Stats) ->\n    stats_pid ! {rpc_begin, erlang:monotonic_time()},\n    {Ctx, Stats};\nhandle(Ctx, _, out_payload, #{uncompressed_size := USize,\n                              compressed_size := CSize}, Stats) ->\n    stats_pid ! {out_payload, USize, CSize},\n    {Ctx, Stats};\nhandle(Ctx, _, in_payload, #{uncompressed_size := USize,\n                             compressed_size := CSize}, Stats) ->\n    stats_pid ! {in_payload, USize, CSize},\n    {Ctx, Stats};\nhandle(Ctx, _, rpc_end, _, Stats) ->\n    stats_pid ! {rpc_end, erlang:monotonic_time()},\n    {Ctx, Stats};\nhandle(Ctx, _, _, _, Stats) ->\n    {Ctx, Stats}.\n"
  }
]