diff --git a/.dagger/generate.go b/.dagger/generate.go index 4c9e9c065..3e9ac0ffe 100644 --- a/.dagger/generate.go +++ b/.dagger/generate.go @@ -120,7 +120,7 @@ func (m *Generate) Server() *dagger.Directory { return goModule(). WithSource(source). - Exec([]string{"go", "generate", "-x", "./api"}). + Exec([]string{"go", "-C", "api", "generate", "-x", "."}). Directory("/work/src/api") } diff --git a/Dockerfile b/Dockerfile index 5b862a506..a825c40e9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -18,29 +18,41 @@ ARG GOPROXY ENV CGO_ENABLED=1 -COPY go.mod go.sum ./ -RUN go mod download - -COPY . . +RUN --mount=type=cache,target=/go/pkg/mod \ + --mount=type=cache,target=/root/.cache/go-build \ + --mount=type=bind,source=.,target=/usr/local/src/openmeter,ro \ + go mod download -x ARG VERSION # See https://github.com/confluentinc/confluent-kafka-go#librdkafka # See https://github.com/confluentinc/confluent-kafka-go#static-builds-on-linux # Build server binary (default) -RUN go build -ldflags "-linkmode external -extldflags \"-static\" -X main.version=${VERSION}" -tags musl -o /usr/local/bin/openmeter ./cmd/server +RUN --mount=type=cache,target=/go/pkg/mod \ + --mount=type=cache,target=/root/.cache/go-build \ + --mount=type=bind,source=.,target=/usr/local/src/openmeter,ro \ + go build -ldflags "-linkmode external -extldflags \"-static\" -X main.version=${VERSION}" -tags musl -o /usr/local/bin/openmeter ./cmd/server RUN xx-verify /usr/local/bin/openmeter # Build sink-worker binary -RUN go build -ldflags "-linkmode external -extldflags \"-static\" -X main.version=${VERSION}" -tags musl -o /usr/local/bin/openmeter-sink-worker ./cmd/sink-worker +RUN --mount=type=cache,target=/go/pkg/mod \ + --mount=type=cache,target=/root/.cache/go-build \ + --mount=type=bind,source=.,target=/usr/local/src/openmeter,ro \ + go build -ldflags "-linkmode external -extldflags \"-static\" -X main.version=${VERSION}" -tags musl -o /usr/local/bin/openmeter-sink-worker ./cmd/sink-worker RUN xx-verify /usr/local/bin/openmeter-sink-worker # Build balance-worker binary -RUN go build -ldflags "-linkmode external -extldflags \"-static\" -X main.version=${VERSION}" -tags musl -o /usr/local/bin/openmeter-balance-worker ./cmd/balance-worker +RUN --mount=type=cache,target=/go/pkg/mod \ + --mount=type=cache,target=/root/.cache/go-build \ + --mount=type=bind,source=.,target=/usr/local/src/openmeter,ro \ + go build -ldflags "-linkmode external -extldflags \"-static\" -X main.version=${VERSION}" -tags musl -o /usr/local/bin/openmeter-balance-worker ./cmd/balance-worker RUN xx-verify /usr/local/bin/openmeter-balance-worker # Build balance-worker binary -RUN go build -ldflags "-linkmode external -extldflags \"-static\" -X main.version=${VERSION}" -tags musl -o /usr/local/bin/openmeter-notification-service ./cmd/notification-service +RUN --mount=type=cache,target=/go/pkg/mod \ + --mount=type=cache,target=/root/.cache/go-build \ + --mount=type=bind,source=.,target=/usr/local/src/openmeter,ro \ + go build -ldflags "-linkmode external -extldflags \"-static\" -X main.version=${VERSION}" -tags musl -o /usr/local/bin/openmeter-notification-service ./cmd/notification-service RUN xx-verify /usr/local/bin/openmeter-notification-service diff --git a/api/api.gen.go b/api/api.gen.go index 39950fa39..2dd8708f8 100644 --- a/api/api.gen.go +++ b/api/api.gen.go @@ -21,7 +21,7 @@ import ( "github.com/getkin/kin-openapi/openapi3" "github.com/go-chi/chi/v5" "github.com/oapi-codegen/runtime" - "github.com/openmeterio/openmeter/pkg/models" + "github.com/openmeterio/openmeter/api/models" ) const ( @@ -12607,418 +12607,418 @@ var swaggerSpec = []string{ "zcVHjm3z1CIL8meVixlThp3CoUXDGSUu24q3Ofpmtnsuycmbl0My/vnHIXl5+AoTXL8c/4sE1Mtamp00", "BxnukVXXHltTafmeawqzPsslefPq8J9vDs72Xr95dRoOPKyDjjC5G+YmGREzRKtvhQSHRkinOBO5bPrf", "AsK9huyEdL0vxX5b9anTascX2nkJ7Jkf1lhEbfaQ2r5bw9gN31MjZOXBpx2+KHIJQmVBzYIHM67n5fko", - "yRf38oIJuDU8r/6+V7yf3cPhAOoWL4qrlOGeWOpfKhYhM1ZaRb4PGzoYDsKzMRgOxj//OBga1Jn/Hf8r", - "Lr/GFz+uIfOm8fDPkslll2XyFD2ZZQYSIrXi02+mS0MEQhn0lz9iMsys0Dvf7+hSnucVzbAcE0NVYfuf", - "eLfUzq4TUwZPdh+4A3Qg0lBifnB6//4T+P//VGcMRPy6WO0bmVMM6lHHd6OTrZ0ARaP98b/bcpETw/vp", - "0BXu88uYyWUaVfa+cG3EIPArA7lOGvsSxAbtg62Pq+/hNkeEAZlfOoNFv4v2Bd+v5oW4jrDbwqCH/o8O", - "aSP4YrP0fKit6Os8j4jorwr2xp3AzakvKNyYDdi/v0A3yv5e5fpZXor0SObnGVuEmUb7SUhvBLsqWKJZ", - "a4i45TiXfMYFvNhmkqQ8hXRpUy5SQn3SOh86UU+mo6mcMV1FwucSXwJh2ADIrJj6I8uV9aPlgqEzLF6Z", - "6VVutI0EptmbUyHYJnkj2p3fsvN5nr+PrD1sbLQT07ovSBiLecx+K5nSNwFffcA2sG+EF/gwzgkaqirb", - "omCXBu+tFaH/J2FSU44D9F3jS4aCQ9Oua61voPDZpFTAHEQHPtenV/MvUjHIo2ugUHEeH//n4av9g59O", - "T37+/vj42bN/Pnr84w/Pxj/foOLsnvJbPNqHtdXr2Y/36ESQ3uHhiZ1Vv5nrID+NOYVAL9JRhSd+HDrT", - "NsMHcr6sZWaO7aGqJctPq2Cw/nmYI3B9BTmZYzRtm5/5U+Rn7rphbXiD4oad9Mce3bcHT5+/fv1TT2eP", - "Y0Dv4uC4zy2IXnUS80vs4u9/wyX/VWdFMZrAc0ZTJtVHWKMxAoQ8Pz09InMcjWDEj/JFIiFi0GLSslPg", - "jA7WYAgHUOSAfTOJVbii5z7Xoa3TPKWZYk3cvp0zeBlsS5TBseSQjwQGIEj8a8uIs6V9N2U0N+I3LSbE", - "I0beKCbJVHIm0gxD6oNScO3VebXZnuJBG5hXHWH5is8EF7MTlsioHxw/EwXf0cEK6aLr1wXfi1NXyRZP", - "d8L4Bb4IT51BekH1E/LrOVXs0fe/Qg7U1LBiKtJ8Qc6XmikrOkCeEiw+wVKkdb9ezhVLzn4dkWOW5IuF", - "Te/Jf2dPyIPva/jAliePZg+evxCnl+nj8fz55ZvDl89ms59PHr+e5kd0+upv9Z2/g53u/v0XuvP7eOc/", - "93ce/597//vuj4cPhrv37+MbH4tThxSLtBXC3waiW4ylxKS3b/K58nBQxqKuLEckb45fGODt0/3abedI", - "zuuAO9uD/QU07vbVCEb/uBp99agqs5KeAkhU44s8gsY7BrcAs+sXVFIwGah6ov3Vqt8aaeHr47hfGKfa", - "0vItLf9oWv5l08HNSd3BBYtqhV1aFrhfI++chMjR4rjBc6dx0CkSPx0NK2sktiFqqTRbjMgeQEDOIRrf", - "iHPQolSx9DYVbmsQ9MxT6dl0Gy+hYmbU6eNne+Thw4ePrSH946zlH1PpmV8wuezKxX4K+fGxTaNsaXzr", - "NzalwCHbr4PxYaUOhMD4rOdNA0zfkJ6VywjVj388+OnV0e6/T//1z+N/PT/d/8f3Px0d//XoP/dvXv0A", - "XKzROgq6zHKaXs8+CRMc2RHMtWq98JNldk3b57HpGR3z+vbUAx/QEfF6rCVDq9G8xqBaN2gCWlrXpdqN", - "XqT0Kc2oSNjpXDI1z7P0qNrKVq0x86Ftg7WUBPhw+EBtdI5Dj7Qb+9cOUXGzJ/F9l7AffzYP1APcDPZ1", - "JbZetTdu6Tji5gF6EXQFM6/IK/HpbnlN/uhz5bXjL98U69GbmXAr0mwltNXnf/Buow2Iy3QriEO1J8Pu", - "CI2Nrk8763D75twGRQh69ScMweNU8KKzGDsJKG79Hax9j9p/Ov/+dMUcwRvVIK6j3/gntsOq8X2b4aA6", - "ZdfmlM2T8DNENKya3zetRadsvF3rJwoaE9u6cRHCI1PtZoX3oQ/QqN3H9fdj/6bF0VaZgI8ORQCHel/f", - "bg1cqg24VKk84UCKza0d9WUUgctRMqq6Ikvxm0+xQpV2EFiMuYR8dar/DOseYZxHAW9TbCQ/Fn7x9baZ", - "lPlKtekE5jhGEGOWDu2Ki15PAqkfEZgtsh374SFZwVB8/qyYPefkzd7ewclJLBHGxnZbe1ibVttPxo43", - "zjuJ++QPW9126i7SNS71iY4mS2vd7A03zcdJuy17Nj58cbA/GA5ODl7tH776cTAcHNm/3nWok22kRH3B", - "J2WSMGWk/2euFNcJZoMzc9i/3sUwcRvRF5WWsi7Uwip/X1WgBZqgtmEWnzrMomYouHF1sUtV3ISzrwf/", - "9NYVjJXX7fijLClNzK0TOUyftWiJDrzaPi7LzKbQWI2OLs+UJVsdiWnyaZzKoeuixIQuNjXcxwRqodDW", - "MuWDNMZnAiWfY7TxfEsFiv7cgS1wgDbyFZojsNpR6FIprUgMCuG0roImVrjGo+7TMH3M6bZqrjvRCy5c", - "ZoyWKtzXOr4qJEdauvJ54nFgPz4iGOcU0qB2OXHXLNRSSlLROMloMseDEQLY5dT1HVeQv6pNdSpUWUAh", - "P52Tc0a05LOZyyC4MQFcYWuop1XpOEqhMcAh5LRaV6RSwHqfKyyy6XDtwW1DnH+7ATXXD1/xzLZ29N5d", - "Qyi4xbCWHgIFvVWJgoeVNEbfUu396AXeCw5FM/PW18dVzdmCTCquVKVKcpTna7t+vnTMdkQONVnQpePH", - "FRM+XxIOwL9ny1s8BhMxhlwVkA7A+q3CTABc+dw31p21DDPcVEkvtE9fq9miyCU1ilKeldomOgCuITU5", - "z/WcANRUpOQnM7U1QRnWpwqW4A3NUzZjN5MT/P+7hXO7QobZ8votr18T3qRDsD3LuA4r/Nl5WpqnzR0U", - "DEACjuZrctq7yJCJRXLnXT8kohPGHmESHiv1w//qzcunB8c1t1J9jJ/D8tzxQcDsVUlCeXmOynTTeWU9", - "SsPms+qOB7693ratRslKCxAyM6SP5y0agKnX7SzhAT46ON47gNwbFnfvOrw27TF17DBH7cxHTCboYXuF", - "SHoXWfcNvGFdLwDexEvWSu7b6BmrAe6Le7RogPrKDOkYnbW1o38KO7otLdlmjDanVlgBXxAqz7kGaa6Q", - "LOGQt6pKWBqIX5PJzt9/QflrMhnhX3f/HpWoXo9LPX9g/ieXNqv1Xp6yHyUV+kDKXMYpI3YjNOwHgiKZ", - "mZ7o/K1Ymr9QAuLOzywVMFdJuDFYepZkHMkYBb/ZWcoEB8GqFJ5PnrkbcmYvphsT5PvBcICJDc4AArNi", - "KwLzbHlWCp//O3pzbR7m/ZLtR12P9e9OUcC9gcTWKKhXFWsKyn2M8YxfMEGcQ70R+Lxw5/Rja5I+d8VV", - "BWOpssJiCIYDoOWovvF6T4dTkvIp1J3QVSq1gsK/0zwpF5hL7ZyqqjBUFLS0jFYMeussMy4zt9E1S3bD", - "bvGW/TDXUfUT1F5Xt0DnRNP3kLc7JzSB6uk+8jAtu7YhXlIn2SjgygoDhgxF6+rYj15Ig1zCK85tx4Fp", - "5h4qsd6LPckxamdvzymTi3U3LGjj06ECsEwukHe7Lc8FoV766rhduCkRLsCutN2x6rVOrpjwo8N8vbZp", - "8yPaizE3KFJTBV5XjLXjrO63M5gmucCHYDX09lr6mvBM2DKkQ9aaFnKEtGRnUBb0XU+1DRG95nwdCqVp", - "jPG326w/X/AwqtBBOZ/Pc8S+/M3kFu399nLNHtoXQcs+JK+98+uyh0eIUYRaBtCsPidQTyugvOslOuo2", - "jJKi6tdDjPu/o3Lcka+81srOj6XUQKGitt6Zq29meF77MMeT/tmSbDiA63jLWfvsnCGozRkf3FCiMJuy", - "XufxczmniqnN1Msio4IU0DG8JO+h9hmg8QwKT8VF0YxG4jbNr8qFWFr7LpRpMfPViq1/a4lCbkA2tW6L", - "wZuT/cHK2qSgx7hw+oyK+qtlC8m3FDPxRVYxZdMpSzS/6Cg4YV8MYZJwyCno0QwX75wl+YIp4ocZERDG", - "RK6dvMjSYdUe/CWppNNbCqs9cHBYCprGokjDZZ/mmy8akvGRLBczJjdZuW8Kxe6mXHDNsuVtI8KQ9S40", - "bPqaK1ro4dNkXLfrggJzrXW8jxXhHRPFFnyn32puJEO6hRHrbm4r4N5iBVzg9x0VhrxAQIx4IHkC1ccM", - "l7BFvZI5FTOoVwuNv1ME6m4mVKYKaoXipaeGVoXs3ogEM8kUlr0d20nUJdfJnORJUkpbls6WJzU3D0RP", - "X2ATBK0hYUKVlceZEsXFDLxUwVyufiZUCjVEBermppjyf+ZKPFSmHwQGKsD2LwZmJB0QujrdvkeVeBVx", - "OCr/Lqin1SSjwr0pj4Yc1yONQSyYiL18UZSapVUxdcBug9Q7advQOvVkInaQz5D/NcS6xubMN4pd/7f+", - "hUzK+/cfJqbLpf2bBKwCOspkzi9YSu4RLtqjnObhGKaDWXtaZiwl8WGDecNh1jzpwVf530K6ogsmlZeJ", - "rPS42zwbP2Oj2sEghyLBclIsbXPoYF1hGbAuSO0E66t7gbfKBXh1xIKh8nHhhwzKNyv/Uh3vVFQNyqhA", - "h18s1MtuIM5NjO6BUr2vbNnMRfRlCvVfojC8FSO2YsRWjPjUYkS85P17W7y+Kny/mmBubjVqByG06DbQ", - "2DMa0Hfzjy5L0lcQggAGr23YwacIO6guxWekLxEXypfIeFOuwHnblWLAfXayvxMtep35fds7fHC27yds", - "34WtFPDnkgLMrdozl6ojg0Nw6aabn75jO3p4+o79kHGdWurxNFrUFMoSw6U338nlnCfzSuuBnooYIKi0", - "5VtDuqBsXZZKzzva/ffufk2pszVSV2w21vNFn8o6dw8yVIv4Cs+1Ra6knTemBm3p3pbubenelu59JXTv", - "K1ElvNK31Sc+nT6B9tQePFFaI+iWO94Ad9wyni3j+TIZT5RSHDMw6CVROmE/QUg9u6KJ9hheX1bO2y4O", - "9z/Dk+qojOpBsi+Hb6faeeimis5uW4x6+pDqxsZ36/bxUBSl7r+ZxDptbLXIkG1Zp2UAbn3Xvw0cm1V0", - "I7XIaLKekX7d7HPLsbaOoj+Bo2iNX2hV6toq2oR6DuifTEg6xUdyhlqaP2zgh9HiXEhHpyvoJEDtntn+", - "yAHH3+u74CNc4gyZrgjV/MJrXTdo5Epq1Y9GVYSjfV9tXPe6s9jgrs0TBsMMQ6zbOTsPW7jtHaZL/P3P", - "su2uBtNh+i1k9PmmDnFtc6In2iA9O83fMxEzDCe5UOWCSVJAO6JNQ0iQ8zOWvcolSXOmxHea5OdsSRxU", - "NkUBBmKR6qhPxAljT4g7x0GNd6XzIuOzueb5PVWwREua3eNKlUzd233w1+/bN8ZwXpZCLvyTrJytyGQ0", - "JHxqnx2lyE4hOY8L4SY2ixbwxXNG7Mi1w/fLANauzsC4Y3DpuWHH069e6Sy/rKu99lEbuyrwzP3R1TbI", - "MIWN1TewbP41Ura1qwpKNkQK6u3Gn5ZFCQWYUMwnwq24KpkupbltVNsEJTabi58oX5whUTk7HIv9h0fF", - "27cPxg/eyr8tHv93+jt7nv34r79dLfb+dfnjaPnDb9+f7Izf/vasfPTbf6f02e/3f//nb98f/P7gb8dK", - "LH++/Md0+q8ffrt6eZGvX3cz57pFQpQ4Gsk3eLrYoRwE709RzpxmVKPYPJqI14KRfPqEcHFG0wvITJNL", - "+JeUjMpGVgfXBtIxuCZxEdSMf8pjFq0xTk40Z9JoFZpkjCpNcmGleeLZjNkwT7O5IIwmc+zXfsyYUQ2T", - "blBDxHeJh4JXiAogcs/pLRBd2uazSN+Y5lkKvinYb3yXONhmyOuC/SbSNwp2cZqPF3FvxZuC6ByUYVTg", - "vAGIK/JbSYXmeumZmc2tgdvrIZyIwykxMA79b3B3CyZ2oLzkaBDLLdW5KoDIzb021VSwuGFwrsLNit1H", - "b/aNnHivbteeFztVHR8OVKnW8JpiujtzHRWTF/Y5esrNwAsujHBjZlrQojB3zl6Bsylj6+zS5mw+Y7Ag", - "RWfsDGT/dZ3emKZPoeUHf/eWkPzuCeLiw3CQC9bjADfhWPeGOwbCuwDhT5GpH9TLFtW3IMxk51/ToqkC", - "e4cb0KYun8yS5ZJUhm/0Hf11wsv1n907jDVQ1e/1vetsyzvVKzj163qiqebJdXpG9riN2NgmK0Il8wk1", - "8fZZW1WVcjAwwEyEyzMJHfMFB8nO57VhkTmGhMKFXkIXJ8lbguav/rrr67Z3c0yA2gcltzbfOnwQwpPr", - "bF2cDATnzN3wCEUE5jplLEIaqREFUIwuSpk4wyYlkiWlBLl6yiL5DKzRcY+mcbeTYY7OMJlgI28G95s0", - "EfiItswywjVZMCqU+YNbuNBSauffxIn2tD7zV/RAu9rzU3vg+3pA41Xefupy7ziWh74ilPTh2TIOAze4", - "VDce6GUvPHkfD/jaRqX9yVwt19Qi3nI9D9WxuHSOwvUqsjMMBYFA/DM3YSpZPeDnjw/d2+DE1tYeaHq1", - "l4spn/Vf5anvEl+WpldGlp/yWefaSmE5oxXqWz2CJWOdPPAfRxr6F5YKNQGfU9a3XJHiaI7Zh91YjlSF", - "iq4XpN/VAzhMu3i61o4kVrUovAZ7cgdtlZwW4dfRBcWEEpcJyIoGq+Vbrk7yqX7BF1yvz/1+OCXKtf5f", - "c+TQXommCpJQYTamtqPsggnCpy0BytD2qzktlTanYk7VGBJConZIs0u6VJgEG1Op+XiUfKpJBsDGLHtg", - "loVwmmOmWARl/85LABNzWIISRGip84URccAmRqEoME9boiKeXXv9iEqYoJLn5NJl1PPpbm0KJvOny2cN", - "Wm2VQ5KrwMY7Z9KIkRYkrx3bEr2d4OAm183FOPxoIk7nVIcDzukFI1x/p4jMswzcvoppA6Ky16a0dhZK", - "LunS+moh7AgML9Jgs4pFGNZyJMMMaFeD33PJZ9xwELva+lJHE/GSihJw7VGmymReoQAwasQvA7dL7j+x", - "iQcngyGZGPp+bFcy9j8b1jAxrKD5CQsGKEIRty4BftyU4F9s3w8yfwiuOc0sgNRZCBrGhNb5O5I8l1wv", - "V78v3w/sAjhBYftV+SQtQYTPNbBLLvTfkAEi1A9++KH+6tyvwcDmVgBbi7vqJhvEYlM/i/YL+dPkBXt9", - "wSSdsbEOLvMa6gRsEE8hdjZ3zY0HRl9Y9IgcTgmOAY2REIDJ0aBE5+R+SHWO7AB+UDdOlAg1lXenocWM", - "pTBxV2Y3CP4VmskL6nMLxmj6ROwjXpQLt1qr63RoMN5sBviwcH20zaGtQG5gpEEddTUPS7xI00bgP05e", - "vyIFlVBxpCFNhIOS0zlXNoG/0fgylVfOAsjwkMxZ8t5gNaTCmMcYbZ6ugMe0zGxZDaSsoLZywXZmEg2e", - "tpMnwXbX7B0YEm5YjE0uwQVZ5qUk+aUgaqk0W4zIc+pTNAqC+K77MP4gE7zFuLNqMnhCfpkM0Ks5Gbwj", - "H8ID8F/1mYO4Vpm+rI2ib/JQexRWHcfAmBhLQGW+7mBQRMxAgVK8D5qA5rdkkFhzSbdmha1ZYWtW+PbM", - "Cm06Vfn86gjaKvRrFfrQz/W5dfrmhsa99qGVCOXSBjPq4wzc2GRlULPKj3AKX33XvXyx4Bo8KNY7utZn", - "3ez2sb7EbuvbsKcXvQ3RmovTjQP0SjonRZdA7xvUUzaLSso3ZIgKQkUyz2Xd3DfAH1eHEbmBDFUa/zvA", - "sYtNs2O0uU8VwIRtQMCk1pojm4A3g2Y2jtW093Bs5+qI4KyW05t41vfg0A2wImDC3DUesAc3aUiOqnGa", - "z2nch6HDbZQC1KHCMNzOVzXbQ/KtHpIeZ+MwWM2msFRBXb+mdPnrkPx6ydh7899FLvT816Hhx78uGZW/", - "hjzSHILh4O3BwU+D4eDl61enzwfDwb8PxsdRk8UxW+QXDF5SnMz5VFuuE3sjK1kSKhX2DYnphBo1tT+B", - "4cWMWmPdgl3BO2XJLjoAUUwHCgGw185LBaYuX5i2pbD57Jdjveolpg6eYVpbEX3vc1APnaAD6rnIL0fk", - "1DdMqBC5Nkq7DQ+YlliUFLk+JHxPKwOElqVIwARsrQMLLkqNpWV0Tub5JZlzpXPJE5SqmSQgV3NFzM+R", - "tJofF03fsMrFylRoJhegJl8GNWKjhrgc9BoomDSEFpKnztIbqIffKS86nrM5veC5HE3EDllr6XOtAhtf", - "0MxNPYra7yTTlItxBxHsWCVKapbwWeIIx9rGuOWysi3WMsiObamF1rLWjBhZYWePVfNGUBB713tCRXqe", - "X42Loo0S+43QogDnyrmNugH6xBRY+F8XTIBPyxfdxXK2cygzgmnNdeBDEUs9t2HU7MqoszSz5i9lFlu6", - "yAxFp8xq8Wa+ibhgkk+XHVN+UyUTtsUJbtNI9a2kp8+4ciy6pxmHyvdMwyPlF7ZvXC5aVA2JnQUdh1id", - "WihNs4yl7n47k2m0/tvW2nRj1qZN86KPi6IzLfpJLSU60PdcCJTqovvYbaihRfGdQnMNV8SyjFDcU/hT", - "3E321ecav0Ymb3dzg8Tdna42i889a+MeF8W+vU1xVu0aknFRENM08vATWX2/QxSIB3FiUZEDFUgLQCng", - "fp4zCHQgOo+eq65sIGaQw337aiDXXo4eGvEAAhNcQMosy8+BjaA46W4nQOFKkt/ug06nzQLIg/6V2SyU", - "wkYsxO5LMHT/AunRc4QBZ2+qMqpHMj/P2CLMBdb3sQq7KliiWdocoqP8AlR1NcTBJgvJlqQUQE+NvkNF", - "mjk7A5SWdZoQ1sjKoWqukfGznIK4XdU+WFCjIQsqEja0+hscjYy/Z9nSPqxkFxwDbiA0QuULZsQiuoxW", - "pT7JpYbczvHtyiHts9d/w10bn+wNhoP9g5O9KKE70ZIXLCplj4M7hM3gWETcvzWxdhWNM7dq9VkPpIeE", - "FvScZxzpwy8tyoIggd2eZkmJEfiaXsET3UBqs8kegOOBJwyWX7Az3+1M0ytHHp8M9tzPZuxqM3xr8+uH", - "YQc4bjLv/VNoTjNnx0ZLNcGwXc58jwqUQ5unYi/45GNm4FP1pRMk+yxPkSTPMpZoRfJSK00FKMCSXTBR", - "2hA+28NBEmjD7m3fgul5nrZRiUOfubkCbOIXclR9cQjFL/5DTBqwONUuJ41NMrLMS3MT7QjVCoNFQJqO", - "JBdvZDZ4MrjHF3TG1D0Ed1QAl7MQYvs6CUO/QMYv2CJPvbzW7OAkH2AfWPACbhMW5z00h50miT7bffDw", - "+x8e/fVvj1uT1CSN7pvzYatGbtXIrRr55amRFYVo4vyF/TIEC5uLSLZjckh3lJaJT7QVtwxutdRvQ0tt", - "8YWYEOdkLFvaHVMObiazhwqv54JVYBuwnK26u0bdbW9XcM+jOgw035uz5H1e6hOmFM/FyyhVsHvcaDuC", - "oYOdYrosVojr67VuO01M6Q6kdlUbDeSVpFRnV7X/iwlGH6O4e4Vjrd5e6Rxbtb1OyprbtoKc+CjEDnqC", - "g9l4biuLvwQhf83Acc3gWmSrbWqoSNW1LA0RHHVfXLvoQ6Oy664MenVdClQSoW1OvRDyxCj9GSTOK2Se", - "mPsNJMaCqM5oYiU3/wtEnRli2PjdznWGiDVrKpOEsbQjsh8hPDGkA5fSuQggL3YJsRp6iLOOLIJBX3+2", - "Rn0F0dYIPB2tjQX1YstRDc7V8nh7Kjdm1L7SwPV6wNv6cNt/XRvzzHxXG48MRKeec3Jtlq1NRZ3ua9Bl", - "OAvAdVcgyoH/f/befbmNW1n4fRUUa++KfTZFUnKcxKpK7ZJt2dHyNZbsrCTyTsAZkMTSEJgMMJIYH1ft", - "hzh/nu/l1pN8hW5gOEPO8CKTsi31qqyiTGJwH/QPjUZ3IViLSVUa2+Y38qRsY7rQXtQtz1PSmb2kUSeB", - "XyN3+0xiAafCFVdssY5MxysKIj3uWn7p/r/jUpvK8m8vo/iP3R7+r7riw0+np/GHHyqL+okvdekyFi2G", - "jV9Ef6T12eH5ovf8AhPBlUjbeBTdcM3zHF5wfynQBgisXBGQyt7bq73FFddSyTTfuPYAQBdeuJbP1vI6", - "N9t3utmRlVzY3AbZtXiTt2D71iz0sLwAFCuwrBdrRVUKrG353l46V5qDa8xMlxBho/aE5ma4trxZjjod", - "PZmUR+ImNKfG73FoW9tPwNqpPnXhN3fNxd8WB7cq9Yow7vA/YzpDW7DJ7OkGng+hveShigvrtj3Y2fb2", - "4b/fihCePiXEMpixhCuljVFj4W3Ri73aS9y1Lj8qQQV84aYQlokyOI3yvkk1qqFRA12/eYA93z9evEoi", - "a569+6FG2TzX/M/hxXKur1f1yTs/Ip/PCefa1a9Mkvm5Papq2OKSEqzYuvr5X63U7HSbU/p9ql65ttTP", - "4t2z4fYbVr0924WrNqX63l1lB/NxmW+V2TWubt9fqVD5LV46pE1hOhpW1wVnHccV1/ql2BwzPveNBd8U", - "a3n8hoDr/r4qeLmYO0TZrNEx1uVEL66JDz6wxXp8zQd8ny8Kf3nCdU7VL963SSbOJR7iuP4RjMcxG+eJ", - "ldNcTJ6mOrNNIfyjJcq2kpatti6fw3s7nbLSKeuyU1Y6YNzcpWsfwWC1bqyGLWvw35ZwVb+aXEXJV8pg", - "sXavcrg5u4rNnbjcyqPDSnyJOSUnbFULIbiMp5ZEzOFzQ7DabeWGwDzLrhwjXdY9+L623kGr9FDHk9pb", - "cPAr6+sYnUtVkBBiRdVpbnHPdrXJDdO6KsOrJArLibi8YvaHlylXMfiFLql1R7MBpkqO1aCRMbN6Xsnr", - "2+nrs3SmLA6ys7GZgsVcYab4B2dnymEs7ZJdg4ilZVKleeOBlPwbPQvNZ/SQ22jEpqdtLNLjMVcxXLtj", - "Y65kmid4yyvLlUL3b9OyTQdvhZ2Jid/Zuz3Mn10MtdX9AJ/PxOTjn3CZdf77LpzMdD+4D0i3coSw2U56", - "FfzdgWjmlyFiWCnSbn10sJkuWjaRqmW5Dl3g3YHH8R+uNU2NcJmVMz+IY1dvt0rG8R/QS2s8igHTXOvG", - "+lysVTDeE/Zl++fXKr500RhPkIWNRutlcYwPFWHfZhxO6HR1dxNN/brsvVzQLes+WozH1cq82rPVLpxb", - "S8LyO+/Rzf9SXetJ10C6BtI1kK6BdA2ka7iJIXrX5kyQq9NNzLz1EOkxSI9Rp8dYGHy4PCqAmvWmnpHN", - "eQKBuEIoHNeT5Yfb7GLkIzzDkfxQWDP9bsJSPmkzYaNOh86RVqlH4TVQbShSTbv6UxGsphpEZwsRa+jK", - "GwHSzQYkH4Q+vpowdMvuUchhXiRiH/bBixQv3IhLw4boL+pc8rnF2CsN6i0o4LLGtHNnXaKeqtmcCj+z", - "wWdT8TRewxhxA4G3PEzsn6pTtQuO8zkLDo7damOMjvDqfBGRYraotnfWNC2B9THUsc/I5bzLjmyoCldu", - "N1WU3UarsGDHcC4yU5rMoTJ3ivBtLpfI6+ujTBsTHjF3XUl75ZLYM4gOXZSE/gF8BBL4vvDPDlfaLbuD", - "wgSjpeLfd8t14tNWnaq9+R5T2q7Va0Xlil4DF6Qu918EM3zC/v2//39Don//7/9hmRjyLE7c/NIDcBwX", - "vJhLa0QyqJYBpUY6SfRfuQQ7xDF4uDNCGfC34AtM+SQ4bDOOvTHHwkbHfQUevP79v/+nw44US93KAsFf", - "R9IwMwphU2KRyfMQZs+9C98Ylxf4vteq7DGAJVKJHUfYG3OBTXuia3B6XYSY3EBUrWVGWWtH0p135Lu5", - "Qhb6C15azHXFEKvGDLsul+KV4ya32n0u1+K00US35rM7k0UOzRs5Z64Lwy/TTWYizwQ7LIfV8gP5JAQB", - "mXPNWg0cs/DwojY8xBoR/fwDDVHBV40mMTskoR7L+hKUQU3HypU3Bv3m4vA2HdQu3B2Ag975jUEadot1", - "ls9w/9o0Ofv1PwehDSF1Vz15feyfbn2sCBhf4LxSrNjCNsZMgqOnkCy0TokL38JT9Tj8Vg40X7zk2L9g", - "M+Cd9iIAGjvtoum7/nr3xZJYLY9LX61oEJ1ovAbSvHEqarIVFqpHDNe/wBVLJwyodSAWWt2yEFyZg7et", - "WY0gqoSQuzOuDGBUoPAwgDMSzzuXxgfleCxih9fJZHERs+P46+7jNVUlcIcBC1m6NJe6pBJNYqV1Yc2j", - "VuyQtZVy6FgcWTw4ui6cdOPD16qay5WVSakur7daF1JqkVKrfpH+osTfjdGwhc5Z+9gsqMJme+bKsnTj", - "0bVItbA11cKt3LIhLlQ2bvjWLIOHRhcqMzQ04zkFS4JoMcWfhTeVWocn5/KysGLkSXHNHZy11q3kRdLS", - "Vfe/BLh2NUJZ1p8wl2fNxubTXZGkfIJ+Yr024lxeTsMbV2vkKlRWH5Qr7hvJXmN2tRHXVwpdtkoFwsgI", - "FadaKtuZuhwovvKiu/KVhNCnle/8xIIbygYiWLpVbZzaThGUu+a3AZcJus+Z/SUTkT4vgtwu6Kh1fAY1", - "+lFY4I/kWMBJsvcnlYXY01FJPVQTBcL7N1rTQ8sipZf34TAttRLEfPbH+pAbJfVhvfcy8J5YMoHDCG6o", - "IyxPmHOd5LC2DDMe5zDwdS/wAnVlzTo7LQpPMEwqVAy23v6h+W72MaoxKvfqvf0yH4tMRg1KmbIiBgLD", - "ox4Gq8MtG2uD9gtTd7+FFPSY6ON5fyziZm+vhtg/s3VMBG+uJFapXEk/GdZWQr+YmljWxR+X01kk1RBn", - "ljQMZ4+PiKszVkyifYhAo9ifmOJPn8Q/j7tyP+Tsr5yDJweYKxBm3oepiafhdACbRYYxrnAShxKKMv+c", - "Zu9SoI3C9LAPMykKG2b6wlQ6E3oAYx2apg2wyEztG3WqDsJQaRVU8UWPV/RIUmHcfPf8yrsAGCM3XH4m", - "husGJc21rPicLqh3NmayD+W4asxk78EGO6VuwX2reG5HOpN/zztz35o/+ODmfcSN18EJxXiaJnB8LCKe", - "G8GkZQmPziBwt4yZq6ZD+wi3ylEmgPR5YgpYtTwbCluh5Jr2NlV1AXVMz7lmV9YPcy6Z3s9ByQHzRbHH", - "wnKZGO/Ynd158+QR+/6H3vd33QSccv90aS0JOa8h8zkBYIw5eLiHyFiqVkvsilvBmYW4dHta7NhqidIw", - "HXnDtKliECtRJezyuMIdtHFuLB7DQ5z2qTP7GmsM9FdQV9O3b46mJ9joPLjY4uGSUFR4xYrmmdr3Fd2H", - "zWN36sthB/yL7ZZ3BXkmFzu5nZ/eP52cvA5GkWDHPhTK8dL0AF9ncihViIuA83flrv6216u6Btv9Dvdf", - "bjlu7d9/8KCQdj7xvNswv+zM9zdnZqQzO+esw+TjMYRhGMzNw2r3PuQxCzuDhd4pw1UA3te53e8nXJ3N", - "Xwlw0zzSynKpDOMwG+rmQHN1qrkvHtX6JRS7qh3eptJ0nVtP263LnaHe8V+6tTcxHdyk+SWgnGRHjlON", - "TnJS7vbJPog/uMLTqVAQ+U/q6d/d9GzYxWyhtsVRd40zqqmknVcUb5SBMLcirHGp3BrxBeGEVxVevp71", - "YqvhkH9BR6wMs9fYP8TNG+HmbU2zdw49QC4eGZPXvGYzCVjEU7RT42qC4BJOIk0uHEUm5bif3voJHGMe", - "YQqco+JcZI5yT1tRJh3zJKctPLJMM+/QsGQ8BWc6fQFesVwu8aoeOl/waCSVy8gvp7DUg8gqAtC6DNtu", - "A1GEDeqs4gqqmBI1l6gLrs4EBJDxtmZQ1GqZ01nOZz/LGUiRNFybg59CoAc/rriHCrO/OqHcngoY0YlB", - "fzN8pXlQd1gyvaoXjdx+wO1rwxHOF+AizavXVvEwN38Mtvobsq0jCbD1ubTV5aE+EINfw1avwcxaehwy", - "aHKN7NfIxX1zE88Ums4R0BF06LbyGjyddytIuePSyC2UdiGhn6r9sCErjQyfE4JbEXaFT3ifQavduuCZ", - "cp1Xpw59p2XsA34dRIv8ffhELj0mLDV1pC9moteda4jznYBItWJs6i9O4eH3wjdhWr/nUlXr+LHdSkUW", - "CWX9MrLi7cHpM/Pv00/6go3zaFToxrTlSakdrp390L7/ZndEZ9hhu73ef7Kx4G5jliR+tTWMZyHh3bmJ", - "W6p4O3RF7YSsH5/6625f3hiFE+zbN06NIfpRL2Q1FMm4Cq/zgs5fUWg0vMoNe7GoMDfjZyIYdNTMiY/t", - "lg9dXxdJ4LXIpqlZkXAawiTyrgqKKCheSRVMn//EFH8WrouC8tNqGKTq9FxJxTzXEW5WvvJVazU7PS00", - "zZngpsnsEn+D9rnOKojd71+WSqxSKA4oZKXJVGnAvCyqvn8hYePLz6eKwunQyeotFCAA38DOtqYmrg5r", - "TM+iuh10ka9Ek7+KacOOHrtcwsz83K7FfZ1XXUvmZF5FBb/GovxYmohnXiwsdY8z8/BrAWE7l6wqtdXe", - "6CRc5DEqxgZeqTucfIIWfkp/zPldgnH9uHg8gxz/Isa04XW81eNaAMxqY1stf9lKXUm9lNVkWTDPdOn8", - "Ej2rBwz9+P7KUbNXeAmWNbjyzIYbrMSlDTLGLjD75rZkaD3NfnpX05cQMz7ksoIu0wBu1WcvCjdMO8XD", - "Sl9s2Gx7dkTD3N7miNbvM2hUv+RR/UWqWF8cy7/rVGvDYSaGqIO4gHTMyL8rdlQvjl6+PTlstVs/vXr7", - "ptVuPT74db4ytcd7pYI3eraH+Yr4IU+4isRP0lidNTgHuPBpWR8TsxGmnp9Z/TxzSVVjdk8zriwLycoZ", - "rbQLgccf5pl6PC3kWAzDrb3ZPUeo+NVaByZElmmVTFgmbJ4pwzJ9gfswfMo4sYv3+jLU5+Vg3egeneaN", - "u2FwCmHkObxXdiRk5v3XcBUzcTn3o1BxkQ9oCf3c8mYZZsyTBK4ncXzdS1MPsoToxKVc+9qOXKar7/mq", - "cwNnzHw3z7xCs33enpsU8+8X6HOjPJN2cuzKxsn0WmeWJyf6TKiD3E3y+ZMeZfKxyFgKKZl1SV3roAEQ", - "wkvwrHy7amRt2vr4EYxCBrrWtFi9cK8LesOJEp3HTHFw2gAjy/DFUsNwOdr7nJ0+ePD6aCa4vVRDYSxG", - "CjNt9lcusgnmg3m2YbjGXLn8g3IYRimRkfC2Qz5i/UHKo5Fge51eq93KISK+a9N+t3txcdHh8CsEuvGP", - "mu7zo0eHL48Pd/Y6vc7IjpPyTZFKrVvtlndF0dpv7XZ6nR6oKVKheCpb+6178BVs4UYwPl2eyu75bpen", - "Kfx7KGxdYDVjmUsBboyDXS9EK3I/HbhnXZ4Zhx4xjbw+TdJ9zYcOa0X8s+vKTsoXuMNe/Bisq47OQ6g0", - "aMher4eHmkX0TdCfoGlY919ejYFvybJ36CBNXTtx0i02VSuigsJG/NuFlfAWKf+1XmUe8tjryuYM6T42", - "xN0EC6KIKyfUYdnz91q9l2Z/oIGNiHN086HHAhx4eFsaOFaMBPjqQA2ie7OkUJaJLNMZKhLbbMwTJ95F", - "XGRoJsryy7bjDDDSC9/70wY2yPgYLDp1xmIRiRRe1JAq07mVanjXd+fuxrtzkXHjCuO9TdNEaPG9jbf4", - "ic76Mo6FWm/+5CoWmbFax5X50s9dlQe5EaBaLjqTSQstuL+FVwDuDyueHEPNDt38W68tQsFZL1j3csXy", - "wuCTRVrF/r6xm/f+dEnEbjzhWGmQJwPvHq3UDb6pmx+sY5RQb1VxEr5eS6Xxnm4t3H+DU+Pq1mPmxefM", - "CselYMh3LjK8J5MxV6E4T4QTcnDDnpf8JcGKksgzkQDWOKg5R/dGeP3arSYsFgmfdNC+wRv2bfxdbrQx", - "nu+kg8q44yI2DbYJOIP2jGUB6CiED52Aa4HUe+94Xvrp6E+TP7YrUrX7QcYfUaYmwtab4WGUdTcVeZrO", - "C9kixUGazgta6TKBHUS4vYenvFOgQ2X+tA+vV887L5m/rYX44B4rOAsBMSRUPLV99VO1DYuOm7sjwd2i", - "FHA6N2KQJx1GopdEL4ne1rf4om20BS+1faJztep4VY3YYxnDqA2kit0k9uFgMuGvJ+AANQwKONzDUb8I", - "AliD2VaijTf710owcSmNNcQexB43gz1KeADSfyl/tOs38U+Ft5WuI4ynwt4Qttjorp92/IQdhB2EHYQd", - "hB23DDscLqwIHHUKjy461eh6RyZwyKnrHMF4bxg+3TyZHKQpJvE+RL5SRoEJF8JybgRPKr1yeA6np9Vz", - "PE+DWwOkSg3WEaGETIRMhEyETIRMhEw3CJmqKLMmOXkH7N1w7X2xMUZxOX56A6XOMsMHcnqd6YFMxCP/", - "0KvSMzMsJS7TBK6BD3hiRBvZCoxdpnDVr2TaKoNVYZE0c8L1/Ogxu/NWyXORGfDE+RY9cT4XlzLSw4yn", - "I4kuOo91ZmH6HRVOOu9+hhias9ZRq9qlSK3WNWUJj6AZy/LHnsuxtK8GAyNsR8PHuk+Bv4dVHlo8fV5l", - "scgeTuBDqmFHuz+2lO3DyXYtfBZXqTA6IsglyCXIJUsgYrxbbQlUS18B9kLwzDuHl6nI5NjtlpK76+Jf", - "98M07utC6yFwwgJr8GylWH9ScqIUz6vW8NHFom8ldVslRC2ZHZGcJzlPyixSZhHoEOh8taDTzBVXY50F", - "VklXYZenwt4ecLkuPQepNQh3CHcIdwh3CHduo7nT5lin3tYJXYcwDpFodeZdhrr5Ca8ThDOZrUHNbbDU", - "iOxm08/mraUWd1dwVbV5+6nV/Fctw7L2pz3+fm2u21sIIp+NOcHJAr4+hcByCQBQvMtbxg3j7uc8scSo", - "xKjEqMSoxKjEqF8/ozbh46awteY40vt3W+IaKKSCF7bk57KwZauzTTsKWa/rOahwsGfsa/et6WAcLWFW", - "MT6af1pcWqFiER9/Ui7oaB6j+39CBg/FQGfiqg1JuYqv9mwYKtO6rcZuvk+ubNW26Pltm6/5sslOjWCZ", - "YJns1IgVyU6tzGUbx8HwR/O1zgqrVuLyYJxn8OVbjmFxqk7VyUiakmdicNoauaGJmRzAqgPD4iNNXAim", - "BC7uoYAyCufWyGlwdKWzMU+YbwiLJlGCYYZ+GQXVkft+GnWk3VDRwvvxmGdnqG2aelBWcdWdu08aNFMQ", - "y2galKUa9TEUNe2Ol+JiUQVCrmE19iG1+8JeuOVd6Ys7d4sqKXFpq63/xrC+GErlvoB9BMC78l5NYf0Q", - "Yz8sAoYBYm2jE102zhMr00RM2V8OmnoMHeeyWA4gRq/173ckRY1D0YAymM1zqYQ5mEYG2bxiuLE8jFOz", - "kkp4PV3pSm57fbVq7qKQtpQAkACQAJAAkABwAQAezSNRnxsRh4hR83J685To8jYrMuJcfdgdDEN3d4qG", - "ACHSsNzgkh4tziCsUlNDwgELohwfOlVDbkfoC74B2qD0gwrGzgKYHOyfqh0fPwDvEoSkUrFpCcZyK3zK", - "wEBFbNJptWMtjPrGsjG3PmxHOa0jtClzzWU/x1PYyR5vSrFJPgGn1gGYEldN40HNE83nIyzoC6Isoiyi", - "LKIsoiyirKscyV4HTH3wf614H7RQZDl+eaWSEjXABPZKGTfQccYHlt3RGRM8S6TI7jI8UQWFTx8GSPjQ", - "5nU3SI+mcXqXe2YLjaCbooQAhABklkZmacRAxEA34aZoOWD/hi+IFlmz/oQdPa69Dvq1U0h7Ne9r3shr", - "Ub2LGYRR1cH13DoqkcNgR1bjBm2VKkLEyljgvIjhSG21+vo8fal9rRPB1ZZvxBYHbWQpRfxG/Eb8RvxG", - "/Hb7rr5+IrytqLjq8vjcdW3zmeABJiibUX1j8GjLDWBhyoQKqqp5Ujg4O3W9nenzSi6nrbab5mBT5mth", - "KsZa87kHkyabcWXwvbkItmk8t3rMrYyKKnCM8u9VZt5s7WIkVE1bcvNYWC4T841/zLCBFAm8oZZ7tdxp", - "y9fztOVT1URHwBQeYgpDqZuihyPMI8wjzCPMI8wjzCPM+zTMW4+stoyByGcLMNADXEnzx1Xs6pZZJi5F", - "BCIFDdn4xFWJXejsbJDoi1lzMWUsh5ljhIprka+wD8tNyDTSaiCHuXu3gtF8iv4rIH7mnEUaSggHbhdT", - "469wLRWsw/6EU9Y/92svCBh/mliuTTukTHKfl3CSSY+FYXhXFLIdc5Xz5A/sUZ78oQBdrlJOUefZcupi", - "crnRIeok6iTqJOok6iTqJOok6qyNiSVm7kTO0Md2OROOP7sf3Me6ZnNgy7fY4M2b0X+1x801NcWeIts8", - "wi/CL8Ivwi/CL8KvG2WbF7BmawZ6tdg0Nc8jZroRGi28NUlaLcIqwirCKsIqwqpbbDL3SUxVf/75togM", - "sZCrMBmh1dcenaI0gm9EmvBI4MhuIyIF0R3RHdEd0R3RHdEd0V0d3TXC1xZPKjNhs0mzPdwb97O/txAm", - "Y2EYB53O2YBLN2AOdMap3ea9BKjsglsJUFuyDiPrMCItIi0iLSItIi0irTrSugLWbBfDLL/sZiLiSZQn", - "3IpFQFYkKoHiN4ZZfukd+xt2Z3qhgKcpM8IGl2vB/O0bM3u/4C54/tdW7DP0f2vYWA5HFiTBpM1iEZzN", - "eUe+rsA00+cyFlkdihX19Lhxwi+JyYjJiMmIyYjJiMmIyYjJZphsOdlsF8LOtYybyeudlvFy97Yjfi78", - "ap1kgsf+KmNQg7kivG9/l1819BMO8ZhnZ+5N4ManxouSuUEB66OcTthIX8zMMkxeDm41h2Wu0BukINv8", - "iehcB60RjolokGiQaJBokGiQaJBo8NNocIa2NgZ+Xtu1OK48T5JZ9ZipjSXv6/J6mmYGptZwW3uQRSMn", - "7Vpruahd13vvmsGKqg1c5KD3NoZur/bOlSO4r5DNtgO5V6tA8dwJRAlEKdAUcRjFc3c8VMNCG7xzUAnH", - "OVPUqTpVD2dKhxBS1d2TgQiVdaebUrlFGSmCPSqCtJ+LLJOxMKfKK+bCIgbzYNb1mtU+a/d2u5kTEvTF", - "iJ9LnWEMc6+ak1FRkU5DWMyquN1ShPFqISEK5uajXq5eB4pvSdhB2EHYQdhB2LFSfMtaJti0Lqj7Qa7m", - "o6umInVeuuaE+woHbOT6iiQ3SW46uaKTK0IXQpcb4fpqM9iyyPnVnJ4CglTWOcH62pHkyzjlur4DGDpv", - "IXwifCJ8InwifLqNLq42xU5pvsDH1VJ1Dia8EeqcbZ8uVbxH/SLt6BcfFem6LaeJo4ijiKOIo4ijiKPI", - "mdTG1FCl07Ng22IW21AXyTq1ltOPilzmgGo1s2AR/5yLbLKuNXH5sVUtikNdr2zguzCDh5NVsgBNV8jH", - "dWDHm42jujG+Wh7Aq1d6Ms2km2iHYy6Tq+Vg8v6/RGS3a9ccSiSLZiJDIkMyLSIwIovmCp2UcGiKJFe2", - "Xl5m9/toGn1wGzqZkP3nsfUtGkdWviSKSRSTKCZRTKJ4FSvfmpi8i2VxnTai+yH8eRR/7PI0XVU/AS4S", - "Y275YkXFQZo+5pavdP4zrcmXZUPzxWlW5rUCUOtrUQn4ASXNAOEI4QidGdGZEfEYqUZKYFRw0Toqknp7", - "GyOymnw7NQY3LuWNIa5PsLxZyWx5tqPmLZY3bnqzuXoRYBFgEWARYBFgEWDdIqOcehTasOar+4Gn6dFK", - "l9pXoDJMeZP0YDVVhQ6jS/gEWgRaBFoEWgRaBFo34BL+pkFrVUdBRblwI38ZUpGLIKITohOiE6ITohOi", - "k9tHJ2scsC1wBrSMOZ4Ke5OAo/d57ZbpXIqAhICEgISAhIDkZjjduQKNLHavswxIMOFXziTbu8RVcalz", - "3W50iImIiYiJiImIiYiJbrcDnU+5nBaLfj7sjoXNZNR8He2NsHmmDIPUzKdmd6Rir1KhXvh/Yxiru9Dj", - "MIYqH/dFxvSASTUUBhrk5q1hRqpIsLFUsZLDkWVvTx5BxHk3RcpZPsL34Y656zpBWPd8NmExnzBu2ViW", - "Hq/TJj129fV5tZayiBWXtpsmXM6M7SxVEW4QbhBu0FVwkra3TgMBEyEIwJK8BUHTel+WrO7NtokYu8ot", - "j+VdTo2hGpMERsb7IDPghWQguM0zYTrsZCQNEypOtVSwMsNwxALtFng8lkoa66ThuWBpnqXavZtaJZPO", - "qTrRbCBsNIICKiVDjMoiRqQvm6WJ4AYMHeCJ0MJQte4H/9czMXmVHT3+WGl7UcvOqToasNQt906SZPpc", - "uvrCK2b5mXDficgtiZGA1rqy0nD3uRgWBiYZjkecfK27D39Y7vk5nU11AJ7IxIKnO9afsHGeWJkmYtrP", - "jkneOgm1z/78b//tj/5zZ/c07/X2vpv9eu/PVn3sB5+gPvjDDGTUxS9fpeZhTKo199/+GEgxVH3u+8a6", - "B1d426x7adYwl8NMI0o/n0xS8SOMqYixJbM/+vDzTc2ZSb5+PI7DmQwo4Lx/qNQxV3ZGuSyPbYean11E", - "3oBfJyJ/In8ifyJ/Iv9b6XRgltJL9F+WFezOQ2H53ea9QPdD6V/+BlyjzVQZifoTJuNaNVep/IcTuCO2", - "/JyyUolbYkZV6icS5iTMSZjTqSGdGhLN3EY95ixXrEUz58t1mrMHfhfSSSA3IHIsWMbVUIB252gA4waz", - "EXQ0DNAlvJiFllBa5jsalqaEG8u+32MjnTeF7zg8X0X/d2x5ZlnMrdiBmknF3jx5xO7du/fAn2diNVWU", - "5Eaei06DQim098A+yfS4ok/CbFr7raKU+iv/1Yodqnij1TrRG6jU0aA6KolbGZGMobfDkBYJ3LAzAErQ", - "PcMD5SkRsMWtQDBr63PAgLr1WejczufS0B0jbmCBrXSFb7XXGNY12y1BqPk/egwVPIgc2xg3V53c97aD", - "tQMQ15XV3MPTorzGtba88NsaytqlJW/qTRh8SfPfbmLWvyzMGPy0s9qfQDQVi9rScsmFlNjt9dqtMb+U", - "43wc/iWV/1dRGSeUhmDb+P463KEd+WUC1kxyhkZbJdoqkd6Tdgqk95wn+fJGAb943xh4BsWKcXMNmUZn", - "rM9tNCrJ0oFOEn0R5tWjROcohUxhhoDHnXOMj5kXlL/aPYfI5Y8lr9nJXjR+bDfltwMt+68rSuAmydv+", - "BHVnuYegX1a6oUFuMggQCBAIEAgQCBCWAQJKmCDK69CgpDYMRnWLFYeF6V2tUu9JyGMlsz6wLnNJjpN8", - "2LBVL/++OdO2ouSnmc7ThxP81lVbXKaJjkVrH3VaDVo7iJt7kEUjJ1jqFQn++Trt1W20O/Mz48o2Z4ue", - "vw57szCzydaMkIqQipCKkOoW61wGU8xZfCrbpHkJ0oTxTDAh7UhkzNvLQw9bbmXUYQehJDd44Xc5mEJT", - "5aYGtxju1lHAqXqip1mG+rKJzt3qz1JuDOMxzm+esAHyD850GEI3dn4duxgJxSKeRHnC3QpcVCp3q3ab", - "9blx1VYwh6DIbwwbIlixgRRJbDqn6pVKPHP5o8Xjty/gGsmjV29fnjA+HGZiiEui6xSTp6nOrL8wU7rw", - "UXSdl2J9wXK4ZxuzhFuR+WNI7uGsKY7yk+KyxzY8cPjcsagjlebWXHcs5dBACqVMZENkQ2RDZENks0oo", - "5ektyJUNzoJ07n7wfy0JHOMVJ4wXJIH+vU6Vw4So/IM0hSR3s7Mk81Uh4dnRoP6JNkiyymXXaQZBnLmV", - "SfpjEXwwTPuQY6wFroF8MBCRRYNTsGUq5dw5VXDndyy4Mm0HaY61LjgexWBhXrSGfNH4yk1jPhbsTEza", - "4VptELbz145dTeHebSbOpc5NNcWInwsvubDvYzaQmbEOzrgTbsWV4T430jR5lZ+y0fJ7CsWIL7yjQN7f", - "iVSIVOiKAF0RIFQjVNuU9/dVUW2h0/cqgtVdX/wcOND7rHoQ0msQLRAtEC0QLRAt3IwLhVfQ6gwzvpJr", - "NEzX7BStoiXZoGM0X27VJVr54uQnuUWruIF4lXmKcKl8udfuNu0pjgc5TPsCHaYdoUVY0LqtZ0f2uHiI", - "zMiWPQQvwZWNyJqf3oQJGVeTVwPcGK3pog7qNT/P2oszgKdeh5VkKi3e01aHtjq01aEjXCL922icNgyc", - "uCbpdz/A55Kz23daxm5ScSwHzzvdrMNzukSrochwMWmDVxAtjPoGURj8IzCp2CDPwOStzxM3PFPjMq1M", - "h80WUZy/ZsJmmkdu4U0mmKOAI9k2VAOeURM0S8P3wi19PMkEjyd++bM2k/3congothE4MzLh5gweJQ7y", - "qYlb6dS4n2dQowuFr1mRg7e4887YigNgOJHlzEg1TEJZbiGd6HxqnlfetMChMFdMKgmuJPjYrQBul7Pb", - "6+EBsdFswDP2Xc/XrrDQ8vm1S+26E3Yc5TKkNSIZ3GUXOk/iUMUwFnrAvu3BmbqrPxxGn2vpNzSQabtI", - "2xeRHgvDetPj1+9607NprF4hxt0bB8NVt8Nxg44YtIqa2c9UOnMmtCK0Ii3yF65F/rb3YOMd8EirQSIj", - "u+aEjWDJDyZQ2skqJwsLqIp8tlPjpNA7xnIL0qFpohJBE0F/9QTtMAQpZx2ABndQCDNdxxup6EYjEZ3p", - "3HaNMMZxrWtS/WUQb3gZnmD+iaabC8dQwCOf+hgTb+kew4ISPYFc97WGhTVa+2omXXggpCOkI6QjwwCC", - "nVt742MWPErkc5CmS0OUjnl2JixEGu8meDNimdVAGHS3vpqwp+Bpykp51R+Cv5gmeB7KmlMYrXbKKeKf", - "c5FN1j0cLT+GB6TbtF6cb6/7IGNGYhZiFjrhI5F9O0MdVeTnBsR194OdpGJxqCNeFs7MP8n6EwgFWXtv", - "YF52rXS2YzHgY/PBzqKOP0hTjPd4zVKZJDJJZJLIJJFJIt9G63q3dY2F5TIxQSJuTip3pTKWJ4lLeiYm", - "zecIR5jOzdqyqD6XnB28PmLPxGReTJck2UGaHrw+eiYmPp+199WVvOQ0Iy+SOtAtKJevdlKRZq7yVqJA", - "51BGrQkHtPdMTIr105vlZ7NWOu43PEsIj3TmI44EMpmLO8LHoqS8CBV3b4ofshAtx0kCI6ohksBZVmmY", - "pBXjbwwrFdGpC35S4qLfQxe8L9JpNGpf6Uxmczh0kKYPuaErlsRAxEDEQMRAt9DPuCePNC1ww6HK5hlI", - "uxdor1FRUUKgUJdXB7kddU7VG7hcZxhnb988hyUcAqq5IYYkbK/TY4NEXyyEJEi654t5KuzbN89vilLj", - "EYirgzSFSHPrLPIk1Emok1AnoU5C/aYpNlDche0sQ2m3HZneLd6iRul+ULxnvl6RjkXnVL0TmRxIYUrC", - "3P2C3gcuoxFXQwF3lMDFALP6zK1dyi3Lg0yYEX6zstgvqrG2hgSzCc9DSY90LODey7ETosa8dqlNB6yt", - "V7FKWD1L1yWfmiMuO5gfzJ6NZ/hHecg3nnmeyVUyXTryNSqtEpXdwzWxOnnfiFhmIvLtIkoiSiJKIkoi", - "Srphqg+UF+tSkieIRUaTmKbBKlL46GXbD0UORVEIchJ/JP5I/JH4I3vEQjSVZJ6XR+/nZVz3A3wexa8g", - "ftVSk0Phg3UePYauTvJhvakhSKVVFPGV4hdq5Mf88rlQQztq7X/3bbs1lir8c9cVZN2b1tpv/c/vfOfv", - "3s6D9/9157/3/yj+cff/+Y//939+7+18//733s6Dg52f/vHsxcvXOyfvdn7jO6N/nY1VumPPd/5+/2Hv", - "/sf/qDnp36r9IgpxEtoktElo08VHuvhI1HLrjjbGHhnWZ5YuunFtIhe4HujJxb134AWrw+q/noMZSHYD", - "cWYFpbv7wLuV7s1srfeI1Ws+cCFVrC9WdXE79+CJHIvftFr34eB2eM3+ANfIPlb9ms8Ow1NbB0oor3DC", - "0W5ZcWm7kTmvZjM7MYhBiUGJQYlBiUGJQW8Tg5Z5sPT31Yg0RElYfIRUhOVAOxjIY8GB0nHIlPRqVwkS", - "QWBDYENgQydiJNdv6YlYIW+XyHSlrRyE1kQjrpRIVoi7VX6MhcfqxfnLUtJHoYAlgaRmQhrVF8ekmnZE", - "JUJTNbbRjw4C/ryesEgNzZDGTegrt8M//iMUvG5L/MNfb4Snmgl05SBMq+a1bZ1VTT1qgikRxhHGEcYR", - "xhHG3UKMq2WFEs2VRUg53PpCP+/obrwu6yaP7zWSakv+3mtKwip8Jm/vdS0n/+4kwkmEkwgnEU4ifBX3", - "5rxW1i6V4ssUNN0P/q8lAROP9cB6JUptRVh/wmQMSodXECK8PpU0hSZG2lJAQveCw9fz8IAKlHp4WH6g", - "U7Ru4WGO96TW2m/1dp9+d/+37+/fP3jyy8Gznw53917+2nv084MnP7WqxzobPbuhEH7EA8QDZHJCJicE", - "RARES4AIgeCqQNRedFFrAdnU3de62VDS+2L0H6TPIH4hfiF+IX4hfrkZ17auiC5pXoMub9OYN2hl5qkF", - "E984cPlSz5CIoYihiKGIoYihiKGIoTbHUJ55NnwoBlNrXZtlfGi5xfIhZr7EXhm81jPXuB0rx4JJxd48", - "ecTu3bv3wK0BY247pwqsgY08h4v3dRa7cPO8Hsn2env3dnq7O73dk97uPvzX6fV2f2u1W5h/a79VFF9/", - "A75a40MVf3J9rb6u2j6BO+g+5uM4T6xME8EGgts8E0zGxr1aZ2JiqvbTPsGP/nNn9zTv9fa+m/1678+m", - "AcEElVaufAVrxUZ4O/3mRvgEP/rP0IjZrxsbEW79b7MRWZ7AMFRr7r79sbf7jx/+sffPX3/be3n/l4e/", - "Pus9OHz825OHx7+9wHZME3375tt3v/20+0Pv2ZtnP3937+XDvXcH95ta5R6rb9LMNuv50WN2562S5yIz", - "PEkm7K2Sf+WCPReXMtLDjKcjGcEPxzqzsLAfAVQNpMjudsDY/ho3RlcdgeKofnYQ/A+hi//50/ff//DP", - "h7373/3juPfDD68f/XqC41BNd7z7Zvfpg8N3L7/be/N0797Bgxff/aNpKKbr960YjS/yXgSIqY3cimjO", - "6TrvREAt6EYEbZ1p60zmlLRzpBsRczciRNiYfcqmsfsBPr0V5aomBvDMigYGIMhW0tL7mizU0X+u439s", - "BUlfkr4kfUlxTYprwo9bfvgvvFi/GnxkeSLWVVjDM8v11W8g609xrwEFfe2+NVZsxGdxrLGmart7zXrt", - "zWrsTtUBOxMTtw5xluOjiK8FWeUGoUriYxO8EIsQ4Jp98urxq328OQO5TNcno5Mc12rNTJ6mOrOsr+2I", - "Qa25itkzV7SCdc7wsWAmFREIt0jHYiiUe6E+r0+4qyp8cbrzqHpRq1n7e/Dmt3svHx8+Ozl+9+2bN0+e", - "/Pzdg6f3nxy8q9H+7v16/5/fvnz59Ofje3uPnvyw+8uD+4f3rqT9/VrVqW4V3Yg2tTGj61SmukqQLpV2", - "c7SbI10qbWZIlzqnS838pmHTrmVcvqv4lXmDh/nbNgh2xXwxHmWgzeROhmQ2yWyS2SSzSWZfwZ2MN4L7", - "BCVk94P7uKoXGTD7W+xCBi0DN+E/xkPC8oNUbBF5jiHRT6KfDl/p8JXYh9jn5nmOWYl9VncbU0KZZSZd", - "NwlEel+GboN0FQQsBCwELAQsBCw30FpsRVZZ2U9M/bnKvJOYr5xUvsjTICImIiYiJiImIiYiJiKmrTqG", - "2eDxVtcKNF2pN2E5cQPUoBEyQsVuNrqBM9Zf/ruQdsQyrmI9ZjG3fJ7GXJY3VWu0+4VcMiSTGIImgiaC", - "JoImgqbbB00ALZsDpgvRH2l91jXn8rKZlB7xJOnz6IwJFadaKovXt/oTdnwuL91YQaYTxvs6t6xgIp40", - "utx7I0CGuedfTZMHxwnbUAPNFPULtnwtNRBZ8BCpEKmQ8S4JahLUywS1F3AoIecl4joSO024WsFzACSr", - "dxbwGnJY00EA5Pfl+wTAm9IORlyFO27htDaT/dyKhtvLMr7NTkSLnjoTk6VddSYmq/TVJ13338Rt/E11", - "h8Jp33Fj7l7Hon9Mcwe9w7SVfuIxigSevM7c62glMuTsJXm3LA7hhvlMdYt/a3Tk69YWO4G5FAuRvgrf", - "fkF36d0ic+X7840Pb/vOvCuY7skTthO2E7YTttM9eUfTqcflQOhORrA7h5epyORYKMuTu6337dbljvTT", - "s1AYrXBZHvii4X68K2hL6i+XNRZy3RfgoVF0wkcCmAQwCWASwCSAV7v0nqIsXFcGz+rNuh/cx1H8Knsm", - "Jh+7SlwuMAmqCOo44wPLgiYAZiTI7lN15N5Dm2fK+MbIgRtfPAjiSSZ4PPEtYFL5jHTGsCYs1gJXs0wM", - "RCZUhLMj4WBrlOb9RJqRiEPR87DwUlxajwrLTYtKzV9oX8TV5NWgRi341enBvgLlFEzcod6Z01nVffue", - "2IzYjNiMrK/I+orglOD0c8LpywILN0ynK7tiAqacnnWWXTAhbl7V69KaPEmelohpiGmIaYhpiGmIaW6A", - "p6UrAs1CZ0sBVmTso1x32MkCRRcDEWzzTLk5OXDpLA5zbkS9i6ZNUgspwL5QBVhjGCA/kcL00aCFZa9R", - "7WqscG83flfMMMV4BBRiLLf1Fo3PIderGDTik+vZM27btolMmYhsiWyJbIlsiWxvoUuuK2PtIr9cU65t", - "csj1lWvTtmN+9kakCY8E9tB1O94iFiIWIhYiFiIWIha6zc62Nn1w2eVZNJLnotmo7gATBH1go1WbT3eT", - "DiIJXwhfCF8IXwhfCF8IXz4BXwJDlAlioxSTjriX2kucbEA6JlXDPb7gbeM15vdVcswiTwmuWbfQc8SX", - "42QB5tXV3Sw0P34tjhZc8eRtgbiWuJYuexLWkbcF8LZQQarNu10ApwuujGZqm3pfAAlFJ3d1cvvzeY/A", - "QaFrikQVRBVEFUQVRBWruJCYk/tbUBjhv0E+PROThbf4gp19hUTK1/fwh0+5v/cVw0u7sZqhcxdWdgtq", - "ILpXSBBCEEJHdnRkRxRGFHb1e4WANQPv/WqzNwyXaHX8/UCiou1SUe8z63pId0PYRNhE2ETYRNh0Qy6t", - "fTozLby+thibpjfYiJw2Tk5bPJ/7fPfqiNmI2YjZiNmI2YjZbvHlui0eNqKrrOY7dq8xwdI7dj4d3bGj", - "O3ZEMUQxRDFEMUQxRDFAMYEhNkAvOrM86fo7Rx/g8zjJhx+7eEms6Zbdz+5XBsnh5Yy0MvlYZAwz7LCT", - "kTRMqDjVUqHAcnWOkgkTl6k2YeDDc6bDNp/lHFNBEa8huxeunJXAquiTa1dDLb8kBq2AVnXcatBa7xGr", - "13zgQqpYX6x6AW7uwRM5Fr9pte7DA7jT+DTTefpwsuazw/DUNml0Wt4bMFGHt9WKS9uNzHk1m9khJoIl", - "giWCJYIlgiWCvQUEK6I8k3YCqIUcdqLPhDrIHSj9/t5J6SnlloGw9HcZeCGL1vsaorUu3yVeIjBNg2eI", - "ae1qfEOs4mk8kWPZ4GF87z64Q5DjfNza3+31gBf9vwoMdHNiKLINaNIKhw4LVWrTBtc4ViBOIU4hTqH7", - "eSSmb9+t/xlFjBebdWK4vSxYc21WjZf8SxJpSwY5ZZl3zcY4s0WTeCXxSuKVxCuJ11t3/b1WKi7Z5pq8", - "/y8RWdP94P86il9lz8TkY9e9/zYRY9eE5V4Sy6lhyeDMZ9hhT3TGopGIztysLCVkPHLre5vlBse6e86T", - "XJTOZjCkV/3O+hizPyxXc5VzmGo7Fx7G1BykrBEbDK/DxdcbHGylPXqpz2iPThBBEEEQQRBBe3RjK2K8", - "RA5lIcvuPBSW312wTX+VCgVn2bB62FEmBHMyxjA9qJSwj5p4EbeZl4BtcONmLLcywtCx7kG3iKcisxMW", - "u/RjqQQu6PBjNVN8Cl7kZOJm8EBwm2foDA5Xdder3Eo3TS6kHUFOZSyBXE0qIjlwq51UlTnkhQAPda88", - "qoSIDeNFodwYHeEsgaL8U3fBDdAOe4itrtJTLAZSCd8J05w8K7nS2WnrkXuljWDHx69m1t3TVsdlfYyP", - "V3JOhGUTnbOUG8N4otUQdSkDOcyRrtxcTwQbZlw5kTRb6luDa4I0Rb2gWf9kvzIjrHvEnLbYHVfAtOew", - "hLtQrRfznWbYiJ8LNuZqAk2KuBGmjSuRz5TlKcudJN3pc5cxVgucRI9TzMWlcgObiEuQPNJJZeNoqMPY", - "IVos78PciHJj9RhpAQrc7fV6PXZw5DVSLM6zsPRBoQ4LpC4iy5YnmxvGAzaU50IF3oVstUom2CytRAhA", - "e0dpteOdOt2tTJtUZKFDn4lJhx0NYJxsNgFLpKD2UuKi8hhy9vRBXM95kgkeT2DC8yL6bem5dmU+w7o2", - "4DIJM/Tb3gNcKkq+qipTFBZc71HRVdNT11jHcjBh0rax+dhSkJH1irkyhm6Z3Ld0E6/UAmzSkUpza67b", - "Y2aF58lnJvE+8f6WbYcebLwFj7QaJDKya45XpPMk9iPm5Z97aQvQjXy2U9IJhkUQDj3ItLpxol0N7Wpu", - "imq0CjBLdzZrK0i7H0r/cimeFFD2sQs0vYIOFdMxaUwu0Jdktdq4tSmDmEPNvvA7hpgJaUcYtUW6fGD0", - "S1hZq0YtdcBTrOf2lag1GTZ235emoF2xiBBgpb3iCwB9/ypEZbl2NTAUT7pgYkNiQ9IFEzWRLriqC/Zo", - "cmWNMJJF0Gxy1hcjfi515rYfha4RdW2o06rRrQL9TAB5QLEGmx3Xf7D24qCDqipmmU4SN5YsyxNh2m5q", - "qzN4XXH4vNJqWp8LGQuWcTWEDZHXLvrbdiboxYxUw6Abdcs7G2u3AYNQNi7HWKtvLNbNaq8zlBFPkknQ", - "4Clx4Xuyw371dQBVGSBf4D/oAVTa1XSDCTpHl9i3wDDudZB87N5z1wjsTXipPSV684C4WIDn0BLzlBCZ", - "RwwGInJrvb1wy70DSvzK1QsjS6sYv75Mpdceu+877BhU56B872s7chmOuYq51dkECi/1g2uMnx3Qc5yl", - "mdSZtJNC9wttqCr+ZcYAsLChosOe6wuRMZWP+yLzOY3k0MFwyK6Nw9hjfRHWMkhhbJGkXJlimvHy5ApV", - "ggUhRjTgudVj1x8uyzFXOU9YJtyIupRhghs0g/CuM9qMs5jLZFLOXBom/srBbqOUAbTe8HEYHXEusgmL", - "+YTdkUOlQVNdzPegg8fzhTezX4cJf+HyHPE0FQreClwW3ToHY8YTt9bBm+AL5RZ1gMJ22EP8+Y8Dt9L9", - "8cZ9yX5kL45e3nnBL0ORBzAP2+zFwT/vhAceioHOBD7RZi+kqia+e7fa/UGnMXKvZcy0q5LXSVYUzLG/", - "0SuhKUKZPPPzPjQEIizg9JHGyohlYsizOHEvuR6wixHMb5fMQbysi7iA20ik5K94f7R9NTh0UUkX/hlV", - "4X5PQ/pw2vPQnof04aQPp50d7ey8PnzoSeY61eBuDDIZQ6CsWmfFrzAB2J1UDQ5Q9po6Ewg3k93gp5k+", - "lzEYnaS5NWhHpAfWU6LxicS51LmZs6Ko5OBbuBNMXFIuM7DJaMxCmsLqIsTycptbOxLZhTSCxVoYJ0Uv", - "pfHWF6EzpuYXgOxzvmkwUBTUMU+HGY/dfjbWFyr8HcrxoOwhuDSa8PZ7AKvpQG8S5eEGVsW/RaahDCvH", - "Yp6F/TBdp/nG183EZBpCKEwoTG5lboVbGdoL0F6A9gJfxV4ggNxnNI2BC3+NljFVGjYjeJ8xeqq3j8GT", - "GrhciMgv1EBnkT/TOKheTPSXEMyIZzhJRtwc+LOecMEATdZlxvAqYug6DOQ6zhMr00R44vYPSbcxyVxa", - "m2fKyUSwUdeq9mIBYP4T9Et5LpQE1X8muNHKtMMNyAudnflzJzhBqfQgtHORWc9TUbbqeQdd/HUb9dRZ", - "2LjNSaveLfleb+/eTm93p7d70tvdh/86vd7ub612y9Eat639Vsyt2PF5XKfL8bmRISMbomyibKJsct5I", - "/Hn7At+V8ejck8p2AfQjcqbbC84TJ5gE1yigM3GuzxznFRcP3SCXbnd6HuuwAzM1FWq+Edh8+a+N9gin", - "rbEcOqZTw9NW+BntjIKFkb9fB9rkZOZGJTfsQiRJ51QdFJUON2vzApi9YdBIGqszGfHEG0CYNmZe0xGp", - "TvOEB326V3YfWOZIylg+TjvsF1d/b0nhzbncr6wP9h+wArTn0FgaZqyb75FWRsa4hoCxUbt8xxDangmb", - "aW8hVdJ6h7uq+PJIw+QYHKGgir/N+FiroUd3oBDTZjx365IazkM0God/WTru9fXaFYj9tm6HJTKBwof5", - "RQNATahgJiZNWMtwDwT7JsGd2GZjPvHbsUGedBjBKcEpwSnBKcEpwelXD6co/9dSjbbrtZizmNufMBlv", - "wytaVe/39fNK77OfgpO+jZCGkIaQhpCGkObG6du2r2nromapOfzfGzgyNWUNVLi0w1Xs77DF3PLmO2tB", - "0eSLAp2WScHvVZRpY6aHtnB/icGbgPfOHuaZivWF+sk/mvnagGWIlUrnpshWD5gRQ2glaOj8CXL4Dg6A", - "jQAcc/Jj4svxF/D8HSbvn8EWV+36vgbTS2++mWW/Y1DXXyDynYhn63rhv6/rK++2TKhMumnvz5PDpSiF", - "R6FukXB97R5IpLHTG2tY9wvXVLwz52prwTAUj8ndr1D8MhT1lf7aiLQ9O12PLc+gg0CfifdFrYYpOCnP", - "zH1WnC67nnrz5BG7d+/eA4Y93mGPceUo9MgJNzZcr3sq3PdZrvBmq0/hRiRPOE4RNEsquTiEHnWDUHdO", - "DgEdt3NOPtdBhyrecPcofdE5VUcDkNZKX7imKzbcdCdZfV1dhC+ykX+LhqqUgmMumqyLJMgvpfia8zUA", - "r5pyLP52jAOmNHDiEPEkyhNuAxNgPUxnYTWLUJy1PlRab08eXbN5RVgn/aXTsPLQpo82fbTpo00fbfpo", - "03e7jSxGBYtve/MHQAuX/Wp9wqDniDHPzlCMmQDXeOuo4nm5ZveH7keUtBKsEXA/FRxhdNiBnc3UZ4X5", - "SgO33GKmc8zJb3nAjlcnbq6A54yyKa/M5h1tdNiRZRdgl2wnqff20hdOdEZhxwX18F3I+v4F9LWBy3pg", - "sewrNlOgyftFn8E+8G2ovnc74ovEva3rpjqXMbO5lvs2nOqXLa15kugLEAroz6QoQKIrEDUBgPSmHrF2", - "DTK6vOfkKhqhex9b77IwbInlAHym1/ncgAlSmpzQ9K/yVGPztwtr+2YNhxtkCkIITQhNCE0ITQhNCL0E", - "oZFUr35yUpRryjRc52DsuJR4S7Fqy0VgodftkqDSSPJJQBRCFELuuehKPqEGoUZwz2WqHBBg47jCEu/b", - "rcsd6WeoF9tN4AGqu+Kf/hKUN8mYO7mfoZCV9C2lvBfqR6Ynq73dp9/d/+37+/cPnvxy8Oynw929l7/2", - "Hv384MlPUCb4Xm7tt/7n997O9+9/7+08ONj56R/PXrx8vXPybuc3vjP619lYpTv2fOfv9x/27n/8j1VO", - "X8PZJ+PWzyivnSsSldwMBG+wzB8/Fw7CyusSnmKDoy7QYa0SHILbr/DienlWHF6mXMUipnNVwjHCMVIK", - "kVKISO0WnqteGdMAcKLR/CHMQ/d1kEI+pO2YqxjXxDFXMg02WlmuwF1/hfM6p8qN9JmYeGs6N9p/dtMR", - "N8J0P8DnMzH5+Kcbv5rvuxA4qvvBfUC6+WO5w1jeIEJ8v30tm+uw1XRsvc+vYyNII0gjSCNII6UhoSih", - "6NeBog4wrkFl2I1cpybNFn2P4Hczp1KrCacEKYkiXVcWTkSh2iHE2mNe556qThFZUV5KcOoUCfcmyPFY", - "xG6eJxNUTG7sTkv4RoOZHbEtsS2xLbEtsS2xLbEtse1mD8SBZq6FbuFGwgK6dcsJGJfVKF6Dc83MhiBV", - "bsnhUaSz2K9IwGoQGdd3dedUPcLLEIU/+/oQTy7vNOEqOLus4Wn4gXh6HdtHHO7PyK5Yg/CiQEOJZolm", - "iWaJZolmiWaJZm8gzYLIvw6aRe/xC3D2BSaoamuldRNWV8OhnovMuInsX87wxjoinSdRny2h6JxqFxe1", - "d9iZ7ouxVHKcj1v7u0WpbriHIvuydKzEqcSpxKnEqcSpxKnEqbeCUz3FXQeo5ir09A6eXHPr+WgFI4Ni", - "jEqPzjPp26KIR6USvn4qpfN1Ij0iPSI9Ij0iPSI9Ir2rkN6UjcoMtR7ruQxhTJCjqpV5riOetNqtPEta", - "+62RtanZ73Z3977v9Dq9zm7LoYwv60PAroM0Na2P7eLfD/20vHN4mYpMjt2Sldwtp3idcLXg52ojSj88", - "Fv18WP7iUW6sHrum1Lnu9kvEI61MPhYZe60zy5MiQiXr5zKJmVQ7PE1ZbkS2M+CRq3nMzaiveRYbHzxg", - "ovOMRaEweHigkwQdnEuIDm/ysTfqVCwTPAFzzM4UTrHwmnq+1LYwMjBBjxscRjqYyeRw6EoFv9/BJqEa", - "owrdZ5tSGAY7yoQZ6SQO0e65mzhtJpTJs4KaZtoFZhE8cYJS8DE+yZMLPjE+AIHwkbA8Pk+7Uoy5TGaz", - "gwrbkZhg8ez7+//ZZru93n+ikcTu/d5/+hVbZmyslR0lE2b1mYMV17lFZAnlumiC2U/rh/lzBcuDa/OI", - "p6lQIOXjzDGauEy5MnDTbjoQ5f4OPqDqfOOXPEWN+RnwUqqNkX7lkq4D0EcmyKlLlmYSZo+JhOKZ1MDa", - "I8ZN0ba/cm25abvVPOUyDu5Fvc2IyHZC34W8OuyxVt9Y9q/cWIz3gKObyLG0hmmFfTLm2RnGf035UPz7", - "f/+/4KXUjsQYZKX0KUtrm2uEW/UynaAk1RhOwi1FyiDiovw0sKSy589flPuxzpdWTRCG4ErVzSWYs1KE", - "OBv4XpaKcbPpQpoR+DKFAADsZCQMLHY+QgHIPveumrYXLd7kxqCAwtEX8CeGHImFkUM4Dyncuko3n91y", - "L7UCf6lDoUQmI/d68D4sXoNEXMJQl3uMY4yScze6ucEqVka8w06CX9k240VEYR5hkF/OciX/ygWTwNYD", - "KbLK6JiJsWLso/C6RjqBF+ZEh/3+RvCYjXUm3t8JS7NOhcKukrob68h0o0TnceEF+G5pxMJY1AzTgZ9Y", - "QBnB6ytXE9xhuXFRwoduyHh0xngU5RkYq6PnXfCr4eodPOa6JiieTKyMDEvzLNXGDciKTdDKbbNMFyq1", - "g8FZyi05hG9q2vECFAQw2cBMy4HEcJiJoaPDUhNxbkwgIU4QTKwHA5FNg9CEZ93gu+2mjnGRxHAKzMi/", - "hXFbSogKKC0byaF7z3nMUxsQB0c2LNuuG8tvEVa49fH9x/8bAAD//3thkI9tDwcA", + "yRf38oIJuDU8r/6+Rwt+D4cDqFu8KK5ShntiqX+pWITMWGkV+T5s6GA4CM/GYDgY//zjYGhQZ/53/K+4", + "/Bpf/LiGzJvGwz9LJpddlslT9GSWGUiI1IpPv5kuDREIZdBf/ojJMLNC73y/o0t5nlc0w3JMDFWF7X/i", + "3VI7u05MGTzZfeAO0IFIQ4n5wen9+0/g//9TnTEQ8etitW9kTjGoRx3fjU62dgIUjfbH/27LRU4M76dD", + "V7jPL2Mml2lU2fvCtRGDwK8M5Dpp7EsQG7QPtj6uvofbHBEGZH7pDBb9LtoXfL+aF+I6wm4Lgx76Pzqk", + "jeCLzdLzobair/M8IqK/KtgbdwI3p76gcGM2YP/+At0o+3uV62d5KdIjmZ9nbBFmGu0nIb0R7KpgiWat", + "IeKW41zyGRfwYptJkvIU0qVNuUgJ9UnrfOhEPZmOpnLGdBUJn0t8CYRhAyCzYuqPLFfWj5YLhs6weGWm", + "V7nRNhKYZm9OhWCb5I1od37Lzud5/j6y9rCx0U5M674gYSzmMfutZErfBHz1AdvAvhFe4MM4J2ioqmyL", + "gl0avLdWhP6fhElNOQ7Qd40vGQoOTbuutb6BwmeTUgFzEB34XJ9ezb9IxSCProFCxXl8/J+Hr/YPfjo9", + "+fn74+Nnz/756PGPPzwb/3yDirN7ym/xaB/WVq9nP96jE0F6h4cndlb9Zq6D/DTmFAK9SEcVnvhx6Ezb", + "DB/I+bKWmTm2h6qWLD+tgsH652GOwPUV5GSO0bRtfuZPkZ+564a14Q2KG3bSH3t03x48ff769U89nT2O", + "Ab2Lg+M+tyB61UnML7GLv/8Nl/xXnRXFaALPGU2ZVB9hjcYIEPL89PSIzHE0ghE/yheJhIhBi0nLToEz", + "OliDIRxAkQP2zSRW4Yqe+1yHtk7zlGaKNXH7ds7gZbAtUQbHkkM+EhiAIPGvLSPOlvbdlNHciN+0mBCP", + "GHmjmCRTyZlIMwypD0rBtVfn1WZ7igdtYF51hOUrPhNczE5YIqN+cPxMFHxHByuki65fF3wvTl0lWzzd", + "CeMX+CI8dQbpBdVPyK/nVLFH3/8KOVBTw4qpSPMFOV9qpqzoAHlKsPgES5HW/Xo5Vyw5+3VEjlmSLxY2", + "vSf/nT0hD76v4QNbnjyaPXj+Qpxepo/H8+eXbw5fPpvNfj55/HqaH9Hpq7/Vd/4Odrr791/ozu/jnf/c", + "33n8f+7977s/Hj4Y7t6/j298LE4dUizSVgh/G4huMZYSk96+yefKw0EZi7qyHJG8OX5hgLdP92u3nSM5", + "rwPubA/2F9C421cjGP3javTVo6rMSnoKIFGNL/IIGu8Y3ALMrl9QScFkoOqJ9lerfmukha+P435hnGpL", + "y7e0/KNp+ZdNBzcndQcXLKoVdmlZ4H6NvHMSIkeL4wbPncZBp0j8dDSsrJHYhqil0mwxInsAATmHaHwj", + "zkGLUsXS21S4rUHQM0+lZ9NtvISKmVGnj5/tkYcPHz62hvSPs5Z/TKVnfsHksisX+ynkx8c2jbKl8a3f", + "2JQCh2y/DsaHlToQAuOznjcNMH1DelYuI1Q//vHgp1dHu/8+/dc/j//1/HT/H9//dHT816P/3L959QNw", + "sUbrKOgyy2l6PfskTHBkRzDXqvXCT5bZNW2fx6ZndMzr21MPfEBHxOuxlgytRvMag2rdoAloaV2Xajd6", + "kdKnNKMiYadzydQ8z9KjaitbtcbMh7YN1lIS4MPhA7XROQ490m7sXztExc2exPddwn782TxQD3Az2NeV", + "2HrV3ril44ibB+hF0BXMvCKvxKe75TX5o8+V146/fFOsR29mwq1Is5XQVp//wbuNNiAu060gDtWeDLsj", + "NDa6Pu2sw+2bcxsUIejVnzAEj1PBi85i7CSguPV3sPY9av/p/PvTFXMEb1SDuI5+45/YDqvG922Gg+qU", + "XZtTNk/CzxDRsGp+37QWnbLxdq2fKGhMbOvGRQiPTLWbFd6HPkCjdh/X34/9mxZHW2UCPjoUARzqfX27", + "NXCpNuBSpfKEAyk2t3bUl1EELkfJqOqKLMVvPsUKVdpBYDHmEvLVqf4zrHuEcR4FvE2xkfxY+MXX22ZS", + "5ivVphOY4xhBjFk6tCsuej0JpH5EYLbIduyHh2QFQ/H5s2L2nJM3e3sHJyexRBgb223tYW1abT8ZO944", + "7yTukz9sddupu0jXuNQnOposrXWzN9w0HyfttuzZ+PDFwf5gODg5eLV/+OrHwXBwZP9616FOtpES9QWf", + "lEnClJH+n7lSXCeYDc7MYf96F8PEbURfVFrKulALq/x9VYEWaILahll86jCLmqHgxtXFLlVxE86+HvzT", + "W1cwVl6344+ypDQxt07kMH3WoiU68Gr7uCwzm0JjNTq6PFOWbHUkpsmncSqHrosSE7rY1HAfE6iFQlvL", + "lA/SGJ8JlHyO0cbzLRUo+nMHtsAB2shXaI7AakehS6W0IjEohNO6CppY4RqPuk/D9DGn26q57kQvuHCZ", + "MVqqcF/r+KqQHGnpyueJx4H9+IhgnFNIg9rlxF2zUEspSUXjJKPJHA9GCGCXU9d3XEH+qjbVqVBlAYX8", + "dE7OGdGSz2Yug+DGBHCFraGeVqXjKIXGAIeQ02pdkUoB632usMimw7UHtw1x/u0G1Fw/fMUz29rRe3cN", + "oeAWw1p6CBT0ViUKHlbSGH1LtfejF3gvOBTNzFtfH1c1ZwsyqbhSlSrJUZ6v7fr50jHbETnUZEGXjh9X", + "TPh8STgA/54tb/EYTMQYclVAOgDrtwozAXDlc99Yd9YyzHBTJb3QPn2tZosil9QoSnlWapvoALiG1OQ8", + "13MCUFORkp/M1NYEZVifKliCNzRP2YzdTE7w/+8Wzu0KGWbL67e8fk14kw7B9izjOqzwZ+dpaZ42d1Aw", + "AAk4mq/Jae8iQyYWyZ13/ZCIThh7hEl4rNQP/6s3L58eHNfcSvUxfg7Lc8cHAbNXJQnl5Tkq003nlfUo", + "DZvPqjse+PZ627YaJSstQMjMkD6et2gApl63s4QH+OjgeO8Acm9Y3L3r8Nq0x9Sxwxy1Mx8xmaCH7RUi", + "6V1k3TfwhnW9AHgTL1kruW+jZ6wGuC/u0aIB6iszpGN01taO/ins6La0ZJsx2pxaYQV8Qag85xqkuUKy", + "hEPeqiphaSB+TSY7f/8F5a/JZIR/3f17VKJ6PS71/IH5n1zarNZ7ecp+lFToAylzGaeM2I3QsB8IimRm", + "eqLzt2Jp/kIJiDs/s1TAXCXhxmDpWZJxJGMU/GZnKRMcBKtSeD555m7Imb2YbkyQ7wfDASY2OAMIzIqt", + "CMyz5VkpfP7v6M21eZj3S7YfdT3WvztFAfcGElujoF5VrCko9zHGM37BBHEO9Ubg88Kd04+tSfrcFVcV", + "jKXKCoshGA6AlqP6xus9HU5JyqdQd0JXqdQKCv9O86RcYC61c6qqwlBR0NIyWjHorbPMuMzcRtcs2Q27", + "xVv2w1xH1U9Qe13dAp0TTd9D3u6c0ASqp/vIw7Ts2oZ4SZ1ko4ArKwwYMhStq2M/eiENcgmvOLcdB6aZ", + "e6jEei/2JMeonb09p0wu1t2woI1PhwrAMrlA3u22PBeEeumr43bhpkS4ALvSdseq1zq5YsKPDvP12qbN", + "j2gvxtygSE0VeF0x1o6zut/OYJrkAh+C1dDba+lrwjNhy5AOWWtayBHSkp1BWdB3PdU2RPSa83UolKYx", + "xt9us/58wcOoQgflfD7PEfvyN5NbtPfbyzV7aF8ELfuQvPbOr8seHiFGEWoZQLP6nEA9rYDyrpfoqNsw", + "SoqqXw8x7v+OynFHvvJaKzs/llIDhYraemeuvpnhee3DHE/6Z0uy4QCu4y1n7bNzhqA2Z3xwQ4nCbMp6", + "ncfP5ZwqpjZTL4uMClJAx/CSvIfaZ4DGMyg8FRdFMxqJ2zS/Khdiae27UKbFzFcrtv6tJQq5AdnUui0G", + "b072Bytrk4Ie48LpMyrqr5YtJN9SzMQXWcWUTacs0fyio+CEfTGEScIhp6BHM1y8c5bkC6aIH2ZEQBgT", + "uXbyIkuHVXvwl6SSTm8prPbAwWEpaBqLIg2XfZpvvmhIxkeyXMyY3GTlvikUu5tywTXLlreNCEPWu9Cw", + "6WuuaKGHT5Nx3a4LCsy11vE+VoR3TBRb8J1+q7mRDOkWRqy7ua2Ae4sVcIHfd1QY8gIBMeKB5AlUHzNc", + "whb1SuZUzKBeLTT+ThGou5lQmSqoFYqXnhpaFbJ7IxLMJFNY9nZsJ1GXXCdzkidJKW1ZOlue1Nw8ED19", + "gU0QtIaECVVWHmdKFBcz8FIFc7n6mVAp1BAVqJubYsr/mSvxUJl+EBioANu/GJiRdEDo6nT7HlXiVcTh", + "qPy7oJ5Wk4wK96Y8GnJcjzQGsWAi9vJFUWqWVsXUAbsNUu+kbUPr1JOJ2EE+Q/7XEOsamzPfKHb93/oX", + "Minv33+YmC6X9m8SsAroKJM5v2ApuUe4aI9ymodjmA5m7WmZsZTEhw3mDYdZ86QHX+V/C+mKLphUXiay", + "0uNu82z8jI1qB4McigTLSbG0zaGDdYVlwLogtROsr+4F3ioX4NURC4bKx4UfMijfrPxLdbxTUTUoowId", + "frFQL7uBODcxugdK9b6yZTMX0Zcp1H+JwvBWjNiKEVsx4lOLEfGS9+9t8fqq8P1qgrm51agdhNCi20Bj", + "z2hA380/uixJX0EIAhi8tmEHnyLsoLoUn5G+RFwoXyLjTbkC521XigH32cn+TrTodeb3be/wwdm+n7B9", + "F7ZSwJ9LCjC3as9cqo4MDsGlm25++o7t6OHpO/ZDxnVqqcfTaFFTKEsMl958J5dznswrrQd6KmKAoNKW", + "bw3pgrJ1WSo972j337v7NaXO1khdsdlYzxd9KuvcPchQLeIrPNcWuZJ23pgatKV7W7q3pXtbuveV0L2v", + "RJXwSt9Wn/h0+gTaU3vwRGmNoFvueAPccct4tozny2Q8UUpxzMCgl0TphP0EIfXsiibaY3h9WTlvuzjc", + "/wxPqqMyqgfJvhy+nWrnoZsqOrttMerpQ6obG9+t28dDUZS6/2YS67Sx1SJDtmWdlgG49V3/NnBsVtGN", + "1CKjyXpG+nWzzy3H2jqK/gSOojV+oVWpa6toE+o5oH8yIekUH8kZamn+sIEfRotzIR2drqCTALV7Zvsj", + "Bxx/r++Cj3CJM2S6IlTzC6913aCRK6lVPxpVEY72fbVx3evOYoO7Nk8YDDMMsW7n7Dxs4bZ3mC7x9z/L", + "trsaTIfpt5DR55s6xLXNiZ5og/TsNH/PRMwwnORClQsmSQHtiDYNIUHOz1j2KpckzZkS32mSn7MlcVDZ", + "FAUYiEWqoz4RJ4w9Ie4cBzXelc6LjM/mmuf3VMESLWl2jytVMnVv98Ffv2/fGMN5WQq58E+ycrYik9GQ", + "8Kl9dpQiO4XkPC6Em9gsWsAXzxmxI9cO3y8DWLs6A+OOwaXnhh1Pv3qls/yyrvbaR23sqsAz90dX2yDD", + "FDZW38Cy+ddI2dauKijZECmotxt/WhYlFGBCMZ8It+KqZLqU5rZRbROU2GwufqJ8cYZE5exwLPYfHhVv", + "3z4YP3gr/7Z4/N/p7+x59uO//na12PvX5Y+j5Q+/fX+yM37727Py0W//ndJnv9///Z+/fX/w+4O/HSux", + "/PnyH9Ppv3747erlRb5+3c2c6xYJUeJoJN/g6WKHchC8P0U5c5pRjWLzaCJeC0by6RPCxRlNLyAzTS7h", + "X1IyKhtZHVwbSMfgmsRFUDP+KY9ZtMY4OdGcSaNVaJIxqjTJhZXmiWczZsM8zeaCMJrMsV/7MWNGNUy6", + "QQ0R3yUeCl4hKoDIPae3QHRpm88ifWOaZyn4pmC/8V3iYJshrwv2m0jfKNjFaT5exL0Vbwqic1CGUYHz", + "BiCuyG8lFZrrpWdmNrcGbq+HcCIOp8TAOPS/wd0tmNiB8pKjQSy3VOeqACI399pUU8HihsG5Cjcrdh+9", + "2Tdy4r26XXte7FR1fDhQpVrDa4rp7sx1VExe2OfoKTcDL7gwwo2ZaUGLwtw5ewXOpoyts0ubs/mMwYIU", + "nbEzkP3XdXpjmj6Flh/83VtC8rsniIsPw0EuWI8D3IRj3RvuGAjvAoQ/RaZ+UC9bVN+CMJOdf02Lpgrs", + "HW5Am7p8MkuWS1IZvtF39NcJL9d/du8w1kBVv9f3rrMt71Sv4NSv64mmmifX6RnZ4zZiY5usCJXMJ9TE", + "22dtVVXKwcAAMxEuzyR0zBccJDuf14ZF5hgSChd6CV2cJG8Jmr/6666v297NMQFqH5Tc2nzr8EEIT66z", + "dXEyEJwzd8MjFBGY65SxCGmkRhRAMbooZeIMm5RIlpQS5Oopi+QzsEbHPZrG3U6GOTrDZIKNvBncb9JE", + "4CPaMssI12TBqFDmD27hQkupnX8TJ9rT+sxf0QPtas9P7YHv6wGNV3n7qcu941ge+opQ0odnyzgM3OBS", + "3Xigl73w5H084GsblfYnc7VcU4t4y/U8VMfi0jkK16vIzjAUBALxz9yEqWT1gJ8/PnRvgxNbW3ug6dVe", + "LqZ81n+Vp75LfFmaXhlZfspnnWsrheWMVqhv9QiWjHXywH8caehfWCrUBHxOWd9yRYqjOWYfdmM5UhUq", + "ul6QflcP4DDt4ulaO5JY1aLwGuzJHbRVclqEX0cXFBNKXCYgKxqslm+5Osmn+gVfcL0+9/vhlCjX+n/N", + "kUN7JZoqSEKF2ZjajrILJgiftgQoQ9uv5rRU2pyKOVVjSAiJ2iHNLulSYRJsTKXm41HyqSYZABuz7IFZ", + "FsJpjpliEZT9Oy8BTMxhCUoQoaXOF0bEAZsYhaLAPG2Jinh27fUjKmGCSp6TS5dRz6e7tSmYzJ8unzVo", + "tVUOSa4CG++cSSNGWpC8dmxL9HaCg5tcNxfj8KOJOJ1THQ44pxeMcP2dIjLPMnD7KqYNiMpem9LaWSi5", + "pEvrq4WwIzC8SIPNKhZhWMuRDDOgXQ1+zyWfccNB7GrrSx1NxEsqSsC1R5kqk3mFAsCoEb8M3C65/8Qm", + "HpwMhmRi6PuxXcnY/2xYw8SwguYnLBigCEXcugT4cVOCf7F9P8j8IbjmNLMAUmchaBgTWufvSPJccr1c", + "/b58P7AL4ASF7Vflk7QEET7XwC650H9DBohQP/jhh/qrc78GA5tbAWwt7qqbbBCLTf0s2i/kT5MX7PUF", + "k3TGxjq4zGuoE7BBPIXY2dw1Nx4YfWHRI3I4JTgGNEZCACZHgxKdk/sh1TmyA/hB3ThRItRU3p2GFjOW", + "wsRdmd0g+FdoJi+ozy0Yo+kTsY94US7caq2u06HBeLMZ4MPC9dE2h7YCuYGRBnXU1Tws8SJNG4H/OHn9", + "ihRUQsWRhjQRDkpO51zZBP5G48tUXjkLIMNDMmfJe4PVkApjHmO0eboCHtMys2U1kLKC2soF25lJNHja", + "Tp4E212zd2BIuGExNrkEF2SZl5Lkl4KopdJsMSLPqU/RKAjiu+7D+INM8BbjzqrJ4An5ZTJAr+Zk8I58", + "CA/Af9VnDuJaZfqyNoq+yUPtUVh1HANjYiwBlfm6g0ERMQMFSvE+aAKa35JBYs0l3ZoVtmaFrVnh2zMr", + "tOlU5fOrI2ir0K9V6EM/1+fW6ZsbGvfah1YilEsbzKiPM3Bjk5VBzSo/wil89V338sWCa/CgWO/oWp91", + "s9vH+hK7rW/Dnl70NkRrLk43DtAr6ZwUXQK9b1BP2SwqKd+QISoIFck8l3Vz3wB/XB1G5AYyVGn87wDH", + "LjbNjtHmPlUAE7YBAZNaa45sAt4Mmtk4VtPew7GdqyOCs1pOb+JZ34NDN8CKgAlz13jAHtykITmqxmk+", + "p3Efhg63UQpQhwrDcDtf1WwPybd6SHqcjcNgNZvCUgV1/ZrS5a9D8uslY+/Nfxe50PNfh4Yf/7pkVP4a", + "8khzCIaDtwcHPw2Gg5evX50+HwwH/z4YH0dNFsdskV8weElxMudTbblO7I2sZEmoVNg3JKYTatTU/gSG", + "FzNqjXULdgXvlCW76ABEMR0oBMBeOy8VmLp8YdqWwuazX471qpeYOniGaW1F9L3PQT10gg6o5yK/HJFT", + "3zChQuTaKO02PGBaYlFS5PqQ8D2tDBBaliIBE7C1Diy4KDWWltE5meeXZM6VziVPUKpmkoBczRUxP0fS", + "an5cNH3DKhcrU6GZXICafBnUiI0a4nLQa6Bg0hBaSJ46S2+gHn6nvOh4zub0gudyNBE7ZK2lz7UKbHxB", + "Mzf1KGq/k0xTLsYdRLBjlSipWcJniSMcaxvjlsvKtljLIDu2pRZay1ozYmSFnT1WzRtBQexd7wkV6Xl+", + "NS6KNkrsN0KLApwr5zbqBugTU2Dhf10wAT4tX3QXy9nOocwIpjXXgQ9FLPXchlGzK6PO0syav5RZbOki", + "MxSdMqvFm/km4oJJPl12TPlNlUzYFie4TSPVt5KePuPKseieZhwq3zMNj5Rf2L5xuWhRNSR2FnQcYnVq", + "oTTNMpa6++1MptH6b1tr041ZmzbNiz4uis606Ce1lOhA33MhUKqL7mO3oYYWxXcKzTVcEcsyQnFP4U9x", + "N9lXn2v8Gpm83c0NEnd3utosPvesjXtcFPv2NsVZtWtIxkVBTNPIw09k9f0OUSAexIlFRQ5UIC0ApYD7", + "ec4g0IHoPHquurKBmEEO9+2rgVx7OXpoxAMITHABKbMsPwc2guKku50AhStJfrsPOp02CyAP+ldms1AK", + "G7EQuy/B0P0LpEfPEQacvanKqB7J/DxjizAXWN/HKuyqYIlmaXOIjvILUNXVEAebLCRbklIAPTX6DhVp", + "5uwMUFrWaUJYIyuHqrlGxs9yCuJ2VftgQY2GLKhI2NDqb3A0Mv6eZUv7sJJdcAy4gdAIlS+YEYvoMlqV", + "+iSXGnI7x7crh7TPXv8Nd218sjcYDvYPTvaihO5ES16wqJQ9Du4QNoNjEXH/1sTaVTTO3KrVZz2QHhJa", + "0HOecaQPv7QoC4IEdnuaJSVG4Gt6BU90A6nNJnsAjgeeMFh+wc58tzNNrxx5fDLYcz+bsavN8K3Nrx+G", + "HeC4ybz3T6E5zZwdGy3VBMN2OfM9KlAObZ6KveCTj5mBT9WXTpDsszxFkjzLWKIVyUutNBWgAEt2wURp", + "Q/hsDwdJoA27t30Lpud52kYlDn3m5gqwiV/IUfXFIRS/+A8xacDiVLucNDbJyDIvzU20I1QrDBYBaTqS", + "XLyR2eDJ4B5f0BlT9xDcUQFczkKI7eskDP0CGb9gizz18lqzg5N8gH1gwQu4TVic99Acdpok+mz3wcPv", + "f3j01789bk1SkzS6b86HrRq5VSO3auSXp0ZWFKKJ8xf2yxAsbC4i2Y7JId1RWiY+0VbcMrjVUr8NLbXF", + "F2JCnJOxbGl3TDm4mcweKryeC1aBbcByturuGnW3vV3BPY/qMNB8b86S93mpT5hSPBcvo1TB7nGj7QiG", + "DnaK6bJYIa6v17rtNDGlO5DaVW00kFeSUp1d1f4vJhh9jOLuFY61enulc2zV9jopa27bCnLioxA76AkO", + "ZuO5rSz+EoT8NQPHNYNrka22qaEiVdeyNERw1H1x7aIPjcquuzLo1XUpUEmEtjn1QsgTo/RnkDivkHli", + "7jeQGAuiOqOJldz8LxB1Zohh43c71xki1qypTBLG0o7IfoTwxJAOXErnIoC82CXEaughzjqyCAZ9/dka", + "9RVEWyPwdLQ2FtSLLUc1OFfL4+2p3JhR+0oD1+sBb+vDbf91bcwz811tPDIQnXrOybVZtjYVdbqvQZfh", + "LADXXYEoB/7/2Xv35TZuZeH3VVCsvSv22RRJyXESqyq1S7ZlR8vXWLKzksg7AWdAEktDYDLASGJ8XLUf", + "4vx5vpdbT/IVuoHhDDnDi0zKttSrsooyicF90D80Gt2FYC0mVWlsm9/Ik7KN6UJ7Ubc8T0ln9pJGnQR+", + "jdztM4kFnApXXLHFOjIdryiI9Lhr+aX7/45LbSrLv72M4j92e/i/6ooPP52exh9+qCzqJ77UpctYtBg2", + "fhH9kdZnh+eL3vMLTARXIm3jUXTDNc9zeMH9pUAbILByRUAqe2+v9hZXXEsl03zj2gMAXXjhWj5by+vc", + "bN/pZkdWcmFzG2TX4k3egu1bs9DD8gJQrMCyXqwVVSmwtuV7e+lcaQ6uMTNdQoSN2hOam+Ha8mY56nT0", + "ZFIeiZvQnBq/x6FtbT8Ba6f61IXf3DUXf1sc3KrUK8K4w/+M6QxtwSazpxt4PoT2kocqLqzb9mBn29uH", + "/34rQnj6lBDLYMYSrpQ2Ro2Ft0Uv9movcde6/KgEFfCFm0JYJsrgNMr7JtWohkYNdP3mAfZ8/3jxKoms", + "efbuhxpl81zzP4cXy7m+XtUn7/yIfD4nnGtXvzJJ5uf2qKphi0tKsGLr6ud/tVKz021O6fepeuXaUj+L", + "d8+G229Y9fZsF67alOp7d5UdzMdlvlVm17i6fX+lQuW3eOmQNoXpaFhdF5x1HFdc65dic8z43DcWfFOs", + "5fEbAq77+6rg5WLuEGWzRsdYlxO9uCY++MAW6/E1H/B9vij85QnXOVW/eN8mmTiXeIjj+kcwHsdsnCdW", + "TnMxeZrqzDaF8I+WKNtKWrbaunwO7+10ykqnrMtOWemAcXOXrn0Eg9W6sRq2rMF/W8JV/WpyFSVfKYPF", + "2r3K4ebsKjZ34nIrjw4r8SXmlJywVS2E4DKeWhIxh88NwWq3lRsC8yy7cox0Wffg+9p6B63SQx1Pam/B", + "wa+sr2N0LlVBQogVVae5xT3b1SY3TOuqDK+SKCwn4vKK2R9eplzF4Be6pNYdzQaYKjlWg0bGzOp5Ja9v", + "p6/P0pmyOMjOxmYKFnOFmeIfnJ0ph7G0S3YNIpaWSZXmjQdS8m/0LDSf0UNuoxGbnraxSI/HXMVw7Y6N", + "uZJpnuAtryxXCt2/Tcs2HbwVdiYmfmfv9jB/djHUVvcDfD4Tk49/wmXW+e+7cDLT/eA+IN3KEcJmO+lV", + "8HcHoplfhohhpUi79dHBZrpo2USqluU6dIF3Bx7Hf7jWNDXCZVbO/CCOXb3dKhnHf0AvrfEoBkxzrRvr", + "c7FWwXhP2Jftn1+r+NJFYzxBFjYarZfFMT5UhH2bcTih09XdTTT167L3ckG3rPtoMR5XK/Nqz1a7cG4t", + "CcvvvEc3/0t1rSddA+kaSNdAugbSNZCu4SaG6F2bM0GuTjcx89ZDpMcgPUadHmNh8OHyqABq1pt6Rjbn", + "CQTiCqFwXE+WH26zi5GP8AxH8kNhzfS7CUv5pM2EjTodOkdapR6F10C1oUg17epPRbCaahCdLUSsoStv", + "BEg3G5B8EPr4asLQLbtHIYd5kYh92AcvUrxwIy4NG6K/qHPJ5xZjrzSot6CAyxrTzp11iXqqZnMq/MwG", + "n03F03gNY8QNBN7yMLF/qk7VLjjO5yw4OHarjTE6wqvzRUSK2aLa3lnTtATWx1DHPiOX8y47sqEqXLnd", + "VFF2G63Cgh3DuchMaTKHytwpwre5XCKvr48ybUx4xNx1Je2VS2LPIDp0URL6B/ARSOD7wj87XGm37A4K", + "E4yWin/fLdeJT1t1qvbme0xpu1avFZUreg1ckLrcfxHM8An79//+/w2J/v2//4dlYsizOHHzSw/AcVzw", + "Yi6tEcmgWgaUGukk0X/lEuwQx+DhzghlwN+CLzDlk+CwzTj2xhwLGx33FXjw+vf//p8OO1IsdSsLBH8d", + "ScPMKIRNiUUmz0OYPfcufGNcXuD7XquyxwCWSCV2HGFvzAU27Ymuwel1EWJyA1G1lhllrR1Jd96R7+YK", + "WegveGkx1xVDrBoz7LpcileOm9xq97lci9NGE92az+5MFjk0b+ScuS4Mv0w3mYk8E+ywHFbLD+STEARk", + "zjVrNXDMwsOL2vAQa0T08w80RAVfNZrE7JCEeizrS1AGNR0rV94Y9JuLw9t0ULtwdwAOeuc3BmnYLdZZ", + "PsP9a9Pk7Nf/HIQ2hNRd9eT1sX+69bEiYHyB80qxYgvbGDMJjp5CstA6JS58C0/V4/BbOdB88ZJj/4LN", + "gHfaiwBo7LSLpu/6690XS2K1PC59taJBdKLxGkjzxqmoyVZYqB4xXP8CVyydMKDWgVhodctCcGUO3rZm", + "NYKoEkLuzrgygFGBwsMAzkg871waH5TjsYgdXieTxUXMjuOvu4/XVJXAHQYsZOnSXOqSSjSJldaFNY9a", + "sUPWVsqhY3Fk8eDounDSjQ9fq2ouV1Ympbq83mpdSKlFSq36RfqLEn83RsMWOmftY7OgCpvtmSvL0o1H", + "1yLVwtZUC7dyy4a4UNm44VuzDB4aXajM0NCM5xQsCaLFFH8W3lRqHZ6cy8vCipEnxTV3cNZat5IXSUtX", + "3f8S4NrVCGVZf8JcnjUbm093RZLyCfqJ9dqIc3k5DW9crZGrUFl9UK64byR7jdnVRlxfKXTZKhUIIyNU", + "nGqpbGfqcqD4yovuylcSQp9WvvMTC24oG4hg6Va1cWo7RVDumt8GXCboPmf2l0xE+rwIcrugo9bxGdTo", + "R2GBP5JjASfJ3p9UFmJPRyX1UE0UCO/faE0PLYuUXt6Hw7TUShDz2R/rQ26U1If13svAe2LJBA4juKGO", + "sDxhznWSw9oyzHicw8DXvcAL1JU16+y0KDzBMKlQMdh6+4fmu9nHqMao3Kv39st8LDIZNShlyooYCAyP", + "ehisDrdsrA3aL0zd/RZS0GOij+f9sYibvb0aYv/M1jERvLmSWKVyJf1kWFsJ/WJqYlkXf1xOZ5FUQ5xZ", + "0jCcPT4irs5YMYn2IQKNYn9iij99Ev887sr9kLO/cg6eHGCuQJh5H6YmnobTAWwWGca4wkkcSijK/HOa", + "vUuBNgrTwz7MpChsmOkLU+lM6AGMdWiaNsAiM7Vv1Kk6CEOlVVDFFz1e0SNJhXHz3fMr7wJgjNxw+ZkY", + "rhuUNNey4nO6oN7ZmMk+lOOqMZO9BxvslLoF963iuR3pTP4978x9a/7gg5v3ETdeBycU42mawPGxiHhu", + "BJOWJTw6g8DdMmaumg7tI9wqR5kA0ueJKWDV8mwobIWSa9rbVNUF1DE955pdWT/MuWR6PwclB8wXxR4L", + "y2VivGN3dufNk0fs+x963991E3DK/dOltSTkvIbM5wSAMebg4R4iY6laLbErbgVnFuLS7WmxY6slSsN0", + "5A3TpopBrESVsMvjCnfQxrmxeAwPcdqnzuxrrDHQX0FdTd++OZqeYKPz4GKLh0tCUeEVK5pnat9XdB82", + "j92pL4cd8C+2W94V5Jlc7OR2fnr/dHLyOhhFgh37UCjHS9MDfJ3JoVQhLgLO35W7+tter+oabPc73H+5", + "5bi1f//Bg0La+cTzbsP8sjPf35yZkc7snLMOk4/HEIZhMDcPq937kMcs7AwWeqcMVwF4X+d2v59wdTZ/", + "JcBN80gry6UyjMNsqJsDzdWp5r54VOuXUOyqdnibStN1bj1tty53hnrHf+nW3sR0cJPml4Bykh05TjU6", + "yUm52yf7IP7gCk+nQkHkP6mnf3d5KruYLdS2OOqucUY1lbTziuKNMhDmVoQ1LpVbI74gnPCqwsvXs15s", + "NRzyL+iIlWH2GvuHuHkj3LytafbOoQfIxSNj8prXbCYBi3iKdmpcTRBcwkmkyYWjyKQc99NbP4FjzCNM", + "gXNUnIvMUe5pK8qkY57ktIVHlmnmHRqWjKfgTKcvwCuWyyVe1UPnCx6NpHIZ+eUUlnoQWUUAWpdh220g", + "irBBnVVcQRVTouYSdcHVmYAAMt7WDIpaLXM6y/nsZzkDKZKGa3PwUwj04McV91Bh9lcnlNtTASM6Mehv", + "hq80D+oOS6ZX9aKR2w+4fW04wvkCXKR59doqHubmj8FWf0O2dSQBtj6Xtro81Adi8GvY6jWYWUuPQwZN", + "rpH9Grm4b27imULTOQI6gg7dVl6Dp/NuBSl3XBq5hdIuJPRTtR82ZKWR4XNCcCvCrvAJ7zNotVsXPFOu", + "8+rUoe+0jH3Ar4Nokb8Pn8ilx4Slpo70xUz0unMNcb4TEKlWjE39xSk8/F74Jkzr91yqah0/tlupyCKh", + "rF9GVrw9OH1m/n36SV+wcR6NCt2YtjwptcO1sx/a99/sjugMO2y31/tPNhbcbcySxK+2hvEsJLw7N3FL", + "FW+HrqidkPXjU3/d7csbo3CCffvGqTFEP+qFrIYiGVfhdV7Q+SsKjYZXuWEvFhXmZvxMBIOOmjnxsd3y", + "oevrIgm8Ftk0NSsSTkOYRN5VQREFxSupgunzn5jiz8J1UVB+Wg2DVJ2eK6mY5zrCzcpXvmqtZqenhaY5", + "E9w0mV3ib9A+11kFsfv9y1KJVQrFAYWsNJkqDZiXRdX3LyRsfPn5VFE4HTpZvYUCBOAb2NnW1MTVYY3p", + "WVS3gy7ylWjyVzFt2NFjl0uYmZ/btbiv86pryZzMq6jg11iUH0sT8cyLhaXucWYefi0gbOeSVaW22hud", + "hIs8RsXYwCt1h5NP0MJP6Y85v0swrh8Xj2eQ41/EmDa8jrd6XAuAWW1sq+UvW6krqZeymiwL5pkunV+i", + "Z/WAoR/fXzlq9govwbIGV57ZcIOVuLRBxtgFZt/clgytp9lP72r6EmLGh1xW0GUawK367EXhhmmneFjp", + "iw2bbc+OaJjb2xzR+n0GjeqXPKq/SBXri2P5d51qbTjMxBB1EBeQjhn5d8WO6sXRy7cnh61266dXb9+0", + "2q3HB7/OV6b2eK9U8EbP9jBfET/kCVeR+Ekaq7MG5wAXPi3rY2I2wtTzM6ufZy6paszuacaVZSFZOaOV", + "diHw+MM8U4+nhRyLYbi1N7vnCBW/WuvAhMgyrZIJy4TNM2VYpi9wH4ZPGSd28V5fhvq8HKwb3aPTvHE3", + "DE4hjDyH98qOhMy8/xquYiYu534UKi7yAS2hn1veLMOMeZLA9SSOr3tp6kGWEJ24lGtf25HLdPU9X3Vu", + "4IyZ7+aZV2i2z9tzk2L+/QJ9bpRn0k6OXdk4mV7rzPLkRJ8JdZC7ST5/0qNMPhYZSyElsy6pax00AEJ4", + "CZ6Vb1eNrE1bHz+CUchA15oWqxfudUFvOFGi85gpDk4bYGQZvlhqGC5He5+z0wcPXh/NBLeXaiiMxUhh", + "ps3+ykU2wXwwzzYM15grl39QDsMoJTIS3nbIR6w/SHk0Emyv02u1WzlExHdt2u92Ly4uOhx+hUA3/lHT", + "fX706PDl8eHOXqfXGdlxUr4pUql1q93yriha+63dTq/TAzVFKhRPZWu/dQ++gi3cCMYHlpTz3S5PU/j3", + "UNi6wGrGMpcC3BgHu16IVuR+OnDPujwzDj1iGnl9mqT7mg8d1or4Z9eVnZQvcIe9+DFYVx2dh1Bp0JC9", + "Xg8PNYvom6A/QdOw7r+8GgPfkmXv0EGaunbipFtsqlZEBYWN+LcLK+EtUv5rvco85LHXlc0Z0n1siLsJ", + "FkQRV06ow7Ln77V6L83+QAMbEefo5kOPBTjw8LY0cKwYCfDVgRpE92ZJoSwTWaYzVCS22ZgnTryLuMjQ", + "TJTll23HGWCkF773pw1skPExWHTqjMUiEim8qCFVpnMr1fCu787djXfnIuPGFcZ7m6aJ0OJ7G2/xE531", + "ZRwLtd78yVUsMmO1jivzpZ+7Kg9yI0C1XHQmkxZacH8LrwDcH1Y8OYaaHbr5t15bhIKzXrDu5YrlhcEn", + "i7SK/X1jN+/96ZKI3XjCsdIgTwbePVqpG3xTNz9Yxyih3qriJHy9lkrjPd1auP8Gp8bVrcfMi8+ZFY5L", + "wZDvXGR4TyZjrkJxnggn5OCGPS/5S4IVJZFnIgGscVBzju6N8Pq1W01YLBI+6aB9gzfs2/i73GhjPN9J", + "B5Vxx0VsGmwTcAbtGcsC0FEIHzoB1wKp997xvPTT0Z8mf2xXpGr3g4w/okxNhK03w8Mo624q8jSdF7JF", + "ioM0nRe00mUCO4hwew9PeadAh8r8aR9er553XjJ/WwvxwT1WcBYCYkioeGr76qdqGxYdN3dHgrtFKeB0", + "bsQgTzqMRC+JXhK9rW/xRdtoC15q+0TnatXxqhqxxzKGURtIFbtJ7MPBZMJfT8ABahgUcLiHo34RBLAG", + "s61EG2/2r5Vg4lIaa4g9iD1uBnuU8ACk/1L+aNdv4p8KbytdRxhPhb0hbLHRXT/t+Ak7CDsIOwg7CDtu", + "GXY4XFgROOoUHl10qtH1jkzgkFPXOYLx3jB8unkyOUhTTOJ9iHyljAITLoTl3AieVHrl8BxOT6vneJ4G", + "twZIlRqsI0IJmQiZCJkImQiZCJluEDJVUWZNcvIO2Lvh2vtiY4zicvz0BkqdZYYP5PQ60wOZiEf+oVel", + "Z2ZYSlymCVwDH/DEiDayFRi7TOGqX8m0VQarwiJp5oTr+dFjduetkuciM+CJ8y164nwuLmWkhxlPRxJd", + "dB7rzML0OyqcdN79DDE0Z62jVrVLkVqta8oSHkEzluWPPZdjaV8NBkbYjoaPdZ8Cfw+rPLR4+rzKYpE9", + "nMCHVMOOdn9sKduHk+1a+CyuUmF0RJBLkEuQS5ZAxHi32hKolr4C7IXgmXcOL1ORybHbLSV318W/7odp", + "3NeF1kPghAXW4NlKsf6k5EQpnlet4aOLRd9K6rZKiFoyOyI5T3KelFmkzCLQIdD5akGnmSuuxjoLrJKu", + "wi5Phb094HJdeg5SaxDuEO4Q7hDuEO7cRnOnzbFOva0Tug5hHCLR6sy7DHXzE14nCGcyW4Oa22CpEdnN", + "pp/NW0st7q7gqmrz9lOr+a9ahmXtT3v8/dpct7cQRD4bc4KTBXx9CoHlEgCgeJe3jBvG3c95YolRiVGJ", + "UYlRiVGJUb9+Rm3Cx01ha81xpPfvtsQ1UEgFL2zJz2Vhy1Znm3YUsl7Xc1DhYM/Y1+5b08E4WsKsYnw0", + "/7S4tELFIj7+pFzQ0TxG9/+EDB6Kgc7EVRuSchVf7dkwVKZ1W43dfJ9c2apt0fPbNl/zZZOdGsEywTLZ", + "qRErkp1amcs2joPhj+ZrnRVWrcTlwTjP4Mu3HMPiVJ2qk5E0Jc/E4LQ1ckMTMzmAVQeGxUeauBBMCVzc", + "QwFlFM6tkdPg6EpnY54w3xAWTaIEwwz9MgqqI/f9NOpIu6GihffjMc/OUNs09aCs4qo7d580aKYgltE0", + "KEs16mMoatodL8XFogqEXMNq7ENq94W9cMu70hd37hZVUuLSVlv/jWF9MZTKfQH7CIB35b2awvohxn5Y", + "BAwDxNpGJ7psnCdWpomYsr8cNPUYOs5lsRxAjF7r3+9IihqHogFlMJvnUglzMI0MsnnFcGN5GKdmJZXw", + "errSldz2+mrV3EUhbSkBIAEgASABIAHgAgA8mkeiPjciDhGj5uX05inR5W1WZMS5+rA7GIbu7hQNAUKk", + "YbnBJT1anEFYpaaGhAMWRDk+dKqG3I7QF3wDtEHpBxWMnQUwOdg/VTs+fgDeJQhJpWLTEozlVviUgYGK", + "2KTTasdaGPWNZWNufdiOclpHaFPmmst+jqewkz3elGKTfAJOrQMwJa6axoOaJ5rPR1jQF0RZRFlEWURZ", + "RFlEWVc5kr0OmPrg/1rxPmihyHL88kolJWqACeyVMm6g44wPLLujMyZ4lkiR3WV4ogoKnz4MkPChzetu", + "kB5N4/Qu98wWGkE3RQkBCAHILI3M0oiBiIFuwk3RcsD+DV8QLbJm/Qk7elx7HfRrp5D2at7XvJHXonoX", + "MwijqoPruXVUIofBjqzGDdoqVYSIlbHAeRHDkdpq9fV5+lL7WieCqy3fiC0O2shSiviN+I34jfiN+O32", + "XX39RHhbUXHV5fG569rmM8EDTFA2o/rG4NGWG8DClAkVVFXzpHBwdup6O9PnlVxOW203zcGmzNfCVIy1", + "5nMPJk0248rge3MRbNN4bvWYWxkVVeAY5d+rzLzZ2sVIqJq25OaxsFwm5hv/mGEDKRJ4Qy33arnTlq/n", + "acunqomOgCk8xBSGUjdFD0eYR5hHmEeYR5hHmEeY92mYtx5ZbRkDkc8WYKAHuJLmj6vY1S2zTFyKCEQK", + "GrLxiasSu9DZ2SDRF7PmYspYDjPHCBXXIl9hH5abkGmk1UAOc/duBaP5FP1XQPzMOYs0lBAO3C6mxl/h", + "WipYh/0Jp6x/7tdeEDD+NLFcm3ZImeQ+L+Ekkx4Lw/CuKGQ75irnyR/Yozz5QwG6XKWcos6z5dTF5HKj", + "Q9RJ1EnUSdRJ1EnUSdRJ1FkbE0vM3ImcoY/tciYcf3Y/uI91zebAlm+xwZs3o/9qj5traoo9RbZ5hF+E", + "X4RfhF+EX4RfN8o2L2DN1gz0arFpap5HzHQjNFp4a5K0WoRVhFWEVYRVhFW32GTuk5iq/vzzbREZYiFX", + "YTJCq689OkVpBN+INOGRwJHdRkQKojuiO6I7ojuiO6I7ors6umuEry2eVGbCZpNme7g37md/byFMxsIw", + "DjqdswGXbsAc6IxTu817CVDZBbcSoLZkHUbWYURaRFpEWkRaRFpEWnWkdQWs2S6GWX7ZzUTEkyhPuBWL", + "gKxIVALFbwyz/NI79jfszvRCAU9TZoQNLteC+ds3ZvZ+wV3w/K+t2Gfo/9awsRyOLEiCSZvFIjib8458", + "XYFpps9lLLI6FCvq6XHjhF8SkxGTEZMRkxGTEZMRkxGTzTDZcrLZLoSdaxk3k9c7LePl7m1H/Fz41TrJ", + "BI/9VcagBnNFeN/+Lr9q6Ccc4jHPztybwI1PjRclc4MC1kc5nbCRvpiZZZi8HNxqDstcoTdIQbb5E9G5", + "DlojHBPRINEg0SDRINEg0SDR4KfR4AxtbQz8vLZrcVx5niSz6jFTG0ve1+X1NM0MTK3htvYgi0ZO2rXW", + "clG7rvfeNYMVVRu4yEHvbQzdXu2dK0dwXyGbbQdyr1aB4rkTiBKIUqAp4jCK5+54qIaFNnjnoBKOc6ao", + "U3WqHs6UDiGkqrsnAxEq6043pXKLMlIEe1QEaT8XWSZjYU6VV8yFRQzmwazrNat91u7tdjMnJOiLET+X", + "OsMY5l41J6OiIp2GsJhVcbulCOPVQkIUzM1HvVy9DhTfkrCDsIOwg7CDsGOl+Ja1TLBpXVD3g1zNR1dN", + "Req8dM0J9xUO2Mj1FUluktx0ckUnV4QuhC43wvXVZrBlkfOrOT0FBKmsc4L1tSPJl3HKdX0HMHTeQvhE", + "+ET4RPhE+HQbXVxtip3SfIGPq6XqHEx4I9Q52z5dqniP+kXa0S8+KtJ1W04TRxFHEUcRRxFHEUeRM6mN", + "qaFKp2fBtsUstqEuknVqLacfFbnMAdVqZsEi/jkX2WRda+LyY6taFIe6XtnAd2EGDyerZAGarpCP68CO", + "NxtHdWN8tTyAV6/0ZJpJN9EOx1wmV8vB5P1/ichu1645lEgWzUSGRIZkWkRgRBbNFTop4dAUSa5svbzM", + "7vfRNPrgNnQyIfvPY+tbNI6sfEkUkygmUUyimETxKla+NTF5F8viOm1E90P48yj+2OVpuqp+Alwkxtzy", + "xYqKgzR9zC1f6fxnWpMvy4bmi9OszGsFoNbXohLwA0qaAcIRwhE6M6IzI+IxUo2UwKjgonVUJPX2NkZk", + "Nfl2agxuXMobQ1yfYHmzktnybEfNWyxv3PRmc/UiwCLAIsAiwCLAIsC6RUY59Si0Yc1X9wNP06OVLrWv", + "QGWY8ibpwWqqCh1Gl/AJtAi0CLQItAi0CLRuwCX8TYPWqo6CinLhRv4ypCIXQUQnRCdEJ0QnRCdEJ7eP", + "TtY4YFvgDGgZczwV9iYBR+/z2i3TuRQBCQEJAQkBCQHJzXC6cwUaWexeZxmQYMKvnEm2d4mr4lLnut3o", + "EBMRExETERMRExET3W4HOp9yOS0W/XzYHQubyaj5OtobYfNMGQapmU/N7kjFXqVCvfD/xjBWd6HHYQxV", + "Pu6LjOkBk2ooDDTIzVvDjFSRYGOpYiWHI8venjyCiPNuipSzfITvwx1z13WCsO75bMJiPmHcsrEsPV6n", + "TXrs6uvzai1lESsubTdNuJwZ21mqItwg3CDcoKvgJG1vnQYCJkIQgCV5C4Km9b4sWd2bbRMxdpVbHsu7", + "nBpDNSYJjIz3QWbAC8lAcJtnwnTYyUgaJlScaqlgZYbhiAXaLfB4LJU01knDc8HSPEu1eze1SiadU3Wi", + "2UDYaAQFVEqGGJVFjEhfNksTwQ0YOsAToYWhat0P/q9nYvIqO3r8sdL2opadU3U0YKlb7p0kyfS5dPWF", + "V8zyM+G+E5FbEiMBrXVlpeHuczEsDEwyHI84+Vp3H/6w3PNzOpvqADyRiQVPd6w/YeM8sTJNxLSfHZO8", + "dRJqn/353/7bH/3nzu5p3uvtfTf79d6frfrYDz5BffCHGcioi1++Ss3DmFRr7r/9MZBiqPrc9411D67w", + "tln30qxhLoeZRpR+Ppmk4kcYUxFjS2Z/9OHnm5ozk3z9eByHMxlQwHn/UKljruyMclke2w41P7uIvAG/", + "TkT+RP5E/kT+RP630unALKWX6L8sK9idh8Lyu817ge6H0r/8DbhGm6kyEvUnTMa1aq5S+Q8ncEds+Tll", + "pRK3xIyq1E8kzEmYkzCnU0M6NSSauY16zFmuWItmzpfrNGcP/C6kk0BuQORYsIyroQDtztEAxg1mI+ho", + "GKBLeDELLaG0zHc0LE0JN5Z9v8dGOm8K33F4vor+79jyzLKYW7EDNZOKvXnyiN27d++BP8/EaqooyY08", + "F50GhVJo74F9kulxRZ+E2bT2W0Up9Vf+qxU7VPFGq3WiN1Cpo0F1VBK3MiIZQ2+HIS0SuGFnAJSge4YH", + "ylMiYItbgWDW1ueAAXXrs9C5nc+loTtG3MACW+kK32qvMaxrtluCUPN/9BgqeBA5tjFurjq5720Hawcg", + "riuruYenRXmNa2154bc1lLVLS97UmzD4kua/3cSsf1mYMfhpZ7U/gWgqFrWl5ZILKbHb67VbY34px/k4", + "/Esq/6+iMk4oDcG28f11uEM78ssErJnkDI22SrRVIr0n7RRI7zlP8uWNAn7xvjHwDIoV4+YaMo3OWJ/b", + "aFSSpQOdJPoizKtHic5RCpnCDAGPO+cYHzMvKH+1ew6Ryx9LXrOTvWj82G7Kbwda9l9XlMBNkrf9CerO", + "cg9Bv6x0Q4PcZBAgECAQIBAgECAsAwSUMEGU16FBSW0YjOoWKw4L07tapd6TkMdKZn1gXeaSHCf5sGGr", + "Xv59c6ZtRclPM52nDyf4rau2uEwTHYvWPuq0GrR2EDf3IItGTrDUKxL883Xaq9tod+ZnxpVtzhY9fx32", + "ZmFmk60ZIRUhFSEVIdUt1rkMppiz+FS2SfMSpAnjmWBC2pHImLeXhx623Mqoww5CSW7wwu9yMIWmyk0N", + "bjHcraOAU/VET7MM9WUTnbvVn6XcGMZjnN88YQPkH5zpMIRu7Pw6djESikU8ifKEuxW4qFTuVu0263Pj", + "qq1gDkGR3xg2RLBiAymS2HRO1SuVeObyR4vHb1/ANZJHr96+PGF8OMzEEJdE1ykmT1OdWX9hpnTho+g6", + "L8X6guVwzzZmCbci88eQ3MNZUxzlJ8Vlj2144PC5Y1FHKs2tue5YyqGBFEqZyIbIhsiGyIbIZpVQytNb", + "kCsbnAXp3P3g/1oSOMYrThgvSAL9e50qhwlR+QdpCknuZmdJ5qtCwrOjQf0TbZBklcuu0wyCOHMrk/TH", + "IvhgmPYhx1gLXAP5YCAiiwanYMtUyrlzquDO71hwZdoO0hxrXXA8isHCvGgN+aLxlZvGfCzYmZi0w7Xa", + "IGznrx27msK920ycS52baooRPxdecmHfx2wgM2MdnHEn3Iorw31upGnyKj9lo+X3FIoRX3hHgby/E6kQ", + "qdAVAboiQKhGqLYp7++rotpCp+9VBKu7vvg5cKD3WfUgpNcgWiBaIFogWiBauBkXCq+g1RlmfCXXaJiu", + "2SlaRUuyQcdovtyqS7TyxclPcotWcQPxKvMU4VL5cq/dbdpTHA9ymPYFOkw7QouwoHVbz47scfEQmZEt", + "ewhegisbkTU/vQkTMq4mrwa4MVrTRR3Ua36etRdnAE+9DivJVFq8p60ObXVoq0NHuET6t9E4bRg4cU3S", + "736AzyVnt++0jN2k4lgOnne6WYfndIlWQ5HhYtIGryBaGPUNojD4R2BSsUGegclbnydueKbGZVqZDpst", + "ojh/zYTNNI/cwptMMEcBR7JtqAY8oyZolobvhVv6eJIJHk/88mdtJvu5RfFQbCNwZmTCzRk8ShzkUxO3", + "0qlxP8+gRhcKX7MiB29x552xFQfAcCLLmZFqmISy3EI60fnUPK+8aYFDYa6YVBJcSfCxWwHcLme318MD", + "YqPZgGfsu56vXWGh5fNrl9p1J+w4ymVIa0QyuMsudJ7EoYphLPSAfduDM3VXfziMPtfSb2gg03aRti8i", + "PRaG9abHr9/1pmfTWL1CjLs3DoarbofjBh0xaBU1s5+pdOZMaEVoRVrkL1yL/G3vwcY74JFWg0RGds0J", + "G8GSH0ygtJNVThYWUBX5bKfGSaF3jOUWpEPTRCWCJoL+6gnaYQhSzjoADe6gEGa6jjdS0Y1GIjrTue0a", + "YYzjWtek+ssg3vAyPMH8E003F46hgEc+9TEm3tI9hgUlegK57msNC2u09tVMuvBASEdIR0hHhgEEO7f2", + "xscseJTI5yBNl4YoHfPsTFiINN5N8GbEMquBMOhufTVhT8HTlJXyqj8EfzFN8DyUNacwWu2UU8Q/5yKb", + "rHs4Wn4MD0i3ab043173QcaMxCzELHTCRyL7doY6qsjPDYjr7gc7ScXiUEe8LJyZf5L1JxAKsvbewLzs", + "Wulsx2LAx+aDnUUdf5CmGO/xmqUySWSSyCSRSSKTRL6N1vVu6xoLy2VigkTcnFTuSmUsTxKX9ExMms8R", + "jjCdm7VlUX0uOTt4fcSeicm8mC5JsoM0PXh99ExMfD5r76sreclpRl4kdaBbUC5f7aQizVzlrUSBzqGM", + "WhMOaO+ZmBTrpzfLz2atdNxveJYQHunMRxwJZDIXd4SPRUl5ESru3hQ/ZCFajpMERlRDJIGzrNIwSSvG", + "3xhWKqJTF/ykxEW/hy54X6TTaNS+0pnM5nDoIE0fckNXLImBiIGIgYiBbqGfcU8eaVrghkOVzTOQdi/Q", + "XqOiooRAoS6vDnI76pyqN3C5zjDO3r55Dks4BFRzQwxJ2F6nxwaJvlgISZB0zxfzVNi3b57fFKXGIxBX", + "B2kKkebWWeRJqJNQJ6FOQp2E+k1TbKC4C9tZhtJuOzK9W7xFjdL9oHjPfL0iHYvOqXonMjmQwpSEufsF", + "vQ9cRiOuhgLuKIGLAWb1mVu7lFuWB5kwI/xmZbFfVGNtDQlmE56Hkh7pWMC9l2MnRI157VKbDlhbr2KV", + "sHqWrks+NUdcdjA/mD0bz/CP8pBvPPM8k6tkunTka1RaJSq7h2tidfK+EbHMROTbRZRElESURJRElHTD", + "VB8oL9alJE8Qi4wmMU2DVaTw0cu2H4ociqIQ5CT+SPyR+CPxR/aIhWgqyTwvj97Py7juB/g8il9B/Kql", + "JofCB+s8egxdneTDelNDkEqrKOIrxS/UyI/55XOhhnbU2v/u23ZrLFX4564ryLo3rbXf+p/f+c7fvZ0H", + "7//rzn/v/1H84+7/8x//7//83tv5/v3vvZ0HBzs//ePZi5evd07e7fzGd0b/OhurdMee7/z9/sPe/Y//", + "UXPSv1X7RRTiJLRJaJPQpouPdPGRqOXWHW2MPTKszyxddOPaRC5wPdCTi3vvwAtWh9V/PQczkOwG4swK", + "Snf3gXcr3ZvZWu8Rq9d84EKqWF+s6uJ27sETORa/abXuw8Ht8Jr9Aa6Rfaz6NZ8dhqe2DpRQXuGEo92y", + "4tJ2I3NezWZ2YhCDEoMSgxKDEoMSg94mBi3zYOnvqxFpiJKw+AipCMuBdjCQx4IDpeOQKenVrhIkgsCG", + "wIbAhk7ESK7f0hOxQt4ukelKWzkIrYlGXCmRrBB3q/wYC4/Vi/OXpaSPQgFLAknNhDSqL45JNe2ISoSm", + "amyjHx0E/Hk9YZEamiGNm9BXbod//EcoeN2W+Ie/3ghPNRPoykGYVs1r2zqrmnrUBFMijCOMI4wjjCOM", + "u4UYV8sKJZori5ByuPWFft7R3Xhd1k0e32sk1Zb8vdeUhFX4TN7e61pO/t1JhJMIJxFOIpxE+CruzXmt", + "rF0qxZcpaLof/F9LAiYe64H1SpTairD+hMkYlA6vIER4fSppCk2MtKWAhO4Fh6/n4QEVKPXwsPxAp2jd", + "wsMc70mttd/q7T797v5v39+/f/Dkl4NnPx3u7r38tffo5wdPfmpVj3U2enZDIfyIB4gHyOSETE4IiAiI", + "lgARAsFVgai96KLWArKpu691s6Gk98XoP0ifQfxC/EL8QvxC/HIzrm1dEV3SvAZd3qYxb9DKzFMLJr5x", + "4PKlniERQxFDEUMRQxFDEUMRQ22OoTzzbPhQDKbWujbL+NByi+VDzHyJvTJ4rWeucTtWjgWTir158ojd", + "u3fvgVsDxtx2ThVYAxt5Dhfv6yx24eZ5PZLt9fbu7fR2d3q7J73dffiv0+vt/tZqtzD/1n6rKL7+Bny1", + "xocq/uT6Wn1dtX0Cd9B9zMdxnliZJoINBLd5JpiMjXu1zsTEVO2nfYIf/efO7mne6+19N/v13p9NA4IJ", + "Kq1c+QrWio3wdvrNjfAJfvSfoRGzXzc2Itz632YjsjyBYajW3H37Y2/3Hz/8Y++fv/629/L+Lw9/fdZ7", + "cPj4tycPj397ge2YJvr2zbfvfvtp94feszfPfv7u3suHe+8O7je1yj1W36SZbdbzo8fszlslz0VmeJJM", + "2Fsl/8oFey4uZaSHGU9HMoIfjnVmYWE/AqgaSJHd7YCx/TVujK46AsVR/ewg+B9CF//zp++//+GfD3v3", + "v/vHce+HH14/+vUEx6Ga7nj3ze7TB4fvXn639+bp3r2DBy+++0fTUEzX71sxGl/kvQgQUxu5FdGc03Xe", + "iYBa0I0I2jrT1pnMKWnnSDci5m5EiLAx+5RNY/cDfHorylVNDOCZFQ0MQJCtpKX3NVmoo/9cx//YCpK+", + "JH1J+pLimhTXhB+3/PBfeLF+NfjI8kSsq7CGZ5brq99A1p/iXgMK+tp9a6zYiM/iWGNN1Xb3mvXam9XY", + "naoDdiYmbh3iLMdHEV8LssoNQpXExyZ4IRYhwDX75NXjV/t4cwZyma5PRic5rtWamTxNdWZZX9sRg1pz", + "FbNnrmgF65zhY8FMKiIQbpGOxVAo90J9Xp9wV1X44nTnUfWiVrP29+DNb/dePj58dnL87ts3b548+fm7", + "B0/vPzl4V6P93fv1/j+/ffny6c/H9/YePflh95cH9w/vXUn7+7WqU90quhFtamNG16lMdZUgXSrt5mg3", + "R7pU2syQLnVOl5r5TcOmXcu4fFfxK/MGD/O3bRDsivliPMpAm8mdDMlsktkks0lmk8y+gjsZbwT3CUrI", + "7gf3cVUvMmD2t9iFDFoGbsJ/jIeE5Qep2CLyHEOin0Q/Hb7S4SuxD7HPzfMcsxL7rO42poQyy0y6bhKI", + "9L4M3QbpKghYCFgIWAhYCFhuoLXYiqyysp+Y+nOVeScxXzmpfJGnQURMRExETERMRExETERMW3UMs8Hj", + "ra4VaLpSb8Jy4gaoQSNkhIrdbHQDZ6y//Hch7YhlXMV6zGJu+TyNuSxvqtZo9wu5ZEgmMQRNBE0ETQRN", + "BE23D5oAWjYHTBeiP9L6rGvO5WUzKT3iSdLn0RkTKk61VBavb/Un7PhcXrqxgkwnjPd1blnBRDxpdLn3", + "RoAMc8+/miYPjhO2oQaaKeoXbPlaaiCy4CFSIVIh410S1CSolwlqL+BQQs5LxHUkdppwtYLnAEhW7yzg", + "NeSwpoMAyO/L9wmAN6UdjLgKd9zCaW0m+7kVDbeXZXybnYgWPXUmJku76kxMVumrT7ruv4nb+JvqDoXT", + "vuPG3L2ORf+Y5g56h2kr/cRjFAk8eZ2519FKZMjZS/JuWRzCDfOZ6hb/1ujI160tdgJzKRYifRW+/YLu", + "0rtF5sr35xsf3vadeVcw3ZMnbCdsJ2wnbKd78o6mU4/LgdCdjGB3Di9TkcmxUJYnd1vv263LHemnZ6Ew", + "WuGyPPBFw/14V9CW1F8uayzkui/AQ6PohI8EMAlgEsAkgEkAr3bpPUVZuK4MntWbdT+4j6P4VfZMTD52", + "lbhcYBJUEdRxxgeWBU0AzEiQ3afqyL2HNs+U8Y2RAze+eBDEk0zweOJbwKTyGemMYU1YrAWuZpkYiEyo", + "CGdHwsHWKM37iTQjEYei52Hhpbi0HhWWmxaVmr/QvoiryatBjVrwq9ODfQXKKZi4Q70zp7Oq+/Y9sRmx", + "GbEZWV+R9RXBKcHp54TTlwUWbphOV3bFBEw5Pessu2BC3Lyq16U1eZI8LRHTENMQ0xDTENMQ09wAT0tX", + "BJqFzpYCrMjYR7nusJMFii4GItjmmXJzcuDSWRzm3Ih6F02bpBZSgH2hCrDGMEB+IoXpo0ELy16j2tVY", + "4d5u/K6YYYrxCCjEWG7rLRqfQ65XMWjEJ9ezZ9y2bROZMhHZEtkS2RLZEtneQpdcV8baRX65plzb5JDr", + "K9embcf87I1IEx4J7KHrdrxFLEQsRCxELEQsRCx0m51tbfrgssuzaCTPRbNR3QEmCPrARqs2n+4mHUQS", + "vhC+EL4QvhC+EL4QvnwCvgSGKBPERikmHXEvtZc42YB0TKqGe3zB28ZrzO+r5JhFnhJcs26h54gvx8kC", + "zKuru1lofvxaHC244snbAnEtcS1d9iSsI28L4G2hglSbd7sAThdcGc3UNvW+ABKKTu7q5Pbn8x6Bg0LX", + "FIkqiCqIKogqiCpWcSExJ/e3oDDCf4N8eiYmC2/xBTv7ComUr+/hD59yf+8rhpd2YzVD5y6s7BbUQHSv", + "kCCEIISO7OjIjiiMKOzq9woBawbe+9Vmbxgu0er4+4FERdulot5n1vWQ7oawibCJsImwibDphlxa+3Rm", + "Wnh9bTE2TW+wETltnJy2eD73+e7VEbMRsxGzEbMRsxGz3eLLdVs8bERXWc137F5jgqV37Hw6umNHd+yI", + "YohiiGKIYohiiGKAYgJDbIBedGZ50vV3jj7A53GSDz928ZJY0y27n92vDJLDyxlpZfKxyBhm2GEnI2mY", + "UHGqpUKB5eocJRMmLlNtwsCH50yHbT7LOaaCIl5Ddi9cOSuBVdEn166GWn5JDFoBreq41aC13iNWr/nA", + "hVSxvlj1AtzcgydyLH7Tat2HB3Cn8Wmm8/ThZM1nh+GpbdLotLw3YKIOb6sVl7YbmfNqNrNDTARLBEsE", + "SwRLBEsEewsIVkR5Ju0EUAs57ESfCXWQO1D6/b2T0lPKLQNh6e8y8EIWrfc1RGtdvku8RGCaBs8Q09rV", + "+IZYxdN4IseywcP43n1whyDH+bi1v9vrAS/6fxUY6ObEUGQb0KQVDh0WqtSmDa5xrECcQpxCnEL380hM", + "375b/zOKGC8268Rwe1mw5tqsGi/5lyTSlgxyyjLvmo1xZosm8UrilcQriVcSr7fu+nutVFyyzTV5/18i", + "sqb7wf91FL/KnonJx657/20ixq4Jy70kllPDksGZz7DDnuiMRSMRnblZWUrIeOTW9zbLDY5195wnuSid", + "zWBIr/qd9TFmf1iu5irnMNV2LjyMqTlIWSM2GF6Hi683ONhKe/RSn9EenSCCIIIggiCC9ujGVsR4iRzK", + "QpbdeSgsv7tgm/4qFQrOsmH1sKNMCOZkjGF6UClhHzXxIm4zLwHb4MbNWG5lhKFj3YNuEU9FZicsdunH", + "Uglc0OHHaqb4FLzIycTN4IHgNs/QGRyu6q5XuZVumlxIO4KcylgCuZpURHLgVjupKnPICwEe6l55VAkR", + "G8aLQrkxOsJZAkX5p+6CG6Ad9hBbXaWnWAykEr4Tpjl5VnKls9PWI/dKG8GOj1/NrLunrY7L+hgfr+Sc", + "CMsmOmcpN4bxRKsh6lIGcpgjXbm5ngg2zLhyImm21LcG1wRpinpBs/7JfmVGWPeIOW2xO66Aac9hCXeh", + "Wi/mO82wET8XbMzVBJoUcSNMG1cinynLU5Y7SbrT5y5jrBY4iR6nmItL5QY2EZcgeaSTysbRUIexQ7RY", + "3oe5EeXG6jHSAhS42+v1euzgyGukWJxnYemDQh0WSF1Eli1PNjeMB2woz4UKvAvZapVMsFlaiRCA9o7S", + "asc7dbpbmTapyEKHPhOTDjsawDjZbAKWSEHtpcRF5THk7OmDuJ7zJBM8nsCE50X029Jz7cp8hnVtwGUS", + "Zui3vQe4VJR8VVWmKCy43qOiq6anrrGO5WDCpG1j87GlICPrFXNlDN0yuW/pJl6pBdikI5Xm1ly3x8wK", + "z5PPTOJ94v0t2w492HgLHmk1SGRk1xyvSOdJ7EfMyz/30hagG/lsp6QTDIsgHHqQaXXjRLsa2tXcFNVo", + "FWCW7mzWVpB2P5T+5VI8KaDsYxdoegUdKqZj0phcoC/JarVxa1MGMYeafeF3DDET0o4waot0+cDol7Cy", + "Vo1a6oCnWM/tK1FrMmzsvi9NQbtiESHASnvFFwD6/lWIynLtamAonnTBxIbEhqQLJmoiXXBVF+zR5Moa", + "YSSLoNnkrC9G/FzqzG0/Cl0j6tpQp1WjWwX6mQDygGINNjuu/2DtxUEHVVXMMp0kbixZlifCtN3UVmfw", + "uuLweaXVtD4XMhYs42oIGyKvXfS37UzQixmphkE36pZ3NtZuAwahbFyOsVbfWKyb1V5nKCOeJJOgwVPi", + "wvdkh/3q6wCqMkC+wH/QA6i0q+kGE3SOLrFvgWHc6yD52L3nrhHYm/BSe0r05gFxsQDPoSXmKSEyjxgM", + "ROTWenvhlnsHlPiVqxdGllYxfn2ZSq89dt932DGozkH53td25DIccxVzq7MJFF7qB9cYPzug5zhLM6kz", + "aSeF7hfaUFX8y4wBYGFDRYc91xciYyof90XmcxrJoYPhkF0bh7HH+iKsZZDC2CJJuTLFNOPlyRWqBAtC", + "jGjAc6vHrj9clmOucp6wTLgRdSnDBDdoBuFdZ7QZZzGXyaScuTRM/JWD3UYpA2i94eMwOuJcZBMW8wm7", + "I4dKg6a6mO9BB4/nC29mvw4T/sLlOeJpKhS8FbgsunUOxownbq2DN8EXyi3qAIXtsIf48x8HbqX74437", + "kv3IXhy9vPOCX4YiD2AettmLg3/eCQ88FAOdCXyizV5IVU189261+4NOY+Rey5hpVyWvk6womGN/o1dC", + "U4QyeebnfWgIRFjA6SONlRHLxJBnceJecj1gFyOY3y6Zg3hZF3EBt5FIyV/x/mj7anDoopIu/DOqwv2e", + "hvThtOehPQ/pw0kfTjs72tl5ffjQk8x1qsHdGGQyhkBZtc6KX2ECsDupGhyg7DV1JhBuJrvBTzN9LmMw", + "Oklza9COSA+sp0TjE4lzqXMzZ0VRycG3cCeYuKRcZmCT0ZiFNIXVRYjl5Ta3diSyC2kEi7UwTopeSuOt", + "L0JnTM0vANnnfNNgoCioY54OMx67/WysL1T4O5TjQdlDcGk04e33AFbTgd4kysMNrIp/i0xDGVaOxTwL", + "+2G6TvONr5uJyTSEUJhQmNzK3Aq3MrQXoL0A7QW+ir1AALnPaBoDF/4aLWOqNGxG8D5j9FRvH4MnNXC5", + "EJFfqIHOIn+mcVC9mOgvIZgRz3CSjLg58Gc94YIBmqzLjOFVxNB1GMh1nCdWponwxO0fkm5jkrm0Ns+U", + "k4lgo65V7cUCwPwn6JfyXCgJqv9McKOVaYcbkBc6O/PnTnCCUulBaOcis56nomzV8w66+Os26qmzsHGb", + "k1a9W/K93t69nd7uTm/3pLe7D/91er3d31rtlqM1blv7rZhbsePzuE6X43MjQ0Y2RNlE2UTZ5LyR+PP2", + "Bb4r49G5J5XtAuhH5Ey3F5wnTjAJrlFAZ+JcnznOKy4eukEu3e70PNZhB2ZqKtR8I7D58l8b7RFOW2M5", + "dEynhqet8DPaGQULI3+/DrTJycyNSm7YhUiSzqk6KCodbtbmBTB7w6CRNFZnMuKJN4Awbcy8piNSneYJ", + "D/p0r+w+sMyRlLF8nHbYL67+3pLCm3O5X1kf7D9gBWjPobE0zFg33yOtjIxxDQFjo3b5jiG0PRM2095C", + "qqT1DndV8eWRhskxOEJBFX+b8bFWQ4/uQCGmzXju1iU1nIdoNA7/snTc6+u1KxD7bd0OS2QChQ/ziwaA", + "mlDBTEyasJbhHgj2TYI7sc3GfOK3Y4M86TCCU4JTglOCU4JTgtOvHk5R/q+lGm3XazFnMbc/YTLehle0", + "qt7v6+eV3mc/BSd9GyENIQ0hDSENIc2N07dtX9PWRc1Sc/i/N3BkasoaqHBph6vY32GLueXNd9aCoskX", + "BTotk4LfqyjTxkwPbeH+EoM3Ae+dPcwzFesL9ZN/NPO1AcsQK5XOTZGtHjAjhtBK0ND5E+TwHRwAGwE4", + "5uTHxJfjL+D5O0zeP4Mtrtr1fQ2ml958M8t+x6Cuv0DkOxHP1vXCf1/XV95tmVCZdNPenyeHS1EKj0Ld", + "IuH62j2QSGOnN9aw7heuqXhnztXWgmEoHpO7X6H4ZSjqK/21EWl7droeW55BB4E+E++LWg1TcFKemfus", + "OF12PfXmySN27969Bwx7vMMe48pR6JETbmy4XvdUuO+zXOHNVp/CjUiecJwiaJZUcnEIPeoGoe6cHAI6", + "buecfK6DDlW84e5R+qJzqo4GIK2VvnBNV2y46U6y+rq6CF9kI/8WDVUpBcdcNFkXSZBfSvE152sAXjXl", + "WPztGAdMaeDEIeJJlCfcBibAepjOwmoWoThrfai03p48umbzirBO+kunYeWhTR9t+mjTR5s+2vTRpu92", + "G1mMChbf9uYPgBYu+9X6hEHPEWOenaEYMwGu8dZRxfNyze4P3Y8oaSVYI+B+KjjC6LADO5upzwrzlQZu", + "ucVM55iT3/KAHa9O3FwBzxllU16ZzTva6LAjyy7ALtlOUu/tpS+c6IzCjgvq4buQ9f0L6GsDl/XAYtlX", + "bKZAk/eLPoN94NtQfe92xBeJe1vXTXUuY2ZzLfdtONUvW1rzJNEXIBTQn0lRgERXIGoCAOlNPWLtGmR0", + "ec/JVTRC9z623mVh2BLLAfhMr/O5AROkNDmh6V/lqcbmbxfW9s0aDjfIFIQQmhCaEJoQmhCaEHoJQiOp", + "Xv3kpCjXlGm4zsHYcSnxlmLVlovAQq/bJUGlkeSTgCiEKITcc9GVfEINQo3gnstUOSDAxnGFJd63W5c7", + "0s9QL7abwANUd8U//SUob5Ixd3I/QyEr6VtKeS/Uj0xPVnu7T7+7/9v39+8fPPnl4NlPh7t7L3/tPfr5", + "wZOfoEzwvdzab/3P772d79//3tt5cLDz0z+evXj5eufk3c5vfGf0r7OxSnfs+c7f7z/s3f/4H6ucvoaz", + "T8atn1FeO1ckKrkZCN5gmT9+LhyEldclPMUGR12gw1olOAS3X+HF9fKsOLxMuYpFTOeqhGOEY6QUIqUQ", + "kdotPFe9MqYB4ESj+UOYh+7rIIV8SNsxVzGuiWOuZBpstLJcgbv+Cud1TpUb6TMx8dZ0brT/7KYjboTp", + "foDPZ2Ly8U83fjXfdyFwVPeD+4B088dyh7G8QYT4fvtaNtdhq+nYep9fx0aQRpBGkEaQRkpDQlFC0a8D", + "RR1gXIPKsBu5Tk2aLfoewe9mTqVWE04JUhJFuq4snIhCtUOItce8zj1VnSKyoryU4NQpEu5NkOOxiN08", + "TyaomNzYnZbwjQYzO2JbYltiW2JbYltiW2JbYtvNHogDzVwL3cKNhAV065YTMC6rUbwG55qZDUGq3JLD", + "o0hnsV+RgNUgMq7v6s6peoSXIQp/9vUhnlzeacJVcHZZw9PwA/H0OraPONyfkV2xBuFFgYYSzRLNEs0S", + "zRLNEs0Szd5AmgWRfx00i97jF+DsC0xQ1dZK6yasroZDPReZcRPZv5zhjXVEOk+iPltC0TnVLi5q77Az", + "3RdjqeQ4H7f2d4tS3XAPRfZl6ViJU4lTiVOJU4lTiVOJU28Fp3qKuw5QzVXo6R08uebW89EKRgbFGJUe", + "nWfSt0URj0olfP1USufrRHpEekR6RHpEekR6RHpXIb0pG5UZaj3WcxnCmCBHVSvzXEc8abVbeZa09lsj", + "a1Oz3+3u7n3f6XV6nd2WQxlf1oeAXQdpalof28W/H/ppeefwMhWZHLslK7lbTvE64WrBz9VGlH54LPr5", + "sPzFo9xYPXZNqXPd7ZeIR1qZfCwy9lpnlidFhErWz2USM6l2eJqy3IhsZ8AjV/OYm1Ff8yw2PnjAROcZ", + "i0Jh8PBAJwk6OJcQHd7kY2/UqVgmeALmmJ0pnGLhNfV8qW1hZGCCHjc4jHQwk8nh0JUKfr+DTUI1RhW6", + "zzalMAx2lAkz0kkcot1zN3HaTCiTZwU1zbQLzCJ44gSl4GN8kicXfGJ8AALhI2F5fJ52pRhzmcxmBxW2", + "IzHB4tn39/+zzXZ7vf9EI4nd+73/9Cu2zNhYKztKJszqMwcrrnOLyBLKddEEs5/WD/PnCpYH1+YRT1Oh", + "QMrHmWM0cZlyZeCm3XQgyv0dfEDV+cYveYoa8zPgpVQbI/3KJV0HoI9MkFOXLM0kzB4TCcUzqYG1R4yb", + "om1/5dpy03arecplHNyLepsRke2Evgt5ddhjrb6x7F+5sRjvAUc3kWNpDdMK+2TMszOM/5ryofj3//5/", + "wUupHYkxyErpU5bWNtcIt+plOkFJqjGchFuKlEHERflpYEllz5+/KPdjnS+tmiAMwZWqm0swZ6UIcTbw", + "vSwV42bThTQj8GUKAQDYyUgYWOx8hAKQfe5dNW0vWrzJjUEBhaMv4E8MORILI4dwHlK4dZVuPrvlXmoF", + "/lKHQolMRu714H1YvAaJuIShLvcYxxgl5250c4NVrIx4h50Ev7JtxouIwjzCIL+c5Ur+lQsmga0HUmSV", + "0TETY8XYR+F1jXQCL8yJDvv9jeAxG+tMvL8TlmadCoVdJXU31pHpRonO48IL8N3SiIWxqBmmAz+xgDKC", + "11euJrjDcuOihA/dkPHojPEoyjMwVkfPu+BXw9U7eMx1TVA8mVgZGZbmWaqNG5AVm6CV22aZLlRqB4Oz", + "lFtyCN/UtOMFKAhgsoGZlgOJ4TATQ0eHpSbi3JhAQpwgmFgPBiKbBqEJz7rBd9tNHeMiieEUmJF/C+O2", + "lBAVUFo2kkP3nvOYpzYgDo5sWLZdN5bfIqxw6+P7j/83AAD//7HfK/ptDwcA", } // GetSwagger returns the content of the embedded swagger specification file diff --git a/api/client/go/client.gen.go b/api/client/go/client.gen.go index da278f0f0..ab7152ea0 100644 --- a/api/client/go/client.gen.go +++ b/api/client/go/client.gen.go @@ -21,7 +21,7 @@ import ( "github.com/cloudevents/sdk-go/v2/event" "github.com/getkin/kin-openapi/openapi3" "github.com/oapi-codegen/runtime" - "github.com/openmeterio/openmeter/pkg/models" + "github.com/openmeterio/openmeter/api/models" ) const ( @@ -29080,429 +29080,428 @@ var swaggerSpec = []string{ "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", - "AA==", + "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", } // GetSwagger returns the content of the embedded swagger specification file diff --git a/api/client/go/client_test.go b/api/client/go/client_test.go index 15e35d09d..8ffca5fda 100644 --- a/api/client/go/client_test.go +++ b/api/client/go/client_test.go @@ -12,7 +12,7 @@ import ( "github.com/samber/lo" "github.com/stretchr/testify/assert" - "github.com/openmeterio/openmeter/pkg/models" + "github.com/openmeterio/openmeter/api/models" ) func TestIngest(t *testing.T) { diff --git a/api/client/go/codegen.yaml b/api/client/go/codegen.yaml index 5c4e5e69b..57377684d 100644 --- a/api/client/go/codegen.yaml +++ b/api/client/go/codegen.yaml @@ -1,6 +1,9 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/oapi-codegen/oapi-codegen/HEAD/configuration-schema.json package: openmeter generate: client: true models: true embedded-spec: true +additional-imports: + - package: github.com/openmeterio/openmeter/api/models output: ./client.gen.go diff --git a/api/codegen.yaml b/api/codegen.yaml index e903b8063..93057a7c3 100644 --- a/api/codegen.yaml +++ b/api/codegen.yaml @@ -1,3 +1,4 @@ +# yaml-language-server: $schema=https://raw.githubusercontent.com/oapi-codegen/oapi-codegen/HEAD/configuration-schema.json package: api generate: chi-server: true diff --git a/api/go.mod b/api/go.mod new file mode 100644 index 000000000..8f35519ad --- /dev/null +++ b/api/go.mod @@ -0,0 +1,39 @@ +module github.com/openmeterio/openmeter/api + +go 1.23.1 + +require ( + github.com/cloudevents/sdk-go/v2 v2.15.2 + github.com/getkin/kin-openapi v0.127.0 + github.com/go-chi/chi/v5 v5.1.0 + github.com/oapi-codegen/oapi-codegen/v2 v2.4.1 + github.com/oapi-codegen/runtime v1.1.1 + github.com/oklog/ulid/v2 v2.1.0 + github.com/samber/lo v1.47.0 + github.com/stretchr/testify v1.10.0 +) + +require ( + github.com/apapsch/go-jsonmerge/v2 v2.0.0 // indirect + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/dprotaso/go-yit v0.0.0-20220510233725-9ba8df137936 // indirect + github.com/go-openapi/jsonpointer v0.21.0 // indirect + github.com/go-openapi/swag v0.23.0 // indirect + github.com/google/uuid v1.5.0 // indirect + github.com/invopop/yaml v0.3.1 // indirect + github.com/josharian/intern v1.0.0 // indirect + github.com/json-iterator/go v1.1.12 // indirect + github.com/mailru/easyjson v0.7.7 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect + github.com/perimeterx/marshmallow v1.1.5 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/speakeasy-api/openapi-overlay v0.9.0 // indirect + github.com/vmware-labs/yaml-jsonpath v0.3.2 // indirect + golang.org/x/mod v0.17.0 // indirect + golang.org/x/text v0.18.0 // indirect + golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect +) diff --git a/api/go.sum b/api/go.sum new file mode 100644 index 000000000..88ec8f7b9 --- /dev/null +++ b/api/go.sum @@ -0,0 +1,198 @@ +github.com/RaveNoX/go-jsoncommentstrip v1.0.0/go.mod h1:78ihd09MekBnJnxpICcwzCMzGrKSKYe4AqU6PDYYpjk= +github.com/apapsch/go-jsonmerge/v2 v2.0.0 h1:axGnT1gRIfimI7gJifB699GoE/oq+F2MU7Dml6nw9rQ= +github.com/apapsch/go-jsonmerge/v2 v2.0.0/go.mod h1:lvDnEdqiQrp0O42VQGgmlKpxL1AP2+08jFMw88y4klk= +github.com/bmatcuk/doublestar v1.1.1/go.mod h1:UD6OnuiIn0yFxxA2le/rnRU1G4RaI4UvFv1sNto9p6w= +github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= +github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= +github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= +github.com/cloudevents/sdk-go/v2 v2.15.2 h1:54+I5xQEnI73RBhWHxbI1XJcqOFOVJN85vb41+8mHUc= +github.com/cloudevents/sdk-go/v2 v2.15.2/go.mod h1:lL7kSWAE/V8VI4Wh0jbL2v/jvqsm6tjmaQBSvxcv4uE= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dprotaso/go-yit v0.0.0-20191028211022-135eb7262960/go.mod h1:9HQzr9D/0PGwMEbC3d5AB7oi67+h4TsQqItC1GVYG58= +github.com/dprotaso/go-yit v0.0.0-20220510233725-9ba8df137936 h1:PRxIJD8XjimM5aTknUK9w6DHLDox2r2M3DI4i2pnd3w= +github.com/dprotaso/go-yit v0.0.0-20220510233725-9ba8df137936/go.mod h1:ttYvX5qlB+mlV1okblJqcSMtR4c52UKxDiX9GRBS8+Q= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/getkin/kin-openapi v0.127.0 h1:Mghqi3Dhryf3F8vR370nN67pAERW+3a95vomb3MAREY= +github.com/getkin/kin-openapi v0.127.0/go.mod h1:OZrfXzUfGrNbsKj+xmFBx6E5c6yH3At/tAKSc2UszXM= +github.com/go-chi/chi/v5 v5.1.0 h1:acVI1TYaD+hhedDJ3r54HyA6sExp3HfXq7QWEEY/xMw= +github.com/go-chi/chi/v5 v5.1.0/go.mod h1:DslCQbL2OYiznFReuXYUmQ2hGd1aDpCnlMNITLSKoi8= +github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ= +github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY= +github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE= +github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ= +github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= +github.com/go-test/deep v1.0.8 h1:TDsG77qcSprGbC6vTN8OuXp5g+J+b5Pcguhf7Zt61VM= +github.com/go-test/deep v1.0.8/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= +github.com/google/uuid v1.5.0 h1:1p67kYwdtXjb0gL0BPiP1Av9wiZPo5A8z2cWkTZ+eyU= +github.com/google/uuid v1.5.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= +github.com/invopop/yaml v0.3.1 h1:f0+ZpmhfBSS4MhG+4HYseMdJhoeeopbSKbq5Rpeelso= +github.com/invopop/yaml v0.3.1/go.mod h1:PMOp3nn4/12yEZUFfmOuNHJsZToEEOwoWsT+D81KkeA= +github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= +github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= +github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= +github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/juju/gnuflag v0.0.0-20171113085948-2ce1bb71843d/go.mod h1:2PavIy+JPciBPrBUjwbNvtwB6RQlve+hkpll6QSNmOE= +github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= +github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= +github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= +github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= +github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= +github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= +github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= +github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= +github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9M+97sNutRR1RKhG96O6jWumTTnw= +github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= +github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= +github.com/nxadm/tail v1.4.8 h1:nPr65rt6Y5JFSKQO7qToXr7pePgD6Gwiw05lkbyAQTE= +github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= +github.com/oapi-codegen/oapi-codegen/v2 v2.4.1 h1:ykgG34472DWey7TSjd8vIfNykXgjOgYJZoQbKfEeY/Q= +github.com/oapi-codegen/oapi-codegen/v2 v2.4.1/go.mod h1:N5+lY1tiTDV3V1BeHtOxeWXHoPVeApvsvjJqegfoaz8= +github.com/oapi-codegen/runtime v1.1.1 h1:EXLHh0DXIJnWhdRPN2w4MXAzFyE4CskzhNLUmtpMYro= +github.com/oapi-codegen/runtime v1.1.1/go.mod h1:SK9X900oXmPWilYR5/WKPzt3Kqxn/uS/+lbpREv+eCg= +github.com/oklog/ulid/v2 v2.1.0 h1:+9lhoxAP56we25tyYETBBY1YLA2SaoLvUFgrP2miPJU= +github.com/oklog/ulid/v2 v2.1.0/go.mod h1:rcEKHmBBKfef9DhnvX7y1HZBYxjXb0cP5ExxNsTT1QQ= +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.10.2/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.16.4 h1:29JGrr5oVBm5ulCWet69zQkzWipVXIol6ygQUe/EzNc= +github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= +github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= +github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= +github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= +github.com/onsi/gomega v1.27.6 h1:ENqfyGeS5AX/rlXDd/ETokDz93u0YufY1Pgxuy/PvWE= +github.com/onsi/gomega v1.27.6/go.mod h1:PIQNjfQwkP3aQAH7lf7j87O/5FiNr+ZR8+ipb+qQlhg= +github.com/pborman/getopt v0.0.0-20170112200414-7148bc3a4c30/go.mod h1:85jBQOZwpVEaDAr341tbn15RS4fCAsIst0qp7i8ex1o= +github.com/perimeterx/marshmallow v1.1.5 h1:a2LALqQ1BlHM8PZblsDdidgv1mWi1DgC2UmX50IvK2s= +github.com/perimeterx/marshmallow v1.1.5/go.mod h1:dsXbUu8CRzfYP5a87xpp0xq9S3u0Vchtcl8we9tYaXw= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= +github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= +github.com/samber/lo v1.47.0 h1:z7RynLwP5nbyRscyvcD043DWYoOcYRv3mV8lBeqOCLc= +github.com/samber/lo v1.47.0/go.mod h1:RmDH9Ct32Qy3gduHQuKJ3gW1fMHAnE/fAzQuf6He5cU= +github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0= +github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= +github.com/speakeasy-api/openapi-overlay v0.9.0 h1:Wrz6NO02cNlLzx1fB093lBlYxSI54VRhy1aSutx0PQg= +github.com/speakeasy-api/openapi-overlay v0.9.0/go.mod h1:f5FloQrHA7MsxYg9djzMD5h6dxrHjVVByWKh7an8TRc= +github.com/spkg/bom v0.0.0-20160624110644-59b7046e48ad/go.mod h1:qLr4V1qq6nMqFKkMo8ZTx3f+BZEkzsRUY10Xsm2mwU0= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= +github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU= +github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= +github.com/vmware-labs/yaml-jsonpath v0.3.2 h1:/5QKeCBGdsInyDCyVNLbXyilb61MXGi9NP674f9Hobk= +github.com/vmware-labs/yaml-jsonpath v0.3.2/go.mod h1:U6whw1z03QyqgWdgXxvVnQ90zN1BWz5V+51Ewf8k+rQ= +github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= +golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= +golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= +golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= +golang.org/x/net v0.25.0 h1:d/OCCoBEUq33pjydKrGQhw7IlUPI2Oylr+8qLx49kac= +golang.org/x/net v0.25.0/go.mod h1:JkAGAh7GEvH74S6FOH42FLoXpXbE/aqXSrIQjXgsiwM= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= +golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.20.0 h1:Od9JTbYCk261bKm4M/mw7AklTlFYIa0bIp9BgSm1S8Y= +golang.org/x/sys v0.20.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= +golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= +golang.org/x/text v0.18.0 h1:XvMDiNzPAl0jr17s6W9lcaIhGUfUORdGCNsuLmPG224= +golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= +golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg= +golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= +gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20191026110619-0b21df46bc1d/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/api/models/error.go b/api/models/error.go new file mode 100644 index 000000000..1339cc00c --- /dev/null +++ b/api/models/error.go @@ -0,0 +1,11 @@ +package models + +import "fmt" + +type MeterNotFoundError struct { + MeterSlug string +} + +func (e *MeterNotFoundError) Error() string { + return fmt.Sprintf("meter not found: %s", e.MeterSlug) +} diff --git a/pkg/models/meter.go b/api/models/meter.go similarity index 100% rename from pkg/models/meter.go rename to api/models/meter.go diff --git a/pkg/models/meter_test.go b/api/models/meter_test.go similarity index 100% rename from pkg/models/meter_test.go rename to api/models/meter_test.go diff --git a/pkg/models/problem.go b/api/models/problem.go similarity index 100% rename from pkg/models/problem.go rename to api/models/problem.go diff --git a/api/openapi.cloud.yaml b/api/openapi.cloud.yaml index 384c84a66..e366f017b 100644 --- a/api/openapi.cloud.yaml +++ b/api/openapi.cloud.yaml @@ -12404,7 +12404,7 @@ components: type: $.type description: A meter is a configuration that defines how to match and aggregate events. x-go-type-import: - path: github.com/openmeterio/openmeter/pkg/models + path: github.com/openmeterio/openmeter/api/models x-go-type: models.Meter MeterAggregation: type: string @@ -12417,7 +12417,7 @@ components: - MAX description: The aggregation type to use for the meter. x-go-type-import: - path: github.com/openmeterio/openmeter/pkg/models + path: github.com/openmeterio/openmeter/api/models x-go-type: models.MeterAggregation MeterCreate: type: object @@ -12488,7 +12488,7 @@ components: type: $.type description: A meter is a configuration that defines how to match and aggregate events. x-go-type-import: - path: github.com/openmeterio/openmeter/pkg/models + path: github.com/openmeterio/openmeter/api/models x-go-type: models.Meter MeterQueryResult: type: object @@ -12559,7 +12559,7 @@ components: type: prompt description: A row in the result of a meter query. x-go-type-import: - path: github.com/openmeterio/openmeter/pkg/models + path: github.com/openmeterio/openmeter/api/models x-go-type: models.MeterQueryRow NotFoundProblemResponse: type: object @@ -15337,7 +15337,7 @@ components: A Problem Details object (RFC 7807). Additional properties specific to the problem type may be present. x-go-type-import: - path: github.com/openmeterio/openmeter/pkg/models + path: github.com/openmeterio/openmeter/api/models x-go-type: models.StatusProblem UnitPrice: type: object @@ -15594,7 +15594,7 @@ components: - DAY description: Aggregation window size. x-go-type-import: - path: github.com/openmeterio/openmeter/pkg/models + path: github.com/openmeterio/openmeter/api/models x-go-type: models.WindowSize WindowedBalanceHistory: type: object diff --git a/api/openapi.yaml b/api/openapi.yaml index 5b17f5360..c33b952e0 100644 --- a/api/openapi.yaml +++ b/api/openapi.yaml @@ -12106,7 +12106,7 @@ components: type: $.type description: A meter is a configuration that defines how to match and aggregate events. x-go-type-import: - path: github.com/openmeterio/openmeter/pkg/models + path: github.com/openmeterio/openmeter/api/models x-go-type: models.Meter MeterAggregation: type: string @@ -12119,7 +12119,7 @@ components: - MAX description: The aggregation type to use for the meter. x-go-type-import: - path: github.com/openmeterio/openmeter/pkg/models + path: github.com/openmeterio/openmeter/api/models x-go-type: models.MeterAggregation MeterQueryResult: type: object @@ -12190,7 +12190,7 @@ components: type: prompt description: A row in the result of a meter query. x-go-type-import: - path: github.com/openmeterio/openmeter/pkg/models + path: github.com/openmeterio/openmeter/api/models x-go-type: models.MeterQueryRow NotFoundProblemResponse: type: object @@ -15200,7 +15200,7 @@ components: A Problem Details object (RFC 7807). Additional properties specific to the problem type may be present. x-go-type-import: - path: github.com/openmeterio/openmeter/pkg/models + path: github.com/openmeterio/openmeter/api/models x-go-type: models.StatusProblem UnitPrice: type: object @@ -15463,7 +15463,7 @@ components: - DAY description: Aggregation window size. x-go-type-import: - path: github.com/openmeterio/openmeter/pkg/models + path: github.com/openmeterio/openmeter/api/models x-go-type: models.WindowSize WindowedBalanceHistory: type: object diff --git a/api/spec/src/cloud/main.tsp b/api/spec/src/cloud/main.tsp index 110d9d4d1..d338861cb 100644 --- a/api/spec/src/cloud/main.tsp +++ b/api/spec/src/cloud/main.tsp @@ -226,7 +226,7 @@ namespace OpenMeterCloud.ProductCatalog { @extension( "x-go-type-import", { - path: "github.com/openmeterio/openmeter/pkg/models", + path: "github.com/openmeterio/openmeter/api/models", } ) @friendlyName("MeterCreate") diff --git a/api/spec/src/errors.tsp b/api/spec/src/errors.tsp index 597396ef3..af30d031b 100644 --- a/api/spec/src/errors.tsp +++ b/api/spec/src/errors.tsp @@ -15,7 +15,7 @@ namespace OpenMeter; @extension( "x-go-type-import", { - path: "github.com/openmeterio/openmeter/pkg/models", + path: "github.com/openmeterio/openmeter/api/models", } ) @friendlyName("UnexpectedProblemResponse") diff --git a/api/spec/src/meters.tsp b/api/spec/src/meters.tsp index d320d7f49..215995aa5 100644 --- a/api/spec/src/meters.tsp +++ b/api/spec/src/meters.tsp @@ -84,7 +84,7 @@ interface Meters { @extension( "x-go-type-import", { - path: "github.com/openmeterio/openmeter/pkg/models", + path: "github.com/openmeterio/openmeter/api/models", } ) @friendlyName("Meter") @@ -163,7 +163,7 @@ model Meter { @extension( "x-go-type-import", { - path: "github.com/openmeterio/openmeter/pkg/models", + path: "github.com/openmeterio/openmeter/api/models", } ) @friendlyName("MeterAggregation") @@ -184,7 +184,7 @@ enum MeterAggregation { @extension( "x-go-type-import", { - path: "github.com/openmeterio/openmeter/pkg/models", + path: "github.com/openmeterio/openmeter/api/models", } ) @friendlyName("WindowSize") @@ -289,7 +289,7 @@ model MeterQueryResult { @extension( "x-go-type-import", { - path: "github.com/openmeterio/openmeter/pkg/models", + path: "github.com/openmeterio/openmeter/api/models", } ) @friendlyName("MeterQueryRow") diff --git a/api/tools.go b/api/tools.go new file mode 100644 index 000000000..35e0f39ee --- /dev/null +++ b/api/tools.go @@ -0,0 +1,8 @@ +//go:build tools +// +build tools + +package main + +import ( + _ "github.com/oapi-codegen/oapi-codegen/v2/cmd/oapi-codegen" +) diff --git a/api/types/doc.go b/api/types/doc.go deleted file mode 100644 index 06147f3c6..000000000 --- a/api/types/doc.go +++ /dev/null @@ -1,3 +0,0 @@ -// Some parts of the OpenAPI spec are not supported by oapi-codegen, such as the "oneOf" and "anyOf" keywords. -// In these cases, you can define the types manually in the types package and reference them via `x-go-type` so the go client works properly. -package types diff --git a/api/types/entitlement.go b/api/types/entitlement.go deleted file mode 100644 index ae38a7abc..000000000 --- a/api/types/entitlement.go +++ /dev/null @@ -1,12 +0,0 @@ -package types - -// CreateEntitlementJSONBodyType defines parameters for CreateEntitlement. -// -// ENUM: "metered", "static", "boolean" -type CreateEntitlementJSONBodyType string - -const ( - CreateEntitlementJSONBodyTypeMetered CreateEntitlementJSONBodyType = "metered" - CreateEntitlementJSONBodyTypeStatic CreateEntitlementJSONBodyType = "static" - CreateEntitlementJSONBodyTypeBoolean CreateEntitlementJSONBodyType = "boolean" -) diff --git a/app/common/meter.go b/app/common/meter.go index 625d14b07..087f732cb 100644 --- a/app/common/meter.go +++ b/app/common/meter.go @@ -4,9 +4,9 @@ import ( "github.com/google/wire" "github.com/samber/lo" + "github.com/openmeterio/openmeter/api/models" "github.com/openmeterio/openmeter/app/config" "github.com/openmeterio/openmeter/openmeter/meter" - "github.com/openmeterio/openmeter/pkg/models" "github.com/openmeterio/openmeter/pkg/slicesx" ) diff --git a/app/config/config.go b/app/config/config.go index 46a9064e3..5b361fe80 100644 --- a/app/config/config.go +++ b/app/config/config.go @@ -8,8 +8,8 @@ import ( "github.com/spf13/pflag" "github.com/spf13/viper" + "github.com/openmeterio/openmeter/api/models" "github.com/openmeterio/openmeter/pkg/errorsx" - "github.com/openmeterio/openmeter/pkg/models" ) // Configuration holds any kind of Configuration that comes from the outside world and diff --git a/app/config/config_test.go b/app/config/config_test.go index 5a8fb384e..f8fb31c04 100644 --- a/app/config/config_test.go +++ b/app/config/config_test.go @@ -10,9 +10,9 @@ import ( "github.com/spf13/viper" "github.com/stretchr/testify/assert" + "github.com/openmeterio/openmeter/api/models" notificationwebhook "github.com/openmeterio/openmeter/openmeter/notification/webhook" pkgkafka "github.com/openmeterio/openmeter/pkg/kafka" - "github.com/openmeterio/openmeter/pkg/models" "github.com/openmeterio/openmeter/pkg/redis" ) diff --git a/benthos-collector.Dockerfile b/benthos-collector.Dockerfile index 93e29d58d..df3008488 100644 --- a/benthos-collector.Dockerfile +++ b/benthos-collector.Dockerfile @@ -10,14 +10,17 @@ ARG GOPROXY ENV CGO_ENABLED=0 -COPY go.mod go.sum ./ -RUN go mod download - -COPY . . +RUN --mount=type=cache,target=/go/pkg/mod \ + --mount=type=cache,target=/root/.cache/go-build \ + --mount=type=bind,source=.,target=/usr/local/src/openmeter,ro \ + go mod download ARG VERSION -RUN go build -ldflags "-X main.version=${VERSION}" -o /usr/local/bin/benthos ./cmd/benthos-collector +RUN --mount=type=cache,target=/go/pkg/mod \ + --mount=type=cache,target=/root/.cache/go-build \ + --mount=type=bind,source=.,target=/usr/local/src/openmeter,ro \ + go build -ldflags "-X main.version=${VERSION}" -o /usr/local/bin/benthos ./cmd/benthos-collector FROM alpine:3.20.3@sha256:1e42bbe2508154c9126d48c2b8a75420c3544343bf86fd041fb7527e017a4b4a diff --git a/cmd/jobs/entitlement/init.go b/cmd/jobs/entitlement/init.go index 071552c50..74e433d73 100644 --- a/cmd/jobs/entitlement/init.go +++ b/cmd/jobs/entitlement/init.go @@ -8,6 +8,7 @@ import ( "github.com/ClickHouse/clickhouse-go/v2" "go.opentelemetry.io/otel/metric" + "github.com/openmeterio/openmeter/api/models" "github.com/openmeterio/openmeter/app/common" "github.com/openmeterio/openmeter/app/config" "github.com/openmeterio/openmeter/openmeter/meter" @@ -17,7 +18,6 @@ import ( "github.com/openmeterio/openmeter/openmeter/watermill/eventbus" entdriver "github.com/openmeterio/openmeter/pkg/framework/entutils/entdriver" "github.com/openmeterio/openmeter/pkg/framework/pgdriver" - "github.com/openmeterio/openmeter/pkg/models" "github.com/openmeterio/openmeter/pkg/slicesx" ) diff --git a/e2e/e2e_test.go b/e2e/e2e_test.go index 041c194ce..40cd5588e 100644 --- a/e2e/e2e_test.go +++ b/e2e/e2e_test.go @@ -18,9 +18,9 @@ import ( "github.com/stretchr/testify/require" api "github.com/openmeterio/openmeter/api/client/go" + "github.com/openmeterio/openmeter/api/models" "github.com/openmeterio/openmeter/openmeter/testutils" "github.com/openmeterio/openmeter/pkg/convert" - "github.com/openmeterio/openmeter/pkg/models" ) func TestMain(m *testing.M) { diff --git a/go.mod b/go.mod index 3f430a5a9..d85d7f614 100644 --- a/go.mod +++ b/go.mod @@ -1,6 +1,10 @@ module github.com/openmeterio/openmeter -go 1.23.0 +go 1.23.1 + +require github.com/openmeterio/openmeter/api v0.0.0-20241219175546-dcaedd1488b3 + +replace github.com/openmeterio/openmeter/api => ./api require ( entgo.io/ent v0.14.1 @@ -35,7 +39,7 @@ require ( github.com/mitchellh/mapstructure v1.5.0 github.com/oapi-codegen/nethttp-middleware v1.0.2 github.com/oapi-codegen/oapi-codegen/v2 v2.4.1 - github.com/oapi-codegen/runtime v1.1.1 + github.com/oapi-codegen/runtime v1.1.1 // indirect github.com/oklog/run v1.1.0 github.com/oklog/ulid/v2 v2.1.0 github.com/oliveagle/jsonpath v0.0.0-20180606110733-2e52cf6e6852 diff --git a/openmeter/billing/service/lineservice/meters.go b/openmeter/billing/service/lineservice/meters.go index dca60e097..31edd67b2 100644 --- a/openmeter/billing/service/lineservice/meters.go +++ b/openmeter/billing/service/lineservice/meters.go @@ -7,10 +7,10 @@ import ( "github.com/alpacahq/alpacadecimal" + "github.com/openmeterio/openmeter/api/models" "github.com/openmeterio/openmeter/openmeter/billing" "github.com/openmeterio/openmeter/openmeter/productcatalog/feature" "github.com/openmeterio/openmeter/openmeter/streaming" - "github.com/openmeterio/openmeter/pkg/models" ) type getFeatureUsageInput struct { diff --git a/openmeter/billing/service/lineservice/usagebasedline.go b/openmeter/billing/service/lineservice/usagebasedline.go index e1593b9f7..bbf9758bf 100644 --- a/openmeter/billing/service/lineservice/usagebasedline.go +++ b/openmeter/billing/service/lineservice/usagebasedline.go @@ -8,10 +8,10 @@ import ( "github.com/alpacahq/alpacadecimal" "github.com/samber/lo" + "github.com/openmeterio/openmeter/api/models" "github.com/openmeterio/openmeter/openmeter/billing" "github.com/openmeterio/openmeter/openmeter/productcatalog" "github.com/openmeterio/openmeter/pkg/currencyx" - "github.com/openmeterio/openmeter/pkg/models" "github.com/openmeterio/openmeter/pkg/slicesx" ) diff --git a/openmeter/billing/worker/subscription/scanario_test.go b/openmeter/billing/worker/subscription/scanario_test.go index 8e7c695cb..af913b596 100644 --- a/openmeter/billing/worker/subscription/scanario_test.go +++ b/openmeter/billing/worker/subscription/scanario_test.go @@ -12,6 +12,7 @@ import ( "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" + "github.com/openmeterio/openmeter/api/models" "github.com/openmeterio/openmeter/openmeter/billing" "github.com/openmeterio/openmeter/openmeter/credit" grantrepo "github.com/openmeterio/openmeter/openmeter/credit/adapter" @@ -37,7 +38,7 @@ import ( "github.com/openmeterio/openmeter/pkg/clock" "github.com/openmeterio/openmeter/pkg/currencyx" "github.com/openmeterio/openmeter/pkg/datex" - "github.com/openmeterio/openmeter/pkg/models" + pkgmodels "github.com/openmeterio/openmeter/pkg/models" "github.com/openmeterio/openmeter/pkg/pagination" billingtest "github.com/openmeterio/openmeter/test/billing" ) @@ -221,8 +222,8 @@ func (s *SubscriptionHandlerTestSuite) TestSubscriptionHappyPath() { CustomerMutate: customerentity.CustomerMutate{ Name: "Test Customer", PrimaryEmail: lo.ToPtr("test@test.com"), - BillingAddress: &models.Address{ - Country: lo.ToPtr(models.CountryCode("US")), + BillingAddress: &pkgmodels.Address{ + Country: lo.ToPtr(pkgmodels.CountryCode("US")), }, Currency: lo.ToPtr(currencyx.Code(currency.USD)), UsageAttribution: customerentity.CustomerUsageAttribution{ @@ -235,7 +236,7 @@ func (s *SubscriptionHandlerTestSuite) TestSubscriptionHappyPath() { require.NotEmpty(s.T(), customerEntity.ID) plan, err := s.PlanService.CreatePlan(ctx, plan.CreatePlanInput{ - NamespacedModel: models.NamespacedModel{ + NamespacedModel: pkgmodels.NamespacedModel{ Namespace: namespace, }, Plan: productcatalog.Plan{ @@ -445,13 +446,13 @@ func (s *SubscriptionHandlerTestSuite) TestSubscriptionHappyPath() { clock.SetTime(s.mustParseTime("2024-02-20T00:00:00Z")) cancelAt := s.mustParseTime("2024-02-22T00:00:00Z") - subs, err := s.SubscriptionService.Cancel(ctx, models.NamespacedID{ + subs, err := s.SubscriptionService.Cancel(ctx, pkgmodels.NamespacedID{ Namespace: namespace, ID: subsView.Subscription.ID, }, cancelAt) s.NoError(err) - subsView, err = s.SubscriptionService.GetView(ctx, models.NamespacedID{ + subsView, err = s.SubscriptionService.GetView(ctx, pkgmodels.NamespacedID{ Namespace: namespace, ID: subs.ID, }) @@ -502,13 +503,13 @@ func (s *SubscriptionHandlerTestSuite) TestSubscriptionHappyPath() { s.Run("continue subscription", func() { clock.SetTime(s.mustParseTime("2024-02-21T00:00:00Z")) - subs, err := s.SubscriptionService.Continue(ctx, models.NamespacedID{ + subs, err := s.SubscriptionService.Continue(ctx, pkgmodels.NamespacedID{ Namespace: namespace, ID: subsView.Subscription.ID, }) s.NoError(err) - subsView, err = s.SubscriptionService.GetView(ctx, models.NamespacedID{ + subsView, err = s.SubscriptionService.GetView(ctx, pkgmodels.NamespacedID{ Namespace: namespace, ID: subs.ID, }) @@ -576,8 +577,8 @@ func (s *SubscriptionHandlerTestSuite) TestInArrearsProrating() { CustomerMutate: customerentity.CustomerMutate{ Name: "Test Customer", PrimaryEmail: lo.ToPtr("test@test.com"), - BillingAddress: &models.Address{ - Country: lo.ToPtr(models.CountryCode("US")), + BillingAddress: &pkgmodels.Address{ + Country: lo.ToPtr(pkgmodels.CountryCode("US")), }, Currency: lo.ToPtr(currencyx.Code(currency.USD)), UsageAttribution: customerentity.CustomerUsageAttribution{ @@ -590,7 +591,7 @@ func (s *SubscriptionHandlerTestSuite) TestInArrearsProrating() { require.NotEmpty(s.T(), customerEntity.ID) plan, err := s.PlanService.CreatePlan(ctx, plan.CreatePlanInput{ - NamespacedModel: models.NamespacedModel{ + NamespacedModel: pkgmodels.NamespacedModel{ Namespace: namespace, }, Plan: productcatalog.Plan{ @@ -684,13 +685,13 @@ func (s *SubscriptionHandlerTestSuite) TestInArrearsProrating() { clock.SetTime(s.mustParseTime("2024-01-01T10:00:00Z")) cancelAt := s.mustParseTime("2024-01-01T12:00:00Z") - subs, err := s.SubscriptionService.Cancel(ctx, models.NamespacedID{ + subs, err := s.SubscriptionService.Cancel(ctx, pkgmodels.NamespacedID{ Namespace: namespace, ID: subsView.Subscription.ID, }, cancelAt) s.NoError(err) - subsView, err = s.SubscriptionService.GetView(ctx, models.NamespacedID{ + subsView, err = s.SubscriptionService.GetView(ctx, pkgmodels.NamespacedID{ Namespace: namespace, ID: subs.ID, }) diff --git a/openmeter/credit/engine/engine.go b/openmeter/credit/engine/engine.go index 267b94732..720dce575 100644 --- a/openmeter/credit/engine/engine.go +++ b/openmeter/credit/engine/engine.go @@ -9,9 +9,9 @@ import ( "github.com/alpacahq/alpacadecimal" "github.com/samber/lo" + "github.com/openmeterio/openmeter/api/models" "github.com/openmeterio/openmeter/openmeter/credit/balance" "github.com/openmeterio/openmeter/openmeter/credit/grant" - "github.com/openmeterio/openmeter/pkg/models" "github.com/openmeterio/openmeter/pkg/recurrence" ) diff --git a/openmeter/credit/engine/engine_test.go b/openmeter/credit/engine/engine_test.go index a7ab88d23..2345e79ca 100644 --- a/openmeter/credit/engine/engine_test.go +++ b/openmeter/credit/engine/engine_test.go @@ -12,12 +12,12 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "github.com/openmeterio/openmeter/api/models" "github.com/openmeterio/openmeter/openmeter/credit/balance" "github.com/openmeterio/openmeter/openmeter/credit/engine" "github.com/openmeterio/openmeter/openmeter/credit/grant" "github.com/openmeterio/openmeter/openmeter/streaming" "github.com/openmeterio/openmeter/openmeter/streaming/testutils" - "github.com/openmeterio/openmeter/pkg/models" "github.com/openmeterio/openmeter/pkg/recurrence" ) diff --git a/openmeter/credit/grant/owner_connector.go b/openmeter/credit/grant/owner_connector.go index ce7ad14e9..c737a09d0 100644 --- a/openmeter/credit/grant/owner_connector.go +++ b/openmeter/credit/grant/owner_connector.go @@ -5,8 +5,8 @@ import ( "fmt" "time" + "github.com/openmeterio/openmeter/api/models" "github.com/openmeterio/openmeter/openmeter/streaming" - "github.com/openmeterio/openmeter/pkg/models" ) type EndCurrentUsagePeriodParams struct { diff --git a/openmeter/credit/helper.go b/openmeter/credit/helper.go index a0ea4dda8..9e21062ab 100644 --- a/openmeter/credit/helper.go +++ b/openmeter/credit/helper.go @@ -9,10 +9,10 @@ import ( "github.com/alpacahq/alpacadecimal" "github.com/samber/lo" + "github.com/openmeterio/openmeter/api/models" "github.com/openmeterio/openmeter/openmeter/credit/balance" "github.com/openmeterio/openmeter/openmeter/credit/engine" "github.com/openmeterio/openmeter/openmeter/credit/grant" - "github.com/openmeterio/openmeter/pkg/models" "github.com/openmeterio/openmeter/pkg/recurrence" ) diff --git a/openmeter/entitlement/metered/balance.go b/openmeter/entitlement/metered/balance.go index af8c8f807..aad88cc7d 100644 --- a/openmeter/entitlement/metered/balance.go +++ b/openmeter/entitlement/metered/balance.go @@ -6,13 +6,14 @@ import ( "math" "time" + "github.com/openmeterio/openmeter/api/models" "github.com/openmeterio/openmeter/openmeter/credit" "github.com/openmeterio/openmeter/openmeter/credit/engine" "github.com/openmeterio/openmeter/openmeter/credit/grant" "github.com/openmeterio/openmeter/openmeter/entitlement" "github.com/openmeterio/openmeter/pkg/clock" "github.com/openmeterio/openmeter/pkg/convert" - "github.com/openmeterio/openmeter/pkg/models" + pkgmodels "github.com/openmeterio/openmeter/pkg/models" "github.com/openmeterio/openmeter/pkg/slicesx" ) @@ -48,7 +49,7 @@ type BalanceHistoryParams struct { WindowTimeZone time.Location } -func (e *connector) GetEntitlementBalance(ctx context.Context, entitlementID models.NamespacedID, at time.Time) (*EntitlementBalance, error) { +func (e *connector) GetEntitlementBalance(ctx context.Context, entitlementID pkgmodels.NamespacedID, at time.Time) (*EntitlementBalance, error) { nsOwner := grant.NamespacedOwner{ Namespace: entitlementID.Namespace, ID: grant.Owner(entitlementID.ID), @@ -101,7 +102,7 @@ func (e *connector) GetEntitlementBalance(ctx context.Context, entitlementID mod }, nil } -func (e *connector) GetEntitlementBalanceHistory(ctx context.Context, entitlementID models.NamespacedID, params BalanceHistoryParams) ([]EntitlementBalanceHistoryWindow, engine.GrantBurnDownHistory, error) { +func (e *connector) GetEntitlementBalanceHistory(ctx context.Context, entitlementID pkgmodels.NamespacedID, params BalanceHistoryParams) ([]EntitlementBalanceHistoryWindow, engine.GrantBurnDownHistory, error) { // TODO: we should guard against abuse, getting history is expensive // validate that we're working with a metered entitlement @@ -129,7 +130,7 @@ func (e *connector) GetEntitlementBalanceHistory(ctx context.Context, entitlemen // query period cannot be before start of measuring usage if params.From.Before(ent.MeasureUsageFrom) { - return nil, engine.GrantBurnDownHistory{}, &models.GenericUserError{Message: fmt.Sprintf("from cannot be before %s", ent.MeasureUsageFrom.UTC().Format(time.RFC3339))} + return nil, engine.GrantBurnDownHistory{}, &pkgmodels.GenericUserError{Message: fmt.Sprintf("from cannot be before %s", ent.MeasureUsageFrom.UTC().Format(time.RFC3339))} } owner := grant.NamespacedOwner{ diff --git a/openmeter/entitlement/metered/utils_test.go b/openmeter/entitlement/metered/utils_test.go index bccfd589c..5425f1ab8 100644 --- a/openmeter/entitlement/metered/utils_test.go +++ b/openmeter/entitlement/metered/utils_test.go @@ -8,6 +8,7 @@ import ( "github.com/stretchr/testify/assert" + "github.com/openmeterio/openmeter/api/models" "github.com/openmeterio/openmeter/openmeter/credit" credit_postgres_adapter "github.com/openmeterio/openmeter/openmeter/credit/adapter" "github.com/openmeterio/openmeter/openmeter/credit/balance" @@ -25,7 +26,6 @@ import ( "github.com/openmeterio/openmeter/openmeter/watermill/eventbus" "github.com/openmeterio/openmeter/pkg/framework/entutils/entdriver" "github.com/openmeterio/openmeter/pkg/framework/pgdriver" - "github.com/openmeterio/openmeter/pkg/models" ) type dependencies struct { diff --git a/openmeter/entitlement/utils_test.go b/openmeter/entitlement/utils_test.go index 2f5effb36..2e3ff0b57 100644 --- a/openmeter/entitlement/utils_test.go +++ b/openmeter/entitlement/utils_test.go @@ -6,6 +6,7 @@ import ( "testing" "time" + "github.com/openmeterio/openmeter/api/models" "github.com/openmeterio/openmeter/openmeter/ent/db" "github.com/openmeterio/openmeter/openmeter/entitlement" entitlement_postgresadapter "github.com/openmeterio/openmeter/openmeter/entitlement/adapter" @@ -16,7 +17,6 @@ import ( "github.com/openmeterio/openmeter/openmeter/watermill/eventbus" "github.com/openmeterio/openmeter/pkg/framework/entutils/entdriver" "github.com/openmeterio/openmeter/pkg/framework/pgdriver" - "github.com/openmeterio/openmeter/pkg/models" ) // Meant to work for boolean entitlements diff --git a/openmeter/ingest/ingestdriver/http_transport.go b/openmeter/ingest/ingestdriver/http_transport.go index 5e6bb3509..4beeb922f 100644 --- a/openmeter/ingest/ingestdriver/http_transport.go +++ b/openmeter/ingest/ingestdriver/http_transport.go @@ -9,11 +9,11 @@ import ( "github.com/cloudevents/sdk-go/v2/event" "github.com/openmeterio/openmeter/api" + "github.com/openmeterio/openmeter/api/models" "github.com/openmeterio/openmeter/openmeter/ingest" "github.com/openmeterio/openmeter/openmeter/namespace/namespacedriver" "github.com/openmeterio/openmeter/pkg/framework/operation" "github.com/openmeterio/openmeter/pkg/framework/transport/httptransport" - "github.com/openmeterio/openmeter/pkg/models" ) // NewIngestEventsHandler returns a new HTTP handler that wraps the given [operation.Operation]. diff --git a/openmeter/meter/inmemory.go b/openmeter/meter/inmemory.go index 93fd8227f..abdc3cedb 100644 --- a/openmeter/meter/inmemory.go +++ b/openmeter/meter/inmemory.go @@ -5,7 +5,7 @@ import ( "slices" "sync" - "github.com/openmeterio/openmeter/pkg/models" + "github.com/openmeterio/openmeter/api/models" ) // InMemoryRepository is an in-memory meter repository. diff --git a/openmeter/meter/meter.go b/openmeter/meter/meter.go index 8f528ac23..660be653f 100644 --- a/openmeter/meter/meter.go +++ b/openmeter/meter/meter.go @@ -3,7 +3,7 @@ package meter import ( "context" - "github.com/openmeterio/openmeter/pkg/models" + "github.com/openmeterio/openmeter/api/models" ) // TODO: move types here and add aliases to the models package diff --git a/openmeter/meter/parse.go b/openmeter/meter/parse.go index 58c104071..d32d4a05d 100644 --- a/openmeter/meter/parse.go +++ b/openmeter/meter/parse.go @@ -8,7 +8,7 @@ import ( "github.com/cloudevents/sdk-go/v2/event" "github.com/oliveagle/jsonpath" - "github.com/openmeterio/openmeter/pkg/models" + "github.com/openmeterio/openmeter/api/models" ) // ParseEvent validates and parses an event against a meter. diff --git a/openmeter/meter/parse_test.go b/openmeter/meter/parse_test.go index 249e77ccd..57a9ebf28 100644 --- a/openmeter/meter/parse_test.go +++ b/openmeter/meter/parse_test.go @@ -9,8 +9,8 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "github.com/openmeterio/openmeter/api/models" "github.com/openmeterio/openmeter/openmeter/meter" - "github.com/openmeterio/openmeter/pkg/models" ) func TestParseEvent(t *testing.T) { diff --git a/openmeter/productcatalog/adapter/feature_test.go b/openmeter/productcatalog/adapter/feature_test.go index 66bf8759f..2795cb3b8 100644 --- a/openmeter/productcatalog/adapter/feature_test.go +++ b/openmeter/productcatalog/adapter/feature_test.go @@ -9,11 +9,12 @@ import ( "github.com/oklog/ulid/v2" "github.com/stretchr/testify/assert" + "github.com/openmeterio/openmeter/api/models" db_feature "github.com/openmeterio/openmeter/openmeter/ent/db/feature" "github.com/openmeterio/openmeter/openmeter/productcatalog/adapter" "github.com/openmeterio/openmeter/openmeter/productcatalog/feature" "github.com/openmeterio/openmeter/openmeter/testutils" - "github.com/openmeterio/openmeter/pkg/models" + pkgmodels "github.com/openmeterio/openmeter/pkg/models" "github.com/openmeterio/openmeter/pkg/pagination" ) @@ -76,7 +77,7 @@ func TestCreateFeature(t *testing.T) { assert.NoError(t, err) // archives the feature - err = connector.ArchiveFeature(ctx, models.NamespacedID{ + err = connector.ArchiveFeature(ctx, pkgmodels.NamespacedID{ Namespace: featureIn.Namespace, ID: createFeatureOut.ID, }) @@ -84,7 +85,7 @@ func TestCreateFeature(t *testing.T) { // errors on a feature that doesn't exist fakeID := ulid.Make().String() - err = connector.ArchiveFeature(ctx, models.NamespacedID{ + err = connector.ArchiveFeature(ctx, pkgmodels.NamespacedID{ Namespace: featureIn.Namespace, ID: fakeID, }) @@ -142,7 +143,7 @@ func TestCreateFeature(t *testing.T) { assert.Len(t, features.Items, 1) assert.Equal(t, "feature-2", features.Items[0].Name) - err = connector.ArchiveFeature(ctx, models.NamespacedID{ + err = connector.ArchiveFeature(ctx, pkgmodels.NamespacedID{ Namespace: namespace, ID: features.Items[0].ID, }) @@ -188,7 +189,7 @@ func TestCreateFeature(t *testing.T) { assert.Equal(t, "feature-1", foundFeature.Name) - err = connector.ArchiveFeature(ctx, models.NamespacedID{ + err = connector.ArchiveFeature(ctx, pkgmodels.NamespacedID{ Namespace: namespace, ID: foundFeature.ID, }) diff --git a/openmeter/productcatalog/driver/errors.go b/openmeter/productcatalog/driver/errors.go index 723c4d458..0643efbde 100644 --- a/openmeter/productcatalog/driver/errors.go +++ b/openmeter/productcatalog/driver/errors.go @@ -4,10 +4,10 @@ import ( "context" "net/http" + "github.com/openmeterio/openmeter/api/models" "github.com/openmeterio/openmeter/openmeter/productcatalog/feature" "github.com/openmeterio/openmeter/pkg/framework/commonhttp" "github.com/openmeterio/openmeter/pkg/framework/transport/httptransport" - "github.com/openmeterio/openmeter/pkg/models" "github.com/openmeterio/openmeter/pkg/pagination" ) diff --git a/openmeter/productcatalog/feature/connector.go b/openmeter/productcatalog/feature/connector.go index ad6e6b1e2..7f96e1f6b 100644 --- a/openmeter/productcatalog/feature/connector.go +++ b/openmeter/productcatalog/feature/connector.go @@ -6,8 +6,9 @@ import ( "github.com/oklog/ulid/v2" + "github.com/openmeterio/openmeter/api/models" "github.com/openmeterio/openmeter/openmeter/meter" - "github.com/openmeterio/openmeter/pkg/models" + pkgmodels "github.com/openmeterio/openmeter/pkg/models" "github.com/openmeterio/openmeter/pkg/pagination" "github.com/openmeterio/openmeter/pkg/slicesx" "github.com/openmeterio/openmeter/pkg/sortx" @@ -26,7 +27,7 @@ type FeatureConnector interface { // Feature Management CreateFeature(ctx context.Context, feature CreateFeatureInputs) (Feature, error) // Should just use deletedAt, there's no real "archiving" - ArchiveFeature(ctx context.Context, featureID models.NamespacedID) error + ArchiveFeature(ctx context.Context, featureID pkgmodels.NamespacedID) error ListFeatures(ctx context.Context, params ListFeaturesParams) (pagination.PagedResponse[Feature], error) GetFeature(ctx context.Context, namespace string, idOrKey string, includeArchived IncludeArchivedFeature) (*Feature, error) } @@ -120,7 +121,7 @@ func (c *featureConnector) CreateFeature(ctx context.Context, feature CreateFeat } if _, err := ulid.Parse(feature.Key); err == nil { - return Feature{}, &models.GenericUserError{Message: "Feature key cannot be a valid ULID"} + return Feature{}, &pkgmodels.GenericUserError{Message: "Feature key cannot be a valid ULID"} } // check key is not taken @@ -136,7 +137,7 @@ func (c *featureConnector) CreateFeature(ctx context.Context, feature CreateFeat return c.featureRepo.CreateFeature(ctx, feature) } -func (c *featureConnector) ArchiveFeature(ctx context.Context, featureID models.NamespacedID) error { +func (c *featureConnector) ArchiveFeature(ctx context.Context, featureID pkgmodels.NamespacedID) error { _, err := c.GetFeature(ctx, featureID.Namespace, featureID.ID, false) if err != nil { return err diff --git a/openmeter/productcatalog/feature/feature.go b/openmeter/productcatalog/feature/feature.go index 8bc7b4a73..b1663ad33 100644 --- a/openmeter/productcatalog/feature/feature.go +++ b/openmeter/productcatalog/feature/feature.go @@ -4,7 +4,7 @@ import ( "fmt" "time" - "github.com/openmeterio/openmeter/pkg/models" + "github.com/openmeterio/openmeter/api/models" ) type FeatureNotFoundError struct { diff --git a/openmeter/productcatalog/plan/service/service_test.go b/openmeter/productcatalog/plan/service/service_test.go index fa6a1f73f..3e2f3c5dc 100644 --- a/openmeter/productcatalog/plan/service/service_test.go +++ b/openmeter/productcatalog/plan/service/service_test.go @@ -15,6 +15,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" + "github.com/openmeterio/openmeter/api/models" entdb "github.com/openmeterio/openmeter/openmeter/ent/db" "github.com/openmeterio/openmeter/openmeter/meter" "github.com/openmeterio/openmeter/openmeter/productcatalog" @@ -24,7 +25,7 @@ import ( "github.com/openmeterio/openmeter/openmeter/productcatalog/plan/adapter" "github.com/openmeterio/openmeter/openmeter/testutils" "github.com/openmeterio/openmeter/pkg/datex" - "github.com/openmeterio/openmeter/pkg/models" + pkgmodels "github.com/openmeterio/openmeter/pkg/models" ) func TestPlanService(t *testing.T) { @@ -81,7 +82,7 @@ func TestPlanService(t *testing.T) { t.Run("Get", func(t *testing.T) { getPlan, err := env.Plan.GetPlan(ctx, plan.GetPlanInput{ - NamespacedID: models.NamespacedID{ + NamespacedID: pkgmodels.NamespacedID{ Namespace: planInput.Namespace, }, Key: planInput.Key, @@ -104,7 +105,7 @@ func TestPlanService(t *testing.T) { updatedPhases := slices.Clone(draftPlan.Phases) updatedPhases = append(updatedPhases, plan.Phase{ PhaseManagedFields: plan.PhaseManagedFields{ - NamespacedID: models.NamespacedID{ + NamespacedID: pkgmodels.NamespacedID{ Namespace: namespace, }, PlanID: draftPlan.ID, @@ -114,7 +115,7 @@ func TestPlanService(t *testing.T) { Key: "pro-2", Name: "Pro-2", Description: lo.ToPtr("Pro-2 phase"), - Metadata: models.Metadata{"name": "pro-2"}, + Metadata: pkgmodels.Metadata{"name": "pro-2"}, StartAfter: ThreeMonthPeriod, }, RateCards: []productcatalog.RateCard{ @@ -123,7 +124,7 @@ func TestPlanService(t *testing.T) { Key: "api_requests_total", Name: "Pro-2 RateCard 1", Description: lo.ToPtr("Pro-2 RateCard 1"), - Metadata: models.Metadata{"name": "pro-2-ratecard-1"}, + Metadata: pkgmodels.Metadata{"name": "pro-2-ratecard-1"}, Feature: &feature.Feature{ Namespace: namespace, Key: "api_requests_total", @@ -175,7 +176,7 @@ func TestPlanService(t *testing.T) { }) updateInput := plan.UpdatePlanInput{ - NamespacedID: models.NamespacedID{ + NamespacedID: pkgmodels.NamespacedID{ Namespace: planInput.Namespace, ID: draftPlan.ID, }, @@ -212,8 +213,8 @@ func TestPlanService(t *testing.T) { updatedPhases = slices.Clone(draftPlan.Phases) updatedPhases = append(updatedPhases, plan.Phase{ PhaseManagedFields: plan.PhaseManagedFields{ - ManagedModel: models.ManagedModel{}, - NamespacedID: models.NamespacedID{ + ManagedModel: pkgmodels.ManagedModel{}, + NamespacedID: pkgmodels.NamespacedID{ Namespace: namespace, }, PlanID: draftPlan.ID, @@ -223,18 +224,18 @@ func TestPlanService(t *testing.T) { Key: "pro-2", Name: "Pro-2", Description: lo.ToPtr("Pro-2 phase"), - Metadata: models.Metadata{"name": "pro-2"}, + Metadata: pkgmodels.Metadata{"name": "pro-2"}, StartAfter: SixMonthPeriod, }, RateCards: []productcatalog.RateCard{ &plan.UsageBasedRateCard{ RateCardManagedFields: plan.RateCardManagedFields{ - ManagedModel: models.ManagedModel{ + ManagedModel: pkgmodels.ManagedModel{ CreatedAt: time.Time{}, UpdatedAt: time.Time{}, DeletedAt: &time.Time{}, }, - NamespacedID: models.NamespacedID{ + NamespacedID: pkgmodels.NamespacedID{ Namespace: namespace, ID: "", }, @@ -245,7 +246,7 @@ func TestPlanService(t *testing.T) { Key: "pro-2-ratecard-1", Name: "Pro-2 RateCard 1", Description: lo.ToPtr("Pro-2 RateCard 1"), - Metadata: models.Metadata{"name": "pro-ratecard-1"}, + Metadata: pkgmodels.Metadata{"name": "pro-ratecard-1"}, Feature: nil, EntitlementTemplate: nil, TaxConfig: &productcatalog.TaxConfig{ @@ -288,7 +289,7 @@ func TestPlanService(t *testing.T) { }) updateInput = plan.UpdatePlanInput{ - NamespacedID: models.NamespacedID{ + NamespacedID: pkgmodels.NamespacedID{ Namespace: planInput.Namespace, ID: draftPlan.ID, }, @@ -321,7 +322,7 @@ func TestPlanService(t *testing.T) { updatedPhases = slices.Clone(draftPlan.Phases) updatedPhases = append(updatedPhases, plan.Phase{ PhaseManagedFields: plan.PhaseManagedFields{ - NamespacedID: models.NamespacedID{ + NamespacedID: pkgmodels.NamespacedID{ Namespace: namespace, }, PlanID: draftPlan.ID, @@ -331,7 +332,7 @@ func TestPlanService(t *testing.T) { Key: "pro-2", Name: "Pro-2", Description: lo.ToPtr("Pro-2 phase"), - Metadata: models.Metadata{"name": "pro-2"}, + Metadata: pkgmodels.Metadata{"name": "pro-2"}, StartAfter: SixMonthPeriod, }, RateCards: []productcatalog.RateCard{}, @@ -339,7 +340,7 @@ func TestPlanService(t *testing.T) { }) updateInput = plan.UpdatePlanInput{ - NamespacedID: models.NamespacedID{ + NamespacedID: pkgmodels.NamespacedID{ Namespace: planInput.Namespace, ID: draftPlan.ID, }, @@ -371,7 +372,7 @@ func TestPlanService(t *testing.T) { t.Run("Delete", func(t *testing.T) { updateInput = plan.UpdatePlanInput{ - NamespacedID: models.NamespacedID{ + NamespacedID: pkgmodels.NamespacedID{ Namespace: planInput.Namespace, ID: draftPlan.ID, }, @@ -406,7 +407,7 @@ func TestPlanService(t *testing.T) { publishAt := time.Now().Truncate(time.Microsecond) publishInput := plan.PublishPlanInput{ - NamespacedID: models.NamespacedID{ + NamespacedID: pkgmodels.NamespacedID{ Namespace: draftPlan.Namespace, ID: draftPlan.ID, }, @@ -428,7 +429,7 @@ func TestPlanService(t *testing.T) { t.Run("Update", func(t *testing.T) { updateInput := plan.UpdatePlanInput{ - NamespacedID: models.NamespacedID{ + NamespacedID: pkgmodels.NamespacedID{ Namespace: draftPlan.Namespace, ID: draftPlan.ID, }, @@ -443,7 +444,7 @@ func TestPlanService(t *testing.T) { var nextPlan *plan.Plan t.Run("NewVersion", func(t *testing.T) { nextInput := plan.NextPlanInput{ - NamespacedID: models.NamespacedID{ + NamespacedID: pkgmodels.NamespacedID{ Namespace: publishedPlan.Namespace, }, Key: publishedPlan.Key, @@ -461,7 +462,7 @@ func TestPlanService(t *testing.T) { t.Run("Phases", func(t *testing.T) { t.Run("Remove", func(t *testing.T) { updateInput := plan.UpdatePlanInput{ - NamespacedID: models.NamespacedID{ + NamespacedID: pkgmodels.NamespacedID{ Namespace: nextPlan.Namespace, ID: nextPlan.ID, }, @@ -478,7 +479,7 @@ func TestPlanService(t *testing.T) { t.Run("ReAdd", func(t *testing.T) { reAddPhases := slices.Clone(draftPlan.Phases) updateInput := plan.UpdatePlanInput{ - NamespacedID: models.NamespacedID{ + NamespacedID: pkgmodels.NamespacedID{ Namespace: nextPlan.Namespace, ID: nextPlan.ID, }, @@ -512,7 +513,7 @@ func TestPlanService(t *testing.T) { publishAt := time.Now().Truncate(time.Microsecond) publishInput := plan.PublishPlanInput{ - NamespacedID: models.NamespacedID{ + NamespacedID: pkgmodels.NamespacedID{ Namespace: nextPlan.Namespace, ID: nextPlan.ID, }, @@ -533,7 +534,7 @@ func TestPlanService(t *testing.T) { "Plan Status mismatch: expected=%s, actual=%s", productcatalog.ActiveStatus, publishedNextPlan.Status()) prevPlan, err := env.Plan.GetPlan(ctx, plan.GetPlanInput{ - NamespacedID: models.NamespacedID{ + NamespacedID: pkgmodels.NamespacedID{ Namespace: publishedPlan.Namespace, ID: publishedPlan.ID, }, @@ -548,7 +549,7 @@ func TestPlanService(t *testing.T) { archiveAt := time.Now().Truncate(time.Microsecond) archiveInput := plan.ArchivePlanInput{ - NamespacedID: models.NamespacedID{ + NamespacedID: pkgmodels.NamespacedID{ Namespace: nextPlan.Namespace, ID: nextPlan.ID, }, @@ -569,7 +570,7 @@ func TestPlanService(t *testing.T) { t.Run("Delete", func(t *testing.T) { deleteInput := plan.DeletePlanInput{ - NamespacedID: models.NamespacedID{ + NamespacedID: pkgmodels.NamespacedID{ Namespace: nextPlan.Namespace, ID: nextPlan.ID, }, @@ -579,7 +580,7 @@ func TestPlanService(t *testing.T) { require.NoErrorf(t, err, "deleting Plan must not fail") deletedPlan, err := env.Plan.GetPlan(ctx, plan.GetPlanInput{ - NamespacedID: models.NamespacedID{ + NamespacedID: pkgmodels.NamespacedID{ Namespace: nextPlan.Namespace, ID: nextPlan.ID, }, @@ -608,7 +609,7 @@ func TestPlanService(t *testing.T) { t.Run("Get", func(t *testing.T) { getPhase, err := env.Plan.GetPhase(ctx, plan.GetPhaseInput{ - NamespacedID: models.NamespacedID{ + NamespacedID: pkgmodels.NamespacedID{ Namespace: draftPlan.Namespace, }, Key: draftPlan.Phases[0].Key, @@ -625,7 +626,7 @@ func TestPlanService(t *testing.T) { t.Run("Create", func(t *testing.T) { newPhaseInput := plan.CreatePhaseInput{ - NamespacedModel: models.NamespacedModel{ + NamespacedModel: pkgmodels.NamespacedModel{ Namespace: draftPlan.Namespace, }, PlanID: draftPlan.ID, @@ -640,12 +641,12 @@ func TestPlanService(t *testing.T) { RateCards: []productcatalog.RateCard{ &plan.UsageBasedRateCard{ RateCardManagedFields: plan.RateCardManagedFields{ - ManagedModel: models.ManagedModel{ + ManagedModel: pkgmodels.ManagedModel{ CreatedAt: time.Time{}, UpdatedAt: time.Time{}, DeletedAt: &time.Time{}, }, - NamespacedID: models.NamespacedID{ + NamespacedID: pkgmodels.NamespacedID{ Namespace: namespace, ID: "", }, @@ -717,24 +718,24 @@ func TestPlanService(t *testing.T) { t.Run("Update", func(t *testing.T) { updateInput := plan.UpdatePhaseInput{ - NamespacedID: models.NamespacedID{ + NamespacedID: pkgmodels.NamespacedID{ Namespace: draftPlan.Namespace, }, Key: newPhase.Key, Name: lo.ToPtr("Pro-3"), Description: lo.ToPtr("Pro-3"), - Metadata: &models.Metadata{"name": "pro-3"}, + Metadata: &pkgmodels.Metadata{"name": "pro-3"}, StartAfter: lo.ToPtr(SixMonthPeriod), PlanID: draftPlan.ID, RateCards: &productcatalog.RateCards{ &plan.UsageBasedRateCard{ RateCardManagedFields: plan.RateCardManagedFields{ - ManagedModel: models.ManagedModel{ + ManagedModel: pkgmodels.ManagedModel{ CreatedAt: time.Time{}, UpdatedAt: time.Time{}, DeletedAt: &time.Time{}, }, - NamespacedID: models.NamespacedID{ + NamespacedID: pkgmodels.NamespacedID{ Namespace: namespace, ID: "", }, @@ -745,7 +746,7 @@ func TestPlanService(t *testing.T) { Key: "api_requests_total", Name: "Pro-2 RateCard 1", Description: lo.ToPtr("Pro-2 RateCard 1"), - Metadata: models.Metadata{"name": "pro-2-ratecard-1"}, + Metadata: pkgmodels.Metadata{"name": "pro-2-ratecard-1"}, Feature: &feature.Feature{ Namespace: namespace, Key: "api_requests_total", @@ -806,24 +807,24 @@ func TestPlanService(t *testing.T) { t.Run("ReplaceRateCard", func(t *testing.T) { updateInput := plan.UpdatePhaseInput{ - NamespacedID: models.NamespacedID{ + NamespacedID: pkgmodels.NamespacedID{ Namespace: draftPlan.Namespace, }, Key: newPhase.Key, Name: lo.ToPtr("Pro-3"), Description: lo.ToPtr("Pro-3"), - Metadata: &models.Metadata{"name": "pro-3"}, + Metadata: &pkgmodels.Metadata{"name": "pro-3"}, StartAfter: lo.ToPtr(SixMonthPeriod), PlanID: draftPlan.ID, RateCards: &productcatalog.RateCards{ &plan.FlatFeeRateCard{ RateCardManagedFields: plan.RateCardManagedFields{ - ManagedModel: models.ManagedModel{ + ManagedModel: pkgmodels.ManagedModel{ CreatedAt: time.Time{}, UpdatedAt: time.Time{}, DeletedAt: &time.Time{}, }, - NamespacedID: models.NamespacedID{ + NamespacedID: pkgmodels.NamespacedID{ Namespace: namespace, ID: "", }, @@ -834,7 +835,7 @@ func TestPlanService(t *testing.T) { Key: "api_requests_total", Name: "Pro-2 RateCard 1", Description: lo.ToPtr("Pro-2 RateCard 1"), - Metadata: models.Metadata{"name": "pro-2-ratecard-1"}, + Metadata: pkgmodels.Metadata{"name": "pro-2-ratecard-1"}, Feature: &feature.Feature{ Namespace: namespace, Key: "api_requests_total", @@ -874,7 +875,7 @@ func TestPlanService(t *testing.T) { t.Run("Delete", func(t *testing.T) { err = env.Plan.DeletePhase(ctx, plan.DeletePhaseInput{ - NamespacedID: models.NamespacedID{ + NamespacedID: pkgmodels.NamespacedID{ Namespace: draftPlan.Namespace, }, Key: newPhase.Key, @@ -898,7 +899,7 @@ func NewProPlan(t *testing.T, namespace string) plan.CreatePlanInput { t.Helper() return plan.CreatePlanInput{ - NamespacedModel: models.NamespacedModel{ + NamespacedModel: pkgmodels.NamespacedModel{ Namespace: namespace, }, Plan: productcatalog.Plan{ @@ -906,7 +907,7 @@ func NewProPlan(t *testing.T, namespace string) plan.CreatePlanInput { Key: "pro", Name: "Pro", Description: lo.ToPtr("Pro plan v1"), - Metadata: models.Metadata{"name": "pro"}, + Metadata: pkgmodels.Metadata{"name": "pro"}, Currency: currency.USD, }, Phases: []productcatalog.Phase{ @@ -921,12 +922,12 @@ func NewProPlan(t *testing.T, namespace string) plan.CreatePlanInput { RateCards: []productcatalog.RateCard{ &plan.FlatFeeRateCard{ RateCardManagedFields: plan.RateCardManagedFields{ - ManagedModel: models.ManagedModel{ + ManagedModel: pkgmodels.ManagedModel{ CreatedAt: time.Time{}, UpdatedAt: time.Time{}, DeletedAt: &time.Time{}, }, - NamespacedID: models.NamespacedID{ + NamespacedID: pkgmodels.NamespacedID{ Namespace: "", ID: "", }, @@ -937,7 +938,7 @@ func NewProPlan(t *testing.T, namespace string) plan.CreatePlanInput { Key: "trial-ratecard-1", Name: "Trial RateCard 1", Description: lo.ToPtr("Trial RateCard 1"), - Metadata: models.Metadata{"name": "trial-ratecard-1"}, + Metadata: pkgmodels.Metadata{"name": "trial-ratecard-1"}, Feature: nil, EntitlementTemplate: nil, TaxConfig: &productcatalog.TaxConfig{ @@ -961,18 +962,18 @@ func NewProPlan(t *testing.T, namespace string) plan.CreatePlanInput { Key: "pro", Name: "Pro", Description: lo.ToPtr("Pro phase"), - Metadata: models.Metadata{"name": "pro"}, + Metadata: pkgmodels.Metadata{"name": "pro"}, StartAfter: TwoMonthPeriod, }, RateCards: []productcatalog.RateCard{ &plan.UsageBasedRateCard{ RateCardManagedFields: plan.RateCardManagedFields{ - ManagedModel: models.ManagedModel{ + ManagedModel: pkgmodels.ManagedModel{ CreatedAt: time.Time{}, UpdatedAt: time.Time{}, DeletedAt: &time.Time{}, }, - NamespacedID: models.NamespacedID{ + NamespacedID: pkgmodels.NamespacedID{ Namespace: namespace, ID: "", }, @@ -983,7 +984,7 @@ func NewProPlan(t *testing.T, namespace string) plan.CreatePlanInput { Key: "pro-ratecard-1", Name: "Pro RateCard 1", Description: lo.ToPtr("Pro RateCard 1"), - Metadata: models.Metadata{"name": "pro-ratecard-1"}, + Metadata: pkgmodels.Metadata{"name": "pro-ratecard-1"}, Feature: nil, EntitlementTemplate: nil, TaxConfig: &productcatalog.TaxConfig{ diff --git a/openmeter/server/authenticator/authenticator.go b/openmeter/server/authenticator/authenticator.go index 808760a0e..19c591e92 100644 --- a/openmeter/server/authenticator/authenticator.go +++ b/openmeter/server/authenticator/authenticator.go @@ -13,8 +13,8 @@ import ( "github.com/go-chi/chi/v5" "github.com/openmeterio/openmeter/api" + "github.com/openmeterio/openmeter/api/models" "github.com/openmeterio/openmeter/pkg/errorsx" - "github.com/openmeterio/openmeter/pkg/models" ) type AuthenticatorContextKey string diff --git a/openmeter/server/router/appstripe.go b/openmeter/server/router/appstripe.go index 8177e92ce..b863db9fa 100644 --- a/openmeter/server/router/appstripe.go +++ b/openmeter/server/router/appstripe.go @@ -5,8 +5,8 @@ import ( "io" "net/http" + "github.com/openmeterio/openmeter/api/models" appstripehttpdriver "github.com/openmeterio/openmeter/openmeter/app/stripe/httpdriver" - "github.com/openmeterio/openmeter/pkg/models" ) // Handle app stripe webhook diff --git a/openmeter/server/router/event.go b/openmeter/server/router/event.go index c36eb79bd..3aa2b5d1a 100644 --- a/openmeter/server/router/event.go +++ b/openmeter/server/router/event.go @@ -8,11 +8,11 @@ import ( "github.com/go-chi/render" "github.com/openmeterio/openmeter/api" + "github.com/openmeterio/openmeter/api/models" "github.com/openmeterio/openmeter/openmeter/streaming" "github.com/openmeterio/openmeter/pkg/contextx" "github.com/openmeterio/openmeter/pkg/defaultx" "github.com/openmeterio/openmeter/pkg/errorsx" - "github.com/openmeterio/openmeter/pkg/models" ) // 32 days diff --git a/openmeter/server/router/meter.go b/openmeter/server/router/meter.go index 682c0a38f..291d3ff46 100644 --- a/openmeter/server/router/meter.go +++ b/openmeter/server/router/meter.go @@ -7,8 +7,8 @@ import ( "github.com/go-chi/render" + "github.com/openmeterio/openmeter/api/models" "github.com/openmeterio/openmeter/pkg/contextx" - "github.com/openmeterio/openmeter/pkg/models" "github.com/openmeterio/openmeter/pkg/slicesx" ) diff --git a/openmeter/server/router/meter_query.go b/openmeter/server/router/meter_query.go index 53d6963f3..2e4270852 100644 --- a/openmeter/server/router/meter_query.go +++ b/openmeter/server/router/meter_query.go @@ -13,9 +13,9 @@ import ( "github.com/go-chi/render" "github.com/openmeterio/openmeter/api" + "github.com/openmeterio/openmeter/api/models" "github.com/openmeterio/openmeter/openmeter/streaming" "github.com/openmeterio/openmeter/pkg/contextx" - "github.com/openmeterio/openmeter/pkg/models" ) // QueryMeter queries the values stored for a meter. diff --git a/openmeter/server/router/meter_subject.go b/openmeter/server/router/meter_subject.go index 6738e7ed2..6f9cc6fdc 100644 --- a/openmeter/server/router/meter_subject.go +++ b/openmeter/server/router/meter_subject.go @@ -6,9 +6,9 @@ import ( "github.com/go-chi/render" + "github.com/openmeterio/openmeter/api/models" "github.com/openmeterio/openmeter/openmeter/streaming" "github.com/openmeterio/openmeter/pkg/contextx" - "github.com/openmeterio/openmeter/pkg/models" ) // ListMeterSubjects lists the subjects of a meter. diff --git a/openmeter/server/router/portal.go b/openmeter/server/router/portal.go index 0e994948f..076292436 100644 --- a/openmeter/server/router/portal.go +++ b/openmeter/server/router/portal.go @@ -7,9 +7,9 @@ import ( "github.com/go-chi/render" "github.com/openmeterio/openmeter/api" + "github.com/openmeterio/openmeter/api/models" "github.com/openmeterio/openmeter/openmeter/server/authenticator" "github.com/openmeterio/openmeter/pkg/contextx" - "github.com/openmeterio/openmeter/pkg/models" ) // CreatePortalToken creates a new portal token. diff --git a/openmeter/server/server.go b/openmeter/server/server.go index dade68e30..fbf58d8e4 100644 --- a/openmeter/server/server.go +++ b/openmeter/server/server.go @@ -15,10 +15,10 @@ import ( oapimiddleware "github.com/oapi-codegen/nethttp-middleware" "github.com/openmeterio/openmeter/api" + "github.com/openmeterio/openmeter/api/models" "github.com/openmeterio/openmeter/openmeter/server/authenticator" "github.com/openmeterio/openmeter/openmeter/server/router" "github.com/openmeterio/openmeter/pkg/contextx" - "github.com/openmeterio/openmeter/pkg/models" "github.com/openmeterio/openmeter/pkg/server" ) diff --git a/openmeter/server/server_test.go b/openmeter/server/server_test.go index 6024e2a36..480c92f9c 100644 --- a/openmeter/server/server_test.go +++ b/openmeter/server/server_test.go @@ -17,6 +17,7 @@ import ( "github.com/stretchr/testify/assert" "github.com/openmeterio/openmeter/api" + "github.com/openmeterio/openmeter/api/models" "github.com/openmeterio/openmeter/openmeter/app" appentity "github.com/openmeterio/openmeter/openmeter/app/entity" appentitybase "github.com/openmeterio/openmeter/openmeter/app/entity/base" @@ -41,7 +42,7 @@ import ( "github.com/openmeterio/openmeter/openmeter/server/router" "github.com/openmeterio/openmeter/openmeter/streaming" "github.com/openmeterio/openmeter/pkg/errorsx" - "github.com/openmeterio/openmeter/pkg/models" + pkgmodels "github.com/openmeterio/openmeter/pkg/models" "github.com/openmeterio/openmeter/pkg/pagination" ) @@ -504,7 +505,7 @@ func (n NoopFeatureConnector) DeleteFeature(ctx context.Context, namespace strin return nil } -func (n NoopFeatureConnector) ArchiveFeature(ctx context.Context, featureID models.NamespacedID) error { +func (n NoopFeatureConnector) ArchiveFeature(ctx context.Context, featureID pkgmodels.NamespacedID) error { return nil } @@ -559,20 +560,20 @@ var _ meteredentitlement.Connector = (*NoopEntitlementBalanceConnector)(nil) type NoopEntitlementBalanceConnector struct{} -func (n NoopEntitlementBalanceConnector) GetEntitlementBalance(ctx context.Context, entitlementID models.NamespacedID, at time.Time) (*meteredentitlement.EntitlementBalance, error) { +func (n NoopEntitlementBalanceConnector) GetEntitlementBalance(ctx context.Context, entitlementID pkgmodels.NamespacedID, at time.Time) (*meteredentitlement.EntitlementBalance, error) { return nil, nil } -func (n NoopEntitlementBalanceConnector) GetEntitlementBalanceHistory(ctx context.Context, entitlementID models.NamespacedID, params meteredentitlement.BalanceHistoryParams) ([]meteredentitlement.EntitlementBalanceHistoryWindow, engine.GrantBurnDownHistory, error) { +func (n NoopEntitlementBalanceConnector) GetEntitlementBalanceHistory(ctx context.Context, entitlementID pkgmodels.NamespacedID, params meteredentitlement.BalanceHistoryParams) ([]meteredentitlement.EntitlementBalanceHistoryWindow, engine.GrantBurnDownHistory, error) { return []meteredentitlement.EntitlementBalanceHistoryWindow{}, engine.GrantBurnDownHistory{}, nil } -func (n NoopEntitlementBalanceConnector) ResetEntitlementUsage(ctx context.Context, entitlementID models.NamespacedID, params meteredentitlement.ResetEntitlementUsageParams) (balanceAfterReset *meteredentitlement.EntitlementBalance, err error) { +func (n NoopEntitlementBalanceConnector) ResetEntitlementUsage(ctx context.Context, entitlementID pkgmodels.NamespacedID, params meteredentitlement.ResetEntitlementUsageParams) (balanceAfterReset *meteredentitlement.EntitlementBalance, err error) { return nil, nil } -func (n NoopEntitlementBalanceConnector) ResetEntitlementsWithExpiredUsagePeriod(ctx context.Context, namespace string, highwatermark time.Time) ([]models.NamespacedID, error) { - return []models.NamespacedID{}, nil +func (n NoopEntitlementBalanceConnector) ResetEntitlementsWithExpiredUsagePeriod(ctx context.Context, namespace string, highwatermark time.Time) ([]pkgmodels.NamespacedID, error) { + return []pkgmodels.NamespacedID{}, nil } func (n NoopEntitlementBalanceConnector) CreateGrant(ctx context.Context, namespace string, subjectKey string, entitlementIdOrFeatureKey string, inputGrant meteredentitlement.CreateEntitlementGrantInputs) (meteredentitlement.EntitlementGrant, error) { @@ -605,7 +606,7 @@ func (n NoopGrantConnector) CreateGrant(ctx context.Context, owner grant.Namespa return &grant.Grant{}, nil } -func (n NoopGrantConnector) VoidGrant(ctx context.Context, grantID models.NamespacedID) error { +func (n NoopGrantConnector) VoidGrant(ctx context.Context, grantID pkgmodels.NamespacedID) error { return nil } diff --git a/openmeter/sink/flushhandler/ingestnotification/handler.go b/openmeter/sink/flushhandler/ingestnotification/handler.go index 6c396c1a6..de4e9509d 100644 --- a/openmeter/sink/flushhandler/ingestnotification/handler.go +++ b/openmeter/sink/flushhandler/ingestnotification/handler.go @@ -8,12 +8,12 @@ import ( "github.com/samber/lo" "go.opentelemetry.io/otel/metric" + "github.com/openmeterio/openmeter/api/models" eventmodels "github.com/openmeterio/openmeter/openmeter/event/models" "github.com/openmeterio/openmeter/openmeter/sink/flushhandler" ingestevents "github.com/openmeterio/openmeter/openmeter/sink/flushhandler/ingestnotification/events" sinkmodels "github.com/openmeterio/openmeter/openmeter/sink/models" "github.com/openmeterio/openmeter/openmeter/watermill/eventbus" - "github.com/openmeterio/openmeter/pkg/models" "github.com/openmeterio/openmeter/pkg/slicesx" ) diff --git a/openmeter/sink/models/models.go b/openmeter/sink/models/models.go index 3db49cd3b..d3fefb4b1 100644 --- a/openmeter/sink/models/models.go +++ b/openmeter/sink/models/models.go @@ -5,8 +5,8 @@ import ( "github.com/confluentinc/confluent-kafka-go/v2/kafka" + "github.com/openmeterio/openmeter/api/models" "github.com/openmeterio/openmeter/openmeter/ingest/kafkaingest/serializer" - "github.com/openmeterio/openmeter/pkg/models" ) type SinkMessage struct { diff --git a/openmeter/sink/namespaces.go b/openmeter/sink/namespaces.go index ec0e5b3dc..2f7ee960f 100644 --- a/openmeter/sink/namespaces.go +++ b/openmeter/sink/namespaces.go @@ -5,10 +5,10 @@ import ( "errors" "fmt" + "github.com/openmeterio/openmeter/api/models" "github.com/openmeterio/openmeter/openmeter/ingest/kafkaingest/serializer" ommeter "github.com/openmeterio/openmeter/openmeter/meter" sinkmodels "github.com/openmeterio/openmeter/openmeter/sink/models" - "github.com/openmeterio/openmeter/pkg/models" ) type MeterStore struct { diff --git a/openmeter/sink/namespaces_test.go b/openmeter/sink/namespaces_test.go index 879bc15d6..db42e86a9 100644 --- a/openmeter/sink/namespaces_test.go +++ b/openmeter/sink/namespaces_test.go @@ -7,10 +7,10 @@ import ( "github.com/stretchr/testify/assert" + "github.com/openmeterio/openmeter/api/models" "github.com/openmeterio/openmeter/openmeter/ingest/kafkaingest/serializer" "github.com/openmeterio/openmeter/openmeter/sink" sinkmodels "github.com/openmeterio/openmeter/openmeter/sink/models" - "github.com/openmeterio/openmeter/pkg/models" ) func TestNamespaceStore(t *testing.T) { diff --git a/openmeter/streaming/clickhouse/materialized_view/connector.go b/openmeter/streaming/clickhouse/materialized_view/connector.go index 9bf3be3d7..69e24b4de 100644 --- a/openmeter/streaming/clickhouse/materialized_view/connector.go +++ b/openmeter/streaming/clickhouse/materialized_view/connector.go @@ -10,10 +10,10 @@ import ( "github.com/ClickHouse/clickhouse-go/v2" "github.com/openmeterio/openmeter/api" + "github.com/openmeterio/openmeter/api/models" "github.com/openmeterio/openmeter/openmeter/meter" "github.com/openmeterio/openmeter/openmeter/streaming" raw_events "github.com/openmeterio/openmeter/openmeter/streaming/clickhouse/raw_events" - "github.com/openmeterio/openmeter/pkg/models" ) var _ streaming.Connector = (*Connector)(nil) diff --git a/openmeter/streaming/clickhouse/materialized_view/meter_query.go b/openmeter/streaming/clickhouse/materialized_view/meter_query.go index 1618ed73a..d836e2660 100644 --- a/openmeter/streaming/clickhouse/materialized_view/meter_query.go +++ b/openmeter/streaming/clickhouse/materialized_view/meter_query.go @@ -9,7 +9,7 @@ import ( "github.com/huandu/go-sqlbuilder" - "github.com/openmeterio/openmeter/pkg/models" + "github.com/openmeterio/openmeter/api/models" "github.com/openmeterio/openmeter/pkg/slicesx" ) diff --git a/openmeter/streaming/clickhouse/materialized_view/meter_query_test.go b/openmeter/streaming/clickhouse/materialized_view/meter_query_test.go index 573fb6f37..1f0a49a6c 100644 --- a/openmeter/streaming/clickhouse/materialized_view/meter_query_test.go +++ b/openmeter/streaming/clickhouse/materialized_view/meter_query_test.go @@ -6,7 +6,7 @@ import ( "github.com/stretchr/testify/assert" - "github.com/openmeterio/openmeter/pkg/models" + "github.com/openmeterio/openmeter/api/models" ) func TestCreateMeterView(t *testing.T) { diff --git a/openmeter/streaming/clickhouse/raw_events/connector.go b/openmeter/streaming/clickhouse/raw_events/connector.go index 3611fdaae..ad3515ae7 100644 --- a/openmeter/streaming/clickhouse/raw_events/connector.go +++ b/openmeter/streaming/clickhouse/raw_events/connector.go @@ -14,8 +14,9 @@ import ( "github.com/shopspring/decimal" "github.com/openmeterio/openmeter/api" + "github.com/openmeterio/openmeter/api/models" "github.com/openmeterio/openmeter/openmeter/streaming" - "github.com/openmeterio/openmeter/pkg/models" + pkgmodels "github.com/openmeterio/openmeter/pkg/models" ) var _ streaming.Connector = (*Connector)(nil) @@ -79,7 +80,7 @@ func (c *Connector) ListEvents(ctx context.Context, namespace string, params str events, err := c.queryEventsTable(ctx, namespace, params) if err != nil { - if _, ok := err.(*models.NamespaceNotFoundError); ok { + if _, ok := err.(*pkgmodels.NamespaceNotFoundError); ok { return nil, err } @@ -166,7 +167,7 @@ func (c *Connector) CountEvents(ctx context.Context, namespace string, params st rows, err := c.queryCountEvents(ctx, namespace, params) if err != nil { - if _, ok := err.(*models.NamespaceNotFoundError); ok { + if _, ok := err.(*pkgmodels.NamespaceNotFoundError); ok { return nil, err } @@ -240,7 +241,7 @@ func (c *Connector) queryEventsTable(ctx context.Context, namespace string, para rows, err := c.config.ClickHouse.Query(ctx, sql, args...) if err != nil { if strings.Contains(err.Error(), "code: 60") { - return nil, &models.NamespaceNotFoundError{Namespace: namespace} + return nil, &pkgmodels.NamespaceNotFoundError{Namespace: namespace} } return nil, fmt.Errorf("query events table query: %w", err) @@ -316,7 +317,7 @@ func (c *Connector) queryCountEvents(ctx context.Context, namespace string, para rows, err := c.config.ClickHouse.Query(ctx, sql, args...) if err != nil { if strings.Contains(err.Error(), "code: 60") { - return nil, &models.NamespaceNotFoundError{Namespace: namespace} + return nil, &pkgmodels.NamespaceNotFoundError{Namespace: namespace} } return nil, fmt.Errorf("query events count query: %w", err) diff --git a/openmeter/streaming/clickhouse/raw_events/meter_query.go b/openmeter/streaming/clickhouse/raw_events/meter_query.go index 345cda902..f75d07342 100644 --- a/openmeter/streaming/clickhouse/raw_events/meter_query.go +++ b/openmeter/streaming/clickhouse/raw_events/meter_query.go @@ -8,7 +8,7 @@ import ( "github.com/huandu/go-sqlbuilder" - "github.com/openmeterio/openmeter/pkg/models" + "github.com/openmeterio/openmeter/api/models" "github.com/openmeterio/openmeter/pkg/slicesx" ) diff --git a/openmeter/streaming/clickhouse/raw_events/meter_query_test.go b/openmeter/streaming/clickhouse/raw_events/meter_query_test.go index 3fedc7db5..4ee31ec32 100644 --- a/openmeter/streaming/clickhouse/raw_events/meter_query_test.go +++ b/openmeter/streaming/clickhouse/raw_events/meter_query_test.go @@ -6,7 +6,7 @@ import ( "github.com/stretchr/testify/assert" - "github.com/openmeterio/openmeter/pkg/models" + "github.com/openmeterio/openmeter/api/models" ) func TestQueryMeter(t *testing.T) { diff --git a/openmeter/streaming/connector.go b/openmeter/streaming/connector.go index 29cffdc71..fd7259232 100644 --- a/openmeter/streaming/connector.go +++ b/openmeter/streaming/connector.go @@ -5,8 +5,8 @@ import ( "time" "github.com/openmeterio/openmeter/api" + "github.com/openmeterio/openmeter/api/models" "github.com/openmeterio/openmeter/openmeter/namespace" - "github.com/openmeterio/openmeter/pkg/models" ) type ListEventsParams struct { diff --git a/openmeter/streaming/query_params.go b/openmeter/streaming/query_params.go index 4fdd3e023..646eb4eb0 100644 --- a/openmeter/streaming/query_params.go +++ b/openmeter/streaming/query_params.go @@ -5,7 +5,7 @@ import ( "fmt" "time" - "github.com/openmeterio/openmeter/pkg/models" + "github.com/openmeterio/openmeter/api/models" ) type QueryParams struct { diff --git a/openmeter/streaming/query_params_test.go b/openmeter/streaming/query_params_test.go index eac4866bf..c99bf19fa 100644 --- a/openmeter/streaming/query_params_test.go +++ b/openmeter/streaming/query_params_test.go @@ -7,7 +7,7 @@ import ( "github.com/stretchr/testify/assert" - "github.com/openmeterio/openmeter/pkg/models" + "github.com/openmeterio/openmeter/api/models" ) func TestQueryParamsValidate(t *testing.T) { diff --git a/openmeter/streaming/testutils/streaming.go b/openmeter/streaming/testutils/streaming.go index b3f65aa5a..1c9f82409 100644 --- a/openmeter/streaming/testutils/streaming.go +++ b/openmeter/streaming/testutils/streaming.go @@ -6,9 +6,9 @@ import ( "time" "github.com/openmeterio/openmeter/api" + "github.com/openmeterio/openmeter/api/models" "github.com/openmeterio/openmeter/openmeter/streaming" "github.com/openmeterio/openmeter/pkg/defaultx" - "github.com/openmeterio/openmeter/pkg/models" ) var _ streaming.Connector = &MockStreamingConnector{} diff --git a/openmeter/streaming/testutils/streaming_test.go b/openmeter/streaming/testutils/streaming_test.go index 669eccb54..7fc7a48f5 100644 --- a/openmeter/streaming/testutils/streaming_test.go +++ b/openmeter/streaming/testutils/streaming_test.go @@ -8,9 +8,9 @@ import ( "github.com/oklog/ulid/v2" "github.com/stretchr/testify/assert" + "github.com/openmeterio/openmeter/api/models" "github.com/openmeterio/openmeter/openmeter/streaming" "github.com/openmeterio/openmeter/pkg/convert" - "github.com/openmeterio/openmeter/pkg/models" ) func TestMockStreamingConnector(t *testing.T) { diff --git a/openmeter/subscription/testutils/service.go b/openmeter/subscription/testutils/service.go index 9a8979a94..892041520 100644 --- a/openmeter/subscription/testutils/service.go +++ b/openmeter/subscription/testutils/service.go @@ -5,6 +5,7 @@ import ( "github.com/stretchr/testify/require" + "github.com/openmeterio/openmeter/api/models" "github.com/openmeterio/openmeter/openmeter/customer" "github.com/openmeterio/openmeter/openmeter/meter" "github.com/openmeterio/openmeter/openmeter/productcatalog/plan" @@ -17,7 +18,6 @@ import ( "github.com/openmeterio/openmeter/openmeter/subscription/service" "github.com/openmeterio/openmeter/openmeter/testutils" "github.com/openmeterio/openmeter/openmeter/watermill/eventbus" - "github.com/openmeterio/openmeter/pkg/models" ) type ExposedServiceDeps struct { diff --git a/pkg/framework/commonhttp/errors.go b/pkg/framework/commonhttp/errors.go index 9c65a1f60..1f47255fe 100644 --- a/pkg/framework/commonhttp/errors.go +++ b/pkg/framework/commonhttp/errors.go @@ -5,8 +5,8 @@ import ( "errors" "net/http" + "github.com/openmeterio/openmeter/api/models" "github.com/openmeterio/openmeter/pkg/errorsx" - "github.com/openmeterio/openmeter/pkg/models" ) type ErrorWithHTTPStatusCode struct { diff --git a/pkg/framework/transport/httptransport/handler.go b/pkg/framework/transport/httptransport/handler.go index 6c0ead940..c7bd8cc3d 100644 --- a/pkg/framework/transport/httptransport/handler.go +++ b/pkg/framework/transport/httptransport/handler.go @@ -7,9 +7,9 @@ import ( semconv "go.opentelemetry.io/otel/semconv/v1.27.0" + "github.com/openmeterio/openmeter/api/models" "github.com/openmeterio/openmeter/pkg/contextx" "github.com/openmeterio/openmeter/pkg/framework/operation" - "github.com/openmeterio/openmeter/pkg/models" ) type Handler[Request any, Response any] interface { diff --git a/pkg/models/error.go b/pkg/models/error.go index 4af6dbdb2..583ad1e09 100644 --- a/pkg/models/error.go +++ b/pkg/models/error.go @@ -2,14 +2,6 @@ package models import "fmt" -type MeterNotFoundError struct { - MeterSlug string -} - -func (e *MeterNotFoundError) Error() string { - return fmt.Sprintf("meter not found: %s", e.MeterSlug) -} - type NamespaceNotFoundError struct { Namespace string } diff --git a/quickstart/quickstart_test.go b/quickstart/quickstart_test.go index 4cd0b2cd9..79d8f2a29 100644 --- a/quickstart/quickstart_test.go +++ b/quickstart/quickstart_test.go @@ -12,7 +12,7 @@ import ( "github.com/stretchr/testify/require" api "github.com/openmeterio/openmeter/api/client/go" - "github.com/openmeterio/openmeter/pkg/models" + "github.com/openmeterio/openmeter/api/models" ) func initClient(t *testing.T) *api.ClientWithResponses { diff --git a/test/app/stripe/invoice_test.go b/test/app/stripe/invoice_test.go index 79fad25e8..23aa5a036 100644 --- a/test/app/stripe/invoice_test.go +++ b/test/app/stripe/invoice_test.go @@ -11,12 +11,13 @@ import ( "github.com/samber/lo" "github.com/stretchr/testify/suite" + "github.com/openmeterio/openmeter/api/models" "github.com/openmeterio/openmeter/openmeter/billing" customerentity "github.com/openmeterio/openmeter/openmeter/customer/entity" "github.com/openmeterio/openmeter/openmeter/productcatalog" "github.com/openmeterio/openmeter/openmeter/productcatalog/feature" "github.com/openmeterio/openmeter/pkg/currencyx" - "github.com/openmeterio/openmeter/pkg/models" + pkgmodels "github.com/openmeterio/openmeter/pkg/models" billingtest "github.com/openmeterio/openmeter/test/billing" ) @@ -137,8 +138,8 @@ func (s *StripeInvoiceTestSuite) TestComplexInvoice() { Name: "Test Customer", PrimaryEmail: lo.ToPtr("test@test.com"), Currency: lo.ToPtr(currencyx.Code(currency.USD)), - BillingAddress: &models.Address{ - Country: lo.ToPtr(models.CountryCode("US")), + BillingAddress: &pkgmodels.Address{ + Country: lo.ToPtr(pkgmodels.CountryCode("US")), }, UsageAttribution: customerentity.CustomerUsageAttribution{ SubjectKeys: []string{"test"}, diff --git a/test/billing/invoice_test.go b/test/billing/invoice_test.go index 226b43e11..e714809c6 100644 --- a/test/billing/invoice_test.go +++ b/test/billing/invoice_test.go @@ -15,6 +15,7 @@ import ( "github.com/stretchr/testify/require" "github.com/stretchr/testify/suite" + "github.com/openmeterio/openmeter/api/models" appsandbox "github.com/openmeterio/openmeter/openmeter/app/sandbox" "github.com/openmeterio/openmeter/openmeter/billing" billingadapter "github.com/openmeterio/openmeter/openmeter/billing/adapter" @@ -25,7 +26,7 @@ import ( "github.com/openmeterio/openmeter/pkg/clock" "github.com/openmeterio/openmeter/pkg/currencyx" "github.com/openmeterio/openmeter/pkg/datex" - "github.com/openmeterio/openmeter/pkg/models" + pkgmodels "github.com/openmeterio/openmeter/pkg/models" "github.com/openmeterio/openmeter/pkg/pagination" ) @@ -56,8 +57,8 @@ func (s *InvoicingTestSuite) TestPendingLineCreation() { CustomerMutate: customerentity.CustomerMutate{ Name: "Test Customer", PrimaryEmail: lo.ToPtr("test@test.com"), - BillingAddress: &models.Address{ - Country: lo.ToPtr(models.CountryCode("US")), + BillingAddress: &pkgmodels.Address{ + Country: lo.ToPtr(pkgmodels.CountryCode("US")), PostalCode: lo.ToPtr("12345"), State: lo.ToPtr("NY"), City: lo.ToPtr("New York"), @@ -442,8 +443,8 @@ func (s *InvoicingTestSuite) TestCreateInvoice() { CustomerMutate: customerentity.CustomerMutate{ Name: "Test Customer", PrimaryEmail: lo.ToPtr("test@test.com"), - BillingAddress: &models.Address{ - Country: lo.ToPtr(models.CountryCode("US")), + BillingAddress: &pkgmodels.Address{ + Country: lo.ToPtr(pkgmodels.CountryCode("US")), }, Currency: lo.ToPtr(currencyx.Code(currency.USD)), }, @@ -849,8 +850,8 @@ func (s *InvoicingTestSuite) TestInvoicingFlow() { CustomerMutate: customerentity.CustomerMutate{ Name: "Test Customer", PrimaryEmail: lo.ToPtr("test@test.com"), - BillingAddress: &models.Address{ - Country: lo.ToPtr(models.CountryCode("US")), + BillingAddress: &pkgmodels.Address{ + Country: lo.ToPtr(pkgmodels.CountryCode("US")), }, Currency: lo.ToPtr(currencyx.Code(currency.USD)), }, @@ -1190,8 +1191,8 @@ func (s *InvoicingTestSuite) TestInvoicingFlowErrorHandling() { CustomerMutate: customerentity.CustomerMutate{ Name: "Test Customer", PrimaryEmail: lo.ToPtr("test@test.com"), - BillingAddress: &models.Address{ - Country: lo.ToPtr(models.CountryCode("US")), + BillingAddress: &pkgmodels.Address{ + Country: lo.ToPtr(pkgmodels.CountryCode("US")), }, Currency: lo.ToPtr(currencyx.Code(currency.USD)), }, @@ -1313,8 +1314,8 @@ func (s *InvoicingTestSuite) TestUBPInvoicing() { CustomerMutate: customerentity.CustomerMutate{ Name: "Test Customer", PrimaryEmail: lo.ToPtr("test@test.com"), - BillingAddress: &models.Address{ - Country: lo.ToPtr(models.CountryCode("US")), + BillingAddress: &pkgmodels.Address{ + Country: lo.ToPtr(pkgmodels.CountryCode("US")), PostalCode: lo.ToPtr("12345"), State: lo.ToPtr("NY"), City: lo.ToPtr("New York"), @@ -2275,8 +2276,8 @@ func (s *InvoicingTestSuite) TestGatheringInvoiceRecalculation() { CustomerMutate: customerentity.CustomerMutate{ Name: "Test Customer", PrimaryEmail: lo.ToPtr("test@test.com"), - BillingAddress: &models.Address{ - Country: lo.ToPtr(models.CountryCode("US")), + BillingAddress: &pkgmodels.Address{ + Country: lo.ToPtr(pkgmodels.CountryCode("US")), }, Currency: lo.ToPtr(currencyx.Code(currency.USD)), UsageAttribution: customerentity.CustomerUsageAttribution{ diff --git a/test/entitlement/regression/framework_test.go b/test/entitlement/regression/framework_test.go index 5c6cd5603..e6edb7e3d 100644 --- a/test/entitlement/regression/framework_test.go +++ b/test/entitlement/regression/framework_test.go @@ -6,6 +6,7 @@ import ( "testing" "time" + "github.com/openmeterio/openmeter/api/models" "github.com/openmeterio/openmeter/openmeter/credit" grantrepo "github.com/openmeterio/openmeter/openmeter/credit/adapter" "github.com/openmeterio/openmeter/openmeter/credit/balance" @@ -25,7 +26,6 @@ import ( "github.com/openmeterio/openmeter/openmeter/watermill/eventbus" "github.com/openmeterio/openmeter/pkg/framework/entutils/entdriver" "github.com/openmeterio/openmeter/pkg/framework/pgdriver" - "github.com/openmeterio/openmeter/pkg/models" ) type Dependencies struct { diff --git a/test/notification/helpers.go b/test/notification/helpers.go index dfac5eb47..adf5dc23d 100644 --- a/test/notification/helpers.go +++ b/test/notification/helpers.go @@ -9,8 +9,8 @@ import ( "github.com/golang-jwt/jwt/v5" "github.com/oklog/ulid/v2" + "github.com/openmeterio/openmeter/api/models" "github.com/openmeterio/openmeter/openmeter/meter" - "github.com/openmeterio/openmeter/pkg/models" ) func NewSvixAuthToken(signingSecret string) (string, error) {