diff --git a/.github/workflows/build_push_docker_hub.yml b/.github/workflows/build_push_docker_hub.yml index 9a7548a8e..a3e96b8c1 100644 --- a/.github/workflows/build_push_docker_hub.yml +++ b/.github/workflows/build_push_docker_hub.yml @@ -41,9 +41,8 @@ jobs: IMAGE_TAG="${GITHUB_SHA:0:8}" EXTRA_IMAGE_TAGS=$GIT_TAG - #! Add latest tag only if on named releases tag='v*' if [[ ${GIT_TAG} == v* ]]; then - EXTRA_IMAGE_TAGS="${EXTRA_IMAGE_TAGS};latest" + EXTRA_IMAGE_TAGS="${EXTRA_IMAGE_TAGS}" fi # Build a docker container and push it to Docker Hub. diff --git a/.github/workflows/build_push_upgrader_docker_hub.yml b/.github/workflows/build_push_upgrader_docker_hub.yml new file mode 100644 index 000000000..605764903 --- /dev/null +++ b/.github/workflows/build_push_upgrader_docker_hub.yml @@ -0,0 +1,69 @@ +name: Build and Push docker image to Docker Hub + +# Trigger the workflow manually +on: + workflow_dispatch: + inputs: + tag: + description: 'Tag for the Docker image' + required: false + default: '' + allorad_current_version: + description: 'Current version of allorad' + required: true + default: 'v0.2.14' + allorad_upgrade_version: + description: 'Upgrade version of allorad' + required: true + default: 'v0.3.0' + +concurrency: + group: ${{ github.ref }} + cancel-in-progress: true + +jobs: + build-push: + name: Build and Push docker image + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Login to Docker Hub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKER_HUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_PASSWORD }} + + - name: Build, tag, and push upgrader image to Docker Hub + id: build-push-upgrader-image + env: + DOCKERHUB_USERNAME: alloranetwork + DOCKERHUB_REPOSITORY: ${{ github.event.repository.name }} + run: | + # Set the tag from the input or default to the SHA of the commit + GIT_TAG="${{ github.event.inputs.tag || github.sha }}" + ALLORAD_CURRENT_VERSION="${{ github.event.inputs.allorad_current_version }}" + ALLORAD_UPGRADE_VERSION="${{ github.event.inputs.allorad_upgrade_version }}" + + IMAGE_TAG="${GITHUB_SHA:0:8}" + EXTRA_IMAGE_TAGS=$GIT_TAG + + if [[ ${GIT_TAG} == v* ]]; then + EXTRA_IMAGE_TAGS="${EXTRA_IMAGE_TAGS}" + fi + + # Build a docker container and push it to Docker Hub. + docker build --pull \ + --build-arg "ALLORAD_CURRENT_VERSION=${ALLORAD_CURRENT_VERSION}" \ + --build-arg "ALLORAD_UPGRADE_VERSION=${ALLORAD_UPGRADE_VERSION}" \ + -f Dockerfile.cosmovisor -t $DOCKERHUB_USERNAME/$DOCKERHUB_REPOSITORY:$IMAGE_TAG . + + docker push $DOCKERHUB_USERNAME/$DOCKERHUB_REPOSITORY:$IMAGE_TAG + + # Build and PUSH additional tags + for tag in $(echo $EXTRA_IMAGE_TAGS | tr ";" "\n"); do + docker tag $DOCKERHUB_USERNAME/$DOCKERHUB_REPOSITORY:$IMAGE_TAG $DOCKERHUB_USERNAME/$DOCKERHUB_REPOSITORY:$tag + docker push $DOCKERHUB_USERNAME/$DOCKERHUB_REPOSITORY:$tag + done diff --git a/CHANGELOG.md b/CHANGELOG.md index 5bd493bec..7a23cb4d0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -43,6 +43,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +* Refactors to adapt to single transaction insertions from workers and reputers. ### Added diff --git a/Dockerfile.cosmovisor b/Dockerfile.cosmovisor index b30d7a6f3..48de9b89e 100644 --- a/Dockerfile.cosmovisor +++ b/Dockerfile.cosmovisor @@ -27,40 +27,26 @@ ENV DASEL_VERSION="v2.8.1" ADD https://github.com/TomWright/dasel/releases/download/${DASEL_VERSION}/dasel_linux_amd64 /usr/local/bin/dasel RUN chmod a+x /usr/local/bin/dasel -ENV COSMOVISOR_VERSION="v1.5.0" #* See https://docs.cosmos.network/main/build/tooling/cosmovisor#setup for details -ENV DAEMON_HOME="/cosmovisor" -# ENV DAEMON_NAME=allorad -# ENV DAEMON_ALLOW_DOWNLOAD_BINARIES=false -# ENV DAEMON_DOWNLOAD_MUST_HAVE_CHECKSUM=false -# ENV DAEMON_RESTART_AFTER_UPGRADE=true -# ENV DAEMON_RESTART_DELAY=1s -# ENV DAEMON_POLL_INTERVAL=3s -# ENV UNSAFE_SKIP_BACKUP=true -# ENV DAEMON_PREUPGRADE_MAX_RETRIES=3 -# ENV COSMOVISOR_DISABLE_LOGS=false -# ENV COSMOVISOR_COLOR_LOGS=true +ENV COSMOVISOR_VERSION="v1.5.0" +ENV INITIAL_COSMOVISOR_DIR="/cosmovisor" +ENV DAEMON_HOME="/data" +ENV DAEMON_NAME=allorad +ENV UNSAFE_SKIP_BACKUP=true + ADD https://github.com/cosmos/cosmos-sdk/releases/download/cosmovisor/${COSMOVISOR_VERSION}/cosmovisor-v1.5.0-linux-amd64.tar.gz /tmp/cosmovisor.tar.gz RUN tar -xvf /tmp/cosmovisor.tar.gz -C /usr/local/bin/ && \ chmod +x /usr/local/bin/cosmovisor -ENV ALLORAD_CURRENT_VERSION="v0.2.14" -#* ALLORAD_UPGRADE_VERSIONS - Could be many versions, space separated -ENV ALLORAD_UPGRADE_VERSIONS="untagged-e66cf245a46ad9a6cef6" +ARG ALLORAD_CURRENT_VERSION="v0.2.14" +ARG ALLORAD_UPGRADE_VERSION="v0.3.0" -RUN mkdir -p ${DAEMON_HOME}/genesis/bin && \ - curl -Lo ${DAEMON_HOME}/genesis/bin/allorad https://github.com/allora-network/allora-chain/releases/download/${ALLORAD_CURRENT_VERSION}/allorad_linux_amd64 && \ - chmod +x ${DAEMON_HOME}/genesis/bin/allorad +RUN mkdir -p ${INITIAL_COSMOVISOR_DIR}/genesis/bin && \ + curl -Lo ${INITIAL_COSMOVISOR_DIR}/genesis/bin/allorad https://github.com/allora-network/allora-chain/releases/download/${ALLORAD_CURRENT_VERSION}/allorad_linux_amd64 && \ + chmod +x ${INITIAL_COSMOVISOR_DIR}/genesis/bin/allorad -# RUN for ver in "${ALLORAD_UPGRADE_VERSIONS}"; do \ -# mkdir -p ${DAEMON_HOME}/upgrades/${ver}/bin && \ -# curl -Lo ${DAEMON_HOME}/upgrades/${ver}/bin/allorad https://github.com/allora-network/allora-chain/releases/download/${ver}/allorad_linux_amd64 && \ -# chmod +x ${DAEMON_HOME}/upgrades/${ver}/bin/allorad ; \ -# done && \ -# chown -R ${USERNAME}:${USERNAME} ${DAEMON_HOME} -ENV ver="v0.3.0" -RUN mkdir -p ${DAEMON_HOME}/upgrades/${ver}/bin -COPY allorad ${DAEMON_HOME}/upgrades/${ver}/bin/allorad +RUN mkdir -p ${INITIAL_COSMOVISOR_DIR}/upgrades/${ALLORAD_UPGRADE_VERSION}/bin && \ + curl -Lo ${INITIAL_COSMOVISOR_DIR}/upgrades/${ALLORAD_UPGRADE_VERSION}/bin/allorad https://github.com/allora-network/allora-chain/releases/download/${ALLORAD_UPGRADE_VERSION}/allorad_linux_amd64 VOLUME ${APP_PATH} WORKDIR ${APP_PATH} diff --git a/docker-compose.yaml b/docker-compose.yaml index 24497da87..887d84f2d 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -2,16 +2,17 @@ services: node: container_name: sample_validator - image: "alloranetwork/allora-chain:v0.2.14" + image: "alloranetwork/allora-chain:v0.3.0-upgrader" # docker image without cosmovisor. use vx.x.x-upgrader for upgrade image environment: - NETWORK=allora-testnet-1 - MONIKER=sample_validator - APP_HOME=/data - HOME=/data - - STATE_SYNC_RPC1=https://allora-rpc.testnet-1.testnet.allora.network:443 - - STATE_SYNC_RPC2=https://allora-rpc.testnet-1.testnet.allora.network:443 + # - STATE_SYNC_RPC1=https://allora-rpc.testnet-1.testnet.allora.network:443 + # - STATE_SYNC_RPC2=https://allora-rpc.testnet-1.testnet.allora.network:443 + - UPGRADE=true # set this to true for chain upgrade runs volumes: - - ./data_validator:/data + - ./data:/data - ./scripts/:/scripts ports: - "26656-26657:26656-26657" diff --git a/math/dec.go b/math/dec.go index bc76bf1ce..27356b04a 100644 --- a/math/dec.go +++ b/math/dec.go @@ -8,6 +8,7 @@ import ( "encoding/json" "fmt" "math/big" + "math/bits" "cosmossdk.io/errors" sdkmath "cosmossdk.io/math" @@ -39,6 +40,7 @@ var ( ErrUnexpectedRounding = errors.Register(mathCodespace, 2, "unexpected rounding") ErrNonIntegeral = errors.Register(mathCodespace, 3, "value is non-integral") ErrInfiniteString = errors.Register(mathCodespace, 4, "value is infinite") + ErrOverflow = errors.Register(mathCodespace, 5, "overflow") ) // The number 0 encoded as Dec @@ -389,6 +391,7 @@ func (x Dec) BigInt() (*big.Int, error) { return z, nil } +// Coeff copies x into a big int while minimizing trailing zeroes func (x Dec) Coeff() big.Int { y, _ := x.Reduce() var r = y.dec.Coeff @@ -408,19 +411,43 @@ func (x Dec) Coeff() big.Int { return *r.MathBigInt() } +// MaxBitLen defines the maximum bit length supported bit Int and Uint types. +const MaxBitLen = 256 + +// maxWordLen defines the maximum word length supported by Int and Uint types. +// We check overflow, by first doing a fast check if the word length is below maxWordLen +// and if not then do the slower full bitlen check. +// NOTE: If MaxBitLen is not a multiple of bits.UintSize, then we need to edit the used logic slightly. +const maxWordLen = MaxBitLen / bits.UintSize + +// check if the big int is greater than the maximum word length +// of a sdk int (256 bits) +func bigIntOverflows(i *big.Int) bool { + // overflow is defined as i.BitLen() > MaxBitLen + // however this check can be expensive when doing many operations. + // So we first check if the word length is greater than maxWordLen. + // However the most significant word could be zero, hence we still do the bitlen check. + if len(i.Bits()) > maxWordLen { + return i.BitLen() > MaxBitLen + } + return false +} + // SdkIntTrim rounds decimal number to the integer towards zero and converts it to `sdkmath.Int`. -// Panics if x is bigger the SDK Int max value -func (x Dec) SdkIntTrim() sdkmath.Int { +// returns error if the Dec is not representable in an sdkmath.Int +func (x Dec) SdkIntTrim() (sdkmath.Int, error) { var r = x.Coeff() - return sdkmath.NewIntFromBigInt(&r) + if bigIntOverflows(&r) { + return sdkmath.Int{}, errors.Wrap(ErrOverflow, "decimal is not representable as an sdkmath.Int") + } + return sdkmath.NewIntFromBigInt(&r), nil } // SdkLegacyDec converts Dec to `sdkmath.LegacyDec` // can return nil if the value is not representable in a LegacyDec -func (x Dec) SdkLegacyDec() sdkmath.LegacyDec { +func (x Dec) SdkLegacyDec() (sdkmath.LegacyDec, error) { stringRep := x.dec.Text('f') - y, _ := sdkmath.LegacyNewDecFromStr(stringRep) - return y + return sdkmath.LegacyNewDecFromStr(stringRep) } func (x Dec) String() string { diff --git a/math/dec_test.go b/math/dec_test.go index 35278f1da..2d76b8de3 100644 --- a/math/dec_test.go +++ b/math/dec_test.go @@ -2,7 +2,7 @@ // Their code is under the Apache2.0 License // https://github.com/regen-network/regen-ledger/blob/3d818cf6e01af92eed25de5c17728a79070f56a3/types/math/dec_test.go -package math +package math_test import ( "fmt" @@ -11,6 +11,8 @@ import ( "strings" "testing" + cosmosMath "cosmossdk.io/math" + alloraMath "github.com/allora-network/allora-chain/math" "github.com/stretchr/testify/require" "pgregory.net/rapid" ) @@ -67,27 +69,27 @@ func TestDec(t *testing.T) { t.Run("TestNumDecimalPlaces", rapid.MakeCheck(testNumDecimalPlaces)) // Unit tests - zero := Dec{} - one := NewDecFromInt64(1) - two := NewDecFromInt64(2) - three := NewDecFromInt64(3) - four := NewDecFromInt64(4) - five := NewDecFromInt64(5) - minusOne := NewDecFromInt64(-1) + zero := alloraMath.Dec{} + one := alloraMath.NewDecFromInt64(1) + two := alloraMath.NewDecFromInt64(2) + three := alloraMath.NewDecFromInt64(3) + four := alloraMath.NewDecFromInt64(4) + five := alloraMath.NewDecFromInt64(5) + minusOne := alloraMath.NewDecFromInt64(-1) - onePointOneFive, err := NewDecFromString("1.15") + onePointOneFive, err := alloraMath.NewDecFromString("1.15") require.NoError(t, err) - twoPointThreeFour, err := NewDecFromString("2.34") + twoPointThreeFour, err := alloraMath.NewDecFromString("2.34") require.NoError(t, err) - threePointFourNine, err := NewDecFromString("3.49") + threePointFourNine, err := alloraMath.NewDecFromString("3.49") require.NoError(t, err) - onePointFourNine, err := NewDecFromString("1.49") + onePointFourNine, err := alloraMath.NewDecFromString("1.49") require.NoError(t, err) - minusFivePointZero, err := NewDecFromString("-5.0") + minusFivePointZero, err := alloraMath.NewDecFromString("-5.0") require.NoError(t, err) - twoThousand := NewDecFinite(2, 3) - require.True(t, twoThousand.Equal(NewDecFromInt64(2000))) + twoThousand := alloraMath.NewDecFinite(2, 3) + require.True(t, twoThousand.Equal(alloraMath.NewDecFromInt64(2000))) res, err := two.Add(zero) require.NoError(t, err) @@ -159,32 +161,32 @@ func TestDec(t *testing.T) { require.NoError(t, err) require.True(t, res.Equal(two)) - ten := NewDecFromInt64(10) - oneHundred := NewDecFromInt64(100) - logTenOneHundred, err := Log10(oneHundred) + ten := alloraMath.NewDecFromInt64(10) + oneHundred := alloraMath.NewDecFromInt64(100) + logTenOneHundred, err := alloraMath.Log10(oneHundred) require.NoError(t, err) require.True(t, two.Equal(logTenOneHundred)) - logTenTen, err := Log10(ten) + logTenTen, err := alloraMath.Log10(ten) require.NoError(t, err) require.True(t, one.Equal(logTenTen)) - logTenOne, err := Log10(one) + logTenOne, err := alloraMath.Log10(one) require.NoError(t, err) require.True(t, zero.Equal(logTenOne)) - logEOne, err := Ln(one) + logEOne, err := alloraMath.Ln(one) require.NoError(t, err) require.True(t, zero.Equal(logEOne)) - eight := NewDecFromInt64(8) - twoCubed, err := Pow(two, three) + eight := alloraMath.NewDecFromInt64(8) + twoCubed, err := alloraMath.Pow(two, three) require.NoError(t, err) require.True(t, eight.Equal(twoCubed)) - oneThousand := NewDecFromInt64(1000) - tenSquared, err := Exp10(two) + oneThousand := alloraMath.NewDecFromInt64(1000) + tenSquared, err := alloraMath.Exp10(two) require.NoError(t, err) require.True(t, oneHundred.Equal(tenSquared)) - tenCubed, err := Exp10(three) + tenCubed, err := alloraMath.Exp10(three) require.NoError(t, err) require.True(t, oneThousand.Equal(tenCubed)) @@ -192,7 +194,7 @@ func TestDec(t *testing.T) { require.NoError(t, err) require.True(t, two.Equal(cielOnePointFourNine)) - onePointFiveOne, err := NewDecFromString("1.51") + onePointFiveOne, err := alloraMath.NewDecFromString("1.51") require.NoError(t, err) floorOnePointFiveOne, err := onePointFiveOne.Floor() require.NoError(t, err) @@ -200,9 +202,9 @@ func TestDec(t *testing.T) { } // generate a dec value on the fly -var genDec *rapid.Generator[Dec] = rapid.Custom(func(t *rapid.T) Dec { +var genDec *rapid.Generator[alloraMath.Dec] = rapid.Custom(func(t *rapid.T) alloraMath.Dec { f := rapid.Float64().Draw(t, "f") - dec, err := NewDecFromString(fmt.Sprintf("%g", f)) + dec, err := alloraMath.NewDecFromString(fmt.Sprintf("%g", f)) require.NoError(t, err) return dec }) @@ -210,30 +212,30 @@ var genDec *rapid.Generator[Dec] = rapid.Custom(func(t *rapid.T) Dec { // A Dec value and the float used to create it type floatAndDec struct { float float64 - dec Dec + dec alloraMath.Dec } // Generate a Dec value along with the float used to create it var genFloatAndDec *rapid.Generator[floatAndDec] = rapid.Custom(func(t *rapid.T) floatAndDec { f := rapid.Float64().Draw(t, "f") - dec, err := NewDecFromString(fmt.Sprintf("%g", f)) + dec, err := alloraMath.NewDecFromString(fmt.Sprintf("%g", f)) require.NoError(t, err) return floatAndDec{f, dec} }) -// Property: n == NewDecFromInt64(n).Int64() +// Property: n == alloraMath.NewDecFromInt64(n).Int64() func testDecInt64(t *rapid.T) { nIn := rapid.Int64().Draw(t, "n") - nOut, err := NewDecFromInt64(nIn).Int64() + nOut, err := alloraMath.NewDecFromInt64(nIn).Int64() require.NoError(t, err) require.Equal(t, nIn, nOut) } -// Property: invalid_number_string(s) => NewDecFromString(s) == err +// Property: invalid_number_string(s) => alloraMath.NewDecFromString(s) == err func testInvalidNewDecFromString(t *rapid.T) { s := rapid.StringMatching("[[:alpha:]]+").Draw(t, "s") - _, err := NewDecFromString(s) + _, err := alloraMath.NewDecFromString(s) require.Error(t, err) } @@ -246,7 +248,7 @@ func testInvalidNewNonNegativeDecFromString(t *rapid.T) { func(s string) bool { return !strings.HasPrefix(s, "-0") && !strings.HasPrefix(s, "-.0") }, ), ).Draw(t, "s") - _, err := NewNonNegativeDecFromString(s) + _, err := alloraMath.NewNonNegativeDecFromString(s) require.Error(t, err) } @@ -261,7 +263,7 @@ func testInvalidNewNonNegativeFixedDecFromString(t *rapid.T) { ), rapid.StringMatching(fmt.Sprintf(`\d*\.\d{%d,}`, n+1)), ).Draw(t, "s") - _, err := NewNonNegativeFixedDecFromString(s, n) + _, err := alloraMath.NewNonNegativeFixedDecFromString(s, n) require.Error(t, err) } @@ -272,7 +274,7 @@ func testInvalidNewPositiveDecFromString(t *rapid.T) { rapid.StringMatching("[[:alpha:]]+"), rapid.StringMatching(`^-\d*\.?\d+|0$`), ).Draw(t, "s") - _, err := NewPositiveDecFromString(s) + _, err := alloraMath.NewPositiveDecFromString(s) require.Error(t, err) } @@ -285,14 +287,14 @@ func testInvalidNewPositiveFixedDecFromString(t *rapid.T) { rapid.StringMatching(`^-\d*\.?\d+|0$`), rapid.StringMatching(fmt.Sprintf(`\d*\.\d{%d,}`, n+1)), ).Draw(t, "s") - _, err := NewPositiveFixedDecFromString(s, n) + _, err := alloraMath.NewPositiveFixedDecFromString(s, n) require.Error(t, err) } // Property: 0 + a == a func testAddLeftIdentity(t *rapid.T) { a := genDec.Draw(t, "a") - zero := NewDecFromInt64(0) + zero := alloraMath.NewDecFromInt64(0) b, err := zero.Add(a) require.NoError(t, err) @@ -303,7 +305,7 @@ func testAddLeftIdentity(t *rapid.T) { // Property: a + 0 == a func testAddRightIdentity(t *rapid.T) { a := genDec.Draw(t, "a") - zero := NewDecFromInt64(0) + zero := alloraMath.NewDecFromInt64(0) b, err := a.Add(zero) require.NoError(t, err) @@ -351,7 +353,7 @@ func testAddAssociative(t *rapid.T) { // Property: a - 0 == a func testSubRightIdentity(t *rapid.T) { a := genDec.Draw(t, "a") - zero := NewDecFromInt64(0) + zero := alloraMath.NewDecFromInt64(0) b, err := a.Sub(zero) require.NoError(t, err) @@ -362,7 +364,7 @@ func testSubRightIdentity(t *rapid.T) { // Property: a - a == 0 func testSubZero(t *rapid.T) { a := genDec.Draw(t, "a") - zero := NewDecFromInt64(0) + zero := alloraMath.NewDecFromInt64(0) b, err := a.Sub(a) require.NoError(t, err) @@ -373,7 +375,7 @@ func testSubZero(t *rapid.T) { // Property: 1 * a == a func testMulLeftIdentity(t *rapid.T) { a := genDec.Draw(t, "a") - one := NewDecFromInt64(1) + one := alloraMath.NewDecFromInt64(1) b, err := one.Mul(a) require.NoError(t, err) @@ -384,7 +386,7 @@ func testMulLeftIdentity(t *rapid.T) { // Property: a * 1 == a func testMulRightIdentity(t *rapid.T) { a := genDec.Draw(t, "a") - one := NewDecFromInt64(1) + one := alloraMath.NewDecFromInt64(1) b, err := a.Mul(one) require.NoError(t, err) @@ -460,7 +462,7 @@ func testAddSub(t *rapid.T) { // Property: a * 0 = 0 func testMulZero(t *rapid.T) { a := genDec.Draw(t, "a") - zero := Dec{} + zero := alloraMath.Dec{} c, err := a.Mul(zero) require.NoError(t, err) @@ -469,9 +471,9 @@ func testMulZero(t *rapid.T) { // Property: a/a = 1 func testSelfQuo(t *rapid.T) { - decNotZero := func(d Dec) bool { return !d.IsZero() } + decNotZero := func(d alloraMath.Dec) bool { return !d.IsZero() } a := genDec.Filter(decNotZero).Draw(t, "a") - one := NewDecFromInt64(1) + one := alloraMath.NewDecFromInt64(1) b, err := a.Quo(a) require.NoError(t, err) @@ -481,7 +483,7 @@ func testSelfQuo(t *rapid.T) { // Property: a/1 = a func testQuoByOne(t *rapid.T) { a := genDec.Draw(t, "a") - one := NewDecFromInt64(1) + one := alloraMath.NewDecFromInt64(1) b, err := a.Quo(one) require.NoError(t, err) @@ -490,7 +492,7 @@ func testQuoByOne(t *rapid.T) { // Property: (a * b) / a == b func testMulQuoA(t *rapid.T) { - decNotZero := func(d Dec) bool { return !d.IsZero() } + decNotZero := func(d alloraMath.Dec) bool { return !d.IsZero() } a := genDec.Filter(decNotZero).Draw(t, "a") b := genDec.Draw(t, "b") @@ -505,7 +507,7 @@ func testMulQuoA(t *rapid.T) { // Property: (a * b) / b == a func testMulQuoB(t *rapid.T) { - decNotZero := func(d Dec) bool { return !d.IsZero() } + decNotZero := func(d alloraMath.Dec) bool { return !d.IsZero() } a := genDec.Draw(t, "a") b := genDec.Filter(decNotZero).Draw(t, "b") @@ -522,10 +524,10 @@ func testMulQuoB(t *rapid.T) { // and a with no more than b decimal places (b <= 32). func testMulQuoExact(t *rapid.T) { b := rapid.Uint32Range(0, 32).Draw(t, "b") - decPrec := func(d Dec) bool { return d.NumDecimalPlaces() <= b } + decPrec := func(d alloraMath.Dec) bool { return d.NumDecimalPlaces() <= b } a := genDec.Filter(decPrec).Draw(t, "a") - c := NewDecFinite(1, int32(b)) + c := alloraMath.NewDecFinite(1, int32(b)) d, err := a.MulExact(c) require.NoError(t, err) @@ -540,10 +542,10 @@ func testMulQuoExact(t *rapid.T) { // a as an integer. func testQuoMulExact(t *rapid.T) { a := rapid.Uint64().Draw(t, "a") - aDec, err := NewDecFromString(fmt.Sprintf("%d", a)) + aDec, err := alloraMath.NewDecFromString(fmt.Sprintf("%d", a)) require.NoError(t, err) b := rapid.Uint32Range(0, 32).Draw(t, "b") - c := NewDecFinite(1, int32(b)) + c := alloraMath.NewDecFinite(1, int32(b)) require.NoError(t, err) @@ -645,19 +647,19 @@ func floatDecimalPlaces(t *rapid.T, f float64) uint32 { } func TestIsFinite(t *testing.T) { - a, err := NewDecFromString("1.5") + a, err := alloraMath.NewDecFromString("1.5") require.NoError(t, err) require.True(t, a.IsFinite()) - b, err := NewDecFromString("NaN") + b, err := alloraMath.NewDecFromString("NaN") require.NoError(t, err) require.False(t, b.IsFinite()) } func TestReduce(t *testing.T) { - a, err := NewDecFromString("1.30000") + a, err := alloraMath.NewDecFromString("1.30000") require.NoError(t, err) b, n := a.Reduce() require.Equal(t, 4, n) @@ -666,9 +668,9 @@ func TestReduce(t *testing.T) { } func TestMulExactGood(t *testing.T) { - a, err := NewDecFromString("1.000001") + a, err := alloraMath.NewDecFromString("1.000001") require.NoError(t, err) - b := NewDecFinite(1, 6) + b := alloraMath.NewDecFinite(1, 6) c, err := a.MulExact(b) require.NoError(t, err) d, err := c.Int64() @@ -677,17 +679,17 @@ func TestMulExactGood(t *testing.T) { } func TestMulExactBad(t *testing.T) { - a, err := NewDecFromString("1.000000000000000000000000000000000000123456789") + a, err := alloraMath.NewDecFromString("1.000000000000000000000000000000000000123456789") require.NoError(t, err) - b := NewDecFinite(1, 10) + b := alloraMath.NewDecFinite(1, 10) _, err = a.MulExact(b) - require.ErrorIs(t, err, ErrUnexpectedRounding) + require.ErrorIs(t, err, alloraMath.ErrUnexpectedRounding) } func TestQuoExactGood(t *testing.T) { - a, err := NewDecFromString("1000001") + a, err := alloraMath.NewDecFromString("1000001") require.NoError(t, err) - b := NewDecFinite(1, 6) + b := alloraMath.NewDecFinite(1, 6) c, err := a.QuoExact(b) require.NoError(t, err) t.Logf("%s\n", c.String()) @@ -695,11 +697,11 @@ func TestQuoExactGood(t *testing.T) { } func TestQuoExactBad(t *testing.T) { - a, err := NewDecFromString("1000000000000000000000000000000000000123456789") + a, err := alloraMath.NewDecFromString("1000000000000000000000000000000000000123456789") require.NoError(t, err) - b := NewDecFinite(1, 10) + b := alloraMath.NewDecFinite(1, 10) _, err = a.QuoExact(b) - require.ErrorIs(t, err, ErrUnexpectedRounding) + require.ErrorIs(t, err, alloraMath.ErrUnexpectedRounding) } func TestToBigInt(t *testing.T) { @@ -712,10 +714,10 @@ func TestToBigInt(t *testing.T) { {i1, i1, nil}, {"1000000000000000000000000000000000000123456789.00000000", i1, nil}, {"123.456e6", "123456000", nil}, - {"12345.6", "", ErrNonIntegeral}, + {"12345.6", "", alloraMath.ErrNonIntegeral}, } for idx, tc := range tcs { - a, err := NewDecFromString(tc.intStr) + a, err := alloraMath.NewDecFromString(tc.intStr) require.NoError(t, err) b, err := a.BigInt() if tc.isError == nil { @@ -745,14 +747,25 @@ func TestToSdkInt(t *testing.T) { {"-0.9", "0"}, } for idx, tc := range tcs { - a, err := NewDecFromString(tc.intStr) + a, err := alloraMath.NewDecFromString(tc.intStr) + require.NoError(t, err) + b, err := a.SdkIntTrim() require.NoError(t, err) - b := a.SdkIntTrim() require.Equal(t, tc.out, b.String(), "test_%d", idx) } } -func TestToSdkLegacy(t *testing.T) { +func TestToSdkIntFail(t *testing.T) { + // 2 **256 - 1 (~1.15e77) should be the largest + // representable integer in the cosmos SDK Int + a, err := alloraMath.NewDecFromString("1.2e77") + require.NoError(t, err) + b, err := a.SdkIntTrim() + require.Error(t, err) + require.Equal(t, cosmosMath.Int{}, b) +} + +func TestToSdkLegacyDec(t *testing.T) { i1 := "1000000000000000000000000000000000000123456789.321000000000000000" tcs := []struct { intStr string @@ -770,37 +783,46 @@ func TestToSdkLegacy(t *testing.T) { {"-0.9", "-0.900000000000000000"}, } for idx, tc := range tcs { - a, err := NewDecFromString(tc.intStr) + a, err := alloraMath.NewDecFromString(tc.intStr) + require.NoError(t, err) + b, err := a.SdkLegacyDec() require.NoError(t, err) - b := a.SdkLegacyDec() require.Equal(t, tc.out, b.String(), "test_%d", idx) } } + +func TestToSdkLegacyDecFail(t *testing.T) { + a, err := alloraMath.NewDecFromString("1.2e77") + require.NoError(t, err) + _, err = a.SdkLegacyDec() + require.Error(t, err) +} + func TestInfDecString(t *testing.T) { - _, err := NewDecFromString("iNf") + _, err := alloraMath.NewDecFromString("iNf") require.Error(t, err) - require.ErrorIs(t, err, ErrInfiniteString) + require.ErrorIs(t, err, alloraMath.ErrInfiniteString) } func TestInDelta(t *testing.T) { // Test cases testCases := []struct { - expected Dec - result Dec - epsilon Dec + expected alloraMath.Dec + result alloraMath.Dec + epsilon alloraMath.Dec expectedResult bool }{ - {NewDecFromInt64(10), NewDecFromInt64(10), NewDecFromInt64(1), true}, // expected == result, within epsilon - {NewDecFromInt64(10), NewDecFromInt64(9), NewDecFromInt64(1), true}, // expected != result, but within epsilon - {NewDecFromInt64(10), NewDecFromInt64(8), NewDecFromInt64(1), false}, // expected != result, outside epsilon - {NewDecFromInt64(10), NewDecFromInt64(10), NewDecFromInt64(0), true}, // expected == result, epsilon is zero - {NewDecFromInt64(10), NewDecFromInt64(-10), NewDecFromInt64(1), false}, // expected != result, outside epsilon - {NewDecFromInt64(-10), NewDecFromInt64(-10), NewDecFromInt64(0), true}, // expected == result, epsilon is zero + {alloraMath.NewDecFromInt64(10), alloraMath.NewDecFromInt64(10), alloraMath.NewDecFromInt64(1), true}, // expected == result, within epsilon + {alloraMath.NewDecFromInt64(10), alloraMath.NewDecFromInt64(9), alloraMath.NewDecFromInt64(1), true}, // expected != result, but within epsilon + {alloraMath.NewDecFromInt64(10), alloraMath.NewDecFromInt64(8), alloraMath.NewDecFromInt64(1), false}, // expected != result, outside epsilon + {alloraMath.NewDecFromInt64(10), alloraMath.NewDecFromInt64(10), alloraMath.NewDecFromInt64(0), true}, // expected == result, epsilon is zero + {alloraMath.NewDecFromInt64(10), alloraMath.NewDecFromInt64(-10), alloraMath.NewDecFromInt64(1), false}, // expected != result, outside epsilon + {alloraMath.NewDecFromInt64(-10), alloraMath.NewDecFromInt64(-10), alloraMath.NewDecFromInt64(0), true}, // expected == result, epsilon is zero } // Run test cases for _, tc := range testCases { - result := InDelta(tc.expected, tc.result, tc.epsilon) + result := alloraMath.InDelta(tc.expected, tc.result, tc.epsilon) require.Equal(t, tc.expectedResult, result) } } @@ -809,58 +831,58 @@ func TestSlicesInDelta(t *testing.T) { // Test cases testCases := []struct { name string - a []Dec - b []Dec - epsilon Dec + a []alloraMath.Dec + b []alloraMath.Dec + epsilon alloraMath.Dec expected bool }{ { name: "Equal slices within epsilon", - a: []Dec{NewDecFromInt64(1), NewDecFromInt64(2), NewDecFromInt64(3)}, - b: []Dec{NewDecFromInt64(1), NewDecFromInt64(2), NewDecFromInt64(3)}, - epsilon: NewDecFromInt64(0), + a: []alloraMath.Dec{alloraMath.NewDecFromInt64(1), alloraMath.NewDecFromInt64(2), alloraMath.NewDecFromInt64(3)}, + b: []alloraMath.Dec{alloraMath.NewDecFromInt64(1), alloraMath.NewDecFromInt64(2), alloraMath.NewDecFromInt64(3)}, + epsilon: alloraMath.NewDecFromInt64(0), expected: true, }, { name: "Equal slices within epsilon", - a: []Dec{NewDecFromInt64(0), NewDecFromInt64(-1), NewDecFromInt64(4)}, - b: []Dec{NewDecFromInt64(-1), NewDecFromInt64(-2), NewDecFromInt64(3)}, - epsilon: NewDecFromInt64(1), + a: []alloraMath.Dec{alloraMath.NewDecFromInt64(0), alloraMath.NewDecFromInt64(-1), alloraMath.NewDecFromInt64(4)}, + b: []alloraMath.Dec{alloraMath.NewDecFromInt64(-1), alloraMath.NewDecFromInt64(-2), alloraMath.NewDecFromInt64(3)}, + epsilon: alloraMath.NewDecFromInt64(1), expected: true, }, { name: "Equal slices NOT within epsilon", - a: []Dec{NewDecFromInt64(1), NewDecFromInt64(2), NewDecFromInt64(5)}, - b: []Dec{NewDecFromInt64(1), NewDecFromInt64(2), NewDecFromInt64(3)}, - epsilon: NewDecFromInt64(1), + a: []alloraMath.Dec{alloraMath.NewDecFromInt64(1), alloraMath.NewDecFromInt64(2), alloraMath.NewDecFromInt64(5)}, + b: []alloraMath.Dec{alloraMath.NewDecFromInt64(1), alloraMath.NewDecFromInt64(2), alloraMath.NewDecFromInt64(3)}, + epsilon: alloraMath.NewDecFromInt64(1), expected: false, }, { name: "Different slices within epsilon", - a: []Dec{NewDecFromInt64(-1), NewDecFromInt64(2), NewDecFromInt64(3)}, - b: []Dec{NewDecFromInt64(2), NewDecFromInt64(5), NewDecFromInt64(6)}, - epsilon: NewDecFromInt64(3), + a: []alloraMath.Dec{alloraMath.NewDecFromInt64(-1), alloraMath.NewDecFromInt64(2), alloraMath.NewDecFromInt64(3)}, + b: []alloraMath.Dec{alloraMath.NewDecFromInt64(2), alloraMath.NewDecFromInt64(5), alloraMath.NewDecFromInt64(6)}, + epsilon: alloraMath.NewDecFromInt64(3), expected: true, }, { name: "Different slices outside epsilon", - a: []Dec{NewDecFromInt64(1), NewDecFromInt64(2), NewDecFromInt64(3)}, - b: []Dec{NewDecFromInt64(4), NewDecFromInt64(5), NewDecFromInt64(6)}, - epsilon: NewDecFromInt64(1), + a: []alloraMath.Dec{alloraMath.NewDecFromInt64(1), alloraMath.NewDecFromInt64(2), alloraMath.NewDecFromInt64(3)}, + b: []alloraMath.Dec{alloraMath.NewDecFromInt64(4), alloraMath.NewDecFromInt64(5), alloraMath.NewDecFromInt64(6)}, + epsilon: alloraMath.NewDecFromInt64(1), expected: false, }, { name: "Different slice lengths", - a: []Dec{NewDecFromInt64(1), NewDecFromInt64(2), NewDecFromInt64(3)}, - b: []Dec{NewDecFromInt64(1), NewDecFromInt64(2)}, - epsilon: NewDecFromInt64(0), + a: []alloraMath.Dec{alloraMath.NewDecFromInt64(1), alloraMath.NewDecFromInt64(2), alloraMath.NewDecFromInt64(3)}, + b: []alloraMath.Dec{alloraMath.NewDecFromInt64(1), alloraMath.NewDecFromInt64(2)}, + epsilon: alloraMath.NewDecFromInt64(0), expected: false, }, { name: "Empty slice", - a: []Dec{}, - b: []Dec{}, - epsilon: NewDecFromInt64(0), + a: []alloraMath.Dec{}, + b: []alloraMath.Dec{}, + epsilon: alloraMath.NewDecFromInt64(0), expected: true, }, } @@ -868,7 +890,7 @@ func TestSlicesInDelta(t *testing.T) { // Run test cases for _, tc := range testCases { t.Run(tc.name, func(t *testing.T) { - result := SlicesInDelta(tc.a, tc.b, tc.epsilon) + result := alloraMath.SlicesInDelta(tc.a, tc.b, tc.epsilon) require.Equal(t, tc.expected, result) }) } @@ -876,109 +898,46 @@ func TestSlicesInDelta(t *testing.T) { func TestSumDecSlice(t *testing.T) { // Test case 1: Empty slice - x := []Dec{} - expectedSum := ZeroDec() + x := []alloraMath.Dec{} + expectedSum := alloraMath.ZeroDec() - sum, err := SumDecSlice(x) + sum, err := alloraMath.SumDecSlice(x) require.NoError(t, err) require.True(t, sum.Equal(expectedSum), "Expected sum to be zero") // Test case 2: Slice with positive values - x = []Dec{ - NewDecFromInt64(1), - NewDecFromInt64(2), - NewDecFromInt64(3), + x = []alloraMath.Dec{ + alloraMath.NewDecFromInt64(1), + alloraMath.NewDecFromInt64(2), + alloraMath.NewDecFromInt64(3), } - expectedSum = NewDecFromInt64(6) + expectedSum = alloraMath.NewDecFromInt64(6) - sum, err = SumDecSlice(x) + sum, err = alloraMath.SumDecSlice(x) require.NoError(t, err) require.True(t, sum.Equal(expectedSum), "Expected sum to be 6") // Test case 3: Slice with negative values - x = []Dec{ - NewDecFromInt64(-1), - NewDecFromInt64(-2), - NewDecFromInt64(-3), + x = []alloraMath.Dec{ + alloraMath.NewDecFromInt64(-1), + alloraMath.NewDecFromInt64(-2), + alloraMath.NewDecFromInt64(-3), } - expectedSum = NewDecFromInt64(-6) + expectedSum = alloraMath.NewDecFromInt64(-6) - sum, err = SumDecSlice(x) + sum, err = alloraMath.SumDecSlice(x) require.NoError(t, err) require.True(t, sum.Equal(expectedSum), "Expected sum to be -6") // Test case 4: Slice with mixed positive and negative values - x = []Dec{ - NewDecFromInt64(1), - NewDecFromInt64(-2), - NewDecFromInt64(3), + x = []alloraMath.Dec{ + alloraMath.NewDecFromInt64(1), + alloraMath.NewDecFromInt64(-2), + alloraMath.NewDecFromInt64(3), } - expectedSum = NewDecFromInt64(2) + expectedSum = alloraMath.NewDecFromInt64(2) - sum, err = SumDecSlice(x) + sum, err = alloraMath.SumDecSlice(x) require.NoError(t, err) require.True(t, sum.Equal(expectedSum), "Expected sum to be 2") } - -func TestDecReduce(t *testing.T) { - // Test case 1 - x := NewDecFromInt64(12345678900) - expectedY := NewDecFromInt64(123456789) - expectedN := 2 - - y, n := x.Reduce() - - require.Equal(t, expectedY.dec.Coeff, y.dec.Coeff) - require.Equal(t, expectedN, n) - - // Test case 2 - x = NewDecFromInt64(0) - expectedY = NewDecFromInt64(0) - expectedN = 0 - - y, n = x.Reduce() - - require.Equal(t, expectedY.dec.Coeff, y.dec.Coeff) - require.Equal(t, expectedN, n) - - // Test case 3 - x = NewDecFromInt64(10000.000) - expectedY = NewDecFromInt64(1) - expectedN = 4 - - y, n = x.Reduce() - - require.Equal(t, expectedY.dec.Coeff, y.dec.Coeff) - require.Equal(t, expectedN, n) - - // Test case 4 - x = NewDecFromInt64(0000.000) - expectedY = NewDecFromInt64(0) - expectedN = 0 - - y, n = x.Reduce() - - require.Equal(t, expectedY.dec.Coeff, y.dec.Coeff) - require.Equal(t, expectedN, n) - - // Test case 5 - x = NewDecFromInt64(-1234560000.000) - expectedY = NewDecFromInt64(123456) - expectedN = 4 - - y, n = x.Reduce() - - require.Equal(t, expectedY.dec.Coeff, y.dec.Coeff) - require.True(t, y.dec.Negative) - require.Equal(t, expectedN, n) - - // Test case 6 - x = NewDecFromInt64(-123456000000.000) - expectedN = 6 - strX := "-123456000000" - - y, n = x.Reduce() - - require.Equal(t, strX, y.String()) - require.Equal(t, expectedN, n) -} diff --git a/math/dec_test_internal.go b/math/dec_test_internal.go new file mode 100644 index 000000000..917bb2461 --- /dev/null +++ b/math/dec_test_internal.go @@ -0,0 +1,72 @@ +package math + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +// This function cannot run in the math_test package +// because it needs direct access to the apd.Coeff field +func TestDecReduce(t *testing.T) { + // Test case 1 + x := NewDecFromInt64(12345678900) + expectedY := NewDecFromInt64(123456789) + expectedN := 2 + + y, n := x.Reduce() + + require.Equal(t, expectedY.dec.Coeff, y.dec.Coeff) + require.Equal(t, expectedN, n) + + // Test case 2 + x = NewDecFromInt64(0) + expectedY = NewDecFromInt64(0) + expectedN = 0 + + y, n = x.Reduce() + + require.Equal(t, expectedY.dec.Coeff, y.dec.Coeff) + require.Equal(t, expectedN, n) + + // Test case 3 + x = NewDecFromInt64(10000.000) + expectedY = NewDecFromInt64(1) + expectedN = 4 + + y, n = x.Reduce() + + require.Equal(t, expectedY.dec.Coeff, y.dec.Coeff) + require.Equal(t, expectedN, n) + + // Test case 4 + x = NewDecFromInt64(0000.000) + expectedY = NewDecFromInt64(0) + expectedN = 0 + + y, n = x.Reduce() + + require.Equal(t, expectedY.dec.Coeff, y.dec.Coeff) + require.Equal(t, expectedN, n) + + // Test case 5 + x = NewDecFromInt64(-1234560000.000) + expectedY = NewDecFromInt64(123456) + expectedN = 4 + + y, n = x.Reduce() + + require.Equal(t, expectedY.dec.Coeff, y.dec.Coeff) + require.True(t, y.dec.Negative) + require.Equal(t, expectedN, n) + + // Test case 6 + x = NewDecFromInt64(-123456000000.000) + expectedN = 6 + strX := "-123456000000" + + y, n = x.Reduce() + + require.Equal(t, strX, y.String()) + require.Equal(t, expectedN, n) +} diff --git a/scripts/l1_node.sh b/scripts/l1_node.sh index 848d42a1f..a4d9e88b3 100755 --- a/scripts/l1_node.sh +++ b/scripts/l1_node.sh @@ -1,5 +1,5 @@ #!/bin/bash -set -ex +set -e NETWORK="${NETWORK:-allora-testnet-1}" #! Replace with your network name GENESIS_URL="https://raw.githubusercontent.com/allora-network/networks/main/${NETWORK}/genesis.json" @@ -15,9 +15,18 @@ GENESIS_FILE="${APP_HOME}/config/genesis.json" DENOM="uallo" RPC_PORT="${RPC_PORT:-26657}" -# uncomment this block if you want to restore from a snapshot -# SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -# "${SCRIPT_DIR}/restore_snapshot.sh" +if [ "$RESTORE_S3_SNAPSHOT" == "true" ]; then + SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" + "${SCRIPT_DIR}/restore_snapshot.sh" +fi + +BINARY="" +if [ "$UPGRADE" == "true" ]; then + echo "You have set upgrade to true, please make sure you are running the correct docker image (vx.x.x-upgrader)" + BINARY=/cosmovisor/genesis/bin/allorad +else + BINARY=allorad +fi echo "To re-initiate the node, remove the file: ${INIT_FLAG}" if [ ! -f $INIT_FLAG ]; then @@ -28,7 +37,7 @@ if [ ! -f $INIT_FLAG ]; then ln -sf ${APP_HOME} ${HOME}/.allorad #* Init node - allorad --home=${APP_HOME} init ${MONIKER} --chain-id=${NETWORK} --default-denom $DENOM + $BINARY --home=${APP_HOME} init ${MONIKER} --chain-id=${NETWORK} --default-denom $DENOM #* Download genesis rm -f $GENESIS_FILE @@ -36,15 +45,15 @@ if [ ! -f $INIT_FLAG ]; then #* Import allora account, priv_validator_key.json and node_key.json from the vault here #* Here create a new allorad account - allorad --home $APP_HOME keys add ${MONIKER} --keyring-backend $KEYRING_BACKEND > $APP_HOME/${MONIKER}.account_info 2>&1 + $BINARY --home $APP_HOME keys add ${MONIKER} --keyring-backend $KEYRING_BACKEND > $APP_HOME/${MONIKER}.account_info 2>&1 #* Adjust configs #* Enable prometheus metrics #dasel put -t bool -v true 'instrumentation.prometheus' -f ${APP_HOME}/config/config.toml #* Setup allorad client - allorad --home=${APP_HOME} config set client chain-id ${NETWORK} - allorad --home=${APP_HOME} config set client keyring-backend $KEYRING_BACKEND + $BINARY --home=${APP_HOME} config set client chain-id ${NETWORK} + $BINARY --home=${APP_HOME} config set client keyring-backend $KEYRING_BACKEND #* Mitigate mempool spamming attacks dasel put mempool.max_txs_bytes -t int -v 2097152 -f ${APP_HOME}/config/config.toml @@ -76,12 +85,31 @@ if [ "x${STATE_SYNC_RPC1}" != "x" ]; then dasel put statesync.trust_hash -t string -v $TRUST_HEIGHT_HASH -f ${APP_HOME}/config/config.toml fi -echo "Starting validator node" -allorad \ - --home=${APP_HOME} \ - start \ - --moniker=${MONIKER} \ - --minimum-gas-prices=0${DENOM} \ - --rpc.laddr=tcp://0.0.0.0:${RPC_PORT} \ - --p2p.seeds=$SEEDS \ - --p2p.persistent_peers $PEERS +if [ "$UPGRADE" == "true" ]; then + if [ ! -d "/data/cosmovisor" ]; then + echo "initialize cosmovisor" + cp -R /cosmovisor /data/ + cosmovisor init /data/cosmovisor/genesis/bin/allorad + fi + + echo "Starting validator node with cosmovisor" + cosmovisor \ + run \ + --home=${APP_HOME} \ + start \ + --moniker=${MONIKER} \ + --minimum-gas-prices=0${DENOM} \ + --rpc.laddr=tcp://0.0.0.0:26657 \ + --p2p.seeds=$SEEDS \ + --p2p.persistent_peers $PEERS +else + echo "Starting validator node without cosmovisor" + allorad \ + --home=${APP_HOME} \ + start \ + --moniker=${MONIKER} \ + --minimum-gas-prices=0${DENOM} \ + --rpc.laddr=tcp://0.0.0.0:26657 \ + --p2p.seeds=$SEEDS \ + --p2p.persistent_peers $PEERS +fi diff --git a/scripts/restore_snapshot.sh b/scripts/restore_snapshot.sh index f8fb5b0f4..e927a23b2 100755 --- a/scripts/restore_snapshot.sh +++ b/scripts/restore_snapshot.sh @@ -7,12 +7,12 @@ RED='\033[0;31m' NC='\033[0m' RESTORED_FLAG="${APP_HOME}/snapshot-restored.txt" -S3_BUCKET="allora-edgenet-backups" +S3_BUCKET="allora-testnet-1-backups" LATEST_BACKUP_FILE_NAME="latest_backup.txt" RCLONE_S3_NAME="allora_s3" #! Replace with your rclone S3 name echo -e "Please ensure ${GREEN}allorad, rclone and zstd${NC} are installed and setup on your machine before running this script." -echo -e "For rclone, please make sure to set ${GREEN}requester_pays: true${NC} in advance configuration" +echo -e "For rclone, please make sure to set ${GREEN}requester_pays: true${NC} in advance configuration of rclone config" echo "After installing, re-run this script." read -p "$(echo -e ${YELLOW}'Press [Enter] key to continue if dependencies are already installed... '${NC})" diff --git a/test/integration/worker_inference_and_forecast_test.go b/test/integration/worker_inference_and_forecast_test.go index 1fb24ec28..095751ca6 100644 --- a/test/integration/worker_inference_and_forecast_test.go +++ b/test/integration/worker_inference_and_forecast_test.go @@ -48,7 +48,6 @@ func InsertSingleWorkerPayload(m testCommon.TestConfig, topic *types.Topic, bloc // Define inferer address as Bob's address InfererAddress1 := m.BobAddr - // Create a MsgInsertBulkReputerPayload message workerMsg := &types.MsgInsertWorkerPayload{ Sender: InfererAddress1, WorkerDataBundle: &types.WorkerDataBundle{ @@ -107,8 +106,8 @@ func InsertSingleWorkerPayload(m testCommon.TestConfig, topic *types.Topic, bloc return nil } -// Worker Bob inserts bulk inference and forecast -func InsertWorkerBulk(m testCommon.TestConfig, topic *types.Topic) (int64, error) { +// Worker Bob inserts inference and forecast +func InsertWorkerBundle(m testCommon.TestConfig, topic *types.Topic) (int64, error) { ctx := context.Background() currentBlock, err := m.Client.BlockHeight(ctx) if err != nil { @@ -122,7 +121,7 @@ func InsertWorkerBulk(m testCommon.TestConfig, topic *types.Topic) (int64, error // Insert and fulfill nonces for the last two epochs blockHeightEval := freshTopic.EpochLastEnded - m.T.Log(time.Now(), "Inserting worker bulk for blockHeightEval: ", blockHeightEval, "; Current block: ", currentBlock) + m.T.Log(time.Now(), "Inserting worker bundle for blockHeightEval: ", blockHeightEval, "; Current block: ", currentBlock) err = InsertSingleWorkerPayload(m, freshTopic, blockHeightEval) if err != nil { return 0, err @@ -131,7 +130,7 @@ func InsertWorkerBulk(m testCommon.TestConfig, topic *types.Topic) (int64, error } // register alice as a reputer in topic 1, then check success -func InsertReputerBulk(m testCommon.TestConfig, topic *types.Topic, BlockHeightCurrent int64) error { +func InsertReputerBundle(m testCommon.TestConfig, topic *types.Topic, BlockHeightCurrent int64) error { ctx := context.Background() // Nonce: calculate from EpochLastRan + EpochLength topicId := topic.Id @@ -202,7 +201,6 @@ func InsertReputerBulk(m testCommon.TestConfig, topic *types.Topic, BlockHeightC } reputerPublicKeyBytes := pubKey.Bytes() - // Create a MsgInsertBulkReputerPayload message lossesMsg := &types.MsgInsertReputerPayload{ Sender: reputerAddr, ReputerValueBundle: &types.ReputerValueBundle{ @@ -248,16 +246,16 @@ func WorkerInferenceAndForecastChecks(m testCommon.TestConfig) { m.T.Log(time.Now(), "--- Failed getting a topic that was ran ---") require.NoError(m.T, err) } - m.T.Log(time.Now(), "--- Insert Worker Bulk ---") + m.T.Log(time.Now(), "--- Insert Worker Bundle ---") // Waiting for ground truth lag to pass - m.T.Log(time.Now(), "--- Waiting to Insert Reputer Bulk ---") + m.T.Log(time.Now(), "--- Waiting to Insert Reputer Bundle ---") blockHeightNonce, err := RunWithRetry(m, 3, 2, func() (int64, error) { topicResponse, err := m.Client.QueryEmissions().GetTopic(ctx, &types.QueryTopicRequest{TopicId: topic.Id}) if err != nil { return 0, err } topic := topicResponse.Topic - _, err = InsertWorkerBulk(m, topic) // Assuming InsertReputerBulk returns (int, error) + _, err = InsertWorkerBundle(m, topic) // Assuming InsertReputerBundle returns (int, error) if err != nil { return 0, err } @@ -274,8 +272,8 @@ func WorkerInferenceAndForecastChecks(m testCommon.TestConfig) { require.NoError(m.T, err) } - m.T.Log(time.Now(), "--- Insert Reputer Bulk ---") - err = InsertReputerBulk(m, topic, blockHeightNonce) + m.T.Log(time.Now(), "--- Insert Reputer Bundle ---") + err = InsertReputerBundle(m, topic, blockHeightNonce) if err != nil { m.T.Log(time.Now(), "--- Failed inserting reputer payload ---") require.NoError(m.T, err) diff --git a/test/stress/README.md b/test/stress/README.md index 00d70605f..7ead3a331 100644 --- a/test/stress/README.md +++ b/test/stress/README.md @@ -10,7 +10,7 @@ To run stress tests, set the STRESS_TEST variable to true ``` cd stress -STRESS_TEST=true RPC_MODE="RandomBasedOnDeterministicSeed" RPC_URLS="http://localhost:26657,http://localhost:26658,http://localhost:26659" SEED=1 MAX_REPUTERS_PER_TOPIC=2 REPUTERS_PER_ITERATION=2 EPOCH_LENGTH=10 FINAL_REPORT=TRUE MAX_WORKERS_PER_TOPIC=2 WORKERS_PER_ITERATION=1 TOPICS_MAX=2 TOPICS_PER_ITERATION=1 MAX_ITERATIONS=2 go test -v -timeout 0 -test.run TestStressTestSuite ./test/stress +STRESS_TEST=true RPC_MODE="RandomBasedOnDeterministicSeed" RPC_URLS="http://localhost:26657,http://localhost:26658,http://localhost:26659" SEED=1 MAX_REPUTERS_PER_TOPIC=2 REPUTERS_PER_ITERATION=2 EPOCH_LENGTH=12 FINAL_REPORT=TRUE MAX_WORKERS_PER_TOPIC=2 WORKERS_PER_ITERATION=1 TOPICS_MAX=2 TOPICS_PER_ITERATION=1 MAX_ITERATIONS=2 go test -v -timeout 0 -test.run TestStressTestSuite ./test/stress ``` options for RPC Modes include "RandomBasedOnDeterministicSeed" "RoundRobin" and "SingleRpc" diff --git a/test/stress/n_workers_reputers_stress_test.go b/test/stress/n_workers_reputers_stress_test.go index 5ca0d4d99..d0a8506bf 100644 --- a/test/stress/n_workers_reputers_stress_test.go +++ b/test/stress/n_workers_reputers_stress_test.go @@ -268,7 +268,7 @@ func workerReputerLoop( } // Generate and insert reputer bundle scoring workers - err = generateInsertReputerBulk( + err = generateInsertReputerBundle( m, topic, reputers, diff --git a/test/stress/reputers_test.go b/test/stress/reputers_test.go index f6dd9bd60..12d11cf46 100644 --- a/test/stress/reputers_test.go +++ b/test/stress/reputers_test.go @@ -98,8 +98,8 @@ func registerReputersForIteration( return countReputers } -// Insert reputer bulk, choosing one random leader from the reputer accounts -func generateInsertReputerBulk( +// Insert reputer bundle +func generateInsertReputerBundle( m testCommon.TestConfig, topic *emissionstypes.Topic, reputers NameToAccountMap, @@ -108,22 +108,21 @@ func generateInsertReputerBulk( retryTimes int, makeReport bool, ) error { - leaderReputerAccountName, err := pickRandomKeyFromMap(reputers) + reputerAccountName, err := pickRandomKeyFromMap(reputers) if err != nil { m.T.Log(topicLog(topic.Id, "Error getting random worker address: ", err)) if makeReport { - saveReputerError(topic.Id, leaderReputerAccountName, err) + saveReputerError(topic.Id, reputerAccountName, err) saveTopicError(topic.Id, err) } return err } // ground truth lag is 10 blocks blockHeightCurrent := insertedBlockHeight + topic.EpochLength - blockHeightEval := insertedBlockHeight startReputer := time.Now() for i := 0; i < retryTimes; i++ { - err = insertReputerPayload(m, topic, leaderReputerAccountName, reputers, workers, blockHeightCurrent, blockHeightEval) + err = insertReputerPayload(m, topic, reputerAccountName, reputers, workers, blockHeightCurrent) if err != nil { if strings.Contains(err.Error(), "nonce already fulfilled") || strings.Contains(err.Error(), "nonce still unfulfilled") { @@ -132,28 +131,27 @@ func generateInsertReputerBulk( topic, err = getLastTopic(ctx, m.Client.QueryEmissions(), topic.Id) if err == nil { blockHeightCurrent = topic.EpochLastEnded + topic.EpochLength - blockHeightEval = blockHeightCurrent - topic.EpochLength - m.T.Log(topicLog(topic.Id, "Reset ", leaderReputerAccountName, "blockHeights to (", blockHeightCurrent, ",", blockHeightEval, ")")) + m.T.Log(topicLog(topic.Id, "Reset ", reputerAccountName, "blockHeights to (", blockHeightCurrent, ")")) } else { m.T.Log(topicLog(topic.Id, "Error getting topic!")) if makeReport { - saveReputerError(topic.Id, leaderReputerAccountName, err) + saveReputerError(topic.Id, reputerAccountName, err) saveTopicError(topic.Id, err) } return err } } else { - m.T.Log(topicLog(topic.Id, "Error inserting reputer bulk: ", err)) + m.T.Log(topicLog(topic.Id, "Error inserting reputer bundle: ", err)) if makeReport { - saveReputerError(topic.Id, leaderReputerAccountName, err) + saveReputerError(topic.Id, reputerAccountName, err) saveTopicError(topic.Id, err) } return err } } else { - m.T.Log(topicLog(topic.Id, "Inserted reputer bulk, blockHeight: ", blockHeightCurrent, " with ", len(reputers), " reputers")) - elapsedBulk := time.Since(startReputer) - m.T.Log(topicLog(topic.Id, "Insert Reputer ", leaderReputerAccountName, " Elapsed time:", elapsedBulk)) + m.T.Log(topicLog(topic.Id, "Inserted reputer bundle, blockHeight: ", blockHeightCurrent, " with ", len(reputers), " reputers")) + elapsedBundle := time.Since(startReputer) + m.T.Log(topicLog(topic.Id, "Insert Reputer ", reputerAccountName, " Elapsed time:", elapsedBundle)) return nil } } @@ -244,15 +242,12 @@ func generateSingleReputerValueBundle( func insertReputerPayload( m testCommon.TestConfig, topic *emissionstypes.Topic, - leaderReputerAccountName string, + reputerAccountName string, reputerAddresses, workerAddresses NameToAccountMap, - BlockHeightCurrent, - BlockHeightEval int64, + BlockHeightCurrent int64, ) error { - // Nonce: calculate from EpochLastRan + EpochLength topicId := topic.Id - // Nonces are last two blockHeights reputerNonce := &emissionstypes.Nonce{ BlockHeight: BlockHeightCurrent, } @@ -264,7 +259,7 @@ func insertReputerPayload( senderAcc, err := m.Client.AccountRegistryGetByName(reputerAddressName) if err != nil { - m.T.Log(topicLog(topicId, "Error getting leader worker account: ", leaderReputerAccountName, " - ", err)) + m.T.Log(topicLog(topicId, "Error getting worker account: ", reputerAccountName, " - ", err)) return err } txResp, err := m.Client.BroadcastTx(ctx, senderAcc, reputerValueBundle) diff --git a/test/stress/stress_test.go b/test/stress/stress_test.go index e9233d2f1..b8fabb050 100644 --- a/test/stress/stress_test.go +++ b/test/stress/stress_test.go @@ -39,7 +39,7 @@ func TestStressTestSuite(t *testing.T) { topicsPerIteration := testCommon.LookupEnvInt(t, "TOPICS_PER_ITERATION", 1) topicsMax := testCommon.LookupEnvInt(t, "TOPICS_MAX", 100) maxIterations := testCommon.LookupEnvInt(t, "MAX_ITERATIONS", 1000) - epochLength := testCommon.LookupEnvInt(t, "EPOCH_LENGTH", 5) + epochLength := testCommon.LookupEnvInt(t, "EPOCH_LENGTH", 12) doFinalReport := testCommon.LookupEnvBool(t, "FINAL_REPORT", false) t.Log("Reputers per iteration: ", reputersPerIteration) diff --git a/test/stress/workers_test.go b/test/stress/workers_test.go index 428ce7d9e..8a9a5e2b8 100644 --- a/test/stress/workers_test.go +++ b/test/stress/workers_test.go @@ -143,7 +143,7 @@ func insertWorkerPayloads( // serialize workerMsg to json and print senderAcc, err := m.Client.AccountRegistryGetByName(key) if err != nil { - m.T.Log(topicLog(topic.Id, "Error getting leader worker account: ", senderAcc, " - ", err)) + m.T.Log(topicLog(topic.Id, "Error getting worker account: ", senderAcc, " - ", err)) return err } ctx := context.Background() diff --git a/x/emissions/api/v2/query.pulsar.go b/x/emissions/api/v2/query.pulsar.go index 244daf275..23041e4ee 100644 --- a/x/emissions/api/v2/query.pulsar.go +++ b/x/emissions/api/v2/query.pulsar.go @@ -21606,7 +21606,6 @@ var ( md_QueryNetworkInferencesAtBlockRequest protoreflect.MessageDescriptor fd_QueryNetworkInferencesAtBlockRequest_topic_id protoreflect.FieldDescriptor fd_QueryNetworkInferencesAtBlockRequest_block_height_last_inference protoreflect.FieldDescriptor - fd_QueryNetworkInferencesAtBlockRequest_block_height_last_reward protoreflect.FieldDescriptor ) func init() { @@ -21614,7 +21613,6 @@ func init() { md_QueryNetworkInferencesAtBlockRequest = File_emissions_v2_query_proto.Messages().ByName("QueryNetworkInferencesAtBlockRequest") fd_QueryNetworkInferencesAtBlockRequest_topic_id = md_QueryNetworkInferencesAtBlockRequest.Fields().ByName("topic_id") fd_QueryNetworkInferencesAtBlockRequest_block_height_last_inference = md_QueryNetworkInferencesAtBlockRequest.Fields().ByName("block_height_last_inference") - fd_QueryNetworkInferencesAtBlockRequest_block_height_last_reward = md_QueryNetworkInferencesAtBlockRequest.Fields().ByName("block_height_last_reward") } var _ protoreflect.Message = (*fastReflection_QueryNetworkInferencesAtBlockRequest)(nil) @@ -21694,12 +21692,6 @@ func (x *fastReflection_QueryNetworkInferencesAtBlockRequest) Range(f func(proto return } } - if x.BlockHeightLastReward != int64(0) { - value := protoreflect.ValueOfInt64(x.BlockHeightLastReward) - if !f(fd_QueryNetworkInferencesAtBlockRequest_block_height_last_reward, value) { - return - } - } } // Has reports whether a field is populated. @@ -21719,8 +21711,6 @@ func (x *fastReflection_QueryNetworkInferencesAtBlockRequest) Has(fd protoreflec return x.TopicId != uint64(0) case "emissions.v2.QueryNetworkInferencesAtBlockRequest.block_height_last_inference": return x.BlockHeightLastInference != int64(0) - case "emissions.v2.QueryNetworkInferencesAtBlockRequest.block_height_last_reward": - return x.BlockHeightLastReward != int64(0) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: emissions.v2.QueryNetworkInferencesAtBlockRequest")) @@ -21741,8 +21731,6 @@ func (x *fastReflection_QueryNetworkInferencesAtBlockRequest) Clear(fd protorefl x.TopicId = uint64(0) case "emissions.v2.QueryNetworkInferencesAtBlockRequest.block_height_last_inference": x.BlockHeightLastInference = int64(0) - case "emissions.v2.QueryNetworkInferencesAtBlockRequest.block_height_last_reward": - x.BlockHeightLastReward = int64(0) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: emissions.v2.QueryNetworkInferencesAtBlockRequest")) @@ -21765,9 +21753,6 @@ func (x *fastReflection_QueryNetworkInferencesAtBlockRequest) Get(descriptor pro case "emissions.v2.QueryNetworkInferencesAtBlockRequest.block_height_last_inference": value := x.BlockHeightLastInference return protoreflect.ValueOfInt64(value) - case "emissions.v2.QueryNetworkInferencesAtBlockRequest.block_height_last_reward": - value := x.BlockHeightLastReward - return protoreflect.ValueOfInt64(value) default: if descriptor.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: emissions.v2.QueryNetworkInferencesAtBlockRequest")) @@ -21792,8 +21777,6 @@ func (x *fastReflection_QueryNetworkInferencesAtBlockRequest) Set(fd protoreflec x.TopicId = value.Uint() case "emissions.v2.QueryNetworkInferencesAtBlockRequest.block_height_last_inference": x.BlockHeightLastInference = value.Int() - case "emissions.v2.QueryNetworkInferencesAtBlockRequest.block_height_last_reward": - x.BlockHeightLastReward = value.Int() default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: emissions.v2.QueryNetworkInferencesAtBlockRequest")) @@ -21818,8 +21801,6 @@ func (x *fastReflection_QueryNetworkInferencesAtBlockRequest) Mutable(fd protore panic(fmt.Errorf("field topic_id of message emissions.v2.QueryNetworkInferencesAtBlockRequest is not mutable")) case "emissions.v2.QueryNetworkInferencesAtBlockRequest.block_height_last_inference": panic(fmt.Errorf("field block_height_last_inference of message emissions.v2.QueryNetworkInferencesAtBlockRequest is not mutable")) - case "emissions.v2.QueryNetworkInferencesAtBlockRequest.block_height_last_reward": - panic(fmt.Errorf("field block_height_last_reward of message emissions.v2.QueryNetworkInferencesAtBlockRequest is not mutable")) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: emissions.v2.QueryNetworkInferencesAtBlockRequest")) @@ -21837,8 +21818,6 @@ func (x *fastReflection_QueryNetworkInferencesAtBlockRequest) NewField(fd protor return protoreflect.ValueOfUint64(uint64(0)) case "emissions.v2.QueryNetworkInferencesAtBlockRequest.block_height_last_inference": return protoreflect.ValueOfInt64(int64(0)) - case "emissions.v2.QueryNetworkInferencesAtBlockRequest.block_height_last_reward": - return protoreflect.ValueOfInt64(int64(0)) default: if fd.IsExtension() { panic(fmt.Errorf("proto3 declared messages do not support extensions: emissions.v2.QueryNetworkInferencesAtBlockRequest")) @@ -21914,9 +21893,6 @@ func (x *fastReflection_QueryNetworkInferencesAtBlockRequest) ProtoMethods() *pr if x.BlockHeightLastInference != 0 { n += 1 + runtime.Sov(uint64(x.BlockHeightLastInference)) } - if x.BlockHeightLastReward != 0 { - n += 1 + runtime.Sov(uint64(x.BlockHeightLastReward)) - } if x.unknownFields != nil { n += len(x.unknownFields) } @@ -21946,11 +21922,6 @@ func (x *fastReflection_QueryNetworkInferencesAtBlockRequest) ProtoMethods() *pr i -= len(x.unknownFields) copy(dAtA[i:], x.unknownFields) } - if x.BlockHeightLastReward != 0 { - i = runtime.EncodeVarint(dAtA, i, uint64(x.BlockHeightLastReward)) - i-- - dAtA[i] = 0x18 - } if x.BlockHeightLastInference != 0 { i = runtime.EncodeVarint(dAtA, i, uint64(x.BlockHeightLastInference)) i-- @@ -22048,25 +22019,6 @@ func (x *fastReflection_QueryNetworkInferencesAtBlockRequest) ProtoMethods() *pr break } } - case 3: - if wireType != 0 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field BlockHeightLastReward", wireType) - } - x.BlockHeightLastReward = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow - } - if iNdEx >= l { - return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - x.BlockHeightLastReward |= int64(b&0x7F) << shift - if b < 0x80 { - break - } - } default: iNdEx = preIndex skippy, err := runtime.Skip(dAtA[iNdEx:]) @@ -63292,7 +63244,6 @@ type QueryNetworkInferencesAtBlockRequest struct { TopicId uint64 `protobuf:"varint,1,opt,name=topic_id,json=topicId,proto3" json:"topic_id,omitempty"` BlockHeightLastInference int64 `protobuf:"varint,2,opt,name=block_height_last_inference,json=blockHeightLastInference,proto3" json:"block_height_last_inference,omitempty"` - BlockHeightLastReward int64 `protobuf:"varint,3,opt,name=block_height_last_reward,json=blockHeightLastReward,proto3" json:"block_height_last_reward,omitempty"` } func (x *QueryNetworkInferencesAtBlockRequest) Reset() { @@ -63329,13 +63280,6 @@ func (x *QueryNetworkInferencesAtBlockRequest) GetBlockHeightLastInference() int return 0 } -func (x *QueryNetworkInferencesAtBlockRequest) GetBlockHeightLastReward() int64 { - if x != nil { - return x.BlockHeightLastReward - } - return 0 -} - type QueryLatestNetworkInferencesRequest struct { state protoimpl.MessageState sizeCache protoimpl.SizeCache @@ -67043,7 +66987,7 @@ var file_emissions_v2_query_proto_rawDesc = []byte{ 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1a, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x4f, 0x66, 0x66, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x4e, 0x6f, 0x64, 0x65, 0x52, 0x08, 0x6e, 0x6f, 0x64, 0x65, 0x49, 0x6e, - 0x66, 0x6f, 0x22, 0xb9, 0x01, 0x0a, 0x24, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x65, 0x74, 0x77, + 0x66, 0x6f, 0x22, 0xa0, 0x01, 0x0a, 0x24, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x41, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, @@ -67051,1007 +66995,1014 @@ var file_emissions_v2_query_proto_rawDesc = []byte{ 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x18, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x4c, 0x61, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x65, - 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x37, 0x0a, 0x18, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x03, 0x52, 0x15, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x4c, 0x61, 0x73, 0x74, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x22, 0x40, - 0x0a, 0x23, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x74, - 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, - 0x22, 0x64, 0x0a, 0x24, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x73, 0x57, 0x6f, 0x72, 0x6b, 0x65, - 0x72, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x55, 0x6e, 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x65, - 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x69, - 0x63, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, 0x6f, 0x70, 0x69, - 0x63, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x66, 0x0a, 0x25, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, - 0x73, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x55, 0x6e, 0x66, 0x75, - 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x3d, 0x0a, 0x1b, 0x69, 0x73, 0x5f, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x5f, 0x6e, 0x6f, 0x6e, - 0x63, 0x65, 0x5f, 0x75, 0x6e, 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x18, 0x69, 0x73, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x4e, 0x6f, - 0x6e, 0x63, 0x65, 0x55, 0x6e, 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x22, 0x41, - 0x0a, 0x24, 0x51, 0x75, 0x65, 0x72, 0x79, 0x55, 0x6e, 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, - 0x65, 0x64, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, - 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, - 0x64, 0x22, 0x63, 0x0a, 0x25, 0x51, 0x75, 0x65, 0x72, 0x79, 0x55, 0x6e, 0x66, 0x75, 0x6c, 0x66, - 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x6e, 0x63, - 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x06, 0x6e, 0x6f, - 0x6e, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x65, 0x6d, 0x69, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, - 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x06, - 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x22, 0x40, 0x0a, 0x23, 0x51, 0x75, 0x65, 0x72, 0x79, 0x55, - 0x6e, 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, + 0x72, 0x65, 0x6e, 0x63, 0x65, 0x4a, 0x04, 0x08, 0x03, 0x10, 0x04, 0x52, 0x18, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x72, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x22, 0x40, 0x0a, 0x23, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4c, 0x61, + 0x74, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x65, 0x72, + 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, + 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, + 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x22, 0x64, 0x0a, 0x24, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x49, 0x73, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x55, 0x6e, 0x66, + 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x07, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x66, 0x0a, + 0x25, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x73, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x4e, 0x6f, + 0x6e, 0x63, 0x65, 0x55, 0x6e, 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3d, 0x0a, 0x1b, 0x69, 0x73, 0x5f, 0x77, 0x6f, 0x72, + 0x6b, 0x65, 0x72, 0x5f, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x5f, 0x75, 0x6e, 0x66, 0x75, 0x6c, 0x66, + 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x18, 0x69, 0x73, 0x57, + 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x55, 0x6e, 0x66, 0x75, 0x6c, 0x66, + 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x22, 0x41, 0x0a, 0x24, 0x51, 0x75, 0x65, 0x72, 0x79, 0x55, 0x6e, + 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x07, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x22, 0x54, 0x0a, 0x24, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x55, 0x6e, 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, - 0x65, 0x72, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x2c, 0x0a, 0x06, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x14, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, - 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x06, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x22, 0x58, - 0x0a, 0x20, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x72, 0x4e, 0x65, + 0x07, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x22, 0x63, 0x0a, 0x25, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x55, 0x6e, 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x70, 0x75, + 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x3a, 0x0a, 0x06, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x0b, 0x32, 0x22, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, + 0x2e, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x4e, + 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x06, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x22, 0x40, 0x0a, + 0x23, 0x51, 0x75, 0x65, 0x72, 0x79, 0x55, 0x6e, 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x65, + 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x22, + 0x54, 0x0a, 0x24, 0x51, 0x75, 0x65, 0x72, 0x79, 0x55, 0x6e, 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, + 0x6c, 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x6e, 0x6f, 0x6e, 0x63, 0x65, + 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x06, 0x6e, + 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x22, 0x58, 0x0a, 0x20, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x6e, + 0x66, 0x65, 0x72, 0x65, 0x72, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x67, 0x72, + 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x70, + 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, 0x6f, 0x70, + 0x69, 0x63, 0x49, 0x64, 0x12, 0x19, 0x0a, 0x08, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x69, 0x64, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x49, 0x64, 0x22, + 0x5b, 0x0a, 0x21, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x72, 0x4e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x67, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x06, 0x72, 0x65, 0x67, 0x72, 0x65, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x65, 0x64, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x72, 0x65, 0x67, 0x72, 0x65, 0x74, 0x22, 0x58, 0x0a, 0x23, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x4e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x67, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x12, 0x16, + 0x0a, 0x06, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, + 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x22, 0x5e, 0x0a, 0x24, 0x51, 0x75, 0x65, 0x72, 0x79, 0x46, + 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x52, 0x65, 0x67, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, + 0x0a, 0x06, 0x72, 0x65, 0x67, 0x72, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, + 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x69, + 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, + 0x72, 0x65, 0x67, 0x72, 0x65, 0x74, 0x22, 0x7f, 0x0a, 0x28, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4f, + 0x6e, 0x65, 0x49, 0x6e, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x67, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x12, 0x19, 0x0a, - 0x08, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x49, 0x64, 0x22, 0x5b, 0x0a, 0x21, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x72, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, - 0x65, 0x67, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, - 0x06, 0x72, 0x65, 0x67, 0x72, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, - 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x72, - 0x65, 0x67, 0x72, 0x65, 0x74, 0x22, 0x58, 0x0a, 0x23, 0x51, 0x75, 0x65, 0x72, 0x79, 0x46, 0x6f, - 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, - 0x65, 0x67, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, - 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, - 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x77, 0x6f, 0x72, 0x6b, 0x65, - 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x22, - 0x5e, 0x0a, 0x24, 0x51, 0x75, 0x65, 0x72, 0x79, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, - 0x65, 0x72, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x67, 0x72, 0x65, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x06, 0x72, 0x65, 0x67, 0x72, 0x65, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, - 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x72, 0x65, 0x67, 0x72, 0x65, 0x74, 0x22, - 0x7f, 0x0a, 0x28, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4f, 0x6e, 0x65, 0x49, 0x6e, 0x46, 0x6f, 0x72, - 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, - 0x67, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, - 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, - 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x66, 0x6f, 0x72, 0x65, 0x63, 0x61, - 0x73, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x6f, 0x72, 0x65, - 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x65, - 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x72, - 0x22, 0x63, 0x0a, 0x29, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4f, 0x6e, 0x65, 0x49, 0x6e, 0x46, 0x6f, - 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, - 0x65, 0x67, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, - 0x06, 0x72, 0x65, 0x67, 0x72, 0x65, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, - 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x72, - 0x65, 0x67, 0x72, 0x65, 0x74, 0x22, 0x65, 0x0a, 0x25, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x73, - 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x55, 0x6e, 0x66, 0x75, - 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, - 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x07, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, - 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x69, 0x0a, 0x26, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x12, 0x1e, 0x0a, + 0x0a, 0x66, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x0a, 0x66, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x12, 0x18, 0x0a, + 0x07, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x69, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x72, 0x22, 0x63, 0x0a, 0x29, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x4f, 0x6e, 0x65, 0x49, 0x6e, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x4e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x67, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x36, 0x0a, 0x06, 0x72, 0x65, 0x67, 0x72, 0x65, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x65, 0x64, 0x56, + 0x61, 0x6c, 0x75, 0x65, 0x52, 0x06, 0x72, 0x65, 0x67, 0x72, 0x65, 0x74, 0x22, 0x65, 0x0a, 0x25, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x73, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x55, 0x6e, 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, 0x1c, 0x69, 0x73, 0x5f, 0x72, 0x65, 0x70, - 0x75, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x5f, 0x75, 0x6e, 0x66, 0x75, 0x6c, - 0x66, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x19, 0x69, 0x73, - 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x55, 0x6e, 0x66, 0x75, - 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x22, 0x71, 0x0a, 0x25, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x73, 0x41, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x48, 0x0a, 0x12, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x69, 0x6e, 0x66, 0x65, - 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x65, - 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x11, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x22, 0xd5, 0x05, 0x0a, 0x24, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x12, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x69, - 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x19, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x11, 0x6e, 0x65, 0x74, 0x77, - 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x4b, 0x0a, - 0x0f, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x72, 0x5f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, - 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x67, 0x72, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, - 0x72, 0x6d, 0x65, 0x64, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x0e, 0x69, 0x6e, 0x66, 0x65, - 0x72, 0x65, 0x72, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, 0x12, 0x51, 0x0a, 0x12, 0x66, 0x6f, - 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, - 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x67, 0x72, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, - 0x72, 0x6d, 0x65, 0x64, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x11, 0x66, 0x6f, 0x72, 0x65, - 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, 0x12, 0x61, 0x0a, - 0x19, 0x66, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x49, 0x6d, 0x70, 0x6c, 0x69, 0x65, 0x64, - 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x23, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, - 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x41, 0x74, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x64, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x19, 0x66, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x49, - 0x6d, 0x70, 0x6c, 0x69, 0x65, 0x64, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, - 0x12, 0x34, 0x0a, 0x16, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x14, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x2a, 0x0a, 0x11, 0x6c, 0x6f, 0x73, 0x73, 0x5f, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x03, 0x52, 0x0f, 0x6c, 0x6f, 0x73, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x12, 0x86, 0x01, 0x0a, 0x23, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x64, 0x65, 0x6e, 0x63, - 0x65, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x5f, 0x72, 0x61, 0x77, 0x5f, 0x70, - 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x6c, 0x65, 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, - 0x42, 0x37, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, - 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x6c, 0x6c, 0x6f, 0x72, 0x61, 0x2d, 0x6e, 0x65, 0x74, 0x77, - 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x6c, 0x6c, 0x6f, 0x72, 0x61, 0x2d, 0x63, 0x68, 0x61, 0x69, 0x6e, - 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x44, 0x65, 0x63, 0x52, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, - 0x64, 0x65, 0x6e, 0x63, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x52, 0x61, 0x77, - 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x75, 0x0a, 0x1a, 0x63, - 0x6f, 0x6e, 0x66, 0x69, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, - 0x61, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x42, - 0x37, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, - 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x6c, 0x6c, 0x6f, 0x72, 0x61, 0x2d, 0x6e, 0x65, 0x74, 0x77, 0x6f, - 0x72, 0x6b, 0x2f, 0x61, 0x6c, 0x6c, 0x6f, 0x72, 0x61, 0x2d, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2f, - 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x44, 0x65, 0x63, 0x52, 0x18, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x64, - 0x65, 0x6e, 0x63, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x73, 0x22, 0x5e, 0x0a, 0x27, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x73, 0x57, 0x6f, 0x72, - 0x6b, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x49, 0x6e, 0x54, - 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, - 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x07, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x22, 0x4f, 0x0a, 0x28, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x73, 0x57, 0x6f, 0x72, - 0x6b, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x49, 0x6e, 0x54, - 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x23, - 0x0a, 0x0d, 0x69, 0x73, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, - 0x72, 0x65, 0x64, 0x22, 0x5f, 0x0a, 0x28, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x73, 0x52, 0x65, - 0x70, 0x75, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x49, - 0x6e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x04, 0x52, 0x07, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x22, 0x50, 0x0a, 0x29, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x73, 0x52, - 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, - 0x49, 0x6e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x73, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, - 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, 0x52, 0x65, 0x67, 0x69, - 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x22, 0x38, 0x0a, 0x1c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, - 0x73, 0x57, 0x68, 0x69, 0x74, 0x65, 0x6c, 0x69, 0x73, 0x74, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x22, 0x3a, 0x0a, 0x1d, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x73, 0x57, 0x68, 0x69, 0x74, 0x65, - 0x6c, 0x69, 0x73, 0x74, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x22, 0x4a, 0x0a, 0x25, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x61, - 0x6c, 0x73, 0x55, 0x70, 0x55, 0x6e, 0x74, 0x69, 0x6c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x64, 0x0a, 0x26, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x55, 0x70, - 0x55, 0x6e, 0x74, 0x69, 0x6c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x08, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x18, 0x01, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x22, 0x52, - 0x0a, 0x2d, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, - 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x55, 0x70, 0x55, 0x6e, - 0x74, 0x69, 0x6c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, - 0x21, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x22, 0x74, 0x0a, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, - 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x73, - 0x55, 0x70, 0x55, 0x6e, 0x74, 0x69, 0x6c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x08, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x73, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x74, - 0x61, 0x6b, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, - 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x22, 0x53, 0x0a, 0x1c, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x6e, 0x66, - 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x69, - 0x63, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, 0x6f, 0x70, 0x69, - 0x63, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x22, 0x59, 0x0a, - 0x1d, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, - 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, - 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1e, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x53, - 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, - 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x22, 0x79, 0x0a, 0x24, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, - 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x04, 0x52, 0x07, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x64, - 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, - 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x70, - 0x75, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x70, 0x75, - 0x74, 0x65, 0x72, 0x22, 0x69, 0x0a, 0x25, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, - 0x67, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, - 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x07, - 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, + 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, + 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, + 0x67, 0x68, 0x74, 0x22, 0x69, 0x0a, 0x26, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x73, 0x52, 0x65, + 0x70, 0x75, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x55, 0x6e, 0x66, 0x75, 0x6c, 0x66, + 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3f, 0x0a, + 0x1c, 0x69, 0x73, 0x5f, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x6f, 0x6e, 0x63, + 0x65, 0x5f, 0x75, 0x6e, 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x19, 0x69, 0x73, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x4e, 0x6f, + 0x6e, 0x63, 0x65, 0x55, 0x6e, 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x22, 0x71, + 0x0a, 0x25, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, + 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x41, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x12, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x5f, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, + 0x76, 0x32, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x52, 0x11, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x73, 0x22, 0xd5, 0x05, 0x0a, 0x24, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4c, 0x61, 0x74, 0x65, 0x73, + 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, + 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x48, 0x0a, 0x12, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c, + 0x65, 0x52, 0x11, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, + 0x6e, 0x63, 0x65, 0x73, 0x12, 0x4b, 0x0a, 0x0f, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x72, 0x5f, + 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, + 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x67, + 0x72, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x57, 0x65, 0x69, 0x67, 0x68, + 0x74, 0x52, 0x0e, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x72, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, + 0x73, 0x12, 0x51, 0x0a, 0x12, 0x66, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x5f, + 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x73, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x22, 0x2e, + 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x67, + 0x72, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x72, 0x6d, 0x65, 0x64, 0x57, 0x65, 0x69, 0x67, 0x68, + 0x74, 0x52, 0x11, 0x66, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x57, 0x65, 0x69, + 0x67, 0x68, 0x74, 0x73, 0x12, 0x61, 0x0a, 0x19, 0x66, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, + 0x49, 0x6d, 0x70, 0x6c, 0x69, 0x65, 0x64, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x73, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x41, 0x74, 0x74, + 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x64, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x52, 0x19, 0x66, 0x6f, + 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x49, 0x6d, 0x70, 0x6c, 0x69, 0x65, 0x64, 0x49, 0x6e, 0x66, + 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x34, 0x0a, 0x16, 0x69, 0x6e, 0x66, 0x65, 0x72, + 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, + 0x74, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x14, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, + 0x63, 0x65, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x2a, 0x0a, + 0x11, 0x6c, 0x6f, 0x73, 0x73, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, + 0x68, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0f, 0x6c, 0x6f, 0x73, 0x73, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x86, 0x01, 0x0a, 0x23, 0x63, 0x6f, + 0x6e, 0x66, 0x69, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, + 0x6c, 0x5f, 0x72, 0x61, 0x77, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x6c, 0x65, + 0x73, 0x18, 0x07, 0x20, 0x03, 0x28, 0x09, 0x42, 0x37, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, + 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x6c, 0x6c, 0x6f, + 0x72, 0x61, 0x2d, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x6c, 0x6c, 0x6f, 0x72, + 0x61, 0x2d, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x44, 0x65, 0x63, + 0x52, 0x20, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x49, 0x6e, 0x74, 0x65, + 0x72, 0x76, 0x61, 0x6c, 0x52, 0x61, 0x77, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x69, 0x6c, + 0x65, 0x73, 0x12, 0x75, 0x0a, 0x1a, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x64, 0x65, 0x6e, 0x63, 0x65, + 0x5f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x76, 0x61, 0x6c, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, + 0x18, 0x08, 0x20, 0x03, 0x28, 0x09, 0x42, 0x37, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x2f, + 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x6c, 0x6c, 0x6f, 0x72, + 0x61, 0x2d, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x6c, 0x6c, 0x6f, 0x72, 0x61, + 0x2d, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x44, 0x65, 0x63, 0x52, + 0x18, 0x63, 0x6f, 0x6e, 0x66, 0x69, 0x64, 0x65, 0x6e, 0x63, 0x65, 0x49, 0x6e, 0x74, 0x65, 0x72, + 0x76, 0x61, 0x6c, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x22, 0x5e, 0x0a, 0x27, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x49, 0x73, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x65, 0x72, 0x65, 0x64, 0x49, 0x6e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x12, + 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x4f, 0x0a, 0x28, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x49, 0x73, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, + 0x65, 0x72, 0x65, 0x64, 0x49, 0x6e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x73, 0x5f, 0x72, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0c, 0x69, 0x73, + 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x22, 0x5f, 0x0a, 0x28, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x49, 0x73, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, + 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x49, 0x6e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, + 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, + 0x64, 0x12, 0x18, 0x0a, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x50, 0x0a, 0x29, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x49, 0x73, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, + 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x49, 0x6e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x69, 0x73, 0x5f, 0x72, + 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x0c, 0x69, 0x73, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x22, 0x38, 0x0a, + 0x1c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x73, 0x57, 0x68, 0x69, 0x74, 0x65, 0x6c, 0x69, 0x73, + 0x74, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, + 0x07, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x22, 0x3a, 0x0a, 0x1d, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x49, 0x73, 0x57, 0x68, 0x69, 0x74, 0x65, 0x6c, 0x69, 0x73, 0x74, 0x41, 0x64, 0x6d, 0x69, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x19, 0x0a, 0x08, 0x69, 0x73, 0x5f, 0x61, + 0x64, 0x6d, 0x69, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x07, 0x69, 0x73, 0x41, 0x64, + 0x6d, 0x69, 0x6e, 0x22, 0x4a, 0x0a, 0x25, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x6b, + 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x55, 0x70, 0x55, 0x6e, 0x74, 0x69, 0x6c, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x03, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, + 0x64, 0x0a, 0x26, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x6d, + 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x55, 0x70, 0x55, 0x6e, 0x74, 0x69, 0x6c, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x3a, 0x0a, 0x08, 0x72, 0x65, 0x6d, + 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x65, 0x6d, + 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x6b, 0x65, + 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x72, 0x65, 0x6d, + 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x22, 0x52, 0x0a, 0x2d, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, + 0x61, 0x6c, 0x73, 0x55, 0x70, 0x55, 0x6e, 0x74, 0x69, 0x6c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, + 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x74, 0x0a, 0x2e, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, + 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x55, 0x70, 0x55, 0x6e, 0x74, 0x69, 0x6c, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x08, 0x72, + 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x61, - 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x22, 0x38, - 0x0a, 0x1b, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x4c, 0x61, 0x73, 0x74, - 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, - 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x07, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x22, 0x64, 0x0a, 0x1c, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x4c, 0x61, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x0b, 0x6c, 0x61, 0x73, 0x74, - 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, - 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x69, 0x6d, - 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x65, 0x64, 0x41, 0x63, 0x74, 0x6f, 0x72, 0x4e, 0x6f, 0x6e, - 0x63, 0x65, 0x52, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x22, 0x39, - 0x0a, 0x1c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x52, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, - 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x07, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x22, 0x35, 0x0a, 0x1d, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x4e, 0x6f, 0x6e, - 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x6f, - 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, - 0x22, 0x65, 0x0a, 0x25, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, - 0x4c, 0x6f, 0x73, 0x73, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x41, 0x74, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x70, - 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, 0x6f, 0x70, - 0x69, 0x63, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x6e, 0x0a, 0x26, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x4c, 0x6f, 0x73, 0x73, 0x42, 0x75, 0x6e, 0x64, 0x6c, - 0x65, 0x73, 0x41, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x44, 0x0a, 0x0c, 0x6c, 0x6f, 0x73, 0x73, 0x5f, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, - 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x56, 0x61, - 0x6c, 0x75, 0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x52, 0x0b, 0x6c, 0x6f, 0x73, 0x73, - 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x22, 0x58, 0x0a, 0x21, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, - 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, - 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, - 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x75, 0x74, - 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, - 0x72, 0x22, 0x74, 0x0a, 0x22, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, - 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, - 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x30, 0xc8, 0xde, 0x1f, 0x00, - 0xda, 0xde, 0x1f, 0x15, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, - 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x49, 0x6e, 0x74, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, - 0x6d, 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x09, 0x61, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x22, 0x75, 0x0a, 0x22, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x50, 0x6c, 0x61, - 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, - 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x07, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x65, 0x6c, 0x65, - 0x67, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x65, 0x6c, - 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x22, 0x69, - 0x0a, 0x23, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, - 0x74, 0x61, 0x6b, 0x65, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x0e, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, - 0x6f, 0x72, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, - 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, - 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x0d, 0x64, 0x65, 0x6c, 0x65, - 0x67, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x59, 0x0a, 0x24, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x55, - 0x70, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, - 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, - 0x72, 0x67, 0x65, 0x74, 0x22, 0x6f, 0x0a, 0x25, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, - 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x55, 0x70, 0x6f, 0x6e, 0x52, 0x65, - 0x70, 0x75, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, - 0x05, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x30, 0xc8, 0xde, - 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x15, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, - 0x69, 0x6f, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x49, 0x6e, 0x74, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, - 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x05, - 0x73, 0x74, 0x61, 0x6b, 0x65, 0x22, 0x59, 0x0a, 0x22, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, - 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x50, 0x65, 0x72, 0x53, - 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, - 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, - 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, - 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, - 0x22, 0x88, 0x01, 0x0a, 0x23, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, - 0x74, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x50, 0x65, 0x72, 0x53, 0x68, 0x61, 0x72, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x61, 0x0a, 0x10, 0x72, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x37, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x2f, 0x67, 0x69, 0x74, 0x68, - 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x6c, 0x6c, 0x6f, 0x72, 0x61, 0x2d, 0x6e, 0x65, - 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x6c, 0x6c, 0x6f, 0x72, 0x61, 0x2d, 0x63, 0x68, 0x61, - 0x69, 0x6e, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x44, 0x65, 0x63, 0x52, 0x0e, 0x72, 0x65, 0x77, - 0x61, 0x72, 0x64, 0x50, 0x65, 0x72, 0x53, 0x68, 0x61, 0x72, 0x65, 0x22, 0x63, 0x0a, 0x2c, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, - 0x46, 0x6f, 0x72, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x41, 0x6e, 0x64, 0x54, 0x6f, 0x70, - 0x69, 0x63, 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x72, - 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, - 0x70, 0x75, 0x74, 0x65, 0x72, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, - 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, - 0x22, 0x7d, 0x0a, 0x2d, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, - 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x46, 0x6f, 0x72, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x41, - 0x6e, 0x64, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x4c, 0x0a, 0x12, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x76, - 0x61, 0x6c, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, - 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, - 0x6b, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x10, 0x73, - 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x22, - 0x98, 0x01, 0x0a, 0x20, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, - 0x65, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, - 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, 0x6f, 0x70, 0x69, 0x63, + 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x08, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x22, + 0x53, 0x0a, 0x1c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x6d, + 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x07, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, + 0x70, 0x75, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x70, + 0x75, 0x74, 0x65, 0x72, 0x22, 0x59, 0x0a, 0x1d, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, + 0x6b, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x38, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, + 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x22, + 0x79, 0x0a, 0x24, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, + 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, + 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, - 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x22, 0x79, 0x0a, 0x21, 0x51, 0x75, + 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, + 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, + 0x09, 0x52, 0x07, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x22, 0x69, 0x0a, 0x25, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x6b, 0x65, - 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x54, 0x0a, 0x12, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, - 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x65, 0x6d, - 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, - 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x10, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x61, - 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x3c, 0x0a, 0x1f, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, - 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x57, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x69, - 0x63, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, 0x6f, 0x70, 0x69, - 0x63, 0x49, 0x64, 0x22, 0x90, 0x01, 0x0a, 0x20, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, 0x65, - 0x76, 0x69, 0x6f, 0x75, 0x73, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4f, 0x0a, 0x06, 0x77, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x37, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, - 0x1f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x6c, 0x6c, - 0x6f, 0x72, 0x61, 0x2d, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x6c, 0x6c, 0x6f, - 0x72, 0x61, 0x2d, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x44, 0x65, - 0x63, 0x52, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x6f, 0x74, - 0x5f, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6e, 0x6f, - 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x22, 0x34, 0x0a, 0x17, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, - 0x6f, 0x70, 0x69, 0x63, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x22, 0x32, 0x0a, 0x18, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x65, 0x78, 0x69, 0x73, - 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, - 0x22, 0x36, 0x0a, 0x19, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x73, 0x54, 0x6f, 0x70, 0x69, 0x63, - 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, - 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x07, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x22, 0x39, 0x0a, 0x1a, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x49, 0x73, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, 0x09, 0x69, 0x73, 0x5f, 0x61, 0x63, 0x74, - 0x69, 0x76, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x69, 0x73, 0x41, 0x63, 0x74, - 0x69, 0x76, 0x65, 0x22, 0x38, 0x0a, 0x1b, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x70, 0x69, - 0x63, 0x46, 0x65, 0x65, 0x52, 0x65, 0x76, 0x65, 0x6e, 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x22, 0x71, 0x0a, - 0x1c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x46, 0x65, 0x65, 0x52, 0x65, - 0x76, 0x65, 0x6e, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, - 0x0b, 0x66, 0x65, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x65, 0x6e, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x42, 0x30, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x15, 0x63, 0x6f, 0x73, 0x6d, - 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x49, 0x6e, - 0x74, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0xa8, - 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x0a, 0x66, 0x65, 0x65, 0x52, 0x65, 0x76, 0x65, 0x6e, 0x75, 0x65, - 0x22, 0x1e, 0x0a, 0x1c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x61, - 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x22, 0x51, 0x0a, 0x1d, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x61, - 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x30, 0x0a, 0x14, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x5f, - 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x04, 0x52, - 0x12, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x70, 0x69, 0x63, - 0x49, 0x64, 0x73, 0x22, 0x55, 0x0a, 0x1e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4c, 0x61, 0x74, 0x65, - 0x73, 0x74, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x72, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, 0x65, + 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x12, 0x40, 0x0a, 0x07, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x6b, + 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x07, 0x72, 0x65, + 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x22, 0x38, 0x0a, 0x1b, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, + 0x70, 0x69, 0x63, 0x4c, 0x61, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x22, + 0x64, 0x0a, 0x1c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x4c, 0x61, 0x73, + 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x44, 0x0a, 0x0b, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x23, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x76, 0x32, 0x2e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x65, 0x64, 0x41, + 0x63, 0x74, 0x6f, 0x72, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x52, 0x0a, 0x6c, 0x61, 0x73, 0x74, 0x43, + 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x22, 0x39, 0x0a, 0x1c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, + 0x70, 0x69, 0x63, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, - 0x12, 0x18, 0x0a, 0x07, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x07, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x72, 0x22, 0x4c, 0x0a, 0x1f, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x72, - 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x29, 0x0a, - 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x65, - 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x63, 0x6f, 0x72, - 0x65, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x22, 0x5e, 0x0a, 0x21, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, - 0x72, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, - 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x07, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x12, 0x1e, 0x0a, 0x0a, 0x66, 0x6f, 0x72, 0x65, - 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x6f, - 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x22, 0x4f, 0x0a, 0x22, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, - 0x72, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x29, - 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, - 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x63, 0x6f, - 0x72, 0x65, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x22, 0x55, 0x0a, 0x1e, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x53, - 0x63, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, - 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, - 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, - 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, - 0x22, 0x4c, 0x0a, 0x1f, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x52, - 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x29, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, - 0x32, 0x2e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x22, 0x65, - 0x0a, 0x25, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x55, 0x6e, 0x74, 0x69, 0x6c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, - 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, 0x6f, 0x70, 0x69, 0x63, - 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x55, 0x0a, 0x26, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x6e, - 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x55, 0x6e, 0x74, - 0x69, 0x6c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x2b, 0x0a, 0x06, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x13, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x53, - 0x63, 0x6f, 0x72, 0x65, 0x52, 0x06, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x22, 0x68, 0x0a, 0x28, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x65, 0x72, - 0x65, 0x6e, 0x63, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x41, 0x74, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x69, + 0x22, 0x35, 0x0a, 0x1d, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x52, 0x65, + 0x77, 0x61, 0x72, 0x64, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x05, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x22, 0x65, 0x0a, 0x25, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x4c, 0x6f, 0x73, 0x73, 0x42, 0x75, 0x6e, 0x64, 0x6c, + 0x65, 0x73, 0x41, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x07, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x6e, + 0x0a, 0x26, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x4c, 0x6f, + 0x73, 0x73, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x41, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x44, 0x0a, 0x0c, 0x6c, 0x6f, 0x73, 0x73, + 0x5f, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x21, + 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x52, 0x65, + 0x70, 0x75, 0x74, 0x65, 0x72, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, + 0x73, 0x52, 0x0b, 0x6c, 0x6f, 0x73, 0x73, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x22, 0x58, + 0x0a, 0x21, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x70, 0x75, + 0x74, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x12, 0x18, + 0x0a, 0x07, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x07, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x22, 0x74, 0x0a, 0x22, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x41, 0x75, 0x74, + 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4e, + 0x0a, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x30, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x15, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x49, 0x6e, 0x74, + 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0xa8, 0xe7, + 0xb0, 0x2a, 0x01, 0x52, 0x09, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x22, 0x75, + 0x0a, 0x22, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, + 0x74, 0x61, 0x6b, 0x65, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x12, + 0x1c, 0x0a, 0x09, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, + 0x28, 0x09, 0x52, 0x09, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x16, 0x0a, + 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, + 0x61, 0x72, 0x67, 0x65, 0x74, 0x22, 0x69, 0x0a, 0x23, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x50, 0x6c, 0x61, 0x63, 0x65, + 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x42, 0x0a, 0x0e, + 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x76, 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x0d, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x66, 0x6f, + 0x22, 0x59, 0x0a, 0x24, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, + 0x65, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x55, 0x70, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, + 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x69, + 0x63, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, 0x6f, 0x70, 0x69, + 0x63, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x06, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x22, 0x6f, 0x0a, 0x25, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x6b, + 0x65, 0x55, 0x70, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x46, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x30, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x15, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x49, + 0x6e, 0x74, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x74, + 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x05, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x22, 0x59, 0x0a, 0x22, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x65, 0x77, + 0x61, 0x72, 0x64, 0x50, 0x65, 0x72, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x12, 0x18, 0x0a, + 0x07, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x22, 0x88, 0x01, 0x0a, 0x23, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x50, + 0x65, 0x72, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x61, 0x0a, 0x10, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x73, 0x68, + 0x61, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x37, 0xc8, 0xde, 0x1f, 0x00, 0xda, + 0xde, 0x1f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x6c, + 0x6c, 0x6f, 0x72, 0x61, 0x2d, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x6c, 0x6c, + 0x6f, 0x72, 0x61, 0x2d, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x44, + 0x65, 0x63, 0x52, 0x0e, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x50, 0x65, 0x72, 0x53, 0x68, 0x61, + 0x72, 0x65, 0x22, 0x63, 0x0a, 0x2c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x6b, 0x65, + 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x46, 0x6f, 0x72, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, + 0x72, 0x41, 0x6e, 0x64, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x12, 0x19, 0x0a, 0x08, + 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, + 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x22, 0x7d, 0x0a, 0x2d, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x46, 0x6f, 0x72, 0x52, + 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x41, 0x6e, 0x64, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x4c, 0x0a, 0x12, 0x73, 0x74, 0x61, 0x6b, + 0x65, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x10, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, + 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x98, 0x01, 0x0a, 0x20, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x6d, + 0x6f, 0x76, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x19, + 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x07, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x12, 0x1c, 0x0a, 0x09, 0x64, 0x65, 0x6c, + 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x64, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x75, 0x74, + 0x65, 0x72, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, + 0x72, 0x22, 0x79, 0x0a, 0x21, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, + 0x74, 0x65, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x54, 0x0a, 0x12, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x5f, + 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, + 0x32, 0x2e, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, + 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x10, 0x73, 0x74, 0x61, 0x6b, + 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x22, 0x3c, 0x0a, 0x1f, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x54, 0x6f, 0x70, + 0x69, 0x63, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x07, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x22, 0x90, 0x01, 0x0a, 0x20, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x54, 0x6f, 0x70, 0x69, + 0x63, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x4f, 0x0a, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x37, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x6c, 0x6c, 0x6f, 0x72, 0x61, 0x2d, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2f, 0x61, 0x6c, 0x6c, 0x6f, 0x72, 0x61, 0x2d, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2f, + 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x44, 0x65, 0x63, 0x52, 0x06, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, + 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x6f, 0x74, 0x5f, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x08, 0x52, 0x08, 0x6e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x22, 0x34, 0x0a, + 0x17, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x45, 0x78, 0x69, 0x73, 0x74, + 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, 0x6f, 0x70, 0x69, - 0x63, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x59, 0x0a, 0x29, 0x51, 0x75, 0x65, 0x72, 0x79, 0x57, - 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x53, 0x63, - 0x6f, 0x72, 0x65, 0x73, 0x41, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x18, 0x01, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, - 0x76, 0x32, 0x2e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x52, 0x06, 0x73, 0x63, 0x6f, 0x72, 0x65, - 0x73, 0x22, 0x64, 0x0a, 0x24, 0x51, 0x75, 0x65, 0x72, 0x79, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, - 0x73, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x55, 0x6e, 0x74, 0x69, 0x6c, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x70, + 0x63, 0x49, 0x64, 0x22, 0x32, 0x0a, 0x18, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x70, 0x69, + 0x63, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x16, 0x0a, 0x06, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x52, + 0x06, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x22, 0x36, 0x0a, 0x19, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x49, 0x73, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x22, + 0x39, 0x0a, 0x1a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x73, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x41, + 0x63, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x1b, 0x0a, + 0x09, 0x69, 0x73, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, + 0x52, 0x08, 0x69, 0x73, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x22, 0x38, 0x0a, 0x1b, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x46, 0x65, 0x65, 0x52, 0x65, 0x76, 0x65, 0x6e, + 0x75, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, 0x6f, 0x70, - 0x69, 0x63, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, - 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x54, 0x0a, 0x25, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x55, 0x6e, - 0x74, 0x69, 0x6c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x12, 0x2b, 0x0a, 0x06, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x13, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, - 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, 0x06, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x22, 0x67, 0x0a, - 0x27, 0x51, 0x75, 0x65, 0x72, 0x79, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x46, 0x6f, 0x72, 0x65, + 0x69, 0x63, 0x49, 0x64, 0x22, 0x71, 0x0a, 0x1c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x70, + 0x69, 0x63, 0x46, 0x65, 0x65, 0x52, 0x65, 0x76, 0x65, 0x6e, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x51, 0x0a, 0x0b, 0x66, 0x65, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x65, + 0x6e, 0x75, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x30, 0xc8, 0xde, 0x1f, 0x00, 0xda, + 0xde, 0x1f, 0x15, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, + 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x49, 0x6e, 0x74, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x0a, 0x66, 0x65, 0x65, + 0x52, 0x65, 0x76, 0x65, 0x6e, 0x75, 0x65, 0x22, 0x1e, 0x0a, 0x1c, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x51, 0x0a, 0x1d, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x72, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x04, 0x52, 0x12, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x61, 0x62, + 0x6c, 0x65, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x73, 0x22, 0x55, 0x0a, 0x1e, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x72, + 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, + 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, + 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x69, 0x6e, 0x66, 0x65, 0x72, + 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x65, + 0x72, 0x22, 0x4c, 0x0a, 0x1f, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, + 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x72, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x29, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x01, 0x20, + 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, + 0x76, 0x32, 0x2e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x22, + 0x5e, 0x0a, 0x21, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x46, 0x6f, + 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x12, + 0x1e, 0x0a, 0x0a, 0x66, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, + 0x01, 0x28, 0x09, 0x52, 0x0a, 0x66, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x22, + 0x4f, 0x0a, 0x22, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x46, 0x6f, + 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x29, 0x0a, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, 0x05, 0x73, 0x63, 0x6f, 0x72, 0x65, + 0x22, 0x55, 0x0a, 0x1e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x52, + 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x12, 0x18, 0x0a, + 0x07, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x22, 0x4c, 0x0a, 0x1f, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x53, 0x63, 0x6f, + 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x29, 0x0a, 0x05, 0x73, 0x63, + 0x6f, 0x72, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x65, 0x6d, 0x69, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, 0x05, + 0x73, 0x63, 0x6f, 0x72, 0x65, 0x22, 0x65, 0x0a, 0x25, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x6e, + 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x55, 0x6e, 0x74, + 0x69, 0x6c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, + 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, + 0x52, 0x07, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, + 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x55, 0x0a, 0x26, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x53, 0x63, + 0x6f, 0x72, 0x65, 0x73, 0x55, 0x6e, 0x74, 0x69, 0x6c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73, + 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, 0x06, 0x73, 0x63, 0x6f, + 0x72, 0x65, 0x73, 0x22, 0x68, 0x0a, 0x28, 0x51, 0x75, 0x65, 0x72, 0x79, 0x57, 0x6f, 0x72, 0x6b, + 0x65, 0x72, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, + 0x73, 0x41, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x07, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x59, 0x0a, + 0x29, 0x51, 0x75, 0x65, 0x72, 0x79, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x65, + 0x72, 0x65, 0x6e, 0x63, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x41, 0x74, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x73, 0x63, + 0x6f, 0x72, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x65, 0x6d, 0x69, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, + 0x52, 0x06, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x22, 0x64, 0x0a, 0x24, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x55, + 0x6e, 0x74, 0x69, 0x6c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x07, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x03, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x54, + 0x0a, 0x25, 0x51, 0x75, 0x65, 0x72, 0x79, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x53, + 0x63, 0x6f, 0x72, 0x65, 0x73, 0x55, 0x6e, 0x74, 0x69, 0x6c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2b, 0x0a, 0x06, 0x73, 0x63, 0x6f, 0x72, 0x65, + 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x13, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, 0x06, 0x73, 0x63, + 0x6f, 0x72, 0x65, 0x73, 0x22, 0x67, 0x0a, 0x27, 0x51, 0x75, 0x65, 0x72, 0x79, 0x57, 0x6f, 0x72, + 0x6b, 0x65, 0x72, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, + 0x73, 0x41, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, + 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x04, 0x52, 0x07, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, + 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x58, 0x0a, + 0x28, 0x51, 0x75, 0x65, 0x72, 0x79, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x41, 0x74, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x69, - 0x63, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, 0x6f, 0x70, 0x69, - 0x63, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, - 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x58, 0x0a, 0x28, 0x51, 0x75, 0x65, 0x72, 0x79, 0x57, - 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x53, 0x63, 0x6f, - 0x72, 0x65, 0x73, 0x41, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, - 0x32, 0x2e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x52, 0x06, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73, - 0x22, 0x61, 0x0a, 0x21, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, - 0x73, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x41, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, - 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, - 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, - 0x67, 0x68, 0x74, 0x22, 0x52, 0x0a, 0x22, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x70, 0x75, - 0x74, 0x65, 0x72, 0x73, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x41, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x2c, 0x0a, 0x06, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x52, - 0x06, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x22, 0x57, 0x0a, 0x20, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x06, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x22, 0x61, 0x0a, 0x21, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x73, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x41, 0x74, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, + 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, + 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x12, 0x21, 0x0a, 0x0c, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x18, 0x02, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, 0x22, 0x52, 0x0a, 0x22, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x73, 0x53, 0x63, 0x6f, 0x72, 0x65, + 0x73, 0x41, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x12, 0x2c, 0x0a, 0x06, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, + 0x32, 0x14, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, + 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x52, 0x06, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x22, 0x57, + 0x0a, 0x20, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x69, 0x6e, 0x67, + 0x43, 0x6f, 0x65, 0x66, 0x66, 0x69, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x12, 0x18, 0x0a, + 0x07, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x22, 0x7c, 0x0a, 0x21, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x65, 0x66, 0x66, 0x69, 0x63, - 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, - 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, - 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, - 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, - 0x22, 0x7c, 0x0a, 0x21, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x69, - 0x6e, 0x67, 0x43, 0x6f, 0x65, 0x66, 0x66, 0x69, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x57, 0x0a, 0x15, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x69, - 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x65, 0x66, 0x66, 0x69, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x01, - 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x65, - 0x66, 0x66, 0x69, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x52, 0x14, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, - 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x65, 0x66, 0x66, 0x69, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x22, 0x60, - 0x0a, 0x29, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x52, - 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x46, 0x72, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, - 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, - 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x12, 0x18, 0x0a, 0x07, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, - 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, - 0x22, 0xab, 0x01, 0x0a, 0x2a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, 0x65, 0x76, 0x69, 0x6f, - 0x75, 0x73, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x46, - 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, - 0x60, 0x0a, 0x0f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x37, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, - 0x1f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x6c, 0x6c, - 0x6f, 0x72, 0x61, 0x2d, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x6c, 0x6c, 0x6f, - 0x72, 0x61, 0x2d, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x44, 0x65, - 0x63, 0x52, 0x0e, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x46, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x6f, 0x74, 0x5f, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x22, 0x60, - 0x0a, 0x2b, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x49, - 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x46, 0x72, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, - 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, - 0x07, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x77, 0x6f, 0x72, 0x6b, - 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, - 0x22, 0xad, 0x01, 0x0a, 0x2c, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, 0x65, 0x76, 0x69, 0x6f, - 0x75, 0x73, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x46, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x60, 0x0a, 0x0f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x66, 0x72, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x37, 0xc8, 0xde, 0x1f, 0x00, - 0xda, 0xde, 0x1f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, - 0x6c, 0x6c, 0x6f, 0x72, 0x61, 0x2d, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x6c, - 0x6c, 0x6f, 0x72, 0x61, 0x2d, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x2e, - 0x44, 0x65, 0x63, 0x52, 0x0e, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x46, 0x72, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x6f, 0x74, 0x5f, 0x66, 0x6f, 0x75, 0x6e, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, - 0x22, 0x5f, 0x0a, 0x2a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, - 0x73, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x46, - 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, - 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, - 0x52, 0x07, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x77, 0x6f, 0x72, - 0x6b, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x77, 0x6f, 0x72, 0x6b, 0x65, - 0x72, 0x22, 0xac, 0x01, 0x0a, 0x2b, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, 0x65, 0x76, 0x69, - 0x6f, 0x75, 0x73, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x52, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x46, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x12, 0x60, 0x0a, 0x0f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x66, 0x72, 0x61, 0x63, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x37, 0xc8, 0xde, 0x1f, 0x00, - 0xda, 0xde, 0x1f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, - 0x6c, 0x6c, 0x6f, 0x72, 0x61, 0x2d, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x6c, - 0x6c, 0x6f, 0x72, 0x61, 0x2d, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x2e, - 0x44, 0x65, 0x63, 0x52, 0x0e, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x46, 0x72, 0x61, 0x63, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x6f, 0x74, 0x5f, 0x66, 0x6f, 0x75, 0x6e, 0x64, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6e, 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, - 0x22, 0x36, 0x0a, 0x34, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, + 0x69, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x57, 0x0a, 0x15, + 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x65, 0x66, 0x66, 0x69, + 0x63, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x22, 0x2e, 0x65, 0x6d, + 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x65, + 0x6e, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x65, 0x66, 0x66, 0x69, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x52, + 0x14, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x65, 0x66, 0x66, 0x69, + 0x63, 0x69, 0x65, 0x6e, 0x74, 0x22, 0x60, 0x0a, 0x29, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, + 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x52, 0x65, 0x77, + 0x61, 0x72, 0x64, 0x46, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x12, 0x18, 0x0a, + 0x07, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, + 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x22, 0xab, 0x01, 0x0a, 0x2a, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x50, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, + 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x46, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x60, 0x0a, 0x0f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, + 0x5f, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x37, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, + 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x6c, 0x6c, 0x6f, 0x72, 0x61, 0x2d, 0x6e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x2f, 0x61, 0x6c, 0x6c, 0x6f, 0x72, 0x61, 0x2d, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2f, + 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x44, 0x65, 0x63, 0x52, 0x0e, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, + 0x46, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x6f, 0x74, 0x5f, + 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6e, 0x6f, 0x74, + 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x22, 0x60, 0x0a, 0x2b, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, + 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x46, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, + 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x12, + 0x16, 0x0a, 0x06, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, + 0x06, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x22, 0xad, 0x01, 0x0a, 0x2c, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x50, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, + 0x63, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x46, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x60, 0x0a, 0x0f, 0x72, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x5f, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x37, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x6c, 0x6c, 0x6f, 0x72, 0x61, 0x2d, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x6c, 0x6c, 0x6f, 0x72, 0x61, 0x2d, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x44, 0x65, 0x63, 0x52, 0x0e, 0x72, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x46, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x6f, + 0x74, 0x5f, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6e, + 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x22, 0x5f, 0x0a, 0x2a, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x50, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, + 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x46, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, + 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x04, 0x52, 0x07, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, + 0x12, 0x16, 0x0a, 0x06, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, + 0x52, 0x06, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x22, 0xac, 0x01, 0x0a, 0x2b, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x50, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, + 0x73, 0x74, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x46, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x60, 0x0a, 0x0f, 0x72, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x5f, 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x37, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, + 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x6c, 0x6c, 0x6f, 0x72, 0x61, 0x2d, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x6c, 0x6c, 0x6f, 0x72, 0x61, 0x2d, 0x63, 0x68, 0x61, 0x69, + 0x6e, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x44, 0x65, 0x63, 0x52, 0x0e, 0x72, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x46, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x6f, + 0x74, 0x5f, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6e, + 0x6f, 0x74, 0x46, 0x6f, 0x75, 0x6e, 0x64, 0x22, 0x36, 0x0a, 0x34, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x50, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, + 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x54, 0x6f, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x64, + 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, + 0x9d, 0x01, 0x0a, 0x35, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x54, 0x6f, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x9d, 0x01, 0x0a, 0x35, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x50, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, - 0x74, 0x61, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x54, 0x6f, 0x53, 0x74, 0x61, 0x6b, - 0x65, 0x64, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x12, 0x64, 0x0a, 0x11, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, - 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x37, 0xc8, - 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, - 0x6d, 0x2f, 0x61, 0x6c, 0x6c, 0x6f, 0x72, 0x61, 0x2d, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x2f, 0x61, 0x6c, 0x6c, 0x6f, 0x72, 0x61, 0x2d, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2f, 0x6d, 0x61, - 0x74, 0x68, 0x2e, 0x44, 0x65, 0x63, 0x52, 0x10, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, - 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x22, 0x25, 0x0a, 0x23, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x54, 0x6f, 0x44, 0x69, - 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, - 0x82, 0x01, 0x0a, 0x24, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x54, 0x6f, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x5a, 0x0a, 0x0c, 0x74, 0x6f, 0x74, 0x61, - 0x6c, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x37, - 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x2f, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x61, 0x6c, 0x6c, 0x6f, 0x72, 0x61, 0x2d, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x2f, 0x61, 0x6c, 0x6c, 0x6f, 0x72, 0x61, 0x2d, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2f, 0x6d, - 0x61, 0x74, 0x68, 0x2e, 0x44, 0x65, 0x63, 0x52, 0x0b, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x32, 0xc4, 0x6d, 0x0a, 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x6b, - 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x20, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, - 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x65, 0x6d, 0x69, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, - 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x12, 0x14, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x89, 0x01, 0x0a, 0x0e, - 0x47, 0x65, 0x74, 0x4e, 0x65, 0x78, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x12, 0x25, - 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x4e, 0x65, 0x78, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x64, 0x0a, 0x11, 0x70, 0x65, 0x72, + 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x18, 0x01, + 0x20, 0x01, 0x28, 0x09, 0x42, 0x37, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x2f, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x6c, 0x6c, 0x6f, 0x72, 0x61, 0x2d, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x6c, 0x6c, 0x6f, 0x72, 0x61, 0x2d, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x44, 0x65, 0x63, 0x52, 0x10, 0x70, + 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x22, + 0x25, 0x0a, 0x23, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65, 0x77, + 0x61, 0x72, 0x64, 0x54, 0x6f, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, 0x82, 0x01, 0x0a, 0x24, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x54, 0x6f, 0x44, 0x69, 0x73, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, + 0x5a, 0x0a, 0x0c, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x18, + 0x01, 0x20, 0x01, 0x28, 0x09, 0x42, 0x37, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x2f, 0x67, + 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x6c, 0x6c, 0x6f, 0x72, 0x61, + 0x2d, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x6c, 0x6c, 0x6f, 0x72, 0x61, 0x2d, + 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x44, 0x65, 0x63, 0x52, 0x0b, + 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x32, 0x9b, 0x6d, 0x0a, 0x05, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x6b, 0x0a, 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, + 0x20, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x21, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, + 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x16, 0x12, 0x14, 0x2f, 0x65, + 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x70, 0x61, 0x72, 0x61, + 0x6d, 0x73, 0x12, 0x89, 0x01, 0x0a, 0x0e, 0x47, 0x65, 0x74, 0x4e, 0x65, 0x78, 0x74, 0x54, 0x6f, + 0x70, 0x69, 0x63, 0x49, 0x64, 0x12, 0x25, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x65, 0x78, 0x74, 0x54, 0x6f, - 0x70, 0x69, 0x63, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0x88, - 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x12, 0x1b, 0x2f, 0x65, 0x6d, 0x69, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x74, - 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x12, 0x7b, 0x0a, 0x08, 0x47, 0x65, 0x74, 0x54, 0x6f, - 0x70, 0x69, 0x63, 0x12, 0x1f, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, - 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2c, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x21, 0x12, 0x1f, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, - 0x76, 0x32, 0x2f, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, - 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x8c, 0x01, 0x0a, 0x0f, 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, - 0x76, 0x65, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x12, 0x26, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x63, 0x74, - 0x69, 0x76, 0x65, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x27, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x54, 0x6f, 0x70, 0x69, 0x63, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0x88, 0xe7, 0xb0, 0x2a, 0x01, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x12, 0x1b, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x74, 0x6f, 0x70, - 0x69, 0x63, 0x73, 0x12, 0xde, 0x01, 0x0a, 0x21, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x65, - 0x72, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x42, 0x79, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x12, 0x2f, 0x2e, 0x65, 0x6d, 0x69, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x57, 0x6f, - 0x72, 0x6b, 0x65, 0x72, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, - 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x65, 0x6d, 0x69, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x57, - 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x65, 0x72, - 0x65, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x56, 0x88, 0xe7, - 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, 0x12, 0x49, 0x2f, 0x65, 0x6d, 0x69, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x2f, - 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x65, - 0x72, 0x73, 0x2f, 0x7b, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x7d, 0x2f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x65, 0x72, - 0x65, 0x6e, 0x63, 0x65, 0x12, 0xb2, 0x01, 0x0a, 0x14, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x65, - 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x41, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x2b, 0x2e, + 0x70, 0x69, 0x63, 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x65, + 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x4e, 0x65, 0x78, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x28, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x1d, 0x12, 0x1b, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, + 0x2f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x12, 0x7b, + 0x0a, 0x08, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x12, 0x1f, 0x2e, 0x65, 0x6d, 0x69, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, + 0x6f, 0x70, 0x69, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x20, 0x2e, 0x65, 0x6d, + 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x54, 0x6f, 0x70, 0x69, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2c, 0x88, + 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x12, 0x1f, 0x2f, 0x65, 0x6d, 0x69, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, + 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x8c, 0x01, 0x0a, 0x0f, + 0x47, 0x65, 0x74, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x12, + 0x26, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x63, 0x74, 0x69, + 0x76, 0x65, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x28, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x12, 0x1b, 0x2f, + 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x61, 0x63, 0x74, + 0x69, 0x76, 0x65, 0x5f, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x12, 0xde, 0x01, 0x0a, 0x21, 0x47, + 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x49, 0x6e, + 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x42, 0x79, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, + 0x12, 0x2f, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x4c, 0x61, 0x74, 0x65, 0x73, + 0x74, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x30, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, + 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x4c, 0x61, 0x74, 0x65, + 0x73, 0x74, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x56, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4b, + 0x12, 0x49, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, + 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, + 0x7d, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x73, 0x2f, 0x7b, 0x77, 0x6f, 0x72, 0x6b, 0x65, + 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, 0x2f, 0x6c, 0x61, 0x74, 0x65, 0x73, + 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0xb2, 0x01, 0x0a, 0x14, + 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x41, 0x74, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x2b, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, + 0x63, 0x65, 0x73, 0x41, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x2c, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, + 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, + 0x41, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x3f, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x12, 0x32, 0x2f, 0x65, + 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x69, 0x6e, 0x66, 0x65, + 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, + 0x7d, 0x2f, 0x7b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x7d, + 0x12, 0xb6, 0x01, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x54, 0x6f, + 0x70, 0x69, 0x63, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x2f, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x41, 0x74, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2c, 0x2e, 0x65, 0x6d, 0x69, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, - 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x41, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3f, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x12, 0x32, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x2f, - 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x7d, 0x12, 0xb6, 0x01, 0x0a, 0x18, 0x47, 0x65, - 0x74, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x6e, 0x66, 0x65, - 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x2f, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4c, 0x61, 0x74, 0x65, 0x73, - 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4c, 0x61, 0x74, 0x65, - 0x73, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x37, 0x88, 0xe7, 0xb0, 0x2a, 0x01, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x12, 0x2a, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x6e, 0x66, - 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, - 0x64, 0x7d, 0x12, 0xae, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, - 0x73, 0x74, 0x73, 0x41, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x2a, 0x2e, 0x65, 0x6d, 0x69, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x46, - 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x73, 0x41, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x46, 0x6f, 0x72, 0x65, 0x63, - 0x61, 0x73, 0x74, 0x73, 0x41, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x3e, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x33, - 0x12, 0x31, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, - 0x66, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x73, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, - 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x7d, 0x12, 0xc9, 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, - 0x72, 0x6b, 0x4c, 0x6f, 0x73, 0x73, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x41, 0x74, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x12, 0x32, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, - 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x4c, - 0x6f, 0x73, 0x73, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x41, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x65, 0x74, 0x77, - 0x6f, 0x72, 0x6b, 0x4c, 0x6f, 0x73, 0x73, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x41, 0x74, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x41, 0x88, 0xe7, - 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x36, 0x12, 0x34, 0x2f, 0x65, 0x6d, 0x69, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x5f, 0x6c, 0x6f, 0x73, 0x73, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, - 0x2f, 0x7b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x7d, 0x12, - 0x84, 0x01, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x6b, - 0x65, 0x12, 0x24, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, - 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x6b, 0x65, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x74, 0x61, - 0x6c, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, - 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1b, 0x12, 0x19, 0x2f, 0x65, 0x6d, - 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x74, 0x6f, 0x74, 0x61, 0x6c, - 0x5f, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x12, 0xb6, 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x52, 0x65, - 0x70, 0x75, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x49, 0x6e, 0x54, 0x6f, 0x70, 0x69, - 0x63, 0x12, 0x2d, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, - 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, - 0x6b, 0x65, 0x49, 0x6e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x2e, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x6b, - 0x65, 0x49, 0x6e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x3d, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x32, 0x12, 0x30, 0x2f, - 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x72, 0x65, 0x70, - 0x75, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2f, 0x7b, 0x61, 0x64, 0x64, 0x72, - 0x65, 0x73, 0x73, 0x7d, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x12, - 0xbd, 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x70, 0x75, - 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x49, 0x6e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x12, - 0x32, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, - 0x53, 0x74, 0x61, 0x6b, 0x65, 0x49, 0x6e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, - 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x70, + 0x72, 0x79, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x6e, 0x66, + 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, + 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x6e, + 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x37, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x12, 0x2a, 0x2f, + 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x6c, 0x61, 0x74, + 0x65, 0x73, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x2f, 0x7b, + 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xae, 0x01, 0x0a, 0x13, 0x47, 0x65, + 0x74, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x73, 0x41, 0x74, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x12, 0x2a, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, + 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x73, 0x41, + 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, + 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x73, 0x41, 0x74, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3e, 0x88, 0xe7, 0xb0, 0x2a, + 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x33, 0x12, 0x31, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x66, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x73, + 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x7d, 0x12, 0xc9, 0x01, 0x0a, 0x1b, 0x47, + 0x65, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x4c, 0x6f, 0x73, 0x73, 0x42, 0x75, 0x6e, + 0x64, 0x6c, 0x65, 0x41, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x32, 0x2e, 0x65, 0x6d, 0x69, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x4c, 0x6f, 0x73, 0x73, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, + 0x41, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, + 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x4c, 0x6f, 0x73, 0x73, 0x42, 0x75, + 0x6e, 0x64, 0x6c, 0x65, 0x41, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x41, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x36, + 0x12, 0x34, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x6c, 0x6f, 0x73, 0x73, 0x2f, 0x7b, 0x74, 0x6f, + 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, + 0x65, 0x69, 0x67, 0x68, 0x74, 0x7d, 0x12, 0x84, 0x01, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x54, 0x6f, + 0x74, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x12, 0x24, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x74, + 0x61, 0x6c, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, + 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x26, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x1b, 0x12, 0x19, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, + 0x32, 0x2f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x12, 0xb6, 0x01, + 0x0a, 0x16, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x6b, + 0x65, 0x49, 0x6e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x12, 0x2d, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x49, 0x6e, 0x54, 0x6f, 0x70, 0x69, 0x63, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x35, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x73, 0x5f, 0x73, 0x74, - 0x61, 0x6b, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x12, - 0xe1, 0x01, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x46, 0x72, 0x6f, 0x6d, - 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x49, 0x6e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x6e, - 0x53, 0x65, 0x6c, 0x66, 0x12, 0x37, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x70, 0x75, + 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x49, 0x6e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3d, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x32, 0x12, 0x30, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x2f, 0x76, 0x32, 0x2f, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x6b, + 0x65, 0x2f, 0x7b, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, 0x2f, 0x7b, 0x74, 0x6f, 0x70, + 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xbd, 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x4d, 0x75, + 0x6c, 0x74, 0x69, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x49, + 0x6e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x12, 0x32, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4d, 0x75, 0x6c, 0x74, 0x69, + 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x49, 0x6e, 0x54, 0x6f, + 0x70, 0x69, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x65, 0x6d, 0x69, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4d, + 0x75, 0x6c, 0x74, 0x69, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x53, 0x74, 0x61, 0x6b, 0x65, + 0x49, 0x6e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x35, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x65, + 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x72, 0x65, 0x70, 0x75, + 0x74, 0x65, 0x72, 0x73, 0x5f, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x6f, 0x70, + 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xe1, 0x01, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x53, 0x74, + 0x61, 0x6b, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x49, 0x6e, + 0x54, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x6e, 0x53, 0x65, 0x6c, 0x66, 0x12, 0x37, 0x2e, 0x65, 0x6d, + 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x53, 0x74, 0x61, 0x6b, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, + 0x49, 0x6e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x6e, 0x53, 0x65, 0x6c, 0x66, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x49, 0x6e, 0x54, 0x6f, 0x70, 0x69, 0x63, - 0x49, 0x6e, 0x53, 0x65, 0x6c, 0x66, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, - 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x52, 0x65, 0x70, 0x75, 0x74, - 0x65, 0x72, 0x49, 0x6e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x6e, 0x53, 0x65, 0x6c, 0x66, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4a, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x3f, 0x12, 0x3d, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x2f, 0x76, 0x32, 0x2f, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x6b, - 0x65, 0x5f, 0x73, 0x65, 0x6c, 0x66, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x5f, - 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, - 0x69, 0x64, 0x7d, 0x12, 0xe5, 0x01, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x67, - 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x49, 0x6e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x49, - 0x6e, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x12, 0x37, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, + 0x49, 0x6e, 0x53, 0x65, 0x6c, 0x66, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4a, + 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3f, 0x12, 0x3d, 0x2f, 0x65, 0x6d, + 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x72, 0x65, 0x70, 0x75, 0x74, + 0x65, 0x72, 0x5f, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x5f, 0x73, 0x65, 0x6c, 0x66, 0x2f, 0x7b, 0x72, + 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, 0x2f, + 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xe5, 0x01, 0x0a, 0x20, 0x47, + 0x65, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x49, + 0x6e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x6e, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x12, + 0x37, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x6b, + 0x65, 0x49, 0x6e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x6e, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, + 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x49, 0x6e, 0x54, 0x6f, 0x70, 0x69, - 0x63, 0x49, 0x6e, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x38, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, - 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x74, - 0x61, 0x6b, 0x65, 0x49, 0x6e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x6e, 0x52, 0x65, 0x70, 0x75, - 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4e, 0x88, 0xe7, 0xb0, - 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x43, 0x12, 0x41, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x5f, - 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2f, 0x7b, - 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, - 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x80, 0x02, 0x0a, 0x25, - 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x44, 0x65, 0x6c, 0x65, - 0x67, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x6e, 0x52, 0x65, - 0x70, 0x75, 0x74, 0x65, 0x72, 0x12, 0x3c, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x46, - 0x72, 0x6f, 0x6d, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x54, 0x6f, - 0x70, 0x69, 0x63, 0x49, 0x6e, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x3d, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, - 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x46, 0x72, 0x6f, - 0x6d, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x6e, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x5a, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4f, 0x12, - 0x4d, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x64, - 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2f, 0x7b, 0x64, - 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, - 0x7d, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, - 0x73, 0x73, 0x7d, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xd3, - 0x01, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x44, - 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x12, - 0x33, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x44, 0x65, 0x6c, - 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x46, 0x72, - 0x6f, 0x6d, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x54, 0x6f, 0x70, - 0x69, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x48, 0x88, 0xe7, 0xb0, 0x2a, - 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3d, 0x12, 0x3b, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, - 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2f, 0x7b, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, - 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, - 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x89, 0x01, 0x0a, 0x0d, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x69, - 0x63, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x12, 0x24, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x70, 0x69, 0x63, - 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x65, + 0x73, 0x65, 0x22, 0x4e, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x43, 0x12, + 0x41, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x72, + 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x5f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, + 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x5f, 0x61, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, + 0x64, 0x7d, 0x12, 0x80, 0x02, 0x0a, 0x25, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x46, + 0x72, 0x6f, 0x6d, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x54, 0x6f, + 0x70, 0x69, 0x63, 0x49, 0x6e, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x12, 0x3c, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, - 0x12, 0x1e, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, - 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, - 0x12, 0xc3, 0x01, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x6d, - 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x55, 0x70, 0x55, 0x6e, 0x74, 0x69, 0x6c, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x12, 0x33, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, - 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, - 0x61, 0x6c, 0x73, 0x55, 0x70, 0x55, 0x6e, 0x74, 0x69, 0x6c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, + 0x79, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, + 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x6e, 0x52, 0x65, 0x70, 0x75, + 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3d, 0x2e, 0x65, 0x6d, 0x69, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, + 0x74, 0x61, 0x6b, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, + 0x72, 0x49, 0x6e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x6e, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, + 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5a, 0x88, 0xe7, 0xb0, 0x2a, 0x01, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4f, 0x12, 0x4d, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, 0x73, + 0x74, 0x61, 0x6b, 0x65, 0x2f, 0x7b, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, + 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, + 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, + 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xd3, 0x01, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, + 0x6b, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x49, + 0x6e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x12, 0x33, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x6b, 0x65, - 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x55, 0x70, 0x55, 0x6e, 0x74, 0x69, 0x6c, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x38, 0x88, 0xe7, - 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x12, 0x2b, 0x2f, 0x65, 0x6d, 0x69, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x5f, 0x72, - 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x2f, 0x7b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x7d, 0x12, 0xe4, 0x01, 0x0a, 0x24, 0x47, 0x65, 0x74, 0x44, 0x65, - 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, - 0x61, 0x6c, 0x73, 0x55, 0x70, 0x55, 0x6e, 0x74, 0x69, 0x6c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, - 0x3b, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x6b, - 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x55, 0x70, 0x55, 0x6e, 0x74, 0x69, 0x6c, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3c, 0x2e, 0x65, - 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, - 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x55, 0x70, 0x55, 0x6e, 0x74, 0x69, 0x6c, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x41, 0x88, 0xe7, 0xb0, 0x2a, - 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x36, 0x12, 0x34, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, - 0x73, 0x74, 0x61, 0x6b, 0x65, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x2f, 0x7b, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x7d, 0x12, 0xad, 0x01, - 0x0a, 0x13, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x61, - 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2a, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, - 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x2b, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, - 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, - 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3d, - 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x32, 0x12, 0x30, 0x2f, 0x65, 0x6d, - 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x65, - 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, - 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x7d, 0x12, 0xda, 0x01, - 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, - 0x6b, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x32, 0x2e, + 0x46, 0x72, 0x6f, 0x6d, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x49, 0x6e, 0x54, + 0x6f, 0x70, 0x69, 0x63, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x65, 0x6d, + 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x53, 0x74, 0x61, 0x6b, 0x65, 0x46, 0x72, 0x6f, 0x6d, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, + 0x6f, 0x72, 0x49, 0x6e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x48, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3d, 0x12, 0x3b, + 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x64, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2f, 0x7b, 0x64, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, + 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x89, 0x01, 0x0a, 0x0d, + 0x47, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x12, 0x24, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, - 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x33, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, - 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x74, - 0x61, 0x6b, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x52, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x47, 0x12, 0x45, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, - 0x76, 0x32, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x6b, - 0x65, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, - 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x7d, - 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x7d, 0x12, 0x95, 0x01, 0x0a, 0x11, 0x47, - 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, - 0x12, 0x28, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x49, - 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x29, 0x2e, 0x65, 0x6d, 0x69, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x57, - 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x20, 0x12, 0x1e, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, - 0x32, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x2f, 0x7b, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, - 0x73, 0x7d, 0x12, 0x99, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, - 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x29, 0x2e, 0x65, 0x6d, 0x69, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, - 0x70, 0x75, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, - 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x2c, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x12, 0x1f, 0x2f, - 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x72, 0x65, 0x70, - 0x75, 0x74, 0x65, 0x72, 0x2f, 0x7b, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, 0x12, 0xcf, - 0x01, 0x0a, 0x1b, 0x49, 0x73, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x65, 0x72, 0x65, 0x64, 0x49, 0x6e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x12, 0x35, - 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x49, 0x73, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, - 0x74, 0x65, 0x72, 0x65, 0x64, 0x49, 0x6e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x72, 0x79, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x25, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, + 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x53, 0x74, 0x61, + 0x6b, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x88, 0xe7, 0xb0, 0x2a, + 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x2f, 0x7b, 0x74, 0x6f, + 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xc3, 0x01, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x53, + 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x55, 0x70, 0x55, 0x6e, + 0x74, 0x69, 0x6c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x33, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, + 0x6b, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x55, 0x70, 0x55, 0x6e, 0x74, 0x69, + 0x6c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, + 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x55, + 0x70, 0x55, 0x6e, 0x74, 0x69, 0x6c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x38, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, + 0x12, 0x2b, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, + 0x73, 0x74, 0x61, 0x6b, 0x65, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x2f, 0x7b, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x7d, 0x12, 0xe4, 0x01, + 0x0a, 0x24, 0x47, 0x65, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, + 0x6b, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x55, 0x70, 0x55, 0x6e, 0x74, 0x69, + 0x6c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x3b, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, + 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x73, + 0x55, 0x70, 0x55, 0x6e, 0x74, 0x69, 0x6c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x3c, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, + 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, + 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x55, 0x70, 0x55, + 0x6e, 0x74, 0x69, 0x6c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x41, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x36, 0x12, 0x34, + 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x64, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x5f, 0x72, 0x65, 0x6d, + 0x6f, 0x76, 0x61, 0x6c, 0x73, 0x2f, 0x7b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, + 0x67, 0x68, 0x74, 0x7d, 0x12, 0xad, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x6b, + 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x2a, 0x2e, 0x65, + 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, + 0x6b, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3d, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x32, 0x12, 0x30, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, + 0x32, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x2f, + 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x75, + 0x74, 0x65, 0x72, 0x7d, 0x12, 0xda, 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x44, 0x65, 0x6c, 0x65, + 0x67, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, + 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x32, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, + 0x65, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x49, 0x6e, 0x66, + 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, + 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x61, + 0x6c, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x52, 0x88, + 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x47, 0x12, 0x45, 0x2f, 0x65, 0x6d, 0x69, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, + 0x74, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, + 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x64, 0x65, 0x6c, + 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x7d, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, + 0x7d, 0x12, 0x95, 0x01, 0x0a, 0x11, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x4e, + 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x28, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x57, 0x6f, 0x72, 0x6b, + 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x29, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, + 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2b, 0x88, 0xe7, + 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x20, 0x12, 0x1e, 0x2f, 0x65, 0x6d, 0x69, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x2f, + 0x7b, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, 0x12, 0x99, 0x01, 0x0a, 0x12, 0x47, 0x65, + 0x74, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, + 0x12, 0x29, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, + 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x65, 0x6d, + 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2c, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x21, 0x12, 0x1f, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x2f, 0x76, 0x32, 0x2f, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x2f, 0x7b, 0x61, 0x64, 0x64, + 0x72, 0x65, 0x73, 0x73, 0x7d, 0x12, 0xcf, 0x01, 0x0a, 0x1b, 0x49, 0x73, 0x57, 0x6f, 0x72, 0x6b, + 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x49, 0x6e, 0x54, 0x6f, + 0x70, 0x69, 0x63, 0x49, 0x64, 0x12, 0x35, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x73, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x49, 0x6e, 0x54, 0x6f, - 0x70, 0x69, 0x63, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x41, 0x88, - 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x36, 0x12, 0x34, 0x2f, 0x65, 0x6d, 0x69, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, - 0x5f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x2f, 0x7b, 0x74, 0x6f, 0x70, - 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, - 0x12, 0xd3, 0x01, 0x0a, 0x1c, 0x49, 0x73, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x52, 0x65, + 0x70, 0x69, 0x63, 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, 0x2e, 0x65, + 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x49, 0x73, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, + 0x72, 0x65, 0x64, 0x49, 0x6e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x41, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x36, 0x12, 0x34, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, + 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, + 0x65, 0x64, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x61, + 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, 0x12, 0xd3, 0x01, 0x0a, 0x1c, 0x49, 0x73, 0x52, 0x65, + 0x70, 0x75, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x49, + 0x6e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x12, 0x36, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x73, 0x52, + 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, + 0x49, 0x6e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x37, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x73, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x49, 0x6e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x49, - 0x64, 0x12, 0x36, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, - 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x73, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x52, - 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x49, 0x6e, 0x54, 0x6f, 0x70, 0x69, 0x63, - 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x65, 0x6d, 0x69, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x73, - 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x52, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, - 0x64, 0x49, 0x6e, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x42, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x37, 0x12, - 0x35, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x72, - 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, - 0x64, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x61, 0x64, - 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, 0x12, 0x96, 0x02, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x4e, 0x65, - 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x41, - 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x32, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x65, 0x74, 0x77, 0x6f, - 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x41, 0x74, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x65, 0x6d, 0x69, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, - 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, - 0x41, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x8d, 0x01, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x81, 0x01, 0x12, 0x7f, - 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x6e, 0x65, - 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, - 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x6c, 0x61, 0x73, 0x74, - 0x5f, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x2f, 0x7b, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x69, 0x6e, - 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x7d, 0x2f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x72, 0x65, - 0x77, 0x61, 0x72, 0x64, 0x2f, 0x7b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, - 0x68, 0x74, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x7d, 0x12, - 0xbc, 0x01, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x74, - 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x31, 0x2e, + 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x42, 0x88, 0xe7, 0xb0, 0x2a, 0x01, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x37, 0x12, 0x35, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x5f, 0x72, 0x65, + 0x67, 0x69, 0x73, 0x74, 0x65, 0x72, 0x65, 0x64, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, + 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x61, 0x64, 0x64, 0x72, 0x65, 0x73, 0x73, 0x7d, 0x12, 0xed, 0x01, + 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x65, + 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x41, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x32, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, - 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x32, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, - 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x38, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x2d, 0x12, 0x2b, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, - 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xc5, - 0x01, 0x0a, 0x22, 0x47, 0x65, 0x74, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x41, 0x76, 0x61, 0x69, - 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x65, - 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x31, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, - 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, - 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4c, 0x61, 0x74, - 0x65, 0x73, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, - 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x38, 0x88, 0xe7, - 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x12, 0x2b, 0x2f, 0x65, 0x6d, 0x69, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x5f, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x6f, 0x70, - 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xd5, 0x01, 0x0a, 0x18, 0x49, 0x73, 0x57, 0x6f, 0x72, - 0x6b, 0x65, 0x72, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x55, 0x6e, 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, - 0x6c, 0x65, 0x64, 0x12, 0x32, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, - 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x73, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, - 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x55, 0x6e, 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x65, 0x64, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x73, 0x57, 0x6f, - 0x72, 0x6b, 0x65, 0x72, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x55, 0x6e, 0x66, 0x75, 0x6c, 0x66, 0x69, - 0x6c, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x50, 0x88, 0xe7, - 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x45, 0x12, 0x43, 0x2f, 0x65, 0x6d, 0x69, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x69, 0x73, 0x5f, 0x77, 0x6f, 0x72, 0x6b, - 0x65, 0x72, 0x5f, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x5f, 0x75, 0x6e, 0x66, 0x75, 0x6c, 0x66, 0x69, - 0x6c, 0x6c, 0x65, 0x64, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x2f, - 0x7b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x7d, 0x12, 0xd9, - 0x01, 0x0a, 0x19, 0x49, 0x73, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x6e, 0x63, - 0x65, 0x55, 0x6e, 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x33, 0x2e, 0x65, - 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x49, 0x73, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x55, - 0x6e, 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, - 0x74, 0x1a, 0x34, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, - 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x73, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x4e, - 0x6f, 0x6e, 0x63, 0x65, 0x55, 0x6e, 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x51, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x46, 0x12, 0x44, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x2f, 0x76, 0x32, 0x2f, 0x69, 0x73, 0x5f, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x5f, 0x6e, - 0x6f, 0x6e, 0x63, 0x65, 0x5f, 0x75, 0x6e, 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x65, 0x64, - 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x7d, 0x12, 0xc4, 0x01, 0x0a, 0x1a, 0x47, - 0x65, 0x74, 0x55, 0x6e, 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x57, 0x6f, 0x72, - 0x6b, 0x65, 0x72, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x31, 0x2e, 0x65, 0x6d, 0x69, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x55, 0x6e, - 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x4e, - 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x65, - 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x55, 0x6e, 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, - 0x65, 0x72, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, - 0x22, 0x3f, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x12, 0x32, 0x2f, - 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x75, 0x6e, 0x66, - 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x5f, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x5f, - 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, - 0x7d, 0x12, 0xc8, 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x55, 0x6e, 0x66, 0x75, 0x6c, 0x66, 0x69, - 0x6c, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x6e, 0x63, 0x65, - 0x73, 0x12, 0x32, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, - 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x55, 0x6e, 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x65, - 0x64, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x55, 0x6e, 0x66, 0x75, 0x6c, 0x66, - 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x6e, 0x63, - 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x40, 0x88, 0xe7, 0xb0, 0x2a, - 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x35, 0x12, 0x33, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x75, 0x6e, 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, - 0x65, 0x64, 0x5f, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x6f, 0x6e, 0x63, 0x65, - 0x73, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xc3, 0x01, 0x0a, - 0x17, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x72, 0x4e, 0x65, 0x74, 0x77, 0x6f, - 0x72, 0x6b, 0x52, 0x65, 0x67, 0x72, 0x65, 0x74, 0x12, 0x2e, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x6e, 0x66, - 0x65, 0x72, 0x65, 0x72, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x67, 0x72, 0x65, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x6e, 0x66, - 0x65, 0x72, 0x65, 0x72, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x67, 0x72, 0x65, - 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x47, 0x88, 0xe7, 0xb0, 0x2a, 0x01, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3c, 0x12, 0x3a, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x72, 0x5f, 0x6e, 0x65, - 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x72, 0x65, 0x67, 0x72, 0x65, 0x74, 0x2f, 0x7b, 0x74, 0x6f, - 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x69, - 0x64, 0x7d, 0x12, 0xcd, 0x01, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, - 0x73, 0x74, 0x65, 0x72, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x67, 0x72, 0x65, - 0x74, 0x12, 0x31, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, - 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, - 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x67, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, - 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, - 0x74, 0x65, 0x72, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x67, 0x72, 0x65, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x48, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x3d, 0x12, 0x3b, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x66, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x5f, - 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x72, 0x65, 0x67, 0x72, 0x65, 0x74, 0x2f, 0x7b, - 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x77, 0x6f, 0x72, 0x6b, 0x65, - 0x72, 0x7d, 0x12, 0xf1, 0x01, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x4f, 0x6e, 0x65, 0x49, 0x6e, 0x46, - 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, - 0x52, 0x65, 0x67, 0x72, 0x65, 0x74, 0x12, 0x36, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4f, 0x6e, 0x65, 0x49, 0x6e, - 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x52, 0x65, 0x67, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, + 0x72, 0x79, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, + 0x63, 0x65, 0x73, 0x41, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x33, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, + 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, + 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x41, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x65, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x5a, 0x12, 0x58, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, + 0x76, 0x32, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x69, 0x6e, 0x66, 0x65, 0x72, + 0x65, 0x6e, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, + 0x2f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x2f, + 0x7b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x6c, 0x61, + 0x73, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x7d, 0x12, 0xbc, 0x01, + 0x0a, 0x19, 0x47, 0x65, 0x74, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x31, 0x2e, 0x65, 0x6d, + 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, + 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x4f, 0x6e, 0x65, 0x49, 0x6e, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, + 0x65, 0x72, 0x79, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x38, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x12, + 0x2b, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x73, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xc5, 0x01, 0x0a, + 0x22, 0x47, 0x65, 0x74, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x41, 0x76, 0x61, 0x69, 0x6c, 0x61, + 0x62, 0x6c, 0x65, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, + 0x6e, 0x63, 0x65, 0x12, 0x31, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, + 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x4e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4c, 0x61, 0x74, 0x65, 0x73, + 0x74, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, + 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x38, 0x88, 0xe7, 0xb0, 0x2a, + 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x12, 0x2b, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x69, + 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, + 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xd5, 0x01, 0x0a, 0x18, 0x49, 0x73, 0x57, 0x6f, 0x72, 0x6b, 0x65, + 0x72, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x55, 0x6e, 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x65, + 0x64, 0x12, 0x32, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, + 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x73, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x4e, 0x6f, + 0x6e, 0x63, 0x65, 0x55, 0x6e, 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x73, 0x57, 0x6f, 0x72, 0x6b, + 0x65, 0x72, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x55, 0x6e, 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, + 0x65, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x50, 0x88, 0xe7, 0xb0, 0x2a, + 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x45, 0x12, 0x43, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x69, 0x73, 0x5f, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, + 0x5f, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x5f, 0x75, 0x6e, 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, + 0x65, 0x64, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x7d, 0x12, 0xd9, 0x01, 0x0a, + 0x19, 0x49, 0x73, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x55, + 0x6e, 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x12, 0x33, 0x2e, 0x65, 0x6d, 0x69, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, + 0x73, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x55, 0x6e, 0x66, + 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x34, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x49, 0x73, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x6e, + 0x63, 0x65, 0x55, 0x6e, 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x51, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x46, 0x12, 0x44, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, + 0x32, 0x2f, 0x69, 0x73, 0x5f, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x6f, 0x6e, + 0x63, 0x65, 0x5f, 0x75, 0x6e, 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x2f, 0x7b, + 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x7d, 0x12, 0xc4, 0x01, 0x0a, 0x1a, 0x47, 0x65, 0x74, + 0x55, 0x6e, 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x65, + 0x72, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x12, 0x31, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x55, 0x6e, 0x66, 0x75, + 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x4e, 0x6f, 0x6e, + 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x65, 0x6d, 0x69, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x55, + 0x6e, 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, + 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3f, + 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x34, 0x12, 0x32, 0x2f, 0x65, 0x6d, + 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x75, 0x6e, 0x66, 0x75, 0x6c, + 0x66, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x5f, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x5f, 0x6e, 0x6f, + 0x6e, 0x63, 0x65, 0x73, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x12, + 0xc8, 0x01, 0x0a, 0x1b, 0x47, 0x65, 0x74, 0x55, 0x6e, 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, + 0x65, 0x64, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x12, + 0x32, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x55, 0x6e, 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x65, 0x64, 0x52, + 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, + 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x55, 0x6e, 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, + 0x6c, 0x65, 0x64, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x73, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x40, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x35, 0x12, 0x33, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x75, 0x6e, 0x66, 0x75, 0x6c, 0x66, 0x69, 0x6c, 0x6c, 0x65, 0x64, + 0x5f, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x73, 0x2f, + 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xc3, 0x01, 0x0a, 0x17, 0x47, + 0x65, 0x74, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x72, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x52, 0x65, 0x67, 0x72, 0x65, 0x74, 0x12, 0x2e, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x72, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x67, 0x72, 0x65, 0x74, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5d, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x52, 0x12, 0x50, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x2f, 0x76, 0x32, 0x2f, 0x6f, 0x6e, 0x65, 0x5f, 0x69, 0x6e, 0x5f, 0x66, 0x6f, 0x72, 0x65, 0x63, - 0x61, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x72, 0x65, - 0x67, 0x72, 0x65, 0x74, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x2f, - 0x7b, 0x66, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, - 0x66, 0x65, 0x72, 0x65, 0x72, 0x7d, 0x12, 0x9c, 0x01, 0x0a, 0x10, 0x49, 0x73, 0x57, 0x68, 0x69, - 0x74, 0x65, 0x6c, 0x69, 0x73, 0x74, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x2a, 0x2e, 0x65, 0x6d, - 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x49, 0x73, 0x57, 0x68, 0x69, 0x74, 0x65, 0x6c, 0x69, 0x73, 0x74, 0x41, 0x64, 0x6d, 0x69, 0x6e, - 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x73, 0x57, 0x68, - 0x69, 0x74, 0x65, 0x6c, 0x69, 0x73, 0x74, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x12, 0x27, 0x2f, 0x65, - 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x77, 0x68, 0x69, 0x74, - 0x65, 0x6c, 0x69, 0x73, 0x74, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2f, 0x7b, 0x61, 0x64, 0x64, - 0x72, 0x65, 0x73, 0x73, 0x7d, 0x12, 0xae, 0x01, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x70, - 0x69, 0x63, 0x4c, 0x61, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x6d, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x6e, 0x66, 0x65, 0x72, + 0x65, 0x72, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x67, 0x72, 0x65, 0x74, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x47, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x3c, 0x12, 0x3a, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x2f, 0x76, 0x32, 0x2f, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x72, 0x5f, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x5f, 0x72, 0x65, 0x67, 0x72, 0x65, 0x74, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, + 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x61, 0x63, 0x74, 0x6f, 0x72, 0x5f, 0x69, 0x64, 0x7d, + 0x12, 0xcd, 0x01, 0x0a, 0x1a, 0x47, 0x65, 0x74, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, + 0x65, 0x72, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x67, 0x72, 0x65, 0x74, 0x12, + 0x31, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x67, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, + 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, + 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, + 0x72, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x67, 0x72, 0x65, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x48, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x3d, 0x12, 0x3b, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, + 0x76, 0x32, 0x2f, 0x66, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x72, 0x65, 0x67, 0x72, 0x65, 0x74, 0x2f, 0x7b, 0x74, 0x6f, + 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x7d, + 0x12, 0xf1, 0x01, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x4f, 0x6e, 0x65, 0x49, 0x6e, 0x46, 0x6f, 0x72, + 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, + 0x67, 0x72, 0x65, 0x74, 0x12, 0x36, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4f, 0x6e, 0x65, 0x49, 0x6e, 0x46, 0x6f, + 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, + 0x65, 0x67, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x65, + 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x4f, 0x6e, 0x65, 0x49, 0x6e, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, + 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x67, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x5d, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x52, 0x12, 0x50, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, + 0x32, 0x2f, 0x6f, 0x6e, 0x65, 0x5f, 0x69, 0x6e, 0x5f, 0x66, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, + 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x72, 0x65, 0x67, 0x72, + 0x65, 0x74, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x66, + 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x66, 0x65, + 0x72, 0x65, 0x72, 0x7d, 0x12, 0x9c, 0x01, 0x0a, 0x10, 0x49, 0x73, 0x57, 0x68, 0x69, 0x74, 0x65, + 0x6c, 0x69, 0x73, 0x74, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x12, 0x2a, 0x2e, 0x65, 0x6d, 0x69, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x73, + 0x57, 0x68, 0x69, 0x74, 0x65, 0x6c, 0x69, 0x73, 0x74, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x65, + 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x73, 0x57, 0x68, 0x69, 0x74, + 0x65, 0x6c, 0x69, 0x73, 0x74, 0x41, 0x64, 0x6d, 0x69, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x2f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x29, 0x12, 0x27, 0x2f, 0x65, 0x6d, 0x69, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x77, 0x68, 0x69, 0x74, 0x65, 0x6c, + 0x69, 0x73, 0x74, 0x5f, 0x61, 0x64, 0x6d, 0x69, 0x6e, 0x2f, 0x7b, 0x61, 0x64, 0x64, 0x72, 0x65, + 0x73, 0x73, 0x7d, 0x12, 0xae, 0x01, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, + 0x4c, 0x61, 0x73, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, + 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x29, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x4c, 0x61, + 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x2a, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x4c, 0x61, 0x73, 0x74, 0x43, 0x6f, 0x6d, + 0x6d, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x37, 0x88, 0xe7, 0xb0, + 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x12, 0x2a, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x6c, 0x61, + 0x73, 0x74, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, + 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xaf, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x69, + 0x63, 0x4c, 0x61, 0x73, 0x74, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x29, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x4c, 0x61, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, @@ -68061,450 +68012,439 @@ var file_emissions_v2_query_proto_rawDesc = []byte{ 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x12, 0x2a, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x2f, 0x7b, 0x74, 0x6f, 0x70, - 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xaf, 0x01, 0x0a, 0x1d, 0x47, 0x65, 0x74, 0x54, 0x6f, - 0x70, 0x69, 0x63, 0x4c, 0x61, 0x73, 0x74, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x43, 0x6f, - 0x6d, 0x6d, 0x69, 0x74, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x29, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x70, - 0x69, 0x63, 0x4c, 0x61, 0x73, 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, - 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x4c, 0x61, 0x73, - 0x74, 0x43, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x37, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x12, 0x2a, 0x2f, 0x65, - 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x74, 0x6f, 0x70, 0x69, - 0x63, 0x5f, 0x6c, 0x61, 0x73, 0x74, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x69, 0x74, 0x2f, 0x7b, 0x74, - 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xa8, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, - 0x54, 0x6f, 0x70, 0x69, 0x63, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x4e, 0x6f, 0x6e, 0x63, 0x65, - 0x12, 0x2a, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, - 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x65, - 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x4e, 0x6f, 0x6e, 0x63, - 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x38, 0x88, 0xe7, 0xb0, 0x2a, 0x01, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, 0x12, 0x2b, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x72, 0x65, 0x77, 0x61, - 0x72, 0x64, 0x5f, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, - 0x69, 0x64, 0x7d, 0x12, 0xd4, 0x01, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x75, 0x74, - 0x65, 0x72, 0x4c, 0x6f, 0x73, 0x73, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x41, 0x74, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x33, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, + 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xa8, 0x01, 0x0a, 0x13, 0x47, 0x65, 0x74, 0x54, 0x6f, + 0x70, 0x69, 0x63, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x12, 0x2a, + 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x4e, 0x6f, + 0x6e, 0x63, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x65, 0x6d, 0x69, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, + 0x6f, 0x70, 0x69, 0x63, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x4e, 0x6f, 0x6e, 0x63, 0x65, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x38, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x2d, 0x12, 0x2b, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x2f, 0x76, 0x32, 0x2f, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, + 0x5f, 0x6e, 0x6f, 0x6e, 0x63, 0x65, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, + 0x7d, 0x12, 0xd4, 0x01, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x4c, 0x6f, 0x73, 0x73, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x41, 0x74, 0x42, 0x6c, 0x6f, - 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x65, 0x6d, 0x69, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, - 0x70, 0x75, 0x74, 0x65, 0x72, 0x4c, 0x6f, 0x73, 0x73, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, - 0x41, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x49, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3e, 0x12, 0x3c, 0x2f, 0x65, - 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x72, 0x65, 0x70, 0x75, - 0x74, 0x65, 0x72, 0x5f, 0x6c, 0x6f, 0x73, 0x73, 0x5f, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, - 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x62, 0x6c, 0x6f, - 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x7d, 0x12, 0xc6, 0x01, 0x0a, 0x18, 0x47, - 0x65, 0x74, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x41, 0x75, - 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x2f, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x6b, - 0x65, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, - 0x79, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, - 0x6b, 0x65, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, - 0x74, 0x79, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x47, 0x88, 0xe7, 0xb0, 0x2a, - 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3c, 0x12, 0x3a, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x5f, 0x72, 0x65, 0x70, - 0x75, 0x74, 0x65, 0x72, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x2f, 0x7b, - 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x75, 0x74, - 0x65, 0x72, 0x7d, 0x12, 0xd5, 0x01, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x67, - 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, - 0x74, 0x12, 0x30, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, - 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x74, - 0x61, 0x6b, 0x65, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, - 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, - 0x53, 0x74, 0x61, 0x6b, 0x65, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x53, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x48, 0x12, 0x46, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, - 0x76, 0x32, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x6b, - 0x65, 0x5f, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x7b, 0x74, 0x6f, 0x70, - 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, - 0x72, 0x7d, 0x2f, 0x7b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x7d, 0x12, 0xd2, 0x01, 0x0a, 0x1b, - 0x47, 0x65, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x6b, 0x65, - 0x55, 0x70, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x12, 0x32, 0x2e, 0x65, 0x6d, - 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x55, 0x70, 0x6f, - 0x6e, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x33, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, + 0x63, 0x6b, 0x12, 0x33, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, + 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x4c, 0x6f, + 0x73, 0x73, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x41, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x70, 0x75, + 0x74, 0x65, 0x72, 0x4c, 0x6f, 0x73, 0x73, 0x42, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x41, 0x74, + 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x49, 0x88, + 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3e, 0x12, 0x3c, 0x2f, 0x65, 0x6d, 0x69, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, + 0x72, 0x5f, 0x6c, 0x6f, 0x73, 0x73, 0x5f, 0x62, 0x75, 0x6e, 0x64, 0x6c, 0x65, 0x73, 0x2f, 0x7b, + 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, + 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x7d, 0x12, 0xc6, 0x01, 0x0a, 0x18, 0x47, 0x65, 0x74, + 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, + 0x6f, 0x72, 0x69, 0x74, 0x79, 0x12, 0x2f, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, + 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x6b, 0x65, + 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x41, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x47, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x3c, 0x12, 0x3a, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x5f, 0x72, 0x65, 0x70, 0x75, 0x74, + 0x65, 0x72, 0x5f, 0x61, 0x75, 0x74, 0x68, 0x6f, 0x72, 0x69, 0x74, 0x79, 0x2f, 0x7b, 0x74, 0x6f, + 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, + 0x7d, 0x12, 0xd5, 0x01, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, + 0x65, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x12, + 0x30, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x6b, - 0x65, 0x55, 0x70, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4a, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x3f, 0x12, 0x3d, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, + 0x65, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x31, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, + 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x74, + 0x61, 0x6b, 0x65, 0x50, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x53, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x48, 0x12, 0x46, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x5f, - 0x75, 0x70, 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x2f, 0x7b, 0x74, 0x6f, - 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x7d, - 0x12, 0xcb, 0x01, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, - 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x50, 0x65, 0x72, 0x53, 0x68, 0x61, 0x72, 0x65, 0x12, 0x30, + 0x70, 0x6c, 0x61, 0x63, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, + 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, 0x72, 0x7d, + 0x2f, 0x7b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x7d, 0x12, 0xd2, 0x01, 0x0a, 0x1b, 0x47, 0x65, + 0x74, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x55, 0x70, + 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x12, 0x32, 0x2e, 0x65, 0x6d, 0x69, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x55, 0x70, 0x6f, 0x6e, 0x52, + 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, + 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x55, + 0x70, 0x6f, 0x6e, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x4a, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3f, 0x12, + 0x3d, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x64, + 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x5f, 0x75, 0x70, + 0x6f, 0x6e, 0x5f, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, + 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x7d, 0x12, 0xcb, + 0x01, 0x0a, 0x19, 0x47, 0x65, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x65, + 0x77, 0x61, 0x72, 0x64, 0x50, 0x65, 0x72, 0x53, 0x68, 0x61, 0x72, 0x65, 0x12, 0x30, 0x2e, 0x65, + 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x50, + 0x65, 0x72, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x31, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, - 0x64, 0x50, 0x65, 0x72, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x31, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x52, 0x65, 0x77, - 0x61, 0x72, 0x64, 0x50, 0x65, 0x72, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x49, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3e, - 0x12, 0x3c, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, - 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, - 0x70, 0x65, 0x72, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, - 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x7d, 0x12, 0xdd, - 0x01, 0x0a, 0x23, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, - 0x61, 0x6c, 0x46, 0x6f, 0x72, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x41, 0x6e, 0x64, 0x54, - 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x12, 0x3a, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x6b, 0x65, - 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x46, 0x6f, 0x72, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, - 0x72, 0x41, 0x6e, 0x64, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x3b, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, - 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x6d, 0x6f, - 0x76, 0x61, 0x6c, 0x46, 0x6f, 0x72, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x41, 0x6e, 0x64, - 0x54, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, - 0x3d, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x32, 0x12, 0x30, 0x2f, 0x65, - 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x73, 0x74, 0x61, 0x6b, - 0x65, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x75, 0x74, - 0x65, 0x72, 0x7d, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xdd, - 0x01, 0x0a, 0x17, 0x47, 0x65, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x74, - 0x61, 0x6b, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x12, 0x2e, 0x2e, 0x65, 0x6d, 0x69, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, - 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x6d, 0x6f, - 0x76, 0x61, 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x65, 0x6d, 0x69, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, - 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x6d, 0x6f, - 0x76, 0x61, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x61, 0x88, 0xe7, 0xb0, - 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x56, 0x12, 0x54, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, - 0x5f, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x2f, 0x7b, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x7d, 0x2f, 0x7b, 0x74, - 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, - 0x74, 0x6f, 0x72, 0x7d, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x7d, 0x12, 0xb4, - 0x01, 0x0a, 0x16, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x54, 0x6f, - 0x70, 0x69, 0x63, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x2d, 0x2e, 0x65, 0x6d, 0x69, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, - 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x57, 0x65, 0x69, 0x67, 0x68, - 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, 0x65, - 0x76, 0x69, 0x6f, 0x75, 0x73, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3b, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x30, 0x12, 0x2e, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x5f, 0x74, 0x6f, - 0x70, 0x69, 0x63, 0x5f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, - 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x90, 0x01, 0x0a, 0x0b, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x45, - 0x78, 0x69, 0x73, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x45, - 0x78, 0x69, 0x73, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x65, - 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x32, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x27, 0x12, 0x25, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, - 0x2f, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x2f, 0x7b, 0x74, - 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x99, 0x01, 0x0a, 0x0d, 0x49, 0x73, 0x54, - 0x6f, 0x70, 0x69, 0x63, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x27, 0x2e, 0x65, 0x6d, 0x69, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, - 0x73, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, - 0x65, 0x73, 0x74, 0x1a, 0x28, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, - 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x73, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x41, - 0x63, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x35, 0x88, - 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x65, 0x6d, 0x69, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x69, 0x73, 0x5f, 0x74, 0x6f, 0x70, - 0x69, 0x63, 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, - 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xa4, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x69, - 0x63, 0x46, 0x65, 0x65, 0x52, 0x65, 0x76, 0x65, 0x6e, 0x75, 0x65, 0x12, 0x29, 0x2e, 0x65, 0x6d, - 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x54, 0x6f, 0x70, 0x69, 0x63, 0x46, 0x65, 0x65, 0x52, 0x65, 0x76, 0x65, 0x6e, 0x75, 0x65, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x70, 0x69, 0x63, - 0x46, 0x65, 0x65, 0x52, 0x65, 0x76, 0x65, 0x6e, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x37, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x12, - 0x2a, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x74, - 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x66, 0x65, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x65, 0x6e, 0x75, 0x65, - 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x9c, 0x01, 0x0a, 0x13, - 0x47, 0x65, 0x74, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x70, - 0x69, 0x63, 0x73, 0x12, 0x2a, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, - 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x61, 0x62, - 0x6c, 0x65, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x2b, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, - 0x70, 0x69, 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2c, 0x88, 0xe7, - 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x12, 0x1f, 0x2f, 0x65, 0x6d, 0x69, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x61, - 0x62, 0x6c, 0x65, 0x5f, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x12, 0xba, 0x01, 0x0a, 0x15, 0x47, - 0x65, 0x74, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x72, 0x53, - 0x63, 0x6f, 0x72, 0x65, 0x12, 0x2c, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x49, - 0x6e, 0x66, 0x65, 0x72, 0x65, 0x72, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, - 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x66, - 0x65, 0x72, 0x65, 0x72, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, - 0x65, 0x22, 0x44, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, 0x12, 0x37, - 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x6c, 0x61, - 0x74, 0x65, 0x73, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x72, 0x5f, 0x73, 0x63, 0x6f, - 0x72, 0x65, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x69, - 0x6e, 0x66, 0x65, 0x72, 0x65, 0x72, 0x7d, 0x12, 0xc9, 0x01, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x4c, - 0x61, 0x74, 0x65, 0x73, 0x74, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x53, - 0x63, 0x6f, 0x72, 0x65, 0x12, 0x2f, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x46, - 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, - 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, - 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4a, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x3f, 0x12, 0x3d, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x2f, 0x76, 0x32, 0x2f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x66, 0x6f, 0x72, 0x65, 0x63, - 0x61, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x7b, 0x74, 0x6f, 0x70, - 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x66, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, - 0x65, 0x72, 0x7d, 0x12, 0xba, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x4c, 0x61, 0x74, 0x65, 0x73, - 0x74, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x2c, 0x2e, + 0x64, 0x50, 0x65, 0x72, 0x53, 0x68, 0x61, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x49, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3e, 0x12, 0x3c, + 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x64, 0x65, + 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x70, 0x65, + 0x72, 0x5f, 0x73, 0x68, 0x61, 0x72, 0x65, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, + 0x64, 0x7d, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x7d, 0x12, 0xdd, 0x01, 0x0a, + 0x23, 0x47, 0x65, 0x74, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, + 0x46, 0x6f, 0x72, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x41, 0x6e, 0x64, 0x54, 0x6f, 0x70, + 0x69, 0x63, 0x49, 0x64, 0x12, 0x3a, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, + 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x46, 0x6f, 0x72, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x41, + 0x6e, 0x64, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x49, 0x64, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x3b, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x61, + 0x6c, 0x46, 0x6f, 0x72, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x41, 0x6e, 0x64, 0x54, 0x6f, + 0x70, 0x69, 0x63, 0x49, 0x64, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3d, 0x88, + 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x32, 0x12, 0x30, 0x2f, 0x65, 0x6d, 0x69, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x5f, + 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, + 0x7d, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0xdd, 0x01, 0x0a, + 0x17, 0x47, 0x65, 0x74, 0x44, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x6b, + 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x12, 0x2e, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, + 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x61, + 0x6c, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x44, 0x65, 0x6c, + 0x65, 0x67, 0x61, 0x74, 0x65, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x6d, 0x6f, 0x76, 0x61, + 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x61, 0x88, 0xe7, 0xb0, 0x2a, 0x01, + 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x56, 0x12, 0x54, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x65, 0x5f, 0x73, + 0x74, 0x61, 0x6b, 0x65, 0x5f, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x61, 0x6c, 0x2f, 0x7b, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x7d, 0x2f, 0x7b, 0x74, 0x6f, 0x70, + 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x64, 0x65, 0x6c, 0x65, 0x67, 0x61, 0x74, 0x6f, + 0x72, 0x7d, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x7d, 0x12, 0xb4, 0x01, 0x0a, + 0x16, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x54, 0x6f, 0x70, 0x69, + 0x63, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x12, 0x2d, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, 0x65, 0x76, + 0x69, 0x6f, 0x75, 0x73, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, + 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2e, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, 0x65, 0x76, 0x69, + 0x6f, 0x75, 0x73, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x57, 0x65, 0x69, 0x67, 0x68, 0x74, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x3b, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x30, 0x12, 0x2e, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, + 0x76, 0x32, 0x2f, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x5f, 0x74, 0x6f, 0x70, 0x69, + 0x63, 0x5f, 0x77, 0x65, 0x69, 0x67, 0x68, 0x74, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, + 0x69, 0x64, 0x7d, 0x12, 0x90, 0x01, 0x0a, 0x0b, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x45, 0x78, 0x69, + 0x73, 0x74, 0x73, 0x12, 0x25, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, + 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x45, 0x78, 0x69, + 0x73, 0x74, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x26, 0x2e, 0x65, 0x6d, 0x69, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, + 0x6f, 0x70, 0x69, 0x63, 0x45, 0x78, 0x69, 0x73, 0x74, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x32, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x27, 0x12, + 0x25, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x74, + 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x65, 0x78, 0x69, 0x73, 0x74, 0x73, 0x2f, 0x7b, 0x74, 0x6f, 0x70, + 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x99, 0x01, 0x0a, 0x0d, 0x49, 0x73, 0x54, 0x6f, 0x70, + 0x69, 0x63, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x12, 0x27, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x73, 0x54, + 0x6f, 0x70, 0x69, 0x63, 0x41, 0x63, 0x74, 0x69, 0x76, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, + 0x74, 0x1a, 0x28, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, + 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x73, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x41, 0x63, 0x74, + 0x69, 0x76, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x35, 0x88, 0xe7, 0xb0, + 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x69, 0x73, 0x5f, 0x74, 0x6f, 0x70, 0x69, 0x63, + 0x5f, 0x61, 0x63, 0x74, 0x69, 0x76, 0x65, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, + 0x64, 0x7d, 0x12, 0xa4, 0x01, 0x0a, 0x12, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x46, + 0x65, 0x65, 0x52, 0x65, 0x76, 0x65, 0x6e, 0x75, 0x65, 0x12, 0x29, 0x2e, 0x65, 0x6d, 0x69, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, + 0x70, 0x69, 0x63, 0x46, 0x65, 0x65, 0x52, 0x65, 0x76, 0x65, 0x6e, 0x75, 0x65, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2a, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, 0x70, 0x69, 0x63, 0x46, 0x65, + 0x65, 0x52, 0x65, 0x76, 0x65, 0x6e, 0x75, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x37, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2c, 0x12, 0x2a, 0x2f, + 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x74, 0x6f, 0x70, + 0x69, 0x63, 0x5f, 0x66, 0x65, 0x65, 0x5f, 0x72, 0x65, 0x76, 0x65, 0x6e, 0x75, 0x65, 0x2f, 0x7b, + 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x12, 0x9c, 0x01, 0x0a, 0x13, 0x47, 0x65, + 0x74, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x70, 0x69, 0x63, + 0x73, 0x12, 0x2a, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, + 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x61, 0x62, 0x6c, 0x65, + 0x54, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2b, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x53, - 0x63, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x65, 0x6d, + 0x72, 0x79, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x54, 0x6f, 0x70, 0x69, + 0x63, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x2c, 0x88, 0xe7, 0xb0, 0x2a, + 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x21, 0x12, 0x1f, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x61, 0x62, 0x6c, + 0x65, 0x5f, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x73, 0x12, 0xba, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, + 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x72, 0x53, 0x63, 0x6f, + 0x72, 0x65, 0x12, 0x2c, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, + 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x66, + 0x65, 0x72, 0x65, 0x72, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x2d, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x49, 0x6e, 0x66, 0x65, 0x72, + 0x65, 0x72, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, + 0x44, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, 0x12, 0x37, 0x2f, 0x65, + 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x6c, 0x61, 0x74, 0x65, + 0x73, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x72, 0x5f, 0x73, 0x63, 0x6f, 0x72, 0x65, + 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x69, 0x6e, 0x66, + 0x65, 0x72, 0x65, 0x72, 0x7d, 0x12, 0xc9, 0x01, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x4c, 0x61, 0x74, + 0x65, 0x73, 0x74, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x53, 0x63, 0x6f, + 0x72, 0x65, 0x12, 0x2f, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, + 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x46, 0x6f, 0x72, + 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, + 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x46, 0x6f, + 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4a, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x3f, 0x12, 0x3d, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, + 0x32, 0x2f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x66, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, + 0x74, 0x65, 0x72, 0x5f, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, + 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x66, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, + 0x7d, 0x12, 0xba, 0x01, 0x0a, 0x15, 0x47, 0x65, 0x74, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x52, + 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x12, 0x2c, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x53, 0x63, 0x6f, - 0x72, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x44, 0x88, 0xe7, 0xb0, 0x2a, - 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, 0x12, 0x37, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, - 0x70, 0x75, 0x74, 0x65, 0x72, 0x5f, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x7b, 0x74, 0x6f, 0x70, - 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x7d, - 0x12, 0xdc, 0x01, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, - 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x55, 0x6e, 0x74, 0x69, 0x6c, 0x42, 0x6c, 0x6f, 0x63, - 0x6b, 0x12, 0x33, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, - 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x53, - 0x63, 0x6f, 0x72, 0x65, 0x73, 0x55, 0x6e, 0x74, 0x69, 0x6c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, - 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x6e, 0x66, 0x65, 0x72, - 0x65, 0x6e, 0x63, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x55, 0x6e, 0x74, 0x69, 0x6c, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x51, 0x88, 0xe7, - 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x46, 0x12, 0x44, 0x2f, 0x65, 0x6d, 0x69, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, - 0x63, 0x65, 0x5f, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x5f, 0x75, 0x6e, 0x74, 0x69, 0x6c, 0x5f, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, - 0x2f, 0x7b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x7d, 0x12, - 0xe9, 0x01, 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x49, 0x6e, 0x66, - 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x41, 0x74, 0x42, 0x6c, - 0x6f, 0x63, 0x6b, 0x12, 0x36, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, - 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x49, 0x6e, - 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x41, 0x74, 0x42, - 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x65, 0x6d, - 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x53, - 0x63, 0x6f, 0x72, 0x65, 0x73, 0x41, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x55, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x4a, 0x12, 0x48, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, - 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, - 0x65, 0x5f, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x5f, 0x61, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, - 0x6b, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x62, 0x6c, - 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x7d, 0x12, 0xd8, 0x01, 0x0a, 0x1b, - 0x47, 0x65, 0x74, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, - 0x73, 0x55, 0x6e, 0x74, 0x69, 0x6c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x32, 0x2e, 0x65, 0x6d, - 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x55, 0x6e, - 0x74, 0x69, 0x6c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, + 0x72, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2d, 0x2e, 0x65, 0x6d, 0x69, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4c, 0x61, + 0x74, 0x65, 0x73, 0x74, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x53, 0x63, 0x6f, 0x72, 0x65, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x44, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x39, 0x12, 0x37, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x6c, 0x61, 0x74, 0x65, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x70, 0x75, + 0x74, 0x65, 0x72, 0x5f, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, + 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x7d, 0x12, 0xdc, + 0x01, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x53, + 0x63, 0x6f, 0x72, 0x65, 0x73, 0x55, 0x6e, 0x74, 0x69, 0x6c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x33, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x53, 0x63, 0x6f, 0x72, - 0x65, 0x73, 0x55, 0x6e, 0x74, 0x69, 0x6c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, - 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x50, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, - 0x45, 0x12, 0x43, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, - 0x2f, 0x66, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73, - 0x5f, 0x75, 0x6e, 0x74, 0x69, 0x6c, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2f, 0x7b, 0x74, 0x6f, - 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, - 0x65, 0x69, 0x67, 0x68, 0x74, 0x7d, 0x12, 0xe5, 0x01, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x57, 0x6f, - 0x72, 0x6b, 0x65, 0x72, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x53, 0x63, 0x6f, 0x72, - 0x65, 0x73, 0x41, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x35, 0x2e, 0x65, 0x6d, 0x69, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x57, 0x6f, - 0x72, 0x6b, 0x65, 0x72, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x53, 0x63, 0x6f, 0x72, - 0x65, 0x73, 0x41, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, - 0x1a, 0x36, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, - 0x51, 0x75, 0x65, 0x72, 0x79, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x46, 0x6f, 0x72, 0x65, 0x63, - 0x61, 0x73, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x41, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, - 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x54, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, - 0xd3, 0xe4, 0x93, 0x02, 0x49, 0x12, 0x47, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x5f, 0x66, 0x6f, 0x72, 0x65, - 0x63, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x5f, 0x61, 0x74, 0x5f, 0x62, - 0x6c, 0x6f, 0x63, 0x6b, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x2f, - 0x7b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x7d, 0x12, 0xcc, - 0x01, 0x0a, 0x18, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x73, 0x53, 0x63, - 0x6f, 0x72, 0x65, 0x73, 0x41, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x2f, 0x2e, 0x65, 0x6d, - 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x73, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x41, 0x74, - 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x65, - 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x73, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x41, - 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4d, - 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x42, 0x12, 0x40, 0x2f, 0x65, 0x6d, - 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x72, 0x65, 0x70, 0x75, 0x74, - 0x65, 0x72, 0x73, 0x5f, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x5f, 0x61, 0x74, 0x5f, 0x62, 0x6c, + 0x75, 0x65, 0x72, 0x79, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x53, 0x63, 0x6f, + 0x72, 0x65, 0x73, 0x55, 0x6e, 0x74, 0x69, 0x6c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, + 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, + 0x63, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x55, 0x6e, 0x74, 0x69, 0x6c, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x51, 0x88, 0xe7, 0xb0, 0x2a, + 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x46, 0x12, 0x44, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, + 0x5f, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x5f, 0x75, 0x6e, 0x74, 0x69, 0x6c, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x7b, - 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x7d, 0x12, 0xc1, 0x01, - 0x0a, 0x17, 0x47, 0x65, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x43, 0x6f, - 0x65, 0x66, 0x66, 0x69, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x2e, 0x2e, 0x65, 0x6d, 0x69, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4c, 0x69, - 0x73, 0x74, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x65, 0x66, 0x66, 0x69, 0x63, 0x69, 0x65, - 0x6e, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x65, 0x6d, 0x69, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4c, 0x69, - 0x73, 0x74, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x65, 0x66, 0x66, 0x69, 0x63, 0x69, 0x65, - 0x6e, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x45, 0x88, 0xe7, 0xb0, 0x2a, - 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3a, 0x12, 0x38, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, - 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x69, 0x6e, 0x67, - 0x5f, 0x63, 0x6f, 0x65, 0x66, 0x66, 0x69, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x2f, 0x7b, 0x74, 0x6f, - 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, - 0x7d, 0x12, 0xe7, 0x01, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, + 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x7d, 0x12, 0xe9, 0x01, + 0x0a, 0x1f, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x65, 0x72, + 0x65, 0x6e, 0x63, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x41, 0x74, 0x42, 0x6c, 0x6f, 0x63, + 0x6b, 0x12, 0x36, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, + 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x65, + 0x72, 0x65, 0x6e, 0x63, 0x65, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x41, 0x74, 0x42, 0x6c, 0x6f, + 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x37, 0x2e, 0x65, 0x6d, 0x69, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x57, 0x6f, + 0x72, 0x6b, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x53, 0x63, 0x6f, + 0x72, 0x65, 0x73, 0x41, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x55, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x4a, 0x12, + 0x48, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x77, + 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x5f, + 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x5f, 0x61, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2f, + 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x7d, 0x12, 0xd8, 0x01, 0x0a, 0x1b, 0x47, 0x65, + 0x74, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x55, + 0x6e, 0x74, 0x69, 0x6c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x32, 0x2e, 0x65, 0x6d, 0x69, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x46, 0x6f, + 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x55, 0x6e, 0x74, 0x69, + 0x6c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x33, 0x2e, + 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, + 0x55, 0x6e, 0x74, 0x69, 0x6c, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, + 0x73, 0x65, 0x22, 0x50, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x45, 0x12, + 0x43, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x66, + 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x5f, 0x75, + 0x6e, 0x74, 0x69, 0x6c, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, + 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, + 0x67, 0x68, 0x74, 0x7d, 0x12, 0xe5, 0x01, 0x0a, 0x1e, 0x47, 0x65, 0x74, 0x57, 0x6f, 0x72, 0x6b, + 0x65, 0x72, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, + 0x41, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x35, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x57, 0x6f, 0x72, 0x6b, + 0x65, 0x72, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, + 0x41, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x36, + 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, + 0x65, 0x72, 0x79, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, + 0x74, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x41, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, + 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x54, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, + 0x93, 0x02, 0x49, 0x12, 0x47, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, + 0x76, 0x32, 0x2f, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x5f, 0x66, 0x6f, 0x72, 0x65, 0x63, 0x61, + 0x73, 0x74, 0x5f, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x5f, 0x61, 0x74, 0x5f, 0x62, 0x6c, 0x6f, + 0x63, 0x6b, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x62, + 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x7d, 0x12, 0xcc, 0x01, 0x0a, + 0x18, 0x47, 0x65, 0x74, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x73, 0x53, 0x63, 0x6f, 0x72, + 0x65, 0x73, 0x41, 0x74, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x12, 0x2f, 0x2e, 0x65, 0x6d, 0x69, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, 0x65, + 0x70, 0x75, 0x74, 0x65, 0x72, 0x73, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x41, 0x74, 0x42, 0x6c, + 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x30, 0x2e, 0x65, 0x6d, 0x69, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x52, + 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x73, 0x53, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x41, 0x74, 0x42, + 0x6c, 0x6f, 0x63, 0x6b, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x4d, 0x88, 0xe7, + 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x42, 0x12, 0x40, 0x2f, 0x65, 0x6d, 0x69, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, + 0x73, 0x5f, 0x73, 0x63, 0x6f, 0x72, 0x65, 0x73, 0x5f, 0x61, 0x74, 0x5f, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x62, 0x6c, + 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x7d, 0x12, 0xc1, 0x01, 0x0a, 0x17, + 0x47, 0x65, 0x74, 0x4c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x65, 0x66, + 0x66, 0x69, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x12, 0x2e, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4c, 0x69, 0x73, 0x74, + 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x65, 0x66, 0x66, 0x69, 0x63, 0x69, 0x65, 0x6e, 0x74, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x2f, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4c, 0x69, 0x73, 0x74, + 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x65, 0x66, 0x66, 0x69, 0x63, 0x69, 0x65, 0x6e, 0x74, + 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x45, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, + 0xd3, 0xe4, 0x93, 0x02, 0x3a, 0x12, 0x38, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x65, 0x6e, 0x69, 0x6e, 0x67, 0x5f, 0x63, + 0x6f, 0x65, 0x66, 0x66, 0x69, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, + 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x7d, 0x12, + 0xe7, 0x01, 0x0a, 0x20, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x52, + 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x46, 0x72, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x46, 0x72, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, 0x65, 0x76, 0x69, - 0x6f, 0x75, 0x73, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, - 0x46, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x38, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x52, 0x65, 0x70, 0x75, - 0x74, 0x65, 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x46, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x50, 0x88, 0xe7, 0xb0, 0x2a, 0x01, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x45, 0x12, 0x43, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x5f, 0x72, - 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x66, 0x72, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, - 0x7d, 0x2f, 0x7b, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x7d, 0x12, 0xee, 0x01, 0x0a, 0x22, - 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x49, 0x6e, 0x66, 0x65, 0x72, - 0x65, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x46, 0x72, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x39, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, - 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x49, - 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x46, 0x72, - 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, 0x2e, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x38, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x50, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, - 0x6e, 0x63, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x46, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, - 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x51, 0x88, 0xe7, 0xb0, 0x2a, 0x01, - 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x46, 0x12, 0x44, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x5f, 0x69, - 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, - 0x66, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, - 0x69, 0x64, 0x7d, 0x2f, 0x7b, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x7d, 0x12, 0xea, 0x01, 0x0a, - 0x21, 0x47, 0x65, 0x74, 0x50, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x46, 0x6f, 0x72, 0x65, - 0x63, 0x61, 0x73, 0x74, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x46, 0x72, 0x61, 0x63, 0x74, 0x69, - 0x6f, 0x6e, 0x12, 0x38, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, - 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x46, - 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x46, 0x72, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x65, - 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x50, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, - 0x74, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x46, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x72, 0x79, 0x50, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, + 0x72, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x46, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x50, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x45, 0x12, 0x43, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x2f, 0x76, 0x32, 0x2f, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x5f, 0x66, 0x6f, 0x72, - 0x65, 0x63, 0x61, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x66, 0x72, 0x61, - 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, - 0x2f, 0x7b, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x7d, 0x12, 0x80, 0x02, 0x0a, 0x2b, 0x47, 0x65, - 0x74, 0x50, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, - 0x61, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x54, 0x6f, 0x53, 0x74, 0x61, 0x6b, 0x65, - 0x64, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x73, 0x12, 0x42, 0x2e, 0x65, 0x6d, 0x69, 0x73, - 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, - 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, - 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x54, 0x6f, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x64, 0x52, 0x65, - 0x70, 0x75, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x43, 0x2e, - 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, - 0x72, 0x79, 0x50, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, - 0x74, 0x61, 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x54, 0x6f, 0x53, 0x74, 0x61, 0x6b, - 0x65, 0x64, 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x48, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3d, 0x12, - 0x3b, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x70, - 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, - 0x67, 0x65, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x74, 0x6f, 0x5f, 0x73, 0x74, 0x61, - 0x6b, 0x65, 0x64, 0x5f, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x73, 0x12, 0xba, 0x01, 0x0a, - 0x1a, 0x47, 0x65, 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x54, - 0x6f, 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x31, 0x2e, 0x65, 0x6d, + 0x2f, 0x76, 0x32, 0x2f, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x5f, 0x72, 0x65, 0x70, + 0x75, 0x74, 0x65, 0x72, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x66, 0x72, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x2f, + 0x7b, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x7d, 0x12, 0xee, 0x01, 0x0a, 0x22, 0x47, 0x65, + 0x74, 0x50, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, + 0x63, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x46, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x39, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x49, 0x6e, 0x66, + 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x46, 0x72, 0x61, 0x63, + 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3a, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x54, 0x6f, 0x44, 0x69, 0x73, - 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, - 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x54, 0x6f, - 0x44, 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x35, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, - 0x28, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x74, - 0x6f, 0x74, 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x74, 0x6f, 0x5f, 0x64, - 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0xc3, 0x01, 0x0a, 0x1c, 0x47, 0x65, - 0x74, 0x4e, 0x61, 0x69, 0x76, 0x65, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x72, 0x4e, 0x65, 0x74, - 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x67, 0x72, 0x65, 0x74, 0x12, 0x33, 0x2e, 0x65, 0x6d, 0x69, - 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, + 0x50, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, + 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x46, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, + 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x51, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, + 0xe4, 0x93, 0x02, 0x46, 0x12, 0x44, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x2f, 0x76, 0x32, 0x2f, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x5f, 0x69, 0x6e, 0x66, + 0x65, 0x72, 0x65, 0x6e, 0x63, 0x65, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x66, 0x72, + 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, + 0x7d, 0x2f, 0x7b, 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x7d, 0x12, 0xea, 0x01, 0x0a, 0x21, 0x47, + 0x65, 0x74, 0x50, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, + 0x73, 0x74, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x46, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, + 0x12, 0x38, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x46, 0x6f, 0x72, + 0x65, 0x63, 0x61, 0x73, 0x74, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x46, 0x72, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x39, 0x2e, 0x65, 0x6d, 0x69, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, + 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x52, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x46, 0x72, 0x61, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, + 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x50, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x45, 0x12, 0x43, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, + 0x32, 0x2f, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x5f, 0x66, 0x6f, 0x72, 0x65, 0x63, + 0x61, 0x73, 0x74, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x66, 0x72, 0x61, 0x63, 0x74, + 0x69, 0x6f, 0x6e, 0x2f, 0x7b, 0x74, 0x6f, 0x70, 0x69, 0x63, 0x5f, 0x69, 0x64, 0x7d, 0x2f, 0x7b, + 0x77, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x7d, 0x12, 0x80, 0x02, 0x0a, 0x2b, 0x47, 0x65, 0x74, 0x50, + 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, + 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x54, 0x6f, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x64, 0x52, + 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x73, 0x12, 0x42, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, 0x65, 0x76, + 0x69, 0x6f, 0x75, 0x73, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, 0x52, 0x65, + 0x77, 0x61, 0x72, 0x64, 0x54, 0x6f, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x64, 0x52, 0x65, 0x70, 0x75, + 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x43, 0x2e, 0x65, 0x6d, + 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, + 0x50, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, 0x73, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, + 0x67, 0x65, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x54, 0x6f, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x64, + 0x52, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x48, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3d, 0x12, 0x3b, 0x2f, + 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x70, 0x72, 0x65, + 0x76, 0x69, 0x6f, 0x75, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x61, 0x67, 0x65, + 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x74, 0x6f, 0x5f, 0x73, 0x74, 0x61, 0x6b, 0x65, + 0x64, 0x5f, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x73, 0x12, 0xba, 0x01, 0x0a, 0x1a, 0x47, + 0x65, 0x74, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x54, 0x6f, 0x44, + 0x69, 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0x31, 0x2e, 0x65, 0x6d, 0x69, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x54, 0x6f, + 0x74, 0x61, 0x6c, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x54, 0x6f, 0x44, 0x69, 0x73, 0x74, 0x72, + 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x32, 0x2e, 0x65, + 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x54, 0x6f, 0x74, 0x61, 0x6c, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x54, 0x6f, 0x44, 0x69, + 0x73, 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x35, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2a, 0x12, 0x28, 0x2f, + 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x74, 0x6f, 0x74, + 0x61, 0x6c, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x74, 0x6f, 0x5f, 0x64, 0x69, 0x73, + 0x74, 0x72, 0x69, 0x62, 0x75, 0x74, 0x65, 0x12, 0xc3, 0x01, 0x0a, 0x1c, 0x47, 0x65, 0x74, 0x4e, 0x61, 0x69, 0x76, 0x65, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x72, 0x4e, 0x65, 0x74, 0x77, 0x6f, - 0x72, 0x6b, 0x52, 0x65, 0x67, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, - 0x34, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, - 0x75, 0x65, 0x72, 0x79, 0x4e, 0x61, 0x69, 0x76, 0x65, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x72, - 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x67, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, - 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x38, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, - 0x02, 0x2d, 0x12, 0x2b, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, - 0x32, 0x2f, 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x72, - 0x5f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x72, 0x65, 0x67, 0x72, 0x65, 0x74, 0x12, - 0xe4, 0x01, 0x0a, 0x24, 0x47, 0x65, 0x74, 0x4f, 0x6e, 0x65, 0x4f, 0x75, 0x74, 0x49, 0x6e, 0x66, - 0x65, 0x72, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x72, 0x4e, 0x65, 0x74, 0x77, 0x6f, - 0x72, 0x6b, 0x52, 0x65, 0x67, 0x72, 0x65, 0x74, 0x12, 0x3b, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, - 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4f, 0x6e, 0x65, - 0x4f, 0x75, 0x74, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, - 0x72, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x67, 0x72, 0x65, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3c, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4f, 0x6e, 0x65, 0x4f, 0x75, 0x74, - 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x72, 0x4e, 0x65, - 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x67, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x41, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x36, - 0x12, 0x34, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, - 0x6f, 0x6e, 0x65, 0x5f, 0x6f, 0x75, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x72, 0x5f, - 0x69, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x72, 0x5f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, - 0x72, 0x65, 0x67, 0x72, 0x65, 0x74, 0x12, 0xf0, 0x01, 0x0a, 0x27, 0x47, 0x65, 0x74, 0x4f, 0x6e, - 0x65, 0x4f, 0x75, 0x74, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x72, 0x46, 0x6f, 0x72, 0x65, 0x63, - 0x61, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x67, 0x72, - 0x65, 0x74, 0x12, 0x3e, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, - 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4f, 0x6e, 0x65, 0x4f, 0x75, 0x74, 0x49, 0x6e, 0x66, - 0x65, 0x72, 0x65, 0x72, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x65, - 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x67, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, - 0x73, 0x74, 0x1a, 0x3f, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, - 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4f, 0x6e, 0x65, 0x4f, 0x75, 0x74, 0x49, 0x6e, 0x66, - 0x65, 0x72, 0x65, 0x72, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x65, + 0x72, 0x6b, 0x52, 0x65, 0x67, 0x72, 0x65, 0x74, 0x12, 0x33, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4e, 0x61, 0x69, + 0x76, 0x65, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x72, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x52, 0x65, 0x67, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x34, 0x2e, + 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, + 0x72, 0x79, 0x4e, 0x61, 0x69, 0x76, 0x65, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x72, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x67, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, - 0x6e, 0x73, 0x65, 0x22, 0x44, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, - 0x12, 0x37, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, - 0x6f, 0x6e, 0x65, 0x5f, 0x6f, 0x75, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x72, 0x5f, + 0x6e, 0x73, 0x65, 0x22, 0x38, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x2d, + 0x12, 0x2b, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, + 0x6e, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x72, 0x5f, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x72, 0x65, 0x67, 0x72, 0x65, 0x74, 0x12, 0xe4, 0x01, + 0x0a, 0x24, 0x47, 0x65, 0x74, 0x4f, 0x6e, 0x65, 0x4f, 0x75, 0x74, 0x49, 0x6e, 0x66, 0x65, 0x72, + 0x65, 0x72, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x72, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x52, 0x65, 0x67, 0x72, 0x65, 0x74, 0x12, 0x3b, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4f, 0x6e, 0x65, 0x4f, 0x75, + 0x74, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x72, 0x4e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x67, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x3c, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, + 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4f, 0x6e, 0x65, 0x4f, 0x75, 0x74, 0x49, 0x6e, + 0x66, 0x65, 0x72, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x72, 0x4e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x67, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x41, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x36, 0x12, 0x34, + 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x6f, 0x6e, + 0x65, 0x5f, 0x6f, 0x75, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x72, 0x5f, 0x69, 0x6e, + 0x66, 0x65, 0x72, 0x65, 0x72, 0x5f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x72, 0x65, + 0x67, 0x72, 0x65, 0x74, 0x12, 0xf0, 0x01, 0x0a, 0x27, 0x47, 0x65, 0x74, 0x4f, 0x6e, 0x65, 0x4f, + 0x75, 0x74, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x72, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, + 0x74, 0x65, 0x72, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x67, 0x72, 0x65, 0x74, + 0x12, 0x3e, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x4f, 0x6e, 0x65, 0x4f, 0x75, 0x74, 0x49, 0x6e, 0x66, 0x65, 0x72, + 0x65, 0x72, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x67, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, + 0x1a, 0x3f, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x4f, 0x6e, 0x65, 0x4f, 0x75, 0x74, 0x49, 0x6e, 0x66, 0x65, 0x72, + 0x65, 0x72, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x67, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, + 0x65, 0x22, 0x44, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x39, 0x12, 0x37, + 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x6f, 0x6e, + 0x65, 0x5f, 0x6f, 0x75, 0x74, 0x5f, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x72, 0x5f, 0x66, 0x6f, + 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, + 0x5f, 0x72, 0x65, 0x67, 0x72, 0x65, 0x74, 0x12, 0xf0, 0x01, 0x0a, 0x27, 0x47, 0x65, 0x74, 0x4f, + 0x6e, 0x65, 0x4f, 0x75, 0x74, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x49, + 0x6e, 0x66, 0x65, 0x72, 0x65, 0x72, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x67, + 0x72, 0x65, 0x74, 0x12, 0x3e, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, + 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4f, 0x6e, 0x65, 0x4f, 0x75, 0x74, 0x46, 0x6f, + 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x72, 0x4e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x67, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, + 0x65, 0x73, 0x74, 0x1a, 0x3f, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, + 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4f, 0x6e, 0x65, 0x4f, 0x75, 0x74, 0x46, 0x6f, + 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x72, 0x4e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x67, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, + 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x44, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, + 0x39, 0x12, 0x37, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, + 0x2f, 0x6f, 0x6e, 0x65, 0x5f, 0x6f, 0x75, 0x74, 0x5f, 0x66, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, + 0x74, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x72, 0x5f, 0x6e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x5f, 0x72, 0x65, 0x67, 0x72, 0x65, 0x74, 0x12, 0xfc, 0x01, 0x0a, 0x2a, 0x47, + 0x65, 0x74, 0x4f, 0x6e, 0x65, 0x4f, 0x75, 0x74, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, + 0x65, 0x72, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x65, 0x74, 0x77, + 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x67, 0x72, 0x65, 0x74, 0x12, 0x41, 0x2e, 0x65, 0x6d, 0x69, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4f, 0x6e, + 0x65, 0x4f, 0x75, 0x74, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x46, 0x6f, + 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, + 0x65, 0x67, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x42, 0x2e, 0x65, + 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, + 0x79, 0x4f, 0x6e, 0x65, 0x4f, 0x75, 0x74, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, + 0x72, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x65, 0x74, 0x77, 0x6f, + 0x72, 0x6b, 0x52, 0x65, 0x67, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x47, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3c, 0x12, 0x3a, 0x2f, + 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x6f, 0x6e, 0x65, + 0x5f, 0x6f, 0x75, 0x74, 0x5f, 0x66, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x66, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x65, 0x74, 0x77, 0x6f, - 0x72, 0x6b, 0x5f, 0x72, 0x65, 0x67, 0x72, 0x65, 0x74, 0x12, 0xf0, 0x01, 0x0a, 0x27, 0x47, 0x65, - 0x74, 0x4f, 0x6e, 0x65, 0x4f, 0x75, 0x74, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, - 0x72, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x72, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, - 0x65, 0x67, 0x72, 0x65, 0x74, 0x12, 0x3e, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4f, 0x6e, 0x65, 0x4f, 0x75, 0x74, - 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, - 0x72, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x67, 0x72, 0x65, 0x74, 0x52, 0x65, - 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x3f, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x4f, 0x6e, 0x65, 0x4f, 0x75, 0x74, - 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x49, 0x6e, 0x66, 0x65, 0x72, 0x65, - 0x72, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x67, 0x72, 0x65, 0x74, 0x52, 0x65, - 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x44, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, - 0x93, 0x02, 0x39, 0x12, 0x37, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, - 0x76, 0x32, 0x2f, 0x6f, 0x6e, 0x65, 0x5f, 0x6f, 0x75, 0x74, 0x5f, 0x66, 0x6f, 0x72, 0x65, 0x63, - 0x61, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x69, 0x6e, 0x66, 0x65, 0x72, 0x65, 0x72, 0x5f, 0x6e, 0x65, - 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x72, 0x65, 0x67, 0x72, 0x65, 0x74, 0x12, 0xfc, 0x01, 0x0a, - 0x2a, 0x47, 0x65, 0x74, 0x4f, 0x6e, 0x65, 0x4f, 0x75, 0x74, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, - 0x73, 0x74, 0x65, 0x72, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x65, - 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x67, 0x72, 0x65, 0x74, 0x12, 0x41, 0x2e, 0x65, 0x6d, - 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, - 0x4f, 0x6e, 0x65, 0x4f, 0x75, 0x74, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, - 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x65, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x52, 0x65, 0x67, 0x72, 0x65, 0x74, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x42, - 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x2e, 0x51, 0x75, - 0x65, 0x72, 0x79, 0x4f, 0x6e, 0x65, 0x4f, 0x75, 0x74, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, - 0x74, 0x65, 0x72, 0x46, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x4e, 0x65, 0x74, - 0x77, 0x6f, 0x72, 0x6b, 0x52, 0x65, 0x67, 0x72, 0x65, 0x74, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x47, 0x88, 0xe7, 0xb0, 0x2a, 0x01, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x3c, 0x12, - 0x3a, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, 0x32, 0x2f, 0x6f, - 0x6e, 0x65, 0x5f, 0x6f, 0x75, 0x74, 0x5f, 0x66, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, - 0x72, 0x5f, 0x66, 0x6f, 0x72, 0x65, 0x63, 0x61, 0x73, 0x74, 0x65, 0x72, 0x5f, 0x6e, 0x65, 0x74, - 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x72, 0x65, 0x67, 0x72, 0x65, 0x74, 0x42, 0xc0, 0x01, 0x0a, 0x10, - 0x63, 0x6f, 0x6d, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, - 0x42, 0x0a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x4f, - 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x6c, 0x6c, 0x6f, 0x72, - 0x61, 0x2d, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x6c, 0x6c, 0x6f, 0x72, 0x61, - 0x2d, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2f, 0x78, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, - 0x6e, 0x73, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x2f, 0x76, 0x32, 0x3b, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x76, 0x32, 0xa2, - 0x02, 0x03, 0x45, 0x58, 0x58, 0xaa, 0x02, 0x0c, 0x45, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, - 0x73, 0x2e, 0x56, 0x32, 0xca, 0x02, 0x0c, 0x45, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, - 0x5c, 0x56, 0x32, 0xe2, 0x02, 0x18, 0x45, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x5c, - 0x56, 0x32, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, - 0x0d, 0x45, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x72, 0x6b, 0x5f, 0x72, 0x65, 0x67, 0x72, 0x65, 0x74, 0x42, 0xc0, 0x01, 0x0a, 0x10, 0x63, 0x6f, + 0x6d, 0x2e, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x76, 0x32, 0x42, 0x0a, + 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x4f, 0x67, 0x69, + 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x6c, 0x6c, 0x6f, 0x72, 0x61, 0x2d, + 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x6c, 0x6c, 0x6f, 0x72, 0x61, 0x2d, 0x63, + 0x68, 0x61, 0x69, 0x6e, 0x2f, 0x78, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, + 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2f, 0x76, + 0x32, 0x3b, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x76, 0x32, 0xa2, 0x02, 0x03, + 0x45, 0x58, 0x58, 0xaa, 0x02, 0x0c, 0x45, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x2e, + 0x56, 0x32, 0xca, 0x02, 0x0c, 0x45, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x5c, 0x56, + 0x32, 0xe2, 0x02, 0x18, 0x45, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x5c, 0x56, 0x32, + 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0d, 0x45, + 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x3a, 0x3a, 0x56, 0x32, 0x62, 0x06, 0x70, 0x72, + 0x6f, 0x74, 0x6f, 0x33, } var ( diff --git a/x/emissions/keeper/actor_utils/losses.go b/x/emissions/keeper/actor_utils/losses.go index 41d05db5e..e79036d93 100644 --- a/x/emissions/keeper/actor_utils/losses.go +++ b/x/emissions/keeper/actor_utils/losses.go @@ -30,9 +30,7 @@ func CloseReputerNonce( return sdkerrors.ErrNotFound } - /// Do filters upon the leader (the sender) first, then do checks on each reputer in the payload /// All filters should be done in order of increasing computational complexity - // Check if the worker nonce is unfulfilled workerNonceUnfulfilled, err := k.IsWorkerNonceUnfulfilled(ctx, topicId, &nonce) if err != nil { @@ -60,7 +58,7 @@ func CloseReputerNonce( &nonce.BlockHeight, ) } - // Check if the window time has passed: if blockheight > nonce.BlockHeight + topic.WorkerSubmissionWindow + // Check if the window time has passed blockHeight := ctx.BlockHeight() if blockHeight < nonce.BlockHeight+topic.GroundTruthLag { return types.ErrReputerNonceWindowNotAvailable @@ -76,7 +74,6 @@ func CloseReputerNonce( return types.ErrNoValidBundles } - /// Do checks on each reputer in the payload // Iterate through the array to ensure each reputer is in the whitelist // and get get score for each reputer => later we can skim only the top few by score descending lossBundlesByReputer := make([]*types.ReputerValueBundle, 0) @@ -88,11 +85,11 @@ func CloseReputerNonce( reputer := bundle.ValueBundle.Reputer - // Check that the reputer's value bundle is for a topic matching the leader's given topic + // Check that the reputer's value bundle is for a topic matching the given topic if bundle.ValueBundle.TopicId != topicId { continue } - // Check that the reputer's value bundle is for a nonce matching the leader's given nonce + // Check that the reputer's value bundle is for a nonce matching the given nonce if bundle.ValueBundle.ReputerRequestNonce.ReputerNonce.BlockHeight != nonce.BlockHeight { continue } diff --git a/x/emissions/keeper/inference_synthesis/network_inferences.go b/x/emissions/keeper/inference_synthesis/network_inferences.go index 0a14b7b7d..8c858c50c 100644 --- a/x/emissions/keeper/inference_synthesis/network_inferences.go +++ b/x/emissions/keeper/inference_synthesis/network_inferences.go @@ -13,164 +13,64 @@ import ( sdkerrors "github.com/cosmos/cosmos-sdk/types/errors" ) -// Calculates all network inferences in the set I_i given historical state (e.g. regrets) -// and data from workers (e.g. inferences, forecast-implied inferences) -// as of a specified block height -func GetNetworkInferencesAtBlock( +func GetNetworkInferences( ctx sdk.Context, k keeper.Keeper, topicId TopicId, - inferencesNonce BlockHeight, - previousLossNonce BlockHeight, + inferencesNonce *BlockHeight, ) ( *emissions.ValueBundle, map[string]*emissions.Inference, map[string]alloraMath.Dec, map[string]alloraMath.Dec, + int64, + int64, error, ) { - Logger(ctx).Debug(fmt.Sprintf("Calculating network inferences for topic %v at inference nonce %v with previous loss nonce %v", topicId, inferencesNonce, previousLossNonce)) - - networkInferences := &emissions.ValueBundle{ - TopicId: topicId, - InfererValues: make([]*emissions.WorkerAttributedValue, 0), - ForecasterValues: make([]*emissions.WorkerAttributedValue, 0), - } - - forecastImpliedInferencesByWorker := make(map[string]*emissions.Inference, 0) - var infererWeights map[string]alloraMath.Dec - var forecasterWeights map[string]alloraMath.Dec - - inferences, err := k.GetInferencesAtBlock(ctx, topicId, inferencesNonce) - if err != nil || len(inferences.Inferences) == 0 { - return nil, nil, infererWeights, forecasterWeights, errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "no inferences found for topic %v at block %v", topicId, inferencesNonce) - } - // Add inferences in the bundle -> this bundle will be used as a fallback in case of error - for _, infererence := range inferences.Inferences { - networkInferences.InfererValues = append(networkInferences.InfererValues, &emissions.WorkerAttributedValue{ - Worker: infererence.Inferer, - Value: infererence.Value, - }) - } - - forecasts, err := k.GetForecastsAtBlock(ctx, topicId, inferencesNonce) - if err != nil { - if errors.Is(err, collections.ErrNotFound) { - forecasts = &emissions.Forecasts{ - Forecasts: make([]*emissions.Forecast, 0), + var ( + inferenceBlockHeight int64 + lossBlockHeight int64 + err error + ) + + // Decide whether to use the latest inferences or inferences at a specific block height + var inferences *emissions.Inferences + if inferencesNonce == nil { + inferences, inferenceBlockHeight, err = k.GetLatestTopicInferences(ctx, topicId) + if err != nil || len(inferences.Inferences) == 0 { + if err != nil { + Logger(ctx).Warn(fmt.Sprintf("Error getting inferences: %s", err.Error())) } - } else { - return nil, nil, infererWeights, forecasterWeights, err + return nil, nil, nil, nil, inferenceBlockHeight, lossBlockHeight, errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "no inferences found for topic %v", topicId) } - } - - if len(inferences.Inferences) > 1 { - moduleParams, err := k.GetParams(ctx) - if err != nil { - return nil, nil, infererWeights, forecasterWeights, err - } - - networkLosses, err := k.GetNetworkLossBundleAtBlock(ctx, topicId, previousLossNonce) - if err != nil { - Logger(ctx).Warn(fmt.Sprintf("Error getting network losses: %s", err.Error())) - return networkInferences, nil, infererWeights, forecasterWeights, nil - } - - topic, err := k.GetTopic(ctx, topicId) - if err != nil { - Logger(ctx).Warn(fmt.Sprintf("Error getting topic: %s", err.Error())) - return networkInferences, nil, infererWeights, forecasterWeights, nil - } - - Logger(ctx).Debug(fmt.Sprintf("Creating network inferences for topic %v with %v inferences and %v forecasts", topicId, len(inferences.Inferences), len(forecasts.Forecasts))) - networkInferenceBuilder, err := NewNetworkInferenceBuilderFromSynthRequest( - SynthRequest{ - Ctx: ctx, - K: k, - TopicId: topicId, - Inferences: inferences, - Forecasts: forecasts, - NetworkCombinedLoss: networkLosses.CombinedValue, - EpsilonTopic: topic.Epsilon, - EpsilonSafeDiv: moduleParams.EpsilonSafeDiv, - PNorm: topic.PNorm, - CNorm: moduleParams.CNorm, - }, - ) - if err != nil { - Logger(ctx).Warn(fmt.Sprintf("Error constructing network inferences builder topic: %s", err.Error())) - return nil, nil, infererWeights, forecasterWeights, err - } - networkInferences = networkInferenceBuilder.CalcAndSetNetworkInferences().Build() - - forecastImpliedInferencesByWorker = networkInferenceBuilder.palette.ForecastImpliedInferenceByWorker - infererWeights = networkInferenceBuilder.weights.inferers - forecasterWeights = networkInferenceBuilder.weights.forecasters } else { - // If there is only one valid inference, then the network inference is the same as the single inference - // For the forecasts to be meaningful, there should be at least 2 inferences - singleInference := inferences.Inferences[0] - - networkInferences = &emissions.ValueBundle{ - TopicId: topicId, - CombinedValue: singleInference.Value, - InfererValues: []*emissions.WorkerAttributedValue{ - { - Worker: singleInference.Inferer, - Value: singleInference.Value, - }, - }, - ForecasterValues: []*emissions.WorkerAttributedValue{}, - NaiveValue: singleInference.Value, - OneOutInfererValues: []*emissions.WithheldWorkerAttributedValue{}, - OneOutForecasterValues: []*emissions.WithheldWorkerAttributedValue{}, - OneInForecasterValues: []*emissions.WorkerAttributedValue{}, + inferences, err = k.GetInferencesAtBlock(ctx, topicId, *inferencesNonce) + inferenceBlockHeight = int64(*inferencesNonce) + if err != nil || len(inferences.Inferences) == 0 { + return nil, nil, nil, nil, inferenceBlockHeight, lossBlockHeight, errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "no inferences found for topic %v at block %v", topicId, *inferencesNonce) } } - return networkInferences, forecastImpliedInferencesByWorker, infererWeights, forecasterWeights, nil -} - -func GetLatestNetworkInference( - ctx sdk.Context, - k keeper.Keeper, - topicId TopicId, -) ( - *emissions.ValueBundle, - map[string]*emissions.Inference, - map[string]alloraMath.Dec, - map[string]alloraMath.Dec, - int64, - int64, - error, -) { - inferenceBlockHeight := int64(0) - lossBlockHeight := int64(0) - networkInferences := &emissions.ValueBundle{ TopicId: topicId, InfererValues: make([]*emissions.WorkerAttributedValue, 0), ForecasterValues: make([]*emissions.WorkerAttributedValue, 0), } + forecastImpliedInferencesByWorker := make(map[string]*emissions.Inference, 0) var infererWeights map[string]alloraMath.Dec var forecasterWeights map[string]alloraMath.Dec - inferences, inferenceBlockHeight, err := k.GetLatestTopicInferences(ctx, topicId) - if err != nil || len(inferences.Inferences) == 0 { - if err != nil { - Logger(ctx).Warn(fmt.Sprintf("Error getting inferences: %s", err.Error())) - } - return networkInferences, nil, infererWeights, forecasterWeights, inferenceBlockHeight, lossBlockHeight, errorsmod.Wrapf(sdkerrors.ErrInvalidRequest, "no inferences found for topic %v", topicId) - } - for _, infererence := range inferences.Inferences { + // Add inferences to the bundle + for _, inference := range inferences.Inferences { networkInferences.InfererValues = append(networkInferences.InfererValues, &emissions.WorkerAttributedValue{ - Worker: infererence.Inferer, - Value: infererence.Value, + Worker: inference.Inferer, + Value: inference.Value, }) } - forecasts, err := k.GetForecastsAtBlock(ctx, topicId, inferenceBlockHeight) + // Retrieve forecasts + forecasts, err := k.GetForecastsAtBlock(ctx, topicId, BlockHeight(inferenceBlockHeight)) if err != nil { if errors.Is(err, collections.ErrNotFound) { forecasts = &emissions.Forecasts{ @@ -182,52 +82,64 @@ func GetLatestNetworkInference( } } + // Proceed with network inference calculations if more than one inference exists if len(inferences.Inferences) > 1 { moduleParams, err := k.GetParams(ctx) if err != nil { return networkInferences, nil, infererWeights, forecasterWeights, inferenceBlockHeight, lossBlockHeight, err } + topic, err := k.GetTopic(ctx, topicId) if err != nil { Logger(ctx).Warn(fmt.Sprintf("Error getting topic: %s", err.Error())) return networkInferences, nil, infererWeights, forecasterWeights, inferenceBlockHeight, lossBlockHeight, nil } - lossBlockHeight = inferenceBlockHeight - topic.EpochLength - if lossBlockHeight < 0 { - Logger(ctx).Warn("Network inference is not available for the epoch yet") - return networkInferences, nil, infererWeights, forecasterWeights, inferenceBlockHeight, lossBlockHeight, nil - } - networkLosses, err := k.GetNetworkLossBundleAtBlock(ctx, topicId, lossBlockHeight) - if err != nil { - Logger(ctx).Warn(fmt.Sprintf("Error getting network losses: %s", err.Error())) + // Get latest network loss + networkLosses, err := k.GetLatestNetworkLossBundle(ctx, topicId) + if err != nil || networkLosses == nil { + // Fallback to using the median of the inferences + inferenceValues := make([]alloraMath.Dec, 0, len(inferences.Inferences)) + for _, inference := range inferences.Inferences { + inferenceValues = append(inferenceValues, inference.Value) + } + + medianValue, err := alloraMath.Median(inferenceValues) + if err != nil { + Logger(ctx).Warn(fmt.Sprintf("Error calculating median: %s", err.Error())) + return networkInferences, nil, infererWeights, forecasterWeights, inferenceBlockHeight, lossBlockHeight, nil + } + + networkInferences.CombinedValue = medianValue return networkInferences, nil, infererWeights, forecasterWeights, inferenceBlockHeight, lossBlockHeight, nil + } else { + Logger(ctx).Debug(fmt.Sprintf("Creating network inferences for topic %v with %v inferences and %v forecasts", topicId, len(inferences.Inferences), len(forecasts.Forecasts))) + + networkInferenceBuilder, err := NewNetworkInferenceBuilderFromSynthRequest( + SynthRequest{ + Ctx: ctx, + K: k, + TopicId: topicId, + Inferences: inferences, + Forecasts: forecasts, + NetworkCombinedLoss: networkLosses.CombinedValue, + EpsilonTopic: topic.Epsilon, + EpsilonSafeDiv: moduleParams.EpsilonSafeDiv, + PNorm: topic.PNorm, + CNorm: moduleParams.CNorm, + }, + ) + if err != nil { + Logger(ctx).Warn(fmt.Sprintf("Error constructing network inferences builder topic: %s", err.Error())) + return networkInferences, nil, infererWeights, forecasterWeights, inferenceBlockHeight, lossBlockHeight, err + } + networkInferences = networkInferenceBuilder.CalcAndSetNetworkInferences().Build() + forecastImpliedInferencesByWorker = networkInferenceBuilder.palette.ForecastImpliedInferenceByWorker + infererWeights = networkInferenceBuilder.weights.inferers + forecasterWeights = networkInferenceBuilder.weights.forecasters } - networkInferenceBuilder, err := NewNetworkInferenceBuilderFromSynthRequest( - SynthRequest{ - Ctx: ctx, - K: k, - TopicId: topicId, - Inferences: inferences, - Forecasts: forecasts, - NetworkCombinedLoss: networkLosses.CombinedValue, - EpsilonTopic: topic.Epsilon, - EpsilonSafeDiv: moduleParams.EpsilonSafeDiv, - PNorm: topic.PNorm, - CNorm: moduleParams.CNorm, - }, - ) - if err != nil { - Logger(ctx).Warn(fmt.Sprintf("Error constructing network inferences builder topic: %s", err.Error())) - return networkInferences, nil, infererWeights, forecasterWeights, inferenceBlockHeight, lossBlockHeight, err - } - networkInferences = networkInferenceBuilder.CalcAndSetNetworkInferences().Build() - forecastImpliedInferencesByWorker = networkInferenceBuilder.palette.ForecastImpliedInferenceByWorker - infererWeights = networkInferenceBuilder.weights.inferers - forecasterWeights = networkInferenceBuilder.weights.forecasters } else { - // If there is only one valid inference, then the network inference is the same as the single inference - // For the forecasts to be meaningful, there should be at least 2 inferences + // Single valid inference case singleInference := inferences.Inferences[0] networkInferences = &emissions.ValueBundle{ diff --git a/x/emissions/keeper/inference_synthesis/network_inferences_test.go b/x/emissions/keeper/inference_synthesis/network_inferences_test.go index 16e9b3941..2809d5472 100644 --- a/x/emissions/keeper/inference_synthesis/network_inferences_test.go +++ b/x/emissions/keeper/inference_synthesis/network_inferences_test.go @@ -141,13 +141,12 @@ func (s *InferenceSynthesisTestSuite) TestGetNetworkInferencesAtBlock() { s.Require().NoError(err) // Calculate - valueBundle, _, _, _, err := - inferencesynthesis.GetNetworkInferencesAtBlock( + valueBundle, _, _, _, _, _, err := + inferencesynthesis.GetNetworkInferences( s.ctx, s.emissionsKeeper, topicId, - blockHeight, - blockHeightPreviousLosses, + &blockHeight, ) require.NoError(err) testutil.InEpsilon5(s.T(), valueBundle.CombinedValue, epoch3Get("network_inference").String()) @@ -665,10 +664,11 @@ func (s *InferenceSynthesisTestSuite) TestGetLatestNetworkInferenceFromCsv() { // Calculate valueBundle, _, _, _, _, _, err := - inferencesynthesis.GetLatestNetworkInference( + inferencesynthesis.GetNetworkInferences( s.ctx, s.emissionsKeeper, topicId, + nil, ) require.NoError(err) testutil.InEpsilon5(s.T(), valueBundle.CombinedValue, epoch3Get("network_inference").String()) @@ -746,3 +746,56 @@ func (s *InferenceSynthesisTestSuite) TestGetLatestNetworkInferenceFromCsv() { } } } + +func (s *InferenceSynthesisTestSuite) TestGetNetworkInferencesWithMedianCalculation() { + require := s.Require() + keeper := s.emissionsKeeper + topicId := uint64(1) + blockHeight := int64(300) + + inferer1 := "worker1" + inferer2 := "worker2" + inferer3 := "worker3" + + inferences := emissionstypes.Inferences{ + Inferences: []*emissionstypes.Inference{ + { + TopicId: topicId, + Inferer: inferer1, + Value: alloraMath.MustNewDecFromString("10.0"), + }, + { + TopicId: topicId, + Inferer: inferer2, + Value: alloraMath.MustNewDecFromString("30.0"), + }, + { + TopicId: topicId, + Inferer: inferer3, + Value: alloraMath.MustNewDecFromString("20.0"), + }, + }, + } + + nonce := emissionstypes.Nonce{BlockHeight: blockHeight} + err := keeper.InsertInferences(s.ctx, topicId, nonce, inferences) + s.Require().NoError(err) + + valueBundle, _, _, _, _, _, err := inferencesynthesis.GetNetworkInferences(s.ctx, keeper, topicId, &blockHeight) + s.Require().NoError(err) + + expectedMedian := alloraMath.MustNewDecFromString("20.0") + s.Require().True(expectedMedian.Equal(valueBundle.CombinedValue), "The combined value should be the median of the inferences") + + require.Len(valueBundle.InfererValues, len(inferences.Inferences)) + for _, infererValue := range valueBundle.InfererValues { + found := false + for _, inference := range inferences.Inferences { + if inference.Inferer == infererValue.Worker { + found = true + s.Require().True(inference.Value.Equal(infererValue.Value)) + } + } + s.Require().True(found, "Inference not found in the result") + } +} diff --git a/x/emissions/keeper/inference_synthesis/synth_palette_forecast_implied.go b/x/emissions/keeper/inference_synthesis/synth_palette_forecast_implied.go index 0f1c9cc96..d60e6575a 100644 --- a/x/emissions/keeper/inference_synthesis/synth_palette_forecast_implied.go +++ b/x/emissions/keeper/inference_synthesis/synth_palette_forecast_implied.go @@ -22,9 +22,10 @@ func (p *SynthPalette) CalcForecastImpliedInferences() (map[Worker]*emissionstyp // For each forecast, and for each forecast element, calculate forecast-implied inferences I_ik I_i := make(map[Worker]*emissionstypes.Inference, len(p.Forecasters)) //nolint:revive // var-naming: don't use underscores in Go names for _, forecaster := range p.Forecasters { - if p.ForecastByWorker[forecaster] != nil && len(p.ForecastByWorker[forecaster].ForecastElements) > 0 { + _, ok := p.ForecastByWorker[forecaster] + if ok && len(p.ForecastByWorker[forecaster].ForecastElements) > 0 { // Filter away all forecast elements that do not have an associated inference (match by worker) - // Will effectively set weight in formulas for forcast-implied inference I_ik and network inference I_i to 0 for forecasts without inferences + // Will effectively set weight in formulas for forecast-implied inference I_ik and network inference I_i to 0 for forecasts without inferences // Map inferer -> forecast element => only one (latest in array) forecast element per inferer forecastElementsByInferer := make(map[Worker]*emissionstypes.ForecastElement, 0) sortedInferersInForecast := make([]Worker, 0) @@ -39,26 +40,31 @@ func (p *SynthPalette) CalcForecastImpliedInferences() (map[Worker]*emissionstyp weightSum := alloraMath.ZeroDec() // denominator in calculation of forecast-implied inferences weightInferenceDotProduct := alloraMath.ZeroDec() // numerator in calculation of forecast-implied inferences - err := error(nil) // Calculate the forecast-implied inferences I_ik if p.AllInferersAreNew { - // If all inferers are new, take regular average of inferences + // If all inferers are new, calculate the median of the inferences // This means that forecasters won't be able to influence the network inference when all inferers are new - // However this seeds losses for forecasters for future rounds + // However, this seeds losses for forecasters for future rounds + inferenceValues := make([]alloraMath.Dec, 0, len(sortedInferersInForecast)) for _, inferer := range sortedInferersInForecast { - if p.InferenceByWorker[inferer] != nil { - weightInferenceDotProduct, err = weightInferenceDotProduct.Add(p.InferenceByWorker[inferer].Value) - if err != nil { - return nil, errorsmod.Wrapf(err, "error adding dot product") - } - weightSum, err = weightSum.Add(alloraMath.OneDec()) - if err != nil { - return nil, errorsmod.Wrapf(err, "error adding weight") - } + inference, ok := p.InferenceByWorker[inferer] + if ok { + inferenceValues = append(inferenceValues, inference.Value) } } + + medianValue, err := alloraMath.Median(inferenceValues) + if err != nil { + return nil, errorsmod.Wrapf(err, "error calculating median of inference values") + } + + forecastImpliedInference := emissionstypes.Inference{ + Inferer: forecaster, + Value: medianValue, + } + I_i[forecaster] = &forecastImpliedInference } else { // If not all inferers are new, calculate forecast-implied inferences using the previous inferer regrets and previous network loss @@ -98,7 +104,8 @@ func (p *SynthPalette) CalcForecastImpliedInferences() (map[Worker]*emissionstyp // Calculate the forecast-implied inferences I_ik for _, j := range sortedInferersInForecast { w_ijk := w_ik[j] //nolint:revive // var-naming: don't use underscores in Go names - if p.InferenceByWorker[j] != nil && !(w_ijk.Equal(alloraMath.ZeroDec())) { + _, ok := p.InferenceByWorker[j] + if ok && !(w_ijk.Equal(alloraMath.ZeroDec())) { thisDotProduct, err := w_ijk.Mul(p.InferenceByWorker[j].Value) if err != nil { return nil, errorsmod.Wrapf(err, "error calculating dot product") @@ -113,18 +120,18 @@ func (p *SynthPalette) CalcForecastImpliedInferences() (map[Worker]*emissionstyp } } } - } - if !weightSum.Equal(alloraMath.ZeroDec()) { - forecastValue, err := weightInferenceDotProduct.Quo(weightSum) - if err != nil { - return nil, errorsmod.Wrapf(err, "error calculating forecast value") - } - forecastImpliedInference := emissionstypes.Inference{ - Inferer: forecaster, - Value: forecastValue, + if !weightSum.Equal(alloraMath.ZeroDec()) { + forecastValue, err := weightInferenceDotProduct.Quo(weightSum) + if err != nil { + return nil, errorsmod.Wrapf(err, "error calculating forecast value") + } + forecastImpliedInference := emissionstypes.Inference{ + Inferer: forecaster, + Value: forecastValue, + } + I_i[forecaster] = &forecastImpliedInference } - I_i[forecaster] = &forecastImpliedInference } } } diff --git a/x/emissions/keeper/invariants.go b/x/emissions/keeper/invariants.go index 6660ab021..6254b5bd7 100644 --- a/x/emissions/keeper/invariants.go +++ b/x/emissions/keeper/invariants.go @@ -181,7 +181,10 @@ func StakingInvariantDelegatedStakes(k Keeper) sdk.Invariant { } delegator := delegatorInfo.Key.K2() reputer := delegatorInfo.Key.K3() - amount := delegatorInfo.Value.Amount.SdkIntTrim() + amount, err := delegatorInfo.Value.Amount.SdkIntTrim() + if err != nil { + panic(fmt.Sprintf("failed to get amount from delegated stake: %v", err)) + } existingSumsDelegator, presentDelegator := delegatorsToSumsMap[delegator] if !presentDelegator { stakeSumForDelegator, err := k.stakeSumFromDelegator.Get(ctx, collections.Join(i, delegator)) @@ -388,7 +391,10 @@ func StakingInvariantPendingRewardForDelegatorsEqualRewardPerShareMinusRewardDeb // now check the total pending rewards bank balance is equal to the accumulated rewards beyond reward debt alloraPendingAddr := k.authKeeper.GetModuleAccount(ctx, emissionstypes.AlloraPendingRewardForDelegatorAccountName).GetAddress() bal := k.GetBankBalance(ctx, alloraPendingAddr, params.DefaultBondDenom).Amount - rewards := accumulatedRewardsBeyondRewardDebt.SdkIntTrim() + rewards, err := accumulatedRewardsBeyondRewardDebt.SdkIntTrim() + if err != nil { + panic("failed to convert accumulated rewards beyond reward debt to sdk.Int") + } // we define the invariant as holding if the rewards we think we // have to pay people is equal to the balance we have earmarked to pay them // OR if the balance we have earmarked to pay them is greater than the rewards diff --git a/x/emissions/keeper/keeper.go b/x/emissions/keeper/keeper.go index e45519ff4..7d11a4a48 100644 --- a/x/emissions/keeper/keeper.go +++ b/x/emissions/keeper/keeper.go @@ -995,6 +995,26 @@ func (k *Keeper) GetNetworkLossBundleAtBlock(ctx context.Context, topicId TopicI return &lossBundle, nil } +// Returns the latest network loss bundle for a given topic id. +func (k *Keeper) GetLatestNetworkLossBundle(ctx context.Context, topicId TopicId) (*types.ValueBundle, error) { + rng := collections.NewPrefixedPairRange[TopicId, BlockHeight](topicId).Descending() + iter, err := k.networkLossBundles.Iterate(ctx, rng) + if err != nil { + return nil, err + } + defer iter.Close() + + if iter.Valid() { + keyValue, err := iter.KeyValue() + if err != nil { + return nil, err + } + return &keyValue.Value, nil + } + + return nil, nil +} + /// STAKING // Adds stake to the system for a given topic and reputer @@ -1095,11 +1115,15 @@ func (k *Keeper) AddDelegateStake( return err } if pendingReward.Gt(alloraMath.NewDecFromInt64(0)) { + pendingRewardInt, err := pendingReward.SdkIntTrim() + if err != nil { + return err + } err = k.SendCoinsFromModuleToAccount( ctx, types.AlloraPendingRewardForDelegatorAccountName, delegator, - sdk.NewCoins(sdk.NewCoin(params.DefaultBondDenom, pendingReward.SdkIntTrim())), + sdk.NewCoins(sdk.NewCoin(params.DefaultBondDenom, pendingRewardInt)), ) if err != nil { return err @@ -1277,11 +1301,15 @@ func (k *Keeper) RemoveDelegateStake( return err } if pendingReward.Gt(alloraMath.NewDecFromInt64(0)) { + pendingRewardInt, err := pendingReward.SdkIntTrim() + if err != nil { + return err + } err = k.SendCoinsFromModuleToAccount( ctx, types.AlloraPendingRewardForDelegatorAccountName, delegator, - sdk.NewCoins(sdk.NewCoin(params.DefaultBondDenom, pendingReward.SdkIntTrim())), + sdk.NewCoins(sdk.NewCoin(params.DefaultBondDenom, pendingRewardInt)), ) if err != nil { return errorsmod.Wrapf(err, "Sending pending reward to delegator failed") @@ -2023,7 +2051,10 @@ func (k *Keeper) DripTopicFeeRevenue(ctx sdk.Context, topicId TopicId, block Blo if err != nil { return err } - newTopicFeeRevenue = val.SdkIntTrim() + newTopicFeeRevenue, err = val.SdkIntTrim() + if err != nil { + return err + } } ctx.Logger().Debug(fmt.Sprintf("Dripping topic fee revenue: block %d, topicId %d, oldRevenue %v, newRevenue %v", ctx.BlockHeight(), topicId, topicFeeRevenue, newTopicFeeRevenue)) diff --git a/x/emissions/keeper/keeper_test.go b/x/emissions/keeper/keeper_test.go index 5949d656e..2c0ec2a04 100644 --- a/x/emissions/keeper/keeper_test.go +++ b/x/emissions/keeper/keeper_test.go @@ -1286,6 +1286,38 @@ func (s *KeeperTestSuite) TestGetNetworkLossBundleAtBlock() { require.Equal(uint64(0), result.TopicId, "Result should be nil for non-existent data") } +func (s *KeeperTestSuite) TestGetLatestNetworkLossBundle() { + ctx := s.ctx + keeper := s.emissionsKeeper + topicId := s.CreateOneTopic() + + // Initially, there should be no loss bundle, so we expect a zero result + emptyLossBundle, err := keeper.GetLatestNetworkLossBundle(ctx, topicId) + s.Require().NoError(err, "Retrieving latest network loss bundle when none exist should not result in an error") + s.Require().Nil(emptyLossBundle, "Expected no network loss bundle initially") + + // Insert first network loss bundle + blockHeight1 := types.BlockHeight(100) + lossBundle1 := types.ValueBundle{ + CombinedValue: alloraMath.MustNewDecFromString("123"), + } + err = keeper.InsertNetworkLossBundleAtBlock(ctx, topicId, blockHeight1, lossBundle1) + s.Require().NoError(err, "Inserting first network loss bundle should not fail") + + // Insert second network loss bundle + blockHeight2 := types.BlockHeight(200) + lossBundle2 := types.ValueBundle{ + CombinedValue: alloraMath.MustNewDecFromString("456"), + } + err = keeper.InsertNetworkLossBundleAtBlock(ctx, topicId, blockHeight2, lossBundle2) + s.Require().NoError(err, "Inserting second network loss bundle should not fail") + + // Retrieve the latest network loss bundle + latestLossBundle, err := keeper.GetLatestNetworkLossBundle(ctx, topicId) + s.Require().NoError(err, "Retrieving latest network loss bundle should not fail") + s.Require().Equal(&lossBundle2, latestLossBundle, "Latest network loss bundle should match the second inserted set") +} + // ######################################## // # Staking tests # // ######################################## diff --git a/x/emissions/keeper/msgserver/msg_server_stake.go b/x/emissions/keeper/msgserver/msg_server_stake.go index b73015c89..8c035dfa6 100644 --- a/x/emissions/keeper/msgserver/msg_server_stake.go +++ b/x/emissions/keeper/msgserver/msg_server_stake.go @@ -296,7 +296,11 @@ func (ms msgServer) RewardDelegateStake(ctx context.Context, msg *types.MsgRewar return nil, err } if pendingReward.Gt(alloraMath.NewDecFromInt64(0)) { - coins := sdk.NewCoins(sdk.NewCoin(params.DefaultBondDenom, pendingReward.SdkIntTrim())) + pendingRewardInt, err := pendingReward.SdkIntTrim() + if err != nil { + return nil, err + } + coins := sdk.NewCoins(sdk.NewCoin(params.DefaultBondDenom, pendingRewardInt)) err = ms.k.SendCoinsFromModuleToAccount(ctx, types.AlloraPendingRewardForDelegatorAccountName, msg.Sender, coins) if err != nil { return nil, err diff --git a/x/emissions/keeper/msgserver/msg_server_stake_test.go b/x/emissions/keeper/msgserver/msg_server_stake_test.go index fa4585e02..96b7b9832 100644 --- a/x/emissions/keeper/msgserver/msg_server_stake_test.go +++ b/x/emissions/keeper/msgserver/msg_server_stake_test.go @@ -481,7 +481,9 @@ func (s *MsgServerTestSuite) TestDelegateStake() { amount1, err := keeper.GetDelegateStakePlacement(ctx, topicId, delegatorAddr.String(), reputerAddr.String()) require.NoError(err) - require.Equal(stakeAmount, amount1.Amount.SdkIntTrim()) + amountInt, err := amount1.Amount.SdkIntTrim() + require.NoError(err) + require.Equal(stakeAmount, amountInt) } func (s *MsgServerTestSuite) TestReputerCantSelfDelegateStake() { @@ -549,7 +551,9 @@ func (s *MsgServerTestSuite) TestDelegateeCantWithdrawDelegatedStake() { amount1, err := keeper.GetDelegateStakePlacement(ctx, topicId, delegatorAddr.String(), reputerAddr.String()) require.NoError(err) - require.Equal(stakeAmount, amount1.Amount.SdkIntTrim()) + amountInt, err := amount1.Amount.SdkIntTrim() + require.NoError(err) + require.Equal(stakeAmount, amountInt) // Attempt to withdraw the delegated stake removeMsg := &types.MsgRemoveStake{ @@ -1548,7 +1552,8 @@ func (s *MsgServerTestSuite) TestEqualStakeRewardsToDelegatorAndReputer() { s.Require().Greater(delegatorBal1.Amount.Uint64(), delegatorBal0.Amount.Uint64(), "Balance must be increased") delegatorReward0 := delegatorBal1.Amount.Sub(delegatorBal0.Amount) - reputerReward := reputerRewards[0].Reward.SdkIntTrim() + reputerReward, err := reputerRewards[0].Reward.SdkIntTrim() + s.Require().NoError(err) // in the case where the rewards is an odd number e.g. // 9 / 2 = 4.5 @@ -1631,11 +1636,14 @@ func (s *MsgServerTestSuite) Test1000xDelegatorStakeVsReputerStake() { s.Require().NoError(err) delegatorRewardRaw := delegatorBal1.Amount.Sub(delegatorBal0.Amount) - reputerReward := reputerRewards[0].Reward.SdkIntTrim() + reputerReward, err := reputerRewards[0].Reward.SdkIntTrim() + s.Require().NoError(err) normalizedDelegatorReward, err := alloraMath.NewDecFromInt64(delegatorRewardRaw.Int64()).Quo(alloraMath.NewDecFromInt64(delegatorRatio.Int64())) s.Require().NoError(err) - s.Require().Equal(normalizedDelegatorReward.SdkIntTrim(), reputerReward, "Delegator and reputer rewards must be equal") + normalizedDelegatorRewardInt, err := normalizedDelegatorReward.SdkIntTrim() + s.Require().NoError(err) + s.Require().Equal(normalizedDelegatorRewardInt, reputerReward, "Delegator and reputer rewards must be equal") } func (s *MsgServerTestSuite) TestMultiRoundReputerStakeVs1000xDelegatorStake() { @@ -1683,7 +1691,8 @@ func (s *MsgServerTestSuite) TestMultiRoundReputerStakeVs1000xDelegatorStake() { require.NotNil(delegateStakeResponse, "Response should not be nil after successful delegation") // STEP 2 Calculate rewards for the first round - reputerReward0 := s.insertValueBundlesAndGetRewards(reputerAddr, topicId, block, score)[0].Reward.SdkIntTrim() + reputerReward0, err := s.insertValueBundlesAndGetRewards(reputerAddr, topicId, block, score)[0].Reward.SdkIntTrim() + require.NoError(err) delegatorBal0 := s.bankKeeper.GetBalance(ctx, delegatorAddr, params.DefaultBondDenom) @@ -1693,7 +1702,7 @@ func (s *MsgServerTestSuite) TestMultiRoundReputerStakeVs1000xDelegatorStake() { Reputer: reputerAddr.String(), } _, err = s.msgServer.RewardDelegateStake(ctx, delegateRewardsMsg) - s.Require().NoError(err) + require.NoError(err) delegatorBal1 := s.bankKeeper.GetBalance(ctx, delegatorAddr, params.DefaultBondDenom) @@ -1702,10 +1711,11 @@ func (s *MsgServerTestSuite) TestMultiRoundReputerStakeVs1000xDelegatorStake() { // STEP 2 Calculate rewards for the second round block++ - reputerReward1 := s.insertValueBundlesAndGetRewards(reputerAddr, topicId, block, score)[0].Reward.SdkIntTrim() + reputerReward1, err := s.insertValueBundlesAndGetRewards(reputerAddr, topicId, block, score)[0].Reward.SdkIntTrim() + require.NoError(err) _, err = s.msgServer.RewardDelegateStake(ctx, delegateRewardsMsg) - s.Require().NoError(err) + require.NoError(err) delegatorBal2 := s.bankKeeper.GetBalance(ctx, delegatorAddr, params.DefaultBondDenom) @@ -1727,10 +1737,11 @@ func (s *MsgServerTestSuite) TestMultiRoundReputerStakeVs1000xDelegatorStake() { // STEP 4 Calculate rewards for the third round block++ - reputerReward2 := s.insertValueBundlesAndGetRewards(reputerAddr, topicId, block, score)[0].Reward.SdkIntTrim() + reputerReward2, err := s.insertValueBundlesAndGetRewards(reputerAddr, topicId, block, score)[0].Reward.SdkIntTrim() + require.NoError(err) _, err = s.msgServer.RewardDelegateStake(ctx, delegateRewardsMsg) - s.Require().NoError(err) + require.NoError(err) largeDelegateRewardsMsg := &types.MsgRewardDelegateStake{ Sender: largeDelegatorAddr.String(), @@ -1738,7 +1749,7 @@ func (s *MsgServerTestSuite) TestMultiRoundReputerStakeVs1000xDelegatorStake() { Reputer: reputerAddr.String(), } _, err = s.msgServer.RewardDelegateStake(ctx, largeDelegateRewardsMsg) - s.Require().NoError(err) + require.NoError(err) delegatorBal3 := s.bankKeeper.GetBalance(ctx, delegatorAddr, params.DefaultBondDenom) largeDelegatorBal3 := s.bankKeeper.GetBalance(ctx, largeDelegatorAddr, params.DefaultBondDenom) @@ -1747,25 +1758,27 @@ func (s *MsgServerTestSuite) TestMultiRoundReputerStakeVs1000xDelegatorStake() { largeDelegatorReward2 := largeDelegatorBal3.Amount.Sub(largeDelegatorBal2.Amount) condition := delegatorReward0.Equal(reputerReward0) || delegatorReward0.AddRaw(1).Equal(reputerReward0) - s.Require().True(condition, + require.True(condition, fmt.Sprintf("Delegator and reputer rewards must be equal (or reputer = delegator + 1) in all rounds: %s | %s", delegatorReward0.String(), reputerReward0.String()), ) condition = delegatorReward1.Equal(reputerReward1) || delegatorReward1.AddRaw(1).Equal(reputerReward1) - s.Require().True(condition, fmt.Sprintf("Delegator and reputer rewards must be equal in all rounds %s | %s", + require.True(condition, fmt.Sprintf("Delegator and reputer rewards must be equal in all rounds %s | %s", delegatorReward1.String(), reputerReward1.String()), ) - s.Require().Equal(reputerReward0, reputerReward1, "Delegator and reputer rewards must be equal from the first to the second round") + require.Equal(reputerReward0, reputerReward1, "Delegator and reputer rewards must be equal from the first to the second round") condition = delegatorReward2.Equal(reputerReward2) || delegatorReward2.AddRaw(1).Equal(reputerReward2) - s.Require().True(condition, fmt.Sprintf("Delegator and reputer rewards must be equal in all rounds %s | %s", + require.True(condition, fmt.Sprintf("Delegator and reputer rewards must be equal in all rounds %s | %s", delegatorReward2.String(), reputerReward2.String()), ) normalizedLargeDelegatorReward, err := alloraMath.NewDecFromInt64(largeDelegatorReward2.Int64()).Quo(alloraMath.NewDecFromInt64(largeDelegatorRatio.Int64())) - s.Require().NoError(err) + require.NoError(err) - s.Require().Equal(normalizedLargeDelegatorReward.SdkIntTrim(), reputerReward2, "Normalized large delegator rewards must be equal to reputer rewards") - s.Require().Equal(normalizedLargeDelegatorReward.SdkIntTrim(), delegatorReward2, "Normalized large delegator rewards must be equal to delegator rewards") + normalizedLargeDelegatorRewardInt, err := normalizedLargeDelegatorReward.SdkIntTrim() + require.NoError(err) + require.Equal(normalizedLargeDelegatorRewardInt, reputerReward2, "Normalized large delegator rewards must be equal to reputer rewards") + require.Equal(normalizedLargeDelegatorRewardInt, delegatorReward2, "Normalized large delegator rewards must be equal to delegator rewards") totalRewardsSecondRound := reputerReward1.Add(delegatorReward1) totalRewardsThirdRound := reputerReward2.Add(delegatorReward2).Add(largeDelegatorReward2) diff --git a/x/emissions/keeper/msgserver/msg_server_worker_payload_test.go b/x/emissions/keeper/msgserver/msg_server_worker_payload_test.go index 9bc4b1e53..a3a06f70f 100644 --- a/x/emissions/keeper/msgserver/msg_server_worker_payload_test.go +++ b/x/emissions/keeper/msgserver/msg_server_worker_payload_test.go @@ -302,7 +302,7 @@ func (s *MsgServerTestSuite) TestMsgInsertWorkerPayloadFiltersDuplicateForecastE ctx = ctx.WithBlockHeight(blockHeight) _, err := msgServer.InsertWorkerPayload(ctx, &workerMsg) - require.NoError(err, "InsertBulkWorkerPayload should not return an error") + require.NoError(err, "InsertWorkerPayload should not return an error") // Check the forecast count to ensure duplicates were filtered out forecastsCount1 := s.getCountForecastsAtBlock(topicId, blockHeight) @@ -321,7 +321,7 @@ func (s *MsgServerTestSuite) TestMsgInsertWorkerPayloadFiltersDuplicateForecastE } } -func (s *MsgServerTestSuite) TestInsertingHugeBulkWorkerPayloadFails() { +func (s *MsgServerTestSuite) TestInsertingHugeBundleWorkerPayloadFails() { ctx, msgServer := s.ctx, s.msgServer require := s.Require() keeper := s.emissionsKeeper diff --git a/x/emissions/keeper/queryserver/query_server_inferences.go b/x/emissions/keeper/queryserver/query_server_inferences.go index b1d84bcb6..1d612d348 100644 --- a/x/emissions/keeper/queryserver/query_server_inferences.go +++ b/x/emissions/keeper/queryserver/query_server_inferences.go @@ -63,12 +63,11 @@ func (qs queryServer) GetNetworkInferencesAtBlock( return nil, status.Errorf(codes.NotFound, "network inference not available for topic %v", req.TopicId) } - networkInferences, _, _, _, err := synth.GetNetworkInferencesAtBlock( + networkInferences, _, _, _, _, _, err := synth.GetNetworkInferences( sdk.UnwrapSDKContext(ctx), qs.k, req.TopicId, - req.BlockHeightLastInference, - req.BlockHeightLastReward, + &req.BlockHeightLastInference, ) if err != nil { return nil, err @@ -92,10 +91,11 @@ func (qs queryServer) GetLatestNetworkInference( return nil, err } - networkInferences, forecastImpliedInferenceByWorker, infererWeights, forecasterWeights, inferenceBlockHeight, lossBlockHeight, err := synth.GetLatestNetworkInference( + networkInferences, forecastImpliedInferenceByWorker, infererWeights, forecasterWeights, inferenceBlockHeight, lossBlockHeight, err := synth.GetNetworkInferences( sdk.UnwrapSDKContext(ctx), qs.k, req.TopicId, + nil, ) if err != nil { return nil, err @@ -152,13 +152,12 @@ func (qs queryServer) GetLatestAvailableNetworkInference( return nil, err } - networkInferences, forecastImpliedInferenceByWorker, infererWeights, forecasterWeights, err := - synth.GetNetworkInferencesAtBlock( + networkInferences, forecastImpliedInferenceByWorker, infererWeights, forecasterWeights, _, _, err := + synth.GetNetworkInferences( sdk.UnwrapSDKContext(ctx), qs.k, req.TopicId, - lastWorkerCommit.Nonce.BlockHeight, - lastReputerCommit.Nonce.BlockHeight, + &lastWorkerCommit.Nonce.BlockHeight, ) if err != nil { return nil, err diff --git a/x/emissions/keeper/queryserver/query_server_inferences_test.go b/x/emissions/keeper/queryserver/query_server_inferences_test.go index e749f89dc..423b29279 100644 --- a/x/emissions/keeper/queryserver/query_server_inferences_test.go +++ b/x/emissions/keeper/queryserver/query_server_inferences_test.go @@ -250,7 +250,6 @@ func (s *KeeperTestSuite) TestGetNetworkInferencesAtBlock() { req := &types.QueryNetworkInferencesAtBlockRequest{ TopicId: topicId, BlockHeightLastInference: blockHeight, - BlockHeightLastReward: blockHeight, } response, err := queryServer.GetNetworkInferencesAtBlock(s.ctx, req) require.NoError(err) diff --git a/x/emissions/keeper/queryserver/query_server_stake.go b/x/emissions/keeper/queryserver/query_server_stake.go index a566e98bf..3f62c3e46 100644 --- a/x/emissions/keeper/queryserver/query_server_stake.go +++ b/x/emissions/keeper/queryserver/query_server_stake.go @@ -154,7 +154,11 @@ func (qs queryServer) GetStakeFromDelegatorInTopicInReputer(ctx context.Context, return nil, status.Error(codes.Internal, err.Error()) } - return &types.QueryStakeFromDelegatorInTopicInReputerResponse{Amount: stake.Amount.SdkIntTrim()}, nil + stakeInt, err := stake.Amount.SdkIntTrim() + if err != nil { + return nil, status.Error(codes.Internal, err.Error()) + } + return &types.QueryStakeFromDelegatorInTopicInReputerResponse{Amount: stakeInt}, nil } func (qs queryServer) GetStakeFromDelegatorInTopic(ctx context.Context, req *types.QueryStakeFromDelegatorInTopicRequest) (*types.QueryStakeFromDelegatorInTopicResponse, error) { diff --git a/x/emissions/module/autocli.go b/x/emissions/module/autocli.go index 52a79efa0..23400ca45 100644 --- a/x/emissions/module/autocli.go +++ b/x/emissions/module/autocli.go @@ -524,12 +524,11 @@ func (am AppModule) AutoCLIOptions() *autocliv1.ModuleOptions { }, { RpcMethod: "GetNetworkInferencesAtBlock", - Use: "network-inferences-at-block [topic_id] [block_height_last_inference] [block_height_last_reward]", - Short: "Get the Network Inferences for a topic at a block height where the last inference was made and the last reward was given", + Use: "network-inferences-at-block [topic_id] [block_height_last_inference]", + Short: "Get the Network Inferences for a topic at a block height where the last inference was made", PositionalArgs: []*autocliv1.PositionalArgDescriptor{ {ProtoField: "topic_id"}, {ProtoField: "block_height_last_inference"}, - {ProtoField: "block_height_last_reward"}, }, }, { diff --git a/x/emissions/module/rewards/reputer_rewards.go b/x/emissions/module/rewards/reputer_rewards.go index 854c7b4f8..4ef267e31 100644 --- a/x/emissions/module/rewards/reputer_rewards.go +++ b/x/emissions/module/rewards/reputer_rewards.go @@ -176,7 +176,10 @@ func GetRewardForReputerFromTotalReward( if err != nil { return nil, err } - delegatorRewardInt := delegatorRewardDec.SdkIntTrim() + delegatorRewardInt, err := delegatorRewardDec.SdkIntTrim() + if err != nil { + return nil, errors.Wrapf(err, "failed to sdk int trim delegator reward") + } delegatorRewardDec, err = alloraMath.NewDecFromSdkInt(delegatorRewardInt) if err != nil { return nil, errors.Wrapf(err, "failed to reconvert delegator reward from int to dec") diff --git a/x/emissions/module/rewards/rewards.go b/x/emissions/module/rewards/rewards.go index 01df67147..d7d2f4664 100644 --- a/x/emissions/module/rewards/rewards.go +++ b/x/emissions/module/rewards/rewards.go @@ -452,7 +452,11 @@ func payoutRewards( continue } - rewardInt := reward.Reward.SdkIntTrim() + rewardInt, err := reward.Reward.SdkIntTrim() + if err != nil { + ret = append(ret, errors.Wrapf(err, "failed to convert reward to sdk.Int: %s", reward.Reward.String())) + continue + } coins := sdk.NewCoins(sdk.NewCoin(params.DefaultBondDenom, rewardInt)) if reward.Type == types.ReputerAndDelegatorRewardType { diff --git a/x/emissions/proto/emissions/v2/query.proto b/x/emissions/proto/emissions/v2/query.proto index 557ab9a46..5954da4b8 100644 --- a/x/emissions/proto/emissions/v2/query.proto +++ b/x/emissions/proto/emissions/v2/query.proto @@ -165,7 +165,7 @@ service Query { returns (QueryNetworkInferencesAtBlockResponse) { option (cosmos.query.v1.module_query_safe) = true; option (google.api.http).get = "/emissions/v2/network_inferences/{topic_id}/last_inference/" - "{block_height_last_inference}/last_reward/{block_height_last_reward}"; + "{block_height_last_inference}"; } rpc GetLatestNetworkInference(QueryLatestNetworkInferencesRequest) returns (QueryLatestNetworkInferencesResponse) { @@ -690,9 +690,11 @@ message QueryReputerNodeInfoResponse { } message QueryNetworkInferencesAtBlockRequest { + reserved 3; + reserved "block_height_last_reward"; + uint64 topic_id = 1; int64 block_height_last_inference = 2; - int64 block_height_last_reward = 3; } message QueryLatestNetworkInferencesRequest { diff --git a/x/emissions/proto/emissions/v2/worker.proto b/x/emissions/proto/emissions/v2/worker.proto index efac30779..0377e6aa4 100644 --- a/x/emissions/proto/emissions/v2/worker.proto +++ b/x/emissions/proto/emissions/v2/worker.proto @@ -67,6 +67,6 @@ message WorkerDataBundle { string pubkey = 6; } -message WorkerDataBundles { // This will be in the incoming message, sent by leader +message WorkerDataBundles { repeated WorkerDataBundle worker_data_bundles = 1; } diff --git a/x/emissions/types/params.go b/x/emissions/types/params.go index 18c203e91..6ced91f1f 100644 --- a/x/emissions/types/params.go +++ b/x/emissions/types/params.go @@ -14,7 +14,7 @@ func DefaultParams() Params { MinTopicWeight: alloraMath.MustNewDecFromString("100"), // total weight for a topic < this => don't run inference solicatation or loss update MaxTopicsPerBlock: uint64(128), // max number of topics to run cadence for per block RequiredMinimumStake: cosmosMath.NewInt(100), // minimum stake required to be a worker or reputer - RemoveStakeDelayWindow: int64((60 * 60 * 24 * 7 * 3) / 5), // ~approx 3 weeks assuming 5 second block time, number of blocks to wait before finalizing a stake withdrawal + RemoveStakeDelayWindow: int64((60 * 60 * 24 * 7 * 3) / 3), // ~approx 3 weeks assuming 3 second block time, number of blocks to wait before finalizing a stake withdrawal MinEpochLength: 12, // shortest number of blocks per epoch topics are allowed to set as their cadence BetaEntropy: alloraMath.MustNewDecFromString("0.25"), // controls resilience of reward payouts against copycat workers LearningRate: alloraMath.MustNewDecFromString("0.05"), // speed of gradient descent @@ -42,7 +42,7 @@ func DefaultParams() Params { MaxPageLimit: uint64(1000), // max limit for pagination MinEpochLengthRecordLimit: int64(3), // minimum number of epochs to keep records for a topic MaxSerializedMsgLength: int64(1000 * 1000), // maximum size of data to msg and query server in bytes - BlocksPerMonth: uint64(525960), // ~5 seconds block time, 6311520 per year, 525960 per month + BlocksPerMonth: uint64(864000), // ~3 seconds block time, assuming 30 days in a month 60 * 60 * 24 * 30 / 3 PRewardInference: alloraMath.NewDecFromInt64(1), // fiducial value for rewards calculation PRewardForecast: alloraMath.NewDecFromInt64(3), // fiducial value for rewards calculation PRewardReputer: alloraMath.NewDecFromInt64(3), // fiducial value for rewards calculation diff --git a/x/emissions/types/query.pb.go b/x/emissions/types/query.pb.go index 420ce1d6d..707c9d48c 100644 --- a/x/emissions/types/query.pb.go +++ b/x/emissions/types/query.pb.go @@ -2346,7 +2346,6 @@ func (m *QueryReputerNodeInfoResponse) GetNodeInfo() *OffchainNode { type QueryNetworkInferencesAtBlockRequest struct { TopicId uint64 `protobuf:"varint,1,opt,name=topic_id,json=topicId,proto3" json:"topic_id,omitempty"` BlockHeightLastInference int64 `protobuf:"varint,2,opt,name=block_height_last_inference,json=blockHeightLastInference,proto3" json:"block_height_last_inference,omitempty"` - BlockHeightLastReward int64 `protobuf:"varint,3,opt,name=block_height_last_reward,json=blockHeightLastReward,proto3" json:"block_height_last_reward,omitempty"` } func (m *QueryNetworkInferencesAtBlockRequest) Reset() { *m = QueryNetworkInferencesAtBlockRequest{} } @@ -2396,13 +2395,6 @@ func (m *QueryNetworkInferencesAtBlockRequest) GetBlockHeightLastInference() int return 0 } -func (m *QueryNetworkInferencesAtBlockRequest) GetBlockHeightLastReward() int64 { - if m != nil { - return m.BlockHeightLastReward - } - return 0 -} - type QueryLatestNetworkInferencesRequest struct { TopicId uint64 `protobuf:"varint,1,opt,name=topic_id,json=topicId,proto3" json:"topic_id,omitempty"` } @@ -6699,341 +6691,340 @@ func init() { func init() { proto.RegisterFile("emissions/v2/query.proto", fileDescriptor_2aefa309da3515fd) } var fileDescriptor_2aefa309da3515fd = []byte{ - // 5339 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x5d, 0x6f, 0x6c, 0x1c, 0xc7, - 0x75, 0xf7, 0x92, 0x12, 0x45, 0x0e, 0xad, 0x7f, 0x63, 0x59, 0x26, 0x8f, 0x32, 0x25, 0xad, 0x2c, - 0x4b, 0xa6, 0x24, 0x9e, 0x44, 0xea, 0xbf, 0x25, 0xd9, 0xa4, 0x64, 0x51, 0x67, 0xcb, 0xfa, 0x73, - 0xfa, 0x67, 0xab, 0x89, 0xcf, 0xcb, 0xbb, 0x21, 0xb9, 0xd0, 0xdd, 0xee, 0x79, 0x77, 0x8f, 0x92, - 0xa0, 0x10, 0x89, 0x83, 0xa0, 0x48, 0x80, 0x14, 0x30, 0x50, 0x24, 0x68, 0x80, 0xb4, 0x68, 0x81, - 0x7e, 0x08, 0xd0, 0x26, 0x2d, 0x8a, 0xa0, 0x40, 0x8b, 0xf6, 0x43, 0xd1, 0xb4, 0x70, 0xd0, 0x16, - 0x0d, 0x92, 0x1a, 0x48, 0x83, 0xc6, 0x68, 0xed, 0x04, 0x69, 0xfb, 0xa1, 0x68, 0xbf, 0xf7, 0x43, - 0xb1, 0x33, 0x6f, 0x76, 0x77, 0x76, 0x67, 0x66, 0xf7, 0x8e, 0x24, 0xe0, 0x7e, 0x11, 0xb4, 0xbb, - 0x33, 0xf3, 0xde, 0x6f, 0xfe, 0xbc, 0x79, 0xef, 0xcd, 0xfc, 0x78, 0x68, 0x84, 0xb4, 0x6c, 0xdf, - 0xb7, 0x5d, 0xc7, 0x2f, 0x2f, 0x4f, 0x95, 0xdf, 0xeb, 0x10, 0xef, 0xf1, 0x64, 0xdb, 0x73, 0x03, - 0x17, 0x3f, 0x1d, 0x7d, 0x99, 0x5c, 0x9e, 0x2a, 0x4d, 0xd4, 0x5d, 0xbf, 0xe5, 0xfa, 0xe5, 0x79, - 0xcb, 0x27, 0xac, 0x58, 0x79, 0xf9, 0xd8, 0x3c, 0x09, 0xac, 0x63, 0xe5, 0xb6, 0xb5, 0x68, 0x3b, - 0x56, 0x60, 0xbb, 0x0e, 0xab, 0x59, 0x12, 0xdb, 0x0c, 0x1e, 0xb7, 0x89, 0x0f, 0x5f, 0x76, 0x2d, - 0xba, 0xee, 0x62, 0x93, 0x94, 0xad, 0xb6, 0x5d, 0xb6, 0x1c, 0xc7, 0x0d, 0x68, 0x35, 0xfe, 0x75, - 0x0c, 0x64, 0xf0, 0xe6, 0x93, 0xea, 0x94, 0xb6, 0x5b, 0x2d, 0xdb, 0x71, 0xcb, 0xf4, 0x5f, 0x78, - 0xb5, 0x63, 0xd1, 0x5d, 0x74, 0xe9, 0x7f, 0xcb, 0xe1, 0xff, 0xe0, 0xed, 0x28, 0x6b, 0xa5, 0xc6, - 0x3e, 0xb0, 0x07, 0xfe, 0x49, 0x50, 0xac, 0x6d, 0x79, 0x56, 0x8b, 0x7f, 0x7a, 0x4e, 0xf8, 0xe4, - 0xb8, 0x0d, 0x22, 0xad, 0xf3, 0xd0, 0xf5, 0x1e, 0x10, 0x0f, 0x3e, 0x95, 0x84, 0x4f, 0x1e, 0x69, - 0x77, 0x82, 0xe8, 0xdb, 0x48, 0xaa, 0x3d, 0xa7, 0x4e, 0xe4, 0xbd, 0xe3, 0xb6, 0xed, 0xba, 0xf4, - 0x8b, 0x1f, 0x58, 0x0f, 0x78, 0x9d, 0x5d, 0xc2, 0x17, 0xdb, 0x59, 0x20, 0x1e, 0x51, 0xb5, 0xe8, - 0xd7, 0x5d, 0x0f, 0xbe, 0x98, 0x9f, 0x43, 0xfb, 0x6f, 0x86, 0x7d, 0x78, 0xcd, 0xb2, 0x97, 0x49, - 0x85, 0x56, 0xf3, 0xae, 0x91, 0x20, 0x44, 0x51, 0x25, 0x8b, 0x1e, 0x09, 0xaa, 0xe4, 0xbd, 0x0e, - 0xf1, 0x03, 0x3c, 0x8a, 0x06, 0xa9, 0x26, 0x35, 0xbb, 0x31, 0x62, 0xec, 0x31, 0x0e, 0x6e, 0xa8, - 0x6e, 0xa2, 0xcf, 0x95, 0x06, 0x1e, 0x41, 0x9b, 0x98, 0x40, 0x6f, 0xa4, 0x6f, 0x8f, 0x71, 0x70, - 0xa8, 0xca, 0x1f, 0xcd, 0x77, 0xd1, 0x8b, 0x79, 0xad, 0xfb, 0x6d, 0xd7, 0xf1, 0x09, 0x3e, 0x89, - 0x06, 0x3c, 0xfa, 0x86, 0x36, 0x3e, 0x3c, 0x35, 0x3e, 0x99, 0x9c, 0x5c, 0x93, 0xb7, 0xed, 0x16, - 0xf1, 0x03, 0xab, 0xd5, 0x26, 0x8d, 0xbb, 0x56, 0xb3, 0x43, 0xaa, 0x50, 0xda, 0xfc, 0xba, 0x81, - 0x8e, 0x50, 0x11, 0xd7, 0x1d, 0x72, 0xbd, 0x13, 0x80, 0x8c, 0x1e, 0x81, 0xbc, 0x88, 0xb6, 0xba, - 0x0e, 0xa9, 0xb9, 0x9d, 0xa0, 0x26, 0x02, 0xda, 0xec, 0x26, 0x5b, 0x4f, 0x02, 0xee, 0x17, 0x01, - 0x2f, 0xa1, 0xc9, 0xa2, 0xda, 0xac, 0x12, 0xf8, 0x37, 0x0c, 0x74, 0x34, 0x2b, 0xea, 0xb2, 0xeb, - 0x91, 0xba, 0xe5, 0x07, 0xeb, 0x87, 0x7d, 0x1c, 0xa1, 0x85, 0x48, 0x08, 0xc0, 0x4f, 0xbc, 0x31, - 0x1f, 0xa0, 0x63, 0x5d, 0xa8, 0xb5, 0xb6, 0x9d, 0x10, 0x8b, 0xe9, 0x71, 0x02, 0x1c, 0x46, 0x98, - 0x77, 0x42, 0x02, 0x24, 0xeb, 0x87, 0x6d, 0x6e, 0x4a, 0x86, 0x66, 0x1a, 0x88, 0x9d, 0x90, 0xa7, - 0xd6, 0x2a, 0x3b, 0xe1, 0x77, 0x0c, 0x34, 0x2d, 0x95, 0xd6, 0xfb, 0x64, 0xe8, 0xae, 0x1f, 0xf2, - 0xa6, 0x84, 0x83, 0x8e, 0x77, 0xa7, 0xdf, 0x2a, 0x3b, 0x64, 0x07, 0xc2, 0x54, 0xde, 0x0d, 0x6a, - 0xbe, 0x01, 0xae, 0x79, 0x0d, 0x3d, 0x23, 0xbc, 0x05, 0x21, 0xa7, 0xd0, 0x00, 0x33, 0xf3, 0x20, - 0x64, 0x87, 0x28, 0x84, 0x95, 0x9e, 0x1d, 0xfa, 0xf0, 0xe3, 0xdd, 0x4f, 0x7d, 0xe7, 0x57, 0x7f, - 0x3c, 0x61, 0x54, 0xa1, 0xb8, 0x39, 0x82, 0x76, 0xd2, 0xf6, 0x6e, 0xbb, 0x81, 0xd5, 0xbc, 0x15, - 0x9a, 0x62, 0x2e, 0xc9, 0x46, 0xcf, 0x65, 0xbe, 0x80, 0xb4, 0x2b, 0x68, 0xc0, 0x6a, 0xb9, 0x1d, - 0x87, 0x41, 0x1a, 0x9a, 0x3d, 0x1a, 0xb6, 0xfb, 0xb3, 0x8f, 0x77, 0x3f, 0xcb, 0x76, 0x21, 0xbf, - 0xf1, 0x60, 0xd2, 0x76, 0xcb, 0x2d, 0x2b, 0x58, 0x9a, 0xac, 0x38, 0xc1, 0x8f, 0xbf, 0x7f, 0x04, - 0xc1, 0xf6, 0x54, 0x71, 0x02, 0x10, 0xcf, 0xea, 0x9f, 0xdd, 0xf0, 0xef, 0xbf, 0xbb, 0xdb, 0x30, - 0xef, 0xa2, 0xdd, 0x54, 0x54, 0x95, 0x6d, 0x2d, 0x54, 0x58, 0xc5, 0xb9, 0x1d, 0x0e, 0x23, 0x1f, - 0xe6, 0x11, 0xb4, 0xc9, 0x6a, 0x34, 0x3c, 0xe2, 0x33, 0x84, 0x43, 0x55, 0xfe, 0x28, 0x4c, 0x80, - 0x3e, 0x61, 0x02, 0x98, 0x1e, 0xda, 0xa3, 0x6e, 0x77, 0x9d, 0xb0, 0xd4, 0xd0, 0x0b, 0x54, 0xe6, - 0x9b, 0x9d, 0x66, 0x60, 0x6b, 0x00, 0xed, 0x42, 0x43, 0x80, 0x80, 0x84, 0x90, 0xfa, 0x0f, 0x0e, - 0x55, 0xe3, 0x17, 0x3a, 0x50, 0xf7, 0x61, 0xaf, 0x53, 0x0b, 0x00, 0x64, 0xc7, 0xd0, 0x26, 0xa6, - 0x19, 0x6b, 0x7f, 0x78, 0xea, 0x39, 0x71, 0x52, 0x40, 0xa5, 0x05, 0xb7, 0xca, 0xcb, 0x99, 0x2e, - 0x7a, 0x89, 0xb6, 0x4d, 0x3f, 0x5d, 0xf6, 0xdc, 0x16, 0xb4, 0x0f, 0x4d, 0x57, 0x9c, 0x5b, 0xa4, - 0xb9, 0xc0, 0x11, 0x1c, 0x40, 0x5b, 0xc1, 0x17, 0xa8, 0x89, 0x43, 0xb3, 0x05, 0x5e, 0xcf, 0xe4, - 0x8f, 0xd0, 0x17, 0xd0, 0x44, 0x11, 0x81, 0xeb, 0x34, 0x56, 0x1c, 0xee, 0x25, 0xd2, 0x24, 0x8b, - 0x56, 0x40, 0x92, 0xdd, 0x58, 0x71, 0x40, 0x95, 0xf5, 0x80, 0x9b, 0x23, 0x70, 0x9d, 0xe0, 0xfe, - 0x9e, 0x01, 0xfb, 0x7a, 0xd4, 0xdb, 0xa0, 0x87, 0xeb, 0xa9, 0x40, 0x1f, 0x42, 0xdb, 0x1b, 0xbc, - 0x4c, 0x0a, 0xf6, 0xb6, 0xe8, 0x03, 0x07, 0x2e, 0xe9, 0xa1, 0xbe, 0xdc, 0x1e, 0xea, 0x17, 0x7b, - 0xe8, 0x7d, 0x03, 0x95, 0x0b, 0xeb, 0xb8, 0x6e, 0xd3, 0x62, 0xbf, 0x5e, 0x85, 0x9e, 0x7a, 0x47, - 0x33, 0x2d, 0x1e, 0x81, 0x83, 0xa9, 0x11, 0xb8, 0x4e, 0x50, 0xa7, 0x23, 0xf3, 0xdf, 0xb6, 0xeb, - 0x49, 0xf3, 0xaf, 0xd9, 0x57, 0x13, 0x3b, 0x43, 0x5c, 0x69, 0x9d, 0xf4, 0x6b, 0x80, 0x35, 0x85, - 0xad, 0xf5, 0xaa, 0xeb, 0xfb, 0xb3, 0x1d, 0xa7, 0xd1, 0x24, 0x33, 0xc1, 0x6c, 0xd3, 0xad, 0x3f, - 0x28, 0xe0, 0x05, 0xec, 0x45, 0x4f, 0xcf, 0x87, 0x45, 0x6b, 0x4b, 0xc4, 0x5e, 0x5c, 0x0a, 0x68, - 0xdf, 0xf7, 0x57, 0x87, 0xe9, 0xbb, 0x2b, 0xf4, 0x95, 0x59, 0xe7, 0xe1, 0x83, 0x52, 0x0a, 0xc0, - 0x3b, 0x8b, 0x86, 0x9b, 0xae, 0xef, 0xd7, 0xe6, 0xe9, 0x57, 0xd8, 0x6b, 0x47, 0x45, 0xb3, 0x4a, - 0x77, 0x71, 0x56, 0xbd, 0x8a, 0x9a, 0x51, 0x53, 0xe6, 0x28, 0xf4, 0xda, 0x35, 0xf2, 0x28, 0x60, - 0x13, 0xb9, 0xc1, 0xb7, 0xda, 0x0b, 0x68, 0x24, 0xfb, 0x09, 0x44, 0x9a, 0x68, 0xb3, 0x43, 0x1e, - 0x05, 0xb5, 0x14, 0xbc, 0x61, 0x27, 0x2e, 0x6b, 0x4e, 0xa2, 0xed, 0xf1, 0x80, 0x14, 0x18, 0xc0, - 0xaf, 0x18, 0xe0, 0x5b, 0x88, 0x93, 0xeb, 0x25, 0xb4, 0x91, 0x96, 0x00, 0x5c, 0xcf, 0xa4, 0x1c, - 0x15, 0x5a, 0x96, 0x95, 0xc0, 0x3b, 0xd1, 0xc0, 0xc3, 0xb8, 0x3b, 0x87, 0xaa, 0xf0, 0x14, 0xae, - 0x08, 0xb2, 0xb0, 0x40, 0xea, 0x81, 0xbd, 0x4c, 0x6a, 0x1e, 0x59, 0x26, 0x4e, 0x87, 0x80, 0x2f, - 0xb5, 0x2d, 0xfa, 0x50, 0x65, 0xef, 0xcd, 0x45, 0x80, 0x3d, 0x43, 0xdf, 0xd2, 0xf6, 0xb9, 0x9f, - 0x83, 0xdf, 0x40, 0x28, 0x8e, 0xb7, 0x41, 0xa1, 0x43, 0xa9, 0xfd, 0xcb, 0x6e, 0xb5, 0x9b, 0xe4, - 0x62, 0xc7, 0xf3, 0x5d, 0xef, 0x46, 0x54, 0x16, 0x1a, 0xa8, 0x26, 0xaa, 0x9b, 0xdf, 0x34, 0xd0, - 0xa8, 0x44, 0x12, 0xc0, 0x3e, 0x84, 0x06, 0x28, 0x28, 0xbe, 0x4d, 0x4a, 0x71, 0x43, 0x11, 0x7c, - 0x55, 0xd0, 0xab, 0x8f, 0xea, 0x75, 0xb8, 0x98, 0x5e, 0x4c, 0x9c, 0xa0, 0xd8, 0xe7, 0xd1, 0xf3, - 0x54, 0xaf, 0x0a, 0x8f, 0x74, 0xfd, 0x35, 0x9d, 0xd7, 0xf7, 0xd1, 0xb8, 0xaa, 0x79, 0xc0, 0x7e, - 0x1a, 0xa1, 0x28, 0xca, 0xe6, 0xbe, 0xe3, 0x88, 0x08, 0x27, 0xae, 0x5c, 0x4d, 0x94, 0x35, 0x2f, - 0xa0, 0xbd, 0xb4, 0xed, 0xab, 0x56, 0x40, 0x7c, 0x98, 0x89, 0x71, 0xc9, 0xfc, 0x39, 0xf8, 0xbe, - 0x81, 0x4c, 0x5d, 0x03, 0xab, 0x55, 0xb0, 0x48, 0xff, 0x7c, 0x0e, 0xed, 0xa2, 0x2a, 0x70, 0x17, - 0x7e, 0x6d, 0x7b, 0xff, 0x2e, 0x0c, 0x6e, 0xb6, 0x75, 0xc0, 0x76, 0x02, 0x0d, 0xf1, 0xf8, 0x82, - 0x43, 0x4b, 0xb9, 0x68, 0x51, 0xd5, 0x6a, 0x5c, 0xd2, 0x24, 0xd0, 0xf3, 0xf7, 0x68, 0x8e, 0x86, - 0x75, 0x5f, 0xd4, 0x07, 0x05, 0x54, 0xdf, 0x8f, 0xb6, 0xb0, 0xf4, 0x4e, 0x6a, 0x97, 0xde, 0xcc, - 0xde, 0xc2, 0x7e, 0x65, 0x2e, 0xc1, 0xf8, 0x28, 0xc4, 0x00, 0x86, 0x59, 0xb4, 0xad, 0x49, 0x3f, - 0xd5, 0xa2, 0xae, 0x97, 0x43, 0x89, 0xab, 0x6e, 0x6d, 0x8a, 0x6d, 0x99, 0x57, 0x50, 0x29, 0x21, - 0xe9, 0x9a, 0xdb, 0x60, 0x5e, 0x69, 0xd6, 0xf3, 0xef, 0x13, 0x3c, 0xff, 0xd7, 0x37, 0x0c, 0x1a, - 0xdb, 0xfa, 0xaa, 0xa8, 0x69, 0xcf, 0xb7, 0xa7, 0xda, 0xb5, 0x07, 0xe4, 0xb1, 0x79, 0x17, 0x8d, - 0x49, 0x5b, 0x8a, 0xa2, 0xa4, 0x21, 0xc7, 0x6d, 0x90, 0x50, 0x55, 0x17, 0xb4, 0x2c, 0x89, 0x5a, - 0x5e, 0x5f, 0x58, 0xa8, 0x2f, 0x59, 0xb6, 0x13, 0x56, 0xad, 0x0e, 0x3a, 0xd0, 0x80, 0x59, 0x81, - 0x76, 0xc1, 0xf3, 0x58, 0x8d, 0x8a, 0xf7, 0x60, 0xce, 0x65, 0x9a, 0x5a, 0xad, 0x8e, 0x7f, 0x66, - 0x88, 0x7b, 0x65, 0x2f, 0x36, 0xe5, 0x3c, 0x1a, 0x4b, 0xce, 0xea, 0x5a, 0xd3, 0x12, 0x06, 0x96, - 0x4d, 0xf2, 0x91, 0xc4, 0x24, 0xbf, 0x6a, 0x25, 0x06, 0x12, 0x9f, 0x42, 0x23, 0xd9, 0xea, 0x1e, - 0x79, 0x68, 0x79, 0xcc, 0xcf, 0xeb, 0xaf, 0x3e, 0x9b, 0xaa, 0x5b, 0xa5, 0x1f, 0xcd, 0x57, 0xd1, - 0xbe, 0x84, 0x2d, 0xc8, 0x00, 0x28, 0x60, 0x4e, 0xb8, 0xa3, 0x50, 0xf1, 0xf9, 0xd8, 0x3b, 0x75, - 0x72, 0xc7, 0x59, 0xe8, 0x34, 0x17, 0xec, 0x66, 0x93, 0x34, 0xd6, 0x66, 0x49, 0x2f, 0x80, 0xa3, - 0xa0, 0x96, 0x02, 0xa3, 0x78, 0x1e, 0x8d, 0xd9, 0x7e, 0x0d, 0x96, 0x19, 0xcd, 0x8a, 0xd6, 0x3a, - 0x71, 0x31, 0x2a, 0x79, 0xb0, 0x3a, 0x62, 0x2b, 0x9a, 0x31, 0x67, 0x00, 0x8d, 0xd0, 0x34, 0xcc, - 0x97, 0x82, 0x1d, 0xc2, 0x7d, 0x1a, 0x75, 0x13, 0x91, 0x4f, 0x33, 0x40, 0x15, 0xe4, 0x26, 0xc8, - 0x14, 0x67, 0x9b, 0x18, 0x10, 0x40, 0x5d, 0xa8, 0x11, 0x8d, 0x5b, 0x42, 0x48, 0x02, 0x51, 0x11, - 0x35, 0x6f, 0x67, 0x91, 0x8a, 0x2d, 0x80, 0x96, 0x87, 0x53, 0x5a, 0xa6, 0x12, 0x1c, 0x29, 0xbd, - 0xde, 0x82, 0xc0, 0xbf, 0xc7, 0x04, 0xda, 0x28, 0x1a, 0xb4, 0xea, 0xa1, 0x4f, 0x0f, 0xae, 0x7a, - 0xb8, 0xa0, 0xc3, 0xe7, 0x4a, 0xc3, 0xfc, 0x35, 0x30, 0xbe, 0xeb, 0x92, 0x03, 0x7b, 0x0b, 0xba, - 0xb3, 0xf7, 0x94, 0x57, 0xe8, 0x97, 0xd1, 0xee, 0x8b, 0xfc, 0x32, 0xfa, 0x64, 0xbe, 0x03, 0xdd, - 0xbc, 0x5e, 0xc9, 0xaa, 0x2f, 0xa2, 0x83, 0x3c, 0x39, 0x56, 0x71, 0x7a, 0x57, 0x5f, 0xcc, 0xc1, - 0xf5, 0xa5, 0x73, 0x70, 0x9a, 0x5c, 0x65, 0x1d, 0x42, 0x79, 0xbd, 0x02, 0xab, 0x44, 0x49, 0xa2, - 0xe5, 0x9f, 0x5c, 0x4a, 0x6b, 0x6e, 0x65, 0x6c, 0x08, 0x07, 0x35, 0x62, 0x00, 0xc8, 0x2b, 0x68, - 0x97, 0xed, 0xd7, 0x78, 0xd0, 0xad, 0xb2, 0x33, 0xa3, 0xb6, 0xaa, 0x21, 0xf3, 0x3d, 0x31, 0xf2, - 0x51, 0x3b, 0x8a, 0x57, 0x10, 0x76, 0x58, 0x99, 0x5a, 0xc6, 0x1f, 0xd3, 0x04, 0x40, 0xdb, 0x9d, - 0x74, 0xc3, 0xe6, 0x47, 0x1b, 0x61, 0x2e, 0x2a, 0x8d, 0xfd, 0x5a, 0x8b, 0xc4, 0x6f, 0xa0, 0xad, - 0x30, 0x4f, 0x6a, 0x2c, 0x4e, 0x09, 0xf7, 0xe9, 0x7e, 0x99, 0xad, 0x0b, 0x87, 0x39, 0xdc, 0x4d, - 0xbd, 0x16, 0x69, 0xdc, 0xa3, 0x45, 0xab, 0x5b, 0xa0, 0x2a, 0x7b, 0xf4, 0xf1, 0x4d, 0x84, 0xe3, - 0x19, 0x19, 0xb5, 0xd7, 0x5f, 0xb8, 0xbd, 0xed, 0x71, 0x6d, 0xde, 0xa4, 0x85, 0x46, 0xf9, 0xcb, - 0x4a, 0xab, 0xdd, 0xb4, 0x49, 0x23, 0x56, 0x7e, 0x64, 0x03, 0x6d, 0x79, 0x9f, 0xd8, 0x32, 0xb3, - 0x91, 0x33, 0x41, 0xe0, 0xd9, 0xf3, 0x9d, 0x80, 0xcf, 0x53, 0x75, 0x2b, 0xf8, 0x38, 0xda, 0x19, - 0x75, 0x62, 0x4d, 0x98, 0x80, 0x1b, 0xe9, 0x04, 0xdc, 0x11, 0x7d, 0x9d, 0x8d, 0x67, 0x22, 0x9e, - 0x40, 0xdb, 0x59, 0xbc, 0x9b, 0xac, 0x30, 0x40, 0x2b, 0x6c, 0xa5, 0xa1, 0x6d, 0xa2, 0xec, 0xaf, - 0x1b, 0x68, 0x5f, 0xdd, 0x75, 0x16, 0xec, 0x06, 0x95, 0x61, 0x3b, 0x01, 0xf1, 0x96, 0xad, 0x66, - 0xcd, 0xb3, 0x1e, 0xd6, 0xda, 0xc4, 0xab, 0x13, 0x27, 0xb0, 0x9b, 0xc4, 0x1f, 0xd9, 0xb4, 0xa7, - 0xff, 0xe0, 0xd0, 0xec, 0x29, 0x48, 0x0c, 0x94, 0x17, 0xed, 0x60, 0xa9, 0x33, 0x3f, 0x59, 0x77, - 0x5b, 0x65, 0xab, 0xd9, 0x74, 0x3d, 0xeb, 0x08, 0x8c, 0x1f, 0x7f, 0xa4, 0xbe, 0x0e, 0x4b, 0x19, - 0x5c, 0x22, 0xf5, 0xea, 0x9e, 0x58, 0x46, 0x05, 0x44, 0x54, 0xad, 0x87, 0x37, 0x62, 0x01, 0xb8, - 0x83, 0x4a, 0x32, 0x3d, 0x96, 0xc3, 0x2e, 0xf2, 0x47, 0x06, 0x57, 0x27, 0x7e, 0x24, 0x2b, 0x9e, - 0xf6, 0xbd, 0x6f, 0xbe, 0x83, 0x0e, 0x08, 0xbe, 0x41, 0x95, 0x2c, 0xda, 0xe1, 0x20, 0x87, 0xc3, - 0x20, 0xc6, 0xfb, 0x39, 0xa7, 0x90, 0x72, 0x57, 0xd2, 0xbc, 0x0e, 0x26, 0x56, 0xdb, 0x3e, 0x2c, - 0x9d, 0x7d, 0x68, 0x33, 0xb5, 0x0b, 0xbc, 0x04, 0x18, 0x82, 0xa7, 0x43, 0x43, 0xc0, 0xdf, 0x99, - 0xb5, 0xa8, 0xc1, 0x68, 0x8f, 0x5f, 0x5b, 0x8d, 0x6f, 0x80, 0x4d, 0xd6, 0x0b, 0xe8, 0x46, 0xe5, - 0xd3, 0xe0, 0x3c, 0x57, 0xfc, 0x7b, 0x4b, 0x76, 0x40, 0x9a, 0xb6, 0x1f, 0xcc, 0x34, 0x5a, 0xb6, - 0x93, 0x7b, 0x4a, 0x60, 0x9e, 0xe5, 0x91, 0x76, 0xa6, 0x26, 0xc8, 0x1f, 0x45, 0x83, 0xb6, 0x5f, - 0xb3, 0xc2, 0x77, 0x20, 0x7a, 0x93, 0xed, 0xd3, 0x22, 0xe6, 0xeb, 0xc9, 0x7c, 0x60, 0x95, 0xb4, - 0xdc, 0x65, 0xab, 0xe9, 0xdf, 0x69, 0xdf, 0x09, 0xe7, 0x9b, 0xe0, 0x59, 0xa7, 0x6d, 0xbb, 0x91, - 0xb5, 0xed, 0x8d, 0x64, 0xaa, 0x4f, 0xde, 0x56, 0xe4, 0x97, 0x0d, 0x7a, 0xf0, 0x1d, 0x12, 0x13, - 0xe3, 0x92, 0xfc, 0x3d, 0x34, 0x41, 0x43, 0x88, 0xa8, 0xbc, 0x59, 0x85, 0xe3, 0x64, 0x21, 0xcf, - 0xbc, 0x4a, 0xcd, 0x03, 0x48, 0x1e, 0x17, 0x68, 0x33, 0x8a, 0x0d, 0xd3, 0x08, 0x5e, 0x14, 0x11, - 0xc8, 0x9a, 0x4a, 0x21, 0xb9, 0x05, 0x23, 0x9e, 0x29, 0x52, 0x68, 0x62, 0xc2, 0xce, 0xc8, 0x27, - 0x26, 0x3c, 0x9a, 0x6f, 0xc3, 0x64, 0xc8, 0x36, 0x1a, 0x65, 0x1d, 0x36, 0x81, 0x06, 0x72, 0x0f, - 0x21, 0x53, 0x91, 0x17, 0x37, 0x1f, 0xc3, 0xe6, 0xa6, 0x84, 0x96, 0xaf, 0xf7, 0x2e, 0x34, 0x14, - 0x25, 0x8f, 0x41, 0xf3, 0xf8, 0x45, 0x12, 0x55, 0xbf, 0x88, 0xca, 0x86, 0x69, 0xaa, 0x16, 0x0d, - 0xe8, 0x5e, 0x4d, 0xa3, 0x2b, 0x3a, 0x2c, 0x11, 0xca, 0xd3, 0x10, 0x0f, 0xd3, 0x45, 0x1c, 0xc6, - 0x71, 0x17, 0xdd, 0x56, 0xcb, 0x0e, 0x0a, 0xc5, 0x69, 0xbb, 0xe4, 0x35, 0x41, 0xb7, 0x4b, 0x68, - 0x98, 0x46, 0x8d, 0x75, 0xfa, 0x1a, 0xf4, 0xdb, 0xa7, 0xf4, 0xcf, 0x66, 0x42, 0xb7, 0x9c, 0x7a, - 0x35, 0x55, 0xd4, 0x8c, 0x5a, 0x33, 0xcf, 0x24, 0xa5, 0xb0, 0x18, 0x93, 0x15, 0xca, 0x57, 0xf0, - 0x04, 0xcc, 0x8d, 0x6c, 0x55, 0xd0, 0x70, 0x07, 0xda, 0x48, 0x1d, 0x2d, 0x58, 0x23, 0xec, 0x21, - 0x72, 0x0d, 0xc1, 0xd2, 0xc5, 0x29, 0xe4, 0xb5, 0xcd, 0x29, 0x39, 0x60, 0x3e, 0x34, 0x62, 0xa2, - 0x8e, 0x7c, 0x3a, 0x91, 0xaa, 0xe6, 0x7e, 0xd3, 0x5e, 0x69, 0x70, 0x97, 0x70, 0x9f, 0xfc, 0xea, - 0x70, 0x9c, 0xb3, 0x0e, 0x03, 0xa9, 0xbd, 0xc9, 0x95, 0xc2, 0x4e, 0x71, 0x3a, 0xc1, 0x92, 0xeb, - 0xd9, 0xc1, 0xe3, 0x55, 0xad, 0xc1, 0x00, 0xd2, 0x4b, 0x8a, 0x96, 0x01, 0xc5, 0x35, 0x34, 0x64, - 0xf1, 0x97, 0x3d, 0x1f, 0x29, 0xc4, 0x4d, 0x98, 0x1d, 0x90, 0x2a, 0x4c, 0xf1, 0x1b, 0x4d, 0xab, - 0x4e, 0x5a, 0xc4, 0x09, 0x56, 0xbd, 0x38, 0x77, 0xa2, 0x81, 0xc0, 0xf2, 0x16, 0x49, 0x00, 0x6b, - 0x13, 0x9e, 0x4c, 0x1b, 0x02, 0x3b, 0x95, 0xd8, 0xc8, 0x60, 0x6e, 0x89, 0xcf, 0x93, 0x12, 0x09, - 0xa0, 0x31, 0xe9, 0xfa, 0x74, 0x3d, 0xba, 0x28, 0x37, 0x37, 0x92, 0x8f, 0xe6, 0xdb, 0x32, 0x03, - 0x74, 0xa7, 0xed, 0xa6, 0x4f, 0xf6, 0xf4, 0x41, 0x24, 0xa0, 0xe8, 0x13, 0x50, 0xb8, 0x32, 0x03, - 0x23, 0x34, 0x0d, 0x38, 0x2e, 0xa3, 0x8d, 0xf4, 0x56, 0x57, 0xcf, 0x23, 0xc6, 0xaa, 0x9b, 0x6f, - 0xa7, 0x46, 0x8b, 0x2d, 0xc7, 0x1b, 0xc4, 0xbb, 0xb5, 0x64, 0x79, 0x64, 0x55, 0xd3, 0xef, 0xab, - 0x46, 0x6a, 0x48, 0xd2, 0x6d, 0x03, 0x14, 0x0b, 0x6d, 0x63, 0x09, 0xac, 0xd0, 0x87, 0xad, 0xf9, - 0xe1, 0x37, 0x40, 0xd5, 0xb3, 0x0b, 0xb9, 0xc5, 0x13, 0x44, 0x99, 0x75, 0x74, 0x38, 0xb3, 0x1b, - 0x5d, 0x76, 0x3d, 0xbe, 0x26, 0x9c, 0x46, 0xca, 0x17, 0x4b, 0x80, 0x32, 0x04, 0x50, 0xba, 0x23, - 0xc6, 0x15, 0xf0, 0x08, 0xf2, 0x85, 0x00, 0xf0, 0xab, 0x08, 0xd3, 0x41, 0xa8, 0x81, 0xcd, 0x4f, - 0xce, 0xc7, 0xbc, 0xdd, 0x70, 0x9b, 0x9f, 0x7a, 0x63, 0xfe, 0x96, 0x01, 0x19, 0x19, 0xd9, 0xde, - 0x52, 0xdc, 0x09, 0xd1, 0x20, 0x14, 0x57, 0x66, 0xbf, 0x66, 0xdb, 0xdc, 0x20, 0xce, 0x84, 0xc7, - 0x60, 0xe2, 0xe4, 0x9a, 0x41, 0x6f, 0xdc, 0xd6, 0xf4, 0x46, 0xd1, 0xdd, 0x33, 0xdb, 0x2b, 0xe7, - 0xe0, 0xde, 0xcb, 0x0d, 0x8f, 0x2c, 0xdb, 0x6e, 0xc7, 0xa7, 0x63, 0x00, 0x61, 0x62, 0xfe, 0x4e, - 0xf5, 0x01, 0xef, 0x53, 0x69, 0x75, 0x50, 0xfc, 0x7a, 0x74, 0x50, 0xb7, 0xca, 0x59, 0xcb, 0x4f, - 0xf8, 0xc6, 0xd0, 0x90, 0xe3, 0x06, 0xb5, 0x05, 0xb7, 0xe3, 0xb0, 0x21, 0x18, 0xac, 0x0e, 0x3a, - 0x6e, 0x70, 0x39, 0x7c, 0x36, 0x8f, 0x27, 0x4f, 0x86, 0x5f, 0x7b, 0x64, 0xfb, 0x41, 0x91, 0x1c, - 0xe0, 0x14, 0x9c, 0x03, 0x0a, 0xb5, 0x40, 0xff, 0x9d, 0x68, 0x80, 0xd0, 0x37, 0xe0, 0x94, 0xc3, - 0x93, 0x79, 0x12, 0x4e, 0xf4, 0x2a, 0x0c, 0xf5, 0x0c, 0x1c, 0x2c, 0xe6, 0xca, 0x3a, 0x03, 0x67, - 0x0d, 0xa9, 0x7a, 0x20, 0x6d, 0x0c, 0x0d, 0x85, 0x41, 0x00, 0x7d, 0x09, 0x02, 0x07, 0x6d, 0x9f, - 0x15, 0x12, 0x9d, 0x9e, 0xcb, 0x84, 0x1f, 0x63, 0x16, 0x10, 0xfa, 0x5e, 0xd2, 0x1d, 0x49, 0xd6, - 0x04, 0xb1, 0x37, 0xd1, 0xf0, 0x02, 0x89, 0xcf, 0x4b, 0x7b, 0xb5, 0x9a, 0x68, 0x21, 0x6a, 0xda, - 0x1c, 0x8f, 0x8e, 0x19, 0x42, 0x5b, 0x63, 0xcd, 0x37, 0xc5, 0xf3, 0x55, 0xf3, 0x26, 0xb8, 0x39, - 0xd9, 0xef, 0xa0, 0xd3, 0x51, 0xb4, 0xc3, 0x8b, 0xbe, 0x45, 0xa7, 0xcf, 0xcc, 0x91, 0xdf, 0x50, - 0xc5, 0x9e, 0x58, 0xaf, 0xd2, 0xf0, 0xcd, 0x3b, 0x70, 0xda, 0x98, 0x3c, 0x2a, 0xf2, 0x6e, 0xd5, - 0xdd, 0xa2, 0x96, 0x5a, 0x71, 0xfb, 0xf6, 0x2a, 0x2c, 0x12, 0x59, 0xb3, 0xf1, 0xc1, 0x35, 0xbd, - 0x0d, 0x2c, 0x3f, 0xb8, 0x66, 0x65, 0x59, 0x09, 0xf3, 0x1d, 0xe1, 0xd8, 0x32, 0x4e, 0x14, 0x16, - 0xd5, 0x33, 0x27, 0x43, 0x69, 0x5e, 0x17, 0x4e, 0x35, 0x33, 0xed, 0x77, 0xaf, 0xb0, 0xd8, 0xab, - 0xfc, 0xbe, 0x57, 0xf1, 0x5e, 0x55, 0xec, 0x7f, 0x62, 0xaf, 0x8a, 0xcd, 0x76, 0xaf, 0x64, 0x94, - 0x18, 0xe5, 0x49, 0x24, 0xfa, 0xd5, 0xcf, 0xc6, 0x99, 0xab, 0xf3, 0x7e, 0xef, 0xf0, 0xc4, 0xa8, - 0x5a, 0x4c, 0x7c, 0xa6, 0x4f, 0x35, 0x53, 0x9c, 0xe9, 0x33, 0xe5, 0xa1, 0x88, 0xb9, 0x04, 0x89, - 0x10, 0x96, 0x57, 0x49, 0x35, 0xbe, 0xa6, 0xee, 0xfb, 0xdb, 0x90, 0x11, 0xd1, 0x4b, 0x8a, 0x8f, - 0x3c, 0x22, 0x0c, 0x92, 0x23, 0x0f, 0x56, 0x29, 0x02, 0xd1, 0x48, 0x65, 0xf8, 0xd7, 0x67, 0x04, - 0x6e, 0xc3, 0x40, 0xab, 0xa5, 0xf4, 0x32, 0x00, 0x8b, 0x90, 0x3a, 0x63, 0xdd, 0x22, 0xb6, 0xbd, - 0xa6, 0xfd, 0xff, 0x96, 0x30, 0xd2, 0x0a, 0x41, 0x3d, 0x75, 0xbf, 0x05, 0x76, 0x05, 0x56, 0x92, - 0xbf, 0x0e, 0xca, 0x57, 0xc1, 0xb4, 0x28, 0x44, 0xf4, 0xa4, 0xf6, 0x3d, 0x70, 0x21, 0xae, 0xda, - 0x7e, 0x40, 0x1c, 0xdb, 0x59, 0xbc, 0xe8, 0x92, 0x85, 0x05, 0xbb, 0x6e, 0x17, 0x8b, 0x86, 0xd4, - 0xf6, 0xe5, 0x0b, 0xdc, 0xce, 0x4a, 0x1b, 0x06, 0x5d, 0xef, 0xa1, 0x67, 0x9b, 0xfc, 0x7b, 0xad, - 0x1e, 0x17, 0x90, 0x9f, 0x44, 0x4a, 0x9b, 0xda, 0xd1, 0x94, 0xbc, 0x35, 0xdf, 0x85, 0x75, 0xc6, - 0x3d, 0xa3, 0x28, 0x40, 0x09, 0x37, 0xad, 0xcb, 0x5e, 0xb8, 0xc1, 0x47, 0x37, 0x85, 0x7a, 0xc3, - 0xf7, 0x07, 0x06, 0x5c, 0xe5, 0xcc, 0x11, 0x01, 0x48, 0xdf, 0x45, 0x5b, 0x21, 0x8c, 0x58, 0x80, - 0x4f, 0x6b, 0x14, 0x45, 0x70, 0x49, 0x7a, 0xbf, 0xec, 0x5d, 0x74, 0x48, 0x50, 0x36, 0x71, 0x8f, - 0xa3, 0xcb, 0x1e, 0x51, 0x1d, 0x30, 0x7e, 0xd7, 0x80, 0x28, 0x26, 0x57, 0xc4, 0x67, 0xa3, 0x47, - 0x6a, 0xa9, 0xe1, 0xe3, 0xb6, 0x60, 0xcd, 0x3a, 0xe4, 0x0f, 0x8d, 0x54, 0x9f, 0xab, 0x24, 0x7c, - 0x36, 0xfa, 0xe3, 0x24, 0xb0, 0x1b, 0xb8, 0xb6, 0x70, 0xa0, 0x62, 0x2d, 0xc2, 0xf8, 0xdd, 0x76, - 0x69, 0x3c, 0xc3, 0xef, 0x10, 0x44, 0x7e, 0xe4, 0x6f, 0x1b, 0xe8, 0x44, 0x97, 0x15, 0x01, 0x70, - 0x03, 0x6d, 0x6f, 0x47, 0x65, 0xf9, 0x2d, 0x91, 0x55, 0x42, 0xde, 0xd6, 0x4e, 0x49, 0x37, 0xf7, - 0x43, 0x98, 0x4f, 0x59, 0x0c, 0x5c, 0xa3, 0x4b, 0xb6, 0x0f, 0x07, 0x67, 0x1c, 0xc6, 0x97, 0xf9, - 0xe5, 0x19, 0x65, 0x39, 0xd0, 0xfa, 0x3e, 0x7a, 0x3a, 0x08, 0x8b, 0xac, 0x91, 0xc2, 0xc3, 0x41, - 0x2c, 0x6f, 0xea, 0x07, 0x2d, 0xb4, 0x91, 0x2a, 0x81, 0x1f, 0xa0, 0x01, 0x46, 0xd9, 0xc0, 0x7b, - 0x44, 0x1b, 0x98, 0x65, 0x84, 0x94, 0xf6, 0x6a, 0x4a, 0x30, 0xa5, 0xcd, 0x5d, 0x5f, 0xfe, 0xc9, - 0x2f, 0x7e, 0xb3, 0x6f, 0x27, 0xde, 0x51, 0x96, 0x10, 0x03, 0xf1, 0xd7, 0x0c, 0xb4, 0x65, 0x8e, - 0x04, 0x89, 0xcb, 0xa7, 0x78, 0xbf, 0xa4, 0xcd, 0xec, 0xbd, 0xd5, 0xd2, 0x8b, 0x79, 0xc5, 0x40, - 0xfe, 0xc1, 0xaf, 0x86, 0xf1, 0x09, 0x55, 0xe2, 0x79, 0x3c, 0x26, 0x2a, 0x21, 0x5c, 0x6e, 0xc5, - 0x4f, 0xd0, 0xe0, 0x1c, 0x61, 0xf5, 0xf1, 0x6e, 0x49, 0xeb, 0xc9, 0x1b, 0xae, 0xa5, 0x3d, 0xea, - 0x02, 0x20, 0xf8, 0x70, 0x2c, 0x78, 0x2f, 0xde, 0x5d, 0xce, 0x32, 0x12, 0xfd, 0xf2, 0x13, 0x2e, - 0x7b, 0x05, 0x7f, 0xdd, 0x40, 0x5b, 0xe7, 0x48, 0x90, 0xbc, 0x24, 0x8a, 0x65, 0x10, 0x25, 0xf7, - 0x55, 0x4b, 0x07, 0x72, 0xcb, 0x15, 0xe8, 0x0b, 0x16, 0x78, 0xd6, 0xe0, 0xaa, 0xe9, 0xc7, 0x06, - 0xda, 0x3b, 0x47, 0x02, 0xe9, 0xfd, 0xbb, 0xd9, 0xc7, 0x7c, 0xa8, 0xca, 0x12, 0xc1, 0xba, 0x9b, - 0x81, 0xa5, 0xa3, 0xc5, 0x2b, 0x80, 0xca, 0x77, 0x63, 0x95, 0xdf, 0xc0, 0x95, 0x9c, 0x5e, 0x04, - 0xea, 0xa8, 0x5f, 0x7e, 0x22, 0x5e, 0x32, 0x5c, 0x29, 0xa7, 0xef, 0x09, 0xe2, 0x3f, 0x31, 0xd0, - 0x8e, 0x39, 0x12, 0x64, 0x2e, 0x1d, 0xe0, 0x43, 0x12, 0x15, 0x55, 0xd7, 0xd9, 0x4a, 0x87, 0x8b, - 0x15, 0x06, 0x2c, 0xaf, 0xc4, 0x58, 0x8e, 0xe3, 0xa9, 0xb2, 0x9c, 0x6f, 0x2a, 0xe0, 0x79, 0x92, - 0xf4, 0xcb, 0x56, 0xf0, 0x9f, 0x1a, 0x68, 0x64, 0x8e, 0x04, 0xd2, 0x5b, 0xab, 0xd2, 0xc1, 0xd0, - 0x5d, 0x90, 0x95, 0x0e, 0x86, 0xf6, 0x42, 0xac, 0x79, 0x2a, 0x06, 0x70, 0x18, 0x4f, 0x88, 0x00, - 0xd2, 0x3d, 0x2c, 0xcc, 0xee, 0xef, 0x19, 0xe8, 0x99, 0x39, 0x12, 0xa4, 0x6f, 0xa3, 0xe2, 0x09, - 0x89, 0x0a, 0x8a, 0x0b, 0xb1, 0xa5, 0x43, 0x85, 0xca, 0x82, 0xa6, 0x17, 0x62, 0x4d, 0xa7, 0xf1, - 0x31, 0x51, 0xd3, 0xe8, 0x36, 0xab, 0xa6, 0xa7, 0x7f, 0x68, 0xa0, 0x31, 0x6a, 0x97, 0xe4, 0x97, - 0xf2, 0xf1, 0x94, 0xd4, 0xfa, 0x68, 0x79, 0x02, 0xa5, 0xe9, 0xae, 0xea, 0x00, 0x90, 0x99, 0x18, - 0xc8, 0x49, 0x7c, 0x3c, 0x6d, 0xbe, 0xd8, 0x0d, 0x95, 0xa6, 0xeb, 0xeb, 0xb0, 0x7c, 0xc5, 0x40, - 0x9b, 0xa9, 0x61, 0xe3, 0x5c, 0x3a, 0xfc, 0x82, 0xd4, 0x78, 0xa5, 0x48, 0x78, 0xa5, 0xfd, 0x39, - 0xa5, 0x40, 0xc3, 0x17, 0x63, 0x0d, 0xc7, 0xf0, 0x68, 0x7a, 0x85, 0x86, 0xdb, 0x15, 0xcd, 0x3d, - 0x86, 0x93, 0x77, 0xe7, 0x1c, 0x09, 0x24, 0xac, 0x31, 0x7c, 0x44, 0x22, 0x49, 0x4d, 0x5f, 0x2b, - 0x4d, 0x16, 0x2d, 0x0e, 0x1a, 0x9e, 0x8f, 0x35, 0x9c, 0xc2, 0x47, 0xcb, 0x32, 0x46, 0x39, 0xd3, - 0xb1, 0xfc, 0x24, 0x32, 0x18, 0x89, 0xc9, 0xfb, 0x97, 0x6c, 0x2e, 0xa8, 0x38, 0x6f, 0xd2, 0xb9, - 0x90, 0xc3, 0xc0, 0x93, 0xce, 0x85, 0x3c, 0x52, 0x9d, 0x79, 0x22, 0xc6, 0x31, 0x81, 0x0f, 0x4a, - 0x71, 0xf8, 0x0c, 0x88, 0xb0, 0xf8, 0xfe, 0xcd, 0x40, 0x7b, 0xe6, 0x48, 0xa0, 0xa5, 0xb9, 0xe1, - 0x53, 0x12, 0x85, 0x8a, 0x30, 0xf1, 0x4a, 0xa7, 0xbb, 0xaf, 0x08, 0x70, 0x5e, 0x8f, 0xe1, 0xbc, - 0x82, 0xcf, 0x6b, 0x86, 0xa5, 0xe6, 0x93, 0xe6, 0x42, 0xf9, 0x49, 0x8a, 0xdf, 0x25, 0x8c, 0xd1, - 0x2f, 0x19, 0x46, 0x2d, 0xb7, 0x4d, 0x8a, 0xb1, 0x08, 0xfd, 0x4e, 0x8a, 0xb1, 0x10, 0x8d, 0xce, - 0xbc, 0x16, 0x63, 0xbc, 0x88, 0x67, 0xe4, 0x18, 0xe1, 0xa0, 0x80, 0xf0, 0x39, 0xa8, 0xc3, 0xf9, - 0xa5, 0x3e, 0xb4, 0x3f, 0x39, 0x96, 0x4a, 0x82, 0x1a, 0x3e, 0xa7, 0x1b, 0x97, 0x3c, 0xee, 0x5d, - 0xe9, 0x7c, 0x8f, 0xb5, 0x01, 0xf6, 0xfd, 0x18, 0xf6, 0x75, 0xfc, 0xa6, 0x08, 0x3b, 0x0d, 0x37, - 0xc3, 0x62, 0x5b, 0xd1, 0x77, 0xc1, 0x4f, 0x0c, 0xb4, 0x4b, 0xd7, 0x05, 0x78, 0xba, 0x1b, 0xdd, - 0x39, 0xe0, 0xe3, 0xdd, 0x55, 0x02, 0x9c, 0x57, 0x62, 0x9c, 0xe7, 0xf1, 0xcb, 0xdd, 0xe3, 0x8c, - 0x51, 0x7d, 0x8d, 0x1b, 0x69, 0x4e, 0x6b, 0x53, 0x18, 0xe9, 0x14, 0x55, 0x4e, 0x61, 0xa4, 0xd3, - 0xdc, 0x38, 0xf3, 0x50, 0xac, 0xe8, 0x1e, 0x3c, 0x5e, 0xce, 0xfe, 0x11, 0x8c, 0xa4, 0x2e, 0x7f, - 0x9d, 0xe8, 0x61, 0xd9, 0x25, 0x1b, 0x75, 0x0f, 0x6b, 0xae, 0xf9, 0xa8, 0x7b, 0x58, 0x77, 0x8f, - 0xc7, 0x3c, 0x1d, 0x2b, 0x7e, 0x04, 0x1f, 0x92, 0x28, 0xce, 0x4f, 0xc5, 0xfc, 0xf4, 0xb6, 0xf7, - 0x0b, 0x03, 0xbd, 0x90, 0x36, 0x09, 0x52, 0x34, 0x2f, 0xe7, 0xad, 0x6e, 0x1d, 0xaa, 0x73, 0xbd, - 0x55, 0x2e, 0xb0, 0xbb, 0x8b, 0xf3, 0x47, 0x09, 0xf3, 0xbb, 0xcc, 0xb5, 0x4a, 0x9f, 0xf8, 0x49, - 0x5d, 0x2b, 0xc5, 0x85, 0x20, 0xa9, 0x6b, 0xa5, 0xba, 0xc1, 0xa3, 0xdd, 0x4d, 0x05, 0x55, 0x05, - 0x97, 0x04, 0x56, 0xf4, 0x0a, 0xfe, 0x19, 0xdb, 0x4d, 0x55, 0x27, 0x95, 0xd2, 0xdd, 0x34, 0xe7, - 0x42, 0x93, 0x74, 0x37, 0xcd, 0xbb, 0x89, 0x64, 0x56, 0x63, 0x1c, 0x73, 0xf8, 0xb5, 0x22, 0x7d, - 0x2f, 0x00, 0x8a, 0x96, 0x73, 0x12, 0xdc, 0x37, 0x0c, 0xb4, 0x3d, 0x0a, 0x9b, 0x38, 0xbd, 0x06, - 0x1f, 0x54, 0x46, 0x3d, 0x29, 0x32, 0x4f, 0xe9, 0xa5, 0x02, 0x25, 0x0b, 0xac, 0x68, 0x16, 0xfd, - 0xc4, 0xde, 0x0c, 0xfe, 0x96, 0x81, 0x70, 0xec, 0x7b, 0x45, 0x8a, 0xbd, 0xa4, 0x76, 0xa4, 0xd2, - 0x9a, 0x4d, 0x14, 0x29, 0x5a, 0x20, 0xf2, 0x85, 0xae, 0x4a, 0xe8, 0xf6, 0x8f, 0x06, 0x1a, 0xd3, - 0xdc, 0x2b, 0xc5, 0x27, 0x64, 0x31, 0x56, 0xee, 0x3d, 0xd7, 0xd2, 0xc9, 0x6e, 0xab, 0x15, 0x58, - 0x92, 0x10, 0x55, 0xc6, 0x17, 0x45, 0x85, 0x19, 0x11, 0x21, 0x0a, 0x77, 0x28, 0xdd, 0xbd, 0x53, - 0x2c, 0xd7, 0x2d, 0xf7, 0x26, 0x6c, 0xe9, 0x54, 0xd7, 0xf5, 0x00, 0xd4, 0x6c, 0x0c, 0xea, 0x14, - 0x3e, 0x21, 0x77, 0x43, 0xf2, 0x50, 0x7d, 0xb3, 0x2f, 0x19, 0x12, 0x65, 0x03, 0x67, 0x4d, 0x48, - 0xa4, 0x8c, 0x9f, 0xa7, 0xbb, 0xaa, 0x03, 0x60, 0x7e, 0xc3, 0x88, 0xd1, 0xbc, 0x6f, 0xe0, 0x2f, - 0xca, 0x83, 0x22, 0x79, 0x40, 0x2d, 0x92, 0xca, 0x44, 0x5b, 0x9a, 0x62, 0x9c, 0x41, 0x61, 0x96, - 0x6b, 0x93, 0x95, 0x64, 0x5f, 0x56, 0xf0, 0x5f, 0x18, 0x68, 0x34, 0x8a, 0xca, 0xd3, 0xda, 0xe3, - 0x63, 0xca, 0x28, 0x5b, 0x45, 0x35, 0x2b, 0x4d, 0x75, 0x53, 0xa5, 0xc0, 0x3e, 0xa9, 0xed, 0x12, - 0xfc, 0x37, 0x06, 0x32, 0x23, 0xf5, 0x67, 0x96, 0x2d, 0xbb, 0x69, 0xcd, 0x37, 0xc9, 0xff, 0x3f, - 0x1c, 0x1f, 0x19, 0x68, 0x44, 0xc5, 0x8d, 0x93, 0x4e, 0xce, 0x1c, 0xba, 0x9e, 0x74, 0x72, 0xe6, - 0x91, 0xef, 0xcc, 0x1b, 0xb1, 0xfe, 0xaf, 0xe1, 0x8b, 0xa9, 0x1c, 0x8f, 0x9a, 0x95, 0xa7, 0x09, - 0xdf, 0xff, 0xd9, 0x40, 0xa3, 0x4a, 0x36, 0x0e, 0x9e, 0xd6, 0x99, 0x04, 0x15, 0xb2, 0xe3, 0xdd, - 0x55, 0x02, 0x68, 0x37, 0x63, 0x68, 0x97, 0xf1, 0xa5, 0x0c, 0x34, 0x25, 0x13, 0x48, 0x83, 0xed, - 0x07, 0x06, 0x2a, 0xcd, 0x91, 0x40, 0x41, 0xc0, 0x93, 0xce, 0x39, 0x3d, 0xdd, 0x4f, 0x3a, 0xe7, - 0x72, 0xf8, 0x7d, 0xda, 0xbc, 0x5c, 0x02, 0x87, 0x30, 0x78, 0xc2, 0xd4, 0xfb, 0x90, 0xf9, 0x34, - 0x2a, 0xba, 0x23, 0xce, 0x51, 0x4a, 0x46, 0xaf, 0x94, 0xce, 0xbe, 0x3c, 0x3e, 0xa5, 0xf9, 0x6a, - 0x8c, 0xe4, 0x04, 0x9e, 0x56, 0x23, 0x11, 0xc6, 0xca, 0x4f, 0xf9, 0xfe, 0xcf, 0x45, 0x79, 0x51, - 0x91, 0xc2, 0x86, 0x27, 0x95, 0xd9, 0x4e, 0x29, 0xd9, 0xae, 0x54, 0x2e, 0x5c, 0x1e, 0xd4, 0x9f, - 0x8b, 0xd5, 0x3f, 0x87, 0xcf, 0xca, 0x12, 0xa4, 0x5e, 0x8d, 0x1b, 0x01, 0x46, 0x8b, 0x13, 0xb7, - 0x2a, 0xe0, 0x4d, 0xae, 0xe0, 0x7f, 0x60, 0xf3, 0x4a, 0xc1, 0xc5, 0x93, 0xce, 0x2b, 0x3d, 0x71, - 0x50, 0x3a, 0xaf, 0x72, 0xa8, 0x7e, 0xda, 0xe8, 0x30, 0x41, 0xe3, 0xd2, 0x20, 0x62, 0x33, 0x6e, - 0x05, 0xff, 0x8f, 0x81, 0x76, 0xcf, 0x91, 0x40, 0x47, 0x30, 0x94, 0x3a, 0x15, 0x05, 0x28, 0x91, - 0x52, 0xa7, 0xa2, 0x08, 0x93, 0xd1, 0xfc, 0x7c, 0x0c, 0xaf, 0x8a, 0x6f, 0x88, 0xf0, 0x5c, 0x87, - 0xd4, 0x6c, 0xa7, 0x56, 0x0c, 0x65, 0x5c, 0x6a, 0xa5, 0xfc, 0x04, 0xc6, 0x79, 0x05, 0x7f, 0xdb, - 0x40, 0xdb, 0xd2, 0x8c, 0x19, 0x69, 0x54, 0xa3, 0x20, 0xe4, 0x48, 0xa3, 0x1a, 0x15, 0x05, 0xc7, - 0x2c, 0x53, 0x1c, 0x2f, 0xe1, 0x03, 0x29, 0x8f, 0x8f, 0x97, 0x66, 0xec, 0x9c, 0x84, 0x3b, 0xf4, - 0x3d, 0x16, 0x24, 0x47, 0x5c, 0x02, 0x66, 0x59, 0x18, 0x07, 0x40, 0xe9, 0x5c, 0xcb, 0x39, 0x0b, - 0x52, 0xe7, 0x5a, 0x41, 0x52, 0xd0, 0xe6, 0xe0, 0x59, 0x9f, 0x26, 0x38, 0x0c, 0xc9, 0x95, 0xfd, - 0x47, 0x06, 0x7a, 0x3e, 0xa9, 0x30, 0x58, 0x90, 0xcf, 0xb0, 0xc6, 0xdf, 0x61, 0xa1, 0x6d, 0x9a, - 0x0d, 0x81, 0x27, 0xd4, 0x67, 0x6f, 0x69, 0xb6, 0x85, 0x74, 0x12, 0xa8, 0xe8, 0x15, 0x5a, 0xe7, - 0x83, 0xa9, 0x05, 0xc7, 0xe4, 0xd4, 0x6e, 0x26, 0x55, 0xfd, 0x27, 0x36, 0x1b, 0x94, 0xd4, 0x08, - 0xe9, 0x3e, 0x9d, 0xc7, 0xd7, 0x90, 0xee, 0xd3, 0xb9, 0xec, 0x0b, 0xb3, 0x12, 0xa3, 0xb8, 0x80, - 0xcf, 0xc9, 0x9d, 0xfd, 0x24, 0x3d, 0x43, 0xb3, 0x3f, 0xff, 0x2d, 0x3b, 0x70, 0x92, 0xf2, 0x24, - 0xa4, 0x07, 0x4e, 0x3a, 0xae, 0x86, 0xf4, 0xc0, 0x49, 0x4b, 0xc1, 0xd0, 0x6e, 0x08, 0x3c, 0x34, - 0x87, 0x4c, 0x21, 0xaf, 0x2b, 0xcf, 0x3a, 0x7c, 0xc4, 0x7c, 0x74, 0x39, 0x07, 0x02, 0x1f, 0xcd, - 0xcb, 0x1f, 0xa4, 0x59, 0x1a, 0xa5, 0x63, 0x5d, 0xd4, 0x00, 0x2c, 0xb7, 0x62, 0x2c, 0x57, 0xf0, - 0x65, 0x6d, 0xbe, 0xa1, 0xcd, 0x2b, 0x2b, 0x33, 0x0e, 0x8c, 0x15, 0xb1, 0x82, 0x7f, 0x2c, 0xc9, - 0xa6, 0x24, 0x58, 0x11, 0xf9, 0xd9, 0x94, 0x2c, 0x3b, 0x23, 0x3f, 0x9b, 0x22, 0xa1, 0x5d, 0x68, - 0x93, 0xf9, 0x29, 0x74, 0x9d, 0xb6, 0xeb, 0xd4, 0xa2, 0x3c, 0x40, 0x02, 0x20, 0x07, 0xf5, 0x77, - 0xe2, 0x60, 0x89, 0xec, 0x08, 0xed, 0x60, 0x49, 0x49, 0x1a, 0xda, 0xc1, 0x92, 0x53, 0x2f, 0xb4, - 0x6b, 0x28, 0x82, 0x93, 0x26, 0x67, 0xc8, 0xa7, 0xde, 0xcf, 0x0d, 0xb4, 0x2f, 0x95, 0xa0, 0x93, - 0x91, 0x1f, 0xf0, 0xd9, 0x9c, 0x24, 0x9c, 0x86, 0x96, 0x51, 0x7a, 0xb9, 0xa7, 0xba, 0xdd, 0x27, - 0xf4, 0x38, 0xa8, 0xa4, 0xe9, 0xfb, 0x39, 0xf3, 0x18, 0x65, 0xf9, 0x36, 0xa9, 0xc7, 0xa8, 0x61, - 0x61, 0x48, 0x3d, 0x46, 0x1d, 0x37, 0xc2, 0xb4, 0x62, 0xdd, 0xef, 0xe2, 0xdb, 0xc5, 0x92, 0x78, - 0x82, 0x89, 0xcb, 0xcf, 0xe9, 0x7d, 0x9f, 0x9d, 0x5b, 0x4a, 0x88, 0x0e, 0xd2, 0x73, 0x4b, 0x35, - 0x9f, 0x42, 0x7a, 0x6e, 0xa9, 0xe1, 0x4f, 0x98, 0x2f, 0xc7, 0xe0, 0x8e, 0xe2, 0xc9, 0xd4, 0xfd, - 0x19, 0xa8, 0x07, 0xd7, 0x57, 0x18, 0x41, 0x22, 0x39, 0x2c, 0x1f, 0x18, 0x68, 0x38, 0x41, 0x6a, - 0xc0, 0xca, 0x83, 0x02, 0x81, 0x2a, 0x21, 0xbd, 0x56, 0x23, 0xe1, 0x46, 0x98, 0x53, 0xb1, 0x6e, - 0x07, 0xf0, 0x7e, 0xd9, 0x56, 0xc9, 0xc8, 0x12, 0x49, 0x95, 0xbe, 0x65, 0xa0, 0xcd, 0x02, 0xf7, - 0x01, 0x1f, 0x90, 0xba, 0x68, 0x59, 0x56, 0x45, 0xe9, 0x60, 0x7e, 0xc1, 0x02, 0x87, 0xa4, 0x36, - 0xef, 0x2e, 0x76, 0xd9, 0x25, 0xa9, 0xdb, 0xef, 0xb3, 0x0c, 0x69, 0x8a, 0x25, 0xa1, 0x76, 0x89, - 0x32, 0x1c, 0x0c, 0xb5, 0x4b, 0x94, 0x25, 0x5d, 0x14, 0x70, 0x89, 0x12, 0x9c, 0x8c, 0xa4, 0x9a, - 0xdf, 0x66, 0x2e, 0x51, 0x9a, 0x39, 0x81, 0xe5, 0xe9, 0x59, 0x29, 0xfd, 0x42, 0xea, 0x12, 0xa9, - 0xa8, 0x18, 0x39, 0xb9, 0x5c, 0x91, 0xa3, 0xe1, 0xe3, 0x3f, 0x37, 0xd0, 0xb3, 0x51, 0x2e, 0x29, - 0x49, 0x97, 0xc0, 0x87, 0x95, 0xb9, 0x20, 0x09, 0x59, 0xa3, 0x74, 0xa4, 0x60, 0x69, 0x50, 0xf2, - 0x52, 0xac, 0xe4, 0x19, 0x7c, 0x4a, 0x73, 0x2f, 0xc5, 0xab, 0xd1, 0xbb, 0xc7, 0xc2, 0xa2, 0x8f, - 0x02, 0x8e, 0x1f, 0x26, 0x6f, 0xd7, 0xa4, 0xd8, 0x13, 0x9a, 0xdb, 0x35, 0x72, 0x1e, 0x87, 0xe6, - 0x76, 0x8d, 0x82, 0x98, 0xa1, 0xdd, 0x42, 0x01, 0x45, 0x22, 0x9e, 0xca, 0x02, 0x49, 0x84, 0x51, - 0xe2, 0x40, 0x24, 0x19, 0x16, 0x9a, 0x81, 0x90, 0xf0, 0x3b, 0x34, 0x03, 0x21, 0xa3, 0x6d, 0x14, - 0x19, 0x88, 0xe8, 0x64, 0x3f, 0xa3, 0x7f, 0x64, 0x71, 0xff, 0x85, 0x39, 0xd3, 0x4a, 0xa6, 0x85, - 0x3c, 0xe9, 0x95, 0x43, 0xff, 0x90, 0x27, 0xbd, 0xf2, 0xc8, 0x1c, 0xfa, 0xa4, 0x57, 0xf4, 0x47, - 0x4d, 0xd8, 0x8d, 0xf6, 0x5a, 0x27, 0xac, 0xcf, 0xfe, 0x60, 0x89, 0xc6, 0xa9, 0xfe, 0x0f, 0x16, - 0xcc, 0xeb, 0x78, 0x18, 0xd2, 0x60, 0xbe, 0x00, 0x45, 0x44, 0x1a, 0xcc, 0x17, 0x21, 0x7c, 0x98, - 0x77, 0x62, 0x9c, 0xaf, 0xe3, 0x2b, 0xd2, 0x63, 0x8f, 0x0c, 0x5c, 0x2b, 0xc8, 0xc5, 0xfa, 0x53, - 0xe6, 0x9f, 0xaa, 0x28, 0x1b, 0x58, 0x97, 0x56, 0x51, 0x0d, 0xe4, 0x74, 0x57, 0x75, 0x0a, 0xe4, - 0x65, 0xf9, 0xc2, 0xe9, 0x6e, 0x18, 0x7f, 0x69, 0xa0, 0xf1, 0x68, 0x18, 0xa5, 0x74, 0x0e, 0xe9, - 0xd1, 0x55, 0x3e, 0xcf, 0xa4, 0x74, 0xb2, 0xdb, 0x6a, 0x80, 0xf1, 0x76, 0x8c, 0xb1, 0x82, 0xe7, - 0xa4, 0x63, 0x98, 0x86, 0x5a, 0x60, 0x08, 0xff, 0x9e, 0x99, 0x45, 0x29, 0xf3, 0x43, 0x6a, 0x16, - 0x75, 0x34, 0x14, 0xa9, 0x59, 0xd4, 0x92, 0x4a, 0xcc, 0x37, 0x63, 0x54, 0xb3, 0xf8, 0x55, 0xd5, - 0xad, 0xa7, 0xc2, 0x70, 0xfe, 0x8a, 0xb9, 0xab, 0x32, 0x42, 0x87, 0xd4, 0x5d, 0xd5, 0xb0, 0x53, - 0xa4, 0xee, 0xaa, 0x8e, 0x74, 0x62, 0xbe, 0x16, 0x63, 0x39, 0x8b, 0x4f, 0xa7, 0xec, 0xa3, 0x8c, - 0x8d, 0x22, 0x37, 0x90, 0xbf, 0x62, 0xb7, 0x9d, 0xb4, 0xf4, 0x0f, 0xe9, 0x6d, 0xa7, 0x22, 0x9c, - 0x14, 0xe9, 0x6d, 0xa7, 0x42, 0x4c, 0x13, 0xed, 0x22, 0x8b, 0x1c, 0xd6, 0xf8, 0xbc, 0x51, 0x60, - 0x1c, 0xc8, 0x91, 0xfe, 0x17, 0x3b, 0x9c, 0xca, 0x21, 0x76, 0xe0, 0x33, 0x1a, 0x95, 0xf5, 0x7c, - 0x93, 0xd2, 0xd9, 0x5e, 0xaa, 0x16, 0xd8, 0x1c, 0x22, 0xbc, 0xb1, 0xd9, 0xd4, 0x21, 0xe6, 0x99, - 0xde, 0xff, 0x64, 0x17, 0xaf, 0xf5, 0xc4, 0x0d, 0xac, 0x1b, 0x22, 0x2d, 0x9b, 0xa4, 0x74, 0xa6, - 0x87, 0x9a, 0xdd, 0x8c, 0x6e, 0x64, 0x60, 0x8a, 0x80, 0xfd, 0x52, 0x1f, 0x3a, 0x94, 0x00, 0x9b, - 0x47, 0xdf, 0xc0, 0xb3, 0x1a, 0xe5, 0x0b, 0x92, 0x46, 0x4a, 0x17, 0x57, 0xd5, 0x46, 0x81, 0xcc, - 0x7e, 0xd4, 0x15, 0x19, 0x86, 0x49, 0x2d, 0x70, 0x59, 0x2c, 0x1a, 0x1d, 0xc0, 0x50, 0x8f, 0xb9, - 0xc4, 0x2f, 0xe7, 0x66, 0xa9, 0x1f, 0xd2, 0x93, 0x0a, 0x3d, 0x9d, 0x44, 0x7a, 0x52, 0x91, 0xc3, - 0x2c, 0xd1, 0x06, 0x4d, 0x49, 0xca, 0x49, 0x88, 0xa0, 0x11, 0x6b, 0x07, 0x17, 0xc5, 0x94, 0xbf, - 0x4d, 0x24, 0x75, 0xd4, 0xf2, 0x7e, 0x27, 0x49, 0xea, 0xa8, 0xe5, 0xfe, 0xfc, 0x91, 0xfe, 0xe0, - 0xd8, 0xa2, 0xdc, 0x06, 0xf9, 0x11, 0x12, 0xbf, 0x28, 0x96, 0xfb, 0x83, 0x43, 0xd2, 0x8b, 0x62, - 0x45, 0x7f, 0x34, 0x49, 0x7a, 0x51, 0xac, 0xf0, 0x6f, 0x1c, 0x69, 0x6f, 0xa5, 0xa4, 0x7e, 0x74, - 0x48, 0x05, 0xf3, 0xbf, 0x0d, 0x74, 0x20, 0x0d, 0x53, 0x75, 0x96, 0x74, 0x21, 0x4f, 0xd9, 0x9c, - 0x33, 0xa5, 0x57, 0x7a, 0xae, 0x5f, 0x20, 0x90, 0x48, 0xe3, 0x55, 0x1e, 0x32, 0x89, 0x90, 0xf5, - 0xbf, 0x21, 0xa4, 0x81, 0x5c, 0xe8, 0x37, 0x91, 0x34, 0x90, 0x8b, 0xfd, 0x78, 0x51, 0x21, 0xc8, - 0x09, 0xa8, 0x8a, 0x51, 0xfe, 0x5f, 0x03, 0x4d, 0x48, 0x20, 0xab, 0x06, 0x7a, 0xa6, 0x80, 0xd6, - 0x39, 0x63, 0x3d, 0xbb, 0x9a, 0x26, 0x0a, 0xe4, 0xf9, 0x25, 0xd8, 0x95, 0x23, 0x3e, 0x5b, 0xfd, - 0xf0, 0x93, 0x71, 0xe3, 0x47, 0x9f, 0x8c, 0x1b, 0xff, 0xfa, 0xc9, 0xb8, 0xf1, 0xc1, 0xa7, 0xe3, - 0x4f, 0xfd, 0xe8, 0xd3, 0xf1, 0xa7, 0x7e, 0xfa, 0xe9, 0xf8, 0x53, 0xf7, 0x4f, 0x17, 0xa4, 0xc7, - 0x3d, 0x4a, 0x48, 0xa7, 0x3f, 0xab, 0x37, 0x3f, 0x40, 0x7f, 0xe7, 0x6d, 0xfa, 0xff, 0x02, 0x00, - 0x00, 0xff, 0xff, 0x94, 0xe0, 0x06, 0xf3, 0xc7, 0x6f, 0x00, 0x00, + // 5322 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xd4, 0x5d, 0x5d, 0x6c, 0x1d, 0xc7, + 0x75, 0xf6, 0x92, 0x12, 0x45, 0x0e, 0x2d, 0x89, 0x1a, 0xcb, 0x32, 0x79, 0x29, 0x53, 0xd2, 0xca, + 0xfa, 0xa3, 0x24, 0x5e, 0x89, 0xd4, 0xbf, 0x25, 0xd9, 0xa4, 0x64, 0x51, 0x57, 0x96, 0xf5, 0x73, + 0xf5, 0x67, 0xab, 0x89, 0xaf, 0x97, 0xf7, 0x0e, 0xc9, 0x85, 0x2e, 0x77, 0xaf, 0x77, 0xf7, 0x52, + 0x12, 0x14, 0xa2, 0x49, 0x10, 0x14, 0x09, 0x90, 0x07, 0x03, 0x45, 0x8a, 0x06, 0x4d, 0x8b, 0x14, + 0xe8, 0x43, 0x80, 0x36, 0x69, 0x51, 0x04, 0x7d, 0x28, 0xda, 0x87, 0xa2, 0x3f, 0x70, 0xd0, 0x16, + 0x0d, 0x92, 0x1a, 0x48, 0x83, 0xc6, 0x68, 0xed, 0x04, 0x69, 0x0b, 0xb4, 0x68, 0xdf, 0xfb, 0x50, + 0xec, 0xcc, 0x99, 0xdd, 0x9d, 0xdd, 0x99, 0xd9, 0xbd, 0x97, 0x24, 0xe0, 0xbe, 0x08, 0xda, 0xdd, + 0x99, 0x39, 0xe7, 0x9b, 0xdf, 0x73, 0xce, 0x9c, 0x8f, 0x17, 0x0d, 0x93, 0x25, 0xdb, 0xf7, 0x6d, + 0xd7, 0xf1, 0xcb, 0xcb, 0x93, 0xe5, 0xf7, 0xdb, 0xc4, 0x7b, 0x3a, 0xd1, 0xf2, 0xdc, 0xc0, 0xc5, + 0xcf, 0x47, 0x5f, 0x26, 0x96, 0x27, 0x4b, 0xe3, 0x75, 0xd7, 0x5f, 0x72, 0xfd, 0xf2, 0x9c, 0xe5, + 0x13, 0x56, 0xac, 0xbc, 0x7c, 0x7c, 0x8e, 0x04, 0xd6, 0xf1, 0x72, 0xcb, 0x5a, 0xb0, 0x1d, 0x2b, + 0xb0, 0x5d, 0x87, 0xd5, 0x2c, 0x89, 0x6d, 0x06, 0x4f, 0x5b, 0xc4, 0x87, 0x2f, 0x3b, 0x17, 0x5c, + 0x77, 0xa1, 0x49, 0xca, 0x56, 0xcb, 0x2e, 0x5b, 0x8e, 0xe3, 0x06, 0xb4, 0x1a, 0xff, 0x3a, 0x0a, + 0x32, 0x78, 0xf3, 0x49, 0x75, 0x4a, 0xdb, 0xac, 0x25, 0xdb, 0x71, 0xcb, 0xf4, 0x5f, 0x78, 0xb5, + 0x7d, 0xc1, 0x5d, 0x70, 0xe9, 0x7f, 0xcb, 0xe1, 0xff, 0xe0, 0xed, 0x08, 0x6b, 0xa5, 0xc6, 0x3e, + 0xb0, 0x07, 0xfe, 0x49, 0x50, 0xac, 0x65, 0x79, 0xd6, 0x12, 0xff, 0xf4, 0x92, 0xf0, 0xc9, 0x71, + 0x1b, 0x44, 0x5a, 0xe7, 0xb1, 0xeb, 0x3d, 0x22, 0x1e, 0x7c, 0x2a, 0x09, 0x9f, 0x3c, 0xd2, 0x6a, + 0x07, 0xd1, 0xb7, 0xe1, 0x54, 0x7b, 0x4e, 0x9d, 0xc8, 0x7b, 0xc7, 0x6d, 0xd9, 0x75, 0xe9, 0x17, + 0x3f, 0xb0, 0x1e, 0xf1, 0x3a, 0x3b, 0x85, 0x2f, 0xb6, 0x33, 0x4f, 0x3c, 0xa2, 0x6a, 0xd1, 0xaf, + 0xbb, 0x1e, 0x7c, 0x31, 0x3f, 0x87, 0xf6, 0xdd, 0x0e, 0xfb, 0xf0, 0x86, 0x65, 0x2f, 0x93, 0x0a, + 0xad, 0xe6, 0xdd, 0x20, 0x41, 0x88, 0xa2, 0x4a, 0x16, 0x3c, 0x12, 0x54, 0xc9, 0xfb, 0x6d, 0xe2, + 0x07, 0x78, 0x04, 0xf5, 0x53, 0x4d, 0x6a, 0x76, 0x63, 0xd8, 0xd8, 0x6d, 0x1c, 0xdc, 0x50, 0xdd, + 0x44, 0x9f, 0x2b, 0x0d, 0x3c, 0x8c, 0x36, 0x31, 0x81, 0xde, 0x70, 0xcf, 0x6e, 0xe3, 0xe0, 0x40, + 0x95, 0x3f, 0x9a, 0xef, 0xa1, 0xfd, 0x79, 0xad, 0xfb, 0x2d, 0xd7, 0xf1, 0x09, 0x3e, 0x85, 0xfa, + 0x3c, 0xfa, 0x86, 0x36, 0x3e, 0x38, 0x39, 0x36, 0x91, 0x9c, 0x5c, 0x13, 0x77, 0xed, 0x25, 0xe2, + 0x07, 0xd6, 0x52, 0x8b, 0x34, 0xee, 0x5b, 0xcd, 0x36, 0xa9, 0x42, 0x69, 0xf3, 0xeb, 0x06, 0x3a, + 0x4a, 0x45, 0xdc, 0x74, 0xc8, 0xcd, 0x76, 0x00, 0x32, 0xba, 0x04, 0xb2, 0x1f, 0x6d, 0x75, 0x1d, + 0x52, 0x73, 0xdb, 0x41, 0x4d, 0x04, 0xb4, 0xd9, 0x4d, 0xb6, 0x9e, 0x04, 0xdc, 0x2b, 0x02, 0x5e, + 0x44, 0x13, 0x45, 0xb5, 0x59, 0x25, 0xf0, 0x6f, 0x18, 0xe8, 0x58, 0x56, 0xd4, 0x15, 0xd7, 0x23, + 0x75, 0xcb, 0x0f, 0xd6, 0x0f, 0xfb, 0x18, 0x42, 0xf3, 0x91, 0x10, 0x80, 0x9f, 0x78, 0x63, 0x3e, + 0x42, 0xc7, 0x3b, 0x50, 0x6b, 0x6d, 0x3b, 0x21, 0x16, 0xd3, 0xe5, 0x04, 0x38, 0x82, 0x30, 0xef, + 0x84, 0x04, 0x48, 0xd6, 0x0f, 0x43, 0x6e, 0x4a, 0x86, 0x66, 0x1a, 0x88, 0x9d, 0x90, 0xa7, 0xd6, + 0x2a, 0x3b, 0xe1, 0x77, 0x0c, 0x34, 0x25, 0x95, 0xd6, 0xfd, 0x64, 0xe8, 0xac, 0x1f, 0xf2, 0xa6, + 0x84, 0x83, 0x4e, 0x74, 0xa6, 0xdf, 0x2a, 0x3b, 0x64, 0x3b, 0xc2, 0x54, 0xde, 0x2d, 0xba, 0x7d, + 0x03, 0x5c, 0xf3, 0x06, 0x7a, 0x41, 0x78, 0x0b, 0x42, 0x4e, 0xa3, 0x3e, 0xb6, 0xcd, 0x83, 0x90, + 0xed, 0xa2, 0x10, 0x56, 0x7a, 0x66, 0xe0, 0xc3, 0x8f, 0x77, 0x3d, 0xf7, 0x9d, 0x5f, 0xfe, 0xd1, + 0xb8, 0x51, 0x85, 0xe2, 0xe6, 0x30, 0xda, 0x41, 0xdb, 0xbb, 0xeb, 0x06, 0x56, 0xf3, 0x4e, 0xb8, + 0x15, 0x73, 0x49, 0x36, 0x7a, 0x29, 0xf3, 0x05, 0xa4, 0x5d, 0x45, 0x7d, 0xd6, 0x92, 0xdb, 0x76, + 0x18, 0xa4, 0x81, 0x99, 0x63, 0x61, 0xbb, 0x3f, 0xfd, 0x78, 0xd7, 0x8b, 0xec, 0x14, 0xf2, 0x1b, + 0x8f, 0x26, 0x6c, 0xb7, 0xbc, 0x64, 0x05, 0x8b, 0x13, 0x15, 0x27, 0xf8, 0xd1, 0xf7, 0x8f, 0x22, + 0x38, 0x9e, 0x2a, 0x4e, 0x00, 0xe2, 0x59, 0xfd, 0x73, 0x1b, 0xfe, 0xed, 0xdb, 0xbb, 0x0c, 0xf3, + 0x3e, 0xda, 0x45, 0x45, 0x55, 0xd9, 0xd1, 0x42, 0x85, 0x55, 0x9c, 0xbb, 0xe1, 0x30, 0xf2, 0x61, + 0x1e, 0x46, 0x9b, 0xac, 0x46, 0xc3, 0x23, 0x3e, 0x43, 0x38, 0x50, 0xe5, 0x8f, 0xc2, 0x04, 0xe8, + 0x11, 0x26, 0x80, 0xe9, 0xa1, 0xdd, 0xea, 0x76, 0xd7, 0x09, 0x4b, 0x0d, 0xbd, 0x42, 0x65, 0xbe, + 0xd5, 0x6e, 0x06, 0xb6, 0x06, 0xd0, 0x4e, 0x34, 0x00, 0x08, 0x48, 0x08, 0xa9, 0xf7, 0xe0, 0x40, + 0x35, 0x7e, 0xa1, 0x03, 0xf5, 0x10, 0xce, 0x3a, 0xb5, 0x00, 0x40, 0x76, 0x1c, 0x6d, 0x62, 0x9a, + 0xb1, 0xf6, 0x07, 0x27, 0x5f, 0x12, 0x27, 0x05, 0x54, 0x9a, 0x77, 0xab, 0xbc, 0x9c, 0xe9, 0xa2, + 0x43, 0xb4, 0x6d, 0xfa, 0xe9, 0x8a, 0xe7, 0x2e, 0x41, 0xfb, 0xd0, 0x74, 0xc5, 0xb9, 0x43, 0x9a, + 0xf3, 0x1c, 0xc1, 0x01, 0xb4, 0x15, 0x6c, 0x81, 0x9a, 0x38, 0x34, 0x5b, 0xe0, 0xf5, 0x74, 0xfe, + 0x08, 0x7d, 0x01, 0x8d, 0x17, 0x11, 0xb8, 0x4e, 0x63, 0xc5, 0xe1, 0x5e, 0x26, 0x4d, 0xb2, 0x60, + 0x05, 0x24, 0xd9, 0x8d, 0x15, 0x07, 0x54, 0x59, 0x0f, 0xb8, 0x39, 0x02, 0xd7, 0x09, 0xee, 0xef, + 0x1a, 0x70, 0xae, 0x47, 0xbd, 0x0d, 0x7a, 0xb8, 0x9e, 0x0a, 0xf4, 0x61, 0xb4, 0xad, 0xc1, 0xcb, + 0xa4, 0x60, 0x0f, 0x45, 0x1f, 0x38, 0x70, 0x49, 0x0f, 0xf5, 0xe4, 0xf6, 0x50, 0xaf, 0xd8, 0x43, + 0x5f, 0x32, 0x50, 0xb9, 0xb0, 0x8e, 0xeb, 0x36, 0x2d, 0xf6, 0xe9, 0x55, 0xe8, 0xaa, 0x77, 0x34, + 0xd3, 0xe2, 0x09, 0x18, 0x98, 0x1a, 0x81, 0xeb, 0x04, 0x75, 0x2a, 0xda, 0xfe, 0x5b, 0x76, 0x3d, + 0xb9, 0xfd, 0x6b, 0xce, 0xd5, 0xc4, 0xc9, 0x10, 0x57, 0x5a, 0x27, 0xfd, 0x1a, 0xb0, 0x9b, 0xc2, + 0xd1, 0x7a, 0xdd, 0xf5, 0xfd, 0x99, 0xb6, 0xd3, 0x68, 0x92, 0xe9, 0x60, 0xa6, 0xe9, 0xd6, 0x1f, + 0x15, 0xb0, 0x02, 0xf6, 0xa0, 0xe7, 0xe7, 0xc2, 0xa2, 0xb5, 0x45, 0x62, 0x2f, 0x2c, 0x06, 0xb4, + 0xef, 0x7b, 0xab, 0x83, 0xf4, 0xdd, 0x55, 0xfa, 0xca, 0xac, 0x73, 0xf7, 0x41, 0x29, 0x05, 0xe0, + 0x9d, 0x43, 0x83, 0x4d, 0xd7, 0xf7, 0x6b, 0x73, 0xf4, 0x2b, 0x9c, 0xb5, 0x23, 0xe2, 0xb6, 0x4a, + 0x4f, 0x71, 0x56, 0xbd, 0x8a, 0x9a, 0x51, 0x53, 0xe6, 0x08, 0xf4, 0xda, 0x0d, 0xf2, 0x24, 0x60, + 0x13, 0xb9, 0xc1, 0x8f, 0xda, 0x8b, 0x68, 0x38, 0xfb, 0x09, 0x44, 0x9a, 0x68, 0xb3, 0x43, 0x9e, + 0x04, 0xb5, 0x14, 0xbc, 0x41, 0x27, 0x2e, 0x6b, 0x4e, 0xa0, 0x6d, 0xf1, 0x80, 0x14, 0x18, 0xc0, + 0xaf, 0x18, 0x60, 0x5b, 0x88, 0x93, 0xeb, 0x10, 0xda, 0x48, 0x4b, 0x00, 0xae, 0x17, 0x52, 0x86, + 0x0a, 0x2d, 0xcb, 0x4a, 0xe0, 0x1d, 0xa8, 0xef, 0x71, 0xdc, 0x9d, 0x03, 0x55, 0x78, 0x0a, 0x57, + 0x04, 0x99, 0x9f, 0x27, 0xf5, 0xc0, 0x5e, 0x26, 0x35, 0x8f, 0x2c, 0x13, 0xa7, 0x4d, 0xc0, 0x96, + 0x1a, 0x8a, 0x3e, 0x54, 0xd9, 0x7b, 0x73, 0x01, 0x60, 0x4f, 0xd3, 0xb7, 0xb4, 0x7d, 0x6e, 0xe7, + 0xe0, 0x37, 0x11, 0x8a, 0xfd, 0x6d, 0x50, 0xe8, 0x70, 0xea, 0xfc, 0xb2, 0x97, 0x5a, 0x4d, 0x72, + 0xa9, 0xed, 0xf9, 0xae, 0x77, 0x2b, 0x2a, 0x0b, 0x0d, 0x54, 0x13, 0xd5, 0xcd, 0xdf, 0x30, 0xd0, + 0x88, 0x44, 0x12, 0xc0, 0x3e, 0x8c, 0xfa, 0x28, 0x28, 0x7e, 0x4c, 0x4a, 0x71, 0x43, 0x11, 0x7c, + 0x5d, 0xd0, 0xab, 0x87, 0xea, 0x75, 0xa4, 0x98, 0x5e, 0x4c, 0x9c, 0xa0, 0xd8, 0xe7, 0xd1, 0xcb, + 0x54, 0xaf, 0x0a, 0xf7, 0x74, 0xfd, 0x35, 0x9d, 0xd7, 0x0f, 0xd1, 0x98, 0xaa, 0x79, 0xc0, 0x7e, + 0x06, 0xa1, 0xc8, 0xcb, 0xe6, 0xb6, 0xe3, 0xb0, 0x08, 0x27, 0xae, 0x5c, 0x4d, 0x94, 0x35, 0x2f, + 0xa2, 0x3d, 0xb4, 0xed, 0xeb, 0x56, 0x40, 0x7c, 0x98, 0x89, 0x71, 0xc9, 0xfc, 0x39, 0xf8, 0x25, + 0x03, 0x99, 0xba, 0x06, 0x56, 0xab, 0x60, 0x91, 0xfe, 0xf9, 0x1c, 0xda, 0x49, 0x55, 0xe0, 0x26, + 0xfc, 0xda, 0xf6, 0xfe, 0x7d, 0x18, 0xdc, 0x6c, 0xeb, 0x80, 0xed, 0x24, 0x1a, 0xe0, 0xfe, 0x05, + 0x87, 0x96, 0x32, 0xd1, 0xa2, 0xaa, 0xd5, 0xb8, 0xa4, 0x49, 0xa0, 0xe7, 0x1f, 0xd0, 0x18, 0x0d, + 0xeb, 0xbe, 0xa8, 0x0f, 0x0a, 0xa8, 0xbe, 0x0f, 0x6d, 0x61, 0xe1, 0x9d, 0xd4, 0x29, 0xbd, 0x99, + 0xbd, 0x85, 0xf3, 0xca, 0x5c, 0x84, 0xf1, 0x51, 0x88, 0x01, 0x0c, 0x33, 0x68, 0xa8, 0x49, 0x3f, + 0xd5, 0xa2, 0xae, 0x97, 0x43, 0x89, 0xab, 0x6e, 0x6d, 0x8a, 0x6d, 0x99, 0x57, 0x51, 0x29, 0x21, + 0xe9, 0x86, 0xdb, 0x60, 0x56, 0x69, 0xd6, 0xf2, 0xef, 0x11, 0x2c, 0xff, 0x6b, 0x1b, 0xfa, 0x8d, + 0xa1, 0x9e, 0x2a, 0x6a, 0xda, 0x73, 0xad, 0xc9, 0x56, 0xed, 0x11, 0x79, 0x6a, 0xde, 0x47, 0xa3, + 0xd2, 0x96, 0x22, 0x2f, 0x69, 0xc0, 0x71, 0x1b, 0x24, 0x54, 0xd5, 0x05, 0x2d, 0x4b, 0xa2, 0x96, + 0x37, 0xe7, 0xe7, 0xeb, 0x8b, 0x96, 0xed, 0x84, 0x55, 0xab, 0xfd, 0x0e, 0x34, 0x60, 0x56, 0xa0, + 0x5d, 0xb0, 0x3c, 0x56, 0xa3, 0xe2, 0x03, 0x98, 0x73, 0x99, 0xa6, 0x56, 0xab, 0xe3, 0xb7, 0x0d, + 0xf1, 0xac, 0xec, 0x66, 0x4f, 0xb9, 0x80, 0x46, 0x93, 0xb3, 0xba, 0xd6, 0xb4, 0x84, 0x81, 0x65, + 0x93, 0x7c, 0x38, 0x31, 0xc9, 0xaf, 0x5b, 0x89, 0x81, 0xbc, 0xb6, 0xa1, 0xbf, 0x77, 0x68, 0x03, + 0x7c, 0x17, 0x9a, 0xf0, 0xc8, 0x63, 0xcb, 0x6b, 0x98, 0xaf, 0xa3, 0xbd, 0x89, 0x25, 0x9f, 0xd1, + 0xb3, 0xc0, 0xae, 0xc1, 0xed, 0x81, 0x8a, 0xcf, 0x87, 0xd8, 0xa9, 0x93, 0x7b, 0xce, 0x7c, 0xbb, + 0x39, 0x6f, 0x37, 0x9b, 0xa4, 0xb1, 0x36, 0x2b, 0x77, 0x1e, 0xec, 0x01, 0xb5, 0x14, 0x18, 0xac, + 0x0b, 0x68, 0xd4, 0xf6, 0x6b, 0xb0, 0x9a, 0x68, 0xf0, 0xb3, 0xd6, 0x8e, 0x8b, 0x51, 0xc9, 0xfd, + 0xd5, 0x61, 0x5b, 0xd1, 0x8c, 0x39, 0x0d, 0x68, 0x84, 0xa6, 0x61, 0x5a, 0x14, 0xec, 0x10, 0x6e, + 0xba, 0xa8, 0x9b, 0x88, 0x4c, 0x97, 0x3e, 0xaa, 0x20, 0xdf, 0x69, 0x4c, 0x71, 0x52, 0x89, 0x76, + 0x3f, 0xd4, 0x85, 0x1a, 0xd1, 0xb8, 0x25, 0x84, 0x24, 0x10, 0x15, 0x51, 0xf3, 0x6e, 0x16, 0xa9, + 0xd8, 0x02, 0x68, 0x79, 0x24, 0xa5, 0x65, 0x2a, 0x8e, 0x91, 0xd2, 0xeb, 0x6d, 0xf0, 0xef, 0xbb, + 0x8c, 0x93, 0x8d, 0xa0, 0x7e, 0xab, 0x1e, 0x9a, 0xee, 0x60, 0x91, 0x87, 0xeb, 0x36, 0x7c, 0xae, + 0x34, 0xcc, 0x5f, 0x81, 0x3d, 0x76, 0x5d, 0x42, 0x5d, 0x6f, 0x43, 0x77, 0x76, 0x1f, 0xd9, 0x0a, + 0xcd, 0x2f, 0xda, 0x7d, 0x91, 0xf9, 0x45, 0x9f, 0xcc, 0x77, 0xa1, 0x9b, 0xd7, 0x2b, 0x26, 0xf5, + 0xab, 0xe8, 0x20, 0x8f, 0x81, 0x55, 0x9c, 0xee, 0xd5, 0x17, 0x43, 0x6d, 0x3d, 0xe9, 0x50, 0x9b, + 0x26, 0x24, 0x59, 0x07, 0x8f, 0x5d, 0xaf, 0xc0, 0x2a, 0x51, 0x92, 0x68, 0xf9, 0x27, 0x97, 0xd2, + 0x9a, 0xef, 0x32, 0x36, 0x78, 0x7d, 0x1a, 0x31, 0x00, 0xe4, 0x35, 0xb4, 0xd3, 0xf6, 0x6b, 0xdc, + 0xb7, 0x56, 0xed, 0x33, 0x23, 0xb6, 0xaa, 0x21, 0xf3, 0x7d, 0xd1, 0xc1, 0x51, 0xdb, 0x83, 0x57, + 0x11, 0x76, 0x58, 0x99, 0x5a, 0xc6, 0xec, 0xd2, 0xf8, 0x39, 0xdb, 0x9c, 0x74, 0xc3, 0xe6, 0x47, + 0x1b, 0x61, 0x2e, 0x2a, 0x37, 0xfb, 0xb5, 0x16, 0x89, 0xdf, 0x44, 0x5b, 0x61, 0x9e, 0xd4, 0x98, + 0x3b, 0x12, 0x1e, 0xc7, 0xbd, 0xb2, 0xbd, 0x2e, 0x1c, 0xe6, 0xf0, 0xd0, 0xf4, 0x96, 0x48, 0xe3, + 0x01, 0x2d, 0x5a, 0xdd, 0x02, 0x55, 0xd9, 0xa3, 0x8f, 0x6f, 0x23, 0x1c, 0xcf, 0xc8, 0xa8, 0xbd, + 0xde, 0xc2, 0xed, 0x6d, 0x8b, 0x6b, 0xf3, 0x26, 0x2d, 0x34, 0xc2, 0x5f, 0x56, 0x96, 0x5a, 0x4d, + 0x9b, 0x34, 0x62, 0xe5, 0x87, 0x37, 0xd0, 0x96, 0xf7, 0x8a, 0x2d, 0xb3, 0x3d, 0x72, 0x3a, 0x08, + 0x3c, 0x7b, 0xae, 0x1d, 0xf0, 0x79, 0xaa, 0x6e, 0x05, 0x9f, 0x40, 0x3b, 0xa2, 0x4e, 0xac, 0x09, + 0x13, 0x70, 0x23, 0x9d, 0x80, 0xdb, 0xa3, 0xaf, 0x33, 0xf1, 0x4c, 0xc4, 0xe3, 0x68, 0x1b, 0x73, + 0x6b, 0x93, 0x15, 0xfa, 0x68, 0x85, 0xad, 0xd4, 0x83, 0x4d, 0x94, 0xfd, 0x35, 0x03, 0xed, 0xad, + 0xbb, 0xce, 0xbc, 0xdd, 0xa0, 0x32, 0x6c, 0x27, 0x20, 0xde, 0xb2, 0xd5, 0xac, 0x79, 0xd6, 0xe3, + 0x5a, 0x8b, 0x78, 0x75, 0xe2, 0x04, 0x76, 0x93, 0xf8, 0xc3, 0x9b, 0x76, 0xf7, 0x1e, 0x1c, 0x98, + 0x39, 0x0d, 0xfe, 0x7f, 0x79, 0xc1, 0x0e, 0x16, 0xdb, 0x73, 0x13, 0x75, 0x77, 0xa9, 0x6c, 0x35, + 0x9b, 0xae, 0x67, 0x1d, 0x85, 0xf1, 0xe3, 0x8f, 0xd4, 0xa4, 0x61, 0x91, 0x81, 0xcb, 0xa4, 0x5e, + 0xdd, 0x1d, 0xcb, 0xa8, 0x80, 0x88, 0xaa, 0xf5, 0xf8, 0x56, 0x2c, 0x00, 0xb7, 0x51, 0x49, 0xa6, + 0xc7, 0x72, 0xd8, 0x45, 0xfe, 0x70, 0xff, 0xea, 0xc4, 0x0f, 0x67, 0xc5, 0xd3, 0xbe, 0xf7, 0xcd, + 0x77, 0xd1, 0x01, 0xc1, 0x36, 0xa8, 0x92, 0x05, 0x3b, 0x1c, 0xe4, 0x70, 0x18, 0x44, 0xb7, 0x3e, + 0xe7, 0xb2, 0x51, 0x6e, 0x31, 0x9a, 0x37, 0x61, 0x8b, 0xd5, 0xb6, 0x0f, 0x4b, 0x67, 0x2f, 0xda, + 0x4c, 0xf7, 0x05, 0x5e, 0x02, 0x36, 0x82, 0xe7, 0xc3, 0x8d, 0x80, 0xbf, 0x33, 0x6b, 0x51, 0x83, + 0xd1, 0x19, 0xbf, 0xb6, 0x1a, 0xdf, 0x82, 0x3d, 0x59, 0x2f, 0xa0, 0x13, 0x95, 0xcf, 0x80, 0x8d, + 0x5c, 0xf1, 0x1f, 0x2c, 0xda, 0x01, 0x69, 0xda, 0x7e, 0x30, 0xdd, 0x58, 0xb2, 0x9d, 0xdc, 0xcb, + 0x00, 0xf3, 0x1c, 0x77, 0xa8, 0x33, 0x35, 0x41, 0xfe, 0x08, 0xea, 0xb7, 0xfd, 0x9a, 0x15, 0xbe, + 0x03, 0xd1, 0x9b, 0x6c, 0x9f, 0x16, 0x31, 0xaf, 0x25, 0xc3, 0x7e, 0x55, 0xb2, 0xe4, 0x2e, 0x5b, + 0x4d, 0xff, 0x5e, 0xeb, 0x5e, 0x38, 0xdf, 0x04, 0x03, 0x3a, 0xbd, 0xb7, 0x1b, 0xd9, 0xbd, 0xbd, + 0x91, 0x8c, 0xe8, 0xc9, 0xdb, 0x8a, 0xec, 0xb2, 0x7e, 0x0f, 0xbe, 0x43, 0xfc, 0x61, 0x4c, 0x12, + 0xa6, 0x87, 0x26, 0xa8, 0xa7, 0x10, 0x95, 0x37, 0xab, 0x70, 0x6b, 0x2c, 0x84, 0x93, 0x57, 0xa9, + 0x79, 0x00, 0x31, 0xe2, 0x02, 0x6d, 0x46, 0x2e, 0x60, 0x1a, 0xc1, 0x7e, 0x11, 0x81, 0xac, 0xa9, + 0x14, 0x92, 0x3b, 0x30, 0xe2, 0x99, 0x22, 0x85, 0x26, 0x26, 0x9c, 0x8c, 0x7c, 0x62, 0xc2, 0xa3, + 0xf9, 0x0e, 0x4c, 0x86, 0x6c, 0xa3, 0x51, 0x70, 0x61, 0x13, 0x68, 0x20, 0xb7, 0x10, 0x32, 0x15, + 0x79, 0x71, 0xf3, 0x29, 0x1c, 0x6e, 0x4a, 0x68, 0xf9, 0x7a, 0xef, 0x44, 0x03, 0x51, 0x8c, 0x18, + 0x34, 0x8f, 0x5f, 0x24, 0x51, 0xf5, 0x8a, 0xa8, 0x6c, 0x98, 0xa6, 0x6a, 0xd1, 0x80, 0xee, 0xf5, + 0x34, 0xba, 0xa2, 0xc3, 0x12, 0xa1, 0x3c, 0x03, 0x6e, 0x2f, 0x5d, 0xc4, 0xa1, 0xab, 0x77, 0xc9, + 0x5d, 0x5a, 0xb2, 0x83, 0x42, 0x7e, 0xda, 0x4e, 0x79, 0x4d, 0xd0, 0xed, 0x32, 0x1a, 0xa4, 0x8e, + 0x61, 0x9d, 0xbe, 0x06, 0xfd, 0xf6, 0x2a, 0xed, 0xb3, 0xe9, 0xd0, 0x2c, 0xa7, 0x56, 0x4d, 0x15, + 0x35, 0xa3, 0xd6, 0xcc, 0xb3, 0x49, 0x29, 0x55, 0xea, 0x63, 0xb2, 0x42, 0xf9, 0x0a, 0x9e, 0x84, + 0xb9, 0x91, 0xad, 0x0a, 0x1a, 0x6e, 0x47, 0x1b, 0xa9, 0xa1, 0x05, 0x6b, 0x84, 0x3d, 0x44, 0xa6, + 0x21, 0xec, 0x74, 0x71, 0xa4, 0x78, 0x6d, 0x43, 0x47, 0x0e, 0x6c, 0x1f, 0x1a, 0x31, 0x51, 0x47, + 0x3e, 0x9f, 0x88, 0x48, 0x73, 0xbb, 0x69, 0x8f, 0xd4, 0xb9, 0x4b, 0x98, 0x4f, 0x7e, 0x75, 0x30, + 0x0e, 0x4d, 0x87, 0x8e, 0xd4, 0x9e, 0xe4, 0x4a, 0x61, 0x97, 0x35, 0xed, 0x60, 0xd1, 0xf5, 0xec, + 0xe0, 0xe9, 0xaa, 0xd6, 0x60, 0x00, 0x51, 0x24, 0x45, 0xcb, 0x80, 0xe2, 0x06, 0x1a, 0xb0, 0xf8, + 0xcb, 0xae, 0x6f, 0x0e, 0xe2, 0x26, 0xcc, 0x36, 0x48, 0x15, 0xa6, 0xf8, 0xad, 0xa6, 0x55, 0x27, + 0x4b, 0xc4, 0x09, 0x56, 0xbd, 0x38, 0x77, 0xa0, 0xbe, 0xc0, 0xf2, 0x16, 0x48, 0x00, 0x6b, 0x13, + 0x9e, 0x4c, 0x1b, 0x1c, 0x3b, 0x95, 0xd8, 0x68, 0xc3, 0xdc, 0x12, 0x5f, 0x1b, 0x25, 0xe2, 0x3c, + 0xa3, 0xd2, 0xf5, 0xe9, 0x7a, 0x74, 0x51, 0x6e, 0x6e, 0x24, 0x1f, 0xcd, 0x77, 0x64, 0x1b, 0xd0, + 0xbd, 0x96, 0x9b, 0xbe, 0xc0, 0xd3, 0x3b, 0x91, 0x80, 0xa2, 0x47, 0x40, 0xe1, 0xca, 0x36, 0x18, + 0xa1, 0x69, 0xc0, 0x71, 0x05, 0x6d, 0xa4, 0xc9, 0x5b, 0x5d, 0x8f, 0x18, 0xab, 0x6e, 0xbe, 0x93, + 0x1a, 0x2d, 0xb6, 0x1c, 0x6f, 0x11, 0xef, 0xce, 0xa2, 0xe5, 0x91, 0x55, 0x4d, 0xbf, 0xaf, 0x1a, + 0xa9, 0x21, 0x49, 0xb7, 0x0d, 0x50, 0x2c, 0x34, 0xc4, 0x62, 0x54, 0xa1, 0x0d, 0x5b, 0xf3, 0xc3, + 0x6f, 0x80, 0xaa, 0x6b, 0x13, 0x72, 0x8b, 0x27, 0x88, 0x32, 0xeb, 0xe8, 0x48, 0xe6, 0x34, 0xba, + 0xe2, 0x7a, 0x7c, 0x4d, 0x38, 0x8d, 0x94, 0x2d, 0x96, 0x00, 0x65, 0x08, 0xa0, 0x74, 0x37, 0x89, + 0x2b, 0x60, 0x11, 0xe4, 0x0b, 0x01, 0xe0, 0xd7, 0x11, 0xa6, 0x83, 0x50, 0x83, 0x3d, 0x3f, 0x39, + 0x1f, 0xf3, 0x4e, 0xc3, 0x21, 0x3f, 0xf5, 0xc6, 0xfc, 0x4d, 0x03, 0x22, 0x32, 0xb2, 0xb3, 0xa5, + 0xb8, 0x11, 0xa2, 0x41, 0x28, 0xae, 0xcc, 0x5e, 0xcd, 0xb1, 0xb9, 0x41, 0x9c, 0x09, 0x4f, 0x61, + 0x8b, 0x93, 0x6b, 0x06, 0xbd, 0x71, 0x57, 0xd3, 0x1b, 0x45, 0x4f, 0xcf, 0x6c, 0xaf, 0x9c, 0x87, + 0xf4, 0x96, 0x5b, 0x1e, 0x59, 0xb6, 0xdd, 0xb6, 0x4f, 0xc7, 0x00, 0xdc, 0xc4, 0xfc, 0x93, 0xea, + 0x03, 0xde, 0xa7, 0xd2, 0xea, 0xa0, 0xf8, 0xcd, 0xe8, 0x3e, 0x6e, 0x95, 0xb3, 0x96, 0x5f, 0xe4, + 0x8d, 0xa2, 0x01, 0xc7, 0x0d, 0x6a, 0xf3, 0x6e, 0xdb, 0x61, 0x43, 0xd0, 0x5f, 0xed, 0x77, 0xdc, + 0xe0, 0x4a, 0xf8, 0x6c, 0x9e, 0x48, 0x5e, 0x00, 0xbf, 0xf1, 0xc4, 0xf6, 0x83, 0x22, 0x31, 0xc0, + 0x49, 0xb8, 0xee, 0x13, 0x6a, 0x81, 0xfe, 0x3b, 0x50, 0x1f, 0xa1, 0x6f, 0xc0, 0x28, 0x87, 0x27, + 0xf3, 0x14, 0x5c, 0xdc, 0x55, 0x18, 0xea, 0x69, 0xb8, 0x3f, 0xcc, 0x95, 0x75, 0x16, 0xae, 0x14, + 0x52, 0xf5, 0x40, 0xda, 0x28, 0x1a, 0x08, 0x9d, 0x00, 0xfa, 0x12, 0x04, 0xf6, 0xdb, 0x3e, 0x2b, + 0x24, 0x1a, 0x3d, 0x57, 0x08, 0xbf, 0xad, 0x2c, 0x20, 0xf4, 0xfd, 0xa4, 0x39, 0x92, 0xac, 0x09, + 0x62, 0x6f, 0xa3, 0xc1, 0x79, 0x12, 0x5f, 0x8b, 0x76, 0xbb, 0x6b, 0xa2, 0xf9, 0xa8, 0x69, 0x73, + 0x2c, 0xba, 0x4d, 0x08, 0xf7, 0x1a, 0x6b, 0xae, 0x29, 0x5e, 0xa3, 0x9a, 0xb7, 0xc1, 0xcc, 0xc9, + 0x7e, 0x07, 0x9d, 0x8e, 0xa1, 0xed, 0x5e, 0xf4, 0x2d, 0xba, 0x64, 0x66, 0x86, 0xfc, 0x86, 0x2a, + 0xf6, 0xc4, 0x7a, 0x95, 0x86, 0x6f, 0xde, 0x83, 0x4b, 0xc5, 0xe4, 0x8d, 0x90, 0x77, 0xa7, 0xee, + 0x16, 0xdd, 0xa9, 0x15, 0x49, 0xb6, 0xd7, 0x61, 0x91, 0xc8, 0x9a, 0x8d, 0xef, 0xa7, 0x69, 0xd2, + 0xaf, 0xfc, 0x7e, 0x9a, 0x95, 0x65, 0x25, 0xcc, 0x77, 0x85, 0xdb, 0xc9, 0x38, 0x50, 0x58, 0x54, + 0xcf, 0x9c, 0x08, 0xa5, 0x79, 0x53, 0xb8, 0xbc, 0xcc, 0xb4, 0xdf, 0xb9, 0xc2, 0x62, 0xaf, 0xf2, + 0xb4, 0xae, 0xe2, 0xbd, 0xaa, 0x38, 0xff, 0xc4, 0x5e, 0x15, 0x9b, 0xed, 0x5c, 0xc9, 0x28, 0x30, + 0xca, 0x83, 0x48, 0xf4, 0xab, 0x9f, 0xf5, 0x33, 0x57, 0x67, 0xfd, 0xde, 0xe3, 0x81, 0x51, 0xb5, + 0x98, 0xf8, 0xea, 0x9e, 0x6a, 0xa6, 0xb8, 0xba, 0x67, 0xca, 0x43, 0x11, 0x73, 0x11, 0x02, 0x21, + 0x2c, 0xae, 0x92, 0x6a, 0x7c, 0x4d, 0xcd, 0xf7, 0x77, 0x20, 0x22, 0xa2, 0x97, 0x14, 0x5f, 0x79, + 0x44, 0x18, 0x24, 0x57, 0x1e, 0xac, 0x52, 0x04, 0xa2, 0x91, 0x8a, 0xf0, 0xaf, 0xcf, 0x08, 0xdc, + 0x85, 0x81, 0x56, 0x4b, 0xe9, 0x66, 0x00, 0x16, 0x20, 0x74, 0xc6, 0xba, 0x45, 0x6c, 0x7b, 0x4d, + 0xfb, 0xff, 0x6d, 0x61, 0xa4, 0x15, 0x82, 0xba, 0xea, 0x7e, 0x0b, 0xf6, 0x15, 0x58, 0x49, 0xfe, + 0x3a, 0x28, 0x5f, 0x85, 0xad, 0x45, 0x21, 0xa2, 0x2b, 0xb5, 0x1f, 0x80, 0x09, 0x71, 0xdd, 0xf6, + 0x03, 0xe2, 0xd8, 0xce, 0xc2, 0x25, 0x97, 0xcc, 0xcf, 0xdb, 0x75, 0xbb, 0x98, 0x37, 0xa4, 0xde, + 0x5f, 0xbe, 0xc0, 0xf7, 0x59, 0x69, 0xc3, 0xa0, 0xeb, 0x03, 0xf4, 0x62, 0x93, 0x7f, 0xaf, 0xd5, + 0xe3, 0x02, 0xf2, 0x9b, 0x48, 0x69, 0x53, 0xdb, 0x9b, 0x92, 0xb7, 0xe6, 0x7b, 0xb0, 0xce, 0xb8, + 0x65, 0x14, 0x39, 0x28, 0xe1, 0xa1, 0x75, 0xc5, 0x0b, 0x0f, 0xf8, 0x28, 0x21, 0xa8, 0x3b, 0x7c, + 0xbf, 0x6f, 0x40, 0xc6, 0x66, 0x8e, 0x08, 0x40, 0xfa, 0x1e, 0xda, 0x0a, 0x6e, 0xc4, 0x3c, 0x7c, + 0x5a, 0x23, 0x2f, 0x82, 0x4b, 0xd2, 0xdb, 0x65, 0xef, 0xa1, 0xc3, 0x82, 0xb2, 0x89, 0x74, 0x8d, + 0x0e, 0x7b, 0x44, 0x75, 0xc1, 0xf8, 0x5d, 0x03, 0xbc, 0x98, 0x5c, 0x11, 0x9f, 0x8d, 0x1e, 0xa9, + 0xa5, 0x86, 0x8f, 0xef, 0x05, 0x6b, 0xd6, 0x21, 0x7f, 0x60, 0xa4, 0xfa, 0x5c, 0x25, 0xe1, 0xb3, + 0xd1, 0x1f, 0xa7, 0x80, 0xc4, 0xc0, 0xb5, 0x85, 0x0b, 0x15, 0x6b, 0x01, 0xc6, 0xef, 0xae, 0x4b, + 0xfd, 0x19, 0x9e, 0x43, 0x10, 0xd9, 0x91, 0xbf, 0x6d, 0xa0, 0x93, 0x1d, 0x56, 0x04, 0xc0, 0x0d, + 0xb4, 0xad, 0x15, 0x95, 0x85, 0x44, 0x90, 0xd5, 0x42, 0x1e, 0x6a, 0xa5, 0xa4, 0x9b, 0xfb, 0xc0, + 0xcd, 0xa7, 0x64, 0x05, 0xae, 0xd1, 0x65, 0xdb, 0x87, 0x8b, 0x33, 0x0e, 0xe3, 0xcb, 0x3c, 0x47, + 0x46, 0x59, 0x0e, 0xb4, 0x7e, 0x88, 0x9e, 0x0f, 0xc2, 0x22, 0x6b, 0xa4, 0xf0, 0x60, 0x10, 0xcb, + 0x9b, 0xfc, 0xad, 0x25, 0xb4, 0x91, 0x2a, 0x81, 0x1f, 0xa1, 0x3e, 0xc6, 0xcc, 0xc0, 0xbb, 0xc5, + 0x3d, 0x30, 0x4b, 0xfc, 0x28, 0xed, 0xd1, 0x94, 0x60, 0x4a, 0x9b, 0x3b, 0xbf, 0xfc, 0xe3, 0x9f, + 0xff, 0x7a, 0xcf, 0x0e, 0xbc, 0xbd, 0x2c, 0xe1, 0xff, 0xe1, 0xaf, 0x19, 0x68, 0xcb, 0x2c, 0x09, + 0x12, 0x39, 0xa6, 0x78, 0x9f, 0xa4, 0xcd, 0x6c, 0x7a, 0x6a, 0x69, 0x7f, 0x5e, 0x31, 0x90, 0x7f, + 0xf0, 0xab, 0xa1, 0x7f, 0x42, 0x95, 0x78, 0x19, 0x8f, 0x8a, 0x4a, 0x08, 0x39, 0xac, 0xf8, 0x19, + 0xea, 0x9f, 0x25, 0xac, 0x3e, 0xde, 0x25, 0x69, 0x3d, 0x99, 0xc8, 0x5a, 0xda, 0xad, 0x2e, 0x00, + 0x82, 0x8f, 0xc4, 0x82, 0xf7, 0xe0, 0x5d, 0xe5, 0x2c, 0xf1, 0xd0, 0x2f, 0x3f, 0xe3, 0xb2, 0x57, + 0xf0, 0xd7, 0x0d, 0xb4, 0x75, 0x96, 0x04, 0xc9, 0x5c, 0x50, 0x2c, 0x83, 0x28, 0x49, 0x4b, 0x2d, + 0x1d, 0xc8, 0x2d, 0x57, 0xa0, 0x2f, 0x98, 0xe3, 0x59, 0x83, 0x8c, 0xd2, 0x8f, 0x0d, 0xb4, 0x67, + 0x96, 0x04, 0xd2, 0x34, 0xbb, 0x99, 0xa7, 0x7c, 0xa8, 0xca, 0x12, 0xc1, 0xba, 0x04, 0xc0, 0xd2, + 0xb1, 0xe2, 0x15, 0x40, 0xe5, 0xfb, 0xb1, 0xca, 0x6f, 0xe2, 0x4a, 0x4e, 0x2f, 0x02, 0x43, 0xd4, + 0x2f, 0x3f, 0x13, 0x73, 0x09, 0x57, 0xca, 0xe9, 0x74, 0x40, 0xfc, 0xc7, 0x06, 0xda, 0x3e, 0x4b, + 0x82, 0x4c, 0xd2, 0x01, 0x3e, 0x2c, 0x51, 0x51, 0x95, 0xb5, 0x56, 0x3a, 0x52, 0xac, 0x30, 0x60, + 0x79, 0x2d, 0xc6, 0x72, 0x02, 0x4f, 0x96, 0xe5, 0xb4, 0x52, 0x01, 0xcf, 0xb3, 0xa4, 0x5d, 0xb6, + 0x82, 0xff, 0xc4, 0x40, 0xc3, 0xb3, 0x24, 0x90, 0x26, 0xa7, 0x4a, 0x07, 0x43, 0x97, 0x07, 0x2b, + 0x1d, 0x0c, 0x6d, 0xde, 0xab, 0x79, 0x3a, 0x06, 0x70, 0x04, 0x8f, 0x8b, 0x00, 0xd2, 0x3d, 0x2c, + 0xcc, 0xee, 0xef, 0x19, 0xe8, 0x85, 0x59, 0x12, 0xa4, 0x93, 0x4e, 0xf1, 0xb8, 0x44, 0x05, 0x45, + 0xde, 0x6b, 0xe9, 0x70, 0xa1, 0xb2, 0xa0, 0xe9, 0xc5, 0x58, 0xd3, 0x29, 0x7c, 0x5c, 0xd4, 0x34, + 0x4a, 0x5a, 0xd5, 0xf4, 0xf4, 0x0f, 0x0c, 0x34, 0x4a, 0xf7, 0x25, 0x79, 0xee, 0x3d, 0x9e, 0x94, + 0xee, 0x3e, 0x5a, 0x3a, 0x40, 0x69, 0xaa, 0xa3, 0x3a, 0x00, 0x64, 0x3a, 0x06, 0x72, 0x0a, 0x9f, + 0x48, 0x6f, 0x5f, 0x2c, 0x43, 0xa5, 0xe9, 0xfa, 0x3a, 0x2c, 0x5f, 0x31, 0xd0, 0x66, 0xba, 0xb1, + 0x71, 0xca, 0x1c, 0x7e, 0x45, 0xba, 0x79, 0xa5, 0xb8, 0x76, 0xa5, 0x7d, 0x39, 0xa5, 0x40, 0xc3, + 0xfd, 0xb1, 0x86, 0xa3, 0x78, 0x24, 0xbd, 0x42, 0xc3, 0xe3, 0x8a, 0xc6, 0x1e, 0xc3, 0xc9, 0xbb, + 0x63, 0x96, 0x04, 0x12, 0x72, 0x18, 0x3e, 0x2a, 0x91, 0xa4, 0x66, 0xa9, 0x95, 0x26, 0x8a, 0x16, + 0x07, 0x0d, 0x2f, 0xc4, 0x1a, 0x4e, 0xe2, 0x63, 0x65, 0x19, 0x71, 0x9c, 0xe9, 0x58, 0x7e, 0x16, + 0x6d, 0x18, 0x89, 0xc9, 0xfb, 0xe7, 0x6c, 0x2e, 0xa8, 0xa8, 0x6d, 0xd2, 0xb9, 0x90, 0x43, 0xb4, + 0x93, 0xce, 0x85, 0x3c, 0xee, 0x9c, 0x79, 0x32, 0xc6, 0x31, 0x8e, 0x0f, 0x4a, 0x71, 0xf8, 0x0c, + 0x88, 0xb0, 0xf8, 0xfe, 0xd5, 0x40, 0xbb, 0x67, 0x49, 0xa0, 0x65, 0xb3, 0xe1, 0xd3, 0x12, 0x85, + 0x8a, 0x10, 0xee, 0x4a, 0x67, 0x3a, 0xaf, 0x08, 0x70, 0xae, 0xc5, 0x70, 0x5e, 0xc3, 0x17, 0x34, + 0xc3, 0x52, 0xf3, 0x49, 0x73, 0xbe, 0xfc, 0x2c, 0x45, 0xe3, 0x12, 0xc6, 0xe8, 0x17, 0x0c, 0xa3, + 0x96, 0xc2, 0x26, 0xc5, 0x58, 0x84, 0x65, 0x27, 0xc5, 0x58, 0x88, 0x2d, 0x67, 0xde, 0x88, 0x31, + 0x5e, 0xc2, 0xd3, 0x72, 0x8c, 0x70, 0x51, 0x40, 0xf8, 0x1c, 0xd4, 0xe1, 0xfc, 0x62, 0x0f, 0xda, + 0x97, 0x1c, 0x4b, 0x25, 0x0f, 0x0d, 0x9f, 0xd7, 0x8d, 0x4b, 0x1e, 0xc5, 0xae, 0x74, 0xa1, 0xcb, + 0xda, 0x00, 0xfb, 0x61, 0x0c, 0xfb, 0x26, 0x7e, 0x4b, 0x84, 0x9d, 0x86, 0x9b, 0x21, 0xab, 0xad, + 0xe8, 0xbb, 0xe0, 0xc7, 0x06, 0xda, 0xa9, 0xeb, 0x02, 0x3c, 0xd5, 0x89, 0xee, 0x1c, 0xf0, 0x89, + 0xce, 0x2a, 0x01, 0xce, 0xab, 0x31, 0xce, 0x0b, 0xf8, 0xd5, 0xce, 0x71, 0xc6, 0xa8, 0xbe, 0xc6, + 0x37, 0x69, 0xce, 0x5e, 0x53, 0x6c, 0xd2, 0x29, 0x46, 0x9c, 0x62, 0x93, 0x4e, 0x53, 0xe0, 0xcc, + 0xc3, 0xb1, 0xa2, 0xbb, 0xf1, 0x58, 0x39, 0xfb, 0xb7, 0x2e, 0x92, 0xba, 0xfc, 0x65, 0xa2, 0x87, + 0x65, 0x49, 0x36, 0xea, 0x1e, 0xd6, 0xa4, 0xf9, 0xa8, 0x7b, 0x58, 0x97, 0xc7, 0x63, 0x9e, 0x89, + 0x15, 0x3f, 0x8a, 0x0f, 0x4b, 0x14, 0xe7, 0xb7, 0x62, 0x7e, 0xfa, 0xd8, 0xfb, 0xb9, 0x81, 0x5e, + 0x49, 0x6f, 0x09, 0x52, 0x34, 0xaf, 0xe6, 0xad, 0x6e, 0x1d, 0xaa, 0xf3, 0xdd, 0x55, 0x2e, 0x70, + 0xba, 0x8b, 0xf3, 0x47, 0x09, 0xf3, 0xbb, 0xcc, 0xb4, 0x4a, 0xdf, 0xf8, 0x49, 0x4d, 0x2b, 0x45, + 0x42, 0x90, 0xd4, 0xb4, 0x52, 0x65, 0xf0, 0x68, 0x4f, 0x53, 0x41, 0x55, 0xc1, 0x24, 0x81, 0x15, + 0xbd, 0x82, 0x7f, 0xca, 0x4e, 0x53, 0xd5, 0x4d, 0xa5, 0xf4, 0x34, 0xcd, 0x49, 0x68, 0x92, 0x9e, + 0xa6, 0x79, 0x99, 0x48, 0x66, 0x35, 0xc6, 0x31, 0x8b, 0xdf, 0x28, 0xd2, 0xf7, 0x02, 0xa0, 0x68, + 0x39, 0x27, 0xc1, 0x7d, 0xc3, 0x40, 0xdb, 0x22, 0xb7, 0x89, 0xb3, 0x68, 0xf0, 0x41, 0xa5, 0xd7, + 0x93, 0xe2, 0xec, 0x94, 0x0e, 0x15, 0x28, 0x59, 0x60, 0x45, 0x33, 0xef, 0x27, 0xb6, 0x66, 0xf0, + 0x37, 0x0d, 0x84, 0x63, 0xdb, 0x2b, 0x52, 0xec, 0x90, 0xda, 0x90, 0x4a, 0x6b, 0x36, 0x5e, 0xa4, + 0x68, 0x01, 0xcf, 0x17, 0xba, 0x2a, 0xa1, 0xdb, 0x3f, 0x18, 0x68, 0x54, 0x93, 0x57, 0x8a, 0x4f, + 0xca, 0x7c, 0xac, 0xdc, 0x3c, 0xd7, 0xd2, 0xa9, 0x4e, 0xab, 0x15, 0x58, 0x92, 0xe0, 0x55, 0xc6, + 0x89, 0xa2, 0xc2, 0x8c, 0x88, 0x10, 0x85, 0x27, 0x94, 0x2e, 0xef, 0x14, 0xcb, 0x75, 0xcb, 0xcd, + 0x84, 0x2d, 0x9d, 0xee, 0xb8, 0x1e, 0x80, 0x9a, 0x89, 0x41, 0x9d, 0xc6, 0x27, 0xe5, 0x66, 0x48, + 0x1e, 0xaa, 0xff, 0x14, 0x5c, 0xa2, 0xac, 0xe3, 0xac, 0x71, 0x89, 0x94, 0xfe, 0xf3, 0x54, 0x47, + 0x75, 0x00, 0x0c, 0x89, 0xc1, 0x3c, 0xc4, 0x6f, 0xcb, 0x5d, 0x22, 0xb9, 0x3b, 0x2d, 0x32, 0xc7, + 0xc4, 0x9d, 0x34, 0x45, 0x2b, 0x5b, 0xc1, 0x7f, 0x66, 0xa0, 0x91, 0xc8, 0xd9, 0x4e, 0x2b, 0x85, + 0x8f, 0x2b, 0x9d, 0x67, 0x15, 0x83, 0xac, 0x34, 0xd9, 0x49, 0x95, 0x02, 0xc7, 0x9f, 0x16, 0x2b, + 0xfe, 0x6b, 0x03, 0x99, 0x91, 0xfa, 0xd3, 0xcb, 0x96, 0xdd, 0xb4, 0xe6, 0x9a, 0xe4, 0xff, 0x1f, + 0x8e, 0x8f, 0x0c, 0x34, 0xac, 0xa2, 0xbc, 0x49, 0xe7, 0x5c, 0x0e, 0x0b, 0x4f, 0x3a, 0xe7, 0xf2, + 0x38, 0x75, 0xe6, 0xad, 0x58, 0xff, 0x37, 0xf0, 0xa5, 0x54, 0xe8, 0x46, 0x4d, 0xb6, 0xd3, 0x78, + 0xe5, 0xff, 0x64, 0xa0, 0x11, 0x25, 0xc9, 0x06, 0x4f, 0xe9, 0x56, 0xba, 0x0a, 0xd9, 0x89, 0xce, + 0x2a, 0x01, 0xb4, 0xdb, 0x31, 0xb4, 0x2b, 0xf8, 0x72, 0x06, 0x9a, 0x92, 0xe0, 0xa3, 0xc1, 0xf6, + 0x57, 0x06, 0x2a, 0xcd, 0x92, 0x40, 0xc1, 0xab, 0x93, 0xce, 0x39, 0x3d, 0x8b, 0x4f, 0x3a, 0xe7, + 0x72, 0x68, 0x7b, 0xda, 0x70, 0x5b, 0x02, 0x87, 0x30, 0x78, 0xc2, 0xd4, 0xfb, 0x90, 0xed, 0x78, + 0x2a, 0x16, 0x23, 0xce, 0x51, 0x4a, 0xc6, 0x9a, 0x94, 0xce, 0xbe, 0x3c, 0x9a, 0xa4, 0xf9, 0x7a, + 0x8c, 0xe4, 0x24, 0x9e, 0x52, 0x23, 0x11, 0xc6, 0xca, 0x4f, 0x99, 0xf4, 0x2f, 0x45, 0xe1, 0x4e, + 0x91, 0x99, 0x86, 0x27, 0x94, 0x41, 0x4c, 0x29, 0x87, 0xae, 0x54, 0x2e, 0x5c, 0x1e, 0xd4, 0x9f, + 0x8d, 0xd5, 0x3f, 0x8f, 0xcf, 0xc9, 0xe2, 0x9e, 0x5e, 0x8d, 0x6f, 0x02, 0x8c, 0xed, 0x26, 0x9e, + 0x40, 0x40, 0x87, 0x5c, 0xc1, 0x7f, 0xcf, 0xe6, 0x95, 0x82, 0x62, 0x27, 0x9d, 0x57, 0x7a, 0x3e, + 0xa0, 0x74, 0x5e, 0xe5, 0x30, 0xf8, 0xb4, 0x4e, 0x5f, 0x82, 0x9d, 0xa5, 0x41, 0xc4, 0x66, 0xdc, + 0x0a, 0xfe, 0x1f, 0x03, 0xed, 0x9a, 0x25, 0x81, 0x8e, 0x37, 0x28, 0xb5, 0x15, 0x0a, 0x30, 0x1d, + 0xa5, 0xb6, 0x42, 0x11, 0x82, 0xa2, 0xf9, 0xf9, 0x18, 0x5e, 0x15, 0xdf, 0x12, 0xe1, 0xb9, 0x0e, + 0xa9, 0xd9, 0x4e, 0xad, 0x18, 0xca, 0xb8, 0xd4, 0x4a, 0xf9, 0x19, 0x8c, 0xf3, 0x0a, 0xfe, 0x96, + 0x81, 0x86, 0xd2, 0x44, 0x18, 0xa9, 0xb3, 0xa2, 0xe0, 0xd9, 0x48, 0x9d, 0x15, 0x15, 0xb3, 0xc6, + 0x2c, 0x53, 0x1c, 0x87, 0xf0, 0x81, 0x94, 0x21, 0xc7, 0x4b, 0x33, 0xd2, 0x4d, 0xc2, 0xca, 0xf9, + 0x1e, 0xf3, 0x7d, 0x23, 0x8a, 0x00, 0xdb, 0x59, 0x58, 0x6a, 0xbf, 0xd2, 0x66, 0x96, 0x53, 0x11, + 0xa4, 0x36, 0xb3, 0x82, 0x7b, 0xa0, 0x0d, 0xad, 0xb3, 0x3e, 0x4d, 0x50, 0x13, 0x92, 0x2b, 0xfb, + 0x0f, 0x0d, 0xf4, 0x72, 0x52, 0x61, 0xd8, 0x41, 0x3e, 0xc3, 0x1a, 0x7f, 0x87, 0x79, 0xac, 0x69, + 0x92, 0x03, 0x1e, 0x57, 0x5f, 0xa9, 0xa5, 0x49, 0x14, 0xd2, 0x49, 0xa0, 0x62, 0x4d, 0x68, 0x8d, + 0x0f, 0xa6, 0x16, 0xdc, 0x7e, 0xd3, 0x7d, 0x33, 0xa9, 0xea, 0x3f, 0xb2, 0xd9, 0xa0, 0x64, 0x3c, + 0x48, 0xcf, 0xe9, 0x3c, 0x1a, 0x86, 0xf4, 0x9c, 0xce, 0x25, 0x55, 0x98, 0x95, 0x18, 0xc5, 0x45, + 0x7c, 0x5e, 0x6e, 0xc3, 0x27, 0x59, 0x17, 0x9a, 0xf3, 0xf9, 0x6f, 0xd8, 0x3d, 0x92, 0x94, 0xfe, + 0x20, 0xbd, 0x47, 0xd2, 0x51, 0x30, 0xa4, 0xf7, 0x48, 0x5a, 0x66, 0x85, 0xf6, 0x40, 0xe0, 0x1e, + 0x37, 0x04, 0x00, 0x79, 0x5d, 0x79, 0x30, 0xe1, 0x23, 0x66, 0xa3, 0xcb, 0xa9, 0x0d, 0xf8, 0x58, + 0x5e, 0x58, 0x20, 0x4d, 0xbe, 0x28, 0x1d, 0xef, 0xa0, 0x06, 0x60, 0xb9, 0x13, 0x63, 0xb9, 0x8a, + 0xaf, 0x68, 0xc3, 0x08, 0x2d, 0x5e, 0x59, 0x19, 0x48, 0x60, 0x64, 0x87, 0x15, 0xfc, 0x23, 0x49, + 0x90, 0x24, 0x41, 0x76, 0xc8, 0x0f, 0x92, 0x64, 0x49, 0x17, 0xf9, 0x41, 0x12, 0x09, 0x9b, 0x42, + 0x1b, 0xa3, 0x4f, 0xa1, 0x6b, 0xb7, 0x5c, 0xa7, 0x16, 0xb9, 0xf7, 0x09, 0x80, 0x1c, 0xd4, 0xdf, + 0x8a, 0x83, 0x25, 0x92, 0x1e, 0xb4, 0x83, 0x25, 0xe5, 0x5e, 0x68, 0x07, 0x4b, 0xce, 0xa8, 0xd0, + 0xae, 0xa1, 0x08, 0x4e, 0x9a, 0x73, 0x21, 0x9f, 0x7a, 0x3f, 0x33, 0xd0, 0xde, 0x54, 0xdc, 0x4d, + 0xc6, 0x69, 0xc0, 0xe7, 0x72, 0x62, 0x6b, 0x1a, 0xb6, 0x45, 0xe9, 0xd5, 0xae, 0xea, 0x76, 0x1e, + 0xa7, 0xe3, 0xa0, 0x92, 0x5b, 0xdf, 0xcf, 0x98, 0xc5, 0x28, 0x0b, 0xa3, 0x49, 0x2d, 0x46, 0x0d, + 0xb9, 0x42, 0x6a, 0x31, 0xea, 0x28, 0x0f, 0xa6, 0x15, 0xeb, 0x7e, 0x1f, 0xdf, 0x2d, 0x16, 0x9b, + 0x13, 0xb6, 0xb8, 0xfc, 0x50, 0xdd, 0xf7, 0xd9, 0x75, 0xa4, 0x84, 0xbf, 0x20, 0xbd, 0x8e, 0x54, + 0xd3, 0x24, 0xa4, 0xd7, 0x91, 0x1a, 0x5a, 0x84, 0xf9, 0x6a, 0x0c, 0xee, 0x18, 0x9e, 0x48, 0xa5, + 0xc5, 0x40, 0x3d, 0xc8, 0x4a, 0x61, 0xbc, 0x87, 0xe4, 0xb0, 0x7c, 0x60, 0xa0, 0xc1, 0x04, 0x57, + 0x01, 0x2b, 0xe3, 0xff, 0x02, 0x03, 0x42, 0x9a, 0x2d, 0x23, 0xa1, 0x3c, 0x98, 0x93, 0xb1, 0x6e, + 0x07, 0xf0, 0x3e, 0xd9, 0x51, 0xc9, 0x38, 0x10, 0x49, 0x95, 0xbe, 0x69, 0xa0, 0xcd, 0x02, 0xa5, + 0x01, 0x1f, 0x90, 0x9a, 0x68, 0x59, 0xb2, 0x44, 0xe9, 0x60, 0x7e, 0xc1, 0x02, 0x77, 0x9f, 0x36, + 0xef, 0x2e, 0x96, 0xc3, 0x92, 0xd4, 0xed, 0xf7, 0x58, 0xe0, 0x33, 0x45, 0x7e, 0x50, 0x9b, 0x44, + 0x19, 0x6a, 0x85, 0xda, 0x24, 0xca, 0x72, 0x29, 0x0a, 0x98, 0x44, 0x09, 0xaa, 0x45, 0x52, 0xcd, + 0x6f, 0x31, 0x93, 0x28, 0x4d, 0x88, 0xc0, 0xf2, 0xa8, 0xab, 0x94, 0x55, 0x21, 0x35, 0x89, 0x54, + 0x0c, 0x8b, 0x9c, 0x10, 0xad, 0x48, 0xbd, 0xf0, 0xf1, 0x9f, 0x1a, 0xe8, 0xc5, 0x28, 0x96, 0x94, + 0x64, 0x41, 0xe0, 0x23, 0xca, 0x58, 0x90, 0x84, 0x83, 0x51, 0x3a, 0x5a, 0xb0, 0x34, 0x28, 0x79, + 0x39, 0x56, 0xf2, 0x2c, 0x3e, 0xad, 0x49, 0x37, 0xf1, 0x6a, 0x34, 0xa5, 0x58, 0x58, 0xf4, 0x91, + 0xc3, 0xf1, 0x83, 0x64, 0xd2, 0x4c, 0x8a, 0x14, 0xa1, 0x49, 0x9a, 0x91, 0xd3, 0x33, 0x34, 0x49, + 0x33, 0x0a, 0xbe, 0x85, 0xf6, 0x08, 0x05, 0x14, 0x09, 0x7f, 0x2a, 0x0b, 0x24, 0xe1, 0x46, 0x89, + 0x03, 0x91, 0x24, 0x4e, 0x68, 0x06, 0x42, 0x42, 0xdb, 0xd0, 0x0c, 0x84, 0x8c, 0x8d, 0x51, 0x64, + 0x20, 0xa2, 0x0b, 0xfb, 0x8c, 0xfe, 0xd1, 0x8e, 0xfb, 0xcf, 0xcc, 0x98, 0x56, 0x12, 0x28, 0xe4, + 0x41, 0xaf, 0x1c, 0x56, 0x87, 0x3c, 0xe8, 0x95, 0xc7, 0xd1, 0xd0, 0x07, 0xbd, 0xa2, 0xbf, 0x55, + 0xc2, 0x12, 0xd5, 0x6b, 0xed, 0xb0, 0x3e, 0xfb, 0x3b, 0x24, 0x1a, 0xa3, 0xfa, 0xdf, 0x99, 0x33, + 0xaf, 0xa3, 0x57, 0x48, 0x9d, 0xf9, 0x02, 0xcc, 0x0f, 0xa9, 0x33, 0x5f, 0x84, 0xc7, 0x61, 0xde, + 0x8b, 0x71, 0x5e, 0xc3, 0x57, 0xa5, 0xb7, 0x19, 0x19, 0xb8, 0x56, 0x90, 0x8b, 0xf5, 0x27, 0xcc, + 0x3e, 0x55, 0x31, 0x31, 0xb0, 0x2e, 0xac, 0xa2, 0x1a, 0xc8, 0xa9, 0x8e, 0xea, 0x14, 0x88, 0xcb, + 0xf2, 0x85, 0xd3, 0xd9, 0x30, 0xfe, 0xc2, 0x40, 0x63, 0xd1, 0x30, 0x4a, 0x59, 0x1a, 0xd2, 0x1b, + 0xa9, 0x7c, 0xfa, 0x48, 0xe9, 0x54, 0xa7, 0xd5, 0x00, 0xe3, 0xdd, 0x18, 0x63, 0x05, 0xcf, 0x4a, + 0xc7, 0x30, 0x0d, 0xb5, 0xc0, 0x10, 0xfe, 0x1d, 0xdb, 0x16, 0xa5, 0x84, 0x0e, 0xe9, 0xb6, 0xa8, + 0x63, 0x97, 0x48, 0xb7, 0x45, 0x2d, 0x57, 0xc4, 0x7c, 0x2b, 0x46, 0x35, 0x83, 0x5f, 0x57, 0x25, + 0x33, 0x15, 0x86, 0xf3, 0x17, 0xcc, 0x5c, 0x95, 0xf1, 0x34, 0xa4, 0xe6, 0xaa, 0x86, 0x74, 0x22, + 0x35, 0x57, 0x75, 0x5c, 0x12, 0xf3, 0x8d, 0x18, 0xcb, 0x39, 0x7c, 0x26, 0xb5, 0x3f, 0xca, 0x48, + 0x26, 0xf2, 0x0d, 0xf2, 0x97, 0x2c, 0x89, 0x49, 0xcb, 0xea, 0x90, 0x26, 0x31, 0x15, 0xa1, 0x9a, + 0x48, 0x93, 0x98, 0x0a, 0x11, 0x48, 0xb4, 0x8b, 0x2c, 0x32, 0x58, 0xe3, 0x6b, 0x44, 0x81, 0x48, + 0x20, 0x47, 0xfa, 0x5f, 0xec, 0x72, 0x2a, 0x87, 0xaf, 0x81, 0xcf, 0x6a, 0x54, 0xd6, 0xd3, 0x48, + 0x4a, 0xe7, 0xba, 0xa9, 0x5a, 0xe0, 0x70, 0x88, 0xf0, 0xc6, 0xdb, 0xa6, 0x0e, 0x31, 0x8f, 0xf4, + 0xfe, 0x07, 0xcb, 0xa7, 0xd6, 0xf3, 0x31, 0xb0, 0x6e, 0x88, 0xb4, 0x24, 0x91, 0xd2, 0xd9, 0x2e, + 0x6a, 0x76, 0x32, 0xba, 0xd1, 0x06, 0x53, 0x04, 0xec, 0x17, 0x7b, 0xd0, 0xe1, 0x04, 0xd8, 0x3c, + 0x56, 0x06, 0x9e, 0xd1, 0x28, 0x5f, 0x90, 0x0b, 0x52, 0xba, 0xb4, 0xaa, 0x36, 0x0a, 0x44, 0xf6, + 0xa3, 0xae, 0xc8, 0x10, 0x47, 0x6a, 0x81, 0xcb, 0x7c, 0xd1, 0xe8, 0x02, 0x86, 0x5a, 0xcc, 0x25, + 0x9e, 0x73, 0x9b, 0x65, 0x74, 0x48, 0x6f, 0x2a, 0xf4, 0x2c, 0x11, 0xe9, 0x4d, 0x45, 0x0e, 0x61, + 0x44, 0xeb, 0x34, 0x25, 0x99, 0x24, 0x21, 0x82, 0x46, 0xac, 0x1d, 0xe4, 0x7f, 0x29, 0x7f, 0x59, + 0x48, 0x6a, 0xa8, 0xe5, 0xfd, 0xca, 0x91, 0xd4, 0x50, 0xcb, 0xfd, 0xf1, 0x22, 0xfd, 0xc5, 0xb1, + 0x45, 0x29, 0x0b, 0xf2, 0x2b, 0x24, 0x9e, 0xff, 0x95, 0xfb, 0x73, 0x41, 0xd2, 0xfc, 0xaf, 0xa2, + 0x3f, 0x79, 0x24, 0xcd, 0xff, 0x2a, 0xfc, 0x0b, 0x45, 0xda, 0x64, 0x93, 0xd4, 0x4f, 0x06, 0xa9, + 0x60, 0xfe, 0xb7, 0x81, 0x0e, 0xa4, 0x61, 0xaa, 0xee, 0x92, 0x2e, 0xe6, 0x29, 0x9b, 0x73, 0xa7, + 0xf4, 0x5a, 0xd7, 0xf5, 0x0b, 0x38, 0x12, 0x69, 0xbc, 0xca, 0x4b, 0x26, 0x11, 0xb2, 0xfe, 0x17, + 0x80, 0x34, 0x90, 0x0b, 0xfd, 0xa2, 0x91, 0x06, 0x72, 0xb1, 0x9f, 0x1e, 0x2a, 0x04, 0x39, 0x01, + 0x55, 0x31, 0xca, 0xff, 0x6b, 0xa0, 0x71, 0x09, 0x64, 0xd5, 0x40, 0x4f, 0x17, 0xd0, 0x3a, 0x67, + 0xac, 0x67, 0x56, 0xd3, 0x44, 0x81, 0x38, 0xbf, 0x04, 0xbb, 0x72, 0xc4, 0x67, 0xaa, 0x1f, 0x7e, + 0x32, 0x66, 0xfc, 0xf0, 0x93, 0x31, 0xe3, 0x5f, 0x3e, 0x19, 0x33, 0x3e, 0xf8, 0x74, 0xec, 0xb9, + 0x1f, 0x7e, 0x3a, 0xf6, 0xdc, 0x4f, 0x3e, 0x1d, 0x7b, 0xee, 0xe1, 0x99, 0x82, 0xac, 0xb7, 0x27, + 0x09, 0xe9, 0xf4, 0x47, 0xf1, 0xe6, 0xfa, 0xe8, 0xaf, 0xb4, 0x4d, 0xfd, 0x5f, 0x00, 0x00, 0x00, + 0xff, 0xff, 0x93, 0xc0, 0x22, 0x81, 0x85, 0x6f, 0x00, 0x00, } func (this *QueryTotalStakeResponse) Equal(that interface{}) bool { @@ -11447,11 +11438,6 @@ func (m *QueryNetworkInferencesAtBlockRequest) MarshalToSizedBuffer(dAtA []byte) _ = i var l int _ = l - if m.BlockHeightLastReward != 0 { - i = encodeVarintQuery(dAtA, i, uint64(m.BlockHeightLastReward)) - i-- - dAtA[i] = 0x18 - } if m.BlockHeightLastInference != 0 { i = encodeVarintQuery(dAtA, i, uint64(m.BlockHeightLastInference)) i-- @@ -15200,9 +15186,6 @@ func (m *QueryNetworkInferencesAtBlockRequest) Size() (n int) { if m.BlockHeightLastInference != 0 { n += 1 + sovQuery(uint64(m.BlockHeightLastInference)) } - if m.BlockHeightLastReward != 0 { - n += 1 + sovQuery(uint64(m.BlockHeightLastReward)) - } return n } @@ -20901,25 +20884,6 @@ func (m *QueryNetworkInferencesAtBlockRequest) Unmarshal(dAtA []byte) error { break } } - case 3: - if wireType != 0 { - return fmt.Errorf("proto: wrong wireType = %d for field BlockHeightLastReward", wireType) - } - m.BlockHeightLastReward = 0 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - m.BlockHeightLastReward |= int64(b&0x7F) << shift - if b < 0x80 { - break - } - } default: iNdEx = preIndex skippy, err := skipQuery(dAtA[iNdEx:]) diff --git a/x/emissions/types/query.pb.gw.go b/x/emissions/types/query.pb.gw.go index d862601cd..654e33950 100644 --- a/x/emissions/types/query.pb.gw.go +++ b/x/emissions/types/query.pb.gw.go @@ -1638,17 +1638,6 @@ func request_Query_GetNetworkInferencesAtBlock_0(ctx context.Context, marshaler return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "block_height_last_inference", err) } - val, ok = pathParams["block_height_last_reward"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "block_height_last_reward") - } - - protoReq.BlockHeightLastReward, err = runtime.Int64(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "block_height_last_reward", err) - } - msg, err := client.GetNetworkInferencesAtBlock(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) return msg, metadata, err @@ -1687,17 +1676,6 @@ func local_request_Query_GetNetworkInferencesAtBlock_0(ctx context.Context, mars return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "block_height_last_inference", err) } - val, ok = pathParams["block_height_last_reward"] - if !ok { - return nil, metadata, status.Errorf(codes.InvalidArgument, "missing parameter %s", "block_height_last_reward") - } - - protoReq.BlockHeightLastReward, err = runtime.Int64(val) - - if err != nil { - return nil, metadata, status.Errorf(codes.InvalidArgument, "type mismatch, parameter: %s, error: %v", "block_height_last_reward", err) - } - msg, err := server.GetNetworkInferencesAtBlock(ctx, &protoReq) return msg, metadata, err @@ -7608,7 +7586,7 @@ var ( pattern_Query_IsReputerRegisteredInTopicId_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 1, 0, 4, 1, 5, 4}, []string{"emissions", "v2", "reputer_registered", "topic_id", "address"}, "", runtime.AssumeColonVerbOpt(false))) - pattern_Query_GetNetworkInferencesAtBlock_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5, 2, 6, 1, 0, 4, 1, 5, 7}, []string{"emissions", "v2", "network_inferences", "topic_id", "last_inference", "block_height_last_inference", "last_reward", "block_height_last_reward"}, "", runtime.AssumeColonVerbOpt(false))) + pattern_Query_GetNetworkInferencesAtBlock_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3, 2, 4, 1, 0, 4, 1, 5, 5}, []string{"emissions", "v2", "network_inferences", "topic_id", "last_inference", "block_height_last_inference"}, "", runtime.AssumeColonVerbOpt(false))) pattern_Query_GetLatestNetworkInference_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2, 1, 0, 4, 1, 5, 3}, []string{"emissions", "v2", "network_inferences", "topic_id"}, "", runtime.AssumeColonVerbOpt(false))) diff --git a/x/mint/api/v1beta1/query.pulsar.go b/x/mint/api/v1beta1/query.pulsar.go index 508c39dc3..7d44028a8 100644 --- a/x/mint/api/v1beta1/query.pulsar.go +++ b/x/mint/api/v1beta1/query.pulsar.go @@ -1585,6 +1585,2371 @@ func (x *fastReflection_QueryInflationResponse) ProtoMethods() *protoiface.Metho } } +var ( + md_QueryEmissionInfoRequest protoreflect.MessageDescriptor +) + +func init() { + file_mint_v1beta1_query_proto_init() + md_QueryEmissionInfoRequest = File_mint_v1beta1_query_proto.Messages().ByName("QueryEmissionInfoRequest") +} + +var _ protoreflect.Message = (*fastReflection_QueryEmissionInfoRequest)(nil) + +type fastReflection_QueryEmissionInfoRequest QueryEmissionInfoRequest + +func (x *QueryEmissionInfoRequest) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryEmissionInfoRequest)(x) +} + +func (x *QueryEmissionInfoRequest) slowProtoReflect() protoreflect.Message { + mi := &file_mint_v1beta1_query_proto_msgTypes[4] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +var _fastReflection_QueryEmissionInfoRequest_messageType fastReflection_QueryEmissionInfoRequest_messageType +var _ protoreflect.MessageType = fastReflection_QueryEmissionInfoRequest_messageType{} + +type fastReflection_QueryEmissionInfoRequest_messageType struct{} + +func (x fastReflection_QueryEmissionInfoRequest_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryEmissionInfoRequest)(nil) +} +func (x fastReflection_QueryEmissionInfoRequest_messageType) New() protoreflect.Message { + return new(fastReflection_QueryEmissionInfoRequest) +} +func (x fastReflection_QueryEmissionInfoRequest_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryEmissionInfoRequest +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryEmissionInfoRequest) Descriptor() protoreflect.MessageDescriptor { + return md_QueryEmissionInfoRequest +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryEmissionInfoRequest) Type() protoreflect.MessageType { + return _fastReflection_QueryEmissionInfoRequest_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryEmissionInfoRequest) New() protoreflect.Message { + return new(fastReflection_QueryEmissionInfoRequest) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryEmissionInfoRequest) Interface() protoreflect.ProtoMessage { + return (*QueryEmissionInfoRequest)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryEmissionInfoRequest) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryEmissionInfoRequest) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: mint.v1beta1.QueryEmissionInfoRequest")) + } + panic(fmt.Errorf("message mint.v1beta1.QueryEmissionInfoRequest does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryEmissionInfoRequest) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: mint.v1beta1.QueryEmissionInfoRequest")) + } + panic(fmt.Errorf("message mint.v1beta1.QueryEmissionInfoRequest does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryEmissionInfoRequest) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: mint.v1beta1.QueryEmissionInfoRequest")) + } + panic(fmt.Errorf("message mint.v1beta1.QueryEmissionInfoRequest does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryEmissionInfoRequest) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: mint.v1beta1.QueryEmissionInfoRequest")) + } + panic(fmt.Errorf("message mint.v1beta1.QueryEmissionInfoRequest does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryEmissionInfoRequest) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: mint.v1beta1.QueryEmissionInfoRequest")) + } + panic(fmt.Errorf("message mint.v1beta1.QueryEmissionInfoRequest does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryEmissionInfoRequest) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: mint.v1beta1.QueryEmissionInfoRequest")) + } + panic(fmt.Errorf("message mint.v1beta1.QueryEmissionInfoRequest does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryEmissionInfoRequest) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in mint.v1beta1.QueryEmissionInfoRequest", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryEmissionInfoRequest) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryEmissionInfoRequest) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryEmissionInfoRequest) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryEmissionInfoRequest) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryEmissionInfoRequest) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryEmissionInfoRequest) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryEmissionInfoRequest) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryEmissionInfoRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryEmissionInfoRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + +var ( + md_QueryEmissionInfoResponse protoreflect.MessageDescriptor + fd_QueryEmissionInfoResponse_params protoreflect.FieldDescriptor + fd_QueryEmissionInfoResponse_ecosystem_balance protoreflect.FieldDescriptor + fd_QueryEmissionInfoResponse_previous_block_emission protoreflect.FieldDescriptor + fd_QueryEmissionInfoResponse_ecosystem_mint_supply_remaining protoreflect.FieldDescriptor + fd_QueryEmissionInfoResponse_blocks_per_month protoreflect.FieldDescriptor + fd_QueryEmissionInfoResponse_block_height_target_e_i_last_calculated protoreflect.FieldDescriptor + fd_QueryEmissionInfoResponse_block_height_target_e_i_next_calculated protoreflect.FieldDescriptor + fd_QueryEmissionInfoResponse_network_staked_tokens protoreflect.FieldDescriptor + fd_QueryEmissionInfoResponse_locked_vesting_tokens_total protoreflect.FieldDescriptor + fd_QueryEmissionInfoResponse_locked_vesting_tokens_investors_preseed protoreflect.FieldDescriptor + fd_QueryEmissionInfoResponse_locked_vesting_tokens_investors_seed protoreflect.FieldDescriptor + fd_QueryEmissionInfoResponse_locked_vesting_tokens_team protoreflect.FieldDescriptor + fd_QueryEmissionInfoResponse_ecosystem_locked protoreflect.FieldDescriptor + fd_QueryEmissionInfoResponse_circulating_supply protoreflect.FieldDescriptor + fd_QueryEmissionInfoResponse_max_supply protoreflect.FieldDescriptor + fd_QueryEmissionInfoResponse_target_emission_rate_per_unit_staked_token protoreflect.FieldDescriptor + fd_QueryEmissionInfoResponse_reputers_percent protoreflect.FieldDescriptor + fd_QueryEmissionInfoResponse_validators_percent protoreflect.FieldDescriptor + fd_QueryEmissionInfoResponse_maximum_monthly_emission_per_unit_staked_token protoreflect.FieldDescriptor + fd_QueryEmissionInfoResponse_target_reward_emission_per_unit_staked_token protoreflect.FieldDescriptor + fd_QueryEmissionInfoResponse_emission_per_unit_staked_token protoreflect.FieldDescriptor + fd_QueryEmissionInfoResponse_emission_per_month protoreflect.FieldDescriptor + fd_QueryEmissionInfoResponse_block_emission protoreflect.FieldDescriptor + fd_QueryEmissionInfoResponse_validator_cut protoreflect.FieldDescriptor + fd_QueryEmissionInfoResponse_allora_rewards_cut protoreflect.FieldDescriptor + fd_QueryEmissionInfoResponse_previous_reward_emission_per_unit_staked_token protoreflect.FieldDescriptor +) + +func init() { + file_mint_v1beta1_query_proto_init() + md_QueryEmissionInfoResponse = File_mint_v1beta1_query_proto.Messages().ByName("QueryEmissionInfoResponse") + fd_QueryEmissionInfoResponse_params = md_QueryEmissionInfoResponse.Fields().ByName("params") + fd_QueryEmissionInfoResponse_ecosystem_balance = md_QueryEmissionInfoResponse.Fields().ByName("ecosystem_balance") + fd_QueryEmissionInfoResponse_previous_block_emission = md_QueryEmissionInfoResponse.Fields().ByName("previous_block_emission") + fd_QueryEmissionInfoResponse_ecosystem_mint_supply_remaining = md_QueryEmissionInfoResponse.Fields().ByName("ecosystem_mint_supply_remaining") + fd_QueryEmissionInfoResponse_blocks_per_month = md_QueryEmissionInfoResponse.Fields().ByName("blocks_per_month") + fd_QueryEmissionInfoResponse_block_height_target_e_i_last_calculated = md_QueryEmissionInfoResponse.Fields().ByName("block_height_target_e_i_last_calculated") + fd_QueryEmissionInfoResponse_block_height_target_e_i_next_calculated = md_QueryEmissionInfoResponse.Fields().ByName("block_height_target_e_i_next_calculated") + fd_QueryEmissionInfoResponse_network_staked_tokens = md_QueryEmissionInfoResponse.Fields().ByName("network_staked_tokens") + fd_QueryEmissionInfoResponse_locked_vesting_tokens_total = md_QueryEmissionInfoResponse.Fields().ByName("locked_vesting_tokens_total") + fd_QueryEmissionInfoResponse_locked_vesting_tokens_investors_preseed = md_QueryEmissionInfoResponse.Fields().ByName("locked_vesting_tokens_investors_preseed") + fd_QueryEmissionInfoResponse_locked_vesting_tokens_investors_seed = md_QueryEmissionInfoResponse.Fields().ByName("locked_vesting_tokens_investors_seed") + fd_QueryEmissionInfoResponse_locked_vesting_tokens_team = md_QueryEmissionInfoResponse.Fields().ByName("locked_vesting_tokens_team") + fd_QueryEmissionInfoResponse_ecosystem_locked = md_QueryEmissionInfoResponse.Fields().ByName("ecosystem_locked") + fd_QueryEmissionInfoResponse_circulating_supply = md_QueryEmissionInfoResponse.Fields().ByName("circulating_supply") + fd_QueryEmissionInfoResponse_max_supply = md_QueryEmissionInfoResponse.Fields().ByName("max_supply") + fd_QueryEmissionInfoResponse_target_emission_rate_per_unit_staked_token = md_QueryEmissionInfoResponse.Fields().ByName("target_emission_rate_per_unit_staked_token") + fd_QueryEmissionInfoResponse_reputers_percent = md_QueryEmissionInfoResponse.Fields().ByName("reputers_percent") + fd_QueryEmissionInfoResponse_validators_percent = md_QueryEmissionInfoResponse.Fields().ByName("validators_percent") + fd_QueryEmissionInfoResponse_maximum_monthly_emission_per_unit_staked_token = md_QueryEmissionInfoResponse.Fields().ByName("maximum_monthly_emission_per_unit_staked_token") + fd_QueryEmissionInfoResponse_target_reward_emission_per_unit_staked_token = md_QueryEmissionInfoResponse.Fields().ByName("target_reward_emission_per_unit_staked_token") + fd_QueryEmissionInfoResponse_emission_per_unit_staked_token = md_QueryEmissionInfoResponse.Fields().ByName("emission_per_unit_staked_token") + fd_QueryEmissionInfoResponse_emission_per_month = md_QueryEmissionInfoResponse.Fields().ByName("emission_per_month") + fd_QueryEmissionInfoResponse_block_emission = md_QueryEmissionInfoResponse.Fields().ByName("block_emission") + fd_QueryEmissionInfoResponse_validator_cut = md_QueryEmissionInfoResponse.Fields().ByName("validator_cut") + fd_QueryEmissionInfoResponse_allora_rewards_cut = md_QueryEmissionInfoResponse.Fields().ByName("allora_rewards_cut") + fd_QueryEmissionInfoResponse_previous_reward_emission_per_unit_staked_token = md_QueryEmissionInfoResponse.Fields().ByName("previous_reward_emission_per_unit_staked_token") +} + +var _ protoreflect.Message = (*fastReflection_QueryEmissionInfoResponse)(nil) + +type fastReflection_QueryEmissionInfoResponse QueryEmissionInfoResponse + +func (x *QueryEmissionInfoResponse) ProtoReflect() protoreflect.Message { + return (*fastReflection_QueryEmissionInfoResponse)(x) +} + +func (x *QueryEmissionInfoResponse) slowProtoReflect() protoreflect.Message { + mi := &file_mint_v1beta1_query_proto_msgTypes[5] + if protoimpl.UnsafeEnabled && x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +var _fastReflection_QueryEmissionInfoResponse_messageType fastReflection_QueryEmissionInfoResponse_messageType +var _ protoreflect.MessageType = fastReflection_QueryEmissionInfoResponse_messageType{} + +type fastReflection_QueryEmissionInfoResponse_messageType struct{} + +func (x fastReflection_QueryEmissionInfoResponse_messageType) Zero() protoreflect.Message { + return (*fastReflection_QueryEmissionInfoResponse)(nil) +} +func (x fastReflection_QueryEmissionInfoResponse_messageType) New() protoreflect.Message { + return new(fastReflection_QueryEmissionInfoResponse) +} +func (x fastReflection_QueryEmissionInfoResponse_messageType) Descriptor() protoreflect.MessageDescriptor { + return md_QueryEmissionInfoResponse +} + +// Descriptor returns message descriptor, which contains only the protobuf +// type information for the message. +func (x *fastReflection_QueryEmissionInfoResponse) Descriptor() protoreflect.MessageDescriptor { + return md_QueryEmissionInfoResponse +} + +// Type returns the message type, which encapsulates both Go and protobuf +// type information. If the Go type information is not needed, +// it is recommended that the message descriptor be used instead. +func (x *fastReflection_QueryEmissionInfoResponse) Type() protoreflect.MessageType { + return _fastReflection_QueryEmissionInfoResponse_messageType +} + +// New returns a newly allocated and mutable empty message. +func (x *fastReflection_QueryEmissionInfoResponse) New() protoreflect.Message { + return new(fastReflection_QueryEmissionInfoResponse) +} + +// Interface unwraps the message reflection interface and +// returns the underlying ProtoMessage interface. +func (x *fastReflection_QueryEmissionInfoResponse) Interface() protoreflect.ProtoMessage { + return (*QueryEmissionInfoResponse)(x) +} + +// Range iterates over every populated field in an undefined order, +// calling f for each field descriptor and value encountered. +// Range returns immediately if f returns false. +// While iterating, mutating operations may only be performed +// on the current field descriptor. +func (x *fastReflection_QueryEmissionInfoResponse) Range(f func(protoreflect.FieldDescriptor, protoreflect.Value) bool) { + if x.Params != nil { + value := protoreflect.ValueOfMessage(x.Params.ProtoReflect()) + if !f(fd_QueryEmissionInfoResponse_params, value) { + return + } + } + if x.EcosystemBalance != "" { + value := protoreflect.ValueOfString(x.EcosystemBalance) + if !f(fd_QueryEmissionInfoResponse_ecosystem_balance, value) { + return + } + } + if x.PreviousBlockEmission != "" { + value := protoreflect.ValueOfString(x.PreviousBlockEmission) + if !f(fd_QueryEmissionInfoResponse_previous_block_emission, value) { + return + } + } + if x.EcosystemMintSupplyRemaining != "" { + value := protoreflect.ValueOfString(x.EcosystemMintSupplyRemaining) + if !f(fd_QueryEmissionInfoResponse_ecosystem_mint_supply_remaining, value) { + return + } + } + if x.BlocksPerMonth != uint64(0) { + value := protoreflect.ValueOfUint64(x.BlocksPerMonth) + if !f(fd_QueryEmissionInfoResponse_blocks_per_month, value) { + return + } + } + if x.BlockHeightTargetEILastCalculated != uint64(0) { + value := protoreflect.ValueOfUint64(x.BlockHeightTargetEILastCalculated) + if !f(fd_QueryEmissionInfoResponse_block_height_target_e_i_last_calculated, value) { + return + } + } + if x.BlockHeightTargetEINextCalculated != uint64(0) { + value := protoreflect.ValueOfUint64(x.BlockHeightTargetEINextCalculated) + if !f(fd_QueryEmissionInfoResponse_block_height_target_e_i_next_calculated, value) { + return + } + } + if x.NetworkStakedTokens != "" { + value := protoreflect.ValueOfString(x.NetworkStakedTokens) + if !f(fd_QueryEmissionInfoResponse_network_staked_tokens, value) { + return + } + } + if x.LockedVestingTokensTotal != "" { + value := protoreflect.ValueOfString(x.LockedVestingTokensTotal) + if !f(fd_QueryEmissionInfoResponse_locked_vesting_tokens_total, value) { + return + } + } + if x.LockedVestingTokensInvestorsPreseed != "" { + value := protoreflect.ValueOfString(x.LockedVestingTokensInvestorsPreseed) + if !f(fd_QueryEmissionInfoResponse_locked_vesting_tokens_investors_preseed, value) { + return + } + } + if x.LockedVestingTokensInvestorsSeed != "" { + value := protoreflect.ValueOfString(x.LockedVestingTokensInvestorsSeed) + if !f(fd_QueryEmissionInfoResponse_locked_vesting_tokens_investors_seed, value) { + return + } + } + if x.LockedVestingTokensTeam != "" { + value := protoreflect.ValueOfString(x.LockedVestingTokensTeam) + if !f(fd_QueryEmissionInfoResponse_locked_vesting_tokens_team, value) { + return + } + } + if x.EcosystemLocked != "" { + value := protoreflect.ValueOfString(x.EcosystemLocked) + if !f(fd_QueryEmissionInfoResponse_ecosystem_locked, value) { + return + } + } + if x.CirculatingSupply != "" { + value := protoreflect.ValueOfString(x.CirculatingSupply) + if !f(fd_QueryEmissionInfoResponse_circulating_supply, value) { + return + } + } + if x.MaxSupply != "" { + value := protoreflect.ValueOfString(x.MaxSupply) + if !f(fd_QueryEmissionInfoResponse_max_supply, value) { + return + } + } + if x.TargetEmissionRatePerUnitStakedToken != "" { + value := protoreflect.ValueOfString(x.TargetEmissionRatePerUnitStakedToken) + if !f(fd_QueryEmissionInfoResponse_target_emission_rate_per_unit_staked_token, value) { + return + } + } + if x.ReputersPercent != "" { + value := protoreflect.ValueOfString(x.ReputersPercent) + if !f(fd_QueryEmissionInfoResponse_reputers_percent, value) { + return + } + } + if x.ValidatorsPercent != "" { + value := protoreflect.ValueOfString(x.ValidatorsPercent) + if !f(fd_QueryEmissionInfoResponse_validators_percent, value) { + return + } + } + if x.MaximumMonthlyEmissionPerUnitStakedToken != "" { + value := protoreflect.ValueOfString(x.MaximumMonthlyEmissionPerUnitStakedToken) + if !f(fd_QueryEmissionInfoResponse_maximum_monthly_emission_per_unit_staked_token, value) { + return + } + } + if x.TargetRewardEmissionPerUnitStakedToken != "" { + value := protoreflect.ValueOfString(x.TargetRewardEmissionPerUnitStakedToken) + if !f(fd_QueryEmissionInfoResponse_target_reward_emission_per_unit_staked_token, value) { + return + } + } + if x.EmissionPerUnitStakedToken != "" { + value := protoreflect.ValueOfString(x.EmissionPerUnitStakedToken) + if !f(fd_QueryEmissionInfoResponse_emission_per_unit_staked_token, value) { + return + } + } + if x.EmissionPerMonth != "" { + value := protoreflect.ValueOfString(x.EmissionPerMonth) + if !f(fd_QueryEmissionInfoResponse_emission_per_month, value) { + return + } + } + if x.BlockEmission != "" { + value := protoreflect.ValueOfString(x.BlockEmission) + if !f(fd_QueryEmissionInfoResponse_block_emission, value) { + return + } + } + if x.ValidatorCut != "" { + value := protoreflect.ValueOfString(x.ValidatorCut) + if !f(fd_QueryEmissionInfoResponse_validator_cut, value) { + return + } + } + if x.AlloraRewardsCut != "" { + value := protoreflect.ValueOfString(x.AlloraRewardsCut) + if !f(fd_QueryEmissionInfoResponse_allora_rewards_cut, value) { + return + } + } + if x.PreviousRewardEmissionPerUnitStakedToken != "" { + value := protoreflect.ValueOfString(x.PreviousRewardEmissionPerUnitStakedToken) + if !f(fd_QueryEmissionInfoResponse_previous_reward_emission_per_unit_staked_token, value) { + return + } + } +} + +// Has reports whether a field is populated. +// +// Some fields have the property of nullability where it is possible to +// distinguish between the default value of a field and whether the field +// was explicitly populated with the default value. Singular message fields, +// member fields of a oneof, and proto2 scalar fields are nullable. Such +// fields are populated only if explicitly set. +// +// In other cases (aside from the nullable cases above), +// a proto3 scalar field is populated if it contains a non-zero value, and +// a repeated field is populated if it is non-empty. +func (x *fastReflection_QueryEmissionInfoResponse) Has(fd protoreflect.FieldDescriptor) bool { + switch fd.FullName() { + case "mint.v1beta1.QueryEmissionInfoResponse.params": + return x.Params != nil + case "mint.v1beta1.QueryEmissionInfoResponse.ecosystem_balance": + return x.EcosystemBalance != "" + case "mint.v1beta1.QueryEmissionInfoResponse.previous_block_emission": + return x.PreviousBlockEmission != "" + case "mint.v1beta1.QueryEmissionInfoResponse.ecosystem_mint_supply_remaining": + return x.EcosystemMintSupplyRemaining != "" + case "mint.v1beta1.QueryEmissionInfoResponse.blocks_per_month": + return x.BlocksPerMonth != uint64(0) + case "mint.v1beta1.QueryEmissionInfoResponse.block_height_target_e_i_last_calculated": + return x.BlockHeightTargetEILastCalculated != uint64(0) + case "mint.v1beta1.QueryEmissionInfoResponse.block_height_target_e_i_next_calculated": + return x.BlockHeightTargetEINextCalculated != uint64(0) + case "mint.v1beta1.QueryEmissionInfoResponse.network_staked_tokens": + return x.NetworkStakedTokens != "" + case "mint.v1beta1.QueryEmissionInfoResponse.locked_vesting_tokens_total": + return x.LockedVestingTokensTotal != "" + case "mint.v1beta1.QueryEmissionInfoResponse.locked_vesting_tokens_investors_preseed": + return x.LockedVestingTokensInvestorsPreseed != "" + case "mint.v1beta1.QueryEmissionInfoResponse.locked_vesting_tokens_investors_seed": + return x.LockedVestingTokensInvestorsSeed != "" + case "mint.v1beta1.QueryEmissionInfoResponse.locked_vesting_tokens_team": + return x.LockedVestingTokensTeam != "" + case "mint.v1beta1.QueryEmissionInfoResponse.ecosystem_locked": + return x.EcosystemLocked != "" + case "mint.v1beta1.QueryEmissionInfoResponse.circulating_supply": + return x.CirculatingSupply != "" + case "mint.v1beta1.QueryEmissionInfoResponse.max_supply": + return x.MaxSupply != "" + case "mint.v1beta1.QueryEmissionInfoResponse.target_emission_rate_per_unit_staked_token": + return x.TargetEmissionRatePerUnitStakedToken != "" + case "mint.v1beta1.QueryEmissionInfoResponse.reputers_percent": + return x.ReputersPercent != "" + case "mint.v1beta1.QueryEmissionInfoResponse.validators_percent": + return x.ValidatorsPercent != "" + case "mint.v1beta1.QueryEmissionInfoResponse.maximum_monthly_emission_per_unit_staked_token": + return x.MaximumMonthlyEmissionPerUnitStakedToken != "" + case "mint.v1beta1.QueryEmissionInfoResponse.target_reward_emission_per_unit_staked_token": + return x.TargetRewardEmissionPerUnitStakedToken != "" + case "mint.v1beta1.QueryEmissionInfoResponse.emission_per_unit_staked_token": + return x.EmissionPerUnitStakedToken != "" + case "mint.v1beta1.QueryEmissionInfoResponse.emission_per_month": + return x.EmissionPerMonth != "" + case "mint.v1beta1.QueryEmissionInfoResponse.block_emission": + return x.BlockEmission != "" + case "mint.v1beta1.QueryEmissionInfoResponse.validator_cut": + return x.ValidatorCut != "" + case "mint.v1beta1.QueryEmissionInfoResponse.allora_rewards_cut": + return x.AlloraRewardsCut != "" + case "mint.v1beta1.QueryEmissionInfoResponse.previous_reward_emission_per_unit_staked_token": + return x.PreviousRewardEmissionPerUnitStakedToken != "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: mint.v1beta1.QueryEmissionInfoResponse")) + } + panic(fmt.Errorf("message mint.v1beta1.QueryEmissionInfoResponse does not contain field %s", fd.FullName())) + } +} + +// Clear clears the field such that a subsequent Has call reports false. +// +// Clearing an extension field clears both the extension type and value +// associated with the given field number. +// +// Clear is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryEmissionInfoResponse) Clear(fd protoreflect.FieldDescriptor) { + switch fd.FullName() { + case "mint.v1beta1.QueryEmissionInfoResponse.params": + x.Params = nil + case "mint.v1beta1.QueryEmissionInfoResponse.ecosystem_balance": + x.EcosystemBalance = "" + case "mint.v1beta1.QueryEmissionInfoResponse.previous_block_emission": + x.PreviousBlockEmission = "" + case "mint.v1beta1.QueryEmissionInfoResponse.ecosystem_mint_supply_remaining": + x.EcosystemMintSupplyRemaining = "" + case "mint.v1beta1.QueryEmissionInfoResponse.blocks_per_month": + x.BlocksPerMonth = uint64(0) + case "mint.v1beta1.QueryEmissionInfoResponse.block_height_target_e_i_last_calculated": + x.BlockHeightTargetEILastCalculated = uint64(0) + case "mint.v1beta1.QueryEmissionInfoResponse.block_height_target_e_i_next_calculated": + x.BlockHeightTargetEINextCalculated = uint64(0) + case "mint.v1beta1.QueryEmissionInfoResponse.network_staked_tokens": + x.NetworkStakedTokens = "" + case "mint.v1beta1.QueryEmissionInfoResponse.locked_vesting_tokens_total": + x.LockedVestingTokensTotal = "" + case "mint.v1beta1.QueryEmissionInfoResponse.locked_vesting_tokens_investors_preseed": + x.LockedVestingTokensInvestorsPreseed = "" + case "mint.v1beta1.QueryEmissionInfoResponse.locked_vesting_tokens_investors_seed": + x.LockedVestingTokensInvestorsSeed = "" + case "mint.v1beta1.QueryEmissionInfoResponse.locked_vesting_tokens_team": + x.LockedVestingTokensTeam = "" + case "mint.v1beta1.QueryEmissionInfoResponse.ecosystem_locked": + x.EcosystemLocked = "" + case "mint.v1beta1.QueryEmissionInfoResponse.circulating_supply": + x.CirculatingSupply = "" + case "mint.v1beta1.QueryEmissionInfoResponse.max_supply": + x.MaxSupply = "" + case "mint.v1beta1.QueryEmissionInfoResponse.target_emission_rate_per_unit_staked_token": + x.TargetEmissionRatePerUnitStakedToken = "" + case "mint.v1beta1.QueryEmissionInfoResponse.reputers_percent": + x.ReputersPercent = "" + case "mint.v1beta1.QueryEmissionInfoResponse.validators_percent": + x.ValidatorsPercent = "" + case "mint.v1beta1.QueryEmissionInfoResponse.maximum_monthly_emission_per_unit_staked_token": + x.MaximumMonthlyEmissionPerUnitStakedToken = "" + case "mint.v1beta1.QueryEmissionInfoResponse.target_reward_emission_per_unit_staked_token": + x.TargetRewardEmissionPerUnitStakedToken = "" + case "mint.v1beta1.QueryEmissionInfoResponse.emission_per_unit_staked_token": + x.EmissionPerUnitStakedToken = "" + case "mint.v1beta1.QueryEmissionInfoResponse.emission_per_month": + x.EmissionPerMonth = "" + case "mint.v1beta1.QueryEmissionInfoResponse.block_emission": + x.BlockEmission = "" + case "mint.v1beta1.QueryEmissionInfoResponse.validator_cut": + x.ValidatorCut = "" + case "mint.v1beta1.QueryEmissionInfoResponse.allora_rewards_cut": + x.AlloraRewardsCut = "" + case "mint.v1beta1.QueryEmissionInfoResponse.previous_reward_emission_per_unit_staked_token": + x.PreviousRewardEmissionPerUnitStakedToken = "" + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: mint.v1beta1.QueryEmissionInfoResponse")) + } + panic(fmt.Errorf("message mint.v1beta1.QueryEmissionInfoResponse does not contain field %s", fd.FullName())) + } +} + +// Get retrieves the value for a field. +// +// For unpopulated scalars, it returns the default value, where +// the default value of a bytes scalar is guaranteed to be a copy. +// For unpopulated composite types, it returns an empty, read-only view +// of the value; to obtain a mutable reference, use Mutable. +func (x *fastReflection_QueryEmissionInfoResponse) Get(descriptor protoreflect.FieldDescriptor) protoreflect.Value { + switch descriptor.FullName() { + case "mint.v1beta1.QueryEmissionInfoResponse.params": + value := x.Params + return protoreflect.ValueOfMessage(value.ProtoReflect()) + case "mint.v1beta1.QueryEmissionInfoResponse.ecosystem_balance": + value := x.EcosystemBalance + return protoreflect.ValueOfString(value) + case "mint.v1beta1.QueryEmissionInfoResponse.previous_block_emission": + value := x.PreviousBlockEmission + return protoreflect.ValueOfString(value) + case "mint.v1beta1.QueryEmissionInfoResponse.ecosystem_mint_supply_remaining": + value := x.EcosystemMintSupplyRemaining + return protoreflect.ValueOfString(value) + case "mint.v1beta1.QueryEmissionInfoResponse.blocks_per_month": + value := x.BlocksPerMonth + return protoreflect.ValueOfUint64(value) + case "mint.v1beta1.QueryEmissionInfoResponse.block_height_target_e_i_last_calculated": + value := x.BlockHeightTargetEILastCalculated + return protoreflect.ValueOfUint64(value) + case "mint.v1beta1.QueryEmissionInfoResponse.block_height_target_e_i_next_calculated": + value := x.BlockHeightTargetEINextCalculated + return protoreflect.ValueOfUint64(value) + case "mint.v1beta1.QueryEmissionInfoResponse.network_staked_tokens": + value := x.NetworkStakedTokens + return protoreflect.ValueOfString(value) + case "mint.v1beta1.QueryEmissionInfoResponse.locked_vesting_tokens_total": + value := x.LockedVestingTokensTotal + return protoreflect.ValueOfString(value) + case "mint.v1beta1.QueryEmissionInfoResponse.locked_vesting_tokens_investors_preseed": + value := x.LockedVestingTokensInvestorsPreseed + return protoreflect.ValueOfString(value) + case "mint.v1beta1.QueryEmissionInfoResponse.locked_vesting_tokens_investors_seed": + value := x.LockedVestingTokensInvestorsSeed + return protoreflect.ValueOfString(value) + case "mint.v1beta1.QueryEmissionInfoResponse.locked_vesting_tokens_team": + value := x.LockedVestingTokensTeam + return protoreflect.ValueOfString(value) + case "mint.v1beta1.QueryEmissionInfoResponse.ecosystem_locked": + value := x.EcosystemLocked + return protoreflect.ValueOfString(value) + case "mint.v1beta1.QueryEmissionInfoResponse.circulating_supply": + value := x.CirculatingSupply + return protoreflect.ValueOfString(value) + case "mint.v1beta1.QueryEmissionInfoResponse.max_supply": + value := x.MaxSupply + return protoreflect.ValueOfString(value) + case "mint.v1beta1.QueryEmissionInfoResponse.target_emission_rate_per_unit_staked_token": + value := x.TargetEmissionRatePerUnitStakedToken + return protoreflect.ValueOfString(value) + case "mint.v1beta1.QueryEmissionInfoResponse.reputers_percent": + value := x.ReputersPercent + return protoreflect.ValueOfString(value) + case "mint.v1beta1.QueryEmissionInfoResponse.validators_percent": + value := x.ValidatorsPercent + return protoreflect.ValueOfString(value) + case "mint.v1beta1.QueryEmissionInfoResponse.maximum_monthly_emission_per_unit_staked_token": + value := x.MaximumMonthlyEmissionPerUnitStakedToken + return protoreflect.ValueOfString(value) + case "mint.v1beta1.QueryEmissionInfoResponse.target_reward_emission_per_unit_staked_token": + value := x.TargetRewardEmissionPerUnitStakedToken + return protoreflect.ValueOfString(value) + case "mint.v1beta1.QueryEmissionInfoResponse.emission_per_unit_staked_token": + value := x.EmissionPerUnitStakedToken + return protoreflect.ValueOfString(value) + case "mint.v1beta1.QueryEmissionInfoResponse.emission_per_month": + value := x.EmissionPerMonth + return protoreflect.ValueOfString(value) + case "mint.v1beta1.QueryEmissionInfoResponse.block_emission": + value := x.BlockEmission + return protoreflect.ValueOfString(value) + case "mint.v1beta1.QueryEmissionInfoResponse.validator_cut": + value := x.ValidatorCut + return protoreflect.ValueOfString(value) + case "mint.v1beta1.QueryEmissionInfoResponse.allora_rewards_cut": + value := x.AlloraRewardsCut + return protoreflect.ValueOfString(value) + case "mint.v1beta1.QueryEmissionInfoResponse.previous_reward_emission_per_unit_staked_token": + value := x.PreviousRewardEmissionPerUnitStakedToken + return protoreflect.ValueOfString(value) + default: + if descriptor.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: mint.v1beta1.QueryEmissionInfoResponse")) + } + panic(fmt.Errorf("message mint.v1beta1.QueryEmissionInfoResponse does not contain field %s", descriptor.FullName())) + } +} + +// Set stores the value for a field. +// +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType. +// When setting a composite type, it is unspecified whether the stored value +// aliases the source's memory in any way. If the composite value is an +// empty, read-only value, then it panics. +// +// Set is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryEmissionInfoResponse) Set(fd protoreflect.FieldDescriptor, value protoreflect.Value) { + switch fd.FullName() { + case "mint.v1beta1.QueryEmissionInfoResponse.params": + x.Params = value.Message().Interface().(*Params) + case "mint.v1beta1.QueryEmissionInfoResponse.ecosystem_balance": + x.EcosystemBalance = value.Interface().(string) + case "mint.v1beta1.QueryEmissionInfoResponse.previous_block_emission": + x.PreviousBlockEmission = value.Interface().(string) + case "mint.v1beta1.QueryEmissionInfoResponse.ecosystem_mint_supply_remaining": + x.EcosystemMintSupplyRemaining = value.Interface().(string) + case "mint.v1beta1.QueryEmissionInfoResponse.blocks_per_month": + x.BlocksPerMonth = value.Uint() + case "mint.v1beta1.QueryEmissionInfoResponse.block_height_target_e_i_last_calculated": + x.BlockHeightTargetEILastCalculated = value.Uint() + case "mint.v1beta1.QueryEmissionInfoResponse.block_height_target_e_i_next_calculated": + x.BlockHeightTargetEINextCalculated = value.Uint() + case "mint.v1beta1.QueryEmissionInfoResponse.network_staked_tokens": + x.NetworkStakedTokens = value.Interface().(string) + case "mint.v1beta1.QueryEmissionInfoResponse.locked_vesting_tokens_total": + x.LockedVestingTokensTotal = value.Interface().(string) + case "mint.v1beta1.QueryEmissionInfoResponse.locked_vesting_tokens_investors_preseed": + x.LockedVestingTokensInvestorsPreseed = value.Interface().(string) + case "mint.v1beta1.QueryEmissionInfoResponse.locked_vesting_tokens_investors_seed": + x.LockedVestingTokensInvestorsSeed = value.Interface().(string) + case "mint.v1beta1.QueryEmissionInfoResponse.locked_vesting_tokens_team": + x.LockedVestingTokensTeam = value.Interface().(string) + case "mint.v1beta1.QueryEmissionInfoResponse.ecosystem_locked": + x.EcosystemLocked = value.Interface().(string) + case "mint.v1beta1.QueryEmissionInfoResponse.circulating_supply": + x.CirculatingSupply = value.Interface().(string) + case "mint.v1beta1.QueryEmissionInfoResponse.max_supply": + x.MaxSupply = value.Interface().(string) + case "mint.v1beta1.QueryEmissionInfoResponse.target_emission_rate_per_unit_staked_token": + x.TargetEmissionRatePerUnitStakedToken = value.Interface().(string) + case "mint.v1beta1.QueryEmissionInfoResponse.reputers_percent": + x.ReputersPercent = value.Interface().(string) + case "mint.v1beta1.QueryEmissionInfoResponse.validators_percent": + x.ValidatorsPercent = value.Interface().(string) + case "mint.v1beta1.QueryEmissionInfoResponse.maximum_monthly_emission_per_unit_staked_token": + x.MaximumMonthlyEmissionPerUnitStakedToken = value.Interface().(string) + case "mint.v1beta1.QueryEmissionInfoResponse.target_reward_emission_per_unit_staked_token": + x.TargetRewardEmissionPerUnitStakedToken = value.Interface().(string) + case "mint.v1beta1.QueryEmissionInfoResponse.emission_per_unit_staked_token": + x.EmissionPerUnitStakedToken = value.Interface().(string) + case "mint.v1beta1.QueryEmissionInfoResponse.emission_per_month": + x.EmissionPerMonth = value.Interface().(string) + case "mint.v1beta1.QueryEmissionInfoResponse.block_emission": + x.BlockEmission = value.Interface().(string) + case "mint.v1beta1.QueryEmissionInfoResponse.validator_cut": + x.ValidatorCut = value.Interface().(string) + case "mint.v1beta1.QueryEmissionInfoResponse.allora_rewards_cut": + x.AlloraRewardsCut = value.Interface().(string) + case "mint.v1beta1.QueryEmissionInfoResponse.previous_reward_emission_per_unit_staked_token": + x.PreviousRewardEmissionPerUnitStakedToken = value.Interface().(string) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: mint.v1beta1.QueryEmissionInfoResponse")) + } + panic(fmt.Errorf("message mint.v1beta1.QueryEmissionInfoResponse does not contain field %s", fd.FullName())) + } +} + +// Mutable returns a mutable reference to a composite type. +// +// If the field is unpopulated, it may allocate a composite value. +// For a field belonging to a oneof, it implicitly clears any other field +// that may be currently set within the same oneof. +// For extension fields, it implicitly stores the provided ExtensionType +// if not already stored. +// It panics if the field does not contain a composite type. +// +// Mutable is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryEmissionInfoResponse) Mutable(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "mint.v1beta1.QueryEmissionInfoResponse.params": + if x.Params == nil { + x.Params = new(Params) + } + return protoreflect.ValueOfMessage(x.Params.ProtoReflect()) + case "mint.v1beta1.QueryEmissionInfoResponse.ecosystem_balance": + panic(fmt.Errorf("field ecosystem_balance of message mint.v1beta1.QueryEmissionInfoResponse is not mutable")) + case "mint.v1beta1.QueryEmissionInfoResponse.previous_block_emission": + panic(fmt.Errorf("field previous_block_emission of message mint.v1beta1.QueryEmissionInfoResponse is not mutable")) + case "mint.v1beta1.QueryEmissionInfoResponse.ecosystem_mint_supply_remaining": + panic(fmt.Errorf("field ecosystem_mint_supply_remaining of message mint.v1beta1.QueryEmissionInfoResponse is not mutable")) + case "mint.v1beta1.QueryEmissionInfoResponse.blocks_per_month": + panic(fmt.Errorf("field blocks_per_month of message mint.v1beta1.QueryEmissionInfoResponse is not mutable")) + case "mint.v1beta1.QueryEmissionInfoResponse.block_height_target_e_i_last_calculated": + panic(fmt.Errorf("field block_height_target_e_i_last_calculated of message mint.v1beta1.QueryEmissionInfoResponse is not mutable")) + case "mint.v1beta1.QueryEmissionInfoResponse.block_height_target_e_i_next_calculated": + panic(fmt.Errorf("field block_height_target_e_i_next_calculated of message mint.v1beta1.QueryEmissionInfoResponse is not mutable")) + case "mint.v1beta1.QueryEmissionInfoResponse.network_staked_tokens": + panic(fmt.Errorf("field network_staked_tokens of message mint.v1beta1.QueryEmissionInfoResponse is not mutable")) + case "mint.v1beta1.QueryEmissionInfoResponse.locked_vesting_tokens_total": + panic(fmt.Errorf("field locked_vesting_tokens_total of message mint.v1beta1.QueryEmissionInfoResponse is not mutable")) + case "mint.v1beta1.QueryEmissionInfoResponse.locked_vesting_tokens_investors_preseed": + panic(fmt.Errorf("field locked_vesting_tokens_investors_preseed of message mint.v1beta1.QueryEmissionInfoResponse is not mutable")) + case "mint.v1beta1.QueryEmissionInfoResponse.locked_vesting_tokens_investors_seed": + panic(fmt.Errorf("field locked_vesting_tokens_investors_seed of message mint.v1beta1.QueryEmissionInfoResponse is not mutable")) + case "mint.v1beta1.QueryEmissionInfoResponse.locked_vesting_tokens_team": + panic(fmt.Errorf("field locked_vesting_tokens_team of message mint.v1beta1.QueryEmissionInfoResponse is not mutable")) + case "mint.v1beta1.QueryEmissionInfoResponse.ecosystem_locked": + panic(fmt.Errorf("field ecosystem_locked of message mint.v1beta1.QueryEmissionInfoResponse is not mutable")) + case "mint.v1beta1.QueryEmissionInfoResponse.circulating_supply": + panic(fmt.Errorf("field circulating_supply of message mint.v1beta1.QueryEmissionInfoResponse is not mutable")) + case "mint.v1beta1.QueryEmissionInfoResponse.max_supply": + panic(fmt.Errorf("field max_supply of message mint.v1beta1.QueryEmissionInfoResponse is not mutable")) + case "mint.v1beta1.QueryEmissionInfoResponse.target_emission_rate_per_unit_staked_token": + panic(fmt.Errorf("field target_emission_rate_per_unit_staked_token of message mint.v1beta1.QueryEmissionInfoResponse is not mutable")) + case "mint.v1beta1.QueryEmissionInfoResponse.reputers_percent": + panic(fmt.Errorf("field reputers_percent of message mint.v1beta1.QueryEmissionInfoResponse is not mutable")) + case "mint.v1beta1.QueryEmissionInfoResponse.validators_percent": + panic(fmt.Errorf("field validators_percent of message mint.v1beta1.QueryEmissionInfoResponse is not mutable")) + case "mint.v1beta1.QueryEmissionInfoResponse.maximum_monthly_emission_per_unit_staked_token": + panic(fmt.Errorf("field maximum_monthly_emission_per_unit_staked_token of message mint.v1beta1.QueryEmissionInfoResponse is not mutable")) + case "mint.v1beta1.QueryEmissionInfoResponse.target_reward_emission_per_unit_staked_token": + panic(fmt.Errorf("field target_reward_emission_per_unit_staked_token of message mint.v1beta1.QueryEmissionInfoResponse is not mutable")) + case "mint.v1beta1.QueryEmissionInfoResponse.emission_per_unit_staked_token": + panic(fmt.Errorf("field emission_per_unit_staked_token of message mint.v1beta1.QueryEmissionInfoResponse is not mutable")) + case "mint.v1beta1.QueryEmissionInfoResponse.emission_per_month": + panic(fmt.Errorf("field emission_per_month of message mint.v1beta1.QueryEmissionInfoResponse is not mutable")) + case "mint.v1beta1.QueryEmissionInfoResponse.block_emission": + panic(fmt.Errorf("field block_emission of message mint.v1beta1.QueryEmissionInfoResponse is not mutable")) + case "mint.v1beta1.QueryEmissionInfoResponse.validator_cut": + panic(fmt.Errorf("field validator_cut of message mint.v1beta1.QueryEmissionInfoResponse is not mutable")) + case "mint.v1beta1.QueryEmissionInfoResponse.allora_rewards_cut": + panic(fmt.Errorf("field allora_rewards_cut of message mint.v1beta1.QueryEmissionInfoResponse is not mutable")) + case "mint.v1beta1.QueryEmissionInfoResponse.previous_reward_emission_per_unit_staked_token": + panic(fmt.Errorf("field previous_reward_emission_per_unit_staked_token of message mint.v1beta1.QueryEmissionInfoResponse is not mutable")) + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: mint.v1beta1.QueryEmissionInfoResponse")) + } + panic(fmt.Errorf("message mint.v1beta1.QueryEmissionInfoResponse does not contain field %s", fd.FullName())) + } +} + +// NewField returns a new value that is assignable to the field +// for the given descriptor. For scalars, this returns the default value. +// For lists, maps, and messages, this returns a new, empty, mutable value. +func (x *fastReflection_QueryEmissionInfoResponse) NewField(fd protoreflect.FieldDescriptor) protoreflect.Value { + switch fd.FullName() { + case "mint.v1beta1.QueryEmissionInfoResponse.params": + m := new(Params) + return protoreflect.ValueOfMessage(m.ProtoReflect()) + case "mint.v1beta1.QueryEmissionInfoResponse.ecosystem_balance": + return protoreflect.ValueOfString("") + case "mint.v1beta1.QueryEmissionInfoResponse.previous_block_emission": + return protoreflect.ValueOfString("") + case "mint.v1beta1.QueryEmissionInfoResponse.ecosystem_mint_supply_remaining": + return protoreflect.ValueOfString("") + case "mint.v1beta1.QueryEmissionInfoResponse.blocks_per_month": + return protoreflect.ValueOfUint64(uint64(0)) + case "mint.v1beta1.QueryEmissionInfoResponse.block_height_target_e_i_last_calculated": + return protoreflect.ValueOfUint64(uint64(0)) + case "mint.v1beta1.QueryEmissionInfoResponse.block_height_target_e_i_next_calculated": + return protoreflect.ValueOfUint64(uint64(0)) + case "mint.v1beta1.QueryEmissionInfoResponse.network_staked_tokens": + return protoreflect.ValueOfString("") + case "mint.v1beta1.QueryEmissionInfoResponse.locked_vesting_tokens_total": + return protoreflect.ValueOfString("") + case "mint.v1beta1.QueryEmissionInfoResponse.locked_vesting_tokens_investors_preseed": + return protoreflect.ValueOfString("") + case "mint.v1beta1.QueryEmissionInfoResponse.locked_vesting_tokens_investors_seed": + return protoreflect.ValueOfString("") + case "mint.v1beta1.QueryEmissionInfoResponse.locked_vesting_tokens_team": + return protoreflect.ValueOfString("") + case "mint.v1beta1.QueryEmissionInfoResponse.ecosystem_locked": + return protoreflect.ValueOfString("") + case "mint.v1beta1.QueryEmissionInfoResponse.circulating_supply": + return protoreflect.ValueOfString("") + case "mint.v1beta1.QueryEmissionInfoResponse.max_supply": + return protoreflect.ValueOfString("") + case "mint.v1beta1.QueryEmissionInfoResponse.target_emission_rate_per_unit_staked_token": + return protoreflect.ValueOfString("") + case "mint.v1beta1.QueryEmissionInfoResponse.reputers_percent": + return protoreflect.ValueOfString("") + case "mint.v1beta1.QueryEmissionInfoResponse.validators_percent": + return protoreflect.ValueOfString("") + case "mint.v1beta1.QueryEmissionInfoResponse.maximum_monthly_emission_per_unit_staked_token": + return protoreflect.ValueOfString("") + case "mint.v1beta1.QueryEmissionInfoResponse.target_reward_emission_per_unit_staked_token": + return protoreflect.ValueOfString("") + case "mint.v1beta1.QueryEmissionInfoResponse.emission_per_unit_staked_token": + return protoreflect.ValueOfString("") + case "mint.v1beta1.QueryEmissionInfoResponse.emission_per_month": + return protoreflect.ValueOfString("") + case "mint.v1beta1.QueryEmissionInfoResponse.block_emission": + return protoreflect.ValueOfString("") + case "mint.v1beta1.QueryEmissionInfoResponse.validator_cut": + return protoreflect.ValueOfString("") + case "mint.v1beta1.QueryEmissionInfoResponse.allora_rewards_cut": + return protoreflect.ValueOfString("") + case "mint.v1beta1.QueryEmissionInfoResponse.previous_reward_emission_per_unit_staked_token": + return protoreflect.ValueOfString("") + default: + if fd.IsExtension() { + panic(fmt.Errorf("proto3 declared messages do not support extensions: mint.v1beta1.QueryEmissionInfoResponse")) + } + panic(fmt.Errorf("message mint.v1beta1.QueryEmissionInfoResponse does not contain field %s", fd.FullName())) + } +} + +// WhichOneof reports which field within the oneof is populated, +// returning nil if none are populated. +// It panics if the oneof descriptor does not belong to this message. +func (x *fastReflection_QueryEmissionInfoResponse) WhichOneof(d protoreflect.OneofDescriptor) protoreflect.FieldDescriptor { + switch d.FullName() { + default: + panic(fmt.Errorf("%s is not a oneof field in mint.v1beta1.QueryEmissionInfoResponse", d.FullName())) + } + panic("unreachable") +} + +// GetUnknown retrieves the entire list of unknown fields. +// The caller may only mutate the contents of the RawFields +// if the mutated bytes are stored back into the message with SetUnknown. +func (x *fastReflection_QueryEmissionInfoResponse) GetUnknown() protoreflect.RawFields { + return x.unknownFields +} + +// SetUnknown stores an entire list of unknown fields. +// The raw fields must be syntactically valid according to the wire format. +// An implementation may panic if this is not the case. +// Once stored, the caller must not mutate the content of the RawFields. +// An empty RawFields may be passed to clear the fields. +// +// SetUnknown is a mutating operation and unsafe for concurrent use. +func (x *fastReflection_QueryEmissionInfoResponse) SetUnknown(fields protoreflect.RawFields) { + x.unknownFields = fields +} + +// IsValid reports whether the message is valid. +// +// An invalid message is an empty, read-only value. +// +// An invalid message often corresponds to a nil pointer of the concrete +// message type, but the details are implementation dependent. +// Validity is not part of the protobuf data model, and may not +// be preserved in marshaling or other operations. +func (x *fastReflection_QueryEmissionInfoResponse) IsValid() bool { + return x != nil +} + +// ProtoMethods returns optional fastReflectionFeature-path implementations of various operations. +// This method may return nil. +// +// The returned methods type is identical to +// "google.golang.org/protobuf/runtime/protoiface".Methods. +// Consult the protoiface package documentation for details. +func (x *fastReflection_QueryEmissionInfoResponse) ProtoMethods() *protoiface.Methods { + size := func(input protoiface.SizeInput) protoiface.SizeOutput { + x := input.Message.Interface().(*QueryEmissionInfoResponse) + if x == nil { + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: 0, + } + } + options := runtime.SizeInputToOptions(input) + _ = options + var n int + var l int + _ = l + if x.Params != nil { + l = options.Size(x.Params) + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.EcosystemBalance) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.PreviousBlockEmission) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.EcosystemMintSupplyRemaining) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + if x.BlocksPerMonth != 0 { + n += 1 + runtime.Sov(uint64(x.BlocksPerMonth)) + } + if x.BlockHeightTargetEILastCalculated != 0 { + n += 1 + runtime.Sov(uint64(x.BlockHeightTargetEILastCalculated)) + } + if x.BlockHeightTargetEINextCalculated != 0 { + n += 1 + runtime.Sov(uint64(x.BlockHeightTargetEINextCalculated)) + } + l = len(x.NetworkStakedTokens) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.LockedVestingTokensTotal) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.LockedVestingTokensInvestorsPreseed) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.LockedVestingTokensInvestorsSeed) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.LockedVestingTokensTeam) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.EcosystemLocked) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.CirculatingSupply) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.MaxSupply) + if l > 0 { + n += 1 + l + runtime.Sov(uint64(l)) + } + l = len(x.TargetEmissionRatePerUnitStakedToken) + if l > 0 { + n += 2 + l + runtime.Sov(uint64(l)) + } + l = len(x.ReputersPercent) + if l > 0 { + n += 2 + l + runtime.Sov(uint64(l)) + } + l = len(x.ValidatorsPercent) + if l > 0 { + n += 2 + l + runtime.Sov(uint64(l)) + } + l = len(x.MaximumMonthlyEmissionPerUnitStakedToken) + if l > 0 { + n += 2 + l + runtime.Sov(uint64(l)) + } + l = len(x.TargetRewardEmissionPerUnitStakedToken) + if l > 0 { + n += 2 + l + runtime.Sov(uint64(l)) + } + l = len(x.EmissionPerUnitStakedToken) + if l > 0 { + n += 2 + l + runtime.Sov(uint64(l)) + } + l = len(x.EmissionPerMonth) + if l > 0 { + n += 2 + l + runtime.Sov(uint64(l)) + } + l = len(x.BlockEmission) + if l > 0 { + n += 2 + l + runtime.Sov(uint64(l)) + } + l = len(x.ValidatorCut) + if l > 0 { + n += 2 + l + runtime.Sov(uint64(l)) + } + l = len(x.AlloraRewardsCut) + if l > 0 { + n += 2 + l + runtime.Sov(uint64(l)) + } + l = len(x.PreviousRewardEmissionPerUnitStakedToken) + if l > 0 { + n += 2 + l + runtime.Sov(uint64(l)) + } + if x.unknownFields != nil { + n += len(x.unknownFields) + } + return protoiface.SizeOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Size: n, + } + } + + marshal := func(input protoiface.MarshalInput) (protoiface.MarshalOutput, error) { + x := input.Message.Interface().(*QueryEmissionInfoResponse) + if x == nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + options := runtime.MarshalInputToOptions(input) + _ = options + size := options.Size(x) + dAtA := make([]byte, size) + i := len(dAtA) + _ = i + var l int + _ = l + if x.unknownFields != nil { + i -= len(x.unknownFields) + copy(dAtA[i:], x.unknownFields) + } + if len(x.PreviousRewardEmissionPerUnitStakedToken) > 0 { + i -= len(x.PreviousRewardEmissionPerUnitStakedToken) + copy(dAtA[i:], x.PreviousRewardEmissionPerUnitStakedToken) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.PreviousRewardEmissionPerUnitStakedToken))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xd2 + } + if len(x.AlloraRewardsCut) > 0 { + i -= len(x.AlloraRewardsCut) + copy(dAtA[i:], x.AlloraRewardsCut) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.AlloraRewardsCut))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xca + } + if len(x.ValidatorCut) > 0 { + i -= len(x.ValidatorCut) + copy(dAtA[i:], x.ValidatorCut) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.ValidatorCut))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xc2 + } + if len(x.BlockEmission) > 0 { + i -= len(x.BlockEmission) + copy(dAtA[i:], x.BlockEmission) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.BlockEmission))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xba + } + if len(x.EmissionPerMonth) > 0 { + i -= len(x.EmissionPerMonth) + copy(dAtA[i:], x.EmissionPerMonth) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.EmissionPerMonth))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xb2 + } + if len(x.EmissionPerUnitStakedToken) > 0 { + i -= len(x.EmissionPerUnitStakedToken) + copy(dAtA[i:], x.EmissionPerUnitStakedToken) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.EmissionPerUnitStakedToken))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xaa + } + if len(x.TargetRewardEmissionPerUnitStakedToken) > 0 { + i -= len(x.TargetRewardEmissionPerUnitStakedToken) + copy(dAtA[i:], x.TargetRewardEmissionPerUnitStakedToken) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.TargetRewardEmissionPerUnitStakedToken))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xa2 + } + if len(x.MaximumMonthlyEmissionPerUnitStakedToken) > 0 { + i -= len(x.MaximumMonthlyEmissionPerUnitStakedToken) + copy(dAtA[i:], x.MaximumMonthlyEmissionPerUnitStakedToken) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.MaximumMonthlyEmissionPerUnitStakedToken))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x9a + } + if len(x.ValidatorsPercent) > 0 { + i -= len(x.ValidatorsPercent) + copy(dAtA[i:], x.ValidatorsPercent) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.ValidatorsPercent))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x92 + } + if len(x.ReputersPercent) > 0 { + i -= len(x.ReputersPercent) + copy(dAtA[i:], x.ReputersPercent) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.ReputersPercent))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x8a + } + if len(x.TargetEmissionRatePerUnitStakedToken) > 0 { + i -= len(x.TargetEmissionRatePerUnitStakedToken) + copy(dAtA[i:], x.TargetEmissionRatePerUnitStakedToken) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.TargetEmissionRatePerUnitStakedToken))) + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x82 + } + if len(x.MaxSupply) > 0 { + i -= len(x.MaxSupply) + copy(dAtA[i:], x.MaxSupply) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.MaxSupply))) + i-- + dAtA[i] = 0x7a + } + if len(x.CirculatingSupply) > 0 { + i -= len(x.CirculatingSupply) + copy(dAtA[i:], x.CirculatingSupply) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.CirculatingSupply))) + i-- + dAtA[i] = 0x72 + } + if len(x.EcosystemLocked) > 0 { + i -= len(x.EcosystemLocked) + copy(dAtA[i:], x.EcosystemLocked) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.EcosystemLocked))) + i-- + dAtA[i] = 0x6a + } + if len(x.LockedVestingTokensTeam) > 0 { + i -= len(x.LockedVestingTokensTeam) + copy(dAtA[i:], x.LockedVestingTokensTeam) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.LockedVestingTokensTeam))) + i-- + dAtA[i] = 0x62 + } + if len(x.LockedVestingTokensInvestorsSeed) > 0 { + i -= len(x.LockedVestingTokensInvestorsSeed) + copy(dAtA[i:], x.LockedVestingTokensInvestorsSeed) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.LockedVestingTokensInvestorsSeed))) + i-- + dAtA[i] = 0x5a + } + if len(x.LockedVestingTokensInvestorsPreseed) > 0 { + i -= len(x.LockedVestingTokensInvestorsPreseed) + copy(dAtA[i:], x.LockedVestingTokensInvestorsPreseed) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.LockedVestingTokensInvestorsPreseed))) + i-- + dAtA[i] = 0x52 + } + if len(x.LockedVestingTokensTotal) > 0 { + i -= len(x.LockedVestingTokensTotal) + copy(dAtA[i:], x.LockedVestingTokensTotal) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.LockedVestingTokensTotal))) + i-- + dAtA[i] = 0x4a + } + if len(x.NetworkStakedTokens) > 0 { + i -= len(x.NetworkStakedTokens) + copy(dAtA[i:], x.NetworkStakedTokens) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.NetworkStakedTokens))) + i-- + dAtA[i] = 0x42 + } + if x.BlockHeightTargetEINextCalculated != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.BlockHeightTargetEINextCalculated)) + i-- + dAtA[i] = 0x38 + } + if x.BlockHeightTargetEILastCalculated != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.BlockHeightTargetEILastCalculated)) + i-- + dAtA[i] = 0x30 + } + if x.BlocksPerMonth != 0 { + i = runtime.EncodeVarint(dAtA, i, uint64(x.BlocksPerMonth)) + i-- + dAtA[i] = 0x28 + } + if len(x.EcosystemMintSupplyRemaining) > 0 { + i -= len(x.EcosystemMintSupplyRemaining) + copy(dAtA[i:], x.EcosystemMintSupplyRemaining) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.EcosystemMintSupplyRemaining))) + i-- + dAtA[i] = 0x22 + } + if len(x.PreviousBlockEmission) > 0 { + i -= len(x.PreviousBlockEmission) + copy(dAtA[i:], x.PreviousBlockEmission) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.PreviousBlockEmission))) + i-- + dAtA[i] = 0x1a + } + if len(x.EcosystemBalance) > 0 { + i -= len(x.EcosystemBalance) + copy(dAtA[i:], x.EcosystemBalance) + i = runtime.EncodeVarint(dAtA, i, uint64(len(x.EcosystemBalance))) + i-- + dAtA[i] = 0x12 + } + if x.Params != nil { + encoded, err := options.Marshal(x.Params) + if err != nil { + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, err + } + i -= len(encoded) + copy(dAtA[i:], encoded) + i = runtime.EncodeVarint(dAtA, i, uint64(len(encoded))) + i-- + dAtA[i] = 0xa + } + if input.Buf != nil { + input.Buf = append(input.Buf, dAtA...) + } else { + input.Buf = dAtA + } + return protoiface.MarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Buf: input.Buf, + }, nil + } + unmarshal := func(input protoiface.UnmarshalInput) (protoiface.UnmarshalOutput, error) { + x := input.Message.Interface().(*QueryEmissionInfoResponse) + if x == nil { + return protoiface.UnmarshalOutput{ + NoUnkeyedLiterals: input.NoUnkeyedLiterals, + Flags: input.Flags, + }, nil + } + options := runtime.UnmarshalInputToOptions(input) + _ = options + dAtA := input.Buf + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryEmissionInfoResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: QueryEmissionInfoResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if x.Params == nil { + x.Params = &Params{} + } + if err := options.Unmarshal(dAtA[iNdEx:postIndex], x.Params); err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field EcosystemBalance", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.EcosystemBalance = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 3: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field PreviousBlockEmission", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.PreviousBlockEmission = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 4: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field EcosystemMintSupplyRemaining", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.EcosystemMintSupplyRemaining = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 5: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field BlocksPerMonth", wireType) + } + x.BlocksPerMonth = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.BlocksPerMonth |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 6: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field BlockHeightTargetEILastCalculated", wireType) + } + x.BlockHeightTargetEILastCalculated = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.BlockHeightTargetEILastCalculated |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 7: + if wireType != 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field BlockHeightTargetEINextCalculated", wireType) + } + x.BlockHeightTargetEINextCalculated = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + x.BlockHeightTargetEINextCalculated |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 8: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field NetworkStakedTokens", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.NetworkStakedTokens = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 9: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LockedVestingTokensTotal", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.LockedVestingTokensTotal = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 10: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LockedVestingTokensInvestorsPreseed", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.LockedVestingTokensInvestorsPreseed = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 11: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LockedVestingTokensInvestorsSeed", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.LockedVestingTokensInvestorsSeed = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 12: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field LockedVestingTokensTeam", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.LockedVestingTokensTeam = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 13: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field EcosystemLocked", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.EcosystemLocked = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 14: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field CirculatingSupply", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.CirculatingSupply = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 15: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field MaxSupply", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.MaxSupply = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 16: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field TargetEmissionRatePerUnitStakedToken", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.TargetEmissionRatePerUnitStakedToken = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 17: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ReputersPercent", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.ReputersPercent = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 18: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ValidatorsPercent", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.ValidatorsPercent = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 19: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field MaximumMonthlyEmissionPerUnitStakedToken", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.MaximumMonthlyEmissionPerUnitStakedToken = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 20: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field TargetRewardEmissionPerUnitStakedToken", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.TargetRewardEmissionPerUnitStakedToken = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 21: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field EmissionPerUnitStakedToken", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.EmissionPerUnitStakedToken = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 22: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field EmissionPerMonth", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.EmissionPerMonth = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 23: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field BlockEmission", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.BlockEmission = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 24: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field ValidatorCut", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.ValidatorCut = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 25: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field AlloraRewardsCut", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.AlloraRewardsCut = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + case 26: + if wireType != 2 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, fmt.Errorf("proto: wrong wireType = %d for field PreviousRewardEmissionPerUnitStakedToken", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrIntOverflow + } + if iNdEx >= l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if postIndex > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + x.PreviousRewardEmissionPerUnitStakedToken = string(dAtA[iNdEx:postIndex]) + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := runtime.Skip(dAtA[iNdEx:]) + if err != nil { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, runtime.ErrInvalidLength + } + if (iNdEx + skippy) > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + if !options.DiscardUnknown { + x.unknownFields = append(x.unknownFields, dAtA[iNdEx:iNdEx+skippy]...) + } + iNdEx += skippy + } + } + + if iNdEx > l { + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, io.ErrUnexpectedEOF + } + return protoiface.UnmarshalOutput{NoUnkeyedLiterals: input.NoUnkeyedLiterals, Flags: input.Flags}, nil + } + return &protoiface.Methods{ + NoUnkeyedLiterals: struct{}{}, + Flags: protoiface.SupportMarshalDeterministic | protoiface.SupportUnmarshalDiscardUnknown, + Size: size, + Marshal: marshal, + Unmarshal: unmarshal, + Merge: nil, + CheckInitialized: nil, + } +} + // Code generated by protoc-gen-go. DO NOT EDIT. // versions: // protoc-gen-go v1.27.0 @@ -1727,6 +4092,269 @@ func (x *QueryInflationResponse) GetInflation() []byte { return nil } +// query for a big dump of mint module info +type QueryEmissionInfoRequest struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields +} + +func (x *QueryEmissionInfoRequest) Reset() { + *x = QueryEmissionInfoRequest{} + if protoimpl.UnsafeEnabled { + mi := &file_mint_v1beta1_query_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryEmissionInfoRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryEmissionInfoRequest) ProtoMessage() {} + +// Deprecated: Use QueryEmissionInfoRequest.ProtoReflect.Descriptor instead. +func (*QueryEmissionInfoRequest) Descriptor() ([]byte, []int) { + return file_mint_v1beta1_query_proto_rawDescGZIP(), []int{4} +} + +// return information about the emissions rate on query +type QueryEmissionInfoResponse struct { + state protoimpl.MessageState + sizeCache protoimpl.SizeCache + unknownFields protoimpl.UnknownFields + + Params *Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params,omitempty"` + EcosystemBalance string `protobuf:"bytes,2,opt,name=ecosystem_balance,json=ecosystemBalance,proto3" json:"ecosystem_balance,omitempty"` + PreviousBlockEmission string `protobuf:"bytes,3,opt,name=previous_block_emission,json=previousBlockEmission,proto3" json:"previous_block_emission,omitempty"` + EcosystemMintSupplyRemaining string `protobuf:"bytes,4,opt,name=ecosystem_mint_supply_remaining,json=ecosystemMintSupplyRemaining,proto3" json:"ecosystem_mint_supply_remaining,omitempty"` + BlocksPerMonth uint64 `protobuf:"varint,5,opt,name=blocks_per_month,json=blocksPerMonth,proto3" json:"blocks_per_month,omitempty"` + BlockHeightTargetEILastCalculated uint64 `protobuf:"varint,6,opt,name=block_height_target_e_i_last_calculated,json=blockHeightTargetEILastCalculated,proto3" json:"block_height_target_e_i_last_calculated,omitempty"` + BlockHeightTargetEINextCalculated uint64 `protobuf:"varint,7,opt,name=block_height_target_e_i_next_calculated,json=blockHeightTargetEINextCalculated,proto3" json:"block_height_target_e_i_next_calculated,omitempty"` + NetworkStakedTokens string `protobuf:"bytes,8,opt,name=network_staked_tokens,json=networkStakedTokens,proto3" json:"network_staked_tokens,omitempty"` + LockedVestingTokensTotal string `protobuf:"bytes,9,opt,name=locked_vesting_tokens_total,json=lockedVestingTokensTotal,proto3" json:"locked_vesting_tokens_total,omitempty"` + LockedVestingTokensInvestorsPreseed string `protobuf:"bytes,10,opt,name=locked_vesting_tokens_investors_preseed,json=lockedVestingTokensInvestorsPreseed,proto3" json:"locked_vesting_tokens_investors_preseed,omitempty"` + LockedVestingTokensInvestorsSeed string `protobuf:"bytes,11,opt,name=locked_vesting_tokens_investors_seed,json=lockedVestingTokensInvestorsSeed,proto3" json:"locked_vesting_tokens_investors_seed,omitempty"` + LockedVestingTokensTeam string `protobuf:"bytes,12,opt,name=locked_vesting_tokens_team,json=lockedVestingTokensTeam,proto3" json:"locked_vesting_tokens_team,omitempty"` + EcosystemLocked string `protobuf:"bytes,13,opt,name=ecosystem_locked,json=ecosystemLocked,proto3" json:"ecosystem_locked,omitempty"` + CirculatingSupply string `protobuf:"bytes,14,opt,name=circulating_supply,json=circulatingSupply,proto3" json:"circulating_supply,omitempty"` + MaxSupply string `protobuf:"bytes,15,opt,name=max_supply,json=maxSupply,proto3" json:"max_supply,omitempty"` + TargetEmissionRatePerUnitStakedToken string `protobuf:"bytes,16,opt,name=target_emission_rate_per_unit_staked_token,json=targetEmissionRatePerUnitStakedToken,proto3" json:"target_emission_rate_per_unit_staked_token,omitempty"` + ReputersPercent string `protobuf:"bytes,17,opt,name=reputers_percent,json=reputersPercent,proto3" json:"reputers_percent,omitempty"` + ValidatorsPercent string `protobuf:"bytes,18,opt,name=validators_percent,json=validatorsPercent,proto3" json:"validators_percent,omitempty"` + MaximumMonthlyEmissionPerUnitStakedToken string `protobuf:"bytes,19,opt,name=maximum_monthly_emission_per_unit_staked_token,json=maximumMonthlyEmissionPerUnitStakedToken,proto3" json:"maximum_monthly_emission_per_unit_staked_token,omitempty"` + TargetRewardEmissionPerUnitStakedToken string `protobuf:"bytes,20,opt,name=target_reward_emission_per_unit_staked_token,json=targetRewardEmissionPerUnitStakedToken,proto3" json:"target_reward_emission_per_unit_staked_token,omitempty"` + EmissionPerUnitStakedToken string `protobuf:"bytes,21,opt,name=emission_per_unit_staked_token,json=emissionPerUnitStakedToken,proto3" json:"emission_per_unit_staked_token,omitempty"` + EmissionPerMonth string `protobuf:"bytes,22,opt,name=emission_per_month,json=emissionPerMonth,proto3" json:"emission_per_month,omitempty"` + BlockEmission string `protobuf:"bytes,23,opt,name=block_emission,json=blockEmission,proto3" json:"block_emission,omitempty"` + ValidatorCut string `protobuf:"bytes,24,opt,name=validator_cut,json=validatorCut,proto3" json:"validator_cut,omitempty"` + AlloraRewardsCut string `protobuf:"bytes,25,opt,name=allora_rewards_cut,json=alloraRewardsCut,proto3" json:"allora_rewards_cut,omitempty"` + PreviousRewardEmissionPerUnitStakedToken string `protobuf:"bytes,26,opt,name=previous_reward_emission_per_unit_staked_token,json=previousRewardEmissionPerUnitStakedToken,proto3" json:"previous_reward_emission_per_unit_staked_token,omitempty"` +} + +func (x *QueryEmissionInfoResponse) Reset() { + *x = QueryEmissionInfoResponse{} + if protoimpl.UnsafeEnabled { + mi := &file_mint_v1beta1_query_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) + } +} + +func (x *QueryEmissionInfoResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QueryEmissionInfoResponse) ProtoMessage() {} + +// Deprecated: Use QueryEmissionInfoResponse.ProtoReflect.Descriptor instead. +func (*QueryEmissionInfoResponse) Descriptor() ([]byte, []int) { + return file_mint_v1beta1_query_proto_rawDescGZIP(), []int{5} +} + +func (x *QueryEmissionInfoResponse) GetParams() *Params { + if x != nil { + return x.Params + } + return nil +} + +func (x *QueryEmissionInfoResponse) GetEcosystemBalance() string { + if x != nil { + return x.EcosystemBalance + } + return "" +} + +func (x *QueryEmissionInfoResponse) GetPreviousBlockEmission() string { + if x != nil { + return x.PreviousBlockEmission + } + return "" +} + +func (x *QueryEmissionInfoResponse) GetEcosystemMintSupplyRemaining() string { + if x != nil { + return x.EcosystemMintSupplyRemaining + } + return "" +} + +func (x *QueryEmissionInfoResponse) GetBlocksPerMonth() uint64 { + if x != nil { + return x.BlocksPerMonth + } + return 0 +} + +func (x *QueryEmissionInfoResponse) GetBlockHeightTargetEILastCalculated() uint64 { + if x != nil { + return x.BlockHeightTargetEILastCalculated + } + return 0 +} + +func (x *QueryEmissionInfoResponse) GetBlockHeightTargetEINextCalculated() uint64 { + if x != nil { + return x.BlockHeightTargetEINextCalculated + } + return 0 +} + +func (x *QueryEmissionInfoResponse) GetNetworkStakedTokens() string { + if x != nil { + return x.NetworkStakedTokens + } + return "" +} + +func (x *QueryEmissionInfoResponse) GetLockedVestingTokensTotal() string { + if x != nil { + return x.LockedVestingTokensTotal + } + return "" +} + +func (x *QueryEmissionInfoResponse) GetLockedVestingTokensInvestorsPreseed() string { + if x != nil { + return x.LockedVestingTokensInvestorsPreseed + } + return "" +} + +func (x *QueryEmissionInfoResponse) GetLockedVestingTokensInvestorsSeed() string { + if x != nil { + return x.LockedVestingTokensInvestorsSeed + } + return "" +} + +func (x *QueryEmissionInfoResponse) GetLockedVestingTokensTeam() string { + if x != nil { + return x.LockedVestingTokensTeam + } + return "" +} + +func (x *QueryEmissionInfoResponse) GetEcosystemLocked() string { + if x != nil { + return x.EcosystemLocked + } + return "" +} + +func (x *QueryEmissionInfoResponse) GetCirculatingSupply() string { + if x != nil { + return x.CirculatingSupply + } + return "" +} + +func (x *QueryEmissionInfoResponse) GetMaxSupply() string { + if x != nil { + return x.MaxSupply + } + return "" +} + +func (x *QueryEmissionInfoResponse) GetTargetEmissionRatePerUnitStakedToken() string { + if x != nil { + return x.TargetEmissionRatePerUnitStakedToken + } + return "" +} + +func (x *QueryEmissionInfoResponse) GetReputersPercent() string { + if x != nil { + return x.ReputersPercent + } + return "" +} + +func (x *QueryEmissionInfoResponse) GetValidatorsPercent() string { + if x != nil { + return x.ValidatorsPercent + } + return "" +} + +func (x *QueryEmissionInfoResponse) GetMaximumMonthlyEmissionPerUnitStakedToken() string { + if x != nil { + return x.MaximumMonthlyEmissionPerUnitStakedToken + } + return "" +} + +func (x *QueryEmissionInfoResponse) GetTargetRewardEmissionPerUnitStakedToken() string { + if x != nil { + return x.TargetRewardEmissionPerUnitStakedToken + } + return "" +} + +func (x *QueryEmissionInfoResponse) GetEmissionPerUnitStakedToken() string { + if x != nil { + return x.EmissionPerUnitStakedToken + } + return "" +} + +func (x *QueryEmissionInfoResponse) GetEmissionPerMonth() string { + if x != nil { + return x.EmissionPerMonth + } + return "" +} + +func (x *QueryEmissionInfoResponse) GetBlockEmission() string { + if x != nil { + return x.BlockEmission + } + return "" +} + +func (x *QueryEmissionInfoResponse) GetValidatorCut() string { + if x != nil { + return x.ValidatorCut + } + return "" +} + +func (x *QueryEmissionInfoResponse) GetAlloraRewardsCut() string { + if x != nil { + return x.AlloraRewardsCut + } + return "" +} + +func (x *QueryEmissionInfoResponse) GetPreviousRewardEmissionPerUnitStakedToken() string { + if x != nil { + return x.PreviousRewardEmissionPerUnitStakedToken + } + return "" +} + var File_mint_v1beta1_query_proto protoreflect.FileDescriptor var file_mint_v1beta1_query_proto_rawDesc = []byte{ @@ -1755,34 +4383,218 @@ var file_mint_v1beta1_query_proto_rawDesc = []byte{ 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x44, 0x65, 0x63, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x44, 0x65, 0x63, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x09, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x32, 0xed, 0x01, 0x0a, 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x6b, 0x0a, - 0x06, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x20, 0x2e, 0x6d, 0x69, 0x6e, 0x74, 0x2e, 0x76, + 0x69, 0x6f, 0x6e, 0x22, 0x1a, 0x0a, 0x18, 0x51, 0x75, 0x65, 0x72, 0x79, 0x45, 0x6d, 0x69, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x22, + 0xdf, 0x15, 0x0a, 0x19, 0x51, 0x75, 0x65, 0x72, 0x79, 0x45, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x12, 0x37, 0x0a, + 0x06, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, + 0x6d, 0x69, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x50, 0x61, 0x72, + 0x61, 0x6d, 0x73, 0x42, 0x09, 0xc8, 0xde, 0x1f, 0x00, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x06, + 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x5d, 0x0a, 0x11, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, + 0x74, 0x65, 0x6d, 0x5f, 0x62, 0x61, 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x30, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x15, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x49, 0x6e, 0x74, + 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0xa8, 0xe7, + 0xb0, 0x2a, 0x01, 0x52, 0x10, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x42, 0x61, + 0x6c, 0x61, 0x6e, 0x63, 0x65, 0x12, 0x68, 0x0a, 0x17, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, + 0x73, 0x5f, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, + 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x42, 0x30, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x15, + 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x6d, 0x61, 0x74, + 0x68, 0x2e, 0x49, 0x6e, 0x74, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, + 0x49, 0x6e, 0x74, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x15, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, + 0x75, 0x73, 0x42, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, + 0x77, 0x0a, 0x1f, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x5f, 0x6d, 0x69, 0x6e, + 0x74, 0x5f, 0x73, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x5f, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x69, + 0x6e, 0x67, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x42, 0x30, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, + 0x1f, 0x15, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x6d, + 0x61, 0x74, 0x68, 0x2e, 0x49, 0x6e, 0x74, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2e, 0x49, 0x6e, 0x74, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x1c, 0x65, 0x63, 0x6f, 0x73, + 0x79, 0x73, 0x74, 0x65, 0x6d, 0x4d, 0x69, 0x6e, 0x74, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x52, + 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x12, 0x28, 0x0a, 0x10, 0x62, 0x6c, 0x6f, 0x63, + 0x6b, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x18, 0x05, 0x20, 0x01, + 0x28, 0x04, 0x52, 0x0e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x73, 0x50, 0x65, 0x72, 0x4d, 0x6f, 0x6e, + 0x74, 0x68, 0x12, 0x52, 0x0a, 0x27, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, 0x68, 0x65, 0x69, 0x67, + 0x68, 0x74, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x65, 0x5f, 0x69, 0x5f, 0x6c, 0x61, + 0x73, 0x74, 0x5f, 0x63, 0x61, 0x6c, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x18, 0x06, 0x20, + 0x01, 0x28, 0x04, 0x52, 0x21, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, 0x69, 0x67, 0x68, 0x74, + 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x45, 0x49, 0x4c, 0x61, 0x73, 0x74, 0x43, 0x61, 0x6c, 0x63, + 0x75, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x12, 0x52, 0x0a, 0x27, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, + 0x68, 0x65, 0x69, 0x67, 0x68, 0x74, 0x5f, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x65, 0x5f, + 0x69, 0x5f, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x63, 0x61, 0x6c, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x65, + 0x64, 0x18, 0x07, 0x20, 0x01, 0x28, 0x04, 0x52, 0x21, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x48, 0x65, + 0x69, 0x67, 0x68, 0x74, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x45, 0x49, 0x4e, 0x65, 0x78, 0x74, + 0x43, 0x61, 0x6c, 0x63, 0x75, 0x6c, 0x61, 0x74, 0x65, 0x64, 0x12, 0x64, 0x0a, 0x15, 0x6e, 0x65, + 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x5f, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x64, 0x5f, 0x74, 0x6f, 0x6b, + 0x65, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x42, 0x30, 0xc8, 0xde, 0x1f, 0x00, 0xda, + 0xde, 0x1f, 0x15, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, + 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x49, 0x6e, 0x74, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x13, 0x6e, 0x65, 0x74, + 0x77, 0x6f, 0x72, 0x6b, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, + 0x12, 0x6f, 0x0a, 0x1b, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x76, 0x65, 0x73, 0x74, 0x69, + 0x6e, 0x67, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x5f, 0x74, 0x6f, 0x74, 0x61, 0x6c, 0x18, + 0x09, 0x20, 0x01, 0x28, 0x09, 0x42, 0x30, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x15, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x6d, 0x61, 0x74, 0x68, + 0x2e, 0x49, 0x6e, 0x74, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x49, + 0x6e, 0x74, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x18, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x56, + 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x54, 0x6f, 0x74, 0x61, + 0x6c, 0x12, 0x86, 0x01, 0x0a, 0x27, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x76, 0x65, 0x73, + 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x5f, 0x69, 0x6e, 0x76, 0x65, + 0x73, 0x74, 0x6f, 0x72, 0x73, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x65, 0x64, 0x18, 0x0a, 0x20, + 0x01, 0x28, 0x09, 0x42, 0x30, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x15, 0x63, 0x6f, 0x73, + 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x49, + 0x6e, 0x74, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x74, + 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x23, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x56, 0x65, 0x73, + 0x74, 0x69, 0x6e, 0x67, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x49, 0x6e, 0x76, 0x65, 0x73, 0x74, + 0x6f, 0x72, 0x73, 0x50, 0x72, 0x65, 0x73, 0x65, 0x65, 0x64, 0x12, 0x80, 0x01, 0x0a, 0x24, 0x6c, + 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x76, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x74, 0x6f, + 0x6b, 0x65, 0x6e, 0x73, 0x5f, 0x69, 0x6e, 0x76, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x73, 0x5f, 0x73, + 0x65, 0x65, 0x64, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x42, 0x30, 0xc8, 0xde, 0x1f, 0x00, 0xda, + 0xde, 0x1f, 0x15, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, + 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x49, 0x6e, 0x74, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x20, 0x6c, 0x6f, 0x63, + 0x6b, 0x65, 0x64, 0x56, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, + 0x49, 0x6e, 0x76, 0x65, 0x73, 0x74, 0x6f, 0x72, 0x73, 0x53, 0x65, 0x65, 0x64, 0x12, 0x6d, 0x0a, + 0x1a, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x5f, 0x76, 0x65, 0x73, 0x74, 0x69, 0x6e, 0x67, 0x5f, + 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x5f, 0x74, 0x65, 0x61, 0x6d, 0x18, 0x0c, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x30, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x15, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x49, 0x6e, 0x74, + 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0xa8, 0xe7, + 0xb0, 0x2a, 0x01, 0x52, 0x17, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x56, 0x65, 0x73, 0x74, 0x69, + 0x6e, 0x67, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x73, 0x54, 0x65, 0x61, 0x6d, 0x12, 0x5b, 0x0a, 0x10, + 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x5f, 0x6c, 0x6f, 0x63, 0x6b, 0x65, 0x64, + 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x42, 0x30, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x15, + 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x6d, 0x61, 0x74, + 0x68, 0x2e, 0x49, 0x6e, 0x74, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, + 0x49, 0x6e, 0x74, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x0f, 0x65, 0x63, 0x6f, 0x73, 0x79, 0x73, + 0x74, 0x65, 0x6d, 0x4c, 0x6f, 0x63, 0x6b, 0x65, 0x64, 0x12, 0x5f, 0x0a, 0x12, 0x63, 0x69, 0x72, + 0x63, 0x75, 0x6c, 0x61, 0x74, 0x69, 0x6e, 0x67, 0x5f, 0x73, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x18, + 0x0e, 0x20, 0x01, 0x28, 0x09, 0x42, 0x30, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x15, 0x63, + 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x6d, 0x61, 0x74, 0x68, + 0x2e, 0x49, 0x6e, 0x74, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x49, + 0x6e, 0x74, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x11, 0x63, 0x69, 0x72, 0x63, 0x75, 0x6c, 0x61, + 0x74, 0x69, 0x6e, 0x67, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x12, 0x4f, 0x0a, 0x0a, 0x6d, 0x61, + 0x78, 0x5f, 0x73, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x18, 0x0f, 0x20, 0x01, 0x28, 0x09, 0x42, 0x30, + 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x15, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, + 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x49, 0x6e, 0x74, 0xd2, 0xb4, 0x2d, + 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, + 0x52, 0x09, 0x6d, 0x61, 0x78, 0x53, 0x75, 0x70, 0x70, 0x6c, 0x79, 0x12, 0x90, 0x01, 0x0a, 0x2a, + 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, + 0x72, 0x61, 0x74, 0x65, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x75, 0x6e, 0x69, 0x74, 0x5f, 0x73, 0x74, + 0x61, 0x6b, 0x65, 0x64, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x10, 0x20, 0x01, 0x28, 0x09, + 0x42, 0x36, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x1b, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x4c, 0x65, 0x67, 0x61, + 0x63, 0x79, 0x44, 0x65, 0x63, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, + 0x44, 0x65, 0x63, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x24, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, + 0x45, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x61, 0x74, 0x65, 0x50, 0x65, 0x72, 0x55, + 0x6e, 0x69, 0x74, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x61, + 0x0a, 0x10, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x73, 0x5f, 0x70, 0x65, 0x72, 0x63, 0x65, + 0x6e, 0x74, 0x18, 0x11, 0x20, 0x01, 0x28, 0x09, 0x42, 0x36, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, + 0x1f, 0x1b, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x6d, + 0x61, 0x74, 0x68, 0x2e, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x44, 0x65, 0x63, 0xd2, 0xb4, 0x2d, + 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x44, 0x65, 0x63, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, + 0x52, 0x0f, 0x72, 0x65, 0x70, 0x75, 0x74, 0x65, 0x72, 0x73, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, + 0x74, 0x12, 0x65, 0x0a, 0x12, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x73, 0x5f, + 0x70, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x18, 0x12, 0x20, 0x01, 0x28, 0x09, 0x42, 0x36, 0xc8, + 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x1b, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, + 0x2e, 0x69, 0x6f, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x44, + 0x65, 0x63, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x44, 0x65, 0x63, + 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x11, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, + 0x73, 0x50, 0x65, 0x72, 0x63, 0x65, 0x6e, 0x74, 0x12, 0x98, 0x01, 0x0a, 0x2e, 0x6d, 0x61, 0x78, + 0x69, 0x6d, 0x75, 0x6d, 0x5f, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x6c, 0x79, 0x5f, 0x65, 0x6d, 0x69, + 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x75, 0x6e, 0x69, 0x74, 0x5f, 0x73, + 0x74, 0x61, 0x6b, 0x65, 0x64, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x13, 0x20, 0x01, 0x28, + 0x09, 0x42, 0x36, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x1b, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x4c, 0x65, 0x67, + 0x61, 0x63, 0x79, 0x44, 0x65, 0x63, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, + 0x2e, 0x44, 0x65, 0x63, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x28, 0x6d, 0x61, 0x78, 0x69, 0x6d, + 0x75, 0x6d, 0x4d, 0x6f, 0x6e, 0x74, 0x68, 0x6c, 0x79, 0x45, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, + 0x6e, 0x50, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x74, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x64, 0x54, 0x6f, + 0x6b, 0x65, 0x6e, 0x12, 0x94, 0x01, 0x0a, 0x2c, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x5f, 0x72, + 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x70, + 0x65, 0x72, 0x5f, 0x75, 0x6e, 0x69, 0x74, 0x5f, 0x73, 0x74, 0x61, 0x6b, 0x65, 0x64, 0x5f, 0x74, + 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x14, 0x20, 0x01, 0x28, 0x09, 0x42, 0x36, 0xc8, 0xde, 0x1f, 0x00, + 0xda, 0xde, 0x1f, 0x1b, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, + 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x44, 0x65, 0x63, 0xd2, + 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x44, 0x65, 0x63, 0xa8, 0xe7, 0xb0, + 0x2a, 0x01, 0x52, 0x26, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, + 0x45, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x74, 0x53, + 0x74, 0x61, 0x6b, 0x65, 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x7a, 0x0a, 0x1e, 0x65, 0x6d, + 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x75, 0x6e, 0x69, 0x74, 0x5f, + 0x73, 0x74, 0x61, 0x6b, 0x65, 0x64, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x15, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x36, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x1b, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x4c, 0x65, + 0x67, 0x61, 0x63, 0x79, 0x44, 0x65, 0x63, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, + 0x73, 0x2e, 0x44, 0x65, 0x63, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x1a, 0x65, 0x6d, 0x69, 0x73, + 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x65, 0x72, 0x55, 0x6e, 0x69, 0x74, 0x53, 0x74, 0x61, 0x6b, 0x65, + 0x64, 0x54, 0x6f, 0x6b, 0x65, 0x6e, 0x12, 0x5e, 0x0a, 0x12, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, + 0x6f, 0x6e, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x6d, 0x6f, 0x6e, 0x74, 0x68, 0x18, 0x16, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x30, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x15, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x49, 0x6e, + 0x74, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0xa8, + 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x10, 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x50, 0x65, + 0x72, 0x4d, 0x6f, 0x6e, 0x74, 0x68, 0x12, 0x57, 0x0a, 0x0e, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x5f, + 0x65, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x17, 0x20, 0x01, 0x28, 0x09, 0x42, 0x30, + 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x15, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, + 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x49, 0x6e, 0x74, 0xd2, 0xb4, 0x2d, + 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, + 0x52, 0x0d, 0x62, 0x6c, 0x6f, 0x63, 0x6b, 0x45, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x12, + 0x55, 0x0a, 0x0d, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x75, 0x74, + 0x18, 0x18, 0x20, 0x01, 0x28, 0x09, 0x42, 0x30, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x15, + 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x6d, 0x61, 0x74, + 0x68, 0x2e, 0x49, 0x6e, 0x74, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, + 0x49, 0x6e, 0x74, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x0c, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x61, + 0x74, 0x6f, 0x72, 0x43, 0x75, 0x74, 0x12, 0x5e, 0x0a, 0x12, 0x61, 0x6c, 0x6c, 0x6f, 0x72, 0x61, + 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x73, 0x5f, 0x63, 0x75, 0x74, 0x18, 0x19, 0x20, 0x01, + 0x28, 0x09, 0x42, 0x30, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x15, 0x63, 0x6f, 0x73, 0x6d, + 0x6f, 0x73, 0x73, 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x49, 0x6e, + 0x74, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x49, 0x6e, 0x74, 0xa8, + 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x10, 0x61, 0x6c, 0x6c, 0x6f, 0x72, 0x61, 0x52, 0x65, 0x77, 0x61, + 0x72, 0x64, 0x73, 0x43, 0x75, 0x74, 0x12, 0x98, 0x01, 0x0a, 0x2e, 0x70, 0x72, 0x65, 0x76, 0x69, + 0x6f, 0x75, 0x73, 0x5f, 0x72, 0x65, 0x77, 0x61, 0x72, 0x64, 0x5f, 0x65, 0x6d, 0x69, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x5f, 0x70, 0x65, 0x72, 0x5f, 0x75, 0x6e, 0x69, 0x74, 0x5f, 0x73, 0x74, 0x61, + 0x6b, 0x65, 0x64, 0x5f, 0x74, 0x6f, 0x6b, 0x65, 0x6e, 0x18, 0x1a, 0x20, 0x01, 0x28, 0x09, 0x42, + 0x36, 0xc8, 0xde, 0x1f, 0x00, 0xda, 0xde, 0x1f, 0x1b, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x73, + 0x64, 0x6b, 0x2e, 0x69, 0x6f, 0x2f, 0x6d, 0x61, 0x74, 0x68, 0x2e, 0x4c, 0x65, 0x67, 0x61, 0x63, + 0x79, 0x44, 0x65, 0x63, 0xd2, 0xb4, 0x2d, 0x0a, 0x63, 0x6f, 0x73, 0x6d, 0x6f, 0x73, 0x2e, 0x44, + 0x65, 0x63, 0xa8, 0xe7, 0xb0, 0x2a, 0x01, 0x52, 0x28, 0x70, 0x72, 0x65, 0x76, 0x69, 0x6f, 0x75, + 0x73, 0x52, 0x65, 0x77, 0x61, 0x72, 0x64, 0x45, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x50, + 0x65, 0x72, 0x55, 0x6e, 0x69, 0x74, 0x53, 0x74, 0x61, 0x6b, 0x65, 0x64, 0x54, 0x6f, 0x6b, 0x65, + 0x6e, 0x32, 0xf4, 0x02, 0x0a, 0x05, 0x51, 0x75, 0x65, 0x72, 0x79, 0x12, 0x6b, 0x0a, 0x06, 0x50, + 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x20, 0x2e, 0x6d, 0x69, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, + 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x6d, 0x69, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, 0x72, 0x61, - 0x6d, 0x73, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x21, 0x2e, 0x6d, 0x69, 0x6e, 0x74, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, 0x61, - 0x72, 0x61, 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, - 0xe4, 0x93, 0x02, 0x16, 0x12, 0x14, 0x2f, 0x6d, 0x69, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x62, 0x65, - 0x74, 0x61, 0x31, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x77, 0x0a, 0x09, 0x49, 0x6e, - 0x66, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x2e, 0x6d, 0x69, 0x6e, 0x74, 0x2e, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x6e, 0x66, 0x6c, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x6d, - 0x69, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, - 0x79, 0x49, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, - 0x73, 0x65, 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x6d, 0x69, 0x6e, - 0x74, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x42, 0xbb, 0x01, 0x0a, 0x10, 0x63, 0x6f, 0x6d, 0x2e, 0x6d, 0x69, 0x6e, 0x74, - 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, 0x0a, 0x51, 0x75, 0x65, 0x72, 0x79, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x4a, 0x67, 0x69, 0x74, 0x68, 0x75, 0x62, 0x2e, 0x63, - 0x6f, 0x6d, 0x2f, 0x61, 0x6c, 0x6c, 0x6f, 0x72, 0x61, 0x2d, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, - 0x6b, 0x2f, 0x61, 0x6c, 0x6c, 0x6f, 0x72, 0x61, 0x2d, 0x63, 0x68, 0x61, 0x69, 0x6e, 0x2f, 0x78, - 0x2f, 0x6d, 0x69, 0x6e, 0x74, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, 0x69, 0x6e, 0x74, 0x2f, 0x76, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x3b, 0x6d, 0x69, 0x6e, 0x74, 0x76, 0x31, 0x62, 0x65, 0x74, - 0x61, 0x31, 0xa2, 0x02, 0x03, 0x4d, 0x58, 0x58, 0xaa, 0x02, 0x0c, 0x4d, 0x69, 0x6e, 0x74, 0x2e, - 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xca, 0x02, 0x0c, 0x4d, 0x69, 0x6e, 0x74, 0x5c, 0x56, - 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xe2, 0x02, 0x18, 0x4d, 0x69, 0x6e, 0x74, 0x5c, 0x56, 0x31, - 0x62, 0x65, 0x74, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, - 0x61, 0xea, 0x02, 0x0d, 0x4d, 0x69, 0x6e, 0x74, 0x3a, 0x3a, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, - 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, + 0x6d, 0x73, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x22, 0x1c, 0x82, 0xd3, 0xe4, 0x93, + 0x02, 0x16, 0x12, 0x14, 0x2f, 0x6d, 0x69, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2f, 0x70, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x12, 0x77, 0x0a, 0x09, 0x49, 0x6e, 0x66, 0x6c, + 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x23, 0x2e, 0x6d, 0x69, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x62, + 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, 0x6e, 0x66, 0x6c, 0x61, 0x74, + 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x24, 0x2e, 0x6d, 0x69, 0x6e, + 0x74, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x49, + 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, + 0x22, 0x1f, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x19, 0x12, 0x17, 0x2f, 0x6d, 0x69, 0x6e, 0x74, 0x2f, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x69, 0x6e, 0x66, 0x6c, 0x61, 0x74, 0x69, 0x6f, + 0x6e, 0x12, 0x84, 0x01, 0x0a, 0x0c, 0x45, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, + 0x66, 0x6f, 0x12, 0x26, 0x2e, 0x6d, 0x69, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, + 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x45, 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, + 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x71, 0x75, 0x65, 0x73, 0x74, 0x1a, 0x27, 0x2e, 0x6d, 0x69, 0x6e, + 0x74, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x45, + 0x6d, 0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x66, 0x6f, 0x52, 0x65, 0x73, 0x70, 0x6f, + 0x6e, 0x73, 0x65, 0x22, 0x23, 0x82, 0xd3, 0xe4, 0x93, 0x02, 0x1d, 0x12, 0x1b, 0x2f, 0x6d, 0x69, + 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x2f, 0x65, 0x6d, 0x69, 0x73, 0x73, + 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x42, 0xbb, 0x01, 0x0a, 0x10, 0x63, 0x6f, 0x6d, + 0x2e, 0x6d, 0x69, 0x6e, 0x74, 0x2e, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x42, 0x0a, 0x51, + 0x75, 0x65, 0x72, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x4a, 0x67, 0x69, 0x74, + 0x68, 0x75, 0x62, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x61, 0x6c, 0x6c, 0x6f, 0x72, 0x61, 0x2d, 0x6e, + 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2f, 0x61, 0x6c, 0x6c, 0x6f, 0x72, 0x61, 0x2d, 0x63, 0x68, + 0x61, 0x69, 0x6e, 0x2f, 0x78, 0x2f, 0x6d, 0x69, 0x6e, 0x74, 0x2f, 0x61, 0x70, 0x69, 0x2f, 0x6d, + 0x69, 0x6e, 0x74, 0x2f, 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x3b, 0x6d, 0x69, 0x6e, 0x74, + 0x76, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xa2, 0x02, 0x03, 0x4d, 0x58, 0x58, 0xaa, 0x02, 0x0c, + 0x4d, 0x69, 0x6e, 0x74, 0x2e, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xca, 0x02, 0x0c, 0x4d, + 0x69, 0x6e, 0x74, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0xe2, 0x02, 0x18, 0x4d, 0x69, + 0x6e, 0x74, 0x5c, 0x56, 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x5c, 0x47, 0x50, 0x42, 0x4d, 0x65, + 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0xea, 0x02, 0x0d, 0x4d, 0x69, 0x6e, 0x74, 0x3a, 0x3a, 0x56, + 0x31, 0x62, 0x65, 0x74, 0x61, 0x31, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, } var ( @@ -1797,25 +4609,30 @@ func file_mint_v1beta1_query_proto_rawDescGZIP() []byte { return file_mint_v1beta1_query_proto_rawDescData } -var file_mint_v1beta1_query_proto_msgTypes = make([]protoimpl.MessageInfo, 4) +var file_mint_v1beta1_query_proto_msgTypes = make([]protoimpl.MessageInfo, 6) var file_mint_v1beta1_query_proto_goTypes = []interface{}{ - (*QueryParamsRequest)(nil), // 0: mint.v1beta1.QueryParamsRequest - (*QueryParamsResponse)(nil), // 1: mint.v1beta1.QueryParamsResponse - (*QueryInflationRequest)(nil), // 2: mint.v1beta1.QueryInflationRequest - (*QueryInflationResponse)(nil), // 3: mint.v1beta1.QueryInflationResponse - (*Params)(nil), // 4: mint.v1beta1.Params + (*QueryParamsRequest)(nil), // 0: mint.v1beta1.QueryParamsRequest + (*QueryParamsResponse)(nil), // 1: mint.v1beta1.QueryParamsResponse + (*QueryInflationRequest)(nil), // 2: mint.v1beta1.QueryInflationRequest + (*QueryInflationResponse)(nil), // 3: mint.v1beta1.QueryInflationResponse + (*QueryEmissionInfoRequest)(nil), // 4: mint.v1beta1.QueryEmissionInfoRequest + (*QueryEmissionInfoResponse)(nil), // 5: mint.v1beta1.QueryEmissionInfoResponse + (*Params)(nil), // 6: mint.v1beta1.Params } var file_mint_v1beta1_query_proto_depIdxs = []int32{ - 4, // 0: mint.v1beta1.QueryParamsResponse.params:type_name -> mint.v1beta1.Params - 0, // 1: mint.v1beta1.Query.Params:input_type -> mint.v1beta1.QueryParamsRequest - 2, // 2: mint.v1beta1.Query.Inflation:input_type -> mint.v1beta1.QueryInflationRequest - 1, // 3: mint.v1beta1.Query.Params:output_type -> mint.v1beta1.QueryParamsResponse - 3, // 4: mint.v1beta1.Query.Inflation:output_type -> mint.v1beta1.QueryInflationResponse - 3, // [3:5] is the sub-list for method output_type - 1, // [1:3] is the sub-list for method input_type - 1, // [1:1] is the sub-list for extension type_name - 1, // [1:1] is the sub-list for extension extendee - 0, // [0:1] is the sub-list for field type_name + 6, // 0: mint.v1beta1.QueryParamsResponse.params:type_name -> mint.v1beta1.Params + 6, // 1: mint.v1beta1.QueryEmissionInfoResponse.params:type_name -> mint.v1beta1.Params + 0, // 2: mint.v1beta1.Query.Params:input_type -> mint.v1beta1.QueryParamsRequest + 2, // 3: mint.v1beta1.Query.Inflation:input_type -> mint.v1beta1.QueryInflationRequest + 4, // 4: mint.v1beta1.Query.EmissionInfo:input_type -> mint.v1beta1.QueryEmissionInfoRequest + 1, // 5: mint.v1beta1.Query.Params:output_type -> mint.v1beta1.QueryParamsResponse + 3, // 6: mint.v1beta1.Query.Inflation:output_type -> mint.v1beta1.QueryInflationResponse + 5, // 7: mint.v1beta1.Query.EmissionInfo:output_type -> mint.v1beta1.QueryEmissionInfoResponse + 5, // [5:8] is the sub-list for method output_type + 2, // [2:5] is the sub-list for method input_type + 2, // [2:2] is the sub-list for extension type_name + 2, // [2:2] is the sub-list for extension extendee + 0, // [0:2] is the sub-list for field type_name } func init() { file_mint_v1beta1_query_proto_init() } @@ -1873,6 +4690,30 @@ func file_mint_v1beta1_query_proto_init() { return nil } } + file_mint_v1beta1_query_proto_msgTypes[4].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryEmissionInfoRequest); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } + file_mint_v1beta1_query_proto_msgTypes[5].Exporter = func(v interface{}, i int) interface{} { + switch v := v.(*QueryEmissionInfoResponse); i { + case 0: + return &v.state + case 1: + return &v.sizeCache + case 2: + return &v.unknownFields + default: + return nil + } + } } type x struct{} out := protoimpl.TypeBuilder{ @@ -1880,7 +4721,7 @@ func file_mint_v1beta1_query_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: file_mint_v1beta1_query_proto_rawDesc, NumEnums: 0, - NumMessages: 4, + NumMessages: 6, NumExtensions: 0, NumServices: 1, }, diff --git a/x/mint/api/v1beta1/query_grpc.pb.go b/x/mint/api/v1beta1/query_grpc.pb.go index 620d4c7db..d5757386e 100644 --- a/x/mint/api/v1beta1/query_grpc.pb.go +++ b/x/mint/api/v1beta1/query_grpc.pb.go @@ -19,8 +19,9 @@ import ( const _ = grpc.SupportPackageIsVersion7 const ( - Query_Params_FullMethodName = "/mint.v1beta1.Query/Params" - Query_Inflation_FullMethodName = "/mint.v1beta1.Query/Inflation" + Query_Params_FullMethodName = "/mint.v1beta1.Query/Params" + Query_Inflation_FullMethodName = "/mint.v1beta1.Query/Inflation" + Query_EmissionInfo_FullMethodName = "/mint.v1beta1.Query/EmissionInfo" ) // QueryClient is the client API for Query service. @@ -31,6 +32,7 @@ type QueryClient interface { Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) // Inflation returns the current minting inflation value. Inflation(ctx context.Context, in *QueryInflationRequest, opts ...grpc.CallOption) (*QueryInflationResponse, error) + EmissionInfo(ctx context.Context, in *QueryEmissionInfoRequest, opts ...grpc.CallOption) (*QueryEmissionInfoResponse, error) } type queryClient struct { @@ -59,6 +61,15 @@ func (c *queryClient) Inflation(ctx context.Context, in *QueryInflationRequest, return out, nil } +func (c *queryClient) EmissionInfo(ctx context.Context, in *QueryEmissionInfoRequest, opts ...grpc.CallOption) (*QueryEmissionInfoResponse, error) { + out := new(QueryEmissionInfoResponse) + err := c.cc.Invoke(ctx, Query_EmissionInfo_FullMethodName, in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // QueryServer is the server API for Query service. // All implementations must embed UnimplementedQueryServer // for forward compatibility @@ -67,6 +78,7 @@ type QueryServer interface { Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) // Inflation returns the current minting inflation value. Inflation(context.Context, *QueryInflationRequest) (*QueryInflationResponse, error) + EmissionInfo(context.Context, *QueryEmissionInfoRequest) (*QueryEmissionInfoResponse, error) mustEmbedUnimplementedQueryServer() } @@ -80,6 +92,9 @@ func (UnimplementedQueryServer) Params(context.Context, *QueryParamsRequest) (*Q func (UnimplementedQueryServer) Inflation(context.Context, *QueryInflationRequest) (*QueryInflationResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Inflation not implemented") } +func (UnimplementedQueryServer) EmissionInfo(context.Context, *QueryEmissionInfoRequest) (*QueryEmissionInfoResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method EmissionInfo not implemented") +} func (UnimplementedQueryServer) mustEmbedUnimplementedQueryServer() {} // UnsafeQueryServer may be embedded to opt out of forward compatibility for this service. @@ -129,6 +144,24 @@ func _Query_Inflation_Handler(srv interface{}, ctx context.Context, dec func(int return interceptor(ctx, in, info, handler) } +func _Query_EmissionInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryEmissionInfoRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).EmissionInfo(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: Query_EmissionInfo_FullMethodName, + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).EmissionInfo(ctx, req.(*QueryEmissionInfoRequest)) + } + return interceptor(ctx, in, info, handler) +} + // Query_ServiceDesc is the grpc.ServiceDesc for Query service. // It's only intended for direct use with grpc.RegisterService, // and not to be introspected or modified (even as a copy) @@ -144,6 +177,10 @@ var Query_ServiceDesc = grpc.ServiceDesc{ MethodName: "Inflation", Handler: _Query_Inflation_Handler, }, + { + MethodName: "EmissionInfo", + Handler: _Query_EmissionInfo_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "mint/v1beta1/query.proto", diff --git a/x/mint/keeper/emissions.go b/x/mint/keeper/emissions.go index d25054c34..b36c8d659 100644 --- a/x/mint/keeper/emissions.go +++ b/x/mint/keeper/emissions.go @@ -66,6 +66,39 @@ func GetNumStakedTokens(ctx context.Context, k types.MintKeeper) (math.Int, erro return cosmosValidatorsStaked.Add(reputersStaked), nil } +// return the circulating supply of tokens +func GetCirculatingSupply( + ctx context.Context, + k types.MintKeeper, + params types.Params, + blockHeight uint64, + blocksPerMonth uint64, +) ( + circulatingSupply, + totalSupply, + lockedVestingTokens, + ecosystemLocked math.Int, + err error, +) { + ecosystemBalance, err := k.GetEcosystemBalance(ctx, params.MintDenom) + if err != nil { + return math.Int{}, math.Int{}, math.Int{}, math.Int{}, err + } + totalSupply = params.MaxSupply + lockedVestingTokens, _, _, _ = GetLockedVestingTokens( + blocksPerMonth, + math.NewIntFromUint64(blockHeight), + params, + ) + ecosystemMintSupplyRemaining, err := k.GetEcosystemMintSupplyRemaining(ctx, params) + if err != nil { + return math.Int{}, math.Int{}, math.Int{}, math.Int{}, err + } + ecosystemLocked = ecosystemBalance.Add(ecosystemMintSupplyRemaining) + circulatingSupply = totalSupply.Sub(lockedVestingTokens).Sub(ecosystemLocked) + return circulatingSupply, totalSupply, lockedVestingTokens, ecosystemLocked, nil +} + // The total amount of tokens emitted for a full month // \cal E_i = e_i*N_{staked,i} // where e_i is the emission per unit staked token @@ -179,3 +212,19 @@ func GetExponentialMovingAverage( secondTerm := inverseAlpha.Mul(previousRewardEmissionPerUnitStakedToken) return firstTerm.Add(secondTerm) } + +// How many tokens are left that the ecosystem bucket is allowed to mint? +func (k Keeper) GetEcosystemMintSupplyRemaining( + ctx context.Context, + params types.Params, +) (math.Int, error) { + // calculate how many tokens left the ecosystem account is allowed to mint + ecosystemTokensAlreadyMinted, err := k.EcosystemTokensMinted.Get(ctx) + if err != nil { + return math.Int{}, err + } + // check that you are allowed to mint more tokens and we haven't hit the max supply + ecosystemMaxSupply := math.LegacyNewDecFromInt(params.MaxSupply). + Mul(params.EcosystemTreasuryPercentOfTotalSupply).TruncateInt() + return ecosystemMaxSupply.Sub(ecosystemTokensAlreadyMinted), nil +} diff --git a/x/mint/keeper/emissions_test.go b/x/mint/keeper/emissions_test.go index e3cbd99fc..38dac0282 100644 --- a/x/mint/keeper/emissions_test.go +++ b/x/mint/keeper/emissions_test.go @@ -138,10 +138,14 @@ func (s *IntegrationTestSuite) TestEHatTargetFromCsv() { expectedResult := epoch61("ehat_target_i") simulatorFEmission := cosmosMath.LegacyMustNewDecFromStr("0.025") - networkTokensTotal := epoch("network_tokens_total").SdkIntTrim() - ecosystemTokensTotal := epoch("ecosystem_tokens_total").SdkIntTrim() - networkTokensCirculating := epoch("network_tokens_circulating").SdkIntTrim() - networkTokensStaked := epoch("network_tokens_staked").SdkIntTrim() + networkTokensTotal, err := epoch("network_tokens_total").SdkIntTrim() + s.Require().NoError(err) + ecosystemTokensTotal, err := epoch("ecosystem_tokens_total").SdkIntTrim() + s.Require().NoError(err) + networkTokensCirculating, err := epoch("network_tokens_circulating").SdkIntTrim() + s.Require().NoError(err) + networkTokensStaked, err := epoch("network_tokens_staked").SdkIntTrim() + s.Require().NoError(err) fmt.Println("f_emission", simulatorFEmission) fmt.Println("ecosystem_tokens_total", ecosystemTokensTotal) fmt.Println("network_tokens_circulating", networkTokensCirculating) @@ -192,8 +196,10 @@ func (s *IntegrationTestSuite) TestEHatMaxAtGenesisFromCsv() { func (s *IntegrationTestSuite) TestEhatIFromCsv() { epoch := s.epochGet[61] expectedResult := epoch("ehat_i") - ehatMaxI := epoch("ehat_max_i").SdkLegacyDec() - ehatTargetI := epoch("ehat_target_i").SdkLegacyDec() + ehatMaxI, err := epoch("ehat_max_i").SdkLegacyDec() + s.Require().NoError(err) + ehatTargetI, err := epoch("ehat_target_i").SdkLegacyDec() + s.Require().NoError(err) result := keeper.GetCappedTargetEmissionPerUnitStakedToken( ehatTargetI, @@ -207,8 +213,10 @@ func (s *IntegrationTestSuite) TestEhatIFromCsv() { // calculate e_i for the 61st epoch func (s *IntegrationTestSuite) TestESubIFromCsv() { expectedResult := s.epochGet[61]("e_i") - targetE_i := s.epochGet[61]("ehat_target_i").SdkLegacyDec() - previousE_i := s.epochGet[60]("e_i").SdkLegacyDec() + targetE_i, err := s.epochGet[61]("ehat_target_i").SdkLegacyDec() + s.Require().NoError(err) + previousE_i, err := s.epochGet[60]("e_i").SdkLegacyDec() + s.Require().NoError(err) // this is taken directly from the python notebook alpha_Emission := cosmosMath.LegacyMustNewDecFromStr("0.1") @@ -227,10 +235,12 @@ func (s *IntegrationTestSuite) TestESubIFromCsv() { // GetTotalEmissionPerMonth func (s *IntegrationTestSuite) TestCalEFromCsv() { expectedResult := s.epochGet[61]("ecosystem_tokens_emission") - rewardEmissionPerUnitStakedToken := s.epochGet[61]("e_i").SdkLegacyDec() + rewardEmissionPerUnitStakedToken, err := s.epochGet[61]("e_i").SdkLegacyDec() + s.Require().NoError(err) // use the value from epoch 60 rather than 61 because the python notebook // updates the value AFTER calculating the total emission and handing out rewards - numStakedTokens := s.epochGet[60]("network_tokens_staked").SdkIntTrim() + numStakedTokens, err := s.epochGet[60]("network_tokens_staked").SdkIntTrim() + s.Require().NoError(err) totalEmission := keeper.GetTotalEmissionPerMonth( rewardEmissionPerUnitStakedToken, numStakedTokens, diff --git a/x/mint/keeper/keeper.go b/x/mint/keeper/keeper.go index 46224ba0a..ff8bbaf9b 100644 --- a/x/mint/keeper/keeper.go +++ b/x/mint/keeper/keeper.go @@ -201,7 +201,11 @@ func (k Keeper) GetPreviousPercentageRewardToStakedReputers(ctx context.Context) if err != nil { return math.LegacyDec{}, err } - return stakedPercent.SdkLegacyDec(), nil + stakedPercentLegacyDec, err := stakedPercent.SdkLegacyDec() + if err != nil { + return math.LegacyDec{}, err + } + return stakedPercentLegacyDec, nil } // wrapper around emissions keeper call to get the number of blocks expected in a month diff --git a/x/mint/keeper/query_server.go b/x/mint/keeper/query_server.go index 7a13e6809..dfd405b32 100644 --- a/x/mint/keeper/query_server.go +++ b/x/mint/keeper/query_server.go @@ -3,8 +3,11 @@ package keeper import ( "context" + "cosmossdk.io/errors" + "cosmossdk.io/math" "github.com/allora-network/allora-chain/x/mint/types" + sdk "github.com/cosmos/cosmos-sdk/types" ) var _ types.QueryServer = queryServer{} @@ -32,8 +35,13 @@ func (q queryServer) Params(ctx context.Context, _ *types.QueryParamsRequest) (* func (q queryServer) Inflation(ctx context.Context, _ *types.QueryInflationRequest) (*types.QueryInflationResponse, error) { // as a crude approximation we take the last blockEmission // multiply by the amount of blocks in a year, - // then use that relative to the current supply as "inflation" + // then use that relative to the current circulating supply as "inflation" // Inflation Rate = ((B-A)/A) x 100 + moduleParams, err := q.k.GetParams(ctx) + if err != nil { + return nil, err + } + blockHeight := uint64(sdk.UnwrapSDKContext(ctx).BlockHeight()) blockEmission, err := q.k.PreviousBlockEmission.Get(ctx) if err != nil { return nil, err @@ -46,10 +54,147 @@ func (q queryServer) Inflation(ctx context.Context, _ *types.QueryInflationReque Mul(math.NewIntFromUint64(blocksPerMonth)). Mul(math.NewInt(12)). ToLegacyDec() - totalSupply := q.k.GetTotalCurrTokenSupply(ctx).Amount.ToLegacyDec() - inflation := EmissionPerYearAtCurrentBlockEmissionRate.Quo(totalSupply).MulInt64(100) + circulatingSupply, _, _, _, err := GetCirculatingSupply(ctx, q.k, moduleParams, blockHeight, blocksPerMonth) + if err != nil { + return nil, err + } + inflation := EmissionPerYearAtCurrentBlockEmissionRate.QuoInt(circulatingSupply).MulInt64(100) ret := types.QueryInflationResponse{ Inflation: inflation, } return &ret, nil } + +// mint and inflation emission rate endpoint +// nice way to access live chain data +func (q queryServer) EmissionInfo(ctx context.Context, _ *types.QueryEmissionInfoRequest) (*types.QueryEmissionInfoResponse, error) { + moduleParams, err := q.k.Params.Get(ctx) + if err != nil { + return nil, errors.Wrap(err, "failed to get module params") + } + + ecosystemBalance, err := q.k.GetEcosystemBalance(ctx, moduleParams.MintDenom) + if err != nil { + return nil, errors.Wrap(err, "failed to get ecosystem balance") + } + + previousBlockEmission, err := q.k.PreviousBlockEmission.Get(ctx) + if err != nil { + return nil, errors.Wrap(err, "failed to get previous block emission") + } + + ecosystemMintSupplyRemaining, err := q.k.GetEcosystemMintSupplyRemaining(ctx, moduleParams) + if err != nil { + return nil, errors.Wrap(err, "failed to get ecosystem mint supply remaining") + } + + blocksPerMonth, err := q.k.GetParamsBlocksPerMonth(ctx) + if err != nil { + return nil, errors.Wrap(err, "failed to get blocks per month") + } + + sdkCtx := sdk.UnwrapSDKContext(ctx) + blockHeight := uint64(sdkCtx.BlockHeight()) + numberOfRecalcs := blockHeight / blocksPerMonth + blockHeightTarget_e_i_LastCalculated := numberOfRecalcs*blocksPerMonth + 1 + blockHeightTarget_e_i_Next := blockHeightTarget_e_i_LastCalculated + blocksPerMonth + + networkStakedTokens, err := GetNumStakedTokens(ctx, q.k) + if err != nil { + return nil, errors.Wrap(err, "failed to get number of staked tokens") + } + _, lockedVestingTokensPreseed, + lockedVestingTokensSeed, lockedVestingTokensTeam := GetLockedVestingTokens( + blocksPerMonth, + math.NewIntFromUint64(blockHeight), + moduleParams) + circulatingSupply, + totalSupply, + lockedVestingTokensTotal, + ecosystemLocked, + err := GetCirculatingSupply(ctx, q.k, moduleParams, blockHeight, blocksPerMonth) + if err != nil { + return nil, errors.Wrap(err, "failed to get circulating supply") + } + targetRewardEmissionPerUnitStakedToken, + err := GetTargetRewardEmissionPerUnitStakedToken( + moduleParams.FEmission, + ecosystemLocked, + networkStakedTokens, + circulatingSupply, + moduleParams.MaxSupply, + ) + if err != nil { + return nil, errors.Wrap(err, "failed to get target reward emission per unit staked token") + } + reputersPercent, err := q.k.GetPreviousPercentageRewardToStakedReputers(ctx) + if err != nil { + return nil, errors.Wrap(err, "failed to get previous percentage reward to staked reputers") + } + vPercentADec, err := q.k.GetValidatorsVsAlloraPercentReward(ctx) + if err != nil { + return nil, errors.Wrap(err, "failed to get validators vs allora percent reward") + } + vPercent, err := vPercentADec.SdkLegacyDec() + if err != nil { + return nil, errors.Wrap(err, "failed to convert validators vs allora percent reward to legacy dec") + } + maximumMonthlyEmissionPerUnitStakedToken := GetMaximumMonthlyEmissionPerUnitStakedToken( + moduleParams.MaximumMonthlyPercentageYield, + reputersPercent, + vPercent, + ) + targetRewardEmissionPerUnitStakedToken = GetCappedTargetEmissionPerUnitStakedToken( + targetRewardEmissionPerUnitStakedToken, + maximumMonthlyEmissionPerUnitStakedToken, + ) + var previousRewardEmissionPerUnitStakedToken math.LegacyDec + // if this is the first month/time we're calculating the target emission... + if blockHeight < blocksPerMonth { + previousRewardEmissionPerUnitStakedToken = targetRewardEmissionPerUnitStakedToken + } else { + previousRewardEmissionPerUnitStakedToken, err = q.k.GetPreviousRewardEmissionPerUnitStakedToken(ctx) + if err != nil { + return nil, errors.Wrap(err, "failed to get previous reward emission per unit staked token") + } + } + emissionPerUnitStakedToken := GetExponentialMovingAverage( + targetRewardEmissionPerUnitStakedToken, + moduleParams.OneMonthSmoothingDegree, + previousRewardEmissionPerUnitStakedToken, + ) + emissionPerMonth := GetTotalEmissionPerMonth(emissionPerUnitStakedToken, networkStakedTokens) + blockEmission := emissionPerMonth. + Quo(math.NewIntFromUint64(blocksPerMonth)) + validatorCut := vPercent.Mul(blockEmission.ToLegacyDec()).TruncateInt() + alloraRewardsCut := blockEmission.Sub(validatorCut) + + return &types.QueryEmissionInfoResponse{ + Params: moduleParams, + EcosystemBalance: ecosystemBalance, + PreviousBlockEmission: previousBlockEmission, + EcosystemMintSupplyRemaining: ecosystemMintSupplyRemaining, + BlocksPerMonth: blocksPerMonth, + BlockHeightTargetEILastCalculated: blockHeightTarget_e_i_LastCalculated, + BlockHeightTargetEINextCalculated: blockHeightTarget_e_i_Next, + NetworkStakedTokens: networkStakedTokens, + LockedVestingTokensTotal: lockedVestingTokensTotal, + LockedVestingTokensInvestorsPreseed: lockedVestingTokensPreseed, + LockedVestingTokensInvestorsSeed: lockedVestingTokensSeed, + LockedVestingTokensTeam: lockedVestingTokensTeam, + EcosystemLocked: ecosystemLocked, + CirculatingSupply: circulatingSupply, + MaxSupply: totalSupply, + TargetEmissionRatePerUnitStakedToken: targetRewardEmissionPerUnitStakedToken, + ReputersPercent: reputersPercent, + ValidatorsPercent: vPercent, + MaximumMonthlyEmissionPerUnitStakedToken: maximumMonthlyEmissionPerUnitStakedToken, + TargetRewardEmissionPerUnitStakedToken: targetRewardEmissionPerUnitStakedToken, + EmissionPerUnitStakedToken: emissionPerUnitStakedToken, + EmissionPerMonth: emissionPerMonth, + BlockEmission: blockEmission, + ValidatorCut: validatorCut, + AlloraRewardsCut: alloraRewardsCut, + PreviousRewardEmissionPerUnitStakedToken: previousRewardEmissionPerUnitStakedToken, + }, nil +} diff --git a/x/mint/module/abci.go b/x/mint/module/abci.go index 425eb5b58..5a4646a5b 100644 --- a/x/mint/module/abci.go +++ b/x/mint/module/abci.go @@ -28,14 +28,14 @@ func GetEmissionPerMonth( if err != nil { return math.Int{}, math.LegacyDec{}, err } - totalSupply := params.MaxSupply - lockedVestingTokens, _, _, _ := keeper.GetLockedVestingTokens( - blocksPerMonth, - math.NewIntFromUint64(blockHeight), - params, - ) - ecosystemLocked := ecosystemBalance.Add(ecosystemMintSupplyRemaining) - circulatingSupply := totalSupply.Sub(lockedVestingTokens).Sub(ecosystemLocked) + circulatingSupply, + totalSupply, + lockedVestingTokens, + ecosystemLocked, + err := keeper.GetCirculatingSupply(ctx, k, params, blockHeight, blocksPerMonth) + if err != nil { + return math.Int{}, math.LegacyDec{}, err + } if circulatingSupply.IsNegative() { ctx.Logger().Error( "Negative circulating supply", @@ -113,23 +113,6 @@ func GetEmissionPerMonth( return emissionPerMonth, emissionPerUnitStakedToken, nil } -// How many tokens are left that the ecosystem bucket is allowed to mint? -func GetEcosystemMintSupplyRemaining( - ctx sdk.Context, - k keeper.Keeper, - params types.Params, -) (math.Int, error) { - // calculate how many tokens left the ecosystem account is allowed to mint - ecosystemTokensAlreadyMinted, err := k.EcosystemTokensMinted.Get(ctx) - if err != nil { - return math.Int{}, err - } - // check that you are allowed to mint more tokens and we haven't hit the max supply - ecosystemMaxSupply := math.LegacyNewDecFromInt(params.MaxSupply). - Mul(params.EcosystemTreasuryPercentOfTotalSupply).TruncateInt() - return ecosystemMaxSupply.Sub(ecosystemTokensAlreadyMinted), nil -} - func BeginBlocker(ctx context.Context, k keeper.Keeper) error { sdkCtx := sdk.UnwrapSDKContext(ctx) @@ -149,7 +132,7 @@ func BeginBlocker(ctx context.Context, k keeper.Keeper) error { if err != nil { return err } - ecosystemMintSupplyRemaining, err := GetEcosystemMintSupplyRemaining(sdkCtx, k, params) + ecosystemMintSupplyRemaining, err := k.GetEcosystemMintSupplyRemaining(sdkCtx, params) if err != nil { return err } @@ -163,7 +146,10 @@ func BeginBlocker(ctx context.Context, k keeper.Keeper) error { if err != nil { return err } - vPercent := vPercentADec.SdkLegacyDec() + vPercent, err := vPercentADec.SdkLegacyDec() + if err != nil { + return err + } // every month on the first block of the month, update the emissions rate if blockHeight%blocksPerMonth == 1 { // easier to test when genesis starts at 1 emissionPerMonth, emissionPerUnitStakedToken, err := GetEmissionPerMonth( diff --git a/x/mint/module/autocli.go b/x/mint/module/autocli.go index 5fac5166e..23a7dc851 100644 --- a/x/mint/module/autocli.go +++ b/x/mint/module/autocli.go @@ -20,6 +20,11 @@ func (am AppModule) AutoCLIOptions() *autocliv1.ModuleOptions { Use: "inflation", Short: "Query the current minting inflation value", }, + { + RpcMethod: "EmissionInfo", + Use: "emission-info", + Short: "Get a bunch of debugging info about the inflation rate", + }, }, }, Tx: &autocliv1.ServiceCommandDescriptor{ diff --git a/x/mint/module/module_test.go b/x/mint/module/module_test.go index 984c65e1c..7bcfcaef0 100644 --- a/x/mint/module/module_test.go +++ b/x/mint/module/module_test.go @@ -159,7 +159,7 @@ func TestMintModuleTestSuite(t *testing.T) { func (s *MintModuleTestSuite) TestTotalStakeGoUpTargetEmissionPerUnitStakeGoDown() { params, err := s.mintKeeper.GetParams(s.ctx) s.Require().NoError(err) - ecosystemMintSupplyRemaining, err := mint.GetEcosystemMintSupplyRemaining(s.ctx, s.mintKeeper, params) + ecosystemMintSupplyRemaining, err := s.mintKeeper.GetEcosystemMintSupplyRemaining(s.ctx, params) s.Require().NoError(err) // stake enough tokens so that the networkStaked is non zero stake, ok := cosmosMath.NewIntFromString("300000000000000000000000000") diff --git a/x/mint/proto/mint/v1beta1/query.proto b/x/mint/proto/mint/v1beta1/query.proto index 89eaa4f61..79686c3c9 100644 --- a/x/mint/proto/mint/v1beta1/query.proto +++ b/x/mint/proto/mint/v1beta1/query.proto @@ -19,6 +19,9 @@ service Query { rpc Inflation(QueryInflationRequest) returns (QueryInflationResponse) { option (google.api.http).get = "/mint/v1beta1/inflation"; } + rpc EmissionInfo(QueryEmissionInfoRequest) returns (QueryEmissionInfoResponse) { + option (google.api.http).get = "/mint/v1beta1/emission_info"; + } } // QueryParamsRequest is the request type for the Query/Params RPC method. @@ -44,3 +47,147 @@ message QueryInflationResponse { (amino.dont_omitempty) = true ]; } + +// query for a big dump of mint module info +message QueryEmissionInfoRequest {} + +// return information about the emissions rate on query +message QueryEmissionInfoResponse { + Params params = 1 [(gogoproto.nullable) = false, (amino.dont_omitempty) = true]; + + string ecosystem_balance = 2 [ + (cosmos_proto.scalar) = "cosmos.Int", + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; + string previous_block_emission = 3 [ + (cosmos_proto.scalar) = "cosmos.Int", + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; + string ecosystem_mint_supply_remaining = 4 [ + (cosmos_proto.scalar) = "cosmos.Int", + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; + uint64 blocks_per_month = 5; + uint64 block_height_target_e_i_last_calculated = 6; + uint64 block_height_target_e_i_next_calculated = 7; + string network_staked_tokens = 8 [ + (cosmos_proto.scalar) = "cosmos.Int", + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; + string locked_vesting_tokens_total = 9 [ + (cosmos_proto.scalar) = "cosmos.Int", + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; + string locked_vesting_tokens_investors_preseed = 10 [ + (cosmos_proto.scalar) = "cosmos.Int", + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; + string locked_vesting_tokens_investors_seed = 11 [ + (cosmos_proto.scalar) = "cosmos.Int", + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; + string locked_vesting_tokens_team = 12 [ + (cosmos_proto.scalar) = "cosmos.Int", + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; + string ecosystem_locked = 13 [ + (cosmos_proto.scalar) = "cosmos.Int", + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; + string circulating_supply = 14 [ + (cosmos_proto.scalar) = "cosmos.Int", + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; + string max_supply = 15 [ + (cosmos_proto.scalar) = "cosmos.Int", + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; + string target_emission_rate_per_unit_staked_token = 16 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; + string reputers_percent = 17 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; + string validators_percent = 18 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; + string maximum_monthly_emission_per_unit_staked_token = 19 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; + string target_reward_emission_per_unit_staked_token = 20 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; + string emission_per_unit_staked_token = 21 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; + string emission_per_month = 22 [ + (cosmos_proto.scalar) = "cosmos.Int", + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; + string block_emission = 23 [ + (cosmos_proto.scalar) = "cosmos.Int", + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; + string validator_cut = 24 [ + (cosmos_proto.scalar) = "cosmos.Int", + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; + string allora_rewards_cut = 25 [ + (cosmos_proto.scalar) = "cosmos.Int", + (gogoproto.customtype) = "cosmossdk.io/math.Int", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; + string previous_reward_emission_per_unit_staked_token = 26 [ + (cosmos_proto.scalar) = "cosmos.Dec", + (gogoproto.customtype) = "cosmossdk.io/math.LegacyDec", + (gogoproto.nullable) = false, + (amino.dont_omitempty) = true + ]; +} diff --git a/x/mint/types/expected_keepers.go b/x/mint/types/expected_keepers.go index 1d93aa57d..9ab39a3d3 100644 --- a/x/mint/types/expected_keepers.go +++ b/x/mint/types/expected_keepers.go @@ -50,4 +50,6 @@ type MintKeeper interface { GetTotalCurrTokenSupply(ctx context.Context) sdk.Coin GetPreviousPercentageRewardToStakedReputers(ctx context.Context) (math.LegacyDec, error) GetPreviousRewardEmissionPerUnitStakedToken(ctx context.Context) (math.LegacyDec, error) + GetEcosystemMintSupplyRemaining(ctx context.Context, params Params) (math.Int, error) + GetEcosystemBalance(ctx context.Context, mintDenom string) (math.Int, error) } diff --git a/x/mint/types/query.pb.go b/x/mint/types/query.pb.go index 11205e23d..f0a912729 100644 --- a/x/mint/types/query.pb.go +++ b/x/mint/types/query.pb.go @@ -192,43 +192,216 @@ func (m *QueryInflationResponse) XXX_DiscardUnknown() { var xxx_messageInfo_QueryInflationResponse proto.InternalMessageInfo +// query for a big dump of mint module info +type QueryEmissionInfoRequest struct { +} + +func (m *QueryEmissionInfoRequest) Reset() { *m = QueryEmissionInfoRequest{} } +func (m *QueryEmissionInfoRequest) String() string { return proto.CompactTextString(m) } +func (*QueryEmissionInfoRequest) ProtoMessage() {} +func (*QueryEmissionInfoRequest) Descriptor() ([]byte, []int) { + return fileDescriptor_b0718dda172d2cb4, []int{4} +} +func (m *QueryEmissionInfoRequest) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryEmissionInfoRequest) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryEmissionInfoRequest.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryEmissionInfoRequest) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryEmissionInfoRequest.Merge(m, src) +} +func (m *QueryEmissionInfoRequest) XXX_Size() int { + return m.Size() +} +func (m *QueryEmissionInfoRequest) XXX_DiscardUnknown() { + xxx_messageInfo_QueryEmissionInfoRequest.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryEmissionInfoRequest proto.InternalMessageInfo + +// return information about the emissions rate on query +type QueryEmissionInfoResponse struct { + Params Params `protobuf:"bytes,1,opt,name=params,proto3" json:"params"` + EcosystemBalance cosmossdk_io_math.Int `protobuf:"bytes,2,opt,name=ecosystem_balance,json=ecosystemBalance,proto3,customtype=cosmossdk.io/math.Int" json:"ecosystem_balance"` + PreviousBlockEmission cosmossdk_io_math.Int `protobuf:"bytes,3,opt,name=previous_block_emission,json=previousBlockEmission,proto3,customtype=cosmossdk.io/math.Int" json:"previous_block_emission"` + EcosystemMintSupplyRemaining cosmossdk_io_math.Int `protobuf:"bytes,4,opt,name=ecosystem_mint_supply_remaining,json=ecosystemMintSupplyRemaining,proto3,customtype=cosmossdk.io/math.Int" json:"ecosystem_mint_supply_remaining"` + BlocksPerMonth uint64 `protobuf:"varint,5,opt,name=blocks_per_month,json=blocksPerMonth,proto3" json:"blocks_per_month,omitempty"` + BlockHeightTargetEILastCalculated uint64 `protobuf:"varint,6,opt,name=block_height_target_e_i_last_calculated,json=blockHeightTargetEILastCalculated,proto3" json:"block_height_target_e_i_last_calculated,omitempty"` + BlockHeightTargetEINextCalculated uint64 `protobuf:"varint,7,opt,name=block_height_target_e_i_next_calculated,json=blockHeightTargetEINextCalculated,proto3" json:"block_height_target_e_i_next_calculated,omitempty"` + NetworkStakedTokens cosmossdk_io_math.Int `protobuf:"bytes,8,opt,name=network_staked_tokens,json=networkStakedTokens,proto3,customtype=cosmossdk.io/math.Int" json:"network_staked_tokens"` + LockedVestingTokensTotal cosmossdk_io_math.Int `protobuf:"bytes,9,opt,name=locked_vesting_tokens_total,json=lockedVestingTokensTotal,proto3,customtype=cosmossdk.io/math.Int" json:"locked_vesting_tokens_total"` + LockedVestingTokensInvestorsPreseed cosmossdk_io_math.Int `protobuf:"bytes,10,opt,name=locked_vesting_tokens_investors_preseed,json=lockedVestingTokensInvestorsPreseed,proto3,customtype=cosmossdk.io/math.Int" json:"locked_vesting_tokens_investors_preseed"` + LockedVestingTokensInvestorsSeed cosmossdk_io_math.Int `protobuf:"bytes,11,opt,name=locked_vesting_tokens_investors_seed,json=lockedVestingTokensInvestorsSeed,proto3,customtype=cosmossdk.io/math.Int" json:"locked_vesting_tokens_investors_seed"` + LockedVestingTokensTeam cosmossdk_io_math.Int `protobuf:"bytes,12,opt,name=locked_vesting_tokens_team,json=lockedVestingTokensTeam,proto3,customtype=cosmossdk.io/math.Int" json:"locked_vesting_tokens_team"` + EcosystemLocked cosmossdk_io_math.Int `protobuf:"bytes,13,opt,name=ecosystem_locked,json=ecosystemLocked,proto3,customtype=cosmossdk.io/math.Int" json:"ecosystem_locked"` + CirculatingSupply cosmossdk_io_math.Int `protobuf:"bytes,14,opt,name=circulating_supply,json=circulatingSupply,proto3,customtype=cosmossdk.io/math.Int" json:"circulating_supply"` + MaxSupply cosmossdk_io_math.Int `protobuf:"bytes,15,opt,name=max_supply,json=maxSupply,proto3,customtype=cosmossdk.io/math.Int" json:"max_supply"` + TargetEmissionRatePerUnitStakedToken cosmossdk_io_math.LegacyDec `protobuf:"bytes,16,opt,name=target_emission_rate_per_unit_staked_token,json=targetEmissionRatePerUnitStakedToken,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"target_emission_rate_per_unit_staked_token"` + ReputersPercent cosmossdk_io_math.LegacyDec `protobuf:"bytes,17,opt,name=reputers_percent,json=reputersPercent,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"reputers_percent"` + ValidatorsPercent cosmossdk_io_math.LegacyDec `protobuf:"bytes,18,opt,name=validators_percent,json=validatorsPercent,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"validators_percent"` + MaximumMonthlyEmissionPerUnitStakedToken cosmossdk_io_math.LegacyDec `protobuf:"bytes,19,opt,name=maximum_monthly_emission_per_unit_staked_token,json=maximumMonthlyEmissionPerUnitStakedToken,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"maximum_monthly_emission_per_unit_staked_token"` + TargetRewardEmissionPerUnitStakedToken cosmossdk_io_math.LegacyDec `protobuf:"bytes,20,opt,name=target_reward_emission_per_unit_staked_token,json=targetRewardEmissionPerUnitStakedToken,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"target_reward_emission_per_unit_staked_token"` + EmissionPerUnitStakedToken cosmossdk_io_math.LegacyDec `protobuf:"bytes,21,opt,name=emission_per_unit_staked_token,json=emissionPerUnitStakedToken,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"emission_per_unit_staked_token"` + EmissionPerMonth cosmossdk_io_math.Int `protobuf:"bytes,22,opt,name=emission_per_month,json=emissionPerMonth,proto3,customtype=cosmossdk.io/math.Int" json:"emission_per_month"` + BlockEmission cosmossdk_io_math.Int `protobuf:"bytes,23,opt,name=block_emission,json=blockEmission,proto3,customtype=cosmossdk.io/math.Int" json:"block_emission"` + ValidatorCut cosmossdk_io_math.Int `protobuf:"bytes,24,opt,name=validator_cut,json=validatorCut,proto3,customtype=cosmossdk.io/math.Int" json:"validator_cut"` + AlloraRewardsCut cosmossdk_io_math.Int `protobuf:"bytes,25,opt,name=allora_rewards_cut,json=alloraRewardsCut,proto3,customtype=cosmossdk.io/math.Int" json:"allora_rewards_cut"` + PreviousRewardEmissionPerUnitStakedToken cosmossdk_io_math.LegacyDec `protobuf:"bytes,26,opt,name=previous_reward_emission_per_unit_staked_token,json=previousRewardEmissionPerUnitStakedToken,proto3,customtype=cosmossdk.io/math.LegacyDec" json:"previous_reward_emission_per_unit_staked_token"` +} + +func (m *QueryEmissionInfoResponse) Reset() { *m = QueryEmissionInfoResponse{} } +func (m *QueryEmissionInfoResponse) String() string { return proto.CompactTextString(m) } +func (*QueryEmissionInfoResponse) ProtoMessage() {} +func (*QueryEmissionInfoResponse) Descriptor() ([]byte, []int) { + return fileDescriptor_b0718dda172d2cb4, []int{5} +} +func (m *QueryEmissionInfoResponse) XXX_Unmarshal(b []byte) error { + return m.Unmarshal(b) +} +func (m *QueryEmissionInfoResponse) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) { + if deterministic { + return xxx_messageInfo_QueryEmissionInfoResponse.Marshal(b, m, deterministic) + } else { + b = b[:cap(b)] + n, err := m.MarshalToSizedBuffer(b) + if err != nil { + return nil, err + } + return b[:n], nil + } +} +func (m *QueryEmissionInfoResponse) XXX_Merge(src proto.Message) { + xxx_messageInfo_QueryEmissionInfoResponse.Merge(m, src) +} +func (m *QueryEmissionInfoResponse) XXX_Size() int { + return m.Size() +} +func (m *QueryEmissionInfoResponse) XXX_DiscardUnknown() { + xxx_messageInfo_QueryEmissionInfoResponse.DiscardUnknown(m) +} + +var xxx_messageInfo_QueryEmissionInfoResponse proto.InternalMessageInfo + +func (m *QueryEmissionInfoResponse) GetParams() Params { + if m != nil { + return m.Params + } + return Params{} +} + +func (m *QueryEmissionInfoResponse) GetBlocksPerMonth() uint64 { + if m != nil { + return m.BlocksPerMonth + } + return 0 +} + +func (m *QueryEmissionInfoResponse) GetBlockHeightTargetEILastCalculated() uint64 { + if m != nil { + return m.BlockHeightTargetEILastCalculated + } + return 0 +} + +func (m *QueryEmissionInfoResponse) GetBlockHeightTargetEINextCalculated() uint64 { + if m != nil { + return m.BlockHeightTargetEINextCalculated + } + return 0 +} + func init() { proto.RegisterType((*QueryParamsRequest)(nil), "mint.v1beta1.QueryParamsRequest") proto.RegisterType((*QueryParamsResponse)(nil), "mint.v1beta1.QueryParamsResponse") proto.RegisterType((*QueryInflationRequest)(nil), "mint.v1beta1.QueryInflationRequest") proto.RegisterType((*QueryInflationResponse)(nil), "mint.v1beta1.QueryInflationResponse") + proto.RegisterType((*QueryEmissionInfoRequest)(nil), "mint.v1beta1.QueryEmissionInfoRequest") + proto.RegisterType((*QueryEmissionInfoResponse)(nil), "mint.v1beta1.QueryEmissionInfoResponse") } func init() { proto.RegisterFile("mint/v1beta1/query.proto", fileDescriptor_b0718dda172d2cb4) } var fileDescriptor_b0718dda172d2cb4 = []byte{ - // 414 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x7c, 0x52, 0x3f, 0xcb, 0xd3, 0x40, - 0x18, 0x4f, 0x04, 0x0b, 0x3d, 0xdf, 0xc5, 0x33, 0xbe, 0x6f, 0x1b, 0x4b, 0x5a, 0xa3, 0x83, 0x08, - 0xcd, 0xd1, 0x16, 0x74, 0x2f, 0x5d, 0x04, 0x15, 0x2d, 0x4e, 0x2e, 0x72, 0x8d, 0x67, 0x7a, 0x34, - 0xb9, 0x27, 0xcd, 0x5d, 0xad, 0x5d, 0xfd, 0x04, 0x82, 0x5f, 0xc2, 0xd1, 0xc1, 0x0f, 0xd1, 0xb1, - 0xe8, 0x22, 0x0e, 0x45, 0x5a, 0xc1, 0xc9, 0xef, 0x20, 0xb9, 0x4b, 0xaa, 0xa9, 0xd2, 0x25, 0xe4, - 0x9e, 0xdf, 0x8f, 0xdf, 0x9f, 0xbb, 0x07, 0x35, 0x12, 0x2e, 0x14, 0x79, 0xdd, 0x9b, 0x30, 0x45, - 0x7b, 0x64, 0xbe, 0x60, 0xd9, 0x2a, 0x48, 0x33, 0x50, 0x80, 0xcf, 0x72, 0x24, 0x28, 0x10, 0xd7, - 0x89, 0x20, 0x02, 0x0d, 0x90, 0xfc, 0xcf, 0x70, 0xdc, 0x56, 0x04, 0x10, 0xc5, 0x8c, 0xd0, 0x94, - 0x13, 0x2a, 0x04, 0x28, 0xaa, 0x38, 0x08, 0x59, 0xa0, 0x55, 0x6d, 0xb5, 0x4a, 0x59, 0x89, 0x5c, - 0xa5, 0x09, 0x17, 0x40, 0xf4, 0xb7, 0x18, 0x35, 0x43, 0x90, 0x09, 0xc8, 0x17, 0xc6, 0xc3, 0x1c, - 0x0c, 0xe4, 0x3b, 0x08, 0x3f, 0xcd, 0x83, 0x3d, 0xa1, 0x19, 0x4d, 0xe4, 0x98, 0xcd, 0x17, 0x4c, - 0x2a, 0xff, 0x31, 0xba, 0x56, 0x99, 0xca, 0x14, 0x84, 0x64, 0xf8, 0x3e, 0xaa, 0xa5, 0x7a, 0xd2, - 0xb0, 0x3b, 0xf6, 0x9d, 0x2b, 0x7d, 0x27, 0xf8, 0xbb, 0x47, 0x60, 0xd8, 0xc3, 0xfa, 0x7a, 0xdb, - 0xb6, 0x3e, 0xfc, 0xfc, 0x78, 0xd7, 0x1e, 0x17, 0x74, 0xff, 0x02, 0x5d, 0xd7, 0x7a, 0x0f, 0xc4, - 0xab, 0x58, 0xd7, 0x28, 0x8d, 0x04, 0x3a, 0x3f, 0x06, 0x0a, 0xaf, 0x67, 0xa8, 0xce, 0xcb, 0xa1, - 0xb6, 0x3b, 0x1b, 0xde, 0xcb, 0x85, 0xbf, 0x6d, 0xdb, 0x37, 0x4c, 0x03, 0xf9, 0x72, 0x16, 0x70, - 0x20, 0x09, 0x55, 0xd3, 0xe0, 0x21, 0x8b, 0x68, 0xb8, 0x1a, 0xb1, 0xf0, 0xf3, 0xa7, 0x2e, 0x2a, - 0x0a, 0x8e, 0x58, 0x68, 0x52, 0xfc, 0x11, 0xea, 0xff, 0xb2, 0xd1, 0x65, 0x6d, 0x88, 0x67, 0xa8, - 0x66, 0xf2, 0xe2, 0x4e, 0xb5, 0xc5, 0xbf, 0xd7, 0xe1, 0xde, 0x3c, 0xc1, 0x30, 0x71, 0xfd, 0xd6, - 0xdb, 0x2f, 0x3f, 0xde, 0x5f, 0x3a, 0xc7, 0x0e, 0xa9, 0x3c, 0x8c, 0xe9, 0x8f, 0x97, 0xa8, 0x7e, - 0x68, 0x88, 0x6f, 0xfd, 0x47, 0xed, 0xf8, 0x62, 0xdc, 0xdb, 0xa7, 0x49, 0x85, 0x6b, 0x5b, 0xbb, - 0x36, 0xf1, 0x45, 0xd5, 0xf5, 0xd0, 0x77, 0xf8, 0x68, 0xbd, 0xf3, 0xec, 0xcd, 0xce, 0xb3, 0xbf, - 0xef, 0x3c, 0xfb, 0xdd, 0xde, 0xb3, 0x36, 0x7b, 0xcf, 0xfa, 0xba, 0xf7, 0xac, 0xe7, 0x83, 0x88, - 0xab, 0xe9, 0x62, 0x12, 0x84, 0x90, 0x10, 0x1a, 0xc7, 0x90, 0xd1, 0xae, 0x60, 0x6a, 0x09, 0xd9, - 0xac, 0x3c, 0x86, 0x53, 0xca, 0x05, 0x79, 0x63, 0xa4, 0xf5, 0x86, 0x4d, 0x6a, 0x7a, 0x69, 0x06, - 0xbf, 0x03, 0x00, 0x00, 0xff, 0xff, 0xc8, 0x9b, 0x57, 0x31, 0xda, 0x02, 0x00, 0x00, + // 1101 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x97, 0x4f, 0x6f, 0x1b, 0xc5, + 0x1b, 0xc7, 0xb3, 0xf9, 0xb5, 0xf9, 0xe1, 0x69, 0xfe, 0x4e, 0xe2, 0x64, 0xe3, 0x04, 0x27, 0x4d, + 0xa2, 0x26, 0xaa, 0xa8, 0x4d, 0x5b, 0x09, 0xee, 0x6e, 0x2b, 0x61, 0x29, 0x29, 0xc1, 0x49, 0x41, + 0x02, 0xc1, 0x68, 0xbc, 0x7e, 0x62, 0x8f, 0xbc, 0x3b, 0xe3, 0xee, 0xcc, 0x26, 0x36, 0x27, 0x84, + 0x10, 0xe7, 0x4a, 0x70, 0xe0, 0x25, 0x70, 0xe4, 0xc0, 0x8b, 0xe8, 0xb1, 0x82, 0x0b, 0xe2, 0x50, + 0x50, 0x82, 0xc4, 0x1b, 0xe0, 0x05, 0xa0, 0x9d, 0x99, 0xf5, 0x9f, 0xd4, 0x89, 0xd1, 0xfa, 0x62, + 0x79, 0x67, 0x1e, 0x7d, 0xbe, 0xdf, 0xe7, 0xd9, 0x99, 0xd9, 0x67, 0x90, 0x1b, 0x30, 0xae, 0x8a, + 0xa7, 0xf7, 0xab, 0xa0, 0xe8, 0xfd, 0xe2, 0xf3, 0x08, 0xc2, 0x4e, 0xa1, 0x15, 0x0a, 0x25, 0xf0, + 0x74, 0x3c, 0x53, 0xb0, 0x33, 0xb9, 0xa5, 0xba, 0xa8, 0x0b, 0x3d, 0x51, 0x8c, 0xff, 0x99, 0x98, + 0xdc, 0x7a, 0x5d, 0x88, 0xba, 0x0f, 0x45, 0xda, 0x62, 0x45, 0xca, 0xb9, 0x50, 0x54, 0x31, 0xc1, + 0xa5, 0x9d, 0x1d, 0x64, 0xab, 0x4e, 0x0b, 0x92, 0x99, 0x05, 0x1a, 0x30, 0x2e, 0x8a, 0xfa, 0xd7, + 0x0e, 0xad, 0x7a, 0x42, 0x06, 0x42, 0x12, 0xa3, 0x61, 0x1e, 0xcc, 0xd4, 0xd6, 0x12, 0xc2, 0x1f, + 0xc5, 0xc6, 0x0e, 0x69, 0x48, 0x03, 0x59, 0x81, 0xe7, 0x11, 0x48, 0xb5, 0xf5, 0x14, 0x2d, 0x0e, + 0x8c, 0xca, 0x96, 0xe0, 0x12, 0xf0, 0xfb, 0x68, 0xaa, 0xa5, 0x47, 0x5c, 0x67, 0xd3, 0xd9, 0xbb, + 0xf5, 0x60, 0xa9, 0xd0, 0x9f, 0x47, 0xc1, 0x44, 0x97, 0x32, 0x2f, 0x5f, 0x6f, 0x4c, 0xfc, 0xf8, + 0xf7, 0x4f, 0x77, 0x9d, 0x8a, 0x0d, 0xdf, 0x5a, 0x41, 0x59, 0xcd, 0x2b, 0xf3, 0x13, 0x5f, 0xa7, + 0x91, 0x08, 0x71, 0xb4, 0x7c, 0x79, 0xc2, 0x6a, 0x1d, 0xa3, 0x0c, 0x4b, 0x06, 0xb5, 0xdc, 0x74, + 0xe9, 0xbd, 0x18, 0xfc, 0xfb, 0xeb, 0x8d, 0x35, 0x93, 0x81, 0xac, 0x35, 0x0b, 0x4c, 0x14, 0x03, + 0xaa, 0x1a, 0x85, 0x7d, 0xa8, 0x53, 0xaf, 0xf3, 0x18, 0xbc, 0x5f, 0x7e, 0xbe, 0x87, 0x6c, 0x82, + 0x8f, 0xc1, 0x33, 0x2e, 0x7a, 0xa0, 0xad, 0x1c, 0x72, 0xb5, 0xde, 0x93, 0x80, 0x49, 0xc9, 0x04, + 0x2f, 0xf3, 0x13, 0x91, 0x78, 0xf9, 0x23, 0x8b, 0x56, 0x87, 0x4c, 0x8e, 0x99, 0x3b, 0xfe, 0x1c, + 0x2d, 0x80, 0x27, 0x64, 0x47, 0x2a, 0x08, 0x48, 0x95, 0xfa, 0x94, 0x7b, 0xe0, 0x4e, 0x6e, 0x3a, + 0x7b, 0x99, 0xd2, 0xbb, 0x36, 0xa1, 0xec, 0x9b, 0x09, 0x95, 0xb9, 0xea, 0x4b, 0xa5, 0xcc, 0x95, + 0x81, 0xce, 0x77, 0x51, 0x25, 0x43, 0xc2, 0x0d, 0xb4, 0xd2, 0x0a, 0xe1, 0x94, 0x89, 0x48, 0x92, + 0xaa, 0x2f, 0xbc, 0x26, 0x01, 0x6b, 0xdf, 0xfd, 0x5f, 0x4a, 0x91, 0x6c, 0x02, 0x2c, 0xc5, 0xbc, + 0xa4, 0x1a, 0xf8, 0x0c, 0x6d, 0xf4, 0x12, 0x89, 0x93, 0x27, 0x32, 0x6a, 0xb5, 0xfc, 0x0e, 0x09, + 0x21, 0xa0, 0x8c, 0x33, 0x5e, 0x77, 0x6f, 0xa4, 0x54, 0x5c, 0xef, 0x82, 0x0f, 0x18, 0x57, 0x47, + 0x1a, 0x5b, 0x49, 0xa8, 0x78, 0x0f, 0xcd, 0xeb, 0xcc, 0x24, 0x69, 0x41, 0x48, 0x02, 0xc1, 0x55, + 0xc3, 0xbd, 0xb9, 0xe9, 0xec, 0xdd, 0xa8, 0xcc, 0x9a, 0xf1, 0x43, 0x08, 0x0f, 0xe2, 0x51, 0x5c, + 0x41, 0xbb, 0xa6, 0x06, 0x0d, 0x60, 0xf5, 0x86, 0x22, 0x8a, 0x86, 0x75, 0x50, 0x04, 0x08, 0x23, + 0x3e, 0x95, 0x8a, 0x78, 0xd4, 0xf7, 0x22, 0x9f, 0x2a, 0xa8, 0xb9, 0x53, 0x1a, 0x70, 0x5b, 0x87, + 0x7f, 0xa0, 0xa3, 0x8f, 0x75, 0xf0, 0x93, 0xf2, 0x3e, 0x95, 0xea, 0x51, 0x37, 0xf0, 0x3a, 0x26, + 0x87, 0xf6, 0x00, 0xf3, 0xff, 0x57, 0x32, 0x9f, 0x42, 0xbb, 0x9f, 0x59, 0x43, 0x59, 0x0e, 0xea, + 0x4c, 0x84, 0x4d, 0x22, 0x15, 0x6d, 0x42, 0x8d, 0x28, 0xd1, 0x04, 0x2e, 0xdd, 0xb7, 0x52, 0x16, + 0x70, 0xd1, 0xe2, 0x8e, 0x34, 0xed, 0x58, 0xc3, 0xb0, 0x40, 0x6b, 0xb1, 0x13, 0xa8, 0x91, 0x53, + 0x90, 0x8a, 0xf1, 0xba, 0x55, 0x21, 0x4a, 0x28, 0xea, 0xbb, 0x99, 0x94, 0x5a, 0xae, 0x81, 0x7e, + 0x6c, 0x98, 0x46, 0xeb, 0x38, 0x26, 0xe2, 0x6f, 0x1d, 0xb4, 0x3b, 0x5c, 0x91, 0xf1, 0x78, 0x40, + 0x84, 0xf1, 0x19, 0x04, 0x12, 0xa0, 0xe6, 0xa2, 0x94, 0xea, 0xdb, 0x43, 0xd4, 0xcb, 0x09, 0xfd, + 0xd0, 0xc0, 0xf1, 0x57, 0x0e, 0xda, 0x19, 0x65, 0x44, 0xbb, 0xb8, 0x95, 0xd2, 0xc5, 0xe6, 0x75, + 0x2e, 0x8e, 0x62, 0x0b, 0x01, 0xca, 0x5d, 0x51, 0x7c, 0xa0, 0x81, 0x3b, 0x9d, 0x52, 0x77, 0x65, + 0x58, 0xed, 0x81, 0x06, 0xf8, 0x33, 0xd4, 0x3b, 0x1a, 0x88, 0x09, 0x72, 0x67, 0x52, 0x8a, 0xcc, + 0x75, 0x49, 0xfb, 0x1a, 0x84, 0x09, 0xc2, 0x1e, 0x0b, 0xf5, 0xe2, 0x8d, 0x13, 0x31, 0xdb, 0xde, + 0x9d, 0x4d, 0x89, 0x5f, 0xe8, 0x63, 0x99, 0xad, 0x8e, 0x3f, 0x44, 0x28, 0xa0, 0xed, 0x04, 0x3c, + 0x97, 0x12, 0x9c, 0x09, 0x68, 0xdb, 0x02, 0x5f, 0x38, 0xe8, 0x6e, 0xb2, 0x51, 0xed, 0xf9, 0x45, + 0x42, 0xaa, 0x40, 0x9f, 0x20, 0x11, 0x67, 0x6a, 0x60, 0xdf, 0xb9, 0xf3, 0x5a, 0x31, 0xed, 0xf7, + 0x65, 0xc7, 0x28, 0x25, 0x07, 0x65, 0x85, 0x2a, 0x38, 0x84, 0xf0, 0x19, 0x67, 0xaa, 0x6f, 0x3b, + 0x62, 0x8a, 0xe6, 0x43, 0x68, 0x45, 0x0a, 0x42, 0x7d, 0x8e, 0x79, 0xc0, 0x95, 0xbb, 0x30, 0x96, + 0xee, 0x5c, 0xc2, 0x3b, 0x34, 0x38, 0x0c, 0x08, 0x9f, 0x52, 0x9f, 0xd5, 0xa8, 0xd9, 0x69, 0x56, + 0x04, 0x8f, 0x25, 0xb2, 0xd0, 0x23, 0x26, 0x32, 0x3f, 0x38, 0xa8, 0x10, 0xd0, 0x36, 0x0b, 0xa2, + 0xc0, 0x9c, 0xc6, 0x7e, 0xa7, 0x57, 0xe5, 0xe1, 0x05, 0x5e, 0x1c, 0xcb, 0xc3, 0x9e, 0x55, 0x3b, + 0x30, 0x62, 0x49, 0xa1, 0x87, 0x14, 0xf9, 0x7b, 0x07, 0xbd, 0x63, 0xdf, 0x7b, 0x08, 0x67, 0x34, + 0xac, 0x8d, 0x32, 0xb6, 0x34, 0x96, 0xb1, 0x3b, 0x46, 0xab, 0xa2, 0xa5, 0xae, 0xb1, 0xf5, 0x25, + 0xca, 0x8f, 0xf0, 0x91, 0x1d, 0xcb, 0x47, 0x0e, 0xae, 0xd6, 0xfe, 0x02, 0xe1, 0x01, 0x6d, 0xf3, + 0xfd, 0x5c, 0x4e, 0xdd, 0x80, 0xf4, 0x94, 0xcc, 0x37, 0xf7, 0x13, 0x34, 0x7b, 0xa9, 0xef, 0x58, + 0x49, 0xc9, 0x9e, 0xa9, 0x0e, 0xf4, 0x1b, 0xcf, 0xd0, 0x4c, 0x77, 0xed, 0x11, 0x2f, 0x52, 0xae, + 0x9b, 0x92, 0x3b, 0xdd, 0xc5, 0x3c, 0x8a, 0x54, 0x5c, 0x0f, 0xea, 0xfb, 0x22, 0xa4, 0x76, 0x85, + 0x48, 0xcd, 0x5e, 0x4d, 0x5b, 0x0f, 0xc3, 0x32, 0x2b, 0x40, 0xc6, 0xfc, 0x78, 0x77, 0x74, 0x3b, + 0xb2, 0xff, 0xb6, 0x08, 0x73, 0xe3, 0xed, 0x8e, 0x44, 0x6d, 0xd4, 0x32, 0x7c, 0xf0, 0xcf, 0x24, + 0xba, 0xa9, 0x3b, 0x5c, 0xdc, 0x44, 0x53, 0xa6, 0x63, 0xc5, 0x9b, 0x83, 0x7d, 0xec, 0x9b, 0x97, + 0x81, 0xdc, 0xed, 0x6b, 0x22, 0x4c, 0x73, 0xbc, 0xb5, 0xfe, 0xf5, 0xaf, 0x7f, 0x7d, 0x37, 0xb9, + 0x8c, 0x97, 0x8a, 0x03, 0xd7, 0x12, 0xdb, 0x01, 0x9f, 0xa1, 0x4c, 0xb7, 0xbf, 0xc7, 0xdb, 0x43, + 0x68, 0x97, 0xaf, 0x05, 0xb9, 0x9d, 0xeb, 0x83, 0xac, 0xea, 0x86, 0x56, 0x5d, 0xc5, 0x2b, 0x83, + 0xaa, 0xdd, 0x6e, 0x1f, 0x7f, 0xe3, 0xa0, 0xe9, 0xfe, 0x66, 0x1e, 0xdf, 0x19, 0xc2, 0x1d, 0x72, + 0x15, 0xc8, 0xed, 0x8e, 0x8c, 0xb3, 0x16, 0xb6, 0xb5, 0x85, 0xb7, 0xf1, 0xda, 0xa0, 0x85, 0xee, + 0xfb, 0x66, 0xfc, 0x44, 0x94, 0x0e, 0x5e, 0x9e, 0xe7, 0x9d, 0x57, 0xe7, 0x79, 0xe7, 0xcf, 0xf3, + 0xbc, 0xf3, 0xe2, 0x22, 0x3f, 0xf1, 0xea, 0x22, 0x3f, 0xf1, 0xdb, 0x45, 0x7e, 0xe2, 0xd3, 0x87, + 0x75, 0xa6, 0x1a, 0x51, 0xb5, 0xe0, 0x89, 0xa0, 0x68, 0x16, 0xd2, 0x3d, 0xdb, 0xc8, 0x25, 0x8f, + 0x5e, 0x83, 0x32, 0x5e, 0x6c, 0x1b, 0xbc, 0xbe, 0xe6, 0x55, 0xa7, 0xf4, 0xcd, 0xed, 0xe1, 0xbf, + 0x01, 0x00, 0x00, 0xff, 0xff, 0x0e, 0x8c, 0xe9, 0x85, 0x5f, 0x0e, 0x00, 0x00, } // Reference imports to suppress errors if they are not otherwise used. @@ -247,6 +420,7 @@ type QueryClient interface { Params(ctx context.Context, in *QueryParamsRequest, opts ...grpc.CallOption) (*QueryParamsResponse, error) // Inflation returns the current minting inflation value. Inflation(ctx context.Context, in *QueryInflationRequest, opts ...grpc.CallOption) (*QueryInflationResponse, error) + EmissionInfo(ctx context.Context, in *QueryEmissionInfoRequest, opts ...grpc.CallOption) (*QueryEmissionInfoResponse, error) } type queryClient struct { @@ -275,12 +449,22 @@ func (c *queryClient) Inflation(ctx context.Context, in *QueryInflationRequest, return out, nil } +func (c *queryClient) EmissionInfo(ctx context.Context, in *QueryEmissionInfoRequest, opts ...grpc.CallOption) (*QueryEmissionInfoResponse, error) { + out := new(QueryEmissionInfoResponse) + err := c.cc.Invoke(ctx, "/mint.v1beta1.Query/EmissionInfo", in, out, opts...) + if err != nil { + return nil, err + } + return out, nil +} + // QueryServer is the server API for Query service. type QueryServer interface { // Params returns the total set of minting parameters. Params(context.Context, *QueryParamsRequest) (*QueryParamsResponse, error) // Inflation returns the current minting inflation value. Inflation(context.Context, *QueryInflationRequest) (*QueryInflationResponse, error) + EmissionInfo(context.Context, *QueryEmissionInfoRequest) (*QueryEmissionInfoResponse, error) } // UnimplementedQueryServer can be embedded to have forward compatible implementations. @@ -293,6 +477,9 @@ func (*UnimplementedQueryServer) Params(ctx context.Context, req *QueryParamsReq func (*UnimplementedQueryServer) Inflation(ctx context.Context, req *QueryInflationRequest) (*QueryInflationResponse, error) { return nil, status.Errorf(codes.Unimplemented, "method Inflation not implemented") } +func (*UnimplementedQueryServer) EmissionInfo(ctx context.Context, req *QueryEmissionInfoRequest) (*QueryEmissionInfoResponse, error) { + return nil, status.Errorf(codes.Unimplemented, "method EmissionInfo not implemented") +} func RegisterQueryServer(s grpc1.Server, srv QueryServer) { s.RegisterService(&_Query_serviceDesc, srv) @@ -334,6 +521,24 @@ func _Query_Inflation_Handler(srv interface{}, ctx context.Context, dec func(int return interceptor(ctx, in, info, handler) } +func _Query_EmissionInfo_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) { + in := new(QueryEmissionInfoRequest) + if err := dec(in); err != nil { + return nil, err + } + if interceptor == nil { + return srv.(QueryServer).EmissionInfo(ctx, in) + } + info := &grpc.UnaryServerInfo{ + Server: srv, + FullMethod: "/mint.v1beta1.Query/EmissionInfo", + } + handler := func(ctx context.Context, req interface{}) (interface{}, error) { + return srv.(QueryServer).EmissionInfo(ctx, req.(*QueryEmissionInfoRequest)) + } + return interceptor(ctx, in, info, handler) +} + var _Query_serviceDesc = grpc.ServiceDesc{ ServiceName: "mint.v1beta1.Query", HandlerType: (*QueryServer)(nil), @@ -346,6 +551,10 @@ var _Query_serviceDesc = grpc.ServiceDesc{ MethodName: "Inflation", Handler: _Query_Inflation_Handler, }, + { + MethodName: "EmissionInfo", + Handler: _Query_EmissionInfo_Handler, + }, }, Streams: []grpc.StreamDesc{}, Metadata: "mint/v1beta1/query.proto", @@ -463,147 +672,1331 @@ func (m *QueryInflationResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) return len(dAtA) - i, nil } -func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { - offset -= sovQuery(v) - base := offset - for v >= 1<<7 { - dAtA[offset] = uint8(v&0x7f | 0x80) - v >>= 7 - offset++ - } - dAtA[offset] = uint8(v) - return base -} -func (m *QueryParamsRequest) Size() (n int) { - if m == nil { - return 0 +func (m *QueryEmissionInfoRequest) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - var l int - _ = l - return n + return dAtA[:n], nil } -func (m *QueryParamsResponse) Size() (n int) { - if m == nil { - return 0 - } - var l int - _ = l - l = m.Params.Size() - n += 1 + l + sovQuery(uint64(l)) - return n +func (m *QueryEmissionInfoRequest) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryInflationRequest) Size() (n int) { - if m == nil { - return 0 - } +func (m *QueryEmissionInfoRequest) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i var l int _ = l - return n + return len(dAtA) - i, nil } -func (m *QueryInflationResponse) Size() (n int) { - if m == nil { - return 0 +func (m *QueryEmissionInfoResponse) Marshal() (dAtA []byte, err error) { + size := m.Size() + dAtA = make([]byte, size) + n, err := m.MarshalToSizedBuffer(dAtA[:size]) + if err != nil { + return nil, err } - var l int - _ = l - l = m.Inflation.Size() - n += 1 + l + sovQuery(uint64(l)) - return n + return dAtA[:n], nil } -func sovQuery(x uint64) (n int) { - return (math_bits.Len64(x|1) + 6) / 7 -} -func sozQuery(x uint64) (n int) { - return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +func (m *QueryEmissionInfoResponse) MarshalTo(dAtA []byte) (int, error) { + size := m.Size() + return m.MarshalToSizedBuffer(dAtA[:size]) } -func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: QueryParamsRequest: wiretype end group for non-group") + +func (m *QueryEmissionInfoResponse) MarshalToSizedBuffer(dAtA []byte) (int, error) { + i := len(dAtA) + _ = i + var l int + _ = l + { + size := m.PreviousRewardEmissionPerUnitStakedToken.Size() + i -= size + if _, err := m.PreviousRewardEmissionPerUnitStakedToken.MarshalTo(dAtA[i:]); err != nil { + return 0, err } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xd2 + { + size := m.AlloraRewardsCut.Size() + i -= size + if _, err := m.AlloraRewardsCut.MarshalTo(dAtA[i:]); err != nil { + return 0, err } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { - return err - } - if (skippy < 0) || (iNdEx+skippy) < 0 { - return ErrInvalidLengthQuery - } - if (iNdEx + skippy) > l { - return io.ErrUnexpectedEOF - } - iNdEx += skippy + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xca + { + size := m.ValidatorCut.Size() + i -= size + if _, err := m.ValidatorCut.MarshalTo(dAtA[i:]); err != nil { + return 0, err } + i = encodeVarintQuery(dAtA, i, uint64(size)) } - - if iNdEx > l { - return io.ErrUnexpectedEOF + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xc2 + { + size := m.BlockEmission.Size() + i -= size + if _, err := m.BlockEmission.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintQuery(dAtA, i, uint64(size)) } - return nil -} -func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery - } - if iNdEx >= l { - return io.ErrUnexpectedEOF - } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break - } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xba + { + size := m.EmissionPerMonth.Size() + i -= size + if _, err := m.EmissionPerMonth.MarshalTo(dAtA[i:]); err != nil { + return 0, err } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: QueryParamsResponse: wiretype end group for non-group") + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xb2 + { + size := m.EmissionPerUnitStakedToken.Size() + i -= size + if _, err := m.EmissionPerUnitStakedToken.MarshalTo(dAtA[i:]); err != nil { + return 0, err } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xaa + { + size := m.TargetRewardEmissionPerUnitStakedToken.Size() + i -= size + if _, err := m.TargetRewardEmissionPerUnitStakedToken.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0xa2 + { + size := m.MaximumMonthlyEmissionPerUnitStakedToken.Size() + i -= size + if _, err := m.MaximumMonthlyEmissionPerUnitStakedToken.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x9a + { + size := m.ValidatorsPercent.Size() + i -= size + if _, err := m.ValidatorsPercent.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x92 + { + size := m.ReputersPercent.Size() + i -= size + if _, err := m.ReputersPercent.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x8a + { + size := m.TargetEmissionRatePerUnitStakedToken.Size() + i -= size + if _, err := m.TargetEmissionRatePerUnitStakedToken.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1 + i-- + dAtA[i] = 0x82 + { + size := m.MaxSupply.Size() + i -= size + if _, err := m.MaxSupply.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x7a + { + size := m.CirculatingSupply.Size() + i -= size + if _, err := m.CirculatingSupply.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x72 + { + size := m.EcosystemLocked.Size() + i -= size + if _, err := m.EcosystemLocked.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x6a + { + size := m.LockedVestingTokensTeam.Size() + i -= size + if _, err := m.LockedVestingTokensTeam.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x62 + { + size := m.LockedVestingTokensInvestorsSeed.Size() + i -= size + if _, err := m.LockedVestingTokensInvestorsSeed.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x5a + { + size := m.LockedVestingTokensInvestorsPreseed.Size() + i -= size + if _, err := m.LockedVestingTokensInvestorsPreseed.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x52 + { + size := m.LockedVestingTokensTotal.Size() + i -= size + if _, err := m.LockedVestingTokensTotal.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x4a + { + size := m.NetworkStakedTokens.Size() + i -= size + if _, err := m.NetworkStakedTokens.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x42 + if m.BlockHeightTargetEINextCalculated != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.BlockHeightTargetEINextCalculated)) + i-- + dAtA[i] = 0x38 + } + if m.BlockHeightTargetEILastCalculated != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.BlockHeightTargetEILastCalculated)) + i-- + dAtA[i] = 0x30 + } + if m.BlocksPerMonth != 0 { + i = encodeVarintQuery(dAtA, i, uint64(m.BlocksPerMonth)) + i-- + dAtA[i] = 0x28 + } + { + size := m.EcosystemMintSupplyRemaining.Size() + i -= size + if _, err := m.EcosystemMintSupplyRemaining.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x22 + { + size := m.PreviousBlockEmission.Size() + i -= size + if _, err := m.PreviousBlockEmission.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x1a + { + size := m.EcosystemBalance.Size() + i -= size + if _, err := m.EcosystemBalance.MarshalTo(dAtA[i:]); err != nil { + return 0, err + } + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0x12 + { + size, err := m.Params.MarshalToSizedBuffer(dAtA[:i]) + if err != nil { + return 0, err + } + i -= size + i = encodeVarintQuery(dAtA, i, uint64(size)) + } + i-- + dAtA[i] = 0xa + return len(dAtA) - i, nil +} + +func encodeVarintQuery(dAtA []byte, offset int, v uint64) int { + offset -= sovQuery(v) + base := offset + for v >= 1<<7 { + dAtA[offset] = uint8(v&0x7f | 0x80) + v >>= 7 + offset++ + } + dAtA[offset] = uint8(v) + return base +} +func (m *QueryParamsRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *QueryParamsResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Params.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *QueryInflationRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *QueryInflationResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Inflation.Size() + n += 1 + l + sovQuery(uint64(l)) + return n +} + +func (m *QueryEmissionInfoRequest) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + return n +} + +func (m *QueryEmissionInfoResponse) Size() (n int) { + if m == nil { + return 0 + } + var l int + _ = l + l = m.Params.Size() + n += 1 + l + sovQuery(uint64(l)) + l = m.EcosystemBalance.Size() + n += 1 + l + sovQuery(uint64(l)) + l = m.PreviousBlockEmission.Size() + n += 1 + l + sovQuery(uint64(l)) + l = m.EcosystemMintSupplyRemaining.Size() + n += 1 + l + sovQuery(uint64(l)) + if m.BlocksPerMonth != 0 { + n += 1 + sovQuery(uint64(m.BlocksPerMonth)) + } + if m.BlockHeightTargetEILastCalculated != 0 { + n += 1 + sovQuery(uint64(m.BlockHeightTargetEILastCalculated)) + } + if m.BlockHeightTargetEINextCalculated != 0 { + n += 1 + sovQuery(uint64(m.BlockHeightTargetEINextCalculated)) + } + l = m.NetworkStakedTokens.Size() + n += 1 + l + sovQuery(uint64(l)) + l = m.LockedVestingTokensTotal.Size() + n += 1 + l + sovQuery(uint64(l)) + l = m.LockedVestingTokensInvestorsPreseed.Size() + n += 1 + l + sovQuery(uint64(l)) + l = m.LockedVestingTokensInvestorsSeed.Size() + n += 1 + l + sovQuery(uint64(l)) + l = m.LockedVestingTokensTeam.Size() + n += 1 + l + sovQuery(uint64(l)) + l = m.EcosystemLocked.Size() + n += 1 + l + sovQuery(uint64(l)) + l = m.CirculatingSupply.Size() + n += 1 + l + sovQuery(uint64(l)) + l = m.MaxSupply.Size() + n += 1 + l + sovQuery(uint64(l)) + l = m.TargetEmissionRatePerUnitStakedToken.Size() + n += 2 + l + sovQuery(uint64(l)) + l = m.ReputersPercent.Size() + n += 2 + l + sovQuery(uint64(l)) + l = m.ValidatorsPercent.Size() + n += 2 + l + sovQuery(uint64(l)) + l = m.MaximumMonthlyEmissionPerUnitStakedToken.Size() + n += 2 + l + sovQuery(uint64(l)) + l = m.TargetRewardEmissionPerUnitStakedToken.Size() + n += 2 + l + sovQuery(uint64(l)) + l = m.EmissionPerUnitStakedToken.Size() + n += 2 + l + sovQuery(uint64(l)) + l = m.EmissionPerMonth.Size() + n += 2 + l + sovQuery(uint64(l)) + l = m.BlockEmission.Size() + n += 2 + l + sovQuery(uint64(l)) + l = m.ValidatorCut.Size() + n += 2 + l + sovQuery(uint64(l)) + l = m.AlloraRewardsCut.Size() + n += 2 + l + sovQuery(uint64(l)) + l = m.PreviousRewardEmissionPerUnitStakedToken.Size() + n += 2 + l + sovQuery(uint64(l)) + return n +} + +func sovQuery(x uint64) (n int) { + return (math_bits.Len64(x|1) + 6) / 7 +} +func sozQuery(x uint64) (n int) { + return sovQuery(uint64((x << 1) ^ uint64((int64(x) >> 63)))) +} +func (m *QueryParamsRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryParamsRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryParamsRequest: illegal tag %d (wire type %d)", fieldNum, wire) } switch fieldNum { - case 1: + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryParamsResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryParamsResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryInflationRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryInflationRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryInflationRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryInflationResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryInflationResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryInflationResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Inflation", wireType) + } + var byteLen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + byteLen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if byteLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + byteLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Inflation.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryEmissionInfoRequest) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryEmissionInfoRequest: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryEmissionInfoRequest: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + default: + iNdEx = preIndex + skippy, err := skipQuery(dAtA[iNdEx:]) + if err != nil { + return err + } + if (skippy < 0) || (iNdEx+skippy) < 0 { + return ErrInvalidLengthQuery + } + if (iNdEx + skippy) > l { + return io.ErrUnexpectedEOF + } + iNdEx += skippy + } + } + + if iNdEx > l { + return io.ErrUnexpectedEOF + } + return nil +} +func (m *QueryEmissionInfoResponse) Unmarshal(dAtA []byte) error { + l := len(dAtA) + iNdEx := 0 + for iNdEx < l { + preIndex := iNdEx + var wire uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + wire |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + fieldNum := int32(wire >> 3) + wireType := int(wire & 0x7) + if wireType == 4 { + return fmt.Errorf("proto: QueryEmissionInfoResponse: wiretype end group for non-group") + } + if fieldNum <= 0 { + return fmt.Errorf("proto: QueryEmissionInfoResponse: illegal tag %d (wire type %d)", fieldNum, wire) + } + switch fieldNum { + case 1: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + } + var msglen int + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + msglen |= int(b&0x7F) << shift + if b < 0x80 { + break + } + } + if msglen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + msglen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 2: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field EcosystemBalance", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.EcosystemBalance.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 3: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PreviousBlockEmission", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.PreviousBlockEmission.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field EcosystemMintSupplyRemaining", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.EcosystemMintSupplyRemaining.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 5: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field BlocksPerMonth", wireType) + } + m.BlocksPerMonth = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.BlocksPerMonth |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 6: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field BlockHeightTargetEILastCalculated", wireType) + } + m.BlockHeightTargetEILastCalculated = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.BlockHeightTargetEILastCalculated |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 7: + if wireType != 0 { + return fmt.Errorf("proto: wrong wireType = %d for field BlockHeightTargetEINextCalculated", wireType) + } + m.BlockHeightTargetEINextCalculated = 0 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + m.BlockHeightTargetEINextCalculated |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + case 8: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field NetworkStakedTokens", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.NetworkStakedTokens.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 9: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LockedVestingTokensTotal", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.LockedVestingTokensTotal.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 10: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LockedVestingTokensInvestorsPreseed", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.LockedVestingTokensInvestorsPreseed.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 11: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LockedVestingTokensInvestorsSeed", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.LockedVestingTokensInvestorsSeed.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 12: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field LockedVestingTokensTeam", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.LockedVestingTokensTeam.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 13: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field EcosystemLocked", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.EcosystemLocked.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 14: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field CirculatingSupply", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.CirculatingSupply.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 15: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MaxSupply", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.MaxSupply.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 16: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TargetEmissionRatePerUnitStakedToken", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.TargetEmissionRatePerUnitStakedToken.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 17: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ReputersPercent", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.ReputersPercent.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 18: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Params", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field ValidatorsPercent", wireType) } - var msglen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -613,130 +2006,235 @@ func (m *QueryParamsResponse) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - msglen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if msglen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthQuery } - postIndex := iNdEx + msglen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthQuery } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Params.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.ValidatorsPercent.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { + case 19: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field MaximumMonthlyEmissionPerUnitStakedToken", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.MaximumMonthlyEmissionPerUnitStakedToken.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } - if (skippy < 0) || (iNdEx+skippy) < 0 { + iNdEx = postIndex + case 20: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field TargetRewardEmissionPerUnitStakedToken", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthQuery } - if (iNdEx + skippy) > l { + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { return io.ErrUnexpectedEOF } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryInflationRequest) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery + if err := m.TargetRewardEmissionPerUnitStakedToken.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } - if iNdEx >= l { + iNdEx = postIndex + case 21: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field EmissionPerUnitStakedToken", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break + if err := m.EmissionPerUnitStakedToken.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: QueryInflationRequest: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryInflationRequest: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - default: - iNdEx = preIndex - skippy, err := skipQuery(dAtA[iNdEx:]) - if err != nil { + iNdEx = postIndex + case 22: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field EmissionPerMonth", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.EmissionPerMonth.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } - if (skippy < 0) || (iNdEx+skippy) < 0 { + iNdEx = postIndex + case 23: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field BlockEmission", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthQuery } - if (iNdEx + skippy) > l { + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { return io.ErrUnexpectedEOF } - iNdEx += skippy - } - } - - if iNdEx > l { - return io.ErrUnexpectedEOF - } - return nil -} -func (m *QueryInflationResponse) Unmarshal(dAtA []byte) error { - l := len(dAtA) - iNdEx := 0 - for iNdEx < l { - preIndex := iNdEx - var wire uint64 - for shift := uint(0); ; shift += 7 { - if shift >= 64 { - return ErrIntOverflowQuery + if err := m.BlockEmission.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } - if iNdEx >= l { + iNdEx = postIndex + case 24: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field ValidatorCut", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { return io.ErrUnexpectedEOF } - b := dAtA[iNdEx] - iNdEx++ - wire |= uint64(b&0x7F) << shift - if b < 0x80 { - break + if err := m.ValidatorCut.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err } - } - fieldNum := int32(wire >> 3) - wireType := int(wire & 0x7) - if wireType == 4 { - return fmt.Errorf("proto: QueryInflationResponse: wiretype end group for non-group") - } - if fieldNum <= 0 { - return fmt.Errorf("proto: QueryInflationResponse: illegal tag %d (wire type %d)", fieldNum, wire) - } - switch fieldNum { - case 1: + iNdEx = postIndex + case 25: if wireType != 2 { - return fmt.Errorf("proto: wrong wireType = %d for field Inflation", wireType) + return fmt.Errorf("proto: wrong wireType = %d for field AlloraRewardsCut", wireType) } - var byteLen int + var stringLen uint64 for shift := uint(0); ; shift += 7 { if shift >= 64 { return ErrIntOverflowQuery @@ -746,22 +2244,57 @@ func (m *QueryInflationResponse) Unmarshal(dAtA []byte) error { } b := dAtA[iNdEx] iNdEx++ - byteLen |= int(b&0x7F) << shift + stringLen |= uint64(b&0x7F) << shift if b < 0x80 { break } } - if byteLen < 0 { + intStringLen := int(stringLen) + if intStringLen < 0 { return ErrInvalidLengthQuery } - postIndex := iNdEx + byteLen + postIndex := iNdEx + intStringLen if postIndex < 0 { return ErrInvalidLengthQuery } if postIndex > l { return io.ErrUnexpectedEOF } - if err := m.Inflation.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + if err := m.AlloraRewardsCut.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { + return err + } + iNdEx = postIndex + case 26: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field PreviousRewardEmissionPerUnitStakedToken", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowQuery + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthQuery + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthQuery + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + if err := m.PreviousRewardEmissionPerUnitStakedToken.Unmarshal(dAtA[iNdEx:postIndex]); err != nil { return err } iNdEx = postIndex diff --git a/x/mint/types/query.pb.gw.go b/x/mint/types/query.pb.gw.go index bfc7fee2c..0daf4daa0 100644 --- a/x/mint/types/query.pb.gw.go +++ b/x/mint/types/query.pb.gw.go @@ -69,6 +69,24 @@ func local_request_Query_Inflation_0(ctx context.Context, marshaler runtime.Mars } +func request_Query_EmissionInfo_0(ctx context.Context, marshaler runtime.Marshaler, client QueryClient, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryEmissionInfoRequest + var metadata runtime.ServerMetadata + + msg, err := client.EmissionInfo(ctx, &protoReq, grpc.Header(&metadata.HeaderMD), grpc.Trailer(&metadata.TrailerMD)) + return msg, metadata, err + +} + +func local_request_Query_EmissionInfo_0(ctx context.Context, marshaler runtime.Marshaler, server QueryServer, req *http.Request, pathParams map[string]string) (proto.Message, runtime.ServerMetadata, error) { + var protoReq QueryEmissionInfoRequest + var metadata runtime.ServerMetadata + + msg, err := server.EmissionInfo(ctx, &protoReq) + return msg, metadata, err + +} + // RegisterQueryHandlerServer registers the http handlers for service Query to "mux". // UnaryRPC :call QueryServer directly. // StreamingRPC :currently unsupported pending https://github.com/grpc/grpc-go/issues/906. @@ -121,6 +139,29 @@ func RegisterQueryHandlerServer(ctx context.Context, mux *runtime.ServeMux, serv }) + mux.Handle("GET", pattern_Query_EmissionInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + var stream runtime.ServerTransportStream + ctx = grpc.NewContextWithServerTransportStream(ctx, &stream) + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateIncomingContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := local_request_Query_EmissionInfo_0(rctx, inboundMarshaler, server, req, pathParams) + md.HeaderMD, md.TrailerMD = metadata.Join(md.HeaderMD, stream.Header()), metadata.Join(md.TrailerMD, stream.Trailer()) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_EmissionInfo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -202,6 +243,26 @@ func RegisterQueryHandlerClient(ctx context.Context, mux *runtime.ServeMux, clie }) + mux.Handle("GET", pattern_Query_EmissionInfo_0, func(w http.ResponseWriter, req *http.Request, pathParams map[string]string) { + ctx, cancel := context.WithCancel(req.Context()) + defer cancel() + inboundMarshaler, outboundMarshaler := runtime.MarshalerForRequest(mux, req) + rctx, err := runtime.AnnotateContext(ctx, mux, req) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + resp, md, err := request_Query_EmissionInfo_0(rctx, inboundMarshaler, client, req, pathParams) + ctx = runtime.NewServerMetadataContext(ctx, md) + if err != nil { + runtime.HTTPError(ctx, mux, outboundMarshaler, w, req, err) + return + } + + forward_Query_EmissionInfo_0(ctx, mux, outboundMarshaler, w, req, resp, mux.GetForwardResponseOptions()...) + + }) + return nil } @@ -209,10 +270,14 @@ var ( pattern_Query_Params_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"mint", "v1beta1", "params"}, "", runtime.AssumeColonVerbOpt(false))) pattern_Query_Inflation_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"mint", "v1beta1", "inflation"}, "", runtime.AssumeColonVerbOpt(false))) + + pattern_Query_EmissionInfo_0 = runtime.MustPattern(runtime.NewPattern(1, []int{2, 0, 2, 1, 2, 2}, []string{"mint", "v1beta1", "emission_info"}, "", runtime.AssumeColonVerbOpt(false))) ) var ( forward_Query_Params_0 = runtime.ForwardResponseMessage forward_Query_Inflation_0 = runtime.ForwardResponseMessage + + forward_Query_EmissionInfo_0 = runtime.ForwardResponseMessage )